[
  {
    "path": ".envrc",
    "content": "export GOPATH=$PWD\nexport PATH=$GOPATH/bin:$PATH\n"
  },
  {
    "path": ".gitignore",
    "content": ".DS_Store\n*.box\n\n/bosh/bin\n/bosh/pkg\n\n/output\n/pkg\n/releases\n/src/provisioner/provision\n/src/api/api\n/pcfdev-base\n\n/bin\n!/bin/build\n!/bin/compile-release\n!/bin/fetch-assets\n!/bin/setup-packer\n\nNERD_tree_*\n\n/*.iml\n"
  },
  {
    "path": ".gitmodules",
    "content": "[submodule \"src/github.com/onsi/ginkgo\"]\n\tpath = src/github.com/onsi/ginkgo\n\turl = https://github.com/onsi/ginkgo\n[submodule \"src/github.com/onsi/gomega\"]\n\tpath = src/github.com/onsi/gomega\n\turl = https://github.com/onsi/gomega\n[submodule \"src/gopkg.in/yaml.v2\"]\n\tpath = src/gopkg.in/yaml.v2\n\turl = https://gopkg.in/yaml.v2\n[submodule \"src/github.com/cppforlife/bosh-provisioner\"]\n\tpath = src/github.com/cppforlife/bosh-provisioner\n\turl = https://github.com/pcfdev-forks/bosh-provisioner\n[submodule \"src/github.com/cppforlife/packer-bosh\"]\n\tpath = src/github.com/cppforlife/packer-bosh\n\turl = https://github.com/cppforlife/packer-bosh\n[submodule \"src/provisioner/vendor/github.com/golang/mock\"]\n\tpath = src/provisioner/vendor/github.com/golang/mock\n\turl = https://github.com/pcfdev-forks/mock\n[submodule \"src/provisioner/vendor/golang.org/x/net\"]\n\tpath = src/provisioner/vendor/golang.org/x/net\n\turl = https://github.com/golang/net\n[submodule \"src/provisioner/vendor/golang.org/x/text\"]\n\tpath = src/provisioner/vendor/golang.org/x/text\n\turl = https://github.com/golang/text\n[submodule \"src/api/vendor/gopkg.in/yaml.v2\"]\n\tpath = src/api/vendor/gopkg.in/yaml.v2\n\turl = https://github.com/go-yaml/yaml\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contributing\n\nEveryone is encouraged to help improve this project.\n\nPlease submit pull requests against the **master branch**.\n\nLimited access to our [Concourse](http://concourse.ci) CI system is available at [ci.pcfdev.io](https://ci.pcfdev.io).\n\nHere are some ways *you* can contribute:\n\n* by using nightly builds and prerelease versions\n* by reporting bugs\n* by suggesting new features\n* by writing or editing documentation\n* by writing specifications\n* by writing code (**no patch is too small**: fix typos, add comments, clean up inconsistent whitespace)\n* by refactoring code\n* by closing [issues](https://github.com/pivotal-cf/pcfdev/issues)\n* by reviewing patches\n\n## Submitting an Issue\n\nWe use the [GitHub issue tracker](https://github.com/pivotal-cf/pcfdev/issues) to track bugs and features.\nBefore submitting a bug report or feature request, check to make sure it hasn't already been submitted.\nYou can indicate support for an existing issue by voting it up.\nWhen submitting a bug report, please include a [Gist](http://gist.github.com/) that includes a stack trace and any\ndetails that may be necessary to reproduce the bug including the PCF Dev version.\n\n## Submitting a Pull Request\n\n1. Propose a change by opening an issue.\n2. Fork the project.\n3. Create a topic branch.\n4. Implement your feature or bug fix.\n5. Commit and push your changes.\n6. Submit a pull request.\n\n## Copyright\n\nSee [LICENSE](LICENSE) for details.\nCopyright (c) 2015 [Pivotal Software, Inc](http://www.pivotal.io/).\n"
  },
  {
    "path": "DEVELOP.md",
    "content": "# PCF Dev Development\n\nTo develop PCF Dev you will need to have the following tools installed:\n\n- [Packer](https://www.packer.io) v0.9.0+\n- [Virtualbox](https://www.virtualbox.org/) 5.0+\n- [Go](https://golang.org) 1.6.1+\n- [jq](https://stedolan.github.io/jq/) 1.5+\n- [spiff](https://github.com/cloudfoundry-incubator/spiff) 1.0.6+\n\n## Clone the PCF Dev source\n\n```bash\ngit clone --recursive https://github.com/pivotal-cf/pcfdev.git\n```\n\n### Building a PCF Dev Box\n\nTo build an OSS-only PCF Dev OVA, run:\n\n```bash\n./bin/build -only=virtualbox-iso # pass -debug for more output\n```\n\n> Note: Support for VMware Fusion/Workstation has been discontinued. Support for AWS is temporarily suspended until a commercial version of PCF Dev becomes available from the AWS Marketplace.\n\n### Deploying a locally-built PCF Dev box\n\nAfter the PCF Dev box has been built, you need to use the PCF Dev CLI to launch the OVA. This will disable various checks for system requirements such as system memory. More information on installation of the CLI can be found [here](http://docs.pivotal.io/pcf-dev/index.html#installing).\n\n```bash\ncf dev start -o output/output-virtualbox-iso/oss-v0.ova\n```\n\n### Customizing PCF Dev\n\nOur build tool has the ability to build compiled releases or releases from source. By default, it will try to build releases that have been compiled by the PCF Dev team. If you have a *non-compiled* release that present on your workstation, you can configure the build to use it using the **path:** key. Simply edit the versions.json file at the root of this repo like `\"cf\" :` is done below:\n\n```json\n{\n  \"releases\": {\n    \"cf\" : {\n      \"path\": \"/Users/pivotal/[path-to-release-folder]\"\n    },\n    \"diego\" : {\n      \"version\": \"v0.1480.0\",\n      \"sha1\": \"bfd87d6ef08458e19e2abc6fc6888ba9ac29fde6\",\n      \"source_location\": \"https://github.com/cloudfoundry/diego-release\",\n      \"compiled_release_url\" : \"https://s3.amazonaws.com/pcfdev/compiled-releases/diego-8d1450da393eae98d565b9e0e7154c742e75e513.tgz\"\n    },\n```\n\nIf you would like to a different *compiled* release than is offered in the versions.json, simply make sure that the appropriate keys are modified.\n\n> Note: any necessary manifest changes can be done to the manifest.yml file at the root of this repo for a successful build.\n\n## Contributing\n\nIf you are interested in contributing to PCF Dev, please refer to [CONTRIBUTING](CONTRIBUTING.md).\n\n## Copyright\n\nSee [LICENSE](LICENSE) for details.\nCopyright (c) 2015 [Pivotal Software, Inc](http://www.pivotal.io/).\n"
  },
  {
    "path": "FAQ.md",
    "content": "# Frequently Asked Questions\n\n## General Questions\n\n### What is PCF Dev?\n\nPCF Dev is a new distribution of Cloud Foundry designed to run on a developer’s laptop or workstation.  PCF Dev gives application developers the full Cloud Foundry experience in a lightweight, easy to install package.\n\n### Who should use PCF Dev?\n\nPCF Dev is intended for application developers who wish to develop and debug their application locally on a full-featured Cloud Foundry.  PCF Dev is also an excellent getting started environment for developers interested in learning and exploring Cloud Foundry.\n\n### If my application runs on PCF Dev, will it run on PCF?\n\nYes.  PCF Dev is designed to mirror PCF exactly.  If your application runs on PCF Dev, it will run on PCF with no modification in almost all cases.\n\n## Troubleshooting\n\n### Why does `cf api` and/or `cf login` fail with an \"Invalid SSL Cert\" error?\n\nPCF Dev comes with a self-signed SSL certificate for its API and requires the `--skip-ssl-validation` option.  This also applies to the Spring Boot Dashboard, which requires the checkbox \"Self-signed\" in order to connect.\n\n```\n○ → cf api api.local.cfdev.sh\nSetting api endpoint to api.local.cfdev.sh...\nFAILED\nInvalid SSL Cert for api.local.cfdev.sh\nTIP: Use 'cf api --skip-ssl-validation' to continue with an insecure API endpoint\n```\n\n## Networking\n\n### Container-to-router\n\nThis is traffic from the app container to the gorouter. It is enabled by default. This allows apps to communicate with each other by using the routes published by gorouter.\n\n### Container-to-guest\n\nThis is traffic from the app container to the virtual machine in which PCF Dev is running. It is enabled by default. This may be useful if you want to run other services inside of the guest virtual machine for your applications to use, but doing so is not encouraged. Instead, extra services should be run on the host (see below). The IP address of the guest is `192.168.11.11` or `local.cfdev.sh` (unless this address is already in use).\n\n### Container-to-host\n\nThis is traffic from the app container to the host on which the virtual machine is running. It is enabled by default. This can be used to run services on your host that are available to your apps in PCF Dev.  The IP address of the host accessible to the app is `192.168.11.1` or `host.cfdev.sh` (unless this address is already in use). For example, in order to connect your app to a MongoDB instance running on the host on port `27017`, run the following commands:\n\n```bash\ncf create-user-provided-service my-mongo-db -p '{ \"uri\": \"mongodb://<username>:<password>@host.cfdev.sh:27017/<database>\" }'\ncf bind-service <app> my-mongo-db\ncf restage <app>\n```\n\n### Container-to-external\n\nThis is traffic from the app container to a destination external to the host. It allows your application to reach the internet. Traffic to public and private IP addresses is enabled by default in PCF Dev. You may remove the `all_pcfdev` security group to restrict access to only public IP addresses, as a default PCF installation would be configured.\n\n### Container-to-container\n\nThis is traffic directly between two containers in the same PCF Dev deployment. It is useful for running applications that must communicate with each other but do not need or want a publicly-accessible route. It is not enabled and will not be available until it is supported in Pivotal Cloud Foundry.\n\n# Copyright\n\nSee [LICENSE](LICENSE) for details.\nCopyright (c) 2015 [Pivotal Software, Inc](http://www.pivotal.io/).\n"
  },
  {
    "path": "Gemfile",
    "content": "source 'https://rubygems.org'\n\ngem 'bosh_cli', '>=1.3094.0'\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 2016 Pivotal Software Inc.\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"
  },
  {
    "path": "README.md",
    "content": "# Update on PCF Dev\n\nThis is the deprecated version of PCF Dev - please visit the current Github repository https://github.com/cloudfoundry-incubator/cfdev for the latest updates\n\n*************************************************************\n\n# PCF Dev\n\nPCF Dev is a new distribution of Cloud Foundry designed to run on a developer’s laptop or workstation.  PCF Dev gives application developers the full Cloud Foundry experience in a lightweight, easy to install package.  PCF Dev is intended for application developers who wish to develop and debug their application locally on a full-featured Cloud Foundry.  PCF Dev is also an excellent getting started environment for developers interested in learning and exploring Cloud Foundry.\n\n> More information about the project can be found on the [FAQ](FAQ.md#general-questions).\n\n## Open Source\n\nThis repository contains source code that allows developers to build an open source version of PCF Dev that only contains the Elastic Runtime and the CF MySQL Broker. The binary distribution of PCF Dev that is available on the [Pivotal Network](https://network.pivotal.io/) contains other PCF components (such as the Redis, RabbitMQ and Spring Cloud Services marketplace services as well as Apps Manager) that are not available in this repository.\n\nHowever, we encourage you to leave any feedback or issues you may encounter regarding the full, binary distribution of PCF Dev in [this repository's Github issues](https://github.com/pivotal-cf/pcfdev/issues).\n\n## Install\n\n1. Download the latest `pcfdev-VERSION-PLATFORM.zip` from the [Pivotal Network](https://network.pivotal.io/).\n1. Unzip the zip file and navigate to its containing folder using PowerShell or a Unix terminal.\n1. Run the extracted binary.\n1. Run `cf dev start`.\n\n> Check out the [documentation](https://docs.pivotal.io/pcf-dev/) for more information. Running `cf dev help` will display an overview of PCF Dev VM management commands.\n\n### Prerequisites\n\n* [CF CLI](https://github.com/cloudfoundry/cli)\n* [VirtualBox](https://www.virtualbox.org/): 5.0+\n* Internet connection (or [Dnsmasq](http://www.thekelleys.org.uk/dnsmasq/doc.html) or [Acrylic](http://mayakron.altervista.org/wikibase/show.php?id=AcrylicHome)) required for wildcard DNS resolution\n\n### Using the Cloud Foundry CLI Plugin\n\nFollow the instructions provided at the end of `cf dev start` to connect to PCF Dev:\n\n```\nDownloading VM...\nProgress: |====================>| 100%\nVM downloaded\nImporting VM...\nStarting VM...\nProvisioning VM...\nWaiting for services to start...\n40 out of 40 running\n _______  _______  _______    ______   _______  __   __\n|       ||       ||       |  |      | |       ||  | |  |\n|    _  ||       ||    ___|  |  _    ||    ___||  |_|  |\n|   |_| ||       ||   |___   | | |   ||   |___ |       |\n|    ___||      _||    ___|  | |_|   ||    ___||       |\n|   |    |     |_ |   |      |       ||   |___  |     |\n|___|    |_______||___|      |______| |_______|  |___|\nis now running.\nTo begin using PCF Dev, please run:\n    cf login -a https://api.local.pcfdev.io --skip-ssl-validation\nAdmin user => Email: admin / Password: admin\nRegular user => Email: user / Password: pass\n```\n\n> The `local.pcfdev.io` domain may differ slightly for your PCF Dev instance.\n\nTo stage a simple app on PCF Dev, `cd` into the app directory and run `cf push <APP_NAME>`.\n\nSee cf documentation for information on [deploying apps](http://docs.cloudfoundry.org/devguide/deploy-apps/) and [attaching services](http://docs.cloudfoundry.org/devguide/services/).\n\n### Using a customized PCF Dev OVA\n\nSpecify the path to the custom built OVA with the `-o flag` to the `cf dev start` command.\n\n```\n$ cf dev start -o /path/to/custom/ova\nImporting VM...\nStarting VM...\nProvisioning VM..\n...\n```\n\nTo build a custom PCF Dev OVA, please see our [DEVELOP](./DEVELOP.md) Documentation.\n\n## Uninstall\n\nTo temporarily stop PCF Dev run `cf dev stop`.\n\nTo destroy your PCF Dev VM run `cf dev destroy`.\n\nTo uninstall the PCF Dev cf CLI plugin run `cf uninstall-plugin pcfdev`\n\n## Contributing\n\nIf you are interested in contributing to PCF Dev, please refer to the [contributing guidelines](CONTRIBUTING.md) and [development instructions](DEVELOP.md).\n\n# Copyright\n\nSee [LICENSE](LICENSE) for details.\nCopyright (c) 2016 [Pivotal Software, Inc](http://www.pivotal.io/).\n\nPCF Dev uses a version of Monit that can be found [here](https://github.com/pivotal-cf/pcfdev-monit), under the GPLv3 license.\n"
  },
  {
    "path": "assets/keys/key.pem",
    "content": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+eYPNeh/gldZCxXCXBmlAUWgJdRTTNClCAx8yV26/hdLjbZGg1StjwOVkUupxpG+5ghm7mxnz6xQUJH+AdzZVXrHaixMl4jwf8RrsTu7OJj/zDjoKNUX9vH6SZzTifUfCigixHJQwOoA+hCJCIbrzh0z2Vvvtn+G/adEFhNwdSl+RaGfuNSh04bTOS7CrPrmPGE2sE192+PMoh+sE5E6RKivWcR0tLR58OA/MN1SEH3LNrKrmxYi4qebp1HxXJTac4nuegqoDdSEUnjdCjZPRdeZiKy/L3B3BAT0+P646IJzwQHv3kUHwVnfBwI3COcEZPwctUOBl/JjyagjJyx5P pcfdev insecure key\n"
  },
  {
    "path": "assets/scripts/common",
    "content": "monit=\"/var/vcap/bosh/bin/monit\"\n\nmonit_summary() { while output=$($monit summary 2>&1) && [[ $output = *\"error connecting to the monit daemon\"* ]]; do sleep 1; done; echo \"$output\"; }\ntotal_services() { monit_summary | grep -E '^(Process|File|System)' | wc -l; }\nstarted_service_count() { started_services | wc -l; }\nstarted_services() { monit_summary | grep -E '(running|accessible|Timestamp changed|PID changed)' | awk '{print $2}' | tr -d \"'\"; }\nstopped_service_count() { stopped_services | wc -l; }\nstopped_services() { monit_summary | grep 'not monitored' | grep -v 'pending' | awk '{print $2}' | tr -d \"'\"; }\ncc_status_code() { curl -s -I -o /dev/null -w %{http_code} -H \"Host: api.$1\" http://localhost/v2/info; }\navailable_buildpacks() { cf curl /v2/buildpacks | jq '.resources | map(select(.entity.filename | length > 0)) | length'; }\nwait_for_monit_to_start() { while [[ $(total_services) = 0 ]]; do sleep 1; done; }\nwait_for_monit_to_stop() { while [[ $(total_services) != 0 ]]; do sleep 1; done; }\nwait_for_services_to_stop() { while [[ $(stopped_service_count) -lt $(total_services) ]]; do sleep 1; done; }\n\nstart_services() {\n  for service in $@; do\n    $monit start $service\n  done\n\n  for service in $@; do\n    while ! monit_summary | grep $service | grep -q running; do sleep 1; done;\n  done\n}\n\nstart_remaining() { \n  for service in $(stopped_services); do\n    $monit start $service\n  done\n}\n\nmove_monit_control_files() {\n  find /var/vcap/monit/job -name '*.monitrc' | grep -v pcfdev | xargs rm -f\n\n  for file in $(ls /var/vcap/jobs/*/monit)\n  do\n    local dirname=$(dirname $file)\n    local jobname=$(basename $dirname)\n    local destination_path=\"/var/vcap/monit/job/$(next_monit_index)-${jobname}.monitrc\"\n    cp $file $destination_path\n    sed -i '/group vcap/a\\ \\ mode manual' $destination_path\n  done\n}\n\nexists_in_monit() {\n  grep $1 /var/vcap/monit/job/* -q\n}\n\nfind_monit_file() {\n  grep $1 /var/vcap/jobs/*/monit -l\n}\n\nnext_monit_index(){\n  printf %04d $(ls /var/vcap/monit/job/ | wc -l)\n}\n\nrestart_service() {\n  local service=$1\n  $monit restart $service\n  while ! monit_summary | grep $service | grep -v pending | grep -q running; do sleep 1; done;\n}\n\nupdate_service_broker() {\n  local broker_name=$1\n  local broker_url=$2\n  echo \"Service broker already exists - updating broker\"\n  cf update-service-broker ${broker_name} admin admin ${broker_url}\n}\n\ncreate_service_broker() {\n  local broker_name=$1\n  local broker_url=$2\n  echo \"Service broker does not exist - creating broker\"\n  cf create-service-broker ${broker_name} admin admin ${broker_url}\n}\n\nsetup_service_broker() {\n  local broker_name=$1\n  local broker_url=$2\n  while [[ $(curl -s -o /dev/null -u admin:admin -w %{http_code} ${broker_url}/v2/catalog) != 200 ]]; do\n    sleep 1\n  done\n  create_service_broker $broker_name $broker_url || update_service_broker $broker_name $broker_url\n  cf enable-service-access ${broker_name}\n}\n"
  },
  {
    "path": "assets/scripts/health-check",
    "content": "#!/bin/bash\n\nset -e\n\nsource /var/pcfdev/common\n\ndomain=$(cat /var/pcfdev/domain)\nstatus_code=$(cc_status_code ${domain})\nservice_count=$(total_services)\n\nif [[ ${status_code} == \"200\" && -f \"/run/pcfdev-healthcheck\" ]]\nthen\n  echo -n 'ok'\n  exit 0\nfi\n\nexit 1\n"
  },
  {
    "path": "assets/scripts/reset",
    "content": "#!/bin/bash\n\nset -e\n\n\nexec 3>&1 4>&2 >>/var/pcfdev/reset.log 2>&1\nset -x\n\nsource /var/pcfdev/common\n\nif status runsvdir | grep -q 'start/running'; then\n  wait_for_monit_to_start\n\n  $monit stop all\n\n  >&3 echo \"Waiting for services to stop...\"\n  wait_for_services_to_stop\n\n  stop runsvdir\n\n  wait_for_monit_to_stop\nfi\n\n>&3 echo \"Services stopped. Resetting data...\"\nrm -rf /var/vcap/nfs /var/vcap/data/{compile,tmp}\n\n>&3 echo \"Deleting stale state files not needed for mysql migrations\"\nfind /var/vcap/store/* -maxdepth 0 ! -name \"*.sql\" | xargs rm -rf\n\nset +x\nexec 1>&3 2>&4\n"
  },
  {
    "path": "assets/scripts/run",
    "content": "#!/bin/bash\n\nset -e\n\nif [[ -z $1 ]] || [[ -z $2 ]]; then\n    >&2 echo \"Usage:\"\n    >&2 echo -e \"\\t$0 <domain> <public-ip> <service1,service2> <docker-registry1,docker-registry2>\"\n    exit 1\nfi\n\nexec 3>&1 4>&2 >>/var/pcfdev/provision.log 2>&1\nset -x\n\nrm -f /run/pcfdev-healthcheck\n\nsource /var/pcfdev/common\n\ndomain=$1\npublic_ip=$2\nservices=$3\nregistries=$4\n\nif [[ -x /var/pcfdev/pre-run ]]; then\n  /var/pcfdev/pre-run \"$domain\" \"$services\"\nfi\n\n\n>&3 /var/pcfdev/stop\n\nrm -f /var/vcap/bosh/agent_state.json\n\n# Add self-signed cert to existing trusted certs\nif [[ ! -f /var/pcfdev/trusted_ca.crt ]]; then\n  cp /var/vcap/jobs/cflinuxfs2-rootfs-setup/config/certs/trusted_ca.crt /var/pcfdev/trusted_ca.crt\nfi\ncat /var/pcfdev/trusted_ca.crt /var/vcap/jobs/gorouter/config/cert.pem > /var/vcap/jobs/cflinuxfs2-rootfs-setup/config/certs/trusted_ca.crt\n/var/vcap/jobs/cflinuxfs2-rootfs-setup/bin/pre-start\n\n# Replace the old system domain / IP with the new system domain / IP\n\nconfig_files=$(find /var/vcap/jobs/*/ /var/vcap/monit/job -type f)\n\nold_domain=$(cat /var/pcfdev/domain)\nperl -p -i -e \"s/\\\\Q$old_domain\\\\E/$domain/g\" $config_files\necho \"$domain\" > /var/pcfdev/domain\n\nsed -i '/\\/proc\\/sys\\/net\\/ipv4\\/ip_local_port_range/d' /var/vcap/jobs/gorouter/bin/gorouter_ctl\n\n# Point garden at HTTP_PROXY and HTTPS_PROXY\npcfdev_http_proxy=$(. /etc/environment && echo \"$HTTP_PROXY\")\npcfdev_https_proxy=$(. /etc/environment && echo \"$HTTPS_PROXY\")\nif [[ ! -z $pcfdev_http_proxy || ! -z $pcfdev_https_proxy ]]; then\n  perl -p -i -e \"s/^export.*(http|https|no)_proxy=.*\\n//i\" /var/vcap/jobs/garden/bin/garden_ctl\n  result=$(grep -i '\\(http\\|https\\|no\\)_proxy=' /etc/environment | xargs -I {} echo 'export {}\\n' | tr -d '\\n')\n  if [[ -n \"$result\" ]]; then\n    sed -i \"/set -x/a$result\" /var/vcap/jobs/garden/bin/garden_ctl\n  fi\nfi\n\n# Fix CC temporary directory\nmkdir -p /tmp/cc_tmp\nchgrp vcap /tmp/cc_tmp\nchmod 1777 /tmp/cc_tmp\ncc_worker_ctl=/var/vcap/jobs/cloud_controller_ng/bin/cloud_controller_worker_ctl\ngrep -q 'export TMPDIR=\\/tmp\\/cc_tmp' \"$cc_worker_ctl\" || sed -i '2iexport TMPDIR=/tmp/cc_tmp' \"$cc_worker_ctl\"\n\n# Add registries to insecure_docker_registries\nif [[ -n \"$registries\" ]]; then\n  perl -p -i -e \"s/.*-insecureDockerRegistry=.*\\n//i\" /var/vcap/jobs/garden/bin/garden_ctl\n\n  insecureDockerRegistryOptions=\"\"\n  for registry in $(echo \"$registries\" | tr ',' '\\n'); do\n    insecureDockerRegistryOptions=\"${insecureDockerRegistryOptions}--insecure-docker-registry=$registry \"\n  done\n\n  if [[ -n \"$insecureDockerRegistryOptions\" ]]; then\n    sed -i \"\\|/var/vcap/packages/guardian/bin/guardian|a$insecureDockerRegistryOptions \\\\\\\\\" /var/vcap/jobs/garden/bin/garden_ctl\n  fi\n\n  stager_config=$(jq \\\n    --arg registries \"$registries\" \\\n    '.insecure_docker_registries=($registries | split(\",\"))' \\\n    /var/vcap/jobs/stager/config/stager_config.json\n  )\n  echo \"$stager_config\" > /var/vcap/jobs/stager/config/stager_config.json\nfi\n\n>&3 2>&4 /var/pcfdev/start \"$domain\"\n\ncf api \"https://api.$domain\" --skip-ssl-validation\ncf auth admin admin\n\ncf create-org pcfdev-org\ncf create-space pcfdev-space -o pcfdev-org\ncf target -o pcfdev-org -s pcfdev-space\n\ncf create-user user pass\ncf set-org-role user pcfdev-org OrgManager\ncf set-space-role user pcfdev-org  pcfdev-space SpaceManager\ncf set-space-role user pcfdev-org  pcfdev-space SpaceDeveloper\ncf set-space-role user pcfdev-org  pcfdev-space SpaceAuditor\n\n[[ $domain != $old_domain ]] && cf delete-shared-domain \"$old_domain\" -f\n\nif [[ $(cf curl /v2/shared_domains | jq -r \".resources[] | select(.entity.name == \\\"tcp.$domain\\\").entity.name\") == \"\" ]]\nthen\n  cf create-shared-domain tcp.$domain --router-group default-tcp\n  quota_definition_url=$(cf curl /v2/quota_definitions?q=name:default | jq -r .resources[0].metadata.url)\n  cf curl $quota_definition_url -X PUT -d '{\"total_routes\": 100}'\n  cf curl $quota_definition_url -X PUT -d '{\"total_reserved_route_ports\": -1}'\nfi\n\ncf enable-feature-flag diego_docker\n\nif [[ ! -z $pcfdev_http_proxy ]] || [[ ! -z $pcfdev_https_proxy ]]; then\n  proxy_environment_variables=$(\n    echo -n \"{\"\n    grep -i '\\(http\\|https\\|no\\)_proxy=' /etc/environment | sed -e 's/\\(.*\\)=\\(.*\\)/\"\\1\": \"\\2\"/' | paste -sd \",\" -\n    echo -n \"}\"\n  )\n  cf set-staging-environment-variable-group \"$proxy_environment_variables\"\n  cf set-running-environment-variable-group \"$proxy_environment_variables\"\nfi\n\nwhile [[ $(available_buildpacks) -lt 8 ]]; do\n  sleep 1\ndone\n\nsetup_service_broker p-mysql http://mysql-broker.$domain\nsetup_service_broker local-volume http://localbroker.$domain\n\nif [[ -x /var/pcfdev/post-run ]]; then\n  /var/pcfdev/post-run \"$domain\" \"$services\"\nfi\n\nset +x\nexec 1>&3 2>&4\n"
  },
  {
    "path": "assets/scripts/start",
    "content": "#!/bin/bash\n\nset -e\n\nif [[ -z $1 ]]; then\n    >&2 echo \"Usage:\"\n    >&2 echo -e \"\\t$0 <domain>\"\n    exit 1\nfi\n\nexec 3>&1 4>&2 >>/var/pcfdev/provision.log 2>&1\nset -x\nsource /var/pcfdev/common\n\ndomain=$1\n\n>&3 echo \"Waiting for services to start...\"\n\nmove_monit_control_files\nstart runsvdir\nwait_for_monit_to_start\n\n/var/vcap/jobs/mysql/bin/pre-start\n\nstart_services mariadb_ctrl galera-healthcheck\n\nwhile ! nc -z 127.0.0.1 3306; do\n  sleep 1\ndone\n\n/var/vcap/jobs/consul_agent/bin/pre-start\n\nstart_services consul_agent\n\nfor script in $(ls /var/vcap/jobs/*/bin/pre-start | grep -v '/mysql/' | grep -v '/consul_agent/'); do\n  $script\ndone\n\nstart_services garden etcd uaa\n\nwhile [[ ! /var/vcap/jobs/uaa/bin/dns_health_check ]]; do\n  sleep 1\ndone\n\nstart_services bbs\n\nstart_remaining\n\ntotal=$(total_services)\n\nwhile started=$(started_service_count) && [[ $started -lt $total ]]; do\n  counter=$(($counter + 1))\n  [[ $(($counter % 60)) = 0 ]] && >&3 echo \"$started out of $total running\"\n  sleep 1\ndone\n>&3 echo \"$total out of $total running\"\n\nwhile [[ $(cc_status_code \"$domain\") != 200 ]]; do\n  sleep 1\ndone\n\nfor script in /var/vcap/jobs/*/bin/post-start\ndo\n  $script\ndone\nexec 1>&3 2>&4\n"
  },
  {
    "path": "assets/scripts/stop",
    "content": "#!/bin/bash\n\nset -e\nexec 3>&1 4>&2 >>/var/pcfdev/provision.log 2>&1\nset -x\n\nsource /var/pcfdev/common\n\nif status runsvdir | grep -q 'start/running'; then\n  >&3 echo \"Waiting for services to stop...\"\n  wait_for_monit_to_start\n  $monit stop all\n  wait_for_services_to_stop\n  stop runsvdir\n  wait_for_monit_to_stop\nfi\n"
  },
  {
    "path": "manifest.yml",
    "content": "---\nname: pcfdev\n\nreleases:\n- name: capi\n  version: 0\n  url: file:///opt/bosh-provisioner/assets/releases/capi-0.tgz\n- name: loggregator\n  version: 0\n  url: file:///opt/bosh-provisioner/assets/releases/loggregator-0.tgz\n- name: nats\n  version: 0\n  url: file:///opt/bosh-provisioner/assets/releases/nats-0.tgz\n- name: uaa\n  version: 0\n  url: file:///opt/bosh-provisioner/assets/releases/uaa-0.tgz\n- name: consul\n  version: 0\n  url: file:///opt/bosh-provisioner/assets/releases/consul-0.tgz\n- name: nodejs-buildpack\n  version: 0\n  url: file:///opt/bosh-provisioner/assets/releases/nodejs-buildpack-0.tgz\n- name: java-offline-buildpack\n  version: 0\n  url: file:///opt/bosh-provisioner/assets/releases/java-offline-buildpack-0.tgz\n- name: php-buildpack\n  version: 0\n  url: file:///opt/bosh-provisioner/assets/releases/php-buildpack-0.tgz\n- name: ruby-buildpack\n  version: 0\n  url: file:///opt/bosh-provisioner/assets/releases/ruby-buildpack-0.tgz\n- name: binary-buildpack\n  version: 0\n  url: file:///opt/bosh-provisioner/assets/releases/binary-buildpack-0.tgz\n- name: go-buildpack\n  version: 0\n  url: file:///opt/bosh-provisioner/assets/releases/go-buildpack-0.tgz\n- name: python-buildpack\n  version: 0\n  url: file:///opt/bosh-provisioner/assets/releases/python-buildpack-0.tgz\n- name: staticfile-buildpack\n  version: 0\n  url: file:///opt/bosh-provisioner/assets/releases/staticfile-buildpack-0.tgz\n- name: cf\n  version: 0\n  url: file:///opt/bosh-provisioner/assets/releases/cf-0.tgz\n- name: etcd\n  version: 0\n  url: file:///opt/bosh-provisioner/assets/releases/etcd-0.tgz\n- name: cf-networking\n  version: 0\n  url: file:///opt/bosh-provisioner/assets/releases/cf-networking-0.tgz\n- name: garden-runc\n  version: 0\n  url: file:///opt/bosh-provisioner/assets/releases/garden-runc-0.tgz\n- name: diego\n  version: 0\n  url: file:///opt/bosh-provisioner/assets/releases/diego-0.tgz\n- name: cf-mysql\n  version: 0\n  url: file:///opt/bosh-provisioner/assets/releases/cf-mysql-0.tgz\n- name: cflinuxfs2\n  version: 0\n  url: file:///opt/bosh-provisioner/assets/releases/cflinuxfs2-rootfs-0.tgz\n- name: routing\n  version: 0\n  url: file:///opt/bosh-provisioner/assets/releases/routing-0.tgz\n- name: local-volume\n  version: 0\n  url: file:///opt/bosh-provisioner/assets/releases/local-volume-0.tgz\n\nnetworks:\n- name: default\n  type: local\n\nupdate:\n  update_watch_time: 60000 - 1200000\n\ncompilation:\n  network: default\n\njobs:\n- name: pcfdev\n  instances: 1\n  persistent_disk: 1024\n\n  networks:\n  - name: default\n\n  templates:\n  - name: mysql\n    release: cf-mysql\n  - name: cf-mysql-broker\n    release: cf-mysql\n\n  - name: garden\n    release: garden-runc\n  - name: etcd\n    release: etcd\n\n  - name: gorouter\n    release: routing\n  - name: route_registrar\n    release: routing\n  - name: routing-api\n    release: routing\n  - name: tcp_emitter\n    release: routing\n  - name: tcp_router\n    release: routing\n\n  - name: auctioneer\n    release: diego\n  - name: file_server\n    release: diego\n  - name: rep\n    release: diego\n  - name: route_emitter\n    release: diego\n  - name: ssh_proxy\n    release: diego\n  - name: bbs\n    release: diego\n  - name: cfdot\n    release: diego\n\n  - name: cflinuxfs2-rootfs-setup\n    release: cflinuxfs2\n\n  - name: stager\n    release: capi\n  - name: nsync\n    release: capi\n  - name: tps\n    release: capi\n  - name: cc_uploader\n    release: capi\n  - name: cloud_controller_clock\n    release: capi\n  - name: cloud_controller_ng\n    release: capi\n  - name: cloud_controller_worker\n    release: capi\n  - name: blobstore\n    release: capi\n\n  - name: nats\n    release: nats\n\n  - name: uaa\n    release: uaa\n\n  - name: consul_agent\n    release: consul\n\n  - name: nodejs-buildpack\n    release: nodejs-buildpack\n  - name: java-offline-buildpack\n    release: java-offline-buildpack\n  - name: php-buildpack\n    release: php-buildpack\n  - name: binary-buildpack\n    release: binary-buildpack\n  - name: go-buildpack\n    release: go-buildpack\n  - name: python-buildpack\n    release: python-buildpack\n  - name: ruby-buildpack\n    release: ruby-buildpack\n  - name: staticfile-buildpack\n    release: staticfile-buildpack\n\n  - name: syslog_drain_binder\n    release: loggregator\n  - name: metron_agent\n    release: loggregator\n  - name: doppler\n    release: loggregator\n  - name: loggregator_trafficcontroller\n    release: loggregator\n\n  - name: localdriver\n    release: local-volume\n  - name: localbroker\n    release: local-volume\n\n  - name: netmon\n    release: cf-networking\n  - name: vxlan-policy-agent\n    release: cf-networking\n  - name: policy-server\n    release: cf-networking\n  - name: garden-cni\n    release: cf-networking\n  - name: silk-cni\n    release: cf-networking\n  - name: silk-daemon\n    release: cf-networking\n  - name: silk-controller\n    release: cf-networking\n\nproperties:\n  <<: (( merge ))\n  support_address: pcfdev@pivotal.io\n  domain: local.pcfdev.io\n  system_domain: local.pcfdev.io\n  app_domains: [local.pcfdev.io]\n  system_domain_organization: pcfdev-org\n  name: pcfdev\n  ssl:\n    skip_cert_verify: true\n  skip_ssl_validation: true\n\n  capi:\n    cc_uploader:\n      listen_addr: 127.0.0.1:9090\n      debug_addr: 127.0.0.1:17018\n      cc:\n        job_polling_interval_in_seconds: 5\n        ca_cert: |\n          -----BEGIN CERTIFICATE-----\n          MIIE/DCCAuSgAwIBAgIBATANBgkqhkiG9w0BAQsFADAeMRwwGgYDVQQDExN0ZXN0\n          LWNjLXVwbG9hZGVyLWNhMB4XDTE3MDMzMDIzNTAxOFoXDTI3MDMzMDIzNTAyNlow\n          HjEcMBoGA1UEAxMTdGVzdC1jYy11cGxvYWRlci1jYTCCAiIwDQYJKoZIhvcNAQEB\n          BQADggIPADCCAgoCggIBAN3Pa74Y46cXWmhQtXpp0sIpHtd80QI/zuTkU0TB8Jzg\n          O+ehnRMpeetCr+0YsKeIM0l1WQHt0zBmUi1emc4OcABnXE/Qp3SQuO3u3emi+g+k\n          svG3Kb5gSOswHPlR3EjvCeB38SS3A0bxnvJMbKPlXvhhtkzWRoZDSlxjHWzeSJ8u\n          XPjuMSPP+Tr+97rtelbufyEta61sr1ahwoBJHFnre2s7KdiG34AOBzbBb8GoAtQ7\n          IpHHyQQzVTT/YNjdgmHz57uIptbWwBXch0hxBiMleb87Zxpx6EEt4GzSyOt8Qkcp\n          Ja0z68SEaL0P92G92Os1jvfiBFVos+q0IPnvIhCvAgh2LojjBHRVSSGlBHSLEd/D\n          dzaXuYBJrpxoHl0eRZGGa39BJY/gsvOgJ27xFB8kN3PCYSRekF4tuxkWFOmPGLKc\n          TC6jYHG1SIReZgouX16i4lwlejNf+f1La0ZCEr13neaaSZmpd87DNMaQkw+vovUO\n          oUeLCFPknOOFFQiKrI1SmLPjo+0hJPZa0CKz7Jp7ynLBSA5JZDYzf6asxTYvaD2E\n          fjQV+Ucz/blDCbsZrH4HxN42jACYg0sWUQOdyLaTrOpo67k8iPxeizg1pRrIP4U1\n          emnMjAbW2hZOZdIR2Rel1XfwW99rBD7ejun53l+gNUIkyi7XMz4OE3/fHO1+X4gx\n          AgMBAAGjRTBDMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMB0G\n          A1UdDgQWBBRXlmY9gLcIn9KN+RojBbl5j5KVVzANBgkqhkiG9w0BAQsFAAOCAgEA\n          JwOX8/GXfnNt/9YjSlORbwKWYKrigNatGzvOqrbROnueyQkWCOsKXrqX+ol4DOpO\n          2I+JYdparoqvyAhNKaNsKfW8E4VOta4bIvh0oFQPJXrQAhdHocyTCIX18qbp6zIN\n          AEJLdDvjeBCEo2t/Ip1Ly5bhFCfGeP7LU36tD3T15/8eEARwQ7v3tczBKM3NQ5ON\n          lnHOheXKdAQcJou8kJ1x+n/Cy2MR/86qJV6R2OixXvWiHK3c8P9goREPPELPc5p9\n          ylYsCMgRBiBA1YKRVExH8YCNMF+Rz4U6zWaJ9HfVEHNI3fm2w5FwzwErmdVutszp\n          dpTUr2jjihxFnduP9vA7Y79EEgFZ7NT/KLlUBXyfiYSu4nwRzV8h+RKZYD+XIFeB\n          FgQPSMbrNG2hOviTPq1ACkoH2vEV4WGYrjvGT/kTl1W5pzVbjE+Ja5aLRm1X7QbU\n          f+X38/n4N5yEMd/q7WvCzlq0BMhy28iMjzSdPKw4c/R5LwltCq6VNzjjwm4WdC3l\n          l9CE4RhwFrZQl1YViX0rB8GKOMihyhGLS5jctIYLUS+vDjZzh/m4SS9QArnSph+I\n          tNahrxZZaiLE0RFViIV6Oi3ek1qmxTjYunNU/fVxuLvlHYNzHqvPLTDu6IS3zu4o\n          IuYvX8gxa8VkMJUQvtlOTG4HSj4LmU75f/SOsogld4o=\n          -----END CERTIFICATE-----\n        client_cert: |\n          -----BEGIN CERTIFICATE-----\n          MIIELzCCAhegAwIBAgIRANl6/eH1wRl29GgiXTULy/YwDQYJKoZIhvcNAQELBQAw\n          HjEcMBoGA1UEAxMTdGVzdC1jYy11cGxvYWRlci1jYTAeFw0xNzAzMzAyMzUyNTRa\n          Fw0xOTAzMzAyMzUyNTRaMBUxEzARBgNVBAMTCmNsaWVudE5hbWUwggEiMA0GCSqG\n          SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDEToHAV8xJ2gCXVuwZWJVq/zz/VcGCy/GS\n          Cin7b3cEA22bWYYUCvJy4mVWETFg68gCVcAWwNelA6ByoGsNJqg/nMiVzx6vg6NA\n          6hhZX+8QjXL8QB4vtEtOPUCw1WowmjC2760lBdl5vQr8fj57epCxGE52ZL0+tY98\n          I1yaW/t2tEIeithCxb52o7OvrmsDyi+PINbfEUem6DkOkPVdqnHRGqIr1uisF5Qe\n          SVjWbT2dLZw+G87N7CysksyiCczFX32HjrlBMEZyXZsLAy0i/AZOdUO40yE5BzT0\n          AiFTTS9gNU3XE2xiILvZzVeLqa+yuqbwws4YQIi7OBoqa7j+LAxlAgMBAAGjcTBv\n          MA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIw\n          HQYDVR0OBBYEFOK4eo4nD4maNMLLiFEr73PwaWvuMB8GA1UdIwQYMBaAFFeWZj2A\n          twif0o35GiMFuXmPkpVXMA0GCSqGSIb3DQEBCwUAA4ICAQCt+5rcsZjgBUHvNP1Z\n          89eqXonqDLa59aupdM3SKtnVdvPAClinhLeTQOBeMJIVxa3F4j6JAymHl+REtStq\n          0Oxl7rKk8wEeVFljA2ntfdp/hy8xASO93o0W3jafKEsqRa3VHzV6e4YOZeejPGri\n          JIL/4Fm2nR+9yzS4+/y2EwCsflW12CaVFBYVRzUrsILM+SN2r+ST3v0jtJnRotcD\n          Dv3FcPxMbODcLhwKTvmxDpLK/rkKkf/OKa2/7kPPooXV8gcgiRKA3za8zX2Ch9nl\n          9rG7JNZ3bsJVY5SCybgqf1QUXfe9ILeUL5Gu+2JP0Ms4JuT89r8iShvQm5t32wuV\n          3mZsfKI8iyPXcZoWmZZrxUjY76lo/CCSAA/IF36tSkJHm3D7xJPNSXVkv8LIHFEu\n          pXU5uzkJWOeAWqsKMzHrycmLBGmWqKlleDOnUUU7bEZUHYu1HAXB++dZc4JDC99s\n          nt8FpJv54xJrkesNiPyoOKpONFtIpD0HTWAF/3hKhZntOMoHN8/axFiTmCtFbtph\n          K9oWDM0Fqqv7xTkcMVmJYiBxwtlctXbUjD6R3HpX5SgP0HryZ2hfbz8qp0Mw+J2+\n          oaxH9Cvtduw/gKQgHpK10FMosJmzmxvl1lcSRxEIHOV4wmUXR8gSw46L3+fYR29u\n          bTpi2XcempkmVbezvOGXVY2BqA==\n          -----END CERTIFICATE-----\n        client_key: |\n          -----BEGIN RSA PRIVATE KEY-----\n          MIIEpAIBAAKCAQEAxE6BwFfMSdoAl1bsGViVav88/1XBgsvxkgop+293BANtm1mG\n          FArycuJlVhExYOvIAlXAFsDXpQOgcqBrDSaoP5zIlc8er4OjQOoYWV/vEI1y/EAe\n          L7RLTj1AsNVqMJowtu+tJQXZeb0K/H4+e3qQsRhOdmS9PrWPfCNcmlv7drRCHorY\n          QsW+dqOzr65rA8ovjyDW3xFHpug5DpD1Xapx0RqiK9borBeUHklY1m09nS2cPhvO\n          zewsrJLMognMxV99h465QTBGcl2bCwMtIvwGTnVDuNMhOQc09AIhU00vYDVN1xNs\n          YiC72c1Xi6mvsrqm8MLOGECIuzgaKmu4/iwMZQIDAQABAoIBAQCCKcgRAGZdxaZE\n          swcD21/fvXP1nigckRwRiJnDtWoGCDviGR81JPkTwhgNVIMYT96j5bXjoGScbuYx\n          ezrgUnSXEV9TLi2blT5naZFRmbHLmO7YYa9iVDrmmujNGAU8StDoS83T0agc94NU\n          XmURvPg55PMJv8xXy01js5LQaxM25i/vyBggNOVmQBdDshp77OXsewUBzZLFQR1p\n          G3WUGn51U0/G8gSPLk+diTQrlvtzl0/3gyeBOmGEVU0OjZvgMEEbxLihLpVirCGY\n          Q52SuTovJm4Na6FvTEPGwBQDQd++ukVLaU1OzBxKEm8Rh0JQ7toEJ2MFIQkXqG+I\n          cgbMbA2BAoGBAOJtrfZ9JDHndCRTMGPQHPP0qHOnmCSKfwAYzTV69hxkA++c4/PC\n          TVrrcp1sRxVKYz8UeI/5CyPcUoQGFfcI6VioQ8Y6faqbTSZBPwCY2mNXMqSLLb5M\n          4pZ0l1e5BS+WKjkxYFdpcgylDFVA1gESwocny58VJV0QiLcwWFsYZadFAoGBAN3x\n          v26+2CUKBPC8xm3odMpkElsYBdaJ7yFe25A9kbJBCrhdlRiMMq4+sV9ENwwVb37Z\n          aspZdcgYUBBQb47wAJ6kZ+Pkcf3C5VTWjgSAVejJGved/f7/RHphBQfyXc1kjOjj\n          wN/wTXxbxEueo2w3+8hpzy6DpRTFBvghNpIkvxKhAoGBAL3FbOrMYVyN/tI/Aqx1\n          DP8Ny2z7RtFBXkWng73R65lJ3d6iII75BzovYSU9TaozaVDCCHWqJcMNcf8C1r/v\n          sRrEE+F8vjwR4ywvvOz0LvzZZTFxEIqRB8tPtlQoVodWlNbQYk2Aq7ybS+Xb7ECE\n          B5OdL9SJtYH1TJA0LalTnkb9AoGAUol4m4K1dvDG7ZAGaxErfajBesbwRNx+5XYV\n          SQrch+HQTsfejoZ0wn/mDnubzQ6brBzGrgGe347LF4YSNqHiWRzi1ck66xfzmR1B\n          K0Ner3c6ZCOJNa9QlAJIkK/9Wkiubl1keOMwrbKiyUxxkekv5VQUDERAu/yZnuUb\n          GjY4KIECgYBM8kSpb3MNFEpTJOg6IlfIQYavO42DJ4OIwOIC7dXKGxTjTSg0EXpH\n          DAVYQ59ALtjLzrDB4e6d/7MdQG1MBDfVahREg+BwxMgsaj+creWuUj0WzFDyj6jx\n          n/wyed0oRrl5j8HeVqqvPwHMHlJyJEACIRQWgYTRYuCoXYhFX1GeFw==\n          -----END RSA PRIVATE KEY-----\n      mutual_tls:\n        ca_cert: |\n          -----BEGIN CERTIFICATE-----\n          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\n          -----END CERTIFICATE-----\n        server_cert: |\n          -----BEGIN CERTIFICATE-----\n          MIIEUzCCAjugAwIBAgIRAKECdnHbq0ZQU/jHt3QE0+wwDQYJKoZIhvcNAQELBQAw\n          HjEcMBoGA1UEAxMTdGVzdC1jYy11cGxvYWRlci1jYTAeFw0xNzAzMzAyMzUxNDla\n          Fw0xOTAzMzAyMzUxNDlaMBQxEjAQBgNVBAMTCWxvY2FsaG9zdDCCASIwDQYJKoZI\n          hvcNAQEBBQADggEPADCCAQoCggEBAKsIzoC42QbEl0r9EZOfwc7MbZ6dls2DSi0S\n          U0bZdybQ0yBrcqkLjddLdxPA8/1n41chU2QkHMXzc23WE2vyg+VO3sEn/tvnxATV\n          pjLABbH12s8JHN0QBi07Oj66TTAf3aQQbrXi4A1Uoyq63AL9VErTqLHvSgC4xsi2\n          c6da9/KDh8i6ryXEnznHaA8nJncD45rHIozdQ3Np8r/7G24wgTNCKR1qmjnGtfyV\n          mxHA1Rc5TJoLvTU7675xYBzICDzo1dpHbA5QrkEECiTpm5b4a52El6XJ4EF4nWMT\n          l8urht8P51xsFa3fPkpOB/MUUSc5Au/NhV8N1f67FsSr18ysu1UCAwEAAaOBlTCB\n          kjAOBgNVHQ8BAf8EBAMCA7gwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMC\n          MB0GA1UdDgQWBBSsq7/T5TdI0pFhfjeJnBzgLn1aMjAfBgNVHSMEGDAWgBRXlmY9\n          gLcIn9KN+RojBbl5j5KVVzAhBgNVHREEGjAYggsqLmxvY2FsaG9zdIIJbG9jYWxo\n          b3N0MA0GCSqGSIb3DQEBCwUAA4ICAQApA4T/Xa0cieRs3mp+uYG78XWikyTdhB38\n          1uWz0CVSe0xc5QL/3LHeXyB+++GtTkI/itkPG5XeWSWXftj/wqgM+PSz4GWsNRuU\n          HL8PrtsoHnSLp8xtz/ioDL6tTeShkN4dYmS8YHapPuoEjU6Jzb8jWbHDJbH+TOmB\n          /hLBxivVm6oJqwKfft0BC4qn6i/Il7rC6YzDGAhX6i4d3AUAE4czxTu2lSbusoa8\n          Y5+673wtaPzCwIitX8oCCVEXCSimxrQErNAPSajwwEYmz1e65/Y655sakFfMVgkh\n          rdkNCpYMbdjZURVRLoD5nW9g1WfX1p53vGWoEArrfbDL+WWY0RoaISGyL/5+mjrR\n          tlMHrSSBpAEyT3b/nkx1C8S9Xdyj0TqgZHRI/7aK9gyxr3k77rXcGUxfMbFUxnze\n          6CvMLSwHfQNvdjCe4eBCu0GrGj4EQvfXcswkuLbzSHakd44iDlHInHzSVFfIMIVB\n          88nrI4rIHTib01HjNSNMBkISp23wm5D0fnVg5PQUvY35ZCg7mWFtpnBbuXeOUjox\n          tlO3va8l/IMZv4gKcdj9S6m088eCI4BW8RNwazkg4l0elrvkHLYxEBlBqaPYYTy7\n          jBVeW1y9jn4njkiE8u2UlLiXKT2Vt3xrRLJukt8z7gdGPsFQ07ebjcRyNeZyLq1J\n          pMYRyV+HdQ==\n          -----END CERTIFICATE-----\n        server_key: |\n          -----BEGIN RSA PRIVATE KEY-----\n          MIIEowIBAAKCAQEAqwjOgLjZBsSXSv0Rk5/Bzsxtnp2WzYNKLRJTRtl3JtDTIGty\n          qQuN10t3E8Dz/WfjVyFTZCQcxfNzbdYTa/KD5U7ewSf+2+fEBNWmMsAFsfXazwkc\n          3RAGLTs6PrpNMB/dpBButeLgDVSjKrrcAv1UStOose9KALjGyLZzp1r38oOHyLqv\n          JcSfOcdoDycmdwPjmscijN1Dc2nyv/sbbjCBM0IpHWqaOca1/JWbEcDVFzlMmgu9\n          NTvrvnFgHMgIPOjV2kdsDlCuQQQKJOmblvhrnYSXpcngQXidYxOXy6uG3w/nXGwV\n          rd8+Sk4H8xRRJzkC782FXw3V/rsWxKvXzKy7VQIDAQABAoIBAEMbV3rmDDE9nWcM\n          2IKlojNzvmcHyg2kv8vjbs1Tsg6GzO/heMGfCO46a+RSRulcg7TCHKgkCy4YEWg9\n          IK2wH9QvF/ONr8+0phKHiYhME2/52Pp2xt5t1R6WKIpIKtUBC8O9ttKiy+ovFT5E\n          xuJdZ19coMn/63dRCJ3kCIjXhoWeNbSM0feZxKvnoJrD1ZW+0bjNu7QRK+H9uqEb\n          NgyT45Hti3mqOZMD2V5C499aA+IgpGsDP53QHBze4BYd1aLtEcYqxrRqNUkEsgpJ\n          1X8h3LSe+RSRIfD6SUlEIIFDCtCS5fF0fKXZjEHurm6HksQEK9/VfIbsoO5HnLSv\n          et6anIECgYEA2CWVMoXuMjHm+m1xX+eFtYl6OZs4pZf6c9UrJiYqToTHUz/pywEj\n          dvWL4ckyJWVe/q/vZvpLP2ub67ZVtVktzFDJUUDqTbaW6hvN8eLkiR8017DU4+7W\n          WMt3hWr2n3PogXbjxHMxLJFoVvFzNzlBB6UA5BC5zzshAJh5fW2sxwUCgYEAypHb\n          sLVN/aFPd/tOgxC2okYcV1WW1qcSlVQ+kvD+DYJJFTshFVYsA2lv7WOUAp+/hKd4\n          hSF57DWTAER1brK4x8H0pek0+uas+GHfwHjtcASyQREHozLVTE1n7SE2w9Iod9VM\n          67fH6b7XZDdZm1FG7l6jK84bjy/+aPYEH5J0tBECgYEAxVFp5nmFfaU4qx0GBvsg\n          gR1Dyxr8l48qQFw1y9nDfXKRVFpgX8ZmTc7TKAe4E5N7KR4LewK7duYRrRkDHU6Q\n          FJkbb2XHf7JUCtvfIhZzcwpd/xma/4mle+Ii9lUzV1VEyAt02n4eQgVsLxK0j5Fg\n          4E2thoYOWjQsaJLJNcvNktECgYB43g73oTan31hLfueZzJ8stCi085zM92NfNqUf\n          iCwOY263/FABKymX35GpU4E9D5R20nZW+WKGTnEn97EaHAmlJ1WSqVOzYXBTxBJ+\n          Bamm7SZvLHoiJnKe1JDuLKNAtGTxG5SKEV53Wieq5FvTEOwBzvYNbS2Egl6KwkAz\n          lm+MAQKBgDVoO5nlJ8GkJ7OK6JGmaX35oPwGZ13IFNUQ1gGtYEG9MoEqI+w3tn80\n          4ugdcsVR5yiLAHREWGFIQ6R2A+KfPMiqwSWg351D/2QW9WTO/LAzzCaT6ABbtI2b\n          mKM0JQdkqmYAEGtO+oFkrSDKlZ9M5ggwHO1DkKTLne2YFy0sYBDQ\n          -----END RSA PRIVATE KEY-----\n\n    nsync:\n      listen_addr: 127.0.0.1:8787\n      listener_debug_addr: 127.0.0.1:17006\n      bulker_debug_addr: 127.0.0.1:17007\n      bbs:\n        api_location: bbs.service.cf.internal:8889\n        ca_cert: \"\"\n        client_cert: \"\"\n        client_key: \"\"\n        require_ssl: false\n      cc:\n        base_url: http://cloud-controller-ng.service.cf.internal:9022\n        basic_auth_password: internal-api-password\n      diego_privileged_containers: true\n    stager:\n      listen_addr: 127.0.0.1:8890\n      debug_addr: 127.0.0.1:17011\n      staging_task_callback_url: http://stager.service.cf.internal:8890\n      bbs:\n        api_location: bbs.service.cf.internal:8889\n        ca_cert: \"\"\n        client_cert: \"\"\n        client_key: \"\"\n        require_ssl: false\n      cc:\n        basic_auth_password: internal-api-password\n      diego_privileged_containers: true\n    tps:\n      bbs:\n        api_location: bbs.service.cf.internal:8889\n        ca_cert: \"\"\n        client_cert: \"\"\n        client_key: \"\"\n        require_ssl: false\n      cc:\n        basic_auth_password: internal-api-password\n        ca_cert: |\n          -----BEGIN CERTIFICATE-----\n          MIIExzCCA6+gAwIBAgIJAOPFFRMyK2dVMA0GCSqGSIb3DQEBBQUAMIGdMR4wHAYD\n          VQQDFBUqLnNlcnZpY2UuY2YuaW50ZXJuYWwxCzAJBgNVBAYTAlVTMREwDwYDVQQI\n          EwhOZXctWW9yazERMA8GA1UEBxMITmV3IFlvcmsxEDAOBgNVBAoTB1Bpdm90YWwx\n          EDAOBgNVBAsTB1BDRiBEZXYxJDAiBgkqhkiG9w0BCQEWFXBjZmRldi1lbmdAcGl2\n          b3RhbC5pbzAeFw0xNzAyMTUyMjM1MzlaFw0xODAyMTUyMjM1MzlaMIGdMR4wHAYD\n          VQQDFBUqLnNlcnZpY2UuY2YuaW50ZXJuYWwxCzAJBgNVBAYTAlVTMREwDwYDVQQI\n          EwhOZXctWW9yazERMA8GA1UEBxMITmV3IFlvcmsxEDAOBgNVBAoTB1Bpdm90YWwx\n          EDAOBgNVBAsTB1BDRiBEZXYxJDAiBgkqhkiG9w0BCQEWFXBjZmRldi1lbmdAcGl2\n          b3RhbC5pbzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMOPQlCJnidk\n          8XLD0TysGURSJ35BBCaKPGULVEWklO5nzP68J21nY/1oUEdnA1d5cJh27U2D6gZ6\n          PEN7RsZTmpygFOQQaxbc8IKx86ackI6HCq3WwiDA92IJMMvedPrGWUNoG6h/qAwi\n          RCo3TdV61zfy0mqBdxa1X0algUQOZCUHk6R+DRbCThXQyZW7MNyfnNb1ubw03eHp\n          eSTxMvYm0k/+EbYtheY1h/MJklidEEwTw5ygw8KcxowcCFjdJjaqVgPhNZCNTuA6\n          GUrIQJ9hB/KHpHmmiege3peq5RQZg/EfoDUtRbVd5V1z7t+2O+IgBTEKBY5yzr4S\n          RxK9tdHEn+MCAwEAAaOCAQYwggECMB0GA1UdDgQWBBRRUvkBTZ+jf0ao85VurNMQ\n          v2QJdTCB0gYDVR0jBIHKMIHHgBRRUvkBTZ+jf0ao85VurNMQv2QJdaGBo6SBoDCB\n          nTEeMBwGA1UEAxQVKi5zZXJ2aWNlLmNmLmludGVybmFsMQswCQYDVQQGEwJVUzER\n          MA8GA1UECBMITmV3LVlvcmsxETAPBgNVBAcTCE5ldyBZb3JrMRAwDgYDVQQKEwdQ\n          aXZvdGFsMRAwDgYDVQQLEwdQQ0YgRGV2MSQwIgYJKoZIhvcNAQkBFhVwY2ZkZXYt\n          ZW5nQHBpdm90YWwuaW+CCQDjxRUTMitnVTAMBgNVHRMEBTADAQH/MA0GCSqGSIb3\n          DQEBBQUAA4IBAQBk19J3yfMb0DEC/BBDlHUyGvvsLr0PVbZGtYT7qxHkqOQBFz1k\n          q65aeNuT8D0GSMy6gfF64cRPp3A7a8NfeYsSoynufMHMaMKEzlYjSyNGwDcxyRwv\n          eQ7w4QeX9EnRCBf/JQdC9bIIs9IoJAgNHhEZHnzdnt76NX1hJ+w8SVTgi5zdQknr\n          v+wroKbStKy2R5qxnW1bPgt6AtMoE3M/ZUj+DNQvU3wEcTasWuxvDUOhZfoOM0Rd\n          UxpHKQp+6PPugE59i/xg/Vm53FrAQ6+4Tn6w5jjtWBszH8OxFkyD+mKhKsh/DkfV\n          kXvnbnHRmaEsQBbnWkhygDws3S1YT8/vTZBw\n          -----END CERTIFICATE-----\n        client_cert: |\n          -----BEGIN CERTIFICATE-----\n          MIIExzCCA6+gAwIBAgIJAOPFFRMyK2dVMA0GCSqGSIb3DQEBBQUAMIGdMR4wHAYD\n          VQQDFBUqLnNlcnZpY2UuY2YuaW50ZXJuYWwxCzAJBgNVBAYTAlVTMREwDwYDVQQI\n          EwhOZXctWW9yazERMA8GA1UEBxMITmV3IFlvcmsxEDAOBgNVBAoTB1Bpdm90YWwx\n          EDAOBgNVBAsTB1BDRiBEZXYxJDAiBgkqhkiG9w0BCQEWFXBjZmRldi1lbmdAcGl2\n          b3RhbC5pbzAeFw0xNzAyMTUyMjM1MzlaFw0xODAyMTUyMjM1MzlaMIGdMR4wHAYD\n          VQQDFBUqLnNlcnZpY2UuY2YuaW50ZXJuYWwxCzAJBgNVBAYTAlVTMREwDwYDVQQI\n          EwhOZXctWW9yazERMA8GA1UEBxMITmV3IFlvcmsxEDAOBgNVBAoTB1Bpdm90YWwx\n          EDAOBgNVBAsTB1BDRiBEZXYxJDAiBgkqhkiG9w0BCQEWFXBjZmRldi1lbmdAcGl2\n          b3RhbC5pbzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMOPQlCJnidk\n          8XLD0TysGURSJ35BBCaKPGULVEWklO5nzP68J21nY/1oUEdnA1d5cJh27U2D6gZ6\n          PEN7RsZTmpygFOQQaxbc8IKx86ackI6HCq3WwiDA92IJMMvedPrGWUNoG6h/qAwi\n          RCo3TdV61zfy0mqBdxa1X0algUQOZCUHk6R+DRbCThXQyZW7MNyfnNb1ubw03eHp\n          eSTxMvYm0k/+EbYtheY1h/MJklidEEwTw5ygw8KcxowcCFjdJjaqVgPhNZCNTuA6\n          GUrIQJ9hB/KHpHmmiege3peq5RQZg/EfoDUtRbVd5V1z7t+2O+IgBTEKBY5yzr4S\n          RxK9tdHEn+MCAwEAAaOCAQYwggECMB0GA1UdDgQWBBRRUvkBTZ+jf0ao85VurNMQ\n          v2QJdTCB0gYDVR0jBIHKMIHHgBRRUvkBTZ+jf0ao85VurNMQv2QJdaGBo6SBoDCB\n          nTEeMBwGA1UEAxQVKi5zZXJ2aWNlLmNmLmludGVybmFsMQswCQYDVQQGEwJVUzER\n          MA8GA1UECBMITmV3LVlvcmsxETAPBgNVBAcTCE5ldyBZb3JrMRAwDgYDVQQKEwdQ\n          aXZvdGFsMRAwDgYDVQQLEwdQQ0YgRGV2MSQwIgYJKoZIhvcNAQkBFhVwY2ZkZXYt\n          ZW5nQHBpdm90YWwuaW+CCQDjxRUTMitnVTAMBgNVHRMEBTADAQH/MA0GCSqGSIb3\n          DQEBBQUAA4IBAQBk19J3yfMb0DEC/BBDlHUyGvvsLr0PVbZGtYT7qxHkqOQBFz1k\n          q65aeNuT8D0GSMy6gfF64cRPp3A7a8NfeYsSoynufMHMaMKEzlYjSyNGwDcxyRwv\n          eQ7w4QeX9EnRCBf/JQdC9bIIs9IoJAgNHhEZHnzdnt76NX1hJ+w8SVTgi5zdQknr\n          v+wroKbStKy2R5qxnW1bPgt6AtMoE3M/ZUj+DNQvU3wEcTasWuxvDUOhZfoOM0Rd\n          UxpHKQp+6PPugE59i/xg/Vm53FrAQ6+4Tn6w5jjtWBszH8OxFkyD+mKhKsh/DkfV\n          kXvnbnHRmaEsQBbnWkhygDws3S1YT8/vTZBw\n          -----END CERTIFICATE-----\n        client_key: |\n          -----BEGIN RSA PRIVATE KEY-----\n          MIIEowIBAAKCAQEAw49CUImeJ2TxcsPRPKwZRFInfkEEJoo8ZQtURaSU7mfM/rwn\n          bWdj/WhQR2cDV3lwmHbtTYPqBno8Q3tGxlOanKAU5BBrFtzwgrHzppyQjocKrdbC\n          IMD3Ygkwy950+sZZQ2gbqH+oDCJEKjdN1XrXN/LSaoF3FrVfRqWBRA5kJQeTpH4N\n          FsJOFdDJlbsw3J+c1vW5vDTd4el5JPEy9ibST/4Rti2F5jWH8wmSWJ0QTBPDnKDD\n          wpzGjBwIWN0mNqpWA+E1kI1O4DoZSshAn2EH8oekeaaJ6B7el6rlFBmD8R+gNS1F\n          tV3lXXPu37Y74iAFMQoFjnLOvhJHEr210cSf4wIDAQABAoIBAQCTF1gb18cbfnOV\n          jO/+oLvIhbqq3iBPFL7kiabzUx2qTG0GVWOaiJ/O5P0tF7CNxQwJwbowCb6m7J4T\n          a9AKMKwkjsvn1umVos1MoKjRcwXQDobbxqLxm/L2zE7lqQd38GUHrHDRRmOR7Nw0\n          nLBwmBr1PDFEZui6LeXh727RT7nHlx6yo6cIYUrQBWaFSZJmfPD2pCMLRvEEY/0v\n          yuv6NwuRVdO/P7R+pLDXDDbOktOiFvy9QUz4KtY2ZgZHobHZ9LJlyqFiC7wFQkMs\n          la9vBniARgE1vX9D1QJJZ01ilivjiRDHaEq7EnZ9kRoO/ln3Yqlhr5OjAeQMFlMR\n          AkX9h2VxAoGBAPnfruRdP5JTdXmun4IA0Nn3a3ZG7dNkUIl/yfhTKCD8ITGq5MXV\n          aNSkOTVurkhrA38RuM6RQPypbjGRYdQrRMeKv6IrTC+sb7BhgcYe32370K8Y3TTX\n          hgB24larb8jPot6f7nvkTbJJpwmHE8cXm7Gkmr6n340GPJzfmJke+H3fAoGBAMha\n          rS+fCIyI3YwxmcyrA7nEKmAg2tTLiJ7xIY8i/ADwedqAnV8oAfScMw7IAF1EBkAt\n          z2xfQhm1/pIqr1GcLxOgqvbixXfmM2qsLS/Zb/T6aOJ5xejsI3d21CIg5LwxF/EO\n          1hm5ereMdDTFw914HcO2Wap0Kyqg8MSd1GxgIhZ9AoGAOOqKm9nhsSLxj1YHX0Vw\n          TTXedIKTiaM/9RH2n2nRqjHEHdwfYDDMQCNoJJOhfz1g/oC659KOSv8M6p2C+yEf\n          +ZPRMs9J+1H73uFW/hnqKtNBJaE0QeUV0OVDiRpjzAn/v1YOrInEaOf99F2gU6k8\n          /anQ1bzHXwgcpl8IE1jKoWECgYAFVORm8AR6OOosYOWG3MYsm1vFUxp/ryrjj+ck\n          t/mczMlxVxrY/WeP6tgw/IGF+dlwu8dZSu+nX4B2w0wHD/DwxMXH7CD1H9sea5aI\n          P3ELQ96mqDbsC9ylwTPD9LwhheztLUflR1pMqCAvh1O/AQNJwgCA2LaNW9sMYGbW\n          u3gswQKBgGsjcgS8l6cAYXOncwN6ROyosL6xkvc8zzUSH/KdPcXbAJZm/hQYeAyS\n          QFAzUdyCXnokknYbLcsNmVqO+FAXQ+S2lwaBxS0uHWc7oc0KYaNPdFHSW0PCGj9u\n          rvaEn/skAHkQTbLPPoPmuOs5qwWgYkMB6AHcSeCmBQokX7Zn7nfR\n          -----END RSA PRIVATE KEY-----\n      watcher:\n        debug_addr: 127.0.0.1:17020\n      listener:\n        listen_addr: 127.0.0.1:1518\n        debug_addr: 127.0.0.1:17021\n      traffic_controller_url: wss://doppler.local.pcfdev.io:443\n  cf:\n    api_url: http://api.local.pcfdev.io\n    skip_ssl_validation: true\n    nats:\n      machines: (( properties.nats.machines ))\n      host: (( properties.nats.machines.[0] ))\n      port: (( properties.nats.port ))\n      username: (( properties.nats.user ))\n      password: (( properties.nats.password ))\n  bbs:\n    api_location: bbs.service.cf.internal:8889\n    ca_cert: \"\"\n    require_ssl: false\n  routing:\n    host_ip: 127.0.0.1\n  routing_api:\n    sqldb:\n      type: mysql\n      host: 127.0.0.1\n      port: 3306\n      schema: routingapidb\n      username: routingapiadmin\n      password: admin\n    listen_ip: 127.0.0.1\n    debug_address: 127.0.0.1:17103\n    enabled: true\n    system_domain: local.pcfdev.io\n    etcd:\n      servers: [etcd.service.cf.internal]\n    router_groups:\n    - name: default-tcp\n      reservable_ports: 61001-61100\n      type: tcp\n  tcp_emitter:\n    debug_address: 127.0.0.1:17105\n    oauth_secret: tcp-emitter-secret\n    bbs:\n      client_cert: \"\"\n      client_key: \"\"\n  tcp_router:\n    health_check_ip: 127.0.0.1\n    health_check_port: 8088\n    debug_address: 127.0.0.1:17104\n    oauth_secret: tcp-router-secret\n\n  # For Diego:\n  diego:\n    file_server:\n      listen_addr: 127.0.0.1:8080\n    ssl:\n      skip_cert_verify: true\n    auctioneer:\n      listen_addr: 127.0.0.1:9016\n      debug_addr: 127.0.0.1:17001\n      bbs:\n        api_location: bbs.service.cf.internal:8889\n        ca_cert: \"\"\n        client_cert: \"\"\n        client_key: \"\"\n        require_ssl: false\n    bbs:\n      listen_addr: 127.0.0.1:8889\n      debug_addr: 127.0.0.1:17017\n      active_key_label: key1\n      encryption_keys:\n      - label: key1\n        passphrase: bbs-secret\n      require_ssl: false\n      ca_cert: \"\"\n      server_cert: \"\"\n      server_key: \"\"\n      health_addr: \"127.0.0.1:8891\"\n      auctioneer:\n        api_url: http://auctioneer.service.cf.internal:9016\n      etcd:\n        machines: [etcd.service.cf.internal]\n        require_ssl: false\n        ca_cert: \"\"\n        client_cert: \"\"\n        client_key: \"\"\n      sql:\n        db_username: bbsadmin\n        db_password: admin\n        db_host: 127.0.0.1\n        db_port: 3306\n        db_schema: bbsdb\n    cfdot:\n      bbs:\n        ca_cert: \"\"\n        client_cert: \"\"\n        client_key: \"\"\n    converger:\n      debug_addr: 127.0.0.1:17002\n      bbs:\n        api_location: bbs.service.cf.internal:8889\n        require_ssl: false\n        ca_cert: \"\"\n        client_cert: \"\"\n        client_key: \"\"\n    file_server:\n      listen_addr: 127.0.0.1:8080\n      debug_addr: 127.0.0.1:17005\n    route_emitter:\n      debug_addr: 127.0.0.1:17009\n      healthcheck_address: 127.0.0.1:17012\n      bbs:\n        api_location: bbs.service.cf.internal:8889\n        ca_cert: \"\"\n        client_cert: \"\"\n        client_key: \"\"\n        require_ssl: false\n      nats:\n        machines: [local.pcfdev.io]\n        user: nats\n        password: nats\n    ssh_proxy:\n      debug_addr: 127.0.0.1:17016\n      bbs:\n        api_location: bbs.service.cf.internal:8889\n        ca_cert: \"\"\n        client_cert: \"\"\n        client_key: \"\"\n        require_ssl: false\n      host_key: |\n        -----BEGIN RSA PRIVATE KEY-----\n        MIIEhgIBAAKB/DMF5qOW+fh608KhX7qBLNHHmfzCfOONd176Oaf8rGht5KdnoNge\n        TYSGqBFuYB1r1RbYEVhWAkH/8mW14XRVNmQ4C9eQDFqeWmmaOoSBG5GdP5GUfhI/\n        z5vprQw+rnV4gt4InCA7QaR86pLj5sMiUij5OE/CW0dw29+z5E0p5WnQX5+utRmw\n        ioQJD8jUDvzFrvzKIdE0HVOEl0agbeXq8U2e9E1de4iR+NiDc1zeiQmDNCIhFJb4\n        FL7WqqokL+49SwSWGmOFKAlpj4Dlhx5dDwJWpcDe0XBXCkfcXn8xXNOT+4YBxJUG\n        idNMPpLKpDUphZRj8CNBSMkjehIKVwIDAQABAoH8MiCAAQQYvXfeh36HT/IMmGSi\n        8mIY1G5tclAfSNzCfS5Jz/XNXcYXnjW09LsdjoocJX9NOx30xeawvCA+SU5WS4uM\n        htEscfLVHJ67EubMsPhuNZZPbZpnWuPucPM77ojg+UY4LKpKyVE4G+vvEJKtaTe/\n        jQyDJOLKATL4/p5DtbDH7hVZcJVHU94csiE9a9OtyAvSwZLmNxGIBHshFntjcI+/\n        hmQSFl3d1iduYGx7oeq3wX0sQ1mk/QksUTHRrlLfSQhLi5ZmH9Hnn/Qw2WeXKVdk\n        BvXAUBiHG7Y0qGHXl5FOkB1BSlmk/EOkBk6gWl1a1Kx4A6oyNL4+HsuBAn572PqW\n        IDutj4shf8ysI5fLJnvGCygZmk8LPZIlZZqLpDGo+l4iF3VCsd8CU2jKfWqel8+Q\n        axdmu/BrQ7xyuWpxoHtKICv+CitI1ivzeYQwRCmjIN84jeGP9Pty4AJzhySegf/h\n        n3irIp07wEzdedoj4A3RWWObX+AeubyUqfcCfml3scNb2oBK24RDVGYaUSWkSHBe\n        OEU0QlOaJXZ2kCK2rIK/IVI7cD12WpkWTGY782VBmipEXwtMTprQzMrnK25shS+z\n        AjCDGXtqr0GjxJh73WRurs1dVk6sqslSp1M/R9fmjGU4vdYL2JfMczEH4+57aOpR\n        sW+H0FEYDayKoQJ+Eo8gdjDcYJT7N4jsRfuLesEImVQArV2HbNrMNNh2AWkYnAbw\n        5lD3nIgFMFcJhBapTJzZWP4DYrzVOW3MJrEMd3yiHSiXDxm9BMw7h9/05DrCtpRt\n        fw8b9zOyHrPdCiz9WteGXexE6/hi8ZpOqn3hJ7EiwPWRTK5gappQ3UJfAn4Tr0t2\n        cwZtO4uNPCPcirzqkacTkgJeqEpY4ERtv+NXF1FLdfD6MC3ayuRN/mN0EWx0UbI8\n        gVZb/XoOWzpeBJeOnKKfLIIUG+P9rQPY9IAVFclUnXPy0KDzPjcCLHMejokSOu2p\n        VtXXxY4/huFZHWflcxM56NV9Q5QWDq8+rQECfjQTbNbd4ehbC/Q5EZ1SIzeaSLrn\n        0ICmiRajnISbje5vPntqPXjBkbiVGx31qOaZ+DlGGLOyzW/GP5X4NOUwza2bYh3q\n        nnzwBhoGLZfvoes5Nw06leOdVqcvIjLIDhb+XbiiEeAnONUp+BAKzDYOIp7K+LPe\n        1rHeshh0P/QfCQ==\n        -----END RSA PRIVATE KEY-----\n      enable_cf_auth: true\n      uaa_token_url: \"https://login.local.pcfdev.io/oauth/token\"\n      uaa_secret: ssh-proxy-secret\n    rep:\n      listen_addr: 127.0.0.1:1800\n      debug_addr: 127.0.0.1:17008\n      zone: z1\n      bbs:\n        api_location: bbs.service.cf.internal:8889\n        ca_cert: \"\"\n        client_cert: \"\"\n        client_key: \"\"\n        require_ssl: false\n      ping_timeout_in_seconds: 600\n      preloaded_rootfses: [\"cflinuxfs2:/var/vcap/packages/cflinuxfs2/rootfs\"]\n\n  localbroker:\n    service-id: local-volume\n    service-name: local-volume\n    plan-name: free-local-disk\n    plan-id: free\n    plan-desc: free local filesystem for bosh-lite\n    localdriver-url: http://localhost:9089\n\n  # For CF:\n  nats:\n    machines: [local.pcfdev.io]\n    user: nats\n    password: nats\n    port: 4222\n    address: local.pcfdev.io\n  metron_agent:\n    zone: z1\n    deployment: pcfdev\n  consul:\n    agent_cert: |+\n      -----BEGIN CERTIFICATE-----\n      MIIEJTCCAg2gAwIBAgIQPrEW7lFCsRKIYPCRnoi/ITANBgkqhkiG9w0BAQsFADAT\n      MREwDwYDVQQDEwhjb25zdWxDQTAeFw0xNjA0MjIxNjM4MzJaFw0xODA0MjIxNjM4\n      MzJaMBcxFTATBgNVBAMTDGNvbnN1bCBhZ2VudDCCASIwDQYJKoZIhvcNAQEBBQAD\n      ggEPADCCAQoCggEBAK2Owzr/x4wzewIKCx9b7kA9zaXemyEUFsKGZU/FiQYbliUh\n      rEmGJZX7uUBUxOQD+gHBQSlP2tWRW1W6hug6fgUUcTevhkYrn6educiGK7PSde5j\n      3uljV+YpzOpQjfXLtVpXP7Fjg9fPw5FXAXMGpltsysnlqu/YWkVTj4nRo8t5MtmN\n      BPyA/x3GvdCr1K3LV7yvxXe24jRtCcaNJIwcTksOND2pl1fcGkkqnzi1EaT8UfbD\n      YzQeVH4LSg+ukUQprgrdB8stoBl7EubWgi9ixfNbw3THxVL3kZgMEzO03yyP92tC\n      MxXhlkt92+w4seAMDDZLD2e+3r4iHd+1qANFzL0CAwEAAaNxMG8wDgYDVR0PAQH/\n      BAQDAgO4MB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQU\n      V2EJqyuNEQDeTMz1/P2B5lEeq/swHwYDVR0jBBgwFoAUgxYmzKGS/VZO9JZTFy3C\n      Zt27Mm0wDQYJKoZIhvcNAQELBQADggIBAJU0RdHhWr3hICn+Ck3PFNRw/d83LRuq\n      hfrrNdvSqaiN/FXuo7Xroax5PHT3DewQBFTqiJ+x3iMCK4NyuhevB5itExm2sJkw\n      IpdjepnfpPLa1ygc/xNZtvWustlChKDFiBmA2uDwm4z1V8UnPSP3qS0lP57WMymr\n      9b7tv62qgyz2uhlP5dhjGdLUnFdUr6EFwpUjxHfHeOmM21p2tRjcsemMHFMKeoX/\n      0+WgBAT2Rgx991JSHOS3n1f92MRICCb5Gm006z6X4y3lnpgWAR6nBAlwvVNUwUja\n      sZCqiLxGOMXgXLIwRR++yApnAL+xOq67QBYVQN9weludj0bsOi38qPVftmivEwy3\n      cxnSS0FeOKyNkllFYtf40J3A9hWeP07SyC5/hL7tzKo5hYEGC/MNrLlixJ9qBXmD\n      7Y4MOrAVTFsb2jgYdRZzsUGWO1PZhI7oUxc8axr3eN9Wz39P+Mq+ihoHFo9u0YKH\n      LBYmRKFm/INw8i5xhdWwVfTk96DY/MnlYm0Jb710pL19v0QpDsX1nHRJQ8g5ENul\n      g25UGJCmh4+maQZ/bJ5GxqKfpMfq+iBadx0mu3AWjrfoDspPxOsult2rE0MOSGMy\n      ep6clZEN8IfPJD2H3Rk5aZydPcCH415pN/80YJ6sSsaMFcyCjPk6smkzqixxJtMw\n      Sr49l3sAAm2N\n      -----END CERTIFICATE-----\n    agent_key: |+\n      -----BEGIN RSA PRIVATE KEY-----\n      MIIEogIBAAKCAQEArY7DOv/HjDN7AgoLH1vuQD3Npd6bIRQWwoZlT8WJBhuWJSGs\n      SYYllfu5QFTE5AP6AcFBKU/a1ZFbVbqG6Dp+BRRxN6+GRiufp525yIYrs9J17mPe\n      6WNX5inM6lCN9cu1Wlc/sWOD18/DkVcBcwamW2zKyeWq79haRVOPidGjy3ky2Y0E\n      /ID/Hca90KvUrctXvK/Fd7biNG0Jxo0kjBxOSw40PamXV9waSSqfOLURpPxR9sNj\n      NB5UfgtKD66RRCmuCt0Hyy2gGXsS5taCL2LF81vDdMfFUveRmAwTM7TfLI/3a0Iz\n      FeGWS33b7Dix4AwMNksPZ77eviId37WoA0XMvQIDAQABAoIBABVoisR4UJEGuKGj\n      w4N2v4jFFtzi/Jez9qrAETcp0qEiPf8OjEX1eiVqC4vX6QGHTAtzXypNY1z8tRt6\n      CrISpQDTaLPJvvJg5yyx0/zcL//achmZ0CFR08HcXh55GUm8ev5NzNmAwP6Z7jG7\n      Xb5mj5avcMQ+xDsZoOj0SbxiU6YBdS5lmV0VABfvxVRGw+WHsxbsnD9tVjsaRca1\n      T+iaTsfK9u6EVEIPTl9MZb8Dev5Exqt/nQoo1mceQChLhgF+6VxKLO3GPmpCHZNr\n      /6+ydS6Qrdjs9EdVx7WSN9B7SPARrHFERM0VWBdumAWjOx9De58TqMvNhC5VKonH\n      Tkn0NgECgYEA2t7fi+8+6ttFFCHJP+U+Y6KyzdwBDUzgJc0ZRx+EEKRqvVQn6AWY\n      wZhbE7QxUkf68pgQ0YlcQGWf9uUKXeR6VsD+6yO2JJI7906ba4fsWYDm0spFxDxM\n      REvDAJZ0BSOD/a2zJBZeNMbztdUgW9RmHNoEzgswsIkJt2FlZKaXWSECgYEAywAJ\n      UPBt3qYSyVlhPuRN2i2BPKRme9dyg+1ypFyw1Zafc5JhjKovkn8Rgche8x2tfL+n\n      iBxSVnjLXRfHFrbOCAS4c84AJ0bhoW+lhP5KUIwco1i3jCm7Knv6nsCfbeEwkSUG\n      kc4rsCe7cNFzQtbe+MeWMCbGK0x8kZg49CdGNB0CgYBvI+OCTG+3lLakPW/TOVaQ\n      A6smK8SA+3uK1nYyjodiaAsnrtdA0665B+Ofws2UyaZdj+hibozgynoLRk0YVo/l\n      A8Wuo4i3U2aN82Wqme/jlzge68W3myLjP1F7N+scPOemZpDkD1OxGyHgQKRY3Scp\n      GXB9LGOCEWRUsWlqTcnm4QKBgALu7jOINd44wh68tuYEwIc9jxeEPKLfex0i6jwr\n      xrZfZdBytgwlTWitg2A/t/eFX0NlNZOG7T2ooy+mL09JtvJwtwWdXW0z3gDKLzcb\n      wZEmZSeLGaPh2n2DqxxuJh+dWGlQgqbKtuDlwhSgQi0eE7y+jZIGjWiEw2wLKg+F\n      HcOVAoGAbY0NUyuWkRUnSRO0e8+h6AU0Pmdp2qGu8UhewKslmL+WoUm8REwwC2UJ\n      FSxb96zvg2HXLtbzXSLoovSTsJditm0sAiZldeE6k3QstF+2H0uCk0xg0+sKK9tt\n      6Vi0fCrH4M2LqLYZF/SQVVpQMalZ/eDRNnlYGU0e9PIm7hgQFjs=\n      -----END RSA PRIVATE KEY-----\n    server_cert: |+\n      -----BEGIN CERTIFICATE-----\n      MIIELzCCAhegAwIBAgIQFhPJIp4iCJ6HrRu9+VKOJDANBgkqhkiG9w0BAQsFADAT\n      MREwDwYDVQQDEwhjb25zdWxDQTAeFw0xNjA0MjIxNjM4MzJaFw0xODA0MjIxNjM4\n      MzJaMCExHzAdBgNVBAMTFnNlcnZlci5kYzEuY2YuaW50ZXJuYWwwggEiMA0GCSqG\n      SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDU213a8PJdM3huWrOh3pK82AU83jDr9y/d\n      2m/mYtD908O84IxAjwKUETE16sNnmEWSP+C7eEfQg71uTU4HSO0rS9xS50JNMn4V\n      wPVfzK7xVk9CcKlVSIg/TzHevVMTyp7uYIp1E3KyrDJhDD/44T4d02fyVXAyOg8v\n      zEuqYU37jb5bf+16utWi9U4NB3tR3L4EI6oVOXQjQ2MrF7prjlm2UM0yM+yzFb40\n      1QkMmUID+EdmCT05hCcNWYL+OsHAG1HakSqB1Pi/Ux5B8/2GRPw2lntaWF3MMKhc\n      KKXo9z8RaRrAlIBR6GVyG69CG2uoOWrrdqqIVNKREWXKgcvLu+qTAgMBAAGjcTBv\n      MA4GA1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIw\n      HQYDVR0OBBYEFBSTT2GxUt5mSHT3kK1/ar1tMZWLMB8GA1UdIwQYMBaAFIMWJsyh\n      kv1WTvSWUxctwmbduzJtMA0GCSqGSIb3DQEBCwUAA4ICAQA0LpofKdohWTRSq+wW\n      bo7CvM6+vDw6Wjxk2CoXxEFzrpVJvgx4Tw6OyoqEMN8kH4F+7dl5lkG9jC2VdPmq\n      hnbZfqJQgOA3B5Or01dHn2XnzUqMpb0cxMwLNYhY6ribq2V+B6HKvKdJZv9ww3g5\n      qAU3O5JYd4qpCNjdu7ZKRv3D0SLy7SE8hwpAQCuca1F/Wievu48kGGE9JO256nuD\n      BlXQzGoVAKxbvBCNlxpPErG948CLPjZ2Arbuczwvgb8A1ji4UAFQrAwZ5D7/F0OO\n      nS3rrbzAh7HO+X71Ow9kjbRKvSMNIRIiMHV31Vl1I2MBFS9FvuWKhPTo6J+dkkEG\n      WgxAcc3BcOsQy+/c0z2kzPMwDGOrcLZH9ysP/oYrlpsJ0K8ubL5TYpVYE2e6y7fS\n      83Ynqli69Ge7Y2VNkhN+3SKothNdsMCAVDUgWNfHaPM/JRUgOElGSS44weZGnQLO\n      0gCkE6J1+PdaqK5tRUwr9SzIBCQx7Fu+qKa3wqQoB73o+IC4U16dPZj6IqM4PLCJ\n      7sPyF3JvNOsAN8q88YvEsFtO4LfIzIPX3+FC3AqezRYMGk/4TCmkQdB7GiDOTj9/\n      dPF5ub6pGG5yIm9k8s3yocmZceHofo4ioy3xQR4Y3EEBUSvRR5o4nrMll3deVXK/\n      GrZJY9Ap7M9qpluBdd4BJ5pg3A==\n      -----END CERTIFICATE-----\n    server_key: |+\n      -----BEGIN RSA PRIVATE KEY-----\n      MIIEpAIBAAKCAQEA1Ntd2vDyXTN4blqzod6SvNgFPN4w6/cv3dpv5mLQ/dPDvOCM\n      QI8ClBExNerDZ5hFkj/gu3hH0IO9bk1OB0jtK0vcUudCTTJ+FcD1X8yu8VZPQnCp\n      VUiIP08x3r1TE8qe7mCKdRNysqwyYQw/+OE+HdNn8lVwMjoPL8xLqmFN+42+W3/t\n      errVovVODQd7Udy+BCOqFTl0I0NjKxe6a45ZtlDNMjPssxW+NNUJDJlCA/hHZgk9\n      OYQnDVmC/jrBwBtR2pEqgdT4v1MeQfP9hkT8NpZ7WlhdzDCoXCil6Pc/EWkawJSA\n      UehlchuvQhtrqDlq63aqiFTSkRFlyoHLy7vqkwIDAQABAoIBAQCYqe0axo1Nw0iw\n      /WSwyA2+W8EF8uZrlxJBsBVpy53RLzzIDtUIyIk04U/GN+aGOnRLfH0WeCIprxMC\n      NXetSeSwlOwkmbC35WsA9zAF0av3c8vM/ziz7h2qKoa+FlOrcjujBKLJbXVqKI7J\n      hButyP7gLWv0Jssdev7BbWknfjqMG8GZTgzzlqrTXVSvoQdLwIdfVy1a8Y1B2vUE\n      b0CZVZzUmrvpprhroePNxq+VefNjCpQyU8qQdd9KnIofCDpORCSaTe+5XEj3BMzT\n      frZb08Adr8FVheiZYEu0vTsbn+TMCh6LyhVmMPL9sMGwQeI16MXFAViPu6mU++Vp\n      7sk4dlYBAoGBANj7M/qaklvI12u/lvqBMjvCW1G6gDJcff3duvoCTEb5j5mCnf+X\n      vV1LIGzYnlgWxNyO8DF4j7eUOeLbbi2hHI4jiCNvAjeaAO9NQ5kTvcvTZSJgxpRE\n      UV8SVtCXK5eBckzSwH+pWQNouRgnYinw8q2qx/tnIYj/dPBmtgbMZRbTAoGBAPsi\n      TCHsUQFju+/ITLc1fV/QoyHFPQOJ8fP0yA+N45mZOaDv/Z0CzWQS2DM36jiydO4d\n      LnTCBRpEk//BGcdYwbTM6m4OjaN6Vvof6erfAf5WsEvaZhL+tOLTefOvBUZKfxRk\n      8nlN64zq7jdUkPC4EO5ed8EvE4+KN8Z3DZwLhQVBAoGAbTh9oK7/7z242h71w6EX\n      BSe/SfOEJlWSgiCDxuczOCLVGuO53nemNXjkmIWtpw/HBnLZCz3xsenl/YCRBFzt\n      /8p488UkK5LU16Bf34Ula508ckKekvGUuDOGCbeelMPvIiaQCXLYQLQNP9BLRGtp\n      7OtjgPQX2FsmpQA+rktis0sCgYEA+JvVXmfBMWz4KcHSIDR1rxqtw8qsQgqXWXhj\n      bPJ79Bx5rlambH7PsVfua5XY6tPPacG9sZw4zO5CzRbuXCgDaubI1LbXhJSh8e8R\n      9I9cO9q5n/3OutMnYr0TpycGQ7WP5DKiz29R1ijkNiYjbgnpyPAAAWCHLrwXxwMo\n      l+fXgYECgYAFyw5Vcm69GiD+IHodrQLavVw1OSyjQwbDdo955XPhpTzZ3FtLqTdD\n      nfmDn3ANf/ISCP+V5V9C1eKL1wVDOT2TZVLaE3y092KCxU+FsptC7oNOmIcff/x0\n      McJN1YzWFsHdV5hPCqAFV2zXDKMSy9Zd1B6wBUQCN5fl+8TLkFf/EA==\n      -----END RSA PRIVATE KEY-----\n    ca_cert: |+\n      -----BEGIN CERTIFICATE-----\n      MIIFBzCCAu+gAwIBAgIBATANBgkqhkiG9w0BAQsFADATMREwDwYDVQQDEwhjb25z\n      dWxDQTAeFw0xNjA0MjIxNjM4MzBaFw0yNjA0MjIxNjM4MzFaMBMxETAPBgNVBAMT\n      CGNvbnN1bENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAySc/E5I2\n      yi8MFRNMZuFSxiXpVCxxozC9md6FO8+8JnO46lguozUJV+5u+fHWkiZ0Cu2IZ8Qj\n      IgrGrj+z8c817IlimS4jUJ2RQ28SyEsf/CMK3pcfil0nJpoz+yEcgmROkaMc2LKb\n      Tj8DBhfjRGMM5L1GS0fEYoESe9GEr3QHbbkWD6E18CiBBbZWuw2JqqvxeElnuT5x\n      Qylw/0YdYA+O4Wa4yFTt8Igh34kjJUxPS5Z5u8hGG15icOZj//Kd9Q8XRlbGBQOi\n      OsilzUpbpJm++UtPf5CXNanWK3mQWEweGsgQU/vieKXbABpoZEP5B1/qxgew0SoR\n      P2C9G/L+TGWluqlu2y2wSUpedTcpEz+DV26RlsaC+YUekBIgQDinHwsq2EIGguOL\n      UvbQ9/IcB5QN5l5TbZZKsazFcRTYGTCcNTcZGxUHms/Yz4HX/rs0zSOUcJrjZLsr\n      /r/1sdIkJrRO4ANSrVtM1WTejpsHKN/gp71fDyoi3CT3hXdS8TOQWBXT94c6y3TI\n      GMr5HIYtFAH6H2DXzpyRXScGdSOWfamMQXJkbAOx782RJQOpm2um07J9DbH8ovES\n      9I6ieUvJ1exxn5sqe4cocdFm/5sxNHTXB01M2Fh0BJHvC6JYHocGO0cIe1qImJeP\n      zU5e7M50iOw3W4F9PqfR4b0aN9moOs1TVOcCAwEAAaNmMGQwDgYDVR0PAQH/BAQD\n      AgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFIMWJsyhkv1WTvSWUxct\n      wmbduzJtMB8GA1UdIwQYMBaAFIMWJsyhkv1WTvSWUxctwmbduzJtMA0GCSqGSIb3\n      DQEBCwUAA4ICAQA/8/xbZ+09AxI/3zAeWoYWVxu8e06yIqxqX4UUw8wB0I3A599j\n      PbvWPmaho7v2IxjSt0XrGynoBnWyPaPesCqOR7ggIYmTbsBYiN7Zncu9uL9JPb5t\n      3MkxBiBA0Vr4hfyruOt1OlyymctyQFcQh6PzAFer0Dd41lMbbm70yXtczSV7Kpl0\n      eUaTvlgmdBlnXnplePVLlTtTfQSGAkgmPg1HEvw6egJs4vB888mnt6ou6GeUK/Iz\n      OmjEpbcHNHv3BOUw5AssigDvickjWiP8l2MmBJte5ukySeRsYrR7LkrXBXNsC0Gy\n      bUyYqxdfCmerEiX4nF9Bh8Q53JaPcI39u3IrYylzZhofIMT+YFDltKBy5a5VSBNe\n      nySfZSG8gQBNUe5avDhkY6VPP3ZmanzFDTHCJ5PQuRSti5DlmP49Wq3qdbEmLkBB\n      KeLPdCSUGTEhELDXFZjmq+QTqd/DP0gK1KE6ccqYtP4LwrGk6LFrDDCZATORNZJq\n      XIH3pgQKoWhMzYGLG+zUHk1ORsL/khCt6sRk6mHLJBSVbv+mj48xV+x5qD77X3WI\n      FN8Sifv78INAlFMf5FgaoMloqI8WYrSLshKwzlMlOGD3cIEx7UJXOuowl05kQIBY\n      izb0yvD8f628ImPg5I2QK5Veo/MFNK5i9egoWCtluGyfjABmongS/V1F7w==\n      -----END CERTIFICATE-----\n    encrypt_keys: [\"consul-passphrase\"]\n    ttl_in_seconds: \"300\"\n    agent:\n      domain: cf.internal\n      mode: server\n      services:\n        etcd: {}\n        gorouter: {}\n        uaa: {}\n        cloud_controller_ng: {}\n        blobstore: {}\n        routing-api: {}\n        silk-controller: {}\n        policy-server: {}\n\n      servers:\n        lan: [127.0.0.1]\n  doppler:\n    zone: z1\n    outgoing_ip: 127.0.0.1\n    outgoing_port: 8083\n    dropsonde_incoming_port: 3460\n    incoming_tcp_port: 3461\n    websocket_host: 127.0.0.1\n  doppler_endpoint:\n    shared_secret: loggregator-secret\n  traffic_controller:\n    zone: z1\n    outgoing_port: 8084\n    pprof_port: 6062\n  loggregator:\n    doppler_port: 8083\n    uaa:\n      client_secret: loggregator-secret\n      url: \"https://uaa.local.pcfdev.io\"\n    etcd:\n      machines: [etcd.service.cf.internal]\n    tls:\n      ca_cert: |\n        -----BEGIN CERTIFICATE-----\n        MIIE8DCCAtigAwIBAgIBATANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDEw1sb2dn\n        cmVnYXRvckNBMB4XDTE3MDIxMDIzMjAzOFoXDTI3MDIxMDIzMjA0NVowGDEWMBQG\n        A1UEAxMNbG9nZ3JlZ2F0b3JDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC\n        ggIBANN+QfqnZl2cAoWsVwUb4Nk3hBXlQXnm+U4xitLqmtHVFrEVUGm7xEzbbAqB\n        5KfRBMhQPzmGsfgX+QKFOjJ73zlrbVSSWVmWS/UrbwUmc1Nk0w+t8s6uTn/KaGfu\n        4zDNlR/ZVkQ5CkJXAEGsA4mJJo/JNH8aswJHUn96l26JfT5P/CuCfOmt2mo9yu/A\n        O8/EdU06d6DjHIogUHKYmRp4r/4CfYed7V3jgZRqxbtIhvnDCL0zH0C1BX/wGJNm\n        H5YM181nLzTUp/aCIQSNzQV33vCGvlAaCfmJiEDXyGuDjOiTd8Lio7pLb7VSNHga\n        8EF4HvbZMNMS//dfdJ2aR72twnPFRiaJM1AScvtD55Pqty0dg0QH+UPQHor0BKVL\n        stZ9yLQeL6lPv6vjbTUWRSAHNLb+0rXYBXq42yMmoniZkq2DWTQIcXMzSENNyDaP\n        pzcZUTrTGuvWAFyrmOX7K836QTAhxbcpRLy6FVYo5/YnvSoVy3rKXxY7C75MZW7O\n        4/CTIjU/bfPYKwyGgOjocVGTgf7buUhjRuGrfYhAs9bPbd+f7zplZ+Tr09i1xa+j\n        V5vPREQckNCPxO0rr7I+v8jdpbdWNEJ/BMovuW9YKCx0xuuN+c8hM2myCBzRNqHk\n        kKu66pMSTKxZjHI/JcEGadjuwLq6Ynk6VubGGngRUq9w55mpAgMBAAGjRTBDMA4G\n        A1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQskvGk\n        RgSOZOlUmPl8i/yHY+PAnzANBgkqhkiG9w0BAQsFAAOCAgEAkvzipBJxnUH16F8L\n        qSJ6epHJGjVstFnmFk0cd+h0hjm3pRr6zvYMN9mdiEzZvpGF7yWz3ykDHZkT03Zl\n        +P/XYrwh1ettl71ouWkwNsnzTGhrdRIBOXJB3Ewh2toRhuP2kNYgkaE9x5vkklaJ\n        FJ9gpxf7V1pRttr5imIU23t+UcPeV/PKldL0Lqk452iHpwdGx+CiNrxXIc4WWnTt\n        gJcFWqOeBWPeIU7dnRuI2p16+vOO7NR1ujyxsCyC/YxZHAGMril1cKK+Std9DDeU\n        wxoaSZTC5tcLJxup/rd9BozbJSSM3MwmYOxfZYoCVzxaSd6UI00TD+5pThrVbX6b\n        eslSaVKrei1Ir9pAa+OnXcxyw4wWqgumX+/NHlsOTUX/VbK11vM8VZ9zDk3QxstB\n        Nye03iMbPBQ9y+TQWbN8FVsi1IabVZAG/99ZYXj2hiWkpNIEhx38EQ9Z6hPCBLiU\n        THkTfMyz8eC3k05zEKdNoqciLshXB5Vk1gkVnYPxrkOGmeHIaP9B3GXFX8OKFY+j\n        UE311qePXJEsP9rT114asPCL6+51y0wkqKd0kbsEnicQr0Rw3aTF1ehEIE4+rtRK\n        SDHGmlQr1Vi8HtonlFG+fPQGkaoVIcsCWQIjwp7JC1ELYpX14g2gNY3cSSYCj4Kv\n        CaJ+B0v34Xp/XcDb5qR8Efv33Xk=\n        -----END CERTIFICATE-----\n      doppler:\n        cert: |\n          -----BEGIN CERTIFICATE-----\n          MIIEJTCCAg2gAwIBAgIQWRLU9fVC01iejTbyzp9SSTANBgkqhkiG9w0BAQsFADAY\n          MRYwFAYDVQQDEw1sb2dncmVnYXRvckNBMB4XDTE3MDIxMDIzMjA0NVoXDTE5MDIx\n          MDIzMjA0NVowEjEQMA4GA1UEAxMHZG9wcGxlcjCCASIwDQYJKoZIhvcNAQEBBQAD\n          ggEPADCCAQoCggEBANq6Zv+ja9IRiMDh8DBTiA41O8wMKgAa0oNN4k5Ty5o0wGO7\n          OOosEC1jMAvKE7HKd8MvWojeKel7JEk4tQTLB2oitU5Kv5G6Ai84jjVEpL5F89Hn\n          kTqANAD3hMgeVBV94KD2+ETr4J6LMvrV3fs/AEFef3O27QvyRKDjUufNT9LyAf0A\n          rJlfhsHdTBx/YznO1rONdjJ1IewQtq/j0ymSEvLuJJPVntHHdIR/69mF7aeYf4IE\n          ajmslmFNNGCag5tqIsDFICyTBVheLSxHsTgEkgirSwPmfNfwKdqs7zmdSHkVxa3J\n          kzTmH/zAg6CpP3CfP0RMqxdsfD2oJmseQKkKW4sCAwEAAaNxMG8wDgYDVR0PAQH/\n          BAQDAgO4MB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQU\n          ciEo4XTzXwzldlVCvnyDMjSYv6kwHwYDVR0jBBgwFoAULJLxpEYEjmTpVJj5fIv8\n          h2PjwJ8wDQYJKoZIhvcNAQELBQADggIBAF150pKlhMLknK8XWt/dUu0UHyF6MRyA\n          cuoFIYRhnAxyb9K7+lRrkAPJ5kSG5c/fxRI4wj3ydI4ZfpHAGQGporJ3zdo1f/mD\n          fE3riecVlZpZ8aQwNh3MZsZnpwUn9V/VeYwFdsvpKlR1hdQJCKxK88HpXrq4dJB1\n          BPLM62AvFkNouWVrn2O9YDSluk5tzJ8A5sm8TFbOjQX4T9ceOfPQiSGYLiTaBORc\n          oFAzHNIT/ID0ONTrkt+ZSjYQJrPdyJheoSfRP8LLDM9hslsI+07xEHBces36T07d\n          0dlnFxrLxpiv+gB7UxCrnOW538Zxila8Z7CpDvafmMuwzYY2QmeeeekKKCf+xZAR\n          BKGg94XteD/w3hbEtyjUqOmNHVClC64aRzKR2eELMkZZzUlOLHZz5lw2miXjcwZU\n          0TTpM/ZtgwKTjTZXw6MQJmDoaFuxRjY3z0eqbnrZZtfosSSlO6psQLlTMcXIy2M9\n          t/vPzinQY7NsUY4Ty7Uw65tPbUhpnz0d1VVvcxUEqbyTEEHiL5WnjXSfOwZoZt2Q\n          21SJiAUq6NjPDwdGtAKWWAREYIKxFg0KZf7vWlLBV7Kdulot32T4WIZVJ+Hv1jZt\n          qhTTSxtYYAiUEY3ueJesXhARo+DT7w1pOSENlR0YhpNkLOkWKwoPwheqzdtSgx/m\n          HOoF5Coq8Y3+\n          -----END CERTIFICATE-----\n        key: |\n          -----BEGIN RSA PRIVATE KEY-----\n          MIIEpQIBAAKCAQEA2rpm/6Nr0hGIwOHwMFOIDjU7zAwqABrSg03iTlPLmjTAY7s4\n          6iwQLWMwC8oTscp3wy9aiN4p6XskSTi1BMsHaiK1Tkq/kboCLziONUSkvkXz0eeR\n          OoA0APeEyB5UFX3goPb4ROvgnosy+tXd+z8AQV5/c7btC/JEoONS581P0vIB/QCs\n          mV+Gwd1MHH9jOc7Ws412MnUh7BC2r+PTKZIS8u4kk9We0cd0hH/r2YXtp5h/ggRq\n          OayWYU00YJqDm2oiwMUgLJMFWF4tLEexOASSCKtLA+Z81/Ap2qzvOZ1IeRXFrcmT\n          NOYf/MCDoKk/cJ8/REyrF2x8Pagmax5AqQpbiwIDAQABAoIBAQCbV8GpE5aS9lMK\n          siyVFe5OMO6MJ6N4uZQDH0B34rl6hraQ3jo4zhybL5PC+7zrC2HtZOdGx4o6wXNu\n          8XBWvB9C+O2NcjcGN3YvtVoCaQMcA7B7xpv1UXIdsa1DN47+SI1NpLmEsYWw9Cm7\n          zkK+musCgivAsg0+68xj+6845C8qH9hFEYxG4soBE2AVj0TWzFc6s3uPoLTZeEQV\n          1+ucEoUUMliFV49PDifeuwO8c+hHEXurYpWGY78xKjCm66C0H8QcYOnPh8vI3/AK\n          8ku/HDoc9KeobiujAvpqfBmWfW5XJYLkPhpOrZr3OaILNl7Jo7L3XWIjCdR4HDrs\n          WyfWYuOhAoGBAOB6AFLBrrZlJmOtzlKHYCiP1Ho9NR7O9+AY6Q60/k6FFWnGOM5N\n          cU70sdIa071UxH1Ilu5lKzE+oEhRSHDMgb6qYtODF8YpzADfjaHkQJSnvPU9dgvh\n          Howy7KcK0odb5d1IkbKFAeTLbqi9ZDwWU+qE/AQoGO4PU0Sf7bi+d8fbAoGBAPlx\n          vkKptbnfiWN8RlyrO1ZK3jk///NON6WATYTK1A59JqJOwkWVCwnUwogI8A9zKg73\n          +yvMiMzpNAxmSTFlOL7WaD/d0Q0pJkMvopksPgpMGRsIu3j+QzNaauHZ3ZZkVMZC\n          BgFzvOhlUcg0du/kuloPXczKF1lZCR/D3PIPESIRAoGAO06gdTzszw3MZbuO7mkL\n          88uEZMN1HG2sOc37DUKuicpJjQetDHyTejvWG1+xH62cuEkMb3HVRo54RIMNM5gk\n          k15q+9z/1ABJANYPkn0+vsfOebDCVoMk0f/GXJ/UXaTfB2bb76GKjYtd8kEPkXyI\n          sUZvWx3I8GSmKFRkt1HDTc8CgYEAwCtRkVffSaAd3wfpyRCduQAarW5Rx+aVVio/\n          DjOYJMVj0xzr6+FDzMIdT+Ha13w4hamj1f1P0tVCJN9UOfqqOdNCIxnHKOVvtcjn\n          8is0bIhtuvcCPtdbfB+HQhGu9WK8MLTCnbHFciBEXgGVM4E505INCG0Uid/e+JrT\n          B6R15ZECgYEAiGchj4kQFVtkZg1raBcP14gsSW6dRGroIYRcN2HC0qfcNeviaFWC\n          BMs8X+svgJC8D5lI/Xov/Gdc7VXK/k50kWGChZDZK/O+a6TUyirYxBllB9LBmn46\n          pa2wmxyASvITto3jDCHpeyOJt+8Sq8XrHfPVWJkWcFbyj8bcrQXcVCQ=\n          -----END RSA PRIVATE KEY-----\n      metron:\n        cert: |\n          -----BEGIN CERTIFICATE-----\n          MIIEJDCCAgygAwIBAgIQRSoVfjx0yvwbhBGomUWfezANBgkqhkiG9w0BAQsFADAY\n          MRYwFAYDVQQDEw1sb2dncmVnYXRvckNBMB4XDTE3MDIxMDIzMjA0NloXDTE5MDIx\n          MDIzMjA0NlowETEPMA0GA1UEAxMGbWV0cm9uMIIBIjANBgkqhkiG9w0BAQEFAAOC\n          AQ8AMIIBCgKCAQEAy2HbU3xqYqGU16NAJQRJGAAMD4MtcXXNFAdwCN4pn/wrRKI9\n          JsiMgBMg7uiA8C6sB5NNIZ3VlO3y58BMG+Lc400N2MylpXCfrap+QNPnIR6ZB8yH\n          apwOQqJ36G3bag0VQhRacFdyDgACsbxnswmw+z/PtjILDp4XmWOibdvm/bPDxHTP\n          2+jXbkyusaW7BPtNa+zG0i/T2ZC0K0kuMx/O4o65yWXuKmYlK9TUUWibzkDVtuyu\n          QEcVK9No/beLDaMYMrKCuKfdxfK//HE/NhCXcx/n0AGrnSjD/rHv47KX4AeMUKfD\n          6/koem8TwCNwNNT63DENK9j/wkuZwZiIh4KGAwIDAQABo3EwbzAOBgNVHQ8BAf8E\n          BAMCA7gwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMB0GA1UdDgQWBBQg\n          JJ9Ag2xtyyZeO/NhfFSPQZcf9jAfBgNVHSMEGDAWgBQskvGkRgSOZOlUmPl8i/yH\n          Y+PAnzANBgkqhkiG9w0BAQsFAAOCAgEAvc+T0iwzT7G8oYy+9IZpB6RfAF7ZjTBM\n          7J1Q7GAh8M7YgPldTwv+I7Jnyv1ogehnb0K8vhbad2S7OBljLdbsIe8UIxgcVSNP\n          B/nW6d37EPxamj26aaFhvxaAL4HMb3lLKQRvyN7jM0upHhgv5NKsgpQp+WRgr76A\n          2pBUZlxtilG4an5gX/GB21e2Mv62Fx+W81VMGVAxIeh14XAK89+mXjZvTMPyFAYV\n          HvohpSOzkp8nxyltOvxHqymPZNGPxe2AII6yJT+sqLmiCHCYZOqTBgKbSdblTYnx\n          xae5QCpVrFBHfZVRARsYXMm0WZKWZZ3YTCqPxMx7oFDha6mY1PeJExg5amXK/arm\n          3lNS5LZysfwmyooucAoI29R6XvK07nyVnuLoZkVNtaqMrlNalwVtZEgLkJuy8gCV\n          +G3zpkPpzxYzuWePt+ug1RGICzsaImNPpc3YhFCOXTRCzL/ElcTiYnPa94FKpwHS\n          vafjBU2oXy0jLQkozQhD0y64fASXmbxp1EqfXDMhUN/IPTWZLWRsO8/cS4pcSheQ\n          YmKA9xwJOZvDgM7shc124mjw5TKici4TUbpY0k/3WJlwAPxqXP3OWiv5tUWmNagu\n          2A8gc9W6NNin7COTgCcpMdp99XRP95TildxBsHRDrgE/F8gxGtlkLb5pohkPni5G\n          nOHB7OPKG0w=\n          -----END CERTIFICATE-----\n        key: |\n          -----BEGIN RSA PRIVATE KEY-----\n          MIIEowIBAAKCAQEAy2HbU3xqYqGU16NAJQRJGAAMD4MtcXXNFAdwCN4pn/wrRKI9\n          JsiMgBMg7uiA8C6sB5NNIZ3VlO3y58BMG+Lc400N2MylpXCfrap+QNPnIR6ZB8yH\n          apwOQqJ36G3bag0VQhRacFdyDgACsbxnswmw+z/PtjILDp4XmWOibdvm/bPDxHTP\n          2+jXbkyusaW7BPtNa+zG0i/T2ZC0K0kuMx/O4o65yWXuKmYlK9TUUWibzkDVtuyu\n          QEcVK9No/beLDaMYMrKCuKfdxfK//HE/NhCXcx/n0AGrnSjD/rHv47KX4AeMUKfD\n          6/koem8TwCNwNNT63DENK9j/wkuZwZiIh4KGAwIDAQABAoIBAAvtEhJkMkzUUskO\n          Tp2dEbgxkIN8WrbThJIPGZe7h09VVygwJ0vV6L893+mCgsUSx42uKpC1E6gnB95l\n          HVFpTTCa/RvgbDo2T3a8j6i3hE8h3zFg4fPzcLahlkxv3LTsTXnRfbgmuI5vm7jW\n          ZnJOOC2TgVeauaFCzfl1qTmt8m6f+BhqpQ50kPk9Qkue+cWa8BR5sxX7IOpuThK2\n          doTygApvpRGt1hyTnuhvVc8gnfIFzS8TENrpysoBxP/xqtqCXefwpXP9nD5Z7zDZ\n          INlZDvGNzagG+zLZ0iZi0nrHgjx1dD/otlO1r2FN+rWLcQ9GqYzHUFkWI/qE7lP/\n          7BEM+GECgYEA+GQWuSmCuyhnECnz0QWvslaU+PuO+egF/pjO8NIBn5mKpDblyCdb\n          svKTFMV+6gHxTNF5+d34Tr2jaTo7eTsj9+j+CjiZYM7kZRxQPGSjd66a+0bCQx16\n          d81HuIKf1U2wWd5TTmeX5/qCvECfcZt/W84py5hU3Ua6V+mGaHOrGFMCgYEA0ZzN\n          5zGobha34tFrV85aWT2XyIfPFrm0PkOi/hFyDaYqBV0D7RhxIjc+AGX7E3qoc5Z+\n          O9Acs2RboZbxDvIwwnldPvgoleGpMqeeVVJl+hbwOeMRfuR3rG/3yAatkkc4TqrB\n          SqfienSCFy4aPKLP7/ZSlr/qYkFrOvzCP/zbZZECgYBQDOmp2O/x4057zhlutrdt\n          8StnpqLodVdhOtwOjo/JYNFmpO6e99g8rqKqIhAJ2IBssmHuHhRFRCai5gp+womP\n          /v3IS39azLKcx2gwXnq0OohmDOLUgG6Up4rCsw5RzwzTmawda5NwRrLVerooAeYk\n          ryeXHsvS2FV7uZ4Aka6FUwKBgQCieyr8iHioBYI7FtxfbvyH6n+qmOOFGSRHk4RX\n          70v6mpA+IhD2C5k+zZWJF4QdYFoNZ12onbRxtlx1EJ0BWelEBnGqaxCCxi6yrk3E\n          k5+q0XcbWBFqzEyb5Rsr+Uk4d26FREWayjJ7e66Pq1P5JreKqeTxKAjWayFk0yL8\n          GNQ0kQKBgBALKyo8NHRJ+KvMwAGm49vIwaIgcq4yVhtzO0JoNuC60hwPrAWhJiGL\n          yO6MJS7zcbCtzmJbPJRefOPg4Mp9Mr3B7nRzafqEX9lpKvUrJvPKhXZM215JZej8\n          ShcLxA/Cpsm0f7mZKGByBIInIQ8xesJAyl25xjfDDgh1VYa7dbLG\n          -----END RSA PRIVATE KEY-----\n      trafficcontroller:\n        cert: |\n          -----BEGIN CERTIFICATE-----\n          MIIEMDCCAhigAwIBAgIRAPGFxcdjGPFKaz0GCLRvgEQwDQYJKoZIhvcNAQELBQAw\n          GDEWMBQGA1UEAxMNbG9nZ3JlZ2F0b3JDQTAeFw0xNzAyMTAyMzIwNDVaFw0xOTAy\n          MTAyMzIwNDVaMBwxGjAYBgNVBAMTEXRyYWZmaWNjb250cm9sbGVyMIIBIjANBgkq\n          hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwL5w7niAM/v01u7hD5KYiiBwI/unxcUb\n          68f/vTlQYlE30RoW82/nuf2lAN4Hu/aXzNpT/PYYWrV/LmmglsneDUQCSr3OCv8S\n          R9b6IlFhtGbKOqH+hJ5ReANAlhWfpLFokq+XKw8EN0Do4BCl1GjH2Xv2gQ3mn5yA\n          CT91HYLDLaJAl5XLmUUZvNaEO0eyMGsDJdJbdVBwSfODwuoKzhB4RPyOE3WCQflJ\n          L5Be/vqHmtqTI0dv6A21Vm5vxd+DA8t9BAq1Q5ZH6s6MaC2J5gzRYFN0IVBSGkEC\n          jOKiHez7B4xL6s53pCF5YRnON6ILBGp2GeFAankajlop5FhRkZfzPwIDAQABo3Ew\n          bzAOBgNVHQ8BAf8EBAMCA7gwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMC\n          MB0GA1UdDgQWBBSce9TO1i5M/pHUtOexXdSHS/uNqzAfBgNVHSMEGDAWgBQskvGk\n          RgSOZOlUmPl8i/yHY+PAnzANBgkqhkiG9w0BAQsFAAOCAgEAiSHgy0g5DFU/rlPX\n          eiva6r+a1gHO/TSgd1anPqPkctHkl4264UKBBjIt18Fbf9dU0Icj+JEFDViLXUr/\n          KQc7r0+tDCJd/IS8QWX0z5jyvsx1lDxcVUWnddxqCC/xQ2d7n8eqEC34ywW+Vsr0\n          Eoq9boMOI1RnkBGI1ELbCK+3yDKo8jVUjsMmpzbBV44ydkhrsiDldLk4lsEByAD9\n          TdGVGXw7wEO8DiPSm6nj6UWNtIcM6rnttTV9KvjGIISeKLWz9+fd68S+1IpXw7VU\n          afX4ELB1rTwnG7TTtGyQmRL2O4JZWwP8tu3IcnmxiwxB70PkIntxnNC5Greth4uH\n          7n2wkxvxhi+5v+njhtSNTgHGIq7EIN+8ztHlgx1Ol0nHpBCVfvMuc3aY4+jg3qe7\n          m55Vh3TaDrxQqXuEb2j6mu9Lk+B7Rl5WBjvJVzxFUL8NmABmEL+X8GfhMcwldPo8\n          qO8BZtSX/9UozkCItxuq1EsxiWNDKSDEF2XGxJP8U6uDk96rSnY4TuJNKjnF9SUm\n          7nrcQzrezF8OqQhZIomzYe3tVqCTI34p+iYTsrH8xLIPuiSaePpLsJ/747f2bHWR\n          i8ESZ5P+ALVR4fOJiNZJHwLhs4umVzCaBOiAF+65d29/q9Cg7dX9l8rOhznz0q7d\n          KQXFegrpMEzZdpvlJjkvr5dbkys=\n          -----END CERTIFICATE-----\n        key: |\n          -----BEGIN RSA PRIVATE KEY-----\n          MIIEogIBAAKCAQEAwL5w7niAM/v01u7hD5KYiiBwI/unxcUb68f/vTlQYlE30RoW\n          82/nuf2lAN4Hu/aXzNpT/PYYWrV/LmmglsneDUQCSr3OCv8SR9b6IlFhtGbKOqH+\n          hJ5ReANAlhWfpLFokq+XKw8EN0Do4BCl1GjH2Xv2gQ3mn5yACT91HYLDLaJAl5XL\n          mUUZvNaEO0eyMGsDJdJbdVBwSfODwuoKzhB4RPyOE3WCQflJL5Be/vqHmtqTI0dv\n          6A21Vm5vxd+DA8t9BAq1Q5ZH6s6MaC2J5gzRYFN0IVBSGkECjOKiHez7B4xL6s53\n          pCF5YRnON6ILBGp2GeFAankajlop5FhRkZfzPwIDAQABAoIBABrqfVrP+RdJWCer\n          tEI4dpTTctWTjxpPLFcA1vXVyyPvs5u/yPS16+ZNRX2Zg/r7tLcmxhPNShlgvyH8\n          HjDwf9HabXeCigN/G05s9wFT3BEVSahmduSON1JLIfnTize0jqXtX27j6fLNXbfs\n          mzvOZho49XOQPWSMtlSUSAaW/Cqi/9RB1AQNZcZTRFEyiyhMiQKZgA7ekAatsMoh\n          fPMIJuvSgAqG6PnquT/gRJTSWqm6vyN2nY23cVkmXRU/DuMsYEfj5lZH1dDxG+dX\n          oWi/uvsePSZz89udFm399O2tWoe3BWGi6MZ83wFD8jNE5txIjUPsGO+vofdIhZtz\n          oh3EFAECgYEA4tjF6y+YOjk2sv6TLxyhVl9bql5DazFaFh2L9hO90ztPTaYgTop/\n          9EYJZpRmaxWV4wNCedyaXbn5iQqM8g2O5f7pxWW943X1+SYjuI2YIaWIBNdM0HJ3\n          m/rKVzP/9iolD0sR3FBAXpmLAZCL5IEuUn9kPEd37yjXxESQhG5r4skCgYEA2YOw\n          UQgRvr0bC0tITmkOHSKW11hungMuQR6XK20zfDMJHZnkxLNXrTspwTmZ8apDi3nR\n          BD7HghywQF1xx4A3H2d5J4afqZTgRZhRLm0C517J3FxVHsIqdl9mFcbz80S+lzwl\n          8BmKIDPIb864VCE8xF+Y2i9L3VQ1gULg7qoo4ccCgYB0iI2sEwgtqOSbsUHlKt0K\n          5PPPIpuZvoGb6NPUtzGGCOrlZdkk3+t5jl0X8FZo3m7gbvVAav519armJqBfXG2z\n          Y2+uM2UIK7oPovMoxLyJVGL6savJTXR6kaxOfe0ZBW+CWrszJZrbvh71z869tUsZ\n          oE3a1ZAcMSwerGZdUehkWQKBgDghU46Vln6yLhhsBOy3D31VP7eyilkcWQNU8Y2z\n          UGXshZ2t6OsZnLaHXe8O/jruxR9pABcoXDOnU5RIiOQCojbobMtWYj1Qvc83zzs7\n          xlQOkejbqtuVH4AMfjuAa9OLGePNEb0z2gEVW9P+dHLBYP0L7lXffqRO5r/EkmcE\n          YihhAoGARgQ8aC2j2SEwl8v2cpv5zcA/lcdZiP2Vcz954bZOsHexxi7Nk0iWR3iL\n          WapnbSaoNEsXer59rWea/sCGIpYv6RHLEx/ssO7H53l18+yxwX+Er1AuZaa/S69r\n          PsgZJuOL9WAqdDsW7TyDQTjUzj9a5stNqPcBn2PMJgy56xUKq/4=\n          -----END RSA PRIVATE KEY-----\n      syslogdrainbinder:\n        cert: |\n          -----BEGIN CERTIFICATE-----\n          MIIExzCCA6+gAwIBAgIJAOPFFRMyK2dVMA0GCSqGSIb3DQEBBQUAMIGdMR4wHAYD\n          VQQDFBUqLnNlcnZpY2UuY2YuaW50ZXJuYWwxCzAJBgNVBAYTAlVTMREwDwYDVQQI\n          EwhOZXctWW9yazERMA8GA1UEBxMITmV3IFlvcmsxEDAOBgNVBAoTB1Bpdm90YWwx\n          EDAOBgNVBAsTB1BDRiBEZXYxJDAiBgkqhkiG9w0BCQEWFXBjZmRldi1lbmdAcGl2\n          b3RhbC5pbzAeFw0xNzAyMTUyMjM1MzlaFw0xODAyMTUyMjM1MzlaMIGdMR4wHAYD\n          VQQDFBUqLnNlcnZpY2UuY2YuaW50ZXJuYWwxCzAJBgNVBAYTAlVTMREwDwYDVQQI\n          EwhOZXctWW9yazERMA8GA1UEBxMITmV3IFlvcmsxEDAOBgNVBAoTB1Bpdm90YWwx\n          EDAOBgNVBAsTB1BDRiBEZXYxJDAiBgkqhkiG9w0BCQEWFXBjZmRldi1lbmdAcGl2\n          b3RhbC5pbzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMOPQlCJnidk\n          8XLD0TysGURSJ35BBCaKPGULVEWklO5nzP68J21nY/1oUEdnA1d5cJh27U2D6gZ6\n          PEN7RsZTmpygFOQQaxbc8IKx86ackI6HCq3WwiDA92IJMMvedPrGWUNoG6h/qAwi\n          RCo3TdV61zfy0mqBdxa1X0algUQOZCUHk6R+DRbCThXQyZW7MNyfnNb1ubw03eHp\n          eSTxMvYm0k/+EbYtheY1h/MJklidEEwTw5ygw8KcxowcCFjdJjaqVgPhNZCNTuA6\n          GUrIQJ9hB/KHpHmmiege3peq5RQZg/EfoDUtRbVd5V1z7t+2O+IgBTEKBY5yzr4S\n          RxK9tdHEn+MCAwEAAaOCAQYwggECMB0GA1UdDgQWBBRRUvkBTZ+jf0ao85VurNMQ\n          v2QJdTCB0gYDVR0jBIHKMIHHgBRRUvkBTZ+jf0ao85VurNMQv2QJdaGBo6SBoDCB\n          nTEeMBwGA1UEAxQVKi5zZXJ2aWNlLmNmLmludGVybmFsMQswCQYDVQQGEwJVUzER\n          MA8GA1UECBMITmV3LVlvcmsxETAPBgNVBAcTCE5ldyBZb3JrMRAwDgYDVQQKEwdQ\n          aXZvdGFsMRAwDgYDVQQLEwdQQ0YgRGV2MSQwIgYJKoZIhvcNAQkBFhVwY2ZkZXYt\n          ZW5nQHBpdm90YWwuaW+CCQDjxRUTMitnVTAMBgNVHRMEBTADAQH/MA0GCSqGSIb3\n          DQEBBQUAA4IBAQBk19J3yfMb0DEC/BBDlHUyGvvsLr0PVbZGtYT7qxHkqOQBFz1k\n          q65aeNuT8D0GSMy6gfF64cRPp3A7a8NfeYsSoynufMHMaMKEzlYjSyNGwDcxyRwv\n          eQ7w4QeX9EnRCBf/JQdC9bIIs9IoJAgNHhEZHnzdnt76NX1hJ+w8SVTgi5zdQknr\n          v+wroKbStKy2R5qxnW1bPgt6AtMoE3M/ZUj+DNQvU3wEcTasWuxvDUOhZfoOM0Rd\n          UxpHKQp+6PPugE59i/xg/Vm53FrAQ6+4Tn6w5jjtWBszH8OxFkyD+mKhKsh/DkfV\n          kXvnbnHRmaEsQBbnWkhygDws3S1YT8/vTZBw\n          -----END CERTIFICATE-----\n        key: |\n          -----BEGIN RSA PRIVATE KEY-----\n          MIIEowIBAAKCAQEAw49CUImeJ2TxcsPRPKwZRFInfkEEJoo8ZQtURaSU7mfM/rwn\n          bWdj/WhQR2cDV3lwmHbtTYPqBno8Q3tGxlOanKAU5BBrFtzwgrHzppyQjocKrdbC\n          IMD3Ygkwy950+sZZQ2gbqH+oDCJEKjdN1XrXN/LSaoF3FrVfRqWBRA5kJQeTpH4N\n          FsJOFdDJlbsw3J+c1vW5vDTd4el5JPEy9ibST/4Rti2F5jWH8wmSWJ0QTBPDnKDD\n          wpzGjBwIWN0mNqpWA+E1kI1O4DoZSshAn2EH8oekeaaJ6B7el6rlFBmD8R+gNS1F\n          tV3lXXPu37Y74iAFMQoFjnLOvhJHEr210cSf4wIDAQABAoIBAQCTF1gb18cbfnOV\n          jO/+oLvIhbqq3iBPFL7kiabzUx2qTG0GVWOaiJ/O5P0tF7CNxQwJwbowCb6m7J4T\n          a9AKMKwkjsvn1umVos1MoKjRcwXQDobbxqLxm/L2zE7lqQd38GUHrHDRRmOR7Nw0\n          nLBwmBr1PDFEZui6LeXh727RT7nHlx6yo6cIYUrQBWaFSZJmfPD2pCMLRvEEY/0v\n          yuv6NwuRVdO/P7R+pLDXDDbOktOiFvy9QUz4KtY2ZgZHobHZ9LJlyqFiC7wFQkMs\n          la9vBniARgE1vX9D1QJJZ01ilivjiRDHaEq7EnZ9kRoO/ln3Yqlhr5OjAeQMFlMR\n          AkX9h2VxAoGBAPnfruRdP5JTdXmun4IA0Nn3a3ZG7dNkUIl/yfhTKCD8ITGq5MXV\n          aNSkOTVurkhrA38RuM6RQPypbjGRYdQrRMeKv6IrTC+sb7BhgcYe32370K8Y3TTX\n          hgB24larb8jPot6f7nvkTbJJpwmHE8cXm7Gkmr6n340GPJzfmJke+H3fAoGBAMha\n          rS+fCIyI3YwxmcyrA7nEKmAg2tTLiJ7xIY8i/ADwedqAnV8oAfScMw7IAF1EBkAt\n          z2xfQhm1/pIqr1GcLxOgqvbixXfmM2qsLS/Zb/T6aOJ5xejsI3d21CIg5LwxF/EO\n          1hm5ereMdDTFw914HcO2Wap0Kyqg8MSd1GxgIhZ9AoGAOOqKm9nhsSLxj1YHX0Vw\n          TTXedIKTiaM/9RH2n2nRqjHEHdwfYDDMQCNoJJOhfz1g/oC659KOSv8M6p2C+yEf\n          +ZPRMs9J+1H73uFW/hnqKtNBJaE0QeUV0OVDiRpjzAn/v1YOrInEaOf99F2gU6k8\n          /anQ1bzHXwgcpl8IE1jKoWECgYAFVORm8AR6OOosYOWG3MYsm1vFUxp/ryrjj+ck\n          t/mczMlxVxrY/WeP6tgw/IGF+dlwu8dZSu+nX4B2w0wHD/DwxMXH7CD1H9sea5aI\n          P3ELQ96mqDbsC9ylwTPD9LwhheztLUflR1pMqCAvh1O/AQNJwgCA2LaNW9sMYGbW\n          u3gswQKBgGsjcgS8l6cAYXOncwN6ROyosL6xkvc8zzUSH/KdPcXbAJZm/hQYeAyS\n          QFAzUdyCXnokknYbLcsNmVqO+FAXQ+S2lwaBxS0uHWc7oc0KYaNPdFHSW0PCGj9u\n          rvaEn/skAHkQTbLPPoPmuOs5qwWgYkMB6AHcSeCmBQokX7Zn7nfR\n          -----END RSA PRIVATE KEY-----\n  loggregator_endpoint:\n    shared_secret: loggregator-secret\n  metron_endpoint:\n    shared_secret: loggregator-secret\n  uaa:\n    url: \"https://uaa.local.pcfdev.io\"\n    catalina_opts: -Xms200m -Xmx200m -Xss1m -XX:MetaspaceSize=144m -XX:MaxMetaspaceSize=144m\n    port: 8085\n    host: 127.0.0.1\n    tls_port: 8443\n    ssl:\n      port: 8443\n      host: 127.0.0.1\n    ca_cert: |\n      -----BEGIN CERTIFICATE-----\n      MIIExzCCA6+gAwIBAgIJAOPFFRMyK2dVMA0GCSqGSIb3DQEBBQUAMIGdMR4wHAYD\n      VQQDFBUqLnNlcnZpY2UuY2YuaW50ZXJuYWwxCzAJBgNVBAYTAlVTMREwDwYDVQQI\n      EwhOZXctWW9yazERMA8GA1UEBxMITmV3IFlvcmsxEDAOBgNVBAoTB1Bpdm90YWwx\n      EDAOBgNVBAsTB1BDRiBEZXYxJDAiBgkqhkiG9w0BCQEWFXBjZmRldi1lbmdAcGl2\n      b3RhbC5pbzAeFw0xNzAyMTUyMjM1MzlaFw0xODAyMTUyMjM1MzlaMIGdMR4wHAYD\n      VQQDFBUqLnNlcnZpY2UuY2YuaW50ZXJuYWwxCzAJBgNVBAYTAlVTMREwDwYDVQQI\n      EwhOZXctWW9yazERMA8GA1UEBxMITmV3IFlvcmsxEDAOBgNVBAoTB1Bpdm90YWwx\n      EDAOBgNVBAsTB1BDRiBEZXYxJDAiBgkqhkiG9w0BCQEWFXBjZmRldi1lbmdAcGl2\n      b3RhbC5pbzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMOPQlCJnidk\n      8XLD0TysGURSJ35BBCaKPGULVEWklO5nzP68J21nY/1oUEdnA1d5cJh27U2D6gZ6\n      PEN7RsZTmpygFOQQaxbc8IKx86ackI6HCq3WwiDA92IJMMvedPrGWUNoG6h/qAwi\n      RCo3TdV61zfy0mqBdxa1X0algUQOZCUHk6R+DRbCThXQyZW7MNyfnNb1ubw03eHp\n      eSTxMvYm0k/+EbYtheY1h/MJklidEEwTw5ygw8KcxowcCFjdJjaqVgPhNZCNTuA6\n      GUrIQJ9hB/KHpHmmiege3peq5RQZg/EfoDUtRbVd5V1z7t+2O+IgBTEKBY5yzr4S\n      RxK9tdHEn+MCAwEAAaOCAQYwggECMB0GA1UdDgQWBBRRUvkBTZ+jf0ao85VurNMQ\n      v2QJdTCB0gYDVR0jBIHKMIHHgBRRUvkBTZ+jf0ao85VurNMQv2QJdaGBo6SBoDCB\n      nTEeMBwGA1UEAxQVKi5zZXJ2aWNlLmNmLmludGVybmFsMQswCQYDVQQGEwJVUzER\n      MA8GA1UECBMITmV3LVlvcmsxETAPBgNVBAcTCE5ldyBZb3JrMRAwDgYDVQQKEwdQ\n      aXZvdGFsMRAwDgYDVQQLEwdQQ0YgRGV2MSQwIgYJKoZIhvcNAQkBFhVwY2ZkZXYt\n      ZW5nQHBpdm90YWwuaW+CCQDjxRUTMitnVTAMBgNVHRMEBTADAQH/MA0GCSqGSIb3\n      DQEBBQUAA4IBAQBk19J3yfMb0DEC/BBDlHUyGvvsLr0PVbZGtYT7qxHkqOQBFz1k\n      q65aeNuT8D0GSMy6gfF64cRPp3A7a8NfeYsSoynufMHMaMKEzlYjSyNGwDcxyRwv\n      eQ7w4QeX9EnRCBf/JQdC9bIIs9IoJAgNHhEZHnzdnt76NX1hJ+w8SVTgi5zdQknr\n      v+wroKbStKy2R5qxnW1bPgt6AtMoE3M/ZUj+DNQvU3wEcTasWuxvDUOhZfoOM0Rd\n      UxpHKQp+6PPugE59i/xg/Vm53FrAQ6+4Tn6w5jjtWBszH8OxFkyD+mKhKsh/DkfV\n      kXvnbnHRmaEsQBbnWkhygDws3S1YT8/vTZBw\n      -----END CERTIFICATE-----\n    sslCertificate: |\n      -----BEGIN CERTIFICATE-----\n      MIIExzCCA6+gAwIBAgIJAOPFFRMyK2dVMA0GCSqGSIb3DQEBBQUAMIGdMR4wHAYD\n      VQQDFBUqLnNlcnZpY2UuY2YuaW50ZXJuYWwxCzAJBgNVBAYTAlVTMREwDwYDVQQI\n      EwhOZXctWW9yazERMA8GA1UEBxMITmV3IFlvcmsxEDAOBgNVBAoTB1Bpdm90YWwx\n      EDAOBgNVBAsTB1BDRiBEZXYxJDAiBgkqhkiG9w0BCQEWFXBjZmRldi1lbmdAcGl2\n      b3RhbC5pbzAeFw0xNzAyMTUyMjM1MzlaFw0xODAyMTUyMjM1MzlaMIGdMR4wHAYD\n      VQQDFBUqLnNlcnZpY2UuY2YuaW50ZXJuYWwxCzAJBgNVBAYTAlVTMREwDwYDVQQI\n      EwhOZXctWW9yazERMA8GA1UEBxMITmV3IFlvcmsxEDAOBgNVBAoTB1Bpdm90YWwx\n      EDAOBgNVBAsTB1BDRiBEZXYxJDAiBgkqhkiG9w0BCQEWFXBjZmRldi1lbmdAcGl2\n      b3RhbC5pbzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMOPQlCJnidk\n      8XLD0TysGURSJ35BBCaKPGULVEWklO5nzP68J21nY/1oUEdnA1d5cJh27U2D6gZ6\n      PEN7RsZTmpygFOQQaxbc8IKx86ackI6HCq3WwiDA92IJMMvedPrGWUNoG6h/qAwi\n      RCo3TdV61zfy0mqBdxa1X0algUQOZCUHk6R+DRbCThXQyZW7MNyfnNb1ubw03eHp\n      eSTxMvYm0k/+EbYtheY1h/MJklidEEwTw5ygw8KcxowcCFjdJjaqVgPhNZCNTuA6\n      GUrIQJ9hB/KHpHmmiege3peq5RQZg/EfoDUtRbVd5V1z7t+2O+IgBTEKBY5yzr4S\n      RxK9tdHEn+MCAwEAAaOCAQYwggECMB0GA1UdDgQWBBRRUvkBTZ+jf0ao85VurNMQ\n      v2QJdTCB0gYDVR0jBIHKMIHHgBRRUvkBTZ+jf0ao85VurNMQv2QJdaGBo6SBoDCB\n      nTEeMBwGA1UEAxQVKi5zZXJ2aWNlLmNmLmludGVybmFsMQswCQYDVQQGEwJVUzER\n      MA8GA1UECBMITmV3LVlvcmsxETAPBgNVBAcTCE5ldyBZb3JrMRAwDgYDVQQKEwdQ\n      aXZvdGFsMRAwDgYDVQQLEwdQQ0YgRGV2MSQwIgYJKoZIhvcNAQkBFhVwY2ZkZXYt\n      ZW5nQHBpdm90YWwuaW+CCQDjxRUTMitnVTAMBgNVHRMEBTADAQH/MA0GCSqGSIb3\n      DQEBBQUAA4IBAQBk19J3yfMb0DEC/BBDlHUyGvvsLr0PVbZGtYT7qxHkqOQBFz1k\n      q65aeNuT8D0GSMy6gfF64cRPp3A7a8NfeYsSoynufMHMaMKEzlYjSyNGwDcxyRwv\n      eQ7w4QeX9EnRCBf/JQdC9bIIs9IoJAgNHhEZHnzdnt76NX1hJ+w8SVTgi5zdQknr\n      v+wroKbStKy2R5qxnW1bPgt6AtMoE3M/ZUj+DNQvU3wEcTasWuxvDUOhZfoOM0Rd\n      UxpHKQp+6PPugE59i/xg/Vm53FrAQ6+4Tn6w5jjtWBszH8OxFkyD+mKhKsh/DkfV\n      kXvnbnHRmaEsQBbnWkhygDws3S1YT8/vTZBw\n      -----END CERTIFICATE-----\n    sslPrivateKey: |\n      -----BEGIN RSA PRIVATE KEY-----\n      MIIEowIBAAKCAQEAw49CUImeJ2TxcsPRPKwZRFInfkEEJoo8ZQtURaSU7mfM/rwn\n      bWdj/WhQR2cDV3lwmHbtTYPqBno8Q3tGxlOanKAU5BBrFtzwgrHzppyQjocKrdbC\n      IMD3Ygkwy950+sZZQ2gbqH+oDCJEKjdN1XrXN/LSaoF3FrVfRqWBRA5kJQeTpH4N\n      FsJOFdDJlbsw3J+c1vW5vDTd4el5JPEy9ibST/4Rti2F5jWH8wmSWJ0QTBPDnKDD\n      wpzGjBwIWN0mNqpWA+E1kI1O4DoZSshAn2EH8oekeaaJ6B7el6rlFBmD8R+gNS1F\n      tV3lXXPu37Y74iAFMQoFjnLOvhJHEr210cSf4wIDAQABAoIBAQCTF1gb18cbfnOV\n      jO/+oLvIhbqq3iBPFL7kiabzUx2qTG0GVWOaiJ/O5P0tF7CNxQwJwbowCb6m7J4T\n      a9AKMKwkjsvn1umVos1MoKjRcwXQDobbxqLxm/L2zE7lqQd38GUHrHDRRmOR7Nw0\n      nLBwmBr1PDFEZui6LeXh727RT7nHlx6yo6cIYUrQBWaFSZJmfPD2pCMLRvEEY/0v\n      yuv6NwuRVdO/P7R+pLDXDDbOktOiFvy9QUz4KtY2ZgZHobHZ9LJlyqFiC7wFQkMs\n      la9vBniARgE1vX9D1QJJZ01ilivjiRDHaEq7EnZ9kRoO/ln3Yqlhr5OjAeQMFlMR\n      AkX9h2VxAoGBAPnfruRdP5JTdXmun4IA0Nn3a3ZG7dNkUIl/yfhTKCD8ITGq5MXV\n      aNSkOTVurkhrA38RuM6RQPypbjGRYdQrRMeKv6IrTC+sb7BhgcYe32370K8Y3TTX\n      hgB24larb8jPot6f7nvkTbJJpwmHE8cXm7Gkmr6n340GPJzfmJke+H3fAoGBAMha\n      rS+fCIyI3YwxmcyrA7nEKmAg2tTLiJ7xIY8i/ADwedqAnV8oAfScMw7IAF1EBkAt\n      z2xfQhm1/pIqr1GcLxOgqvbixXfmM2qsLS/Zb/T6aOJ5xejsI3d21CIg5LwxF/EO\n      1hm5ereMdDTFw914HcO2Wap0Kyqg8MSd1GxgIhZ9AoGAOOqKm9nhsSLxj1YHX0Vw\n      TTXedIKTiaM/9RH2n2nRqjHEHdwfYDDMQCNoJJOhfz1g/oC659KOSv8M6p2C+yEf\n      +ZPRMs9J+1H73uFW/hnqKtNBJaE0QeUV0OVDiRpjzAn/v1YOrInEaOf99F2gU6k8\n      /anQ1bzHXwgcpl8IE1jKoWECgYAFVORm8AR6OOosYOWG3MYsm1vFUxp/ryrjj+ck\n      t/mczMlxVxrY/WeP6tgw/IGF+dlwu8dZSu+nX4B2w0wHD/DwxMXH7CD1H9sea5aI\n      P3ELQ96mqDbsC9ylwTPD9LwhheztLUflR1pMqCAvh1O/AQNJwgCA2LaNW9sMYGbW\n      u3gswQKBgGsjcgS8l6cAYXOncwN6ROyosL6xkvc8zzUSH/KdPcXbAJZm/hQYeAyS\n      QFAzUdyCXnokknYbLcsNmVqO+FAXQ+S2lwaBxS0uHWc7oc0KYaNPdFHSW0PCGj9u\n      rvaEn/skAHkQTbLPPoPmuOs5qwWgYkMB6AHcSeCmBQokX7Zn7nfR\n      -----END RSA PRIVATE KEY-----\n    proxy_ips_regex: \".*\"\n    user:\n      authorities:\n      - openid\n      - scim.me\n      - cloud_controller.read\n      - cloud_controller.write\n      - cloud_controller_service_permissions.read\n      - password.write\n      - uaa.user\n      - approvals.me\n      - oauth.approvals\n      - notification_preferences.read\n      - notification_preferences.write\n      - profile\n      - roles\n      - user_attributes\n      - uaa.offline_token\n    clients:\n      cc_routing:\n        authorities: routing.router_groups.read\n        authorized-grant-types: client_credentials\n        secret: cc-routing-secret\n      cc-service-dashboards:\n        authorities: clients.admin,clients.read,clients.write\n        authorized-grant-types: client_credentials\n        override: true\n        scope: cloud_controller.read,cloud_controller.write,cloud_controller_service_permissions.read,openid\n        secret: cc-broker-secret\n      cf:\n        access-token-validity: 600\n        authorities: uaa.none\n        authorized-grant-types: password,refresh_token\n        override: true\n        secret: ''\n        refresh-token-validity: 2592000\n        scope: cloud_controller.admin,cloud_controller.admin_read_only,cloud_controller.global_auditor,cloud_controller.read,cloud_controller.write,doppler.firehose,network.admin,openid,password.write,routing.router_groups.read,routing.router_groups.write,scim.read,scim.write,uaa.user,network.admin,network.write\n      cloud_controller_username_lookup:\n        authorities: scim.userids\n        authorized-grant-types: client_credentials\n        secret: cloud-controller-username-lookup-secret\n      doppler:\n        authorities: uaa.resource\n        secret: loggregator-secret\n        authorized-grant-types: client_credentials\n        scope: uaa.none\n        override: true\n      gorouter:\n        authorities: clients.admin,clients.read,clients.write,routing.routes.read,routing.routes.write\n        authorized-grant-types: client_credentials,refresh_token\n        scope: cloud_controller_service_permissions.read,openid\n        secret: gorouter-secret\n      login:\n        authorities: clients.read,critical_notifications.write,emails.write,notifications.write,oauth.login,password.write,scim.userids,scim.write\n        authorized-grant-types: client_credentials,refresh_token\n        autoapprove: true\n        override: true\n        redirect-uri: \"https://login.local.pcfdev.io\"\n        scope: oauth.approvals,openid\n        secret: login-secret\n      notifications:\n        authorities: cloud_controller.admin,critical_notifications.write,emails.write,notifications.write,scim.read\n        authorized-grant-types: client_credentials\n        secret: notifications-secret\n      ssh-proxy:\n        authorized-grant-types: authorization_code\n        autoapprove: true\n        override: true\n        redirect-uri: \"https://uaa.local.pcfdev.io/login\"\n        scope: cloud_controller.admin,cloud_controller.read,cloud_controller.write,openid\n        secret: ssh-proxy-secret\n      tcp_emitter:\n        access-token-validity: 1209600\n        authorities: routing.router_groups.read,routing.routes.read,routing.routes.write\n        authorized-grant-types: client_credentials,refresh_token\n        override: true\n        scope: routing.router_groups.read,routing.routes.read,routing.routes.write\n        secret: tcp-emitter-secret\n      tcp_router:\n        access-token-validity: 1209600\n        authorities: routing.router_groups.read,routing.routes.read\n        authorized-grant-types: client_credentials,refresh_token\n        override: true\n        scope: routing.router_groups.read,routing.routes.read\n        secret: tcp-router-secret\n      network-policy:\n        authorities: uaa.resource,cloud_controller.admin_read_only\n        authorized-grant-types: client_credentials\n        secret: network-policy-secret\n    admin:\n      client_secret: admin-client-secret\n    cc:\n      client_secret: cc-client-secret\n    scim:\n      user:\n        override: true\n      users:\n      - name: admin\n        password: admin\n        groups:\n        - clients.read\n        - clients.write\n        - cloud_controller.admin\n        - cloud_controller.user\n        - doppler.firehose\n        - openid\n        - routing.router_groups.read\n        - routing.router_groups.write\n        - scim.read\n        - scim.write\n        - network.admin\n        - network.write\n    require_https: true\n    jwt:\n      policy:\n        active_key_id: key-1\n        keys:\n          key-1:\n            signingKey: |\n              -----BEGIN RSA PRIVATE KEY-----\n              MIICXAIBAAKBgQDHFr+KICms+tuT1OXJwhCUmR2dKVy7psa8xzElSyzqx7oJyfJ1\n              JZyOzToj9T5SfTIq396agbHJWVfYphNahvZ/7uMXqHxf+ZH9BL1gk9Y6kCnbM5R6\n              0gfwjyW1/dQPjOzn9N394zd2FJoFHwdq9Qs0wBugspULZVNRxq7veq/fzwIDAQAB\n              AoGBAJ8dRTQFhIllbHx4GLbpTQsWXJ6w4hZvskJKCLM/o8R4n+0W45pQ1xEiYKdA\n              Z/DRcnjltylRImBD8XuLL8iYOQSZXNMb1h3g5/UGbUXLmCgQLOUUlnYt34QOQm+0\n              KvUqfMSFBbKMsYBAoQmNdTHBaz3dZa8ON9hh/f5TT8u0OWNRAkEA5opzsIXv+52J\n              duc1VGyX3SwlxiE2dStW8wZqGiuLH142n6MKnkLU4ctNLiclw6BZePXFZYIK+AkE\n              xQ+k16je5QJBAN0TIKMPWIbbHVr5rkdUqOyezlFFWYOwnMmw/BKa1d3zp54VP/P8\n              +5aQ2d4sMoKEOfdWH7UqMe3FszfYFvSu5KMCQFMYeFaaEEP7Jn8rGzfQ5HQd44ek\n              lQJqmq6CE2BXbY/i34FuvPcKU70HEEygY6Y9d8J3o6zQ0K9SYNu+pcXt4lkCQA3h\n              jJQQe5uEGJTExqed7jllQ0khFJzLMx0K6tj0NeeIzAaGCQz13oo2sCdeGRHO4aDh\n              HH6Qlq/6UOV5wP8+GAcCQFgRCcB+hrje8hfEEefHcFpyKH+5g1Eu1k0mLrxK2zd+\n              4SlotYRHgPCEubokb2S1zfZDWIXW3HmggnGgM949TlY=\n              -----END RSA PRIVATE KEY-----\n    zones:\n      internal:\n        hostnames:\n        - uaa.service.cf.internal\n  route_registrar:\n    routes:\n    - name: policy-server\n      port: 4002\n      registration_interval: 20s\n      uris:\n      - \"api.local.pcfdev.io/networking\"\n    - name: doppler\n      port: 8081\n      registration_interval: 20s\n      uris:\n      - doppler.local.pcfdev.io\n    - name: cf-mysql-broker\n      port: 19284\n      registration_interval: 20s\n      uris:\n      - mysql-broker.local.pcfdev.io\n    - name: loggregator\n      port: 8084\n      registration_interval: 20s\n      uris:\n      - loggregator.local.pcfdev.io\n    - name: api\n      port: 9022\n      registration_interval: 20s\n      uris:\n      - api.local.pcfdev.io\n    - name: uaa\n      port: 8085\n      registration_interval: 20s\n      uris:\n      - \"uaa.local.pcfdev.io\"\n      - \"*.uaa.local.pcfdev.io\"\n      - \"login.local.pcfdev.io\"\n      - \"*.login.local.pcfdev.io\"\n    - name: blobstore\n      port: 8086\n      registration_interval: 20s\n      uris:\n      - blobstore.local.pcfdev.io\n    - name: localbroker\n      port: 8999\n      registration_interval: 20s\n      tags:\n        component: localbroker\n      uris:\n      - localbroker.local.pcfdev.io\n  uaadb:\n    address: 127.0.0.1\n    databases:\n    - {name: uaadb, tag: uaa}\n    db_scheme: mysql\n    port: 3306\n    roles:\n    - {name: uaaadmin, password: admin, tag: admin}\n  app_ssh:\n    host_key_fingerprint: a6:d1:08:0b:b0:cb:9b:5f:c4:ba:44:2a:97:26:19:8a\n  cc:\n    default_app_disk_in_mb: 512\n    default_app_memory: 256\n    default_to_diego_backend: true\n    diego:\n      stager_url: http://stager.service.cf.internal:8890\n    srv_api_uri: http://api.local.pcfdev.io\n    bulk_api_password: bulk-api-password\n    internal_api_password: internal-api-password\n    nginx:\n      ip: 127.0.0.1\n    db_encryption_key: db-encryption-key\n    db_logging_level: info\n    quota_definitions:\n      default:\n          memory_limit: 102400\n          non_basic_services_allowed: true\n          total_routes: 1000\n          total_services: -1\n    security_group_definitions:\n    - name: public_networks\n      rules:\n      - {destination: 0.0.0.0-9.255.255.255, protocol: all}\n      - {destination: 11.0.0.0-169.253.255.255, protocol: all}\n      - {destination: 169.255.0.0-172.15.255.255, protocol: all}\n      - {destination: 172.32.0.0-192.167.255.255, protocol: all}\n      - {destination: 192.169.0.0-255.255.255.255, protocol: all}\n    - name: dns\n      rules:\n      - {destination: 0.0.0.0/0, ports: '53', protocol: tcp}\n      - {destination: 0.0.0.0/0, ports: '53', protocol: udp}\n    - name: all_pcfdev\n      rules:\n      - {destination: 0.0.0.0/0, protocol: all}\n    staging_upload_user: staging-user\n    staging_upload_password: staging-pass\n    default_running_security_groups: [public_networks, dns, all_pcfdev]\n    default_staging_security_groups: [public_networks, dns, all_pcfdev]\n    external_protocol: http\n    install_buildpacks:\n    - {name: java_buildpack, package: java-offline-buildpack}\n    - {name: ruby_buildpack, package: ruby-buildpack}\n    - {name: nodejs_buildpack, package: nodejs-buildpack}\n    - {name: go_buildpack, package: go-buildpack}\n    - {name: python_buildpack, package: python-buildpack}\n    - {name: php_buildpack, package: php-buildpack}\n    - {name: staticfile_buildpack, package: staticfile-buildpack}\n    - {name: binary_buildpack, package: binary-buildpack}\n    buildpacks:\n      blobstore_type: webdav\n      webdav_config:\n        ca_cert: \"\"\n        username: admin\n        password: admin\n        public_endpoint: http://blobstore.local.pcfdev.io\n        private_endpoint: https://blobstore.service.cf.internal:4043\n    droplets:\n      blobstore_type: webdav\n      webdav_config:\n        ca_cert: \"\"\n        username: admin\n        password: admin\n        public_endpoint: http://blobstore.local.pcfdev.io\n        private_endpoint: https://blobstore.service.cf.internal:4043\n    packages:\n      blobstore_type: webdav\n      webdav_config:\n        ca_cert: \"\"\n        username: admin\n        password: admin\n        public_endpoint: http://blobstore.local.pcfdev.io\n        private_endpoint: https://blobstore.service.cf.internal:4043\n    resource_pool:\n      blobstore_type: webdav\n      webdav_config:\n        ca_cert: \"\"\n        username: admin\n        password: admin\n        public_endpoint: http://blobstore.local.pcfdev.io\n        private_endpoint: https://blobstore.service.cf.internal:4043\n    volume_services_enabled: true\n    mutual_tls:\n      ca_cert: |\n        -----BEGIN CERTIFICATE-----\n        MIIExzCCA6+gAwIBAgIJAOPFFRMyK2dVMA0GCSqGSIb3DQEBBQUAMIGdMR4wHAYD\n        VQQDFBUqLnNlcnZpY2UuY2YuaW50ZXJuYWwxCzAJBgNVBAYTAlVTMREwDwYDVQQI\n        EwhOZXctWW9yazERMA8GA1UEBxMITmV3IFlvcmsxEDAOBgNVBAoTB1Bpdm90YWwx\n        EDAOBgNVBAsTB1BDRiBEZXYxJDAiBgkqhkiG9w0BCQEWFXBjZmRldi1lbmdAcGl2\n        b3RhbC5pbzAeFw0xNzAyMTUyMjM1MzlaFw0xODAyMTUyMjM1MzlaMIGdMR4wHAYD\n        VQQDFBUqLnNlcnZpY2UuY2YuaW50ZXJuYWwxCzAJBgNVBAYTAlVTMREwDwYDVQQI\n        EwhOZXctWW9yazERMA8GA1UEBxMITmV3IFlvcmsxEDAOBgNVBAoTB1Bpdm90YWwx\n        EDAOBgNVBAsTB1BDRiBEZXYxJDAiBgkqhkiG9w0BCQEWFXBjZmRldi1lbmdAcGl2\n        b3RhbC5pbzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMOPQlCJnidk\n        8XLD0TysGURSJ35BBCaKPGULVEWklO5nzP68J21nY/1oUEdnA1d5cJh27U2D6gZ6\n        PEN7RsZTmpygFOQQaxbc8IKx86ackI6HCq3WwiDA92IJMMvedPrGWUNoG6h/qAwi\n        RCo3TdV61zfy0mqBdxa1X0algUQOZCUHk6R+DRbCThXQyZW7MNyfnNb1ubw03eHp\n        eSTxMvYm0k/+EbYtheY1h/MJklidEEwTw5ygw8KcxowcCFjdJjaqVgPhNZCNTuA6\n        GUrIQJ9hB/KHpHmmiege3peq5RQZg/EfoDUtRbVd5V1z7t+2O+IgBTEKBY5yzr4S\n        RxK9tdHEn+MCAwEAAaOCAQYwggECMB0GA1UdDgQWBBRRUvkBTZ+jf0ao85VurNMQ\n        v2QJdTCB0gYDVR0jBIHKMIHHgBRRUvkBTZ+jf0ao85VurNMQv2QJdaGBo6SBoDCB\n        nTEeMBwGA1UEAxQVKi5zZXJ2aWNlLmNmLmludGVybmFsMQswCQYDVQQGEwJVUzER\n        MA8GA1UECBMITmV3LVlvcmsxETAPBgNVBAcTCE5ldyBZb3JrMRAwDgYDVQQKEwdQ\n        aXZvdGFsMRAwDgYDVQQLEwdQQ0YgRGV2MSQwIgYJKoZIhvcNAQkBFhVwY2ZkZXYt\n        ZW5nQHBpdm90YWwuaW+CCQDjxRUTMitnVTAMBgNVHRMEBTADAQH/MA0GCSqGSIb3\n        DQEBBQUAA4IBAQBk19J3yfMb0DEC/BBDlHUyGvvsLr0PVbZGtYT7qxHkqOQBFz1k\n        q65aeNuT8D0GSMy6gfF64cRPp3A7a8NfeYsSoynufMHMaMKEzlYjSyNGwDcxyRwv\n        eQ7w4QeX9EnRCBf/JQdC9bIIs9IoJAgNHhEZHnzdnt76NX1hJ+w8SVTgi5zdQknr\n        v+wroKbStKy2R5qxnW1bPgt6AtMoE3M/ZUj+DNQvU3wEcTasWuxvDUOhZfoOM0Rd\n        UxpHKQp+6PPugE59i/xg/Vm53FrAQ6+4Tn6w5jjtWBszH8OxFkyD+mKhKsh/DkfV\n        kXvnbnHRmaEsQBbnWkhygDws3S1YT8/vTZBw\n        -----END CERTIFICATE-----\n      public_cert: |\n        -----BEGIN CERTIFICATE-----\n        MIIExzCCA6+gAwIBAgIJAOPFFRMyK2dVMA0GCSqGSIb3DQEBBQUAMIGdMR4wHAYD\n        VQQDFBUqLnNlcnZpY2UuY2YuaW50ZXJuYWwxCzAJBgNVBAYTAlVTMREwDwYDVQQI\n        EwhOZXctWW9yazERMA8GA1UEBxMITmV3IFlvcmsxEDAOBgNVBAoTB1Bpdm90YWwx\n        EDAOBgNVBAsTB1BDRiBEZXYxJDAiBgkqhkiG9w0BCQEWFXBjZmRldi1lbmdAcGl2\n        b3RhbC5pbzAeFw0xNzAyMTUyMjM1MzlaFw0xODAyMTUyMjM1MzlaMIGdMR4wHAYD\n        VQQDFBUqLnNlcnZpY2UuY2YuaW50ZXJuYWwxCzAJBgNVBAYTAlVTMREwDwYDVQQI\n        EwhOZXctWW9yazERMA8GA1UEBxMITmV3IFlvcmsxEDAOBgNVBAoTB1Bpdm90YWwx\n        EDAOBgNVBAsTB1BDRiBEZXYxJDAiBgkqhkiG9w0BCQEWFXBjZmRldi1lbmdAcGl2\n        b3RhbC5pbzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMOPQlCJnidk\n        8XLD0TysGURSJ35BBCaKPGULVEWklO5nzP68J21nY/1oUEdnA1d5cJh27U2D6gZ6\n        PEN7RsZTmpygFOQQaxbc8IKx86ackI6HCq3WwiDA92IJMMvedPrGWUNoG6h/qAwi\n        RCo3TdV61zfy0mqBdxa1X0algUQOZCUHk6R+DRbCThXQyZW7MNyfnNb1ubw03eHp\n        eSTxMvYm0k/+EbYtheY1h/MJklidEEwTw5ygw8KcxowcCFjdJjaqVgPhNZCNTuA6\n        GUrIQJ9hB/KHpHmmiege3peq5RQZg/EfoDUtRbVd5V1z7t+2O+IgBTEKBY5yzr4S\n        RxK9tdHEn+MCAwEAAaOCAQYwggECMB0GA1UdDgQWBBRRUvkBTZ+jf0ao85VurNMQ\n        v2QJdTCB0gYDVR0jBIHKMIHHgBRRUvkBTZ+jf0ao85VurNMQv2QJdaGBo6SBoDCB\n        nTEeMBwGA1UEAxQVKi5zZXJ2aWNlLmNmLmludGVybmFsMQswCQYDVQQGEwJVUzER\n        MA8GA1UECBMITmV3LVlvcmsxETAPBgNVBAcTCE5ldyBZb3JrMRAwDgYDVQQKEwdQ\n        aXZvdGFsMRAwDgYDVQQLEwdQQ0YgRGV2MSQwIgYJKoZIhvcNAQkBFhVwY2ZkZXYt\n        ZW5nQHBpdm90YWwuaW+CCQDjxRUTMitnVTAMBgNVHRMEBTADAQH/MA0GCSqGSIb3\n        DQEBBQUAA4IBAQBk19J3yfMb0DEC/BBDlHUyGvvsLr0PVbZGtYT7qxHkqOQBFz1k\n        q65aeNuT8D0GSMy6gfF64cRPp3A7a8NfeYsSoynufMHMaMKEzlYjSyNGwDcxyRwv\n        eQ7w4QeX9EnRCBf/JQdC9bIIs9IoJAgNHhEZHnzdnt76NX1hJ+w8SVTgi5zdQknr\n        v+wroKbStKy2R5qxnW1bPgt6AtMoE3M/ZUj+DNQvU3wEcTasWuxvDUOhZfoOM0Rd\n        UxpHKQp+6PPugE59i/xg/Vm53FrAQ6+4Tn6w5jjtWBszH8OxFkyD+mKhKsh/DkfV\n        kXvnbnHRmaEsQBbnWkhygDws3S1YT8/vTZBw\n        -----END CERTIFICATE-----\n      private_key: |\n        -----BEGIN RSA PRIVATE KEY-----\n        MIIEowIBAAKCAQEAw49CUImeJ2TxcsPRPKwZRFInfkEEJoo8ZQtURaSU7mfM/rwn\n        bWdj/WhQR2cDV3lwmHbtTYPqBno8Q3tGxlOanKAU5BBrFtzwgrHzppyQjocKrdbC\n        IMD3Ygkwy950+sZZQ2gbqH+oDCJEKjdN1XrXN/LSaoF3FrVfRqWBRA5kJQeTpH4N\n        FsJOFdDJlbsw3J+c1vW5vDTd4el5JPEy9ibST/4Rti2F5jWH8wmSWJ0QTBPDnKDD\n        wpzGjBwIWN0mNqpWA+E1kI1O4DoZSshAn2EH8oekeaaJ6B7el6rlFBmD8R+gNS1F\n        tV3lXXPu37Y74iAFMQoFjnLOvhJHEr210cSf4wIDAQABAoIBAQCTF1gb18cbfnOV\n        jO/+oLvIhbqq3iBPFL7kiabzUx2qTG0GVWOaiJ/O5P0tF7CNxQwJwbowCb6m7J4T\n        a9AKMKwkjsvn1umVos1MoKjRcwXQDobbxqLxm/L2zE7lqQd38GUHrHDRRmOR7Nw0\n        nLBwmBr1PDFEZui6LeXh727RT7nHlx6yo6cIYUrQBWaFSZJmfPD2pCMLRvEEY/0v\n        yuv6NwuRVdO/P7R+pLDXDDbOktOiFvy9QUz4KtY2ZgZHobHZ9LJlyqFiC7wFQkMs\n        la9vBniARgE1vX9D1QJJZ01ilivjiRDHaEq7EnZ9kRoO/ln3Yqlhr5OjAeQMFlMR\n        AkX9h2VxAoGBAPnfruRdP5JTdXmun4IA0Nn3a3ZG7dNkUIl/yfhTKCD8ITGq5MXV\n        aNSkOTVurkhrA38RuM6RQPypbjGRYdQrRMeKv6IrTC+sb7BhgcYe32370K8Y3TTX\n        hgB24larb8jPot6f7nvkTbJJpwmHE8cXm7Gkmr6n340GPJzfmJke+H3fAoGBAMha\n        rS+fCIyI3YwxmcyrA7nEKmAg2tTLiJ7xIY8i/ADwedqAnV8oAfScMw7IAF1EBkAt\n        z2xfQhm1/pIqr1GcLxOgqvbixXfmM2qsLS/Zb/T6aOJ5xejsI3d21CIg5LwxF/EO\n        1hm5ereMdDTFw914HcO2Wap0Kyqg8MSd1GxgIhZ9AoGAOOqKm9nhsSLxj1YHX0Vw\n        TTXedIKTiaM/9RH2n2nRqjHEHdwfYDDMQCNoJJOhfz1g/oC659KOSv8M6p2C+yEf\n        +ZPRMs9J+1H73uFW/hnqKtNBJaE0QeUV0OVDiRpjzAn/v1YOrInEaOf99F2gU6k8\n        /anQ1bzHXwgcpl8IE1jKoWECgYAFVORm8AR6OOosYOWG3MYsm1vFUxp/ryrjj+ck\n        t/mczMlxVxrY/WeP6tgw/IGF+dlwu8dZSu+nX4B2w0wHD/DwxMXH7CD1H9sea5aI\n        P3ELQ96mqDbsC9ylwTPD9LwhheztLUflR1pMqCAvh1O/AQNJwgCA2LaNW9sMYGbW\n        u3gswQKBgGsjcgS8l6cAYXOncwN6ROyosL6xkvc8zzUSH/KdPcXbAJZm/hQYeAyS\n        QFAzUdyCXnokknYbLcsNmVqO+FAXQ+S2lwaBxS0uHWc7oc0KYaNPdFHSW0PCGj9u\n        rvaEn/skAHkQTbLPPoPmuOs5qwWgYkMB6AHcSeCmBQokX7Zn7nfR\n        -----END RSA PRIVATE KEY-----\n  ccdb:\n    address: 127.0.0.1\n    databases:\n    - {name: ccdb, tag: cc}\n    db_scheme: mysql\n    port: 3306\n    roles:\n    - {name: ccadmin, password: admin, tag: admin}\n  login:\n    url: \"https://login.local.pcfdev.io\"\n    protocol: https\n    logout:\n      redirect:\n        parameter:\n          disable: false\n    links: {}\n    saml:\n      serviceProviderCertificate: |\n        -----BEGIN CERTIFICATE-----\n        MIIExzCCA6+gAwIBAgIJAOPFFRMyK2dVMA0GCSqGSIb3DQEBBQUAMIGdMR4wHAYD\n        VQQDFBUqLnNlcnZpY2UuY2YuaW50ZXJuYWwxCzAJBgNVBAYTAlVTMREwDwYDVQQI\n        EwhOZXctWW9yazERMA8GA1UEBxMITmV3IFlvcmsxEDAOBgNVBAoTB1Bpdm90YWwx\n        EDAOBgNVBAsTB1BDRiBEZXYxJDAiBgkqhkiG9w0BCQEWFXBjZmRldi1lbmdAcGl2\n        b3RhbC5pbzAeFw0xNzAyMTUyMjM1MzlaFw0xODAyMTUyMjM1MzlaMIGdMR4wHAYD\n        VQQDFBUqLnNlcnZpY2UuY2YuaW50ZXJuYWwxCzAJBgNVBAYTAlVTMREwDwYDVQQI\n        EwhOZXctWW9yazERMA8GA1UEBxMITmV3IFlvcmsxEDAOBgNVBAoTB1Bpdm90YWwx\n        EDAOBgNVBAsTB1BDRiBEZXYxJDAiBgkqhkiG9w0BCQEWFXBjZmRldi1lbmdAcGl2\n        b3RhbC5pbzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMOPQlCJnidk\n        8XLD0TysGURSJ35BBCaKPGULVEWklO5nzP68J21nY/1oUEdnA1d5cJh27U2D6gZ6\n        PEN7RsZTmpygFOQQaxbc8IKx86ackI6HCq3WwiDA92IJMMvedPrGWUNoG6h/qAwi\n        RCo3TdV61zfy0mqBdxa1X0algUQOZCUHk6R+DRbCThXQyZW7MNyfnNb1ubw03eHp\n        eSTxMvYm0k/+EbYtheY1h/MJklidEEwTw5ygw8KcxowcCFjdJjaqVgPhNZCNTuA6\n        GUrIQJ9hB/KHpHmmiege3peq5RQZg/EfoDUtRbVd5V1z7t+2O+IgBTEKBY5yzr4S\n        RxK9tdHEn+MCAwEAAaOCAQYwggECMB0GA1UdDgQWBBRRUvkBTZ+jf0ao85VurNMQ\n        v2QJdTCB0gYDVR0jBIHKMIHHgBRRUvkBTZ+jf0ao85VurNMQv2QJdaGBo6SBoDCB\n        nTEeMBwGA1UEAxQVKi5zZXJ2aWNlLmNmLmludGVybmFsMQswCQYDVQQGEwJVUzER\n        MA8GA1UECBMITmV3LVlvcmsxETAPBgNVBAcTCE5ldyBZb3JrMRAwDgYDVQQKEwdQ\n        aXZvdGFsMRAwDgYDVQQLEwdQQ0YgRGV2MSQwIgYJKoZIhvcNAQkBFhVwY2ZkZXYt\n        ZW5nQHBpdm90YWwuaW+CCQDjxRUTMitnVTAMBgNVHRMEBTADAQH/MA0GCSqGSIb3\n        DQEBBQUAA4IBAQBk19J3yfMb0DEC/BBDlHUyGvvsLr0PVbZGtYT7qxHkqOQBFz1k\n        q65aeNuT8D0GSMy6gfF64cRPp3A7a8NfeYsSoynufMHMaMKEzlYjSyNGwDcxyRwv\n        eQ7w4QeX9EnRCBf/JQdC9bIIs9IoJAgNHhEZHnzdnt76NX1hJ+w8SVTgi5zdQknr\n        v+wroKbStKy2R5qxnW1bPgt6AtMoE3M/ZUj+DNQvU3wEcTasWuxvDUOhZfoOM0Rd\n        UxpHKQp+6PPugE59i/xg/Vm53FrAQ6+4Tn6w5jjtWBszH8OxFkyD+mKhKsh/DkfV\n        kXvnbnHRmaEsQBbnWkhygDws3S1YT8/vTZBw\n        -----END CERTIFICATE-----\n      serviceProviderKey: |\n        -----BEGIN RSA PRIVATE KEY-----\n        MIIEowIBAAKCAQEAw49CUImeJ2TxcsPRPKwZRFInfkEEJoo8ZQtURaSU7mfM/rwn\n        bWdj/WhQR2cDV3lwmHbtTYPqBno8Q3tGxlOanKAU5BBrFtzwgrHzppyQjocKrdbC\n        IMD3Ygkwy950+sZZQ2gbqH+oDCJEKjdN1XrXN/LSaoF3FrVfRqWBRA5kJQeTpH4N\n        FsJOFdDJlbsw3J+c1vW5vDTd4el5JPEy9ibST/4Rti2F5jWH8wmSWJ0QTBPDnKDD\n        wpzGjBwIWN0mNqpWA+E1kI1O4DoZSshAn2EH8oekeaaJ6B7el6rlFBmD8R+gNS1F\n        tV3lXXPu37Y74iAFMQoFjnLOvhJHEr210cSf4wIDAQABAoIBAQCTF1gb18cbfnOV\n        jO/+oLvIhbqq3iBPFL7kiabzUx2qTG0GVWOaiJ/O5P0tF7CNxQwJwbowCb6m7J4T\n        a9AKMKwkjsvn1umVos1MoKjRcwXQDobbxqLxm/L2zE7lqQd38GUHrHDRRmOR7Nw0\n        nLBwmBr1PDFEZui6LeXh727RT7nHlx6yo6cIYUrQBWaFSZJmfPD2pCMLRvEEY/0v\n        yuv6NwuRVdO/P7R+pLDXDDbOktOiFvy9QUz4KtY2ZgZHobHZ9LJlyqFiC7wFQkMs\n        la9vBniARgE1vX9D1QJJZ01ilivjiRDHaEq7EnZ9kRoO/ln3Yqlhr5OjAeQMFlMR\n        AkX9h2VxAoGBAPnfruRdP5JTdXmun4IA0Nn3a3ZG7dNkUIl/yfhTKCD8ITGq5MXV\n        aNSkOTVurkhrA38RuM6RQPypbjGRYdQrRMeKv6IrTC+sb7BhgcYe32370K8Y3TTX\n        hgB24larb8jPot6f7nvkTbJJpwmHE8cXm7Gkmr6n340GPJzfmJke+H3fAoGBAMha\n        rS+fCIyI3YwxmcyrA7nEKmAg2tTLiJ7xIY8i/ADwedqAnV8oAfScMw7IAF1EBkAt\n        z2xfQhm1/pIqr1GcLxOgqvbixXfmM2qsLS/Zb/T6aOJ5xejsI3d21CIg5LwxF/EO\n        1hm5ereMdDTFw914HcO2Wap0Kyqg8MSd1GxgIhZ9AoGAOOqKm9nhsSLxj1YHX0Vw\n        TTXedIKTiaM/9RH2n2nRqjHEHdwfYDDMQCNoJJOhfz1g/oC659KOSv8M6p2C+yEf\n        +ZPRMs9J+1H73uFW/hnqKtNBJaE0QeUV0OVDiRpjzAn/v1YOrInEaOf99F2gU6k8\n        /anQ1bzHXwgcpl8IE1jKoWECgYAFVORm8AR6OOosYOWG3MYsm1vFUxp/ryrjj+ck\n        t/mczMlxVxrY/WeP6tgw/IGF+dlwu8dZSu+nX4B2w0wHD/DwxMXH7CD1H9sea5aI\n        P3ELQ96mqDbsC9ylwTPD9LwhheztLUflR1pMqCAvh1O/AQNJwgCA2LaNW9sMYGbW\n        u3gswQKBgGsjcgS8l6cAYXOncwN6ROyosL6xkvc8zzUSH/KdPcXbAJZm/hQYeAyS\n        QFAzUdyCXnokknYbLcsNmVqO+FAXQ+S2lwaBxS0uHWc7oc0KYaNPdFHSW0PCGj9u\n        rvaEn/skAHkQTbLPPoPmuOs5qwWgYkMB6AHcSeCmBQokX7Zn7nfR\n        -----END RSA PRIVATE KEY-----\n  hm9000:\n    port: \"some-port\"\n    url: \"some-url\"\n\n  router:\n    debug_address: 127.0.0.1:17003\n    enable_ssl: true\n    ssl_cert: |\n      -----BEGIN CERTIFICATE-----\n      MIIGqTCCBRGgAwIBAgIJALiQgFdICQWiMA0GCSqGSIb3DQEBCwUAMIHOMQswCQYD\n      VQQGEwJVUzERMA8GA1UECBMITmV3IFlvcmsxETAPBgNVBAcTCE5ldyBZb3JrMRAw\n      DgYDVQQKEwdQaXZvdGFsMRYwFAYDVQQLEw1DbG91ZCBGb3VuZHJ5MUkwRwYDVQQD\n      FEAqLmxvY2FsLnBjZmRldi5pbywqLmxvZ2luLmxvY2FsLnBjZmRldi5pbywgKi51\n      YWEubG9jYWwucGNmZGV2LmlvMSQwIgYJKoZIhvcNAQkBFhVwY2ZkZXYtZW5nQHBp\n      dm90YWwuaW8wHhcNMTYwNDA2MjE1MTU1WhcNMTgwNDA2MjE1MTU1WjCBzjELMAkG\n      A1UEBhMCVVMxETAPBgNVBAgTCE5ldyBZb3JrMREwDwYDVQQHEwhOZXcgWW9yazEQ\n      MA4GA1UEChMHUGl2b3RhbDEWMBQGA1UECxMNQ2xvdWQgRm91bmRyeTFJMEcGA1UE\n      AxRAKi5sb2NhbC5wY2ZkZXYuaW8sKi5sb2dpbi5sb2NhbC5wY2ZkZXYuaW8sICou\n      dWFhLmxvY2FsLnBjZmRldi5pbzEkMCIGCSqGSIb3DQEJARYVcGNmZGV2LWVuZ0Bw\n      aXZvdGFsLmlvMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAyFt7kzng\n      mcjaAghcnWzTjqmxBqDxxVeDORdUEncsDP1zW8rvP5HXIdkch8sqPFSL1aKcCwj2\n      ytIQLqKr3o0Gx8MIhxQfpGwNtg4nrNpKLim6agE8CuDMu9w9s3/fIhbQXKJE2Yz5\n      yNMo9UBtcNjX77EGUjjKD1GRgiQKeugfE+XQcc5IcniVZcSzJi8279951pXk1sDB\n      j9kczsP91z34UZnTCrtYXyk5iV7IYeTXB+UuNItIWm+gIYf6084Pz2ADtgMBswv6\n      LcCGZJBGluMCklrXg7Pn1CfaQOCPYj2fyt5YqQDGB5F8moWatw14ZxnsDBi2xqQK\n      ryJYa2vYdKiVIWewD4iRpS5HHVjETYNlu2W5ypfRfGXvc0110IhHS83+bcJoUFUn\n      u9bHo9qqshx/Bq6ew0iR12negzVHMI5R8+EupW2smmJu3n8d0L3NZA5eEfJgpvGd\n      DALuv0+dI0KLBAPMrgGq7B47l0ygvO+MOWudmzSzvsXvDxqs8q/8EqHvAgMBAAGj\n      ggGGMIIBgjBMBgNVHREERTBDghEqLmxvY2FsLnBjZmRldi5pb4IVKi51YWEubG9j\n      YWwucGNmZGV2LmlvghcqLmxvZ2luLmxvY2FsLnBjZmRldi5pbzAdBgNVHQ4EFgQU\n      5ir0R2vhcWqdd7Bm3HnflLQMIOQwggEDBgNVHSMEgfswgfiAFOYq9Edr4XFqnXew\n      Ztx535S0DCDkoYHUpIHRMIHOMQswCQYDVQQGEwJVUzERMA8GA1UECBMITmV3IFlv\n      cmsxETAPBgNVBAcTCE5ldyBZb3JrMRAwDgYDVQQKEwdQaXZvdGFsMRYwFAYDVQQL\n      Ew1DbG91ZCBGb3VuZHJ5MUkwRwYDVQQDFEAqLmxvY2FsLnBjZmRldi5pbywqLmxv\n      Z2luLmxvY2FsLnBjZmRldi5pbywgKi51YWEubG9jYWwucGNmZGV2LmlvMSQwIgYJ\n      KoZIhvcNAQkBFhVwY2ZkZXYtZW5nQHBpdm90YWwuaW+CCQC4kIBXSAkFojAMBgNV\n      HRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBgQBB9E/Mc/Zq/RJlLiu20EU62xjw\n      WWYAPCGIvo64GvkC8N+mMZL8qHaSsYGKrvEPl30kIRaXfO2RT5Mhx8CyYhFVrWCq\n      oRMVY2Li0h2vMYhRIlAjxzn6ZVUbd50t6hEmXioh6LxbrUUg/AXfbMuv2sW94xjx\n      vjUul7ZO8JfC7Uk2g5rngC7yz4mXI1sXlIq0xpRAxdBMreH9uG48xlO6cE/5Xzim\n      AmjvPWaCBIgiiJmW9lpt3oB+vttHtNHY+mnYtx9iE/R9mCL513uhsTtqOKLPN1Vb\n      D9iouxOW4gXN7NnhNSKyzBVFh+SInj3moxcTQAgKbXOq6oaJEz61VedGVyh0ncpi\n      pbtzQcoxSC88pMTZgm8ZFT5aL+f3Pod7MMAeuY3R24+JtlOlW5VYvwRfl050u5rF\n      LgeP1t+Kpxpd0OxjShWhGoYD4MqJyfqPXjYSd5uSRRTxgZFuSrO+VjXcJfkBqfss\n      RaK+wxioZDzc5z3vDJjaZGFdtki6f2hwsF1UPVw=\n      -----END CERTIFICATE-----\n    ssl_key: |\n      -----BEGIN RSA PRIVATE KEY-----\n      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\n      -----END RSA PRIVATE KEY-----\n    ssl_skip_validation: true\n    route_services_secret: route-services-secret\n    status:\n      port: 8087\n      user: \"\"\n      password: \"\"\n  blobstore:\n    internal_access_rules:\n    - \"allow 127.0.0.1;\"\n    port: 127.0.0.1:8086\n    tls:\n      port: 127.0.0.1:4043\n      cert: |\n        -----BEGIN CERTIFICATE-----\n        MIIC0TCCAjoCCQDRLH9gxoogFzANBgkqhkiG9w0BAQUFADCBrDELMAkGA1UEBhMC\n        VVMxETAPBgNVBAgTCE5ldyBZb3JrMREwDwYDVQQHEwhOZXcgWW9yazEeMBwGA1UE\n        ChMVUGl2b3RhbCBTb2Z0d2FyZSwgSW5jMRUwEwYDVQQLEwxDbG91ZEZvdW5kcnkx\n        GjAYBgNVBAMUESoubG9jYWwucGNmZGV2LmlvMSQwIgYJKoZIhvcNAQkBFhVwY2Zk\n        ZXYtZW5nQHBpdm90YWwuaW8wHhcNMTYwMzA5MTUxMzE4WhcNMTcwMzA5MTUxMzE4\n        WjCBrDELMAkGA1UEBhMCVVMxETAPBgNVBAgTCE5ldyBZb3JrMREwDwYDVQQHEwhO\n        ZXcgWW9yazEeMBwGA1UEChMVUGl2b3RhbCBTb2Z0d2FyZSwgSW5jMRUwEwYDVQQL\n        EwxDbG91ZEZvdW5kcnkxGjAYBgNVBAMUESoubG9jYWwucGNmZGV2LmlvMSQwIgYJ\n        KoZIhvcNAQkBFhVwY2ZkZXYtZW5nQHBpdm90YWwuaW8wgZ8wDQYJKoZIhvcNAQEB\n        BQADgY0AMIGJAoGBAKpQpDfxV0enkW9q37vz6GAqGzQI4kJaOq0Vu0aNJE0QguZV\n        y2JZaBGdYE25hviPesDhrFASUeMek//1FgpntnRU52AsweHJ67KayFEppk8qC5yd\n        XOm177O4QKbMmA6BC3BMnF1nLnKqTS71cbGfzvqaAmNlr22BJP7krQleXiFzAgMB\n        AAEwDQYJKoZIhvcNAQEFBQADgYEAKor/gSMkfVFPfmTLuCvH3YrvSFRPjTxXHeMR\n        8C6hmkOHxw2tgxc5WI0+ZLCgVCS87ZiLoTFWAmeeUb6S2nIHr+WhTHr11Y+0EjZa\n        WWv8728elfnHAiWfmKgn80LEOVLU8dDciykSRGOdDYnTAXLgtZOxfLeReR232JuH\n        TkCCeJc=\n        -----END CERTIFICATE-----\n      private_key: |\n        -----BEGIN RSA PRIVATE KEY-----\n        MIICXgIBAAKBgQCqUKQ38VdHp5Fvat+78+hgKhs0COJCWjqtFbtGjSRNEILmVcti\n        WWgRnWBNuYb4j3rA4axQElHjHpP/9RYKZ7Z0VOdgLMHhyeuymshRKaZPKgucnVzp\n        te+zuECmzJgOgQtwTJxdZy5yqk0u9XGxn876mgJjZa9tgST+5K0JXl4hcwIDAQAB\n        AoGAFMLx0dP8tMJriy53CZ1pBVf8qvIuSrJfFrxgcPBBrZdGrbdlrJ6Dfio2FCN6\n        nZA4AY1BCR3Cl7IhjoEc57XO2tpv7Ct5YZU3R/UGMZBTQJGTMdYLsXKVQPJFZZfr\n        nFvnL+dks1xmiLOPbSw45qvsC+KrQVFGV6ZqD6ZxjPKtlwECQQDiUcWMmL5k07XM\n        lvXHp/ZrfFdwBjlAcHDYNbQM0zid6C4m6YD1WI6zU/oCCS+gCT4cauoad2hcsUoN\n        zj1phOzzAkEAwKahynDyef2kSjsD8zDqY+HuRBKtDa8WB1mOgU737wIx8kfXgbNg\n        MlChsARn0yThm1L2yx4ZTk+PAtxAr4UZgQJBALRQgDuXisIcZ1E8yU+sg8l5hNSt\n        MLolm9K3Xt+E/ivZS8QW8HcJepBoDN3IYdh45LKRgDlb/5syaZT8R7Olg38CQQC3\n        EKDFgjan/YJUl2fVfDH+3/5N6YFQc4P3T/6+mY+4KtnTZLlAondS2JQMcuNGHNHV\n        iyzBLsTVSXyYNzuwjkYBAkEAq/pT9lmw42qc6AQk/LcfZFYXKV21m5LCDa95/7X2\n        TVeavLJv6412vDf+E6r/5jG634SsMkRDGeUsW9gUvPnaXg==\n        -----END RSA PRIVATE KEY-----\n    admin_users:\n      - username: admin\n        password: admin\n    secure_link:\n      secret: secure-link-secret\n\n  # For Garden:\n  garden:\n    network_plugin: /var/vcap/packages/runc-cni/bin/garden-external-networker\n    network_plugin_extra_args:\n      - \"--configFile=/var/vcap/jobs/garden-cni/config/adapter.json\"\n    debug_listen_address: 127.0.0.1:17013\n    allow_host_access: true\n    graph_cleanup_threshold_in_mb: 15000\n    insecure_docker_registry_list:\n    - host.pcfdev.io:5000\n    deny_networks:\n    - 0.0.0.0/0\n\n  # For CF Networking\n  cf_networking:\n    vxlan_policy_agent:\n      ca_cert: |\n        -----BEGIN CERTIFICATE-----\n        MIIE9jCCAt6gAwIBAgIBATANBgkqhkiG9w0BAQsFADAbMRkwFwYDVQQDExBjZi1u\n        ZXR3b3JraW5nLWNhMB4XDTE3MDUyNTE4MjQzNVoXDTI3MDUyNTE4MjQ0MVowGzEZ\n        MBcGA1UEAxMQY2YtbmV0d29ya2luZy1jYTCCAiIwDQYJKoZIhvcNAQEBBQADggIP\n        ADCCAgoCggIBAMQr/nlMLZYXNEpe1DCnkRoTmERogDJM8/PGAMQrwy9S+m/EV2Ju\n        0BryTq0JtOpdJPy52p49efc36K6N69z5ednssJNmiSMCF1Ia2EqCnuE0at5NK75b\n        yB5fOY7LW9ZCHjttbqs+xQIFzPLJNJlLeIsKoBqbTnkopMOwy/Z7VcHt7+vAG3H+\n        KU7zyheleD5g6INFJK8TolhrHDdkRB7KxSssqEzhLXUtrBD2pzXSayboTnIA1Y37\n        Dnlv0nqVTR7YDbYZMkbr4CCd08fgChp+vE2WwPyFyL1EF71exQNNoKbs91ad+pvx\n        jMGLj/ii8p13X30VBSWdsKbRKJvk7Q/vWx7tJkKfa4mMyPwXjWlWTjccCbflDqgz\n        /CsMkOYK4vZySFfETyzcz2J++kejxnugEmD6AmUV+6GdyHWPdi3CKsnVwJFVm2cI\n        ZiCshFjwKjp6yws4n3JcqmzFdOGY8Ij2YG4qjKCLrvaZIqyDwQ9fRXKTVNF3bmlm\n        8BAAsUhCbbtnnAFOPnadliClhJiXHM0NIB38GCZa0tuno2vAncGrfDaX4pNQL0t9\n        gS47wgxKEfK3WNe37JcOtwk8oET4PeTugiVWmcvxCEDwOXCvNBQOjv8HWb2LBYJz\n        njW4q7yNmXtfsS9InwBq3mRxRgU6UjjppT8hQDubpUCFARj/pQa/+PdfAgMBAAGj\n        RTBDMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQW\n        BBTKGOy47aC2jl6GVjNI/yaqpAlJEDANBgkqhkiG9w0BAQsFAAOCAgEAHXT0ch9V\n        W9BJisT+rxBLsqiNrry6bxTFVbktG/kU0B4oRgYosAl5Y5rWHByFavZNuQ9LP4gA\n        OVuRxs4vrvX+ym6/m5OCs7zVvunpXh1CzfpifXLTzQn5YNXxBSCBSxTF4vInES1k\n        wg6uwnVFLO+7kTorPfizp3lO3ydI8DpdUr3KWiAP9QthSJav8TAVopgBqdVzQFNs\n        rLD6Rr//4oK0i1c2escErwXbAWR1d2PIDl/z9h1PtSfXWOSb36g5JshFwzvWInXQ\n        65EQJvnxBoETHkGmwINE4Y1iy++duXQCF28gPD0GtesNqrTbJ91e3CHjI1thpre1\n        R0E+nlF5AXY865ARKGDJwdsQ2oGqLRCUZqaUHatZXON6+o5lOgzJ5W6vqciolX+y\n        3NrGZMWTBFnWziaXTAh7QspB8ZJwKEudIEPYBBqA0BEA/0SAxsINIFpeTipofmIV\n        z6Gn/tv+77dzW3GoAiaDuRCCpR2HvQJEo3YQCcAKWOvYD3a3LonOD9VwPT6jlKRj\n        nCYJNHYd7d92e7ykfsDq29PTtxzCAtZ2Nr/IqhZZmrI8aZftZ0GLq2BRcBnBeR4P\n        pBiWkZMn4//XACyFzIBtLgkqua+JXgReL3qzYqToXk5AUv48Z7rfz0YAJ6azFeSb\n        9MkVxlFa6Wls0/oHBMciwq787gURtJwPRHE=\n        -----END CERTIFICATE-----\n      client_cert: |\n        -----BEGIN CERTIFICATE-----\n        MIIELTCCAhWgAwIBAgIQDaq/r8ootJP528H2AH8F5DANBgkqhkiG9w0BAQsFADAb\n        MRkwFwYDVQQDExBjZi1uZXR3b3JraW5nLWNhMB4XDTE3MDUyNTE4MjQ0MloXDTE5\n        MDUyNTE4MjQ0MlowFzEVMBMGA1UEAxMMcG9saWN5LWFnZW50MIIBIjANBgkqhkiG\n        9w0BAQEFAAOCAQ8AMIIBCgKCAQEA7BzjXP0OSXau0Svr79jJ2Ru+JtiidfOnIxYW\n        z6C5LgbbbkzdC9A4XlJvGzK8/Ez+HFKFceGZObpkiF3OVEVa9bcr9mV/wqtX+jb9\n        uvlcuiyNGTV5RXjlPXPS6/RSsaC/1Q24XNeQJwDNOC7EnDSzuJTp2Uyc+ySv6+9Q\n        21qZqNNYNA4185QRE5JM5RNxfak0miPfLumCCYLMMc3WIZo1A6He7kpPHxJ7t0uD\n        lRmfdF39dazalGJEKTKitpXRVZFdylNcIgcSD9rj70f6//uxNtjJDwlUpVexgS+C\n        8rOAtUP2B1lGvDLw4e2M+p42wSTTjuo+yp+TwS0CAKX4N8I50wIDAQABo3EwbzAO\n        BgNVHQ8BAf8EBAMCA7gwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMB0G\n        A1UdDgQWBBSHckyXbkJHuPWB6/xfPiUSYCSgKjAfBgNVHSMEGDAWgBTKGOy47aC2\n        jl6GVjNI/yaqpAlJEDANBgkqhkiG9w0BAQsFAAOCAgEAcHq3+6mfiS5mCSWuKdAm\n        hI157+AY0kSUxtqcNYz7clawX3VwuAL7d9VqDoe/okilP/xXsBoqWgc4TXZURQtC\n        +yeUiMKQYitfvtzSI77+ZrCx1GE4rNUDzq7o411e1tumxxdVOtw3Rybf476rJsyP\n        yIm0DeTx5cV1/MltYP2K/2rh9ATJIzRwc0clBhdINtSqr4cG1ChBbDZveyBoOSIC\n        5vrs2G9mnW7CYI1cydVeJsweJzajnFLqjOKTJuOG5Tc277wTwEmiDUfKrAJHM0TX\n        /yC/VFSGooFGmT5bv7zNPzdH7SmMMwFFRkud6FkNynOhfIWaqzzclpc3BYUoo0r1\n        8L0FhgZx9kmmdHnMdzmmMMxKsvOLApObpcQibVT0EmSIjoWcoPH+ikoxwoLzTfgI\n        84nC3yqWUL01mew6iZIipLwws+rx5AZe0G7HE5uu0BSaKGcmSEaIFJvpqsDTsY26\n        IUlwkf5XsiLVMitbiSoI3ZZUHYGUjBLRNpvOTO3+TA12kmiouXqkHTj5M/Fb2f0v\n        tqgEdklDywcgqoCSc3/+Lff9HR/OYTDeIJDrNrWleMGpmaj4hWu02aMKHQYoG/m8\n        /VlB1Uv0Csov4oWCejipytcoy7unj0NvFmGld9vJBF95o4OmfTQ7ir3M+1lcIxMn\n        phiarcHdb/G3/1wiX453KBI=\n        -----END CERTIFICATE-----\n      client_key: |\n        -----BEGIN RSA PRIVATE KEY-----\n        MIIEpQIBAAKCAQEA7BzjXP0OSXau0Svr79jJ2Ru+JtiidfOnIxYWz6C5Lgbbbkzd\n        C9A4XlJvGzK8/Ez+HFKFceGZObpkiF3OVEVa9bcr9mV/wqtX+jb9uvlcuiyNGTV5\n        RXjlPXPS6/RSsaC/1Q24XNeQJwDNOC7EnDSzuJTp2Uyc+ySv6+9Q21qZqNNYNA41\n        85QRE5JM5RNxfak0miPfLumCCYLMMc3WIZo1A6He7kpPHxJ7t0uDlRmfdF39daza\n        lGJEKTKitpXRVZFdylNcIgcSD9rj70f6//uxNtjJDwlUpVexgS+C8rOAtUP2B1lG\n        vDLw4e2M+p42wSTTjuo+yp+TwS0CAKX4N8I50wIDAQABAoIBAQCKsAFA2ods0WCo\n        DrN8Y4tUkn4j1TXAMMkoy83EUXTUO0TiyhVA3iJuDN+kSy5EyHiubC5kEQ5uoTRy\n        AR+z0jU2hUw2Y7Iix4BawbhR/izgUlDi0M0V6IhGi2UGIbH9Eh376B41sozCzC6+\n        5IGp+y7hqd6eO+ktf4QyApUs80+0oKaobBSPJ/vafE1c4QSFgl+zZ5HvoZdHnW48\n        L/0YNNUK3O+d2dcbESNn/OoiUKfNLxnf7AnJBgF4xAwoJmxwLbC8vloxFuM+gU14\n        y23TcCHAE3kjmgO53yAanyj2UE4ZgV+TxKaxAZMDgSykZI0DsgHeHe5J4yzqflZP\n        /6etCsQBAoGBAPWJIyRwBeMafavq3vw80VimBJA00j4R2/xDTo8wcq1X7X3moCDr\n        xcDucarzI0kwmU3dSjv0Krjk73Qhm8bJ3UbbFQ7z4N3TZ1z9mlMnUlSVregz0TWk\n        bl6S1eZTolHHoh7/swfltR7dBycAiVHfz99Cz4RfKTrOsgFCRUmxVc/TAoGBAPYs\n        8elfIpy/xk9ssUXyYnmQrgovjhr8xjISRhp1Gg/Gqirx9krevZm+1xsDecp92GPe\n        fgwMTeYTrCmqhrWSaaXMV6p0B3br///v+f74v8dIyN9pqL2E0cTgpGcjHl/lIUwj\n        o309NXxiQSO5QrzpKLToF9pE0/9AVTYF39RQSa4BAoGAAzQJ0FThzseusgp7ZEEK\n        3iQ0VQlLYOHsw8rBAJ86L8bA426Z0jQhPVYfB4Lqh+7pYRms+UFDOWxLL3GszZge\n        mekLykkmOt6iL5VjaQhPS6k0Pp5GcXO2uOcjgUDAEl8PX2YomMbHaSKrEDgykm3g\n        EWKWwHxZVloR+nA55S86Fl8CgYEAyWDM59ZOLyHl7NUCUzDLg5xp8qUiP0tmKlGu\n        jTgcAKnITGcwzeBWA24M8ukt+QpnOJMqU1rBYqPXIyJ/HgtOZzW4xRQzgwHdohVC\n        UWRVJYWR5Mi/I4GCQ+ZsNn6Q+2spiOpidDHdDgomNT34rSaiiRKPaJsDPPv4eL/n\n        cPvYugECgYEAtdYzx5qDUjBkQyRc1vhXX5guGEisrNyR0+zFcrXvJhkemDDhD9fh\n        rx9VITqD/1mBlUmqHiLeCzcLWybLFKuwgWwsWbgnPZ5wrlsq5BWdIxpSFhA3bLYT\n        sN1syGAcMN4lHtB9A4u/6Z0t/mko4uT2V5CVHhw+5mFrKW0bVPHAmAA=\n        -----END RSA PRIVATE KEY-----\n    silk_daemon:\n      ca_cert: |\n        -----BEGIN CERTIFICATE-----\n        MIIE9jCCAt6gAwIBAgIBATANBgkqhkiG9w0BAQsFADAbMRkwFwYDVQQDExBjZi1u\n        ZXR3b3JraW5nLWNhMB4XDTE3MDUyNTE4MjQzNVoXDTI3MDUyNTE4MjQ0MVowGzEZ\n        MBcGA1UEAxMQY2YtbmV0d29ya2luZy1jYTCCAiIwDQYJKoZIhvcNAQEBBQADggIP\n        ADCCAgoCggIBAMQr/nlMLZYXNEpe1DCnkRoTmERogDJM8/PGAMQrwy9S+m/EV2Ju\n        0BryTq0JtOpdJPy52p49efc36K6N69z5ednssJNmiSMCF1Ia2EqCnuE0at5NK75b\n        yB5fOY7LW9ZCHjttbqs+xQIFzPLJNJlLeIsKoBqbTnkopMOwy/Z7VcHt7+vAG3H+\n        KU7zyheleD5g6INFJK8TolhrHDdkRB7KxSssqEzhLXUtrBD2pzXSayboTnIA1Y37\n        Dnlv0nqVTR7YDbYZMkbr4CCd08fgChp+vE2WwPyFyL1EF71exQNNoKbs91ad+pvx\n        jMGLj/ii8p13X30VBSWdsKbRKJvk7Q/vWx7tJkKfa4mMyPwXjWlWTjccCbflDqgz\n        /CsMkOYK4vZySFfETyzcz2J++kejxnugEmD6AmUV+6GdyHWPdi3CKsnVwJFVm2cI\n        ZiCshFjwKjp6yws4n3JcqmzFdOGY8Ij2YG4qjKCLrvaZIqyDwQ9fRXKTVNF3bmlm\n        8BAAsUhCbbtnnAFOPnadliClhJiXHM0NIB38GCZa0tuno2vAncGrfDaX4pNQL0t9\n        gS47wgxKEfK3WNe37JcOtwk8oET4PeTugiVWmcvxCEDwOXCvNBQOjv8HWb2LBYJz\n        njW4q7yNmXtfsS9InwBq3mRxRgU6UjjppT8hQDubpUCFARj/pQa/+PdfAgMBAAGj\n        RTBDMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQW\n        BBTKGOy47aC2jl6GVjNI/yaqpAlJEDANBgkqhkiG9w0BAQsFAAOCAgEAHXT0ch9V\n        W9BJisT+rxBLsqiNrry6bxTFVbktG/kU0B4oRgYosAl5Y5rWHByFavZNuQ9LP4gA\n        OVuRxs4vrvX+ym6/m5OCs7zVvunpXh1CzfpifXLTzQn5YNXxBSCBSxTF4vInES1k\n        wg6uwnVFLO+7kTorPfizp3lO3ydI8DpdUr3KWiAP9QthSJav8TAVopgBqdVzQFNs\n        rLD6Rr//4oK0i1c2escErwXbAWR1d2PIDl/z9h1PtSfXWOSb36g5JshFwzvWInXQ\n        65EQJvnxBoETHkGmwINE4Y1iy++duXQCF28gPD0GtesNqrTbJ91e3CHjI1thpre1\n        R0E+nlF5AXY865ARKGDJwdsQ2oGqLRCUZqaUHatZXON6+o5lOgzJ5W6vqciolX+y\n        3NrGZMWTBFnWziaXTAh7QspB8ZJwKEudIEPYBBqA0BEA/0SAxsINIFpeTipofmIV\n        z6Gn/tv+77dzW3GoAiaDuRCCpR2HvQJEo3YQCcAKWOvYD3a3LonOD9VwPT6jlKRj\n        nCYJNHYd7d92e7ykfsDq29PTtxzCAtZ2Nr/IqhZZmrI8aZftZ0GLq2BRcBnBeR4P\n        pBiWkZMn4//XACyFzIBtLgkqua+JXgReL3qzYqToXk5AUv48Z7rfz0YAJ6azFeSb\n        9MkVxlFa6Wls0/oHBMciwq787gURtJwPRHE=\n        -----END CERTIFICATE-----\n      client_cert: |\n        -----BEGIN CERTIFICATE-----\n        MIIELDCCAhSgAwIBAgIQbv/BkuY4VmEhTvVFHETJkzANBgkqhkiG9w0BAQsFADAb\n        MRkwFwYDVQQDExBjZi1uZXR3b3JraW5nLWNhMB4XDTE3MDUyNTE4MjQ0MloXDTE5\n        MDUyNTE4MjQ0MlowFjEUMBIGA1UEAxMLc2lsay1kYWVtb24wggEiMA0GCSqGSIb3\n        DQEBAQUAA4IBDwAwggEKAoIBAQDcbWXU4DwK5Aidqp9ncEZYeTbYBibxuqJgQcLe\n        QwlVMpMUT7gZv8dBPTp+PftINcXa+2OW/F2r9VSWJuOsP7KgrwLdwj8O9QNSV72Y\n        1MXuit76+8tDb4IOK97pv4S+tq3RMDbUINRwvXR8P/am/3GZ4iYmv+GZEETQNLRb\n        Hu+Gj4VHnYKy49MXxyTddpIni6oAxojv4fMJ5aYThn7gr9vT2ufOaMitRA2BNu0N\n        YFPpp1MZe167/9xR39QZuLXZJAuNIAZl7J99fo+XOLEF9bsHwmVUVkZmeQKEgYxR\n        eRpeV8ettjoetISyPSqr8SBU/I+VF4K/MXXFFLc/IhWmYrpPAgMBAAGjcTBvMA4G\n        A1UdDwEB/wQEAwIDuDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwHQYD\n        VR0OBBYEFPK4Vsgkodl/kEhpfN5LA69UCs2wMB8GA1UdIwQYMBaAFMoY7LjtoLaO\n        XoZWM0j/JqqkCUkQMA0GCSqGSIb3DQEBCwUAA4ICAQCqZVyhhqn9fI4wNzXJ0UfU\n        GGJLKy4TrIdR5LSWwRtK7odoHKgjsIeAovalELj/0NBOoHIjtyfoztYk9lsYOTss\n        XltT9T747yC+lO/1jhb7xdS4P1HYDfzCfJYvtpqoW06Vf5J15f4ToOFf72p1McXd\n        RZZPRtcK/+ytGDRyqCCCWCVLkg+H6BRnSMRc01q0Q4BxbN4EbYNMBBkbfBZbtzE2\n        7RbxSPe6rFdlAlWKeL3bTuGc+Vp7LRK8nB6+w4HJgL68whk8OfKK3FgIA4gvBV7u\n        HAKNYGCxf+8SyuTXnLISJD+aHIqpzH+NVouB68kEfzZLCuaYOhKtrSexW/uDV5Ak\n        JNYaRqdUF5x0bkkiX5NpbFNmpeNHwg/kio8Lf4tcc0r2rx4vb0hMTU7PDd1wMFQP\n        OxmgXrkVqcMmf17Syk5N7B7nDB8SVCl1aBz+Yme3lhGSXKkkSl7V3MeM7wURnfTZ\n        Pk19emtJkRjVRBvXR56rYuN9BM3bb34PPDpXW/b37jTDZ3AtWyB64nL6Qq3Ie2Dq\n        Zs9tt6S3rWktCudiJ4HHhMqcs8OzKq6Lhhsw9yoqEwb0fPq8kE74cBzHZg7r3Vo7\n        BCvhrhrBxWpoE58IzsuXfl0tAa4aakpUkeqKn20+TAF2H2/+Cl5+xCHPvntg8KeS\n        /CZZ52J4s4vro3aq4oRYAg==\n        -----END CERTIFICATE-----\n      client_key: |\n        -----BEGIN RSA PRIVATE KEY-----\n        MIIEpAIBAAKCAQEA3G1l1OA8CuQInaqfZ3BGWHk22AYm8bqiYEHC3kMJVTKTFE+4\n        Gb/HQT06fj37SDXF2vtjlvxdq/VUlibjrD+yoK8C3cI/DvUDUle9mNTF7ore+vvL\n        Q2+CDive6b+Evrat0TA21CDUcL10fD/2pv9xmeImJr/hmRBE0DS0Wx7vho+FR52C\n        suPTF8ck3XaSJ4uqAMaI7+HzCeWmE4Z+4K/b09rnzmjIrUQNgTbtDWBT6adTGXte\n        u//cUd/UGbi12SQLjSAGZeyffX6PlzixBfW7B8JlVFZGZnkChIGMUXkaXlfHrbY6\n        HrSEsj0qq/EgVPyPlReCvzF1xRS3PyIVpmK6TwIDAQABAoIBAFXqLe6zF7QG/XS2\n        tDrVABYr6Lx6aWN+oxtxhkqrRk/2zmz0RYWDwl4jR1E9R1v12ZBou4B2DOyhSr7b\n        mZHhofYPQMa+l2V1Cj5mBHg1NpCrgA3DZo56P+7WGqRxCYRsH4ORj01PHn5y2Zw0\n        MicVGWopQ0WHNJ88QBYG9OUvQZzoSo8ZB7y+GEYdLbsQKtHsJ/JHaJeKwcbP28VV\n        ATCsMQIfCxp0tZEuhGJ2P2FS1posTpfKV6eRngaZGcSEU+KJcTFlHOBWrVXviqrT\n        IttDt/jjLrvL2ID+aijd2LGZs0zgCfo4PCgTwDH8nWgFNj1NS3VLJ+b1CBGq/D2c\n        QosNecECgYEA8TuBms+2PdwNqukpkQCjYLde2GkSTzD4D0VPHvNakh8a0zzlQgHK\n        zNWu54liWQexGFEKMcpKL4kFQffhUKFknpp9UkDIEwqrBptA91uT95jSOnEvwJX7\n        Y4l4dDULfnVIgY913hUTYGEq/q4bbD8H+O2nkAZIyktDl0OXuYK5+QsCgYEA6evX\n        sDAWhbee+t+3f6XV08PrY5GZ6MhQvXps3dNh8FPRWIrH6llVRzwPqOrVu5L1vasW\n        qcISn1AeULujCW2nA883C6RYcgZM1Zuy9UB8B0u1pK8XPw0dN/ZiomtL92efhVqZ\n        7oPRUxTkKEHMGZAG8OfU/0nljYDXetC4x6lPtk0CgYEAs7qeKXWwVg5psHjfm0Va\n        dGiqpZpDJfVaHCaLeIffZxb9qXypYrBrJIngMmnNeH+elntqmQYal6gC3s+Mc8KL\n        cQ+xZ2MUrfs4yUdK9ACrEcIuf5Rs+5PDJLn7oLkUwzcmukDklH4nXZuHqRCXJeMg\n        UXrfaRMFkJLa3QxjMrgPT1kCgYEAzNlsGS8DijYzUx93YqGnj7uS968aSXCixEvh\n        6qCitAOy4Qcn62Iv/CHs1NBSO+GGsoKRZjg+dqWC5tBrBmawS/W7DsbtbW12+9lN\n        7th5xSnX+FAc22pwnAF4fyPXcuGcIPwmsWledpNk+pwkUH6AlZdwP+BG1pRuH2+J\n        YdAzrkECgYBX7ydZUdMACGbeYqdaSuds6aTfFc92GWYADr4N6SdCPG2+O7aCsT8B\n        Op9J5iuqCF2a39bbWssWk2dAwpSH700LVWUAqy0OXZEmYjFoSg4SK2E1TIeWLyIq\n        hs70lbm2uRDIA8SRHr3AGT0exXAtattlB/HbfsEqLDkO0LbG56IlWg==\n        -----END RSA PRIVATE KEY-----\n    silk_controller:\n      ca_cert: |\n        -----BEGIN CERTIFICATE-----\n        MIIE9jCCAt6gAwIBAgIBATANBgkqhkiG9w0BAQsFADAbMRkwFwYDVQQDExBjZi1u\n        ZXR3b3JraW5nLWNhMB4XDTE3MDUyNTE4MjQzNVoXDTI3MDUyNTE4MjQ0MVowGzEZ\n        MBcGA1UEAxMQY2YtbmV0d29ya2luZy1jYTCCAiIwDQYJKoZIhvcNAQEBBQADggIP\n        ADCCAgoCggIBAMQr/nlMLZYXNEpe1DCnkRoTmERogDJM8/PGAMQrwy9S+m/EV2Ju\n        0BryTq0JtOpdJPy52p49efc36K6N69z5ednssJNmiSMCF1Ia2EqCnuE0at5NK75b\n        yB5fOY7LW9ZCHjttbqs+xQIFzPLJNJlLeIsKoBqbTnkopMOwy/Z7VcHt7+vAG3H+\n        KU7zyheleD5g6INFJK8TolhrHDdkRB7KxSssqEzhLXUtrBD2pzXSayboTnIA1Y37\n        Dnlv0nqVTR7YDbYZMkbr4CCd08fgChp+vE2WwPyFyL1EF71exQNNoKbs91ad+pvx\n        jMGLj/ii8p13X30VBSWdsKbRKJvk7Q/vWx7tJkKfa4mMyPwXjWlWTjccCbflDqgz\n        /CsMkOYK4vZySFfETyzcz2J++kejxnugEmD6AmUV+6GdyHWPdi3CKsnVwJFVm2cI\n        ZiCshFjwKjp6yws4n3JcqmzFdOGY8Ij2YG4qjKCLrvaZIqyDwQ9fRXKTVNF3bmlm\n        8BAAsUhCbbtnnAFOPnadliClhJiXHM0NIB38GCZa0tuno2vAncGrfDaX4pNQL0t9\n        gS47wgxKEfK3WNe37JcOtwk8oET4PeTugiVWmcvxCEDwOXCvNBQOjv8HWb2LBYJz\n        njW4q7yNmXtfsS9InwBq3mRxRgU6UjjppT8hQDubpUCFARj/pQa/+PdfAgMBAAGj\n        RTBDMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQW\n        BBTKGOy47aC2jl6GVjNI/yaqpAlJEDANBgkqhkiG9w0BAQsFAAOCAgEAHXT0ch9V\n        W9BJisT+rxBLsqiNrry6bxTFVbktG/kU0B4oRgYosAl5Y5rWHByFavZNuQ9LP4gA\n        OVuRxs4vrvX+ym6/m5OCs7zVvunpXh1CzfpifXLTzQn5YNXxBSCBSxTF4vInES1k\n        wg6uwnVFLO+7kTorPfizp3lO3ydI8DpdUr3KWiAP9QthSJav8TAVopgBqdVzQFNs\n        rLD6Rr//4oK0i1c2escErwXbAWR1d2PIDl/z9h1PtSfXWOSb36g5JshFwzvWInXQ\n        65EQJvnxBoETHkGmwINE4Y1iy++duXQCF28gPD0GtesNqrTbJ91e3CHjI1thpre1\n        R0E+nlF5AXY865ARKGDJwdsQ2oGqLRCUZqaUHatZXON6+o5lOgzJ5W6vqciolX+y\n        3NrGZMWTBFnWziaXTAh7QspB8ZJwKEudIEPYBBqA0BEA/0SAxsINIFpeTipofmIV\n        z6Gn/tv+77dzW3GoAiaDuRCCpR2HvQJEo3YQCcAKWOvYD3a3LonOD9VwPT6jlKRj\n        nCYJNHYd7d92e7ykfsDq29PTtxzCAtZ2Nr/IqhZZmrI8aZftZ0GLq2BRcBnBeR4P\n        pBiWkZMn4//XACyFzIBtLgkqua+JXgReL3qzYqToXk5AUv48Z7rfz0YAJ6azFeSb\n        9MkVxlFa6Wls0/oHBMciwq787gURtJwPRHE=\n        -----END CERTIFICATE-----\n      server_cert: |\n        -----BEGIN CERTIFICATE-----\n        MIIEnTCCAoWgAwIBAgIQam2HuJ0ZkaKWP0+f6ZAEqDANBgkqhkiG9w0BAQsFADAb\n        MRkwFwYDVQQDExBjZi1uZXR3b3JraW5nLWNhMB4XDTE3MDUyNTE4MjQ0MloXDTE5\n        MDUyNTE4MjQ0MlowLjEsMCoGA1UEAxMjc2lsay1jb250cm9sbGVyLnNlcnZpY2Uu\n        Y2YuaW50ZXJuYWwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDi0p0d\n        AU7TEB9wm2LqOAFoKcz+ti+D/01B7FpZl89jfrfiNfRvRxJZUFJqZCnQ+UAn6djg\n        PELsOkeI7uYH4bPFleSK5j5/vRo4hsuQKzcwqY475ajqghdklZstigc7BPe5FQ7+\n        uKn5EnB4E9co8vE2lmYzoorchnZEFCBOKZDGzmziN6CbOmGa71rp58MtSzZUfpeH\n        YIFfVeKx30Z+ui5yRc38sM3zSglM3OfNlle5k+usAqDENp5eMtcfFzQdn+ENxMO4\n        5csAI/xKRn0cGdgVlKINzr3HNxaSgb5JfWPQqGUr2wnqZFDdpvkGaCu68e78iiah\n        tH6QWLGktT33PB+dAgMBAAGjgckwgcYwDgYDVR0PAQH/BAQDAgO4MB0GA1UdJQQW\n        MBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQUJUzyZQ7q3rU38J1EKfBO\n        4MsVtqMwHwYDVR0jBBgwFoAUyhjsuO2gto5ehlYzSP8mqqQJSRAwVQYDVR0RBE4w\n        TIIlKi5zaWxrLWNvbnRyb2xsZXIuc2VydmljZS5jZi5pbnRlcm5hbIIjc2lsay1j\n        b250cm9sbGVyLnNlcnZpY2UuY2YuaW50ZXJuYWwwDQYJKoZIhvcNAQELBQADggIB\n        ALOhokAvoaoYsf0f1bpn8EKBwPVWnda1RjQlWlOJkSmOq4zWYuAtGZZ8w4MA8e62\n        9KLUd3Mbdc/fYqTD/7NcINEKLTt6k0F9OeuvvbW2FhsRs8haimbujMxjpV2J1HEQ\n        wt/KJuyEVeu24h8F8VFtAcZfnki6lOfr5Hw4nxdI4IIeDiffY1lzuoauN4kRKNLA\n        avlCiLu8xcoaN1QeA0w4t6UwJxFK3NxDh23q+KIqKg+zb6pDZS6zgJbPFAa3UHoi\n        fhXN4rA7kRv/k9SqoNJsCdNNKT3aZTvu7XcgLKAr4AYeM+xjAQSXeHd4xvT9/cyJ\n        fpIhKA+cXOJ+EtvIpn66b3W1ZylfySBVF+L4iTFSayuw+sCjbJMK18r3GGJjHTjb\n        BOrTNp/Psd1LLDMRKgEMzRbvpNxIIhw2AJ1ydbtvthqxCn9KXKf2j9rQ3sAWeE7t\n        Q49UcailqVKSbgBVLmSkSYTFb/r2eOqna3cbC7vaaSxTkkPkT4RB9feeve5rNiPT\n        m4RGrpnzB6DPS+oyDRVMf0wDDcvvcx0xfDF+KHRu6jEhlAb9HDiv302d3c+IxAKl\n        VRnNjdSjBe8Cett2xXS9PB6Q3dHWUTkMpKVn6zoDjqDo6mdR9xmnpi0Z9rDHIISX\n        Ur4TIwqXiV3bFMMgAZbqFnjv+vFWU5y8deFZpFf5Nfb1\n        -----END CERTIFICATE-----\n      server_key: |\n        -----BEGIN RSA PRIVATE KEY-----\n        MIIEpAIBAAKCAQEA4tKdHQFO0xAfcJti6jgBaCnM/rYvg/9NQexaWZfPY3634jX0\n        b0cSWVBSamQp0PlAJ+nY4DxC7DpHiO7mB+GzxZXkiuY+f70aOIbLkCs3MKmOO+Wo\n        6oIXZJWbLYoHOwT3uRUO/rip+RJweBPXKPLxNpZmM6KK3IZ2RBQgTimQxs5s4jeg\n        mzphmu9a6efDLUs2VH6Xh2CBX1Xisd9GfrouckXN/LDN80oJTNznzZZXuZPrrAKg\n        xDaeXjLXHxc0HZ/hDcTDuOXLACP8SkZ9HBnYFZSiDc69xzcWkoG+SX1j0KhlK9sJ\n        6mRQ3ab5BmgruvHu/IomobR+kFixpLU99zwfnQIDAQABAoIBAQCBpSY+VOgMBZQi\n        1f30p+xN8E6Ga/W+uacb/g8qVHYqhVxvRK2hCPt450skGno4Qq8j4SqgCHGr+ie3\n        Ie2DJcOONP27Upz4gErDcnBZyAm0m8V7gOpKl+7tBAH9Rn6Zgl5hgKLgfwZQIfT8\n        /UIm2q16qP5jlw1NvOFOSj6ozmM87d5N+v7qBMGB5tIRQeeAgqFohmbXTI6Y0FqU\n        ZTSrSlJm+LB4J9AtynJsW6IqM+5wajC9S7iazQA6JSb4Duml++oKwHfM7rtwFujK\n        i07XrIXuyY08O68EFOYQy7NI/Tq+tFyOgWrLPZ8RbpwSNLFFcpSJuqo3ka1YadKu\n        WHSP795hAoGBAOWQUkFrM75n58j13GBIlPy6mnPxM9HvFDAynmmaxFZ8qZtLCrSg\n        N8kBHYKVQibCb9R6DYpYYxte/w4g1sIIDBxHNgAnMjCSLi6Zt2WPwj92hj6vZ1Qn\n        A3O7rSklr17HN7HbFPMwTu4mbVdCTQqMFSxV9bheAjpuAOAgHGYkWz4VAoGBAPzx\n        fBe3URlC7GzWKLMW1R2pgGtqW7D0AWfj+DOsfpjIWpZX9KXySe1rbGlllXkxaw/k\n        mT6ItcFz/QB8JOtz1G7fbjIMDm0pUpIlxwUaXeLiwjp2CXZFQqnRpRdy0UuIDjt+\n        VJCaOE5SgXuLQR/JthYIK3/t2LxxE/fstta2xEVpAoGAGgIk35aGsT7Satk4E4yF\n        nLCDiTk9lr5Qejlx6yMGtYnAKYDyAI7aYyKGNmI0sXF7/AWr/Q2QhOxZVz9vNWJ2\n        BMoomxHVxNz68Hqn5ZDJACmsgfObcFRPNtB/iNblLIbDj5nzoK3Lc33VC3rOgbBn\n        QbOneDDmbbpCzSG2NfhOghUCgYBnRRyZ/jExNB6c7O7e93J5Usvojxryaxzr0qpy\n        RnnFXP+HJE/xNLO0KEix21Skj2WbroRWgLBcVEO2X/ke3EKeJcCy1DNLpDRfEOdp\n        kPNF/7i275w7Wlm2Ra62nR0QTnMpHRHfm+djKtJMo3UqSkt6QUmpSG1VuoEhltar\n        YSFPCQKBgQCIkW9YddqPwqeNVavbAgklVHJ7R6lxHdUZjWFXr+L1nIwwhSXzxkPl\n        SmpW0ahS59+X7svfwt5kVNioJfaGPEiyPPBjX6PpPn+2cCfEzsKokYeUKze8khYs\n        Z6IQViludHOs/Aji4YL9Z8+OK4sDAkqI6x/F539yg+Y36Sfc2H97wQ==\n        -----END RSA PRIVATE KEY-----\n      database:\n        type: mysql\n        username: network_connectivity\n        password: admin\n        port: 3306\n        name: network_connectivity\n        host: sql-db.service.cf.internal\n    policy_server:\n      uaa_client_secret: network-policy-secret\n      uaa_ca: |\n        -----BEGIN CERTIFICATE-----\n        MIIExzCCA6+gAwIBAgIJAOPFFRMyK2dVMA0GCSqGSIb3DQEBBQUAMIGdMR4wHAYD\n        VQQDFBUqLnNlcnZpY2UuY2YuaW50ZXJuYWwxCzAJBgNVBAYTAlVTMREwDwYDVQQI\n        EwhOZXctWW9yazERMA8GA1UEBxMITmV3IFlvcmsxEDAOBgNVBAoTB1Bpdm90YWwx\n        EDAOBgNVBAsTB1BDRiBEZXYxJDAiBgkqhkiG9w0BCQEWFXBjZmRldi1lbmdAcGl2\n        b3RhbC5pbzAeFw0xNzAyMTUyMjM1MzlaFw0xODAyMTUyMjM1MzlaMIGdMR4wHAYD\n        VQQDFBUqLnNlcnZpY2UuY2YuaW50ZXJuYWwxCzAJBgNVBAYTAlVTMREwDwYDVQQI\n        EwhOZXctWW9yazERMA8GA1UEBxMITmV3IFlvcmsxEDAOBgNVBAoTB1Bpdm90YWwx\n        EDAOBgNVBAsTB1BDRiBEZXYxJDAiBgkqhkiG9w0BCQEWFXBjZmRldi1lbmdAcGl2\n        b3RhbC5pbzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMOPQlCJnidk\n        8XLD0TysGURSJ35BBCaKPGULVEWklO5nzP68J21nY/1oUEdnA1d5cJh27U2D6gZ6\n        PEN7RsZTmpygFOQQaxbc8IKx86ackI6HCq3WwiDA92IJMMvedPrGWUNoG6h/qAwi\n        RCo3TdV61zfy0mqBdxa1X0algUQOZCUHk6R+DRbCThXQyZW7MNyfnNb1ubw03eHp\n        eSTxMvYm0k/+EbYtheY1h/MJklidEEwTw5ygw8KcxowcCFjdJjaqVgPhNZCNTuA6\n        GUrIQJ9hB/KHpHmmiege3peq5RQZg/EfoDUtRbVd5V1z7t+2O+IgBTEKBY5yzr4S\n        RxK9tdHEn+MCAwEAAaOCAQYwggECMB0GA1UdDgQWBBRRUvkBTZ+jf0ao85VurNMQ\n        v2QJdTCB0gYDVR0jBIHKMIHHgBRRUvkBTZ+jf0ao85VurNMQv2QJdaGBo6SBoDCB\n        nTEeMBwGA1UEAxQVKi5zZXJ2aWNlLmNmLmludGVybmFsMQswCQYDVQQGEwJVUzER\n        MA8GA1UECBMITmV3LVlvcmsxETAPBgNVBAcTCE5ldyBZb3JrMRAwDgYDVQQKEwdQ\n        aXZvdGFsMRAwDgYDVQQLEwdQQ0YgRGV2MSQwIgYJKoZIhvcNAQkBFhVwY2ZkZXYt\n        ZW5nQHBpdm90YWwuaW+CCQDjxRUTMitnVTAMBgNVHRMEBTADAQH/MA0GCSqGSIb3\n        DQEBBQUAA4IBAQBk19J3yfMb0DEC/BBDlHUyGvvsLr0PVbZGtYT7qxHkqOQBFz1k\n        q65aeNuT8D0GSMy6gfF64cRPp3A7a8NfeYsSoynufMHMaMKEzlYjSyNGwDcxyRwv\n        eQ7w4QeX9EnRCBf/JQdC9bIIs9IoJAgNHhEZHnzdnt76NX1hJ+w8SVTgi5zdQknr\n        v+wroKbStKy2R5qxnW1bPgt6AtMoE3M/ZUj+DNQvU3wEcTasWuxvDUOhZfoOM0Rd\n        UxpHKQp+6PPugE59i/xg/Vm53FrAQ6+4Tn6w5jjtWBszH8OxFkyD+mKhKsh/DkfV\n        kXvnbnHRmaEsQBbnWkhygDws3S1YT8/vTZBw\n        -----END CERTIFICATE-----\n      ca_cert: |\n        -----BEGIN CERTIFICATE-----\n        MIIE9jCCAt6gAwIBAgIBATANBgkqhkiG9w0BAQsFADAbMRkwFwYDVQQDExBjZi1u\n        ZXR3b3JraW5nLWNhMB4XDTE3MDUyNTE4MjQzNVoXDTI3MDUyNTE4MjQ0MVowGzEZ\n        MBcGA1UEAxMQY2YtbmV0d29ya2luZy1jYTCCAiIwDQYJKoZIhvcNAQEBBQADggIP\n        ADCCAgoCggIBAMQr/nlMLZYXNEpe1DCnkRoTmERogDJM8/PGAMQrwy9S+m/EV2Ju\n        0BryTq0JtOpdJPy52p49efc36K6N69z5ednssJNmiSMCF1Ia2EqCnuE0at5NK75b\n        yB5fOY7LW9ZCHjttbqs+xQIFzPLJNJlLeIsKoBqbTnkopMOwy/Z7VcHt7+vAG3H+\n        KU7zyheleD5g6INFJK8TolhrHDdkRB7KxSssqEzhLXUtrBD2pzXSayboTnIA1Y37\n        Dnlv0nqVTR7YDbYZMkbr4CCd08fgChp+vE2WwPyFyL1EF71exQNNoKbs91ad+pvx\n        jMGLj/ii8p13X30VBSWdsKbRKJvk7Q/vWx7tJkKfa4mMyPwXjWlWTjccCbflDqgz\n        /CsMkOYK4vZySFfETyzcz2J++kejxnugEmD6AmUV+6GdyHWPdi3CKsnVwJFVm2cI\n        ZiCshFjwKjp6yws4n3JcqmzFdOGY8Ij2YG4qjKCLrvaZIqyDwQ9fRXKTVNF3bmlm\n        8BAAsUhCbbtnnAFOPnadliClhJiXHM0NIB38GCZa0tuno2vAncGrfDaX4pNQL0t9\n        gS47wgxKEfK3WNe37JcOtwk8oET4PeTugiVWmcvxCEDwOXCvNBQOjv8HWb2LBYJz\n        njW4q7yNmXtfsS9InwBq3mRxRgU6UjjppT8hQDubpUCFARj/pQa/+PdfAgMBAAGj\n        RTBDMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQW\n        BBTKGOy47aC2jl6GVjNI/yaqpAlJEDANBgkqhkiG9w0BAQsFAAOCAgEAHXT0ch9V\n        W9BJisT+rxBLsqiNrry6bxTFVbktG/kU0B4oRgYosAl5Y5rWHByFavZNuQ9LP4gA\n        OVuRxs4vrvX+ym6/m5OCs7zVvunpXh1CzfpifXLTzQn5YNXxBSCBSxTF4vInES1k\n        wg6uwnVFLO+7kTorPfizp3lO3ydI8DpdUr3KWiAP9QthSJav8TAVopgBqdVzQFNs\n        rLD6Rr//4oK0i1c2escErwXbAWR1d2PIDl/z9h1PtSfXWOSb36g5JshFwzvWInXQ\n        65EQJvnxBoETHkGmwINE4Y1iy++duXQCF28gPD0GtesNqrTbJ91e3CHjI1thpre1\n        R0E+nlF5AXY865ARKGDJwdsQ2oGqLRCUZqaUHatZXON6+o5lOgzJ5W6vqciolX+y\n        3NrGZMWTBFnWziaXTAh7QspB8ZJwKEudIEPYBBqA0BEA/0SAxsINIFpeTipofmIV\n        z6Gn/tv+77dzW3GoAiaDuRCCpR2HvQJEo3YQCcAKWOvYD3a3LonOD9VwPT6jlKRj\n        nCYJNHYd7d92e7ykfsDq29PTtxzCAtZ2Nr/IqhZZmrI8aZftZ0GLq2BRcBnBeR4P\n        pBiWkZMn4//XACyFzIBtLgkqua+JXgReL3qzYqToXk5AUv48Z7rfz0YAJ6azFeSb\n        9MkVxlFa6Wls0/oHBMciwq787gURtJwPRHE=\n        -----END CERTIFICATE-----\n      server_cert: |\n        -----BEGIN CERTIFICATE-----\n        MIIEmDCCAoCgAwIBAgIRALjj0Acllm3jlXp/DGQs8dIwDQYJKoZIhvcNAQELBQAw\n        GzEZMBcGA1UEAxMQY2YtbmV0d29ya2luZy1jYTAeFw0xNzA1MjUxODI0NDFaFw0x\n        OTA1MjUxODI0NDFaMCwxKjAoBgNVBAMTIXBvbGljeS1zZXJ2ZXIuc2VydmljZS5j\n        Zi5pbnRlcm5hbDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALhD9bG4\n        ZSq4wuVnoMpK7tRqHyvq8Eaif0zojnkqNPIX1qpeypUyN2Tv+uvg/2yyhwlm4hcV\n        3kVNR2vxLhyyl4R7CjGvn5rtu36mr8FPzlXu2z02ceEKZLmzWeoL5eRknyDT4Qov\n        DxOtY+WB9SO4BsUwjzmC4rrNZ+8keF8vApb9lSZQC6zNRcbcHoWCJpkvUAjY5kAS\n        Uvrtf0jZGxJKEXbwVm2TRAFIrcoqQQa5UTOb8jpXo8ufdlXL5VXeAvQrzdRkLFUd\n        RiZ8LIZMaPqm1lvYjXDKV6GikHgO+B5yusl8QZZSc5e/gzNHDZ5bQMSHXNNZ6xS7\n        N5rGUkPgq3AklnMCAwEAAaOBxTCBwjAOBgNVHQ8BAf8EBAMCA7gwHQYDVR0lBBYw\n        FAYIKwYBBQUHAwEGCCsGAQUFBwMCMB0GA1UdDgQWBBR4E2bqAlWfsfSRuT3Y/LzV\n        7sgLJjAfBgNVHSMEGDAWgBTKGOy47aC2jl6GVjNI/yaqpAlJEDBRBgNVHREESjBI\n        giMqLnBvbGljeS1zZXJ2ZXIuc2VydmljZS5jZi5pbnRlcm5hbIIhcG9saWN5LXNl\n        cnZlci5zZXJ2aWNlLmNmLmludGVybmFsMA0GCSqGSIb3DQEBCwUAA4ICAQCMO5di\n        StwKQnFy/eiOz9JgqDmkr/jR3n9ZlqyrTyafDR6dVkLJ07Lw6Kj5OsiBp+3dJFTE\n        EBx9kWX7F7kX6EzYmimPALf0qMgtcl6SglYn5pUXRNYbx3N1VLe54zLyBcXZaMLP\n        WWbzzEap9tSpoFIqaTaBAJpCD5oIG6SyjeAEbJy0RhBZVH4ARZcabPz1ghy5gQYR\n        Gs1LqaOBwwLDER+sptRFvzQpE97NpxGLZs+BbTTkj+jYyKHBi85ztCjpb8WW+BaC\n        pasqybl/PdQNjGpLW7jw0ql/HTd2hF1bQ0ae7JPhc9eMPMYFtQiPLvAEkEGLjXbX\n        UMyBLh/9O2tMC45btIS86cDqpq1FI1PaCwxgRWTCQgXZtO8HouD6koaMSlhOLjEh\n        N2GpE4FaHDZiteSujJrU5KAqoC5nrtyQfBSdzzb50i78XHhx+XR90Emr8BpM9l2L\n        PDxomViysgy0HqcmjCoS203OOGMo2CFY4jxhzBhOmyIsThr6s5HJPtIQ8tJPjjow\n        KN08ci8JWvwxAEbUM6ecqV7jlT5oABbjwviTHwSLiOq9957HAB+7GCIN+rMhl+Yx\n        CQQaWE83Nd7GaYtxpjJGVjM1vXkEMFo7Aq0E0lVgBJSenQi7MSPT+igvlsiQNKPd\n        dX0iSKMxryPEYTtl9ce4uUlzwH9Wu+wkM1NPiw==\n        -----END CERTIFICATE-----\n      server_key: |\n        -----BEGIN RSA PRIVATE KEY-----\n        MIIEogIBAAKCAQEAuEP1sbhlKrjC5Wegykru1GofK+rwRqJ/TOiOeSo08hfWql7K\n        lTI3ZO/66+D/bLKHCWbiFxXeRU1Ha/EuHLKXhHsKMa+fmu27fqavwU/OVe7bPTZx\n        4QpkubNZ6gvl5GSfINPhCi8PE61j5YH1I7gGxTCPOYLius1n7yR4Xy8Clv2VJlAL\n        rM1FxtwehYImmS9QCNjmQBJS+u1/SNkbEkoRdvBWbZNEAUityipBBrlRM5vyOlej\n        y592VcvlVd4C9CvN1GQsVR1GJnwshkxo+qbWW9iNcMpXoaKQeA74HnK6yXxBllJz\n        l7+DM0cNnltAxIdc01nrFLs3msZSQ+CrcCSWcwIDAQABAoIBABWsCI2qfluT93g7\n        w/GG9qgNAzWLIE9udUJ6Z6dgi3Gd1CWdmH4LtfAtOXncsK38IV29uAG3FLlZ6XiM\n        mTvO1XtDbWOCoGb8ZvzyZeF6nW4F9csxSBuLuWUN7xlT5OoD26NkyCcGeeN6lTE9\n        I7PbxRAUMgQ1nK0T05GQ3Id1Y/yWC4ZQnY5oKziFU0d5+aIDfegm82i8+ZvOTpOK\n        FEnqf1XWQEiW7P7+Xd2eUG8k/vHJ258GtTJqvl2sACWJE2vuAM7uqENds0K2MToG\n        d8VNrYD2mdrNOO6aR/Ho1uZ021iUzrOWKbzf/LrHzhwKB5M4HABJpmqoDviMIbKB\n        ourRB8ECgYEA3kA/VYwEfGGWp0yHW0II/dHAUr9+Zb6xgYEf3rT9HPW+D8Blf3b1\n        zGOlclNzu781yKS1w4XqpU6OIC/qZpW4F/alomDbscJIyWVd/SmMolbhELCoGjGt\n        9QvRiczx75hntZDLNJkORFopXVen5HITR6FMzXEA7iEzYx1akYGQXvsCgYEA1D8R\n        x0xNLt6LWdYZLgwvfYkrDoffLJQM4jgXkHVA9QZkKCjjL9GNTjRLvz3JKvM+Qsvj\n        5QR6vEpAXd+iRoPeOxUo+kb0tKj333fTIKHCj/78LSCc3lLBPigP+D0vbiZQfFUT\n        fZlFc6FNOA2SKUQ/xCT6KVHxf4Y5c8dtFBJRLOkCgYAWqQJMHJyQefq8UAc0/MSh\n        7HLpfPDMOucqRxoSwO1VuJCKVpmCp4RkNHy37V5NdC9tp62Io+zKsfm3umrxzq4Y\n        c2Nr7Og5dY+qSRWOLGBUZPtJkllxYkNUSsIwhJ7eSPG6B2tQj5Ju0aqKA9fwaNki\n        YoXMJIttvCDbKDEFyOoJZQKBgBh0V9kNqoru60FjkK0kjEg7iLF46DbbrAxYiCaF\n        zAEvRlT2OQ7mZxCOp/eV59rCAfdyRIS7mmSdbYMjZDAZu341Nu53RHSYT075IGNP\n        H/q1V1rfuhNHl6pQtV5VtmRLl9RrfP5orX7gI+SEc8W7bllsJUKjhV67GV2EqcW5\n        Qo8ZAoGAE07gkzFre6eseBm0lzdHoJoigKw4WXw0LG5tjOBqHZAUFpIikIhbY2eo\n        R/22aXTo0PPbRnsSOk4Bf6SOIcSy1XNY1Zx9j59/n4okCfJTTfaPBNLExLUTdw0q\n        pHvp1lIMgtuEOWGVUuT3XYOKEIjC8lN6ddpdwK6QQXhgdqhw8KI=\n        -----END RSA PRIVATE KEY-----\n      database:\n        type: mysql\n        username: network_policy\n        password: admin\n        port: 3306\n        name: network_policy\n        host: sql-db.service.cf.internal\n\n  # For ETCd:\n  etcd:\n    machines: [127.0.0.1]\n    require_ssl: false\n    ca_cert: \"\"\n    server_cert: \"\"\n    server_key: \"\"\n    client_cert: \"\"\n    client_key: \"\"\n    peer_require_ssl: false\n    peer_ca_cert: \"\"\n    peer_cert: \"\"\n    peer_key: \"\"\n    cluster:\n      - name: database_z1\n        instances: 1\n    advertise_urls_dns_suffix: etcd.service.cf.internal\n    peer_ip: 127.0.0.1\n    client_ip: 127.0.0.1\n  etcd_proxy:\n    ip: 127.0.0.1\n\n  cf_mysql:\n    host: mysql-broker.local.pcfdev.io\n    external_host: mysql-broker.local.pcfdev.io\n    mysql:\n      cluster_ips: [127.0.0.1]\n      cluster_health:\n        password: admin\n      admin_password: admin\n      roadmin_password: admin\n      persistent_disk: 10000\n      database_startup_timeout: 120\n      galera_port: 4568\n      galera_healthcheck:\n        endpoint_username: admin\n        endpoint_password: admin\n        db_password: admin\n        ip: 127.0.0.1\n      seeded_databases:\n      - name: uaadb\n        username: uaaadmin\n        password: admin\n      - name: ccdb\n        username: ccadmin\n        password: admin\n      - name: bbsdb\n        username: bbsadmin\n        password: admin\n      - name: routingapidb\n        username: routingapiadmin\n        password: admin\n      - name: network_policy\n        username: network_policy\n        password: admin\n      - name: network_connectivity\n        username: network_connectivity\n        password: admin\n    broker:\n      host: 127.0.0.1\n      port: 19284\n      db_password: mysql-broker-db-password\n      auth_username: admin\n      auth_password: admin\n      cookie_secret: 94046872-2602-4ca6-8d07-8b0da9762477\n      quota_enforcer:\n        password: admin\n      ssl_enabled: false\n      services:\n      - name: p-mysql\n        plan_updateable: true\n        id: 44b26033-1f54-4087-b7bc-da9652c2a539\n        description: MySQL databases on demand\n        tags: [mysql]\n        metadata:\n          displayName: MySQL\n          longDescription: \"MySQL service for application development and testing.\"\n          imageUrl: 'data:image/png;base64,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'\n        dashboard_client:\n          id: p-mysql\n          secret: p-mysql-secret\n        plans:\n        - name: 512mb\n          id: ab08f1bc-e6fc-4b56-a767-ee0fea6e3f20\n          description: PCF Dev MySQL Server\n          max_storage_mb: 512\n          max_user_connections: 10\n        - name: 1gb\n          id: 11d0aa36-dcec-4021-85f5-ea4d9a5c8342\n          description: PCF Dev MySQL Server\n          max_storage_mb: 1024\n          max_user_connections: 20\n      nginx:\n        ip: 127.0.0.1\n        port: 19284\n"
  },
  {
    "path": "pcfdev-base.json",
    "content": "{\n    \"variables\": {\n        \"version\": \"0\",\n        \"cpus\": \"4\",\n        \"memory\": \"4096\",\n        \"disk_size\": \"60\",\n        \"eula_url\": \"\",\n        \"security_group_id\": \"\",\n        \"subnet_id\": \"\",\n        \"vpc_id\": \"\",\n        \"ssh_keypair_name\": \"\",\n        \"ssh_private_key_file\": \"\"\n    },\n    \"builders\": [\n        {\n            \"type\": \"amazon-ebs\",\n            \"region\": \"us-east-1\",\n            \"source_ami\": \"ami-6012160a\",\n            \"instance_type\": \"c4.2xlarge\",\n            \"ami_name\": \"pcfdev-base-v{{user `version`}}\",\n            \"ami_description\": \"{{user `eula_url`}}\",\n            \"associate_public_ip_address\": false,\n            \"security_group_id\": \"{{user `security_group_id`}}\",\n            \"subnet_id\": \"{{user `subnet_id`}}\",\n            \"vpc_id\": \"{{user `vpc_id`}}\",\n            \"ssh_keypair_name\": \"{{user `ssh_keypair_name`}}\",\n            \"ssh_private_key_file\": \"{{user `ssh_private_key_file`}}\",\n            \"ami_block_device_mappings\": [{\n              \"device_name\": \"/dev/sda1\",\n              \"volume_type\": \"gp2\",\n              \"volume_size\": \"{{user `disk_size`}}\",\n              \"delete_on_termination\": true\n            }],\n            \"launch_block_device_mappings\": [{\n              \"device_name\": \"/dev/sda1\",\n              \"volume_type\": \"io1\",\n              \"iops\": \"1800\",\n              \"volume_size\": \"{{user `disk_size`}}\",\n              \"delete_on_termination\": true\n            }],\n            \"ssh_username\": \"ubuntu\",\n            \"ssh_timeout\": \"20m\",\n            \"tags\": {\"Name\": \"v{{user `version`}}\", \"License\":\"{{user `eula_url`}}\"}\n        },\n        {\n            \"type\": \"virtualbox-iso\",\n            \"headless\": true,\n            \"vm_name\": \"pcfdev-base-v{{user `version`}}\",\n            \"guest_os_type\": \"Ubuntu_64\",\n            \"disk_size\": \"{{user `disk_size`}}000\",\n            \"ssh_username\": \"vcap\",\n            \"ssh_password\": \"vcap\",\n            \"iso_url\": \"https://pcfdev.s3.amazonaws.com/artifacts/ubuntu-14.04.4-server-amd64.iso\",\n            \"iso_checksum\": \"2ac1f3e0de626e54d05065d6f549fa3a\",\n            \"iso_checksum_type\": \"md5\",\n            \"http_directory\": \"preseed\",\n            \"ssh_timeout\": \"20m\",\n            \"shutdown_command\": \"echo vcap | sudo -S shutdown -P now\",\n            \"format\": \"ova\",\n            \"boot_command\": [\n                \"<esc><esc><enter><wait>\",\n                \"/install/vmlinuz noapic \",\n                \"preseed/url=http://{{ .HTTPIP }}:{{ .HTTPPort }}/preseed.cfg \",\n                \"debian-installer=en_US auto locale=en_US kbd-chooser/method=us \",\n                \"hostname=pcfdev \",\n                \"fb=false debconf/frontend=noninteractive \",\n                \"keyboard-configuration/modelcode=SKIP keyboard-configuration/layout=USA \",\n                \"keyboard-configuration/variant=USA console-setup/ask_detect=false \",\n                \"initrd=/install/initrd.gz -- <enter>\"\n            ],\n            \"vboxmanage\": [\n                [ \"modifyvm\", \"{{.Name}}\", \"--cpus\", \"{{user `cpus`}}\" ],\n                [ \"modifyvm\", \"{{.Name}}\", \"--memory\", \"{{user `memory`}}\" ],\n                [ \"modifyvm\", \"{{.Name}}\", \"--natdnshostresolver1\", \"on\" ],\n                [ \"modifyvm\", \"{{.Name}}\", \"--nic1\", \"nat\" ],\n                [ \"modifyvm\", \"{{.Name}}\", \"--paravirtprovider\", \"minimal\" ]\n            ]\n        }\n    ],\n\n    \"provisioners\": [\n        {\n            \"type\": \"shell\",\n            \"execute_command\": \"echo vcap | {{ .Vars }} sudo -E -S sh -c '{{ .Path }}'\",\n            \"inline\": [\n                \"apt-get -y install software-properties-common\",\n                \"add-apt-repository -y ppa:brightbox/ruby-ng\",\n                \"echo 'deb http://apt.postgresql.org/pub/repos/apt/ trusty-pgdg main' > /etc/apt/sources.list.d/pgdg.list\",\n                \"wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -\",\n                \"apt-get -y update\",\n                \"apt-get -y --force-yes dist-upgrade\",\n                \"apt-get -y update\",\n                \"apt-get -y upgrade sudo\",\n                \"echo 'vcap ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers\",\n\n                \"# vvv   TODO: instead of doing this, use (or build) a stemcell for PCF Dev   vvv\",\n                \"sed -i 's/^GRUB_CMDLINE_LINUX=\\\"\\\"/GRUB_CMDLINE_LINUX=\\\"cgroup_enable=memory swapaccount=1\\\"/' /etc/default/grub\",\n                \"# ^^^   TODO: instead of doing this, use (or build) a stemcell for PCF Dev   ^^^\"\n            ]\n        },\n        {\n            \"type\": \"shell\",\n            \"only\": [\"virtualbox-iso\"],\n            \"execute_command\": \"{{ .Vars }} sudo -E sh -c '{{ .Path }}'\",\n            \"inline\": [\n                \"apt-get install -y dkms\",\n                \"mount -o loop /home/vcap/VBoxGuestAdditions.iso /mnt\",\n                \"sh /mnt/VBoxLinuxAdditions.run --nox11\",\n                \"umount /mnt\",\n                \"apt-get install -y open-vm-tools\"\n            ]\n        },\n        {\n            \"type\": \"shell\",\n            \"only\": [\"amazon-ebs\"],\n            \"execute_command\": \"{{ .Vars }} sudo -E sh -c '{{ .Path }}'\",\n            \"inline\": [\n                \"while [ ! -f /var/lib/cloud/instance/boot-finished ]; do sleep 1; done\",\n                \"ln -sf /usr/bin/mawk /usr/bin/awk\"\n            ]\n        },\n        {\n            \"type\": \"shell\",\n            \"execute_command\": \"{{ .Vars }} sudo -E sh -c '{{ .Path }}'\",\n            \"inline\": [\n                \"apt-get -y install curl unzip zip sysstat vim\",\n                \"apt-get -y install libruby2.1 ruby2.1\",\n                \"apt-get -y install linux-generic\",\n                \"apt-get -y install aufs-tools\",\n                \"apt-get -y install libgcrypt20 libgcrypt20-dev\",\n                \"apt-get -y install postgresql-client-9.4\",\n                \"apt-get -y install nginx\",\n                \"service nginx stop\",\n                \"update-rc.d -f nginx remove\",\n\n                \"for version in $(ls /lib/modules); do apt-get install -y linux-image-extra-$version; done\",\n\n                \"curl -L 'https://cli.run.pivotal.io/stable?release=linux64-binary&version=6.25.0&source=github-rel' | tar -C /usr/local/bin -xz\",\n                \"curl -L 'https://github.com/cloudfoundry-incubator/routing-api-cli/releases/download/2.6.0/rtr-linux-amd64.tgz' | tar -C /usr/local/bin -xz\",\n                \"mv /usr/local/bin/rtr-linux-amd64 /usr/local/bin/rtr\",\n                \"curl -L 'https://storage.googleapis.com/golang/go1.6.3.linux-amd64.tar.gz' | tar -C /usr/local -xz\",\n                \"ln -sf /usr/local/go/bin/go* /usr/local/bin/\",\n                \"curl -o /usr/local/bin/veritas -L https://github.com/pivotal-cf-experimental/veritas/releases/download/latest/veritas\",\n                \"chmod +x /usr/local/bin/veritas\",\n                \"curl -o /usr/local/bin/jq -L https://github.com/stedolan/jq/releases/download/jq-1.5/jq-linux64\",\n                \"chmod +x /usr/local/bin/jq\"\n            ]\n        }\n    ],\n    \"post-processors\": [\n        {\n            \"type\": \"shell-local\",\n            \"only\": [\"virtualbox-iso\"],\n            \"inline\": [\"ls $PWD/*/*.ova\"],\n            \"keep_input_artifact\": true\n        },\n        {\n             \"type\": \"vagrant\",\n             \"only\": [\"amazon-ebs\"],\n             \"output\": \"pcfdev-base-{{.Provider}}-v{{user `version`}}.box\",\n             \"keep_input_artifact\": true\n        }\n    ]\n}\n"
  },
  {
    "path": "pcfdev.json",
    "content": "{\n    \"variables\": {\n        \"source_ami\": \"\",\n        \"source_ova_path\": \"\",\n        \"version\": \"0\",\n        \"distro\": \"pcfdev\",\n        \"cpus\": \"4\",\n        \"memory\": \"4096\",\n        \"disk_size\": \"60\",\n        \"dev\": \"false\",\n        \"eula_url\": \"\",\n        \"security_group_id\": \"\",\n        \"subnet_id\": \"\",\n        \"vpc_id\": \"\",\n        \"ssh_keypair_name\": \"\",\n        \"ssh_private_key_file\": \"\"\n    },\n    \"builders\": [\n        {\n            \"type\": \"amazon-ebs\",\n            \"region\": \"us-east-1\",\n            \"source_ami\": \"{{user `source_ami`}}\",\n            \"instance_type\": \"c4.2xlarge\",\n            \"ami_name\": \"{{user `distro`}}-v{{user `version`}}\",\n            \"ami_description\": \"{{user `eula_url`}}\",\n            \"associate_public_ip_address\": false,\n            \"security_group_id\": \"{{user `security_group_id`}}\",\n            \"subnet_id\": \"{{user `subnet_id`}}\",\n            \"vpc_id\": \"{{user `vpc_id`}}\",\n            \"ssh_keypair_name\": \"{{user `ssh_keypair_name`}}\",\n            \"ssh_private_key_file\": \"{{user `ssh_private_key_file`}}\",\n            \"ami_block_device_mappings\": [{\n              \"device_name\": \"/dev/sda1\",\n              \"volume_type\": \"gp2\",\n              \"volume_size\": \"{{user `disk_size`}}\",\n              \"delete_on_termination\": true\n            }],\n            \"launch_block_device_mappings\": [{\n              \"device_name\": \"/dev/sda1\",\n              \"volume_type\": \"io1\",\n              \"iops\": \"1800\",\n              \"volume_size\": \"{{user `disk_size`}}\",\n              \"delete_on_termination\": true\n            }],\n            \"ssh_username\": \"ubuntu\",\n            \"ssh_timeout\": \"20m\",\n            \"tags\": {\"Name\": \"v{{user `version`}}\", \"License\":\"{{user `eula_url`}}\"}\n        },\n        {\n            \"type\": \"virtualbox-ovf\",\n            \"source_path\": \"{{user `source_ova_path`}}\",\n            \"ssh_username\": \"vcap\",\n            \"ssh_password\": \"vcap\",\n            \"headless\": true,\n            \"vm_name\": \"packer-{{user `distro`}}-v{{user `version`}}\",\n            \"http_directory\": \"preseed\",\n            \"ssh_timeout\": \"20m\",\n            \"shutdown_command\": \"echo vcap | sudo -S shutdown -P now\",\n            \"format\": \"ova\",\n            \"boot_command\": [\n                \"<esc><esc><enter><wait>\",\n                \"/install/vmlinuz noapic \",\n                \"preseed/url=http://{{ .HTTPIP }}:{{ .HTTPPort }}/preseed.cfg \",\n                \"debian-installer=en_US auto locale=en_US kbd-chooser/method=us \",\n                \"hostname=pcfdev \",\n                \"fb=false debconf/frontend=noninteractive \",\n                \"keyboard-configuration/modelcode=SKIP keyboard-configuration/layout=USA \",\n                \"keyboard-configuration/variant=USA console-setup/ask_detect=false \",\n                \"initrd=/install/initrd.gz -- <enter>\"\n            ],\n            \"vboxmanage\": [\n                [ \"modifyvm\", \"{{.Name}}\", \"--cpus\", \"{{user `cpus`}}\" ],\n                [ \"modifyvm\", \"{{.Name}}\", \"--memory\", \"{{user `memory`}}\" ],\n                [ \"modifyvm\", \"{{.Name}}\", \"--natdnshostresolver1\", \"on\" ],\n                [ \"modifyvm\", \"{{.Name}}\", \"--nic1\", \"nat\" ],\n                [ \"modifyvm\", \"{{.Name}}\", \"--paravirtprovider\", \"minimal\" ]\n            ]\n        }\n    ],\n    \"provisioners\": [\n        {\n            \"type\": \"shell\",\n            \"only\": [\"amazon-ebs\"],\n            \"execute_command\": \"{{ .Vars }} sudo -E sh -c '{{ .Path }}'\",\n            \"inline\": [\n                \"while [ ! -f /var/lib/cloud/instance/boot-finished ]; do sleep 1; done\",\n                \"ln -sf /usr/bin/mawk /usr/bin/awk\"\n            ]\n        },\n        {\n            \"type\": \"file\",\n            \"only\": [\"virtualbox-ovf\"],\n            \"source\": \"assets/keys/key.pem\",\n            \"destination\": \"/tmp/key.pem\"\n        },\n        {\n            \"type\": \"file\",\n            \"source\": \"manifest.yml\",\n            \"destination\": \"/tmp/manifest.yml\"\n        },\n        {\n            \"type\": \"shell\",\n            \"only\": [\"virtualbox-ovf\"],\n            \"remote_path\": \"/home/vcap/add_key.sh\",\n            \"execute_command\": \"{{ .Vars }} sudo -E sh -c '{{ .Path }}'\",\n            \"inline\": [\n                \"mkdir -p /home/vcap/.ssh\",\n                \"cp /tmp/key.pem /home/vcap/.ssh/authorized_keys\"\n            ]\n        },\n        {\n            \"type\": \"shell\",\n            \"execute_command\": \"{{ .Vars }} sudo -E sh -c '{{ .Path }}'\",\n            \"inline\": [\n                \"echo 'UseDNS no' >> /etc/ssh/sshd_config\",\n                \"echo 'PasswordAuthentication no' >> /etc/ssh/sshd_config\",\n\n                \"mkdir -p /var/pcfdev/api\",\n                \"echo local.pcfdev.io > /var/pcfdev/domain\",\n                \"mv /tmp/manifest.yml /var/pcfdev/manifest.yml\",\n\n                \"mkdir -p /var/vcap/store\",\n\n                \"resolvconf --disable-updates\",\n                \"apt-get -y install dnsmasq\",\n                \"service dnsmasq stop\",\n                \"update-rc.d -f dnsmasq remove\",\n                \"echo IGNORE_RESOLVCONF=yes >> /etc/default/dnsmasq\",\n                \"echo bind-interfaces > /etc/dnsmasq.d/pcfdev\",\n                \"echo net.ipv4.ip_local_port_range = 32768 61000 > /etc/sysctl.d/60-restrict-source-ports.conf\"\n            ]\n        },\n        {\n            \"type\": \"packer-bosh\",\n            \"assets_dir\": \"assets\",\n            \"remote_manifest_path\": \"/var/pcfdev/manifest.yml\"\n        },\n        {\n            \"type\": \"shell\",\n            \"execute_command\": \"{{ .Vars }} sudo -E sh -c '{{ .Path }}'\",\n            \"remote_path\": \"/home/vcap/start_services.sh\",\n            \"override\": {\n                \"amazon-ebs\": { \"remote_path\": \"/home/ubuntu/start_services.sh\" }\n            },\n            \"inline\": [\n                \"mkdir -p /var/vcap/monit/job\",\n                \"echo manual > /etc/init/runsvdir.override\",\n                \"stop runsvdir\",\n                \"mv /opt/bosh-provisioner/assets/scripts/* /var/pcfdev\",\n                \"mv /opt/bosh-provisioner/assets/extras /var/pcfdev\",\n                \"mv /opt/bosh-provisioner/assets/versions /var/pcfdev/\",\n\n                \"case '{{build_type}}' in\",\n                \"amazon-ebs) PROVIDER_TYPE=aws ;;\",\n                \"*) PROVIDER_TYPE=virtualbox ;;\",\n                \"esac\",\n\n                \"/var/pcfdev/provision local.pcfdev.io $(ip route get 1 | awk '{print $NF;exit}') redis,rabbitmq '' $PROVIDER_TYPE\",\n                \"/var/pcfdev/stop\"\n            ]\n        },\n        {\n            \"type\": \"shell\",\n            \"execute_command\": \"{{ .Vars }} sudo -E sh -c '{{ .Path }}'\",\n            \"remote_path\": \"/home/vcap/cleanup.sh\",\n            \"override\": {\n                \"amazon-ebs\": { \"remote_path\": \"/home/ubuntu/cleanup.sh\" }\n            },\n            \"inline\": [\n                \"rm -f /var/pcfdev/external-resolv.conf\",\n                \"tar czf /var/pcfdev/packer-syslogs.tgz /var/vcap/sys/log\",\n                \"rm -f /var/vcap/sys/log/*/*.log\",\n                \"{{user `dev`}} || rm -rf /opt/bosh-provisioner\",\n                \"{{user `dev`}} || rm -f /var/pcfdev/manifest.yml\",\n                \"apt-get -y autoremove\",\n                \"apt-get -y clean\",\n                \"service dnsmasq stop\",\n                \"/var/pcfdev/reset\",\n                \"rm -rf $HOME/.cf\",\n                \"chmod 1777 /tmp\",\n                \"echo 'vcap:vcap' | chpasswd\",\n                \"chown -R vcap: /var/vcap/store\",\n                \"chown -R vcap: /var/pcfdev\",\n                \"chown -R vcap /home/vcap/.ssh || true\",\n                \"dd if=/dev/zero of=/EMPTY bs=1M 2>/dev/null || true\",\n                \"rm -f /EMPTY\"\n            ]\n        }\n    ],\n    \"post-processors\": [\n        {\n            \"type\": \"shell-local\",\n            \"only\": [\"virtualbox-ovf\"],\n            \"inline\": [\"ls $PWD/*/*.ova\"],\n            \"keep_input_artifact\": true\n        },\n        {\n             \"type\": \"vagrant\",\n             \"only\": [\"amazon-ebs\"],\n             \"output\": \"{{user `distro`}}-{{.Provider}}-v{{user `version`}}.box\",\n             \"keep_input_artifact\": true\n        }\n    ]\n}\n"
  },
  {
    "path": "preseed/preseed.cfg",
    "content": "d-i debian-installer/locale string en_US.utf8\nd-i console-setup/ask_detect boolean false\nd-i console-setup/layout string USA\n\nd-i netcfg/get_hostname string unassigned-hostname\nd-i netcfg/get_domain string unassigned-domain\n\nd-i time/zone string UTC\nd-i clock-setup/utc-auto boolean true\nd-i clock-setup/utc boolean true\n\nd-i kbd-chooser/method select American English\nd-i netcfg/wireless_wep string\nd-i base-installer/kernel/override-image string linux-server\nd-i debconf debconf/frontend select Noninteractive\n\nd-i pkgsel/install-language-support boolean false\ntasksel tasksel/first multiselect standard, ubuntu-server\n\nd-i partman-auto/method string regular\nd-i partman-auto/choose_recipe select atomic\nd-i partman-basicfilesystems/no_swap boolean false\nd-i partman-auto/expert_recipe string                      \\\n      partman-auto/text/atomic_scheme ::                   \\\n              55000 80000 1000000 ext4                     \\\n                      $primary{ } $bootable{ }             \\\n                      method{ format } format{ }           \\\n                      use_filesystem{ } filesystem{ ext4 } \\\n                      mountpoint{ / }                      \\\n              .                                            \\\n              1024 2048 8192 linux-swap                    \\\n                      $primary{ }                          \\\n                      method{ swap } format{ }             \\\n              .                                            \\\n\nd-i partman/confirm_write_new_label boolean true\nd-i partman/confirm_nooverwrite boolean true\nd-i partman/choose_partition select finish\nd-i partman/confirm boolean true\n\nd-i passwd/user-fullname string vcap\nd-i passwd/username string vcap\nd-i passwd/user-password password vcap\nd-i passwd/user-password-again password vcap\nd-i user-setup/encrypt-home boolean false\nd-i user-setup/allow-password-weak boolean true\n\nd-i pkgsel/include string openssh-server ntp\nd-i pkgsel/upgrade select full-upgrade\n\nd-i grub-installer/only_debian boolean true\nd-i grub-installer/with_other_os boolean true\nd-i finish-install/reboot_in_progress note\n\nd-i pkgsel/update-policy select none\n\nchoose-mirror-bin mirror/http/proxy string\n"
  },
  {
    "path": "src/api/main.go",
    "content": "package main\n\nimport (\n\t\"encoding/json\"\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"net/http\"\n\t\"os\"\n\t\"api/usecases\"\n)\n\nfunc fileExists(path string) (bool, error) {\n\tif _, err := os.Stat(path); err != nil {\n\t\tif os.IsNotExist(err) {\n\t\t\treturn false, nil\n\t\t}\n\t\treturn false, err\n\t}\n\treturn true, nil\n}\n\nfunc serverError(w http.ResponseWriter) {\n\terrorHandler(w, \"Failed to replace UAA Config Credentials\", http.StatusInternalServerError)\n}\n\nfunc errorHandler(w http.ResponseWriter, message string, statusCode int) {\n\tw.WriteHeader(statusCode)\n\tfmt.Fprintf(w, fmt.Sprintf(`{\"error\":{\"message\":\"%s\"}}`, message))\n}\n\nfunc handlerStatus(w http.ResponseWriter, r *http.Request) {\n\texists, err := fileExists(\"/run/pcfdev-healthcheck\")\n\tif err != nil {\n\t\tfmt.Fprintf(w, fmt.Sprintf(`{\"error\":{\"message\":\"%s\"}}`, err))\n\t}\n\n\tif exists {\n\t\tfmt.Fprintf(w, `{\"status\":\"Running\"}`)\n\t} else {\n\t\tfmt.Fprintf(w, `{\"status\":\"Unprovisioned\"}`)\n\t}\n}\n\nfunc replaceSecrets(w http.ResponseWriter, r *http.Request) {\n\tuaaFilePath := \"/var/vcap/jobs/uaa/config/uaa.yml\"\n\tuaaCredentialReplacement := &usecases.UaaCredentialReplacement{}\n\n\tuaaBytes, err := ioutil.ReadAll(r.Body)\n\tif err != nil {\n\t\tserverError(w)\n\t\treturn\n\t}\n\n\tvar request struct {\n\t\tPassword string `json:\"password\"`\n\t}\n\n\tif err := json.Unmarshal(uaaBytes, &request); err != nil {\n\t\terrorHandler(w, \"Failed to parse password field from request\", http.StatusBadRequest)\n\t\treturn\n\t}\n\n\tinsecureConfig, err := ioutil.ReadFile(uaaFilePath)\n\tif err != nil {\n\t\tserverError(w)\n\t\treturn\n\t}\n\n\tsecureConfig, err := uaaCredentialReplacement.ReplaceUaaConfigAdminCredentials(string(insecureConfig), request.Password)\n\n\tif err != nil {\n\t\tserverError(w)\n\t\treturn\n\t}\n\n\tioutil.WriteFile(uaaFilePath, []byte(secureConfig), 0644)\n}\n\nfunc main() {\n\thttp.HandleFunc(\"/replace-secrets\", replaceSecrets)\n\thttp.HandleFunc(\"/status\", handlerStatus)\n\thttp.ListenAndServe(\"localhost:8090\", nil)\n}\n"
  },
  {
    "path": "src/api/main_suite_test.go",
    "content": "package main_test\n\nimport (\n\t. \"github.com/onsi/ginkgo\"\n\t. \"github.com/onsi/gomega\"\n\n\t\"testing\"\n)\n\nfunc TestPCFDevApi(t *testing.T) {\n\tRegisterFailHandler(Fail)\n\tRunSpecs(t, \"PCF Dev Api Main Suite\")\n}\n"
  },
  {
    "path": "src/api/main_test.go",
    "content": "package main_test\n\nimport (\n\t\"github.com/onsi/gomega/gbytes\"\n\t\"github.com/onsi/gomega/gexec\"\n\t. \"github.com/onsi/ginkgo\"\n\t. \"github.com/onsi/gomega\"\n\t\"os\"\n\t\"os/exec\"\n\t\"path/filepath\"\n\t\"strings\"\n)\n\nvar _ = Describe(\"PCF Dev Api provision\", func() {\n\tvar (\n\t\tdockerID string\n\t\tpwd      string\n\t)\n\n\tBeforeEach(func() {\n\t\tvar err error\n\t\tpwd, err = os.Getwd()\n\t\tExpect(err).NotTo(HaveOccurred())\n\n\t\toutput, err := exec.Command(\"docker\", \"run\", \"--privileged\", \"-d\", \"-w\", \"/go/src/api\", \"-v\", pwd+\":/go/src/api\", \"pcfdev/provision\", \"bash\", \"-c\", \"mount -o size=40M -t tmpfs tmpfs /run && sleep 1000\").Output()\n\t\tExpect(err).NotTo(HaveOccurred())\n\t\tdockerID = strings.TrimSpace(string(output))\n\t\tExpect(exec.Command(\"docker\", \"exec\", dockerID, \"go\", \"build\", \"api\").Run()).To(Succeed())\n\t\tExpect(exec.Command(\"docker\", \"exec\", dockerID, \"bash\", \"-c\", `/go/src/api/api`).Start())\n\t\tEventually(func() error {\n\t\t\treturn exec.Command(\"docker\", \"exec\", dockerID, \"lsof\", \"-i\", \":8090\").Run()\n\t\t}).Should(Succeed())\n\t})\n\n\tAfterEach(func() {\n\t\tos.RemoveAll(filepath.Join(pwd, \"pcfdev\"))\n\t\tos.RemoveAll(filepath.Join(pwd, \"provisdion-script\"))\n\t\tExpect(exec.Command(\"docker\", \"rm\", dockerID, \"-f\").Run()).To(Succeed())\n\t})\n\n\tDescribe(\"/replace-secrets\", func() {\n\t\tIt(\"should replace secrets on the VM\", func() {\n\t\t\tsession, err := gexec.Start(exec.Command(\"docker\", \"exec\", dockerID, \"curl\", \"-v\", \"-X\", \"PUT\", \"-d\", `{\"password\":\"some-master-password\"}`, \"localhost:8090/replace-secrets\"), GinkgoWriter, GinkgoWriter)\n\t\t\tExpect(err).NotTo(HaveOccurred())\n\t\t\tEventually(session, \"10s\").Should(gexec.Exit())\n\n\t\t\tsession, err = gexec.Start(exec.Command(\"docker\", \"exec\", dockerID, \"cat\", \"/var/vcap/jobs/uaa/config/uaa.yml\"), GinkgoWriter, GinkgoWriter)\n\t\t\tExpect(err).NotTo(HaveOccurred())\n\t\t\tEventually(session, \"10s\").Should(gexec.Exit(0))\n\t\t\tExpect(session).To(gbytes.Say(`- admin\\|some-master-password\\|scim.write`))\n\t\t})\n\t})\n\n\tDescribe(\"/status\", func() {\n\t\tContext(\"when the health-check is not written\", func() {\n\t\t\tIt(\"should reply 'Unprovisioned' in the /status endpoint\", func() {\n\t\t\t\tsession, err := gexec.Start(exec.Command(\"docker\", \"exec\", dockerID, \"curl\", \"localhost:8090/status\"), GinkgoWriter, GinkgoWriter)\n\t\t\t\tExpect(err).NotTo(HaveOccurred())\n\t\t\t\tEventually(session, \"10s\").Should(gexec.Exit(0))\n\t\t\t\tExpect(session).To(gbytes.Say(`{\"status\":\"Unprovisioned\"}`))\n\t\t\t})\n\t\t})\n\n\t\tContext(\"when the health-check is written\", func() {\n\t\t\tIt(\"should reply `Running` in the /status endpoint\", func() {\n\t\t\t\tsession, err := gexec.Start(exec.Command(\"docker\", \"exec\", dockerID, \"touch\", \"/run/pcfdev-healthcheck\"), GinkgoWriter, GinkgoWriter)\n\t\t\t\tExpect(err).NotTo(HaveOccurred())\n\t\t\t\tEventually(session, \"10s\").Should(gexec.Exit(0))\n\n\t\t\t\tsession, err = gexec.Start(exec.Command(\"docker\", \"exec\", dockerID, \"curl\", \"localhost:8090/status\"), GinkgoWriter, GinkgoWriter)\n\t\t\t\tExpect(err).NotTo(HaveOccurred())\n\t\t\t\tEventually(session, \"10s\").Should(gexec.Exit(0))\n\t\t\t\tExpect(session).To(gbytes.Say(`{\"status\":\"Running\"}`))\n\t\t\t})\n\t\t})\n\t})\n\n})\n"
  },
  {
    "path": "src/api/usecases/uaa_credential_replacement.go",
    "content": "package usecases\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"gopkg.in/yaml.v2\"\n\t\"regexp\"\n\t\"strings\"\n)\n\ntype UaaCredentialReplacement struct{}\n\nfunc (u *UaaCredentialReplacement) ReplaceUaaConfigAdminCredentials(uaaConfig string, password string) (_ string, err error) {\n\tusers, _ := findArray(uaaConfig, \"scim.users\")\n\n\tadminCredentialPattern := regexp.MustCompile(`admin\\|admin\\|`)\n\tfor index, userSettingInterface := range users {\n\t\tuserSetting := userSettingInterface.(string)\n\t\tif adminCredentialPattern.MatchString(userSetting) {\n\t\t\tsecuredUserSetting := adminCredentialPattern.ReplaceAllString(userSetting, fmt.Sprintf(\"admin|%s|\", password))\n\t\t\treturn setAt(uaaConfig, \"scim.users\", index, securedUserSetting)\n\t\t}\n\t}\n\n\treturn \"\", errors.New(\"failed to parse UAA config file\")\n}\n\ntype interfaceMap map[interface{}]interface{}\n\nfunc recoverFromInterfaceConversion(recovered interface{}) error {\n\tif recovered != nil {\n\t\terrorMessage := recovered.(error).Error()\n\t\tif strings.Contains(errorMessage, \"interface conversion\") {\n\t\t\treturn errors.New(\"failed to parse yaml\")\n\t\t} else {\n\t\t\tpanic(recovered)\n\t\t}\n\t}\n\treturn nil\n}\n\nfunc setAt(contents string, path string, arrayIndex int, value string) (string, error) {\n\tyamlContents := make(interfaceMap)\n\n\tif err := yaml.Unmarshal([]byte(contents), &yamlContents); err != nil {\n\t\treturn \"\", errors.New(\"failed to parse yaml\")\n\t}\n\n\tvar currentNode interface{} = yamlContents\n\tkeys := strings.Split(path, \".\")\n\tfor _, key := range keys {\n\t\tcurrentNode = currentNode.(interfaceMap)[key]\n\t}\n\tcurrentNode.([]interface{})[arrayIndex] = value\n\treplacedContents, err := yaml.Marshal(yamlContents)\n\treturn string(replacedContents), err\n}\n\nfunc findArray(contents string, path string) (_ []interface{}, err error) {\n\tdefer func() {\n\t\terr = recoverFromInterfaceConversion(recover())\n\t}()\n\n\tyamlContents := make(interfaceMap)\n\n\tif err := yaml.Unmarshal([]byte(contents), &yamlContents); err != nil {\n\t\treturn nil, errors.New(\"failed to parse yaml\")\n\t}\n\n\tvar currentNode interface{} = yamlContents\n\tkeys := strings.Split(path, \".\")\n\tfor _, key := range keys {\n\t\tcurrentNode = currentNode.(interfaceMap)[key]\n\t}\n\n\treturn currentNode.([]interface{}), nil\n}\n"
  },
  {
    "path": "src/api/usecases/uaa_credential_replacement_test.go",
    "content": "package usecases_test\n\nimport (\n\t. \"github.com/onsi/ginkgo\"\n\t. \"github.com/onsi/gomega\"\n\t\"api/usecases\"\n)\n\nvar _ = Describe(\"Usecase: UAA Credential Replacement\", func() {\n\n\tvar u *usecases.UaaCredentialReplacement\n\tgoodUaaConfig := `\n---\nname: uaa\nscim:\n  some-key: true\n  users:\n    - admin|admin|other-value\n`\n\texpectedSecuredConfig := `name: uaa\nscim:\n  some-key: true\n  users:\n  - admin|some-password|other-value\n`\n\n\tuaaConfigWithoutScimKey := \"name: uaa\"\n\tuaaConfigWithoutUsersKey := \"scim: {}\"\n\tuaaConfigWithoutAdminUser := `\n---\nscim:\n  users:\n    - other-user|password|other-value\n`\n\n\tBeforeEach(func() {\n\t\tu = &usecases.UaaCredentialReplacement{}\n\t})\n\n\tContext(\"when the config file is in the expected state\", func() {\n\t\tIt(\"replaces the admin password\", func() {\n\t\t\tsecuredConfig, err := u.ReplaceUaaConfigAdminCredentials(goodUaaConfig, \"some-password\")\n\t\t\tExpect(err).NotTo(HaveOccurred())\n\t\t\tExpect(securedConfig).To(Equal(expectedSecuredConfig))\n\t\t})\n\t})\n\n\tContext(\"when the config file is not valid yaml\", func() {\n\t\tIt(\"returns an error\", func() {\n\t\t\tuaaConfig := \"some-bad-yaml\"\n\t\t\t_, err := u.ReplaceUaaConfigAdminCredentials(uaaConfig, \"some-password\")\n\t\t\tExpect(err).To(MatchError(\"failed to parse UAA config file\"))\n\t\t})\n\t})\n\n\tContext(\"When the scim key is missing\", func() {\n\t\tIt(\"returns an error\", func() {\n\t\t\t_, err := u.ReplaceUaaConfigAdminCredentials(uaaConfigWithoutScimKey, \"some-password\")\n\t\t\tExpect(err).To(MatchError(\"failed to parse UAA config file\"))\n\t\t})\n\t})\n\n\tContext(\"When the scim.users key is missing\", func() {\n\t\tIt(\"returns an error\", func() {\n\t\t\t_, err := u.ReplaceUaaConfigAdminCredentials(uaaConfigWithoutUsersKey, \"some-password\")\n\t\t\tExpect(err).To(MatchError(\"failed to parse UAA config file\"))\n\t\t})\n\t})\n\n\tContext(\"when the admin credentials are not in scim.users\", func() {\n\t\tIt(\"returns an error\", func() {\n\t\t\t_, err := u.ReplaceUaaConfigAdminCredentials(uaaConfigWithoutAdminUser, \"some-password\")\n\t\t\tExpect(err).To(MatchError(\"failed to parse UAA config file\"))\n\t\t})\n\t})\n})\n"
  },
  {
    "path": "src/api/usecases/usecase_suite_test.go",
    "content": "package usecases_test\n\nimport (\n\t. \"github.com/onsi/ginkgo\"\n\t. \"github.com/onsi/gomega\"\n\n\t\"testing\"\n)\n\nfunc TestUsecase(t *testing.T) {\n\tRegisterFailHandler(Fail)\n\tRunSpecs(t, \"Usecase Suite\")\n}\n"
  },
  {
    "path": "src/provisioner/.envrc",
    "content": "export GOPATH=$(cd $PWD && cd ../.. && pwd)\nexport PATH=$GOPATH/bin:$PATH\n"
  },
  {
    "path": "src/provisioner/Dockerfile",
    "content": "FROM golang:1.7\n\nRUN apt-get update\nRUN apt-get install -y \\\n    dnsmasq \\\n    file \\\n    host \\\n    iptables \\\n    lsof \\\n    netcat \\\n    nginx \\\n    vim\n\nRUN echo \"server {\\n listen              443 ssl;\\n ssl_certificate     /var/vcap/jobs/gorouter/config/cert.pem;\\n ssl_certificate_key /var/vcap/jobs/gorouter/config/key.pem;\\n}\" > /etc/nginx/conf.d/pcfdev.conf\nRUN mkdir -p /var/vcap/packages/uaa/tomcat/conf\nRUN echo \"<web-app></web-app>\" > /var/vcap/packages/uaa/tomcat/conf/web.xml\nRUN mkdir -p /var/pcfdev/api\nRUN mkdir -p /var/vcap/monit/job\nRUN mkdir -p /var/vcap/jobs/garden/bin\nRUN mkdir -p /var/vcap/jobs/uaa/config\nRUN echo \"exec /var/vcap/packages/garden-linux/bin/garden-linux \\\\ \\n  -dnsServer=some-dns-server \\\\ \\n  1>>\\$LOG_DIR/garden.stdout.log \\\\ \\n  2>>\\$LOG_DIR/garden.stderr.log\" > /var/vcap/jobs/garden/bin/garden_ctl\nRUN echo \"scim:\\n  users:\\n  - admin|admin|scim.write,scim.read,openid\" > /var/vcap/jobs/uaa/config/uaa.yml\nRUN ln -s /bin/true /usr/local/bin/resolvconf\n"
  },
  {
    "path": "src/provisioner/assets/stub_server.go",
    "content": "package main\n\nimport (\n\t\"log\"\n\t\"net/http\"\n\t\"os\"\n)\n\nfunc main() {\n\tport := os.Args[1]\n\n\thttp.HandleFunc(\"/\", func(w http.ResponseWriter, r *http.Request) {\n\t\tw.Write([]byte(\"Response from port \" + port + \" stub server\"))\n\t})\n\n\tif err := http.ListenAndServe(\":\" + port, nil); err != nil {\n\t\tlog.Fatal(\"ListenAndServe: \", err)\n\t}\n}\n"
  },
  {
    "path": "src/provisioner/assets/tomcat-web-hsts-disabled.xml",
    "content": "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n<web-app xmlns=\"http://xmlns.jcp.org/xml/ns/javaee\"\n  xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n  xsi:schemaLocation=\"http://xmlns.jcp.org/xml/ns/javaee\n                      http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd\"\n  version=\"3.1\">\n\n    <servlet>\n        <servlet-name>default</servlet-name>\n        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>\n        <init-param>\n            <param-name>debug</param-name>\n            <param-value>0</param-value>\n        </init-param>\n        <init-param>\n            <param-name>listings</param-name>\n            <param-value>false</param-value>\n        </init-param>\n        <load-on-startup>1</load-on-startup>\n    </servlet>\n\n    <servlet>\n        <servlet-name>jsp</servlet-name>\n        <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>\n        <init-param>\n            <param-name>fork</param-name>\n            <param-value>false</param-value>\n        </init-param>\n        <init-param>\n            <param-name>xpoweredBy</param-name>\n            <param-value>false</param-value>\n        </init-param>\n        <load-on-startup>3</load-on-startup>\n    </servlet>\n\n    <servlet-mapping>\n        <servlet-name>default</servlet-name>\n        <url-pattern>/</url-pattern>\n    </servlet-mapping>\n\n    <servlet-mapping>\n        <servlet-name>jsp</servlet-name>\n        <url-pattern>*.jsp</url-pattern>\n        <url-pattern>*.jspx</url-pattern>\n    </servlet-mapping>\n\n    <filter>\n        <filter-name>httpHeaderSecurity</filter-name>\n        <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>\n        <init-param>\n            <param-name>hstsEnabled</param-name>\n            <param-value>false</param-value>\n        </init-param>\n        <async-supported>true</async-supported>\n    </filter>\n    <filter>\n        <filter-name>some-other-filter</filter-name>\n        <filter-class>some-other-company</filter-class>\n        <init-param>\n            <param-name>some-param</param-name>\n            <param-value>some-value</param-value>\n        </init-param>\n    </filter>\n\n    <session-config>\n        <session-timeout>30</session-timeout>\n    </session-config>\n\n    <mime-mapping>\n        <extension>123</extension>\n        <mime-type>application/vnd.lotus-1-2-3</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>3dml</extension>\n        <mime-type>text/vnd.in3d.3dml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>3ds</extension>\n        <mime-type>image/x-3ds</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>3g2</extension>\n        <mime-type>video/3gpp2</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>3gp</extension>\n        <mime-type>video/3gpp</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>7z</extension>\n        <mime-type>application/x-7z-compressed</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>aab</extension>\n        <mime-type>application/x-authorware-bin</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>aac</extension>\n        <mime-type>audio/x-aac</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>aam</extension>\n        <mime-type>application/x-authorware-map</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>aas</extension>\n        <mime-type>application/x-authorware-seg</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>abs</extension>\n        <mime-type>audio/x-mpeg</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>abw</extension>\n        <mime-type>application/x-abiword</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ac</extension>\n        <mime-type>application/pkix-attr-cert</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>acc</extension>\n        <mime-type>application/vnd.americandynamics.acc</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ace</extension>\n        <mime-type>application/x-ace-compressed</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>acu</extension>\n        <mime-type>application/vnd.acucobol</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>acutc</extension>\n        <mime-type>application/vnd.acucorp</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>adp</extension>\n        <mime-type>audio/adpcm</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>aep</extension>\n        <mime-type>application/vnd.audiograph</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>afm</extension>\n        <mime-type>application/x-font-type1</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>afp</extension>\n        <mime-type>application/vnd.ibm.modcap</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ahead</extension>\n        <mime-type>application/vnd.ahead.space</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ai</extension>\n        <mime-type>application/postscript</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>aif</extension>\n        <mime-type>audio/x-aiff</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>aifc</extension>\n        <mime-type>audio/x-aiff</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>aiff</extension>\n        <mime-type>audio/x-aiff</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>aim</extension>\n        <mime-type>application/x-aim</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>air</extension>\n        <mime-type>application/vnd.adobe.air-application-installer-package+zip</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ait</extension>\n        <mime-type>application/vnd.dvb.ait</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ami</extension>\n        <mime-type>application/vnd.amiga.ami</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>anx</extension>\n        <mime-type>application/annodex</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>apk</extension>\n        <mime-type>application/vnd.android.package-archive</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>appcache</extension>\n        <mime-type>text/cache-manifest</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>application</extension>\n        <mime-type>application/x-ms-application</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>apr</extension>\n        <mime-type>application/vnd.lotus-approach</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>arc</extension>\n        <mime-type>application/x-freearc</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>art</extension>\n        <mime-type>image/x-jg</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>asc</extension>\n        <mime-type>application/pgp-signature</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>asf</extension>\n        <mime-type>video/x-ms-asf</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>asm</extension>\n        <mime-type>text/x-asm</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>aso</extension>\n        <mime-type>application/vnd.accpac.simply.aso</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>asx</extension>\n        <mime-type>video/x-ms-asf</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>atc</extension>\n        <mime-type>application/vnd.acucorp</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>atom</extension>\n        <mime-type>application/atom+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>atomcat</extension>\n        <mime-type>application/atomcat+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>atomsvc</extension>\n        <mime-type>application/atomsvc+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>atx</extension>\n        <mime-type>application/vnd.antix.game-component</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>au</extension>\n        <mime-type>audio/basic</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>avi</extension>\n        <mime-type>video/x-msvideo</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>avx</extension>\n        <mime-type>video/x-rad-screenplay</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>aw</extension>\n        <mime-type>application/applixware</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>axa</extension>\n        <mime-type>audio/annodex</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>axv</extension>\n        <mime-type>video/annodex</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>azf</extension>\n        <mime-type>application/vnd.airzip.filesecure.azf</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>azs</extension>\n        <mime-type>application/vnd.airzip.filesecure.azs</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>azw</extension>\n        <mime-type>application/vnd.amazon.ebook</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>bat</extension>\n        <mime-type>application/x-msdownload</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>bcpio</extension>\n        <mime-type>application/x-bcpio</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>bdf</extension>\n        <mime-type>application/x-font-bdf</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>bdm</extension>\n        <mime-type>application/vnd.syncml.dm+wbxml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>bed</extension>\n        <mime-type>application/vnd.realvnc.bed</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>bh2</extension>\n        <mime-type>application/vnd.fujitsu.oasysprs</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>bin</extension>\n        <mime-type>application/octet-stream</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>blb</extension>\n        <mime-type>application/x-blorb</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>blorb</extension>\n        <mime-type>application/x-blorb</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>bmi</extension>\n        <mime-type>application/vnd.bmi</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>bmp</extension>\n        <mime-type>image/bmp</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>body</extension>\n        <mime-type>text/html</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>book</extension>\n        <mime-type>application/vnd.framemaker</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>box</extension>\n        <mime-type>application/vnd.previewsystems.box</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>boz</extension>\n        <mime-type>application/x-bzip2</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>bpk</extension>\n        <mime-type>application/octet-stream</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>btif</extension>\n        <mime-type>image/prs.btif</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>bz</extension>\n        <mime-type>application/x-bzip</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>bz2</extension>\n        <mime-type>application/x-bzip2</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>c</extension>\n        <mime-type>text/x-c</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>c11amc</extension>\n        <mime-type>application/vnd.cluetrust.cartomobile-config</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>c11amz</extension>\n        <mime-type>application/vnd.cluetrust.cartomobile-config-pkg</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>c4d</extension>\n        <mime-type>application/vnd.clonk.c4group</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>c4f</extension>\n        <mime-type>application/vnd.clonk.c4group</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>c4g</extension>\n        <mime-type>application/vnd.clonk.c4group</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>c4p</extension>\n        <mime-type>application/vnd.clonk.c4group</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>c4u</extension>\n        <mime-type>application/vnd.clonk.c4group</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>cab</extension>\n        <mime-type>application/vnd.ms-cab-compressed</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>caf</extension>\n        <mime-type>audio/x-caf</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>cap</extension>\n        <mime-type>application/vnd.tcpdump.pcap</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>car</extension>\n        <mime-type>application/vnd.curl.car</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>cat</extension>\n        <mime-type>application/vnd.ms-pki.seccat</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>cb7</extension>\n        <mime-type>application/x-cbr</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>cba</extension>\n        <mime-type>application/x-cbr</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>cbr</extension>\n        <mime-type>application/x-cbr</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>cbt</extension>\n        <mime-type>application/x-cbr</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>cbz</extension>\n        <mime-type>application/x-cbr</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>cc</extension>\n        <mime-type>text/x-c</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>cct</extension>\n        <mime-type>application/x-director</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ccxml</extension>\n        <mime-type>application/ccxml+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>cdbcmsg</extension>\n        <mime-type>application/vnd.contact.cmsg</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>cdf</extension>\n        <mime-type>application/x-cdf</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>cdkey</extension>\n        <mime-type>application/vnd.mediastation.cdkey</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>cdmia</extension>\n        <mime-type>application/cdmi-capability</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>cdmic</extension>\n        <mime-type>application/cdmi-container</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>cdmid</extension>\n        <mime-type>application/cdmi-domain</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>cdmio</extension>\n        <mime-type>application/cdmi-object</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>cdmiq</extension>\n        <mime-type>application/cdmi-queue</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>cdx</extension>\n        <mime-type>chemical/x-cdx</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>cdxml</extension>\n        <mime-type>application/vnd.chemdraw+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>cdy</extension>\n        <mime-type>application/vnd.cinderella</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>cer</extension>\n        <mime-type>application/pkix-cert</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>cfs</extension>\n        <mime-type>application/x-cfs-compressed</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>cgm</extension>\n        <mime-type>image/cgm</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>chat</extension>\n        <mime-type>application/x-chat</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>chm</extension>\n        <mime-type>application/vnd.ms-htmlhelp</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>chrt</extension>\n        <mime-type>application/vnd.kde.kchart</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>cif</extension>\n        <mime-type>chemical/x-cif</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>cii</extension>\n        <mime-type>application/vnd.anser-web-certificate-issue-initiation</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>cil</extension>\n        <mime-type>application/vnd.ms-artgalry</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>cla</extension>\n        <mime-type>application/vnd.claymore</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>class</extension>\n        <mime-type>application/java</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>clkk</extension>\n        <mime-type>application/vnd.crick.clicker.keyboard</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>clkp</extension>\n        <mime-type>application/vnd.crick.clicker.palette</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>clkt</extension>\n        <mime-type>application/vnd.crick.clicker.template</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>clkw</extension>\n        <mime-type>application/vnd.crick.clicker.wordbank</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>clkx</extension>\n        <mime-type>application/vnd.crick.clicker</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>clp</extension>\n        <mime-type>application/x-msclip</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>cmc</extension>\n        <mime-type>application/vnd.cosmocaller</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>cmdf</extension>\n        <mime-type>chemical/x-cmdf</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>cml</extension>\n        <mime-type>chemical/x-cml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>cmp</extension>\n        <mime-type>application/vnd.yellowriver-custom-menu</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>cmx</extension>\n        <mime-type>image/x-cmx</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>cod</extension>\n        <mime-type>application/vnd.rim.cod</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>com</extension>\n        <mime-type>application/x-msdownload</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>conf</extension>\n        <mime-type>text/plain</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>cpio</extension>\n        <mime-type>application/x-cpio</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>cpp</extension>\n        <mime-type>text/x-c</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>cpt</extension>\n        <mime-type>application/mac-compactpro</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>crd</extension>\n        <mime-type>application/x-mscardfile</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>crl</extension>\n        <mime-type>application/pkix-crl</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>crt</extension>\n        <mime-type>application/x-x509-ca-cert</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>cryptonote</extension>\n        <mime-type>application/vnd.rig.cryptonote</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>csh</extension>\n        <mime-type>application/x-csh</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>csml</extension>\n        <mime-type>chemical/x-csml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>csp</extension>\n        <mime-type>application/vnd.commonspace</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>css</extension>\n        <mime-type>text/css</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>cst</extension>\n        <mime-type>application/x-director</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>csv</extension>\n        <mime-type>text/csv</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>cu</extension>\n        <mime-type>application/cu-seeme</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>curl</extension>\n        <mime-type>text/vnd.curl</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>cww</extension>\n        <mime-type>application/prs.cww</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>cxt</extension>\n        <mime-type>application/x-director</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>cxx</extension>\n        <mime-type>text/x-c</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>dae</extension>\n        <mime-type>model/vnd.collada+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>daf</extension>\n        <mime-type>application/vnd.mobius.daf</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>dart</extension>\n        <mime-type>application/vnd.dart</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>dataless</extension>\n        <mime-type>application/vnd.fdsn.seed</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>davmount</extension>\n        <mime-type>application/davmount+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>dbk</extension>\n        <mime-type>application/docbook+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>dcr</extension>\n        <mime-type>application/x-director</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>dcurl</extension>\n        <mime-type>text/vnd.curl.dcurl</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>dd2</extension>\n        <mime-type>application/vnd.oma.dd2+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ddd</extension>\n        <mime-type>application/vnd.fujixerox.ddd</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>deb</extension>\n        <mime-type>application/x-debian-package</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>def</extension>\n        <mime-type>text/plain</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>deploy</extension>\n        <mime-type>application/octet-stream</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>der</extension>\n        <mime-type>application/x-x509-ca-cert</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>dfac</extension>\n        <mime-type>application/vnd.dreamfactory</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>dgc</extension>\n        <mime-type>application/x-dgc-compressed</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>dib</extension>\n        <mime-type>image/bmp</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>dic</extension>\n        <mime-type>text/x-c</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>dir</extension>\n        <mime-type>application/x-director</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>dis</extension>\n        <mime-type>application/vnd.mobius.dis</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>dist</extension>\n        <mime-type>application/octet-stream</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>distz</extension>\n        <mime-type>application/octet-stream</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>djv</extension>\n        <mime-type>image/vnd.djvu</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>djvu</extension>\n        <mime-type>image/vnd.djvu</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>dll</extension>\n        <mime-type>application/x-msdownload</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>dmg</extension>\n        <mime-type>application/x-apple-diskimage</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>dmp</extension>\n        <mime-type>application/vnd.tcpdump.pcap</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>dms</extension>\n        <mime-type>application/octet-stream</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>dna</extension>\n        <mime-type>application/vnd.dna</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>doc</extension>\n        <mime-type>application/msword</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>docm</extension>\n        <mime-type>application/vnd.ms-word.document.macroenabled.12</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>docx</extension>\n        <mime-type>application/vnd.openxmlformats-officedocument.wordprocessingml.document</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>dot</extension>\n        <mime-type>application/msword</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>dotm</extension>\n        <mime-type>application/vnd.ms-word.template.macroenabled.12</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>dotx</extension>\n        <mime-type>application/vnd.openxmlformats-officedocument.wordprocessingml.template</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>dp</extension>\n        <mime-type>application/vnd.osgi.dp</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>dpg</extension>\n        <mime-type>application/vnd.dpgraph</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>dra</extension>\n        <mime-type>audio/vnd.dra</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>dsc</extension>\n        <mime-type>text/prs.lines.tag</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>dssc</extension>\n        <mime-type>application/dssc+der</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>dtb</extension>\n        <mime-type>application/x-dtbook+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>dtd</extension>\n        <mime-type>application/xml-dtd</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>dts</extension>\n        <mime-type>audio/vnd.dts</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>dtshd</extension>\n        <mime-type>audio/vnd.dts.hd</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>dump</extension>\n        <mime-type>application/octet-stream</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>dv</extension>\n        <mime-type>video/x-dv</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>dvb</extension>\n        <mime-type>video/vnd.dvb.file</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>dvi</extension>\n        <mime-type>application/x-dvi</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>dwf</extension>\n        <mime-type>model/vnd.dwf</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>dwg</extension>\n        <mime-type>image/vnd.dwg</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>dxf</extension>\n        <mime-type>image/vnd.dxf</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>dxp</extension>\n        <mime-type>application/vnd.spotfire.dxp</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>dxr</extension>\n        <mime-type>application/x-director</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ecelp4800</extension>\n        <mime-type>audio/vnd.nuera.ecelp4800</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ecelp7470</extension>\n        <mime-type>audio/vnd.nuera.ecelp7470</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ecelp9600</extension>\n        <mime-type>audio/vnd.nuera.ecelp9600</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ecma</extension>\n        <mime-type>application/ecmascript</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>edm</extension>\n        <mime-type>application/vnd.novadigm.edm</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>edx</extension>\n        <mime-type>application/vnd.novadigm.edx</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>efif</extension>\n        <mime-type>application/vnd.picsel</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ei6</extension>\n        <mime-type>application/vnd.pg.osasli</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>elc</extension>\n        <mime-type>application/octet-stream</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>emf</extension>\n        <mime-type>application/x-msmetafile</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>eml</extension>\n        <mime-type>message/rfc822</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>emma</extension>\n        <mime-type>application/emma+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>emz</extension>\n        <mime-type>application/x-msmetafile</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>eol</extension>\n        <mime-type>audio/vnd.digital-winds</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>eot</extension>\n        <mime-type>application/vnd.ms-fontobject</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>eps</extension>\n        <mime-type>application/postscript</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>epub</extension>\n        <mime-type>application/epub+zip</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>es3</extension>\n        <mime-type>application/vnd.eszigno3+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>esa</extension>\n        <mime-type>application/vnd.osgi.subsystem</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>esf</extension>\n        <mime-type>application/vnd.epson.esf</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>et3</extension>\n        <mime-type>application/vnd.eszigno3+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>etx</extension>\n        <mime-type>text/x-setext</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>eva</extension>\n        <mime-type>application/x-eva</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>evy</extension>\n        <mime-type>application/x-envoy</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>exe</extension>\n        <mime-type>application/octet-stream</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>exi</extension>\n        <mime-type>application/exi</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ext</extension>\n        <mime-type>application/vnd.novadigm.ext</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ez</extension>\n        <mime-type>application/andrew-inset</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ez2</extension>\n        <mime-type>application/vnd.ezpix-album</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ez3</extension>\n        <mime-type>application/vnd.ezpix-package</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>f</extension>\n        <mime-type>text/x-fortran</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>f4v</extension>\n        <mime-type>video/x-f4v</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>f77</extension>\n        <mime-type>text/x-fortran</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>f90</extension>\n        <mime-type>text/x-fortran</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>fbs</extension>\n        <mime-type>image/vnd.fastbidsheet</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>fcdt</extension>\n        <mime-type>application/vnd.adobe.formscentral.fcdt</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>fcs</extension>\n        <mime-type>application/vnd.isac.fcs</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>fdf</extension>\n        <mime-type>application/vnd.fdf</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>fe_launch</extension>\n        <mime-type>application/vnd.denovo.fcselayout-link</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>fg5</extension>\n        <mime-type>application/vnd.fujitsu.oasysgp</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>fgd</extension>\n        <mime-type>application/x-director</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>fh</extension>\n        <mime-type>image/x-freehand</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>fh4</extension>\n        <mime-type>image/x-freehand</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>fh5</extension>\n        <mime-type>image/x-freehand</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>fh7</extension>\n        <mime-type>image/x-freehand</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>fhc</extension>\n        <mime-type>image/x-freehand</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>fig</extension>\n        <mime-type>application/x-xfig</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>flac</extension>\n        <mime-type>audio/flac</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>fli</extension>\n        <mime-type>video/x-fli</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>flo</extension>\n        <mime-type>application/vnd.micrografx.flo</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>flv</extension>\n        <mime-type>video/x-flv</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>flw</extension>\n        <mime-type>application/vnd.kde.kivio</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>flx</extension>\n        <mime-type>text/vnd.fmi.flexstor</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>fly</extension>\n        <mime-type>text/vnd.fly</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>fm</extension>\n        <mime-type>application/vnd.framemaker</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>fnc</extension>\n        <mime-type>application/vnd.frogans.fnc</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>for</extension>\n        <mime-type>text/x-fortran</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>fpx</extension>\n        <mime-type>image/vnd.fpx</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>frame</extension>\n        <mime-type>application/vnd.framemaker</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>fsc</extension>\n        <mime-type>application/vnd.fsc.weblaunch</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>fst</extension>\n        <mime-type>image/vnd.fst</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ftc</extension>\n        <mime-type>application/vnd.fluxtime.clip</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>fti</extension>\n        <mime-type>application/vnd.anser-web-funds-transfer-initiation</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>fvt</extension>\n        <mime-type>video/vnd.fvt</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>fxp</extension>\n        <mime-type>application/vnd.adobe.fxp</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>fxpl</extension>\n        <mime-type>application/vnd.adobe.fxp</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>fzs</extension>\n        <mime-type>application/vnd.fuzzysheet</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>g2w</extension>\n        <mime-type>application/vnd.geoplan</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>g3</extension>\n        <mime-type>image/g3fax</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>g3w</extension>\n        <mime-type>application/vnd.geospace</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>gac</extension>\n        <mime-type>application/vnd.groove-account</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>gam</extension>\n        <mime-type>application/x-tads</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>gbr</extension>\n        <mime-type>application/rpki-ghostbusters</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>gca</extension>\n        <mime-type>application/x-gca-compressed</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>gdl</extension>\n        <mime-type>model/vnd.gdl</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>geo</extension>\n        <mime-type>application/vnd.dynageo</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>gex</extension>\n        <mime-type>application/vnd.geometry-explorer</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ggb</extension>\n        <mime-type>application/vnd.geogebra.file</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ggt</extension>\n        <mime-type>application/vnd.geogebra.tool</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ghf</extension>\n        <mime-type>application/vnd.groove-help</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>gif</extension>\n        <mime-type>image/gif</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>gim</extension>\n        <mime-type>application/vnd.groove-identity-message</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>gml</extension>\n        <mime-type>application/gml+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>gmx</extension>\n        <mime-type>application/vnd.gmx</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>gnumeric</extension>\n        <mime-type>application/x-gnumeric</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>gph</extension>\n        <mime-type>application/vnd.flographit</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>gpx</extension>\n        <mime-type>application/gpx+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>gqf</extension>\n        <mime-type>application/vnd.grafeq</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>gqs</extension>\n        <mime-type>application/vnd.grafeq</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>gram</extension>\n        <mime-type>application/srgs</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>gramps</extension>\n        <mime-type>application/x-gramps-xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>gre</extension>\n        <mime-type>application/vnd.geometry-explorer</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>grv</extension>\n        <mime-type>application/vnd.groove-injector</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>grxml</extension>\n        <mime-type>application/srgs+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>gsf</extension>\n        <mime-type>application/x-font-ghostscript</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>gtar</extension>\n        <mime-type>application/x-gtar</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>gtm</extension>\n        <mime-type>application/vnd.groove-tool-message</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>gtw</extension>\n        <mime-type>model/vnd.gtw</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>gv</extension>\n        <mime-type>text/vnd.graphviz</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>gxf</extension>\n        <mime-type>application/gxf</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>gxt</extension>\n        <mime-type>application/vnd.geonext</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>gz</extension>\n        <mime-type>application/x-gzip</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>h</extension>\n        <mime-type>text/x-c</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>h261</extension>\n        <mime-type>video/h261</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>h263</extension>\n        <mime-type>video/h263</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>h264</extension>\n        <mime-type>video/h264</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>hal</extension>\n        <mime-type>application/vnd.hal+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>hbci</extension>\n        <mime-type>application/vnd.hbci</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>hdf</extension>\n        <mime-type>application/x-hdf</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>hh</extension>\n        <mime-type>text/x-c</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>hlp</extension>\n        <mime-type>application/winhlp</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>hpgl</extension>\n        <mime-type>application/vnd.hp-hpgl</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>hpid</extension>\n        <mime-type>application/vnd.hp-hpid</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>hps</extension>\n        <mime-type>application/vnd.hp-hps</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>hqx</extension>\n        <mime-type>application/mac-binhex40</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>htc</extension>\n        <mime-type>text/x-component</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>htke</extension>\n        <mime-type>application/vnd.kenameaapp</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>htm</extension>\n        <mime-type>text/html</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>html</extension>\n        <mime-type>text/html</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>hvd</extension>\n        <mime-type>application/vnd.yamaha.hv-dic</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>hvp</extension>\n        <mime-type>application/vnd.yamaha.hv-voice</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>hvs</extension>\n        <mime-type>application/vnd.yamaha.hv-script</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>i2g</extension>\n        <mime-type>application/vnd.intergeo</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>icc</extension>\n        <mime-type>application/vnd.iccprofile</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ice</extension>\n        <mime-type>x-conference/x-cooltalk</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>icm</extension>\n        <mime-type>application/vnd.iccprofile</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ico</extension>\n        <mime-type>image/x-icon</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ics</extension>\n        <mime-type>text/calendar</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ief</extension>\n        <mime-type>image/ief</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ifb</extension>\n        <mime-type>text/calendar</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ifm</extension>\n        <mime-type>application/vnd.shana.informed.formdata</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>iges</extension>\n        <mime-type>model/iges</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>igl</extension>\n        <mime-type>application/vnd.igloader</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>igm</extension>\n        <mime-type>application/vnd.insors.igm</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>igs</extension>\n        <mime-type>model/iges</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>igx</extension>\n        <mime-type>application/vnd.micrografx.igx</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>iif</extension>\n        <mime-type>application/vnd.shana.informed.interchange</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>imp</extension>\n        <mime-type>application/vnd.accpac.simply.imp</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ims</extension>\n        <mime-type>application/vnd.ms-ims</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>in</extension>\n        <mime-type>text/plain</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ink</extension>\n        <mime-type>application/inkml+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>inkml</extension>\n        <mime-type>application/inkml+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>install</extension>\n        <mime-type>application/x-install-instructions</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>iota</extension>\n        <mime-type>application/vnd.astraea-software.iota</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ipfix</extension>\n        <mime-type>application/ipfix</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ipk</extension>\n        <mime-type>application/vnd.shana.informed.package</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>irm</extension>\n        <mime-type>application/vnd.ibm.rights-management</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>irp</extension>\n        <mime-type>application/vnd.irepository.package+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>iso</extension>\n        <mime-type>application/x-iso9660-image</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>itp</extension>\n        <mime-type>application/vnd.shana.informed.formtemplate</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ivp</extension>\n        <mime-type>application/vnd.immervision-ivp</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ivu</extension>\n        <mime-type>application/vnd.immervision-ivu</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>jad</extension>\n        <mime-type>text/vnd.sun.j2me.app-descriptor</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>jam</extension>\n        <mime-type>application/vnd.jam</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>jar</extension>\n        <mime-type>application/java-archive</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>java</extension>\n        <mime-type>text/x-java-source</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>jisp</extension>\n        <mime-type>application/vnd.jisp</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>jlt</extension>\n        <mime-type>application/vnd.hp-jlyt</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>jnlp</extension>\n        <mime-type>application/x-java-jnlp-file</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>joda</extension>\n        <mime-type>application/vnd.joost.joda-archive</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>jpe</extension>\n        <mime-type>image/jpeg</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>jpeg</extension>\n        <mime-type>image/jpeg</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>jpg</extension>\n        <mime-type>image/jpeg</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>jpgm</extension>\n        <mime-type>video/jpm</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>jpgv</extension>\n        <mime-type>video/jpeg</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>jpm</extension>\n        <mime-type>video/jpm</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>js</extension>\n        <mime-type>application/javascript</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>jsf</extension>\n        <mime-type>text/plain</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>json</extension>\n        <mime-type>application/json</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>jsonml</extension>\n        <mime-type>application/jsonml+json</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>jspf</extension>\n        <mime-type>text/plain</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>kar</extension>\n        <mime-type>audio/midi</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>karbon</extension>\n        <mime-type>application/vnd.kde.karbon</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>kfo</extension>\n        <mime-type>application/vnd.kde.kformula</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>kia</extension>\n        <mime-type>application/vnd.kidspiration</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>kml</extension>\n        <mime-type>application/vnd.google-earth.kml+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>kmz</extension>\n        <mime-type>application/vnd.google-earth.kmz</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>kne</extension>\n        <mime-type>application/vnd.kinar</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>knp</extension>\n        <mime-type>application/vnd.kinar</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>kon</extension>\n        <mime-type>application/vnd.kde.kontour</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>kpr</extension>\n        <mime-type>application/vnd.kde.kpresenter</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>kpt</extension>\n        <mime-type>application/vnd.kde.kpresenter</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>kpxx</extension>\n        <mime-type>application/vnd.ds-keypoint</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ksp</extension>\n        <mime-type>application/vnd.kde.kspread</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ktr</extension>\n        <mime-type>application/vnd.kahootz</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ktx</extension>\n        <mime-type>image/ktx</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ktz</extension>\n        <mime-type>application/vnd.kahootz</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>kwd</extension>\n        <mime-type>application/vnd.kde.kword</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>kwt</extension>\n        <mime-type>application/vnd.kde.kword</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>lasxml</extension>\n        <mime-type>application/vnd.las.las+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>latex</extension>\n        <mime-type>application/x-latex</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>lbd</extension>\n        <mime-type>application/vnd.llamagraphics.life-balance.desktop</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>lbe</extension>\n        <mime-type>application/vnd.llamagraphics.life-balance.exchange+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>les</extension>\n        <mime-type>application/vnd.hhe.lesson-player</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>lha</extension>\n        <mime-type>application/x-lzh-compressed</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>link66</extension>\n        <mime-type>application/vnd.route66.link66+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>list</extension>\n        <mime-type>text/plain</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>list3820</extension>\n        <mime-type>application/vnd.ibm.modcap</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>listafp</extension>\n        <mime-type>application/vnd.ibm.modcap</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>lnk</extension>\n        <mime-type>application/x-ms-shortcut</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>log</extension>\n        <mime-type>text/plain</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>lostxml</extension>\n        <mime-type>application/lost+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>lrf</extension>\n        <mime-type>application/octet-stream</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>lrm</extension>\n        <mime-type>application/vnd.ms-lrm</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ltf</extension>\n        <mime-type>application/vnd.frogans.ltf</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>lvp</extension>\n        <mime-type>audio/vnd.lucent.voice</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>lwp</extension>\n        <mime-type>application/vnd.lotus-wordpro</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>lzh</extension>\n        <mime-type>application/x-lzh-compressed</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>m13</extension>\n        <mime-type>application/x-msmediaview</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>m14</extension>\n        <mime-type>application/x-msmediaview</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>m1v</extension>\n        <mime-type>video/mpeg</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>m21</extension>\n        <mime-type>application/mp21</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>m2a</extension>\n        <mime-type>audio/mpeg</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>m2v</extension>\n        <mime-type>video/mpeg</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>m3a</extension>\n        <mime-type>audio/mpeg</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>m3u</extension>\n        <mime-type>audio/x-mpegurl</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>m3u8</extension>\n        <mime-type>application/vnd.apple.mpegurl</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>m4a</extension>\n        <mime-type>audio/mp4</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>m4b</extension>\n        <mime-type>audio/mp4</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>m4r</extension>\n        <mime-type>audio/mp4</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>m4u</extension>\n        <mime-type>video/vnd.mpegurl</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>m4v</extension>\n        <mime-type>video/mp4</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ma</extension>\n        <mime-type>application/mathematica</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mac</extension>\n        <mime-type>image/x-macpaint</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mads</extension>\n        <mime-type>application/mads+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mag</extension>\n        <mime-type>application/vnd.ecowin.chart</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>maker</extension>\n        <mime-type>application/vnd.framemaker</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>man</extension>\n        <mime-type>text/troff</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mar</extension>\n        <mime-type>application/octet-stream</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mathml</extension>\n        <mime-type>application/mathml+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mb</extension>\n        <mime-type>application/mathematica</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mbk</extension>\n        <mime-type>application/vnd.mobius.mbk</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mbox</extension>\n        <mime-type>application/mbox</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mc1</extension>\n        <mime-type>application/vnd.medcalcdata</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mcd</extension>\n        <mime-type>application/vnd.mcd</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mcurl</extension>\n        <mime-type>text/vnd.curl.mcurl</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mdb</extension>\n        <mime-type>application/x-msaccess</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mdi</extension>\n        <mime-type>image/vnd.ms-modi</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>me</extension>\n        <mime-type>text/troff</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mesh</extension>\n        <mime-type>model/mesh</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>meta4</extension>\n        <mime-type>application/metalink4+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>metalink</extension>\n        <mime-type>application/metalink+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mets</extension>\n        <mime-type>application/mets+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mfm</extension>\n        <mime-type>application/vnd.mfmp</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mft</extension>\n        <mime-type>application/rpki-manifest</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mgp</extension>\n        <mime-type>application/vnd.osgeo.mapguide.package</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mgz</extension>\n        <mime-type>application/vnd.proteus.magazine</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mid</extension>\n        <mime-type>audio/midi</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>midi</extension>\n        <mime-type>audio/midi</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mie</extension>\n        <mime-type>application/x-mie</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mif</extension>\n        <mime-type>application/x-mif</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mime</extension>\n        <mime-type>message/rfc822</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mj2</extension>\n        <mime-type>video/mj2</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mjp2</extension>\n        <mime-type>video/mj2</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mk3d</extension>\n        <mime-type>video/x-matroska</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mka</extension>\n        <mime-type>audio/x-matroska</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mks</extension>\n        <mime-type>video/x-matroska</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mkv</extension>\n        <mime-type>video/x-matroska</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mlp</extension>\n        <mime-type>application/vnd.dolby.mlp</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mmd</extension>\n        <mime-type>application/vnd.chipnuts.karaoke-mmd</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mmf</extension>\n        <mime-type>application/vnd.smaf</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mmr</extension>\n        <mime-type>image/vnd.fujixerox.edmics-mmr</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mng</extension>\n        <mime-type>video/x-mng</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mny</extension>\n        <mime-type>application/x-msmoney</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mobi</extension>\n        <mime-type>application/x-mobipocket-ebook</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mods</extension>\n        <mime-type>application/mods+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mov</extension>\n        <mime-type>video/quicktime</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>movie</extension>\n        <mime-type>video/x-sgi-movie</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mp1</extension>\n        <mime-type>audio/mpeg</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mp2</extension>\n        <mime-type>audio/mpeg</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mp21</extension>\n        <mime-type>application/mp21</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mp2a</extension>\n        <mime-type>audio/mpeg</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mp3</extension>\n        <mime-type>audio/mpeg</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mp4</extension>\n        <mime-type>video/mp4</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mp4a</extension>\n        <mime-type>audio/mp4</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mp4s</extension>\n        <mime-type>application/mp4</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mp4v</extension>\n        <mime-type>video/mp4</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mpa</extension>\n        <mime-type>audio/mpeg</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mpc</extension>\n        <mime-type>application/vnd.mophun.certificate</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mpe</extension>\n        <mime-type>video/mpeg</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mpeg</extension>\n        <mime-type>video/mpeg</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mpega</extension>\n        <mime-type>audio/x-mpeg</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mpg</extension>\n        <mime-type>video/mpeg</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mpg4</extension>\n        <mime-type>video/mp4</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mpga</extension>\n        <mime-type>audio/mpeg</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mpkg</extension>\n        <mime-type>application/vnd.apple.installer+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mpm</extension>\n        <mime-type>application/vnd.blueice.multipass</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mpn</extension>\n        <mime-type>application/vnd.mophun.application</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mpp</extension>\n        <mime-type>application/vnd.ms-project</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mpt</extension>\n        <mime-type>application/vnd.ms-project</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mpv2</extension>\n        <mime-type>video/mpeg2</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mpy</extension>\n        <mime-type>application/vnd.ibm.minipay</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mqy</extension>\n        <mime-type>application/vnd.mobius.mqy</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mrc</extension>\n        <mime-type>application/marc</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mrcx</extension>\n        <mime-type>application/marcxml+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ms</extension>\n        <mime-type>text/troff</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mscml</extension>\n        <mime-type>application/mediaservercontrol+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mseed</extension>\n        <mime-type>application/vnd.fdsn.mseed</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mseq</extension>\n        <mime-type>application/vnd.mseq</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>msf</extension>\n        <mime-type>application/vnd.epson.msf</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>msh</extension>\n        <mime-type>model/mesh</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>msi</extension>\n        <mime-type>application/x-msdownload</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>msl</extension>\n        <mime-type>application/vnd.mobius.msl</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>msty</extension>\n        <mime-type>application/vnd.muvee.style</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mts</extension>\n        <mime-type>model/vnd.mts</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mus</extension>\n        <mime-type>application/vnd.musician</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>musicxml</extension>\n        <mime-type>application/vnd.recordare.musicxml+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mvb</extension>\n        <mime-type>application/x-msmediaview</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mwf</extension>\n        <mime-type>application/vnd.mfer</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mxf</extension>\n        <mime-type>application/mxf</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mxl</extension>\n        <mime-type>application/vnd.recordare.musicxml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mxml</extension>\n        <mime-type>application/xv+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mxs</extension>\n        <mime-type>application/vnd.triscape.mxs</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>mxu</extension>\n        <mime-type>video/vnd.mpegurl</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>n-gage</extension>\n        <mime-type>application/vnd.nokia.n-gage.symbian.install</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>n3</extension>\n        <mime-type>text/n3</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>nb</extension>\n        <mime-type>application/mathematica</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>nbp</extension>\n        <mime-type>application/vnd.wolfram.player</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>nc</extension>\n        <mime-type>application/x-netcdf</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ncx</extension>\n        <mime-type>application/x-dtbncx+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>nfo</extension>\n        <mime-type>text/x-nfo</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ngdat</extension>\n        <mime-type>application/vnd.nokia.n-gage.data</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>nitf</extension>\n        <mime-type>application/vnd.nitf</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>nlu</extension>\n        <mime-type>application/vnd.neurolanguage.nlu</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>nml</extension>\n        <mime-type>application/vnd.enliven</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>nnd</extension>\n        <mime-type>application/vnd.noblenet-directory</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>nns</extension>\n        <mime-type>application/vnd.noblenet-sealer</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>nnw</extension>\n        <mime-type>application/vnd.noblenet-web</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>npx</extension>\n        <mime-type>image/vnd.net-fpx</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>nsc</extension>\n        <mime-type>application/x-conference</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>nsf</extension>\n        <mime-type>application/vnd.lotus-notes</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ntf</extension>\n        <mime-type>application/vnd.nitf</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>nzb</extension>\n        <mime-type>application/x-nzb</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>oa2</extension>\n        <mime-type>application/vnd.fujitsu.oasys2</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>oa3</extension>\n        <mime-type>application/vnd.fujitsu.oasys3</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>oas</extension>\n        <mime-type>application/vnd.fujitsu.oasys</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>obd</extension>\n        <mime-type>application/x-msbinder</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>obj</extension>\n        <mime-type>application/x-tgif</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>oda</extension>\n        <mime-type>application/oda</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <!-- OpenDocument Database -->\n        <extension>odb</extension>\n        <mime-type>application/vnd.oasis.opendocument.database</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <!-- OpenDocument Chart -->\n        <extension>odc</extension>\n        <mime-type>application/vnd.oasis.opendocument.chart</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <!-- OpenDocument Formula -->\n        <extension>odf</extension>\n        <mime-type>application/vnd.oasis.opendocument.formula</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>odft</extension>\n        <mime-type>application/vnd.oasis.opendocument.formula-template</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <!-- OpenDocument Drawing -->\n        <extension>odg</extension>\n        <mime-type>application/vnd.oasis.opendocument.graphics</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <!-- OpenDocument Image -->\n        <extension>odi</extension>\n        <mime-type>application/vnd.oasis.opendocument.image</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <!-- OpenDocument Master Document -->\n        <extension>odm</extension>\n        <mime-type>application/vnd.oasis.opendocument.text-master</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <!-- OpenDocument Presentation -->\n        <extension>odp</extension>\n        <mime-type>application/vnd.oasis.opendocument.presentation</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <!-- OpenDocument Spreadsheet -->\n        <extension>ods</extension>\n        <mime-type>application/vnd.oasis.opendocument.spreadsheet</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <!-- OpenDocument Text -->\n        <extension>odt</extension>\n        <mime-type>application/vnd.oasis.opendocument.text</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>oga</extension>\n        <mime-type>audio/ogg</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ogg</extension>\n        <mime-type>audio/ogg</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ogv</extension>\n        <mime-type>video/ogg</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <!-- xiph mime types -->\n        <extension>ogx</extension>\n        <mime-type>application/ogg</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>omdoc</extension>\n        <mime-type>application/omdoc+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>onepkg</extension>\n        <mime-type>application/onenote</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>onetmp</extension>\n        <mime-type>application/onenote</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>onetoc</extension>\n        <mime-type>application/onenote</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>onetoc2</extension>\n        <mime-type>application/onenote</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>opf</extension>\n        <mime-type>application/oebps-package+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>opml</extension>\n        <mime-type>text/x-opml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>oprc</extension>\n        <mime-type>application/vnd.palm</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>org</extension>\n        <mime-type>application/vnd.lotus-organizer</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>osf</extension>\n        <mime-type>application/vnd.yamaha.openscoreformat</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>osfpvg</extension>\n        <mime-type>application/vnd.yamaha.openscoreformat.osfpvg+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>otc</extension>\n        <mime-type>application/vnd.oasis.opendocument.chart-template</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>otf</extension>\n        <mime-type>application/x-font-otf</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <!-- OpenDocument Drawing Template -->\n        <extension>otg</extension>\n        <mime-type>application/vnd.oasis.opendocument.graphics-template</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <!-- HTML Document Template -->\n        <extension>oth</extension>\n        <mime-type>application/vnd.oasis.opendocument.text-web</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>oti</extension>\n        <mime-type>application/vnd.oasis.opendocument.image-template</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <!-- OpenDocument Presentation Template -->\n        <extension>otp</extension>\n        <mime-type>application/vnd.oasis.opendocument.presentation-template</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <!-- OpenDocument Spreadsheet Template -->\n        <extension>ots</extension>\n        <mime-type>application/vnd.oasis.opendocument.spreadsheet-template</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <!-- OpenDocument Text Template -->\n        <extension>ott</extension>\n        <mime-type>application/vnd.oasis.opendocument.text-template</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>oxps</extension>\n        <mime-type>application/oxps</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>oxt</extension>\n        <mime-type>application/vnd.openofficeorg.extension</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>p</extension>\n        <mime-type>text/x-pascal</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>p10</extension>\n        <mime-type>application/pkcs10</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>p12</extension>\n        <mime-type>application/x-pkcs12</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>p7b</extension>\n        <mime-type>application/x-pkcs7-certificates</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>p7c</extension>\n        <mime-type>application/pkcs7-mime</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>p7m</extension>\n        <mime-type>application/pkcs7-mime</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>p7r</extension>\n        <mime-type>application/x-pkcs7-certreqresp</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>p7s</extension>\n        <mime-type>application/pkcs7-signature</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>p8</extension>\n        <mime-type>application/pkcs8</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>pas</extension>\n        <mime-type>text/x-pascal</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>paw</extension>\n        <mime-type>application/vnd.pawaafile</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>pbd</extension>\n        <mime-type>application/vnd.powerbuilder6</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>pbm</extension>\n        <mime-type>image/x-portable-bitmap</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>pcap</extension>\n        <mime-type>application/vnd.tcpdump.pcap</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>pcf</extension>\n        <mime-type>application/x-font-pcf</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>pcl</extension>\n        <mime-type>application/vnd.hp-pcl</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>pclxl</extension>\n        <mime-type>application/vnd.hp-pclxl</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>pct</extension>\n        <mime-type>image/pict</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>pcurl</extension>\n        <mime-type>application/vnd.curl.pcurl</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>pcx</extension>\n        <mime-type>image/x-pcx</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>pdb</extension>\n        <mime-type>application/vnd.palm</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>pdf</extension>\n        <mime-type>application/pdf</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>pfa</extension>\n        <mime-type>application/x-font-type1</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>pfb</extension>\n        <mime-type>application/x-font-type1</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>pfm</extension>\n        <mime-type>application/x-font-type1</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>pfr</extension>\n        <mime-type>application/font-tdpfr</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>pfx</extension>\n        <mime-type>application/x-pkcs12</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>pgm</extension>\n        <mime-type>image/x-portable-graymap</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>pgn</extension>\n        <mime-type>application/x-chess-pgn</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>pgp</extension>\n        <mime-type>application/pgp-encrypted</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>pic</extension>\n        <mime-type>image/pict</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>pict</extension>\n        <mime-type>image/pict</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>pkg</extension>\n        <mime-type>application/octet-stream</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>pki</extension>\n        <mime-type>application/pkixcmp</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>pkipath</extension>\n        <mime-type>application/pkix-pkipath</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>plb</extension>\n        <mime-type>application/vnd.3gpp.pic-bw-large</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>plc</extension>\n        <mime-type>application/vnd.mobius.plc</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>plf</extension>\n        <mime-type>application/vnd.pocketlearn</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>pls</extension>\n        <mime-type>audio/x-scpls</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>pml</extension>\n        <mime-type>application/vnd.ctc-posml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>png</extension>\n        <mime-type>image/png</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>pnm</extension>\n        <mime-type>image/x-portable-anymap</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>pnt</extension>\n        <mime-type>image/x-macpaint</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>portpkg</extension>\n        <mime-type>application/vnd.macports.portpkg</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>pot</extension>\n        <mime-type>application/vnd.ms-powerpoint</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>potm</extension>\n        <mime-type>application/vnd.ms-powerpoint.template.macroenabled.12</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>potx</extension>\n        <mime-type>application/vnd.openxmlformats-officedocument.presentationml.template</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ppam</extension>\n        <mime-type>application/vnd.ms-powerpoint.addin.macroenabled.12</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ppd</extension>\n        <mime-type>application/vnd.cups-ppd</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ppm</extension>\n        <mime-type>image/x-portable-pixmap</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>pps</extension>\n        <mime-type>application/vnd.ms-powerpoint</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ppsm</extension>\n        <mime-type>application/vnd.ms-powerpoint.slideshow.macroenabled.12</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ppsx</extension>\n        <mime-type>application/vnd.openxmlformats-officedocument.presentationml.slideshow</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ppt</extension>\n        <mime-type>application/vnd.ms-powerpoint</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>pptm</extension>\n        <mime-type>application/vnd.ms-powerpoint.presentation.macroenabled.12</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>pptx</extension>\n        <mime-type>application/vnd.openxmlformats-officedocument.presentationml.presentation</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>pqa</extension>\n        <mime-type>application/vnd.palm</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>prc</extension>\n        <mime-type>application/x-mobipocket-ebook</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>pre</extension>\n        <mime-type>application/vnd.lotus-freelance</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>prf</extension>\n        <mime-type>application/pics-rules</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ps</extension>\n        <mime-type>application/postscript</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>psb</extension>\n        <mime-type>application/vnd.3gpp.pic-bw-small</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>psd</extension>\n        <mime-type>image/vnd.adobe.photoshop</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>psf</extension>\n        <mime-type>application/x-font-linux-psf</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>pskcxml</extension>\n        <mime-type>application/pskc+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ptid</extension>\n        <mime-type>application/vnd.pvi.ptid1</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>pub</extension>\n        <mime-type>application/x-mspublisher</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>pvb</extension>\n        <mime-type>application/vnd.3gpp.pic-bw-var</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>pwn</extension>\n        <mime-type>application/vnd.3m.post-it-notes</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>pya</extension>\n        <mime-type>audio/vnd.ms-playready.media.pya</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>pyv</extension>\n        <mime-type>video/vnd.ms-playready.media.pyv</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>qam</extension>\n        <mime-type>application/vnd.epson.quickanime</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>qbo</extension>\n        <mime-type>application/vnd.intu.qbo</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>qfx</extension>\n        <mime-type>application/vnd.intu.qfx</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>qps</extension>\n        <mime-type>application/vnd.publishare-delta-tree</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>qt</extension>\n        <mime-type>video/quicktime</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>qti</extension>\n        <mime-type>image/x-quicktime</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>qtif</extension>\n        <mime-type>image/x-quicktime</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>qwd</extension>\n        <mime-type>application/vnd.quark.quarkxpress</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>qwt</extension>\n        <mime-type>application/vnd.quark.quarkxpress</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>qxb</extension>\n        <mime-type>application/vnd.quark.quarkxpress</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>qxd</extension>\n        <mime-type>application/vnd.quark.quarkxpress</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>qxl</extension>\n        <mime-type>application/vnd.quark.quarkxpress</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>qxt</extension>\n        <mime-type>application/vnd.quark.quarkxpress</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ra</extension>\n        <mime-type>audio/x-pn-realaudio</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ram</extension>\n        <mime-type>audio/x-pn-realaudio</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>rar</extension>\n        <mime-type>application/x-rar-compressed</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ras</extension>\n        <mime-type>image/x-cmu-raster</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>rcprofile</extension>\n        <mime-type>application/vnd.ipunplugged.rcprofile</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>rdf</extension>\n        <mime-type>application/rdf+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>rdz</extension>\n        <mime-type>application/vnd.data-vision.rdz</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>rep</extension>\n        <mime-type>application/vnd.businessobjects</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>res</extension>\n        <mime-type>application/x-dtbresource+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>rgb</extension>\n        <mime-type>image/x-rgb</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>rif</extension>\n        <mime-type>application/reginfo+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>rip</extension>\n        <mime-type>audio/vnd.rip</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ris</extension>\n        <mime-type>application/x-research-info-systems</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>rl</extension>\n        <mime-type>application/resource-lists+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>rlc</extension>\n        <mime-type>image/vnd.fujixerox.edmics-rlc</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>rld</extension>\n        <mime-type>application/resource-lists-diff+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>rm</extension>\n        <mime-type>application/vnd.rn-realmedia</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>rmi</extension>\n        <mime-type>audio/midi</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>rmp</extension>\n        <mime-type>audio/x-pn-realaudio-plugin</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>rms</extension>\n        <mime-type>application/vnd.jcp.javame.midlet-rms</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>rmvb</extension>\n        <mime-type>application/vnd.rn-realmedia-vbr</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>rnc</extension>\n        <mime-type>application/relax-ng-compact-syntax</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>roa</extension>\n        <mime-type>application/rpki-roa</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>roff</extension>\n        <mime-type>text/troff</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>rp9</extension>\n        <mime-type>application/vnd.cloanto.rp9</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>rpss</extension>\n        <mime-type>application/vnd.nokia.radio-presets</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>rpst</extension>\n        <mime-type>application/vnd.nokia.radio-preset</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>rq</extension>\n        <mime-type>application/sparql-query</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>rs</extension>\n        <mime-type>application/rls-services+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>rsd</extension>\n        <mime-type>application/rsd+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>rss</extension>\n        <mime-type>application/rss+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>rtf</extension>\n        <mime-type>application/rtf</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>rtx</extension>\n        <mime-type>text/richtext</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>s</extension>\n        <mime-type>text/x-asm</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>s3m</extension>\n        <mime-type>audio/s3m</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>saf</extension>\n        <mime-type>application/vnd.yamaha.smaf-audio</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>sbml</extension>\n        <mime-type>application/sbml+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>sc</extension>\n        <mime-type>application/vnd.ibm.secure-container</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>scd</extension>\n        <mime-type>application/x-msschedule</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>scm</extension>\n        <mime-type>application/vnd.lotus-screencam</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>scq</extension>\n        <mime-type>application/scvp-cv-request</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>scs</extension>\n        <mime-type>application/scvp-cv-response</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>scurl</extension>\n        <mime-type>text/vnd.curl.scurl</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>sda</extension>\n        <mime-type>application/vnd.stardivision.draw</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>sdc</extension>\n        <mime-type>application/vnd.stardivision.calc</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>sdd</extension>\n        <mime-type>application/vnd.stardivision.impress</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>sdkd</extension>\n        <mime-type>application/vnd.solent.sdkm+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>sdkm</extension>\n        <mime-type>application/vnd.solent.sdkm+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>sdp</extension>\n        <mime-type>application/sdp</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>sdw</extension>\n        <mime-type>application/vnd.stardivision.writer</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>see</extension>\n        <mime-type>application/vnd.seemail</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>seed</extension>\n        <mime-type>application/vnd.fdsn.seed</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>sema</extension>\n        <mime-type>application/vnd.sema</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>semd</extension>\n        <mime-type>application/vnd.semd</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>semf</extension>\n        <mime-type>application/vnd.semf</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ser</extension>\n        <mime-type>application/java-serialized-object</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>setpay</extension>\n        <mime-type>application/set-payment-initiation</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>setreg</extension>\n        <mime-type>application/set-registration-initiation</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>sfd-hdstx</extension>\n        <mime-type>application/vnd.hydrostatix.sof-data</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>sfs</extension>\n        <mime-type>application/vnd.spotfire.sfs</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>sfv</extension>\n        <mime-type>text/x-sfv</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>sgi</extension>\n        <mime-type>image/sgi</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>sgl</extension>\n        <mime-type>application/vnd.stardivision.writer-global</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>sgm</extension>\n        <mime-type>text/sgml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>sgml</extension>\n        <mime-type>text/sgml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>sh</extension>\n        <mime-type>application/x-sh</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>shar</extension>\n        <mime-type>application/x-shar</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>shf</extension>\n        <mime-type>application/shf+xml</mime-type>\n    </mime-mapping>\n    <!--\n    <mime-mapping>\n        <extension>shtml</extension>\n        <mime-type>text/x-server-parsed-html</mime-type>\n    </mime-mapping>\n    -->\n    <mime-mapping>\n        <extension>sid</extension>\n        <mime-type>image/x-mrsid-image</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>sig</extension>\n        <mime-type>application/pgp-signature</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>sil</extension>\n        <mime-type>audio/silk</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>silo</extension>\n        <mime-type>model/mesh</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>sis</extension>\n        <mime-type>application/vnd.symbian.install</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>sisx</extension>\n        <mime-type>application/vnd.symbian.install</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>sit</extension>\n        <mime-type>application/x-stuffit</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>sitx</extension>\n        <mime-type>application/x-stuffitx</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>skd</extension>\n        <mime-type>application/vnd.koan</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>skm</extension>\n        <mime-type>application/vnd.koan</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>skp</extension>\n        <mime-type>application/vnd.koan</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>skt</extension>\n        <mime-type>application/vnd.koan</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>sldm</extension>\n        <mime-type>application/vnd.ms-powerpoint.slide.macroenabled.12</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>sldx</extension>\n        <mime-type>application/vnd.openxmlformats-officedocument.presentationml.slide</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>slt</extension>\n        <mime-type>application/vnd.epson.salt</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>sm</extension>\n        <mime-type>application/vnd.stepmania.stepchart</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>smf</extension>\n        <mime-type>application/vnd.stardivision.math</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>smi</extension>\n        <mime-type>application/smil+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>smil</extension>\n        <mime-type>application/smil+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>smv</extension>\n        <mime-type>video/x-smv</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>smzip</extension>\n        <mime-type>application/vnd.stepmania.package</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>snd</extension>\n        <mime-type>audio/basic</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>snf</extension>\n        <mime-type>application/x-font-snf</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>so</extension>\n        <mime-type>application/octet-stream</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>spc</extension>\n        <mime-type>application/x-pkcs7-certificates</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>spf</extension>\n        <mime-type>application/vnd.yamaha.smaf-phrase</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>spl</extension>\n        <mime-type>application/x-futuresplash</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>spot</extension>\n        <mime-type>text/vnd.in3d.spot</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>spp</extension>\n        <mime-type>application/scvp-vp-response</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>spq</extension>\n        <mime-type>application/scvp-vp-request</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>spx</extension>\n        <mime-type>audio/ogg</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>sql</extension>\n        <mime-type>application/x-sql</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>src</extension>\n        <mime-type>application/x-wais-source</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>srt</extension>\n        <mime-type>application/x-subrip</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>sru</extension>\n        <mime-type>application/sru+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>srx</extension>\n        <mime-type>application/sparql-results+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ssdl</extension>\n        <mime-type>application/ssdl+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>sse</extension>\n        <mime-type>application/vnd.kodak-descriptor</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ssf</extension>\n        <mime-type>application/vnd.epson.ssf</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ssml</extension>\n        <mime-type>application/ssml+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>st</extension>\n        <mime-type>application/vnd.sailingtracker.track</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>stc</extension>\n        <mime-type>application/vnd.sun.xml.calc.template</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>std</extension>\n        <mime-type>application/vnd.sun.xml.draw.template</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>stf</extension>\n        <mime-type>application/vnd.wt.stf</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>sti</extension>\n        <mime-type>application/vnd.sun.xml.impress.template</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>stk</extension>\n        <mime-type>application/hyperstudio</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>stl</extension>\n        <mime-type>application/vnd.ms-pki.stl</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>str</extension>\n        <mime-type>application/vnd.pg.format</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>stw</extension>\n        <mime-type>application/vnd.sun.xml.writer.template</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>sub</extension>\n        <mime-type>text/vnd.dvb.subtitle</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>sus</extension>\n        <mime-type>application/vnd.sus-calendar</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>susp</extension>\n        <mime-type>application/vnd.sus-calendar</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>sv4cpio</extension>\n        <mime-type>application/x-sv4cpio</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>sv4crc</extension>\n        <mime-type>application/x-sv4crc</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>svc</extension>\n        <mime-type>application/vnd.dvb.service</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>svd</extension>\n        <mime-type>application/vnd.svd</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>svg</extension>\n        <mime-type>image/svg+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>svgz</extension>\n        <mime-type>image/svg+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>swa</extension>\n        <mime-type>application/x-director</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>swf</extension>\n        <mime-type>application/x-shockwave-flash</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>swi</extension>\n        <mime-type>application/vnd.aristanetworks.swi</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>sxc</extension>\n        <mime-type>application/vnd.sun.xml.calc</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>sxd</extension>\n        <mime-type>application/vnd.sun.xml.draw</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>sxg</extension>\n        <mime-type>application/vnd.sun.xml.writer.global</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>sxi</extension>\n        <mime-type>application/vnd.sun.xml.impress</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>sxm</extension>\n        <mime-type>application/vnd.sun.xml.math</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>sxw</extension>\n        <mime-type>application/vnd.sun.xml.writer</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>t</extension>\n        <mime-type>text/troff</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>t3</extension>\n        <mime-type>application/x-t3vm-image</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>taglet</extension>\n        <mime-type>application/vnd.mynfc</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>tao</extension>\n        <mime-type>application/vnd.tao.intent-module-archive</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>tar</extension>\n        <mime-type>application/x-tar</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>tcap</extension>\n        <mime-type>application/vnd.3gpp2.tcap</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>tcl</extension>\n        <mime-type>application/x-tcl</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>teacher</extension>\n        <mime-type>application/vnd.smart.teacher</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>tei</extension>\n        <mime-type>application/tei+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>teicorpus</extension>\n        <mime-type>application/tei+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>tex</extension>\n        <mime-type>application/x-tex</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>texi</extension>\n        <mime-type>application/x-texinfo</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>texinfo</extension>\n        <mime-type>application/x-texinfo</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>text</extension>\n        <mime-type>text/plain</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>tfi</extension>\n        <mime-type>application/thraud+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>tfm</extension>\n        <mime-type>application/x-tex-tfm</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>tga</extension>\n        <mime-type>image/x-tga</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>thmx</extension>\n        <mime-type>application/vnd.ms-officetheme</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>tif</extension>\n        <mime-type>image/tiff</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>tiff</extension>\n        <mime-type>image/tiff</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>tmo</extension>\n        <mime-type>application/vnd.tmobile-livetv</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>torrent</extension>\n        <mime-type>application/x-bittorrent</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>tpl</extension>\n        <mime-type>application/vnd.groove-tool-template</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>tpt</extension>\n        <mime-type>application/vnd.trid.tpt</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>tr</extension>\n        <mime-type>text/troff</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>tra</extension>\n        <mime-type>application/vnd.trueapp</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>trm</extension>\n        <mime-type>application/x-msterminal</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>tsd</extension>\n        <mime-type>application/timestamped-data</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>tsv</extension>\n        <mime-type>text/tab-separated-values</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ttc</extension>\n        <mime-type>application/x-font-ttf</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ttf</extension>\n        <mime-type>application/x-font-ttf</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ttl</extension>\n        <mime-type>text/turtle</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>twd</extension>\n        <mime-type>application/vnd.simtech-mindmapper</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>twds</extension>\n        <mime-type>application/vnd.simtech-mindmapper</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>txd</extension>\n        <mime-type>application/vnd.genomatix.tuxedo</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>txf</extension>\n        <mime-type>application/vnd.mobius.txf</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>txt</extension>\n        <mime-type>text/plain</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>u32</extension>\n        <mime-type>application/x-authorware-bin</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>udeb</extension>\n        <mime-type>application/x-debian-package</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ufd</extension>\n        <mime-type>application/vnd.ufdl</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ufdl</extension>\n        <mime-type>application/vnd.ufdl</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ulw</extension>\n        <mime-type>audio/basic</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ulx</extension>\n        <mime-type>application/x-glulx</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>umj</extension>\n        <mime-type>application/vnd.umajin</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>unityweb</extension>\n        <mime-type>application/vnd.unity</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>uoml</extension>\n        <mime-type>application/vnd.uoml+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>uri</extension>\n        <mime-type>text/uri-list</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>uris</extension>\n        <mime-type>text/uri-list</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>urls</extension>\n        <mime-type>text/uri-list</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>ustar</extension>\n        <mime-type>application/x-ustar</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>utz</extension>\n        <mime-type>application/vnd.uiq.theme</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>uu</extension>\n        <mime-type>text/x-uuencode</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>uva</extension>\n        <mime-type>audio/vnd.dece.audio</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>uvd</extension>\n        <mime-type>application/vnd.dece.data</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>uvf</extension>\n        <mime-type>application/vnd.dece.data</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>uvg</extension>\n        <mime-type>image/vnd.dece.graphic</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>uvh</extension>\n        <mime-type>video/vnd.dece.hd</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>uvi</extension>\n        <mime-type>image/vnd.dece.graphic</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>uvm</extension>\n        <mime-type>video/vnd.dece.mobile</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>uvp</extension>\n        <mime-type>video/vnd.dece.pd</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>uvs</extension>\n        <mime-type>video/vnd.dece.sd</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>uvt</extension>\n        <mime-type>application/vnd.dece.ttml+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>uvu</extension>\n        <mime-type>video/vnd.uvvu.mp4</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>uvv</extension>\n        <mime-type>video/vnd.dece.video</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>uvva</extension>\n        <mime-type>audio/vnd.dece.audio</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>uvvd</extension>\n        <mime-type>application/vnd.dece.data</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>uvvf</extension>\n        <mime-type>application/vnd.dece.data</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>uvvg</extension>\n        <mime-type>image/vnd.dece.graphic</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>uvvh</extension>\n        <mime-type>video/vnd.dece.hd</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>uvvi</extension>\n        <mime-type>image/vnd.dece.graphic</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>uvvm</extension>\n        <mime-type>video/vnd.dece.mobile</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>uvvp</extension>\n        <mime-type>video/vnd.dece.pd</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>uvvs</extension>\n        <mime-type>video/vnd.dece.sd</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>uvvt</extension>\n        <mime-type>application/vnd.dece.ttml+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>uvvu</extension>\n        <mime-type>video/vnd.uvvu.mp4</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>uvvv</extension>\n        <mime-type>video/vnd.dece.video</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>uvvx</extension>\n        <mime-type>application/vnd.dece.unspecified</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>uvvz</extension>\n        <mime-type>application/vnd.dece.zip</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>uvx</extension>\n        <mime-type>application/vnd.dece.unspecified</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>uvz</extension>\n        <mime-type>application/vnd.dece.zip</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>vcard</extension>\n        <mime-type>text/vcard</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>vcd</extension>\n        <mime-type>application/x-cdlink</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>vcf</extension>\n        <mime-type>text/x-vcard</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>vcg</extension>\n        <mime-type>application/vnd.groove-vcard</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>vcs</extension>\n        <mime-type>text/x-vcalendar</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>vcx</extension>\n        <mime-type>application/vnd.vcx</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>vis</extension>\n        <mime-type>application/vnd.visionary</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>viv</extension>\n        <mime-type>video/vnd.vivo</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>vob</extension>\n        <mime-type>video/x-ms-vob</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>vor</extension>\n        <mime-type>application/vnd.stardivision.writer</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>vox</extension>\n        <mime-type>application/x-authorware-bin</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>vrml</extension>\n        <mime-type>model/vrml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>vsd</extension>\n        <mime-type>application/vnd.visio</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>vsf</extension>\n        <mime-type>application/vnd.vsf</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>vss</extension>\n        <mime-type>application/vnd.visio</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>vst</extension>\n        <mime-type>application/vnd.visio</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>vsw</extension>\n        <mime-type>application/vnd.visio</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>vtu</extension>\n        <mime-type>model/vnd.vtu</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>vxml</extension>\n        <mime-type>application/voicexml+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>w3d</extension>\n        <mime-type>application/x-director</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>wad</extension>\n        <mime-type>application/x-doom</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>wav</extension>\n        <mime-type>audio/x-wav</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>wax</extension>\n        <mime-type>audio/x-ms-wax</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <!-- Wireless Bitmap -->\n        <extension>wbmp</extension>\n        <mime-type>image/vnd.wap.wbmp</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>wbs</extension>\n        <mime-type>application/vnd.criticaltools.wbs+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>wbxml</extension>\n        <mime-type>application/vnd.wap.wbxml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>wcm</extension>\n        <mime-type>application/vnd.ms-works</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>wdb</extension>\n        <mime-type>application/vnd.ms-works</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>wdp</extension>\n        <mime-type>image/vnd.ms-photo</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>weba</extension>\n        <mime-type>audio/webm</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>webm</extension>\n        <mime-type>video/webm</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>webp</extension>\n        <mime-type>image/webp</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>wg</extension>\n        <mime-type>application/vnd.pmi.widget</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>wgt</extension>\n        <mime-type>application/widget</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>wks</extension>\n        <mime-type>application/vnd.ms-works</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>wm</extension>\n        <mime-type>video/x-ms-wm</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>wma</extension>\n        <mime-type>audio/x-ms-wma</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>wmd</extension>\n        <mime-type>application/x-ms-wmd</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>wmf</extension>\n        <mime-type>application/x-msmetafile</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <!-- WML Source -->\n        <extension>wml</extension>\n        <mime-type>text/vnd.wap.wml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <!-- Compiled WML -->\n        <extension>wmlc</extension>\n        <mime-type>application/vnd.wap.wmlc</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <!-- WML Script Source -->\n        <extension>wmls</extension>\n        <mime-type>text/vnd.wap.wmlscript</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <!-- Compiled WML Script -->\n        <extension>wmlsc</extension>\n        <mime-type>application/vnd.wap.wmlscriptc</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>wmv</extension>\n        <mime-type>video/x-ms-wmv</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>wmx</extension>\n        <mime-type>video/x-ms-wmx</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>wmz</extension>\n        <mime-type>application/x-msmetafile</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>woff</extension>\n        <mime-type>application/x-font-woff</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>wpd</extension>\n        <mime-type>application/vnd.wordperfect</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>wpl</extension>\n        <mime-type>application/vnd.ms-wpl</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>wps</extension>\n        <mime-type>application/vnd.ms-works</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>wqd</extension>\n        <mime-type>application/vnd.wqd</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>wri</extension>\n        <mime-type>application/x-mswrite</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>wrl</extension>\n        <mime-type>model/vrml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>wsdl</extension>\n        <mime-type>application/wsdl+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>wspolicy</extension>\n        <mime-type>application/wspolicy+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>wtb</extension>\n        <mime-type>application/vnd.webturbo</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>wvx</extension>\n        <mime-type>video/x-ms-wvx</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>x32</extension>\n        <mime-type>application/x-authorware-bin</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>x3d</extension>\n        <mime-type>model/x3d+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>x3db</extension>\n        <mime-type>model/x3d+binary</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>x3dbz</extension>\n        <mime-type>model/x3d+binary</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>x3dv</extension>\n        <mime-type>model/x3d+vrml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>x3dvz</extension>\n        <mime-type>model/x3d+vrml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>x3dz</extension>\n        <mime-type>model/x3d+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xaml</extension>\n        <mime-type>application/xaml+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xap</extension>\n        <mime-type>application/x-silverlight-app</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xar</extension>\n        <mime-type>application/vnd.xara</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xbap</extension>\n        <mime-type>application/x-ms-xbap</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xbd</extension>\n        <mime-type>application/vnd.fujixerox.docuworks.binder</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xbm</extension>\n        <mime-type>image/x-xbitmap</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xdf</extension>\n        <mime-type>application/xcap-diff+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xdm</extension>\n        <mime-type>application/vnd.syncml.dm+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xdp</extension>\n        <mime-type>application/vnd.adobe.xdp+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xdssc</extension>\n        <mime-type>application/dssc+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xdw</extension>\n        <mime-type>application/vnd.fujixerox.docuworks</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xenc</extension>\n        <mime-type>application/xenc+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xer</extension>\n        <mime-type>application/patch-ops-error+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xfdf</extension>\n        <mime-type>application/vnd.adobe.xfdf</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xfdl</extension>\n        <mime-type>application/vnd.xfdl</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xht</extension>\n        <mime-type>application/xhtml+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xhtml</extension>\n        <mime-type>application/xhtml+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xhvml</extension>\n        <mime-type>application/xv+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xif</extension>\n        <mime-type>image/vnd.xiff</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xla</extension>\n        <mime-type>application/vnd.ms-excel</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xlam</extension>\n        <mime-type>application/vnd.ms-excel.addin.macroenabled.12</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xlc</extension>\n        <mime-type>application/vnd.ms-excel</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xlf</extension>\n        <mime-type>application/x-xliff+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xlm</extension>\n        <mime-type>application/vnd.ms-excel</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xls</extension>\n        <mime-type>application/vnd.ms-excel</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xlsb</extension>\n        <mime-type>application/vnd.ms-excel.sheet.binary.macroenabled.12</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xlsm</extension>\n        <mime-type>application/vnd.ms-excel.sheet.macroenabled.12</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xlsx</extension>\n        <mime-type>application/vnd.openxmlformats-officedocument.spreadsheetml.sheet</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xlt</extension>\n        <mime-type>application/vnd.ms-excel</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xltm</extension>\n        <mime-type>application/vnd.ms-excel.template.macroenabled.12</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xltx</extension>\n        <mime-type>application/vnd.openxmlformats-officedocument.spreadsheetml.template</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xlw</extension>\n        <mime-type>application/vnd.ms-excel</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xm</extension>\n        <mime-type>audio/xm</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xml</extension>\n        <mime-type>application/xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xo</extension>\n        <mime-type>application/vnd.olpc-sugar</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xop</extension>\n        <mime-type>application/xop+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xpi</extension>\n        <mime-type>application/x-xpinstall</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xpl</extension>\n        <mime-type>application/xproc+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xpm</extension>\n        <mime-type>image/x-xpixmap</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xpr</extension>\n        <mime-type>application/vnd.is-xpr</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xps</extension>\n        <mime-type>application/vnd.ms-xpsdocument</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xpw</extension>\n        <mime-type>application/vnd.intercon.formnet</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xpx</extension>\n        <mime-type>application/vnd.intercon.formnet</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xsl</extension>\n        <mime-type>application/xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xslt</extension>\n        <mime-type>application/xslt+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xsm</extension>\n        <mime-type>application/vnd.syncml+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xspf</extension>\n        <mime-type>application/xspf+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xul</extension>\n        <mime-type>application/vnd.mozilla.xul+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xvm</extension>\n        <mime-type>application/xv+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xvml</extension>\n        <mime-type>application/xv+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xwd</extension>\n        <mime-type>image/x-xwindowdump</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xyz</extension>\n        <mime-type>chemical/x-xyz</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>xz</extension>\n        <mime-type>application/x-xz</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>yang</extension>\n        <mime-type>application/yang</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>yin</extension>\n        <mime-type>application/yin+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>z</extension>\n        <mime-type>application/x-compress</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>Z</extension>\n        <mime-type>application/x-compress</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>z1</extension>\n        <mime-type>application/x-zmachine</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>z2</extension>\n        <mime-type>application/x-zmachine</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>z3</extension>\n        <mime-type>application/x-zmachine</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>z4</extension>\n        <mime-type>application/x-zmachine</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>z5</extension>\n        <mime-type>application/x-zmachine</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>z6</extension>\n        <mime-type>application/x-zmachine</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>z7</extension>\n        <mime-type>application/x-zmachine</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>z8</extension>\n        <mime-type>application/x-zmachine</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>zaz</extension>\n        <mime-type>application/vnd.zzazz.deck+xml</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>zip</extension>\n        <mime-type>application/zip</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>zir</extension>\n        <mime-type>application/vnd.zul</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>zirz</extension>\n        <mime-type>application/vnd.zul</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>zmm</extension>\n        <mime-type>application/vnd.handheld-entertainment+xml</mime-type>\n    </mime-mapping>\n\n    <welcome-file-list>\n        <welcome-file>index.html</welcome-file>\n        <welcome-file>index.htm</welcome-file>\n        <welcome-file>index.jsp</welcome-file>\n    </welcome-file-list>\n\n</web-app>\n"
  },
  {
    "path": "src/provisioner/assets/tomcat-web-invalid.xml",
    "content": "some-bad-xml\n"
  },
  {
    "path": "src/provisioner/assets/tomcat-web.xml",
    "content": "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n\n<web-app xmlns=\"http://xmlns.jcp.org/xml/ns/javaee\"\n  xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n  xsi:schemaLocation=\"http://xmlns.jcp.org/xml/ns/javaee\n                      http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd\"\n  version=\"3.1\">\n\n    <servlet>\n        <servlet-name>default</servlet-name>\n        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>\n        <init-param>\n            <param-name>debug</param-name>\n            <param-value>0</param-value>\n        </init-param>\n        <init-param>\n            <param-name>listings</param-name>\n            <param-value>false</param-value>\n        </init-param>\n        <load-on-startup>1</load-on-startup>\n    </servlet>\n\n    <servlet>\n        <servlet-name>jsp</servlet-name>\n        <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>\n        <init-param>\n            <param-name>fork</param-name>\n            <param-value>false</param-value>\n        </init-param>\n        <init-param>\n            <param-name>xpoweredBy</param-name>\n            <param-value>false</param-value>\n        </init-param>\n        <load-on-startup>3</load-on-startup>\n    </servlet>\n\n    <servlet-mapping>\n        <servlet-name>default</servlet-name>\n        <url-pattern>/</url-pattern>\n    </servlet-mapping>\n\n    <servlet-mapping>\n        <servlet-name>jsp</servlet-name>\n        <url-pattern>*.jsp</url-pattern>\n        <url-pattern>*.jspx</url-pattern>\n    </servlet-mapping>\n\n    <session-config>\n        <session-timeout>30</session-timeout>\n    </session-config>\n\n    <mime-mapping>\n        <extension>123</extension>\n        <mime-type>application/vnd.lotus-1-2-3</mime-type>\n    </mime-mapping>\n    <mime-mapping>\n        <extension>3dml</extension>\n        <mime-type>text/vnd.in3d.3dml</mime-type>\n    </mime-mapping>\n\n    <welcome-file-list>\n        <welcome-file>index.html</welcome-file>\n        <welcome-file>index.htm</welcome-file>\n        <welcome-file>index.jsp</welcome-file>\n    </welcome-file-list>\n\n</web-app>\n"
  },
  {
    "path": "src/provisioner/bin/generate-mocks",
    "content": "#!/bin/bash\n\npcfdev_dir=$(cd `dirname $0` && cd .. && pwd)\nmocks_dirs=$(go list -f '{{.Dir}}' provisioner/... | grep -v /vendor/ | grep '/mocks$')\nif [[ -n \"$mocks_dirs\" ]]; then\n  find $mocks_dirs -name \"*.go\" -exec rm {} \\;\nfi\n\ngo install provisioner/vendor/github.com/golang/mock/mockgen\ngo generate $(go list provisioner/... | grep -v /vendor/)\n"
  },
  {
    "path": "src/provisioner/bin/tests",
    "content": "#!/bin/bash\n\ndir=$(cd `dirname $0` && cd .. && pwd)\n\ngo get github.com/onsi/ginkgo/ginkgo\ngo get github.com/onsi/gomega\nginkgo \"$@\" -r $dir\n"
  },
  {
    "path": "src/provisioner/cert/cert.go",
    "content": "package cert\n\nimport (\n\t\"bytes\"\n\t\"crypto/rand\"\n\t\"crypto/rsa\"\n\t\"crypto/x509\"\n\t\"crypto/x509/pkix\"\n\t\"encoding/pem\"\n\t\"math/big\"\n\t\"time\"\n)\n\ntype Cert struct{}\n\nfunc (c *Cert) GenerateCerts(domain string) ([]byte, []byte, []byte, []byte, error) {\n\tcaPrivateKey, err := rsa.GenerateKey(rand.Reader, 2048)\n\tif err != nil {\n\t\treturn nil, nil, nil, nil, err\n\t}\n\tencodedCAPrivateKey := new(bytes.Buffer)\n\tif err := pem.Encode(encodedCAPrivateKey, &pem.Block{Type: \"RSA PRIVATE KEY\", Bytes: x509.MarshalPKCS1PrivateKey(caPrivateKey)}); err != nil {\n\t\treturn nil, nil, nil, nil, err\n\t}\n\n\tcaTemplate := c.generateTemplate(domain, true)\n\tencodedCACertificate, err := c.generateCert(caTemplate, caTemplate, &caPrivateKey.PublicKey, caPrivateKey)\n\tif err != nil {\n\t\treturn nil, nil, nil, nil, err\n\t}\n\n\tprivateKey, err := rsa.GenerateKey(rand.Reader, 2048)\n\tif err != nil {\n\t\treturn nil, nil, nil, nil, err\n\t}\n\tencodedPrivateKey := new(bytes.Buffer)\n\tif err := pem.Encode(encodedPrivateKey, &pem.Block{Type: \"RSA PRIVATE KEY\", Bytes: x509.MarshalPKCS1PrivateKey(privateKey)}); err != nil {\n\t\treturn nil, nil, nil, nil, err\n\t}\n\n\ttemplate := c.generateTemplate(domain, false)\n\tencodedCertificate, err := c.generateCert(template, caTemplate, &privateKey.PublicKey, caPrivateKey)\n\tif err != nil {\n\t\treturn nil, nil, nil, nil, err\n\t}\n\n\treturn encodedCertificate, encodedPrivateKey.Bytes(), encodedCACertificate, encodedCAPrivateKey.Bytes(), nil\n}\n\nfunc (c *Cert) generateCert(template, parentTemplate *x509.Certificate, publicKey *rsa.PublicKey, privateKey *rsa.PrivateKey) ([]byte, error) {\n\tcertificate, err := x509.CreateCertificate(rand.Reader, template, parentTemplate, publicKey, privateKey)\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tencodedCertificate := new(bytes.Buffer)\n\tif err := pem.Encode(encodedCertificate, &pem.Block{Type: \"CERTIFICATE\", Bytes: certificate}); err != nil {\n\t\treturn nil, err\n\t}\n\n\treturn encodedCertificate.Bytes(), nil\n}\n\nfunc (c *Cert) generateTemplate(domain string, isCA bool) *x509.Certificate {\n\tnotBefore := time.Now().Add(-24 * time.Hour)\n\tnotAfter := notBefore.Add(10 * 365 * 24 * time.Hour)\n\n\ttemplate := &x509.Certificate{\n\t\tDNSNames: []string{\n\t\t\tdomain,\n\t\t\t\"*.\" + domain,\n\t\t\t\"*.login.\" + domain,\n\t\t\t\"*.uaa.\" + domain,\n\t\t},\n\t\tEmailAddresses: []string{\"pcfdev-eng@pivotal.io\"},\n\t\tNotBefore:      notBefore,\n\t\tNotAfter:       notAfter,\n\t\tSerialNumber:   big.NewInt(1),\n\t\tSubject: pkix.Name{\n\t\t\tCommonName:         domain + \" \" + time.Now().Format(time.RFC3339),\n\t\t\tCountry:            []string{\"US\"},\n\t\t\tLocality:           []string{\"New York\"},\n\t\t\tOrganization:       []string{\"Cloud Foundry\"},\n\t\t\tOrganizationalUnit: []string{\"PCF Dev\"},\n\t\t\tProvince:           []string{\"New York\"},\n\t\t},\n\t}\n\n\tif isCA {\n\t\ttemplate.Subject.Organization = []string{\"Cloud Foundry CA\"}\n\t\ttemplate.BasicConstraintsValid = true\n\t\ttemplate.IsCA = true\n\t}\n\n\treturn template\n}\n"
  },
  {
    "path": "src/provisioner/cert/cert_suite_test.go",
    "content": "package cert_test\n\nimport (\n\t. \"github.com/onsi/ginkgo\"\n\t. \"github.com/onsi/gomega\"\n\n\t\"testing\"\n)\n\nfunc TestCert(t *testing.T) {\n\tRegisterFailHandler(Fail)\n\tRunSpecs(t, \"Cert Suite\")\n}\n"
  },
  {
    "path": "src/provisioner/cert/cert_test.go",
    "content": "package cert_test\n\nimport (\n\t\"crypto/tls\"\n\t\"crypto/x509\"\n\t\"math/big\"\n\t\"provisioner/cert\"\n\t\"time\"\n\n\t. \"github.com/onsi/ginkgo\"\n\t. \"github.com/onsi/gomega\"\n)\n\nvar _ = Describe(\"Cert\", func() {\n\tDescribe(\"#GenerateCert\", func() {\n\t\tvar c *cert.Cert\n\n\t\tBeforeEach(func() {\n\t\t\tc = &cert.Cert{}\n\t\t})\n\n\t\tIt(\"should generate a certificate and private key signed by the CA\", func() {\n\t\t\tcertificateBytes, privateKeyBytes, caCertificateBytes, caPrivateKeyBytes, err := c.GenerateCerts(\"some-domain\")\n\t\t\tExpect(err).NotTo(HaveOccurred())\n\n\t\t\tyesterday := time.Now().Add(-24 * time.Hour)\n\t\t\ttenYearsFromYesterday := yesterday.Add(10 * 365 * 24 * time.Hour)\n\n\t\t\tcertificate := parseCertificate(certificateBytes, privateKeyBytes)\n\t\t\tcaCertificate := parseCertificate(caCertificateBytes, caPrivateKeyBytes)\n\n\t\t\tExpect(certificate.DNSNames).To(Equal([]string{\n\t\t\t\t\"some-domain\",\n\t\t\t\t\"*.some-domain\",\n\t\t\t\t\"*.login.some-domain\",\n\t\t\t\t\"*.uaa.some-domain\",\n\t\t\t}))\n\t\t\tExpect(certificate.EmailAddresses).To(Equal([]string{\"pcfdev-eng@pivotal.io\"}))\n\t\t\tExpect(certificate.Issuer).To(Equal(caCertificate.Subject))\n\t\t\tExpect(certificate.NotBefore).To(BeTemporally(\"~\", yesterday, time.Minute))\n\t\t\tExpect(certificate.NotAfter).To(BeTemporally(\"~\", tenYearsFromYesterday, time.Minute))\n\t\t\tExpect(certificate.SerialNumber).To(Equal(big.NewInt(1)))\n\t\t\tExpect(certificate.Subject.CommonName).To(ContainSubstring(\"some-domain\"))\n\t\t\tExpect(certificate.Subject.Country).To(Equal([]string{\"US\"}))\n\t\t\tExpect(certificate.Subject.Locality).To(Equal([]string{\"New York\"}))\n\t\t\tExpect(certificate.Subject.Organization).To(Equal([]string{\"Cloud Foundry\"}))\n\t\t\tExpect(certificate.Subject.OrganizationalUnit).To(Equal([]string{\"PCF Dev\"}))\n\t\t\tExpect(certificate.Subject.Province).To(Equal([]string{\"New York\"}))\n\t\t\tExpect(certificate.IsCA).To(BeFalse())\n\t\t})\n\n\t\tContext(\"CA Cert\", func() {\n\t\t\tIt(\"should be a CA Cert\", func() {\n\t\t\t\t_, _, caCertificateBytes, caPrivateKeyBytes, err := c.GenerateCerts(\"some-domain\")\n\t\t\t\tExpect(err).NotTo(HaveOccurred())\n\n\t\t\t\tcertificate := parseCertificate(caCertificateBytes, caPrivateKeyBytes)\n\t\t\t\tExpect(certificate.IsCA).To(BeTrue())\n\t\t\t})\n\t\t})\n\t})\n})\n\nfunc parseCertificate(certificateBytes []byte, privateKeyBytes []byte) *x509.Certificate {\n\tcertificate, err := tls.X509KeyPair(certificateBytes, privateKeyBytes)\n\tExpect(err).NotTo(HaveOccurred())\n\tcertificates, err := x509.ParseCertificates(certificate.Certificate[0])\n\tExpect(err).NotTo(HaveOccurred())\n\treturn certificates[0]\n}\n"
  },
  {
    "path": "src/provisioner/fs/fs.go",
    "content": "package fs\n\nimport (\n\t\"fmt\"\n\t\"io\"\n\t\"io/ioutil\"\n\t\"os\"\n)\n\nconst (\n\tFileModeRootReadWrite           = 0644\n\tFileModeRootReadWriteExecutable = 0744\n)\n\ntype FS struct{}\n\nfunc (fs *FS) Exists(path string) (bool, error) {\n\tif _, err := os.Stat(path); err != nil {\n\t\tif os.IsNotExist(err) {\n\t\t\treturn false, nil\n\t\t}\n\t\treturn false, err\n\t}\n\treturn true, nil\n}\n\nfunc (f *FS) Read(path string) ([]byte, error) {\n\treturn ioutil.ReadFile(path)\n}\n\nfunc (f *FS) Mkdir(path string) error {\n\tif err := os.MkdirAll(path, 0755); err != nil {\n\t\treturn fmt.Errorf(\"failed to create directory: %s\", err)\n\t}\n\n\treturn nil\n}\n\nfunc (f *FS) Write(path string, contents io.Reader, perm os.FileMode) error {\n\tfile, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, perm)\n\tif err != nil {\n\t\treturn fmt.Errorf(\"failed to open file: %s\", err)\n\t}\n\tdefer file.Close()\n\n\tif _, err := io.Copy(file, contents); err != nil {\n\t\treturn fmt.Errorf(\"failed to copy contents to file: %s\", err)\n\t}\n\n\treturn nil\n}\n"
  },
  {
    "path": "src/provisioner/fs/fs_suite_test.go",
    "content": "package fs_test\n\nimport (\n\t. \"github.com/onsi/ginkgo\"\n\t. \"github.com/onsi/gomega\"\n\n\t\"testing\"\n)\n\nfunc TestFS(t *testing.T) {\n\tRegisterFailHandler(Fail)\n\tRunSpecs(t, \"FS Suite\")\n}\n"
  },
  {
    "path": "src/provisioner/fs/fs_test.go",
    "content": "package fs_test\n\nimport (\n\t\"io/ioutil\"\n\t\"os\"\n\t\"path/filepath\"\n\t\"provisioner/fs\"\n\t\"strings\"\n\n\t. \"github.com/onsi/ginkgo\"\n\t. \"github.com/onsi/gomega\"\n)\n\nvar _ = Describe(\"FS\", func() {\n\tvar (\n\t\tf       *fs.FS\n\t\ttempDir string\n\t)\n\n\tBeforeEach(func() {\n\t\tf = &fs.FS{}\n\t\tvar err error\n\t\ttempDir, err = ioutil.TempDir(\"\", \"pcfdev-fs\")\n\t\tExpect(err).NotTo(HaveOccurred())\n\t})\n\n\tAfterEach(func() {\n\t\tos.RemoveAll(tempDir)\n\t})\n\n\tDescribe(\"#Mkdir\", func() {\n\t\tContext(\"when the directory does not exist\", func() {\n\t\t\tIt(\"should create the directory\", func() {\n\t\t\t\tExpect(f.Mkdir(filepath.Join(tempDir, \"some-dir\"))).To(Succeed())\n\t\t\t\t_, err := os.Stat(filepath.Join(tempDir, \"some-dir\"))\n\t\t\t\tExpect(err).NotTo(HaveOccurred())\n\t\t\t})\n\t\t})\n\n\t\tContext(\"when the directory already exists\", func() {\n\t\t\tBeforeEach(func() {\n\t\t\t\tExpect(os.Mkdir(filepath.Join(tempDir, \"some-dir\"), 0755)).To(Succeed())\n\t\t\t})\n\n\t\t\tIt(\"should do nothing\", func() {\n\t\t\t\tExpect(f.Mkdir(filepath.Join(tempDir, \"some-dir\"))).To(Succeed())\n\t\t\t\t_, err := os.Stat(filepath.Join(tempDir, \"some-dir\"))\n\t\t\t\tExpect(err).NotTo(HaveOccurred())\n\t\t\t})\n\t\t})\n\t})\n\n\tDescribe(\"#Write\", func() {\n\t\tContext(\"when path is valid\", func() {\n\t\t\tIt(\"should create a file with path and writes contents\", func() {\n\t\t\t\treadCloser := ioutil.NopCloser(strings.NewReader(\"some-contents\"))\n\t\t\t\tExpect(f.Write(filepath.Join(tempDir, \"some-file\"), readCloser, os.FileMode(fs.FileModeRootReadWrite))).To(Succeed())\n\t\t\t\tdata, err := ioutil.ReadFile(filepath.Join(tempDir, \"some-file\"))\n\t\t\t\tExpect(err).NotTo(HaveOccurred())\n\t\t\t\tExpect(string(data)).To(Equal(\"some-contents\"))\n\t\t\t})\n\t\t})\n\n\t\tContext(\"when file exists already\", func() {\n\t\t\tBeforeEach(func() {\n\t\t\t\tExpect(f.Write(filepath.Join(tempDir, \"some-file\"), ioutil.NopCloser(strings.NewReader(\"some-content-that-is-really-long\")), os.FileMode(fs.FileModeRootReadWrite))).To(Succeed())\n\t\t\t})\n\n\t\t\tIt(\"should overwrite the file\", func() {\n\t\t\t\treadCloser := ioutil.NopCloser(strings.NewReader(\"some-other-contents\"))\n\t\t\t\tExpect(f.Write(filepath.Join(tempDir, \"some-file\"), readCloser, os.FileMode(fs.FileModeRootReadWrite))).To(Succeed())\n\t\t\t\tdata, err := ioutil.ReadFile(filepath.Join(tempDir, \"some-file\"))\n\t\t\t\tExpect(err).NotTo(HaveOccurred())\n\n\t\t\t\tExpect(string(data)).To(Equal(\"some-other-contents\"))\n\t\t\t})\n\t\t})\n\n\t\tContext(\"when path is invalid\", func() {\n\t\t\tIt(\"should return an error\", func() {\n\t\t\t\tExpect(f.Write(filepath.Join(\"some-bad-dir\", \"some-other-file\"), nil, os.FileMode(fs.FileModeRootReadWrite))).To(MatchError(ContainSubstring(\"failed to open file:\")))\n\t\t\t})\n\t\t})\n\t})\n\n\tDescribe(\"#Read\", func() {\n\t\tContext(\"when the file exists\", func() {\n\t\t\tIt(\"should return the contents the file\", func() {\n\t\t\t\tExpect(ioutil.WriteFile(filepath.Join(tempDir, \"some-file\"), []byte(\"some-contents\"), 0644)).To(Succeed())\n\t\t\t\tExpect(f.Read(filepath.Join(tempDir, \"some-file\"))).To(Equal([]byte(\"some-contents\")))\n\t\t\t})\n\t\t})\n\t})\n\n\tDescribe(\"#Exists\", func() {\n\t\tContext(\"when the file exists\", func() {\n\t\t\tBeforeEach(func() {\n\t\t\t\t_, err := os.Create(filepath.Join(tempDir, \"some-file\"))\n\t\t\t\tExpect(err).NotTo(HaveOccurred())\n\t\t\t})\n\n\t\t\tIt(\"should return true\", func() {\n\t\t\t\tExpect(f.Exists(filepath.Join(tempDir, \"some-file\"))).To(BeTrue())\n\t\t\t})\n\t\t})\n\n\t\tContext(\"when the file does not exist\", func() {\n\t\t\tIt(\"should return false\", func() {\n\t\t\t\tExpect(f.Exists(filepath.Join(tempDir, \"some-bad-file\"))).To(BeFalse())\n\t\t\t})\n\t\t})\n\t})\n})\n"
  },
  {
    "path": "src/provisioner/main.go",
    "content": "package main\n\nimport (\n\t\"fmt\"\n\t\"io/ioutil\"\n\t\"os\"\n\t\"os/exec\"\n\t\"provisioner/cert\"\n\t\"provisioner/fs\"\n\t\"provisioner/provisioner\"\n\t\"provisioner/provisioner/commands\"\n\t\"strconv\"\n\t\"syscall\"\n\t\"time\"\n)\n\nvar (\n\tprovisionScriptPath = \"/var/pcfdev/run\"\n\ttimeoutInSeconds    = \"3600\"\n\tdistro              = \"pcf\"\n)\n\nfunc main() {\n\tcheckArgCount()\n\n\tprovisionTimeout, err := strconv.Atoi(timeoutInSeconds)\n\tif err != nil {\n\t\tfmt.Printf(\"Error: %s.\", err)\n\t\tos.Exit(1)\n\t}\n\n\tsilentCommandRunner := &provisioner.ConcreteCmdRunner{\n\t\tStdout:  ioutil.Discard,\n\t\tStderr:  ioutil.Discard,\n\t\tTimeout: time.Duration(provisionTimeout) * time.Second,\n\t}\n\tp := &provisioner.Provisioner{\n\t\tCert: &cert.Cert{},\n\t\tCmdRunner: &provisioner.ConcreteCmdRunner{\n\t\t\tStdout:  os.Stdout,\n\t\t\tStderr:  os.Stderr,\n\t\t\tTimeout: time.Duration(provisionTimeout) * time.Second,\n\t\t},\n\t\tFS:       &fs.FS{},\n\t\tCommands: buildCommands(silentCommandRunner),\n\n\t\tDistro: distro,\n\t}\n\n\tif err := p.Provision(provisionScriptPath, os.Args[1:]...); err != nil {\n\t\tswitch err.(type) {\n\t\tcase *exec.ExitError:\n\t\t\tif exitErr, ok := err.(*exec.ExitError); ok {\n\t\t\t\tif status, ok := exitErr.Sys().(syscall.WaitStatus); ok {\n\t\t\t\t\tos.Exit(status.ExitStatus())\n\t\t\t\t} else {\n\t\t\t\t\tos.Exit(1)\n\t\t\t\t}\n\t\t\t}\n\t\tcase *provisioner.TimeoutError:\n\t\t\tfmt.Printf(\"Timed out after %s seconds.\\n\", timeoutInSeconds)\n\t\t\tos.Exit(1)\n\t\tdefault:\n\t\t\tos.Exit(1)\n\t\t}\n\t}\n}\n\nfunc checkArgCount() {\n\tif len(os.Args) < 6 {\n\t\tfmt.Println(\"Need 5 arguments, Usage: ./provision <domain> <ip> <services> <docker_registries> <provider>\")\n\t\tos.Exit(1)\n\t}\n}\n\nfunc buildCommands(commandRunner provisioner.CmdRunner) []provisioner.Command {\n\tproviderAgnostic := []provisioner.Command{\n\t\t&commands.DisableUAAHSTS{\n\t\t\tWebXMLPath: \"/var/vcap/packages/uaa/tomcat/conf/web.xml\",\n\t\t},\n\t\t&commands.ConfigureDnsmasq{\n\t\t\tDomain:     os.Args[1],\n\t\t\tExternalIP: os.Args[2],\n\t\t\tFS:         &fs.FS{},\n\t\t\tCmdRunner:  commandRunner,\n\t\t},\n\t\t&commands.ConfigureGardenDNS{\n\t\t\tFS:        &fs.FS{},\n\t\t\tCmdRunner: commandRunner,\n\t\t},\n\t\t&commands.SetupApi{\n\t\t\tCmdRunner: commandRunner,\n\t\t\tFS:        &fs.FS{},\n\t\t},\n\t\t&commands.ReplaceDomain{\n\t\t\tCmdRunner: commandRunner,\n\t\t\tFS:        &fs.FS{},\n\t\t\tNewDomain: os.Args[1],\n\t\t},\n\t\t&commands.SetupCFDot{\n\t\t\tCmdRunner: commandRunner,\n\t\t\tFS:        &fs.FS{},\n\t\t},\n\t}\n\n\tconst (\n\t\thttpPort      = \"80\"\n\t\thttpsPort     = \"443\"\n\t\tsshPort       = \"22\"\n\t\tsshProxyPort  = \"2222\"\n\t\ttcpPortLower  = 61001\n\t\ttcpPortHigher = 61100\n\t)\n\n\tforAwsProvider := []provisioner.Command{\n\t\t&commands.CloseAllPorts{\n\t\t\tCmdRunner: commandRunner,\n\t\t},\n\t\t&commands.OpenPort{\n\t\t\tCmdRunner: commandRunner,\n\t\t\tPort:      httpPort,\n\t\t},\n\t\t&commands.OpenPort{\n\t\t\tCmdRunner: commandRunner,\n\t\t\tPort:      httpsPort,\n\t\t},\n\t\t&commands.OpenPort{\n\t\t\tCmdRunner: commandRunner,\n\t\t\tPort:      sshPort,\n\t\t},\n\t\t&commands.OpenPort{\n\t\t\tCmdRunner: commandRunner,\n\t\t\tPort:      sshProxyPort,\n\t\t},\n\t}\n\n\tfor p := tcpPortLower; p <= tcpPortHigher; p++ {\n\t\tforAwsProvider = append(forAwsProvider, &commands.OpenPort{\n\t\t\tCmdRunner: commandRunner,\n\t\t\tPort:      strconv.Itoa(p),\n\t\t})\n\t}\n\n\tif isAwsProvisioner() {\n\t\treturn append(providerAgnostic, forAwsProvider...)\n\t} else {\n\t\treturn providerAgnostic\n\t}\n}\n\nfunc isAwsProvisioner() bool {\n\treturn os.Args[5] == \"aws\"\n}\n"
  },
  {
    "path": "src/provisioner/main_suite_test.go",
    "content": "package main_test\n\nimport (\n\t. \"github.com/onsi/ginkgo\"\n\t. \"github.com/onsi/gomega\"\n\n\t\"testing\"\n)\n\nfunc TestPCFDev(t *testing.T) {\n\tRegisterFailHandler(Fail)\n\tRunSpecs(t, \"PCF Dev Main Suite\")\n}\n"
  },
  {
    "path": "src/provisioner/main_test.go",
    "content": "package main_test\n\nimport (\n\t\"os\"\n\t\"os/exec\"\n\t\"strings\"\n\n\t\"regexp\"\n\n\t\"path/filepath\"\n\n\t. \"github.com/onsi/ginkgo\"\n\t. \"github.com/onsi/gomega\"\n\t\"github.com/onsi/gomega/gbytes\"\n\t\"github.com/onsi/gomega/gexec\"\n\t\"math/rand\"\n\t\"net\"\n\t\"strconv\"\n\t\"time\"\n)\n\nvar _ = Describe(\"PCF Dev provision\", func() {\n\tvar (\n\t\tdockerID          string\n\t\tpwd               string\n\t\tdockerExecTimeout string = \"5s\"\n\t\trandomTcpPort     string\n\t)\n\n\tvar portsForwarded struct {\n\t\tPort80        string\n\t\tPort8060      string\n\t\tPort443       string\n\t\tPort22        string\n\t\tPort2222      string\n\t\tPort61001     string\n\t\tPort61100     string\n\t\tRandomTcpPort string\n\t}\n\n\tBeforeEach(func() {\n\t\tportsForwarded.Port80 = randomOpenPort()\n\t\tportsForwarded.Port8060 = randomOpenPort()\n\t\tportsForwarded.Port443 = randomOpenPort()\n\t\tportsForwarded.Port22 = randomOpenPort()\n\t\tportsForwarded.Port2222 = randomOpenPort()\n\t\tportsForwarded.Port61001 = randomOpenPort()\n\t\tportsForwarded.Port61100 = randomOpenPort()\n\t\tportsForwarded.RandomTcpPort = randomOpenPort()\n\n\t\tvar err error\n\t\tpwd, err = os.Getwd()\n\t\tExpect(err).NotTo(HaveOccurred())\n\n\t\trandomTcpPort = randomPortInRange(\"61001\", \"61100\")\n\n\t\toutput, err := exec.Command(\n\t\t\t\"docker\", \"run\",\n\t\t\t\"-p\", portsForwarded.Port80+\":80\",\n\t\t\t\"-p\", portsForwarded.Port8060+\":8060\",\n\t\t\t\"-p\", portsForwarded.Port443+\":443\",\n\t\t\t\"-p\", portsForwarded.Port22+\":22\",\n\t\t\t\"-p\", portsForwarded.Port2222+\":2222\",\n\t\t\t\"-p\", portsForwarded.Port61001+\":61001\",\n\t\t\t\"-p\", portsForwarded.Port61100+\":61100\",\n\t\t\t\"-p\", portsForwarded.RandomTcpPort+\":\"+randomTcpPort,\n\t\t\t\"--privileged\",\n\t\t\t\"-d\",\n\t\t\t\"-v\", pwd+\":/go/src/provisioner\",\n\t\t\t\"-w\", \"/go/src/provisioner\",\n\t\t\t\"pcfdev/provision\",\n\t\t\t\"bash\", \"-c\", \"umount /etc/resolv.conf && sleep 1000\",\n\t\t).Output()\n\t\tExpect(err).NotTo(HaveOccurred())\n\t\tdockerID = strings.TrimSpace(string(output))\n\n\t\tExpect(exec.Command(\"bash\", \"-c\", \"echo \\\"#!/bin/bash\\necho 'Waiting for services to start...'\\necho \\\\$@\\\" > \"+pwd+\"/provision-script\").Run()).To(Succeed())\n\t\tExpect(exec.Command(\"docker\", \"exec\", dockerID, \"chmod\", \"+x\", \"/go/src/provisioner/provision-script\").Run()).To(Succeed())\n\t\tExpect(exec.Command(\"docker\", \"exec\", dockerID, \"go\", \"build\", \"-ldflags\", \"-X main.provisionScriptPath=/go/src/provisioner/provision-script\", \"-o\", \"provision\", \"provisioner\").Run()).To(Succeed())\n\t\trunSuccessfully(exec.Command(\"docker\", \"exec\", dockerID, \"mkdir\", \"-p\", \"/var/pcfdev\"), \"10s\")\n\t\trunSuccessfully(exec.Command(\"docker\", \"exec\", dockerID, \"bash\", \"-c\", \"echo original-domain.pcfdev.io > /var/pcfdev/domain\"), \"10s\")\n\n\t\trunSuccessfully(exec.Command(\"docker\", \"exec\", dockerID, \"mkdir\", \"-p\", \"/var/vcap/jobs/cfdot/bin\"), \"10s\")\n\t\trunSuccessfully(exec.Command(\"docker\", \"exec\", dockerID, \"bash\", \"-c\", \"echo 'echo setting up cfdot' > /var/vcap/jobs/cfdot/bin/setup\"), \"10s\")\n\t})\n\n\tAfterEach(func() {\n\t\tos.RemoveAll(filepath.Join(pwd, \"provision\"))\n\t\tos.RemoveAll(filepath.Join(pwd, \"provision-script\"))\n\t\tExpect(exec.Command(\"docker\", \"rm\", dockerID, \"-f\").Run()).To(Succeed())\n\t})\n\n\n\tIt(\"should provision PCF Dev\", func() {\n\t\tsession := provisionForVirtualBox(dockerID)\n\t\tExpect(session).To(gbytes.Say(\"Waiting for services to start...\"))\n\n\t\tsession = runSuccessfully(exec.Command(\"docker\", \"exec\", dockerID, \"file\", \"/run/pcfdev-healthcheck\"), dockerExecTimeout)\n\t\tExpect(session).NotTo(gbytes.Say(\"No such file or directory\"))\n\t})\n\n\tIt(\"should set up the monitrc files for an HTTP server and an root executable _ctl script running on the box\", func() {\n\t\tprovisionForVirtualBox(dockerID)\n\n\t\tsession := runSuccessfully(exec.Command(\"docker\", \"exec\", dockerID, \"cat\", \"/var/vcap/monit/job/1001_pcfdev_api.monitrc\"), dockerExecTimeout)\n\t\tExpect(session).To(gbytes.Say(\"check process pcfdev-api\"))\n\t\tExpect(session).To(gbytes.Say(\"with pidfile /var/vcap/sys/run/pcfdev-api/api.pid\"))\n\t\tExpect(session).To(gbytes.Say(`start program \"/var/pcfdev/api/api_ctl start\"`))\n\t\tExpect(session).To(gbytes.Say(`stop program \"/var/pcfdev/api/api_ctl stop\"`))\n\t\tExpect(session).To(gbytes.Say(\"group vcap\"))\n\t\tExpect(session).To(gbytes.Say(\"mode manual\"))\n\n\t\tsession = runSuccessfully(exec.Command(\"docker\", \"exec\", dockerID, \"ls\", \"-l\", \"/var/pcfdev/api/api_ctl\"), dockerExecTimeout)\n\n\t\tExpect(session).To(gbytes.Say(\"-rwxr--r--\"))\n\t})\n\n\tXIt(\"should create certificates\", func() {\n\t\tprovisionForVirtualBox(dockerID)\n\t\trunSuccessfully(exec.Command(\"docker\", \"exec\", dockerID, \"bash\", \"-c\", \"echo 127.0.0.1 local.pcfdev.io >> /etc/hosts\"), dockerExecTimeout)\n\t\trunSuccessfully(exec.Command(\"docker\", \"exec\", \"-d\", dockerID, \"service\", \"nginx\", \"start\"), dockerExecTimeout)\n\t\trunSuccessfully(exec.Command(\"docker\", \"exec\", dockerID, \"curl\", \"--cacert\", \"/var/pcfdev/openssl/ca_cert.pem\", \"https://local.pcfdev.io:443\"), dockerExecTimeout)\n\t})\n\n\tIt(\"should disable HSTS in UAA\", func() {\n\t\tprovisionForVirtualBox(dockerID)\n\n\t\tsession := runSuccessfully(exec.Command(\"docker\", \"exec\", dockerID, \"grep\", \"-A\", \"1\", \"<param-name>hstsEnabled</param-name>\", \"/var/vcap/packages/uaa/tomcat/conf/web.xml\"), dockerExecTimeout)\n\t\tEventually(session).Should(gbytes.Say(\"<param-value>false</param-value>\"))\n\t})\n\n\tIt(\"should directly insert the internal-ip into the dns_server flag of garden\", func() {\n\t\tprovisionForVirtualBox(dockerID)\n\n\t\toutput, err := exec.Command(\"docker\", \"exec\", dockerID, \"ip\", \"route\", \"get\", \"1\").Output()\n\t\tExpect(err).NotTo(HaveOccurred())\n\t\tregex := regexp.MustCompile(`\\s{2}src\\s(.*)`)\n\t\tinternalIP := regex.FindStringSubmatch(string(output))[1]\n\n\t\tsession := runSuccessfully(exec.Command(\"docker\", \"exec\", dockerID, \"grep\", internalIP, \"/var/vcap/jobs/garden/bin/garden_ctl\"), dockerExecTimeout)\n\t\tEventually(session).Should(gbytes.Say(\"-dnsServer=\" + internalIP))\n\t})\n\n\tIt(\"should copy cfdot setup script to /etc/profile.d\", func() {\n\t\tprovisionForVirtualBox(dockerID)\n\n\t\toutput, err := exec.Command(\"docker\", \"exec\", dockerID, \"bash\", \"-c\", \"cat /etc/profile.d/cfdot.sh\").Output()\n\t\tExpect(err).NotTo(HaveOccurred())\n\t\tExpect(string(output)).To(Equal(\"echo setting up cfdot\\n\"))\n\t})\n\n\tDescribe(\"Network access\", func() {\n\t\tContext(\"on AWS\", func() {\n\t\t\tIt(\"does not allow connections by default\", func() {\n\t\t\t\tExpect(exec.Command(\"docker\", \"exec\", \"-d\", dockerID, \"go\", \"run\", \"assets/stub_server.go\", \"8060\").Run()).To(Succeed())\n\t\t\t\twaitForServer(\"localhost:\"+portsForwarded.Port8060, 5*time.Second)\n\t\t\t\tprovisionForAws(dockerID)\n\t\t\t\trunFailure(exec.Command(\"curl\", \"localhost:\"+portsForwarded.Port8060), \"5s\")\n\t\t\t})\n\n\t\t\tIt(\"allows external access to http cf router\", func() {\n\t\t\t\tExpect(exec.Command(\"docker\", \"exec\", \"-d\", dockerID, \"go\", \"run\", \"assets/stub_server.go\", \"80\").Run()).To(Succeed())\n\t\t\t\twaitForServer(\"localhost:\"+portsForwarded.Port80, 5*time.Second)\n\t\t\t\tprovisionForAws(dockerID)\n\n\t\t\t\tsession := runSuccessfully(exec.Command(\"curl\", \"localhost:\"+portsForwarded.Port80), \"5s\")\n\t\t\t\tExpect(session).To(gbytes.Say(\"Response from port 80 stub server\"))\n\t\t\t})\n\n\t\t\tIt(\"allows external access to https cf router\", func() {\n\t\t\t\tExpect(exec.Command(\"docker\", \"exec\", \"-d\", dockerID, \"go\", \"run\", \"assets/stub_server.go\", \"443\").Run()).To(Succeed())\n\t\t\t\twaitForServer(\"localhost:\"+portsForwarded.Port443, 5*time.Second)\n\t\t\t\tprovisionForAws(dockerID)\n\n\t\t\t\tsession := runSuccessfully(exec.Command(\"curl\", \"localhost:\"+portsForwarded.Port443), \"5s\")\n\t\t\t\tExpect(session).To(gbytes.Say(\"Response from port 443 stub server\"))\n\t\t\t})\n\n\t\t\tIt(\"allows external access to ssh\", func() {\n\t\t\t\tExpect(exec.Command(\"docker\", \"exec\", \"-d\", dockerID, \"go\", \"run\", \"assets/stub_server.go\", \"22\").Run()).To(Succeed())\n\t\t\t\twaitForServer(\"localhost:\"+portsForwarded.Port22, 5*time.Second)\n\t\t\t\tprovisionForAws(dockerID)\n\n\t\t\t\tsession := runSuccessfully(exec.Command(\"curl\", \"localhost:\"+portsForwarded.Port22), \"5s\")\n\t\t\t\tExpect(session).To(gbytes.Say(\"Response from port 22 stub server\"))\n\t\t\t})\n\n\t\t\tIt(\"allows external access to the ssh proxy\", func() {\n\t\t\t\tExpect(exec.Command(\"docker\", \"exec\", \"-d\", dockerID, \"go\", \"run\", \"assets/stub_server.go\", \"2222\").Run()).To(Succeed())\n\t\t\t\twaitForServer(\"localhost:\"+portsForwarded.Port2222, 5*time.Second)\n\t\t\t\tprovisionForAws(dockerID)\n\t\t\t\tsession := runSuccessfully(exec.Command(\"curl\", \"localhost:\"+portsForwarded.Port2222), \"5s\")\n\t\t\t\tExpect(session).To(gbytes.Say(\"Response from port 2222 stub server\"))\n\t\t\t})\n\n\t\t\tIt(\"allow external access to tcp router port for lowest port in range\", func() {\n\t\t\t\tExpect(exec.Command(\"docker\", \"exec\", \"-d\", dockerID, \"go\", \"run\", \"assets/stub_server.go\", \"61001\").Run()).To(Succeed())\n\t\t\t\twaitForServer(\"localhost:\"+portsForwarded.Port61001, 5*time.Second)\n\t\t\t\tprovisionForAws(dockerID)\n\t\t\t\tsession := runSuccessfully(exec.Command(\"curl\", \"localhost:\"+portsForwarded.Port61001), \"5s\")\n\t\t\t\tExpect(session).To(gbytes.Say(\"Response from port 61001 stub server\"))\n\n\t\t\t})\n\n\t\t\tIt(\"allow external access to tcp router port for highest port in range\", func() {\n\t\t\t\tExpect(exec.Command(\"docker\", \"exec\", \"-d\", dockerID, \"go\", \"run\", \"assets/stub_server.go\", \"61100\").Run()).To(Succeed())\n\t\t\t\twaitForServer(\"localhost:\"+portsForwarded.Port61100, 5*time.Second)\n\t\t\t\tprovisionForAws(dockerID)\n\t\t\t\tsession := runSuccessfully(exec.Command(\"curl\", \"localhost:\"+portsForwarded.Port61100), \"5s\")\n\t\t\t\tExpect(session).To(gbytes.Say(\"Response from port 61100 stub server\"))\n\n\t\t\t})\n\n\t\t\tIt(\"allow external access to tcp router port for random port in range\", func() {\n\t\t\t\tExpect(exec.Command(\"docker\", \"exec\", \"-d\", dockerID, \"go\", \"run\", \"assets/stub_server.go\", randomTcpPort).Run()).To(Succeed())\n\t\t\t\twaitForServer(\"localhost:\"+portsForwarded.RandomTcpPort, 5*time.Second)\n\t\t\t\tprovisionForAws(dockerID)\n\t\t\t\tsession := runSuccessfully(exec.Command(\"curl\", \"localhost:\"+portsForwarded.RandomTcpPort), \"5s\")\n\t\t\t\tExpect(session).To(gbytes.Say(\"Response from port \" + randomTcpPort + \" stub server\"))\n\t\t\t})\n\t\t})\n\n\t\tContext(\"on Virtualbox\", func() {\n\t\t\tIt(\"allows connections by default\", func() {\n\t\t\t\tExpect(exec.Command(\"docker\", \"exec\", \"-d\", dockerID, \"go\", \"run\", \"assets/stub_server.go\", \"8060\").Run()).To(Succeed())\n\t\t\t\twaitForServer(\"localhost:\"+portsForwarded.Port8060, 5*time.Second)\n\t\t\t\tExpect(exec.Command(\"docker\", \"exec\", \"-d\", dockerID, \"go\", \"run\", \"assets/stub_server.go\", \"80\").Run()).To(Succeed())\n\t\t\t\twaitForServer(\"localhost:\"+portsForwarded.Port80, 5*time.Second)\n\t\t\t\tExpect(exec.Command(\"docker\", \"exec\", \"-d\", dockerID, \"go\", \"run\", \"assets/stub_server.go\", \"443\").Run()).To(Succeed())\n\t\t\t\twaitForServer(\"localhost:\"+portsForwarded.Port443, 5*time.Second)\n\t\t\t\tExpect(exec.Command(\"docker\", \"exec\", \"-d\", dockerID, \"go\", \"run\", \"assets/stub_server.go\", \"22\").Run()).To(Succeed())\n\t\t\t\twaitForServer(\"localhost:\"+portsForwarded.Port22, 5*time.Second)\n\t\t\t\tExpect(exec.Command(\"docker\", \"exec\", \"-d\", dockerID, \"go\", \"run\", \"assets/stub_server.go\", \"2222\").Run()).To(Succeed())\n\t\t\t\twaitForServer(\"localhost:\"+portsForwarded.Port2222, 5*time.Second)\n\t\t\t\tExpect(exec.Command(\"docker\", \"exec\", \"-d\", dockerID, \"go\", \"run\", \"assets/stub_server.go\", \"61001\").Run()).To(Succeed())\n\t\t\t\twaitForServer(\"localhost:\"+portsForwarded.Port61001, 5*time.Second)\n\t\t\t\tExpect(exec.Command(\"docker\", \"exec\", \"-d\", dockerID, \"go\", \"run\", \"assets/stub_server.go\", \"61100\").Run()).To(Succeed())\n\t\t\t\twaitForServer(\"localhost:\"+portsForwarded.Port61100, 5*time.Second)\n\t\t\t\tExpect(exec.Command(\"docker\", \"exec\", \"-d\", dockerID, \"go\", \"run\", \"assets/stub_server.go\", randomTcpPort).Run()).To(Succeed())\n\t\t\t\twaitForServer(\"localhost:\"+portsForwarded.RandomTcpPort, 5*time.Second)\n\n\t\t\t\tprovisionForVirtualBox(dockerID)\n\n\t\t\t\tExpect(runSuccessfully(exec.Command(\"curl\", \"localhost:\"+portsForwarded.Port80), \"5s\")).To(gbytes.Say(\"Response from port 80 stub server\"))\n\t\t\t\tExpect(runSuccessfully(exec.Command(\"curl\", \"localhost:\"+portsForwarded.Port8060), \"5s\")).To(gbytes.Say(\"Response from port 8060 stub server\"))\n\t\t\t\tExpect(runSuccessfully(exec.Command(\"curl\", \"localhost:\"+portsForwarded.Port443), \"5s\")).To(gbytes.Say(\"Response from port 443 stub server\"))\n\t\t\t\tExpect(runSuccessfully(exec.Command(\"curl\", \"localhost:\"+portsForwarded.Port22), \"5s\")).To(gbytes.Say(\"Response from port 22 stub server\"))\n\t\t\t\tExpect(runSuccessfully(exec.Command(\"curl\", \"localhost:\"+portsForwarded.Port2222), \"5s\")).To(gbytes.Say(\"Response from port 2222 stub server\"))\n\t\t\t\tExpect(runSuccessfully(exec.Command(\"curl\", \"localhost:\"+portsForwarded.Port61001), \"5s\")).To(gbytes.Say(\"Response from port 61001 stub server\"))\n\t\t\t\tExpect(runSuccessfully(exec.Command(\"curl\", \"localhost:\"+portsForwarded.Port61100), \"5s\")).To(gbytes.Say(\"Response from port 61100 stub server\"))\n\t\t\t\tExpect(runSuccessfully(exec.Command(\"curl\", \"localhost:\"+portsForwarded.RandomTcpPort), \"5s\")).To(gbytes.Say(\"Response from port \" + randomTcpPort + \" stub server\"))\n\t\t\t})\n\t\t})\n\t})\n\n\tIt(\"should resolve *.cf.internal to localhost using Dnsmasq\", func() {\n\t\tprovisionForVirtualBox(dockerID)\n\t\tsession := runSuccessfully(exec.Command(\"docker\", \"exec\", dockerID, \"host\", \"bbs.service.cf.internal\"), \"3s\")\n\t\tEventually(session).Should(gbytes.Say(`bbs.service.cf.internal has address 127.0.0.1`))\n\t})\n\n\tIt(\"should replace the old domain with the new domain in job files recursively without following symlinks\", func() {\n\t\trunSuccessfully(exec.Command(\"docker\", \"exec\", dockerID, \"mkdir\", \"-p\", \"/var/vcap/jobs/some-job/config\"), \"10s\")\n\t\trunSuccessfully(exec.Command(\"docker\", \"exec\", dockerID, \"bash\", \"-c\", \"echo 'domain: original-domain.pcfdev.io' > /var/vcap/jobs/some-job/config/some-file\"), \"10s\")\n\n\t\trunSuccessfully(exec.Command(\"docker\", \"exec\", dockerID, \"mkdir\", \"-p\", \"/var/vcap/jobs/some-other-job/config/some-nested-dir\"), \"10s\")\n\t\trunSuccessfully(exec.Command(\"docker\", \"exec\", dockerID, \"bash\", \"-c\", \"echo 'api: api.original-domain.pcfdev.io:443' > /var/vcap/jobs/some-other-job/config/some-nested-dir/some-file\"), \"10s\")\n\n\t\trunSuccessfully(exec.Command(\"docker\", \"exec\", dockerID, \"mkdir\", \"-p\", \"/tmp/some-symlinked-dir\"), \"10s\")\n\t\trunSuccessfully(exec.Command(\"docker\", \"exec\", dockerID, \"bash\", \"-c\", \"echo 'domain: original-domain.pcfdev.io' > /tmp/some-symlinked-dir/some-file\"), \"10s\")\n\t\trunSuccessfully(exec.Command(\"docker\", \"exec\", dockerID, \"mkdir\", \"-p\", \"/var/vcap/jobs/some-job-with-symlink/config\"), \"10s\")\n\t\trunSuccessfully(exec.Command(\"docker\", \"exec\", dockerID, \"ln\", \"-s\", \"/tmp/some-symlinked-dir\", \"/var/vcap/jobs/some-job-with-symlink/config\"), \"10s\")\n\n\t\trunSuccessfully(exec.Command(\"docker\", \"exec\", dockerID, \"/go/src/provisioner/provision\", \"new-domain.pcfdev.io\", \"192.168.11.11\", \"\", \"\", \"virtualbox\"), \"100000s\")\n\n\t\tExpect(runSuccessfully(exec.Command(\"docker\", \"exec\", dockerID, \"cat\", \"/var/vcap/jobs/some-job/config/some-file\"), \"10s\")).To(gbytes.Say(\"domain: new-domain.pcfdev.io\"))\n\t\tExpect(runSuccessfully(exec.Command(\"docker\", \"exec\", dockerID, \"cat\", \"/var/vcap/jobs/some-other-job/config/some-nested-dir/some-file\"), \"10s\")).To(gbytes.Say(\"api: api.new-domain.pcfdev.io:443\"))\n\t\tExpect(runSuccessfully(exec.Command(\"docker\", \"exec\", dockerID, \"cat\", \"/var/vcap/jobs/some-job-with-symlink/config/some-symlinked-dir/some-file\"), \"10s\")).To(gbytes.Say(\"domain: original-domain.pcfdev.io\"))\n\t})\n\n\tContext(\"when the distribution is not 'pcf'\", func() {\n\t\tBeforeEach(func() {\n\t\t\tExpect(exec.Command(\"docker\", \"exec\", dockerID, \"go\", \"build\", \"-ldflags\", \"-X main.distro=oss -X main.provisionScriptPath=/go/src/provisioner/provision-script\", \"-o\", \"provision\", \"provisioner\").Run()).To(Succeed())\n\t\t})\n\n\t\tIt(\"should not disable HSTS in UAA\", func() {\n\t\t\tprovisionForVirtualBox(dockerID)\n\n\t\t\tsession, err := gexec.Start(exec.Command(\"docker\", \"exec\", dockerID, \"grep\", \"<param-name>hstsEnabled</param-name>\", \"/var/vcap/packages/uaa/tomcat/conf/web.xml\"), GinkgoWriter, GinkgoWriter)\n\t\t\tExpect(err).NotTo(HaveOccurred())\n\t\t\tEventually(session).Should(gexec.Exit(1))\n\t\t})\n\t})\n\n\tContext(\"when provisioning does not have the required number of args\", func() {\n\t\tIt(\"should exit with an error\", func() {\n\t\t\trunFailure(exec.Command(\"docker\", \"exec\", dockerID, \"/go/src/provisioner/provision\", \"local.pcfdev.io\", \"192.168.11.11\", \"\", \"\"), \"10s\")\n\t\t})\n\t})\n\n\tContext(\"when provisioning fails\", func() {\n\t\tBeforeEach(func() {\n\t\t\tExpect(exec.Command(\"bash\", \"-c\", \"echo \\\"#!/bin/bash\\nexit 42\\\" > \"+pwd+\"/provision-script\").Run()).To(Succeed())\n\t\t})\n\n\t\tIt(\"should exit with the exit status of the provision script\", func() {\n\t\t\tsession, _ := gexec.Start(exec.Command(\"docker\", \"exec\", dockerID, \"/go/src/provisioner/provision\", \"local.pcfdev.io\", \"192.168.11.11\", \"\", \"\", \"virtualbox\"), GinkgoWriter, GinkgoWriter)\n\t\t\tEventually(session, \"10s\").Should(gexec.Exit(42))\n\t\t})\n\t})\n\n\tContext(\"when provisioning takes too long\", func() {\n\t\tBeforeEach(func() {\n\t\t\tExpect(exec.Command(\"bash\", \"-c\", \"echo \\\"#!/bin/bash\\nsleep 20\\\" > \"+pwd+\"/provision-script\").Run()).To(Succeed())\n\t\t\tExpect(exec.Command(\"docker\", \"exec\", dockerID, \"go\", \"build\", \"-ldflags\", \"-X main.provisionScriptPath=/go/src/provisioner/provision-script -X main.timeoutInSeconds=2\", \"-o\", \"provision\", \"provisioner\").Run()).To(Succeed())\n\t\t})\n\n\t\tIt(\"exit with an exit status of 1 and tell why it is exiting...\", func() {\n\t\t\tsession, err := gexec.Start(exec.Command(\"docker\", \"exec\", dockerID, \"/go/src/provisioner/provision\", \"local.pcfdev.io\", \"192.168.11.11\", \"\", \"\", \"virtualbox\"), GinkgoWriter, GinkgoWriter)\n\t\t\tExpect(err).NotTo(HaveOccurred())\n\t\t\tEventually(session, \"15s\").Should(gexec.Exit(1))\n\t\t\tExpect(session).To(gbytes.Say(\"Timed out after 2 seconds.\"))\n\t\t})\n\t})\n})\n\nfunc provisionForVirtualBox(dockerID string) *gexec.Session {\n\treturn runSuccessfully(exec.Command(\"docker\", \"exec\", dockerID, \"/go/src/provisioner/provision\", \"local.pcfdev.io\", \"192.168.11.11\", \"\", \"\", \"virtualbox\"), \"10s\")\n}\n\nfunc provisionForAws(dockerID string) *gexec.Session {\n\treturn runSuccessfully(exec.Command(\"docker\", \"exec\", dockerID, \"/go/src/provisioner/provision\", \"local.pcfdev.io\", \"192.168.11.11\", \"\", \"\", \"aws\"), \"10s\")\n}\n\nfunc runSuccessfully(command *exec.Cmd, timeout string) *gexec.Session {\n\tsession, err := gexec.Start(command, GinkgoWriter, GinkgoWriter)\n\tExpectWithOffset(1, err).NotTo(HaveOccurred())\n\tEventuallyWithOffset(1, session, timeout).Should(gexec.Exit(0))\n\treturn session\n}\n\nfunc runFailure(command *exec.Cmd, timeout string) *gexec.Session {\n\tsession, err := gexec.Start(command, GinkgoWriter, GinkgoWriter)\n\tExpectWithOffset(1, err).NotTo(HaveOccurred())\n\tConsistentlyWithOffset(1, session, timeout).ShouldNot(gexec.Exit(0))\n\treturn session\n}\n\nfunc randomOpenPort() string {\n\tconn, err := net.Listen(\"tcp\", \"127.0.0.1:0\")\n\tExpect(err).NotTo(HaveOccurred())\n\tdefer conn.Close()\n\taddress := strings.Split(conn.Addr().String(), \":\")\n\treturn address[1]\n}\n\nfunc waitForServer(host string, timeout time.Duration) {\n\tcurrentWait := 0 * time.Second\n\tserverOpen := false\n\n\tfor !serverOpen && currentWait < timeout {\n\t\texec.Command(\"curl\", host)\n\t\tsession, _ := gexec.Start(exec.Command(\"curl\", host), GinkgoWriter, GinkgoWriter)\n\t\tEventually(session, \"1s\").Should(gexec.Exit())\n\t\tif session.ExitCode() == 0 {\n\t\t\tserverOpen = true\n\t\t}\n\t\tcurrentWait += time.Second * 1\n\t\ttime.Sleep(time.Second)\n\t}\n\tExpect(serverOpen).To(BeTrue())\n}\n\nfunc randomPortInRange(lowerPort string, higherPort string) string {\n\n\thigherPortNumber, err := strconv.Atoi(higherPort)\n\tExpect(err).NotTo(HaveOccurred())\n\n\tlowerPortNumber, err := strconv.Atoi(lowerPort)\n\tExpect(err).NotTo(HaveOccurred())\n\n\treturn strconv.Itoa(rand.Intn(higherPortNumber-lowerPortNumber) + lowerPortNumber)\n\n}\n"
  },
  {
    "path": "src/provisioner/provisioner/commands/close_all_ports.go",
    "content": "package commands\n\nimport (\n\t\"provisioner/provisioner\"\n)\n\ntype CloseAllPorts struct {\n\tCmdRunner provisioner.CmdRunner\n}\n\nfunc (c *CloseAllPorts) Run() error {\n\tif err := c.dropNewConnections(\"eth0\"); err != nil {\n\t\treturn err\n\t}\n\n\tif err := c.dropNewConnections(\"eth1\"); err != nil {\n\t\treturn err\n\t}\n\n\treturn c.CmdRunner.Run(\"iptables\", \"-I\", \"INPUT\", \"-i\", \"lo\", \"-j\", \"ACCEPT\")\n}\n\nfunc (c *CloseAllPorts) dropNewConnections(interfaceName string) error {\n\tif err := c.CmdRunner.Run(\"iptables\", \"-I\", \"INPUT\", \"-i\", interfaceName, \"-p\", \"tcp\", \"-j\", \"DROP\"); err != nil {\n\t\treturn err\n\t}\n\n\treturn c.CmdRunner.Run(\"iptables\", \"-I\", \"INPUT\", \"-i\", interfaceName, \"-m\", \"conntrack\", \"--ctstate\", \"ESTABLISHED,RELATED\", \"-j\", \"ACCEPT\")\n}\n\nfunc (*CloseAllPorts) Distro() string {\n\treturn provisioner.DistributionOSS\n}"
  },
  {
    "path": "src/provisioner/provisioner/commands/commands_suite_test.go",
    "content": "package commands_test\n\nimport (\n\t. \"github.com/onsi/ginkgo\"\n\t. \"github.com/onsi/gomega\"\n\n\t\"testing\"\n)\n\nfunc TestCommands(t *testing.T) {\n\tRegisterFailHandler(Fail)\n\tRunSpecs(t, \"Commands Suite\")\n}\n"
  },
  {
    "path": "src/provisioner/provisioner/commands/configure_dnsmasq.go",
    "content": "package commands\n\nimport (\n\t\"fmt\"\n\t\"provisioner/provisioner\"\n\t\"regexp\"\n\t\"strings\"\n\t\"provisioner/fs\"\n)\n\ntype ConfigureDnsmasq struct {\n\tFS         provisioner.FS\n\tCmdRunner  provisioner.CmdRunner\n\tDomain     string\n\tExternalIP string\n}\n\nfunc (c *ConfigureDnsmasq) Run() error {\n\tif err := c.CmdRunner.Run(\"resolvconf\", \"--disable-updates\"); err != nil {\n\t\treturn err\n\t}\n\n\tif err := c.CmdRunner.Run(\"service\", \"dnsmasq\", \"stop\"); err != nil {\n\t\treturn err\n\t}\n\n\toutput, err := c.CmdRunner.Output(\"ip\", \"route\", \"get\", \"1\")\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tvar internalIP string\n\tregex := regexp.MustCompile(`\\s{2}src\\s(.*)`)\n\tif matches := regex.FindStringSubmatch(string(output)); len(matches) > 1 {\n\t\tinternalIP = matches[1]\n\t} else {\n\t\treturn fmt.Errorf(\"internal ip could not be parsed from output: %s\", string(output))\n\t}\n\n\tif err := c.FS.Write(\"/etc/dnsmasq.d/domain\", strings.NewReader(fmt.Sprintf(\"address=/.%s/%s\\naddress=/.cf.internal/127.0.0.1\", c.Domain, c.ExternalIP)), fs.FileModeRootReadWrite); err != nil {\n\t\treturn err\n\t}\n\n\tif err := c.FS.Write(\"/etc/dnsmasq.d/interface\", strings.NewReader(fmt.Sprintf(\"listen-address=%s\", internalIP)), fs.FileModeRootReadWrite); err != nil {\n\t\treturn err\n\t}\n\n\tif err := c.FS.Write(\"/etc/dnsmasq.conf\", strings.NewReader(\"resolv-file=/var/pcfdev/external-resolv.conf\"), fs.FileModeRootReadWrite); err != nil {\n\t\treturn err\n\t}\n\n\texists, err := c.FS.Exists(\"/var/pcfdev/external-resolv.conf\")\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif !exists {\n\t\tdata, err := c.FS.Read(\"/etc/resolv.conf\")\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\n\t\tnameservers := []string{}\n\t\tfor _, nameserver := range strings.Split(string(data), \"\\n\") {\n\t\t\tif strings.HasPrefix(nameserver, \"nameserver\") && !strings.Contains(nameserver, \"127.0.0.1\") {\n\t\t\t\tnameservers = append(nameservers, nameserver)\n\t\t\t}\n\t\t}\n\n\t\tif err := c.FS.Write(\"/var/pcfdev/external-resolv.conf\", strings.NewReader(strings.Join(nameservers, \"\\n\")), fs.FileModeRootReadWrite); err != nil {\n\t\t\treturn err\n\t\t}\n\n\t}\n\n\tif err := c.CmdRunner.Run(\"service\", \"dnsmasq\", \"start\"); err != nil {\n\t\treturn err\n\t}\n\n\treturn c.FS.Write(\"/etc/resolv.conf\", strings.NewReader(fmt.Sprintf(\"nameserver %s\", internalIP)), fs.FileModeRootReadWrite)\n}\n\nfunc (*ConfigureDnsmasq) Distro() string {\n\treturn provisioner.DistributionOSS\n}\n"
  },
  {
    "path": "src/provisioner/provisioner/commands/configure_dnsmasq_test.go",
    "content": "package commands_test\n\nimport (\n\t\"errors\"\n\t\"provisioner/provisioner\"\n\t\"provisioner/provisioner/commands\"\n\t\"provisioner/provisioner/mocks\"\n\t\"strings\"\n\n\t\"github.com/golang/mock/gomock\"\n\t. \"github.com/onsi/ginkgo\"\n\t. \"github.com/onsi/gomega\"\n\t\"os\"\n\t\"provisioner/fs\"\n)\n\nvar _ = Describe(\"ConfigureDnsmasq\", func() {\n\tvar (\n\t\tmockCtrl      *gomock.Controller\n\t\tmockFS        *mocks.MockFS\n\t\tmockCmdRunner *mocks.MockCmdRunner\n\t\tcDnsmasq      *commands.ConfigureDnsmasq\n\t)\n\n\tBeforeEach(func() {\n\t\tmockCtrl = gomock.NewController(GinkgoT())\n\t\tmockFS = mocks.NewMockFS(mockCtrl)\n\t\tmockCmdRunner = mocks.NewMockCmdRunner(mockCtrl)\n\t\tcDnsmasq = &commands.ConfigureDnsmasq{\n\t\t\tFS:         mockFS,\n\t\t\tCmdRunner:  mockCmdRunner,\n\t\t\tDomain:     \"some-domain\",\n\t\t\tExternalIP: \"some-external-ip\",\n\t\t}\n\t})\n\n\tAfterEach(func() {\n\t\tmockCtrl.Finish()\n\t})\n\n\tDescribe(\"#Run\", func() {\n\t\tContext(\"when there are external nameservers in /etc/resolv.conf\", func() {\n\t\t\tIt(\"should write dns resolutions for consul and domain into the dnsmasq config and save external nameservers\", func() {\n\t\t\t\tgomock.InOrder(\n\t\t\t\t\tmockCmdRunner.EXPECT().Run(\"resolvconf\", \"--disable-updates\"),\n\t\t\t\t\tmockCmdRunner.EXPECT().Run(\"service\", \"dnsmasq\", \"stop\"),\n\t\t\t\t\tmockCmdRunner.EXPECT().Output(\"ip\", \"route\", \"get\", \"1\").Return([]byte(\"some-ip via some-other-ip dev eth0  src some-internal-ip\\n cache\"), nil),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/etc/dnsmasq.d/domain\", strings.NewReader(\"address=/.some-domain/some-external-ip\\naddress=/.cf.internal/127.0.0.1\"), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/etc/dnsmasq.d/interface\", strings.NewReader(\"listen-address=some-internal-ip\"), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/etc/dnsmasq.conf\", strings.NewReader(\"resolv-file=/var/pcfdev/external-resolv.conf\"), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t\tmockFS.EXPECT().Exists(\"/var/pcfdev/external-resolv.conf\").Return(false, nil),\n\t\t\t\t\tmockFS.EXPECT().Read(\"/etc/resolv.conf\").Return([]byte(\"nameserver 127.0.0.1\\nnameserver some-external-nameserver\\n# Generated by bosh-agent\\nnameserver some-other-external-nameserver\"), nil),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/var/pcfdev/external-resolv.conf\", strings.NewReader(\"nameserver some-external-nameserver\\nnameserver some-other-external-nameserver\"), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t\tmockCmdRunner.EXPECT().Run(\"service\", \"dnsmasq\", \"start\"),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/etc/resolv.conf\", strings.NewReader(\"nameserver some-internal-ip\"), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t)\n\n\t\t\t\tExpect(cDnsmasq.Run()).To(Succeed())\n\t\t\t})\n\t\t})\n\n\t\tContext(\"when there are no external nameservers in /etc/resolv.conf\", func() {\n\t\t\tIt(\"should write dns resolutions for consul and domain into the dnsmasq config and save external nameservers\", func() {\n\t\t\t\tgomock.InOrder(\n\t\t\t\t\tmockCmdRunner.EXPECT().Run(\"resolvconf\", \"--disable-updates\"),\n\t\t\t\t\tmockCmdRunner.EXPECT().Run(\"service\", \"dnsmasq\", \"stop\"),\n\t\t\t\t\tmockCmdRunner.EXPECT().Output(\"ip\", \"route\", \"get\", \"1\").Return([]byte(\"some-ip via some-other-ip dev eth0  src some-internal-ip\\n cache\"), nil),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/etc/dnsmasq.d/domain\", strings.NewReader(\"address=/.some-domain/some-external-ip\\naddress=/.cf.internal/127.0.0.1\"), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/etc/dnsmasq.d/interface\", strings.NewReader(\"listen-address=some-internal-ip\"), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/etc/dnsmasq.conf\", strings.NewReader(\"resolv-file=/var/pcfdev/external-resolv.conf\"), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t\tmockFS.EXPECT().Exists(\"/var/pcfdev/external-resolv.conf\").Return(false, nil),\n\t\t\t\t\tmockFS.EXPECT().Read(\"/etc/resolv.conf\").Return([]byte(\"nameserver 127.0.0.1\"), nil),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/var/pcfdev/external-resolv.conf\", strings.NewReader(\"\"), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t\tmockCmdRunner.EXPECT().Run(\"service\", \"dnsmasq\", \"start\"),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/etc/resolv.conf\", strings.NewReader(\"nameserver some-internal-ip\"), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t)\n\n\t\t\t\tExpect(cDnsmasq.Run()).To(Succeed())\n\t\t\t})\n\t\t})\n\n\t\tContext(\"when external-resolv.conf already exists\", func() {\n\t\t\tIt(\"should not overwrite the file\", func() {\n\t\t\t\tgomock.InOrder(\n\t\t\t\t\tmockCmdRunner.EXPECT().Run(\"resolvconf\", \"--disable-updates\"),\n\t\t\t\t\tmockCmdRunner.EXPECT().Run(\"service\", \"dnsmasq\", \"stop\"),\n\t\t\t\t\tmockCmdRunner.EXPECT().Output(\"ip\", \"route\", \"get\", \"1\").Return([]byte(\"some-ip via some-other-ip dev eth0  src some-internal-ip\\n cache\"), nil),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/etc/dnsmasq.d/domain\", strings.NewReader(\"address=/.some-domain/some-external-ip\\naddress=/.cf.internal/127.0.0.1\"), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/etc/dnsmasq.d/interface\", strings.NewReader(\"listen-address=some-internal-ip\"), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/etc/dnsmasq.conf\", strings.NewReader(\"resolv-file=/var/pcfdev/external-resolv.conf\"), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t\tmockFS.EXPECT().Exists(\"/var/pcfdev/external-resolv.conf\").Return(true, nil),\n\t\t\t\t\tmockCmdRunner.EXPECT().Run(\"service\", \"dnsmasq\", \"start\"),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/etc/resolv.conf\", strings.NewReader(\"nameserver some-internal-ip\"), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t)\n\n\t\t\t\tExpect(cDnsmasq.Run()).To(Succeed())\n\t\t\t})\n\t\t})\n\n\t\tContext(\"when there is an error disabling resolvconf updates\", func() {\n\t\t\tIt(\"should return the error\", func() {\n\t\t\t\tmockCmdRunner.EXPECT().Run(\"resolvconf\", \"--disable-updates\").Return(errors.New(\"some-error\"))\n\n\t\t\t\tExpect(cDnsmasq.Run()).To(MatchError(\"some-error\"))\n\t\t\t})\n\t\t})\n\n\t\tContext(\"when there is an error stopping dnsmasq\", func() {\n\t\t\tIt(\"should return the error\", func() {\n\t\t\t\tgomock.InOrder(\n\t\t\t\t\tmockCmdRunner.EXPECT().Run(\"resolvconf\", \"--disable-updates\"),\n\t\t\t\t\tmockCmdRunner.EXPECT().Run(\"service\", \"dnsmasq\", \"stop\").Return(errors.New(\"some-error\")),\n\t\t\t\t)\n\n\t\t\t\tExpect(cDnsmasq.Run()).To(MatchError(\"some-error\"))\n\t\t\t})\n\t\t})\n\n\t\tContext(\"when there is an error writing the dnsmasq conf\", func() {\n\t\t\tIt(\"should return the error\", func() {\n\t\t\t\tgomock.InOrder(\n\t\t\t\t\tmockCmdRunner.EXPECT().Run(\"resolvconf\", \"--disable-updates\"),\n\t\t\t\t\tmockCmdRunner.EXPECT().Run(\"service\", \"dnsmasq\", \"stop\"),\n\t\t\t\t\tmockCmdRunner.EXPECT().Output(\"ip\", \"route\", \"get\", \"1\").Return([]byte(\"some-ip via some-other-ip dev eth0  src some-internal-ip\\n cache\"), nil),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/etc/dnsmasq.d/domain\", strings.NewReader(\"address=/.some-domain/some-external-ip\\naddress=/.cf.internal/127.0.0.1\"), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/etc/dnsmasq.d/interface\", strings.NewReader(\"listen-address=some-internal-ip\"), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/etc/dnsmasq.conf\", strings.NewReader(\"resolv-file=/var/pcfdev/external-resolv.conf\"), os.FileMode(fs.FileModeRootReadWrite)).Return(errors.New(\"some-error\")),\n\t\t\t\t)\n\n\t\t\t\tExpect(cDnsmasq.Run()).To(MatchError(\"some-error\"))\n\t\t\t})\n\t\t})\n\n\t\tContext(\"when there is an error checking the resolv conf\", func() {\n\t\t\tIt(\"should return the error\", func() {\n\t\t\t\tgomock.InOrder(\n\t\t\t\t\tmockCmdRunner.EXPECT().Run(\"resolvconf\", \"--disable-updates\"),\n\t\t\t\t\tmockCmdRunner.EXPECT().Run(\"service\", \"dnsmasq\", \"stop\"),\n\t\t\t\t\tmockCmdRunner.EXPECT().Output(\"ip\", \"route\", \"get\", \"1\").Return([]byte(\"some-ip via some-other-ip dev eth0  src some-internal-ip\\n cache\"), nil),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/etc/dnsmasq.d/domain\", strings.NewReader(\"address=/.some-domain/some-external-ip\\naddress=/.cf.internal/127.0.0.1\"), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/etc/dnsmasq.d/interface\", strings.NewReader(\"listen-address=some-internal-ip\"), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/etc/dnsmasq.conf\", strings.NewReader(\"resolv-file=/var/pcfdev/external-resolv.conf\"), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t\tmockFS.EXPECT().Exists(\"/var/pcfdev/external-resolv.conf\").Return(false, errors.New(\"some-error\")),\n\t\t\t\t)\n\n\t\t\t\tExpect(cDnsmasq.Run()).To(MatchError(\"some-error\"))\n\t\t\t})\n\t\t})\n\n\t\tContext(\"when there is an error reading the resolv conf\", func() {\n\t\t\tIt(\"should return the error\", func() {\n\t\t\t\tgomock.InOrder(\n\t\t\t\t\tmockCmdRunner.EXPECT().Run(\"resolvconf\", \"--disable-updates\"),\n\t\t\t\t\tmockCmdRunner.EXPECT().Run(\"service\", \"dnsmasq\", \"stop\"),\n\t\t\t\t\tmockCmdRunner.EXPECT().Output(\"ip\", \"route\", \"get\", \"1\").Return([]byte(\"some-ip via some-other-ip dev eth0  src some-internal-ip\\n cache\"), nil),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/etc/dnsmasq.d/domain\", strings.NewReader(\"address=/.some-domain/some-external-ip\\naddress=/.cf.internal/127.0.0.1\"), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/etc/dnsmasq.d/interface\", strings.NewReader(\"listen-address=some-internal-ip\"), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/etc/dnsmasq.conf\", strings.NewReader(\"resolv-file=/var/pcfdev/external-resolv.conf\"), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t\tmockFS.EXPECT().Exists(\"/var/pcfdev/external-resolv.conf\").Return(false, nil),\n\t\t\t\t\tmockFS.EXPECT().Read(\"/etc/resolv.conf\").Return(nil, errors.New(\"some-error\")),\n\t\t\t\t)\n\n\t\t\t\tExpect(cDnsmasq.Run()).To(MatchError(\"some-error\"))\n\t\t\t})\n\t\t})\n\n\t\tContext(\"when there is an error writing the pcfdev external resolv.conf\", func() {\n\t\t\tIt(\"should return the error\", func() {\n\t\t\t\tgomock.InOrder(\n\t\t\t\t\tmockCmdRunner.EXPECT().Run(\"resolvconf\", \"--disable-updates\"),\n\t\t\t\t\tmockCmdRunner.EXPECT().Run(\"service\", \"dnsmasq\", \"stop\"),\n\t\t\t\t\tmockCmdRunner.EXPECT().Output(\"ip\", \"route\", \"get\", \"1\").Return([]byte(\"some-ip via some-other-ip dev eth0  src some-internal-ip\\n cache\"), nil),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/etc/dnsmasq.d/domain\", strings.NewReader(\"address=/.some-domain/some-external-ip\\naddress=/.cf.internal/127.0.0.1\"), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/etc/dnsmasq.d/interface\", strings.NewReader(\"listen-address=some-internal-ip\"), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/etc/dnsmasq.conf\", strings.NewReader(\"resolv-file=/var/pcfdev/external-resolv.conf\"), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t\tmockFS.EXPECT().Exists(\"/var/pcfdev/external-resolv.conf\").Return(false, nil),\n\t\t\t\t\tmockFS.EXPECT().Read(\"/etc/resolv.conf\").Return([]byte(\"nameserver 127.0.0.1\\nnameserver some-external-nameserver\\nnameserver some-other-external-nameserver\"), nil),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/var/pcfdev/external-resolv.conf\", strings.NewReader(\"nameserver some-external-nameserver\\nnameserver some-other-external-nameserver\"), os.FileMode(fs.FileModeRootReadWrite)).Return(errors.New(\"some-error\")),\n\t\t\t\t)\n\n\t\t\t\tExpect(cDnsmasq.Run()).To(MatchError(\"some-error\"))\n\t\t\t})\n\t\t})\n\n\t\tContext(\"when there is an error starting dnsmasq\", func() {\n\t\t\tIt(\"should return the error\", func() {\n\t\t\t\tgomock.InOrder(\n\t\t\t\t\tmockCmdRunner.EXPECT().Run(\"resolvconf\", \"--disable-updates\"),\n\t\t\t\t\tmockCmdRunner.EXPECT().Run(\"service\", \"dnsmasq\", \"stop\"),\n\t\t\t\t\tmockCmdRunner.EXPECT().Output(\"ip\", \"route\", \"get\", \"1\").Return([]byte(\"some-ip via some-other-ip dev eth0  src some-internal-ip\\n cache\"), nil),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/etc/dnsmasq.d/domain\", strings.NewReader(\"address=/.some-domain/some-external-ip\\naddress=/.cf.internal/127.0.0.1\"), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/etc/dnsmasq.d/interface\", strings.NewReader(\"listen-address=some-internal-ip\"), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/etc/dnsmasq.conf\", strings.NewReader(\"resolv-file=/var/pcfdev/external-resolv.conf\"), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t\tmockFS.EXPECT().Exists(\"/var/pcfdev/external-resolv.conf\").Return(false, nil),\n\t\t\t\t\tmockFS.EXPECT().Read(\"/etc/resolv.conf\").Return([]byte(\"nameserver 127.0.0.1\\nnameserver some-external-nameserver\\nnameserver some-other-external-nameserver\"), nil),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/var/pcfdev/external-resolv.conf\", strings.NewReader(\"nameserver some-external-nameserver\\nnameserver some-other-external-nameserver\"), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t\tmockCmdRunner.EXPECT().Run(\"service\", \"dnsmasq\", \"start\").Return(errors.New(\"some-error\")),\n\t\t\t\t)\n\n\t\t\t\tExpect(cDnsmasq.Run()).To(MatchError(\"some-error\"))\n\t\t\t})\n\t\t})\n\n\t\tContext(\"when there is an error writing to the /etc/resolv.conf\", func() {\n\t\t\tIt(\"should return the error\", func() {\n\t\t\t\tgomock.InOrder(\n\t\t\t\t\tmockCmdRunner.EXPECT().Run(\"resolvconf\", \"--disable-updates\"),\n\t\t\t\t\tmockCmdRunner.EXPECT().Run(\"service\", \"dnsmasq\", \"stop\"),\n\t\t\t\t\tmockCmdRunner.EXPECT().Output(\"ip\", \"route\", \"get\", \"1\").Return([]byte(\"some-ip via some-other-ip dev eth0  src some-internal-ip\\n cache\"), nil),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/etc/dnsmasq.d/domain\", strings.NewReader(\"address=/.some-domain/some-external-ip\\naddress=/.cf.internal/127.0.0.1\"), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/etc/dnsmasq.d/interface\", strings.NewReader(\"listen-address=some-internal-ip\"), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/etc/dnsmasq.conf\", strings.NewReader(\"resolv-file=/var/pcfdev/external-resolv.conf\"), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t\tmockFS.EXPECT().Exists(\"/var/pcfdev/external-resolv.conf\").Return(false, nil),\n\t\t\t\t\tmockFS.EXPECT().Read(\"/etc/resolv.conf\").Return([]byte(\"nameserver 127.0.0.1\\nnameserver some-external-nameserver\\nnameserver some-other-external-nameserver\"), nil),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/var/pcfdev/external-resolv.conf\", strings.NewReader(\"nameserver some-external-nameserver\\nnameserver some-other-external-nameserver\"), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t\tmockCmdRunner.EXPECT().Run(\"service\", \"dnsmasq\", \"start\"),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/etc/resolv.conf\", strings.NewReader(\"nameserver some-internal-ip\"), os.FileMode(fs.FileModeRootReadWrite)).Return(errors.New(\"some-error\")),\n\t\t\t\t)\n\n\t\t\t\tExpect(cDnsmasq.Run()).To(MatchError(\"some-error\"))\n\t\t\t})\n\t\t})\n\n\t\tContext(\"when the internal ip is not returned from the output\", func() {\n\t\t\tIt(\"should return an error\", func() {\n\t\t\t\tgomock.InOrder(\n\t\t\t\t\tmockCmdRunner.EXPECT().Run(\"resolvconf\", \"--disable-updates\"),\n\t\t\t\t\tmockCmdRunner.EXPECT().Run(\"service\", \"dnsmasq\", \"stop\"),\n\t\t\t\t\tmockCmdRunner.EXPECT().Output(\"ip\", \"route\", \"get\", \"1\").Return([]byte(\"some-bad-output\"), nil),\n\t\t\t\t)\n\n\t\t\t\tExpect(cDnsmasq.Run()).To(MatchError(\"internal ip could not be parsed from output: some-bad-output\"))\n\t\t\t})\n\t\t})\n\n\t\tContext(\"when there is an error retrieving the internal ip\", func() {\n\t\t\tIt(\"should return an error\", func() {\n\t\t\t\tgomock.InOrder(\n\t\t\t\t\tmockCmdRunner.EXPECT().Run(\"resolvconf\", \"--disable-updates\"),\n\t\t\t\t\tmockCmdRunner.EXPECT().Run(\"service\", \"dnsmasq\", \"stop\"),\n\t\t\t\t\tmockCmdRunner.EXPECT().Output(\"ip\", \"route\", \"get\", \"1\").Return(nil, errors.New(\"some-error\")),\n\t\t\t\t)\n\n\t\t\t\tExpect(cDnsmasq.Run()).To(MatchError(\"some-error\"))\n\t\t\t})\n\t\t})\n\n\t\tContext(\"when there is an error writing the dnsmasq configuration\", func() {\n\t\t\tIt(\"should return an error\", func() {\n\t\t\t\tgomock.InOrder(\n\t\t\t\t\tmockCmdRunner.EXPECT().Run(\"resolvconf\", \"--disable-updates\"),\n\t\t\t\t\tmockCmdRunner.EXPECT().Run(\"service\", \"dnsmasq\", \"stop\"),\n\t\t\t\t\tmockCmdRunner.EXPECT().Output(\"ip\", \"route\", \"get\", \"1\").Return([]byte(\"some-ip via some-other-ip dev eth0  src some-internal-ip\\n cache\"), nil),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/etc/dnsmasq.d/domain\", strings.NewReader(\"address=/.some-domain/some-external-ip\\naddress=/.cf.internal/127.0.0.1\"), os.FileMode(fs.FileModeRootReadWrite)).Return(errors.New(\"some-error\")),\n\t\t\t\t)\n\n\t\t\t\tExpect(cDnsmasq.Run()).To(MatchError(\"some-error\"))\n\t\t\t})\n\t\t})\n\n\t\tContext(\"when there is an error writing the dnsmasq interface configuration\", func() {\n\t\t\tIt(\"should return an error\", func() {\n\t\t\t\tgomock.InOrder(\n\t\t\t\t\tmockCmdRunner.EXPECT().Run(\"resolvconf\", \"--disable-updates\"),\n\t\t\t\t\tmockCmdRunner.EXPECT().Run(\"service\", \"dnsmasq\", \"stop\"),\n\t\t\t\t\tmockCmdRunner.EXPECT().Output(\"ip\", \"route\", \"get\", \"1\").Return([]byte(\"some-ip via some-other-ip dev eth0  src some-internal-ip\\n cache\"), nil),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/etc/dnsmasq.d/domain\", strings.NewReader(\"address=/.some-domain/some-external-ip\\naddress=/.cf.internal/127.0.0.1\"), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/etc/dnsmasq.d/interface\", strings.NewReader(\"listen-address=some-internal-ip\"), os.FileMode(fs.FileModeRootReadWrite)).Return(errors.New(\"some-error\")),\n\t\t\t\t)\n\n\t\t\t\tExpect(cDnsmasq.Run()).To(MatchError(\"some-error\"))\n\t\t\t})\n\t\t})\n\t})\n\n\tDescribe(\"#Distro\", func() {\n\t\tIt(\"should return 'oss'\", func() {\n\t\t\tExpect(cDnsmasq.Distro()).To(Equal(provisioner.DistributionOSS))\n\t\t})\n\t})\n})\n"
  },
  {
    "path": "src/provisioner/provisioner/commands/configure_garden_dns.go",
    "content": "package commands\n\nimport (\n\t\"fmt\"\n\t\"provisioner/provisioner\"\n\t\"regexp\"\n\t\"strings\"\n\t\"provisioner/fs\"\n)\n\ntype ConfigureGardenDNS struct {\n\tFS        provisioner.FS\n\tCmdRunner provisioner.CmdRunner\n}\n\nfunc (c *ConfigureGardenDNS) Run() error {\n\toutput, err := c.CmdRunner.Output(\"ip\", \"route\", \"get\", \"1\")\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tvar internalIP string\n\tregex := regexp.MustCompile(`\\s{2}src\\s(.*)`)\n\tif matches := regex.FindStringSubmatch(string(output)); len(matches) > 1 {\n\t\tinternalIP = matches[1]\n\t} else {\n\t\treturn fmt.Errorf(\"internal ip could not be parsed from output: %s\", string(output))\n\t}\n\n\tgardenBytes, err := c.FS.Read(\"/var/vcap/jobs/garden/bin/garden_ctl\")\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tcleanedGardenCtl := []string{}\n\n\tfor _, line := range strings.Split(string(gardenBytes), \"\\n\") {\n\t\tif !strings.Contains(line, \"-dnsServer=\") {\n\t\t\tcleanedGardenCtl = append(cleanedGardenCtl, line)\n\t\t}\n\t}\n\n\tdnsInsertString := strings.Replace(strings.Join(cleanedGardenCtl, \"\\n\"), `1>>$LOG_DIR/garden.stdout.log \\`, fmt.Sprintf(\"-dnsServer=%s \\\\\\n  1>>$LOG_DIR/garden.stdout.log \\\\\", internalIP), fs.FileModeRootReadWrite)\n\treturn c.FS.Write(\"/var/vcap/jobs/garden/bin/garden_ctl\", strings.NewReader(dnsInsertString), fs.FileModeRootReadWrite)\n}\n\nfunc (*ConfigureGardenDNS) Distro() string {\n\treturn provisioner.DistributionOSS\n}\n"
  },
  {
    "path": "src/provisioner/provisioner/commands/configure_garden_dns_test.go",
    "content": "package commands_test\n\nimport (\n\t\"provisioner/provisioner/commands\"\n\t\"provisioner/provisioner/mocks\"\n\t\"strings\"\n\n\t\"github.com/cppforlife/packer-bosh/bosh-provisioner/Godeps/_workspace/src/github.com/cloudfoundry/bosh-agent/errors\"\n\t\"github.com/golang/mock/gomock\"\n\t. \"github.com/onsi/ginkgo\"\n\t. \"github.com/onsi/gomega\"\n\t\"os\"\n\t\"provisioner/fs\"\n\t\"provisioner/provisioner\"\n)\n\nvar _ = Describe(\"ConfigureGardenDNS\", func() {\n\tvar (\n\t\tmockCtrl      *gomock.Controller\n\t\tmockFS        *mocks.MockFS\n\t\tmockCmdRunner *mocks.MockCmdRunner\n\t\tcmd           *commands.ConfigureGardenDNS\n\t)\n\n\tBeforeEach(func() {\n\t\tmockCtrl = gomock.NewController(GinkgoT())\n\t\tmockFS = mocks.NewMockFS(mockCtrl)\n\t\tmockCmdRunner = mocks.NewMockCmdRunner(mockCtrl)\n\t\tcmd = &commands.ConfigureGardenDNS{\n\t\t\tFS:        mockFS,\n\t\t\tCmdRunner: mockCmdRunner,\n\t\t}\n\t})\n\n\tAfterEach(func() {\n\t\tmockCtrl.Finish()\n\t})\n\n\tDescribe(\"#Run\", func() {\n\t\tContext(\"when there are no dnsServers\", func() {\n\t\t\tIt(\"should use the internal IP as a DNS server in garden\", func() {\n\t\t\t\tgomock.InOrder(\n\t\t\t\t\tmockCmdRunner.EXPECT().Output(\"ip\", \"route\", \"get\", \"1\").Return([]byte(\"some-ip via some-other-ip dev eth0  src some-internal-ip\\n cache\"), nil),\n\t\t\t\t\tmockFS.EXPECT().Read(\"/var/vcap/jobs/garden/bin/garden_ctl\").Return([]byte(\"some-executable \\\\\\n  -someProperty=some-value \\\\\\n  1>>$LOG_DIR/garden.stdout.log \\\\\"), nil),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/var/vcap/jobs/garden/bin/garden_ctl\", strings.NewReader(\"some-executable \\\\\\n  -someProperty=some-value \\\\\\n  -dnsServer=some-internal-ip \\\\\\n  1>>$LOG_DIR/garden.stdout.log \\\\\"), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t)\n\n\t\t\t\tExpect(cmd.Run()).To(Succeed())\n\t\t\t})\n\t\t})\n\n\t\tContext(\"when there are dnsServers\", func() {\n\t\t\tIt(\"should use the internal IP as a DNS server in garden\", func() {\n\t\t\t\tgomock.InOrder(\n\t\t\t\t\tmockCmdRunner.EXPECT().Output(\"ip\", \"route\", \"get\", \"1\").Return([]byte(\"some-ip via some-other-ip dev eth0  src some-internal-ip\\n cache\"), nil),\n\t\t\t\t\tmockFS.EXPECT().Read(\"/var/vcap/jobs/garden/bin/garden_ctl\").Return([]byte(\"some-executable \\\\\\n  -someProperty=some-value \\\\\\n  -dnsServer=some-ip \\\\\\n  -dnsServer=some-other-ip \\\\\\n  1>>$LOG_DIR/garden.stdout.log \\\\\"), nil),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/var/vcap/jobs/garden/bin/garden_ctl\", strings.NewReader(\"some-executable \\\\\\n  -someProperty=some-value \\\\\\n  -dnsServer=some-internal-ip \\\\\\n  1>>$LOG_DIR/garden.stdout.log \\\\\"), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t)\n\n\t\t\t\tExpect(cmd.Run()).To(Succeed())\n\t\t\t})\n\t\t})\n\n\t\tContext(\"when there is an error gettting the internal ip\", func() {\n\t\t\tIt(\"return the error\", func() {\n\t\t\t\tmockCmdRunner.EXPECT().Output(\"ip\", \"route\", \"get\", \"1\").Return(nil, errors.New(\"some-error\"))\n\n\t\t\t\tExpect(cmd.Run()).To(MatchError(\"some-error\"))\n\t\t\t})\n\t\t})\n\n\t\tContext(\"when the internal ip cannot be parsed\", func() {\n\t\t\tIt(\"return an error\", func() {\n\t\t\t\tmockCmdRunner.EXPECT().Output(\"ip\", \"route\", \"get\", \"1\").Return([]byte(\"some-bad-output\"), nil)\n\n\t\t\t\tExpect(cmd.Run()).To(MatchError(\"internal ip could not be parsed from output: some-bad-output\"))\n\t\t\t})\n\t\t})\n\n\t\tContext(\"when there is an error reading the garden ctl\", func() {\n\t\t\tIt(\"return the error\", func() {\n\t\t\t\tgomock.InOrder(\n\t\t\t\t\tmockCmdRunner.EXPECT().Output(\"ip\", \"route\", \"get\", \"1\").Return([]byte(\"some-ip via some-other-ip dev eth0  src some-internal-ip\\n cache\"), nil),\n\t\t\t\t\tmockFS.EXPECT().Read(\"/var/vcap/jobs/garden/bin/garden_ctl\").Return(nil, errors.New(\"some-error\")),\n\t\t\t\t)\n\n\t\t\t\tExpect(cmd.Run()).To(MatchError(\"some-error\"))\n\t\t\t})\n\t\t})\n\n\t\tContext(\"when there is an error rewriting the garden ctl\", func() {\n\t\t\tIt(\"return the error\", func() {\n\t\t\t\tgomock.InOrder(\n\t\t\t\t\tmockCmdRunner.EXPECT().Output(\"ip\", \"route\", \"get\", \"1\").Return([]byte(\"some-ip via some-other-ip dev eth0  src some-internal-ip\\n cache\"), nil),\n\t\t\t\t\tmockFS.EXPECT().Read(\"/var/vcap/jobs/garden/bin/garden_ctl\").Return([]byte(\"some-executable \\\\\\n  -someProperty=some-value \\\\\\n  -dnsServer=some-ip \\\\\\n  -dnsServer=some-other-ip \\\\\\n  1>>$LOG_DIR/garden.stdout.log \\\\\"), nil),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/var/vcap/jobs/garden/bin/garden_ctl\", strings.NewReader(\"some-executable \\\\\\n  -someProperty=some-value \\\\\\n  -dnsServer=some-internal-ip \\\\\\n  1>>$LOG_DIR/garden.stdout.log \\\\\"), os.FileMode(fs.FileModeRootReadWrite)).Return(errors.New(\"some-error\")),\n\t\t\t\t)\n\n\t\t\t\tExpect(cmd.Run()).To(MatchError(\"some-error\"))\n\t\t\t})\n\t\t})\n\t})\n\n\tDescribe(\"#Distro\", func() {\n\t\tIt(\"should return 'oss'\", func() {\n\t\t\tExpect(cmd.Distro()).To(Equal(provisioner.DistributionOSS))\n\t\t})\n\t})\n})\n"
  },
  {
    "path": "src/provisioner/provisioner/commands/disable_uaa_hsts.go",
    "content": "package commands\n\nimport (\n\t\"bytes\"\n\t\"encoding/xml\"\n\t\"io/ioutil\"\n\t\"os\"\n\t\"strings\"\n\n\t\"golang.org/x/net/html/charset\"\n\t\"provisioner/provisioner\"\n)\n\ntype DisableUAAHSTS struct {\n\tWebXMLPath string\n}\n\nfunc (d *DisableUAAHSTS) Run() error {\n\tvar webXMLData WebApp\n\n\twebXMLContents, err := ioutil.ReadFile(d.WebXMLPath)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tdecoder := xml.NewDecoder(bytes.NewReader(webXMLContents))\n\tdecoder.CharsetReader = charset.NewReaderLabel\n\tif err := decoder.Decode(&webXMLData); err != nil {\n\t\treturn err\n\t}\n\n\thstsFilter := Filter{\n\t\tFilterName:  \"httpHeaderSecurity\",\n\t\tFilterClass: \"org.apache.catalina.filters.HttpHeaderSecurityFilter\",\n\t\tInitParam: InitParam{\n\t\t\tParamName:  \"hstsEnabled\",\n\t\t\tParamValue: \"false\",\n\t\t},\n\t\tAsyncSupported: true,\n\t}\n\thstsFilterExists := false\n\tfor _, filter := range webXMLData.Filters {\n\t\tif strings.TrimSpace(filter.FilterName) == strings.TrimSpace(hstsFilter.FilterName) &&\n\t\t\tstrings.TrimSpace(filter.FilterClass) == strings.TrimSpace(hstsFilter.FilterClass) &&\n\t\t\tstrings.TrimSpace(filter.InitParam.ParamName) == strings.TrimSpace(hstsFilter.InitParam.ParamName) {\n\t\t\thstsFilterExists = true\n\t\t}\n\t}\n\n\tif hstsFilterExists {\n\t\twebXMLData.Filters = nil\n\t} else {\n\t\twebXMLData.Filters = []Filter{hstsFilter}\n\t}\n\n\twebXMLFile, err := os.OpenFile(d.WebXMLPath, os.O_WRONLY|os.O_TRUNC, 0644)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer webXMLFile.Close()\n\n\tencoder := xml.NewEncoder(webXMLFile)\n\tencoder.Indent(\"\", \"    \")\n\tif err := encoder.Encode(&webXMLData); err != nil {\n\t\tpanic(err)\n\t}\n\n\treturn nil\n}\n\nfunc (*DisableUAAHSTS) Distro() string {\n\treturn provisioner.DistributionPCF\n}\n\ntype WebApp struct {\n\tXMLName xml.Name `xml:\"web-app\"`\n\tFilters []Filter `xml:\"filter\"`\n\tAllXML  string   `xml:\",innerxml\"`\n}\n\ntype Filter struct {\n\tFilterName     string    `xml:\"filter-name\"`\n\tFilterClass    string    `xml:\"filter-class\"`\n\tInitParam      InitParam `xml:\"init-param\"`\n\tAsyncSupported bool      `xml:\"async-supported\"`\n}\n\ntype InitParam struct {\n\tParamName  string `xml:\"param-name\"`\n\tParamValue string `xml:\"param-value\"`\n}\n"
  },
  {
    "path": "src/provisioner/provisioner/commands/disable_uaa_hsts_test.go",
    "content": "package commands_test\n\nimport (\n\t\"encoding/xml\"\n\t\"io/ioutil\"\n\t\"os\"\n\t\"path/filepath\"\n\n\t\"provisioner/provisioner/commands\"\n\n\t. \"github.com/onsi/ginkgo\"\n\t. \"github.com/onsi/gomega\"\n\t\"golang.org/x/net/html/charset\"\n\t\"provisioner/provisioner\"\n)\n\nvar (\n\ttempDir    string\n\twebXMLPath string\n)\n\nvar _ = Describe(\"DisableUAAHSTS\", func() {\n\n\tvar cmd *commands.DisableUAAHSTS\n\n\tDescribe(\"#Run\", func() {\n\t\tBeforeEach(func() {\n\t\t\tvar err error\n\t\t\ttempDir, err = ioutil.TempDir(\"\", \"pcfdev-commands\")\n\t\t\tExpect(err).NotTo(HaveOccurred())\n\t\t})\n\t\tAfterEach(func() {\n\t\t\tos.RemoveAll(tempDir)\n\t\t})\n\n\t\tContext(\"when HSTS is not disabled in tomcat's web.xml\", func() {\n\t\t\tBeforeEach(func() {\n\t\t\t\ttemplateXMLpath := filepath.Join(\"..\", \"..\", \"assets\", \"tomcat-web.xml\")\n\t\t\t\twriteTomcatXML(templateXMLpath)\n\n\t\t\t\tcmd = &commands.DisableUAAHSTS{\n\t\t\t\t\tWebXMLPath: webXMLPath,\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tIt(\"should edit tomcat's web.xml to disable HSTS\", func() {\n\t\t\t\twebXMLData := decodeWebXML(webXMLPath)\n\t\t\t\tExpect(len(webXMLData.Filters)).To(Equal(0))\n\n\t\t\t\tExpect(cmd.Run()).To(Succeed())\n\n\t\t\t\twebXMLData = decodeWebXML(webXMLPath)\n\t\t\t\tExpect(len(webXMLData.Filters)).To(Equal(1))\n\t\t\t\tExpect(webXMLData.Filters[0].FilterName).To(Equal(\"httpHeaderSecurity\"))\n\t\t\t\tExpect(webXMLData.Filters[0].FilterClass).To(Equal(\"org.apache.catalina.filters.HttpHeaderSecurityFilter\"))\n\t\t\t\tExpect(webXMLData.Filters[0].InitParam.ParamName).To(Equal(\"hstsEnabled\"))\n\t\t\t\tExpect(webXMLData.Filters[0].InitParam.ParamValue).To(Equal(\"false\"))\n\t\t\t\tExpect(webXMLData.Filters[0].AsyncSupported).To(BeTrue())\n\t\t\t})\n\t\t})\n\n\t\tContext(\"when HSTS is already disabled in tomcat's web.xml\", func() {\n\t\t\tBeforeEach(func() {\n\t\t\t\ttemplateXMLpath := filepath.Join(\"..\", \"..\", \"assets\", \"tomcat-web-hsts-disabled.xml\")\n\t\t\t\twriteTomcatXML(templateXMLpath)\n\n\t\t\t\tcmd = &commands.DisableUAAHSTS{\n\t\t\t\t\tWebXMLPath: webXMLPath,\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tIt(\"should not add another filter and keep the other filters\", func() {\n\t\t\t\twebXMLData := decodeWebXML(webXMLPath)\n\t\t\t\tExpect(len(webXMLData.Filters)).To(Equal(2))\n\t\t\t\tExpect(webXMLData.Filters[0].FilterName).To(Equal(\"httpHeaderSecurity\"))\n\t\t\t\tExpect(webXMLData.Filters[0].FilterClass).To(Equal(\"org.apache.catalina.filters.HttpHeaderSecurityFilter\"))\n\t\t\t\tExpect(webXMLData.Filters[0].InitParam.ParamName).To(Equal(\"hstsEnabled\"))\n\t\t\t\tExpect(webXMLData.Filters[0].InitParam.ParamValue).To(Equal(\"false\"))\n\t\t\t\tExpect(webXMLData.Filters[0].AsyncSupported).To(BeTrue())\n\n\t\t\t\tExpect(webXMLData.Filters[1].FilterName).To(Equal(\"some-other-filter\"))\n\t\t\t\tExpect(webXMLData.Filters[1].FilterClass).To(Equal(\"some-other-company\"))\n\t\t\t\tExpect(webXMLData.Filters[1].InitParam.ParamName).To(Equal(\"some-param\"))\n\t\t\t\tExpect(webXMLData.Filters[1].InitParam.ParamValue).To(Equal(\"some-value\"))\n\n\t\t\t\tExpect(cmd.Run()).To(Succeed())\n\n\t\t\t\twebXMLData = decodeWebXML(webXMLPath)\n\t\t\t\tExpect(len(webXMLData.Filters)).To(Equal(2))\n\t\t\t\tExpect(webXMLData.Filters[0].FilterName).To(Equal(\"httpHeaderSecurity\"))\n\t\t\t\tExpect(webXMLData.Filters[0].FilterClass).To(Equal(\"org.apache.catalina.filters.HttpHeaderSecurityFilter\"))\n\t\t\t\tExpect(webXMLData.Filters[0].InitParam.ParamName).To(Equal(\"hstsEnabled\"))\n\t\t\t\tExpect(webXMLData.Filters[0].InitParam.ParamValue).To(Equal(\"false\"))\n\t\t\t\tExpect(webXMLData.Filters[0].AsyncSupported).To(BeTrue())\n\t\t\t\tExpect(webXMLData.Filters[1].FilterName).To(Equal(\"some-other-filter\"))\n\t\t\t\tExpect(webXMLData.Filters[1].FilterClass).To(Equal(\"some-other-company\"))\n\t\t\t\tExpect(webXMLData.Filters[1].InitParam.ParamName).To(Equal(\"some-param\"))\n\t\t\t\tExpect(webXMLData.Filters[1].InitParam.ParamValue).To(Equal(\"some-value\"))\n\t\t\t})\n\t\t})\n\n\t\tContext(\"when the path to the web.xml does not exist\", func() {\n\t\t\tBeforeEach(func() {\n\t\t\t\tcmd = &commands.DisableUAAHSTS{\n\t\t\t\t\tWebXMLPath: \"/some/bad/path\",\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tIt(\"should return an error\", func() {\n\t\t\t\tExpect(cmd.Run()).To(MatchError(ContainSubstring(\"no such file or directory\")))\n\t\t\t})\n\t\t})\n\n\t\tContext(\"when the XML being parsed is invalid\", func() {\n\t\t\tBeforeEach(func() {\n\t\t\t\ttemplateXMLpath := filepath.Join(\"..\", \"..\", \"assets\", \"tomcat-web-invalid.xml\")\n\t\t\t\twriteTomcatXML(templateXMLpath)\n\n\t\t\t\tcmd = &commands.DisableUAAHSTS{\n\t\t\t\t\tWebXMLPath: webXMLPath,\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tIt(\"should return an error\", func() {\n\t\t\t\tExpect(cmd.Run()).To(MatchError(ContainSubstring(\"EOF\")))\n\t\t\t})\n\t\t})\n\t})\n\n\tDescribe(\"#Distro\", func() {\n\t\tIt(\"should return 'pcf'\", func() {\n\t\t\tExpect(cmd.Distro()).To(Equal(provisioner.DistributionPCF))\n\t\t})\n\t})\n})\n\nfunc writeTomcatXML(path string) {\n\twebXMLContents, err := ioutil.ReadFile(path)\n\tExpect(err).NotTo(HaveOccurred())\n\n\twebXMLPath = filepath.Join(tempDir, \"web.xml\")\n\tExpect(ioutil.WriteFile(webXMLPath, webXMLContents, 0644)).To(Succeed())\n\n}\n\nfunc decodeWebXML(webXMLPath string) *commands.WebApp {\n\tvar webXMLData commands.WebApp\n\twebXMLReader, err := os.Open(webXMLPath)\n\tdefer webXMLReader.Close()\n\tExpect(err).NotTo(HaveOccurred())\n\tdecoder := xml.NewDecoder(webXMLReader)\n\tdecoder.CharsetReader = charset.NewReaderLabel\n\tExpect(decoder.Decode(&webXMLData)).To(Succeed())\n\treturn &webXMLData\n}\n"
  },
  {
    "path": "src/provisioner/provisioner/commands/open_port.go",
    "content": "package commands\n\nimport (\n\t\"provisioner/provisioner\"\n)\n\ntype OpenPort struct {\n\tCmdRunner provisioner.CmdRunner\n\tPort string\n}\n\nfunc (o *OpenPort)  Run() error {\n\treturn o.CmdRunner.Run(\"iptables\", \"-I\", \"INPUT\", \"-p\", \"tcp\", \"--dport\", o.Port, \"-j\", \"ACCEPT\")\n}\n\nfunc (*OpenPort) Distro() string {\n\treturn provisioner.DistributionOSS\n}"
  },
  {
    "path": "src/provisioner/provisioner/commands/replace_domain.go",
    "content": "package commands\n\nimport (\n\t\"fmt\"\n\t\"provisioner/fs\"\n\t\"provisioner/provisioner\"\n\t\"strings\"\n)\n\ntype ReplaceDomain struct {\n\tCmdRunner provisioner.CmdRunner\n\tFS        provisioner.FS\n\tNewDomain string\n}\n\nfunc (r *ReplaceDomain) Run() error {\n\tfiles, err := r.CmdRunner.Output(\"bash\", \"-c\", \"find /var/vcap/jobs/*/ -type f\")\n\tif err != nil {\n\t\treturn err\n\t}\n\n\toldDomain, err := r.FS.Read(\"/var/pcfdev/domain\")\n\tif err != nil {\n\t\treturn err\n\t}\n\n\terr = r.CmdRunner.Run(\"bash\", \"-c\", fmt.Sprintf(`perl -p -i -e s/\\\\Q%s\\\\E/%s/g %s`, strings.TrimSpace(string(oldDomain)), r.NewDomain, strings.Replace(string(files), \"\\n\", \" \", -1)))\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn r.FS.Write(\"/var/pcfdev/domain\", strings.NewReader(r.NewDomain), fs.FileModeRootReadWrite)\n}\n\nfunc (r *ReplaceDomain) Distro() string {\n\treturn provisioner.DistributionOSS\n}\n"
  },
  {
    "path": "src/provisioner/provisioner/commands/replace_domain_test.go",
    "content": "package commands_test\n\nimport (\n\t\"github.com/golang/mock/gomock\"\n\t\"strings\"\n\n\t. \"github.com/onsi/ginkgo\"\n\t. \"github.com/onsi/gomega\"\n\n\t\"errors\"\n\t\"os\"\n\t\"provisioner/fs\"\n\t\"provisioner/provisioner\"\n\t\"provisioner/provisioner/commands\"\n\t\"provisioner/provisioner/mocks\"\n)\n\nvar _ = Describe(\"ReplaceDomain\", func() {\n\tvar (\n\t\tmockCtrl      *gomock.Controller\n\t\tmockFS        *mocks.MockFS\n\t\tmockCmdRunner *mocks.MockCmdRunner\n\t\tcmd           *commands.ReplaceDomain\n\t)\n\n\tBeforeEach(func() {\n\t\tmockCtrl = gomock.NewController(GinkgoT())\n\t\tmockFS = mocks.NewMockFS(mockCtrl)\n\t\tmockCmdRunner = mocks.NewMockCmdRunner(mockCtrl)\n\t\tcmd = &commands.ReplaceDomain{\n\t\t\tFS:        mockFS,\n\t\t\tCmdRunner: mockCmdRunner,\n\t\t\tNewDomain: \"some-new-domain\",\n\t\t}\n\t})\n\n\tAfterEach(func() {\n\t\tmockCtrl.Finish()\n\t})\n\n\tDescribe(\"#Run\", func() {\n\t\tIt(\"should replace the old domain with the new domain in all files (without following symlinks) in /var/vcap/jobs\", func() {\n\t\t\tgomock.InOrder(\n\t\t\t\tmockCmdRunner.EXPECT().Output(\"bash\", \"-c\", \"find /var/vcap/jobs/*/ -type f\").Return([]byte(\"/var/vcap/jobs/some-job/some-file\\n/var/vcap/jobs/some-job/some-other-file\"), nil),\n\t\t\t\tmockFS.EXPECT().Read(\"/var/pcfdev/domain\").Return([]byte(\"some-old-domain\\n\"), nil),\n\t\t\t\tmockCmdRunner.EXPECT().Run(\"bash\", \"-c\", `perl -p -i -e s/\\\\Qsome-old-domain\\\\E/some-new-domain/g /var/vcap/jobs/some-job/some-file /var/vcap/jobs/some-job/some-other-file`),\n\t\t\t\tmockFS.EXPECT().Write(\"/var/pcfdev/domain\", strings.NewReader(\"some-new-domain\"), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t)\n\n\t\t\tExpect(cmd.Run()).To(Succeed())\n\t\t})\n\n\t\tContext(\"when finding job files fails\", func() {\n\t\t\tIt(\"should return an error\", func() {\n\t\t\t\tmockCmdRunner.EXPECT().Output(\"bash\", \"-c\", \"find /var/vcap/jobs/*/ -type f\").Return(nil, errors.New(\"some-error\"))\n\n\t\t\t\tExpect(cmd.Run()).To(MatchError(\"some-error\"))\n\t\t\t})\n\t\t})\n\n\t\tContext(\"when reading domain file fails\", func() {\n\t\t\tIt(\"should return an error\", func() {\n\t\t\t\tgomock.InOrder(\n\t\t\t\t\tmockCmdRunner.EXPECT().Output(\"bash\", \"-c\", \"find /var/vcap/jobs/*/ -type f\").Return([]byte(\"/var/vcap/jobs/some-job/some-file\\n/var/vcap/jobs/some-job/some-other-file\"), nil),\n\t\t\t\t\tmockFS.EXPECT().Read(\"/var/pcfdev/domain\").Return(nil, errors.New(\"some-error\")),\n\t\t\t\t)\n\t\t\t\tExpect(cmd.Run()).To(MatchError(\"some-error\"))\n\t\t\t})\n\t\t})\n\n\t\tContext(\"when replacing the domain in the job files fails\", func() {\n\t\t\tIt(\"should return an error\", func() {\n\t\t\t\tgomock.InOrder(\n\t\t\t\t\tmockCmdRunner.EXPECT().Output(\"bash\", \"-c\", \"find /var/vcap/jobs/*/ -type f\").Return([]byte(\"/var/vcap/jobs/some-job/some-file\\n/var/vcap/jobs/some-job/some-other-file\"), nil),\n\t\t\t\t\tmockFS.EXPECT().Read(\"/var/pcfdev/domain\").Return([]byte(\"some-old-domain\\n\"), nil),\n\t\t\t\t\tmockCmdRunner.EXPECT().Run(\"bash\", \"-c\", `perl -p -i -e s/\\\\Qsome-old-domain\\\\E/some-new-domain/g /var/vcap/jobs/some-job/some-file /var/vcap/jobs/some-job/some-other-file`).Return(errors.New(\"some-error\")),\n\t\t\t\t)\n\n\t\t\t\tExpect(cmd.Run()).To(MatchError(\"some-error\"))\n\t\t\t})\n\t\t})\n\n\t\tContext(\"when writing the new domain fails\", func() {\n\t\t\tIt(\"should return an error\", func() {\n\t\t\t\tgomock.InOrder(\n\t\t\t\t\tmockCmdRunner.EXPECT().Output(\"bash\", \"-c\", \"find /var/vcap/jobs/*/ -type f\").Return([]byte(\"/var/vcap/jobs/some-job/some-file\\n/var/vcap/jobs/some-job/some-other-file\"), nil),\n\t\t\t\t\tmockFS.EXPECT().Read(\"/var/pcfdev/domain\").Return([]byte(\"some-old-domain\\n\"), nil),\n\t\t\t\t\tmockCmdRunner.EXPECT().Run(\"bash\", \"-c\", `perl -p -i -e s/\\\\Qsome-old-domain\\\\E/some-new-domain/g /var/vcap/jobs/some-job/some-file /var/vcap/jobs/some-job/some-other-file`),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/var/pcfdev/domain\", strings.NewReader(\"some-new-domain\"), os.FileMode(fs.FileModeRootReadWrite)).Return(errors.New(\"some-error\")),\n\t\t\t\t)\n\n\t\t\t\tExpect(cmd.Run()).To(MatchError(\"some-error\"))\n\t\t\t})\n\t\t})\n\t})\n\n\tDescribe(\"#Distro\", func() {\n\t\tIt(\"should return 'oss'\", func() {\n\t\t\tExpect(cmd.Distro()).To(Equal(provisioner.DistributionOSS))\n\t\t})\n\t})\n})\n"
  },
  {
    "path": "src/provisioner/provisioner/commands/setup_api.go",
    "content": "package commands\n\nimport (\n\t\"provisioner/provisioner\"\n\t\"strings\"\n\t\"provisioner/fs\"\n)\n\ntype SetupApi struct {\n\tCmdRunner provisioner.CmdRunner\n\tFS\tprovisioner.FS\n}\n\nfunc (s *SetupApi) Run() error {\n\tmonitrcContents := `check process pcfdev-api\n  with pidfile /var/vcap/sys/run/pcfdev-api/api.pid\n  start program \"/var/pcfdev/api/api_ctl start\"\n  stop program \"/var/pcfdev/api/api_ctl stop\"\n  group vcap\n  mode manual`\n\n\tapiCtlContents := `#!/bin/bash\nset -ex\n\nPIDFILE=/var/vcap/sys/run/pcfdev-api/api.pid\n\ncase $1 in\n\n  start)\n    mkdir -p /var/vcap/sys/run/pcfdev-api\n    /var/pcfdev/api/api &\n    echo $! > ${PIDFILE}\n\n    ;;\n\n  stop)\n    kill $(cat $PIDFILE)\n\n    ;;\n\n  *)\n    echo \"Usage: pcfdev_api_ctl {start|stop}\"\n    ;;\n\nesac`\n\n\terr := s.FS.Write(\"/var/vcap/monit/job/1001_pcfdev_api.monitrc\", strings.NewReader(monitrcContents), fs.FileModeRootReadWrite)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn s.FS.Write(\"/var/pcfdev/api/api_ctl\", strings.NewReader(apiCtlContents), fs.FileModeRootReadWriteExecutable)\n}\n\nfunc(s *SetupApi) Distro() string {\n\treturn provisioner.DistributionOSS\n}"
  },
  {
    "path": "src/provisioner/provisioner/commands/setup_api_test.go",
    "content": "package commands_test\n\nimport (\n\t\"github.com/golang/mock/gomock\"\n\t\"strings\"\n\n\t. \"github.com/onsi/ginkgo\"\n\t. \"github.com/onsi/gomega\"\n\n\t\"errors\"\n\t\"os\"\n\t\"provisioner/fs\"\n\t\"provisioner/provisioner\"\n\t\"provisioner/provisioner/commands\"\n\t\"provisioner/provisioner/mocks\"\n)\n\nvar _ = Describe(\"SetupApi\", func() {\n\tvar (\n\t\tmockCtrl      *gomock.Controller\n\t\tmockFS        *mocks.MockFS\n\t\tmockCmdRunner *mocks.MockCmdRunner\n\t\tcmd           *commands.SetupApi\n\t)\n\n\tBeforeEach(func() {\n\t\tmockCtrl = gomock.NewController(GinkgoT())\n\t\tmockFS = mocks.NewMockFS(mockCtrl)\n\t\tmockCmdRunner = mocks.NewMockCmdRunner(mockCtrl)\n\t\tcmd = &commands.SetupApi{\n\t\t\tFS:        mockFS,\n\t\t\tCmdRunner: mockCmdRunner,\n\t\t}\n\t})\n\n\tAfterEach(func() {\n\t\tmockCtrl.Finish()\n\t})\n\n\tDescribe(\"#Run\", func() {\n\t\tContext(\"When the file system is in a bad state\", func() {\n\t\t\tIt(\"returns the error from failing to write the monitrc\", func() {\n\t\t\t\tmockFS.EXPECT().Write(\"/var/pcfdev/api/api_ctl\", gomock.Any(), os.FileMode(fs.FileModeRootReadWriteExecutable)).AnyTimes()\n\t\t\t\tmockFS.EXPECT().Write(\"/var/vcap/monit/job/1001_pcfdev_api.monitrc\", gomock.Any(), os.FileMode(fs.FileModeRootReadWrite)).Return(errors.New(\"some-error\"))\n\n\t\t\t\tExpect(cmd.Run()).To(MatchError(\"some-error\"))\n\t\t\t})\n\n\t\t\tIt(\"returns the error from failing to write the api_ctl\", func() {\n\t\t\t\tmockFS.EXPECT().Write(\"/var/vcap/monit/job/1001_pcfdev_api.monitrc\", gomock.Any(), os.FileMode(fs.FileModeRootReadWrite)).AnyTimes()\n\t\t\t\tmockFS.EXPECT().Write(\"/var/pcfdev/api/api_ctl\", gomock.Any(), os.FileMode(fs.FileModeRootReadWriteExecutable)).Return(errors.New(\"some-error\"))\n\n\t\t\t\tExpect(cmd.Run()).To(MatchError(\"some-error\"))\n\t\t\t})\n\t\t})\n\n\t\tIt(\"write a monit file to the /var/vcap/monit/job\", func() {\n\t\t\tmonitrc := `check process pcfdev-api\n  with pidfile /var/vcap/sys/run/pcfdev-api/api.pid\n  start program \"/var/pcfdev/api/api_ctl start\"\n  stop program \"/var/pcfdev/api/api_ctl stop\"\n  group vcap\n  mode manual`\n\n\t\t\tmonit_ctl := `#!/bin/bash\nset -ex\n\nPIDFILE=/var/vcap/sys/run/pcfdev-api/api.pid\n\ncase $1 in\n\n  start)\n    mkdir -p /var/vcap/sys/run/pcfdev-api\n    /var/pcfdev/api/api &\n    echo $! > ${PIDFILE}\n\n    ;;\n\n  stop)\n    kill $(cat $PIDFILE)\n\n    ;;\n\n  *)\n    echo \"Usage: pcfdev_api_ctl {start|stop}\"\n    ;;\n\nesac`\n\n\t\t\tgomock.InOrder(\n\t\t\t\tmockFS.EXPECT().Write(\"/var/vcap/monit/job/1001_pcfdev_api.monitrc\", strings.NewReader(monitrc), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\tmockFS.EXPECT().Write(\"/var/pcfdev/api/api_ctl\", strings.NewReader(monit_ctl), os.FileMode(fs.FileModeRootReadWriteExecutable)),\n\t\t\t)\n\n\t\t\tExpect(cmd.Run()).To(Succeed())\n\t\t})\n\t})\n\n\tDescribe(\"#Distro\", func() {\n\t\tIt(\"should return 'oss'\", func() {\n\t\t\tExpect(cmd.Distro()).To(Equal(provisioner.DistributionOSS))\n\t\t})\n\t})\n})\n"
  },
  {
    "path": "src/provisioner/provisioner/commands/setup_cfdot.go",
    "content": "package commands\n\nimport (\n\t\"provisioner/provisioner\"\n\t\"strings\"\n\t\"provisioner/fs\"\n)\n\ntype SetupCFDot struct {\n\tCmdRunner provisioner.CmdRunner\n\tFS        provisioner.FS\n}\n\nfunc (s *SetupCFDot) Run() error {\n\tsetupFileContentsBytes, err := s.FS.Read(\"/var/vcap/jobs/cfdot/bin/setup\")\n\tif err != nil {\n\t\treturn err\n\t}\n\n\treturn s.FS.Write(\"/etc/profile.d/cfdot.sh\", strings.NewReader(string(setupFileContentsBytes)), fs.FileModeRootReadWrite)\n}\n\nfunc (s *SetupCFDot) Distro() string {\n\treturn provisioner.DistributionOSS\n}\n\n"
  },
  {
    "path": "src/provisioner/provisioner/commands/setup_cfdot_test.go",
    "content": "package commands_test\n\nimport (\n\t. \"github.com/onsi/ginkgo\"\n\t. \"github.com/onsi/gomega\"\n\t\"github.com/golang/mock/gomock\"\n\n\t\"provisioner/fs\"\n\t\"provisioner/provisioner\"\n\t\"provisioner/provisioner/mocks\"\n\t\"provisioner/provisioner/commands\"\n\t\"strings\"\n\t\"os\"\n)\n\nvar _ = Describe(\"SetupCFDot\", func() {\n\tvar (\n\t\tmockCtrl      *gomock.Controller\n\t\tmockFS        *mocks.MockFS\n\t\tmockCmdRunner *mocks.MockCmdRunner\n\t\tcmd           *commands.SetupCFDot\n\t)\n\n\tBeforeEach(func() {\n\t\tmockCtrl = gomock.NewController(GinkgoT())\n\t\tmockFS = mocks.NewMockFS(mockCtrl)\n\t\tmockCmdRunner = mocks.NewMockCmdRunner(mockCtrl)\n\t\tcmd = &commands.SetupCFDot{\n\t\t\tFS:        mockFS,\n\t\t\tCmdRunner: mockCmdRunner,\n\t\t}\n\t})\n\n\tAfterEach(func() {\n\t\tmockCtrl.Finish()\n\t})\n\n\tDescribe(\"#Run\", func() {\n\t\tIt(\"should create a new file with content copied from /var/vcap/jobs/cfdot/bin/setup\", func() {\n\t\t\tmockFS.EXPECT().Read(\"/var/vcap/jobs/cfdot/bin/setup\").Return([]byte(\"cf-dot-setup-stuff-here\\n\"), nil)\n\t\t\tmockFS.EXPECT().Write(\"/etc/profile.d/cfdot.sh\", strings.NewReader(\"cf-dot-setup-stuff-here\\n\"), os.FileMode(fs.FileModeRootReadWrite))\n\n\t\t\tExpect(cmd.Run()).To(Succeed())\n\t\t})\n\t})\n\n\tDescribe(\"#Distro\", func() {\n\t\tIt(\"should return 'oss'\", func() {\n\t\t\tExpect(cmd.Distro()).To(Equal(provisioner.DistributionOSS))\n\t\t})\n\t})\n})\n"
  },
  {
    "path": "src/provisioner/provisioner/concrete_cmd_runner.go",
    "content": "package provisioner\n\nimport (\n\t\"io\"\n\t\"os/exec\"\n\t\"syscall\"\n\t\"time\"\n)\n\ntype ConcreteCmdRunner struct {\n\tStdout  io.Writer\n\tStderr  io.Writer\n\tTimeout time.Duration\n}\n\nfunc (r *ConcreteCmdRunner) Run(command string, args ...string) error {\n\tcmd := exec.Command(command, args...)\n\tcmd.Stdout = r.Stdout\n\tcmd.Stderr = r.Stderr\n\tcmd.SysProcAttr = &syscall.SysProcAttr{Setpgid: true}\n\tif err := cmd.Start(); err != nil {\n\t\treturn err\n\t}\n\n\ttimer := time.AfterFunc(r.Timeout, func() {\n\t\tpgid, err := syscall.Getpgid(cmd.Process.Pid)\n\t\tif err == nil {\n\t\t\tsyscall.Kill(-pgid, 15)\n\t\t}\n\t})\n\n\terr := cmd.Wait()\n\n\tif !timer.Stop() {\n\t\treturn &TimeoutError{}\n\t}\n\n\treturn err\n}\n\nfunc (r *ConcreteCmdRunner) Output(command string, args ...string) ([]byte, error) {\n\treturn exec.Command(command, args...).CombinedOutput()\n}\n"
  },
  {
    "path": "src/provisioner/provisioner/concrete_cmd_runner_test.go",
    "content": "package provisioner_test\n\nimport (\n\t\"provisioner/provisioner\"\n\t\"time\"\n\n\t. \"github.com/onsi/ginkgo\"\n\t. \"github.com/onsi/gomega\"\n\t\"github.com/onsi/gomega/gbytes\"\n)\n\nvar _ = Describe(\"ConcreteCmdRunner\", func() {\n\tvar r *provisioner.ConcreteCmdRunner\n\tDescribe(\"#Run\", func() {\n\t\tvar (\n\t\t\tstdout *gbytes.Buffer\n\t\t\tstderr *gbytes.Buffer\n\t\t)\n\n\t\tBeforeEach(func() {\n\t\t\tstdout = gbytes.NewBuffer()\n\t\t\tstderr = gbytes.NewBuffer()\n\n\t\t\tr = &provisioner.ConcreteCmdRunner{\n\t\t\t\tStdout:  stdout,\n\t\t\t\tStderr:  stderr,\n\t\t\t\tTimeout: 2 * time.Second,\n\t\t\t}\n\t\t})\n\n\t\tIt(\"should run commands\", func() {\n\t\t\tExpect(r.Run(\"echo\", \"-n\", \"some output\")).To(Succeed())\n\t\t\tEventually(stdout).Should(gbytes.Say(\"some output\"))\n\n\t\t\tExpect(r.Run(\"bash\", \"-c\", \">&2 echo -n some output\")).To(Succeed())\n\t\t\tEventually(stderr).Should(gbytes.Say(\"some output\"))\n\t\t})\n\n\t\tIt(\"should respects timeouts\", func() {\n\t\t\tExpect(r.Run(\"bash\", \"-c\", \"sleep 5\")).To(MatchError(\"timeout error\"))\n\t\t})\n\n\t\tContext(\"when there is an error\", func() {\n\t\t\tIt(\"should return the error and the output\", func() {\n\t\t\t\tExpect(r.Run(\"/some/bad/binary\")).To(MatchError(ContainSubstring(\"no such file or directory\")))\n\t\t\t})\n\t\t})\n\t})\n\n\tDescribe(\"#Output\", func() {\n\t\tBeforeEach(func() {\n\t\t\tr = &provisioner.ConcreteCmdRunner{\n\t\t\t\tTimeout: 2 * time.Second,\n\t\t\t}\n\t\t})\n\n\t\tIt(\"should run commands and return combined output\", func() {\n\t\t\toutput, err := r.Output(\"bash\", \"-c\", \"echo some-output; >&2 echo -n some-more-output\")\n\t\t\tExpect(err).NotTo(HaveOccurred())\n\t\t\tExpect(output).To(Equal([]byte(\"some-output\\nsome-more-output\")))\n\t\t})\n\n\t\tContext(\"when there is an error\", func() {\n\t\t\tIt(\"should return the error and the output\", func() {\n\t\t\t\t_, err := r.Output(\"/some/bad/binary\")\n\t\t\t\tExpect(err).To(MatchError(ContainSubstring(\"no such file or directory\")))\n\t\t\t})\n\t\t})\n\t})\n})\n"
  },
  {
    "path": "src/provisioner/provisioner/errors.go",
    "content": "package provisioner\n\ntype TimeoutError struct{}\n\nfunc (t *TimeoutError) Error() string {\n\treturn \"timeout error\"\n}\n"
  },
  {
    "path": "src/provisioner/provisioner/mocks/cert.go",
    "content": "// Automatically generated by MockGen. DO NOT EDIT!\n// Source: provisioner/provisioner (interfaces: Cert)\n\npackage mocks\n\nimport (\n\tgomock \"github.com/golang/mock/gomock\"\n)\n\n// Mock of Cert interface\ntype MockCert struct {\n\tctrl     *gomock.Controller\n\trecorder *_MockCertRecorder\n}\n\n// Recorder for MockCert (not exported)\ntype _MockCertRecorder struct {\n\tmock *MockCert\n}\n\nfunc NewMockCert(ctrl *gomock.Controller) *MockCert {\n\tmock := &MockCert{ctrl: ctrl}\n\tmock.recorder = &_MockCertRecorder{mock}\n\treturn mock\n}\n\nfunc (_m *MockCert) EXPECT() *_MockCertRecorder {\n\treturn _m.recorder\n}\n\nfunc (_m *MockCert) GenerateCerts(_param0 string) ([]byte, []byte, []byte, []byte, error) {\n\tret := _m.ctrl.Call(_m, \"GenerateCerts\", _param0)\n\tret0, _ := ret[0].([]byte)\n\tret1, _ := ret[1].([]byte)\n\tret2, _ := ret[2].([]byte)\n\tret3, _ := ret[3].([]byte)\n\tret4, _ := ret[4].(error)\n\treturn ret0, ret1, ret2, ret3, ret4\n}\n\nfunc (_mr *_MockCertRecorder) GenerateCerts(arg0 interface{}) *gomock.Call {\n\treturn _mr.mock.ctrl.RecordCall(_mr.mock, \"GenerateCerts\", arg0)\n}\n"
  },
  {
    "path": "src/provisioner/provisioner/mocks/cmd_runner.go",
    "content": "// Automatically generated by MockGen. DO NOT EDIT!\n// Source: provisioner/provisioner (interfaces: CmdRunner)\n\npackage mocks\n\nimport (\n\tgomock \"github.com/golang/mock/gomock\"\n)\n\n// Mock of CmdRunner interface\ntype MockCmdRunner struct {\n\tctrl     *gomock.Controller\n\trecorder *_MockCmdRunnerRecorder\n}\n\n// Recorder for MockCmdRunner (not exported)\ntype _MockCmdRunnerRecorder struct {\n\tmock *MockCmdRunner\n}\n\nfunc NewMockCmdRunner(ctrl *gomock.Controller) *MockCmdRunner {\n\tmock := &MockCmdRunner{ctrl: ctrl}\n\tmock.recorder = &_MockCmdRunnerRecorder{mock}\n\treturn mock\n}\n\nfunc (_m *MockCmdRunner) EXPECT() *_MockCmdRunnerRecorder {\n\treturn _m.recorder\n}\n\nfunc (_m *MockCmdRunner) Output(_param0 string, _param1 ...string) ([]byte, error) {\n\t_s := []interface{}{_param0}\n\tfor _, _x := range _param1 {\n\t\t_s = append(_s, _x)\n\t}\n\tret := _m.ctrl.Call(_m, \"Output\", _s...)\n\tret0, _ := ret[0].([]byte)\n\tret1, _ := ret[1].(error)\n\treturn ret0, ret1\n}\n\nfunc (_mr *_MockCmdRunnerRecorder) Output(arg0 interface{}, arg1 ...interface{}) *gomock.Call {\n\t_s := append([]interface{}{arg0}, arg1...)\n\treturn _mr.mock.ctrl.RecordCall(_mr.mock, \"Output\", _s...)\n}\n\nfunc (_m *MockCmdRunner) Run(_param0 string, _param1 ...string) error {\n\t_s := []interface{}{_param0}\n\tfor _, _x := range _param1 {\n\t\t_s = append(_s, _x)\n\t}\n\tret := _m.ctrl.Call(_m, \"Run\", _s...)\n\tret0, _ := ret[0].(error)\n\treturn ret0\n}\n\nfunc (_mr *_MockCmdRunnerRecorder) Run(arg0 interface{}, arg1 ...interface{}) *gomock.Call {\n\t_s := append([]interface{}{arg0}, arg1...)\n\treturn _mr.mock.ctrl.RecordCall(_mr.mock, \"Run\", _s...)\n}\n"
  },
  {
    "path": "src/provisioner/provisioner/mocks/command.go",
    "content": "// Automatically generated by MockGen. DO NOT EDIT!\n// Source: provisioner/provisioner (interfaces: Command)\n\npackage mocks\n\nimport (\n\tgomock \"github.com/golang/mock/gomock\"\n)\n\n// Mock of Command interface\ntype MockCommand struct {\n\tctrl     *gomock.Controller\n\trecorder *_MockCommandRecorder\n}\n\n// Recorder for MockCommand (not exported)\ntype _MockCommandRecorder struct {\n\tmock *MockCommand\n}\n\nfunc NewMockCommand(ctrl *gomock.Controller) *MockCommand {\n\tmock := &MockCommand{ctrl: ctrl}\n\tmock.recorder = &_MockCommandRecorder{mock}\n\treturn mock\n}\n\nfunc (_m *MockCommand) EXPECT() *_MockCommandRecorder {\n\treturn _m.recorder\n}\n\nfunc (_m *MockCommand) Distro() string {\n\tret := _m.ctrl.Call(_m, \"Distro\")\n\tret0, _ := ret[0].(string)\n\treturn ret0\n}\n\nfunc (_mr *_MockCommandRecorder) Distro() *gomock.Call {\n\treturn _mr.mock.ctrl.RecordCall(_mr.mock, \"Distro\")\n}\n\nfunc (_m *MockCommand) Run() error {\n\tret := _m.ctrl.Call(_m, \"Run\")\n\tret0, _ := ret[0].(error)\n\treturn ret0\n}\n\nfunc (_mr *_MockCommandRecorder) Run() *gomock.Call {\n\treturn _mr.mock.ctrl.RecordCall(_mr.mock, \"Run\")\n}\n"
  },
  {
    "path": "src/provisioner/provisioner/mocks/fs.go",
    "content": "// Automatically generated by MockGen. DO NOT EDIT!\n// Source: provisioner/provisioner (interfaces: FS)\n\npackage mocks\n\nimport (\n\tgomock \"github.com/golang/mock/gomock\"\n\tio \"io\"\n\tos \"os\"\n)\n\n// Mock of FS interface\ntype MockFS struct {\n\tctrl     *gomock.Controller\n\trecorder *_MockFSRecorder\n}\n\n// Recorder for MockFS (not exported)\ntype _MockFSRecorder struct {\n\tmock *MockFS\n}\n\nfunc NewMockFS(ctrl *gomock.Controller) *MockFS {\n\tmock := &MockFS{ctrl: ctrl}\n\tmock.recorder = &_MockFSRecorder{mock}\n\treturn mock\n}\n\nfunc (_m *MockFS) EXPECT() *_MockFSRecorder {\n\treturn _m.recorder\n}\n\nfunc (_m *MockFS) Exists(_param0 string) (bool, error) {\n\tret := _m.ctrl.Call(_m, \"Exists\", _param0)\n\tret0, _ := ret[0].(bool)\n\tret1, _ := ret[1].(error)\n\treturn ret0, ret1\n}\n\nfunc (_mr *_MockFSRecorder) Exists(arg0 interface{}) *gomock.Call {\n\treturn _mr.mock.ctrl.RecordCall(_mr.mock, \"Exists\", arg0)\n}\n\nfunc (_m *MockFS) Mkdir(_param0 string) error {\n\tret := _m.ctrl.Call(_m, \"Mkdir\", _param0)\n\tret0, _ := ret[0].(error)\n\treturn ret0\n}\n\nfunc (_mr *_MockFSRecorder) Mkdir(arg0 interface{}) *gomock.Call {\n\treturn _mr.mock.ctrl.RecordCall(_mr.mock, \"Mkdir\", arg0)\n}\n\nfunc (_m *MockFS) Read(_param0 string) ([]byte, error) {\n\tret := _m.ctrl.Call(_m, \"Read\", _param0)\n\tret0, _ := ret[0].([]byte)\n\tret1, _ := ret[1].(error)\n\treturn ret0, ret1\n}\n\nfunc (_mr *_MockFSRecorder) Read(arg0 interface{}) *gomock.Call {\n\treturn _mr.mock.ctrl.RecordCall(_mr.mock, \"Read\", arg0)\n}\n\nfunc (_m *MockFS) Write(_param0 string, _param1 io.Reader, _param2 os.FileMode) error {\n\tret := _m.ctrl.Call(_m, \"Write\", _param0, _param1, _param2)\n\tret0, _ := ret[0].(error)\n\treturn ret0\n}\n\nfunc (_mr *_MockFSRecorder) Write(arg0, arg1, arg2 interface{}) *gomock.Call {\n\treturn _mr.mock.ctrl.RecordCall(_mr.mock, \"Write\", arg0, arg1, arg2)\n}\n"
  },
  {
    "path": "src/provisioner/provisioner/mocks/ui.go",
    "content": "// Automatically generated by MockGen. DO NOT EDIT!\n// Source: provisioner/provisioner (interfaces: UI)\n\npackage mocks\n\nimport (\n\tgomock \"github.com/golang/mock/gomock\"\n)\n\n// Mock of UI interface\ntype MockUI struct {\n\tctrl     *gomock.Controller\n\trecorder *_MockUIRecorder\n}\n\n// Recorder for MockUI (not exported)\ntype _MockUIRecorder struct {\n\tmock *MockUI\n}\n\nfunc NewMockUI(ctrl *gomock.Controller) *MockUI {\n\tmock := &MockUI{ctrl: ctrl}\n\tmock.recorder = &_MockUIRecorder{mock}\n\treturn mock\n}\n\nfunc (_m *MockUI) EXPECT() *_MockUIRecorder {\n\treturn _m.recorder\n}\n\nfunc (_m *MockUI) PrintHelpText(_param0 string) error {\n\tret := _m.ctrl.Call(_m, \"PrintHelpText\", _param0)\n\tret0, _ := ret[0].(error)\n\treturn ret0\n}\n\nfunc (_mr *_MockUIRecorder) PrintHelpText(arg0 interface{}) *gomock.Call {\n\treturn _mr.mock.ctrl.RecordCall(_mr.mock, \"PrintHelpText\", arg0)\n}\n"
  },
  {
    "path": "src/provisioner/provisioner/provisioner.go",
    "content": "package provisioner\n\nimport (\n\t\"bytes\"\n\t\"io\"\n\t\"os\"\n\t\"provisioner/fs\"\n)\n\n//go:generate mockgen -package mocks -destination mocks/cert.go provisioner/provisioner Cert\ntype Cert interface {\n\tGenerateCerts(domain string) (certificate []byte, privateKey []byte, caCertificate []byte, caPrivateKey []byte, err error)\n}\n\n//go:generate mockgen -package mocks -destination mocks/cmd_runner.go provisioner/provisioner CmdRunner\ntype CmdRunner interface {\n\tRun(command string, args ...string) error\n\tOutput(command string, args ...string) (output []byte, err error)\n}\n\n//go:generate mockgen -package mocks -destination mocks/fs.go provisioner/provisioner FS\ntype FS interface {\n\tMkdir(directory string) error\n\tWrite(path string, contents io.Reader, perm os.FileMode) error\n\tRead(path string) (contents []byte, err error)\n\tExists(path string) (bool, error)\n}\n\n//go:generate mockgen -package mocks -destination mocks/ui.go provisioner/provisioner UI\ntype UI interface {\n\tPrintHelpText(domain string) error\n}\n\n//go:generate mockgen -package mocks -destination mocks/command.go provisioner/provisioner Command\ntype Command interface {\n\tRun() error\n\tDistro() string\n}\n\ntype Provisioner struct {\n\tCert             Cert\n\tCmdRunner        CmdRunner\n\tFS               FS\n\tUI               UI\n\tDisableUAAHSTS   Command\n\tConfigureDnsmasq Command\n\tCommands         []Command\n\n\tDistro string\n}\n\nconst (\n\tDistributionOSS = \"oss\"\n\tDistributionPCF = \"pcf\"\n)\n\nfunc (p *Provisioner) Provision(provisionScriptPath string, args ...string) error {\n\tdomain := args[0]\n\n\tcert, key, caCert, _, err := p.Cert.GenerateCerts(domain)\n\tif err != nil {\n\t\treturn err\n\t}\n\n\tif err := p.FS.Mkdir(\"/var/vcap/jobs/gorouter/config\"); err != nil {\n\t\treturn err\n\t}\n\n\tif err := p.FS.Write(\"/var/vcap/jobs/gorouter/config/cert.pem\", bytes.NewReader(cert), fs.FileModeRootReadWrite); err != nil {\n\t\treturn err\n\t}\n\n\tif err := p.FS.Write(\"/var/vcap/jobs/gorouter/config/key.pem\", bytes.NewReader(key), fs.FileModeRootReadWrite); err != nil {\n\t\treturn err\n\t}\n\n\tif err := p.FS.Mkdir(\"/var/pcfdev/openssl\"); err != nil {\n\t\treturn err\n\t}\n\n\tif err := p.FS.Write(\"/var/pcfdev/openssl/ca_cert.pem\", bytes.NewReader(caCert), fs.FileModeRootReadWrite); err != nil {\n\t\treturn err\n\t}\n\n\tfor _, command := range p.Commands {\n\t\tif p.Distro == DistributionOSS && command.Distro() == DistributionPCF {\n\t\t\tcontinue\n\t\t}\n\t\tif err := command.Run(); err != nil {\n\t\t\treturn err\n\t\t}\n\t}\n\n\tif err := p.CmdRunner.Run(provisionScriptPath, args...); err != nil {\n\t\treturn err\n\t}\n\n\treturn p.FS.Write(\"/run/pcfdev-healthcheck\", bytes.NewReader([]byte(\"\")), fs.FileModeRootReadWrite)\n}\n"
  },
  {
    "path": "src/provisioner/provisioner/provisioner_suite_test.go",
    "content": "package provisioner_test\n\nimport (\n\t. \"github.com/onsi/ginkgo\"\n\t. \"github.com/onsi/gomega\"\n\n\t\"testing\"\n)\n\nfunc TestProvisioner(t *testing.T) {\n\tRegisterFailHandler(Fail)\n\tRunSpecs(t, \"Provisioner Suite\")\n}\n"
  },
  {
    "path": "src/provisioner/provisioner/provisioner_test.go",
    "content": "package provisioner_test\n\nimport (\n\t\"bytes\"\n\t\"errors\"\n\t\"provisioner/provisioner\"\n\t\"provisioner/provisioner/mocks\"\n\n\t\"github.com/golang/mock/gomock\"\n\n\t. \"github.com/onsi/ginkgo\"\n\t. \"github.com/onsi/gomega\"\n\t\"os\"\n\t\"provisioner/fs\"\n)\n\nvar _ = Describe(\"Provisioner\", func() {\n\tDescribe(\"#Provision\", func() {\n\t\tvar (\n\t\t\tp             *provisioner.Provisioner\n\t\t\tmockCtrl      *gomock.Controller\n\t\t\tmockCert      *mocks.MockCert\n\t\t\tmockCmdRunner *mocks.MockCmdRunner\n\t\t\tmockFS        *mocks.MockFS\n\t\t\tmockUI        *mocks.MockUI\n\t\t\tfirstCommand  *mocks.MockCommand\n\t\t\tsecondCommand *mocks.MockCommand\n\t\t)\n\n\t\tBeforeEach(func() {\n\t\t\tmockCtrl = gomock.NewController(GinkgoT())\n\t\t\tmockCert = mocks.NewMockCert(mockCtrl)\n\t\t\tmockCmdRunner = mocks.NewMockCmdRunner(mockCtrl)\n\t\t\tmockFS = mocks.NewMockFS(mockCtrl)\n\t\t\tmockUI = mocks.NewMockUI(mockCtrl)\n\t\t\tfirstCommand = mocks.NewMockCommand(mockCtrl)\n\t\t\tsecondCommand = mocks.NewMockCommand(mockCtrl)\n\n\t\t\tp = &provisioner.Provisioner{\n\t\t\t\tCert:      mockCert,\n\t\t\t\tCmdRunner: mockCmdRunner,\n\t\t\t\tFS:        mockFS,\n\t\t\t\tUI:        mockUI,\n\t\t\t\tCommands: []provisioner.Command{\n\t\t\t\t\tfirstCommand,\n\t\t\t\t\tsecondCommand,\n\t\t\t\t},\n\n\t\t\t\tDistro: provisioner.DistributionPCF,\n\t\t\t}\n\t\t})\n\n\t\tAfterEach(func() {\n\t\t\tmockCtrl.Finish()\n\t\t})\n\n\t\tIt(\"should provision a VM\", func() {\n\t\t\tgomock.InOrder(\n\t\t\t\tmockCert.EXPECT().GenerateCerts(\"some-domain\").Return([]byte(\"some-cert\"), []byte(\"some-key\"), []byte(\"some-ca-cert\"), []byte(\"some-ca-key\"), nil),\n\t\t\t\tmockFS.EXPECT().Mkdir(\"/var/vcap/jobs/gorouter/config\"),\n\t\t\t\tmockFS.EXPECT().Write(\"/var/vcap/jobs/gorouter/config/cert.pem\", bytes.NewReader([]byte(\"some-cert\")), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\tmockFS.EXPECT().Write(\"/var/vcap/jobs/gorouter/config/key.pem\", bytes.NewReader([]byte(\"some-key\")), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\tmockFS.EXPECT().Mkdir(\"/var/pcfdev/openssl\"),\n\t\t\t\tmockFS.EXPECT().Write(\"/var/pcfdev/openssl/ca_cert.pem\", bytes.NewReader([]byte(\"some-ca-cert\")), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\tfirstCommand.EXPECT().Run(),\n\t\t\t\tsecondCommand.EXPECT().Run(),\n\t\t\t\tmockCmdRunner.EXPECT().Run(\"some-provision-script-path\", \"some-domain\"),\n\t\t\t\tmockFS.EXPECT().Write(\"/run/pcfdev-healthcheck\", bytes.NewReader([]byte(\"\")), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t)\n\n\t\t\tExpect(p.Provision(\"some-provision-script-path\", \"some-domain\")).To(Succeed())\n\t\t})\n\n\t\tContext(\"when the distribution is oss\", func() {\n\t\t\tIt(\"should not run pcf 'Commands'\", func() {\n\t\t\t\tp.Distro = provisioner.DistributionOSS\n\n\t\t\t\tgomock.InOrder(\n\t\t\t\t\tmockCert.EXPECT().GenerateCerts(\"some-domain\").Return([]byte(\"some-cert\"), []byte(\"some-key\"), []byte(\"some-ca-cert\"), []byte(\"some-ca-key\"), nil),\n\t\t\t\t\tmockFS.EXPECT().Mkdir(\"/var/vcap/jobs/gorouter/config\"),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/var/vcap/jobs/gorouter/config/cert.pem\", bytes.NewReader([]byte(\"some-cert\")), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/var/vcap/jobs/gorouter/config/key.pem\", bytes.NewReader([]byte(\"some-key\")), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t\tmockFS.EXPECT().Mkdir(\"/var/pcfdev/openssl\"),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/var/pcfdev/openssl/ca_cert.pem\", bytes.NewReader([]byte(\"some-ca-cert\")), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t\tfirstCommand.EXPECT().Distro().Return(provisioner.DistributionPCF),\n\t\t\t\t\tsecondCommand.EXPECT().Distro().Return(provisioner.DistributionOSS),\n\t\t\t\t\tsecondCommand.EXPECT().Run(),\n\t\t\t\t\tmockCmdRunner.EXPECT().Run(\"some-provision-script-path\", \"some-domain\"),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/run/pcfdev-healthcheck\", bytes.NewReader([]byte(\"\")), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t)\n\n\t\t\t\tExpect(p.Provision(\"some-provision-script-path\", \"some-domain\")).To(Succeed())\n\t\t\t})\n\t\t})\n\n\t\tContext(\"when there is an error generating certificate\", func() {\n\t\t\tIt(\"should return the error\", func() {\n\t\t\t\tmockCert.EXPECT().GenerateCerts(\"some-domain\").Return(nil, nil, nil, nil, errors.New(\"some-error\"))\n\n\t\t\t\tExpect(p.Provision(\"some-provision-script-path\", \"some-domain\")).To(MatchError(\"some-error\"))\n\t\t\t})\n\t\t})\n\n\t\tContext(\"when there is an error creating the gorouter config directory\", func() {\n\t\t\tIt(\"should return the error\", func() {\n\t\t\t\tgomock.InOrder(\n\t\t\t\t\tmockCert.EXPECT().GenerateCerts(\"some-domain\").Return([]byte(\"some-cert\"), []byte(\"some-key\"), []byte(\"some-ca-cert\"), []byte(\"some-ca-key\"), nil),\n\t\t\t\t\tmockFS.EXPECT().Mkdir(\"/var/vcap/jobs/gorouter/config\").Return(errors.New(\"some-error\")),\n\t\t\t\t)\n\n\t\t\t\tExpect(p.Provision(\"some-provision-script-path\", \"some-domain\")).To(MatchError(\"some-error\"))\n\t\t\t})\n\t\t})\n\n\t\tContext(\"when there is an error writing the certificate\", func() {\n\t\t\tIt(\"should return the error\", func() {\n\t\t\t\tgomock.InOrder(\n\t\t\t\t\tmockCert.EXPECT().GenerateCerts(\"some-domain\").Return([]byte(\"some-cert\"), []byte(\"some-key\"), []byte(\"some-ca-cert\"), []byte(\"some-ca-key\"), nil),\n\t\t\t\t\tmockFS.EXPECT().Mkdir(\"/var/vcap/jobs/gorouter/config\"),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/var/vcap/jobs/gorouter/config/cert.pem\", bytes.NewReader([]byte(\"some-cert\")), os.FileMode(fs.FileModeRootReadWrite)).Return(errors.New(\"some-error\")),\n\t\t\t\t)\n\n\t\t\t\tExpect(p.Provision(\"some-provision-script-path\", \"some-domain\")).To(MatchError(\"some-error\"))\n\t\t\t})\n\t\t})\n\n\t\tContext(\"when there is an error writing the private key\", func() {\n\t\t\tIt(\"should return the error\", func() {\n\t\t\t\tgomock.InOrder(\n\t\t\t\t\tmockCert.EXPECT().GenerateCerts(\"some-domain\").Return([]byte(\"some-cert\"), []byte(\"some-key\"), []byte(\"some-ca-cert\"), []byte(\"some-ca-key\"), nil),\n\t\t\t\t\tmockFS.EXPECT().Mkdir(\"/var/vcap/jobs/gorouter/config\"),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/var/vcap/jobs/gorouter/config/cert.pem\", bytes.NewReader([]byte(\"some-cert\")), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/var/vcap/jobs/gorouter/config/key.pem\", bytes.NewReader([]byte(\"some-key\")), os.FileMode(fs.FileModeRootReadWrite)).Return(errors.New(\"some-error\")),\n\t\t\t\t)\n\n\t\t\t\tExpect(p.Provision(\"some-provision-script-path\", \"some-domain\")).To(MatchError(\"some-error\"))\n\t\t\t})\n\t\t})\n\n\t\tContext(\"when there is an error creating the openssl directory\", func() {\n\t\t\tIt(\"should return the error\", func() {\n\t\t\t\tgomock.InOrder(\n\t\t\t\t\tmockCert.EXPECT().GenerateCerts(\"some-domain\").Return([]byte(\"some-cert\"), []byte(\"some-key\"), []byte(\"some-ca-cert\"), []byte(\"some-ca-key\"), nil),\n\t\t\t\t\tmockFS.EXPECT().Mkdir(\"/var/vcap/jobs/gorouter/config\"),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/var/vcap/jobs/gorouter/config/cert.pem\", bytes.NewReader([]byte(\"some-cert\")), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/var/vcap/jobs/gorouter/config/key.pem\", bytes.NewReader([]byte(\"some-key\")), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t\tmockFS.EXPECT().Mkdir(\"/var/pcfdev/openssl\").Return(errors.New(\"some-error\")),\n\t\t\t\t)\n\n\t\t\t\tExpect(p.Provision(\"some-provision-script-path\", \"some-domain\")).To(MatchError(\"some-error\"))\n\t\t\t})\n\t\t})\n\n\t\tContext(\"when there is an error writing the CA certificate\", func() {\n\t\t\tIt(\"should return the error\", func() {\n\t\t\t\tgomock.InOrder(\n\t\t\t\t\tmockCert.EXPECT().GenerateCerts(\"some-domain\").Return([]byte(\"some-cert\"), []byte(\"some-key\"), []byte(\"some-ca-cert\"), []byte(\"some-ca-key\"), nil),\n\t\t\t\t\tmockFS.EXPECT().Mkdir(\"/var/vcap/jobs/gorouter/config\"),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/var/vcap/jobs/gorouter/config/cert.pem\", bytes.NewReader([]byte(\"some-cert\")), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/var/vcap/jobs/gorouter/config/key.pem\", bytes.NewReader([]byte(\"some-key\")), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t\tmockFS.EXPECT().Mkdir(\"/var/pcfdev/openssl\"),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/var/pcfdev/openssl/ca_cert.pem\", bytes.NewReader([]byte(\"some-ca-cert\")), os.FileMode(fs.FileModeRootReadWrite)).Return(errors.New(\"some-error\")),\n\t\t\t\t)\n\n\t\t\t\tExpect(p.Provision(\"some-provision-script-path\", \"some-domain\")).To(MatchError(\"some-error\"))\n\t\t\t})\n\t\t})\n\n\t\tContext(\"when a command fails\", func() {\n\t\t\tIt(\"should return an error\", func() {\n\t\t\t\tgomock.InOrder(\n\t\t\t\t\tmockCert.EXPECT().GenerateCerts(\"some-domain\").Return([]byte(\"some-cert\"), []byte(\"some-key\"), []byte(\"some-ca-cert\"), []byte(\"some-ca-key\"), nil),\n\t\t\t\t\tmockFS.EXPECT().Mkdir(\"/var/vcap/jobs/gorouter/config\"),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/var/vcap/jobs/gorouter/config/cert.pem\", bytes.NewReader([]byte(\"some-cert\")), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/var/vcap/jobs/gorouter/config/key.pem\", bytes.NewReader([]byte(\"some-key\")), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t\tmockFS.EXPECT().Mkdir(\"/var/pcfdev/openssl\"),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/var/pcfdev/openssl/ca_cert.pem\", bytes.NewReader([]byte(\"some-ca-cert\")), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t\tfirstCommand.EXPECT().Run().Return(errors.New(\"some-error\")),\n\t\t\t\t)\n\n\t\t\t\tExpect(p.Provision(\"some-provision-script-path\", \"some-domain\")).To(MatchError(\"some-error\"))\n\t\t\t})\n\t\t})\n\n\t\tContext(\"when there is an error running the provision script\", func() {\n\t\t\tIt(\"should return the error\", func() {\n\t\t\t\tgomock.InOrder(\n\t\t\t\t\tmockCert.EXPECT().GenerateCerts(\"some-domain\").Return([]byte(\"some-cert\"), []byte(\"some-key\"), []byte(\"some-ca-cert\"), []byte(\"some-ca-key\"), nil),\n\t\t\t\t\tmockFS.EXPECT().Mkdir(\"/var/vcap/jobs/gorouter/config\"),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/var/vcap/jobs/gorouter/config/cert.pem\", bytes.NewReader([]byte(\"some-cert\")), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/var/vcap/jobs/gorouter/config/key.pem\", bytes.NewReader([]byte(\"some-key\")), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t\tmockFS.EXPECT().Mkdir(\"/var/pcfdev/openssl\"),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/var/pcfdev/openssl/ca_cert.pem\", bytes.NewReader([]byte(\"some-ca-cert\")), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t\tfirstCommand.EXPECT().Run(),\n\t\t\t\t\tsecondCommand.EXPECT().Run(),\n\t\t\t\t\tmockCmdRunner.EXPECT().Run(\"some-provision-script-path\", \"some-domain\").Return(errors.New(\"some-error\")),\n\t\t\t\t)\n\n\t\t\t\tExpect(p.Provision(\"some-provision-script-path\", \"some-domain\")).To(MatchError(\"some-error\"))\n\t\t\t})\n\t\t})\n\n\t\tContext(\"when there is an error writing the healthcheck file\", func() {\n\t\t\tIt(\"should return the error\", func() {\n\t\t\t\tgomock.InOrder(\n\t\t\t\t\tmockCert.EXPECT().GenerateCerts(\"some-domain\").Return([]byte(\"some-cert\"), []byte(\"some-key\"), []byte(\"some-ca-cert\"), []byte(\"some-ca-key\"), nil),\n\t\t\t\t\tmockFS.EXPECT().Mkdir(\"/var/vcap/jobs/gorouter/config\"),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/var/vcap/jobs/gorouter/config/cert.pem\", bytes.NewReader([]byte(\"some-cert\")), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/var/vcap/jobs/gorouter/config/key.pem\", bytes.NewReader([]byte(\"some-key\")), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t\tmockFS.EXPECT().Mkdir(\"/var/pcfdev/openssl\"),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/var/pcfdev/openssl/ca_cert.pem\", bytes.NewReader([]byte(\"some-ca-cert\")), os.FileMode(fs.FileModeRootReadWrite)),\n\t\t\t\t\tfirstCommand.EXPECT().Run(),\n\t\t\t\t\tsecondCommand.EXPECT().Run(),\n\t\t\t\t\tmockCmdRunner.EXPECT().Run(\"some-provision-script-path\", \"some-domain\"),\n\t\t\t\t\tmockFS.EXPECT().Write(\"/run/pcfdev-healthcheck\", bytes.NewReader([]byte(\"\")), os.FileMode(fs.FileModeRootReadWrite)).Return(errors.New(\"some-error\")),\n\t\t\t\t)\n\n\t\t\t\tExpect(p.Provision(\"some-provision-script-path\", \"some-domain\")).To(MatchError(\"some-error\"))\n\t\t\t})\n\t\t})\n\t})\n})\n"
  },
  {
    "path": "versions.json",
    "content": "{\n  \"releases\": {\n    \"binary-buildpack\" : {\n      \"version\": \"1.0.11\",\n      \"sha1\": \"897826f41d17ddc82967e8ced549c8f8565715b7\",\n      \"source_location\": \"https://github.com/cloudfoundry/binary-buildpack-release.git\",\n      \"compiled_release_url\": \"https://s3.amazonaws.com/pcfdev/compiled-releases/binary-buildpack-1.0.11-1496755011.tgz\"\n    },\n    \"capi\" : {\n      \"version\": \"1.27.0-2-gc89eb61\",\n      \"sha1\": \"8e03eea2c64b3baf9de092fef13f71e3f17e460e\",\n      \"source_location\": \"https://github.com/cloudfoundry/capi-release.git\",\n      \"compiled_release_url\": \"https://s3.amazonaws.com/pcfdev/compiled-releases/capi-1.27.0-2-gc89eb61-1501026707.tgz\"\n    },\n    \"cf\" : {\n      \"version\": \"v259-1-g51ea620b\",\n      \"sha1\": \"45eee862a3f5aabe1b18b95929afd163899d3ecc\",\n      \"source_location\": \"https://github.com/cloudfoundry/cf-release.git\",\n      \"compiled_release_url\": \"https://s3.amazonaws.com/pcfdev/compiled-releases/cf-v259-1-g51ea620b-1500397980.tgz\"\n    },\n    \"cf-mysql\" : {\n      \"version\": \"v35-1-g2ff76af5\",\n      \"sha1\": \"b2407a1dff3389ffdf18f1dd2d90ddce20e331d6\",\n      \"source_location\": \"https://github.com/cloudfoundry/cf-mysql-release.git\",\n      \"compiled_release_url\": \"https://s3.amazonaws.com/pcfdev/compiled-releases/cf-mysql-v35-1-g2ff76af5-1501012547.tgz\"\n    },\n    \"cflinuxfs2-rootfs\" : {\n      \"version\": \"v1.116.0\",\n      \"sha1\": \"fecbd6a141cd0956d319122d05ff210a096186ac\",\n      \"source_location\": \"https://github.com/cloudfoundry/cflinuxfs2-rootfs-release.git\",\n      \"compiled_release_url\": \"https://s3.amazonaws.com/pcfdev/compiled-releases/cflinuxfs2-v1.116.0-1497451333.tgz\"\n    },\n    \"cf-networking\" : {\n      \"version\": \"v0.25.0-2-gc862e46\",\n      \"sha1\": \"3fb5c16ceb63be4edfd81309631fe1dc89f69aab\",\n      \"source_location\": \"https://github.com/cloudfoundry-incubator/cf-networking-release\",\n      \"compiled_release_url\": \"https://s3.amazonaws.com/pcfdev/compiled-releases/cf-networking-v0.25.0-2-gc862e46-1501024622.tgz\"\n    },\n    \"consul\" : {\n      \"version\": \"v152\",\n      \"sha1\": \"96ef889efa01087f0495f55853e12ef37e114746\",\n      \"source_location\": \"https://github.com/cloudfoundry-incubator/consul-release.git\",\n      \"compiled_release_url\": \"https://s3.amazonaws.com/pcfdev/compiled-releases/consul-v152-1499709321.tgz\"\n    },\n    \"diego\" : {\n      \"version\": \"v1.15.0-2-gf3b6fd7a\",\n      \"sha1\": \"15bd67d178791403469ceae62329ac8b29fbe5f6\",\n      \"source_location\": \"https://github.com/cloudfoundry/diego-release.git\",\n      \"compiled_release_url\": \"https://s3.amazonaws.com/pcfdev/compiled-releases/diego-v1.15.0-2-gf3b6fd7a-1501016603.tgz\"\n    },\n    \"etcd\" : {\n      \"version\": \"v104\",\n      \"sha1\": \"d07f31e9e12b5f9d9c224411aac013afed1cf658\",\n      \"source_location\": \"https://github.com/cloudfoundry-incubator/etcd-release.git\",\n      \"compiled_release_url\": \"https://s3.amazonaws.com/pcfdev/compiled-releases/etcd-v104-1499707363.tgz\"\n    },\n    \"garden-runc\" : {\n      \"version\": \"v1.5.0\",\n      \"sha1\": \"2d14be094a078047bfadf443ceb2f9799d5d3024\",\n      \"source_location\": \"https://github.com/cloudfoundry/garden-runc-release.git\",\n      \"compiled_release_url\": \"https://s3.amazonaws.com/pcfdev/compiled-releases/garden-runc-v1.5.0-1501067825.tgz\"\n    },\n    \"go-buildpack\" : {\n      \"version\": \"1.8.1\",\n      \"sha1\": \"5a1ec163a70fc2f4602c2b76ab20f61a08730b60\",\n      \"source_location\": \"https://github.com/cloudfoundry/go-buildpack-release.git\",\n      \"compiled_release_url\": \"https://s3.amazonaws.com/pcfdev/compiled-releases/go-buildpack-1.8.1-1498226718.tgz\"\n    },\n    \"java-offline-buildpack\" : {\n      \"version\": \"3.16\",\n      \"sha1\": \"ef9469f31363d55bbe327e899288be7f37f17e66\",\n      \"source_location\": \"https://github.com/cloudfoundry/java-offline-buildpack-release.git\",\n      \"compiled_release_url\": \"https://s3.amazonaws.com/pcfdev/compiled-releases/java-offline-buildpack-3.16-1496353415.tgz\"\n    },\n    \"local-volume\" : {\n      \"version\": \"brokerapi2.9-97-g54cd13f\",\n      \"sha1\": \"846a49f3bec78c5d53cf1f69c2cfe9b4c491f21d\",\n      \"source_location\": \"https://github.com/cloudfoundry-incubator/local-volume-release.git\",\n      \"compiled_release_url\": \"https://s3.amazonaws.com/pcfdev/compiled-releases/local-volume-brokerapi2.9-97-g54cd13f-1498517156.tgz\"\n    },\n    \"loggregator\" : {\n      \"version\": \"v85-1-g331bf230\",\n      \"sha1\": \"819e301ee0660702d531bb3fc322188b3dfe5164\",\n      \"source_location\": \"https://github.com/cloudfoundry/loggregator.git\",\n      \"compiled_release_url\": \"https://s3.amazonaws.com/pcfdev/compiled-releases/loggregator-v85-1-g331bf230-1501013779.tgz\"\n    },\n    \"nats\" : {\n      \"version\": \"v14-1-gd95b4d6\",\n      \"sha1\": \"d35ef533b13a0cd2c8a2304a508388ede7305d02\",\n      \"source_location\": \"https://github.com/cloudfoundry/nats-release.git\",\n      \"compiled_release_url\": \"https://s3.amazonaws.com/pcfdev/compiled-releases/nats-v14-1-gd95b4d6-1500502388.tgz\"\n    },\n    \"nodejs-buildpack\" : {\n      \"version\": \"1.5.31\",\n      \"sha1\": \"1f6b6305f794105ceb3b0a2c5989159fb3466b34\",\n      \"source_location\": \"https://github.com/cloudfoundry/nodejs-buildpack-release.git\",\n      \"compiled_release_url\": \"https://s3.amazonaws.com/pcfdev/compiled-releases/nodejs-buildpack-1.5.31-1501018153.tgz\"\n    },\n    \"php-buildpack\" : {\n      \"version\": \"4.3.31\",\n      \"sha1\": \"f202386505ded742bf554e6d3cfbb4daca0b68d9\",\n      \"source_location\": \"https://github.com/cloudfoundry/php-buildpack-release.git\",\n      \"compiled_release_url\": \"https://s3.amazonaws.com/pcfdev/compiled-releases/php-buildpack-4.3.31-1500050473.tgz\"\n    },\n    \"python-buildpack\" : {\n      \"version\": \"1.5.18\",\n      \"sha1\": \"d700feeb6930e88a7f4a7e0c33f90eee0eeaa2a6\",\n      \"source_location\": \"https://github.com/cloudfoundry/python-buildpack-release.git\",\n      \"compiled_release_url\": \"https://s3.amazonaws.com/pcfdev/compiled-releases/python-buildpack-1.5.18-1501018679.tgz\"\n    },\n    \"routing\" : {\n      \"version\": \"0.152.0-4-gc4e8657\",\n      \"sha1\": \"f42a7ef39fbcfc90d7ea4c8619d6071d51d7f911\",\n      \"source_location\": \"https://github.com/cloudfoundry-incubator/routing-release.git\",\n      \"compiled_release_url\": \"https://s3.amazonaws.com/pcfdev/compiled-releases/routing-0.152.0-4-gc4e8657-1501020545.tgz\"\n    },\n    \"ruby-buildpack\" : {\n      \"version\": \"1.6.37\",\n      \"sha1\": \"d8f25677a29088adc737088b1a395c6bacb16e1f\",\n      \"source_location\": \"https://github.com/cloudfoundry/ruby-buildpack-release.git\",\n      \"compiled_release_url\": \"https://s3.amazonaws.com/pcfdev/compiled-releases/ruby-buildpack-1.6.37-1501017963.tgz\"\n    },\n    \"staticfile-buildpack\" : {\n      \"version\": \"1.4.5\",\n      \"sha1\": \"44091b829ca732703002f69b93151b29c2d05c9f\",\n      \"source_location\": \"https://github.com/cloudfoundry/staticfile-buildpack-release.git\",\n      \"compiled_release_url\": \"https://s3.amazonaws.com/pcfdev/compiled-releases/staticfile-buildpack-1.4.5-1500050172.tgz\"\n    },\n    \"uaa\" : {\n      \"version\": \"v34-1-g2b93080\",\n      \"sha1\": \"c4bb8f6b925dbc5d32a0e15c4d88f5f6ef1e7b30\",\n      \"source_location\": \"https://github.com/cloudfoundry/uaa-release.git\",\n      \"compiled_release_url\": \"https://s3.amazonaws.com/pcfdev/compiled-releases/uaa-v34-1-g2b93080-1501014327.tgz\"\n    }\n  }\n}\n"
  }
]