From 85df96ea3d841a5bac6b7b5d1a822ec8643e1c02 Mon Sep 17 00:00:00 2001 From: Waleed Malik Date: Fri, 28 Jan 2022 17:41:53 +0500 Subject: [PATCH] Synchronize containerd and docker configuration with machine-controller (#136) * Synchronize containerd and docker configuration with machine-controller Signed-off-by: Waleed Malik * Bump machine-controller go dep Signed-off-by: Waleed Malik * Bump boilerplace in prow job Signed-off-by: Waleed Malik * Refactored code Signed-off-by: Waleed Malik * Resolve merge conflicts Signed-off-by: Waleed Malik * Resolve issues with using a single client Signed-off-by: Waleed Malik * Refactored code Signed-off-by: Waleed Malik * Update generated name for OSC, include namespace name in pattern Signed-off-by: Waleed Malik * Minor refactor * Bump machine-controller to v1.42.2 Signed-off-by: Waleed Malik --- .gimps.yaml | 13 +- .gitignore | 1 + .golangci.yml | 4 - .prow.yaml | 2 +- README.md | 44 +- cmd/osm-controller/main.go | 53 ++- deploy/osps/default/osp-amzn2.yaml | 37 +- deploy/osps/default/osp-centos.yaml | 37 +- deploy/osps/default/osp-flatcar.yaml | 37 +- deploy/osps/default/osp-rhel.yaml | 37 +- deploy/osps/default/osp-sles.yaml | 19 +- deploy/osps/default/osp-ubuntu.yaml | 37 +- docs/images/architecture-osm.png | Bin 65627 -> 43304 bytes go.mod | 6 +- go.sum | 18 +- hack/run-operating-system-manager.sh | 2 +- hack/tools.go | 2 +- pkg/cloudprovider/gce/provider.go | 4 +- pkg/cloudprovider/openstack/provider.go | 2 +- pkg/controllers/osc/osc_controller.go | 146 +++--- pkg/controllers/osc/osc_reconciler_test.go | 195 +++++--- .../osc/resources/operating_system_config.go | 283 ++++++----- pkg/controllers/osc/resources/secrets.go | 33 +- .../testdata/osc-flatcar-aws-containerd.yaml | 30 +- .../osc/testdata/osc-flatcar-aws-docker.yaml | 17 +- .../osc-kubelet-configuration-containerd.yaml | 444 ++++++++++++++++++ .../osc-kubelet-configuration-docker.yaml | 416 ++++++++++++++++ .../osc/testdata/osc-rhel-8.x-containerd.yaml | 31 +- ...rd.yaml => osc-ubuntu-aws-containerd.yaml} | 19 +- ...docker.yaml => osc-ubuntu-aws-docker.yaml} | 6 +- pkg/controllers/osc/testdata/osp-flatcar.yaml | 58 ++- pkg/controllers/osc/testdata/osp-rhel.yaml | 71 ++- ...{osp-ubuntu-20.04.yaml => osp-ubuntu.yaml} | 35 +- .../secret-flatcar-aws-containerd.yaml | 5 +- .../testdata/secret-flatcar-aws-docker.yaml | 5 +- ...cret-kubelet-configuration-containerd.yaml | 11 + .../secret-kubelet-configuration-docker.yaml | 11 + .../testdata/secret-rhel-8.x-containerd.yaml | 5 +- ...yaml => secret-ubuntu-aws-containerd.yaml} | 5 +- ...ker.yaml => secret-ubuntu-aws-docker.yaml} | 5 +- pkg/providerconfig/config/config.go | 6 +- 41 files changed, 1664 insertions(+), 528 deletions(-) create mode 100644 pkg/controllers/osc/testdata/osc-kubelet-configuration-containerd.yaml create mode 100644 pkg/controllers/osc/testdata/osc-kubelet-configuration-docker.yaml rename pkg/controllers/osc/testdata/{osc-ubuntu-20.04-aws-containerd.yaml => osc-ubuntu-aws-containerd.yaml} (95%) rename pkg/controllers/osc/testdata/{osc-ubuntu-20.04-aws-docker.yaml => osc-ubuntu-aws-docker.yaml} (98%) rename pkg/controllers/osc/testdata/{osp-ubuntu-20.04.yaml => osp-ubuntu.yaml} (94%) create mode 100644 pkg/controllers/osc/testdata/secret-kubelet-configuration-containerd.yaml create mode 100644 pkg/controllers/osc/testdata/secret-kubelet-configuration-docker.yaml rename pkg/controllers/osc/testdata/{secret-ubuntu-20.04-aws-containerd.yaml => secret-ubuntu-aws-containerd.yaml} (80%) rename pkg/controllers/osc/testdata/{secret-ubuntu-20.04-aws-docker.yaml => secret-ubuntu-aws-docker.yaml} (97%) diff --git a/.gimps.yaml b/.gimps.yaml index 3733676d..ee7bcf63 100644 --- a/.gimps.yaml +++ b/.gimps.yaml @@ -14,16 +14,13 @@ # This is the configuration for https://github.com/xrstf/gimps. -importOrder: [std, external, envoy, kubermatic, kubernetes] +importOrder: [std, external, kubermatic, kubernetes] sets: - name: kubermatic patterns: - - 'k8c.io/**' - - 'github.com/kubermatic/**' + - "k8c.io/**" + - "github.com/kubermatic/**" - name: kubernetes patterns: - - 'k8s.io/**' - - '*.k8s.io/**' - - name: envoy - patterns: - - 'github.com/envoyproxy/**' + - "k8s.io/**" + - "*.k8s.io/**" diff --git a/.gitignore b/.gitignore index 0d39912f..2054554f 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ _build .vscode/ .local +.DS_Store \ No newline at end of file diff --git a/.golangci.yml b/.golangci.yml index 33b19dc3..22e9135a 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -42,7 +42,3 @@ linters: linters-settings: goimports: local-prefixes: k8c.io/operating-system-manager - -issues: - exclude: - - type name will be used as config.ConfigVarResolver by other packages, and that stutters; consider calling this VarResolver diff --git a/.prow.yaml b/.prow.yaml index c0afa697..347be508 100644 --- a/.prow.yaml +++ b/.prow.yaml @@ -24,7 +24,7 @@ presubmits: preset-goproxy: "true" spec: containers: - - image: quay.io/kubermatic-labs/boilerplate:v0.1.1 + - image: quay.io/kubermatic-labs/boilerplate:v0.2.0 command: - make args: diff --git a/README.md b/README.md index 2e09ea69..35a53575 100644 --- a/README.md +++ b/README.md @@ -14,10 +14,12 @@ This project is experimental and currently a work-in-progress. **This is not sup Currently this workflow has the following limitations/issues: -- Machine Controller expects **ALL** the supported OS plugins to exist and be ready. User might only be interested in a subset of the available operating systems. -- The `cloud-configs` are generated against pre-defined templates like [this](https://github.com/kubermatic/machine-controller/blob/master/pkg/userdata/ubuntu/provider.go#L133). This is not ideal because code changes are required to update those templates. -- Each cloud provider sets some limit for `user-data` size, machine won't be created in case of non-compliance. For example, at the time of writing this, AWS has set a [hard limit of 16KB](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-add-user-data.html) for `user-data` size. +- Machine Controller expects **ALL** the supported user-data plugins to exist and be ready. User might only be interested in a subset of the available operating systems. For example, user might only want to work with `ubuntu`. +- The user-data plugins have templates defined [in-code](https://github.com/kubermatic/machine-controller/blob/master/pkg/userdata/ubuntu/provider.go#L133). Which is not ideal because code changes are required to update those templates. - Managing configs for multiple cloud providers, OS flavors and OS versions, adds a lot of complexity and redundancy in machine-controller. +- Since the templates are defined in-code, there is no way for an end user to customize them to suit their use-cases. +- Each cloud provider sets some sort of limits for the size of `user-data`, machine won't be created in case of non-compliance. For example, at the time of writing this, AWS has set a [hard limit of 16KB](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-add-user-data.html). +- Better support for air-gapped environments is required. ### Solution @@ -27,33 +29,33 @@ Operating System Manager was created to solve the above mentioned issues. It dec OSM introduces the following resources: -- OperatingSystemProfile: A resource that represents the details of each operating system. -- OperatingSystemConfig: A resource that contains the `cloud-configs` that are going to be used to bootstrap and provision the worker nodes. -`OperatingSystemConfig` are a subset of `OperatingSystemProfile` and are auto-generated by the `osc-controller` against a certain OSP and MachineDeployment. -For each cluster there are at least two OSC objects: +### OperatingSystemProfile -1. OSC for accessing the cluster; OSC is sent to the worker node via user-data and processed as a cloud-init or ignition config, in order to fetch the second OSC object. -2. OSC for provisioning the machine; OSC represents the actual cloud-config that provision the worker node. +Templatized resource that represents the details of each operating system. OSPs are immutable and default OSPs for supported operating systems are provided/installed automatically by kubermatic. End users can create custom OSPs as well to fit their own use-cases. -The created OSCs are processed by the controllers and they eventually generate a secret inside each user cluster. Which is then consumed by the worker nodes. +Its dedicated controller runs in the **seed** cluster, in user cluster namespace, and operates on the `OperatingSystemProfile` custom resource. It is responsible for installing the default OSPs in user-cluster namespace. -![Architecture](./docs/images/architecture-osm.png) +### OperatingSystemConfig + +Immutable resource that contains the actual configurations that are going to be used to bootstrap and provision the worker nodes. It is a subset of OperatingSystemProfile, rendered using OperatingSystemProfile, MachineDeployment and flags + +Its dedicated controller runs in the **seed** cluster, in user cluster namespace, and is responsible for generating the OSCs in **seed** and secrets in `cloud-init-settings` namespace in the user cluster. -### OperatingSystemProfile Controller -This controller runs in the `master` cluster and operates on the `OperatingSystemProfile` custom resource. It is responsible for creating the `OperatingSystemConfig` resources. +For each cluster there are at least two OSC objects: + +1. **Bootstrap**: OSC used for initial configuration of machine and to fetch the provisioning OSC object. +2. **Provisioning**: OSC with the actual cloud-config that provision the worker node. -### OperatingSystemConfig Controller +OSCs are processed by controllers to eventually generate **secrets inside each user cluster**. These secrets are then consumed by worker nodes. -This controller runs in the `seed` cluster in the namespace of the user cluster and operates on the `OperatingSystemConfig` custom resource. It is responsible for generating `user-data` secret through the OperatingSystemConfig resource. +![Architecture](./docs/images/architecture-osm.png) ### Air-gapped Environment This controller was designed by keeping air-gapped environments in mind. Customers can use their own VM images by creating custom OSP profiles to provision nodes in a cluster that doesn't have outbound internet access. -![Architecture](./docs/images/architecture-osm-air-gapped.png) - More work is being done to make it even easier to use OSM in air-gapped environments. ## Support @@ -68,10 +70,6 @@ _The code and sample YAML files in the master branch of the operating-system-man ## Development -### Testing - -Simply run `make test` - ### Local Development To run OSM locally: @@ -81,6 +79,10 @@ To run OSM locally: - Create relevant OperatingSystemProfile resources. Check [sample](./deploy/osps/default) for reference. - Run `make run` +### Testing + +Simply run `make test` + ## Troubleshooting If you encounter issues [file an issue][1] or talk to us on the [#kubermatic channel][6] on the [Kubermatic Slack][7]. diff --git a/cmd/osm-controller/main.go b/cmd/osm-controller/main.go index 0d06d479..3758b995 100644 --- a/cmd/osm-controller/main.go +++ b/cmd/osm-controller/main.go @@ -21,14 +21,13 @@ import ( "flag" "fmt" "net" - "os" - "path" "strconv" "strings" "go.uber.org/zap" clusterv1alpha1 "github.com/kubermatic/machine-controller/pkg/apis/cluster/v1alpha1" + "github.com/kubermatic/machine-controller/pkg/containerruntime" "k8c.io/operating-system-manager/pkg/controllers/osc" "k8c.io/operating-system-manager/pkg/controllers/osp" osmv1alpha1 "k8c.io/operating-system-manager/pkg/crd/osm/v1alpha1" @@ -40,7 +39,6 @@ import ( "k8s.io/client-go/kubernetes/scheme" clientgoscheme "k8s.io/client-go/kubernetes/scheme" "k8s.io/client-go/tools/clientcmd" - "k8s.io/client-go/util/homedir" "k8s.io/klog" ctrl "sigs.k8s.io/controller-runtime" ctrlruntimeclient "sigs.k8s.io/controller-runtime/pkg/client" @@ -57,8 +55,6 @@ type options struct { externalCloudProvider bool pauseImage string initialTaints string - nodeHTTPProxy string - nodeNoProxy string nodePortRange string podCidr string enableLeaderElection bool @@ -71,6 +67,16 @@ type options struct { metricsAddress string workerHealthProbeAddress string workerMetricsAddress string + + // Flags for configuring CRI + nodeInsecureRegistries string + nodeRegistryMirrors string + nodeRegistryCredentialsSecret string + nodeContainerdRegistryMirrors containerruntime.RegistryMirrorsFlags + + // Flags for proxy + nodeHTTPProxy string + nodeNoProxy string } func init() { @@ -95,12 +101,16 @@ func main() { flag.StringVar(&opt.clusterDNSIPs, "cluster-dns", "10.10.10.10", "Comma-separated list of DNS server IP address.") flag.StringVar(&opt.pauseImage, "pause-image", "", "pause image to use in Kubelet.") flag.StringVar(&opt.initialTaints, "initial-taints", "", "taints to use when creating the node.") - flag.StringVar(&opt.nodeHTTPProxy, "node-http-proxy", "", "If set, it configures the 'HTTP_PROXY' & 'HTTPS_PROXY' environment variable on the nodes.") - flag.StringVar(&opt.nodeNoProxy, "node-no-proxy", ".svc,.cluster.local,localhost,127.0.0.1", "If set, it configures the 'NO_PROXY' environment variable on the nodes.") + flag.StringVar(&opt.podCidr, "pod-cidr", "172.25.0.0/16", "The network ranges from which POD networks are allocated") flag.StringVar(&opt.nodePortRange, "node-port-range", "30000-32767", "A port range to reserve for services with NodePort visibility") flag.StringVar(&opt.kubeletFeatureGates, "node-kubelet-feature-gates", "RotateKubeletServerCertificate=true", "Feature gates to set on the kubelet") + flag.StringVar(&opt.nodeHTTPProxy, "node-http-proxy", "", "If set, it configures the 'HTTP_PROXY' & 'HTTPS_PROXY' environment variable on the nodes.") + flag.StringVar(&opt.nodeNoProxy, "node-no-proxy", ".svc,.cluster.local,localhost,127.0.0.1", "If set, it configures the 'NO_PROXY' environment variable on the nodes.") + flag.StringVar(&opt.nodeInsecureRegistries, "node-insecure-registries", "", "Comma separated list of registries which should be configured as insecure on the container runtime") + flag.StringVar(&opt.nodeRegistryMirrors, "node-registry-mirrors", "", "Comma separated list of Docker image mirrors") + flag.StringVar(&opt.healthProbeAddress, "health-probe-address", "127.0.0.1:8085", "The address on which the liveness check on /healthz and readiness check on /readyz will be available") flag.StringVar(&opt.metricsAddress, "metrics-address", "127.0.0.1:8080", "The address on which Prometheus metrics will be available under /metrics") @@ -120,6 +130,7 @@ func main() { opt.kubeconfig = flag.Lookup("kubeconfig").Value.(flag.Getter).Get().(string) + // Parse flags parsedClusterDNSIPs, err := parseClusterDNSIPs(opt.clusterDNSIPs) if err != nil { klog.Fatalf("invalid cluster dns specified: %v", err) @@ -130,6 +141,19 @@ func main() { klog.Fatalf("invalid kubelet feature gates specified: %v", err) } + containerRuntimeOpts := containerruntime.Opts{ + ContainerRuntime: opt.containerRuntime, + ContainerdRegistryMirrors: opt.nodeContainerdRegistryMirrors, + InsecureRegistries: opt.nodeInsecureRegistries, + PauseImage: opt.pauseImage, + RegistryMirrors: opt.nodeRegistryMirrors, + RegistryCredentialsSecret: opt.nodeRegistryCredentialsSecret, + } + containerRuntimeConfig, err := containerruntime.BuildConfig(containerRuntimeOpts) + if err != nil { + klog.Fatalf("failed to generate container runtime config: %v", err) + } + logger, err := zap.NewProduction() if err != nil { klog.Fatal(err) @@ -218,6 +242,8 @@ func main() { opt.nodeNoProxy, opt.nodePortRange, opt.podCidr, + containerRuntimeConfig, + opt.nodeRegistryCredentialsSecret, parsedKubeletFeatureGates, ); err != nil { klog.Fatal(err) @@ -238,7 +264,10 @@ func createManager(opt *options) (manager.Manager, error) { HealthProbeBindAddress: opt.healthProbeAddress, MetricsBindAddress: opt.metricsAddress, Port: 9443, - Namespace: opt.namespace, + } + + if opt.workerClusterKubeconfig != "" { + options.Namespace = opt.namespace } mgr, err := manager.New(config.GetConfigOrDie(), options) @@ -292,11 +321,3 @@ func parseKubeletFeatureGates(s string) (map[string]bool, error) { } return featureGates, nil } - -// getKubeConfigPath returns the path to the kubeconfig file. -func getKubeConfigPath() string { - if os.Getenv("KUBECONFIG") != "" { - return os.Getenv("KUBECONFIG") - } - return path.Join(homedir.HomeDir(), ".kube/config") -} diff --git a/deploy/osps/default/osp-amzn2.yaml b/deploy/osps/default/osp-amzn2.yaml index 0a2f2876..ea105787 100644 --- a/deploy/osps/default/osp-amzn2.yaml +++ b/deploy/osps/default/osp-amzn2.yaml @@ -16,11 +16,11 @@ apiVersion: operatingsystemmanager.k8c.io/v1alpha1 kind: OperatingSystemProfile metadata: name: osp-amzn2 - namespace: cloud-init-settings + namespace: kube-system spec: osName: "amzn2" osVersion: "2.0" - version: "v0.1.0" + version: "v0.1.1" supportedCloudProviders: - name: "aws" supportedContainerRuntimes: @@ -32,23 +32,7 @@ spec: inline: encoding: b64 data: | - version = 2 - - [metrics] - address = "127.0.0.1:1338" - - [plugins] - [plugins."io.containerd.grpc.v1.cri"] - [plugins."io.containerd.grpc.v1.cri".containerd] - [plugins."io.containerd.grpc.v1.cri".containerd.runtimes] - [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] - runtime_type = "io.containerd.runc.v2" - [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] - SystemdCgroup = true - [plugins."io.containerd.grpc.v1.cri".registry] - [plugins."io.containerd.grpc.v1.cri".registry.mirrors] - [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"] - endpoint = ["https://registry-1.docker.io"] + {{ .ContainerRuntimeConfig}} templates: containerRuntimeInstallation: |- mkdir -p /etc/systemd/system/containerd.service.d @@ -79,7 +63,7 @@ spec: inline: encoding: b64 data: |- - {"exec-opts":["native.cgroupdriver=systemd"],"storage-driver":"overlay2","log-driver":"json-file","log-opts":{"max-file":"5","max-size":"100m"}} + {{ .ContainerRuntimeConfig}} templates: containerRuntimeInstallation: |- mkdir -p /etc/systemd/system/containerd.service.d /etc/systemd/system/docker.service.d @@ -503,6 +487,19 @@ spec: - "{{ . }}" {{- end }} clusterDomain: cluster.local + {{- /* containerLogMaxSize and containerLogMaxFiles have no effect for docker */}} + {{- if ne .ContainerRuntime "docker" }} + {{- if .ContainerLogMaxSize }} + containerLogMaxSize: {{ .ContainerLogMaxSize }} + {{- else }} + containerLogMaxSize: 100Mi + {{- end }} + {{- if .ContainerLogMaxFiles }} + containerLogMaxFiles: {{ .ContainerLogMaxFiles }} + {{- else }} + containerLogMaxFiles: 5 + {{- end }} + {{- end }} featureGates: {{- if .KubeletFeatureGates -}} {{ range $key, $val := .KubeletFeatureGates }} diff --git a/deploy/osps/default/osp-centos.yaml b/deploy/osps/default/osp-centos.yaml index aa00f4d5..f2475478 100644 --- a/deploy/osps/default/osp-centos.yaml +++ b/deploy/osps/default/osp-centos.yaml @@ -16,11 +16,11 @@ apiVersion: operatingsystemmanager.k8c.io/v1alpha1 kind: OperatingSystemProfile metadata: name: osp-centos - namespace: cloud-init-settings + namespace: kube-system spec: osName: "centos" osVersion: "7.7" - version: "v0.1.0" + version: "v0.1.1" supportedCloudProviders: - name: "aws" - name: "azure" @@ -39,23 +39,7 @@ spec: inline: encoding: b64 data: | - version = 2 - - [metrics] - address = "127.0.0.1:1338" - - [plugins] - [plugins."io.containerd.grpc.v1.cri"] - [plugins."io.containerd.grpc.v1.cri".containerd] - [plugins."io.containerd.grpc.v1.cri".containerd.runtimes] - [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] - runtime_type = "io.containerd.runc.v2" - [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] - SystemdCgroup = true - [plugins."io.containerd.grpc.v1.cri".registry] - [plugins."io.containerd.grpc.v1.cri".registry.mirrors] - [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"] - endpoint = ["https://registry-1.docker.io"] + {{ .ContainerRuntimeConfig}} templates: containerRuntimeInstallation: |- yum install -y yum-utils @@ -91,7 +75,7 @@ spec: inline: encoding: b64 data: |- - {"exec-opts":["native.cgroupdriver=systemd"],"storage-driver":"overlay2","log-driver":"json-file","log-opts":{"max-file":"5","max-size":"100m"}} + {{ .ContainerRuntimeConfig}} templates: containerRuntimeInstallation: |- yum install -y yum-utils @@ -532,6 +516,19 @@ spec: - "{{ . }}" {{- end }} clusterDomain: cluster.local + {{- /* containerLogMaxSize and containerLogMaxFiles have no effect for docker */}} + {{- if ne .ContainerRuntime "docker" }} + {{- if .ContainerLogMaxSize }} + containerLogMaxSize: {{ .ContainerLogMaxSize }} + {{- else }} + containerLogMaxSize: 100Mi + {{- end }} + {{- if .ContainerLogMaxFiles }} + containerLogMaxFiles: {{ .ContainerLogMaxFiles }} + {{- else }} + containerLogMaxFiles: 5 + {{- end }} + {{- end }} featureGates: {{- if .KubeletFeatureGates -}} {{ range $key, $val := .KubeletFeatureGates }} diff --git a/deploy/osps/default/osp-flatcar.yaml b/deploy/osps/default/osp-flatcar.yaml index f955487f..259bd358 100644 --- a/deploy/osps/default/osp-flatcar.yaml +++ b/deploy/osps/default/osp-flatcar.yaml @@ -16,12 +16,12 @@ apiVersion: operatingsystemmanager.k8c.io/v1alpha1 kind: OperatingSystemProfile metadata: name: osp-flatcar - namespace: cloud-init-settings + namespace: kube-system spec: osName: flatcar ## Flatcar Stable (09/11/2021) osVersion: "2983.2.0" - version: "v0.1.0" + version: "v0.1.1" supportedCloudProviders: - name: aws - name: azure @@ -36,23 +36,7 @@ spec: content: inline: data: | - version = 2 - - [metrics] - address = "127.0.0.1:1338" - - [plugins] - [plugins."io.containerd.grpc.v1.cri"] - [plugins."io.containerd.grpc.v1.cri".containerd] - [plugins."io.containerd.grpc.v1.cri".containerd.runtimes] - [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] - runtime_type = "io.containerd.runc.v2" - [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] - SystemdCgroup = true - [plugins."io.containerd.grpc.v1.cri".registry] - [plugins."io.containerd.grpc.v1.cri".registry.mirrors] - [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"] - endpoint = ["https://registry-1.docker.io"] + {{ .ContainerRuntimeConfig}} - path: /etc/systemd/system/containerd.service.d/10-custom.conf content: inline: @@ -77,7 +61,7 @@ spec: content: inline: data: |- - {"exec-opts":["native.cgroupdriver=systemd"],"storage-driver":"overlay2","log-driver":"json-file","log-opts":{"max-file":"5","max-size":"100m"}} + {{ .ContainerRuntimeConfig}} - path: /etc/systemd/system/docker.service.d/10-custom.conf permissions: 0644 content: @@ -542,6 +526,19 @@ spec: - "{{ . }}" {{- end }} clusterDomain: cluster.local + {{- /* containerLogMaxSize and containerLogMaxFiles have no effect for docker */}} + {{- if ne .ContainerRuntime "docker" }} + {{- if .ContainerLogMaxSize }} + containerLogMaxSize: {{ .ContainerLogMaxSize }} + {{- else }} + containerLogMaxSize: 100Mi + {{- end }} + {{- if .ContainerLogMaxFiles }} + containerLogMaxFiles: {{ .ContainerLogMaxFiles }} + {{- else }} + containerLogMaxFiles: 5 + {{- end }} + {{- end }} featureGates: {{- if .KubeletFeatureGates -}} {{ range $key, $val := .KubeletFeatureGates }} diff --git a/deploy/osps/default/osp-rhel.yaml b/deploy/osps/default/osp-rhel.yaml index 26c8b07e..b89eee38 100644 --- a/deploy/osps/default/osp-rhel.yaml +++ b/deploy/osps/default/osp-rhel.yaml @@ -16,11 +16,11 @@ apiVersion: operatingsystemmanager.k8c.io/v1alpha1 kind: OperatingSystemProfile metadata: name: osp-rhel - namespace: cloud-init-settings + namespace: kube-system spec: osName: "rhel" osVersion: "8.4" - version: "v0.1.0" + version: "v0.1.1" supportedCloudProviders: - name: "aws" - name: "azure" @@ -36,23 +36,7 @@ spec: inline: encoding: b64 data: | - version = 2 - - [metrics] - address = "127.0.0.1:1338" - - [plugins] - [plugins."io.containerd.grpc.v1.cri"] - [plugins."io.containerd.grpc.v1.cri".containerd] - [plugins."io.containerd.grpc.v1.cri".containerd.runtimes] - [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] - runtime_type = "io.containerd.runc.v2" - [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] - SystemdCgroup = true - [plugins."io.containerd.grpc.v1.cri".registry] - [plugins."io.containerd.grpc.v1.cri".registry.mirrors] - [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"] - endpoint = ["https://registry-1.docker.io"] + {{ .ContainerRuntimeConfig}} templates: containerRuntimeInstallation: |- yum install -y yum-utils @@ -88,7 +72,7 @@ spec: inline: encoding: b64 data: |- - {"exec-opts":["native.cgroupdriver=systemd"],"storage-driver":"overlay2","log-driver":"json-file","log-opts":{"max-file":"5","max-size":"10m"}} + {{ .ContainerRuntimeConfig}} templates: containerRuntimeInstallation: |- yum install -y yum-utils @@ -531,6 +515,19 @@ spec: - "{{ . }}" {{- end }} clusterDomain: cluster.local + {{- /* containerLogMaxSize and containerLogMaxFiles have no effect for docker */}} + {{- if ne .ContainerRuntime "docker" }} + {{- if .ContainerLogMaxSize }} + containerLogMaxSize: {{ .ContainerLogMaxSize }} + {{- else }} + containerLogMaxSize: 100Mi + {{- end }} + {{- if .ContainerLogMaxFiles }} + containerLogMaxFiles: {{ .ContainerLogMaxFiles }} + {{- else }} + containerLogMaxFiles: 5 + {{- end }} + {{- end }} featureGates: {{- if .KubeletFeatureGates -}} {{ range $key, $val := .KubeletFeatureGates }} diff --git a/deploy/osps/default/osp-sles.yaml b/deploy/osps/default/osp-sles.yaml index 2a997139..18d99d6b 100644 --- a/deploy/osps/default/osp-sles.yaml +++ b/deploy/osps/default/osp-sles.yaml @@ -16,11 +16,11 @@ apiVersion: operatingsystemmanager.k8c.io/v1alpha1 kind: OperatingSystemProfile metadata: name: osp-sles - namespace: cloud-init-settings + namespace: kube-system spec: osName: sles osVersion: "15-SP-1" - version: "v0.1.0" + version: "v0.1.1" supportedCloudProviders: - name: aws supportedContainerRuntimes: @@ -32,7 +32,7 @@ spec: inline: encoding: b64 data: |- - {"exec-opts":["native.cgroupdriver=systemd"],"storage-driver":"overlay2","log-driver":"json-file","log-opts":{"max-file":"5","max-size":"100m"}} + {{ .ContainerRuntimeConfig}} - path: /etc/systemd/system/docker.service.d/10-custom.conf permissions: 0644 content: @@ -436,6 +436,19 @@ spec: - "{{ . }}" {{- end }} clusterDomain: cluster.local + {{- /* containerLogMaxSize and containerLogMaxFiles have no effect for docker */}} + {{- if ne .ContainerRuntime "docker" }} + {{- if .ContainerLogMaxSize }} + containerLogMaxSize: {{ .ContainerLogMaxSize }} + {{- else }} + containerLogMaxSize: 100Mi + {{- end }} + {{- if .ContainerLogMaxFiles }} + containerLogMaxFiles: {{ .ContainerLogMaxFiles }} + {{- else }} + containerLogMaxFiles: 5 + {{- end }} + {{- end }} featureGates: {{- if .KubeletFeatureGates -}} {{ range $key, $val := .KubeletFeatureGates }} diff --git a/deploy/osps/default/osp-ubuntu.yaml b/deploy/osps/default/osp-ubuntu.yaml index b4efaa62..5162f9c7 100644 --- a/deploy/osps/default/osp-ubuntu.yaml +++ b/deploy/osps/default/osp-ubuntu.yaml @@ -16,11 +16,11 @@ apiVersion: operatingsystemmanager.k8c.io/v1alpha1 kind: OperatingSystemProfile metadata: name: osp-ubuntu - namespace: cloud-init-settings + namespace: kube-system spec: osName: "ubuntu" osVersion: "20.04" - version: "v0.1.0" + version: "v0.1.1" supportedCloudProviders: - name: "aws" - name: "azure" @@ -40,23 +40,7 @@ spec: inline: encoding: b64 data: | - version = 2 - - [metrics] - address = "127.0.0.1:1338" - - [plugins] - [plugins."io.containerd.grpc.v1.cri"] - [plugins."io.containerd.grpc.v1.cri".containerd] - [plugins."io.containerd.grpc.v1.cri".containerd.runtimes] - [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] - runtime_type = "io.containerd.runc.v2" - [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] - SystemdCgroup = true - [plugins."io.containerd.grpc.v1.cri".registry] - [plugins."io.containerd.grpc.v1.cri".registry.mirrors] - [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"] - endpoint = ["https://registry-1.docker.io"] + {{ .ContainerRuntimeConfig}} templates: containerRuntimeInstallation: |- apt-get update @@ -89,7 +73,7 @@ spec: inline: encoding: b64 data: |- - {"exec-opts":["native.cgroupdriver=systemd"],"storage-driver":"overlay2","log-driver":"json-file","log-opts":{"max-file":"5","max-size":"100m"}} + {{ .ContainerRuntimeConfig}} templates: containerRuntimeInstallation: |- apt-get update @@ -526,6 +510,19 @@ spec: - "{{ . }}" {{- end }} clusterDomain: cluster.local + {{- /* containerLogMaxSize and containerLogMaxFiles have no effect for docker */}} + {{- if ne .ContainerRuntime "docker" }} + {{- if .ContainerLogMaxSize }} + containerLogMaxSize: {{ .ContainerLogMaxSize }} + {{- else }} + containerLogMaxSize: 100Mi + {{- end }} + {{- if .ContainerLogMaxFiles }} + containerLogMaxFiles: {{ .ContainerLogMaxFiles }} + {{- else }} + containerLogMaxFiles: 5 + {{- end }} + {{- end }} featureGates: {{- if .KubeletFeatureGates -}} {{ range $key, $val := .KubeletFeatureGates }} diff --git a/docs/images/architecture-osm.png b/docs/images/architecture-osm.png index c5123f2d92644f34bf9cdcd3eaf282dfe7c7b56a..85f52de424f35baedc4407a37f7aed81c28404bc 100644 GIT binary patch literal 43304 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 literal 65627 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%0DpzuwOkQ|q>R2> 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üsIveADcvYFZC8Zd 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%0A>|Wa{R~fS*EMTsH$JJ8@lwD6#n=MpB0W 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 0 { + containerRuntimeConfig.ContainerLogMaxSize = *kubeletConfigs.ContainerLogMaxSize + } - if len(nodeHTTPProxy) > 0 { - data.HTTPProxy = &nodeHTTPProxy - } - if len(nodeNoProxy) > 0 { - data.NoProxy = &nodeNoProxy - } - if providerConfig.Network != nil { - data.NetworkConfig = providerConfig.Network - } + if kubeletConfigs.ContainerLogMaxFiles != nil && len(*kubeletConfigs.ContainerLogMaxFiles) > 0 { + containerRuntimeConfig.ContainerLogMaxFiles = *kubeletConfigs.ContainerLogMaxFiles + } - err = setOperatingSystemConfig(providerConfig.OperatingSystem, providerConfig.OperatingSystemSpec, &data) - if err != nil { - return nil, fmt.Errorf("failed to add operating system spec: %v", err) - } + crEngine := containerRuntimeConfig.Engine(kubeletVersion) + crConfig, err := crEngine.Config() + if err != nil { + return nil, fmt.Errorf("failed to generate container runtime config: %w", err) + } - // Handling for kubelet configuration - data.kubeletConfig = kubeletResourceManagementConfig(md.Annotations) + if external { + externalCloudProvider = true + } - // Handle files - osp.Spec.Files = append(osp.Spec.Files, selectAdditionalFiles(osp, containerRuntime)...) - additionalTemplates, err := selectAdditionalTemplates(osp, containerRuntime, data) - if err != nil { - return nil, fmt.Errorf("failed to add OSP templates: %v", err) - } - populatedFiles, err := populateFilesList(osp.Spec.Files, additionalTemplates, data) - if err != nil { - return nil, fmt.Errorf("failed to populate OSP file template: %v", err) - } + data := filesData{ + KubeVersion: kubeletVersionStr, + ClusterDNSIPs: clusterDNSIPs, + KubernetesCACert: caCert, + InTreeCCMAvailable: inTreeCCM, + CloudConfig: cloudConfig, + ContainerRuntime: containerRuntime, + CloudProviderName: osmv1alpha1.CloudProvider(providerConfig.CloudProvider), + ExternalCloudProvider: externalCloudProvider, + PauseImage: pauseImage, + InitialTaints: initialTaints, + PodCIDR: podCidr, + NodePortRange: nodePortRange, + ContainerRuntimeConfig: crConfig, + KubeletFeatureGates: kubeletFeatureGates, + kubeletConfig: kubeletConfigs, + } - osc.Spec = osmv1alpha1.OperatingSystemConfigSpec{ - OSName: ospOriginal.Spec.OSName, - OSVersion: ospOriginal.Spec.OSVersion, - Units: ospOriginal.Spec.Units, - Files: populatedFiles, - CloudProvider: osmv1alpha1.CloudProviderSpec{ - Name: osmv1alpha1.CloudProvider(providerConfig.CloudProvider), - Spec: providerConfig.CloudProviderSpec, - }, - UserSSHKeys: providerConfig.SSHPublicKeys, - CloudInitModules: osp.Spec.CloudInitModules, - } + if len(nodeHTTPProxy) > 0 { + data.HTTPProxy = &nodeHTTPProxy + } + if len(nodeNoProxy) > 0 { + data.NoProxy = &nodeNoProxy + } + if providerConfig.Network != nil { + data.NetworkConfig = providerConfig.Network + } - return osc, nil - } + err = setOperatingSystemConfig(providerConfig.OperatingSystem, providerConfig.OperatingSystemSpec, &data) + if err != nil { + return nil, fmt.Errorf("failed to add operating system spec: %v", err) + } + + // Handle files + osp.Spec.Files = append(osp.Spec.Files, selectAdditionalFiles(osp, containerRuntime)...) + additionalTemplates, err := selectAdditionalTemplates(osp, containerRuntime, data) + if err != nil { + return nil, fmt.Errorf("failed to add OSP templates: %v", err) + } + populatedFiles, err := populateFilesList(osp.Spec.Files, additionalTemplates, data) + if err != nil { + return nil, fmt.Errorf("failed to populate OSP file template: %v", err) + } + + osc.Spec = osmv1alpha1.OperatingSystemConfigSpec{ + OSName: ospOriginal.Spec.OSName, + OSVersion: ospOriginal.Spec.OSVersion, + Units: ospOriginal.Spec.Units, + Files: populatedFiles, + CloudProvider: osmv1alpha1.CloudProviderSpec{ + Name: osmv1alpha1.CloudProvider(providerConfig.CloudProvider), + Spec: providerConfig.CloudProviderSpec, + }, + UserSSHKeys: providerConfig.SSHPublicKeys, + CloudInitModules: osp.Spec.CloudInitModules, } + return osc, nil } type filesData struct { - KubeVersion string - KubeletConfiguration string - KubeletSystemdUnit string - InTreeCCMAvailable bool - CNIVersion string - ClusterDNSIPs []net.IP - KubernetesCACert string - ServerAddress string - CloudConfig string - ContainerRuntime string - CloudProviderName osmv1alpha1.CloudProvider - NetworkConfig *providerconfigtypes.NetworkConfig - ExternalCloudProvider bool - PauseImage string - InitialTaints string - HTTPProxy *string - NoProxy *string - PodCIDR string - NodePortRange string - KubeletFeatureGates map[string]bool + KubeVersion string + KubeletConfiguration string + KubeletSystemdUnit string + InTreeCCMAvailable bool + CNIVersion string + ClusterDNSIPs []net.IP + KubernetesCACert string + ServerAddress string + CloudConfig string + ContainerRuntime string + CloudProviderName osmv1alpha1.CloudProvider + NetworkConfig *providerconfigtypes.NetworkConfig + ExternalCloudProvider bool + PauseImage string + InitialTaints string + HTTPProxy *string + NoProxy *string + PodCIDR string + NodePortRange string + ContainerRuntimeConfig string + KubeletFeatureGates map[string]bool kubeletConfig OperatingSystemConfig @@ -208,9 +231,11 @@ type OperatingSystemConfig struct { } type kubeletConfig struct { - KubeReserved *map[string]string - SystemReserved *map[string]string - EvictionHard *map[string]string + KubeReserved *map[string]string + SystemReserved *map[string]string + EvictionHard *map[string]string + ContainerLogMaxSize *string + ContainerLogMaxFiles *string } func populateFilesList(files []osmv1alpha1.File, additionalTemplates []string, d filesData) ([]osmv1alpha1.File, error) { @@ -341,7 +366,7 @@ func setOperatingSystemConfig(os providerconfigtypes.OperatingSystem, operatingS return errors.New("unknown OperatingSystem") } -func kubeletResourceManagementConfig(annotations map[string]string) kubeletConfig { +func getKubeletConfigs(annotations map[string]string) kubeletConfig { var cfg kubeletConfig kubeletConfigs := common.GetKubeletConfigs(annotations) @@ -349,16 +374,24 @@ func kubeletResourceManagementConfig(annotations map[string]string) kubeletConfi return cfg } - if kubeReserved, ok := kubeletConfigs[common.KubeReservedKubeletConfig]; ok { - cfg.KubeReserved = getKeyValueMap(kubeReserved, "=") + if val, ok := kubeletConfigs[common.KubeReservedKubeletConfig]; ok { + cfg.KubeReserved = getKeyValueMap(val, "=") + } + + if val, ok := kubeletConfigs[common.SystemReservedKubeletConfig]; ok { + cfg.SystemReserved = getKeyValueMap(val, "=") + } + + if val, ok := kubeletConfigs[common.EvictionHardKubeletConfig]; ok { + cfg.EvictionHard = getKeyValueMap(val, "<") } - if systemReserved, ok := kubeletConfigs[common.SystemReservedKubeletConfig]; ok { - cfg.SystemReserved = getKeyValueMap(systemReserved, "=") + if val, ok := kubeletConfigs[common.ContainerLogMaxSizeKubeletConfig]; ok { + cfg.ContainerLogMaxSize = &val } - if evictionHard, ok := kubeletConfigs[common.EvictionHardKubeletConfig]; ok { - cfg.EvictionHard = getKeyValueMap(evictionHard, "<") + if val, ok := kubeletConfigs[common.ContainerLogMaxFilesKubeletConfig]; ok { + cfg.ContainerLogMaxFiles = &val } return cfg } diff --git a/pkg/controllers/osc/resources/secrets.go b/pkg/controllers/osc/resources/secrets.go index 2a33922d..73529b65 100644 --- a/pkg/controllers/osc/resources/secrets.go +++ b/pkg/controllers/osc/resources/secrets.go @@ -17,27 +17,26 @@ limitations under the License. package resources import ( - "fmt" - - "k8c.io/operating-system-manager/pkg/resources/reconciling" - corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/utils/pointer" ) -// CloudConfigSecretCreator returns a function to create a secret that contains the cloud-init or ignition configurations. -func CloudConfigSecretCreator(mdName string, oscType CloudConfigSecret, data []byte) reconciling.NamedSecretCreatorGetter { - return func() (string, reconciling.SecretCreator) { - secretName := fmt.Sprintf(MachineDeploymentSubresourceNamePattern, mdName, oscType) - return secretName, func(sec *corev1.Secret) (*corev1.Secret, error) { - if sec.Data == nil { - sec.Data = map[string][]byte{} - } - sec.Data["cloud-config"] = data +// GenerateCloudConfigSecret returns a secret that contains the cloud-init or ignition configurations. +func GenerateCloudConfigSecret(name, namespace string, data []byte) *corev1.Secret { + secret := corev1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: name, + Namespace: namespace, + }, + Type: corev1.SecretTypeOpaque, + // Cloud config secret is immutable + Immutable: pointer.Bool(true), + } - // Cloud config secret is immutable - sec.Immutable = pointer.Bool(true) - return sec, nil - } + if secret.Data == nil { + secret.Data = map[string][]byte{} } + secret.Data["cloud-config"] = data + return &secret } diff --git a/pkg/controllers/osc/testdata/osc-flatcar-aws-containerd.yaml b/pkg/controllers/osc/testdata/osc-flatcar-aws-containerd.yaml index 176d6078..311d34a8 100644 --- a/pkg/controllers/osc/testdata/osc-flatcar-aws-containerd.yaml +++ b/pkg/controllers/osc/testdata/osc-flatcar-aws-containerd.yaml @@ -2,8 +2,8 @@ apiVersion: operatingsystemmanager.k8c.io/v1alpha1 kind: OperatingSystemConfig metadata: creationTimestamp: null - name: flatcar-aws-containerd-osc-provisioning - namespace: cloud-init-settings + name: flatcar-aws-containerd-kube-system-osc-provisioning + namespace: kube-system resourceVersion: "1" spec: cloudProvider: @@ -128,6 +128,17 @@ spec: tar xvf "$cni_filename" rm -f "$cni_filename" cd - + CRI_TOOLS_RELEASE="${CRI_TOOLS_RELEASE:-v1.22.0}" + cri_tools_base_url="https://github.com/kubernetes-sigs/cri-tools/releases/download/${CRI_TOOLS_RELEASE}" + cri_tools_filename="crictl-${CRI_TOOLS_RELEASE}-linux-${arch}.tar.gz" + curl -Lfo "$opt_bin/$cri_tools_filename" "$cri_tools_base_url/$cri_tools_filename" + cri_tools_sum=$(curl -Lf "$cri_tools_base_url/$cri_tools_filename.sha256" | sed 's/\*\///') + cd "$opt_bin" + sha256sum -c <<<"$cri_tools_sum" + tar xvf "$cri_tools_filename" + rm -f "$cri_tools_filename" + ln -sf "$opt_bin/crictl" "$usr_local_bin"/crictl || echo "symbolic link is skipped" + cd - KUBE_VERSION="${KUBE_VERSION:-v1.22.1}" kube_dir="$opt_bin/kubernetes-$KUBE_VERSION" kube_base_url="https://storage.googleapis.com/kubernetes-release/release/$KUBE_VERSION/bin/linux/$arch" @@ -280,6 +291,8 @@ spec: clusterDNS: - "10.0.0.0" clusterDomain: cluster.local + containerLogMaxSize: 100Mi + containerLogMaxFiles: 5 featureGates: GracefulNodeShutdown: true IdentifyPodOS: false @@ -361,7 +374,7 @@ spec: permissions: 384 - content: inline: - data: | + data: |+ version = 2 [metrics] @@ -369,6 +382,7 @@ spec: [plugins] [plugins."io.containerd.grpc.v1.cri"] + sandbox_image = "192.168.100.100:5000/kubernetes/pause:v3.1" [plugins."io.containerd.grpc.v1.cri".containerd] [plugins."io.containerd.grpc.v1.cri".containerd.runtimes] [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] @@ -378,7 +392,15 @@ spec: [plugins."io.containerd.grpc.v1.cri".registry] [plugins."io.containerd.grpc.v1.cri".registry.mirrors] [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"] - endpoint = ["https://registry-1.docker.io"] + endpoint = ["https://registry.docker-cn.com"] + [plugins."io.containerd.grpc.v1.cri".registry.configs] + [plugins."io.containerd.grpc.v1.cri".registry.configs."10.0.0.1:5000"] + [plugins."io.containerd.grpc.v1.cri".registry.configs."10.0.0.1:5000".tls] + insecure_skip_verify = true + [plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.100.100:5000"] + [plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.100.100:5000".tls] + insecure_skip_verify = true + path: /etc/containerd/config.toml permissions: 420 - content: diff --git a/pkg/controllers/osc/testdata/osc-flatcar-aws-docker.yaml b/pkg/controllers/osc/testdata/osc-flatcar-aws-docker.yaml index 9da181ba..11009426 100644 --- a/pkg/controllers/osc/testdata/osc-flatcar-aws-docker.yaml +++ b/pkg/controllers/osc/testdata/osc-flatcar-aws-docker.yaml @@ -2,8 +2,8 @@ apiVersion: operatingsystemmanager.k8c.io/v1alpha1 kind: OperatingSystemConfig metadata: creationTimestamp: null - name: flatcar-aws-docker-osc-provisioning - namespace: cloud-init-settings + name: flatcar-aws-docker-kube-system-osc-provisioning + namespace: kube-system resourceVersion: "1" spec: cloudProvider: @@ -126,6 +126,17 @@ spec: tar xvf "$cni_filename" rm -f "$cni_filename" cd - + CRI_TOOLS_RELEASE="${CRI_TOOLS_RELEASE:-v1.22.0}" + cri_tools_base_url="https://github.com/kubernetes-sigs/cri-tools/releases/download/${CRI_TOOLS_RELEASE}" + cri_tools_filename="crictl-${CRI_TOOLS_RELEASE}-linux-${arch}.tar.gz" + curl -Lfo "$opt_bin/$cri_tools_filename" "$cri_tools_base_url/$cri_tools_filename" + cri_tools_sum=$(curl -Lf "$cri_tools_base_url/$cri_tools_filename.sha256" | sed 's/\*\///') + cd "$opt_bin" + sha256sum -c <<<"$cri_tools_sum" + tar xvf "$cri_tools_filename" + rm -f "$cri_tools_filename" + ln -sf "$opt_bin/crictl" "$usr_local_bin"/crictl || echo "symbolic link is skipped" + cd - KUBE_VERSION="${KUBE_VERSION:-v1.22.1}" kube_dir="$opt_bin/kubernetes-$KUBE_VERSION" kube_base_url="https://storage.googleapis.com/kubernetes-release/release/$KUBE_VERSION/bin/linux/$arch" @@ -359,7 +370,7 @@ spec: permissions: 384 - content: inline: - data: '{"exec-opts":["native.cgroupdriver=systemd"],"storage-driver":"overlay2","log-driver":"json-file","log-opts":{"max-file":"5","max-size":"100m"}}' + data: '{"exec-opts":["native.cgroupdriver=systemd"],"storage-driver":"overlay2","log-driver":"json-file","log-opts":{"max-file":"5","max-size":"100m"},"insecure-registries":["192.168.100.100:5000","10.0.0.1:5000"],"registry-mirrors":["https://registry.docker-cn.com"]}' path: /etc/docker/daemon.json permissions: 420 - content: diff --git a/pkg/controllers/osc/testdata/osc-kubelet-configuration-containerd.yaml b/pkg/controllers/osc/testdata/osc-kubelet-configuration-containerd.yaml new file mode 100644 index 00000000..2e5433d5 --- /dev/null +++ b/pkg/controllers/osc/testdata/osc-kubelet-configuration-containerd.yaml @@ -0,0 +1,444 @@ +apiVersion: operatingsystemmanager.k8c.io/v1alpha1 +kind: OperatingSystemConfig +metadata: + creationTimestamp: null + name: kubelet-configuration-kube-system-osc-provisioning + namespace: kube-system + resourceVersion: "1" +spec: + cloudProvider: + name: aws + spec: + subnetID: test-subnet + vpc: e-123f + zone: eu-central-1b + files: + - content: + inline: + data: | + [Journal] + SystemMaxUse=5G + encoding: b64 + path: /etc/systemd/journald.conf.d/max_disk_use.conf + - content: + inline: + data: | + #!/usr/bin/env bash + set -euo pipefail + + modprobe ip_vs + modprobe ip_vs_rr + modprobe ip_vs_wrr + modprobe ip_vs_sh + + if modinfo nf_conntrack_ipv4 &> /dev/null; then + modprobe nf_conntrack_ipv4 + else + modprobe nf_conntrack + fi + encoding: b64 + path: /opt/load-kernel-modules.sh + permissions: 493 + - content: + inline: + data: | + net.bridge.bridge-nf-call-ip6tables = 1 + net.bridge.bridge-nf-call-iptables = 1 + kernel.panic_on_oops = 1 + kernel.panic = 10 + net.ipv4.ip_forward = 1 + vm.overcommit_memory = 1 + fs.inotify.max_user_watches = 1048576 + encoding: b64 + path: /etc/sysctl.d/k8s.conf + - content: + inline: + data: | + # Added by kubermatic machine-controller + # Enable cgroups memory and swap accounting + GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1" + encoding: b64 + path: /etc/default/grub.d/60-swap-accounting.cfg + - content: + inline: + data: | + #!/bin/bash + set -xeuo pipefail + if systemctl is-active ufw; then systemctl stop ufw; fi + systemctl mask ufw + systemctl restart systemd-modules-load.service + sysctl --system + sed -i.orig '/.*swap.*/d' /etc/fstab + swapoff -a + + apt-get update + + DEBIAN_FRONTEND=noninteractive apt-get -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" install -y \ + curl \ + ca-certificates \ + ceph-common \ + cifs-utils \ + conntrack \ + e2fsprogs \ + ebtables \ + ethtool \ + glusterfs-client \ + iptables \ + jq \ + kmod \ + openssh-client \ + nfs-common \ + socat \ + util-linux \ + ipvsadm + apt-get update + apt-get install -y apt-transport-https ca-certificates curl software-properties-common lsb-release + curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - + add-apt-repository "deb https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" + + cat <"$kube_sum_file" + + for bin in kubelet kubeadm kubectl; do + curl -Lfo "$kube_dir/$bin" "$kube_base_url/$bin" + chmod +x "$kube_dir/$bin" + sum=$(curl -Lf "$kube_base_url/$bin.sha256") + echo "$sum $kube_dir/$bin" >>"$kube_sum_file" + done + sha256sum -c "$kube_sum_file" + + for bin in kubelet kubeadm kubectl; do + ln -sf "$kube_dir/$bin" "$opt_bin"/$bin + done + + if [[ ! -x /opt/bin/health-monitor.sh ]]; then + curl -Lfo /opt/bin/health-monitor.sh https://raw.githubusercontent.com/kubermatic/machine-controller/7967a0af2b75f29ad2ab227eeaa26ea7b0f2fbde/pkg/userdata/scripts/health-monitor.sh + chmod +x /opt/bin/health-monitor.sh + fi + + # set kubelet nodeip environment variable + /opt/bin/setup_net_env.sh + + systemctl enable --now kubelet + systemctl enable --now --no-block kubelet-healthcheck.service + encoding: b64 + path: /opt/bin/setup + permissions: 493 + - content: + inline: + data: | + #!/bin/bash + set -xeuo pipefail + while ! "$@"; do + sleep 1 + done + encoding: b64 + path: /opt/bin/supervise.sh + permissions: 493 + - content: + inline: + data: | + [Unit] + After=containerd.service + Requires=containerd.service + + Description=kubelet: The Kubernetes Node Agent + Documentation=https://kubernetes.io/docs/home/ + + [Service] + Restart=always + StartLimitInterval=0 + RestartSec=10 + CPUAccounting=true + MemoryAccounting=true + + Environment="PATH=/opt/bin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin/" + EnvironmentFile=-/etc/environment + + ExecStartPre=/bin/bash /opt/load-kernel-modules.sh + ExecStartPre=/bin/bash /opt/bin/setup_net_env.sh + ExecStart=/opt/bin/kubelet $KUBELET_EXTRA_ARGS \ + --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf \ + --kubeconfig=/var/lib/kubelet/kubeconfig \ + --config=/etc/kubernetes/kubelet.conf \ + --network-plugin=cni \ + --cert-dir=/etc/kubernetes/pki \ + --cloud-provider=aws \ + --cloud-config=/etc/kubernetes/cloud-config \ + --dynamic-config-dir=/etc/kubernetes/dynamic-config-dir \ + --feature-gates=DynamicKubeletConfig=true \ + --exit-on-lock-contention \ + --lock-file=/tmp/kubelet.lock \ + --container-runtime=remote \ + --container-runtime-endpoint=unix:///run/containerd/containerd.sock \ + --node-ip ${KUBELET_NODE_IP} + + [Install] + WantedBy=multi-user.target + encoding: b64 + path: /etc/systemd/system/kubelet.service + - content: + inline: + data: | + [Service] + Environment="KUBELET_EXTRA_ARGS=--resolv-conf=/run/systemd/resolve/resolv.conf" + encoding: b64 + path: /etc/systemd/system/kubelet.service.d/extras.conf + - content: + inline: + data: |+ + [global] + Zone="" + VPC="" + SubnetID="test-subnet" + + encoding: b64 + path: /etc/kubernetes/cloud-config + permissions: 384 + - content: + inline: + data: | + #!/usr/bin/env bash + echodate() { + echo "[$(date -Is)]" "$@" + } + + # get the default interface IP address + DEFAULT_IFC_IP=$(ip -o route get 1 | grep -oP "src \K\S+") + + if [ -z "${DEFAULT_IFC_IP}" ] + then + echodate "Failed to get IP address for the default route interface" + exit 1 + fi + + # get the full hostname + FULL_HOSTNAME=$(hostname -f) + + # write the nodeip_env file + # we need the line below because flatcar has the same string "coreos" in that file + if grep -q coreos /etc/os-release + then + echo "KUBELET_NODE_IP=${DEFAULT_IFC_IP}\nKUBELET_HOSTNAME=${FULL_HOSTNAME}" > /etc/kubernetes/nodeip.conf + elif [ ! -d /etc/systemd/system/kubelet.service.d ] + then + echodate "Can't find kubelet service extras directory" + exit 1 + else + echo -e "[Service]\nEnvironment=\"KUBELET_NODE_IP=${DEFAULT_IFC_IP}\"\nEnvironment=\"KUBELET_HOSTNAME=${FULL_HOSTNAME}\"" > /etc/systemd/system/kubelet.service.d/nodeip.conf + fi + encoding: b64 + path: /opt/bin/setup_net_env.sh + permissions: 493 + - content: + inline: + data: | + -----BEGIN CERTIFICATE----- + MIIEWjCCA0KgAwIBAgIJALfRlWsI8YQHMA0GCSqGSIb3DQEBBQUAMHsxCzAJBgNV + BAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzEUMBIG + A1UEChMLQnJhZGZpdHppbmMxEjAQBgNVBAMTCWxvY2FsaG9zdDEdMBsGCSqGSIb3 + DQEJARYOYnJhZEBkYW5nYS5jb20wHhcNMTQwNzE1MjA0NjA1WhcNMTcwNTA0MjA0 + NjA1WjB7MQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExFjAUBgNVBAcTDVNhbiBG + cmFuY2lzY28xFDASBgNVBAoTC0JyYWRmaXR6aW5jMRIwEAYDVQQDEwlsb2NhbGhv + c3QxHTAbBgkqhkiG9w0BCQEWDmJyYWRAZGFuZ2EuY29tMIIBIjANBgkqhkiG9w0B + AQEFAAOCAQ8AMIIBCgKCAQEAt5fAjp4fTcekWUTfzsp0kyih1OYbsGL0KX1eRbSS + R8Od0+9Q62Hyny+GFwMTb4A/KU8mssoHvcceSAAbwfbxFK/+s51TobqUnORZrOoT + ZjkUygbyXDSK99YBbcR1Pip8vwMTm4XKuLtCigeBBdjjAQdgUO28LENGlsMnmeYk + JfODVGnVmr5Ltb9ANA8IKyTfsnHJ4iOCS/PlPbUj2q7YnoVLposUBMlgUb/CykX3 + mOoLb4yJJQyA/iST6ZxiIEj36D4yWZ5lg7YJl+UiiBQHGCnPdGyipqV06ex0heYW + caiW8LWZSUQ93jQ+WVCH8hT7DQO1dmsvUmXlq/JeAlwQ/QIDAQABo4HgMIHdMB0G + A1UdDgQWBBRcAROthS4P4U7vTfjByC569R7E6DCBrQYDVR0jBIGlMIGigBRcAROt + hS4P4U7vTfjByC569R7E6KF/pH0wezELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNB + MRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMRQwEgYDVQQKEwtCcmFkZml0emluYzES + MBAGA1UEAxMJbG9jYWxob3N0MR0wGwYJKoZIhvcNAQkBFg5icmFkQGRhbmdhLmNv + bYIJALfRlWsI8YQHMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAG6h + U9f9sNH0/6oBbGGy2EVU0UgITUQIrFWo9rFkrW5k/XkDjQm+3lzjT0iGR4IxE/Ao + eU6sQhua7wrWeFEn47GL98lnCsJdD7oZNhFmQ95Tb/LnDUjs5Yj9brP0NWzXfYU4 + UK2ZnINJRcJpB8iRCaCxE8DdcUF0XqIEq6pA272snoLmiXLMvNl3kYEdm+je6voD + 58SNVEUsztzQyXmJEhCpwVI0A6QCjzXj+qvpmw3ZZHi8JwXei8ZZBLTSFBki8Z7n + sH9BBH38/SzUmAN4QHSPy1gjqm00OAE8NaYDkh/bzE4d7mLGGMWp/WE3KPSu82HF + kPe6XoSbiLm/kxk32T0= + -----END CERTIFICATE----- + encoding: b64 + path: /etc/kubernetes/pki/ca.crt + - content: + inline: + data: | + [Install] + WantedBy=multi-user.target + + [Unit] + Requires=network-online.target + After=network-online.target + + [Service] + Type=oneshot + RemainAfterExit=true + EnvironmentFile=-/etc/environment + ExecStart=/opt/bin/supervise.sh /opt/bin/setup + encoding: b64 + path: /etc/systemd/system/setup.service + permissions: 420 + - content: + inline: + data: | + export PATH="/opt/bin:$PATH" + encoding: b64 + path: /etc/profile.d/opt-bin-path.sh + permissions: 420 + - content: + inline: + data: | + apiVersion: kubelet.config.k8s.io/v1beta1 + kind: KubeletConfiguration + authentication: + anonymous: + enabled: false + webhook: + enabled: true + x509: + clientCAFile: /etc/kubernetes/pki/ca.crt + authorization: + mode: Webhook + cgroupDriver: systemd + clusterDNS: + - "10.0.0.0" + clusterDomain: cluster.local + containerLogMaxSize: 300Mi + containerLogMaxFiles: 30 + featureGates: + GracefulNodeShutdown: true + IdentifyPodOS: false + protectKernelDefaults: true + readOnlyPort: 0 + rotateCertificates: true + serverTLSBootstrap: true + staticPodPath: /etc/kubernetes/manifests + kubeReserved: + cpu: 30m + ephemeral-storage: 30Gi + systemReserved: + cpu: 30m + ephemeral-storage: 30Gi + evictionHard: + memory.available: 30Mi + tlsCipherSuites: + - TLS_AES_128_GCM_SHA256 + - TLS_AES_256_GCM_SHA384 + - TLS_CHACHA20_POLY1305_SHA256 + - TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 + - TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 + - TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305 + - TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 + - TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 + - TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 + volumePluginDir: /var/lib/kubelet/volumeplugins + encoding: b64 + path: /etc/kubernetes/kubelet.conf + - content: + inline: + data: | + [Unit] + Requires=kubelet.service + After=kubelet.service + + [Service] + ExecStart=/opt/bin/health-monitor.sh kubelet + + [Install] + WantedBy=multi-user.target + encoding: b64 + path: /etc/systemd/system/kubelet-healthcheck.service + permissions: 420 + - content: + inline: + data: |+ + version = 2 + + [metrics] + address = "127.0.0.1:1338" + + [plugins] + [plugins."io.containerd.grpc.v1.cri"] + sandbox_image = "192.168.100.100:5000/kubernetes/pause:v3.1" + [plugins."io.containerd.grpc.v1.cri".containerd] + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes] + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] + runtime_type = "io.containerd.runc.v2" + [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] + SystemdCgroup = true + [plugins."io.containerd.grpc.v1.cri".registry] + [plugins."io.containerd.grpc.v1.cri".registry.mirrors] + [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"] + endpoint = ["https://registry.docker-cn.com"] + [plugins."io.containerd.grpc.v1.cri".registry.configs] + [plugins."io.containerd.grpc.v1.cri".registry.configs."10.0.0.1:5000"] + [plugins."io.containerd.grpc.v1.cri".registry.configs."10.0.0.1:5000".tls] + insecure_skip_verify = true + [plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.100.100:5000"] + [plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.100.100:5000".tls] + insecure_skip_verify = true + + encoding: b64 + path: /etc/containerd/config.toml + permissions: 420 + modules: + bootcmd: + - echo hello + - echo world + rh_subscription: + password: password + username: username + osName: ubuntu + osVersion: "20.04" + userSSHKeys: + - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDdOIhYmzCK5DSVLu3c diff --git a/pkg/controllers/osc/testdata/osc-kubelet-configuration-docker.yaml b/pkg/controllers/osc/testdata/osc-kubelet-configuration-docker.yaml new file mode 100644 index 00000000..bd3902a1 --- /dev/null +++ b/pkg/controllers/osc/testdata/osc-kubelet-configuration-docker.yaml @@ -0,0 +1,416 @@ +apiVersion: operatingsystemmanager.k8c.io/v1alpha1 +kind: OperatingSystemConfig +metadata: + creationTimestamp: null + name: kubelet-configuration-kube-system-osc-provisioning + namespace: kube-system + resourceVersion: "1" +spec: + cloudProvider: + name: aws + spec: + subnetID: test-subnet + vpc: e-123f + zone: eu-central-1b + files: + - content: + inline: + data: | + [Journal] + SystemMaxUse=5G + encoding: b64 + path: /etc/systemd/journald.conf.d/max_disk_use.conf + - content: + inline: + data: | + #!/usr/bin/env bash + set -euo pipefail + + modprobe ip_vs + modprobe ip_vs_rr + modprobe ip_vs_wrr + modprobe ip_vs_sh + + if modinfo nf_conntrack_ipv4 &> /dev/null; then + modprobe nf_conntrack_ipv4 + else + modprobe nf_conntrack + fi + encoding: b64 + path: /opt/load-kernel-modules.sh + permissions: 493 + - content: + inline: + data: | + net.bridge.bridge-nf-call-ip6tables = 1 + net.bridge.bridge-nf-call-iptables = 1 + kernel.panic_on_oops = 1 + kernel.panic = 10 + net.ipv4.ip_forward = 1 + vm.overcommit_memory = 1 + fs.inotify.max_user_watches = 1048576 + encoding: b64 + path: /etc/sysctl.d/k8s.conf + - content: + inline: + data: | + # Added by kubermatic machine-controller + # Enable cgroups memory and swap accounting + GRUB_CMDLINE_LINUX="cgroup_enable=memory swapaccount=1" + encoding: b64 + path: /etc/default/grub.d/60-swap-accounting.cfg + - content: + inline: + data: | + #!/bin/bash + set -xeuo pipefail + if systemctl is-active ufw; then systemctl stop ufw; fi + systemctl mask ufw + systemctl restart systemd-modules-load.service + sysctl --system + sed -i.orig '/.*swap.*/d' /etc/fstab + swapoff -a + + apt-get update + + DEBIAN_FRONTEND=noninteractive apt-get -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold" install -y \ + curl \ + ca-certificates \ + ceph-common \ + cifs-utils \ + conntrack \ + e2fsprogs \ + ebtables \ + ethtool \ + glusterfs-client \ + iptables \ + jq \ + kmod \ + openssh-client \ + nfs-common \ + socat \ + util-linux \ + ipvsadm + apt-get update + apt-get install -y apt-transport-https ca-certificates curl software-properties-common lsb-release + curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - + add-apt-repository "deb https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" + + mkdir -p /etc/systemd/system/containerd.service.d /etc/systemd/system/docker.service.d + + cat <"$kube_sum_file" + + for bin in kubelet kubeadm kubectl; do + curl -Lfo "$kube_dir/$bin" "$kube_base_url/$bin" + chmod +x "$kube_dir/$bin" + sum=$(curl -Lf "$kube_base_url/$bin.sha256") + echo "$sum $kube_dir/$bin" >>"$kube_sum_file" + done + sha256sum -c "$kube_sum_file" + + for bin in kubelet kubeadm kubectl; do + ln -sf "$kube_dir/$bin" "$opt_bin"/$bin + done + + if [[ ! -x /opt/bin/health-monitor.sh ]]; then + curl -Lfo /opt/bin/health-monitor.sh https://raw.githubusercontent.com/kubermatic/machine-controller/7967a0af2b75f29ad2ab227eeaa26ea7b0f2fbde/pkg/userdata/scripts/health-monitor.sh + chmod +x /opt/bin/health-monitor.sh + fi + + # set kubelet nodeip environment variable + /opt/bin/setup_net_env.sh + + systemctl enable --now kubelet + systemctl enable --now --no-block kubelet-healthcheck.service + encoding: b64 + path: /opt/bin/setup + permissions: 493 + - content: + inline: + data: | + #!/bin/bash + set -xeuo pipefail + while ! "$@"; do + sleep 1 + done + encoding: b64 + path: /opt/bin/supervise.sh + permissions: 493 + - content: + inline: + data: | + [Unit] + After=docker.service + Requires=docker.service + + Description=kubelet: The Kubernetes Node Agent + Documentation=https://kubernetes.io/docs/home/ + + [Service] + Restart=always + StartLimitInterval=0 + RestartSec=10 + CPUAccounting=true + MemoryAccounting=true + + Environment="PATH=/opt/bin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin/" + EnvironmentFile=-/etc/environment + + ExecStartPre=/bin/bash /opt/load-kernel-modules.sh + ExecStartPre=/bin/bash /opt/bin/setup_net_env.sh + ExecStart=/opt/bin/kubelet $KUBELET_EXTRA_ARGS \ + --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf \ + --kubeconfig=/var/lib/kubelet/kubeconfig \ + --config=/etc/kubernetes/kubelet.conf \ + --network-plugin=cni \ + --cert-dir=/etc/kubernetes/pki \ + --cloud-provider=aws \ + --cloud-config=/etc/kubernetes/cloud-config \ + --dynamic-config-dir=/etc/kubernetes/dynamic-config-dir \ + --feature-gates=DynamicKubeletConfig=true \ + --exit-on-lock-contention \ + --lock-file=/tmp/kubelet.lock \ + --container-runtime=docker \ + --container-runtime-endpoint=unix:///var/run/dockershim.sock \ + --node-ip ${KUBELET_NODE_IP} + + [Install] + WantedBy=multi-user.target + encoding: b64 + path: /etc/systemd/system/kubelet.service + - content: + inline: + data: | + [Service] + Environment="KUBELET_EXTRA_ARGS=--resolv-conf=/run/systemd/resolve/resolv.conf" + encoding: b64 + path: /etc/systemd/system/kubelet.service.d/extras.conf + - content: + inline: + data: |+ + [global] + Zone="" + VPC="" + SubnetID="test-subnet" + + encoding: b64 + path: /etc/kubernetes/cloud-config + permissions: 384 + - content: + inline: + data: | + #!/usr/bin/env bash + echodate() { + echo "[$(date -Is)]" "$@" + } + + # get the default interface IP address + DEFAULT_IFC_IP=$(ip -o route get 1 | grep -oP "src \K\S+") + + if [ -z "${DEFAULT_IFC_IP}" ] + then + echodate "Failed to get IP address for the default route interface" + exit 1 + fi + + # get the full hostname + FULL_HOSTNAME=$(hostname -f) + + # write the nodeip_env file + # we need the line below because flatcar has the same string "coreos" in that file + if grep -q coreos /etc/os-release + then + echo "KUBELET_NODE_IP=${DEFAULT_IFC_IP}\nKUBELET_HOSTNAME=${FULL_HOSTNAME}" > /etc/kubernetes/nodeip.conf + elif [ ! -d /etc/systemd/system/kubelet.service.d ] + then + echodate "Can't find kubelet service extras directory" + exit 1 + else + echo -e "[Service]\nEnvironment=\"KUBELET_NODE_IP=${DEFAULT_IFC_IP}\"\nEnvironment=\"KUBELET_HOSTNAME=${FULL_HOSTNAME}\"" > /etc/systemd/system/kubelet.service.d/nodeip.conf + fi + encoding: b64 + path: /opt/bin/setup_net_env.sh + permissions: 493 + - content: + inline: + data: | + -----BEGIN CERTIFICATE----- + MIIEWjCCA0KgAwIBAgIJALfRlWsI8YQHMA0GCSqGSIb3DQEBBQUAMHsxCzAJBgNV + BAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzEUMBIG + A1UEChMLQnJhZGZpdHppbmMxEjAQBgNVBAMTCWxvY2FsaG9zdDEdMBsGCSqGSIb3 + DQEJARYOYnJhZEBkYW5nYS5jb20wHhcNMTQwNzE1MjA0NjA1WhcNMTcwNTA0MjA0 + NjA1WjB7MQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExFjAUBgNVBAcTDVNhbiBG + cmFuY2lzY28xFDASBgNVBAoTC0JyYWRmaXR6aW5jMRIwEAYDVQQDEwlsb2NhbGhv + c3QxHTAbBgkqhkiG9w0BCQEWDmJyYWRAZGFuZ2EuY29tMIIBIjANBgkqhkiG9w0B + AQEFAAOCAQ8AMIIBCgKCAQEAt5fAjp4fTcekWUTfzsp0kyih1OYbsGL0KX1eRbSS + R8Od0+9Q62Hyny+GFwMTb4A/KU8mssoHvcceSAAbwfbxFK/+s51TobqUnORZrOoT + ZjkUygbyXDSK99YBbcR1Pip8vwMTm4XKuLtCigeBBdjjAQdgUO28LENGlsMnmeYk + JfODVGnVmr5Ltb9ANA8IKyTfsnHJ4iOCS/PlPbUj2q7YnoVLposUBMlgUb/CykX3 + mOoLb4yJJQyA/iST6ZxiIEj36D4yWZ5lg7YJl+UiiBQHGCnPdGyipqV06ex0heYW + caiW8LWZSUQ93jQ+WVCH8hT7DQO1dmsvUmXlq/JeAlwQ/QIDAQABo4HgMIHdMB0G + A1UdDgQWBBRcAROthS4P4U7vTfjByC569R7E6DCBrQYDVR0jBIGlMIGigBRcAROt + hS4P4U7vTfjByC569R7E6KF/pH0wezELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNB + MRYwFAYDVQQHEw1TYW4gRnJhbmNpc2NvMRQwEgYDVQQKEwtCcmFkZml0emluYzES + MBAGA1UEAxMJbG9jYWxob3N0MR0wGwYJKoZIhvcNAQkBFg5icmFkQGRhbmdhLmNv + bYIJALfRlWsI8YQHMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAG6h + U9f9sNH0/6oBbGGy2EVU0UgITUQIrFWo9rFkrW5k/XkDjQm+3lzjT0iGR4IxE/Ao + eU6sQhua7wrWeFEn47GL98lnCsJdD7oZNhFmQ95Tb/LnDUjs5Yj9brP0NWzXfYU4 + UK2ZnINJRcJpB8iRCaCxE8DdcUF0XqIEq6pA272snoLmiXLMvNl3kYEdm+je6voD + 58SNVEUsztzQyXmJEhCpwVI0A6QCjzXj+qvpmw3ZZHi8JwXei8ZZBLTSFBki8Z7n + sH9BBH38/SzUmAN4QHSPy1gjqm00OAE8NaYDkh/bzE4d7mLGGMWp/WE3KPSu82HF + kPe6XoSbiLm/kxk32T0= + -----END CERTIFICATE----- + encoding: b64 + path: /etc/kubernetes/pki/ca.crt + - content: + inline: + data: | + [Install] + WantedBy=multi-user.target + + [Unit] + Requires=network-online.target + After=network-online.target + + [Service] + Type=oneshot + RemainAfterExit=true + EnvironmentFile=-/etc/environment + ExecStart=/opt/bin/supervise.sh /opt/bin/setup + encoding: b64 + path: /etc/systemd/system/setup.service + permissions: 420 + - content: + inline: + data: | + export PATH="/opt/bin:$PATH" + encoding: b64 + path: /etc/profile.d/opt-bin-path.sh + permissions: 420 + - content: + inline: + data: | + apiVersion: kubelet.config.k8s.io/v1beta1 + kind: KubeletConfiguration + authentication: + anonymous: + enabled: false + webhook: + enabled: true + x509: + clientCAFile: /etc/kubernetes/pki/ca.crt + authorization: + mode: Webhook + cgroupDriver: systemd + clusterDNS: + - "10.0.0.0" + clusterDomain: cluster.local + featureGates: + GracefulNodeShutdown: true + IdentifyPodOS: false + protectKernelDefaults: true + readOnlyPort: 0 + rotateCertificates: true + serverTLSBootstrap: true + staticPodPath: /etc/kubernetes/manifests + kubeReserved: + cpu: 30m + ephemeral-storage: 30Gi + systemReserved: + cpu: 30m + ephemeral-storage: 30Gi + evictionHard: + memory.available: 30Mi + tlsCipherSuites: + - TLS_AES_128_GCM_SHA256 + - TLS_AES_256_GCM_SHA384 + - TLS_CHACHA20_POLY1305_SHA256 + - TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 + - TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 + - TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305 + - TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 + - TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 + - TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 + volumePluginDir: /var/lib/kubelet/volumeplugins + encoding: b64 + path: /etc/kubernetes/kubelet.conf + - content: + inline: + data: | + [Unit] + Requires=kubelet.service + After=kubelet.service + + [Service] + ExecStart=/opt/bin/health-monitor.sh kubelet + + [Install] + WantedBy=multi-user.target + encoding: b64 + path: /etc/systemd/system/kubelet-healthcheck.service + permissions: 420 + - content: + inline: + data: '{"exec-opts":["native.cgroupdriver=systemd"],"storage-driver":"overlay2","log-driver":"json-file","log-opts":{"max-file":"30","max-size":"300m"},"insecure-registries":["192.168.100.100:5000","10.0.0.1:5000"],"registry-mirrors":["https://registry.docker-cn.com"]}' + encoding: b64 + path: /etc/docker/daemon.json + permissions: 420 + modules: + bootcmd: + - echo hello + - echo world + rh_subscription: + password: password + username: username + osName: ubuntu + osVersion: "20.04" + userSSHKeys: + - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDdOIhYmzCK5DSVLu3c diff --git a/pkg/controllers/osc/testdata/osc-rhel-8.x-containerd.yaml b/pkg/controllers/osc/testdata/osc-rhel-8.x-containerd.yaml index a3a8e9fa..17528f7b 100644 --- a/pkg/controllers/osc/testdata/osc-rhel-8.x-containerd.yaml +++ b/pkg/controllers/osc/testdata/osc-rhel-8.x-containerd.yaml @@ -2,8 +2,8 @@ apiVersion: operatingsystemmanager.k8c.io/v1alpha1 kind: OperatingSystemConfig metadata: creationTimestamp: null - name: osp-rhel-aws-osc-provisioning - namespace: cloud-init-settings + name: osp-rhel-aws-kube-system-osc-provisioning + namespace: kube-system resourceVersion: "1" spec: cloudProvider: @@ -113,6 +113,7 @@ spec: systemctl daemon-reload systemctl enable --now containerd opt_bin=/opt/bin + usr_local_bin=/usr/local/bin cni_bin_dir=/opt/cni/bin mkdir -p /etc/cni/net.d /etc/kubernetes/dynamic-config-dir /etc/kubernetes/manifests "$opt_bin" "$cni_bin_dir" arch=${HOST_ARCH-} @@ -141,6 +142,17 @@ spec: tar xvf "$cni_filename" rm -f "$cni_filename" cd - + CRI_TOOLS_RELEASE="${CRI_TOOLS_RELEASE:-v1.22.0}" + cri_tools_base_url="https://github.com/kubernetes-sigs/cri-tools/releases/download/${CRI_TOOLS_RELEASE}" + cri_tools_filename="crictl-${CRI_TOOLS_RELEASE}-linux-${arch}.tar.gz" + curl -Lfo "$opt_bin/$cri_tools_filename" "$cri_tools_base_url/$cri_tools_filename" + cri_tools_sum=$(curl -Lf "$cri_tools_base_url/$cri_tools_filename.sha256" | sed 's/\*\///') + cd "$opt_bin" + sha256sum -c <<<"$cri_tools_sum" + tar xvf "$cri_tools_filename" + rm -f "$cri_tools_filename" + ln -sf "$opt_bin/crictl" "$usr_local_bin"/crictl || echo "symbolic link is skipped" + cd - KUBE_VERSION="${KUBE_VERSION:-v1.22.1}" kube_dir="$opt_bin/kubernetes-$KUBE_VERSION" kube_base_url="https://storage.googleapis.com/kubernetes-release/release/$KUBE_VERSION/bin/linux/$arch" @@ -347,6 +359,8 @@ spec: clusterDNS: - "10.0.0.0" clusterDomain: cluster.local + containerLogMaxSize: 100Mi + containerLogMaxFiles: 5 featureGates: GracefulNodeShutdown: true IdentifyPodOS: false @@ -398,7 +412,7 @@ spec: permissions: 420 - content: inline: - data: | + data: |+ version = 2 [metrics] @@ -406,6 +420,7 @@ spec: [plugins] [plugins."io.containerd.grpc.v1.cri"] + sandbox_image = "192.168.100.100:5000/kubernetes/pause:v3.1" [plugins."io.containerd.grpc.v1.cri".containerd] [plugins."io.containerd.grpc.v1.cri".containerd.runtimes] [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] @@ -415,7 +430,15 @@ spec: [plugins."io.containerd.grpc.v1.cri".registry] [plugins."io.containerd.grpc.v1.cri".registry.mirrors] [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"] - endpoint = ["https://registry-1.docker.io"] + endpoint = ["https://registry.docker-cn.com"] + [plugins."io.containerd.grpc.v1.cri".registry.configs] + [plugins."io.containerd.grpc.v1.cri".registry.configs."10.0.0.1:5000"] + [plugins."io.containerd.grpc.v1.cri".registry.configs."10.0.0.1:5000".tls] + insecure_skip_verify = true + [plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.100.100:5000"] + [plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.100.100:5000".tls] + insecure_skip_verify = true + encoding: b64 path: /etc/containerd/config.toml permissions: 420 diff --git a/pkg/controllers/osc/testdata/osc-ubuntu-20.04-aws-containerd.yaml b/pkg/controllers/osc/testdata/osc-ubuntu-aws-containerd.yaml similarity index 95% rename from pkg/controllers/osc/testdata/osc-ubuntu-20.04-aws-containerd.yaml rename to pkg/controllers/osc/testdata/osc-ubuntu-aws-containerd.yaml index 6e00a1cd..41e0f09a 100644 --- a/pkg/controllers/osc/testdata/osc-ubuntu-20.04-aws-containerd.yaml +++ b/pkg/controllers/osc/testdata/osc-ubuntu-aws-containerd.yaml @@ -2,8 +2,8 @@ apiVersion: operatingsystemmanager.k8c.io/v1alpha1 kind: OperatingSystemConfig metadata: creationTimestamp: null - name: ubuntu-20.04-aws-osc-provisioning - namespace: cloud-init-settings + name: ubuntu-aws-kube-system-osc-provisioning + namespace: kube-system resourceVersion: "1" spec: cloudProvider: @@ -353,6 +353,8 @@ spec: clusterDNS: - "10.0.0.0" clusterDomain: cluster.local + containerLogMaxSize: 100Mi + containerLogMaxFiles: 5 featureGates: GracefulNodeShutdown: true IdentifyPodOS: false @@ -404,7 +406,7 @@ spec: permissions: 420 - content: inline: - data: | + data: |+ version = 2 [metrics] @@ -412,6 +414,7 @@ spec: [plugins] [plugins."io.containerd.grpc.v1.cri"] + sandbox_image = "192.168.100.100:5000/kubernetes/pause:v3.1" [plugins."io.containerd.grpc.v1.cri".containerd] [plugins."io.containerd.grpc.v1.cri".containerd.runtimes] [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] @@ -421,7 +424,15 @@ spec: [plugins."io.containerd.grpc.v1.cri".registry] [plugins."io.containerd.grpc.v1.cri".registry.mirrors] [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"] - endpoint = ["https://registry-1.docker.io"] + endpoint = ["https://registry.docker-cn.com"] + [plugins."io.containerd.grpc.v1.cri".registry.configs] + [plugins."io.containerd.grpc.v1.cri".registry.configs."10.0.0.1:5000"] + [plugins."io.containerd.grpc.v1.cri".registry.configs."10.0.0.1:5000".tls] + insecure_skip_verify = true + [plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.100.100:5000"] + [plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.100.100:5000".tls] + insecure_skip_verify = true + encoding: b64 path: /etc/containerd/config.toml permissions: 420 diff --git a/pkg/controllers/osc/testdata/osc-ubuntu-20.04-aws-docker.yaml b/pkg/controllers/osc/testdata/osc-ubuntu-aws-docker.yaml similarity index 98% rename from pkg/controllers/osc/testdata/osc-ubuntu-20.04-aws-docker.yaml rename to pkg/controllers/osc/testdata/osc-ubuntu-aws-docker.yaml index 9b4a3a12..1b2fb7c5 100644 --- a/pkg/controllers/osc/testdata/osc-ubuntu-20.04-aws-docker.yaml +++ b/pkg/controllers/osc/testdata/osc-ubuntu-aws-docker.yaml @@ -2,8 +2,8 @@ apiVersion: operatingsystemmanager.k8c.io/v1alpha1 kind: OperatingSystemConfig metadata: creationTimestamp: null - name: ubuntu-20.04-aws-osc-provisioning - namespace: cloud-init-settings + name: ubuntu-aws-kube-system-osc-provisioning + namespace: kube-system resourceVersion: "1" spec: cloudProvider: @@ -404,7 +404,7 @@ spec: permissions: 420 - content: inline: - data: '{"exec-opts":["native.cgroupdriver=systemd"],"storage-driver":"overlay2","log-driver":"json-file","log-opts":{"max-file":"5","max-size":"100m"}}' + data: '{"exec-opts":["native.cgroupdriver=systemd"],"storage-driver":"overlay2","log-driver":"json-file","log-opts":{"max-file":"5","max-size":"100m"},"insecure-registries":["192.168.100.100:5000","10.0.0.1:5000"],"registry-mirrors":["https://registry.docker-cn.com"]}' encoding: b64 path: /etc/docker/daemon.json permissions: 420 diff --git a/pkg/controllers/osc/testdata/osp-flatcar.yaml b/pkg/controllers/osc/testdata/osp-flatcar.yaml index f8780598..259bd358 100644 --- a/pkg/controllers/osc/testdata/osp-flatcar.yaml +++ b/pkg/controllers/osc/testdata/osp-flatcar.yaml @@ -16,11 +16,12 @@ apiVersion: operatingsystemmanager.k8c.io/v1alpha1 kind: OperatingSystemProfile metadata: name: osp-flatcar - namespace: cloud-init-settings + namespace: kube-system spec: osName: flatcar ## Flatcar Stable (09/11/2021) osVersion: "2983.2.0" + version: "v0.1.1" supportedCloudProviders: - name: aws - name: azure @@ -35,23 +36,7 @@ spec: content: inline: data: | - version = 2 - - [metrics] - address = "127.0.0.1:1338" - - [plugins] - [plugins."io.containerd.grpc.v1.cri"] - [plugins."io.containerd.grpc.v1.cri".containerd] - [plugins."io.containerd.grpc.v1.cri".containerd.runtimes] - [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] - runtime_type = "io.containerd.runc.v2" - [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] - SystemdCgroup = true - [plugins."io.containerd.grpc.v1.cri".registry] - [plugins."io.containerd.grpc.v1.cri".registry.mirrors] - [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"] - endpoint = ["https://registry-1.docker.io"] + {{ .ContainerRuntimeConfig}} - path: /etc/systemd/system/containerd.service.d/10-custom.conf content: inline: @@ -76,7 +61,7 @@ spec: content: inline: data: |- - {"exec-opts":["native.cgroupdriver=systemd"],"storage-driver":"overlay2","log-driver":"json-file","log-opts":{"max-file":"5","max-size":"100m"}} + {{ .ContainerRuntimeConfig}} - path: /etc/systemd/system/docker.service.d/10-custom.conf permissions: 0644 content: @@ -133,6 +118,28 @@ spec: rm -f "$cni_filename" cd - + {{- /* # cri-tools variables */}} + CRI_TOOLS_RELEASE="${CRI_TOOLS_RELEASE:-v1.22.0}" + cri_tools_base_url="https://github.com/kubernetes-sigs/cri-tools/releases/download/${CRI_TOOLS_RELEASE}" + cri_tools_filename="crictl-${CRI_TOOLS_RELEASE}-linux-${arch}.tar.gz" + + {{- /* download cri-tools */}} + curl -Lfo "$opt_bin/$cri_tools_filename" "$cri_tools_base_url/$cri_tools_filename" + + {{- /* download cri-tools checksum */}} + {{- /* the cri-tools checksum file has a filename prefix that breaks sha256sum so we need to drop it with sed */}} + cri_tools_sum=$(curl -Lf "$cri_tools_base_url/$cri_tools_filename.sha256" | sed 's/\*\///') + cd "$opt_bin" + + {{- /* verify cri-tools checksum */}} + sha256sum -c <<<"$cri_tools_sum" + + {{- /* unpack cri-tools and symlink to path so it's available to all users */}} + tar xvf "$cri_tools_filename" + rm -f "$cri_tools_filename" + ln -sf "$opt_bin/crictl" "$usr_local_bin"/crictl || echo "symbolic link is skipped" + cd - + {{- /* kubelet */}} KUBE_VERSION="${KUBE_VERSION:-{{ .KubeVersion }}}" kube_dir="$opt_bin/kubernetes-$KUBE_VERSION" @@ -519,6 +526,19 @@ spec: - "{{ . }}" {{- end }} clusterDomain: cluster.local + {{- /* containerLogMaxSize and containerLogMaxFiles have no effect for docker */}} + {{- if ne .ContainerRuntime "docker" }} + {{- if .ContainerLogMaxSize }} + containerLogMaxSize: {{ .ContainerLogMaxSize }} + {{- else }} + containerLogMaxSize: 100Mi + {{- end }} + {{- if .ContainerLogMaxFiles }} + containerLogMaxFiles: {{ .ContainerLogMaxFiles }} + {{- else }} + containerLogMaxFiles: 5 + {{- end }} + {{- end }} featureGates: {{- if .KubeletFeatureGates -}} {{ range $key, $val := .KubeletFeatureGates }} diff --git a/pkg/controllers/osc/testdata/osp-rhel.yaml b/pkg/controllers/osc/testdata/osp-rhel.yaml index 1f035137..b89eee38 100644 --- a/pkg/controllers/osc/testdata/osp-rhel.yaml +++ b/pkg/controllers/osc/testdata/osp-rhel.yaml @@ -16,10 +16,11 @@ apiVersion: operatingsystemmanager.k8c.io/v1alpha1 kind: OperatingSystemProfile metadata: name: osp-rhel - namespace: cloud-init-settings + namespace: kube-system spec: osName: "rhel" osVersion: "8.4" + version: "v0.1.1" supportedCloudProviders: - name: "aws" - name: "azure" @@ -35,23 +36,7 @@ spec: inline: encoding: b64 data: | - version = 2 - - [metrics] - address = "127.0.0.1:1338" - - [plugins] - [plugins."io.containerd.grpc.v1.cri"] - [plugins."io.containerd.grpc.v1.cri".containerd] - [plugins."io.containerd.grpc.v1.cri".containerd.runtimes] - [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] - runtime_type = "io.containerd.runc.v2" - [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] - SystemdCgroup = true - [plugins."io.containerd.grpc.v1.cri".registry] - [plugins."io.containerd.grpc.v1.cri".registry.mirrors] - [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"] - endpoint = ["https://registry-1.docker.io"] + {{ .ContainerRuntimeConfig}} templates: containerRuntimeInstallation: |- yum install -y yum-utils @@ -87,7 +72,7 @@ spec: inline: encoding: b64 data: |- - {"exec-opts":["native.cgroupdriver=systemd"],"storage-driver":"overlay2","log-driver":"json-file","log-opts":{"max-file":"5","max-size":"10m"}} + {{ .ContainerRuntimeConfig}} templates: containerRuntimeInstallation: |- yum install -y yum-utils @@ -116,6 +101,7 @@ spec: safeDownloadBinariesScript: |- {{- /*setup some common directories */ -}} opt_bin=/opt/bin + usr_local_bin=/usr/local/bin cni_bin_dir=/opt/cni/bin {{- /* create all the necessary dirs */}} @@ -159,6 +145,28 @@ spec: rm -f "$cni_filename" cd - + {{- /* # cri-tools variables */}} + CRI_TOOLS_RELEASE="${CRI_TOOLS_RELEASE:-v1.22.0}" + cri_tools_base_url="https://github.com/kubernetes-sigs/cri-tools/releases/download/${CRI_TOOLS_RELEASE}" + cri_tools_filename="crictl-${CRI_TOOLS_RELEASE}-linux-${arch}.tar.gz" + + {{- /* download cri-tools */}} + curl -Lfo "$opt_bin/$cri_tools_filename" "$cri_tools_base_url/$cri_tools_filename" + + {{- /* download cri-tools checksum */}} + {{- /* the cri-tools checksum file has a filename prefix that breaks sha256sum so we need to drop it with sed */}} + cri_tools_sum=$(curl -Lf "$cri_tools_base_url/$cri_tools_filename.sha256" | sed 's/\*\///') + cd "$opt_bin" + + {{- /* verify cri-tools checksum */}} + sha256sum -c <<<"$cri_tools_sum" + + {{- /* unpack cri-tools and symlink to path so it's available to all users */}} + tar xvf "$cri_tools_filename" + rm -f "$cri_tools_filename" + ln -sf "$opt_bin/crictl" "$usr_local_bin"/crictl || echo "symbolic link is skipped" + cd - + {{- /* kubelet */}} KUBE_VERSION="${KUBE_VERSION:-{{ .KubeVersion }}}" kube_dir="$opt_bin/kubernetes-$KUBE_VERSION" @@ -265,8 +273,6 @@ spec: # mls - Multi Level Security protection. SELINUXTYPE=targeted - - - path: "/opt/bin/setup" permissions: 0755 content: @@ -309,8 +315,16 @@ spec: {{- if eq .CloudProviderName "vsphere" }} open-vm-tools \ {{- end }} + {{- if eq .CloudProviderName "nutanix" }} + iscsi-initiator-utils \ + {{- end }} ipvsadm + {{- /* iscsid service is required on Nutanix machines for CSI driver to attach volumes. */}} + {{- if eq .CloudProviderName "nutanix" }} + systemctl enable --now iscsid + {{ end }} + {{- template "containerRuntimeInstallation" }} {{- template "safeDownloadBinariesScript" }} @@ -501,6 +515,19 @@ spec: - "{{ . }}" {{- end }} clusterDomain: cluster.local + {{- /* containerLogMaxSize and containerLogMaxFiles have no effect for docker */}} + {{- if ne .ContainerRuntime "docker" }} + {{- if .ContainerLogMaxSize }} + containerLogMaxSize: {{ .ContainerLogMaxSize }} + {{- else }} + containerLogMaxSize: 100Mi + {{- end }} + {{- if .ContainerLogMaxFiles }} + containerLogMaxFiles: {{ .ContainerLogMaxFiles }} + {{- else }} + containerLogMaxFiles: 5 + {{- end }} + {{- end }} featureGates: {{- if .KubeletFeatureGates -}} {{ range $key, $val := .KubeletFeatureGates }} @@ -572,4 +599,4 @@ spec: WantedBy=multi-user.target modules: bootcmd: - - modprobe ip_tables \ No newline at end of file + - modprobe ip_tables diff --git a/pkg/controllers/osc/testdata/osp-ubuntu-20.04.yaml b/pkg/controllers/osc/testdata/osp-ubuntu.yaml similarity index 94% rename from pkg/controllers/osc/testdata/osp-ubuntu-20.04.yaml rename to pkg/controllers/osc/testdata/osp-ubuntu.yaml index 38fc2806..70b1f884 100644 --- a/pkg/controllers/osc/testdata/osp-ubuntu-20.04.yaml +++ b/pkg/controllers/osc/testdata/osp-ubuntu.yaml @@ -16,7 +16,7 @@ apiVersion: operatingsystemmanager.k8c.io/v1alpha1 kind: OperatingSystemProfile metadata: name: osp-ubuntu - namespace: cloud-init-settings + namespace: kube-system spec: osName: "ubuntu" osVersion: "20.04" @@ -43,23 +43,7 @@ spec: inline: encoding: b64 data: | - version = 2 - - [metrics] - address = "127.0.0.1:1338" - - [plugins] - [plugins."io.containerd.grpc.v1.cri"] - [plugins."io.containerd.grpc.v1.cri".containerd] - [plugins."io.containerd.grpc.v1.cri".containerd.runtimes] - [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] - runtime_type = "io.containerd.runc.v2" - [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options] - SystemdCgroup = true - [plugins."io.containerd.grpc.v1.cri".registry] - [plugins."io.containerd.grpc.v1.cri".registry.mirrors] - [plugins."io.containerd.grpc.v1.cri".registry.mirrors."docker.io"] - endpoint = ["https://registry-1.docker.io"] + {{ .ContainerRuntimeConfig}} templates: containerRuntimeInstallation: |- apt-get update @@ -92,7 +76,7 @@ spec: inline: encoding: b64 data: |- - {"exec-opts":["native.cgroupdriver=systemd"],"storage-driver":"overlay2","log-driver":"json-file","log-opts":{"max-file":"5","max-size":"100m"}} + {{ .ContainerRuntimeConfig}} templates: containerRuntimeInstallation: |- apt-get update @@ -505,6 +489,19 @@ spec: - "{{ . }}" {{- end }} clusterDomain: cluster.local + {{- /* containerLogMaxSize and containerLogMaxFiles have no effect for docker */}} + {{- if ne .ContainerRuntime "docker" }} + {{- if .ContainerLogMaxSize }} + containerLogMaxSize: {{ .ContainerLogMaxSize }} + {{- else }} + containerLogMaxSize: 100Mi + {{- end }} + {{- if .ContainerLogMaxFiles }} + containerLogMaxFiles: {{ .ContainerLogMaxFiles }} + {{- else }} + containerLogMaxFiles: 5 + {{- end }} + {{- end }} featureGates: {{- if .KubeletFeatureGates -}} {{ range $key, $val := .KubeletFeatureGates }} diff --git a/pkg/controllers/osc/testdata/secret-flatcar-aws-containerd.yaml b/pkg/controllers/osc/testdata/secret-flatcar-aws-containerd.yaml index e541d553..de175b63 100644 --- a/pkg/controllers/osc/testdata/secret-flatcar-aws-containerd.yaml +++ b/pkg/controllers/osc/testdata/secret-flatcar-aws-containerd.yaml @@ -1,10 +1,11 @@ apiVersion: v1 data: - cloud-config: eyJpZ25pdGlvbiI6eyJjb25maWciOnt9LCJzZWN1cml0eSI6eyJ0bHMiOnt9fSwidGltZW91dHMiOnt9LCJ2ZXJzaW9uIjoiMi4zLjAifSwibmV0d29ya2QiOnt9LCJwYXNzd2QiOnsidXNlcnMiOlt7Im5hbWUiOiJjb3JlIiwic3NoQXV0aG9yaXplZEtleXMiOlsic3NoLXJzYSBBQUFBQjNOemFDMXljMkVBQUFBREFRQUJBQUFDQVFEZE9JaFltekNLNURTVkx1M2MiXX1dfSwic3RvcmFnZSI6eyJmaWxlcyI6W3siZmlsZXN5c3RlbSI6InJvb3QiLCJwYXRoIjoiL2V0Yy9zeXN0ZW1kL2pvdXJuYWxkLmNvbmYuZC9tYXhfZGlza191c2UuY29uZiIsImNvbnRlbnRzIjp7InNvdXJjZSI6ImRhdGE6LCU1QkpvdXJuYWwlNUQlMEFTeXN0ZW1NYXhVc2UlM0Q1RyUwQSIsInZlcmlmaWNhdGlvbiI6e319LCJtb2RlIjo0MjB9LHsiZmlsZXN5c3RlbSI6InJvb3QiLCJwYXRoIjoiL29wdC9sb2FkLWtlcm5lbC1tb2R1bGVzLnNoIiwiY29udGVudHMiOnsic291cmNlIjoiZGF0YTosJTIzISUyRnVzciUyRmJpbiUyRmVudiUyMGJhc2glMEFzZXQlMjAtZXVvJTIwcGlwZWZhaWwlMEElMEFtb2Rwcm9iZSUyMGlwX3ZzJTBBbW9kcHJvYmUlMjBpcF92c19yciUwQW1vZHByb2JlJTIwaXBfdnNfd3JyJTBBbW9kcHJvYmUlMjBpcF92c19zaCUwQSUwQWlmJTIwbW9kaW5mbyUyMG5mX2Nvbm50cmFja19pcHY0JTIwJTI2JTNFJTIwJTJGZGV2JTJGbnVsbCUzQiUyMHRoZW4lMEElMjAlMjBtb2Rwcm9iZSUyMG5mX2Nvbm50cmFja19pcHY0JTBBZWxzZSUwQSUyMCUyMG1vZHByb2JlJTIwbmZfY29ubnRyYWNrJTBBZmklMEEiLCJ2ZXJpZmljYXRpb24iOnt9fSwibW9kZSI6NDkzfSx7ImZpbGVzeXN0ZW0iOiJyb290IiwicGF0aCI6Ii9ldGMvc3lzY3RsLmQvazhzLmNvbmYiLCJjb250ZW50cyI6eyJzb3VyY2UiOiJkYXRhOixuZXQuYnJpZGdlLmJyaWRnZS1uZi1jYWxsLWlwNnRhYmxlcyUyMCUzRCUyMDElMEFuZXQuYnJpZGdlLmJyaWRnZS1uZi1jYWxsLWlwdGFibGVzJTIwJTNEJTIwMSUwQWtlcm5lbC5wYW5pY19vbl9vb3BzJTIwJTNEJTIwMSUwQWtlcm5lbC5wYW5pYyUyMCUzRCUyMDEwJTBBbmV0LmlwdjQuaXBfZm9yd2FyZCUyMCUzRCUyMDElMEF2bS5vdmVyY29tbWl0X21lbW9yeSUyMCUzRCUyMDElMEFmcy5pbm90aWZ5Lm1heF91c2VyX3dhdGNoZXMlMjAlM0QlMjAxMDQ4NTc2JTBBIiwidmVyaWZpY2F0aW9uIjp7fX0sIm1vZGUiOjQyMH0seyJmaWxlc3lzdGVtIjoicm9vdCIsInBhdGgiOiIvb3B0L2Jpbi9zZXR1cF9uZXRfZW52LnNoIiwiY29udGVudHMiOnsic291cmNlIjoiZGF0YTosJTIzISUyRnVzciUyRmJpbiUyRmVudiUyMGJhc2glMEFlY2hvZGF0ZSgpJTIwJTdCJTBBJTIwJTIwZWNobyUyMCUyMiU1QiUyNChkYXRlJTIwLUlzKSU1RCUyMiUyMCUyMiUyNCU0MCUyMiUwQSU3RCUwQSUwQSUyMyUyMGdldCUyMHRoZSUyMGRlZmF1bHQlMjBpbnRlcmZhY2UlMjBJUCUyMGFkZHJlc3MlMEFERUZBVUxUX0lGQ19JUCUzRCUyNChpcCUyMC1vJTIwJTIwcm91dGUlMjBnZXQlMjAxJTIwJTdDJTIwZ3JlcCUyMC1vUCUyMCUyMnNyYyUyMCU1Q0slNUNTJTJCJTIyKSUwQSUwQWlmJTIwJTVCJTIwLXolMjAlMjIlMjQlN0JERUZBVUxUX0lGQ19JUCU3RCUyMiUyMCU1RCUwQXRoZW4lMEElMjAlMjBlY2hvZGF0ZSUyMCUyMkZhaWxlZCUyMHRvJTIwZ2V0JTIwSVAlMjBhZGRyZXNzJTIwZm9yJTIwdGhlJTIwZGVmYXVsdCUyMHJvdXRlJTIwaW50ZXJmYWNlJTIyJTBBJTIwJTIwZXhpdCUyMDElMEFmaSUwQSUwQSUyMyUyMGdldCUyMHRoZSUyMGZ1bGwlMjBob3N0bmFtZSUwQUZVTExfSE9TVE5BTUUlM0QlMjQoaG9zdG5hbWUlMjAtZiklMEElMjMlMjBpZiUyMCUyRmV0YyUyRmhvc3RuYW1lJTIwaXMlMjBub3QlMjBlbXB0eSUyMHRoZW4lMjB1c2UlMjB0aGUlMjBob3N0bmFtZSUyMGZyb20lMjB0aGVyZSUwQWlmJTIwJTVCJTIwLXMlMjAlMkZldGMlMkZob3N0bmFtZSUyMCU1RCUzQiUyMHRoZW4lMEElMjAlMjAlMjAlMjBGVUxMX0hPU1ROQU1FJTNEJTI0KGNhdCUyMCUyRmV0YyUyRmhvc3RuYW1lKSUwQWZpJTBBJTBBJTIzJTIwd3JpdGUlMjB0aGUlMjBub2RlaXBfZW52JTIwZmlsZSUwQSUyMyUyMHdlJTIwbmVlZCUyMHRoZSUyMGxpbmUlMjBiZWxvdyUyMGJlY2F1c2UlMjBmbGF0Y2FyJTIwaGFzJTIwdGhlJTIwc2FtZSUyMHN0cmluZyUyMCUyMmNvcmVvcyUyMiUyMGluJTIwdGhhdCUyMGZpbGUlMEFpZiUyMGdyZXAlMjAtcSUyMGNvcmVvcyUyMCUyRmV0YyUyRm9zLXJlbGVhc2UlMEF0aGVuJTBBJTIwJTIwZWNobyUyMC1lJTIwJTIyS1VCRUxFVF9OT0RFX0lQJTNEJTI0JTdCREVGQVVMVF9JRkNfSVAlN0QlNUNuS1VCRUxFVF9IT1NUTkFNRSUzRCUyNCU3QkZVTExfSE9TVE5BTUUlN0QlMjIlMjAlM0UlMjAlMkZldGMlMkZrdWJlcm5ldGVzJTJGbm9kZWlwLmNvbmYlMEFlbGlmJTIwJTVCJTIwISUyMC1kJTIwJTJGZXRjJTJGc3lzdGVtZCUyRnN5c3RlbSUyRmt1YmVsZXQuc2VydmljZS5kJTIwJTVEJTBBdGhlbiUwQSUyMCUyMGVjaG9kYXRlJTIwJTIyQ2FuJ3QlMjBmaW5kJTIwa3ViZWxldCUyMHNlcnZpY2UlMjBleHRyYXMlMjBkaXJlY3RvcnklMjIlMEElMjAlMjBleGl0JTIwMSUwQWVsc2UlMEElMjAlMjBlY2hvJTIwLWUlMjAlMjIlNUJTZXJ2aWNlJTVEJTVDbkVudmlyb25tZW50JTNEJTVDJTIyS1VCRUxFVF9OT0RFX0lQJTNEJTI0JTdCREVGQVVMVF9JRkNfSVAlN0QlNUMlMjIlNUNuRW52aXJvbm1lbnQlM0QlNUMlMjJLVUJFTEVUX0hPU1ROQU1FJTNEJTI0JTdCRlVMTF9IT1NUTkFNRSU3RCU1QyUyMiUyMiUyMCUzRSUyMCUyRmV0YyUyRnN5c3RlbWQlMkZzeXN0ZW0lMkZrdWJlbGV0LnNlcnZpY2UuZCUyRm5vZGVpcC5jb25mJTBBZmklMEEiLCJ2ZXJpZmljYXRpb24iOnt9fSwibW9kZSI6NDkzfSx7ImZpbGVzeXN0ZW0iOiJyb290IiwicGF0aCI6Ii9vcHQvYmluL2NvbmZpZ3VyZV9zdGF0aWNfbmV0d29yay5zaCIsImNvbnRlbnRzIjp7InNvdXJjZSI6ImRhdGE6LCUyMyElMkZ1c3IlMkZiaW4lMkZlbnYlMjBiYXNoJTBBc2V0JTIwLXhldW8lMjBwaXBlZmFpbCUwQSIsInZlcmlmaWNhdGlvbiI6e319LCJtb2RlIjo0OTN9LHsiZmlsZXN5c3RlbSI6InJvb3QiLCJwYXRoIjoiL29wdC9iaW4vZG93bmxvYWQuc2giLCJjb250ZW50cyI6eyJzb3VyY2UiOiJkYXRhOiwlMjMhJTJGdXNyJTJGYmluJTJGZW52JTIwYmFzaCUwQXNldCUyMC14ZXVvJTIwcGlwZWZhaWwlMEFvcHRfYmluJTNEJTJGb3B0JTJGYmluJTBBdXNyX2xvY2FsX2JpbiUzRCUyRnVzciUyRmxvY2FsJTJGYmluJTBBY25pX2Jpbl9kaXIlM0QlMkZvcHQlMkZjbmklMkZiaW4lMEFta2RpciUyMC1wJTIwJTJGZXRjJTJGY25pJTJGbmV0LmQlMjAlMkZldGMlMkZrdWJlcm5ldGVzJTJGZHluYW1pYy1jb25maWctZGlyJTIwJTJGZXRjJTJGa3ViZXJuZXRlcyUyRm1hbmlmZXN0cyUyMCUyMiUyNG9wdF9iaW4lMjIlMjAlMjIlMjRjbmlfYmluX2RpciUyMiUwQWFyY2glM0QlMjQlN0JIT1NUX0FSQ0gtJTdEJTBBaWYlMjAlNUIlMjAteiUyMCUyMiUyNGFyY2glMjIlMjAlNUQlMEF0aGVuJTBBY2FzZSUyMCUyNCh1bmFtZSUyMC1tKSUyMGluJTBBeDg2XzY0KSUwQSUyMCUyMCUyMCUyMGFyY2glM0QlMjJhbWQ2NCUyMiUwQSUyMCUyMCUyMCUyMCUzQiUzQiUwQWFhcmNoNjQpJTBBJTIwJTIwJTIwJTIwYXJjaCUzRCUyMmFybTY0JTIyJTBBJTIwJTIwJTIwJTIwJTNCJTNCJTBBKiklMEElMjAlMjAlMjAlMjBlY2hvJTIwJTIydW5zdXBwb3J0ZWQlMjBDUFUlMjBhcmNoaXRlY3R1cmUlMkMlMjBleGl0aW5nJTIyJTBBJTIwJTIwJTIwJTIwZXhpdCUyMDElMEElMjAlMjAlMjAlMjAlM0IlM0IlMEFlc2FjJTBBZmklMEFDTklfVkVSU0lPTiUzRCUyMiUyNCU3QkNOSV9WRVJTSU9OJTNBLXYwLjguNyU3RCUyMiUwQWNuaV9iYXNlX3VybCUzRCUyMmh0dHBzJTNBJTJGJTJGZ2l0aHViLmNvbSUyRmNvbnRhaW5lcm5ldHdvcmtpbmclMkZwbHVnaW5zJTJGcmVsZWFzZXMlMkZkb3dubG9hZCUyRiUyNENOSV9WRVJTSU9OJTIyJTBBY25pX2ZpbGVuYW1lJTNEJTIyY25pLXBsdWdpbnMtbGludXgtJTI0YXJjaC0lMjRDTklfVkVSU0lPTi50Z3olMjIlMEFjdXJsJTIwLUxmbyUyMCUyMiUyNGNuaV9iaW5fZGlyJTJGJTI0Y25pX2ZpbGVuYW1lJTIyJTIwJTIyJTI0Y25pX2Jhc2VfdXJsJTJGJTI0Y25pX2ZpbGVuYW1lJTIyJTBBY25pX3N1bSUzRCUyNChjdXJsJTIwLUxmJTIwJTIyJTI0Y25pX2Jhc2VfdXJsJTJGJTI0Y25pX2ZpbGVuYW1lLnNoYTI1NiUyMiklMEFjZCUyMCUyMiUyNGNuaV9iaW5fZGlyJTIyJTBBc2hhMjU2c3VtJTIwLWMlMjAlM0MlM0MlM0MlMjIlMjRjbmlfc3VtJTIyJTBBdGFyJTIweHZmJTIwJTIyJTI0Y25pX2ZpbGVuYW1lJTIyJTBBcm0lMjAtZiUyMCUyMiUyNGNuaV9maWxlbmFtZSUyMiUwQWNkJTIwLSUwQUtVQkVfVkVSU0lPTiUzRCUyMiUyNCU3QktVQkVfVkVSU0lPTiUzQS12MS4yMi4xJTdEJTIyJTBBa3ViZV9kaXIlM0QlMjIlMjRvcHRfYmluJTJGa3ViZXJuZXRlcy0lMjRLVUJFX1ZFUlNJT04lMjIlMEFrdWJlX2Jhc2VfdXJsJTNEJTIyaHR0cHMlM0ElMkYlMkZzdG9yYWdlLmdvb2dsZWFwaXMuY29tJTJGa3ViZXJuZXRlcy1yZWxlYXNlJTJGcmVsZWFzZSUyRiUyNEtVQkVfVkVSU0lPTiUyRmJpbiUyRmxpbnV4JTJGJTI0YXJjaCUyMiUwQWt1YmVfc3VtX2ZpbGUlM0QlMjIlMjRrdWJlX2RpciUyRnNoYTI1NiUyMiUwQW1rZGlyJTIwLXAlMjAlMjIlMjRrdWJlX2RpciUyMiUwQSUzQSUyMCUzRSUyMiUyNGt1YmVfc3VtX2ZpbGUlMjIlMEElMEFmb3IlMjBiaW4lMjBpbiUyMGt1YmVsZXQlMjBrdWJlYWRtJTIwa3ViZWN0bCUzQiUyMGRvJTBBJTIwJTIwJTIwJTIwY3VybCUyMC1MZm8lMjAlMjIlMjRrdWJlX2RpciUyRiUyNGJpbiUyMiUyMCUyMiUyNGt1YmVfYmFzZV91cmwlMkYlMjRiaW4lMjIlMEElMjAlMjAlMjAlMjBjaG1vZCUyMCUyQnglMjAlMjIlMjRrdWJlX2RpciUyRiUyNGJpbiUyMiUwQSUyMCUyMCUyMCUyMHN1bSUzRCUyNChjdXJsJTIwLUxmJTIwJTIyJTI0a3ViZV9iYXNlX3VybCUyRiUyNGJpbi5zaGEyNTYlMjIpJTBBJTIwJTIwJTIwJTIwZWNobyUyMCUyMiUyNHN1bSUyMCUyMCUyNGt1YmVfZGlyJTJGJTI0YmluJTIyJTIwJTNFJTNFJTIyJTI0a3ViZV9zdW1fZmlsZSUyMiUwQWRvbmUlMEFzaGEyNTZzdW0lMjAtYyUyMCUyMiUyNGt1YmVfc3VtX2ZpbGUlMjIlMEElMEFmb3IlMjBiaW4lMjBpbiUyMGt1YmVsZXQlMjBrdWJlYWRtJTIwa3ViZWN0bCUzQiUyMGRvJTBBJTIwJTIwJTIwJTIwbG4lMjAtc2YlMjAlMjIlMjRrdWJlX2RpciUyRiUyNGJpbiUyMiUyMCUyMiUyNG9wdF9iaW4lMjIlMkYlMjRiaW4lMEFkb25lJTBBJTBBaWYlMjAlNUIlNUIlMjAhJTIwLXglMjAlMkZvcHQlMkZiaW4lMkZoZWFsdGgtbW9uaXRvci5zaCUyMCU1RCU1RCUzQiUyMHRoZW4lMEElMjAlMjAlMjAlMjBjdXJsJTIwLUxmbyUyMCUyRm9wdCUyRmJpbiUyRmhlYWx0aC1tb25pdG9yLnNoJTIwaHR0cHMlM0ElMkYlMkZyYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tJTJGa3ViZXJtYXRpYyUyRm1hY2hpbmUtY29udHJvbGxlciUyRjc5NjdhMGFmMmI3NWYyOWFkMmFiMjI3ZWVhYTI2ZWE3YjBmMmZiZGUlMkZwa2clMkZ1c2VyZGF0YSUyRnNjcmlwdHMlMkZoZWFsdGgtbW9uaXRvci5zaCUwQSUyMCUyMCUyMCUyMGNobW9kJTIwJTJCeCUyMCUyRm9wdCUyRmJpbiUyRmhlYWx0aC1tb25pdG9yLnNoJTBBZmklMEElMEFzeXN0ZW1jdGwlMjBkaXNhYmxlJTIwZG93bmxvYWQtc2NyaXB0LnNlcnZpY2UlMEEiLCJ2ZXJpZmljYXRpb24iOnt9fSwibW9kZSI6NDkzfSx7ImZpbGVzeXN0ZW0iOiJyb290IiwicGF0aCI6Ii9vcHQvYmluL3NldHVwIiwiY29udGVudHMiOnsic291cmNlIjoiZGF0YTosJTIzISUyRmJpbiUyRmJhc2glMEFzZXQlMjAteGV1byUyMHBpcGVmYWlsJTBBY2F0JTIwJTNDJTNDJTIwRU9GJTIwJTdDJTIwdGVlJTIwJTJGZXRjJTJGcG9sa2l0LTElMkZydWxlcy5kJTJGNjAtbm9yZWJvb3Rfbm9yZXN0YXJ0LnJ1bGVzJTBBcG9sa2l0LmFkZFJ1bGUoZnVuY3Rpb24oYWN0aW9uJTJDJTIwc3ViamVjdCklMjAlN0IlMEElMjAlMjBpZiUyMChhY3Rpb24uaWQlMjAlM0QlM0QlMjAlMjJvcmcuZnJlZWRlc2t0b3AubG9naW4xLnJlYm9vdCUyMiUyMCU3QyU3QyUwQSUyMCUyMCUyMCUyMCUyMCUyMGFjdGlvbi5pZCUyMCUzRCUzRCUyMCUyMm9yZy5mcmVlZGVza3RvcC5sb2dpbjEucmVib290LW11bHRpcGxlLXNlc3Npb25zJTIyKSUyMCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMGlmJTIwKHN1YmplY3QudXNlciUyMCUzRCUzRCUyMCUyMmNvcmUlMjIpJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcmV0dXJuJTIwcG9sa2l0LlJlc3VsdC5ZRVMlM0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlN0QlMjBlbHNlJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcmV0dXJuJTIwcG9sa2l0LlJlc3VsdC5BVVRIX0FETUlOJTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTdEJTBBJTIwJTIwJTdEJTBBJTdEKSUzQiUwQUVPRiUwQXN5c3RlbWN0bCUyMHN0b3AlMjBkb2NrZXIlMEFzeXN0ZW1jdGwlMjBkaXNhYmxlJTIwZG9ja2VyJTBBJTBBc3lzdGVtY3RsJTIwZW5hYmxlJTIwLS1ub3clMjBrdWJlbGV0JTBBc3lzdGVtY3RsJTIwZW5hYmxlJTIwLS1ub3clMjAtLW5vLWJsb2NrJTIwa3ViZWxldC1oZWFsdGhjaGVjay5zZXJ2aWNlJTBBc3lzdGVtY3RsJTIwZGlzYWJsZSUyMHNldHVwLnNlcnZpY2UlMEEiLCJ2ZXJpZmljYXRpb24iOnt9fSwibW9kZSI6NDkzfSx7ImZpbGVzeXN0ZW0iOiJyb290IiwicGF0aCI6Ii9ldGMva3ViZXJuZXRlcy9wa2kvY2EuY3J0IiwiY29udGVudHMiOnsic291cmNlIjoiZGF0YTosLS0tLS1CRUdJTiUyMENFUlRJRklDQVRFLS0tLS0lMEFNSUlFV2pDQ0EwS2dBd0lCQWdJSkFMZlJsV3NJOFlRSE1BMEdDU3FHU0liM0RRRUJCUVVBTUhzeEN6QUpCZ05WJTBBQkFZVEFsVlRNUXN3Q1FZRFZRUUlFd0pEUVRFV01CUUdBMVVFQnhNTlUyRnVJRVp5WVc1amFYTmpiekVVTUJJRyUwQUExVUVDaE1MUW5KaFpHWnBkSHBwYm1NeEVqQVFCZ05WQkFNVENXeHZZMkZzYUc5emRERWRNQnNHQ1NxR1NJYjMlMEFEUUVKQVJZT1luSmhaRUJrWVc1bllTNWpiMjB3SGhjTk1UUXdOekUxTWpBME5qQTFXaGNOTVRjd05UQTBNakEwJTBBTmpBMVdqQjdNUXN3Q1FZRFZRUUdFd0pWVXpFTE1Ba0dBMVVFQ0JNQ1EwRXhGakFVQmdOVkJBY1REVk5oYmlCRyUwQWNtRnVZMmx6WTI4eEZEQVNCZ05WQkFvVEMwSnlZV1JtYVhSNmFXNWpNUkl3RUFZRFZRUURFd2xzYjJOaGJHaHYlMEFjM1F4SFRBYkJna3Foa2lHOXcwQkNRRVdEbUp5WVdSQVpHRnVaMkV1WTI5dE1JSUJJakFOQmdrcWhraUc5dzBCJTBBQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBdDVmQWpwNGZUY2VrV1VUZnpzcDBreWloMU9ZYnNHTDBLWDFlUmJTUyUwQVI4T2QwJTJCOVE2Mkh5bnklMkJHRndNVGI0QSUyRktVOG1zc29IdmNjZVNBQWJ3ZmJ4RkslMkYlMkJzNTFUb2JxVW5PUlpyT29UJTBBWmprVXlnYnlYRFNLOTlZQmJjUjFQaXA4dndNVG00WEt1THRDaWdlQkJkampBUWRnVU8yOExFTkdsc01ubWVZayUwQUpmT0RWR25WbXI1THRiOUFOQThJS3lUZnNuSEo0aU9DUyUyRlBsUGJVajJxN1lub1ZMcG9zVUJNbGdVYiUyRkN5a1gzJTBBbU9vTGI0eUpKUXlBJTJGaVNUNlp4aUlFajM2RDR5V1o1bGc3WUpsJTJCVWlpQlFIR0NuUGRHeWlwcVYwNmV4MGhlWVclMEFjYWlXOExXWlNVUTkzalElMkJXVkNIOGhUN0RRTzFkbXN2VW1YbHElMkZKZUFsd1ElMkZRSURBUUFCbzRIZ01JSGRNQjBHJTBBQTFVZERnUVdCQlJjQVJPdGhTNFA0VTd2VGZqQnlDNTY5UjdFNkRDQnJRWURWUjBqQklHbE1JR2lnQlJjQVJPdCUwQWhTNFA0VTd2VGZqQnlDNTY5UjdFNktGJTJGcEgwd2V6RUxNQWtHQTFVRUJoTUNWVk14Q3pBSkJnTlZCQWdUQWtOQiUwQU1SWXdGQVlEVlFRSEV3MVRZVzRnUm5KaGJtTnBjMk52TVJRd0VnWURWUVFLRXd0Q2NtRmtabWwwZW1sdVl6RVMlMEFNQkFHQTFVRUF4TUpiRzlqWVd4b2IzTjBNUjB3R3dZSktvWklodmNOQVFrQkZnNWljbUZrUUdSaGJtZGhMbU52JTBBYllJSkFMZlJsV3NJOFlRSE1Bd0dBMVVkRXdRRk1BTUJBZjh3RFFZSktvWklodmNOQVFFRkJRQURnZ0VCQUc2aCUwQVU5ZjlzTkgwJTJGNm9CYkdHeTJFVlUwVWdJVFVRSXJGV285ckZrclc1ayUyRlhrRGpRbSUyQjNsempUMGlHUjRJeEUlMkZBbyUwQWVVNnNRaHVhN3dyV2VGRW40N0dMOThsbkNzSmREN29aTmhGbVE5NVRiJTJGTG5EVWpzNVlqOWJyUDBOV3pYZllVNCUwQVVLMlpuSU5KUmNKcEI4aVJDYUN4RThEZGNVRjBYcUlFcTZwQTI3MnNub0xtaVhMTXZObDNrWUVkbSUyQmplNnZvRCUwQTU4U05WRVVzenR6UXlYbUpFaENwd1ZJMEE2UUNqelhqJTJCcXZwbXczWlpIaThKd1hlaThaWkJMVFNGQmtpOFo3biUwQXNIOUJCSDM4JTJGU3pVbUFONFFIU1B5MWdqcW0wME9BRThOYVlEa2glMkZiekU0ZDdtTEdHTVdwJTJGV0UzS1BTdTgySEYlMEFrUGU2WG9TYmlMbSUyRmt4azMyVDAlM0QlMEEtLS0tLUVORCUyMENFUlRJRklDQVRFLS0tLS0lMEEiLCJ2ZXJpZmljYXRpb24iOnt9fSwibW9kZSI6NDIwfSx7ImZpbGVzeXN0ZW0iOiJyb290IiwicGF0aCI6Ii9ldGMvc3lzdGVtZC9zeXN0ZW0va3ViZWxldC5zZXJ2aWNlIiwiY29udGVudHMiOnsic291cmNlIjoiZGF0YTosJTVCVW5pdCU1RCUwQUFmdGVyJTNEY29udGFpbmVyZC5zZXJ2aWNlJTBBUmVxdWlyZXMlM0Rjb250YWluZXJkLnNlcnZpY2UlMEElMEFEZXNjcmlwdGlvbiUzRGt1YmVsZXQlM0ElMjBUaGUlMjBLdWJlcm5ldGVzJTIwTm9kZSUyMEFnZW50JTBBRG9jdW1lbnRhdGlvbiUzRGh0dHBzJTNBJTJGJTJGa3ViZXJuZXRlcy5pbyUyRmRvY3MlMkZob21lJTJGJTBBJTBBJTVCU2VydmljZSU1RCUwQVJlc3RhcnQlM0RhbHdheXMlMEFTdGFydExpbWl0SW50ZXJ2YWwlM0QwJTBBUmVzdGFydFNlYyUzRDEwJTBBQ1BVQWNjb3VudGluZyUzRHRydWUlMEFNZW1vcnlBY2NvdW50aW5nJTNEdHJ1ZSUwQSUwQUVudmlyb25tZW50JTNEJTIyUEFUSCUzRCUyRm9wdCUyRmJpbiUzQSUyRmJpbiUzQSUyRnVzciUyRmxvY2FsJTJGc2JpbiUzQSUyRnVzciUyRmxvY2FsJTJGYmluJTNBJTJGdXNyJTJGc2JpbiUzQSUyRnVzciUyRmJpbiUzQSUyRnNiaW4lMkYlMjIlMEFFbnZpcm9ubWVudEZpbGUlM0QtJTJGZXRjJTJGZW52aXJvbm1lbnQlMEFFbnZpcm9ubWVudEZpbGUlM0QlMkZldGMlMkZrdWJlcm5ldGVzJTJGbm9kZWlwLmNvbmYlMEElMEFFeGVjU3RhcnRQcmUlM0QlMkZiaW4lMkZiYXNoJTIwJTJGb3B0JTJGbG9hZC1rZXJuZWwtbW9kdWxlcy5zaCUwQUV4ZWNTdGFydFByZSUzRCUyRmJpbiUyRmJhc2glMjAlMkZvcHQlMkZiaW4lMkZzZXR1cF9uZXRfZW52LnNoJTBBRXhlY1N0YXJ0JTNEJTJGb3B0JTJGYmluJTJGa3ViZWxldCUyMCUyNEtVQkVMRVRfRVhUUkFfQVJHUyUyMCU1QyUwQSUyMCUyMC0tYm9vdHN0cmFwLWt1YmVjb25maWclM0QlMkZldGMlMkZrdWJlcm5ldGVzJTJGYm9vdHN0cmFwLWt1YmVsZXQuY29uZiUyMCU1QyUwQSUyMCUyMC0ta3ViZWNvbmZpZyUzRCUyRnZhciUyRmxpYiUyRmt1YmVsZXQlMkZrdWJlY29uZmlnJTIwJTVDJTBBJTIwJTIwLS1jb25maWclM0QlMkZldGMlMkZrdWJlcm5ldGVzJTJGa3ViZWxldC5jb25mJTIwJTVDJTBBJTIwJTIwLS1uZXR3b3JrLXBsdWdpbiUzRGNuaSUyMCU1QyUwQSUyMCUyMC0tY2VydC1kaXIlM0QlMkZldGMlMkZrdWJlcm5ldGVzJTJGcGtpJTIwJTVDJTBBJTIwJTIwLS1jbG91ZC1wcm92aWRlciUzRGF3cyUyMCU1QyUwQSUyMCUyMC0tY2xvdWQtY29uZmlnJTNEJTJGZXRjJTJGa3ViZXJuZXRlcyUyRmNsb3VkLWNvbmZpZyUyMCU1QyUwQSUyMCUyMC0tZHluYW1pYy1jb25maWctZGlyJTNEJTJGZXRjJTJGa3ViZXJuZXRlcyUyRmR5bmFtaWMtY29uZmlnLWRpciUyMCU1QyUwQSUyMCUyMC0tZmVhdHVyZS1nYXRlcyUzRER5bmFtaWNLdWJlbGV0Q29uZmlnJTNEdHJ1ZSUyMCU1QyUwQSUyMCUyMC0tZXhpdC1vbi1sb2NrLWNvbnRlbnRpb24lMjAlNUMlMEElMjAlMjAtLWxvY2stZmlsZSUzRCUyRnRtcCUyRmt1YmVsZXQubG9jayUyMCU1QyUwQSUyMCUyMC0tY29udGFpbmVyLXJ1bnRpbWUlM0RyZW1vdGUlMjAlNUMlMEElMjAlMjAtLWNvbnRhaW5lci1ydW50aW1lLWVuZHBvaW50JTNEdW5peCUzQSUyRiUyRiUyRnJ1biUyRmNvbnRhaW5lcmQlMkZjb250YWluZXJkLnNvY2slMjAlNUMlMEElMjAlMjAtLW5vZGUtaXAlMjAlMjQlN0JLVUJFTEVUX05PREVfSVAlN0QlMEElMEElNUJJbnN0YWxsJTVEJTBBV2FudGVkQnklM0RtdWx0aS11c2VyLnRhcmdldCUwQSIsInZlcmlmaWNhdGlvbiI6e319LCJtb2RlIjo0MjB9LHsiZmlsZXN5c3RlbSI6InJvb3QiLCJwYXRoIjoiL2V0Yy9rdWJlcm5ldGVzL2Nsb3VkLWNvbmZpZyIsImNvbnRlbnRzIjp7InNvdXJjZSI6ImRhdGE6LCU1Qmdsb2JhbCU1RCUwQVpvbmUlM0QlMjIlMjIlMEFWUEMlM0QlMjIlMjIlMEFTdWJuZXRJRCUzRCUyMnRlc3Qtc3VibmV0JTIyJTBBIiwidmVyaWZpY2F0aW9uIjp7fX0sIm1vZGUiOjI1Nn0seyJmaWxlc3lzdGVtIjoicm9vdCIsInBhdGgiOiIvZXRjL2t1YmVybmV0ZXMva3ViZWxldC5jb25mIiwiY29udGVudHMiOnsic291cmNlIjoiZGF0YTosYXBpVmVyc2lvbiUzQSUyMGt1YmVsZXQuY29uZmlnLms4cy5pbyUyRnYxYmV0YTElMEFraW5kJTNBJTIwS3ViZWxldENvbmZpZ3VyYXRpb24lMEFhdXRoZW50aWNhdGlvbiUzQSUwQSUyMCUyMGFub255bW91cyUzQSUwQSUyMCUyMCUyMCUyMGVuYWJsZWQlM0ElMjBmYWxzZSUwQSUyMCUyMHdlYmhvb2slM0ElMEElMjAlMjAlMjAlMjBlbmFibGVkJTNBJTIwdHJ1ZSUwQSUyMCUyMHg1MDklM0ElMEElMjAlMjAlMjAlMjBjbGllbnRDQUZpbGUlM0ElMjAlMkZldGMlMkZrdWJlcm5ldGVzJTJGcGtpJTJGY2EuY3J0JTBBYXV0aG9yaXphdGlvbiUzQSUwQSUyMCUyMG1vZGUlM0ElMjBXZWJob29rJTBBY2dyb3VwRHJpdmVyJTNBJTIwc3lzdGVtZCUwQWNsdXN0ZXJETlMlM0ElMEEtJTIwJTIyMTAuMC4wLjAlMjIlMEFjbHVzdGVyRG9tYWluJTNBJTIwY2x1c3Rlci5sb2NhbCUwQWZlYXR1cmVHYXRlcyUzQSUwQSUyMCUyMEdyYWNlZnVsTm9kZVNodXRkb3duJTNBJTIwdHJ1ZSUwQSUyMCUyMElkZW50aWZ5UG9kT1MlM0ElMjBmYWxzZSUwQXByb3RlY3RLZXJuZWxEZWZhdWx0cyUzQSUyMHRydWUlMEFyZWFkT25seVBvcnQlM0ElMjAwJTBBcm90YXRlQ2VydGlmaWNhdGVzJTNBJTIwdHJ1ZSUwQXNlcnZlclRMU0Jvb3RzdHJhcCUzQSUyMHRydWUlMEFzdGF0aWNQb2RQYXRoJTNBJTIwJTJGZXRjJTJGa3ViZXJuZXRlcyUyRm1hbmlmZXN0cyUwQWt1YmVSZXNlcnZlZCUzQSUwQSUyMCUyMGNwdSUzQSUyMDIwMG0lMEElMjAlMjBlcGhlbWVyYWwtc3RvcmFnZSUzQSUyMDFHaSUwQSUyMCUyMG1lbW9yeSUzQSUyMDIwME1pJTBBc3lzdGVtUmVzZXJ2ZWQlM0ElMEElMjAlMjBjcHUlM0ElMjAyMDBtJTBBJTIwJTIwZXBoZW1lcmFsLXN0b3JhZ2UlM0ElMjAxR2klMEElMjAlMjBtZW1vcnklM0ElMjAyMDBNaSUwQWV2aWN0aW9uSGFyZCUzQSUwQSUyMCUyMGltYWdlZnMuYXZhaWxhYmxlJTNBJTIwMTUlMjUlMEElMjAlMjBtZW1vcnkuYXZhaWxhYmxlJTNBJTIwMTAwTWklMEElMjAlMjBub2RlZnMuYXZhaWxhYmxlJTNBJTIwMTAlMjUlMEElMjAlMjBub2RlZnMuaW5vZGVzRnJlZSUzQSUyMDUlMjUlMEF0bHNDaXBoZXJTdWl0ZXMlM0ElMEEtJTIwVExTX0FFU18xMjhfR0NNX1NIQTI1NiUwQS0lMjBUTFNfQUVTXzI1Nl9HQ01fU0hBMzg0JTBBLSUyMFRMU19DSEFDSEEyMF9QT0xZMTMwNV9TSEEyNTYlMEEtJTIwVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2JTBBLSUyMFRMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NCUwQS0lMjBUTFNfRUNESEVfRUNEU0FfV0lUSF9DSEFDSEEyMF9QT0xZMTMwNSUwQS0lMjBUTFNfRUNESEVfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2JTBBLSUyMFRMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQlMEEtJTIwVExTX0VDREhFX1JTQV9XSVRIX0NIQUNIQTIwX1BPTFkxMzA1JTBBdm9sdW1lUGx1Z2luRGlyJTNBJTIwJTJGdmFyJTJGbGliJTJGa3ViZWxldCUyRnZvbHVtZXBsdWdpbnMlMEEiLCJ2ZXJpZmljYXRpb24iOnt9fSwibW9kZSI6NDIwfSx7ImZpbGVzeXN0ZW0iOiJyb290IiwicGF0aCI6Ii9ldGMvc3lzdGVtZC9zeXN0ZW0va3ViZWxldC1oZWFsdGhjaGVjay5zZXJ2aWNlIiwiY29udGVudHMiOnsic291cmNlIjoiZGF0YTosJTVCVW5pdCU1RCUwQVJlcXVpcmVzJTNEa3ViZWxldC5zZXJ2aWNlJTBBQWZ0ZXIlM0RrdWJlbGV0LnNlcnZpY2UlMEElMEElNUJTZXJ2aWNlJTVEJTBBRXhlY1N0YXJ0JTNEJTJGb3B0JTJGYmluJTJGaGVhbHRoLW1vbml0b3Iuc2glMjBrdWJlbGV0JTBBJTBBJTVCSW5zdGFsbCU1RCUwQVdhbnRlZEJ5JTNEbXVsdGktdXNlci50YXJnZXQlMEEiLCJ2ZXJpZmljYXRpb24iOnt9fSwibW9kZSI6NDIwfSx7ImZpbGVzeXN0ZW0iOiJyb290IiwicGF0aCI6Ii9wcm9jL3N5cy9rZXJuZWwvcGFuaWNfb25fb29wcyIsImNvbnRlbnRzIjp7InNvdXJjZSI6ImRhdGE6LDElMEEiLCJ2ZXJpZmljYXRpb24iOnt9fSwibW9kZSI6NDIwfSx7ImZpbGVzeXN0ZW0iOiJyb290IiwicGF0aCI6Ii9wcm9jL3N5cy9rZXJuZWwvcGFuaWMiLCJjb250ZW50cyI6eyJzb3VyY2UiOiJkYXRhOiwxMCUwQSIsInZlcmlmaWNhdGlvbiI6e319LCJtb2RlIjo0MjB9LHsiZmlsZXN5c3RlbSI6InJvb3QiLCJwYXRoIjoiL3Byb2Mvc3lzL3ZtL292ZXJjb21taXRfbWVtb3J5IiwiY29udGVudHMiOnsic291cmNlIjoiZGF0YTosMSUwQSIsInZlcmlmaWNhdGlvbiI6e319LCJtb2RlIjo0MjB9LHsiZmlsZXN5c3RlbSI6InJvb3QiLCJwYXRoIjoiL2V0Yy9zc2gvc3NoZF9jb25maWciLCJjb250ZW50cyI6eyJzb3VyY2UiOiJkYXRhOiwlMjMlMjBVc2UlMjBtb3N0JTIwZGVmYXVsdHMlMjBmb3IlMjBzc2hkJTIwY29uZmlndXJhdGlvbi4lMEFTdWJzeXN0ZW0lMjBzZnRwJTIwaW50ZXJuYWwtc2Z0cCUwQUNsaWVudEFsaXZlSW50ZXJ2YWwlMjAxODAlMEFVc2VETlMlMjBubyUwQVVzZVBBTSUyMHllcyUwQVByaW50TGFzdExvZyUyMG5vJTIwJTIzJTIwaGFuZGxlZCUyMGJ5JTIwUEFNJTBBUHJpbnRNb3RkJTIwbm8lMjAlMjMlMjBoYW5kbGVkJTIwYnklMjBQQU0lMEFQYXNzd29yZEF1dGhlbnRpY2F0aW9uJTIwbm8lMEFDaGFsbGVuZ2VSZXNwb25zZUF1dGhlbnRpY2F0aW9uJTIwbm8lMEEiLCJ2ZXJpZmljYXRpb24iOnt9fSwibW9kZSI6Mzg0fSx7ImZpbGVzeXN0ZW0iOiJyb290IiwicGF0aCI6Ii9ldGMvY29udGFpbmVyZC9jb25maWcudG9tbCIsImNvbnRlbnRzIjp7InNvdXJjZSI6ImRhdGE6LHZlcnNpb24lMjAlM0QlMjAyJTBBJTBBJTVCbWV0cmljcyU1RCUwQWFkZHJlc3MlMjAlM0QlMjAlMjIxMjcuMC4wLjElM0ExMzM4JTIyJTBBJTBBJTVCcGx1Z2lucyU1RCUwQSU1QnBsdWdpbnMuJTIyaW8uY29udGFpbmVyZC5ncnBjLnYxLmNyaSUyMiU1RCUwQSU1QnBsdWdpbnMuJTIyaW8uY29udGFpbmVyZC5ncnBjLnYxLmNyaSUyMi5jb250YWluZXJkJTVEJTBBJTVCcGx1Z2lucy4lMjJpby5jb250YWluZXJkLmdycGMudjEuY3JpJTIyLmNvbnRhaW5lcmQucnVudGltZXMlNUQlMEElNUJwbHVnaW5zLiUyMmlvLmNvbnRhaW5lcmQuZ3JwYy52MS5jcmklMjIuY29udGFpbmVyZC5ydW50aW1lcy5ydW5jJTVEJTBBcnVudGltZV90eXBlJTIwJTNEJTIwJTIyaW8uY29udGFpbmVyZC5ydW5jLnYyJTIyJTBBJTVCcGx1Z2lucy4lMjJpby5jb250YWluZXJkLmdycGMudjEuY3JpJTIyLmNvbnRhaW5lcmQucnVudGltZXMucnVuYy5vcHRpb25zJTVEJTBBU3lzdGVtZENncm91cCUyMCUzRCUyMHRydWUlMEElNUJwbHVnaW5zLiUyMmlvLmNvbnRhaW5lcmQuZ3JwYy52MS5jcmklMjIucmVnaXN0cnklNUQlMEElNUJwbHVnaW5zLiUyMmlvLmNvbnRhaW5lcmQuZ3JwYy52MS5jcmklMjIucmVnaXN0cnkubWlycm9ycyU1RCUwQSU1QnBsdWdpbnMuJTIyaW8uY29udGFpbmVyZC5ncnBjLnYxLmNyaSUyMi5yZWdpc3RyeS5taXJyb3JzLiUyMmRvY2tlci5pbyUyMiU1RCUwQWVuZHBvaW50JTIwJTNEJTIwJTVCJTIyaHR0cHMlM0ElMkYlMkZyZWdpc3RyeS0xLmRvY2tlci5pbyUyMiU1RCUwQSIsInZlcmlmaWNhdGlvbiI6e319LCJtb2RlIjo0MjB9LHsiZmlsZXN5c3RlbSI6InJvb3QiLCJwYXRoIjoiL2V0Yy9zeXN0ZW1kL3N5c3RlbS9jb250YWluZXJkLnNlcnZpY2UuZC8xMC1jdXN0b20uY29uZiIsImNvbnRlbnRzIjp7InNvdXJjZSI6ImRhdGE6LCU1QlNlcnZpY2UlNUQlMEFSZXN0YXJ0JTNEYWx3YXlzJTBBRW52aXJvbm1lbnRGaWxlJTNELSUyRmV0YyUyRmVudmlyb25tZW50JTBBRW52aXJvbm1lbnRGaWxlJTNEJTJGcnVuJTJGbWV0YWRhdGElMkZ0b3JjeCUwQUVudmlyb25tZW50JTNEQ09OVEFJTkVSRF9DT05GSUclM0QlMkZldGMlMkZjb250YWluZXJkJTJGY29uZmlnLnRvbWwlMEFFeGVjU3RhcnQlM0QlMEFFeGVjU3RhcnQlM0QlMkZ1c3IlMkZiaW4lMkZlbnYlMjBQQVRIJTNEJTI0JTdCVE9SQ1hfQklORElSJTdEJTNBJTI0JTdCUEFUSCU3RCUyMCUyNCU3QlRPUkNYX0JJTkRJUiU3RCUyRmNvbnRhaW5lcmQlMjAtLWNvbmZpZyUyMCUyNCU3QkNPTlRBSU5FUkRfQ09ORklHJTdEJTBBIiwidmVyaWZpY2F0aW9uIjp7fX0sIm1vZGUiOjQyMH0seyJmaWxlc3lzdGVtIjoicm9vdCIsInBhdGgiOiIvZXRjL2NyaWN0bC55YW1sIiwiY29udGVudHMiOnsic291cmNlIjoiZGF0YToscnVudGltZS1lbmRwb2ludCUzQSUyMHVuaXglM0ElMkYlMkYlMkZydW4lMkZjb250YWluZXJkJTJGY29udGFpbmVyZC5zb2NrJTBBIiwidmVyaWZpY2F0aW9uIjp7fX0sIm1vZGUiOjQyMH1dfSwic3lzdGVtZCI6eyJ1bml0cyI6W3siY29udGVudHMiOiJbSW5zdGFsbF1cbldhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0XG5cbltVbml0XVxuUmVxdWlyZXM9ZG93bmxvYWQtc2NyaXB0LnNlcnZpY2VcblJlcXVpcmVzPW5vZGVpcC5zZXJ2aWNlXG5BZnRlcj1kb3dubG9hZC1zY3JpcHQuc2VydmljZVxuQWZ0ZXI9bm9kZWlwLnNlcnZpY2VcblxuW1NlcnZpY2VdXG5UeXBlPW9uZXNob3RcblJlbWFpbkFmdGVyRXhpdD10cnVlXG5FbnZpcm9ubWVudEZpbGU9LS9ldGMvZW52aXJvbm1lbnRcbkV4ZWNTdGFydD0vb3B0L2Jpbi9zZXR1cFxuIiwiZW5hYmxlZCI6dHJ1ZSwibmFtZSI6InNldHVwLnNlcnZpY2UifSx7ImNvbnRlbnRzIjoiW0luc3RhbGxdXG5XYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldFxuXG5bVW5pdF1cblJlcXVpcmVzPW5ldHdvcmstb25saW5lLnRhcmdldFxuQWZ0ZXI9bmV0d29yay1vbmxpbmUudGFyZ2V0XG5cbltTZXJ2aWNlXVxuVHlwZT1vbmVzaG90XG5SZW1haW5BZnRlckV4aXQ9dHJ1ZVxuRW52aXJvbm1lbnRGaWxlPS0vZXRjL2Vudmlyb25tZW50XG5FeGVjU3RhcnQ9L29wdC9iaW4vZG93bmxvYWQuc2hcbiIsImVuYWJsZWQiOnRydWUsIm5hbWUiOiJkb3dubG9hZC1zY3JpcHQuc2VydmljZSJ9LHsiY29udGVudHMiOiJbVW5pdF1cbkRlc2NyaXB0aW9uPVNldHVwIEt1YmVsZXQgTm9kZSBJUCBFbnZcblJlcXVpcmVzPW5ldHdvcmstb25saW5lLnRhcmdldFxuQWZ0ZXI9bmV0d29yay1vbmxpbmUudGFyZ2V0XG5cbltTZXJ2aWNlXVxuRXhlY1N0YXJ0PS9vcHQvYmluL3NldHVwX25ldF9lbnYuc2hcblJlbWFpbkFmdGVyRXhpdD15ZXNcblR5cGU9b25lc2hvdFxuW0luc3RhbGxdXG5XYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldFxuIiwiZW5hYmxlZCI6dHJ1ZSwibmFtZSI6Im5vZGVpcC5zZXJ2aWNlIn0seyJjb250ZW50cyI6IltVbml0XVxuRGVzY3JpcHRpb249U2V0dXAgU3RhdGljIE5ldHdvcmtpbmdcblJlcXVpcmVzPW5ldHdvcmstb25saW5lLnRhcmdldFxuQWZ0ZXI9bmV0d29yay1vbmxpbmUudGFyZ2V0XG5cbltTZXJ2aWNlXVxuRXhlY1N0YXJ0PS9vcHQvYmluL2NvbmZpZ3VyZV9zdGF0aWNfbmV0d29yay5zaFxuUmVtYWluQWZ0ZXJFeGl0PXllc1xuVHlwZT1vbmVzaG90XG5bSW5zdGFsbF1cbldhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0XG4iLCJlbmFibGVkIjp0cnVlLCJuYW1lIjoic3RhdGljLW5ldHdvcmstc2NyaXB0LnNlcnZpY2UifV19fQ== + cloud-config: eyJpZ25pdGlvbiI6eyJjb25maWciOnt9LCJzZWN1cml0eSI6eyJ0bHMiOnt9fSwidGltZW91dHMiOnt9LCJ2ZXJzaW9uIjoiMi4zLjAifSwibmV0d29ya2QiOnt9LCJwYXNzd2QiOnsidXNlcnMiOlt7Im5hbWUiOiJjb3JlIiwic3NoQXV0aG9yaXplZEtleXMiOlsic3NoLXJzYSBBQUFBQjNOemFDMXljMkVBQUFBREFRQUJBQUFDQVFEZE9JaFltekNLNURTVkx1M2MiXX1dfSwic3RvcmFnZSI6eyJmaWxlcyI6W3siZmlsZXN5c3RlbSI6InJvb3QiLCJwYXRoIjoiL2V0Yy9zeXN0ZW1kL2pvdXJuYWxkLmNvbmYuZC9tYXhfZGlza191c2UuY29uZiIsImNvbnRlbnRzIjp7InNvdXJjZSI6ImRhdGE6LCU1QkpvdXJuYWwlNUQlMEFTeXN0ZW1NYXhVc2UlM0Q1RyUwQSIsInZlcmlmaWNhdGlvbiI6e319LCJtb2RlIjo0MjB9LHsiZmlsZXN5c3RlbSI6InJvb3QiLCJwYXRoIjoiL29wdC9sb2FkLWtlcm5lbC1tb2R1bGVzLnNoIiwiY29udGVudHMiOnsic291cmNlIjoiZGF0YTosJTIzISUyRnVzciUyRmJpbiUyRmVudiUyMGJhc2glMEFzZXQlMjAtZXVvJTIwcGlwZWZhaWwlMEElMEFtb2Rwcm9iZSUyMGlwX3ZzJTBBbW9kcHJvYmUlMjBpcF92c19yciUwQW1vZHByb2JlJTIwaXBfdnNfd3JyJTBBbW9kcHJvYmUlMjBpcF92c19zaCUwQSUwQWlmJTIwbW9kaW5mbyUyMG5mX2Nvbm50cmFja19pcHY0JTIwJTI2JTNFJTIwJTJGZGV2JTJGbnVsbCUzQiUyMHRoZW4lMEElMjAlMjBtb2Rwcm9iZSUyMG5mX2Nvbm50cmFja19pcHY0JTBBZWxzZSUwQSUyMCUyMG1vZHByb2JlJTIwbmZfY29ubnRyYWNrJTBBZmklMEEiLCJ2ZXJpZmljYXRpb24iOnt9fSwibW9kZSI6NDkzfSx7ImZpbGVzeXN0ZW0iOiJyb290IiwicGF0aCI6Ii9ldGMvc3lzY3RsLmQvazhzLmNvbmYiLCJjb250ZW50cyI6eyJzb3VyY2UiOiJkYXRhOixuZXQuYnJpZGdlLmJyaWRnZS1uZi1jYWxsLWlwNnRhYmxlcyUyMCUzRCUyMDElMEFuZXQuYnJpZGdlLmJyaWRnZS1uZi1jYWxsLWlwdGFibGVzJTIwJTNEJTIwMSUwQWtlcm5lbC5wYW5pY19vbl9vb3BzJTIwJTNEJTIwMSUwQWtlcm5lbC5wYW5pYyUyMCUzRCUyMDEwJTBBbmV0LmlwdjQuaXBfZm9yd2FyZCUyMCUzRCUyMDElMEF2bS5vdmVyY29tbWl0X21lbW9yeSUyMCUzRCUyMDElMEFmcy5pbm90aWZ5Lm1heF91c2VyX3dhdGNoZXMlMjAlM0QlMjAxMDQ4NTc2JTBBIiwidmVyaWZpY2F0aW9uIjp7fX0sIm1vZGUiOjQyMH0seyJmaWxlc3lzdGVtIjoicm9vdCIsInBhdGgiOiIvb3B0L2Jpbi9zZXR1cF9uZXRfZW52LnNoIiwiY29udGVudHMiOnsic291cmNlIjoiZGF0YTosJTIzISUyRnVzciUyRmJpbiUyRmVudiUyMGJhc2glMEFlY2hvZGF0ZSgpJTIwJTdCJTBBJTIwJTIwZWNobyUyMCUyMiU1QiUyNChkYXRlJTIwLUlzKSU1RCUyMiUyMCUyMiUyNCU0MCUyMiUwQSU3RCUwQSUwQSUyMyUyMGdldCUyMHRoZSUyMGRlZmF1bHQlMjBpbnRlcmZhY2UlMjBJUCUyMGFkZHJlc3MlMEFERUZBVUxUX0lGQ19JUCUzRCUyNChpcCUyMC1vJTIwJTIwcm91dGUlMjBnZXQlMjAxJTIwJTdDJTIwZ3JlcCUyMC1vUCUyMCUyMnNyYyUyMCU1Q0slNUNTJTJCJTIyKSUwQSUwQWlmJTIwJTVCJTIwLXolMjAlMjIlMjQlN0JERUZBVUxUX0lGQ19JUCU3RCUyMiUyMCU1RCUwQXRoZW4lMEElMjAlMjBlY2hvZGF0ZSUyMCUyMkZhaWxlZCUyMHRvJTIwZ2V0JTIwSVAlMjBhZGRyZXNzJTIwZm9yJTIwdGhlJTIwZGVmYXVsdCUyMHJvdXRlJTIwaW50ZXJmYWNlJTIyJTBBJTIwJTIwZXhpdCUyMDElMEFmaSUwQSUwQSUyMyUyMGdldCUyMHRoZSUyMGZ1bGwlMjBob3N0bmFtZSUwQUZVTExfSE9TVE5BTUUlM0QlMjQoaG9zdG5hbWUlMjAtZiklMEElMjMlMjBpZiUyMCUyRmV0YyUyRmhvc3RuYW1lJTIwaXMlMjBub3QlMjBlbXB0eSUyMHRoZW4lMjB1c2UlMjB0aGUlMjBob3N0bmFtZSUyMGZyb20lMjB0aGVyZSUwQWlmJTIwJTVCJTIwLXMlMjAlMkZldGMlMkZob3N0bmFtZSUyMCU1RCUzQiUyMHRoZW4lMEElMjAlMjAlMjAlMjBGVUxMX0hPU1ROQU1FJTNEJTI0KGNhdCUyMCUyRmV0YyUyRmhvc3RuYW1lKSUwQWZpJTBBJTBBJTIzJTIwd3JpdGUlMjB0aGUlMjBub2RlaXBfZW52JTIwZmlsZSUwQSUyMyUyMHdlJTIwbmVlZCUyMHRoZSUyMGxpbmUlMjBiZWxvdyUyMGJlY2F1c2UlMjBmbGF0Y2FyJTIwaGFzJTIwdGhlJTIwc2FtZSUyMHN0cmluZyUyMCUyMmNvcmVvcyUyMiUyMGluJTIwdGhhdCUyMGZpbGUlMEFpZiUyMGdyZXAlMjAtcSUyMGNvcmVvcyUyMCUyRmV0YyUyRm9zLXJlbGVhc2UlMEF0aGVuJTBBJTIwJTIwZWNobyUyMC1lJTIwJTIyS1VCRUxFVF9OT0RFX0lQJTNEJTI0JTdCREVGQVVMVF9JRkNfSVAlN0QlNUNuS1VCRUxFVF9IT1NUTkFNRSUzRCUyNCU3QkZVTExfSE9TVE5BTUUlN0QlMjIlMjAlM0UlMjAlMkZldGMlMkZrdWJlcm5ldGVzJTJGbm9kZWlwLmNvbmYlMEFlbGlmJTIwJTVCJTIwISUyMC1kJTIwJTJGZXRjJTJGc3lzdGVtZCUyRnN5c3RlbSUyRmt1YmVsZXQuc2VydmljZS5kJTIwJTVEJTBBdGhlbiUwQSUyMCUyMGVjaG9kYXRlJTIwJTIyQ2FuJ3QlMjBmaW5kJTIwa3ViZWxldCUyMHNlcnZpY2UlMjBleHRyYXMlMjBkaXJlY3RvcnklMjIlMEElMjAlMjBleGl0JTIwMSUwQWVsc2UlMEElMjAlMjBlY2hvJTIwLWUlMjAlMjIlNUJTZXJ2aWNlJTVEJTVDbkVudmlyb25tZW50JTNEJTVDJTIyS1VCRUxFVF9OT0RFX0lQJTNEJTI0JTdCREVGQVVMVF9JRkNfSVAlN0QlNUMlMjIlNUNuRW52aXJvbm1lbnQlM0QlNUMlMjJLVUJFTEVUX0hPU1ROQU1FJTNEJTI0JTdCRlVMTF9IT1NUTkFNRSU3RCU1QyUyMiUyMiUyMCUzRSUyMCUyRmV0YyUyRnN5c3RlbWQlMkZzeXN0ZW0lMkZrdWJlbGV0LnNlcnZpY2UuZCUyRm5vZGVpcC5jb25mJTBBZmklMEEiLCJ2ZXJpZmljYXRpb24iOnt9fSwibW9kZSI6NDkzfSx7ImZpbGVzeXN0ZW0iOiJyb290IiwicGF0aCI6Ii9vcHQvYmluL2NvbmZpZ3VyZV9zdGF0aWNfbmV0d29yay5zaCIsImNvbnRlbnRzIjp7InNvdXJjZSI6ImRhdGE6LCUyMyElMkZ1c3IlMkZiaW4lMkZlbnYlMjBiYXNoJTBBc2V0JTIwLXhldW8lMjBwaXBlZmFpbCUwQSIsInZlcmlmaWNhdGlvbiI6e319LCJtb2RlIjo0OTN9LHsiZmlsZXN5c3RlbSI6InJvb3QiLCJwYXRoIjoiL29wdC9iaW4vZG93bmxvYWQuc2giLCJjb250ZW50cyI6eyJzb3VyY2UiOiJkYXRhOiwlMjMhJTJGdXNyJTJGYmluJTJGZW52JTIwYmFzaCUwQXNldCUyMC14ZXVvJTIwcGlwZWZhaWwlMEFvcHRfYmluJTNEJTJGb3B0JTJGYmluJTBBdXNyX2xvY2FsX2JpbiUzRCUyRnVzciUyRmxvY2FsJTJGYmluJTBBY25pX2Jpbl9kaXIlM0QlMkZvcHQlMkZjbmklMkZiaW4lMEFta2RpciUyMC1wJTIwJTJGZXRjJTJGY25pJTJGbmV0LmQlMjAlMkZldGMlMkZrdWJlcm5ldGVzJTJGZHluYW1pYy1jb25maWctZGlyJTIwJTJGZXRjJTJGa3ViZXJuZXRlcyUyRm1hbmlmZXN0cyUyMCUyMiUyNG9wdF9iaW4lMjIlMjAlMjIlMjRjbmlfYmluX2RpciUyMiUwQWFyY2glM0QlMjQlN0JIT1NUX0FSQ0gtJTdEJTBBaWYlMjAlNUIlMjAteiUyMCUyMiUyNGFyY2glMjIlMjAlNUQlMEF0aGVuJTBBY2FzZSUyMCUyNCh1bmFtZSUyMC1tKSUyMGluJTBBeDg2XzY0KSUwQSUyMCUyMCUyMCUyMGFyY2glM0QlMjJhbWQ2NCUyMiUwQSUyMCUyMCUyMCUyMCUzQiUzQiUwQWFhcmNoNjQpJTBBJTIwJTIwJTIwJTIwYXJjaCUzRCUyMmFybTY0JTIyJTBBJTIwJTIwJTIwJTIwJTNCJTNCJTBBKiklMEElMjAlMjAlMjAlMjBlY2hvJTIwJTIydW5zdXBwb3J0ZWQlMjBDUFUlMjBhcmNoaXRlY3R1cmUlMkMlMjBleGl0aW5nJTIyJTBBJTIwJTIwJTIwJTIwZXhpdCUyMDElMEElMjAlMjAlMjAlMjAlM0IlM0IlMEFlc2FjJTBBZmklMEFDTklfVkVSU0lPTiUzRCUyMiUyNCU3QkNOSV9WRVJTSU9OJTNBLXYwLjguNyU3RCUyMiUwQWNuaV9iYXNlX3VybCUzRCUyMmh0dHBzJTNBJTJGJTJGZ2l0aHViLmNvbSUyRmNvbnRhaW5lcm5ldHdvcmtpbmclMkZwbHVnaW5zJTJGcmVsZWFzZXMlMkZkb3dubG9hZCUyRiUyNENOSV9WRVJTSU9OJTIyJTBBY25pX2ZpbGVuYW1lJTNEJTIyY25pLXBsdWdpbnMtbGludXgtJTI0YXJjaC0lMjRDTklfVkVSU0lPTi50Z3olMjIlMEFjdXJsJTIwLUxmbyUyMCUyMiUyNGNuaV9iaW5fZGlyJTJGJTI0Y25pX2ZpbGVuYW1lJTIyJTIwJTIyJTI0Y25pX2Jhc2VfdXJsJTJGJTI0Y25pX2ZpbGVuYW1lJTIyJTBBY25pX3N1bSUzRCUyNChjdXJsJTIwLUxmJTIwJTIyJTI0Y25pX2Jhc2VfdXJsJTJGJTI0Y25pX2ZpbGVuYW1lLnNoYTI1NiUyMiklMEFjZCUyMCUyMiUyNGNuaV9iaW5fZGlyJTIyJTBBc2hhMjU2c3VtJTIwLWMlMjAlM0MlM0MlM0MlMjIlMjRjbmlfc3VtJTIyJTBBdGFyJTIweHZmJTIwJTIyJTI0Y25pX2ZpbGVuYW1lJTIyJTBBcm0lMjAtZiUyMCUyMiUyNGNuaV9maWxlbmFtZSUyMiUwQWNkJTIwLSUwQUNSSV9UT09MU19SRUxFQVNFJTNEJTIyJTI0JTdCQ1JJX1RPT0xTX1JFTEVBU0UlM0EtdjEuMjIuMCU3RCUyMiUwQWNyaV90b29sc19iYXNlX3VybCUzRCUyMmh0dHBzJTNBJTJGJTJGZ2l0aHViLmNvbSUyRmt1YmVybmV0ZXMtc2lncyUyRmNyaS10b29scyUyRnJlbGVhc2VzJTJGZG93bmxvYWQlMkYlMjQlN0JDUklfVE9PTFNfUkVMRUFTRSU3RCUyMiUwQWNyaV90b29sc19maWxlbmFtZSUzRCUyMmNyaWN0bC0lMjQlN0JDUklfVE9PTFNfUkVMRUFTRSU3RC1saW51eC0lMjQlN0JhcmNoJTdELnRhci5neiUyMiUwQWN1cmwlMjAtTGZvJTIwJTIyJTI0b3B0X2JpbiUyRiUyNGNyaV90b29sc19maWxlbmFtZSUyMiUyMCUyMiUyNGNyaV90b29sc19iYXNlX3VybCUyRiUyNGNyaV90b29sc19maWxlbmFtZSUyMiUwQWNyaV90b29sc19zdW0lM0QlMjQoY3VybCUyMC1MZiUyMCUyMiUyNGNyaV90b29sc19iYXNlX3VybCUyRiUyNGNyaV90b29sc19maWxlbmFtZS5zaGEyNTYlMjIlMjAlN0MlMjBzZWQlMjAncyUyRiU1QyolNUMlMkYlMkYlMkYnKSUwQWNkJTIwJTIyJTI0b3B0X2JpbiUyMiUwQXNoYTI1NnN1bSUyMC1jJTIwJTNDJTNDJTNDJTIyJTI0Y3JpX3Rvb2xzX3N1bSUyMiUwQXRhciUyMHh2ZiUyMCUyMiUyNGNyaV90b29sc19maWxlbmFtZSUyMiUwQXJtJTIwLWYlMjAlMjIlMjRjcmlfdG9vbHNfZmlsZW5hbWUlMjIlMEFsbiUyMC1zZiUyMCUyMiUyNG9wdF9iaW4lMkZjcmljdGwlMjIlMjAlMjIlMjR1c3JfbG9jYWxfYmluJTIyJTJGY3JpY3RsJTIwJTdDJTdDJTIwZWNobyUyMCUyMnN5bWJvbGljJTIwbGluayUyMGlzJTIwc2tpcHBlZCUyMiUwQWNkJTIwLSUwQUtVQkVfVkVSU0lPTiUzRCUyMiUyNCU3QktVQkVfVkVSU0lPTiUzQS12MS4yMi4xJTdEJTIyJTBBa3ViZV9kaXIlM0QlMjIlMjRvcHRfYmluJTJGa3ViZXJuZXRlcy0lMjRLVUJFX1ZFUlNJT04lMjIlMEFrdWJlX2Jhc2VfdXJsJTNEJTIyaHR0cHMlM0ElMkYlMkZzdG9yYWdlLmdvb2dsZWFwaXMuY29tJTJGa3ViZXJuZXRlcy1yZWxlYXNlJTJGcmVsZWFzZSUyRiUyNEtVQkVfVkVSU0lPTiUyRmJpbiUyRmxpbnV4JTJGJTI0YXJjaCUyMiUwQWt1YmVfc3VtX2ZpbGUlM0QlMjIlMjRrdWJlX2RpciUyRnNoYTI1NiUyMiUwQW1rZGlyJTIwLXAlMjAlMjIlMjRrdWJlX2RpciUyMiUwQSUzQSUyMCUzRSUyMiUyNGt1YmVfc3VtX2ZpbGUlMjIlMEElMEFmb3IlMjBiaW4lMjBpbiUyMGt1YmVsZXQlMjBrdWJlYWRtJTIwa3ViZWN0bCUzQiUyMGRvJTBBJTIwJTIwJTIwJTIwY3VybCUyMC1MZm8lMjAlMjIlMjRrdWJlX2RpciUyRiUyNGJpbiUyMiUyMCUyMiUyNGt1YmVfYmFzZV91cmwlMkYlMjRiaW4lMjIlMEElMjAlMjAlMjAlMjBjaG1vZCUyMCUyQnglMjAlMjIlMjRrdWJlX2RpciUyRiUyNGJpbiUyMiUwQSUyMCUyMCUyMCUyMHN1bSUzRCUyNChjdXJsJTIwLUxmJTIwJTIyJTI0a3ViZV9iYXNlX3VybCUyRiUyNGJpbi5zaGEyNTYlMjIpJTBBJTIwJTIwJTIwJTIwZWNobyUyMCUyMiUyNHN1bSUyMCUyMCUyNGt1YmVfZGlyJTJGJTI0YmluJTIyJTIwJTNFJTNFJTIyJTI0a3ViZV9zdW1fZmlsZSUyMiUwQWRvbmUlMEFzaGEyNTZzdW0lMjAtYyUyMCUyMiUyNGt1YmVfc3VtX2ZpbGUlMjIlMEElMEFmb3IlMjBiaW4lMjBpbiUyMGt1YmVsZXQlMjBrdWJlYWRtJTIwa3ViZWN0bCUzQiUyMGRvJTBBJTIwJTIwJTIwJTIwbG4lMjAtc2YlMjAlMjIlMjRrdWJlX2RpciUyRiUyNGJpbiUyMiUyMCUyMiUyNG9wdF9iaW4lMjIlMkYlMjRiaW4lMEFkb25lJTBBJTBBaWYlMjAlNUIlNUIlMjAhJTIwLXglMjAlMkZvcHQlMkZiaW4lMkZoZWFsdGgtbW9uaXRvci5zaCUyMCU1RCU1RCUzQiUyMHRoZW4lMEElMjAlMjAlMjAlMjBjdXJsJTIwLUxmbyUyMCUyRm9wdCUyRmJpbiUyRmhlYWx0aC1tb25pdG9yLnNoJTIwaHR0cHMlM0ElMkYlMkZyYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tJTJGa3ViZXJtYXRpYyUyRm1hY2hpbmUtY29udHJvbGxlciUyRjc5NjdhMGFmMmI3NWYyOWFkMmFiMjI3ZWVhYTI2ZWE3YjBmMmZiZGUlMkZwa2clMkZ1c2VyZGF0YSUyRnNjcmlwdHMlMkZoZWFsdGgtbW9uaXRvci5zaCUwQSUyMCUyMCUyMCUyMGNobW9kJTIwJTJCeCUyMCUyRm9wdCUyRmJpbiUyRmhlYWx0aC1tb25pdG9yLnNoJTBBZmklMEElMEFzeXN0ZW1jdGwlMjBkaXNhYmxlJTIwZG93bmxvYWQtc2NyaXB0LnNlcnZpY2UlMEEiLCJ2ZXJpZmljYXRpb24iOnt9fSwibW9kZSI6NDkzfSx7ImZpbGVzeXN0ZW0iOiJyb290IiwicGF0aCI6Ii9vcHQvYmluL3NldHVwIiwiY29udGVudHMiOnsic291cmNlIjoiZGF0YTosJTIzISUyRmJpbiUyRmJhc2glMEFzZXQlMjAteGV1byUyMHBpcGVmYWlsJTBBY2F0JTIwJTNDJTNDJTIwRU9GJTIwJTdDJTIwdGVlJTIwJTJGZXRjJTJGcG9sa2l0LTElMkZydWxlcy5kJTJGNjAtbm9yZWJvb3Rfbm9yZXN0YXJ0LnJ1bGVzJTBBcG9sa2l0LmFkZFJ1bGUoZnVuY3Rpb24oYWN0aW9uJTJDJTIwc3ViamVjdCklMjAlN0IlMEElMjAlMjBpZiUyMChhY3Rpb24uaWQlMjAlM0QlM0QlMjAlMjJvcmcuZnJlZWRlc2t0b3AubG9naW4xLnJlYm9vdCUyMiUyMCU3QyU3QyUwQSUyMCUyMCUyMCUyMCUyMCUyMGFjdGlvbi5pZCUyMCUzRCUzRCUyMCUyMm9yZy5mcmVlZGVza3RvcC5sb2dpbjEucmVib290LW11bHRpcGxlLXNlc3Npb25zJTIyKSUyMCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMGlmJTIwKHN1YmplY3QudXNlciUyMCUzRCUzRCUyMCUyMmNvcmUlMjIpJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcmV0dXJuJTIwcG9sa2l0LlJlc3VsdC5ZRVMlM0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlN0QlMjBlbHNlJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcmV0dXJuJTIwcG9sa2l0LlJlc3VsdC5BVVRIX0FETUlOJTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTdEJTBBJTIwJTIwJTdEJTBBJTdEKSUzQiUwQUVPRiUwQXN5c3RlbWN0bCUyMHN0b3AlMjBkb2NrZXIlMEFzeXN0ZW1jdGwlMjBkaXNhYmxlJTIwZG9ja2VyJTBBJTBBc3lzdGVtY3RsJTIwZW5hYmxlJTIwLS1ub3clMjBrdWJlbGV0JTBBc3lzdGVtY3RsJTIwZW5hYmxlJTIwLS1ub3clMjAtLW5vLWJsb2NrJTIwa3ViZWxldC1oZWFsdGhjaGVjay5zZXJ2aWNlJTBBc3lzdGVtY3RsJTIwZGlzYWJsZSUyMHNldHVwLnNlcnZpY2UlMEEiLCJ2ZXJpZmljYXRpb24iOnt9fSwibW9kZSI6NDkzfSx7ImZpbGVzeXN0ZW0iOiJyb290IiwicGF0aCI6Ii9ldGMva3ViZXJuZXRlcy9wa2kvY2EuY3J0IiwiY29udGVudHMiOnsic291cmNlIjoiZGF0YTosLS0tLS1CRUdJTiUyMENFUlRJRklDQVRFLS0tLS0lMEFNSUlFV2pDQ0EwS2dBd0lCQWdJSkFMZlJsV3NJOFlRSE1BMEdDU3FHU0liM0RRRUJCUVVBTUhzeEN6QUpCZ05WJTBBQkFZVEFsVlRNUXN3Q1FZRFZRUUlFd0pEUVRFV01CUUdBMVVFQnhNTlUyRnVJRVp5WVc1amFYTmpiekVVTUJJRyUwQUExVUVDaE1MUW5KaFpHWnBkSHBwYm1NeEVqQVFCZ05WQkFNVENXeHZZMkZzYUc5emRERWRNQnNHQ1NxR1NJYjMlMEFEUUVKQVJZT1luSmhaRUJrWVc1bllTNWpiMjB3SGhjTk1UUXdOekUxTWpBME5qQTFXaGNOTVRjd05UQTBNakEwJTBBTmpBMVdqQjdNUXN3Q1FZRFZRUUdFd0pWVXpFTE1Ba0dBMVVFQ0JNQ1EwRXhGakFVQmdOVkJBY1REVk5oYmlCRyUwQWNtRnVZMmx6WTI4eEZEQVNCZ05WQkFvVEMwSnlZV1JtYVhSNmFXNWpNUkl3RUFZRFZRUURFd2xzYjJOaGJHaHYlMEFjM1F4SFRBYkJna3Foa2lHOXcwQkNRRVdEbUp5WVdSQVpHRnVaMkV1WTI5dE1JSUJJakFOQmdrcWhraUc5dzBCJTBBQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBdDVmQWpwNGZUY2VrV1VUZnpzcDBreWloMU9ZYnNHTDBLWDFlUmJTUyUwQVI4T2QwJTJCOVE2Mkh5bnklMkJHRndNVGI0QSUyRktVOG1zc29IdmNjZVNBQWJ3ZmJ4RkslMkYlMkJzNTFUb2JxVW5PUlpyT29UJTBBWmprVXlnYnlYRFNLOTlZQmJjUjFQaXA4dndNVG00WEt1THRDaWdlQkJkampBUWRnVU8yOExFTkdsc01ubWVZayUwQUpmT0RWR25WbXI1THRiOUFOQThJS3lUZnNuSEo0aU9DUyUyRlBsUGJVajJxN1lub1ZMcG9zVUJNbGdVYiUyRkN5a1gzJTBBbU9vTGI0eUpKUXlBJTJGaVNUNlp4aUlFajM2RDR5V1o1bGc3WUpsJTJCVWlpQlFIR0NuUGRHeWlwcVYwNmV4MGhlWVclMEFjYWlXOExXWlNVUTkzalElMkJXVkNIOGhUN0RRTzFkbXN2VW1YbHElMkZKZUFsd1ElMkZRSURBUUFCbzRIZ01JSGRNQjBHJTBBQTFVZERnUVdCQlJjQVJPdGhTNFA0VTd2VGZqQnlDNTY5UjdFNkRDQnJRWURWUjBqQklHbE1JR2lnQlJjQVJPdCUwQWhTNFA0VTd2VGZqQnlDNTY5UjdFNktGJTJGcEgwd2V6RUxNQWtHQTFVRUJoTUNWVk14Q3pBSkJnTlZCQWdUQWtOQiUwQU1SWXdGQVlEVlFRSEV3MVRZVzRnUm5KaGJtTnBjMk52TVJRd0VnWURWUVFLRXd0Q2NtRmtabWwwZW1sdVl6RVMlMEFNQkFHQTFVRUF4TUpiRzlqWVd4b2IzTjBNUjB3R3dZSktvWklodmNOQVFrQkZnNWljbUZrUUdSaGJtZGhMbU52JTBBYllJSkFMZlJsV3NJOFlRSE1Bd0dBMVVkRXdRRk1BTUJBZjh3RFFZSktvWklodmNOQVFFRkJRQURnZ0VCQUc2aCUwQVU5ZjlzTkgwJTJGNm9CYkdHeTJFVlUwVWdJVFVRSXJGV285ckZrclc1ayUyRlhrRGpRbSUyQjNsempUMGlHUjRJeEUlMkZBbyUwQWVVNnNRaHVhN3dyV2VGRW40N0dMOThsbkNzSmREN29aTmhGbVE5NVRiJTJGTG5EVWpzNVlqOWJyUDBOV3pYZllVNCUwQVVLMlpuSU5KUmNKcEI4aVJDYUN4RThEZGNVRjBYcUlFcTZwQTI3MnNub0xtaVhMTXZObDNrWUVkbSUyQmplNnZvRCUwQTU4U05WRVVzenR6UXlYbUpFaENwd1ZJMEE2UUNqelhqJTJCcXZwbXczWlpIaThKd1hlaThaWkJMVFNGQmtpOFo3biUwQXNIOUJCSDM4JTJGU3pVbUFONFFIU1B5MWdqcW0wME9BRThOYVlEa2glMkZiekU0ZDdtTEdHTVdwJTJGV0UzS1BTdTgySEYlMEFrUGU2WG9TYmlMbSUyRmt4azMyVDAlM0QlMEEtLS0tLUVORCUyMENFUlRJRklDQVRFLS0tLS0lMEEiLCJ2ZXJpZmljYXRpb24iOnt9fSwibW9kZSI6NDIwfSx7ImZpbGVzeXN0ZW0iOiJyb290IiwicGF0aCI6Ii9ldGMvc3lzdGVtZC9zeXN0ZW0va3ViZWxldC5zZXJ2aWNlIiwiY29udGVudHMiOnsic291cmNlIjoiZGF0YTosJTVCVW5pdCU1RCUwQUFmdGVyJTNEY29udGFpbmVyZC5zZXJ2aWNlJTBBUmVxdWlyZXMlM0Rjb250YWluZXJkLnNlcnZpY2UlMEElMEFEZXNjcmlwdGlvbiUzRGt1YmVsZXQlM0ElMjBUaGUlMjBLdWJlcm5ldGVzJTIwTm9kZSUyMEFnZW50JTBBRG9jdW1lbnRhdGlvbiUzRGh0dHBzJTNBJTJGJTJGa3ViZXJuZXRlcy5pbyUyRmRvY3MlMkZob21lJTJGJTBBJTBBJTVCU2VydmljZSU1RCUwQVJlc3RhcnQlM0RhbHdheXMlMEFTdGFydExpbWl0SW50ZXJ2YWwlM0QwJTBBUmVzdGFydFNlYyUzRDEwJTBBQ1BVQWNjb3VudGluZyUzRHRydWUlMEFNZW1vcnlBY2NvdW50aW5nJTNEdHJ1ZSUwQSUwQUVudmlyb25tZW50JTNEJTIyUEFUSCUzRCUyRm9wdCUyRmJpbiUzQSUyRmJpbiUzQSUyRnVzciUyRmxvY2FsJTJGc2JpbiUzQSUyRnVzciUyRmxvY2FsJTJGYmluJTNBJTJGdXNyJTJGc2JpbiUzQSUyRnVzciUyRmJpbiUzQSUyRnNiaW4lMkYlMjIlMEFFbnZpcm9ubWVudEZpbGUlM0QtJTJGZXRjJTJGZW52aXJvbm1lbnQlMEFFbnZpcm9ubWVudEZpbGUlM0QlMkZldGMlMkZrdWJlcm5ldGVzJTJGbm9kZWlwLmNvbmYlMEElMEFFeGVjU3RhcnRQcmUlM0QlMkZiaW4lMkZiYXNoJTIwJTJGb3B0JTJGbG9hZC1rZXJuZWwtbW9kdWxlcy5zaCUwQUV4ZWNTdGFydFByZSUzRCUyRmJpbiUyRmJhc2glMjAlMkZvcHQlMkZiaW4lMkZzZXR1cF9uZXRfZW52LnNoJTBBRXhlY1N0YXJ0JTNEJTJGb3B0JTJGYmluJTJGa3ViZWxldCUyMCUyNEtVQkVMRVRfRVhUUkFfQVJHUyUyMCU1QyUwQSUyMCUyMC0tYm9vdHN0cmFwLWt1YmVjb25maWclM0QlMkZldGMlMkZrdWJlcm5ldGVzJTJGYm9vdHN0cmFwLWt1YmVsZXQuY29uZiUyMCU1QyUwQSUyMCUyMC0ta3ViZWNvbmZpZyUzRCUyRnZhciUyRmxpYiUyRmt1YmVsZXQlMkZrdWJlY29uZmlnJTIwJTVDJTBBJTIwJTIwLS1jb25maWclM0QlMkZldGMlMkZrdWJlcm5ldGVzJTJGa3ViZWxldC5jb25mJTIwJTVDJTBBJTIwJTIwLS1uZXR3b3JrLXBsdWdpbiUzRGNuaSUyMCU1QyUwQSUyMCUyMC0tY2VydC1kaXIlM0QlMkZldGMlMkZrdWJlcm5ldGVzJTJGcGtpJTIwJTVDJTBBJTIwJTIwLS1jbG91ZC1wcm92aWRlciUzRGF3cyUyMCU1QyUwQSUyMCUyMC0tY2xvdWQtY29uZmlnJTNEJTJGZXRjJTJGa3ViZXJuZXRlcyUyRmNsb3VkLWNvbmZpZyUyMCU1QyUwQSUyMCUyMC0tZHluYW1pYy1jb25maWctZGlyJTNEJTJGZXRjJTJGa3ViZXJuZXRlcyUyRmR5bmFtaWMtY29uZmlnLWRpciUyMCU1QyUwQSUyMCUyMC0tZmVhdHVyZS1nYXRlcyUzRER5bmFtaWNLdWJlbGV0Q29uZmlnJTNEdHJ1ZSUyMCU1QyUwQSUyMCUyMC0tZXhpdC1vbi1sb2NrLWNvbnRlbnRpb24lMjAlNUMlMEElMjAlMjAtLWxvY2stZmlsZSUzRCUyRnRtcCUyRmt1YmVsZXQubG9jayUyMCU1QyUwQSUyMCUyMC0tY29udGFpbmVyLXJ1bnRpbWUlM0RyZW1vdGUlMjAlNUMlMEElMjAlMjAtLWNvbnRhaW5lci1ydW50aW1lLWVuZHBvaW50JTNEdW5peCUzQSUyRiUyRiUyRnJ1biUyRmNvbnRhaW5lcmQlMkZjb250YWluZXJkLnNvY2slMjAlNUMlMEElMjAlMjAtLW5vZGUtaXAlMjAlMjQlN0JLVUJFTEVUX05PREVfSVAlN0QlMEElMEElNUJJbnN0YWxsJTVEJTBBV2FudGVkQnklM0RtdWx0aS11c2VyLnRhcmdldCUwQSIsInZlcmlmaWNhdGlvbiI6e319LCJtb2RlIjo0MjB9LHsiZmlsZXN5c3RlbSI6InJvb3QiLCJwYXRoIjoiL2V0Yy9rdWJlcm5ldGVzL2Nsb3VkLWNvbmZpZyIsImNvbnRlbnRzIjp7InNvdXJjZSI6ImRhdGE6LCU1Qmdsb2JhbCU1RCUwQVpvbmUlM0QlMjIlMjIlMEFWUEMlM0QlMjIlMjIlMEFTdWJuZXRJRCUzRCUyMnRlc3Qtc3VibmV0JTIyJTBBIiwidmVyaWZpY2F0aW9uIjp7fX0sIm1vZGUiOjI1Nn0seyJmaWxlc3lzdGVtIjoicm9vdCIsInBhdGgiOiIvZXRjL2t1YmVybmV0ZXMva3ViZWxldC5jb25mIiwiY29udGVudHMiOnsic291cmNlIjoiZGF0YTosYXBpVmVyc2lvbiUzQSUyMGt1YmVsZXQuY29uZmlnLms4cy5pbyUyRnYxYmV0YTElMEFraW5kJTNBJTIwS3ViZWxldENvbmZpZ3VyYXRpb24lMEFhdXRoZW50aWNhdGlvbiUzQSUwQSUyMCUyMGFub255bW91cyUzQSUwQSUyMCUyMCUyMCUyMGVuYWJsZWQlM0ElMjBmYWxzZSUwQSUyMCUyMHdlYmhvb2slM0ElMEElMjAlMjAlMjAlMjBlbmFibGVkJTNBJTIwdHJ1ZSUwQSUyMCUyMHg1MDklM0ElMEElMjAlMjAlMjAlMjBjbGllbnRDQUZpbGUlM0ElMjAlMkZldGMlMkZrdWJlcm5ldGVzJTJGcGtpJTJGY2EuY3J0JTBBYXV0aG9yaXphdGlvbiUzQSUwQSUyMCUyMG1vZGUlM0ElMjBXZWJob29rJTBBY2dyb3VwRHJpdmVyJTNBJTIwc3lzdGVtZCUwQWNsdXN0ZXJETlMlM0ElMEEtJTIwJTIyMTAuMC4wLjAlMjIlMEFjbHVzdGVyRG9tYWluJTNBJTIwY2x1c3Rlci5sb2NhbCUwQWNvbnRhaW5lckxvZ01heFNpemUlM0ElMjAxMDBNaSUwQWNvbnRhaW5lckxvZ01heEZpbGVzJTNBJTIwNSUwQWZlYXR1cmVHYXRlcyUzQSUwQSUyMCUyMEdyYWNlZnVsTm9kZVNodXRkb3duJTNBJTIwdHJ1ZSUwQSUyMCUyMElkZW50aWZ5UG9kT1MlM0ElMjBmYWxzZSUwQXByb3RlY3RLZXJuZWxEZWZhdWx0cyUzQSUyMHRydWUlMEFyZWFkT25seVBvcnQlM0ElMjAwJTBBcm90YXRlQ2VydGlmaWNhdGVzJTNBJTIwdHJ1ZSUwQXNlcnZlclRMU0Jvb3RzdHJhcCUzQSUyMHRydWUlMEFzdGF0aWNQb2RQYXRoJTNBJTIwJTJGZXRjJTJGa3ViZXJuZXRlcyUyRm1hbmlmZXN0cyUwQWt1YmVSZXNlcnZlZCUzQSUwQSUyMCUyMGNwdSUzQSUyMDIwMG0lMEElMjAlMjBlcGhlbWVyYWwtc3RvcmFnZSUzQSUyMDFHaSUwQSUyMCUyMG1lbW9yeSUzQSUyMDIwME1pJTBBc3lzdGVtUmVzZXJ2ZWQlM0ElMEElMjAlMjBjcHUlM0ElMjAyMDBtJTBBJTIwJTIwZXBoZW1lcmFsLXN0b3JhZ2UlM0ElMjAxR2klMEElMjAlMjBtZW1vcnklM0ElMjAyMDBNaSUwQWV2aWN0aW9uSGFyZCUzQSUwQSUyMCUyMGltYWdlZnMuYXZhaWxhYmxlJTNBJTIwMTUlMjUlMEElMjAlMjBtZW1vcnkuYXZhaWxhYmxlJTNBJTIwMTAwTWklMEElMjAlMjBub2RlZnMuYXZhaWxhYmxlJTNBJTIwMTAlMjUlMEElMjAlMjBub2RlZnMuaW5vZGVzRnJlZSUzQSUyMDUlMjUlMEF0bHNDaXBoZXJTdWl0ZXMlM0ElMEEtJTIwVExTX0FFU18xMjhfR0NNX1NIQTI1NiUwQS0lMjBUTFNfQUVTXzI1Nl9HQ01fU0hBMzg0JTBBLSUyMFRMU19DSEFDSEEyMF9QT0xZMTMwNV9TSEEyNTYlMEEtJTIwVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2JTBBLSUyMFRMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NCUwQS0lMjBUTFNfRUNESEVfRUNEU0FfV0lUSF9DSEFDSEEyMF9QT0xZMTMwNSUwQS0lMjBUTFNfRUNESEVfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2JTBBLSUyMFRMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQlMEEtJTIwVExTX0VDREhFX1JTQV9XSVRIX0NIQUNIQTIwX1BPTFkxMzA1JTBBdm9sdW1lUGx1Z2luRGlyJTNBJTIwJTJGdmFyJTJGbGliJTJGa3ViZWxldCUyRnZvbHVtZXBsdWdpbnMlMEEiLCJ2ZXJpZmljYXRpb24iOnt9fSwibW9kZSI6NDIwfSx7ImZpbGVzeXN0ZW0iOiJyb290IiwicGF0aCI6Ii9ldGMvc3lzdGVtZC9zeXN0ZW0va3ViZWxldC1oZWFsdGhjaGVjay5zZXJ2aWNlIiwiY29udGVudHMiOnsic291cmNlIjoiZGF0YTosJTVCVW5pdCU1RCUwQVJlcXVpcmVzJTNEa3ViZWxldC5zZXJ2aWNlJTBBQWZ0ZXIlM0RrdWJlbGV0LnNlcnZpY2UlMEElMEElNUJTZXJ2aWNlJTVEJTBBRXhlY1N0YXJ0JTNEJTJGb3B0JTJGYmluJTJGaGVhbHRoLW1vbml0b3Iuc2glMjBrdWJlbGV0JTBBJTBBJTVCSW5zdGFsbCU1RCUwQVdhbnRlZEJ5JTNEbXVsdGktdXNlci50YXJnZXQlMEEiLCJ2ZXJpZmljYXRpb24iOnt9fSwibW9kZSI6NDIwfSx7ImZpbGVzeXN0ZW0iOiJyb290IiwicGF0aCI6Ii9wcm9jL3N5cy9rZXJuZWwvcGFuaWNfb25fb29wcyIsImNvbnRlbnRzIjp7InNvdXJjZSI6ImRhdGE6LDElMEEiLCJ2ZXJpZmljYXRpb24iOnt9fSwibW9kZSI6NDIwfSx7ImZpbGVzeXN0ZW0iOiJyb290IiwicGF0aCI6Ii9wcm9jL3N5cy9rZXJuZWwvcGFuaWMiLCJjb250ZW50cyI6eyJzb3VyY2UiOiJkYXRhOiwxMCUwQSIsInZlcmlmaWNhdGlvbiI6e319LCJtb2RlIjo0MjB9LHsiZmlsZXN5c3RlbSI6InJvb3QiLCJwYXRoIjoiL3Byb2Mvc3lzL3ZtL292ZXJjb21taXRfbWVtb3J5IiwiY29udGVudHMiOnsic291cmNlIjoiZGF0YTosMSUwQSIsInZlcmlmaWNhdGlvbiI6e319LCJtb2RlIjo0MjB9LHsiZmlsZXN5c3RlbSI6InJvb3QiLCJwYXRoIjoiL2V0Yy9zc2gvc3NoZF9jb25maWciLCJjb250ZW50cyI6eyJzb3VyY2UiOiJkYXRhOiwlMjMlMjBVc2UlMjBtb3N0JTIwZGVmYXVsdHMlMjBmb3IlMjBzc2hkJTIwY29uZmlndXJhdGlvbi4lMEFTdWJzeXN0ZW0lMjBzZnRwJTIwaW50ZXJuYWwtc2Z0cCUwQUNsaWVudEFsaXZlSW50ZXJ2YWwlMjAxODAlMEFVc2VETlMlMjBubyUwQVVzZVBBTSUyMHllcyUwQVByaW50TGFzdExvZyUyMG5vJTIwJTIzJTIwaGFuZGxlZCUyMGJ5JTIwUEFNJTBBUHJpbnRNb3RkJTIwbm8lMjAlMjMlMjBoYW5kbGVkJTIwYnklMjBQQU0lMEFQYXNzd29yZEF1dGhlbnRpY2F0aW9uJTIwbm8lMEFDaGFsbGVuZ2VSZXNwb25zZUF1dGhlbnRpY2F0aW9uJTIwbm8lMEEiLCJ2ZXJpZmljYXRpb24iOnt9fSwibW9kZSI6Mzg0fSx7ImZpbGVzeXN0ZW0iOiJyb290IiwicGF0aCI6Ii9ldGMvY29udGFpbmVyZC9jb25maWcudG9tbCIsImNvbnRlbnRzIjp7InNvdXJjZSI6ImRhdGE6LHZlcnNpb24lMjAlM0QlMjAyJTBBJTBBJTVCbWV0cmljcyU1RCUwQWFkZHJlc3MlMjAlM0QlMjAlMjIxMjcuMC4wLjElM0ExMzM4JTIyJTBBJTBBJTVCcGx1Z2lucyU1RCUwQSU1QnBsdWdpbnMuJTIyaW8uY29udGFpbmVyZC5ncnBjLnYxLmNyaSUyMiU1RCUwQXNhbmRib3hfaW1hZ2UlMjAlM0QlMjAlMjIxOTIuMTY4LjEwMC4xMDAlM0E1MDAwJTJGa3ViZXJuZXRlcyUyRnBhdXNlJTNBdjMuMSUyMiUwQSU1QnBsdWdpbnMuJTIyaW8uY29udGFpbmVyZC5ncnBjLnYxLmNyaSUyMi5jb250YWluZXJkJTVEJTBBJTVCcGx1Z2lucy4lMjJpby5jb250YWluZXJkLmdycGMudjEuY3JpJTIyLmNvbnRhaW5lcmQucnVudGltZXMlNUQlMEElNUJwbHVnaW5zLiUyMmlvLmNvbnRhaW5lcmQuZ3JwYy52MS5jcmklMjIuY29udGFpbmVyZC5ydW50aW1lcy5ydW5jJTVEJTBBcnVudGltZV90eXBlJTIwJTNEJTIwJTIyaW8uY29udGFpbmVyZC5ydW5jLnYyJTIyJTBBJTVCcGx1Z2lucy4lMjJpby5jb250YWluZXJkLmdycGMudjEuY3JpJTIyLmNvbnRhaW5lcmQucnVudGltZXMucnVuYy5vcHRpb25zJTVEJTBBU3lzdGVtZENncm91cCUyMCUzRCUyMHRydWUlMEElNUJwbHVnaW5zLiUyMmlvLmNvbnRhaW5lcmQuZ3JwYy52MS5jcmklMjIucmVnaXN0cnklNUQlMEElNUJwbHVnaW5zLiUyMmlvLmNvbnRhaW5lcmQuZ3JwYy52MS5jcmklMjIucmVnaXN0cnkubWlycm9ycyU1RCUwQSU1QnBsdWdpbnMuJTIyaW8uY29udGFpbmVyZC5ncnBjLnYxLmNyaSUyMi5yZWdpc3RyeS5taXJyb3JzLiUyMmRvY2tlci5pbyUyMiU1RCUwQWVuZHBvaW50JTIwJTNEJTIwJTVCJTIyaHR0cHMlM0ElMkYlMkZyZWdpc3RyeS5kb2NrZXItY24uY29tJTIyJTVEJTBBJTVCcGx1Z2lucy4lMjJpby5jb250YWluZXJkLmdycGMudjEuY3JpJTIyLnJlZ2lzdHJ5LmNvbmZpZ3MlNUQlMEElNUJwbHVnaW5zLiUyMmlvLmNvbnRhaW5lcmQuZ3JwYy52MS5jcmklMjIucmVnaXN0cnkuY29uZmlncy4lMjIxMC4wLjAuMSUzQTUwMDAlMjIlNUQlMEElNUJwbHVnaW5zLiUyMmlvLmNvbnRhaW5lcmQuZ3JwYy52MS5jcmklMjIucmVnaXN0cnkuY29uZmlncy4lMjIxMC4wLjAuMSUzQTUwMDAlMjIudGxzJTVEJTBBaW5zZWN1cmVfc2tpcF92ZXJpZnklMjAlM0QlMjB0cnVlJTBBJTVCcGx1Z2lucy4lMjJpby5jb250YWluZXJkLmdycGMudjEuY3JpJTIyLnJlZ2lzdHJ5LmNvbmZpZ3MuJTIyMTkyLjE2OC4xMDAuMTAwJTNBNTAwMCUyMiU1RCUwQSU1QnBsdWdpbnMuJTIyaW8uY29udGFpbmVyZC5ncnBjLnYxLmNyaSUyMi5yZWdpc3RyeS5jb25maWdzLiUyMjE5Mi4xNjguMTAwLjEwMCUzQTUwMDAlMjIudGxzJTVEJTBBaW5zZWN1cmVfc2tpcF92ZXJpZnklMjAlM0QlMjB0cnVlJTBBIiwidmVyaWZpY2F0aW9uIjp7fX0sIm1vZGUiOjQyMH0seyJmaWxlc3lzdGVtIjoicm9vdCIsInBhdGgiOiIvZXRjL3N5c3RlbWQvc3lzdGVtL2NvbnRhaW5lcmQuc2VydmljZS5kLzEwLWN1c3RvbS5jb25mIiwiY29udGVudHMiOnsic291cmNlIjoiZGF0YTosJTVCU2VydmljZSU1RCUwQVJlc3RhcnQlM0RhbHdheXMlMEFFbnZpcm9ubWVudEZpbGUlM0QtJTJGZXRjJTJGZW52aXJvbm1lbnQlMEFFbnZpcm9ubWVudEZpbGUlM0QlMkZydW4lMkZtZXRhZGF0YSUyRnRvcmN4JTBBRW52aXJvbm1lbnQlM0RDT05UQUlORVJEX0NPTkZJRyUzRCUyRmV0YyUyRmNvbnRhaW5lcmQlMkZjb25maWcudG9tbCUwQUV4ZWNTdGFydCUzRCUwQUV4ZWNTdGFydCUzRCUyRnVzciUyRmJpbiUyRmVudiUyMFBBVEglM0QlMjQlN0JUT1JDWF9CSU5ESVIlN0QlM0ElMjQlN0JQQVRIJTdEJTIwJTI0JTdCVE9SQ1hfQklORElSJTdEJTJGY29udGFpbmVyZCUyMC0tY29uZmlnJTIwJTI0JTdCQ09OVEFJTkVSRF9DT05GSUclN0QlMEEiLCJ2ZXJpZmljYXRpb24iOnt9fSwibW9kZSI6NDIwfSx7ImZpbGVzeXN0ZW0iOiJyb290IiwicGF0aCI6Ii9ldGMvY3JpY3RsLnlhbWwiLCJjb250ZW50cyI6eyJzb3VyY2UiOiJkYXRhOixydW50aW1lLWVuZHBvaW50JTNBJTIwdW5peCUzQSUyRiUyRiUyRnJ1biUyRmNvbnRhaW5lcmQlMkZjb250YWluZXJkLnNvY2slMEEiLCJ2ZXJpZmljYXRpb24iOnt9fSwibW9kZSI6NDIwfV19LCJzeXN0ZW1kIjp7InVuaXRzIjpbeyJjb250ZW50cyI6IltJbnN0YWxsXVxuV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXRcblxuW1VuaXRdXG5SZXF1aXJlcz1kb3dubG9hZC1zY3JpcHQuc2VydmljZVxuUmVxdWlyZXM9bm9kZWlwLnNlcnZpY2VcbkFmdGVyPWRvd25sb2FkLXNjcmlwdC5zZXJ2aWNlXG5BZnRlcj1ub2RlaXAuc2VydmljZVxuXG5bU2VydmljZV1cblR5cGU9b25lc2hvdFxuUmVtYWluQWZ0ZXJFeGl0PXRydWVcbkVudmlyb25tZW50RmlsZT0tL2V0Yy9lbnZpcm9ubWVudFxuRXhlY1N0YXJ0PS9vcHQvYmluL3NldHVwXG4iLCJlbmFibGVkIjp0cnVlLCJuYW1lIjoic2V0dXAuc2VydmljZSJ9LHsiY29udGVudHMiOiJbSW5zdGFsbF1cbldhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0XG5cbltVbml0XVxuUmVxdWlyZXM9bmV0d29yay1vbmxpbmUudGFyZ2V0XG5BZnRlcj1uZXR3b3JrLW9ubGluZS50YXJnZXRcblxuW1NlcnZpY2VdXG5UeXBlPW9uZXNob3RcblJlbWFpbkFmdGVyRXhpdD10cnVlXG5FbnZpcm9ubWVudEZpbGU9LS9ldGMvZW52aXJvbm1lbnRcbkV4ZWNTdGFydD0vb3B0L2Jpbi9kb3dubG9hZC5zaFxuIiwiZW5hYmxlZCI6dHJ1ZSwibmFtZSI6ImRvd25sb2FkLXNjcmlwdC5zZXJ2aWNlIn0seyJjb250ZW50cyI6IltVbml0XVxuRGVzY3JpcHRpb249U2V0dXAgS3ViZWxldCBOb2RlIElQIEVudlxuUmVxdWlyZXM9bmV0d29yay1vbmxpbmUudGFyZ2V0XG5BZnRlcj1uZXR3b3JrLW9ubGluZS50YXJnZXRcblxuW1NlcnZpY2VdXG5FeGVjU3RhcnQ9L29wdC9iaW4vc2V0dXBfbmV0X2Vudi5zaFxuUmVtYWluQWZ0ZXJFeGl0PXllc1xuVHlwZT1vbmVzaG90XG5bSW5zdGFsbF1cbldhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0XG4iLCJlbmFibGVkIjp0cnVlLCJuYW1lIjoibm9kZWlwLnNlcnZpY2UifSx7ImNvbnRlbnRzIjoiW1VuaXRdXG5EZXNjcmlwdGlvbj1TZXR1cCBTdGF0aWMgTmV0d29ya2luZ1xuUmVxdWlyZXM9bmV0d29yay1vbmxpbmUudGFyZ2V0XG5BZnRlcj1uZXR3b3JrLW9ubGluZS50YXJnZXRcblxuW1NlcnZpY2VdXG5FeGVjU3RhcnQ9L29wdC9iaW4vY29uZmlndXJlX3N0YXRpY19uZXR3b3JrLnNoXG5SZW1haW5BZnRlckV4aXQ9eWVzXG5UeXBlPW9uZXNob3RcbltJbnN0YWxsXVxuV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXRcbiIsImVuYWJsZWQiOnRydWUsIm5hbWUiOiJzdGF0aWMtbmV0d29yay1zY3JpcHQuc2VydmljZSJ9XX19 immutable: true kind: Secret metadata: creationTimestamp: null - name: flatcar-aws-containerd-osc-provisioning + name: flatcar-aws-containerd-kube-system-osc-provisioning namespace: cloud-init-settings resourceVersion: "1" +type: Opaque diff --git a/pkg/controllers/osc/testdata/secret-flatcar-aws-docker.yaml b/pkg/controllers/osc/testdata/secret-flatcar-aws-docker.yaml index 185684f1..d7b25f56 100644 --- a/pkg/controllers/osc/testdata/secret-flatcar-aws-docker.yaml +++ b/pkg/controllers/osc/testdata/secret-flatcar-aws-docker.yaml @@ -1,10 +1,11 @@ apiVersion: v1 data: - cloud-config: eyJpZ25pdGlvbiI6eyJjb25maWciOnt9LCJzZWN1cml0eSI6eyJ0bHMiOnt9fSwidGltZW91dHMiOnt9LCJ2ZXJzaW9uIjoiMi4zLjAifSwibmV0d29ya2QiOnt9LCJwYXNzd2QiOnsidXNlcnMiOlt7Im5hbWUiOiJjb3JlIiwic3NoQXV0aG9yaXplZEtleXMiOlsic3NoLXJzYSBBQUFBQjNOemFDMXljMkVBQUFBREFRQUJBQUFDQVFEZE9JaFltekNLNURTVkx1M2MiXX1dfSwic3RvcmFnZSI6eyJmaWxlcyI6W3siZmlsZXN5c3RlbSI6InJvb3QiLCJwYXRoIjoiL2V0Yy9zeXN0ZW1kL2pvdXJuYWxkLmNvbmYuZC9tYXhfZGlza191c2UuY29uZiIsImNvbnRlbnRzIjp7InNvdXJjZSI6ImRhdGE6LCU1QkpvdXJuYWwlNUQlMEFTeXN0ZW1NYXhVc2UlM0Q1RyUwQSIsInZlcmlmaWNhdGlvbiI6e319LCJtb2RlIjo0MjB9LHsiZmlsZXN5c3RlbSI6InJvb3QiLCJwYXRoIjoiL29wdC9sb2FkLWtlcm5lbC1tb2R1bGVzLnNoIiwiY29udGVudHMiOnsic291cmNlIjoiZGF0YTosJTIzISUyRnVzciUyRmJpbiUyRmVudiUyMGJhc2glMEFzZXQlMjAtZXVvJTIwcGlwZWZhaWwlMEElMEFtb2Rwcm9iZSUyMGlwX3ZzJTBBbW9kcHJvYmUlMjBpcF92c19yciUwQW1vZHByb2JlJTIwaXBfdnNfd3JyJTBBbW9kcHJvYmUlMjBpcF92c19zaCUwQSUwQWlmJTIwbW9kaW5mbyUyMG5mX2Nvbm50cmFja19pcHY0JTIwJTI2JTNFJTIwJTJGZGV2JTJGbnVsbCUzQiUyMHRoZW4lMEElMjAlMjBtb2Rwcm9iZSUyMG5mX2Nvbm50cmFja19pcHY0JTBBZWxzZSUwQSUyMCUyMG1vZHByb2JlJTIwbmZfY29ubnRyYWNrJTBBZmklMEEiLCJ2ZXJpZmljYXRpb24iOnt9fSwibW9kZSI6NDkzfSx7ImZpbGVzeXN0ZW0iOiJyb290IiwicGF0aCI6Ii9ldGMvc3lzY3RsLmQvazhzLmNvbmYiLCJjb250ZW50cyI6eyJzb3VyY2UiOiJkYXRhOixuZXQuYnJpZGdlLmJyaWRnZS1uZi1jYWxsLWlwNnRhYmxlcyUyMCUzRCUyMDElMEFuZXQuYnJpZGdlLmJyaWRnZS1uZi1jYWxsLWlwdGFibGVzJTIwJTNEJTIwMSUwQWtlcm5lbC5wYW5pY19vbl9vb3BzJTIwJTNEJTIwMSUwQWtlcm5lbC5wYW5pYyUyMCUzRCUyMDEwJTBBbmV0LmlwdjQuaXBfZm9yd2FyZCUyMCUzRCUyMDElMEF2bS5vdmVyY29tbWl0X21lbW9yeSUyMCUzRCUyMDElMEFmcy5pbm90aWZ5Lm1heF91c2VyX3dhdGNoZXMlMjAlM0QlMjAxMDQ4NTc2JTBBIiwidmVyaWZpY2F0aW9uIjp7fX0sIm1vZGUiOjQyMH0seyJmaWxlc3lzdGVtIjoicm9vdCIsInBhdGgiOiIvb3B0L2Jpbi9zZXR1cF9uZXRfZW52LnNoIiwiY29udGVudHMiOnsic291cmNlIjoiZGF0YTosJTIzISUyRnVzciUyRmJpbiUyRmVudiUyMGJhc2glMEFlY2hvZGF0ZSgpJTIwJTdCJTBBJTIwJTIwZWNobyUyMCUyMiU1QiUyNChkYXRlJTIwLUlzKSU1RCUyMiUyMCUyMiUyNCU0MCUyMiUwQSU3RCUwQSUwQSUyMyUyMGdldCUyMHRoZSUyMGRlZmF1bHQlMjBpbnRlcmZhY2UlMjBJUCUyMGFkZHJlc3MlMEFERUZBVUxUX0lGQ19JUCUzRCUyNChpcCUyMC1vJTIwJTIwcm91dGUlMjBnZXQlMjAxJTIwJTdDJTIwZ3JlcCUyMC1vUCUyMCUyMnNyYyUyMCU1Q0slNUNTJTJCJTIyKSUwQSUwQWlmJTIwJTVCJTIwLXolMjAlMjIlMjQlN0JERUZBVUxUX0lGQ19JUCU3RCUyMiUyMCU1RCUwQXRoZW4lMEElMjAlMjBlY2hvZGF0ZSUyMCUyMkZhaWxlZCUyMHRvJTIwZ2V0JTIwSVAlMjBhZGRyZXNzJTIwZm9yJTIwdGhlJTIwZGVmYXVsdCUyMHJvdXRlJTIwaW50ZXJmYWNlJTIyJTBBJTIwJTIwZXhpdCUyMDElMEFmaSUwQSUwQSUyMyUyMGdldCUyMHRoZSUyMGZ1bGwlMjBob3N0bmFtZSUwQUZVTExfSE9TVE5BTUUlM0QlMjQoaG9zdG5hbWUlMjAtZiklMEElMjMlMjBpZiUyMCUyRmV0YyUyRmhvc3RuYW1lJTIwaXMlMjBub3QlMjBlbXB0eSUyMHRoZW4lMjB1c2UlMjB0aGUlMjBob3N0bmFtZSUyMGZyb20lMjB0aGVyZSUwQWlmJTIwJTVCJTIwLXMlMjAlMkZldGMlMkZob3N0bmFtZSUyMCU1RCUzQiUyMHRoZW4lMEElMjAlMjAlMjAlMjBGVUxMX0hPU1ROQU1FJTNEJTI0KGNhdCUyMCUyRmV0YyUyRmhvc3RuYW1lKSUwQWZpJTBBJTBBJTIzJTIwd3JpdGUlMjB0aGUlMjBub2RlaXBfZW52JTIwZmlsZSUwQSUyMyUyMHdlJTIwbmVlZCUyMHRoZSUyMGxpbmUlMjBiZWxvdyUyMGJlY2F1c2UlMjBmbGF0Y2FyJTIwaGFzJTIwdGhlJTIwc2FtZSUyMHN0cmluZyUyMCUyMmNvcmVvcyUyMiUyMGluJTIwdGhhdCUyMGZpbGUlMEFpZiUyMGdyZXAlMjAtcSUyMGNvcmVvcyUyMCUyRmV0YyUyRm9zLXJlbGVhc2UlMEF0aGVuJTBBJTIwJTIwZWNobyUyMC1lJTIwJTIyS1VCRUxFVF9OT0RFX0lQJTNEJTI0JTdCREVGQVVMVF9JRkNfSVAlN0QlNUNuS1VCRUxFVF9IT1NUTkFNRSUzRCUyNCU3QkZVTExfSE9TVE5BTUUlN0QlMjIlMjAlM0UlMjAlMkZldGMlMkZrdWJlcm5ldGVzJTJGbm9kZWlwLmNvbmYlMEFlbGlmJTIwJTVCJTIwISUyMC1kJTIwJTJGZXRjJTJGc3lzdGVtZCUyRnN5c3RlbSUyRmt1YmVsZXQuc2VydmljZS5kJTIwJTVEJTBBdGhlbiUwQSUyMCUyMGVjaG9kYXRlJTIwJTIyQ2FuJ3QlMjBmaW5kJTIwa3ViZWxldCUyMHNlcnZpY2UlMjBleHRyYXMlMjBkaXJlY3RvcnklMjIlMEElMjAlMjBleGl0JTIwMSUwQWVsc2UlMEElMjAlMjBlY2hvJTIwLWUlMjAlMjIlNUJTZXJ2aWNlJTVEJTVDbkVudmlyb25tZW50JTNEJTVDJTIyS1VCRUxFVF9OT0RFX0lQJTNEJTI0JTdCREVGQVVMVF9JRkNfSVAlN0QlNUMlMjIlNUNuRW52aXJvbm1lbnQlM0QlNUMlMjJLVUJFTEVUX0hPU1ROQU1FJTNEJTI0JTdCRlVMTF9IT1NUTkFNRSU3RCU1QyUyMiUyMiUyMCUzRSUyMCUyRmV0YyUyRnN5c3RlbWQlMkZzeXN0ZW0lMkZrdWJlbGV0LnNlcnZpY2UuZCUyRm5vZGVpcC5jb25mJTBBZmklMEEiLCJ2ZXJpZmljYXRpb24iOnt9fSwibW9kZSI6NDkzfSx7ImZpbGVzeXN0ZW0iOiJyb290IiwicGF0aCI6Ii9vcHQvYmluL2NvbmZpZ3VyZV9zdGF0aWNfbmV0d29yay5zaCIsImNvbnRlbnRzIjp7InNvdXJjZSI6ImRhdGE6LCUyMyElMkZ1c3IlMkZiaW4lMkZlbnYlMjBiYXNoJTBBc2V0JTIwLXhldW8lMjBwaXBlZmFpbCUwQSIsInZlcmlmaWNhdGlvbiI6e319LCJtb2RlIjo0OTN9LHsiZmlsZXN5c3RlbSI6InJvb3QiLCJwYXRoIjoiL29wdC9iaW4vZG93bmxvYWQuc2giLCJjb250ZW50cyI6eyJzb3VyY2UiOiJkYXRhOiwlMjMhJTJGdXNyJTJGYmluJTJGZW52JTIwYmFzaCUwQXNldCUyMC14ZXVvJTIwcGlwZWZhaWwlMEFvcHRfYmluJTNEJTJGb3B0JTJGYmluJTBBdXNyX2xvY2FsX2JpbiUzRCUyRnVzciUyRmxvY2FsJTJGYmluJTBBY25pX2Jpbl9kaXIlM0QlMkZvcHQlMkZjbmklMkZiaW4lMEFta2RpciUyMC1wJTIwJTJGZXRjJTJGY25pJTJGbmV0LmQlMjAlMkZldGMlMkZrdWJlcm5ldGVzJTJGZHluYW1pYy1jb25maWctZGlyJTIwJTJGZXRjJTJGa3ViZXJuZXRlcyUyRm1hbmlmZXN0cyUyMCUyMiUyNG9wdF9iaW4lMjIlMjAlMjIlMjRjbmlfYmluX2RpciUyMiUwQWFyY2glM0QlMjQlN0JIT1NUX0FSQ0gtJTdEJTBBaWYlMjAlNUIlMjAteiUyMCUyMiUyNGFyY2glMjIlMjAlNUQlMEF0aGVuJTBBY2FzZSUyMCUyNCh1bmFtZSUyMC1tKSUyMGluJTBBeDg2XzY0KSUwQSUyMCUyMCUyMCUyMGFyY2glM0QlMjJhbWQ2NCUyMiUwQSUyMCUyMCUyMCUyMCUzQiUzQiUwQWFhcmNoNjQpJTBBJTIwJTIwJTIwJTIwYXJjaCUzRCUyMmFybTY0JTIyJTBBJTIwJTIwJTIwJTIwJTNCJTNCJTBBKiklMEElMjAlMjAlMjAlMjBlY2hvJTIwJTIydW5zdXBwb3J0ZWQlMjBDUFUlMjBhcmNoaXRlY3R1cmUlMkMlMjBleGl0aW5nJTIyJTBBJTIwJTIwJTIwJTIwZXhpdCUyMDElMEElMjAlMjAlMjAlMjAlM0IlM0IlMEFlc2FjJTBBZmklMEFDTklfVkVSU0lPTiUzRCUyMiUyNCU3QkNOSV9WRVJTSU9OJTNBLXYwLjguNyU3RCUyMiUwQWNuaV9iYXNlX3VybCUzRCUyMmh0dHBzJTNBJTJGJTJGZ2l0aHViLmNvbSUyRmNvbnRhaW5lcm5ldHdvcmtpbmclMkZwbHVnaW5zJTJGcmVsZWFzZXMlMkZkb3dubG9hZCUyRiUyNENOSV9WRVJTSU9OJTIyJTBBY25pX2ZpbGVuYW1lJTNEJTIyY25pLXBsdWdpbnMtbGludXgtJTI0YXJjaC0lMjRDTklfVkVSU0lPTi50Z3olMjIlMEFjdXJsJTIwLUxmbyUyMCUyMiUyNGNuaV9iaW5fZGlyJTJGJTI0Y25pX2ZpbGVuYW1lJTIyJTIwJTIyJTI0Y25pX2Jhc2VfdXJsJTJGJTI0Y25pX2ZpbGVuYW1lJTIyJTBBY25pX3N1bSUzRCUyNChjdXJsJTIwLUxmJTIwJTIyJTI0Y25pX2Jhc2VfdXJsJTJGJTI0Y25pX2ZpbGVuYW1lLnNoYTI1NiUyMiklMEFjZCUyMCUyMiUyNGNuaV9iaW5fZGlyJTIyJTBBc2hhMjU2c3VtJTIwLWMlMjAlM0MlM0MlM0MlMjIlMjRjbmlfc3VtJTIyJTBBdGFyJTIweHZmJTIwJTIyJTI0Y25pX2ZpbGVuYW1lJTIyJTBBcm0lMjAtZiUyMCUyMiUyNGNuaV9maWxlbmFtZSUyMiUwQWNkJTIwLSUwQUtVQkVfVkVSU0lPTiUzRCUyMiUyNCU3QktVQkVfVkVSU0lPTiUzQS12MS4yMi4xJTdEJTIyJTBBa3ViZV9kaXIlM0QlMjIlMjRvcHRfYmluJTJGa3ViZXJuZXRlcy0lMjRLVUJFX1ZFUlNJT04lMjIlMEFrdWJlX2Jhc2VfdXJsJTNEJTIyaHR0cHMlM0ElMkYlMkZzdG9yYWdlLmdvb2dsZWFwaXMuY29tJTJGa3ViZXJuZXRlcy1yZWxlYXNlJTJGcmVsZWFzZSUyRiUyNEtVQkVfVkVSU0lPTiUyRmJpbiUyRmxpbnV4JTJGJTI0YXJjaCUyMiUwQWt1YmVfc3VtX2ZpbGUlM0QlMjIlMjRrdWJlX2RpciUyRnNoYTI1NiUyMiUwQW1rZGlyJTIwLXAlMjAlMjIlMjRrdWJlX2RpciUyMiUwQSUzQSUyMCUzRSUyMiUyNGt1YmVfc3VtX2ZpbGUlMjIlMEElMEFmb3IlMjBiaW4lMjBpbiUyMGt1YmVsZXQlMjBrdWJlYWRtJTIwa3ViZWN0bCUzQiUyMGRvJTBBJTIwJTIwJTIwJTIwY3VybCUyMC1MZm8lMjAlMjIlMjRrdWJlX2RpciUyRiUyNGJpbiUyMiUyMCUyMiUyNGt1YmVfYmFzZV91cmwlMkYlMjRiaW4lMjIlMEElMjAlMjAlMjAlMjBjaG1vZCUyMCUyQnglMjAlMjIlMjRrdWJlX2RpciUyRiUyNGJpbiUyMiUwQSUyMCUyMCUyMCUyMHN1bSUzRCUyNChjdXJsJTIwLUxmJTIwJTIyJTI0a3ViZV9iYXNlX3VybCUyRiUyNGJpbi5zaGEyNTYlMjIpJTBBJTIwJTIwJTIwJTIwZWNobyUyMCUyMiUyNHN1bSUyMCUyMCUyNGt1YmVfZGlyJTJGJTI0YmluJTIyJTIwJTNFJTNFJTIyJTI0a3ViZV9zdW1fZmlsZSUyMiUwQWRvbmUlMEFzaGEyNTZzdW0lMjAtYyUyMCUyMiUyNGt1YmVfc3VtX2ZpbGUlMjIlMEElMEFmb3IlMjBiaW4lMjBpbiUyMGt1YmVsZXQlMjBrdWJlYWRtJTIwa3ViZWN0bCUzQiUyMGRvJTBBJTIwJTIwJTIwJTIwbG4lMjAtc2YlMjAlMjIlMjRrdWJlX2RpciUyRiUyNGJpbiUyMiUyMCUyMiUyNG9wdF9iaW4lMjIlMkYlMjRiaW4lMEFkb25lJTBBJTBBaWYlMjAlNUIlNUIlMjAhJTIwLXglMjAlMkZvcHQlMkZiaW4lMkZoZWFsdGgtbW9uaXRvci5zaCUyMCU1RCU1RCUzQiUyMHRoZW4lMEElMjAlMjAlMjAlMjBjdXJsJTIwLUxmbyUyMCUyRm9wdCUyRmJpbiUyRmhlYWx0aC1tb25pdG9yLnNoJTIwaHR0cHMlM0ElMkYlMkZyYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tJTJGa3ViZXJtYXRpYyUyRm1hY2hpbmUtY29udHJvbGxlciUyRjc5NjdhMGFmMmI3NWYyOWFkMmFiMjI3ZWVhYTI2ZWE3YjBmMmZiZGUlMkZwa2clMkZ1c2VyZGF0YSUyRnNjcmlwdHMlMkZoZWFsdGgtbW9uaXRvci5zaCUwQSUyMCUyMCUyMCUyMGNobW9kJTIwJTJCeCUyMCUyRm9wdCUyRmJpbiUyRmhlYWx0aC1tb25pdG9yLnNoJTBBZmklMEElMEFzeXN0ZW1jdGwlMjBkaXNhYmxlJTIwZG93bmxvYWQtc2NyaXB0LnNlcnZpY2UlMEEiLCJ2ZXJpZmljYXRpb24iOnt9fSwibW9kZSI6NDkzfSx7ImZpbGVzeXN0ZW0iOiJyb290IiwicGF0aCI6Ii9vcHQvYmluL3NldHVwIiwiY29udGVudHMiOnsic291cmNlIjoiZGF0YTosJTIzISUyRmJpbiUyRmJhc2glMEFzZXQlMjAteGV1byUyMHBpcGVmYWlsJTBBY2F0JTIwJTNDJTNDJTIwRU9GJTIwJTdDJTIwdGVlJTIwJTJGZXRjJTJGcG9sa2l0LTElMkZydWxlcy5kJTJGNjAtbm9yZWJvb3Rfbm9yZXN0YXJ0LnJ1bGVzJTBBcG9sa2l0LmFkZFJ1bGUoZnVuY3Rpb24oYWN0aW9uJTJDJTIwc3ViamVjdCklMjAlN0IlMEElMjAlMjBpZiUyMChhY3Rpb24uaWQlMjAlM0QlM0QlMjAlMjJvcmcuZnJlZWRlc2t0b3AubG9naW4xLnJlYm9vdCUyMiUyMCU3QyU3QyUwQSUyMCUyMCUyMCUyMCUyMCUyMGFjdGlvbi5pZCUyMCUzRCUzRCUyMCUyMm9yZy5mcmVlZGVza3RvcC5sb2dpbjEucmVib290LW11bHRpcGxlLXNlc3Npb25zJTIyKSUyMCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMGlmJTIwKHN1YmplY3QudXNlciUyMCUzRCUzRCUyMCUyMmNvcmUlMjIpJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcmV0dXJuJTIwcG9sa2l0LlJlc3VsdC5ZRVMlM0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlN0QlMjBlbHNlJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcmV0dXJuJTIwcG9sa2l0LlJlc3VsdC5BVVRIX0FETUlOJTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTdEJTBBJTIwJTIwJTdEJTBBJTdEKSUzQiUwQUVPRiUwQXN5c3RlbWN0bCUyMHN0b3AlMjBjb250YWluZXJkJTBBc3lzdGVtY3RsJTIwZGlzYWJsZSUyMGNvbnRhaW5lcmQlMEElMEFzeXN0ZW1jdGwlMjBlbmFibGUlMjAtLW5vdyUyMGt1YmVsZXQlMEFzeXN0ZW1jdGwlMjBlbmFibGUlMjAtLW5vdyUyMC0tbm8tYmxvY2slMjBrdWJlbGV0LWhlYWx0aGNoZWNrLnNlcnZpY2UlMEFzeXN0ZW1jdGwlMjBkaXNhYmxlJTIwc2V0dXAuc2VydmljZSUwQSIsInZlcmlmaWNhdGlvbiI6e319LCJtb2RlIjo0OTN9LHsiZmlsZXN5c3RlbSI6InJvb3QiLCJwYXRoIjoiL2V0Yy9rdWJlcm5ldGVzL3BraS9jYS5jcnQiLCJjb250ZW50cyI6eyJzb3VyY2UiOiJkYXRhOiwtLS0tLUJFR0lOJTIwQ0VSVElGSUNBVEUtLS0tLSUwQU1JSUVXakNDQTBLZ0F3SUJBZ0lKQUxmUmxXc0k4WVFITUEwR0NTcUdTSWIzRFFFQkJRVUFNSHN4Q3pBSkJnTlYlMEFCQVlUQWxWVE1Rc3dDUVlEVlFRSUV3SkRRVEVXTUJRR0ExVUVCeE1OVTJGdUlFWnlZVzVqYVhOamJ6RVVNQklHJTBBQTFVRUNoTUxRbkpoWkdacGRIcHBibU14RWpBUUJnTlZCQU1UQ1d4dlkyRnNhRzl6ZERFZE1Cc0dDU3FHU0liMyUwQURRRUpBUllPWW5KaFpFQmtZVzVuWVM1amIyMHdIaGNOTVRRd056RTFNakEwTmpBMVdoY05NVGN3TlRBME1qQTAlMEFOakExV2pCN01Rc3dDUVlEVlFRR0V3SlZVekVMTUFrR0ExVUVDQk1DUTBFeEZqQVVCZ05WQkFjVERWTmhiaUJHJTBBY21GdVkybHpZMjh4RkRBU0JnTlZCQW9UQzBKeVlXUm1hWFI2YVc1ak1SSXdFQVlEVlFRREV3bHNiMk5oYkdodiUwQWMzUXhIVEFiQmdrcWhraUc5dzBCQ1FFV0RtSnlZV1JBWkdGdVoyRXVZMjl0TUlJQklqQU5CZ2txaGtpRzl3MEIlMEFBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUF0NWZBanA0ZlRjZWtXVVRmenNwMGt5aWgxT1lic0dMMEtYMWVSYlNTJTBBUjhPZDAlMkI5UTYySHlueSUyQkdGd01UYjRBJTJGS1U4bXNzb0h2Y2NlU0FBYndmYnhGSyUyRiUyQnM1MVRvYnFVbk9SWnJPb1QlMEFaamtVeWdieVhEU0s5OVlCYmNSMVBpcDh2d01UbTRYS3VMdENpZ2VCQmRqakFRZGdVTzI4TEVOR2xzTW5tZVlrJTBBSmZPRFZHblZtcjVMdGI5QU5BOElLeVRmc25ISjRpT0NTJTJGUGxQYlVqMnE3WW5vVkxwb3NVQk1sZ1ViJTJGQ3lrWDMlMEFtT29MYjR5SkpReUElMkZpU1Q2WnhpSUVqMzZENHlXWjVsZzdZSmwlMkJVaWlCUUhHQ25QZEd5aXBxVjA2ZXgwaGVZVyUwQWNhaVc4TFdaU1VROTNqUSUyQldWQ0g4aFQ3RFFPMWRtc3ZVbVhscSUyRkplQWx3USUyRlFJREFRQUJvNEhnTUlIZE1CMEclMEFBMVVkRGdRV0JCUmNBUk90aFM0UDRVN3ZUZmpCeUM1NjlSN0U2RENCclFZRFZSMGpCSUdsTUlHaWdCUmNBUk90JTBBaFM0UDRVN3ZUZmpCeUM1NjlSN0U2S0YlMkZwSDB3ZXpFTE1Ba0dBMVVFQmhNQ1ZWTXhDekFKQmdOVkJBZ1RBa05CJTBBTVJZd0ZBWURWUVFIRXcxVFlXNGdSbkpoYm1OcGMyTnZNUlF3RWdZRFZRUUtFd3RDY21Ga1ptbDBlbWx1WXpFUyUwQU1CQUdBMVVFQXhNSmJHOWpZV3hvYjNOME1SMHdHd1lKS29aSWh2Y05BUWtCRmc1aWNtRmtRR1JoYm1kaExtTnYlMEFiWUlKQUxmUmxXc0k4WVFITUF3R0ExVWRFd1FGTUFNQkFmOHdEUVlKS29aSWh2Y05BUUVGQlFBRGdnRUJBRzZoJTBBVTlmOXNOSDAlMkY2b0JiR0d5MkVWVTBVZ0lUVVFJckZXbzlyRmtyVzVrJTJGWGtEalFtJTJCM2x6alQwaUdSNEl4RSUyRkFvJTBBZVU2c1FodWE3d3JXZUZFbjQ3R0w5OGxuQ3NKZEQ3b1pOaEZtUTk1VGIlMkZMbkRVanM1WWo5YnJQME5XelhmWVU0JTBBVUsyWm5JTkpSY0pwQjhpUkNhQ3hFOERkY1VGMFhxSUVxNnBBMjcyc25vTG1pWExNdk5sM2tZRWRtJTJCamU2dm9EJTBBNThTTlZFVXN6dHpReVhtSkVoQ3B3VkkwQTZRQ2p6WGolMkJxdnBtdzNaWkhpOEp3WGVpOFpaQkxUU0ZCa2k4WjduJTBBc0g5QkJIMzglMkZTelVtQU40UUhTUHkxZ2pxbTAwT0FFOE5hWURraCUyRmJ6RTRkN21MR0dNV3AlMkZXRTNLUFN1ODJIRiUwQWtQZTZYb1NiaUxtJTJGa3hrMzJUMCUzRCUwQS0tLS0tRU5EJTIwQ0VSVElGSUNBVEUtLS0tLSUwQSIsInZlcmlmaWNhdGlvbiI6e319LCJtb2RlIjo0MjB9LHsiZmlsZXN5c3RlbSI6InJvb3QiLCJwYXRoIjoiL2V0Yy9zeXN0ZW1kL3N5c3RlbS9rdWJlbGV0LnNlcnZpY2UiLCJjb250ZW50cyI6eyJzb3VyY2UiOiJkYXRhOiwlNUJVbml0JTVEJTBBQWZ0ZXIlM0Rkb2NrZXIuc2VydmljZSUwQVJlcXVpcmVzJTNEZG9ja2VyLnNlcnZpY2UlMEElMEFEZXNjcmlwdGlvbiUzRGt1YmVsZXQlM0ElMjBUaGUlMjBLdWJlcm5ldGVzJTIwTm9kZSUyMEFnZW50JTBBRG9jdW1lbnRhdGlvbiUzRGh0dHBzJTNBJTJGJTJGa3ViZXJuZXRlcy5pbyUyRmRvY3MlMkZob21lJTJGJTBBJTBBJTVCU2VydmljZSU1RCUwQVJlc3RhcnQlM0RhbHdheXMlMEFTdGFydExpbWl0SW50ZXJ2YWwlM0QwJTBBUmVzdGFydFNlYyUzRDEwJTBBQ1BVQWNjb3VudGluZyUzRHRydWUlMEFNZW1vcnlBY2NvdW50aW5nJTNEdHJ1ZSUwQSUwQUVudmlyb25tZW50JTNEJTIyUEFUSCUzRCUyRm9wdCUyRmJpbiUzQSUyRmJpbiUzQSUyRnVzciUyRmxvY2FsJTJGc2JpbiUzQSUyRnVzciUyRmxvY2FsJTJGYmluJTNBJTJGdXNyJTJGc2JpbiUzQSUyRnVzciUyRmJpbiUzQSUyRnNiaW4lMkYlMjIlMEFFbnZpcm9ubWVudEZpbGUlM0QtJTJGZXRjJTJGZW52aXJvbm1lbnQlMEFFbnZpcm9ubWVudEZpbGUlM0QlMkZldGMlMkZrdWJlcm5ldGVzJTJGbm9kZWlwLmNvbmYlMEElMEFFeGVjU3RhcnRQcmUlM0QlMkZiaW4lMkZiYXNoJTIwJTJGb3B0JTJGbG9hZC1rZXJuZWwtbW9kdWxlcy5zaCUwQUV4ZWNTdGFydFByZSUzRCUyRmJpbiUyRmJhc2glMjAlMkZvcHQlMkZiaW4lMkZzZXR1cF9uZXRfZW52LnNoJTBBRXhlY1N0YXJ0JTNEJTJGb3B0JTJGYmluJTJGa3ViZWxldCUyMCUyNEtVQkVMRVRfRVhUUkFfQVJHUyUyMCU1QyUwQSUyMCUyMC0tYm9vdHN0cmFwLWt1YmVjb25maWclM0QlMkZldGMlMkZrdWJlcm5ldGVzJTJGYm9vdHN0cmFwLWt1YmVsZXQuY29uZiUyMCU1QyUwQSUyMCUyMC0ta3ViZWNvbmZpZyUzRCUyRnZhciUyRmxpYiUyRmt1YmVsZXQlMkZrdWJlY29uZmlnJTIwJTVDJTBBJTIwJTIwLS1jb25maWclM0QlMkZldGMlMkZrdWJlcm5ldGVzJTJGa3ViZWxldC5jb25mJTIwJTVDJTBBJTIwJTIwLS1uZXR3b3JrLXBsdWdpbiUzRGNuaSUyMCU1QyUwQSUyMCUyMC0tY2VydC1kaXIlM0QlMkZldGMlMkZrdWJlcm5ldGVzJTJGcGtpJTIwJTVDJTBBJTIwJTIwLS1jbG91ZC1wcm92aWRlciUzRGF3cyUyMCU1QyUwQSUyMCUyMC0tY2xvdWQtY29uZmlnJTNEJTJGZXRjJTJGa3ViZXJuZXRlcyUyRmNsb3VkLWNvbmZpZyUyMCU1QyUwQSUyMCUyMC0tZHluYW1pYy1jb25maWctZGlyJTNEJTJGZXRjJTJGa3ViZXJuZXRlcyUyRmR5bmFtaWMtY29uZmlnLWRpciUyMCU1QyUwQSUyMCUyMC0tZmVhdHVyZS1nYXRlcyUzRER5bmFtaWNLdWJlbGV0Q29uZmlnJTNEdHJ1ZSUyMCU1QyUwQSUyMCUyMC0tZXhpdC1vbi1sb2NrLWNvbnRlbnRpb24lMjAlNUMlMEElMjAlMjAtLWxvY2stZmlsZSUzRCUyRnRtcCUyRmt1YmVsZXQubG9jayUyMCU1QyUwQSUyMCUyMC0tY29udGFpbmVyLXJ1bnRpbWUlM0Rkb2NrZXIlMjAlNUMlMEElMjAlMjAtLWNvbnRhaW5lci1ydW50aW1lLWVuZHBvaW50JTNEdW5peCUzQSUyRiUyRiUyRnZhciUyRnJ1biUyRmRvY2tlcnNoaW0uc29jayUyMCU1QyUwQSUyMCUyMC0tbm9kZS1pcCUyMCUyNCU3QktVQkVMRVRfTk9ERV9JUCU3RCUwQSUwQSU1Qkluc3RhbGwlNUQlMEFXYW50ZWRCeSUzRG11bHRpLXVzZXIudGFyZ2V0JTBBIiwidmVyaWZpY2F0aW9uIjp7fX0sIm1vZGUiOjQyMH0seyJmaWxlc3lzdGVtIjoicm9vdCIsInBhdGgiOiIvZXRjL2t1YmVybmV0ZXMvY2xvdWQtY29uZmlnIiwiY29udGVudHMiOnsic291cmNlIjoiZGF0YTosJTVCZ2xvYmFsJTVEJTBBWm9uZSUzRCUyMiUyMiUwQVZQQyUzRCUyMiUyMiUwQVN1Ym5ldElEJTNEJTIyJTIyJTBBIiwidmVyaWZpY2F0aW9uIjp7fX0sIm1vZGUiOjI1Nn0seyJmaWxlc3lzdGVtIjoicm9vdCIsInBhdGgiOiIvZXRjL2t1YmVybmV0ZXMva3ViZWxldC5jb25mIiwiY29udGVudHMiOnsic291cmNlIjoiZGF0YTosYXBpVmVyc2lvbiUzQSUyMGt1YmVsZXQuY29uZmlnLms4cy5pbyUyRnYxYmV0YTElMEFraW5kJTNBJTIwS3ViZWxldENvbmZpZ3VyYXRpb24lMEFhdXRoZW50aWNhdGlvbiUzQSUwQSUyMCUyMGFub255bW91cyUzQSUwQSUyMCUyMCUyMCUyMGVuYWJsZWQlM0ElMjBmYWxzZSUwQSUyMCUyMHdlYmhvb2slM0ElMEElMjAlMjAlMjAlMjBlbmFibGVkJTNBJTIwdHJ1ZSUwQSUyMCUyMHg1MDklM0ElMEElMjAlMjAlMjAlMjBjbGllbnRDQUZpbGUlM0ElMjAlMkZldGMlMkZrdWJlcm5ldGVzJTJGcGtpJTJGY2EuY3J0JTBBYXV0aG9yaXphdGlvbiUzQSUwQSUyMCUyMG1vZGUlM0ElMjBXZWJob29rJTBBY2dyb3VwRHJpdmVyJTNBJTIwc3lzdGVtZCUwQWNsdXN0ZXJETlMlM0ElMEEtJTIwJTIyMTAuMC4wLjAlMjIlMEFjbHVzdGVyRG9tYWluJTNBJTIwY2x1c3Rlci5sb2NhbCUwQWZlYXR1cmVHYXRlcyUzQSUwQSUyMCUyMEdyYWNlZnVsTm9kZVNodXRkb3duJTNBJTIwdHJ1ZSUwQSUyMCUyMElkZW50aWZ5UG9kT1MlM0ElMjBmYWxzZSUwQXByb3RlY3RLZXJuZWxEZWZhdWx0cyUzQSUyMHRydWUlMEFyZWFkT25seVBvcnQlM0ElMjAwJTBBcm90YXRlQ2VydGlmaWNhdGVzJTNBJTIwdHJ1ZSUwQXNlcnZlclRMU0Jvb3RzdHJhcCUzQSUyMHRydWUlMEFzdGF0aWNQb2RQYXRoJTNBJTIwJTJGZXRjJTJGa3ViZXJuZXRlcyUyRm1hbmlmZXN0cyUwQWt1YmVSZXNlcnZlZCUzQSUwQSUyMCUyMGNwdSUzQSUyMDIwMG0lMEElMjAlMjBlcGhlbWVyYWwtc3RvcmFnZSUzQSUyMDFHaSUwQSUyMCUyMG1lbW9yeSUzQSUyMDIwME1pJTBBc3lzdGVtUmVzZXJ2ZWQlM0ElMEElMjAlMjBjcHUlM0ElMjAyMDBtJTBBJTIwJTIwZXBoZW1lcmFsLXN0b3JhZ2UlM0ElMjAxR2klMEElMjAlMjBtZW1vcnklM0ElMjAyMDBNaSUwQWV2aWN0aW9uSGFyZCUzQSUwQSUyMCUyMGltYWdlZnMuYXZhaWxhYmxlJTNBJTIwMTUlMjUlMEElMjAlMjBtZW1vcnkuYXZhaWxhYmxlJTNBJTIwMTAwTWklMEElMjAlMjBub2RlZnMuYXZhaWxhYmxlJTNBJTIwMTAlMjUlMEElMjAlMjBub2RlZnMuaW5vZGVzRnJlZSUzQSUyMDUlMjUlMEF0bHNDaXBoZXJTdWl0ZXMlM0ElMEEtJTIwVExTX0FFU18xMjhfR0NNX1NIQTI1NiUwQS0lMjBUTFNfQUVTXzI1Nl9HQ01fU0hBMzg0JTBBLSUyMFRMU19DSEFDSEEyMF9QT0xZMTMwNV9TSEEyNTYlMEEtJTIwVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2JTBBLSUyMFRMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NCUwQS0lMjBUTFNfRUNESEVfRUNEU0FfV0lUSF9DSEFDSEEyMF9QT0xZMTMwNSUwQS0lMjBUTFNfRUNESEVfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2JTBBLSUyMFRMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQlMEEtJTIwVExTX0VDREhFX1JTQV9XSVRIX0NIQUNIQTIwX1BPTFkxMzA1JTBBdm9sdW1lUGx1Z2luRGlyJTNBJTIwJTJGdmFyJTJGbGliJTJGa3ViZWxldCUyRnZvbHVtZXBsdWdpbnMlMEEiLCJ2ZXJpZmljYXRpb24iOnt9fSwibW9kZSI6NDIwfSx7ImZpbGVzeXN0ZW0iOiJyb290IiwicGF0aCI6Ii9ldGMvc3lzdGVtZC9zeXN0ZW0va3ViZWxldC1oZWFsdGhjaGVjay5zZXJ2aWNlIiwiY29udGVudHMiOnsic291cmNlIjoiZGF0YTosJTVCVW5pdCU1RCUwQVJlcXVpcmVzJTNEa3ViZWxldC5zZXJ2aWNlJTBBQWZ0ZXIlM0RrdWJlbGV0LnNlcnZpY2UlMEElMEElNUJTZXJ2aWNlJTVEJTBBRXhlY1N0YXJ0JTNEJTJGb3B0JTJGYmluJTJGaGVhbHRoLW1vbml0b3Iuc2glMjBrdWJlbGV0JTBBJTBBJTVCSW5zdGFsbCU1RCUwQVdhbnRlZEJ5JTNEbXVsdGktdXNlci50YXJnZXQlMEEiLCJ2ZXJpZmljYXRpb24iOnt9fSwibW9kZSI6NDIwfSx7ImZpbGVzeXN0ZW0iOiJyb290IiwicGF0aCI6Ii9wcm9jL3N5cy9rZXJuZWwvcGFuaWNfb25fb29wcyIsImNvbnRlbnRzIjp7InNvdXJjZSI6ImRhdGE6LDElMEEiLCJ2ZXJpZmljYXRpb24iOnt9fSwibW9kZSI6NDIwfSx7ImZpbGVzeXN0ZW0iOiJyb290IiwicGF0aCI6Ii9wcm9jL3N5cy9rZXJuZWwvcGFuaWMiLCJjb250ZW50cyI6eyJzb3VyY2UiOiJkYXRhOiwxMCUwQSIsInZlcmlmaWNhdGlvbiI6e319LCJtb2RlIjo0MjB9LHsiZmlsZXN5c3RlbSI6InJvb3QiLCJwYXRoIjoiL3Byb2Mvc3lzL3ZtL292ZXJjb21taXRfbWVtb3J5IiwiY29udGVudHMiOnsic291cmNlIjoiZGF0YTosMSUwQSIsInZlcmlmaWNhdGlvbiI6e319LCJtb2RlIjo0MjB9LHsiZmlsZXN5c3RlbSI6InJvb3QiLCJwYXRoIjoiL2V0Yy9zc2gvc3NoZF9jb25maWciLCJjb250ZW50cyI6eyJzb3VyY2UiOiJkYXRhOiwlMjMlMjBVc2UlMjBtb3N0JTIwZGVmYXVsdHMlMjBmb3IlMjBzc2hkJTIwY29uZmlndXJhdGlvbi4lMEFTdWJzeXN0ZW0lMjBzZnRwJTIwaW50ZXJuYWwtc2Z0cCUwQUNsaWVudEFsaXZlSW50ZXJ2YWwlMjAxODAlMEFVc2VETlMlMjBubyUwQVVzZVBBTSUyMHllcyUwQVByaW50TGFzdExvZyUyMG5vJTIwJTIzJTIwaGFuZGxlZCUyMGJ5JTIwUEFNJTBBUHJpbnRNb3RkJTIwbm8lMjAlMjMlMjBoYW5kbGVkJTIwYnklMjBQQU0lMEFQYXNzd29yZEF1dGhlbnRpY2F0aW9uJTIwbm8lMEFDaGFsbGVuZ2VSZXNwb25zZUF1dGhlbnRpY2F0aW9uJTIwbm8lMEEiLCJ2ZXJpZmljYXRpb24iOnt9fSwibW9kZSI6Mzg0fSx7ImZpbGVzeXN0ZW0iOiJyb290IiwicGF0aCI6Ii9ldGMvZG9ja2VyL2RhZW1vbi5qc29uIiwiY29udGVudHMiOnsic291cmNlIjoiZGF0YTosJTdCJTIyZXhlYy1vcHRzJTIyJTNBJTVCJTIybmF0aXZlLmNncm91cGRyaXZlciUzRHN5c3RlbWQlMjIlNUQlMkMlMjJzdG9yYWdlLWRyaXZlciUyMiUzQSUyMm92ZXJsYXkyJTIyJTJDJTIybG9nLWRyaXZlciUyMiUzQSUyMmpzb24tZmlsZSUyMiUyQyUyMmxvZy1vcHRzJTIyJTNBJTdCJTIybWF4LWZpbGUlMjIlM0ElMjI1JTIyJTJDJTIybWF4LXNpemUlMjIlM0ElMjIxMDBtJTIyJTdEJTdEJTBBIiwidmVyaWZpY2F0aW9uIjp7fX0sIm1vZGUiOjQyMH0seyJmaWxlc3lzdGVtIjoicm9vdCIsInBhdGgiOiIvZXRjL3N5c3RlbWQvc3lzdGVtL2RvY2tlci5zZXJ2aWNlLmQvMTAtY3VzdG9tLmNvbmYiLCJjb250ZW50cyI6eyJzb3VyY2UiOiJkYXRhOiwlNUJTZXJ2aWNlJTVEJTBBRW52aXJvbm1lbnRGaWxlJTNELSUyRmV0YyUyRmVudmlyb25tZW50JTBBIiwidmVyaWZpY2F0aW9uIjp7fX0sIm1vZGUiOjQyMH1dfSwic3lzdGVtZCI6eyJ1bml0cyI6W3siY29udGVudHMiOiJbSW5zdGFsbF1cbldhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0XG5cbltVbml0XVxuUmVxdWlyZXM9ZG93bmxvYWQtc2NyaXB0LnNlcnZpY2VcblJlcXVpcmVzPW5vZGVpcC5zZXJ2aWNlXG5BZnRlcj1kb3dubG9hZC1zY3JpcHQuc2VydmljZVxuQWZ0ZXI9bm9kZWlwLnNlcnZpY2VcblxuW1NlcnZpY2VdXG5UeXBlPW9uZXNob3RcblJlbWFpbkFmdGVyRXhpdD10cnVlXG5FbnZpcm9ubWVudEZpbGU9LS9ldGMvZW52aXJvbm1lbnRcbkV4ZWNTdGFydD0vb3B0L2Jpbi9zZXR1cFxuIiwiZW5hYmxlZCI6dHJ1ZSwibmFtZSI6InNldHVwLnNlcnZpY2UifSx7ImNvbnRlbnRzIjoiW0luc3RhbGxdXG5XYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldFxuXG5bVW5pdF1cblJlcXVpcmVzPW5ldHdvcmstb25saW5lLnRhcmdldFxuQWZ0ZXI9bmV0d29yay1vbmxpbmUudGFyZ2V0XG5cbltTZXJ2aWNlXVxuVHlwZT1vbmVzaG90XG5SZW1haW5BZnRlckV4aXQ9dHJ1ZVxuRW52aXJvbm1lbnRGaWxlPS0vZXRjL2Vudmlyb25tZW50XG5FeGVjU3RhcnQ9L29wdC9iaW4vZG93bmxvYWQuc2hcbiIsImVuYWJsZWQiOnRydWUsIm5hbWUiOiJkb3dubG9hZC1zY3JpcHQuc2VydmljZSJ9LHsiY29udGVudHMiOiJbVW5pdF1cbkRlc2NyaXB0aW9uPVNldHVwIEt1YmVsZXQgTm9kZSBJUCBFbnZcblJlcXVpcmVzPW5ldHdvcmstb25saW5lLnRhcmdldFxuQWZ0ZXI9bmV0d29yay1vbmxpbmUudGFyZ2V0XG5cbltTZXJ2aWNlXVxuRXhlY1N0YXJ0PS9vcHQvYmluL3NldHVwX25ldF9lbnYuc2hcblJlbWFpbkFmdGVyRXhpdD15ZXNcblR5cGU9b25lc2hvdFxuW0luc3RhbGxdXG5XYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldFxuIiwiZW5hYmxlZCI6dHJ1ZSwibmFtZSI6Im5vZGVpcC5zZXJ2aWNlIn0seyJjb250ZW50cyI6IltVbml0XVxuRGVzY3JpcHRpb249U2V0dXAgU3RhdGljIE5ldHdvcmtpbmdcblJlcXVpcmVzPW5ldHdvcmstb25saW5lLnRhcmdldFxuQWZ0ZXI9bmV0d29yay1vbmxpbmUudGFyZ2V0XG5cbltTZXJ2aWNlXVxuRXhlY1N0YXJ0PS9vcHQvYmluL2NvbmZpZ3VyZV9zdGF0aWNfbmV0d29yay5zaFxuUmVtYWluQWZ0ZXJFeGl0PXllc1xuVHlwZT1vbmVzaG90XG5bSW5zdGFsbF1cbldhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0XG4iLCJlbmFibGVkIjp0cnVlLCJuYW1lIjoic3RhdGljLW5ldHdvcmstc2NyaXB0LnNlcnZpY2UifV19fQ== + cloud-config: eyJpZ25pdGlvbiI6eyJjb25maWciOnt9LCJzZWN1cml0eSI6eyJ0bHMiOnt9fSwidGltZW91dHMiOnt9LCJ2ZXJzaW9uIjoiMi4zLjAifSwibmV0d29ya2QiOnt9LCJwYXNzd2QiOnsidXNlcnMiOlt7Im5hbWUiOiJjb3JlIiwic3NoQXV0aG9yaXplZEtleXMiOlsic3NoLXJzYSBBQUFBQjNOemFDMXljMkVBQUFBREFRQUJBQUFDQVFEZE9JaFltekNLNURTVkx1M2MiXX1dfSwic3RvcmFnZSI6eyJmaWxlcyI6W3siZmlsZXN5c3RlbSI6InJvb3QiLCJwYXRoIjoiL2V0Yy9zeXN0ZW1kL2pvdXJuYWxkLmNvbmYuZC9tYXhfZGlza191c2UuY29uZiIsImNvbnRlbnRzIjp7InNvdXJjZSI6ImRhdGE6LCU1QkpvdXJuYWwlNUQlMEFTeXN0ZW1NYXhVc2UlM0Q1RyUwQSIsInZlcmlmaWNhdGlvbiI6e319LCJtb2RlIjo0MjB9LHsiZmlsZXN5c3RlbSI6InJvb3QiLCJwYXRoIjoiL29wdC9sb2FkLWtlcm5lbC1tb2R1bGVzLnNoIiwiY29udGVudHMiOnsic291cmNlIjoiZGF0YTosJTIzISUyRnVzciUyRmJpbiUyRmVudiUyMGJhc2glMEFzZXQlMjAtZXVvJTIwcGlwZWZhaWwlMEElMEFtb2Rwcm9iZSUyMGlwX3ZzJTBBbW9kcHJvYmUlMjBpcF92c19yciUwQW1vZHByb2JlJTIwaXBfdnNfd3JyJTBBbW9kcHJvYmUlMjBpcF92c19zaCUwQSUwQWlmJTIwbW9kaW5mbyUyMG5mX2Nvbm50cmFja19pcHY0JTIwJTI2JTNFJTIwJTJGZGV2JTJGbnVsbCUzQiUyMHRoZW4lMEElMjAlMjBtb2Rwcm9iZSUyMG5mX2Nvbm50cmFja19pcHY0JTBBZWxzZSUwQSUyMCUyMG1vZHByb2JlJTIwbmZfY29ubnRyYWNrJTBBZmklMEEiLCJ2ZXJpZmljYXRpb24iOnt9fSwibW9kZSI6NDkzfSx7ImZpbGVzeXN0ZW0iOiJyb290IiwicGF0aCI6Ii9ldGMvc3lzY3RsLmQvazhzLmNvbmYiLCJjb250ZW50cyI6eyJzb3VyY2UiOiJkYXRhOixuZXQuYnJpZGdlLmJyaWRnZS1uZi1jYWxsLWlwNnRhYmxlcyUyMCUzRCUyMDElMEFuZXQuYnJpZGdlLmJyaWRnZS1uZi1jYWxsLWlwdGFibGVzJTIwJTNEJTIwMSUwQWtlcm5lbC5wYW5pY19vbl9vb3BzJTIwJTNEJTIwMSUwQWtlcm5lbC5wYW5pYyUyMCUzRCUyMDEwJTBBbmV0LmlwdjQuaXBfZm9yd2FyZCUyMCUzRCUyMDElMEF2bS5vdmVyY29tbWl0X21lbW9yeSUyMCUzRCUyMDElMEFmcy5pbm90aWZ5Lm1heF91c2VyX3dhdGNoZXMlMjAlM0QlMjAxMDQ4NTc2JTBBIiwidmVyaWZpY2F0aW9uIjp7fX0sIm1vZGUiOjQyMH0seyJmaWxlc3lzdGVtIjoicm9vdCIsInBhdGgiOiIvb3B0L2Jpbi9zZXR1cF9uZXRfZW52LnNoIiwiY29udGVudHMiOnsic291cmNlIjoiZGF0YTosJTIzISUyRnVzciUyRmJpbiUyRmVudiUyMGJhc2glMEFlY2hvZGF0ZSgpJTIwJTdCJTBBJTIwJTIwZWNobyUyMCUyMiU1QiUyNChkYXRlJTIwLUlzKSU1RCUyMiUyMCUyMiUyNCU0MCUyMiUwQSU3RCUwQSUwQSUyMyUyMGdldCUyMHRoZSUyMGRlZmF1bHQlMjBpbnRlcmZhY2UlMjBJUCUyMGFkZHJlc3MlMEFERUZBVUxUX0lGQ19JUCUzRCUyNChpcCUyMC1vJTIwJTIwcm91dGUlMjBnZXQlMjAxJTIwJTdDJTIwZ3JlcCUyMC1vUCUyMCUyMnNyYyUyMCU1Q0slNUNTJTJCJTIyKSUwQSUwQWlmJTIwJTVCJTIwLXolMjAlMjIlMjQlN0JERUZBVUxUX0lGQ19JUCU3RCUyMiUyMCU1RCUwQXRoZW4lMEElMjAlMjBlY2hvZGF0ZSUyMCUyMkZhaWxlZCUyMHRvJTIwZ2V0JTIwSVAlMjBhZGRyZXNzJTIwZm9yJTIwdGhlJTIwZGVmYXVsdCUyMHJvdXRlJTIwaW50ZXJmYWNlJTIyJTBBJTIwJTIwZXhpdCUyMDElMEFmaSUwQSUwQSUyMyUyMGdldCUyMHRoZSUyMGZ1bGwlMjBob3N0bmFtZSUwQUZVTExfSE9TVE5BTUUlM0QlMjQoaG9zdG5hbWUlMjAtZiklMEElMjMlMjBpZiUyMCUyRmV0YyUyRmhvc3RuYW1lJTIwaXMlMjBub3QlMjBlbXB0eSUyMHRoZW4lMjB1c2UlMjB0aGUlMjBob3N0bmFtZSUyMGZyb20lMjB0aGVyZSUwQWlmJTIwJTVCJTIwLXMlMjAlMkZldGMlMkZob3N0bmFtZSUyMCU1RCUzQiUyMHRoZW4lMEElMjAlMjAlMjAlMjBGVUxMX0hPU1ROQU1FJTNEJTI0KGNhdCUyMCUyRmV0YyUyRmhvc3RuYW1lKSUwQWZpJTBBJTBBJTIzJTIwd3JpdGUlMjB0aGUlMjBub2RlaXBfZW52JTIwZmlsZSUwQSUyMyUyMHdlJTIwbmVlZCUyMHRoZSUyMGxpbmUlMjBiZWxvdyUyMGJlY2F1c2UlMjBmbGF0Y2FyJTIwaGFzJTIwdGhlJTIwc2FtZSUyMHN0cmluZyUyMCUyMmNvcmVvcyUyMiUyMGluJTIwdGhhdCUyMGZpbGUlMEFpZiUyMGdyZXAlMjAtcSUyMGNvcmVvcyUyMCUyRmV0YyUyRm9zLXJlbGVhc2UlMEF0aGVuJTBBJTIwJTIwZWNobyUyMC1lJTIwJTIyS1VCRUxFVF9OT0RFX0lQJTNEJTI0JTdCREVGQVVMVF9JRkNfSVAlN0QlNUNuS1VCRUxFVF9IT1NUTkFNRSUzRCUyNCU3QkZVTExfSE9TVE5BTUUlN0QlMjIlMjAlM0UlMjAlMkZldGMlMkZrdWJlcm5ldGVzJTJGbm9kZWlwLmNvbmYlMEFlbGlmJTIwJTVCJTIwISUyMC1kJTIwJTJGZXRjJTJGc3lzdGVtZCUyRnN5c3RlbSUyRmt1YmVsZXQuc2VydmljZS5kJTIwJTVEJTBBdGhlbiUwQSUyMCUyMGVjaG9kYXRlJTIwJTIyQ2FuJ3QlMjBmaW5kJTIwa3ViZWxldCUyMHNlcnZpY2UlMjBleHRyYXMlMjBkaXJlY3RvcnklMjIlMEElMjAlMjBleGl0JTIwMSUwQWVsc2UlMEElMjAlMjBlY2hvJTIwLWUlMjAlMjIlNUJTZXJ2aWNlJTVEJTVDbkVudmlyb25tZW50JTNEJTVDJTIyS1VCRUxFVF9OT0RFX0lQJTNEJTI0JTdCREVGQVVMVF9JRkNfSVAlN0QlNUMlMjIlNUNuRW52aXJvbm1lbnQlM0QlNUMlMjJLVUJFTEVUX0hPU1ROQU1FJTNEJTI0JTdCRlVMTF9IT1NUTkFNRSU3RCU1QyUyMiUyMiUyMCUzRSUyMCUyRmV0YyUyRnN5c3RlbWQlMkZzeXN0ZW0lMkZrdWJlbGV0LnNlcnZpY2UuZCUyRm5vZGVpcC5jb25mJTBBZmklMEEiLCJ2ZXJpZmljYXRpb24iOnt9fSwibW9kZSI6NDkzfSx7ImZpbGVzeXN0ZW0iOiJyb290IiwicGF0aCI6Ii9vcHQvYmluL2NvbmZpZ3VyZV9zdGF0aWNfbmV0d29yay5zaCIsImNvbnRlbnRzIjp7InNvdXJjZSI6ImRhdGE6LCUyMyElMkZ1c3IlMkZiaW4lMkZlbnYlMjBiYXNoJTBBc2V0JTIwLXhldW8lMjBwaXBlZmFpbCUwQSIsInZlcmlmaWNhdGlvbiI6e319LCJtb2RlIjo0OTN9LHsiZmlsZXN5c3RlbSI6InJvb3QiLCJwYXRoIjoiL29wdC9iaW4vZG93bmxvYWQuc2giLCJjb250ZW50cyI6eyJzb3VyY2UiOiJkYXRhOiwlMjMhJTJGdXNyJTJGYmluJTJGZW52JTIwYmFzaCUwQXNldCUyMC14ZXVvJTIwcGlwZWZhaWwlMEFvcHRfYmluJTNEJTJGb3B0JTJGYmluJTBBdXNyX2xvY2FsX2JpbiUzRCUyRnVzciUyRmxvY2FsJTJGYmluJTBBY25pX2Jpbl9kaXIlM0QlMkZvcHQlMkZjbmklMkZiaW4lMEFta2RpciUyMC1wJTIwJTJGZXRjJTJGY25pJTJGbmV0LmQlMjAlMkZldGMlMkZrdWJlcm5ldGVzJTJGZHluYW1pYy1jb25maWctZGlyJTIwJTJGZXRjJTJGa3ViZXJuZXRlcyUyRm1hbmlmZXN0cyUyMCUyMiUyNG9wdF9iaW4lMjIlMjAlMjIlMjRjbmlfYmluX2RpciUyMiUwQWFyY2glM0QlMjQlN0JIT1NUX0FSQ0gtJTdEJTBBaWYlMjAlNUIlMjAteiUyMCUyMiUyNGFyY2glMjIlMjAlNUQlMEF0aGVuJTBBY2FzZSUyMCUyNCh1bmFtZSUyMC1tKSUyMGluJTBBeDg2XzY0KSUwQSUyMCUyMCUyMCUyMGFyY2glM0QlMjJhbWQ2NCUyMiUwQSUyMCUyMCUyMCUyMCUzQiUzQiUwQWFhcmNoNjQpJTBBJTIwJTIwJTIwJTIwYXJjaCUzRCUyMmFybTY0JTIyJTBBJTIwJTIwJTIwJTIwJTNCJTNCJTBBKiklMEElMjAlMjAlMjAlMjBlY2hvJTIwJTIydW5zdXBwb3J0ZWQlMjBDUFUlMjBhcmNoaXRlY3R1cmUlMkMlMjBleGl0aW5nJTIyJTBBJTIwJTIwJTIwJTIwZXhpdCUyMDElMEElMjAlMjAlMjAlMjAlM0IlM0IlMEFlc2FjJTBBZmklMEFDTklfVkVSU0lPTiUzRCUyMiUyNCU3QkNOSV9WRVJTSU9OJTNBLXYwLjguNyU3RCUyMiUwQWNuaV9iYXNlX3VybCUzRCUyMmh0dHBzJTNBJTJGJTJGZ2l0aHViLmNvbSUyRmNvbnRhaW5lcm5ldHdvcmtpbmclMkZwbHVnaW5zJTJGcmVsZWFzZXMlMkZkb3dubG9hZCUyRiUyNENOSV9WRVJTSU9OJTIyJTBBY25pX2ZpbGVuYW1lJTNEJTIyY25pLXBsdWdpbnMtbGludXgtJTI0YXJjaC0lMjRDTklfVkVSU0lPTi50Z3olMjIlMEFjdXJsJTIwLUxmbyUyMCUyMiUyNGNuaV9iaW5fZGlyJTJGJTI0Y25pX2ZpbGVuYW1lJTIyJTIwJTIyJTI0Y25pX2Jhc2VfdXJsJTJGJTI0Y25pX2ZpbGVuYW1lJTIyJTBBY25pX3N1bSUzRCUyNChjdXJsJTIwLUxmJTIwJTIyJTI0Y25pX2Jhc2VfdXJsJTJGJTI0Y25pX2ZpbGVuYW1lLnNoYTI1NiUyMiklMEFjZCUyMCUyMiUyNGNuaV9iaW5fZGlyJTIyJTBBc2hhMjU2c3VtJTIwLWMlMjAlM0MlM0MlM0MlMjIlMjRjbmlfc3VtJTIyJTBBdGFyJTIweHZmJTIwJTIyJTI0Y25pX2ZpbGVuYW1lJTIyJTBBcm0lMjAtZiUyMCUyMiUyNGNuaV9maWxlbmFtZSUyMiUwQWNkJTIwLSUwQUNSSV9UT09MU19SRUxFQVNFJTNEJTIyJTI0JTdCQ1JJX1RPT0xTX1JFTEVBU0UlM0EtdjEuMjIuMCU3RCUyMiUwQWNyaV90b29sc19iYXNlX3VybCUzRCUyMmh0dHBzJTNBJTJGJTJGZ2l0aHViLmNvbSUyRmt1YmVybmV0ZXMtc2lncyUyRmNyaS10b29scyUyRnJlbGVhc2VzJTJGZG93bmxvYWQlMkYlMjQlN0JDUklfVE9PTFNfUkVMRUFTRSU3RCUyMiUwQWNyaV90b29sc19maWxlbmFtZSUzRCUyMmNyaWN0bC0lMjQlN0JDUklfVE9PTFNfUkVMRUFTRSU3RC1saW51eC0lMjQlN0JhcmNoJTdELnRhci5neiUyMiUwQWN1cmwlMjAtTGZvJTIwJTIyJTI0b3B0X2JpbiUyRiUyNGNyaV90b29sc19maWxlbmFtZSUyMiUyMCUyMiUyNGNyaV90b29sc19iYXNlX3VybCUyRiUyNGNyaV90b29sc19maWxlbmFtZSUyMiUwQWNyaV90b29sc19zdW0lM0QlMjQoY3VybCUyMC1MZiUyMCUyMiUyNGNyaV90b29sc19iYXNlX3VybCUyRiUyNGNyaV90b29sc19maWxlbmFtZS5zaGEyNTYlMjIlMjAlN0MlMjBzZWQlMjAncyUyRiU1QyolNUMlMkYlMkYlMkYnKSUwQWNkJTIwJTIyJTI0b3B0X2JpbiUyMiUwQXNoYTI1NnN1bSUyMC1jJTIwJTNDJTNDJTNDJTIyJTI0Y3JpX3Rvb2xzX3N1bSUyMiUwQXRhciUyMHh2ZiUyMCUyMiUyNGNyaV90b29sc19maWxlbmFtZSUyMiUwQXJtJTIwLWYlMjAlMjIlMjRjcmlfdG9vbHNfZmlsZW5hbWUlMjIlMEFsbiUyMC1zZiUyMCUyMiUyNG9wdF9iaW4lMkZjcmljdGwlMjIlMjAlMjIlMjR1c3JfbG9jYWxfYmluJTIyJTJGY3JpY3RsJTIwJTdDJTdDJTIwZWNobyUyMCUyMnN5bWJvbGljJTIwbGluayUyMGlzJTIwc2tpcHBlZCUyMiUwQWNkJTIwLSUwQUtVQkVfVkVSU0lPTiUzRCUyMiUyNCU3QktVQkVfVkVSU0lPTiUzQS12MS4yMi4xJTdEJTIyJTBBa3ViZV9kaXIlM0QlMjIlMjRvcHRfYmluJTJGa3ViZXJuZXRlcy0lMjRLVUJFX1ZFUlNJT04lMjIlMEFrdWJlX2Jhc2VfdXJsJTNEJTIyaHR0cHMlM0ElMkYlMkZzdG9yYWdlLmdvb2dsZWFwaXMuY29tJTJGa3ViZXJuZXRlcy1yZWxlYXNlJTJGcmVsZWFzZSUyRiUyNEtVQkVfVkVSU0lPTiUyRmJpbiUyRmxpbnV4JTJGJTI0YXJjaCUyMiUwQWt1YmVfc3VtX2ZpbGUlM0QlMjIlMjRrdWJlX2RpciUyRnNoYTI1NiUyMiUwQW1rZGlyJTIwLXAlMjAlMjIlMjRrdWJlX2RpciUyMiUwQSUzQSUyMCUzRSUyMiUyNGt1YmVfc3VtX2ZpbGUlMjIlMEElMEFmb3IlMjBiaW4lMjBpbiUyMGt1YmVsZXQlMjBrdWJlYWRtJTIwa3ViZWN0bCUzQiUyMGRvJTBBJTIwJTIwJTIwJTIwY3VybCUyMC1MZm8lMjAlMjIlMjRrdWJlX2RpciUyRiUyNGJpbiUyMiUyMCUyMiUyNGt1YmVfYmFzZV91cmwlMkYlMjRiaW4lMjIlMEElMjAlMjAlMjAlMjBjaG1vZCUyMCUyQnglMjAlMjIlMjRrdWJlX2RpciUyRiUyNGJpbiUyMiUwQSUyMCUyMCUyMCUyMHN1bSUzRCUyNChjdXJsJTIwLUxmJTIwJTIyJTI0a3ViZV9iYXNlX3VybCUyRiUyNGJpbi5zaGEyNTYlMjIpJTBBJTIwJTIwJTIwJTIwZWNobyUyMCUyMiUyNHN1bSUyMCUyMCUyNGt1YmVfZGlyJTJGJTI0YmluJTIyJTIwJTNFJTNFJTIyJTI0a3ViZV9zdW1fZmlsZSUyMiUwQWRvbmUlMEFzaGEyNTZzdW0lMjAtYyUyMCUyMiUyNGt1YmVfc3VtX2ZpbGUlMjIlMEElMEFmb3IlMjBiaW4lMjBpbiUyMGt1YmVsZXQlMjBrdWJlYWRtJTIwa3ViZWN0bCUzQiUyMGRvJTBBJTIwJTIwJTIwJTIwbG4lMjAtc2YlMjAlMjIlMjRrdWJlX2RpciUyRiUyNGJpbiUyMiUyMCUyMiUyNG9wdF9iaW4lMjIlMkYlMjRiaW4lMEFkb25lJTBBJTBBaWYlMjAlNUIlNUIlMjAhJTIwLXglMjAlMkZvcHQlMkZiaW4lMkZoZWFsdGgtbW9uaXRvci5zaCUyMCU1RCU1RCUzQiUyMHRoZW4lMEElMjAlMjAlMjAlMjBjdXJsJTIwLUxmbyUyMCUyRm9wdCUyRmJpbiUyRmhlYWx0aC1tb25pdG9yLnNoJTIwaHR0cHMlM0ElMkYlMkZyYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tJTJGa3ViZXJtYXRpYyUyRm1hY2hpbmUtY29udHJvbGxlciUyRjc5NjdhMGFmMmI3NWYyOWFkMmFiMjI3ZWVhYTI2ZWE3YjBmMmZiZGUlMkZwa2clMkZ1c2VyZGF0YSUyRnNjcmlwdHMlMkZoZWFsdGgtbW9uaXRvci5zaCUwQSUyMCUyMCUyMCUyMGNobW9kJTIwJTJCeCUyMCUyRm9wdCUyRmJpbiUyRmhlYWx0aC1tb25pdG9yLnNoJTBBZmklMEElMEFzeXN0ZW1jdGwlMjBkaXNhYmxlJTIwZG93bmxvYWQtc2NyaXB0LnNlcnZpY2UlMEEiLCJ2ZXJpZmljYXRpb24iOnt9fSwibW9kZSI6NDkzfSx7ImZpbGVzeXN0ZW0iOiJyb290IiwicGF0aCI6Ii9vcHQvYmluL3NldHVwIiwiY29udGVudHMiOnsic291cmNlIjoiZGF0YTosJTIzISUyRmJpbiUyRmJhc2glMEFzZXQlMjAteGV1byUyMHBpcGVmYWlsJTBBY2F0JTIwJTNDJTNDJTIwRU9GJTIwJTdDJTIwdGVlJTIwJTJGZXRjJTJGcG9sa2l0LTElMkZydWxlcy5kJTJGNjAtbm9yZWJvb3Rfbm9yZXN0YXJ0LnJ1bGVzJTBBcG9sa2l0LmFkZFJ1bGUoZnVuY3Rpb24oYWN0aW9uJTJDJTIwc3ViamVjdCklMjAlN0IlMEElMjAlMjBpZiUyMChhY3Rpb24uaWQlMjAlM0QlM0QlMjAlMjJvcmcuZnJlZWRlc2t0b3AubG9naW4xLnJlYm9vdCUyMiUyMCU3QyU3QyUwQSUyMCUyMCUyMCUyMCUyMCUyMGFjdGlvbi5pZCUyMCUzRCUzRCUyMCUyMm9yZy5mcmVlZGVza3RvcC5sb2dpbjEucmVib290LW11bHRpcGxlLXNlc3Npb25zJTIyKSUyMCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMGlmJTIwKHN1YmplY3QudXNlciUyMCUzRCUzRCUyMCUyMmNvcmUlMjIpJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcmV0dXJuJTIwcG9sa2l0LlJlc3VsdC5ZRVMlM0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlN0QlMjBlbHNlJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcmV0dXJuJTIwcG9sa2l0LlJlc3VsdC5BVVRIX0FETUlOJTNCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTdEJTBBJTIwJTIwJTdEJTBBJTdEKSUzQiUwQUVPRiUwQXN5c3RlbWN0bCUyMHN0b3AlMjBjb250YWluZXJkJTBBc3lzdGVtY3RsJTIwZGlzYWJsZSUyMGNvbnRhaW5lcmQlMEElMEFzeXN0ZW1jdGwlMjBlbmFibGUlMjAtLW5vdyUyMGt1YmVsZXQlMEFzeXN0ZW1jdGwlMjBlbmFibGUlMjAtLW5vdyUyMC0tbm8tYmxvY2slMjBrdWJlbGV0LWhlYWx0aGNoZWNrLnNlcnZpY2UlMEFzeXN0ZW1jdGwlMjBkaXNhYmxlJTIwc2V0dXAuc2VydmljZSUwQSIsInZlcmlmaWNhdGlvbiI6e319LCJtb2RlIjo0OTN9LHsiZmlsZXN5c3RlbSI6InJvb3QiLCJwYXRoIjoiL2V0Yy9rdWJlcm5ldGVzL3BraS9jYS5jcnQiLCJjb250ZW50cyI6eyJzb3VyY2UiOiJkYXRhOiwtLS0tLUJFR0lOJTIwQ0VSVElGSUNBVEUtLS0tLSUwQU1JSUVXakNDQTBLZ0F3SUJBZ0lKQUxmUmxXc0k4WVFITUEwR0NTcUdTSWIzRFFFQkJRVUFNSHN4Q3pBSkJnTlYlMEFCQVlUQWxWVE1Rc3dDUVlEVlFRSUV3SkRRVEVXTUJRR0ExVUVCeE1OVTJGdUlFWnlZVzVqYVhOamJ6RVVNQklHJTBBQTFVRUNoTUxRbkpoWkdacGRIcHBibU14RWpBUUJnTlZCQU1UQ1d4dlkyRnNhRzl6ZERFZE1Cc0dDU3FHU0liMyUwQURRRUpBUllPWW5KaFpFQmtZVzVuWVM1amIyMHdIaGNOTVRRd056RTFNakEwTmpBMVdoY05NVGN3TlRBME1qQTAlMEFOakExV2pCN01Rc3dDUVlEVlFRR0V3SlZVekVMTUFrR0ExVUVDQk1DUTBFeEZqQVVCZ05WQkFjVERWTmhiaUJHJTBBY21GdVkybHpZMjh4RkRBU0JnTlZCQW9UQzBKeVlXUm1hWFI2YVc1ak1SSXdFQVlEVlFRREV3bHNiMk5oYkdodiUwQWMzUXhIVEFiQmdrcWhraUc5dzBCQ1FFV0RtSnlZV1JBWkdGdVoyRXVZMjl0TUlJQklqQU5CZ2txaGtpRzl3MEIlMEFBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUF0NWZBanA0ZlRjZWtXVVRmenNwMGt5aWgxT1lic0dMMEtYMWVSYlNTJTBBUjhPZDAlMkI5UTYySHlueSUyQkdGd01UYjRBJTJGS1U4bXNzb0h2Y2NlU0FBYndmYnhGSyUyRiUyQnM1MVRvYnFVbk9SWnJPb1QlMEFaamtVeWdieVhEU0s5OVlCYmNSMVBpcDh2d01UbTRYS3VMdENpZ2VCQmRqakFRZGdVTzI4TEVOR2xzTW5tZVlrJTBBSmZPRFZHblZtcjVMdGI5QU5BOElLeVRmc25ISjRpT0NTJTJGUGxQYlVqMnE3WW5vVkxwb3NVQk1sZ1ViJTJGQ3lrWDMlMEFtT29MYjR5SkpReUElMkZpU1Q2WnhpSUVqMzZENHlXWjVsZzdZSmwlMkJVaWlCUUhHQ25QZEd5aXBxVjA2ZXgwaGVZVyUwQWNhaVc4TFdaU1VROTNqUSUyQldWQ0g4aFQ3RFFPMWRtc3ZVbVhscSUyRkplQWx3USUyRlFJREFRQUJvNEhnTUlIZE1CMEclMEFBMVVkRGdRV0JCUmNBUk90aFM0UDRVN3ZUZmpCeUM1NjlSN0U2RENCclFZRFZSMGpCSUdsTUlHaWdCUmNBUk90JTBBaFM0UDRVN3ZUZmpCeUM1NjlSN0U2S0YlMkZwSDB3ZXpFTE1Ba0dBMVVFQmhNQ1ZWTXhDekFKQmdOVkJBZ1RBa05CJTBBTVJZd0ZBWURWUVFIRXcxVFlXNGdSbkpoYm1OcGMyTnZNUlF3RWdZRFZRUUtFd3RDY21Ga1ptbDBlbWx1WXpFUyUwQU1CQUdBMVVFQXhNSmJHOWpZV3hvYjNOME1SMHdHd1lKS29aSWh2Y05BUWtCRmc1aWNtRmtRR1JoYm1kaExtTnYlMEFiWUlKQUxmUmxXc0k4WVFITUF3R0ExVWRFd1FGTUFNQkFmOHdEUVlKS29aSWh2Y05BUUVGQlFBRGdnRUJBRzZoJTBBVTlmOXNOSDAlMkY2b0JiR0d5MkVWVTBVZ0lUVVFJckZXbzlyRmtyVzVrJTJGWGtEalFtJTJCM2x6alQwaUdSNEl4RSUyRkFvJTBBZVU2c1FodWE3d3JXZUZFbjQ3R0w5OGxuQ3NKZEQ3b1pOaEZtUTk1VGIlMkZMbkRVanM1WWo5YnJQME5XelhmWVU0JTBBVUsyWm5JTkpSY0pwQjhpUkNhQ3hFOERkY1VGMFhxSUVxNnBBMjcyc25vTG1pWExNdk5sM2tZRWRtJTJCamU2dm9EJTBBNThTTlZFVXN6dHpReVhtSkVoQ3B3VkkwQTZRQ2p6WGolMkJxdnBtdzNaWkhpOEp3WGVpOFpaQkxUU0ZCa2k4WjduJTBBc0g5QkJIMzglMkZTelVtQU40UUhTUHkxZ2pxbTAwT0FFOE5hWURraCUyRmJ6RTRkN21MR0dNV3AlMkZXRTNLUFN1ODJIRiUwQWtQZTZYb1NiaUxtJTJGa3hrMzJUMCUzRCUwQS0tLS0tRU5EJTIwQ0VSVElGSUNBVEUtLS0tLSUwQSIsInZlcmlmaWNhdGlvbiI6e319LCJtb2RlIjo0MjB9LHsiZmlsZXN5c3RlbSI6InJvb3QiLCJwYXRoIjoiL2V0Yy9zeXN0ZW1kL3N5c3RlbS9rdWJlbGV0LnNlcnZpY2UiLCJjb250ZW50cyI6eyJzb3VyY2UiOiJkYXRhOiwlNUJVbml0JTVEJTBBQWZ0ZXIlM0Rkb2NrZXIuc2VydmljZSUwQVJlcXVpcmVzJTNEZG9ja2VyLnNlcnZpY2UlMEElMEFEZXNjcmlwdGlvbiUzRGt1YmVsZXQlM0ElMjBUaGUlMjBLdWJlcm5ldGVzJTIwTm9kZSUyMEFnZW50JTBBRG9jdW1lbnRhdGlvbiUzRGh0dHBzJTNBJTJGJTJGa3ViZXJuZXRlcy5pbyUyRmRvY3MlMkZob21lJTJGJTBBJTBBJTVCU2VydmljZSU1RCUwQVJlc3RhcnQlM0RhbHdheXMlMEFTdGFydExpbWl0SW50ZXJ2YWwlM0QwJTBBUmVzdGFydFNlYyUzRDEwJTBBQ1BVQWNjb3VudGluZyUzRHRydWUlMEFNZW1vcnlBY2NvdW50aW5nJTNEdHJ1ZSUwQSUwQUVudmlyb25tZW50JTNEJTIyUEFUSCUzRCUyRm9wdCUyRmJpbiUzQSUyRmJpbiUzQSUyRnVzciUyRmxvY2FsJTJGc2JpbiUzQSUyRnVzciUyRmxvY2FsJTJGYmluJTNBJTJGdXNyJTJGc2JpbiUzQSUyRnVzciUyRmJpbiUzQSUyRnNiaW4lMkYlMjIlMEFFbnZpcm9ubWVudEZpbGUlM0QtJTJGZXRjJTJGZW52aXJvbm1lbnQlMEFFbnZpcm9ubWVudEZpbGUlM0QlMkZldGMlMkZrdWJlcm5ldGVzJTJGbm9kZWlwLmNvbmYlMEElMEFFeGVjU3RhcnRQcmUlM0QlMkZiaW4lMkZiYXNoJTIwJTJGb3B0JTJGbG9hZC1rZXJuZWwtbW9kdWxlcy5zaCUwQUV4ZWNTdGFydFByZSUzRCUyRmJpbiUyRmJhc2glMjAlMkZvcHQlMkZiaW4lMkZzZXR1cF9uZXRfZW52LnNoJTBBRXhlY1N0YXJ0JTNEJTJGb3B0JTJGYmluJTJGa3ViZWxldCUyMCUyNEtVQkVMRVRfRVhUUkFfQVJHUyUyMCU1QyUwQSUyMCUyMC0tYm9vdHN0cmFwLWt1YmVjb25maWclM0QlMkZldGMlMkZrdWJlcm5ldGVzJTJGYm9vdHN0cmFwLWt1YmVsZXQuY29uZiUyMCU1QyUwQSUyMCUyMC0ta3ViZWNvbmZpZyUzRCUyRnZhciUyRmxpYiUyRmt1YmVsZXQlMkZrdWJlY29uZmlnJTIwJTVDJTBBJTIwJTIwLS1jb25maWclM0QlMkZldGMlMkZrdWJlcm5ldGVzJTJGa3ViZWxldC5jb25mJTIwJTVDJTBBJTIwJTIwLS1uZXR3b3JrLXBsdWdpbiUzRGNuaSUyMCU1QyUwQSUyMCUyMC0tY2VydC1kaXIlM0QlMkZldGMlMkZrdWJlcm5ldGVzJTJGcGtpJTIwJTVDJTBBJTIwJTIwLS1jbG91ZC1wcm92aWRlciUzRGF3cyUyMCU1QyUwQSUyMCUyMC0tY2xvdWQtY29uZmlnJTNEJTJGZXRjJTJGa3ViZXJuZXRlcyUyRmNsb3VkLWNvbmZpZyUyMCU1QyUwQSUyMCUyMC0tZHluYW1pYy1jb25maWctZGlyJTNEJTJGZXRjJTJGa3ViZXJuZXRlcyUyRmR5bmFtaWMtY29uZmlnLWRpciUyMCU1QyUwQSUyMCUyMC0tZmVhdHVyZS1nYXRlcyUzRER5bmFtaWNLdWJlbGV0Q29uZmlnJTNEdHJ1ZSUyMCU1QyUwQSUyMCUyMC0tZXhpdC1vbi1sb2NrLWNvbnRlbnRpb24lMjAlNUMlMEElMjAlMjAtLWxvY2stZmlsZSUzRCUyRnRtcCUyRmt1YmVsZXQubG9jayUyMCU1QyUwQSUyMCUyMC0tY29udGFpbmVyLXJ1bnRpbWUlM0Rkb2NrZXIlMjAlNUMlMEElMjAlMjAtLWNvbnRhaW5lci1ydW50aW1lLWVuZHBvaW50JTNEdW5peCUzQSUyRiUyRiUyRnZhciUyRnJ1biUyRmRvY2tlcnNoaW0uc29jayUyMCU1QyUwQSUyMCUyMC0tbm9kZS1pcCUyMCUyNCU3QktVQkVMRVRfTk9ERV9JUCU3RCUwQSUwQSU1Qkluc3RhbGwlNUQlMEFXYW50ZWRCeSUzRG11bHRpLXVzZXIudGFyZ2V0JTBBIiwidmVyaWZpY2F0aW9uIjp7fX0sIm1vZGUiOjQyMH0seyJmaWxlc3lzdGVtIjoicm9vdCIsInBhdGgiOiIvZXRjL2t1YmVybmV0ZXMvY2xvdWQtY29uZmlnIiwiY29udGVudHMiOnsic291cmNlIjoiZGF0YTosJTVCZ2xvYmFsJTVEJTBBWm9uZSUzRCUyMiUyMiUwQVZQQyUzRCUyMiUyMiUwQVN1Ym5ldElEJTNEJTIyJTIyJTBBIiwidmVyaWZpY2F0aW9uIjp7fX0sIm1vZGUiOjI1Nn0seyJmaWxlc3lzdGVtIjoicm9vdCIsInBhdGgiOiIvZXRjL2t1YmVybmV0ZXMva3ViZWxldC5jb25mIiwiY29udGVudHMiOnsic291cmNlIjoiZGF0YTosYXBpVmVyc2lvbiUzQSUyMGt1YmVsZXQuY29uZmlnLms4cy5pbyUyRnYxYmV0YTElMEFraW5kJTNBJTIwS3ViZWxldENvbmZpZ3VyYXRpb24lMEFhdXRoZW50aWNhdGlvbiUzQSUwQSUyMCUyMGFub255bW91cyUzQSUwQSUyMCUyMCUyMCUyMGVuYWJsZWQlM0ElMjBmYWxzZSUwQSUyMCUyMHdlYmhvb2slM0ElMEElMjAlMjAlMjAlMjBlbmFibGVkJTNBJTIwdHJ1ZSUwQSUyMCUyMHg1MDklM0ElMEElMjAlMjAlMjAlMjBjbGllbnRDQUZpbGUlM0ElMjAlMkZldGMlMkZrdWJlcm5ldGVzJTJGcGtpJTJGY2EuY3J0JTBBYXV0aG9yaXphdGlvbiUzQSUwQSUyMCUyMG1vZGUlM0ElMjBXZWJob29rJTBBY2dyb3VwRHJpdmVyJTNBJTIwc3lzdGVtZCUwQWNsdXN0ZXJETlMlM0ElMEEtJTIwJTIyMTAuMC4wLjAlMjIlMEFjbHVzdGVyRG9tYWluJTNBJTIwY2x1c3Rlci5sb2NhbCUwQWZlYXR1cmVHYXRlcyUzQSUwQSUyMCUyMEdyYWNlZnVsTm9kZVNodXRkb3duJTNBJTIwdHJ1ZSUwQSUyMCUyMElkZW50aWZ5UG9kT1MlM0ElMjBmYWxzZSUwQXByb3RlY3RLZXJuZWxEZWZhdWx0cyUzQSUyMHRydWUlMEFyZWFkT25seVBvcnQlM0ElMjAwJTBBcm90YXRlQ2VydGlmaWNhdGVzJTNBJTIwdHJ1ZSUwQXNlcnZlclRMU0Jvb3RzdHJhcCUzQSUyMHRydWUlMEFzdGF0aWNQb2RQYXRoJTNBJTIwJTJGZXRjJTJGa3ViZXJuZXRlcyUyRm1hbmlmZXN0cyUwQWt1YmVSZXNlcnZlZCUzQSUwQSUyMCUyMGNwdSUzQSUyMDIwMG0lMEElMjAlMjBlcGhlbWVyYWwtc3RvcmFnZSUzQSUyMDFHaSUwQSUyMCUyMG1lbW9yeSUzQSUyMDIwME1pJTBBc3lzdGVtUmVzZXJ2ZWQlM0ElMEElMjAlMjBjcHUlM0ElMjAyMDBtJTBBJTIwJTIwZXBoZW1lcmFsLXN0b3JhZ2UlM0ElMjAxR2klMEElMjAlMjBtZW1vcnklM0ElMjAyMDBNaSUwQWV2aWN0aW9uSGFyZCUzQSUwQSUyMCUyMGltYWdlZnMuYXZhaWxhYmxlJTNBJTIwMTUlMjUlMEElMjAlMjBtZW1vcnkuYXZhaWxhYmxlJTNBJTIwMTAwTWklMEElMjAlMjBub2RlZnMuYXZhaWxhYmxlJTNBJTIwMTAlMjUlMEElMjAlMjBub2RlZnMuaW5vZGVzRnJlZSUzQSUyMDUlMjUlMEF0bHNDaXBoZXJTdWl0ZXMlM0ElMEEtJTIwVExTX0FFU18xMjhfR0NNX1NIQTI1NiUwQS0lMjBUTFNfQUVTXzI1Nl9HQ01fU0hBMzg0JTBBLSUyMFRMU19DSEFDSEEyMF9QT0xZMTMwNV9TSEEyNTYlMEEtJTIwVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2JTBBLSUyMFRMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NCUwQS0lMjBUTFNfRUNESEVfRUNEU0FfV0lUSF9DSEFDSEEyMF9QT0xZMTMwNSUwQS0lMjBUTFNfRUNESEVfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2JTBBLSUyMFRMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQlMEEtJTIwVExTX0VDREhFX1JTQV9XSVRIX0NIQUNIQTIwX1BPTFkxMzA1JTBBdm9sdW1lUGx1Z2luRGlyJTNBJTIwJTJGdmFyJTJGbGliJTJGa3ViZWxldCUyRnZvbHVtZXBsdWdpbnMlMEEiLCJ2ZXJpZmljYXRpb24iOnt9fSwibW9kZSI6NDIwfSx7ImZpbGVzeXN0ZW0iOiJyb290IiwicGF0aCI6Ii9ldGMvc3lzdGVtZC9zeXN0ZW0va3ViZWxldC1oZWFsdGhjaGVjay5zZXJ2aWNlIiwiY29udGVudHMiOnsic291cmNlIjoiZGF0YTosJTVCVW5pdCU1RCUwQVJlcXVpcmVzJTNEa3ViZWxldC5zZXJ2aWNlJTBBQWZ0ZXIlM0RrdWJlbGV0LnNlcnZpY2UlMEElMEElNUJTZXJ2aWNlJTVEJTBBRXhlY1N0YXJ0JTNEJTJGb3B0JTJGYmluJTJGaGVhbHRoLW1vbml0b3Iuc2glMjBrdWJlbGV0JTBBJTBBJTVCSW5zdGFsbCU1RCUwQVdhbnRlZEJ5JTNEbXVsdGktdXNlci50YXJnZXQlMEEiLCJ2ZXJpZmljYXRpb24iOnt9fSwibW9kZSI6NDIwfSx7ImZpbGVzeXN0ZW0iOiJyb290IiwicGF0aCI6Ii9wcm9jL3N5cy9rZXJuZWwvcGFuaWNfb25fb29wcyIsImNvbnRlbnRzIjp7InNvdXJjZSI6ImRhdGE6LDElMEEiLCJ2ZXJpZmljYXRpb24iOnt9fSwibW9kZSI6NDIwfSx7ImZpbGVzeXN0ZW0iOiJyb290IiwicGF0aCI6Ii9wcm9jL3N5cy9rZXJuZWwvcGFuaWMiLCJjb250ZW50cyI6eyJzb3VyY2UiOiJkYXRhOiwxMCUwQSIsInZlcmlmaWNhdGlvbiI6e319LCJtb2RlIjo0MjB9LHsiZmlsZXN5c3RlbSI6InJvb3QiLCJwYXRoIjoiL3Byb2Mvc3lzL3ZtL292ZXJjb21taXRfbWVtb3J5IiwiY29udGVudHMiOnsic291cmNlIjoiZGF0YTosMSUwQSIsInZlcmlmaWNhdGlvbiI6e319LCJtb2RlIjo0MjB9LHsiZmlsZXN5c3RlbSI6InJvb3QiLCJwYXRoIjoiL2V0Yy9zc2gvc3NoZF9jb25maWciLCJjb250ZW50cyI6eyJzb3VyY2UiOiJkYXRhOiwlMjMlMjBVc2UlMjBtb3N0JTIwZGVmYXVsdHMlMjBmb3IlMjBzc2hkJTIwY29uZmlndXJhdGlvbi4lMEFTdWJzeXN0ZW0lMjBzZnRwJTIwaW50ZXJuYWwtc2Z0cCUwQUNsaWVudEFsaXZlSW50ZXJ2YWwlMjAxODAlMEFVc2VETlMlMjBubyUwQVVzZVBBTSUyMHllcyUwQVByaW50TGFzdExvZyUyMG5vJTIwJTIzJTIwaGFuZGxlZCUyMGJ5JTIwUEFNJTBBUHJpbnRNb3RkJTIwbm8lMjAlMjMlMjBoYW5kbGVkJTIwYnklMjBQQU0lMEFQYXNzd29yZEF1dGhlbnRpY2F0aW9uJTIwbm8lMEFDaGFsbGVuZ2VSZXNwb25zZUF1dGhlbnRpY2F0aW9uJTIwbm8lMEEiLCJ2ZXJpZmljYXRpb24iOnt9fSwibW9kZSI6Mzg0fSx7ImZpbGVzeXN0ZW0iOiJyb290IiwicGF0aCI6Ii9ldGMvZG9ja2VyL2RhZW1vbi5qc29uIiwiY29udGVudHMiOnsic291cmNlIjoiZGF0YTosJTdCJTIyZXhlYy1vcHRzJTIyJTNBJTVCJTIybmF0aXZlLmNncm91cGRyaXZlciUzRHN5c3RlbWQlMjIlNUQlMkMlMjJzdG9yYWdlLWRyaXZlciUyMiUzQSUyMm92ZXJsYXkyJTIyJTJDJTIybG9nLWRyaXZlciUyMiUzQSUyMmpzb24tZmlsZSUyMiUyQyUyMmxvZy1vcHRzJTIyJTNBJTdCJTIybWF4LWZpbGUlMjIlM0ElMjI1JTIyJTJDJTIybWF4LXNpemUlMjIlM0ElMjIxMDBtJTIyJTdEJTJDJTIyaW5zZWN1cmUtcmVnaXN0cmllcyUyMiUzQSU1QiUyMjE5Mi4xNjguMTAwLjEwMCUzQTUwMDAlMjIlMkMlMjIxMC4wLjAuMSUzQTUwMDAlMjIlNUQlMkMlMjJyZWdpc3RyeS1taXJyb3JzJTIyJTNBJTVCJTIyaHR0cHMlM0ElMkYlMkZyZWdpc3RyeS5kb2NrZXItY24uY29tJTIyJTVEJTdEJTBBIiwidmVyaWZpY2F0aW9uIjp7fX0sIm1vZGUiOjQyMH0seyJmaWxlc3lzdGVtIjoicm9vdCIsInBhdGgiOiIvZXRjL3N5c3RlbWQvc3lzdGVtL2RvY2tlci5zZXJ2aWNlLmQvMTAtY3VzdG9tLmNvbmYiLCJjb250ZW50cyI6eyJzb3VyY2UiOiJkYXRhOiwlNUJTZXJ2aWNlJTVEJTBBRW52aXJvbm1lbnRGaWxlJTNELSUyRmV0YyUyRmVudmlyb25tZW50JTBBIiwidmVyaWZpY2F0aW9uIjp7fX0sIm1vZGUiOjQyMH1dfSwic3lzdGVtZCI6eyJ1bml0cyI6W3siY29udGVudHMiOiJbSW5zdGFsbF1cbldhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0XG5cbltVbml0XVxuUmVxdWlyZXM9ZG93bmxvYWQtc2NyaXB0LnNlcnZpY2VcblJlcXVpcmVzPW5vZGVpcC5zZXJ2aWNlXG5BZnRlcj1kb3dubG9hZC1zY3JpcHQuc2VydmljZVxuQWZ0ZXI9bm9kZWlwLnNlcnZpY2VcblxuW1NlcnZpY2VdXG5UeXBlPW9uZXNob3RcblJlbWFpbkFmdGVyRXhpdD10cnVlXG5FbnZpcm9ubWVudEZpbGU9LS9ldGMvZW52aXJvbm1lbnRcbkV4ZWNTdGFydD0vb3B0L2Jpbi9zZXR1cFxuIiwiZW5hYmxlZCI6dHJ1ZSwibmFtZSI6InNldHVwLnNlcnZpY2UifSx7ImNvbnRlbnRzIjoiW0luc3RhbGxdXG5XYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldFxuXG5bVW5pdF1cblJlcXVpcmVzPW5ldHdvcmstb25saW5lLnRhcmdldFxuQWZ0ZXI9bmV0d29yay1vbmxpbmUudGFyZ2V0XG5cbltTZXJ2aWNlXVxuVHlwZT1vbmVzaG90XG5SZW1haW5BZnRlckV4aXQ9dHJ1ZVxuRW52aXJvbm1lbnRGaWxlPS0vZXRjL2Vudmlyb25tZW50XG5FeGVjU3RhcnQ9L29wdC9iaW4vZG93bmxvYWQuc2hcbiIsImVuYWJsZWQiOnRydWUsIm5hbWUiOiJkb3dubG9hZC1zY3JpcHQuc2VydmljZSJ9LHsiY29udGVudHMiOiJbVW5pdF1cbkRlc2NyaXB0aW9uPVNldHVwIEt1YmVsZXQgTm9kZSBJUCBFbnZcblJlcXVpcmVzPW5ldHdvcmstb25saW5lLnRhcmdldFxuQWZ0ZXI9bmV0d29yay1vbmxpbmUudGFyZ2V0XG5cbltTZXJ2aWNlXVxuRXhlY1N0YXJ0PS9vcHQvYmluL3NldHVwX25ldF9lbnYuc2hcblJlbWFpbkFmdGVyRXhpdD15ZXNcblR5cGU9b25lc2hvdFxuW0luc3RhbGxdXG5XYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldFxuIiwiZW5hYmxlZCI6dHJ1ZSwibmFtZSI6Im5vZGVpcC5zZXJ2aWNlIn0seyJjb250ZW50cyI6IltVbml0XVxuRGVzY3JpcHRpb249U2V0dXAgU3RhdGljIE5ldHdvcmtpbmdcblJlcXVpcmVzPW5ldHdvcmstb25saW5lLnRhcmdldFxuQWZ0ZXI9bmV0d29yay1vbmxpbmUudGFyZ2V0XG5cbltTZXJ2aWNlXVxuRXhlY1N0YXJ0PS9vcHQvYmluL2NvbmZpZ3VyZV9zdGF0aWNfbmV0d29yay5zaFxuUmVtYWluQWZ0ZXJFeGl0PXllc1xuVHlwZT1vbmVzaG90XG5bSW5zdGFsbF1cbldhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0XG4iLCJlbmFibGVkIjp0cnVlLCJuYW1lIjoic3RhdGljLW5ldHdvcmstc2NyaXB0LnNlcnZpY2UifV19fQ== immutable: true kind: Secret metadata: creationTimestamp: null - name: flatcar-aws-docker-osc-provisioning + name: flatcar-aws-docker-kube-system-osc-provisioning namespace: cloud-init-settings resourceVersion: "1" +type: Opaque diff --git a/pkg/controllers/osc/testdata/secret-kubelet-configuration-containerd.yaml b/pkg/controllers/osc/testdata/secret-kubelet-configuration-containerd.yaml new file mode 100644 index 00000000..3698c4dc --- /dev/null +++ b/pkg/controllers/osc/testdata/secret-kubelet-configuration-containerd.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +data: + cloud-config: I2Nsb3VkLWNvbmZpZwoKc3NoX3B3YXV0aDogbm8Kc3NoX2F1dGhvcml6ZWRfa2V5czoKLSAnc3NoLXJzYSBBQUFBQjNOemFDMXljMkVBQUFBREFRQUJBQUFDQVFEZE9JaFltekNLNURTVkx1M2MnCndyaXRlX2ZpbGVzOgotIHBhdGg6ICcvZXRjL3N5c3RlbWQvam91cm5hbGQuY29uZi5kL21heF9kaXNrX3VzZS5jb25mJwogIGNvbnRlbnQ6IHwtCiAgICBbSm91cm5hbF0KICAgIFN5c3RlbU1heFVzZT01RwogICAgCgotIHBhdGg6ICcvb3B0L2xvYWQta2VybmVsLW1vZHVsZXMuc2gnCiAgcGVybWlzc2lvbnM6ICcwNzU1JwogIGNvbnRlbnQ6IHwtCiAgICAjIS91c3IvYmluL2VudiBiYXNoCiAgICBzZXQgLWV1byBwaXBlZmFpbAogICAgCiAgICBtb2Rwcm9iZSBpcF92cwogICAgbW9kcHJvYmUgaXBfdnNfcnIKICAgIG1vZHByb2JlIGlwX3ZzX3dycgogICAgbW9kcHJvYmUgaXBfdnNfc2gKICAgIAogICAgaWYgbW9kaW5mbyBuZl9jb25udHJhY2tfaXB2NCAmPiAvZGV2L251bGw7IHRoZW4KICAgICAgbW9kcHJvYmUgbmZfY29ubnRyYWNrX2lwdjQKICAgIGVsc2UKICAgICAgbW9kcHJvYmUgbmZfY29ubnRyYWNrCiAgICBmaQogICAgCgotIHBhdGg6ICcvZXRjL3N5c2N0bC5kL2s4cy5jb25mJwogIGNvbnRlbnQ6IHwtCiAgICBuZXQuYnJpZGdlLmJyaWRnZS1uZi1jYWxsLWlwNnRhYmxlcyA9IDEKICAgIG5ldC5icmlkZ2UuYnJpZGdlLW5mLWNhbGwtaXB0YWJsZXMgPSAxCiAgICBrZXJuZWwucGFuaWNfb25fb29wcyA9IDEKICAgIGtlcm5lbC5wYW5pYyA9IDEwCiAgICBuZXQuaXB2NC5pcF9mb3J3YXJkID0gMQogICAgdm0ub3ZlcmNvbW1pdF9tZW1vcnkgPSAxCiAgICBmcy5pbm90aWZ5Lm1heF91c2VyX3dhdGNoZXMgPSAxMDQ4NTc2CiAgICAKCi0gcGF0aDogJy9ldGMvZGVmYXVsdC9ncnViLmQvNjAtc3dhcC1hY2NvdW50aW5nLmNmZycKICBjb250ZW50OiB8LQogICAgIyBBZGRlZCBieSBrdWJlcm1hdGljIG1hY2hpbmUtY29udHJvbGxlcgogICAgIyBFbmFibGUgY2dyb3VwcyBtZW1vcnkgYW5kIHN3YXAgYWNjb3VudGluZwogICAgR1JVQl9DTURMSU5FX0xJTlVYPSJjZ3JvdXBfZW5hYmxlPW1lbW9yeSBzd2FwYWNjb3VudD0xIgogICAgCgotIHBhdGg6ICcvb3B0L2Jpbi9zZXR1cCcKICBwZXJtaXNzaW9uczogJzA3NTUnCiAgY29udGVudDogfC0KICAgICMhL2Jpbi9iYXNoCiAgICBzZXQgLXhldW8gcGlwZWZhaWwKICAgIGlmIHN5c3RlbWN0bCBpcy1hY3RpdmUgdWZ3OyB0aGVuIHN5c3RlbWN0bCBzdG9wIHVmdzsgZmkKICAgIHN5c3RlbWN0bCBtYXNrIHVmdwogICAgc3lzdGVtY3RsIHJlc3RhcnQgc3lzdGVtZC1tb2R1bGVzLWxvYWQuc2VydmljZQogICAgc3lzY3RsIC0tc3lzdGVtCiAgICBzZWQgLWkub3JpZyAnLy4qc3dhcC4qL2QnIC9ldGMvZnN0YWIKICAgIHN3YXBvZmYgLWEKICAgIAogICAgYXB0LWdldCB1cGRhdGUKICAgIAogICAgREVCSUFOX0ZST05URU5EPW5vbmludGVyYWN0aXZlIGFwdC1nZXQgLW8gRHBrZzo6T3B0aW9uczo6PSItLWZvcmNlLWNvbmZkZWYiIC1vIERwa2c6Ok9wdGlvbnM6Oj0iLS1mb3JjZS1jb25mb2xkIiBpbnN0YWxsIC15IFwKICAgICAgY3VybCBcCiAgICAgIGNhLWNlcnRpZmljYXRlcyBcCiAgICAgIGNlcGgtY29tbW9uIFwKICAgICAgY2lmcy11dGlscyBcCiAgICAgIGNvbm50cmFjayBcCiAgICAgIGUyZnNwcm9ncyBcCiAgICAgIGVidGFibGVzIFwKICAgICAgZXRodG9vbCBcCiAgICAgIGdsdXN0ZXJmcy1jbGllbnQgXAogICAgICBpcHRhYmxlcyBcCiAgICAgIGpxIFwKICAgICAga21vZCBcCiAgICAgIG9wZW5zc2gtY2xpZW50IFwKICAgICAgbmZzLWNvbW1vbiBcCiAgICAgIHNvY2F0IFwKICAgICAgdXRpbC1saW51eCBcCiAgICAgIGlwdnNhZG0KICAgIGFwdC1nZXQgdXBkYXRlCiAgICBhcHQtZ2V0IGluc3RhbGwgLXkgYXB0LXRyYW5zcG9ydC1odHRwcyBjYS1jZXJ0aWZpY2F0ZXMgY3VybCBzb2Z0d2FyZS1wcm9wZXJ0aWVzLWNvbW1vbiBsc2ItcmVsZWFzZQogICAgY3VybCAtZnNTTCBodHRwczovL2Rvd25sb2FkLmRvY2tlci5jb20vbGludXgvdWJ1bnR1L2dwZyB8IGFwdC1rZXkgYWRkIC0KICAgIGFkZC1hcHQtcmVwb3NpdG9yeSAiZGViIGh0dHBzOi8vZG93bmxvYWQuZG9ja2VyLmNvbS9saW51eC91YnVudHUgJChsc2JfcmVsZWFzZSAtY3MpIHN0YWJsZSIKICAgIAogICAgY2F0IDw8RU9GIHwgdGVlIC9ldGMvY3JpY3RsLnlhbWwKICAgIHJ1bnRpbWUtZW5kcG9pbnQ6IHVuaXg6Ly8vcnVuL2NvbnRhaW5lcmQvY29udGFpbmVyZC5zb2NrCiAgICBFT0YKICAgIAogICAgbWtkaXIgLXAgL2V0Yy9zeXN0ZW1kL3N5c3RlbS9jb250YWluZXJkLnNlcnZpY2UuZAogICAgY2F0IDw8RU9GIHwgdGVlIC9ldGMvc3lzdGVtZC9zeXN0ZW0vY29udGFpbmVyZC5zZXJ2aWNlLmQvZW52aXJvbm1lbnQuY29uZgogICAgW1NlcnZpY2VdCiAgICBSZXN0YXJ0PWFsd2F5cwogICAgRW52aXJvbm1lbnRGaWxlPS0vZXRjL2Vudmlyb25tZW50CiAgICBFT0YKICAgIAogICAgYXB0LWdldCBpbnN0YWxsIC15IC0tYWxsb3ctZG93bmdyYWRlcyBjb250YWluZXJkLmlvPTEuNCoKICAgIGFwdC1tYXJrIGhvbGQgY29udGFpbmVyZC5pbwogICAgCiAgICBzeXN0ZW1jdGwgZGFlbW9uLXJlbG9hZAogICAgc3lzdGVtY3RsIGVuYWJsZSAtLW5vdyBjb250YWluZXJkCiAgICBvcHRfYmluPS9vcHQvYmluCiAgICBjbmlfYmluX2Rpcj0vb3B0L2NuaS9iaW4KICAgIG1rZGlyIC1wIC9ldGMvY25pL25ldC5kIC9ldGMva3ViZXJuZXRlcy9keW5hbWljLWNvbmZpZy1kaXIgL2V0Yy9rdWJlcm5ldGVzL21hbmlmZXN0cyAiJG9wdF9iaW4iICIkY25pX2Jpbl9kaXIiCiAgICBhcmNoPSR7SE9TVF9BUkNILX0KICAgIGlmIFsgLXogIiRhcmNoIiBdCiAgICB0aGVuCiAgICBjYXNlICQodW5hbWUgLW0pIGluCiAgICB4ODZfNjQpCiAgICAgICAgYXJjaD0iYW1kNjQiCiAgICAgICAgOzsKICAgIGFhcmNoNjQpCiAgICAgICAgYXJjaD0iYXJtNjQiCiAgICAgICAgOzsKICAgICopCiAgICAgICAgZWNobyAidW5zdXBwb3J0ZWQgQ1BVIGFyY2hpdGVjdHVyZSwgZXhpdGluZyIKICAgICAgICBleGl0IDEKICAgICAgICA7OwogICAgZXNhYwogICAgZmkKICAgIENOSV9WRVJTSU9OPSIke0NOSV9WRVJTSU9OOi12MC44Ljd9IgogICAgY25pX2Jhc2VfdXJsPSJodHRwczovL2dpdGh1Yi5jb20vY29udGFpbmVybmV0d29ya2luZy9wbHVnaW5zL3JlbGVhc2VzL2Rvd25sb2FkLyRDTklfVkVSU0lPTiIKICAgIGNuaV9maWxlbmFtZT0iY25pLXBsdWdpbnMtbGludXgtJGFyY2gtJENOSV9WRVJTSU9OLnRneiIKICAgIGN1cmwgLUxmbyAiJGNuaV9iaW5fZGlyLyRjbmlfZmlsZW5hbWUiICIkY25pX2Jhc2VfdXJsLyRjbmlfZmlsZW5hbWUiCiAgICBjbmlfc3VtPSQoY3VybCAtTGYgIiRjbmlfYmFzZV91cmwvJGNuaV9maWxlbmFtZS5zaGEyNTYiKQogICAgY2QgIiRjbmlfYmluX2RpciIKICAgIHNoYTI1NnN1bSAtYyA8PDwiJGNuaV9zdW0iCiAgICB0YXIgeHZmICIkY25pX2ZpbGVuYW1lIgogICAgcm0gLWYgIiRjbmlfZmlsZW5hbWUiCiAgICBjZCAtCiAgICBLVUJFX1ZFUlNJT049IiR7S1VCRV9WRVJTSU9OOi12MS4yMi4xfSIKICAgIGt1YmVfZGlyPSIkb3B0X2Jpbi9rdWJlcm5ldGVzLSRLVUJFX1ZFUlNJT04iCiAgICBrdWJlX2Jhc2VfdXJsPSJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20va3ViZXJuZXRlcy1yZWxlYXNlL3JlbGVhc2UvJEtVQkVfVkVSU0lPTi9iaW4vbGludXgvJGFyY2giCiAgICBrdWJlX3N1bV9maWxlPSIka3ViZV9kaXIvc2hhMjU2IgogICAgbWtkaXIgLXAgIiRrdWJlX2RpciIKICAgIDogPiIka3ViZV9zdW1fZmlsZSIKICAgIAogICAgZm9yIGJpbiBpbiBrdWJlbGV0IGt1YmVhZG0ga3ViZWN0bDsgZG8KICAgICAgICBjdXJsIC1MZm8gIiRrdWJlX2Rpci8kYmluIiAiJGt1YmVfYmFzZV91cmwvJGJpbiIKICAgICAgICBjaG1vZCAreCAiJGt1YmVfZGlyLyRiaW4iCiAgICAgICAgc3VtPSQoY3VybCAtTGYgIiRrdWJlX2Jhc2VfdXJsLyRiaW4uc2hhMjU2IikKICAgICAgICBlY2hvICIkc3VtICAka3ViZV9kaXIvJGJpbiIgPj4iJGt1YmVfc3VtX2ZpbGUiCiAgICBkb25lCiAgICBzaGEyNTZzdW0gLWMgIiRrdWJlX3N1bV9maWxlIgogICAgCiAgICBmb3IgYmluIGluIGt1YmVsZXQga3ViZWFkbSBrdWJlY3RsOyBkbwogICAgICAgIGxuIC1zZiAiJGt1YmVfZGlyLyRiaW4iICIkb3B0X2JpbiIvJGJpbgogICAgZG9uZQogICAgCiAgICBpZiBbWyAhIC14IC9vcHQvYmluL2hlYWx0aC1tb25pdG9yLnNoIF1dOyB0aGVuCiAgICAgICAgY3VybCAtTGZvIC9vcHQvYmluL2hlYWx0aC1tb25pdG9yLnNoIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9rdWJlcm1hdGljL21hY2hpbmUtY29udHJvbGxlci83OTY3YTBhZjJiNzVmMjlhZDJhYjIyN2VlYWEyNmVhN2IwZjJmYmRlL3BrZy91c2VyZGF0YS9zY3JpcHRzL2hlYWx0aC1tb25pdG9yLnNoCiAgICAgICAgY2htb2QgK3ggL29wdC9iaW4vaGVhbHRoLW1vbml0b3Iuc2gKICAgIGZpCiAgICAKICAgICMgc2V0IGt1YmVsZXQgbm9kZWlwIGVudmlyb25tZW50IHZhcmlhYmxlCiAgICAvb3B0L2Jpbi9zZXR1cF9uZXRfZW52LnNoCiAgICAKICAgIHN5c3RlbWN0bCBlbmFibGUgLS1ub3cga3ViZWxldAogICAgc3lzdGVtY3RsIGVuYWJsZSAtLW5vdyAtLW5vLWJsb2NrIGt1YmVsZXQtaGVhbHRoY2hlY2suc2VydmljZQogICAgCgotIHBhdGg6ICcvb3B0L2Jpbi9zdXBlcnZpc2Uuc2gnCiAgcGVybWlzc2lvbnM6ICcwNzU1JwogIGNvbnRlbnQ6IHwtCiAgICAjIS9iaW4vYmFzaAogICAgc2V0IC14ZXVvIHBpcGVmYWlsCiAgICB3aGlsZSAhICIkQCI7IGRvCiAgICAgIHNsZWVwIDEKICAgIGRvbmUKICAgIAoKLSBwYXRoOiAnL2V0Yy9zeXN0ZW1kL3N5c3RlbS9rdWJlbGV0LnNlcnZpY2UnCiAgY29udGVudDogfC0KICAgIFtVbml0XQogICAgQWZ0ZXI9Y29udGFpbmVyZC5zZXJ2aWNlCiAgICBSZXF1aXJlcz1jb250YWluZXJkLnNlcnZpY2UKICAgIAogICAgRGVzY3JpcHRpb249a3ViZWxldDogVGhlIEt1YmVybmV0ZXMgTm9kZSBBZ2VudAogICAgRG9jdW1lbnRhdGlvbj1odHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9ob21lLwogICAgCiAgICBbU2VydmljZV0KICAgIFJlc3RhcnQ9YWx3YXlzCiAgICBTdGFydExpbWl0SW50ZXJ2YWw9MAogICAgUmVzdGFydFNlYz0xMAogICAgQ1BVQWNjb3VudGluZz10cnVlCiAgICBNZW1vcnlBY2NvdW50aW5nPXRydWUKICAgIAogICAgRW52aXJvbm1lbnQ9IlBBVEg9L29wdC9iaW46L2JpbjovdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluLyIKICAgIEVudmlyb25tZW50RmlsZT0tL2V0Yy9lbnZpcm9ubWVudAogICAgCiAgICBFeGVjU3RhcnRQcmU9L2Jpbi9iYXNoIC9vcHQvbG9hZC1rZXJuZWwtbW9kdWxlcy5zaAogICAgRXhlY1N0YXJ0UHJlPS9iaW4vYmFzaCAvb3B0L2Jpbi9zZXR1cF9uZXRfZW52LnNoCiAgICBFeGVjU3RhcnQ9L29wdC9iaW4va3ViZWxldCAkS1VCRUxFVF9FWFRSQV9BUkdTIFwKICAgICAgLS1ib290c3RyYXAta3ViZWNvbmZpZz0vZXRjL2t1YmVybmV0ZXMvYm9vdHN0cmFwLWt1YmVsZXQuY29uZiBcCiAgICAgIC0ta3ViZWNvbmZpZz0vdmFyL2xpYi9rdWJlbGV0L2t1YmVjb25maWcgXAogICAgICAtLWNvbmZpZz0vZXRjL2t1YmVybmV0ZXMva3ViZWxldC5jb25mIFwKICAgICAgLS1uZXR3b3JrLXBsdWdpbj1jbmkgXAogICAgICAtLWNlcnQtZGlyPS9ldGMva3ViZXJuZXRlcy9wa2kgXAogICAgICAtLWNsb3VkLXByb3ZpZGVyPWF3cyBcCiAgICAgIC0tY2xvdWQtY29uZmlnPS9ldGMva3ViZXJuZXRlcy9jbG91ZC1jb25maWcgXAogICAgICAtLWR5bmFtaWMtY29uZmlnLWRpcj0vZXRjL2t1YmVybmV0ZXMvZHluYW1pYy1jb25maWctZGlyIFwKICAgICAgLS1mZWF0dXJlLWdhdGVzPUR5bmFtaWNLdWJlbGV0Q29uZmlnPXRydWUgXAogICAgICAtLWV4aXQtb24tbG9jay1jb250ZW50aW9uIFwKICAgICAgLS1sb2NrLWZpbGU9L3RtcC9rdWJlbGV0LmxvY2sgXAogICAgICAtLWNvbnRhaW5lci1ydW50aW1lPXJlbW90ZSBcCiAgICAgIC0tY29udGFpbmVyLXJ1bnRpbWUtZW5kcG9pbnQ9dW5peDovLy9ydW4vY29udGFpbmVyZC9jb250YWluZXJkLnNvY2sgXAogICAgICAtLW5vZGUtaXAgJHtLVUJFTEVUX05PREVfSVB9CiAgICAKICAgIFtJbnN0YWxsXQogICAgV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKICAgIAoKLSBwYXRoOiAnL2V0Yy9zeXN0ZW1kL3N5c3RlbS9rdWJlbGV0LnNlcnZpY2UuZC9leHRyYXMuY29uZicKICBjb250ZW50OiB8LQogICAgW1NlcnZpY2VdCiAgICBFbnZpcm9ubWVudD0iS1VCRUxFVF9FWFRSQV9BUkdTPS0tcmVzb2x2LWNvbmY9L3J1bi9zeXN0ZW1kL3Jlc29sdmUvcmVzb2x2LmNvbmYiCiAgICAKCi0gcGF0aDogJy9ldGMva3ViZXJuZXRlcy9jbG91ZC1jb25maWcnCiAgcGVybWlzc2lvbnM6ICcwNjAwJwogIGNvbnRlbnQ6IHwtCiAgICBbZ2xvYmFsXQogICAgWm9uZT0iIgogICAgVlBDPSIiCiAgICBTdWJuZXRJRD0idGVzdC1zdWJuZXQiCiAgICAKICAgIAoKLSBwYXRoOiAnL29wdC9iaW4vc2V0dXBfbmV0X2Vudi5zaCcKICBwZXJtaXNzaW9uczogJzA3NTUnCiAgY29udGVudDogfC0KICAgICMhL3Vzci9iaW4vZW52IGJhc2gKICAgIGVjaG9kYXRlKCkgewogICAgICBlY2hvICJbJChkYXRlIC1JcyldIiAiJEAiCiAgICB9CiAgICAKICAgICMgZ2V0IHRoZSBkZWZhdWx0IGludGVyZmFjZSBJUCBhZGRyZXNzCiAgICBERUZBVUxUX0lGQ19JUD0kKGlwIC1vICByb3V0ZSBnZXQgMSB8IGdyZXAgLW9QICJzcmMgXEtcUysiKQogICAgCiAgICBpZiBbIC16ICIke0RFRkFVTFRfSUZDX0lQfSIgXQogICAgdGhlbgogICAgICBlY2hvZGF0ZSAiRmFpbGVkIHRvIGdldCBJUCBhZGRyZXNzIGZvciB0aGUgZGVmYXVsdCByb3V0ZSBpbnRlcmZhY2UiCiAgICAgIGV4aXQgMQogICAgZmkKICAgIAogICAgICMgZ2V0IHRoZSBmdWxsIGhvc3RuYW1lCiAgICBGVUxMX0hPU1ROQU1FPSQoaG9zdG5hbWUgLWYpCiAgICAKICAgICMgd3JpdGUgdGhlIG5vZGVpcF9lbnYgZmlsZQogICAgIyB3ZSBuZWVkIHRoZSBsaW5lIGJlbG93IGJlY2F1c2UgZmxhdGNhciBoYXMgdGhlIHNhbWUgc3RyaW5nICJjb3Jlb3MiIGluIHRoYXQgZmlsZQogICAgaWYgZ3JlcCAtcSBjb3Jlb3MgL2V0Yy9vcy1yZWxlYXNlCiAgICB0aGVuCiAgICAgIGVjaG8gIktVQkVMRVRfTk9ERV9JUD0ke0RFRkFVTFRfSUZDX0lQfVxuS1VCRUxFVF9IT1NUTkFNRT0ke0ZVTExfSE9TVE5BTUV9IiA+IC9ldGMva3ViZXJuZXRlcy9ub2RlaXAuY29uZgogICAgZWxpZiBbICEgLWQgL2V0Yy9zeXN0ZW1kL3N5c3RlbS9rdWJlbGV0LnNlcnZpY2UuZCBdCiAgICB0aGVuCiAgICAgIGVjaG9kYXRlICJDYW4ndCBmaW5kIGt1YmVsZXQgc2VydmljZSBleHRyYXMgZGlyZWN0b3J5IgogICAgICBleGl0IDEKICAgIGVsc2UKICAgICAgZWNobyAtZSAiW1NlcnZpY2VdXG5FbnZpcm9ubWVudD1cIktVQkVMRVRfTk9ERV9JUD0ke0RFRkFVTFRfSUZDX0lQfVwiXG5FbnZpcm9ubWVudD1cIktVQkVMRVRfSE9TVE5BTUU9JHtGVUxMX0hPU1ROQU1FfVwiIiA+IC9ldGMvc3lzdGVtZC9zeXN0ZW0va3ViZWxldC5zZXJ2aWNlLmQvbm9kZWlwLmNvbmYKICAgIGZpCiAgICAKCi0gcGF0aDogJy9ldGMva3ViZXJuZXRlcy9wa2kvY2EuY3J0JwogIGNvbnRlbnQ6IHwtCiAgICAtLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KICAgIE1JSUVXakNDQTBLZ0F3SUJBZ0lKQUxmUmxXc0k4WVFITUEwR0NTcUdTSWIzRFFFQkJRVUFNSHN4Q3pBSkJnTlYKICAgIEJBWVRBbFZUTVFzd0NRWURWUVFJRXdKRFFURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeVlXNWphWE5qYnpFVU1CSUcKICAgIEExVUVDaE1MUW5KaFpHWnBkSHBwYm1NeEVqQVFCZ05WQkFNVENXeHZZMkZzYUc5emRERWRNQnNHQ1NxR1NJYjMKICAgIERRRUpBUllPWW5KaFpFQmtZVzVuWVM1amIyMHdIaGNOTVRRd056RTFNakEwTmpBMVdoY05NVGN3TlRBME1qQTAKICAgIE5qQTFXakI3TVFzd0NRWURWUVFHRXdKVlV6RUxNQWtHQTFVRUNCTUNRMEV4RmpBVUJnTlZCQWNURFZOaGJpQkcKICAgIGNtRnVZMmx6WTI4eEZEQVNCZ05WQkFvVEMwSnlZV1JtYVhSNmFXNWpNUkl3RUFZRFZRUURFd2xzYjJOaGJHaHYKICAgIGMzUXhIVEFiQmdrcWhraUc5dzBCQ1FFV0RtSnlZV1JBWkdGdVoyRXVZMjl0TUlJQklqQU5CZ2txaGtpRzl3MEIKICAgIEFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXQ1ZkFqcDRmVGNla1dVVGZ6c3Awa3lpaDFPWWJzR0wwS1gxZVJiU1MKICAgIFI4T2QwKzlRNjJIeW55K0dGd01UYjRBL0tVOG1zc29IdmNjZVNBQWJ3ZmJ4RksvK3M1MVRvYnFVbk9SWnJPb1QKICAgIFpqa1V5Z2J5WERTSzk5WUJiY1IxUGlwOHZ3TVRtNFhLdUx0Q2lnZUJCZGpqQVFkZ1VPMjhMRU5HbHNNbm1lWWsKICAgIEpmT0RWR25WbXI1THRiOUFOQThJS3lUZnNuSEo0aU9DUy9QbFBiVWoycTdZbm9WTHBvc1VCTWxnVWIvQ3lrWDMKICAgIG1Pb0xiNHlKSlF5QS9pU1Q2WnhpSUVqMzZENHlXWjVsZzdZSmwrVWlpQlFIR0NuUGRHeWlwcVYwNmV4MGhlWVcKICAgIGNhaVc4TFdaU1VROTNqUStXVkNIOGhUN0RRTzFkbXN2VW1YbHEvSmVBbHdRL1FJREFRQUJvNEhnTUlIZE1CMEcKICAgIEExVWREZ1FXQkJSY0FST3RoUzRQNFU3dlRmakJ5QzU2OVI3RTZEQ0JyUVlEVlIwakJJR2xNSUdpZ0JSY0FST3QKICAgIGhTNFA0VTd2VGZqQnlDNTY5UjdFNktGL3BIMHdlekVMTUFrR0ExVUVCaE1DVlZNeEN6QUpCZ05WQkFnVEFrTkIKICAgIE1SWXdGQVlEVlFRSEV3MVRZVzRnUm5KaGJtTnBjMk52TVJRd0VnWURWUVFLRXd0Q2NtRmtabWwwZW1sdVl6RVMKICAgIE1CQUdBMVVFQXhNSmJHOWpZV3hvYjNOME1SMHdHd1lKS29aSWh2Y05BUWtCRmc1aWNtRmtRR1JoYm1kaExtTnYKICAgIGJZSUpBTGZSbFdzSThZUUhNQXdHQTFVZEV3UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUZCUUFEZ2dFQkFHNmgKICAgIFU5ZjlzTkgwLzZvQmJHR3kyRVZVMFVnSVRVUUlyRldvOXJGa3JXNWsvWGtEalFtKzNsempUMGlHUjRJeEUvQW8KICAgIGVVNnNRaHVhN3dyV2VGRW40N0dMOThsbkNzSmREN29aTmhGbVE5NVRiL0xuRFVqczVZajliclAwTld6WGZZVTQKICAgIFVLMlpuSU5KUmNKcEI4aVJDYUN4RThEZGNVRjBYcUlFcTZwQTI3MnNub0xtaVhMTXZObDNrWUVkbStqZTZ2b0QKICAgIDU4U05WRVVzenR6UXlYbUpFaENwd1ZJMEE2UUNqelhqK3F2cG13M1paSGk4SndYZWk4WlpCTFRTRkJraThaN24KICAgIHNIOUJCSDM4L1N6VW1BTjRRSFNQeTFnanFtMDBPQUU4TmFZRGtoL2J6RTRkN21MR0dNV3AvV0UzS1BTdTgySEYKICAgIGtQZTZYb1NiaUxtL2t4azMyVDA9CiAgICAtLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCiAgICAKCi0gcGF0aDogJy9ldGMvc3lzdGVtZC9zeXN0ZW0vc2V0dXAuc2VydmljZScKICBwZXJtaXNzaW9uczogJzA2NDQnCiAgY29udGVudDogfC0KICAgIFtJbnN0YWxsXQogICAgV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKICAgIAogICAgW1VuaXRdCiAgICBSZXF1aXJlcz1uZXR3b3JrLW9ubGluZS50YXJnZXQKICAgIEFmdGVyPW5ldHdvcmstb25saW5lLnRhcmdldAogICAgCiAgICBbU2VydmljZV0KICAgIFR5cGU9b25lc2hvdAogICAgUmVtYWluQWZ0ZXJFeGl0PXRydWUKICAgIEVudmlyb25tZW50RmlsZT0tL2V0Yy9lbnZpcm9ubWVudAogICAgRXhlY1N0YXJ0PS9vcHQvYmluL3N1cGVydmlzZS5zaCAvb3B0L2Jpbi9zZXR1cAogICAgCgotIHBhdGg6ICcvZXRjL3Byb2ZpbGUuZC9vcHQtYmluLXBhdGguc2gnCiAgcGVybWlzc2lvbnM6ICcwNjQ0JwogIGNvbnRlbnQ6IHwtCiAgICBleHBvcnQgUEFUSD0iL29wdC9iaW46JFBBVEgiCiAgICAKCi0gcGF0aDogJy9ldGMva3ViZXJuZXRlcy9rdWJlbGV0LmNvbmYnCiAgY29udGVudDogfC0KICAgIGFwaVZlcnNpb246IGt1YmVsZXQuY29uZmlnLms4cy5pby92MWJldGExCiAgICBraW5kOiBLdWJlbGV0Q29uZmlndXJhdGlvbgogICAgYXV0aGVudGljYXRpb246CiAgICAgIGFub255bW91czoKICAgICAgICBlbmFibGVkOiBmYWxzZQogICAgICB3ZWJob29rOgogICAgICAgIGVuYWJsZWQ6IHRydWUKICAgICAgeDUwOToKICAgICAgICBjbGllbnRDQUZpbGU6IC9ldGMva3ViZXJuZXRlcy9wa2kvY2EuY3J0CiAgICBhdXRob3JpemF0aW9uOgogICAgICBtb2RlOiBXZWJob29rCiAgICBjZ3JvdXBEcml2ZXI6IHN5c3RlbWQKICAgIGNsdXN0ZXJETlM6CiAgICAtICIxMC4wLjAuMCIKICAgIGNsdXN0ZXJEb21haW46IGNsdXN0ZXIubG9jYWwKICAgIGNvbnRhaW5lckxvZ01heFNpemU6IDMwME1pCiAgICBjb250YWluZXJMb2dNYXhGaWxlczogMzAKICAgIGZlYXR1cmVHYXRlczoKICAgICAgR3JhY2VmdWxOb2RlU2h1dGRvd246IHRydWUKICAgICAgSWRlbnRpZnlQb2RPUzogZmFsc2UKICAgIHByb3RlY3RLZXJuZWxEZWZhdWx0czogdHJ1ZQogICAgcmVhZE9ubHlQb3J0OiAwCiAgICByb3RhdGVDZXJ0aWZpY2F0ZXM6IHRydWUKICAgIHNlcnZlclRMU0Jvb3RzdHJhcDogdHJ1ZQogICAgc3RhdGljUG9kUGF0aDogL2V0Yy9rdWJlcm5ldGVzL21hbmlmZXN0cwogICAga3ViZVJlc2VydmVkOgogICAgICBjcHU6IDMwbQogICAgICBlcGhlbWVyYWwtc3RvcmFnZTogMzBHaQogICAgc3lzdGVtUmVzZXJ2ZWQ6CiAgICAgIGNwdTogMzBtCiAgICAgIGVwaGVtZXJhbC1zdG9yYWdlOiAzMEdpCiAgICBldmljdGlvbkhhcmQ6CiAgICAgIG1lbW9yeS5hdmFpbGFibGU6IDMwTWkKICAgIHRsc0NpcGhlclN1aXRlczoKICAgIC0gVExTX0FFU18xMjhfR0NNX1NIQTI1NgogICAgLSBUTFNfQUVTXzI1Nl9HQ01fU0hBMzg0CiAgICAtIFRMU19DSEFDSEEyMF9QT0xZMTMwNV9TSEEyNTYKICAgIC0gVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CiAgICAtIFRMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAogICAgLSBUTFNfRUNESEVfRUNEU0FfV0lUSF9DSEFDSEEyMF9QT0xZMTMwNQogICAgLSBUTFNfRUNESEVfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CiAgICAtIFRMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKICAgIC0gVExTX0VDREhFX1JTQV9XSVRIX0NIQUNIQTIwX1BPTFkxMzA1CiAgICB2b2x1bWVQbHVnaW5EaXI6IC92YXIvbGliL2t1YmVsZXQvdm9sdW1lcGx1Z2lucwogICAgCgotIHBhdGg6ICcvZXRjL3N5c3RlbWQvc3lzdGVtL2t1YmVsZXQtaGVhbHRoY2hlY2suc2VydmljZScKICBwZXJtaXNzaW9uczogJzA2NDQnCiAgY29udGVudDogfC0KICAgIFtVbml0XQogICAgUmVxdWlyZXM9a3ViZWxldC5zZXJ2aWNlCiAgICBBZnRlcj1rdWJlbGV0LnNlcnZpY2UKICAgIAogICAgW1NlcnZpY2VdCiAgICBFeGVjU3RhcnQ9L29wdC9iaW4vaGVhbHRoLW1vbml0b3Iuc2gga3ViZWxldAogICAgCiAgICBbSW5zdGFsbF0KICAgIFdhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CiAgICAKCi0gcGF0aDogJy9ldGMvY29udGFpbmVyZC9jb25maWcudG9tbCcKICBwZXJtaXNzaW9uczogJzA2NDQnCiAgY29udGVudDogfC0KICAgIHZlcnNpb24gPSAyCiAgICAKICAgIFttZXRyaWNzXQogICAgYWRkcmVzcyA9ICIxMjcuMC4wLjE6MTMzOCIKICAgIAogICAgW3BsdWdpbnNdCiAgICBbcGx1Z2lucy4iaW8uY29udGFpbmVyZC5ncnBjLnYxLmNyaSJdCiAgICBzYW5kYm94X2ltYWdlID0gIjE5Mi4xNjguMTAwLjEwMDo1MDAwL2t1YmVybmV0ZXMvcGF1c2U6djMuMSIKICAgIFtwbHVnaW5zLiJpby5jb250YWluZXJkLmdycGMudjEuY3JpIi5jb250YWluZXJkXQogICAgW3BsdWdpbnMuImlvLmNvbnRhaW5lcmQuZ3JwYy52MS5jcmkiLmNvbnRhaW5lcmQucnVudGltZXNdCiAgICBbcGx1Z2lucy4iaW8uY29udGFpbmVyZC5ncnBjLnYxLmNyaSIuY29udGFpbmVyZC5ydW50aW1lcy5ydW5jXQogICAgcnVudGltZV90eXBlID0gImlvLmNvbnRhaW5lcmQucnVuYy52MiIKICAgIFtwbHVnaW5zLiJpby5jb250YWluZXJkLmdycGMudjEuY3JpIi5jb250YWluZXJkLnJ1bnRpbWVzLnJ1bmMub3B0aW9uc10KICAgIFN5c3RlbWRDZ3JvdXAgPSB0cnVlCiAgICBbcGx1Z2lucy4iaW8uY29udGFpbmVyZC5ncnBjLnYxLmNyaSIucmVnaXN0cnldCiAgICBbcGx1Z2lucy4iaW8uY29udGFpbmVyZC5ncnBjLnYxLmNyaSIucmVnaXN0cnkubWlycm9yc10KICAgIFtwbHVnaW5zLiJpby5jb250YWluZXJkLmdycGMudjEuY3JpIi5yZWdpc3RyeS5taXJyb3JzLiJkb2NrZXIuaW8iXQogICAgZW5kcG9pbnQgPSBbImh0dHBzOi8vcmVnaXN0cnkuZG9ja2VyLWNuLmNvbSJdCiAgICBbcGx1Z2lucy4iaW8uY29udGFpbmVyZC5ncnBjLnYxLmNyaSIucmVnaXN0cnkuY29uZmlnc10KICAgIFtwbHVnaW5zLiJpby5jb250YWluZXJkLmdycGMudjEuY3JpIi5yZWdpc3RyeS5jb25maWdzLiIxMC4wLjAuMTo1MDAwIl0KICAgIFtwbHVnaW5zLiJpby5jb250YWluZXJkLmdycGMudjEuY3JpIi5yZWdpc3RyeS5jb25maWdzLiIxMC4wLjAuMTo1MDAwIi50bHNdCiAgICBpbnNlY3VyZV9za2lwX3ZlcmlmeSA9IHRydWUKICAgIFtwbHVnaW5zLiJpby5jb250YWluZXJkLmdycGMudjEuY3JpIi5yZWdpc3RyeS5jb25maWdzLiIxOTIuMTY4LjEwMC4xMDA6NTAwMCJdCiAgICBbcGx1Z2lucy4iaW8uY29udGFpbmVyZC5ncnBjLnYxLmNyaSIucmVnaXN0cnkuY29uZmlncy4iMTkyLjE2OC4xMDAuMTAwOjUwMDAiLnRsc10KICAgIGluc2VjdXJlX3NraXBfdmVyaWZ5ID0gdHJ1ZQogICAgCiAgICAKCmJvb3RjbWQ6Ci0gZWNobyBoZWxsbwotIGVjaG8gd29ybGQKCnJoX3N1YnNjcmlwdGlvbjoKICAgIHBhc3N3b3JkOiBwYXNzd29yZAogICAgdXNlcm5hbWU6IHVzZXJuYW1l +immutable: true +kind: Secret +metadata: + creationTimestamp: null + name: kubelet-configuration-kube-system-osc-provisioning + namespace: cloud-init-settings + resourceVersion: "1" +type: Opaque diff --git a/pkg/controllers/osc/testdata/secret-kubelet-configuration-docker.yaml b/pkg/controllers/osc/testdata/secret-kubelet-configuration-docker.yaml new file mode 100644 index 00000000..19635782 --- /dev/null +++ b/pkg/controllers/osc/testdata/secret-kubelet-configuration-docker.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +data: + cloud-config: I2Nsb3VkLWNvbmZpZwoKc3NoX3B3YXV0aDogbm8Kc3NoX2F1dGhvcml6ZWRfa2V5czoKLSAnc3NoLXJzYSBBQUFBQjNOemFDMXljMkVBQUFBREFRQUJBQUFDQVFEZE9JaFltekNLNURTVkx1M2MnCndyaXRlX2ZpbGVzOgotIHBhdGg6ICcvZXRjL3N5c3RlbWQvam91cm5hbGQuY29uZi5kL21heF9kaXNrX3VzZS5jb25mJwogIGNvbnRlbnQ6IHwtCiAgICBbSm91cm5hbF0KICAgIFN5c3RlbU1heFVzZT01RwogICAgCgotIHBhdGg6ICcvb3B0L2xvYWQta2VybmVsLW1vZHVsZXMuc2gnCiAgcGVybWlzc2lvbnM6ICcwNzU1JwogIGNvbnRlbnQ6IHwtCiAgICAjIS91c3IvYmluL2VudiBiYXNoCiAgICBzZXQgLWV1byBwaXBlZmFpbAogICAgCiAgICBtb2Rwcm9iZSBpcF92cwogICAgbW9kcHJvYmUgaXBfdnNfcnIKICAgIG1vZHByb2JlIGlwX3ZzX3dycgogICAgbW9kcHJvYmUgaXBfdnNfc2gKICAgIAogICAgaWYgbW9kaW5mbyBuZl9jb25udHJhY2tfaXB2NCAmPiAvZGV2L251bGw7IHRoZW4KICAgICAgbW9kcHJvYmUgbmZfY29ubnRyYWNrX2lwdjQKICAgIGVsc2UKICAgICAgbW9kcHJvYmUgbmZfY29ubnRyYWNrCiAgICBmaQogICAgCgotIHBhdGg6ICcvZXRjL3N5c2N0bC5kL2s4cy5jb25mJwogIGNvbnRlbnQ6IHwtCiAgICBuZXQuYnJpZGdlLmJyaWRnZS1uZi1jYWxsLWlwNnRhYmxlcyA9IDEKICAgIG5ldC5icmlkZ2UuYnJpZGdlLW5mLWNhbGwtaXB0YWJsZXMgPSAxCiAgICBrZXJuZWwucGFuaWNfb25fb29wcyA9IDEKICAgIGtlcm5lbC5wYW5pYyA9IDEwCiAgICBuZXQuaXB2NC5pcF9mb3J3YXJkID0gMQogICAgdm0ub3ZlcmNvbW1pdF9tZW1vcnkgPSAxCiAgICBmcy5pbm90aWZ5Lm1heF91c2VyX3dhdGNoZXMgPSAxMDQ4NTc2CiAgICAKCi0gcGF0aDogJy9ldGMvZGVmYXVsdC9ncnViLmQvNjAtc3dhcC1hY2NvdW50aW5nLmNmZycKICBjb250ZW50OiB8LQogICAgIyBBZGRlZCBieSBrdWJlcm1hdGljIG1hY2hpbmUtY29udHJvbGxlcgogICAgIyBFbmFibGUgY2dyb3VwcyBtZW1vcnkgYW5kIHN3YXAgYWNjb3VudGluZwogICAgR1JVQl9DTURMSU5FX0xJTlVYPSJjZ3JvdXBfZW5hYmxlPW1lbW9yeSBzd2FwYWNjb3VudD0xIgogICAgCgotIHBhdGg6ICcvb3B0L2Jpbi9zZXR1cCcKICBwZXJtaXNzaW9uczogJzA3NTUnCiAgY29udGVudDogfC0KICAgICMhL2Jpbi9iYXNoCiAgICBzZXQgLXhldW8gcGlwZWZhaWwKICAgIGlmIHN5c3RlbWN0bCBpcy1hY3RpdmUgdWZ3OyB0aGVuIHN5c3RlbWN0bCBzdG9wIHVmdzsgZmkKICAgIHN5c3RlbWN0bCBtYXNrIHVmdwogICAgc3lzdGVtY3RsIHJlc3RhcnQgc3lzdGVtZC1tb2R1bGVzLWxvYWQuc2VydmljZQogICAgc3lzY3RsIC0tc3lzdGVtCiAgICBzZWQgLWkub3JpZyAnLy4qc3dhcC4qL2QnIC9ldGMvZnN0YWIKICAgIHN3YXBvZmYgLWEKICAgIAogICAgYXB0LWdldCB1cGRhdGUKICAgIAogICAgREVCSUFOX0ZST05URU5EPW5vbmludGVyYWN0aXZlIGFwdC1nZXQgLW8gRHBrZzo6T3B0aW9uczo6PSItLWZvcmNlLWNvbmZkZWYiIC1vIERwa2c6Ok9wdGlvbnM6Oj0iLS1mb3JjZS1jb25mb2xkIiBpbnN0YWxsIC15IFwKICAgICAgY3VybCBcCiAgICAgIGNhLWNlcnRpZmljYXRlcyBcCiAgICAgIGNlcGgtY29tbW9uIFwKICAgICAgY2lmcy11dGlscyBcCiAgICAgIGNvbm50cmFjayBcCiAgICAgIGUyZnNwcm9ncyBcCiAgICAgIGVidGFibGVzIFwKICAgICAgZXRodG9vbCBcCiAgICAgIGdsdXN0ZXJmcy1jbGllbnQgXAogICAgICBpcHRhYmxlcyBcCiAgICAgIGpxIFwKICAgICAga21vZCBcCiAgICAgIG9wZW5zc2gtY2xpZW50IFwKICAgICAgbmZzLWNvbW1vbiBcCiAgICAgIHNvY2F0IFwKICAgICAgdXRpbC1saW51eCBcCiAgICAgIGlwdnNhZG0KICAgIGFwdC1nZXQgdXBkYXRlCiAgICBhcHQtZ2V0IGluc3RhbGwgLXkgYXB0LXRyYW5zcG9ydC1odHRwcyBjYS1jZXJ0aWZpY2F0ZXMgY3VybCBzb2Z0d2FyZS1wcm9wZXJ0aWVzLWNvbW1vbiBsc2ItcmVsZWFzZQogICAgY3VybCAtZnNTTCBodHRwczovL2Rvd25sb2FkLmRvY2tlci5jb20vbGludXgvdWJ1bnR1L2dwZyB8IGFwdC1rZXkgYWRkIC0KICAgIGFkZC1hcHQtcmVwb3NpdG9yeSAiZGViIGh0dHBzOi8vZG93bmxvYWQuZG9ja2VyLmNvbS9saW51eC91YnVudHUgJChsc2JfcmVsZWFzZSAtY3MpIHN0YWJsZSIKICAgIAogICAgbWtkaXIgLXAgL2V0Yy9zeXN0ZW1kL3N5c3RlbS9jb250YWluZXJkLnNlcnZpY2UuZCAvZXRjL3N5c3RlbWQvc3lzdGVtL2RvY2tlci5zZXJ2aWNlLmQKICAgIAogICAgY2F0IDw8RU9GIHwgdGVlIC9ldGMvc3lzdGVtZC9zeXN0ZW0vY29udGFpbmVyZC5zZXJ2aWNlLmQvZW52aXJvbm1lbnQuY29uZiAvZXRjL3N5c3RlbWQvc3lzdGVtL2RvY2tlci5zZXJ2aWNlLmQvZW52aXJvbm1lbnQuY29uZgogICAgW1NlcnZpY2VdCiAgICBSZXN0YXJ0PWFsd2F5cwogICAgRW52aXJvbm1lbnRGaWxlPS0vZXRjL2Vudmlyb25tZW50CiAgICBFT0YKICAgIAogICAgYXB0LWdldCBpbnN0YWxsIC15IFwKICAgICAgICBjb250YWluZXJkLmlvPTEuNC4zKiBcCiAgICAgICAgZG9ja2VyLWNlPTU6MTkuMDMuMTMqIFwKICAgICAgICBkb2NrZXItY2UtY2xpPTU6MTkuMDMuMTMqCiAgICBhcHQtbWFyayBob2xkIGRvY2tlci1jZSBkb2NrZXItY2UtY2xpIGNvbnRhaW5lcmQuaW8KICAgIAogICAgc3lzdGVtY3RsIGRhZW1vbi1yZWxvYWQKICAgIHN5c3RlbWN0bCBlbmFibGUgLS1ub3cgZG9ja2VyCiAgICBvcHRfYmluPS9vcHQvYmluCiAgICBjbmlfYmluX2Rpcj0vb3B0L2NuaS9iaW4KICAgIG1rZGlyIC1wIC9ldGMvY25pL25ldC5kIC9ldGMva3ViZXJuZXRlcy9keW5hbWljLWNvbmZpZy1kaXIgL2V0Yy9rdWJlcm5ldGVzL21hbmlmZXN0cyAiJG9wdF9iaW4iICIkY25pX2Jpbl9kaXIiCiAgICBhcmNoPSR7SE9TVF9BUkNILX0KICAgIGlmIFsgLXogIiRhcmNoIiBdCiAgICB0aGVuCiAgICBjYXNlICQodW5hbWUgLW0pIGluCiAgICB4ODZfNjQpCiAgICAgICAgYXJjaD0iYW1kNjQiCiAgICAgICAgOzsKICAgIGFhcmNoNjQpCiAgICAgICAgYXJjaD0iYXJtNjQiCiAgICAgICAgOzsKICAgICopCiAgICAgICAgZWNobyAidW5zdXBwb3J0ZWQgQ1BVIGFyY2hpdGVjdHVyZSwgZXhpdGluZyIKICAgICAgICBleGl0IDEKICAgICAgICA7OwogICAgZXNhYwogICAgZmkKICAgIENOSV9WRVJTSU9OPSIke0NOSV9WRVJTSU9OOi12MC44Ljd9IgogICAgY25pX2Jhc2VfdXJsPSJodHRwczovL2dpdGh1Yi5jb20vY29udGFpbmVybmV0d29ya2luZy9wbHVnaW5zL3JlbGVhc2VzL2Rvd25sb2FkLyRDTklfVkVSU0lPTiIKICAgIGNuaV9maWxlbmFtZT0iY25pLXBsdWdpbnMtbGludXgtJGFyY2gtJENOSV9WRVJTSU9OLnRneiIKICAgIGN1cmwgLUxmbyAiJGNuaV9iaW5fZGlyLyRjbmlfZmlsZW5hbWUiICIkY25pX2Jhc2VfdXJsLyRjbmlfZmlsZW5hbWUiCiAgICBjbmlfc3VtPSQoY3VybCAtTGYgIiRjbmlfYmFzZV91cmwvJGNuaV9maWxlbmFtZS5zaGEyNTYiKQogICAgY2QgIiRjbmlfYmluX2RpciIKICAgIHNoYTI1NnN1bSAtYyA8PDwiJGNuaV9zdW0iCiAgICB0YXIgeHZmICIkY25pX2ZpbGVuYW1lIgogICAgcm0gLWYgIiRjbmlfZmlsZW5hbWUiCiAgICBjZCAtCiAgICBLVUJFX1ZFUlNJT049IiR7S1VCRV9WRVJTSU9OOi12MS4yMi4xfSIKICAgIGt1YmVfZGlyPSIkb3B0X2Jpbi9rdWJlcm5ldGVzLSRLVUJFX1ZFUlNJT04iCiAgICBrdWJlX2Jhc2VfdXJsPSJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20va3ViZXJuZXRlcy1yZWxlYXNlL3JlbGVhc2UvJEtVQkVfVkVSU0lPTi9iaW4vbGludXgvJGFyY2giCiAgICBrdWJlX3N1bV9maWxlPSIka3ViZV9kaXIvc2hhMjU2IgogICAgbWtkaXIgLXAgIiRrdWJlX2RpciIKICAgIDogPiIka3ViZV9zdW1fZmlsZSIKICAgIAogICAgZm9yIGJpbiBpbiBrdWJlbGV0IGt1YmVhZG0ga3ViZWN0bDsgZG8KICAgICAgICBjdXJsIC1MZm8gIiRrdWJlX2Rpci8kYmluIiAiJGt1YmVfYmFzZV91cmwvJGJpbiIKICAgICAgICBjaG1vZCAreCAiJGt1YmVfZGlyLyRiaW4iCiAgICAgICAgc3VtPSQoY3VybCAtTGYgIiRrdWJlX2Jhc2VfdXJsLyRiaW4uc2hhMjU2IikKICAgICAgICBlY2hvICIkc3VtICAka3ViZV9kaXIvJGJpbiIgPj4iJGt1YmVfc3VtX2ZpbGUiCiAgICBkb25lCiAgICBzaGEyNTZzdW0gLWMgIiRrdWJlX3N1bV9maWxlIgogICAgCiAgICBmb3IgYmluIGluIGt1YmVsZXQga3ViZWFkbSBrdWJlY3RsOyBkbwogICAgICAgIGxuIC1zZiAiJGt1YmVfZGlyLyRiaW4iICIkb3B0X2JpbiIvJGJpbgogICAgZG9uZQogICAgCiAgICBpZiBbWyAhIC14IC9vcHQvYmluL2hlYWx0aC1tb25pdG9yLnNoIF1dOyB0aGVuCiAgICAgICAgY3VybCAtTGZvIC9vcHQvYmluL2hlYWx0aC1tb25pdG9yLnNoIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9rdWJlcm1hdGljL21hY2hpbmUtY29udHJvbGxlci83OTY3YTBhZjJiNzVmMjlhZDJhYjIyN2VlYWEyNmVhN2IwZjJmYmRlL3BrZy91c2VyZGF0YS9zY3JpcHRzL2hlYWx0aC1tb25pdG9yLnNoCiAgICAgICAgY2htb2QgK3ggL29wdC9iaW4vaGVhbHRoLW1vbml0b3Iuc2gKICAgIGZpCiAgICAKICAgICMgc2V0IGt1YmVsZXQgbm9kZWlwIGVudmlyb25tZW50IHZhcmlhYmxlCiAgICAvb3B0L2Jpbi9zZXR1cF9uZXRfZW52LnNoCiAgICAKICAgIHN5c3RlbWN0bCBlbmFibGUgLS1ub3cga3ViZWxldAogICAgc3lzdGVtY3RsIGVuYWJsZSAtLW5vdyAtLW5vLWJsb2NrIGt1YmVsZXQtaGVhbHRoY2hlY2suc2VydmljZQogICAgCgotIHBhdGg6ICcvb3B0L2Jpbi9zdXBlcnZpc2Uuc2gnCiAgcGVybWlzc2lvbnM6ICcwNzU1JwogIGNvbnRlbnQ6IHwtCiAgICAjIS9iaW4vYmFzaAogICAgc2V0IC14ZXVvIHBpcGVmYWlsCiAgICB3aGlsZSAhICIkQCI7IGRvCiAgICAgIHNsZWVwIDEKICAgIGRvbmUKICAgIAoKLSBwYXRoOiAnL2V0Yy9zeXN0ZW1kL3N5c3RlbS9rdWJlbGV0LnNlcnZpY2UnCiAgY29udGVudDogfC0KICAgIFtVbml0XQogICAgQWZ0ZXI9ZG9ja2VyLnNlcnZpY2UKICAgIFJlcXVpcmVzPWRvY2tlci5zZXJ2aWNlCiAgICAKICAgIERlc2NyaXB0aW9uPWt1YmVsZXQ6IFRoZSBLdWJlcm5ldGVzIE5vZGUgQWdlbnQKICAgIERvY3VtZW50YXRpb249aHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvaG9tZS8KICAgIAogICAgW1NlcnZpY2VdCiAgICBSZXN0YXJ0PWFsd2F5cwogICAgU3RhcnRMaW1pdEludGVydmFsPTAKICAgIFJlc3RhcnRTZWM9MTAKICAgIENQVUFjY291bnRpbmc9dHJ1ZQogICAgTWVtb3J5QWNjb3VudGluZz10cnVlCiAgICAKICAgIEVudmlyb25tZW50PSJQQVRIPS9vcHQvYmluOi9iaW46L3Vzci9sb2NhbC9zYmluOi91c3IvbG9jYWwvYmluOi91c3Ivc2JpbjovdXNyL2Jpbjovc2Jpbi8iCiAgICBFbnZpcm9ubWVudEZpbGU9LS9ldGMvZW52aXJvbm1lbnQKICAgIAogICAgRXhlY1N0YXJ0UHJlPS9iaW4vYmFzaCAvb3B0L2xvYWQta2VybmVsLW1vZHVsZXMuc2gKICAgIEV4ZWNTdGFydFByZT0vYmluL2Jhc2ggL29wdC9iaW4vc2V0dXBfbmV0X2Vudi5zaAogICAgRXhlY1N0YXJ0PS9vcHQvYmluL2t1YmVsZXQgJEtVQkVMRVRfRVhUUkFfQVJHUyBcCiAgICAgIC0tYm9vdHN0cmFwLWt1YmVjb25maWc9L2V0Yy9rdWJlcm5ldGVzL2Jvb3RzdHJhcC1rdWJlbGV0LmNvbmYgXAogICAgICAtLWt1YmVjb25maWc9L3Zhci9saWIva3ViZWxldC9rdWJlY29uZmlnIFwKICAgICAgLS1jb25maWc9L2V0Yy9rdWJlcm5ldGVzL2t1YmVsZXQuY29uZiBcCiAgICAgIC0tbmV0d29yay1wbHVnaW49Y25pIFwKICAgICAgLS1jZXJ0LWRpcj0vZXRjL2t1YmVybmV0ZXMvcGtpIFwKICAgICAgLS1jbG91ZC1wcm92aWRlcj1hd3MgXAogICAgICAtLWNsb3VkLWNvbmZpZz0vZXRjL2t1YmVybmV0ZXMvY2xvdWQtY29uZmlnIFwKICAgICAgLS1keW5hbWljLWNvbmZpZy1kaXI9L2V0Yy9rdWJlcm5ldGVzL2R5bmFtaWMtY29uZmlnLWRpciBcCiAgICAgIC0tZmVhdHVyZS1nYXRlcz1EeW5hbWljS3ViZWxldENvbmZpZz10cnVlIFwKICAgICAgLS1leGl0LW9uLWxvY2stY29udGVudGlvbiBcCiAgICAgIC0tbG9jay1maWxlPS90bXAva3ViZWxldC5sb2NrIFwKICAgICAgLS1jb250YWluZXItcnVudGltZT1kb2NrZXIgXAogICAgICAtLWNvbnRhaW5lci1ydW50aW1lLWVuZHBvaW50PXVuaXg6Ly8vdmFyL3J1bi9kb2NrZXJzaGltLnNvY2sgXAogICAgICAtLW5vZGUtaXAgJHtLVUJFTEVUX05PREVfSVB9CiAgICAKICAgIFtJbnN0YWxsXQogICAgV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKICAgIAoKLSBwYXRoOiAnL2V0Yy9zeXN0ZW1kL3N5c3RlbS9rdWJlbGV0LnNlcnZpY2UuZC9leHRyYXMuY29uZicKICBjb250ZW50OiB8LQogICAgW1NlcnZpY2VdCiAgICBFbnZpcm9ubWVudD0iS1VCRUxFVF9FWFRSQV9BUkdTPS0tcmVzb2x2LWNvbmY9L3J1bi9zeXN0ZW1kL3Jlc29sdmUvcmVzb2x2LmNvbmYiCiAgICAKCi0gcGF0aDogJy9ldGMva3ViZXJuZXRlcy9jbG91ZC1jb25maWcnCiAgcGVybWlzc2lvbnM6ICcwNjAwJwogIGNvbnRlbnQ6IHwtCiAgICBbZ2xvYmFsXQogICAgWm9uZT0iIgogICAgVlBDPSIiCiAgICBTdWJuZXRJRD0idGVzdC1zdWJuZXQiCiAgICAKICAgIAoKLSBwYXRoOiAnL29wdC9iaW4vc2V0dXBfbmV0X2Vudi5zaCcKICBwZXJtaXNzaW9uczogJzA3NTUnCiAgY29udGVudDogfC0KICAgICMhL3Vzci9iaW4vZW52IGJhc2gKICAgIGVjaG9kYXRlKCkgewogICAgICBlY2hvICJbJChkYXRlIC1JcyldIiAiJEAiCiAgICB9CiAgICAKICAgICMgZ2V0IHRoZSBkZWZhdWx0IGludGVyZmFjZSBJUCBhZGRyZXNzCiAgICBERUZBVUxUX0lGQ19JUD0kKGlwIC1vICByb3V0ZSBnZXQgMSB8IGdyZXAgLW9QICJzcmMgXEtcUysiKQogICAgCiAgICBpZiBbIC16ICIke0RFRkFVTFRfSUZDX0lQfSIgXQogICAgdGhlbgogICAgICBlY2hvZGF0ZSAiRmFpbGVkIHRvIGdldCBJUCBhZGRyZXNzIGZvciB0aGUgZGVmYXVsdCByb3V0ZSBpbnRlcmZhY2UiCiAgICAgIGV4aXQgMQogICAgZmkKICAgIAogICAgICMgZ2V0IHRoZSBmdWxsIGhvc3RuYW1lCiAgICBGVUxMX0hPU1ROQU1FPSQoaG9zdG5hbWUgLWYpCiAgICAKICAgICMgd3JpdGUgdGhlIG5vZGVpcF9lbnYgZmlsZQogICAgIyB3ZSBuZWVkIHRoZSBsaW5lIGJlbG93IGJlY2F1c2UgZmxhdGNhciBoYXMgdGhlIHNhbWUgc3RyaW5nICJjb3Jlb3MiIGluIHRoYXQgZmlsZQogICAgaWYgZ3JlcCAtcSBjb3Jlb3MgL2V0Yy9vcy1yZWxlYXNlCiAgICB0aGVuCiAgICAgIGVjaG8gIktVQkVMRVRfTk9ERV9JUD0ke0RFRkFVTFRfSUZDX0lQfVxuS1VCRUxFVF9IT1NUTkFNRT0ke0ZVTExfSE9TVE5BTUV9IiA+IC9ldGMva3ViZXJuZXRlcy9ub2RlaXAuY29uZgogICAgZWxpZiBbICEgLWQgL2V0Yy9zeXN0ZW1kL3N5c3RlbS9rdWJlbGV0LnNlcnZpY2UuZCBdCiAgICB0aGVuCiAgICAgIGVjaG9kYXRlICJDYW4ndCBmaW5kIGt1YmVsZXQgc2VydmljZSBleHRyYXMgZGlyZWN0b3J5IgogICAgICBleGl0IDEKICAgIGVsc2UKICAgICAgZWNobyAtZSAiW1NlcnZpY2VdXG5FbnZpcm9ubWVudD1cIktVQkVMRVRfTk9ERV9JUD0ke0RFRkFVTFRfSUZDX0lQfVwiXG5FbnZpcm9ubWVudD1cIktVQkVMRVRfSE9TVE5BTUU9JHtGVUxMX0hPU1ROQU1FfVwiIiA+IC9ldGMvc3lzdGVtZC9zeXN0ZW0va3ViZWxldC5zZXJ2aWNlLmQvbm9kZWlwLmNvbmYKICAgIGZpCiAgICAKCi0gcGF0aDogJy9ldGMva3ViZXJuZXRlcy9wa2kvY2EuY3J0JwogIGNvbnRlbnQ6IHwtCiAgICAtLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KICAgIE1JSUVXakNDQTBLZ0F3SUJBZ0lKQUxmUmxXc0k4WVFITUEwR0NTcUdTSWIzRFFFQkJRVUFNSHN4Q3pBSkJnTlYKICAgIEJBWVRBbFZUTVFzd0NRWURWUVFJRXdKRFFURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeVlXNWphWE5qYnpFVU1CSUcKICAgIEExVUVDaE1MUW5KaFpHWnBkSHBwYm1NeEVqQVFCZ05WQkFNVENXeHZZMkZzYUc5emRERWRNQnNHQ1NxR1NJYjMKICAgIERRRUpBUllPWW5KaFpFQmtZVzVuWVM1amIyMHdIaGNOTVRRd056RTFNakEwTmpBMVdoY05NVGN3TlRBME1qQTAKICAgIE5qQTFXakI3TVFzd0NRWURWUVFHRXdKVlV6RUxNQWtHQTFVRUNCTUNRMEV4RmpBVUJnTlZCQWNURFZOaGJpQkcKICAgIGNtRnVZMmx6WTI4eEZEQVNCZ05WQkFvVEMwSnlZV1JtYVhSNmFXNWpNUkl3RUFZRFZRUURFd2xzYjJOaGJHaHYKICAgIGMzUXhIVEFiQmdrcWhraUc5dzBCQ1FFV0RtSnlZV1JBWkdGdVoyRXVZMjl0TUlJQklqQU5CZ2txaGtpRzl3MEIKICAgIEFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXQ1ZkFqcDRmVGNla1dVVGZ6c3Awa3lpaDFPWWJzR0wwS1gxZVJiU1MKICAgIFI4T2QwKzlRNjJIeW55K0dGd01UYjRBL0tVOG1zc29IdmNjZVNBQWJ3ZmJ4RksvK3M1MVRvYnFVbk9SWnJPb1QKICAgIFpqa1V5Z2J5WERTSzk5WUJiY1IxUGlwOHZ3TVRtNFhLdUx0Q2lnZUJCZGpqQVFkZ1VPMjhMRU5HbHNNbm1lWWsKICAgIEpmT0RWR25WbXI1THRiOUFOQThJS3lUZnNuSEo0aU9DUy9QbFBiVWoycTdZbm9WTHBvc1VCTWxnVWIvQ3lrWDMKICAgIG1Pb0xiNHlKSlF5QS9pU1Q2WnhpSUVqMzZENHlXWjVsZzdZSmwrVWlpQlFIR0NuUGRHeWlwcVYwNmV4MGhlWVcKICAgIGNhaVc4TFdaU1VROTNqUStXVkNIOGhUN0RRTzFkbXN2VW1YbHEvSmVBbHdRL1FJREFRQUJvNEhnTUlIZE1CMEcKICAgIEExVWREZ1FXQkJSY0FST3RoUzRQNFU3dlRmakJ5QzU2OVI3RTZEQ0JyUVlEVlIwakJJR2xNSUdpZ0JSY0FST3QKICAgIGhTNFA0VTd2VGZqQnlDNTY5UjdFNktGL3BIMHdlekVMTUFrR0ExVUVCaE1DVlZNeEN6QUpCZ05WQkFnVEFrTkIKICAgIE1SWXdGQVlEVlFRSEV3MVRZVzRnUm5KaGJtTnBjMk52TVJRd0VnWURWUVFLRXd0Q2NtRmtabWwwZW1sdVl6RVMKICAgIE1CQUdBMVVFQXhNSmJHOWpZV3hvYjNOME1SMHdHd1lKS29aSWh2Y05BUWtCRmc1aWNtRmtRR1JoYm1kaExtTnYKICAgIGJZSUpBTGZSbFdzSThZUUhNQXdHQTFVZEV3UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUZCUUFEZ2dFQkFHNmgKICAgIFU5ZjlzTkgwLzZvQmJHR3kyRVZVMFVnSVRVUUlyRldvOXJGa3JXNWsvWGtEalFtKzNsempUMGlHUjRJeEUvQW8KICAgIGVVNnNRaHVhN3dyV2VGRW40N0dMOThsbkNzSmREN29aTmhGbVE5NVRiL0xuRFVqczVZajliclAwTld6WGZZVTQKICAgIFVLMlpuSU5KUmNKcEI4aVJDYUN4RThEZGNVRjBYcUlFcTZwQTI3MnNub0xtaVhMTXZObDNrWUVkbStqZTZ2b0QKICAgIDU4U05WRVVzenR6UXlYbUpFaENwd1ZJMEE2UUNqelhqK3F2cG13M1paSGk4SndYZWk4WlpCTFRTRkJraThaN24KICAgIHNIOUJCSDM4L1N6VW1BTjRRSFNQeTFnanFtMDBPQUU4TmFZRGtoL2J6RTRkN21MR0dNV3AvV0UzS1BTdTgySEYKICAgIGtQZTZYb1NiaUxtL2t4azMyVDA9CiAgICAtLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCiAgICAKCi0gcGF0aDogJy9ldGMvc3lzdGVtZC9zeXN0ZW0vc2V0dXAuc2VydmljZScKICBwZXJtaXNzaW9uczogJzA2NDQnCiAgY29udGVudDogfC0KICAgIFtJbnN0YWxsXQogICAgV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKICAgIAogICAgW1VuaXRdCiAgICBSZXF1aXJlcz1uZXR3b3JrLW9ubGluZS50YXJnZXQKICAgIEFmdGVyPW5ldHdvcmstb25saW5lLnRhcmdldAogICAgCiAgICBbU2VydmljZV0KICAgIFR5cGU9b25lc2hvdAogICAgUmVtYWluQWZ0ZXJFeGl0PXRydWUKICAgIEVudmlyb25tZW50RmlsZT0tL2V0Yy9lbnZpcm9ubWVudAogICAgRXhlY1N0YXJ0PS9vcHQvYmluL3N1cGVydmlzZS5zaCAvb3B0L2Jpbi9zZXR1cAogICAgCgotIHBhdGg6ICcvZXRjL3Byb2ZpbGUuZC9vcHQtYmluLXBhdGguc2gnCiAgcGVybWlzc2lvbnM6ICcwNjQ0JwogIGNvbnRlbnQ6IHwtCiAgICBleHBvcnQgUEFUSD0iL29wdC9iaW46JFBBVEgiCiAgICAKCi0gcGF0aDogJy9ldGMva3ViZXJuZXRlcy9rdWJlbGV0LmNvbmYnCiAgY29udGVudDogfC0KICAgIGFwaVZlcnNpb246IGt1YmVsZXQuY29uZmlnLms4cy5pby92MWJldGExCiAgICBraW5kOiBLdWJlbGV0Q29uZmlndXJhdGlvbgogICAgYXV0aGVudGljYXRpb246CiAgICAgIGFub255bW91czoKICAgICAgICBlbmFibGVkOiBmYWxzZQogICAgICB3ZWJob29rOgogICAgICAgIGVuYWJsZWQ6IHRydWUKICAgICAgeDUwOToKICAgICAgICBjbGllbnRDQUZpbGU6IC9ldGMva3ViZXJuZXRlcy9wa2kvY2EuY3J0CiAgICBhdXRob3JpemF0aW9uOgogICAgICBtb2RlOiBXZWJob29rCiAgICBjZ3JvdXBEcml2ZXI6IHN5c3RlbWQKICAgIGNsdXN0ZXJETlM6CiAgICAtICIxMC4wLjAuMCIKICAgIGNsdXN0ZXJEb21haW46IGNsdXN0ZXIubG9jYWwKICAgIGZlYXR1cmVHYXRlczoKICAgICAgR3JhY2VmdWxOb2RlU2h1dGRvd246IHRydWUKICAgICAgSWRlbnRpZnlQb2RPUzogZmFsc2UKICAgIHByb3RlY3RLZXJuZWxEZWZhdWx0czogdHJ1ZQogICAgcmVhZE9ubHlQb3J0OiAwCiAgICByb3RhdGVDZXJ0aWZpY2F0ZXM6IHRydWUKICAgIHNlcnZlclRMU0Jvb3RzdHJhcDogdHJ1ZQogICAgc3RhdGljUG9kUGF0aDogL2V0Yy9rdWJlcm5ldGVzL21hbmlmZXN0cwogICAga3ViZVJlc2VydmVkOgogICAgICBjcHU6IDMwbQogICAgICBlcGhlbWVyYWwtc3RvcmFnZTogMzBHaQogICAgc3lzdGVtUmVzZXJ2ZWQ6CiAgICAgIGNwdTogMzBtCiAgICAgIGVwaGVtZXJhbC1zdG9yYWdlOiAzMEdpCiAgICBldmljdGlvbkhhcmQ6CiAgICAgIG1lbW9yeS5hdmFpbGFibGU6IDMwTWkKICAgIHRsc0NpcGhlclN1aXRlczoKICAgIC0gVExTX0FFU18xMjhfR0NNX1NIQTI1NgogICAgLSBUTFNfQUVTXzI1Nl9HQ01fU0hBMzg0CiAgICAtIFRMU19DSEFDSEEyMF9QT0xZMTMwNV9TSEEyNTYKICAgIC0gVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CiAgICAtIFRMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAogICAgLSBUTFNfRUNESEVfRUNEU0FfV0lUSF9DSEFDSEEyMF9QT0xZMTMwNQogICAgLSBUTFNfRUNESEVfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CiAgICAtIFRMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKICAgIC0gVExTX0VDREhFX1JTQV9XSVRIX0NIQUNIQTIwX1BPTFkxMzA1CiAgICB2b2x1bWVQbHVnaW5EaXI6IC92YXIvbGliL2t1YmVsZXQvdm9sdW1lcGx1Z2lucwogICAgCgotIHBhdGg6ICcvZXRjL3N5c3RlbWQvc3lzdGVtL2t1YmVsZXQtaGVhbHRoY2hlY2suc2VydmljZScKICBwZXJtaXNzaW9uczogJzA2NDQnCiAgY29udGVudDogfC0KICAgIFtVbml0XQogICAgUmVxdWlyZXM9a3ViZWxldC5zZXJ2aWNlCiAgICBBZnRlcj1rdWJlbGV0LnNlcnZpY2UKICAgIAogICAgW1NlcnZpY2VdCiAgICBFeGVjU3RhcnQ9L29wdC9iaW4vaGVhbHRoLW1vbml0b3Iuc2gga3ViZWxldAogICAgCiAgICBbSW5zdGFsbF0KICAgIFdhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CiAgICAKCi0gcGF0aDogJy9ldGMvZG9ja2VyL2RhZW1vbi5qc29uJwogIHBlcm1pc3Npb25zOiAnMDY0NCcKICBjb250ZW50OiB8LQogICAgeyJleGVjLW9wdHMiOlsibmF0aXZlLmNncm91cGRyaXZlcj1zeXN0ZW1kIl0sInN0b3JhZ2UtZHJpdmVyIjoib3ZlcmxheTIiLCJsb2ctZHJpdmVyIjoianNvbi1maWxlIiwibG9nLW9wdHMiOnsibWF4LWZpbGUiOiIzMCIsIm1heC1zaXplIjoiMzAwbSJ9LCJpbnNlY3VyZS1yZWdpc3RyaWVzIjpbIjE5Mi4xNjguMTAwLjEwMDo1MDAwIiwiMTAuMC4wLjE6NTAwMCJdLCJyZWdpc3RyeS1taXJyb3JzIjpbImh0dHBzOi8vcmVnaXN0cnkuZG9ja2VyLWNuLmNvbSJdfQoKYm9vdGNtZDoKLSBlY2hvIGhlbGxvCi0gZWNobyB3b3JsZAoKcmhfc3Vic2NyaXB0aW9uOgogICAgcGFzc3dvcmQ6IHBhc3N3b3JkCiAgICB1c2VybmFtZTogdXNlcm5hbWU= +immutable: true +kind: Secret +metadata: + creationTimestamp: null + name: kubelet-configuration-kube-system-osc-provisioning + namespace: cloud-init-settings + resourceVersion: "1" +type: Opaque diff --git a/pkg/controllers/osc/testdata/secret-rhel-8.x-containerd.yaml b/pkg/controllers/osc/testdata/secret-rhel-8.x-containerd.yaml index dda94544..702cb7f8 100644 --- a/pkg/controllers/osc/testdata/secret-rhel-8.x-containerd.yaml +++ b/pkg/controllers/osc/testdata/secret-rhel-8.x-containerd.yaml @@ -1,10 +1,11 @@ apiVersion: v1 data: - cloud-config: I2Nsb3VkLWNvbmZpZwoKc3NoX3B3YXV0aDogbm8Kc3NoX2F1dGhvcml6ZWRfa2V5czoKLSAnc3NoLXJzYSBBQUFBQjNOemFDMXljMkVBQUFBREFRQUJBQUFDQVFEZE9JaFltekNLNURTVkx1M2MnCndyaXRlX2ZpbGVzOgotIHBhdGg6ICcvZXRjL3N5c3RlbWQvam91cm5hbGQuY29uZi5kL21heF9kaXNrX3VzZS5jb25mJwogIGNvbnRlbnQ6IHwtCiAgICBbSm91cm5hbF0KICAgIFN5c3RlbU1heFVzZT01RwogICAgCgotIHBhdGg6ICcvb3B0L2xvYWQta2VybmVsLW1vZHVsZXMuc2gnCiAgcGVybWlzc2lvbnM6ICcwNzU1JwogIGNvbnRlbnQ6IHwtCiAgICAjIS91c3IvYmluL2VudiBiYXNoCiAgICBzZXQgLWV1byBwaXBlZmFpbAogICAgCiAgICBtb2Rwcm9iZSBpcF92cwogICAgbW9kcHJvYmUgaXBfdnNfcnIKICAgIG1vZHByb2JlIGlwX3ZzX3dycgogICAgbW9kcHJvYmUgaXBfdnNfc2gKICAgIAogICAgaWYgbW9kaW5mbyBuZl9jb25udHJhY2tfaXB2NCAmPiAvZGV2L251bGw7IHRoZW4KICAgICAgbW9kcHJvYmUgbmZfY29ubnRyYWNrX2lwdjQKICAgIGVsc2UKICAgICAgbW9kcHJvYmUgbmZfY29ubnRyYWNrCiAgICBmaQogICAgCgotIHBhdGg6ICcvZXRjL3N5c2N0bC5kL2s4cy5jb25mJwogIGNvbnRlbnQ6IHwtCiAgICBuZXQuYnJpZGdlLmJyaWRnZS1uZi1jYWxsLWlwNnRhYmxlcyA9IDEKICAgIG5ldC5icmlkZ2UuYnJpZGdlLW5mLWNhbGwtaXB0YWJsZXMgPSAxCiAgICBrZXJuZWwucGFuaWNfb25fb29wcyA9IDEKICAgIGtlcm5lbC5wYW5pYyA9IDEwCiAgICBuZXQuaXB2NC5pcF9mb3J3YXJkID0gMQogICAgdm0ub3ZlcmNvbW1pdF9tZW1vcnkgPSAxCiAgICBmcy5pbm90aWZ5Lm1heF91c2VyX3dhdGNoZXMgPSAxMDQ4NTc2CiAgICAKCi0gcGF0aDogJy9ldGMvc2VsaW51eC9jb25maWcnCiAgY29udGVudDogfC0KICAgICMgVGhpcyBmaWxlIGNvbnRyb2xzIHRoZSBzdGF0ZSBvZiBTRUxpbnV4IG9uIHRoZSBzeXN0ZW0uCiAgICAjIFNFTElOVVg9IGNhbiB0YWtlIG9uZSBvZiB0aGVzZSB0aHJlZSB2YWx1ZXM6CiAgICAjICAgICBlbmZvcmNpbmcgLSBTRUxpbnV4IHNlY3VyaXR5IHBvbGljeSBpcyBlbmZvcmNlZC4KICAgICMgICAgIHBlcm1pc3NpdmUgLSBTRUxpbnV4IHByaW50cyB3YXJuaW5ncyBpbnN0ZWFkIG9mIGVuZm9yY2luZy4KICAgICMgICAgIGRpc2FibGVkIC0gTm8gU0VMaW51eCBwb2xpY3kgaXMgbG9hZGVkLgogICAgU0VMSU5VWD1wZXJtaXNzaXZlCiAgICAjIFNFTElOVVhUWVBFPSBjYW4gdGFrZSBvbmUgb2YgdGhyZWUgdHdvIHZhbHVlczoKICAgICMgICAgIHRhcmdldGVkIC0gVGFyZ2V0ZWQgcHJvY2Vzc2VzIGFyZSBwcm90ZWN0ZWQsCiAgICAjICAgICBtaW5pbXVtIC0gTW9kaWZpY2F0aW9uIG9mIHRhcmdldGVkIHBvbGljeS4gT25seSBzZWxlY3RlZCBwcm9jZXNzZXMgYXJlIHByb3RlY3RlZC4KICAgICMgICAgIG1scyAtIE11bHRpIExldmVsIFNlY3VyaXR5IHByb3RlY3Rpb24uCiAgICBTRUxJTlVYVFlQRT10YXJnZXRlZAogICAgCgotIHBhdGg6ICcvb3B0L2Jpbi9zZXR1cCcKICBwZXJtaXNzaW9uczogJzA3NTUnCiAgY29udGVudDogfC0KICAgICMhL2Jpbi9iYXNoCiAgICBzZXQgLXhldW8gcGlwZWZhaWwKICAgIAogICAgc2V0ZW5mb3JjZSAwIHx8IHRydWUKICAgIHN5c3RlbWN0bCByZXN0YXJ0IHN5c3RlbWQtbW9kdWxlcy1sb2FkLnNlcnZpY2UKICAgIHN5c2N0bCAtLXN5c3RlbQogICAgc2VkIC1pLm9yaWcgJy8uKnN3YXAuKi9kJyAvZXRjL2ZzdGFiCiAgICBzd2Fwb2ZmIC1hCiAgICAKICAgIAogICAgeXVtIGluc3RhbGwgLXkgXAogICAgICBkZXZpY2UtbWFwcGVyLXBlcnNpc3RlbnQtZGF0YSBcCiAgICAgIGx2bTIgXAogICAgICBlYnRhYmxlcyBcCiAgICAgIGV0aHRvb2wgXAogICAgICBuZnMtdXRpbHMgXAogICAgICBiYXNoLWNvbXBsZXRpb24gXAogICAgICBzdWRvIFwKICAgICAgc29jYXQgXAogICAgICB3Z2V0IFwKICAgICAgY3VybCBcCiAgICAgIGlwdnNhZG0KICAgIHl1bSBpbnN0YWxsIC15IHl1bS11dGlscwogICAgeXVtLWNvbmZpZy1tYW5hZ2VyIC0tYWRkLXJlcG89aHR0cHM6Ly9kb3dubG9hZC5kb2NrZXIuY29tL2xpbnV4L2NlbnRvcy9kb2NrZXItY2UucmVwbwogICAgeXVtLWNvbmZpZy1tYW5hZ2VyIC0tc2F2ZSAtLXNldG9wdD1kb2NrZXItY2Utc3RhYmxlLm1vZHVsZV9ob3RmaXhlcz10cnVlCiAgICAKICAgIGNhdCA8PEVPRiB8IHRlZSAvZXRjL2NyaWN0bC55YW1sCiAgICBydW50aW1lLWVuZHBvaW50OiB1bml4Oi8vL3J1bi9jb250YWluZXJkL2NvbnRhaW5lcmQuc29jawogICAgRU9GCiAgICAKICAgIG1rZGlyIC1wIC9ldGMvc3lzdGVtZC9zeXN0ZW0vY29udGFpbmVyZC5zZXJ2aWNlLmQKICAgIGNhdCA8PEVPRiB8IHRlZSAvZXRjL3N5c3RlbWQvc3lzdGVtL2NvbnRhaW5lcmQuc2VydmljZS5kL2Vudmlyb25tZW50LmNvbmYKICAgIFtTZXJ2aWNlXQogICAgUmVzdGFydD1hbHdheXMKICAgIEVudmlyb25tZW50RmlsZT0tL2V0Yy9lbnZpcm9ubWVudAogICAgRU9GCiAgICAKICAgIHl1bSBpbnN0YWxsIC15IGNvbnRhaW5lcmQuaW8tMS40KiB5dW0tcGx1Z2luLXZlcnNpb25sb2NrCiAgICB5dW0gdmVyc2lvbmxvY2sgYWRkIGNvbnRhaW5lcmQuaW8KICAgIAogICAgc3lzdGVtY3RsIGRhZW1vbi1yZWxvYWQKICAgIHN5c3RlbWN0bCBlbmFibGUgLS1ub3cgY29udGFpbmVyZAogICAgb3B0X2Jpbj0vb3B0L2JpbgogICAgY25pX2Jpbl9kaXI9L29wdC9jbmkvYmluCiAgICBta2RpciAtcCAvZXRjL2NuaS9uZXQuZCAvZXRjL2t1YmVybmV0ZXMvZHluYW1pYy1jb25maWctZGlyIC9ldGMva3ViZXJuZXRlcy9tYW5pZmVzdHMgIiRvcHRfYmluIiAiJGNuaV9iaW5fZGlyIgogICAgYXJjaD0ke0hPU1RfQVJDSC19CiAgICBpZiBbIC16ICIkYXJjaCIgXQogICAgdGhlbgogICAgY2FzZSAkKHVuYW1lIC1tKSBpbgogICAgeDg2XzY0KQogICAgICAgIGFyY2g9ImFtZDY0IgogICAgICAgIDs7CiAgICBhYXJjaDY0KQogICAgICAgIGFyY2g9ImFybTY0IgogICAgICAgIDs7CiAgICAqKQogICAgICAgIGVjaG8gInVuc3VwcG9ydGVkIENQVSBhcmNoaXRlY3R1cmUsIGV4aXRpbmciCiAgICAgICAgZXhpdCAxCiAgICAgICAgOzsKICAgIGVzYWMKICAgIGZpCiAgICBDTklfVkVSU0lPTj0iJHtDTklfVkVSU0lPTjotdjAuOC43fSIKICAgIGNuaV9iYXNlX3VybD0iaHR0cHM6Ly9naXRodWIuY29tL2NvbnRhaW5lcm5ldHdvcmtpbmcvcGx1Z2lucy9yZWxlYXNlcy9kb3dubG9hZC8kQ05JX1ZFUlNJT04iCiAgICBjbmlfZmlsZW5hbWU9ImNuaS1wbHVnaW5zLWxpbnV4LSRhcmNoLSRDTklfVkVSU0lPTi50Z3oiCiAgICBjdXJsIC1MZm8gIiRjbmlfYmluX2Rpci8kY25pX2ZpbGVuYW1lIiAiJGNuaV9iYXNlX3VybC8kY25pX2ZpbGVuYW1lIgogICAgY25pX3N1bT0kKGN1cmwgLUxmICIkY25pX2Jhc2VfdXJsLyRjbmlfZmlsZW5hbWUuc2hhMjU2IikKICAgIGNkICIkY25pX2Jpbl9kaXIiCiAgICBzaGEyNTZzdW0gLWMgPDw8IiRjbmlfc3VtIgogICAgdGFyIHh2ZiAiJGNuaV9maWxlbmFtZSIKICAgIHJtIC1mICIkY25pX2ZpbGVuYW1lIgogICAgY2QgLQogICAgS1VCRV9WRVJTSU9OPSIke0tVQkVfVkVSU0lPTjotdjEuMjIuMX0iCiAgICBrdWJlX2Rpcj0iJG9wdF9iaW4va3ViZXJuZXRlcy0kS1VCRV9WRVJTSU9OIgogICAga3ViZV9iYXNlX3VybD0iaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL2t1YmVybmV0ZXMtcmVsZWFzZS9yZWxlYXNlLyRLVUJFX1ZFUlNJT04vYmluL2xpbnV4LyRhcmNoIgogICAga3ViZV9zdW1fZmlsZT0iJGt1YmVfZGlyL3NoYTI1NiIKICAgIG1rZGlyIC1wICIka3ViZV9kaXIiCiAgICA6ID4iJGt1YmVfc3VtX2ZpbGUiCiAgICAKICAgIGZvciBiaW4gaW4ga3ViZWxldCBrdWJlYWRtIGt1YmVjdGw7IGRvCiAgICAgICAgY3VybCAtTGZvICIka3ViZV9kaXIvJGJpbiIgIiRrdWJlX2Jhc2VfdXJsLyRiaW4iCiAgICAgICAgY2htb2QgK3ggIiRrdWJlX2Rpci8kYmluIgogICAgICAgIHN1bT0kKGN1cmwgLUxmICIka3ViZV9iYXNlX3VybC8kYmluLnNoYTI1NiIpCiAgICAgICAgZWNobyAiJHN1bSAgJGt1YmVfZGlyLyRiaW4iID4+IiRrdWJlX3N1bV9maWxlIgogICAgZG9uZQogICAgc2hhMjU2c3VtIC1jICIka3ViZV9zdW1fZmlsZSIKICAgIAogICAgZm9yIGJpbiBpbiBrdWJlbGV0IGt1YmVhZG0ga3ViZWN0bDsgZG8KICAgICAgICBsbiAtc2YgIiRrdWJlX2Rpci8kYmluIiAiJG9wdF9iaW4iLyRiaW4KICAgIGRvbmUKICAgIAogICAgaWYgW1sgISAteCAvb3B0L2Jpbi9oZWFsdGgtbW9uaXRvci5zaCBdXTsgdGhlbgogICAgICAgIGN1cmwgLUxmbyAvb3B0L2Jpbi9oZWFsdGgtbW9uaXRvci5zaCBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20va3ViZXJtYXRpYy9tYWNoaW5lLWNvbnRyb2xsZXIvNzk2N2EwYWYyYjc1ZjI5YWQyYWIyMjdlZWFhMjZlYTdiMGYyZmJkZS9wa2cvdXNlcmRhdGEvc2NyaXB0cy9oZWFsdGgtbW9uaXRvci5zaAogICAgICAgIGNobW9kICt4IC9vcHQvYmluL2hlYWx0aC1tb25pdG9yLnNoCiAgICBmaQogICAgCiAgICBta2RpciAtcCAvZXRjL3N5c3RlbWQvc3lzdGVtL2t1YmVsZXQuc2VydmljZS5kLwogICAgIyBzZXQga3ViZWxldCBub2RlaXAgZW52aXJvbm1lbnQgdmFyaWFibGUKICAgIC9vcHQvYmluL3NldHVwX25ldF9lbnYuc2gKICAgIAogICAgc3lzdGVtY3RsIGVuYWJsZSAtLW5vdyBrdWJlbGV0CiAgICBzeXN0ZW1jdGwgZW5hYmxlIC0tbm93IC0tbm8tYmxvY2sga3ViZWxldC1oZWFsdGhjaGVjay5zZXJ2aWNlCiAgICAKCi0gcGF0aDogJy9vcHQvYmluL3N1cGVydmlzZS5zaCcKICBwZXJtaXNzaW9uczogJzA3NTUnCiAgY29udGVudDogfC0KICAgICMhL2Jpbi9iYXNoCiAgICBzZXQgLXhldW8gcGlwZWZhaWwKICAgIHdoaWxlICEgIiRAIjsgZG8KICAgICAgc2xlZXAgMQogICAgZG9uZQogICAgCgotIHBhdGg6ICcvZXRjL3N5c3RlbWQvc3lzdGVtL2t1YmVsZXQuc2VydmljZScKICBjb250ZW50OiB8LQogICAgW1VuaXRdCiAgICBBZnRlcj1jb250YWluZXJkLnNlcnZpY2UKICAgIFJlcXVpcmVzPWNvbnRhaW5lcmQuc2VydmljZQogICAgCiAgICBEZXNjcmlwdGlvbj1rdWJlbGV0OiBUaGUgS3ViZXJuZXRlcyBOb2RlIEFnZW50CiAgICBEb2N1bWVudGF0aW9uPWh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2hvbWUvCiAgICAKICAgIFtTZXJ2aWNlXQogICAgUmVzdGFydD1hbHdheXMKICAgIFN0YXJ0TGltaXRJbnRlcnZhbD0wCiAgICBSZXN0YXJ0U2VjPTEwCiAgICBDUFVBY2NvdW50aW5nPXRydWUKICAgIE1lbW9yeUFjY291bnRpbmc9dHJ1ZQogICAgCiAgICBFbnZpcm9ubWVudD0iUEFUSD0vb3B0L2JpbjovYmluOi91c3IvbG9jYWwvc2JpbjovdXNyL2xvY2FsL2JpbjovdXNyL3NiaW46L3Vzci9iaW46L3NiaW4vIgogICAgRW52aXJvbm1lbnRGaWxlPS0vZXRjL2Vudmlyb25tZW50CiAgICAKICAgIEV4ZWNTdGFydFByZT0vYmluL2Jhc2ggL29wdC9sb2FkLWtlcm5lbC1tb2R1bGVzLnNoCiAgICBFeGVjU3RhcnRQcmU9L2Jpbi9iYXNoIC9vcHQvYmluL3NldHVwX25ldF9lbnYuc2gKICAgIEV4ZWNTdGFydD0vb3B0L2Jpbi9rdWJlbGV0ICRLVUJFTEVUX0VYVFJBX0FSR1MgXAogICAgICAtLWJvb3RzdHJhcC1rdWJlY29uZmlnPS9ldGMva3ViZXJuZXRlcy9ib290c3RyYXAta3ViZWxldC5jb25mIFwKICAgICAgLS1rdWJlY29uZmlnPS92YXIvbGliL2t1YmVsZXQva3ViZWNvbmZpZyBcCiAgICAgIC0tY29uZmlnPS9ldGMva3ViZXJuZXRlcy9rdWJlbGV0LmNvbmYgXAogICAgICAtLW5ldHdvcmstcGx1Z2luPWNuaSBcCiAgICAgIC0tY2VydC1kaXI9L2V0Yy9rdWJlcm5ldGVzL3BraSBcCiAgICAgIC0tY2xvdWQtcHJvdmlkZXI9YXdzIFwKICAgICAgLS1jbG91ZC1jb25maWc9L2V0Yy9rdWJlcm5ldGVzL2Nsb3VkLWNvbmZpZyBcCiAgICAgIC0tZHluYW1pYy1jb25maWctZGlyPS9ldGMva3ViZXJuZXRlcy9keW5hbWljLWNvbmZpZy1kaXIgXAogICAgICAtLWZlYXR1cmUtZ2F0ZXM9RHluYW1pY0t1YmVsZXRDb25maWc9dHJ1ZSBcCiAgICAgIC0tZXhpdC1vbi1sb2NrLWNvbnRlbnRpb24gXAogICAgICAtLWxvY2stZmlsZT0vdG1wL2t1YmVsZXQubG9jayBcCiAgICAgIC0tY29udGFpbmVyLXJ1bnRpbWU9cmVtb3RlIFwKICAgICAgLS1jb250YWluZXItcnVudGltZS1lbmRwb2ludD11bml4Oi8vL3J1bi9jb250YWluZXJkL2NvbnRhaW5lcmQuc29jayBcCiAgICAgIC0tbm9kZS1pcCAke0tVQkVMRVRfTk9ERV9JUH0KICAgIAogICAgW0luc3RhbGxdCiAgICBXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldAogICAgCgotIHBhdGg6ICcvZXRjL2t1YmVybmV0ZXMvY2xvdWQtY29uZmlnJwogIHBlcm1pc3Npb25zOiAnMDYwMCcKICBjb250ZW50OiB8LQogICAgW2dsb2JhbF0KICAgIFpvbmU9IiIKICAgIFZQQz0iIgogICAgU3VibmV0SUQ9InRlc3Qtc3VibmV0IgogICAgCiAgICAKCi0gcGF0aDogJy9vcHQvYmluL3NldHVwX25ldF9lbnYuc2gnCiAgcGVybWlzc2lvbnM6ICcwNzU1JwogIGNvbnRlbnQ6IHwtCiAgICAjIS91c3IvYmluL2VudiBiYXNoCiAgICBlY2hvZGF0ZSgpIHsKICAgICAgZWNobyAiWyQoZGF0ZSAtSXMpXSIgIiRAIgogICAgfQogICAgCiAgICAjIGdldCB0aGUgZGVmYXVsdCBpbnRlcmZhY2UgSVAgYWRkcmVzcwogICAgREVGQVVMVF9JRkNfSVA9JChpcCAtbyAgcm91dGUgZ2V0IDEgfCBncmVwIC1vUCAic3JjIFxLXFMrIikKICAgIAogICAgaWYgWyAteiAiJHtERUZBVUxUX0lGQ19JUH0iIF0KICAgIHRoZW4KICAgICAgZWNob2RhdGUgIkZhaWxlZCB0byBnZXQgSVAgYWRkcmVzcyBmb3IgdGhlIGRlZmF1bHQgcm91dGUgaW50ZXJmYWNlIgogICAgICBleGl0IDEKICAgIGZpCiAgICAKICAgICAjIGdldCB0aGUgZnVsbCBob3N0bmFtZQogICAgRlVMTF9IT1NUTkFNRT0kKGhvc3RuYW1lIC1mKQogICAgCiAgICAjIHdyaXRlIHRoZSBub2RlaXBfZW52IGZpbGUKICAgICMgd2UgbmVlZCB0aGUgbGluZSBiZWxvdyBiZWNhdXNlIGZsYXRjYXIgaGFzIHRoZSBzYW1lIHN0cmluZyAiY29yZW9zIiBpbiB0aGF0IGZpbGUKICAgIGlmIGdyZXAgLXEgY29yZW9zIC9ldGMvb3MtcmVsZWFzZQogICAgdGhlbgogICAgICBlY2hvICJLVUJFTEVUX05PREVfSVA9JHtERUZBVUxUX0lGQ19JUH1cbktVQkVMRVRfSE9TVE5BTUU9JHtGVUxMX0hPU1ROQU1FfSIgPiAvZXRjL2t1YmVybmV0ZXMvbm9kZWlwLmNvbmYKICAgIGVsaWYgWyAhIC1kIC9ldGMvc3lzdGVtZC9zeXN0ZW0va3ViZWxldC5zZXJ2aWNlLmQgXQogICAgdGhlbgogICAgICBlY2hvZGF0ZSAiQ2FuJ3QgZmluZCBrdWJlbGV0IHNlcnZpY2UgZXh0cmFzIGRpcmVjdG9yeSIKICAgICAgZXhpdCAxCiAgICBlbHNlCiAgICAgIGVjaG8gLWUgIltTZXJ2aWNlXVxuRW52aXJvbm1lbnQ9XCJLVUJFTEVUX05PREVfSVA9JHtERUZBVUxUX0lGQ19JUH1cIlxuRW52aXJvbm1lbnQ9XCJLVUJFTEVUX0hPU1ROQU1FPSR7RlVMTF9IT1NUTkFNRX1cIiIgPiAvZXRjL3N5c3RlbWQvc3lzdGVtL2t1YmVsZXQuc2VydmljZS5kL25vZGVpcC5jb25mCiAgICBmaQogICAgCgotIHBhdGg6ICcvZXRjL2t1YmVybmV0ZXMvcGtpL2NhLmNydCcKICBjb250ZW50OiB8LQogICAgLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCiAgICBNSUlFV2pDQ0EwS2dBd0lCQWdJSkFMZlJsV3NJOFlRSE1BMEdDU3FHU0liM0RRRUJCUVVBTUhzeEN6QUpCZ05WCiAgICBCQVlUQWxWVE1Rc3dDUVlEVlFRSUV3SkRRVEVXTUJRR0ExVUVCeE1OVTJGdUlFWnlZVzVqYVhOamJ6RVVNQklHCiAgICBBMVVFQ2hNTFFuSmhaR1pwZEhwcGJtTXhFakFRQmdOVkJBTVRDV3h2WTJGc2FHOXpkREVkTUJzR0NTcUdTSWIzCiAgICBEUUVKQVJZT1luSmhaRUJrWVc1bllTNWpiMjB3SGhjTk1UUXdOekUxTWpBME5qQTFXaGNOTVRjd05UQTBNakEwCiAgICBOakExV2pCN01Rc3dDUVlEVlFRR0V3SlZVekVMTUFrR0ExVUVDQk1DUTBFeEZqQVVCZ05WQkFjVERWTmhiaUJHCiAgICBjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMEp5WVdSbWFYUjZhVzVqTVJJd0VBWURWUVFERXdsc2IyTmhiR2h2CiAgICBjM1F4SFRBYkJna3Foa2lHOXcwQkNRRVdEbUp5WVdSQVpHRnVaMkV1WTI5dE1JSUJJakFOQmdrcWhraUc5dzBCCiAgICBBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUF0NWZBanA0ZlRjZWtXVVRmenNwMGt5aWgxT1lic0dMMEtYMWVSYlNTCiAgICBSOE9kMCs5UTYySHlueStHRndNVGI0QS9LVThtc3NvSHZjY2VTQUFid2ZieEZLLytzNTFUb2JxVW5PUlpyT29UCiAgICBaamtVeWdieVhEU0s5OVlCYmNSMVBpcDh2d01UbTRYS3VMdENpZ2VCQmRqakFRZGdVTzI4TEVOR2xzTW5tZVlrCiAgICBKZk9EVkduVm1yNUx0YjlBTkE4SUt5VGZzbkhKNGlPQ1MvUGxQYlVqMnE3WW5vVkxwb3NVQk1sZ1ViL0N5a1gzCiAgICBtT29MYjR5SkpReUEvaVNUNlp4aUlFajM2RDR5V1o1bGc3WUpsK1VpaUJRSEdDblBkR3lpcHFWMDZleDBoZVlXCiAgICBjYWlXOExXWlNVUTkzalErV1ZDSDhoVDdEUU8xZG1zdlVtWGxxL0plQWx3US9RSURBUUFCbzRIZ01JSGRNQjBHCiAgICBBMVVkRGdRV0JCUmNBUk90aFM0UDRVN3ZUZmpCeUM1NjlSN0U2RENCclFZRFZSMGpCSUdsTUlHaWdCUmNBUk90CiAgICBoUzRQNFU3dlRmakJ5QzU2OVI3RTZLRi9wSDB3ZXpFTE1Ba0dBMVVFQmhNQ1ZWTXhDekFKQmdOVkJBZ1RBa05CCiAgICBNUll3RkFZRFZRUUhFdzFUWVc0Z1JuSmhibU5wYzJOdk1SUXdFZ1lEVlFRS0V3dENjbUZrWm1sMGVtbHVZekVTCiAgICBNQkFHQTFVRUF4TUpiRzlqWVd4b2IzTjBNUjB3R3dZSktvWklodmNOQVFrQkZnNWljbUZrUUdSaGJtZGhMbU52CiAgICBiWUlKQUxmUmxXc0k4WVFITUF3R0ExVWRFd1FGTUFNQkFmOHdEUVlKS29aSWh2Y05BUUVGQlFBRGdnRUJBRzZoCiAgICBVOWY5c05IMC82b0JiR0d5MkVWVTBVZ0lUVVFJckZXbzlyRmtyVzVrL1hrRGpRbSszbHpqVDBpR1I0SXhFL0FvCiAgICBlVTZzUWh1YTd3cldlRkVuNDdHTDk4bG5Dc0pkRDdvWk5oRm1ROTVUYi9MbkRVanM1WWo5YnJQME5XelhmWVU0CiAgICBVSzJabklOSlJjSnBCOGlSQ2FDeEU4RGRjVUYwWHFJRXE2cEEyNzJzbm9MbWlYTE12Tmwza1lFZG0ramU2dm9ECiAgICA1OFNOVkVVc3p0elF5WG1KRWhDcHdWSTBBNlFDanpYaitxdnBtdzNaWkhpOEp3WGVpOFpaQkxUU0ZCa2k4WjduCiAgICBzSDlCQkgzOC9TelVtQU40UUhTUHkxZ2pxbTAwT0FFOE5hWURraC9iekU0ZDdtTEdHTVdwL1dFM0tQU3U4MkhGCiAgICBrUGU2WG9TYmlMbS9reGszMlQwPQogICAgLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQogICAgCgotIHBhdGg6ICcvZXRjL3N5c3RlbWQvc3lzdGVtL3NldHVwLnNlcnZpY2UnCiAgcGVybWlzc2lvbnM6ICcwNjQ0JwogIGNvbnRlbnQ6IHwtCiAgICBbSW5zdGFsbF0KICAgIFdhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CiAgICAKICAgIFtVbml0XQogICAgUmVxdWlyZXM9bmV0d29yay1vbmxpbmUudGFyZ2V0CiAgICBBZnRlcj1uZXR3b3JrLW9ubGluZS50YXJnZXQKICAgIAogICAgW1NlcnZpY2VdCiAgICBUeXBlPW9uZXNob3QKICAgIFJlbWFpbkFmdGVyRXhpdD10cnVlCiAgICBFbnZpcm9ubWVudEZpbGU9LS9ldGMvZW52aXJvbm1lbnQKICAgIEV4ZWNTdGFydD0vb3B0L2Jpbi9zdXBlcnZpc2Uuc2ggL29wdC9iaW4vc2V0dXAKICAgIAoKLSBwYXRoOiAnL2V0Yy9wcm9maWxlLmQvb3B0LWJpbi1wYXRoLnNoJwogIHBlcm1pc3Npb25zOiAnMDY0NCcKICBjb250ZW50OiB8LQogICAgZXhwb3J0IFBBVEg9Ii9vcHQvYmluOiRQQVRIIgogICAgCgotIHBhdGg6ICcvZXRjL2t1YmVybmV0ZXMva3ViZWxldC5jb25mJwogIGNvbnRlbnQ6IHwtCiAgICBhcGlWZXJzaW9uOiBrdWJlbGV0LmNvbmZpZy5rOHMuaW8vdjFiZXRhMQogICAga2luZDogS3ViZWxldENvbmZpZ3VyYXRpb24KICAgIGF1dGhlbnRpY2F0aW9uOgogICAgICBhbm9ueW1vdXM6CiAgICAgICAgZW5hYmxlZDogZmFsc2UKICAgICAgd2ViaG9vazoKICAgICAgICBlbmFibGVkOiB0cnVlCiAgICAgIHg1MDk6CiAgICAgICAgY2xpZW50Q0FGaWxlOiAvZXRjL2t1YmVybmV0ZXMvcGtpL2NhLmNydAogICAgYXV0aG9yaXphdGlvbjoKICAgICAgbW9kZTogV2ViaG9vawogICAgY2dyb3VwRHJpdmVyOiBzeXN0ZW1kCiAgICBjbHVzdGVyRE5TOgogICAgLSAiMTAuMC4wLjAiCiAgICBjbHVzdGVyRG9tYWluOiBjbHVzdGVyLmxvY2FsCiAgICBmZWF0dXJlR2F0ZXM6CiAgICAgIEdyYWNlZnVsTm9kZVNodXRkb3duOiB0cnVlCiAgICAgIElkZW50aWZ5UG9kT1M6IGZhbHNlCiAgICBwcm90ZWN0S2VybmVsRGVmYXVsdHM6IHRydWUKICAgIHJlYWRPbmx5UG9ydDogMAogICAgcm90YXRlQ2VydGlmaWNhdGVzOiB0cnVlCiAgICBzZXJ2ZXJUTFNCb290c3RyYXA6IHRydWUKICAgIHN0YXRpY1BvZFBhdGg6IC9ldGMva3ViZXJuZXRlcy9tYW5pZmVzdHMKICAgIGt1YmVSZXNlcnZlZDoKICAgICAgY3B1OiAyMDBtCiAgICAgIGVwaGVtZXJhbC1zdG9yYWdlOiAxR2kKICAgICAgbWVtb3J5OiAyMDBNaQogICAgc3lzdGVtUmVzZXJ2ZWQ6CiAgICAgIGNwdTogMjAwbQogICAgICBlcGhlbWVyYWwtc3RvcmFnZTogMUdpCiAgICAgIG1lbW9yeTogMjAwTWkKICAgIGV2aWN0aW9uSGFyZDoKICAgICAgaW1hZ2Vmcy5hdmFpbGFibGU6IDE1JQogICAgICBtZW1vcnkuYXZhaWxhYmxlOiAxMDBNaQogICAgICBub2RlZnMuYXZhaWxhYmxlOiAxMCUKICAgICAgbm9kZWZzLmlub2Rlc0ZyZWU6IDUlCiAgICB0bHNDaXBoZXJTdWl0ZXM6CiAgICAtIFRMU19BRVNfMTI4X0dDTV9TSEEyNTYKICAgIC0gVExTX0FFU18yNTZfR0NNX1NIQTM4NAogICAgLSBUTFNfQ0hBQ0hBMjBfUE9MWTEzMDVfU0hBMjU2CiAgICAtIFRMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgogICAgLSBUTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKICAgIC0gVExTX0VDREhFX0VDRFNBX1dJVEhfQ0hBQ0hBMjBfUE9MWTEzMDUKICAgIC0gVExTX0VDREhFX1JTQV9XSVRIX0FFU18xMjhfR0NNX1NIQTI1NgogICAgLSBUTFNfRUNESEVfUlNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CiAgICAtIFRMU19FQ0RIRV9SU0FfV0lUSF9DSEFDSEEyMF9QT0xZMTMwNQogICAgdm9sdW1lUGx1Z2luRGlyOiAvdmFyL2xpYi9rdWJlbGV0L3ZvbHVtZXBsdWdpbnMKICAgIAoKLSBwYXRoOiAnL2V0Yy9zeXN0ZW1kL3N5c3RlbS9rdWJlbGV0LWhlYWx0aGNoZWNrLnNlcnZpY2UnCiAgcGVybWlzc2lvbnM6ICcwNjQ0JwogIGNvbnRlbnQ6IHwtCiAgICBbVW5pdF0KICAgIFJlcXVpcmVzPWt1YmVsZXQuc2VydmljZQogICAgQWZ0ZXI9a3ViZWxldC5zZXJ2aWNlCiAgICAKICAgIFtTZXJ2aWNlXQogICAgRXhlY1N0YXJ0PS9vcHQvYmluL2hlYWx0aC1tb25pdG9yLnNoIGt1YmVsZXQKICAgIAogICAgW0luc3RhbGxdCiAgICBXYW50ZWRCeT1tdWx0aS11c2VyLnRhcmdldAogICAgCgotIHBhdGg6ICcvZXRjL2NvbnRhaW5lcmQvY29uZmlnLnRvbWwnCiAgcGVybWlzc2lvbnM6ICcwNjQ0JwogIGNvbnRlbnQ6IHwtCiAgICB2ZXJzaW9uID0gMgogICAgCiAgICBbbWV0cmljc10KICAgIGFkZHJlc3MgPSAiMTI3LjAuMC4xOjEzMzgiCiAgICAKICAgIFtwbHVnaW5zXQogICAgW3BsdWdpbnMuImlvLmNvbnRhaW5lcmQuZ3JwYy52MS5jcmkiXQogICAgW3BsdWdpbnMuImlvLmNvbnRhaW5lcmQuZ3JwYy52MS5jcmkiLmNvbnRhaW5lcmRdCiAgICBbcGx1Z2lucy4iaW8uY29udGFpbmVyZC5ncnBjLnYxLmNyaSIuY29udGFpbmVyZC5ydW50aW1lc10KICAgIFtwbHVnaW5zLiJpby5jb250YWluZXJkLmdycGMudjEuY3JpIi5jb250YWluZXJkLnJ1bnRpbWVzLnJ1bmNdCiAgICBydW50aW1lX3R5cGUgPSAiaW8uY29udGFpbmVyZC5ydW5jLnYyIgogICAgW3BsdWdpbnMuImlvLmNvbnRhaW5lcmQuZ3JwYy52MS5jcmkiLmNvbnRhaW5lcmQucnVudGltZXMucnVuYy5vcHRpb25zXQogICAgU3lzdGVtZENncm91cCA9IHRydWUKICAgIFtwbHVnaW5zLiJpby5jb250YWluZXJkLmdycGMudjEuY3JpIi5yZWdpc3RyeV0KICAgIFtwbHVnaW5zLiJpby5jb250YWluZXJkLmdycGMudjEuY3JpIi5yZWdpc3RyeS5taXJyb3JzXQogICAgW3BsdWdpbnMuImlvLmNvbnRhaW5lcmQuZ3JwYy52MS5jcmkiLnJlZ2lzdHJ5Lm1pcnJvcnMuImRvY2tlci5pbyJdCiAgICBlbmRwb2ludCA9IFsiaHR0cHM6Ly9yZWdpc3RyeS0xLmRvY2tlci5pbyJdCiAgICAKCmJvb3RjbWQ6Ci0gbW9kcHJvYmUgaXBfdGFibGVzCg== + cloud-config: I2Nsb3VkLWNvbmZpZwoKc3NoX3B3YXV0aDogbm8Kc3NoX2F1dGhvcml6ZWRfa2V5czoKLSAnc3NoLXJzYSBBQUFBQjNOemFDMXljMkVBQUFBREFRQUJBQUFDQVFEZE9JaFltekNLNURTVkx1M2MnCndyaXRlX2ZpbGVzOgotIHBhdGg6ICcvZXRjL3N5c3RlbWQvam91cm5hbGQuY29uZi5kL21heF9kaXNrX3VzZS5jb25mJwogIGNvbnRlbnQ6IHwtCiAgICBbSm91cm5hbF0KICAgIFN5c3RlbU1heFVzZT01RwogICAgCgotIHBhdGg6ICcvb3B0L2xvYWQta2VybmVsLW1vZHVsZXMuc2gnCiAgcGVybWlzc2lvbnM6ICcwNzU1JwogIGNvbnRlbnQ6IHwtCiAgICAjIS91c3IvYmluL2VudiBiYXNoCiAgICBzZXQgLWV1byBwaXBlZmFpbAogICAgCiAgICBtb2Rwcm9iZSBpcF92cwogICAgbW9kcHJvYmUgaXBfdnNfcnIKICAgIG1vZHByb2JlIGlwX3ZzX3dycgogICAgbW9kcHJvYmUgaXBfdnNfc2gKICAgIAogICAgaWYgbW9kaW5mbyBuZl9jb25udHJhY2tfaXB2NCAmPiAvZGV2L251bGw7IHRoZW4KICAgICAgbW9kcHJvYmUgbmZfY29ubnRyYWNrX2lwdjQKICAgIGVsc2UKICAgICAgbW9kcHJvYmUgbmZfY29ubnRyYWNrCiAgICBmaQogICAgCgotIHBhdGg6ICcvZXRjL3N5c2N0bC5kL2s4cy5jb25mJwogIGNvbnRlbnQ6IHwtCiAgICBuZXQuYnJpZGdlLmJyaWRnZS1uZi1jYWxsLWlwNnRhYmxlcyA9IDEKICAgIG5ldC5icmlkZ2UuYnJpZGdlLW5mLWNhbGwtaXB0YWJsZXMgPSAxCiAgICBrZXJuZWwucGFuaWNfb25fb29wcyA9IDEKICAgIGtlcm5lbC5wYW5pYyA9IDEwCiAgICBuZXQuaXB2NC5pcF9mb3J3YXJkID0gMQogICAgdm0ub3ZlcmNvbW1pdF9tZW1vcnkgPSAxCiAgICBmcy5pbm90aWZ5Lm1heF91c2VyX3dhdGNoZXMgPSAxMDQ4NTc2CiAgICAKCi0gcGF0aDogJy9ldGMvc2VsaW51eC9jb25maWcnCiAgY29udGVudDogfC0KICAgICMgVGhpcyBmaWxlIGNvbnRyb2xzIHRoZSBzdGF0ZSBvZiBTRUxpbnV4IG9uIHRoZSBzeXN0ZW0uCiAgICAjIFNFTElOVVg9IGNhbiB0YWtlIG9uZSBvZiB0aGVzZSB0aHJlZSB2YWx1ZXM6CiAgICAjICAgICBlbmZvcmNpbmcgLSBTRUxpbnV4IHNlY3VyaXR5IHBvbGljeSBpcyBlbmZvcmNlZC4KICAgICMgICAgIHBlcm1pc3NpdmUgLSBTRUxpbnV4IHByaW50cyB3YXJuaW5ncyBpbnN0ZWFkIG9mIGVuZm9yY2luZy4KICAgICMgICAgIGRpc2FibGVkIC0gTm8gU0VMaW51eCBwb2xpY3kgaXMgbG9hZGVkLgogICAgU0VMSU5VWD1wZXJtaXNzaXZlCiAgICAjIFNFTElOVVhUWVBFPSBjYW4gdGFrZSBvbmUgb2YgdGhyZWUgdHdvIHZhbHVlczoKICAgICMgICAgIHRhcmdldGVkIC0gVGFyZ2V0ZWQgcHJvY2Vzc2VzIGFyZSBwcm90ZWN0ZWQsCiAgICAjICAgICBtaW5pbXVtIC0gTW9kaWZpY2F0aW9uIG9mIHRhcmdldGVkIHBvbGljeS4gT25seSBzZWxlY3RlZCBwcm9jZXNzZXMgYXJlIHByb3RlY3RlZC4KICAgICMgICAgIG1scyAtIE11bHRpIExldmVsIFNlY3VyaXR5IHByb3RlY3Rpb24uCiAgICBTRUxJTlVYVFlQRT10YXJnZXRlZAogICAgCgotIHBhdGg6ICcvb3B0L2Jpbi9zZXR1cCcKICBwZXJtaXNzaW9uczogJzA3NTUnCiAgY29udGVudDogfC0KICAgICMhL2Jpbi9iYXNoCiAgICBzZXQgLXhldW8gcGlwZWZhaWwKICAgIAogICAgc2V0ZW5mb3JjZSAwIHx8IHRydWUKICAgIHN5c3RlbWN0bCByZXN0YXJ0IHN5c3RlbWQtbW9kdWxlcy1sb2FkLnNlcnZpY2UKICAgIHN5c2N0bCAtLXN5c3RlbQogICAgc2VkIC1pLm9yaWcgJy8uKnN3YXAuKi9kJyAvZXRjL2ZzdGFiCiAgICBzd2Fwb2ZmIC1hCiAgICAKICAgIAogICAgeXVtIGluc3RhbGwgLXkgXAogICAgICBkZXZpY2UtbWFwcGVyLXBlcnNpc3RlbnQtZGF0YSBcCiAgICAgIGx2bTIgXAogICAgICBlYnRhYmxlcyBcCiAgICAgIGV0aHRvb2wgXAogICAgICBuZnMtdXRpbHMgXAogICAgICBiYXNoLWNvbXBsZXRpb24gXAogICAgICBzdWRvIFwKICAgICAgc29jYXQgXAogICAgICB3Z2V0IFwKICAgICAgY3VybCBcCiAgICAgIGlwdnNhZG0KICAgIHl1bSBpbnN0YWxsIC15IHl1bS11dGlscwogICAgeXVtLWNvbmZpZy1tYW5hZ2VyIC0tYWRkLXJlcG89aHR0cHM6Ly9kb3dubG9hZC5kb2NrZXIuY29tL2xpbnV4L2NlbnRvcy9kb2NrZXItY2UucmVwbwogICAgeXVtLWNvbmZpZy1tYW5hZ2VyIC0tc2F2ZSAtLXNldG9wdD1kb2NrZXItY2Utc3RhYmxlLm1vZHVsZV9ob3RmaXhlcz10cnVlCiAgICAKICAgIGNhdCA8PEVPRiB8IHRlZSAvZXRjL2NyaWN0bC55YW1sCiAgICBydW50aW1lLWVuZHBvaW50OiB1bml4Oi8vL3J1bi9jb250YWluZXJkL2NvbnRhaW5lcmQuc29jawogICAgRU9GCiAgICAKICAgIG1rZGlyIC1wIC9ldGMvc3lzdGVtZC9zeXN0ZW0vY29udGFpbmVyZC5zZXJ2aWNlLmQKICAgIGNhdCA8PEVPRiB8IHRlZSAvZXRjL3N5c3RlbWQvc3lzdGVtL2NvbnRhaW5lcmQuc2VydmljZS5kL2Vudmlyb25tZW50LmNvbmYKICAgIFtTZXJ2aWNlXQogICAgUmVzdGFydD1hbHdheXMKICAgIEVudmlyb25tZW50RmlsZT0tL2V0Yy9lbnZpcm9ubWVudAogICAgRU9GCiAgICAKICAgIHl1bSBpbnN0YWxsIC15IGNvbnRhaW5lcmQuaW8tMS40KiB5dW0tcGx1Z2luLXZlcnNpb25sb2NrCiAgICB5dW0gdmVyc2lvbmxvY2sgYWRkIGNvbnRhaW5lcmQuaW8KICAgIAogICAgc3lzdGVtY3RsIGRhZW1vbi1yZWxvYWQKICAgIHN5c3RlbWN0bCBlbmFibGUgLS1ub3cgY29udGFpbmVyZAogICAgb3B0X2Jpbj0vb3B0L2JpbgogICAgdXNyX2xvY2FsX2Jpbj0vdXNyL2xvY2FsL2JpbgogICAgY25pX2Jpbl9kaXI9L29wdC9jbmkvYmluCiAgICBta2RpciAtcCAvZXRjL2NuaS9uZXQuZCAvZXRjL2t1YmVybmV0ZXMvZHluYW1pYy1jb25maWctZGlyIC9ldGMva3ViZXJuZXRlcy9tYW5pZmVzdHMgIiRvcHRfYmluIiAiJGNuaV9iaW5fZGlyIgogICAgYXJjaD0ke0hPU1RfQVJDSC19CiAgICBpZiBbIC16ICIkYXJjaCIgXQogICAgdGhlbgogICAgY2FzZSAkKHVuYW1lIC1tKSBpbgogICAgeDg2XzY0KQogICAgICAgIGFyY2g9ImFtZDY0IgogICAgICAgIDs7CiAgICBhYXJjaDY0KQogICAgICAgIGFyY2g9ImFybTY0IgogICAgICAgIDs7CiAgICAqKQogICAgICAgIGVjaG8gInVuc3VwcG9ydGVkIENQVSBhcmNoaXRlY3R1cmUsIGV4aXRpbmciCiAgICAgICAgZXhpdCAxCiAgICAgICAgOzsKICAgIGVzYWMKICAgIGZpCiAgICBDTklfVkVSU0lPTj0iJHtDTklfVkVSU0lPTjotdjAuOC43fSIKICAgIGNuaV9iYXNlX3VybD0iaHR0cHM6Ly9naXRodWIuY29tL2NvbnRhaW5lcm5ldHdvcmtpbmcvcGx1Z2lucy9yZWxlYXNlcy9kb3dubG9hZC8kQ05JX1ZFUlNJT04iCiAgICBjbmlfZmlsZW5hbWU9ImNuaS1wbHVnaW5zLWxpbnV4LSRhcmNoLSRDTklfVkVSU0lPTi50Z3oiCiAgICBjdXJsIC1MZm8gIiRjbmlfYmluX2Rpci8kY25pX2ZpbGVuYW1lIiAiJGNuaV9iYXNlX3VybC8kY25pX2ZpbGVuYW1lIgogICAgY25pX3N1bT0kKGN1cmwgLUxmICIkY25pX2Jhc2VfdXJsLyRjbmlfZmlsZW5hbWUuc2hhMjU2IikKICAgIGNkICIkY25pX2Jpbl9kaXIiCiAgICBzaGEyNTZzdW0gLWMgPDw8IiRjbmlfc3VtIgogICAgdGFyIHh2ZiAiJGNuaV9maWxlbmFtZSIKICAgIHJtIC1mICIkY25pX2ZpbGVuYW1lIgogICAgY2QgLQogICAgQ1JJX1RPT0xTX1JFTEVBU0U9IiR7Q1JJX1RPT0xTX1JFTEVBU0U6LXYxLjIyLjB9IgogICAgY3JpX3Rvb2xzX2Jhc2VfdXJsPSJodHRwczovL2dpdGh1Yi5jb20va3ViZXJuZXRlcy1zaWdzL2NyaS10b29scy9yZWxlYXNlcy9kb3dubG9hZC8ke0NSSV9UT09MU19SRUxFQVNFfSIKICAgIGNyaV90b29sc19maWxlbmFtZT0iY3JpY3RsLSR7Q1JJX1RPT0xTX1JFTEVBU0V9LWxpbnV4LSR7YXJjaH0udGFyLmd6IgogICAgY3VybCAtTGZvICIkb3B0X2Jpbi8kY3JpX3Rvb2xzX2ZpbGVuYW1lIiAiJGNyaV90b29sc19iYXNlX3VybC8kY3JpX3Rvb2xzX2ZpbGVuYW1lIgogICAgY3JpX3Rvb2xzX3N1bT0kKGN1cmwgLUxmICIkY3JpX3Rvb2xzX2Jhc2VfdXJsLyRjcmlfdG9vbHNfZmlsZW5hbWUuc2hhMjU2IiB8IHNlZCAncy9cKlwvLy8nKQogICAgY2QgIiRvcHRfYmluIgogICAgc2hhMjU2c3VtIC1jIDw8PCIkY3JpX3Rvb2xzX3N1bSIKICAgIHRhciB4dmYgIiRjcmlfdG9vbHNfZmlsZW5hbWUiCiAgICBybSAtZiAiJGNyaV90b29sc19maWxlbmFtZSIKICAgIGxuIC1zZiAiJG9wdF9iaW4vY3JpY3RsIiAiJHVzcl9sb2NhbF9iaW4iL2NyaWN0bCB8fCBlY2hvICJzeW1ib2xpYyBsaW5rIGlzIHNraXBwZWQiCiAgICBjZCAtCiAgICBLVUJFX1ZFUlNJT049IiR7S1VCRV9WRVJTSU9OOi12MS4yMi4xfSIKICAgIGt1YmVfZGlyPSIkb3B0X2Jpbi9rdWJlcm5ldGVzLSRLVUJFX1ZFUlNJT04iCiAgICBrdWJlX2Jhc2VfdXJsPSJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20va3ViZXJuZXRlcy1yZWxlYXNlL3JlbGVhc2UvJEtVQkVfVkVSU0lPTi9iaW4vbGludXgvJGFyY2giCiAgICBrdWJlX3N1bV9maWxlPSIka3ViZV9kaXIvc2hhMjU2IgogICAgbWtkaXIgLXAgIiRrdWJlX2RpciIKICAgIDogPiIka3ViZV9zdW1fZmlsZSIKICAgIAogICAgZm9yIGJpbiBpbiBrdWJlbGV0IGt1YmVhZG0ga3ViZWN0bDsgZG8KICAgICAgICBjdXJsIC1MZm8gIiRrdWJlX2Rpci8kYmluIiAiJGt1YmVfYmFzZV91cmwvJGJpbiIKICAgICAgICBjaG1vZCAreCAiJGt1YmVfZGlyLyRiaW4iCiAgICAgICAgc3VtPSQoY3VybCAtTGYgIiRrdWJlX2Jhc2VfdXJsLyRiaW4uc2hhMjU2IikKICAgICAgICBlY2hvICIkc3VtICAka3ViZV9kaXIvJGJpbiIgPj4iJGt1YmVfc3VtX2ZpbGUiCiAgICBkb25lCiAgICBzaGEyNTZzdW0gLWMgIiRrdWJlX3N1bV9maWxlIgogICAgCiAgICBmb3IgYmluIGluIGt1YmVsZXQga3ViZWFkbSBrdWJlY3RsOyBkbwogICAgICAgIGxuIC1zZiAiJGt1YmVfZGlyLyRiaW4iICIkb3B0X2JpbiIvJGJpbgogICAgZG9uZQogICAgCiAgICBpZiBbWyAhIC14IC9vcHQvYmluL2hlYWx0aC1tb25pdG9yLnNoIF1dOyB0aGVuCiAgICAgICAgY3VybCAtTGZvIC9vcHQvYmluL2hlYWx0aC1tb25pdG9yLnNoIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9rdWJlcm1hdGljL21hY2hpbmUtY29udHJvbGxlci83OTY3YTBhZjJiNzVmMjlhZDJhYjIyN2VlYWEyNmVhN2IwZjJmYmRlL3BrZy91c2VyZGF0YS9zY3JpcHRzL2hlYWx0aC1tb25pdG9yLnNoCiAgICAgICAgY2htb2QgK3ggL29wdC9iaW4vaGVhbHRoLW1vbml0b3Iuc2gKICAgIGZpCiAgICAKICAgIG1rZGlyIC1wIC9ldGMvc3lzdGVtZC9zeXN0ZW0va3ViZWxldC5zZXJ2aWNlLmQvCiAgICAjIHNldCBrdWJlbGV0IG5vZGVpcCBlbnZpcm9ubWVudCB2YXJpYWJsZQogICAgL29wdC9iaW4vc2V0dXBfbmV0X2Vudi5zaAogICAgCiAgICBzeXN0ZW1jdGwgZW5hYmxlIC0tbm93IGt1YmVsZXQKICAgIHN5c3RlbWN0bCBlbmFibGUgLS1ub3cgLS1uby1ibG9jayBrdWJlbGV0LWhlYWx0aGNoZWNrLnNlcnZpY2UKICAgIAoKLSBwYXRoOiAnL29wdC9iaW4vc3VwZXJ2aXNlLnNoJwogIHBlcm1pc3Npb25zOiAnMDc1NScKICBjb250ZW50OiB8LQogICAgIyEvYmluL2Jhc2gKICAgIHNldCAteGV1byBwaXBlZmFpbAogICAgd2hpbGUgISAiJEAiOyBkbwogICAgICBzbGVlcCAxCiAgICBkb25lCiAgICAKCi0gcGF0aDogJy9ldGMvc3lzdGVtZC9zeXN0ZW0va3ViZWxldC5zZXJ2aWNlJwogIGNvbnRlbnQ6IHwtCiAgICBbVW5pdF0KICAgIEFmdGVyPWNvbnRhaW5lcmQuc2VydmljZQogICAgUmVxdWlyZXM9Y29udGFpbmVyZC5zZXJ2aWNlCiAgICAKICAgIERlc2NyaXB0aW9uPWt1YmVsZXQ6IFRoZSBLdWJlcm5ldGVzIE5vZGUgQWdlbnQKICAgIERvY3VtZW50YXRpb249aHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvaG9tZS8KICAgIAogICAgW1NlcnZpY2VdCiAgICBSZXN0YXJ0PWFsd2F5cwogICAgU3RhcnRMaW1pdEludGVydmFsPTAKICAgIFJlc3RhcnRTZWM9MTAKICAgIENQVUFjY291bnRpbmc9dHJ1ZQogICAgTWVtb3J5QWNjb3VudGluZz10cnVlCiAgICAKICAgIEVudmlyb25tZW50PSJQQVRIPS9vcHQvYmluOi9iaW46L3Vzci9sb2NhbC9zYmluOi91c3IvbG9jYWwvYmluOi91c3Ivc2JpbjovdXNyL2Jpbjovc2Jpbi8iCiAgICBFbnZpcm9ubWVudEZpbGU9LS9ldGMvZW52aXJvbm1lbnQKICAgIAogICAgRXhlY1N0YXJ0UHJlPS9iaW4vYmFzaCAvb3B0L2xvYWQta2VybmVsLW1vZHVsZXMuc2gKICAgIEV4ZWNTdGFydFByZT0vYmluL2Jhc2ggL29wdC9iaW4vc2V0dXBfbmV0X2Vudi5zaAogICAgRXhlY1N0YXJ0PS9vcHQvYmluL2t1YmVsZXQgJEtVQkVMRVRfRVhUUkFfQVJHUyBcCiAgICAgIC0tYm9vdHN0cmFwLWt1YmVjb25maWc9L2V0Yy9rdWJlcm5ldGVzL2Jvb3RzdHJhcC1rdWJlbGV0LmNvbmYgXAogICAgICAtLWt1YmVjb25maWc9L3Zhci9saWIva3ViZWxldC9rdWJlY29uZmlnIFwKICAgICAgLS1jb25maWc9L2V0Yy9rdWJlcm5ldGVzL2t1YmVsZXQuY29uZiBcCiAgICAgIC0tbmV0d29yay1wbHVnaW49Y25pIFwKICAgICAgLS1jZXJ0LWRpcj0vZXRjL2t1YmVybmV0ZXMvcGtpIFwKICAgICAgLS1jbG91ZC1wcm92aWRlcj1hd3MgXAogICAgICAtLWNsb3VkLWNvbmZpZz0vZXRjL2t1YmVybmV0ZXMvY2xvdWQtY29uZmlnIFwKICAgICAgLS1keW5hbWljLWNvbmZpZy1kaXI9L2V0Yy9rdWJlcm5ldGVzL2R5bmFtaWMtY29uZmlnLWRpciBcCiAgICAgIC0tZmVhdHVyZS1nYXRlcz1EeW5hbWljS3ViZWxldENvbmZpZz10cnVlIFwKICAgICAgLS1leGl0LW9uLWxvY2stY29udGVudGlvbiBcCiAgICAgIC0tbG9jay1maWxlPS90bXAva3ViZWxldC5sb2NrIFwKICAgICAgLS1jb250YWluZXItcnVudGltZT1yZW1vdGUgXAogICAgICAtLWNvbnRhaW5lci1ydW50aW1lLWVuZHBvaW50PXVuaXg6Ly8vcnVuL2NvbnRhaW5lcmQvY29udGFpbmVyZC5zb2NrIFwKICAgICAgLS1ub2RlLWlwICR7S1VCRUxFVF9OT0RFX0lQfQogICAgCiAgICBbSW5zdGFsbF0KICAgIFdhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CiAgICAKCi0gcGF0aDogJy9ldGMva3ViZXJuZXRlcy9jbG91ZC1jb25maWcnCiAgcGVybWlzc2lvbnM6ICcwNjAwJwogIGNvbnRlbnQ6IHwtCiAgICBbZ2xvYmFsXQogICAgWm9uZT0iIgogICAgVlBDPSIiCiAgICBTdWJuZXRJRD0idGVzdC1zdWJuZXQiCiAgICAKICAgIAoKLSBwYXRoOiAnL29wdC9iaW4vc2V0dXBfbmV0X2Vudi5zaCcKICBwZXJtaXNzaW9uczogJzA3NTUnCiAgY29udGVudDogfC0KICAgICMhL3Vzci9iaW4vZW52IGJhc2gKICAgIGVjaG9kYXRlKCkgewogICAgICBlY2hvICJbJChkYXRlIC1JcyldIiAiJEAiCiAgICB9CiAgICAKICAgICMgZ2V0IHRoZSBkZWZhdWx0IGludGVyZmFjZSBJUCBhZGRyZXNzCiAgICBERUZBVUxUX0lGQ19JUD0kKGlwIC1vICByb3V0ZSBnZXQgMSB8IGdyZXAgLW9QICJzcmMgXEtcUysiKQogICAgCiAgICBpZiBbIC16ICIke0RFRkFVTFRfSUZDX0lQfSIgXQogICAgdGhlbgogICAgICBlY2hvZGF0ZSAiRmFpbGVkIHRvIGdldCBJUCBhZGRyZXNzIGZvciB0aGUgZGVmYXVsdCByb3V0ZSBpbnRlcmZhY2UiCiAgICAgIGV4aXQgMQogICAgZmkKICAgIAogICAgICMgZ2V0IHRoZSBmdWxsIGhvc3RuYW1lCiAgICBGVUxMX0hPU1ROQU1FPSQoaG9zdG5hbWUgLWYpCiAgICAKICAgICMgd3JpdGUgdGhlIG5vZGVpcF9lbnYgZmlsZQogICAgIyB3ZSBuZWVkIHRoZSBsaW5lIGJlbG93IGJlY2F1c2UgZmxhdGNhciBoYXMgdGhlIHNhbWUgc3RyaW5nICJjb3Jlb3MiIGluIHRoYXQgZmlsZQogICAgaWYgZ3JlcCAtcSBjb3Jlb3MgL2V0Yy9vcy1yZWxlYXNlCiAgICB0aGVuCiAgICAgIGVjaG8gIktVQkVMRVRfTk9ERV9JUD0ke0RFRkFVTFRfSUZDX0lQfVxuS1VCRUxFVF9IT1NUTkFNRT0ke0ZVTExfSE9TVE5BTUV9IiA+IC9ldGMva3ViZXJuZXRlcy9ub2RlaXAuY29uZgogICAgZWxpZiBbICEgLWQgL2V0Yy9zeXN0ZW1kL3N5c3RlbS9rdWJlbGV0LnNlcnZpY2UuZCBdCiAgICB0aGVuCiAgICAgIGVjaG9kYXRlICJDYW4ndCBmaW5kIGt1YmVsZXQgc2VydmljZSBleHRyYXMgZGlyZWN0b3J5IgogICAgICBleGl0IDEKICAgIGVsc2UKICAgICAgZWNobyAtZSAiW1NlcnZpY2VdXG5FbnZpcm9ubWVudD1cIktVQkVMRVRfTk9ERV9JUD0ke0RFRkFVTFRfSUZDX0lQfVwiXG5FbnZpcm9ubWVudD1cIktVQkVMRVRfSE9TVE5BTUU9JHtGVUxMX0hPU1ROQU1FfVwiIiA+IC9ldGMvc3lzdGVtZC9zeXN0ZW0va3ViZWxldC5zZXJ2aWNlLmQvbm9kZWlwLmNvbmYKICAgIGZpCiAgICAKCi0gcGF0aDogJy9ldGMva3ViZXJuZXRlcy9wa2kvY2EuY3J0JwogIGNvbnRlbnQ6IHwtCiAgICAtLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KICAgIE1JSUVXakNDQTBLZ0F3SUJBZ0lKQUxmUmxXc0k4WVFITUEwR0NTcUdTSWIzRFFFQkJRVUFNSHN4Q3pBSkJnTlYKICAgIEJBWVRBbFZUTVFzd0NRWURWUVFJRXdKRFFURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeVlXNWphWE5qYnpFVU1CSUcKICAgIEExVUVDaE1MUW5KaFpHWnBkSHBwYm1NeEVqQVFCZ05WQkFNVENXeHZZMkZzYUc5emRERWRNQnNHQ1NxR1NJYjMKICAgIERRRUpBUllPWW5KaFpFQmtZVzVuWVM1amIyMHdIaGNOTVRRd056RTFNakEwTmpBMVdoY05NVGN3TlRBME1qQTAKICAgIE5qQTFXakI3TVFzd0NRWURWUVFHRXdKVlV6RUxNQWtHQTFVRUNCTUNRMEV4RmpBVUJnTlZCQWNURFZOaGJpQkcKICAgIGNtRnVZMmx6WTI4eEZEQVNCZ05WQkFvVEMwSnlZV1JtYVhSNmFXNWpNUkl3RUFZRFZRUURFd2xzYjJOaGJHaHYKICAgIGMzUXhIVEFiQmdrcWhraUc5dzBCQ1FFV0RtSnlZV1JBWkdGdVoyRXVZMjl0TUlJQklqQU5CZ2txaGtpRzl3MEIKICAgIEFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXQ1ZkFqcDRmVGNla1dVVGZ6c3Awa3lpaDFPWWJzR0wwS1gxZVJiU1MKICAgIFI4T2QwKzlRNjJIeW55K0dGd01UYjRBL0tVOG1zc29IdmNjZVNBQWJ3ZmJ4RksvK3M1MVRvYnFVbk9SWnJPb1QKICAgIFpqa1V5Z2J5WERTSzk5WUJiY1IxUGlwOHZ3TVRtNFhLdUx0Q2lnZUJCZGpqQVFkZ1VPMjhMRU5HbHNNbm1lWWsKICAgIEpmT0RWR25WbXI1THRiOUFOQThJS3lUZnNuSEo0aU9DUy9QbFBiVWoycTdZbm9WTHBvc1VCTWxnVWIvQ3lrWDMKICAgIG1Pb0xiNHlKSlF5QS9pU1Q2WnhpSUVqMzZENHlXWjVsZzdZSmwrVWlpQlFIR0NuUGRHeWlwcVYwNmV4MGhlWVcKICAgIGNhaVc4TFdaU1VROTNqUStXVkNIOGhUN0RRTzFkbXN2VW1YbHEvSmVBbHdRL1FJREFRQUJvNEhnTUlIZE1CMEcKICAgIEExVWREZ1FXQkJSY0FST3RoUzRQNFU3dlRmakJ5QzU2OVI3RTZEQ0JyUVlEVlIwakJJR2xNSUdpZ0JSY0FST3QKICAgIGhTNFA0VTd2VGZqQnlDNTY5UjdFNktGL3BIMHdlekVMTUFrR0ExVUVCaE1DVlZNeEN6QUpCZ05WQkFnVEFrTkIKICAgIE1SWXdGQVlEVlFRSEV3MVRZVzRnUm5KaGJtTnBjMk52TVJRd0VnWURWUVFLRXd0Q2NtRmtabWwwZW1sdVl6RVMKICAgIE1CQUdBMVVFQXhNSmJHOWpZV3hvYjNOME1SMHdHd1lKS29aSWh2Y05BUWtCRmc1aWNtRmtRR1JoYm1kaExtTnYKICAgIGJZSUpBTGZSbFdzSThZUUhNQXdHQTFVZEV3UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUZCUUFEZ2dFQkFHNmgKICAgIFU5ZjlzTkgwLzZvQmJHR3kyRVZVMFVnSVRVUUlyRldvOXJGa3JXNWsvWGtEalFtKzNsempUMGlHUjRJeEUvQW8KICAgIGVVNnNRaHVhN3dyV2VGRW40N0dMOThsbkNzSmREN29aTmhGbVE5NVRiL0xuRFVqczVZajliclAwTld6WGZZVTQKICAgIFVLMlpuSU5KUmNKcEI4aVJDYUN4RThEZGNVRjBYcUlFcTZwQTI3MnNub0xtaVhMTXZObDNrWUVkbStqZTZ2b0QKICAgIDU4U05WRVVzenR6UXlYbUpFaENwd1ZJMEE2UUNqelhqK3F2cG13M1paSGk4SndYZWk4WlpCTFRTRkJraThaN24KICAgIHNIOUJCSDM4L1N6VW1BTjRRSFNQeTFnanFtMDBPQUU4TmFZRGtoL2J6RTRkN21MR0dNV3AvV0UzS1BTdTgySEYKICAgIGtQZTZYb1NiaUxtL2t4azMyVDA9CiAgICAtLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCiAgICAKCi0gcGF0aDogJy9ldGMvc3lzdGVtZC9zeXN0ZW0vc2V0dXAuc2VydmljZScKICBwZXJtaXNzaW9uczogJzA2NDQnCiAgY29udGVudDogfC0KICAgIFtJbnN0YWxsXQogICAgV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKICAgIAogICAgW1VuaXRdCiAgICBSZXF1aXJlcz1uZXR3b3JrLW9ubGluZS50YXJnZXQKICAgIEFmdGVyPW5ldHdvcmstb25saW5lLnRhcmdldAogICAgCiAgICBbU2VydmljZV0KICAgIFR5cGU9b25lc2hvdAogICAgUmVtYWluQWZ0ZXJFeGl0PXRydWUKICAgIEVudmlyb25tZW50RmlsZT0tL2V0Yy9lbnZpcm9ubWVudAogICAgRXhlY1N0YXJ0PS9vcHQvYmluL3N1cGVydmlzZS5zaCAvb3B0L2Jpbi9zZXR1cAogICAgCgotIHBhdGg6ICcvZXRjL3Byb2ZpbGUuZC9vcHQtYmluLXBhdGguc2gnCiAgcGVybWlzc2lvbnM6ICcwNjQ0JwogIGNvbnRlbnQ6IHwtCiAgICBleHBvcnQgUEFUSD0iL29wdC9iaW46JFBBVEgiCiAgICAKCi0gcGF0aDogJy9ldGMva3ViZXJuZXRlcy9rdWJlbGV0LmNvbmYnCiAgY29udGVudDogfC0KICAgIGFwaVZlcnNpb246IGt1YmVsZXQuY29uZmlnLms4cy5pby92MWJldGExCiAgICBraW5kOiBLdWJlbGV0Q29uZmlndXJhdGlvbgogICAgYXV0aGVudGljYXRpb246CiAgICAgIGFub255bW91czoKICAgICAgICBlbmFibGVkOiBmYWxzZQogICAgICB3ZWJob29rOgogICAgICAgIGVuYWJsZWQ6IHRydWUKICAgICAgeDUwOToKICAgICAgICBjbGllbnRDQUZpbGU6IC9ldGMva3ViZXJuZXRlcy9wa2kvY2EuY3J0CiAgICBhdXRob3JpemF0aW9uOgogICAgICBtb2RlOiBXZWJob29rCiAgICBjZ3JvdXBEcml2ZXI6IHN5c3RlbWQKICAgIGNsdXN0ZXJETlM6CiAgICAtICIxMC4wLjAuMCIKICAgIGNsdXN0ZXJEb21haW46IGNsdXN0ZXIubG9jYWwKICAgIGNvbnRhaW5lckxvZ01heFNpemU6IDEwME1pCiAgICBjb250YWluZXJMb2dNYXhGaWxlczogNQogICAgZmVhdHVyZUdhdGVzOgogICAgICBHcmFjZWZ1bE5vZGVTaHV0ZG93bjogdHJ1ZQogICAgICBJZGVudGlmeVBvZE9TOiBmYWxzZQogICAgcHJvdGVjdEtlcm5lbERlZmF1bHRzOiB0cnVlCiAgICByZWFkT25seVBvcnQ6IDAKICAgIHJvdGF0ZUNlcnRpZmljYXRlczogdHJ1ZQogICAgc2VydmVyVExTQm9vdHN0cmFwOiB0cnVlCiAgICBzdGF0aWNQb2RQYXRoOiAvZXRjL2t1YmVybmV0ZXMvbWFuaWZlc3RzCiAgICBrdWJlUmVzZXJ2ZWQ6CiAgICAgIGNwdTogMjAwbQogICAgICBlcGhlbWVyYWwtc3RvcmFnZTogMUdpCiAgICAgIG1lbW9yeTogMjAwTWkKICAgIHN5c3RlbVJlc2VydmVkOgogICAgICBjcHU6IDIwMG0KICAgICAgZXBoZW1lcmFsLXN0b3JhZ2U6IDFHaQogICAgICBtZW1vcnk6IDIwME1pCiAgICBldmljdGlvbkhhcmQ6CiAgICAgIGltYWdlZnMuYXZhaWxhYmxlOiAxNSUKICAgICAgbWVtb3J5LmF2YWlsYWJsZTogMTAwTWkKICAgICAgbm9kZWZzLmF2YWlsYWJsZTogMTAlCiAgICAgIG5vZGVmcy5pbm9kZXNGcmVlOiA1JQogICAgdGxzQ2lwaGVyU3VpdGVzOgogICAgLSBUTFNfQUVTXzEyOF9HQ01fU0hBMjU2CiAgICAtIFRMU19BRVNfMjU2X0dDTV9TSEEzODQKICAgIC0gVExTX0NIQUNIQTIwX1BPTFkxMzA1X1NIQTI1NgogICAgLSBUTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYKICAgIC0gVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CiAgICAtIFRMU19FQ0RIRV9FQ0RTQV9XSVRIX0NIQUNIQTIwX1BPTFkxMzA1CiAgICAtIFRMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYKICAgIC0gVExTX0VDREhFX1JTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAogICAgLSBUTFNfRUNESEVfUlNBX1dJVEhfQ0hBQ0hBMjBfUE9MWTEzMDUKICAgIHZvbHVtZVBsdWdpbkRpcjogL3Zhci9saWIva3ViZWxldC92b2x1bWVwbHVnaW5zCiAgICAKCi0gcGF0aDogJy9ldGMvc3lzdGVtZC9zeXN0ZW0va3ViZWxldC1oZWFsdGhjaGVjay5zZXJ2aWNlJwogIHBlcm1pc3Npb25zOiAnMDY0NCcKICBjb250ZW50OiB8LQogICAgW1VuaXRdCiAgICBSZXF1aXJlcz1rdWJlbGV0LnNlcnZpY2UKICAgIEFmdGVyPWt1YmVsZXQuc2VydmljZQogICAgCiAgICBbU2VydmljZV0KICAgIEV4ZWNTdGFydD0vb3B0L2Jpbi9oZWFsdGgtbW9uaXRvci5zaCBrdWJlbGV0CiAgICAKICAgIFtJbnN0YWxsXQogICAgV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKICAgIAoKLSBwYXRoOiAnL2V0Yy9jb250YWluZXJkL2NvbmZpZy50b21sJwogIHBlcm1pc3Npb25zOiAnMDY0NCcKICBjb250ZW50OiB8LQogICAgdmVyc2lvbiA9IDIKICAgIAogICAgW21ldHJpY3NdCiAgICBhZGRyZXNzID0gIjEyNy4wLjAuMToxMzM4IgogICAgCiAgICBbcGx1Z2luc10KICAgIFtwbHVnaW5zLiJpby5jb250YWluZXJkLmdycGMudjEuY3JpIl0KICAgIHNhbmRib3hfaW1hZ2UgPSAiMTkyLjE2OC4xMDAuMTAwOjUwMDAva3ViZXJuZXRlcy9wYXVzZTp2My4xIgogICAgW3BsdWdpbnMuImlvLmNvbnRhaW5lcmQuZ3JwYy52MS5jcmkiLmNvbnRhaW5lcmRdCiAgICBbcGx1Z2lucy4iaW8uY29udGFpbmVyZC5ncnBjLnYxLmNyaSIuY29udGFpbmVyZC5ydW50aW1lc10KICAgIFtwbHVnaW5zLiJpby5jb250YWluZXJkLmdycGMudjEuY3JpIi5jb250YWluZXJkLnJ1bnRpbWVzLnJ1bmNdCiAgICBydW50aW1lX3R5cGUgPSAiaW8uY29udGFpbmVyZC5ydW5jLnYyIgogICAgW3BsdWdpbnMuImlvLmNvbnRhaW5lcmQuZ3JwYy52MS5jcmkiLmNvbnRhaW5lcmQucnVudGltZXMucnVuYy5vcHRpb25zXQogICAgU3lzdGVtZENncm91cCA9IHRydWUKICAgIFtwbHVnaW5zLiJpby5jb250YWluZXJkLmdycGMudjEuY3JpIi5yZWdpc3RyeV0KICAgIFtwbHVnaW5zLiJpby5jb250YWluZXJkLmdycGMudjEuY3JpIi5yZWdpc3RyeS5taXJyb3JzXQogICAgW3BsdWdpbnMuImlvLmNvbnRhaW5lcmQuZ3JwYy52MS5jcmkiLnJlZ2lzdHJ5Lm1pcnJvcnMuImRvY2tlci5pbyJdCiAgICBlbmRwb2ludCA9IFsiaHR0cHM6Ly9yZWdpc3RyeS5kb2NrZXItY24uY29tIl0KICAgIFtwbHVnaW5zLiJpby5jb250YWluZXJkLmdycGMudjEuY3JpIi5yZWdpc3RyeS5jb25maWdzXQogICAgW3BsdWdpbnMuImlvLmNvbnRhaW5lcmQuZ3JwYy52MS5jcmkiLnJlZ2lzdHJ5LmNvbmZpZ3MuIjEwLjAuMC4xOjUwMDAiXQogICAgW3BsdWdpbnMuImlvLmNvbnRhaW5lcmQuZ3JwYy52MS5jcmkiLnJlZ2lzdHJ5LmNvbmZpZ3MuIjEwLjAuMC4xOjUwMDAiLnRsc10KICAgIGluc2VjdXJlX3NraXBfdmVyaWZ5ID0gdHJ1ZQogICAgW3BsdWdpbnMuImlvLmNvbnRhaW5lcmQuZ3JwYy52MS5jcmkiLnJlZ2lzdHJ5LmNvbmZpZ3MuIjE5Mi4xNjguMTAwLjEwMDo1MDAwIl0KICAgIFtwbHVnaW5zLiJpby5jb250YWluZXJkLmdycGMudjEuY3JpIi5yZWdpc3RyeS5jb25maWdzLiIxOTIuMTY4LjEwMC4xMDA6NTAwMCIudGxzXQogICAgaW5zZWN1cmVfc2tpcF92ZXJpZnkgPSB0cnVlCiAgICAKICAgIAoKYm9vdGNtZDoKLSBtb2Rwcm9iZSBpcF90YWJsZXMK immutable: true kind: Secret metadata: creationTimestamp: null - name: osp-rhel-aws-osc-provisioning + name: osp-rhel-aws-kube-system-osc-provisioning namespace: cloud-init-settings resourceVersion: "1" +type: Opaque diff --git a/pkg/controllers/osc/testdata/secret-ubuntu-20.04-aws-containerd.yaml b/pkg/controllers/osc/testdata/secret-ubuntu-aws-containerd.yaml similarity index 80% rename from pkg/controllers/osc/testdata/secret-ubuntu-20.04-aws-containerd.yaml rename to pkg/controllers/osc/testdata/secret-ubuntu-aws-containerd.yaml index 175823ee..84bad8dc 100644 --- a/pkg/controllers/osc/testdata/secret-ubuntu-20.04-aws-containerd.yaml +++ b/pkg/controllers/osc/testdata/secret-ubuntu-aws-containerd.yaml @@ -1,10 +1,11 @@ apiVersion: v1 data: - cloud-config: I2Nsb3VkLWNvbmZpZwoKc3NoX3B3YXV0aDogbm8Kc3NoX2F1dGhvcml6ZWRfa2V5czoKLSAnc3NoLXJzYSBBQUFBQjNOemFDMXljMkVBQUFBREFRQUJBQUFDQVFEZE9JaFltekNLNURTVkx1M2MnCndyaXRlX2ZpbGVzOgotIHBhdGg6ICcvZXRjL3N5c3RlbWQvam91cm5hbGQuY29uZi5kL21heF9kaXNrX3VzZS5jb25mJwogIGNvbnRlbnQ6IHwtCiAgICBbSm91cm5hbF0KICAgIFN5c3RlbU1heFVzZT01RwogICAgCgotIHBhdGg6ICcvb3B0L2xvYWQta2VybmVsLW1vZHVsZXMuc2gnCiAgcGVybWlzc2lvbnM6ICcwNzU1JwogIGNvbnRlbnQ6IHwtCiAgICAjIS91c3IvYmluL2VudiBiYXNoCiAgICBzZXQgLWV1byBwaXBlZmFpbAogICAgCiAgICBtb2Rwcm9iZSBpcF92cwogICAgbW9kcHJvYmUgaXBfdnNfcnIKICAgIG1vZHByb2JlIGlwX3ZzX3dycgogICAgbW9kcHJvYmUgaXBfdnNfc2gKICAgIAogICAgaWYgbW9kaW5mbyBuZl9jb25udHJhY2tfaXB2NCAmPiAvZGV2L251bGw7IHRoZW4KICAgICAgbW9kcHJvYmUgbmZfY29ubnRyYWNrX2lwdjQKICAgIGVsc2UKICAgICAgbW9kcHJvYmUgbmZfY29ubnRyYWNrCiAgICBmaQogICAgCgotIHBhdGg6ICcvZXRjL3N5c2N0bC5kL2s4cy5jb25mJwogIGNvbnRlbnQ6IHwtCiAgICBuZXQuYnJpZGdlLmJyaWRnZS1uZi1jYWxsLWlwNnRhYmxlcyA9IDEKICAgIG5ldC5icmlkZ2UuYnJpZGdlLW5mLWNhbGwtaXB0YWJsZXMgPSAxCiAgICBrZXJuZWwucGFuaWNfb25fb29wcyA9IDEKICAgIGtlcm5lbC5wYW5pYyA9IDEwCiAgICBuZXQuaXB2NC5pcF9mb3J3YXJkID0gMQogICAgdm0ub3ZlcmNvbW1pdF9tZW1vcnkgPSAxCiAgICBmcy5pbm90aWZ5Lm1heF91c2VyX3dhdGNoZXMgPSAxMDQ4NTc2CiAgICAKCi0gcGF0aDogJy9ldGMvZGVmYXVsdC9ncnViLmQvNjAtc3dhcC1hY2NvdW50aW5nLmNmZycKICBjb250ZW50OiB8LQogICAgIyBBZGRlZCBieSBrdWJlcm1hdGljIG1hY2hpbmUtY29udHJvbGxlcgogICAgIyBFbmFibGUgY2dyb3VwcyBtZW1vcnkgYW5kIHN3YXAgYWNjb3VudGluZwogICAgR1JVQl9DTURMSU5FX0xJTlVYPSJjZ3JvdXBfZW5hYmxlPW1lbW9yeSBzd2FwYWNjb3VudD0xIgogICAgCgotIHBhdGg6ICcvb3B0L2Jpbi9zZXR1cCcKICBwZXJtaXNzaW9uczogJzA3NTUnCiAgY29udGVudDogfC0KICAgICMhL2Jpbi9iYXNoCiAgICBzZXQgLXhldW8gcGlwZWZhaWwKICAgIGlmIHN5c3RlbWN0bCBpcy1hY3RpdmUgdWZ3OyB0aGVuIHN5c3RlbWN0bCBzdG9wIHVmdzsgZmkKICAgIHN5c3RlbWN0bCBtYXNrIHVmdwogICAgc3lzdGVtY3RsIHJlc3RhcnQgc3lzdGVtZC1tb2R1bGVzLWxvYWQuc2VydmljZQogICAgc3lzY3RsIC0tc3lzdGVtCiAgICBzZWQgLWkub3JpZyAnLy4qc3dhcC4qL2QnIC9ldGMvZnN0YWIKICAgIHN3YXBvZmYgLWEKICAgIAogICAgYXB0LWdldCB1cGRhdGUKICAgIAogICAgREVCSUFOX0ZST05URU5EPW5vbmludGVyYWN0aXZlIGFwdC1nZXQgLW8gRHBrZzo6T3B0aW9uczo6PSItLWZvcmNlLWNvbmZkZWYiIC1vIERwa2c6Ok9wdGlvbnM6Oj0iLS1mb3JjZS1jb25mb2xkIiBpbnN0YWxsIC15IFwKICAgICAgY3VybCBcCiAgICAgIGNhLWNlcnRpZmljYXRlcyBcCiAgICAgIGNlcGgtY29tbW9uIFwKICAgICAgY2lmcy11dGlscyBcCiAgICAgIGNvbm50cmFjayBcCiAgICAgIGUyZnNwcm9ncyBcCiAgICAgIGVidGFibGVzIFwKICAgICAgZXRodG9vbCBcCiAgICAgIGdsdXN0ZXJmcy1jbGllbnQgXAogICAgICBpcHRhYmxlcyBcCiAgICAgIGpxIFwKICAgICAga21vZCBcCiAgICAgIG9wZW5zc2gtY2xpZW50IFwKICAgICAgbmZzLWNvbW1vbiBcCiAgICAgIHNvY2F0IFwKICAgICAgdXRpbC1saW51eCBcCiAgICAgIGlwdnNhZG0KICAgIGFwdC1nZXQgdXBkYXRlCiAgICBhcHQtZ2V0IGluc3RhbGwgLXkgYXB0LXRyYW5zcG9ydC1odHRwcyBjYS1jZXJ0aWZpY2F0ZXMgY3VybCBzb2Z0d2FyZS1wcm9wZXJ0aWVzLWNvbW1vbiBsc2ItcmVsZWFzZQogICAgY3VybCAtZnNTTCBodHRwczovL2Rvd25sb2FkLmRvY2tlci5jb20vbGludXgvdWJ1bnR1L2dwZyB8IGFwdC1rZXkgYWRkIC0KICAgIGFkZC1hcHQtcmVwb3NpdG9yeSAiZGViIGh0dHBzOi8vZG93bmxvYWQuZG9ja2VyLmNvbS9saW51eC91YnVudHUgJChsc2JfcmVsZWFzZSAtY3MpIHN0YWJsZSIKICAgIAogICAgY2F0IDw8RU9GIHwgdGVlIC9ldGMvY3JpY3RsLnlhbWwKICAgIHJ1bnRpbWUtZW5kcG9pbnQ6IHVuaXg6Ly8vcnVuL2NvbnRhaW5lcmQvY29udGFpbmVyZC5zb2NrCiAgICBFT0YKICAgIAogICAgbWtkaXIgLXAgL2V0Yy9zeXN0ZW1kL3N5c3RlbS9jb250YWluZXJkLnNlcnZpY2UuZAogICAgY2F0IDw8RU9GIHwgdGVlIC9ldGMvc3lzdGVtZC9zeXN0ZW0vY29udGFpbmVyZC5zZXJ2aWNlLmQvZW52aXJvbm1lbnQuY29uZgogICAgW1NlcnZpY2VdCiAgICBSZXN0YXJ0PWFsd2F5cwogICAgRW52aXJvbm1lbnRGaWxlPS0vZXRjL2Vudmlyb25tZW50CiAgICBFT0YKICAgIAogICAgYXB0LWdldCBpbnN0YWxsIC15IC0tYWxsb3ctZG93bmdyYWRlcyBjb250YWluZXJkLmlvPTEuNCoKICAgIGFwdC1tYXJrIGhvbGQgY29udGFpbmVyZC5pbwogICAgCiAgICBzeXN0ZW1jdGwgZGFlbW9uLXJlbG9hZAogICAgc3lzdGVtY3RsIGVuYWJsZSAtLW5vdyBjb250YWluZXJkCiAgICBvcHRfYmluPS9vcHQvYmluCiAgICBjbmlfYmluX2Rpcj0vb3B0L2NuaS9iaW4KICAgIG1rZGlyIC1wIC9ldGMvY25pL25ldC5kIC9ldGMva3ViZXJuZXRlcy9keW5hbWljLWNvbmZpZy1kaXIgL2V0Yy9rdWJlcm5ldGVzL21hbmlmZXN0cyAiJG9wdF9iaW4iICIkY25pX2Jpbl9kaXIiCiAgICBhcmNoPSR7SE9TVF9BUkNILX0KICAgIGlmIFsgLXogIiRhcmNoIiBdCiAgICB0aGVuCiAgICBjYXNlICQodW5hbWUgLW0pIGluCiAgICB4ODZfNjQpCiAgICAgICAgYXJjaD0iYW1kNjQiCiAgICAgICAgOzsKICAgIGFhcmNoNjQpCiAgICAgICAgYXJjaD0iYXJtNjQiCiAgICAgICAgOzsKICAgICopCiAgICAgICAgZWNobyAidW5zdXBwb3J0ZWQgQ1BVIGFyY2hpdGVjdHVyZSwgZXhpdGluZyIKICAgICAgICBleGl0IDEKICAgICAgICA7OwogICAgZXNhYwogICAgZmkKICAgIENOSV9WRVJTSU9OPSIke0NOSV9WRVJTSU9OOi12MC44Ljd9IgogICAgY25pX2Jhc2VfdXJsPSJodHRwczovL2dpdGh1Yi5jb20vY29udGFpbmVybmV0d29ya2luZy9wbHVnaW5zL3JlbGVhc2VzL2Rvd25sb2FkLyRDTklfVkVSU0lPTiIKICAgIGNuaV9maWxlbmFtZT0iY25pLXBsdWdpbnMtbGludXgtJGFyY2gtJENOSV9WRVJTSU9OLnRneiIKICAgIGN1cmwgLUxmbyAiJGNuaV9iaW5fZGlyLyRjbmlfZmlsZW5hbWUiICIkY25pX2Jhc2VfdXJsLyRjbmlfZmlsZW5hbWUiCiAgICBjbmlfc3VtPSQoY3VybCAtTGYgIiRjbmlfYmFzZV91cmwvJGNuaV9maWxlbmFtZS5zaGEyNTYiKQogICAgY2QgIiRjbmlfYmluX2RpciIKICAgIHNoYTI1NnN1bSAtYyA8PDwiJGNuaV9zdW0iCiAgICB0YXIgeHZmICIkY25pX2ZpbGVuYW1lIgogICAgcm0gLWYgIiRjbmlfZmlsZW5hbWUiCiAgICBjZCAtCiAgICBLVUJFX1ZFUlNJT049IiR7S1VCRV9WRVJTSU9OOi12MS4yMi4xfSIKICAgIGt1YmVfZGlyPSIkb3B0X2Jpbi9rdWJlcm5ldGVzLSRLVUJFX1ZFUlNJT04iCiAgICBrdWJlX2Jhc2VfdXJsPSJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20va3ViZXJuZXRlcy1yZWxlYXNlL3JlbGVhc2UvJEtVQkVfVkVSU0lPTi9iaW4vbGludXgvJGFyY2giCiAgICBrdWJlX3N1bV9maWxlPSIka3ViZV9kaXIvc2hhMjU2IgogICAgbWtkaXIgLXAgIiRrdWJlX2RpciIKICAgIDogPiIka3ViZV9zdW1fZmlsZSIKICAgIAogICAgZm9yIGJpbiBpbiBrdWJlbGV0IGt1YmVhZG0ga3ViZWN0bDsgZG8KICAgICAgICBjdXJsIC1MZm8gIiRrdWJlX2Rpci8kYmluIiAiJGt1YmVfYmFzZV91cmwvJGJpbiIKICAgICAgICBjaG1vZCAreCAiJGt1YmVfZGlyLyRiaW4iCiAgICAgICAgc3VtPSQoY3VybCAtTGYgIiRrdWJlX2Jhc2VfdXJsLyRiaW4uc2hhMjU2IikKICAgICAgICBlY2hvICIkc3VtICAka3ViZV9kaXIvJGJpbiIgPj4iJGt1YmVfc3VtX2ZpbGUiCiAgICBkb25lCiAgICBzaGEyNTZzdW0gLWMgIiRrdWJlX3N1bV9maWxlIgogICAgCiAgICBmb3IgYmluIGluIGt1YmVsZXQga3ViZWFkbSBrdWJlY3RsOyBkbwogICAgICAgIGxuIC1zZiAiJGt1YmVfZGlyLyRiaW4iICIkb3B0X2JpbiIvJGJpbgogICAgZG9uZQogICAgCiAgICBpZiBbWyAhIC14IC9vcHQvYmluL2hlYWx0aC1tb25pdG9yLnNoIF1dOyB0aGVuCiAgICAgICAgY3VybCAtTGZvIC9vcHQvYmluL2hlYWx0aC1tb25pdG9yLnNoIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9rdWJlcm1hdGljL21hY2hpbmUtY29udHJvbGxlci83OTY3YTBhZjJiNzVmMjlhZDJhYjIyN2VlYWEyNmVhN2IwZjJmYmRlL3BrZy91c2VyZGF0YS9zY3JpcHRzL2hlYWx0aC1tb25pdG9yLnNoCiAgICAgICAgY2htb2QgK3ggL29wdC9iaW4vaGVhbHRoLW1vbml0b3Iuc2gKICAgIGZpCiAgICAKICAgICMgc2V0IGt1YmVsZXQgbm9kZWlwIGVudmlyb25tZW50IHZhcmlhYmxlCiAgICAvb3B0L2Jpbi9zZXR1cF9uZXRfZW52LnNoCiAgICAKICAgIHN5c3RlbWN0bCBlbmFibGUgLS1ub3cga3ViZWxldAogICAgc3lzdGVtY3RsIGVuYWJsZSAtLW5vdyAtLW5vLWJsb2NrIGt1YmVsZXQtaGVhbHRoY2hlY2suc2VydmljZQogICAgCgotIHBhdGg6ICcvb3B0L2Jpbi9zdXBlcnZpc2Uuc2gnCiAgcGVybWlzc2lvbnM6ICcwNzU1JwogIGNvbnRlbnQ6IHwtCiAgICAjIS9iaW4vYmFzaAogICAgc2V0IC14ZXVvIHBpcGVmYWlsCiAgICB3aGlsZSAhICIkQCI7IGRvCiAgICAgIHNsZWVwIDEKICAgIGRvbmUKICAgIAoKLSBwYXRoOiAnL2V0Yy9zeXN0ZW1kL3N5c3RlbS9rdWJlbGV0LnNlcnZpY2UnCiAgY29udGVudDogfC0KICAgIFtVbml0XQogICAgQWZ0ZXI9Y29udGFpbmVyZC5zZXJ2aWNlCiAgICBSZXF1aXJlcz1jb250YWluZXJkLnNlcnZpY2UKICAgIAogICAgRGVzY3JpcHRpb249a3ViZWxldDogVGhlIEt1YmVybmV0ZXMgTm9kZSBBZ2VudAogICAgRG9jdW1lbnRhdGlvbj1odHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9ob21lLwogICAgCiAgICBbU2VydmljZV0KICAgIFJlc3RhcnQ9YWx3YXlzCiAgICBTdGFydExpbWl0SW50ZXJ2YWw9MAogICAgUmVzdGFydFNlYz0xMAogICAgQ1BVQWNjb3VudGluZz10cnVlCiAgICBNZW1vcnlBY2NvdW50aW5nPXRydWUKICAgIAogICAgRW52aXJvbm1lbnQ9IlBBVEg9L29wdC9iaW46L2JpbjovdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluLyIKICAgIEVudmlyb25tZW50RmlsZT0tL2V0Yy9lbnZpcm9ubWVudAogICAgCiAgICBFeGVjU3RhcnRQcmU9L2Jpbi9iYXNoIC9vcHQvbG9hZC1rZXJuZWwtbW9kdWxlcy5zaAogICAgRXhlY1N0YXJ0UHJlPS9iaW4vYmFzaCAvb3B0L2Jpbi9zZXR1cF9uZXRfZW52LnNoCiAgICBFeGVjU3RhcnQ9L29wdC9iaW4va3ViZWxldCAkS1VCRUxFVF9FWFRSQV9BUkdTIFwKICAgICAgLS1ib290c3RyYXAta3ViZWNvbmZpZz0vZXRjL2t1YmVybmV0ZXMvYm9vdHN0cmFwLWt1YmVsZXQuY29uZiBcCiAgICAgIC0ta3ViZWNvbmZpZz0vdmFyL2xpYi9rdWJlbGV0L2t1YmVjb25maWcgXAogICAgICAtLWNvbmZpZz0vZXRjL2t1YmVybmV0ZXMva3ViZWxldC5jb25mIFwKICAgICAgLS1uZXR3b3JrLXBsdWdpbj1jbmkgXAogICAgICAtLWNlcnQtZGlyPS9ldGMva3ViZXJuZXRlcy9wa2kgXAogICAgICAtLWNsb3VkLXByb3ZpZGVyPWF3cyBcCiAgICAgIC0tY2xvdWQtY29uZmlnPS9ldGMva3ViZXJuZXRlcy9jbG91ZC1jb25maWcgXAogICAgICAtLWR5bmFtaWMtY29uZmlnLWRpcj0vZXRjL2t1YmVybmV0ZXMvZHluYW1pYy1jb25maWctZGlyIFwKICAgICAgLS1mZWF0dXJlLWdhdGVzPUR5bmFtaWNLdWJlbGV0Q29uZmlnPXRydWUgXAogICAgICAtLWV4aXQtb24tbG9jay1jb250ZW50aW9uIFwKICAgICAgLS1sb2NrLWZpbGU9L3RtcC9rdWJlbGV0LmxvY2sgXAogICAgICAtLWNvbnRhaW5lci1ydW50aW1lPXJlbW90ZSBcCiAgICAgIC0tY29udGFpbmVyLXJ1bnRpbWUtZW5kcG9pbnQ9dW5peDovLy9ydW4vY29udGFpbmVyZC9jb250YWluZXJkLnNvY2sgXAogICAgICAtLW5vZGUtaXAgJHtLVUJFTEVUX05PREVfSVB9CiAgICAKICAgIFtJbnN0YWxsXQogICAgV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKICAgIAoKLSBwYXRoOiAnL2V0Yy9zeXN0ZW1kL3N5c3RlbS9rdWJlbGV0LnNlcnZpY2UuZC9leHRyYXMuY29uZicKICBjb250ZW50OiB8LQogICAgW1NlcnZpY2VdCiAgICBFbnZpcm9ubWVudD0iS1VCRUxFVF9FWFRSQV9BUkdTPS0tcmVzb2x2LWNvbmY9L3J1bi9zeXN0ZW1kL3Jlc29sdmUvcmVzb2x2LmNvbmYiCiAgICAKCi0gcGF0aDogJy9ldGMva3ViZXJuZXRlcy9jbG91ZC1jb25maWcnCiAgcGVybWlzc2lvbnM6ICcwNjAwJwogIGNvbnRlbnQ6IHwtCiAgICBbZ2xvYmFsXQogICAgWm9uZT0iIgogICAgVlBDPSIiCiAgICBTdWJuZXRJRD0idGVzdC1zdWJuZXQiCiAgICAKICAgIAoKLSBwYXRoOiAnL29wdC9iaW4vc2V0dXBfbmV0X2Vudi5zaCcKICBwZXJtaXNzaW9uczogJzA3NTUnCiAgY29udGVudDogfC0KICAgICMhL3Vzci9iaW4vZW52IGJhc2gKICAgIGVjaG9kYXRlKCkgewogICAgICBlY2hvICJbJChkYXRlIC1JcyldIiAiJEAiCiAgICB9CiAgICAKICAgICMgZ2V0IHRoZSBkZWZhdWx0IGludGVyZmFjZSBJUCBhZGRyZXNzCiAgICBERUZBVUxUX0lGQ19JUD0kKGlwIC1vICByb3V0ZSBnZXQgMSB8IGdyZXAgLW9QICJzcmMgXEtcUysiKQogICAgCiAgICBpZiBbIC16ICIke0RFRkFVTFRfSUZDX0lQfSIgXQogICAgdGhlbgogICAgICBlY2hvZGF0ZSAiRmFpbGVkIHRvIGdldCBJUCBhZGRyZXNzIGZvciB0aGUgZGVmYXVsdCByb3V0ZSBpbnRlcmZhY2UiCiAgICAgIGV4aXQgMQogICAgZmkKICAgIAogICAgICMgZ2V0IHRoZSBmdWxsIGhvc3RuYW1lCiAgICBGVUxMX0hPU1ROQU1FPSQoaG9zdG5hbWUgLWYpCiAgICAKICAgICMgd3JpdGUgdGhlIG5vZGVpcF9lbnYgZmlsZQogICAgIyB3ZSBuZWVkIHRoZSBsaW5lIGJlbG93IGJlY2F1c2UgZmxhdGNhciBoYXMgdGhlIHNhbWUgc3RyaW5nICJjb3Jlb3MiIGluIHRoYXQgZmlsZQogICAgaWYgZ3JlcCAtcSBjb3Jlb3MgL2V0Yy9vcy1yZWxlYXNlCiAgICB0aGVuCiAgICAgIGVjaG8gIktVQkVMRVRfTk9ERV9JUD0ke0RFRkFVTFRfSUZDX0lQfVxuS1VCRUxFVF9IT1NUTkFNRT0ke0ZVTExfSE9TVE5BTUV9IiA+IC9ldGMva3ViZXJuZXRlcy9ub2RlaXAuY29uZgogICAgZWxpZiBbICEgLWQgL2V0Yy9zeXN0ZW1kL3N5c3RlbS9rdWJlbGV0LnNlcnZpY2UuZCBdCiAgICB0aGVuCiAgICAgIGVjaG9kYXRlICJDYW4ndCBmaW5kIGt1YmVsZXQgc2VydmljZSBleHRyYXMgZGlyZWN0b3J5IgogICAgICBleGl0IDEKICAgIGVsc2UKICAgICAgZWNobyAtZSAiW1NlcnZpY2VdXG5FbnZpcm9ubWVudD1cIktVQkVMRVRfTk9ERV9JUD0ke0RFRkFVTFRfSUZDX0lQfVwiXG5FbnZpcm9ubWVudD1cIktVQkVMRVRfSE9TVE5BTUU9JHtGVUxMX0hPU1ROQU1FfVwiIiA+IC9ldGMvc3lzdGVtZC9zeXN0ZW0va3ViZWxldC5zZXJ2aWNlLmQvbm9kZWlwLmNvbmYKICAgIGZpCiAgICAKCi0gcGF0aDogJy9ldGMva3ViZXJuZXRlcy9wa2kvY2EuY3J0JwogIGNvbnRlbnQ6IHwtCiAgICAtLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KICAgIE1JSUVXakNDQTBLZ0F3SUJBZ0lKQUxmUmxXc0k4WVFITUEwR0NTcUdTSWIzRFFFQkJRVUFNSHN4Q3pBSkJnTlYKICAgIEJBWVRBbFZUTVFzd0NRWURWUVFJRXdKRFFURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeVlXNWphWE5qYnpFVU1CSUcKICAgIEExVUVDaE1MUW5KaFpHWnBkSHBwYm1NeEVqQVFCZ05WQkFNVENXeHZZMkZzYUc5emRERWRNQnNHQ1NxR1NJYjMKICAgIERRRUpBUllPWW5KaFpFQmtZVzVuWVM1amIyMHdIaGNOTVRRd056RTFNakEwTmpBMVdoY05NVGN3TlRBME1qQTAKICAgIE5qQTFXakI3TVFzd0NRWURWUVFHRXdKVlV6RUxNQWtHQTFVRUNCTUNRMEV4RmpBVUJnTlZCQWNURFZOaGJpQkcKICAgIGNtRnVZMmx6WTI4eEZEQVNCZ05WQkFvVEMwSnlZV1JtYVhSNmFXNWpNUkl3RUFZRFZRUURFd2xzYjJOaGJHaHYKICAgIGMzUXhIVEFiQmdrcWhraUc5dzBCQ1FFV0RtSnlZV1JBWkdGdVoyRXVZMjl0TUlJQklqQU5CZ2txaGtpRzl3MEIKICAgIEFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXQ1ZkFqcDRmVGNla1dVVGZ6c3Awa3lpaDFPWWJzR0wwS1gxZVJiU1MKICAgIFI4T2QwKzlRNjJIeW55K0dGd01UYjRBL0tVOG1zc29IdmNjZVNBQWJ3ZmJ4RksvK3M1MVRvYnFVbk9SWnJPb1QKICAgIFpqa1V5Z2J5WERTSzk5WUJiY1IxUGlwOHZ3TVRtNFhLdUx0Q2lnZUJCZGpqQVFkZ1VPMjhMRU5HbHNNbm1lWWsKICAgIEpmT0RWR25WbXI1THRiOUFOQThJS3lUZnNuSEo0aU9DUy9QbFBiVWoycTdZbm9WTHBvc1VCTWxnVWIvQ3lrWDMKICAgIG1Pb0xiNHlKSlF5QS9pU1Q2WnhpSUVqMzZENHlXWjVsZzdZSmwrVWlpQlFIR0NuUGRHeWlwcVYwNmV4MGhlWVcKICAgIGNhaVc4TFdaU1VROTNqUStXVkNIOGhUN0RRTzFkbXN2VW1YbHEvSmVBbHdRL1FJREFRQUJvNEhnTUlIZE1CMEcKICAgIEExVWREZ1FXQkJSY0FST3RoUzRQNFU3dlRmakJ5QzU2OVI3RTZEQ0JyUVlEVlIwakJJR2xNSUdpZ0JSY0FST3QKICAgIGhTNFA0VTd2VGZqQnlDNTY5UjdFNktGL3BIMHdlekVMTUFrR0ExVUVCaE1DVlZNeEN6QUpCZ05WQkFnVEFrTkIKICAgIE1SWXdGQVlEVlFRSEV3MVRZVzRnUm5KaGJtTnBjMk52TVJRd0VnWURWUVFLRXd0Q2NtRmtabWwwZW1sdVl6RVMKICAgIE1CQUdBMVVFQXhNSmJHOWpZV3hvYjNOME1SMHdHd1lKS29aSWh2Y05BUWtCRmc1aWNtRmtRR1JoYm1kaExtTnYKICAgIGJZSUpBTGZSbFdzSThZUUhNQXdHQTFVZEV3UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUZCUUFEZ2dFQkFHNmgKICAgIFU5ZjlzTkgwLzZvQmJHR3kyRVZVMFVnSVRVUUlyRldvOXJGa3JXNWsvWGtEalFtKzNsempUMGlHUjRJeEUvQW8KICAgIGVVNnNRaHVhN3dyV2VGRW40N0dMOThsbkNzSmREN29aTmhGbVE5NVRiL0xuRFVqczVZajliclAwTld6WGZZVTQKICAgIFVLMlpuSU5KUmNKcEI4aVJDYUN4RThEZGNVRjBYcUlFcTZwQTI3MnNub0xtaVhMTXZObDNrWUVkbStqZTZ2b0QKICAgIDU4U05WRVVzenR6UXlYbUpFaENwd1ZJMEE2UUNqelhqK3F2cG13M1paSGk4SndYZWk4WlpCTFRTRkJraThaN24KICAgIHNIOUJCSDM4L1N6VW1BTjRRSFNQeTFnanFtMDBPQUU4TmFZRGtoL2J6RTRkN21MR0dNV3AvV0UzS1BTdTgySEYKICAgIGtQZTZYb1NiaUxtL2t4azMyVDA9CiAgICAtLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCiAgICAKCi0gcGF0aDogJy9ldGMvc3lzdGVtZC9zeXN0ZW0vc2V0dXAuc2VydmljZScKICBwZXJtaXNzaW9uczogJzA2NDQnCiAgY29udGVudDogfC0KICAgIFtJbnN0YWxsXQogICAgV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKICAgIAogICAgW1VuaXRdCiAgICBSZXF1aXJlcz1uZXR3b3JrLW9ubGluZS50YXJnZXQKICAgIEFmdGVyPW5ldHdvcmstb25saW5lLnRhcmdldAogICAgCiAgICBbU2VydmljZV0KICAgIFR5cGU9b25lc2hvdAogICAgUmVtYWluQWZ0ZXJFeGl0PXRydWUKICAgIEVudmlyb25tZW50RmlsZT0tL2V0Yy9lbnZpcm9ubWVudAogICAgRXhlY1N0YXJ0PS9vcHQvYmluL3N1cGVydmlzZS5zaCAvb3B0L2Jpbi9zZXR1cAogICAgCgotIHBhdGg6ICcvZXRjL3Byb2ZpbGUuZC9vcHQtYmluLXBhdGguc2gnCiAgcGVybWlzc2lvbnM6ICcwNjQ0JwogIGNvbnRlbnQ6IHwtCiAgICBleHBvcnQgUEFUSD0iL29wdC9iaW46JFBBVEgiCiAgICAKCi0gcGF0aDogJy9ldGMva3ViZXJuZXRlcy9rdWJlbGV0LmNvbmYnCiAgY29udGVudDogfC0KICAgIGFwaVZlcnNpb246IGt1YmVsZXQuY29uZmlnLms4cy5pby92MWJldGExCiAgICBraW5kOiBLdWJlbGV0Q29uZmlndXJhdGlvbgogICAgYXV0aGVudGljYXRpb246CiAgICAgIGFub255bW91czoKICAgICAgICBlbmFibGVkOiBmYWxzZQogICAgICB3ZWJob29rOgogICAgICAgIGVuYWJsZWQ6IHRydWUKICAgICAgeDUwOToKICAgICAgICBjbGllbnRDQUZpbGU6IC9ldGMva3ViZXJuZXRlcy9wa2kvY2EuY3J0CiAgICBhdXRob3JpemF0aW9uOgogICAgICBtb2RlOiBXZWJob29rCiAgICBjZ3JvdXBEcml2ZXI6IHN5c3RlbWQKICAgIGNsdXN0ZXJETlM6CiAgICAtICIxMC4wLjAuMCIKICAgIGNsdXN0ZXJEb21haW46IGNsdXN0ZXIubG9jYWwKICAgIGZlYXR1cmVHYXRlczoKICAgICAgR3JhY2VmdWxOb2RlU2h1dGRvd246IHRydWUKICAgICAgSWRlbnRpZnlQb2RPUzogZmFsc2UKICAgIHByb3RlY3RLZXJuZWxEZWZhdWx0czogdHJ1ZQogICAgcmVhZE9ubHlQb3J0OiAwCiAgICByb3RhdGVDZXJ0aWZpY2F0ZXM6IHRydWUKICAgIHNlcnZlclRMU0Jvb3RzdHJhcDogdHJ1ZQogICAgc3RhdGljUG9kUGF0aDogL2V0Yy9rdWJlcm5ldGVzL21hbmlmZXN0cwogICAga3ViZVJlc2VydmVkOgogICAgICBjcHU6IDIwMG0KICAgICAgZXBoZW1lcmFsLXN0b3JhZ2U6IDFHaQogICAgICBtZW1vcnk6IDIwME1pCiAgICBzeXN0ZW1SZXNlcnZlZDoKICAgICAgY3B1OiAyMDBtCiAgICAgIGVwaGVtZXJhbC1zdG9yYWdlOiAxR2kKICAgICAgbWVtb3J5OiAyMDBNaQogICAgZXZpY3Rpb25IYXJkOgogICAgICBpbWFnZWZzLmF2YWlsYWJsZTogMTUlCiAgICAgIG1lbW9yeS5hdmFpbGFibGU6IDEwME1pCiAgICAgIG5vZGVmcy5hdmFpbGFibGU6IDEwJQogICAgICBub2RlZnMuaW5vZGVzRnJlZTogNSUKICAgIHRsc0NpcGhlclN1aXRlczoKICAgIC0gVExTX0FFU18xMjhfR0NNX1NIQTI1NgogICAgLSBUTFNfQUVTXzI1Nl9HQ01fU0hBMzg0CiAgICAtIFRMU19DSEFDSEEyMF9QT0xZMTMwNV9TSEEyNTYKICAgIC0gVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CiAgICAtIFRMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAogICAgLSBUTFNfRUNESEVfRUNEU0FfV0lUSF9DSEFDSEEyMF9QT0xZMTMwNQogICAgLSBUTFNfRUNESEVfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CiAgICAtIFRMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKICAgIC0gVExTX0VDREhFX1JTQV9XSVRIX0NIQUNIQTIwX1BPTFkxMzA1CiAgICB2b2x1bWVQbHVnaW5EaXI6IC92YXIvbGliL2t1YmVsZXQvdm9sdW1lcGx1Z2lucwogICAgCgotIHBhdGg6ICcvZXRjL3N5c3RlbWQvc3lzdGVtL2t1YmVsZXQtaGVhbHRoY2hlY2suc2VydmljZScKICBwZXJtaXNzaW9uczogJzA2NDQnCiAgY29udGVudDogfC0KICAgIFtVbml0XQogICAgUmVxdWlyZXM9a3ViZWxldC5zZXJ2aWNlCiAgICBBZnRlcj1rdWJlbGV0LnNlcnZpY2UKICAgIAogICAgW1NlcnZpY2VdCiAgICBFeGVjU3RhcnQ9L29wdC9iaW4vaGVhbHRoLW1vbml0b3Iuc2gga3ViZWxldAogICAgCiAgICBbSW5zdGFsbF0KICAgIFdhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CiAgICAKCi0gcGF0aDogJy9ldGMvY29udGFpbmVyZC9jb25maWcudG9tbCcKICBwZXJtaXNzaW9uczogJzA2NDQnCiAgY29udGVudDogfC0KICAgIHZlcnNpb24gPSAyCiAgICAKICAgIFttZXRyaWNzXQogICAgYWRkcmVzcyA9ICIxMjcuMC4wLjE6MTMzOCIKICAgIAogICAgW3BsdWdpbnNdCiAgICBbcGx1Z2lucy4iaW8uY29udGFpbmVyZC5ncnBjLnYxLmNyaSJdCiAgICBbcGx1Z2lucy4iaW8uY29udGFpbmVyZC5ncnBjLnYxLmNyaSIuY29udGFpbmVyZF0KICAgIFtwbHVnaW5zLiJpby5jb250YWluZXJkLmdycGMudjEuY3JpIi5jb250YWluZXJkLnJ1bnRpbWVzXQogICAgW3BsdWdpbnMuImlvLmNvbnRhaW5lcmQuZ3JwYy52MS5jcmkiLmNvbnRhaW5lcmQucnVudGltZXMucnVuY10KICAgIHJ1bnRpbWVfdHlwZSA9ICJpby5jb250YWluZXJkLnJ1bmMudjIiCiAgICBbcGx1Z2lucy4iaW8uY29udGFpbmVyZC5ncnBjLnYxLmNyaSIuY29udGFpbmVyZC5ydW50aW1lcy5ydW5jLm9wdGlvbnNdCiAgICBTeXN0ZW1kQ2dyb3VwID0gdHJ1ZQogICAgW3BsdWdpbnMuImlvLmNvbnRhaW5lcmQuZ3JwYy52MS5jcmkiLnJlZ2lzdHJ5XQogICAgW3BsdWdpbnMuImlvLmNvbnRhaW5lcmQuZ3JwYy52MS5jcmkiLnJlZ2lzdHJ5Lm1pcnJvcnNdCiAgICBbcGx1Z2lucy4iaW8uY29udGFpbmVyZC5ncnBjLnYxLmNyaSIucmVnaXN0cnkubWlycm9ycy4iZG9ja2VyLmlvIl0KICAgIGVuZHBvaW50ID0gWyJodHRwczovL3JlZ2lzdHJ5LTEuZG9ja2VyLmlvIl0KICAgIAoKYm9vdGNtZDoKLSBlY2hvIGhlbGxvCi0gZWNobyB3b3JsZAoKcmhfc3Vic2NyaXB0aW9uOgogICAgcGFzc3dvcmQ6IHBhc3N3b3JkCiAgICB1c2VybmFtZTogdXNlcm5hbWU= + cloud-config: I2Nsb3VkLWNvbmZpZwoKc3NoX3B3YXV0aDogbm8Kc3NoX2F1dGhvcml6ZWRfa2V5czoKLSAnc3NoLXJzYSBBQUFBQjNOemFDMXljMkVBQUFBREFRQUJBQUFDQVFEZE9JaFltekNLNURTVkx1M2MnCndyaXRlX2ZpbGVzOgotIHBhdGg6ICcvZXRjL3N5c3RlbWQvam91cm5hbGQuY29uZi5kL21heF9kaXNrX3VzZS5jb25mJwogIGNvbnRlbnQ6IHwtCiAgICBbSm91cm5hbF0KICAgIFN5c3RlbU1heFVzZT01RwogICAgCgotIHBhdGg6ICcvb3B0L2xvYWQta2VybmVsLW1vZHVsZXMuc2gnCiAgcGVybWlzc2lvbnM6ICcwNzU1JwogIGNvbnRlbnQ6IHwtCiAgICAjIS91c3IvYmluL2VudiBiYXNoCiAgICBzZXQgLWV1byBwaXBlZmFpbAogICAgCiAgICBtb2Rwcm9iZSBpcF92cwogICAgbW9kcHJvYmUgaXBfdnNfcnIKICAgIG1vZHByb2JlIGlwX3ZzX3dycgogICAgbW9kcHJvYmUgaXBfdnNfc2gKICAgIAogICAgaWYgbW9kaW5mbyBuZl9jb25udHJhY2tfaXB2NCAmPiAvZGV2L251bGw7IHRoZW4KICAgICAgbW9kcHJvYmUgbmZfY29ubnRyYWNrX2lwdjQKICAgIGVsc2UKICAgICAgbW9kcHJvYmUgbmZfY29ubnRyYWNrCiAgICBmaQogICAgCgotIHBhdGg6ICcvZXRjL3N5c2N0bC5kL2s4cy5jb25mJwogIGNvbnRlbnQ6IHwtCiAgICBuZXQuYnJpZGdlLmJyaWRnZS1uZi1jYWxsLWlwNnRhYmxlcyA9IDEKICAgIG5ldC5icmlkZ2UuYnJpZGdlLW5mLWNhbGwtaXB0YWJsZXMgPSAxCiAgICBrZXJuZWwucGFuaWNfb25fb29wcyA9IDEKICAgIGtlcm5lbC5wYW5pYyA9IDEwCiAgICBuZXQuaXB2NC5pcF9mb3J3YXJkID0gMQogICAgdm0ub3ZlcmNvbW1pdF9tZW1vcnkgPSAxCiAgICBmcy5pbm90aWZ5Lm1heF91c2VyX3dhdGNoZXMgPSAxMDQ4NTc2CiAgICAKCi0gcGF0aDogJy9ldGMvZGVmYXVsdC9ncnViLmQvNjAtc3dhcC1hY2NvdW50aW5nLmNmZycKICBjb250ZW50OiB8LQogICAgIyBBZGRlZCBieSBrdWJlcm1hdGljIG1hY2hpbmUtY29udHJvbGxlcgogICAgIyBFbmFibGUgY2dyb3VwcyBtZW1vcnkgYW5kIHN3YXAgYWNjb3VudGluZwogICAgR1JVQl9DTURMSU5FX0xJTlVYPSJjZ3JvdXBfZW5hYmxlPW1lbW9yeSBzd2FwYWNjb3VudD0xIgogICAgCgotIHBhdGg6ICcvb3B0L2Jpbi9zZXR1cCcKICBwZXJtaXNzaW9uczogJzA3NTUnCiAgY29udGVudDogfC0KICAgICMhL2Jpbi9iYXNoCiAgICBzZXQgLXhldW8gcGlwZWZhaWwKICAgIGlmIHN5c3RlbWN0bCBpcy1hY3RpdmUgdWZ3OyB0aGVuIHN5c3RlbWN0bCBzdG9wIHVmdzsgZmkKICAgIHN5c3RlbWN0bCBtYXNrIHVmdwogICAgc3lzdGVtY3RsIHJlc3RhcnQgc3lzdGVtZC1tb2R1bGVzLWxvYWQuc2VydmljZQogICAgc3lzY3RsIC0tc3lzdGVtCiAgICBzZWQgLWkub3JpZyAnLy4qc3dhcC4qL2QnIC9ldGMvZnN0YWIKICAgIHN3YXBvZmYgLWEKICAgIAogICAgYXB0LWdldCB1cGRhdGUKICAgIAogICAgREVCSUFOX0ZST05URU5EPW5vbmludGVyYWN0aXZlIGFwdC1nZXQgLW8gRHBrZzo6T3B0aW9uczo6PSItLWZvcmNlLWNvbmZkZWYiIC1vIERwa2c6Ok9wdGlvbnM6Oj0iLS1mb3JjZS1jb25mb2xkIiBpbnN0YWxsIC15IFwKICAgICAgY3VybCBcCiAgICAgIGNhLWNlcnRpZmljYXRlcyBcCiAgICAgIGNlcGgtY29tbW9uIFwKICAgICAgY2lmcy11dGlscyBcCiAgICAgIGNvbm50cmFjayBcCiAgICAgIGUyZnNwcm9ncyBcCiAgICAgIGVidGFibGVzIFwKICAgICAgZXRodG9vbCBcCiAgICAgIGdsdXN0ZXJmcy1jbGllbnQgXAogICAgICBpcHRhYmxlcyBcCiAgICAgIGpxIFwKICAgICAga21vZCBcCiAgICAgIG9wZW5zc2gtY2xpZW50IFwKICAgICAgbmZzLWNvbW1vbiBcCiAgICAgIHNvY2F0IFwKICAgICAgdXRpbC1saW51eCBcCiAgICAgIGlwdnNhZG0KICAgIGFwdC1nZXQgdXBkYXRlCiAgICBhcHQtZ2V0IGluc3RhbGwgLXkgYXB0LXRyYW5zcG9ydC1odHRwcyBjYS1jZXJ0aWZpY2F0ZXMgY3VybCBzb2Z0d2FyZS1wcm9wZXJ0aWVzLWNvbW1vbiBsc2ItcmVsZWFzZQogICAgY3VybCAtZnNTTCBodHRwczovL2Rvd25sb2FkLmRvY2tlci5jb20vbGludXgvdWJ1bnR1L2dwZyB8IGFwdC1rZXkgYWRkIC0KICAgIGFkZC1hcHQtcmVwb3NpdG9yeSAiZGViIGh0dHBzOi8vZG93bmxvYWQuZG9ja2VyLmNvbS9saW51eC91YnVudHUgJChsc2JfcmVsZWFzZSAtY3MpIHN0YWJsZSIKICAgIAogICAgY2F0IDw8RU9GIHwgdGVlIC9ldGMvY3JpY3RsLnlhbWwKICAgIHJ1bnRpbWUtZW5kcG9pbnQ6IHVuaXg6Ly8vcnVuL2NvbnRhaW5lcmQvY29udGFpbmVyZC5zb2NrCiAgICBFT0YKICAgIAogICAgbWtkaXIgLXAgL2V0Yy9zeXN0ZW1kL3N5c3RlbS9jb250YWluZXJkLnNlcnZpY2UuZAogICAgY2F0IDw8RU9GIHwgdGVlIC9ldGMvc3lzdGVtZC9zeXN0ZW0vY29udGFpbmVyZC5zZXJ2aWNlLmQvZW52aXJvbm1lbnQuY29uZgogICAgW1NlcnZpY2VdCiAgICBSZXN0YXJ0PWFsd2F5cwogICAgRW52aXJvbm1lbnRGaWxlPS0vZXRjL2Vudmlyb25tZW50CiAgICBFT0YKICAgIAogICAgYXB0LWdldCBpbnN0YWxsIC15IC0tYWxsb3ctZG93bmdyYWRlcyBjb250YWluZXJkLmlvPTEuNCoKICAgIGFwdC1tYXJrIGhvbGQgY29udGFpbmVyZC5pbwogICAgCiAgICBzeXN0ZW1jdGwgZGFlbW9uLXJlbG9hZAogICAgc3lzdGVtY3RsIGVuYWJsZSAtLW5vdyBjb250YWluZXJkCiAgICBvcHRfYmluPS9vcHQvYmluCiAgICBjbmlfYmluX2Rpcj0vb3B0L2NuaS9iaW4KICAgIG1rZGlyIC1wIC9ldGMvY25pL25ldC5kIC9ldGMva3ViZXJuZXRlcy9keW5hbWljLWNvbmZpZy1kaXIgL2V0Yy9rdWJlcm5ldGVzL21hbmlmZXN0cyAiJG9wdF9iaW4iICIkY25pX2Jpbl9kaXIiCiAgICBhcmNoPSR7SE9TVF9BUkNILX0KICAgIGlmIFsgLXogIiRhcmNoIiBdCiAgICB0aGVuCiAgICBjYXNlICQodW5hbWUgLW0pIGluCiAgICB4ODZfNjQpCiAgICAgICAgYXJjaD0iYW1kNjQiCiAgICAgICAgOzsKICAgIGFhcmNoNjQpCiAgICAgICAgYXJjaD0iYXJtNjQiCiAgICAgICAgOzsKICAgICopCiAgICAgICAgZWNobyAidW5zdXBwb3J0ZWQgQ1BVIGFyY2hpdGVjdHVyZSwgZXhpdGluZyIKICAgICAgICBleGl0IDEKICAgICAgICA7OwogICAgZXNhYwogICAgZmkKICAgIENOSV9WRVJTSU9OPSIke0NOSV9WRVJTSU9OOi12MC44Ljd9IgogICAgY25pX2Jhc2VfdXJsPSJodHRwczovL2dpdGh1Yi5jb20vY29udGFpbmVybmV0d29ya2luZy9wbHVnaW5zL3JlbGVhc2VzL2Rvd25sb2FkLyRDTklfVkVSU0lPTiIKICAgIGNuaV9maWxlbmFtZT0iY25pLXBsdWdpbnMtbGludXgtJGFyY2gtJENOSV9WRVJTSU9OLnRneiIKICAgIGN1cmwgLUxmbyAiJGNuaV9iaW5fZGlyLyRjbmlfZmlsZW5hbWUiICIkY25pX2Jhc2VfdXJsLyRjbmlfZmlsZW5hbWUiCiAgICBjbmlfc3VtPSQoY3VybCAtTGYgIiRjbmlfYmFzZV91cmwvJGNuaV9maWxlbmFtZS5zaGEyNTYiKQogICAgY2QgIiRjbmlfYmluX2RpciIKICAgIHNoYTI1NnN1bSAtYyA8PDwiJGNuaV9zdW0iCiAgICB0YXIgeHZmICIkY25pX2ZpbGVuYW1lIgogICAgcm0gLWYgIiRjbmlfZmlsZW5hbWUiCiAgICBjZCAtCiAgICBLVUJFX1ZFUlNJT049IiR7S1VCRV9WRVJTSU9OOi12MS4yMi4xfSIKICAgIGt1YmVfZGlyPSIkb3B0X2Jpbi9rdWJlcm5ldGVzLSRLVUJFX1ZFUlNJT04iCiAgICBrdWJlX2Jhc2VfdXJsPSJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20va3ViZXJuZXRlcy1yZWxlYXNlL3JlbGVhc2UvJEtVQkVfVkVSU0lPTi9iaW4vbGludXgvJGFyY2giCiAgICBrdWJlX3N1bV9maWxlPSIka3ViZV9kaXIvc2hhMjU2IgogICAgbWtkaXIgLXAgIiRrdWJlX2RpciIKICAgIDogPiIka3ViZV9zdW1fZmlsZSIKICAgIAogICAgZm9yIGJpbiBpbiBrdWJlbGV0IGt1YmVhZG0ga3ViZWN0bDsgZG8KICAgICAgICBjdXJsIC1MZm8gIiRrdWJlX2Rpci8kYmluIiAiJGt1YmVfYmFzZV91cmwvJGJpbiIKICAgICAgICBjaG1vZCAreCAiJGt1YmVfZGlyLyRiaW4iCiAgICAgICAgc3VtPSQoY3VybCAtTGYgIiRrdWJlX2Jhc2VfdXJsLyRiaW4uc2hhMjU2IikKICAgICAgICBlY2hvICIkc3VtICAka3ViZV9kaXIvJGJpbiIgPj4iJGt1YmVfc3VtX2ZpbGUiCiAgICBkb25lCiAgICBzaGEyNTZzdW0gLWMgIiRrdWJlX3N1bV9maWxlIgogICAgCiAgICBmb3IgYmluIGluIGt1YmVsZXQga3ViZWFkbSBrdWJlY3RsOyBkbwogICAgICAgIGxuIC1zZiAiJGt1YmVfZGlyLyRiaW4iICIkb3B0X2JpbiIvJGJpbgogICAgZG9uZQogICAgCiAgICBpZiBbWyAhIC14IC9vcHQvYmluL2hlYWx0aC1tb25pdG9yLnNoIF1dOyB0aGVuCiAgICAgICAgY3VybCAtTGZvIC9vcHQvYmluL2hlYWx0aC1tb25pdG9yLnNoIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9rdWJlcm1hdGljL21hY2hpbmUtY29udHJvbGxlci83OTY3YTBhZjJiNzVmMjlhZDJhYjIyN2VlYWEyNmVhN2IwZjJmYmRlL3BrZy91c2VyZGF0YS9zY3JpcHRzL2hlYWx0aC1tb25pdG9yLnNoCiAgICAgICAgY2htb2QgK3ggL29wdC9iaW4vaGVhbHRoLW1vbml0b3Iuc2gKICAgIGZpCiAgICAKICAgICMgc2V0IGt1YmVsZXQgbm9kZWlwIGVudmlyb25tZW50IHZhcmlhYmxlCiAgICAvb3B0L2Jpbi9zZXR1cF9uZXRfZW52LnNoCiAgICAKICAgIHN5c3RlbWN0bCBlbmFibGUgLS1ub3cga3ViZWxldAogICAgc3lzdGVtY3RsIGVuYWJsZSAtLW5vdyAtLW5vLWJsb2NrIGt1YmVsZXQtaGVhbHRoY2hlY2suc2VydmljZQogICAgCgotIHBhdGg6ICcvb3B0L2Jpbi9zdXBlcnZpc2Uuc2gnCiAgcGVybWlzc2lvbnM6ICcwNzU1JwogIGNvbnRlbnQ6IHwtCiAgICAjIS9iaW4vYmFzaAogICAgc2V0IC14ZXVvIHBpcGVmYWlsCiAgICB3aGlsZSAhICIkQCI7IGRvCiAgICAgIHNsZWVwIDEKICAgIGRvbmUKICAgIAoKLSBwYXRoOiAnL2V0Yy9zeXN0ZW1kL3N5c3RlbS9rdWJlbGV0LnNlcnZpY2UnCiAgY29udGVudDogfC0KICAgIFtVbml0XQogICAgQWZ0ZXI9Y29udGFpbmVyZC5zZXJ2aWNlCiAgICBSZXF1aXJlcz1jb250YWluZXJkLnNlcnZpY2UKICAgIAogICAgRGVzY3JpcHRpb249a3ViZWxldDogVGhlIEt1YmVybmV0ZXMgTm9kZSBBZ2VudAogICAgRG9jdW1lbnRhdGlvbj1odHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9ob21lLwogICAgCiAgICBbU2VydmljZV0KICAgIFJlc3RhcnQ9YWx3YXlzCiAgICBTdGFydExpbWl0SW50ZXJ2YWw9MAogICAgUmVzdGFydFNlYz0xMAogICAgQ1BVQWNjb3VudGluZz10cnVlCiAgICBNZW1vcnlBY2NvdW50aW5nPXRydWUKICAgIAogICAgRW52aXJvbm1lbnQ9IlBBVEg9L29wdC9iaW46L2JpbjovdXNyL2xvY2FsL3NiaW46L3Vzci9sb2NhbC9iaW46L3Vzci9zYmluOi91c3IvYmluOi9zYmluLyIKICAgIEVudmlyb25tZW50RmlsZT0tL2V0Yy9lbnZpcm9ubWVudAogICAgCiAgICBFeGVjU3RhcnRQcmU9L2Jpbi9iYXNoIC9vcHQvbG9hZC1rZXJuZWwtbW9kdWxlcy5zaAogICAgRXhlY1N0YXJ0UHJlPS9iaW4vYmFzaCAvb3B0L2Jpbi9zZXR1cF9uZXRfZW52LnNoCiAgICBFeGVjU3RhcnQ9L29wdC9iaW4va3ViZWxldCAkS1VCRUxFVF9FWFRSQV9BUkdTIFwKICAgICAgLS1ib290c3RyYXAta3ViZWNvbmZpZz0vZXRjL2t1YmVybmV0ZXMvYm9vdHN0cmFwLWt1YmVsZXQuY29uZiBcCiAgICAgIC0ta3ViZWNvbmZpZz0vdmFyL2xpYi9rdWJlbGV0L2t1YmVjb25maWcgXAogICAgICAtLWNvbmZpZz0vZXRjL2t1YmVybmV0ZXMva3ViZWxldC5jb25mIFwKICAgICAgLS1uZXR3b3JrLXBsdWdpbj1jbmkgXAogICAgICAtLWNlcnQtZGlyPS9ldGMva3ViZXJuZXRlcy9wa2kgXAogICAgICAtLWNsb3VkLXByb3ZpZGVyPWF3cyBcCiAgICAgIC0tY2xvdWQtY29uZmlnPS9ldGMva3ViZXJuZXRlcy9jbG91ZC1jb25maWcgXAogICAgICAtLWR5bmFtaWMtY29uZmlnLWRpcj0vZXRjL2t1YmVybmV0ZXMvZHluYW1pYy1jb25maWctZGlyIFwKICAgICAgLS1mZWF0dXJlLWdhdGVzPUR5bmFtaWNLdWJlbGV0Q29uZmlnPXRydWUgXAogICAgICAtLWV4aXQtb24tbG9jay1jb250ZW50aW9uIFwKICAgICAgLS1sb2NrLWZpbGU9L3RtcC9rdWJlbGV0LmxvY2sgXAogICAgICAtLWNvbnRhaW5lci1ydW50aW1lPXJlbW90ZSBcCiAgICAgIC0tY29udGFpbmVyLXJ1bnRpbWUtZW5kcG9pbnQ9dW5peDovLy9ydW4vY29udGFpbmVyZC9jb250YWluZXJkLnNvY2sgXAogICAgICAtLW5vZGUtaXAgJHtLVUJFTEVUX05PREVfSVB9CiAgICAKICAgIFtJbnN0YWxsXQogICAgV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKICAgIAoKLSBwYXRoOiAnL2V0Yy9zeXN0ZW1kL3N5c3RlbS9rdWJlbGV0LnNlcnZpY2UuZC9leHRyYXMuY29uZicKICBjb250ZW50OiB8LQogICAgW1NlcnZpY2VdCiAgICBFbnZpcm9ubWVudD0iS1VCRUxFVF9FWFRSQV9BUkdTPS0tcmVzb2x2LWNvbmY9L3J1bi9zeXN0ZW1kL3Jlc29sdmUvcmVzb2x2LmNvbmYiCiAgICAKCi0gcGF0aDogJy9ldGMva3ViZXJuZXRlcy9jbG91ZC1jb25maWcnCiAgcGVybWlzc2lvbnM6ICcwNjAwJwogIGNvbnRlbnQ6IHwtCiAgICBbZ2xvYmFsXQogICAgWm9uZT0iIgogICAgVlBDPSIiCiAgICBTdWJuZXRJRD0idGVzdC1zdWJuZXQiCiAgICAKICAgIAoKLSBwYXRoOiAnL29wdC9iaW4vc2V0dXBfbmV0X2Vudi5zaCcKICBwZXJtaXNzaW9uczogJzA3NTUnCiAgY29udGVudDogfC0KICAgICMhL3Vzci9iaW4vZW52IGJhc2gKICAgIGVjaG9kYXRlKCkgewogICAgICBlY2hvICJbJChkYXRlIC1JcyldIiAiJEAiCiAgICB9CiAgICAKICAgICMgZ2V0IHRoZSBkZWZhdWx0IGludGVyZmFjZSBJUCBhZGRyZXNzCiAgICBERUZBVUxUX0lGQ19JUD0kKGlwIC1vICByb3V0ZSBnZXQgMSB8IGdyZXAgLW9QICJzcmMgXEtcUysiKQogICAgCiAgICBpZiBbIC16ICIke0RFRkFVTFRfSUZDX0lQfSIgXQogICAgdGhlbgogICAgICBlY2hvZGF0ZSAiRmFpbGVkIHRvIGdldCBJUCBhZGRyZXNzIGZvciB0aGUgZGVmYXVsdCByb3V0ZSBpbnRlcmZhY2UiCiAgICAgIGV4aXQgMQogICAgZmkKICAgIAogICAgICMgZ2V0IHRoZSBmdWxsIGhvc3RuYW1lCiAgICBGVUxMX0hPU1ROQU1FPSQoaG9zdG5hbWUgLWYpCiAgICAKICAgICMgd3JpdGUgdGhlIG5vZGVpcF9lbnYgZmlsZQogICAgIyB3ZSBuZWVkIHRoZSBsaW5lIGJlbG93IGJlY2F1c2UgZmxhdGNhciBoYXMgdGhlIHNhbWUgc3RyaW5nICJjb3Jlb3MiIGluIHRoYXQgZmlsZQogICAgaWYgZ3JlcCAtcSBjb3Jlb3MgL2V0Yy9vcy1yZWxlYXNlCiAgICB0aGVuCiAgICAgIGVjaG8gIktVQkVMRVRfTk9ERV9JUD0ke0RFRkFVTFRfSUZDX0lQfVxuS1VCRUxFVF9IT1NUTkFNRT0ke0ZVTExfSE9TVE5BTUV9IiA+IC9ldGMva3ViZXJuZXRlcy9ub2RlaXAuY29uZgogICAgZWxpZiBbICEgLWQgL2V0Yy9zeXN0ZW1kL3N5c3RlbS9rdWJlbGV0LnNlcnZpY2UuZCBdCiAgICB0aGVuCiAgICAgIGVjaG9kYXRlICJDYW4ndCBmaW5kIGt1YmVsZXQgc2VydmljZSBleHRyYXMgZGlyZWN0b3J5IgogICAgICBleGl0IDEKICAgIGVsc2UKICAgICAgZWNobyAtZSAiW1NlcnZpY2VdXG5FbnZpcm9ubWVudD1cIktVQkVMRVRfTk9ERV9JUD0ke0RFRkFVTFRfSUZDX0lQfVwiXG5FbnZpcm9ubWVudD1cIktVQkVMRVRfSE9TVE5BTUU9JHtGVUxMX0hPU1ROQU1FfVwiIiA+IC9ldGMvc3lzdGVtZC9zeXN0ZW0va3ViZWxldC5zZXJ2aWNlLmQvbm9kZWlwLmNvbmYKICAgIGZpCiAgICAKCi0gcGF0aDogJy9ldGMva3ViZXJuZXRlcy9wa2kvY2EuY3J0JwogIGNvbnRlbnQ6IHwtCiAgICAtLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KICAgIE1JSUVXakNDQTBLZ0F3SUJBZ0lKQUxmUmxXc0k4WVFITUEwR0NTcUdTSWIzRFFFQkJRVUFNSHN4Q3pBSkJnTlYKICAgIEJBWVRBbFZUTVFzd0NRWURWUVFJRXdKRFFURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeVlXNWphWE5qYnpFVU1CSUcKICAgIEExVUVDaE1MUW5KaFpHWnBkSHBwYm1NeEVqQVFCZ05WQkFNVENXeHZZMkZzYUc5emRERWRNQnNHQ1NxR1NJYjMKICAgIERRRUpBUllPWW5KaFpFQmtZVzVuWVM1amIyMHdIaGNOTVRRd056RTFNakEwTmpBMVdoY05NVGN3TlRBME1qQTAKICAgIE5qQTFXakI3TVFzd0NRWURWUVFHRXdKVlV6RUxNQWtHQTFVRUNCTUNRMEV4RmpBVUJnTlZCQWNURFZOaGJpQkcKICAgIGNtRnVZMmx6WTI4eEZEQVNCZ05WQkFvVEMwSnlZV1JtYVhSNmFXNWpNUkl3RUFZRFZRUURFd2xzYjJOaGJHaHYKICAgIGMzUXhIVEFiQmdrcWhraUc5dzBCQ1FFV0RtSnlZV1JBWkdGdVoyRXVZMjl0TUlJQklqQU5CZ2txaGtpRzl3MEIKICAgIEFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXQ1ZkFqcDRmVGNla1dVVGZ6c3Awa3lpaDFPWWJzR0wwS1gxZVJiU1MKICAgIFI4T2QwKzlRNjJIeW55K0dGd01UYjRBL0tVOG1zc29IdmNjZVNBQWJ3ZmJ4RksvK3M1MVRvYnFVbk9SWnJPb1QKICAgIFpqa1V5Z2J5WERTSzk5WUJiY1IxUGlwOHZ3TVRtNFhLdUx0Q2lnZUJCZGpqQVFkZ1VPMjhMRU5HbHNNbm1lWWsKICAgIEpmT0RWR25WbXI1THRiOUFOQThJS3lUZnNuSEo0aU9DUy9QbFBiVWoycTdZbm9WTHBvc1VCTWxnVWIvQ3lrWDMKICAgIG1Pb0xiNHlKSlF5QS9pU1Q2WnhpSUVqMzZENHlXWjVsZzdZSmwrVWlpQlFIR0NuUGRHeWlwcVYwNmV4MGhlWVcKICAgIGNhaVc4TFdaU1VROTNqUStXVkNIOGhUN0RRTzFkbXN2VW1YbHEvSmVBbHdRL1FJREFRQUJvNEhnTUlIZE1CMEcKICAgIEExVWREZ1FXQkJSY0FST3RoUzRQNFU3dlRmakJ5QzU2OVI3RTZEQ0JyUVlEVlIwakJJR2xNSUdpZ0JSY0FST3QKICAgIGhTNFA0VTd2VGZqQnlDNTY5UjdFNktGL3BIMHdlekVMTUFrR0ExVUVCaE1DVlZNeEN6QUpCZ05WQkFnVEFrTkIKICAgIE1SWXdGQVlEVlFRSEV3MVRZVzRnUm5KaGJtTnBjMk52TVJRd0VnWURWUVFLRXd0Q2NtRmtabWwwZW1sdVl6RVMKICAgIE1CQUdBMVVFQXhNSmJHOWpZV3hvYjNOME1SMHdHd1lKS29aSWh2Y05BUWtCRmc1aWNtRmtRR1JoYm1kaExtTnYKICAgIGJZSUpBTGZSbFdzSThZUUhNQXdHQTFVZEV3UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUZCUUFEZ2dFQkFHNmgKICAgIFU5ZjlzTkgwLzZvQmJHR3kyRVZVMFVnSVRVUUlyRldvOXJGa3JXNWsvWGtEalFtKzNsempUMGlHUjRJeEUvQW8KICAgIGVVNnNRaHVhN3dyV2VGRW40N0dMOThsbkNzSmREN29aTmhGbVE5NVRiL0xuRFVqczVZajliclAwTld6WGZZVTQKICAgIFVLMlpuSU5KUmNKcEI4aVJDYUN4RThEZGNVRjBYcUlFcTZwQTI3MnNub0xtaVhMTXZObDNrWUVkbStqZTZ2b0QKICAgIDU4U05WRVVzenR6UXlYbUpFaENwd1ZJMEE2UUNqelhqK3F2cG13M1paSGk4SndYZWk4WlpCTFRTRkJraThaN24KICAgIHNIOUJCSDM4L1N6VW1BTjRRSFNQeTFnanFtMDBPQUU4TmFZRGtoL2J6RTRkN21MR0dNV3AvV0UzS1BTdTgySEYKICAgIGtQZTZYb1NiaUxtL2t4azMyVDA9CiAgICAtLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCiAgICAKCi0gcGF0aDogJy9ldGMvc3lzdGVtZC9zeXN0ZW0vc2V0dXAuc2VydmljZScKICBwZXJtaXNzaW9uczogJzA2NDQnCiAgY29udGVudDogfC0KICAgIFtJbnN0YWxsXQogICAgV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKICAgIAogICAgW1VuaXRdCiAgICBSZXF1aXJlcz1uZXR3b3JrLW9ubGluZS50YXJnZXQKICAgIEFmdGVyPW5ldHdvcmstb25saW5lLnRhcmdldAogICAgCiAgICBbU2VydmljZV0KICAgIFR5cGU9b25lc2hvdAogICAgUmVtYWluQWZ0ZXJFeGl0PXRydWUKICAgIEVudmlyb25tZW50RmlsZT0tL2V0Yy9lbnZpcm9ubWVudAogICAgRXhlY1N0YXJ0PS9vcHQvYmluL3N1cGVydmlzZS5zaCAvb3B0L2Jpbi9zZXR1cAogICAgCgotIHBhdGg6ICcvZXRjL3Byb2ZpbGUuZC9vcHQtYmluLXBhdGguc2gnCiAgcGVybWlzc2lvbnM6ICcwNjQ0JwogIGNvbnRlbnQ6IHwtCiAgICBleHBvcnQgUEFUSD0iL29wdC9iaW46JFBBVEgiCiAgICAKCi0gcGF0aDogJy9ldGMva3ViZXJuZXRlcy9rdWJlbGV0LmNvbmYnCiAgY29udGVudDogfC0KICAgIGFwaVZlcnNpb246IGt1YmVsZXQuY29uZmlnLms4cy5pby92MWJldGExCiAgICBraW5kOiBLdWJlbGV0Q29uZmlndXJhdGlvbgogICAgYXV0aGVudGljYXRpb246CiAgICAgIGFub255bW91czoKICAgICAgICBlbmFibGVkOiBmYWxzZQogICAgICB3ZWJob29rOgogICAgICAgIGVuYWJsZWQ6IHRydWUKICAgICAgeDUwOToKICAgICAgICBjbGllbnRDQUZpbGU6IC9ldGMva3ViZXJuZXRlcy9wa2kvY2EuY3J0CiAgICBhdXRob3JpemF0aW9uOgogICAgICBtb2RlOiBXZWJob29rCiAgICBjZ3JvdXBEcml2ZXI6IHN5c3RlbWQKICAgIGNsdXN0ZXJETlM6CiAgICAtICIxMC4wLjAuMCIKICAgIGNsdXN0ZXJEb21haW46IGNsdXN0ZXIubG9jYWwKICAgIGNvbnRhaW5lckxvZ01heFNpemU6IDEwME1pCiAgICBjb250YWluZXJMb2dNYXhGaWxlczogNQogICAgZmVhdHVyZUdhdGVzOgogICAgICBHcmFjZWZ1bE5vZGVTaHV0ZG93bjogdHJ1ZQogICAgICBJZGVudGlmeVBvZE9TOiBmYWxzZQogICAgcHJvdGVjdEtlcm5lbERlZmF1bHRzOiB0cnVlCiAgICByZWFkT25seVBvcnQ6IDAKICAgIHJvdGF0ZUNlcnRpZmljYXRlczogdHJ1ZQogICAgc2VydmVyVExTQm9vdHN0cmFwOiB0cnVlCiAgICBzdGF0aWNQb2RQYXRoOiAvZXRjL2t1YmVybmV0ZXMvbWFuaWZlc3RzCiAgICBrdWJlUmVzZXJ2ZWQ6CiAgICAgIGNwdTogMjAwbQogICAgICBlcGhlbWVyYWwtc3RvcmFnZTogMUdpCiAgICAgIG1lbW9yeTogMjAwTWkKICAgIHN5c3RlbVJlc2VydmVkOgogICAgICBjcHU6IDIwMG0KICAgICAgZXBoZW1lcmFsLXN0b3JhZ2U6IDFHaQogICAgICBtZW1vcnk6IDIwME1pCiAgICBldmljdGlvbkhhcmQ6CiAgICAgIGltYWdlZnMuYXZhaWxhYmxlOiAxNSUKICAgICAgbWVtb3J5LmF2YWlsYWJsZTogMTAwTWkKICAgICAgbm9kZWZzLmF2YWlsYWJsZTogMTAlCiAgICAgIG5vZGVmcy5pbm9kZXNGcmVlOiA1JQogICAgdGxzQ2lwaGVyU3VpdGVzOgogICAgLSBUTFNfQUVTXzEyOF9HQ01fU0hBMjU2CiAgICAtIFRMU19BRVNfMjU2X0dDTV9TSEEzODQKICAgIC0gVExTX0NIQUNIQTIwX1BPTFkxMzA1X1NIQTI1NgogICAgLSBUTFNfRUNESEVfRUNEU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYKICAgIC0gVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzI1Nl9HQ01fU0hBMzg0CiAgICAtIFRMU19FQ0RIRV9FQ0RTQV9XSVRIX0NIQUNIQTIwX1BPTFkxMzA1CiAgICAtIFRMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMTI4X0dDTV9TSEEyNTYKICAgIC0gVExTX0VDREhFX1JTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAogICAgLSBUTFNfRUNESEVfUlNBX1dJVEhfQ0hBQ0hBMjBfUE9MWTEzMDUKICAgIHZvbHVtZVBsdWdpbkRpcjogL3Zhci9saWIva3ViZWxldC92b2x1bWVwbHVnaW5zCiAgICAKCi0gcGF0aDogJy9ldGMvc3lzdGVtZC9zeXN0ZW0va3ViZWxldC1oZWFsdGhjaGVjay5zZXJ2aWNlJwogIHBlcm1pc3Npb25zOiAnMDY0NCcKICBjb250ZW50OiB8LQogICAgW1VuaXRdCiAgICBSZXF1aXJlcz1rdWJlbGV0LnNlcnZpY2UKICAgIEFmdGVyPWt1YmVsZXQuc2VydmljZQogICAgCiAgICBbU2VydmljZV0KICAgIEV4ZWNTdGFydD0vb3B0L2Jpbi9oZWFsdGgtbW9uaXRvci5zaCBrdWJlbGV0CiAgICAKICAgIFtJbnN0YWxsXQogICAgV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKICAgIAoKLSBwYXRoOiAnL2V0Yy9jb250YWluZXJkL2NvbmZpZy50b21sJwogIHBlcm1pc3Npb25zOiAnMDY0NCcKICBjb250ZW50OiB8LQogICAgdmVyc2lvbiA9IDIKICAgIAogICAgW21ldHJpY3NdCiAgICBhZGRyZXNzID0gIjEyNy4wLjAuMToxMzM4IgogICAgCiAgICBbcGx1Z2luc10KICAgIFtwbHVnaW5zLiJpby5jb250YWluZXJkLmdycGMudjEuY3JpIl0KICAgIHNhbmRib3hfaW1hZ2UgPSAiMTkyLjE2OC4xMDAuMTAwOjUwMDAva3ViZXJuZXRlcy9wYXVzZTp2My4xIgogICAgW3BsdWdpbnMuImlvLmNvbnRhaW5lcmQuZ3JwYy52MS5jcmkiLmNvbnRhaW5lcmRdCiAgICBbcGx1Z2lucy4iaW8uY29udGFpbmVyZC5ncnBjLnYxLmNyaSIuY29udGFpbmVyZC5ydW50aW1lc10KICAgIFtwbHVnaW5zLiJpby5jb250YWluZXJkLmdycGMudjEuY3JpIi5jb250YWluZXJkLnJ1bnRpbWVzLnJ1bmNdCiAgICBydW50aW1lX3R5cGUgPSAiaW8uY29udGFpbmVyZC5ydW5jLnYyIgogICAgW3BsdWdpbnMuImlvLmNvbnRhaW5lcmQuZ3JwYy52MS5jcmkiLmNvbnRhaW5lcmQucnVudGltZXMucnVuYy5vcHRpb25zXQogICAgU3lzdGVtZENncm91cCA9IHRydWUKICAgIFtwbHVnaW5zLiJpby5jb250YWluZXJkLmdycGMudjEuY3JpIi5yZWdpc3RyeV0KICAgIFtwbHVnaW5zLiJpby5jb250YWluZXJkLmdycGMudjEuY3JpIi5yZWdpc3RyeS5taXJyb3JzXQogICAgW3BsdWdpbnMuImlvLmNvbnRhaW5lcmQuZ3JwYy52MS5jcmkiLnJlZ2lzdHJ5Lm1pcnJvcnMuImRvY2tlci5pbyJdCiAgICBlbmRwb2ludCA9IFsiaHR0cHM6Ly9yZWdpc3RyeS5kb2NrZXItY24uY29tIl0KICAgIFtwbHVnaW5zLiJpby5jb250YWluZXJkLmdycGMudjEuY3JpIi5yZWdpc3RyeS5jb25maWdzXQogICAgW3BsdWdpbnMuImlvLmNvbnRhaW5lcmQuZ3JwYy52MS5jcmkiLnJlZ2lzdHJ5LmNvbmZpZ3MuIjEwLjAuMC4xOjUwMDAiXQogICAgW3BsdWdpbnMuImlvLmNvbnRhaW5lcmQuZ3JwYy52MS5jcmkiLnJlZ2lzdHJ5LmNvbmZpZ3MuIjEwLjAuMC4xOjUwMDAiLnRsc10KICAgIGluc2VjdXJlX3NraXBfdmVyaWZ5ID0gdHJ1ZQogICAgW3BsdWdpbnMuImlvLmNvbnRhaW5lcmQuZ3JwYy52MS5jcmkiLnJlZ2lzdHJ5LmNvbmZpZ3MuIjE5Mi4xNjguMTAwLjEwMDo1MDAwIl0KICAgIFtwbHVnaW5zLiJpby5jb250YWluZXJkLmdycGMudjEuY3JpIi5yZWdpc3RyeS5jb25maWdzLiIxOTIuMTY4LjEwMC4xMDA6NTAwMCIudGxzXQogICAgaW5zZWN1cmVfc2tpcF92ZXJpZnkgPSB0cnVlCiAgICAKICAgIAoKYm9vdGNtZDoKLSBlY2hvIGhlbGxvCi0gZWNobyB3b3JsZAoKcmhfc3Vic2NyaXB0aW9uOgogICAgcGFzc3dvcmQ6IHBhc3N3b3JkCiAgICB1c2VybmFtZTogdXNlcm5hbWU= immutable: true kind: Secret metadata: creationTimestamp: null - name: ubuntu-20.04-aws-osc-provisioning + name: ubuntu-aws-kube-system-osc-provisioning namespace: cloud-init-settings resourceVersion: "1" +type: Opaque diff --git a/pkg/controllers/osc/testdata/secret-ubuntu-20.04-aws-docker.yaml b/pkg/controllers/osc/testdata/secret-ubuntu-aws-docker.yaml similarity index 97% rename from pkg/controllers/osc/testdata/secret-ubuntu-20.04-aws-docker.yaml rename to pkg/controllers/osc/testdata/secret-ubuntu-aws-docker.yaml index d516d11c..35c81e6a 100644 --- a/pkg/controllers/osc/testdata/secret-ubuntu-20.04-aws-docker.yaml +++ b/pkg/controllers/osc/testdata/secret-ubuntu-aws-docker.yaml @@ -1,10 +1,11 @@ apiVersion: v1 data: - cloud-config: I2Nsb3VkLWNvbmZpZwoKc3NoX3B3YXV0aDogbm8Kc3NoX2F1dGhvcml6ZWRfa2V5czoKLSAnc3NoLXJzYSBBQUFBQjNOemFDMXljMkVBQUFBREFRQUJBQUFDQVFEZE9JaFltekNLNURTVkx1M2MnCndyaXRlX2ZpbGVzOgotIHBhdGg6ICcvZXRjL3N5c3RlbWQvam91cm5hbGQuY29uZi5kL21heF9kaXNrX3VzZS5jb25mJwogIGNvbnRlbnQ6IHwtCiAgICBbSm91cm5hbF0KICAgIFN5c3RlbU1heFVzZT01RwogICAgCgotIHBhdGg6ICcvb3B0L2xvYWQta2VybmVsLW1vZHVsZXMuc2gnCiAgcGVybWlzc2lvbnM6ICcwNzU1JwogIGNvbnRlbnQ6IHwtCiAgICAjIS91c3IvYmluL2VudiBiYXNoCiAgICBzZXQgLWV1byBwaXBlZmFpbAogICAgCiAgICBtb2Rwcm9iZSBpcF92cwogICAgbW9kcHJvYmUgaXBfdnNfcnIKICAgIG1vZHByb2JlIGlwX3ZzX3dycgogICAgbW9kcHJvYmUgaXBfdnNfc2gKICAgIAogICAgaWYgbW9kaW5mbyBuZl9jb25udHJhY2tfaXB2NCAmPiAvZGV2L251bGw7IHRoZW4KICAgICAgbW9kcHJvYmUgbmZfY29ubnRyYWNrX2lwdjQKICAgIGVsc2UKICAgICAgbW9kcHJvYmUgbmZfY29ubnRyYWNrCiAgICBmaQogICAgCgotIHBhdGg6ICcvZXRjL3N5c2N0bC5kL2s4cy5jb25mJwogIGNvbnRlbnQ6IHwtCiAgICBuZXQuYnJpZGdlLmJyaWRnZS1uZi1jYWxsLWlwNnRhYmxlcyA9IDEKICAgIG5ldC5icmlkZ2UuYnJpZGdlLW5mLWNhbGwtaXB0YWJsZXMgPSAxCiAgICBrZXJuZWwucGFuaWNfb25fb29wcyA9IDEKICAgIGtlcm5lbC5wYW5pYyA9IDEwCiAgICBuZXQuaXB2NC5pcF9mb3J3YXJkID0gMQogICAgdm0ub3ZlcmNvbW1pdF9tZW1vcnkgPSAxCiAgICBmcy5pbm90aWZ5Lm1heF91c2VyX3dhdGNoZXMgPSAxMDQ4NTc2CiAgICAKCi0gcGF0aDogJy9ldGMvZGVmYXVsdC9ncnViLmQvNjAtc3dhcC1hY2NvdW50aW5nLmNmZycKICBjb250ZW50OiB8LQogICAgIyBBZGRlZCBieSBrdWJlcm1hdGljIG1hY2hpbmUtY29udHJvbGxlcgogICAgIyBFbmFibGUgY2dyb3VwcyBtZW1vcnkgYW5kIHN3YXAgYWNjb3VudGluZwogICAgR1JVQl9DTURMSU5FX0xJTlVYPSJjZ3JvdXBfZW5hYmxlPW1lbW9yeSBzd2FwYWNjb3VudD0xIgogICAgCgotIHBhdGg6ICcvb3B0L2Jpbi9zZXR1cCcKICBwZXJtaXNzaW9uczogJzA3NTUnCiAgY29udGVudDogfC0KICAgICMhL2Jpbi9iYXNoCiAgICBzZXQgLXhldW8gcGlwZWZhaWwKICAgIGlmIHN5c3RlbWN0bCBpcy1hY3RpdmUgdWZ3OyB0aGVuIHN5c3RlbWN0bCBzdG9wIHVmdzsgZmkKICAgIHN5c3RlbWN0bCBtYXNrIHVmdwogICAgc3lzdGVtY3RsIHJlc3RhcnQgc3lzdGVtZC1tb2R1bGVzLWxvYWQuc2VydmljZQogICAgc3lzY3RsIC0tc3lzdGVtCiAgICBzZWQgLWkub3JpZyAnLy4qc3dhcC4qL2QnIC9ldGMvZnN0YWIKICAgIHN3YXBvZmYgLWEKICAgIAogICAgYXB0LWdldCB1cGRhdGUKICAgIAogICAgREVCSUFOX0ZST05URU5EPW5vbmludGVyYWN0aXZlIGFwdC1nZXQgLW8gRHBrZzo6T3B0aW9uczo6PSItLWZvcmNlLWNvbmZkZWYiIC1vIERwa2c6Ok9wdGlvbnM6Oj0iLS1mb3JjZS1jb25mb2xkIiBpbnN0YWxsIC15IFwKICAgICAgY3VybCBcCiAgICAgIGNhLWNlcnRpZmljYXRlcyBcCiAgICAgIGNlcGgtY29tbW9uIFwKICAgICAgY2lmcy11dGlscyBcCiAgICAgIGNvbm50cmFjayBcCiAgICAgIGUyZnNwcm9ncyBcCiAgICAgIGVidGFibGVzIFwKICAgICAgZXRodG9vbCBcCiAgICAgIGdsdXN0ZXJmcy1jbGllbnQgXAogICAgICBpcHRhYmxlcyBcCiAgICAgIGpxIFwKICAgICAga21vZCBcCiAgICAgIG9wZW5zc2gtY2xpZW50IFwKICAgICAgbmZzLWNvbW1vbiBcCiAgICAgIHNvY2F0IFwKICAgICAgdXRpbC1saW51eCBcCiAgICAgIGlwdnNhZG0KICAgIGFwdC1nZXQgdXBkYXRlCiAgICBhcHQtZ2V0IGluc3RhbGwgLXkgYXB0LXRyYW5zcG9ydC1odHRwcyBjYS1jZXJ0aWZpY2F0ZXMgY3VybCBzb2Z0d2FyZS1wcm9wZXJ0aWVzLWNvbW1vbiBsc2ItcmVsZWFzZQogICAgY3VybCAtZnNTTCBodHRwczovL2Rvd25sb2FkLmRvY2tlci5jb20vbGludXgvdWJ1bnR1L2dwZyB8IGFwdC1rZXkgYWRkIC0KICAgIGFkZC1hcHQtcmVwb3NpdG9yeSAiZGViIGh0dHBzOi8vZG93bmxvYWQuZG9ja2VyLmNvbS9saW51eC91YnVudHUgJChsc2JfcmVsZWFzZSAtY3MpIHN0YWJsZSIKICAgIAogICAgbWtkaXIgLXAgL2V0Yy9zeXN0ZW1kL3N5c3RlbS9jb250YWluZXJkLnNlcnZpY2UuZCAvZXRjL3N5c3RlbWQvc3lzdGVtL2RvY2tlci5zZXJ2aWNlLmQKICAgIAogICAgY2F0IDw8RU9GIHwgdGVlIC9ldGMvc3lzdGVtZC9zeXN0ZW0vY29udGFpbmVyZC5zZXJ2aWNlLmQvZW52aXJvbm1lbnQuY29uZiAvZXRjL3N5c3RlbWQvc3lzdGVtL2RvY2tlci5zZXJ2aWNlLmQvZW52aXJvbm1lbnQuY29uZgogICAgW1NlcnZpY2VdCiAgICBSZXN0YXJ0PWFsd2F5cwogICAgRW52aXJvbm1lbnRGaWxlPS0vZXRjL2Vudmlyb25tZW50CiAgICBFT0YKICAgIAogICAgYXB0LWdldCBpbnN0YWxsIC15IFwKICAgICAgICBjb250YWluZXJkLmlvPTEuNC4zKiBcCiAgICAgICAgZG9ja2VyLWNlPTU6MTkuMDMuMTMqIFwKICAgICAgICBkb2NrZXItY2UtY2xpPTU6MTkuMDMuMTMqCiAgICBhcHQtbWFyayBob2xkIGRvY2tlci1jZSBkb2NrZXItY2UtY2xpIGNvbnRhaW5lcmQuaW8KICAgIAogICAgc3lzdGVtY3RsIGRhZW1vbi1yZWxvYWQKICAgIHN5c3RlbWN0bCBlbmFibGUgLS1ub3cgZG9ja2VyCiAgICBvcHRfYmluPS9vcHQvYmluCiAgICBjbmlfYmluX2Rpcj0vb3B0L2NuaS9iaW4KICAgIG1rZGlyIC1wIC9ldGMvY25pL25ldC5kIC9ldGMva3ViZXJuZXRlcy9keW5hbWljLWNvbmZpZy1kaXIgL2V0Yy9rdWJlcm5ldGVzL21hbmlmZXN0cyAiJG9wdF9iaW4iICIkY25pX2Jpbl9kaXIiCiAgICBhcmNoPSR7SE9TVF9BUkNILX0KICAgIGlmIFsgLXogIiRhcmNoIiBdCiAgICB0aGVuCiAgICBjYXNlICQodW5hbWUgLW0pIGluCiAgICB4ODZfNjQpCiAgICAgICAgYXJjaD0iYW1kNjQiCiAgICAgICAgOzsKICAgIGFhcmNoNjQpCiAgICAgICAgYXJjaD0iYXJtNjQiCiAgICAgICAgOzsKICAgICopCiAgICAgICAgZWNobyAidW5zdXBwb3J0ZWQgQ1BVIGFyY2hpdGVjdHVyZSwgZXhpdGluZyIKICAgICAgICBleGl0IDEKICAgICAgICA7OwogICAgZXNhYwogICAgZmkKICAgIENOSV9WRVJTSU9OPSIke0NOSV9WRVJTSU9OOi12MC44Ljd9IgogICAgY25pX2Jhc2VfdXJsPSJodHRwczovL2dpdGh1Yi5jb20vY29udGFpbmVybmV0d29ya2luZy9wbHVnaW5zL3JlbGVhc2VzL2Rvd25sb2FkLyRDTklfVkVSU0lPTiIKICAgIGNuaV9maWxlbmFtZT0iY25pLXBsdWdpbnMtbGludXgtJGFyY2gtJENOSV9WRVJTSU9OLnRneiIKICAgIGN1cmwgLUxmbyAiJGNuaV9iaW5fZGlyLyRjbmlfZmlsZW5hbWUiICIkY25pX2Jhc2VfdXJsLyRjbmlfZmlsZW5hbWUiCiAgICBjbmlfc3VtPSQoY3VybCAtTGYgIiRjbmlfYmFzZV91cmwvJGNuaV9maWxlbmFtZS5zaGEyNTYiKQogICAgY2QgIiRjbmlfYmluX2RpciIKICAgIHNoYTI1NnN1bSAtYyA8PDwiJGNuaV9zdW0iCiAgICB0YXIgeHZmICIkY25pX2ZpbGVuYW1lIgogICAgcm0gLWYgIiRjbmlfZmlsZW5hbWUiCiAgICBjZCAtCiAgICBLVUJFX1ZFUlNJT049IiR7S1VCRV9WRVJTSU9OOi12MS4yMi4xfSIKICAgIGt1YmVfZGlyPSIkb3B0X2Jpbi9rdWJlcm5ldGVzLSRLVUJFX1ZFUlNJT04iCiAgICBrdWJlX2Jhc2VfdXJsPSJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20va3ViZXJuZXRlcy1yZWxlYXNlL3JlbGVhc2UvJEtVQkVfVkVSU0lPTi9iaW4vbGludXgvJGFyY2giCiAgICBrdWJlX3N1bV9maWxlPSIka3ViZV9kaXIvc2hhMjU2IgogICAgbWtkaXIgLXAgIiRrdWJlX2RpciIKICAgIDogPiIka3ViZV9zdW1fZmlsZSIKICAgIAogICAgZm9yIGJpbiBpbiBrdWJlbGV0IGt1YmVhZG0ga3ViZWN0bDsgZG8KICAgICAgICBjdXJsIC1MZm8gIiRrdWJlX2Rpci8kYmluIiAiJGt1YmVfYmFzZV91cmwvJGJpbiIKICAgICAgICBjaG1vZCAreCAiJGt1YmVfZGlyLyRiaW4iCiAgICAgICAgc3VtPSQoY3VybCAtTGYgIiRrdWJlX2Jhc2VfdXJsLyRiaW4uc2hhMjU2IikKICAgICAgICBlY2hvICIkc3VtICAka3ViZV9kaXIvJGJpbiIgPj4iJGt1YmVfc3VtX2ZpbGUiCiAgICBkb25lCiAgICBzaGEyNTZzdW0gLWMgIiRrdWJlX3N1bV9maWxlIgogICAgCiAgICBmb3IgYmluIGluIGt1YmVsZXQga3ViZWFkbSBrdWJlY3RsOyBkbwogICAgICAgIGxuIC1zZiAiJGt1YmVfZGlyLyRiaW4iICIkb3B0X2JpbiIvJGJpbgogICAgZG9uZQogICAgCiAgICBpZiBbWyAhIC14IC9vcHQvYmluL2hlYWx0aC1tb25pdG9yLnNoIF1dOyB0aGVuCiAgICAgICAgY3VybCAtTGZvIC9vcHQvYmluL2hlYWx0aC1tb25pdG9yLnNoIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9rdWJlcm1hdGljL21hY2hpbmUtY29udHJvbGxlci83OTY3YTBhZjJiNzVmMjlhZDJhYjIyN2VlYWEyNmVhN2IwZjJmYmRlL3BrZy91c2VyZGF0YS9zY3JpcHRzL2hlYWx0aC1tb25pdG9yLnNoCiAgICAgICAgY2htb2QgK3ggL29wdC9iaW4vaGVhbHRoLW1vbml0b3Iuc2gKICAgIGZpCiAgICAKICAgICMgc2V0IGt1YmVsZXQgbm9kZWlwIGVudmlyb25tZW50IHZhcmlhYmxlCiAgICAvb3B0L2Jpbi9zZXR1cF9uZXRfZW52LnNoCiAgICAKICAgIHN5c3RlbWN0bCBlbmFibGUgLS1ub3cga3ViZWxldAogICAgc3lzdGVtY3RsIGVuYWJsZSAtLW5vdyAtLW5vLWJsb2NrIGt1YmVsZXQtaGVhbHRoY2hlY2suc2VydmljZQogICAgCgotIHBhdGg6ICcvb3B0L2Jpbi9zdXBlcnZpc2Uuc2gnCiAgcGVybWlzc2lvbnM6ICcwNzU1JwogIGNvbnRlbnQ6IHwtCiAgICAjIS9iaW4vYmFzaAogICAgc2V0IC14ZXVvIHBpcGVmYWlsCiAgICB3aGlsZSAhICIkQCI7IGRvCiAgICAgIHNsZWVwIDEKICAgIGRvbmUKICAgIAoKLSBwYXRoOiAnL2V0Yy9zeXN0ZW1kL3N5c3RlbS9rdWJlbGV0LnNlcnZpY2UnCiAgY29udGVudDogfC0KICAgIFtVbml0XQogICAgQWZ0ZXI9ZG9ja2VyLnNlcnZpY2UKICAgIFJlcXVpcmVzPWRvY2tlci5zZXJ2aWNlCiAgICAKICAgIERlc2NyaXB0aW9uPWt1YmVsZXQ6IFRoZSBLdWJlcm5ldGVzIE5vZGUgQWdlbnQKICAgIERvY3VtZW50YXRpb249aHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvaG9tZS8KICAgIAogICAgW1NlcnZpY2VdCiAgICBSZXN0YXJ0PWFsd2F5cwogICAgU3RhcnRMaW1pdEludGVydmFsPTAKICAgIFJlc3RhcnRTZWM9MTAKICAgIENQVUFjY291bnRpbmc9dHJ1ZQogICAgTWVtb3J5QWNjb3VudGluZz10cnVlCiAgICAKICAgIEVudmlyb25tZW50PSJQQVRIPS9vcHQvYmluOi9iaW46L3Vzci9sb2NhbC9zYmluOi91c3IvbG9jYWwvYmluOi91c3Ivc2JpbjovdXNyL2Jpbjovc2Jpbi8iCiAgICBFbnZpcm9ubWVudEZpbGU9LS9ldGMvZW52aXJvbm1lbnQKICAgIAogICAgRXhlY1N0YXJ0UHJlPS9iaW4vYmFzaCAvb3B0L2xvYWQta2VybmVsLW1vZHVsZXMuc2gKICAgIEV4ZWNTdGFydFByZT0vYmluL2Jhc2ggL29wdC9iaW4vc2V0dXBfbmV0X2Vudi5zaAogICAgRXhlY1N0YXJ0PS9vcHQvYmluL2t1YmVsZXQgJEtVQkVMRVRfRVhUUkFfQVJHUyBcCiAgICAgIC0tYm9vdHN0cmFwLWt1YmVjb25maWc9L2V0Yy9rdWJlcm5ldGVzL2Jvb3RzdHJhcC1rdWJlbGV0LmNvbmYgXAogICAgICAtLWt1YmVjb25maWc9L3Zhci9saWIva3ViZWxldC9rdWJlY29uZmlnIFwKICAgICAgLS1jb25maWc9L2V0Yy9rdWJlcm5ldGVzL2t1YmVsZXQuY29uZiBcCiAgICAgIC0tbmV0d29yay1wbHVnaW49Y25pIFwKICAgICAgLS1jZXJ0LWRpcj0vZXRjL2t1YmVybmV0ZXMvcGtpIFwKICAgICAgLS1jbG91ZC1wcm92aWRlcj1hd3MgXAogICAgICAtLWNsb3VkLWNvbmZpZz0vZXRjL2t1YmVybmV0ZXMvY2xvdWQtY29uZmlnIFwKICAgICAgLS1keW5hbWljLWNvbmZpZy1kaXI9L2V0Yy9rdWJlcm5ldGVzL2R5bmFtaWMtY29uZmlnLWRpciBcCiAgICAgIC0tZmVhdHVyZS1nYXRlcz1EeW5hbWljS3ViZWxldENvbmZpZz10cnVlIFwKICAgICAgLS1leGl0LW9uLWxvY2stY29udGVudGlvbiBcCiAgICAgIC0tbG9jay1maWxlPS90bXAva3ViZWxldC5sb2NrIFwKICAgICAgLS1jb250YWluZXItcnVudGltZT1kb2NrZXIgXAogICAgICAtLWNvbnRhaW5lci1ydW50aW1lLWVuZHBvaW50PXVuaXg6Ly8vdmFyL3J1bi9kb2NrZXJzaGltLnNvY2sgXAogICAgICAtLW5vZGUtaXAgJHtLVUJFTEVUX05PREVfSVB9CiAgICAKICAgIFtJbnN0YWxsXQogICAgV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKICAgIAoKLSBwYXRoOiAnL2V0Yy9zeXN0ZW1kL3N5c3RlbS9rdWJlbGV0LnNlcnZpY2UuZC9leHRyYXMuY29uZicKICBjb250ZW50OiB8LQogICAgW1NlcnZpY2VdCiAgICBFbnZpcm9ubWVudD0iS1VCRUxFVF9FWFRSQV9BUkdTPS0tcmVzb2x2LWNvbmY9L3J1bi9zeXN0ZW1kL3Jlc29sdmUvcmVzb2x2LmNvbmYiCiAgICAKCi0gcGF0aDogJy9ldGMva3ViZXJuZXRlcy9jbG91ZC1jb25maWcnCiAgcGVybWlzc2lvbnM6ICcwNjAwJwogIGNvbnRlbnQ6IHwtCiAgICBbZ2xvYmFsXQogICAgWm9uZT0iIgogICAgVlBDPSIiCiAgICBTdWJuZXRJRD0idGVzdC1zdWJuZXQiCiAgICAKICAgIAoKLSBwYXRoOiAnL29wdC9iaW4vc2V0dXBfbmV0X2Vudi5zaCcKICBwZXJtaXNzaW9uczogJzA3NTUnCiAgY29udGVudDogfC0KICAgICMhL3Vzci9iaW4vZW52IGJhc2gKICAgIGVjaG9kYXRlKCkgewogICAgICBlY2hvICJbJChkYXRlIC1JcyldIiAiJEAiCiAgICB9CiAgICAKICAgICMgZ2V0IHRoZSBkZWZhdWx0IGludGVyZmFjZSBJUCBhZGRyZXNzCiAgICBERUZBVUxUX0lGQ19JUD0kKGlwIC1vICByb3V0ZSBnZXQgMSB8IGdyZXAgLW9QICJzcmMgXEtcUysiKQogICAgCiAgICBpZiBbIC16ICIke0RFRkFVTFRfSUZDX0lQfSIgXQogICAgdGhlbgogICAgICBlY2hvZGF0ZSAiRmFpbGVkIHRvIGdldCBJUCBhZGRyZXNzIGZvciB0aGUgZGVmYXVsdCByb3V0ZSBpbnRlcmZhY2UiCiAgICAgIGV4aXQgMQogICAgZmkKICAgIAogICAgICMgZ2V0IHRoZSBmdWxsIGhvc3RuYW1lCiAgICBGVUxMX0hPU1ROQU1FPSQoaG9zdG5hbWUgLWYpCiAgICAKICAgICMgd3JpdGUgdGhlIG5vZGVpcF9lbnYgZmlsZQogICAgIyB3ZSBuZWVkIHRoZSBsaW5lIGJlbG93IGJlY2F1c2UgZmxhdGNhciBoYXMgdGhlIHNhbWUgc3RyaW5nICJjb3Jlb3MiIGluIHRoYXQgZmlsZQogICAgaWYgZ3JlcCAtcSBjb3Jlb3MgL2V0Yy9vcy1yZWxlYXNlCiAgICB0aGVuCiAgICAgIGVjaG8gIktVQkVMRVRfTk9ERV9JUD0ke0RFRkFVTFRfSUZDX0lQfVxuS1VCRUxFVF9IT1NUTkFNRT0ke0ZVTExfSE9TVE5BTUV9IiA+IC9ldGMva3ViZXJuZXRlcy9ub2RlaXAuY29uZgogICAgZWxpZiBbICEgLWQgL2V0Yy9zeXN0ZW1kL3N5c3RlbS9rdWJlbGV0LnNlcnZpY2UuZCBdCiAgICB0aGVuCiAgICAgIGVjaG9kYXRlICJDYW4ndCBmaW5kIGt1YmVsZXQgc2VydmljZSBleHRyYXMgZGlyZWN0b3J5IgogICAgICBleGl0IDEKICAgIGVsc2UKICAgICAgZWNobyAtZSAiW1NlcnZpY2VdXG5FbnZpcm9ubWVudD1cIktVQkVMRVRfTk9ERV9JUD0ke0RFRkFVTFRfSUZDX0lQfVwiXG5FbnZpcm9ubWVudD1cIktVQkVMRVRfSE9TVE5BTUU9JHtGVUxMX0hPU1ROQU1FfVwiIiA+IC9ldGMvc3lzdGVtZC9zeXN0ZW0va3ViZWxldC5zZXJ2aWNlLmQvbm9kZWlwLmNvbmYKICAgIGZpCiAgICAKCi0gcGF0aDogJy9ldGMva3ViZXJuZXRlcy9wa2kvY2EuY3J0JwogIGNvbnRlbnQ6IHwtCiAgICAtLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KICAgIE1JSUVXakNDQTBLZ0F3SUJBZ0lKQUxmUmxXc0k4WVFITUEwR0NTcUdTSWIzRFFFQkJRVUFNSHN4Q3pBSkJnTlYKICAgIEJBWVRBbFZUTVFzd0NRWURWUVFJRXdKRFFURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeVlXNWphWE5qYnpFVU1CSUcKICAgIEExVUVDaE1MUW5KaFpHWnBkSHBwYm1NeEVqQVFCZ05WQkFNVENXeHZZMkZzYUc5emRERWRNQnNHQ1NxR1NJYjMKICAgIERRRUpBUllPWW5KaFpFQmtZVzVuWVM1amIyMHdIaGNOTVRRd056RTFNakEwTmpBMVdoY05NVGN3TlRBME1qQTAKICAgIE5qQTFXakI3TVFzd0NRWURWUVFHRXdKVlV6RUxNQWtHQTFVRUNCTUNRMEV4RmpBVUJnTlZCQWNURFZOaGJpQkcKICAgIGNtRnVZMmx6WTI4eEZEQVNCZ05WQkFvVEMwSnlZV1JtYVhSNmFXNWpNUkl3RUFZRFZRUURFd2xzYjJOaGJHaHYKICAgIGMzUXhIVEFiQmdrcWhraUc5dzBCQ1FFV0RtSnlZV1JBWkdGdVoyRXVZMjl0TUlJQklqQU5CZ2txaGtpRzl3MEIKICAgIEFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXQ1ZkFqcDRmVGNla1dVVGZ6c3Awa3lpaDFPWWJzR0wwS1gxZVJiU1MKICAgIFI4T2QwKzlRNjJIeW55K0dGd01UYjRBL0tVOG1zc29IdmNjZVNBQWJ3ZmJ4RksvK3M1MVRvYnFVbk9SWnJPb1QKICAgIFpqa1V5Z2J5WERTSzk5WUJiY1IxUGlwOHZ3TVRtNFhLdUx0Q2lnZUJCZGpqQVFkZ1VPMjhMRU5HbHNNbm1lWWsKICAgIEpmT0RWR25WbXI1THRiOUFOQThJS3lUZnNuSEo0aU9DUy9QbFBiVWoycTdZbm9WTHBvc1VCTWxnVWIvQ3lrWDMKICAgIG1Pb0xiNHlKSlF5QS9pU1Q2WnhpSUVqMzZENHlXWjVsZzdZSmwrVWlpQlFIR0NuUGRHeWlwcVYwNmV4MGhlWVcKICAgIGNhaVc4TFdaU1VROTNqUStXVkNIOGhUN0RRTzFkbXN2VW1YbHEvSmVBbHdRL1FJREFRQUJvNEhnTUlIZE1CMEcKICAgIEExVWREZ1FXQkJSY0FST3RoUzRQNFU3dlRmakJ5QzU2OVI3RTZEQ0JyUVlEVlIwakJJR2xNSUdpZ0JSY0FST3QKICAgIGhTNFA0VTd2VGZqQnlDNTY5UjdFNktGL3BIMHdlekVMTUFrR0ExVUVCaE1DVlZNeEN6QUpCZ05WQkFnVEFrTkIKICAgIE1SWXdGQVlEVlFRSEV3MVRZVzRnUm5KaGJtTnBjMk52TVJRd0VnWURWUVFLRXd0Q2NtRmtabWwwZW1sdVl6RVMKICAgIE1CQUdBMVVFQXhNSmJHOWpZV3hvYjNOME1SMHdHd1lKS29aSWh2Y05BUWtCRmc1aWNtRmtRR1JoYm1kaExtTnYKICAgIGJZSUpBTGZSbFdzSThZUUhNQXdHQTFVZEV3UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUZCUUFEZ2dFQkFHNmgKICAgIFU5ZjlzTkgwLzZvQmJHR3kyRVZVMFVnSVRVUUlyRldvOXJGa3JXNWsvWGtEalFtKzNsempUMGlHUjRJeEUvQW8KICAgIGVVNnNRaHVhN3dyV2VGRW40N0dMOThsbkNzSmREN29aTmhGbVE5NVRiL0xuRFVqczVZajliclAwTld6WGZZVTQKICAgIFVLMlpuSU5KUmNKcEI4aVJDYUN4RThEZGNVRjBYcUlFcTZwQTI3MnNub0xtaVhMTXZObDNrWUVkbStqZTZ2b0QKICAgIDU4U05WRVVzenR6UXlYbUpFaENwd1ZJMEE2UUNqelhqK3F2cG13M1paSGk4SndYZWk4WlpCTFRTRkJraThaN24KICAgIHNIOUJCSDM4L1N6VW1BTjRRSFNQeTFnanFtMDBPQUU4TmFZRGtoL2J6RTRkN21MR0dNV3AvV0UzS1BTdTgySEYKICAgIGtQZTZYb1NiaUxtL2t4azMyVDA9CiAgICAtLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCiAgICAKCi0gcGF0aDogJy9ldGMvc3lzdGVtZC9zeXN0ZW0vc2V0dXAuc2VydmljZScKICBwZXJtaXNzaW9uczogJzA2NDQnCiAgY29udGVudDogfC0KICAgIFtJbnN0YWxsXQogICAgV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKICAgIAogICAgW1VuaXRdCiAgICBSZXF1aXJlcz1uZXR3b3JrLW9ubGluZS50YXJnZXQKICAgIEFmdGVyPW5ldHdvcmstb25saW5lLnRhcmdldAogICAgCiAgICBbU2VydmljZV0KICAgIFR5cGU9b25lc2hvdAogICAgUmVtYWluQWZ0ZXJFeGl0PXRydWUKICAgIEVudmlyb25tZW50RmlsZT0tL2V0Yy9lbnZpcm9ubWVudAogICAgRXhlY1N0YXJ0PS9vcHQvYmluL3N1cGVydmlzZS5zaCAvb3B0L2Jpbi9zZXR1cAogICAgCgotIHBhdGg6ICcvZXRjL3Byb2ZpbGUuZC9vcHQtYmluLXBhdGguc2gnCiAgcGVybWlzc2lvbnM6ICcwNjQ0JwogIGNvbnRlbnQ6IHwtCiAgICBleHBvcnQgUEFUSD0iL29wdC9iaW46JFBBVEgiCiAgICAKCi0gcGF0aDogJy9ldGMva3ViZXJuZXRlcy9rdWJlbGV0LmNvbmYnCiAgY29udGVudDogfC0KICAgIGFwaVZlcnNpb246IGt1YmVsZXQuY29uZmlnLms4cy5pby92MWJldGExCiAgICBraW5kOiBLdWJlbGV0Q29uZmlndXJhdGlvbgogICAgYXV0aGVudGljYXRpb246CiAgICAgIGFub255bW91czoKICAgICAgICBlbmFibGVkOiBmYWxzZQogICAgICB3ZWJob29rOgogICAgICAgIGVuYWJsZWQ6IHRydWUKICAgICAgeDUwOToKICAgICAgICBjbGllbnRDQUZpbGU6IC9ldGMva3ViZXJuZXRlcy9wa2kvY2EuY3J0CiAgICBhdXRob3JpemF0aW9uOgogICAgICBtb2RlOiBXZWJob29rCiAgICBjZ3JvdXBEcml2ZXI6IHN5c3RlbWQKICAgIGNsdXN0ZXJETlM6CiAgICAtICIxMC4wLjAuMCIKICAgIGNsdXN0ZXJEb21haW46IGNsdXN0ZXIubG9jYWwKICAgIGZlYXR1cmVHYXRlczoKICAgICAgR3JhY2VmdWxOb2RlU2h1dGRvd246IHRydWUKICAgICAgSWRlbnRpZnlQb2RPUzogZmFsc2UKICAgIHByb3RlY3RLZXJuZWxEZWZhdWx0czogdHJ1ZQogICAgcmVhZE9ubHlQb3J0OiAwCiAgICByb3RhdGVDZXJ0aWZpY2F0ZXM6IHRydWUKICAgIHNlcnZlclRMU0Jvb3RzdHJhcDogdHJ1ZQogICAgc3RhdGljUG9kUGF0aDogL2V0Yy9rdWJlcm5ldGVzL21hbmlmZXN0cwogICAga3ViZVJlc2VydmVkOgogICAgICBjcHU6IDIwMG0KICAgICAgZXBoZW1lcmFsLXN0b3JhZ2U6IDFHaQogICAgICBtZW1vcnk6IDIwME1pCiAgICBzeXN0ZW1SZXNlcnZlZDoKICAgICAgY3B1OiAyMDBtCiAgICAgIGVwaGVtZXJhbC1zdG9yYWdlOiAxR2kKICAgICAgbWVtb3J5OiAyMDBNaQogICAgZXZpY3Rpb25IYXJkOgogICAgICBpbWFnZWZzLmF2YWlsYWJsZTogMTUlCiAgICAgIG1lbW9yeS5hdmFpbGFibGU6IDEwME1pCiAgICAgIG5vZGVmcy5hdmFpbGFibGU6IDEwJQogICAgICBub2RlZnMuaW5vZGVzRnJlZTogNSUKICAgIHRsc0NpcGhlclN1aXRlczoKICAgIC0gVExTX0FFU18xMjhfR0NNX1NIQTI1NgogICAgLSBUTFNfQUVTXzI1Nl9HQ01fU0hBMzg0CiAgICAtIFRMU19DSEFDSEEyMF9QT0xZMTMwNV9TSEEyNTYKICAgIC0gVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CiAgICAtIFRMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAogICAgLSBUTFNfRUNESEVfRUNEU0FfV0lUSF9DSEFDSEEyMF9QT0xZMTMwNQogICAgLSBUTFNfRUNESEVfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CiAgICAtIFRMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKICAgIC0gVExTX0VDREhFX1JTQV9XSVRIX0NIQUNIQTIwX1BPTFkxMzA1CiAgICB2b2x1bWVQbHVnaW5EaXI6IC92YXIvbGliL2t1YmVsZXQvdm9sdW1lcGx1Z2lucwogICAgCgotIHBhdGg6ICcvZXRjL3N5c3RlbWQvc3lzdGVtL2t1YmVsZXQtaGVhbHRoY2hlY2suc2VydmljZScKICBwZXJtaXNzaW9uczogJzA2NDQnCiAgY29udGVudDogfC0KICAgIFtVbml0XQogICAgUmVxdWlyZXM9a3ViZWxldC5zZXJ2aWNlCiAgICBBZnRlcj1rdWJlbGV0LnNlcnZpY2UKICAgIAogICAgW1NlcnZpY2VdCiAgICBFeGVjU3RhcnQ9L29wdC9iaW4vaGVhbHRoLW1vbml0b3Iuc2gga3ViZWxldAogICAgCiAgICBbSW5zdGFsbF0KICAgIFdhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CiAgICAKCi0gcGF0aDogJy9ldGMvZG9ja2VyL2RhZW1vbi5qc29uJwogIHBlcm1pc3Npb25zOiAnMDY0NCcKICBjb250ZW50OiB8LQogICAgeyJleGVjLW9wdHMiOlsibmF0aXZlLmNncm91cGRyaXZlcj1zeXN0ZW1kIl0sInN0b3JhZ2UtZHJpdmVyIjoib3ZlcmxheTIiLCJsb2ctZHJpdmVyIjoianNvbi1maWxlIiwibG9nLW9wdHMiOnsibWF4LWZpbGUiOiI1IiwibWF4LXNpemUiOiIxMDBtIn19Cgpib290Y21kOgotIGVjaG8gaGVsbG8KLSBlY2hvIHdvcmxkCgpyaF9zdWJzY3JpcHRpb246CiAgICBwYXNzd29yZDogcGFzc3dvcmQKICAgIHVzZXJuYW1lOiB1c2VybmFtZQ== + cloud-config: I2Nsb3VkLWNvbmZpZwoKc3NoX3B3YXV0aDogbm8Kc3NoX2F1dGhvcml6ZWRfa2V5czoKLSAnc3NoLXJzYSBBQUFBQjNOemFDMXljMkVBQUFBREFRQUJBQUFDQVFEZE9JaFltekNLNURTVkx1M2MnCndyaXRlX2ZpbGVzOgotIHBhdGg6ICcvZXRjL3N5c3RlbWQvam91cm5hbGQuY29uZi5kL21heF9kaXNrX3VzZS5jb25mJwogIGNvbnRlbnQ6IHwtCiAgICBbSm91cm5hbF0KICAgIFN5c3RlbU1heFVzZT01RwogICAgCgotIHBhdGg6ICcvb3B0L2xvYWQta2VybmVsLW1vZHVsZXMuc2gnCiAgcGVybWlzc2lvbnM6ICcwNzU1JwogIGNvbnRlbnQ6IHwtCiAgICAjIS91c3IvYmluL2VudiBiYXNoCiAgICBzZXQgLWV1byBwaXBlZmFpbAogICAgCiAgICBtb2Rwcm9iZSBpcF92cwogICAgbW9kcHJvYmUgaXBfdnNfcnIKICAgIG1vZHByb2JlIGlwX3ZzX3dycgogICAgbW9kcHJvYmUgaXBfdnNfc2gKICAgIAogICAgaWYgbW9kaW5mbyBuZl9jb25udHJhY2tfaXB2NCAmPiAvZGV2L251bGw7IHRoZW4KICAgICAgbW9kcHJvYmUgbmZfY29ubnRyYWNrX2lwdjQKICAgIGVsc2UKICAgICAgbW9kcHJvYmUgbmZfY29ubnRyYWNrCiAgICBmaQogICAgCgotIHBhdGg6ICcvZXRjL3N5c2N0bC5kL2s4cy5jb25mJwogIGNvbnRlbnQ6IHwtCiAgICBuZXQuYnJpZGdlLmJyaWRnZS1uZi1jYWxsLWlwNnRhYmxlcyA9IDEKICAgIG5ldC5icmlkZ2UuYnJpZGdlLW5mLWNhbGwtaXB0YWJsZXMgPSAxCiAgICBrZXJuZWwucGFuaWNfb25fb29wcyA9IDEKICAgIGtlcm5lbC5wYW5pYyA9IDEwCiAgICBuZXQuaXB2NC5pcF9mb3J3YXJkID0gMQogICAgdm0ub3ZlcmNvbW1pdF9tZW1vcnkgPSAxCiAgICBmcy5pbm90aWZ5Lm1heF91c2VyX3dhdGNoZXMgPSAxMDQ4NTc2CiAgICAKCi0gcGF0aDogJy9ldGMvZGVmYXVsdC9ncnViLmQvNjAtc3dhcC1hY2NvdW50aW5nLmNmZycKICBjb250ZW50OiB8LQogICAgIyBBZGRlZCBieSBrdWJlcm1hdGljIG1hY2hpbmUtY29udHJvbGxlcgogICAgIyBFbmFibGUgY2dyb3VwcyBtZW1vcnkgYW5kIHN3YXAgYWNjb3VudGluZwogICAgR1JVQl9DTURMSU5FX0xJTlVYPSJjZ3JvdXBfZW5hYmxlPW1lbW9yeSBzd2FwYWNjb3VudD0xIgogICAgCgotIHBhdGg6ICcvb3B0L2Jpbi9zZXR1cCcKICBwZXJtaXNzaW9uczogJzA3NTUnCiAgY29udGVudDogfC0KICAgICMhL2Jpbi9iYXNoCiAgICBzZXQgLXhldW8gcGlwZWZhaWwKICAgIGlmIHN5c3RlbWN0bCBpcy1hY3RpdmUgdWZ3OyB0aGVuIHN5c3RlbWN0bCBzdG9wIHVmdzsgZmkKICAgIHN5c3RlbWN0bCBtYXNrIHVmdwogICAgc3lzdGVtY3RsIHJlc3RhcnQgc3lzdGVtZC1tb2R1bGVzLWxvYWQuc2VydmljZQogICAgc3lzY3RsIC0tc3lzdGVtCiAgICBzZWQgLWkub3JpZyAnLy4qc3dhcC4qL2QnIC9ldGMvZnN0YWIKICAgIHN3YXBvZmYgLWEKICAgIAogICAgYXB0LWdldCB1cGRhdGUKICAgIAogICAgREVCSUFOX0ZST05URU5EPW5vbmludGVyYWN0aXZlIGFwdC1nZXQgLW8gRHBrZzo6T3B0aW9uczo6PSItLWZvcmNlLWNvbmZkZWYiIC1vIERwa2c6Ok9wdGlvbnM6Oj0iLS1mb3JjZS1jb25mb2xkIiBpbnN0YWxsIC15IFwKICAgICAgY3VybCBcCiAgICAgIGNhLWNlcnRpZmljYXRlcyBcCiAgICAgIGNlcGgtY29tbW9uIFwKICAgICAgY2lmcy11dGlscyBcCiAgICAgIGNvbm50cmFjayBcCiAgICAgIGUyZnNwcm9ncyBcCiAgICAgIGVidGFibGVzIFwKICAgICAgZXRodG9vbCBcCiAgICAgIGdsdXN0ZXJmcy1jbGllbnQgXAogICAgICBpcHRhYmxlcyBcCiAgICAgIGpxIFwKICAgICAga21vZCBcCiAgICAgIG9wZW5zc2gtY2xpZW50IFwKICAgICAgbmZzLWNvbW1vbiBcCiAgICAgIHNvY2F0IFwKICAgICAgdXRpbC1saW51eCBcCiAgICAgIGlwdnNhZG0KICAgIGFwdC1nZXQgdXBkYXRlCiAgICBhcHQtZ2V0IGluc3RhbGwgLXkgYXB0LXRyYW5zcG9ydC1odHRwcyBjYS1jZXJ0aWZpY2F0ZXMgY3VybCBzb2Z0d2FyZS1wcm9wZXJ0aWVzLWNvbW1vbiBsc2ItcmVsZWFzZQogICAgY3VybCAtZnNTTCBodHRwczovL2Rvd25sb2FkLmRvY2tlci5jb20vbGludXgvdWJ1bnR1L2dwZyB8IGFwdC1rZXkgYWRkIC0KICAgIGFkZC1hcHQtcmVwb3NpdG9yeSAiZGViIGh0dHBzOi8vZG93bmxvYWQuZG9ja2VyLmNvbS9saW51eC91YnVudHUgJChsc2JfcmVsZWFzZSAtY3MpIHN0YWJsZSIKICAgIAogICAgbWtkaXIgLXAgL2V0Yy9zeXN0ZW1kL3N5c3RlbS9jb250YWluZXJkLnNlcnZpY2UuZCAvZXRjL3N5c3RlbWQvc3lzdGVtL2RvY2tlci5zZXJ2aWNlLmQKICAgIAogICAgY2F0IDw8RU9GIHwgdGVlIC9ldGMvc3lzdGVtZC9zeXN0ZW0vY29udGFpbmVyZC5zZXJ2aWNlLmQvZW52aXJvbm1lbnQuY29uZiAvZXRjL3N5c3RlbWQvc3lzdGVtL2RvY2tlci5zZXJ2aWNlLmQvZW52aXJvbm1lbnQuY29uZgogICAgW1NlcnZpY2VdCiAgICBSZXN0YXJ0PWFsd2F5cwogICAgRW52aXJvbm1lbnRGaWxlPS0vZXRjL2Vudmlyb25tZW50CiAgICBFT0YKICAgIAogICAgYXB0LWdldCBpbnN0YWxsIC15IFwKICAgICAgICBjb250YWluZXJkLmlvPTEuNC4zKiBcCiAgICAgICAgZG9ja2VyLWNlPTU6MTkuMDMuMTMqIFwKICAgICAgICBkb2NrZXItY2UtY2xpPTU6MTkuMDMuMTMqCiAgICBhcHQtbWFyayBob2xkIGRvY2tlci1jZSBkb2NrZXItY2UtY2xpIGNvbnRhaW5lcmQuaW8KICAgIAogICAgc3lzdGVtY3RsIGRhZW1vbi1yZWxvYWQKICAgIHN5c3RlbWN0bCBlbmFibGUgLS1ub3cgZG9ja2VyCiAgICBvcHRfYmluPS9vcHQvYmluCiAgICBjbmlfYmluX2Rpcj0vb3B0L2NuaS9iaW4KICAgIG1rZGlyIC1wIC9ldGMvY25pL25ldC5kIC9ldGMva3ViZXJuZXRlcy9keW5hbWljLWNvbmZpZy1kaXIgL2V0Yy9rdWJlcm5ldGVzL21hbmlmZXN0cyAiJG9wdF9iaW4iICIkY25pX2Jpbl9kaXIiCiAgICBhcmNoPSR7SE9TVF9BUkNILX0KICAgIGlmIFsgLXogIiRhcmNoIiBdCiAgICB0aGVuCiAgICBjYXNlICQodW5hbWUgLW0pIGluCiAgICB4ODZfNjQpCiAgICAgICAgYXJjaD0iYW1kNjQiCiAgICAgICAgOzsKICAgIGFhcmNoNjQpCiAgICAgICAgYXJjaD0iYXJtNjQiCiAgICAgICAgOzsKICAgICopCiAgICAgICAgZWNobyAidW5zdXBwb3J0ZWQgQ1BVIGFyY2hpdGVjdHVyZSwgZXhpdGluZyIKICAgICAgICBleGl0IDEKICAgICAgICA7OwogICAgZXNhYwogICAgZmkKICAgIENOSV9WRVJTSU9OPSIke0NOSV9WRVJTSU9OOi12MC44Ljd9IgogICAgY25pX2Jhc2VfdXJsPSJodHRwczovL2dpdGh1Yi5jb20vY29udGFpbmVybmV0d29ya2luZy9wbHVnaW5zL3JlbGVhc2VzL2Rvd25sb2FkLyRDTklfVkVSU0lPTiIKICAgIGNuaV9maWxlbmFtZT0iY25pLXBsdWdpbnMtbGludXgtJGFyY2gtJENOSV9WRVJTSU9OLnRneiIKICAgIGN1cmwgLUxmbyAiJGNuaV9iaW5fZGlyLyRjbmlfZmlsZW5hbWUiICIkY25pX2Jhc2VfdXJsLyRjbmlfZmlsZW5hbWUiCiAgICBjbmlfc3VtPSQoY3VybCAtTGYgIiRjbmlfYmFzZV91cmwvJGNuaV9maWxlbmFtZS5zaGEyNTYiKQogICAgY2QgIiRjbmlfYmluX2RpciIKICAgIHNoYTI1NnN1bSAtYyA8PDwiJGNuaV9zdW0iCiAgICB0YXIgeHZmICIkY25pX2ZpbGVuYW1lIgogICAgcm0gLWYgIiRjbmlfZmlsZW5hbWUiCiAgICBjZCAtCiAgICBLVUJFX1ZFUlNJT049IiR7S1VCRV9WRVJTSU9OOi12MS4yMi4xfSIKICAgIGt1YmVfZGlyPSIkb3B0X2Jpbi9rdWJlcm5ldGVzLSRLVUJFX1ZFUlNJT04iCiAgICBrdWJlX2Jhc2VfdXJsPSJodHRwczovL3N0b3JhZ2UuZ29vZ2xlYXBpcy5jb20va3ViZXJuZXRlcy1yZWxlYXNlL3JlbGVhc2UvJEtVQkVfVkVSU0lPTi9iaW4vbGludXgvJGFyY2giCiAgICBrdWJlX3N1bV9maWxlPSIka3ViZV9kaXIvc2hhMjU2IgogICAgbWtkaXIgLXAgIiRrdWJlX2RpciIKICAgIDogPiIka3ViZV9zdW1fZmlsZSIKICAgIAogICAgZm9yIGJpbiBpbiBrdWJlbGV0IGt1YmVhZG0ga3ViZWN0bDsgZG8KICAgICAgICBjdXJsIC1MZm8gIiRrdWJlX2Rpci8kYmluIiAiJGt1YmVfYmFzZV91cmwvJGJpbiIKICAgICAgICBjaG1vZCAreCAiJGt1YmVfZGlyLyRiaW4iCiAgICAgICAgc3VtPSQoY3VybCAtTGYgIiRrdWJlX2Jhc2VfdXJsLyRiaW4uc2hhMjU2IikKICAgICAgICBlY2hvICIkc3VtICAka3ViZV9kaXIvJGJpbiIgPj4iJGt1YmVfc3VtX2ZpbGUiCiAgICBkb25lCiAgICBzaGEyNTZzdW0gLWMgIiRrdWJlX3N1bV9maWxlIgogICAgCiAgICBmb3IgYmluIGluIGt1YmVsZXQga3ViZWFkbSBrdWJlY3RsOyBkbwogICAgICAgIGxuIC1zZiAiJGt1YmVfZGlyLyRiaW4iICIkb3B0X2JpbiIvJGJpbgogICAgZG9uZQogICAgCiAgICBpZiBbWyAhIC14IC9vcHQvYmluL2hlYWx0aC1tb25pdG9yLnNoIF1dOyB0aGVuCiAgICAgICAgY3VybCAtTGZvIC9vcHQvYmluL2hlYWx0aC1tb25pdG9yLnNoIGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9rdWJlcm1hdGljL21hY2hpbmUtY29udHJvbGxlci83OTY3YTBhZjJiNzVmMjlhZDJhYjIyN2VlYWEyNmVhN2IwZjJmYmRlL3BrZy91c2VyZGF0YS9zY3JpcHRzL2hlYWx0aC1tb25pdG9yLnNoCiAgICAgICAgY2htb2QgK3ggL29wdC9iaW4vaGVhbHRoLW1vbml0b3Iuc2gKICAgIGZpCiAgICAKICAgICMgc2V0IGt1YmVsZXQgbm9kZWlwIGVudmlyb25tZW50IHZhcmlhYmxlCiAgICAvb3B0L2Jpbi9zZXR1cF9uZXRfZW52LnNoCiAgICAKICAgIHN5c3RlbWN0bCBlbmFibGUgLS1ub3cga3ViZWxldAogICAgc3lzdGVtY3RsIGVuYWJsZSAtLW5vdyAtLW5vLWJsb2NrIGt1YmVsZXQtaGVhbHRoY2hlY2suc2VydmljZQogICAgCgotIHBhdGg6ICcvb3B0L2Jpbi9zdXBlcnZpc2Uuc2gnCiAgcGVybWlzc2lvbnM6ICcwNzU1JwogIGNvbnRlbnQ6IHwtCiAgICAjIS9iaW4vYmFzaAogICAgc2V0IC14ZXVvIHBpcGVmYWlsCiAgICB3aGlsZSAhICIkQCI7IGRvCiAgICAgIHNsZWVwIDEKICAgIGRvbmUKICAgIAoKLSBwYXRoOiAnL2V0Yy9zeXN0ZW1kL3N5c3RlbS9rdWJlbGV0LnNlcnZpY2UnCiAgY29udGVudDogfC0KICAgIFtVbml0XQogICAgQWZ0ZXI9ZG9ja2VyLnNlcnZpY2UKICAgIFJlcXVpcmVzPWRvY2tlci5zZXJ2aWNlCiAgICAKICAgIERlc2NyaXB0aW9uPWt1YmVsZXQ6IFRoZSBLdWJlcm5ldGVzIE5vZGUgQWdlbnQKICAgIERvY3VtZW50YXRpb249aHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvaG9tZS8KICAgIAogICAgW1NlcnZpY2VdCiAgICBSZXN0YXJ0PWFsd2F5cwogICAgU3RhcnRMaW1pdEludGVydmFsPTAKICAgIFJlc3RhcnRTZWM9MTAKICAgIENQVUFjY291bnRpbmc9dHJ1ZQogICAgTWVtb3J5QWNjb3VudGluZz10cnVlCiAgICAKICAgIEVudmlyb25tZW50PSJQQVRIPS9vcHQvYmluOi9iaW46L3Vzci9sb2NhbC9zYmluOi91c3IvbG9jYWwvYmluOi91c3Ivc2JpbjovdXNyL2Jpbjovc2Jpbi8iCiAgICBFbnZpcm9ubWVudEZpbGU9LS9ldGMvZW52aXJvbm1lbnQKICAgIAogICAgRXhlY1N0YXJ0UHJlPS9iaW4vYmFzaCAvb3B0L2xvYWQta2VybmVsLW1vZHVsZXMuc2gKICAgIEV4ZWNTdGFydFByZT0vYmluL2Jhc2ggL29wdC9iaW4vc2V0dXBfbmV0X2Vudi5zaAogICAgRXhlY1N0YXJ0PS9vcHQvYmluL2t1YmVsZXQgJEtVQkVMRVRfRVhUUkFfQVJHUyBcCiAgICAgIC0tYm9vdHN0cmFwLWt1YmVjb25maWc9L2V0Yy9rdWJlcm5ldGVzL2Jvb3RzdHJhcC1rdWJlbGV0LmNvbmYgXAogICAgICAtLWt1YmVjb25maWc9L3Zhci9saWIva3ViZWxldC9rdWJlY29uZmlnIFwKICAgICAgLS1jb25maWc9L2V0Yy9rdWJlcm5ldGVzL2t1YmVsZXQuY29uZiBcCiAgICAgIC0tbmV0d29yay1wbHVnaW49Y25pIFwKICAgICAgLS1jZXJ0LWRpcj0vZXRjL2t1YmVybmV0ZXMvcGtpIFwKICAgICAgLS1jbG91ZC1wcm92aWRlcj1hd3MgXAogICAgICAtLWNsb3VkLWNvbmZpZz0vZXRjL2t1YmVybmV0ZXMvY2xvdWQtY29uZmlnIFwKICAgICAgLS1keW5hbWljLWNvbmZpZy1kaXI9L2V0Yy9rdWJlcm5ldGVzL2R5bmFtaWMtY29uZmlnLWRpciBcCiAgICAgIC0tZmVhdHVyZS1nYXRlcz1EeW5hbWljS3ViZWxldENvbmZpZz10cnVlIFwKICAgICAgLS1leGl0LW9uLWxvY2stY29udGVudGlvbiBcCiAgICAgIC0tbG9jay1maWxlPS90bXAva3ViZWxldC5sb2NrIFwKICAgICAgLS1jb250YWluZXItcnVudGltZT1kb2NrZXIgXAogICAgICAtLWNvbnRhaW5lci1ydW50aW1lLWVuZHBvaW50PXVuaXg6Ly8vdmFyL3J1bi9kb2NrZXJzaGltLnNvY2sgXAogICAgICAtLW5vZGUtaXAgJHtLVUJFTEVUX05PREVfSVB9CiAgICAKICAgIFtJbnN0YWxsXQogICAgV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKICAgIAoKLSBwYXRoOiAnL2V0Yy9zeXN0ZW1kL3N5c3RlbS9rdWJlbGV0LnNlcnZpY2UuZC9leHRyYXMuY29uZicKICBjb250ZW50OiB8LQogICAgW1NlcnZpY2VdCiAgICBFbnZpcm9ubWVudD0iS1VCRUxFVF9FWFRSQV9BUkdTPS0tcmVzb2x2LWNvbmY9L3J1bi9zeXN0ZW1kL3Jlc29sdmUvcmVzb2x2LmNvbmYiCiAgICAKCi0gcGF0aDogJy9ldGMva3ViZXJuZXRlcy9jbG91ZC1jb25maWcnCiAgcGVybWlzc2lvbnM6ICcwNjAwJwogIGNvbnRlbnQ6IHwtCiAgICBbZ2xvYmFsXQogICAgWm9uZT0iIgogICAgVlBDPSIiCiAgICBTdWJuZXRJRD0idGVzdC1zdWJuZXQiCiAgICAKICAgIAoKLSBwYXRoOiAnL29wdC9iaW4vc2V0dXBfbmV0X2Vudi5zaCcKICBwZXJtaXNzaW9uczogJzA3NTUnCiAgY29udGVudDogfC0KICAgICMhL3Vzci9iaW4vZW52IGJhc2gKICAgIGVjaG9kYXRlKCkgewogICAgICBlY2hvICJbJChkYXRlIC1JcyldIiAiJEAiCiAgICB9CiAgICAKICAgICMgZ2V0IHRoZSBkZWZhdWx0IGludGVyZmFjZSBJUCBhZGRyZXNzCiAgICBERUZBVUxUX0lGQ19JUD0kKGlwIC1vICByb3V0ZSBnZXQgMSB8IGdyZXAgLW9QICJzcmMgXEtcUysiKQogICAgCiAgICBpZiBbIC16ICIke0RFRkFVTFRfSUZDX0lQfSIgXQogICAgdGhlbgogICAgICBlY2hvZGF0ZSAiRmFpbGVkIHRvIGdldCBJUCBhZGRyZXNzIGZvciB0aGUgZGVmYXVsdCByb3V0ZSBpbnRlcmZhY2UiCiAgICAgIGV4aXQgMQogICAgZmkKICAgIAogICAgICMgZ2V0IHRoZSBmdWxsIGhvc3RuYW1lCiAgICBGVUxMX0hPU1ROQU1FPSQoaG9zdG5hbWUgLWYpCiAgICAKICAgICMgd3JpdGUgdGhlIG5vZGVpcF9lbnYgZmlsZQogICAgIyB3ZSBuZWVkIHRoZSBsaW5lIGJlbG93IGJlY2F1c2UgZmxhdGNhciBoYXMgdGhlIHNhbWUgc3RyaW5nICJjb3Jlb3MiIGluIHRoYXQgZmlsZQogICAgaWYgZ3JlcCAtcSBjb3Jlb3MgL2V0Yy9vcy1yZWxlYXNlCiAgICB0aGVuCiAgICAgIGVjaG8gIktVQkVMRVRfTk9ERV9JUD0ke0RFRkFVTFRfSUZDX0lQfVxuS1VCRUxFVF9IT1NUTkFNRT0ke0ZVTExfSE9TVE5BTUV9IiA+IC9ldGMva3ViZXJuZXRlcy9ub2RlaXAuY29uZgogICAgZWxpZiBbICEgLWQgL2V0Yy9zeXN0ZW1kL3N5c3RlbS9rdWJlbGV0LnNlcnZpY2UuZCBdCiAgICB0aGVuCiAgICAgIGVjaG9kYXRlICJDYW4ndCBmaW5kIGt1YmVsZXQgc2VydmljZSBleHRyYXMgZGlyZWN0b3J5IgogICAgICBleGl0IDEKICAgIGVsc2UKICAgICAgZWNobyAtZSAiW1NlcnZpY2VdXG5FbnZpcm9ubWVudD1cIktVQkVMRVRfTk9ERV9JUD0ke0RFRkFVTFRfSUZDX0lQfVwiXG5FbnZpcm9ubWVudD1cIktVQkVMRVRfSE9TVE5BTUU9JHtGVUxMX0hPU1ROQU1FfVwiIiA+IC9ldGMvc3lzdGVtZC9zeXN0ZW0va3ViZWxldC5zZXJ2aWNlLmQvbm9kZWlwLmNvbmYKICAgIGZpCiAgICAKCi0gcGF0aDogJy9ldGMva3ViZXJuZXRlcy9wa2kvY2EuY3J0JwogIGNvbnRlbnQ6IHwtCiAgICAtLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KICAgIE1JSUVXakNDQTBLZ0F3SUJBZ0lKQUxmUmxXc0k4WVFITUEwR0NTcUdTSWIzRFFFQkJRVUFNSHN4Q3pBSkJnTlYKICAgIEJBWVRBbFZUTVFzd0NRWURWUVFJRXdKRFFURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeVlXNWphWE5qYnpFVU1CSUcKICAgIEExVUVDaE1MUW5KaFpHWnBkSHBwYm1NeEVqQVFCZ05WQkFNVENXeHZZMkZzYUc5emRERWRNQnNHQ1NxR1NJYjMKICAgIERRRUpBUllPWW5KaFpFQmtZVzVuWVM1amIyMHdIaGNOTVRRd056RTFNakEwTmpBMVdoY05NVGN3TlRBME1qQTAKICAgIE5qQTFXakI3TVFzd0NRWURWUVFHRXdKVlV6RUxNQWtHQTFVRUNCTUNRMEV4RmpBVUJnTlZCQWNURFZOaGJpQkcKICAgIGNtRnVZMmx6WTI4eEZEQVNCZ05WQkFvVEMwSnlZV1JtYVhSNmFXNWpNUkl3RUFZRFZRUURFd2xzYjJOaGJHaHYKICAgIGMzUXhIVEFiQmdrcWhraUc5dzBCQ1FFV0RtSnlZV1JBWkdGdVoyRXVZMjl0TUlJQklqQU5CZ2txaGtpRzl3MEIKICAgIEFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXQ1ZkFqcDRmVGNla1dVVGZ6c3Awa3lpaDFPWWJzR0wwS1gxZVJiU1MKICAgIFI4T2QwKzlRNjJIeW55K0dGd01UYjRBL0tVOG1zc29IdmNjZVNBQWJ3ZmJ4RksvK3M1MVRvYnFVbk9SWnJPb1QKICAgIFpqa1V5Z2J5WERTSzk5WUJiY1IxUGlwOHZ3TVRtNFhLdUx0Q2lnZUJCZGpqQVFkZ1VPMjhMRU5HbHNNbm1lWWsKICAgIEpmT0RWR25WbXI1THRiOUFOQThJS3lUZnNuSEo0aU9DUy9QbFBiVWoycTdZbm9WTHBvc1VCTWxnVWIvQ3lrWDMKICAgIG1Pb0xiNHlKSlF5QS9pU1Q2WnhpSUVqMzZENHlXWjVsZzdZSmwrVWlpQlFIR0NuUGRHeWlwcVYwNmV4MGhlWVcKICAgIGNhaVc4TFdaU1VROTNqUStXVkNIOGhUN0RRTzFkbXN2VW1YbHEvSmVBbHdRL1FJREFRQUJvNEhnTUlIZE1CMEcKICAgIEExVWREZ1FXQkJSY0FST3RoUzRQNFU3dlRmakJ5QzU2OVI3RTZEQ0JyUVlEVlIwakJJR2xNSUdpZ0JSY0FST3QKICAgIGhTNFA0VTd2VGZqQnlDNTY5UjdFNktGL3BIMHdlekVMTUFrR0ExVUVCaE1DVlZNeEN6QUpCZ05WQkFnVEFrTkIKICAgIE1SWXdGQVlEVlFRSEV3MVRZVzRnUm5KaGJtTnBjMk52TVJRd0VnWURWUVFLRXd0Q2NtRmtabWwwZW1sdVl6RVMKICAgIE1CQUdBMVVFQXhNSmJHOWpZV3hvYjNOME1SMHdHd1lKS29aSWh2Y05BUWtCRmc1aWNtRmtRR1JoYm1kaExtTnYKICAgIGJZSUpBTGZSbFdzSThZUUhNQXdHQTFVZEV3UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUZCUUFEZ2dFQkFHNmgKICAgIFU5ZjlzTkgwLzZvQmJHR3kyRVZVMFVnSVRVUUlyRldvOXJGa3JXNWsvWGtEalFtKzNsempUMGlHUjRJeEUvQW8KICAgIGVVNnNRaHVhN3dyV2VGRW40N0dMOThsbkNzSmREN29aTmhGbVE5NVRiL0xuRFVqczVZajliclAwTld6WGZZVTQKICAgIFVLMlpuSU5KUmNKcEI4aVJDYUN4RThEZGNVRjBYcUlFcTZwQTI3MnNub0xtaVhMTXZObDNrWUVkbStqZTZ2b0QKICAgIDU4U05WRVVzenR6UXlYbUpFaENwd1ZJMEE2UUNqelhqK3F2cG13M1paSGk4SndYZWk4WlpCTFRTRkJraThaN24KICAgIHNIOUJCSDM4L1N6VW1BTjRRSFNQeTFnanFtMDBPQUU4TmFZRGtoL2J6RTRkN21MR0dNV3AvV0UzS1BTdTgySEYKICAgIGtQZTZYb1NiaUxtL2t4azMyVDA9CiAgICAtLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCiAgICAKCi0gcGF0aDogJy9ldGMvc3lzdGVtZC9zeXN0ZW0vc2V0dXAuc2VydmljZScKICBwZXJtaXNzaW9uczogJzA2NDQnCiAgY29udGVudDogfC0KICAgIFtJbnN0YWxsXQogICAgV2FudGVkQnk9bXVsdGktdXNlci50YXJnZXQKICAgIAogICAgW1VuaXRdCiAgICBSZXF1aXJlcz1uZXR3b3JrLW9ubGluZS50YXJnZXQKICAgIEFmdGVyPW5ldHdvcmstb25saW5lLnRhcmdldAogICAgCiAgICBbU2VydmljZV0KICAgIFR5cGU9b25lc2hvdAogICAgUmVtYWluQWZ0ZXJFeGl0PXRydWUKICAgIEVudmlyb25tZW50RmlsZT0tL2V0Yy9lbnZpcm9ubWVudAogICAgRXhlY1N0YXJ0PS9vcHQvYmluL3N1cGVydmlzZS5zaCAvb3B0L2Jpbi9zZXR1cAogICAgCgotIHBhdGg6ICcvZXRjL3Byb2ZpbGUuZC9vcHQtYmluLXBhdGguc2gnCiAgcGVybWlzc2lvbnM6ICcwNjQ0JwogIGNvbnRlbnQ6IHwtCiAgICBleHBvcnQgUEFUSD0iL29wdC9iaW46JFBBVEgiCiAgICAKCi0gcGF0aDogJy9ldGMva3ViZXJuZXRlcy9rdWJlbGV0LmNvbmYnCiAgY29udGVudDogfC0KICAgIGFwaVZlcnNpb246IGt1YmVsZXQuY29uZmlnLms4cy5pby92MWJldGExCiAgICBraW5kOiBLdWJlbGV0Q29uZmlndXJhdGlvbgogICAgYXV0aGVudGljYXRpb246CiAgICAgIGFub255bW91czoKICAgICAgICBlbmFibGVkOiBmYWxzZQogICAgICB3ZWJob29rOgogICAgICAgIGVuYWJsZWQ6IHRydWUKICAgICAgeDUwOToKICAgICAgICBjbGllbnRDQUZpbGU6IC9ldGMva3ViZXJuZXRlcy9wa2kvY2EuY3J0CiAgICBhdXRob3JpemF0aW9uOgogICAgICBtb2RlOiBXZWJob29rCiAgICBjZ3JvdXBEcml2ZXI6IHN5c3RlbWQKICAgIGNsdXN0ZXJETlM6CiAgICAtICIxMC4wLjAuMCIKICAgIGNsdXN0ZXJEb21haW46IGNsdXN0ZXIubG9jYWwKICAgIGZlYXR1cmVHYXRlczoKICAgICAgR3JhY2VmdWxOb2RlU2h1dGRvd246IHRydWUKICAgICAgSWRlbnRpZnlQb2RPUzogZmFsc2UKICAgIHByb3RlY3RLZXJuZWxEZWZhdWx0czogdHJ1ZQogICAgcmVhZE9ubHlQb3J0OiAwCiAgICByb3RhdGVDZXJ0aWZpY2F0ZXM6IHRydWUKICAgIHNlcnZlclRMU0Jvb3RzdHJhcDogdHJ1ZQogICAgc3RhdGljUG9kUGF0aDogL2V0Yy9rdWJlcm5ldGVzL21hbmlmZXN0cwogICAga3ViZVJlc2VydmVkOgogICAgICBjcHU6IDIwMG0KICAgICAgZXBoZW1lcmFsLXN0b3JhZ2U6IDFHaQogICAgICBtZW1vcnk6IDIwME1pCiAgICBzeXN0ZW1SZXNlcnZlZDoKICAgICAgY3B1OiAyMDBtCiAgICAgIGVwaGVtZXJhbC1zdG9yYWdlOiAxR2kKICAgICAgbWVtb3J5OiAyMDBNaQogICAgZXZpY3Rpb25IYXJkOgogICAgICBpbWFnZWZzLmF2YWlsYWJsZTogMTUlCiAgICAgIG1lbW9yeS5hdmFpbGFibGU6IDEwME1pCiAgICAgIG5vZGVmcy5hdmFpbGFibGU6IDEwJQogICAgICBub2RlZnMuaW5vZGVzRnJlZTogNSUKICAgIHRsc0NpcGhlclN1aXRlczoKICAgIC0gVExTX0FFU18xMjhfR0NNX1NIQTI1NgogICAgLSBUTFNfQUVTXzI1Nl9HQ01fU0hBMzg0CiAgICAtIFRMU19DSEFDSEEyMF9QT0xZMTMwNV9TSEEyNTYKICAgIC0gVExTX0VDREhFX0VDRFNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CiAgICAtIFRMU19FQ0RIRV9FQ0RTQV9XSVRIX0FFU18yNTZfR0NNX1NIQTM4NAogICAgLSBUTFNfRUNESEVfRUNEU0FfV0lUSF9DSEFDSEEyMF9QT0xZMTMwNQogICAgLSBUTFNfRUNESEVfUlNBX1dJVEhfQUVTXzEyOF9HQ01fU0hBMjU2CiAgICAtIFRMU19FQ0RIRV9SU0FfV0lUSF9BRVNfMjU2X0dDTV9TSEEzODQKICAgIC0gVExTX0VDREhFX1JTQV9XSVRIX0NIQUNIQTIwX1BPTFkxMzA1CiAgICB2b2x1bWVQbHVnaW5EaXI6IC92YXIvbGliL2t1YmVsZXQvdm9sdW1lcGx1Z2lucwogICAgCgotIHBhdGg6ICcvZXRjL3N5c3RlbWQvc3lzdGVtL2t1YmVsZXQtaGVhbHRoY2hlY2suc2VydmljZScKICBwZXJtaXNzaW9uczogJzA2NDQnCiAgY29udGVudDogfC0KICAgIFtVbml0XQogICAgUmVxdWlyZXM9a3ViZWxldC5zZXJ2aWNlCiAgICBBZnRlcj1rdWJlbGV0LnNlcnZpY2UKICAgIAogICAgW1NlcnZpY2VdCiAgICBFeGVjU3RhcnQ9L29wdC9iaW4vaGVhbHRoLW1vbml0b3Iuc2gga3ViZWxldAogICAgCiAgICBbSW5zdGFsbF0KICAgIFdhbnRlZEJ5PW11bHRpLXVzZXIudGFyZ2V0CiAgICAKCi0gcGF0aDogJy9ldGMvZG9ja2VyL2RhZW1vbi5qc29uJwogIHBlcm1pc3Npb25zOiAnMDY0NCcKICBjb250ZW50OiB8LQogICAgeyJleGVjLW9wdHMiOlsibmF0aXZlLmNncm91cGRyaXZlcj1zeXN0ZW1kIl0sInN0b3JhZ2UtZHJpdmVyIjoib3ZlcmxheTIiLCJsb2ctZHJpdmVyIjoianNvbi1maWxlIiwibG9nLW9wdHMiOnsibWF4LWZpbGUiOiI1IiwibWF4LXNpemUiOiIxMDBtIn0sImluc2VjdXJlLXJlZ2lzdHJpZXMiOlsiMTkyLjE2OC4xMDAuMTAwOjUwMDAiLCIxMC4wLjAuMTo1MDAwIl0sInJlZ2lzdHJ5LW1pcnJvcnMiOlsiaHR0cHM6Ly9yZWdpc3RyeS5kb2NrZXItY24uY29tIl19Cgpib290Y21kOgotIGVjaG8gaGVsbG8KLSBlY2hvIHdvcmxkCgpyaF9zdWJzY3JpcHRpb246CiAgICBwYXNzd29yZDogcGFzc3dvcmQKICAgIHVzZXJuYW1lOiB1c2VybmFtZQ== immutable: true kind: Secret metadata: creationTimestamp: null - name: ubuntu-20.04-aws-osc-provisioning + name: ubuntu-aws-kube-system-osc-provisioning namespace: cloud-init-settings resourceVersion: "1" +type: Opaque diff --git a/pkg/providerconfig/config/config.go b/pkg/providerconfig/config/config.go index 3f59e789..c7fb5406 100644 --- a/pkg/providerconfig/config/config.go +++ b/pkg/providerconfig/config/config.go @@ -26,14 +26,14 @@ import ( var ( // This is shared globally since the enclosing values won't change during the controller lifecycle - ConfigVarResolverInstance providerconfig.ConfigVarResolver + instance providerconfig.ConfigVarResolver ) // SetConfigVarResolver will instantiate the global ConfigVarResolver Instance func SetConfigVarResolver(ctx context.Context, client ctrlruntimeclient.Client, namespace string) { - ConfigVarResolverInstance = *providerconfig.NewConfigVarResolver(ctx, client) + instance = *providerconfig.NewConfigVarResolver(ctx, client) } func GetConfigVarResolver() *providerconfig.ConfigVarResolver { - return &ConfigVarResolverInstance + return &instance }