Add a certificate generator makefile/config
Update XOS core certificates
Change-Id: I1e4cda425704e724b9b494609f2e7777424c1951
diff --git a/scripts/pki/.gitignore b/scripts/pki/.gitignore
new file mode 100644
index 0000000..6ec615a
--- /dev/null
+++ b/scripts/pki/.gitignore
@@ -0,0 +1,5 @@
+*.pem
+*.key
+*.csr
+root_ca
+helm_xos_pki.yaml
diff --git a/scripts/pki/Makefile b/scripts/pki/Makefile
new file mode 100644
index 0000000..a21f042
--- /dev/null
+++ b/scripts/pki/Makefile
@@ -0,0 +1,110 @@
+# Copyright 2017-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# XOS pki makefile
+# Configuration is also given in xos-pki.cnf
+
+SHELL = bash -eu -o pipefail
+
+# parameters
+KEY_SIZE ?= 2048
+EXPIRATION_DAYS ?= 366
+OPENSSL_CNF ?= xos-pki.cnf
+
+# utility/validation targets
+
+help:
+ @echo "Usually you want to run 'make helm_xos_pki.yaml'"
+
+validate:
+ openssl verify -verbose -purpose sslserver -CAfile xos-CA.pem xos-core.crt
+
+printca: xos-CA.pem
+ openssl x509 -in $< -text -noout
+
+printkey: xos-core.key
+ openssl rsa -in $< -check
+
+printcsr: xos-core.csr
+ openssl req -in $< -text -noout -verify
+
+printpem: xos-core.pem
+ openssl x509 -in $< -text -noout
+
+all_certs: xos-core.pem
+
+helm_xos_pki.yaml: xos-CA.pem xos-core.pem xos-core.key
+ @echo "Creating helm compatible YAML file containing certs"
+ @echo "---" > $@
+ @echo "# Certificates can be regenerated with scripts/pki/Makefile" >> $@
+ @echo "# Created on: `date -u`, good for $(EXPIRATION_DAYS) days" >> $@
+ @echo "ca_cert_chain: |" >> $@
+ @cat xos-CA.pem | base64 -b 72 | sed 's/^/ /' >> $@
+ @echo "secrets:" >> $@
+ @echo " core_api_cert: |" >> $@
+ @cat xos-core.pem | base64 -b 72 | sed 's/^/ /' >> $@
+ @echo " core_api_key: |" >> $@
+ @cat xos-core.key | base64 -b 72 | sed 's/^/ /' >> $@
+
+clean:
+ rm -rf root_ca *.pem *.key *.csr helm_xos_pki.yaml
+
+# CA creation
+root_ca:
+ mkdir -p root_ca/private root_ca/newcerts
+ chmod 700 root_ca/private
+ echo 1000 > root_ca/serial
+ touch root_ca/index.txt
+
+root_ca/private/ca_root_phrase: root_ca
+ @echo "TestingXOSRootCAPassPhrase" > root_ca/private/ca_root_phrase
+
+root_ca/private/ca_key.pem: root_ca root_ca/private/ca_root_phrase
+ @echo "## Creating CA private key, $@"
+ openssl genrsa -aes256 \
+ -passout file:root_ca/private/ca_root_phrase \
+ -out root_ca/private/ca_key.pem $(KEY_SIZE)
+
+xos-CA.pem: xos-pki.cnf root_ca/private/ca_key.pem
+ @echo "## Creating self-signed CA public key: $@"
+ openssl req -config $(OPENSSL_CNF) \
+ -new -x509 -days $(EXPIRATION_DAYS) -sha256 \
+ -extensions v3_ca \
+ -key root_ca/private/ca_key.pem \
+ -passin file:root_ca/private/ca_root_phrase \
+ -subj "/C=US/ST=California/L=Menlo Park/O=ONF/OU=Testing Only/CN=CORD Test Root CA" \
+ -out $@
+
+# cert creation
+.PRECIOUS: %.key %.csr # don't delete intermediate files
+
+%.key:
+ @echo "## Creating server private key: $@"
+ openssl genrsa -out $@ $(KEY_SIZE)
+
+%.csr: %.key $(OPENSSL_CNF)
+ @echo "## Creating signing request $@ from $<"
+ openssl req -config $(OPENSSL_CNF) \
+ -new -sha256 -key $< \
+ -subj "/C=US/ST=California/L=Menlo Park/O=ONF/OU=Testing Only/CN=$*" \
+ -out $@
+
+%.pem: %.csr xos-CA.pem $(OPENSSL_CNF)
+ @echo "## Signing voltha.csr to create signed public key: voltha.crt"
+ openssl ca -config $(OPENSSL_CNF) \
+ -batch -days $(EXPIRATION_DAYS) -md sha256 \
+ -passin file:root_ca/private/ca_root_phrase \
+ -extensions $* \
+ -in $< \
+ -out $@
diff --git a/scripts/pki/README.md b/scripts/pki/README.md
new file mode 100644
index 0000000..302b3e1
--- /dev/null
+++ b/scripts/pki/README.md
@@ -0,0 +1,7 @@
+# XOS certificate generation
+
+Run `make` on a system with the `openssl` cli tool installed to see options.
+
+Most likely you'll want to run `make helm_xos_pki.yaml` to generate a helm
+values file with base64 encoded certificates in it.
+
diff --git a/scripts/pki/xos-pki.cnf b/scripts/pki/xos-pki.cnf
new file mode 100644
index 0000000..5349054
--- /dev/null
+++ b/scripts/pki/xos-pki.cnf
@@ -0,0 +1,88 @@
+# Copyright 2017-present Open Networking Foundation
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+[ ca ]
+default_ca = CA_default
+
+[ CA_default ]
+dir = ./root_ca
+certs = $dir/certs
+crl_dir = $dir/crl
+new_certs_dir = $dir/newcerts
+database = $dir/index.txt
+serial = $dir/serial
+
+private_key = $dir/private/ca_key.pem
+certificate = xos-CA.pem
+
+# Make new requests easier to sign - allow two subjects with same name
+# (Or revoke the old certificate first.)
+unique_subject = no
+preserve = no
+
+# for CA that signs client certs
+policy = policy_loose
+
+[ policy_loose ]
+# Allow the to sign more types of certs
+countryName = optional
+stateOrProvinceName = optional
+localityName = optional
+organizationName = optional
+organizationalUnitName = optional
+commonName = supplied
+emailAddress = optional
+
+[ req ]
+default_bits = 2048
+default_days = 366
+default_md = sha256
+distinguished_name = req_distinguished_name
+string_mask = utf8only
+x509_extensions = v3_ca
+
+[ req_distinguished_name ]
+# See <https://en.wikipedia.org/wiki/Certificate_signing_request>.
+countryName = Country Name (2 letter code)
+stateOrProvinceName = State or Province Name
+localityName = Locality Name
+0.organizationName = Organization Name
+organizationalUnitName = Organizational Unit Name
+commonName = Common Name
+emailAddress = Email Address
+
+# Defaults DN
+countryName_default = US
+stateOrProvinceName_default = California
+localityName_default = Menlo Park
+0.organizationName_default = ONF
+organizationalUnitName_default = Testing Only
+commonName = CORD Testing
+emailAddress_default = do-not-reply@opencord.org
+
+[ v3_ca ]
+# Extensions for a typical CA (`man x509v3_config`).
+subjectKeyIdentifier = hash
+authorityKeyIdentifier = keyid:always,issuer
+basicConstraints = critical, CA:TRUE
+keyUsage = critical, digitalSignature, cRLSign, keyCertSign
+
+# Extensions for certificates (`man x509v3_config`).
+[ xos-core ]
+subjectKeyIdentifier = hash
+authorityKeyIdentifier = keyid,issuer:always
+basicConstraints = CA:FALSE
+keyUsage = critical, digitalSignature, keyEncipherment
+extendedKeyUsage = serverAuth
+subjectAltName = 'DNS:xos-core, DNS:xos-core.default, DNS:xos-core.default.svc.cluster.local'
diff --git a/xos-core/templates/coreapi-cert-secret.yaml b/xos-core/templates/coreapi-cert-secret.yaml
index 048f552..463d226 100644
--- a/xos-core/templates/coreapi-cert-secret.yaml
+++ b/xos-core/templates/coreapi-cert-secret.yaml
@@ -20,5 +20,7 @@
namespace: default
type: kubernetes.io/tls
data:
- tls.crt: {{ .Values.secrets.core_api_cert }}
- tls.key: {{ .Values.secrets.core_api_key }}
+ tls.crt: |
+{{ .Values.secrets.core_api_cert | indent 4 }}
+ tls.key: |
+{{ .Values.secrets.core_api_key | indent 4 }}
diff --git a/xos-core/values.yaml b/xos-core/values.yaml
index 044317c..a7ae5db 100644
--- a/xos-core/values.yaml
+++ b/xos-core/values.yaml
@@ -70,8 +70,164 @@
xosDBUser: 'postgres'
xosDBPassword: 'password'
-ca_cert_chain: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUYyakNDQThLZ0F3SUJBZ0lDRUFBd0RRWUpLb1pJaHZjTkFRRUxCUUF3Z1lreEN6QUpCZ05WQkFZVEFsVlQKTVJNd0VRWURWUVFJREFwRFlXeHBabTl5Ym1saE1STXdFUVlEVlFRSERBcE5aVzVzYnlCUVlYSnJNUTh3RFFZRApWUVFLREFaUFRpNU1ZV0l4R0RBV0JnTlZCQXNNRDFSbGMzUWdSR1Z3Ykc5NWJXVnVkREVsTUNNR0ExVUVBd3djClEwOVNSQ0JVWlhOMElFUmxjR3h2ZVcxbGJuUWdVbTl2ZENCRFFUQWVGdzB4TnpFeU1UUXdNRFE1TUROYUZ3MHgKT1RFeU1UUXdNRFE1TUROYU1HNHhDekFKQmdOVkJBWVRBbFZUTVJNd0VRWURWUVFJREFwRFlXeHBabTl5Ym1saApNUTh3RFFZRFZRUUtEQVpQVGk1TVlXSXhHREFXQmdOVkJBc01EMVJsYzNRZ1JHVndiRzk1YldWdWRERWZNQjBHCkExVUVBd3dXVFhsVGFYUmxJRWx1ZEdWeWJXVmthV0YwWlNCRFFUQ0NBaUl3RFFZSktvWklodmNOQVFFQkJRQUQKZ2dJUEFEQ0NBZ29DZ2dJQkFPTDVRT0l5YmpJRXRjVkY3Y2hRV3c0Q3Z1QkhCVGpCSmMxcEh3SjRDSzlsYm04RgpJMXNFbW1pd20yTWtJRG9WQ2lBQk5ld1JtVTRTcU4wUG5QOWlGNjV2NlpTbHlXT25hVHF1SitTck9tM1F6MHZmCkZuSHZmWkZycC9BU3FhUlBxQVUrVlR3dTVsb2VHcEZIS3F1MXhxZUpQNWlSaVdTS3hWdk1XeS9TUnhsU0FudVkKTG84WkRrWllpdWZYY1dJaEMzWGdXb081ckVuZVcxS1FXdWdnU1l1dUFPMDJkV2hPQklJTlJPQTZSdUdWdWw0Uwo1S1oxTE5tclAyS2c1a0JoaG1xclhLZWJudzdkZTg2emthV0RlcG1LajZiUWtiRGNWYTJXdU1mTS9Yd0dqd0d3CkwwT2RRRzB3dzFhMFdYTi9NMU5WVnBManNFTDZ2U0Q0UlR0RlZYZWFPRkZ3VGphUXpVSGgxUHdsRkI1S25nM0oKcXBnNzdRdXUvVFdvcHI5ZXBPNk1oZ25KSmliSzB3MzZvaUt1YUJiMGt4TjlKOHVQbERiWlpuRm1NYk9jYjVNOQpzU1A0cTJ3ODJuYkdmRm0rZFR6OU9Ddi9aUWc3Nm5XTk8vVWFEMFR6c25zZjBMZ3dXL1dqR3pEd0w3Rk0vTXRoCnI2eUQ5dVRiRnR1TzdGbGp4NUZMZ2thc200bzRQbzBsR3RFMCtWUXg5bTRiN014R1RITThBcm1ES1lzTTJTeXUKdG5ZeXBHQjE4T0c2NENrTEhzejJkU2dhb1BVVDY1MW9UbnRTZDZMU2hGazR1VVpxVjdrYnBzSGRhK2s0UlgwNApSejI3RUcwQ0V3R0RDYnhVTnJCcVlTZzdZNENJSklodnB1Mm8vSGNsREsxV09tZGYrL3h2M0M0RHBYb1RBZ01CCkFBR2paakJrTUIwR0ExVWREZ1FXQkJSWis4akR3eVRORzdzMVAzdElEY2Q0RXFCbnZEQWZCZ05WSFNNRUdEQVcKZ0JUVFVvazdCSzZnVHZ2cjFnUkJxUyswdDBjanNUQVNCZ05WSFJNQkFmOEVDREFHQVFIL0FnRUFNQTRHQTFVZApEd0VCL3dRRUF3SUJoakFOQmdrcWhraUc5dzBCQVFzRkFBT0NBZ0VBemU1NlZGTjRJRkdQaVk4ZHZkL1pscCtxCjMvSENUdDFJemE5cFlhTi9KY2U3b1hlOVRNZDJWWXJ5VmdWZVc1aWJ5eDdQVGhINFBDMHRrMUZFeUNoZFZHV0IKclRrSGE4T25vQ0lqdVFDS3FPV1hPRkNMMkQyaEwxTjRFNHYyeW02UmpNeWVMRDgvQW8wUGUvYkFyUGVkZHV6WgplY21MdTFLN2Q2Y3RPbmV6cXJwRm1YemN2WDVVUFFyVlppWHFGcHVxRzl1TWQrTkVMTWFTMC85K3NwUlF6VE5WClg4RStET1RsbVU5eTVxMHNiR0ZscFV0a0JuVnJ4cllQV2tLMnRWK2phOGpLSitiZFJuNktSZzIyZjkyTndleFMKK1BlUWI0bzltOG9jSnVFanpnczZDbjM3L3FIWXc1YXVjdkJBUU4yYk85NXArN2k0WGh2OVo3UjRGcFE3amY2QgpSV3NSc3dvclpTZWo3N1Fva0JqQ1VZVzVnK2xObHh1UjRacks5VjMxVC9USkkrSHB5YjJYSVFWYUJxbkF3bGRxCnlsNGZMN3dibTg1blQ4Q29tZ1prRWZzMEd3T2FHOFhWdEFROTJGQ3p5bFdKcXpYaEVNbElzdlNqVCs5ZU5FZzIKM0Vnc24xendRdU14aWRpQk5DaThyT3c3UlNBN0UzM1l6TTBMQk5pRWJSS012YWVKbm1sUU5tZGh5YmJXYUpwQwp6R1hYd1lMRkhjK3FsUGsvMFdodVJvNVVKRUx5REJ0ai9HK0U2OFhLdm1iSUZMdjdJNmN0S2Z3RHhZNVFXajJvCmF0NDlsS3dWMS9jUSt0d3B1Ym1NcmtYUzlwaExhVHBvTFNiOVRFUDZTWmVqNVgzQVB2aUVzZkltUjlLQ0MwSHMKRzBnL0pVTkgyVWJWbU5pZld2bz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQotLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KTUlJRitqQ0NBK0tnQXdJQkFnSUpBSnhvbU5IbkovTXRNQTBHQ1NxR1NJYjNEUUVCQ3dVQU1JR0pNUXN3Q1FZRApWUVFHRXdKVlV6RVRNQkVHQTFVRUNBd0tRMkZzYVdadmNtNXBZVEVUTUJFR0ExVUVCd3dLVFdWdWJHOGdVR0Z5CmF6RVBNQTBHQTFVRUNnd0dUMDR1VEdGaU1SZ3dGZ1lEVlFRTERBOVVaWE4wSUVSbGNHeHZlVzFsYm5ReEpUQWoKQmdOVkJBTU1IRU5QVWtRZ1ZHVnpkQ0JFWlhCc2IzbHRaVzUwSUZKdmIzUWdRMEV3SGhjTk1UY3hNakUwTURBMApPRFUzV2hjTk1qY3hNakV5TURBME9EVTNXakNCaVRFTE1Ba0dBMVVFQmhNQ1ZWTXhFekFSQmdOVkJBZ01Da05oCmJHbG1iM0p1YVdFeEV6QVJCZ05WQkFjTUNrMWxibXh2SUZCaGNtc3hEekFOQmdOVkJBb01CazlPTGt4aFlqRVkKTUJZR0ExVUVDd3dQVkdWemRDQkVaWEJzYjNsdFpXNTBNU1V3SXdZRFZRUUREQnhEVDFKRUlGUmxjM1FnUkdWdwpiRzk1YldWdWRDQlNiMjkwSUVOQk1JSUNJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBZzhBTUlJQ0NnS0NBZ0VBCjBQMWNhZTluQThEYUdBMEM3L0pnbk0zWCtJdk1rMlVaem1hdHJuL1FhVTZhWWZZbWNRTW5LOGZYbDBoTmg0cVQKZVc1QlVFeUE5Q1I3Q0lXSDh1ZVkvWnBFaDJ2SHB1U0hBWk1YcFdjOWtNYmRCUHVYQlpNTFZXRjFpYXhYdm9TcgpocGNLNmxzRFd3a3JrT2IvbjVHTUpPR1VDYk5aalBUdjJLMkt3UW1kTE1FQmg3S29CT1k1SVNoL1lFL3AyNExGCmhCVVAxTEJ5dXBSUExEdkJhazkrc3h0NVpyM3BtRDh1clpuekNGMnVQZ09rWFJNRStRM081Rmg5eU91TzNDYXkKazNhQnlWRmhJMnRjdUdFTXFodmNoeU9QaDhPNEFXb2xJbnVyWFRCNWpqcHNVSlFlWlBZLzFuaHAxU1VOckNnKwpFbnlvclBtVW5JL1BqWW9SV1E3U1htcWRKanFKVm5XZUZ5eThXeU8xeGl2QTVsTzFrZVRlbFVvWnhxSUlieUtiCjVKcEdNMnFUaTR3dlo1cXdHL1Z2emUzN0cwOUk5bjBlZ1FsdDBrRmI3N2Z4TVRyYzZIKzV0ZkNOZVBWZ0FYajIKalJ1bnBFTDhsS1ZOdHJqVEQ5aEQ4Mm10a3FPcVFZZ29jWDRldXVNQWFNSE5QMzdmWWpvNjBEQXRUNzNPRnNMNApnRGc0ZnlOaG4rQmdKK2pkU2IxNGRpT2lxRG0zcnYrZDhZeWpCd0p6dXJyOXhnMU5zQnI1ZjVZNTgzbDN5UElyCnVSOEV5UzBuNjNIMG4wWkUvT1VuV253dzZGTWVCNXZBc2ZUVDlxZlJhQ1QvUXZTcmFzSVJwd2pCRzFBZ3FlWUUKT3R6QzE3WXQzckx0K3NhU1VyVTI4dnZJelREL2UrS3QxV0RBdHllRWRuVUNBd0VBQWFOak1HRXdIUVlEVlIwTwpCQllFRk5OU2lUc0VycUJPKyt2V0JFR3BMN1MzUnlPeE1COEdBMVVkSXdRWU1CYUFGTk5TaVRzRXJxQk8rK3ZXCkJFR3BMN1MzUnlPeE1BOEdBMVVkRXdFQi93UUZNQU1CQWY4d0RnWURWUjBQQVFIL0JBUURBZ0dHTUEwR0NTcUcKU0liM0RRRUJDd1VBQTRJQ0FRQTNMWkFoSGVHTnZtMVZaSG1xMUkySU5JVGxnZXg0bldZMy90Y3VCUXpDN1RpbgpJNk1rdWVTVUdoN3JSMWJ6Q1UyUlpvd2E1aGkyQzRVSEJYcWR2cDRoRnNoL2MvV0VEVmtNbWttWS9lTERJVjZDClVXUGpYaXRmeDlrWkh4eWZJbEVNc3JuS3lmTFRDK0E3ZkxOQWhocE1OZHFFZlB3UG9GbTFzbGVuSG54NU9PMWkKY2NZUVc4d2tIS1pCQzdhUElZbXdiSEFIWGpPeGFmYkpKUmFRQ2hhTURHdmt0b0NwaVdzWWxydWx0SHRYRU1tQgpuVWliM0k3VFhFekNBdFVONDN4a1MwY21ZWXZkK3I4M24vSEZLWk5VeHl5NXRXZUJZWE0xWVFiQTBGTU1qQnhYClg5ZGppYkxVTC9oenJ3ZkFLa1dPMFRQMWxrV1cwTkh5d3BySVdtWmVUVWJJb3dVWFRpSFdYMzk3a241QTRMMngKZHFhQS94TFEvMjd4VUJnUmJZZ1J0eVY4eWJWQWdUNEdKbyswY1NvR1EycTdMVzVidWxUMjM1ZjZqSEM5b0xHTwo2UDVwenYrZWozS1BSdWZDVlJMMHk4WjlHYlAzZmVxejQ0bHNXRWg3N056UWdSaVdaYUMxdFFaYjFKWitmam5ECnVHZlJNM085WW9Lb0tKMHo1VW5WVk13TDl0K0JFbVp5TGNvYzRoVVgzTDJjT1VpM0VaaC9jeTEvREpGODg0UDcKQlgyY0lWcWM4ZU1rL1ZYbE5CY1d3RlpzVGM4Vk56SUprbExKYlJuOERQWmhxWHNlYjBCZXNlU1B6M0EvKzh4TApCZTJzbFBPK01KWVdLSGZPKzNvZmNibUFpUnMvNTkxOVpiMy9rVyt4c3ROQ1V3b0pBeTk1bXF2Ukg4TFo0Zz09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0=
+# certs created on: Thu Dec 13 23:16:51 MST 2018
+ca_cert_chain: |
+ LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUQxakNDQXI2Z0F3SUJBZ0lKQUt4T2h4
+ bzZuMDVhTUEwR0NTcUdTSWIzRFFFQkN3VUFNSGd4Q3pBSkJnTlYKQkFZVEFsVlRNUk13RVFZ
+ RFZRUUlEQXBEWVd4cFptOXlibWxoTVJNd0VRWURWUVFIREFwTlpXNXNieUJRWVhKcgpNUXd3
+ Q2dZRFZRUUtEQU5QVGtZeEZUQVRCZ05WQkFzTURGUmxjM1JwYm1jZ1QyNXNlVEVhTUJnR0Ex
+ VUVBd3dSClEwOVNSQ0JVWlhOMElGSnZiM1FnUTBFd0hoY05NVGd4TWpFME1EWXhOalV4V2hj
+ Tk1Ua3hNakUxTURZeE5qVXgKV2pCNE1Rc3dDUVlEVlFRR0V3SlZVekVUTUJFR0ExVUVDQXdL
+ UTJGc2FXWnZjbTVwWVRFVE1CRUdBMVVFQnd3SwpUV1Z1Ykc4Z1VHRnlhekVNTUFvR0ExVUVD
+ Z3dEVDA1R01SVXdFd1lEVlFRTERBeFVaWE4wYVc1bklFOXViSGt4CkdqQVlCZ05WQkFNTUVV
+ TlBVa1FnVkdWemRDQlNiMjkwSUVOQk1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0MKQVE4
+ QU1JSUJDZ0tDQVFFQXhQMEpSNWl3dTdOWFhqb3RPTUJPaGtrcmkvaDdYTlBEYnZ1bTJNT2Zr
+ Ri8xNHFMWApEdTE1REprU1ZkMTNMSjh6dW9mTUpoSUgzSHZtS2QwZitMeVd6UkQ2UWhnTHl2
+ blMybnJmZFFVYXNuRDgxbnpPCmUxL3ZTT1dHZThsczV0WS8zV3FUNWhHdkRkRDhDTmRNSzYx
+ V01vM242dzRCZHR1ZzZYbTdrS2ZPOW92YmRiNjQKdUxzVWNmMk9jUGx3bVJ4b0VPWlMzYlJ5
+ UmM4VE5obFpWL1RwTkMyMkRHVFNwSUxkMXh0VVJLU0FYSHlxREducgpQQmQyYUE1aFhYbjFn
+ Zkt2YVhxR2xZVEZGRXRJbkVxdEtzRFp5WXVSb1NyOFpBdXpObWVwcVZ0MHlvRFFseXVLCmlO
+ STFiNVBUNDFYV0dlTVNTSFoxN2hXbEt3RGdIcWdzR0FYWGpRSURBUUFCbzJNd1lUQWRCZ05W
+ SFE0RUZnUVUKTEJrNzNkc20reHpZY01weG1rQ3BCa1BwNWMwd0h3WURWUjBqQkJnd0ZvQVVM
+ Qms3M2RzbSt4elljTXB4bWtDcApCa1BwNWMwd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBT0Jn
+ TlZIUThCQWY4RUJBTUNBWVl3RFFZSktvWklodmNOCkFRRUxCUUFEZ2dFQkFISDRSazFJUUhQ
+ Z1UvSElPalJPdjZUeWNlcUVTblVFL2UyV2NycUFZNU9Hc0JuWC9iTXAKNkhVZHU1N0dPT1Bt
+ WUhseWY4aUE0bHNtYkVIYjZQL3NudWI0SlhmcVh2WS9mVkk5TXZGc3FjazJrcDhOeFhrLwpB
+ cUN0R29Qdjk1UGJ0UEVqbWIrRmErOHpoaTlDSkMzSktEek91TFZnSWI0bDdKRStpREpSYitr
+ Z2Jpelp1VFFkCk1VRFB3Y2tLU24rd1ZMUjRENU5vSDVhOGswaGFDMll3N3dBVSsraVFZS3Vp
+ bWRlaUowWEJ5cTlHdXBoM29PL3AKUGJHb1VZc2diRW5FRmhSVUREQXd1M0M5Nlk0SnhaVVFX
+ WUo5OVBvWHYrNnZ3ckw1V0NtdExuVkxLcGsya08wKwpXOUVLNUJ1c1E3RXN6ZkE3TzJ0NE10
+ V2NtcmVpMHBlMFBZRT0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
secrets:
- core_api_cert: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZvVENDQTRtZ0F3SUJBZ0lCQWpBTkJna3Foa2lHOXcwQkFRc0ZBREJ1TVFzd0NRWURWUVFHRXdKVlV6RVQKTUJFR0ExVUVDQXdLUTJGc2FXWnZjbTVwWVRFUE1BMEdBMVVFQ2d3R1QwNHVUR0ZpTVJnd0ZnWURWUVFMREE5VQpaWE4wSUVSbGNHeHZlVzFsYm5ReEh6QWRCZ05WQkFNTUZrMTVVMmwwWlNCSmJuUmxjbTFsWkdsaGRHVWdRMEV3CkhoY05NVGN4TWpFME1EQTBPVEEyV2hjTk1UZ3hNakUwTURBME9UQTJXakNCZ0RFTE1Ba0dBMVVFQmhNQ1ZWTXgKRXpBUkJnTlZCQWdNQ2tOaGJHbG1iM0p1YVdFeEV6QVJCZ05WQkFjTUNrMWxibXh2SUZCaGNtc3hEekFOQmdOVgpCQW9NQms5T0xreGhZakVhTUJnR0ExVUVDd3dSVFhsVGFYUmxJRVJsY0d4dmVXMWxiblF4R2pBWUJnTlZCQU1NCkVYaHZjeTFqYjNKbExtTnZjbVF1YkdGaU1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0MKQVFFQTQwc3ZtbzBnK1dtZVdxQ083djR4ZFBUK1h5OHdVSTYxcGFacWdmZXhZT3lYSkpxMW1lSUlVZnNtSVl6VAp3cFBodEh4c2YzbE8rUGZwRzk4a3NHNXgvVUV5djhlN2RLaHpDalFrcER1b0loRUMwdUcrbjZDTVJsMDF0elRyCnFGaCtNVURoUmV4SFhRcjV5Z3c5TFBNU0RkL3dhYWduN21RelZTdzJ0bnpha3Y3ODY3YzFPRFFHekxyRGx4RVUKQ3FaY1F2cUV5UnJHWmF6WlZ0SFJmamV0eldKdzZYbDRVUGl6eldqVWFaMEhPMG9JWFMwa0tmbjhrZ1c4dDZEUgpuNDFTTTRRQlZTY21XWm9WUUFOc1lCL0ROZEdGMDF2ODUvVktMV2J5YkVUbGJCVXZhSEVPZWJCMlo1Tm1tcXZ6CkpEN1JRbVdJaWZrUjVLOWZWTjdtNERRc01RSURBUUFCbzRJQk5UQ0NBVEV3SFFZRFZSME9CQllFRkIzeEFHNzIKZ3VhZ29rOEJzT3orZnQxd0htMC9NSUczQmdOVkhTTUVnYTh3Z2F5QUZGbjd5TVBESk0wYnV6VS9lMGdOeDNnUwpvR2U4b1lHUHBJR01NSUdKTVFzd0NRWURWUVFHRXdKVlV6RVRNQkVHQTFVRUNBd0tRMkZzYVdadmNtNXBZVEVUCk1CRUdBMVVFQnd3S1RXVnViRzhnVUdGeWF6RVBNQTBHQTFVRUNnd0dUMDR1VEdGaU1SZ3dGZ1lEVlFRTERBOVUKWlhOMElFUmxjR3h2ZVcxbGJuUXhKVEFqQmdOVkJBTU1IRU5QVWtRZ1ZHVnpkQ0JFWlhCc2IzbHRaVzUwSUZKdgpiM1FnUTBHQ0FoQUFNQWtHQTFVZEV3UUNNQUF3RGdZRFZSMFBBUUgvQkFRREFnV2dNQk1HQTFVZEpRUU1NQW9HCkNDc0dBUVVGQndNQk1DWUdBMVVkRVFRZk1CMkNFWGh2Y3kxamIzSmxMbU52Y21RdWJHRmlnZ2g0YjNNdFkyOXkKWlRBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQWdFQVRPYmFpWHNBS3hlUTRLN2QwVXV0d0RWeXFka29lTkhwbm1QWApIS1JOY2w4eEUwZjZxczdxcTl3VlJ3NDhiMVlkTEhzcHAyclRsUGY3d09WSUw4UEhVWElUWlkyL0p0b0tQTlRnClp6Wlpxd2tsVEdSekJoYStESE8ydzdlYzZPWDZXcVM5U091aXRsZnhFWjVPNm45WUJha3VUc1hOZHZYbW9rTDAKK3ZwMkVHSHpSYlgxaDc1R3JPbmhjem03Q1FjaU5HVUlqZDNrN0RsK0RsMGs2Tm5aK2VXbUltd0RuU2lzdzhuVwpZUUVGRHgxYlNKYVpNS0NwM0hyN2s5b1ByL0JsYkJPaXI4Yis4em91Vm5BYkVRWVdiV3hwVWVlNXNQT2tEamd3ClV6d0lHVnRSYjBZTlpaS3BEdTIwOUxLYjQ5dFR5TXBmaVdUNTU4VzZJTU9lV3lia1Izd0RvUXFNVHpvNHBUaHEKdFh5T2JJZ2Z2MHJLbU1rM2NPMWNLM1R2ODdNMFJ2a2YrajFnTEVYWTdlK1BiSXYvNExaUTVnUUpua1lLVXY3WApVWmlFRDdRdlVEbnk5M1hKNzc5S0cxTkRNZkx1QTFKU2p4USsrcDFHL3VzLzNwcmg2SmViVUJrUjRZaklIeHRlCmNDYTFpdE5wN0crWWkxdHU0TUN3dEZ5Y1QxbzRaS2o2MThPUXJRRjc1RG9RWGNiU2ZyM1NSVTF5aU1FQzdrM08KTkE4TXdOZjB1WWljRlZ4aG93U1FLME16dWh0QnR6ZDhMTjd0YVBrL1FGOTRyNU85aWF0b205Q2lzaW1GWXAvNwp4R1g3eEJvTWI1U2JNZVI1bXYrbmlUUWExb1hZQXBSU2ZHSW8yeWxTaDdaZFhjUy9ySlNETWxzYVg1L3lUcXRMCkhWRW0xNDQ9Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUYyakNDQThLZ0F3SUJBZ0lDRUFBd0RRWUpLb1pJaHZjTkFRRUxCUUF3Z1lreEN6QUpCZ05WQkFZVEFsVlQKTVJNd0VRWURWUVFJREFwRFlXeHBabTl5Ym1saE1STXdFUVlEVlFRSERBcE5aVzVzYnlCUVlYSnJNUTh3RFFZRApWUVFLREFaUFRpNU1ZV0l4R0RBV0JnTlZCQXNNRDFSbGMzUWdSR1Z3Ykc5NWJXVnVkREVsTUNNR0ExVUVBd3djClEwOVNSQ0JVWlhOMElFUmxjR3h2ZVcxbGJuUWdVbTl2ZENCRFFUQWVGdzB4TnpFeU1UUXdNRFE1TUROYUZ3MHgKT1RFeU1UUXdNRFE1TUROYU1HNHhDekFKQmdOVkJBWVRBbFZUTVJNd0VRWURWUVFJREFwRFlXeHBabTl5Ym1saApNUTh3RFFZRFZRUUtEQVpQVGk1TVlXSXhHREFXQmdOVkJBc01EMVJsYzNRZ1JHVndiRzk1YldWdWRERWZNQjBHCkExVUVBd3dXVFhsVGFYUmxJRWx1ZEdWeWJXVmthV0YwWlNCRFFUQ0NBaUl3RFFZSktvWklodmNOQVFFQkJRQUQKZ2dJUEFEQ0NBZ29DZ2dJQkFPTDVRT0l5YmpJRXRjVkY3Y2hRV3c0Q3Z1QkhCVGpCSmMxcEh3SjRDSzlsYm04RgpJMXNFbW1pd20yTWtJRG9WQ2lBQk5ld1JtVTRTcU4wUG5QOWlGNjV2NlpTbHlXT25hVHF1SitTck9tM1F6MHZmCkZuSHZmWkZycC9BU3FhUlBxQVUrVlR3dTVsb2VHcEZIS3F1MXhxZUpQNWlSaVdTS3hWdk1XeS9TUnhsU0FudVkKTG84WkRrWllpdWZYY1dJaEMzWGdXb081ckVuZVcxS1FXdWdnU1l1dUFPMDJkV2hPQklJTlJPQTZSdUdWdWw0Uwo1S1oxTE5tclAyS2c1a0JoaG1xclhLZWJudzdkZTg2emthV0RlcG1LajZiUWtiRGNWYTJXdU1mTS9Yd0dqd0d3CkwwT2RRRzB3dzFhMFdYTi9NMU5WVnBManNFTDZ2U0Q0UlR0RlZYZWFPRkZ3VGphUXpVSGgxUHdsRkI1S25nM0oKcXBnNzdRdXUvVFdvcHI5ZXBPNk1oZ25KSmliSzB3MzZvaUt1YUJiMGt4TjlKOHVQbERiWlpuRm1NYk9jYjVNOQpzU1A0cTJ3ODJuYkdmRm0rZFR6OU9Ddi9aUWc3Nm5XTk8vVWFEMFR6c25zZjBMZ3dXL1dqR3pEd0w3Rk0vTXRoCnI2eUQ5dVRiRnR1TzdGbGp4NUZMZ2thc200bzRQbzBsR3RFMCtWUXg5bTRiN014R1RITThBcm1ES1lzTTJTeXUKdG5ZeXBHQjE4T0c2NENrTEhzejJkU2dhb1BVVDY1MW9UbnRTZDZMU2hGazR1VVpxVjdrYnBzSGRhK2s0UlgwNApSejI3RUcwQ0V3R0RDYnhVTnJCcVlTZzdZNENJSklodnB1Mm8vSGNsREsxV09tZGYrL3h2M0M0RHBYb1RBZ01CCkFBR2paakJrTUIwR0ExVWREZ1FXQkJSWis4akR3eVRORzdzMVAzdElEY2Q0RXFCbnZEQWZCZ05WSFNNRUdEQVcKZ0JUVFVvazdCSzZnVHZ2cjFnUkJxUyswdDBjanNUQVNCZ05WSFJNQkFmOEVDREFHQVFIL0FnRUFNQTRHQTFVZApEd0VCL3dRRUF3SUJoakFOQmdrcWhraUc5dzBCQVFzRkFBT0NBZ0VBemU1NlZGTjRJRkdQaVk4ZHZkL1pscCtxCjMvSENUdDFJemE5cFlhTi9KY2U3b1hlOVRNZDJWWXJ5VmdWZVc1aWJ5eDdQVGhINFBDMHRrMUZFeUNoZFZHV0IKclRrSGE4T25vQ0lqdVFDS3FPV1hPRkNMMkQyaEwxTjRFNHYyeW02UmpNeWVMRDgvQW8wUGUvYkFyUGVkZHV6WgplY21MdTFLN2Q2Y3RPbmV6cXJwRm1YemN2WDVVUFFyVlppWHFGcHVxRzl1TWQrTkVMTWFTMC85K3NwUlF6VE5WClg4RStET1RsbVU5eTVxMHNiR0ZscFV0a0JuVnJ4cllQV2tLMnRWK2phOGpLSitiZFJuNktSZzIyZjkyTndleFMKK1BlUWI0bzltOG9jSnVFanpnczZDbjM3L3FIWXc1YXVjdkJBUU4yYk85NXArN2k0WGh2OVo3UjRGcFE3amY2QgpSV3NSc3dvclpTZWo3N1Fva0JqQ1VZVzVnK2xObHh1UjRacks5VjMxVC9USkkrSHB5YjJYSVFWYUJxbkF3bGRxCnlsNGZMN3dibTg1blQ4Q29tZ1prRWZzMEd3T2FHOFhWdEFROTJGQ3p5bFdKcXpYaEVNbElzdlNqVCs5ZU5FZzIKM0Vnc24xendRdU14aWRpQk5DaThyT3c3UlNBN0UzM1l6TTBMQk5pRWJSS012YWVKbm1sUU5tZGh5YmJXYUpwQwp6R1hYd1lMRkhjK3FsUGsvMFdodVJvNVVKRUx5REJ0ai9HK0U2OFhLdm1iSUZMdjdJNmN0S2Z3RHhZNVFXajJvCmF0NDlsS3dWMS9jUSt0d3B1Ym1NcmtYUzlwaExhVHBvTFNiOVRFUDZTWmVqNVgzQVB2aUVzZkltUjlLQ0MwSHMKRzBnL0pVTkgyVWJWbU5pZld2bz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQ==
- core_api_key: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcEFJQkFBS0NBUUVBNDBzdm1vMGcrV21lV3FDTzd2NHhkUFQrWHk4d1VJNjFwYVpxZ2ZleFlPeVhKSnExCm1lSUlVZnNtSVl6VHdwUGh0SHhzZjNsTytQZnBHOThrc0c1eC9VRXl2OGU3ZEtoekNqUWtwRHVvSWhFQzB1RysKbjZDTVJsMDF0elRycUZoK01VRGhSZXhIWFFyNXlndzlMUE1TRGQvd2FhZ243bVF6VlN3MnRuemFrdjc4NjdjMQpPRFFHekxyRGx4RVVDcVpjUXZxRXlSckdaYXpaVnRIUmZqZXR6V0p3NlhsNFVQaXp6V2pVYVowSE8wb0lYUzBrCktmbjhrZ1c4dDZEUm40MVNNNFFCVlNjbVdab1ZRQU5zWUIvRE5kR0YwMXY4NS9WS0xXYnliRVRsYkJVdmFIRU8KZWJCMlo1Tm1tcXZ6SkQ3UlFtV0lpZmtSNUs5ZlZON200RFFzTVFJREFRQUJBb0lCQVFDc2ZWZHYrMkFseHhDRQppRXBRZHBtRHY1VDNHVEdhUU9MN0JoTFg5T2dvdlFOcXBQbmlBUlg5V1JJejdkS2FYRzJ4OGFiSkNuOXpFM2hWClRYOWpZVDJpU3dNL1pVME9GL1BOcjRxTEZEYmhPM1dnSWU3dTV3RHRPVGxWZ3BUQVdmL1NVd0ZpZGhBbVBQa1oKYXpaVjBWVkhNRVliZUtCdEdwK1dLSXFRN0tsWFdUcHZxNDgvd3lGeGtZc0g4MU1UaE9hTDNFZGZHa1BKU2FzawpjRlhxUHZhZ2dCQkJYUW9aNUFTZUZvWGZrZDdmRVVCQlNSVWRFWVZFOE8xdkw2VzBOUTBDV0EyNjUvQnl1aE9OCkZoME53SHNNbHhPTEsyeFpKc2thN1FvZi94SXE1Rkh4UVBTdkVRTUhaRXM4S3kzUk1CLzdvMWt5dmtXSlZURCsKRjRCTWFDK3RBb0dCQVAzaEtZSGQ3Y2Fxc3VxZ0R5UVBRSll6VzJaczlkL0ZQU29nbGxtZ2NLOGpTMGZTUzFMUworOEpTQWxJdUdvVGxkSHlZYUUvcnlvN0lvZmVwRk8yZ0dZa2ttcHl6aWErL0tRcjRzcXFkdmlpdmxGbEZYNXZTCld1eXNVT05ndGFteUVUZDlycFd3Y2FuT2FhU2IwTHZYYS8vUk5leWFNNTJxd3hxamZUUTJ5dTZyQW9HQkFPVXgKTGNGMXJUU1MzVUFzOUZLZXd4YWdvd1Rmc0o2R29XK1NBQzRXWEt4WGNUS3dJcVVoTHBZUTF6Z0xVb0RaR1hmRApkd0ZhVjhBN3d1TzZtQWliSjFUckNqdDc4Wi9wZEd1a3lXSDJ4YzZHNkU5bE12QVFCY3hIeFR4a2U2QmdjZlltCkIvY3dFYWJrYzJMc1FjNTVUU3hheUlaL2FmN2xZcWpGSDhKY2gyQ1RBb0dBT2xrRFJ4dVFTRFozQkVGZytYS2YKNzJWQ1Bsb1FjQ3RPa1Y0SDcvVlZzSXEyQkgycVhoQ3JWOCt0Uk9IZnFtZHB6RERpMkd0aWxFbzhIMFUyMEI0WgpnRkZ2VDFCYjlvNUNpb2o1MXdpRjZhZmd1bHVkUzV5ZTFRSU5YUlNlNjY5SEVhL0s3aEF0TDArSExCTzdkMUJkCk8rQURPcXQ5N1dDUGtwRzhkc0daQmgwQ2dZRUF0aTB5SG8yb1FKcmdqUXR1cFdHVzFweVhGOStxWjBmQ2VJbkgKNU5wWGpaSHY0NGVIOGxQKzBML1FJcmMxUEQvVTg1S0dQS2dRQ2pnMmdJZW9JMmNZaTNKTWJ0M2xRT1B6YTBEUAo1ak9lSmJ5c1diZXFGcEhWMmZ2T2RtTzB0TlVVb01DNElpNnVTVWRieEd6aEhmcmpjZmN6WDExVjVvdDBzWXdHCjQ1cGk3VXNDZ1lBSzByNnZWajJZRHlBVS8vMk10eGxpSjNJMEs0Rm5SU2JHOFJyOFMvTXJzOHlseW02Z3E2eW0KOS9KWWp6cU93YzZYZ2xDTk45ZVNsRzlzdW13ak85bjV4SlZjZ3JkT3hJa1gvakpDODBiV2xRN2wxU0VZa1ZHcQpDcThOaUZyaWs1VW1ycVhrdUU1NmxaNjQrOGkzZ1BXN0wxZm5OMURoK01FSWZQbUtUOUx6Qmc9PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo=
+ core_api_cert: |
+ Q2VydGlmaWNhdGU6CiAgICBEYXRhOgogICAgICAgIFZlcnNpb246IDMgKDB4MikKICAgICAg
+ ICBTZXJpYWwgTnVtYmVyOiA0MDk2ICgweDEwMDApCiAgICBTaWduYXR1cmUgQWxnb3JpdGht
+ OiBzaGEyNTZXaXRoUlNBRW5jcnlwdGlvbgogICAgICAgIElzc3VlcjogQz1VUywgU1Q9Q2Fs
+ aWZvcm5pYSwgTD1NZW5sbyBQYXJrLCBPPU9ORiwgT1U9VGVzdGluZyBPbmx5LCBDTj1DT1JE
+ IFRlc3QgUm9vdCBDQQogICAgICAgIFZhbGlkaXR5CiAgICAgICAgICAgIE5vdCBCZWZvcmU6
+ IERlYyAxNCAwNjoxNjo1MSAyMDE4IEdNVAogICAgICAgICAgICBOb3QgQWZ0ZXIgOiBEZWMg
+ MTUgMDY6MTY6NTEgMjAxOSBHTVQKICAgICAgICBTdWJqZWN0OiBDPVVTLCBTVD1DYWxpZm9y
+ bmlhLCBMPU1lbmxvIFBhcmssIE89T05GLCBPVT1UZXN0aW5nIE9ubHksIENOPXhvcy1jb3Jl
+ CiAgICAgICAgU3ViamVjdCBQdWJsaWMgS2V5IEluZm86CiAgICAgICAgICAgIFB1YmxpYyBL
+ ZXkgQWxnb3JpdGhtOiByc2FFbmNyeXB0aW9uCiAgICAgICAgICAgICAgICBQdWJsaWMtS2V5
+ OiAoMjA0OCBiaXQpCiAgICAgICAgICAgICAgICBNb2R1bHVzOgogICAgICAgICAgICAgICAg
+ ICAgIDAwOmIzOmUyOjM1OjMxOmUwOjZmOmIzOmIwOjg1OjAzOjUzOjE3Ojk1OjVhOgogICAg
+ ICAgICAgICAgICAgICAgIGE5OjkzOmRmOjRjOmQ0OjU0OjA5OjY3OjFmOjMzOmJlOjMzOmYy
+ OmM1OjRmOgogICAgICAgICAgICAgICAgICAgIDk0OjZhOjRlOjk1OmFjOmUyOmUxOmViOjEw
+ OjM3OjJhOjFmOjljOjRlOjE0OgogICAgICAgICAgICAgICAgICAgIDJjOmJjOjFkOmE3OjQy
+ OjA1OmEwOjhiOjdkOjRmOmYwOjU1OmI2OjQwOjU4OgogICAgICAgICAgICAgICAgICAgIGVl
+ OmFhOjIzOjFiOmQ0OmY3OjI1OmFlOjI3OmJkOjA2Ojc2OjkyOjQ4OjczOgogICAgICAgICAg
+ ICAgICAgICAgIDEwOjkxOjgwOmQxOjMzOmFhOjUyOjNmOjI0OjQwOjBlOjg0OmZjOjM2OjI1
+ OgogICAgICAgICAgICAgICAgICAgIDIwOjRjOjFkOjlhOmU1OjVlOmJjOmYzOjlmOjgwOjk2
+ OmQ5OmMyOmVjOjUyOgogICAgICAgICAgICAgICAgICAgIDM1OmQ0OjFkOmVkOjdjOjk4OjJi
+ OmM2OjI3OjNiOjY0OjllOmQwOjQ3OjI4OgogICAgICAgICAgICAgICAgICAgIDQ2Ojc2OmU2
+ OmVhOmQwOjU4OjMyOmMxOmE5OjVlOjg2Ojc1OjhjOjJlOjYxOgogICAgICAgICAgICAgICAg
+ ICAgIGVmOmRiOmM5OjViOmRhOjQ3Ojg1OjJiOjRiOmY5OjMxOjYzOjc1OjU1OjY1OgogICAg
+ ICAgICAgICAgICAgICAgIGU1Ojk3OmEzOjNiOjVjOjcyOjgwOjFhOmUyOjg1OjhmOjc0OmYx
+ OjVlOjE4OgogICAgICAgICAgICAgICAgICAgIDk1OjI1OjE5OmQ1Ojk1OmY3OjM5OjE0OjFm
+ OjYwOjU4OmI2OmY4OmJjOmE3OgogICAgICAgICAgICAgICAgICAgIDcyOmYwOjFiOmQxOmQy
+ OjZiOjYwOmU4OmY0OmY5OmZkOjBiOmUxOjIxOmM0OgogICAgICAgICAgICAgICAgICAgIGM5
+ OmEwOjMyOjM0OjM1Ojk2OmJkOjlhOjcyOmJkOjQ1OjQ5OmU2OmMxOjVjOgogICAgICAgICAg
+ ICAgICAgICAgIDU4OmY3OjY0OmJiOjU5OjI2OmZkOmNiOmQ3OjlhOjlkOmNkOjNlOjA1OmFj
+ OgogICAgICAgICAgICAgICAgICAgIGZhOjVmOmQyOmU3OjMxOjY3OjE4OmVmOmFlOjZlOjQ3
+ OjAwOjZmOjJhOjBkOgogICAgICAgICAgICAgICAgICAgIGU2OmU3OjhlOmZhOmZlOjg4OmFj
+ OjM5OjQ0Ojg1OjY5OjllOmVmOmQ5OjJjOgogICAgICAgICAgICAgICAgICAgIDQzOmViCiAg
+ ICAgICAgICAgICAgICBFeHBvbmVudDogNjU1MzcgKDB4MTAwMDEpCiAgICAgICAgWDUwOXYz
+ IGV4dGVuc2lvbnM6CiAgICAgICAgICAgIFg1MDl2MyBTdWJqZWN0IEtleSBJZGVudGlmaWVy
+ OiAKICAgICAgICAgICAgICAgIDMzOjdGOkU3OjM1OjA3OjMyOkE3OjdBOjM5OkE5OjVEOjNE
+ OkMwOjkyOkYwOkNBOjUzOjM1OkZCOjUzCiAgICAgICAgICAgIFg1MDl2MyBBdXRob3JpdHkg
+ S2V5IElkZW50aWZpZXI6IAogICAgICAgICAgICAgICAga2V5aWQ6MkM6MTk6M0I6REQ6REI6
+ MjY6RkI6MUM6RDg6NzA6Q0E6NzE6OUE6NDA6QTk6MDY6NDM6RTk6RTU6Q0QKICAgICAgICAg
+ ICAgICAgIERpck5hbWU6L0M9VVMvU1Q9Q2FsaWZvcm5pYS9MPU1lbmxvIFBhcmsvTz1PTkYv
+ T1U9VGVzdGluZyBPbmx5L0NOPUNPUkQgVGVzdCBSb290IENBCiAgICAgICAgICAgICAgICBz
+ ZXJpYWw6QUM6NEU6ODc6MUE6M0E6OUY6NEU6NUEKCiAgICAgICAgICAgIFg1MDl2MyBCYXNp
+ YyBDb25zdHJhaW50czogCiAgICAgICAgICAgICAgICBDQTpGQUxTRQogICAgICAgICAgICBY
+ NTA5djMgS2V5IFVzYWdlOiBjcml0aWNhbAogICAgICAgICAgICAgICAgRGlnaXRhbCBTaWdu
+ YXR1cmUsIEtleSBFbmNpcGhlcm1lbnQKICAgICAgICAgICAgWDUwOXYzIEV4dGVuZGVkIEtl
+ eSBVc2FnZTogCiAgICAgICAgICAgICAgICBUTFMgV2ViIFNlcnZlciBBdXRoZW50aWNhdGlv
+ bgogICAgICAgICAgICBYNTA5djMgU3ViamVjdCBBbHRlcm5hdGl2ZSBOYW1lOiAKICAgICAg
+ ICAgICAgICAgIEROUzp4b3MtY29yZSwgRE5TOnhvcy1jb3JlLmRlZmF1bHQsIEROUzp4b3Mt
+ Y29yZS5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsCiAgICBTaWduYXR1cmUgQWxnb3JpdGht
+ OiBzaGEyNTZXaXRoUlNBRW5jcnlwdGlvbgogICAgICAgICA3ZDo2ZDpjNzo3YTowNDowOTo2
+ ZTozZTpmOToyZTo2MTo1OTo0YTpjNTo5MDo0Nzo2NDpjNToKICAgICAgICAgMTQ6MWY6Zjk6
+ ZDY6MjU6MWQ6YTk6YzU6OTc6NTU6ZmY6Mjg6ZWY6MWE6ZjU6OWM6YWM6M2E6CiAgICAgICAg
+ IDA2OmVhOjZmOjAyOmVjOmVkOjYwOmU0OjYwOjhlOjJlOmU0OjA1OmVmOmYyOmE5OjRkOjI2
+ OgogICAgICAgICBlYjpjZTphNzpjMToxMzo4MjozMTo0YzoxZTpjMzo3OToxODo5ZTpkNzox
+ NDpiYzoyMjo4YzoKICAgICAgICAgNWM6NmI6MGY6ZDk6MjQ6ZTU6ZmY6YjU6OWQ6MmQ6M2I6
+ MDU6M2I6ZDU6M2E6OGY6YjA6M2U6CiAgICAgICAgIDk4OmE5OjUxOmRiOmE5OjhlOjdlOjNi
+ Ojc2OjFhOmU4OmY4OjQxOjM3OjUxOjIxOjUzOjNjOgogICAgICAgICA0OToyMjo1NzowMzo0
+ YjowNDoxZDplOTpiZDpkNzo0Nzo5Mjo0YjpkNzoyYToyYTo1ZDo3YzoKICAgICAgICAgZmI6
+ ZDg6ZTc6MTY6ZGY6YTM6Y2E6Yzc6YzY6NjA6ZjA6NTk6NWE6MTI6YWQ6NDE6MmU6NTE6CiAg
+ ICAgICAgIGY5OmNiOjJkOjU3Ojc1OmMwOjM5OjlmOjRiOmZiOjEyOjk5OjZkOjkwOjUxOmMy
+ OjA4OjY1OgogICAgICAgICBhNjoxMDpiMzoyZjo3Yzo5NzoxNTo0NjowZjphZTo3YzplOTox
+ YTo2MzphMjpmOTozMzo3NjoKICAgICAgICAgMGU6NDc6Mjc6YWM6MTY6OWI6Nzc6ZDc6OTI6
+ ZDA6OGE6Nzk6OTA6YzI6Y2U6NDQ6YmI6MjU6CiAgICAgICAgIDAzOjljOmUyOmVlOjU1OjFm
+ OmIxOjM3OjlhOmNjOmEwOmMyOmYyOjZjOjhhOjkzOmM1OjIyOgogICAgICAgICAwZjphNTpj
+ YjpkZDpkNDo0MjoyMDoxODozZDplNzpjYTowYjoyYzpmODo2MjpmMDozZjo2YToKICAgICAg
+ ICAgODA6NDQ6OTA6ZmI6YzA6NmY6ODA6YzQ6NDc6NWY6Y2Y6OTQ6ZmY6ZjA6Zjg6NjU6ZGI6
+ NjM6CiAgICAgICAgIDkwOjYxOmI1OjkwCi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpN
+ SUlFc0RDQ0E1aWdBd0lCQWdJQ0VBQXdEUVlKS29aSWh2Y05BUUVMQlFBd2VERUxNQWtHQTFV
+ RUJoTUNWVk14CkV6QVJCZ05WQkFnTUNrTmhiR2xtYjNKdWFXRXhFekFSQmdOVkJBY01DazFs
+ Ym14dklGQmhjbXN4RERBS0JnTlYKQkFvTUEwOU9SakVWTUJNR0ExVUVDd3dNVkdWemRHbHVa
+ eUJQYm14NU1Sb3dHQVlEVlFRRERCRkRUMUpFSUZSbApjM1FnVW05dmRDQkRRVEFlRncweE9E
+ RXlNVFF3TmpFMk5URmFGdzB4T1RFeU1UVXdOakUyTlRGYU1HOHhDekFKCkJnTlZCQVlUQWxW
+ VE1STXdFUVlEVlFRSURBcERZV3hwWm05eWJtbGhNUk13RVFZRFZRUUhEQXBOWlc1c2J5QlEK
+ WVhKck1Rd3dDZ1lEVlFRS0RBTlBUa1l4RlRBVEJnTlZCQXNNREZSbGMzUnBibWNnVDI1c2VU
+ RVJNQThHQTFVRQpBd3dJZUc5ekxXTnZjbVV3Z2dFaU1BMEdDU3FHU0liM0RRRUJBUVVBQTRJ
+ QkR3QXdnZ0VLQW9JQkFRQ3o0alV4CjRHK3pzSVVEVXhlVldxbVQzMHpVVkFsbkh6TytNL0xG
+ VDVScVRwV3M0dUhyRURjcUg1eE9GQ3k4SGFkQ0JhQ0wKZlUvd1ZiWkFXTzZxSXh2VTl5V3VK
+ NzBHZHBKSWN4Q1JnTkV6cWxJL0pFQU9oUHcySlNCTUhacmxYcnp6bjRDVwoyY0xzVWpYVUhl
+ MThtQ3ZHSnp0a250QkhLRVoyNXVyUVdETEJxVjZHZFl3dVllL2J5VnZhUjRVclMva3hZM1ZW
+ ClplV1hvenRjY29BYTRvV1BkUEZlR0pVbEdkV1Y5emtVSDJCWXR2aThwM0x3RzlIU2EyRG85
+ UG45QytFaHhNbWcKTWpRMWxyMmFjcjFGU2ViQlhGajNaTHRaSnYzTDE1cWR6VDRGclBwZjB1
+ Y3haeGp2cm01SEFHOHFEZWJuanZyKwppS3c1UklWcG51L1pMRVByQWdNQkFBR2pnZ0ZMTUlJ
+ QlJ6QWRCZ05WSFE0RUZnUVVNMy9uTlFjeXAzbzVxVjA5CndKTHd5bE0xKzFNd2dhb0dBMVVk
+ SXdTQm9qQ0JuNEFVTEJrNzNkc20reHpZY01weG1rQ3BCa1BwNWMyaGZLUjYKTUhneEN6QUpC
+ Z05WQkFZVEFsVlRNUk13RVFZRFZRUUlEQXBEWVd4cFptOXlibWxoTVJNd0VRWURWUVFIREFw
+ TgpaVzVzYnlCUVlYSnJNUXd3Q2dZRFZRUUtEQU5QVGtZeEZUQVRCZ05WQkFzTURGUmxjM1Jw
+ Ym1jZ1QyNXNlVEVhCk1CZ0dBMVVFQXd3UlEwOVNSQ0JVWlhOMElGSnZiM1FnUTBHQ0NRQ3NU
+ b2NhT3A5T1dqQUpCZ05WSFJNRUFqQUEKTUE0R0ExVWREd0VCL3dRRUF3SUZvREFUQmdOVkhT
+ VUVEREFLQmdnckJnRUZCUWNEQVRCSkJnTlZIUkVFUWpCQQpnZ2g0YjNNdFkyOXlaWUlRZUc5
+ ekxXTnZjbVV1WkdWbVlYVnNkSUlpZUc5ekxXTnZjbVV1WkdWbVlYVnNkQzV6CmRtTXVZMngx
+ YzNSbGNpNXNiMk5oYkRBTkJna3Foa2lHOXcwQkFRc0ZBQU9DQVFFQWZXM0hlZ1FKYmo3NUxt
+ RloKU3NXUVIyVEZGQi81MWlVZHFjV1hWZjhvN3hyMW5LdzZCdXB2QXV6dFlPUmdqaTdrQmUv
+ eXFVMG02ODZud1JPQwpNVXdldzNrWW50Y1V2Q0tNWEdzUDJTVGwvN1dkTFRzRk85VTZqN0Er
+ bUtsUjI2bU9manQyR3VqNFFUZFJJVk04ClNTSlhBMHNFSGVtOTEwZVNTOWNxS2wxOCs5am5G
+ dCtqeXNmR1lQQlpXaEt0UVM1Uitjc3RWM1hBT1o5TCt4S1oKYlpCUndnaGxwaEN6TDN5WEZV
+ WVBybnpwR21PaStUTjJEa2NuckJhYmQ5ZVMwSXA1a01MT1JMc2xBNXppN2xVZgpzVGVhektE
+ QzhteUtrOFVpRDZYTDNkUkNJQmc5NThvTExQaGk4RDlxZ0VTUSs4QnZnTVJIWDgrVS8vRDRa
+ ZHRqCmtHRzFrQT09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
+ core_api_key: |
+ LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcFFJQkFBS0NBUUVBcytJMU1l
+ QnZzN0NGQTFNWGxWcXBrOTlNMUZRSlp4OHp2alB5eFUrVWFrNlZyT0xoCjZ4QTNLaCtjVGhR
+ c3ZCMm5RZ1dnaTMxUDhGVzJRRmp1cWlNYjFQY2xyaWU5Qm5hU1NITVFrWURSTTZwU1B5UkEK
+ RG9UOE5pVWdUQjJhNVY2ODg1K0FsdG5DN0ZJMTFCM3RmSmdyeGljN1pKN1FSeWhHZHVicTBG
+ Z3l3YWxlaG5XTQpMbUh2MjhsYjJrZUZLMHY1TVdOMVZXWGxsNk03WEhLQUd1S0ZqM1R4WGhp
+ VkpSblZsZmM1RkI5Z1dMYjR2S2R5CjhCdlIwbXRnNlBUNS9RdmhJY1RKb0RJME5aYTltbks5
+ UlVubXdWeFk5MlM3V1NiOXk5ZWFuYzArQmF6Nlg5TG4KTVdjWTc2NXVSd0J2S2czbTU0NzYv
+ b2lzT1VTRmFaN3YyU3hENndJREFRQUJBb0lCQVFDb1c3MWgweWQ0ekd1Ugpzd0ZObmk4ODRU
+ QXRRZ0lTN0Jjbm04TktmTEx4MUY4dUVxTlR1RGVKUzFDbG15aExZSTJjczF1UmNsV1JJUWVV
+ CnJpZWlRWDNaRXYvSFFoWWVxSGM5SzhTRUNrYkN6bFJ3R0dPRHMxL0M1WGlYQk5abWV3YnFG
+ WXpxb3lGV3daTHoKMXBiaG1DTFFNUVBicHZCVXlSTTZVZUhQNGR5UGQzMXVlWGI1MTFROVF3
+ TGJqRUVzWkdsODdmY0NCQVF1RzlybQozcHNiZDhxTXZSdG14RnMxMkRvNmRCRHFNS3pjRjBk
+ Z29vSkE5VnpIWlRZTjFJSlR6N1FYZVFRVjY0dFlpNklZCitLdWtCemxTblVUekdJT2l2NlpT
+ YXpBbXcyaFhYck1WV0g2QzB1ZHgwbnFWUlc1ZVdzdGxCeitia2hwb0VNY2sKSjMzUHhTM0JB
+ b0dCQU9JSWh3UklEdG4yYmh6TlNhMzdtSFFQeithWGk2ZHRNdzFZK1pqSm1Kc01sWjRDV3Fl
+ Rwo1K0ltenlSKzZYcWhSYklJYjlaaUlMcDAzUGxqZmlXM3BKYjRscE1pd3Rvd3lwaVZIaTht
+ ZFI5cU1JcGU4NlpNCmxkYndlMk9VS2ovNGxTK3RXNXlTWHI2T3N4Wjc0eE12OFJ5amFYb0o3
+ VHdPTk1YclhRNThVbE9iQW9HQkFNdTcKWVVwVFM3MWExRjh6cU5KSXFUeWZNaEFLS0lOOUdh
+ eHY1V0FjQTJIWlN0SDE4dXl5N0cxR2VyN0tFek8zeHBwMwo2TVRENThCK09pcTFMS09CWnln
+ VENnVnlRbmFvVndGNyszOFZqK3JFUkRVcUMwUzdOOS9GbkFiaUJkT3RkRzkwCkxETmswbDdp
+ SHh2bEg5MXRGeFRvVXlCM2hwWkRtd3liNTJlL1NSM3hBb0dCQU5rclprWDMwY1ViWHdwdk55
+ WmgKZ0VXcTE0NXU5bkFEbkRScjAwdzREVmFUVGNGRjg4SFgvVDB0R29LdktUWjRjdFV1QS80
+ UHcvQkJ6Zm9TM0tYeQpmc0hLMENsSUVieS9lamdGdGIySmpxaURSMlg2K3RCQjd3bFhmc1hi
+ R29qaUZyeDdMSFVQc05ZWGx2dTRSaUV1ClE5UEhNZFZlYWovMFNrSUs5QnF4Mmd1WEFvR0Fj
+ Mzd4dzdIKzhRVHArbUtONVZCZDZNa1RGM2E2eXZnRHN2Ym8KWVJqZ2JmdENhRTcyL1dyZGo0
+ RnlHbkR5ZTlKR1c5RjRldnZZaVE3R0tPbjJ1V2FsdFZrOXlDS2pQU05uMTZhUwp4OVBRZDdY
+ Mk9QRngyL0FLMStmdDhSVDNXcTR0b1BXS0RVU3Q0aTVzbG1MSk1yMGlaYTdqV1RlSmErdzlu
+ T05SClIwWnd5L0VDZ1lFQWwrcTNvNVFNRFBrWFhoRmNDOXFMSVZ2SW5sbThqUWpWN0lNMG5s
+ cmJTNHBWT3ZOZGRIRlYKYlZlRUY5OXpqM1RkOHFEQXhRSnpKSURzNmZSQnB5d1drQXJ4SlI3
+ TzVhSEJJQjlNSVlMcTVQRUEyZEY5d2xjTAo1MHl0VXRCUFp0V1dVMVpPYXdOclBiczk1Q29p
+ VGZFanpBcHZTVEhIckdxOVIrKzBlVzlpb3U4PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVkt
+ LS0tLQo=