From 091e129dd0b5610dddf0d4ef959e6499391239da Mon Sep 17 00:00:00 2001 From: David Eads Date: Tue, 26 Nov 2024 11:47:16 -0500 Subject: [PATCH 1/4] update library-go and MOM --- go.mod | 8 +- go.sum | 16 +- .../api/config/v1/types_infrastructure.go | 26 +- .../openshift/api/config/v1/types_node.go | 19 ++ .../api/config/v1/zz_generated.deepcopy.go | 5 + ..._generated.featuregated-crd-manifests.yaml | 4 +- .../v1/zz_generated.swagger_doc_generated.go | 16 +- .../v1alpha1/types_cluster_image_policy.go | 1 + .../api/config/v1alpha1/types_image_policy.go | 1 + .../zz_generated.swagger_doc_generated.go | 4 +- .../openshift/api/envtest-releases.yaml | 13 + vendor/github.com/openshift/api/features.md | 5 +- .../openshift/api/features/features.go | 111 +++++++- .../github.com/openshift/api/features/util.go | 28 ++ .../api/kubecontrolplane/v1/types.go | 19 ++ .../v1/zz_generated.swagger_doc_generated.go | 1 + .../openshift/api/operator/v1/types.go | 42 ++- .../api/operator/v1/types_ingress.go | 22 +- ...000_10_config-operator_01_configs.crd.yaml | 13 + ..._12_etcd_01_etcds-CustomNoUpgrade.crd.yaml | 13 + .../0000_12_etcd_01_etcds-Default.crd.yaml | 13 + ...etcd_01_etcds-DevPreviewNoUpgrade.crd.yaml | 13 + ...tcd_01_etcds-TechPreviewNoUpgrade.crd.yaml | 13 + ..._kube-apiserver_01_kubeapiservers.crd.yaml | 13 + ...manager_01_kubecontrollermanagers.crd.yaml | 13 + ..._kube-scheduler_01_kubeschedulers.crd.yaml | 13 + ...-apiserver_01_openshiftapiservers.crd.yaml | 13 + ...ud-credential_00_cloudcredentials.crd.yaml | 13 + ...or_00_kubestorageversionmigrators.crd.yaml | 13 + ...authentication_01_authentications.crd.yaml | 13 + .../0000_50_console_01_consoles.crd.yaml | 13 + ..._50_ingress_00_ingresscontrollers.crd.yaml | 47 +++- ..._50_insights_00_insightsoperators.crd.yaml | 13 + ...er_02_openshiftcontrollermanagers.crd.yaml | 13 + .../0000_50_service-ca_02_servicecas.crd.yaml | 13 + .../0000_50_storage_01_storages.crd.yaml | 13 + .../0000_70_dns_00_dnses.crd.yaml | 13 + ...twork_01_networks-CustomNoUpgrade.crd.yaml | 13 + ...00_70_network_01_networks-Default.crd.yaml | 13 + ...k_01_networks-DevPreviewNoUpgrade.crd.yaml | 13 + ..._01_networks-TechPreviewNoUpgrade.crd.yaml | 13 + ...troller_01_csisnapshotcontrollers.crd.yaml | 13 + ...0_csi-driver_01_clustercsidrivers.crd.yaml | 13 + .../v1/zz_generated.swagger_doc_generated.go | 9 +- .../make/operator.example.mk.help.log | 1 + .../make/targets/openshift/operator/mom.mk | 4 + .../scripts/test-operator-integration.sh | 9 + .../pkg/manifestclient/discovery_reader.go | 150 +++++++++++ .../group_resource_discovery.go | 250 ------------------ .../library-go/pkg/manifestclient/list.go | 7 +- .../pkg/manifestclient/read_roundtripper.go | 101 +------ .../manifestclient/readwrite_roundtripper.go | 9 +- .../pkg/manifestclient/write_roundtripper.go | 13 +- .../apiservice/apiservice_controller.go | 2 +- .../auditpolicy/auditpolicy_controller.go | 5 +- .../controllerset/apiservercontrollerset.go | 3 - .../libraryapplyconfiguration/command.go | 2 +- .../directory_apply_configuration.go | 40 ++- .../libraryapplyconfiguration/equivalence.go | 19 ++ .../operator_launch_helpers.go | 44 ++- .../libraryapplyconfiguration/options.go | 17 +- .../libraryapplyconfiguration/types.go | 54 ++++ .../libraryinputresources/easy_creation.go | 4 +- .../library/libraryinputresources/resource.go | 77 +++--- .../libraryoutputresources/easy_creation.go | 16 +- vendor/modules.txt | 8 +- 66 files changed, 1063 insertions(+), 481 deletions(-) create mode 100644 vendor/github.com/openshift/library-go/pkg/manifestclient/discovery_reader.go delete mode 100644 vendor/github.com/openshift/library-go/pkg/manifestclient/group_resource_discovery.go create mode 100644 vendor/github.com/openshift/multi-operator-manager/pkg/library/libraryapplyconfiguration/types.go diff --git a/go.mod b/go.mod index c2e694c3a..219ad88fc 100644 --- a/go.mod +++ b/go.mod @@ -6,11 +6,11 @@ require ( github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc github.com/ghodss/yaml v1.0.0 github.com/google/go-cmp v0.6.0 - github.com/openshift/api v0.0.0-20241001152557-e415140e5d5f - github.com/openshift/build-machinery-go v0.0.0-20241031155326-6ae126a9cb72 + github.com/openshift/api v0.0.0-20241101202457-04eb3fd119d2 + github.com/openshift/build-machinery-go v0.0.0-20241126220845-0de670012c09 github.com/openshift/client-go v0.0.0-20241001162912-da6d55e4611f - github.com/openshift/library-go v0.0.0-20241120135057-fc703a7407c9 - github.com/openshift/multi-operator-manager v0.0.0-20241119235446-3c965870ef94 + github.com/openshift/library-go v0.0.0-20241127135410-64d8d9e80808 + github.com/openshift/multi-operator-manager v0.0.0-20241205181422-20aa3906b99d github.com/spf13/cobra v1.8.1 github.com/stretchr/testify v1.9.0 go.etcd.io/etcd/client/v3 v3.5.14 diff --git a/go.sum b/go.sum index 344bf46c1..a1c3c1e98 100644 --- a/go.sum +++ b/go.sum @@ -148,16 +148,16 @@ github.com/onsi/ginkgo/v2 v2.19.0 h1:9Cnnf7UHo57Hy3k6/m5k3dRfGTMXGvxhHFvkDTCTpvA github.com/onsi/ginkgo/v2 v2.19.0/go.mod h1:rlwLi9PilAFJ8jCg9UE1QP6VBpd6/xj3SRC0d6TU0To= github.com/onsi/gomega v1.33.1 h1:dsYjIxxSR755MDmKVsaFQTE22ChNBcuuTWgkUDSubOk= github.com/onsi/gomega v1.33.1/go.mod h1:U4R44UsT+9eLIaYRB2a5qajjtQYn0hauxvRm16AVYg0= -github.com/openshift/api v0.0.0-20241001152557-e415140e5d5f h1:ya1OmyZm3LIIxI3U9VE9Nyx3ehCHgBwxyFUPflYPWls= -github.com/openshift/api v0.0.0-20241001152557-e415140e5d5f/go.mod h1:Shkl4HanLwDiiBzakv+con/aMGnVE2MAGvoKp5oyYUo= -github.com/openshift/build-machinery-go v0.0.0-20241031155326-6ae126a9cb72 h1:kMM+Ea3YFrcoYS76RhhBA7uELy97JM0gwqnyoy7fxco= -github.com/openshift/build-machinery-go v0.0.0-20241031155326-6ae126a9cb72/go.mod h1:8jcm8UPtg2mCAsxfqKil1xrmRMI3a+XU2TZ9fF8A7TE= +github.com/openshift/api v0.0.0-20241101202457-04eb3fd119d2 h1:CguNy+2KzhJ3a3i7e4Bgm/ByfQpSSSPYmF9NLZskoUs= +github.com/openshift/api v0.0.0-20241101202457-04eb3fd119d2/go.mod h1:Shkl4HanLwDiiBzakv+con/aMGnVE2MAGvoKp5oyYUo= +github.com/openshift/build-machinery-go v0.0.0-20241126220845-0de670012c09 h1:NibXytu9e89emCQoRiKZR+warzC1bpQgYDyb9jpEI/s= +github.com/openshift/build-machinery-go v0.0.0-20241126220845-0de670012c09/go.mod h1:8jcm8UPtg2mCAsxfqKil1xrmRMI3a+XU2TZ9fF8A7TE= github.com/openshift/client-go v0.0.0-20241001162912-da6d55e4611f h1:FRc0bVNWprihWS0GqQWzb3dY4dkCwpOP3mDw5NwSoR4= github.com/openshift/client-go v0.0.0-20241001162912-da6d55e4611f/go.mod h1:KiZi2mJRH1TOJ3FtBDYS6YvUL30s/iIXaGSUrSa36mo= -github.com/openshift/library-go v0.0.0-20241120135057-fc703a7407c9 h1:bwIqO3LDkumwfDKTMRzixNHKUqU7yaKTTAKwENi6JOY= -github.com/openshift/library-go v0.0.0-20241120135057-fc703a7407c9/go.mod h1:9B1MYPoLtP9tqjWxcbUNVpwxy68zOH/3EIP6c31dAM0= -github.com/openshift/multi-operator-manager v0.0.0-20241119235446-3c965870ef94 h1:9Z5HQo1KSQogIpQ2tDzrCk4+sDjL/xF+YXBrDP4R36k= -github.com/openshift/multi-operator-manager v0.0.0-20241119235446-3c965870ef94/go.mod h1:Fn/rmcwj4bCuS11UT5TZvzONt7qTjzcd9BCSQkIwQOI= +github.com/openshift/library-go v0.0.0-20241127135410-64d8d9e80808 h1:IUVlNRH6tuA0djyJsfGVTACsjE16hncfU1c/YKOobGw= +github.com/openshift/library-go v0.0.0-20241127135410-64d8d9e80808/go.mod h1:l/3SegTa9x+ry2J213bh7+DBofXOOvdrqU4JC9ktJa0= +github.com/openshift/multi-operator-manager v0.0.0-20241205181422-20aa3906b99d h1:Rzx23P63JFNNz5D23ubhC0FCN5rK8CeJhKcq5QKcdyU= +github.com/openshift/multi-operator-manager v0.0.0-20241205181422-20aa3906b99d/go.mod h1:iVi9Bopa5cLhjG5ie9DoZVVqkH8BGb1FQVTtecOLn4I= github.com/orisano/pixelmatch v0.0.0-20220722002657-fb0b55479cde/go.mod h1:nZgzbfBr3hhjoZnS66nKrHmduYNpc34ny7RK4z5/HM0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= diff --git a/vendor/github.com/openshift/api/config/v1/types_infrastructure.go b/vendor/github.com/openshift/api/config/v1/types_infrastructure.go index 392d128c1..0daa62d30 100644 --- a/vendor/github.com/openshift/api/config/v1/types_infrastructure.go +++ b/vendor/github.com/openshift/api/config/v1/types_infrastructure.go @@ -507,6 +507,20 @@ type AWSPlatformStatus struct { // +listType=atomic // +optional ResourceTags []AWSResourceTag `json:"resourceTags,omitempty"` + + // cloudLoadBalancerConfig holds configuration related to DNS and cloud + // load balancers. It allows configuration of in-cluster DNS as an alternative + // to the platform default DNS implementation. + // When using the ClusterHosted DNS type, Load Balancer IP addresses + // must be provided for the API and internal API load balancers as well as the + // ingress load balancer. + // + // +default={"dnsType": "PlatformDefault"} + // +kubebuilder:default={"dnsType": "PlatformDefault"} + // +openshift:enable:FeatureGate=AWSClusterHostedDNS + // +optional + // +nullable + CloudLoadBalancerConfig *CloudLoadBalancerConfig `json:"cloudLoadBalancerConfig,omitempty"` } // AWSResourceTag is a tag to apply to AWS resources created for the cluster. @@ -647,12 +661,12 @@ type GCPPlatformStatus struct { // Tombstone the field as a reminder. // ClusterHostedDNS ClusterHostedDNS `json:"clusterHostedDNS,omitempty"` - // cloudLoadBalancerConfig is a union that contains the IP addresses of API, - // API-Int and Ingress Load Balancers created on the cloud platform. These - // values would not be populated on on-prem platforms. These Load Balancer - // IPs are used to configure the in-cluster DNS instances for API, API-Int - // and Ingress services. `dnsType` is expected to be set to `ClusterHosted` - // when these Load Balancer IP addresses are populated and used. + // cloudLoadBalancerConfig holds configuration related to DNS and cloud + // load balancers. It allows configuration of in-cluster DNS as an alternative + // to the platform default DNS implementation. + // When using the ClusterHosted DNS type, Load Balancer IP addresses + // must be provided for the API and internal API load balancers as well as the + // ingress load balancer. // // +default={"dnsType": "PlatformDefault"} // +kubebuilder:default={"dnsType": "PlatformDefault"} diff --git a/vendor/github.com/openshift/api/config/v1/types_node.go b/vendor/github.com/openshift/api/config/v1/types_node.go index b3b1b62c4..a50328c91 100644 --- a/vendor/github.com/openshift/api/config/v1/types_node.go +++ b/vendor/github.com/openshift/api/config/v1/types_node.go @@ -46,6 +46,25 @@ type NodeSpec struct { // the status and corresponding reaction of the cluster // +optional WorkerLatencyProfile WorkerLatencyProfileType `json:"workerLatencyProfile,omitempty"` + + // minimumKubeletVersion is the lowest version of a kubelet that can join the cluster. + // Specifically, the apiserver will deny most authorization requests of kubelets that are older + // than the specified version, only allowing the kubelet to get and update its node object, and perform + // subjectaccessreviews. + // This means any kubelet that attempts to join the cluster will not be able to run any assigned workloads, + // and will eventually be marked as not ready. + // Its max length is 8, so maximum version allowed is either "9.999.99" or "99.99.99". + // Since the kubelet reports the version of the kubernetes release, not Openshift, this field references + // the underlying kubernetes version this version of Openshift is based off of. + // In other words: if an admin wishes to ensure no nodes run an older version than Openshift 4.17, then + // they should set the minimumKubeletVersion to 1.30.0. + // When comparing versions, the kubelet's version is stripped of any contents outside of major.minor.patch version. + // Thus, a kubelet with version "1.0.0-ec.0" will be compatible with minimumKubeletVersion "1.0.0" or earlier. + // +kubebuilder:validation:XValidation:rule="self == \"\" || self.matches('^[0-9]*.[0-9]*.[0-9]*$')",message="minmumKubeletVersion must be in a semver compatible format of x.y.z, or empty" + // +kubebuilder:validation:MaxLength:=8 + // +openshift:enable:FeatureGate=MinimumKubeletVersion + // +optional + MinimumKubeletVersion string `json:"minimumKubeletVersion"` } type NodeStatus struct { diff --git a/vendor/github.com/openshift/api/config/v1/zz_generated.deepcopy.go b/vendor/github.com/openshift/api/config/v1/zz_generated.deepcopy.go index 069346998..1b7fa44aa 100644 --- a/vendor/github.com/openshift/api/config/v1/zz_generated.deepcopy.go +++ b/vendor/github.com/openshift/api/config/v1/zz_generated.deepcopy.go @@ -245,6 +245,11 @@ func (in *AWSPlatformStatus) DeepCopyInto(out *AWSPlatformStatus) { *out = make([]AWSResourceTag, len(*in)) copy(*out, *in) } + if in.CloudLoadBalancerConfig != nil { + in, out := &in.CloudLoadBalancerConfig, &out.CloudLoadBalancerConfig + *out = new(CloudLoadBalancerConfig) + (*in).DeepCopyInto(*out) + } return } diff --git a/vendor/github.com/openshift/api/config/v1/zz_generated.featuregated-crd-manifests.yaml b/vendor/github.com/openshift/api/config/v1/zz_generated.featuregated-crd-manifests.yaml index fa5dd4e31..abfea5eaf 100644 --- a/vendor/github.com/openshift/api/config/v1/zz_generated.featuregated-crd-manifests.yaml +++ b/vendor/github.com/openshift/api/config/v1/zz_generated.featuregated-crd-manifests.yaml @@ -310,6 +310,7 @@ infrastructures.config.openshift.io: Capability: "" Category: "" FeatureGates: + - AWSClusterHostedDNS - BareMetalLoadBalancer - GCPClusterHostedDNS - GCPLabelsTags @@ -382,7 +383,8 @@ nodes.config.openshift.io: CRDName: nodes.config.openshift.io Capability: "" Category: "" - FeatureGates: [] + FeatureGates: + - MinimumKubeletVersion FilenameOperatorName: config-operator FilenameOperatorOrdering: "01" FilenameRunLevel: "0000_10" diff --git a/vendor/github.com/openshift/api/config/v1/zz_generated.swagger_doc_generated.go b/vendor/github.com/openshift/api/config/v1/zz_generated.swagger_doc_generated.go index c580bd834..145a7e4c0 100644 --- a/vendor/github.com/openshift/api/config/v1/zz_generated.swagger_doc_generated.go +++ b/vendor/github.com/openshift/api/config/v1/zz_generated.swagger_doc_generated.go @@ -1184,10 +1184,11 @@ func (AWSPlatformSpec) SwaggerDoc() map[string]string { } var map_AWSPlatformStatus = map[string]string{ - "": "AWSPlatformStatus holds the current status of the Amazon Web Services infrastructure provider.", - "region": "region holds the default AWS region for new AWS resources created by the cluster.", - "serviceEndpoints": "ServiceEndpoints list contains custom endpoints which will override default service endpoint of AWS Services. There must be only one ServiceEndpoint for a service.", - "resourceTags": "resourceTags is a list of additional tags to apply to AWS resources created for the cluster. See https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html for information on tagging AWS resources. AWS supports a maximum of 50 tags per resource. OpenShift reserves 25 tags for its use, leaving 25 tags available for the user.", + "": "AWSPlatformStatus holds the current status of the Amazon Web Services infrastructure provider.", + "region": "region holds the default AWS region for new AWS resources created by the cluster.", + "serviceEndpoints": "ServiceEndpoints list contains custom endpoints which will override default service endpoint of AWS Services. There must be only one ServiceEndpoint for a service.", + "resourceTags": "resourceTags is a list of additional tags to apply to AWS resources created for the cluster. See https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html for information on tagging AWS resources. AWS supports a maximum of 50 tags per resource. OpenShift reserves 25 tags for its use, leaving 25 tags available for the user.", + "cloudLoadBalancerConfig": "cloudLoadBalancerConfig holds configuration related to DNS and cloud load balancers. It allows configuration of in-cluster DNS as an alternative to the platform default DNS implementation. When using the ClusterHosted DNS type, Load Balancer IP addresses must be provided for the API and internal API load balancers as well as the ingress load balancer.", } func (AWSPlatformStatus) SwaggerDoc() map[string]string { @@ -1389,7 +1390,7 @@ var map_GCPPlatformStatus = map[string]string{ "region": "region holds the region for new GCP resources created for the cluster.", "resourceLabels": "resourceLabels is a list of additional labels to apply to GCP resources created for the cluster. See https://cloud.google.com/compute/docs/labeling-resources for information on labeling GCP resources. GCP supports a maximum of 64 labels per resource. OpenShift reserves 32 labels for internal use, allowing 32 labels for user configuration.", "resourceTags": "resourceTags is a list of additional tags to apply to GCP resources created for the cluster. See https://cloud.google.com/resource-manager/docs/tags/tags-overview for information on tagging GCP resources. GCP supports a maximum of 50 tags per resource.", - "cloudLoadBalancerConfig": "cloudLoadBalancerConfig is a union that contains the IP addresses of API, API-Int and Ingress Load Balancers created on the cloud platform. These values would not be populated on on-prem platforms. These Load Balancer IPs are used to configure the in-cluster DNS instances for API, API-Int and Ingress services. `dnsType` is expected to be set to `ClusterHosted` when these Load Balancer IP addresses are populated and used.", + "cloudLoadBalancerConfig": "cloudLoadBalancerConfig holds configuration related to DNS and cloud load balancers. It allows configuration of in-cluster DNS as an alternative to the platform default DNS implementation. When using the ClusterHosted DNS type, Load Balancer IP addresses must be provided for the API and internal API load balancers as well as the ingress load balancer.", } func (GCPPlatformStatus) SwaggerDoc() map[string]string { @@ -2087,8 +2088,9 @@ func (NodeList) SwaggerDoc() map[string]string { } var map_NodeSpec = map[string]string{ - "cgroupMode": "CgroupMode determines the cgroups version on the node", - "workerLatencyProfile": "WorkerLatencyProfile determins the how fast the kubelet is updating the status and corresponding reaction of the cluster", + "cgroupMode": "CgroupMode determines the cgroups version on the node", + "workerLatencyProfile": "WorkerLatencyProfile determins the how fast the kubelet is updating the status and corresponding reaction of the cluster", + "minimumKubeletVersion": "minimumKubeletVersion is the lowest version of a kubelet that can join the cluster. Specifically, the apiserver will deny most authorization requests of kubelets that are older than the specified version, only allowing the kubelet to get and update its node object, and perform subjectaccessreviews. This means any kubelet that attempts to join the cluster will not be able to run any assigned workloads, and will eventually be marked as not ready. Its max length is 8, so maximum version allowed is either \"9.999.99\" or \"99.99.99\". Since the kubelet reports the version of the kubernetes release, not Openshift, this field references the underlying kubernetes version this version of Openshift is based off of. In other words: if an admin wishes to ensure no nodes run an older version than Openshift 4.17, then they should set the minimumKubeletVersion to 1.30.0. When comparing versions, the kubelet's version is stripped of any contents outside of major.minor.patch version. Thus, a kubelet with version \"1.0.0-ec.0\" will be compatible with minimumKubeletVersion \"1.0.0\" or earlier.", } func (NodeSpec) SwaggerDoc() map[string]string { diff --git a/vendor/github.com/openshift/api/config/v1alpha1/types_cluster_image_policy.go b/vendor/github.com/openshift/api/config/v1alpha1/types_cluster_image_policy.go index e3670f03e..14650fd48 100644 --- a/vendor/github.com/openshift/api/config/v1alpha1/types_cluster_image_policy.go +++ b/vendor/github.com/openshift/api/config/v1alpha1/types_cluster_image_policy.go @@ -41,6 +41,7 @@ type ClusterImagePolicySpec struct { // If multiple scopes match a given image, only the policy requirements for the most specific scope apply. The policy requirements for more general scopes are ignored. // In addition to setting a policy appropriate for your own deployed applications, make sure that a policy on the OpenShift image repositories // quay.io/openshift-release-dev/ocp-release, quay.io/openshift-release-dev/ocp-v4.0-art-dev (or on a more general scope) allows deployment of the OpenShift images required for cluster operation. + // If a scope is configured in both the ClusterImagePolicy and the ImagePolicy, or if the scope in ImagePolicy is nested under one of the scopes from the ClusterImagePolicy, only the policy from the ClusterImagePolicy will be applied. // For additional details about the format, please refer to the document explaining the docker transport field, // which can be found at: https://github.com/containers/image/blob/main/docs/containers-policy.json.5.md#docker // +kubebuilder:validation:Required diff --git a/vendor/github.com/openshift/api/config/v1alpha1/types_image_policy.go b/vendor/github.com/openshift/api/config/v1alpha1/types_image_policy.go index 7031110ff..a177ddb0d 100644 --- a/vendor/github.com/openshift/api/config/v1alpha1/types_image_policy.go +++ b/vendor/github.com/openshift/api/config/v1alpha1/types_image_policy.go @@ -40,6 +40,7 @@ type ImagePolicySpec struct { // If multiple scopes match a given image, only the policy requirements for the most specific scope apply. The policy requirements for more general scopes are ignored. // In addition to setting a policy appropriate for your own deployed applications, make sure that a policy on the OpenShift image repositories // quay.io/openshift-release-dev/ocp-release, quay.io/openshift-release-dev/ocp-v4.0-art-dev (or on a more general scope) allows deployment of the OpenShift images required for cluster operation. + // If a scope is configured in both the ClusterImagePolicy and the ImagePolicy, or if the scope in ImagePolicy is nested under one of the scopes from the ClusterImagePolicy, only the policy from the ClusterImagePolicy will be applied. // For additional details about the format, please refer to the document explaining the docker transport field, // which can be found at: https://github.com/containers/image/blob/main/docs/containers-policy.json.5.md#docker // +kubebuilder:validation:Required diff --git a/vendor/github.com/openshift/api/config/v1alpha1/zz_generated.swagger_doc_generated.go b/vendor/github.com/openshift/api/config/v1alpha1/zz_generated.swagger_doc_generated.go index 9da086efc..55468f38d 100644 --- a/vendor/github.com/openshift/api/config/v1alpha1/zz_generated.swagger_doc_generated.go +++ b/vendor/github.com/openshift/api/config/v1alpha1/zz_generated.swagger_doc_generated.go @@ -102,7 +102,7 @@ func (ClusterImagePolicyList) SwaggerDoc() map[string]string { var map_ClusterImagePolicySpec = map[string]string{ "": "CLusterImagePolicySpec is the specification of the ClusterImagePolicy custom resource.", - "scopes": "scopes defines the list of image identities assigned to a policy. Each item refers to a scope in a registry implementing the \"Docker Registry HTTP API V2\". Scopes matching individual images are named Docker references in the fully expanded form, either using a tag or digest. For example, docker.io/library/busybox:latest (not busybox:latest). More general scopes are prefixes of individual-image scopes, and specify a repository (by omitting the tag or digest), a repository namespace, or a registry host (by only specifying the host name and possibly a port number) or a wildcard expression starting with `*.`, for matching all subdomains (not including a port number). Wildcards are only supported for subdomain matching, and may not be used in the middle of the host, i.e. *.example.com is a valid case, but example*.*.com is not. If multiple scopes match a given image, only the policy requirements for the most specific scope apply. The policy requirements for more general scopes are ignored. In addition to setting a policy appropriate for your own deployed applications, make sure that a policy on the OpenShift image repositories quay.io/openshift-release-dev/ocp-release, quay.io/openshift-release-dev/ocp-v4.0-art-dev (or on a more general scope) allows deployment of the OpenShift images required for cluster operation. For additional details about the format, please refer to the document explaining the docker transport field, which can be found at: https://github.com/containers/image/blob/main/docs/containers-policy.json.5.md#docker", + "scopes": "scopes defines the list of image identities assigned to a policy. Each item refers to a scope in a registry implementing the \"Docker Registry HTTP API V2\". Scopes matching individual images are named Docker references in the fully expanded form, either using a tag or digest. For example, docker.io/library/busybox:latest (not busybox:latest). More general scopes are prefixes of individual-image scopes, and specify a repository (by omitting the tag or digest), a repository namespace, or a registry host (by only specifying the host name and possibly a port number) or a wildcard expression starting with `*.`, for matching all subdomains (not including a port number). Wildcards are only supported for subdomain matching, and may not be used in the middle of the host, i.e. *.example.com is a valid case, but example*.*.com is not. If multiple scopes match a given image, only the policy requirements for the most specific scope apply. The policy requirements for more general scopes are ignored. In addition to setting a policy appropriate for your own deployed applications, make sure that a policy on the OpenShift image repositories quay.io/openshift-release-dev/ocp-release, quay.io/openshift-release-dev/ocp-v4.0-art-dev (or on a more general scope) allows deployment of the OpenShift images required for cluster operation. If a scope is configured in both the ClusterImagePolicy and the ImagePolicy, or if the scope in ImagePolicy is nested under one of the scopes from the ClusterImagePolicy, only the policy from the ClusterImagePolicy will be applied. For additional details about the format, please refer to the document explaining the docker transport field, which can be found at: https://github.com/containers/image/blob/main/docs/containers-policy.json.5.md#docker", "policy": "policy contains configuration to allow scopes to be verified, and defines how images not matching the verification policy will be treated.", } @@ -151,7 +151,7 @@ func (ImagePolicyList) SwaggerDoc() map[string]string { var map_ImagePolicySpec = map[string]string{ "": "ImagePolicySpec is the specification of the ImagePolicy CRD.", - "scopes": "scopes defines the list of image identities assigned to a policy. Each item refers to a scope in a registry implementing the \"Docker Registry HTTP API V2\". Scopes matching individual images are named Docker references in the fully expanded form, either using a tag or digest. For example, docker.io/library/busybox:latest (not busybox:latest). More general scopes are prefixes of individual-image scopes, and specify a repository (by omitting the tag or digest), a repository namespace, or a registry host (by only specifying the host name and possibly a port number) or a wildcard expression starting with `*.`, for matching all subdomains (not including a port number). Wildcards are only supported for subdomain matching, and may not be used in the middle of the host, i.e. *.example.com is a valid case, but example*.*.com is not. If multiple scopes match a given image, only the policy requirements for the most specific scope apply. The policy requirements for more general scopes are ignored. In addition to setting a policy appropriate for your own deployed applications, make sure that a policy on the OpenShift image repositories quay.io/openshift-release-dev/ocp-release, quay.io/openshift-release-dev/ocp-v4.0-art-dev (or on a more general scope) allows deployment of the OpenShift images required for cluster operation. For additional details about the format, please refer to the document explaining the docker transport field, which can be found at: https://github.com/containers/image/blob/main/docs/containers-policy.json.5.md#docker", + "scopes": "scopes defines the list of image identities assigned to a policy. Each item refers to a scope in a registry implementing the \"Docker Registry HTTP API V2\". Scopes matching individual images are named Docker references in the fully expanded form, either using a tag or digest. For example, docker.io/library/busybox:latest (not busybox:latest). More general scopes are prefixes of individual-image scopes, and specify a repository (by omitting the tag or digest), a repository namespace, or a registry host (by only specifying the host name and possibly a port number) or a wildcard expression starting with `*.`, for matching all subdomains (not including a port number). Wildcards are only supported for subdomain matching, and may not be used in the middle of the host, i.e. *.example.com is a valid case, but example*.*.com is not. If multiple scopes match a given image, only the policy requirements for the most specific scope apply. The policy requirements for more general scopes are ignored. In addition to setting a policy appropriate for your own deployed applications, make sure that a policy on the OpenShift image repositories quay.io/openshift-release-dev/ocp-release, quay.io/openshift-release-dev/ocp-v4.0-art-dev (or on a more general scope) allows deployment of the OpenShift images required for cluster operation. If a scope is configured in both the ClusterImagePolicy and the ImagePolicy, or if the scope in ImagePolicy is nested under one of the scopes from the ClusterImagePolicy, only the policy from the ClusterImagePolicy will be applied. For additional details about the format, please refer to the document explaining the docker transport field, which can be found at: https://github.com/containers/image/blob/main/docs/containers-policy.json.5.md#docker", "policy": "policy contains configuration to allow scopes to be verified, and defines how images not matching the verification policy will be treated.", } diff --git a/vendor/github.com/openshift/api/envtest-releases.yaml b/vendor/github.com/openshift/api/envtest-releases.yaml index fa789b18c..5651bbcc9 100644 --- a/vendor/github.com/openshift/api/envtest-releases.yaml +++ b/vendor/github.com/openshift/api/envtest-releases.yaml @@ -12,3 +12,16 @@ releases: envtest-v1.30.3-linux-arm64.tar.gz: hash: deb395d5e9578a58786c42b4e7d878b4aef984ac2dce510031fbecf12092162a4aee1cde774f1527cfae90f6885382dc7b3d79ec379b7f4160c3a35fad7cbc3b selfLink: https://storage.googleapis.com/openshift-kubebuilder-tools/envtest-v1.30.3-linux-arm64.tar.gz + v1.31.1: + envtest-v1.31.1-darwin-amd64.tar.gz: + hash: c884c6a9751f12f57ede0dc3d8dfffdb0f60f7111d6d01ca0693b66d663dfbd37c21ab6a9e571d1a6f649ed7db54b04b069ab0aff6366b2db2f5d3d8ba84a296 + selfLink: https://storage.googleapis.com/openshift-kubebuilder-tools/envtest-v1.31.1-darwin-amd64.tar.gz + envtest-v1.31.1-darwin-arm64.tar.gz: + hash: c760be21c579a516cad8fbafd0f202229f5e074da1869958b84ae8dca295ffb33eb6fd4fd0b66349c31c4adff1561e7dd188137885e3661e34c0a14e12ada20e + selfLink: https://storage.googleapis.com/openshift-kubebuilder-tools/envtest-v1.31.1-darwin-arm64.tar.gz + envtest-v1.31.1-linux-amd64.tar.gz: + hash: a683fad736249b681d50c40715068ecb64f3ef22a85f29387eb61435c36dfe0cebf0bc7e109e237071cd856bc0e37d79a732309fd8d0b16fba6e019cf5c6e8b6 + selfLink: https://storage.googleapis.com/openshift-kubebuilder-tools/envtest-v1.31.1-linux-amd64.tar.gz + envtest-v1.31.1-linux-arm64.tar.gz: + hash: 86fa42c6a3d92e438e35d6066587d0e4f36b910885e10520868959ece2fe740d99abc735f69d6ebe8920291f70d3819b169ad5ddd2db805f8f56a3b83eee3893 + selfLink: https://storage.googleapis.com/openshift-kubebuilder-tools/envtest-v1.31.1-linux-arm64.tar.gz diff --git a/vendor/github.com/openshift/api/features.md b/vendor/github.com/openshift/api/features.md index e668fc88b..660d3bff1 100644 --- a/vendor/github.com/openshift/api/features.md +++ b/vendor/github.com/openshift/api/features.md @@ -7,6 +7,7 @@ | MachineAPIOperatorDisableMachineHealthCheckController| | | | | | | | MultiArchInstallAzure| | | | | | | | GatewayAPI| | | Enabled | Enabled | | | +| AWSClusterHostedDNS| | | Enabled | Enabled | Enabled | Enabled | | AdditionalRoutingCapabilities| | | Enabled | Enabled | Enabled | Enabled | | AutomatedEtcdBackup| | | Enabled | Enabled | Enabled | Enabled | | BootcNodeManagement| | | Enabled | Enabled | Enabled | Enabled | @@ -18,6 +19,7 @@ | Example| | | Enabled | Enabled | Enabled | Enabled | | GCPClusterHostedDNS| | | Enabled | Enabled | Enabled | Enabled | | ImageStreamImportMode| | | Enabled | Enabled | Enabled | Enabled | +| IngressControllerDynamicConfigurationManager| | | Enabled | Enabled | Enabled | Enabled | | InsightsConfig| | | Enabled | Enabled | Enabled | Enabled | | InsightsConfigAPI| | | Enabled | Enabled | Enabled | Enabled | | InsightsOnDemandDataGather| | | Enabled | Enabled | Enabled | Enabled | @@ -27,6 +29,7 @@ | ManagedBootImagesAWS| | | Enabled | Enabled | Enabled | Enabled | | MaxUnavailableStatefulSet| | | Enabled | Enabled | Enabled | Enabled | | MetricsCollectionProfiles| | | Enabled | Enabled | Enabled | Enabled | +| MinimumKubeletVersion| | | Enabled | Enabled | Enabled | Enabled | | MixedCPUsAllocation| | | Enabled | Enabled | Enabled | Enabled | | NetworkSegmentation| | | Enabled | Enabled | Enabled | Enabled | | NewOLM| | | Enabled | Enabled | Enabled | Enabled | @@ -48,6 +51,7 @@ | UserNamespacesSupport| | | Enabled | Enabled | Enabled | Enabled | | VSphereMultiNetworks| | | Enabled | Enabled | Enabled | Enabled | | VSphereMultiVCenters| | | Enabled | Enabled | Enabled | Enabled | +| VolumeAttributesClass| | | Enabled | Enabled | Enabled | Enabled | | VolumeGroupSnapshot| | | Enabled | Enabled | Enabled | Enabled | | ExternalOIDC| Enabled | | Enabled | Enabled | Enabled | Enabled | | AWSEFSDriverVolumeMetrics| Enabled | Enabled | Enabled | Enabled | Enabled | Enabled | @@ -64,7 +68,6 @@ | IngressControllerLBSubnetsAWS| Enabled | Enabled | Enabled | Enabled | Enabled | Enabled | | KMSv1| Enabled | Enabled | Enabled | Enabled | Enabled | Enabled | | ManagedBootImages| Enabled | Enabled | Enabled | Enabled | Enabled | Enabled | -| MetricsServer| Enabled | Enabled | Enabled | Enabled | Enabled | Enabled | | MultiArchInstallAWS| Enabled | Enabled | Enabled | Enabled | Enabled | Enabled | | MultiArchInstallGCP| Enabled | Enabled | Enabled | Enabled | Enabled | Enabled | | NetworkDiagnosticsConfig| Enabled | Enabled | Enabled | Enabled | Enabled | Enabled | diff --git a/vendor/github.com/openshift/api/features/features.go b/vendor/github.com/openshift/api/features/features.go index 7f4962395..0d1f0788e 100644 --- a/vendor/github.com/openshift/api/features/features.go +++ b/vendor/github.com/openshift/api/features/features.go @@ -40,6 +40,7 @@ var ( reportProblemsToJiraComponent("apiserver-auth"). contactPerson("stlaz"). productScope(kubernetes). + enhancementPR("https://github.com/kubernetes/enhancements/issues/4193"). enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -47,6 +48,7 @@ var ( reportProblemsToJiraComponent("kube-apiserver"). contactPerson("benluddy"). productScope(kubernetes). + enhancementPR("https://github.com/kubernetes/enhancements/issues/3488"). enableIn(configv1.Default, configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -54,6 +56,7 @@ var ( reportProblemsToJiraComponent("Routing"). contactPerson("miciah"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.DevPreviewNoUpgrade). mustRegister() @@ -61,6 +64,7 @@ var ( reportProblemsToJiraComponent("Networking / router"). contactPerson("miheer"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.Default, configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -68,6 +72,7 @@ var ( reportProblemsToJiraComponent("auth"). contactPerson("ibihim"). productScope(ocpSpecific). + enhancementPR("https://github.com/openshift/enhancements/pull/899"). enableIn(configv1.Default, configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -75,6 +80,7 @@ var ( reportProblemsToJiraComponent("builds"). contactPerson("adkaplan"). productScope(ocpSpecific). + enhancementPR("https://github.com/openshift/enhancements/pull/1056"). enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -82,6 +88,7 @@ var ( reportProblemsToJiraComponent("builds"). contactPerson("adkaplan"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.Default, configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -89,6 +96,7 @@ var ( reportProblemsToJiraComponent("node"). contactPerson("ehashman"). productScope(kubernetes). + enhancementPR("https://github.com/kubernetes/enhancements/issues/2400"). enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -96,6 +104,7 @@ var ( reportProblemsToJiraComponent("openstack"). contactPerson("egarcia"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -103,6 +112,7 @@ var ( reportProblemsToJiraComponent("insights"). contactPerson("tremes"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -110,6 +120,7 @@ var ( reportProblemsToJiraComponent("insights"). contactPerson("jmesnil"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -117,6 +128,7 @@ var ( reportProblemsToJiraComponent("scheduling"). contactPerson("jchaloup"). productScope(kubernetes). + enhancementPR("https://github.com/kubernetes/enhancements/issues/4381"). enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -124,6 +136,7 @@ var ( reportProblemsToJiraComponent("cloud-credential-operator"). contactPerson("abutcher"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.Default, configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -131,6 +144,7 @@ var ( reportProblemsToJiraComponent("apps"). contactPerson("atiratree"). productScope(kubernetes). + enhancementPR("https://github.com/kubernetes/enhancements/issues/961"). enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -138,12 +152,14 @@ var ( reportProblemsToJiraComponent("node"). contactPerson("sairameshv"). productScope(kubernetes). + enhancementPR("https://github.com/kubernetes/enhancements/issues/3386"). mustRegister() FeatureGatePrivateHostedZoneAWS = newFeatureGate("PrivateHostedZoneAWS"). reportProblemsToJiraComponent("Routing"). contactPerson("miciah"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.Default, configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -151,6 +167,7 @@ var ( reportProblemsToJiraComponent("node"). contactPerson("sgrunert"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -158,6 +175,7 @@ var ( reportProblemsToJiraComponent("Installer"). contactPerson("bhb"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.Default, configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -165,6 +183,7 @@ var ( reportProblemsToJiraComponent("cloud-provider"). contactPerson("jspeed"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.Default, configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -172,6 +191,7 @@ var ( reportProblemsToJiraComponent("machine-config-operator/platform-baremetal"). contactPerson("mkowalsk"). productScope(kubernetes). + enhancementPR("https://github.com/kubernetes/enhancements/issues/3705"). enableIn(configv1.Default, configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -179,6 +199,7 @@ var ( reportProblemsToJiraComponent("splat"). contactPerson("vr4manta"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -186,6 +207,7 @@ var ( reportProblemsToJiraComponent("splat"). contactPerson("rvanderp3"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.Default, configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -193,6 +215,7 @@ var ( reportProblemsToJiraComponent("router"). contactPerson("thejasn"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -200,6 +223,7 @@ var ( reportProblemsToJiraComponent("Networking/ovn-kubernetes"). contactPerson("tssurya"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.Default, configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -207,6 +231,7 @@ var ( reportProblemsToJiraComponent("Networking/ovn-kubernetes"). contactPerson("tssurya"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -214,6 +239,7 @@ var ( reportProblemsToJiraComponent("Networking/cluster-network-operator"). contactPerson("jcaamano"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -221,6 +247,7 @@ var ( reportProblemsToJiraComponent("Networking/ovn-kubernetes"). contactPerson("jcaamano"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -228,6 +255,7 @@ var ( reportProblemsToJiraComponent("Networking/ovn-kubernetes"). contactPerson("pliu"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.Default, configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -235,6 +263,7 @@ var ( reportProblemsToJiraComponent("Networking/cluster-network-operator"). contactPerson("kyrtapz"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.Default, configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -242,6 +271,7 @@ var ( reportProblemsToJiraComponent("Networking"). contactPerson("npinaeva"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -249,6 +279,7 @@ var ( reportProblemsToJiraComponent("etcd"). contactPerson("hasbro17"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.Default, configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -256,6 +287,7 @@ var ( reportProblemsToJiraComponent("etcd"). contactPerson("hasbro17"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -263,6 +295,7 @@ var ( reportProblemsToJiraComponent("etcd"). contactPerson("hasbro17"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -270,12 +303,14 @@ var ( reportProblemsToJiraComponent("ecoproject"). contactPerson("msluiter"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). mustRegister() FeatureGateDNSNameResolver = newFeatureGate("DNSNameResolver"). reportProblemsToJiraComponent("dns"). contactPerson("miciah"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -283,6 +318,7 @@ var ( reportProblemsToJiraComponent("splat"). contactPerson("rvanderp3"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.Default, configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -290,6 +326,7 @@ var ( reportProblemsToJiraComponent("MachineConfigOperator"). contactPerson("cdoern"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -297,19 +334,22 @@ var ( reportProblemsToJiraComponent("Installer"). contactPerson("vincepri"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). mustRegister() - FeatureGateMetricsServer = newFeatureGate("MetricsServer"). - reportProblemsToJiraComponent("Monitoring"). - contactPerson("slashpai"). + FeatureGateGCPClusterHostedDNS = newFeatureGate("GCPClusterHostedDNS"). + reportProblemsToJiraComponent("Installer"). + contactPerson("barbacbd"). productScope(ocpSpecific). - enableIn(configv1.Default, configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). + enhancementPR(legacyFeatureGateWithoutEnhancement). + enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() - FeatureGateGCPClusterHostedDNS = newFeatureGate("GCPClusterHostedDNS"). + FeatureGateAWSClusterHostedDNS = newFeatureGate("AWSClusterHostedDNS"). reportProblemsToJiraComponent("Installer"). contactPerson("barbacbd"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -317,6 +357,7 @@ var ( reportProblemsToJiraComponent("NodeTuningOperator"). contactPerson("titzhak"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -324,6 +365,7 @@ var ( reportProblemsToJiraComponent("MachineConfigOperator"). contactPerson("djoshy"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.Default, configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -331,6 +373,7 @@ var ( reportProblemsToJiraComponent("MachineConfigOperator"). contactPerson("djoshy"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -338,6 +381,7 @@ var ( reportProblemsToJiraComponent("cloud-provider"). contactPerson("jspeed"). productScope(kubernetes). + enhancementPR("https://github.com/kubernetes/enhancements/issues/2395"). enableIn(configv1.Default, configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -345,6 +389,7 @@ var ( reportProblemsToJiraComponent("MachineConfigOperator"). contactPerson("dkhater"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -352,6 +397,7 @@ var ( reportProblemsToJiraComponent("MachineConfigOperator"). contactPerson("inesqyx"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -359,6 +405,7 @@ var ( reportProblemsToJiraComponent("Cluster Version Operator"). contactPerson("lmohanty"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -366,6 +413,7 @@ var ( reportProblemsToJiraComponent("kube-apiserver"). contactPerson("dgrisonnet"). productScope(kubernetes). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.Default, configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -373,6 +421,7 @@ var ( reportProblemsToJiraComponent("MachineConfigOperator"). contactPerson("jhernand"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -380,6 +429,7 @@ var ( reportProblemsToJiraComponent("Cluster Version Operator"). contactPerson("pmuller"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -387,13 +437,23 @@ var ( reportProblemsToJiraComponent("kube-apiserver"). contactPerson("akashem"). productScope(kubernetes). + enhancementPR("https://github.com/kubernetes/enhancements/issues/4006"). enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() + FeatureGateVolumeAttributesClass = newFeatureGate("VolumeAttributesClass"). + reportProblemsToJiraComponent("Storage / Kubernetes External Components"). + contactPerson("dfajmon"). + productScope(kubernetes). + enhancementPR("https://github.com/kubernetes/enhancements/issues/3751"). + enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). + mustRegister() + FeatureGateVolumeGroupSnapshot = newFeatureGate("VolumeGroupSnapshot"). reportProblemsToJiraComponent("Storage / Kubernetes External Components"). contactPerson("fbertina"). productScope(kubernetes). + enhancementPR("https://github.com/kubernetes/enhancements/issues/3476"). enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -401,6 +461,7 @@ var ( reportProblemsToJiraComponent("authentication"). contactPerson("liouk"). productScope(ocpSpecific). + enhancementPR("https://github.com/openshift/enhancements/pull/1596"). enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). enableForClusterProfile(Hypershift, configv1.Default, configv1.TechPreviewNoUpgrade). mustRegister() @@ -409,6 +470,7 @@ var ( reportProblemsToJiraComponent("cluster-config"). contactPerson("deads"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -416,6 +478,7 @@ var ( reportProblemsToJiraComponent("olm"). contactPerson("joe"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -423,6 +486,7 @@ var ( reportProblemsToJiraComponent("olm"). contactPerson("joe"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -430,6 +494,7 @@ var ( reportProblemsToJiraComponent("insights"). contactPerson("tremes"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -437,6 +502,7 @@ var ( reportProblemsToJiraComponent("metal"). contactPerson("EmilienM"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.Default, configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -444,6 +510,7 @@ var ( reportProblemsToJiraComponent("insights"). contactPerson("tremes"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -451,6 +518,7 @@ var ( reportProblemsToJiraComponent("MachineConfigOperator"). contactPerson("jerzhang"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.Default, configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -458,6 +526,7 @@ var ( reportProblemsToJiraComponent("Monitoring"). contactPerson("rexagod"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -465,6 +534,7 @@ var ( reportProblemsToJiraComponent("Storage / Kubernetes External Components"). contactPerson("rbednar"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.Default, configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -472,12 +542,14 @@ var ( reportProblemsToJiraComponent("Installer"). contactPerson("cjschaef"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). mustRegister() FeatureGateChunkSizeMiB = newFeatureGate("ChunkSizeMiB"). reportProblemsToJiraComponent("Image Registry"). contactPerson("flavianmissi"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.Default, configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -485,12 +557,14 @@ var ( reportProblemsToJiraComponent("OCPCLOUD"). contactPerson("jspeed"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). mustRegister() FeatureGatePersistentIPsForVirtualization = newFeatureGate("PersistentIPsForVirtualization"). reportProblemsToJiraComponent("CNV Network"). contactPerson("mduarted"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -498,6 +572,7 @@ var ( reportProblemsToJiraComponent("Monitoring"). contactPerson("marioferh"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -505,6 +580,7 @@ var ( reportProblemsToJiraComponent("Installer"). contactPerson("r4f4"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.Default, configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -512,12 +588,14 @@ var ( reportProblemsToJiraComponent("Installer"). contactPerson("r4f4"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). mustRegister() FeatureGateMultiArchInstallGCP = newFeatureGate("MultiArchInstallGCP"). reportProblemsToJiraComponent("Installer"). contactPerson("r4f4"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.Default, configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -525,6 +603,7 @@ var ( reportProblemsToJiraComponent("Routing"). contactPerson("miciah"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.Default, configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -532,6 +611,7 @@ var ( reportProblemsToJiraComponent("Storage / Kubernetes External Components"). contactPerson("fbertina"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.Default, configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -539,6 +619,7 @@ var ( reportProblemsToJiraComponent("Multi-Arch"). contactPerson("psundara"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -546,6 +627,7 @@ var ( reportProblemsToJiraComponent("Node"). contactPerson("haircommander"). productScope(kubernetes). + enhancementPR("https://github.com/kubernetes/enhancements/issues/127"). enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -553,6 +635,7 @@ var ( reportProblemsToJiraComponent("Node"). contactPerson("haircommander"). productScope(kubernetes). + enhancementPR("https://github.com/kubernetes/enhancements/issues/127"). enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -560,6 +643,7 @@ var ( reportProblemsToJiraComponent("Node"). contactPerson("haircommander"). productScope(kubernetes). + enhancementPR("https://github.com/kubernetes/enhancements/issues/4265"). enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() @@ -567,6 +651,23 @@ var ( reportProblemsToJiraComponent("SPLAT"). contactPerson("rvanderp"). productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() + + FeatureGateIngressControllerDynamicConfigurationManager = newFeatureGate("IngressControllerDynamicConfigurationManager"). + reportProblemsToJiraComponent("Networking/router"). + contactPerson("miciah"). + productScope(ocpSpecific). + enhancementPR(legacyFeatureGateWithoutEnhancement). + enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). + mustRegister() + + FeatureGateMinimumKubeletVersion = newFeatureGate("MinimumKubeletVersion"). + reportProblemsToJiraComponent("Node"). + contactPerson("haircommander"). + productScope(ocpSpecific). + enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). + enhancementPR("https://github.com/openshift/enhancements/pull/1697"). + mustRegister() ) diff --git a/vendor/github.com/openshift/api/features/util.go b/vendor/github.com/openshift/api/features/util.go index d8d8e94a0..3fd55bcdf 100644 --- a/vendor/github.com/openshift/api/features/util.go +++ b/vendor/github.com/openshift/api/features/util.go @@ -3,6 +3,8 @@ package features import ( "fmt" configv1 "github.com/openshift/api/config/v1" + "net/url" + "strings" ) // FeatureGateDescription is a golang-only interface used to contains details for a feature gate. @@ -18,6 +20,8 @@ type FeatureGateDescription struct { ResponsiblePerson string // OwningProduct is the product that owns the lifecycle of the gate. OwningProduct OwningProduct + // EnhancementPR is the PR for the enhancement. + EnhancementPR string } type FeatureGateEnabledDisabled struct { @@ -45,10 +49,15 @@ type featureGateBuilder struct { owningJiraComponent string responsiblePerson string owningProduct OwningProduct + enhancementPRURL string statusByClusterProfileByFeatureSet map[ClusterProfileName]map[configv1.FeatureSet]bool } +const ( + legacyFeatureGateWithoutEnhancement = "FeatureGate predates 4.18" +) + // newFeatureGate featuregate are disabled in every FeatureSet and selectively enabled func newFeatureGate(name string) *featureGateBuilder { b := &featureGateBuilder{ @@ -80,6 +89,11 @@ func (b *featureGateBuilder) productScope(owningProduct OwningProduct) *featureG return b } +func (b *featureGateBuilder) enhancementPR(url string) *featureGateBuilder { + b.enhancementPRURL = url + return b +} + func (b *featureGateBuilder) enableIn(featureSets ...configv1.FeatureSet) *featureGateBuilder { for clusterProfile := range b.statusByClusterProfileByFeatureSet { for _, featureSet := range featureSets { @@ -109,6 +123,19 @@ func (b *featureGateBuilder) register() (configv1.FeatureGateName, error) { if len(b.owningProduct) == 0 { return "", fmt.Errorf("missing owningProduct") } + _, enhancementPRErr := url.Parse(b.enhancementPRURL) + switch { + case b.enhancementPRURL == legacyFeatureGateWithoutEnhancement: + + case len(b.enhancementPRURL) == 0: + return "", fmt.Errorf("FeatureGate/%s is missing an enhancementPR with GA Graduation Criteria like https://github.com/openshift/enhancements/pull/#### or https://github.com/kubernetes/enhancements/issues/####", b.name) + + case !strings.HasPrefix(b.enhancementPRURL, "https://github.com/openshift/enhancements/pull/") && !strings.HasPrefix(b.enhancementPRURL, "https://github.com/kubernetes/enhancements/issues/"): + return "", fmt.Errorf("FeatureGate/%s enhancementPR format is incorrect; must be like https://github.com/openshift/enhancements/pull/#### or https://github.com/kubernetes/enhancements/issues/####", b.name) + + case enhancementPRErr != nil: + return "", fmt.Errorf("FeatureGate/%s is enhancementPR is invalid: %w", b.name, enhancementPRErr) + } featureGateName := configv1.FeatureGateName(b.name) description := FeatureGateDescription{ @@ -118,6 +145,7 @@ func (b *featureGateBuilder) register() (configv1.FeatureGateName, error) { OwningJiraComponent: b.owningJiraComponent, ResponsiblePerson: b.responsiblePerson, OwningProduct: b.owningProduct, + EnhancementPR: b.enhancementPRURL, } // statusByClusterProfileByFeatureSet is initialized by constructor to be false for every combination diff --git a/vendor/github.com/openshift/api/kubecontrolplane/v1/types.go b/vendor/github.com/openshift/api/kubecontrolplane/v1/types.go index b9cdcc213..6d29f42e3 100644 --- a/vendor/github.com/openshift/api/kubecontrolplane/v1/types.go +++ b/vendor/github.com/openshift/api/kubecontrolplane/v1/types.go @@ -62,6 +62,25 @@ type KubeAPIServerConfig struct { // TODO this needs to be removed. APIServerArguments map[string]Arguments `json:"apiServerArguments"` + + // minimumKubeletVersion is the lowest version of a kubelet that can join the cluster. + // Specifically, the apiserver will deny most authorization requests of kubelets that are older + // than the specified version, only allowing the kubelet to get and update its node object, and perform + // subjectaccessreviews. + // This means any kubelet that attempts to join the cluster will not be able to run any assigned workloads, + // and will eventually be marked as not ready. + // Its max length is 8, so maximum version allowed is either "9.999.99" or "99.99.99". + // Since the kubelet reports the version of the kubernetes release, not Openshift, this field references + // the underlying kubernetes version this version of Openshift is based off of. + // In other words: if an admin wishes to ensure no nodes run an older version than Openshift 4.17, then + // they should set the minimumKubeletVersion to 1.30.0. + // When comparing versions, the kubelet's version is stripped of any contents outside of major.minor.patch version. + // Thus, a kubelet with version "1.0.0-ec.0" will be compatible with minimumKubeletVersion "1.0.0" or earlier. + // +kubebuilder:validation:XValidation:rule="self == \"\" || self.matches('^[0-9]*.[0-9]*.[0-9]*$')",message="minmumKubeletVersion must be in a semver compatible format of x.y.z, or empty" + // +kubebuilder:validation:MaxLength:=8 + // +openshift:enable:FeatureGate=MinimumKubeletVersion + // +optional + MinimumKubeletVersion string `json:"minimumKubeletVersion"` } // Arguments masks the value so protobuf can generate diff --git a/vendor/github.com/openshift/api/kubecontrolplane/v1/zz_generated.swagger_doc_generated.go b/vendor/github.com/openshift/api/kubecontrolplane/v1/zz_generated.swagger_doc_generated.go index 906bb271b..5ecdd0583 100644 --- a/vendor/github.com/openshift/api/kubecontrolplane/v1/zz_generated.swagger_doc_generated.go +++ b/vendor/github.com/openshift/api/kubecontrolplane/v1/zz_generated.swagger_doc_generated.go @@ -33,6 +33,7 @@ var map_KubeAPIServerConfig = map[string]string{ "projectConfig": "projectConfig feeds an admission plugin", "serviceAccountPublicKeyFiles": "serviceAccountPublicKeyFiles is a list of files, each containing a PEM-encoded public RSA key. (If any file contains a private key, the public portion of the key is used) The list of public keys is used to verify presented service account tokens. Each key is tried in order until the list is exhausted or verification succeeds. If no keys are specified, no service account authentication will be available.", "oauthConfig": "oauthConfig, if present start the /oauth endpoint in this process", + "minimumKubeletVersion": "minimumKubeletVersion is the lowest version of a kubelet that can join the cluster. Specifically, the apiserver will deny most authorization requests of kubelets that are older than the specified version, only allowing the kubelet to get and update its node object, and perform subjectaccessreviews. This means any kubelet that attempts to join the cluster will not be able to run any assigned workloads, and will eventually be marked as not ready. Its max length is 8, so maximum version allowed is either \"9.999.99\" or \"99.99.99\". Since the kubelet reports the version of the kubernetes release, not Openshift, this field references the underlying kubernetes version this version of Openshift is based off of. In other words: if an admin wishes to ensure no nodes run an older version than Openshift 4.17, then they should set the minimumKubeletVersion to 1.30.0. When comparing versions, the kubelet's version is stripped of any contents outside of major.minor.patch version. Thus, a kubelet with version \"1.0.0-ec.0\" will be compatible with minimumKubeletVersion \"1.0.0\" or earlier.", } func (KubeAPIServerConfig) SwaggerDoc() map[string]string { diff --git a/vendor/github.com/openshift/api/operator/v1/types.go b/vendor/github.com/openshift/api/operator/v1/types.go index eeb8afdc6..f04b6846a 100644 --- a/vendor/github.com/openshift/api/operator/v1/types.go +++ b/vendor/github.com/openshift/api/operator/v1/types.go @@ -147,17 +147,27 @@ type GenerationStatus struct { // group is the group of the thing you're tracking // +kubebuilder:validation:Required Group string `json:"group"` + // resource is the resource type of the thing you're tracking // +kubebuilder:validation:Required Resource string `json:"resource"` + // namespace is where the thing you're tracking is // +kubebuilder:validation:Required Namespace string `json:"namespace"` + // name is the name of the thing you're tracking // +kubebuilder:validation:Required Name string `json:"name"` + + // TODO: Add validation for lastGeneration. The value for this field should generally increase, except when the associated + // resource has been deleted and re-created. To accurately validate this field, we should introduce a new UID field and only + // enforce an increasing value in lastGeneration when the UID remains unchanged. A change in the UID indicates that the resource + // was re-created, allowing the lastGeneration value to reset or decrease. + // lastGeneration is the last generation of the workload controller involved LastGeneration int64 `json:"lastGeneration"` + // hash is an optional field set for resources without generation that are content sensitive like secrets and configmaps Hash string `json:"hash"` } @@ -178,12 +188,34 @@ var ( // OperatorCondition is just the standard condition fields. type OperatorCondition struct { + // type of condition in CamelCase or in foo.example.com/CamelCase. + // --- + // Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be + // useful (see .node.status.conditions), the ability to deconflict is important. + // The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) + // +required // +kubebuilder:validation:Required - Type string `json:"type"` - Status ConditionStatus `json:"status"` - LastTransitionTime metav1.Time `json:"lastTransitionTime,omitempty"` - Reason string `json:"reason,omitempty"` - Message string `json:"message,omitempty"` + // +kubebuilder:validation:Pattern=`^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$` + // +kubebuilder:validation:MaxLength=316 + Type string `json:"type" protobuf:"bytes,1,opt,name=type"` + + // status of the condition, one of True, False, Unknown. + // +required + // +kubebuilder:validation:Required + // +kubebuilder:validation:Enum=True;False;Unknown + Status ConditionStatus `json:"status"` + + // lastTransitionTime is the last time the condition transitioned from one status to another. + // This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + // +required + // +kubebuilder:validation:Required + // +kubebuilder:validation:Type=string + // +kubebuilder:validation:Format=date-time + LastTransitionTime metav1.Time `json:"lastTransitionTime,omitempty"` + + Reason string `json:"reason,omitempty"` + + Message string `json:"message,omitempty"` } type ConditionStatus string diff --git a/vendor/github.com/openshift/api/operator/v1/types_ingress.go b/vendor/github.com/openshift/api/operator/v1/types_ingress.go index 7ae22ee0a..1f5664345 100644 --- a/vendor/github.com/openshift/api/operator/v1/types_ingress.go +++ b/vendor/github.com/openshift/api/operator/v1/types_ingress.go @@ -392,6 +392,7 @@ type CIDR string // LoadBalancerStrategy holds parameters for a load balancer. // +openshift:validation:FeatureGateAwareXValidation:featureGate=SetEIPForNLBIngressController,rule="!has(self.scope) || self.scope != 'Internal' || !has(self.providerParameters) || !has(self.providerParameters.aws) || !has(self.providerParameters.aws.networkLoadBalancer) || !has(self.providerParameters.aws.networkLoadBalancer.eipAllocations)",message="eipAllocations are forbidden when the scope is Internal." +// +kubebuilder:validation:XValidation:rule=`!has(self.scope) || self.scope != 'Internal' || !has(self.providerParameters) || !has(self.providerParameters.openstack) || !has(self.providerParameters.openstack.floatingIP) || self.providerParameters.openstack.floatingIP == ""`,message="cannot specify a floating ip when scope is internal" type LoadBalancerStrategy struct { // scope indicates the scope at which the load balancer is exposed. // Possible values are "External" and "Internal". @@ -678,19 +679,28 @@ type IBMLoadBalancerParameters struct { // OpenStackLoadBalancerParameters provides configuration settings that are // specific to OpenStack load balancers. type OpenStackLoadBalancerParameters struct { - // loadBalancerIP specifies the floating IP address that the load balancer will use. + // loadBalancerIP is tombstoned since the field was replaced by floatingIP. + // LoadBalancerIP string `json:"loadBalancerIP,omitempty"` + + // floatingIP specifies the IP address that the load balancer will use. // When not specified, an IP address will be assigned randomly by the OpenStack cloud provider. + // When specified, the floating IP has to be pre-created. If the + // specified value is not a floating IP or is already claimed, the + // OpenStack cloud provider won't be able to provision the load + // balancer. + // This field may only be used if the IngressController has External scope. // This value must be a valid IPv4 or IPv6 address. // + --- - // + Note: this field is meant to be set by the ingress controller to populate the - // + `Service.Spec.LoadBalancerIP` field which has been deprecated in Kubernetes: + // + Note: this field is meant to be set by the ingress controller + // + to populate the `Service.Spec.LoadBalancerIP` field which has been + // + deprecated in Kubernetes: // + https://github.com/kubernetes/kubernetes/pull/107235 // + However, the field is still used by cloud-provider-openstack to reconcile - // + the floating IP that we attach to the load balancer. + // + the floating IP that we attach to the external load balancer. // - // +kubebuilder:validation:XValidation:rule="isIP(self)",message="loadBalancerIP must be a valid IPv4 or IPv6 address" + // +kubebuilder:validation:XValidation:rule="isIP(self)",message="floatingIP must be a valid IPv4 or IPv6 address" // +optional - LoadBalancerIP string `json:"loadBalancerIP,omitempty"` + FloatingIP string `json:"floatingIP,omitempty"` } // AWSClassicLoadBalancerParameters holds configuration parameters for an diff --git a/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_10_config-operator_01_configs.crd.yaml b/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_10_config-operator_01_configs.crd.yaml index c2d91226a..323ba4687 100644 --- a/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_10_config-operator_01_configs.crd.yaml +++ b/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_10_config-operator_01_configs.crd.yaml @@ -110,6 +110,9 @@ spec: description: OperatorCondition is just the standard condition fields. properties: lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. format: date-time type: string message: @@ -117,10 +120,20 @@ spec: reason: type: string status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown type: string type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ type: string required: + - lastTransitionTime + - status - type type: object type: array diff --git a/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_12_etcd_01_etcds-CustomNoUpgrade.crd.yaml b/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_12_etcd_01_etcds-CustomNoUpgrade.crd.yaml index afe82c37b..b68cce4db 100644 --- a/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_12_etcd_01_etcds-CustomNoUpgrade.crd.yaml +++ b/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_12_etcd_01_etcds-CustomNoUpgrade.crd.yaml @@ -151,6 +151,9 @@ spec: description: OperatorCondition is just the standard condition fields. properties: lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. format: date-time type: string message: @@ -158,10 +161,20 @@ spec: reason: type: string status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown type: string type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ type: string required: + - lastTransitionTime + - status - type type: object type: array diff --git a/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_12_etcd_01_etcds-Default.crd.yaml b/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_12_etcd_01_etcds-Default.crd.yaml index f5df3557f..ebe2486ef 100644 --- a/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_12_etcd_01_etcds-Default.crd.yaml +++ b/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_12_etcd_01_etcds-Default.crd.yaml @@ -138,6 +138,9 @@ spec: description: OperatorCondition is just the standard condition fields. properties: lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. format: date-time type: string message: @@ -145,10 +148,20 @@ spec: reason: type: string status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown type: string type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ type: string required: + - lastTransitionTime + - status - type type: object type: array diff --git a/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_12_etcd_01_etcds-DevPreviewNoUpgrade.crd.yaml b/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_12_etcd_01_etcds-DevPreviewNoUpgrade.crd.yaml index 3c01a3ce6..bc49df765 100644 --- a/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_12_etcd_01_etcds-DevPreviewNoUpgrade.crd.yaml +++ b/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_12_etcd_01_etcds-DevPreviewNoUpgrade.crd.yaml @@ -151,6 +151,9 @@ spec: description: OperatorCondition is just the standard condition fields. properties: lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. format: date-time type: string message: @@ -158,10 +161,20 @@ spec: reason: type: string status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown type: string type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ type: string required: + - lastTransitionTime + - status - type type: object type: array diff --git a/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_12_etcd_01_etcds-TechPreviewNoUpgrade.crd.yaml b/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_12_etcd_01_etcds-TechPreviewNoUpgrade.crd.yaml index cfaa4c7ce..8449c20a6 100644 --- a/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_12_etcd_01_etcds-TechPreviewNoUpgrade.crd.yaml +++ b/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_12_etcd_01_etcds-TechPreviewNoUpgrade.crd.yaml @@ -151,6 +151,9 @@ spec: description: OperatorCondition is just the standard condition fields. properties: lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. format: date-time type: string message: @@ -158,10 +161,20 @@ spec: reason: type: string status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown type: string type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ type: string required: + - lastTransitionTime + - status - type type: object type: array diff --git a/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_20_kube-apiserver_01_kubeapiservers.crd.yaml b/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_20_kube-apiserver_01_kubeapiservers.crd.yaml index da4ae9be6..435a8a81e 100644 --- a/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_20_kube-apiserver_01_kubeapiservers.crd.yaml +++ b/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_20_kube-apiserver_01_kubeapiservers.crd.yaml @@ -128,6 +128,9 @@ spec: description: OperatorCondition is just the standard condition fields. properties: lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. format: date-time type: string message: @@ -135,10 +138,20 @@ spec: reason: type: string status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown type: string type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ type: string required: + - lastTransitionTime + - status - type type: object type: array diff --git a/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_25_kube-controller-manager_01_kubecontrollermanagers.crd.yaml b/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_25_kube-controller-manager_01_kubecontrollermanagers.crd.yaml index 4cbd378af..7cd18e09b 100644 --- a/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_25_kube-controller-manager_01_kubecontrollermanagers.crd.yaml +++ b/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_25_kube-controller-manager_01_kubecontrollermanagers.crd.yaml @@ -137,6 +137,9 @@ spec: description: OperatorCondition is just the standard condition fields. properties: lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. format: date-time type: string message: @@ -144,10 +147,20 @@ spec: reason: type: string status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown type: string type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ type: string required: + - lastTransitionTime + - status - type type: object type: array diff --git a/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_25_kube-scheduler_01_kubeschedulers.crd.yaml b/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_25_kube-scheduler_01_kubeschedulers.crd.yaml index 255eab4c1..9654facc4 100644 --- a/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_25_kube-scheduler_01_kubeschedulers.crd.yaml +++ b/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_25_kube-scheduler_01_kubeschedulers.crd.yaml @@ -128,6 +128,9 @@ spec: description: OperatorCondition is just the standard condition fields. properties: lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. format: date-time type: string message: @@ -135,10 +138,20 @@ spec: reason: type: string status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown type: string type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ type: string required: + - lastTransitionTime + - status - type type: object type: array diff --git a/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_30_openshift-apiserver_01_openshiftapiservers.crd.yaml b/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_30_openshift-apiserver_01_openshiftapiservers.crd.yaml index d2ae6f79a..bb9b904fc 100644 --- a/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_30_openshift-apiserver_01_openshiftapiservers.crd.yaml +++ b/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_30_openshift-apiserver_01_openshiftapiservers.crd.yaml @@ -109,6 +109,9 @@ spec: description: OperatorCondition is just the standard condition fields. properties: lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. format: date-time type: string message: @@ -116,10 +119,20 @@ spec: reason: type: string status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown type: string type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ type: string required: + - lastTransitionTime + - status - type type: object type: array diff --git a/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_40_cloud-credential_00_cloudcredentials.crd.yaml b/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_40_cloud-credential_00_cloudcredentials.crd.yaml index 197b3f4e7..bf6c616af 100644 --- a/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_40_cloud-credential_00_cloudcredentials.crd.yaml +++ b/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_40_cloud-credential_00_cloudcredentials.crd.yaml @@ -126,6 +126,9 @@ spec: description: OperatorCondition is just the standard condition fields. properties: lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. format: date-time type: string message: @@ -133,10 +136,20 @@ spec: reason: type: string status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown type: string type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ type: string required: + - lastTransitionTime + - status - type type: object type: array diff --git a/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_40_kube-storage-version-migrator_00_kubestorageversionmigrators.crd.yaml b/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_40_kube-storage-version-migrator_00_kubestorageversionmigrators.crd.yaml index 930f5506a..30d1f9055 100644 --- a/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_40_kube-storage-version-migrator_00_kubestorageversionmigrators.crd.yaml +++ b/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_40_kube-storage-version-migrator_00_kubestorageversionmigrators.crd.yaml @@ -104,6 +104,9 @@ spec: description: OperatorCondition is just the standard condition fields. properties: lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. format: date-time type: string message: @@ -111,10 +114,20 @@ spec: reason: type: string status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown type: string type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ type: string required: + - lastTransitionTime + - status - type type: object type: array diff --git a/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_50_authentication_01_authentications.crd.yaml b/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_50_authentication_01_authentications.crd.yaml index 52fac7bef..3fab2ff1f 100644 --- a/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_50_authentication_01_authentications.crd.yaml +++ b/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_50_authentication_01_authentications.crd.yaml @@ -103,6 +103,9 @@ spec: description: OperatorCondition is just the standard condition fields. properties: lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. format: date-time type: string message: @@ -110,10 +113,20 @@ spec: reason: type: string status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown type: string type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ type: string required: + - lastTransitionTime + - status - type type: object type: array diff --git a/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_50_console_01_consoles.crd.yaml b/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_50_console_01_consoles.crd.yaml index 956c84547..505332e4b 100644 --- a/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_50_console_01_consoles.crd.yaml +++ b/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_50_console_01_consoles.crd.yaml @@ -849,6 +849,9 @@ spec: description: OperatorCondition is just the standard condition fields. properties: lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. format: date-time type: string message: @@ -856,10 +859,20 @@ spec: reason: type: string status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown type: string type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ type: string required: + - lastTransitionTime + - status - type type: object type: array diff --git a/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_50_ingress_00_ingresscontrollers.crd.yaml b/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_50_ingress_00_ingresscontrollers.crd.yaml index 968febc36..2524b5a84 100644 --- a/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_50_ingress_00_ingresscontrollers.crd.yaml +++ b/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_50_ingress_00_ingresscontrollers.crd.yaml @@ -639,15 +639,20 @@ spec: If empty, defaults will be applied. See specific openstack fields for details about their defaults. properties: - loadBalancerIP: + floatingIP: description: |- - loadBalancerIP specifies the floating IP address that the load balancer will use. + floatingIP specifies the IP address that the load balancer will use. When not specified, an IP address will be assigned randomly by the OpenStack cloud provider. + When specified, the floating IP has to be pre-created. If the + specified value is not a floating IP or is already claimed, the + OpenStack cloud provider won't be able to provision the load + balancer. + This field may only be used if the IngressController has External scope. This value must be a valid IPv4 or IPv6 address. type: string x-kubernetes-validations: - - message: loadBalancerIP must be a valid IPv4 or - IPv6 address + - message: floatingIP must be a valid IPv4 or IPv6 + address rule: isIP(self) type: object type: @@ -689,6 +694,10 @@ spec: rule: '!has(self.scope) || self.scope != ''Internal'' || !has(self.providerParameters) || !has(self.providerParameters.aws) || !has(self.providerParameters.aws.networkLoadBalancer) || !has(self.providerParameters.aws.networkLoadBalancer.eipAllocations)' + - message: cannot specify a floating ip when scope is internal + rule: '!has(self.scope) || self.scope != ''Internal'' || !has(self.providerParameters) + || !has(self.providerParameters.openstack) || !has(self.providerParameters.openstack.floatingIP) + || self.providerParameters.openstack.floatingIP == ""' nodePort: description: |- nodePort holds parameters for the NodePortService endpoint publishing strategy. @@ -2336,6 +2345,9 @@ spec: description: OperatorCondition is just the standard condition fields. properties: lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. format: date-time type: string message: @@ -2343,10 +2355,20 @@ spec: reason: type: string status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown type: string type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ type: string required: + - lastTransitionTime + - status - type type: object type: array @@ -2815,15 +2837,20 @@ spec: If empty, defaults will be applied. See specific openstack fields for details about their defaults. properties: - loadBalancerIP: + floatingIP: description: |- - loadBalancerIP specifies the floating IP address that the load balancer will use. + floatingIP specifies the IP address that the load balancer will use. When not specified, an IP address will be assigned randomly by the OpenStack cloud provider. + When specified, the floating IP has to be pre-created. If the + specified value is not a floating IP or is already claimed, the + OpenStack cloud provider won't be able to provision the load + balancer. + This field may only be used if the IngressController has External scope. This value must be a valid IPv4 or IPv6 address. type: string x-kubernetes-validations: - - message: loadBalancerIP must be a valid IPv4 or - IPv6 address + - message: floatingIP must be a valid IPv4 or IPv6 + address rule: isIP(self) type: object type: @@ -2865,6 +2892,10 @@ spec: rule: '!has(self.scope) || self.scope != ''Internal'' || !has(self.providerParameters) || !has(self.providerParameters.aws) || !has(self.providerParameters.aws.networkLoadBalancer) || !has(self.providerParameters.aws.networkLoadBalancer.eipAllocations)' + - message: cannot specify a floating ip when scope is internal + rule: '!has(self.scope) || self.scope != ''Internal'' || !has(self.providerParameters) + || !has(self.providerParameters.openstack) || !has(self.providerParameters.openstack.floatingIP) + || self.providerParameters.openstack.floatingIP == ""' nodePort: description: |- nodePort holds parameters for the NodePortService endpoint publishing strategy. diff --git a/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_50_insights_00_insightsoperators.crd.yaml b/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_50_insights_00_insightsoperators.crd.yaml index d1d2fa6b0..b7ce165e3 100644 --- a/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_50_insights_00_insightsoperators.crd.yaml +++ b/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_50_insights_00_insightsoperators.crd.yaml @@ -108,6 +108,9 @@ spec: description: OperatorCondition is just the standard condition fields. properties: lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. format: date-time type: string message: @@ -115,10 +118,20 @@ spec: reason: type: string status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown type: string type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ type: string required: + - lastTransitionTime + - status - type type: object type: array diff --git a/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_50_openshift-controller-manager_02_openshiftcontrollermanagers.crd.yaml b/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_50_openshift-controller-manager_02_openshiftcontrollermanagers.crd.yaml index 1abf8e03d..d6dabdda0 100644 --- a/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_50_openshift-controller-manager_02_openshiftcontrollermanagers.crd.yaml +++ b/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_50_openshift-controller-manager_02_openshiftcontrollermanagers.crd.yaml @@ -106,6 +106,9 @@ spec: description: OperatorCondition is just the standard condition fields. properties: lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. format: date-time type: string message: @@ -113,10 +116,20 @@ spec: reason: type: string status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown type: string type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ type: string required: + - lastTransitionTime + - status - type type: object type: array diff --git a/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_50_service-ca_02_servicecas.crd.yaml b/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_50_service-ca_02_servicecas.crd.yaml index f31a18f21..16fba0d6d 100644 --- a/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_50_service-ca_02_servicecas.crd.yaml +++ b/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_50_service-ca_02_servicecas.crd.yaml @@ -107,6 +107,9 @@ spec: description: OperatorCondition is just the standard condition fields. properties: lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. format: date-time type: string message: @@ -114,10 +117,20 @@ spec: reason: type: string status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown type: string type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ type: string required: + - lastTransitionTime + - status - type type: object type: array diff --git a/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_50_storage_01_storages.crd.yaml b/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_50_storage_01_storages.crd.yaml index b928c9137..e0f841881 100644 --- a/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_50_storage_01_storages.crd.yaml +++ b/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_50_storage_01_storages.crd.yaml @@ -123,6 +123,9 @@ spec: description: OperatorCondition is just the standard condition fields. properties: lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. format: date-time type: string message: @@ -130,10 +133,20 @@ spec: reason: type: string status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown type: string type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ type: string required: + - lastTransitionTime + - status - type type: object type: array diff --git a/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_70_dns_00_dnses.crd.yaml b/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_70_dns_00_dnses.crd.yaml index bdb32882b..7d2acd004 100644 --- a/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_70_dns_00_dnses.crd.yaml +++ b/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_70_dns_00_dnses.crd.yaml @@ -576,6 +576,9 @@ spec: description: OperatorCondition is just the standard condition fields. properties: lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. format: date-time type: string message: @@ -583,10 +586,20 @@ spec: reason: type: string status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown type: string type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ type: string required: + - lastTransitionTime + - status - type type: object type: array diff --git a/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_70_network_01_networks-CustomNoUpgrade.crd.yaml b/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_70_network_01_networks-CustomNoUpgrade.crd.yaml index c023c8c27..146c68405 100644 --- a/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_70_network_01_networks-CustomNoUpgrade.crd.yaml +++ b/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_70_network_01_networks-CustomNoUpgrade.crd.yaml @@ -923,6 +923,9 @@ spec: description: OperatorCondition is just the standard condition fields. properties: lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. format: date-time type: string message: @@ -930,10 +933,20 @@ spec: reason: type: string status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown type: string type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ type: string required: + - lastTransitionTime + - status - type type: object type: array diff --git a/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_70_network_01_networks-Default.crd.yaml b/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_70_network_01_networks-Default.crd.yaml index e1adf488a..3f150defe 100644 --- a/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_70_network_01_networks-Default.crd.yaml +++ b/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_70_network_01_networks-Default.crd.yaml @@ -867,6 +867,9 @@ spec: description: OperatorCondition is just the standard condition fields. properties: lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. format: date-time type: string message: @@ -874,10 +877,20 @@ spec: reason: type: string status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown type: string type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ type: string required: + - lastTransitionTime + - status - type type: object type: array diff --git a/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_70_network_01_networks-DevPreviewNoUpgrade.crd.yaml b/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_70_network_01_networks-DevPreviewNoUpgrade.crd.yaml index ce2db2e92..fd0679763 100644 --- a/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_70_network_01_networks-DevPreviewNoUpgrade.crd.yaml +++ b/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_70_network_01_networks-DevPreviewNoUpgrade.crd.yaml @@ -923,6 +923,9 @@ spec: description: OperatorCondition is just the standard condition fields. properties: lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. format: date-time type: string message: @@ -930,10 +933,20 @@ spec: reason: type: string status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown type: string type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ type: string required: + - lastTransitionTime + - status - type type: object type: array diff --git a/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_70_network_01_networks-TechPreviewNoUpgrade.crd.yaml b/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_70_network_01_networks-TechPreviewNoUpgrade.crd.yaml index 2704f6fbd..e55b94afc 100644 --- a/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_70_network_01_networks-TechPreviewNoUpgrade.crd.yaml +++ b/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_70_network_01_networks-TechPreviewNoUpgrade.crd.yaml @@ -923,6 +923,9 @@ spec: description: OperatorCondition is just the standard condition fields. properties: lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. format: date-time type: string message: @@ -930,10 +933,20 @@ spec: reason: type: string status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown type: string type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ type: string required: + - lastTransitionTime + - status - type type: object type: array diff --git a/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_80_csi-snapshot-controller_01_csisnapshotcontrollers.crd.yaml b/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_80_csi-snapshot-controller_01_csisnapshotcontrollers.crd.yaml index 23197942e..a166e4c3a 100644 --- a/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_80_csi-snapshot-controller_01_csisnapshotcontrollers.crd.yaml +++ b/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_80_csi-snapshot-controller_01_csisnapshotcontrollers.crd.yaml @@ -107,6 +107,9 @@ spec: description: OperatorCondition is just the standard condition fields. properties: lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. format: date-time type: string message: @@ -114,10 +117,20 @@ spec: reason: type: string status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown type: string type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ type: string required: + - lastTransitionTime + - status - type type: object type: array diff --git a/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_90_csi-driver_01_clustercsidrivers.crd.yaml b/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_90_csi-driver_01_clustercsidrivers.crd.yaml index 1f0f61a94..9a65a695a 100644 --- a/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_90_csi-driver_01_clustercsidrivers.crd.yaml +++ b/vendor/github.com/openshift/api/operator/v1/zz_generated.crd-manifests/0000_90_csi-driver_01_clustercsidrivers.crd.yaml @@ -384,6 +384,9 @@ spec: description: OperatorCondition is just the standard condition fields. properties: lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. format: date-time type: string message: @@ -391,10 +394,20 @@ spec: reason: type: string status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown type: string type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ type: string required: + - lastTransitionTime + - status - type type: object type: array diff --git a/vendor/github.com/openshift/api/operator/v1/zz_generated.swagger_doc_generated.go b/vendor/github.com/openshift/api/operator/v1/zz_generated.swagger_doc_generated.go index a3a78a89b..03d9e16ed 100644 --- a/vendor/github.com/openshift/api/operator/v1/zz_generated.swagger_doc_generated.go +++ b/vendor/github.com/openshift/api/operator/v1/zz_generated.swagger_doc_generated.go @@ -52,7 +52,10 @@ func (NodeStatus) SwaggerDoc() map[string]string { } var map_OperatorCondition = map[string]string{ - "": "OperatorCondition is just the standard condition fields.", + "": "OperatorCondition is just the standard condition fields.", + "type": "type of condition in CamelCase or in foo.example.com/CamelCase.", + "status": "status of the condition, one of True, False, Unknown.", + "lastTransitionTime": "lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.", } func (OperatorCondition) SwaggerDoc() map[string]string { @@ -1122,8 +1125,8 @@ func (NodePortStrategy) SwaggerDoc() map[string]string { } var map_OpenStackLoadBalancerParameters = map[string]string{ - "": "OpenStackLoadBalancerParameters provides configuration settings that are specific to OpenStack load balancers.", - "loadBalancerIP": "loadBalancerIP specifies the floating IP address that the load balancer will use. When not specified, an IP address will be assigned randomly by the OpenStack cloud provider. This value must be a valid IPv4 or IPv6 address. ", + "": "OpenStackLoadBalancerParameters provides configuration settings that are specific to OpenStack load balancers.", + "floatingIP": "floatingIP specifies the IP address that the load balancer will use. When not specified, an IP address will be assigned randomly by the OpenStack cloud provider. When specified, the floating IP has to be pre-created. If the specified value is not a floating IP or is already claimed, the OpenStack cloud provider won't be able to provision the load balancer. This field may only be used if the IngressController has External scope. This value must be a valid IPv4 or IPv6 address. ", } func (OpenStackLoadBalancerParameters) SwaggerDoc() map[string]string { diff --git a/vendor/github.com/openshift/build-machinery-go/make/operator.example.mk.help.log b/vendor/github.com/openshift/build-machinery-go/make/operator.example.mk.help.log index 410fd9861..b636e3926 100644 --- a/vendor/github.com/openshift/build-machinery-go/make/operator.example.mk.help.log +++ b/vendor/github.com/openshift/build-machinery-go/make/operator.example.mk.help.log @@ -22,6 +22,7 @@ update-deps-overrides update-generated update-gofmt update-profile-manifests +update-test-operator-integration verify verify-bindata verify-codegen diff --git a/vendor/github.com/openshift/build-machinery-go/make/targets/openshift/operator/mom.mk b/vendor/github.com/openshift/build-machinery-go/make/targets/openshift/operator/mom.mk index 36372087a..21c81afe0 100644 --- a/vendor/github.com/openshift/build-machinery-go/make/targets/openshift/operator/mom.mk +++ b/vendor/github.com/openshift/build-machinery-go/make/targets/openshift/operator/mom.mk @@ -4,3 +4,7 @@ test-operator-integration: build bash $(scripts_dir)/test-operator-integration.sh .PHONY: test-operator-integration +update-test-operator-integration: build + REPLACE_TEST_OUTPUT=true bash $(scripts_dir)/test-operator-integration.sh + +.PHONY: update-test-operator-integration diff --git a/vendor/github.com/openshift/build-machinery-go/scripts/test-operator-integration.sh b/vendor/github.com/openshift/build-machinery-go/scripts/test-operator-integration.sh index 04f08222a..262bf6010 100644 --- a/vendor/github.com/openshift/build-machinery-go/scripts/test-operator-integration.sh +++ b/vendor/github.com/openshift/build-machinery-go/scripts/test-operator-integration.sh @@ -18,6 +18,8 @@ if ! command -v multi-operator-manager &> /dev/null; then exit 1 fi +REPLACE_TEST_OUTPUT="${REPLACE_TEST_OUTPUT:-false}" + # Define the path to the operator binary MOM_CMD="${MOM_CMD:-multi-operator-manager}" @@ -39,5 +41,12 @@ APPLY_CONFIG_ARGS=( --output-dir="$APPLY_CONFIG_OUTPUT_DIR" ) +if [ "$REPLACE_TEST_OUTPUT" == "true" ] +then + APPLY_CONFIG_ARGS=("${APPLY_CONFIG_ARGS[@]}" "--replace-expected-output=true") +else + APPLY_CONFIG_ARGS=("${APPLY_CONFIG_ARGS[@]}" "--preserve-policy=KeepAlways") +fi + # Run the apply-configuration command from the operator "${MOM_CMD}" "${APPLY_CONFIG_ARGS[@]}" diff --git a/vendor/github.com/openshift/library-go/pkg/manifestclient/discovery_reader.go b/vendor/github.com/openshift/library-go/pkg/manifestclient/discovery_reader.go new file mode 100644 index 000000000..e5126561c --- /dev/null +++ b/vendor/github.com/openshift/library-go/pkg/manifestclient/discovery_reader.go @@ -0,0 +1,150 @@ +package manifestclient + +import ( + "embed" + "errors" + "fmt" + "io/fs" + "path/filepath" + "sync" + + apidiscoveryv2 "k8s.io/api/apidiscovery/v2" + "k8s.io/apimachinery/pkg/runtime/schema" + "k8s.io/apimachinery/pkg/util/json" + apirequest "k8s.io/apiserver/pkg/endpoints/request" + "sigs.k8s.io/yaml" +) + +type kindData struct { + kind schema.GroupVersionKind + listKind schema.GroupVersionKind + err error +} + +func newDiscoveryReader(content fs.FS) *discoveryReader { + return &discoveryReader{ + sourceFS: content, + kindForResource: make(map[schema.GroupVersionResource]kindData), + } +} + +type discoveryReader struct { + kindForResource map[schema.GroupVersionResource]kindData + + sourceFS fs.FS + lock sync.RWMutex +} + +func (dr *discoveryReader) getKindForResource(gvr schema.GroupVersionResource) (kindData, error) { + dr.lock.RLock() + kindForGVR, ok := dr.kindForResource[gvr] + if ok { + defer dr.lock.RUnlock() + return kindForGVR, kindForGVR.err + } + dr.lock.RUnlock() + + dr.lock.Lock() + defer dr.lock.Unlock() + + kindForGVR, ok = dr.kindForResource[gvr] + if ok { + return kindForGVR, kindForGVR.err + } + + discoveryPath := "/apis" + if len(gvr.Group) == 0 { + discoveryPath = "/api" + } + discoveryBytes, err := dr.getGroupResourceDiscovery(&apirequest.RequestInfo{Path: discoveryPath}) + if err != nil { + kindForGVR.err = fmt.Errorf("error reading discovery: %w", err) + dr.kindForResource[gvr] = kindForGVR + return kindForGVR, kindForGVR.err + } + + discoveryInfo := &apidiscoveryv2.APIGroupDiscoveryList{} + if err := json.Unmarshal(discoveryBytes, discoveryInfo); err != nil { + kindForGVR.err = fmt.Errorf("error unmarshalling discovery: %w", err) + dr.kindForResource[gvr] = kindForGVR + return kindForGVR, kindForGVR.err + } + + kindForGVR.err = fmt.Errorf("did not find kind for %v\n", gvr) + for _, groupInfo := range discoveryInfo.Items { + if groupInfo.Name != gvr.Group { + continue + } + for _, versionInfo := range groupInfo.Versions { + if versionInfo.Version != gvr.Version { + continue + } + for _, resourceInfo := range versionInfo.Resources { + if resourceInfo.Resource != gvr.Resource { + continue + } + if resourceInfo.ResponseKind == nil { + continue + } + kindForGVR.kind = schema.GroupVersionKind{ + Group: gvr.Group, + Version: gvr.Version, + Kind: resourceInfo.ResponseKind.Kind, + } + if len(resourceInfo.ResponseKind.Group) > 0 { + kindForGVR.kind.Group = resourceInfo.ResponseKind.Group + } + if len(resourceInfo.ResponseKind.Version) > 0 { + kindForGVR.kind.Version = resourceInfo.ResponseKind.Version + } + kindForGVR.listKind = schema.GroupVersionKind{ + Group: kindForGVR.kind.Group, + Version: kindForGVR.kind.Version, + Kind: resourceInfo.ResponseKind.Kind + "List", + } + kindForGVR.err = nil + dr.kindForResource[gvr] = kindForGVR + return kindForGVR, kindForGVR.err + } + } + } + + dr.kindForResource[gvr] = kindForGVR + return kindForGVR, kindForGVR.err +} + +func (dr *discoveryReader) getGroupResourceDiscovery(requestInfo *apirequest.RequestInfo) ([]byte, error) { + switch { + case requestInfo.Path == "/api": + return dr.getAggregatedDiscoveryForURL("aggregated-discovery-api.yaml", requestInfo.Path) + case requestInfo.Path == "/apis": + return dr.getAggregatedDiscoveryForURL("aggregated-discovery-apis.yaml", requestInfo.Path) + default: + // TODO can probably do better + return nil, fmt.Errorf("unsupported discovery path: %q", requestInfo.Path) + } +} + +func (dr *discoveryReader) getAggregatedDiscoveryForURL(filename, url string) ([]byte, error) { + discoveryBytes, err := fs.ReadFile(dr.sourceFS, filename) + if errors.Is(err, fs.ErrNotExist) { + discoveryBytes, err = fs.ReadFile(defaultDiscovery, filepath.Join("default-discovery", filename)) + } + if err != nil { + return nil, fmt.Errorf("error reading discovery: %w", err) + } + + apiMap := map[string]interface{}{} + if err := yaml.Unmarshal(discoveryBytes, &apiMap); err != nil { + return nil, fmt.Errorf("discovery %q unmarshal failed: %w", url, err) + } + apiJSON, err := json.Marshal(apiMap) + if err != nil { + return nil, fmt.Errorf("discovery %q marshal failed: %w", url, err) + } + + return apiJSON, err +} + +//go:embed default-discovery +var defaultDiscovery embed.FS diff --git a/vendor/github.com/openshift/library-go/pkg/manifestclient/group_resource_discovery.go b/vendor/github.com/openshift/library-go/pkg/manifestclient/group_resource_discovery.go deleted file mode 100644 index 84e3b5aff..000000000 --- a/vendor/github.com/openshift/library-go/pkg/manifestclient/group_resource_discovery.go +++ /dev/null @@ -1,250 +0,0 @@ -package manifestclient - -import ( - "errors" - "fmt" - "io/fs" - "path/filepath" - "strings" - - "k8s.io/apimachinery/pkg/util/json" - "sigs.k8s.io/yaml" - - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - apirequest "k8s.io/apiserver/pkg/endpoints/request" -) - -func (mrt *manifestRoundTripper) getGroupResourceDiscovery(requestInfo *apirequest.RequestInfo) ([]byte, error) { - switch { - case requestInfo.Path == "/api": - ret, err := mrt.getAggregatedDiscoveryForURL("aggregated-discovery-api.yaml", requestInfo.Path) - if errors.Is(err, fs.ErrNotExist) { - return mrt.getLegacyGroupResourceDiscovery(requestInfo) - } - return ret, err - case requestInfo.Path == "/apis": - ret, err := mrt.getAggregatedDiscoveryForURL("aggregated-discovery-apis.yaml", requestInfo.Path) - if errors.Is(err, fs.ErrNotExist) { - return mrt.getLegacyGroupResourceDiscovery(requestInfo) - } - return ret, err - default: - // TODO can probably do better - return nil, fmt.Errorf("unsupported discovery path: %q", requestInfo.Path) - } -} - -func (mrt *manifestRoundTripper) getAggregatedDiscoveryForURL(filename, url string) ([]byte, error) { - discoveryBytes, err := fs.ReadFile(mrt.sourceFS, filename) - if errors.Is(err, fs.ErrNotExist) { - discoveryBytes, err = fs.ReadFile(defaultDiscovery, filepath.Join("default-discovery", filename)) - } - if err != nil { - return nil, fmt.Errorf("error reading discovery: %w", err) - } - - apiMap := map[string]interface{}{} - if err := yaml.Unmarshal(discoveryBytes, &apiMap); err != nil { - return nil, fmt.Errorf("discovery %q unmarshal failed: %w", url, err) - } - apiJSON, err := json.Marshal(apiMap) - if err != nil { - return nil, fmt.Errorf("discovery %q marshal failed: %w", url, err) - } - - return apiJSON, err -} - -func (mrt *manifestRoundTripper) getLegacyGroupResourceDiscovery(requestInfo *apirequest.RequestInfo) ([]byte, error) { - if len(requestInfo.Path) == 0 { - return nil, fmt.Errorf("path required for group resource discovery") - } - - apiResourceList := &metav1.APIResourceList{} - - group, version, err := splitGroupVersionFromRequestPath(requestInfo.Path) - if err != nil { - return nil, fmt.Errorf("unable to split group/version from path: %w", err) - } - - apiResourceList.GroupVersion = fmt.Sprintf("%s/%s", group, version) - if group == "core" { - apiResourceList.GroupVersion = version - } - - // Map of resource name to APIResource. - apiResources := map[string]metav1.APIResource{} - - clusterGroupPath := filepath.Join("cluster-scoped-resources", group) - clusterGroupDirEntries, err := fs.ReadDir(mrt.sourceFS, clusterGroupPath) - if err != nil && !errors.Is(err, fs.ErrNotExist) { - return nil, fmt.Errorf("unable to read directory: %w", err) - } - - apiResourcesForClusterScope, err := getAPIResourcesFromNamespaceDirEntries(clusterGroupDirEntries, mrt.sourceFS, group, version, clusterGroupPath, false /* cluster-scoped */) - if err != nil { - return nil, fmt.Errorf("unable to get resources from cluster-scoped directory: %w", err) - } - for resourceName, apiResource := range apiResourcesForClusterScope { - apiResources[resourceName] = apiResource - } - - namespaceDirEntries, err := fs.ReadDir(mrt.sourceFS, "namespaces") - if err != nil { - return nil, fmt.Errorf("unable to read directory: %w", err) - } - for _, namespaceDirEntry := range namespaceDirEntries { - if !namespaceDirEntry.IsDir() { - continue - } - - namespaceGroupPath := filepath.Join("namespaces", namespaceDirEntry.Name(), group) - namespaceGroupDirEntries, err := fs.ReadDir(mrt.sourceFS, namespaceGroupPath) - if err != nil && !errors.Is(err, fs.ErrNotExist) { - return nil, fmt.Errorf("unable to read directory: %w", err) - } else if errors.Is(err, fs.ErrNotExist) { - // No resources for this namespace. - continue - } - - apiResourcesForNamespace, err := getAPIResourcesFromNamespaceDirEntries(namespaceGroupDirEntries, mrt.sourceFS, group, version, namespaceGroupPath, true /* namespaced */) - if err != nil { - return nil, fmt.Errorf("unable to get resources from namespace directory: %w", err) - } - - for resourceName, apiResource := range apiResourcesForNamespace { - apiResources[resourceName] = apiResource - } - - // Namespaces are special: each namespace is stored in its own file within the namespace directory - namespacePath := filepath.Join("namespaces", namespaceDirEntry.Name(), namespaceDirEntry.Name()+".yaml") - if namespaceObj, err := readIndividualFile(mrt.sourceFS, namespacePath); err == nil { - // It's currently not guaranteed that the file is always present - apiResources["namespaces"] = metav1.APIResource{ - Name: "namespaces", - Kind: namespaceObj.GetKind(), - Group: namespaceObj.GroupVersionKind().Group, - Version: namespaceObj.GroupVersionKind().Version, - Namespaced: false, - Verbs: []string{"get", "list", "watch"}, - } - } - } - - for _, apiResource := range apiResources { - apiResourceList.APIResources = append(apiResourceList.APIResources, apiResource) - } - - ret, err := serializeAPIResourceListToJSON(apiResourceList) - if err != nil { - return nil, fmt.Errorf("failed to serialize group resource discovery: %v", err) - } - return []byte(ret), nil -} - -func splitGroupVersionFromRequestPath(path string) (string, string, error) { - if path == "/api/v1" { - return "core", "v1", nil - } - - parts := strings.Split(path, "/") - if len(parts) != 4 { - return "", "", fmt.Errorf("invalid path: %s", path) - } - - return parts[2], parts[3], nil -} - -func getResourceDirAPIServerListEntry(sourceFS fs.FS, groupPath, resourceName, group, version string, namespaced bool) (*metav1.APIResource, error) { - resourceDirEntries, err := fs.ReadDir(sourceFS, filepath.Join(groupPath, resourceName)) - if err != nil { - return nil, fmt.Errorf("unable to read directory: %w", err) - } - for _, fileEntry := range resourceDirEntries { - if !strings.HasSuffix(fileEntry.Name(), ".yaml") { - // There shouldn't be anything that hits this, but ignore it if there is. - continue - } - - individualObj, individualErr := readIndividualFile(sourceFS, filepath.Join(groupPath, resourceName, fileEntry.Name())) - if individualErr != nil { - return nil, fmt.Errorf("unable to read file: %w", individualErr) - } - - groupVersion := fmt.Sprintf("%s/%s", group, version) - if group == "core" { - group = "" - groupVersion = version - } - - if individualObj.GetAPIVersion() != groupVersion { - continue - } - - // No point checking further, all files should produce the same APIResource. - return &metav1.APIResource{ - Name: resourceName, - Kind: individualObj.GetKind(), - Group: group, - Version: version, - Namespaced: namespaced, - Verbs: []string{"get", "list", "watch"}, - }, nil - } - - return nil, nil -} - -func getAPIResourcesFromNamespaceDirEntries(dirEntries []fs.DirEntry, sourceFS fs.FS, group, version string, basePath string, namespaced bool) (map[string]metav1.APIResource, error) { - apiResources := map[string]metav1.APIResource{} - for _, dirEntry := range dirEntries { - // Directories are named after the resource and contain individual resources. - if dirEntry.IsDir() { - apiResource, err := getResourceDirAPIServerListEntry(sourceFS, basePath, dirEntry.Name(), group, version, namespaced) - if err != nil { - return nil, fmt.Errorf("unable to get resource from directory: %w", err) - } - if apiResource != nil { - apiResources[dirEntry.Name()] = *apiResource - } - } - - if !strings.HasSuffix(dirEntry.Name(), ".yaml") { - // There shouldn't be anything that hits this, but ignore it if there is. - continue - } - - resourceName := strings.TrimSuffix(dirEntry.Name(), ".yaml") - if _, ok := apiResources[resourceName]; ok { - // We already have this resource. - continue - } - - // Files are named after the resource and contain a list of resources. - listObj, err := readListFile(sourceFS, filepath.Join(basePath, dirEntry.Name())) - if err != nil { - return nil, fmt.Errorf("unable to read list file: %w", err) - } - - for _, obj := range listObj.Items { - if obj.GetAPIVersion() != fmt.Sprintf("%s/%s", group, version) { - continue - } - - apiResources[resourceName] = metav1.APIResource{ - Name: resourceName, - Kind: obj.GetKind(), - Group: group, - Version: version, - Namespaced: namespaced, - Verbs: []string{"get", "list", "watch"}, - } - - // Once we find a resource in the expected group/version, we can break. - // Anything else would produce the same APIResource. - break - } - } - - return apiResources, nil -} diff --git a/vendor/github.com/openshift/library-go/pkg/manifestclient/list.go b/vendor/github.com/openshift/library-go/pkg/manifestclient/list.go index d0e61f761..6ee3da6e5 100644 --- a/vendor/github.com/openshift/library-go/pkg/manifestclient/list.go +++ b/vendor/github.com/openshift/library-go/pkg/manifestclient/list.go @@ -42,7 +42,7 @@ func (mrt *manifestRoundTripper) listAll(requestInfo *apirequest.RequestInfo) ([ Resource: requestInfo.Resource, } - kind, err := mrt.getKindForResource(gvr) + kind, err := mrt.discoveryReader.getKindForResource(gvr) if err != nil { return nil, fmt.Errorf("unable to determine list kind: %w", err) } @@ -240,7 +240,10 @@ func allPossibleListFileLocations(sourceFS fs.FS, requestInfo *apirequest.Reques allPossibleListFileLocations = append(allPossibleListFileLocations, filepath.Join(clusterParts...)) namespaces, err := allNamespacesWithData(sourceFS) - if err != nil { + switch { + case errors.Is(err, fs.ErrNotExist): + return allPossibleListFileLocations, nil + case err != nil: return nil, fmt.Errorf("unable to read namespaces: %w", err) } for _, ns := range namespaces { diff --git a/vendor/github.com/openshift/library-go/pkg/manifestclient/read_roundtripper.go b/vendor/github.com/openshift/library-go/pkg/manifestclient/read_roundtripper.go index 4f798e5c2..bb0290632 100644 --- a/vendor/github.com/openshift/library-go/pkg/manifestclient/read_roundtripper.go +++ b/vendor/github.com/openshift/library-go/pkg/manifestclient/read_roundtripper.go @@ -2,19 +2,14 @@ package manifestclient import ( "bytes" - "embed" "fmt" "io" "io/fs" "net/http" "strconv" "strings" - "sync" "time" - apidiscoveryv2 "k8s.io/api/apidiscovery/v2" - "k8s.io/apimachinery/pkg/util/json" - apierrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/runtime/schema" utilruntime "k8s.io/apimachinery/pkg/util/runtime" @@ -36,23 +31,16 @@ type manifestRoundTripper struct { // requestInfoResolver is the same type constructed the same way as the kube-apiserver requestInfoResolver *apirequest.RequestInfoFactory - lock sync.RWMutex - kindForResource map[schema.GroupVersionResource]kindData -} - -type kindData struct { - kind schema.GroupVersionKind - listKind schema.GroupVersionKind - err error + discoveryReader *discoveryReader } -func newReadRoundTripper(content fs.FS) *manifestRoundTripper { +func newReadRoundTripper(content fs.FS, discoveryRoundTripper *discoveryReader) *manifestRoundTripper { return &manifestRoundTripper{ sourceFS: content, requestInfoResolver: server.NewRequestInfoResolver(&server.Config{ LegacyAPIGroupPrefixes: sets.NewString(server.DefaultLegacyAPIPrefix), }), - kindForResource: make(map[schema.GroupVersionResource]kindData), + discoveryReader: discoveryRoundTripper, } } @@ -82,7 +70,7 @@ func (mrt *manifestRoundTripper) RoundTrip(req *http.Request) (*http.Response, e switch requestInfo.Verb { case "get": if isDiscovery { - returnBody, returnErr = mrt.getGroupResourceDiscovery(requestInfo) + returnBody, returnErr = mrt.discoveryReader.getGroupResourceDiscovery(requestInfo) } else { // TODO handle label and field selectors because single item lists are GETs returnBody, returnErr = mrt.get(requestInfo) @@ -168,84 +156,3 @@ func isServerGroupResourceDiscovery(path string) bool { } return parts[0] == "" && parts[1] == "apis" } - -//go:embed default-discovery -var defaultDiscovery embed.FS - -func (mrt *manifestRoundTripper) getKindForResource(gvr schema.GroupVersionResource) (kindData, error) { - mrt.lock.RLock() - kindForGVR, ok := mrt.kindForResource[gvr] - if ok { - defer mrt.lock.RUnlock() - return kindForGVR, kindForGVR.err - } - mrt.lock.RUnlock() - - mrt.lock.Lock() - defer mrt.lock.Unlock() - - kindForGVR, ok = mrt.kindForResource[gvr] - if ok { - return kindForGVR, kindForGVR.err - } - - discoveryPath := "/apis" - if len(gvr.Group) == 0 { - discoveryPath = "/api" - } - discoveryBytes, err := mrt.getGroupResourceDiscovery(&apirequest.RequestInfo{Path: discoveryPath}) - if err != nil { - kindForGVR.err = fmt.Errorf("error reading discovery: %w", err) - mrt.kindForResource[gvr] = kindForGVR - return kindForGVR, kindForGVR.err - } - - discoveryInfo := &apidiscoveryv2.APIGroupDiscoveryList{} - if err := json.Unmarshal(discoveryBytes, discoveryInfo); err != nil { - kindForGVR.err = fmt.Errorf("error unmarshalling discovery: %w", err) - mrt.kindForResource[gvr] = kindForGVR - return kindForGVR, kindForGVR.err - } - - kindForGVR.err = fmt.Errorf("did not find kind for %v\n", gvr) - for _, groupInfo := range discoveryInfo.Items { - if groupInfo.Name != gvr.Group { - continue - } - for _, versionInfo := range groupInfo.Versions { - if versionInfo.Version != gvr.Version { - continue - } - for _, resourceInfo := range versionInfo.Resources { - if resourceInfo.Resource != gvr.Resource { - continue - } - if resourceInfo.ResponseKind == nil { - continue - } - kindForGVR.kind = schema.GroupVersionKind{ - Group: gvr.Group, - Version: gvr.Version, - Kind: resourceInfo.ResponseKind.Kind, - } - if len(resourceInfo.ResponseKind.Group) > 0 { - kindForGVR.kind.Group = resourceInfo.ResponseKind.Group - } - if len(resourceInfo.ResponseKind.Version) > 0 { - kindForGVR.kind.Version = resourceInfo.ResponseKind.Version - } - kindForGVR.listKind = schema.GroupVersionKind{ - Group: kindForGVR.kind.Group, - Version: kindForGVR.kind.Version, - Kind: resourceInfo.ResponseKind.Kind + "List", - } - kindForGVR.err = nil - mrt.kindForResource[gvr] = kindForGVR - return kindForGVR, kindForGVR.err - } - } - } - - mrt.kindForResource[gvr] = kindForGVR - return kindForGVR, kindForGVR.err -} diff --git a/vendor/github.com/openshift/library-go/pkg/manifestclient/readwrite_roundtripper.go b/vendor/github.com/openshift/library-go/pkg/manifestclient/readwrite_roundtripper.go index c781a41c5..13d01f533 100644 --- a/vendor/github.com/openshift/library-go/pkg/manifestclient/readwrite_roundtripper.go +++ b/vendor/github.com/openshift/library-go/pkg/manifestclient/readwrite_roundtripper.go @@ -49,10 +49,11 @@ func NewRoundTripper(mustGatherDir string) *readWriteRoundTripper { } func newReadWriteRoundTripper(sourceFS fs.FS) *readWriteRoundTripper { - return &readWriteRoundTripper{ - readDelegate: newReadRoundTripper(sourceFS), - writeDelegate: newWriteRoundTripper(), - } + rt := &readWriteRoundTripper{} + discoveryReader := newDiscoveryReader(sourceFS) + rt.readDelegate = newReadRoundTripper(sourceFS, discoveryReader) + rt.writeDelegate = newWriteRoundTripper(discoveryReader) + return rt } type readWriteRoundTripper struct { diff --git a/vendor/github.com/openshift/library-go/pkg/manifestclient/write_roundtripper.go b/vendor/github.com/openshift/library-go/pkg/manifestclient/write_roundtripper.go index a75dd8a4a..d85d78dd4 100644 --- a/vendor/github.com/openshift/library-go/pkg/manifestclient/write_roundtripper.go +++ b/vendor/github.com/openshift/library-go/pkg/manifestclient/write_roundtripper.go @@ -28,18 +28,21 @@ type writeTrackingRoundTripper struct { // requestInfoResolver is the same type constructed the same way as the kube-apiserver requestInfoResolver *apirequest.RequestInfoFactory + discoveryReader *discoveryReader + lock sync.RWMutex nextRequestNumber int actionTracker *AllActionsTracker[TrackedSerializedRequest] } -func newWriteRoundTripper() *writeTrackingRoundTripper { +func newWriteRoundTripper(discoveryRoundTripper *discoveryReader) *writeTrackingRoundTripper { return &writeTrackingRoundTripper{ nextRequestNumber: 1, actionTracker: &AllActionsTracker[TrackedSerializedRequest]{}, requestInfoResolver: server.NewRequestInfoResolver(&server.Config{ LegacyAPIGroupPrefixes: sets.NewString(server.DefaultLegacyAPIPrefix), }), + discoveryReader: discoveryRoundTripper, } } @@ -213,8 +216,14 @@ func (mrt *writeTrackingRoundTripper) roundTrip(req *http.Request) ([]byte, erro ret := &unstructured.Unstructured{Object: map[string]interface{}{}} ret.SetName(serializedRequest.ActionMetadata.Name) ret.SetNamespace(serializedRequest.ActionMetadata.Namespace) - if actionHasRuntimeObjectBody { // TODO might be able to do something generally based on discovery if absolutely necessary + if actionHasRuntimeObjectBody { ret.SetGroupVersionKind(bodyObj.GetObjectKind().GroupVersionKind()) + } else { + kindForResource, err := mrt.discoveryReader.getKindForResource(gvr) + if err != nil { + return nil, err + } + ret.SetGroupVersionKind(kindForResource.kind) } retBytes, err := json.Marshal(ret.Object) if err != nil { diff --git a/vendor/github.com/openshift/library-go/pkg/operator/apiserver/controller/apiservice/apiservice_controller.go b/vendor/github.com/openshift/library-go/pkg/operator/apiserver/controller/apiservice/apiservice_controller.go index 78d3fe663..817f7fe1a 100644 --- a/vendor/github.com/openshift/library-go/pkg/operator/apiserver/controller/apiservice/apiservice_controller.go +++ b/vendor/github.com/openshift/library-go/pkg/operator/apiserver/controller/apiservice/apiservice_controller.go @@ -70,7 +70,7 @@ func NewAPIServiceController( kubeClient: kubeClient, } - return factory.New().WithSync(c.sync).WithControllerInstanceName(c.controllerInstanceName).ResyncEvery(10*time.Second).WithInformers( + return factory.New().WithSync(c.sync).WithControllerInstanceName(c.controllerInstanceName).ResyncEvery(1*time.Minute).WithInformers( append(informers, kubeInformersForNamespaces.InformersFor(targetNamespace).Core().V1().Services().Informer(), kubeInformersForNamespaces.InformersFor(targetNamespace).Core().V1().Endpoints().Informer(), diff --git a/vendor/github.com/openshift/library-go/pkg/operator/apiserver/controller/auditpolicy/auditpolicy_controller.go b/vendor/github.com/openshift/library-go/pkg/operator/apiserver/controller/auditpolicy/auditpolicy_controller.go index 9695e69da..318bf2e52 100644 --- a/vendor/github.com/openshift/library-go/pkg/operator/apiserver/controller/auditpolicy/auditpolicy_controller.go +++ b/vendor/github.com/openshift/library-go/pkg/operator/apiserver/controller/auditpolicy/auditpolicy_controller.go @@ -38,7 +38,6 @@ func NewAuditPolicyController( name string, targetNamespace string, targetConfigMapName string, - apiserverConfigLister configv1listers.APIServerLister, operatorClient v1helpers.OperatorClient, kubeClient kubernetes.Interface, configInformers configinformers.SharedInformerFactory, @@ -48,13 +47,13 @@ func NewAuditPolicyController( c := &auditPolicyController{ controllerInstanceName: factory.ControllerInstanceName(name, "AuditPolicy"), operatorClient: operatorClient, - apiserverConfigLister: apiserverConfigLister, + apiserverConfigLister: configInformers.Config().V1().APIServers().Lister(), kubeClient: kubeClient, targetNamespace: targetNamespace, targetConfigMapName: targetConfigMapName, } - return factory.New().WithSync(c.sync).WithControllerInstanceName(c.controllerInstanceName).ResyncEvery(10*time.Second).WithInformers( + return factory.New().WithSync(c.sync).WithControllerInstanceName(c.controllerInstanceName).ResyncEvery(1*time.Minute).WithInformers( configInformers.Config().V1().APIServers().Informer(), kubeInformersForTargetNamesace.Core().V1().ConfigMaps().Informer(), operatorClient.Informer(), diff --git a/vendor/github.com/openshift/library-go/pkg/operator/apiserver/controllerset/apiservercontrollerset.go b/vendor/github.com/openshift/library-go/pkg/operator/apiserver/controllerset/apiservercontrollerset.go index 87311adee..39438998f 100644 --- a/vendor/github.com/openshift/library-go/pkg/operator/apiserver/controllerset/apiservercontrollerset.go +++ b/vendor/github.com/openshift/library-go/pkg/operator/apiserver/controllerset/apiservercontrollerset.go @@ -11,7 +11,6 @@ import ( openshiftconfigclientv1 "github.com/openshift/client-go/config/clientset/versioned/typed/config/v1" configinformers "github.com/openshift/client-go/config/informers/externalversions" configv1informers "github.com/openshift/client-go/config/informers/externalversions/config/v1" - configv1listers "github.com/openshift/client-go/config/listers/config/v1" "github.com/openshift/library-go/pkg/controller/factory" "github.com/openshift/library-go/pkg/operator/apiserver/controller/apiservice" "github.com/openshift/library-go/pkg/operator/apiserver/controller/auditpolicy" @@ -400,7 +399,6 @@ func (cs *APIServerControllerSet) WithoutEncryptionControllers() *APIServerContr func (cs *APIServerControllerSet) WithAuditPolicyController( targetNamespace string, targetConfigMapName string, - apiserverConfigLister configv1listers.APIServerLister, configInformers configinformers.SharedInformerFactory, kubeInformersForTargetNamesace kubeinformers.SharedInformerFactory, kubeClient kubernetes.Interface, @@ -409,7 +407,6 @@ func (cs *APIServerControllerSet) WithAuditPolicyController( cs.name, targetNamespace, targetConfigMapName, - apiserverConfigLister, cs.operatorClient, kubeClient, configInformers, diff --git a/vendor/github.com/openshift/multi-operator-manager/pkg/library/libraryapplyconfiguration/command.go b/vendor/github.com/openshift/multi-operator-manager/pkg/library/libraryapplyconfiguration/command.go index 06d446069..5dedf744f 100644 --- a/vendor/github.com/openshift/multi-operator-manager/pkg/library/libraryapplyconfiguration/command.go +++ b/vendor/github.com/openshift/multi-operator-manager/pkg/library/libraryapplyconfiguration/command.go @@ -34,7 +34,7 @@ type ApplyConfigurationInput struct { } // ApplyConfigurationFunc is a function called for applying configuration. -type ApplyConfigurationFunc func(ctx context.Context, applyConfigurationInput ApplyConfigurationInput) (AllDesiredMutationsGetter, error) +type ApplyConfigurationFunc func(ctx context.Context, applyConfigurationInput ApplyConfigurationInput) (*ApplyConfigurationRunResult, AllDesiredMutationsGetter, error) func NewApplyConfigurationCommand(applyConfigurationFn ApplyConfigurationFunc, outputResourcesFn libraryoutputresources.OutputResourcesFunc, streams genericiooptions.IOStreams) *cobra.Command { return newApplyConfigurationCommand(applyConfigurationFn, outputResourcesFn, streams) diff --git a/vendor/github.com/openshift/multi-operator-manager/pkg/library/libraryapplyconfiguration/directory_apply_configuration.go b/vendor/github.com/openshift/multi-operator-manager/pkg/library/libraryapplyconfiguration/directory_apply_configuration.go index 229ab1bff..72378eea5 100644 --- a/vendor/github.com/openshift/multi-operator-manager/pkg/library/libraryapplyconfiguration/directory_apply_configuration.go +++ b/vendor/github.com/openshift/multi-operator-manager/pkg/library/libraryapplyconfiguration/directory_apply_configuration.go @@ -4,7 +4,9 @@ import ( "errors" "fmt" "io/fs" + "k8s.io/apimachinery/pkg/util/json" "k8s.io/apimachinery/pkg/util/sets" + "k8s.io/apimachinery/pkg/util/yaml" "os" "path/filepath" ) @@ -14,15 +16,17 @@ type ApplyConfigurationResult interface { OutputDirectory() (string, error) Stdout() string Stderr() string + ControllerResults() *ApplyConfigurationRunResult AllDesiredMutationsGetter } type simpleApplyConfigurationResult struct { - err error - outputDirectory string - stdout string - stderr string + err error + outputDirectory string + stdout string + stderr string + controllerResults *ApplyConfigurationRunResult applyConfiguration *applyConfiguration } @@ -60,6 +64,26 @@ func NewApplyConfigurationResultFromDirectory(inFS fs.FS, outputDirectory string stderrContent = stderrContent[indexToStart:] } + var controllerResults *ApplyConfigurationRunResult + controllerResultsContent := []byte{} + controllerResultsLocation := filepath.Join(outputDirectory, "controller-results.yaml") + controllerResultsContent, err = fs.ReadFile(inFS, "controller-results.yaml") + if err != nil && !os.IsNotExist(err) { + errs = append(errs, fmt.Errorf("failed reading %q: %w", controllerResultsLocation, err)) + } + if len(controllerResultsContent) > 0 { + if asJSON, err := yaml.ToJSON(controllerResultsContent); err != nil { + errs = append(errs, fmt.Errorf("unable to convert controller-results.yaml to json: %w", err)) + } else { + localControllerResults := &ApplyConfigurationRunResult{} + if err := json.Unmarshal(asJSON, localControllerResults); err != nil { + errs = append(errs, fmt.Errorf("unable to parse controller-results.yaml: %w", err)) + } else { + controllerResults = localControllerResults + } + } + } + outputContent, err := fs.ReadDir(inFS, ".") switch { case errors.Is(err, fs.ErrNotExist) && execError != nil: @@ -85,6 +109,7 @@ func NewApplyConfigurationResultFromDirectory(inFS fs.FS, outputDirectory string ret := &simpleApplyConfigurationResult{ stdout: string(stdoutContent), stderr: string(stderrContent), + controllerResults: controllerResults, outputDirectory: outputDirectory, applyConfiguration: &applyConfiguration{}, } @@ -101,6 +126,9 @@ func NewApplyConfigurationResultFromDirectory(inFS fs.FS, outputDirectory string if currContent.Name() == "stderr.log" { continue } + if currContent.Name() == "controller-results.yaml" { + continue + } if !currContent.IsDir() { errs = append(errs, fmt.Errorf("unexpected file %q, only target cluster directories are: %v", filepath.Join(outputDirectory, currContent.Name()), sets.List(AllClusterTypes))) @@ -140,6 +168,10 @@ func (s *simpleApplyConfigurationResult) Error() error { return s.err } +func (s *simpleApplyConfigurationResult) ControllerResults() *ApplyConfigurationRunResult { + return s.controllerResults +} + func (s *simpleApplyConfigurationResult) OutputDirectory() (string, error) { return s.outputDirectory, nil } diff --git a/vendor/github.com/openshift/multi-operator-manager/pkg/library/libraryapplyconfiguration/equivalence.go b/vendor/github.com/openshift/multi-operator-manager/pkg/library/libraryapplyconfiguration/equivalence.go index 6af6a0e5f..538fa5a2f 100644 --- a/vendor/github.com/openshift/multi-operator-manager/pkg/library/libraryapplyconfiguration/equivalence.go +++ b/vendor/github.com/openshift/multi-operator-manager/pkg/library/libraryapplyconfiguration/equivalence.go @@ -9,11 +9,13 @@ import ( "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/yaml" + "reflect" ) func EquivalentApplyConfigurationResultIgnoringEvents(lhs, rhs ApplyConfigurationResult) []string { reasons := []string{} reasons = append(reasons, equivalentErrors("Error", lhs.Error(), rhs.Error())...) + reasons = append(reasons, equivalentRunResults("ControllerResults", lhs.ControllerResults(), rhs.ControllerResults())...) for _, clusterType := range sets.List(AllClusterTypes) { currLHS := lhs.MutationsForClusterType(clusterType) @@ -39,6 +41,23 @@ func equivalentErrors(field string, lhs, rhs error) []string { return reasons } +func equivalentRunResults(field string, lhs, rhs *ApplyConfigurationRunResult) []string { + reasons := []string{} + switch { + case lhs == nil && rhs == nil: + case lhs == nil && rhs != nil: + reasons = append(reasons, fmt.Sprintf("%v: lhs=nil, rhs=%v", field, rhs)) + case lhs != nil && rhs == nil: + reasons = append(reasons, fmt.Sprintf("%v: lhs=%v, rhs=nil", field, lhs)) + default: + if !reflect.DeepEqual(lhs, rhs) { + reasons = append(reasons, fmt.Sprintf("%v: diff: %v", field, cmp.Diff(lhs, rhs))) + } + } + + return reasons +} + func EquivalentClusterApplyResultIgnoringEvents(field string, lhs, rhs SingleClusterDesiredMutationGetter) []string { switch { case lhs == nil && rhs == nil: diff --git a/vendor/github.com/openshift/multi-operator-manager/pkg/library/libraryapplyconfiguration/operator_launch_helpers.go b/vendor/github.com/openshift/multi-operator-manager/pkg/library/libraryapplyconfiguration/operator_launch_helpers.go index 2bafc8d06..c29e47990 100644 --- a/vendor/github.com/openshift/multi-operator-manager/pkg/library/libraryapplyconfiguration/operator_launch_helpers.go +++ b/vendor/github.com/openshift/multi-operator-manager/pkg/library/libraryapplyconfiguration/operator_launch_helpers.go @@ -6,6 +6,7 @@ import ( "fmt" "math/rand" "reflect" + "runtime/debug" "strings" "time" @@ -18,7 +19,7 @@ import ( ) type OperatorStarter interface { - RunOnce(ctx context.Context) error + RunOnce(ctx context.Context, input ApplyConfigurationInput) (*ApplyConfigurationRunResult, AllDesiredMutationsGetter, error) Start(ctx context.Context) error } @@ -27,11 +28,6 @@ type SimpleOperatorStarter struct { ControllerNamedRunOnceFns []NamedRunOnce // ControllerRunFns is useful during a transition to coalesce the operator launching flow. ControllerRunFns []RunFunc - // Controllers hold an optional list of controller names to run. - // '*' means "all controllersFromFlags are enabled by default" - // 'foo' means "enable 'foo'" - // '-foo' means "disable 'foo'" - Controllers []string } var ( @@ -41,7 +37,7 @@ var ( _ SimplifiedInformerFactory = generatedNamespacedInformerFactory{} ) -func (a SimpleOperatorStarter) RunOnce(ctx context.Context) error { +func (a SimpleOperatorStarter) RunOnce(ctx context.Context, input ApplyConfigurationInput) (*ApplyConfigurationRunResult, AllDesiredMutationsGetter, error) { for _, informer := range a.Informers { informer.Start(ctx) } @@ -61,29 +57,53 @@ func (a SimpleOperatorStarter) RunOnce(ctx context.Context) error { knownControllersSet.Insert(controllerRunner.ControllerInstanceName()) } if len(duplicateControllerNames) > 0 { - return fmt.Errorf("the following controllers were requested to run multiple times: %v", duplicateControllerNames) + return nil, nil, fmt.Errorf("the following controllers were requested to run multiple times: %v", duplicateControllerNames) } - if errs := validateControllersFromFlags(knownControllersSet, a.Controllers); len(errs) > 0 { - return errors.Join(errs...) + if errs := validateControllersFromFlags(knownControllersSet, input.Controllers); len(errs) > 0 { + return nil, nil, errors.Join(errs...) } + allControllersRunResult := &ApplyConfigurationRunResult{} + shuffleNamedRunOnce(a.ControllerNamedRunOnceFns) errs := []error{} for _, controllerRunner := range a.ControllerNamedRunOnceFns { func() { - if !isControllerEnabled(controllerRunner.ControllerInstanceName(), a.Controllers) { + currControllerResult := ControllerRunResult{ + ControllerName: controllerRunner.ControllerInstanceName(), + Status: ControllerRunStatusUnknown, + } + defer func() { + if r := recover(); r != nil { + currControllerResult.Status = ControllerRunStatusPanicked + currControllerResult.PanicStack = fmt.Sprintf("%s\n%s", r, string(debug.Stack())) + } + allControllersRunResult.ControllerResults = append(allControllersRunResult.ControllerResults, currControllerResult) + }() + + if !isControllerEnabled(controllerRunner.ControllerInstanceName(), input.Controllers) { + currControllerResult.Status = ControllerRunStatusSkipped return } localCtx, localCancel := context.WithTimeout(ctx, 1*time.Second) defer localCancel() + localCtx = manifestclient.WithControllerInstanceNameFromContext(localCtx, controllerRunner.ControllerInstanceName()) if err := controllerRunner.RunOnce(localCtx); err != nil { + currControllerResult.Status = ControllerRunStatusFailed + currControllerResult.Errors = append(currControllerResult.Errors, ErrorDetails{Message: err.Error()}) errs = append(errs, fmt.Errorf("controller %q failed: %w", controllerRunner.ControllerInstanceName(), err)) + } else { + currControllerResult.Status = ControllerRunStatusSucceeded } }() } - return errors.Join(errs...) + + // canonicalize + CanonicalizeApplyConfigurationRunResult(allControllersRunResult) + + return allControllersRunResult, NewApplyConfigurationFromClient(input.MutationTrackingClient.GetMutations()), errors.Join(errs...) } func (a SimpleOperatorStarter) Start(ctx context.Context) error { diff --git a/vendor/github.com/openshift/multi-operator-manager/pkg/library/libraryapplyconfiguration/options.go b/vendor/github.com/openshift/multi-operator-manager/pkg/library/libraryapplyconfiguration/options.go index 5ce734f1b..40a1ba5e3 100644 --- a/vendor/github.com/openshift/multi-operator-manager/pkg/library/libraryapplyconfiguration/options.go +++ b/vendor/github.com/openshift/multi-operator-manager/pkg/library/libraryapplyconfiguration/options.go @@ -7,6 +7,7 @@ import ( "github.com/openshift/library-go/pkg/manifestclient" "os" "path/filepath" + "sigs.k8s.io/yaml" "github.com/openshift/multi-operator-manager/pkg/library/libraryoutputresources" ) @@ -44,19 +45,19 @@ func (o *applyConfigurationOptions) Run(ctx context.Context) error { errs = append(errs, err) } - result, err := o.applyConfigurationFn(ctx, o.input) + controllerResults, mutations, err := o.applyConfigurationFn(ctx, o.input) if err != nil { errs = append(errs, err) } // also validate the raw results because filtering may have eliminated "bad" output. - unspecifiedOutputResources := UnspecifiedOutputResources(result, allAllowedOutputResources) - if err := ValidateAllDesiredMutationsGetter(result, allAllowedOutputResources); err != nil { + unspecifiedOutputResources := UnspecifiedOutputResources(mutations, allAllowedOutputResources) + if err := ValidateAllDesiredMutationsGetter(mutations, allAllowedOutputResources); err != nil { errs = append(errs, err) } // now filter the results and check them - filteredResult := FilterAllDesiredMutationsGetter(result, allAllowedOutputResources) + filteredResult := FilterAllDesiredMutationsGetter(mutations, allAllowedOutputResources) if err := ValidateAllDesiredMutationsGetter(filteredResult, allAllowedOutputResources); err != nil { errs = append(errs, err) } @@ -70,5 +71,13 @@ func (o *applyConfigurationOptions) Run(ctx context.Context) error { } } + if controllerResultBytes, err := yaml.Marshal(controllerResults); err != nil { + errs = append(errs, fmt.Errorf("failed marshalling controller results: %w", err)) + } else { + if err := os.WriteFile(filepath.Join(o.outputDirectory, "controller-results.yaml"), controllerResultBytes, 0644); err != nil { + errs = append(errs, fmt.Errorf("failed writing controller results: %w", err)) + } + } + return errors.Join(errs...) } diff --git a/vendor/github.com/openshift/multi-operator-manager/pkg/library/libraryapplyconfiguration/types.go b/vendor/github.com/openshift/multi-operator-manager/pkg/library/libraryapplyconfiguration/types.go new file mode 100644 index 000000000..d920a2dbd --- /dev/null +++ b/vendor/github.com/openshift/multi-operator-manager/pkg/library/libraryapplyconfiguration/types.go @@ -0,0 +1,54 @@ +package libraryapplyconfiguration + +import ( + "slices" + "strings" +) + +type ApplyConfigurationRunResult struct { + ControllerResults []ControllerRunResult `json:"controllerResults"` +} + +type ControllerRunResult struct { + ControllerName string `json:"controllerName"` + Status ControllerRunStatus `json:"status"` + Errors []ErrorDetails `json:"errors,omitempty"` + PanicStack string `json:"panicStack,omitempty"` +} + +type ControllerRunStatus string + +var ( + ControllerRunStatusUnknown ControllerRunStatus = "Unknown" + ControllerRunStatusSucceeded ControllerRunStatus = "Succeeded" + ControllerRunStatusSkipped ControllerRunStatus = "Skipped" + ControllerRunStatusFailed ControllerRunStatus = "Failed" + ControllerRunStatusPanicked ControllerRunStatus = "Panicked" +) + +// TODO perhaps we add indications about interfaces this matches? +type ErrorDetails struct { + Message string `json:"message"` +} + +func CanonicalizeApplyConfigurationRunResult(obj *ApplyConfigurationRunResult) { + if obj == nil { + return + } + slices.SortStableFunc(obj.ControllerResults, sortControllerRunResult) +} + +// TODO sort with error details +func sortControllerRunResult(a, b ControllerRunResult) int { + if c := strings.Compare(a.ControllerName, b.ControllerName); c != 0 { + return c + } + if c := strings.Compare(string(a.Status), string(b.Status)); c != 0 { + return c + } + if c := strings.Compare(a.PanicStack, b.PanicStack); c != 0 { + return c + } + + return 0 +} diff --git a/vendor/github.com/openshift/multi-operator-manager/pkg/library/libraryinputresources/easy_creation.go b/vendor/github.com/openshift/multi-operator-manager/pkg/library/libraryinputresources/easy_creation.go index 30f96e7f0..b461c293b 100644 --- a/vendor/github.com/openshift/multi-operator-manager/pkg/library/libraryinputresources/easy_creation.go +++ b/vendor/github.com/openshift/multi-operator-manager/pkg/library/libraryinputresources/easy_creation.go @@ -53,11 +53,11 @@ func ExactClusterRoleBinding(name string) ExactResourceID { } func ExactRole(namespace, name string) ExactResourceID { - return ExactResource("rbac.authorization.k8s.io", "v1", "roles", "", name) + return ExactResource("rbac.authorization.k8s.io", "v1", "roles", namespace, name) } func ExactRoleBinding(namespace, name string) ExactResourceID { - return ExactResource("rbac.authorization.k8s.io", "v1", "rolebindings", "", name) + return ExactResource("rbac.authorization.k8s.io", "v1", "rolebindings", namespace, name) } func ExactConfigResource(resource string) ExactResourceID { diff --git a/vendor/github.com/openshift/multi-operator-manager/pkg/library/libraryinputresources/resource.go b/vendor/github.com/openshift/multi-operator-manager/pkg/library/libraryinputresources/resource.go index d40811331..67785935a 100644 --- a/vendor/github.com/openshift/multi-operator-manager/pkg/library/libraryinputresources/resource.go +++ b/vendor/github.com/openshift/multi-operator-manager/pkg/library/libraryinputresources/resource.go @@ -13,7 +13,6 @@ import ( "sigs.k8s.io/yaml" "github.com/google/go-cmp/cmp" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/util/sets" @@ -35,15 +34,43 @@ func (r Resource) ID() string { return fmt.Sprintf("%s/%s/%s/%s", r.ResourceType.Group, r.ResourceType.Resource, namespace, name) } -func LenientResourcesFromDirRecursive(location string) ([]*Resource, error) { - discoveryClient, err := NewDiscoveryClientFromMustGather(location) +func discoverResourcesFromMustGather(mustGatherDir string) (map[schema.GroupVersionKind][]schema.GroupVersionResource, error) { + discoveryClient, err := NewDiscoveryClientFromMustGather(mustGatherDir) if err != nil { - return nil, err + return nil, fmt.Errorf("failed creating discovery client: %w", err) } - _, apiResourceList, _, err := discoveryClient.GroupsAndMaybeResources() + _, gvToAPIResourceList, _, err := discoveryClient.GroupsAndMaybeResources() if err != nil { - return nil, fmt.Errorf("failed to get api resource list: %w", err) + return nil, fmt.Errorf("failed to get api resource list with GroupsAndMaybeResources: %w", err) + } + + gvkToResources := map[schema.GroupVersionKind][]schema.GroupVersionResource{} + for gv, apiResourceList := range gvToAPIResourceList { + for _, apiResource := range apiResourceList.APIResources { + if strings.Contains(apiResource.Name, "/") { + // Skip subresources + continue + } + gvk := schema.GroupVersionKind{ + Group: gv.Group, + Version: gv.Version, + Kind: apiResource.Kind, + } + gvkToResources[gvk] = append(gvkToResources[gvk], schema.GroupVersionResource{ + Group: gv.Group, + Version: gv.Version, + Resource: apiResource.Name, + }) + } + } + return gvkToResources, nil +} + +func LenientResourcesFromDirRecursive(location string) ([]*Resource, error) { + gvkToResources, err := discoverResourcesFromMustGather(location) + if err != nil { + return nil, fmt.Errorf("failed to discover resources from must-gather: %w", err) } currResourceList := []*Resource{} @@ -59,7 +86,7 @@ func LenientResourcesFromDirRecursive(location string) ([]*Resource, error) { if !strings.HasSuffix(currFile.Name(), ".yaml") && !strings.HasSuffix(currFile.Name(), ".json") { return nil } - currResource, err := ResourcesFromFile(apiResourceList, currLocation, location) + currResource, err := ResourcesFromFile(gvkToResources, currLocation, location) if err != nil { return fmt.Errorf("error deserializing %q: %w", currLocation, err) } @@ -74,37 +101,19 @@ func LenientResourcesFromDirRecursive(location string) ([]*Resource, error) { return currResourceList, errors.Join(errs...) } -func findGVR(resources map[schema.GroupVersion]*metav1.APIResourceList, gvk schema.GroupVersionKind) (*schema.GroupVersionResource, error) { - apiResourceList, ok := resources[gvk.GroupVersion()] - if !ok { - return nil, fmt.Errorf("failed to find api resource list for gvk %s", gvk) - } - - var matches []*schema.GroupVersionResource - for _, apiResource := range apiResourceList.APIResources { - if strings.Contains(apiResource.Name, "/") { - // Skip subresources - continue - } - if apiResource.Kind == gvk.Kind { - matches = append(matches, &schema.GroupVersionResource{ - Group: gvk.Group, - Version: gvk.Version, - Resource: apiResource.Name, - }) - } - } - switch len(matches) { +func findGVR(gvkToResources map[schema.GroupVersionKind][]schema.GroupVersionResource, gvk schema.GroupVersionKind) (*schema.GroupVersionResource, error) { + resources := gvkToResources[gvk] + switch len(resources) { case 1: - return matches[0], nil + return &resources[0], nil case 0: - return nil, fmt.Errorf("failed to find resource for gvk %s", gvk) + return nil, fmt.Errorf("no resources found for Group: %q, Version: %q, Kind: %q", gvk.Group, gvk.Version, gvk.Kind) default: - return nil, fmt.Errorf("multiple resources found for gvk %v", matches) + return nil, fmt.Errorf("multiple resources found for Group: %q, Version: %q, Kind: %q", gvk.Group, gvk.Version, gvk.Kind) } } -func ResourcesFromFile(apiResourceList map[schema.GroupVersion]*metav1.APIResourceList, location, fileTrimPrefix string) ([]*Resource, error) { +func ResourcesFromFile(gvkToResources map[schema.GroupVersionKind][]schema.GroupVersionResource, location, fileTrimPrefix string) ([]*Resource, error) { content, err := os.ReadFile(location) if err != nil { return nil, fmt.Errorf("unable to read %q: %w", location, err) @@ -135,7 +144,7 @@ func ResourcesFromFile(apiResourceList map[schema.GroupVersion]*metav1.APIResour // Short-circuit if the file contains a single resource if !resource.Content.IsList() { gvk := retContent.GroupVersionKind() - gvr, err := findGVR(apiResourceList, gvk) + gvr, err := findGVR(gvkToResources, gvk) if err != nil { return nil, fmt.Errorf("failed to find gvr: %w", err) } @@ -151,7 +160,7 @@ func ResourcesFromFile(apiResourceList map[schema.GroupVersion]*metav1.APIResour resources := make([]*Resource, 0, len(list.Items)) for _, item := range list.Items { - gvr, err := findGVR(apiResourceList, item.GroupVersionKind()) + gvr, err := findGVR(gvkToResources, item.GroupVersionKind()) if err != nil { return nil, fmt.Errorf("failed to find gvr: %w", err) } diff --git a/vendor/github.com/openshift/multi-operator-manager/pkg/library/libraryoutputresources/easy_creation.go b/vendor/github.com/openshift/multi-operator-manager/pkg/library/libraryoutputresources/easy_creation.go index 62b75f5cf..503700ff7 100644 --- a/vendor/github.com/openshift/multi-operator-manager/pkg/library/libraryoutputresources/easy_creation.go +++ b/vendor/github.com/openshift/multi-operator-manager/pkg/library/libraryoutputresources/easy_creation.go @@ -65,11 +65,11 @@ func ExactClusterRoleBinding(name string) ExactResourceID { } func ExactRole(namespace, name string) ExactResourceID { - return ExactResource("rbac.authorization.k8s.io", "v1", "roles", "", name) + return ExactResource("rbac.authorization.k8s.io", "v1", "roles", namespace, name) } func ExactRoleBinding(namespace, name string) ExactResourceID { - return ExactResource("rbac.authorization.k8s.io", "v1", "rolebindings", "", name) + return ExactResource("rbac.authorization.k8s.io", "v1", "rolebindings", namespace, name) } func ExactConfigResource(resource string) ExactResourceID { @@ -79,3 +79,15 @@ func ExactConfigResource(resource string) ExactResourceID { func GeneratedCSR(generateName string) GeneratedResourceID { return GeneratedResource("certificates.k8s.io", "v1", "certificatesigningrequests", "", generateName) } + +func ExactPDB(namespace, name string) ExactResourceID { + return ExactResource("policy", "v1", "poddisruptionbudgets", namespace, name) +} + +func ExactService(namespace, name string) ExactResourceID { + return ExactResource("", "v1", "services", namespace, name) +} + +func ExactOAuthClient(name string) ExactResourceID { + return ExactResource("oauth.openshift.io", "v1", "oauthclients", "", name) +} diff --git a/vendor/modules.txt b/vendor/modules.txt index 7c97b75fa..54753628d 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -175,7 +175,7 @@ github.com/modern-go/reflect2 # github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 ## explicit github.com/munnerz/goautoneg -# github.com/openshift/api v0.0.0-20241001152557-e415140e5d5f +# github.com/openshift/api v0.0.0-20241101202457-04eb3fd119d2 ## explicit; go 1.22.0 github.com/openshift/api github.com/openshift/api/annotations @@ -248,7 +248,7 @@ github.com/openshift/api/template github.com/openshift/api/template/v1 github.com/openshift/api/user github.com/openshift/api/user/v1 -# github.com/openshift/build-machinery-go v0.0.0-20241031155326-6ae126a9cb72 +# github.com/openshift/build-machinery-go v0.0.0-20241126220845-0de670012c09 ## explicit; go 1.22.0 github.com/openshift/build-machinery-go github.com/openshift/build-machinery-go/make @@ -315,7 +315,7 @@ github.com/openshift/client-go/user/applyconfigurations/internal github.com/openshift/client-go/user/applyconfigurations/user/v1 github.com/openshift/client-go/user/clientset/versioned/scheme github.com/openshift/client-go/user/clientset/versioned/typed/user/v1 -# github.com/openshift/library-go v0.0.0-20241120135057-fc703a7407c9 +# github.com/openshift/library-go v0.0.0-20241127135410-64d8d9e80808 ## explicit; go 1.22.0 github.com/openshift/library-go/pkg/apiserver/jsonpatch github.com/openshift/library-go/pkg/apps/deployment @@ -387,7 +387,7 @@ github.com/openshift/library-go/pkg/route/routeapihelpers github.com/openshift/library-go/pkg/serviceability github.com/openshift/library-go/test/library github.com/openshift/library-go/test/library/encryption -# github.com/openshift/multi-operator-manager v0.0.0-20241119235446-3c965870ef94 +# github.com/openshift/multi-operator-manager v0.0.0-20241205181422-20aa3906b99d ## explicit; go 1.22.0 github.com/openshift/multi-operator-manager/pkg/flagtypes github.com/openshift/multi-operator-manager/pkg/library/libraryapplyconfiguration From 456a46c01065e2367fb3159b9c242f9df5a636e6 Mon Sep 17 00:00:00 2001 From: David Eads Date: Tue, 26 Nov 2024 11:50:50 -0500 Subject: [PATCH 2/4] MOM fitting --- pkg/cmd/mom/apply_configuration_command.go | 13 ++++--------- pkg/operator/starter.go | 1 - 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/pkg/cmd/mom/apply_configuration_command.go b/pkg/cmd/mom/apply_configuration_command.go index 19223f7f1..fb2e9fc86 100644 --- a/pkg/cmd/mom/apply_configuration_command.go +++ b/pkg/cmd/mom/apply_configuration_command.go @@ -14,19 +14,14 @@ func NewApplyConfigurationCommand(streams genericiooptions.IOStreams) *cobra.Com return libraryapplyconfiguration.NewApplyConfigurationCommand(RunApplyConfiguration, runOutputResources, streams) } -func RunApplyConfiguration(ctx context.Context, input libraryapplyconfiguration.ApplyConfigurationInput) (libraryapplyconfiguration.AllDesiredMutationsGetter, error) { +func RunApplyConfiguration(ctx context.Context, input libraryapplyconfiguration.ApplyConfigurationInput) (*libraryapplyconfiguration.ApplyConfigurationRunResult, libraryapplyconfiguration.AllDesiredMutationsGetter, error) { authenticationOperatorInput, err := operator.CreateOperatorInputFromMOM(ctx, input) if err != nil { - return nil, fmt.Errorf("unable to configure operator input: %w", err) + return nil, nil, fmt.Errorf("unable to configure operator input: %w", err) } operatorStarter, err := operator.CreateOperatorStarter(ctx, authenticationOperatorInput) if err != nil { - return nil, fmt.Errorf("unable to configure operators: %w", err) + return nil, nil, fmt.Errorf("unable to configure operators: %w", err) } - var operatorRunError error - if err := operatorStarter.RunOnce(ctx); err != nil { - operatorRunError = fmt.Errorf("unable to run operators: %w", err) - } - - return libraryapplyconfiguration.NewApplyConfigurationFromClient(input.MutationTrackingClient.GetMutations()), operatorRunError + return operatorStarter.RunOnce(ctx, input) } diff --git a/pkg/operator/starter.go b/pkg/operator/starter.go index 2967dc83d..8ac92d3a0 100644 --- a/pkg/operator/starter.go +++ b/pkg/operator/starter.go @@ -551,7 +551,6 @@ func prepareOauthAPIServerOperator( ).WithAuditPolicyController( "openshift-oauth-apiserver", "audit", - informerFactories.operatorConfigInformer.Config().V1().APIServers().Lister(), informerFactories.operatorConfigInformer, informerFactories.kubeInformersForNamespaces.InformersFor("openshift-oauth-apiserver"), authOperatorInput.kubeClient, From 9c1aac2a8d8a37006149b1783c3ec2902e1da757 Mon Sep 17 00:00:00 2001 From: David Eads Date: Thu, 5 Dec 2024 12:30:29 -0500 Subject: [PATCH 3/4] add resource output --- pkg/cmd/mom/output_resources_command.go | 48 +++++++++++-------------- 1 file changed, 20 insertions(+), 28 deletions(-) diff --git a/pkg/cmd/mom/output_resources_command.go b/pkg/cmd/mom/output_resources_command.go index 1772466c8..099aed7db 100644 --- a/pkg/cmd/mom/output_resources_command.go +++ b/pkg/cmd/mom/output_resources_command.go @@ -22,17 +22,22 @@ func runOutputResources(ctx context.Context) (*libraryoutputresources.OutputReso ManagementResources: libraryoutputresources.ResourceList{ ExactResources: []libraryoutputresources.ExactResourceID{ libraryoutputresources.ExactClusterOperator("authentication"), + libraryoutputresources.ExactLowLevelOperator("authentications"), + libraryoutputresources.ExactNamespace("openshift-authentication"), + libraryoutputresources.ExactNamespace("openshift-oauth-apiserver"), + libraryoutputresources.ExactConfigMap("openshift-authentication", "audit"), libraryoutputresources.ExactConfigMap("openshift-authentication", "v4-0-config-system-trusted-ca-bundle"), libraryoutputresources.ExactDeployment("openshift-authentication", "oauth-openshift"), - libraryoutputresources.ExactLowLevelOperator("authentications"), - exactNamespace("openshift-authentication"), - exactRole("openshift-config-managed", "system:openshift:oauth-servercert-trust"), - exactRoleBinding("openshift-config-managed", "system:openshift:oauth-servercert-trust"), libraryoutputresources.ExactSecret("openshift-authentication", "v4-0-config-system-session"), libraryoutputresources.ExactSecret("openshift-authentication", "v4-0-config-system-ocp-branding-template"), - exactService("openshift-authentication", "oauth-openshift"), + libraryoutputresources.ExactService("openshift-authentication", "oauth-openshift"), libraryoutputresources.ExactServiceAccount("openshift-authentication", "oauth-openshift"), + + libraryoutputresources.ExactRole("openshift-config-managed", "system:openshift:oauth-servercert-trust"), + libraryoutputresources.ExactRoleBinding("openshift-config-managed", "system:openshift:oauth-servercert-trust"), + + libraryoutputresources.ExactPDB("openshift-oauth-apiserver", "oauth-apiserver-pdb"), }, EventingNamespaces: []string{ "openshift-authentication-operator", @@ -41,9 +46,16 @@ func runOutputResources(ctx context.Context) (*libraryoutputresources.OutputReso UserWorkloadResources: libraryoutputresources.ResourceList{ ExactResources: []libraryoutputresources.ExactResourceID{ libraryoutputresources.ExactClusterRoleBinding("system:openshift:openshift-authentication"), - exactOAuthClient("openshift-browser-client"), - exactOAuthClient("openshift-challenging-client"), - exactOAuthClient("openshift-cli-client"), + libraryoutputresources.ExactClusterRoleBinding("system:openshift:oauth-apiserver"), + libraryoutputresources.ExactClusterRoleBinding("system:openshift:useroauthaccesstoken-manager"), + libraryoutputresources.ExactClusterRole("system:openshift:useroauthaccesstoken-manager"), + libraryoutputresources.ExactOAuthClient("openshift-browser-client"), + libraryoutputresources.ExactOAuthClient("openshift-challenging-client"), + libraryoutputresources.ExactOAuthClient("openshift-cli-client"), + + // these are used to access resources in the user workload cluster + libraryoutputresources.ExactServiceAccount("openshift-oauth-apiserver", "oauth-apiserver-sa"), + libraryoutputresources.ExactService("openshift-oauth-apiserver", "api"), }, GeneratedNameResources: []libraryoutputresources.GeneratedResourceID{ libraryoutputresources.GeneratedCSR("system:openshift:openshift-authenticator-"), @@ -51,23 +63,3 @@ func runOutputResources(ctx context.Context) (*libraryoutputresources.OutputReso }, }, nil } - -func exactOAuthClient(name string) libraryoutputresources.ExactResourceID { - return libraryoutputresources.ExactResource("oauth.openshift.io", "v1", "oauthclients", "", name) -} - -func exactNamespace(name string) libraryoutputresources.ExactResourceID { - return libraryoutputresources.ExactNamespace(name) -} - -func exactService(namespace, name string) libraryoutputresources.ExactResourceID { - return libraryoutputresources.ExactResource("", "v1", "services", namespace, name) -} - -func exactRole(namespace, name string) libraryoutputresources.ExactResourceID { - return libraryoutputresources.ExactRole(namespace, name) -} - -func exactRoleBinding(namespace, name string) libraryoutputresources.ExactResourceID { - return libraryoutputresources.ExactRoleBinding(namespace, name) -} From 4bdbff351aa89f5a9711b4f0946650e88ad2fb12 Mon Sep 17 00:00:00 2001 From: David Eads Date: Tue, 26 Nov 2024 11:55:04 -0500 Subject: [PATCH 4/4] update generated test output --- ...dy-cluster.yaml => 0ded-body-cluster.yaml} | 2 - .../0ded-metadata-cluster.yaml | 9 ++ ...cluster.yaml => 0ded-options-cluster.yaml} | 0 .../authentications/0f09-body-cluster.yaml | 12 ++ .../0f09-metadata-cluster.yaml | 9 ++ .../authentications/0f09-options-cluster.yaml | 2 + ...dy-cluster.yaml => 125f-body-cluster.yaml} | 2 - .../125f-metadata-cluster.yaml | 9 ++ ...cluster.yaml => 125f-options-cluster.yaml} | 0 .../authentications/1b61-body-cluster.yaml | 14 +++ .../1b61-metadata-cluster.yaml | 9 ++ .../authentications/1b61-options-cluster.yaml | 2 + ...dy-cluster.yaml => 2887-body-cluster.yaml} | 2 - .../2887-metadata-cluster.yaml | 9 ++ ...cluster.yaml => 2887-options-cluster.yaml} | 0 .../authentications/3fff-body-cluster.yaml | 26 ++++ .../3fff-metadata-cluster.yaml | 9 ++ .../authentications/3fff-options-cluster.yaml | 2 + .../authentications/44e5-body-cluster.yaml | 9 ++ .../44e5-metadata-cluster.yaml | 9 ++ .../authentications/44e5-options-cluster.yaml | 2 + ...dy-cluster.yaml => 4c2c-body-cluster.yaml} | 2 - .../4c2c-metadata-cluster.yaml | 9 ++ ...cluster.yaml => 4c2c-options-cluster.yaml} | 0 .../authentications/4c68-body-cluster.yaml | 9 ++ .../4c68-metadata-cluster.yaml | 9 ++ .../authentications/4c68-options-cluster.yaml | 2 + ...dy-cluster.yaml => 4dff-body-cluster.yaml} | 4 +- .../4dff-metadata-cluster.yaml | 9 ++ ...cluster.yaml => 4dff-options-cluster.yaml} | 0 .../authentications/4ee1-body-cluster.yaml | 9 ++ .../4ee1-metadata-cluster.yaml | 9 ++ .../authentications/4ee1-options-cluster.yaml | 2 + ...dy-cluster.yaml => 5731-body-cluster.yaml} | 2 - .../5731-metadata-cluster.yaml | 9 ++ ...cluster.yaml => 5731-options-cluster.yaml} | 0 ...dy-cluster.yaml => 5bb4-body-cluster.yaml} | 2 - .../5bb4-metadata-cluster.yaml | 9 ++ ...cluster.yaml => 5bb4-options-cluster.yaml} | 0 ...dy-cluster.yaml => 6ad2-body-cluster.yaml} | 2 - .../6ad2-metadata-cluster.yaml | 9 ++ ...cluster.yaml => 6ad2-options-cluster.yaml} | 0 ...dy-cluster.yaml => 6db2-body-cluster.yaml} | 2 - .../6db2-metadata-cluster.yaml | 9 ++ ...cluster.yaml => 6db2-options-cluster.yaml} | 0 .../authentications/7a7d-body-cluster.yaml | 12 ++ .../7a7d-metadata-cluster.yaml | 9 ++ .../authentications/7a7d-options-cluster.yaml | 2 + ...dy-cluster.yaml => 8111-body-cluster.yaml} | 2 - .../8111-metadata-cluster.yaml | 9 ++ ...cluster.yaml => 8111-options-cluster.yaml} | 0 ...dy-cluster.yaml => 8595-body-cluster.yaml} | 2 - .../8595-metadata-cluster.yaml | 9 ++ ...cluster.yaml => 8595-options-cluster.yaml} | 0 ...dy-cluster.yaml => 9b4b-body-cluster.yaml} | 2 - .../9b4b-metadata-cluster.yaml | 9 ++ ...cluster.yaml => 9b4b-options-cluster.yaml} | 0 .../authentications/b899-body-cluster.yaml | 9 ++ .../b899-metadata-cluster.yaml | 9 ++ .../authentications/b899-options-cluster.yaml | 2 + ...dy-cluster.yaml => b8b9-body-cluster.yaml} | 2 - .../b8b9-metadata-cluster.yaml | 9 ++ ...cluster.yaml => b8b9-options-cluster.yaml} | 0 ...dy-cluster.yaml => d306-body-cluster.yaml} | 5 +- .../d306-metadata-cluster.yaml | 9 ++ ...cluster.yaml => d306-options-cluster.yaml} | 0 ...dy-cluster.yaml => d317-body-cluster.yaml} | 2 - .../d317-metadata-cluster.yaml | 9 ++ ...cluster.yaml => d317-options-cluster.yaml} | 0 ...dy-cluster.yaml => d3e4-body-cluster.yaml} | 2 - .../d3e4-metadata-cluster.yaml | 9 ++ ...cluster.yaml => d3e4-options-cluster.yaml} | 0 .../authentications/f1b1-body-cluster.yaml | 11 ++ .../f1b1-metadata-cluster.yaml | 9 ++ .../authentications/f1b1-options-cluster.yaml | 2 + .../ca52-body-authentication.yaml | 8 ++ .../ca52-metadata-authentication.yaml | 8 ++ .../5657-body-openshift-oauth-apiserver.yaml | 15 +++ ...57-metadata-openshift-oauth-apiserver.yaml | 8 ++ ...> 9a55-body-openshift-authentication.yaml} | 1 - ...a55-metadata-openshift-authentication.yaml | 8 ++ ...hentication-operator.1802f6e485250051.yaml | 24 ---- ...hentication-operator.1802f6e485319d7b.yaml | 34 ------ ...n-operator.17fe72c59b829800.cc404894.yaml} | 6 +- ...on-operator.17fe72c59b829800.cc404894.yaml | 9 ++ ...hentication-operator.1802f6e4d892e853.yaml | 21 ---- ...hentication-operator.1802f6e4d8c17be2.yaml | 27 ----- ...n-operator.17fe72c59b829800.327a2f38.yaml} | 6 +- ...on-operator.17fe72c59b829800.327a2f38.yaml | 9 ++ ...n-operator.17fe72c59b829800.87c2a194.yaml} | 6 +- ...on-operator.17fe72c59b829800.87c2a194.yaml | 9 ++ ...n-operator.17fe72c59b829800.da44325f.yaml} | 6 +- ...on-operator.17fe72c59b829800.da44325f.yaml | 9 ++ ...on-operator.17fe72c59b829800.9dfc3b5d.yaml | 22 ++++ ...on-operator.17fe72c59b829800.9dfc3b5d.yaml | 9 ++ ...on-operator.17fe72c59b829800.b2cdb588.yaml | 29 +++++ ...on-operator.17fe72c59b829800.b2cdb588.yaml | 9 ++ ...n-operator.17fe72c59b829800.07abf400.yaml} | 6 +- ...on-operator.17fe72c59b829800.07abf400.yaml | 9 ++ ...on-operator.17fe72c59b829800.adf05e91.yaml | 22 ++++ ...on-operator.17fe72c59b829800.adf05e91.yaml | 9 ++ ...n-operator.17fe72c59b829800.fd7c2a06.yaml} | 6 +- ...on-operator.17fe72c59b829800.fd7c2a06.yaml | 9 ++ ...on-operator.17fe72c59b829800.651f7f3f.yaml | 22 ++++ ...on-operator.17fe72c59b829800.651f7f3f.yaml | 9 ++ ...on-operator.17fe72c59b829800.d64f6f23.yaml | 25 ++++ ...on-operator.17fe72c59b829800.d64f6f23.yaml | 9 ++ ...n-operator.17fe72c59b829800.44a05c38.yaml} | 6 +- ...on-operator.17fe72c59b829800.44a05c38.yaml | 9 ++ ...on-operator.17fe72c59b829800.c605caf3.yaml | 22 ++++ ...on-operator.17fe72c59b829800.c605caf3.yaml | 9 ++ ...on-operator.17fe72c59b829800.ad6de22d.yaml | 31 +++++ ...on-operator.17fe72c59b829800.ad6de22d.yaml | 9 ++ ...n-operator.17fe72c59b829800.b8ffb9fd.yaml} | 6 +- ...on-operator.17fe72c59b829800.b8ffb9fd.yaml | 9 ++ ...on-operator.17fe72c59b829800.c1353886.yaml | 21 ++++ ...on-operator.17fe72c59b829800.c1353886.yaml | 9 ++ ...on-operator.17fe72c59b829800.52f3c122.yaml | 21 ++++ ...on-operator.17fe72c59b829800.52f3c122.yaml | 9 ++ ...n-operator.17fe72c59b829800.a18021d9.yaml} | 6 +- ...on-operator.17fe72c59b829800.a18021d9.yaml | 9 ++ ...n-operator.17fe72c59b829800.a1759283.yaml} | 6 +- ...on-operator.17fe72c59b829800.a1759283.yaml | 9 ++ ...n-operator.17fe72c59b829800.8953695d.yaml} | 6 +- ...on-operator.17fe72c59b829800.8953695d.yaml | 9 ++ ...on-operator.17fe72c59b829800.9b8e044a.yaml | 21 ++++ ...on-operator.17fe72c59b829800.9b8e044a.yaml | 9 ++ ...n-operator.17fe72c59b829800.e6f3afa2.yaml} | 6 +- ...on-operator.17fe72c59b829800.e6f3afa2.yaml | 9 ++ ...n-operator.17fe72c59b829800.c1403ea8.yaml} | 6 +- ...on-operator.17fe72c59b829800.c1403ea8.yaml | 9 ++ ...n-operator.17fe72c59b829800.49fb0e36.yaml} | 6 +- ...on-operator.17fe72c59b829800.49fb0e36.yaml | 9 ++ ...n-operator.17fe72c59b829800.ce8a3f4a.yaml} | 6 +- ...on-operator.17fe72c59b829800.ce8a3f4a.yaml | 9 ++ ...n-operator.17fe72c59b829800.6c145ec7.yaml} | 6 +- ...on-operator.17fe72c59b829800.6c145ec7.yaml | 9 ++ ...n-operator.17fe72c59b829800.a8ecfbce.yaml} | 6 +- ...on-operator.17fe72c59b829800.a8ecfbce.yaml | 9 ++ ...on-operator.17fe72c59b829800.103eb7f4.yaml | 22 ++++ ...on-operator.17fe72c59b829800.103eb7f4.yaml | 9 ++ ...v4-0-config-system-trusted-ca-bundle.yaml} | 2 - ...-v4-0-config-system-trusted-ca-bundle.yaml | 9 ++ ...7-body-audit.yaml => 84c5-body-audit.yaml} | 2 - .../core/configmaps/84c5-metadata-audit.yaml | 9 ++ ...c23d-body-v4-0-config-system-session.yaml} | 4 +- ...d-metadata-v4-0-config-system-session.yaml | 9 ++ ...-config-system-ocp-branding-template.yaml} | 2 - ...0-config-system-ocp-branding-template.yaml | 9 ++ ...ft.yaml => e784-body-oauth-openshift.yaml} | 2 - .../e784-metadata-oauth-openshift.yaml | 9 ++ ...ft.yaml => 421e-body-oauth-openshift.yaml} | 1 - .../421e-metadata-oauth-openshift.yaml | 9 ++ ...enshift-COLON-oauth-servercert-trust.yaml} | 2 - ...penshift-COLON-oauth-servercert-trust.yaml | 9 ++ ...enshift-COLON-oauth-servercert-trust.yaml} | 2 - ...penshift-COLON-oauth-servercert-trust.yaml | 9 ++ .../5a7c-body-oauth-apiserver-pdb.yaml | 18 +++ .../5a7c-metadata-oauth-apiserver-pdb.yaml | 9 ++ ...dy-cluster.yaml => 11e6-body-cluster.yaml} | 1 - .../11e6-metadata-cluster.yaml | 8 ++ ...dy-cluster.yaml => e1f4-body-cluster.yaml} | 2 +- .../e1f4-metadata-cluster.yaml | 8 ++ .../0598-body-authentication.yaml | 71 +++++++++++ .../0598-metadata-authentication.yaml | 8 ++ ...shift-COLON-openshift-authenticator-.yaml} | 4 +- ...nshift-COLON-openshift-authenticator-.yaml | 8 ++ ...COLON-openshift-COLON-oauth-apiserver.yaml | 13 ++ ...COLON-openshift-COLON-oauth-apiserver.yaml | 8 ++ ...shift-COLON-openshift-authentication.yaml} | 2 - ...nshift-COLON-openshift-authentication.yaml | 8 ++ ...ft-COLON-useroauthaccesstoken-manager.yaml | 13 ++ ...ft-COLON-useroauthaccesstoken-manager.yaml | 8 ++ ...ft-COLON-useroauthaccesstoken-manager.yaml | 17 +++ ...ft-COLON-useroauthaccesstoken-manager.yaml | 8 ++ .../4ddd-body-oauth-apiserver-sa.yaml | 6 + .../4ddd-metadata-oauth-apiserver-sa.yaml | 9 ++ .../core/services/dfd1-body-api.yaml | 22 ++++ .../core/services/dfd1-metadata-api.yaml | 9 ++ .../expected-output/controller-results.yaml | 112 ++++++++++++++++++ 180 files changed, 1402 insertions(+), 216 deletions(-) rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/{011-body-cluster.yaml => 0ded-body-cluster.yaml} (83%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/0ded-metadata-cluster.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/{011-options-cluster.yaml => 0ded-options-cluster.yaml} (100%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/0f09-body-cluster.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/0f09-metadata-cluster.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/0f09-options-cluster.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/{002-body-cluster.yaml => 125f-body-cluster.yaml} (71%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/125f-metadata-cluster.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/{002-options-cluster.yaml => 125f-options-cluster.yaml} (100%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/1b61-body-cluster.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/1b61-metadata-cluster.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/1b61-options-cluster.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/{001-body-cluster.yaml => 2887-body-cluster.yaml} (82%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/2887-metadata-cluster.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/{001-options-cluster.yaml => 2887-options-cluster.yaml} (100%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/3fff-body-cluster.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/3fff-metadata-cluster.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/3fff-options-cluster.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/44e5-body-cluster.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/44e5-metadata-cluster.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/44e5-options-cluster.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/{040-body-cluster.yaml => 4c2c-body-cluster.yaml} (80%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/4c2c-metadata-cluster.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/{040-options-cluster.yaml => 4c2c-options-cluster.yaml} (100%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/4c68-body-cluster.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/4c68-metadata-cluster.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/4c68-options-cluster.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/{047-body-cluster.yaml => 4dff-body-cluster.yaml} (82%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/4dff-metadata-cluster.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/{047-options-cluster.yaml => 4dff-options-cluster.yaml} (100%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/4ee1-body-cluster.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/4ee1-metadata-cluster.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/4ee1-options-cluster.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/{037-body-cluster.yaml => 5731-body-cluster.yaml} (75%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/5731-metadata-cluster.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/{037-options-cluster.yaml => 5731-options-cluster.yaml} (100%) rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/{038-body-cluster.yaml => 5bb4-body-cluster.yaml} (74%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/5bb4-metadata-cluster.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/{038-options-cluster.yaml => 5bb4-options-cluster.yaml} (100%) rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/{010-body-cluster.yaml => 6ad2-body-cluster.yaml} (66%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/6ad2-metadata-cluster.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/{010-options-cluster.yaml => 6ad2-options-cluster.yaml} (100%) rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/{009-body-cluster.yaml => 6db2-body-cluster.yaml} (90%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/6db2-metadata-cluster.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/{009-options-cluster.yaml => 6db2-options-cluster.yaml} (100%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/7a7d-body-cluster.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/7a7d-metadata-cluster.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/7a7d-options-cluster.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/{036-body-cluster.yaml => 8111-body-cluster.yaml} (78%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/8111-metadata-cluster.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/{036-options-cluster.yaml => 8111-options-cluster.yaml} (100%) rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/{014-body-cluster.yaml => 8595-body-cluster.yaml} (90%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/8595-metadata-cluster.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/{014-options-cluster.yaml => 8595-options-cluster.yaml} (100%) rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/{035-body-cluster.yaml => 9b4b-body-cluster.yaml} (72%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/9b4b-metadata-cluster.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/{035-options-cluster.yaml => 9b4b-options-cluster.yaml} (100%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/b899-body-cluster.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/b899-metadata-cluster.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/b899-options-cluster.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/{039-body-cluster.yaml => b8b9-body-cluster.yaml} (82%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/b8b9-metadata-cluster.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/{039-options-cluster.yaml => b8b9-options-cluster.yaml} (100%) rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/{008-body-cluster.yaml => d306-body-cluster.yaml} (73%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/d306-metadata-cluster.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/{008-options-cluster.yaml => d306-options-cluster.yaml} (100%) rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/{015-body-cluster.yaml => d317-body-cluster.yaml} (78%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/d317-metadata-cluster.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/{015-options-cluster.yaml => d317-options-cluster.yaml} (100%) rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/{016-body-cluster.yaml => d3e4-body-cluster.yaml} (82%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/d3e4-metadata-cluster.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/{016-options-cluster.yaml => d3e4-options-cluster.yaml} (100%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/f1b1-body-cluster.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/f1b1-metadata-cluster.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/f1b1-options-cluster.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/cluster-scoped-resources/config.openshift.io/clusteroperators/ca52-body-authentication.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/cluster-scoped-resources/config.openshift.io/clusteroperators/ca52-metadata-authentication.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/cluster-scoped-resources/core/namespaces/5657-body-openshift-oauth-apiserver.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/cluster-scoped-resources/core/namespaces/5657-metadata-openshift-oauth-apiserver.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/cluster-scoped-resources/core/namespaces/{019-body-openshift-authentication.yaml => 9a55-body-openshift-authentication.yaml} (82%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/cluster-scoped-resources/core/namespaces/9a55-metadata-openshift-authentication.yaml delete mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/005-body-authentication-operator.1802f6e485250051.yaml delete mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/006-body-authentication-operator.1802f6e485319d7b.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/{050-body-authentication-operator.1802f6e4f057efb3.yaml => 006e-body-authentication-operator.17fe72c59b829800.cc404894.yaml} (77%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/006e-metadata-authentication-operator.17fe72c59b829800.cc404894.yaml delete mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/042-body-authentication-operator.1802f6e4d892e853.yaml delete mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/045-body-authentication-operator.1802f6e4d8c17be2.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/{032-body-authentication-operator.1802f6e48ff304ac.yaml => 1149-body-authentication-operator.17fe72c59b829800.327a2f38.yaml} (80%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/1149-metadata-authentication-operator.17fe72c59b829800.327a2f38.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/{041-body-authentication-operator.1802f6e4d8827d4e.yaml => 13d7-body-authentication-operator.17fe72c59b829800.87c2a194.yaml} (78%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/13d7-metadata-authentication-operator.17fe72c59b829800.87c2a194.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/{048-body-authentication-operator.1802f6e4f04c905b.yaml => 13fd-body-authentication-operator.17fe72c59b829800.da44325f.yaml} (81%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/13fd-metadata-authentication-operator.17fe72c59b829800.da44325f.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/1f51-body-authentication-operator.17fe72c59b829800.9dfc3b5d.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/1f51-metadata-authentication-operator.17fe72c59b829800.9dfc3b5d.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/2e46-body-authentication-operator.17fe72c59b829800.b2cdb588.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/2e46-metadata-authentication-operator.17fe72c59b829800.b2cdb588.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/{030-body-authentication-operator.1802f6e48fdd4ac1.yaml => 30b9-body-authentication-operator.17fe72c59b829800.07abf400.yaml} (78%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/30b9-metadata-authentication-operator.17fe72c59b829800.07abf400.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/32eb-body-authentication-operator.17fe72c59b829800.adf05e91.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/32eb-metadata-authentication-operator.17fe72c59b829800.adf05e91.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/{026-body-authentication-operator.1802f6e48e09fa9a.yaml => 357b-body-authentication-operator.17fe72c59b829800.fd7c2a06.yaml} (79%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/357b-metadata-authentication-operator.17fe72c59b829800.fd7c2a06.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/37d9-body-authentication-operator.17fe72c59b829800.651f7f3f.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/37d9-metadata-authentication-operator.17fe72c59b829800.651f7f3f.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/3c60-body-authentication-operator.17fe72c59b829800.d64f6f23.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/3c60-metadata-authentication-operator.17fe72c59b829800.d64f6f23.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/{004-body-authentication-operator.1802f6e4851e3ce9.yaml => 3ca6-body-authentication-operator.17fe72c59b829800.44a05c38.yaml} (77%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/3ca6-metadata-authentication-operator.17fe72c59b829800.44a05c38.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/49ea-body-authentication-operator.17fe72c59b829800.c605caf3.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/49ea-metadata-authentication-operator.17fe72c59b829800.c605caf3.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/5169-body-authentication-operator.17fe72c59b829800.ad6de22d.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/5169-metadata-authentication-operator.17fe72c59b829800.ad6de22d.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/{044-body-authentication-operator.1802f6e4d8b05b26.yaml => 5a6e-body-authentication-operator.17fe72c59b829800.b8ffb9fd.yaml} (78%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/5a6e-metadata-authentication-operator.17fe72c59b829800.b8ffb9fd.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/6303-body-authentication-operator.17fe72c59b829800.c1353886.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/6303-metadata-authentication-operator.17fe72c59b829800.c1353886.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/6413-body-authentication-operator.17fe72c59b829800.52f3c122.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/6413-metadata-authentication-operator.17fe72c59b829800.52f3c122.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/{024-body-authentication-operator.1802f6e485e9875b.yaml => 72b5-body-authentication-operator.17fe72c59b829800.a18021d9.yaml} (79%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/72b5-metadata-authentication-operator.17fe72c59b829800.a18021d9.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/{013-body-authentication-operator.1802f6e48582e420.yaml => 9650-body-authentication-operator.17fe72c59b829800.a1759283.yaml} (79%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/9650-metadata-authentication-operator.17fe72c59b829800.a1759283.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/{034-body-authentication-operator.1802f6e49003180c.yaml => a103-body-authentication-operator.17fe72c59b829800.8953695d.yaml} (80%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/a103-metadata-authentication-operator.17fe72c59b829800.8953695d.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/adcf-body-authentication-operator.17fe72c59b829800.9b8e044a.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/adcf-metadata-authentication-operator.17fe72c59b829800.9b8e044a.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/{028-body-authentication-operator.1802f6e48fc5bf22.yaml => ba68-body-authentication-operator.17fe72c59b829800.e6f3afa2.yaml} (79%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/ba68-metadata-authentication-operator.17fe72c59b829800.e6f3afa2.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/{022-body-authentication-operator.1802f6e485dc1cda.yaml => bdd9-body-authentication-operator.17fe72c59b829800.c1403ea8.yaml} (80%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/bdd9-metadata-authentication-operator.17fe72c59b829800.c1403ea8.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/{043-body-authentication-operator.1802f6e4d8a0b2ab.yaml => bf8a-body-authentication-operator.17fe72c59b829800.49fb0e36.yaml} (85%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/bf8a-metadata-authentication-operator.17fe72c59b829800.49fb0e36.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/{018-body-authentication-operator.1802f6e485b56e6d.yaml => e0b5-body-authentication-operator.17fe72c59b829800.ce8a3f4a.yaml} (78%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/e0b5-metadata-authentication-operator.17fe72c59b829800.ce8a3f4a.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/{020-body-authentication-operator.1802f6e485c99334.yaml => eb3c-body-authentication-operator.17fe72c59b829800.6c145ec7.yaml} (78%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/eb3c-metadata-authentication-operator.17fe72c59b829800.6c145ec7.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/{003-body-authentication-operator.1802f6e48510cb24.yaml => f16c-body-authentication-operator.17fe72c59b829800.a8ecfbce.yaml} (82%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/f16c-metadata-authentication-operator.17fe72c59b829800.a8ecfbce.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/f760-body-authentication-operator.17fe72c59b829800.103eb7f4.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/f760-metadata-authentication-operator.17fe72c59b829800.103eb7f4.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/configmaps/{023-body-v4-0-config-system-trusted-ca-bundle.yaml => 7023-body-v4-0-config-system-trusted-ca-bundle.yaml} (67%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/configmaps/7023-metadata-v4-0-config-system-trusted-ca-bundle.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/configmaps/{017-body-audit.yaml => 84c5-body-audit.yaml} (76%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/configmaps/84c5-metadata-audit.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/secrets/{012-body-v4-0-config-system-session.yaml => c23d-body-v4-0-config-system-session.yaml} (52%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/secrets/c23d-metadata-v4-0-config-system-session.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/secrets/{025-body-v4-0-config-system-ocp-branding-template.yaml => dc0d-body-v4-0-config-system-ocp-branding-template.yaml} (99%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/secrets/dc0d-metadata-v4-0-config-system-ocp-branding-template.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/serviceaccounts/{027-body-oauth-openshift.yaml => e784-body-oauth-openshift.yaml} (62%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/serviceaccounts/e784-metadata-oauth-openshift.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/services/{029-body-oauth-openshift.yaml => 421e-body-oauth-openshift.yaml} (86%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/services/421e-metadata-oauth-openshift.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-config-managed/rbac.authorization.k8s.io/rolebindings/{033-body-system-COLON-openshift-COLON-oauth-servercert-trust.yaml => e0e8-body-system-COLON-openshift-COLON-oauth-servercert-trust.yaml} (78%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-config-managed/rbac.authorization.k8s.io/rolebindings/e0e8-metadata-system-COLON-openshift-COLON-oauth-servercert-trust.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-config-managed/rbac.authorization.k8s.io/roles/{031-body-system-COLON-openshift-COLON-oauth-servercert-trust.yaml => 8c64-body-system-COLON-openshift-COLON-oauth-servercert-trust.yaml} (74%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-config-managed/rbac.authorization.k8s.io/roles/8c64-metadata-system-COLON-openshift-COLON-oauth-servercert-trust.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-oauth-apiserver/policy/poddisruptionbudgets/5a7c-body-oauth-apiserver-pdb.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-oauth-apiserver/policy/poddisruptionbudgets/5a7c-metadata-oauth-apiserver-pdb.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Update/cluster-scoped-resources/operator.openshift.io/authentications/{046-body-cluster.yaml => 11e6-body-cluster.yaml} (92%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Update/cluster-scoped-resources/operator.openshift.io/authentications/11e6-metadata-cluster.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Update/cluster-scoped-resources/operator.openshift.io/authentications/{007-body-cluster.yaml => e1f4-body-cluster.yaml} (94%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Update/cluster-scoped-resources/operator.openshift.io/authentications/e1f4-metadata-cluster.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/UpdateStatus/cluster-scoped-resources/config.openshift.io/clusteroperators/0598-body-authentication.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/UpdateStatus/cluster-scoped-resources/config.openshift.io/clusteroperators/0598-metadata-authentication.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/cluster-scoped-resources/certificates.k8s.io/certificatesigningrequests/{049-body-system-COLON-openshift-COLON-openshift-authenticator-.yaml => c5ab-body-system-COLON-openshift-COLON-openshift-authenticator-.yaml} (52%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/cluster-scoped-resources/certificates.k8s.io/certificatesigningrequests/c5ab-metadata-system-COLON-openshift-COLON-openshift-authenticator-.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/cluster-scoped-resources/rbac.authorization.k8s.io/clusterrolebindings/19fc-body-system-COLON-openshift-COLON-oauth-apiserver.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/cluster-scoped-resources/rbac.authorization.k8s.io/clusterrolebindings/19fc-metadata-system-COLON-openshift-COLON-oauth-apiserver.yaml rename test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/cluster-scoped-resources/rbac.authorization.k8s.io/clusterrolebindings/{021-body-system-COLON-openshift-COLON-openshift-authentication.yaml => 65b2-body-system-COLON-openshift-COLON-openshift-authentication.yaml} (75%) create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/cluster-scoped-resources/rbac.authorization.k8s.io/clusterrolebindings/65b2-metadata-system-COLON-openshift-COLON-openshift-authentication.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/cluster-scoped-resources/rbac.authorization.k8s.io/clusterrolebindings/fe36-body-system-COLON-openshift-COLON-useroauthaccesstoken-manager.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/cluster-scoped-resources/rbac.authorization.k8s.io/clusterrolebindings/fe36-metadata-system-COLON-openshift-COLON-useroauthaccesstoken-manager.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/cluster-scoped-resources/rbac.authorization.k8s.io/clusterroles/13cc-body-system-COLON-openshift-COLON-useroauthaccesstoken-manager.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/cluster-scoped-resources/rbac.authorization.k8s.io/clusterroles/13cc-metadata-system-COLON-openshift-COLON-useroauthaccesstoken-manager.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/namespaces/openshift-oauth-apiserver/core/serviceaccounts/4ddd-body-oauth-apiserver-sa.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/namespaces/openshift-oauth-apiserver/core/serviceaccounts/4ddd-metadata-oauth-apiserver-sa.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/namespaces/openshift-oauth-apiserver/core/services/dfd1-body-api.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/namespaces/openshift-oauth-apiserver/core/services/dfd1-metadata-api.yaml create mode 100644 test-data/apply-configuration/overall/minimal-cluster/expected-output/controller-results.yaml diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/011-body-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/0ded-body-cluster.yaml similarity index 83% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/011-body-cluster.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/0ded-body-cluster.yaml index 5e8699c79..fe5a85cdf 100644 --- a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/011-body-cluster.yaml +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/0ded-body-cluster.yaml @@ -1,8 +1,6 @@ apiVersion: operator.openshift.io/v1 kind: Authentication metadata: - annotations: - synthetic.mom.openshift.io/controller-instance-name: TODO-metadataController name: cluster status: conditions: diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/0ded-metadata-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/0ded-metadata-cluster.yaml new file mode 100644 index 000000000..f245529b1 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/0ded-metadata-cluster.yaml @@ -0,0 +1,9 @@ +action: ApplyStatus +controllerInstanceName: TODO-metadataController +fieldManager: openshift-authentication-Metadata +generateName: "" +mame: cluster +resourceType: + Group: operator.openshift.io + Resource: authentications + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/011-options-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/0ded-options-cluster.yaml similarity index 100% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/011-options-cluster.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/0ded-options-cluster.yaml diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/0f09-body-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/0f09-body-cluster.yaml new file mode 100644 index 000000000..404decce1 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/0f09-body-cluster.yaml @@ -0,0 +1,12 @@ +apiVersion: operator.openshift.io/v1 +kind: Authentication +metadata: + name: cluster +status: + conditions: + - lastTransitionTime: "2024-10-14T22:38:20Z" + message: configmap "audit" not found + reason: ContentCreationError + status: "True" + type: RevisionControllerDegraded + latestAvailableRevision: 0 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/0f09-metadata-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/0f09-metadata-cluster.yaml new file mode 100644 index 000000000..45837a192 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/0f09-metadata-cluster.yaml @@ -0,0 +1,9 @@ +action: ApplyStatus +controllerInstanceName: RevisionController +fieldManager: oauth-apiserver-RevisionController +generateName: "" +mame: cluster +resourceType: + Group: operator.openshift.io + Resource: authentications + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/0f09-options-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/0f09-options-cluster.yaml new file mode 100644 index 000000000..fe9ba5df7 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/0f09-options-cluster.yaml @@ -0,0 +1,2 @@ +fieldManager: oauth-apiserver-RevisionController +force: true diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/002-body-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/125f-body-cluster.yaml similarity index 71% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/002-body-cluster.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/125f-body-cluster.yaml index 2988f562e..9ea079fd9 100644 --- a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/002-body-cluster.yaml +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/125f-body-cluster.yaml @@ -1,8 +1,6 @@ apiVersion: operator.openshift.io/v1 kind: Authentication metadata: - annotations: - synthetic.mom.openshift.io/controller-instance-name: TODO-configOverridesController name: cluster status: conditions: diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/125f-metadata-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/125f-metadata-cluster.yaml new file mode 100644 index 000000000..5759f2258 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/125f-metadata-cluster.yaml @@ -0,0 +1,9 @@ +action: ApplyStatus +controllerInstanceName: TODO-configOverridesController +fieldManager: openshift-authentication-UnsupportedConfigOverrides +generateName: "" +mame: cluster +resourceType: + Group: operator.openshift.io + Resource: authentications + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/002-options-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/125f-options-cluster.yaml similarity index 100% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/002-options-cluster.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/125f-options-cluster.yaml diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/1b61-body-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/1b61-body-cluster.yaml new file mode 100644 index 000000000..90a21bc34 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/1b61-body-cluster.yaml @@ -0,0 +1,14 @@ +apiVersion: operator.openshift.io/v1 +kind: Authentication +metadata: + name: cluster +status: + conditions: + - lastTransitionTime: "2024-10-14T22:38:20Z" + message: endpoints "api" not found + reason: ErrorCheckingPrecondition + status: "False" + type: APIServicesAvailable + - lastTransitionTime: "2024-10-14T22:38:20Z" + status: "False" + type: APIServicesDegraded diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/1b61-metadata-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/1b61-metadata-cluster.yaml new file mode 100644 index 000000000..4e9268ebe --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/1b61-metadata-cluster.yaml @@ -0,0 +1,9 @@ +action: ApplyStatus +controllerInstanceName: openshift-apiserver-APIService +fieldManager: openshift-apiserver-APIService +generateName: "" +mame: cluster +resourceType: + Group: operator.openshift.io + Resource: authentications + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/1b61-options-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/1b61-options-cluster.yaml new file mode 100644 index 000000000..e64635222 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/1b61-options-cluster.yaml @@ -0,0 +1,2 @@ +fieldManager: openshift-apiserver-APIService +force: true diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/001-body-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/2887-body-cluster.yaml similarity index 82% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/001-body-cluster.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/2887-body-cluster.yaml index 5af7cf8d0..c1706f202 100644 --- a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/001-body-cluster.yaml +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/2887-body-cluster.yaml @@ -1,8 +1,6 @@ apiVersion: operator.openshift.io/v1 kind: Authentication metadata: - annotations: - synthetic.mom.openshift.io/controller-instance-name: TODO-resourceSyncer name: cluster status: conditions: diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/2887-metadata-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/2887-metadata-cluster.yaml new file mode 100644 index 000000000..4f0781db0 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/2887-metadata-cluster.yaml @@ -0,0 +1,9 @@ +action: ApplyStatus +controllerInstanceName: TODO-resourceSyncer +fieldManager: oauth-server-ResourceSync +generateName: "" +mame: cluster +resourceType: + Group: operator.openshift.io + Resource: authentications + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/001-options-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/2887-options-cluster.yaml similarity index 100% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/001-options-cluster.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/2887-options-cluster.yaml diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/3fff-body-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/3fff-body-cluster.yaml new file mode 100644 index 000000000..09e4e3f0f --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/3fff-body-cluster.yaml @@ -0,0 +1,26 @@ +apiVersion: operator.openshift.io/v1 +kind: Authentication +metadata: + name: cluster +status: + conditions: + - lastTransitionTime: "2024-10-14T22:38:20Z" + reason: PreconditionNotFulfilled + status: "False" + type: APIServerDeploymentAvailable + - lastTransitionTime: "2024-10-14T22:38:20Z" + message: | + waiting for .status.latestAvailableRevision to be available + reason: PreconditionNotFulfilled + status: "True" + type: APIServerDeploymentDegraded + - lastTransitionTime: "2024-10-14T22:38:20Z" + reason: PreconditionNotFulfilled + status: "False" + type: APIServerDeploymentProgressing + - lastTransitionTime: "2024-10-14T22:38:20Z" + message: | + waiting for .status.latestAvailableRevision to be available + reason: PreconditionNotFulfilled + status: "True" + type: APIServerWorkloadDegraded diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/3fff-metadata-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/3fff-metadata-cluster.yaml new file mode 100644 index 000000000..4657b0e8c --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/3fff-metadata-cluster.yaml @@ -0,0 +1,9 @@ +action: ApplyStatus +controllerInstanceName: OAuthAPIServerController-WorkloadWorkloadController +fieldManager: OAuthAPIServerController-Workload +generateName: "" +mame: cluster +resourceType: + Group: operator.openshift.io + Resource: authentications + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/3fff-options-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/3fff-options-cluster.yaml new file mode 100644 index 000000000..46e6a0d53 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/3fff-options-cluster.yaml @@ -0,0 +1,2 @@ +fieldManager: OAuthAPIServerController-Workload +force: true diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/44e5-body-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/44e5-body-cluster.yaml new file mode 100644 index 000000000..b7f42202f --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/44e5-body-cluster.yaml @@ -0,0 +1,9 @@ +apiVersion: operator.openshift.io/v1 +kind: Authentication +metadata: + name: cluster +status: + conditions: + - lastTransitionTime: "2024-10-14T22:38:20Z" + status: "False" + type: EncryptionKeyControllerDegraded diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/44e5-metadata-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/44e5-metadata-cluster.yaml new file mode 100644 index 000000000..b15e52e51 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/44e5-metadata-cluster.yaml @@ -0,0 +1,9 @@ +action: ApplyStatus +controllerInstanceName: openshift-oauth-apiserver-EncryptionKey +fieldManager: openshift-oauth-apiserver-EncryptionKey +generateName: "" +mame: cluster +resourceType: + Group: operator.openshift.io + Resource: authentications + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/44e5-options-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/44e5-options-cluster.yaml new file mode 100644 index 000000000..8d8f104be --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/44e5-options-cluster.yaml @@ -0,0 +1,2 @@ +fieldManager: openshift-oauth-apiserver-EncryptionKey +force: true diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/040-body-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/4c2c-body-cluster.yaml similarity index 80% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/040-body-cluster.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/4c2c-body-cluster.yaml index 4aa5f2abc..780816da7 100644 --- a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/040-body-cluster.yaml +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/4c2c-body-cluster.yaml @@ -1,8 +1,6 @@ apiVersion: operator.openshift.io/v1 kind: Authentication metadata: - annotations: - synthetic.mom.openshift.io/controller-instance-name: TODO-ingressStateController name: cluster status: conditions: diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/4c2c-metadata-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/4c2c-metadata-cluster.yaml new file mode 100644 index 000000000..94189ac03 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/4c2c-metadata-cluster.yaml @@ -0,0 +1,9 @@ +action: ApplyStatus +controllerInstanceName: TODO-ingressStateController +fieldManager: openshift-authentication-IngressState +generateName: "" +mame: cluster +resourceType: + Group: operator.openshift.io + Resource: authentications + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/040-options-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/4c2c-options-cluster.yaml similarity index 100% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/040-options-cluster.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/4c2c-options-cluster.yaml diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/4c68-body-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/4c68-body-cluster.yaml new file mode 100644 index 000000000..2492194d7 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/4c68-body-cluster.yaml @@ -0,0 +1,9 @@ +apiVersion: operator.openshift.io/v1 +kind: Authentication +metadata: + name: cluster +status: + conditions: + - lastTransitionTime: "2024-10-14T22:38:20Z" + status: "False" + type: Encrypted diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/4c68-metadata-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/4c68-metadata-cluster.yaml new file mode 100644 index 000000000..b7e0de3f4 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/4c68-metadata-cluster.yaml @@ -0,0 +1,9 @@ +action: ApplyStatus +controllerInstanceName: openshift-oauth-apiserver-EncryptionCondition +fieldManager: openshift-oauth-apiserver-EncryptionCondition +generateName: "" +mame: cluster +resourceType: + Group: operator.openshift.io + Resource: authentications + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/4c68-options-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/4c68-options-cluster.yaml new file mode 100644 index 000000000..1aa22f033 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/4c68-options-cluster.yaml @@ -0,0 +1,2 @@ +fieldManager: openshift-oauth-apiserver-EncryptionCondition +force: true diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/047-body-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/4dff-body-cluster.yaml similarity index 82% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/047-body-cluster.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/4dff-body-cluster.yaml index 9e38f5c45..a26457d88 100644 --- a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/047-body-cluster.yaml +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/4dff-body-cluster.yaml @@ -1,16 +1,14 @@ apiVersion: operator.openshift.io/v1 kind: Authentication metadata: - annotations: - synthetic.mom.openshift.io/controller-instance-name: TODO-other-configObserver name: cluster status: conditions: - lastTransitionTime: "2024-10-14T22:38:20Z" message: |- - oauth.config.openshift.io "cluster" not found endpoints/host-etcd-2 in the openshift-etcd namespace: not found configmap openshift-etcd/etcd-endpoints not found, and fallback observer failed + oauth.config.openshift.io "cluster" not found reason: Error status: "True" type: OAuthAPIServerConfigObservationDegraded diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/4dff-metadata-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/4dff-metadata-cluster.yaml new file mode 100644 index 000000000..ab6ad9aae --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/4dff-metadata-cluster.yaml @@ -0,0 +1,9 @@ +action: ApplyStatus +controllerInstanceName: TODO-other-configObserver +fieldManager: oauth-apiserver-ConfigObserver +generateName: "" +mame: cluster +resourceType: + Group: operator.openshift.io + Resource: authentications + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/047-options-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/4dff-options-cluster.yaml similarity index 100% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/047-options-cluster.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/4dff-options-cluster.yaml diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/4ee1-body-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/4ee1-body-cluster.yaml new file mode 100644 index 000000000..8ead3aa58 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/4ee1-body-cluster.yaml @@ -0,0 +1,9 @@ +apiVersion: operator.openshift.io/v1 +kind: Authentication +metadata: + name: cluster +status: + conditions: + - lastTransitionTime: "2024-10-14T22:38:20Z" + status: "False" + type: EncryptionStateControllerDegraded diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/4ee1-metadata-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/4ee1-metadata-cluster.yaml new file mode 100644 index 000000000..daff82d92 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/4ee1-metadata-cluster.yaml @@ -0,0 +1,9 @@ +action: ApplyStatus +controllerInstanceName: openshift-oauth-apiserver-EncryptionState +fieldManager: openshift-oauth-apiserver-EncryptionState +generateName: "" +mame: cluster +resourceType: + Group: operator.openshift.io + Resource: authentications + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/4ee1-options-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/4ee1-options-cluster.yaml new file mode 100644 index 000000000..8b605dfc0 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/4ee1-options-cluster.yaml @@ -0,0 +1,2 @@ +fieldManager: openshift-oauth-apiserver-EncryptionState +force: true diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/037-body-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/5731-body-cluster.yaml similarity index 75% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/037-body-cluster.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/5731-body-cluster.yaml index 7c7eb79a0..f3ae4a270 100644 --- a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/037-body-cluster.yaml +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/5731-body-cluster.yaml @@ -1,8 +1,6 @@ apiVersion: operator.openshift.io/v1 kind: Authentication metadata: - annotations: - synthetic.mom.openshift.io/controller-instance-name: TODO-authServiceCheckController name: cluster status: conditions: diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/5731-metadata-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/5731-metadata-cluster.yaml new file mode 100644 index 000000000..7b6579d25 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/5731-metadata-cluster.yaml @@ -0,0 +1,9 @@ +action: ApplyStatus +controllerInstanceName: TODO-authServiceCheckController +fieldManager: OAuthServerService-EndpointAccessible +generateName: "" +mame: cluster +resourceType: + Group: operator.openshift.io + Resource: authentications + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/037-options-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/5731-options-cluster.yaml similarity index 100% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/037-options-cluster.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/5731-options-cluster.yaml diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/038-body-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/5bb4-body-cluster.yaml similarity index 74% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/038-body-cluster.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/5bb4-body-cluster.yaml index 859a679c4..250c22bd5 100644 --- a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/038-body-cluster.yaml +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/5bb4-body-cluster.yaml @@ -1,8 +1,6 @@ apiVersion: operator.openshift.io/v1 kind: Authentication metadata: - annotations: - synthetic.mom.openshift.io/controller-instance-name: TODO-authServiceEndpointCheckController name: cluster status: conditions: diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/5bb4-metadata-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/5bb4-metadata-cluster.yaml new file mode 100644 index 000000000..cf7da3641 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/5bb4-metadata-cluster.yaml @@ -0,0 +1,9 @@ +action: ApplyStatus +controllerInstanceName: TODO-authServiceEndpointCheckController +fieldManager: OAuthServerServiceEndpoints-EndpointAccessible +generateName: "" +mame: cluster +resourceType: + Group: operator.openshift.io + Resource: authentications + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/038-options-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/5bb4-options-cluster.yaml similarity index 100% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/038-options-cluster.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/5bb4-options-cluster.yaml diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/010-body-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/6ad2-body-cluster.yaml similarity index 66% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/010-body-cluster.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/6ad2-body-cluster.yaml index 1ca419766..7b8aaf8f4 100644 --- a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/010-body-cluster.yaml +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/6ad2-body-cluster.yaml @@ -1,8 +1,6 @@ apiVersion: operator.openshift.io/v1 kind: Authentication metadata: - annotations: - synthetic.mom.openshift.io/controller-instance-name: TODO-managementStateController name: cluster status: conditions: diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/6ad2-metadata-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/6ad2-metadata-cluster.yaml new file mode 100644 index 000000000..e3438f218 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/6ad2-metadata-cluster.yaml @@ -0,0 +1,9 @@ +action: ApplyStatus +controllerInstanceName: TODO-managementStateController +fieldManager: authentication-ManagementState +generateName: "" +mame: cluster +resourceType: + Group: operator.openshift.io + Resource: authentications + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/010-options-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/6ad2-options-cluster.yaml similarity index 100% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/010-options-cluster.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/6ad2-options-cluster.yaml diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/009-body-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/6db2-body-cluster.yaml similarity index 90% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/009-body-cluster.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/6db2-body-cluster.yaml index a605d8357..0d9618308 100644 --- a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/009-body-cluster.yaml +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/6db2-body-cluster.yaml @@ -1,8 +1,6 @@ apiVersion: operator.openshift.io/v1 kind: Authentication metadata: - annotations: - synthetic.mom.openshift.io/controller-instance-name: TODO-deploymentController name: cluster status: conditions: diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/6db2-metadata-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/6db2-metadata-cluster.yaml new file mode 100644 index 000000000..4165efbf8 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/6db2-metadata-cluster.yaml @@ -0,0 +1,9 @@ +action: ApplyStatus +controllerInstanceName: TODO-deploymentController +fieldManager: OAuthServer-Workload +generateName: "" +mame: cluster +resourceType: + Group: operator.openshift.io + Resource: authentications + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/009-options-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/6db2-options-cluster.yaml similarity index 100% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/009-options-cluster.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/6db2-options-cluster.yaml diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/7a7d-body-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/7a7d-body-cluster.yaml new file mode 100644 index 000000000..35804826c --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/7a7d-body-cluster.yaml @@ -0,0 +1,12 @@ +apiVersion: operator.openshift.io/v1 +kind: Authentication +metadata: + name: cluster +status: + conditions: + - lastTransitionTime: "2024-10-14T22:38:20Z" + status: "False" + type: EncryptionMigrationControllerDegraded + - lastTransitionTime: "2024-10-14T22:38:20Z" + status: "False" + type: EncryptionMigrationControllerProgressing diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/7a7d-metadata-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/7a7d-metadata-cluster.yaml new file mode 100644 index 000000000..5b6226837 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/7a7d-metadata-cluster.yaml @@ -0,0 +1,9 @@ +action: ApplyStatus +controllerInstanceName: openshift-oauth-apiserver-EncryptionMigration +fieldManager: openshift-oauth-apiserver-EncryptionMigration +generateName: "" +mame: cluster +resourceType: + Group: operator.openshift.io + Resource: authentications + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/7a7d-options-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/7a7d-options-cluster.yaml new file mode 100644 index 000000000..9a1ff03cf --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/7a7d-options-cluster.yaml @@ -0,0 +1,2 @@ +fieldManager: openshift-oauth-apiserver-EncryptionMigration +force: true diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/036-body-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/8111-body-cluster.yaml similarity index 78% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/036-body-cluster.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/8111-body-cluster.yaml index 99559dfb1..6dd531c54 100644 --- a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/036-body-cluster.yaml +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/8111-body-cluster.yaml @@ -1,8 +1,6 @@ apiVersion: operator.openshift.io/v1 kind: Authentication metadata: - annotations: - synthetic.mom.openshift.io/controller-instance-name: TODO-authRouteCheckController name: cluster status: conditions: diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/8111-metadata-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/8111-metadata-cluster.yaml new file mode 100644 index 000000000..121d3bdcc --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/8111-metadata-cluster.yaml @@ -0,0 +1,9 @@ +action: ApplyStatus +controllerInstanceName: TODO-authRouteCheckController +fieldManager: OAuthServerRoute-EndpointAccessible +generateName: "" +mame: cluster +resourceType: + Group: operator.openshift.io + Resource: authentications + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/036-options-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/8111-options-cluster.yaml similarity index 100% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/036-options-cluster.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/8111-options-cluster.yaml diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/014-body-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/8595-body-cluster.yaml similarity index 90% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/014-body-cluster.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/8595-body-cluster.yaml index c118e46d5..7007df476 100644 --- a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/014-body-cluster.yaml +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/8595-body-cluster.yaml @@ -1,8 +1,6 @@ apiVersion: operator.openshift.io/v1 kind: Authentication metadata: - annotations: - synthetic.mom.openshift.io/controller-instance-name: TODO-payloadConfigController name: cluster status: conditions: diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/8595-metadata-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/8595-metadata-cluster.yaml new file mode 100644 index 000000000..034ec5d85 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/8595-metadata-cluster.yaml @@ -0,0 +1,9 @@ +action: ApplyStatus +controllerInstanceName: TODO-payloadConfigController +fieldManager: openshift-authentication-PayloadConfig +generateName: "" +mame: cluster +resourceType: + Group: operator.openshift.io + Resource: authentications + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/014-options-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/8595-options-cluster.yaml similarity index 100% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/014-options-cluster.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/8595-options-cluster.yaml diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/035-body-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/9b4b-body-cluster.yaml similarity index 72% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/035-body-cluster.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/9b4b-body-cluster.yaml index ad3834c6b..3fd46f67c 100644 --- a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/035-body-cluster.yaml +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/9b4b-body-cluster.yaml @@ -1,8 +1,6 @@ apiVersion: operator.openshift.io/v1 kind: Authentication metadata: - annotations: - synthetic.mom.openshift.io/controller-instance-name: TODO-staticResourceController name: cluster status: conditions: diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/9b4b-metadata-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/9b4b-metadata-cluster.yaml new file mode 100644 index 000000000..e05ea4956 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/9b4b-metadata-cluster.yaml @@ -0,0 +1,9 @@ +action: ApplyStatus +controllerInstanceName: TODO-staticResourceController +fieldManager: OpenshiftAuthenticationStaticResources-StaticResources +generateName: "" +mame: cluster +resourceType: + Group: operator.openshift.io + Resource: authentications + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/035-options-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/9b4b-options-cluster.yaml similarity index 100% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/035-options-cluster.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/9b4b-options-cluster.yaml diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/b899-body-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/b899-body-cluster.yaml new file mode 100644 index 000000000..4dbe588c9 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/b899-body-cluster.yaml @@ -0,0 +1,9 @@ +apiVersion: operator.openshift.io/v1 +kind: Authentication +metadata: + name: cluster +status: + conditions: + - lastTransitionTime: "2024-10-14T22:38:20Z" + status: "False" + type: EncryptionPruneControllerDegraded diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/b899-metadata-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/b899-metadata-cluster.yaml new file mode 100644 index 000000000..47bebf892 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/b899-metadata-cluster.yaml @@ -0,0 +1,9 @@ +action: ApplyStatus +controllerInstanceName: openshift-oauth-apiserver-EncryptionPrune +fieldManager: openshift-oauth-apiserver-EncryptionPrune +generateName: "" +mame: cluster +resourceType: + Group: operator.openshift.io + Resource: authentications + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/b899-options-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/b899-options-cluster.yaml new file mode 100644 index 000000000..c75b805c1 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/b899-options-cluster.yaml @@ -0,0 +1,2 @@ +fieldManager: openshift-oauth-apiserver-EncryptionPrune +force: true diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/039-body-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/b8b9-body-cluster.yaml similarity index 82% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/039-body-cluster.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/b8b9-body-cluster.yaml index 81de1d312..a66b7a798 100644 --- a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/039-body-cluster.yaml +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/b8b9-body-cluster.yaml @@ -1,8 +1,6 @@ apiVersion: operator.openshift.io/v1 kind: Authentication metadata: - annotations: - synthetic.mom.openshift.io/controller-instance-name: TODO-workersAvailableController name: cluster status: conditions: diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/b8b9-metadata-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/b8b9-metadata-cluster.yaml new file mode 100644 index 000000000..c03006a88 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/b8b9-metadata-cluster.yaml @@ -0,0 +1,9 @@ +action: ApplyStatus +controllerInstanceName: TODO-workersAvailableController +fieldManager: openshift-authentication-IngressNodesAvailable +generateName: "" +mame: cluster +resourceType: + Group: operator.openshift.io + Resource: authentications + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/039-options-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/b8b9-options-cluster.yaml similarity index 100% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/039-options-cluster.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/b8b9-options-cluster.yaml diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/008-body-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/d306-body-cluster.yaml similarity index 73% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/008-body-cluster.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/d306-body-cluster.yaml index 5b63ecd80..6e05df357 100644 --- a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/008-body-cluster.yaml +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/d306-body-cluster.yaml @@ -1,17 +1,14 @@ apiVersion: operator.openshift.io/v1 kind: Authentication metadata: - annotations: - synthetic.mom.openshift.io/controller-instance-name: TODO-configObserver name: cluster status: conditions: - lastTransitionTime: "2024-10-14T22:38:20Z" message: |- - infrastructure.config.openshift.io "cluster" not found console.config.openshift.io "cluster" not found - secret "v4-0-config-system-router-certs" not found oauth.config.openshift.io "cluster" not found + secret "v4-0-config-system-router-certs" not found reason: Error status: "True" type: OAuthServerConfigObservationDegraded diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/d306-metadata-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/d306-metadata-cluster.yaml new file mode 100644 index 000000000..31ebd570c --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/d306-metadata-cluster.yaml @@ -0,0 +1,9 @@ +action: ApplyStatus +controllerInstanceName: TODO-configObserver +fieldManager: oauth-server-ConfigObserver +generateName: "" +mame: cluster +resourceType: + Group: operator.openshift.io + Resource: authentications + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/008-options-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/d306-options-cluster.yaml similarity index 100% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/008-options-cluster.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/d306-options-cluster.yaml diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/015-body-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/d317-body-cluster.yaml similarity index 78% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/015-body-cluster.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/d317-body-cluster.yaml index c86708164..f007fe196 100644 --- a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/015-body-cluster.yaml +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/d317-body-cluster.yaml @@ -1,8 +1,6 @@ apiVersion: operator.openshift.io/v1 kind: Authentication metadata: - annotations: - synthetic.mom.openshift.io/controller-instance-name: TODO-routerCertsController name: cluster status: conditions: diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/d317-metadata-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/d317-metadata-cluster.yaml new file mode 100644 index 000000000..4e4135ddf --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/d317-metadata-cluster.yaml @@ -0,0 +1,9 @@ +action: ApplyStatus +controllerInstanceName: TODO-routerCertsController +fieldManager: openshift-authentication-RouterCertsDomainValidation +generateName: "" +mame: cluster +resourceType: + Group: operator.openshift.io + Resource: authentications + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/015-options-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/d317-options-cluster.yaml similarity index 100% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/015-options-cluster.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/d317-options-cluster.yaml diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/016-body-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/d3e4-body-cluster.yaml similarity index 82% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/016-body-cluster.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/d3e4-body-cluster.yaml index a514119b6..3fbc5e22e 100644 --- a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/016-body-cluster.yaml +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/d3e4-body-cluster.yaml @@ -1,8 +1,6 @@ apiVersion: operator.openshift.io/v1 kind: Authentication metadata: - annotations: - synthetic.mom.openshift.io/controller-instance-name: TODO-serviceCAController name: cluster status: conditions: diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/d3e4-metadata-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/d3e4-metadata-cluster.yaml new file mode 100644 index 000000000..f20cf367e --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/d3e4-metadata-cluster.yaml @@ -0,0 +1,9 @@ +action: ApplyStatus +controllerInstanceName: TODO-serviceCAController +fieldManager: openshift-authentication-ServiceCA +generateName: "" +mame: cluster +resourceType: + Group: operator.openshift.io + Resource: authentications + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/016-options-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/d3e4-options-cluster.yaml similarity index 100% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/016-options-cluster.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/d3e4-options-cluster.yaml diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/f1b1-body-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/f1b1-body-cluster.yaml new file mode 100644 index 000000000..7d5ed35cf --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/f1b1-body-cluster.yaml @@ -0,0 +1,11 @@ +apiVersion: operator.openshift.io/v1 +kind: Authentication +metadata: + name: cluster +status: + conditions: + - lastTransitionTime: "2024-10-14T22:38:20Z" + message: "" + reason: AsExpected + status: "False" + type: APIServerStaticResourcesDegraded diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/f1b1-metadata-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/f1b1-metadata-cluster.yaml new file mode 100644 index 000000000..972fb8b48 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/f1b1-metadata-cluster.yaml @@ -0,0 +1,9 @@ +action: ApplyStatus +controllerInstanceName: APIServerStaticResources-StaticResources +fieldManager: APIServerStaticResources-StaticResources +generateName: "" +mame: cluster +resourceType: + Group: operator.openshift.io + Resource: authentications + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/f1b1-options-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/f1b1-options-cluster.yaml new file mode 100644 index 000000000..fd646ae3f --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/ApplyStatus/cluster-scoped-resources/operator.openshift.io/authentications/f1b1-options-cluster.yaml @@ -0,0 +1,2 @@ +fieldManager: APIServerStaticResources-StaticResources +force: true diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/cluster-scoped-resources/config.openshift.io/clusteroperators/ca52-body-authentication.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/cluster-scoped-resources/config.openshift.io/clusteroperators/ca52-body-authentication.yaml new file mode 100644 index 000000000..519b15c4a --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/cluster-scoped-resources/config.openshift.io/clusteroperators/ca52-body-authentication.yaml @@ -0,0 +1,8 @@ +apiVersion: config.openshift.io/v1 +kind: ClusterOperator +metadata: + creationTimestamp: null + name: authentication +spec: {} +status: + extension: null diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/cluster-scoped-resources/config.openshift.io/clusteroperators/ca52-metadata-authentication.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/cluster-scoped-resources/config.openshift.io/clusteroperators/ca52-metadata-authentication.yaml new file mode 100644 index 000000000..88f7f015b --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/cluster-scoped-resources/config.openshift.io/clusteroperators/ca52-metadata-authentication.yaml @@ -0,0 +1,8 @@ +action: Create +controllerInstanceName: authentication +generateName: "" +mame: authentication +resourceType: + Group: config.openshift.io + Resource: clusteroperators + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/cluster-scoped-resources/core/namespaces/5657-body-openshift-oauth-apiserver.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/cluster-scoped-resources/core/namespaces/5657-body-openshift-oauth-apiserver.yaml new file mode 100644 index 000000000..a1b01beca --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/cluster-scoped-resources/core/namespaces/5657-body-openshift-oauth-apiserver.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Namespace +metadata: + annotations: + openshift.io/node-selector: "" + workload.openshift.io/allowed: management + creationTimestamp: null + labels: + openshift.io/cluster-monitoring: "true" + pod-security.kubernetes.io/audit: privileged + pod-security.kubernetes.io/enforce: privileged + pod-security.kubernetes.io/warn: privileged + name: openshift-oauth-apiserver +spec: {} +status: {} diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/cluster-scoped-resources/core/namespaces/5657-metadata-openshift-oauth-apiserver.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/cluster-scoped-resources/core/namespaces/5657-metadata-openshift-oauth-apiserver.yaml new file mode 100644 index 000000000..35c8cc35f --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/cluster-scoped-resources/core/namespaces/5657-metadata-openshift-oauth-apiserver.yaml @@ -0,0 +1,8 @@ +action: Create +controllerInstanceName: APIServerStaticResources-StaticResources +generateName: "" +mame: openshift-oauth-apiserver +resourceType: + Group: "" + Resource: namespaces + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/cluster-scoped-resources/core/namespaces/019-body-openshift-authentication.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/cluster-scoped-resources/core/namespaces/9a55-body-openshift-authentication.yaml similarity index 82% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/cluster-scoped-resources/core/namespaces/019-body-openshift-authentication.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/cluster-scoped-resources/core/namespaces/9a55-body-openshift-authentication.yaml index 8135c43db..2249d9dec 100644 --- a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/cluster-scoped-resources/core/namespaces/019-body-openshift-authentication.yaml +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/cluster-scoped-resources/core/namespaces/9a55-body-openshift-authentication.yaml @@ -3,7 +3,6 @@ kind: Namespace metadata: annotations: openshift.io/node-selector: "" - synthetic.mom.openshift.io/controller-instance-name: TODO-staticResourceController workload.openshift.io/allowed: management creationTimestamp: null labels: diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/cluster-scoped-resources/core/namespaces/9a55-metadata-openshift-authentication.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/cluster-scoped-resources/core/namespaces/9a55-metadata-openshift-authentication.yaml new file mode 100644 index 000000000..98df58651 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/cluster-scoped-resources/core/namespaces/9a55-metadata-openshift-authentication.yaml @@ -0,0 +1,8 @@ +action: Create +controllerInstanceName: TODO-staticResourceController +generateName: "" +mame: openshift-authentication +resourceType: + Group: "" + Resource: namespaces + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/005-body-authentication-operator.1802f6e485250051.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/005-body-authentication-operator.1802f6e485250051.yaml deleted file mode 100644 index 73ca5bd7e..000000000 --- a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/005-body-authentication-operator.1802f6e485250051.yaml +++ /dev/null @@ -1,24 +0,0 @@ -apiVersion: v1 -count: 1 -eventTime: null -firstTimestamp: "2024-10-29T15:44:28Z" -involvedObject: - kind: Deployment - name: authentication-operator - namespace: openshift-authentication-operator -kind: Event -lastTimestamp: "2024-10-29T15:44:28Z" -message: cipherSuites changed to ["TLS_AES_128_GCM_SHA256" "TLS_AES_256_GCM_SHA384" - "TLS_CHACHA20_POLY1305_SHA256" "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256" "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256" - "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384" "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384" - "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256" "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256"] -metadata: - creationTimestamp: null - name: authentication-operator.1802f6e485250051 - namespace: openshift-authentication-operator -reason: ObserveTLSSecurityProfile -reportingComponent: "" -reportingInstance: "" -source: - component: cluster-authentication-operator-run-once-sync-context -type: Normal diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/006-body-authentication-operator.1802f6e485319d7b.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/006-body-authentication-operator.1802f6e485319d7b.yaml deleted file mode 100644 index f7ac39350..000000000 --- a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/006-body-authentication-operator.1802f6e485319d7b.yaml +++ /dev/null @@ -1,34 +0,0 @@ -apiVersion: v1 -count: 1 -eventTime: null -firstTimestamp: "2024-10-29T15:44:28Z" -involvedObject: - kind: Deployment - name: authentication-operator - namespace: openshift-authentication-operator -kind: Event -lastTimestamp: "2024-10-29T15:44:28Z" -message: 'Writing updated section ("oauthServer") of observed config: " map[string]any(\n- - \tnil,\n+ \t{\n+ \t\t\"corsAllowedOrigins\": []any{string(`//127\\.0\\.0\\.1(:|$)`), - string(\"//localhost(:|$)\")},\n+ \t\t\"oauthConfig\": map[string]any{\n+ \t\t\t\"tokenConfig\": - map[string]any{\n+ \t\t\t\t\"accessTokenMaxAgeSeconds\": float64(86400),\n+ \t\t\t\t\"authorizeTokenMaxAgeSeconds\": - float64(300),\n+ \t\t\t},\n+ \t\t},\n+ \t\t\"serverArguments\": map[string]any{\n+ - \t\t\t\"audit-log-format\": []any{string(\"json\")},\n+ \t\t\t\"audit-log-maxbackup\": - []any{string(\"10\")},\n+ \t\t\t\"audit-log-maxsize\": []any{string(\"100\")},\n+ - \t\t\t\"audit-log-path\": []any{string(\"/var/log/oauth-server/audit.log\")},\n+ - \t\t\t\"audit-policy-file\": []any{string(\"/var/run/configmaps/audit/audit.\"...)},\n+ - \t\t},\n+ \t\t\"servingInfo\": map[string]any{\n+ \t\t\t\"cipherSuites\": []any{\n+ - \t\t\t\tstring(\"TLS_AES_128_GCM_SHA256\"), string(\"TLS_AES_256_GCM_SHA384\"),\n+ - \t\t\t\tstring(\"TLS_CHACHA20_POLY1305_SHA256\"),\n+ \t\t\t\tstring(\"TLS_ECDHE_ECDSA_WITH_AES_128_GCM\"...), - ...,\n+ \t\t\t},\n+ \t\t\t\"minTLSVersion\": string(\"VersionTLS12\"),\n+ \t\t},\n+ - \t},\n )\n"' -metadata: - creationTimestamp: null - name: authentication-operator.1802f6e485319d7b - namespace: openshift-authentication-operator -reason: ObservedConfigChanged -reportingComponent: "" -reportingInstance: "" -source: - component: cluster-authentication-operator-run-once-sync-context -type: Normal diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/050-body-authentication-operator.1802f6e4f057efb3.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/006e-body-authentication-operator.17fe72c59b829800.cc404894.yaml similarity index 77% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/050-body-authentication-operator.1802f6e4f057efb3.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/006e-body-authentication-operator.17fe72c59b829800.cc404894.yaml index 010b76776..dc20f58e8 100644 --- a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/050-body-authentication-operator.1802f6e4f057efb3.yaml +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/006e-body-authentication-operator.17fe72c59b829800.cc404894.yaml @@ -1,17 +1,17 @@ apiVersion: v1 count: 1 eventTime: null -firstTimestamp: "2024-10-29T15:44:30Z" +firstTimestamp: "2024-10-14T22:38:20Z" involvedObject: kind: Deployment name: authentication-operator namespace: openshift-authentication-operator kind: Event -lastTimestamp: "2024-10-29T15:44:30Z" +lastTimestamp: "2024-10-14T22:38:20Z" message: A csr "" is created for OpenShiftAuthenticatorCertRequester metadata: creationTimestamp: null - name: authentication-operator.1802f6e4f057efb3 + name: authentication-operator.17fe72c59b829800.cc404894 namespace: openshift-authentication-operator reason: CSRCreated reportingComponent: "" diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/006e-metadata-authentication-operator.17fe72c59b829800.cc404894.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/006e-metadata-authentication-operator.17fe72c59b829800.cc404894.yaml new file mode 100644 index 000000000..ba2eeee85 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/006e-metadata-authentication-operator.17fe72c59b829800.cc404894.yaml @@ -0,0 +1,9 @@ +action: Create +controllerInstanceName: "" +generateName: "" +mame: authentication-operator.17fe72c59b829800.cc404894 +namespace: openshift-authentication-operator +resourceType: + Group: "" + Resource: events + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/042-body-authentication-operator.1802f6e4d892e853.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/042-body-authentication-operator.1802f6e4d892e853.yaml deleted file mode 100644 index 437e1a72c..000000000 --- a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/042-body-authentication-operator.1802f6e4d892e853.yaml +++ /dev/null @@ -1,21 +0,0 @@ -apiVersion: v1 -count: 1 -eventTime: null -firstTimestamp: "2024-10-29T15:44:29Z" -involvedObject: - kind: Deployment - name: authentication-operator - namespace: openshift-authentication-operator -kind: Event -lastTimestamp: "2024-10-29T15:44:29Z" -message: minTLSVersion changed to VersionTLS12 -metadata: - creationTimestamp: null - name: authentication-operator.1802f6e4d892e853 - namespace: openshift-authentication-operator -reason: ObserveTLSSecurityProfile -reportingComponent: "" -reportingInstance: "" -source: - component: cluster-authentication-operator-run-once-sync-context -type: Normal diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/045-body-authentication-operator.1802f6e4d8c17be2.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/045-body-authentication-operator.1802f6e4d8c17be2.yaml deleted file mode 100644 index 179adb322..000000000 --- a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/045-body-authentication-operator.1802f6e4d8c17be2.yaml +++ /dev/null @@ -1,27 +0,0 @@ -apiVersion: v1 -count: 1 -eventTime: null -firstTimestamp: "2024-10-29T15:44:29Z" -involvedObject: - kind: Deployment - name: authentication-operator - namespace: openshift-authentication-operator -kind: Event -lastTimestamp: "2024-10-29T15:44:29Z" -message: 'Writing updated section ("oauthAPIServer") of observed config: " map[string]any(\n- - \tnil,\n+ \t{\n+ \t\t\"apiServerArguments\": map[string]any{\n+ \t\t\t\"api-audiences\": []any{string(\"https://kubernetes.default.svc\")},\n+ - \t\t\t\"cors-allowed-origins\": []any{string(`//127\\.0\\.0\\.1(:|$)`), string(\"//localhost(:|$)\")},\n+ - \t\t\t\"tls-cipher-suites\": []any{\n+ \t\t\t\tstring(\"TLS_AES_128_GCM_SHA256\"), - string(\"TLS_AES_256_GCM_SHA384\"),\n+ \t\t\t\tstring(\"TLS_CHACHA20_POLY1305_SHA256\"),\n+ - \t\t\t\tstring(\"TLS_ECDHE_ECDSA_WITH_AES_128_GCM\"...), ...,\n+ \t\t\t},\n+ \t\t\t\"tls-min-version\": - string(\"VersionTLS12\"),\n+ \t\t},\n+ \t},\n )\n"' -metadata: - creationTimestamp: null - name: authentication-operator.1802f6e4d8c17be2 - namespace: openshift-authentication-operator -reason: ObservedConfigChanged -reportingComponent: "" -reportingInstance: "" -source: - component: cluster-authentication-operator-run-once-sync-context -type: Normal diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/032-body-authentication-operator.1802f6e48ff304ac.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/1149-body-authentication-operator.17fe72c59b829800.327a2f38.yaml similarity index 80% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/032-body-authentication-operator.1802f6e48ff304ac.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/1149-body-authentication-operator.17fe72c59b829800.327a2f38.yaml index 3ab2ef4a6..517359329 100644 --- a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/032-body-authentication-operator.1802f6e48ff304ac.yaml +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/1149-body-authentication-operator.17fe72c59b829800.327a2f38.yaml @@ -1,18 +1,18 @@ apiVersion: v1 count: 1 eventTime: null -firstTimestamp: "2024-10-29T15:44:28Z" +firstTimestamp: "2024-10-14T22:38:20Z" involvedObject: kind: Deployment name: authentication-operator namespace: openshift-authentication-operator kind: Event -lastTimestamp: "2024-10-29T15:44:28Z" +lastTimestamp: "2024-10-14T22:38:20Z" message: Created Role.rbac.authorization.k8s.io/system:openshift:oauth-servercert-trust -n openshift-config-managed because it was missing metadata: creationTimestamp: null - name: authentication-operator.1802f6e48ff304ac + name: authentication-operator.17fe72c59b829800.327a2f38 namespace: openshift-authentication-operator reason: RoleCreated reportingComponent: "" diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/1149-metadata-authentication-operator.17fe72c59b829800.327a2f38.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/1149-metadata-authentication-operator.17fe72c59b829800.327a2f38.yaml new file mode 100644 index 000000000..696f5dd5f --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/1149-metadata-authentication-operator.17fe72c59b829800.327a2f38.yaml @@ -0,0 +1,9 @@ +action: Create +controllerInstanceName: "" +generateName: "" +mame: authentication-operator.17fe72c59b829800.327a2f38 +namespace: openshift-authentication-operator +resourceType: + Group: "" + Resource: events + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/041-body-authentication-operator.1802f6e4d8827d4e.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/13d7-body-authentication-operator.17fe72c59b829800.87c2a194.yaml similarity index 78% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/041-body-authentication-operator.1802f6e4d8827d4e.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/13d7-body-authentication-operator.17fe72c59b829800.87c2a194.yaml index f96e6dea9..938abdc6a 100644 --- a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/041-body-authentication-operator.1802f6e4d8827d4e.yaml +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/13d7-body-authentication-operator.17fe72c59b829800.87c2a194.yaml @@ -1,17 +1,17 @@ apiVersion: v1 count: 1 eventTime: null -firstTimestamp: "2024-10-29T15:44:29Z" +firstTimestamp: "2024-10-14T22:38:20Z" involvedObject: kind: Deployment name: authentication-operator namespace: openshift-authentication-operator kind: Event -lastTimestamp: "2024-10-29T15:44:29Z" +lastTimestamp: "2024-10-14T22:38:20Z" message: service account issuer changed from to https://kubernetes.default.svc metadata: creationTimestamp: null - name: authentication-operator.1802f6e4d8827d4e + name: authentication-operator.17fe72c59b829800.87c2a194 namespace: openshift-authentication-operator reason: ObserveAPIAudiences reportingComponent: "" diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/13d7-metadata-authentication-operator.17fe72c59b829800.87c2a194.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/13d7-metadata-authentication-operator.17fe72c59b829800.87c2a194.yaml new file mode 100644 index 000000000..e4ca0b05a --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/13d7-metadata-authentication-operator.17fe72c59b829800.87c2a194.yaml @@ -0,0 +1,9 @@ +action: Create +controllerInstanceName: "" +generateName: "" +mame: authentication-operator.17fe72c59b829800.87c2a194 +namespace: openshift-authentication-operator +resourceType: + Group: "" + Resource: events + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/048-body-authentication-operator.1802f6e4f04c905b.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/13fd-body-authentication-operator.17fe72c59b829800.da44325f.yaml similarity index 81% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/048-body-authentication-operator.1802f6e4f04c905b.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/13fd-body-authentication-operator.17fe72c59b829800.da44325f.yaml index b815b2e65..139c729d0 100644 --- a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/048-body-authentication-operator.1802f6e4f04c905b.yaml +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/13fd-body-authentication-operator.17fe72c59b829800.da44325f.yaml @@ -1,18 +1,18 @@ apiVersion: v1 count: 1 eventTime: null -firstTimestamp: "2024-10-29T15:44:30Z" +firstTimestamp: "2024-10-14T22:38:20Z" involvedObject: kind: Deployment name: authentication-operator namespace: openshift-authentication-operator kind: Event -lastTimestamp: "2024-10-29T15:44:30Z" +lastTimestamp: "2024-10-14T22:38:20Z" message: 'No valid client certificate for OpenShiftAuthenticatorCertRequester is found: unable to parse certificate: data does not contain any valid RSA or ECDSA certificates' metadata: creationTimestamp: null - name: authentication-operator.1802f6e4f04c905b + name: authentication-operator.17fe72c59b829800.da44325f namespace: openshift-authentication-operator reason: NoValidCertificateFound reportingComponent: "" diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/13fd-metadata-authentication-operator.17fe72c59b829800.da44325f.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/13fd-metadata-authentication-operator.17fe72c59b829800.da44325f.yaml new file mode 100644 index 000000000..35dc47278 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/13fd-metadata-authentication-operator.17fe72c59b829800.da44325f.yaml @@ -0,0 +1,9 @@ +action: Create +controllerInstanceName: "" +generateName: "" +mame: authentication-operator.17fe72c59b829800.da44325f +namespace: openshift-authentication-operator +resourceType: + Group: "" + Resource: events + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/1f51-body-authentication-operator.17fe72c59b829800.9dfc3b5d.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/1f51-body-authentication-operator.17fe72c59b829800.9dfc3b5d.yaml new file mode 100644 index 000000000..b7dcf3716 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/1f51-body-authentication-operator.17fe72c59b829800.9dfc3b5d.yaml @@ -0,0 +1,22 @@ +apiVersion: v1 +count: 1 +eventTime: null +firstTimestamp: "2024-10-14T22:38:20Z" +involvedObject: + kind: Deployment + name: authentication-operator + namespace: openshift-authentication-operator +kind: Event +lastTimestamp: "2024-10-14T22:38:20Z" +message: Created ClusterRole.rbac.authorization.k8s.io/system:openshift:useroauthaccesstoken-manager + because it was missing +metadata: + creationTimestamp: null + name: authentication-operator.17fe72c59b829800.9dfc3b5d + namespace: openshift-authentication-operator +reason: ClusterRoleCreated +reportingComponent: "" +reportingInstance: "" +source: + component: cluster-authentication-operator-run-once-sync-context +type: Normal diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/1f51-metadata-authentication-operator.17fe72c59b829800.9dfc3b5d.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/1f51-metadata-authentication-operator.17fe72c59b829800.9dfc3b5d.yaml new file mode 100644 index 000000000..9496b19e5 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/1f51-metadata-authentication-operator.17fe72c59b829800.9dfc3b5d.yaml @@ -0,0 +1,9 @@ +action: Create +controllerInstanceName: "" +generateName: "" +mame: authentication-operator.17fe72c59b829800.9dfc3b5d +namespace: openshift-authentication-operator +resourceType: + Group: "" + Resource: events + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/2e46-body-authentication-operator.17fe72c59b829800.b2cdb588.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/2e46-body-authentication-operator.17fe72c59b829800.b2cdb588.yaml new file mode 100644 index 000000000..74c49be1c --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/2e46-body-authentication-operator.17fe72c59b829800.b2cdb588.yaml @@ -0,0 +1,29 @@ +apiVersion: v1 +count: 1 +eventTime: null +firstTimestamp: "2024-10-14T22:38:20Z" +involvedObject: + kind: Deployment + name: authentication-operator + namespace: openshift-authentication-operator +kind: Event +lastTimestamp: "2024-10-14T22:38:20Z" +message: 'Writing updated section ("oauthServer") of observed config: "\u00a0\u00a0map[string]any(\n-\u00a0\tnil,\n+\u00a0\t{\n+\u00a0\t\t\"corsAllowedOrigins\": + []any{string(`//127\\.0\\.0\\.1(:|$)`), string(\"//localhost(:|$)\")},\n+\u00a0\t\t\"oauthConfig\": + map[string]any{\n+\u00a0\t\t\t\"loginURL\": string(\"https://api.ostest.test.metalkube.org:6443\"),\n+\u00a0\t\t\t\"tokenConfig\": + map[string]any{\n+\u00a0\t\t\t\t\"accessTokenMaxAgeSeconds\": float64(86400),\n+\u00a0\t\t\t\t\"authorizeTokenMaxAgeSeconds\": + float64(300),\n+\u00a0\t\t\t},\n+\u00a0\t\t},\n+\u00a0\t\t\"serverArguments\": map[string]any{\n+\u00a0\t\t\t\"audit-log-format\": []any{string(\"json\")},\n+\u00a0\t\t\t\"audit-log-maxbackup\": + []any{string(\"10\")},\n+\u00a0\t\t\t\"audit-log-maxsize\": []any{string(\"100\")},\n+\u00a0\t\t\t\"audit-log-path\": []any{string(\"/var/log/oauth-server/audit.log\")},\n+\u00a0\t\t\t\"audit-policy-file\": []any{string(\"/var/run/configmaps/audit/audit.\"...)},\n+\u00a0\t\t},\n+\u00a0\t\t\"servingInfo\": + map[string]any{\n+\u00a0\t\t\t\"cipherSuites\": []any{\n+\u00a0\t\t\t\tstring(\"TLS_AES_128_GCM_SHA256\"), + string(\"TLS_AES_256_GCM_SHA384\"),\n+\u00a0\t\t\t\tstring(\"TLS_CHACHA20_POLY1305_SHA256\"),\n+\u00a0\t\t\t\tstring(\"TLS_ECDHE_ECDSA_WITH_AES_128_GCM\"...), + ...,\n+\u00a0\t\t\t},\n+\u00a0\t\t\t\"minTLSVersion\": string(\"VersionTLS12\"),\n+\u00a0\t\t},\n+\u00a0\t},\n\u00a0\u00a0)\n"' +metadata: + creationTimestamp: null + name: authentication-operator.17fe72c59b829800.b2cdb588 + namespace: openshift-authentication-operator +reason: ObservedConfigChanged +reportingComponent: "" +reportingInstance: "" +source: + component: cluster-authentication-operator-run-once-sync-context +type: Normal diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/2e46-metadata-authentication-operator.17fe72c59b829800.b2cdb588.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/2e46-metadata-authentication-operator.17fe72c59b829800.b2cdb588.yaml new file mode 100644 index 000000000..d28a5765a --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/2e46-metadata-authentication-operator.17fe72c59b829800.b2cdb588.yaml @@ -0,0 +1,9 @@ +action: Create +controllerInstanceName: "" +generateName: "" +mame: authentication-operator.17fe72c59b829800.b2cdb588 +namespace: openshift-authentication-operator +resourceType: + Group: "" + Resource: events + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/030-body-authentication-operator.1802f6e48fdd4ac1.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/30b9-body-authentication-operator.17fe72c59b829800.07abf400.yaml similarity index 78% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/030-body-authentication-operator.1802f6e48fdd4ac1.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/30b9-body-authentication-operator.17fe72c59b829800.07abf400.yaml index a8ad011c7..d607d5ae7 100644 --- a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/030-body-authentication-operator.1802f6e48fdd4ac1.yaml +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/30b9-body-authentication-operator.17fe72c59b829800.07abf400.yaml @@ -1,18 +1,18 @@ apiVersion: v1 count: 1 eventTime: null -firstTimestamp: "2024-10-29T15:44:28Z" +firstTimestamp: "2024-10-14T22:38:20Z" involvedObject: kind: Deployment name: authentication-operator namespace: openshift-authentication-operator kind: Event -lastTimestamp: "2024-10-29T15:44:28Z" +lastTimestamp: "2024-10-14T22:38:20Z" message: Created Service/oauth-openshift -n openshift-authentication because it was missing metadata: creationTimestamp: null - name: authentication-operator.1802f6e48fdd4ac1 + name: authentication-operator.17fe72c59b829800.07abf400 namespace: openshift-authentication-operator reason: ServiceCreated reportingComponent: "" diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/30b9-metadata-authentication-operator.17fe72c59b829800.07abf400.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/30b9-metadata-authentication-operator.17fe72c59b829800.07abf400.yaml new file mode 100644 index 000000000..dc5442695 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/30b9-metadata-authentication-operator.17fe72c59b829800.07abf400.yaml @@ -0,0 +1,9 @@ +action: Create +controllerInstanceName: "" +generateName: "" +mame: authentication-operator.17fe72c59b829800.07abf400 +namespace: openshift-authentication-operator +resourceType: + Group: "" + Resource: events + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/32eb-body-authentication-operator.17fe72c59b829800.adf05e91.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/32eb-body-authentication-operator.17fe72c59b829800.adf05e91.yaml new file mode 100644 index 000000000..be54b1626 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/32eb-body-authentication-operator.17fe72c59b829800.adf05e91.yaml @@ -0,0 +1,22 @@ +apiVersion: v1 +count: 1 +eventTime: null +firstTimestamp: "2024-10-14T22:38:20Z" +involvedObject: + kind: Deployment + name: authentication-operator + namespace: openshift-authentication-operator +kind: Event +lastTimestamp: "2024-10-14T22:38:20Z" +message: Created ClusterRoleBinding.rbac.authorization.k8s.io/system:openshift:oauth-apiserver + because it was missing +metadata: + creationTimestamp: null + name: authentication-operator.17fe72c59b829800.adf05e91 + namespace: openshift-authentication-operator +reason: ClusterRoleBindingCreated +reportingComponent: "" +reportingInstance: "" +source: + component: cluster-authentication-operator-run-once-sync-context +type: Normal diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/32eb-metadata-authentication-operator.17fe72c59b829800.adf05e91.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/32eb-metadata-authentication-operator.17fe72c59b829800.adf05e91.yaml new file mode 100644 index 000000000..3ebc296a4 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/32eb-metadata-authentication-operator.17fe72c59b829800.adf05e91.yaml @@ -0,0 +1,9 @@ +action: Create +controllerInstanceName: "" +generateName: "" +mame: authentication-operator.17fe72c59b829800.adf05e91 +namespace: openshift-authentication-operator +resourceType: + Group: "" + Resource: events + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/026-body-authentication-operator.1802f6e48e09fa9a.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/357b-body-authentication-operator.17fe72c59b829800.fd7c2a06.yaml similarity index 79% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/026-body-authentication-operator.1802f6e48e09fa9a.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/357b-body-authentication-operator.17fe72c59b829800.fd7c2a06.yaml index ca198381d..3e95c0727 100644 --- a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/026-body-authentication-operator.1802f6e48e09fa9a.yaml +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/357b-body-authentication-operator.17fe72c59b829800.fd7c2a06.yaml @@ -1,18 +1,18 @@ apiVersion: v1 count: 1 eventTime: null -firstTimestamp: "2024-10-29T15:44:28Z" +firstTimestamp: "2024-10-14T22:38:20Z" involvedObject: kind: Deployment name: authentication-operator namespace: openshift-authentication-operator kind: Event -lastTimestamp: "2024-10-29T15:44:28Z" +lastTimestamp: "2024-10-14T22:38:20Z" message: Created Secret/v4-0-config-system-ocp-branding-template -n openshift-authentication because it was missing metadata: creationTimestamp: null - name: authentication-operator.1802f6e48e09fa9a + name: authentication-operator.17fe72c59b829800.fd7c2a06 namespace: openshift-authentication-operator reason: SecretCreated reportingComponent: "" diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/357b-metadata-authentication-operator.17fe72c59b829800.fd7c2a06.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/357b-metadata-authentication-operator.17fe72c59b829800.fd7c2a06.yaml new file mode 100644 index 000000000..4f7601500 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/357b-metadata-authentication-operator.17fe72c59b829800.fd7c2a06.yaml @@ -0,0 +1,9 @@ +action: Create +controllerInstanceName: "" +generateName: "" +mame: authentication-operator.17fe72c59b829800.fd7c2a06 +namespace: openshift-authentication-operator +resourceType: + Group: "" + Resource: events + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/37d9-body-authentication-operator.17fe72c59b829800.651f7f3f.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/37d9-body-authentication-operator.17fe72c59b829800.651f7f3f.yaml new file mode 100644 index 000000000..c718bf4bb --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/37d9-body-authentication-operator.17fe72c59b829800.651f7f3f.yaml @@ -0,0 +1,22 @@ +apiVersion: v1 +count: 1 +eventTime: null +firstTimestamp: "2024-10-14T22:38:20Z" +involvedObject: + kind: Deployment + name: authentication-operator + namespace: openshift-authentication-operator +kind: Event +lastTimestamp: "2024-10-14T22:38:20Z" +message: Created PodDisruptionBudget.policy/oauth-apiserver-pdb -n openshift-oauth-apiserver + because it was missing +metadata: + creationTimestamp: null + name: authentication-operator.17fe72c59b829800.651f7f3f + namespace: openshift-authentication-operator +reason: PodDisruptionBudgetCreated +reportingComponent: "" +reportingInstance: "" +source: + component: cluster-authentication-operator-run-once-sync-context +type: Normal diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/37d9-metadata-authentication-operator.17fe72c59b829800.651f7f3f.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/37d9-metadata-authentication-operator.17fe72c59b829800.651f7f3f.yaml new file mode 100644 index 000000000..1ed2d038b --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/37d9-metadata-authentication-operator.17fe72c59b829800.651f7f3f.yaml @@ -0,0 +1,9 @@ +action: Create +controllerInstanceName: "" +generateName: "" +mame: authentication-operator.17fe72c59b829800.651f7f3f +namespace: openshift-authentication-operator +resourceType: + Group: "" + Resource: events + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/3c60-body-authentication-operator.17fe72c59b829800.d64f6f23.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/3c60-body-authentication-operator.17fe72c59b829800.d64f6f23.yaml new file mode 100644 index 000000000..c2b91fab3 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/3c60-body-authentication-operator.17fe72c59b829800.d64f6f23.yaml @@ -0,0 +1,25 @@ +apiVersion: v1 +count: 1 +eventTime: null +firstTimestamp: "2024-10-14T22:38:20Z" +involvedObject: + kind: Deployment + name: authentication-operator + namespace: openshift-authentication-operator +kind: Event +lastTimestamp: "2024-10-14T22:38:20Z" +message: 'Writing updated section ("oauthAPIServer") of observed config: "\u00a0\u00a0map[string]any(\n-\u00a0\tnil,\n+\u00a0\t{\n+\u00a0\t\t\"apiServerArguments\": + map[string]any{\n+\u00a0\t\t\t\"api-audiences\": []any{string(\"https://kubernetes.default.svc\")},\n+\u00a0\t\t\t\"cors-allowed-origins\": + []any{string(`//127\\.0\\.0\\.1(:|$)`), string(\"//localhost(:|$)\")},\n+\u00a0\t\t\t\"tls-cipher-suites\": + []any{\n+\u00a0\t\t\t\tstring(\"TLS_AES_128_GCM_SHA256\"), string(\"TLS_AES_256_GCM_SHA384\"),\n+\u00a0\t\t\t\tstring(\"TLS_CHACHA20_POLY1305_SHA256\"),\n+\u00a0\t\t\t\tstring(\"TLS_ECDHE_ECDSA_WITH_AES_128_GCM\"...), + ...,\n+\u00a0\t\t\t},\n+\u00a0\t\t\t\"tls-min-version\": string(\"VersionTLS12\"),\n+\u00a0\t\t},\n+\u00a0\t},\n\u00a0\u00a0)\n"' +metadata: + creationTimestamp: null + name: authentication-operator.17fe72c59b829800.d64f6f23 + namespace: openshift-authentication-operator +reason: ObservedConfigChanged +reportingComponent: "" +reportingInstance: "" +source: + component: cluster-authentication-operator-run-once-sync-context +type: Normal diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/3c60-metadata-authentication-operator.17fe72c59b829800.d64f6f23.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/3c60-metadata-authentication-operator.17fe72c59b829800.d64f6f23.yaml new file mode 100644 index 000000000..614b70cf4 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/3c60-metadata-authentication-operator.17fe72c59b829800.d64f6f23.yaml @@ -0,0 +1,9 @@ +action: Create +controllerInstanceName: "" +generateName: "" +mame: authentication-operator.17fe72c59b829800.d64f6f23 +namespace: openshift-authentication-operator +resourceType: + Group: "" + Resource: events + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/004-body-authentication-operator.1802f6e4851e3ce9.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/3ca6-body-authentication-operator.17fe72c59b829800.44a05c38.yaml similarity index 77% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/004-body-authentication-operator.1802f6e4851e3ce9.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/3ca6-body-authentication-operator.17fe72c59b829800.44a05c38.yaml index 18f84baa5..163bf2dc3 100644 --- a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/004-body-authentication-operator.1802f6e4851e3ce9.yaml +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/3ca6-body-authentication-operator.17fe72c59b829800.44a05c38.yaml @@ -1,17 +1,17 @@ apiVersion: v1 count: 1 eventTime: null -firstTimestamp: "2024-10-29T15:44:28Z" +firstTimestamp: "2024-10-14T22:38:20Z" involvedObject: kind: Deployment name: authentication-operator namespace: openshift-authentication-operator kind: Event -lastTimestamp: "2024-10-29T15:44:28Z" +lastTimestamp: "2024-10-14T22:38:20Z" message: minTLSVersion changed to VersionTLS12 metadata: creationTimestamp: null - name: authentication-operator.1802f6e4851e3ce9 + name: authentication-operator.17fe72c59b829800.44a05c38 namespace: openshift-authentication-operator reason: ObserveTLSSecurityProfile reportingComponent: "" diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/3ca6-metadata-authentication-operator.17fe72c59b829800.44a05c38.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/3ca6-metadata-authentication-operator.17fe72c59b829800.44a05c38.yaml new file mode 100644 index 000000000..0a3644c56 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/3ca6-metadata-authentication-operator.17fe72c59b829800.44a05c38.yaml @@ -0,0 +1,9 @@ +action: Create +controllerInstanceName: "" +generateName: "" +mame: authentication-operator.17fe72c59b829800.44a05c38 +namespace: openshift-authentication-operator +resourceType: + Group: "" + Resource: events + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/49ea-body-authentication-operator.17fe72c59b829800.c605caf3.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/49ea-body-authentication-operator.17fe72c59b829800.c605caf3.yaml new file mode 100644 index 000000000..2af8a78dd --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/49ea-body-authentication-operator.17fe72c59b829800.c605caf3.yaml @@ -0,0 +1,22 @@ +apiVersion: v1 +count: 1 +eventTime: null +firstTimestamp: "2024-10-14T22:38:20Z" +involvedObject: + kind: Deployment + name: authentication-operator + namespace: openshift-authentication-operator +kind: Event +lastTimestamp: "2024-10-14T22:38:20Z" +message: Created ClusterRoleBinding.rbac.authorization.k8s.io/system:openshift:useroauthaccesstoken-manager + because it was missing +metadata: + creationTimestamp: null + name: authentication-operator.17fe72c59b829800.c605caf3 + namespace: openshift-authentication-operator +reason: ClusterRoleBindingCreated +reportingComponent: "" +reportingInstance: "" +source: + component: cluster-authentication-operator-run-once-sync-context +type: Normal diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/49ea-metadata-authentication-operator.17fe72c59b829800.c605caf3.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/49ea-metadata-authentication-operator.17fe72c59b829800.c605caf3.yaml new file mode 100644 index 000000000..f1cc2e0d7 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/49ea-metadata-authentication-operator.17fe72c59b829800.c605caf3.yaml @@ -0,0 +1,9 @@ +action: Create +controllerInstanceName: "" +generateName: "" +mame: authentication-operator.17fe72c59b829800.c605caf3 +namespace: openshift-authentication-operator +resourceType: + Group: "" + Resource: events + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/5169-body-authentication-operator.17fe72c59b829800.ad6de22d.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/5169-body-authentication-operator.17fe72c59b829800.ad6de22d.yaml new file mode 100644 index 000000000..4fc0675dc --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/5169-body-authentication-operator.17fe72c59b829800.ad6de22d.yaml @@ -0,0 +1,31 @@ +apiVersion: v1 +count: 1 +eventTime: null +firstTimestamp: "2024-10-14T22:38:20Z" +involvedObject: + kind: Deployment + name: authentication-operator + namespace: openshift-authentication-operator +kind: Event +lastTimestamp: "2024-10-14T22:38:20Z" +message: 'Status for clusteroperator/authentication changed: Degraded set to Unknown + (""),Progressing set to Unknown (""),Available set to Unknown (""),Upgradeable set + to Unknown (""),EvaluationConditionsDetected set to Unknown (""),status.relatedObjects + changed from [] to [{"operator.openshift.io" "authentications" "" "cluster"} {"config.openshift.io" + "authentications" "" "cluster"} {"config.openshift.io" "infrastructures" "" "cluster"} + {"config.openshift.io" "oauths" "" "cluster"} {"route.openshift.io" "routes" "openshift-authentication" + "oauth-openshift"} {"" "services" "openshift-authentication" "oauth-openshift"} + {"" "namespaces" "" "openshift-config"} {"" "namespaces" "" "openshift-config-managed"} + {"" "namespaces" "" "openshift-authentication"} {"" "namespaces" "" "openshift-authentication-operator"} + {"" "namespaces" "" "openshift-ingress"} {"" "namespaces" "" "openshift-oauth-apiserver"}],status.versions + changed from [] to [{"operator" ""}]' +metadata: + creationTimestamp: null + name: authentication-operator.17fe72c59b829800.ad6de22d + namespace: openshift-authentication-operator +reason: OperatorStatusChanged +reportingComponent: "" +reportingInstance: "" +source: + component: cluster-authentication-operator-run-once-sync-context +type: Normal diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/5169-metadata-authentication-operator.17fe72c59b829800.ad6de22d.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/5169-metadata-authentication-operator.17fe72c59b829800.ad6de22d.yaml new file mode 100644 index 000000000..bc00a9a83 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/5169-metadata-authentication-operator.17fe72c59b829800.ad6de22d.yaml @@ -0,0 +1,9 @@ +action: Create +controllerInstanceName: "" +generateName: "" +mame: authentication-operator.17fe72c59b829800.ad6de22d +namespace: openshift-authentication-operator +resourceType: + Group: "" + Resource: events + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/044-body-authentication-operator.1802f6e4d8b05b26.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/5a6e-body-authentication-operator.17fe72c59b829800.b8ffb9fd.yaml similarity index 78% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/044-body-authentication-operator.1802f6e4d8b05b26.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/5a6e-body-authentication-operator.17fe72c59b829800.b8ffb9fd.yaml index d07aec970..8809bc45f 100644 --- a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/044-body-authentication-operator.1802f6e4d8b05b26.yaml +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/5a6e-body-authentication-operator.17fe72c59b829800.b8ffb9fd.yaml @@ -1,17 +1,17 @@ apiVersion: v1 count: 1 eventTime: null -firstTimestamp: "2024-10-29T15:44:29Z" +firstTimestamp: "2024-10-14T22:38:20Z" involvedObject: kind: Deployment name: authentication-operator namespace: openshift-authentication-operator kind: Event -lastTimestamp: "2024-10-29T15:44:29Z" +lastTimestamp: "2024-10-14T22:38:20Z" message: Required endpoints/host-etcd-2 in the openshift-etcd namespace not found. metadata: creationTimestamp: null - name: authentication-operator.1802f6e4d8b05b26 + name: authentication-operator.17fe72c59b829800.b8ffb9fd namespace: openshift-authentication-operator reason: ObserveStorageFailed reportingComponent: "" diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/5a6e-metadata-authentication-operator.17fe72c59b829800.b8ffb9fd.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/5a6e-metadata-authentication-operator.17fe72c59b829800.b8ffb9fd.yaml new file mode 100644 index 000000000..bca4eddb8 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/5a6e-metadata-authentication-operator.17fe72c59b829800.b8ffb9fd.yaml @@ -0,0 +1,9 @@ +action: Create +controllerInstanceName: "" +generateName: "" +mame: authentication-operator.17fe72c59b829800.b8ffb9fd +namespace: openshift-authentication-operator +resourceType: + Group: "" + Resource: events + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/6303-body-authentication-operator.17fe72c59b829800.c1353886.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/6303-body-authentication-operator.17fe72c59b829800.c1353886.yaml new file mode 100644 index 000000000..6a8002f96 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/6303-body-authentication-operator.17fe72c59b829800.c1353886.yaml @@ -0,0 +1,21 @@ +apiVersion: v1 +count: 1 +eventTime: null +firstTimestamp: "2024-10-14T22:38:20Z" +involvedObject: + kind: Deployment + name: authentication-operator + namespace: openshift-authentication-operator +kind: Event +lastTimestamp: "2024-10-14T22:38:20Z" +message: loginURL changed from to https://api.ostest.test.metalkube.org:6443 +metadata: + creationTimestamp: null + name: authentication-operator.17fe72c59b829800.c1353886 + namespace: openshift-authentication-operator +reason: ObserveAPIServerURL +reportingComponent: "" +reportingInstance: "" +source: + component: cluster-authentication-operator-run-once-sync-context +type: Normal diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/6303-metadata-authentication-operator.17fe72c59b829800.c1353886.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/6303-metadata-authentication-operator.17fe72c59b829800.c1353886.yaml new file mode 100644 index 000000000..f557a6557 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/6303-metadata-authentication-operator.17fe72c59b829800.c1353886.yaml @@ -0,0 +1,9 @@ +action: Create +controllerInstanceName: "" +generateName: "" +mame: authentication-operator.17fe72c59b829800.c1353886 +namespace: openshift-authentication-operator +resourceType: + Group: "" + Resource: events + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/6413-body-authentication-operator.17fe72c59b829800.52f3c122.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/6413-body-authentication-operator.17fe72c59b829800.52f3c122.yaml new file mode 100644 index 000000000..214e546bf --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/6413-body-authentication-operator.17fe72c59b829800.52f3c122.yaml @@ -0,0 +1,21 @@ +apiVersion: v1 +count: 1 +eventTime: null +firstTimestamp: "2024-10-14T22:38:20Z" +involvedObject: + kind: Deployment + name: authentication-operator + namespace: openshift-authentication-operator +kind: Event +lastTimestamp: "2024-10-14T22:38:20Z" +message: Created Service/api -n openshift-oauth-apiserver because it was missing +metadata: + creationTimestamp: null + name: authentication-operator.17fe72c59b829800.52f3c122 + namespace: openshift-authentication-operator +reason: ServiceCreated +reportingComponent: "" +reportingInstance: "" +source: + component: cluster-authentication-operator-run-once-sync-context +type: Normal diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/6413-metadata-authentication-operator.17fe72c59b829800.52f3c122.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/6413-metadata-authentication-operator.17fe72c59b829800.52f3c122.yaml new file mode 100644 index 000000000..7f517d8d8 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/6413-metadata-authentication-operator.17fe72c59b829800.52f3c122.yaml @@ -0,0 +1,9 @@ +action: Create +controllerInstanceName: "" +generateName: "" +mame: authentication-operator.17fe72c59b829800.52f3c122 +namespace: openshift-authentication-operator +resourceType: + Group: "" + Resource: events + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/024-body-authentication-operator.1802f6e485e9875b.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/72b5-body-authentication-operator.17fe72c59b829800.a18021d9.yaml similarity index 79% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/024-body-authentication-operator.1802f6e485e9875b.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/72b5-body-authentication-operator.17fe72c59b829800.a18021d9.yaml index b97ebe9e7..637c66491 100644 --- a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/024-body-authentication-operator.1802f6e485e9875b.yaml +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/72b5-body-authentication-operator.17fe72c59b829800.a18021d9.yaml @@ -1,18 +1,18 @@ apiVersion: v1 count: 1 eventTime: null -firstTimestamp: "2024-10-29T15:44:28Z" +firstTimestamp: "2024-10-14T22:38:20Z" involvedObject: kind: Deployment name: authentication-operator namespace: openshift-authentication-operator kind: Event -lastTimestamp: "2024-10-29T15:44:28Z" +lastTimestamp: "2024-10-14T22:38:20Z" message: Created ConfigMap/v4-0-config-system-trusted-ca-bundle -n openshift-authentication because it was missing metadata: creationTimestamp: null - name: authentication-operator.1802f6e485e9875b + name: authentication-operator.17fe72c59b829800.a18021d9 namespace: openshift-authentication-operator reason: ConfigMapCreated reportingComponent: "" diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/72b5-metadata-authentication-operator.17fe72c59b829800.a18021d9.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/72b5-metadata-authentication-operator.17fe72c59b829800.a18021d9.yaml new file mode 100644 index 000000000..19742750a --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/72b5-metadata-authentication-operator.17fe72c59b829800.a18021d9.yaml @@ -0,0 +1,9 @@ +action: Create +controllerInstanceName: "" +generateName: "" +mame: authentication-operator.17fe72c59b829800.a18021d9 +namespace: openshift-authentication-operator +resourceType: + Group: "" + Resource: events + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/013-body-authentication-operator.1802f6e48582e420.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/9650-body-authentication-operator.17fe72c59b829800.a1759283.yaml similarity index 79% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/013-body-authentication-operator.1802f6e48582e420.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/9650-body-authentication-operator.17fe72c59b829800.a1759283.yaml index c22e28b5f..bf4989a48 100644 --- a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/013-body-authentication-operator.1802f6e48582e420.yaml +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/9650-body-authentication-operator.17fe72c59b829800.a1759283.yaml @@ -1,18 +1,18 @@ apiVersion: v1 count: 1 eventTime: null -firstTimestamp: "2024-10-29T15:44:28Z" +firstTimestamp: "2024-10-14T22:38:20Z" involvedObject: kind: Deployment name: authentication-operator namespace: openshift-authentication-operator kind: Event -lastTimestamp: "2024-10-29T15:44:28Z" +lastTimestamp: "2024-10-14T22:38:20Z" message: Created Secret/v4-0-config-system-session -n openshift-authentication because it was missing metadata: creationTimestamp: null - name: authentication-operator.1802f6e48582e420 + name: authentication-operator.17fe72c59b829800.a1759283 namespace: openshift-authentication-operator reason: SecretCreated reportingComponent: "" diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/9650-metadata-authentication-operator.17fe72c59b829800.a1759283.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/9650-metadata-authentication-operator.17fe72c59b829800.a1759283.yaml new file mode 100644 index 000000000..295b1f6a4 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/9650-metadata-authentication-operator.17fe72c59b829800.a1759283.yaml @@ -0,0 +1,9 @@ +action: Create +controllerInstanceName: "" +generateName: "" +mame: authentication-operator.17fe72c59b829800.a1759283 +namespace: openshift-authentication-operator +resourceType: + Group: "" + Resource: events + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/034-body-authentication-operator.1802f6e49003180c.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/a103-body-authentication-operator.17fe72c59b829800.8953695d.yaml similarity index 80% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/034-body-authentication-operator.1802f6e49003180c.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/a103-body-authentication-operator.17fe72c59b829800.8953695d.yaml index e3bc10085..2e03f08cb 100644 --- a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/034-body-authentication-operator.1802f6e49003180c.yaml +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/a103-body-authentication-operator.17fe72c59b829800.8953695d.yaml @@ -1,18 +1,18 @@ apiVersion: v1 count: 1 eventTime: null -firstTimestamp: "2024-10-29T15:44:28Z" +firstTimestamp: "2024-10-14T22:38:20Z" involvedObject: kind: Deployment name: authentication-operator namespace: openshift-authentication-operator kind: Event -lastTimestamp: "2024-10-29T15:44:28Z" +lastTimestamp: "2024-10-14T22:38:20Z" message: Created RoleBinding.rbac.authorization.k8s.io/system:openshift:oauth-servercert-trust -n openshift-config-managed because it was missing metadata: creationTimestamp: null - name: authentication-operator.1802f6e49003180c + name: authentication-operator.17fe72c59b829800.8953695d namespace: openshift-authentication-operator reason: RoleBindingCreated reportingComponent: "" diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/a103-metadata-authentication-operator.17fe72c59b829800.8953695d.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/a103-metadata-authentication-operator.17fe72c59b829800.8953695d.yaml new file mode 100644 index 000000000..051408268 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/a103-metadata-authentication-operator.17fe72c59b829800.8953695d.yaml @@ -0,0 +1,9 @@ +action: Create +controllerInstanceName: "" +generateName: "" +mame: authentication-operator.17fe72c59b829800.8953695d +namespace: openshift-authentication-operator +resourceType: + Group: "" + Resource: events + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/adcf-body-authentication-operator.17fe72c59b829800.9b8e044a.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/adcf-body-authentication-operator.17fe72c59b829800.9b8e044a.yaml new file mode 100644 index 000000000..b286dd9b3 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/adcf-body-authentication-operator.17fe72c59b829800.9b8e044a.yaml @@ -0,0 +1,21 @@ +apiVersion: v1 +count: 1 +eventTime: null +firstTimestamp: "2024-10-14T22:38:20Z" +involvedObject: + kind: Deployment + name: authentication-operator + namespace: openshift-authentication-operator +kind: Event +lastTimestamp: "2024-10-14T22:38:20Z" +message: Created Namespace/openshift-oauth-apiserver because it was missing +metadata: + creationTimestamp: null + name: authentication-operator.17fe72c59b829800.9b8e044a + namespace: openshift-authentication-operator +reason: NamespaceCreated +reportingComponent: "" +reportingInstance: "" +source: + component: cluster-authentication-operator-run-once-sync-context +type: Normal diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/adcf-metadata-authentication-operator.17fe72c59b829800.9b8e044a.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/adcf-metadata-authentication-operator.17fe72c59b829800.9b8e044a.yaml new file mode 100644 index 000000000..2cb35fccf --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/adcf-metadata-authentication-operator.17fe72c59b829800.9b8e044a.yaml @@ -0,0 +1,9 @@ +action: Create +controllerInstanceName: "" +generateName: "" +mame: authentication-operator.17fe72c59b829800.9b8e044a +namespace: openshift-authentication-operator +resourceType: + Group: "" + Resource: events + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/028-body-authentication-operator.1802f6e48fc5bf22.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/ba68-body-authentication-operator.17fe72c59b829800.e6f3afa2.yaml similarity index 79% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/028-body-authentication-operator.1802f6e48fc5bf22.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/ba68-body-authentication-operator.17fe72c59b829800.e6f3afa2.yaml index 272ef321b..c29a163a2 100644 --- a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/028-body-authentication-operator.1802f6e48fc5bf22.yaml +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/ba68-body-authentication-operator.17fe72c59b829800.e6f3afa2.yaml @@ -1,18 +1,18 @@ apiVersion: v1 count: 1 eventTime: null -firstTimestamp: "2024-10-29T15:44:28Z" +firstTimestamp: "2024-10-14T22:38:20Z" involvedObject: kind: Deployment name: authentication-operator namespace: openshift-authentication-operator kind: Event -lastTimestamp: "2024-10-29T15:44:28Z" +lastTimestamp: "2024-10-14T22:38:20Z" message: Created ServiceAccount/oauth-openshift -n openshift-authentication because it was missing metadata: creationTimestamp: null - name: authentication-operator.1802f6e48fc5bf22 + name: authentication-operator.17fe72c59b829800.e6f3afa2 namespace: openshift-authentication-operator reason: ServiceAccountCreated reportingComponent: "" diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/ba68-metadata-authentication-operator.17fe72c59b829800.e6f3afa2.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/ba68-metadata-authentication-operator.17fe72c59b829800.e6f3afa2.yaml new file mode 100644 index 000000000..b46e58dfb --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/ba68-metadata-authentication-operator.17fe72c59b829800.e6f3afa2.yaml @@ -0,0 +1,9 @@ +action: Create +controllerInstanceName: "" +generateName: "" +mame: authentication-operator.17fe72c59b829800.e6f3afa2 +namespace: openshift-authentication-operator +resourceType: + Group: "" + Resource: events + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/022-body-authentication-operator.1802f6e485dc1cda.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/bdd9-body-authentication-operator.17fe72c59b829800.c1403ea8.yaml similarity index 80% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/022-body-authentication-operator.1802f6e485dc1cda.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/bdd9-body-authentication-operator.17fe72c59b829800.c1403ea8.yaml index 5eef8b3aa..60785b00b 100644 --- a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/022-body-authentication-operator.1802f6e485dc1cda.yaml +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/bdd9-body-authentication-operator.17fe72c59b829800.c1403ea8.yaml @@ -1,18 +1,18 @@ apiVersion: v1 count: 1 eventTime: null -firstTimestamp: "2024-10-29T15:44:28Z" +firstTimestamp: "2024-10-14T22:38:20Z" involvedObject: kind: Deployment name: authentication-operator namespace: openshift-authentication-operator kind: Event -lastTimestamp: "2024-10-29T15:44:28Z" +lastTimestamp: "2024-10-14T22:38:20Z" message: Created ClusterRoleBinding.rbac.authorization.k8s.io/system:openshift:openshift-authentication because it was missing metadata: creationTimestamp: null - name: authentication-operator.1802f6e485dc1cda + name: authentication-operator.17fe72c59b829800.c1403ea8 namespace: openshift-authentication-operator reason: ClusterRoleBindingCreated reportingComponent: "" diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/bdd9-metadata-authentication-operator.17fe72c59b829800.c1403ea8.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/bdd9-metadata-authentication-operator.17fe72c59b829800.c1403ea8.yaml new file mode 100644 index 000000000..dc9545902 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/bdd9-metadata-authentication-operator.17fe72c59b829800.c1403ea8.yaml @@ -0,0 +1,9 @@ +action: Create +controllerInstanceName: "" +generateName: "" +mame: authentication-operator.17fe72c59b829800.c1403ea8 +namespace: openshift-authentication-operator +resourceType: + Group: "" + Resource: events + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/043-body-authentication-operator.1802f6e4d8a0b2ab.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/bf8a-body-authentication-operator.17fe72c59b829800.49fb0e36.yaml similarity index 85% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/043-body-authentication-operator.1802f6e4d8a0b2ab.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/bf8a-body-authentication-operator.17fe72c59b829800.49fb0e36.yaml index 767d5d329..07baae997 100644 --- a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/043-body-authentication-operator.1802f6e4d8a0b2ab.yaml +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/bf8a-body-authentication-operator.17fe72c59b829800.49fb0e36.yaml @@ -1,20 +1,20 @@ apiVersion: v1 count: 1 eventTime: null -firstTimestamp: "2024-10-29T15:44:29Z" +firstTimestamp: "2024-10-14T22:38:20Z" involvedObject: kind: Deployment name: authentication-operator namespace: openshift-authentication-operator kind: Event -lastTimestamp: "2024-10-29T15:44:29Z" +lastTimestamp: "2024-10-14T22:38:20Z" message: cipherSuites changed to ["TLS_AES_128_GCM_SHA256" "TLS_AES_256_GCM_SHA384" "TLS_CHACHA20_POLY1305_SHA256" "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256" "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256" "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384" "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384" "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256" "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256"] metadata: creationTimestamp: null - name: authentication-operator.1802f6e4d8a0b2ab + name: authentication-operator.17fe72c59b829800.49fb0e36 namespace: openshift-authentication-operator reason: ObserveTLSSecurityProfile reportingComponent: "" diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/bf8a-metadata-authentication-operator.17fe72c59b829800.49fb0e36.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/bf8a-metadata-authentication-operator.17fe72c59b829800.49fb0e36.yaml new file mode 100644 index 000000000..dbf69a119 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/bf8a-metadata-authentication-operator.17fe72c59b829800.49fb0e36.yaml @@ -0,0 +1,9 @@ +action: Create +controllerInstanceName: "" +generateName: "" +mame: authentication-operator.17fe72c59b829800.49fb0e36 +namespace: openshift-authentication-operator +resourceType: + Group: "" + Resource: events + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/018-body-authentication-operator.1802f6e485b56e6d.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/e0b5-body-authentication-operator.17fe72c59b829800.ce8a3f4a.yaml similarity index 78% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/018-body-authentication-operator.1802f6e485b56e6d.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/e0b5-body-authentication-operator.17fe72c59b829800.ce8a3f4a.yaml index 133d11779..a83934f71 100644 --- a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/018-body-authentication-operator.1802f6e485b56e6d.yaml +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/e0b5-body-authentication-operator.17fe72c59b829800.ce8a3f4a.yaml @@ -1,17 +1,17 @@ apiVersion: v1 count: 1 eventTime: null -firstTimestamp: "2024-10-29T15:44:28Z" +firstTimestamp: "2024-10-14T22:38:20Z" involvedObject: kind: Deployment name: authentication-operator namespace: openshift-authentication-operator kind: Event -lastTimestamp: "2024-10-29T15:44:28Z" +lastTimestamp: "2024-10-14T22:38:20Z" message: Created ConfigMap/audit -n openshift-authentication because it was missing metadata: creationTimestamp: null - name: authentication-operator.1802f6e485b56e6d + name: authentication-operator.17fe72c59b829800.ce8a3f4a namespace: openshift-authentication-operator reason: ConfigMapCreated reportingComponent: "" diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/e0b5-metadata-authentication-operator.17fe72c59b829800.ce8a3f4a.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/e0b5-metadata-authentication-operator.17fe72c59b829800.ce8a3f4a.yaml new file mode 100644 index 000000000..69ac87f0c --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/e0b5-metadata-authentication-operator.17fe72c59b829800.ce8a3f4a.yaml @@ -0,0 +1,9 @@ +action: Create +controllerInstanceName: "" +generateName: "" +mame: authentication-operator.17fe72c59b829800.ce8a3f4a +namespace: openshift-authentication-operator +resourceType: + Group: "" + Resource: events + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/020-body-authentication-operator.1802f6e485c99334.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/eb3c-body-authentication-operator.17fe72c59b829800.6c145ec7.yaml similarity index 78% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/020-body-authentication-operator.1802f6e485c99334.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/eb3c-body-authentication-operator.17fe72c59b829800.6c145ec7.yaml index c348141c5..3a2292930 100644 --- a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/020-body-authentication-operator.1802f6e485c99334.yaml +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/eb3c-body-authentication-operator.17fe72c59b829800.6c145ec7.yaml @@ -1,17 +1,17 @@ apiVersion: v1 count: 1 eventTime: null -firstTimestamp: "2024-10-29T15:44:28Z" +firstTimestamp: "2024-10-14T22:38:20Z" involvedObject: kind: Deployment name: authentication-operator namespace: openshift-authentication-operator kind: Event -lastTimestamp: "2024-10-29T15:44:28Z" +lastTimestamp: "2024-10-14T22:38:20Z" message: Created Namespace/openshift-authentication because it was missing metadata: creationTimestamp: null - name: authentication-operator.1802f6e485c99334 + name: authentication-operator.17fe72c59b829800.6c145ec7 namespace: openshift-authentication-operator reason: NamespaceCreated reportingComponent: "" diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/eb3c-metadata-authentication-operator.17fe72c59b829800.6c145ec7.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/eb3c-metadata-authentication-operator.17fe72c59b829800.6c145ec7.yaml new file mode 100644 index 000000000..d39df7bd7 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/eb3c-metadata-authentication-operator.17fe72c59b829800.6c145ec7.yaml @@ -0,0 +1,9 @@ +action: Create +controllerInstanceName: "" +generateName: "" +mame: authentication-operator.17fe72c59b829800.6c145ec7 +namespace: openshift-authentication-operator +resourceType: + Group: "" + Resource: events + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/003-body-authentication-operator.1802f6e48510cb24.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/f16c-body-authentication-operator.17fe72c59b829800.a8ecfbce.yaml similarity index 82% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/003-body-authentication-operator.1802f6e48510cb24.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/f16c-body-authentication-operator.17fe72c59b829800.a8ecfbce.yaml index 4f2d694b9..adf835c25 100644 --- a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/003-body-authentication-operator.1802f6e48510cb24.yaml +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/f16c-body-authentication-operator.17fe72c59b829800.a8ecfbce.yaml @@ -1,18 +1,18 @@ apiVersion: v1 count: 1 eventTime: null -firstTimestamp: "2024-10-29T15:44:28Z" +firstTimestamp: "2024-10-14T22:38:20Z" involvedObject: kind: Deployment name: authentication-operator namespace: openshift-authentication-operator kind: Event -lastTimestamp: "2024-10-29T15:44:28Z" +lastTimestamp: "2024-10-14T22:38:20Z" message: AuditProfile changed from '%!s()' to 'map[audit-log-format:[json] audit-log-maxbackup:[10] audit-log-maxsize:[100] audit-log-path:[/var/log/oauth-server/audit.log] audit-policy-file:[/var/run/configmaps/audit/audit.yaml]]' metadata: creationTimestamp: null - name: authentication-operator.1802f6e48510cb24 + name: authentication-operator.17fe72c59b829800.a8ecfbce namespace: openshift-authentication-operator reason: ObserveAuditProfile reportingComponent: "" diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/f16c-metadata-authentication-operator.17fe72c59b829800.a8ecfbce.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/f16c-metadata-authentication-operator.17fe72c59b829800.a8ecfbce.yaml new file mode 100644 index 000000000..7b904865a --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/f16c-metadata-authentication-operator.17fe72c59b829800.a8ecfbce.yaml @@ -0,0 +1,9 @@ +action: Create +controllerInstanceName: "" +generateName: "" +mame: authentication-operator.17fe72c59b829800.a8ecfbce +namespace: openshift-authentication-operator +resourceType: + Group: "" + Resource: events + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/f760-body-authentication-operator.17fe72c59b829800.103eb7f4.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/f760-body-authentication-operator.17fe72c59b829800.103eb7f4.yaml new file mode 100644 index 000000000..76a4e90a4 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/f760-body-authentication-operator.17fe72c59b829800.103eb7f4.yaml @@ -0,0 +1,22 @@ +apiVersion: v1 +count: 1 +eventTime: null +firstTimestamp: "2024-10-14T22:38:20Z" +involvedObject: + kind: Deployment + name: authentication-operator + namespace: openshift-authentication-operator +kind: Event +lastTimestamp: "2024-10-14T22:38:20Z" +message: Created ServiceAccount/oauth-apiserver-sa -n openshift-oauth-apiserver because + it was missing +metadata: + creationTimestamp: null + name: authentication-operator.17fe72c59b829800.103eb7f4 + namespace: openshift-authentication-operator +reason: ServiceAccountCreated +reportingComponent: "" +reportingInstance: "" +source: + component: cluster-authentication-operator-run-once-sync-context +type: Normal diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/f760-metadata-authentication-operator.17fe72c59b829800.103eb7f4.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/f760-metadata-authentication-operator.17fe72c59b829800.103eb7f4.yaml new file mode 100644 index 000000000..10c023d42 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication-operator/core/events/f760-metadata-authentication-operator.17fe72c59b829800.103eb7f4.yaml @@ -0,0 +1,9 @@ +action: Create +controllerInstanceName: "" +generateName: "" +mame: authentication-operator.17fe72c59b829800.103eb7f4 +namespace: openshift-authentication-operator +resourceType: + Group: "" + Resource: events + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/configmaps/023-body-v4-0-config-system-trusted-ca-bundle.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/configmaps/7023-body-v4-0-config-system-trusted-ca-bundle.yaml similarity index 67% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/configmaps/023-body-v4-0-config-system-trusted-ca-bundle.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/configmaps/7023-body-v4-0-config-system-trusted-ca-bundle.yaml index 526e192e5..b92009344 100644 --- a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/configmaps/023-body-v4-0-config-system-trusted-ca-bundle.yaml +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/configmaps/7023-body-v4-0-config-system-trusted-ca-bundle.yaml @@ -1,8 +1,6 @@ apiVersion: v1 kind: ConfigMap metadata: - annotations: - synthetic.mom.openshift.io/controller-instance-name: TODO-staticResourceController creationTimestamp: null labels: config.openshift.io/inject-trusted-cabundle: "true" diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/configmaps/7023-metadata-v4-0-config-system-trusted-ca-bundle.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/configmaps/7023-metadata-v4-0-config-system-trusted-ca-bundle.yaml new file mode 100644 index 000000000..07e9ab8cd --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/configmaps/7023-metadata-v4-0-config-system-trusted-ca-bundle.yaml @@ -0,0 +1,9 @@ +action: Create +controllerInstanceName: TODO-staticResourceController +generateName: "" +mame: v4-0-config-system-trusted-ca-bundle +namespace: openshift-authentication +resourceType: + Group: "" + Resource: configmaps + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/configmaps/017-body-audit.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/configmaps/84c5-body-audit.yaml similarity index 76% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/configmaps/017-body-audit.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/configmaps/84c5-body-audit.yaml index 6a0debd87..907508ffc 100644 --- a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/configmaps/017-body-audit.yaml +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/configmaps/84c5-body-audit.yaml @@ -13,8 +13,6 @@ data: - level: Metadata kind: ConfigMap metadata: - annotations: - synthetic.mom.openshift.io/controller-instance-name: TODO-staticResourceController creationTimestamp: null name: audit namespace: openshift-authentication diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/configmaps/84c5-metadata-audit.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/configmaps/84c5-metadata-audit.yaml new file mode 100644 index 000000000..ac0ff4ee5 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/configmaps/84c5-metadata-audit.yaml @@ -0,0 +1,9 @@ +action: Create +controllerInstanceName: TODO-staticResourceController +generateName: "" +mame: audit +namespace: openshift-authentication +resourceType: + Group: "" + Resource: configmaps + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/secrets/012-body-v4-0-config-system-session.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/secrets/c23d-body-v4-0-config-system-session.yaml similarity index 52% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/secrets/012-body-v4-0-config-system-session.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/secrets/c23d-body-v4-0-config-system-session.yaml index 66df1c1cf..f925a641b 100644 --- a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/secrets/012-body-v4-0-config-system-session.yaml +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/secrets/c23d-body-v4-0-config-system-session.yaml @@ -1,10 +1,8 @@ apiVersion: v1 data: - v4-0-config-system-session: eyJraW5kIjoiU2Vzc2lvblNlY3JldHMiLCJhcGlWZXJzaW9uIjoib3BlcmF0b3J2MWNsaWVudCIsInNlY3JldHMiOlt7ImF1dGhlbnRpY2F0aW9uIjoiZXlXLXlELXNUQnVvWXJNbVp5Um5PcjN2M2c2RkI2ZGFIQkZwck12MVd5enJNbHh5am96WTE1Y3NRSTdGV0htMyIsImVuY3J5cHRpb24iOiI2VVlTNDNGNmJQUnFHckYxYUl2U3pnZ3gxTVRWM0s1XyJ9XX0= + v4-0-config-system-session: eyJraW5kIjoiU2Vzc2lvblNlY3JldHMiLCJhcGlWZXJzaW9uIjoib3BlcmF0b3J2MWNsaWVudCIsInNlY3JldHMiOlt7ImF1dGhlbnRpY2F0aW9uIjoiZXlFUDNvR21XNnNEdW5JWlV2aHVabFJXV25GdlpkQ2RhYXJCZGl0MEJ2b1FKOVp2aW8xcHdNMUdDNXF6RTY2NyIsImVuY3J5cHRpb24iOiJmSDNqeF9CR0J0alBZQW9HU011M3RJbVpLX29aRmdWeiJ9XX0= kind: Secret metadata: - annotations: - synthetic.mom.openshift.io/controller-instance-name: TODO-payloadConfigController creationTimestamp: null labels: app: oauth-openshift diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/secrets/c23d-metadata-v4-0-config-system-session.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/secrets/c23d-metadata-v4-0-config-system-session.yaml new file mode 100644 index 000000000..547d37989 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/secrets/c23d-metadata-v4-0-config-system-session.yaml @@ -0,0 +1,9 @@ +action: Create +controllerInstanceName: TODO-payloadConfigController +generateName: "" +mame: v4-0-config-system-session +namespace: openshift-authentication +resourceType: + Group: "" + Resource: secrets + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/secrets/025-body-v4-0-config-system-ocp-branding-template.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/secrets/dc0d-body-v4-0-config-system-ocp-branding-template.yaml similarity index 99% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/secrets/025-body-v4-0-config-system-ocp-branding-template.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/secrets/dc0d-body-v4-0-config-system-ocp-branding-template.yaml index 21b752463..b6fa4319a 100644 --- a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/secrets/025-body-v4-0-config-system-ocp-branding-template.yaml +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/secrets/dc0d-body-v4-0-config-system-ocp-branding-template.yaml @@ -5,8 +5,6 @@ data: providers.html: PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuLXVzIiBkYXRhLXRlc3QtaWQ9ImxvZ2luIj4KICA8aGVhZD4KICAgIDx0aXRsZT4KICAgICAgCiAgICAgICAge3sgLkxvY2FsZS5Mb2dJbiB9fQogICAgICAKICAgICAgIMK3IFJlZCBIYXQgT3BlblNoaWZ0CiAgICA8L3RpdGxlPgogICAgPG1ldGEgaHR0cC1lcXVpdj0iWC1VQS1Db21wYXRpYmxlIiBjb250ZW50PSJJRT1lZGdlIj4KICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJ3aWR0aD1kZXZpY2Utd2lkdGgsIGluaXRpYWwtc2NhbGU9MS4wIj4KICAgIDxsaW5rIHJlbD0ic2hvcnRjdXQgaWNvbiIgaHJlZj0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFFQUFBQUJBQ0FZQUFBQ3FhWEhlQUFBQmJXbERRMUJwWTJNQUFDaVJkWkU5UzhOUUZJWWZxMUxSbGc0NmlBaDJxT0pRUVJURVVldmdVa1NxZ2w5TGtqYXQwTlNRcEVoeEZWd2NCQWZSeGEvQmY2Q3I0S29nQ0lvZzR1YnUxeUlTejIyRWl1Z05OK2ZodmZjOW5MeUJVTHBvV0c3RENGZ2x6OG1NcCtLemMvUHg4Qk1Sd2tScG9rc3pYSHQwY2pMTnYrdjloanBWci90VXIvL3YvYmxhc2puWGdMb200U0hEZGp4aG1ZYjBpbWNyM2hCdU13cGFWbmhmT09uSWdNSVhTdGNEZmxTY0QvaFZzVE9kR1lPUTZoblAvMkQ5QnhzRnh4THVGVTVZeGJMeFBZLzZra2l1TkRNbHRVTjJKeTRaeGtrUlI2Zk1Fa1U4K3FTV0pMTy9mZjFWM3dUTDRqSGtiVlBCRVVlZWduaVRvcGFsYTA2cUtYcE9uaUlWbGZ2dlBGMXpjQ0RvSGtsQjQ0UHZ2M1JEZUFzK04zMy80OEQzUHcraC9oN09Talgvc3VRMC9DYjZaazFMN0VGc0RVN09hNXErRGFmcjBINW5hNDVXbGVwbGgwd1RubzhoT2dldFY5QzhFR1QxZmM3UkxVeXZ5aSs2aEoxZDZKSDdzY1V2elY5bjhyWDhRMklBQUFBSmNFaFpjd0FBYnJvQUFHNjZBZGJlc1JjQUFBZ0tTVVJCVkhqYTVWc0xUSlZsR0g1QlJBR1JVaEpFbmZjNWx3UU51K2hTekNSTDEwcm5NamZGU1pxVVd0TmxpN1phRjFkeldjM0NBRzNUMG1xaVFvMlptYktKbG1uZWtNcTJGQzhwZ2x5c3VJZ2lZTS96bmZmWVVRNkludk43T0lkM2V3Ym44Si9EL3p6Zjk3M2ZlL2svdnl0WHJraDdObjlwNXhaZy84WFB6Ni9GQytQajR5T0Nnb0tlOHZmM0orNEZ3dkdaRG0yQkJHWnhmV05qWXdWd0NQaW10clkyT3k4dnIvUUduN0h4dnZwTE13S01HalVxTENRa1pFR0hEaDJlQjZKQVhQQlBwSzZ1VGk1ZHVpVDE5ZlhtdFVlbUwrNGxJQ0JBT25YcUpJR0JnV0svdDRhR2hpSWd2YWFtNXVOZHUzWlYzcklBQ1FrSkkvREZLMENjSXk3NFFpa3VMcFp6NTg1SlZWV1ZFWUdmOTVRZjRUMFRKQjhhR2lvUkVSSFNzMmRQd1lEWmhUaUVlNXkzYmR1Mm4yOWFnUEhqeDAvcjJMRmpCaFFPNVVnZk8zWk1UcDA2WlVpM1phTVlmZnYybFVHREJwbVpnUmxhZGZueTVibGJ0Mjc5dXRVQ2dQd3pJUDg1RUZoZVhpNkhEeCtXeXNwS3IzSnVYYnQybFppWUdBa1BEeGNJVUFkTWh3Z2JiaWdBcHYwRFVDNFg1RU00M1E4Y09NQXY4RW9QRHc0U0Z4ZG5sZ1U0VkdNbWo4TnkyT3Nvd0RYYjRPalJvN3RpQ3EzQ3RBL2h5Ty9mdjk5cnlkTjQ3K1JBTHVEVWhkeklzZGs0SURnNCtFVTR2R2l1K2Z6OGZPUGh2ZDNJZ1Z6SWlkemdJT2M3RldETW1ERjM0WUlGOVBaSGp4NDFYdDVYakZ6b3hNa05XRUN1OWgza3FnQ2RPM2VlREFGNmNLdWp0L2MxTzNueXBObkd3VEVTWENjMW1RRlFaaklWT252MnJGZXYrNWI4QWJucExKanNUSUJZQmcrbHBhVStHL2VUR3preWxHOGlBTlpET0lNY1gxcjd6bndCT1pLcnMyVEluNTdTNmtndkVJZ0F1Z09oK2g1RHJITGdITDIyaGYvYm5yOWdPL1IzbWcxeXk3QWlyZy9oTGdNOERnd0hlaXY1anZZYlV4Rk9BL3VBemNBdTRLTDdzMGJEMFRIcURYQzhnT3ZEblFLUWVDSXdDNGptVGtObkJQd0RsSEJLVW5nVjQwN2dmbUFrTUJ2SUJ6S0E5U3FRdXdTNFBuTU5zR3E2UFFTOEJ6eW9KTG14NWdMYmdRS2dES2pWYTRPQVNDQUdlQlFZQzR3QTdnT21BYS9xWnl3dGlMalRGZ0J2NkRvL0FhUUJYd0xGelZ4L0FhZ0FmZ2UrQXZvQk00RTV3R01xVERLUTR3MGxzZGVCcGN6R2dJMDZvc3RhSU84MGFBSGVBaVlBMjRBb1lHSXoxeUo4bDdDd3NMWWh3RXZBYS9yN1VwMitoUzU4SDZjOVE3WXB3RHZYL1kwWjNxSkZpMHl5dzFpL1g3OStubDBDOFRydFdTUjhGM2pUVGQvTDViSEo0ZlhRb1VNbEtTbEpwaytmTHBHUmtlYTlrcElTRStGNVRJQlFIWEY2Y3BaZDNyYklZU1VtSmtwNmVyb0VCUVdaMThlUEg1ZlZxMWZMbWpWcjVNeVpNNTRUWUxidTcwZUJWN2lkV2lSQXQyN2R6RWp2MmJQSENKR2RuZTF5cGNwbEFlN1FmWjdSdzNLZ3lNSklMalUxVlhKeWNzekl1eXRlY1ZtQWNjQVE0SmhPZjZ1TEc0V0ZoY2JyVDVvMFNhcXJxeVVySzh1bHNyekxBa3pRK1A1NzRHK0xCUmd3WUlETW1ERkRaczZjS2YzNzl6ZHhQU3ZBTE5ON1JJQmdnSG5sSmQydnJUS1d1QmN2WGl4VHBrd3hmb0IyK3ZScHljaklrUFBuejN0dUNmVFVJSVZSM0JFTEJWaXlaSWxNblRyVkZoc1VGTWpLbFNzbE16TlR5c3JLUE9zRG1OWjI0WGFrSWxobGE5ZXVOYWtzSGVEbXpadmx3b1VMYlNNWGFOVDFYNllCaTFWRzBvU2pqZFg0SThmRmJkY2xBZllEa3pYaGFiaU5sUjNtR1N1QVhocC8vT21wWktoZVIrQTNmZDJqUncrWlAzKys1T2JtbWxEVlNnRkMxUG0yaVhTWVh0b2VuL2ZwMDhlOFYxUlVKT3ZXcmJORWdFZ1ZvVlJMYVI0VGdOM1haY3VXbVgyWjdXbmFpUk1uVEh4T1QyMlZ4ZXI2MzZmVkpZOEp3SWhzMXF4WnBoL1BKdXFxVmF0azQ4YU5VbEZSWWFrUEdLdHJkNjhiOGc2WEJHQ2RmZUxFaVdZbWJOKysvYlk4S1RKQVUyL1dFN2UwQlIrUWw1ZG5TNG14QklZTkcyYUtFN1cxdFpZSmtLUUJXSjR1QVkrWHhIcjM3aTBwS1NseThPQkIyYjE3dHl4Y3VOQXk4c05VQUZhSjA4VTkxZUpibmdIUjBkR1NuSnhzUXRUdTNidWI5NWlVSERsaVRWRE12T05EM1FHK0E3SThHUWtPR1RMRUZDVllrS1NSTkQwL3R6MldwOXh0dk1tUGdJZTEzcEFpdHY2Q3h3UmdqNDJrMlc1T1Mwc3pNYnBqZkQ1WXAydU91TjdxQ2xieVNScHV2d3o4Nm1aeGI5cllaaDQ1Y21TemJmUVBnQ2VBRFRwYXQxb1p2Z2Q0SDNnRXFCRmJ1VzI5bTJmWExUdkJscDRoeU5ZSWplWHNINERGNnJsYmF3UEZWZ2JuTnBjZ3RwN0NYTEcxeXF4WVhtNjMxV0lya05wYlkvejVuTmphWXJtYU85aGJZMzQ2elNNMXdrdlF0ZDVMMS9rV25VVmUxUnFqL1NpMmJuQ2lydCs3eGRiZWVsWkxaMFMxL044Y1paMG5URytvUmovUFlEcFQzTmNjdmFFQUxEbXpkZXl1aWlzSmZncDhvYVBLK21HY2ppNlhoR043L0YvZ0QrQVhzYlhIZjNKVHR1ZG81cUdvNnhvb1Z3VWdhVDU0N0U0QkhJWElVWFNTYXgrUWFOU3d0a3l6T3lzZmtDQTNjblRrNXloQUkySjZmejVyZS9IaVJjdHVncVA2bCtKMkc3a3hieUhYSnJzQTNpeTNQM1h0cTBadTVFaXVUUVJBSnBmUDljR3FqcThhdWVtWmdrUE9CTWhpT2hzVkZXVWVNdlkxSXlkeUkwZHliU0lBMXYybWhvYUdFaFkzMkczeE5lUHpBK1FHanNYZ210MUVnQjA3ZHBUamp5dW8wT0RCZzMzS0Y1QUw2NVk2K3FuZ1d1WTBGRVpDc3h3aUZOQlR4c2JHbWkzRDI0MGN5SVdjeUEwSjNDZk41Z0k3ZCs2c3FxdXJtOFBEQlR4cE1YejRjSy8yQjd4M2N0QlRJOVhrUm83WHhBYnQ5Y2hNaXdLb0NFOURnTSs4OGRBVUhkN0FnUU1kRDAzTkJ2bE1wOUZoZXowMjF5b0JhSHB3Y2g1RWVBSG81U1VISjg4QWFSaXcxT1lPVHJaYUFMczVISjE5MHVIb2JKdllKdlRvYkxrZW5mMjJOVWRuSFQ4czdma0VlYnMvUGY0ZkpacmFPeFg3SGpnQUFBQUFTVVZPUks1Q1lJST0iPgoKICAgIDxzdHlsZT4KICAgICAgQGZvbnQtZmFjZXtmb250LWZhbWlseTonUmVkSGF0VGV4dCc7c3JjOnVybChkYXRhOmFwcGxpY2F0aW9uL3gtZm9udC13b2ZmO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGQwOUdSZ0FCQUFBQUFJMGhBQklBQUFBQkpVd0FBUUFBQUFDTGlBQUFBWmtBQUFSakFBQUFBQUFBQUFCQ1FWTkZBQUFCbEFBQUFEb0FBQUE2aXlXVXNVUlRTVWNBQUl1QUFBQUFDQUFBQUFnQUFBQUJSMUJQVXdBQUFkQUFBQTBFQUFBaUtnMFpoQnRIVTFWQ0FBQU8xQUFBQXVjQUFBWW9jQU52OEU5VEx6SUFBQkc4QUFBQVdBQUFBR0JtQjREUlkyMWhjQUFBRWhRQUFBUHZBQUFGdEc5TS9WZGpkblFnQUFDRG1BQUFBRTBBQUFCNExJZisrV1p3WjIwQUFJUG9BQUFHOGdBQURoV2VOaFBPWjJGemNBQUFnNUFBQUFBSUFBQUFDQUFBQUJCbmJIbG1BQUFXQkFBQVhjZ0FBTWhTN2NrMHNHaGxZV1FBQUhQTUFBQUFOZ0FBQURZVXE0N1hhR2hsWVFBQWRBUUFBQUFoQUFBQUpBZmpCSFZvYlhSNEFBQjBLQUFBQXlJQUFBYWFjQXhRRm14dlkyRUFBSGRNQUFBRFVBQUFBMURMdXZ4SmJXRjRjQUFBZXB3QUFBQWdBQUFBSUFMN0R6QnVZVzFsQUFCNnZBQUFBdzhBQUFsUktLakpWM0J2YzNRQUFIM01BQUFGd1FBQUNnbjBwcC9ZY0hKbGNBQUFpdHdBQUFDaUFBQUF2ZUcyWGlNQUFRQUFBQWdBQUFBRUFBNEFBbWxrWlc5eWIyMXVBQUpFUmt4VUFBNXNZWFJ1QUE0QUJnQUFBQUFBQVFBQ0FBZ0FEQUFCLzJJQUFRQUFBQUI0MnJXWkRYQlUxUlhIejkzTlF0aEFRb0FrSkZBTThoVWdoRThSSmRoMmFwMXB0YU1pV210cjhhT2RPaVdpWUxFemRjWk9yUlZhcDRyNEVVR3MxQThFUWZtSVFFQkFSYXBBbFVHczhrSUlKRFZwMkUwb0JrTk1qY250Nzk1OXU5bmRMTENrOVozNXYvZHlQODQ5OTl4ei8vZThqU2dSOGNzZHNsRThsMTl4MVN4Skw3bjFWM01sVDFJb0Y2M0YxQStXbEcvZjlOMThHZjZkbWJQeXBYRG0xVC9JbHltelpsNlpMOFZ1RytVK1BlN1Q2ejVUM0tkUGVzejUrZnk1TXRMZUMrMTlrcjFQcy9mTDdQMXl4akxqbmYxdXRESU84UHVXaXhyVXo5cWFMVk5sbHN5WHhiTFprK3BKOTY3d3J2U3VUWm1iOG5USzh5bHZwZnpUbCtMeisvcjZzbjNUZk4vM2xVaFB5ZE1OTWhpVTZoWlpxaHRVa1E2b1l0MmtadWhQVEszMHByYUYyZ0MxaDFTT2ZwdmFSV3EyZnRiMmJhSjJ0NVNLbjVvS2FwYlFyNHJhRDZVWGZUUHhXQVo5bTZ6bUhGMmppc1JEcTNJMWcrZHM3V0JwVC9xbmdmNGdDd3hpdE5FOHg0Q3hvQkNNQTlOQk1aZ0JMZ00zZ0IrQ0c4R1B3RTNneCtBbjRHYndVekFiUEtnUHloL0FRMkFoV0FRV2d5WGdTZkFVVnBUcVBiSU1yT1R2bDhFcXNCcThBdGFBdFdBZFdBODJnSTJnREx3T05vSE5vQnhzQmR2QUcyQTcyQUVPQVFkVWdNT2dFaHdCVmVBb09BYXFRUUFFUVFObzFBZFZEOUFUcElKZXdBL1NRRy9RQjZTRERKQUZzc0V0ZXJlNmxma3FmTjBtUDVNSGRDdHpEekwzSUhNUHlrS2lleEhQeFdBSmVJSzRlWkt5VWxab0djOW53SEw2UEF2K0FwNERLOEJmd2ZQZ0JmQWllQW1zcFAvTFlCVllEVjRCYThCYXNBNnNCeHZBUmxBR1hnZWJ3R1pRRHJhQ2JlQU5zQjNzQUllQUF5ckFZVkFKam9BcWNCUWNBOVdnRnJ2cndMOUFQVGdPQXRnZUJBMmdFWHdGMmtFSDBNUW1PMXNwd0U3QnIwSDhHc1N2UWZ3YXhLOUIvQnJFcjBIOEdzU3ZRZndhVkgxMWg4b0UvVUIvTUFCazBUL2J4bnFWR3FYWHFBSXdGaFNKVjAwQUU4RWtNQmxjb2srcDZhQllieUxTajRsU3hYamEzQWZMQkZiR1lXVWNWc1poVlJ4V3hXRlZITHNLSzNtK0RGYUIxZUFWc0Fhc0JldkFlckFCYkFSbDRIV3dDV3dHNVdBcjJBYmVBTnZCRG5BSU9LQUNIQWFWNEFpb0FrZkJNVkN0SGJ6ajRCMEg3emg0eDhFN0R0NXg4STZEZHh5ODQrQWRCeXZ6OUU1bTBvdTkweVpMOGNrY2ZGSWlQalZYdDZ0NStrTTFIdzY1aDUzdmdRYzh2SFZZdmxnQlg3VFI1ek1UcGZUNWpMYW1YWnVrVXROTVRRVTFlL0hhemFwRU42SnREWnIyMEtLZUZubDZtendzQzJqMUpuMGRhdXZvWDB1TGRscTBFL3NQeTVDWXUrbmpvTG1LUGgxb3JxZGZBTTBCK3UyMGZWSXNZODFsckhtNkdVM05rcXB5SkFNZWRLalpUL3ZQYVgrSzJqcFRTNStBOUNJQ0tsbjFET3dzWTNWM3FqbVN4dXk5NkhsUnpaTjBNM3Z4WkswM2pKeWRuM3VWVEpPSm5BQ25kWk51QVEzYTRWNmphOFNqaitrT1cyckttK1IvdlBRVCtqYm1HLzZyVVMreEo5QXVkRHY2VThhcW9heEM3NGRsMzZKc3UzNWZiejNQRVZickJkeGI3QndDdWwwL0pGNFlRY1FIYjVzVE5OU3FYdEx4azVnWjZVL0Z6L3ArRFZkM3RlcGwrbjU4bjRHMVdaS2hUK250ZU1tckQxb3ZuYlFyMDR5dktxVklIN0JlUEs3M25lY1FxWGltUTVmcEU3b3M3Qk0wZGRqU2RxS3UwNVoyRnkzR2k2YjJmT2F1dCtrMkVLMnY5Wnc5a3h6QlJrNnRMdFYxZWsxTS8wL3dVQzBSN1luWHFFL1krekZtV0g4ZXZ2SzQrTm92Zk5XczYvV1JoQmJFdHozVjdXRzhYNFBsSi9VSy9abGVGbFAydVZudE02eTN4ODYyQTg0Ny83R2E5YXI0T1ZCV0NUTW44SnB1VEVyblNqMHZ6RXVkTmhHNWUrR2hTdjBCdVZmb0t0Q3YyWm85OE16cEVKTndkblp6SFpLTzlPU3VUTGlpQm9aMTlHTndCN2tFMXBkVEZtTFhMYWFNdCtpOTJFQ1p1VnZPZ1d0U1dhOC93VFlac0VMR0dUelZaUGdpZEJKd0Z2V01sRVpmZzJOYlIvM2xnYTBhenhLQjZiU3FDSytCdGRWck9acXpKeHhKOWx3YUVqV0h6cXUzWmFqbVNFd2tpQzdPaGVQMlhzRWFObkZDT0p3TUVTdmRlWnh4dDJ1VEtZYzRwaDZPd1pZRWpiTGdsdy9NZVlsV3YydEpIYXV4aTFFUDZsMTJqclc2V29ZWTJ5MjNWa1ROeEkvMzYzWFE1ZHRkL05YV0pVNnliUVF1MEcvcmUxME5wZnBHN204eW42TjZnMTJoNm5CYzJucHoxcldIck5YM1dZdHE5YmYwYXQ0MkpKeG5qYlh0WXp5MEI1MU5XT2lGY2Z3eGpVSnphK25LM1BUZTdYcXJ4bnFwSWNFUWZqY0RPT2xhMWNvSUhmWmthaUVyQ3E5SGdQbTNSTTVzVDJRRUUwa2Q5RDdtNnZJbm1FTkxxQ1Z5MHJKTnEyVk5memllM0hqelNtNGsxdEVUamhtVFFiQ2ppRDVUWXM3Y2hObk1BdjJ4SFR2azhUTDlCWGFadUtxdzQ1Nnd2UFNPakRUY2dqYysxdVpMSmh4ZFp1OTlTTVpvWW54NWx6MFVqdFlUVVg5MXVGYjR1alRzZVU2R3F6OWpSTysxSGpsdDU5RE82ZU8xNHphNTB1Q3V3MGk3TDA5YUx1bGNjejkrYW5QUCtqb2I4MTFIZUV4ZkQzK2FOZXBEKzNxOXhleFF6YmNxYjN1UVhaUTVaTUJGY0dxcjNvYzhGZUxXMEc2aXp3SFl5NXdZVytpeko4RWt5SlN3MEJPSkJJL2xBTCtidDdZWW43TTZoalhDY2RVWXhXK21kNk5sTTg5WmN3Q3hkdGZIdGlLcVBBblA1K2JFNzUzc0V1c3IrNWVmbk02c1NHUFh2bVlmeGU4Z3ZqYmRUSXVjSnFZZWI0YldOb0J2SzhQajZ2L2drZXJZN0llWWFvM1BKY0wxK3JDTmZadnpkY2szdkJHUE5LTzFYaDhPNzMvOURxTld4Y3loL2V4K2RUbXFFazZNem9WQ3JQZ1BHeDN0Wjh4YmhuZmpwTXcvNjA1cFlUUlA4bGxwaERIT25NdDQzUE9zdzU1aGZqeFdBVmNjQ1VXMWUrSzFzZytNMy9aRjVhMmhlTFBzYlZtMWxSYmJZOGJlRjluRjV2Y1o0ZHdnSnZTcnVvUjQ2aStEUUk1aEdkdm1DT00ydzFDZDhmaE53eWQ2SzZWdlJhSWhJTVBvRmJXMzNOYURRbXpKT0dSNXVsd3ZKQ0xpdk9TZTBCNUppeW96SjQ4VGQxSjZZMkkvTFM2VEM0U3RpWTVJKzEzNFVUSzViRVIzYjdzdmFqckhRa3M5c2RxWUtDZDF6OXpBT1htMEkvd3RGT1g1emhFQ2FERmVUalNDeVRhK1NDSVhqWXNqczVjNmMwd2JCYTJKN2JRNVVxWTlIOXd6S2ZaY3RMc3NucUZUS1h2WDdqeC9FcmJWbWJ5SDBYMzJ6R2lKNUV1ZXFDODdsU0RYZjQ0ditiYkVwMmlDTmMyTTRvWmtyR3FMeWlvOFNlaTNNWWNYUS9iNzdZbFhaWGRoayt1bG10Z2RiL1lWWHdJbnpYZjRtVExqMkFqRVM0MTJSZHJzQ1pUY2w4MHVhME5ERWkyUEVFdlYxc3FhMERybzArelQwT3g5bmVzUUUwdm1mSDlCNzJjTm16cC9nL20vZndsdVo5NERrdnlPMjJSczFWL0NqNjF1em1lK0Q2cU52MTB2MXNUT3dmenFZWC96MkhqdVZUQm5GbU8wa1V1a3VybGc5RHI0WE0yK0xybUVCM2FydDlsaWNyOTM5WW5rSFg0cm50anpQdTcwRDVVZHNGR1lFWnJ6T1dheEQwWk9zMHpjd2pQTjNXMXV6SnRNS2Q1T1R2ZzJUbjJ2Zm8rZGxKYUVuNnBvNTRrd1JsclV1ZHdSWnJ4NGprSWNScWhMUm44WHBnN05vRGI2dDR3dWMyaTIzempONGRiZHZueko3cjV1LzNMUzNkOVRGTjl4UGZEM0FNbmppN2xFRnNyRHNrU1dxaHcxVG8xWHhXcUd1bHBkcTY1VHMxV0ptcXZtNFlWK1JPdEQ5RndrNWZLQWJKTURVaVlmS1kvc1V6MVVqbnlwUnFteHFqZTlKNnRNTlkzK0E5VVY2bnRxQ0hxdVZoZWk2MW8xREgzWHFlSHFlbVFFbW05WEk5VXZrYkdNY1k4cVZJK29SOVVVVllwTU5mOE5WSS9iZmRhWExEeVR2L3ZKVkNTWC9HQ0FmY3ZDcGl4bWtTTURLVTFoSGlibk1QOVRDMGxtNUMwREhXSEpzdHBpWlNySVFuOUlwc1pKYnVScFJnNUx1RGJMbGN6SW03RXAyOW9WbG9HdW1LKzlycExueWlCWEJsc1pKMFV5V2k2V01YaGdQSDlkakJTQ2NiYW1pTElKTWxFbThad3NVNmlaTEJmWk9pTmpJbS9qMEJFV28yRThNaVpPeHJsamhHU2k3VFhVbFl1dERMVVl5aWlGYm9tNXdpTVV1VEltOGxhRWJST3NmV0daNUVwUlpKeG9tZUxLWkZjdXNoSzZFclVmR3hGamkrOGNrVDRNK1FZeXpPWWJobUdHdXhLK0xpQW5OK2lUNEV0MmlDdWQxNFZSR0pGZ3ZCNDJCa2JFMVJYWURIYVU5SktSU0cvZUNycTFiMk50RVd1RGgvM3JReFQyOXlUS0RFOTdHUzJkbXY2STExcmt0YkU0eUVaaWlvMjhiOWk0eTdkUjU3TlJOOVI2cW9jZHBTYytLVURuYU5iWWEvMCtXcWJMWmJ4ZmlYamtCcG5OKyszeUMzcmZJWFBRZWFmY1MrOWZ5Mi9RZHAvY2o1N2Z5dS9ROHdDU0xiOUhjdVJCT0NRUHRsbUl0eGNoZWZKSCtUUGxqOGlqV0xRWXlaUEhrRnpZYUFudmp5TzU4Z1RTVzU1RStzaFRTTHFVSXFQa2FTUkRsaUlGc2d6cEs4OGdtYkpjWG1MRWxiSVdEYS9LYTJoWUo1dDUzNExrd2w4N2VOOHBielB1THRtTmIvNkc1TWk3U0phOGgrVElIaVJMOWlJNXNrLyt6dnY3U0k1OGdPVEtmam5JKzBmeUNlK0hwQnB0TmZJcDc3VnlIRHNEMG9pZEo1QWMrYmQ4Z2JXdDBvYWRYNG1XdmtyZ3pFdzRNMFB5VkY4MVFBYXFMSlV0ZldEZUhMa1FGaTJRWG1xMEdpUDk0TVd4dkJlcVFobWppbFNSakZBVDFHVHh3NjdUWklDNlJGMGlxZXBTZFNudjA5VjAzb3RWc1l5RWVXZkljTU85MGw5ZG82NlJ3V3FtbXNsOWxwckZIZTZWTkxoM3RneFR0NmhieGF0dVU3ZFRBZy9MQldxT21pUGpZT01TS1ZKM3FqdGxDTncvVnlhb3U5UmR2Tit0N3FiTlBFNkRzV3ErbWkvalllMTd4UEkyWThIYmt2WmZjbTVOZkhqYWxkUkpUQk5oRkFmdy8vdGFTaW1sckFvcVlrVkV4STNONG9JN0lMdW1hWXdoSkZCWlRLQVVRMXRFUmRTS1c3MFlEeDRNTHFBWVk0d0g0OEhnRWcvR2cvRmdQQmdQeElNeGhpQXh4aGhqakFtK2VRd0c0b0Y2bU4rYm1kZDU4L3A5MzN3Z0FCYU1HTWFnaWt1clhMQjUzSDR2VnNMSTl6RXh3VG5BQkNzU2tJcDBaR0UxQ3JDQno0M2Jha3ZzY094d3V1eHdPbmRWMitGMU9TdnRDT2xQRVNJUmcwUXN4QklzeHhxc3hVYkpSRVBCREJ1U2tJSTBaQ0FiT1hDZ1NNOFpFSVZZek1FOExNSlNyRUF1Q3JGSnp4bTVhaHptWWo3c3lPUU84N0FPbS9WY0JCL3hTTVlDTE1ZeXJFSSsxbU1MdHJyZEhqOEZ4WkI0VWJ3c0RvcDNHdDIrWnJvdlBoU2Zpcy9GbCtMckptOUhPNzBWUjhRUDRxajRSZnplMHVsdXBGK2FDcUpKdElvSllvcW5vOUdqMHNRTU1Wdk04UWJhTzVWRExCSzNpMlZpamVqeStYSnlWYTNZSUxhSUhyRlQ3R2J6VksvWUo0YkVDK0lsc1ovTlY0UGliZkdlK0VBY0ZwLzVBdnQ4Nm9YNFNud2p2aFBmaXg5OWdRTStOU1orRlgrSXZ6VU5TalR6MmxGODBIOUViZDNNYmxRWW1zTlFUZE13N1R3NkRJMWhHQkdHcGpDMGhLRjFGbVA0cTgzZzc2YUF2N1ppVk1HRk9qVEJBejk2SmtlZVRKTmpRSG42VE96VjR4NDkxdW5ScThjdVBYYnIvemFvWDkvUzQwMDlEdXJ4T3RmTzRuMUFzVWJzUnh0R01jNVhtYkNRaVNMSlRGRmtvV2l5VWd6WktKWXo2WWlnT0lxbkJFcWtKTDYyOCtHZ1FqWU5KcXFnU3FxaWFxcWhCcTZjeW5ObjRiMUI4WmpaNkJ3TVZFUWVDa25VT2piUytiL25QM24vSVh3VHgyVzMrc1FxakNHWk80bjd0NWVwSHJTM3ozd3Y3dktUTS9la1lsUmdOL2ZZUzM3MkdBWFk0OVRGbnFDRGJKQzYyWk4waU8yancrd3BPc0tlcGg3MkRCM2xxc1E3cWJhS210SEt2WDNtM2d3OHZrRWV4MzVjNDh3QWhuajlhR3ZvTElieENJL3hSRnU5bE1PenB6aVdVRGtQZVQzVnk2OFV0VkU3M3lkcUpaL01SVExYT3N1MXJ1QXExeHZnT2JyQjh6VTBWVXVyd3pWS2FTZVZVVG5WL3dHaFN1MERBSGphWTJCaEVtZWN3TURLd01EVXhSVEJ3TURnRGFFWjR4aFNHRldBb295c3pDeE1qR3pNekVBNWRpQm1aSUFDWDJkdkgwWUhCb2IvZjVsLy9UdlB3TUQ4aTlGUWdZRmhNa2lPOFFYVEhpQ2x3TUFNQUJYOERiTjQycTJVZDNSVVJSU0h2OS9MZ2lJaUNBUUNoTTNzSXFIWGhKSUFvVWdUVVhvZ0NiMTNRaGNWakFXa1M2OVJVVUZSNFdBWEJiRnh3TjVGUURDNzJCc3FpS0pJMXJ0THdQS1hmL2pPbWZQbXpwbDNaOTZkN3hzZ2psanp5aU9pVDZKRmlzWEZkZHJpRXZ3YW04TzVlZi9oaVZOZERkUVlqZEJpVmRRQWRWTjM5ZEZTMVZSSDFWQkxqZFU0amRjRVRkUWs1V3F5cG1pcWFxbTJWbXVsMXFpK0JsR000bHpFeGJiMkpaVGtVa3B4R2FVcHcrV1VwUnpsaWFjQ0ZVbWdFcFdwWWp1dWlsODkxRW85bGEzK1N1QVdidVUyNWpLUDI1blBBaGF5aU1Vc1lTbDNzSXpsckdBbHExak5HdGF5anZWc1lLTjZLVU85bFdQN0QxS0RPalNrRDFua2tzODkzTVhkYkdFelc5bkJrenpHNDd6SVBsNW1Md2Y0aUNNYzRqQWhqbk9DSC9sSm1WcXJrUnFsZm1xdExQWm9xSVpvbUNvcFNhdW94a0RRc21pWk5GcjVmeFZOY2ZMWmF4TUZhcUI2Mm5CaFBGMHRWQWNmVjFDVFFXVHpzVHFwc3hvclJRM1ZTQ3RzU2lHek5WL0QxVnhwaWxjRjlWVUhwYXFKbGhBZ2hTUlNhVXBicnFROUhjbWtuMzJSd3dRbU1abnRxcXdxU2xSVitlVlVYUUVsSzRndmJwUE55YVNOblVNRjY1V2lBV2tXWlRPWTY1bGpxOC94cW5qTnZOM2VmdStvZjY3L3BJdHpKVjI4cSt6OEx1aVNYVU9YNHRKZGU1ZnJacmtGYmxzZ0dGZ2VXQmtzRzR3UERqN2pGVVlpWnlPUjJLK1Z3bG1WMDIxdk9RemhCamFwaTVkZ2VYZDUrN3lEL2p6L0NlZTVFcTZjUzNDSnpzWHlOblpwc2J6VFhONi84cW9vcnlLbm9qV0R5RjViSVhDK2lvVXpDNCtkNzRjendtbmgxS0orc2ZDQThJUlFKTncrN0F2N1FvV2huYUcyb1RLaDBnV3pDNVlXcEJZdjcyM1IxaUl2ZWxxYmFPMDZhM25NMHdFdkl6cnN0ZkhhZVYyOXpIUDV2SjVlcHBjTi80c24vM0RpNzN4ZllOVm5wRVJKVzJjc3JUZmVrb3kwT0NObWd6WWFkWW5HNFRMTjBFeGpMMTlaUmtWMVRaZlBlRnFvQlZxa0JzWlVrdFdvWm96NGFzWjhVenVQRk9PbFl4RXY2ZVpBVG95WlFXUnB1YkU3T1VaT3JwM1dlUGFZR2ZubXhoYXpZN09SdTlYYzJCR3pZNS81RWJYakdmUGppQmx5eU93NGJLd1dtQ0hIbzQ3d0I5OGJ0OVc1MXhpNGsyVHVveGIzVTVjSHFjZEQxT1lCNnZPd2NiZU5aanhGSXg2aENVOFloVHRwektPMFpCY3RlSllNbnFNVnU0M05GMmpOODNUaE5UcnpDdTE0aWF0NGxRNXNweFA3dVpyWDZjb2J2TWsxdkVVMzN1RmEzcVk3NzlLRDkreGszNmMzSDlLTEQyak8wd3pnRS9weWtQNGNqZnBtMUljWnlxZkc2REdHOFJraitaSVJmTUZ3UG1jczN6S0dieGpOMTh5d20zSXFQeHNsUHpDZFg1akNTYVp4eXB3NXc0MmNaVFkzR1VvM3l5TlBZaFJmTVk3dnpNQmdrWC9KNW1LQVdmek9URTRiWjc4eGgwak04dFNZNzAzc1p1bXIxbjhDemJvcUJ3QjQyc3k5Q1hna1YzVW9mRzlWVjFVdmFrbTk3L3V1MXQ1cXRUU2pwVWJTakhiTjdobk52bmc4SG85M3NBM0dZR004ZHJEQmdBMDRHRUlnQVY2V0I5aEpJQzlnWXNJalpuWHllSi81a2dBSlpDRVlRZ3pHck1IVGV1ZmNXMVc5YW1hYzVQKytmMnhKTStwYjU1NTc3cm5ubnIwSUpSTWI3NlBQQ0M4UWtmaFVOeUdVWEJBb3BiY1RBcjhSSGFMc0svb2NDY2NFZmZCcWNjL0xINE5mRTRGWTROdER3bE5FSVZiU3F4YXMxRVRvQ2pFUmdacUVhMkdFZTFVU0FZcUhyaEZpTWNNd3hlRnd5RXFnV0tJbG1zb2xGRmRDdEZEUEVlcll1N2Y2eGIzbnFlV0M4TlRGdVc5OWl3Ym9NWmgzSGVDZkF2aWR4RWZpWkZMZG9sQkpoQmxFSXBsRTZheE1CWUVjWi9NbzFHU2l4d21iSytEdjdvcEYvUEZBM09YbzhuWDdldUpteFY5MEpZYTlIcmVzZVBGN0trRlRudEx3YUhra0s3THZxWlJqbllaT3ZHcDJmUHVlMTE5VC9RYjFmUEdMMDZ1cm8vTlg3Vi80bXZEVXlkM2oreHpkaDlRRDU0VTdmend6T2pwejhZdUxFeE1MMVY4Z0hTZ1oyL2laOENIaEN5UkJodFIrajlza21naERVeFJPRWtFSXI1b29qRG9KMkVYb0dpVUJuN1BiTEpNRVRVaUt0NWdaSHEzNFpEbVY3QmZLSTFOQ2FkanJVN0xaVkxKVDhMaWpBbjMveE0zWjRkSnZMQysvNlhpbGN1TGU1ZFVIaDBxNVd5ZTJYck5VTEM2ZDNUcmNYNnBNakorOGIzbjV3c214aVVxNWY2UnY3ZnprNVBtMVB0d2ZwTjl2QS8wNlNBRDNSNnJSQzNDangwMlUwYXZUVG9panl4N29ETUJBVzBKV2ZNV1NvelFjQlFRNmhaUXJCWCtmQXR6NmhmWG5WOTk0WktSMDVONVY2UU1mR0R1MVVDZ3N3TzZNSG4zajB0SWJqNDRLZDF6OHErTHkyWW1Kczh0Rm9Bbk92UlhtdHBFQnRSZHdFVTJDZUJaSW9DTmdNa25IWlNwSkhnbVlBMGJaSFBoSFVVSXdlY0tqLzdkTy82RjZFL1ZXZjBEZkpUdzErL1BaaTdORWcxMEIyQlpTVUxPdHNDVmdCbzhKd1ZxSXhjRllMbGlENnVBd25kVVhBT0t2WjZ0L1dkdkQ1MkVQODJSUTdYTTVCVW1BSFpRSThKbnBMR3dpMjc0dzBvMmNoUEVSc3VadzV6UDV0S3lFaXhUcDFINy9rSFNWVkRraFBGOWF2M04rNmQ0VGxjcnhlNWQydm4xNEpIZkg5Tll6U3ozRnhXdTJqQnlhTFpwK1NMZlFuUXQzSHgxbHUzbmZ5ZkV0NHlQOUpiNmJPL3N5NnNIU0hNUHpJS3o5UGtiWG5KcUdmNXRFYWpvclVGeTNMQW1pNkJGYjZRbHJoNjhVZkQrNFNoOVpYYTNlS0R4Vi9RSWR2emhIcDZxZjQrcy9BTjgvQkhCRkVsQzlqSXdDMVk0dWx3Q2NMUndIVnZHSThtZWNRRE03UE5ORjRtcEVrUVdLTkJNRTJGM1lDNDFNcmt4U2hCTlA0ZEFsczdtSzE0dkh6bEVTN0crNWZmMU5rUjJCUTl0Mm4xNmw1amU4Ni9pKzhPeU9tNC9SUCthd2NZK3ZCdGhXa2xHVEZobk9Fc2dXeXRacEVnVkI4QWlJbVpWWW5VNkhoQ0lGY0FPcFFsUFVzYjVLOTUycXZwZmVjSzc2aDdEUVA2RXIxZCtydm8vdXJENnB3UjBDdUJLSnFXSE9pcFFLeDBXcWc1U0k1SENZUUdJd3Vua0FHSWk0aTc4eHg1OEZQSkQyOEt4TnBpSTh1b0prY3ErS2dKa0htTUxwY0pxQTJ6SVV5RjF5dVpEcTlHUFZseGJPLytBSDV4ZUhoYUdMdndVWWRkS2ZYSndUVGhycmZKRHhjbFFOS2JBd1k1a2FTZ0N4RzBHNlNsUUVjTlNWV3Q5Rkh4Y1dkMVNQQ0l1QTJWUENIQURiZmZIalhDYVB3NTY4Q0h6c0lqbTJ3bmFzbTgvbjB3aXlrWEdqZ2dLSHZKNXpoUmRIajkyOXVIRFBzZEhSWS9jc0xONTliSFN0WitIMCtQanBoUjc5SnoyR2ttZnM1SVZsL1NjS0gxMEl3VTlkRHEyenZYVGg2WUliZ2dvbUN2SWJVTktQTEZ0cmg0MlFMcnZOMWVIQ25VMG5GTFlOWEhLRGlHYXlDTVgxT2syY3VmUE9NODk5NVN0ZldkaTdWM2pxMXFOSGI2MytrL0NhNnZNcjI5UmxqUTdmWm5Ud2tRR1V5Z1A5QVJINFJqYUJ0QkJXSkVvVzIxT21ONS9ubEFFeHFPVHE1VEtReHpjNldtNGcwV2dsSjd3NFVab1oyNVkvTWx4UHA0dEhzNzMxcE1yTVJvN1JZenNmSEZvcUxnVkNkZVQ2eExuY0RkUDFKSE01cmlNNnpRNEJ6ZXpFUzhiVXNwa0tFaE5JQXBXRXMzamRhWlNUdFJ1MnE1TVFaM2VudDhzTGo5Z2Qzb1NaSFFydDFuT2x4QWJ5eGE1KzNjN1pkKzEvK0d0Zi9lcFh0eU1GYno2MC9ZeXIraFZhckg0ZHlQalMwc1RrRWorSDRZMmZDOXVGdnlRRmxEY2VOL0E4UCtRNjdlQkluQVFDUnNTMXZrd3hoYlNyYUlkOEpKdkxaYlBsa1ZGREpzb2V0OWZud3hzWStTNGJIcGkrYVc3M2RmUDdiem14ZnY5MWEvZHZ5NCsrZG5MeDJOU09tMis2Smo5L2FuelBXMjhZMnpxOGUySmtyTXZsMkx2ajRNM0Yvb2w4NytKby80ak41VDYwMXJjMkZ0L0tjUVJhclRBOUpLRkdUVWdRL1piUkR6VlhQVkJPdU1vSlR3cE9aVmdZZkhGVmVNM2MzTVhmRUY0RE1KYmgzTHdlWURoSVNQV0w3RXpEMDRZVVM3bVNHbDhBNGlDL0hHNWRrTDMrUGZlODhUZFhienA2OUtaVm1uL0wvL2pJVytrN3E5ZWZ2L2ZlOC9TZGlKdXVJOG1JR3h6cDV1TU44R1VpTzVuRVNWQVVHWlNHcWkvcytmR0xPNnMvaE9QOXNIRHJSWlE5UFVEb0Erd3VCemdkaW9uSkhoQ0VpS2hKRno1T1I3Y0VFaitSRWhFUS9DK21STnExOXRqYUhSOWQvdWhybGg5YmV4SWdma2FZdmZpMHNBMkV4aDZBQ3lkT2VCT1RhU0REYldaSk1MVUlOYWVUUzZCU2lqSzRJazJKWnc3UnpvdEgvdnJaUTcrbTNVZS9RNitqZStDTzlsYWZxTDZURHJFOTZRQzRkd0pjTTBtcGNjVkV4WFlyTnhPejA4bFc3dUJMZDlCdzljZUh2djJkL2RVZjBTaDlmL1hEOUhEMVJQVmZBRjRHNEUwd09RbjZoRXdCU1FBcHJPQmNxUGV4M1JKQnBkRnZRTGo2UVhLeW02Rk1KZGgwbXZGa1FCVHZGenFxdSttZmpnSlR6NDVlL0xRd3U3SEI5MGg4dDVDRjgwV29RZ1BrT3ZJYzJhSldiRnlqbFdUcEF1N1NoUWJkVnRGT0hxVmRuZllPcTRXYXFkbmhjSnFWZE5HQStVRURab1JzQjVoejZqWU8wK2Z0N2pKSlMyWXFBV0JKUHRjV3NyMERGdWJzQ05nREJuUUxRQ2VrRGM1QkJuK0hPbXVua294ekFHMWtTYjVnVVFTNDBSb3hOMnZ3T3dCK2g3TUR1S2FyMDVqQldvLy9vd2I4R05rSzhCZlU3UngvTTVWdGlsVUU3S1ZHM0MwYTdJQWZzUWM5UEJWSXVSd2RQcnZQbUtHRHJZSGJEK0kxVEg5d2tobDEyZ242QThvV0lwcFJuek1UMldTV20zVkdYQTlYR2gzZDhHQ1hnLyt4S2hHd0trQzk4NVU4S2ZoS0dOYUZzRkF0SGZuMzU0Ny9xdnExdmRVdjdRTWpBOVNudVovTnZxelpHVzFvNlljai94eVpWaWVNdFFJaFNRc1psWG95ZG5VQUZ6UnRVMjJmemh1d3cyeWZ3Sll4WUJNazR0bFhCaGxvdHhFUVVGOExBcTQzcXE0SXdJSEJvaDFvS0s2SVZLVEx5MCtFZGgxVVk4QmZKbEUyYVlDWmlzaFVIalJORXNKYUNIUUVmUVFGRklRemRRUEZ0WFcxbTVCd0NLWUpPanlack1PTUNpWG9XVExLOHBKdXU2Q1VyelFZZEtQRDZaZzlhT25zekxrSHR3eU1oT3Z0dTlSVUxCU1Y1WnpGT2x6SXpHUTBjOCtnMVFzR3JlS01WbS82QkNmVjhoTTlzSjZDalNwV09EVktIZCtaemZKSklzdkIxUVlPREtrNVdKbFprYzNuMmp4VFAzSmRqVjZlWFEzOEhqYndDNEVXOFJ6WnBhNEdxRm15VTRXZE8zSEZUNlVsR0dHV0pmTTV3RUFoc3RKK1hrcVQ4VWpJNjNaME5adytOaGV6S1JsUEtwcE0raWpuU2E5SE1uSDcwaVNaZ0NzRjRFckQwcFRyTEUyQlpqUHBWTkR2Y2xnVW1oU1NpcExRMXNGaFAyN0FUcEkzQSt4bGRTRk5KWk1HWDFneHkwS2JHWlM2R1ZJcGdhWUtxVUkrbDgzVTVySHdlWmhONVdCMmNZWHNVM2NYZTlBdVZpSnduSjNVSkRtb2FETGhZWmRNQXRzV1VNL09FRVZoT3hsZU5UZVl6QU45K1d3NDZIVjMyUzJ3bjZSQ0s1YWE2YXhvTm4zTnZFQjd2dEl2Ym1wUEQ5MjNZTzh0VHcwbHg5eGhSOTRiUzJhU0VkLzJPNjRhYW05aGowN1FpbEJNNWN0T1o3eXpLK3ozQlEvSkV5ZmVNTjlxYzdmWnQyQ050aWJKb0Myc1dycUFCQlpNL3huYUd2TThhc3dUaFdlZlF5bGE0dzhKMUVSQk1wMXJ6eDVwbUtBbm4rcFA5OWZBbXdFOHdHWitBOFlmWm8wL1RuSFpId2Irb0NzV25URkFJSnFiZkFvS054cERvYTVPMEdNU29VUThGbzJBWGhyc0NsSTc3VWhhbFNTWC9RSDQ5alRJcjI2U0lCUHF1RVFwSUFjRU9Hc0IzVlk0enMxSVJSR1BtL21WN25RUUV2REJScnNjQ1djQ0h1dEtvTlJISFRkVmJ2QlhlT0FHOE9nK2k5ZWVPRkhudGZqSVIzUy9CWjJjb1pNMTE4VXZaMzZwK3k2MDlXOWxlMmpSenQ2cnVjeUdrd3dYQVNpVEZ6YnhhSmk1UjROU3VGRmh1YlFEN3lhUTJka2lNZUIrMElBYklUc0I3cnc2NS9jNXVrM3lrb1hxMHVLUzBBRXk5Ympzd2M2Z01ZTVZaeUMxT1I0MzVraXlPWUQvT2tFKzBSV3JXYmpjR2l4OEZqdk1ZbmZaWGFnZEdQUFltdWFwMFNoWW0wZFdnUGtVV2JtQWs2SFc5RitmNTFGam5oaTdFMkFlQzFVNnpEWVJLQ1p2Umk4cm55RVlRSXJGbzRGME1PMTIydjJkZm1NZSs2YnpSTWt6TUkrcVRoS0ZiWXQ4Qlp2U0JKeHZTaHRhK2NFMloyY1YxZ0JrSXBjZ2tybU9TTjEyNEtvRzZBYnM4d2JzTU5zSHdCdGc0K1VEQ3RSL0JqTDNUV3dNTXQrRUZ5MW9PSjVnYzNURERkY0ZvbHZVVEFRWTUwRjR6QWdNaUd1WkZOTzZROFVNUlhNVFhSWmNOSmU1YUJabXE4Zm80aTc2SHJvNFBkSGhzNW9kdG5pRUNxc1gvd2cwQTdCS1huNXg2NHhKbUJLRWVGcnpBNEdlc3dkd2lKRzcxQzRQbFJRdmFHUENDdHpvdW9hVGI3dEFCUmFvS0lDYkpMRXJKU0dEUXBBeGhxTE9KWjlwOTRUQ2RSNllNSmJKTWQzU2dycGxuVk15MVViNXFYZFVOdWsrbXVPeVNldjUvN3NNWlA1UUpxdHNtcXg2a044QmJoZnpqUUxnUGhCWnFMOHFGRVhXcFh5bHhaN2h3WjVLc2NKOHBobUxrcXZwT00remMySFRaSWcyUnhFZ3Nua0VMa2dzSUVnb1U4RTNuNk9ucDJld1o5RGg0bk5ZbFlJMlIvVUY5T3NhYzZSaEpZU01xNlBhT2d5WWVGYVUwKzFkdlE0TzFJeEFEYndmTldCR2dZMmVJOXZVS1IybUFtU2hLREl1VFpTaGdaNXlzVnhQRklIWjQ5OEdubkFSSDltcWptRUF4U1lMeEFwY1FheWd6VnJOWjAwVUdhUERJakJ1SlFRNUFzYTdIUG9mdXhMakxGRUdRd2krU3N6akFieVNLQ2RPN04rUFB1QzllMWVyTjlKSHFqY0tsc25iNGMva3hWL1E2ZXBmMEhzZmdQVXhIelBibHc1dFg4N0IrbVpWdFkxczV4N29hN2tIMnFKWkRaZVI2U0ExYUp6QnQvUDdkZU45QUIvOTJZSW9YRUIzOHdWMktMVUFCYVdnOUVuVVJFMGdXWkljeHNhMzRja1E0MDhPSTdMeEdvQUJjcXE3eTJJMkNVc1NoYU1POE03VlF3SW8xRzZUbkxLVFFaTVJHc0Q2TGtEdzFlRVRaTERLNnJCTUJSYklFY1FMc2drVUhlR0M1cTFrMENUNEtka2tteFdVVWdaUDBlRDlCS0JZR0g5d2VMR05Hems4aVlwbUV4aDNBSkhqSlhOSVRnZGk1dmM2d3M1d2gxWHFscnNaUEF1SFI5REw4VVFkdk9qR2p3QmVEOWczSWx1bTBMTElPaUM0U01EcG16RGtqK3JXNk4vWUJUQllWQWlYUjR6Rm1lb1daNWFBOGpWU0lTNEhObjRtV29BL05UaWtrN3dNaiszNlpJZE5FSm1SNWdHUjdESlJYU004aVNlQ20yTSsvbHRHdlZWZEtZMElLRy9oS25GMWQxcVVocmsyZmdVeldObmR4bkVPczMyQmRVdm9ob1IxbjcwY3hwUllOd0xrTSt3TzI2ZDI2UmF5VUc4aGV6VWdMWWF4cTk0ZzFqeEw2eW9jQ1FEbUJWdFlEenUwdVE0T3JMWmNBaTEyTCtmajUyQmxQY3ltNUdzTWJkekY3VHdubFVEb21jQlljRkJoQ1EwbEVRMGxrWmxLRGR3RGluWUFiU09ydWNhRmJLOHdQdk42dHVlZDJqbitCNEE5cHBhZGNJT2JGVmdieUZld3lpNWc1SWd4UVdQc0JrNnRELzV6dVRJcHhkQmxRSjVlTFR3Rk1MdTRQQ1Z3RXRHcmIxVk16TWNIK0lGeGM1cTcrbVF0Vk1OOVpOUkdiVTRuSUtqWnVEc3hGc1B3Njlia3dQc0J2ejYxQjQxQjlMV1lMdFFpTkZxSWdGSjIzT0E2Y01BV3B3eTlla2o0TXRIaHBBZ0d0UkNPZHJXTHg0SGR2SmVIQTJzYlltdnJybHNiTzJkSXB0T1hSY2JBcFFZalNxM1Z2K1ZSRHhsNHpxUUpwSG9vQUlGMmRpaE9zNU5EVWhBZDFIMWcxNFJaRmdQQTZEck1oTDV0c0l6cFNydkFsWjNZUFI0V3VDb3I1UXJ3WmNXamdMWnkvdWpSMVNlZW9BLzlkSEZwa2I2aCt1ZHZYbnJ6RCtkcU91K0RqUDVPemM1NU16OWZabEhnVzZtYmVRMk9Xd2RHdVJ3eVhGZ0dqTWNOR0VseUJtQ01xcVVPc0JVWkhHRkZxVE1ZR3lEWmJEYUh6ZUZ3SVR5ekJnLzI0RUZHUDZlMkJ5OEJzbkEzR0RqVnNWY0xRdlhyZXRpQUVXTDMxNVM2MVU4VlV3Zm9qd3lXdU9LanBpV0FwMGdtcHI4d1Iyd0Q0RlFtbGVhNEZSQTNGbHRqOUhKcDlQb1RnRnNFRFpRdmowb1hOZ3NWNS9PWkduNGN6Z2NOT0JIeWRvQlRVVWRHU24yOUp0TVNISHNBWm9MVDNsYlJLUXdORkVaN1JoR21vbVFhWU5ad0N6S1lvT2YwQUNES0hRNjREOVRVSHNkQ29UQlFHSEI0RVNwdVJRM21vd2JNR0xrZllJSldvbERKSXB0RkUwWHZRanRvbytXZXdzU1dzanFxRHZZWFJucEdFS3FWNHdxU2JJd1E4YWZBMTM3U2k1SU9UNWNrbXM0cVFIVE5tVytSQlVraXg4MDhBQkVNVUpKT0JucUR2VDR2NmhUMkRwdUYrS25mcW5pTENUMUFCNXE1MTR2ZVgxbFdFcDZNcHZzYWpwKzNMYjdoY0xsOCtBMkx3cG5xMnZpUzhyR1BLb3RiNkpNWDMxRStOcGZQengwcmp4N2Juc3R0UDZicnczUDVONjdNcnQzWE03ZTlkL25zMXExbmwzdUx5OWR1M1hydDhpYjA5cE5ydWY0aFV5UTF1UlNoZXd1OUhyNTcyV0k3V0FueVBpNEhnUkdBMUxDQlp6ZlhTL00xdlpURE9XL0FDVE1lWVBFU1VFVHBab3BvTTBZczRxL0hrVU5ncTViSW55OC9rY2Q3M1E0M1RHOHhIdXNXWk1rVW9uQW5yWVRZYjRXbTM2NHZQMkdCQjN3Z2ZFRUZvR3hHMk5HVEdGS0trN1hROGhPMnpUNzJzSS96bDNwYWpmR3JDai9XdzVETTFOTmprZXZyNjZxbHA1QjM1YnN4UThPWHFtQWtrcnNES3lYRkNFSG1STGZYUjdsL1VCcko1aWhhcVZQQ3V4ZDNEN0JZN3ZqWjR0RHlMdno3M1l2ajU0cmJNZ2w2SnJHckY4TzZRamlUckQ2ZTNOV0gvNUJPRC9FY25GUnM0dFFRais2bTR6UXpmalpMUHhFSW9ZTnd5OWxzZFNVUVlTRnhZNjhlTnZZcVJON0piWWhSa0ZFOXpNWXRONGtuaW5HaWRoc0lZaXBYendjc2RzejR5YXZKcVNNOE5tVGhVZVNhQjBpTEoxdHE4V1E5TmdTS093MEZBMzZlUTBVN2FhZkRtOVJpUXh6KzR3YjhKSnpvNThnZWRXY0FqQjZjQSt6emVqK1ROb3UxTm92dUFmZjdjUjUvMUIrTmhFUEJocms2dExuZ1BqakU3Z092ZGg5OEFTQ0FMV0pwaUlocjV0c3JXUWcveHl5K0xUNEc4SDBhcmFiSjEwbEpIZlI2QkI3cmJpZmJhMUZ2aDdNdlUwelhaRHVIOTE0RFhoSk8wTmRSeXZVeTN6ckNyTHNRTjROYUxCYUhpa01PTjhJMmM5Z3NGdTlpc1hpVi9JM3E1ckg0S2ZoV0FxdHNHSmpEQk5xM0ZZNU5EcGxHUnFacEJiMUtaRms2Q1NjbEllRXBzOFB3dERFY0wwRHBURnVFUWx5eHYyTFFWd1lWajZrdG5VazdJNWxpeXF4RXJ6UjNJTlhlNVorOWJFcUIwTkhpOTU5NzdXV3pERVlidmYvcnl0YjJ2Qk9zN1RYNit2bGViM0x6WG5LdkVYYjF4N2pYQnV3MCtUamNuS0JIMXZpU0tVS1haOHBhZmtRWDVzdVowTVVrd2FhY3hTd0gzY3NFTm95OHBya1B1bkVuTUhXSnBVcHc1MEhxMVkvL1JCaDg4VDN2V1gyYzNrS1Z1Ym5xcnlhclg2VWpIRmVFeitTQlgrUDVBZTR2dDdKNGdibE8vVk5hc2pNc0Zrb3RYUmEwRDJ3Tk1VN2tkd2ZETzRxeGVGQ1NCWXo3QTBYTnNINHpHTDBZelNCbjRKSTBTY2VCN3pBTmxCbHBmQm5wVE5LaXhJcFNLNStrdEtVaEc5SDNOZkpEd0lucmRIVDFsaCtwMi9MVFBGTmtSaWp5dlhrQjhUTFdteVovQkFzQ0hWM2JFN2xsa1dDUjI0d1luNkxIdi9XOHFBNjQ4MGJVSVFRRnVwb0p2Wk9DS0duV3JjelhwR1ZwZWpvOU1Md2puWER3L0o2U3A2UmxSM2xxNlQycnp6VmtSNzBOMDZQZVJuOVEvZDZxcXE0QS9zdUdYUmpRWk40Yk5QK0xJWlZhTW1CQVMwKzVValU1eDJGODBJQVJnZFU4aDNJekd2RjU2M1hZRmtodVZ5amdpcnZqQ0srbXZ6YmpGR1R3eXVxd3UwVi9iYzNPY2JrQ3JnRFlxUUJSMTEwNXZFY05lREhtRndjZHUxNTNiWUVVajdsZDJYU3NKOTRUOUx1aTdpaEN0RzZLbzU4TTZYcWFvZk8xUTg3cjhqcjVhclBGZG5BU3pHYUNzMW5UOTlyUW4rK0Fmc2R6R09jTkdHRkdMN0JGREYzdnNwZ3cyYkM4RVdCNVR4bHlsV3J0b0VTd0Erc0tLOXcxRXBLQStaaWV4WDAxS0dPWXRFbWdQOGZQQU5BelRZUFFvV09CU1RLWlBNK09CVVdnVGJaQWN4clZiV2VHQnVwY0p2bGVXa3VydXZNRHJ1UkV4SENlSkNlVGpXbFdCajFlTU9nUlovUzRnU2NOWkN4VVJ1ZUlET2FLb3JCTEtyamFRcCtRbW9LVHA4aVNjcTQydm1YVXV1cmJsRXNNUEI0MjhBaVJvMXdXeGtHdmN6TzlMdFpHcjJ1WkJrM1ArdjFtK1YrTVowTGFtZjE3em50MnM4Unl3YlFzSlNwZmFNNEt3N3d3aDZMazYrQThhc0NKd2IzQzhOUGhtS2xzVlN5aUJLaWVhNFFVQ25aMUptTEJUQ2pqY1hVR3VnSU1yazNqNldiOC9PUWRYQjdvY0JVdGl3YUZTd1BZenM1T1I2ZkR4YURWN3I5bWVFSHlaOXllN1FKeWNaaGFocE5aRWRvQ2RYZTZIVzRHMWFLdG5lV2tNWmdSallhSHVjMW1SdjhYT2hjTXZ4T2xkV21wbE1MZFpLVVdhbkc2ZEY5Uk02d2dxZWg1UGFLSnc5T2NhNWhLUTBRTm9zd2hXcTJVV3J1dDNjd3J4dUNhRytBK2FzQ05rVDd1RDlSeEJCbGhrY3dpZXFRMFo0WENZZnE4Z0NPTmhMd0pYOExSWmZYWVBCeXlsYnVUMnVEc0I0MkErV3JxWUlzbTdvQnZJQUJEMTI3Rkc1cUJWTGl2aStYa01YaFJqWjU3T0EwVXZLZDVmbDVOejIzTTFOT3VOVXJadlcrbFZxZkR4UzVHQSs3akJ0d2s2UWU0aStvTzlDbnBzTVdhWHRFS1hWTUViRFpLMGNQRW92RjhEa3ZESEk4YWMwVEpoM2pjdEE1M1RLQmdMbzYycUFQYTFObHQ4M1o0TmRCbS9WNGYydmdGL1V2Nlk5Q0xDdVIxcXR0QkJiRWJ0QmNRS2pTZENvcGNVK2ZKV1JSWW1ES3pqdWx1TVc3bm1oUkJNM1JUYlVhWVRCNCtUT0htOExycW9TU2ZUY1FDZmppWUhZcEV3alJzVnJ4RlgxSlhvVkh2U2NMbFBZci84b0Q2QTVLVVMrUXlVNjcvYWUzMG1UMDl5M0YxS2psZkRBMGY2ajEwZWlHKzlwdHpvNFh0MGRoTVlXek9zbmRtMnk2WGEzWmkwdTBkOC92VzkxYWZHazhrSGl1T2hNUEhuSTVoN3RkWjN2aVY0QlMrUWR3a1FZNnBuUUcvM1d3eWlYU2x3eVlJUzh0UEpOQ2t4OHVDM1JOc0llUWsxVTM2VVAwbkxFS0FIeE50aFoxZVR5VGtTWGdUR1ZjYUs0Z3ltdjBPV2x6RmdhdUtDamxZb0VmWDhnUm5hbXJmWVAvT3lNSmllTmZRd042SjFFdkZSWjkvc1dmeDFLbWZsby9NNWpKSlZmaEtWL1VyeVZ4dTlzajlxZmlQNHVuenUzYWRaMWRhR2Zidm4yRC9ZbTNyZVdLMWVwNTRYVDFQak1ZdVY4L2pwVDM1K1VCZjZtUjVlRjNOWnJZZExJMmVTZzhFbDdMcDZiN1ExZVBSY0YrbUp6ZDN0RncrTXBmTHAwdmhSR1I0THJmemVrYmI4c2F2Nks4MTJoNVhPOE1oQjU1VnV1SnlDbFNucmU0UGlYSG5nQ1RvWEJTcWZjSk90T0U4WUxUdGdwL1JnQTlBdS9PZzRmbUxpWExqQW9ERW1YcHVvWDhVM2pXSU5FVWE5NjFGRnF2M25sb3NMZ0I1QzR1bnRxVXlRTkVScEhFcVFSTmRGN00vM1hVK0dmdEpMSFVkWDhjdjZLK0J0a0ZZQjBpZUlKdzBic1dqd291cWZQMEtPSWJoVUN3YVNvUVRTVTgrcVdCeFJXTmF2Z2NkZjRpY0NBeVF5R2JwUC9RY0twWFd0MlVBdTZIQlBSUEo2aHVscTdkbjV3UHZucmpLU3N2bS9XT0pPS1B5MGRsY2R0dmhFZS9TNlpDUExsdzFPM09BMjByMHFQQjlzTHArUjdXYVFSSllLRnB4M0xJMnlpbThxekx6TktCRHlvZUgwV09ZMDBHTUdvRUlPZGQyaE9leVVDNEZBTzFsS3lxQ21WUzNva1RBU05QT3Q0ZWJ5RnFrTnhXK1lXV0hPMkh2RG5YM1pCOTZhUEVHK3Z6NWhUWEpOR09TZW9yWFRWVDMwZitwOFZRUjl1SUZvSEVmdVV0MTVITlJ1MG1TZmFDNWUxbUtCL2ZDSmNBNDVGNjRXSjNZTVpJK0VpSlByQkI4cTJ3ZzJYd2NFMVM5UFpsVUtPQjJkblhhTENSTzR5aW9wRHBtSytzWkk1ckYxaXlxcUZmbnZQNjF5TUw1MDBPbmUySjlTNW1aSGVGZFg2cHhvWXc4T0lJOG1KeSt1SEhvVk1nLzV2T3FrMGRTbWYvWWRUNFZlNUZ4STlOLzRkdDM0Rnk1VUpkeWlxeUdDYjZSSlYwWGk2MmFqQ0pHakxLRFlzc0RmMXp1b0RSMWNPbnFXRjRNcncydG5WNmNuOGpQZUZHNlBGM3N2WHBYOWZNMHA2NWtNOVhmUkpwdlpYVldYeUkydUh0aFJrT1VoRmRSL3ZrMGU3RUROSEdlK0F2UzNFWnRNaERKcFV0ek1QZDhNT25OM2xqTTY0bEZPeGVGRS9pWG1NY2JlMDNWVDUvSHZkMzQ0VVpSbXllRWtZOXUyTkF1dUlkWTdZcytJMnlOandkaVVTMUpDSmh3VHZ3K3Q3TWpaQS94aVpXbWljVmFLZzlxNzdLT3hBMGRQcXZGWVkyRkY2ZUZFMUVmWXVPTHZ2d1ZrekF0Q05Ha01ISHhzMXRuREhwL0craHRKWGxReTJWUnhIQVdKemp5T2RQaU9LMnh0c3ZOQzdFcWprcEpvYW1jWjNueCtZTy9wT0tKZjBQcWxyNzUvQWI1L3ZlTmZTVHZCTGdpY2FwZEdCMUdlS2orVXNWWGRBRzUzcmtvZk9OaVZ2Z0tId3VpODhlZ0F4ejQwN1JGRkZHT0xqOFJ3Vmd3TzNNbkVSOUF4cXhJSXJ2cThWRGlMN2g4NGtmQitKQ25DMlZJSnVWTnVkSXBMVjJvNUdIYzRXdmlFVzhUdnl6MGxYYTZ3M3ZLaTBjWHQxV3lVMTVCV0p5cFpDYTg5UG1WbnA2UjRzRGdtVjNWdjZTRjZlVnN6dXExOGIrbTA5VjMxWGdYMXVFaXE1OEUxc1ZjQmI0TUY1T2VsRWtPeWNSRHNDRzRINWdrd2FBOHZ3cTBUOVpWdTg3YUthMVdVc04rTTk2bXorOXM1bXd1VDM0dWRETjhZaVFMcW9zbXd2SEMxQ1JlaEs1NTNIRDZZNTVZUGkzQjNsWjBJYTZWb3ZtNGo0YTUrOHJwNllQRHBRTnFPZ00vaHc5TVovNTkvdmp4K2ZsangzNDZlbVF1bTUwN01qcDZiRFlIb3Z5Qjg3dDNYMy85N3Qzbm1RNHlJRGhCcHVFOWVWNjFCUHd1MFNTeC9VVlpGbUdWVXhwbFFFaXhDejNPZkN3QjNPWUVJNUZTZHcwMWoxbFgzVjRQV0doTUdlRlhKblBGK0RTYTZVdko1aHl1ZW9Wa2VTRzhlOGlRWER2RER4bnF5TmVFUDl1UnlkWHV6T3BQaEx2cjlSR2s2d0NUMDdpbWExVkxPT1MwbTlBcHd0Y1VCaHdOK1l5cms3bmMxWllVNTZJWng1QzJROVpWRjJVS0FLckpJSlBkMUsyMHltVGdqTTNrTUdvQWl3M1NWNm10WnVyaVBIV21Ncit1NlFDY2I1Zm9pOFJCem5BOXVLUGJDbWNKSkM5Y3Rrc2h0UU4rVVA0ckFTTkpPTVRKNURIZk9DMFhJOFJTTjVqSTFOYldrS1RoSUk1TVNrL1MwRTRqdnllUm0xM3ovWGF2clNQVTBUZnJvcytmTG8yTGVEMk9ERlQvU1BlMS80SitBSGc1MTY3dUxXWTRXK1BpV3ZFVjFMM2h4UmJPRlpkejVSMDkvYnZtWjArdkRoL3FUMmRYY29OYk1nTjdGcmZmc0h2aW11bkJlR1E0RzAxYU91MVQ1ZWxkMFZncEZPaEpSK1BtTHJzNk9uMHd3L0dMQTM2SGhMdEJUeGxXQjBBWEpFNndWSVFWV1FKMUVGVUdlaHc1d3NkeVBkSGZFWmZXZ0JvdUxJWU9GeXNzT2F6QzFBVytweDdtbUxsdzVzemlXOTZTeUxxaWJuZXZaM3JialhScTRuN0hZeFBWcjZOeXZVMlJKOW5jQ3h1L3BIOFA5d3pLblE0d1ZhZ2hkd0FGTmlsdzdVa3RoZzV5Ui84dDB6eHJoS3ZKSFFkNkZvTWdwamt5V0t4YzVwNGl4eU03VU9Bc2N1bERuNjkrWTl0S05rM1BWZjBnZ2M3c29sc1JIOHhFK1ZmQXA2bkd6dGV1eHE3RVM5ais1b3M3My8rK3RTOEJ3RmZSdDFiOXhQQ1R2eC9ndE5iWStWcHE3RXIxTlhZL1dMaC8vcHJidHQxMlp2dUYrVmNEekR2cC9lekxUeDlFdUpqWjh3MkFhME9wYUZWTTFGUkRzYTZZMlVZd080WXhiQ1ZYd2ppbEw1VlQ3Sjk2OHNBREYvWisvRE1ISG5uSHIvLzl6LzdzM3k1KzRRdTQ1bzFCc0ZGd0Q0QS9PNUh4aVozZDc1cHMwNHlWZ0xBMmtuS3ltbVJmaFM5ZHJzdkgvY1A0VTd2ZitWdTdmK0tiSHJYNjdWME9jeml6dHBOK3Izb1RmY2ZGUDlrNkpKcTJpU3hma29JbFMraHZ3M3liMU4vNXJxVCtya0FEMVIvUW02ci9TcU5iNlBWMGRyejZDSjBCVzV6Wnk4TG53QmEvRjhESk5BQW0rWHRVdHhQVzR3QzcyUXEveXFSRGRYWnpMekVyb21JVzd6R3NZMFhoeG5tOUVXM1J6Wi9CeXcwM0xHcUxibEVIQk5yZjExc3M1Skx4SUV1dU1zczBJa1NzUnYwRngvbFpBK2ZJcndoNW54cHFoL05vZWFEZnBDeHAyY3BXcWhBellITnVNOXZmUUx2M1VrTmJVWTcwRmdWYUdpcU85WTQxbzIzamRSM05kQTRDenY5RDlmZFN4ZHlLdDZUUnV0OW1FWUIyUU1FYStjem1WbXBiZGJTSEwvK0FnYnhWUno1V0JPUXhEalk0ME4vWGpINEhVdDNBLzJrRC85aVBFUDlMOEVtZmpvRGQwaUVxaWhubWE0ZTZUVWQ5NkxMakRjeHRPdWFac1FvU2ZtcWlNak0yTXp4WUhPMGRiY2EvazNHTlNJWTNmaUhPd1oweVNDcGtCM2w1K1lsK1ZEblJQZVRyRnRBL0pOR3AvbnpPSkV1bWxWRERCemFMOGNFNkY3VVpDNlUyS3NsVU9tYzNDNGdnbnIzWUtoQkJCdE9yUTlEekxIQ093VTBHazlyWVZXSzExajJuam1KdHNFUnQ1K0FrUzdKRk9udGxENEtCbWhvZW9tVDc3TVNXOHNoUVpiaUM5bDRpSGdwb3JxbEJPdGk1dVd2S3A2bFF1a25QNHdVNXNDczEyNTVmRU5sc2p0MnIvN0x6OU5VTmJxdnBnNjdZMFZIRDZNOHMrUHQ3RHBVbXppUnlaK2pNNUg0MC82KzYrSGR6bzhON1lySlZqRzN2R1p1ejdKdFJkN21jTTVwbmE2Q3ZPR1I0QllZUzhYTC8wREQ5RkRvSHFuOWZIT2t0ZGthNzNhN2hlaGxRTzAvK3J4SHkyNWZteDhhRGNWMTdmclRVK1BGeTQ5dUlBWGFTK29zZ3Z0cUpnUnJlanhsNGgwRU92T3RTZUlQUU1oTUZNRGw3SlVKcjg2R3ZIRnZObnhvQWZRUFB6U1I1aG1NVXJ6bFZ6WFNzMGc5UzBrK0prZ1JGS0lWT1lqZy9pZFloK3NmeWloL1d1S3lwbGdYQTFLeFFjejJtaWdKS3NrWFFIQmkxdElZZVl5d0w5WjZwZTBTV1BmeTUyaVZDQ1p5Q1VsOXZMaE9QMXZqZmVrblhiTHRZMlJXNGEybFR3bkgzNWR5M1RkbklEZDVjblVmRW9NRWpjZUNSajErS1I0YUltVmd0WnVzNU83VjBVRVcwS0p2ZWNJYThMVi9STS85NW1XdncrcWVNZFlRdUV2TEhhbnlNV3BWZWFtbHo3OGtyRmFwZjFyZ21pMmkyMUxDeVdwV1RiWldOaGpWZC9wbldOVVVFdW0wYTJXV3dmN1A3ai9tbG1ieTVqK3RKMDZTcDR0TWttQ1RoSG9EdVhxMjVxK1U2ZDdWQTA2bGtRcXY0akF0eFhoUnN3SDdHZ0owTUVmSjYxWjZzcndoZWZtSVlieDU5R295L05FeWsxRTBVVXBQdENvZ2JCOEVSU1NRRW1zZ2xjblcxeW9CV3JZYTR2T0ZndnZneXVWdjE4QnBpbWRjUWl5WTg0TWgrbUdtWUJMZ3kvUDVXclNMbE9sYjlJWnpSazVKaVdQK1ZZb05rUXUvWmZCUnpVdFlYSEpNeTNCci9tWEpqemQwZlB6alVXbTNjdjNNODBTNEFrQ3lZeGh1empRNUx4ZGtEdzYwaGdUYjhFSVE5VzFPWGsvV1Z4bXdUQk5peGUxaUdUUHQ5dU5RbUdQTThyYzJEc2JKSEFJRTVkWnZCZWVneFlRVGNqTytTTUVNK20raE45dGJnbTNYNFl4dS9FajRtZklOa3lRV1I1ZTlUOUcvZG9YWkd3azZCUlRtd3NFcUxjcUE3bXFYN2VGZWI0aDJLRWUvSXRCdWp0RVkrWEpUVnlDZGlRVC8xVUU4K2JlYXhVaDV2RWNZQUo0emhBU2JwRk5qWWloa2Jkd2lpamdub1FoS0xGWjRGQlZmSGhOMEFzb0ZKdXpFV2F0d1ZCaWFFUmZCZ3VqQVk2YTQ4bUluaGxqaE11V2ExWHpJZTg4Z2ppNU9UbThaa0hoMCswblYrK09ML3Jndkw2UDVUc085WS95L05kY0FzM3JyK1g5eU5Ddll0Y3pKVDVtUEdaN3F3eHd1Y1BZeWNZdFRiY0FId1NwcVVLNFV0d0pSNnZ6RWNIemYzRjZ0Yk8zeC9YZWNsTnRWNCs5ZU10Ky9uc202Y1lLVjBpTWVMRkJrcjBlN1I0a2JYd25hN1Y4MXRnMGVSTU81d1BCWk9ScEpKVHo1bDBmSTBPUHhuRGZnUk56czdISDUvWHk2cjEyTnJ4WTBzUHRWK2luUXFFaTRXVW9QcHdkbzBQR25JbU9jWlk1NGt6UE9nYWsxVFJRNHhDNW9MMWI3bUpXRjlIU3pLMG5aRzBFT01RbTdLRTJ6eG1mYURRY2ltQUVPOW1VQU5SMXNqampWYUJ3SEh2ZXF1TkNERWNXU1RZZjM0UFVacUd0NW43ZWU3eEdUR1hFOGJjOFdzQkx0RGhCcmlnS3l3VzFaQWs4SnByRzJuR1J4QXVvK09ER3daM01MN0dOUW1zOE5rTFhPaDNIb0lubDFVZHpUT2hzZFJ1NkUzMytEbUthd042Nm5SenY5RFFsYlVSVzJHUnFwZHk5ZGozcHhzMlJSd2ErTWt4aHlQR1hPRTNYVm5nZFY1VTZ6enZpU1RiZ2FlNTRBVldSd2hSczZwWFZFUmJnc0hTSzF1dUYxRnpiRVhKalczT2V2YWFJaDVWaWtYNTM1WVk5NldJZXRxcDFaU25jbWs5SzZFZW95aG9VQzhLZDZnYnJWNk9wbWdhQWc4M0RBeEk0b3FDZzE2WnkyMlZnWTdBV1BML2FBdDNLVjI5b1B1b21lMGlib2xReFJpa2hRVFVFbVdhd3FjNXVOdlNHL0w2RU8xTkxkMlQrREtISU1EcGVHQjhtQVpTSnJKNUMwZ3VEUHlKamx2bDRwYWg4ZGo1YUU2SGI3UUwxd3lpdTJOS01uSm1nNmZuRTV1RnRYV1l6TmU0ZXNrVFViSVlkV1pZSld0YWN4S1JaZXhCWE1JZWxneHBCWWU4ckdnVFMwMXpnMDBBSFlUejlYL2VsM3R5bVlHK3pNajJaRll4T1BDL0FlYVErc2NOQ05meFdmVVdXakxIdlg2NERQUktNMUJDbEU1c3Q5YmprUXoyOExYaEE1dG5VcXBoeXREQjZZenlZazlnOU9uQTViUm5yblVaRjh3MkRlWm1qOXhVckQzVkxxRGxwR09oSGUyWit2RUg1eWJ2V210bUpzNVBGSTZPSjJtMDZYdHQvWmMvRUY0YURhYm5SMEtuMXRkUGFmSnQ2SW02MytEeTNyZzE5OVMvWVY4ck5Na3lYNHdDbjBzM3IxbHZEVE1ISFVZVnVsaDNqZUszcmVtK0xlbE5mN2RYeHZjSmhCdWFRMkVSd1lIQkZvcEQwd01UdlFWcytsdzBPUHE3dXF3MG9TUXNCaytSbzczNXd5OGc0RDM3Nm1lUVppbkNYZVRGZ3NhWkw0M2FzYUxoSGtLbWxDM3RxSSswdnhJbXdWWVd4Y1FHNEFGREpRSHlpT2w0YUhtSlRDRFJlVDRpeEg0VzVvTWtZZFZSMjh4NlFBdEtrUmxJVWdsV2M4d1FBTWN0RWlDS3BMaFlWSVVBUWpIVG1WOVhVR2ZNWllGci9FQnN2bjRkUXcrb0VFVmkvaTlMbWVYM1pTVzBvNXVxK0l2MGxTbEpMNlN2SVB5NHZieXJpdkpQUkJPZmZybHY3K2kvQU5qajUvVzloanZxTWZnZzhkVlJ3dDNjbHFoVTFneG4yeTd1MjBZYzdCKytDdGdUWDZ2dG1WTlNwWTJmaVljRmY2RGxNanFKenZ0TEdXQ1o3YTR0VFpYNTFnUk1ZYWhtT3p3RzcvV2FxeHI4c1BXVjh6bjBzbE1BWVBCdEQ1TWxtc0twNkhRWUxFMGpFbnpiSVJPZ2E2SGt2TXpVOWZzSGoyVUxVUjM1RXZiOGtQTDVZSEtiR1hYNU01OUMzZmRlT0oyK0R1OTNlUHY4UHNXeXRzUHhKT0Q0ZkJJTVZYc0RqaUhNbjNEK1lIQzBPVHBJMVdKL3NjZGJ6NitWcHJvMGZxT1lGWFd2NEwrSDhKNng2Qk5rR1RLZzJ0QWIxaVlDVGxRbGswbmdYU1lDNkEzcFlQeElReWp1L1MySVliSzNoSlIzejAxdGZpT2Q5Um5qRXd5emZ4RFRhRjFnZFdJZjBkOE41RkprQ3lwODZocEI2eUFFYXJhaEY0d1l6RXJ1Y0JMbkEyYzlFWjVZR1VRSmFnRWZSNm5vN01EekZtWnlOamp4VjkwNVJRNEF6NFJGUEptM0w1ODdPaldXOWR1L2ZSaWFHMVlSMC8wSFR4NDk5MHZmMS80Y3ZXdmUvck83RVFVcDFjWmlzREgwNENqazhtcWozSjkvV0d0Y2xyQW0rWWVWbVZpcWpNcldwbzZiR3hzZkEyZXRETTUvVkd0cHdNZWtxYWVEZ0R1WEQyZ1RYbzYvQTMyWUREd3daNE9DR3RNTGZPZUR0ak9RVVQ5NlI2Q3lldFNIY0QyYlIwUTVyL0FBSDVXUDZyMWRUZ0J2Nm1vSTZ5cGd5Q2U1Sm53Y2gyd1MzVjJZT2RmeXdjQ1MrTkJYck8rU1VhUUhjNFo3OU5qbG1tSDBDRnpuOURHcyt6NTJqcjlHNWhudzNwdTgvVnhuRXpOQzJ4dTdjQndBVmwwai9BbHNNTWZaTDBkSGlMZmdnOE9xdnNUVkJIaVlBMElLemFUUlVUOEpGYVVhYllLT29hcnJIZGJCMldkZHFJUnB3TVJMdVF6cVVodnRKZXZ2eDU5dTJiN2Ivd2J6UEF5MDIwL3F2VjR1STdYM0xNZUQyZzNYdzUxWWVNL05nTGtveXpYS1VsdXdpNUJnc25MN0pZT0dLVjFlWWpMZFhsUGt1VFRYSENhUjQ3SnlnanJLU0dlYVRmU3hOTWtrb2w0REIwWTdaT2pYTzEwUGtmSlNOUnFjdEU2NnhLM0xuNmd5Ui9MMHJpQVBzOEFMbUhtdi95bzFoL2lSdmhnbXpyVjFCOUNCSkdFZlNFMHpiU1JDOXQxaU1BekF2dk56OGpINnM3SWxMb1ZuV3NDaS9GaW1UeDJoNERIOEJRemYxK1RlYTkxaVhDblhHbUY5NlJhcnI2QU9WNEE5eTFhZmRTYllYd0pMaVBGeFBLOXNQeCtxZFpVd2JjcUNmVzlWRm1mQ0krcytXSzBuREVnU0VzdmNOK212Y0E5elFsajlQbHZhdWxpQXBkVjRyc0FBUVVoc3JjZFlOSTMxdWQ1OVNRU2s4bWttQlFXN1E4VVhTVWw1UUk1K2ZIVGI1L3RXQlRmZGVmTDN4VytmSEVVMW5vSW50N0JmRmR2N1VLNWwrb2oyTWtidEdTS0tZUXNPTzdWdHNIaGRJcDY3NHQwOVFYeWZrYWp0eko1bWY0bHdjN0RKcFlKeC9xT25HNThTSnRMTmVaQ1hlSHU2dGZSOTRJNitSSWVlSHp3bkM0WHVieHhtdmo1NXIySWFUYzhieU5CMVdlemd2ekYxRVlnbkpZcjUyZTVjaFZNdC9Nb2NCa29saE9MeDQ0dG5xQ0RLM1JuVi9WYlM4dkwxWGZEUDFpZEM4dWJSTjU1RzVmM3c0U2MvNlRMVkplRkZpZXlSQ1NaR0o1SDNZSlVqSlMwTkxySUpXWWhTNnlaV0gxK21tTGtwemxBaFBxOEh1cW13R1VwcDFtdnRXRTRQR1Bna0xRVDhoSFZoaDNDR0NLQ2hraFNSNFRkaVEyb21IVlV1QnNtcStPamoyekV5Qml0cG5DQVhuQ3p5YWgxMEQ0OUh1RHJrQWNMa0gwNitvWnZDTThKMk4wYS9uaE8zZ3VnampkU01jaDdsWjF1Uzcrby91RXJvUnlwMGU1VEJ1MUNEa0x1VjExSmFwYThWSkVaQ3VKS2dxTGJsY1dialU2bVpuUE4wNnRqWkRFd0toRGRaMVliMTRpY3hVQU9hRk1zWk5PeFNORGZRaHVXUzhqNDYrMmN2N2F4bTVaSUpqREtpUkhpMEJJTTVib0VRNjhIUXh5Z3RzYTljZXhva0NyVzREMXJ3SXVFbWFUckxXYlNKdE9TZ3RXS0JEdHV0QVdaVEhnOWhWeWlQOW12ZytXTzRqWjRCZ0h1ZG5VbXlhb1dtZk1kVWE0N0FneTRVZ2M4QWNCMTU3c08zbUxVN0hENFR4dndZMDdtZWJmS0ZoRmQ3Z3B0Qkd5dUE5emZoM2lQRFBlTjlZOXgzN3NPM29iZzBUNzd1ZmgyK21PUUozMWtISHNxZ2dVcnh3SitsbmNIdXkySWluRFdZaFV3MkkvN0hGdTFtWUVyVENmeERSdHgwOXBBZno1WEx2V1BENHdYZTNKOStiNTBKdWxKcHpzd3dVd3pxallMNTZOTElLTTVQcG96UG1ldWkwYXZuUjZvYzNsZ0RIL214bGowL0F4bWdRcXZtK1Fla0dxbFBoOFVYOHRTSDdpZnJZek41dWFPdnNSQzkvY2JHYUx0OXN6L1U0TDk5NGkyVjgwMGxaczNLNTBBRHF2bkJBMW1xQTVtSWs5NDFiSWttWTVqM3ZCbXUrVDE1Tm5XMTFqVzBzaGJqeGt3dzJHaVZiQ3k2UFBaVjRJaTRmdk44bk5ESkVNR3lKdDVib2dMbENUUzF4dVBkWUhZTkFXcHdIdDZOUDFXNUQwOThJR0E0UXRFUGtaOWczVjVpZ2hNaGFwOXhzcWt0QkY2WGFnN2x5VWtPNUFiU0dOZmhGRGVsV2U1czV0MTUxQXFZQkc2bVBudDRxYWc2UFdPVDBTVHlDZjVIWkhrSlB3ZHM0Tno4NUdFNG5MOG8yc29QSC9zdy9QSDNmaFhhVEY1dUlTczRmUDJMQ1lQaldDMnNOOWIrR1ZxeWs4OTNZN3JxeStkMzUyYUNsVC9yZHRSZjlZK1pkQTdGR2N4Z1g2cW1KS3Njck1QS3pmMWp1Mkt3aXl0emZlMVVoNGVSUG5Xc3E4b2U2OWh2UElvbDIzL1JNaWJ0RXhZS3lXU3cyWmlSekRFL2tuMWY2N3JSV01OTXJDV0ZpdnJhYkVwR0lIeVJ4dlJtQ01yNnpteTNhQ1llTnd1NnFUT1RNcXAxOTcxQUVaSDJKM0tjVXQraHBEUDhvbTczVlF5MWZCRE50Ri9SZlZmYVRnbWRCejFHSEVOUzYwMEwxUUxKak5VOVlHTnlPcUQ2NExKdk5pdnpTQzRicjB1RjZWWUM4N3VQTDR3Qys4amtvTzdkb20rYUt3ci9XdEM3dEJvenBHbksxYWVmZHlHNW9GYXQ0VVdha2YwejE0Um5WbCtNZU9CZDNJZXVFaXdIc3JvN3RDd2crM1NqaDNPb3RIandZRDNqQUV2K2JlRTNLeDI5TlIxSGVFVVQrdWdGV05yV29HSDFFUzdIaVd4eHZUZExxMXBsTHVvdDY1Z1BSdFkzdlFrM2xJOGIzb1ExSUVCNXU3YnBDZUlCaGE3bk9MQzBwbTBJNVFwcHJCN3d4VWxWU3VidGdPNVJLcjFxYVhXcVB6SW9Vc21YMC9zbDdZMEJlZkZUSnU5RFA0dHk4dm9xZXNDd3FpSjNUQTBUYUFkUVZ1b3FmV2FRSG9hc05QbnlDVzZnR3pHSVR4Zi9JaHdONG1oN1JpZ1poS2tGck93WXJVSTRoS1lpZ29sWmtyT1luVWd6K0psdmxYTFNXS3h4QzFyMFhBS3E4NzRpeFpnVTFnZ3V1Ylp3cSttTkhLV1NQN3d3M1dwNUkrV2IyZTU1TGVYNzZrbGt3c01yOWVJM1hBN2hmQys5RkNKOGc2L1ZndUZ4UzNobUFzbXFyZTY4eGtOZmVNeVQyakhmb0tSSXEwb0tYR1RySGJhc3hiWThvR20xSGFSZG4yK21teWYzeDRISHNiYytuNnlVMTNCM1BwZXB5Q1pFdFJzaVZQRmJPSitRT0JoaTFtMmdKNUxGTE55WnBPYysySWhrM1o2bUQrUVVhNHRpcHUyczJuTXg1ZGJHTmFmTDdTazZEZWxqeHkzYm1GOEZBYytnalVCSDcyTDg5R3JDWG8ybmJBNkY2c2N3UGQzTFdsdGxEWlpqTVBKS2M1NkVyQmFtM0dqM3ZjYzF2dTZSRmJ2eThxNXVMUUpzNWM4OGR0Ump3L0dXUkZxZ0wxN0FuTWpoUHZiRGNMc0lGZFRxVTBHWHdqbE15cCtONm0wMFN0K1d5cHR2aUErMGxYOWNxcSsxdVpsNGJhNldodWdFNnR0WUdmNTNWd3VENkpkYXpmWFZUbkVHNHhXcFYzSlE3cnRrSmI2aDNycnpPRks2M1l0eCtGWkE0ZElCeUUzcVowYUVuSFEwRTI2V1JabWI1REJEaEp0OFlpM2ZOeUNnd2ZtcDBEanBEZXA0MkZwd0tOR2l5RGdjU2ZhMTlpQkFVdFVkZnVhR2NOd2FtRzlMQk9qSFNyWlRRYTFJTlJxTXdOS2hsM0ljWHJhd0NrbUVQTGF4djFKc0RmVGdKVEFpSzBiN2MxV2JETHR4N1FnRTBFVGl0SjY4MGxIcWNPd3BadnA1UDluUW01cHdvbG9hK2Z6dGQyc1RQc3hyVHZHQ09UM0FPczA3SmlPaTJDdHd5WGhJK1NHUmx4aUNGODZ6czJjdHRSSnRSdlJpZ2VsWWJaSk5RNjJOdEhrTVFPUE1QRE8yVVk4d3V6bE43RGlzNXZ4YnRQSFYwNEpyRkVLMEovVDU4RzIvUWlmelozMmdCREhhbTRyeXdkQWg5OXlxUFpyc2U3WG10WVhScnROcXhNVXFUYTdrU0RBd1FhMDdJRG1vZHdhYXZpTUFkQjZGTWFadm1yRmtrdFBKb00zV0dLVHhOLzZSamtWUjRuK2ZiTVhtVVdRbG5pWlZKTVRXYXVSMG91bWpIMWhlYjE4WCtLd0wyOXMzSmRNNDJ0enFDS2RhOHNsaGMzSC9WZk8wYWNNM0VKZERUNHBobVNMVDZyUjE3UXBvcHVNYThmVURUNnBldG5ENnNQWTJmcE5mamZjeFhReG93TlB2Y3h2TGhzem12QVljSjQyNEtEV05xMU82SEJZK3gxRE5EVUN1bVFQbm1iOC9BUE1wcWpyRU1URWk5SUdibXNUbmpid2dnZVluNlMrQTQrNVVhaTNBRzFzd2dNd1dkMGFnL2s0cDZHYjRkaUZuZU5KSjZ0Z2E3QnZXOHJaSE02UkZMYmgwWEJzaGhmOEVjK0pCdDI3QmxQaytuZk5FOWNDRlNRSjNEZ09OOEkyTjhKKzJvQWQreTd6N2RYanlscUpHWDY0RnJESTlmVThqK0JyTXJJWmQvOFhPSDNyYWFGaExkUE4wQWJwNTBLd1d1eUYxZWt4bU8vbDlJV3BtcnJhTlBvRzZzdjNObXZLWThCOXhvQ2IvQ1locjFNN0d6dnliR3JUMTAreXFVM2ZaaENZOUpmbzRjTnhldHJBS2JxSDdYMXRyZlZweVcxWHVua1Bud1RkU2s4Si81dmwvNzUzK1lrazlsZHBiT1FEakIra0FIc2wxUFlURTN5eXpoOE1HNlVBRW5iMmtZaFJOakxHYmx0OWsydkRZQW1ObzlyMytMSFV4UitiQ2trOExVVWpINTFhMjdzalBCb1lHZ3lOSjMwOUM4bUZuWlBCcmE4cUZlS2pYdTlJckRoQ3Q2ckQ1U203ZmFqWTI5MDk0SGJ1bUg0NTcvZTlPcFp4dStZNzdWbWVGNTJtVytqdkFWMnd4ajhNdHg5SUFaR2UwWnRsQUticGJENXRzZ1NMcnFiSy9venU1QVdNMHRIeWZMNHdQeEtOanN3WDh2UGxLRjFZRzZ1c3JsYkcxbWkxc0ZpT1JzdUxoY0lDL2x3b2JOMjdaMkxybnIxQW5EVHN5ZXVFejVFSTlnV3M5ZVhSWHZSZ3dvQWxXZGZqNTRUdU5ucnpSR2hFa29GV20vVG1RYXkrRjZuNHM3RVZ3SVpobGUvWkdjbDV0MFRHVmxmcHEzeitubWdNVUdZb3hjTzl2c0R1clZ0MmsxcGZIcTAyLzM2c3pYZFFyVFlmVThUOUxiWDVvbEdZMTF5N3ovMmxkVjJQV212M1c0YXNzK1lUZXZjZVZ6NmxLSUhXdFBIU2Y3Wjl6MVRWYjJTSk0vL29yM2crR2lobVRMWXNFdktrYW1GWityVTFaNHhVWnJ3Um1nbGdiaVJBWWJQQjVsWnE5RFdPYlNTTnVRMXAzSTNwL2E1OHV2WmVScjZXWjQyMVJOS0VQS0YyRzJ2UlVzQzFUUCs2VFBCTExpZlRibUNicFJScTR5Ni9ESDg2aFVvSkpwalhMVVhyeGR5OEowRll4MStvZHN6ZDF0WWlhUHVTcTh2aVp0VklUVXV4TkM2bHVQbHdTK3VDQnBwSE55N0wwbVpad1JRc1MwOFVyMXVZcldtUG5qYldGZ3NTOHRrV2ZzczJab3MzTDh2YXVLeWVUVWRiVzFmVjN6UzRjVkhXTm91S1kxbzZwZlZwNlhWTHM3ZmZNLy9MaFB5djFuWHAyZVB0MTlYRWVUMmJqbTdEZnYxTmc2K0FCOWxtc2Z6eHpYandNV005WWVEQjMyOVpUNkl1VS8xeWg2aDFZUHREcEkvN3J5eEFsK01Cd1ExeVBFZEd5RXNjWWM5QVB3aHpXWEZUTERrVFNSUTdybUZodHZaNy9YZmlpaHVzSDkxb1RBTC9HNnZEeUtsWkVyUm1LeXhlbEREaE9oTXNrTU15WU02MGY4QWdSNnAxbUpubjErTmduUmc1ZlJRakJRNGxiVWRpQ3pFbklhV2gzaDdzYlpMSnVyQW1KdFR1MG1oamtGNzZIbW15VEt0L3R2bTEwbVNvMXRVaTZmeUVOcXJHVC9ndXVLKzI4Rk1QVVlqRnJGak9kVkN6RFVhWjVYT1hPZnY5bDN5aXpma2ZidlBBZjZzTStKU3h4bENla1ArRHVkMFdPVTNOdXV3V1Z3YW9mZ25oZW5tS3VjWENQT0NYbFhYOWwzeGlrL1UyUDNENTlmb3BIYStNRFBjVlVUOXRGT01peVc5a3dWRHBJbHZKUERsQTlxdDd1cWdzZU15Q0lvL0hCVkVwVVF1K0JwWVNRYWJDT1poZU5Da2lGbGRiekNiTFdaMXZZNnU2NVo2UTF2YnRXbG5hTWFkT3BTdUY5RWdhNitSY2Rka0dSbytmV2hSWmJ1eS9nM3ljMWI3WEs2Vzh0d0NMTkxHSFptS2ppNFhpU2xnWnpTazJ4ZUx0OUNZc1RqZjhzdGdkN1F6RW81RlBUYzYrOVk1cmJ4c3R4ZUtEK1lGeHVyZ3lPcnEwTkZwWnJ2N3o2dHpCYy9IWUg4c2RjakpMdDJSbmhpS3hZR0dBMG5sUmNEdTlsU2o4Sm13eUtWRzN5MDJ0NGtqLzlqMVRZK0hlYm1zaEhCNnkrdmFQbEJjWHkrV0ZoZXJ2cGdzRGVhOFg3QXBxVGJHendlbjVWZUNiYnE2M2lCdmtCdlc2YnFDcTF3SlUzWklBcW80d3FsNTkrdWdSazNXcGcxb0pHSE8yYzYrSXlvZldUeDVmditiUU5mdDNyeTdQYjk4MnphaWRzUnY5ZVRrZWYySGdFUVE4YmxWdk9nUVR0ZUlpcmRnN0JLdU4ycXlzOHJZOUZqYWJlN1V0S2lDeWpxOGZQM2IweU9GR1pEbzVNaWFPQzZzem1DYkw1REE1cmg1eFViTXAwQ0ZZekpOcFFiSlVxRTFtWE1ZckIwQlNtakZYa25lMndHaWt6U3Jic1BwQTd6K3FsV3dubExXRCszYXRMUzNNemZBcEhkMGRTcFNWRHREL1QzaU85aXh1TDFlLzk5L0VlY0twVDFjai8xM01aK3o1bnh0N0hyMXpnMXlybm1uSGU1dnRNakNqMVhaeTg3MCt0SDdpMlByVmg2NXVaVHZOSCtVU3ZrK3k1QUdXbi93Z3ZRbWUvNEhLT3V0YnFXTDA2ZXlwZGRpMDZmVVBZYTNaWm9kVkZGbktHcTN2MnBsSGhCVkErQXJHZTE3aERGY09IQy9uWUNZVERHVHlHZENLK1N0cmViOVBoNzNtT3hUcmFQQldSb1BmVnp2Q0FYeXBpcld1VzJta2ZaOVJwV0hob1hiZFJwV0d0VjRHemlWQnNEZDhPTFVsOExpaFNKSWJMd2tQQzg4d1hXc2J2dmxnYW1zeGsweEVRNTBtSytaaGdCbS8yUFpGTitPVjBsQXhpMjI4TW1DNDV3eTFwSkt0SldGak1nQ2NTbGFxNy9WaVNVbGxWTXN3RTQzdU1Zb3NDdy8zaFNkanhWZk5YSHYzOUtJckZUbTVzSDI5TWo1Y09GVUtKS3h6OXA1WVhLM3VEc1RHTTVseXBxZHkrUERpOE1IaytFMjl2dEdCZk5rN0ZPd2Z2R0Y5NGxEZTFydVkzM0ZzOS9UUVdqTGFmN0kvZjJMRXB0N2NIeTdSNzhiR3N3bnZhREl6TkY2OVlXb1pUdjJOSlh0TVpSR0JoNFFGZWtyNEhGQWk5cVI4OVp6cXh0ZEZVSFNCM1Y1WGJmMmtUT1pjdmxUdUp6ZlB2MTM0M0oxMzhoemVKK0haKzlpekFmWnNwNWE5VEc5M2RBdEFHSHlLbHBRVVRaeCsreXc4aGgvZklNeWlUeERrWEk0OUU4YnBLQzhld1ZSc05pMHJDekhwRUhocENEM042MENFV1N6OVlQTWZGT2JveDRSUEVSOFpZN0Q2N0JTZHkvaE94UTdLRW9saC8rRzhZeWJVdXZZNlJTcnNUbVZTckVrZVcxU09oMjlMTlhjTWJNNURKWHNwN2MybEUxM2RibXZKUHBUMGdLYlk3ZklKYzlaUzJlVjFoZFA4WjRUVDRZM0NhZnFJOEJqUVFWc1QwcERRQTZqYjRLczNLTDVkc0lHVzFKTW8wMGVxUHhJZUd4bmhNTTRDWFg1WGVKYll5UUNEa2JaWjBhZTBKSEJQa2xEdlNUTEx4RTd0b3VMbHNHckpqQlZnTXJsUXNRM2I5MDFNN3VzczJVYUZXd1o3TzdiT3ptN3Q2QnRnOHh3VjFzbGZDRThUbTQ0cmUzUEpPaXVFd3JrSXdPY1ZCVHI4K3FxQ3Qza2lFUTk4Q2VzUnJ6ZUNYMml2M0NlczAvY3ltRDVTWWxEeklxUEFPcjVLQUpzL1kvczZzaHRidXJvY0hUNjdyOVpKdG5tR1V0M2ZQNG16dWFQUjM5WisxbWF0elk3enYxdVlvTGVMUVRiL09KdS9YNjhReFRJZElxeExyRkRVaExKaFV5eG8zY3k1dWtSUUtnOXMyemJRUHpQVEg4a1h3dEY4WHBpQWY2cHEvOEMyZkNFV3llY2pzUUxINDJaaEIzMkpuUWVGWkJnZVFiNTlCOWoySFVlaTBKMzRWaHVEL2VCMFpPRHJ4WDF2MzA3Nzl6OEtwK1N1dSs3aTUyUWVmZHoxNTBTdlZ0RE9XUE01Y1dHK1lpcjNCMGVPVE9JeGVVWTdKakQ4aS9TWE5DQjhHZkJ5cWQzNmU2YTlkSTJmVXNUaDJaWEFtUERsL3d0amU2c3ZrSTlzL0Q2TTlhc2V3cERYM05XSU9udkFCdzhjQmQzZ3dLZmhseC9iY05DSDJHdElyMlY0V212dnhsbCt3c1VzUzVNb2lLWmJDUytoT1ZmSGI0amJidlFzc2hIQ1Bac05XZjlUOWdZZGJIV0lDMjN6RmgxTTFLUVBOYjA5cDZmNXhUbjR5aHdFK0xzYkFYb1Y2U1l1VW1RNHg2Mk10aTRMNjlTTHg0MFlweTJUMFNWWnU2QW9uV3l3TThlMzFkdVMrVVd0MW1GODQ1ZmtkOGdaWHVzZ05EUnNyeDIxeW5CTlA3dVJGK0xFenNTOXZuamM1NDF6T0tHTjArVERyRmpGMFNKcmNlOFByTzBlWC9xZS9rNUFtSlArQlBTakhNdm54Kzl2NWU4ekZZV1RlQjRhZThkajdTUi9aM3hEVFJkeHc1eC9RSDlDY2dEQlROOEttbGIrVjd5YURyYUtDaUxXck4zSHRncWh4YkNyRDBaSE9CQ0o5L29EWEVEcW5DRU1Gd2JwV3h3bitxZjhmYTFta3lMSUVxdmx3djdXZ0U0d2dBaHhwYU1lTGEwWmo4RFhCL0pTSkYzNHRpTVQxZGw2MVZoZ1hGaVRUSVRZTEtZdXFZdUpYeG5FYjBVc2lVcmRVZDl0V2JhRWVWVlU3Rm1CVk1uWFkxNzhwemZHNXRteThSTDVYZUdMYko3enkwOWtXVzk3Zllad1F5MmIxdUN1L21OMmROZ1lWcmR1WWxLUm5LNk5ZS0YzWnhzMDhRVkM5U3p4VUIyYTlLVXFZTmFJWjNMamwvUXJ3dWRCTXlsZ0ROUGxaRUYwZ2hFUmdqM2IrTHVFZVIwZjgvM0VUV3V4YUNZVkxjUUttWUliMzJOQVFSUHhwYktnd3VoS2lwTFRrNXRrc1E0WGVqaWVESXZUcG5SL1R5RzVhM3hnVDN3c2YrdE03M0lsTnZTL3ZORW9va1hQK3dOVGZWTjdrckZZT2RrLzFkK2JIWjhNOXF1WjBuTDFTdzE0bHpkK1RmOUIrQUxEK3cyZnhEY0lzRGMzVy9RMy9qQmN3MW91THF6aUZHOTFvTDIwY2RNaExOWitLUUJBOXM2bTlidGczYm1TRjdTMnhwT09qcWpSK2p2cXc1ZGYvcjdObGs4cmRjc0hYdWdURlBLbndndmFtZFpWTDAweWcyQjdIWnhwUWZrZU85TmJZT3puaFJmZzVPUkpUUGhRb3hSd0NFYS9JSUFKeXNjTDdCN3lxRTUyN1Z4QXVYTzdmdmNnWko4Ry9Xbyt3L2VNT2VqVjhHd081bmhhK0pBeEY4Qmg2Z0Y3cVJUQ2NaaU0yTEVtbDFBMllLL2pWcXo0R0xvQXNndmgvaTZ6MkhEc1psQXBDY05hUDhqVzROdEVKMFY5OUxySzJLcndBcUtPNjRabjZKeTI3cVFhazBSVzRjZFhEdFlBd1NJNkVEUEdFUU1BSlEzSWk1VnhCZ2hBd1IwSUNCeW16eE9KeE5VSVZzRlJ6Q05zYUVNa0VjbUpTRkRzaTF1aEIvL3VXN3UrL1czNi9JdS8rTmxMZkY5SDRkdVpPaGphbTVKOXF3TFZtOHJyTUZpSFhXV2NnZUFBZ0Y2QWc3QVZjNGJvR0pPVlkrUTd2Q2JYWmdaMUNqRml5Nk1Ja0NHbHdNV3JkQ2dkVm96N3lpNWVTU3NnSHFBbEl4NDJmSnAxL09WdDdsbXRJNE9CTDJxWFFadXd5VGFMbWFHRjVFa3d0UGgzNm1mWVZaOHprT1NJMG8zL3MxR2l2eWM4eFhzMXNaZkU0UUlEdEw1WGswSkxkSkMrYmJGNjg3UGltMSsrZzlHbnVGRVNGUFljMTBsWVZEeEFOSjFFU2xINGVLVjY4d284d2NiZnNqRk0vdVF5OC9nY0pjY3RzMzhsUHZqeTdleVplWEtSZHRGbllPV3h5K2k1bGJyVC9ZZjVpWWs4ZkYwY0x4YTNiQ2tXeDlsK1RKRHZrZy9UUGV3bUZjbS80NjYycXVZQzViZVV5SHNUVEpML29BL1M4VXZwVXE2RUp6RkpWNnQvVE1lbkdjNzR6UGV2NUpuL1dkMVg5NHh3eHhVOEkyeTUrRXpkTStLWkszaEd6TC84dCt3WnBBSE5BZzBlQmY3YURyWnlXd3FJZ2tVUjdLSmQxUHVwVGRLdFFJTTc0WmtkOEV5N3VUVEJwWTM5UGhzN2Z5VmpZYzA0ZHVGS3hzSmFjZXppcGNleS9rTVplZ3p1ZXp1Ui85Z20wdUZpWllSZEEraENBenQvK1hXM1prK2RQMzhxZSt2cmZ2NzRqeGRLRTk5NDg1dS9NVEU4L3lJK1c5cEkweDF3bHhuUFp0enNDa1dmR3BwbU96WjltSkx0R3dVNkN2eXRNRjQxWGo2TkRvZmoyc25RWkxmRTM0TlpvcU12dnZpSGYvZzM0cU1UTDMrWHk1d1N3RWdiTUxRbmVZSS9Rb1BEWXNoLzFnekNrU29oQ09HcGwyK1lFRU1jUmcrcy95cXdPd1l4Q3d6N2s2YXBLUFdEb3FlQThXUUdza2tycUtZVGJDSW5TYlhMVlU5RnpPUVN1VXlLTlhaWFpLK3Zkb2VDVmdHYWVobHUxVnd1VzB0NEFKWEQ1MFh2U0xYZmxlenZDbmQzZWpLdXdrUmM2TTU3QzZXbHBWTEJtKzhXNGhNRlY4YlQyUjN1NmsrNitsMjlJK1hpL2p2TGMxU1N4OHhLckx6WWMyWjhkWEoxL0V6UFlqbW1tTWRraVc0ZnViTnl1TFA3TUs1cFpDTkxUOEMrc0RYaE8rc1ZrT245WUdta3FTU21XSFlNcmtnU3hMT2t2dHhlajVIVjFnUXFRalpYMDR0QVUvQ1dZRE9TdUFqdWJFV3JaQlNYaUw2ZHQ3ekNOZEhIcm5CUmxFelIvZlROc05jT3JCcG5DVW5ZSTBLV1ROVE9GVC90TldGa3plL0V3MHh6Y044cnVVcXU0c3VWbElwUDhkSHpOd3Nqd3MyUjIyOE5YMDlINlBub3ErNmc3MTU4OE1IRnZzV0YzdmszM2J1amQyRlI0eXY0ZGcvTVpTTmFaeWEvMWtKRE0ycXAxb2dMSFhCZStEZDhJS0Z2bTVmK2M5OGJhN3BsSXpiMk9sVGVkQXZMRDBxcy9PQlREenlnM244Ly9mVDRGNzg0WHQzZU1LZUxuT0p6SnVGK2c3Mno4SFk3L08xMTRuSGVsc0pLTFJhUEJaTlU0Tjh5YjNIWU5Gd2J3Z0tPMk9mZm9mK3hLYkZpeVNnaUtSbEZKSUFUdytyKys3ODQvaWxFREw0QmwrelkrQ3V3cXA0Qi9PYXhzMFVjcGhwSytPQldGZEhvRlZlMEY4SHFlWEdnNElPT0djNGttYU93YlRPWjBjcm14VVJlYjQ1NUVMWEJtaXVmZnViUVVzL0JRaVEvSCtzZlNXYXZYWmlzREFhQ2g1ZnlCNHVSL0VLMHY1ek9uRjJjckF3RmdyY0pzdEJiN3VtOUVYK09GUHF1bWx3TytNcGVmMDhta3JPbkE5dEcrN2ZaWFNPSnlaV2dyK3pUZnpzRHYrMTBsYTRGT3NxRDZWaXhPd04va3dZejhEZitQbmJZRzJFWTlxYVRPRWtJenhRbXNNc2l1dG5KT1l6eWFzSkxyNjUydTdxNlFOdnd1RUx1VUplenkrbm9oa2M3d2FaUGRJQXNTamk0VlZGSzRPdWlITmpZTVFYTXdYMHZFNk5IYjcvdEtPMmJ1ZVdXVzE0N09qcTljeWROdk9yUWtWc3Z6dEZFOWR2MEJJMVUvNWxHZGs1dlc4TTdqUjZqM3dhOERKK0pSTG5haFFvbVpvUHFQaE9INFROeGxWd3BVWng4VW4xeTVtMXZnOGVQVlgrSGhxdi9vdlY3cFgwQzZnOGhNc0hnRFpsQkRuclpPMGtWS2k1NUtOd25YQmFlYTNVYlpBd2ZJL1UxVkJ6emR1RmFiaHlWbC8waGV5UXRqU25xa0tzWVdnNEU3ZUdVUEc2R2Z4WG83K2M3clAxOXl2WlZlMWZlYnUzcng3K0J6cld4Y1FmOThzWVRyOERmS0tHLzhjdlY4cTd4Y2ZoMGgrQWtiMk42Y2xRTjFkMkZUTTJ1ZjlRRm9tSzNiZEVxT0wvMUxiaEg0VGthaGVleTlDalRTWTlpdlQ3NkFocThYSnJhdmJOdGZ4UXl0bkd6OEFWQkpiTmtMN2xPUFd1alZtR05pdFp0WUtWbXNaWjRKWWY1Q3dTakI0TDFIbXg3UnhVVGVvU3NJcldlczFEUmJCT0lKSkxyaUNUTDBycFdnU1hKb003dDJiV3dZM3F5WENvVzBzbWczOWx0NzdBb1pKYk9kbUREM0dSOVZhL01EeUQ2ZXJFNWJvUDd0OXlRSzRoSFRzdGN6RExmUHVZYW5OeXlNOWk3TlJFZWNrcVZqQktPRDgzMkxKelpNbm5kYWwvZnpodTJGZmVrSGZralE0dHZPRHd5Y3VpdWhkbmI5ZzBGZTZmU3NmNE9YL242Y284bmg4bVpibnQvcUhlNmRFRE5xSU5odHpQdzJYVHU1UHo0eWZuODhJSGI1Mlp1M2RQdmNSZTh2dkt4Tnk3dmZPRDAyTUNlVzdiMTd4eVBlMTFlMzNzSEo1d09xODkrbmRlL3hQclYvZ0xvK1FYWURienNIeUIvcC9vNmdLWTdnYVl6UU5NY28ya2VhY3BUUWdicVNXZ3lzZEJpV0l1c1c2MjFkbHg2WFZ1SSt6ejYydTFBMCtOMUQ2bUR4ZzVlOHJuYUkrdXM2L1RlM1l2ejZ0VG9DSDh4bTh2UmlXMWk1b1M1RHEwSHN3anIvWm53WGJqTFhTUkh0cE41eHY4VFU1TkRneVpaWXRjZUdFY0M2NGd1bTFnNFZSRXhzdzF1SlhGZDYvc2d3dkZNWi9Md0o0MXZGMmR5b0NWQnRKNDNwdURmVFNtYWRRd3pWajd5K29XRk54d3BsNCs4WVdIaDlVZkt3ajM5dTI2Y21yeGg1OERBemhzbXAyN2MxVjhkQ2ZWUHA3UHpnWlJySkRpOGZmdHdhTkNiREc3UHBxZjdRL1RZeW4wbng4Wk9YRmhadVhCaWJPemtmU3N6dCswZkh0NS8yNHorTXpzM0hJbUc4MTcvNnRqWUN0d0lvV2hrYUE1anplTjBqSDVTK0RMTGYrMERTKzlHUm8zVGVTcGI2RW9IWnNNTE1yYmdwdmlLTVl4NzJxblpZc0tNQ2pneEZoa09IM09PMjVoejNNcWM0d1A5OGJqSFRjbndZUC9vd0dpOEw5N1hXK3dwcEJMOFBWazJDM0ZSVjZmaHRtODhMZlZPODBwWmk0Q0JlWnp5Vk9CS1pSLytJcitqRkltVWR1VGhaelFLUCtjT0hweWJPWGhRWEFqSEhOMTk2WHdTL25RNXV1bFliSFNwcDJkcE5LYi9UQjVmV0RoK2ZHSCt4TkpUc1ZCM1JGbWJuLy9BdEtPcnF4dXdIcUFmRnZZeS9jU0ZuWDFBRHhKTUFuQUQ5Z0tRaFB2UmdwY2tjZ0IvRWxaSlJDVDB3bU14UUxkWmpoWXB2dURHZ2VxUkQreE91UHRUNVJTZExlL2RXeTRJSjAvU2ZQV0gzejNXYzFSNDZoT2ZxSDcvTzg5KzVSK29ML3NpNnV5OXdJc2ZBRjRzWVNlMGZFNVFMUFlPQWFOUFZxcllNS2xTUGl0aGV6YjBJSndsRm9zV2J0VlRxU1BpR3I1aXBMY243ZkE2bkpta3c5VUJ1b2dMTHZpU2ttcTRNa0F6eVdwRk9LVXBzY2FJU2tKSnlQS3psSDdQOGRmdTIvYU5ua2dPRjErNy9hWVArRTRkZ2F1QUhqbmRNYnB5YW16SEhiM2w1TkhLdnR2ZDFPNnNYb1FQamxuZDF0TFJtOHREK2NtWmQ3MjJCUCt5ZWEzREU2ZDM1S2FuQ3NNak54MGR0bnJoclBWdGZJTCtVdmdGU1pFaXJQRXVOZFNYQ1FWOVhvdGtndi9oTHBRb3k3UjNnYlJmNXVIWktQTmd5ZmpyKzdVZXNPZjBCQjIzU1h1SHJER0FZTEk1OW9tQ2JWclh1a1ZKd202V1J6elFuOHZDeEttWUk0WjV4TDZ5MXNtenJPbE1vS2w1R1JseUhrMVg4b2krTXRlUGNoNm1NVjBjdTc0M1hUalFXMXBldXVIdzRQRHhRaWE1a2l2dG5yL2wwRXA0WW1Iby9hR0pwWUhsazZaOGFqU1dNZjJpMDdkejYvSngwNjQ5VWlFeEFsZnc5N3I4cTFPclorU1Q5Qi9OM3hLMkRtU0hYMlg1dmtrZHlnMW9mc3NINlQ4QndsR1N3VG9KRzl4L3FXUXc0SEU2RklGR3NGNUM1SXFIN2lmSFFtWjBsTWVZeXlKS29qNUhHTnM1U1dYZXJyMXVSUTR0Wk93UllURU9XYWJtdnRYeGVIeHNyVzk0OEVCaXdLY21VMU8rdnZoVkEwK3RUVXlzM1g2TFhKdzVNRFIwMVV4UnZ1Vm1NWmNvQmVKaTlhMUNOTkNYekp0dXB0ZHZ2OFpPYjdLZjRUcE54OFkzaGNQQ1g1SmUxRjY5SGtSdXBaQlBtMFNKTEFLblN0VHdUM1B0bFFYTFE4eWV5ektsQloya3lKQmc0ZFFZMGVlRFk0TjJuTS9MVU04OVc1cnhqZ2JtaXM0dTJYdm1zTVY3L2MxWDNlU2U2VnlkV0p0emRIemhNdzdGN3Z6Y3NPcXRKSy9lRWJKR2U5TjlBNmFPZ2NUcng4djMvdGI2ZnRmMDdQVW5GOGJQNVNaY2VXc2duOXBTNk9hNDR6dWo0Wno3OE4zYlp0WTdUOEpnRTNhYUFuMmZXRUc4RWZOWkUzOEhQTlAzZmNBYURxY0QvM2QwbzZwZllYbytmL3NVNEt4NHRQTisvc2tuMy9iQ29XOS9aLzhMRHo5Qm4zeHk5Y212clk3UTY2b2Zwb2VyN3g0UmxrdnZmei8zTWFKVDdRTGdFQUtadTZqdTZMUUl0TU1xRUJ2WUdieXpTaGQ3TjgxeGZOTTJXQ2JkZHNGbTg5aGd5MlBSU0JqN2pQQWlSWGZOQUhHZ0FZSW5tMzJWRlBZRm1PRlhxcEpTWFBEQnR1V1R0dzNmOGREeXpQS240ZXZFcTRkdmY1RDkvZmluaHovOXpTMlBiUGttL09FL3FPY1JMVDd5YzlqblovamR3S0krUmlNL0xSU0tTUXdvNnV0RnU5endzcjFXc1U2WEpzNHM1UE9MVjArd253dG5KZzdmY09PaFF6ZmVhQzBmdjdCejU0WGpaZjNudGcvZWYvOEg4WXUvcjR2OEk5UExFMnBVTW9taTdsQjExeHlxcUpicmZkMlZjdVVmRjI1K1NIanE0cHh3NC9ETWxQN09yNThCM3dZeFhvUXZjU2ExbDM1cEJudmpTNytDSk9qUDVMU1hmalVHTkZobWxDSm1QTVBVUDVUZU56MjB2OVF6ZXN2a3NkZFovWVg0aitpNU1oMGUzWkVmMlpIckh4NGVPZ3U2M3NCb0N1UW10bW9qYWFCcko4ajhYdVRCV0ZRUVRUM0FpQll6dHBaYzBRS1laL1U2OVhCOWc5Rk1PcEhPcFBFazZTK01yb3RnbGt2RHJURVhNUCtFenN5MlErV0YxdzhPOWg3ZHVuSnEvOHplWGVQekI5WFIvYjJEQTNmTURPN1ptbHpZdXVQQVozdVhScVBEUXdPOXVaMVQ0eXRUTzhZcXE3bit3YUdSU0dtK1VEbmc2RHJLZVRjSDN4WmhINnpFam0vcXM4UGRaR0hXREp4NmtkMVMxMnJkZ2JRK2RoMDI3R1RITGZaZ2tUcjRXUUZUZ2lZYzlQbVRKK2VyOTlOWFY3OURzOEpUMWFucFQzOTZuSDZ4T2tYUEk1MHlRQ2N6ekJYRmFKUkVKU0hxZEJCV0FRQ0lTSEE5bjlNRDBXNmo1U3RjaUVDaEZIOHZvQXZkajRxMlhVMEJYNkRTOW03NmNQVUpXMzZwY00zZHYzSEQ5dGNNOWZVZkhsODVjV0lsdjFKQU8yNzZKeTduYlVmUHZuRndZS2lZTzdxMC9TcVhSNDhiQ21QQzUwa2NkbkJCM1c0SDA3WVRQVUZ1QVJnVE5sQ2hKZ256OFdvcFA5aWFWdVp2UmtrbVdPRlRiN0xYNzNWMnQzOW5zSFl6MTdvQ2lDd1pqMk5PbCtIY0ZQcjJ2SHErZUNDWmptMVBucjlieU4wd1hycHFLcFdlUHJCbDlKcU03ZnBkODhkUG1vZldYN2Q0MVZ1dnJnUzhZMDczUjk0K1BKYllzbXRnYVA5RWl0NVhHYno2em1NN2Roem04aHdUTUxyWjJjcW9TWWsyK0g0YTN6bklyZDRTVGVBTDhLNmhSNnFINlV2VjN4UHVVc2N1M3NWMTZ5MndaNzNBMnpHUWNoV3NMdlNiNFQ3R04ycm9XMlpJRVRQVlg5MEpuTjNYbTRoVFRPT3U5RlZ5bVhneFVYUjA0VHZJTFFacFJvMnVTanBqTThyVVNSWlh2WlFwalI2ZXpSeGRtRnhOYnQwemdOMjNWaWNYam1SbWpveXE2d2UzcVFmWHA1ZlBubDJHTDJ1MHZGaWN2dHJoT0ZqSnpRNkd3NE96dWNwQmgrTzBXbHdhaWRMM0xJNk9MdUpYOVhmMlRVN3MzVHN4dVkrZmd4THd3SENOQjJEdlRSS1dPTm9wSG1Mc3Z5WUtKdkdjc2ZOaG8wY0tlM3RJZXg2Z2RUWWo1OVJLemFCMHNWUXZiWFh4SytNQjRmT2JNa0gxcmhvVGdBMFlvZXQwUnZnTHNBSGZBRnQvckY3ZWo5WEorM0hTR3VXMzZQMjlQZkRjQThKVEFPTnVCZ01rTmJaazFDWDFDRXJxTW5idmhCR0tVN1RvZlZwZGNOanNiTzU3MkhOWWd3eEtNQkVhcFBOWVRUcVhzYWFUQm1qQW04bExGcFovN2diOHc4TG5BTVliR1l4SmRVczBBcEkxQjl0aDF2YUUwbVVqUFVTVHJtT0dkQjNYcEd0S3R1ZzV3VjdBYTR5dDUxNEdFK1JkSjhnN2F4dDVONExJbFFWQWk3ZjdCSEhuVkN4YW5iVVBjQXN5T0c5aWNFRHF5eUROWWk0cW1pUW5hNGJkTE5CR0RJRTJyZ2swWncydk1NRHJFejRMOE81ajhJRC93RTZHYVVVaDRtZ3ZnOFpxTW1nY3E2NEZxbGRkczVjeUJZU0EyY0x5TEJ5dzVpakQ5UUtERFJKQmJwQUlJMHdpc0tYaU5qcWNKb3ZlMnk4S2VCWFlIdHpQbm9YVDcxTGFuLzZ4dXRNUENHVXp3WUJBd1dJZnpBN3loSTNPRHVvWC9CYUR0d0lBdTRldCtRRjl6YkJXa3dTR0ozWTZhSHZteG93ek4wNDNYVE5RUHJMeGF6cERUN1BjcnpxKzc2M2orejZ5MXBMelphNTc3VmxUdnRmSHQrM2V2VzNibmozYmVzdmwzbUs1TEYyOWE5ZlZwM2Z2UHQyL01EVzF1RGcxdFlCeUYyK1RCMkF0TFRwTkhrOUtvYWJUbUEyZDVvSFM5QjdtWU13SCsxSjZYMjg3NE83ZlJLZnByWjJhQXROcC9NVHZCWjNHakRwTnBVV25rUlhRR1VOdkNYcnlNZi8vNisxcVk5dTZ5dkE1NS9wK3hYWVMyL0hIdGEvdCtQdmFqdU5tWHVMWlRrdysyb1cyNmNlU2xyYUROVzFwMTNXQTFpSUtWQk9vcTdTSWlSK2x5aEFTVWpiQnFGb2tvbTZkdWwrVjBEb1ZtRUNkaEVCRjZ1Z2YvdkFEYWZ0QkVXS2J3L3VlZSswNHJ0dUNrSWdVTzQ3UFBmYzlIKzk3bnZ1ZTU3eHZYZytINi9IUkdUM3hsU3ZwYzFyU3F5WGNXa0xUcS9uSXBzR2pRK2JhTVFCOXA5T2p4RUNOQyt1Z2NXbSswWU1qSW5YVHVLR1d4aFVzall0TGluNmZYL3QrT0dNNXM2bSt2WnFhMWlQQng3VGs4RkFxcGtkelJrUWIwcUtocWZqald6THhkUEZ3b2VMM3BRZmNnOEZnMUlnSEExSDNRTkt2amVYMXZDcmpsamp4Z2VCUFFMOC9Bc01ZMkhYWkRneWpBSVpwNHYzUnNneTRzRGVYSzkzODVTdm42Y0VQYy92M1ovLzg0VVhzRnovMFN4RHVFVUZ0TjdFTEFXMTNkZFYybzZYdGhSWjhnVDRwbHhHL1E5dDlYZUdMb2R4ZXRmWEgzZFVudDQ4bmFoRk5ML3BUeGFHMEp6V3crbGJ1aEN6VFdyRTA2ZllZYmxjMkdrMHJzc2x2QUxrSzlBaE1neVRxa0VyUnh5WXd2Yis3M1JoYXR4c3dYRUdOWjlibWZDcCthRHRBQTBxN0dqU2RXODN4eXJUaGxpdFQ4OC9NK2ZOZXJ6dmROenJ1TGtkTE01OGYxNFpkY2lrMW1DdUlpOXYzUG1lMzUxWDczSlJQcXcyUFRGL3plZk1sSXhKTzgzbm1ncGNJMTVYN01JckJMVksyRGFNb2dGRThBREs5UXVVWGY2RE9uOU9SUXFieFBzY25FV2gvRnVhcm55UklFUzJVVytwdW9ZYmFMQlNmcVZxQWtudzJXVXdWbytGQVFrczR3VnhRdjlwcS9nYlN0cS9USXJRbmd2OVpkUzRYMXhOYlNxWFpaRGllbjZ1RXM5bHcxRENpaVdJeGtTeHVFaXY1YUZGVjg3b3hObWJBckZXTDBYemxnOEZBSUJZTEJBWXZKb09oWkRLRUIyTmhQRFZvVDI1OVBHRWNiV0lQUGswOHdDWU90V3hpZ1Q1d1BEMmRlTGxKVnZTM1laQWZQWFE4NlpHSERTamNGbDcrMHNuZDhEYTVHNlVFTFIybzBGZXE3RHJpQ21qb2NTaWJwcWVoVUpwK1Q4R2RnN1AwYWZqME5QZFg3cElsVVJDcEZtQ1NEVkNZSk13SkN1NGs4TFFHSXNGRXM4OFRpVEZwSDVFa3Rxaks4Q2ZiNVhReTVrdzVRZC9DSWQ4QTVvNkJ4dzNGMHlQSHVXL1N4RFRXODg3R2U1K2pHR0x6ZFg3dmZydzNBV1czS1Q0cThzUVd2ZWp0dGxPRjJJaGlPeXRSSm9yc2xOQ0RFbUZVT2hXM2kyMzdNTjJVZUVpR2E4VGRvY21oRGVYWjBrT0xINWlNb1BCYXdBbkxrWGZBNDhiZDIxWURITTBHSUM0QytTK3hHeUQ1dDB6NW56WGxmd0ZqWjVzN1Avd0oxTERtekRoSThRUlZGWEZPUWV0dHRtVzhsOExpUngza2JBK1ZWRlU2eFVPMkNpTFlpVGE2TGNoNkFyM0RxcklQM2hUMWtCM3FVWGRiaC9kcUcrcVFsdjZyS2lhbmlTeGk4cUt6SGJXUS83d1NQSXRTTE5hcXhVcXhVaDdEUEM5dVY4QjhvTzZUYzd6REVBZXZmY0ordzk2Rm52cUcyVjhuc2IrK2k0aUdMSnZrekx3ZDgyc1NsWkVUMW5uSzU3blJFTGszQW05cE8rekFVQ0ZlOUZhV3VwUzI0dkZ5TlJ3d0kvZmpaV2ErQWR6SW1NemtjOUZJWDYvQVJvcTUwZnlveVRFTTY2R2dHU2JISk1nMGM0S0N6TGJCalRLVGpDa3p5czd1d24rdm1MS1A5RkhXYTBwanA3S1Rka3J2Y1FEYUFQbmRQZjJTeldwQnBlczFYZHBnWGl6aHhZTFZqdkxNZEhtczJaYXRzOU03Wm5aTTFNYW15bE1QYTljQTM2bWhaSVpjb0xkWTJjd3pEM2FNQ09oL0YwMWZuY1ZORVFoM3c3djZ1Vk1rc2I0QlR6UGpseStQWDdwMDRaMzYxYXQxdm9iTTBGbDZDM0N0Z055V0IrOTNTdjQ4UDF0eHEzR2F2bHl2bTg5N00ydHJJTXRXa0tVUE0zaTB5MEdJTEpEakNwVmxhUkd6NWtvN0hRNUhuNlBQYlFxR2VWUGFCZk5nM1pad2x4cW5WOStxcjY3V0czY256RmlOKzhsUDZPOVlBZTRqdmQxalErNFE1MXNnMlVMT2ZDZTF2SnhlWHM2OCtrUGoxWjhhS3l2WmxSVmo1YlhzYXlERERQazJ5UGNGTGw4SVkySWlQUkxrZzFuSFpHcnlVa1F3SUFjNEp3V1dOdEgybEt2ZkFjcms5L2FIWENFVXVOZHBJbHQ4NW00L3lTRERTdHBPZDZhcVJTSytRNzkvczhrbi9sdVRrM3F4WHYrZ2paOEs4M09HL0IzNi9ZOHdNOCtUVlJEclBObE5kbTEvVThNb1ppMDZjNHVKMFdUZHRySmw0RERaMW9jSnVjN2RNbjdnZkhrUittQUhZT0t2bTlUZUhCZ0h3WGF5aDZxRXFLZGF2STduWkxOU21WZUtaQjZ5QzArMTJRVGJ5MWhXWFhwbzBTNzhEd2tqdTdhNVh5M1g2OXpDbDVhMi9QYmVRdFY2Zi9GTS9kakVtVE1UeCtwblVONElPVTVmWXZNWWdmbHRBSjJQNVF2TUQwMzdZdU05T3BGcWZFS2w0Lys0Vjd6NWF6NHZGcURzTysxbFBhS1lTYVhPMEluR2V5a3FOdjdGNXEzQ2pOVG9aYzYvK3QvT3NuZ2U4R3p6L3ZqOFFxMjZzRkJOalkybDB1VXl2Yngzdkxxd3B6SytkMVBWU0kyTnByTVYzS01ubjJOTGJCbFFWaGtqc1h0Y2R0VW1rT0NBd214TWdQVVdCZzd3aWJ1SGtXMDZjaUFJMTIvTXhnYUwwQUdiRlhpYTRUWnJzWkFzcDhxeGFFRkU2bjNHT25nS1NtR2VWYlh5c2ttb0lOWVJwbFpHTm5QM2RUSHpqQllPQnc4YUIyUHp3OFB6c1lPWnhXQWtyRm1mOThUZXdPeHFWcGExc0Q2eWVSSysyRE04dkJCYnpDNkdJcEhRb3JFWVd5anl6d2REa1doSTRiRnpySEEvMmRuUkNMUVh1YVhYT0o2eGNuQTAvV2V0eHkrdE13ZEh3bFhDWEVYWE5zTVBqZEtWVDc5SlZ4cGZocEdxd2NXZjBpcU10WDl5QUswUGpOTnh3am0yWUU4dzk2Z241Z0o0VzZQdlRqZGVvdFhHci81cGNoUk5yaWpuU1pKSGNCUm4xMHIwWTNvUDhNMjVTYnREaGlubDVzbE90Ny9wUjNJV2hvVGRFSGNPTGJ4bWEyN2w2ODN2MitQTmhadGxySy9aWXRldkQ1ZzhMaS94WWw2cEJQSzRQSzF3Z0M0clJHREdtM0Q5WUc2eU1PdmJ0aTI4YXlSUkQyeWw5eHEvbjk2WlRkR1REWHMxSHZlNC93cXdwb1AvM2p4RHVKRUR6MmZ6STNqdzk1MCs1RjFsd3NEL0MyK2VZSWdzUWorR2F4WE1uR0psTTVISk5yUkF5RHBTaU1Ja1g3N2trak1lajV4eC9lbU5UYUR5RjluaDIybGFiOXhJM2Zuc3gyWi9pR3Uzb0o3ckhmVnM3YWlIdXNwK1FTajdYVFJzVlhUOXM5ZHZweHMzYUQxMWh6MjdBYU4zbkN1UU5pQjB2bTZTdFJlRXU4SU9YRnRKSGpOUjlEb0Zpa0VKa1NXK3JTMGxEUmpaSmNJRWdlMGpWb29wSmp3Vkd6Ujl2bG9xSzBsYVhsU1oySEpOK05kZEU1TGtMNlhIeW5LVFBvSGU4SThhTHZvUnZKNGN6WjdZdWVWcjNpUDIwVmdFT3NoSUJJUmoxT1hianc5WGVqWjdnWmR5OVNScnVZbUZKeXVwY0R6c2N3U2RrVkQxY1QzVzk5V2NydWZ3RnlWZC81R3ZzcU5zeTZITkkvOEdFNGREWEFBQkFBQUFBUURFRGFSYkNWOFBQUFVBRHdQb0FBQUFBTmpRODdVQUFBQUEyTkZXbi8vRy91NEVJQVB1QUFBQUJnQUNBQUFBQUFBQWVOcGpZR1JnWVA3MTd6d0RBNHZOLzJQL0Q3TW9NQUJGa0FIak1nQ3RiQWRmQUFBQWVOcU5sSDlvekhFWXg5L1A4NTN5YzhLTmxwMmZaMjVuUjh4eHR4K1V0UjA3UXlrYkdrdkNMREYvK01PUHBFUk5pUWovS0JGL3FpbUY4bzkwSnFtTnRXRnIrMk1relI5U3lvbk8rL1BaM2ZYZEVmdmpkYy9uK2Z4Nm51ZjlmTDZuaW5KOEF0em9aWXpUNjlpcTNRanJHOXBtc2d0Ym5kbjBlMUdQbjZqVGVrdzFjN3FUOHcyMGc3UUJSUFE4YlJIdFdjNGRSSUUya1hiRXpKM09LUVM0UGtIUFlLSTJZSUdONDhLNU90TFBZUExJeHVUMUhmazJ0Mzh4bUxMY2EvSjNvMFBNWmJpZVd2eE1EcEFQNUN2OTliUzl6aWJVMFNib2o2ZnRjdFc4VVhjTTEyNXBRYTZONDhKbzRTYkh4NWhaYzFZdm8xTWFvMWMyVFZsUVg2dm5LREI2dTdHNnV6RTlTSk9McFJwRlRINGhwTlVraUpBY1pqd3o5aU9HQVpSaElQbFpQdGx4ektsbERNNXJGZGQ1enV5VFJwNS9pZ0k1aWpsY1d5dmZNRmtmMGYrSVNmSVZrK1VGaW13Y0Y4NFJMTXVlTTVnOHN1RmJDT3Q2aEV4OGs0dko4WitZL0l6ZGtLckpVSld5SjFHaml6Rk4vY2t1M3JlYTkzV1NIdkllNzJ5dEwrV0J0VVBrQjRtYmRWTi9Tb1BWc2hUYmFIMFN3VGJKNXp2MXB6VHh1N1J4NFR3WjZhZXh1alVpUUJaYS9iS2hubTZzM3RSM1ZGQi9ON1lQYnRpVEROY3dWenBZejFYNE1ucjlqM3o0L3lER1dJYnJtS2NUY0k2MGtRT2tucHdpZThXTEJwMk4weHhmVVE4T21YVjVqWFlrVU16eFhYSUxmWWlRbWRiMnc2T1hyRzhvVmZCdThDMzBJV2g4T1lhZ0hFY3A0cGdwKzNpbW03VWVKeGRSVEZid0d5M1dRMWdocjVJZDBvTkZNaDh0c2dWUlNRQk9GLy8zNHVRRW1VWDZVQzdQVUtHRjVENHFuSnVvK05zYzc0MlJFbWxDRlNtUlZ2YXdGY3NsamxWeWp6N1JNS3ExbGJhQTUweXZueWVUeksxYWRuTSt5ZjhFaDNnUmxpLzhMN2lCSmZxV2VSWWlxR09wN1Q1K294ZElHeGJ4N1Vla2hOK1BqOVN3UC91eFVFdjUzVGJ6M0dKNGRRODFhV2JNSGZEaU52SlkzelMrUzQvVVlMcUVNRU9xcVVVQVV5U0tXUnpuMjMxM3VNK1gycmN1dFM4NmNwK3U0WHM3Z1R6ZFRoNnlCNFB3NXBRejNsUlVacGpQdmhxYlJ6eW9sRTZlN2NSbWFsT21qMWxiSVZwMEpjcmtPVFdJSUpydVdhWnZDWXd4bUZoVUgwNi8rZjBONU1WRXNBQUFBQUFBR2dBYUFCb0FHZ0FhQUVvQW5nRHFBU2dCVmdHQUFkUUNBQUlhQWtnQ2RBS1NBcndDNUFNdUEyZ0R5QVFNQkY0RWdBU3NCTkFFL0FVb0JWQUZmZ1dvQmRnR0NBWTZCbjRHckFiWUIwSUhrZ2ZJQi9ZSUtnaWtDTmdKQmdrNENZWUpzZ25rQ2hnS1RBcUFDcTRLM0FzS0Mwd0x1Z3dJRERvTWJBeVdETVFOQmcwMkRWZ05mZzJtRGM0TjhBNFVEa29PYkE2OER1b1BGQTg2RDE0UGdnK2tEOG9QK2hBY0VFUVFaaENTRUxZUTRCRUtFVFlSbUJHK0VlSVNDQks0RXVZVEZoTk1FM3dUcEJQU0ZKb1V5QlR1RlI0VlNoV1dGYm9WOWhZWUZrQVdhQmFTRnJZVzJCYjhGMkFYcEJmUUYvUVlJQmhJR0hJWW1CakVHUElaR2hsR0dYZ1pwaG9pR29ZYTBCczBHNFFiK2h4OEhMUWM2QjAwSFdBZGRoM2FIaUllWkI3T0h6WWZpQi9ZSUJZZ1hpQ0NJSzRnMkNFUUlUNGhtQ0h5SWxJaXNpT2FJL1lrVGlVSUpXd2wwaVlBSmt3bTJpY09KejRuaUNnQUtCb29TQ2g0S0t3by9pazBLV29wbkNuT0tmNHFZaXJ3SzI0cnlpd3FMTHd0RmkySUxjNHVJQzVDTG1ndWtpNjhMdHd2QWk4OEwxNHZ6Qy82TUNZd1RqQjJNSnd3dUREU01QSXhHREZhTWJveCtESklNbkF5bkRMTU12b3pkak9nTThvejhqU0NOTFkxQkRWd05iZzE0RFlrTnA0MnpEYndOenczaGpmd09CbzRoRGpHT1FvNVZEbWVPZVE2S0Rwb092UTdRanVTTzdZNzRqd0tQRFE4WER5S1BMbzg1RDBRUFZvOWlENFVQbEkrbkQ4U1AzZy8zRUJLUUxaQkhrR0FRa1pDdUVNc1E5UkVHRVJlUlJKRlVrWFVSalpHdGtiVVJ1NUhGRWRZUjNwSHJrZllTQmhJWEVpQ1NLaEl2a2pXU1RCSmFFbU1TYUpKeGtub1NoSktSa3FhU3ZaTGRrdU1TNkJMdmt2WVMrcE1Ba3djVEVCTVlreUNUS1pNMWt6eVRRcE5KRTFLVFVwTlNrMUtUVXBOU2sxa1RYNU5tRTJ5VGN4TjVrMzhUaEpPS0U0K1RseE9lazZjVHI1UEtFK1NUOGhRQWxCT1VOQlJIRkZFVVpCUnNGSE1VZTVTbGxNT1U1UlVHRlJVVk1SVlVsV3VWZ3hXVGxhaVZ1aFhDbGRPVjZ4WDRsZ3VXSlpZdkZrd1daaFp1bG5XV2ZoYUlscEdXbTVhbkZxNld1aGJGbHRTVzNSYnRGd09YRUJjakZ6b1hReGRkRjNRWGVaZUpGNkVYeHhmZGwvaVlBcGdLR0JjWUhoZ3htRDZZVkpoYUdGK1ljQmlPR0plWW5waWtHTDJZeEJqS0dNOFkxcGpmbU9pWTdoanVHUWVaQ2tBQVFBQUFhY0FYQUFFQUdjQUNRQUNBQ2dBVkFDTkFBQUFqQTRWQUFVQUFuamE3WkxMYnROQUZJYVBrelNsdEZRSUNZR29RR2NCRWxjbmJSR296YXFxVklHYUtyMUVTQ3lkWk9LWU9yRmxUMGo3QklnVmJIZ0FuZ0FFYjhDV0IyRFBTN0Rsbi9FSlRkSnlXeUNCUkN4N3ZqbVhmODZaRXlLNjR2VElvZXozR0cvR0RzMWhsM0dPcGtrSjUra3loY0lGeER3WG5xSUZlaVZjcEhQMFZuZ2FLaCtFVDlGWlowRjRCbnhMK0RTOWRDckNzM1RCK1NnOFIrZWR6OEpuRVBORmVKNHU1WjZoRXFjd2c5MjczR3RoaHk3bTk0UnpOSi9mRjg3VGF2NVF1SUNZOThKVGRDLy9VYmhJVnd1TzhEUzlLMXdUUGtWYytDUThBLzRpZk5yaHFRdkNzK1FXN3d2UDBjMmlFajdqY1BHRjhEemRuWDZ6SHNXSFNlQjNOQytWRjFlNDNsRzhxMXI4d05POG5VUlBWRlB6V2w5M29pVGw2eDJ0NDNTMVZQSUQzZWszM0diVUxTRVdvYlYyTzJnR1hpamJqYWluYnd4VjZ1cEE3eXEvSDNySm9sc3VMMWUyMWplcmxTelErTzZJY3pUK2tVclNJT3B4bHNEalVwT0pmNnlEYmRYVG5wOTRYUzZ4S1hweVgrOEVLWnRJM292YWV1QWxpbUVJZzZicXBTaWczMnVwaERYSzJYdFk1VnFzZWxsd05RdTR6VWRkTHJwc3hTVFh5SGhQdlNEMEdxSGlBV3BsanpmV2R0alRxMnhhUUFkcE13bGluYnBwRUxwUjRwZHFHMVh4REFZRHQ5dmNEL1ZockV5SFlvNkgxZHV1LzlMYVQvRFFPa1VVMHlFbEZKQlBIZExFdEVSbFdxUVZVQjBXaFhVWDN4YldCK1RaaUczRVIvUUUxcWJkcjFFZmF3ZTJoRkxzcjFzbERlV1VWcW1FeDRlK2llaFRnMXhrUmRTRk5kUE5WR3ZVeGhQQUYyQWZUbmcza05IRGV1TllMWFhzRDBERzdrTS9oRDFCL1M2NktOTXlWV2dMWFc1U0ZUU3FPTXk3TTVINVBmMUhXRTEzZ2EyRXgwN2dIMWIxc3hQL3ZSbHN3MnJJZzJhQ2J4Zm5sZkFPYi9wbmZ0TlRZS3NjYWpMdGdkcWdnYjBUMDNFV0VkcDZqRjRxTjlBSHQrdzAyUGFqYlBaRDZESTZpRzNzcUhKMVRPRTJMQ2ZOMHJ3OFV0bjR1Y05xUEhxS043Q1RhK0JyUEFPNVYrTTE1NjdSam1XTmUrZHZVOGhta0VMVHpEbUdMY1dKcWRWeTdkUjgrR3ZJcjA3a0RPemo0aGFidEk5b2pmK0s2WEk0dy9IbytOamRIODM2LzczL3pyMy9VczVYYlgvcHlBQjQybTFTQ1hRVFZSUzl0NFFKSkFVS0tJSWJ5T3BHYlpJMlRkMmdTd3FGMGtwTEtDQ2kwOGswR1pyT2xNbWtwYmlBQWdxQ29xSzRnaUR1Q3dMdW9PQytyOGQ5My9XNDd4NzFISmRrNXBzRWNjNlpjLy83LzcvNzN2djNvZ0QyOTNjSVVmelB4eHZTZndGN29SZGRHSTB4R0l0eE9CU0g0WEFjZ1NNeEhzVTRDaVh3d1k4QVNsR0dJTW9SUWdXT3hqRTRGc2ZoS2ZiR0UyakZCYmlORXQxUXNBVi80bTlFMllkOTZhRVhLZ3ZaRDAvaWFmYkhNeHpBSWc3RUYvaU5nemlZKzNCZkRzR3ozQS9QNFhuOGdSYzRsTU80UHcvZ2dUeUlCM000Ui9BUWZNU1JITVhSYU1PTEhJT1hFTU5Xdk15eEhJY0xjVHNQNVdFOG5FZmdFeDdKOFN6bVVTeWhqMzU4ZzFjWXdLdUk0eldXc294QmxqUEVDaDdOWTNnc3Z1SngyTW5qT1FHZmNTSnFFRVl0Sm1FeTZqQUZVMUdQYVdoQUkwN0FkRFNoR1RNUXdVeTBZQlptWXc1T3hGeWNCSTJWYUVjQ0d6R2ZWYXlHamc3OFJjQmdEY09zSmZFNko2R1RrMWtIRTBsT3dRSk9aVDJuNFV2OHpnWTI4Z1NzNUhRMndXSXp1dEROR1VneHdwbHM0U3pPNWh5ZXlMazhpZk40TWo3bUtaVFppb1hvb1lKVGNScTJZUkdqVkxFSnA3T05NY2FwNFZQT1p6c1Q3S0JPZzUzNEZtZHdBWmJnVEN5bXlTUXRwdGpGYmk1a0R4ZmhhNTZLSFR5TnArTnpub0gxMk1ERlhNSXplUmFYY2htWDgyeWV3eFZjeVhPNWlxdDVIcy9IZzNnSWZWR044L0FHM3NSYmVCdnY0SHk4aS9meElkZndBcnlIRHpBUUEzQVFEc1l0Y0dFelJ1SWEzSTE3Y0NmdXdxTjRqQmZ5SXV6Q2J0eUVtekVJRTNBeXp1RmFYc3hMdUk2WDRoRVVZVHZ1NEdXOG5GZndTbDdGOWZDaUVNZGpJdWJoRlBURFdYZ1laMk1GS2lHakNoNzB4aWh1d0NxY2k5VzhHbTRzdzNLc2c0VEIyQWY3WWdqMncxQU13LzQ0QUFkeUkzN0FqL2lKbTNnTk4vTmFYc2ZyZVFOdjVFMjhtYmZ3VnQ3R0xieWRXM0UvZnNZditCVjk4RGo2NHp1c3hmZTRGeU93QnNOeENKWnlHN2Z6RHQ3SnUzZzM3K0c5dkk4N3VKUDM4d0h1NG01WFE2Uyt2cUM2eWEyM0pqdGxSWlVxVzAyMVMzVlhkc2lLYWVqdVNpTm02R3E3dDFyUlRDWFYwWlpRRjNxcW80WWxLNHFxVzFLTklxZHZwY0UwWkVzSzI3bFMyTjcwaExQWDNHR0hyVmRZajduRGduRlNqdEdkMHJVU245L3ZtWlJOY1UxdWxVM3Y1TndkcWM0bUw2aWI0cTRUdmRVNVRGS2RwU1dpcW5mS2Z3a0RRYWxlVmxLV0t0WGJIWW5kS2xkOXVvelU0QncxNUIyVmxrbU5kcFYramZHVUhwUE5WRWRDVGxudVJxZWcxT1NrTk9XbGxBV2xabnRYaEdGdjgzL2E4UHRDcmhucFlhUVplV2xCdnppcmxDSk94Y2dlRlNOaXhJZ3pZdStJcWVreEtXSVBLclhZQmZ1MlJEWFZWSk5hVW1xSm1YS1g2bTNKVmZiT3pudTUyZmF4Tk1kTzg4ekpxU2M3V3N1aW1DeVVVZkswVm5LM283bisvWUZ5U1hYRVZoMngxWnpZcWhCYlRZdXRDc3JZWG1JSFBMR2MyUEdNMlBHOGxqV2IzS05scnhSbzg5MmE2Rk1UdW11Tzd2UDMwcjI4c0QxbXFxcWVrUFdvcGtnSlI3WkV2Z21xWFltTUNYVG5TTTgzUVZBeUhFbU1QU1F4aEFsTUo4WE1OMEc1bE13M1FhMDN1WmNKS2x4V3hnUld2Z2tDNHF4S1Nqa1ZVM3RVVElsNVU4SUVLZHNFS2NjRTNZNEp1ck1tNkhaTTBKMW5ncDY4RisxeFRMRElNY0dpN01QMlVRd3pxdWx5b285Y25GVGlocEhvSjl0M3NwSGRtb2dHeVRsS3NWVWsvOXRDTnNNdUphTCt3bDNaMEJsR2hJVnlacVpzb2oyYWlIckhpdVdFNVlrNTVkUExBWGtteXNSRk1jWG82SkNkTVRJYi9YT095b1JlKzZtYkUwYVgzTzdOUEhTSnY2UWs0QThXWlFqTnBMb2daVmhxUW0yekJ1ZHZSRnNUbWIyTU11bnJmb0VCZ1JVQ0t3VldPZWdyRzlTcG1wb1J6ZFJPUDBhMFdKRTdQZkdlenJpcTIwdFZqOHJKdUxQcytIZnBGYm1adFNSYkdYQ0ZVNmJoY0phWENDd1ZXQ1l3S0xCY1lFaWc2QzBrOGtJK2dXS0drSmdoSlBoQ2dpOGsrRUtDTHlUNFFqWmZldFJTZ1VHQjFRSnJIS3dxYzF4Y1ZTV3cyc2tQaUxvQnA2NnZ3aWZRaWYwK082ODJYRnRyWTIxdFRXR3haYldsalcvRU5kMzZCKysyOWNFQUFBQUFBUUFCLy84QUQzamFZMkFnQUR5QTBJSEJnV2tQQXdQVFJjWVhEQXovOVpsLy9UdlBkUHovVnlEL3cvL3YvN1ZCZkFZaklOUmwwR1dNWTJBQThSbFQvdjlHRm1mYXd4Z0gxbmVJTVJKRUF3RE1LaU9MQUFBQWVOcXRWMnRiRzhjVm50VU5qQUVEa3JDYmRkMVJ4cUl1TzVKSjZ6akVWaHl5eTZJNFNsS0JjYnZyTk8wdUV1NzlrdlJHcituOW92eVpzNko5Nm56TFQ4dDdabFlLT09BK2ZaN3lRZWVkbVhmbVhPZk1Ra0pMRWcrak1KYXk5MFFzN3Zhbzh1QlJSTGRjdWhFbmorWG9ZVVNGWnZyUnJKZ1ZnNEU2Y0JzTkVqR0pRRzJQaFNPQ3hHK1JvMGttajF0VTBLcWhHaTBxYWprOEx0YnF3ZytvR3NnazhiTkNMZkN6WmpHZ1FyQi9KR2xlQVFUcGtFcjlvM0doVU1BeDFEaTgydURaOFdMZDhhOUtRT1dQcTA0VmE0cEVQenFNeDZ0T3dTZ3NhU3A2VkE4aTFrZXJRWkFUWERtVTlIR2ZTbXVQeGplY2hTQWNoRlFKb3dZVm0vSGVPeEhJN2lpUzFPOWphZ3RzMm1TMEdjY3lzMnhZZEFOVCtValNCcTl2TVBQamZpUVJqVkVxYWE0ZkpaaVJ2RGJINkRhajI0bWJ4SEhzSWxvMEh3eEk3RVVrZWt4dVlPejI2QnFqYTczMHlaSVlNT05KV1J6RThUQ055ZkhpT1BjZ2xrUDRvL3k0UldVdFlVR3BtY0tubWFBZjBZenlhVmI1eUFDMkpDMnFtSEFqRW5LWXpSejRraGZaWGRlYXo3OVVUTUlCbGRjYldBemtTSTZnSzlzb054R2gzU2pwdStsZUhLbTRFVXZhZWhCaHplVzQ1S2EwYUViVGhjQWJpNEpOOHl5R3lsY29GK1duVkRoNFRNNEFodERNZW9zdWFNbldMc0t0a2ppUWZBSnRKVEZUa20xajdad2VYMWdVUWVpdk42YUZjMUdmTHFSNWU0cmp3WVFBcmljeUhLbVVrMnFDTFZ4T0NFa1hSazZzUkdwVnVtMVZMSnl6bmE1amwzQS9kZTNrcGtWdEhEcGVtQmZGRUZwYzFZalhVY1NYZEZZb2hEUk10MXUwcEVHVmtpNEZiL0FCQU1nUUxmRm9ENk1sazY5bEhMUmtnaUlSZ3dFMDAzS1F5RkVpYVJsaGE5R0s3dTFIV1dtNEhWK25oVU4xMUtLcTd1MUd2UWQyMG0xZ3Ztcm1hem9USzhIREtGdFpDY2hKZlZyMitNcWh0UHpzRXY4czRZZWNWZVNpMk94SEdZY1Avdm9qWkJocWw5WWJDdHNtMkxYcnZBVTNtV2RpZU5LRi9WM01uazdXT1NuTWhLZ3F4Q3NnY1cvc09JN0pWbDJMVEJUQy9ZaFdsQzlEV2tUNUxTaVVIRXF4aHBrRU52em55aFZITEl1cThIMmZJMUdESVZqTGFyTWVmZWk1enlOdXEzQzI3clhvc3M0Y2xsY1FlSmFmMDFtUjVYTTZLN0YwZFZabWVWVm5GWmFmMTlrTXkyczZtMlg1QloxZFlPbHBOVWtFVlJLRVhNazJPZS95dFdtUlByRzRPbDE4enk2MlRpeXVUUmZmdDR0U0M3cmtuZWN3Ky9wdjZ5czdldEsvQnZ5VHNPdDUrTWRTd1QrVzErRWZ5eWI4WTdrRy8xaCtFZjZ4dkFIL1dINEovckZjaDM4czIxcDJUT1hlMUZCN0paSG9mazRTbU56aU5yYTVlRGMwM2ZUb0ppN21DN2dUWFhsT1dsVzZxYmpEUDVQaHN2ZGZudVE2VzZ5RVhIcjB3bnBXZHVwaGhPN0lYbjdsUkhqTzQ5elM4a1ZqK1lzNHpYTEN6K3JFL1QzVEZwNFhxLzhTL0xkOVQyMW10NXc2KzNvYjhZQURaOXVQVzVOdXR1Z2wzYjdjYWRIbWY2T2l3Z2VndjR3VWlkV21iTXN1OXdhRTl2NW8xRlZkTkpNSUx5RGFMNTZtVGNlcDF4RGhPMmhpcTNRWnRCTDZhdFBRc25uaDA4WEFPeHkxbFpTZEVjNjhlNW9tMi9ZOHF1QTI1R3hKQ1RlWHJkM291Q1RMMGowdXJaV2ZpMzF1dVhQbzNzcnNVRHNKVllLbjcyM0NiYzgrVDZVZ0dTb3E0M1hGY2lsSVhlQ0VXOTdUZTFLWWhvZEE3U0RIQ2hwMitPbWFDNHdXbkhlR0VtV2Jhd1dYR01rb28rREtuemtWSjdJUlRUYWlpTis4cFg2cUM0WFFtY1JDWXJhOGxzZENkUkNtVjZaTE5HZldkMVNYbFhJVzcwMUR5TTdZU0pQWWo5cXlnNWVkcmM4bkpkdVZwNElxVFl6dW4veUlzVWs4cTlyemJDa3UrVmRQV0JKTTBwWHdsODdUTGs5U3ZJWCswZVlvN3REbElPcTdlRnhsSjI1bkcwNE45L2ExVTZ0N2J2L1Vxbi9tM21mdENEVGQ4WjZsY0Z2VFhXOEUyN2pHNE5TNVZDUzBUUnZZRVJxWHVUN1hiT1JUZktuNTFuVXVVSVhyMDhiTnMrZnY2R3dPajg1a3kvOVkwdDMvVnhXelQ5ekhPZ3F0NmtTOU5PTGN6aTRhOEIxdkVwWFhNYnJyTlZRZWw5eWJhUWp1SXdSMWUrM3hXWUliWG0zVGJkenlOODZaNytFNHAxYWxsNERmMVBReXhGc2N4UkRobGp0NGdTZlJlbHR6UWROYmdGL1ZZeUYyQVBvQURvTmRQWGJNekI2QW1YbkFuQzdBUG5NWVBHUU9nNjh4aDhIWDlURjZZUUFVQVRrR3hmcllzWE9QZ096Y084eHpHSDJEZVFhOXl6eUR2c2s4Zzc3Rk9rT0FoSFV5U0Zrbmd3UFd5V0RBbk5jQmhzeGhjTWdjQm8rWncrRGJ4cTV0b084WXV4aDkxOWpGNkh2R0xrYmZOM1l4K29HeGk5RVBqVjJNZm1Uc1l2Ump4TGd6VGVCUHpJaTJBTit6OERYQTl6bm9adVJqOUZPOHRUbm5aeFl5NStlRzQrU2NYMkR6SzlOVGYybEdac2VSaGJ6alZ4WXkvZGM0SnlmOHhrSW0vTlpDSnZ3TzNIdlQ4MzV2Um9iK2dZVk0vNE9GVFA4amR1YUVQMW5JaEQ5YnlJUy9nUHZxOUx5L21wR2gvODFDcHYvZFFxYi9BenR6d2o4dFpNTElRaVo4cU1jWHpTY3VWZHh4cVZBTThkOFQybURzZXpSN1NNWHIvYVBKWTkzNkJQV2dBL29BQUhqYVkvRGV3WEFpS0dJakkyTmY1QWJHblJ3TUhBekpCUnNaMkoyMk1ERElNek5vZ1pqYmpWalVXSVE0bUxrZ1BBc21IU1laTmpDUHkya1B6d0hPQXl3SEdKZ1p1SUY4WHFjOURBNWdDT0x2QkpJTUxodFZHRHNDSXpZNGRFU0ErQ2t1R3pWQS9CMGNEQkFCQnBkSTZZM3FJS0ZkSEEwTWpDd09IY2toTUFrUTJHN0Nvc0Vpd3NITXA3V0Q4WC9yQnBiZWpVd01McHRaVTlnWVhGd0E1NlV1K1FBQUFBQUFBUUFBQUFCNDJ0V1V3VzdVTUJDRzczMktrVThnUWRMbEJGWFNxaXFLUUN6YTBpN2NwL0ZzWXVyWVlUelpkTjhlcDg2Mld3U29OOFF0dHNhZnYzOXNwemk3Nnl4c2lZUHhybFNMN0ZnQnVkcHI0NXBTZlYxWHI5K3FzOU9qb2lOQmpZS25Sd0RGNE15UGdZd0dvMHRWK3k3cjZsc3J1NTZ5SzlJZlVOWjBKMWZVREJaWjVmY3J0dVMwWjNEWVVha3V5UWsyakIzazhQbmkwMUxCd0xaVXJVaC9rdWZqT0Q3eUlud20xRXphU0ppK0gwWi81TEczY2I3eWc5TzhldzcrdWNqM0ZFemppSjh5KzMzMUJNeG40ZnpBdU5BVWFqYTl4Q2JQMjBuc0VWaWN1a3hPcFVtQWRXc0NWTjRKWFB1TmpNZ0VjY0thbWx3Z0RURVBNVWhMY1AxeENhdTRieXBlcG9KWDhDMGRKQ3l5UlpaZzg5b0pnMXMwRm04c3dXaWtCWVRxL0F1Z25NQWNJeW1HTEJpYmVXN3lWYlVzOHNrejVma2xRN0VuSDNiaU53ajEzd2FlU2VuNitYN0hwbW5scjJrdTlsWHc1bmp4THZvUXhCY0I4VW5BSmZ2dlZBdWNEOUo2RHZCaWNnaFJvb2xxdzgzOXpVbXZaN1habU5xZ25ZZFQzcGVIV2s5VUNtSFUxQ0hmL251eEE1VWlmL3hoL0FSZ1ZHMnEpIGZvcm1hdCgid29mZiIpO2ZvbnQtd2VpZ2h0OjQwMDtmb250LXN0eWxlOm5vcm1hbH1AZm9udC1mYWNle2ZvbnQtZmFtaWx5OidSZWRIYXRUZXh0JztzcmM6dXJsKGRhdGE6YXBwbGljYXRpb24veC1mb250LXdvZmY7Y2hhcnNldD11dGYtODtiYXNlNjQsZDA5R1JnQUJBQUFBQUpHc0FCSUFBQUFCTUJBQUFRQUFBQUNRRkFBQUFaZ0FBQVJpQUFBQUFBQUFBQUJDUVZORkFBQUJsQUFBQURvQUFBQTZpeVdVc1VSVFNVY0FBSkFNQUFBQUNBQUFBQWdBQUFBQlIxQlBVd0FBQWRBQUFBMERBQUFpS2c2ZGhhUkhVMVZDQUFBTzFBQUFBdWNBQUFZb2NBTnY4RTlUTHpJQUFCRzhBQUFBVWdBQUFHQmxjNEcwWTIxaGNBQUFFaEFBQUFQdkFBQUZ0RzlNL1ZkamRuUWdBQUNJSkFBQUFFNEFBQUI0TFRmL25HWndaMjBBQUloMEFBQUc4Z0FBRGhXZU5oUE9aMkZ6Y0FBQWlCd0FBQUFJQUFBQUNBQUFBQkJuYkhsbUFBQVdBQUFBWWlJQUFOS2lDQm0yUTJobFlXUUFBSGdrQUFBQU5nQUFBRFlVdjQ3TWFHaGxZUUFBZUZ3QUFBQWhBQUFBSkFmM0JKSm9iWFI0QUFCNGdBQUFBeTBBQUFhYWxUVkk4R3h2WTJFQUFIdXdBQUFEVUFBQUExQ3hpdVNMYldGNGNBQUFmd0FBQUFBZ0FBQUFJQUw3RHpCdVlXMWxBQUIvSUFBQUF6WUFBQW5HT0RWWUdYQnZjM1FBQUlKWUFBQUZ3UUFBQ2duMHBwL1ljSEpsY0FBQWoyZ0FBQUNpQUFBQXZlRzJYaU1BQVFBQUFBZ0FBQUFFQUE0QUFtbGtaVzl5YjIxdUFBSkVSa3hVQUE1c1lYUnVBQTRBQmdBQUFBQUFBUUFDQUFnQURBQUIvMklBQVFBQUFBQjQycldaQzNDVTFSWEh6MDEyRjdLUWhBQ2JKUUhsL1E3aEtZSUVaenBWWjZwMlZLUzJ0YlpJYmFlT3hDaFkyNWwyeGs2cEJUcE1sYUtDS0ZXcUF2Sm93ME1RUVJncUR5MVdvS0N5RVBJcWFoSmh1NU5Ba2lhbTN2N3UzZS9iN0NZTExMUitaLzdmZC9jK3pybjMzSFBQT2QrM29rVEVMdy9LRmttNzZaYmJaMHBXOGV5ZmxraStlS2dYcmNXMDl4UFAxKzY5ZVlBTStmcU1tUU9rWU1ZZDN4d2drMmJPdUcyQUZEbDlsUE5NYzU3cHp0UGpQTDNpbS9QamVTVXl6TjRMN0gyQ3ZVK3g5eHZ0L1Naa0dYbVh2aHV1eUFGKzcwcFJmWHZhdWViS1pKa3A4MlNKYkUvcm1wYVZ2aXA5VGZwR1Q0bm5lYzhybnIyZWYzbzlYciszaHpmWE84VjdxN2RZdWtpK3JwTitZTGx1a2hXNlRoWHFzQ3JTOVdxNlBtWmFRVDlhbHVzd3JSVXFxQS9UdWtqTjBpL2JzZlcwN3BmbDRxZWxqSmFsakN1bjlXUEpZR3dBaldVenR0NXlEdXBhVlNnK2V1MVcwM25PMGlGbTJvWHgzVUF2RUFCOWtUYVM1eWd3R2hTQU1XQWFLQUxUd1kzZ0h2QnQ4QjN3WFhBditCNjREM3dmL0FETUFrL3FvL0pic0FBc0JJdkFFckFVUEFlV01ZdmwrcUM4QU5id2V5MTRIYXdENjhFR3NCR1VnazFnTTlnQ3RvSTN3RGF3SGV3QWI0R2RZQmQ0Ryt3R0owQUluQVNuUUJrNERjcEJCYWdFVmFBT2ZBN09nblA2cVBLQkxxQXJ5QUIrMEExMEI1a2dDMlNEQU1nRjkrdjlhamJyVmVpNlFYNGs4M1ViYTQrdzlnaHJqOGhDckhzUnp5VmdLWGhXZlBJY2RjdlpvUmQ0dmdoV011YVA0Q1h3TWxnRi9nUmVBYStDMThCcXNJYnhhOEhyWUIxWUR6YUFqYUFVYkFLYndSYXdGYndCdG9IdFlBZDRDK3dFdThEYllEYzRBVUxnSkRnRnlzQnBVQTRxUUNXb0FwOHc3MC9CWjZBRzFJSTY1djQ1T0F2T2dUYndIL0FsME5nbUoxc3B3RWxCcnhIMEdrR3ZFZlFhUWE4UjlCcEJyeEgwR2tHdkVmUWFVVDEwcThvQlBVRXYwQnNFR0o5cmJiMWNEZGNiMUFnd0doUktoaG9IeG9NSllDS1lxaStvYWFCSWI4UFN6NGhTUldqYTNBZkpPSFlteE02RTJKa1F1eEppVjBMc1NzanV3aHFlYThIcllCMVlEemFBamFBVWJBS2J3UmF3RmJ3QnRvSHRZQWQ0Qyt3RXU4RGJZRGM0QVVMZ0pEZ0Z5c0JwVUE0cVFDV28waUcwRTBJN0liUVRRanNodEJOQ095RzBFMEk3SWJRVFFqc2hacG12RDNEMnYrVHNOTWdLMWpVSG5SVHJObFdpbTlWY2JIRWVQdVF4VG40YWZzQkhxZFg2aTVjWTA4Q1lqNHlWTXVZaitvWm9iWkN1dExUUVVrYkxNYlQyRU53YTRiWUJUa2ZvVVVPUGZMMVRGc3Q4ZW0xbjdCRmFxeGxmUVk5bWVqUmorNHRsZU1MZGpBbkJ1Wnd4clhDdVlWd1l6bUhHSGJCalBOWmpsU0Jycm02QlU0dDBWVUhKeGcrR2FEbnM5TDlBYTdWcFpVeVkzUTNxS25ZOW0zbVdzcnNIMUJ6SlZNWFVsK2l0YXE1ME42dVh0TUFtNDVGekIrVGRMbE5rUEJIZ3ZLN1hUYUJPaDdqWGFteFhuOUd0dHRiVTE4di9lT21uOUgyczEvM1ZxSmZpaDBYdmdYZElmNHFzU3VySzlHSHByOStoYnEvK2gzN3pDaVdzMWlYY20rd2F3cnBaejVjTVBJS0lGNzl0SW1pMFY0MTBSMDlpVnFRL0ZULzcreFZjVjh0Vkw5TlA2RXBPbzEvWWFYMUI3MFZMK0ZpcnBiUGNLM1VMdXFxU3Fmb1F2Yy9vYXIzdkNrVjQwRXlyTHRXZjZWSW5ZaHU1cmJhMkdhdHJuMHV6Z3lhalJkTjZKV3ZYTzNVRGlPZlhkdG1SS1Vxd2xsT2hWN0g2RFFuamo2R2hDdXpaMTVHai9zemV6N0RDbWl2UWxjL0JWMzZocXhaZG8wOGxuVUhIdmhldVdrekdWekR6cy9vbC9aRmVsbEJYQWVySTNDNmlVMWJiaXMrN2Nsa3QrcFdPYTZDdUNzK2NSR3U2TVNXZXBmcHgxeSsxejBudnc1YmVoM081UHVKVTVlcXR0dVVJZnVaODFKTVFPNjl5SDFLMjlOU3VBTDZpRWc5N1JDL0FkL2p3YXNmMGJ1cWkzbld6cWFNVWZ4YnJxSlBvRHJGM1FieENHK2RwTDJOS1RVdFNUZFViSHhxTkJNU2kzckhhK0d0UVl1KzRYejc4ZStNbExMQTd2Y3JjUGJCenpiQSttdGpqZWc0Ymw0YkhyYUg5Nm1JOVZFdk1KcEpZRnhaWmJlOWwraUE4dyt4NlZ2c3NuWFZjOUxScmt5bEhmVXlOdGUvS0pKMkMrSmQzVEx5RXE5K1pTVFc3c1FlcFIvVWV1OFlLZlZ5R203bGIzMW9XdHhJLzJxL1JFUlBCVEdUa1YwTW5POG14RmxpaWQrblpEb2RWK2o3dTIxblBDYjNlN2xERXRVdmJibUpkYzNTMituRTdvM3A5czE1TmFYM1NkVlphNlNmcGRSQ2U5Y3d3QTQvalQrZ1VYVnRUWjgvTjZQMk90bXFqWGlDSkNMK1RBWngxWnRXR2hGWWJtWnJJU3R6OUNMUCtwbGpNOXNVa0dFdHFaZlFaaDVjL3lScWFvajJoczliYnRGbXY2WGZ0eWJHM0RNbUwyVHA4WEp1eCtnOFk2ek0xSnVZbXpXWks5RWtyTzZyeFVySkpuN1dyTWlzM1l2M1NjZDRSUTFZYkp6bGwvcGgxbWJQM01SbWpzZkdWbmM2UWE2MlJ1Rit0V0w2NXZKMDY5cjZzaDd0SXhNT085bHFObkxkcmFDYjZaRmk1OVE3Vk9mdFFZTS9sV2V0TDJ2ZmNqNTRhbkZoZmJXMitzNFFGK2xiZVhjMGU5YUovamQ1c1RxaGVxOStsZEJEYVExMklESGdxUHJVTm43dFBMNDc2MXVocFlzeUhlQzhUTVhpM2hWUG5pMHlKR2ZwaWx1Q3pQc0R2NUsxTlJ1ZnNoZkVhcmwwMXh2azNNN3JSZWpQZkpYTUFzZk91U2V5RlZmbVN4dWVXNU9WMjc1S29LL3ZMVDA1bjdLU3g4OWdrbXZWSGJjTm9uNXltSW9GYnVYUCt3dWkyeXBXcnoxbWJUTWgrc0ttMmpybUUyNDdlVzkyY3IxTytrUkhUaVBFbE5mcEQ5L3pyNDBndFQxaEQ4NlgxNnZnb2MxTGljNkdvVi96QVdrZnpSZk9XWVZjUktYTXVlVkkrUVpvdjlhdzA1akV1bnN2NG5IaldhaytUSDQyVmtYR2NpbHExRS9IYU9BZEdiL3ZpOHRhb3ZWbnZiZU5lR3ozMkpzamVGenZGWWYydTlVRVJlMDdtWXkvNTBoLzA0bmZVRzU5Q2Jvdjk4dWZhNDgzR24rZzNxWDgvWmcxaEdjeW91TFBsOU80ZjlaYklXVWUvM2VSN0Z6cHF5WW5RUHNtTXF6T1I1M016KzRUTUo5NmFNenRrY21GM052RVdhZDhMVDZlU3k4WjRkN0hub3JaZEZseHFzTlhHWk84Z051YnFxS1l2YVIydDdydFFMQ01JeDBrSVc1L2ZrbFFDMlliOUhwcUNoTVN6SEl0enJoVzBKWituelpFQ05qNDRNU2t4THRwVDF0R1BtQysvaDZ3bjhhY3d0MnFyd1RCdjAvVldEMjYrNUl0N3MwdFBrdXUvcHQvalJDZU5va24yTkJEbkcxS1pWVU5jVnVGTGdiKzFPYlFZbmIvZlJyeHlld3JySFMxVkpwNTRjNjU0RS9qU3ZJZGZMRE5PdEVCalovYitoWTFBcWIzWjdMRnpxRXVoNXlscmFiWFJjMlcvelp6bm5FWlg3MjNmaHdSYjh0dW9lNWc5ckcvL0J2Ti9meFBjeTdxN3BmZ2V0MUd5N1A4RVBtekg0MFR1UnV2QklvNFdheFBYWUw1NjJFano2dVYzd2NRc2RPSWhsL0E0dVdEOFBuZ2R6dDVPdVlRUDcxWmpzOFhVdm5mMWl1VWRma3UreEhqZklmbzdrZFZhWVhaMHpaZFp4VDQ4Y3FiMXhFMDhNNTNUNXRpOHlaUTZ6cE1JMzBEVXp5QzNEQ1I2MTR0SUtLZWZMK1l4TXVQaWNxdnI4VHI2S0NpRWhPcFUrSGZ5MU5FVjFNZC95K2kwaGhZYjFWcmMzbGQ5WmFWNitxNzZ5OG5WZms5UmttdmUwc25kODZXZkZNdENXU3hMWllVS3FqRnFyQ3BTMDlVZDZpNTF0NXFsaWxXSm1rdnM2SW0xTG1Ea0l0a2g4MlduSEpXdGNseWx5U0hsVTBGcFZjUFZhTldkMFJOVmpwckMrRDdxRnZVTmRTMTg3bENENEhXWEdneS91OVVROVMxb0tKd2ZVTVBVUTlCb1pEeW1DdFJUNm1rMVNTMkhKcHQvQTlVejlwejF3RDV5K04xVEprTjVXSHh2V3dvd3B3Q3JDRW9mYWowMjIraHIvMU9MVWs2c2xBMFBsd0tXV3lKTkJnSDRSMmx5QjhxTFBZMWtsOXpXZ0VNNXNaS1pVNjZkbDB0OUhFcUhSMmZLZDZpdlEvMHNqWkZDR1NuWHl5ZzBNSlpmMTBNRllJeHRLYVJ1bkl5WENUd255aVJhSnNwMXRzM1FxRmhwRER4Y01oekdRcU02MEJoSFJwVEcyMUVESGJyZTBrQ0xnVWdwY0dyTTVVb29kR2hVckZUSTNNYlorYmswd2FIQ21KeDRtdVRRUklldXN4UzlrdlVmSFNNekYrOWxMSDB3ZEEwMG1ISlhMTDZiREhISXZmckxBSXRNazdWMXVLNTFLUEg3a291aFNkOHFqQTBNN2RBMnduZ0QzZ0V6ZUdjWVJpNDczTlpjK1pVNEY3RnpTT1A4ZWlIRi9MdGdaZDJnZEtSbDBkSUxTcmN6U3JlMjJOZGFvc2RhM2pYVzdnWllxL05hcXh0b05lV3pVcnFna3hId0hNa2VwMXU5ajVScGNpUGwyNkEwdVVkbVVYNUFmc0xvQjJVT1BCK1duekg2NS9JTHVQMVNub0RQcitUWDhKa1A1Y3B2b0tBOGlRL0p4OXNzUk51TG9IejVuZnllK3Fma2FXYTBCTXFYUDBCNWVLT2xsSitCOHVSWnFMczhCMlhLTWloTGxrUEQ1WGtvVzFaQUkrUUZxSWU4Q09YSVNsbU54RFd5RVE1L2xyL0FvVlMyVTM0VHlzTi83YWE4Ui82SzNIZGtQN281QUFYbElCU1FkNkdndkFjRjVHOVFVQTdKKzVUL0RnWGxBeWhQRHNzeHlzZmxZOG9ucEFwdTFYS0c4aWRTeXp6cjVCenpERU5CK1pjME05dC95eGZNczAyMDlGQ0N6OHpCWjJaTHZ1cWhla3NmRlZDNWtvbm5EY29ndk9nSXlWQWoxU2pwaVY4Y1RibEFGY2dvVmFnS1phZ2FweWFLSCs4NlJYcXJxV3FxZEZVM3FCc29UMVBUS0JlcElobUc1NTB1UTR6dmxWN3FUblduOUZNejFBenVNOVZNN3ZoZTZZYnZuU1dEMWYxcXRxU3JINm9IcU1FUFMzODFSODJSTVhqallpbFVENnVINVZwOGY0bU1VNCtvUnlnL3FoNmx6MXlpd1dnMVQ4MlRzWGp0eDhUNmJXVGh0NlhiZndFekxFcU5BSGphbGRSSlRCTmhGQWZ3Ly90YVNpbWxyQW9xWWtWRXhJM040b0k3SUx1bWFZd2hKRkJaVEtBVVExdEVSZFNLVzcwWUR4NE1McUFZWTR3SDQ4SGdFZy9HZy9GZ1BCZ1B4SU14aGlBeHhoaGpqQW0rZVF3RzRvRjZtTitibWRkNTgvcDkzM3dnQUJhTUdNYWdpa3VyWExCNTNINHZWc0xJOXpFeHdUbkFCQ3NTa0lwMFpHRTFDckNCejQzYmFrdnNjT3h3dXV4d09uZFYyK0YxT1N2dENPbFBFU0lSZzBRc3hCSXN4eHFzeFViSlJFUEJEQnVTa0lJMFpDQWJPWENnU004WkVJVll6TUU4TE1KU3JFQXVDckZKenhtNWFoem1ZajdzeU9RTzg3QU9tL1ZjQkIveFNNWUNMTVl5ckVJKzFtTUx0cnJkSGo4RnhaQjRVYndzRG9wM0d0Mitacm92UGhTZmlzL0ZsK0xySm05SE83MFZSOFFQNHFqNFJmemUwdWx1cEYrYUNxSkp0SW9KWW9xbm85R2owc1FNTVZ2TThRYmFPNVZETEJLM2kyVmlqZWp5K1hKeVZhM1lJTGFJSHJGVDdHYnpWSy9ZSjRiRUMrSWxzWi9OVjRQaWJmR2UrRUFjRnAvNUF2dDg2b1g0U253anZoUGZpeDk5Z1FNK05TWitGWCtJdnpVTlNqVHoybEY4MEg5RWJkM01ibFFZbXNOUVRkTXc3VHc2REkxaEdCR0dwakMwaEtGMUZtUDRxODNnNzZhQXY3WmlWTUdGT2pUQkF6OTZKa2VlVEpOalFIbjZUT3pWNHg0OTF1blJxOGN1UFhici96YW9YOS9TNDAwOUR1cnhPdGZPNG4xQXNVYnNSeHRHTWM1WG1iQ1FpU0xKVEZGa29XaXlVZ3paS0pZejZZaWdPSXFuQkVxa0pMNjI4K0dnUWpZTkpxcWdTcXFpYXFxaEJxNmN5bk5uNGIxQjhaalo2QndNVkVRZUNrblVPamJTK2IvblAzbi9JWHdUeDJXMytzUXFqQ0daTzRuN3Q1ZXBIclMzejN3djd2S1RNL2VrWWxSZ04vZllTMzcyR0FYWTQ5VEZucUNEYkpDNjJaTjBpTzJqdyt3cE9zS2VwaDcyREIzbHFzUTdxYmFLbXRIS3ZYM20zZ3c4dmtFZXgzNWM0OHdBaG5qOWFHdm9MSWJ4Q0kveFJGdTlsTU96cHppV1VEa1BlVDNWeTY4VXRWRTczeWRxSlovTVJUTFhPc3UxcnVBcTF4dmdPYnJCOHpVMFZVdXJ3elZLYVNlVlVUblYvd0doU3UwREFIamFZMkJoMG1YOHdzREt3TURVeFJUQndNRGdEYUVaNHhoU0dIV0Fvb3hzek14Z0FpakhEc1NNREZEZzYrenRBK0w4Lzh2ODY5OTVCZ2JtWDR5R0Nnd01rMEZ5akYrWjlnQXBCUVptQUR2VkRnSUFBSGphclpSM2RGUkZGSWUvMzh1Q0lpSUlCQUtFemV3aW9kZUVrZ0NoU0JOUmVpQUp2WGRDRnhXTUJhUkxyMUZSUVZIaFlCY0ZzWEhBM2tWQU1MdllHeXFJb2tqV3UwdkE4cGQvK002WjgrYk9tWGRuM3Azdkd5Q09XUFBLSTZKUG9rV0t4Y1YxMnVJUy9CcWJ3N2w1LytHSlUxME4xQmlOMEdKVjFBQjFVM2YxMFZMVlZFZlZVRXVOMVRpTjF3Uk4xQ1RsYXJLbWFLcHFxYlpXYTZYV3FMNEdVWXppWE1URnR2WWxsT1JTU25FWnBTbkQ1WlNsSE9XSnB3SVZTYUFTbGFsaU82NktYejNVU2oyVnJmNUs0Qlp1NVRibU1vL2JtYzhDRnJLSXhTeGhLWGV3ak9Xc1lDV3JXTTBhMXJLTzlXeGdvM29wUTcyVlkvc1BVb002TktRUFdlU1N6ejNjeGQxc1lUTmIyY0dUUE1ianZNZytYbVl2Qi9pSUl4emlNQ0dPYzRJZitVbVpXcXVSR3FWK2FxMHM5bWlvaG1pWUtpbEpxNmpHUU5DeWFKazBXdmwvRlUxeDh0bHJFd1Zxb0hyYWNHRThYUzFVQng5WFVKTkJaUE94T3FtekdpdEZEZFZJSzJ4S0liTTFYOFBWWEdtS1Z3WDFWUWVscW9tV0VDQ0ZKRkpwU2x1dXBEMGR5YVNmZlpIREJDWXhtZTJxckNwS1ZGWDU1VlJkQVNVcmlDOXVrODNKcEkyZFF3WHJsYUlCYVJabE01anJtV09yei9HcWVNMjgzZDUrNzZoL3J2K2tpM01sWGJ5cjdQd3U2SkpkUTVmaTBsMTdsK3RtdVFWdVd5QVlXQjVZR1N3YmpBOE9QdU1WUmlKbkk1SFlyNVhDV1pYVGJXODVET0VHTnFtTGwyQjVkM243dklQK1BQOEo1N2tTcnB4TGNJbk94ZkkyZG1teHZOTmMzci95cWlpdklxZWlOWVBJWGxzaGNMNktoVE1MajUzdmh6UENhZUhVb242eDhJRHdoRkFrM0Q3c0MvdENoYUdkb2JhaE1xSFNCYk1MbGhha0ZpL3ZiZEhXSWk5NldwdG83VHByZWN6VEFTOGpPdXkxOGRwNVhiM01jL204bmw2bWx3My9peWYvY09MdmZGOWcxV2VrUkVsYlp5eXROOTZTakxRNEkyYUROaHAxaWNiaE1zM1FUR012WDFsR1JYVk5sODk0V3FnRldxUUd4bFNTMWFobWpQaHF4bnhUTzQ4VTQ2VmpFUy9wNWtCT2pKbEJaR201c1RzNVJrNnVuZFo0OXBnWitlYkdGck5qczVHNzFkellFYk5qbi9rUnRlTVo4K09JR1hMSTdEaHNyQmFZSWNlamp2QUgzeHUzMWJuWEdMaVRaTzZqRnZkVGx3ZXB4MFBVNWdIcTg3Qnh0NDFtUEVVakhxRUpUeGlGTzJuTW83UmtGeTE0bGd5ZW94VzdqYzBYYU0zemRPRTFPdk1LN1hpSnEzaVZEbXluRS91NW10ZnB5aHU4eVRXOFJUZmU0VnJlcGp2djBvUDM3R1RmcHpjZjBvc1BhTTdURE9BVCtuS1EvaHlOK21iVWh4bktwOGJvTVlieEdTUDVraEY4d1hBK1p5emZNb1p2R00zWHpMQ2JjaW8vR3lVL01KMWZtTUpKcG5IS25EbkRqWnhsTmpjWlNqZkxJMDlpRkY4eGp1L013R0NSZjhubVlvQlovTTVNVGh0bnZ6R0hTTXp5MUpqdlRleG02YXZXZndMTnVpb0hBSGphMUwxNWZGekhjU0RjM2UrYUF3Tmc3c0VjR013OXdBek93V0FBWG5na0FaQUVRQkE4UkJLa1NQQW1vWnVTWlV1V0xGTUg1ZGlTZk1aT2ZDaTJ0WkhqMkxFdGY1YnRueE5sRXllK3J5UmVSOGxhRzhmSk9vNmR3OGxubS9JbERyYXErNzAzQndhVUZPLzN4MGNKMTd4KzFkWFYxZFZWMVZYVmhKSk5xKytoWDJBL0loSUo2ajVDS0xuTUtLV3ZKQVEra2R5U0dpd0UzUW4zSnZxR005SytGejRLSHhOR1ZQajJDZllNMFlpREZQVmVCNVVKblNjeVlWUm1GNkNGYjdjaUFSUS9YU0RFYm9ObW10dnRWcld1UW9tV2FDcVgwTHdsU2FYZVIyakgvVHVxMzkxNTQ3ZHZZczljbmZyYzUyaVM5bUcvQndEK0pZRGZUb0traDJ6V04yaFVrYUFIaVNpeXBKeFhLV05rbWZlalVWbW15NFQzMVJYcTdJakhRajFkUFY1M1I3QXoyTmRqMDBJRmIySWs0UGVwV2dDL3B4STA1UytOakpWSHN4TC9ua3I1RDlESzZWZHZMbTJadlhTKytrZTA4SWxQbExac3lZMVBUWTMvQ1h2bTNMN1JmWDd2NFkySGJtSkhQbGZ1N3k5WGJSdUhoemY4RFpDcHRQbzgreWo3SWttUVlYM0E3NU1sbVhBVUpYYVNNQmJkTFZNZzVrbkFMRVlYS09rS2VqcHRLa25RaEtJRkNwbVJzVXBRVlZQSkFWWWUzY0pLSTRHZ2xzMm1rdTNNNyt0bTlQMWpKOU43aHQrME1ILzU1UGo0eWN2emkyOFoycHM1VXlrZG5zeGt0aDQ1TlZpY245ZzJmdktodWZtSFRvNXYyN0E0VU1wTkhSc3JIOXVldzdrNVlNeE5HK25DdVZGcXRBTGM2TEpNT2EzYVhZUzRPMXhkN1YzUTBKbFF0V0NoNUU2TWRBTUM3U3psVGJsTEkxc0F0d0YyZ0pLNUI0NlZ5OGNlbUpNZWVXUnczNlpVYXRNKzlzelk4ZnRuWnk4ZEcyTUhxcjdzMWlPam8wZTNaWkUzS085L04vVHZKSU42RWZDUlpDYWRCektZU01peXNxeFNSZkVyd0J6UXl1bkdmNW9XUVFUODVuOEg2SlhxZzlSUmZaN2VEN1B3NTJlK2ZNNkVQUWV3N2FSWHo2NkZyUUF6K0dVRWF5ZDJOMmU1Y0EycSt3RDlXZlYrYXF2K0hDQis2VXoxV1lGdmFmVUsrdytZeHl3WjB2dTlIcVl3bUVXRkFKL0o1MkVpK1JSR2tYYmtKTFNQa1FXM0o1L0pwMVV0V3FCSXE5WnpDRHhXU1pVVDdEOUtSMTZ6QytkcC9NUkRjL3ZmTVhJZ3ZiSmg1TkJrT2pONXVIVGdsYzYvQXQ0NE5QZkE4aGhNODl3Y1RMZSthZmZBVUc3cWVIbnMySFJ1WmZHY3dIRVBqUHZkbktZNVBRMS95eEtWenpPS1kxWVZKa2wrYVMwdFlkendsWUx2ZSs2aTE5OTFWL1YzMlRQVi8wbHpWNmRvc2ZvdEFSZmYrZ0xBbFVpWEh1QWtaTlJZdG1MMWM3WW91UmZ1d3ZVcDNna0EzNC9BT3gya1I0OXBLcU5JTDhaZ1ptRWVEQko1TTBrSlZqdUZCWmZNNWlxQkFDNDVkNG1Odk9QZWs0L0diZ2tzVEV3ZnVJdTIzZmZiWjQvMTZsdFA3S0VmcWZFT2p0TkJNbnJTcnNKYUFybEMrVGhsaVRIbVo0aVpnemc4SHJlQzRnUndBNGxDVTlRTjhJYmVXbjJhTHIyMytwY3cwRCtsZXZWajFiZlRYZFZQRzNDM0FseUZ4UFdvWUVOSzJRbUptaUFWb3JqZE1rZ0xUamMvQUxzVFJ2d0hGOFM3VW9iVEh0NTFxbFNDVitlUlRMN2RFbURtUjRad2UyVGd0SXdFNUM1NXZVaDErc3d2Ym4zUDE3LzJub3NqOUNkWG53T0VEdE1QWHAxaXlkbzRuK1I4M0sxSE5CaVlOVXdESllEWWlTQzlKU29CT09wTkhiaVQzc3d1M2xoOVBic0kwR1Q2QWtCelhIMWV5T05SNE9HZkF3OTdTWTZQc0JYYjV2UDVOSUpzWk5wdXBzRWlyM0h0RnNaK1hsbCtZSGIyZ2VXSytmT2UxSllEdzhQWGJVbW50MXczUEh4Z1M0b2VueE9TYWM3OE9YWnNLb2RDYUF5RVVHNzdNVk1PdllyUHBSZFhGdXdPbE1rVVpEZWdaQzVYUHRZMkp5RWRMcWUzellzem0wNW9mQnFFMUU2bDNGNVRZQitnRXpkY3VuVERaei8yc1k5T1RrK3haMTU5NHRpcnExZllvWC9aV2k1dE5lbndMVTZISUJsRXFUdzQwQVVzcE1yUW84VG1GVXAydGFaTU1aOFhsQUV4cU9YcTVYSTNVNEpqWStVR0VvMVZjdXpuNDhPVEJ5ZlQrNHYxZEtwZVhZakU2MmtWS3ZvVzZmSDVoNGRuTisveSt1dm85ZTZqaWNNajlUU3oyeTJhM1FjMGM1RUFHZGZMTnNvVUxvd1lWZGg1M09vTXlxbkc3dHJSVG9pbnN6M1FFWUJYWE81QXdzWVhoYkhqZVZOU0Eva3E1eCtjbTN6YjVkZDk0Sk9mL0dSbENpajR5dU5UNXdMVnY2V2g2Zy9Zb2IvZlBES3lCWGd6Qk92N0VQc0M2U1Y5ZXM0SHE5dFBHWkJ0dm81MHNDSk9BdjFpMGtKL3BwQkMwbFdNTlQ2YXplV3kyZkxvbUNVT1ZiOHZFQXppNW90c2x3MXQzWDdUcHVuREc2YnZQM0xrc1RzWDNyUnA4K2p0R3liblN4UDNycHpybmIyd1pkOWJ6eCt1REU0T0ZZcXVRT2VSbmNkZk1WZzhrdThkTDJUNjdBSFA4cDZodlJPSkNiR0d1b0JXWjdrT2t0QzdaU1NJdWNPWWkxcW9IU2dudk9XRVB3V3Jzb3ZOLy9BdWR1RENoYXQvd0E0QWpCa1k2OXNBaHBkRTlKREUxelM4YlVteGxMZHV4V1JCZ0xsOXBpUjdXOS84TGRzZmZ0OWRKL2JzV2I2TEZuZmNzVmo4dlRmUk4xZHZ1LzZXVzY2bmJ3YllwbzZrSW42d3JKdVhPUFNoRXRYRHBVNkNvdGlnTkZEOXovdi81bi9lVy8wUkNKOC9adHRCNUZLU0FXby95UGR6Z05PbXlWeitnREJFWkdWVEFIbmNuUXBJL1VSS1FrRHd2NVNTNk1iWHZQUFZGOTV4K3pzdXZQS2RyM2tuUUZ4bGxIOU5NUy9BZFFCK0grZHlEZVM0MDZZd2VZMWc4M2lFRkNxbFFBb0ZLeVdKcHFTM1AwSmQxVGQvOHVrMy9KSjJ2T21MOUFhNjd4ZS9xSDYwK2c3cU1jYjhJWUJwSXltOVI1T3AxR3JVTm1MemVQaW8zV0xZYmhxcC91c2pYL25hZzlVZkFyUDlIcGZkQjZzL0FuZ0pnTGVUeTBuUUpWUUtDQUpJWUVXWWY5VDUrR3hKb05LWU95QnMreUE1K2M1UXBncE1PczM0RS9UMTFWZXo3dXJkOUxGRlpwZk9MVjc5bVhSdWRWWE1qL1J1bG9YMVJhaEd1OGc5NUl0a2cxNXhDbTFXVVpYTE9FT1hHL1JhelZoNWxIYTB1OW9jZG1xak5yZmJZOVBTQlF2bWh5MllNYklFTUtmMHJRSm1NTkRaSVN1ek5xcEFTMFZkYVFuWjFRWUQ4N1IxdWJvczZIYUFUb2dGLzNFTGZwakRuOUczdTZpaVloOUFHMVZSTDlzMUJqdGFJK1kyQTM0YndHL3p0QUhIZExSYlBUanE4WC9DZ2g4bmt3Qi9wejR0OExkUjFhazVKTUJlYWNUZGJzRHVDaUgyb0lPbnVsSmVkMXZRRmJSNmFPTmpFTGFEZEQvWEh6eGttejdwQVFtRENnU1JiS2pMMllncTI5Um1mUkhISXhSR2R5ZTgyT0VXL3h4YURDd0tVTzJDSlg4S3ZoS1daY0V1VlBmTi9Ndm5kdjZ5K3RTTzZqOElBMlBsVDg1OWZzV3dNVnJNZjRnTXcxZ245VTNXV0lHUVpBMFp0WG95ZHJRQkZ6Uk5VdzMyUFJic0tKOG5zR01zMkFTSmVQN2xRUWJhclhheHJ3UHR3aUNlYnRHOU1ZQURqU1VYMEZDYWw2aEU1K2FlU2kwZTF1T0FnU3lwc2dHWXE0aGM1VUhUSk1FV0lxQWptQzBvb01ETzFqV1VGcGIwVGtLaUVlZ203UFpuc200YktwU2daNmtvekV1bTdZSml2dEpnekEwUDlrUmNZVnRuUnlFNHZLRi9lSE9kYlJlZmlIWkZWYlhzY0k0V01sdVRwcWxuMGVvbkZxMTZPSzBXOWQyQ1ZrNnFPV0M5YUhVY1o3T3BKNG1xaG5lL1BONXJzWDRpNUtqb3F3dG0yMFUxRy9ZcHpZZW9NZ3N0YkpwaVc0RjNOS0pxcmZtZDBtUlBMQkx3dVRzYVZoTHZpOXVIbkw4MFE3NThWUEJYd0svSXdsYVVGUms0akFHSFdWYWpXbWMxTXByTnBGUGhrTmR0MTJpU0pUVXRZZkNYZ1AxK0MzYVNQQXF3NS9TZGFhcklCbncyYjFOWml4NjB1aDVTS1VaVHZhbmVmQzZicWZWakYvMXcyOGpCYmR3SytZTHVML1NoamF2RllHbDZxS3k0cVNUTDgzTlAyWUhmK2xCRGtkbnRZSjVUNVRZZ2xTUkw1NGltOFhtSzdyYlZkUm1aZThvRmJ4VHdEVkJ2THIyVVY5Q09yR3N0MzNmTjVrdExlcENTd2Y1OE5ob08rRHBjZHB1bWtncXQyR3VHdDJaNEEyckdDWG9DS2dQU3V0YjR3Ry9zY2cyVXAwYXptd01aZDY4djFwT01wMFBUcnp3NDFObytIOXNtalVyRmRHR0R6MXR3ZFFRRHZzQkpiY3Z4MTh5MHNOaHI4L200TlovaDJuektpaldmTUhqbE1rNHFrLzhyODJuMTg0VFZUemY1RmZRRFVyakdrd3FvbVV5UlYxcXpaQm82Nk11bkJ0SUROZkEyQUErd3VkK0I4NlRONE1tYnhONFJoUm1qODNhVEdVR2cycHA4RXBvd09pT1JqblpLSTRsSW9pZmVIUU85TnR3UnBpN2FsblJvU2JGM2hPQWJXSGVrRXpTRFRmcUVRaWtnQndRNGJ3ZmRtQzBMTTFUVHBHV2JVQWs4YmtLNmdqRFZYbmZDazREWE9oSzRhNkNPbkNvMytEdjhzSVA0VFovSHhhV2xlcS9IdTk1bCtqM293RW5hWDNOOWZQN2tGK3A4SHdZTmR2TTFiemZXL0YxQzdvTUVnYzBFRk5MTDYzaEViTUlqUWluc3lqQmsyb2I3RzhqOWJLRUc5OE1XM0JnNUNIQjM2Rk9ob0x0VFZtZnQxSlJTMTRRT2tLbmY2d3EzaDYwZUhOaERIZTd2dC9wSThqNkFCOXVwcHRKNWg0MjkyQmpzb2hjWDlPTHl1cnlvWVZqOU9KdjZlZHpxSjF6clI5V0FBVFZWdTR5ZG9lYjE2L2Z6aE5WUG5Hd1MvZGlwMW1aelNrQXhkVDE2T1VRUDRTNmtXRTkzVnpxYzlubGNvZmFRMVk5cjNYNjZ5ZWVoSDEzZlREUStMZXBMbUpRbTRHSlNXdkJUaUF5STlRcGpBREtSYXhESlZrZWtUaGR3VlFOMEMvWTlGdXdvbndmQUcyRGpwZ2RLMkg4RnN2QnZyQmE1ZnlPQVZqZ3NVYkJaT21GbjdZQXRRekpNREdqblIzalNLUkFCWGRKQ0pzVTE5MGdoUTlHTFF0SFk0Z0s2TEFRMG02ZytldkZPZXVQRitabk9SSnZEMjlZZEJkMy82cS9ZTTFVNy9ka0xxMU56c25TRXNVaGM5Ti9GemtEL2NYS3YzdUduaWhhQS9aMmhMbUZxU1BtV2c5TmdjSm9HZUNrSzMxZ1NLbXcrR2FzcDZtenEyVlp2YUVKbmdnN2ptUnpYVGUyb205WTVORk10bEtjNko2ZlVwRHNaVHM4bXRlbi9EektRKzFPNXJISWFzdW9Sc1EvNHZOeTNXaG9wRmtCa29RNnNVUlJaMS9LMTl1YUhCdkxsM2pMM3VXYnNXcTVRMThmalZoOWhzNDllZ01qN1lVS1EyRUdRVUs3R3I5OUhQcDhmeUErNHZhSVBoOVpyOUZIOUx2cUZyVDdTRkFoSmJ2cVVNWXk1cDJMQVJybHJRTjROREtRdHcxUkVOT0NpdE5VUzE1WjJ1aVVxU3pwNmNEa2VOZ3NQUHRZbkxEekVucjFWMzJJZ1FqUWdKVVV4YzIxQ2drSlU2aTNWRTVLUk52ajJBdmQvQk1sR2ZSd1BiWndxSXc3Z0p1SUEvZGRoT3k5VFpLZzJPK05jVGdoeUVyVDN1czEvTGkwdVdLa01CaGg4bGJpbkJYZ3NVVTRzNzkrUHZ1ZTllKytxL2k2OXZ2cTdqT3hmZ1gvN3E0UU9WTDlKMzNZempJLzd0dmxjdGhsemVSdU1iN3V1dDlnUGhPZjdndkI4MncxcjVVWDJnWjBBZFMrWG9TNnhKNjkrRU9Dakg1MUo3REs2dVMvenhXd2NqRkFLNnFKQ1pTcURORW9LR0t2ZmdUY3JuS2NGak5qcXd3QURaRnRuaDkwbXMxblFUUUVRazFicUlRRVU2bklxSHRYRG9ha0lEV0I5R3lCczR1TVZzTUljVmxrZlVTbmpCMGhNdXF6S29DQ3h5NGFYbEVOVDRLZmlWSndPVUdjNVBNMkE5ejJBTXNUNVE4Q0xyOTRrNENsVXNzbGdWQUpFZ1pjcUlIbmNpRmtvNEk1Nm9tME9wVlB0NVBEc0FoNlpoYlpmcllQWHZYb0Y0UFVCcTB0OG1Hek5JT3VBNENBQnB6K0JKdCtvbzNsbzlUakE0S2RST0R4aURVNnVHNXhOQWNyWFNJVzRMS3crTCswQS9qVGdrSGJxaDljV1A5WG1aTENsd0Jyc2dqWG9sYW1wU1o3RUZjRlZTVDBvUHVYVTIyMHFzekdHY2hxMkgyOW51MTFyNkd2MUY5QkRtdStIQXVjb254Y1lOK0NNT3dBNy8ySVlVNUplN1NMZjVmdmVBYjNEdE14WnZXVWVNSUNzTWNpOTlZYTQ0ZEZhMG1GSkFMQUEyT0RtY1VlTGJXVGhyaldieHhxRFcvRHhYOERJZHRUeFhtVDFONFJONm9GNWdaSEFIdW1tYkJhR0M5WWNXTndTTjdRYXVBY1U5QzYwcWh5MkdoZnl1Y0p6b1NjNDdIWmpIZjhid0I3WHl3QmJ0bWt3TnBESllFRmV4aE1yemdTTlowYXdhb1B3bjllYlNXbVcvZ015K04zc0dZRFpJV1F3K1FFMFB2QnBoeVp6MTZJUXdpSGhZVlQ1Q1pIUVVXQURqeWhBVlQ4TUFLeW0wL1V0REI1QS94MTFVcWZIQTRNd2JQYmRlRTdFK2JiVGtCVWZnVEgwZzMwTGlndjZnZVRMdGRNajQvaUNVcjRrWVp0eEF4dWtMSDE5Sy9zR01lR2t5QlY0NzZJd2ZZTUUvZmdTYlFZRWxuRWNIa2RNMVVKYUJyWU5ORGJSdTNCT2dLRG4xK0FCWm05SFMxeUFobHM1RFRzTkdqNkhhMGlRTHRJRUJsZUt2QXlkUjJUb0xJU2RTZkxwdFgyMTZLbzI3bHBmM1RSYS9hWTQvVkZoRGNpR2dLd0hCVEJvZTV2bXNYa0VMSTNEZ3NXQWU5TmhmaGFDRVFiUUYvcjR3YzZuODYwTzhGekU1ZmZ6QTd5eVZxN0FPcW40TmRDNmJseGV2dXNESDZCMy90UFdDMXZwcmRWL3ZIamg0amN1MVBUMkovbGNld3hiN1cxaXZkc2tmaDVITEhPMXdZSHR4dE0rdHdvYnFBWGovUmFNSkxrSU1NYjBVaHZZdkJ3T205ZnFETjhHU0U2bjB3M2J2UmZoMlF4NE1GZFBjdnA1akxuNk1TQTcreWtESlRGbndUb29qZHp1YStCMnlad3Jld3VjSDdmNmlKQTdBT2N0K3NZUTROd0dleTd2VEpvUFVua1c0R21xekhVMDdyQnVBSnpLcE5JQzkxNkV5ODhnT1QyOUJqMC9BWEFMb0dtTDRWUGxjcU5tY3NwWTl6NVF3RElxMTBpSUJlZkRGcHdZZVF2QXFlaWpvNlgrb2l6UGdwZ0NZREpJcDFaNlRsL3Y4R0R2V044WXd0UzBUQVBNeHkyWVlRNXpRaC9yQTBCVU9GWnducWg4dWJYMjFOczcyRHZvRGlCVW5Lb2F6Q2NzbUhGdTY0TVdwVkhGcnRva2RGUzF4bkdzM05lN2FVTlpIOU9IQm5wSCswWVJxa1BnQ3BLM1JJajBNK0Q3RUNtaVpNWWxxTUI2MTREb3hxR0hYV1dLUXBadDRwQW0zQVg3VHJLckdDNEdBNmdEdWRxY2RoS2lJWWNXS0NUTWcweXdRQUlCOUpLRFNwcndad3dkMzNKeHZYbnVFaXI2bCtiWStlcmQyUkhiVXgvVFJuTDA0YXR2R3RpN01abmN1SGRnY0JGL0xwYVBYNXFidTNTOHZKSTVYVGszY1RhM2NpRzc3V2lwQkxwL2RodllBRWRNRzZDWkYwSmtSZWhMS2tWU2s3V0VQbVVSdXRoYjlJdlp5eFphd1VxUWR3dVpESXdBcElZSlhDZE13eTA0aXl2U0ZweDdMRGhSemdQOFhBa1VaN3F1NHR5RUVZK01NTS9iSXlRSDgzWGYzRk01MUVOY3NDTVdDejN4VHFZcWNvUVNSWnFQOEU5WjA2ZEw0Z1hjQ0VCbG9ieEhtTkdUeHJGYlJJK0x6UkVmbXlldTNDZzFqMTFoVGZmMTVyMzVUb3hDQ2FZcWVPUXFISmVWa21hZHRlWWtYeUJJaFNkVEdjM21LRnJTVzlnVDV3OFhTM2htUFhhMnI3aHl1Si8vWGpsYjZBa0hhRGt5bWNMVGEvcU5jS0Q2VmJCYThMaGZ1WEhvMGs0OHVZNUh5emNNM2M5LzdZblJZdjlpRDczVDQwTlg1c0RlbnVxalhqOC8rbSt4M2lKY3RvTE5NZ1owN2dNWncrYkxUZUtGNG5sWXF3a0FNWk9ybjBkK1JzNzVJV0RJbVJWeEJtWVhwK1UxTDVWeGJtNnZuWnViWjJCZ0tOQkl1Q3NrNHNSb08yMTNCNUxHR1ppQS8zNExmcExzQVBqNzlEMWRZR1JoSDJ6ZVdlOExNM3B4MUhveFR3ZENJZXduMUIzcWprVWo0WWErMm95K1FON2Z4K1Y5d0pEM1h3VUlyL2lrR0lvUTk1bDF4OUZvWUNiTmRvYUIyV0xZUzNwbzNaSHplZU5uLzlKN0FKK2dRZHNkNUV1NG4vbEJqdzB3RVFmUVNwekRvamdsV05QdDZjOFUwc1plSStBOVljRkxrZ3pBMjZaUEZvRVBMSmhTYlk5Y0E5VmcrRUtoTUZ3WWR2c1FOaGZBR0tmZzVIRUtrK1F6ZXRDS1U5Z015dm9JTU5ndzhKTmluRTcwZ2hJRGZIWTdrRVhTYnVNN21YS3VaVGZHNFVRZnZpREoycVdYOElaZWFHaXMzbmV0MXFDak9kT1p0RHVXS2FSc1d2ZExESnRZNTdRaWU4MWdpdHpNbVUxdGEwOHNYblBOOElyQlBSTkpWbW84dURpaFZlcDQ0M2VzdVF6WDVsSlc2dVp5bmMxMC9ibEUyTlYvd0xtMFlLZkpSMkdHbDNWbkhkL05QUlhoSjV0clFUWXFRVkZEQ1dvOUFhQU1XUXphR0VmU2dUR0ZNcnJTRkpqQjh4Z05ZbnJUd09aU0Z3eDNSeWZPbTdkVVRtRklpZUhzU04zMTZMK3krUisrNFExM1BVcGYrOWNYTHZ6MWtlcHpOQVBqNHJDNUxBa1ovTDlSbkFjNCtKbUlyVTQxMU5aRXNOanRsTm83N0dpbk9Cdk9nUUhuVlFmSHVadmNxenZjZ0hBbnQ5MEV1K2ZCVmxVVjZYWUNocGFxM0lkdUlVVStaN2ZWNEd1bU5kR0xUWm1rWG5yUnRrczZlcis2U2JjYitaZWZ2WGViWVRXdDJWTkUyeVE2bW5rd0hCY0JPRnNhMld5RkhSQzZReGZJeExOY0pvWU1YdmdZUE5ndmhHRlViU0pUNDl4M0dYT3ZyaUVtTi9uYW5OWXhyVEQ1NnVQVTJtRHJIZFdIc1V2UUNXWDA5akpKTWF4K1ZSamtSdFNzdjkwUHpkdlNDYmVJdHlyNVMwYTBtcjhXYm5YWFp4dWkxUzYvK3NUeHV4K21mL1hEcmFPak9vNlR4eDd4ZmF6TGtMV1hEYitVSlFwckVVbW1ydXoycHJ4MXVyS0E4V0VMUm95Y0JoZ2xmYWduM2hXcTE1WFh4RFlGL0xHSVB4bElJcnlhbml6Z1BXN0JDM040Wlgwa3NFWlBYb09iMysrUCtDTmd2d05FVTBjVzhKNnc0TVhKTHFITDErdklhM0JMSmdMK2ZEWlJUQmFqWVg5UG9BY2hPcHB3ck5FdHhOY1Uxd2N0M2JJVmNpRi95Q05HbXkyMGdwUGc1NVVnQTJwNjVSck1rUEhGK0hycllOeGp3WWh5ZW9ITlkrbVVhMEEwWThKbDBNeHFGNDlEUzVPRHVxT05FdVlDOXNYMWpDNmppQUxNeDdWQjRjTkNlY1lsVzRKeUd4MEIwTE5OamJqZEI1MzRNM2tScVF3S3kxclBVYllwcU8yZWxZRmluU2NwMi9mZ3U4d0l0MWMvNGVzZXE3bVVrcHZqMHU4OVdoZndWamMzUDdIbzBjUHBBVmFNbmFyb0wxTEJJdEkwNVNTczEvRHUvOUs4MTNnelFzNEtXWnJFbUFldVV5WmE2SlJyZWtHenRYNE9lWHdkNTRPSXNRNy9BK0FPNmYwdW04Smo3VUEyQWlCNnlZaTVRMDE5V2E1Ri9ub3c0RG92OUNjQjZ3a0xWcHc4TFhBMFlkbW82dERza2tKVldKTU5NWHlSY0VkN0loN09SREorYjN0WFJ4Y0g3RFI0dFJuSEVIbFMrQmtzSEFGQlFOUEVVYU9xYWlIWjN0N3Vic2ZqRFFCbzdMY0MzdU1XdkRENXVyQ0hPMkNrQXFZUlNXYlRHSmRFRGJnQ1JGKzd6KzNqSU8wNGVDTzI1a01jeDVoQngxc0FKa2hVRy9yN3VFTkZJcEpNTGxIVFhjdVdMUmNhYkhFT2FxZDJqOWZ5SlFsNGoxdnd3bVJlbkU4NjBaL0lZYko1akZpU0ViQUpGWS9BVkFIVjRhRFUwZW5vNUk0K0R0dldDUHNKQzNZY3JEak9weWF1SUFQc2lrMUM5NWZoOUREMndXQUFFS1d4U0NBUlRMZzdISDdRVURob2gzQmJ0YUJEQ0ZZMW42czYySklzRGg0b3JZdUQ1dmk2SExqYmM1RG9DUU40UEFhU3crczI2SHBBOEpRR3k1NkplTWlhOHR3WUdXbHNXNVJ5SGNKQkhSNjNsKzk4RnR6M1czQ1RaQVRnN3RKbjBIZGx3cFpxT3NwYTZKcUE3blJTaXA0c0hya2crckEzOVBHRTFVYzNlYitZd3pyY01lQ0V1MHBhb2c1b1UwK25NOUFXTUVEYnpEakMvdFdmMC85TnI1SW82U1cvWTNqRzNKUkpzTTh6RURjMG5XS0tHZ1o3V3dFcnZOVVRHWjRzaVJmakdMc0tpeEl0VUs0cXhvVkJMbXVNeTR5SW5tclJRcGI5b2htRzRQRFRPejhsSU1CZzc0VTEzS1lwSkVxak5pMVFDQ1pOM1I1Vm95VHMzMlA0bDkrZEtxdHFUZ2psTXRmNnY3TncrdnpoMUxia2hvbjR6a0orL056SXladHVTKzY4Zlh3Z3ViRXJNcDRZR3JkZHQzMzdZa2RuWmJqazllMExkeTBmcW42bUZJKytLOW5yOCs5ek9YTkFsNW5WWDdGUjloM2lBK3JmUC9mVUFBelA1d0pTZDRXWUxObndCRzIremNuWWJLVGhZMnArdkNSZUNlSit3cmVTSUE2VW5LU21ieUpTLzRSYm9maVk4S2RMZWp0WExCS0JSTWFieG9TdmpPR0tBRDJ4NHNaUmQ3TU1FTUJ2S29wc05LMGZIQzd1anR4Nk1ieDNjUERBNWxUMVY1bk5nY0NXdEg3ZHdWK1dqMC9sMDhtdDdLdmU2cmNTMmZ6MHNSdWowYjhLeDQ1T1QxM1B0NzNCMWVmcFQra0xRSHpRS1h3d0dqOGVkOG1BcTJSbFlzVmJaMkxGYU94YW1WaTRWOUpTZWpJd2xib3dVUmFSK3VVTks1bVpzSjdlZE9EQWtXaGtLaitZbnpreE5yWThuUy9tZDhXNmoyMUhwQmpnOUNzV05lai9nRUYvTjdCNE5NSUVadEs4MThNbzByL3VZMlorYk5MZmRQNEVoUzlFZ1EzTW9IL3RpZVd5cjlHL2c1Q2U3cTRnOU83THAxUU1zaTQzamc2bUlWUFBjZlFQRExxbkp3OE9GK2FpRjZzUEhweE00d3lrOU91Mko1SG9aWnlHVkp6NnZGZVR2NXk2UGhyNUgxMnhvMFNNOVhuV0NXc3dER01GQ1JlR0dSRDVDcWc0cTlSQU5GN3Z6b2xHNHQyUlJEU1I5T2VUR2liTk5LWmIrTkZSaWRoSndDV0piSlplR1ZqZWdQMW50aDRaTFIyYVRGZmZhTHR1SWpYcGYvM0lEQmhSamgxNk5vM1RVSUZweUUwdGowYzNMblFGYUhScW9qSUQvSUZTNXdIMlBGaVZSM1NIRFNTT25RcFRFZzlhckRTWjd0MHFOWTlrZ3JpaS9XaExoUEZBRHFUVXl0cUhTMkIwZ1NLWVNYVnFXZ3lOUWJHNC9ZSnhUS093KzZhbEE3N2VkbSs0STVkKzNlc3Uza1N2TE8wOXBNb25aRG1WT1hTa2VwYSsyNkJoamtYcEwwZ1A2Y2RJVkJjSXFId09CRlEzaUs0ZzZPOEIyTzRVMkl4VjRTb00xa1NPaUo5QllaUUFHVStLZlpsVXBNdm42V2gzMmtrUDdVSEpvOVROZk5tTXFER3N0R2JaUXowV0c4eEhiN3ZuNHRqNVlyNHduNW5jR3Q3Ny9ocExTUGtwemhDNVZFSy8rc3NURjdxQ0J3TCtpYkhyRXRrcXNzWTN1MkpIREoyVzRBSDdkMFQyRCtZL2VDZ2VBVEw0YmRaVXgrSzdaU3RQRklNS1FDMFQ1NXhDVnFDRWRBdUo2WjY1R04wN01uL3k0cWFSWk1XSEF1SHp4WUd6QzlWUDBiNnhiZkZZOVYyY2x1UHcvZlBzKzhRSjFqeFlCTmJDNzk2TlFpdG8ySUp0b0dHTEFHc1EwVTdxVklGUVhsTkVneGtYaEY3dmkvWDJSV045dlpHTDdHZytGdTJEUC9MbnFrNks1M2hzOWZ1ck9hT2ZDSjZjZE1JVWRjQVM1amxHWm84d04zenRzbE9vanlRWUJ2YVRVTkRuYVl1NElxSmpyYWxqcVJidXhNT2ZUQ1R1N2t3NjdkNjJXT1RpN2hvMkwzeE5sbzR5Rm82eURWYy9PelZuMFR3QU5IZVF2SjdCL0RrOExoTVVSKzdsV3B3Z051YlErVVRDVzhWZEtXbmVWTTQvYy9FdjcvK25uN3psRzBqZHJjLytvUHFUZi81bkFaTjhHbUJLeEtOMzRFbjRySkExYnFvRkMxNGcxYWN2c3U5Y1RiS3ZpclpTTDhpREREbXFPeVZnM3JRZHBCc3pQSmtCdnBKT0lqNkFqRTFUSkw3RjQxTERENFM4UUI2UDF4NktzS29NeWFRQ0tXODZaWVJWbGZ5Y1BZSk5UQkpvWXBpNWdaRUZiL1M2OHM3ckwxWUc0aU0rU3VGbjk0aVhYbGtzOUplTFE4UG5GcXVmb1lPams5MHhXNmROL0JxTFZuK3J4cjh3RmkvWnF6c2tDc1BuTXl5RzR1VVNqWEtab01qTWNLY0UrVGg0SUFJWGUrYVRKZDFsOG5mS3lFazFSckFlZzlNcis5YXd0eUZ2Y3h5bk9NbUNUbUtJVmR6aURGa0dXNXpmQjFJZzdvL24wd3JNYjhVVXJFYmFYMUQ0Wi9nR041amJmcXc4ZHYxVUZuOWlOUElMbS9jc2J0cThaODh2VVp6bXA1Y3JsUlB3YzJiNXh1dW5kMXgvL1k2Wm8xeS9LTEpSa0ZlNHYyM1hkWnhsMENFVTJVdVpJczN6SkRXRE1DQ28rQTdzNSs2VExta2g0SWN0Z0dzSFluL2k3cE9nUVFzVHhXek83YTNYRUdadURlOGQ1cElKRllXNXlGMldldkF0OXVXZDZieTVRU1hqMWY5a3Q5VHJCMGl2SXBldGlPdFdmWXNMekhyWWIyWEZ3OVVnd00rU3FZaTFLbVFxUjVYeWJSUjFXaENtUHVyVDFncFRtTXByQ2RDTERXSlRzZlpSRUpzVkdraGtWNjJkbFBNYXZaMVdpUnQyZ0RZN3JJOU9CN0MvNWZUMGNIa3BpR3FFaGtSNEpBbVhhQWF6TmNTTXVJazc2elZqUnBDOEFYTjdRa2J6N1Joc0Q3aGNpYzc4TmxnTE4wOXNwdWd6VTR1NTZxY01ueWpvVlg4TWZMWmVEbUQ4MThvQjdDb1B6MmI3eHhQcHBaMjdiancwZW5Lb25Kdk41Z2JqK2NOenUrS1Z1Y0xXV3pmTWd5WGNIWXhvSGE3cDhabnJZdkhacm1BOEdncHBuZTB6NDhsTnhhNlV3RE1PTnNEOTdMZGdmeC9SQjBHYmdqVUthMjVlVlVDUndnMmJMbHZUeTUwT01XVWhrd0pUMkkwK2tRb1BXcXZ3cUVjeGpYN3VHSG5vN05tTGp6N2FrM1hIQW9GeVlHN1BRelI0NUEyaEo0NVVNM0ZGVzlhMEhhTHY3YXMvQitCWFlDM3UwNTFvejlCNUVQQVk1OE1GQk9EQmV3WTJQQ1daL3RhZytTblgyMnFISmpVQjRmYW1VRUI0aFZNR0F4bFNaZUd1Y1Q4TmttSGNkeEhFUkduK0pMMVNmUllrUTV5ZXFUcjNGd2ZQN0tHemdKTVRlb01aYmM0NURMYktPU3p4VkVIcGI3OSt6eU9Qdk9vYkFPK3Q5SmFxVTR3TkJCbjdDc0JabTNNWWZKR2N3N1piWG5mVDRmTW56aCs2NFhVM253V2d2ME5QVlIrbnAySG5QR25FZE9BZTZrVHA1ZEJrS3RkUXJFdndkaEtNeXVIY1c4bGg0aUZ1VDFyYk01OSs2TTQ3NzN2Nnp5N2ZkOS9xODA4KytaTnE5ZU1mRi9qYVYvdVlpODhGd0cyWG1VUmNYRmdiY2dnM1lTQjVGOE1vWTU2cUhheUkwYXQxSWNZZjkvL3hmYTk5OUo0ZlJmZE91MklkUHJmV25Sc3YwNTlYSDZXdnVQcVpuWnNrK1NSalVkRmZEcjc5SWZTM1RsNWk4S1hrSmVZb1d5WDBrZW9MMUxHZmJxV245bGYvT3owSk5qTzNhOW0zd0daK0FNQ3B0QXM2KzdGaDMrSVc1QVkxeWdHZlo5S2dKRVpNKzdiRmt6cjd0a2hzbXFUWnBFdVdGUXZ5YkhlenNXczNqTjI1cDBiZ25hRVhlOGN5ZiszVU1KTDdpV2JUTGhPYlpMdDhMWFBaYUwrMHBIY3hPdEJmTFBUbWtqMWhIbFZtVTJtTXhSdzhZY1dpeGZjc1dzUVVRcjRnaHRTOURpM0d5b01Ec2diV1ZmYzZKREVhR0pUSk82Z0dDR3UybGZWY0FDWlY5T0sxbXE0Wm5CNHJGaGd0RFJmR2krUE40M00yanU5WmEzeGhHTjgzak1pc0l0VnNMY2Vvd255djkxU0dwOGJJQnB4MkJ0TUhrMWliUVp0dDdhdzd6UEdOdlBnTDFpZ2Q1aWpqQlJnbG51Y05EUTcwTjQrenJYR2N6MW5qalA4cklWLzVOWG02MzBUU1pXK1ROTTBHT0xVYW50TWMzdkNMdHJkRzV6UkhseG12NEN4dTJWVFpOcjV0Wktnd1ZoeHJIbU83U0s2U3lNRHE4OUoxc0djT2tRcnM1OENsYmtBU1ZBaG1PcDRVdWlYSFZHVWd6d0FQR0YrMHhUUHFVUE9VT1BnazR2c1pPNlZPOUQ0ckt5NGJRMVJScU1SM085REJlMUpyTXdjM3RFNDdVbXUybXpnY3RWZVc5TlRJTUNYVDJ6ZHRLSThPVjBZcWFEMG1laUpkaHVkcWlBNjFyKys1Q2hvS20ybXNpeE9GSE5pb2h0VXVkcTlzTnNlMy8zOWNQSE91d2F1MThVQW92bFNxTitkbkIwNU1iRHFmTEp5aE93M0QvbXExTWxEWUdWWHNVblJ6RWgxZlU5djNkSFNNR1k2dlhEcWRzK3o5Nld4NnBEQllwTCtQWm4vMUo4bStWTUlWYm05MzVVZ0xlUnI2TzBKKzhXdnpYdU5DdWFFMTd6VUsxT0VYZldtdFJCMkFOaHBJVTVERXBraTk0ZG9pTmNZWDVFQUI1R3Byc1ZPanlkTVdUYUlnZDU3NU5XblNWN2RQMkpaeGJMNTFDYUlQWEx0eEMybjZJc05DZjNBWHZRcnJiNUJzSXFzQ3BaNmExOWRHSzJNZzNmcERqR2dKVUJUeDBFaURRYVhYTnFGcVhZc1FqSFhPR0dFdklHM1RxSzFlN21zYTJBMTJzYjRNSlRPaDRJeW5EQkhWL0lLcStzVmJmR2dOTDNFU2l2YjhHUHZzdXErSnpaT1NqUk9qSThWQ05oMlBHY3Qya0E0NnJ1VndicFhCL1JKODBFM3g1Y1VYYzBrM0JaODNlS2d0L3BPS0Z2LzFBUDk5ODlma3YyRmlJdzY3emJIaW92WTJxa2wyYmQwdDNkb1R5aS9wblY5algyaXh4MGMwUXJzRnlxbHhXTjFGYW5lMEhMTTJYNkdveUZ5cmxXeTBxcU9CWGJMWmE2TndPTFNUd0RmUmRmZEZJWnZLTCtuRlprSkU5QktXZ0xOcmpwVTE3MStEZkxDYUdkMDZDVHRQYVdoZ1haMkIrL2E1M0g1STZNSGJDYmtUcy9ra0ZnQ3pRVks0bDErZ244SjhCVmxobDZDendPNmE1NStuTHA4eXM4aDcxaWJjTnpaWjByMk1KaE05Y1NPNXVadDExM0x1QlQ3ZnR2QkpKZ2c1b08vdDRaRnNkVGpKOHlZeWVIVFdnRTU5cW5ZOHptZzhFOCtrVThsRXJUdWVxbzNuR2c1K3JsRWlEK2loUHFvcUJRbVVoaGdZandTektWQm1tY0Z0U1pFVWRUdkNCanNORTdmUjczb09KQVlYTEhIVk9MMlNDWlV2WGFNVlA3MnF6NW9uSlZxeXZkeWMrZHE1U2MvUjB0cU0rY0hGalltMUp5bVpmcm5jbEMydjlrOHRqVFNlclZoejhLdzFCMkZ6RGpBQ3JXRU8rTEVsZzRtNEJLTjcrWE5nOWZXYzBSZWVYYjRGWS9IMUhVMGNpQjR2VHNNMWpHZjAwZ085Z0lqdTYrbXI5V0hrekkrdi9vcGRZZDhoV1hMWnp2TkU2SThJdDNENEVaQ1hVc1ZEWlRVV1JTY3E5Q1hQKzZnQ0VxSDVDVE9lTEltRGpRVE82ckxBcVBFVVNUTlBrVVFQY1F5U0FKUGgvSHJOY0dFMXQ5RFdIRHJCc3FHOFZFVUNGZzcxVTM4K3pVL2F4Vm5ZSVJnZm50Ryt5em9McytFSnJHWUQ2bW5TZkREQUpIRVdabjJzbWg4YloyRUowR1VWZmx4OEhnd1NFMUcrR2FvbW9wbFdiZXpVMmpiTjh6RXY0U2UwZ0ZIVTdYVjc4eW1IRmwxelJsYTJIRVBYUGl1N2RPbml4bzNybnBkZDJyN1hlMmI3MVMvWEg1bVovblI2UmRUY005eFRITG02bW52Q3JVNnZpQU1IeXM4YjhKME9yS3NFZE1QVGM2ejFZM21ZUkJaWnlwdkNzbnRhL1JrQ3JOZXd3NE5uQndzem5jbHYxcDBZeUpaY1k1MWN6ajRzNU93a0lmZDhNc0tQOG9SMExSQk54VnpNUzhiSjNnWGdyOEJ1Vzh2anZZaWVOeUt3cVlpTnh2YXRtOEpreEtMSU5qM3hhREtXVFByektUdEcrMWc0ZmMvQ0tSWWpaRUdmRTBnTjlPZXlaczBESTRHWW56ZTI3aVdkaWtVTHZhbWg5RkN0R3hGVVpQWHpiYXVmSlBTelgxOU1VMDJOQ0k5TzA4Z3hFUlhHYm0vWlZRcTZNcXR2MURwek5venBXYXV2c05tWHFvbStlSVVGckxWd3lRbzlSSS9MZjcydjU2eSs0aktYazVHRzgxbGVCRUhWUUtQRWJod3R1eGthUlBxTmpRNXVHTm9nNm43VU9uTkJaMnY2UWpuNUdMeTdTNTlwN0EzWEl0Y28xdU1jN0tpNUMwZkRlR284R29KVmNYOERqeFpKSSswdWlGR3R4NlM5WmdFRmtSeCtUUzROY2xwblU4Q3F6U3hVdysxcEM3ZG9yTVhvZWFRK291UmJCNlZyOU1IakEzUDhMQ3BPYnRJOWVPTFNEVnFIR3lSZUo1ZjlSbXdzcVIyOThBS3IxbjdFRTB4N3hIbUIxZm1hSmt0NnUxSEJJSk5KbVVWRXpXT3FobG9NVFVkVzh6czZFaTZVTWVHR3M2dWJwK2RrK1hyR0lsRjZVOTBaN2VCcUY0OFo2Q2VqNUY2OUhmWnVLVUdwM0U4VktzMmJ4UmswMk93MENaYTBxaG83cW9sNFRPaVNBQ3JCNWI3WkZDczZLZVJzcXpkUXNYTVBEb3dNRDR3T2poYUFzdjZrSGFTK1lwbEFwZzdUNk5Hb0JVeWFzUWh2TjZJaXkwZTM1NXJqRVdhN055ZUgrcm1aZE5yd1lIelRDSlNrdlRQSEd3TVVwcnNTdG5pRjIwaHNDNDlWUUxyOGpNWFp2NUEwR2NLczJRVFBCazlqeURJZVo5aTVmeDlZU2xyQnN6NlRiYktaWWw5bUtEdUVCaUNHczNoejZIUUIvU3hZQ1ZxSlFNYkdOaFlJd2pPcDd2enZsN2xkdnY1UU9ia3B2SnpidTNFeXZXMTV3OGlTbnNXRXI0bWpBZHRJZm1CaXorTEVocjE3bWJKaHlCV3k3M1lsZlpNVFk1Ty9kMnJISy9ZV01lVnIrT0JraXBZTEV4ZnkxZUNoTFpzUEhkeXk1UkJmRXprVzVmTDdONFQ4N2lma2duNjJIWDd0ellQaEVnZnpKZ1JzSE9TeERSc21TaU95TnN2ZHF4VGRxMDJ4RHZibVdJZWhRVVlyNWNGTlE1djZ3ZmlOaHYzZXpvNDJCMDJ3aE5QVTNiRC9aNjMrdzlEL3pmb05Rd0M5SlE3cVBQZDlncDBGQW9RN1pacFFjRFNqTUFnb0RKWUh5Nk9sa2VGbUpOcU0rbG1Td0VNYWh0L1NaSmdjMFErQmxpT0I1YWpaa3BTQjJGZFptT2Vwd05RU0NZc3UyR3pDYzhmMUd3WWo1N3FXb2FRbmxBVkZSb3NwSGdzRnZKNE9sNXhXMHU1T2h4WXEwRlNsSkwyY1dJL0ZsYjJMcjN3cDhSNXM1VXN2Zk8wbHhYeFlkSC9Pb0R2dUJZL0RnOVA2aVhWbUhxWmNzNTFzU2ZHV2t5NDJvbGFUTHVUazFPb1Y5akQ3QmRoTnI1OTdLZ2lTeE5FTzlySUwxYVg1aVBtSEJIOHNpY2NCRUJUeVNlaWtXMlNpUzlRMGl2SFlOVnozMU1qWHIrMGdJYU1nM0Vyekk4eng2Uy9rYytsa3BoY1A0S2w1OXRsb09va3pVc3pENUlzUjR3QkVGRWc3bzIvMFIzZHUyM3pqNFkzSDh1WDRkTG93bXV4ZEdCMGEyVGd5TXpZemQ5dHZ2T3JHQjB1YlMvUlZicDhqSE53NU5uc2tudHdaanZZbG95bFgyRDJhSHhqTjlhWHk1VU43cSszMHA2OSs1UFRla1UyOUNVRWZONTYvZ1Q3T28xYWNWSldSL1l6elVxQTlERjlHTGxSVlBtd013ekRyTHNJckVZeGU4SnFWYldwbnA4MkJEQXViTjErODc3NzZhSjBLMTRSL3N6bWlnYTErQldNc3BNZUpTc0xrTlhvN2FyWU93S29Mc01LOW9KZWI5dkRoWlJ1bUpCTTAyM2s2am9HZVdSWXkwdFRLYWdEdGxSTm1xeVc5Q3l3Qm9vVzFjTkR2Y2JlM2dZbXJFaFhMRm9WQWNHcXdoSUlTNk16TjQva2ZTNGNQMzMzeHJ1OWZqQzZXZHArNHVMR1VIUGRLM29NSDMvQ0dGLzZkZmFuNlhHR3djVml3RGpZQ3NhZTR2dklSb1ZPL201QTVvYWgwb1JBSDBYNEptQ3ZBcTBtWStqOGU2WXVTSkZTNlhQOWdDU25UV0pWa2RYWDFyd0J5SDVleEh6RnFrdHdOelp0cWtrQlBLL1dnMXFsSjhuV0FNTWpsNVVlTW1pUUlDM1loVVpNRXk1RklxTTljNGhVSmxEcUFyY3VTSU15L3hYb2FYQlo4eEtoTGNnSmVxZWlqdkNnSmswNWlTRmFBbDVVd2dWMnJNZ21ucXhIZkJaci9HK0MzOVNPOFhDNW0xS2F5cWJTTnRha29JUUNuL3dmZStxdzFMMWlYWkM5OHNsZk1USmdZZ3hTSU5VNU4wS3hjUWxuVDNIaGFsUUxodG4yTy9pbjdQdGoyYitDMVN4NGh2NEpYRHV2WEphakdlbmkrZ2xPMlM0Zy9FclI3dDgzQnpCR2c5RmRQdFZGZWdhbzc1bkhqZ0hyem1WU3MyRjBVOUtrZm5zdndtYTMrRzBBTGNsMzBJMFlORTV6SG90N0x6Nk5GaW9qY1BIdk5kVmRBRi9HdmRwRy80dkZ0U1hJcit0eVlIT0EyU2h1ME15cVo5S2gxc1c2S0VqUWNmWWJmTDRFaEtqRmVOMFU2MjZxbGpQWWZKYWEzclhWQW5MZVZ2OXBkc29Mem12elMvWFhCZWxlZmJISkM4OUE5b05HZkF5NGI2M2c5c25vdlBMaEJiMitzZ1NKNG90c290N0ZpeGpKRkd4Z1dzdzNyYXFWZ1E3V1JPVnFVUzhIMUJyd2gxdHRINjlZYnlHVDA3akVlVDRBbEdMQlNDcnlGd29JN0Vwdk1mYU5paWkvbFRXdWlwdHRNOWJzWS93ZHdIelZ5NTk0TzdRL3BMaXlZZ3JHQVdOcGgxbkMwYzN0QVljd29rRk1yKytHcmxmMHdHMUJSOHNPcW1lSVhhUnBXekNFUWQwM04vdUM2TmZ2OVRRR0g5TXF6UnJnaFVKUExUdW0zQVFlTnpJZzlJTUN2SmNHTUFWRTFwajRHcXU2QkZYR3hwTGZKc3F6SkdnOVI2U3A0UzFyS0M1TDkwNDk5NExUem92VGJsMUZ3WHgwWE11VTZnUEY2N29ON3JFUFVhbmtBSG16V0hUS3ZUQXhUTVN2Y2FwM0VxTUFRc0dhLzNZZ1JQbS9NOXlmZEhvOWs1RDdFcXQ4bC81M1B4V044RDBqL2twQ3hwMlZxVFVDbnlPbzMwa3dqYUtPNVJCR2cwODNnVER6dnJzT3ptL3kzNmxmUUg0VDJ3Q3pLTG54M3haVHpRbjU2WkxHa2NYdUVid1Y0MzBuQ2V0RHBnTzBFWTI5aFlveDR6aENQNTZ4Z09LaGZnOTFQbzhjdkhqMTY4VGd0VGRQOTN1cVB0dCt5dmZvRWRVenpYQ3dlMjR0eTlFMld6K2lkU0RHSmVPdWlKSHVJcWhCRkpaWVAxalJQTlROa1VxeXl0SmxpSmRvMUJsRmFiZldFVVpNYmJmYldiVUQzY3NNR0VnejRxWS9DdWtoNWJMWDhNWTd6dHkyYzBkY0RPZ2RXQmpUeGxneThreWJlWEhWb3dOeG1ZWk0xa1RZYk5hSmtzMkkvZzM0L3JLQ0lIOVB1Z3laZWRYbHRzR2JCdGpmd3dqWDdPL0RnM0ZwcXh0WVFrTmNwWEFaMUo0Sk8vbTVSbi9EMGVyUnBSUnFMTHM5YWRNRUtpcC9SQTBtZ1N3RHNKUk1MZVQ1QmxWbXpKSUZaYnRSbTQ1Wkp0SjVFOXNiSjdTV21uNjdXdUJGRDZ3VmVUcytxdXN6ZmFkMXlDUThyYUtFWFR6N0RvYlUwNVhHeW5EL2ZMUGh6SnlHbmFrZEZSRmFJZFZSa1JOQ3FkUkcwdGFNaXdvK0tXalFCYWdiOGVHNGdVaFd4T0VpcVVOZjM5NnkrWTFrdTJZdUZURnFXWnpYTXlDVll2YVlsV0V5QjdNMGxCcElESmx4Ykk5eG5MYmhoZ0R1dGIwdnl6RngrM0lFanExdHFITGhXQnp3QndCTzVSQTU5cmlaNHU1VzNKdUEvWjhHUHR4R3NYTzlRN1JJZWNHaTBFYkN0RHZCQVArSTlPdEkvUGpCZW44Q1p6emdSUE5yQnowdnZvVmRCZHZXVENmSSs0ZGJ2QUdOZmpZZUErYnBnajhOYUtmaUp2ZTRUdy8rZkFtWmprc2JPMngwTTQxbVF6ZUs3blRaWXNQSkp2UE1uSm92Z005Rkt4TWFJUnNSdWI5MGVqSUhCZ1h5dVhCcVlHSndvOU9YNjgvM3BUTktmVHJkaFpLaGhSYThYNVlJdWxZemhFMm9PcDk1OEx0RnpabVBwOEdTNitwZ1oyckk4TWJtU1RKemZqQ0hXN0Q3RE8xU2QzN3k0MXdxMkxnOE1sT3ZqV2NZSEJpdjVtZVh2OElpV1QxdmgxeTE0TzFRbDVJSXBSdzBtYUo2c1J1Wk9hRWFtTkpIWDVXNC9aNVowQWxpOG5oT04vdlc2L2hPRGhKd1YvU2V4WDNrWkEvblhZNVVJNm8yWVgwMndiay9MSnRCNXdKL25YRnBiWHMxOCtyVFZmeFRXd1lRK3h1c0FZUCsrZGNiZGVrQ21uMGJFMVVkSWhneWk3d0RaenR2UnhtVFNYK3lKZ3l3SUF5UlJ6NmZwVTBteCtMVExjc0RpdWtPRmtSZWNpekd1Q3RlZThkUkdvNFdacSszTHdUQ3lnN25CZEJKTjdidzN6MlBqMTZ2c28xVjhBWHdJakNjQytuUHdjRWlQSjVFRjh6UGQ4Y1d0OFJUL2ZVZDN2S2ZOK2FlZFdmL21QWTl1M3VQQ1g1V0Y1UFVsNUxxQU53dS9qbUtVZjhDWHFZWUh2VDl3dGwzL2crdW5JMFA0VzB1NUU4a1Rjci9lUGdBOGxPUldURCtWRFcwNWI5WUpBL09GVytEUmRia2cyMXhhN0JxOFVDbVBES0dzWDhzTEdEZi8rNXdYM3lia1BIejhXM3FiQTVRc3QxT3VpNkNQTjByOVdqaTlrV1lhcVcwT0tFK05abzBCOW1aVGEzTVFHYkV0bWl6eGFoTlljcGQ2cUNmcjlaZzV0eU9BNVc5eUhVVGdtL3dPSWZmcW5UNmdaUTFueWNBNVllSnN4aEhVc05aTVZESW13bWFiUm53MFV4OE9lTDJVZXJ1OFhWd0JFRWpaUlEyaTd1cDNNZmZBd2lrTlp1b2JXOUV3Mmt5Mmh0b2Jwc2JYZ2lDTk5UcGlabjJXbDBFNlhoY0VjeEw0WFArbW1Hc0Y1RTVUaFJndWhCcm5zRlhHQWhiWVdsTnZLSDZ0T2pGVy85KzIray8rYjc3L05sVXlNanZYckRsYkMzeE5NU01qNThMQmN5NDJrMWZVMVRQYUNPclhFS2laZ3p6VVNZUjhKRUJpOFFJdkJQVlVVZmhYa2EyS1EzSEdxMEZCRzRLVlhkWnR0S1E3MHBrMGxpTENMTWFYa3IyaHJsdUo2Rm9wSGVjWDFzYUJqQzFmTThWRFA2bzFCWVNja0ZQV0hEeHJ6VUhZbklPR0NrUzhtaFFXMkRHVW9aYzRCNkwyRE02QkJUOTlJMWxUaFNoV1g0VW8vbEtyRUYyTHUwUWV5d1BzdDBnY3M1UzZxSTJFcWQzRzVoMTJKczJxRkl3Q1lxUGtQS2I3Q2hzWEZvN05aajhKMmszTXZ0QWRUV0UycWlqS0V5OVVlUFJDelQzYklyMkZKN2c4OWxoZGlzdU5jeWQ1anN2SnVYMjFMQmZHOGZxc2xBWmVpdUROU0g2cVVGRkozV0hIZ0tKWmJNUGRZV3daTTB5Q1Z1SDBtQ29TYmJDMmFxeEFLMXBLV2lmYmhpN2NrVHIwNTAwcE4xS0gvNXZWa2RaNU4zRllKNWp6MDAvZXBJY3c1NmZnWVlyY1EyMzJPSm9yd3BrdEZrb1JXTjl1VTI4bmRodjh2SS9ZTUQvaDNEcUpRYWhCUW5ORnRWOTZTZTJYOVBhK2ZDYnQ5bk9uT0tkOHl5R3V0MlRxMDR4Ry9XdVdTTmZ3YUhQaTBWamprampuNUxaNEhIZ1c2QUU4KzNiRGZud1E2TFNpZDNpQU5sNmVENFczTkJxbVc2TGxhQm9yeVhVYkZlVFdIYmpUN1JHeks0cVVZMDdnbUZWejRGYmRoOW1Tdks2QWw5Y1ZZTUxuTWNMck4xRmpuNjhkUmZ0NUhuc1h2NVVJUTNqWXc2MGE4ZWk4cGdUQ0RGNFZHTFFLQzZ5VFAyZ1dGbGlUUC9nVjZlM2U2amVUdWJvTXdsK3lNMVlHSWRDVzUzanhQZWNkWXMvWlFNaTdkS2VOWjN1NWF0bGVQUTBPREsxRjZsY3JSNGZXT2htc3dkR3hUcHNtUjRmYm03YVpNUzBDNSs5Wk9NZENoTnloZStwdzVzV2hURnMreW04ancwbzVyZERXZTlZOFhwTzZCaG9hVmtUQmFsSW1NbVljajhEbFdRdVhNT0J5bjk0UkFIZzJmaWhYUjhNaytsRkVGUnNSWDlRS25ldzZqZFlndGRicEFtZzVHbW4wbklWWGZCWHhXanV2Q1g3ZEdZZzBEQ3NJb1B0aExVcVoxbTNXWUJSREc1blNldnZZeEt1dEVhOGF2NFgrazVEM3Q4TExyUGNqK2x5ZjRUS3RHNjdodUtSNTNSa29ST3V6bko4VE5lUUh2bXVZYVF2M1VoM3VpU1FoNzJtQmV4eFJFYVphYTRvYXFuaXJabXRYQ2p6SDZ3OFU5Yng5ZmJRcGpYSStxSzBXaC9COUNYby9iZUVjQmY2OHJRWE8zZHpSaGhqNVdoSWJsYzQxRGRZdWxIWEloN21rWFN4TXI1QWMrYmlSS284WGVXR3hDZ2VQTVlXTk53ZGR6VVdzQjFMamd5V3pQQjdsVlFmQXNqeGwxSWV1cXhWbW5kdndOb2IvVUtEWFdGTXNadFFVYTlXU1U5U0JtZXorVEFZMzk4UTZPUVgxTjJaaUhpc2p6VmtFUEpIMW9zaHFiVHFzTVZKYWF6bXVOUjZqUEc5QXpGY1B6TmZETGVZTEhaUTJUYld0aU52anFLYXN0Rnk3dmV1Myt6WFdiMDNlUlNLRS9LRWVOSDJwaUtjazhHeHlwamI2UjlkZkZiM3JOMTZ6TnRZNFU2KzVRaHFjcWZXeWt1Y0M4M1g5MjBiOXFUZmltZEtuemRKakFyRkl3ODdXbUNvY3FUMDFIdFRYVU1OaUt2VmwxR3A5UG1mMENmSjVQOEhxWEdhWHZJU2FKWEdiT3J0V0hiWEdzWUI4blNMa2VOTklvcWJJMUZwQnJ6MDJIalNVV2x2U081cXJyZFdONTFtcjMvQk5CTy91cWErMlptdmMyQnE3WFZOd0RXRHluR2MrbG5jSjNTUkx5REhkMmFFd2liUWJ4d2JpQ0xQZTliRW1JNW9YRktxdlQ5L3dsRnNxbVJTV1pUTnRKTkh2czFhL1labWcxWUlWSXEyK0RSdXM1cEJlQTlpb0Z1bEQyTFltMk05WnNERlBkRXJmV2pjbVhqWFNja2V2QWR0Y1FoREJHN0srbVY2aC8wWEltUmIwaXB0T1ZMVjFGeEdVc3BiL3RBWEYya1dKUnkvMmJaekw4bnh4M3ZlN3hWdzVNQjdOVWF1Q3RvNzdxVDZiZkIzM1U0c20zSVhTWFBHTjAxZmc4VzBMaitRUENKblhkelZXZkZ2clVxcnI0OFMxaTc1WmZUeG45ZEY5bUdDVjROcFk2eE1tV3VLL2ZzMjNianBDNzJhZjQva0U3NTU3S3ZsZnJmbVc1T3ZjVEZWU3NNeWJRcXgwdTNIR0k0cE0vcldhd1JBYVc3VXUrR2F2aTJGb3lyL3pyMG0yKzRNdGk5Zk5kZzJIaW9XdThVeGlZRzl1OTNWSHd1T0grbEtSQWErdjJKVXAwSkh0bzJOYjdJNVVKdFBaT2VYM3pXMi9tZ3I0N2dwMWQ3UnZzZHRpb2k1TUR4Mm1ud0c2WUYyWUtMOGpoRXIwckZsbENUQk5aL05wMlI0dWVKdXF3V1RNc3d2QXFLZG5iSzVRbUt2MDlGVHc1MWdQMWFlR2hyWnZHeDdlVG4vWk4xdUp4eXV6ZlgyelkvSDQyR3hmYVdhbUJGOUFIT3o3ZGV6UFNRenZQbWl1d1daY2l5VGpCazJXekdnZFF2YzIxR0ZUZ1dMWHFNUDI3NUdoUUNXK3QyajJQYkEvTnU0dlJZZjByZlQrWUdCRFBJMGY0c04wZkZNd2hIaFpkZGlNMmkvM0dDZE9ick1BRE9VRllDSU5uK0RkZElZblA3U21OSXpFYXZMZmVtUjVOMnY1SloyMSttdmVmRXJUdXRZbWw1VCtxd1hZdGxTZDlia2szRGVQdGVaQXJsQlZ5SlY5aEh6SkdLc0hSaGFMWWhhVU9kYTZUK3JHbXJGeUhIRGZhUjY0VGJJeWhvVCtzVTVqV3pNcCtBRjVMUkZrL1lhZ2Z2Z2EwNGU4K2JRaFM4VDR2bWVOTHpaRXlIOFRhQWVheG1ka2hVUWFIa2kxQjJZdVVWM2F5RG9qeGFUN3RXM1c0cTJIMGluVW16QzNwQTUxaCtIckY3Zy9hK0VlQnR3L2JKd3NZZEpIQS80eW5pdzFmWXJYNnhwWTUrcHlRM2dWamliYzdSYnVoZlZiMnRlT0lKeUNFWmhwSkhWamNEYU00VGxyREhGUVpIN3ZaZkpYdGpIUHBCbDFoNFY2MzdvTkhXc3g3OEhNRkVyck0xUHE4SGMxNEY5Ykh5RWJJWC94Y3ZFM00wdGE0OSswUVByV2JkMWloZVFhc2xDdXVVUkNmS1o0Z3NpNnZQYTBOYzRvOE5vN1grWTRVM1U1S3V1dmpWenJWcTFXeC9vWVcza2dZeUNmYzJTVWZNMFF1MjZ3THdZSGdJRjlGUE5kcVFRN3ZpenhZaG5XSXdwS2MrMkpEOGFDMW0rS24veG9tb1UyeGdEWUZHWlU5T0tua1FtNWx2aklJOXpPdG41QkpENnVhV0VUQ1RQWXpwb1dEeUdsNFdJZkRDS1h5WG94Z1MzU1N1QzNNSkd2dlFjMG1jclZMNjYvSlRSWnpyVWR3dVFMdEpjTnZ1Z0J2dmpZeStTTFBxSVJ1MDJ6cjdSUm14TmcyTlNWOWRmd3dEVWIvNXJydUNaTEl5T0UvRlNnRnhtQ05aU21ObnZEZUpUNVFZcWJRYXVua3ZHMGJud2k3Y1J1TjI0VFgzZDhZbzBQWFBNTng5cDFYZ1FMM0c1VDdTdldpOWVpeVJKZWFEZFJHUjNwTDZCdTJTaVVKWkpZemJCdHJJZHNKRHZJSVhKY1A5b08rbFFIVlprZmhqclJ3eVR0dWhLend4aXgzdWtjQmhTcWxLMFlhVkpZV2NKdWsrM25UVGFPN3pZOUNRbGxZZC9pL096TWxMNGxYZW5OK3RLWUdldXRpNFN4S3NqVndoRFV1clBCV2tsNS9yMWVzeFRsWUl5alJYaHBjM0xUM29HaC9kM3RsYXpOcFRsQ0xtL1M2ZlltTis0ZGRDYzZ2TUZJOUE5MzdIbjg4aXRldTNHc0p6bldYOTVLRjdZT0RXM1ZoNGUyVnEvT2JOdC9LaHo1VUp2ZkVZclFiYm1wVWl3ZUdSaGs3SVFzdWRvQzVWaCthamdxeTFxdzNlMmhObW5qeU56U3B2RlkwZUhxaXlaSEhJR2xzZjdObS9zSE5tK3V2aXVleU1ZN3ZjQk1qR29SckZYTjZZcTZScWZRTlh5RXZGSy9vNFBpM2NVcUN3QjFOeVNBdWdkSE9YWHRTTjB6cDQ5ZEx6dG0yNmlEZ0xIbFhIbFoxRDZ5ZEhKNTZkeVJjL3YzN3A3Yk1iMTFrbE05NHpKOUJnS2ZaeTE4d29EUFBmcGRSNkNmMWppcEFpZFhHM000cWROQkw2MkxqZE1aMk4wU3BhV2xwZVdsNWVQSHJqL2FpRlE3UjBvV09QRjhwa2t5UjQ1aVRoY1dwZkJTbTl4RjdiYk5hYWJZbHlyTXFTb2lVdHpLYXdKaGFzTW9hanRSVkx1Q0hpbW5RM1ZpdnBPWnJHZlVtMGhvQ3djUExDN003cHphSnJwMmQ3WnAzVHkvaWY1L3dvdDBZV1h2WXZYVC81YzRrcTE4cWVyK3Y4V1VwSTRQbmpQNEFPTitIOEs3SlBWYnJzbVo2ODA5c0tyRGVYSjlEaml5ZE9MNDBwa2paMW93SmNhS3dNWjluRDFQc3VSMVBLZmhEZlNkaEZjczY4QmNLK3pZUVRYR2M2Mndubzc0WTBrOEx2S2pjQnRQZFhCUzNGYkY3Nks4Y3B0RGtuandxTGhjM0xnTHM2OVdvdGxwcG9xdDk0YWV4ekZyTU9ZWGF3b1NOcHpKaExzeStRem92ZUo2ZDFIUDJlMFN2alVjNTJMZE9CL2o0MXpXMjZKZGVMbVhvNjZLZEt4MUZXbk54Q3JTcW95MDhYUkpkM3FNanNWSktzYWl4VmIvZzcyVmZaSHJSVnN4WDJiTHhrSW1tZWlPdUtCckdYTkFNYnArVjh1NzBpWXFwZUZDRnFzN1pyU3NpRlRrUzZDU3JlVlVZQXdIckNHZTRSb0lZSFphWmN5SVlaU3NzbDJhcXJLM2JnK1hJNFdidDl6MDhPU2Nrb2pjc0xqN1RLbGNTaTcyK3VMMk0rMkZhTFJTUFI2SURzWmovVDJwL3NXRnJkbXAyTWh5WGg3cW5WejBGZ0taL0MxTGswdTlVdCtPM3RsVFMxT0R1K1B4ek81czZycmh6bTIzRkVKRit0V3U0V1RVVzRqMEZBYXJENHhPaHJvR2pnK3dhRm1jOFo5a2UraHQ3RnRBamZqSDFUTlR1Zyt2ODZIbzducGxYWldFajZ0a3lodE01YTdjcy9JQjlxM0xsOFc3NzROM2Y1Ky8yOFhmYlRkeUJPZ3IzWjBNS0lOdjBaS1dvdEhIUG5BYVh1UDN4UU5OUDhXZUJiR1U0KzlFS1Q5UjRFbGxtRExCdStXNVlySUpRZVNMMFdNaU9Zek5ZejRZNzM4SDIwbi9CR0FGeVRpSDFlL2l3TkRCMkViSkxNRVVveVVjQlNPd0xNVVZ3SlR0VFdWU3ZJb3FIMVJPSEdpWGFrNFJtSjFIcHpzbWVnTzkyVVJIcDljeDNUR1dEL1JtRWgyZUFOdlpzV21MTitDTlpqbzI0cytZb01NZDdBYjZPK3hwb0lNeEpxUWhvWWRRN2NDcmtTamV2TjFBUytwUGxPbnZWUCthUFQwN0syQWNCcnA4bkgyUHVNZ2doNUYyT2tBcEpyTk0rSE5ZdlQvSHBoSVhkVWxhUU1DcXhjdFdnTXVVM0dqYmRNZlJiZHVQZE02MGxkaGp4WUpuY3NlT1NVK2h5UHU1amgwaHo3TG5pTlBFbFdjckxQR3NTdXlMQUh5UklXVENyODhTZWtjMGs0bEdNaGwySkJPTnB0UFJhQWJ0aTd2WUVmbzVEak5JU2h4cVh1SVVXTUlyWWJDaVBwWTFKWHV4TExmWDNSWjBCV3ZWd0p0N0tOWDkvcGxJTmhzSlo3TWZ4NThOdmRaNngvN2Z5TGJUZTZVaTczK0M5ejlnWm5CamFoNWhTd3BQNUpaUlBxeUxCYTNyT1ZjWGEweVY0Wm5wa2VHWm1lRm9KaHVCdnRuMnFlSGg3ZHVIaDZkSzJXZ2tDN2hrQlI2SFFKSzUrWHJRU0liakVSYlRkNGhQM3pJU2hlN0JtODBzOW9QVmtZR3Y1MjU5eHpHNjYrTGpoOW0zSG5yb0liRk9GbUdkZkx0K25aaFpSY1lhYTE0blhveGJUZVUrZHZqUTRic3UzczIrYlN3VGFQNmI5RHV3UFh3RDhPb1hrdFJKakR1N0FuZ0dpWnNkNEdoNGlBSERwYWZGK2tYczNuMVRkamY3eG45eU9LbnFkOG5uVmo4bzRNUTRITU9ySExrbW5DREFPUXA3LytFdkNYemV2K3FnYitYWGJWL2dZM09BcGNsVUhxVWdvb25pQkJObTVOdlJwVW54R25TTFIwL2grL3U0WjE3Q2dqeVgxbXV5OUdtM081MUpZdGxjSkk2eU5pNElnM3pwVzV0dVRCdnZHQ2kvcGY2dXRDMVMwY0M1aXg3RHVzR2t3SEh1Y2ZENThOcDVsWFpjb3NSYW9jQWl4cHkwT3JHbDJ4dE16ZzFiNjgzS3ZsMTVRYVBSMVorUlB5V3ZGemxFck9GYWpkcnlySXpVVkxCWFl6SWVmTDIrMEIzdjY0dDNHN0dPSGF0SHlPZUFKaElKNmY3bUNSTFRVeWxKcVgyM245cC9xdnB6ODA1WjZKc1IwSU55WEEvQzc2OFNkM05MN0NTdXBjYWJQdHBkalBvOHJsQjdxQ0VIbE5pZzd5L0Qrc3NCQkR0OUZWNjM4QXVDdVdzaVdmRTBGem9JS0U0WEdNWHpEZkcrWXJ3UGVMRGZCeHB3UERpVUt3SWYra1A0ZTBqdnQ4a2FVeFdlMTRtWEd3QXE0UzVFUmlnYTlTalpSZUk2STJVWTI1L0F1cEpJQjJacnl0UmNDYnV0d2NYWWdpSVQ0clRMSFVvSEY5c3FpTzJLVkpLME9oR3g2THJWVllqMjlrYmg2MitZZFBYcWQzdGpzVjc4NHYyTXJmNFQwUEJMdko4NTh4SmFzNGVvT0k3aCthRm90ZnBrTGk3SjZWb0xpZWU3cmtVREwzMnJuL1luNjlDZ1A3aDZsVW1OZUVSV2YwYi9ubjBlVkpaZXZEZkU2MkY4dThWVEM0TDFNYW1SYTRrWnE5eDFFNU1YNHQyWlZIZHZ2RGZUNjhPTFpVRHBWWU9wTE9nMnB2YWk1Y3d3TUZXcXc0WGVGT3NKc1dOeVltQWdHZHMyM0Q4WFBKUjh6ZnpBNG9iRXlKK1pLQzc3ZzZYYzVFSXlGUzUyNVVZSGV3dmI1cUpEMjdQbDNkVXJEWGdYVjM5Qi94TjBNOFQ3Mktmd3ZoWitLM2ZjdktYTkRIcm5aNEl3aWxQRUNQL3ZSanNJdHB0TDlhMXFEWmIwOXFiaGVXRll1VklBdExYR3hZcHVwYkg2cmVtOXY4Ym9xTk1hSFNWNStuM3lkK3hIOWZMWWtLTUJ3dVVvMXg2SXBUeFk4ampsTGIwTEZpcjlQclh4R0hlQTg4L3NSN0FpOGlURkhuM3AwdDNOakh3TWhyalE5M0JjTkRJcTNuZFp1NVhBeHlzMjgwTjhNMS9tU3NLZXBVK1oyeGdpWlNKMnI0RmM5ZWZVSnZDakh3RFlPY0R2SDltakZwNW1QeFpBZ2FtM3hXYkorM0hMNGx6WmtHVW9Sd0QzVnZMTUdKaG9DMXJzS2Q3M1o3bFZqKy9FMXR1UmVSZEliQS9ROU04NFBjWUVsbTNFRE0za3hQQ3MxZTJXZEVkOVFURnZTbnBveS81ajdFZElCVTVqZ0VrZk5HZzhJNkIyaVA0VlNaWU13RUgrTzRJV0gxcVUxajFnelJETXNRVlJWeWNHcElUUkV5MXRPV0IwWjNRSjc0RnFSTytsVjRoQ2V2UVlwc0pTdko2a29RU2FRaFFQWWt3MTBPd3I5TzYvKys0ZDMvc2V2Zkx6cTcvNnBZQXhBTjh1MThIQUpjZ1hIQUlTbDV1WU1IajFlRzJZZ3hBQXhOMTM3Tlh3ZnBhT2M3azlUcXFpbG9EVEJpb2hZaVNHaWdBNVVtQ3FVcTFOYTNQZ09iTHFGVW55RFBGZ0QzQThuUGcycjJZdnJsdmhhZE1jQnFBRFJqWlJuYXJUYnVOb0laa1NIQzN4blE1dzdLcHZzNUFVaU5MVmI2d08wYSt4WjBTZE9INEpLUTZ3aTliWGlkTm9pWTdRTjk5U3ZlMHZwVWRmZUFXblQzWjFpUFh4OTd5NGFQRStOVUs2eUlKWXJVcUtsbGpmSGRWYjc0QTNlUHRiVmdmSXQxNmtuNkM3NUw3bDNEZWxONzV3dTdCeHlQZHBuUDRaakR6K0lycDZwVTVVZmFLbzY4WCt5Y252VHc0TTZ2cmd3Q1Nmajgza3I4bVg2WG0rbzl2SmQzQlcxNW9YaklvZFV4TDFNU2ZJdjlHMzA3bHI2US9laEQ4eFFhK3YvaTZkVytZNDR6cy9mU252L0ZGMXV1NGQ5dUJMZUlmTlh2MVUzVHZTYlMvaEhhbnl3cGY1TzBnRFdHMWZwaDhFL3BvR203OGxCU1JtMTVoTGNrbG1mZFFKMmc4MGVCVGVtWUYzcmkxM3NPMVBlZHNkTDZVdGpCbmI3bndwYldHczJIYlh0ZHZDSDlPclNYb0g3SjB1b243Q0tkR1JRbVdVNzJub3RkT3kyZW5YM0xucHhJVUxKemJkK1pvcjcveC9kKzdjL1BWTDkzOXQ4NjZkUDhaM0MvRHVVdjI3R1IvZjd0R05oK2JsVXUzbG56YStqRFdCZXVrKzRHK044NnFSd2krU0JKZU5sV0ZzR2tyQ2pmY1psK2krNm85cCs1TlAvbzMwdGlOWEU5aC9DV0JzdFdBWWIvS0sxUndhTEJacjR3RVllRGRNaWJaWGYvemtrK3laRjI0K3d2NGVZU1JYVS9SMjlnV1FHNVA2cGdUUG5wT1VJbVdTQmdZZ0ZzTlU1dEZzSUZqQlVsRnFtb1FabHBuSkpUS1pGRjVja3RIVVFORFMza0VCQXNPaERCcENMcGV0UlU2QWRoUU1jQStQTitlT0Z6cWpuZTVnSVhCME1aNzBab2ZtNW9heTNtU25tdGsrRUlERkRROExjWGZPVzlxd29YVGdsb0ZOVkZIMzIyeDNIajR4T24xb2V2UkVjYTRTdDluMkt5cmRQSER6eEJGWCt4RmhDNlRvUStaNE1MSlJBM2xlQktzblNSVXB3U050Y0RRS2s4NmJvK0RuSk9aUlhHMDhvT3RrYzFhUURHZzhnVkxKajVtTndZQnc3YUtCTkliRFE5L1UyMTdXY09qYlgrcDROdEJwK2w2WVl6ZmFBanl1Q1d2YVlIRUFsMUJPamVzcHlVTElnNHVZNW9LcGlwYXI1Q3JCWEVtckJMVWdmZVY1dG91ZXo5OTJhLzRjM2NYTzlkNTZHMzNOMUwzM1R1blQwNU5Ucjc1NysrVDB0TmpEaHVEYlc2RXZKOTQzYkpTME1MVWJvM2lmWWx5RXdpOGRGOFg0TUx1a3hLdVNQdjNRUTBjZmZKQitlUEd6bjEyc1h0Y0kweXZ1VjZZd0pYWjB2Y3V5aitmQml2b3ZlT0JrdC92dHhvVnJidk9mVTRzWFNsYm1VTW5LSElLZWVGOFBQdmpadmUvRTd0NjU5N05DUjl1dytqV213dnlYWURjWTFJczlNUFBEaVNEc2dwTEt3MXo1dGtET21nVUd3WFlBQlRlYVNYTHZwR1g0VnVwVHppcnJKNTRGQWpudXRxdzU3dkVoL2ZxWnZZUEhDNFg4em5pbUVFMmVYWmdzRmIzZU0zdjdsNHZGL0k1NHR0Q2RnTTlHK3IzZTE0S3FrdXBMWlcvRG43M0ozUEsydlpHdW5WMGhtb29GNDIycHlQYnhnZTJkbnNIbzluM1JycDJoVUxJNzJPTVVuN285ZzdlRFhhTGtZK0dNSzh0LzZ3Nm5YWHgzQkN1Y0hRU2F0eE1QaWVBNndGd0FWVUxmTzFuQjgySkQySmgxQzN6ZWpnN1FEdnplaUMvUzRlbnd1RHZoMVhhM081MW9BOW1SY0F1THBaVEE2d1BkM25MS240TDVFUDZlaWQ0emwrNDdTM2NjTzMzNjlCdjYrOGVucDZuanJ1T243NzQ2UlIzVjUrbTVYL3ppRjlPVmlTbkRUcWZINlk4Qkw4dFBvMUNoSmxFaXJ2STEvVFJ1eTArRCtySWtqVDUxL0tsakR6d0FyeCt2UGtIVnFxRno5ZE00eTlPdnd4akhPTHlDVFFPR0N2Z1ozbEp0U0syVnRRNkhqT1hScE1HR0ZIcHhMWVN4NEduYjNrREVFVTNJZSt3elk3NkIwR0lvN0l6MEtQeXZJdjFFcjlQZTIyZmZmYUROMWNkL1c5aVB0S2VycTZ2SDZUZFhuM29aL2swRi9admZyUFl2N3R1SE9nelk2NS9nK20vWjBLa1pyVGRSM0hWN0dSTnFmNk5LRGFiM2RlMDNkZEFmVXFYNksrR2pBSmowRE1ETTBtTmN0enhHOElLaUtVTzdybE9oUlJmK0JyVmZxTnJZaldlOXVreVYxZHZZWDdMdFpEdlpUeE56VDNreERncWpQQmVvNU5nS3BuT1dLbUJicUJqK2FFUkp3VlBXNHFuNXdONzBZR2xKUUMzQ1ZpZFRUVjdCa1RzazZsaXhVOG5tWkVTUnlBMUVVVlZseVVqMVU5UzlSbDhsZ2ljanpISEpmSmU4aEZmMThWWnYyZUV0WXBlSWZZbXMreXFXa2FkazMrTE9tY25ONVZLaE41ME1oenlkcmphN1JyYlQ3VzFZdUR4Wm56eXZDaWNidXRMYm1kL1g0RjB2TjRSRm9uUXhnalN6L093RUl6U09iMWdNOTI5T2hRYzk4bXhPRFVVSE51ZDNuQnpmdExLN1dOeDkwMlJoTWVVdkhCbWFlKzJ4MGRIclh6czdkZWZCNGZDZ25rME11d0tqUndjeTdsUUhTR0JQVzY0ck56Njh0RFd6YlRqcTdReDhNZDV6L1hUbCtIUnUrTUFydG0yOVpVKy96MXNLQk1ySEhwaGJmUDNwOGNGOXQyMGQycmN4RWZENkErOHJsRHZhYlQ3SEthOVBSejZyclA0VStPQ0x3R0hJcmcvUmtNRUxiVURLUFREYjIyQlNjekNwK1FaZWdLZXN4VlB6Z2IzcGdja0xoZnI1azJYeldnQ0h3N3lzc1M3cDAraHFzUFVyUEVNVTN5UE5yK21qYTZiN0pid21iaExZdjNmWERuM0wyS2k0LzlUcmJzZGlXMU5zaXBmaGxFQjN1OEwrQVhSSEw4bVJhYktieTRwdFE2Qi9iUjVtcXJLRmFxcUVtenVZZm96ZnU2SEsvSHhha3pEK0Q5YXJ0R1RVbjVGQXBLVXplZmlYdG1uZFFtcXVDYWV0WjY4dDhIZFRLR3NkejVYSzE5KzNjK2Q5MTVmTm4reFYvUXNybXphdTdPN3YzNzJ5Y2RQS1FuOTFMRHE0TFpPZkRROTUrN3NLR3pjV1F3WGZZR1JIUHJOdE1FcVB6MTArT1Q1KzhxSDUrWWZ3NStVNS9iYjlRMFA3YjlPTm4xdHoweU94Ukd3c0VOZzJQTHpOSHhpTDljUkd1UDRoa3pJZHBYL0V2c0hqaGZ2SkdQa1lVdVdUTU8xMmFqaTd5MjJZajhCc3l1MTRhQUdiT3RER1JXMTJHYU5lTUU5V1BlOFVweGhPZm9yaDRLY1lFWDFNdktmaVhRd3Y0OFVsUFRjNDBOUGo5MUV5TWpRd05qalcwOS9UWHl6MDlhWVM0akpMcDUxNHFiZmRPcHRwWExQMUp5TzVzbkhPR1V6bFV2NEtxREg4NGM5N2Q1Uzd1OHM3ZXMyZjJ3NGQycmJ0NEVHNkVPMXh0L2NWTTVIdTdwaXJvNTJPaXZCbk13eTYwdE43Yk1lT1k4ZDJ6QnpmOFV4UHBET203WjZhZXZkNGg4dlZJZlNnUHZva084OTFPUzhwNlVPZ016S1pLWFFlYTM4bzdHSDBjaWdLT1lRL0NjOW5Jd3IzN2ZqY0dQL2NYYUI0d1owYlZja2cyT2FnY3FYS0tUcTlZMjUycHNLT0hxTmoxWC82ejZNYmpySm4zdmUrNmcvLzRvLy82T3MwV1ByZTk0QzJmY0RYSHdPK0hzWTdDYklacHRsZGJiQzFNeXlxNnNRQVZ2VzhndlU4MGN0eW50anQvRVM4ZHAxSFRGb1lIT2d2OXVXVDdvRGJrMG02dlcyZ0FucDlQandYYWRpc1FTSE1qcFpIUnl2d3kxaWRkcVpCUTlYM2ZmcGM4RE8rRzNhVmpuVHY2cjkzN283ZjdWbytTT25CNWZDVGQ4emQyejhYUDF6YWRZTy9Hdnd4cGNmdGJ0dmt3dEhod3NiSnJXOTUxYVROYmJkN2JQcWRiOUVuTi9VUEhkMnQyeng4ZDAydWZwSjFzSitSRkNtQWJ2a09mdGtCQzFDRkR2Um5JdUdnM2FiSURwQVF3S2QrWG5NRmEvWXgrVFFQcWVMS2xrVE5ZQzBzOFJxRlB4VlpJZktsTlMzeGVENVo5eGllSGlJWTQwOFZ2TCtFRjdKaDhwNGxmcXQyTGdzWXBlTHVtQnR2clE2V2pUTExaVU56QlpVNXdBbVQ4eHNhcTE4S2xvV1dtdk56dmJXNjhmYkJVdjVnWVhKMjl1S3BpYkZ6aGFIMGZHNXl6K3lkcHhmOEl4dnpiL09YTnVYbVRzalo1SFhScFBKbmJ0K0J5ZjFubElWRkpkZXpQOXlqZnNZZFdKemNmNE4yZ3Y2NytwUTBtSW5uSGxNL0pZOWs0aGtlUy9sRytsTjJnWFJqL1JxOW1Fckd3bDBCckhIcXBHMkc0dGVveXNDdjNhUTdpbnFNVWhibHIrdUc0RGJDQS93U1lPOVdWZG8rdUc5VE1ybHgzOUI0NlVoaUpsQ09kWmU5VS9HbGtROXNIaDdhY3Z1TlNuSHFTR25reVBhaWN2Tk5jaUc5cXlzbVYvOU1pZ2FuMHYzS0RmVG1pZXRjdE9JNmlKY2JyZjR2ZGh1M0dRSExVSkNCVEowdjlHVmxTU0c3Z0ZNVmFoMDNDSXZCN2MxazNCRitXV2VXcTR2b0ZVZUdyTGQwMFZDRWRZUFdiakRBRWM5OWQzQkw0THJ3VEwvTExudE83ZGRjM29uck54Mjd1K3QwNTlUb3pPWk81eDkrMkttMWVUNHd1TmwvSUh2YlFyaXR1emcyUEtvNE02SFRDN2x0dHl3VXJ6OFVuOWh3NHNDV2hjbk1Kbi9lR2M2WHBnWjhxRkdxc09BL0JHczlpQldIYkx3MnFvS0hoRmg1N3dMWThRNFFkTVIyWHVhRk5nbTNzNExBREc2UEcvOTNkNktWVmVFbWxyaCtFdERXL01hYXYrT0RIN3p2WHgvNXl0Y2UvTmY3ZnA5KzZFTjNmZkNiMjdiUzg5VS9wWHIxblZ1WnZ2VXRieEh5QnAyUDd3Y2NJaUM3ZCtrejdYWkcyeHlNT01IV3d4QVQzKzRPZmdIY3NxYndjcUtkTHVaMCtwMWc3OFc3WTFHc0xTUXlZWDAxMjgrTnRoK3VidjVWMHZnWFlJWmZxVXBLODhLRFRUT0g3aWplOXVqTTZabjN6cHpDMzI5OUJIN0M3Kzh0dnZlcit5L3QveXI4RXo5bzl5V09aMm4xZVhZcjMzZmp4aW1kNFFPd2pyMHhZZ1VsZnIyRVZ4dnUyVjByM2VsZS9ZYTUzcjY1R3lieForL2NEZnJlRXlmMndwZWpmUHpoeFQwUEh5L0R6ejJMOFBQa0cxOTkxNXZlL0txNzMyVDRuZHU1UFpUUXV4Vlpra3pIczYvbWVFWnppRHVlc2ZaaHVVTGJiNzczZDlrelY2Zlk3TmpKSFhqT0RJTnlzYytURUo3eHRUbnh5TnU2OU5Od2JqUmUraGtpb1VBbVoxejYyWGhJSmVKd012NFNYait6cXpLMGYyVEx4RDNienQxZkhQOHUzYnVIRnZNYkU4V04rWUc1Y3ZuR0F5TUhOLzR6T3k3c3NBVFF0QmRvV2tUK2kzY3pTZTRESnJUYnNLTHd2SEhvZk40czFSQ3RyMHFkU1NmU21UVDNIdmxxVGhYajFMbGNHbGw3aGdZbU4rdk5UWitZMlAyNndkbStBeHUyWHpjemRtaGhaUFA4eE9pZXd1endnenRIRDArbTV6ZnRPUFRueGZteGVHVmt1cERhV2hyWWVIUmlhRkRQREV5WE4zU1A3dXliT05UWmZzZzQwNEZ2dUU4NmlBdHY2M1hCM21USGhZTjNwa3Q4bDdvZytKY1lOVVBibkZnMVZMZy93akF0WXAyQUNTY2wzTXgxNU1qTjFkK2dLeitGRVQ5VDNYUDhJeDlab3ArcTdxR2JpUEMxWFdFSjZLc0hxNVlvVkdFOVB0QkZGRGJ2NVZHSlpzbFd3OXp6V1dYR1lWTk1aN0lwY1Qrd0Y5MjAycGhabGJ1UlprQ3FiWjMwUTlWUDJGTTdjeGZ1ejAyZjJqanptdEsyL3NPbGJmc1Bia3R0ejlCOTlJYmpYL1c0NzF3dUg5cVNHaHFjeTZmbU4wL01lcnhJaTVIVm43RlprSU05TUpNNzlXa1haYlFkQnBMMk1RWHZwWlkwS2lzWUxsbUw4Y0tTNktwWU1za0VUem9ySm91aGdLY1RsazBQN2JFMVhVOXQ3TkMxdWhnU2o1VVV5Tk1EK28yNyt3YXYreit0WFgxc1c5VVZmL2Y2K2ZtOXhJbno3UGpqMmM5MkhNZXhIZHR4RzhlZitYTHpWWkttU1ZQeVFkSTJUZHJ5MGE0TTJtNkRTUlByWUpSdElGRUVHNk9ndGFxZzFmNkNBcHNtalVtalkweVRFTklBQ1RTMFRXS1RKb1Mwc3IrUWdMbzc1NzduanlSdXk3UkZzdVBFNzk1Mzdybm5uSGZ1dmI5enpyY25lbTRQOXZ0R090ZStUa0szWjFNTGc4SFF0ajJGbnFXMnBuM0RBN3RucFo3bEIzYk1QM1lnMjZiT091eFBQclExM1phZlNmYk1EUVRKSGZISTdNR3BmRjdIQ2JYQm9LSk12MExGZGlOWnQxKzJ2dmF3dHVPUUlnRXNnbnVVakpYdW9WTHBkM1RQMnU2clA5SHdiMm1ZdXdHUWNUOVl1aXhtOTNHSjRFZVJLZHhlMURQdGxpMkpTTXBsdTRFdGlYaWdqU0FhUDV2SWhrTnRzVUJNdG5CKzRwY3FyTWxVc3FtVkJaeHhwc2E2MkdvdFRUNi9PdFk1UDV6ZjNqRzAyTk1Ed3I0OU56d2ZIbDNOWjNic3lHUjNUR1dLQ3d2RmJRc0xqYjdNVkx4L1JiYk5wYVBqS2E4M05SNU56OW5rbFg3UUN4ODVOOWpkUFRUVTNUMVkrdlY0S2pVNnlxTFRPRmF2OERNNlZwVUJtSHZlaUhHb1RZZ1Z3eUJKemtCNXcrSEt6S3VWUkVZc1QyUjlHU0ExaTFoTldMUFZGYTZOWWZ2MDBRVy9tZ3pRTjY4ckJLVXpWU0dBTmFsS2xzZ2t2UXhyMGdkZzZsZHFiWDZ1eHVibnVjM0lES2xjWTgwQjdjN1IxNkNQNzdJK3dGcGptdHF5dGU1RmE1M21wZ21tUkRKWkRWSTVMN2lWckJDRnZrNHdNQTNiZ1IrT1VmWm16S0NseGJUcVJqcFhOZEpwd3pRNzUxSWNvWWhSMHVJTTdEQ0dDQnZEOTFnL1E4VitINmlpbHhqNE1NeUtDRk9EY2F6R3FRckFSN2UxdVlxdHpldTJOaWhJR21aV0Fkb20ySmdlWkgyQzU5TU16MnVlYkRCOHZVaGFtZ0pSV281bHNIdFdrNlRsVVhHUjIwaUk5ZkVRNndPc3Z3Qld6Vy9EWUFZcmk5YllhTlI2SzBZdGowYXRJeWhiR1VXTVh4N29MOFA0OVgzVzM0N2lMUTFnZ3hwaFNETGhEVjVZSGZPYnpWQ3Vhb2J5R0doUFNUblFuaFh2VTZnaVNnR2RqeXNreXVoOW1QVVBWa0ZZWnhWNm1WVmdvOFdwbEsyOFZNN3A1d1hha213T1RyRzJZQUZzcHZvV0lGZGpBZkpZRE1XdFVLSVZSTkhBTnMxbTRxSXVxU0pmTHBqZkZPdjdrZks0dlRCR0dUZ0lxMUhNcVVINU9xcVhxNmhlbmx4LzNEQUQ2clV2eUNRNXhEQi9OZklmcjVIL0JEZTlDZXNuMWxUczNJRHplMlZrYm00RVg2SHU3bEFva1RBZTNEMTc4T0RzN29PRFE3bE1zWmpKRGFIOXhYUGJjekNlVGY1TkJEVW1XdlZ2UksyMkdQZzM1N2FQN0dPYnZIWjFNTXd3QnZDbWtJUGd0b0QyNEtxaGtXZ3VUbFY3NGxYdGlkYTZPQ0s2T05sNkxrN0s3bnZjWmdrbzlpNDE0aDBKNWNZODZzR3p2YWRrMWRLcVdwV2syOThYVnhPZXZmMXdmenZ3TGdLOGk2RFc0YXlvTUN1ZDdIeE13K0Z0MXJwNFJlc1N1dGExQzZKYWM3cHdQUWRIUDFJZ2tlbUI4TGducWlRVVgyZkFHL0s1QXdHM002TEUzTnM3Y2hOaGYwZnNRS0tnT0h0c1ZqZXNpM09LdythV1c3ZTQxRnhjN1pKTVVjMk9LOENjQ2VBOStqV2cyMDFTSGQyT0lPT2lHNXdhRVp5YXN2T2Z6cHJBU2ZSM2RZMy85aGQzMzA5VzNzdlB6aGJlZmU4eDRJdnIydWNrQlAzN1VPdlJsL0ZaMFplUjYycDlwS0wxQ1YzclplUklOb3UrUEl5OFRpNHk1SW40OTUvekxRRTVQN1pyS0RqZ2ExZTdIUDV3eUMrM3RWejRWV0hSSkpLK0xiM0RWbHRHaHBsVS9LS29ZN2crSnhrbUx4Mm9SeHI0MzBCYndINm85ZTFIdkdvL1lMN2NDdUhLa0RnV08rOGlMckZXRThxN1p1VUpDOWU0TUsrT3pxL3M5UFE0QXRiT2x1NnRja3BORFUvMk96b3RwcGpxN2dnSmE5TnpkMWdzT2JONVc1L2RsZS91R2Jsb2JRbUUvVTZuam8zR2Mrb28wNWROL2txRVdhWm9qYjhpZ3I5aUE4ZlRiaGg0N2czUytsUFNOcGd1dmE5ajlUOG5TWkJaSjZ3T2ttaXByRUo5U3hXdnNWUk1WaFVYNFdMUmptUW82ZmU2Z2txd0NVd0djVXFWOGE5RDdEczJXZ1ZuemVlTC9kUFJnQnFjU0tjbmdtb2dPdFh2RExTNWxFQkFRVUN5dDdOVHlDZDhDVW5xVXFPNWZBVGtWb0kvOCs5NldsczkrSHBHZFRpOFhvZERaWFBxQWgxTXdYajBPVlZoL2xwQXpocHdrWEVkMnhpdjJNWUV1ZTZjMm5vMnlGMFpkK3FzY1VuTzNIQk95YUViVGlyb0NieDl0aEgzWWkvalhsSkJrdnJhcmVUUk9mb2EraGt3Mk1mZzJrN3lUYmlvay94QXdkT2FrK1FFL0xXUDdSRHZOZ2xHZ3hFTUlnOWpFSGh3ekFSK3lpRGlTUTBya1dQa2VQQk1qbkFDcGNJaUp3aDB2MlNDajNTbXFZblNwbEFUcUo3WDQyakY4bDFVcEtLdHdkVE9kaTUxUHdmdWYyelQvUjlrYUxEbjJQMmI4UDRjY1Rzb0x5SUFHU05vRW8xRTVIaE81RThLaEJxTjlKaWhBZW5CMUpBU25yZnppMWdyMExqSzBqdnY4aFRqNjY2bnAyNTQrVkxSaDZRcnJpWjRMdGxiYlZZOEFxK1FiOWJKeDJjNzBQNDJ2UXhVMzZmUmZwOUdPejdwR2M1ZXc1VjYvSEFQSHdoUFJCY2VFZHl4L2h3Vk9XSEt3NzQxWGVkYlBWNm92NW50WFptNWt3MUVrQ1RoR0VzYWJUQnF0V3ZMNkdvWXpXSGNYcGJFUmZnbFNxdU5SQktsWFI2TmlMNTFmUWluL3FzdWlzT2NDVGhqNGs5dTZJWDc2cDFncUZFeTJWZEk1cFA1YkFhcmhWbGxsN1lXdDVpNk5JbEEzL25hRi9Sanh0TnZhRHk5SDNuNkFEbUw0cUp0eU1jYXNmQXpCMCtYdzNxTTdSRm1YSXhzRndQdnlhK1pNV09MblVVNWgyL1NSTjNjaEIzYzFHbWlwOVRXMTF3Ym1oVlROMjNCNnNKZ00yRU5LOXJZOGR4bXFSaU9kZmw5bG1ZRDNacnNTc2ZTR3ZqVnEzcmNXdG9tRGV6VXJHT3VnVC84TGV2NXc0VTEvaUNmYUFsK2h6VStiYlVRMnF6UjAwaE1UV1FqcDJ4bThJSmdCTmFHRm9HdjVkYU5HNnIxR3lMUDBuVWJydWRCbmNhWS91bW03Ump2dE1ZQ05qWlUrSmNkR2M1bXlqeWMyRDY4YzJUblFGOW1XM2JiamZqWnlzQmpoQnZrSGlFZjBXSHdVenN4MHAxeUJqeWZNTEo5ekR0MWZKT0JZOGNVY2d2Yk5BcFdjU0drZi9IaXhjVUxGeDU1ZWZuRkY1ZVo3UjBFeC9najhpVEdhOTNvSEY1d3hsaU0wVWVsdmVUSjVXWE5meHE4ZGcxbzJRZTBXTEI2VlMwZEhHY3ljSGVLeEdSaVZTNWc1R2F6MldLMldEWENzQkJaTFdFMjdGc243a0pwNzI5ZVdEcC9mcW4wMmJKRzR3N3VLZkkrTGNCOWhGY2FlTVNmTWV3T0FuZE00WlBwMDZjenAwK25UeitSUGYzajNKa3orVFBQWk04OG16OEROQXh5dTRHKzd6RDZQSmpwQ21HN1FCL0lPeXdHTlh3VHVEdnNhSnBmZzhlOGtaK1ZXOHhnTVp6MkZvL3NRWUtibXpSUEgvY2lhaU42VE9CVjFNTDNTWXNlTC9Fdjh2dzcra2R5SmVyMWRuVjV2ZEZmTGkvL3Mwc0RiSGRwejVGQjdrUGcrOGVnRVk5ejU0R3N4N2tGYmthcm1WTkY3MWVnUHl6WkYzelN0Z20xN3hmNVdzaHdmZUFCeXN0ZHdJTzluSTA3dnVPbFJoYVlDWXNNL3Q0R0luR2NkTXlJbUIvczlDNlQxcW1KZFNveXFEQUdadklHL21HOFZqcDF3MHRaUG9YMXNDVEJEODVyemRhMHZpMDlPcm5yUjRVM3JrN09UKzUrdFBENzB1UmRKNWIzTEowNHNiUm4rUVRTNitHbXlBdjBLT2FXZndWODhKNVlpQkFuak8xSTZSS1pLWlN1RW42S3RKQ1drYmZlMHZ6QmViaitiN1hYMndnSmgwS255VXpwVW9FWVNsL1NvNlZQUzUvcTExTXVUWjRIQVgvemY0enRzbDFuemZlSGdmbjVnZjY1dWY3MlJIZWdQWmtrenkvMkYrYm5DLzJMUTZuMnRtU3lMZGlEc1FoY0wzMktubWVlSi9ocU5ybFI0ZzJjdTFXa1BEV0E4d0VUQ0VzM2F3UGxKbFZDSnNvUmg2eXFFVjNpOVNUN0ZBKzFOVWMwNEU4WU1hUWtyTWROZzNKb3gzMTZLVkVCRlVVUDZhdWg5bEJ1UmZGNGxKWDgvc0N1V0h3bXNKcmRyNmdlMTBwdU5UQVRqODhHZmphOGQrL3c4TDY5NmR4S1lEYlJ2U3V3bWw5enVkMnUxZXhxWUxZYkx0aWZYM1c1UGM3a2diSHhBd2ZHeHc3QTJCQ1QvQUh6NVV3c01xZXlsMWhaZnlxRzZmVWxub0p5Q292M2ZYQUVmb2lYblAzeU9EbGJRaUJTaGtONEpWYmlkUlpiY2ZaZ1R1N1VNZ3FERGNGNjJiYUFETzU5aHJ4emQrbFpNbFY2OVJNTjI2cGhqQm0rbHJzSnRyVjRiUXUxd29UYnVSOFdHM0dIeUdyR2RPSGd0eW1ZMWdSVFV1djVITmYwdEp3OHIxU2VQR3I1KzNKaXhrbytjYnltR0dSZnN5SlJ0Vit6LzdLaVhYRFZrbGE4MTg3WnNVWmpFUEdDdG1ycVRUMGRaOWdlbEM4Tlp6c0hiTWVQZTZjU1NzSjJqTkxTbjNJakFTODVlclcwUmZXWkcvOUMzMWtYQzlMR3BOdStNZmlqR2txN0x2eWpYdnhIdVllNjNOTjl5djlIek1nZjZRTDNDYjJIeVl5MWFCR3cwaG1hbUcvWjlEQVZERVRNcHY3UjJDQTY0VVVYRkFXWDdoendqWGJEV0VYT1UzVHBWYkZNZWxQb1dPUkVLamhpS2RrVUpzUVVsajkrZXBUSXhETDZOQTI5WGlDN1NwZjZMbC85c3hiVDlqWk5nc3l1NzJkaVF6OUV6am9KeVRwbE12ZjBhT2xLNmQvUTBXdFhQM3k5VUhxSnpQUmRwcDBiMWpJeXF6R21oVDREMDRWMUt4bjJYT1d1M1dQNHEyRW5QbnU1R0ZZYWFtNHlFTXowaVpFSWt6VUYwc0FJbjhKeW0zU1IwOHN2VXNOc29FM2JLMWRDVVVGUVlrYUpHaXY3T003cVBvNGdPRk9kbWF5cERHTEJVNFFySlpsY2dmZDcwOUhEMDJOMzJ3ODBwZ08rc00wV0Nib010eFBaY1JzK3FkUm85QWwybGR6UTBkYzFjT3Q0UHVSdDl6ck03aWFmcDlDckJpeEgyVU1PWGtocDljZjBNajFFeDFaSHQvNEhFUjVUR0FBQUFBRUFBQUFCQU1TZ1oraW9Ydzg4OVFBUEErZ0FBQUFBMk5EenRBQUFBQURZMFZhZS83TCs0QVJJQS9NQUFBQUdBQUlBQUFBQUFBQjQybU5nWkdCZy92WHZQQU1EUzhyL1RmOTNzSGd3QUVXUUFlTXlBTEdaQjVBQUFBQjQybzJVWFVpVFlSVEgvK2U4SlpuUk1Kb3A2YkpWSnMycG1Kbk9YRisyOVlHendGWFVSVmhaWFlRUlVVa1VrUkFrUmxmZEZXRmRWQlpCUklGOWdFUVFGYWhGWFZpRWxVUVgwVTJJNEVCWS8rZDFzM2Vqd0l2Znp2TnhublBPODMvT1hsV3N3amZBaVQ1R2h2YWdTZDlqdWY2Z1BVZE9vY255Y3Y0VGplSkdSTnVRbzFlNWZwVHIzTk1ZclErVmVpdGh1N2gyQnJsNkZubjZFU0VUMDdxTkpmb01NL1UrNDdkZ29aM0hnZlVvZFQ2SnFTTWQxbVZaakg4dVVkLy9pRTFZNDJ2cVR5RVRzeEwzMlNqdStCRDVSTDV6dnBtMjErcEVoRGJHK1dMYUFjZWRHL1RJeE4xdExqQk9MSkVyOWxjTEo5Tjh6SmUyTnFsVEVxTlhPa1kvSjlUWDFuTUtHTDJkMkxvN01XK1FwQWgrM2NkeldTalR2YVFPWlhJRkhtM21PSVFReGxHTjhmZ1BMYkRISWVzd2ZibXUyN2x2enZHTWRDQWtYNUFuMTdDQWUrdlZneXo5aG5tYVEzM3lrQ25EV0dybmNXQzFvelI5emNiVWtjNFFxdlVReWt4K3U1YTZpVHIvaTZuUDJHMmtPWTJicU5jSXNqVVVmOE40dFl6M2p2U1JRWXpaZDMwZ283Yjl4WDAzN1F1emIrNmYwS0JXamlOS1d5QW5FQlVmeE03bnhHamp3SHFWT2s5aTY5YUJDdUt4OVV1SGVqcWgxaUZiMzZsZzlIZkNkM0JpM21TU3U4ei9HWVhNVVdqM3dGUUlzM2ZTdWN5K01YU2pRR2VpbVhTUkpoSW14OGhPV1lhb3JrSWJ4NWUwRUR2TXZwekdaWm1OUlJ4Zk4yQVVsY1JsMnpITTRQdWIrUXBTeFg2WVQwbzRMaVlWOGhERnBJTGZMNWZjNEptZm1DUDN5QjBzSWFWcSt2OFdTdVYzdkYvR1VDUnIwU29IRVpZWVlIM2dkKzhsT1VNOFpCUjEwbzhhOVpPbnFMRzZVZk92TmVxMGdmamtQT3JKY3JrSkw2bVVRUVRrT2NvTnVob0I5bG9KZTdwU28vREwyM2djTWVidFJ0akt3RXJMUmVieTdHK3NZSDNMZEpnRTROVnNhbnVhZDM3Qy8ya2ZmSHFEUHR0NWh3RDEyVU9OTzFHc2pmUTdoUXJkeFBjNnl2TW5HZjhBOHRHREhQSHo3dXZobHQzc255QnlKWUw1VXMxNUEvczF3bmtML1o3U3I1eCs5VnpmbGZEYm11cW5hMGtYdjN2dDVDdmMxblRrVDl1UGZMNVpjQkl2dGlSc1VCY2dLQ09NTWNML3hFWFcxSXNTQ2FGVmc2aVNBV29YeFpya215WGU3VFUxbWsxY3VnNjVWQi9Xa1BuOUF5ZDBQdGNBQUFBQUFBQWFBQm9BR2dBYUFCb0FTZ0NjQU9nQktBRldBWUFCMGdIK0FoZ0NSZ0p5QXBBQ3VnTGlBeXdEWmdQR0JBZ0VYQVIrQkt3RTBBVDhCU1lGVGdWOEJhWUYxZ1lHQmpnR2ZBYXFCdFlIUUFkMkI2d0gyZ2dPQ01JSTlna2tDVllKcGduU0NnUUtPQXBzQ3FBS3pncjhDeW9MYWd2WURDZ01XZ3lNRE5BTS9nMUFEWEFOa2cyNERlQU9DQTRxRGs0T2hBNm1EdllQSkE5T0Q0WVBxZy93RUNZUVRCQjhFSjRReGhENEVTUVJTQkZ5RVp3UnlCSXFFbEFTZEJLYUV5b1RXQk9JRTc0VUJoUXVGRndWRkJWQ0ZZQVZyaFhhRmtnV2dCYThGdDRYQmhjdUYxZ1hmQmVlRjhJWUpoaFVHSUFZcGhqU0dQb1pKQmxNR1hvWnFCblFHZndhTGhwY0d1Z2JYaHVvSEI0Y2JoekFIU3dkWmgyYUhlWWVFQjRtSG93ZTFoOFlIMjRmd2lBS0lGNGduQ0RtSVFvaE5pRmlJWm9oeUNKT0lyNGpNaU9rSkhBaytpVmtKam9tc0NkTUo1UW55aWhXS0l3b3Zpa3VLYmdwMGlvQUtrb3FmaXEwS3VvcklDdFNLNkFyMGl3NExNUXRLaTFxTGE0dUppNW1Mdll2UGkrcUw5d3dBakFzTUZZd2RqQ3NNT1l4Q2pGNE1ib3g1aklnTWtneWdES3NNdFF5OURNYU0zUXp3RFFBTkdvMHFEVFVOUVExTWpYWU5oZzJXRGFDTnhBM1hqZTJPQUE0VkRpVU9NUTVWam1HT2NJNkRqcFlPdUE3SWp1T08rZzhMang2UE1ZOUpEMStQY0krVmo2bVB4QS9TajkyUDdJLzNFQVlRRVpBZEVDeVFQWkJLRUZXUWVKQ0lFSnNRdDVEVGtPc1JBNUVia1RpUlR4RjdrWlNSdGhIaEVmTVNCWkkwRWtXU1lwSnlFcEtTbWhLZ2txb1N1eExEa3RDUzJ4THJFdndUQlpNUEV4Z1RJUk0zazBXVFRwTlZFMTRUWmhOd2szMlRqcE9sazhFVHloUFNrOTRUNkJQdGsvU1QveFFObEJZVUhoUW5GRE1VT2hSQUZFYVVVQlJRRkZBVVVCUlFGRkFVVnBSZEZHT1VhaFJ3bEhjVWZKU0NGSWVValJTVWxKd1VwSlN0Rk1jVTRSVHVsUGtWQnhVbmxUcVZSSlZYRlY4VmFaVjFsYmFWM0JYK2xpZ1dOeFpTRm5pV2paYWxscllXeXhiY2x1VVc5WmNORnhxWExwZElsMUlYYnhlSkY1R1htSmVobDZ3WHRKZStsOHFYMGhmZGwrbVgrSmdCR0JFWUtCZzBHRWNZWHBobm1JR1ltUmllbUs2WXhoandtUlNaUHBsSW1WQVpYUmxrR1hlWmhKbWFtYUNacHBtM0dkS1ozQm5qR2VpYUFwb0tHaENhR1JvZ0dpa2FNcG80R2pnYVVacFVRQUJBQUFCcHdCY0FBUUFad0FKQUFJQUtBQlVBSTBBQUFDTURoVUFCUUFDZU5ydGxFMXJFMUVVaHM4a2FmcGhMUzBpaW5SeGNDRXFPa2x0RjdZVm9WU0tZbXBpR3dRM3dqU1pUSzZkWklhWm02YjlBNjRFdTNiaHdwOVEvQWt1WEF0dVhmc0hCSmUrOTg2Si9mUnJJU2lZWVdhZWUrNTczM3ZPUFVtSWlKMW41RkQyZVl3N1k0Zk9ZSlJ4am9ZcEZNN1ROS1hDQldoZUNBL1JSWG90WEtRcGVpczhESmNQd2lNMDZiakNvK0Rid21PMDZ6d1FQa1hubkkvQzQzVFcrU3g4bW5aelk4SVRkQ0gzRXBrNGhWR005bkp2aEIyNmxHOEo1MmdpLzF3NFR6ZnpBMzBCbXZmQ1EzUW4vMFc0U0JjTHQ0U0hhYS93UkhpRWVHaFNlQlJjRmg1emVLZ21mSXJjWWl3OFRsZUxyNFJQTzF4OEp6eEJjOE9maENmcC9NaTA4QlNOajh3dFIvRk9vb0syNWh2bG1YbXV0MzFlODV0ODE5TmNTNktuZmtQelVrKzNveVRseTIydDQzU2hWQXFVYnZjMjNFYlVLVUVMYWJYVlVnM2xoVEpjaWJyNnlzQ2w3bTlyWHZXYnF0ZFo4NE5lNkNVemJyazh1N2k2ZkwreW1PbU41UHBBY216Vkl6OUpWZFRsYkJtZjZIdkU1WThWVmZPNzJnc1NyOE1sTmdVY0hkZmJLbVdqNVBXb3BmdGU0ak1Db1dyNDNSUUo5THBOUDJHTmROYnZWYmdhKzkxTVhNa0UxM2kvMWhtWHJabXNOVGJlbHFkQ2J5UDB1WTljMmVPVnBZZnM2UVUySmFDQ3RKR29XS2R1cWtJM1NvSlNkYVVpTS8xKzMrMDBOa085RS91bVFnbkhnK3h0MVg5cDdpZk0wREpGRk5NT0phUW9vRFpwWXJwQlpacWhlVkFkRVIvdk5UeWJlTjhsenlwcTBFZjBGTkdHSFM5UkQrODJZZ24rVjVndVd5Y041NVFXcUlRcmdMOVI5R2lEWEt5S3FJTm81cHU1VnFtRlMyRk9ZUndlbVYzQmlpN2VWNDdsVXNkNDI5S3FuVkhZbzJOVkFTaUVLa0UxTG1vcTB5d3RRclZNOTZrQ091Zy9jTGwrek9YbmV6MENtN3FWelpFUDdjYS9rZStQYy9uM09sVkQxSkFIendUUER2WXIyYnF6RHZ4czN0U2tiSllEVDZaMVVBdlV0MzAxRldlSzBPWmovRkk1Z1I2NGFUdkR0aDdmcnI0SFgwWUZzZFVlZEs0Y2NyaUd5RWw5TlRjZnlPend2b05zUE5yQ3JleTNid05QTTlPWGN6V3padDhsZW1oWjQ5ejVXeGV5SHFUd05IMk9FVXV4WTJxOVhOdTFBUE5Wcks4Y1dkTzNsNHRUYk5BbTFCcmZGVlBsb0llSDFmR3hzOS92OWY5ei81MXovN1UxMy9zWE9QQUwvd3B0Vy84cEFBQjQybTFTQ1hRVFZSUzl0NFFKSkFVS0tJSWJ5T3BHYlpJMlRkMmdTd3FGMGtwTEtDQ2kwOGswR1pyT2xNbWtwYmlBQWdxQ29xSzRnaUR1Q3dMdW9PQytyOGQ5My9XNDd4NzFISmRrNXBzRWNjNlpjLy83LzcvNzN2djNvZ0QyOTNjSVVmelB4eHZTZndGN29SZGRHSTB4R0l0eE9CU0g0WEFjZ1NNeEhzVTRDaVh3d1k4QVNsR0dJTW9SUWdXT3hqRTRGc2ZoS2ZiR0UyakZCYmlORXQxUXNBVi80bTlFMllkOTZhRVhLZ3ZaRDAvaWFmYkhNeHpBSWc3RUYvaU5nemlZKzNCZkRzR3ozQS9QNFhuOGdSYzRsTU80UHcvZ2dUeUlCM000Ui9BUWZNU1JITVhSYU1PTEhJT1hFTU5Xdk15eEhJY0xjVHNQNVdFOG5FZmdFeDdKOFN6bVVTeWhqMzU4ZzFjWXdLdUk0eldXc294QmxqUEVDaDdOWTNnc3Z1SngyTW5qT1FHZmNTSnFFRVl0Sm1FeTZqQUZVMUdQYVdoQUkwN0FkRFNoR1RNUXdVeTBZQlptWXc1T3hGeWNCSTJWYUVjQ0d6R2ZWYXlHamc3OFJjQmdEY09zSmZFNko2R1RrMWtIRTBsT3dRSk9aVDJuNFV2OHpnWTI4Z1NzNUhRMndXSXp1dEROR1VneHdwbHM0U3pPNWh5ZXlMazhpZk40TWo3bUtaVFppb1hvb1lKVGNScTJZUkdqVkxFSnA3T05NY2FwNFZQT1p6c1Q3S0JPZzUzNEZtZHdBWmJnVEN5bXlTUXRwdGpGYmk1a0R4ZmhhNTZLSFR5TnArTnpub0gxMk1ERlhNSXplUmFYY2htWDgyeWV3eFZjeVhPNWlxdDVIcy9IZzNnSWZWR044L0FHM3NSYmVCdnY0SHk4aS9meElkZndBcnlIRHpBUUEzQVFEc1l0Y0dFelJ1SWEzSTE3Y0NmdXdxTjRqQmZ5SXV6Q2J0eUVtekVJRTNBeXp1RmFYc3hMdUk2WDRoRVVZVHZ1NEdXOG5GZndTbDdGOWZDaUVNZGpJdWJoRlBURFdYZ1laMk1GS2lHakNoNzB4aWh1d0NxY2k5VzhHbTRzdzNLc2c0VEIyQWY3WWdqMncxQU13LzQ0QUFkeUkzN0FqL2lKbTNnTk4vTmFYc2ZyZVFOdjVFMjhtYmZ3VnQ3R0xieWRXM0UvZnNZditCVjk4RGo2NHp1c3hmZTRGeU93QnNOeENKWnlHN2Z6RHQ3SnUzZzM3K0c5dkk4N3VKUDM4d0h1NG01WFE2Uyt2cUM2eWEyM0pqdGxSWlVxVzAyMVMzVlhkc2lLYWVqdVNpTm02R3E3dDFyUlRDWFYwWlpRRjNxcW80WWxLNHFxVzFLTklxZHZwY0UwWkVzSzI3bFMyTjcwaExQWDNHR0hyVmRZajduRGduRlNqdEdkMHJVU245L3ZtWlJOY1UxdWxVM3Y1TndkcWM0bUw2aWI0cTRUdmRVNVRGS2RwU1dpcW5mS2Z3a0RRYWxlVmxLV0t0WGJIWW5kS2xkOXVvelU0QncxNUIyVmxrbU5kcFYramZHVUhwUE5WRWRDVGxudVJxZWcxT1NrTk9XbGxBV2xabnRYaEdGdjgzL2E4UHRDcmhucFlhUVplV2xCdnppcmxDSk94Y2dlRlNOaXhJZ3pZdStJcWVreEtXSVBLclhZQmZ1MlJEWFZWSk5hVW1xSm1YS1g2bTNKVmZiT3pudTUyZmF4Tk1kTzg4ekpxU2M3V3N1aW1DeVVVZkswVm5LM283bisvWUZ5U1hYRVZoMngxWnpZcWhCYlRZdXRDc3JZWG1JSFBMR2MyUEdNMlBHOGxqV2IzS05scnhSbzg5MmE2Rk1UdW11Tzd2UDMwcjI4c0QxbXFxcWVrUFdvcGtnSlI3WkV2Z21xWFltTUNYVG5TTTgzUVZBeUhFbU1QU1F4aEFsTUo4WE1OMEc1bE13M1FhMDN1WmNKS2x4V3hnUld2Z2tDNHF4S1Nqa1ZVM3RVVElsNVU4SUVLZHNFS2NjRTNZNEp1ck1tNkhaTTBKMW5ncDY4RisxeFRMRElNY0dpN01QMlVRd3pxdWx5b285Y25GVGlocEhvSjl0M3NwSGRtb2dHeVRsS3NWVWsvOXRDTnNNdUphTCt3bDNaMEJsR2hJVnlacVpzb2oyYWlIckhpdVdFNVlrNTVkUExBWGtteXNSRk1jWG82SkNkTVRJYi9YT095b1JlKzZtYkUwYVgzTzdOUEhTSnY2UWs0QThXWlFqTnBMb2daVmhxUW0yekJ1ZHZSRnNUbWIyTU11bnJmb0VCZ1JVQ0t3VldPZWdyRzlTcG1wb1J6ZFJPUDBhMFdKRTdQZkdlenJpcTIwdFZqOHJKdUxQcytIZnBGYm1adFNSYkdYQ0ZVNmJoY0phWENDd1ZXQ1l3S0xCY1lFaWc2QzBrOGtJK2dXS0drSmdoSlBoQ2dpOGsrRUtDTHlUNFFqWmZldFJTZ1VHQjFRSnJIS3dxYzF4Y1ZTV3cyc2tQaUxvQnA2NnZ3aWZRaWYwK082ODJYRnRyWTIxdFRXR3haYldsalcvRU5kMzZCKysyOWNFQUFBQUFBUUFCLy84QUQzamFZMkFnQUFxQU1KRWhrV2tQQXdQVFBjYXZEQXovZFpoLy9UdlBkUHovTjZabmpILy9mL3V2RHVJenVBQ2hIWU1kWXh3REE0alBtUEwvTjdJNDB4N0dPTEMrUTR5UklCb0FHMmdrM2dBQWVOcXRWMnRiRzhjVm50VU5qQUVEa3JDYmRkMVJ4cUl1TzVKSjZ6akVWaHl5eTZJNFNsS0JjYnZyTk8wdUV1NzlrdlJHcituOW92eVpzNko5Nm56TFQ4dDdabFlLT09BK2ZaN3lRZWVkbVhmbVhPZk1Ra0pMRWcrak1KYXk5MFFzN3Zhbzh1QlJSTGRjdWhFbmorWG9ZVVNGWnZyUnJKZ1ZnNEU2Y0JzTkVqR0pRRzJQaFNPQ3hHK1JvMGttajF0VTBLcWhHaTBxYWprOEx0YnF3ZytvR3NnazhiTkNMZkN6WmpHZ1FyQi9KR2xlQVFUcGtFcjlvM0doVU1BeDFEaTgydURaOFdMZDhhOUtRT1dQcTA0VmE0cEVQenFNeDZ0T3dTZ3NhU3A2VkE4aTFrZXJRWkFUWERtVTlIR2ZTbXVQeGplY2hTQWNoRlFKb3dZVm0vSGVPeEhJN2lpUzFPOWphZ3RzMm1TMEdjY3lzMnhZZEFOVCtValNCcTl2TVBQamZpUVJqVkVxYWE0ZkpaaVJ2RGJINkRhajI0bWJ4SEhzSWxvMEh3eEk3RVVrZWt4dVlPejI2QnFqYTczMHlaSVlNT05KV1J6RThUQ055ZkhpT1BjZ2xrUDRvL3k0UldVdFlVR3BtY0tubWFBZjBZenlhVmI1eUFDMkpDMnFtSEFqRW5LWXpSejRraGZaWGRlYXo3OVVUTUlCbGRjYldBemtTSTZnSzlzb054R2gzU2pwdStsZUhLbTRFVXZhZWhCaHplVzQ1S2EwYUViVGhjQWJpNEpOOHl5R3lsY29GK1duVkRoNFRNNEFodERNZW9zdWFNbldMc0t0a2ppUWZBSnRKVEZUa20xajdad2VYMWdVUWVpdk42YUZjMUdmTHFSNWU0cmp3WVFBcmljeUhLbVVrMnFDTFZ4T0NFa1hSazZzUkdwVnVtMVZMSnl6bmE1amwzQS9kZTNrcGtWdEhEcGVtQmZGRUZwYzFZalhVY1NYZEZZb2hEUk10MXUwcEVHVmtpNEZiL0FCQU1nUUxmRm9ENk1sazY5bEhMUmtnaUlSZ3dFMDAzS1F5RkVpYVJsaGE5R0s3dTFIV1dtNEhWK25oVU4xMUtLcTd1MUd2UWQyMG0xZ3Ztcm1hem9USzhIREtGdFpDY2hKZlZyMitNcWh0UHpzRXY4czRZZWNWZVNpMk94SEdZY1Avdm9qWkJocWw5WWJDdHNtMkxYcnZBVTNtV2RpZU5LRi9WM01uazdXT1NuTWhLZ3F4Q3NnY1cvc09JN0pWbDJMVEJUQy9ZaFdsQzlEV2tUNUxTaVVIRXF4aHBrRU52em55aFZITEl1cThIMmZJMUdESVZqTGFyTWVmZWk1enlOdXEzQzI3clhvc3M0Y2xsY1FlSmFmMDFtUjVYTTZLN0YwZFZabWVWVm5GWmFmMTlrTXkyczZtMlg1QloxZFlPbHBOVWtFVlJLRVhNazJPZS95dFdtUlByRzRPbDE4enk2MlRpeXVUUmZmdDR0U0M3cmtuZWN3Ky9wdjZ5czdldEsvQnZ5VHNPdDUrTWRTd1QrVzErRWZ5eWI4WTdrRy8xaCtFZjZ4dkFIL1dINEovckZjaDM4czIxcDJUT1hlMUZCN0paSG9mazRTbU56aU5yYTVlRGMwM2ZUb0ppN21DN2dUWFhsT1dsVzZxYmpEUDVQaHN2ZGZudVE2VzZ5RVhIcjB3bnBXZHVwaGhPN0lYbjdsUkhqTzQ5elM4a1ZqK1lzNHpYTEN6K3JFL1QzVEZwNFhxLzhTL0xkOVQyMW10NXc2KzNvYjhZQURaOXVQVzVOdXR1Z2wzYjdjYWRIbWY2T2l3Z2VndjR3VWlkV21iTXN1OXdhRTl2NW8xRlZkTkpNSUx5RGFMNTZtVGNlcDF4RGhPMmhpcTNRWnRCTDZhdFBRc25uaDA4WEFPeHkxbFpTZEVjNjhlNW9tMi9ZOHF1QTI1R3hKQ1RlWHJkM291Q1RMMGowdXJaV2ZpMzF1dVhQbzNzcnNVRHNKVllLbjcyM0NiYzgrVDZVZ0dTb3E0M1hGY2lsSVhlQ0VXOTdUZTFLWWhvZEE3U0RIQ2hwMitPbWFDNHdXbkhlR0VtV2Jhd1dYR01rb28rREtuemtWSjdJUlRUYWlpTis4cFg2cUM0WFFtY1JDWXJhOGxzZENkUkNtVjZaTE5HZldkMVNYbFhJVzcwMUR5TTdZU0pQWWo5cXlnNWVkcmM4bkpkdVZwNElxVFl6dW4veUlzVWs4cTlyemJDa3UrVmRQV0JKTTBwWHdsODdUTGs5U3ZJWCswZVlvN3REbElPcTdlRnhsSjI1bkcwNE45L2ExVTZ0N2J2L1Vxbi9tM21mdENEVGQ4WjZsY0Z2VFhXOEUyN2pHNE5TNVZDUzBUUnZZRVJxWHVUN1hiT1JUZktuNTFuVXVVSVhyMDhiTnMrZnY2R3dPajg1a3kvOVkwdDMvVnhXelQ5ekhPZ3F0NmtTOU5PTGN6aTRhOEIxdkVwWFhNYnJyTlZRZWw5eWJhUWp1SXdSMWUrM3hXWUliWG0zVGJkenlOODZaNytFNHAxYWxsNERmMVBReXhGc2N4UkRobGp0NGdTZlJlbHR6UWROYmdGL1ZZeUYyQVBvQURvTmRQWGJNekI2QW1YbkFuQzdBUG5NWVBHUU9nNjh4aDhIWDlURjZZUUFVQVRrR3hmcllzWE9QZ096Y084eHpHSDJEZVFhOXl6eUR2c2s4Zzc3Rk9rT0FoSFV5U0Zrbmd3UFd5V0RBbk5jQmhzeGhjTWdjQm8rWncrRGJ4cTV0b084WXV4aDkxOWpGNkh2R0xrYmZOM1l4K29HeGk5RVBqVjJNZm1Uc1l2Ump4TGd6VGVCUHpJaTJBTit6OERYQTl6bm9adVJqOUZPOHRUbm5aeFl5NStlRzQrU2NYMkR6SzlOVGYybEdac2VSaGJ6alZ4WXkvZGM0SnlmOHhrSW0vTlpDSnZ3TzNIdlQ4MzV2Um9iK2dZVk0vNE9GVFA4amR1YUVQMW5JaEQ5YnlJUy9nUHZxOUx5L21wR2gvODFDcHYvZFFxYi9BenR6d2o4dFpNTElRaVo4cU1jWHpTY3VWZHh4cVZBTThkOFQybURzZXpSN1NNWHIvYVBKWTkzNkJQV2dBL29BQUhqYVkvRGV3WEFpS0dJakkyTmY1QWJHblJ3TUhBekpCUnNaMkoyMk1ERElNek5vZ1pqYmpWalVXSVE0bUxrZ1BBc21IU1laTmpDUHkya1B6d0hPQXl3SEdKZ1p1SUY4WHFjOURBNWdDT0x2QkpJTUxodFZHRHNDSXpZNGRFU0ErQ2t1R3pWQS9CMGNEQkFCQnBkSTZZM3FJS0ZkSEEwTWpDd09IY2toTUFrUTJHN0Nvc0Vpd3NITXA3V0Q4WC9yQnBiZWpVd01McHRaVTlnWVhGd0E1NlV1K1FBQUFBQUFBUUFBQUFCNDJ0V1VUVS9jTUJDRzcveUtrVTlVS2pITHFVVUpDSUdpb2k1YVByYTltM2cyY1hIc2REelpzUCsrRHM2V3BXb3Jib2hiYkkwZlArL1lUbjc2MkZwWUl3WGpYU0ZtMmFFQWRKWFh4dFdGK0xZc0R6NkowNU85dkVWV1dyRTYyUVBJZTJkKzltZzBHRjJJeXJkWld6MVkzblNZM2FMK29uaUpqM3lGMnZTdGtFOEwxdWkwSjNDcXhVSmNvMk5WazJwQnd0WDUxN21Bbm13aEd1YnVXTXBoR0o1eGtUMFJLb284RHVQMzc5RS9lZVJ0bkM5OTd6UnRYb04vTGZJQ2c2a2Qwa3RtdDYwZWdYSVNsanZHdWNaUWtlazQ5bmpham1PTHdLcXh5ZWhFbWdSWU5pWkE2UjNEblYveG9BZ2hUbGhUb1F1b0llWkJBbTRRN2k3bnNJajdwdUo1S3ZnSTM5TTV3aXliWlFrMnJSMHhhcTJNVmZjV1lURGNnSUx5N0FZVUg4TVVJeW1HTEJpYmVhcmxvcHpuY3ZSTWVmN0lrRy9KdTUzNEMwSzgyOEFUS1YwLzMyM0kxQTMvTjgzNXRncU9EbWVmb3c5Q2ZCQVFYd1Jjay8rQkZjTlp6NDJuQVB1alE0Z1NkVlRyNzU5dVRubzhpOVhLVkViWmFUam0vYkNyOVVJbFoxSWFXMFVQYnkrMm81TEw1Ly9GTDNwSmJUaz0pIGZvcm1hdCgid29mZiIpO2ZvbnQtd2VpZ2h0OjcwMDtmb250LXN0eWxlOm5vcm1hbH0ucGYtYy1sb2dpbl9faGVhZGVyLC5wZi1jLWxvZ2luX19mb290ZXJ7LS1wZi1nbG9iYWwtLUNvbG9yLS0xMDA6IHZhcigtLXBmLWdsb2JhbC0tQ29sb3ItLWxpZ2h0LTEwMCk7LS1wZi1nbG9iYWwtLUNvbG9yLS0yMDA6IHZhcigtLXBmLWdsb2JhbC0tQ29sb3ItLWxpZ2h0LTIwMCk7LS1wZi1nbG9iYWwtLUJvcmRlckNvbG9yLS0xMDA6IHZhcigtLXBmLWdsb2JhbC0tQm9yZGVyQ29sb3ItLWxpZ2h0LTEwMCk7LS1wZi1nbG9iYWwtLXByaW1hcnktY29sb3ItLTEwMDogdmFyKC0tcGYtZ2xvYmFsLS1wcmltYXJ5LWNvbG9yLS1saWdodC0xMDApOy0tcGYtZ2xvYmFsLS1saW5rLS1Db2xvcjogdmFyKC0tcGYtZ2xvYmFsLS1saW5rLS1Db2xvci0tbGlnaHQpOy0tcGYtZ2xvYmFsLS1saW5rLS1Db2xvci0taG92ZXI6IHZhcigtLXBmLWdsb2JhbC0tbGluay0tQ29sb3ItLWxpZ2h0KTstLXBmLWdsb2JhbC0tQmFja2dyb3VuZENvbG9yLS0xMDA6IHZhcigtLXBmLWdsb2JhbC0tQmFja2dyb3VuZENvbG9yLS1kYXJrLTEwMCl9LnBmLWMtbG9naW5fX2hlYWRlciAucGYtYy1jYXJkLC5wZi1jLWxvZ2luX19mb290ZXIgLnBmLWMtY2FyZHstLXBmLWMtY2FyZC0tQmFja2dyb3VuZENvbG9yOiB2YXIoLS1wZi1nbG9iYWwtLUJhY2tncm91bmRDb2xvci0tZGFyay10cmFuc3BhcmVudC0yMDApfS5wZi1jLWxvZ2luX19oZWFkZXIgLnBmLWMtYnV0dG9uLC5wZi1jLWxvZ2luX19mb290ZXIgLnBmLWMtYnV0dG9uey0tcGYtYy1idXR0b24tLW0tcHJpbWFyeS0tQ29sb3I6IHZhcigtLXBmLWdsb2JhbC0tcHJpbWFyeS1jb2xvci0tZGFyay0xMDApOy0tcGYtYy1idXR0b24tLW0tcHJpbWFyeS0taG92ZXItLUNvbG9yOiB2YXIoLS1wZi1nbG9iYWwtLXByaW1hcnktY29sb3ItLWRhcmstMTAwKTstLXBmLWMtYnV0dG9uLS1tLXByaW1hcnktLWZvY3VzLS1Db2xvcjogdmFyKC0tcGYtZ2xvYmFsLS1wcmltYXJ5LWNvbG9yLS1kYXJrLTEwMCk7LS1wZi1jLWJ1dHRvbi0tbS1wcmltYXJ5LS1hY3RpdmUtLUNvbG9yOiB2YXIoLS1wZi1nbG9iYWwtLXByaW1hcnktY29sb3ItLWRhcmstMTAwKTstLXBmLWMtYnV0dG9uLS1tLXByaW1hcnktLUJhY2tncm91bmRDb2xvcjogdmFyKC0tcGYtZ2xvYmFsLS1CYWNrZ3JvdW5kQ29sb3ItLWxpZ2h0LTEwMCk7LS1wZi1jLWJ1dHRvbi0tbS1wcmltYXJ5LS1ob3Zlci0tQmFja2dyb3VuZENvbG9yOiB2YXIoLS1wZi1nbG9iYWwtLUJhY2tncm91bmRDb2xvci0tbGlnaHQtMzAwKTstLXBmLWMtYnV0dG9uLS1tLXByaW1hcnktLWZvY3VzLS1CYWNrZ3JvdW5kQ29sb3I6IHZhcigtLXBmLWdsb2JhbC0tQmFja2dyb3VuZENvbG9yLS1saWdodC0zMDApOy0tcGYtYy1idXR0b24tLW0tcHJpbWFyeS0tYWN0aXZlLS1CYWNrZ3JvdW5kQ29sb3I6IHZhcigtLXBmLWdsb2JhbC0tQmFja2dyb3VuZENvbG9yLS1saWdodC0zMDApOy0tcGYtYy1idXR0b24tLW0tc2Vjb25kYXJ5LS1Db2xvcjogdmFyKC0tcGYtZ2xvYmFsLS1Db2xvci0tbGlnaHQtMTAwKTstLXBmLWMtYnV0dG9uLS1tLXNlY29uZGFyeS0taG92ZXItLUNvbG9yOiB2YXIoLS1wZi1nbG9iYWwtLUNvbG9yLS1saWdodC0xMDApOy0tcGYtYy1idXR0b24tLW0tc2Vjb25kYXJ5LS1mb2N1cy0tQ29sb3I6IHZhcigtLXBmLWdsb2JhbC0tQ29sb3ItLWxpZ2h0LTEwMCk7LS1wZi1jLWJ1dHRvbi0tbS1zZWNvbmRhcnktLWFjdGl2ZS0tQ29sb3I6IHZhcigtLXBmLWdsb2JhbC0tQ29sb3ItLWxpZ2h0LTEwMCk7LS1wZi1jLWJ1dHRvbi0tbS1zZWNvbmRhcnktLUJvcmRlckNvbG9yOiB2YXIoLS1wZi1nbG9iYWwtLUNvbG9yLS1saWdodC0xMDApOy0tcGYtYy1idXR0b24tLW0tc2Vjb25kYXJ5LS1ob3Zlci0tQm9yZGVyQ29sb3I6IHZhcigtLXBmLWdsb2JhbC0tQ29sb3ItLWxpZ2h0LTEwMCk7LS1wZi1jLWJ1dHRvbi0tbS1zZWNvbmRhcnktLWZvY3VzLS1Cb3JkZXJDb2xvcjogdmFyKC0tcGYtZ2xvYmFsLS1Db2xvci0tbGlnaHQtMTAwKTstLXBmLWMtYnV0dG9uLS1tLXNlY29uZGFyeS0tYWN0aXZlLS1Cb3JkZXJDb2xvcjogdmFyKC0tcGYtZ2xvYmFsLS1Db2xvci0tbGlnaHQtMTAwKX06cm9vdHstLXBmLWdsb2JhbC0tcGFsZXR0ZS0tYmxhY2stMTAwOiAjZmFmYWZhOy0tcGYtZ2xvYmFsLS1wYWxldHRlLS1ibGFjay0xNTA6ICNmNWY1ZjU7LS1wZi1nbG9iYWwtLXBhbGV0dGUtLWJsYWNrLTIwMDogI2VkZWRlZDstLXBmLWdsb2JhbC0tcGFsZXR0ZS0tYmxhY2stMzAwOiAjZDJkMmQyOy0tcGYtZ2xvYmFsLS1wYWxldHRlLS1ibGFjay00MDA6ICNiOGJiYmU7LS1wZi1nbG9iYWwtLXBhbGV0dGUtLWJsYWNrLTUwMDogIzhhOGQ5MDstLXBmLWdsb2JhbC0tcGFsZXR0ZS0tYmxhY2stNjAwOiAjNzM3Njc5Oy0tcGYtZ2xvYmFsLS1wYWxldHRlLS1ibGFjay03MDA6ICM0ZjUyNTU7LS1wZi1nbG9iYWwtLXBhbGV0dGUtLWJsYWNrLTgwMDogIzNjM2Y0MjstLXBmLWdsb2JhbC0tcGFsZXR0ZS0tYmxhY2stODUwOiAjMjEyNDI3Oy0tcGYtZ2xvYmFsLS1wYWxldHRlLS1ibGFjay05MDA6ICMxNTE1MTU7LS1wZi1nbG9iYWwtLXBhbGV0dGUtLWJsYWNrLTEwMDA6ICMwMzAzMDM7LS1wZi1nbG9iYWwtLXBhbGV0dGUtLWJsdWUtNTA6ICNkZWYzZmY7LS1wZi1nbG9iYWwtLXBhbGV0dGUtLWJsdWUtMTAwOiAjYmVlMWY0Oy0tcGYtZ2xvYmFsLS1wYWxldHRlLS1ibHVlLTIwMDogIzczYmNmNzstLXBmLWdsb2JhbC0tcGFsZXR0ZS0tYmx1ZS0zMDA6ICMyYjlhZjM7LS1wZi1nbG9iYWwtLXBhbGV0dGUtLWJsdWUtNDAwOiAjMDZjOy0tcGYtZ2xvYmFsLS1wYWxldHRlLS1ibHVlLTUwMDogIzAwNDA4MDstLXBmLWdsb2JhbC0tcGFsZXR0ZS0tYmx1ZS02MDA6ICMwMDQzNjg7LS1wZi1nbG9iYWwtLXBhbGV0dGUtLWJsdWUtNzAwOiAjMDAyMjM1Oy0tcGYtZ2xvYmFsLS1wYWxldHRlLS1jeWFuLTEwMDogI2EyZDlkOTstLXBmLWdsb2JhbC0tcGFsZXR0ZS0tY3lhbi0yMDA6ICM3M2M1YzU7LS1wZi1nbG9iYWwtLXBhbGV0dGUtLWN5YW4tMzAwOiAjMDA5NTk2Oy0tcGYtZ2xvYmFsLS1wYWxldHRlLS1jeWFuLTQwMDogIzAwNWY2MDstLXBmLWdsb2JhbC0tcGFsZXR0ZS0tY3lhbi01MDA6ICMwMDM3Mzc7LS1wZi1nbG9iYWwtLXBhbGV0dGUtLWN5YW4tNjAwOiAjMDAzZDQ0Oy0tcGYtZ2xvYmFsLS1wYWxldHRlLS1jeWFuLTcwMDogIzAwMWYyMjstLXBmLWdsb2JhbC0tcGFsZXR0ZS0tZ29sZC0xMDA6ICNmOWUwYTI7LS1wZi1nbG9iYWwtLXBhbGV0dGUtLWdvbGQtMjAwOiAjZjZkMTczOy0tcGYtZ2xvYmFsLS1wYWxldHRlLS1nb2xkLTMwMDogI2Y0YzE0NTstLXBmLWdsb2JhbC0tcGFsZXR0ZS0tZ29sZC00MDA6ICNmMGFiMDA7LS1wZi1nbG9iYWwtLXBhbGV0dGUtLWdvbGQtNTAwOiAjYzU4YzAwOy0tcGYtZ2xvYmFsLS1wYWxldHRlLS1nb2xkLTYwMDogIzc5NTYwMDstLXBmLWdsb2JhbC0tcGFsZXR0ZS0tZ29sZC03MDA6ICMzZDJjMDA7LS1wZi1nbG9iYWwtLXBhbGV0dGUtLWdyZWVuLTEwMDogI2JkZTViODstLXBmLWdsb2JhbC0tcGFsZXR0ZS0tZ3JlZW4tMjAwOiAjOTVkNThlOy0tcGYtZ2xvYmFsLS1wYWxldHRlLS1ncmVlbi0zMDA6ICM2ZWM2NjQ7LS1wZi1nbG9iYWwtLXBhbGV0dGUtLWdyZWVuLTQwMDogIzViYTM1MjstLXBmLWdsb2JhbC0tcGFsZXR0ZS0tZ3JlZW4tNTAwOiAjNDY3ZjQwOy0tcGYtZ2xvYmFsLS1wYWxldHRlLS1ncmVlbi02MDA6ICMxZTRmMTg7LS1wZi1nbG9iYWwtLXBhbGV0dGUtLWdyZWVuLTcwMDogIzBmMjgwZDstLXBmLWdsb2JhbC0tcGFsZXR0ZS0tbGlnaHQtYmx1ZS0xMDA6ICNiZWVkZjk7LS1wZi1nbG9iYWwtLXBhbGV0dGUtLWxpZ2h0LWJsdWUtMjAwOiAjN2NkYmYzOy0tcGYtZ2xvYmFsLS1wYWxldHRlLS1saWdodC1ibHVlLTMwMDogIzM1Y2FlZDstLXBmLWdsb2JhbC0tcGFsZXR0ZS0tbGlnaHQtYmx1ZS00MDA6ICMwMGI5ZTQ7LS1wZi1nbG9iYWwtLXBhbGV0dGUtLWxpZ2h0LWJsdWUtNTAwOiAjMDA4YmFkOy0tcGYtZ2xvYmFsLS1wYWxldHRlLS1saWdodC1ibHVlLTYwMDogIzAwNWM3MzstLXBmLWdsb2JhbC0tcGFsZXR0ZS0tbGlnaHQtYmx1ZS03MDA6ICMwMDJkMzk7LS1wZi1nbG9iYWwtLXBhbGV0dGUtLWxpZ2h0LWdyZWVuLTEwMDogI2U0ZjViYzstLXBmLWdsb2JhbC0tcGFsZXR0ZS0tbGlnaHQtZ3JlZW4tMjAwOiAjYzhlYjc5Oy0tcGYtZ2xvYmFsLS1wYWxldHRlLS1saWdodC1ncmVlbi0zMDA6ICNhY2UxMmU7LS1wZi1nbG9iYWwtLXBhbGV0dGUtLWxpZ2h0LWdyZWVuLTQwMDogIzkyZDQwMDstLXBmLWdsb2JhbC0tcGFsZXR0ZS0tbGlnaHQtZ3JlZW4tNTAwOiAjNmNhMTAwOy0tcGYtZ2xvYmFsLS1wYWxldHRlLS1saWdodC1ncmVlbi02MDA6ICM0ODZiMDA7LS1wZi1nbG9iYWwtLXBhbGV0dGUtLWxpZ2h0LWdyZWVuLTcwMDogIzI1MzYwMDstLXBmLWdsb2JhbC0tcGFsZXR0ZS0tb3JhbmdlLTEwMDogI2Y0YjY3ODstLXBmLWdsb2JhbC0tcGFsZXR0ZS0tb3JhbmdlLTIwMDogI2VmOTIzNDstLXBmLWdsb2JhbC0tcGFsZXR0ZS0tb3JhbmdlLTMwMDogI2VjN2EwODstLXBmLWdsb2JhbC0tcGFsZXR0ZS0tb3JhbmdlLTQwMDogI2M0NjEwMDstLXBmLWdsb2JhbC0tcGFsZXR0ZS0tb3JhbmdlLTUwMDogIzhmNDcwMDstLXBmLWdsb2JhbC0tcGFsZXR0ZS0tb3JhbmdlLTYwMDogIzc3M2QwMDstLXBmLWdsb2JhbC0tcGFsZXR0ZS0tb3JhbmdlLTcwMDogIzNiMWYwMDstLXBmLWdsb2JhbC0tcGFsZXR0ZS0tcHVycGxlLTEwMDogI2NiYzFmZjstLXBmLWdsb2JhbC0tcGFsZXR0ZS0tcHVycGxlLTIwMDogI2IyYTNmZjstLXBmLWdsb2JhbC0tcGFsZXR0ZS0tcHVycGxlLTMwMDogI2ExOGZmZjstLXBmLWdsb2JhbC0tcGFsZXR0ZS0tcHVycGxlLTQwMDogIzg0NzZkMTstLXBmLWdsb2JhbC0tcGFsZXR0ZS0tcHVycGxlLTUwMDogIzY3NTNhYzstLXBmLWdsb2JhbC0tcGFsZXR0ZS0tcHVycGxlLTYwMDogIzQwMTk5YTstLXBmLWdsb2JhbC0tcGFsZXR0ZS0tcHVycGxlLTcwMDogIzFmMDA2NjstLXBmLWdsb2JhbC0tcGFsZXR0ZS0tcmVkLTEwMDogI2M5MTkwYjstLXBmLWdsb2JhbC0tcGFsZXR0ZS0tcmVkLTIwMDogI2EzMDAwMDstLXBmLWdsb2JhbC0tcGFsZXR0ZS0tcmVkLTMwMDogIzdkMTAwNzstLXBmLWdsb2JhbC0tcGFsZXR0ZS0tcmVkLTQwMDogIzQ3MDAwMDstLXBmLWdsb2JhbC0tcGFsZXR0ZS0tcmVkLTUwMDogIzJjMDAwMDstLXBmLWdsb2JhbC0tcGFsZXR0ZS0td2hpdGU6ICNmZmY7LS1wZi1nbG9iYWwtLUJhY2tncm91bmRDb2xvci0tMTAwOiAjZmZmOy0tcGYtZ2xvYmFsLS1CYWNrZ3JvdW5kQ29sb3ItLTE1MDogI2Y1ZjVmNTstLXBmLWdsb2JhbC0tQmFja2dyb3VuZENvbG9yLS0yMDA6ICNmYWZhZmE7LS1wZi1nbG9iYWwtLUJhY2tncm91bmRDb2xvci0tMzAwOiAjZWRlZGVkOy0tcGYtZ2xvYmFsLS1CYWNrZ3JvdW5kQ29sb3ItLWxpZ2h0LTEwMDogI2ZmZjstLXBmLWdsb2JhbC0tQmFja2dyb3VuZENvbG9yLS1saWdodC0yMDA6ICNmYWZhZmE7LS1wZi1nbG9iYWwtLUJhY2tncm91bmRDb2xvci0tbGlnaHQtMzAwOiAjZWRlZGVkOy0tcGYtZ2xvYmFsLS1CYWNrZ3JvdW5kQ29sb3ItLWRhcmstMTAwOiAjMTUxNTE1Oy0tcGYtZ2xvYmFsLS1CYWNrZ3JvdW5kQ29sb3ItLWRhcmstMjAwOiAjM2MzZjQyOy0tcGYtZ2xvYmFsLS1CYWNrZ3JvdW5kQ29sb3ItLWRhcmstMzAwOiAjMjEyNDI3Oy0tcGYtZ2xvYmFsLS1CYWNrZ3JvdW5kQ29sb3ItLWRhcmstNDAwOiAjNGY1MjU1Oy0tcGYtZ2xvYmFsLS1CYWNrZ3JvdW5kQ29sb3ItLWRhcmstdHJhbnNwYXJlbnQtMTAwOiByZ2JhKDMsMywzLDAuNjIpOy0tcGYtZ2xvYmFsLS1CYWNrZ3JvdW5kQ29sb3ItLWRhcmstdHJhbnNwYXJlbnQtMjAwOiByZ2JhKDMsMywzLDAuMzIpOy0tcGYtZ2xvYmFsLS1Db2xvci0tMTAwOiAjMTUxNTE1Oy0tcGYtZ2xvYmFsLS1Db2xvci0tMjAwOiAjNzM3Njc5Oy0tcGYtZ2xvYmFsLS1Db2xvci0tMzAwOiAjM2MzZjQyOy0tcGYtZ2xvYmFsLS1Db2xvci0tNDAwOiAjOGE4ZDkwOy0tcGYtZ2xvYmFsLS1Db2xvci0tbGlnaHQtMTAwOiAjZmZmOy0tcGYtZ2xvYmFsLS1Db2xvci0tbGlnaHQtMjAwOiAjZWRlZGVkOy0tcGYtZ2xvYmFsLS1Db2xvci0tbGlnaHQtMzAwOiAjZDJkMmQyOy0tcGYtZ2xvYmFsLS1Db2xvci0tZGFyay0xMDA6ICMxNTE1MTU7LS1wZi1nbG9iYWwtLUNvbG9yLS1kYXJrLTIwMDogIzczNzY3OTstLXBmLWdsb2JhbC0tYWN0aXZlLWNvbG9yLS0xMDA6ICMwNmM7LS1wZi1nbG9iYWwtLWFjdGl2ZS1jb2xvci0tMjAwOiAjYmVlMWY0Oy0tcGYtZ2xvYmFsLS1hY3RpdmUtY29sb3ItLTMwMDogIzczYmNmNzstLXBmLWdsb2JhbC0tYWN0aXZlLWNvbG9yLS00MDA6ICMyYjlhZjM7LS1wZi1nbG9iYWwtLWRpc2FibGVkLWNvbG9yLS0xMDA6ICM3Mzc2Nzk7LS1wZi1nbG9iYWwtLWRpc2FibGVkLWNvbG9yLS0yMDA6ICNkMmQyZDI7LS1wZi1nbG9iYWwtLWRpc2FibGVkLWNvbG9yLS0zMDA6ICNlZGVkZWQ7LS1wZi1nbG9iYWwtLXByaW1hcnktY29sb3ItLTEwMDogIzA2YzstLXBmLWdsb2JhbC0tcHJpbWFyeS1jb2xvci0tMjAwOiAjMDA0MDgwOy0tcGYtZ2xvYmFsLS1wcmltYXJ5LWNvbG9yLS1saWdodC0xMDA6ICM3M2JjZjc7LS1wZi1nbG9iYWwtLXByaW1hcnktY29sb3ItLWRhcmstMTAwOiAjMDZjOy0tcGYtZ2xvYmFsLS1zZWNvbmRhcnktY29sb3ItLTEwMDogIzczNzY3OTstLXBmLWdsb2JhbC0tZGVmYXVsdC1jb2xvci0tMTAwOiAjNzNjNWM1Oy0tcGYtZ2xvYmFsLS1kZWZhdWx0LWNvbG9yLS0yMDA6ICMwMDk1OTY7LS1wZi1nbG9iYWwtLWRlZmF1bHQtY29sb3ItLTMwMDogIzAwMzczNzstLXBmLWdsb2JhbC0tc3VjY2Vzcy1jb2xvci0tMTAwOiAjOTJkNDAwOy0tcGYtZ2xvYmFsLS1zdWNjZXNzLWNvbG9yLS0yMDA6ICM0ODZiMDA7LS1wZi1nbG9iYWwtLWluZm8tY29sb3ItLTEwMDogIzczYmNmNzstLXBmLWdsb2JhbC0taW5mby1jb2xvci0tMjAwOiAjMDA0MzY4Oy0tcGYtZ2xvYmFsLS13YXJuaW5nLWNvbG9yLS0xMDA6ICNmMGFiMDA7LS1wZi1nbG9iYWwtLXdhcm5pbmctY29sb3ItLTIwMDogIzc5NTYwMDstLXBmLWdsb2JhbC0tZGFuZ2VyLWNvbG9yLS0xMDA6ICNjOTE5MGI7LS1wZi1nbG9iYWwtLWRhbmdlci1jb2xvci0tMjAwOiAjYTMwMDAwOy0tcGYtZ2xvYmFsLS1kYW5nZXItY29sb3ItLTMwMDogIzQ3MDAwMDstLXBmLWdsb2JhbC0tQm94U2hhZG93LS1zbTogMCAuMDYyNXJlbSAuMTI1cmVtIDAgcmdiYSgzLDMsMywwLjIpOy0tcGYtZ2xvYmFsLS1Cb3hTaGFkb3ctLXNtLXJpZ2h0OiAuMjVyZW0gMCAuNjI1cmVtIC0uMjVyZW0gcmdiYSgzLDMsMywwLjEyKTstLXBmLWdsb2JhbC0tQm94U2hhZG93LS1zbS1sZWZ0OiAtLjI1cmVtIDAgLjYyNXJlbSAtLjI1cmVtIHJnYmEoMywzLDMsMC4xMik7LS1wZi1nbG9iYWwtLUJveFNoYWRvdy0tc20tYm90dG9tOiAwIC4yNXJlbSAuNjI1cmVtIC0uMjVyZW0gcmdiYSgzLDMsMywwLjEyKTstLXBmLWdsb2JhbC0tQm94U2hhZG93LS1zbS10b3A6IDAgLS4yNXJlbSAuNjI1cmVtIC0uMjVyZW0gcmdiYSgzLDMsMywwLjEyKTstLXBmLWdsb2JhbC0tQm94U2hhZG93LS1tZDogMCAuMDYyNXJlbSAuMDYyNXJlbSAwcmVtIHJnYmEoMywzLDMsMC4wNSksMCAuMjVyZW0gLjVyZW0gLjI1cmVtIHJnYmEoMywzLDMsMC4wNik7LS1wZi1nbG9iYWwtLUJveFNoYWRvdy0tbWQtcmlnaHQ6IC4zMTI1cmVtIDAgLjYyNXJlbSAtLjI1cmVtIHJnYmEoMywzLDMsMC4yNSk7LS1wZi1nbG9iYWwtLUJveFNoYWRvdy0tbWQtbGVmdDogLS4zMTI1cmVtIDAgLjYyNXJlbSAtLjI1cmVtIHJnYmEoMywzLDMsMC4yNSk7LS1wZi1nbG9iYWwtLUJveFNoYWRvdy0tbWQtYm90dG9tOiAwIC4zMTI1cmVtIC42MjVyZW0gLS4yNXJlbSByZ2JhKDMsMywzLDAuMjUpOy0tcGYtZ2xvYmFsLS1Cb3hTaGFkb3ctLW1kLXRvcDogMCAtLjMxMjVyZW0gLjYyNXJlbSAtLjI1cmVtIHJnYmEoMywzLDMsMC4yNSk7LS1wZi1nbG9iYWwtLUJveFNoYWRvdy0tbGc6IDAgLjE4NzVyZW0gLjQzNzVyZW0gLjE4NzVyZW0gcmdiYSgzLDMsMywwLjEzKSwwIC42ODc1cmVtIDEuNXJlbSAxcmVtIHJnYmEoMywzLDMsMC4xMik7LS1wZi1nbG9iYWwtLUJveFNoYWRvdy0tbGctcmlnaHQ6IC43NXJlbSAwIC42MjVyZW0gLS4yNXJlbSByZ2JhKDMsMywzLDAuMDcpOy0tcGYtZ2xvYmFsLS1Cb3hTaGFkb3ctLWxnLWxlZnQ6IC0uNzVyZW0gMCAuNjI1cmVtIC0uMjVyZW0gcmdiYSgzLDMsMywwLjA3KTstLXBmLWdsb2JhbC0tQm94U2hhZG93LS1sZy1ib3R0b206IDAgLjc1cmVtIC42MjVyZW0gLS4yNXJlbSByZ2JhKDMsMywzLDAuMDcpOy0tcGYtZ2xvYmFsLS1Cb3hTaGFkb3ctLWxnLXRvcDogMCAtLjc1cmVtIC42MjVyZW0gLS4yNXJlbSByZ2JhKDMsMywzLDAuMDcpOy0tcGYtZ2xvYmFsLS1Cb3hTaGFkb3ctLWluc2V0OiBpbnNldCAwIDAgLjYyNXJlbSAwIHJnYmEoMywzLDMsMC4yNSk7LS1wZi1nbG9iYWwtLWZvbnQtcGF0aDogLi9hc3NldHMvZm9udHM7LS1wZi1nbG9iYWwtLWZvbnRpY29uLXBhdGg6IC4vYXNzZXRzL3BmaWNvbjstLXBmLWdsb2JhbC0tc3BhY2VyLS14czogLjI1cmVtOy0tcGYtZ2xvYmFsLS1zcGFjZXItLXNtOiAuNXJlbTstLXBmLWdsb2JhbC0tc3BhY2VyLS1tZDogMXJlbTstLXBmLWdsb2JhbC0tc3BhY2VyLS1sZzogMS41cmVtOy0tcGYtZ2xvYmFsLS1zcGFjZXItLXhsOiAycmVtOy0tcGYtZ2xvYmFsLS1zcGFjZXItLTJ4bDogM3JlbTstLXBmLWdsb2JhbC0tc3BhY2VyLS0zeGw6IDRyZW07LS1wZi1nbG9iYWwtLXNwYWNlci0tZm9ybS1lbGVtZW50OiAuMzc1cmVtOy0tcGYtZ2xvYmFsLS1ndXR0ZXI6IDEuNXJlbTstLXBmLWdsb2JhbC0tZ3V0dGVyLS1tZDogMXJlbTstLXBmLWdsb2JhbC0tZ29sZGVuLXJhdGlvOiAxLjY4MTstLXBmLWdsb2JhbC0tWkluZGV4LS14czogMTAwOy0tcGYtZ2xvYmFsLS1aSW5kZXgtLXNtOiAyMDA7LS1wZi1nbG9iYWwtLVpJbmRleC0tbWQ6IDMwMDstLXBmLWdsb2JhbC0tWkluZGV4LS1sZzogNDAwOy0tcGYtZ2xvYmFsLS1aSW5kZXgtLXhsOiA1MDA7LS1wZi1nbG9iYWwtLVpJbmRleC0tMnhsOiA2MDA7LS1wZi1nbG9iYWwtLWJyZWFrcG9pbnQtLXhzOiAwOy0tcGYtZ2xvYmFsLS1icmVha3BvaW50LS1zbTogNTc2cHg7LS1wZi1nbG9iYWwtLWJyZWFrcG9pbnQtLW1kOiA3NjhweDstLXBmLWdsb2JhbC0tYnJlYWtwb2ludC0tbGc6IDk5MnB4Oy0tcGYtZ2xvYmFsLS1icmVha3BvaW50LS14bDogMTIwMHB4Oy0tcGYtZ2xvYmFsLS1icmVha3BvaW50LS0yeGw6IDE0NTBweDstLXBmLWdsb2JhbC0tbGluay0tQ29sb3I6ICMwNmM7LS1wZi1nbG9iYWwtLWxpbmstLUNvbG9yLS1ob3ZlcjogIzAwNDA4MDstLXBmLWdsb2JhbC0tbGluay0tQ29sb3ItLWxpZ2h0OiAjNzNiY2Y3Oy0tcGYtZ2xvYmFsLS1saW5rLS1Db2xvci0tbGlnaHQtLWhvdmVyOiAjMmI5YWYzOy0tcGYtZ2xvYmFsLS1saW5rLS1Db2xvci0tZGFyazogIzA2YzstLXBmLWdsb2JhbC0tbGluay0tQ29sb3ItLWRhcmstLWhvdmVyOiAjMDA0MDgwOy0tcGYtZ2xvYmFsLS1saW5rLS1Gb250V2VpZ2h0OiA1MDA7LS1wZi1nbG9iYWwtLWxpbmstLVRleHREZWNvcmF0aW9uOiBub25lOy0tcGYtZ2xvYmFsLS1saW5rLS1UZXh0RGVjb3JhdGlvbi0taG92ZXI6IHVuZGVybGluZTstLXBmLWdsb2JhbC0tQm9yZGVyV2lkdGgtLXNtOiAxcHg7LS1wZi1nbG9iYWwtLUJvcmRlcldpZHRoLS1tZDogMnB4Oy0tcGYtZ2xvYmFsLS1Cb3JkZXJXaWR0aC0tbGc6IDNweDstLXBmLWdsb2JhbC0tQm9yZGVyQ29sb3ItLTEwMDogI2QyZDJkMjstLXBmLWdsb2JhbC0tQm9yZGVyQ29sb3ItLTIwMDogIzhhOGQ5MDstLXBmLWdsb2JhbC0tQm9yZGVyQ29sb3ItLTMwMDogI2VkZWRlZDstLXBmLWdsb2JhbC0tQm9yZGVyQ29sb3ItLWRhcmstMTAwOiAjZDJkMmQyOy0tcGYtZ2xvYmFsLS1Cb3JkZXJDb2xvci0tbGlnaHQtMTAwOiAjYjhiYmJlOy0tcGYtZ2xvYmFsLS1Cb3JkZXJSYWRpdXMtLXNtOiAzcHg7LS1wZi1nbG9iYWwtLUJvcmRlclJhZGl1cy0tbGc6IDMwZW07LS1wZi1nbG9iYWwtLWljb24tLUNvbG9yLS1saWdodDogIzczNzY3OTstLXBmLWdsb2JhbC0taWNvbi0tQ29sb3ItLWRhcms6ICMxNTE1MTU7LS1wZi1nbG9iYWwtLWljb24tLUZvbnRTaXplLS1zbTogLjYyNXJlbTstLXBmLWdsb2JhbC0taWNvbi0tRm9udFNpemUtLW1kOiAxLjEyNXJlbTstLXBmLWdsb2JhbC0taWNvbi0tRm9udFNpemUtLWxnOiAxLjVyZW07LS1wZi1nbG9iYWwtLWljb24tLUZvbnRTaXplLS14bDogMy4zNzVyZW07LS1wZi1nbG9iYWwtLUZvbnRGYW1pbHktLXNhbnMtc2VyaWY6IG92ZXJwYXNzLG92ZXJwYXNzLG9wZW4gc2FucywtYXBwbGUtc3lzdGVtLGJsaW5rbWFjc3lzdGVtZm9udCxTZWdvZSBVSSxyb2JvdG8sSGVsdmV0aWNhIE5ldWUsYXJpYWwsc2Fucy1zZXJpZixBcHBsZSBDb2xvciBFbW9qaSxTZWdvZSBVSSBFbW9qaSxTZWdvZSBVSSBTeW1ib2w7LS1wZi1nbG9iYWwtLUZvbnRGYW1pbHktLWhlYWRpbmctLXNhbnMtc2VyaWY6IG92ZXJwYXNzLG92ZXJwYXNzLG9wZW4gc2FucywtYXBwbGUtc3lzdGVtLGJsaW5rbWFjc3lzdGVtZm9udCxTZWdvZSBVSSxyb2JvdG8sSGVsdmV0aWNhIE5ldWUsYXJpYWwsc2Fucy1zZXJpZixBcHBsZSBDb2xvciBFbW9qaSxTZWdvZSBVSSBFbW9qaSxTZWdvZSBVSSBTeW1ib2w7LS1wZi1nbG9iYWwtLUZvbnRGYW1pbHktLW1vbm9zcGFjZTogb3ZlcnBhc3MtbW9ubyxvdmVycGFzcy1tb25vLFNGTW9uby1SZWd1bGFyLG1lbmxvLG1vbmFjbyxjb25zb2xhcyxMaWJlcmF0aW9uIE1vbm8sQ291cmllciBOZXcsbW9ub3NwYWNlOy0tcGYtZ2xvYmFsLS1Gb250RmFtaWx5LS1yZWRoYXRmb250LS1zYW5zLXNlcmlmOiBSZWRIYXRUZXh0LE92ZXJwYXNzLG92ZXJwYXNzLGhlbHZldGljYSxhcmlhbCxzYW5zLXNlcmlmOy0tcGYtZ2xvYmFsLS1Gb250RmFtaWx5LS1yZWRoYXRmb250LS1oZWFkaW5nLS1zYW5zLXNlcmlmOiBSZWRIYXREaXNwbGF5LE92ZXJwYXNzLG92ZXJwYXNzLGhlbHZldGljYSxhcmlhbCxzYW5zLXNlcmlmOy0tcGYtZ2xvYmFsLS1Gb250RmFtaWx5LS1yZWRoYXRmb250LS1tb25vc3BhY2U6IExpYmVyYXRpb24gTW9ubyxjb25zb2xhcyxTRk1vbm8tUmVndWxhcixtZW5sbyxtb25hY28sQ291cmllciBOZXcsbW9ub3NwYWNlOy0tcGYtZ2xvYmFsLS1Gb250U2l6ZS0tNHhsOiAyLjI1cmVtOy0tcGYtZ2xvYmFsLS1Gb250U2l6ZS0tM3hsOiAxLjc1cmVtOy0tcGYtZ2xvYmFsLS1Gb250U2l6ZS0tMnhsOiAxLjVyZW07LS1wZi1nbG9iYWwtLUZvbnRTaXplLS14bDogMS4yNXJlbTstLXBmLWdsb2JhbC0tRm9udFNpemUtLWxnOiAxLjEyNXJlbTstLXBmLWdsb2JhbC0tRm9udFNpemUtLW1kOiAxcmVtOy0tcGYtZ2xvYmFsLS1Gb250U2l6ZS0tc206IC44NzVyZW07LS1wZi1nbG9iYWwtLUZvbnRTaXplLS14czogLjc1cmVtOy0tcGYtZ2xvYmFsLS1Gb250V2VpZ2h0LS1saWdodDogMzAwOy0tcGYtZ2xvYmFsLS1Gb250V2VpZ2h0LS1ub3JtYWw6IDQwMDstLXBmLWdsb2JhbC0tRm9udFdlaWdodC0tc2VtaS1ib2xkOiA1MDA7LS1wZi1nbG9iYWwtLUZvbnRXZWlnaHQtLWJvbGQ6IDYwMDstLXBmLWdsb2JhbC0tRm9udFdlaWdodC0tcmVkaGF0Zm9udC0tYm9sZDogNzAwOy0tcGYtZ2xvYmFsLS1MaW5lSGVpZ2h0LS1zbTogMS4zOy0tcGYtZ2xvYmFsLS1MaW5lSGVpZ2h0LS1tZDogMS41Oy0tcGYtZ2xvYmFsLS1MaXN0U3R5bGU6IGRpc2Mgb3V0c2lkZTstLXBmLWdsb2JhbC0tVHJhbnNpdGlvbjogYWxsIDI1MG1zIGN1YmljLWJlemllcigwLjQyLCAwLCAwLjU4LCAxKTstLXBmLWdsb2JhbC0tVGltaW5nRnVuY3Rpb246IGN1YmljLWJlemllcigwLjY0NSwgMC4wNDUsIDAuMzU1LCAxKTstLXBmLWdsb2JhbC0tVHJhbnNpdGlvbkR1cmF0aW9uOiAyNTBtczstLXBmLWdsb2JhbC0tYXJyb3ctLXdpZHRoOiAuOTM3NXJlbTstLXBmLWdsb2JhbC0tYXJyb3ctLXdpZHRoLWxnOiAxLjU2MjVyZW07LS1wZi1nbG9iYWwtLXRhcmdldC1zaXplLS1NaW5XaWR0aDogNDRweDstLXBmLWdsb2JhbC0tdGFyZ2V0LXNpemUtLU1pbkhlaWdodDogNDRweH0ucGYtbS1yZWRoYXQtZm9udHstLXBmLWdsb2JhbC0tRm9udEZhbWlseS0tc2Fucy1zZXJpZjogdmFyKC0tcGYtZ2xvYmFsLS1Gb250RmFtaWx5LS1yZWRoYXRmb250LS1zYW5zLXNlcmlmKTstLXBmLWdsb2JhbC0tRm9udEZhbWlseS0taGVhZGluZy0tc2Fucy1zZXJpZjogdmFyKC0tcGYtZ2xvYmFsLS1Gb250RmFtaWx5LS1yZWRoYXRmb250LS1oZWFkaW5nLS1zYW5zLXNlcmlmKTstLXBmLWdsb2JhbC0tRm9udEZhbWlseS0tbW9ub3NwYWNlOiB2YXIoLS1wZi1nbG9iYWwtLUZvbnRGYW1pbHktLXJlZGhhdGZvbnQtLW1vbm9zcGFjZSk7LS1wZi1nbG9iYWwtLUZvbnRXZWlnaHQtLXNlbWktYm9sZDogdmFyKC0tcGYtZ2xvYmFsLS1Gb250V2VpZ2h0LS1yZWRoYXRmb250LS1ib2xkKTstLXBmLWdsb2JhbC0tRm9udFdlaWdodC0tYm9sZDogdmFyKC0tcGYtZ2xvYmFsLS1Gb250V2VpZ2h0LS1yZWRoYXRmb250LS1ib2xkKTstLXBmLWdsb2JhbC0tbGluay0tRm9udFdlaWdodDogdmFyKC0tcGYtZ2xvYmFsLS1Gb250V2VpZ2h0LS1ub3JtYWwpfWh0bWwsYm9keSxwLG9sLHVsLGxpLGRsLGR0LGRkLGJsb2NrcXVvdGUsZmlndXJlLGZpZWxkc2V0LGxlZ2VuZCx0ZXh0YXJlYSxwcmUsaWZyYW1lLGhyLGgxLGgyLGgzLGg0LGg1LGg2e3BhZGRpbmc6MDttYXJnaW46MH1odG1sLGJvZHl7aGVpZ2h0OjEwMCV9aDEsaDIsaDMsaDQsaDUsaDZ7Zm9udC1zaXplOjEwMCU7Zm9udC13ZWlnaHQ6dmFyKC0tcGYtZ2xvYmFsLS1Gb250V2VpZ2h0LS1ub3JtYWwpfXVse2xpc3Qtc3R5bGU6bm9uZX1idXR0b24saW5wdXQsb3B0Z3JvdXAsc2VsZWN0LHRleHRhcmVhe21hcmdpbjowO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOjEwMCU7bGluZS1oZWlnaHQ6dmFyKC0tcGYtZ2xvYmFsLS1MaW5lSGVpZ2h0LS1tZCk7Y29sb3I6dmFyKC0tcGYtZ2xvYmFsLS1Db2xvci0tMTAwKX1pbWcsZW1iZWQsaWZyYW1lLG9iamVjdCxhdWRpbyx2aWRlb3ttYXgtd2lkdGg6MTAwJTtoZWlnaHQ6YXV0b31pZnJhbWV7Ym9yZGVyOjB9dGFibGV7Ym9yZGVyLXNwYWNpbmc6MDtib3JkZXItY29sbGFwc2U6Y29sbGFwc2V9dGQsdGh7cGFkZGluZzowO3RleHQtYWxpZ246bGVmdH0qLCo6OmJlZm9yZSwqOjphZnRlcntib3gtc2l6aW5nOmJvcmRlci1ib3h9aHRtbHtmb250LWZhbWlseTpzYW5zLXNlcmlmO2xpbmUtaGVpZ2h0OjEuMTV9Ym9keXtmb250LWZhbWlseTp2YXIoLS1wZi1nbG9iYWwtLUZvbnRGYW1pbHktLXNhbnMtc2VyaWYpO2ZvbnQtc2l6ZTp2YXIoLS1wZi1nbG9iYWwtLUZvbnRTaXplLS1tZCk7Zm9udC13ZWlnaHQ6dmFyKC0tcGYtZ2xvYmFsLS1Gb250V2VpZ2h0LS1ub3JtYWwpO2xpbmUtaGVpZ2h0OnZhcigtLXBmLWdsb2JhbC0tTGluZUhlaWdodC0tbWQpO3RleHQtYWxpZ246bGVmdDtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLXBmLWdsb2JhbC0tQmFja2dyb3VuZENvbG9yLS0xMDApfWF7Zm9udC13ZWlnaHQ6dmFyKC0tcGYtZ2xvYmFsLS1saW5rLS1Gb250V2VpZ2h0KTtjb2xvcjp2YXIoLS1wZi1nbG9iYWwtLWxpbmstLUNvbG9yKTt0ZXh0LWRlY29yYXRpb246dmFyKC0tcGYtZ2xvYmFsLS1saW5rLS1UZXh0RGVjb3JhdGlvbil9YTpob3ZlcnstLXBmLWdsb2JhbC0tbGluay0tQ29sb3I6IHZhcigtLXBmLWdsb2JhbC0tbGluay0tQ29sb3ItLWhvdmVyKTstLXBmLWdsb2JhbC0tbGluay0tVGV4dERlY29yYXRpb246IHZhcigtLXBmLWdsb2JhbC0tbGluay0tVGV4dERlY29yYXRpb24tLWhvdmVyKX1idXR0b24sYXtjdXJzb3I6cG9pbnRlcn1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsW3R5cGU9ImJ1dHRvbiJdOjotbW96LWZvY3VzLWlubmVyLFt0eXBlPSJyZXNldCJdOjotbW96LWZvY3VzLWlubmVyLFt0eXBlPSJzdWJtaXQiXTo6LW1vei1mb2N1cy1pbm5lcntwYWRkaW5nOjA7Ym9yZGVyLXN0eWxlOm5vbmV9YnV0dG9uOi1tb3otZm9jdXNyaW5nLFt0eXBlPSJidXR0b24iXTotbW96LWZvY3VzcmluZyxbdHlwZT0icmVzZXQiXTotbW96LWZvY3VzcmluZyxbdHlwZT0ic3VibWl0Il06LW1vei1mb2N1c3Jpbmd7b3V0bGluZToxcHggZG90dGVkIEJ1dHRvblRleHR9LnBmLWMtbG9naW57LS1wZi1jLWxvZ2luLS1QYWRkaW5nVG9wOiB2YXIoLS1wZi1nbG9iYWwtLXNwYWNlci0tbGcpOy0tcGYtYy1sb2dpbi0tUGFkZGluZ0JvdHRvbTogdmFyKC0tcGYtZ2xvYmFsLS1zcGFjZXItLWxnKTstLXBmLWMtbG9naW4tLXhsLS1CYWNrZ3JvdW5kSW1hZ2U6IG5vbmU7LS1wZi1jLWxvZ2luX19jb250YWluZXItLXhsLS1HcmlkQ29sdW1uR2FwOiB2YXIoLS1wZi1nbG9iYWwtLXNwYWNlci0tM3hsKTstLXBmLWMtbG9naW5fX2NvbnRhaW5lci0tTWF4V2lkdGg6IDMxLjI1cmVtOy0tcGYtYy1sb2dpbl9fY29udGFpbmVyLS14bC0tTWF4V2lkdGg6IG5vbmU7LS1wZi1jLWxvZ2luX19jb250YWluZXItLVBhZGRpbmdMZWZ0OiA2LjEyNXJlbTstLXBmLWMtbG9naW5fX2NvbnRhaW5lci0tUGFkZGluZ1JpZ2h0OiA2LjEyNXJlbTstLXBmLWMtbG9naW5fX2NvbnRhaW5lci0teGwtLUdyaWRUZW1wbGF0ZUNvbHVtbnM6IDM0cmVtIG1pbm1heChhdXRvLCAzNHJlbSk7LS1wZi1jLWxvZ2luX19oZWFkZXItLU1hcmdpbkJvdHRvbTogdmFyKC0tcGYtZ2xvYmFsLS1zcGFjZXItLW1kKTstLXBmLWMtbG9naW5fX2hlYWRlci0tc20tLVBhZGRpbmdMZWZ0OiB2YXIoLS1wZi1nbG9iYWwtLXNwYWNlci0tbWQpOy0tcGYtYy1sb2dpbl9faGVhZGVyLS1zbS0tUGFkZGluZ1JpZ2h0OiB2YXIoLS1wZi1nbG9iYWwtLXNwYWNlci0tbWQpOy0tcGYtYy1sb2dpbl9faGVhZGVyLS14bC0tTWFyZ2luQm90dG9tOiB2YXIoLS1wZi1nbG9iYWwtLXNwYWNlci0tMnhsKTstLXBmLWMtbG9naW5fX2hlYWRlci0teGwtLU1hcmdpblRvcDogdmFyKC0tcGYtZ2xvYmFsLS1zcGFjZXItLTN4bCk7LS1wZi1jLWxvZ2luX19oZWFkZXItLWMtYnJhbmQtLU1hcmdpbkJvdHRvbTogdmFyKC0tcGYtZ2xvYmFsLS1zcGFjZXItLWxnKTstLXBmLWMtbG9naW5fX2hlYWRlci0tYy1icmFuZC0teGwtLU1hcmdpbkJvdHRvbTogdmFyKC0tcGYtZ2xvYmFsLS1zcGFjZXItLTJ4bCk7LS1wZi1jLWxvZ2luX19tYWluLS1CYWNrZ3JvdW5kQ29sb3I6IHZhcigtLXBmLWdsb2JhbC0tQmFja2dyb3VuZENvbG9yLS1saWdodC0xMDApOy0tcGYtYy1sb2dpbl9fbWFpbi0teGwtLU1hcmdpbkJvdHRvbTogdmFyKC0tcGYtZ2xvYmFsLS1zcGFjZXItLWxnKTstLXBmLWMtbG9naW5fX21haW4taGVhZGVyLS1QYWRkaW5nVG9wOiB2YXIoLS1wZi1nbG9iYWwtLXNwYWNlci0tMnhsKTstLXBmLWMtbG9naW5fX21haW4taGVhZGVyLS1QYWRkaW5nUmlnaHQ6IHZhcigtLXBmLWdsb2JhbC0tc3BhY2VyLS14bCk7LS1wZi1jLWxvZ2luX19tYWluLWhlYWRlci0tUGFkZGluZ0JvdHRvbTogdmFyKC0tcGYtZ2xvYmFsLS1zcGFjZXItLW1kKTstLXBmLWMtbG9naW5fX21haW4taGVhZGVyLS1QYWRkaW5nTGVmdDogdmFyKC0tcGYtZ2xvYmFsLS1zcGFjZXItLXhsKTstLXBmLWMtbG9naW5fX21haW4taGVhZGVyLS1tZC0tUGFkZGluZ1JpZ2h0OiB2YXIoLS1wZi1nbG9iYWwtLXNwYWNlci0tMnhsKTstLXBmLWMtbG9naW5fX21haW4taGVhZGVyLS1tZC0tUGFkZGluZ0xlZnQ6IHZhcigtLXBmLWdsb2JhbC0tc3BhY2VyLS0yeGwpOy0tcGYtYy1sb2dpbl9fbWFpbi1oZWFkZXItLUNvbHVtbkdhcDogdmFyKC0tcGYtZ2xvYmFsLS1zcGFjZXItLW1kKTstLXBmLWMtbG9naW5fX21haW4taGVhZGVyLS1Sb3dHYXA6IHZhcigtLXBmLWdsb2JhbC0tc3BhY2VyLS1tZCk7LS1wZi1jLWxvZ2luX19tYWluLWhlYWRlci1kZXNjLS1NYXJnaW5Cb3R0b206IHZhcigtLXBmLWdsb2JhbC0tc3BhY2VyLS1zbSk7LS1wZi1jLWxvZ2luX19tYWluLWhlYWRlci1kZXNjLS1tZC0tTWFyZ2luQm90dG9tOiAwOy0tcGYtYy1sb2dpbl9fbWFpbi1oZWFkZXItZGVzYy0tRm9udFNpemU6IHZhcigtLXBmLWdsb2JhbC0tRm9udFNpemUtLXNtKTstLXBmLWMtbG9naW5fX21haW4tYm9keS0tUGFkZGluZ1JpZ2h0OiB2YXIoLS1wZi1nbG9iYWwtLXNwYWNlci0teGwpOy0tcGYtYy1sb2dpbl9fbWFpbi1ib2R5LS1QYWRkaW5nQm90dG9tOiB2YXIoLS1wZi1nbG9iYWwtLXNwYWNlci0teGwpOy0tcGYtYy1sb2dpbl9fbWFpbi1ib2R5LS1QYWRkaW5nTGVmdDogdmFyKC0tcGYtZ2xvYmFsLS1zcGFjZXItLXhsKTstLXBmLWMtbG9naW5fX21haW4tYm9keS0tbWQtLVBhZGRpbmdSaWdodDogdmFyKC0tcGYtZ2xvYmFsLS1zcGFjZXItLTJ4bCk7LS1wZi1jLWxvZ2luX19tYWluLWJvZHktLW1kLS1QYWRkaW5nTGVmdDogdmFyKC0tcGYtZ2xvYmFsLS1zcGFjZXItLTJ4bCk7LS1wZi1jLWxvZ2luX19tYWluLWJvZHktLWMtZm9ybV9faGVscGVyLXRleHQtaWNvbi0tRm9udFNpemU6IHZhcigtLXBmLWdsb2JhbC0taWNvbi0tRm9udFNpemUtLW1kKTstLXBmLWMtbG9naW5fX21haW4tYm9keS0tYy1mb3JtX19oZWxwZXItdGV4dC1pY29uLS1NYXJnaW5SaWdodDogdmFyKC0tcGYtZ2xvYmFsLS1zcGFjZXItLXNtKTstLXBmLWMtbG9naW5fX21haW4tZm9vdGVyLS1QYWRkaW5nQm90dG9tOiB2YXIoLS1wZi1nbG9iYWwtLXNwYWNlci0tM3hsKTstLXBmLWMtbG9naW5fX21haW4tZm9vdGVyLS1jLXRpdGxlLS1NYXJnaW5Cb3R0b206IHZhcigtLXBmLWdsb2JhbC0tc3BhY2VyLS1tZCk7LS1wZi1jLWxvZ2luX19tYWluLWZvb3Rlci1saW5rcy0tUGFkZGluZ1RvcDogdmFyKC0tcGYtZ2xvYmFsLS1zcGFjZXItLXNtKTstLXBmLWMtbG9naW5fX21haW4tZm9vdGVyLWxpbmtzLS1QYWRkaW5nUmlnaHQ6IHZhcigtLXBmLWdsb2JhbC0tc3BhY2VyLS0zeGwpOy0tcGYtYy1sb2dpbl9fbWFpbi1mb290ZXItbGlua3MtLVBhZGRpbmdCb3R0b206IHZhcigtLXBmLWdsb2JhbC0tc3BhY2VyLS14bCk7LS1wZi1jLWxvZ2luX19tYWluLWZvb3Rlci1saW5rcy0tUGFkZGluZ0xlZnQ6IHZhcigtLXBmLWdsb2JhbC0tc3BhY2VyLS0zeGwpOy0tcGYtYy1sb2dpbl9fbWFpbi1mb290ZXItbGlua3MtaXRlbS0tUGFkZGluZ1JpZ2h0OiB2YXIoLS1wZi1nbG9iYWwtLXNwYWNlci0tbWQpOy0tcGYtYy1sb2dpbl9fbWFpbi1mb290ZXItbGlua3MtaXRlbS0tUGFkZGluZ0xlZnQ6IHZhcigtLXBmLWdsb2JhbC0tc3BhY2VyLS1tZCk7LS1wZi1jLWxvZ2luX19tYWluLWZvb3Rlci1saW5rcy1pdGVtLS1NYXJnaW5Cb3R0b206IHZhcigtLXBmLWdsb2JhbC0tc3BhY2VyLS1zbSk7LS1wZi1jLWxvZ2luX19tYWluLWZvb3Rlci1saW5rcy1pdGVtLWxpbmstc3ZnLS1GaWxsOiB2YXIoLS1wZi1nbG9iYWwtLWljb24tLUNvbG9yLS1saWdodCk7LS1wZi1jLWxvZ2luX19tYWluLWZvb3Rlci1saW5rcy1pdGVtLWxpbmstc3ZnLS1XaWR0aDogdmFyKC0tcGYtZ2xvYmFsLS1pY29uLS1Gb250U2l6ZS0tbGcpOy0tcGYtYy1sb2dpbl9fbWFpbi1mb290ZXItbGlua3MtaXRlbS1saW5rLXN2Zy0tSGVpZ2h0OiB2YXIoLS1wZi1nbG9iYWwtLWljb24tLUZvbnRTaXplLS1sZyk7LS1wZi1jLWxvZ2luX19tYWluLWZvb3Rlci1saW5rcy1pdGVtLWxpbmstc3ZnLS1ob3Zlci0tRmlsbDogdmFyKC0tcGYtZ2xvYmFsLS1pY29uLS1Db2xvci0tZGFyayk7LS1wZi1jLWxvZ2luX19tYWluLWZvb3Rlci1iYW5kLS1QYWRkaW5nVG9wOiB2YXIoLS1wZi1nbG9iYWwtLXNwYWNlci0tbGcpOy0tcGYtYy1sb2dpbl9fbWFpbi1mb290ZXItYmFuZC0tUGFkZGluZ1JpZ2h0OiB2YXIoLS1wZi1nbG9iYWwtLXNwYWNlci0tbWQpOy0tcGYtYy1sb2dpbl9fbWFpbi1mb290ZXItYmFuZC0tUGFkZGluZ0JvdHRvbTogdmFyKC0tcGYtZ2xvYmFsLS1zcGFjZXItLWxnKTstLXBmLWMtbG9naW5fX21haW4tZm9vdGVyLWJhbmQtLVBhZGRpbmdMZWZ0OiB2YXIoLS1wZi1nbG9iYWwtLXNwYWNlci0tbWQpOy0tcGYtYy1sb2dpbl9fbWFpbi1mb290ZXItYmFuZC0tQmFja2dyb3VuZENvbG9yOiB2YXIoLS1wZi1nbG9iYWwtLUJhY2tncm91bmRDb2xvci0tMzAwKTstLXBmLWMtbG9naW5fX21haW4tZm9vdGVyLWJhbmQtaXRlbS0tUGFkZGluZ1RvcDogdmFyKC0tcGYtZ2xvYmFsLS1zcGFjZXItLW1kKTstLXBmLWMtbG9naW5fX2Zvb3Rlci0tc20tLVBhZGRpbmdMZWZ0OiB2YXIoLS1wZi1nbG9iYWwtLXNwYWNlci0tbWQpOy0tcGYtYy1sb2dpbl9fZm9vdGVyLS1zbS0tUGFkZGluZ1JpZ2h0OiB2YXIoLS1wZi1nbG9iYWwtLXNwYWNlci0tbWQpOy0tcGYtYy1sb2dpbl9fZm9vdGVyLS1jLWxpc3QtLVBhZGRpbmdUb3A6IHZhcigtLXBmLWdsb2JhbC0tc3BhY2VyLS1tZCk7LS1wZi1jLWxvZ2luX19mb290ZXItLWMtbGlzdC0teGwtLVBhZGRpbmdUb3A6IHZhcigtLXBmLWdsb2JhbC0tc3BhY2VyLS0yeGwpO2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO21pbi1oZWlnaHQ6MTAwdmg7cGFkZGluZy10b3A6dmFyKC0tcGYtYy1sb2dpbi0tUGFkZGluZ1RvcCk7cGFkZGluZy1ib3R0b206dmFyKC0tcGYtYy1sb2dpbi0tUGFkZGluZ0JvdHRvbSl9QG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCl7LnBmLWMtbG9naW57LS1wZi1jLWxvZ2luX19jb250YWluZXItLU1heFdpZHRoOiB2YXIoLS1wZi1jLWxvZ2luX19jb250YWluZXItLXhsLS1NYXhXaWR0aCl9fUBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpey5wZi1jLWxvZ2luey0tcGYtYy1sb2dpbl9faGVhZGVyLS1NYXJnaW5Cb3R0b206IHZhcigtLXBmLWMtbG9naW5fX2hlYWRlci0teGwtLU1hcmdpbkJvdHRvbSk7LS1wZi1jLWxvZ2luX19oZWFkZXItLWMtYnJhbmQtLU1hcmdpbkJvdHRvbTogdmFyKC0tcGYtYy1sb2dpbl9faGVhZGVyLS1jLWJyYW5kLS14bC0tTWFyZ2luQm90dG9tKX19QG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KXsucGYtYy1sb2dpbnstLXBmLWMtbG9naW5fX21haW4taGVhZGVyLS1QYWRkaW5nUmlnaHQ6IHZhcigtLXBmLWMtbG9naW5fX21haW4taGVhZGVyLS1tZC0tUGFkZGluZ1JpZ2h0KTstLXBmLWMtbG9naW5fX21haW4taGVhZGVyLS1QYWRkaW5nTGVmdDogdmFyKC0tcGYtYy1sb2dpbl9fbWFpbi1oZWFkZXItLW1kLS1QYWRkaW5nTGVmdCk7LS1wZi1jLWxvZ2luX19tYWluLWhlYWRlci1kZXNjLS1NYXJnaW5Cb3R0b206IHZhcigtLXBmLWMtbG9naW5fX21haW4taGVhZGVyLWRlc2MtLW1kLS1NYXJnaW5Cb3R0b20pfX1AbWVkaWEgKG1pbi13aWR0aDogNzY4cHgpey5wZi1jLWxvZ2luey0tcGYtYy1sb2dpbl9fbWFpbi1ib2R5LS1QYWRkaW5nUmlnaHQ6IHZhcigtLXBmLWMtbG9naW5fX21haW4tYm9keS0tbWQtLVBhZGRpbmdSaWdodCk7LS1wZi1jLWxvZ2luX19tYWluLWJvZHktLVBhZGRpbmdMZWZ0OiB2YXIoLS1wZi1jLWxvZ2luX19tYWluLWJvZHktLW1kLS1QYWRkaW5nTGVmdCl9fUBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpey5wZi1jLWxvZ2luey0tcGYtYy1sb2dpbl9fZm9vdGVyLS1jLWxpc3QtLVBhZGRpbmdUb3A6IHZhcigtLXBmLWMtbG9naW5fX2Zvb3Rlci0tYy1saXN0LS14bC0tUGFkZGluZ1RvcCl9fUBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpey5wZi1jLWxvZ2lue2JhY2tncm91bmQtaW1hZ2U6dmFyKC0tcGYtYy1sb2dpbi0teGwtLUJhY2tncm91bmRJbWFnZSl9fUBtZWRpYSAobWluLXdpZHRoOiA1NzZweCl7LnBmLWMtbG9naW57YWxpZ24taXRlbXM6Y2VudGVyfX0ucGYtYy1sb2dpbl9fY29udGFpbmVye21heC13aWR0aDp2YXIoLS1wZi1jLWxvZ2luX19jb250YWluZXItLU1heFdpZHRoKX1AbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KXsucGYtYy1sb2dpbl9fY29udGFpbmVye2Rpc3BsYXk6Z3JpZDtncmlkLWNvbHVtbi1nYXA6dmFyKC0tcGYtYy1sb2dpbl9fY29udGFpbmVyLS14bC0tR3JpZENvbHVtbkdhcCk7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnZhcigtLXBmLWMtbG9naW5fX2NvbnRhaW5lci0teGwtLUdyaWRUZW1wbGF0ZUNvbHVtbnMpO2dyaWQtdGVtcGxhdGUtYXJlYXM6Im1haW4gaGVhZGVyIiAibWFpbiBmb290ZXIiICJtYWluIC4iO3BhZGRpbmctcmlnaHQ6dmFyKC0tcGYtYy1sb2dpbl9fY29udGFpbmVyLS1QYWRkaW5nUmlnaHQpO3BhZGRpbmctbGVmdDp2YXIoLS1wZi1jLWxvZ2luX19jb250YWluZXItLVBhZGRpbmdMZWZ0KX19LnBmLWMtbG9naW5fX2hlYWRlcntjb2xvcjp2YXIoLS1wZi1nbG9iYWwtLUNvbG9yLS0xMDApO2dyaWQtYXJlYTpoZWFkZXJ9QG1lZGlhIChtYXgtd2lkdGg6IDU3NnB4KXsucGYtYy1sb2dpbl9faGVhZGVye3BhZGRpbmctcmlnaHQ6dmFyKC0tcGYtYy1sb2dpbl9faGVhZGVyLS1zbS0tUGFkZGluZ1JpZ2h0KTtwYWRkaW5nLWxlZnQ6dmFyKC0tcGYtYy1sb2dpbl9faGVhZGVyLS1zbS0tUGFkZGluZ0xlZnQpfX1AbWVkaWEgKG1pbi13aWR0aDogMTIwMHB4KXsucGYtYy1sb2dpbl9faGVhZGVye21hcmdpbi10b3A6dmFyKC0tcGYtYy1sb2dpbl9faGVhZGVyLS14bC0tTWFyZ2luVG9wKX19LnBmLWMtbG9naW5fX2hlYWRlciAucGYtYy1icmFuZHttYXJnaW4tYm90dG9tOnZhcigtLXBmLWMtbG9naW5fX2hlYWRlci0tYy1icmFuZC0tTWFyZ2luQm90dG9tKX0ucGYtYy1sb2dpbl9fbWFpbntncmlkLWFyZWE6bWFpbjtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLXBmLWMtbG9naW5fX21haW4tLUJhY2tncm91bmRDb2xvcil9LnBmLWMtbG9naW5fX21haW4+OmZpcnN0LWNoaWxkOm5vdCgucGYtYy1sb2dpbl9fbWFpbi1oZWFkZXIpe3BhZGRpbmctdG9wOnZhcigtLXBmLWMtbG9naW5fX21haW4taGVhZGVyLS1QYWRkaW5nVG9wKX0ucGYtYy1sb2dpbl9fbWFpbj46bGFzdC1jaGlsZDpub3QoLnBmLWMtbG9naW5fX21haW4tZm9vdGVyKXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1wZi1jLWxvZ2luX19tYWluLWZvb3Rlci0tUGFkZGluZ0JvdHRvbSl9QG1lZGlhIChtYXgtd2lkdGg6IDEyMDBweCl7LnBmLWMtbG9naW5fX21haW57bWFyZ2luLWJvdHRvbTp2YXIoLS1wZi1jLWxvZ2luX19tYWluLS14bC0tTWFyZ2luQm90dG9tKX19LnBmLWMtbG9naW5fX21haW4taGVhZGVye2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6MWZyIGF1dG87Y29sdW1uLWdhcDp2YXIoLS1wZi1jLWxvZ2luX19tYWluLWhlYWRlci0tQ29sdW1uR2FwKTtyb3ctZ2FwOnZhcigtLXBmLWMtbG9naW5fX21haW4taGVhZGVyLS1Sb3dHYXApO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOnZhcigtLXBmLWMtbG9naW5fX21haW4taGVhZGVyLS1QYWRkaW5nVG9wKSB2YXIoLS1wZi1jLWxvZ2luX19tYWluLWhlYWRlci0tUGFkZGluZ1JpZ2h0KSB2YXIoLS1wZi1jLWxvZ2luX19tYWluLWhlYWRlci0tUGFkZGluZ0JvdHRvbSkgdmFyKC0tcGYtYy1sb2dpbl9fbWFpbi1oZWFkZXItLVBhZGRpbmdMZWZ0KX1AbWVkaWEgKG1heC13aWR0aDogNzY4cHgpey5wZi1jLWxvZ2luX19tYWluLWhlYWRlcntncmlkLXRlbXBsYXRlLWNvbHVtbnM6MTAwJX19LnBmLWMtbG9naW5fX21haW4taGVhZGVyIC5wZi1jLWRyb3Bkb3due2dyaWQtY29sdW1uOjIgLyAzO2dyaWQtcm93OjF9QG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KXsucGYtYy1sb2dpbl9fbWFpbi1oZWFkZXIgLnBmLWMtZHJvcGRvd257Z3JpZC1jb2x1bW46YXV0bztncmlkLXJvdzphdXRvfX0ucGYtYy1sb2dpbl9fbWFpbi1oZWFkZXItZGVzY3ttYXJnaW4tYm90dG9tOnZhcigtLXBmLWMtbG9naW5fX21haW4taGVhZGVyLWRlc2MtLU1hcmdpbkJvdHRvbSk7Zm9udC1zaXplOnZhcigtLXBmLWMtbG9naW5fX21haW4taGVhZGVyLWRlc2MtLUZvbnRTaXplKTtncmlkLWNvbHVtbjoxIC8gLTF9LnBmLWMtbG9naW5fX21haW4tYm9keXtwYWRkaW5nLXJpZ2h0OnZhcigtLXBmLWMtbG9naW5fX21haW4tYm9keS0tUGFkZGluZ1JpZ2h0KTtwYWRkaW5nLWJvdHRvbTp2YXIoLS1wZi1jLWxvZ2luX19tYWluLWJvZHktLVBhZGRpbmdCb3R0b20pO3BhZGRpbmctbGVmdDp2YXIoLS1wZi1jLWxvZ2luX19tYWluLWJvZHktLVBhZGRpbmdMZWZ0KX0ucGYtYy1sb2dpbl9fbWFpbi1ib2R5IC5wZi1jLWZvcm1fX2hlbHBlci10ZXh0e2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXJ9LnBmLWMtbG9naW5fX21haW4tYm9keSAucGYtYy1mb3JtX19oZWxwZXItdGV4dCAucGYtYy1mb3JtX19oZWxwZXItdGV4dC1pY29ue21hcmdpbi1yaWdodDp2YXIoLS1wZi1jLWxvZ2luX19tYWluLWJvZHktLWMtZm9ybV9faGVscGVyLXRleHQtaWNvbi0tTWFyZ2luUmlnaHQpO2ZvbnQtc2l6ZTp2YXIoLS1wZi1jLWxvZ2luX19tYWluLWJvZHktLWMtZm9ybV9faGVscGVyLXRleHQtaWNvbi0tRm9udFNpemUpfS5wZi1jLWxvZ2luX19tYWluLWZvb3RlcntkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXB9LnBmLWMtbG9naW5fX21haW4tZm9vdGVyIC5wZi1jLXRpdGxle21hcmdpbi1ib3R0b206dmFyKC0tcGYtYy1sb2dpbl9fbWFpbi1mb290ZXItLWMtdGl0bGUtLU1hcmdpbkJvdHRvbSk7dGV4dC1hbGlnbjpjZW50ZXJ9LnBmLWMtbG9naW5fX21haW4tZm9vdGVyPip7ZmxleC1iYXNpczoxMDAlfS5wZi1jLWxvZ2luX19tYWluLWZvb3Rlci1saW5rc3tkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7anVzdGlmeS1jb250ZW50OmNlbnRlcjtwYWRkaW5nOnZhcigtLXBmLWMtbG9naW5fX21haW4tZm9vdGVyLWxpbmtzLS1QYWRkaW5nVG9wKSB2YXIoLS1wZi1jLWxvZ2luX19tYWluLWZvb3Rlci1saW5rcy0tUGFkZGluZ1JpZ2h0KSB2YXIoLS1wZi1jLWxvZ2luX19tYWluLWZvb3Rlci1saW5rcy0tUGFkZGluZ0JvdHRvbSkgdmFyKC0tcGYtYy1sb2dpbl9fbWFpbi1mb290ZXItbGlua3MtLVBhZGRpbmdMZWZ0KX0ucGYtYy1sb2dpbl9fbWFpbi1mb290ZXItbGlua3MtaXRlbXtwYWRkaW5nLXJpZ2h0OnZhcigtLXBmLWMtbG9naW5fX21haW4tZm9vdGVyLWxpbmtzLWl0ZW0tLVBhZGRpbmdSaWdodCk7cGFkZGluZy1sZWZ0OnZhcigtLXBmLWMtbG9naW5fX21haW4tZm9vdGVyLWxpbmtzLWl0ZW0tLVBhZGRpbmdMZWZ0KTttYXJnaW4tYm90dG9tOnZhcigtLXBmLWMtbG9naW5fX21haW4tZm9vdGVyLWxpbmtzLWl0ZW0tLU1hcmdpbkJvdHRvbSl9LnBmLWMtbG9naW5fX21haW4tZm9vdGVyLWxpbmtzLWl0ZW0tbGluayBzdmd7ZmlsbDp2YXIoLS1wZi1jLWxvZ2luX19tYWluLWZvb3Rlci1saW5rcy1pdGVtLWxpbmstc3ZnLS1GaWxsKTt3aWR0aDoxMDAlO21heC13aWR0aDp2YXIoLS1wZi1jLWxvZ2luX19tYWluLWZvb3Rlci1saW5rcy1pdGVtLWxpbmstc3ZnLS1XaWR0aCk7aGVpZ2h0OjEwMCU7bWF4LWhlaWdodDp2YXIoLS1wZi1jLWxvZ2luX19tYWluLWZvb3Rlci1saW5rcy1pdGVtLWxpbmstc3ZnLS1IZWlnaHQpfS5wZi1jLWxvZ2luX19tYWluLWZvb3Rlci1saW5rcy1pdGVtLWxpbms6aG92ZXIgc3Zne2ZpbGw6dmFyKC0tcGYtYy1sb2dpbl9fbWFpbi1mb290ZXItbGlua3MtaXRlbS1saW5rLXN2Zy0taG92ZXItLUZpbGwpfS5wZi1jLWxvZ2luX19tYWluLWZvb3Rlci1iYW5ke3BhZGRpbmc6dmFyKC0tcGYtYy1sb2dpbl9fbWFpbi1mb290ZXItYmFuZC0tUGFkZGluZ1RvcCkgdmFyKC0tcGYtYy1sb2dpbl9fbWFpbi1mb290ZXItYmFuZC0tUGFkZGluZ1JpZ2h0KSB2YXIoLS1wZi1jLWxvZ2luX19tYWluLWZvb3Rlci1iYW5kLS1QYWRkaW5nQm90dG9tKSB2YXIoLS1wZi1jLWxvZ2luX19tYWluLWZvb3Rlci1iYW5kLS1QYWRkaW5nTGVmdCk7dGV4dC1hbGlnbjpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1wZi1jLWxvZ2luX19tYWluLWZvb3Rlci1iYW5kLS1CYWNrZ3JvdW5kQ29sb3IpfS5wZi1jLWxvZ2luX19tYWluLWZvb3Rlci1iYW5kPiorKntwYWRkaW5nLXRvcDp2YXIoLS1wZi1jLWxvZ2luX19tYWluLWZvb3Rlci1iYW5kLWl0ZW0tLVBhZGRpbmdUb3ApfS5wZi1jLWxvZ2luX19mb290ZXJ7Y29sb3I6dmFyKC0tcGYtZ2xvYmFsLS1Db2xvci0tMTAwKTtncmlkLWFyZWE6Zm9vdGVyfUBtZWRpYSAobWF4LXdpZHRoOiA1NzZweCl7LnBmLWMtbG9naW5fX2Zvb3RlcntwYWRkaW5nLXJpZ2h0OnZhcigtLXBmLWMtbG9naW5fX2Zvb3Rlci0tc20tLVBhZGRpbmdSaWdodCk7cGFkZGluZy1sZWZ0OnZhcigtLXBmLWMtbG9naW5fX2Zvb3Rlci0tc20tLVBhZGRpbmdMZWZ0KX19LnBmLWMtbG9naW5fX2Zvb3RlciAucGYtYy1saXN0IGF7Y29sb3I6dW5zZXR9LnBmLWMtbG9naW5fX2Zvb3RlciAucGYtYy1saXN0Om5vdCg6b25seS1jaGlsZCl7cGFkZGluZy10b3A6dmFyKC0tcGYtYy1sb2dpbl9fZm9vdGVyLS1jLWxpc3QtLVBhZGRpbmdUb3ApfWJvZHl7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1wZi1nbG9iYWwtLUJhY2tncm91bmRDb2xvci0tZGFyay0xMDApO2JhY2tncm91bmQtaW1hZ2U6dXJsKGRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEQ5NGJXd2dkbVZ5YzJsdmJqMGlNUzR3SWlCbGJtTnZaR2x1WnowaWRYUm1MVGdpUHo0S1BDRXRMU0JIWlc1bGNtRjBiM0k2SUVGa2IySmxJRWxzYkhWemRISmhkRzl5SURJMExqQXVNaXdnVTFaSElFVjRjRzl5ZENCUWJIVm5MVWx1SUM0Z1UxWkhJRlpsY25OcGIyNDZJRFl1TURBZ1FuVnBiR1FnTUNrZ0lDMHRQZ284YzNabklIWmxjbk5wYjI0OUlqRXVNU0lnYVdROUlreGhlV1Z5WHpFaUlIaHRiRzV6UFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eU1EQXdMM04yWnlJZ2VHMXNibk02ZUd4cGJtczlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5MekU1T1RrdmVHeHBibXNpSUhnOUlqQndlQ0lnZVQwaU1IQjRJZ29KSUhkcFpIUm9QU0l4T1RKd2VDSWdhR1ZwWjJoMFBTSXhORFZ3ZUNJZ2RtbGxkMEp2ZUQwaU1DQXdJREU1TWlBeE5EVWlJSE4wZVd4bFBTSmxibUZpYkdVdFltRmphMmR5YjNWdVpEcHVaWGNnTUNBd0lERTVNaUF4TkRVN0lpQjRiV3c2YzNCaFkyVTlJbkJ5WlhObGNuWmxJajRLUEhOMGVXeGxJSFI1Y0dVOUluUmxlSFF2WTNOeklqNEtDUzV6ZERCN1ptbHNiRG9qTURJd016QXpPMzBLUEM5emRIbHNaVDRLUEdjK0NnazhjR0YwYUNCamJHRnpjejBpYzNRd0lpQmtQU0pOTVRJM0xqVXNPRE11TldNeE1pNDFMREFzTXpBdU5pMHlMallzTXpBdU5pMHhOeTQxWXpBdE1TNHlMREF0TWk0ekxUQXVNeTB6TGpSc0xUY3VOQzB6TWk0MFl5MHhMamN0Tnk0eExUTXVNaTB4TUM0ekxURTFMamN0TVRZdU5nb0pDV010T1M0M0xUVXRNekF1T0MweE15NHhMVE0zTGpFdE1UTXVNVU01TVM0M0xEQXVOU3c1TUN3NExEZ3pMakVzT0dNdE5pNDNMREF0TVRFdU5pMDFMall0TVRjdU9TMDFMalpqTFRZc01DMDVMamtzTkM0eExURXlMamtzTVRJdU5XTXdMREF0T0M0MExESXpMamN0T1M0MUxESTNMaklLQ1FsakxUQXVNaXd3TGpZdE1DNHlMREV1TkMwd0xqSXNNUzQ1UXpReUxqVXNOVE11TXl3M09DNDRMRGd6TGpVc01USTNMalVzT0RNdU5TQk5NVFl3TERjeUxqRmpNUzQzTERndU1pd3hMamNzT1M0eExERXVOeXd4TUM0eFl6QXNNVFF0TVRVdU55d3lNUzQ0TFRNMkxqUXNNakV1T0FvSkNXTXRORFl1T0N3d0xUZzNMamN0TWpjdU5DMDROeTQzTFRRMUxqVmpNQzB5TGpnc01DNDJMVFV1TkN3eExqVXROeTR6UXpJeUxqTXNOVElzTUM0MUxEVTFMREF1TlN3M05DNHlZekFzTXpFdU5TdzNOQzQyTERjd0xqTXNNVE16TGpjc056QXVNd29KQ1dNME5TNHpMREFzTlRZdU55MHlNQzQxTERVMkxqY3RNell1TmtNeE9UQXVPQ3c1TlM0eExERTNPUzQ1TERnd0xqY3NNVFl3TERjeUxqRWlMejRLUEM5blBnbzhMM04yWno0Syk7YmFja2dyb3VuZC1wb3NpdGlvbjoxMTAlIDEwNSU7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZTo5MCV9QG1lZGlhIChtaW4td2lkdGg6IDc2OHB4KXtib2R5e2JhY2tncm91bmQtc2l6ZTo4MCV9fUBtZWRpYSAobWluLXdpZHRoOiAxMDAwcHgpe2JvZHl7YmFja2dyb3VuZC1wb3NpdGlvbjoxMTAlIDEwMCU7YmFja2dyb3VuZC1zaXplOjcwJX19QG1lZGlhIChtaW4td2lkdGg6IDEyMDBweCl7Ym9keXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjEwMCUgNzAlO2JhY2tncm91bmQtc2l6ZTo3MCV9fUBtZWRpYSAobWluLXdpZHRoOiAxNDAwcHgpe2JvZHl7YmFja2dyb3VuZC1zaXplOjc1JX19QG1lZGlhIChtaW4td2lkdGg6IDE4MDBweCl7Ym9keXtiYWNrZ3JvdW5kLXNpemU6NzAlfX1AbWVkaWEgKG1pbi13aWR0aDogMTgwMHB4KXtib2R5e2JhY2tncm91bmQtcG9zaXRpb246NzUlIDgwJTtiYWNrZ3JvdW5kLXNpemU6NjAlfX1AbWVkaWEgKG1pbi13aWR0aDogMjIwMHB4KXtib2R5e2JhY2tncm91bmQtc2l6ZTo1MCV9fUBtZWRpYSAobWF4LXdpZHRoOiAxMTk5cHgpey5wZi1jLWxvZ2luX19jb250YWluZXJ7d2lkdGg6MTAwJX19LnBmLWMtbG9naW5fX21haW4tYm9keXtwYWRkaW5nLWJvdHRvbTp2YXIoLS1wZi1nbG9iYWwtLXNwYWNlci0tMnhsKSAhaW1wb3J0YW50fUBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpey5wZi1jLWJyYW5ke2hlaWdodDo2MHB4fX0ucGYtYy1idXR0b257LS1wZi1jLWJ1dHRvbi0tUGFkZGluZ1RvcDogdmFyKC0tcGYtZ2xvYmFsLS1zcGFjZXItLWZvcm0tZWxlbWVudCk7LS1wZi1jLWJ1dHRvbi0tUGFkZGluZ1JpZ2h0OiB2YXIoLS1wZi1nbG9iYWwtLXNwYWNlci0tbWQpOy0tcGYtYy1idXR0b24tLVBhZGRpbmdCb3R0b206IHZhcigtLXBmLWdsb2JhbC0tc3BhY2VyLS1mb3JtLWVsZW1lbnQpOy0tcGYtYy1idXR0b24tLVBhZGRpbmdMZWZ0OiB2YXIoLS1wZi1nbG9iYWwtLXNwYWNlci0tbWQpOy0tcGYtYy1idXR0b24tLUxpbmVIZWlnaHQ6IHZhcigtLXBmLWdsb2JhbC0tTGluZUhlaWdodC0tbWQpOy0tcGYtYy1idXR0b24tLUZvbnRXZWlnaHQ6IHZhcigtLXBmLWdsb2JhbC0tRm9udFdlaWdodC0tc2VtaS1ib2xkKTstLXBmLWMtYnV0dG9uLS1Gb250U2l6ZTogdmFyKC0tcGYtZ2xvYmFsLS1Gb250U2l6ZS0tbWQpOy0tcGYtYy1idXR0b24tLUJvcmRlclJhZGl1czogdmFyKC0tcGYtZ2xvYmFsLS1Cb3JkZXJSYWRpdXMtLXNtKTstLXBmLWMtYnV0dG9uLS1Cb3JkZXJDb2xvcjogdHJhbnNwYXJlbnQ7LS1wZi1jLWJ1dHRvbi0tQm9yZGVyV2lkdGg6IHZhcigtLXBmLWdsb2JhbC0tQm9yZGVyV2lkdGgtLXNtKTstLXBmLWMtYnV0dG9uLS1ob3Zlci0tQm9yZGVyV2lkdGg6IHZhcigtLXBmLWdsb2JhbC0tQm9yZGVyV2lkdGgtLW1kKTstLXBmLWMtYnV0dG9uLS1mb2N1cy0tQm9yZGVyV2lkdGg6IHZhcigtLXBmLWdsb2JhbC0tQm9yZGVyV2lkdGgtLW1kKTstLXBmLWMtYnV0dG9uLS1hY3RpdmUtLUJvcmRlcldpZHRoOiB2YXIoLS1wZi1nbG9iYWwtLUJvcmRlcldpZHRoLS1tZCk7LS1wZi1jLWJ1dHRvbi0tZGlzYWJsZWQtLUNvbG9yOiB2YXIoLS1wZi1nbG9iYWwtLWRpc2FibGVkLWNvbG9yLS0xMDApOy0tcGYtYy1idXR0b24tLWRpc2FibGVkLS1CYWNrZ3JvdW5kQ29sb3I6IHZhcigtLXBmLWdsb2JhbC0tZGlzYWJsZWQtY29sb3ItLTIwMCk7LS1wZi1jLWJ1dHRvbi0tZGlzYWJsZWQtLUJvcmRlckNvbG9yOiB0cmFuc3BhcmVudDstLXBmLWMtYnV0dG9uLS1tLXByaW1hcnktLUJhY2tncm91bmRDb2xvcjogdmFyKC0tcGYtZ2xvYmFsLS1wcmltYXJ5LWNvbG9yLS0xMDApOy0tcGYtYy1idXR0b24tLW0tcHJpbWFyeS0tQ29sb3I6IHZhcigtLXBmLWdsb2JhbC0tQ29sb3ItLWxpZ2h0LTEwMCk7LS1wZi1jLWJ1dHRvbi0tbS1wcmltYXJ5LS1ob3Zlci0tQmFja2dyb3VuZENvbG9yOiB2YXIoLS1wZi1nbG9iYWwtLXByaW1hcnktY29sb3ItLTIwMCk7LS1wZi1jLWJ1dHRvbi0tbS1wcmltYXJ5LS1ob3Zlci0tQ29sb3I6IHZhcigtLXBmLWdsb2JhbC0tQ29sb3ItLWxpZ2h0LTEwMCk7LS1wZi1jLWJ1dHRvbi0tbS1wcmltYXJ5LS1mb2N1cy0tQmFja2dyb3VuZENvbG9yOiB2YXIoLS1wZi1nbG9iYWwtLXByaW1hcnktY29sb3ItLTIwMCk7LS1wZi1jLWJ1dHRvbi0tbS1wcmltYXJ5LS1mb2N1cy0tQ29sb3I6IHZhcigtLXBmLWdsb2JhbC0tQ29sb3ItLWxpZ2h0LTEwMCk7LS1wZi1jLWJ1dHRvbi0tbS1wcmltYXJ5LS1hY3RpdmUtLUJhY2tncm91bmRDb2xvcjogdmFyKC0tcGYtZ2xvYmFsLS1wcmltYXJ5LWNvbG9yLS0yMDApOy0tcGYtYy1idXR0b24tLW0tcHJpbWFyeS0tYWN0aXZlLS1Db2xvcjogdmFyKC0tcGYtZ2xvYmFsLS1Db2xvci0tbGlnaHQtMTAwKTstLXBmLWMtYnV0dG9uLS1tLXNlY29uZGFyeS0tQmFja2dyb3VuZENvbG9yOiB0cmFuc3BhcmVudDstLXBmLWMtYnV0dG9uLS1tLXNlY29uZGFyeS0tQm9yZGVyQ29sb3I6IHZhcigtLXBmLWdsb2JhbC0tcHJpbWFyeS1jb2xvci0tMTAwKTstLXBmLWMtYnV0dG9uLS1tLXNlY29uZGFyeS0tQ29sb3I6IHZhcigtLXBmLWdsb2JhbC0tcHJpbWFyeS1jb2xvci0tMTAwKTstLXBmLWMtYnV0dG9uLS1tLXNlY29uZGFyeS0taG92ZXItLUJhY2tncm91bmRDb2xvcjogdHJhbnNwYXJlbnQ7LS1wZi1jLWJ1dHRvbi0tbS1zZWNvbmRhcnktLWhvdmVyLS1Cb3JkZXJDb2xvcjogdmFyKC0tcGYtZ2xvYmFsLS1wcmltYXJ5LWNvbG9yLS0xMDApOy0tcGYtYy1idXR0b24tLW0tc2Vjb25kYXJ5LS1ob3Zlci0tQ29sb3I6IHZhcigtLXBmLWdsb2JhbC0tcHJpbWFyeS1jb2xvci0tMTAwKTstLXBmLWMtYnV0dG9uLS1tLXNlY29uZGFyeS0tZm9jdXMtLUJhY2tncm91bmRDb2xvcjogdHJhbnNwYXJlbnQ7LS1wZi1jLWJ1dHRvbi0tbS1zZWNvbmRhcnktLWZvY3VzLS1Cb3JkZXJDb2xvcjogdmFyKC0tcGYtZ2xvYmFsLS1wcmltYXJ5LWNvbG9yLS0xMDApOy0tcGYtYy1idXR0b24tLW0tc2Vjb25kYXJ5LS1mb2N1cy0tQ29sb3I6IHZhcigtLXBmLWdsb2JhbC0tcHJpbWFyeS1jb2xvci0tMTAwKTstLXBmLWMtYnV0dG9uLS1tLXNlY29uZGFyeS0tYWN0aXZlLS1CYWNrZ3JvdW5kQ29sb3I6IHRyYW5zcGFyZW50Oy0tcGYtYy1idXR0b24tLW0tc2Vjb25kYXJ5LS1hY3RpdmUtLUJvcmRlckNvbG9yOiB2YXIoLS1wZi1nbG9iYWwtLXByaW1hcnktY29sb3ItLTEwMCk7LS1wZi1jLWJ1dHRvbi0tbS1zZWNvbmRhcnktLWFjdGl2ZS0tQ29sb3I6IHZhcigtLXBmLWdsb2JhbC0tcHJpbWFyeS1jb2xvci0tMTAwKTstLXBmLWMtYnV0dG9uLS1tLXRlcnRpYXJ5LS1CYWNrZ3JvdW5kQ29sb3I6IHRyYW5zcGFyZW50Oy0tcGYtYy1idXR0b24tLW0tdGVydGlhcnktLUJvcmRlckNvbG9yOiB2YXIoLS1wZi1nbG9iYWwtLUNvbG9yLS0xMDApOy0tcGYtYy1idXR0b24tLW0tdGVydGlhcnktLUNvbG9yOiB2YXIoLS1wZi1nbG9iYWwtLUNvbG9yLS0xMDApOy0tcGYtYy1idXR0b24tLW0tdGVydGlhcnktLWhvdmVyLS1CYWNrZ3JvdW5kQ29sb3I6IHRyYW5zcGFyZW50Oy0tcGYtYy1idXR0b24tLW0tdGVydGlhcnktLWhvdmVyLS1Cb3JkZXJDb2xvcjogdmFyKC0tcGYtZ2xvYmFsLS1Db2xvci0tMTAwKTstLXBmLWMtYnV0dG9uLS1tLXRlcnRpYXJ5LS1ob3Zlci0tQ29sb3I6IHZhcigtLXBmLWdsb2JhbC0tQ29sb3ItLTEwMCk7LS1wZi1jLWJ1dHRvbi0tbS10ZXJ0aWFyeS0tZm9jdXMtLUJhY2tncm91bmRDb2xvcjogdHJhbnNwYXJlbnQ7LS1wZi1jLWJ1dHRvbi0tbS10ZXJ0aWFyeS0tZm9jdXMtLUJvcmRlckNvbG9yOiB2YXIoLS1wZi1nbG9iYWwtLUNvbG9yLS0xMDApOy0tcGYtYy1idXR0b24tLW0tdGVydGlhcnktLWZvY3VzLS1Db2xvcjogdmFyKC0tcGYtZ2xvYmFsLS1Db2xvci0tMTAwKTstLXBmLWMtYnV0dG9uLS1tLXRlcnRpYXJ5LS1hY3RpdmUtLUJhY2tncm91bmRDb2xvcjogdHJhbnNwYXJlbnQ7LS1wZi1jLWJ1dHRvbi0tbS10ZXJ0aWFyeS0tYWN0aXZlLS1Cb3JkZXJDb2xvcjogdmFyKC0tcGYtZ2xvYmFsLS1Db2xvci0tMTAwKTstLXBmLWMtYnV0dG9uLS1tLXRlcnRpYXJ5LS1hY3RpdmUtLUNvbG9yOiB2YXIoLS1wZi1nbG9iYWwtLUNvbG9yLS0xMDApOy0tcGYtYy1idXR0b24tLW0tZGFuZ2VyLS1CYWNrZ3JvdW5kQ29sb3I6IHZhcigtLXBmLWdsb2JhbC0tZGFuZ2VyLWNvbG9yLS0xMDApOy0tcGYtYy1idXR0b24tLW0tZGFuZ2VyLS1Db2xvcjogdmFyKC0tcGYtZ2xvYmFsLS1Db2xvci0tbGlnaHQtMTAwKTstLXBmLWMtYnV0dG9uLS1tLWRhbmdlci0taG92ZXItLUJhY2tncm91bmRDb2xvcjogdmFyKC0tcGYtZ2xvYmFsLS1kYW5nZXItY29sb3ItLTIwMCk7LS1wZi1jLWJ1dHRvbi0tbS1kYW5nZXItLWhvdmVyLS1Db2xvcjogdmFyKC0tcGYtZ2xvYmFsLS1Db2xvci0tbGlnaHQtMTAwKTstLXBmLWMtYnV0dG9uLS1tLWRhbmdlci0tZm9jdXMtLUJhY2tncm91bmRDb2xvcjogdmFyKC0tcGYtZ2xvYmFsLS1kYW5nZXItY29sb3ItLTIwMCk7LS1wZi1jLWJ1dHRvbi0tbS1kYW5nZXItLWZvY3VzLS1Db2xvcjogdmFyKC0tcGYtZ2xvYmFsLS1Db2xvci0tbGlnaHQtMTAwKTstLXBmLWMtYnV0dG9uLS1tLWRhbmdlci0tYWN0aXZlLS1CYWNrZ3JvdW5kQ29sb3I6IHZhcigtLXBmLWdsb2JhbC0tZGFuZ2VyLWNvbG9yLS0yMDApOy0tcGYtYy1idXR0b24tLW0tZGFuZ2VyLS1hY3RpdmUtLUNvbG9yOiB2YXIoLS1wZi1nbG9iYWwtLUNvbG9yLS1saWdodC0xMDApOy0tcGYtYy1idXR0b24tLW0tbGluay0tQ29sb3I6IHZhcigtLXBmLWdsb2JhbC0tbGluay0tQ29sb3IpOy0tcGYtYy1idXR0b24tLW0tbGluay0taG92ZXItLUNvbG9yOiB2YXIoLS1wZi1nbG9iYWwtLWxpbmstLUNvbG9yLS1ob3Zlcik7LS1wZi1jLWJ1dHRvbi0tbS1saW5rLS1mb2N1cy0tQ29sb3I6IHZhcigtLXBmLWdsb2JhbC0tbGluay0tQ29sb3ItLWhvdmVyKTstLXBmLWMtYnV0dG9uLS1tLWxpbmstLWFjdGl2ZS0tQ29sb3I6IHZhcigtLXBmLWdsb2JhbC0tbGluay0tQ29sb3ItLWhvdmVyKTstLXBmLWMtYnV0dG9uLS1tLWxpbmstLWRpc2FibGVkLS1CYWNrZ3JvdW5kQ29sb3I6IHRyYW5zcGFyZW50Oy0tcGYtYy1idXR0b24tLW0tbGluay0tbS1pbmxpbmUtLWhvdmVyLS1UZXh0RGVjb3JhdGlvbjogdmFyKC0tcGYtZ2xvYmFsLS1saW5rLS1UZXh0RGVjb3JhdGlvbi0taG92ZXIpOy0tcGYtYy1idXR0b24tLW0tbGluay0tbS1pbmxpbmUtLWhvdmVyLS1Db2xvcjogdmFyKC0tcGYtZ2xvYmFsLS1saW5rLS1Db2xvci0taG92ZXIpOy0tcGYtYy1idXR0b24tLW0tcGxhaW4tLUNvbG9yOiB2YXIoLS1wZi1nbG9iYWwtLUNvbG9yLS0yMDApOy0tcGYtYy1idXR0b24tLW0tcGxhaW4tLWhvdmVyLS1Db2xvcjogdmFyKC0tcGYtZ2xvYmFsLS1Db2xvci0tMTAwKTstLXBmLWMtYnV0dG9uLS1tLXBsYWluLS1mb2N1cy0tQ29sb3I6IHZhcigtLXBmLWdsb2JhbC0tQ29sb3ItLTEwMCk7LS1wZi1jLWJ1dHRvbi0tbS1wbGFpbi0tYWN0aXZlLS1Db2xvcjogdmFyKC0tcGYtZ2xvYmFsLS1Db2xvci0tMTAwKTstLXBmLWMtYnV0dG9uLS1tLXBsYWluLS1kaXNhYmxlZC0tQ29sb3I6IHZhcigtLXBmLWdsb2JhbC0tZGlzYWJsZWQtY29sb3ItLTIwMCk7LS1wZi1jLWJ1dHRvbi0tbS1wbGFpbi0tZGlzYWJsZWQtLUJhY2tncm91bmRDb2xvcjogdHJhbnNwYXJlbnQ7LS1wZi1jLWJ1dHRvbi0tbS1jb250cm9sLS1hZnRlci0tQm9yZGVyV2lkdGg6IHZhcigtLXBmLWdsb2JhbC0tQm9yZGVyV2lkdGgtLXNtKTstLXBmLWMtYnV0dG9uLS1tLWNvbnRyb2wtLWFmdGVyLS1Cb3JkZXJUb3BDb2xvcjogdmFyKC0tcGYtZ2xvYmFsLS1Cb3JkZXJDb2xvci0tMzAwKTstLXBmLWMtYnV0dG9uLS1tLWNvbnRyb2wtLWFmdGVyLS1Cb3JkZXJSaWdodENvbG9yOiB2YXIoLS1wZi1nbG9iYWwtLUJvcmRlckNvbG9yLS0zMDApOy0tcGYtYy1idXR0b24tLW0tY29udHJvbC0tYWZ0ZXItLUJvcmRlckJvdHRvbUNvbG9yOiB2YXIoLS1wZi1nbG9iYWwtLUJvcmRlckNvbG9yLS0yMDApOy0tcGYtYy1idXR0b24tLW0tY29udHJvbC0tYWZ0ZXItLUJvcmRlckxlZnRDb2xvcjogdmFyKC0tcGYtZ2xvYmFsLS1Cb3JkZXJDb2xvci0tMzAwKTstLXBmLWMtYnV0dG9uLS1tLWNvbnRyb2wtLWhvdmVyLS1hZnRlci0tQm9yZGVyQm90dG9tV2lkdGg6IHZhcigtLXBmLWdsb2JhbC0tQm9yZGVyV2lkdGgtLW1kKTstLXBmLWMtYnV0dG9uLS1tLWNvbnRyb2wtLWhvdmVyLS1hZnRlci0tQm9yZGVyQm90dG9tQ29sb3I6IHZhcigtLXBmLWdsb2JhbC0tYWN0aXZlLWNvbG9yLS0xMDApOy0tcGYtYy1idXR0b24tLW0tY29udHJvbC0tYWN0aXZlLS1hZnRlci0tQm9yZGVyQm90dG9tV2lkdGg6IHZhcigtLXBmLWdsb2JhbC0tQm9yZGVyV2lkdGgtLW1kKTstLXBmLWMtYnV0dG9uLS1tLWNvbnRyb2wtLWFjdGl2ZS0tYWZ0ZXItLUJvcmRlckJvdHRvbUNvbG9yOiB2YXIoLS1wZi1nbG9iYWwtLWFjdGl2ZS1jb2xvci0tMTAwKTstLXBmLWMtYnV0dG9uLS1tLWNvbnRyb2wtLWZvY3VzLS1hZnRlci0tQm9yZGVyQm90dG9tV2lkdGg6IHZhcigtLXBmLWdsb2JhbC0tQm9yZGVyV2lkdGgtLW1kKTstLXBmLWMtYnV0dG9uLS1tLWNvbnRyb2wtLWZvY3VzLS1hZnRlci0tQm9yZGVyQm90dG9tQ29sb3I6IHZhcigtLXBmLWdsb2JhbC0tYWN0aXZlLWNvbG9yLS0xMDApOy0tcGYtYy1idXR0b24tLW0tY29udHJvbC0tbS1leHBhbmRlZC0tYWZ0ZXItLUJvcmRlckJvdHRvbVdpZHRoOiB2YXIoLS1wZi1nbG9iYWwtLUJvcmRlcldpZHRoLS1tZCk7LS1wZi1jLWJ1dHRvbi0tbS1jb250cm9sLS1tLWV4cGFuZGVkLS1hZnRlci0tQm9yZGVyQm90dG9tQ29sb3I6IHZhcigtLXBmLWdsb2JhbC0tYWN0aXZlLWNvbG9yLS0xMDApOy0tcGYtYy1idXR0b24tLW0tY29udHJvbC0tZGlzYWJsZWQtLWFmdGVyLS1Cb3JkZXJCb3R0b21Db2xvcjogdmFyKC0tcGYtZ2xvYmFsLS1Cb3JkZXJDb2xvci0tMzAwKTstLXBmLWMtYnV0dG9uLS1tLWNvbnRyb2wtLWRpc2FibGVkLS1CYWNrZ3JvdW5kQ29sb3I6IHRyYW5zcGFyZW50Oy0tcGYtYy1idXR0b25fX2ljb24tLU1hcmdpblJpZ2h0OiB2YXIoLS1wZi1nbG9iYWwtLXNwYWNlci0teHMpOy0tcGYtYy1idXR0b25fX3RleHQtLWljb24tLU1hcmdpbkxlZnQ6IHZhcigtLXBmLWdsb2JhbC0tc3BhY2VyLS14cyk7cG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZzp2YXIoLS1wZi1jLWJ1dHRvbi0tUGFkZGluZ1RvcCkgdmFyKC0tcGYtYy1idXR0b24tLVBhZGRpbmdSaWdodCkgdmFyKC0tcGYtYy1idXR0b24tLVBhZGRpbmdCb3R0b20pIHZhcigtLXBmLWMtYnV0dG9uLS1QYWRkaW5nTGVmdCk7Zm9udC1zaXplOnZhcigtLXBmLWMtYnV0dG9uLS1Gb250U2l6ZSk7Zm9udC13ZWlnaHQ6dmFyKC0tcGYtYy1idXR0b24tLUZvbnRXZWlnaHQpO2xpbmUtaGVpZ2h0OnZhcigtLXBmLWMtYnV0dG9uLS1MaW5lSGVpZ2h0KTt0ZXh0LWFsaWduOmNlbnRlcjt3aGl0ZS1zcGFjZTpub3dyYXA7dXNlci1zZWxlY3Q6bm9uZTtib3JkZXI6MDtib3JkZXItcmFkaXVzOnZhcigtLXBmLWMtYnV0dG9uLS1Cb3JkZXJSYWRpdXMpfS5wZi1jLWJ1dHRvbiAucGYtYy1idXR0b25fX2ljb257bWFyZ2luLXJpZ2h0OnZhcigtLXBmLWMtYnV0dG9uX19pY29uLS1NYXJnaW5SaWdodCl9LnBmLWMtYnV0dG9uIC5wZi1jLWJ1dHRvbl9fdGV4dCsucGYtYy1idXR0b25fX2ljb257bWFyZ2luLXJpZ2h0OjA7bWFyZ2luLWxlZnQ6dmFyKC0tcGYtYy1idXR0b25fX3RleHQtLWljb24tLU1hcmdpbkxlZnQpfS5wZi1jLWJ1dHRvbjo6YWZ0ZXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7cmlnaHQ6MDtib3R0b206MDtsZWZ0OjA7Y29udGVudDoiIjtib3JkZXI6dmFyKC0tcGYtYy1idXR0b24tLUJvcmRlcldpZHRoKSBzb2xpZDtib3JkZXItY29sb3I6dmFyKC0tcGYtYy1idXR0b24tLUJvcmRlckNvbG9yKTtib3JkZXItcmFkaXVzOnZhcigtLXBmLWMtYnV0dG9uLS1Cb3JkZXJSYWRpdXMpfS5wZi1jLWJ1dHRvbjpob3ZlciwucGYtYy1idXR0b24ucGYtbS1ob3Zlcnt0ZXh0LWRlY29yYXRpb246bm9uZX0ucGYtYy1idXR0b246aG92ZXI6OmFmdGVyLC5wZi1jLWJ1dHRvbi5wZi1tLWhvdmVyOjphZnRlcnstLXBmLWMtYnV0dG9uLS1Cb3JkZXJXaWR0aDogdmFyKC0tcGYtYy1idXR0b24tLWhvdmVyLS1Cb3JkZXJXaWR0aCl9LnBmLWMtYnV0dG9uOmFjdGl2ZTo6YWZ0ZXIsLnBmLWMtYnV0dG9uLnBmLW0tYWN0aXZlOjphZnRlcnstLXBmLWMtYnV0dG9uLS1Cb3JkZXJXaWR0aDogdmFyKC0tcGYtYy1idXR0b24tLWFjdGl2ZS0tQm9yZGVyV2lkdGgpfS5wZi1jLWJ1dHRvbjpmb2N1czo6YWZ0ZXIsLnBmLWMtYnV0dG9uLnBmLW0tZm9jdXM6OmFmdGVyey0tcGYtYy1idXR0b24tLUJvcmRlcldpZHRoOiB2YXIoLS1wZi1jLWJ1dHRvbi0tZm9jdXMtLUJvcmRlcldpZHRoKX0ucGYtYy1idXR0b24ucGYtbS1ibG9ja3tkaXNwbGF5OmJsb2NrO3dpZHRoOjEwMCV9LnBmLWMtYnV0dG9uLnBmLW0tcHJpbWFyeXtjb2xvcjp2YXIoLS1wZi1jLWJ1dHRvbi0tbS1wcmltYXJ5LS1Db2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1wZi1jLWJ1dHRvbi0tbS1wcmltYXJ5LS1CYWNrZ3JvdW5kQ29sb3IpfS5wZi1jLWJ1dHRvbi5wZi1tLXByaW1hcnk6aG92ZXIsLnBmLWMtYnV0dG9uLnBmLW0tcHJpbWFyeS5wZi1tLWhvdmVyey0tcGYtYy1idXR0b24tLW0tcHJpbWFyeS0tQ29sb3I6IHZhcigtLXBmLWMtYnV0dG9uLS1tLXByaW1hcnktLWhvdmVyLS1Db2xvcik7LS1wZi1jLWJ1dHRvbi0tbS1wcmltYXJ5LS1CYWNrZ3JvdW5kQ29sb3I6IHZhcigtLXBmLWMtYnV0dG9uLS1tLXByaW1hcnktLWhvdmVyLS1CYWNrZ3JvdW5kQ29sb3IpfS5wZi1jLWJ1dHRvbi5wZi1tLXByaW1hcnk6YWN0aXZlLC5wZi1jLWJ1dHRvbi5wZi1tLXByaW1hcnkucGYtbS1hY3RpdmV7LS1wZi1jLWJ1dHRvbi0tbS1wcmltYXJ5LS1Db2xvcjogdmFyKC0tcGYtYy1idXR0b24tLW0tcHJpbWFyeS0tYWN0aXZlLS1Db2xvcik7LS1wZi1jLWJ1dHRvbi0tbS1wcmltYXJ5LS1CYWNrZ3JvdW5kQ29sb3I6IHZhcigtLXBmLWMtYnV0dG9uLS1tLXByaW1hcnktLWFjdGl2ZS0tQmFja2dyb3VuZENvbG9yKX0ucGYtYy1idXR0b24ucGYtbS1wcmltYXJ5OmZvY3VzLC5wZi1jLWJ1dHRvbi5wZi1tLXByaW1hcnkucGYtbS1mb2N1c3stLXBmLWMtYnV0dG9uLS1tLXByaW1hcnktLUNvbG9yOiB2YXIoLS1wZi1jLWJ1dHRvbi0tbS1wcmltYXJ5LS1mb2N1cy0tQ29sb3IpOy0tcGYtYy1idXR0b24tLW0tcHJpbWFyeS0tQmFja2dyb3VuZENvbG9yOiB2YXIoLS1wZi1jLWJ1dHRvbi0tbS1wcmltYXJ5LS1mb2N1cy0tQmFja2dyb3VuZENvbG9yKX0ucGYtYy1idXR0b24ucGYtbS1zZWNvbmRhcnl7Y29sb3I6dmFyKC0tcGYtYy1idXR0b24tLW0tc2Vjb25kYXJ5LS1Db2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1wZi1jLWJ1dHRvbi0tbS1zZWNvbmRhcnktLUJhY2tncm91bmRDb2xvcil9LnBmLWMtYnV0dG9uLnBmLW0tc2Vjb25kYXJ5OjphZnRlcnstLXBmLWMtYnV0dG9uLS1Cb3JkZXJDb2xvcjogdmFyKC0tcGYtYy1idXR0b24tLW0tc2Vjb25kYXJ5LS1Cb3JkZXJDb2xvcil9LnBmLWMtYnV0dG9uLnBmLW0tc2Vjb25kYXJ5OmhvdmVyLC5wZi1jLWJ1dHRvbi5wZi1tLXNlY29uZGFyeS5wZi1tLWhvdmVyey0tcGYtYy1idXR0b24tLW0tc2Vjb25kYXJ5LS1Db2xvcjogdmFyKC0tcGYtYy1idXR0b24tLW0tc2Vjb25kYXJ5LS1ob3Zlci0tQ29sb3IpOy0tcGYtYy1idXR0b24tLW0tc2Vjb25kYXJ5LS1CYWNrZ3JvdW5kQ29sb3I6IHZhcigtLXBmLWMtYnV0dG9uLS1tLXNlY29uZGFyeS0taG92ZXItLUJhY2tncm91bmRDb2xvcil9LnBmLWMtYnV0dG9uLnBmLW0tc2Vjb25kYXJ5OmhvdmVyOjphZnRlciwucGYtYy1idXR0b24ucGYtbS1zZWNvbmRhcnkucGYtbS1ob3Zlcjo6YWZ0ZXJ7LS1wZi1jLWJ1dHRvbi0tQm9yZGVyQ29sb3I6IHZhcigtLXBmLWMtYnV0dG9uLS1tLXNlY29uZGFyeS0taG92ZXItLUJvcmRlckNvbG9yKX0ucGYtYy1idXR0b24ucGYtbS1zZWNvbmRhcnk6YWN0aXZlLC5wZi1jLWJ1dHRvbi5wZi1tLXNlY29uZGFyeS5wZi1tLWFjdGl2ZXstLXBmLWMtYnV0dG9uLS1tLXNlY29uZGFyeS0tQ29sb3I6IHZhcigtLXBmLWMtYnV0dG9uLS1tLXNlY29uZGFyeS0tYWN0aXZlLS1Db2xvcik7LS1wZi1jLWJ1dHRvbi0tbS1zZWNvbmRhcnktLUJhY2tncm91bmRDb2xvcjogdmFyKC0tcGYtYy1idXR0b24tLW0tc2Vjb25kYXJ5LS1hY3RpdmUtLUJhY2tncm91bmRDb2xvcil9LnBmLWMtYnV0dG9uLnBmLW0tc2Vjb25kYXJ5OmFjdGl2ZTo6YWZ0ZXIsLnBmLWMtYnV0dG9uLnBmLW0tc2Vjb25kYXJ5LnBmLW0tYWN0aXZlOjphZnRlcnstLXBmLWMtYnV0dG9uLS1Cb3JkZXJDb2xvcjogdmFyKC0tcGYtYy1idXR0b24tLW0tc2Vjb25kYXJ5LS1hY3RpdmUtLUJvcmRlckNvbG9yKX0ucGYtYy1idXR0b24ucGYtbS1zZWNvbmRhcnk6Zm9jdXMsLnBmLWMtYnV0dG9uLnBmLW0tc2Vjb25kYXJ5LnBmLW0tZm9jdXN7LS1wZi1jLWJ1dHRvbi0tbS1zZWNvbmRhcnktLUNvbG9yOiB2YXIoLS1wZi1jLWJ1dHRvbi0tbS1zZWNvbmRhcnktLWZvY3VzLS1Db2xvcik7LS1wZi1jLWJ1dHRvbi0tbS1zZWNvbmRhcnktLUJhY2tncm91bmRDb2xvcjogdmFyKC0tcGYtYy1idXR0b24tLW0tc2Vjb25kYXJ5LS1mb2N1cy0tQmFja2dyb3VuZENvbG9yKX0ucGYtYy1idXR0b24ucGYtbS1zZWNvbmRhcnk6Zm9jdXM6OmFmdGVyLC5wZi1jLWJ1dHRvbi5wZi1tLXNlY29uZGFyeS5wZi1tLWZvY3VzOjphZnRlcnstLXBmLWMtYnV0dG9uLS1Cb3JkZXJDb2xvcjogdmFyKC0tcGYtYy1idXR0b24tLW0tc2Vjb25kYXJ5LS1mb2N1cy0tQm9yZGVyQ29sb3IpfS5wZi1jLWJ1dHRvbi5wZi1tLXRlcnRpYXJ5e2NvbG9yOnZhcigtLXBmLWMtYnV0dG9uLS1tLXRlcnRpYXJ5LS1Db2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1wZi1jLWJ1dHRvbi0tbS10ZXJ0aWFyeS0tQmFja2dyb3VuZENvbG9yKX0ucGYtYy1idXR0b24ucGYtbS10ZXJ0aWFyeTo6YWZ0ZXJ7LS1wZi1jLWJ1dHRvbi0tQm9yZGVyQ29sb3I6IHZhcigtLXBmLWMtYnV0dG9uLS1tLXRlcnRpYXJ5LS1Cb3JkZXJDb2xvcil9LnBmLWMtYnV0dG9uLnBmLW0tdGVydGlhcnk6aG92ZXIsLnBmLWMtYnV0dG9uLnBmLW0tdGVydGlhcnkucGYtbS1ob3ZlcnstLXBmLWMtYnV0dG9uLS1tLXRlcnRpYXJ5LS1Db2xvcjogdmFyKC0tcGYtYy1idXR0b24tLW0tdGVydGlhcnktLWhvdmVyLS1Db2xvcik7LS1wZi1jLWJ1dHRvbi0tbS10ZXJ0aWFyeS0tQmFja2dyb3VuZENvbG9yOiB2YXIoLS1wZi1jLWJ1dHRvbi0tbS10ZXJ0aWFyeS0taG92ZXItLUJhY2tncm91bmRDb2xvcil9LnBmLWMtYnV0dG9uLnBmLW0tdGVydGlhcnk6aG92ZXI6OmFmdGVyLC5wZi1jLWJ1dHRvbi5wZi1tLXRlcnRpYXJ5LnBmLW0taG92ZXI6OmFmdGVyey0tcGYtYy1idXR0b24tLUJvcmRlckNvbG9yOiB2YXIoLS1wZi1jLWJ1dHRvbi0tbS10ZXJ0aWFyeS0taG92ZXItLUJvcmRlckNvbG9yKX0ucGYtYy1idXR0b24ucGYtbS10ZXJ0aWFyeTphY3RpdmUsLnBmLWMtYnV0dG9uLnBmLW0tdGVydGlhcnkucGYtbS1hY3RpdmV7LS1wZi1jLWJ1dHRvbi0tbS10ZXJ0aWFyeS0tQ29sb3I6IHZhcigtLXBmLWMtYnV0dG9uLS1tLXRlcnRpYXJ5LS1hY3RpdmUtLUNvbG9yKTstLXBmLWMtYnV0dG9uLS1tLXRlcnRpYXJ5LS1CYWNrZ3JvdW5kQ29sb3I6IHZhcigtLXBmLWMtYnV0dG9uLS1tLXRlcnRpYXJ5LS1hY3RpdmUtLUJhY2tncm91bmRDb2xvcil9LnBmLWMtYnV0dG9uLnBmLW0tdGVydGlhcnk6YWN0aXZlOjphZnRlciwucGYtYy1idXR0b24ucGYtbS10ZXJ0aWFyeS5wZi1tLWFjdGl2ZTo6YWZ0ZXJ7LS1wZi1jLWJ1dHRvbi0tQm9yZGVyQ29sb3I6IHZhcigtLXBmLWMtYnV0dG9uLS1tLXRlcnRpYXJ5LS1hY3RpdmUtLUJvcmRlckNvbG9yKX0ucGYtYy1idXR0b24ucGYtbS10ZXJ0aWFyeTpmb2N1cywucGYtYy1idXR0b24ucGYtbS10ZXJ0aWFyeS5wZi1tLWZvY3Vzey0tcGYtYy1idXR0b24tLW0tdGVydGlhcnktLUNvbG9yOiB2YXIoLS1wZi1jLWJ1dHRvbi0tbS10ZXJ0aWFyeS0tZm9jdXMtLUNvbG9yKTstLXBmLWMtYnV0dG9uLS1tLXRlcnRpYXJ5LS1CYWNrZ3JvdW5kQ29sb3I6IHZhcigtLXBmLWMtYnV0dG9uLS1tLXRlcnRpYXJ5LS1mb2N1cy0tQmFja2dyb3VuZENvbG9yKX0ucGYtYy1idXR0b24ucGYtbS10ZXJ0aWFyeTpmb2N1czo6YWZ0ZXIsLnBmLWMtYnV0dG9uLnBmLW0tdGVydGlhcnkucGYtbS1mb2N1czo6YWZ0ZXJ7LS1wZi1jLWJ1dHRvbi0tQm9yZGVyQ29sb3I6IHZhcigtLXBmLWMtYnV0dG9uLS1tLXRlcnRpYXJ5LS1mb2N1cy0tQm9yZGVyQ29sb3IpfS5wZi1jLWJ1dHRvbi5wZi1tLWRhbmdlcntjb2xvcjp2YXIoLS1wZi1jLWJ1dHRvbi0tbS1kYW5nZXItLUNvbG9yKTtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLXBmLWMtYnV0dG9uLS1tLWRhbmdlci0tQmFja2dyb3VuZENvbG9yKX0ucGYtYy1idXR0b24ucGYtbS1kYW5nZXI6aG92ZXIsLnBmLWMtYnV0dG9uLnBmLW0tZGFuZ2VyLnBmLW0taG92ZXJ7LS1wZi1jLWJ1dHRvbi0tbS1kYW5nZXItLUNvbG9yOiB2YXIoLS1wZi1jLWJ1dHRvbi0tbS1kYW5nZXItLWhvdmVyLS1Db2xvcik7LS1wZi1jLWJ1dHRvbi0tbS1kYW5nZXItLUJhY2tncm91bmRDb2xvcjogdmFyKC0tcGYtYy1idXR0b24tLW0tZGFuZ2VyLS1ob3Zlci0tQmFja2dyb3VuZENvbG9yKX0ucGYtYy1idXR0b24ucGYtbS1kYW5nZXI6YWN0aXZlLC5wZi1jLWJ1dHRvbi5wZi1tLWRhbmdlci5wZi1tLWFjdGl2ZXstLXBmLWMtYnV0dG9uLS1tLWRhbmdlci0tQ29sb3I6IHZhcigtLXBmLWMtYnV0dG9uLS1tLWRhbmdlci0tYWN0aXZlLS1Db2xvcik7LS1wZi1jLWJ1dHRvbi0tbS1kYW5nZXItLUJhY2tncm91bmRDb2xvcjogdmFyKC0tcGYtYy1idXR0b24tLW0tZGFuZ2VyLS1hY3RpdmUtLUJhY2tncm91bmRDb2xvcil9LnBmLWMtYnV0dG9uLnBmLW0tZGFuZ2VyOmZvY3VzLC5wZi1jLWJ1dHRvbi5wZi1tLWRhbmdlci5wZi1tLWZvY3Vzey0tcGYtYy1idXR0b24tLW0tZGFuZ2VyLS1Db2xvcjogdmFyKC0tcGYtYy1idXR0b24tLW0tZGFuZ2VyLS1mb2N1cy0tQ29sb3IpOy0tcGYtYy1idXR0b24tLW0tZGFuZ2VyLS1CYWNrZ3JvdW5kQ29sb3I6IHZhcigtLXBmLWMtYnV0dG9uLS1tLWRhbmdlci0tZm9jdXMtLUJhY2tncm91bmRDb2xvcil9LnBmLWMtYnV0dG9uLnBmLW0tbGlua3tjb2xvcjp2YXIoLS1wZi1jLWJ1dHRvbi0tbS1saW5rLS1Db2xvcil9LnBmLWMtYnV0dG9uLnBmLW0tbGluazpub3QoLnBmLW0taW5saW5lKTpob3ZlciwucGYtYy1idXR0b24ucGYtbS1saW5rOm5vdCgucGYtbS1pbmxpbmUpLnBmLW0taG92ZXJ7LS1wZi1jLWJ1dHRvbi0tbS1saW5rLS1Db2xvcjogdmFyKC0tcGYtYy1idXR0b24tLW0tbGluay0taG92ZXItLUNvbG9yKX0ucGYtYy1idXR0b24ucGYtbS1saW5rOm5vdCgucGYtbS1pbmxpbmUpOmFjdGl2ZSwucGYtYy1idXR0b24ucGYtbS1saW5rOm5vdCgucGYtbS1pbmxpbmUpLnBmLW0tYWN0aXZley0tcGYtYy1idXR0b24tLW0tbGluay0tQ29sb3I6IHZhcigtLXBmLWMtYnV0dG9uLS1tLWxpbmstLWFjdGl2ZS0tQ29sb3IpfS5wZi1jLWJ1dHRvbi5wZi1tLWxpbms6bm90KC5wZi1tLWlubGluZSk6Zm9jdXMsLnBmLWMtYnV0dG9uLnBmLW0tbGluazpub3QoLnBmLW0taW5saW5lKS5wZi1tLWZvY3Vzey0tcGYtYy1idXR0b24tLW0tbGluay0tQ29sb3I6IHZhcigtLXBmLWMtYnV0dG9uLS1tLWxpbmstLWZvY3VzLS1Db2xvcil9LnBmLWMtYnV0dG9uLnBmLW0tbGluazpkaXNhYmxlZCwucGYtYy1idXR0b24ucGYtbS1saW5rLnBmLW0tZGlzYWJsZWR7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1wZi1jLWJ1dHRvbi0tbS1saW5rLS1kaXNhYmxlZC0tQmFja2dyb3VuZENvbG9yKX0ucGYtYy1idXR0b24ucGYtbS1saW5rLnBmLW0taW5saW5le2Rpc3BsYXk6aW5saW5lO3BhZGRpbmc6MH0ucGYtYy1idXR0b24ucGYtbS1saW5rLnBmLW0taW5saW5lOmhvdmVyey0tcGYtYy1idXR0b24tLW0tbGluay0tQ29sb3I6IHZhcigtLXBmLWMtYnV0dG9uLS1tLWxpbmstLW0taW5saW5lLS1ob3Zlci0tQ29sb3IpO3RleHQtZGVjb3JhdGlvbjp2YXIoLS1wZi1jLWJ1dHRvbi0tbS1saW5rLS1tLWlubGluZS0taG92ZXItLVRleHREZWNvcmF0aW9uKX0ucGYtYy1idXR0b24ucGYtbS1jb250cm9sOjphZnRlcnstLXBmLWMtYnV0dG9uLS1Cb3JkZXJXaWR0aDogdmFyKC0tcGYtYy1idXR0b24tLW0tY29udHJvbC0tYWZ0ZXItLUJvcmRlcldpZHRoKTstLXBmLWMtYnV0dG9uLS1Cb3JkZXJDb2xvcjogdmFyKC0tcGYtYy1idXR0b24tLW0tY29udHJvbC0tYWZ0ZXItLUJvcmRlclRvcENvbG9yKSB2YXIoLS1wZi1jLWJ1dHRvbi0tbS1jb250cm9sLS1hZnRlci0tQm9yZGVyUmlnaHRDb2xvcikgdmFyKC0tcGYtYy1idXR0b24tLW0tY29udHJvbC0tYWZ0ZXItLUJvcmRlckJvdHRvbUNvbG9yKSB2YXIoLS1wZi1jLWJ1dHRvbi0tbS1jb250cm9sLS1hZnRlci0tQm9yZGVyTGVmdENvbG9yKTtib3JkZXItcmFkaXVzOmluaXRpYWx9LnBmLWMtYnV0dG9uLnBmLW0tY29udHJvbDpob3Zlcjo6YWZ0ZXIsLnBmLWMtYnV0dG9uLnBmLW0tY29udHJvbC5wZi1tLWhvdmVyOjphZnRlcnstLXBmLWMtYnV0dG9uLS1tLWNvbnRyb2wtLWFmdGVyLS1Cb3JkZXJCb3R0b21Db2xvcjogdmFyKC0tcGYtYy1idXR0b24tLW0tY29udHJvbC0taG92ZXItLWFmdGVyLS1Cb3JkZXJCb3R0b21Db2xvcik7Ym9yZGVyLWJvdHRvbS13aWR0aDp2YXIoLS1wZi1jLWJ1dHRvbi0tbS1jb250cm9sLS1ob3Zlci0tYWZ0ZXItLUJvcmRlckJvdHRvbVdpZHRoKX0ucGYtYy1idXR0b24ucGYtbS1jb250cm9sOmFjdGl2ZTo6YWZ0ZXIsLnBmLWMtYnV0dG9uLnBmLW0tY29udHJvbC5wZi1tLWFjdGl2ZTo6YWZ0ZXJ7LS1wZi1jLWJ1dHRvbi0tbS1jb250cm9sLS1hZnRlci0tQm9yZGVyQm90dG9tQ29sb3I6IHZhcigtLXBmLWMtYnV0dG9uLS1tLWNvbnRyb2wtLWFjdGl2ZS0tYWZ0ZXItLUJvcmRlckJvdHRvbUNvbG9yKTtib3JkZXItYm90dG9tLXdpZHRoOnZhcigtLXBmLWMtYnV0dG9uLS1tLWNvbnRyb2wtLWFjdGl2ZS0tYWZ0ZXItLUJvcmRlckJvdHRvbVdpZHRoKX0ucGYtYy1idXR0b24ucGYtbS1jb250cm9sOmZvY3VzOjphZnRlciwucGYtYy1idXR0b24ucGYtbS1jb250cm9sLnBmLW0tZm9jdXM6OmFmdGVyey0tcGYtYy1idXR0b24tLW0tY29udHJvbC0tYWZ0ZXItLUJvcmRlckJvdHRvbUNvbG9yOiB2YXIoLS1wZi1jLWJ1dHRvbi0tbS1jb250cm9sLS1mb2N1cy0tYWZ0ZXItLUJvcmRlckJvdHRvbUNvbG9yKTtib3JkZXItYm90dG9tLXdpZHRoOnZhcigtLXBmLWMtYnV0dG9uLS1tLWNvbnRyb2wtLWZvY3VzLS1hZnRlci0tQm9yZGVyQm90dG9tV2lkdGgpfS5wZi1jLWJ1dHRvbi5wZi1tLWNvbnRyb2wucGYtbS1leHBhbmRlZDo6YWZ0ZXJ7LS1wZi1jLWJ1dHRvbi0tbS1jb250cm9sLS1hZnRlci0tQm9yZGVyQm90dG9tQ29sb3I6IHZhcigtLXBmLWMtYnV0dG9uLS1tLWNvbnRyb2wtLW0tZXhwYW5kZWQtLWFmdGVyLS1Cb3JkZXJCb3R0b21Db2xvcik7Ym9yZGVyLWJvdHRvbS13aWR0aDp2YXIoLS1wZi1jLWJ1dHRvbi0tbS1jb250cm9sLS1tLWV4cGFuZGVkLS1hZnRlci0tQm9yZGVyQm90dG9tV2lkdGgpfS5wZi1jLWJ1dHRvbi5wZi1tLWNvbnRyb2w6ZGlzYWJsZWQsLnBmLWMtYnV0dG9uLnBmLW0tY29udHJvbC5wZi1tLWRpc2FibGVke2JhY2tncm91bmQtY29sb3I6dmFyKC0tcGYtYy1idXR0b24tLW0tY29udHJvbC0tZGlzYWJsZWQtLUJhY2tncm91bmRDb2xvcil9LnBmLWMtYnV0dG9uLnBmLW0tY29udHJvbDpkaXNhYmxlZDo6YWZ0ZXIsLnBmLWMtYnV0dG9uLnBmLW0tY29udHJvbC5wZi1tLWRpc2FibGVkOjphZnRlcnstLXBmLWMtYnV0dG9uLS1tLWNvbnRyb2wtLWFmdGVyLS1Cb3JkZXJCb3R0b21Db2xvcjogdmFyKC0tcGYtYy1idXR0b24tLW0tY29udHJvbC0tZGlzYWJsZWQtLWFmdGVyLS1Cb3JkZXJCb3R0b21Db2xvcil9LnBmLWMtYnV0dG9uOmRpc2FibGVkLC5wZi1jLWJ1dHRvbi5wZi1tLWRpc2FibGVke2NvbG9yOnZhcigtLXBmLWMtYnV0dG9uLS1kaXNhYmxlZC0tQ29sb3IpO3BvaW50ZXItZXZlbnRzOm5vbmU7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1wZi1jLWJ1dHRvbi0tZGlzYWJsZWQtLUJhY2tncm91bmRDb2xvcil9LnBmLWMtYnV0dG9uOmRpc2FibGVkOjphZnRlciwucGYtYy1idXR0b24ucGYtbS1kaXNhYmxlZDo6YWZ0ZXJ7LS1wZi1jLWJ1dHRvbi0tQm9yZGVyQ29sb3I6IHZhcigtLXBmLWMtYnV0dG9uLS1kaXNhYmxlZC0tQm9yZGVyQ29sb3IpfS5wZi1jLWJ1dHRvbi5wZi1tLXBsYWlue2NvbG9yOnZhcigtLXBmLWMtYnV0dG9uLS1tLXBsYWluLS1Db2xvcil9LnBmLWMtYnV0dG9uLnBmLW0tcGxhaW46aG92ZXIsLnBmLWMtYnV0dG9uLnBmLW0tcGxhaW4ucGYtbS1ob3ZlcnstLXBmLWMtYnV0dG9uLS1tLXBsYWluLS1Db2xvcjogdmFyKC0tcGYtYy1idXR0b24tLW0tcGxhaW4tLWhvdmVyLS1Db2xvcil9LnBmLWMtYnV0dG9uLnBmLW0tcGxhaW46YWN0aXZlLC5wZi1jLWJ1dHRvbi5wZi1tLXBsYWluLnBmLW0tYWN0aXZley0tcGYtYy1idXR0b24tLW0tcGxhaW4tLUNvbG9yOiB2YXIoLS1wZi1jLWJ1dHRvbi0tbS1wbGFpbi0tYWN0aXZlLS1Db2xvcil9LnBmLWMtYnV0dG9uLnBmLW0tcGxhaW46Zm9jdXMsLnBmLWMtYnV0dG9uLnBmLW0tcGxhaW4ucGYtbS1mb2N1c3stLXBmLWMtYnV0dG9uLS1tLXBsYWluLS1Db2xvcjogdmFyKC0tcGYtYy1idXR0b24tLW0tcGxhaW4tLWZvY3VzLS1Db2xvcil9LnBmLWMtYnV0dG9uLnBmLW0tcGxhaW46ZGlzYWJsZWQsLnBmLWMtYnV0dG9uLnBmLW0tcGxhaW4ucGYtbS1kaXNhYmxlZHstLXBmLWMtYnV0dG9uLS1tLXBsYWluLS1Db2xvcjogdmFyKC0tcGYtYy1idXR0b24tLW0tcGxhaW4tLWRpc2FibGVkLS1Db2xvcik7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1wZi1jLWJ1dHRvbi0tbS1wbGFpbi0tZGlzYWJsZWQtLUJhY2tncm91bmRDb2xvcil9LnBmLW0tcmVkaGF0LWZvbnQgLnBmLWMtYnV0dG9uey0tcGYtYy1idXR0b24tLUZvbnRXZWlnaHQ6IHZhcigtLXBmLWdsb2JhbC0tRm9udFdlaWdodC0tbm9ybWFsKX0ucGYtYy10aXRsZS5wZi1tLTN4bHtmb250LXNpemU6MjhweDtsaW5lLWhlaWdodDozNi40cHh9LmlkcHttYXJnaW46MjRweCAwIDB9CgogICAgPC9zdHlsZT4KICA8L2hlYWQ+CgogIDxib2R5IGNsYXNzPSJwZi1tLXJlZGhhdC1mb250Ij4KICAgIDxkaXYgY2xhc3M9InBmLWMtbG9naW4iPgogICAgICA8ZGl2IGNsYXNzPSJwZi1jLWxvZ2luX19jb250YWluZXIiPgogICAgICAgIDxoZWFkZXIgY2xhc3M9InBmLWMtbG9naW5fX2hlYWRlciI+CiAgICAgICAgICA8aW1nIHNyYz0iZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQRDk0Yld3Z2RtVnljMmx2YmowaU1TNHdJaUJsYm1OdlpHbHVaejBpVlZSR0xUZ2lJSE4wWVc1a1lXeHZibVU5SW01dklqOCtDanh6ZG1jS0lDQWdlRzFzYm5NNlpHTTlJbWgwZEhBNkx5OXdkWEpzTG05eVp5OWtZeTlsYkdWdFpXNTBjeTh4TGpFdklnb2dJQ0I0Yld4dWN6cGpZejBpYUhSMGNEb3ZMMk55WldGMGFYWmxZMjl0Ylc5dWN5NXZjbWN2Ym5Naklnb2dJQ0I0Yld4dWN6cHlaR1k5SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpFNU9Ua3ZNREl2TWpJdGNtUm1MWE41Ym5SaGVDMXVjeU1pQ2lBZ0lIaHRiRzV6T25OMlp6MGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TUM5emRtY2lDaUFnSUhodGJHNXpQU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh5TURBd0wzTjJaeUlLSUNBZ2VHMXNibk02YzI5a2FYQnZaR2s5SW1oMGRIQTZMeTl6YjJScGNHOWthUzV6YjNWeVkyVm1iM0puWlM1dVpYUXZSRlJFTDNOdlpHbHdiMlJwTFRBdVpIUmtJZ29nSUNCNGJXeHVjenBwYm10elkyRndaVDBpYUhSMGNEb3ZMM2QzZHk1cGJtdHpZMkZ3WlM1dmNtY3ZibUZ0WlhOd1lXTmxjeTlwYm10elkyRndaU0lLSUNBZ2FHVnBaMmgwUFNJME9DSUtJQ0FnZDJsa2RHZzlJakUwTWk0NU9EQXdOaUlLSUNBZ2FXUTlJa3h2WjI5eklnb2dJQ0IyYVdWM1FtOTRQU0l3SURBZ01UUXlMams0TURBMUlEUTNMams1T1RrNU9TSUtJQ0FnZG1WeWMybHZiajBpTVM0eElnb2dJQ0J6YjJScGNHOWthVHBrYjJOdVlXMWxQU0pNYjJkdkxWSmxaRjlJWVhRdFQzQmxibE5vYVdaMExVRXRVbVYyWlhKelpTMVNSMEl0YzIwdWMzWm5JZ29nSUNCcGJtdHpZMkZ3WlRwMlpYSnphVzl1UFNJeExqQWdLRFF3TXpWaE5HWXNJREl3TWpBdE1EVXRNREVwSWo0S0lDQThiV1YwWVdSaGRHRUtJQ0FnSUNCcFpEMGliV1YwWVdSaGRHRTBNeUkrQ2lBZ0lDQThjbVJtT2xKRVJqNEtJQ0FnSUNBZ1BHTmpPbGR2Y21zS0lDQWdJQ0FnSUNBZ2NtUm1PbUZpYjNWMFBTSWlQZ29nSUNBZ0lDQWdJRHhrWXpwbWIzSnRZWFErYVcxaFoyVXZjM1puSzNodGJEd3ZaR002Wm05eWJXRjBQZ29nSUNBZ0lDQWdJRHhrWXpwMGVYQmxDaUFnSUNBZ0lDQWdJQ0FnY21SbU9uSmxjMjkxY21ObFBTSm9kSFJ3T2k4dmNIVnliQzV2Y21jdlpHTXZaR050YVhSNWNHVXZVM1JwYkd4SmJXRm5aU0lnTHo0S0lDQWdJQ0FnSUNBOFpHTTZkR2wwYkdVK1RHOW5ieTFTWldSZlNHRjBMVTl3Wlc1VGFHbG1kQzFCTFZKbGRtVnljMlV0VWtkQ1BDOWtZenAwYVhSc1pUNEtJQ0FnSUNBZ1BDOWpZenBYYjNKclBnb2dJQ0FnUEM5eVpHWTZVa1JHUGdvZ0lEd3ZiV1YwWVdSaGRHRStDaUFnUEhOdlpHbHdiMlJwT201aGJXVmtkbWxsZHdvZ0lDQWdJSE5vYjNkbmRXbGtaWE05SW1aaGJITmxJZ29nSUNBZ0lHWnBkQzF0WVhKbmFXNHRZbTkwZEc5dFBTSXdJZ29nSUNBZ0lHWnBkQzF0WVhKbmFXNHRjbWxuYUhROUlqQWlDaUFnSUNBZ1ptbDBMVzFoY21kcGJpMXNaV1owUFNJd0lnb2dJQ0FnSUdacGRDMXRZWEpuYVc0dGRHOXdQU0l3SWdvZ0lDQWdJR2x1YTNOallYQmxPbVJ2WTNWdFpXNTBMWEp2ZEdGMGFXOXVQU0l3SWdvZ0lDQWdJSEJoWjJWamIyeHZjajBpSTJabVptWm1aaUlLSUNBZ0lDQmliM0prWlhKamIyeHZjajBpSXpZMk5qWTJOaUlLSUNBZ0lDQmliM0prWlhKdmNHRmphWFI1UFNJeElnb2dJQ0FnSUc5aWFtVmpkSFJ2YkdWeVlXNWpaVDBpTVRBaUNpQWdJQ0FnWjNKcFpIUnZiR1Z5WVc1alpUMGlNVEFpQ2lBZ0lDQWdaM1ZwWkdWMGIyeGxjbUZ1WTJVOUlqRXdJZ29nSUNBZ0lHbHVhM05qWVhCbE9uQmhaMlZ2Y0dGamFYUjVQU0l3SWdvZ0lDQWdJR2x1YTNOallYQmxPbkJoWjJWemFHRmtiM2M5SWpJaUNpQWdJQ0FnYVc1cmMyTmhjR1U2ZDJsdVpHOTNMWGRwWkhSb1BTSXhOemM1SWdvZ0lDQWdJR2x1YTNOallYQmxPbmRwYm1SdmR5MW9aV2xuYUhROUlqRXdNelVpQ2lBZ0lDQWdhV1E5SW01aGJXVmtkbWxsZHpReElnb2dJQ0FnSUhOb2IzZG5jbWxrUFNKbVlXeHpaU0lLSUNBZ0lDQnBibXR6WTJGd1pUcDZiMjl0UFNJMUxqWTFOamcxTkRJaUNpQWdJQ0FnYVc1cmMyTmhjR1U2WTNnOUlqRXlMamczTWpFeU1pSUtJQ0FnSUNCcGJtdHpZMkZ3WlRwamVUMGlORFF1TmpjNU5qWXhJZ29nSUNBZ0lHbHVhM05qWVhCbE9uZHBibVJ2ZHkxNFBTSXhOemN5SWdvZ0lDQWdJR2x1YTNOallYQmxPbmRwYm1SdmR5MTVQU0l5TXlJS0lDQWdJQ0JwYm10elkyRndaVHAzYVc1a2IzY3RiV0Y0YVcxcGVtVmtQU0l3SWdvZ0lDQWdJR2x1YTNOallYQmxPbU4xY25KbGJuUXRiR0Y1WlhJOUlreHZaMjl6SWlBdlBnb2dJRHhrWldaekNpQWdJQ0FnYVdROUltUmxabk14TWlJK0NpQWdJQ0E4YzNSNWJHVUtJQ0FnSUNBZ0lHbGtQU0p6ZEhsc1pURXdJajR1WTJ4ekxURjdabWxzYkRvalptWm1PMzB1WTJ4ekxUSjdabWxzYkRvalpUQXdPMzA4TDNOMGVXeGxQZ29nSUR3dlpHVm1jejRLSUNBOGRHbDBiR1VLSUNBZ0lDQnBaRDBpZEdsMGJHVXhOQ0krVEc5bmJ5MVNaV1JmU0dGMExVOXdaVzVUYUdsbWRDMUJMVkpsZG1WeWMyVXRVa2RDUEM5MGFYUnNaVDRLSUNBOGNHRjBhQW9nSUNBZ0lHTnNZWE56UFNKamJITXRNU0lLSUNBZ0lDQmtQU0p0SURVeUxqUTRNVE0yTlN3ME15NDVNRFl4TXpnZ1l5QXROQzR5TmpBMU1Ea3NNQ0F0Tnk0Mk1ERTBOVFVzTFRNdU16RTRPRFkySUMwM0xqWXdNVFExTlN3dE55NDFNemN5TVNBd0xDMDBMakl4T0RNME5DQXpMak0wTURrME5pd3ROeTQxTXpreU1URWdOeTQyTURFME5UVXNMVGN1TlRNNU1qRXhJRFF1TWpZd05URXNNQ0EzTGpZeU9UVTJOU3d6TGpNeU1EZzJOeUEzTGpZeU9UVTJOU3czTGpVek9USXhNU0F3TERRdU1qRTRNelEwSUMwekxqTTNNVEEyTXl3M0xqVXpOekl4SUMwM0xqWXlPVFUyTlN3M0xqVXpOekl4SUhvZ2JTQXdMQzB4TXk0d05UQTFOamtnWXlBdE15NHdNamMzTXpJc01DQXROUzR6TmpZM09UWXNNaTR6T0RFeU1qZ2dMVFV1TXpZMk56azJMRFV1TlRFek16VTVJREFzTXk0eE16SXhORFVnTWk0ek16a3dOalFzTlM0MU1URXpOVGdnTlM0ek5qWTNPVFlzTlM0MU1URXpOVGdnTXk0d01qYzNNek1zTUNBMUxqTTROamczTkN3dE1pNDBNRGt6TXpRZ05TNHpPRFk0TnpRc0xUVXVOVEV4TXpVNElEQXNMVE11TVRBeU1ESTFJQzB5TGpNek9UQTJNeXd0TlM0MU1UTXpOVGtnTFRVdU16ZzJPRGMwTEMwMUxqVXhNek0xT1NCNklnb2dJQ0FnSUdsa1BTSndZWFJvTVRZaUNpQWdJQ0FnYzNSNWJHVTlJbk4wY205clpTMTNhV1IwYURvd0xqSXdNRGMzT0NJZ0x6NEtJQ0E4Y0dGMGFBb2dJQ0FnSUdOc1lYTnpQU0pqYkhNdE1TSUtJQ0FnSUNCa1BTSnRJRFl5TGpFNE9EazRNaXd6TXk0d05EZ3dOakVnYUNBeUxqQTFPVGs0TXlCMklERXVNREl6T1RjeUlHRWdOQzQ0TkRnM09Ea3hMRFF1T0RRNE56ZzROU0F3SURBZ01TQXpMakkxT0RZeU55d3RNUzR4T1RBMk1UTWdZeUF6TGpBeE1UWTNMREFnTlM0ek5qUTNPRGdzTWk0ME1Ea3pNellnTlM0ek5qUTNPRGdzTlM0ME56RXhPVGdnTUN3ekxqQTJNVGcyTXlBdE1pNHpOVGt4TkRFc05TNDBPVEV5TnprZ0xUVXVOREEyT1RVeExEVXVORGt4TWpjNUlFRWdOUzR6TnpBNE1URTVMRFV1TXpjd09ERXlNU0F3SURBZ01TQTJOQzR5Tmprd05ETXNOREl1TnprNU9EUXpJRllnTkRnZ2FDQXRNaTR3T0Rnd09USWdlaUJ0SURJdU1EZzRNRGt5TERJdU9USXpNekk0SUhZZ05DNDRNREkyTURRZ1l5QXdMalkyT0RVNUxEQXVOemN5T1RrMklERXVOemMwT0RjM0xERXVNalV5T0RVMUlESXVPVFkxTkRreExERXVNalV5T0RVMUlESXVNRFEzT1RNMkxEQWdNeTQxT1RFNU1Ua3NMVEV1TlRZMk1EVTRJRE11TlRreE9URTVMQzB6TGpZMU5ERTFJREFzTFRJdU1EZzRNRGt4SUMweExqVTJOakEyT1N3dE15NDJOelF5TkRNZ0xUTXVOVGt4T1RFNUxDMHpMalkzTkRJME15QXRNUzR5TVRBMk9URXNNQ0F0TWk0eU56UTRNVFVzTUM0ME5UazNOemNnTFRJdU9UWTFORGt4TERFdU1qY3lPVE0wSUhvaUNpQWdJQ0FnYVdROUluQmhkR2d4T0NJS0lDQWdJQ0J6ZEhsc1pUMGljM1J5YjJ0bExYZHBaSFJvT2pBdU1qQXdOemM0SWlBdlBnb2dJRHh3WVhSb0NpQWdJQ0FnWTJ4aGMzTTlJbU5zY3kweElnb2dJQ0FnSUdROUltMGdPREF1TURBeU1EQTRMRFF6TGpnMk16azNOeUJqSUMwekxqRXpNakV6Tnl3d0lDMDFMalUzTlRZd05pd3RNaTQwTURrek16UWdMVFV1TlRjMU5qQTJMQzAxTGpVeE1UTTFPU0F3TEMwekxqQTJPVGt3TXlBeUxqTXpPVEEyTkN3dE5TNDBOekV4T1RnZ05TNHpNalEyTXpNc0xUVXVORGN4TVRrNElESXVPVEl6TXpJNExEQWdOUzR4TXpVNU1ESXNNaTQwTWpFek56UWdOUzR4TXpVNU1ESXNOUzQxTlRNMU1Ua2dkaUF3TGpZd01qTXlOaUJvSUMwNExqTTVNRFV4TXlCaElETXVOVGcxT0RrMU15d3pMalU0TlRnNU5EY2dNQ0F3SURBZ015NDFPVEU1TVRnc015NHdORGM0TVRFZ05DNHhNamM1T1RZc05DNHhNamM1T1RZZ01DQXdJREFnTWk0Mk9UQTBNallzTFRBdU9USTFOVGcxSUd3Z01TNHpNemN4T0RFc01TNHpNVGN4TVNCaElEWXVNelEyTlRrekxEWXVNelEyTlRreklEQWdNQ0F4SUMwMExqRXhNemswTVN3eExqTTROek0zTmlCNklFMGdOell1TlRFME5EazBMRE0zTGpRM05USXlJR2dnTmk0ek1EWTBNemNnWXlBdE1DNHpNVE15TVRRc0xURXVOakk0TXpFeElDMHhMalUyTmpBMk9Dd3RNaTQ0TXprd01EY2dMVE11TVRFeU1EVTVMQzB5TGpnek9UQXdOeUF0TVM0Mk1EWXlNalFzTUNBdE1pNDRPREV4TmpVc01TNHhORGcwTlRVZ0xUTXVNVGswTXpjNExESXVPRE01TURBM0lIb2lDaUFnSUNBZ2FXUTlJbkJoZEdneU1DSUtJQ0FnSUNCemRIbHNaVDBpYzNSeWIydGxMWGRwWkhSb09qQXVNakF3TnpjNElpQXZQZ29nSUR4d1lYUm9DaUFnSUNBZ1kyeGhjM005SW1Oc2N5MHhJZ29nSUNBZ0lHUTlJbTBnT0RZdU9EY3dOakkwTERNekxqQTBPREEyTVNCb0lESXVNRGc0TURreElIWWdNUzR3TmpZeE16UWdZU0EwTGpNM01Ea3pOelFzTkM0ek56QTVNemMySURBZ01DQXhJRE11TVRrNE16azBMQzB4TGpJM05EazBPU0JqSURJdU5EUXpORFk0TERBZ05DNHhOVFl4TURVc01TNDJPVEkxTmpjZ05DNHhOVFl4TURVc05DNHhOVFl4TVRjZ2RpQTJMalk0TVRnNU1pQm9JQzB5TGpBNE9EQTVNaUIySUMwMkxqTXpNalUwTWlCaklEQXNMVEV1Tmpjd05EY3pJQzB4TGpBeU16azJPQ3d0TWk0Mk9UUTBORFVnTFRJdU5qTXdNVGt5TEMweUxqWTVORFEwTlNCaElETXVNREV4Tmpjd01pd3pMakF4TVRZM01EWWdNQ0F3SURBZ0xUSXVOak15TVRrNUxERXVNemMzTXpNMUlIWWdOeTQyTkRNMk1qVWdhQ0F0TWk0d09EZ3dPVElnZWlJS0lDQWdJQ0JwWkQwaWNHRjBhREl5SWdvZ0lDQWdJSE4wZVd4bFBTSnpkSEp2YTJVdGQybGtkR2c2TUM0eU1EQTNOemdpSUM4K0NpQWdQSEJoZEdnS0lDQWdJQ0JqYkdGemN6MGlZMnh6TFRFaUNpQWdJQ0FnWkQwaWJTQTVPQzQ1T0RNMU5pd3pPUzQzTURrNE56UWdZeUF4TGpVNE5qRTFMREV1TlRRek9UYzVJRE11TWpFeU5EVXNNaTR5T1RZNU1EZ2dOUzR3TXpNMU1Td3lMakk1Tmprd09DQXlMakV3T0RFM0xEQWdNeTQxTkRjM05Dd3RNUzR3TURNNE9USWdNeTQxTkRjM05Dd3RNaTQwTkRNME55QXdMQzB4TGpJNU5UQXlPQ0F0TUM0NE16VXlNeXd0TVM0NU5ERTFNeUF0TWk0NU5qTTBPQ3d0TWk0eU9UWTVNRGNnYkNBdE1pNDBORE0wTnl3dE1DNDBNREUxTlRJZ1F5QTVPUzQwT0RVMU1Td3pOaTQwTWpjeE5UVWdPVGd1TVRZNE5Dd3pOUzR4TnpReklEazRMakUyT0RRc016TXVNRFkwTVRNZ1l5QXdMQzB5TGpVME5UZzNNaUF5TGpFek1ESTJMQzAwTGpFNU5qSTJOU0ExTGpNNE9EZzRMQzAwTGpFNU5qSTJOU0JoSURrdU9ERTBNREk1TkN3NUxqZ3hOREF5T1RJZ01DQXdJREVnTlM0NE9EZzRNaXd4TGprNE16WTVNU0JzSUMweExqSXdORFkyTERFdU5qY3dORGN6SUdNZ0xURXVOVGcyTVRVc0xURXVNakEwTmpZNElDMHpMakUxTWpJeUxDMHhMamM1TkRrMU5pQXROQzQzT0RBMU15d3RNUzQzT1RRNU5UWWdMVEV1T1RBeE16Y3NNQ0F0TXk0eE56UXpMREF1T0RjMU16ZzFJQzB6TGpFM05ETXNNaTR4TnpBek9Ua2dNQ3d4TGpFNU1EWXhOU0F3TGpjek1EZ3pMREV1TnpVME9ERWdNaTQyTVRBeE1Td3lMakEyT0RBeU5TQnNJREl1TXpRNU1URXNNQzR6TnpFME16SWdZeUF6TGpBNE9UazNMREF1TlRBeE9UVXpJRFF1TkRnNU16a3NNUzQzTnpRNE56TWdOQzQwT0Rrek9TdzBMakExTVRjd01pQXdMREl1TmpreU5ETXhJQzB5TGpNek9UQTJMRFF1TkRnNU5DQXROUzQ0TWpJMU5pdzBMalE0T1RRZ1lTQTRMamd3TkRFeE5Ua3NPQzQ0TURReE1UVTNJREFnTUNBeElDMDJMakkyTkRJM01pd3RNaTQyTXpJeU1EVWdlaUlLSUNBZ0lDQnBaRDBpY0dGMGFESTBJZ29nSUNBZ0lITjBlV3hsUFNKemRISnZhMlV0ZDJsa2RHZzZNQzR5TURBM056Z2lJQzgrQ2lBZ1BIQmhkR2dLSUNBZ0lDQmpiR0Z6Y3owaVkyeHpMVEVpQ2lBZ0lDQWdaRDBpYlNBeE1URXVOVEV3TVN3eU9TNHdOakEyTVRRZ01pNHdPRGd3T1N3dE1DNDBOVGszT1RJZ2RpQTFMalV4TXpNM015QmhJRFF1TXpjd09UTTNOQ3cwTGpNM01Ea3pOellnTUNBd0lERWdNeTR4T1RRek9Dd3RNUzR5TnpRNU5Ea2dZeUF5TGpRME16UTNMREFnTkM0eE5UWXhNU3d4TGpZNU1qVTJOeUEwTGpFMU5qRXhMRFF1TVRVMk1URTNJSFlnTmk0Mk9ERTRPVElnYUNBdE1pNHdPRGd4SUhZZ0xUWXVNek15TlRReUlHTWdNQ3d0TVM0Mk56QTBOek1nTFRFdU1ESXpPVFlzTFRJdU5qazBORFExSUMweUxqWXpNaklzTFRJdU5qazBORFExSUdFZ015NHdNVEUyTnpBeUxETXVNREV4Tmpjd05pQXdJREFnTUNBdE1pNDJNekF4T1N3eExqTTNOek16TlNCMklEY3VOalF6TmpJMUlHZ2dMVEl1TURnNE1Ea2dlaUlLSUNBZ0lDQnBaRDBpY0dGMGFESTJJZ29nSUNBZ0lITjBlV3hsUFNKemRISnZhMlV0ZDJsa2RHZzZNQzR5TURBM056Z2lJQzgrQ2lBZ1BIQmhkR2dLSUNBZ0lDQmpiR0Z6Y3owaVkyeHpMVEVpQ2lBZ0lDQWdaRDBpYlNBeE1qTXVNVEU1TURrc016QXVNRFF3TkRFeklHRWdNUzR5T0RJNU56RTFMREV1TWpneU9UY3hOU0F3SURBZ01TQXhMakkzTkRrMExDMHhMakk1TXpBeE55QXhMakk1TlRBeE9ESXNNUzR5T1RVd01UZ3hJREFnTUNBeElEQXNNaTQxT0Rnd016RWdNUzR5T0RJNU56RTFMREV1TWpneU9UY3hOU0F3SURBZ01TQXRNUzR5TnpRNU5Dd3RNUzR5T1RVd01UUWdlaUJ0SURJdU16RTRPVGdzTVRNdU5qTTJPRFF5SUdnZ0xUSXVNRGc0TURrZ1ZpQXpNeTR3TkRnd05qRWdhQ0F5TGpBNE9EQTVJSG9pQ2lBZ0lDQWdhV1E5SW5CaGRHZ3lPQ0lLSUNBZ0lDQnpkSGxzWlQwaWMzUnliMnRsTFhkcFpIUm9PakF1TWpBd056YzRJaUF2UGdvZ0lEeHdZWFJvQ2lBZ0lDQWdZMnhoYzNNOUltTnNjeTB4SWdvZ0lDQWdJR1E5SW0wZ01USTVMalE0TnpjM0xETXpMakEwT0RBMk1TQjJJQzB4TGpZd05qSXhPQ0JqSURBc0xUSXVNakE0TlRZZ01TNHlOekk1TXl3dE15NDBNak15TmprZ015NDJNVFFzTFRNdU5ESXpNalk1SUdFZ05TNDFNVEV6TlRZMUxEVXVOVEV4TXpVMk5TQXdJREFnTVNBeExqVXdNemd6TERBdU1UZzJOekkwSUhZZ01TNDRNVGN3TXpVZ1lTQTBMakUyTWpFeU9ESXNOQzR4TmpJeE1qZzBJREFnTUNBd0lDMHhMak14TlRFc0xUQXVNVGc0TnpJMElHTWdMVEV1TVRRNE5EVXNNQ0F0TVM0M01USTJOQ3d3TGpVeU1qQXlNU0F0TVM0M01USTJOQ3d4TGpZMU1ETTVOQ0IySURFdU5UWTJNRGN5SUdnZ015NHdNamMzTkNCMklERXVOelUwTnprMElHZ2dMVE11TURJNU56UWdkaUE0TGpnM05ETTROaUJvSUMweUxqQTRPREE1SUhZZ0xUZ3VPRGMwTXpnMklHZ2dMVEl1TkRZek5UVWdkaUF0TVM0M05UWTRNRGdnZWlJS0lDQWdJQ0JwWkQwaWNHRjBhRE13SWdvZ0lDQWdJSE4wZVd4bFBTSnpkSEp2YTJVdGQybGtkR2c2TUM0eU1EQTNOemdpSUM4K0NpQWdQSEJoZEdnS0lDQWdJQ0JqYkdGemN6MGlZMnh6TFRFaUNpQWdJQ0FnWkQwaWJTQXhNemN1TnpjM09Ea3NNelF1T0RBeU9EVTFJR2dnTFRJdU1qVXlOek1nZGlBdE1TNDNOVFEzT1RRZ2FDQXlMakkxTmpjMElIWWdMVEl1TnpFME5URXlJR3dnTWk0d05qWXdNU3d0TUM0MU1ERTVOVFFnZGlBekxqSXhNalExTXlCb0lETXVNVE15TVRRZ2RpQXhMamMxTkRjNU5DQm9JQzB6TGpFek1qRTBJSFlnTlM0M05UZ3pNak1nWXlBd0xERXVNRGcyTVRrNUlEQXVORE01Tnl3eExqUTRNemN6TnlBeExqVTJOakEzTERFdU5EZ3pOek0zSUdFZ05DNHhNekF3TURNNExEUXVNVE13TURBMElEQWdNQ0F3SURFdU5USTFPVEVzTFRBdU1qVXdPVFl5SUhZZ01TNDNOVEkzT1RRZ1lTQTJMamt3TURjME1EUXNOaTQ1TURBM016azRJREFnTUNBeElDMHhMams0TXpZNExEQXVNekV6TWpBMElHTWdMVEl1TURZNE1ESXNNQ0F0TXk0eE56UXpNU3d0TUM0NU56azNPVGtnTFRNdU1UYzBNekVzTFRJdU9ERXdPRGc0SUhvaUNpQWdJQ0FnYVdROUluQmhkR2d6TWlJS0lDQWdJQ0J6ZEhsc1pUMGljM1J5YjJ0bExYZHBaSFJvT2pBdU1qQXdOemM0SWlBdlBnb2dJRHh3WVhSb0NpQWdJQ0FnWTJ4aGMzTTlJbU5zY3kweUlnb2dJQ0FnSUdROUltMGdNalV1TkRrNE9EQTRMREUyTGpZMk5EVTNOU0JqSURJdU5URXhOek16TERBZ05pNHhORFU0TVRVc0xUQXVOVEU0TURBM0lEWXVNVFExT0RFMUxDMHpMalV3TlRVNE5TQmhJREl1T0RFd09Ea3lNaXd5TGpneE1EZzVNaklnTUNBd0lEQWdMVEF1TURZeU1qUXNMVEF1TmpnMk5qWWdUQ0F6TUM0d09EWTFPRFlzTlM0NU56VXhOVFF4SUVNZ01qa3VOelF4TWpRM0xEUXVOVFExTmpFME15QXlPUzQwTXpnd056TXNNeTQ0T1RjeE1ERXpJREkyTGpreU9ETTBOeXd5TGpZME1qSXpPRE1nTWpRdU9UYzBOemMzTERFdU5qUTBNemN4TlNBeU1DNDNNekl6TXpnc01DQXhPUzQwTnpVME5qY3NNQ0JqSUMweExqRTJPRFV5T0N3d0lDMHhMalV4TlRnM05Dd3hMalV4TXpnMk5qSWdMVEl1T1RBeE1qUXlMREV1TlRFek9EWTJNaUF0TVM0ek5ERXhPVGNzTUNBdE1pNHpNemN3TlRZc0xURXVNVEkwTXpVMk9TQXRNeTQxT1RFNU1Ua3NMVEV1TVRJME16VTJPU0F0TVM0eU1EUTJOamdzTUNBdE1TNDVPRGszTVN3d0xqZ3lNVEU0TWpFZ0xUSXVOVGsyTURVNUxESXVOVEE1TnpJMU5DQXdMREFnTFRFdU5qZzROVFF6TERRdU56WXlORFUwTVNBdE1TNDVNRFV6T0RRc05TNDBOVE14TXpBeklHRWdNUzR5T1RFd01ESTJMREV1TWpreE1EQXlOaUF3SURBZ01DQXRNQzR3TkRneE9Td3dMak00T1RVeElHTWdNQ3d4TGpnMU1URTNNeUEzTGpJNU5ESTJOU3czTGpreU1qY2dNVGN1TURZMk1UTXhMRGN1T1RJeU55QnRJRFl1TlRNMU16STBMQzB5TGpJNU1qZzROU0JqSURBdU16UTNNelEyTERFdU5qUTBNemN5SURBdU16UTNNelEyTERFdU9ERTNNRFF4SURBdU16UTNNelEyTERJdU1ETXpPRGd5SURBc01pNDRNVEE0T1RJZ0xUTXVNVFl3TWpRMkxEUXVNemN3T1RReklDMDNMak14TkRNME15dzBMak0zTURrME15QXRPUzQwTURZME5Td3RNQzR3TURJZ0xURTNMall5TWpJNE5qSXNMVFV1TkRrM016QTRJQzB4Tnk0Mk1qSXlPRFl5TEMwNUxqRXpNVE01TVNCQklETXVOekEwTXpVME5Dd3pMamN3TkRNMU5TQXdJREFnTVNBM0xqYzBPREF5TXpZc01UQXVNVGN6TkRJeElFTWdOQzR6TnpBNU16YzBMREV3TGpNME5EQTROQ0F3TERFd0xqazFNRFF6TkNBd0xERTBMamd3TVRNMU5TQmpJREFzTmk0ek1qQTBPVGdnTVRRdU9UYzJNRE15TERFMExqRXhNRFk0TXlBeU5pNDRNek01T0RJc01UUXVNVEV3TmpneklEa3VNRGt4TWpJNExEQWdNVEV1TXpnME1URXpMQzAwTGpFeE1UazBNaUF4TVM0ek9EUXhNVE1zTFRjdU16VTROVEUwSURBc0xUSXVOVFV6T1RBeElDMHlMakl3T0RVMU9Dd3ROUzQwTlRNeE16UWdMVFl1TVRnNU9UZzJMQzAzTGpFNE16ZzBNaUlLSUNBZ0lDQnBaRDBpY0dGMGFETTBJZ29nSUNBZ0lITjBlV3hsUFNKemRISnZhMlV0ZDJsa2RHZzZNQzR5TURBM056Z2lJQzgrQ2lBZ1BIQmhkR2dLSUNBZ0lDQmtQU0p0SURNeUxqQXlPREV3T1N3eE5DNHpOamsyT0RJZ1l5QXdMak0wTnpNME5pd3hMalkwTkRNM01pQXdMak0wTnpNME5pd3hMamd4TnpBME1pQXdMak0wTnpNME5pd3lMakF6TXpnNE1pQXdMREl1T0RFd09Ea3lJQzB6TGpFMk1ESTBOaXcwTGpNM01Ea3pOeUF0Tnk0ek1UUXpORE1zTkM0ek56QTVNemNnTFRrdU5EQXdOREkzTERBZ0xURTNMall4TmpJMk16SXNMVFV1TkRrMU1qazBJQzB4Tnk0Mk1UWXlOak15TEMwNUxqRXlPVE0zTnlCQklETXVOekEwTXpVME5Dd3pMamN3TkRNMU5TQXdJREFnTVNBM0xqYzBPREF5TXpZc01UQXVNVGN6TkRJeElFd2dPQzQwT0RJNE56RXNPQzR6TlRRek56TWdZU0F4TGpJNU1UQXdNallzTVM0eU9URXdNREkySURBZ01DQXdJQzB3TGpBMU1ERTVMREF1TXpnM05UQXlJR01nTUN3eExqZzFNVEUzTXlBM0xqSTVOREkyTlN3M0xqa3lNamNnTVRjdU1EWTJNVE14TERjdU9USXlOeUF5TGpVeE1UY3pNeXd3SURZdU1UUTFPREUxTEMwd0xqVXhPREF3TnlBMkxqRTBOVGd4TlN3dE15NDFNRFUxT0RVZ1lTQXlMamd4TURnNU1qSXNNaTQ0TVRBNE9USXlJREFnTUNBd0lDMHdMakEyTWpJMExDMHdMalk0TmpZMklIb2lDaUFnSUNBZ2FXUTlJbkJoZEdnek5pSUtJQ0FnSUNCemRIbHNaVDBpYzNSeWIydGxMWGRwWkhSb09qQXVNakF3TnpjNElpQXZQZ29nSUR4d1lYUm9DaUFnSUNBZ1kyeGhjM005SW1Oc2N5MHhJZ29nSUNBZ0lHUTlJbTBnTVRFMkxqSTVPRFkyTERFNExqVXpNVGd4TVNCaklEQXNNaTR6T0RjeU5USWdNUzQwTXpVMU5pd3pMalUwTnpjME5TQTBMakExTXpjeExETXVOVFEzTnpRMUlHRWdNVEF1TkRZeU5UUXlMREV3TGpRMk1qVTBNaUF3SURBZ01DQXlMak00TnpJMUxDMHdMak16TnpNeE1TQjJJQzB5TGpjMk5qY3hOQ0JoSURRdU9UZzNNekkxT1N3MExqazROek15TmpNZ01DQXdJREVnTFRFdU5UUXhPVGdzTUM0eU16STVNREVnWXlBdE1TNHdOemd4T0N3d0lDMHhMalEzTnpjekxDMHdMak16TnpNd055QXRNUzQwTnpjM015d3RNUzR6TlRFeU16VWdkaUF0TkM0eU5EUTBORGdnYUNBekxqRXlOREV4SUhZZ0xUSXVPRFV4TURRM0lHZ2dMVE11TVRJME1URWdWaUEzTGpFME56WTVOek1nYkNBdE15NDBNVE15TWl3d0xqY3pPRGcyTXpVZ2RpQXlMamczTlRFME1USWdhQ0F0TWk0eU5qUTNPQ0IySURJdU9EVXhNRFEzSUdnZ01pNHlOVGczTmlCNklHMGdMVEV3TGpZME1USTBMREF1TURZME1qVWdZeUF3TEMwd0xqY3pPRGcyTXlBd0xqYzBNRGczTEMweExqQTVPREkxTmlBeExqZzFPVEl4TEMweExqQTVPREkxTmlCaElEZ3VOalUzTlRRNExEZ3VOalUzTlRRM05DQXdJREFnTVNBeUxqQXlOemcxTERBdU1qVXlPVGdnZGlBeExqUXpOVFUyTWlCaElEUXVNekU0TnpNMU1TdzBMak14T0Rjek5UY2dNQ0F3SURFZ0xUSXVNVEk0TWpRc01DNDFNamd3TkRrZ1l5QXRNUzR3T1RZeU5Td3dJQzB4TGpjMU1qYzVMQzB3TGpReU1UWXpOU0F0TVM0M05USTNPU3d0TVM0eE1UZ3pNelVnYlNBeExqQTBOREEwTERNdU5USTFOalU0SUdNZ01TNHlNRFEyTnl3d0lESXVNVGMyTkRRc0xUQXVNalV5T1RjM0lETXVNRGd6T1RVc0xUQXVPRFkxTXpRMElIWWdNQzQyTnpZMk1qSWdhQ0F6TGpNM056QTVJSFlnTFRjdU1UVTVOelVnWXlBd0xDMHlMamN5TWpVMUlDMHhMamd6TlRFeExDMDBMakl4TmpNek9TQXROQzQ0T1RZNU9Dd3ROQzR5TVRZek16a2dMVEV1TnpFd05qTXNNQ0F0TXk0ME1ERXhPQ3d3TGpRd01UVTFOeUF0TlM0eU1qQXlNeXd4TGpJeU5EYzBOeUJzSURFdU1qSTBOelVzTWk0MU1UTTNOREVnWXlBeExqTXdPVEEzTEMwd0xqVTFNREV6TWlBeUxqUXdPVE0wTEMwd0xqZzROelF6T1NBekxqTTNPVEE1TEMwd0xqZzROelF6T1NBeExqUXdOVFExTERBZ01pNHhNekl5Tnl3d0xqVTBPREV5TkNBeUxqRXpNakkzTERFdU5qWTRORFkxSUhZZ01DNDFORGd4TWpRZ1lTQTVMamswTkRVek5URXNPUzQ1TkRRMU16UTNJREFnTUNBd0lDMHlMalV6TXpneUxDMHdMak14TnpJeU9TQmpJQzB5TGpnM016RTBMREFnTFRRdU5qQXpPRFFzTVM0eU1EUTJOamdnTFRRdU5qQXpPRFFzTXk0ek5Ua3dNVFlnTUN3eExqazJNell3TnlBeExqVTJNakExTERNdU5EWXhOREV6SURRdU1EVXpOekVzTXk0ME5qRTBNVE1nVFNBNE9DNHhORE0xTlRZc01qRXVPVE01TURBNElHZ2dNeTQyTXpJd056VWdkaUF0TlM0M09USTBOQ0JvSURZdU1EZ3hOVFkySUhZZ05TNDNPRFkwTWpnZ2FDQXpMall6TWpBM015QldJRGN1TVRVeE56RXpOU0JJSURrM0xqZzJOVEl5T0NCV0lERXlMamd6TVRjeU15QklJRGt4TGpjNE16WTJNaUJXSURjdU1UVXhOekV6TlNCSUlEZzRMakUxTVRVNE55QmFJRTBnTnpRdU16RXhPVFU1TERFMkxqTXpOek13TnlCaklEQXNMVEV1TmpBMk1qSTBJREV1TWpZMk9UQTVMQzB5TGpnek1EazNJREl1T1RNMU16YzBMQzB5TGpnek1EazNJR0VnTXk0ME5UY3pPVGMwTERNdU5EVTNNemszTWlBd0lEQWdNU0F5TGpNMk5URTJOU3d3TGpnMk56TTJNU0JXSURFNExqSTNNRGdnWVNBekxqSTRORGN5T0RNc015NHlPRFEzTWpnMUlEQWdNQ0F4SUMweUxqTTJOVEUyTlN3d0xqZzROelF6T0NCaklDMHhMalkwTmpNM09Td3dJQzB5TGprek5UTTNOQ3d0TVM0eU1qUTNORFVnTFRJdU9UTTFNemMwTEMweUxqZ3lPRGsyTWlCdElEVXVNelF5TnpBekxEVXVOVGsxTmpjNUlHZ2dNeTR6Tnprd09UUWdWaUEyTGpReE1qZzFJRXdnTnprdU5qSXdOVE1zTnk0eE5URTNNVE0xSUhZZ05DNHlNREl5T0RNMUlHRWdOUzQyT0RJd01UYzRMRFV1TmpneU1ERTNNaUF3SURBZ01DQXRNaTQ0TlRFd05EZ3NMVEF1TnpNNE9EWTBJR01nTFRNdU1qVXdOVGsyTERBZ0xUVXVPREEyTlN3eUxqVXhNVGN6TXlBdE5TNDRNRFkxTERVdU56SXlNVGMwSUdFZ05TNDJOekU1TnpnNUxEVXVOamN4T1RjNE15QXdJREFnTUNBMUxqWTVOREEyTkN3MUxqYzBPREkzTnlBMUxqQTBNelUwTXpjc05TNHdORE0xTkRReklEQWdNQ0F3SURJdU9UazNOakUyTEMwd0xqazJPVGMxT0NCNklFMGdOalF1TVRVMk5qQTNMREV6TGpNMU1UY3pPQ0JqSURFdU1EYzJNVGNzTUNBeExqazRNelk0Tnl3d0xqWTVOalk1T1NBeUxqTTBNekEzT1N3eExqYzNNamcyT1NCb0lDMDBMalkyTURBMU55QmpJREF1TXpNM016QTNMQzB4TGpFeE9ETXpNeUF4TGpFNE1qVTRNaXd0TVM0M056STROamtnTWk0ek1qTXdNREVzTFRFdU56Y3lPRFk1SUcwZ0xUVXVOemN3TXpZc015NHdNRFUyTkRjZ1l5QXdMRE11TWpVeU5qQTBJREl1TmpZd016QTVMRFV1TnpnMk5ESTJJRFl1TURjNU5UVTRMRFV1TnpnMk5ESTJJREV1T0RjNU1qZ3pMREFnTXk0eU5USTJNRFFzTFRBdU5UQTNPVFkySURRdU5qWTRNRGc1TEMweExqWTVNRFUxTXlCc0lDMHlMakkyTURjMkxDMHlMakF3TnpjNE1pQmpJQzB3TGpVeU9EQTBOaXd3TGpVMU1ERXpNaUF0TVM0ek1Ea3dOek1zTUM0NE5EVXlOellnTFRJdU1qTTJOalkzTERBdU9EUTFNamMySUdFZ01pNDRPRGt4T1RVMkxESXVPRGc1TVRrMU9DQXdJREFnTVNBdE1pNDNORFkyTkRRc0xURXVOemN5T0RjeElHZ2dOeTQ1TmpBNE5Ea2dkaUF0TUM0NE5ETXlOamNnWXlBd0xDMHpMalUwTnpjME9DQXRNaTR6T0RVeU5ETXNMVFl1TVRBeE5qUTBJQzAxTGpZek56ZzBOeXd0Tmk0eE1ERTJORFFnWVNBMUxqY3pOakl5Tnprc05TNDNNell5TWpnMUlEQWdNQ0F3SUMwMUxqZ3lNalUyTWl3MUxqYzRORFF4TlNCdElDMDFMamc1TkRnME15d3ROaTR4TURFMk5EUWdZeUF4TGpJd05EWTJPQ3d3SURFdU9EYzVNamd5TERBdU56VTRPVFF4SURFdU9EYzVNamd5TERFdU5qWTRORFkySURBc01DNDVNRGsxTWpRZ0xUQXVOamMyTmpJeUxERXVOalk0TkRZMUlDMHhMamczT1RJNE1pd3hMalkyT0RRMk5TQm9JQzB6TGpVNE9Ua3hNU0IySUMwekxqTXpOamt6TVNCNklHMGdMVGN1TWpJNE1EQTRMREV4TGpZM056STFOU0JvSURNdU5qTXlNRGMwSUhZZ0xUVXVNemcwT0RjeUlHZ2dNaTQzTmpRM01UTWdiQ0F5TGpjNE9EZ3dOeXcxTGpNNE5EZzNNaUJvSURRdU1EVXpOekE0SUd3Z0xUTXVNalV5TmpBMExDMDFMamt4TWpreE9DQmhJRFF1TkRjeE16STJOQ3cwTGpRM01UTXlOamdnTUNBd0lEQWdNaTQzT0RZM09Ua3NMVFF1TVRZd01USWdZeUF3TEMweUxqWTJNRE13T1NBdE1pNHdPVEF3T1Rrc0xUUXVOekE0TWpRME5TQXROUzR5TWpBeU1qa3NMVFF1TnpBNE1qUTBOU0JvSUMwM0xqVTBOekkwTlNCNklnb2dJQ0FnSUdsa1BTSndZWFJvTXpnaUNpQWdJQ0FnYzNSNWJHVTlJbk4wY205clpTMTNhV1IwYURvd0xqSXdNRGMzT0NJZ0x6NEtQQzl6ZG1jK0NnPT0iIGFsdD0iUmVkIEhhdCBPcGVuU2hpZnQgbG9nbyIgY2xhc3M9InBmLWMtYnJhbmQiIC8+CgogICAgICAgIDwvaGVhZGVyPgogICAgICAgIDxtYWluIGNsYXNzPSJwZi1jLWxvZ2luX19tYWluIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InBmLWMtbG9naW5fX21haW4tYm9keSI+CiAgICAgICAgICAgIHt7IGlmIGVxIChsZW4gLlByb3ZpZGVycykgMX19CiAgICAgICAgICAgICAgPGEgY2xhc3M9InBmLWMtYnV0dG9uIHBmLW0tcHJpbWFyeSBwZi1tLWJsb2NrIiBocmVmPSJ7eyAoaW5kZXggLlByb3ZpZGVycyAwKS5VUkwgfX0iPnt7IC5Mb2NhbGUuTG9nSW4gfX08L2E+CiAgICAgICAgICAgIHt7IGVsc2UgfX0KICAgICAgICAgICAgICA8aDEgY2xhc3M9InBmLWMtdGl0bGUgcGYtbS0zeGwiPnt7IC5Mb2NhbGUuTG9nSW5XaXRoIH19PC9oMT4KICAgICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgICB7eyAkbG9nSW5XaXRoIDo9IC5Mb2NhbGUuTG9nSW5XaXRoIH19CiAgICAgICAgICAgICAgICB7eyByYW5nZSAkcHJvdmlkZXIgOj0gLlByb3ZpZGVycyB9fQogICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImlkcCI+CiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0ie3skcHJvdmlkZXIuVVJMfX0iIGNsYXNzPSJwZi1jLWJ1dHRvbiBwZi1tLXNlY29uZGFyeSBwZi1tLWJsb2NrIiB0aXRsZT0ie3sgJGxvZ0luV2l0aCB9fSB7eyRwcm92aWRlci5OYW1lfX0iPnt7JHByb3ZpZGVyLk5hbWV9fTwvYT4KICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIHt7IGVuZCB9fQogICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIHt7IGVuZCB9fQogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9tYWluPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvYm9keT4KPC9odG1sPgo= kind: Secret metadata: - annotations: - synthetic.mom.openshift.io/controller-instance-name: TODO-staticResourceController creationTimestamp: null name: v4-0-config-system-ocp-branding-template namespace: openshift-authentication diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/secrets/dc0d-metadata-v4-0-config-system-ocp-branding-template.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/secrets/dc0d-metadata-v4-0-config-system-ocp-branding-template.yaml new file mode 100644 index 000000000..7949fbd92 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/secrets/dc0d-metadata-v4-0-config-system-ocp-branding-template.yaml @@ -0,0 +1,9 @@ +action: Create +controllerInstanceName: TODO-staticResourceController +generateName: "" +mame: v4-0-config-system-ocp-branding-template +namespace: openshift-authentication +resourceType: + Group: "" + Resource: secrets + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/serviceaccounts/027-body-oauth-openshift.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/serviceaccounts/e784-body-oauth-openshift.yaml similarity index 62% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/serviceaccounts/027-body-oauth-openshift.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/serviceaccounts/e784-body-oauth-openshift.yaml index b4ea89874..014faf337 100644 --- a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/serviceaccounts/027-body-oauth-openshift.yaml +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/serviceaccounts/e784-body-oauth-openshift.yaml @@ -1,8 +1,6 @@ apiVersion: v1 kind: ServiceAccount metadata: - annotations: - synthetic.mom.openshift.io/controller-instance-name: TODO-staticResourceController creationTimestamp: null labels: app: oauth-openshift diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/serviceaccounts/e784-metadata-oauth-openshift.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/serviceaccounts/e784-metadata-oauth-openshift.yaml new file mode 100644 index 000000000..6eef77fd5 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/serviceaccounts/e784-metadata-oauth-openshift.yaml @@ -0,0 +1,9 @@ +action: Create +controllerInstanceName: TODO-staticResourceController +generateName: "" +mame: oauth-openshift +namespace: openshift-authentication +resourceType: + Group: "" + Resource: serviceaccounts + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/services/029-body-oauth-openshift.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/services/421e-body-oauth-openshift.yaml similarity index 86% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/services/029-body-oauth-openshift.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/services/421e-body-oauth-openshift.yaml index 5016a568a..7c2011f94 100644 --- a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/services/029-body-oauth-openshift.yaml +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/services/421e-body-oauth-openshift.yaml @@ -2,7 +2,6 @@ apiVersion: v1 kind: Service metadata: annotations: - synthetic.mom.openshift.io/controller-instance-name: TODO-staticResourceController operator.openshift.io/spec-hash: d9e6d53076d47ab2d123d8b1ba8ec6543488d973dcc4e02349493cd1c33bce83 service.alpha.openshift.io/serving-cert-secret-name: v4-0-config-system-serving-cert creationTimestamp: null diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/services/421e-metadata-oauth-openshift.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/services/421e-metadata-oauth-openshift.yaml new file mode 100644 index 000000000..d63ac9ccb --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-authentication/core/services/421e-metadata-oauth-openshift.yaml @@ -0,0 +1,9 @@ +action: Create +controllerInstanceName: TODO-staticResourceController +generateName: "" +mame: oauth-openshift +namespace: openshift-authentication +resourceType: + Group: "" + Resource: services + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-config-managed/rbac.authorization.k8s.io/rolebindings/033-body-system-COLON-openshift-COLON-oauth-servercert-trust.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-config-managed/rbac.authorization.k8s.io/rolebindings/e0e8-body-system-COLON-openshift-COLON-oauth-servercert-trust.yaml similarity index 78% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-config-managed/rbac.authorization.k8s.io/rolebindings/033-body-system-COLON-openshift-COLON-oauth-servercert-trust.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-config-managed/rbac.authorization.k8s.io/rolebindings/e0e8-body-system-COLON-openshift-COLON-oauth-servercert-trust.yaml index 10a2bb654..2397a5ec8 100644 --- a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-config-managed/rbac.authorization.k8s.io/rolebindings/033-body-system-COLON-openshift-COLON-oauth-servercert-trust.yaml +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-config-managed/rbac.authorization.k8s.io/rolebindings/e0e8-body-system-COLON-openshift-COLON-oauth-servercert-trust.yaml @@ -1,8 +1,6 @@ apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: - annotations: - synthetic.mom.openshift.io/controller-instance-name: TODO-staticResourceController creationTimestamp: null name: system:openshift:oauth-servercert-trust namespace: openshift-config-managed diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-config-managed/rbac.authorization.k8s.io/rolebindings/e0e8-metadata-system-COLON-openshift-COLON-oauth-servercert-trust.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-config-managed/rbac.authorization.k8s.io/rolebindings/e0e8-metadata-system-COLON-openshift-COLON-oauth-servercert-trust.yaml new file mode 100644 index 000000000..2b36f030d --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-config-managed/rbac.authorization.k8s.io/rolebindings/e0e8-metadata-system-COLON-openshift-COLON-oauth-servercert-trust.yaml @@ -0,0 +1,9 @@ +action: Create +controllerInstanceName: TODO-staticResourceController +generateName: "" +mame: system:openshift:oauth-servercert-trust +namespace: openshift-config-managed +resourceType: + Group: rbac.authorization.k8s.io + Resource: rolebindings + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-config-managed/rbac.authorization.k8s.io/roles/031-body-system-COLON-openshift-COLON-oauth-servercert-trust.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-config-managed/rbac.authorization.k8s.io/roles/8c64-body-system-COLON-openshift-COLON-oauth-servercert-trust.yaml similarity index 74% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-config-managed/rbac.authorization.k8s.io/roles/031-body-system-COLON-openshift-COLON-oauth-servercert-trust.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-config-managed/rbac.authorization.k8s.io/roles/8c64-body-system-COLON-openshift-COLON-oauth-servercert-trust.yaml index 8cb8b219c..f654a2943 100644 --- a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-config-managed/rbac.authorization.k8s.io/roles/031-body-system-COLON-openshift-COLON-oauth-servercert-trust.yaml +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-config-managed/rbac.authorization.k8s.io/roles/8c64-body-system-COLON-openshift-COLON-oauth-servercert-trust.yaml @@ -1,8 +1,6 @@ apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: - annotations: - synthetic.mom.openshift.io/controller-instance-name: TODO-staticResourceController creationTimestamp: null name: system:openshift:oauth-servercert-trust namespace: openshift-config-managed diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-config-managed/rbac.authorization.k8s.io/roles/8c64-metadata-system-COLON-openshift-COLON-oauth-servercert-trust.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-config-managed/rbac.authorization.k8s.io/roles/8c64-metadata-system-COLON-openshift-COLON-oauth-servercert-trust.yaml new file mode 100644 index 000000000..3c11246cc --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-config-managed/rbac.authorization.k8s.io/roles/8c64-metadata-system-COLON-openshift-COLON-oauth-servercert-trust.yaml @@ -0,0 +1,9 @@ +action: Create +controllerInstanceName: TODO-staticResourceController +generateName: "" +mame: system:openshift:oauth-servercert-trust +namespace: openshift-config-managed +resourceType: + Group: rbac.authorization.k8s.io + Resource: roles + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-oauth-apiserver/policy/poddisruptionbudgets/5a7c-body-oauth-apiserver-pdb.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-oauth-apiserver/policy/poddisruptionbudgets/5a7c-body-oauth-apiserver-pdb.yaml new file mode 100644 index 000000000..78e43c8e3 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-oauth-apiserver/policy/poddisruptionbudgets/5a7c-body-oauth-apiserver-pdb.yaml @@ -0,0 +1,18 @@ +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + creationTimestamp: null + name: oauth-apiserver-pdb + namespace: openshift-oauth-apiserver +spec: + maxUnavailable: 1 + selector: + matchLabels: + apiserver: "true" + app: openshift-oauth-apiserver + unhealthyPodEvictionPolicy: AlwaysAllow +status: + currentHealthy: 0 + desiredHealthy: 0 + disruptionsAllowed: 0 + expectedPods: 0 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-oauth-apiserver/policy/poddisruptionbudgets/5a7c-metadata-oauth-apiserver-pdb.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-oauth-apiserver/policy/poddisruptionbudgets/5a7c-metadata-oauth-apiserver-pdb.yaml new file mode 100644 index 000000000..af95e0792 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Create/namespaces/openshift-oauth-apiserver/policy/poddisruptionbudgets/5a7c-metadata-oauth-apiserver-pdb.yaml @@ -0,0 +1,9 @@ +action: Create +controllerInstanceName: APIServerStaticResources-StaticResources +generateName: "" +mame: oauth-apiserver-pdb +namespace: openshift-oauth-apiserver +resourceType: + Group: policy + Resource: poddisruptionbudgets + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Update/cluster-scoped-resources/operator.openshift.io/authentications/046-body-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Update/cluster-scoped-resources/operator.openshift.io/authentications/11e6-body-cluster.yaml similarity index 92% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Update/cluster-scoped-resources/operator.openshift.io/authentications/046-body-cluster.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Update/cluster-scoped-resources/operator.openshift.io/authentications/11e6-body-cluster.yaml index e4c9137fc..1153822cb 100644 --- a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Update/cluster-scoped-resources/operator.openshift.io/authentications/046-body-cluster.yaml +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Update/cluster-scoped-resources/operator.openshift.io/authentications/11e6-body-cluster.yaml @@ -4,7 +4,6 @@ metadata: annotations: include.release.openshift.io/self-managed-high-availability: "true" include.release.openshift.io/single-node-developer: "true" - synthetic.mom.openshift.io/controller-instance-name: TODO-other-configObserver release.openshift.io/create-only: "true" name: cluster spec: diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Update/cluster-scoped-resources/operator.openshift.io/authentications/11e6-metadata-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Update/cluster-scoped-resources/operator.openshift.io/authentications/11e6-metadata-cluster.yaml new file mode 100644 index 000000000..f690bce81 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Update/cluster-scoped-resources/operator.openshift.io/authentications/11e6-metadata-cluster.yaml @@ -0,0 +1,8 @@ +action: Update +controllerInstanceName: TODO-other-configObserver +generateName: "" +mame: cluster +resourceType: + Group: operator.openshift.io + Resource: authentications + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Update/cluster-scoped-resources/operator.openshift.io/authentications/007-body-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Update/cluster-scoped-resources/operator.openshift.io/authentications/e1f4-body-cluster.yaml similarity index 94% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Update/cluster-scoped-resources/operator.openshift.io/authentications/007-body-cluster.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Update/cluster-scoped-resources/operator.openshift.io/authentications/e1f4-body-cluster.yaml index fca20ca56..d740df0b6 100644 --- a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Update/cluster-scoped-resources/operator.openshift.io/authentications/007-body-cluster.yaml +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Update/cluster-scoped-resources/operator.openshift.io/authentications/e1f4-body-cluster.yaml @@ -4,7 +4,6 @@ metadata: annotations: include.release.openshift.io/self-managed-high-availability: "true" include.release.openshift.io/single-node-developer: "true" - synthetic.mom.openshift.io/controller-instance-name: TODO-configObserver release.openshift.io/create-only: "true" name: cluster spec: @@ -15,6 +14,7 @@ spec: - //127\.0\.0\.1(:|$) - //localhost(:|$) oauthConfig: + loginURL: https://api.ostest.test.metalkube.org:6443 tokenConfig: accessTokenMaxAgeSeconds: 86400 authorizeTokenMaxAgeSeconds: 300 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Update/cluster-scoped-resources/operator.openshift.io/authentications/e1f4-metadata-cluster.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Update/cluster-scoped-resources/operator.openshift.io/authentications/e1f4-metadata-cluster.yaml new file mode 100644 index 000000000..9f2b1248a --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/Update/cluster-scoped-resources/operator.openshift.io/authentications/e1f4-metadata-cluster.yaml @@ -0,0 +1,8 @@ +action: Update +controllerInstanceName: TODO-configObserver +generateName: "" +mame: cluster +resourceType: + Group: operator.openshift.io + Resource: authentications + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/UpdateStatus/cluster-scoped-resources/config.openshift.io/clusteroperators/0598-body-authentication.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/UpdateStatus/cluster-scoped-resources/config.openshift.io/clusteroperators/0598-body-authentication.yaml new file mode 100644 index 000000000..2df731e84 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/UpdateStatus/cluster-scoped-resources/config.openshift.io/clusteroperators/0598-body-authentication.yaml @@ -0,0 +1,71 @@ +apiVersion: config.openshift.io/v1 +kind: ClusterOperator +metadata: + creationTimestamp: null + name: authentication +spec: {} +status: + conditions: + - lastTransitionTime: "2024-12-05T18:54:45Z" + reason: NoData + status: Unknown + type: Degraded + - lastTransitionTime: "2024-12-05T18:54:45Z" + reason: NoData + status: Unknown + type: Progressing + - lastTransitionTime: "2024-12-05T18:54:45Z" + reason: NoData + status: Unknown + type: Available + - lastTransitionTime: "2024-12-05T18:54:45Z" + reason: NoData + status: Unknown + type: Upgradeable + - lastTransitionTime: "2024-12-05T18:54:45Z" + reason: NoData + status: Unknown + type: EvaluationConditionsDetected + extension: null + relatedObjects: + - group: operator.openshift.io + name: cluster + resource: authentications + - group: config.openshift.io + name: cluster + resource: authentications + - group: config.openshift.io + name: cluster + resource: infrastructures + - group: config.openshift.io + name: cluster + resource: oauths + - group: route.openshift.io + name: oauth-openshift + namespace: openshift-authentication + resource: routes + - group: "" + name: oauth-openshift + namespace: openshift-authentication + resource: services + - group: "" + name: openshift-config + resource: namespaces + - group: "" + name: openshift-config-managed + resource: namespaces + - group: "" + name: openshift-authentication + resource: namespaces + - group: "" + name: openshift-authentication-operator + resource: namespaces + - group: "" + name: openshift-ingress + resource: namespaces + - group: "" + name: openshift-oauth-apiserver + resource: namespaces + versions: + - name: operator + version: "" diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/UpdateStatus/cluster-scoped-resources/config.openshift.io/clusteroperators/0598-metadata-authentication.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/UpdateStatus/cluster-scoped-resources/config.openshift.io/clusteroperators/0598-metadata-authentication.yaml new file mode 100644 index 000000000..2fba29eae --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/Management/UpdateStatus/cluster-scoped-resources/config.openshift.io/clusteroperators/0598-metadata-authentication.yaml @@ -0,0 +1,8 @@ +action: UpdateStatus +controllerInstanceName: authentication +generateName: "" +mame: authentication +resourceType: + Group: config.openshift.io + Resource: clusteroperators + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/cluster-scoped-resources/certificates.k8s.io/certificatesigningrequests/049-body-system-COLON-openshift-COLON-openshift-authenticator-.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/cluster-scoped-resources/certificates.k8s.io/certificatesigningrequests/c5ab-body-system-COLON-openshift-COLON-openshift-authenticator-.yaml similarity index 52% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/cluster-scoped-resources/certificates.k8s.io/certificatesigningrequests/049-body-system-COLON-openshift-COLON-openshift-authenticator-.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/cluster-scoped-resources/certificates.k8s.io/certificatesigningrequests/c5ab-body-system-COLON-openshift-COLON-openshift-authenticator-.yaml index 874572ec0..b404c9017 100644 --- a/test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/cluster-scoped-resources/certificates.k8s.io/certificatesigningrequests/049-body-system-COLON-openshift-COLON-openshift-authenticator-.yaml +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/cluster-scoped-resources/certificates.k8s.io/certificatesigningrequests/c5ab-body-system-COLON-openshift-COLON-openshift-authenticator-.yaml @@ -1,14 +1,12 @@ apiVersion: certificates.k8s.io/v1 kind: CertificateSigningRequest metadata: - annotations: - synthetic.mom.openshift.io/controller-instance-name: TODO-authenticatorCertRequester creationTimestamp: null generateName: system:openshift:openshift-authenticator- labels: authentication.openshift.io/csr: openshift-authenticator spec: - request: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KTUlJQkREQ0J0QUlCQURCU01WQXdUZ1lEVlFRREUwZHplWE4wWlcwNmMyVnlkbWxqWldGalkyOTFiblE2YjNCbApibk5vYVdaMExXOWhkWFJvTFdGd2FYTmxjblpsY2pwdmNHVnVjMmhwWm5RdFlYVjBhR1Z1ZEdsallYUnZjakJaCk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBQkdIcHZiZjRIc1RHaGx4TXVrNXBjUlF3Q3lWNFVqdm8KR294SGlEc0FsUVNiRTQvaGR6ODlKZk15ZW9DR1BMalJyYnA5elRGL1AyVi9WL2tOM3lYMjJ2K2dBREFLQmdncQpoa2pPUFFRREFnTkhBREJFQWlBaWV3ajhSelNWbGZYYjRtZjF0WDduVEkvVDR6OUtGa1Y1T0o4aTBXNGVMUUlnCkFLVmZFUWEyL2ZNakFDMFN3THdHV0tsTnp6WkZYWE10R2UvVlF4NTZOQmM9Ci0tLS0tRU5EIENFUlRJRklDQVRFIFJFUVVFU1QtLS0tLQo= + request: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0KTUlJQkRqQ0J0QUlCQURCU01WQXdUZ1lEVlFRREUwZHplWE4wWlcwNmMyVnlkbWxqWldGalkyOTFiblE2YjNCbApibk5vYVdaMExXOWhkWFJvTFdGd2FYTmxjblpsY2pwdmNHVnVjMmhwWm5RdFlYVjBhR1Z1ZEdsallYUnZjakJaCk1CTUdCeXFHU000OUFnRUdDQ3FHU000OUF3RUhBMElBQkx6Q3hKUTRjZ2tubVlqdytSd1Nmb2kwUWt5dktua1UKOEZuUXJJRWxNUE8vUG13eDdva1h5SjhONmNpQkNZaWYrLzkvaTdIN1MzN3BrUkM5YmliRnQvU2dBREFLQmdncQpoa2pPUFFRREFnTkpBREJHQWlFQTJjRXRhbHczWENSMlhkODZGN2tsL2hzWWlKNTZYMlBWcXVnUHA5SGxwWjhDCklRRElxR25WcE5wbXRPMWlYazFJaGhxWlVsbGZ5YmxHS3F6U0VhWWFRTEhRUXc9PQotLS0tLUVORCBDRVJUSUZJQ0FURSBSRVFVRVNULS0tLS0K signerName: kubernetes.io/kube-apiserver-client usages: - digital signature diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/cluster-scoped-resources/certificates.k8s.io/certificatesigningrequests/c5ab-metadata-system-COLON-openshift-COLON-openshift-authenticator-.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/cluster-scoped-resources/certificates.k8s.io/certificatesigningrequests/c5ab-metadata-system-COLON-openshift-COLON-openshift-authenticator-.yaml new file mode 100644 index 000000000..bfd5a3a95 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/cluster-scoped-resources/certificates.k8s.io/certificatesigningrequests/c5ab-metadata-system-COLON-openshift-COLON-openshift-authenticator-.yaml @@ -0,0 +1,8 @@ +action: Create +controllerInstanceName: TODO-authenticatorCertRequester +generateName: system:openshift:openshift-authenticator- +mame: "" +resourceType: + Group: certificates.k8s.io + Resource: certificatesigningrequests + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/cluster-scoped-resources/rbac.authorization.k8s.io/clusterrolebindings/19fc-body-system-COLON-openshift-COLON-oauth-apiserver.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/cluster-scoped-resources/rbac.authorization.k8s.io/clusterrolebindings/19fc-body-system-COLON-openshift-COLON-oauth-apiserver.yaml new file mode 100644 index 000000000..ae4cc9c4e --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/cluster-scoped-resources/rbac.authorization.k8s.io/clusterrolebindings/19fc-body-system-COLON-openshift-COLON-oauth-apiserver.yaml @@ -0,0 +1,13 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + creationTimestamp: null + name: system:openshift:oauth-apiserver +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: cluster-admin +subjects: +- kind: ServiceAccount + name: oauth-apiserver-sa + namespace: openshift-oauth-apiserver diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/cluster-scoped-resources/rbac.authorization.k8s.io/clusterrolebindings/19fc-metadata-system-COLON-openshift-COLON-oauth-apiserver.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/cluster-scoped-resources/rbac.authorization.k8s.io/clusterrolebindings/19fc-metadata-system-COLON-openshift-COLON-oauth-apiserver.yaml new file mode 100644 index 000000000..1a5ac31cf --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/cluster-scoped-resources/rbac.authorization.k8s.io/clusterrolebindings/19fc-metadata-system-COLON-openshift-COLON-oauth-apiserver.yaml @@ -0,0 +1,8 @@ +action: Create +controllerInstanceName: APIServerStaticResources-StaticResources +generateName: "" +mame: system:openshift:oauth-apiserver +resourceType: + Group: rbac.authorization.k8s.io + Resource: clusterrolebindings + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/cluster-scoped-resources/rbac.authorization.k8s.io/clusterrolebindings/021-body-system-COLON-openshift-COLON-openshift-authentication.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/cluster-scoped-resources/rbac.authorization.k8s.io/clusterrolebindings/65b2-body-system-COLON-openshift-COLON-openshift-authentication.yaml similarity index 75% rename from test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/cluster-scoped-resources/rbac.authorization.k8s.io/clusterrolebindings/021-body-system-COLON-openshift-COLON-openshift-authentication.yaml rename to test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/cluster-scoped-resources/rbac.authorization.k8s.io/clusterrolebindings/65b2-body-system-COLON-openshift-COLON-openshift-authentication.yaml index d32b52fee..4de8c0414 100644 --- a/test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/cluster-scoped-resources/rbac.authorization.k8s.io/clusterrolebindings/021-body-system-COLON-openshift-COLON-openshift-authentication.yaml +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/cluster-scoped-resources/rbac.authorization.k8s.io/clusterrolebindings/65b2-body-system-COLON-openshift-COLON-openshift-authentication.yaml @@ -1,8 +1,6 @@ apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: - annotations: - synthetic.mom.openshift.io/controller-instance-name: TODO-staticResourceController creationTimestamp: null name: system:openshift:openshift-authentication roleRef: diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/cluster-scoped-resources/rbac.authorization.k8s.io/clusterrolebindings/65b2-metadata-system-COLON-openshift-COLON-openshift-authentication.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/cluster-scoped-resources/rbac.authorization.k8s.io/clusterrolebindings/65b2-metadata-system-COLON-openshift-COLON-openshift-authentication.yaml new file mode 100644 index 000000000..2993613aa --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/cluster-scoped-resources/rbac.authorization.k8s.io/clusterrolebindings/65b2-metadata-system-COLON-openshift-COLON-openshift-authentication.yaml @@ -0,0 +1,8 @@ +action: Create +controllerInstanceName: TODO-staticResourceController +generateName: "" +mame: system:openshift:openshift-authentication +resourceType: + Group: rbac.authorization.k8s.io + Resource: clusterrolebindings + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/cluster-scoped-resources/rbac.authorization.k8s.io/clusterrolebindings/fe36-body-system-COLON-openshift-COLON-useroauthaccesstoken-manager.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/cluster-scoped-resources/rbac.authorization.k8s.io/clusterrolebindings/fe36-body-system-COLON-openshift-COLON-useroauthaccesstoken-manager.yaml new file mode 100644 index 000000000..e6728bcfe --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/cluster-scoped-resources/rbac.authorization.k8s.io/clusterrolebindings/fe36-body-system-COLON-openshift-COLON-useroauthaccesstoken-manager.yaml @@ -0,0 +1,13 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + creationTimestamp: null + name: system:openshift:useroauthaccesstoken-manager +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: system:openshift:useroauthaccesstoken-manager +subjects: +- apiGroup: rbac.authorization.k8s.io + kind: Group + name: system:authenticated:oauth diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/cluster-scoped-resources/rbac.authorization.k8s.io/clusterrolebindings/fe36-metadata-system-COLON-openshift-COLON-useroauthaccesstoken-manager.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/cluster-scoped-resources/rbac.authorization.k8s.io/clusterrolebindings/fe36-metadata-system-COLON-openshift-COLON-useroauthaccesstoken-manager.yaml new file mode 100644 index 000000000..d120c8606 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/cluster-scoped-resources/rbac.authorization.k8s.io/clusterrolebindings/fe36-metadata-system-COLON-openshift-COLON-useroauthaccesstoken-manager.yaml @@ -0,0 +1,8 @@ +action: Create +controllerInstanceName: APIServerStaticResources-StaticResources +generateName: "" +mame: system:openshift:useroauthaccesstoken-manager +resourceType: + Group: rbac.authorization.k8s.io + Resource: clusterrolebindings + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/cluster-scoped-resources/rbac.authorization.k8s.io/clusterroles/13cc-body-system-COLON-openshift-COLON-useroauthaccesstoken-manager.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/cluster-scoped-resources/rbac.authorization.k8s.io/clusterroles/13cc-body-system-COLON-openshift-COLON-useroauthaccesstoken-manager.yaml new file mode 100644 index 000000000..1e064825c --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/cluster-scoped-resources/rbac.authorization.k8s.io/clusterroles/13cc-body-system-COLON-openshift-COLON-useroauthaccesstoken-manager.yaml @@ -0,0 +1,17 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + annotations: + rbac.authorization.kubernetes.io/autoupdate: "true" + creationTimestamp: null + name: system:openshift:useroauthaccesstoken-manager +rules: +- apiGroups: + - oauth.openshift.io + resources: + - useroauthaccesstokens + verbs: + - get + - list + - watch + - delete diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/cluster-scoped-resources/rbac.authorization.k8s.io/clusterroles/13cc-metadata-system-COLON-openshift-COLON-useroauthaccesstoken-manager.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/cluster-scoped-resources/rbac.authorization.k8s.io/clusterroles/13cc-metadata-system-COLON-openshift-COLON-useroauthaccesstoken-manager.yaml new file mode 100644 index 000000000..f17e35555 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/cluster-scoped-resources/rbac.authorization.k8s.io/clusterroles/13cc-metadata-system-COLON-openshift-COLON-useroauthaccesstoken-manager.yaml @@ -0,0 +1,8 @@ +action: Create +controllerInstanceName: APIServerStaticResources-StaticResources +generateName: "" +mame: system:openshift:useroauthaccesstoken-manager +resourceType: + Group: rbac.authorization.k8s.io + Resource: clusterroles + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/namespaces/openshift-oauth-apiserver/core/serviceaccounts/4ddd-body-oauth-apiserver-sa.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/namespaces/openshift-oauth-apiserver/core/serviceaccounts/4ddd-body-oauth-apiserver-sa.yaml new file mode 100644 index 000000000..8ff490c15 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/namespaces/openshift-oauth-apiserver/core/serviceaccounts/4ddd-body-oauth-apiserver-sa.yaml @@ -0,0 +1,6 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: + creationTimestamp: null + name: oauth-apiserver-sa + namespace: openshift-oauth-apiserver diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/namespaces/openshift-oauth-apiserver/core/serviceaccounts/4ddd-metadata-oauth-apiserver-sa.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/namespaces/openshift-oauth-apiserver/core/serviceaccounts/4ddd-metadata-oauth-apiserver-sa.yaml new file mode 100644 index 000000000..03250e193 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/namespaces/openshift-oauth-apiserver/core/serviceaccounts/4ddd-metadata-oauth-apiserver-sa.yaml @@ -0,0 +1,9 @@ +action: Create +controllerInstanceName: APIServerStaticResources-StaticResources +generateName: "" +mame: oauth-apiserver-sa +namespace: openshift-oauth-apiserver +resourceType: + Group: "" + Resource: serviceaccounts + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/namespaces/openshift-oauth-apiserver/core/services/dfd1-body-api.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/namespaces/openshift-oauth-apiserver/core/services/dfd1-body-api.yaml new file mode 100644 index 000000000..f8a4fefef --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/namespaces/openshift-oauth-apiserver/core/services/dfd1-body-api.yaml @@ -0,0 +1,22 @@ +apiVersion: v1 +kind: Service +metadata: + annotations: + operator.openshift.io/spec-hash: 9c74227d7f96d723d980c50373a5e91f08c5893365bfd5a5040449b1b6585a23 + prometheus.io/scheme: https + prometheus.io/scrape: "true" + service.alpha.openshift.io/serving-cert-secret-name: serving-cert + creationTimestamp: null + labels: + app: openshift-oauth-apiserver + name: api + namespace: openshift-oauth-apiserver +spec: + ports: + - name: https + port: 443 + targetPort: 8443 + selector: + apiserver: "true" +status: + loadBalancer: {} diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/namespaces/openshift-oauth-apiserver/core/services/dfd1-metadata-api.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/namespaces/openshift-oauth-apiserver/core/services/dfd1-metadata-api.yaml new file mode 100644 index 000000000..1a0a8906c --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/UserWorkload/Create/namespaces/openshift-oauth-apiserver/core/services/dfd1-metadata-api.yaml @@ -0,0 +1,9 @@ +action: Create +controllerInstanceName: APIServerStaticResources-StaticResources +generateName: "" +mame: api +namespace: openshift-oauth-apiserver +resourceType: + Group: "" + Resource: services + Version: v1 diff --git a/test-data/apply-configuration/overall/minimal-cluster/expected-output/controller-results.yaml b/test-data/apply-configuration/overall/minimal-cluster/expected-output/controller-results.yaml new file mode 100644 index 000000000..55ae135f7 --- /dev/null +++ b/test-data/apply-configuration/overall/minimal-cluster/expected-output/controller-results.yaml @@ -0,0 +1,112 @@ +controllerResults: +- controllerName: APIServerStaticResources-StaticResources + status: Succeeded +- controllerName: NamespaceFinalizerController_openshift-oauth-apiserver + status: Succeeded +- controllerName: OAuthAPIServerController-WorkloadWorkloadController + errors: + - message: waiting for .status.latestAvailableRevision to be available + status: Failed +- controllerName: RevisionController + errors: + - message: synthetic requeue request + status: Failed +- controllerName: SecretRevisionPruneController + status: Succeeded +- controllerName: TODO-authRouteCheckController + status: Succeeded +- controllerName: TODO-authServiceCheckController + status: Succeeded +- controllerName: TODO-authServiceEndpointCheckController + status: Succeeded +- controllerName: TODO-authenticatorCertRequester + status: Succeeded +- controllerName: TODO-configObserver + errors: + - message: |- + console.config.openshift.io "cluster" not found + oauth.config.openshift.io "cluster" not found + secret "v4-0-config-system-router-certs" not found + status: Failed +- controllerName: TODO-configOverridesController + status: Succeeded +- controllerName: TODO-customRouteController + errors: + - message: ingress.config.openshift.io "cluster" not found + status: Failed +- controllerName: TODO-deploymentController + errors: + - message: 'waiting for the oauth-openshift route to appear: route.route.openshift.io + "oauth-openshift" not found' + status: Failed +- controllerName: TODO-ingressStateController + status: Succeeded +- controllerName: TODO-logLevelController + status: Succeeded +- controllerName: TODO-managementStateController + status: Succeeded +- controllerName: TODO-metadataController + status: Succeeded +- controllerName: TODO-oauthClientsController + errors: + - message: 'unable to get cluster ingress config: ingress.config.openshift.io "cluster" + not found' + status: Failed +- controllerName: TODO-other-configObserver + errors: + - message: |- + endpoints/host-etcd-2 in the openshift-etcd namespace: not found + configmap openshift-etcd/etcd-endpoints not found, and fallback observer failed + oauth.config.openshift.io "cluster" not found + status: Failed +- controllerName: TODO-payloadConfigController + status: Succeeded +- controllerName: TODO-proxyConfigController + status: Succeeded +- controllerName: TODO-resourceSyncer + status: Succeeded +- controllerName: TODO-routerCertsController + status: Succeeded +- controllerName: TODO-serviceCAController + status: Succeeded +- controllerName: TODO-staleConditions + status: Succeeded +- controllerName: TODO-staticResourceController + status: Succeeded +- controllerName: TODO-trustDistributionController + errors: + - message: ingress.config.openshift.io "cluster" not found + status: Failed +- controllerName: TODO-webhookAuthController + errors: + - message: the server could not find the requested resource (get authentications.config.openshift.io + cluster) + status: Failed +- controllerName: TODO-webhookCertsApprover + status: Succeeded +- controllerName: TODO-wellKnownReadyController + errors: + - message: authentication.config.openshift.io "cluster" not found + status: Failed +- controllerName: TODO-workersAvailableController + status: Succeeded +- controllerName: auditPolicyController + errors: + - message: apiserver.config.openshift.io "cluster" not found + status: Failed +- controllerName: authentication + status: Succeeded +- controllerName: openshift-apiserver-APIService + errors: + - message: endpoints "api" not found + status: Failed +- controllerName: openshift-oauth-apiserver-EncryptionCondition + status: Succeeded +- controllerName: openshift-oauth-apiserver-EncryptionKey + status: Succeeded +- controllerName: openshift-oauth-apiserver-EncryptionMigration + status: Succeeded +- controllerName: openshift-oauth-apiserver-EncryptionPrune + status: Succeeded +- controllerName: openshift-oauth-apiserver-EncryptionState + status: Succeeded