diff --git a/README.md b/README.md index fe37c8c..c23c2fd 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,13 @@ The Ceph S3 Operator, an open-source endeavor, is crafted to streamline the mana ## Installation +### Prerequisites + +- Kubernetes v1.23.0+ +- Ceph v14.2.10+ + > Note: prior Ceph versions [don't support the subuser bucket policy](https://github.com/ceph/ceph/pull/33714). Nevertheless, other features are expected to work properly within those earlier releases. +- ClusterResourceQuota CRD: `kubectl apply -f config/external-crd` + ### Using Makefile Deploy using a simple command: @@ -40,44 +47,7 @@ helm upgrade --install ceph-s3-operator oci://ghcr.io/snapp-incubator/ceph-s3-op ### Using OLM -All the operator releases are bundled and pushed to the [Snappcloud hub](https://github.com/snapp-incubator/snappcloud-hub) which is a hub for the catalog sources. Install using Operator Lifecycle Manager (OLM) by following these steps: - -1. Install [snappcloud hub catalog-source](https://github.com/snapp-incubator/snappcloud-hub/blob/main/catalog-source.yml) - -2. Override the `ceph-s3-operator-controller-manager-config-override` with your operator configuration. -3. Apply the subscription manifest as shown below: - - ```yaml - apiVersion: operators.coreos.com/v1alpha1 - kind: Subscription - metadata: - name: ceph-s3-operator - namespace: operators - spec: - channel: stable-v0 - installPlanApproval: Automatic - name: ceph-s3-operator - source: snappcloud-hub-catalog - sourceNamespace: openshift-marketplace - config: - resources: - limits: - cpu: 2 - memory: 2Gi - requests: - cpu: 1 - memory: 1Gi - volumes: - - name: config - secret: - items: - - key: config.yaml - path: config.yaml - secretName: ceph-s3-operator-controller-manager-config-override - volumeMounts: - - mountPath: /ceph-s3-operator/config/ - name: config - ``` +You can find the operator on [OperatorHub](https://operatorhub.io/operator/ceph-s3-operator) and install it using OLM. ## Usage and Documentation diff --git a/api/v1alpha1/quota_handler.go b/api/v1alpha1/quota_handler.go index 30a10c8..8d93735 100644 --- a/api/v1alpha1/quota_handler.go +++ b/api/v1alpha1/quota_handler.go @@ -85,7 +85,7 @@ func findTeam(ctx context.Context, runtimeClient client.Client, suc *S3UserClaim team, ok := ns.ObjectMeta.Labels[consts.LabelTeam] if !ok { - return "", fmt.Errorf("namespace %s doesn't have team label", ns.ObjectMeta.Name) + return "", fmt.Errorf("namespace %s doesn't have the team label: %s", ns.ObjectMeta.Name, consts.LabelTeam) } return team, nil diff --git a/api/v1alpha1/s3userclaim_webhook.go b/api/v1alpha1/s3userclaim_webhook.go index 4fc9768..e07ff78 100644 --- a/api/v1alpha1/s3userclaim_webhook.go +++ b/api/v1alpha1/s3userclaim_webhook.go @@ -152,8 +152,7 @@ func validateQuota(suc *S3UserClaim, allErrs field.ErrorList) field.ErrorList { case err == consts.ErrExceededNamespaceQuota: allErrs = append(allErrs, field.Forbidden(quotaFieldPath, err.Error())) case err != nil: - s3userclaimlog.Error(err, "failed to validate against cluster quota") - allErrs = append(allErrs, field.InternalError(quotaFieldPath, fmt.Errorf(consts.ContactCloudTeamErrMessage))) + allErrs = append(allErrs, field.InternalError(quotaFieldPath, fmt.Errorf("failed to validate against cluster quota, %w", err))) } switch err := validateAgainstClusterQuota(ctx, suc); { @@ -162,8 +161,7 @@ func validateQuota(suc *S3UserClaim, allErrs field.ErrorList) field.ErrorList { case goerrors.Is(err, consts.ErrClusterQuotaNotDefined): allErrs = append(allErrs, field.Forbidden(quotaFieldPath, err.Error())) case err != nil: - s3userclaimlog.Error(err, "failed to validate against cluster quota") - allErrs = append(allErrs, field.InternalError(quotaFieldPath, fmt.Errorf(consts.ContactCloudTeamErrMessage))) + allErrs = append(allErrs, field.InternalError(quotaFieldPath, fmt.Errorf("failed to validate against cluster quota, %w", err))) } return allErrs } diff --git a/config/manifests/bases/ceph-s3-operator.clusterserviceversion.yaml b/config/manifests/bases/ceph-s3-operator.clusterserviceversion.yaml index ef48d11..c9ec427 100644 --- a/config/manifests/bases/ceph-s3-operator.clusterserviceversion.yaml +++ b/config/manifests/bases/ceph-s3-operator.clusterserviceversion.yaml @@ -34,7 +34,7 @@ spec: description: | The Ceph S3 Operator, an open-source endeavor, is crafted to streamline the management of S3 users and buckets within a Ceph cluster environment. It enhances efficiency and simplifies processes, rendering S3 usage on Ceph clusters more straightforward and user-friendly. - ## Features + ### Features - S3 User Management - Bucket Management @@ -45,15 +45,23 @@ spec: - E2E Testing - Helm Chart and OLM Support - ## Usage and Documentation + ### Prerequisites + + - Kubernetes v1.23.0+ + - Ceph v14.2.10+: prior Ceph versions [don't support the subuser bucket policy](https://github.com/ceph/ceph/pull/33714). Nevertheless, other features are expected to work properly within those eariler releases. + - [ClusterResourceQuota](https://github.com/snapp-incubator/ceph-s3-operator/blob/main/config/external-crd/openshift-clusterresourcequota.yaml) CRD: `kubectl apply -f config/external-crd` + + ### Usage and Documentation + + Note: The operator assesses S3 quotas concerning the cluster's resource quota, a process that is facilitated by assigning the team label `snappcloud.io/team=` to the namespace where you plan to deploy the operator objects. Therefore, it is necessary to add this label to the namespace if it is not already present. - CRD Examples: Located in the [samples](https://github.com/snapp-incubator/ceph-s3-operator/tree/main/config/samples) folder. - Detailed Documentation: Available on the [wiki](https://github.com/snapp-incubator/ceph-s3-operator/wiki). - Design and Decision Insights: Refer to our [design doc](https://github.com/snapp-incubator/ceph-s3-operator/blob/main/docs/DESIGN.md) for an in-depth understanding. displayName: Ceph S3 Operator icon: - - base64data: iVBORw0KGgoAAAANSUhEUgAAAFAAAAAoCAMAAABevo0zAAABaFBMVEVHcEwBBikABTMAABsAACAAACQAAifr//8BCCwCCi7q/v79//8CEzz////n+/v7///p/fwACzgACTYDFz8NGTgAABUJDzAADToTKkYjR18WMEvu//81bnny//8LIEYAAC5u7ddOpqL4//8AAA9cv7VHkZMqMExo28orXW1s4tAoVGViy78RJkJt69XK9PI+gIaOo6/a//8cPlUUHj17/+fY6uwWLFAZNlAMFDS80dZBiIza4eQxZXJv8NoeJEFNUWdl18dsf5OousQ5P1gEDTE6eYFjd4vt7++6xMuQlKHf//9Xs6xWW3F/kaJlaHxTraearLiPp7JPYnvi9vYhNlhW18tKnJtIWnV8gZE7SWacn6tj0cPW1toAASmwxMxQz8JbbYVv5dLNztPQ+Pa/6+pMs69e4NHK3OBxdYdWaoBftbCSsLiwsrtex7o2dH2Km6t19t6np7NZl510ipx5traV6eCU2NSi6eKkA5MiAAAAAXRSTlMAQObYZgAABRJJREFUSMell2dX20gUhiPNaJCEiiVZlnuRe8PGvYGbwDY2hoXQe01CS0/+/o4gm91z9sPK7P2ic1we335fv3nzb5v72wRWn2ff9da7q6tf86dlfd4n2P7x9htr9vvzNlb3DbsuvyQHTgKSxFX28mXRJ7CvBQo+3+aBFgjIiuTKJThFIQOk//yd6BFeBWRtYv1A0pSKN2okQqnd6Eku6lJIWelu68IrgDaPvq6Q2knrotSgOzmXPV51lZIRL6eRb+vir7BnANo87BYpuxuOYnoj44x/enImW0Q0XWqAqiJzedHGzga0eYQDUkqlSzlgR8ge96bsRy6KsifowsWuX5PWRdtMQHbOtydLrWQ25CQIhlJbd61xFFDGCYSpZDZS1eSPojALUBBXScl7kcxRFEPD6b7q9BbCkwlgDAa6I9l0VeNOzcpYBQp6T5ISF0kvoBmKmPJr9/1i7Oui3kYUw1D2u+CjU6pse1irQNaz/VaudrI5gL8ea+pXC4uLV4trC9v65TIyiZHgBkee46AtAgVxneRCSyGKphlwOHe98Muurn37wMBOuztZr6zUfTaLQM92hUxkOxmcPwOusosvtoaN3YIGjV/0ZtNO8oMuWASKm6QyXlqBDM0gAFbv8/k/TMvn7z+oADE0RkaCK6S/7LMI1PcCruRREacLLk8nlAqhGlbDYQjDxHRaNH8HtoIRhcyLFoHlCtlY2sUFhW1e5AcxRMU+Xz70EdUX+Xmxj4moeJR0BbZ0i8Aex92VEpBBjsEDYT8eUH1+7ef3n33H/NBBDAcErhUVKq0E3m5bBK5LXCaBI4Z9Pgbh8iB2fHV2drYTOmg6IDjgl7HvqOCqcf53FoFdycjQuGdQkX8fphlj+fqo0Cjc7LgJAsHiFHuIs2i3a8qpReBqoLC0gcxvjfj9GlTtZ2et3cTNjlOFxRgKmzzKHYxwXM8qkKymoyaQUPd5/vSLM3p7u3O7E8p8qc/zgzYuCo0y6V3rQBwyBZAZ8mGtNs1/q7p2bnZuzp7sd/lJ7MHMIXaeOuGUoUXgR4lzNTLIwF2zDCEIo7Q3tdQo3LrDAEJKf2+OeGrFqVkuyinHRXDbGFSMb4cBiF3/gI3bG/hlcUJBNcZPzEYcm20jWG/s3Etjf+YPR5d8vQi+ff9hR3m+ORrxlwSeyEwnPkNjP49ex4kYgtg/bj5gv4z6/TVuyf7hcXPkMEfSG4z4rY/ey3JomNUEADoAgYpXHxb2oAEIAgCCoQnH83Jo+mZbX25cTQdsD3D34Oo0D8MOdfgZOMwSP2WPKuSW5fX1vGA3gmOcLHP82mqteRne5/tqkR8B5mXBPkmc9QX71wmIQkykDvljfrAM6SF+NmsIV6SGT4Bi7tfZjhS+lw0KGTTVHr13qA4IJ/hpHqnaOJt2S5WyxzbLGe2SWusiGLJjJyFQmWgoVFWfC4LPaPCooGm9Wc7oHMvqW6SWiC89pnDODBTKZVLpDG0gimh1go9VadZDj6WIZ4/UCuPgpxSeGGd87MVyBCBnAUQ/hZyyvP7Mm00s+VZlSVkJoWranYl3VoodL73RSTprXo7EYklgZ5Zzc+Kmn5Q4FC1FqYi36j7KpErxx5Qsv07OPQvO8jmWbv5EjnOHouNWYCXnUmTS/0rB+SyJxfq5H8trReMKflmRT07ISrf5Wklshm3zieXNc5df0UiZUyoH3d72/xHtJlLwiKKtOextbvbqZd889u4//lb8CZ2u3ta/QUPvAAAAAElFTkSuQmCC - mediatype: image/png + - base64data: PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI2LjMuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiCgkgdmlld0JveD0iMCAwIDEyMDAgMTIwMCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMTIwMCAxMjAwOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+CjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Cgkuc3Qwe29wYWNpdHk6MC4zNjt9Cgkuc3Qxe2ZpbGw6dXJsKCNTVkdJRF8xXyk7fQoJLnN0MntmaWxsOnVybCgjU1ZHSURfMDAwMDAxNzgxNzY0OTgzOTA5NTk0NzIwMTAwMDAwMTEyODY0NDM3MDM5NzY4ODkyNTdfKTt9Cgkuc3Qze2ZpbGw6dXJsKCNTVkdJRF8wMDAwMDA4MzA4Njk3MjAyNjg5ODQ1MDE4MDAwMDAwMjQxNzMyOTQzNDc1ODM2NzY0OV8pO30KCS5zdDR7ZmlsbDp1cmwoI1NWR0lEXzAwMDAwMDcxNTM1Njc0NjkxMzc2MjE0NDAwMDAwMDE2MDY5NTkyNDYzNTc5ODE1NTkxXyk7fQoJLnN0NXtmaWxsOiNGREZERkY7fQoJLnN0NntjbGlwLXBhdGg6dXJsKCNTVkdJRF8wMDAwMDA2MzU5ODY5MDc5Mjg3ODgwMDI2MDAwMDAxMDY1MTUxNjI0ODA1NjE2NTI3OF8pO30KCS5zdDd7ZmlsbDojMTFCNzIwO30KCS5zdDh7ZmlsbDojQjFDMUU3O30KCS5zdDl7ZmlsbDojRkVGRUZFO30KCS5zdDEwe2ZpbGw6I0JBQ0JGMjt9Cgkuc3QxMXtmaWxsOiNCQ0MzRDU7fQo8L3N0eWxlPgo8ZyBpZD0iYmFja2dyb3VuZCI+Cgk8ZyBpZD0iVnJzdHZhXzIiPgoJCTxnIGlkPSJWcnN0dmFfMS0yIj4KCQkJPGcgY2xhc3M9InN0MCI+CgkJCQkKCQkJCQk8bGluZWFyR3JhZGllbnQgaWQ9IlNWR0lEXzFfIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjIwMy45NjkzIiB5MT0iNDI5LjkxNDIiIHgyPSIxMzc4LjQwMzEiIHkyPSIzODkuNjQ3OCIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxIDAgMCAtMSAwIDEyMDIpIj4KCQkJCQk8c3RvcCAgb2Zmc2V0PSIwIiBzdHlsZT0ic3RvcC1jb2xvcjojRjZGOUZGIi8+CgkJCQkJPHN0b3AgIG9mZnNldD0iMC42NzQzIiBzdHlsZT0ic3RvcC1jb2xvcjojRUFFREZFIi8+CgkJCQkJPHN0b3AgIG9mZnNldD0iMSIgc3R5bGU9InN0b3AtY29sb3I6I0UzRTZGRCIvPgoJCQkJPC9saW5lYXJHcmFkaWVudD4KCQkJCTxwYXRoIGNsYXNzPSJzdDEiIGQ9Ik0xMDM5LjEsNzMzLjdjNTAsMjguOSw1MC4zLDc1LjcsMC42LDEwNC42bC0zMzksMTk3Yy00OS43LDI4LjktMTMwLjYsMjguOS0xODAuNiwwbC0zNDEuMy0xOTcKCQkJCQljLTUwLTI4LjktNTAuMy03NS43LTAuNi0xMDQuNmwzMzktMTk3YzQ5LjctMjguOSwxMzAuNi0yOC45LDE4MC42LDBMMTAzOS4xLDczMy43eiIvPgoJCQk8L2c+CgkJCQoJCQkJPGxpbmVhckdyYWRpZW50IGlkPSJTVkdJRF8wMDAwMDAyNTQwNTIyNTA3MDcyNjQ1MDA4MDAwMDAwMjQ2NTg3NTE4OTI3NjM1MjkwOF8iIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iMTQyLjU2MDQiIHkxPSIzNzcuMzg4MiIgeDI9IjEwNjguMDAxMyIgeTI9IjM3Ny4zODgyIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIDAgMTIwMikiPgoJCQkJPHN0b3AgIG9mZnNldD0iMCIgc3R5bGU9InN0b3AtY29sb3I6I0Y2RjlGRiIvPgoJCQkJPHN0b3AgIG9mZnNldD0iMC42NzQzIiBzdHlsZT0ic3RvcC1jb2xvcjojRUFFREZFIi8+CgkJCQk8c3RvcCAgb2Zmc2V0PSIxIiBzdHlsZT0ic3RvcC1jb2xvcjojRTNFNkZEIi8+CgkJCTwvbGluZWFyR3JhZGllbnQ+CgkJCTxwYXRoIHN0eWxlPSJmaWxsOnVybCgjU1ZHSURfMDAwMDAwMjU0MDUyMjUwNzA3MjY0NTAwODAwMDAwMDI0NjU4NzUxODkyNzYzNTI5MDhfKTsiIGQ9Ik0xMDMxLjMsNzA2LjNMNjk2LjEsOTAxLjIKCQkJCWMtNDkuMiwyOC42LTEyOS4xLDI4LjYtMTc4LjYsMEwxODAsNzA2LjNjLTI0LjktMTQuNC0zNy4zLTMzLjItMzcuMy01Mi4xbC0wLjIsNzIuNGMtMC4xLDE4LjgsMTIuNCwzNy43LDM3LjMsNTIuMWwzMzcuNCwxOTQuOAoJCQkJYzQ5LjUsMjguNiwxMjkuNCwyOC42LDE3OC42LDBsMzM1LjItMTk0LjhjMjQuNC0xNC4yLDM2LjYtMzIuOCwzNi43LTUxLjRsMC4yLTcyLjRDMTA2Ny45LDY3My42LDEwNTUuNyw2OTIuMSwxMDMxLjMsNzA2LjN6Ii8+CgkJCQoJCQkJPGxpbmVhckdyYWRpZW50IGlkPSJTVkdJRF8wMDAwMDE3Mzg2MDY4NDI2MDMwODU1Mjc2MDAwMDAwMzc3MTg2MDE0ODI0NTU2Njg1MF8iIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iMTQyLjc2NTciIHkxPSI1NDcuMzg4NCIgeDI9IjEwNjguMDAxNSIgeTI9IjU0Ny4zODg0IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIDAgMTIwMikiPgoJCQkJPHN0b3AgIG9mZnNldD0iMCIgc3R5bGU9InN0b3AtY29sb3I6I0ZGMzM2NiIvPgoJCQkJPHN0b3AgIG9mZnNldD0iMC41MTE3IiBzdHlsZT0ic3RvcC1jb2xvcjojNjk2QkNCIi8+CgkJCQk8c3RvcCAgb2Zmc2V0PSIxIiBzdHlsZT0ic3RvcC1jb2xvcjojMEE2REZFIi8+CgkJCTwvbGluZWFyR3JhZGllbnQ+CgkJCTxwYXRoIHN0eWxlPSJmaWxsOnVybCgjU1ZHSURfMDAwMDAxNzM4NjA2ODQyNjAzMDg1NTI3NjAwMDAwMDM3NzE4NjAxNDgyNDU1NjY4NTBfKTsiIGQ9Ik0xMDMwLjcsNjAyLjkKCQkJCWM0OS41LDI4LjYsNDkuNyw3NC45LDAuNiwxMDMuNEw2OTYuMSw5MDEuMmMtNDkuMiwyOC42LTEyOS4xLDI4LjYtMTc4LjYsMEwxODAsNzA2LjNjLTQ5LjUtMjguNi00OS43LTc0LjktMC42LTEwMy40CgkJCQlsMzM1LjItMTk0LjhjNDkuMi0yOC42LDEyOS4xLTI4LjYsMTc4LjYsMEwxMDMwLjcsNjAyLjl6Ii8+CgkJCQoJCQkJPGxpbmVhckdyYWRpZW50IGlkPSJTVkdJRF8wMDAwMDAwMzA4OTA4NDI4NjM3NTc4NTA1MDAwMDAxMjE5NDEzMTc4NTMwNzQ3ODQxM18iIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iMTQyLjU2MDQiIHkxPSI0ODMuNDgzMSIgeDI9IjEwNjguMDAxMyIgeTI9IjQ4My40ODMxIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIDAgMTIwMikiPgoJCQkJPHN0b3AgIG9mZnNldD0iMCIgc3R5bGU9InN0b3AtY29sb3I6I0Y2RjlGRiIvPgoJCQkJPHN0b3AgIG9mZnNldD0iMC42NzQzIiBzdHlsZT0ic3RvcC1jb2xvcjojRUFFREZFIi8+CgkJCQk8c3RvcCAgb2Zmc2V0PSIxIiBzdHlsZT0ic3RvcC1jb2xvcjojRTNFNkZEIi8+CgkJCTwvbGluZWFyR3JhZGllbnQ+CgkJCTxwYXRoIHN0eWxlPSJmaWxsOnVybCgjU1ZHSURfMDAwMDAwMDMwODkwODQyODYzNzU3ODUwNTAwMDAwMTIxOTQxMzE3ODUzMDc0Nzg0MTNfKTsiIGQ9Ik0xMDMxLjMsNjAwLjJMNjk2LjEsNzk1LjEKCQkJCWMtNDkuMiwyOC42LTEyOS4xLDI4LjYtMTc4LjYsMEwxODAsNjAwLjJjLTI0LjktMTQuNC0zNy4zLTMzLjItMzcuMy01Mi4xbC0wLjIsNzIuNGMtMC4xLDE4LjgsMTIuNCwzNy43LDM3LjMsNTIuMWwzMzcuNCwxOTQuOAoJCQkJYzQ5LjUsMjguNiwxMjkuNCwyOC42LDE3OC42LDBsMzM1LjItMTk0LjhjMjQuNC0xNC4yLDM2LjYtMzIuOCwzNi43LTUxLjRsMC4yLTcyLjRDMTA2Ny45LDU2Ny41LDEwNTUuNyw1ODYsMTAzMS4zLDYwMC4yeiIvPgoJCQk8cGF0aCBjbGFzcz0ic3Q1IiBkPSJNMTAzMC43LDQ5Ni44YzQ5LjUsMjguNiw0OS43LDc0LjksMC42LDEwMy40TDY5Ni4xLDc5NS4xYy00OS4yLDI4LjYtMTI5LjEsMjguNi0xNzguNiwwTDE4MCw2MDAuMgoJCQkJYy00OS41LTI4LjYtNDkuNy03NC45LTAuNi0xMDMuNEw1MTQuNywzMDJjNDkuMi0yOC42LDEyOS4xLTI4LjYsMTc4LjYsMEwxMDMwLjcsNDk2Ljh6Ii8+CgkJCTxnPgoJCQkJPGRlZnM+CgkJCQkJPHBvbHlnb24gaWQ9IlNWR0lEXzAwMDAwMTAzOTc1MjgzMDg2MTU0ODI2NjcwMDAwMDAxNjM3NjI2MjUyNTU4MjM3MzM4XyIgcG9pbnRzPSI1ODQuOSwzNzAuOCA4ODcuMSw1NDUuMyA2MTQuNCw3MDIuNyAKCQkJCQkJMzEyLjIsNTI4LjMgCQkJCQkiLz4KCQkJCTwvZGVmcz4KCQkJCTxjbGlwUGF0aCBpZD0iU1ZHSURfMDAwMDAxMTU1MTM2NTc5OTMzNjc3NzEzMDAwMDAwMDQ4MTI0OTQxNzYyNzM2ODA1NjZfIj4KCQkJCQk8dXNlIHhsaW5rOmhyZWY9IiNTVkdJRF8wMDAwMDEwMzk3NTI4MzA4NjE1NDgyNjY3MDAwMDAwMTYzNzYyNjI1MjU1ODIzNzMzOF8iICBzdHlsZT0ib3ZlcmZsb3c6dmlzaWJsZTsiLz4KCQkJCTwvY2xpcFBhdGg+CgkJCQk8ZyBzdHlsZT0iY2xpcC1wYXRoOnVybCgjU1ZHSURfMDAwMDAxMTU1MTM2NTc5OTMzNjc3NzEzMDAwMDAwMDQ4MTI0OTQxNzYyNzM2ODA1NjZfKTsiPgoJCQkJCTxwYXRoIGNsYXNzPSJzdDciIGQ9Ik01NjguMSw1NTQuNmMxNi43LDkuNyw0Mi4zLDEwLjMsNTcuNywxLjNjMTUuNS04LjksMTQuNS0yMy43LTIuMy0zMy4zYy0xNi43LTkuNy00Mi4zLTEwLjMtNTcuNy0xLjMKCQkJCQkJQzU1MC45LDUyOS45LDU1Miw1NDUuNCw1NjguMSw1NTQuNnogTTUwMy41LDYzOC43bDExLDMuM2MxMS42LDMuNywyMy40LDYuNiwzNS40LDguNWMtNi45LTEyLjItMi4zLTI0LjQsMTIuNS0zMwoJCQkJCQljOS43LTUuNiwyMi45LTguNCwzOS42LTkuMmwxLjMsMGw0LjctMC4zYzQuNy0wLjMsOC43LTAuMiwxMy40LTAuNWMxNS41LTEsMzAuOS0zLjksNDUuNi04LjZjMTUtNS41LDI4LTEyLjEsMzcuNC0yMC44CgkJCQkJCWM4LjItNy45LDE0LjItMTcuMSwxNi4zLTI2LjNjMi4zLTkuNCwxLjEtMTkuMy0zLjMtMjcuOWMtNS40LTEwLjgtMTMuNC0yMC0yMy4zLTI2LjhjLTMuOC0yLjgtNy44LTUuNC0xMS45LTcuNmwtMS40LTAuOAoJCQkJCQljLTQuMy0yLjYtOC43LTQuOS0xMy4yLTYuOWMtMTQuOS02LjMtMzAuNS0xMC44LTQ2LjUtMTMuNGMtMTYtMi40LTMyLjItMy00OC40LTEuOWMtMTUuNiwwLjktMzAuOSw0LjEtNDUuNiw5LjQKCQkJCQkJYy0xNSw1LjUtMjcuMywxMi41LTM1LjQsMjEuMmMtNy41LDcuMS0xMi43LDE2LjMtMTQuOSwyNi40bC0wLjgsNy43bC0wLjUsMi43Yy0wLjcsOS4zLTYuMiwxNy4zLTE1LjksMjIuOQoJCQkJCQljLTE0LjgsOC42LTM2LjgsMTAuOC01Ny4xLDcuMmM0LjIsNy4zLDkuMiwxNC4yLDE0LjgsMjAuNWw2LjUsNi43YzguNywwLjgsMTcuNCwwLjksMjYuMiwwLjJjMTYuNC0wLjksMzIuMy01LjQsNDYuNy0xMy4yCgkJCQkJCWM4LjctNC43LDE2LTExLjQsMjEuNC0xOS42YzQuNi03LDctMTUuMSw3LjEtMjMuNGwwLjUtMS45Yy0wLjItMy4zLDAuMi02LjYsMS4zLTkuNmMxLjUtNC40LDQuMy04LjIsOC0xMQoJCQkJCQljNS45LTUuOCwxMy4yLTEwLjEsMjEuMy0xMi4zYzguNS0zLjEsMTcuNC01LDI2LjQtNS42YzkuNi0wLjYsMTkuMy0wLjMsMjguOSwxYzkuNCwxLjQsMTguNiwzLjksMjcuMyw3LjYKCQkJCQkJYzIuOSwxLjEsNS43LDIuNCw4LjMsNC4xbDEuNCwwLjhjMi41LDEuMyw0LjksMi45LDcsNC44YzUuOCwzLjksMTAuNCw5LjQsMTMuMSwxNS44YzIuOSw1LjEsMy42LDExLjEsMS44LDE2LjcKCQkJCQkJYy0xLjUsNi00LjksMTEuNC05LjcsMTUuM2MtNi4zLDUuMy0xMy41LDkuNC0yMS4zLDEyLjNjLTYuMiwyLjEtMTIuNiwzLjYtMTkuMSw0LjZjLTUuNSwwLjYtMTEuMSwwLjktMTYuNywwLjhsLTMuMywwLjMKCQkJCQkJYy0xMy42LDAtMjcuMiwxLjMtNDAuNiw0LjFjLTExLjksMi4zLTIzLjQsNi41LTM0LDEyLjRjLTE2LjEsOS4zLTIxLjQsMTkuNi0yMi45LDI2LjlDNTAwLjIsNjMwLjksNTAyLDYzNy4xLDUwMy41LDYzOC43egoJCQkJCQkgTTU4NC40LDY1NS42YzI5LjIsMi4zLDU4LjYsMSw4Ny41LTMuOGMxMy42LTIuNSwyNy02LDQwLjItMTAuM2MxMi40LTQuMSwyNC40LTkuNCwzNS44LTE1LjhjMTguNy0xMC44LDMzLjItMjQsNDIuMy0zOC4xCgkJCQkJCWM4LjUtMTMuMSwxMi45LTI4LjYsMTIuNC00NC4yYy0xLjEtMTUuNS03LjQtMzAuNC0xOC41LTQ0LjljLTEzLjItMTYuMy0yOS4zLTMwLTQ3LjctNDAuMmwtMC43LTAuNAoJCQkJCQljLTIxLjgtMTIuMy00NS4yLTIxLjUtNjkuNi0yNy41Yy0yNS41LTYuMy01MS42LTkuOC03Ny44LTEwLjdjLTI1LjctMC42LTUxLjQsMS44LTc2LjYsNy4xYy0yMy4xLDQuOC00NS40LDEzLTY2LDI0LjQKCQkJCQkJYy0xMCw1LjYtMTkuMiwxMi42LTI3LjQsMjAuN2MtNy4xLDYuOC0xMy4xLDE0LjYtMTcuOCwyMy4yYy04LjIsMTUuNS0xMC42LDMzLjQtNi42LDUwLjVjMTcsMy4xLDI4LjQsMywzNi4yLDAuMQoJCQkJCQljNy44LTIuOSwxMS41LTguMiwxMi4yLTE3LjVjMS4yLTIxLjYsMTUuOS00MS40LDQxLjEtNTUuOWM1OC0zMy41LDE1Ni0zMS4zLDIxOS41LDQuNmwwLjcsMC40bDAuNywwLjQKCQkJCQkJYzYyLjgsMzYuMyw2Ni43LDkyLjgsOCwxMjYuN2MtMjUuMSwxNC41LTYwLjEsMjMuNC05Ni45LDIzLjdjLTE2LjEsMC40LTI1LjMsMi41LTMwLjMsN0M1NzkuMiw2MzkuMiw1NzkuMSw2NDYuNiw1ODQuNCw2NTUuNgoJCQkJCQlMNTg0LjQsNjU1LjZ6Ii8+CgkJCQk8L2c+CgkJCTwvZz4KCQk8L2c+Cgk8L2c+CgkKCQk8cmVjdCB4PSI4MTAuMSIgeT0iNDQ3LjIiIHRyYW5zZm9ybT0ibWF0cml4KC0xIC0xLjIyNDY0N2UtMTYgMS4yMjQ2NDdlLTE2IC0xIDE2NzguNjA5NyA5NTIuNzI5MikiIGNsYXNzPSJzdDciIHdpZHRoPSI1OC4zIiBoZWlnaHQ9IjU4LjMiLz4KCQoJCTxyZWN0IHg9Ijg4Ny4zIiB5PSIxNzkuOSIgdHJhbnNmb3JtPSJtYXRyaXgoLTEgNC40MjIwMjFlLTA2IC00LjQyMjAyMWUtMDYgLTEgMTkwNy4zODM1IDQ5Mi41MikiIGNsYXNzPSJzdDciIHdpZHRoPSIxMzIuOCIgaGVpZ2h0PSIxMzIuOCIvPgoJCgkJPHJlY3QgeD0iNzU0LjEiIHk9IjI4NC4zIiB0cmFuc2Zvcm09Im1hdHJpeCgtMSAtMS4yMjQ2NDdlLTE2IDEuMjI0NjQ3ZS0xNiAtMSAxNjIwLjI3NjQgNjgwLjY5OTgpIiBjbGFzcz0ic3Q3IiB3aWR0aD0iMTEyLjEiIGhlaWdodD0iMTEyLjEiLz4KCTxwYXRoIGNsYXNzPSJzdDgiIGQ9Ik0yNzMuNSw1ODkuN2MtMS42LTIuOS0xLjctNi41LTAuMy05LjVjMS45LTMuNiw0LjktNi42LDguNi04LjRjNC41LTIuNiw5LjUtNC4yLDE0LjYtNC45CgkJYzUuNS0wLjgsMTEtMC44LDE2LjUsMC4yYzUuMywwLjgsMTAuMywyLjYsMTQuOSw1LjJjMywxLjYsNS42LDMuOCw3LjcsNi41YzEuNiwyLDIuNCw0LjYsMi4yLDcuMmwtOC4xLTAuMQoJCWMwLjItMy45LTIuMi03LjMtNy4yLTEwLjJjLTMuNC0yLTcuMi0zLjMtMTEuMS0zLjljLTQuMS0wLjctOC4yLTAuNy0xMi4zLTAuMWMtMy44LDAuNS03LjYsMS44LTEwLjksMy43Yy0yLjcsMS40LTUsMy42LTYuNCw2LjMKCQljLTEuMSwyLjMtMSw0LjksMC4xLDcuMWMxLjYsMi44LDMuOSw1LDYuNyw2LjRjNS40LDMsMTEuNiw0LjQsMTcuOCw0LjFsMC4xLDQuN2MtNC4yLDAuMi04LjQtMC4zLTEyLjUtMS4zCgkJYy00LTAuOS03LjgtMi40LTExLjMtNC41QzI3OC43LDU5Ni40LDI3NS42LDU5My40LDI3My41LDU4OS43eiIvPgoJPHBhdGggY2xhc3M9InN0OCIgZD0iTTM0Ni41LDYyOC4zbC01LjUsMy4yTDMwOC45LDYxM2w0NC4yLTI1LjVsMzEuMiwxOGwtNS41LDMuMkwzNTQsNTk0LjJsLTEzLjYsNy44bDIyLjIsMTIuOGwtNS40LDMuMQoJCUwzMzUsNjA1LjJsLTE0LjMsOC4yTDM0Ni41LDYyOC4zeiIvPgoJPHBhdGggY2xhc3M9InN0OCIgZD0iTTQyMi4xLDYzMmMwLjUsMy41LTEuNiw2LjYtNi40LDkuNGMtNC45LDIuOC0xMC42LDQuMS0xNi4yLDMuN2MtNi4yLTAuNC0xMi4zLTIuMi0xNy42LTUuNGwtMTAuOS02LjMKCQlsLTEzLjQsNy43bC02LjMtMy42bDQ0LjItMjUuNWwxNy4yLDEwQzQxOC40LDYyNS4xLDQyMS42LDYyOC41LDQyMi4xLDYzMnogTTM5OC45LDY0MC4yYzMuNywwLjMsNy4zLTAuNiwxMC41LTIuNAoJCWMzLjItMS44LDQuNi0zLjksNC4yLTYuMWMtMC40LTIuMi0yLjYtNC41LTYuNi02LjhsLTEwLjctNi4ybC0xOS44LDExLjVsMTAuNyw2LjJDMzkwLjcsNjM4LjUsMzk0LjcsNjM5LjgsMzk4LjksNjQwLjIKCQlMMzk4LjksNjQwLjJ6Ii8+Cgk8cGF0aCBjbGFzcz0ic3Q4IiBkPSJNNDc4LjUsNjU5LjhsLTQ0LjIsMjUuNWwtNi4zLTMuNmwxOS43LTExLjRsLTI1LjQtMTQuN0w0MDIuNSw2NjdsLTYuMy0zLjZsNDQuMi0yNS41bDYuMywzLjZsLTE5LDExCgkJbDI1LjQsMTQuN2wxOS0xMUw0NzguNSw2NTkuOHoiLz4KPC9nPgo8ZyBpZD0iTGF5ZXJfMyI+Cgk8Zz4KCQk8cGF0aCBjbGFzcz0ic3Q5IiBkPSJNNDk1LDcyNy43YzAuMSwwLjEsMC4yLDAuMiwwLjIsMC4ybDAsMGMxLjcsMS45LDMuNywzLjIsNS44LDQuNWM5LjksNiwyMC41LDguMywzMS45LDYuMgoJCQljNS40LTEsMTAuMy0zLjEsMTQuMS03LjNjMC41LTAuNiwxLjEtMS4xLDEuMS0xLjljMC4yLTAuMywwLjMtMC42LDAuNS0xYzAuMy0wLjEsMC40LTAuMiwwLjUtMC41YzAuNC0xLjksMC41LTMuOC0wLjItNS42CgkJCWMtMC42LTEuNS0xLjItMy4xLTIuOS00djBjLTAuNC0xLjUsMC43LTEsMS4zLTAuOWMzLjksMC44LDcuOSwxLjEsMTEuOSwwLjdjNC44LTAuNSw5LjMtMS45LDEzLjEtNWMyLjItMS44LDMuOC00LDMuNy03LjEKCQkJYy0wLjEtMi43LTEuNC00LjgtMy4xLTYuNmMtMi43LTIuOC02LjEtNC42LTkuNi02LjNjLTUuMi0yLjQtMTAuNi0zLjctMTYuMi00LjVjLTAuNS0wLjEtMS4yLTAuMi0xLjYsMC40Yy0xLDEuMy0xLjksMi41LTIuOCwzLjgKCQkJYy0wLjYsMC45LTAuNCwxLjMsMC43LDEuNGMyLjUsMC4yLDQuOSwwLjgsNy4zLDEuNGMxLjQsMC4zLDIuNiwxLDQuMSwxLjFsMC4xLDBsMC4xLDBjMCwwLjQsMC40LDAuNCwwLjcsMC42YzIsMC45LDQsMS45LDUuNiwzLjMKCQkJYzMuMywyLjgsMy43LDUuNywwLjMsOC41Yy0yLjMsMi01LjIsMy04LjIsMy4yYy0wLjQsMC0wLjktMC4yLTEuMSwwLjVjLTIuMi0wLjEtNC41LDAtNi42LTAuN2MtMC4xLTAuMS0wLjItMC4yLTAuMy0wLjIKCQkJYy00LjMtMC45LTguMS0yLjktMTEuOS01LjFjLTEuOS0xLjEtMi40LTAuOS0zLjcsMC42Yy0wLjEsMC0wLjIsMC0wLjIsMC4xYy0wLjQsMC0wLjcsMC0wLjcsMC41Yy0wLjIsMC4xLTAuNCwwLjItMC41LDAuNQoJCQljLTEtMC4xLTEuNiwwLjYtMi4zLDEuMWMtMC41LDAuNC0wLjMsMC44LDAuMSwxYzAuNiwwLjMsMS4yLDAuNywxLjgsMWMzLDEuNyw2LDMuNCw4LjMsNmMzLjIsMy42LDMuMiw2LjgsMC4yLDkuOQoJCQljLTEuOSwyLTQuNCwzLTcuMSwzLjljLTEuOSwwLjYtMy44LDAuNS01LjcsMS4yYy0wLjIsMC0wLjUsMC0wLjcsMC4xYy0wLjYtMC40LTEuMy0wLjMtMS45LTAuMWMtMS43LDAuMS0zLjMtMC42LTQuOS0xCgkJCWMtMC4zLTAuMS0wLjYtMC4zLTEtMC40Yy0zLjctMS4xLTctMi45LTEwLTUuMmMtMC42LTAuNC0wLjktMS4zLTEuOS0xLjJsMCwwYy0wLjEtMC4xLTAuMi0wLjItMC4yLTAuMmwwLDAKCQkJYy0wLjEtMC4xLTAuMi0wLjItMC4yLTAuMmwwLDBjLTAuMS0wLjEtMC4yLTAuMi0wLjItMC4ybDAsMGMtMC4xLTAuMS0wLjItMC4yLTAuMi0wLjJsMCwwYy0wLjMtMS4xLTEtMS45LTItMi40bDAsMAoJCQljMC0wLjQsMC0wLjctMC41LTAuN2wwLDBjLTAuMy0xLjktMS0yLjUtMi44LTEuOWMtMS44LDAuNi0zLjcsMS4xLTUuNSwxLjdjLTEuNywwLjUtMS44LDEuMi0wLjUsMi40bDAsMGMwLDAuMiwwLDAuNCwwLjIsMC41bDAsMAoJCQljMC4xLDAuMSwwLjIsMC4yLDAuMiwwLjJsMCwwYzAuMywxLjEsMS4xLDIsMiwyLjdsMCwwYzAuMSwwLjEsMC4yLDAuMiwwLjIsMC4ybDAsMGMwLjEsMC4xLDAuMiwwLjIsMC4yLDAuMmwwLDAKCQkJYzAuMSwwLjEsMC4yLDAuMiwwLjIsMC4ybDAsMGMwLjEsMC4xLDAuMiwwLjIsMC4yLDAuMmwwLDBjMC4xLDAuMSwwLjIsMC4yLDAuMiwwLjJsMCwwQzQ5NC44LDcyNy41LDQ5NC45LDcyNy42LDQ5NSw3MjcuNwoJCQlMNDk1LDcyNy43eiBNNDg0LjIsNzA1LjVDNDg0LjIsNzA1LjUsNDg0LjIsNzA1LjUsNDg0LjIsNzA1LjVjLTAuMSwwLjEtMC4yLDAuMi0wLjIsMC4ybDAsMGMtMS41LDAuNS0yLjcsMS40LTQuMiwxLjgKCQkJYy0wLjgsMC4yLTEuNy0wLjEtMi40LDAuNmMtMC4yLDAtMC41LDAtMC43LDAuMWMtMC4yLTAuMy0wLjYtMC4yLTAuOS0wLjNjLTEuNy0wLjItMy40LTAuNS01LjEtMS4yYy00LjctMS44LTguMy00LjgtMTAuOC05LjIKCQkJYy0wLjMtMC41LTAuNi0wLjctMS4yLTAuNWMtMi4zLDAuOC00LjYsMS41LTcsMi4yYy0wLjcsMC4yLTAuOCwwLjctMC40LDEuM2MxLjIsMiwyLjYsMy43LDQuNCw1LjJjNS42LDQuNSwxMS45LDcuNSwxOS4xLDguMgoJCQljNS41LDAuNiwxMC43LDAuMSwxNS43LTIuNGMxLjItMC42LDIuNS0xLjIsMy4yLTIuNWwwLDBjMC4yLDAsMC40LDAsMC41LTAuM2wwLDBjMC4xLTAuMSwwLjItMC4yLDAuMi0wLjJsMCwwCgkJCWMwLjItMC4yLDAuMy0wLjMsMC41LTAuNWwwLDBjMi0xLjcsMi4yLTQsMS45LTYuM2MtMC4zLTEuNy0wLjgtMy41LTIuMy00LjdsMCwwYzAuMS0wLjYtMC4zLTEtMC42LTEuNGMtMS4xLTEuNC0yLjEtMi44LTMtNC4zCgkJCWMtMS41LTIuNS0xLTQuNSwxLjYtNS45YzAuNS0wLjIsMC45LTAuNSwxLjQtMC42YzUuNC0xLjgsMTAuMS0wLjIsMTQuNCwzLjFjMC45LDAuNywxLjUsMS42LDIuNSwybDAsMGMwLDEsMSwxLjUsMS4yLDIuMwoJCQljMC4yLDAuNywwLjYsMC44LDEuMywwLjZjMi0wLjYsNC4xLTEuMiw2LjItMS44YzEuMi0wLjQsMS4zLTAuNywwLjYtMS44Yy0xLjQtMi4zLTMuMy00LjEtNS41LTUuNmMtNC41LTMuMi05LjUtNS0xNS01LjYKCQkJYy01LjctMC42LTExLjEtMC4xLTE2LjEsMi44Yy00LjUsMi42LTYuMiw2LjItMy45LDExLjRjMS4xLDIuMywyLjgsNC4xLDQuMiw2LjJjMS4zLDIsMi4yLDQsMC42LDYuMmMtMC4xLDAuMSwwLDAuMiwwLDAuNGwwLDAKCQkJQzQ4NC40LDcwNS40LDQ4NC4zLDcwNS40LDQ4NC4yLDcwNS41eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDEwIiBkPSJNNTQ1LjcsNzEyLjFjMi4yLDAuNyw0LjQsMC42LDYuNiwwLjdjMC44LDAsMS43LDAuMSwyLjUtMC4xYzIuNS0wLjYsNC45LTEuMyw2LjktMi45YzMuNC0yLjgsNC01LjYsMC43LTguOQoJCQljLTItMi00LjUtMy42LTcuNC00LjJsLTAuMSwwYzAsMC0wLjEsMC0wLjEsMGMwLTAuNS0wLjQtMC42LTAuNy0wLjdjLTEuNS0wLjQtMy0wLjktNC41LTEuMmMtMi4yLTAuNS00LjQtMC45LTYuNy0xLjMKCQkJYzEtMS40LDItMi42LDIuOC0zLjhjMC4yLTAuMywwLjUtMC41LDAuOS0wLjVjMS40LDAuMiwyLjksMC4zLDQuMywwLjZjNCwwLjgsNy45LDIsMTEuNiwzLjdjNCwxLjgsNy44LDMuOSwxMC44LDcuMgoJCQljMy42LDQuMSwyLjgsOC42LTEsMTEuOWMtNC4yLDMuNi05LjMsNC45LTE0LjcsNS4yYy0zLjUsMC4yLTYuOS0wLjEtMTAuNC0wLjljLTAuOC0wLjItMS44LTAuNy0yLjYsMC4yYzAuNSwwLjQsMSwwLjgsMS40LDEuMgoJCQljMCwwLDAsMCwwLDBjMCwwLjUsMC4zLDAuNywwLjYsMWMyLjIsMi42LDIuOCw1LjcsMi4xLDljLTAuMiwwLjMtMC4zLDAuNi0wLjUsMWMtMC41LDAtMC42LDAuNS0wLjgsMC44Yy0xLjYsMi4zLTMuOCwzLjktNi4yLDUuMQoJCQljLTYuMywzLTEyLjksNC4xLTE5LjgsMy40Yy00LTAuNC04LTEuMy0xMS44LTIuN2MtNC4zLTEuNy04LjQtMy44LTEyLjEtNi42Yy0wLjctMC41LTEuMS0xLjUtMi4yLTEuNGMwLDAsMCwwLDAsMAoJCQljLTAuMS0wLjEtMC4yLTAuMi0wLjItMC4yYzAsMCwwLDAsMCwwYy0wLjEtMC4xLTAuMi0wLjItMC4yLTAuMmMwLDAsMCwwLDAsMGMtMC4xLTAuMS0wLjItMC4yLTAuMi0wLjJjMCwwLDAsMCwwLDAKCQkJYy0wLjEtMC4xLTAuMi0wLjItMC4yLTAuMmMwLDAsMCwwLDAsMGMtMC4xLTAuMS0wLjItMC4yLTAuMi0wLjJjMCwwLDAsMCwwLDBjLTAuMS0wLjEtMC4yLTAuMi0wLjItMC4yYzAsMCwwLDAsMCwwCgkJCWMtMC4xLTAuMS0wLjItMC4yLTAuMi0wLjJjMCwwLDAsMCwwLDBjLTAuMi0xLjItMS4xLTEuOS0yLTIuN2MwLDAsMCwwLDAsMGMtMC4xLTAuMS0wLjItMC4yLTAuMi0wLjJsMCwwYzAtMC4yLDAtMC40LTAuMi0wLjUKCQkJYzAsMCwwLDAsMCwwYzAtMC4yLDAtMC40LTAuMS0wLjZjLTAuNi0wLjgtMC4yLTEuMSwwLjYtMS40YzEuMy0wLjMsMi41LTAuOCwzLjgtMS4yYzEuNy0wLjUsMy40LTEuMyw0LjUsMC45YzAsMCwwLDAsMCwwCgkJCWMwLDAuNCwwLjEsMC42LDAuNSwwLjdjMCwwLDAsMCwwLDBjMC40LDEsMSwxLjgsMiwyLjRjMCwwLDAsMCwwLDBjMC4xLDAuMSwwLjIsMC4yLDAuMiwwLjJjMCwwLDAsMCwwLDBjMC4xLDAuMSwwLjIsMC4yLDAuMiwwLjIKCQkJYzAsMCwwLDAsMCwwYzAuMSwwLjEsMC4yLDAuMiwwLjIsMC4yYzAsMCwwLDAsMCwwYzAuMSwwLjEsMC4yLDAuMiwwLjIsMC4yYzAsMCwwLDAsMCwwYzAuMiwwLjIsMC4zLDAuNSwwLjUsMC43CgkJCWMyLjYsMi41LDUuNyw0LjEsOSw1LjRjMS4xLDAuNSwyLjIsMC45LDMuNCwwLjdjMS42LDAuNCwzLjIsMS4xLDQuOSwxYzAuNiwwLjQsMS4zLDAuMywxLjksMC4xYzAuMiwwLDAuNSwwLDAuNy0wLjEKCQkJYzEuMSwwLDIuMiwwLjEsMy4zLTAuMWMzLjQtMC43LDYuNy0xLjksOS40LTQuMmMyLjMtMS45LDMuNC01LjcsMi4xLTguMmMtMS40LTIuNy0zLjYtNC43LTYtNi40Yy0xLjctMS4xLTMuNS0yLjEtNS4yLTMuMQoJCQljLTEtMC41LTAuNy0wLjksMC0xLjRjMC40LTAuMiwwLjktMC4zLDEtMC44YzAuMS0wLjIsMC4zLTAuNCwwLjUtMC41YzAuMywwLDAuNi0wLjIsMC43LTAuNWMwLjEsMCwwLjEsMCwwLjItMC4xCgkJCWMwLjQsMC40LDAuNi0wLjEsMC44LTAuM2MwLjgtMC42LDEuNS0wLjUsMi4zLDBjMywxLjgsNi4xLDMuNiw5LjYsNC41QzU0My42LDcxMS45LDU0NC42LDcxMi41LDU0NS43LDcxMi4xeiIvPgoJCTxwYXRoIGNsYXNzPSJzdDEwIiBkPSJNNDc2LjcsNzA4LjJjMC4yLDAsMC41LDAsMC43LTAuMWMwLjksMC40LDEuOC0wLjIsMi43LTAuM2MxLjUtMC4yLDMtMC44LDMuOS0yLjFjMCwwLDAsMCwwLDAKCQkJYzAuMS0wLjEsMC4yLTAuMiwwLjItMC4yYzAsMCwwLDAsMCwwYzAuMS0wLjEsMC4yLTAuMiwwLjItMC4yYzAsMCwwLDAsMCwwYzEuNC0xLjEsMS43LTMuNiwwLjctNS41Yy0xLjEtMi4xLTIuOC0zLjgtNC4xLTUuOAoJCQljLTMuNC01LjUtMi40LTkuMiwyLjQtMTIuMmM1LjQtMy4zLDExLjQtMy44LDE3LjUtMi45YzUuMSwwLjgsOS43LDIuNiwxMy44LDUuOGMxLjgsMS40LDMuNSwyLjksNC44LDQuOGMwLjUsMC43LDAuNCwxLjEtMC41LDEuNAoJCQljLTIsMC42LTQsMS4yLTUuOSwxLjhjLTAuNSwwLjItMC41LTAuMS0wLjYtMC4zYy0wLjYtMC43LTEtMS42LTEuOC0yLjFjMCwwLDAsMCwwLDBjMC0wLjQtMC4yLTAuNi0wLjQtMC44CgkJCWMtMy4yLTIuOS02LjUtNS4zLTExLjEtNS4zYy0yLjQsMC00LjYtMC4xLTYuOCwxYy0yLDEtMy4yLDIuNy0yLjcsNC41YzAuOCwzLDIuOCw1LjQsNC44LDcuN2MwLDAsMCwwLDAsMGMwLDAuNSwwLjMsMC44LDAuNSwxLjIKCQkJYzEuNCwyLjQsMi4zLDQuOSwxLDcuN2MtMC4zLDAuNy0xLjEsMS4yLTEsMi4xYzAsMCwwLDAsMCwwYy0wLjMsMC0wLjUsMC4yLTAuNSwwLjVjMCwwLDAsMCwwLDBjLTAuMSwwLjEtMC4yLDAuMi0wLjIsMC4yCgkJCWMwLDAsMCwwLDAsMGMtMC4yLDAtMC40LDAtMC41LDAuM2MwLDAsMCwwLDAsMGMtMC41LDAtMC45LDAuNC0xLjMsMC43Yy0xLjEsMC45LTIuNSwxLjYtMy44LDIuMWMtNS40LDIuMi0xMSwyLjMtMTYuNywxLjIKCQkJYy01LjQtMS4xLTEwLjItMy41LTE0LjctNi43Yy0yLjEtMS41LTMuOC0zLjQtNS4yLTUuNmMtMC40LTAuNi0wLjMtMC45LDAuNC0xLjFjMS43LTAuNiwzLjQtMS4xLDUuMS0xLjdjMS4yLTAuNCwxLjgtMC4yLDIuNSwwLjkKCQkJYzIuOSw0LjUsNi45LDcuNiwxMi4xLDguOEM0NzMuNyw3MDguMSw0NzUuMiw3MDguNyw0NzYuNyw3MDguMnoiLz4KCQk8cGF0aCBjbGFzcz0ic3QxMSIgZD0iTTU0Niw3MTguNGMtMC41LTAuNC0wLjktMC44LTEuNC0xLjJjMC45LTAuOSwxLjgtMC40LDIuNi0wLjJjMy40LDAuNyw2LjksMS4xLDEwLjQsMC45CgkJCWM1LjQtMC40LDEwLjUtMS43LDE0LjctNS4yYzMuOS0zLjMsNC42LTcuNywxLTExLjljLTIuOS0zLjQtNi43LTUuNS0xMC44LTcuMmMtMy43LTEuNy03LjYtMi45LTExLjYtMy43CgkJCWMtMS40LTAuMy0yLjktMC40LTQuMy0wLjZjLTAuNC0wLjEtMC43LDAuMS0wLjksMC41Yy0wLjksMS4yLTEuOCwyLjQtMi44LDMuOGMyLjMsMC40LDQuNSwwLjgsNi43LDEuM2MxLjUsMC4zLDMsMC44LDQuNSwxLjIKCQkJYzAuMywwLjEsMC43LDAuMiwwLjcsMC43Yy0xLjQtMC4xLTIuNy0wLjgtNC4xLTEuMWMtMi40LTAuNS00LjgtMS4yLTcuMy0xLjRjLTEuMS0wLjEtMS4zLTAuNC0wLjctMS40YzAuOS0xLjMsMS45LTIuNSwyLjgtMy44CgkJCWMwLjQtMC41LDEtMC40LDEuNi0wLjRjNS42LDAuNywxMSwyLjEsMTYuMiw0LjVjMy41LDEuNiw2LjksMy40LDkuNiw2LjNjMS44LDEuOCwzLDMuOSwzLjEsNi42YzAuMSwzLjEtMS40LDUuMy0zLjcsNy4xCgkJCWMtMy44LDMuMS04LjMsNC41LTEzLjEsNWMtNCwwLjQtOCwwLjEtMTEuOS0wLjdDNTQ2LjcsNzE3LjQsNTQ1LjYsNzE2LjksNTQ2LDcxOC40eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDExIiBkPSJNNTEwLjgsNjkwLjJjMC44LDAuNSwxLjIsMS40LDEuOCwyLjFjMC4yLDAuMiwwLjIsMC41LDAuNiwwLjNjMi0wLjYsMy45LTEuMiw1LjktMS44YzAuOC0wLjMsMS0wLjcsMC41LTEuNAoJCQljLTEuMy0xLjktMy0zLjQtNC44LTQuOGMtNC4xLTMuMS04LjgtNS0xMy44LTUuOGMtNi4xLTAuOS0xMi4xLTAuNS0xNy41LDIuOWMtNC45LDMtNS45LDYuNy0yLjQsMTIuMmMxLjMsMiwyLjksMy43LDQuMSw1LjgKCQkJYzEsMS45LDAuOCw0LjQtMC43LDUuNWMwLTAuMSwwLTAuMywwLTAuNGMxLjctMi4zLDAuNy00LjMtMC42LTYuMmMtMS40LTIuMS0zLjEtMy45LTQuMi02LjJjLTIuNC01LjItMC42LTguOSwzLjktMTEuNAoJCQljNS0yLjksMTAuNS0zLjQsMTYuMS0yLjhjNS41LDAuNiwxMC41LDIuNCwxNSw1LjZjMi4yLDEuNSw0LjEsMy4zLDUuNSw1LjZjMC43LDEuMSwwLjYsMS41LTAuNiwxLjhjLTIsMC42LTQuMSwxLjItNi4yLDEuOAoJCQljLTAuNywwLjItMS4xLDAtMS4zLTAuNkM1MTEuOCw2OTEuNyw1MTAuOSw2OTEuMiw1MTAuOCw2OTAuMnoiLz4KCQk8cGF0aCBjbGFzcz0ic3QxMSIgZD0iTTQ3Ni43LDcwOC4yYy0xLjUsMC40LTIuOS0wLjEtNC40LTAuNGMtNS4zLTEuMi05LjItNC40LTEyLjEtOC44Yy0wLjctMS4xLTEuMy0xLjQtMi41LTAuOQoJCQljLTEuNywwLjYtMy40LDEuMS01LjEsMS43Yy0wLjcsMC4zLTAuOCwwLjYtMC40LDEuMWMxLjQsMi4yLDMuMSw0LjEsNS4yLDUuNmM0LjUsMy4yLDkuMyw1LjYsMTQuNyw2LjdjNS43LDEuMiwxMS4zLDEsMTYuNy0xLjIKCQkJYzEuMy0wLjUsMi42LTEuMiwzLjgtMi4xYzAuNC0wLjMsMC43LTAuNywxLjMtMC43Yy0wLjcsMS4zLTIsMS45LTMuMiwyLjVjLTQuOSwyLjUtMTAuMiwzLTE1LjcsMi40Yy03LjItMC44LTEzLjUtMy44LTE5LjEtOC4yCgkJCWMtMS44LTEuNC0zLjItMy4yLTQuNC01LjJjLTAuNC0wLjYtMC4zLTEuMSwwLjQtMS4zYzIuMy0wLjcsNC42LTEuNCw3LTIuMmMwLjYtMC4yLDAuOSwwLDEuMiwwLjVjMi41LDQuNCw2LjEsNy40LDEwLjgsOS4yCgkJCWMxLjYsMC42LDMuMywwLjksNS4xLDEuMkM0NzYuMSw3MDgsNDc2LjUsNzA3LjksNDc2LjcsNzA4LjJ6Ii8+CgkJPHBhdGggY2xhc3M9InN0MTEiIGQ9Ik00OTUuMiw3MjcuOWMxLjEtMC4xLDEuNSwwLjksMi4yLDEuNGMzLjcsMi45LDcuOCw1LDEyLjEsNi42YzMuOCwxLjUsNy43LDIuMywxMS44LDIuNwoJCQljNi45LDAuNywxMy42LTAuNCwxOS44LTMuNGMyLjQtMS4yLDQuNi0yLjksNi4yLTUuMWMwLjItMC4zLDAuMy0wLjgsMC44LTAuOGMwLDAuOS0wLjYsMS40LTEuMSwxLjljLTMuOCw0LjItOC43LDYuMy0xNC4xLDcuMwoJCQljLTExLjQsMi4xLTIyLTAuMi0zMS45LTYuMkM0OTguOSw3MzEuMSw0OTYuOSw3MjkuOCw0OTUuMiw3MjcuOXoiLz4KCQk8cGF0aCBjbGFzcz0ic3QxMSIgZD0iTTUyOC40LDcwOC40Yy0wLjIsMC41LTAuNywwLjYtMSwwLjhjLTAuOCwwLjQtMSwwLjksMCwxLjRjMS44LDEsMy41LDIsNS4yLDMuMWMyLjUsMS43LDQuNywzLjcsNiw2LjQKCQkJYzEuMywyLjYsMC4yLDYuMy0yLjEsOC4yYy0yLjgsMi4yLTYsMy41LTkuNCw0LjJjLTEsMC4yLTIuMiwwLjEtMy4zLDAuMWMxLjgtMC43LDMuOC0wLjYsNS43LTEuMmMyLjYtMC44LDUuMS0xLjksNy4xLTMuOQoJCQljMy0zLjEsMy02LjMtMC4yLTkuOWMtMi4zLTIuNi01LjMtNC4zLTguMy02Yy0wLjYtMC4zLTEuMi0wLjctMS44LTFjLTAuNS0wLjMtMC43LTAuNy0wLjEtMUM1MjYuOCw3MDksNTI3LjQsNzA4LjQsNTI4LjQsNzA4LjR6IgoJCQkvPgoJCTxwYXRoIGNsYXNzPSJzdDExIiBkPSJNNDk0LjUsNjk3LjJjLTItMi4zLTQtNC43LTQuOC03LjdjLTAuNS0xLjcsMC44LTMuNSwyLjctNC41YzIuMi0xLjEsNC41LTEsNi44LTFjNC42LDAsOCwyLjQsMTEuMSw1LjMKCQkJYzAuMiwwLjIsMC41LDAuNSwwLjQsMC44Yy0xLTAuNC0xLjctMS40LTIuNS0yYy00LjMtMy4zLTktNC45LTE0LjQtMy4xYy0wLjUsMC4yLTEsMC40LTEuNCwwLjZjLTIuNSwxLjQtMy4xLDMuMy0xLjYsNS45CgkJCWMwLjksMS41LDEuOSwyLjksMyw0LjNDNDk0LjIsNjk2LjIsNDk0LjYsNjk2LjcsNDk0LjUsNjk3LjJ6Ii8+CgkJPHBhdGggY2xhc3M9InN0MTEiIGQ9Ik01NTUsNjk2LjhjMi45LDAuNiw1LjQsMi4xLDcuNCw0LjJjMy4zLDMuMywyLjcsNi4xLTAuNyw4LjljLTIsMS42LTQuNCwyLjMtNi45LDIuOQoJCQljLTAuOCwwLjItMS43LDAuMS0yLjUsMC4xYzAuMS0wLjcsMC43LTAuNCwxLjEtMC41YzMuMS0wLjIsNS45LTEuMiw4LjItMy4yYzMuMy0yLjgsMy01LjctMC4zLTguNWMtMS43LTEuNC0zLjctMi40LTUuNi0zLjMKCQkJQzU1NS40LDY5Ny4yLDU1NSw2OTcuMiw1NTUsNjk2Ljh6Ii8+CgkJPHBhdGggY2xhc3M9InN0MTEiIGQ9Ik01NDUuNyw3MTIuMWMtMS4xLDAuNC0yLjEtMC4yLTMuMS0wLjVjLTMuNS0wLjktNi42LTIuNi05LjYtNC41Yy0wLjktMC41LTEuNS0wLjYtMi4zLDAKCQkJYy0wLjIsMC4xLTAuNCwwLjYtMC44LDAuM2MxLjItMS41LDEuOC0xLjcsMy43LTAuNmMzLjgsMi4yLDcuNiw0LjEsMTEuOSw1LjFDNTQ1LjUsNzExLjksNTQ1LjYsNzEyLjEsNTQ1LjcsNzEyLjF6Ii8+CgkJPHBhdGggY2xhc3M9InN0MTEiIGQ9Ik01MTYuMiw3MzEuNmMtMS4yLDAuMi0yLjMtMC4zLTMuNC0wLjdjLTMuMi0xLjQtNi40LTIuOS05LTUuNGMtMC4yLTAuMi0wLjMtMC40LTAuNS0wLjcKCQkJYzAuOSwwLDEuMywwLjgsMS45LDEuMmMzLjEsMi4zLDYuNCw0LDEwLDUuMkM1MTUuNSw3MzEuMiw1MTUuOCw3MzEuNCw1MTYuMiw3MzEuNnoiLz4KCQk8cGF0aCBjbGFzcz0ic3QxMSIgZD0iTTQ5OS45LDcyMC42Yy0xLjEtMi4zLTIuOC0xLjUtNC41LTAuOWMtMS4zLDAuNC0yLjUsMC45LTMuOCwxLjJjLTAuOCwwLjItMS4yLDAuNS0wLjYsMS40CgkJCWMwLjEsMC4xLDAsMC40LDAuMSwwLjZjLTEuMy0xLjMtMS4yLTEuOSwwLjUtMi40YzEuOC0wLjYsMy43LTEuMSw1LjUtMS43QzQ5OC44LDcxOC4xLDQ5OS42LDcxOC43LDQ5OS45LDcyMC42eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDExIiBkPSJNNTQ4LjcsNzI4LjRjMC43LTMuMywwLjItNi40LTIuMS05Yy0wLjMtMC4zLTAuNi0wLjUtMC42LTFjMS42LDAuOCwyLjMsMi40LDIuOSw0YzAuNywxLjgsMC42LDMuNywwLjIsNS42CgkJCUM1NDkuMSw3MjguMiw1NDguOSw3MjguMyw1NDguNyw3MjguNHoiLz4KCQk8cGF0aCBjbGFzcz0ic3QxMSIgZD0iTTQ5NSw3MDguMmMtMC4xLTAuOSwwLjctMS40LDEtMi4xYzEuMy0yLjgsMC40LTUuMi0xLTcuN2MtMC4yLTAuNC0wLjUtMC43LTAuNS0xLjJjMS41LDEuMiwyLjEsMywyLjMsNC43CgkJCUM0OTcuMiw3MDQuMyw0OTcsNzA2LjUsNDk1LDcwOC4yeiIvPgoJCTxwYXRoIGNsYXNzPSJzdDExIiBkPSJNNDg0LDcwNS44Yy0xLDEuNC0yLjQsMS45LTMuOSwyLjFjLTAuOSwwLjEtMS43LDAuNy0yLjcsMC4zYzAuNy0wLjcsMS42LTAuNCwyLjQtMC42CgkJCUM0ODEuMyw3MDcuMSw0ODIuNiw3MDYuMiw0ODQsNzA1Ljh6Ii8+CgkJPHBhdGggY2xhc3M9InN0MTEiIGQ9Ik00OTEuNiw3MjMuNWMwLjksMC43LDEuNywxLjUsMiwyLjdDNDkyLjYsNzI1LjUsNDkxLjksNzI0LjcsNDkxLjYsNzIzLjV6Ii8+CgkJPHBhdGggY2xhc3M9InN0MTEiIGQ9Ik01MDIuMyw3MjMuOGMtMC45LTAuNi0xLjYtMS40LTItMi40QzUwMS40LDcyMS45LDUwMiw3MjIuNyw1MDIuMyw3MjMuOHoiLz4KCQk8cGF0aCBjbGFzcz0ic3QxMSIgZD0iTTUyMyw3MzIuNmMtMC43LDAuMy0xLjMsMC40LTEuOS0wLjFDNTIxLjcsNzMyLjIsNTIyLjQsNzMyLjIsNTIzLDczMi42eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDExIiBkPSJNNTI5LjYsNzA3LjVjLTAuMSwwLjMtMC40LDAuNS0wLjcsMC41QzUyOSw3MDcuNSw1MjkuMyw3MDcuNSw1MjkuNiw3MDcuNXoiLz4KCQk8cGF0aCBjbGFzcz0ic3QxMSIgZD0iTTUwMC40LDcyMS4zYy0wLjMtMC4xLTAuNS0wLjQtMC41LTAuN0M1MDAuNCw3MjAuNiw1MDAuNCw3MjEsNTAwLjQsNzIxLjN6Ii8+CgkJPHBhdGggY2xhc3M9InN0MTEiIGQ9Ik00OTQuNSw3MDguN2MwLTAuMywwLjItMC41LDAuNS0wLjVDNDk0LjgsNzA4LjQsNDk0LjcsNzA4LjUsNDk0LjUsNzA4Ljd6Ii8+CgkJPHBhdGggY2xhc3M9InN0MTEiIGQ9Ik00OTMuOCw3MDkuMmMwLjEtMC4yLDAuMy0wLjMsMC41LTAuM0M0OTQuMiw3MDkuMSw0OTQsNzA5LjIsNDkzLjgsNzA5LjJ6Ii8+CgkJPHBhdGggY2xhc3M9InN0MTEiIGQ9Ik00OTEuMSw3MjIuOGMwLjIsMC4xLDAuMywwLjMsMC4yLDAuNUM0OTEuMSw3MjMuMiw0OTEuMSw3MjMsNDkxLjEsNzIyLjh6Ii8+CgkJPHBhdGggY2xhc3M9InN0MTEiIGQ9Ik00OTQuMyw3MDguOWMwLjEtMC4xLDAuMi0wLjIsMC4yLTAuMkM0OTQuNCw3MDguOCw0OTQuMyw3MDguOSw0OTQuMyw3MDguOXoiLz4KCQk8cGF0aCBjbGFzcz0ic3QxMSIgZD0iTTQ4NC4yLDcwNS41Yy0wLjEsMC4xLTAuMiwwLjItMC4yLDAuMkM0ODQuMSw3MDUuNyw0ODQuMiw3MDUuNiw0ODQuMiw3MDUuNXoiLz4KCQk8cGF0aCBjbGFzcz0ic3QxMSIgZD0iTTQ5MS4zLDcyMy4zYzAuMSwwLjEsMC4yLDAuMiwwLjIsMC4yQzQ5MS41LDcyMy41LDQ5MS40LDcyMy40LDQ5MS4zLDcyMy4zeiIvPgoJCTxwYXRoIGNsYXNzPSJzdDExIiBkPSJNNTAyLjYsNzI0Yy0wLjEtMC4xLTAuMi0wLjItMC4yLTAuMkM1MDIuNCw3MjMuOCw1MDIuNSw3MjMuOSw1MDIuNiw3MjR6Ii8+CgkJPHBhdGggY2xhc3M9InN0MTEiIGQ9Ik01MDIuOCw3MjQuM2MtMC4xLTAuMS0wLjItMC4yLTAuMi0wLjJDNTAyLjYsNzI0LjEsNTAyLjcsNzI0LjIsNTAyLjgsNzI0LjN6Ii8+CgkJPHBhdGggY2xhc3M9InN0MTEiIGQ9Ik01MDMuMSw3MjQuNWMtMC4xLTAuMS0wLjItMC4yLTAuMi0wLjJDNTAyLjksNzI0LjMsNTAzLDcyNC40LDUwMy4xLDcyNC41eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDExIiBkPSJNNTAzLjMsNzI0LjdjLTAuMS0wLjEtMC4yLTAuMi0wLjItMC4yQzUwMy4xLDcyNC42LDUwMy4yLDcyNC43LDUwMy4zLDcyNC43eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDExIiBkPSJNNDg0LjUsNzA1LjNjLTAuMSwwLjEtMC4yLDAuMi0wLjIsMC4yQzQ4NC4zLDcwNS40LDQ4NC40LDcwNS40LDQ4NC41LDcwNS4zeiIvPgoJCTxwYXRoIGNsYXNzPSJzdDExIiBkPSJNNDkzLjUsNzI2LjJjMC4xLDAuMSwwLjIsMC4yLDAuMiwwLjJDNDkzLjcsNzI2LjQsNDkzLjYsNzI2LjMsNDkzLjUsNzI2LjJ6Ii8+CgkJPHBhdGggY2xhc3M9InN0MTEiIGQ9Ik00OTMuOCw3MjYuNWMwLjEsMC4xLDAuMiwwLjIsMC4yLDAuMkM0OTMuOSw3MjYuNiw0OTMuOCw3MjYuNSw0OTMuOCw3MjYuNXoiLz4KCQk8cGF0aCBjbGFzcz0ic3QxMSIgZD0iTTQ5NCw3MjYuN2MwLjEsMC4xLDAuMiwwLjIsMC4yLDAuMkM0OTQuMiw3MjYuOSw0OTQuMSw3MjYuOCw0OTQsNzI2Ljd6Ii8+CgkJPHBhdGggY2xhc3M9InN0MTEiIGQ9Ik00OTQuMyw3MjYuOWMwLjEsMC4xLDAuMiwwLjIsMC4yLDAuMkM0OTQuNCw3MjcuMSw0OTQuMyw3MjcsNDk0LjMsNzI2Ljl6Ii8+CgkJPHBhdGggY2xhc3M9InN0MTEiIGQ9Ik00OTQuNSw3MjcuMmMwLjEsMC4xLDAuMiwwLjIsMC4yLDAuMkM0OTQuNyw3MjcuNCw0OTQuNiw3MjcuMyw0OTQuNSw3MjcuMnoiLz4KCQk8cGF0aCBjbGFzcz0ic3QxMSIgZD0iTTQ5NC43LDcyNy40YzAuMSwwLjEsMC4yLDAuMiwwLjIsMC4yQzQ5NC45LDcyNy42LDQ5NC44LDcyNy41LDQ5NC43LDcyNy40eiIvPgoJCTxwYXRoIGNsYXNzPSJzdDExIiBkPSJNNDk1LDcyNy43YzAuMSwwLjEsMC4yLDAuMiwwLjIsMC4yQzQ5NS4xLDcyNy44LDQ5NS4xLDcyNy44LDQ5NSw3MjcuN3oiLz4KCTwvZz4KPC9nPgo8ZyBpZD0iTG9nbyI+CjwvZz4KPC9zdmc+Cg== + mediatype: image/svg+xml install: spec: deployments: null @@ -75,7 +83,7 @@ spec: url: https://github.com/snapp-incubator/ceph-s3-operator/wiki maintainers: - email: cloud-platform@snapp.cab - name: Snappcloud Platform Tea + name: Snappcloud Platform Team maturity: stable minKubeVersion: 1.23.0 provider: diff --git a/pkg/consts/consts.go b/pkg/consts/consts.go index e1ab783..d5c3100 100644 --- a/pkg/consts/consts.go +++ b/pkg/consts/consts.go @@ -26,7 +26,6 @@ const ( S3UserClassImmutableErrMessage = "s3UserClass is immutable" S3UserRefImmutableErrMessage = "s3UserRef is immutable" S3UserRefNotFoundErrMessage = "there is no s3UserClaim regarding the defined s3UserRef" - ContactCloudTeamErrMessage = "please contact the cloud team" FinalizerPrefix = "s3.snappcloud.io/" S3UserClaimCleanupFinalizer = FinalizerPrefix + "cleanup-s3userclaim" diff --git a/testing/Dockerfile b/testing/Dockerfile index 72ae4b3..081f5da 100644 --- a/testing/Dockerfile +++ b/testing/Dockerfile @@ -1,6 +1,6 @@ # Source(with modifications): https://github.com/ceph/go-ceph/blob/master/testing/containers/ceph/Dockerfile ARG CEPH_IMG=quay.io/ceph/ceph -ARG CEPH_TAG=v14.2.6 +ARG CEPH_TAG=v14.2.22 FROM ${CEPH_IMG}:${CEPH_TAG} RUN true && \