From 8f41ef368d95f2f9b267ceb761d3e2d6aead33f7 Mon Sep 17 00:00:00 2001 From: Andrew Kenworthy Date: Tue, 19 Nov 2024 10:31:30 +0100 Subject: [PATCH 01/37] initial keycloak setup --- .../keycloak-realm-config.yaml | 75 +++++++++ stacks/jupyter-keycloak/keycloak.yaml | 152 ++++++++++++++++++ stacks/jupyter-keycloak/serviceaccount.yaml | 55 +++++++ stacks/stacks-v2.yaml | 28 ++++ 4 files changed, 310 insertions(+) create mode 100644 stacks/jupyter-keycloak/keycloak-realm-config.yaml create mode 100644 stacks/jupyter-keycloak/keycloak.yaml create mode 100644 stacks/jupyter-keycloak/serviceaccount.yaml diff --git a/stacks/jupyter-keycloak/keycloak-realm-config.yaml b/stacks/jupyter-keycloak/keycloak-realm-config.yaml new file mode 100644 index 00000000..8ea2a039 --- /dev/null +++ b/stacks/jupyter-keycloak/keycloak-realm-config.yaml @@ -0,0 +1,75 @@ +--- +apiVersion: v1 +kind: Secret +metadata: + name: jupyterhub-client-credentials +stringData: + clientId: jupyterhub + clientSecret: {{ keycloakJupyterhubClientSecret }} +--- +apiVersion: v1 +kind: Secret +metadata: + name: keycloak-realm-config +stringData: + # Created by clicking users in Keycloak WebUI and than running `/opt/keycloak/bin/kc.sh export --dir /tmp` + # (as well as some manual modifications). + realm.json: | + { + "realm" : "jupyterhub", + "enabled" : true, + "groups" : [ { + "name" : "Notebook Developers", + "path" : "/Notebook Developers", + "subGroups" : [ { + "name" : "Analytics", + "path" : "/Notebook Developers/Analytics" + } ] + } ], + "users" : [ { + "id" : "e44a09fa-bce1-40e8-a1da-28902b79dcf0", + "createdTimestamp" : 1711375603780, + "username" : "dev.user", + "enabled" : true, + "totp" : false, + "emailVerified" : true, + "firstName" : "Developer", + "lastName" : "User", + "email" : "dev.user@dummymail.com", + "credentials" : [ { + "id" : "77343b9c-661e-4f04-8ea3-c4dd7f86abde", + "type" : "password", + "userLabel" : "My password", + "createdDate" : 1711375610955, + "secretData" : "{\"value\":\"jNVzthZCkPipHW1KHZCncU/G/DHc+5QqmGEKernet5E=\",\"salt\":\"7woqv8IPicuA0cpa3U6dEg==\",\"additionalParameters\":{}}", + "credentialData" : "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\",\"additionalParameters\":{}}" + } ], + "disableableCredentialTypes" : [ ], + "requiredActions" : [ ], + "realmRoles" : [ "default-roles-jupyterhub" ], + "notBefore" : 0, + "groups" : [ "/Notebook Developers/Analytics" ] + } ], + "clients" : [ { + "clientId" : "jupyterhub", + "surrogateAuthRequired" : false, + "enabled" : true, + "alwaysDisplayInConsole" : true, + "clientAuthenticatorType" : "client-secret", + "secret" : "{{ keycloakJupyterhubClientSecret }}", + "redirectUris" : [ "*" ], + "webOrigins" : [ "*" ], + "notBefore" : 0, + "bearerOnly" : false, + "serviceAccountsEnabled" : true, + "publicClient" : false, + "frontchannelLogout" : true, + "protocol" : "openid-connect", + "attributes" : { + "oidc.ciba.grant.enabled" : "true", + "oauth2.device.authorization.grant.enabled" : "false" + }, + "authenticationFlowBindingOverrides" : { }, + "fullScopeAllowed" : true + } ] + } diff --git a/stacks/jupyter-keycloak/keycloak.yaml b/stacks/jupyter-keycloak/keycloak.yaml new file mode 100644 index 00000000..6eeb81ae --- /dev/null +++ b/stacks/jupyter-keycloak/keycloak.yaml @@ -0,0 +1,152 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: keycloak + labels: + app: keycloak +spec: + replicas: 1 + selector: + matchLabels: + app: keycloak + template: + metadata: + labels: + app: keycloak + spec: + containers: + - name: keycloak + image: quay.io/keycloak/keycloak:26.0.5 + args: + - start + - --hostname-strict=false + - --https-key-store-file=/tls/keystore.p12 + - --https-key-store-password=changeit + - --import-realm + env: + - name: KEYCLOAK_ADMIN + value: admin + - name: KEYCLOAK_ADMIN_PASSWORD + valueFrom: + secretKeyRef: + name: keycloak-admin-credentials + key: admin + ports: + - name: https + containerPort: 8443 + readinessProbe: + httpGet: + scheme: HTTPS + path: /realms/master + port: https + volumeMounts: + - name: data + mountPath: /opt/keycloak/data/ + - name: realm-config + mountPath: /opt/keycloak/data/import + - name: tls + mountPath: /tls/ + - name: create-auth-class + image: docker.stackable.tech/stackable/testing-tools:0.2.0-stackable24.7.0 + command: ["/bin/bash", "-c"] + args: + - | + pid= + trap 'echo SIGINT; [[ $pid ]] && kill $pid; exit' SIGINT + trap 'echo SIGTERM; [[ $pid ]] && kill $pid; exit' SIGTERM + + while : + do + echo "Determining Keycloak public reachable address" + KEYCLOAK_ADDRESS=$(kubectl get svc keycloak -o json | jq -r --argfile endpoints <(kubectl get endpoints keycloak -o json) --argfile nodes <(kubectl get nodes -o json) '($nodes.items[] | select(.metadata.name == $endpoints.subsets[].addresses[].nodeName) | .status.addresses | map(select(.type == "ExternalIP" or .type == "InternalIP")) | min_by(.type) | .address | tostring) + ":" + (.spec.ports[] | select(.name == "https") | .nodePort | tostring)') + echo "Found Keycloak running at $KEYCLOAK_ADDRESS" + + if [ ! -z "$KEYCLOAK_ADDRESS" ]; then + KEYCLOAK_HOSTNAME="$(echo $KEYCLOAK_ADDRESS | grep -oP '^[^:]+')" + KEYCLOAK_PORT="$(echo $KEYCLOAK_ADDRESS | grep -oP '[0-9]+$')" + + cat << EOF | kubectl apply -f - + apiVersion: authentication.stackable.tech/v1alpha1 + kind: AuthenticationClass + metadata: + name: keycloak + spec: + provider: + oidc: + hostname: "$KEYCLOAK_HOSTNAME" + port: $KEYCLOAK_PORT + rootPath: /realms/demo + scopes: [openid] + principalClaim: preferred_username + tls: + verification: + server: + caCert: + secretClass: tls + EOF + fi + + sleep 30 & pid=$! + wait + done + securityContext: + fsGroup: 1000 + runAsGroup: 1000 + runAsUser: 1000 + volumes: + - name: data + persistentVolumeClaim: + claimName: keycloak-data + - name: realm-config + secret: + secretName: keycloak-realm-config + - name: tls + ephemeral: + volumeClaimTemplate: + metadata: + annotations: + secrets.stackable.tech/class: tls + secrets.stackable.tech/format: tls-pkcs12 + secrets.stackable.tech/format.compatibility.tls-pkcs12.password: changeit + secrets.stackable.tech/scope: service=keycloak,node + spec: + storageClassName: secrets.stackable.tech + accessModes: + - ReadWriteOnce + resources: + requests: + storage: "1" + serviceAccountName: keycloak-serviceaccount +--- +apiVersion: v1 +kind: Service +metadata: + name: keycloak + labels: + app: keycloak +spec: + type: NodePort + selector: + app: keycloak + ports: + - name: https + port: 8443 + targetPort: 8443 +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: keycloak-data +spec: + accessModes: [ReadWriteOnce] + resources: + requests: + storage: 1Gi +--- +apiVersion: v1 +kind: Secret +metadata: + name: keycloak-admin-credentials +stringData: + admin: "{{ keycloakAdminPassword }}" diff --git a/stacks/jupyter-keycloak/serviceaccount.yaml b/stacks/jupyter-keycloak/serviceaccount.yaml new file mode 100644 index 00000000..bb819895 --- /dev/null +++ b/stacks/jupyter-keycloak/serviceaccount.yaml @@ -0,0 +1,55 @@ +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: keycloak-serviceaccount + namespace: default +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: keycloak-clusterrolebinding +subjects: + - kind: ServiceAccount + name: keycloak-serviceaccount + namespace: default +roleRef: + kind: ClusterRole + name: keycloak-clusterrole + apiGroup: rbac.authorization.k8s.io +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: keycloak-clusterrole +rules: + - apiGroups: + - "" + resources: + - nodes + - services + - endpoints + verbs: + - get + - list + - watch + - apiGroups: + - "" + resources: + - configmaps + verbs: + - get + - list + - watch + - create + - patch + - apiGroups: + - authentication.stackable.tech + resources: + - authenticationclasses + verbs: + - get + - list + - watch + - create + - patch diff --git a/stacks/stacks-v2.yaml b/stacks/stacks-v2.yaml index 95f5ca29..3b21a1db 100644 --- a/stacks/stacks-v2.yaml +++ b/stacks/stacks-v2.yaml @@ -646,3 +646,31 @@ stacks: - name: jupyterHubAdminPassword description: Password of the JupyterHub admin user default: adminadmin + jupyterhub-keycloak: + description: >- + A stack used to demonstrate JupyterHub and Keycloak. + stackableRelease: dev + labels: + - jupyterhub + - keycloak + supportedNamespaces: [] + stackableOperators: + - commons + - listener + - secret + resourceRequests: + cpu: 3400m + memory: 9010Mi + pvc: 24Gi + manifests: + - plainYaml: stacks/jupyter-keycloak/serviceaccount.yaml + - plainYaml: stacks/jupyter-keycloak/keycloak-realm-config.yaml + - plainYaml: stacks/jupyter-keycloak/keycloak.yaml + + parameters: + - name: keycloakAdminPassword + description: Password of the Keycloak admin user + default: adminadmin + - name: keycloakJupyterhubClientSecret + description: Secret ID of the Keycloak Jupyterhub client + default: jupyterhubjupyterhub From eaf555c06d7702e00eeaa958721326b757515203 Mon Sep 17 00:00:00 2001 From: Andrew Kenworthy Date: Tue, 19 Nov 2024 16:01:44 +0100 Subject: [PATCH 02/37] wip: jupyterhub + keycloak --- stacks/jupyter-keycloak/jupyterhub.yaml | 64 +++++++++++++++++++ .../keycloak-realm-config.yaml | 8 ++- stacks/stacks-v2.yaml | 4 ++ 3 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 stacks/jupyter-keycloak/jupyterhub.yaml diff --git a/stacks/jupyter-keycloak/jupyterhub.yaml b/stacks/jupyter-keycloak/jupyterhub.yaml new file mode 100644 index 00000000..fe4bd74e --- /dev/null +++ b/stacks/jupyter-keycloak/jupyterhub.yaml @@ -0,0 +1,64 @@ +--- +releaseName: jupyterhub +name: jupyterhub +repo: + name: jupyterhub + url: https://jupyterhub.github.io/helm-chart/ +version: 4.0.0 +options: + hub: + config: + GenericOAuthenticator: + client_id: jupyterhub + client_secret: jupyterhubjupyterhub + #oauth_callback_url: https://your-jupyterhub-domain/hub/oauth_callback + authorize_url: https://172.19.0.3:31245/realms/jupyterhub/protocol/openid-connect/auth + token_url: https:///172.19.0.3:31245/realms/jupyterhub/protocol/openid-connect/token + userdata_url: https://172.19.0.3:31245/realms/jupyterhub/protocol/openid-connect/userinfo + #login_service: keycloak + username_claim: preferred_username + auth_state_groups_key: "oauth_user.groups" + #userdata_params: + # state: state + #claim_groups_key: roles + manage_groups: True + tls_verify: False + allowed_groups: + - "Notebook Developers" + #admin_groups: + # - admin + scope: + - openid + JupyterHub: + authenticator_class: generic-oauth + proxy: + service: + type: NodePort + rbac: + create: true + prePuller: + hook: + enabled: false + continuous: + enabled: false + scheduling: + userScheduler: + enabled: false + singleuser: + cmd: null + image: + name: jupyter/pyspark-notebook + tag: python-3.11 + serviceAccountName: hub + networkPolicy: + enabled: false + extraLabels: + stackable.tech/vendor: Stackable + storage: + extraVolumes: + - name: notebook + emptyDir: + sizeLimit: 500Mi + extraVolumeMounts: + - name: notebook + mountPath: /home/jovyan/notebook diff --git a/stacks/jupyter-keycloak/keycloak-realm-config.yaml b/stacks/jupyter-keycloak/keycloak-realm-config.yaml index 8ea2a039..c40e1422 100644 --- a/stacks/jupyter-keycloak/keycloak-realm-config.yaml +++ b/stacks/jupyter-keycloak/keycloak-realm-config.yaml @@ -62,12 +62,18 @@ stringData: "notBefore" : 0, "bearerOnly" : false, "serviceAccountsEnabled" : true, + "standardFlowEnabled" : true, "publicClient" : false, "frontchannelLogout" : true, "protocol" : "openid-connect", "attributes" : { + "realm_client" : "false", "oidc.ciba.grant.enabled" : "true", - "oauth2.device.authorization.grant.enabled" : "false" + "backchannel.logout.session.required" : "true", + "post.logout.redirect.uris" : "+", + "oauth2.device.authorization.grant.enabled" : "false", + "display.on.consent.screen" : "false", + "backchannel.logout.revoke.offline.tokens" : "false" }, "authenticationFlowBindingOverrides" : { }, "fullScopeAllowed" : true diff --git a/stacks/stacks-v2.yaml b/stacks/stacks-v2.yaml index 3b21a1db..bcd4b4e0 100644 --- a/stacks/stacks-v2.yaml +++ b/stacks/stacks-v2.yaml @@ -666,11 +666,15 @@ stacks: - plainYaml: stacks/jupyter-keycloak/serviceaccount.yaml - plainYaml: stacks/jupyter-keycloak/keycloak-realm-config.yaml - plainYaml: stacks/jupyter-keycloak/keycloak.yaml + - helmChart: stacks/jupyter-keycloak/jupyterhub.yaml parameters: - name: keycloakAdminPassword description: Password of the Keycloak admin user default: adminadmin + - name: jupyterhubAdminPassword + description: Password for JupyterHub Admin + default: adminadmin - name: keycloakJupyterhubClientSecret description: Secret ID of the Keycloak Jupyterhub client default: jupyterhubjupyterhub From 34fb370e833e5e877f65505cdf876f36b2ed3f67 Mon Sep 17 00:00:00 2001 From: Andrew Kenworthy Date: Tue, 19 Nov 2024 17:56:33 +0100 Subject: [PATCH 03/37] wip --- stacks/jupyter-keycloak/jupyterhub.yaml | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/stacks/jupyter-keycloak/jupyterhub.yaml b/stacks/jupyter-keycloak/jupyterhub.yaml index fe4bd74e..4d54b6bc 100644 --- a/stacks/jupyter-keycloak/jupyterhub.yaml +++ b/stacks/jupyter-keycloak/jupyterhub.yaml @@ -11,22 +11,17 @@ options: GenericOAuthenticator: client_id: jupyterhub client_secret: jupyterhubjupyterhub - #oauth_callback_url: https://your-jupyterhub-domain/hub/oauth_callback + # TODO: How to define this here before Jupyterhub has been deployed? + oauth_callback_url: http://172.19.0.3:32336/hub/oauth_callback authorize_url: https://172.19.0.3:31245/realms/jupyterhub/protocol/openid-connect/auth token_url: https:///172.19.0.3:31245/realms/jupyterhub/protocol/openid-connect/token userdata_url: https://172.19.0.3:31245/realms/jupyterhub/protocol/openid-connect/userinfo - #login_service: keycloak username_claim: preferred_username auth_state_groups_key: "oauth_user.groups" - #userdata_params: - # state: state - #claim_groups_key: roles manage_groups: True tls_verify: False allowed_groups: - "Notebook Developers" - #admin_groups: - # - admin scope: - openid JupyterHub: From 54fc0dcdf53454648297509b39e4e30fd69cbbe4 Mon Sep 17 00:00:00 2001 From: Andrew Kenworthy Date: Fri, 29 Nov 2024 14:35:13 +0100 Subject: [PATCH 04/37] wip: certificates work but callback does not --- stacks/jupyter-keycloak/jupyterhub.yaml | 41 ++++- stacks/jupyter-keycloak/kc.yaml | 165 ++++++++++++++++++ .../keycloak-realm-config.yaml | 4 +- stacks/jupyter-keycloak/keycloak.yaml | 152 ---------------- stacks/stacks-v2.yaml | 3 +- 5 files changed, 205 insertions(+), 160 deletions(-) create mode 100644 stacks/jupyter-keycloak/kc.yaml delete mode 100644 stacks/jupyter-keycloak/keycloak.yaml diff --git a/stacks/jupyter-keycloak/jupyterhub.yaml b/stacks/jupyter-keycloak/jupyterhub.yaml index 4d54b6bc..a5ef8751 100644 --- a/stacks/jupyter-keycloak/jupyterhub.yaml +++ b/stacks/jupyter-keycloak/jupyterhub.yaml @@ -12,10 +12,12 @@ options: client_id: jupyterhub client_secret: jupyterhubjupyterhub # TODO: How to define this here before Jupyterhub has been deployed? - oauth_callback_url: http://172.19.0.3:32336/hub/oauth_callback - authorize_url: https://172.19.0.3:31245/realms/jupyterhub/protocol/openid-connect/auth - token_url: https:///172.19.0.3:31245/realms/jupyterhub/protocol/openid-connect/token - userdata_url: https://172.19.0.3:31245/realms/jupyterhub/protocol/openid-connect/userinfo + #oauth_callback_url: proxy-public:80/hub/oauth_callback + oauth_callback_url: http://proxy-public.default.svc.cluster.local:30687/hub/oauth_callback + # Keycloak URLs: IPs unless we have an ingress, but we need hostnames to match the certificates + authorize_url: https://keycloak.default.svc.cluster.local:32428/realms/jupyterhub/protocol/openid-connect/auth + token_url: https://keycloak.default.svc.cluster.local:32428/realms/jupyterhub/protocol/openid-connect/token + userdata_url: https://keycloak.default.svc.cluster.local:32428/realms/jupyterhub/protocol/openid-connect/userinfo username_claim: preferred_username auth_state_groups_key: "oauth_user.groups" manage_groups: True @@ -24,8 +26,39 @@ options: - "Notebook Developers" scope: - openid + http_client_opts: + verify: "/etc/ssl/certs/keycloak-ca.crt" JupyterHub: authenticator_class: generic-oauth + extraEnv: + SSL_CERT_FILE: /etc/ssl/certs/keycloak-ca.crt #/usr/local/share/ca-certificates/keycloak-ca.crt + REQUESTS_CA_BUNDLE: /etc/ssl/certs/keycloak-ca.crt + CURL_CA_BUNDLE: /etc/ssl/certs/keycloak-ca.crt + extraConfig: + custom_ssl_config: | + import ssl + import tornado.httpclient + from tornado.curl_httpclient import CurlAsyncHTTPClient + + # Set custom CA bundle for tornado's CurlHttpClient + ssl_context = ssl.create_default_context(cafile='/etc/ssl/certs/keycloak-ca.crt') + client = CurlAsyncHTTPClient() + client.configure(None, ssl_options=ssl_context) + # log_level_config: | + # c.Application.log_level = 'DEBUG' + # setSSLVerification: | + # import os + # os.environ["REQUESTS_CA_BUNDLE"] = "/usr/local/share/ca-certificates/keycloak-ca.crt" + # os.environ["CURL_CA_BUNDLE"] = "/usr/local/share/ca-certificates/keycloak-ca.crt" + extraVolumes: + - name: keycloak-tls + secret: + secretName: keycloak-tls-ca-default + extraVolumeMounts: + - name: keycloak-tls + #mountPath: /usr/local/share/ca-certificates/keycloak-ca.crt + mountPath: /etc/ssl/certs/keycloak-ca.crt + subPath: 0.ca.crt proxy: service: type: NodePort diff --git a/stacks/jupyter-keycloak/kc.yaml b/stacks/jupyter-keycloak/kc.yaml new file mode 100644 index 00000000..12cfd5a0 --- /dev/null +++ b/stacks/jupyter-keycloak/kc.yaml @@ -0,0 +1,165 @@ +# The environment variables must be replaced. +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: keycloak-realms +data: + test-realm.json: | + { + "realm": "jupyterhub", + "enabled": true, + "groups" : [ { + "name" : "Notebook Developers", + "path" : "/Notebook Developers", + "subGroups" : [ { + "name" : "Analytics", + "path" : "/Notebook Developers/Analytics" + } ] + } ], + "users": [ + { + "enabled": true, + "username": "dev", + "firstName" : "Dev", + "lastName" : "User", + "email" : "dev@noemail.com", + "credentials": [ + { + "type": "password", + "value": "dev" + } + ], + "realmRoles": [ + "user" + ], + "groups" : [ + "/Notebook Developers/Analytics" + ] + } + ], + "roles": { + "realm": [ + { + "name": "user", + "description": "User privileges" + } + ] + }, + "clients": [ + { + "clientId": "jupyterhub", + "enabled": true, + "clientAuthenticatorType": "client-secret", + "secret": "jupyterhubjupyterhub", + "redirectUris": [ + "*" + ], + "webOrigins": [ + "*" + ], + "standardFlowEnabled": true, + "attributes" : { + "realm_client" : "false", + "oidc.ciba.grant.enabled" : "true", + "backchannel.logout.session.required" : "true", + "post.logout.redirect.uris" : "+", + "oauth2.device.authorization.grant.enabled" : "false", + "display.on.consent.screen" : "false", + "backchannel.logout.revoke.offline.tokens" : "false" + }, + "protocol": "openid-connect" + } + ] + } +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: keycloak + labels: + app: keycloak +spec: + replicas: 1 + selector: + matchLabels: + app: keycloak + template: + metadata: + labels: + app: keycloak + spec: + containers: + - name: keycloak + image: quay.io/keycloak/keycloak:23.0.4 + args: + - start-dev + - --import-realm + - --https-certificate-file=/tls/tls.crt + - --https-certificate-key-file=/tls/tls.key + env: + - name: KEYCLOAK_ADMIN + value: admin + - name: KEYCLOAK_ADMIN_PASSWORD + value: admin + ports: + - name: https + containerPort: 8443 + volumeMounts: + - name: realms + mountPath: /opt/keycloak/data/import + - name: tls + mountPath: /tls + readinessProbe: + httpGet: + path: /realms/master + port: 8443 + scheme: HTTPS + volumes: + - name: realms + configMap: + name: keycloak-realms + - ephemeral: + volumeClaimTemplate: + metadata: + annotations: + secrets.stackable.tech/class: keycloak-tls-default + secrets.stackable.tech/format: tls-pem + secrets.stackable.tech/scope: service=keycloak + spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: "1" + storageClassName: secrets.stackable.tech + volumeMode: Filesystem + name: tls +--- +apiVersion: v1 +kind: Service +metadata: + name: keycloak + labels: + app: keycloak +spec: + type: NodePort + selector: + app: keycloak + ports: + - name: https + port: 8443 + targetPort: 8443 +--- +apiVersion: secrets.stackable.tech/v1alpha1 +kind: SecretClass +metadata: + name: keycloak-tls-default +spec: + backend: + autoTls: + ca: + autoGenerate: true + secret: + name: keycloak-tls-ca-default # should be available for jupyterhub + namespace: default diff --git a/stacks/jupyter-keycloak/keycloak-realm-config.yaml b/stacks/jupyter-keycloak/keycloak-realm-config.yaml index c40e1422..15c1191f 100644 --- a/stacks/jupyter-keycloak/keycloak-realm-config.yaml +++ b/stacks/jupyter-keycloak/keycloak-realm-config.yaml @@ -5,7 +5,7 @@ metadata: name: jupyterhub-client-credentials stringData: clientId: jupyterhub - clientSecret: {{ keycloakJupyterhubClientSecret }} + clientSecret: jupyterhubjupyterhub #{{ keycloakJupyterhubClientSecret }} --- apiVersion: v1 kind: Secret @@ -56,7 +56,7 @@ stringData: "enabled" : true, "alwaysDisplayInConsole" : true, "clientAuthenticatorType" : "client-secret", - "secret" : "{{ keycloakJupyterhubClientSecret }}", + "secret" : "jupyterhubjupyterhub", "redirectUris" : [ "*" ], "webOrigins" : [ "*" ], "notBefore" : 0, diff --git a/stacks/jupyter-keycloak/keycloak.yaml b/stacks/jupyter-keycloak/keycloak.yaml deleted file mode 100644 index 6eeb81ae..00000000 --- a/stacks/jupyter-keycloak/keycloak.yaml +++ /dev/null @@ -1,152 +0,0 @@ ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: keycloak - labels: - app: keycloak -spec: - replicas: 1 - selector: - matchLabels: - app: keycloak - template: - metadata: - labels: - app: keycloak - spec: - containers: - - name: keycloak - image: quay.io/keycloak/keycloak:26.0.5 - args: - - start - - --hostname-strict=false - - --https-key-store-file=/tls/keystore.p12 - - --https-key-store-password=changeit - - --import-realm - env: - - name: KEYCLOAK_ADMIN - value: admin - - name: KEYCLOAK_ADMIN_PASSWORD - valueFrom: - secretKeyRef: - name: keycloak-admin-credentials - key: admin - ports: - - name: https - containerPort: 8443 - readinessProbe: - httpGet: - scheme: HTTPS - path: /realms/master - port: https - volumeMounts: - - name: data - mountPath: /opt/keycloak/data/ - - name: realm-config - mountPath: /opt/keycloak/data/import - - name: tls - mountPath: /tls/ - - name: create-auth-class - image: docker.stackable.tech/stackable/testing-tools:0.2.0-stackable24.7.0 - command: ["/bin/bash", "-c"] - args: - - | - pid= - trap 'echo SIGINT; [[ $pid ]] && kill $pid; exit' SIGINT - trap 'echo SIGTERM; [[ $pid ]] && kill $pid; exit' SIGTERM - - while : - do - echo "Determining Keycloak public reachable address" - KEYCLOAK_ADDRESS=$(kubectl get svc keycloak -o json | jq -r --argfile endpoints <(kubectl get endpoints keycloak -o json) --argfile nodes <(kubectl get nodes -o json) '($nodes.items[] | select(.metadata.name == $endpoints.subsets[].addresses[].nodeName) | .status.addresses | map(select(.type == "ExternalIP" or .type == "InternalIP")) | min_by(.type) | .address | tostring) + ":" + (.spec.ports[] | select(.name == "https") | .nodePort | tostring)') - echo "Found Keycloak running at $KEYCLOAK_ADDRESS" - - if [ ! -z "$KEYCLOAK_ADDRESS" ]; then - KEYCLOAK_HOSTNAME="$(echo $KEYCLOAK_ADDRESS | grep -oP '^[^:]+')" - KEYCLOAK_PORT="$(echo $KEYCLOAK_ADDRESS | grep -oP '[0-9]+$')" - - cat << EOF | kubectl apply -f - - apiVersion: authentication.stackable.tech/v1alpha1 - kind: AuthenticationClass - metadata: - name: keycloak - spec: - provider: - oidc: - hostname: "$KEYCLOAK_HOSTNAME" - port: $KEYCLOAK_PORT - rootPath: /realms/demo - scopes: [openid] - principalClaim: preferred_username - tls: - verification: - server: - caCert: - secretClass: tls - EOF - fi - - sleep 30 & pid=$! - wait - done - securityContext: - fsGroup: 1000 - runAsGroup: 1000 - runAsUser: 1000 - volumes: - - name: data - persistentVolumeClaim: - claimName: keycloak-data - - name: realm-config - secret: - secretName: keycloak-realm-config - - name: tls - ephemeral: - volumeClaimTemplate: - metadata: - annotations: - secrets.stackable.tech/class: tls - secrets.stackable.tech/format: tls-pkcs12 - secrets.stackable.tech/format.compatibility.tls-pkcs12.password: changeit - secrets.stackable.tech/scope: service=keycloak,node - spec: - storageClassName: secrets.stackable.tech - accessModes: - - ReadWriteOnce - resources: - requests: - storage: "1" - serviceAccountName: keycloak-serviceaccount ---- -apiVersion: v1 -kind: Service -metadata: - name: keycloak - labels: - app: keycloak -spec: - type: NodePort - selector: - app: keycloak - ports: - - name: https - port: 8443 - targetPort: 8443 ---- -apiVersion: v1 -kind: PersistentVolumeClaim -metadata: - name: keycloak-data -spec: - accessModes: [ReadWriteOnce] - resources: - requests: - storage: 1Gi ---- -apiVersion: v1 -kind: Secret -metadata: - name: keycloak-admin-credentials -stringData: - admin: "{{ keycloakAdminPassword }}" diff --git a/stacks/stacks-v2.yaml b/stacks/stacks-v2.yaml index bcd4b4e0..68464ac6 100644 --- a/stacks/stacks-v2.yaml +++ b/stacks/stacks-v2.yaml @@ -666,8 +666,7 @@ stacks: - plainYaml: stacks/jupyter-keycloak/serviceaccount.yaml - plainYaml: stacks/jupyter-keycloak/keycloak-realm-config.yaml - plainYaml: stacks/jupyter-keycloak/keycloak.yaml - - helmChart: stacks/jupyter-keycloak/jupyterhub.yaml - + #- helmChart: stacks/jupyter-keycloak/jupyterhub.yaml parameters: - name: keycloakAdminPassword description: Password of the Keycloak admin user From ae34b6a7cc2e615677bd5b72ec7b652ca7343709 Mon Sep 17 00:00:00 2001 From: Andrew Kenworthy Date: Thu, 9 Jan 2025 15:25:37 +0100 Subject: [PATCH 05/37] wip: various tweaks --- stacks/jupyter-keycloak/jupyterhub.yaml | 54 +++++++++-------- stacks/jupyter-keycloak/kc.yaml | 58 ++++++++----------- .../keycloak-realm-config.yaml | 56 ++---------------- stacks/stacks-v2.yaml | 6 +- 4 files changed, 61 insertions(+), 113 deletions(-) diff --git a/stacks/jupyter-keycloak/jupyterhub.yaml b/stacks/jupyter-keycloak/jupyterhub.yaml index a5ef8751..3e4645f8 100644 --- a/stacks/jupyter-keycloak/jupyterhub.yaml +++ b/stacks/jupyter-keycloak/jupyterhub.yaml @@ -11,39 +11,39 @@ options: GenericOAuthenticator: client_id: jupyterhub client_secret: jupyterhubjupyterhub - # TODO: How to define this here before Jupyterhub has been deployed? - #oauth_callback_url: proxy-public:80/hub/oauth_callback - oauth_callback_url: http://proxy-public.default.svc.cluster.local:30687/hub/oauth_callback + oauth_callback_url: http://proxy-public.default.svc.cluster.local:31095/hub/oauth_callback # Keycloak URLs: IPs unless we have an ingress, but we need hostnames to match the certificates - authorize_url: https://keycloak.default.svc.cluster.local:32428/realms/jupyterhub/protocol/openid-connect/auth - token_url: https://keycloak.default.svc.cluster.local:32428/realms/jupyterhub/protocol/openid-connect/token - userdata_url: https://keycloak.default.svc.cluster.local:32428/realms/jupyterhub/protocol/openid-connect/userinfo + authorize_url: https://keycloak.default.svc.cluster.local:31093/realms/jupyterhub/protocol/openid-connect/auth + token_url: https://keycloak.default.svc.cluster.local:31093/realms/jupyterhub/protocol/openid-connect/token + userdata_url: https://keycloak.default.svc.cluster.local:31093/realms/jupyterhub/protocol/openid-connect/userinfo username_claim: preferred_username - auth_state_groups_key: "oauth_user.groups" - manage_groups: True + #auth_state_groups_key: "oauth_user.groups" + #manage_groups: True tls_verify: False - allowed_groups: - - "Notebook Developers" + #allowed_groups: + # - "Notebook Developers" scope: - openid - http_client_opts: - verify: "/etc/ssl/certs/keycloak-ca.crt" + #ca_certs: None + enable_pkce: False JupyterHub: authenticator_class: generic-oauth + log_level: 'DEBUG' extraEnv: SSL_CERT_FILE: /etc/ssl/certs/keycloak-ca.crt #/usr/local/share/ca-certificates/keycloak-ca.crt REQUESTS_CA_BUNDLE: /etc/ssl/certs/keycloak-ca.crt CURL_CA_BUNDLE: /etc/ssl/certs/keycloak-ca.crt - extraConfig: - custom_ssl_config: | - import ssl - import tornado.httpclient - from tornado.curl_httpclient import CurlAsyncHTTPClient + #OAUTH_TLS_VERIFY: "False" + #extraConfig: + #custom_ssl_config: | + # import ssl + # import tornado.httpclient + # from tornado.curl_httpclient import CurlAsyncHTTPClient - # Set custom CA bundle for tornado's CurlHttpClient - ssl_context = ssl.create_default_context(cafile='/etc/ssl/certs/keycloak-ca.crt') - client = CurlAsyncHTTPClient() - client.configure(None, ssl_options=ssl_context) + # # Set custom CA bundle for tornado's CurlHttpClient + # ssl_context = ssl.create_default_context(cafile='/etc/ssl/certs/keycloak-ca.crt') + # client = CurlAsyncHTTPClient() + # client.configure(None, ssl_options=ssl_context) # log_level_config: | # c.Application.log_level = 'DEBUG' # setSSLVerification: | @@ -59,9 +59,13 @@ options: #mountPath: /usr/local/share/ca-certificates/keycloak-ca.crt mountPath: /etc/ssl/certs/keycloak-ca.crt subPath: 0.ca.crt + service: + type: NodePort proxy: service: type: NodePort + nodePorts: + http: 31095 rbac: create: true prePuller: @@ -74,10 +78,10 @@ options: enabled: false singleuser: cmd: null - image: - name: jupyter/pyspark-notebook - tag: python-3.11 - serviceAccountName: hub + #image: + # name: jupyter/pyspark-notebook + # tag: python-3.11 + #serviceAccountName: hub networkPolicy: enabled: false extraLabels: diff --git a/stacks/jupyter-keycloak/kc.yaml b/stacks/jupyter-keycloak/kc.yaml index 12cfd5a0..c9766c0e 100644 --- a/stacks/jupyter-keycloak/kc.yaml +++ b/stacks/jupyter-keycloak/kc.yaml @@ -9,14 +9,7 @@ data: { "realm": "jupyterhub", "enabled": true, - "groups" : [ { - "name" : "Notebook Developers", - "path" : "/Notebook Developers", - "subGroups" : [ { - "name" : "Analytics", - "path" : "/Notebook Developers/Analytics" - } ] - } ], + "groups" : [], "users": [ { "enabled": true, @@ -29,23 +22,9 @@ data: "type": "password", "value": "dev" } - ], - "realmRoles": [ - "user" - ], - "groups" : [ - "/Notebook Developers/Analytics" ] } ], - "roles": { - "realm": [ - { - "name": "user", - "description": "User privileges" - } - ] - }, "clients": [ { "clientId": "jupyterhub", @@ -59,15 +38,7 @@ data: "*" ], "standardFlowEnabled": true, - "attributes" : { - "realm_client" : "false", - "oidc.ciba.grant.enabled" : "true", - "backchannel.logout.session.required" : "true", - "post.logout.redirect.uris" : "+", - "oauth2.device.authorization.grant.enabled" : "false", - "display.on.consent.screen" : "false", - "backchannel.logout.revoke.offline.tokens" : "false" - }, + "serviceAccountsEnabled" : true, "protocol": "openid-connect" } ] @@ -97,14 +68,18 @@ spec: - --import-realm - --https-certificate-file=/tls/tls.crt - --https-certificate-key-file=/tls/tls.key + - --log-level=DEBUG env: - name: KEYCLOAK_ADMIN value: admin - name: KEYCLOAK_ADMIN_PASSWORD value: admin + - name: KEYCLOAK_LOGLEVEL + value: DEBUG ports: - name: https containerPort: 8443 + resources: {} volumeMounts: - name: realms mountPath: /opt/keycloak/data/import @@ -115,6 +90,7 @@ spec: path: /realms/master port: 8443 scheme: HTTPS + serviceAccountName: keycloak-serviceaccount volumes: - name: realms configMap: @@ -125,7 +101,7 @@ spec: annotations: secrets.stackable.tech/class: keycloak-tls-default secrets.stackable.tech/format: tls-pem - secrets.stackable.tech/scope: service=keycloak + secrets.stackable.tech/scope: service=keycloak,service=keycloak-external spec: accessModes: - ReadWriteOnce @@ -143,7 +119,7 @@ metadata: labels: app: keycloak spec: - type: NodePort + type: ClusterIP selector: app: keycloak ports: @@ -151,6 +127,22 @@ spec: port: 8443 targetPort: 8443 --- +apiVersion: v1 +kind: Service +metadata: + name: keycloak-external + labels: + app: keycloak +spec: + type: NodePort + selector: + app: keycloak + ports: + - name: https + port: 8443 + targetPort: 8443 + nodePort: 31093 +--- apiVersion: secrets.stackable.tech/v1alpha1 kind: SecretClass metadata: diff --git a/stacks/jupyter-keycloak/keycloak-realm-config.yaml b/stacks/jupyter-keycloak/keycloak-realm-config.yaml index 15c1191f..dadc1841 100644 --- a/stacks/jupyter-keycloak/keycloak-realm-config.yaml +++ b/stacks/jupyter-keycloak/keycloak-realm-config.yaml @@ -18,64 +18,16 @@ stringData: { "realm" : "jupyterhub", "enabled" : true, - "groups" : [ { - "name" : "Notebook Developers", - "path" : "/Notebook Developers", - "subGroups" : [ { - "name" : "Analytics", - "path" : "/Notebook Developers/Analytics" - } ] - } ], - "users" : [ { - "id" : "e44a09fa-bce1-40e8-a1da-28902b79dcf0", - "createdTimestamp" : 1711375603780, - "username" : "dev.user", - "enabled" : true, - "totp" : false, - "emailVerified" : true, - "firstName" : "Developer", - "lastName" : "User", - "email" : "dev.user@dummymail.com", - "credentials" : [ { - "id" : "77343b9c-661e-4f04-8ea3-c4dd7f86abde", - "type" : "password", - "userLabel" : "My password", - "createdDate" : 1711375610955, - "secretData" : "{\"value\":\"jNVzthZCkPipHW1KHZCncU/G/DHc+5QqmGEKernet5E=\",\"salt\":\"7woqv8IPicuA0cpa3U6dEg==\",\"additionalParameters\":{}}", - "credentialData" : "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\",\"additionalParameters\":{}}" - } ], - "disableableCredentialTypes" : [ ], - "requiredActions" : [ ], - "realmRoles" : [ "default-roles-jupyterhub" ], - "notBefore" : 0, - "groups" : [ "/Notebook Developers/Analytics" ] - } ], + "groups" : [], + "users" : [], "clients" : [ { "clientId" : "jupyterhub", - "surrogateAuthRequired" : false, "enabled" : true, - "alwaysDisplayInConsole" : true, + "protocol" : "openid-connect", "clientAuthenticatorType" : "client-secret", "secret" : "jupyterhubjupyterhub", "redirectUris" : [ "*" ], "webOrigins" : [ "*" ], - "notBefore" : 0, - "bearerOnly" : false, - "serviceAccountsEnabled" : true, - "standardFlowEnabled" : true, - "publicClient" : false, - "frontchannelLogout" : true, - "protocol" : "openid-connect", - "attributes" : { - "realm_client" : "false", - "oidc.ciba.grant.enabled" : "true", - "backchannel.logout.session.required" : "true", - "post.logout.redirect.uris" : "+", - "oauth2.device.authorization.grant.enabled" : "false", - "display.on.consent.screen" : "false", - "backchannel.logout.revoke.offline.tokens" : "false" - }, - "authenticationFlowBindingOverrides" : { }, - "fullScopeAllowed" : true + "standardFlowEnabled" : true } ] } diff --git a/stacks/stacks-v2.yaml b/stacks/stacks-v2.yaml index 68464ac6..448f2f26 100644 --- a/stacks/stacks-v2.yaml +++ b/stacks/stacks-v2.yaml @@ -663,9 +663,9 @@ stacks: memory: 9010Mi pvc: 24Gi manifests: - - plainYaml: stacks/jupyter-keycloak/serviceaccount.yaml - - plainYaml: stacks/jupyter-keycloak/keycloak-realm-config.yaml - - plainYaml: stacks/jupyter-keycloak/keycloak.yaml + #- plainYaml: stacks/jupyter-keycloak/serviceaccount.yaml + #- plainYaml: stacks/jupyter-keycloak/keycloak-realm-config.yaml + - plainYaml: stacks/jupyter-keycloak/kc.yaml #- helmChart: stacks/jupyter-keycloak/jupyterhub.yaml parameters: - name: keycloakAdminPassword From 34c138dd02718059240c5a31c4600d0a1653eb46 Mon Sep 17 00:00:00 2001 From: Andrew Kenworthy Date: Wed, 15 Jan 2025 12:53:53 +0100 Subject: [PATCH 06/37] added some temp docs --- stacks/jupyter-keycloak/README.md | 72 +++++++++++++++++++++++++ stacks/jupyter-keycloak/jupyterhub.yaml | 20 ++++++- 2 files changed, 90 insertions(+), 2 deletions(-) create mode 100644 stacks/jupyter-keycloak/README.md diff --git a/stacks/jupyter-keycloak/README.md b/stacks/jupyter-keycloak/README.md new file mode 100644 index 00000000..d42b61f1 --- /dev/null +++ b/stacks/jupyter-keycloak/README.md @@ -0,0 +1,72 @@ +# Setup + +```shell +# cd ~//demos +# and then:- +# deploy kc etc. + +stackablectl op in secret commons listener +kubectl apply -f stacks/jupyter-keycloak/serviceaccount.yaml +kubectl apply -f stacks/jupyter-keycloak/kc.yaml + +# deploy jhub by extracting the values from the jupyterhub.yaml + +export TARGET_FILE=stacks/jupyter-keycloak/jupyterhub.yaml +helm upgrade --install $(yq '.releaseName' $TARGET_FILE) $(yq '.name' $TARGET_FILE) --repo $(yq '.repo.url' $TARGET_FILE) --version $(yq '.version' $TARGET_FILE) -f <(yq '.options' $TARGET_FILE) + +# check token retrieval + +HUB_POD=$(kubectl -n default get pod -l app=jupyterhub,component=hub -o name | head -n 1 | sed -e 's#pod/##') +kubectl exec -it $HUB_POD -- curl -v -X POST -d "grant_type=client_credentials&client_id=jupyterhub&client_secret=jupyterhubjupyterhub" https://keycloak.default.svc.cluster.local:8443/realms/jupyterhub/protocol/openid-connect/token + +# start port forward (for local testing) + +kubectl port-forward svc/keycloak-external 31093:8443 +``` + +## Navigate to + +```shell +http://proxy-public.default.svc.cluster.local:31095 +``` + +and log in. + +This currently fails with: + +```log +[I 2025-01-09 10:00:08.661 JupyterHub _xsrf_utils:125] Setting new xsrf cookie for b'None:65hjvV7aYFWnijeJzYqo99ftO7ruoYCNaCuJWSUAF6k=' {'path': '/hub/', 'max_age': 3600} +[I 2025-01-09 10:00:08.682 JupyterHub log:192] 200 GET /hub/login?next=%2Fhub%2F (@::ffff:10.244.0.1) 20.92ms +[I 2025-01-09 10:00:15.712 JupyterHub oauth2:127] OAuth redirect: http://proxy-public.default.svc.cluster.local:31095/hub/oauth_callback +[I 2025-01-09 10:00:15.712 JupyterHub log:192] 302 GET /hub/oauth_login?next=%2Fhub%2F -> https://keycloak.default.svc.cluster.local:31093/realms/jupyterhub/protocol/openid-connect/auth?response_type=code&redirect_uri=http%3A%2F%2Fproxy-public.default.svc.cluster.local%3A31095%2Fhub%2Foauth_callback&client_id=jupyterhub&code_challenge=[secret]&code_challenge_method=[secret]&state=[secret]&scope=openid (@::ffff:10.244.0.1) 0.83ms +[E 2025-01-09 10:00:42.674 JupyterHub oauth2:832] Error fetching 599 POST https://keycloak.default.svc.cluster.local:31093/realms/jupyterhub/protocol/openid-connect/token: HTTP 599: Connection timed out after 20000 milliseconds +[E 2025-01-09 10:00:42.674 JupyterHub web:1875] Uncaught exception GET /hub/oauth_callback?state=...=https%3A%2F%2Fkeycloak.default.svc.cluster.local%3A31093%2Frealms%2Fjupyterhub&code=... (::ffff:10.244.0.1) + HTTPServerRequest(protocol='http', host='proxy-public.default.svc.cluster.local:31095', method='GET', uri='/hub/oauth_callback?state=eyJzdGF0ZV9pZCI6ICIyMTY2NTkwNzg0ZTA0OGYxYjAwNzA4NGNiZTE4NGRiMyJ9&session_state=375571c5-84ce-46eb-a52f-a0a0794b347e&iss=https%3A%2F%2Fkeycloak.default.svc.cluster.local%3A31093%2Frealms%2Fjupyterhub&code=8a544009-5f75-4cbd-991a-7e5de8e9dea5.375571c5-84ce-46eb-a52f-a0a0794b347e.9d285994-c31c-43e6-a11c-e3e27b2bdc62', version='HTTP/1.1', remote_ip='::ffff:10.244.0.1') + Traceback (most recent call last): + File "/usr/local/lib/python3.12/site-packages/tornado/web.py", line 1790, in _execute + result = await result + ^^^^^^^^^^^^ +... + File "/usr/local/lib/python3.12/site-packages/oauthenticator/oauth2.py", line 812, in fetch + resp = await self.http_client.fetch(req, **kwargs) + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + tornado.curl_httpclient.CurlError: HTTP 599: Connection timed out after 20000 milliseconds + +[E 2025-01-09 10:00:42.691 JupyterHub log:184] { + "X-Forwarded-Host": "proxy-public.default.svc.cluster.local:31095", + "X-Forwarded-Proto": "http", + "X-Forwarded-Port": "31095", + "X-Forwarded-For": "::ffff:10.244.0.1", + "Cookie": "_xsrf=[secret]; oauthenticator-state=[secret]", + "Accept-Encoding": "gzip, deflate", + "Accept-Language": "en-GB-oxendict,en;q=0.5", + "Sec-Gpc": "1", + "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8", + "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36", + "Upgrade-Insecure-Requests": "1", + "Cache-Control": "max-age=0", + "Connection": "keep-alive", + "Host": "proxy-public.default.svc.cluster.local:31095" + } +[E 2025-01-09 10:00:42.691 JupyterHub log:192] 500 GET /hub/oauth_callback?state=[secret]&session_state=[secret]&iss=https%3A%2F%2Fkeycloak.default.svc.cluster.local%3A31093%2Frealms%2Fjupyterhub&code=[secret] (@::ffff:10.244.0.1) 20019.81ms +``` diff --git a/stacks/jupyter-keycloak/jupyterhub.yaml b/stacks/jupyter-keycloak/jupyterhub.yaml index 3e4645f8..35f2adbb 100644 --- a/stacks/jupyter-keycloak/jupyterhub.yaml +++ b/stacks/jupyter-keycloak/jupyterhub.yaml @@ -19,7 +19,7 @@ options: username_claim: preferred_username #auth_state_groups_key: "oauth_user.groups" #manage_groups: True - tls_verify: False + tls_ca_path: /etc/ssl/certs/keycloak-ca.crt #allowed_groups: # - "Notebook Developers" scope: @@ -61,11 +61,27 @@ options: subPath: 0.ca.crt service: type: NodePort + networkPolicy: + enabled: true + egress: + - to: + - podSelector: + matchLabels: + app: keycloak + ports: + - protocol: TCP + port: 8443 proxy: service: type: NodePort nodePorts: http: 31095 + chp: + networkPolicy: + enabled: true + traefik: + networkPolicy: + enabled: true rbac: create: true prePuller: @@ -83,7 +99,7 @@ options: # tag: python-3.11 #serviceAccountName: hub networkPolicy: - enabled: false + enabled: true extraLabels: stackable.tech/vendor: Stackable storage: From 05ad6d6cce039be42de16e220b31e935e25d2cdb Mon Sep 17 00:00:00 2001 From: Andrew Kenworthy Date: Wed, 15 Jan 2025 14:34:06 +0100 Subject: [PATCH 07/37] add login info --- stacks/jupyter-keycloak/README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/stacks/jupyter-keycloak/README.md b/stacks/jupyter-keycloak/README.md index d42b61f1..009d22b1 100644 --- a/stacks/jupyter-keycloak/README.md +++ b/stacks/jupyter-keycloak/README.md @@ -30,7 +30,11 @@ kubectl port-forward svc/keycloak-external 31093:8443 http://proxy-public.default.svc.cluster.local:31095 ``` -and log in. +and log in as + +```shell +dev/dev +``` This currently fails with: From e16da8ca4d9dacae347766e0f69bf143d2543bd5 Mon Sep 17 00:00:00 2001 From: Andrew Kenworthy Date: Tue, 11 Feb 2025 09:55:42 +0100 Subject: [PATCH 08/37] added some readme info --- stacks/jupyter-keycloak/README.md | 103 ++++++++++++++---------- stacks/jupyter-keycloak/in.yaml | 26 ++++++ stacks/jupyter-keycloak/jupyterhub.yaml | 14 ++-- stacks/jupyter-keycloak/kc.yaml | 3 +- 4 files changed, 94 insertions(+), 52 deletions(-) create mode 100644 stacks/jupyter-keycloak/in.yaml diff --git a/stacks/jupyter-keycloak/README.md b/stacks/jupyter-keycloak/README.md index 009d22b1..8d257218 100644 --- a/stacks/jupyter-keycloak/README.md +++ b/stacks/jupyter-keycloak/README.md @@ -1,5 +1,35 @@ # Setup +Create an ingress-enabled KinD cluster: + +```shell +# create a kind cluster N.B. with ingress-ready=true +cat </demos # and then:- @@ -8,20 +38,15 @@ stackablectl op in secret commons listener kubectl apply -f stacks/jupyter-keycloak/serviceaccount.yaml kubectl apply -f stacks/jupyter-keycloak/kc.yaml +kubectl apply -f stacks/jupyter-keycloak/in.yaml # deploy jhub by extracting the values from the jupyterhub.yaml - export TARGET_FILE=stacks/jupyter-keycloak/jupyterhub.yaml helm upgrade --install $(yq '.releaseName' $TARGET_FILE) $(yq '.name' $TARGET_FILE) --repo $(yq '.repo.url' $TARGET_FILE) --version $(yq '.version' $TARGET_FILE) -f <(yq '.options' $TARGET_FILE) # check token retrieval - HUB_POD=$(kubectl -n default get pod -l app=jupyterhub,component=hub -o name | head -n 1 | sed -e 's#pod/##') kubectl exec -it $HUB_POD -- curl -v -X POST -d "grant_type=client_credentials&client_id=jupyterhub&client_secret=jupyterhubjupyterhub" https://keycloak.default.svc.cluster.local:8443/realms/jupyterhub/protocol/openid-connect/token - -# start port forward (for local testing) - -kubectl port-forward svc/keycloak-external 31093:8443 ``` ## Navigate to @@ -36,41 +61,33 @@ and log in as dev/dev ``` -This currently fails with: - -```log -[I 2025-01-09 10:00:08.661 JupyterHub _xsrf_utils:125] Setting new xsrf cookie for b'None:65hjvV7aYFWnijeJzYqo99ftO7ruoYCNaCuJWSUAF6k=' {'path': '/hub/', 'max_age': 3600} -[I 2025-01-09 10:00:08.682 JupyterHub log:192] 200 GET /hub/login?next=%2Fhub%2F (@::ffff:10.244.0.1) 20.92ms -[I 2025-01-09 10:00:15.712 JupyterHub oauth2:127] OAuth redirect: http://proxy-public.default.svc.cluster.local:31095/hub/oauth_callback -[I 2025-01-09 10:00:15.712 JupyterHub log:192] 302 GET /hub/oauth_login?next=%2Fhub%2F -> https://keycloak.default.svc.cluster.local:31093/realms/jupyterhub/protocol/openid-connect/auth?response_type=code&redirect_uri=http%3A%2F%2Fproxy-public.default.svc.cluster.local%3A31095%2Fhub%2Foauth_callback&client_id=jupyterhub&code_challenge=[secret]&code_challenge_method=[secret]&state=[secret]&scope=openid (@::ffff:10.244.0.1) 0.83ms -[E 2025-01-09 10:00:42.674 JupyterHub oauth2:832] Error fetching 599 POST https://keycloak.default.svc.cluster.local:31093/realms/jupyterhub/protocol/openid-connect/token: HTTP 599: Connection timed out after 20000 milliseconds -[E 2025-01-09 10:00:42.674 JupyterHub web:1875] Uncaught exception GET /hub/oauth_callback?state=...=https%3A%2F%2Fkeycloak.default.svc.cluster.local%3A31093%2Frealms%2Fjupyterhub&code=... (::ffff:10.244.0.1) - HTTPServerRequest(protocol='http', host='proxy-public.default.svc.cluster.local:31095', method='GET', uri='/hub/oauth_callback?state=eyJzdGF0ZV9pZCI6ICIyMTY2NTkwNzg0ZTA0OGYxYjAwNzA4NGNiZTE4NGRiMyJ9&session_state=375571c5-84ce-46eb-a52f-a0a0794b347e&iss=https%3A%2F%2Fkeycloak.default.svc.cluster.local%3A31093%2Frealms%2Fjupyterhub&code=8a544009-5f75-4cbd-991a-7e5de8e9dea5.375571c5-84ce-46eb-a52f-a0a0794b347e.9d285994-c31c-43e6-a11c-e3e27b2bdc62', version='HTTP/1.1', remote_ip='::ffff:10.244.0.1') - Traceback (most recent call last): - File "/usr/local/lib/python3.12/site-packages/tornado/web.py", line 1790, in _execute - result = await result - ^^^^^^^^^^^^ -... - File "/usr/local/lib/python3.12/site-packages/oauthenticator/oauth2.py", line 812, in fetch - resp = await self.http_client.fetch(req, **kwargs) - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - tornado.curl_httpclient.CurlError: HTTP 599: Connection timed out after 20000 milliseconds - -[E 2025-01-09 10:00:42.691 JupyterHub log:184] { - "X-Forwarded-Host": "proxy-public.default.svc.cluster.local:31095", - "X-Forwarded-Proto": "http", - "X-Forwarded-Port": "31095", - "X-Forwarded-For": "::ffff:10.244.0.1", - "Cookie": "_xsrf=[secret]; oauthenticator-state=[secret]", - "Accept-Encoding": "gzip, deflate", - "Accept-Language": "en-GB-oxendict,en;q=0.5", - "Sec-Gpc": "1", - "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8", - "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36", - "Upgrade-Insecure-Requests": "1", - "Cache-Control": "max-age=0", - "Connection": "keep-alive", - "Host": "proxy-public.default.svc.cluster.local:31095" - } -[E 2025-01-09 10:00:42.691 JupyterHub log:192] 500 GET /hub/oauth_callback?state=[secret]&session_state=[secret]&iss=https%3A%2F%2Fkeycloak.default.svc.cluster.local%3A31093%2Frealms%2Fjupyterhub&code=[secret] (@::ffff:10.244.0.1) 20019.81ms +Other checks: + +```shell +# check the actual auth handshake, by trying to login and then adding code found in the browser URL: +HUB_POD=$(kubectl -n default get pod -l app=jupyterhub,component=hub -o name | head -n 1 | sed -e 's#pod/##') +URLCODE=339f2de3-03be-4a81-b8bc-7bcaf6babc59.0302eaa2-8cae-4e22-a35a-abd7b35e2c4c.1f7d09f0-2b6f-4c1f-83f4-86dceabe0199 +kubectl exec -it $HUB_POD -- curl -v -X POST \ + -H "Content-Type: application/x-www-form-urlencoded" \ + -d "grant_type=authorization_code&code=$URLCODE&redirect_uri=http://proxy-public.default.svc.cluster.local:31095/hub/oauth_callback&client_id=jupyterhub&client_secret=jupyterhubjupyterhub" \ + https://keycloak.default.svc.cluster.local:8443/realms/jupyterhub/protocol/openid-connect/token + +# Check the user-info is returnable: +HUB_POD=$(kubectl -n default get pod -l app=jupyterhub,component=hub -o name | head -n 1 | sed -e 's#pod/##') +# Get the access token +TOKEN=$(kubectl exec -it $HUB_POD -- curl -s -d "grant_type=client_credentials&client_id=jupyterhub&client_secret=jupyterhubjupyterhub&scope=openid" https://keycloak.default.svc.cluster.local:8443/realms/jupyterhub/protocol/openid-connect/token | jq -r .access_token) +# Pass the token into the pod and use it in the curl command +kubectl exec -it $HUB_POD -- bash -c "curl -v -H \"Authorization: Bearer $TOKEN\" https://keycloak.default.svc.cluster.local:8443/realms/jupyterhub/protocol/openid-connect/userinfo" + +# should return something like: +# {"sub":"a391bb10-bb56-4b87-a6a0-f8e7e9ea8231","email_verified":false,"preferred_username":"service-account-jupyterhub"} + +# and for the user dev: +HUB_POD=$(kubectl -n default get pod -l app=jupyterhub,component=hub -o name | head -n 1 | sed -e 's#pod/##') +# Get the access token for the user 'dev' using the password grant +TOKEN=$(kubectl exec -it $HUB_POD -- curl -s -d "grant_type=password&client_id=jupyterhub&client_secret=jupyterhubjupyterhub&username=dev&password=dev&scope=openid" https://keycloak.default.svc.cluster.local:8443/realms/jupyterhub/protocol/openid-connect/token | jq -r .access_token) +# Pass the token into the pod and use it in the curl command +kubectl exec -it $HUB_POD -- bash -c "curl -v -H \"Authorization: Bearer $TOKEN\" https://keycloak.default.svc.cluster.local:8443/realms/jupyterhub/protocol/openid-connect/userinfo" + +# {"sub":"c88186dc-5777-4401-820b-467f841073bb","email_verified":false,"name":"Dev User","preferred_username":"dev","given_name":"Dev","family_name":"User","email":"dev@noemail.com"} ``` diff --git a/stacks/jupyter-keycloak/in.yaml b/stacks/jupyter-keycloak/in.yaml new file mode 100644 index 00000000..a0853383 --- /dev/null +++ b/stacks/jupyter-keycloak/in.yaml @@ -0,0 +1,26 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: keycloak-ingress + annotations: + kubernetes.io/ingress.class: nginx + nginx.ingress.kubernetes.io/ssl-passthrough: "true" + nginx.ingress.kubernetes.io/backend-protocol: "HTTPS" + # If you're using cert-manager, you can add annotations for automatic TLS + # cert-manager.io/cluster-issuer: "letsencrypt-prod" +spec: + tls: + - hosts: + - jupyterhub-keycloak.demo.com + secretName: keycloak-tls-default + rules: + - host: jupyterhub-keycloak.demo.com + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: keycloak-external + port: + number: 8443 diff --git a/stacks/jupyter-keycloak/jupyterhub.yaml b/stacks/jupyter-keycloak/jupyterhub.yaml index 35f2adbb..9250f570 100644 --- a/stacks/jupyter-keycloak/jupyterhub.yaml +++ b/stacks/jupyter-keycloak/jupyterhub.yaml @@ -12,23 +12,21 @@ options: client_id: jupyterhub client_secret: jupyterhubjupyterhub oauth_callback_url: http://proxy-public.default.svc.cluster.local:31095/hub/oauth_callback - # Keycloak URLs: IPs unless we have an ingress, but we need hostnames to match the certificates - authorize_url: https://keycloak.default.svc.cluster.local:31093/realms/jupyterhub/protocol/openid-connect/auth - token_url: https://keycloak.default.svc.cluster.local:31093/realms/jupyterhub/protocol/openid-connect/token - userdata_url: https://keycloak.default.svc.cluster.local:31093/realms/jupyterhub/protocol/openid-connect/userinfo + authorize_url: https://jupyterhub-keycloak.demo.com/realms/jupyterhub/protocol/openid-connect/auth # see ingress + token_url: https://keycloak.default.svc.cluster.local:8443/realms/jupyterhub/protocol/openid-connect/token + userdata_url: https://keycloak.default.svc.cluster.local:8443/realms/jupyterhub/protocol/openid-connect/userinfo # needed? username_claim: preferred_username - #auth_state_groups_key: "oauth_user.groups" - #manage_groups: True tls_ca_path: /etc/ssl/certs/keycloak-ca.crt - #allowed_groups: - # - "Notebook Developers" scope: - openid + #- profile + #- email #ca_certs: None enable_pkce: False JupyterHub: authenticator_class: generic-oauth log_level: 'DEBUG' + debug: 'True' extraEnv: SSL_CERT_FILE: /etc/ssl/certs/keycloak-ca.crt #/usr/local/share/ca-certificates/keycloak-ca.crt REQUESTS_CA_BUNDLE: /etc/ssl/certs/keycloak-ca.crt diff --git a/stacks/jupyter-keycloak/kc.yaml b/stacks/jupyter-keycloak/kc.yaml index c9766c0e..ee081d19 100644 --- a/stacks/jupyter-keycloak/kc.yaml +++ b/stacks/jupyter-keycloak/kc.yaml @@ -38,7 +38,8 @@ data: "*" ], "standardFlowEnabled": true, - "serviceAccountsEnabled" : true, + "serviceAccountsEnabled": true, + "directAccessGrantsEnabled": true, "protocol": "openid-connect" } ] From 0f5dce11ed530d70456a71a3f5b0aa594636306f Mon Sep 17 00:00:00 2001 From: Andrew Kenworthy Date: Tue, 18 Feb 2025 16:22:17 +0100 Subject: [PATCH 09/37] corrected ingress secret, set python cacert explicitly --- stacks/jupyter-keycloak/in.yaml | 8 +-- stacks/jupyter-keycloak/jupyterhub.yaml | 74 ++++++++++++++----------- 2 files changed, 44 insertions(+), 38 deletions(-) diff --git a/stacks/jupyter-keycloak/in.yaml b/stacks/jupyter-keycloak/in.yaml index a0853383..3eaff127 100644 --- a/stacks/jupyter-keycloak/in.yaml +++ b/stacks/jupyter-keycloak/in.yaml @@ -6,15 +6,13 @@ metadata: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/ssl-passthrough: "true" nginx.ingress.kubernetes.io/backend-protocol: "HTTPS" - # If you're using cert-manager, you can add annotations for automatic TLS - # cert-manager.io/cluster-issuer: "letsencrypt-prod" spec: tls: - hosts: - - jupyterhub-keycloak.demo.com - secretName: keycloak-tls-default + - keycloak.default.svc.cluster.local + secretName: keycloak-tls-ca-default rules: - - host: jupyterhub-keycloak.demo.com + - host: keycloak.default.svc.cluster.local http: paths: - path: / diff --git a/stacks/jupyter-keycloak/jupyterhub.yaml b/stacks/jupyter-keycloak/jupyterhub.yaml index 9250f570..1c218e0d 100644 --- a/stacks/jupyter-keycloak/jupyterhub.yaml +++ b/stacks/jupyter-keycloak/jupyterhub.yaml @@ -12,7 +12,7 @@ options: client_id: jupyterhub client_secret: jupyterhubjupyterhub oauth_callback_url: http://proxy-public.default.svc.cluster.local:31095/hub/oauth_callback - authorize_url: https://jupyterhub-keycloak.demo.com/realms/jupyterhub/protocol/openid-connect/auth # see ingress + authorize_url: https://keycloak.default.svc.cluster.local/realms/jupyterhub/protocol/openid-connect/auth # see ingress token_url: https://keycloak.default.svc.cluster.local:8443/realms/jupyterhub/protocol/openid-connect/token userdata_url: https://keycloak.default.svc.cluster.local:8443/realms/jupyterhub/protocol/openid-connect/userinfo # needed? username_claim: preferred_username @@ -28,35 +28,43 @@ options: log_level: 'DEBUG' debug: 'True' extraEnv: - SSL_CERT_FILE: /etc/ssl/certs/keycloak-ca.crt #/usr/local/share/ca-certificates/keycloak-ca.crt - REQUESTS_CA_BUNDLE: /etc/ssl/certs/keycloak-ca.crt - CURL_CA_BUNDLE: /etc/ssl/certs/keycloak-ca.crt - #OAUTH_TLS_VERIFY: "False" - #extraConfig: - #custom_ssl_config: | - # import ssl - # import tornado.httpclient - # from tornado.curl_httpclient import CurlAsyncHTTPClient - - # # Set custom CA bundle for tornado's CurlHttpClient - # ssl_context = ssl.create_default_context(cafile='/etc/ssl/certs/keycloak-ca.crt') - # client = CurlAsyncHTTPClient() - # client.configure(None, ssl_options=ssl_context) - # log_level_config: | - # c.Application.log_level = 'DEBUG' - # setSSLVerification: | - # import os - # os.environ["REQUESTS_CA_BUNDLE"] = "/usr/local/share/ca-certificates/keycloak-ca.crt" - # os.environ["CURL_CA_BUNDLE"] = "/usr/local/share/ca-certificates/keycloak-ca.crt" + # Not sure if all of these are necessary + CURL_SSL_BACKEND: openssl # https://stackoverflow.com/a/76605700 + PYCURL_SSL_LIBRARY: openssl + CURLOPT_SSL_VERIFYPEER: "false" + CURLOPT_SSL_VERIFYHOST: "false" + OAUTH2_TLS_VERIFY: "false" + CACERT: /etc/ssl/certs/keycloak-ca.crt + CERT: /etc/ssl/certs/keycloak-ca.crt + CURLOPT_CAINFO: /etc/ssl/certs/keycloak-ca.crt + # necessary + SSL_CERT_FILE: /etc/ssl/certs/ca-certificates.crt + REQUESTS_CA_BUNDLE: /etc/ssl/certs/ca-certificates.crt + CURL_CA_BUNDLE: /etc/ssl/certs/ca-certificates.crt extraVolumes: - - name: keycloak-tls - secret: - secretName: keycloak-tls-ca-default + - ephemeral: + volumeClaimTemplate: + metadata: + annotations: + secrets.stackable.tech/class: keycloak-tls-default + secrets.stackable.tech/format: tls-pem + secrets.stackable.tech/scope: service=keycloak,service=keycloak-external + spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: "1" + storageClassName: secrets.stackable.tech + volumeMode: Filesystem + name: keycloak-tls extraVolumeMounts: - name: keycloak-tls - #mountPath: /usr/local/share/ca-certificates/keycloak-ca.crt mountPath: /etc/ssl/certs/keycloak-ca.crt - subPath: 0.ca.crt + subPath: ca.crt + - name: keycloak-tls + mountPath: /usr/local/lib/python3.12/site-packages/certifi/cacert.pem + subPath: ca.crt service: type: NodePort networkPolicy: @@ -74,12 +82,12 @@ options: type: NodePort nodePorts: http: 31095 - chp: - networkPolicy: - enabled: true - traefik: - networkPolicy: - enabled: true + # chp: + # networkPolicy: + # enabled: true + # traefik: + # networkPolicy: + # enabled: true rbac: create: true prePuller: @@ -97,7 +105,7 @@ options: # tag: python-3.11 #serviceAccountName: hub networkPolicy: - enabled: true + enabled: false extraLabels: stackable.tech/vendor: Stackable storage: From ca0c4923f8cd58514d18bf3f277e79a380dd292b Mon Sep 17 00:00:00 2001 From: Andrew Kenworthy Date: Wed, 19 Feb 2025 15:21:57 +0100 Subject: [PATCH 10/37] wip: working version --- stacks/jupyter-keycloak/in.yaml | 24 -- stacks/jupyter-keycloak/jupyterhub.yaml | 118 -------- stacks/jupyter-keycloak/kc.yaml | 158 ---------- .../keycloak-realm-config.yaml | 33 --- stacks/jupyter-keycloak/serviceaccount.yaml | 55 ---- .../README.md | 16 +- stacks/jupyterhub-keycloak/jupyterhub.yaml | 142 +++++++++ .../keycloak-realm-config.yaml | 276 ++++++++++++++++++ stacks/stacks-v2.yaml | 43 ++- 9 files changed, 456 insertions(+), 409 deletions(-) delete mode 100644 stacks/jupyter-keycloak/in.yaml delete mode 100644 stacks/jupyter-keycloak/jupyterhub.yaml delete mode 100644 stacks/jupyter-keycloak/kc.yaml delete mode 100644 stacks/jupyter-keycloak/keycloak-realm-config.yaml delete mode 100644 stacks/jupyter-keycloak/serviceaccount.yaml rename stacks/{jupyter-keycloak => jupyterhub-keycloak}/README.md (87%) create mode 100644 stacks/jupyterhub-keycloak/jupyterhub.yaml create mode 100644 stacks/jupyterhub-keycloak/keycloak-realm-config.yaml diff --git a/stacks/jupyter-keycloak/in.yaml b/stacks/jupyter-keycloak/in.yaml deleted file mode 100644 index 3eaff127..00000000 --- a/stacks/jupyter-keycloak/in.yaml +++ /dev/null @@ -1,24 +0,0 @@ -apiVersion: networking.k8s.io/v1 -kind: Ingress -metadata: - name: keycloak-ingress - annotations: - kubernetes.io/ingress.class: nginx - nginx.ingress.kubernetes.io/ssl-passthrough: "true" - nginx.ingress.kubernetes.io/backend-protocol: "HTTPS" -spec: - tls: - - hosts: - - keycloak.default.svc.cluster.local - secretName: keycloak-tls-ca-default - rules: - - host: keycloak.default.svc.cluster.local - http: - paths: - - path: / - pathType: Prefix - backend: - service: - name: keycloak-external - port: - number: 8443 diff --git a/stacks/jupyter-keycloak/jupyterhub.yaml b/stacks/jupyter-keycloak/jupyterhub.yaml deleted file mode 100644 index 1c218e0d..00000000 --- a/stacks/jupyter-keycloak/jupyterhub.yaml +++ /dev/null @@ -1,118 +0,0 @@ ---- -releaseName: jupyterhub -name: jupyterhub -repo: - name: jupyterhub - url: https://jupyterhub.github.io/helm-chart/ -version: 4.0.0 -options: - hub: - config: - GenericOAuthenticator: - client_id: jupyterhub - client_secret: jupyterhubjupyterhub - oauth_callback_url: http://proxy-public.default.svc.cluster.local:31095/hub/oauth_callback - authorize_url: https://keycloak.default.svc.cluster.local/realms/jupyterhub/protocol/openid-connect/auth # see ingress - token_url: https://keycloak.default.svc.cluster.local:8443/realms/jupyterhub/protocol/openid-connect/token - userdata_url: https://keycloak.default.svc.cluster.local:8443/realms/jupyterhub/protocol/openid-connect/userinfo # needed? - username_claim: preferred_username - tls_ca_path: /etc/ssl/certs/keycloak-ca.crt - scope: - - openid - #- profile - #- email - #ca_certs: None - enable_pkce: False - JupyterHub: - authenticator_class: generic-oauth - log_level: 'DEBUG' - debug: 'True' - extraEnv: - # Not sure if all of these are necessary - CURL_SSL_BACKEND: openssl # https://stackoverflow.com/a/76605700 - PYCURL_SSL_LIBRARY: openssl - CURLOPT_SSL_VERIFYPEER: "false" - CURLOPT_SSL_VERIFYHOST: "false" - OAUTH2_TLS_VERIFY: "false" - CACERT: /etc/ssl/certs/keycloak-ca.crt - CERT: /etc/ssl/certs/keycloak-ca.crt - CURLOPT_CAINFO: /etc/ssl/certs/keycloak-ca.crt - # necessary - SSL_CERT_FILE: /etc/ssl/certs/ca-certificates.crt - REQUESTS_CA_BUNDLE: /etc/ssl/certs/ca-certificates.crt - CURL_CA_BUNDLE: /etc/ssl/certs/ca-certificates.crt - extraVolumes: - - ephemeral: - volumeClaimTemplate: - metadata: - annotations: - secrets.stackable.tech/class: keycloak-tls-default - secrets.stackable.tech/format: tls-pem - secrets.stackable.tech/scope: service=keycloak,service=keycloak-external - spec: - accessModes: - - ReadWriteOnce - resources: - requests: - storage: "1" - storageClassName: secrets.stackable.tech - volumeMode: Filesystem - name: keycloak-tls - extraVolumeMounts: - - name: keycloak-tls - mountPath: /etc/ssl/certs/keycloak-ca.crt - subPath: ca.crt - - name: keycloak-tls - mountPath: /usr/local/lib/python3.12/site-packages/certifi/cacert.pem - subPath: ca.crt - service: - type: NodePort - networkPolicy: - enabled: true - egress: - - to: - - podSelector: - matchLabels: - app: keycloak - ports: - - protocol: TCP - port: 8443 - proxy: - service: - type: NodePort - nodePorts: - http: 31095 - # chp: - # networkPolicy: - # enabled: true - # traefik: - # networkPolicy: - # enabled: true - rbac: - create: true - prePuller: - hook: - enabled: false - continuous: - enabled: false - scheduling: - userScheduler: - enabled: false - singleuser: - cmd: null - #image: - # name: jupyter/pyspark-notebook - # tag: python-3.11 - #serviceAccountName: hub - networkPolicy: - enabled: false - extraLabels: - stackable.tech/vendor: Stackable - storage: - extraVolumes: - - name: notebook - emptyDir: - sizeLimit: 500Mi - extraVolumeMounts: - - name: notebook - mountPath: /home/jovyan/notebook diff --git a/stacks/jupyter-keycloak/kc.yaml b/stacks/jupyter-keycloak/kc.yaml deleted file mode 100644 index ee081d19..00000000 --- a/stacks/jupyter-keycloak/kc.yaml +++ /dev/null @@ -1,158 +0,0 @@ -# The environment variables must be replaced. ---- -apiVersion: v1 -kind: ConfigMap -metadata: - name: keycloak-realms -data: - test-realm.json: | - { - "realm": "jupyterhub", - "enabled": true, - "groups" : [], - "users": [ - { - "enabled": true, - "username": "dev", - "firstName" : "Dev", - "lastName" : "User", - "email" : "dev@noemail.com", - "credentials": [ - { - "type": "password", - "value": "dev" - } - ] - } - ], - "clients": [ - { - "clientId": "jupyterhub", - "enabled": true, - "clientAuthenticatorType": "client-secret", - "secret": "jupyterhubjupyterhub", - "redirectUris": [ - "*" - ], - "webOrigins": [ - "*" - ], - "standardFlowEnabled": true, - "serviceAccountsEnabled": true, - "directAccessGrantsEnabled": true, - "protocol": "openid-connect" - } - ] - } ---- -apiVersion: apps/v1 -kind: Deployment -metadata: - name: keycloak - labels: - app: keycloak -spec: - replicas: 1 - selector: - matchLabels: - app: keycloak - template: - metadata: - labels: - app: keycloak - spec: - containers: - - name: keycloak - image: quay.io/keycloak/keycloak:23.0.4 - args: - - start-dev - - --import-realm - - --https-certificate-file=/tls/tls.crt - - --https-certificate-key-file=/tls/tls.key - - --log-level=DEBUG - env: - - name: KEYCLOAK_ADMIN - value: admin - - name: KEYCLOAK_ADMIN_PASSWORD - value: admin - - name: KEYCLOAK_LOGLEVEL - value: DEBUG - ports: - - name: https - containerPort: 8443 - resources: {} - volumeMounts: - - name: realms - mountPath: /opt/keycloak/data/import - - name: tls - mountPath: /tls - readinessProbe: - httpGet: - path: /realms/master - port: 8443 - scheme: HTTPS - serviceAccountName: keycloak-serviceaccount - volumes: - - name: realms - configMap: - name: keycloak-realms - - ephemeral: - volumeClaimTemplate: - metadata: - annotations: - secrets.stackable.tech/class: keycloak-tls-default - secrets.stackable.tech/format: tls-pem - secrets.stackable.tech/scope: service=keycloak,service=keycloak-external - spec: - accessModes: - - ReadWriteOnce - resources: - requests: - storage: "1" - storageClassName: secrets.stackable.tech - volumeMode: Filesystem - name: tls ---- -apiVersion: v1 -kind: Service -metadata: - name: keycloak - labels: - app: keycloak -spec: - type: ClusterIP - selector: - app: keycloak - ports: - - name: https - port: 8443 - targetPort: 8443 ---- -apiVersion: v1 -kind: Service -metadata: - name: keycloak-external - labels: - app: keycloak -spec: - type: NodePort - selector: - app: keycloak - ports: - - name: https - port: 8443 - targetPort: 8443 - nodePort: 31093 ---- -apiVersion: secrets.stackable.tech/v1alpha1 -kind: SecretClass -metadata: - name: keycloak-tls-default -spec: - backend: - autoTls: - ca: - autoGenerate: true - secret: - name: keycloak-tls-ca-default # should be available for jupyterhub - namespace: default diff --git a/stacks/jupyter-keycloak/keycloak-realm-config.yaml b/stacks/jupyter-keycloak/keycloak-realm-config.yaml deleted file mode 100644 index dadc1841..00000000 --- a/stacks/jupyter-keycloak/keycloak-realm-config.yaml +++ /dev/null @@ -1,33 +0,0 @@ ---- -apiVersion: v1 -kind: Secret -metadata: - name: jupyterhub-client-credentials -stringData: - clientId: jupyterhub - clientSecret: jupyterhubjupyterhub #{{ keycloakJupyterhubClientSecret }} ---- -apiVersion: v1 -kind: Secret -metadata: - name: keycloak-realm-config -stringData: - # Created by clicking users in Keycloak WebUI and than running `/opt/keycloak/bin/kc.sh export --dir /tmp` - # (as well as some manual modifications). - realm.json: | - { - "realm" : "jupyterhub", - "enabled" : true, - "groups" : [], - "users" : [], - "clients" : [ { - "clientId" : "jupyterhub", - "enabled" : true, - "protocol" : "openid-connect", - "clientAuthenticatorType" : "client-secret", - "secret" : "jupyterhubjupyterhub", - "redirectUris" : [ "*" ], - "webOrigins" : [ "*" ], - "standardFlowEnabled" : true - } ] - } diff --git a/stacks/jupyter-keycloak/serviceaccount.yaml b/stacks/jupyter-keycloak/serviceaccount.yaml deleted file mode 100644 index bb819895..00000000 --- a/stacks/jupyter-keycloak/serviceaccount.yaml +++ /dev/null @@ -1,55 +0,0 @@ ---- -apiVersion: v1 -kind: ServiceAccount -metadata: - name: keycloak-serviceaccount - namespace: default ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: keycloak-clusterrolebinding -subjects: - - kind: ServiceAccount - name: keycloak-serviceaccount - namespace: default -roleRef: - kind: ClusterRole - name: keycloak-clusterrole - apiGroup: rbac.authorization.k8s.io ---- -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: keycloak-clusterrole -rules: - - apiGroups: - - "" - resources: - - nodes - - services - - endpoints - verbs: - - get - - list - - watch - - apiGroups: - - "" - resources: - - configmaps - verbs: - - get - - list - - watch - - create - - patch - - apiGroups: - - authentication.stackable.tech - resources: - - authenticationclasses - verbs: - - get - - list - - watch - - create - - patch diff --git a/stacks/jupyter-keycloak/README.md b/stacks/jupyterhub-keycloak/README.md similarity index 87% rename from stacks/jupyter-keycloak/README.md rename to stacks/jupyterhub-keycloak/README.md index 8d257218..dc5aef11 100644 --- a/stacks/jupyter-keycloak/README.md +++ b/stacks/jupyterhub-keycloak/README.md @@ -35,24 +35,26 @@ Deploy the scripts: # and then:- # deploy kc etc. -stackablectl op in secret commons listener -kubectl apply -f stacks/jupyter-keycloak/serviceaccount.yaml -kubectl apply -f stacks/jupyter-keycloak/kc.yaml -kubectl apply -f stacks/jupyter-keycloak/in.yaml +stackablectl stack install jupyterhub-keycloak --release dev -s stacks/stacks-v2.yaml # deploy jhub by extracting the values from the jupyterhub.yaml -export TARGET_FILE=stacks/jupyter-keycloak/jupyterhub.yaml +export TARGET_FILE=stacks/jupyterhub-keycloak/jupyterhub.yaml helm upgrade --install $(yq '.releaseName' $TARGET_FILE) $(yq '.name' $TARGET_FILE) --repo $(yq '.repo.url' $TARGET_FILE) --version $(yq '.version' $TARGET_FILE) -f <(yq '.options' $TARGET_FILE) + + + + + # check token retrieval HUB_POD=$(kubectl -n default get pod -l app=jupyterhub,component=hub -o name | head -n 1 | sed -e 's#pod/##') -kubectl exec -it $HUB_POD -- curl -v -X POST -d "grant_type=client_credentials&client_id=jupyterhub&client_secret=jupyterhubjupyterhub" https://keycloak.default.svc.cluster.local:8443/realms/jupyterhub/protocol/openid-connect/token +kubectl exec -it $HUB_POD -- curl -v -X POST -d "grant_type=password&username=superset&password=supersetsuperset&client_id=jupyterhub&client_secret=jupyterhubjupyterhub" https://172.19.0.3:32502/realms/demo/protocol/openid-connect/token ``` ## Navigate to ```shell -http://proxy-public.default.svc.cluster.local:31095 +http://172.19.0.3:31398 ``` and log in as diff --git a/stacks/jupyterhub-keycloak/jupyterhub.yaml b/stacks/jupyterhub-keycloak/jupyterhub.yaml new file mode 100644 index 00000000..7bb6b81a --- /dev/null +++ b/stacks/jupyterhub-keycloak/jupyterhub.yaml @@ -0,0 +1,142 @@ +--- +releaseName: jupyterhub +name: jupyterhub +repo: + name: jupyterhub + url: https://jupyterhub.github.io/helm-chart/ +version: 4.0.0 +options: + hub: + config: + Authenticator: + admin_users: + - justin.martin + allowed_users: + - justin.martin + GenericOAuthenticator: + client_id: jupyterhub + client_secret: jupyterhubjupyterhub + oauth_callback_url: http://172.19.0.3:32475/hub/oauth_callback + authorize_url: https://172.19.0.3:31084/realms/demo/protocol/openid-connect/auth + token_url: https://172.19.0.3:31084/realms/demo/protocol/openid-connect/token + userdata_url: https://172.19.0.3:31084/realms/demo/protocol/openid-connect/userinfo + username_claim: preferred_username + tls_ca_path: /etc/ssl/certs/ca-certificates.crt + scope: + - openid + enable_pkce: False + JupyterHub: + authenticator_class: generic-oauth + extraEnv: + # Not sure if all of these are necessary + CURL_SSL_BACKEND: openssl # https://stackoverflow.com/a/76605700 + PYCURL_SSL_LIBRARY: openssl + CURLOPT_SSL_VERIFYPEER: "false" + CURLOPT_SSL_VERIFYHOST: "false" + OAUTH2_TLS_VERIFY: "false" + CACERT: /etc/ssl/certs/ca-certificates.crt + CERT: /etc/ssl/certs/ca-certificates.crt + CURLOPT_CAINFO: /etc/ssl/certs/ca-certificates.crt + extraVolumes: + - name: tls-ca-cert + ephemeral: + volumeClaimTemplate: + metadata: + annotations: + secrets.stackable.tech/class: tls + spec: + storageClassName: secrets.stackable.tech + accessModes: + - ReadWriteOnce + resources: + requests: + storage: "1" + extraVolumeMounts: + - name: tls-ca-cert + mountPath: /tls + - name: tls-ca-cert + mountPath: /etc/ssl/certs/keycloak-ca.crt + subPath: ca.crt + - name: tls-ca-cert + mountPath: /etc/ssl/certs/ca-certificates.crt + subPath: ca.crt + - name: tls-ca-cert + mountPath: /usr/local/lib/python3.12/site-packages/certifi/cacert.pem + subPath: ca.crt + service: + type: NodePort + proxy: + service: + type: NodePort + rbac: + create: true + prePuller: + hook: + enabled: false + continuous: + enabled: false + scheduling: + userScheduler: + enabled: false + singleuser: + cmd: null + networkPolicy: + enabled: false + extraLabels: + stackable.tech/vendor: Stackable + storage: + extraVolumes: + - name: tls-ca-cert + ephemeral: + volumeClaimTemplate: + metadata: + annotations: + secrets.stackable.tech/class: tls + spec: + storageClassName: secrets.stackable.tech + accessModes: + - ReadWriteOnce + resources: + requests: + storage: "1" + extraVolumeMounts: + - name: tls-ca-cert + mountPath: /stackable/secrets/tls-ca-cert + profileList: + - display_name: "Default" + description: "Default profile" + default: true + profile_options: + cpu: + display_name: CPU + choices: + "2": + display_name: "{{cpu}}" + kubespawner_override: + cpu_guarantee: 2 + cpu_limit: 2 + "1 request, 16 limit": + display_name: "1 request, 16 limit" + kubespawner_override: + cpu_guarantee: 1 + cpu_limit: 16 + "5 request, 16 limit": + display_name: "5 request, 16 limit" + kubespawner_override: + cpu_guarantee: 5 + cpu_limit: 16 + memory: + display_name: Memory + choices: + "8 GB": + display_name: "8 GB" + kubespawner_override: + mem_guarantee: "8G" + mem_limit: "8G" + image: + display_name: Image + choices: + "jupyter/pyspark-notebook:python-3.9": + display_name: "jupyter/pyspark-notebook:python-3.9" + kubespawner_override: + image: "jupyter/pyspark-notebook:python-3.9" diff --git a/stacks/jupyterhub-keycloak/keycloak-realm-config.yaml b/stacks/jupyterhub-keycloak/keycloak-realm-config.yaml new file mode 100644 index 00000000..705adf41 --- /dev/null +++ b/stacks/jupyterhub-keycloak/keycloak-realm-config.yaml @@ -0,0 +1,276 @@ +--- +apiVersion: v1 +kind: Secret +metadata: + name: keycloak-clients +stringData: + superset: "{{ keycloakSupersetClientSecret }}" + trino: "{{ keycloakTrinoClientSecret }}" +--- +apiVersion: v1 +kind: Secret +metadata: + name: user-info-fetcher-client-credentials +stringData: + clientId: user-info-fetcher + clientSecret: {{ keycloakUserinfoFetcherClientSecret }} +--- +apiVersion: v1 +kind: Secret +metadata: + name: keycloak-realm-config +stringData: + # Created by clicking users in Keycloak WebUI and than running `/opt/keycloak/bin/kc.sh export --dir /tmp` + # (as well as some manual modifications). + realm.json: | + { + "realm" : "demo", + "enabled" : true, + "groups" : [ { + "name" : "Compliance and Regulation", + "path" : "/Compliance and Regulation", + "subGroups" : [ { + "name" : "Analytics", + "path" : "/Compliance and Regulation/Analytics" + } ] + }, { + "name" : "Customer Service", + "path" : "/Customer Service", + "subGroups" : [ { + "name" : "Analytics", + "path" : "/Customer Service/Analytics" + } ] + }, { + "name" : "Marketing", + "path" : "/Marketing", + "subGroups" : [ ] + } ], + "users" : [ { + "id" : "e44a09fa-bce1-40e8-a1da-28902b79dcf0", + "createdTimestamp" : 1711375603780, + "username" : "daniel.king", + "enabled" : true, + "totp" : false, + "emailVerified" : true, + "firstName" : "Daniel", + "lastName" : "King", + "email" : "daniel.king@knab.com", + "credentials" : [ { + "id" : "77343b9c-661e-4f04-8ea3-c4dd7f86abde", + "type" : "password", + "userLabel" : "My password", + "createdDate" : 1711375610955, + "secretData" : "{\"value\":\"jNVzthZCkPipHW1KHZCncU/G/DHc+5QqmGEKernet5E=\",\"salt\":\"7woqv8IPicuA0cpa3U6dEg==\",\"additionalParameters\":{}}", + "credentialData" : "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\",\"additionalParameters\":{}}" + } ], + "disableableCredentialTypes" : [ ], + "requiredActions" : [ ], + "realmRoles" : [ "default-roles-demo" ], + "notBefore" : 0, + "groups" : [ "/Compliance and Regulation/Analytics" ] + }, { + "id" : "68dc0996-be4a-412e-8d7b-a21cfc5b1e61", + "createdTimestamp" : 1711375695303, + "username" : "isla.williams", + "enabled" : true, + "totp" : false, + "emailVerified" : true, + "firstName" : "Isla", + "lastName" : "Williams", + "email" : "isla.williams@knab.com", + "credentials" : [ { + "id" : "67941518-5494-4b97-af8a-458250cc1bd0", + "type" : "password", + "userLabel" : "My password", + "createdDate" : 1711375708463, + "secretData" : "{\"value\":\"OpKvnLaK7afN4vpaqhjvNg/u1phsMZUAq0y6+28UFK4=\",\"salt\":\"dSfuKvbSyumwCP6Y1JNYEg==\",\"additionalParameters\":{}}", + "credentialData" : "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\",\"additionalParameters\":{}}" + } ], + "disableableCredentialTypes" : [ ], + "requiredActions" : [ ], + "realmRoles" : [ "default-roles-demo" ], + "notBefore" : 0, + "groups" : [ "/Customer Service/Analytics" ] + }, { + "id" : "e434ea2c-1dcc-4b00-aa98-77444d50a945", + "createdTimestamp" : 1711375666275, + "username" : "justin.martin", + "enabled" : true, + "totp" : false, + "emailVerified" : true, + "firstName" : "Justin", + "lastName" : "Martin", + "email" : "justin.martin@knab.com", + "credentials" : [ { + "id" : "7df036b6-1cd4-48fd-920a-5e43cdb69d15", + "type" : "password", + "userLabel" : "My password", + "createdDate" : 1711375673501, + "secretData" : "{\"value\":\"MYCAP3Hl54rKbMGG16YRnchpkWJQ5EaqYiMfZN/Q3z4=\",\"salt\":\"8PieIPt7mRiJQe3kszgakg==\",\"additionalParameters\":{}}", + "credentialData" : "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\",\"additionalParameters\":{}}" + } ], + "disableableCredentialTypes" : [ ], + "requiredActions" : [ ], + "realmRoles" : [ "default-roles-demo" ], + "notBefore" : 0, + "groups" : [ "/Customer Service/Analytics" ] + }, { + "id" : "14d21868-9f24-45e6-876c-34405ac506c8", + "createdTimestamp" : 1711375726932, + "username" : "mark.ketting", + "enabled" : true, + "totp" : false, + "emailVerified" : true, + "firstName" : "Mark", + "lastName" : "Ketting", + "email" : "mark.ketting@knab.com", + "credentials" : [ { + "id" : "80bc0228-fd73-4011-b8d7-be382429ef80", + "type" : "password", + "userLabel" : "My password", + "createdDate" : 1711375733935, + "secretData" : "{\"value\":\"2GQKaid+G8gKIQe4a9J12/d7d4z41kqy3nuNEdEh5YI=\",\"salt\":\"DCX1lj9nYbdPkzU2BnTUjg==\",\"additionalParameters\":{}}", + "credentialData" : "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\",\"additionalParameters\":{}}" + } ], + "disableableCredentialTypes" : [ ], + "requiredActions" : [ ], + "realmRoles" : [ "default-roles-demo" ], + "notBefore" : 0, + "groups" : [ "/Marketing" ] + }, { + "id" : "f695a4a2-b05a-4484-b49b-ea94837490e8", + "createdTimestamp" : 1711375638235, + "username" : "pamela.scott", + "enabled" : true, + "totp" : false, + "emailVerified" : true, + "firstName" : "Pamela", + "lastName" : "Scott", + "email" : "pamela.scott@knab.com", + "credentials" : [ { + "id" : "553b96c7-849c-4655-810f-09e4569f260e", + "type" : "password", + "userLabel" : "My password", + "createdDate" : 1711375646251, + "secretData" : "{\"value\":\"IsMVP7Fw1bzIoBpjzFHl7Ey9FrfaOuzX5fTnfmw3/iw=\",\"salt\":\"G14/rEl5h6QUPrCR/XoVMw==\",\"additionalParameters\":{}}", + "credentialData" : "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\",\"additionalParameters\":{}}" + } ], + "disableableCredentialTypes" : [ ], + "requiredActions" : [ ], + "realmRoles" : [ "default-roles-demo" ], + "notBefore" : 0, + "groups" : [ "/Customer Service/Analytics" ] + }, { + "id" : "df53f737-794c-4bc4-ab0d-2cfbdc01cc57", + "createdTimestamp" : 1711375573153, + "username" : "sophia.clarke", + "enabled" : true, + "totp" : false, + "emailVerified" : true, + "firstName" : "Sophia", + "lastName" : "Clarke", + "email" : "sophia.clarke@knab.com", + "credentials" : [ { + "id" : "aac9b727-acfb-45b2-bc52-b89a210adbf8", + "type" : "password", + "userLabel" : "My password", + "createdDate" : 1711375583194, + "secretData" : "{\"value\":\"Q+3UJbt/cpV2G8lRcVFZ5J4BqluRqAlJols+q8NFlUc=\",\"salt\":\"jJUdiUao9UcwEJkGtBzSuw==\",\"additionalParameters\":{}}", + "credentialData" : "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\",\"additionalParameters\":{}}" + } ], + "disableableCredentialTypes" : [ ], + "requiredActions" : [ ], + "realmRoles" : [ "default-roles-demo" ], + "notBefore" : 0, + "groups" : [ "/Compliance and Regulation/Analytics" ] + }, { + "id" : "75b31f7c-aa0a-419b-930c-57969e7b6e67", + "createdTimestamp" : 1711375413324, + "username" : "william.lewis", + "enabled" : true, + "totp" : false, + "emailVerified" : true, + "firstName" : "William", + "lastName" : "Lewis", + "email" : "william.lewis@knab.com", + "credentials" : [ { + "id" : "4a213d68-b1f9-41e4-971f-6a7335291293", + "type" : "password", + "userLabel" : "My password", + "createdDate" : 1711375448461, + "secretData" : "{\"value\":\"oU3A3av49qx+fk2WJlvuZo2m33GygiSi8L0fugOIOq4=\",\"salt\":\"JJHpTTZNTt5k4GY9Eci5OQ==\",\"additionalParameters\":{}}", + "credentialData" : "{\"hashIterations\":27500,\"algorithm\":\"pbkdf2-sha256\",\"additionalParameters\":{}}" + } ], + "disableableCredentialTypes" : [ ], + "requiredActions" : [ ], + "realmRoles" : [ "default-roles-demo" ], + "notBefore" : 0, + "groups" : [ "/Compliance and Regulation/Analytics" ] + } , { + "username" : "service-account-user-info-fetcher", + "enabled" : true, + "totp" : false, + "emailVerified" : false, + "serviceAccountClientId" : "user-info-fetcher", + "credentials" : [ ], + "disableableCredentialTypes" : [ ], + "requiredActions" : [ ], + "realmRoles" : [ "default-roles-demo" ], + "clientRoles" : { + "realm-management" : [ + "view-users" + ] + }, + "notBefore" : 0, + "groups" : [ ] + } ], + "clients" : [ { + "clientId" : "user-info-fetcher", + "surrogateAuthRequired" : false, + "enabled" : true, + "alwaysDisplayInConsole" : false, + "clientAuthenticatorType" : "client-secret", + "secret" : "{{ keycloakUserinfoFetcherClientSecret }}", + "redirectUris" : [ "*" ], + "webOrigins" : [ "*" ], + "notBefore" : 0, + "bearerOnly" : false, + "serviceAccountsEnabled" : true, + "publicClient" : false, + "frontchannelLogout" : true, + "protocol" : "openid-connect", + "attributes" : { + "oidc.ciba.grant.enabled" : "true", + "oauth2.device.authorization.grant.enabled" : "false" + }, + "authenticationFlowBindingOverrides" : { }, + "fullScopeAllowed" : true + }, { + "clientId": "trino", + "enabled": true, + "protocol": "openid-connect", + "clientAuthenticatorType": "client-secret", + "secret": "{{ keycloakTrinoClientSecret }}", + "redirectUris" : [ "*" ], + "webOrigins" : [ "*" ], + "standardFlowEnabled": true + }, { + "clientId": "superset", + "enabled": true, + "protocol": "openid-connect", + "clientAuthenticatorType": "client-secret", + "secret": "{{ keycloakSupersetClientSecret }}", + "redirectUris" : [ "*" ], + "webOrigins" : [ "*" ], + "standardFlowEnabled": true + }, { + "clientId": "jupyterhub", + "enabled": true, + "protocol": "openid-connect", + "clientAuthenticatorType": "client-secret", + "secret": "jupyterhubjupyterhub", + "redirectUris" : [ "*" ], + "webOrigins" : [ "*" ], + "standardFlowEnabled": true + } ] + } diff --git a/stacks/stacks-v2.yaml b/stacks/stacks-v2.yaml index 0b22b385..4ef2a236 100644 --- a/stacks/stacks-v2.yaml +++ b/stacks/stacks-v2.yaml @@ -650,32 +650,47 @@ stacks: default: adminadmin jupyterhub-keycloak: description: >- - A stack used to demonstrate JupyterHub and Keycloak. + A stack used to demonstrate JupyterHub and Keycloak, using parts of the end-to-end security demo. stackableRelease: dev - labels: - - jupyterhub - - keycloak - supportedNamespaces: [] stackableOperators: - commons - listener - secret + labels: + - security + - jupyterhub + - keycloak + supportedNamespaces: [] resourceRequests: cpu: 3400m memory: 9010Mi pvc: 24Gi manifests: - #- plainYaml: stacks/jupyter-keycloak/serviceaccount.yaml - #- plainYaml: stacks/jupyter-keycloak/keycloak-realm-config.yaml - - plainYaml: stacks/jupyter-keycloak/kc.yaml - #- helmChart: stacks/jupyter-keycloak/jupyterhub.yaml + - plainYaml: stacks/_templates/keycloak-serviceaccount.yaml + - plainYaml: stacks/jupyterhub-keycloak/keycloak-realm-config.yaml + - plainYaml: stacks/_templates/keycloak.yaml parameters: - name: keycloakAdminPassword description: Password of the Keycloak admin user default: adminadmin - - name: jupyterhubAdminPassword - description: Password for JupyterHub Admin + - name: keycloakUserinfoFetcherClientSecret + description: Secret ID of the Keycloak UserinfoFetcher client that is used by the UserinfoFetcher to retrieve user information + default: user-info-fetcheruser-info-fetcher + - name: keycloakSupersetClientSecret + description: Secret ID of the Keycloak Superset client that is used by Superset to connect to Keycloak to authenticate users + default: supersetsuperset + - name: keycloakTrinoClientSecret + description: Secret ID of the Keycloak Trino client that is used by Trino to connect to Keycloak to authenticate users + default: trinotrino + - name: supersetAdminPassword + description: Password of the Superset admin user default: adminadmin - - name: keycloakJupyterhubClientSecret - description: Secret ID of the Keycloak Jupyterhub client - default: jupyterhubjupyterhub + - name: supersetSecretKey + description: Superset's secret key used to generate e.g. user session tokens + default: supersetSecretKey + - name: trinoSupersetUserPassword + description: Password of the service Superset uses to connect to Trino. Superset itself will use impersonation for Trino users + default: supersetsuperset + - name: trinoDataImportUserPassword + description: Password of the service user used to load data into Trino + default: data-importdata-import From f046dd83262ddecc35c8e15c0451d30e96bf38d7 Mon Sep 17 00:00:00 2001 From: Andrew Kenworthy Date: Wed, 19 Feb 2025 15:34:24 +0100 Subject: [PATCH 11/37] clean-up realm-config --- stacks/jupyterhub-keycloak/README.md | 84 ------------------- .../keycloak-realm-config.yaml | 74 ---------------- stacks/stacks-v2.yaml | 21 ----- 3 files changed, 179 deletions(-) diff --git a/stacks/jupyterhub-keycloak/README.md b/stacks/jupyterhub-keycloak/README.md index dc5aef11..7790ca49 100644 --- a/stacks/jupyterhub-keycloak/README.md +++ b/stacks/jupyterhub-keycloak/README.md @@ -1,95 +1,11 @@ # Setup -Create an ingress-enabled KinD cluster: - -```shell -# create a kind cluster N.B. with ingress-ready=true -cat </demos -# and then:- -# deploy kc etc. - stackablectl stack install jupyterhub-keycloak --release dev -s stacks/stacks-v2.yaml # deploy jhub by extracting the values from the jupyterhub.yaml export TARGET_FILE=stacks/jupyterhub-keycloak/jupyterhub.yaml helm upgrade --install $(yq '.releaseName' $TARGET_FILE) $(yq '.name' $TARGET_FILE) --repo $(yq '.repo.url' $TARGET_FILE) --version $(yq '.version' $TARGET_FILE) -f <(yq '.options' $TARGET_FILE) - - - - - - -# check token retrieval -HUB_POD=$(kubectl -n default get pod -l app=jupyterhub,component=hub -o name | head -n 1 | sed -e 's#pod/##') -kubectl exec -it $HUB_POD -- curl -v -X POST -d "grant_type=password&username=superset&password=supersetsuperset&client_id=jupyterhub&client_secret=jupyterhubjupyterhub" https://172.19.0.3:32502/realms/demo/protocol/openid-connect/token -``` - -## Navigate to - -```shell -http://172.19.0.3:31398 -``` - -and log in as - -```shell -dev/dev -``` - -Other checks: - -```shell -# check the actual auth handshake, by trying to login and then adding code found in the browser URL: -HUB_POD=$(kubectl -n default get pod -l app=jupyterhub,component=hub -o name | head -n 1 | sed -e 's#pod/##') -URLCODE=339f2de3-03be-4a81-b8bc-7bcaf6babc59.0302eaa2-8cae-4e22-a35a-abd7b35e2c4c.1f7d09f0-2b6f-4c1f-83f4-86dceabe0199 -kubectl exec -it $HUB_POD -- curl -v -X POST \ - -H "Content-Type: application/x-www-form-urlencoded" \ - -d "grant_type=authorization_code&code=$URLCODE&redirect_uri=http://proxy-public.default.svc.cluster.local:31095/hub/oauth_callback&client_id=jupyterhub&client_secret=jupyterhubjupyterhub" \ - https://keycloak.default.svc.cluster.local:8443/realms/jupyterhub/protocol/openid-connect/token - -# Check the user-info is returnable: -HUB_POD=$(kubectl -n default get pod -l app=jupyterhub,component=hub -o name | head -n 1 | sed -e 's#pod/##') -# Get the access token -TOKEN=$(kubectl exec -it $HUB_POD -- curl -s -d "grant_type=client_credentials&client_id=jupyterhub&client_secret=jupyterhubjupyterhub&scope=openid" https://keycloak.default.svc.cluster.local:8443/realms/jupyterhub/protocol/openid-connect/token | jq -r .access_token) -# Pass the token into the pod and use it in the curl command -kubectl exec -it $HUB_POD -- bash -c "curl -v -H \"Authorization: Bearer $TOKEN\" https://keycloak.default.svc.cluster.local:8443/realms/jupyterhub/protocol/openid-connect/userinfo" - -# should return something like: -# {"sub":"a391bb10-bb56-4b87-a6a0-f8e7e9ea8231","email_verified":false,"preferred_username":"service-account-jupyterhub"} - -# and for the user dev: -HUB_POD=$(kubectl -n default get pod -l app=jupyterhub,component=hub -o name | head -n 1 | sed -e 's#pod/##') -# Get the access token for the user 'dev' using the password grant -TOKEN=$(kubectl exec -it $HUB_POD -- curl -s -d "grant_type=password&client_id=jupyterhub&client_secret=jupyterhubjupyterhub&username=dev&password=dev&scope=openid" https://keycloak.default.svc.cluster.local:8443/realms/jupyterhub/protocol/openid-connect/token | jq -r .access_token) -# Pass the token into the pod and use it in the curl command -kubectl exec -it $HUB_POD -- bash -c "curl -v -H \"Authorization: Bearer $TOKEN\" https://keycloak.default.svc.cluster.local:8443/realms/jupyterhub/protocol/openid-connect/userinfo" - -# {"sub":"c88186dc-5777-4401-820b-467f841073bb","email_verified":false,"name":"Dev User","preferred_username":"dev","given_name":"Dev","family_name":"User","email":"dev@noemail.com"} ``` diff --git a/stacks/jupyterhub-keycloak/keycloak-realm-config.yaml b/stacks/jupyterhub-keycloak/keycloak-realm-config.yaml index 705adf41..5495a1c3 100644 --- a/stacks/jupyterhub-keycloak/keycloak-realm-config.yaml +++ b/stacks/jupyterhub-keycloak/keycloak-realm-config.yaml @@ -1,27 +1,9 @@ --- apiVersion: v1 kind: Secret -metadata: - name: keycloak-clients -stringData: - superset: "{{ keycloakSupersetClientSecret }}" - trino: "{{ keycloakTrinoClientSecret }}" ---- -apiVersion: v1 -kind: Secret -metadata: - name: user-info-fetcher-client-credentials -stringData: - clientId: user-info-fetcher - clientSecret: {{ keycloakUserinfoFetcherClientSecret }} ---- -apiVersion: v1 -kind: Secret metadata: name: keycloak-realm-config stringData: - # Created by clicking users in Keycloak WebUI and than running `/opt/keycloak/bin/kc.sh export --dir /tmp` - # (as well as some manual modifications). realm.json: | { "realm" : "demo", @@ -206,64 +188,8 @@ stringData: "realmRoles" : [ "default-roles-demo" ], "notBefore" : 0, "groups" : [ "/Compliance and Regulation/Analytics" ] - } , { - "username" : "service-account-user-info-fetcher", - "enabled" : true, - "totp" : false, - "emailVerified" : false, - "serviceAccountClientId" : "user-info-fetcher", - "credentials" : [ ], - "disableableCredentialTypes" : [ ], - "requiredActions" : [ ], - "realmRoles" : [ "default-roles-demo" ], - "clientRoles" : { - "realm-management" : [ - "view-users" - ] - }, - "notBefore" : 0, - "groups" : [ ] } ], "clients" : [ { - "clientId" : "user-info-fetcher", - "surrogateAuthRequired" : false, - "enabled" : true, - "alwaysDisplayInConsole" : false, - "clientAuthenticatorType" : "client-secret", - "secret" : "{{ keycloakUserinfoFetcherClientSecret }}", - "redirectUris" : [ "*" ], - "webOrigins" : [ "*" ], - "notBefore" : 0, - "bearerOnly" : false, - "serviceAccountsEnabled" : true, - "publicClient" : false, - "frontchannelLogout" : true, - "protocol" : "openid-connect", - "attributes" : { - "oidc.ciba.grant.enabled" : "true", - "oauth2.device.authorization.grant.enabled" : "false" - }, - "authenticationFlowBindingOverrides" : { }, - "fullScopeAllowed" : true - }, { - "clientId": "trino", - "enabled": true, - "protocol": "openid-connect", - "clientAuthenticatorType": "client-secret", - "secret": "{{ keycloakTrinoClientSecret }}", - "redirectUris" : [ "*" ], - "webOrigins" : [ "*" ], - "standardFlowEnabled": true - }, { - "clientId": "superset", - "enabled": true, - "protocol": "openid-connect", - "clientAuthenticatorType": "client-secret", - "secret": "{{ keycloakSupersetClientSecret }}", - "redirectUris" : [ "*" ], - "webOrigins" : [ "*" ], - "standardFlowEnabled": true - }, { "clientId": "jupyterhub", "enabled": true, "protocol": "openid-connect", diff --git a/stacks/stacks-v2.yaml b/stacks/stacks-v2.yaml index 4ef2a236..9727c63b 100644 --- a/stacks/stacks-v2.yaml +++ b/stacks/stacks-v2.yaml @@ -673,24 +673,3 @@ stacks: - name: keycloakAdminPassword description: Password of the Keycloak admin user default: adminadmin - - name: keycloakUserinfoFetcherClientSecret - description: Secret ID of the Keycloak UserinfoFetcher client that is used by the UserinfoFetcher to retrieve user information - default: user-info-fetcheruser-info-fetcher - - name: keycloakSupersetClientSecret - description: Secret ID of the Keycloak Superset client that is used by Superset to connect to Keycloak to authenticate users - default: supersetsuperset - - name: keycloakTrinoClientSecret - description: Secret ID of the Keycloak Trino client that is used by Trino to connect to Keycloak to authenticate users - default: trinotrino - - name: supersetAdminPassword - description: Password of the Superset admin user - default: adminadmin - - name: supersetSecretKey - description: Superset's secret key used to generate e.g. user session tokens - default: supersetSecretKey - - name: trinoSupersetUserPassword - description: Password of the service Superset uses to connect to Trino. Superset itself will use impersonation for Trino users - default: supersetsuperset - - name: trinoDataImportUserPassword - description: Password of the service user used to load data into Trino - default: data-importdata-import From e8eb2f924c949978c0bc7944b973abe5c0753750 Mon Sep 17 00:00:00 2001 From: Andrew Kenworthy Date: Wed, 19 Feb 2025 15:54:10 +0100 Subject: [PATCH 12/37] delegate user check to Keycloak --- stacks/jupyterhub-keycloak/jupyterhub.yaml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/stacks/jupyterhub-keycloak/jupyterhub.yaml b/stacks/jupyterhub-keycloak/jupyterhub.yaml index 7bb6b81a..fb616d94 100644 --- a/stacks/jupyterhub-keycloak/jupyterhub.yaml +++ b/stacks/jupyterhub-keycloak/jupyterhub.yaml @@ -9,10 +9,8 @@ options: hub: config: Authenticator: - admin_users: - - justin.martin - allowed_users: - - justin.martin + # don't filter here: delegate to Keycloak + allow_all: True GenericOAuthenticator: client_id: jupyterhub client_secret: jupyterhubjupyterhub @@ -111,7 +109,7 @@ options: display_name: CPU choices: "2": - display_name: "{{cpu}}" + display_name: "2 request, 2 limit" kubespawner_override: cpu_guarantee: 2 cpu_limit: 2 From c1274e6559735d231d83688d731d9ac452b44241 Mon Sep 17 00:00:00 2001 From: Andrew Kenworthy Date: Wed, 19 Feb 2025 17:01:47 +0100 Subject: [PATCH 13/37] use demo-specific keycloak --- stacks/jupyterhub-keycloak/README.md | 13 +- .../keycloak-serviceaccount.yaml | 38 +++++ stacks/jupyterhub-keycloak/keycloak.yaml | 143 ++++++++++++++++++ stacks/stacks-v2.yaml | 4 +- 4 files changed, 194 insertions(+), 4 deletions(-) create mode 100644 stacks/jupyterhub-keycloak/keycloak-serviceaccount.yaml create mode 100644 stacks/jupyterhub-keycloak/keycloak.yaml diff --git a/stacks/jupyterhub-keycloak/README.md b/stacks/jupyterhub-keycloak/README.md index 7790ca49..f02329a3 100644 --- a/stacks/jupyterhub-keycloak/README.md +++ b/stacks/jupyterhub-keycloak/README.md @@ -5,7 +5,16 @@ Deploy the scripts: ```shell stackablectl stack install jupyterhub-keycloak --release dev -s stacks/stacks-v2.yaml -# deploy jhub by extracting the values from the jupyterhub.yaml +# deploy jupyterhub by extracting the values from the jupyterhub.yaml export TARGET_FILE=stacks/jupyterhub-keycloak/jupyterhub.yaml -helm upgrade --install $(yq '.releaseName' $TARGET_FILE) $(yq '.name' $TARGET_FILE) --repo $(yq '.repo.url' $TARGET_FILE) --version $(yq '.version' $TARGET_FILE) -f <(yq '.options' $TARGET_FILE) +KEYCLOAK_ADDRESS=$(kubectl get cm keycloak-address -n default -o jsonpath='{.data.address}') + +helm upgrade --install $(yq '.releaseName' $TARGET_FILE) $(yq '.name' $TARGET_FILE) \ +--repo $(yq '.repo.url' $TARGET_FILE) \ +--version $(yq '.version' $TARGET_FILE) \ +-f <(yq '.options' $TARGET_FILE) + +# --set hub.config.GenericOAuthenticator.authorize_url="http://$KEYCLOAK_ADDRESS/realms/demo/protocol/openid-connect/auth" \ +# --set hub.config.GenericOAuthenticator.token_url="http://$KEYCLOAK_ADDRESS/realms/demo/protocol/openid-connect/token" \ +# --set hub.config.GenericOAuthenticator.userdata_url="http://$KEYCLOAK_ADDRESS/realms/demo/protocol/openid-connect/userinfo" \ ``` diff --git a/stacks/jupyterhub-keycloak/keycloak-serviceaccount.yaml b/stacks/jupyterhub-keycloak/keycloak-serviceaccount.yaml new file mode 100644 index 00000000..43a5837a --- /dev/null +++ b/stacks/jupyterhub-keycloak/keycloak-serviceaccount.yaml @@ -0,0 +1,38 @@ +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: keycloak-serviceaccount + namespace: default +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: keycloak-clusterrolebinding +subjects: + - kind: ServiceAccount + name: keycloak-serviceaccount + namespace: default +roleRef: + kind: ClusterRole + name: keycloak-clusterrole + apiGroup: rbac.authorization.k8s.io +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: keycloak-clusterrole +rules: + - apiGroups: + - "" + resources: + - nodes + - services + - endpoints + - configmaps + verbs: + - get + - list + - watch + - create + - patch diff --git a/stacks/jupyterhub-keycloak/keycloak.yaml b/stacks/jupyterhub-keycloak/keycloak.yaml new file mode 100644 index 00000000..2957d7a9 --- /dev/null +++ b/stacks/jupyterhub-keycloak/keycloak.yaml @@ -0,0 +1,143 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: keycloak + labels: + app: keycloak +spec: + replicas: 1 + selector: + matchLabels: + app: keycloak + template: + metadata: + labels: + app: keycloak + spec: + containers: + - name: keycloak + resources: {} + image: quay.io/keycloak/keycloak:26.0.5 + args: + - start + - --hostname-strict=false + - --https-key-store-file=/tls/keystore.p12 + - --https-key-store-password=changeit + - --import-realm + env: + - name: KEYCLOAK_ADMIN + value: admin + - name: KEYCLOAK_ADMIN_PASSWORD + valueFrom: + secretKeyRef: + name: keycloak-admin-credentials + key: admin + ports: + - name: https + containerPort: 8443 + readinessProbe: + httpGet: + scheme: HTTPS + path: /realms/master + port: https + volumeMounts: + - name: data + mountPath: /opt/keycloak/data/ + - name: realm-config + mountPath: /opt/keycloak/data/import + - name: tls + mountPath: /tls/ + - name: create-configmap + resources: {} + image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable0.0.0-dev + command: ["/bin/bash", "-c"] + args: + - | + pid= + trap 'echo SIGINT; [[ $pid ]] && kill $pid; exit' SIGINT + trap 'echo SIGTERM; [[ $pid ]] && kill $pid; exit' SIGTERM + + while : + do + echo "Determining Keycloak public reachable address" + KEYCLOAK_ADDRESS=$(kubectl get svc keycloak -o json | jq -r --argfile endpoints <(kubectl get endpoints keycloak -o json) --argfile nodes <(kubectl get nodes -o json) '($nodes.items[] | select(.metadata.name == $endpoints.subsets[].addresses[].nodeName) | .status.addresses | map(select(.type == "ExternalIP" or .type == "InternalIP")) | min_by(.type) | .address | tostring) + ":" + (.spec.ports[] | select(.name == "https") | .nodePort | tostring)') + echo "Found Keycloak running at $KEYCLOAK_ADDRESS" + + if [ ! -z "$KEYCLOAK_ADDRESS" ]; then + KEYCLOAK_HOSTNAME="$(echo $KEYCLOAK_ADDRESS | grep -oP '^[^:]+')" + KEYCLOAK_PORT="$(echo $KEYCLOAK_ADDRESS | grep -oP '[0-9]+$')" + + cat << EOF | kubectl apply -f - + apiVersion: v1 + kind: ConfigMap + metadata: + name: keycloak-address + data: + address: "$KEYCLOAK_HOSTNAME:$KEYCLOAK_PORT" + EOF + fi + + sleep 30 & pid=$! + wait + done + securityContext: + fsGroup: 1000 + runAsGroup: 1000 + runAsUser: 1000 + volumes: + - name: data + persistentVolumeClaim: + claimName: keycloak-data + - name: realm-config + secret: + secretName: keycloak-realm-config + - name: tls + ephemeral: + volumeClaimTemplate: + metadata: + annotations: + secrets.stackable.tech/class: tls + secrets.stackable.tech/format: tls-pkcs12 + secrets.stackable.tech/format.compatibility.tls-pkcs12.password: changeit + secrets.stackable.tech/scope: service=keycloak,node + spec: + storageClassName: secrets.stackable.tech + accessModes: + - ReadWriteOnce + resources: + requests: + storage: "1" + serviceAccountName: keycloak-serviceaccount +--- +apiVersion: v1 +kind: Service +metadata: + name: keycloak + labels: + app: keycloak +spec: + type: NodePort + selector: + app: keycloak + ports: + - name: https + port: 8443 + targetPort: 8443 +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + name: keycloak-data +spec: + accessModes: [ReadWriteOnce] + resources: + requests: + storage: 1Gi +--- +apiVersion: v1 +kind: Secret +metadata: + name: keycloak-admin-credentials +stringData: + admin: "{{ keycloakAdminPassword }}" diff --git a/stacks/stacks-v2.yaml b/stacks/stacks-v2.yaml index 9727c63b..6eea9136 100644 --- a/stacks/stacks-v2.yaml +++ b/stacks/stacks-v2.yaml @@ -666,9 +666,9 @@ stacks: memory: 9010Mi pvc: 24Gi manifests: - - plainYaml: stacks/_templates/keycloak-serviceaccount.yaml + - plainYaml: stacks/jupyterhub-keycloak/keycloak-serviceaccount.yaml - plainYaml: stacks/jupyterhub-keycloak/keycloak-realm-config.yaml - - plainYaml: stacks/_templates/keycloak.yaml + - plainYaml: stacks/jupyterhub-keycloak/keycloak.yaml parameters: - name: keycloakAdminPassword description: Password of the Keycloak admin user From c41f309e903f1d3b55c755a72570088005958012 Mon Sep 17 00:00:00 2001 From: Andrew Kenworthy Date: Wed, 19 Feb 2025 17:35:33 +0100 Subject: [PATCH 14/37] removed unnecessary settings --- stacks/jupyterhub-keycloak/jupyterhub.yaml | 23 ++++++---------------- 1 file changed, 6 insertions(+), 17 deletions(-) diff --git a/stacks/jupyterhub-keycloak/jupyterhub.yaml b/stacks/jupyterhub-keycloak/jupyterhub.yaml index fb616d94..7be0657e 100644 --- a/stacks/jupyterhub-keycloak/jupyterhub.yaml +++ b/stacks/jupyterhub-keycloak/jupyterhub.yaml @@ -14,24 +14,17 @@ options: GenericOAuthenticator: client_id: jupyterhub client_secret: jupyterhubjupyterhub - oauth_callback_url: http://172.19.0.3:32475/hub/oauth_callback - authorize_url: https://172.19.0.3:31084/realms/demo/protocol/openid-connect/auth - token_url: https://172.19.0.3:31084/realms/demo/protocol/openid-connect/token - userdata_url: https://172.19.0.3:31084/realms/demo/protocol/openid-connect/userinfo + # TODO/FIX: these urls are dynamic (and need to be updated here once keycloak is running) + oauth_callback_url: http://172.19.0.3:30619/hub/oauth_callback + authorize_url: https://172.19.0.3:31438/realms/demo/protocol/openid-connect/auth + token_url: https://172.19.0.3:31438/realms/demo/protocol/openid-connect/token + userdata_url: https://172.19.0.3:31438/realms/demo/protocol/openid-connect/userinfo username_claim: preferred_username - tls_ca_path: /etc/ssl/certs/ca-certificates.crt scope: - openid - enable_pkce: False JupyterHub: authenticator_class: generic-oauth extraEnv: - # Not sure if all of these are necessary - CURL_SSL_BACKEND: openssl # https://stackoverflow.com/a/76605700 - PYCURL_SSL_LIBRARY: openssl - CURLOPT_SSL_VERIFYPEER: "false" - CURLOPT_SSL_VERIFYHOST: "false" - OAUTH2_TLS_VERIFY: "false" CACERT: /etc/ssl/certs/ca-certificates.crt CERT: /etc/ssl/certs/ca-certificates.crt CURLOPT_CAINFO: /etc/ssl/certs/ca-certificates.crt @@ -51,11 +44,7 @@ options: storage: "1" extraVolumeMounts: - name: tls-ca-cert - mountPath: /tls - - name: tls-ca-cert - mountPath: /etc/ssl/certs/keycloak-ca.crt - subPath: ca.crt - - name: tls-ca-cert + # Alternative: mount to another filename in this folder and call update-ca-certificates mountPath: /etc/ssl/certs/ca-certificates.crt subPath: ca.crt - name: tls-ca-cert From f6d22a90f53e3695190e97ce9bb25c800bc9032e Mon Sep 17 00:00:00 2001 From: Andrew Kenworthy Date: Thu, 20 Feb 2025 10:51:59 +0100 Subject: [PATCH 15/37] specify ports --- stacks/jupyterhub-keycloak/jupyterhub.yaml | 10 ++++++---- stacks/jupyterhub-keycloak/keycloak.yaml | 1 + 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/stacks/jupyterhub-keycloak/jupyterhub.yaml b/stacks/jupyterhub-keycloak/jupyterhub.yaml index 7be0657e..8228d28c 100644 --- a/stacks/jupyterhub-keycloak/jupyterhub.yaml +++ b/stacks/jupyterhub-keycloak/jupyterhub.yaml @@ -15,10 +15,10 @@ options: client_id: jupyterhub client_secret: jupyterhubjupyterhub # TODO/FIX: these urls are dynamic (and need to be updated here once keycloak is running) - oauth_callback_url: http://172.19.0.3:30619/hub/oauth_callback - authorize_url: https://172.19.0.3:31438/realms/demo/protocol/openid-connect/auth - token_url: https://172.19.0.3:31438/realms/demo/protocol/openid-connect/token - userdata_url: https://172.19.0.3:31438/realms/demo/protocol/openid-connect/userinfo + oauth_callback_url: http://172.19.0.3:31095/hub/oauth_callback + authorize_url: https://172.19.0.3:31093/realms/demo/protocol/openid-connect/auth + token_url: https://172.19.0.3:31093/realms/demo/protocol/openid-connect/token + userdata_url: https://172.19.0.3:31093/realms/demo/protocol/openid-connect/userinfo username_claim: preferred_username scope: - openid @@ -55,6 +55,8 @@ options: proxy: service: type: NodePort + nodePorts: + http: 31095 rbac: create: true prePuller: diff --git a/stacks/jupyterhub-keycloak/keycloak.yaml b/stacks/jupyterhub-keycloak/keycloak.yaml index 2957d7a9..6cfcbbb8 100644 --- a/stacks/jupyterhub-keycloak/keycloak.yaml +++ b/stacks/jupyterhub-keycloak/keycloak.yaml @@ -124,6 +124,7 @@ spec: - name: https port: 8443 targetPort: 8443 + nodePort: 31093 --- apiVersion: v1 kind: PersistentVolumeClaim From 697a0a86b9f1d4d32734d99a9b221f64ef6c46ee Mon Sep 17 00:00:00 2001 From: Andrew Kenworthy Date: Thu, 20 Feb 2025 11:45:56 +0100 Subject: [PATCH 16/37] add jupyterhub.yaml to stack --- stacks/jupyterhub-keycloak/README.md | 13 ------------- stacks/jupyterhub-keycloak/jupyterhub.yaml | 1 - stacks/stacks-v2.yaml | 1 + 3 files changed, 1 insertion(+), 14 deletions(-) diff --git a/stacks/jupyterhub-keycloak/README.md b/stacks/jupyterhub-keycloak/README.md index f02329a3..0c6c804a 100644 --- a/stacks/jupyterhub-keycloak/README.md +++ b/stacks/jupyterhub-keycloak/README.md @@ -4,17 +4,4 @@ Deploy the scripts: ```shell stackablectl stack install jupyterhub-keycloak --release dev -s stacks/stacks-v2.yaml - -# deploy jupyterhub by extracting the values from the jupyterhub.yaml -export TARGET_FILE=stacks/jupyterhub-keycloak/jupyterhub.yaml -KEYCLOAK_ADDRESS=$(kubectl get cm keycloak-address -n default -o jsonpath='{.data.address}') - -helm upgrade --install $(yq '.releaseName' $TARGET_FILE) $(yq '.name' $TARGET_FILE) \ ---repo $(yq '.repo.url' $TARGET_FILE) \ ---version $(yq '.version' $TARGET_FILE) \ --f <(yq '.options' $TARGET_FILE) - -# --set hub.config.GenericOAuthenticator.authorize_url="http://$KEYCLOAK_ADDRESS/realms/demo/protocol/openid-connect/auth" \ -# --set hub.config.GenericOAuthenticator.token_url="http://$KEYCLOAK_ADDRESS/realms/demo/protocol/openid-connect/token" \ -# --set hub.config.GenericOAuthenticator.userdata_url="http://$KEYCLOAK_ADDRESS/realms/demo/protocol/openid-connect/userinfo" \ ``` diff --git a/stacks/jupyterhub-keycloak/jupyterhub.yaml b/stacks/jupyterhub-keycloak/jupyterhub.yaml index 8228d28c..2c269684 100644 --- a/stacks/jupyterhub-keycloak/jupyterhub.yaml +++ b/stacks/jupyterhub-keycloak/jupyterhub.yaml @@ -14,7 +14,6 @@ options: GenericOAuthenticator: client_id: jupyterhub client_secret: jupyterhubjupyterhub - # TODO/FIX: these urls are dynamic (and need to be updated here once keycloak is running) oauth_callback_url: http://172.19.0.3:31095/hub/oauth_callback authorize_url: https://172.19.0.3:31093/realms/demo/protocol/openid-connect/auth token_url: https://172.19.0.3:31093/realms/demo/protocol/openid-connect/token diff --git a/stacks/stacks-v2.yaml b/stacks/stacks-v2.yaml index 6eea9136..2297c775 100644 --- a/stacks/stacks-v2.yaml +++ b/stacks/stacks-v2.yaml @@ -669,6 +669,7 @@ stacks: - plainYaml: stacks/jupyterhub-keycloak/keycloak-serviceaccount.yaml - plainYaml: stacks/jupyterhub-keycloak/keycloak-realm-config.yaml - plainYaml: stacks/jupyterhub-keycloak/keycloak.yaml + - helmChart: stacks/jupyterhub-keycloak/jupyterhub.yaml parameters: - name: keycloakAdminPassword description: Password of the Keycloak admin user From 396705fa436f01abb5ef70a0520939853475981a Mon Sep 17 00:00:00 2001 From: Andrew Kenworthy Date: Tue, 25 Feb 2025 14:48:01 +0100 Subject: [PATCH 17/37] wip: working nb/spark combo --- demos/jupyterhub-keycloak/load-gas-data.yaml | 21 + stacks/jupyterhub-keycloak/README.md | 2 + stacks/jupyterhub-keycloak/jupyterhub.yaml | 84 +++ stacks/jupyterhub-keycloak/process-s3.ipynb | 582 ++++++++++++++++++ .../jupyterhub-keycloak/serviceaccount.yaml | 35 ++ .../spark_driver_service.yaml | 23 + stacks/stacks-v2.yaml | 7 + 7 files changed, 754 insertions(+) create mode 100644 demos/jupyterhub-keycloak/load-gas-data.yaml create mode 100644 stacks/jupyterhub-keycloak/process-s3.ipynb create mode 100644 stacks/jupyterhub-keycloak/serviceaccount.yaml create mode 100644 stacks/jupyterhub-keycloak/spark_driver_service.yaml diff --git a/demos/jupyterhub-keycloak/load-gas-data.yaml b/demos/jupyterhub-keycloak/load-gas-data.yaml new file mode 100644 index 00000000..c230a1c1 --- /dev/null +++ b/demos/jupyterhub-keycloak/load-gas-data.yaml @@ -0,0 +1,21 @@ +--- +apiVersion: batch/v1 +kind: Job +metadata: + name: load-gas-data +spec: + template: + spec: + containers: + - name: load-gas-data + image: "bitnami/minio:2022-debian-10" + command: ["bash", "-c", "cd /tmp; curl -O https://repo.stackable.tech/repository/misc/datasets/gas-sensor-data/20160930_203718.csv && mc --insecure alias set minio http://minio:9000/ $(cat /minio-s3-credentials/accessKey) $(cat /minio-s3-credentials/secretKey) && mc cp 20160930_203718.csv minio/demo/gas-sensor/raw/;"] + volumeMounts: + - name: minio-s3-credentials + mountPath: /minio-s3-credentials + volumes: + - name: minio-s3-credentials + secret: + secretName: minio-s3-credentials + restartPolicy: OnFailure + backoffLimit: 50 diff --git a/stacks/jupyterhub-keycloak/README.md b/stacks/jupyterhub-keycloak/README.md index 0c6c804a..082ee92f 100644 --- a/stacks/jupyterhub-keycloak/README.md +++ b/stacks/jupyterhub-keycloak/README.md @@ -4,4 +4,6 @@ Deploy the scripts: ```shell stackablectl stack install jupyterhub-keycloak --release dev -s stacks/stacks-v2.yaml + +kubectl apply -f ./demos/jupyterhub-keycloak/load-gas-data.yaml ``` diff --git a/stacks/jupyterhub-keycloak/jupyterhub.yaml b/stacks/jupyterhub-keycloak/jupyterhub.yaml index 2c269684..583e726d 100644 --- a/stacks/jupyterhub-keycloak/jupyterhub.yaml +++ b/stacks/jupyterhub-keycloak/jupyterhub.yaml @@ -49,6 +49,57 @@ options: - name: tls-ca-cert mountPath: /usr/local/lib/python3.12/site-packages/certifi/cacert.pem subPath: ca.crt + extraConfig: + 01-drop-security-context-hook: | + from kubespawner import KubeSpawner + + async def modify_pod_hook(spawner: KubeSpawner, pod: dict): + pod.spec.security_context = None + for container in pod.spec.containers: + container.security_context = None + + # JupyterHub does add weird stuff that requires NET_ADMIN capability, which we don't need + pod.spec.init_containers = [] + + return pod + + c.KubeSpawner.modify_pod_hook = modify_pod_hook + 02-create-spark-driver-service-hook: | + # Thanks to https://github.com/jupyterhub/kubespawner/pull/644 + from jupyterhub.utils import exponential_backoff + from kubespawner import KubeSpawner + from kubespawner.objects import make_owner_reference + from kubernetes_asyncio.client.models import V1ServicePort + from functools import partial + + async def after_pod_created_hook(spawner: KubeSpawner, pod: dict): + owner_reference = make_owner_reference( + pod["metadata"]["name"], pod["metadata"]["uid"] + ) + service_manifest = spawner.get_service_manifest(owner_reference) + + service_manifest.spec.type = "ClusterIP" + service_manifest.spec.clusterIP = "None" # Headless Services is all we need + service_manifest.spec.ports += [ + V1ServicePort(name='spark-ui', port=4040, target_port=4040), + V1ServicePort(name='spark-driver', port=2222, target_port=2222), + V1ServicePort(name='spark-block-manager', port=7777, target_port=7777) + ] + + await exponential_backoff( + partial( + spawner._ensure_not_exists, + "service", + service_manifest.metadata.name, + ), + f"Failed to delete service {service_manifest.metadata.name}", + ) + await exponential_backoff( + partial(spawner._make_create_resource_request, "service", service_manifest), + f"Failed to create service {service_manifest.metadata.name}", + ) + + c.KubeSpawner.after_pod_created_hook = after_pod_created_hook service: type: NodePort proxy: @@ -68,6 +119,7 @@ options: enabled: false singleuser: cmd: null + serviceAccountName: spark networkPolicy: enabled: false extraLabels: @@ -124,7 +176,39 @@ options: image: display_name: Image choices: + "jupyter/pyspark-notebook:python-3.8": + display_name: "jupyter/pyspark-notebook:python-3.8" + kubespawner_override: + image: "jupyter/pyspark-notebook:python-3.8" "jupyter/pyspark-notebook:python-3.9": display_name: "jupyter/pyspark-notebook:python-3.9" kubespawner_override: image: "jupyter/pyspark-notebook:python-3.9" + "jupyter/pyspark-notebook:python-3.11": + display_name: "jupyter/pyspark-notebook:python-3.11" + kubespawner_override: + image: "jupyter/pyspark-notebook:python-3.11" + "quay.io/jupyter/pyspark-notebook:python-3.11.7": + display_name: "quay.io/jupyter/pyspark-notebook:python-3.11.7" + kubespawner_override: + image: "quay.io/jupyter/pyspark-notebook:python-3.11.7" + "quay.io/jupyter/pyspark-notebook:python-3.11.8": + display_name: "quay.io/jupyter/pyspark-notebook:python-3.11.8" + kubespawner_override: + image: "quay.io/jupyter/pyspark-notebook:python-3.11.8" + "quay.io/jupyter/pyspark-notebook:python-3.11.9": + display_name: "quay.io/jupyter/pyspark-notebook:python-3.11.9" + kubespawner_override: + image: "quay.io/jupyter/pyspark-notebook:python-3.11.9" + "quay.io/jupyter/pyspark-notebook:spark-3.5.0": + display_name: "quay.io/jupyter/pyspark-notebook:spark-3.5.0" + kubespawner_override: + image: "quay.io/jupyter/pyspark-notebook:spark-3.5.0" + "quay.io/jupyter/pyspark-notebook:spark-3.5.1": + display_name: "quay.io/jupyter/pyspark-notebook:spark-3.5.1" + kubespawner_override: + image: "quay.io/jupyter/pyspark-notebook:spark-3.5.1" + "quay.io/jupyter/pyspark-notebook:spark-3.5.2": + display_name: "quay.io/jupyter/pyspark-notebook:spark-3.5.2" + kubespawner_override: + image: "quay.io/jupyter/pyspark-notebook:spark-3.5.2" diff --git a/stacks/jupyterhub-keycloak/process-s3.ipynb b/stacks/jupyterhub-keycloak/process-s3.ipynb new file mode 100644 index 00000000..74199ee2 --- /dev/null +++ b/stacks/jupyterhub-keycloak/process-s3.ipynb @@ -0,0 +1,582 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "id": "9b2def64-7880-40b7-bf5d-2935d81d1fa1", + "metadata": {}, + "outputs": [], + "source": [ + "from pyspark.sql import SparkSession\n", + "from pyspark.sql.functions import dayofweek, to_date, to_timestamp, year, hour, minute, month, when, dayofmonth, dayofweek\n", + "from pyspark.sql.functions import concat_ws, lpad, lit\n", + "from pyspark.sql.functions import lag\n", + "from pyspark.sql.window import Window\n", + "from pyspark.sql import functions, types\n", + "\n", + "#from sklearn.ensemble import IsolationForest\n", + "#from sklearn.preprocessing import StandardScaler\n", + "#from sklearn.decomposition import PCA\n", + "\n", + "#import pandas as pd\n", + "import os\n", + "\n", + "%matplotlib inline\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "88015d8c-ef44-45af-badc-719f8f8ec366", + "metadata": {}, + "outputs": [], + "source": [ + "# Modify this please if deploying a demo using a non-default product namespace\n", + "NAMESPACE: str = \"default\"" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "06b8c133-6eb5-4981-8709-9168923db4d0", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Found file: demo/gas-sensor/raw/20160930_203718.csv\n" + ] + } + ], + "source": [ + "# Manual check via pyarrow.fs\n", + "import pyarrow.fs as fs\n", + "s3 = fs.S3FileSystem(endpoint_override=\"http://minio:9000/\", access_key=\"admin\", secret_key=\"adminadmin\", scheme=\"http\")\n", + "files = s3.get_file_info(fs.FileSelector(\"demo/gas-sensor/raw/\", recursive=True))\n", + "for f in files:\n", + " print(\"Found file:\", f.path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b8f37284", + "metadata": {}, + "outputs": [], + "source": [ + "! ls -al /usr/local/spark/jars | grep spark-core\n", + "! python3 -V\n", + "! java --version\n", + "! pyspark --version" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "0c19ab89-013d-4d2f-8243-5b48e3337c8a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Spark version: 3.5.1\n", + "+----+----+\n", + "|col1|col2|\n", + "+----+----+\n", + "| a| 1|\n", + "| b| 2|\n", + "+----+----+\n", + "\n" + ] + } + ], + "source": [ + "from pyspark.sql import SparkSession\n", + "\n", + "spark = SparkSession.builder.appName(\"local-test\").master(\"local[*]\").getOrCreate()\n", + "print(\"Spark version:\", spark.version)\n", + "df = spark.createDataFrame([(\"a\", 1), (\"b\", 2)], [\"col1\", \"col2\"])\n", + "df.show()\n", + "spark.stop()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "606363ba-0c97-4156-af1c-c8ad54745cfb", + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "from pyspark.sql import SparkSession\n", + "\n", + "NAMESPACE = os.environ.get(\"NAMESPACE\", \"default\")\n", + "POD_NAME = os.environ.get(\"HOSTNAME\", f\"jupyter-{os.environ.get('USER', 'default')}-{NAMESPACE}\")\n", + "\n", + "# works with python-3.11 notebook image\n", + "#EXECUTOR_IMAGE = \"oci.stackable.tech/sdp/spark-k8s:3.5.0-stackable24.3.0\" \n", + "\n", + "# jars differ in size, 17.0.12 vs. 17.0.13, 3.11.10 vs. 3.11.9\n", + "#SerializableBuffer conflict\n", + "#EXECUTOR_IMAGE = \"oci.stackable.tech/sdp/spark-k8s:3.5.2-stackable24.11.1\" \n", + "\n", + "# java, jars match\n", + "#Python in worker has different version (3, 10) than that in driver 3.11, PySpark cannot run with different minor versions. \n", + "#EXECUTOR_IMAGE = \"apache/spark:3.5.2-java17-python3\" \n", + "\n", + "# java, jars match\n", + "#Python in worker has different version (3, 10) than that in driver 3.11, PySpark cannot run with different minor versions. \n", + "#EXECUTOR_IMAGE = \"spark:3.5.2-scala2.12-java17-python3-ubuntu\" \n", + "\n", + "#Python in worker has different version (3, 12) than that in driver 3.11, PySpark cannot run with different minor versions.\n", + "#EXECUTOR_IMAGE = \"bitnami/spark:3.5.2\"\n", + "\n", + "# custom image with python 3.11 - works!\n", + "# based off: spark:3.5.2-scala2.12-java17-ubuntu\n", + "# see: \n", + "EXECUTOR_IMAGE = \"spark:3.5.2-python311\" \n", + "\n", + "spark = (\n", + " SparkSession.builder\n", + " .master(f'k8s://https://{os.environ[\"KUBERNETES_SERVICE_HOST\"]}:{os.environ[\"KUBERNETES_SERVICE_PORT\"]}')\n", + " .appName(\"process-s3-data\")\n", + " .config(\"spark.kubernetes.container.image\", EXECUTOR_IMAGE)\n", + " .config(\"spark.kubernetes.container.image.pullPolicy\", \"IfNotPresent\")\n", + " .config(\"spark.kubernetes.namespace\", NAMESPACE)\n", + " .config(\"spark.kubernetes.authenticate.driver.serviceAccountName\", \"spark\")\n", + " .config(\"spark.kubernetes.authenticate.executor.serviceAccountName\", \"spark\")\n", + " #.config(\"spark.driver.host\", f\"driver-service.{NAMESPACE}.svc.cluster.local\")\n", + " .config(\"spark.driver.port\", \"2222\")\n", + " .config(\"spark.driver.blockManager.port\", \"7777\")\n", + " #.config(\"spark.driver.bindAddress\", \"0.0.0.0\")\n", + " .config(\"spark.executor.instances\", \"1\")\n", + " .config(\"spark.executor.memory\", \"1g\")\n", + " .config(\"spark.executor.cores\", \"1\")\n", + " # bitnami. See https://github.com/bitnami/containers/issues/52698#issuecomment-2275913474\n", + " #.config(\"spark.executorEnv.LD_PRELOAD\", \"/opt/bitnami/common/lib/libnss_wrapper.so\")\n", + " #.config(\"spark.jars\", \"/usr/local/spark/jars/spark-core_2.12-3.5.2.jar\")\n", + " #.config(\"spark.driver.extraClassPath\", \"/usr/local/spark/jars/spark-core_2.12-3.5.2.jar\")\n", + " #.config(\"spark.executor.extraClassPath\", \"/stackable/spark/spark-core_2.12-3.5.2.jar\")\n", + " #.config(\"spark.jars.packages\", \"org.apache.hadoop:hadoop-aws:3.3.6,org.apache.hadoop:hadoop-common:3.3.6,com.amazonaws:aws-java-sdk-bundle:1.12.767\")\n", + " #.config(\"spark.driver.extraClassPath\", \"/usr/local/spark/jars/spark-core_2.12-3.5.1.jar:/usr/local/spark/jars/spark-sql_2.12-3.5.1.jar:/usr/local/spark/jars/hadoop-aws-3.3.6.jar:/usr/local/spark/jars/hadoop-common-3.3.6.jar\")\n", + " #.config(\"spark.executor.extraClassPath\", \"/opt/spark/jars/spark-core_2.12-3.5.1.jar:/opt/spark/jars/spark-sql_2.12-3.5.1.jar:/opt/spark/jars/hadoop-aws-3.3.6.jar:/opt/spark/jars/hadoop-common-3.3.6.jar\")\n", + " #.config(\"spark.hadoop.fs.s3a.endpoint\", \"http://minio:9000/\")\n", + " #.config(\"spark.hadoop.fs.s3a.path.style.access\", \"true\")\n", + " #.config(\"spark.hadoop.fs.s3a.access.key\", \"admin\")\n", + " #.config(\"spark.hadoop.fs.s3a.secret.key\", \"adminadmin\")\n", + " #.config(\"spark.hadoop.fs.s3a.aws.credentials.provider\", \"org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider\")\n", + " #.config(\"spark.submit.deployMode\", \"client\")\n", + " .config(\"spark.kubernetes.driver.pod.name\", POD_NAME)\n", + " # Log classloader source\n", + " #.config(\"spark.driver.extraJavaOptions\", \"-verbose:class\")\n", + " #.config(\"spark.executor.extraJavaOptions\", \"-verbose:class\")\n", + " .getOrCreate()\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3df1ab91-ab2e-49b0-a72f-164915e4ee80", + "metadata": {}, + "outputs": [], + "source": [ + "df = spark.createDataFrame([(\"a\", 1), (\"b\", 2)], [\"col1\", \"col2\"])\n", + "df.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "13a61f07-6b74-4e67-948c-503618a3b971", + "metadata": {}, + "outputs": [], + "source": [ + "spark.sparkContext.parallelize([1]).mapPartitions(log_classpath_simple).collect()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "09e6aa50-003e-4654-baad-21825ceea789", + "metadata": {}, + "outputs": [], + "source": [ + "# Test\n", + "print(\"Spark version:\", spark.version)\n", + "df = spark.createDataFrame([(\"a\", 1), (\"b\", 2)], [\"col1\", \"col2\"])\n", + "df.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ae9844b5-0709-4f0d-b2ec-679958d979d1", + "metadata": {}, + "outputs": [], + "source": [ + "spark = (\n", + " SparkSession\n", + " .builder\n", + " .master(f'k8s://https://{os.environ[\"KUBERNETES_SERVICE_HOST\"]}:{os.environ[\"KUBERNETES_SERVICE_PORT\"]}')\n", + " .config(\"spark.kubernetes.container.image\", \"oci.stackable.tech/sdp/spark-k8s:3.5.2-stackable24.11.1\")\n", + " #.config(\"spark.kubernetes.driver.container.image\", \"quay.io/jupyter/pyspark-notebook:python-3.11.8\")\n", + " .config(\"spark.driver.port\", \"2222\")\n", + " .config(\"spark.driver.blockManager.port\", \"7777\")\n", + " .config(\"spark.driver.host\", f\"driver-service.{NAMESPACE}.svc.cluster.local\")\n", + " .config(\"spark.driver.bindAddress\", \"0.0.0.0\")\n", + " .config(\"spark.kubernetes.namespace\", NAMESPACE)\n", + " .config(\"spark.kubernetes.authenticate.driver.serviceAccountName\", \"spark\")\n", + " .config(\"spark.kubernetes.authenticate.serviceAccountName\", \"spark\")\n", + " .config(\"spark.executor.instances\", \"1\")\n", + " .config(\"spark.kubernetes.container.image.pullPolicy\", \"IfNotPresent\")\n", + " #.config(\"spark.hadoop.fs.s3a.endpoint\", \"http://minio:9000/\")\n", + " #.config(\"spark.hadoop.fs.s3a.path.style.access\", \"true\") \n", + " #.config(\"spark.hadoop.fs.s3a.access.key\", \"admin\")\n", + " #.config(\"spark.hadoop.fs.s3a.secret.key\", \"adminadmin\") \n", + " #.config(\"spark.hadoop.fs.s3a.aws.credentials.provider\", \"org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider\")\n", + " #.config(\"spark.jars.packages\", \"org.apache.hadoop:hadoop-aws:3.3.6,org.apache.hadoop:hadoop-common:3.3.6,com.amazonaws:aws-java-sdk-bundle:1.12.767\")\n", + " .appName(\"process-s3-data\")\n", + " .getOrCreate()\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "9f8479cb-f216-4a8f-b9db-6da17ffebaa9", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Spark version: 3.5.1\n" + ] + } + ], + "source": [ + "# Verify Spark version\n", + "print(\"Spark version:\", spark.version)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "5c1d1980-a5a1-495c-8f5d-6adcb7904de9", + "metadata": {}, + "outputs": [ + { + "ename": "Py4JJavaError", + "evalue": "An error occurred while calling o107.showString.\n: org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 0.0 failed 4 times, most recent failure: Lost task 0.3 in stage 0.0 (TID 3) (10.244.0.154 executor 1): java.io.InvalidClassException: org.apache.spark.rdd.RDD; local class incompatible: stream classdesc serialVersionUID = 3516924559342767982, local class serialVersionUID = 823754013007382808\n\tat java.base/java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:560)\n\tat java.base/java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:2020)\n\tat java.base/java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1870)\n\tat java.base/java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:2020)\n\tat java.base/java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1870)\n\tat java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2201)\n\tat java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1687)\n\tat java.base/java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2496)\n\tat java.base/java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2390)\n\tat java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2228)\n\tat java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1687)\n\tat java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:489)\n\tat java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:447)\n\tat org.apache.spark.serializer.JavaDeserializationStream.readObject(JavaSerializer.scala:87)\n\tat org.apache.spark.serializer.JavaSerializerInstance.deserialize(JavaSerializer.scala:129)\n\tat org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:86)\n\tat org.apache.spark.TaskContext.runTaskWithListeners(TaskContext.scala:161)\n\tat org.apache.spark.scheduler.Task.run(Task.scala:141)\n\tat org.apache.spark.executor.Executor$TaskRunner.$anonfun$run$4(Executor.scala:620)\n\tat org.apache.spark.util.SparkErrorUtils.tryWithSafeFinally(SparkErrorUtils.scala:64)\n\tat org.apache.spark.util.SparkErrorUtils.tryWithSafeFinally$(SparkErrorUtils.scala:61)\n\tat org.apache.spark.util.Utils$.tryWithSafeFinally(Utils.scala:94)\n\tat org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:623)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)\n\tat java.base/java.lang.Thread.run(Thread.java:829)\n\nDriver stacktrace:\n\tat org.apache.spark.scheduler.DAGScheduler.failJobAndIndependentStages(DAGScheduler.scala:2856)\n\tat org.apache.spark.scheduler.DAGScheduler.$anonfun$abortStage$2(DAGScheduler.scala:2792)\n\tat org.apache.spark.scheduler.DAGScheduler.$anonfun$abortStage$2$adapted(DAGScheduler.scala:2791)\n\tat scala.collection.mutable.ResizableArray.foreach(ResizableArray.scala:62)\n\tat scala.collection.mutable.ResizableArray.foreach$(ResizableArray.scala:55)\n\tat scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:49)\n\tat org.apache.spark.scheduler.DAGScheduler.abortStage(DAGScheduler.scala:2791)\n\tat org.apache.spark.scheduler.DAGScheduler.$anonfun$handleTaskSetFailed$1(DAGScheduler.scala:1247)\n\tat org.apache.spark.scheduler.DAGScheduler.$anonfun$handleTaskSetFailed$1$adapted(DAGScheduler.scala:1247)\n\tat scala.Option.foreach(Option.scala:407)\n\tat org.apache.spark.scheduler.DAGScheduler.handleTaskSetFailed(DAGScheduler.scala:1247)\n\tat org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.doOnReceive(DAGScheduler.scala:3060)\n\tat org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.onReceive(DAGScheduler.scala:2994)\n\tat org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.onReceive(DAGScheduler.scala:2983)\n\tat org.apache.spark.util.EventLoop$$anon$1.run(EventLoop.scala:49)\n\tat org.apache.spark.scheduler.DAGScheduler.runJob(DAGScheduler.scala:989)\n\tat org.apache.spark.SparkContext.runJob(SparkContext.scala:2398)\n\tat org.apache.spark.SparkContext.runJob(SparkContext.scala:2419)\n\tat org.apache.spark.SparkContext.runJob(SparkContext.scala:2438)\n\tat org.apache.spark.sql.execution.SparkPlan.executeTake(SparkPlan.scala:530)\n\tat org.apache.spark.sql.execution.SparkPlan.executeTake(SparkPlan.scala:483)\n\tat org.apache.spark.sql.execution.CollectLimitExec.executeCollect(limit.scala:61)\n\tat org.apache.spark.sql.Dataset.collectFromPlan(Dataset.scala:4332)\n\tat org.apache.spark.sql.Dataset.$anonfun$head$1(Dataset.scala:3314)\n\tat org.apache.spark.sql.Dataset.$anonfun$withAction$2(Dataset.scala:4322)\n\tat org.apache.spark.sql.execution.QueryExecution$.withInternalError(QueryExecution.scala:546)\n\tat org.apache.spark.sql.Dataset.$anonfun$withAction$1(Dataset.scala:4320)\n\tat org.apache.spark.sql.execution.SQLExecution$.$anonfun$withNewExecutionId$6(SQLExecution.scala:125)\n\tat org.apache.spark.sql.execution.SQLExecution$.withSQLConfPropagated(SQLExecution.scala:201)\n\tat org.apache.spark.sql.execution.SQLExecution$.$anonfun$withNewExecutionId$1(SQLExecution.scala:108)\n\tat org.apache.spark.sql.SparkSession.withActive(SparkSession.scala:900)\n\tat org.apache.spark.sql.execution.SQLExecution$.withNewExecutionId(SQLExecution.scala:66)\n\tat org.apache.spark.sql.Dataset.withAction(Dataset.scala:4320)\n\tat org.apache.spark.sql.Dataset.head(Dataset.scala:3314)\n\tat org.apache.spark.sql.Dataset.take(Dataset.scala:3537)\n\tat org.apache.spark.sql.Dataset.getRows(Dataset.scala:280)\n\tat org.apache.spark.sql.Dataset.showString(Dataset.scala:315)\n\tat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)\n\tat java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\tat java.base/java.lang.reflect.Method.invoke(Method.java:568)\n\tat py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244)\n\tat py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:374)\n\tat py4j.Gateway.invoke(Gateway.java:282)\n\tat py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132)\n\tat py4j.commands.CallCommand.execute(CallCommand.java:79)\n\tat py4j.ClientServerConnection.waitForCommands(ClientServerConnection.java:182)\n\tat py4j.ClientServerConnection.run(ClientServerConnection.java:106)\n\tat java.base/java.lang.Thread.run(Thread.java:840)\nCaused by: java.io.InvalidClassException: org.apache.spark.rdd.RDD; local class incompatible: stream classdesc serialVersionUID = 3516924559342767982, local class serialVersionUID = 823754013007382808\n\tat java.base/java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:560)\n\tat java.base/java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:2020)\n\tat java.base/java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1870)\n\tat java.base/java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:2020)\n\tat java.base/java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1870)\n\tat java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2201)\n\tat java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1687)\n\tat java.base/java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2496)\n\tat java.base/java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2390)\n\tat java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2228)\n\tat java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1687)\n\tat java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:489)\n\tat java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:447)\n\tat org.apache.spark.serializer.JavaDeserializationStream.readObject(JavaSerializer.scala:87)\n\tat org.apache.spark.serializer.JavaSerializerInstance.deserialize(JavaSerializer.scala:129)\n\tat org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:86)\n\tat org.apache.spark.TaskContext.runTaskWithListeners(TaskContext.scala:161)\n\tat org.apache.spark.scheduler.Task.run(Task.scala:141)\n\tat org.apache.spark.executor.Executor$TaskRunner.$anonfun$run$4(Executor.scala:620)\n\tat org.apache.spark.util.SparkErrorUtils.tryWithSafeFinally(SparkErrorUtils.scala:64)\n\tat org.apache.spark.util.SparkErrorUtils.tryWithSafeFinally$(SparkErrorUtils.scala:61)\n\tat org.apache.spark.util.Utils$.tryWithSafeFinally(Utils.scala:94)\n\tat org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:623)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)\n\tat java.base/java.lang.Thread.run(Thread.java:829)\n", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mPy4JJavaError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[7], line 3\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;66;03m# Test minimal action\u001b[39;00m\n\u001b[1;32m 2\u001b[0m df \u001b[38;5;241m=\u001b[39m spark\u001b[38;5;241m.\u001b[39mcreateDataFrame([(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124ma\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;241m1\u001b[39m), (\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mb\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;241m2\u001b[39m)], [\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcol1\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcol2\u001b[39m\u001b[38;5;124m\"\u001b[39m])\n\u001b[0;32m----> 3\u001b[0m \u001b[43mdf\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mshow\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m/usr/local/spark/python/pyspark/sql/dataframe.py:945\u001b[0m, in \u001b[0;36mDataFrame.show\u001b[0;34m(self, n, truncate, vertical)\u001b[0m\n\u001b[1;32m 885\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mshow\u001b[39m(\u001b[38;5;28mself\u001b[39m, n: \u001b[38;5;28mint\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m20\u001b[39m, truncate: Union[\u001b[38;5;28mbool\u001b[39m, \u001b[38;5;28mint\u001b[39m] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m, vertical: \u001b[38;5;28mbool\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mFalse\u001b[39;00m) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 886\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Prints the first ``n`` rows to the console.\u001b[39;00m\n\u001b[1;32m 887\u001b[0m \n\u001b[1;32m 888\u001b[0m \u001b[38;5;124;03m .. versionadded:: 1.3.0\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 943\u001b[0m \u001b[38;5;124;03m name | Bob\u001b[39;00m\n\u001b[1;32m 944\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 945\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_show_string\u001b[49m\u001b[43m(\u001b[49m\u001b[43mn\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtruncate\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mvertical\u001b[49m\u001b[43m)\u001b[49m)\n", + "File \u001b[0;32m/usr/local/spark/python/pyspark/sql/dataframe.py:963\u001b[0m, in \u001b[0;36mDataFrame._show_string\u001b[0;34m(self, n, truncate, vertical)\u001b[0m\n\u001b[1;32m 957\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m PySparkTypeError(\n\u001b[1;32m 958\u001b[0m error_class\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mNOT_BOOL\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 959\u001b[0m message_parameters\u001b[38;5;241m=\u001b[39m{\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124marg_name\u001b[39m\u001b[38;5;124m\"\u001b[39m: \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mvertical\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124marg_type\u001b[39m\u001b[38;5;124m\"\u001b[39m: \u001b[38;5;28mtype\u001b[39m(vertical)\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__name__\u001b[39m},\n\u001b[1;32m 960\u001b[0m )\n\u001b[1;32m 962\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(truncate, \u001b[38;5;28mbool\u001b[39m) \u001b[38;5;129;01mand\u001b[39;00m truncate:\n\u001b[0;32m--> 963\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_jdf\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mshowString\u001b[49m\u001b[43m(\u001b[49m\u001b[43mn\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m20\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mvertical\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 964\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 965\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n", + "File \u001b[0;32m/usr/local/spark/python/lib/py4j-0.10.9.7-src.zip/py4j/java_gateway.py:1322\u001b[0m, in \u001b[0;36mJavaMember.__call__\u001b[0;34m(self, *args)\u001b[0m\n\u001b[1;32m 1316\u001b[0m command \u001b[38;5;241m=\u001b[39m proto\u001b[38;5;241m.\u001b[39mCALL_COMMAND_NAME \u001b[38;5;241m+\u001b[39m\\\n\u001b[1;32m 1317\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcommand_header \u001b[38;5;241m+\u001b[39m\\\n\u001b[1;32m 1318\u001b[0m args_command \u001b[38;5;241m+\u001b[39m\\\n\u001b[1;32m 1319\u001b[0m proto\u001b[38;5;241m.\u001b[39mEND_COMMAND_PART\n\u001b[1;32m 1321\u001b[0m answer \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgateway_client\u001b[38;5;241m.\u001b[39msend_command(command)\n\u001b[0;32m-> 1322\u001b[0m return_value \u001b[38;5;241m=\u001b[39m \u001b[43mget_return_value\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 1323\u001b[0m \u001b[43m \u001b[49m\u001b[43manswer\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgateway_client\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtarget_id\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mname\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1325\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m temp_arg \u001b[38;5;129;01min\u001b[39;00m temp_args:\n\u001b[1;32m 1326\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mhasattr\u001b[39m(temp_arg, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m_detach\u001b[39m\u001b[38;5;124m\"\u001b[39m):\n", + "File \u001b[0;32m/usr/local/spark/python/pyspark/errors/exceptions/captured.py:179\u001b[0m, in \u001b[0;36mcapture_sql_exception..deco\u001b[0;34m(*a, **kw)\u001b[0m\n\u001b[1;32m 177\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mdeco\u001b[39m(\u001b[38;5;241m*\u001b[39ma: Any, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkw: Any) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Any:\n\u001b[1;32m 178\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 179\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mf\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43ma\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkw\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 180\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m Py4JJavaError \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 181\u001b[0m converted \u001b[38;5;241m=\u001b[39m convert_exception(e\u001b[38;5;241m.\u001b[39mjava_exception)\n", + "File \u001b[0;32m/usr/local/spark/python/lib/py4j-0.10.9.7-src.zip/py4j/protocol.py:326\u001b[0m, in \u001b[0;36mget_return_value\u001b[0;34m(answer, gateway_client, target_id, name)\u001b[0m\n\u001b[1;32m 324\u001b[0m value \u001b[38;5;241m=\u001b[39m OUTPUT_CONVERTER[\u001b[38;5;28mtype\u001b[39m](answer[\u001b[38;5;241m2\u001b[39m:], gateway_client)\n\u001b[1;32m 325\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m answer[\u001b[38;5;241m1\u001b[39m] \u001b[38;5;241m==\u001b[39m REFERENCE_TYPE:\n\u001b[0;32m--> 326\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m Py4JJavaError(\n\u001b[1;32m 327\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mAn error occurred while calling \u001b[39m\u001b[38;5;132;01m{0}\u001b[39;00m\u001b[38;5;132;01m{1}\u001b[39;00m\u001b[38;5;132;01m{2}\u001b[39;00m\u001b[38;5;124m.\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39m\n\u001b[1;32m 328\u001b[0m \u001b[38;5;28mformat\u001b[39m(target_id, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m.\u001b[39m\u001b[38;5;124m\"\u001b[39m, name), value)\n\u001b[1;32m 329\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 330\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m Py4JError(\n\u001b[1;32m 331\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mAn error occurred while calling \u001b[39m\u001b[38;5;132;01m{0}\u001b[39;00m\u001b[38;5;132;01m{1}\u001b[39;00m\u001b[38;5;132;01m{2}\u001b[39;00m\u001b[38;5;124m. Trace:\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;132;01m{3}\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39m\n\u001b[1;32m 332\u001b[0m \u001b[38;5;28mformat\u001b[39m(target_id, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m.\u001b[39m\u001b[38;5;124m\"\u001b[39m, name, value))\n", + "\u001b[0;31mPy4JJavaError\u001b[0m: An error occurred while calling o107.showString.\n: org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 0.0 failed 4 times, most recent failure: Lost task 0.3 in stage 0.0 (TID 3) (10.244.0.154 executor 1): java.io.InvalidClassException: org.apache.spark.rdd.RDD; local class incompatible: stream classdesc serialVersionUID = 3516924559342767982, local class serialVersionUID = 823754013007382808\n\tat java.base/java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:560)\n\tat java.base/java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:2020)\n\tat java.base/java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1870)\n\tat java.base/java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:2020)\n\tat java.base/java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1870)\n\tat java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2201)\n\tat java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1687)\n\tat java.base/java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2496)\n\tat java.base/java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2390)\n\tat java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2228)\n\tat java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1687)\n\tat java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:489)\n\tat java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:447)\n\tat org.apache.spark.serializer.JavaDeserializationStream.readObject(JavaSerializer.scala:87)\n\tat org.apache.spark.serializer.JavaSerializerInstance.deserialize(JavaSerializer.scala:129)\n\tat org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:86)\n\tat org.apache.spark.TaskContext.runTaskWithListeners(TaskContext.scala:161)\n\tat org.apache.spark.scheduler.Task.run(Task.scala:141)\n\tat org.apache.spark.executor.Executor$TaskRunner.$anonfun$run$4(Executor.scala:620)\n\tat org.apache.spark.util.SparkErrorUtils.tryWithSafeFinally(SparkErrorUtils.scala:64)\n\tat org.apache.spark.util.SparkErrorUtils.tryWithSafeFinally$(SparkErrorUtils.scala:61)\n\tat org.apache.spark.util.Utils$.tryWithSafeFinally(Utils.scala:94)\n\tat org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:623)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)\n\tat java.base/java.lang.Thread.run(Thread.java:829)\n\nDriver stacktrace:\n\tat org.apache.spark.scheduler.DAGScheduler.failJobAndIndependentStages(DAGScheduler.scala:2856)\n\tat org.apache.spark.scheduler.DAGScheduler.$anonfun$abortStage$2(DAGScheduler.scala:2792)\n\tat org.apache.spark.scheduler.DAGScheduler.$anonfun$abortStage$2$adapted(DAGScheduler.scala:2791)\n\tat scala.collection.mutable.ResizableArray.foreach(ResizableArray.scala:62)\n\tat scala.collection.mutable.ResizableArray.foreach$(ResizableArray.scala:55)\n\tat scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:49)\n\tat org.apache.spark.scheduler.DAGScheduler.abortStage(DAGScheduler.scala:2791)\n\tat org.apache.spark.scheduler.DAGScheduler.$anonfun$handleTaskSetFailed$1(DAGScheduler.scala:1247)\n\tat org.apache.spark.scheduler.DAGScheduler.$anonfun$handleTaskSetFailed$1$adapted(DAGScheduler.scala:1247)\n\tat scala.Option.foreach(Option.scala:407)\n\tat org.apache.spark.scheduler.DAGScheduler.handleTaskSetFailed(DAGScheduler.scala:1247)\n\tat org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.doOnReceive(DAGScheduler.scala:3060)\n\tat org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.onReceive(DAGScheduler.scala:2994)\n\tat org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.onReceive(DAGScheduler.scala:2983)\n\tat org.apache.spark.util.EventLoop$$anon$1.run(EventLoop.scala:49)\n\tat org.apache.spark.scheduler.DAGScheduler.runJob(DAGScheduler.scala:989)\n\tat org.apache.spark.SparkContext.runJob(SparkContext.scala:2398)\n\tat org.apache.spark.SparkContext.runJob(SparkContext.scala:2419)\n\tat org.apache.spark.SparkContext.runJob(SparkContext.scala:2438)\n\tat org.apache.spark.sql.execution.SparkPlan.executeTake(SparkPlan.scala:530)\n\tat org.apache.spark.sql.execution.SparkPlan.executeTake(SparkPlan.scala:483)\n\tat org.apache.spark.sql.execution.CollectLimitExec.executeCollect(limit.scala:61)\n\tat org.apache.spark.sql.Dataset.collectFromPlan(Dataset.scala:4332)\n\tat org.apache.spark.sql.Dataset.$anonfun$head$1(Dataset.scala:3314)\n\tat org.apache.spark.sql.Dataset.$anonfun$withAction$2(Dataset.scala:4322)\n\tat org.apache.spark.sql.execution.QueryExecution$.withInternalError(QueryExecution.scala:546)\n\tat org.apache.spark.sql.Dataset.$anonfun$withAction$1(Dataset.scala:4320)\n\tat org.apache.spark.sql.execution.SQLExecution$.$anonfun$withNewExecutionId$6(SQLExecution.scala:125)\n\tat org.apache.spark.sql.execution.SQLExecution$.withSQLConfPropagated(SQLExecution.scala:201)\n\tat org.apache.spark.sql.execution.SQLExecution$.$anonfun$withNewExecutionId$1(SQLExecution.scala:108)\n\tat org.apache.spark.sql.SparkSession.withActive(SparkSession.scala:900)\n\tat org.apache.spark.sql.execution.SQLExecution$.withNewExecutionId(SQLExecution.scala:66)\n\tat org.apache.spark.sql.Dataset.withAction(Dataset.scala:4320)\n\tat org.apache.spark.sql.Dataset.head(Dataset.scala:3314)\n\tat org.apache.spark.sql.Dataset.take(Dataset.scala:3537)\n\tat org.apache.spark.sql.Dataset.getRows(Dataset.scala:280)\n\tat org.apache.spark.sql.Dataset.showString(Dataset.scala:315)\n\tat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)\n\tat java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\tat java.base/java.lang.reflect.Method.invoke(Method.java:568)\n\tat py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244)\n\tat py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:374)\n\tat py4j.Gateway.invoke(Gateway.java:282)\n\tat py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132)\n\tat py4j.commands.CallCommand.execute(CallCommand.java:79)\n\tat py4j.ClientServerConnection.waitForCommands(ClientServerConnection.java:182)\n\tat py4j.ClientServerConnection.run(ClientServerConnection.java:106)\n\tat java.base/java.lang.Thread.run(Thread.java:840)\nCaused by: java.io.InvalidClassException: org.apache.spark.rdd.RDD; local class incompatible: stream classdesc serialVersionUID = 3516924559342767982, local class serialVersionUID = 823754013007382808\n\tat java.base/java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:560)\n\tat java.base/java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:2020)\n\tat java.base/java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1870)\n\tat java.base/java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:2020)\n\tat java.base/java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1870)\n\tat java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2201)\n\tat java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1687)\n\tat java.base/java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2496)\n\tat java.base/java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2390)\n\tat java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2228)\n\tat java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1687)\n\tat java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:489)\n\tat java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:447)\n\tat org.apache.spark.serializer.JavaDeserializationStream.readObject(JavaSerializer.scala:87)\n\tat org.apache.spark.serializer.JavaSerializerInstance.deserialize(JavaSerializer.scala:129)\n\tat org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:86)\n\tat org.apache.spark.TaskContext.runTaskWithListeners(TaskContext.scala:161)\n\tat org.apache.spark.scheduler.Task.run(Task.scala:141)\n\tat org.apache.spark.executor.Executor$TaskRunner.$anonfun$run$4(Executor.scala:620)\n\tat org.apache.spark.util.SparkErrorUtils.tryWithSafeFinally(SparkErrorUtils.scala:64)\n\tat org.apache.spark.util.SparkErrorUtils.tryWithSafeFinally$(SparkErrorUtils.scala:61)\n\tat org.apache.spark.util.Utils$.tryWithSafeFinally(Utils.scala:94)\n\tat org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:623)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)\n\tat java.base/java.lang.Thread.run(Thread.java:829)\n" + ] + } + ], + "source": [ + "# Test minimal action\n", + "df = spark.createDataFrame([(\"a\", 1), (\"b\", 2)], [\"col1\", \"col2\"])\n", + "df.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "548f86fd-ea28-4eee-9b76-cc047b42713a", + "metadata": {}, + "outputs": [], + "source": [ + "# Write a test CSV\n", + "test_df = spark.createDataFrame([(\"a\", 1), (\"b\", 2)], [\"col1\", \"col2\"])\n", + "test_df.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "35861943-7586-434f-a03d-31ebf03b59d7", + "metadata": {}, + "outputs": [], + "source": [ + "test_df.write.csv(\"s3a://demo/gas-sensor/test/\", mode=\"overwrite\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a319fa38-96de-4c8a-96e0-8e47ef5a7561", + "metadata": {}, + "outputs": [], + "source": [ + "# Read it back\n", + "df = spark.read.csv(\"s3a://demo/gas-sensor/test/\")\n", + "df.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "4a5f2667-6596-45ca-bb7b-25a6bfdf5ab7", + "metadata": {}, + "outputs": [], + "source": [ + "print(spark.version)\n", + "print(spark._jsc.hadoopConfiguration().get(\"hadoop.version\"))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "6a34fecf-bf29-4b9e-8156-942be445c96c", + "metadata": {}, + "outputs": [], + "source": [ + "df = spark.read.csv(\"s3a://demo/gas-sensor/raw/20160930_203718.csv\")\n", + "df.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "9cdaef7c-5023-447d-b9ed-e22c686e084d", + "metadata": {}, + "outputs": [], + "source": [ + "# Get JARs using toString() on the Vector\n", + "jars_vector = spark.sparkContext._jsc.sc().listJars()\n", + "jars_str = jars_vector.toString()\n", + "print(\"Loaded JARs (raw string):\")\n", + "print(jars_str)\n", + "\n", + "# Verify Spark version\n", + "print(\"Spark version:\", spark.version)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "27280d24-be42-45dc-afc1-f5a742387ad5", + "metadata": {}, + "outputs": [], + "source": [ + "classpath = spark.sparkContext._jvm.java.lang.System.getProperty(\"java.class.path\")\n", + "print(\"Full JVM Classpath:\")\n", + "print(classpath)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ad5f2e40-99f7-470b-a7d3-d5e9aaf4690d", + "metadata": {}, + "outputs": [], + "source": [ + "# Print full classpath\n", + "classpath = spark.sparkContext._jvm.java.lang.System.getProperty(\"java.class.path\")\n", + "print(\"Full JVM Classpath:\")\n", + "print(classpath)\n", + "\n", + "# Verify Spark version\n", + "print(\"Spark version:\", spark.version)\n", + "\n", + "# Set log level\n", + "spark.sparkContext.setLogLevel(\"DEBUG\")\n", + "\n", + "# Test minimal action\n", + "print(\"Creating DataFrame...\")\n", + "df = spark.createDataFrame([(\"a\", 1), (\"b\", 2)], [\"col1\", \"col2\"])\n", + "print(\"Attempting show...\")\n", + "try:\n", + " df.show()\n", + "except Exception as e:\n", + " print(\"Error:\", e)\n", + " print(\"Full stack trace:\")\n", + " traceback.print_exc()\n", + "\n", + "# Check executor classpath (if possible)\n", + "print(\"Executor classpath (may require logs):\")\n", + "spark.sparkContext._jsc.sc().getExecutorMemoryStatus() # Trigger executor communication" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5c0aecd0-b47b-493f-beff-d404e4461823", + "metadata": {}, + "outputs": [], + "source": [ + "import pyarrow.fs as fs\n", + "s3 = fs.S3FileSystem(endpoint_override=\"http://minio:9000/\", access_key=\"admin\", secret_key=\"adminadmin\", scheme=\"http\")\n", + "files = s3.get_file_info(fs.FileSelector(\"demo/gas-sensor/raw/\", recursive=True))\n", + "for f in files:\n", + " if \"_temporary\" in f.path or \"shuffle\" in f.path:\n", + " print(\"Deleting:\", f.path)\n", + " s3.delete_file(f.path)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "7badde9b-0c97-4a3e-9b41-272d7640d73c", + "metadata": {}, + "outputs": [], + "source": [ + "from pyspark.sql import SparkSession\n", + "import traceback\n", + "\n", + "# Start fresh\n", + "if 'spark' in globals():\n", + " spark.stop()\n", + "\n", + "spark = SparkSession.builder \\\n", + " .appName(\"S3AExample\") \\\n", + " .config(\"spark.jars.packages\", \"org.apache.spark:spark-core_2.12:3.5.1,org.apache.spark:spark-sql_2.12:3.5.1,org.apache.hadoop:hadoop-aws:3.3.6,org.apache.hadoop:hadoop-common:3.3.6,com.amazonaws:aws-java-sdk-bundle:1.12.767\") \\\n", + " .config(\"spark.driver.extraClassPath\", \"/usr/local/spark/jars/spark-core_2.12-3.5.1.jar:/usr/local/spark/jars/spark-sql_2.12-3.5.1.jar\") \\\n", + " .config(\"spark.executor.extraClassPath\", \"/usr/local/spark/jars/spark-core_2.12-3.5.1.jar:/usr/local/spark/jars/spark-sql_2.12-3.5.1.jar\") \\\n", + " .config(\"spark.hadoop.fs.s3a.endpoint\", \"http://minio:9000/\") \\\n", + " .config(\"spark.hadoop.fs.s3a.path.style.access\", \"true\") \\\n", + " .config(\"spark.hadoop.fs.s3a.access.key\", \"admin\") \\\n", + " .config(\"spark.hadoop.fs.s3a.secret.key\", \"admin\") \\\n", + " .config(\"spark.hadoop.fs.s3a.impl\", \"org.apache.hadoop.fs.s3a.S3AFileSystem\") \\\n", + " .getOrCreate()\n", + "\n", + "# Verify Spark version\n", + "print(\"Spark version:\", spark.version)\n", + "\n", + "# Set log level\n", + "spark.sparkContext.setLogLevel(\"DEBUG\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a1b31b2a-f29f-40d7-986e-00ff59c52657", + "metadata": {}, + "outputs": [], + "source": [ + "# Run a dummy action to log executor classpath\n", + "spark.sparkContext.parallelize([1, 2, 3]).foreachPartition(lambda _: \n", + " print(spark.sparkContext._jvm.java.lang.System.getProperty(\"java.class.path\")))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "677eb4c3-c9e3-43cf-810b-5d0167cc6550", + "metadata": {}, + "outputs": [], + "source": [ + "# Test minimal action\n", + "print(\"Creating DataFrame...\")\n", + "df = spark.createDataFrame([(\"a\", 1), (\"b\", 2)], [\"col1\", \"col2\"])\n", + "print(\"Attempting show...\")\n", + "try:\n", + " df.show()\n", + "except Exception as e:\n", + " print(\"Error:\", e)\n", + " print(\"Full stack trace:\")\n", + " traceback.print_exc()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "da26c1d9-6c85-4b7a-aa09-d09917da833f", + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "from pyspark.sql import SparkSession\n", + "\n", + "NAMESPACE = os.environ.get(\"NAMESPACE\", \"default\") # Adjust if needed\n", + "POD_NAME = os.environ.get(\"HOSTNAME\", f\"jupyter-{os.environ.get('USER', 'default')}-{NAMESPACE}\") # Use actual pod name\n", + "\n", + "spark = (\n", + " SparkSession.builder\n", + " .master(f'k8s://https://{os.environ[\"KUBERNETES_SERVICE_HOST\"]}:{os.environ[\"KUBERNETES_SERVICE_PORT\"]}')\n", + " .appName(\"process-s3-data\")\n", + " .config(\"spark.kubernetes.container.image\", \"quay.io/jupyter/pyspark-notebook:python-3.11.8\")\n", + " .config(\"spark.kubernetes.container.image.pullPolicy\", \"IfNotPresent\")\n", + " .config(\"spark.kubernetes.namespace\", NAMESPACE)\n", + " .config(\"spark.kubernetes.authenticate.driver.serviceAccountName\", \"spark\")\n", + " .config(\"spark.kubernetes.authenticate.executor.serviceAccountName\", \"spark\")\n", + " .config(\"spark.driver.host\", f\"driver-service.{NAMESPACE}.svc.cluster.local\")\n", + " .config(\"spark.driver.port\", \"2222\")\n", + " .config(\"spark.driver.blockManager.port\", \"7777\")\n", + " .config(\"spark.driver.bindAddress\", \"0.0.0.0\")\n", + " .config(\"spark.executor.instances\", \"1\")\n", + " .config(\"spark.executor.memory\", \"1g\")\n", + " .config(\"spark.executor.cores\", \"1\")\n", + " .config(\"spark.jars.packages\", \"org.apache.hadoop:hadoop-aws:3.3.6,org.apache.hadoop:hadoop-common:3.3.6,com.amazonaws:aws-java-sdk-bundle:1.12.767\")\n", + " .config(\"spark.hadoop.fs.s3a.endpoint\", \"http://minio:9000/\")\n", + " .config(\"spark.hadoop.fs.s3a.path.style.access\", \"true\")\n", + " .config(\"spark.hadoop.fs.s3a.access.key\", \"admin\")\n", + " .config(\"spark.hadoop.fs.s3a.secret.key\", \"adminadmin\")\n", + " .config(\"spark.hadoop.fs.s3a.aws.credentials.provider\", \"org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider\")\n", + " .config(\"spark.submit.deployMode\", \"client\") # Explicitly enforce client mode\n", + " .config(\"spark.kubernetes.driver.pod.name\", POD_NAME) # Match current Jupyter pod\n", + " .getOrCreate()\n", + ")\n", + "\n", + "# Verify Spark version\n", + "print(\"Spark version:\", spark.version)\n", + "\n", + "# Test minimal action\n", + "df = spark.createDataFrame([(\"a\", 1), (\"b\", 2)], [\"col1\", \"col2\"])\n", + "df.show()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a22222e3-fe6f-4798-9e90-792e518c0d8b", + "metadata": {}, + "outputs": [], + "source": [ + "print(\"Spark version:\", spark.version)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "a5b13039-c15b-49cc-9777-5f374a4de254", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.8" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/stacks/jupyterhub-keycloak/serviceaccount.yaml b/stacks/jupyterhub-keycloak/serviceaccount.yaml new file mode 100644 index 00000000..f8298b4b --- /dev/null +++ b/stacks/jupyterhub-keycloak/serviceaccount.yaml @@ -0,0 +1,35 @@ +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: spark +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: spark +subjects: + - kind: ServiceAccount + name: spark +roleRef: + kind: Role + name: spark-role + apiGroup: rbac.authorization.k8s.io +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: spark-role +rules: + - apiGroups: [""] + resources: [pods] + verbs: ["*"] + - apiGroups: [""] + resources: [services] + verbs: ["*"] + - apiGroups: [""] + resources: [configmaps] + verbs: ["*"] + - apiGroups: [""] + resources: [persistentvolumeclaims] + verbs: ["*"] diff --git a/stacks/jupyterhub-keycloak/spark_driver_service.yaml b/stacks/jupyterhub-keycloak/spark_driver_service.yaml new file mode 100644 index 00000000..1e9f4fce --- /dev/null +++ b/stacks/jupyterhub-keycloak/spark_driver_service.yaml @@ -0,0 +1,23 @@ +--- +apiVersion: v1 +kind: Service +metadata: + name: driver-service +spec: + selector: + app: jupyterhub + component: singleuser-server + ports: + - name: driver + protocol: TCP + port: 2222 + targetPort: 2222 + - name: blockmanager + protocol: TCP + port: 7777 + targetPort: 7777 + - name: spark-driver-ui-port + port: 4040 + protocol: TCP + targetPort: 4040 + type: ClusterIP diff --git a/stacks/stacks-v2.yaml b/stacks/stacks-v2.yaml index 2297c775..5e814f49 100644 --- a/stacks/stacks-v2.yaml +++ b/stacks/stacks-v2.yaml @@ -670,7 +670,14 @@ stacks: - plainYaml: stacks/jupyterhub-keycloak/keycloak-realm-config.yaml - plainYaml: stacks/jupyterhub-keycloak/keycloak.yaml - helmChart: stacks/jupyterhub-keycloak/jupyterhub.yaml + - plainYaml: stacks/jupyterhub-keycloak/serviceaccount.yaml + #- plainYaml: stacks/jupyterhub-keycloak/spark_driver_service.yaml + - helmChart: stacks/_templates/minio.yaml + - plainYaml: stacks/trino-superset-s3/s3-connection.yaml parameters: - name: keycloakAdminPassword description: Password of the Keycloak admin user default: adminadmin + - name: minioAdminPassword + description: Password of the MinIO admin user + default: adminadmin From bc94e3315a85a3eca5953cb146779650d5eb4a54 Mon Sep 17 00:00:00 2001 From: Andrew Kenworthy Date: Tue, 25 Feb 2025 16:15:06 +0100 Subject: [PATCH 18/37] read/write from s3 --- stacks/jupyterhub-keycloak/process-s3.ipynb | 456 ++------------------ 1 file changed, 36 insertions(+), 420 deletions(-) diff --git a/stacks/jupyterhub-keycloak/process-s3.ipynb b/stacks/jupyterhub-keycloak/process-s3.ipynb index 74199ee2..d1411f60 100644 --- a/stacks/jupyterhub-keycloak/process-s3.ipynb +++ b/stacks/jupyterhub-keycloak/process-s3.ipynb @@ -1,64 +1,5 @@ { "cells": [ - { - "cell_type": "code", - "execution_count": null, - "id": "9b2def64-7880-40b7-bf5d-2935d81d1fa1", - "metadata": {}, - "outputs": [], - "source": [ - "from pyspark.sql import SparkSession\n", - "from pyspark.sql.functions import dayofweek, to_date, to_timestamp, year, hour, minute, month, when, dayofmonth, dayofweek\n", - "from pyspark.sql.functions import concat_ws, lpad, lit\n", - "from pyspark.sql.functions import lag\n", - "from pyspark.sql.window import Window\n", - "from pyspark.sql import functions, types\n", - "\n", - "#from sklearn.ensemble import IsolationForest\n", - "#from sklearn.preprocessing import StandardScaler\n", - "#from sklearn.decomposition import PCA\n", - "\n", - "#import pandas as pd\n", - "import os\n", - "\n", - "%matplotlib inline\n", - "import matplotlib.pyplot as plt" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "88015d8c-ef44-45af-badc-719f8f8ec366", - "metadata": {}, - "outputs": [], - "source": [ - "# Modify this please if deploying a demo using a non-default product namespace\n", - "NAMESPACE: str = \"default\"" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "06b8c133-6eb5-4981-8709-9168923db4d0", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Found file: demo/gas-sensor/raw/20160930_203718.csv\n" - ] - } - ], - "source": [ - "# Manual check via pyarrow.fs\n", - "import pyarrow.fs as fs\n", - "s3 = fs.S3FileSystem(endpoint_override=\"http://minio:9000/\", access_key=\"admin\", secret_key=\"adminadmin\", scheme=\"http\")\n", - "files = s3.get_file_info(fs.FileSelector(\"demo/gas-sensor/raw/\", recursive=True))\n", - "for f in files:\n", - " print(\"Found file:\", f.path)" - ] - }, { "cell_type": "code", "execution_count": null, @@ -72,37 +13,6 @@ "! pyspark --version" ] }, - { - "cell_type": "code", - "execution_count": 4, - "id": "0c19ab89-013d-4d2f-8243-5b48e3337c8a", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Spark version: 3.5.1\n", - "+----+----+\n", - "|col1|col2|\n", - "+----+----+\n", - "| a| 1|\n", - "| b| 2|\n", - "+----+----+\n", - "\n" - ] - } - ], - "source": [ - "from pyspark.sql import SparkSession\n", - "\n", - "spark = SparkSession.builder.appName(\"local-test\").master(\"local[*]\").getOrCreate()\n", - "print(\"Spark version:\", spark.version)\n", - "df = spark.createDataFrame([(\"a\", 1), (\"b\", 2)], [\"col1\", \"col2\"])\n", - "df.show()\n", - "spark.stop()" - ] - }, { "cell_type": "code", "execution_count": null, @@ -148,31 +58,21 @@ " .config(\"spark.kubernetes.namespace\", NAMESPACE)\n", " .config(\"spark.kubernetes.authenticate.driver.serviceAccountName\", \"spark\")\n", " .config(\"spark.kubernetes.authenticate.executor.serviceAccountName\", \"spark\")\n", - " #.config(\"spark.driver.host\", f\"driver-service.{NAMESPACE}.svc.cluster.local\")\n", " .config(\"spark.driver.port\", \"2222\")\n", " .config(\"spark.driver.blockManager.port\", \"7777\")\n", - " #.config(\"spark.driver.bindAddress\", \"0.0.0.0\")\n", " .config(\"spark.executor.instances\", \"1\")\n", " .config(\"spark.executor.memory\", \"1g\")\n", " .config(\"spark.executor.cores\", \"1\")\n", " # bitnami. See https://github.com/bitnami/containers/issues/52698#issuecomment-2275913474\n", " #.config(\"spark.executorEnv.LD_PRELOAD\", \"/opt/bitnami/common/lib/libnss_wrapper.so\")\n", - " #.config(\"spark.jars\", \"/usr/local/spark/jars/spark-core_2.12-3.5.2.jar\")\n", - " #.config(\"spark.driver.extraClassPath\", \"/usr/local/spark/jars/spark-core_2.12-3.5.2.jar\")\n", - " #.config(\"spark.executor.extraClassPath\", \"/stackable/spark/spark-core_2.12-3.5.2.jar\")\n", - " #.config(\"spark.jars.packages\", \"org.apache.hadoop:hadoop-aws:3.3.6,org.apache.hadoop:hadoop-common:3.3.6,com.amazonaws:aws-java-sdk-bundle:1.12.767\")\n", - " #.config(\"spark.driver.extraClassPath\", \"/usr/local/spark/jars/spark-core_2.12-3.5.1.jar:/usr/local/spark/jars/spark-sql_2.12-3.5.1.jar:/usr/local/spark/jars/hadoop-aws-3.3.6.jar:/usr/local/spark/jars/hadoop-common-3.3.6.jar\")\n", - " #.config(\"spark.executor.extraClassPath\", \"/opt/spark/jars/spark-core_2.12-3.5.1.jar:/opt/spark/jars/spark-sql_2.12-3.5.1.jar:/opt/spark/jars/hadoop-aws-3.3.6.jar:/opt/spark/jars/hadoop-common-3.3.6.jar\")\n", - " #.config(\"spark.hadoop.fs.s3a.endpoint\", \"http://minio:9000/\")\n", - " #.config(\"spark.hadoop.fs.s3a.path.style.access\", \"true\")\n", - " #.config(\"spark.hadoop.fs.s3a.access.key\", \"admin\")\n", - " #.config(\"spark.hadoop.fs.s3a.secret.key\", \"adminadmin\")\n", - " #.config(\"spark.hadoop.fs.s3a.aws.credentials.provider\", \"org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider\")\n", - " #.config(\"spark.submit.deployMode\", \"client\")\n", + " .config(\"spark.hadoop.fs.s3a.endpoint\", \"http://minio:9000/\")\n", + " .config(\"spark.hadoop.fs.s3a.path.style.access\", \"true\")\n", + " .config(\"spark.hadoop.fs.s3a.access.key\", \"admin\")\n", + " .config(\"spark.hadoop.fs.s3a.secret.key\", \"adminadmin\")\n", + " .config(\"spark.hadoop.fs.s3a.aws.credentials.provider\", \"org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider\")\n", + " .config(\"spark.jars.packages\", \"org.apache.hadoop:hadoop-client-api:3.3.4,org.apache.hadoop:hadoop-client-runtime:3.3.4,org.apache.hadoop:hadoop-aws:3.3.4,org.apache.hadoop:hadoop-common:3.3.4,com.amazonaws:aws-java-sdk-bundle:1.12.162\")\n", + " .config(\"spark.submit.deployMode\", \"client\")\n", " .config(\"spark.kubernetes.driver.pod.name\", POD_NAME)\n", - " # Log classloader source\n", - " #.config(\"spark.driver.extraJavaOptions\", \"-verbose:class\")\n", - " #.config(\"spark.executor.extraJavaOptions\", \"-verbose:class\")\n", " .getOrCreate()\n", ")" ] @@ -191,371 +91,87 @@ { "cell_type": "code", "execution_count": null, - "id": "13a61f07-6b74-4e67-948c-503618a3b971", - "metadata": {}, - "outputs": [], - "source": [ - "spark.sparkContext.parallelize([1]).mapPartitions(log_classpath_simple).collect()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "09e6aa50-003e-4654-baad-21825ceea789", - "metadata": {}, - "outputs": [], - "source": [ - "# Test\n", - "print(\"Spark version:\", spark.version)\n", - "df = spark.createDataFrame([(\"a\", 1), (\"b\", 2)], [\"col1\", \"col2\"])\n", - "df.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ae9844b5-0709-4f0d-b2ec-679958d979d1", - "metadata": {}, - "outputs": [], - "source": [ - "spark = (\n", - " SparkSession\n", - " .builder\n", - " .master(f'k8s://https://{os.environ[\"KUBERNETES_SERVICE_HOST\"]}:{os.environ[\"KUBERNETES_SERVICE_PORT\"]}')\n", - " .config(\"spark.kubernetes.container.image\", \"oci.stackable.tech/sdp/spark-k8s:3.5.2-stackable24.11.1\")\n", - " #.config(\"spark.kubernetes.driver.container.image\", \"quay.io/jupyter/pyspark-notebook:python-3.11.8\")\n", - " .config(\"spark.driver.port\", \"2222\")\n", - " .config(\"spark.driver.blockManager.port\", \"7777\")\n", - " .config(\"spark.driver.host\", f\"driver-service.{NAMESPACE}.svc.cluster.local\")\n", - " .config(\"spark.driver.bindAddress\", \"0.0.0.0\")\n", - " .config(\"spark.kubernetes.namespace\", NAMESPACE)\n", - " .config(\"spark.kubernetes.authenticate.driver.serviceAccountName\", \"spark\")\n", - " .config(\"spark.kubernetes.authenticate.serviceAccountName\", \"spark\")\n", - " .config(\"spark.executor.instances\", \"1\")\n", - " .config(\"spark.kubernetes.container.image.pullPolicy\", \"IfNotPresent\")\n", - " #.config(\"spark.hadoop.fs.s3a.endpoint\", \"http://minio:9000/\")\n", - " #.config(\"spark.hadoop.fs.s3a.path.style.access\", \"true\") \n", - " #.config(\"spark.hadoop.fs.s3a.access.key\", \"admin\")\n", - " #.config(\"spark.hadoop.fs.s3a.secret.key\", \"adminadmin\") \n", - " #.config(\"spark.hadoop.fs.s3a.aws.credentials.provider\", \"org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider\")\n", - " #.config(\"spark.jars.packages\", \"org.apache.hadoop:hadoop-aws:3.3.6,org.apache.hadoop:hadoop-common:3.3.6,com.amazonaws:aws-java-sdk-bundle:1.12.767\")\n", - " .appName(\"process-s3-data\")\n", - " .getOrCreate()\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 6, "id": "9f8479cb-f216-4a8f-b9db-6da17ffebaa9", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Spark version: 3.5.1\n" - ] - } - ], - "source": [ - "# Verify Spark version\n", - "print(\"Spark version:\", spark.version)" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "5c1d1980-a5a1-495c-8f5d-6adcb7904de9", - "metadata": {}, - "outputs": [ - { - "ename": "Py4JJavaError", - "evalue": "An error occurred while calling o107.showString.\n: org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 0.0 failed 4 times, most recent failure: Lost task 0.3 in stage 0.0 (TID 3) (10.244.0.154 executor 1): java.io.InvalidClassException: org.apache.spark.rdd.RDD; local class incompatible: stream classdesc serialVersionUID = 3516924559342767982, local class serialVersionUID = 823754013007382808\n\tat java.base/java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:560)\n\tat java.base/java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:2020)\n\tat java.base/java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1870)\n\tat java.base/java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:2020)\n\tat java.base/java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1870)\n\tat java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2201)\n\tat java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1687)\n\tat java.base/java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2496)\n\tat java.base/java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2390)\n\tat java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2228)\n\tat java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1687)\n\tat java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:489)\n\tat java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:447)\n\tat org.apache.spark.serializer.JavaDeserializationStream.readObject(JavaSerializer.scala:87)\n\tat org.apache.spark.serializer.JavaSerializerInstance.deserialize(JavaSerializer.scala:129)\n\tat org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:86)\n\tat org.apache.spark.TaskContext.runTaskWithListeners(TaskContext.scala:161)\n\tat org.apache.spark.scheduler.Task.run(Task.scala:141)\n\tat org.apache.spark.executor.Executor$TaskRunner.$anonfun$run$4(Executor.scala:620)\n\tat org.apache.spark.util.SparkErrorUtils.tryWithSafeFinally(SparkErrorUtils.scala:64)\n\tat org.apache.spark.util.SparkErrorUtils.tryWithSafeFinally$(SparkErrorUtils.scala:61)\n\tat org.apache.spark.util.Utils$.tryWithSafeFinally(Utils.scala:94)\n\tat org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:623)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)\n\tat java.base/java.lang.Thread.run(Thread.java:829)\n\nDriver stacktrace:\n\tat org.apache.spark.scheduler.DAGScheduler.failJobAndIndependentStages(DAGScheduler.scala:2856)\n\tat org.apache.spark.scheduler.DAGScheduler.$anonfun$abortStage$2(DAGScheduler.scala:2792)\n\tat org.apache.spark.scheduler.DAGScheduler.$anonfun$abortStage$2$adapted(DAGScheduler.scala:2791)\n\tat scala.collection.mutable.ResizableArray.foreach(ResizableArray.scala:62)\n\tat scala.collection.mutable.ResizableArray.foreach$(ResizableArray.scala:55)\n\tat scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:49)\n\tat org.apache.spark.scheduler.DAGScheduler.abortStage(DAGScheduler.scala:2791)\n\tat org.apache.spark.scheduler.DAGScheduler.$anonfun$handleTaskSetFailed$1(DAGScheduler.scala:1247)\n\tat org.apache.spark.scheduler.DAGScheduler.$anonfun$handleTaskSetFailed$1$adapted(DAGScheduler.scala:1247)\n\tat scala.Option.foreach(Option.scala:407)\n\tat org.apache.spark.scheduler.DAGScheduler.handleTaskSetFailed(DAGScheduler.scala:1247)\n\tat org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.doOnReceive(DAGScheduler.scala:3060)\n\tat org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.onReceive(DAGScheduler.scala:2994)\n\tat org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.onReceive(DAGScheduler.scala:2983)\n\tat org.apache.spark.util.EventLoop$$anon$1.run(EventLoop.scala:49)\n\tat org.apache.spark.scheduler.DAGScheduler.runJob(DAGScheduler.scala:989)\n\tat org.apache.spark.SparkContext.runJob(SparkContext.scala:2398)\n\tat org.apache.spark.SparkContext.runJob(SparkContext.scala:2419)\n\tat org.apache.spark.SparkContext.runJob(SparkContext.scala:2438)\n\tat org.apache.spark.sql.execution.SparkPlan.executeTake(SparkPlan.scala:530)\n\tat org.apache.spark.sql.execution.SparkPlan.executeTake(SparkPlan.scala:483)\n\tat org.apache.spark.sql.execution.CollectLimitExec.executeCollect(limit.scala:61)\n\tat org.apache.spark.sql.Dataset.collectFromPlan(Dataset.scala:4332)\n\tat org.apache.spark.sql.Dataset.$anonfun$head$1(Dataset.scala:3314)\n\tat org.apache.spark.sql.Dataset.$anonfun$withAction$2(Dataset.scala:4322)\n\tat org.apache.spark.sql.execution.QueryExecution$.withInternalError(QueryExecution.scala:546)\n\tat org.apache.spark.sql.Dataset.$anonfun$withAction$1(Dataset.scala:4320)\n\tat org.apache.spark.sql.execution.SQLExecution$.$anonfun$withNewExecutionId$6(SQLExecution.scala:125)\n\tat org.apache.spark.sql.execution.SQLExecution$.withSQLConfPropagated(SQLExecution.scala:201)\n\tat org.apache.spark.sql.execution.SQLExecution$.$anonfun$withNewExecutionId$1(SQLExecution.scala:108)\n\tat org.apache.spark.sql.SparkSession.withActive(SparkSession.scala:900)\n\tat org.apache.spark.sql.execution.SQLExecution$.withNewExecutionId(SQLExecution.scala:66)\n\tat org.apache.spark.sql.Dataset.withAction(Dataset.scala:4320)\n\tat org.apache.spark.sql.Dataset.head(Dataset.scala:3314)\n\tat org.apache.spark.sql.Dataset.take(Dataset.scala:3537)\n\tat org.apache.spark.sql.Dataset.getRows(Dataset.scala:280)\n\tat org.apache.spark.sql.Dataset.showString(Dataset.scala:315)\n\tat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)\n\tat java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\tat java.base/java.lang.reflect.Method.invoke(Method.java:568)\n\tat py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244)\n\tat py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:374)\n\tat py4j.Gateway.invoke(Gateway.java:282)\n\tat py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132)\n\tat py4j.commands.CallCommand.execute(CallCommand.java:79)\n\tat py4j.ClientServerConnection.waitForCommands(ClientServerConnection.java:182)\n\tat py4j.ClientServerConnection.run(ClientServerConnection.java:106)\n\tat java.base/java.lang.Thread.run(Thread.java:840)\nCaused by: java.io.InvalidClassException: org.apache.spark.rdd.RDD; local class incompatible: stream classdesc serialVersionUID = 3516924559342767982, local class serialVersionUID = 823754013007382808\n\tat java.base/java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:560)\n\tat java.base/java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:2020)\n\tat java.base/java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1870)\n\tat java.base/java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:2020)\n\tat java.base/java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1870)\n\tat java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2201)\n\tat java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1687)\n\tat java.base/java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2496)\n\tat java.base/java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2390)\n\tat java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2228)\n\tat java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1687)\n\tat java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:489)\n\tat java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:447)\n\tat org.apache.spark.serializer.JavaDeserializationStream.readObject(JavaSerializer.scala:87)\n\tat org.apache.spark.serializer.JavaSerializerInstance.deserialize(JavaSerializer.scala:129)\n\tat org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:86)\n\tat org.apache.spark.TaskContext.runTaskWithListeners(TaskContext.scala:161)\n\tat org.apache.spark.scheduler.Task.run(Task.scala:141)\n\tat org.apache.spark.executor.Executor$TaskRunner.$anonfun$run$4(Executor.scala:620)\n\tat org.apache.spark.util.SparkErrorUtils.tryWithSafeFinally(SparkErrorUtils.scala:64)\n\tat org.apache.spark.util.SparkErrorUtils.tryWithSafeFinally$(SparkErrorUtils.scala:61)\n\tat org.apache.spark.util.Utils$.tryWithSafeFinally(Utils.scala:94)\n\tat org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:623)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)\n\tat java.base/java.lang.Thread.run(Thread.java:829)\n", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mPy4JJavaError\u001b[0m Traceback (most recent call last)", - "Cell \u001b[0;32mIn[7], line 3\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[38;5;66;03m# Test minimal action\u001b[39;00m\n\u001b[1;32m 2\u001b[0m df \u001b[38;5;241m=\u001b[39m spark\u001b[38;5;241m.\u001b[39mcreateDataFrame([(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124ma\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;241m1\u001b[39m), (\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mb\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;241m2\u001b[39m)], [\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcol1\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mcol2\u001b[39m\u001b[38;5;124m\"\u001b[39m])\n\u001b[0;32m----> 3\u001b[0m \u001b[43mdf\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mshow\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m/usr/local/spark/python/pyspark/sql/dataframe.py:945\u001b[0m, in \u001b[0;36mDataFrame.show\u001b[0;34m(self, n, truncate, vertical)\u001b[0m\n\u001b[1;32m 885\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mshow\u001b[39m(\u001b[38;5;28mself\u001b[39m, n: \u001b[38;5;28mint\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m20\u001b[39m, truncate: Union[\u001b[38;5;28mbool\u001b[39m, \u001b[38;5;28mint\u001b[39m] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m, vertical: \u001b[38;5;28mbool\u001b[39m \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mFalse\u001b[39;00m) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m 886\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"Prints the first ``n`` rows to the console.\u001b[39;00m\n\u001b[1;32m 887\u001b[0m \n\u001b[1;32m 888\u001b[0m \u001b[38;5;124;03m .. versionadded:: 1.3.0\u001b[39;00m\n\u001b[0;32m (...)\u001b[0m\n\u001b[1;32m 943\u001b[0m \u001b[38;5;124;03m name | Bob\u001b[39;00m\n\u001b[1;32m 944\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m--> 945\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_show_string\u001b[49m\u001b[43m(\u001b[49m\u001b[43mn\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtruncate\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mvertical\u001b[49m\u001b[43m)\u001b[49m)\n", - "File \u001b[0;32m/usr/local/spark/python/pyspark/sql/dataframe.py:963\u001b[0m, in \u001b[0;36mDataFrame._show_string\u001b[0;34m(self, n, truncate, vertical)\u001b[0m\n\u001b[1;32m 957\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m PySparkTypeError(\n\u001b[1;32m 958\u001b[0m error_class\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mNOT_BOOL\u001b[39m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 959\u001b[0m message_parameters\u001b[38;5;241m=\u001b[39m{\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124marg_name\u001b[39m\u001b[38;5;124m\"\u001b[39m: \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mvertical\u001b[39m\u001b[38;5;124m\"\u001b[39m, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124marg_type\u001b[39m\u001b[38;5;124m\"\u001b[39m: \u001b[38;5;28mtype\u001b[39m(vertical)\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__name__\u001b[39m},\n\u001b[1;32m 960\u001b[0m )\n\u001b[1;32m 962\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(truncate, \u001b[38;5;28mbool\u001b[39m) \u001b[38;5;129;01mand\u001b[39;00m truncate:\n\u001b[0;32m--> 963\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_jdf\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mshowString\u001b[49m\u001b[43m(\u001b[49m\u001b[43mn\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m20\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mvertical\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 964\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 965\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n", - "File \u001b[0;32m/usr/local/spark/python/lib/py4j-0.10.9.7-src.zip/py4j/java_gateway.py:1322\u001b[0m, in \u001b[0;36mJavaMember.__call__\u001b[0;34m(self, *args)\u001b[0m\n\u001b[1;32m 1316\u001b[0m command \u001b[38;5;241m=\u001b[39m proto\u001b[38;5;241m.\u001b[39mCALL_COMMAND_NAME \u001b[38;5;241m+\u001b[39m\\\n\u001b[1;32m 1317\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mcommand_header \u001b[38;5;241m+\u001b[39m\\\n\u001b[1;32m 1318\u001b[0m args_command \u001b[38;5;241m+\u001b[39m\\\n\u001b[1;32m 1319\u001b[0m proto\u001b[38;5;241m.\u001b[39mEND_COMMAND_PART\n\u001b[1;32m 1321\u001b[0m answer \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mgateway_client\u001b[38;5;241m.\u001b[39msend_command(command)\n\u001b[0;32m-> 1322\u001b[0m return_value \u001b[38;5;241m=\u001b[39m \u001b[43mget_return_value\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 1323\u001b[0m \u001b[43m \u001b[49m\u001b[43manswer\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgateway_client\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mtarget_id\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mname\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1325\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m temp_arg \u001b[38;5;129;01min\u001b[39;00m temp_args:\n\u001b[1;32m 1326\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mhasattr\u001b[39m(temp_arg, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m_detach\u001b[39m\u001b[38;5;124m\"\u001b[39m):\n", - "File \u001b[0;32m/usr/local/spark/python/pyspark/errors/exceptions/captured.py:179\u001b[0m, in \u001b[0;36mcapture_sql_exception..deco\u001b[0;34m(*a, **kw)\u001b[0m\n\u001b[1;32m 177\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mdeco\u001b[39m(\u001b[38;5;241m*\u001b[39ma: Any, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkw: Any) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m Any:\n\u001b[1;32m 178\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m--> 179\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mf\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43ma\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkw\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 180\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m Py4JJavaError \u001b[38;5;28;01mas\u001b[39;00m e:\n\u001b[1;32m 181\u001b[0m converted \u001b[38;5;241m=\u001b[39m convert_exception(e\u001b[38;5;241m.\u001b[39mjava_exception)\n", - "File \u001b[0;32m/usr/local/spark/python/lib/py4j-0.10.9.7-src.zip/py4j/protocol.py:326\u001b[0m, in \u001b[0;36mget_return_value\u001b[0;34m(answer, gateway_client, target_id, name)\u001b[0m\n\u001b[1;32m 324\u001b[0m value \u001b[38;5;241m=\u001b[39m OUTPUT_CONVERTER[\u001b[38;5;28mtype\u001b[39m](answer[\u001b[38;5;241m2\u001b[39m:], gateway_client)\n\u001b[1;32m 325\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m answer[\u001b[38;5;241m1\u001b[39m] \u001b[38;5;241m==\u001b[39m REFERENCE_TYPE:\n\u001b[0;32m--> 326\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m Py4JJavaError(\n\u001b[1;32m 327\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mAn error occurred while calling \u001b[39m\u001b[38;5;132;01m{0}\u001b[39;00m\u001b[38;5;132;01m{1}\u001b[39;00m\u001b[38;5;132;01m{2}\u001b[39;00m\u001b[38;5;124m.\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39m\n\u001b[1;32m 328\u001b[0m \u001b[38;5;28mformat\u001b[39m(target_id, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m.\u001b[39m\u001b[38;5;124m\"\u001b[39m, name), value)\n\u001b[1;32m 329\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m 330\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m Py4JError(\n\u001b[1;32m 331\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mAn error occurred while calling \u001b[39m\u001b[38;5;132;01m{0}\u001b[39;00m\u001b[38;5;132;01m{1}\u001b[39;00m\u001b[38;5;132;01m{2}\u001b[39;00m\u001b[38;5;124m. Trace:\u001b[39m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;132;01m{3}\u001b[39;00m\u001b[38;5;130;01m\\n\u001b[39;00m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;241m.\u001b[39m\n\u001b[1;32m 332\u001b[0m \u001b[38;5;28mformat\u001b[39m(target_id, \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m.\u001b[39m\u001b[38;5;124m\"\u001b[39m, name, value))\n", - "\u001b[0;31mPy4JJavaError\u001b[0m: An error occurred while calling o107.showString.\n: org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 0.0 failed 4 times, most recent failure: Lost task 0.3 in stage 0.0 (TID 3) (10.244.0.154 executor 1): java.io.InvalidClassException: org.apache.spark.rdd.RDD; local class incompatible: stream classdesc serialVersionUID = 3516924559342767982, local class serialVersionUID = 823754013007382808\n\tat java.base/java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:560)\n\tat java.base/java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:2020)\n\tat java.base/java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1870)\n\tat java.base/java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:2020)\n\tat java.base/java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1870)\n\tat java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2201)\n\tat java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1687)\n\tat java.base/java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2496)\n\tat java.base/java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2390)\n\tat java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2228)\n\tat java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1687)\n\tat java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:489)\n\tat java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:447)\n\tat org.apache.spark.serializer.JavaDeserializationStream.readObject(JavaSerializer.scala:87)\n\tat org.apache.spark.serializer.JavaSerializerInstance.deserialize(JavaSerializer.scala:129)\n\tat org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:86)\n\tat org.apache.spark.TaskContext.runTaskWithListeners(TaskContext.scala:161)\n\tat org.apache.spark.scheduler.Task.run(Task.scala:141)\n\tat org.apache.spark.executor.Executor$TaskRunner.$anonfun$run$4(Executor.scala:620)\n\tat org.apache.spark.util.SparkErrorUtils.tryWithSafeFinally(SparkErrorUtils.scala:64)\n\tat org.apache.spark.util.SparkErrorUtils.tryWithSafeFinally$(SparkErrorUtils.scala:61)\n\tat org.apache.spark.util.Utils$.tryWithSafeFinally(Utils.scala:94)\n\tat org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:623)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)\n\tat java.base/java.lang.Thread.run(Thread.java:829)\n\nDriver stacktrace:\n\tat org.apache.spark.scheduler.DAGScheduler.failJobAndIndependentStages(DAGScheduler.scala:2856)\n\tat org.apache.spark.scheduler.DAGScheduler.$anonfun$abortStage$2(DAGScheduler.scala:2792)\n\tat org.apache.spark.scheduler.DAGScheduler.$anonfun$abortStage$2$adapted(DAGScheduler.scala:2791)\n\tat scala.collection.mutable.ResizableArray.foreach(ResizableArray.scala:62)\n\tat scala.collection.mutable.ResizableArray.foreach$(ResizableArray.scala:55)\n\tat scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:49)\n\tat org.apache.spark.scheduler.DAGScheduler.abortStage(DAGScheduler.scala:2791)\n\tat org.apache.spark.scheduler.DAGScheduler.$anonfun$handleTaskSetFailed$1(DAGScheduler.scala:1247)\n\tat org.apache.spark.scheduler.DAGScheduler.$anonfun$handleTaskSetFailed$1$adapted(DAGScheduler.scala:1247)\n\tat scala.Option.foreach(Option.scala:407)\n\tat org.apache.spark.scheduler.DAGScheduler.handleTaskSetFailed(DAGScheduler.scala:1247)\n\tat org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.doOnReceive(DAGScheduler.scala:3060)\n\tat org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.onReceive(DAGScheduler.scala:2994)\n\tat org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.onReceive(DAGScheduler.scala:2983)\n\tat org.apache.spark.util.EventLoop$$anon$1.run(EventLoop.scala:49)\n\tat org.apache.spark.scheduler.DAGScheduler.runJob(DAGScheduler.scala:989)\n\tat org.apache.spark.SparkContext.runJob(SparkContext.scala:2398)\n\tat org.apache.spark.SparkContext.runJob(SparkContext.scala:2419)\n\tat org.apache.spark.SparkContext.runJob(SparkContext.scala:2438)\n\tat org.apache.spark.sql.execution.SparkPlan.executeTake(SparkPlan.scala:530)\n\tat org.apache.spark.sql.execution.SparkPlan.executeTake(SparkPlan.scala:483)\n\tat org.apache.spark.sql.execution.CollectLimitExec.executeCollect(limit.scala:61)\n\tat org.apache.spark.sql.Dataset.collectFromPlan(Dataset.scala:4332)\n\tat org.apache.spark.sql.Dataset.$anonfun$head$1(Dataset.scala:3314)\n\tat org.apache.spark.sql.Dataset.$anonfun$withAction$2(Dataset.scala:4322)\n\tat org.apache.spark.sql.execution.QueryExecution$.withInternalError(QueryExecution.scala:546)\n\tat org.apache.spark.sql.Dataset.$anonfun$withAction$1(Dataset.scala:4320)\n\tat org.apache.spark.sql.execution.SQLExecution$.$anonfun$withNewExecutionId$6(SQLExecution.scala:125)\n\tat org.apache.spark.sql.execution.SQLExecution$.withSQLConfPropagated(SQLExecution.scala:201)\n\tat org.apache.spark.sql.execution.SQLExecution$.$anonfun$withNewExecutionId$1(SQLExecution.scala:108)\n\tat org.apache.spark.sql.SparkSession.withActive(SparkSession.scala:900)\n\tat org.apache.spark.sql.execution.SQLExecution$.withNewExecutionId(SQLExecution.scala:66)\n\tat org.apache.spark.sql.Dataset.withAction(Dataset.scala:4320)\n\tat org.apache.spark.sql.Dataset.head(Dataset.scala:3314)\n\tat org.apache.spark.sql.Dataset.take(Dataset.scala:3537)\n\tat org.apache.spark.sql.Dataset.getRows(Dataset.scala:280)\n\tat org.apache.spark.sql.Dataset.showString(Dataset.scala:315)\n\tat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\n\tat java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)\n\tat java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\n\tat java.base/java.lang.reflect.Method.invoke(Method.java:568)\n\tat py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244)\n\tat py4j.reflection.ReflectionEngine.invoke(ReflectionEngine.java:374)\n\tat py4j.Gateway.invoke(Gateway.java:282)\n\tat py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132)\n\tat py4j.commands.CallCommand.execute(CallCommand.java:79)\n\tat py4j.ClientServerConnection.waitForCommands(ClientServerConnection.java:182)\n\tat py4j.ClientServerConnection.run(ClientServerConnection.java:106)\n\tat java.base/java.lang.Thread.run(Thread.java:840)\nCaused by: java.io.InvalidClassException: org.apache.spark.rdd.RDD; local class incompatible: stream classdesc serialVersionUID = 3516924559342767982, local class serialVersionUID = 823754013007382808\n\tat java.base/java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:560)\n\tat java.base/java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:2020)\n\tat java.base/java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1870)\n\tat java.base/java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:2020)\n\tat java.base/java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1870)\n\tat java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2201)\n\tat java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1687)\n\tat java.base/java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2496)\n\tat java.base/java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2390)\n\tat java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2228)\n\tat java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1687)\n\tat java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:489)\n\tat java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:447)\n\tat org.apache.spark.serializer.JavaDeserializationStream.readObject(JavaSerializer.scala:87)\n\tat org.apache.spark.serializer.JavaSerializerInstance.deserialize(JavaSerializer.scala:129)\n\tat org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:86)\n\tat org.apache.spark.TaskContext.runTaskWithListeners(TaskContext.scala:161)\n\tat org.apache.spark.scheduler.Task.run(Task.scala:141)\n\tat org.apache.spark.executor.Executor$TaskRunner.$anonfun$run$4(Executor.scala:620)\n\tat org.apache.spark.util.SparkErrorUtils.tryWithSafeFinally(SparkErrorUtils.scala:64)\n\tat org.apache.spark.util.SparkErrorUtils.tryWithSafeFinally$(SparkErrorUtils.scala:61)\n\tat org.apache.spark.util.Utils$.tryWithSafeFinally(Utils.scala:94)\n\tat org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:623)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)\n\tat java.base/java.lang.Thread.run(Thread.java:829)\n" - ] - } - ], - "source": [ - "# Test minimal action\n", - "df = spark.createDataFrame([(\"a\", 1), (\"b\", 2)], [\"col1\", \"col2\"])\n", - "df.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "548f86fd-ea28-4eee-9b76-cc047b42713a", - "metadata": {}, - "outputs": [], - "source": [ - "# Write a test CSV\n", - "test_df = spark.createDataFrame([(\"a\", 1), (\"b\", 2)], [\"col1\", \"col2\"])\n", - "test_df.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "35861943-7586-434f-a03d-31ebf03b59d7", - "metadata": {}, - "outputs": [], - "source": [ - "test_df.write.csv(\"s3a://demo/gas-sensor/test/\", mode=\"overwrite\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a319fa38-96de-4c8a-96e0-8e47ef5a7561", - "metadata": {}, - "outputs": [], - "source": [ - "# Read it back\n", - "df = spark.read.csv(\"s3a://demo/gas-sensor/test/\")\n", - "df.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4a5f2667-6596-45ca-bb7b-25a6bfdf5ab7", - "metadata": {}, - "outputs": [], - "source": [ - "print(spark.version)\n", - "print(spark._jsc.hadoopConfiguration().get(\"hadoop.version\"))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "6a34fecf-bf29-4b9e-8156-942be445c96c", - "metadata": {}, - "outputs": [], - "source": [ - "df = spark.read.csv(\"s3a://demo/gas-sensor/raw/20160930_203718.csv\")\n", - "df.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "9cdaef7c-5023-447d-b9ed-e22c686e084d", - "metadata": {}, - "outputs": [], - "source": [ - "# Get JARs using toString() on the Vector\n", - "jars_vector = spark.sparkContext._jsc.sc().listJars()\n", - "jars_str = jars_vector.toString()\n", - "print(\"Loaded JARs (raw string):\")\n", - "print(jars_str)\n", - "\n", - "# Verify Spark version\n", - "print(\"Spark version:\", spark.version)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "27280d24-be42-45dc-afc1-f5a742387ad5", - "metadata": {}, - "outputs": [], - "source": [ - "classpath = spark.sparkContext._jvm.java.lang.System.getProperty(\"java.class.path\")\n", - "print(\"Full JVM Classpath:\")\n", - "print(classpath)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ad5f2e40-99f7-470b-a7d3-d5e9aaf4690d", - "metadata": {}, - "outputs": [], - "source": [ - "# Print full classpath\n", - "classpath = spark.sparkContext._jvm.java.lang.System.getProperty(\"java.class.path\")\n", - "print(\"Full JVM Classpath:\")\n", - "print(classpath)\n", - "\n", - "# Verify Spark version\n", - "print(\"Spark version:\", spark.version)\n", - "\n", - "# Set log level\n", - "spark.sparkContext.setLogLevel(\"DEBUG\")\n", - "\n", - "# Test minimal action\n", - "print(\"Creating DataFrame...\")\n", - "df = spark.createDataFrame([(\"a\", 1), (\"b\", 2)], [\"col1\", \"col2\"])\n", - "print(\"Attempting show...\")\n", - "try:\n", - " df.show()\n", - "except Exception as e:\n", - " print(\"Error:\", e)\n", - " print(\"Full stack trace:\")\n", - " traceback.print_exc()\n", - "\n", - "# Check executor classpath (if possible)\n", - "print(\"Executor classpath (may require logs):\")\n", - "spark.sparkContext._jsc.sc().getExecutorMemoryStatus() # Trigger executor communication" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5c0aecd0-b47b-493f-beff-d404e4461823", - "metadata": {}, "outputs": [], "source": [ + "# Manual check via pyarrow.fs\n", "import pyarrow.fs as fs\n", "s3 = fs.S3FileSystem(endpoint_override=\"http://minio:9000/\", access_key=\"admin\", secret_key=\"adminadmin\", scheme=\"http\")\n", "files = s3.get_file_info(fs.FileSelector(\"demo/gas-sensor/raw/\", recursive=True))\n", "for f in files:\n", - " if \"_temporary\" in f.path or \"shuffle\" in f.path:\n", - " print(\"Deleting:\", f.path)\n", - " s3.delete_file(f.path)" + " print(\"Found file:\", f.path)" ] }, { "cell_type": "code", "execution_count": null, - "id": "7badde9b-0c97-4a3e-9b41-272d7640d73c", + "id": "bc35f4d3", "metadata": {}, "outputs": [], "source": [ - "from pyspark.sql import SparkSession\n", - "import traceback\n", - "\n", - "# Start fresh\n", - "if 'spark' in globals():\n", - " spark.stop()\n", - "\n", - "spark = SparkSession.builder \\\n", - " .appName(\"S3AExample\") \\\n", - " .config(\"spark.jars.packages\", \"org.apache.spark:spark-core_2.12:3.5.1,org.apache.spark:spark-sql_2.12:3.5.1,org.apache.hadoop:hadoop-aws:3.3.6,org.apache.hadoop:hadoop-common:3.3.6,com.amazonaws:aws-java-sdk-bundle:1.12.767\") \\\n", - " .config(\"spark.driver.extraClassPath\", \"/usr/local/spark/jars/spark-core_2.12-3.5.1.jar:/usr/local/spark/jars/spark-sql_2.12-3.5.1.jar\") \\\n", - " .config(\"spark.executor.extraClassPath\", \"/usr/local/spark/jars/spark-core_2.12-3.5.1.jar:/usr/local/spark/jars/spark-sql_2.12-3.5.1.jar\") \\\n", - " .config(\"spark.hadoop.fs.s3a.endpoint\", \"http://minio:9000/\") \\\n", - " .config(\"spark.hadoop.fs.s3a.path.style.access\", \"true\") \\\n", - " .config(\"spark.hadoop.fs.s3a.access.key\", \"admin\") \\\n", - " .config(\"spark.hadoop.fs.s3a.secret.key\", \"admin\") \\\n", - " .config(\"spark.hadoop.fs.s3a.impl\", \"org.apache.hadoop.fs.s3a.S3AFileSystem\") \\\n", - " .getOrCreate()\n", - "\n", - "# Verify Spark version\n", - "print(\"Spark version:\", spark.version)\n", - "\n", - "# Set log level\n", - "spark.sparkContext.setLogLevel(\"DEBUG\")" + "df = spark.read.csv(\"s3a://demo/gas-sensor/raw/\")\n", + "df.show()" ] }, { "cell_type": "code", "execution_count": null, - "id": "a1b31b2a-f29f-40d7-986e-00ff59c52657", + "id": "943f77f6", "metadata": {}, "outputs": [], "source": [ - "# Run a dummy action to log executor classpath\n", - "spark.sparkContext.parallelize([1, 2, 3]).foreachPartition(lambda _: \n", - " print(spark.sparkContext._jvm.java.lang.System.getProperty(\"java.class.path\")))" + "df.count()" ] }, { "cell_type": "code", "execution_count": null, - "id": "677eb4c3-c9e3-43cf-810b-5d0167cc6550", + "id": "35861943-7586-434f-a03d-31ebf03b59d7", "metadata": {}, "outputs": [], "source": [ - "# Test minimal action\n", - "print(\"Creating DataFrame...\")\n", - "df = spark.createDataFrame([(\"a\", 1), (\"b\", 2)], [\"col1\", \"col2\"])\n", - "print(\"Attempting show...\")\n", - "try:\n", - " df.show()\n", - "except Exception as e:\n", - " print(\"Error:\", e)\n", - " print(\"Full stack trace:\")\n", - " traceback.print_exc()" + "df.write.csv(\"s3a://demo/gas-sensor/rewritten/\", mode=\"overwrite\")\n", + "df.write.parquet(\"s3a://demo/gas-sensor/parquet/\", mode=\"overwrite\")\n", + "\n", + "df2 = spark.read.parquet(\"s3a://demo/gas-sensor/parquet/\", header = True)\n", + "df2.count()" ] }, { "cell_type": "code", "execution_count": null, - "id": "da26c1d9-6c85-4b7a-aa09-d09917da833f", + "id": "a319fa38-96de-4c8a-96e0-8e47ef5a7561", "metadata": {}, "outputs": [], "source": [ - "import os\n", - "from pyspark.sql import SparkSession\n", + "from pyspark.sql import functions\n", "\n", - "NAMESPACE = os.environ.get(\"NAMESPACE\", \"default\") # Adjust if needed\n", - "POD_NAME = os.environ.get(\"HOSTNAME\", f\"jupyter-{os.environ.get('USER', 'default')}-{NAMESPACE}\") # Use actual pod name\n", + "df2 = df2.withColumn(\"hour\", (functions.floor(df2.timesecs / 60) + 1))\n", "\n", - "spark = (\n", - " SparkSession.builder\n", - " .master(f'k8s://https://{os.environ[\"KUBERNETES_SERVICE_HOST\"]}:{os.environ[\"KUBERNETES_SERVICE_PORT\"]}')\n", - " .appName(\"process-s3-data\")\n", - " .config(\"spark.kubernetes.container.image\", \"quay.io/jupyter/pyspark-notebook:python-3.11.8\")\n", - " .config(\"spark.kubernetes.container.image.pullPolicy\", \"IfNotPresent\")\n", - " .config(\"spark.kubernetes.namespace\", NAMESPACE)\n", - " .config(\"spark.kubernetes.authenticate.driver.serviceAccountName\", \"spark\")\n", - " .config(\"spark.kubernetes.authenticate.executor.serviceAccountName\", \"spark\")\n", - " .config(\"spark.driver.host\", f\"driver-service.{NAMESPACE}.svc.cluster.local\")\n", - " .config(\"spark.driver.port\", \"2222\")\n", - " .config(\"spark.driver.blockManager.port\", \"7777\")\n", - " .config(\"spark.driver.bindAddress\", \"0.0.0.0\")\n", - " .config(\"spark.executor.instances\", \"1\")\n", - " .config(\"spark.executor.memory\", \"1g\")\n", - " .config(\"spark.executor.cores\", \"1\")\n", - " .config(\"spark.jars.packages\", \"org.apache.hadoop:hadoop-aws:3.3.6,org.apache.hadoop:hadoop-common:3.3.6,com.amazonaws:aws-java-sdk-bundle:1.12.767\")\n", - " .config(\"spark.hadoop.fs.s3a.endpoint\", \"http://minio:9000/\")\n", - " .config(\"spark.hadoop.fs.s3a.path.style.access\", \"true\")\n", - " .config(\"spark.hadoop.fs.s3a.access.key\", \"admin\")\n", - " .config(\"spark.hadoop.fs.s3a.secret.key\", \"adminadmin\")\n", - " .config(\"spark.hadoop.fs.s3a.aws.credentials.provider\", \"org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider\")\n", - " .config(\"spark.submit.deployMode\", \"client\") # Explicitly enforce client mode\n", - " .config(\"spark.kubernetes.driver.pod.name\", POD_NAME) # Match current Jupyter pod\n", - " .getOrCreate()\n", - ")\n", + "dfs = df2.select(\n", + " df2.hour,\n", + " df2.humidity,\n", + " df2.temperature,\n", + " df2.flowrate\n", + ").groupby(\"hour\").agg(\n", + " functions.round(functions.avg('humidity'), 2).alias('humidity'),\n", + " functions.round(functions.avg('temperature'), 2).alias('temperature'),\n", + " functions.round(functions.avg('flowrate'), 2).alias('flowrate')\n", + ").orderBy(\"hour\")\n", "\n", - "# Verify Spark version\n", - "print(\"Spark version:\", spark.version)\n", - "\n", - "# Test minimal action\n", - "df = spark.createDataFrame([(\"a\", 1), (\"b\", 2)], [\"col1\", \"col2\"])\n", - "df.show()" + "dfs.show()" ] }, { "cell_type": "code", "execution_count": null, - "id": "a22222e3-fe6f-4798-9e90-792e518c0d8b", + "id": "4276e8e7", "metadata": {}, "outputs": [], "source": [ - "print(\"Spark version:\", spark.version)" + "dfs.write.parquet(\"s3a://demo/gas-sensor/agg/\", mode=\"overwrite\")" ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a5b13039-c15b-49cc-9777-5f374a4de254", - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { From 53132a8d35c829279e62faa917b0c01c95397d65 Mon Sep 17 00:00:00 2001 From: Andrew Kenworthy Date: Tue, 25 Feb 2025 16:31:09 +0100 Subject: [PATCH 19/37] remove driver service resource in favour of the ones produced dynamically --- .../spark_driver_service.yaml | 23 ------------------- stacks/stacks-v2.yaml | 1 - 2 files changed, 24 deletions(-) delete mode 100644 stacks/jupyterhub-keycloak/spark_driver_service.yaml diff --git a/stacks/jupyterhub-keycloak/spark_driver_service.yaml b/stacks/jupyterhub-keycloak/spark_driver_service.yaml deleted file mode 100644 index 1e9f4fce..00000000 --- a/stacks/jupyterhub-keycloak/spark_driver_service.yaml +++ /dev/null @@ -1,23 +0,0 @@ ---- -apiVersion: v1 -kind: Service -metadata: - name: driver-service -spec: - selector: - app: jupyterhub - component: singleuser-server - ports: - - name: driver - protocol: TCP - port: 2222 - targetPort: 2222 - - name: blockmanager - protocol: TCP - port: 7777 - targetPort: 7777 - - name: spark-driver-ui-port - port: 4040 - protocol: TCP - targetPort: 4040 - type: ClusterIP diff --git a/stacks/stacks-v2.yaml b/stacks/stacks-v2.yaml index 5e814f49..a928e92f 100644 --- a/stacks/stacks-v2.yaml +++ b/stacks/stacks-v2.yaml @@ -671,7 +671,6 @@ stacks: - plainYaml: stacks/jupyterhub-keycloak/keycloak.yaml - helmChart: stacks/jupyterhub-keycloak/jupyterhub.yaml - plainYaml: stacks/jupyterhub-keycloak/serviceaccount.yaml - #- plainYaml: stacks/jupyterhub-keycloak/spark_driver_service.yaml - helmChart: stacks/_templates/minio.yaml - plainYaml: stacks/trino-superset-s3/s3-connection.yaml parameters: From 803e520b704d015654fc9a8501f4215f0f1c28eb Mon Sep 17 00:00:00 2001 From: Andrew Kenworthy Date: Tue, 25 Feb 2025 17:52:26 +0100 Subject: [PATCH 20/37] use secret for minio credentials, add demo entry --- demos/demos-v2.yaml | 16 ++++++++++ stacks/jupyterhub-keycloak/Dockerfile | 27 ++++++++++++++++ stacks/jupyterhub-keycloak/README.md | 4 ++- stacks/jupyterhub-keycloak/jupyterhub.yaml | 13 +++++--- stacks/jupyterhub-keycloak/process-s3.ipynb | 23 ++++++++++++-- stacks/jupyterhub-keycloak/s3-connection.yaml | 31 +++++++++++++++++++ stacks/stacks-v2.yaml | 4 +-- 7 files changed, 108 insertions(+), 10 deletions(-) create mode 100644 stacks/jupyterhub-keycloak/Dockerfile create mode 100644 stacks/jupyterhub-keycloak/s3-connection.yaml diff --git a/demos/demos-v2.yaml b/demos/demos-v2.yaml index a31ff1ea..9a7abab5 100644 --- a/demos/demos-v2.yaml +++ b/demos/demos-v2.yaml @@ -226,3 +226,19 @@ demos: cpu: "3" memory: 5098Mi pvc: 16Gi + jupyterhub-keycloak: + description: Demo showing jupyterhub notebooks secured with keycloak + documentation: TODO + stackableStack: jupyterhub-keycloak + labels: + - jupyterhub + - keycloak + - spark + - S3 + manifests: + - plainYaml: demos/jupyterhub-keycloak/load-gas-data.yaml + supportedNamespaces: [] + resourceRequests: + cpu: 6400m + memory: 12622Mi + pvc: 20Gi diff --git a/stacks/jupyterhub-keycloak/Dockerfile b/stacks/jupyterhub-keycloak/Dockerfile new file mode 100644 index 00000000..49cd7315 --- /dev/null +++ b/stacks/jupyterhub-keycloak/Dockerfile @@ -0,0 +1,27 @@ +# kind load docker-image spark:3.5.2-python311 -n stackable-data-platform + +FROM spark:3.5.2-scala2.12-java17-ubuntu + +USER root + +RUN set -ex; \ + apt-get update; \ + # Install dependencies for Python 3.11 + apt-get install -y \ + software-properties-common \ + && add-apt-repository ppa:deadsnakes/ppa \ + && apt-get update && apt-get install -y \ + python3.11 \ + python3.11-venv \ + python3.11-dev \ + && rm -rf /var/lib/apt/lists/*; \ + # Install pip manually for Python 3.11 + curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py && \ + python3.11 get-pip.py && \ + rm get-pip.py + +# Make Python 3.11 the default Python version +RUN update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 1 \ + && update-alternatives --install /usr/bin/pip pip /usr/local/bin/pip3 1 + +USER spark diff --git a/stacks/jupyterhub-keycloak/README.md b/stacks/jupyterhub-keycloak/README.md index 082ee92f..1d212d6b 100644 --- a/stacks/jupyterhub-keycloak/README.md +++ b/stacks/jupyterhub-keycloak/README.md @@ -4,6 +4,8 @@ Deploy the scripts: ```shell stackablectl stack install jupyterhub-keycloak --release dev -s stacks/stacks-v2.yaml - kubectl apply -f ./demos/jupyterhub-keycloak/load-gas-data.yaml + +# or (with test data) +stackablectl demo install jupyterhub-keycloak --release dev -s stacks/stacks-v2.yaml -d demos/demos-v2.yaml ``` diff --git a/stacks/jupyterhub-keycloak/jupyterhub.yaml b/stacks/jupyterhub-keycloak/jupyterhub.yaml index 583e726d..8c6ea6ef 100644 --- a/stacks/jupyterhub-keycloak/jupyterhub.yaml +++ b/stacks/jupyterhub-keycloak/jupyterhub.yaml @@ -14,10 +14,10 @@ options: GenericOAuthenticator: client_id: jupyterhub client_secret: jupyterhubjupyterhub - oauth_callback_url: http://172.19.0.3:31095/hub/oauth_callback - authorize_url: https://172.19.0.3:31093/realms/demo/protocol/openid-connect/auth - token_url: https://172.19.0.3:31093/realms/demo/protocol/openid-connect/token - userdata_url: https://172.19.0.3:31093/realms/demo/protocol/openid-connect/userinfo + oauth_callback_url: http://172.19.0.4:31095/hub/oauth_callback + authorize_url: https://172.19.0.4:31093/realms/demo/protocol/openid-connect/auth + token_url: https://172.19.0.4:31093/realms/demo/protocol/openid-connect/token + userdata_url: https://172.19.0.4:31093/realms/demo/protocol/openid-connect/userinfo username_claim: preferred_username scope: - openid @@ -139,9 +139,14 @@ options: resources: requests: storage: "1" + - name: minio-s3-credentials + secret: + secretName: minio-s3-credentials extraVolumeMounts: - name: tls-ca-cert mountPath: /stackable/secrets/tls-ca-cert + - name: minio-s3-credentials + mountPath: /minio-s3-credentials profileList: - display_name: "Default" description: "Default profile" diff --git a/stacks/jupyterhub-keycloak/process-s3.ipynb b/stacks/jupyterhub-keycloak/process-s3.ipynb index d1411f60..339af901 100644 --- a/stacks/jupyterhub-keycloak/process-s3.ipynb +++ b/stacks/jupyterhub-keycloak/process-s3.ipynb @@ -13,6 +13,23 @@ "! pyspark --version" ] }, + { + "cell_type": "code", + "execution_count": null, + "id": "bd941fee", + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "\n", + "# get minio credentials\n", + "with open(\"/minio-s3-credentials/accessKey\", \"r\") as f:\n", + " minio_user = f.read().strip()\n", + "\n", + "with open(\"/minio-s3-credentials/secretKey\", \"r\") as f:\n", + " minio_pwd = f.read().strip()" + ] + }, { "cell_type": "code", "execution_count": null, @@ -67,8 +84,8 @@ " #.config(\"spark.executorEnv.LD_PRELOAD\", \"/opt/bitnami/common/lib/libnss_wrapper.so\")\n", " .config(\"spark.hadoop.fs.s3a.endpoint\", \"http://minio:9000/\")\n", " .config(\"spark.hadoop.fs.s3a.path.style.access\", \"true\")\n", - " .config(\"spark.hadoop.fs.s3a.access.key\", \"admin\")\n", - " .config(\"spark.hadoop.fs.s3a.secret.key\", \"adminadmin\")\n", + " .config(\"spark.hadoop.fs.s3a.access.key\", minio_user)\n", + " .config(\"spark.hadoop.fs.s3a.secret.key\", minio_pwd)\n", " .config(\"spark.hadoop.fs.s3a.aws.credentials.provider\", \"org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider\")\n", " .config(\"spark.jars.packages\", \"org.apache.hadoop:hadoop-client-api:3.3.4,org.apache.hadoop:hadoop-client-runtime:3.3.4,org.apache.hadoop:hadoop-aws:3.3.4,org.apache.hadoop:hadoop-common:3.3.4,com.amazonaws:aws-java-sdk-bundle:1.12.162\")\n", " .config(\"spark.submit.deployMode\", \"client\")\n", @@ -110,7 +127,7 @@ "metadata": {}, "outputs": [], "source": [ - "df = spark.read.csv(\"s3a://demo/gas-sensor/raw/\")\n", + "df = spark.read.csv(\"s3a://demo/gas-sensor/raw/\", header = True)\n", "df.show()" ] }, diff --git a/stacks/jupyterhub-keycloak/s3-connection.yaml b/stacks/jupyterhub-keycloak/s3-connection.yaml new file mode 100644 index 00000000..7e026539 --- /dev/null +++ b/stacks/jupyterhub-keycloak/s3-connection.yaml @@ -0,0 +1,31 @@ +--- +apiVersion: s3.stackable.tech/v1alpha1 +kind: S3Connection +metadata: + name: minio +spec: + host: minio + port: 9000 + accessStyle: Path + credentials: + secretClass: minio-s3-credentials +--- +apiVersion: secrets.stackable.tech/v1alpha1 +kind: SecretClass +metadata: + name: minio-s3-credentials +spec: + backend: + k8sSearch: + searchNamespace: + pod: {} +--- +apiVersion: v1 +kind: Secret +metadata: + name: minio-s3-credentials + labels: + secrets.stackable.tech/class: minio-s3-credentials +stringData: + accessKey: admin + secretKey: {{ minioAdminPassword }} diff --git a/stacks/stacks-v2.yaml b/stacks/stacks-v2.yaml index a928e92f..4820fde6 100644 --- a/stacks/stacks-v2.yaml +++ b/stacks/stacks-v2.yaml @@ -666,13 +666,13 @@ stacks: memory: 9010Mi pvc: 24Gi manifests: + - helmChart: stacks/_templates/minio.yaml - plainYaml: stacks/jupyterhub-keycloak/keycloak-serviceaccount.yaml - plainYaml: stacks/jupyterhub-keycloak/keycloak-realm-config.yaml - plainYaml: stacks/jupyterhub-keycloak/keycloak.yaml - helmChart: stacks/jupyterhub-keycloak/jupyterhub.yaml - plainYaml: stacks/jupyterhub-keycloak/serviceaccount.yaml - - helmChart: stacks/_templates/minio.yaml - - plainYaml: stacks/trino-superset-s3/s3-connection.yaml + - plainYaml: stacks/jupyterhub-keycloak/s3-connection.yaml parameters: - name: keycloakAdminPassword description: Password of the Keycloak admin user From bcfa3aea6258ad652e57c156cf789d18dd13c111 Mon Sep 17 00:00:00 2001 From: Andrew Kenworthy Date: Wed, 26 Feb 2025 12:42:31 +0100 Subject: [PATCH 21/37] set endpoints via extra config --- stacks/jupyterhub-keycloak/jupyterhub.yaml | 30 ++++++++++++++++++--- stacks/jupyterhub-keycloak/keycloak.yaml | 3 ++- stacks/jupyterhub-keycloak/process-s3.ipynb | 25 +---------------- 3 files changed, 29 insertions(+), 29 deletions(-) diff --git a/stacks/jupyterhub-keycloak/jupyterhub.yaml b/stacks/jupyterhub-keycloak/jupyterhub.yaml index 8c6ea6ef..b6cdc493 100644 --- a/stacks/jupyterhub-keycloak/jupyterhub.yaml +++ b/stacks/jupyterhub-keycloak/jupyterhub.yaml @@ -14,10 +14,6 @@ options: GenericOAuthenticator: client_id: jupyterhub client_secret: jupyterhubjupyterhub - oauth_callback_url: http://172.19.0.4:31095/hub/oauth_callback - authorize_url: https://172.19.0.4:31093/realms/demo/protocol/openid-connect/auth - token_url: https://172.19.0.4:31093/realms/demo/protocol/openid-connect/token - userdata_url: https://172.19.0.4:31093/realms/demo/protocol/openid-connect/userinfo username_claim: preferred_username scope: - openid @@ -27,6 +23,16 @@ options: CACERT: /etc/ssl/certs/ca-certificates.crt CERT: /etc/ssl/certs/ca-certificates.crt CURLOPT_CAINFO: /etc/ssl/certs/ca-certificates.crt + KEYCLOAK_NODEPORT_URL: + valueFrom: + configMapKeyRef: + name: keycloak-address + key: keycloakAddress + KEYCLOAK_NODE_IP: + valueFrom: + configMapKeyRef: + name: keycloak-address + key: keycloakNodeIp extraVolumes: - name: tls-ca-cert ephemeral: @@ -100,6 +106,22 @@ options: ) c.KubeSpawner.after_pod_created_hook = after_pod_created_hook + 03-set-endpoints: | + import os + from oauthenticator.generic import GenericOAuthenticator + + keycloak_url = os.getenv("KEYCLOAK_NODEPORT_URL") + if not keycloak_url: + raise ValueError("KEYCLOAK_NODEPORT_URL environment variable not set") + + keycloak_node_ip = os.getenv("KEYCLOAK_NODE_IP") + if not keycloak_node_ip: + raise ValueError("KEYCLOAK_NODE_IP environment variable not set") + + c.GenericOAuthenticator.oauth_callback_url: f"http://{keycloak_node_ip}:31095/hub/oauth_callback" + c.GenericOAuthenticator.authorize_url = f"https://{keycloak_url}/realms/demo/protocol/openid-connect/auth" + c.GenericOAuthenticator.token_url = f"https://{keycloak_url}/realms/demo/protocol/openid-connect/token" + c.GenericOAuthenticator.userdata_url = f"https://{keycloak_url}/realms/demo/protocol/openid-connect/userinfo" service: type: NodePort proxy: diff --git a/stacks/jupyterhub-keycloak/keycloak.yaml b/stacks/jupyterhub-keycloak/keycloak.yaml index 6cfcbbb8..28bb975c 100644 --- a/stacks/jupyterhub-keycloak/keycloak.yaml +++ b/stacks/jupyterhub-keycloak/keycloak.yaml @@ -74,7 +74,8 @@ spec: metadata: name: keycloak-address data: - address: "$KEYCLOAK_HOSTNAME:$KEYCLOAK_PORT" + keycloakAddress: "$KEYCLOAK_HOSTNAME:$KEYCLOAK_PORT" + keycloakNodeIp: "$KEYCLOAK_HOSTNAME" EOF fi diff --git a/stacks/jupyterhub-keycloak/process-s3.ipynb b/stacks/jupyterhub-keycloak/process-s3.ipynb index 339af901..7ff25b9b 100644 --- a/stacks/jupyterhub-keycloak/process-s3.ipynb +++ b/stacks/jupyterhub-keycloak/process-s3.ipynb @@ -43,33 +43,12 @@ "NAMESPACE = os.environ.get(\"NAMESPACE\", \"default\")\n", "POD_NAME = os.environ.get(\"HOSTNAME\", f\"jupyter-{os.environ.get('USER', 'default')}-{NAMESPACE}\")\n", "\n", - "# works with python-3.11 notebook image\n", - "#EXECUTOR_IMAGE = \"oci.stackable.tech/sdp/spark-k8s:3.5.0-stackable24.3.0\" \n", - "\n", - "# jars differ in size, 17.0.12 vs. 17.0.13, 3.11.10 vs. 3.11.9\n", - "#SerializableBuffer conflict\n", - "#EXECUTOR_IMAGE = \"oci.stackable.tech/sdp/spark-k8s:3.5.2-stackable24.11.1\" \n", - "\n", - "# java, jars match\n", - "#Python in worker has different version (3, 10) than that in driver 3.11, PySpark cannot run with different minor versions. \n", - "#EXECUTOR_IMAGE = \"apache/spark:3.5.2-java17-python3\" \n", - "\n", - "# java, jars match\n", - "#Python in worker has different version (3, 10) than that in driver 3.11, PySpark cannot run with different minor versions. \n", - "#EXECUTOR_IMAGE = \"spark:3.5.2-scala2.12-java17-python3-ubuntu\" \n", - "\n", - "#Python in worker has different version (3, 12) than that in driver 3.11, PySpark cannot run with different minor versions.\n", - "#EXECUTOR_IMAGE = \"bitnami/spark:3.5.2\"\n", - "\n", - "# custom image with python 3.11 - works!\n", - "# based off: spark:3.5.2-scala2.12-java17-ubuntu\n", - "# see: \n", "EXECUTOR_IMAGE = \"spark:3.5.2-python311\" \n", "\n", "spark = (\n", " SparkSession.builder\n", " .master(f'k8s://https://{os.environ[\"KUBERNETES_SERVICE_HOST\"]}:{os.environ[\"KUBERNETES_SERVICE_PORT\"]}')\n", - " .appName(\"process-s3-data\")\n", + " .appName(\"process-s3-data-\"{os.environ.get('USER', 'default')}-{NAMESPACE})\n", " .config(\"spark.kubernetes.container.image\", EXECUTOR_IMAGE)\n", " .config(\"spark.kubernetes.container.image.pullPolicy\", \"IfNotPresent\")\n", " .config(\"spark.kubernetes.namespace\", NAMESPACE)\n", @@ -80,8 +59,6 @@ " .config(\"spark.executor.instances\", \"1\")\n", " .config(\"spark.executor.memory\", \"1g\")\n", " .config(\"spark.executor.cores\", \"1\")\n", - " # bitnami. See https://github.com/bitnami/containers/issues/52698#issuecomment-2275913474\n", - " #.config(\"spark.executorEnv.LD_PRELOAD\", \"/opt/bitnami/common/lib/libnss_wrapper.so\")\n", " .config(\"spark.hadoop.fs.s3a.endpoint\", \"http://minio:9000/\")\n", " .config(\"spark.hadoop.fs.s3a.path.style.access\", \"true\")\n", " .config(\"spark.hadoop.fs.s3a.access.key\", minio_user)\n", From 0ff07da692fea730920ac2be5a9b13dc3f12db60 Mon Sep 17 00:00:00 2001 From: Andrew Kenworthy Date: Wed, 26 Feb 2025 14:14:05 +0100 Subject: [PATCH 22/37] mount notebook --- stacks/jupyterhub-keycloak/jupyterhub.yaml | 40 +++++++-------------- stacks/jupyterhub-keycloak/process-s3.ipynb | 10 +++--- 2 files changed, 17 insertions(+), 33 deletions(-) diff --git a/stacks/jupyterhub-keycloak/jupyterhub.yaml b/stacks/jupyterhub-keycloak/jupyterhub.yaml index b6cdc493..d7491c88 100644 --- a/stacks/jupyterhub-keycloak/jupyterhub.yaml +++ b/stacks/jupyterhub-keycloak/jupyterhub.yaml @@ -146,6 +146,13 @@ options: enabled: false extraLabels: stackable.tech/vendor: Stackable + initContainers: + - name: download-notebook + image: oci.stackable.tech/sdp/tools:1.0.0-stackable0.0.0-dev + command: ['sh', '-c', 'curl https://raw.githubusercontent.com/stackabletech/demos/feat/keycloak-jupyterhub/stacks/jupyterhub-keycloak/process-s3.ipynb -o /notebook/process-s3.ipynb'] + volumeMounts: + - mountPath: /notebook + name: notebook storage: extraVolumes: - name: tls-ca-cert @@ -164,11 +171,16 @@ options: - name: minio-s3-credentials secret: secretName: minio-s3-credentials + - name: notebook + emptyDir: + sizeLimit: 500Mi extraVolumeMounts: - name: tls-ca-cert mountPath: /stackable/secrets/tls-ca-cert - name: minio-s3-credentials mountPath: /minio-s3-credentials + - name: notebook + mountPath: /home/jovyan/notebook profileList: - display_name: "Default" description: "Default profile" @@ -203,38 +215,10 @@ options: image: display_name: Image choices: - "jupyter/pyspark-notebook:python-3.8": - display_name: "jupyter/pyspark-notebook:python-3.8" - kubespawner_override: - image: "jupyter/pyspark-notebook:python-3.8" - "jupyter/pyspark-notebook:python-3.9": - display_name: "jupyter/pyspark-notebook:python-3.9" - kubespawner_override: - image: "jupyter/pyspark-notebook:python-3.9" - "jupyter/pyspark-notebook:python-3.11": - display_name: "jupyter/pyspark-notebook:python-3.11" - kubespawner_override: - image: "jupyter/pyspark-notebook:python-3.11" - "quay.io/jupyter/pyspark-notebook:python-3.11.7": - display_name: "quay.io/jupyter/pyspark-notebook:python-3.11.7" - kubespawner_override: - image: "quay.io/jupyter/pyspark-notebook:python-3.11.7" - "quay.io/jupyter/pyspark-notebook:python-3.11.8": - display_name: "quay.io/jupyter/pyspark-notebook:python-3.11.8" - kubespawner_override: - image: "quay.io/jupyter/pyspark-notebook:python-3.11.8" "quay.io/jupyter/pyspark-notebook:python-3.11.9": display_name: "quay.io/jupyter/pyspark-notebook:python-3.11.9" kubespawner_override: image: "quay.io/jupyter/pyspark-notebook:python-3.11.9" - "quay.io/jupyter/pyspark-notebook:spark-3.5.0": - display_name: "quay.io/jupyter/pyspark-notebook:spark-3.5.0" - kubespawner_override: - image: "quay.io/jupyter/pyspark-notebook:spark-3.5.0" - "quay.io/jupyter/pyspark-notebook:spark-3.5.1": - display_name: "quay.io/jupyter/pyspark-notebook:spark-3.5.1" - kubespawner_override: - image: "quay.io/jupyter/pyspark-notebook:spark-3.5.1" "quay.io/jupyter/pyspark-notebook:spark-3.5.2": display_name: "quay.io/jupyter/pyspark-notebook:spark-3.5.2" kubespawner_override: diff --git a/stacks/jupyterhub-keycloak/process-s3.ipynb b/stacks/jupyterhub-keycloak/process-s3.ipynb index 7ff25b9b..9d096f8b 100644 --- a/stacks/jupyterhub-keycloak/process-s3.ipynb +++ b/stacks/jupyterhub-keycloak/process-s3.ipynb @@ -7,7 +7,7 @@ "metadata": {}, "outputs": [], "source": [ - "! ls -al /usr/local/spark/jars | grep spark-core\n", + "# Output notebook versions\n", "! python3 -V\n", "! java --version\n", "! pyspark --version" @@ -37,13 +37,12 @@ "metadata": {}, "outputs": [], "source": [ - "import os\n", "from pyspark.sql import SparkSession\n", "\n", "NAMESPACE = os.environ.get(\"NAMESPACE\", \"default\")\n", "POD_NAME = os.environ.get(\"HOSTNAME\", f\"jupyter-{os.environ.get('USER', 'default')}-{NAMESPACE}\")\n", "\n", - "EXECUTOR_IMAGE = \"spark:3.5.2-python311\" \n", + "EXECUTOR_IMAGE = \"oci.stackable.tech/sandbox/spark:3.5.2-python311\" \n", "\n", "spark = (\n", " SparkSession.builder\n", @@ -89,9 +88,10 @@ "metadata": {}, "outputs": [], "source": [ - "# Manual check via pyarrow.fs\n", + "# Manual S3 file check via pyarrow.fs\n", "import pyarrow.fs as fs\n", - "s3 = fs.S3FileSystem(endpoint_override=\"http://minio:9000/\", access_key=\"admin\", secret_key=\"adminadmin\", scheme=\"http\")\n", + "\n", + "s3 = fs.S3FileSystem(endpoint_override=\"http://minio:9000/\", access_key=minio_user, secret_key=minio_pwd, scheme=\"http\")\n", "files = s3.get_file_info(fs.FileSelector(\"demo/gas-sensor/raw/\", recursive=True))\n", "for f in files:\n", " print(\"Found file:\", f.path)" From 9d431b52f5b8fba250125c605a5756215a17bc6e Mon Sep 17 00:00:00 2001 From: Andrew Kenworthy Date: Wed, 26 Feb 2025 16:07:32 +0100 Subject: [PATCH 23/37] user-specific job name --- stacks/jupyterhub-keycloak/jupyterhub.yaml | 9 +++++++-- stacks/jupyterhub-keycloak/process-s3.ipynb | 4 ++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/stacks/jupyterhub-keycloak/jupyterhub.yaml b/stacks/jupyterhub-keycloak/jupyterhub.yaml index d7491c88..656c0b60 100644 --- a/stacks/jupyterhub-keycloak/jupyterhub.yaml +++ b/stacks/jupyterhub-keycloak/jupyterhub.yaml @@ -64,8 +64,13 @@ options: for container in pod.spec.containers: container.security_context = None - # JupyterHub does add weird stuff that requires NET_ADMIN capability, which we don't need - pod.spec.init_containers = [] + # JupyterHub adds NET_ADMIN settings, which we don't need + #retain_init_containers = [] + #for init_container in pod.spec.init_containers: + # # retain just the download init container defined below + # if init_container.name == "download-notebook": + # init_container.security_context = None + # retain_init_containers.append(init_container) return pod diff --git a/stacks/jupyterhub-keycloak/process-s3.ipynb b/stacks/jupyterhub-keycloak/process-s3.ipynb index 9d096f8b..f62cc622 100644 --- a/stacks/jupyterhub-keycloak/process-s3.ipynb +++ b/stacks/jupyterhub-keycloak/process-s3.ipynb @@ -46,8 +46,8 @@ "\n", "spark = (\n", " SparkSession.builder\n", - " .master(f'k8s://https://{os.environ[\"KUBERNETES_SERVICE_HOST\"]}:{os.environ[\"KUBERNETES_SERVICE_PORT\"]}')\n", - " .appName(\"process-s3-data-\"{os.environ.get('USER', 'default')}-{NAMESPACE})\n", + " .master(f\"k8s://https://{os.environ['KUBERNETES_SERVICE_HOST']}:{os.environ['KUBERNETES_SERVICE_PORT']}\")\n", + " .appName(f\"process-s3-{POD_NAME}\")\n", " .config(\"spark.kubernetes.container.image\", EXECUTOR_IMAGE)\n", " .config(\"spark.kubernetes.container.image.pullPolicy\", \"IfNotPresent\")\n", " .config(\"spark.kubernetes.namespace\", NAMESPACE)\n", From 79fdb3be91d3baf2738832ef48daa046316275e1 Mon Sep 17 00:00:00 2001 From: Andrew Kenworthy Date: Wed, 26 Feb 2025 17:08:10 +0100 Subject: [PATCH 24/37] add some notebook comments --- stacks/jupyterhub-keycloak/jupyterhub.yaml | 8 -- stacks/jupyterhub-keycloak/process-s3.ipynb | 96 ++++++++++++++++++--- 2 files changed, 85 insertions(+), 19 deletions(-) diff --git a/stacks/jupyterhub-keycloak/jupyterhub.yaml b/stacks/jupyterhub-keycloak/jupyterhub.yaml index 656c0b60..ab6d49a6 100644 --- a/stacks/jupyterhub-keycloak/jupyterhub.yaml +++ b/stacks/jupyterhub-keycloak/jupyterhub.yaml @@ -64,14 +64,6 @@ options: for container in pod.spec.containers: container.security_context = None - # JupyterHub adds NET_ADMIN settings, which we don't need - #retain_init_containers = [] - #for init_container in pod.spec.init_containers: - # # retain just the download init container defined below - # if init_container.name == "download-notebook": - # init_container.security_context = None - # retain_init_containers.append(init_container) - return pod c.KubeSpawner.modify_pod_hook = modify_pod_hook diff --git a/stacks/jupyterhub-keycloak/process-s3.ipynb b/stacks/jupyterhub-keycloak/process-s3.ipynb index f62cc622..dbf0ecb5 100644 --- a/stacks/jupyterhub-keycloak/process-s3.ipynb +++ b/stacks/jupyterhub-keycloak/process-s3.ipynb @@ -1,13 +1,21 @@ { "cells": [ + { + "cell_type": "markdown", + "id": "f6515406-dc52-4a2b-9ae8-99fff7773146", + "metadata": {}, + "source": [ + "## Preliminaries\n", + "We can first output some versions that are running and read the minio credentials from the secret that been mounted." + ] + }, { "cell_type": "code", "execution_count": null, - "id": "b8f37284", + "id": "f0705d7d-d93b-4e3b-bd49-2b6696ddc5be", "metadata": {}, "outputs": [], "source": [ - "# Output notebook versions\n", "! python3 -V\n", "! java --version\n", "! pyspark --version" @@ -30,6 +38,26 @@ " minio_pwd = f.read().strip()" ] }, + { + "cell_type": "markdown", + "id": "c264da0f-6ac7-4dc6-b834-00533676bab6", + "metadata": {}, + "source": [ + "## Spark\n", + "Spark can be used in Client mode (recommended for JupyterHub notebooks, as code is intended to be called in an interactive\n", + "fashion), which is the default, or Cluster mode. This notebook uses spark in client mode, meaning that the notebook itself\n", + "acts as the driver. It is important that the versions of spark and python match across the driver (running in the juypyterhub image)\n", + "and the executor(s) (running in a separate image, specified below with the `spark.kubernetes.container.image` setting.\n", + "\n", + "The jupyterhub image quay.io/jupyter/pyspark-notebook:spark-3.5.2 appears to be based off the official spark image, as the versions \n", + "of java match exactly. Python versions can differ at patch level, and the image used below `oci.stackable.tech/sandbox/spark:3.5.2-python311`\n", + "is built from a `spark:3.5.2-scala2.12-java17-ubuntu` base image with python 3.11 (the same major/minor version as the notebook) installed.\n", + "\n", + "## S3\n", + "As we will be reading data from an S3 bucket, we need to add the necessary `hadoop` and `aws` libraries in the same hadoop version as the\n", + "notebook image (see `spark.jars.packages`)." + ] + }, { "cell_type": "code", "execution_count": null, @@ -70,6 +98,15 @@ ")" ] }, + { + "cell_type": "markdown", + "id": "eb08096d-1f7a-4c95-8807-aca76290cdfa", + "metadata": {}, + "source": [ + "### Create an in-memory DataFrame\n", + "This will check that libraries across driver and executor are compatible." + ] + }, { "cell_type": "code", "execution_count": null, @@ -81,6 +118,15 @@ "df.show()" ] }, + { + "cell_type": "markdown", + "id": "469988e4-1057-49f6-8c8f-93743c4a6839", + "metadata": {}, + "source": [ + "### Check s3 with pyarrow\n", + "As well as spark, we can inspect S3 buckets with the 'pyarrow' library." + ] + }, { "cell_type": "code", "execution_count": null, @@ -98,24 +144,22 @@ ] }, { - "cell_type": "code", - "execution_count": null, - "id": "bc35f4d3", + "cell_type": "markdown", + "id": "1b3e3331-5587-40c5-8a38-a1c3527bb25a", "metadata": {}, - "outputs": [], "source": [ - "df = spark.read.csv(\"s3a://demo/gas-sensor/raw/\", header = True)\n", - "df.show()" + "### Read/Write operations" ] }, { "cell_type": "code", "execution_count": null, - "id": "943f77f6", + "id": "bc35f4d3", "metadata": {}, "outputs": [], "source": [ - "df.count()" + "df = spark.read.csv(\"s3a://demo/gas-sensor/raw/\", header = True)\n", + "df.show()" ] }, { @@ -166,6 +210,36 @@ "source": [ "dfs.write.parquet(\"s3a://demo/gas-sensor/agg/\", mode=\"overwrite\")" ] + }, + { + "cell_type": "markdown", + "id": "94d38d8f-57f7-4629-a4d2-e28142cc6a68", + "metadata": {}, + "source": [ + "### Convert between Spark and Pandas DataFrames" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "24d68a92-c104-4cc6-9a89-c052324ba1fd", + "metadata": {}, + "outputs": [], + "source": [ + "df_pandas = dfs.toPandas()\n", + "df_pandas.head(10)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "128628ff-f2c7-4a04-8c1a-020b239e1158", + "metadata": {}, + "outputs": [], + "source": [ + "spark_df = spark.createDataFrame(df_pandas)\n", + "spark_df.show()" + ] } ], "metadata": { @@ -184,7 +258,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.8" + "version": "3.11.10" } }, "nbformat": 4, From b021d3502ab0e12a702ef9058ae49029b4c79d6f Mon Sep 17 00:00:00 2001 From: Andrew Kenworthy Date: Wed, 26 Feb 2025 17:42:44 +0100 Subject: [PATCH 25/37] typos and add password to stack --- stacks/jupyterhub-keycloak/jupyterhub.yaml | 2 +- stacks/jupyterhub-keycloak/process-s3.ipynb | 12 ++++++------ stacks/stacks-v2.yaml | 3 +++ 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/stacks/jupyterhub-keycloak/jupyterhub.yaml b/stacks/jupyterhub-keycloak/jupyterhub.yaml index ab6d49a6..8ba5805e 100644 --- a/stacks/jupyterhub-keycloak/jupyterhub.yaml +++ b/stacks/jupyterhub-keycloak/jupyterhub.yaml @@ -13,7 +13,7 @@ options: allow_all: True GenericOAuthenticator: client_id: jupyterhub - client_secret: jupyterhubjupyterhub + client_secret: {{jupyterhubClientPassword}} username_claim: preferred_username scope: - openid diff --git a/stacks/jupyterhub-keycloak/process-s3.ipynb b/stacks/jupyterhub-keycloak/process-s3.ipynb index dbf0ecb5..32cf372b 100644 --- a/stacks/jupyterhub-keycloak/process-s3.ipynb +++ b/stacks/jupyterhub-keycloak/process-s3.ipynb @@ -6,7 +6,7 @@ "metadata": {}, "source": [ "## Preliminaries\n", - "We can first output some versions that are running and read the minio credentials from the secret that been mounted." + "We can first output some versions that are running and read the minio credentials from the secret that has been mounted." ] }, { @@ -40,22 +40,22 @@ }, { "cell_type": "markdown", - "id": "c264da0f-6ac7-4dc6-b834-00533676bab6", + "id": "d01b5e14-c704-4408-a803-561cbcf8005f", "metadata": {}, "source": [ "## Spark\n", "Spark can be used in Client mode (recommended for JupyterHub notebooks, as code is intended to be called in an interactive\n", "fashion), which is the default, or Cluster mode. This notebook uses spark in client mode, meaning that the notebook itself\n", "acts as the driver. It is important that the versions of spark and python match across the driver (running in the juypyterhub image)\n", - "and the executor(s) (running in a separate image, specified below with the `spark.kubernetes.container.image` setting.\n", + "and the executor(s) (running in a separate image, specified below with the `spark.kubernetes.container.image` setting).\n", "\n", - "The jupyterhub image quay.io/jupyter/pyspark-notebook:spark-3.5.2 appears to be based off the official spark image, as the versions \n", + "The jupyterhub image `quay.io/jupyter/pyspark-notebook:spark-3.5.2` appears to be based off the official spark image, as the versions \n", "of java match exactly. Python versions can differ at patch level, and the image used below `oci.stackable.tech/sandbox/spark:3.5.2-python311`\n", "is built from a `spark:3.5.2-scala2.12-java17-ubuntu` base image with python 3.11 (the same major/minor version as the notebook) installed.\n", "\n", "## S3\n", "As we will be reading data from an S3 bucket, we need to add the necessary `hadoop` and `aws` libraries in the same hadoop version as the\n", - "notebook image (see `spark.jars.packages`)." + "notebook image (see `spark.jars.packages`), and define the endpoint settings (see `spark.hadoopo.fs.*`)." ] }, { @@ -124,7 +124,7 @@ "metadata": {}, "source": [ "### Check s3 with pyarrow\n", - "As well as spark, we can inspect S3 buckets with the 'pyarrow' library." + "As well as spark, we can inspect S3 buckets with the `pyarrow` library." ] }, { diff --git a/stacks/stacks-v2.yaml b/stacks/stacks-v2.yaml index 4820fde6..983e8d38 100644 --- a/stacks/stacks-v2.yaml +++ b/stacks/stacks-v2.yaml @@ -680,3 +680,6 @@ stacks: - name: minioAdminPassword description: Password of the MinIO admin user default: adminadmin + - name: jupyterhubClientPassword + description: Password of the JupyterHub client user + default: jupyterhubjupyterhub From d3added92de47485c4016df28f7884df7afbdf48 Mon Sep 17 00:00:00 2001 From: Andrew Kenworthy Date: Thu, 27 Feb 2025 16:46:19 +0100 Subject: [PATCH 26/37] first draft of demo docs --- .../images/jupyterhub-keycloak/admin-tab.png | Bin 0 -> 73448 bytes .../jupyterhub-keycloak/keycloak-login.png | Bin 0 -> 27915 bytes .../images/jupyterhub-keycloak/load-nb.png | Bin 0 -> 195570 bytes .../jupyterhub-keycloak/oauth-login.png | Bin 0 -> 22750 bytes .../images/jupyterhub-keycloak/run-nb.png | Bin 0 -> 51608 bytes .../jupyterhub-keycloak/server-options.png | Bin 0 -> 29720 bytes .../demos/pages/jupyterhub-keycloak.adoc | 187 ++++++++++++++++++ docs/modules/demos/partials/demos.adoc | 1 + .../jupyterhub-native-auth.yaml | 71 +++++++ stacks/jupyterhub-keycloak/jupyterhub.yaml | 2 + 10 files changed, 261 insertions(+) create mode 100644 docs/modules/demos/images/jupyterhub-keycloak/admin-tab.png create mode 100644 docs/modules/demos/images/jupyterhub-keycloak/keycloak-login.png create mode 100644 docs/modules/demos/images/jupyterhub-keycloak/load-nb.png create mode 100644 docs/modules/demos/images/jupyterhub-keycloak/oauth-login.png create mode 100644 docs/modules/demos/images/jupyterhub-keycloak/run-nb.png create mode 100644 docs/modules/demos/images/jupyterhub-keycloak/server-options.png create mode 100644 docs/modules/demos/pages/jupyterhub-keycloak.adoc create mode 100644 stacks/jupyterhub-keycloak/jupyterhub-native-auth.yaml diff --git a/docs/modules/demos/images/jupyterhub-keycloak/admin-tab.png b/docs/modules/demos/images/jupyterhub-keycloak/admin-tab.png new file mode 100644 index 0000000000000000000000000000000000000000..7b30b0b475cfe39ef17adeb9bfe148fe9d25a098 GIT binary patch literal 73448 zcmdqIWl&sQyEX`c;1VRb1c%`6kl+MMLV|na4vo9J1W2$(La-3r-CY|A?hc``Zrpl0 zr{3qB=lg1^roNg#Q?veTde_puZoTe{==bW1xL6ceNJvPy%1Uw{k&w{rkdU4UVxS@3 zh!RX}A|9wf8RbtHh~|f39)$FadLe1$;QC~NzUmNpYSUM3$s^zJbZ$$c!k9H1jTrGU&+dUs;T?P ziiGqENm=ggC$B8Xs;|!H&s*^G>rIaryG1`)qn_z~C;5r{oo(rbrFr2Y_xQ-~VS>>q z1w|D_mbM;CkxS1lB-Tw@hlY=Ok#{YXbwdi6i^1u2+VP8@k z(wbrWu-PkfEG#U@YSwaQX({`)N3_{a6hWQce8WIZ#4}*tF-g73za|bSnx4Lb{^pm> z;Bn+gl$ZwHT^=pBDmT`*wMl4|>-E+h^50zhV%y=^|1aBDDp!c7>21$$J?kSvfvkSb z{e~}XFrY2o!0$UZW;?o)T*b`KpQ1)7ytTVK?tgvRrDg;ApY0EU-$nY;FE-qEQhWf$ zL!r=vrN>6d6LaAbU!(bWW@YEv@YCbHi?j20i_+9Or}ZbTtSjw-2u^-#eMb_!c>TBe zslwOx#a94vI0K$k@FeR-QO>^(1*!c0{mt8P_n*d{0p&;czbWQ)I7qOtv0dEV`@6e0 zp?Lbd#2Iwblt<_A?r?q+_JNH>oJbN+)6#up^$Id7oZp^yL7|~26B83nEfh{SJq1|( z{W=YB(AI^Th&+C8^|M~;^=*ef1E3yR5#yrHUe_cnXbA5zhZr~NUaUe_( zUy4le)2C0v13;GQfNS!8^af48y;nL|>{I|}w}DAUj6oqoUbh3aG+*(VpC4pb{>&GD zF6{!j(lvs5dSqOIK%3t`r#Qunk%RPWQIp0kQ9!u*hodGuE6K2T)MB1tzZtl~JTA6L zsq^%J!^6PA-rhCb{}!#*5#efKqLAgAg>q?*eI+zqBRW*yvdp6g_zs}f2coOr`7hlZ_bC?zlBgBf$F2SXs$j7ct5JtKvutiM#k zTZcBZmR&^bnMti4kIvY_*zLkZc2|ohL&HV9PKO^h3pzTLn3T^9_aECudm#=IY;|>Y zcd_`iam&)P)1^NhpPuxV-UHfq8J?c+0hG6QjI4obYLEMsJ^Gze?&CN zm||wa^9I(pXfNvT4dUeqac)%oIK!vI@5^B)buy6Nhq}d3k+;6zaME~A=K(b{tK7tZ zKSld3z>5SANQNv{4^%6-7`U}~fGudmsnY~gMClGC`&qk|R=8MIw zdiS1GGCy3Jolu*ED;j=wlXp?eqVNb{bxjG zaBf{3&PecDzd%MtM%vlm=fBPcvT||l9d?5^j*j#35ntDU=_Q3%-%od!z(;1Ce0 z3X~pA<3^~kmIU-5AF@^-J6o#la&hn>PJ!Wgxv|)3eGmf+Z=hPh>+S&tUTC)yb~v$? zg+IY7KT;;rN>2nPr*7{+#=3$vCcnQ$u^fLuXHLNcjVmY&ND&sRKkph{j@{4k?SSai zE{?6W+xWHYX& zf@SYNpXZsEiKjT9IfMe{yEh>3n3}Ds3MvM!IxiPoCxSpM37*nXfI-FXnMPOdW@H74 z%zKwZWR&>`1)jSN(u2rO!)13^#vG@G3d|~f`dEcIuq{OPF_OssR3Z95I-yiPhOTwC z?^3(yTCwE;r^!#3=EBKelpDDxB7aOQAEQbO8Votav4vs#zq%!z@Y~QV8ea<dQGGf(Vw&ezsizlwYnEqT_aJn-*3^!Z@Us5 zjw#o{Kk3@tOmj{Ey$8J4WC}$N)#lHlz2#S*>fJEE`%Ige(~)M_+QD?%6JFz>6&qex zC(r?Z@`b|K!Oy>?r77C}alEqlWROqKEu9z_=hmTdpVJ?^zJ1)duUVNxY1ryfXxba$ zcYoZd3KEKU>bNa}q&GM$pLfFj2Qz0&hbN>wcT1F1?sIl_%qO1QND`-KN4a-)KfHhc zep;(E9Gld&*_kdaB$jkEq1Ef0UPb!hi?G$$EAG>0?Y`2g;2eBsDREHaK6pFj8#{Ye z@%QgRb#?6ph5q1a3l;Ccb2BcZHXV}Jh9x3LFXTs=|K76f_8Xj>4r2HjbvUhBPv#xl zLJW7BpmD*?nR*$zrwMzRSGU6f%07aYG6|-$l_`3w}s{}^^g0P5if;9kA{{C@W zR_1&L0|(p-|1Ez1)P0hO41T~!X5H(U?B(7b<Yp%%a{wt0=^AJ&|x zSh_Y%vOH76XzHvt(+%Yu%4F)Nj)+PBo=1n|giYA^Pq60!DQ`@HN-t1NKSR`!rycN4 z3Oz5og;1O$xB#W`&XD9k)~tD4mtR-f*QfA%(X)K~Bv~SF2a{J>%OhipcA_rzs~p-_ z%T()KbvIION1v9gU^_SsJD)tOq6Ib4Cd*aibm8lzcKoGWnYF1?1TLz}nomo7>5IZ4 zQ+A`3tpIu(FH{W%ow zZAX#=_(!t#X&5rgkpye`_zad#uPl!374W0z_&DOuxLj~DTJmJpzuOFo$DPn>P7f|J zMFeQh%_-;R+`6GfLg|{oj7A`dRLpG!0=NYUA}Oc>gndzXTsxru<*@RJm^latdEESE8XT3oB-m_;MUd@zAp;z~z)Enwf!$nUW5S7qQj2^D2S*KISt zO8`_YD}uXcvjV-#Y~XG@5D_Qfb>c9Q0=>Cv*~xJP*8){W_;Az}3=}v9O5mTea&N@B z7^M3q8KbuNBdZ+)NMpFPeB1of7sXF?BgV!H93F5|ISj{)X@OQMJ+*Ph?zilRX9@LG zQ0lPde+GdF6(CtXQ9Np*n?a7j|%~G?( z7J&&%tq#}~Z*x{e;~xYw7q&D)4AAt2GNN-XxRguhYxY9r(3+igXL*52pN;;>cRmjI zd9jar?#vlYPDL)GJ7{xX>R_O7-fG3Rk&b-nR*HM0~eZbh>#V z3X%r{Gc&)vj&)5=eU|qG=K7-6-s$}+#FpVJA_DW$VMi( z3rK2pJ+^(hk+Pd}FnQcUH3O2sBFXhf@A_S@odAy|&I4nH19$Frx_r9OAE`?$`=XOJ zA_sYkO2tK&EqUBz`p*u3A&de%@x#Rl$y={9vYhm~ufMUVb1m`8v%8}rTT`EZY>ymg zC8fv|t$SU4Vfs|jho@3@_Nu|=(3zgao>kkJOZnW8+&Ew+4O7k|=2e>}>f_#LDhXFf zTU;_U8T9$-iYZ*@M9BnX`< zH#bjFX;1#3hKIKhAcp2GJ-g^H*z~)X?L=c^?{f`TLU&MiKIQ~31Fwjfrr(yY{l5C# z;;pT@XipomX;_5ec})7y9d!M;sD8}Ao?gfljff`ty94OO4|FCzr?0g7mfXzs20f5J zr0={yZyr#dMbk(mJUPUn4&oLY@4pB^yr7auU_nXz@^D$`yoI5%ric7U=moGAUP417 zT$B!GbFrM`Sk`iX|8bvBIkWv45H4rgKlp-%P|0h|*|J@fZ2Qk5hv>)Zy4w{RODXAZ zL@xa4f;?xLmA$jvU(dcI`w~A5$rW9kzuFzOmB~B$dUvR&9@alu%N9f{=^LI@@5srv zi#DGj+&F*05mQbOlb*nLbhk0SpMwE_kU%0C=OEf{x>YhU3*w|AZe7pq_0fMa&Q3DjLviIw ziMJnT{ph_!xKN=p%Icj7k-_DWqHZhULpd&C=yw}45?_YWt0>a&&zwjVmfuMGWug%Syg#kecr#ymrciy>|E8HJGFT7z(1rp*?}mxOAzjD%ophOMqxEy?P(8-e>tmq z^8mWrpq-At*}Rq=5t<$af8RFJD{7{704SWxWZ@57`9}vbhHM~7FI|!K53QXP1Q_0( z!46gV#`7*9q;H*pv=1n~QO8s|YABA+PI)5KebX=vSBDpQLkWl~1*>>d#2&q$PFr6v z`&9*h{R})fZTc!5r>}PQioDAB1E)QJR{gM1G zXSFSsWo4JQHaEM6$5PBKjnvhI9ao|j?TZu>X_}gw4KHuOxnN6phku<75M2!<)Nfh) z*-OxFE)Jm!)lTbDF)=Ygqo!(z8KdIj%A^X|cFA5Obn8_12!%G%HhIfdKcD!_|MgT% zBy24*&onlM5*H2UZPLOY?>A50_Qm*rg??ve@H;uXZY?xszNT6(^{7(#bW!;=!3E@x z(WW!}9)R)47QWN_X}nsr8`(tc!_$-C;5t5EAjhMzAJ?~?&=a}q7}hi@O3Xxz-Zts> z0h^&eW6jx&RyQy1-{|yTi0uTJfoSPO3s;2IP0_Fi<1PHHpEit5_JcV7hJ~cb6F)i0r z?2ayqe>I^cVo9*E{s*2?!sHia;ji4xGh%ph2swL|HkQ&n-%%C>5Lxvl)8+T4$8NMR z>OXIW7)pgsh2FndW{6mb%(dD?=5KEPOiRAR`7BLReAH4)`OybIPeV#}=iI^IkE?h! z|F^P)RgB8ga8-3ji?y$t7qPK<`l?jzM4gP+GV1Zy0wP2Buo8}uL@O-EUG(Cbp=Z{s z@dtb2w}WAeWzx49BcpkO? z+1VML-z0mSP3Jdnb~_)R`#sm1<&5LL@o`*4BKG?F_V(74hfKutibJdPrJ|zZ!@~mx z7M9t3g&}0UGjXn5UsFeCXaN31Dl9BapZ}xc@If(ws@t-*+Q}G=Apm~=PBTt7w%nl2 zi$Ggj`!AB^(kyYAg@}f5DVmIREi4k$KV{C3nRIopMsBs$5|i$HxU?0X?;dSj5)u(= zB{~W}CeD?1kNxS{i{SK+d}9$49_?5Gh+cV_uBGTAdljqfxxJ`t``9chEl zRy=;Q;?TDnBUW)OCh?~=wE0VqSQ9Z4ETO(^6mL76W>;ZXust`2+KLBwtmSI9b%x|x z1LX0!e}DXQ&X%0FC4HFJxH+D^VYX)~Dv~lC8@t5u%YWk~mGM)(C=3SfXCJ@hVw1UC zH|0FN^fV(v`2KUZBDIrIiR%g+A5*Gx-p}06ob-5;^7w%Vk{*QT*$-ztw3fp=E(JQJ zCyRU$?hGSh+2b}Zs8hT5h&{#HrqTx1I|lc%n=fMdYc1|gWoVA1<7?;7B48jnC_Jj_Q5OQuIO z^!Ijl`a)e?AWQYJ2w(xW5$ZxE>X%+?1twf+5k%Oj_97T5@mD|2=cuSJ2*`DJeR$A9 zksE!!$uc2ikczr;i%5T*kRL5lWl+oiQ8017~e*leFIy}!1Y=*UV3rd(|cGI4s|-tMK!BzgQvr_^Wi8GbD#VbZjL( zc+sDoO^&ZH9$#uTB)ygMC2-$Bs5pEYRxhT9wX=aXmz!WRh7NwAzqGjx%>H5PfDS`_7^me^a8PtAKtQwJfuV1r`QiDSW?&DUh{3JB;=US2*+ z6j;tLkfU_);}#+@sN3K1REih8Q!y@U!9_V z2c~g-&e@(mNbBkO@s7bt?>X9Z*J`%^J)em0m3{oY4?9^_7B3>M)-s6WypO53k0~dH zyR{9_3HRSOzH!<8QhYN;7XyBb>K;dtO`%klc6^pAqJVd0`dA9cXs~7R#W%0A7?#_z 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Ⓢ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 JtaD0e0sxzYrE35H literal 0 HcmV?d00001 diff --git a/docs/modules/demos/images/jupyterhub-keycloak/keycloak-login.png b/docs/modules/demos/images/jupyterhub-keycloak/keycloak-login.png new file mode 100644 index 0000000000000000000000000000000000000000..9de77440aaf3e12e2b9e153a11f72f5413668c69 GIT binary patch literal 27915 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

C@E=d3oY`G;Vs7 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 P2TF6Eu6{1-oD!M Date: Fri, 28 Feb 2025 15:09:13 +0100 Subject: [PATCH 29/37] updated docs --- .../jupyterhub-keycloak/hdfs-core-site.png | Bin 0 -> 39964 bytes .../images/jupyterhub-keycloak/load-nb.png | Bin 195570 -> 207463 bytes .../demos/pages/jupyterhub-keycloak.adoc | 57 ++++++++++-------- 3 files changed, 32 insertions(+), 25 deletions(-) create mode 100644 docs/modules/demos/images/jupyterhub-keycloak/hdfs-core-site.png diff --git a/docs/modules/demos/images/jupyterhub-keycloak/hdfs-core-site.png b/docs/modules/demos/images/jupyterhub-keycloak/hdfs-core-site.png new file mode 100644 index 0000000000000000000000000000000000000000..e741c7d2faee078a647469b61afb4755a148551e GIT binary patch literal 39964 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 literal 0 HcmV?d00001 diff --git a/docs/modules/demos/images/jupyterhub-keycloak/load-nb.png b/docs/modules/demos/images/jupyterhub-keycloak/load-nb.png index 902bc23e8cfecd5532e26c48b2639c40622a275a..4fa36126640dc8880834d4a13d281320eff0d261 100644 GIT binary patch literal 207463 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

U?u*VGr zYXr0CqU)g?y%i~1)KeP&feM!VXro?bwBxpU2oEvjs7~K$9{zN7Z@*rl zYR;<@s6G?+$=kX1XV>k%;oh)Qv-M2b^xil^qAWt)5UJQyES9TTXhvo?W|i|ZCqvIyt5JiiP3%(eTQKF&Hvr?i%r4ac4yk}7d&05e4VT`Qn? zzZ)AEk`)+p6OmBsCA7Z4`P{vb)NmbZB4>`TSM0d~?l2X(HLXaFAL1V75YxjVHS5o7 zjsE9)dn?lc#2PIv2d%J9QJbAqKh_BJ!ewPzG})tnMFM$`;$_UdA(0D752hJ*)8HK{ zeG=qvp55=g>gcm-J2o?XU)3;Ydeb7$7B0Xd1Vc^>4a?~qf2w{pskntBt&WHyzifT2 zEoIePYE;1_!$10ybPS84CzDj(wEGD9FhhGZ8s@c{#0Smkkg++YJiDaRy|pl@eL z!<%AAUaG}a%g`>XXdjTFHdEzlb%w(vf?&GediQsT7x@TH_4lXXxI}jV#{=SkOp`Hm z*aqs)ix;maE~g9e*4s19$^x8_DY*{b;p`Q8t@-GHX||4XQ69us`x4B^^mpvM2u&%r zd*4GJqELSl#q8xCcV_*(5=FH`Vb2ni_+qW9sOMvELmvwFXerw_{Ae6%@n`PyEiDn2@^$ znm+y7zI=_-q@8n&Tvrrtb z{y4jCNPaRxfHee@KVm&jnCmh>9}&$;-ex%4;wwm~rY^DBm{BtywLO`=t*!dQGLW{4 zIp_Ii+e_#&0nWgmgivhr6p^oieD>`8my(rGxH?x-<|6(2_K|KI0#(esJ!6>HJhP(A z#5u8YF3&CXkLvki1~i~O8HC*_Rl^wLRMEeh<>M|(cEqQC-vVn6yVJ6BPv>TK;`!I0 zMPkMuv=4Fk7O7X#ZM@YqrP9cuY8V3~DxDuyYMd$ePI=&+kn%ijxa7f^vNav+GVb5^ zZh8}Tf2r<&C<5c(;<0)12nFY35)w$_UHeI+sB_#0s{}RPEcuE}kY*e} zE@T7%J9QNY{qE^%yC04bG~>nEWhW33{kfq#fAo43A&-UbYuWBU=nj;1h3f_aN2oJE z5u}S=`w>P_3>P?UxaP7lIrO=6-j{(YbiA556WnaD^7kbQayjrKryb=zRZJiVrt&6m zyl(q$h!N-380trglME-FSB6_GvkA{g5kZ6g-rON)p98>bBXAOKW~$x?Crb=ivJcjRl(mX&p?smQBvqhECK@)>doIU@{`)G z(}=-9_aeJ+2)4)gOfma3xv_v=clp)XxJf7q3MDghvM-&5VF{^}>2T82`givak>DsY zHa#eO70RQ3zhtzuxL8*LzZ;C@YGucI-c=kTVL4#fKdDO?Fu|#coB_=o3X9J(l+AHeNylOO9<_N!V{d>O!Jxch$XpyZZ@8LX*XPMCbEIIVM0_w$V($a`b{OOd{nhj>zlCRl1*yJ{=# z{*TlCFkA9l;%=IgM`bt*;?SLlL8j3%W1ud<48Rk_1&|IJsH~opZt62Z&0bSZtj90v zmYesoI&sVFEv|9A6~bxD%;>DVeD=%^ZMLV0!mqaH)$I)2k_mgM0AJXdc^BqHBh+WC zKkcpiteMdo9ld!qW)Jmk*fl0F_@`>;QZ+gWK6@HAoeJ}fEgimh%3FnUd#hK$3>m+P z=nzZj^*aw&O1(Za!Xo*xhEp8d4T5hzcg9r)Olv=sG;y2FY(ZNZxF(oT=uFCgx-`v82 z0GyRhX;M3NY~9XfM^~!Cynwj@WhULH+GZEFAy3GXNE|Zy!a8jaR(NweOv}am8MQs@ zPD=11HWlb6bM#&J9bJA&xY63GX6^;(*PY^6=kH-16c`bh5Vj8BmVf%rNQg4+*}h1UuV26`wh zgbdWmZ29dG@F=6aQ#(GIgtXmXAoB4F#(lw6DfL=?(Is}hqNX@aELP^V2!*;QZ7{Mr z@p)E?Rh8=#@~+fMa)TMKc^6y^3*=p_04o$i!~GGF;)Oasn>Bx$iY&#@Vl9!$X6(F& z!I{0+c%|$goK`WDinVpN#xs9RniH#sA2M2a;#bA$-S^{^&GnJLr-BOoz`9%B@^$$si*w&kr_yxge(&AXsT!j9^sVoMe{i9mJBRLrS!F zqy<|(P)~T`w0sdnr6?p`5=<1@6;V4cjtIS2KZ(xZhB}hfJ+E~Rb#)~^$Mi?{ ziFLpU&+6j41k?YGF^iJP9!$reS*aHWgi^)paxPze+pF|bN2qBDG3yU zj?)|Dp>G)>dAT-aNGAS1_Tlh_&D9FxCZbQ=TDG z{+PQF*e6=*>9)E?|8>1$4l#gS!f-zRa5}MjRX#G;Oey_gW4ZcJTklWi!|p|H5U1$6 zt+Sr#&ICUI;(9^MHTP3iy})O|Hh^AI|15nRFUqO4o4J=C@R7dw0ome{lSx2s6q^%! zafnASOlnQX3Vh;Len^^NbjPHpgepNWwoN5-OH5P_tcP_)Td_sCbjuDrpxl}ergzrr zho(&0Q*E^J%10VS5wGTQX^byikJcRTcm1f?SjTWrr_*m#Jp!nIDa2I31@?o{FK#7V zwq4s&lbRfm^e%sY2v{pIX#1k7pCv-SW#X5=tU24x5Fi8q@Z4SS+Ut3{oq{VVorGxr&`-X zaMKaYDSBxW@U6viEezT!wX`sU*-Qf`D>D1j7>9r>}=;4u{Ex%@KWge2ZT))_& zpWt)TYZ#ep;qrv9zyrqUfqqL>VyXH2_E5SPV0?pbK5F8#M?U zjOzLP`!F*`&8sd(ZCJ3peqXfFlq?Jw)mCQrrJoL+f2nPMiaBNZ(glp#Q3N9A4f-#3 z)PAb)%6~D@X7sXvFJxQI@?rrXw`_7d`xO3lod+NX$aTabm6y3}KaBLHuavZ>msGaEXPPC) zNeh6OgztRH07#Ya1?EY8`Zf$2UkmW_e%DKc!&TUfCEbzR9HUO14Jx(1g7rYgVDish ziWb{P@W?8U5vJOn7m|~aPrljw&ibGG`ev&{h>S1b;Sy+84sesz1u->ADl(2C{|7Bk zPW~396&;ZN1+on7sh+&UzucP9rBvmb?C;-00Q!A10=lOg243ravhP6eBsKJJ}jc{yPjsixDE~eXetB^Q&m`2NmwqAWhOY zi<`6I4OVB316B1i>|~VZRyd0m`G;BZx?rMrweBoV-_cT#Ea~}OxnH2in71ygtm2=X zNu1x4m6sL#@w_H|y0qTjVX|c-(gqV1&ff?ooqLz>GVnRnOd1uBM}1U8Te-eE_CSzV zcVqJ%%Xc-m=a9@&CP}r$nWd?tWassCg(g#AFrUh>h_Ldtz0b(Q8)Kg#W7N0f z@VUudJ;r60dj)gg@dwb-#jGn;+jm+(o#pSMNj=#Cy`wX*{c#n@@%G%i9X_kSl{CX} zKR1LN2!6Kt72s3K>rzp|IU7ktlT*1;99bCGIL=koSUjx=UTXb~RB}gB>yO=qfbo3TLxtd9&XsvM~n~yu2H*WS)w|3Kh%Nm3)=tR<-MvdVX zTK3}MVEK}1x*uUNvgJW}(|yCY=^IAh8sm$nB(D&*L|{+@dN0^wL7GTX<{HS&W=NT& zEB%U=eR9&rXnV6a?21la!NjEwjTs4o)`2>pFTdA{#yMik=bm3}@84Dj!wI5s#kqeD zBm{31tqzqVA0~!-RKexNC|ZL`M*>3+L7;@r`c{k38+9l z;AFMj+vidy)%)R0s4S*&1WNUD$KpznADyvS=;K%UEHu~Rj(6Y*Beso3G?&#ctsx() z_0F?cdQhFUI*B(;dA2M8S~iX4R>ceXlRZqPtgn7t#to90tFv@{r9=A?!uejG-oQ;h z3!RbCRVXRpwVElSF3w5Ub&2ZHyHI-rIwS+qx(J%vz60m6wJZ&=?oKP_myH|s0KcN} zy*j)c9e1Lv%@0e=$B{&X13J##gmLjn?x4*)*G7J_T8oZ2$(d6x8QPSNS;a=egspc^ zSO8Ua3s#Li)V)AdR6g8(0QzRb9JX=VeW8gTm{NGRFQt69i+;6`9e#Vq2k-m_>GfJ} z8Ko_%b>6yey#``9N$;qkX zZ73tH8QGn_Twf^3Z)iibu83_igG1ihBr>z(Vn+cvP-ahVFNywRYGO$J3!I?NuD@3i z*8CuBu1P389UoS88^!NQJ}+<@U>G!9Dh5@aT1B$cr5)@NZSrOm37WOfSw&awp{LoU zVZPkx{;D%CcW`Uacq0PJB;AsJFNPD-4{rZ30~=e4N6Y zeA!}_$!~|1Q=efp-H5#K=28Zh!gJCMz(Fl?~k}8v$#v|284%=X{Jv3ZS0YF z5;Li3an%>*k@iM<20eHbqiRQwgA_-^psNdz^XklKeb}Jih}RP5mBsR!UAulo#Li> zsb~xvV&`$reuq_I8_z-ZsF<*TT1p?8fD_G$6~cH8z9~W*vMZ%sZaT5LX6@JKDxazWWtXCNlGDFacjfinf21 z{#+hRwT;EOLUPpB({G|-g>>y;1JmL*8KGJMHqco&l6b8*EPl0i&6b~Y6L`TIh0P6N zxQv8rAi8w;q%_FgJXE_VAAUH*@-tVMKOAp!yVuC(SHN}Opp{x-9d-$XH*;aJn>`eEI|Qo{%M@^6e28k zc0IIEFGi;_jmb`u?lLHZtX>%PthO2+%(O1Y+K2X!@8{|A)Bre>f<`;X!=Wv(m2P`l zSc<@{r2h4sv=V9dPxkfxW0F0uuX~Gc(VA~}+9sBQg^%aJNib9`WoT13O3WYTv7cCN zFwA5Gf5QEaaJSZTL69%>VISzjaz9av)-W%BAtg0@;`sr1u=QG%`xg8-C@hfAJ(kP9 z@`{WH=~g?whY=>d0%~^4O$u>)ioYsy32k5m;PQKmiC!JmLYafmgy9!NvLLSPfd;b6 zH*qp*>s?b@)!$Cv7;oNmOUm#^P(aLstm+cVqUPFf1YefA-AvNo4W*$_c%};l+&-|J z%6I>i(`epX(Ldkg8OoE}mppn%j;?nXnn|tf1^=0D+X^-UwUw6VJbKL^o#lpa_{3c}WIQ9HZ=WRA^P(HhGaQim+W`gs>A$LYHf5>5+sV_0kVBIn@IRX zV;p*%s2S&?fqB1NO;WImG?Pql26T%J(ngtpa!_-eu#h3wAx-`=A;_;KENx@Q+}O-j zk1deUB{9{gRSzLjA8EpF1c}L-E-@|=X+NXk!vSc;Q2CQiqt!{*F17Wwpkm7<;Kq$h z;o{mc`LZ9f#gA&Xjaw zQJwc4dpGrBC-J^xTR*7i7P|X_s*qrUWKkL0z3r0*>$f*uvYfhC&B=2=dA6m)O1&oo zqLtTqLedB>U4^W?5V^cwE%w6*I=_JzZGM2dxiFckYU>(}!!2%Mkog(QFN$QMxOXX@qK8-3n;7I*g-ccDI?$4MT8}hgH zu=C?@@^JY&ujc0=SFsPdE~3$MabL2p|Gs1Ip=BmqgQ~semAR`)_e~vuODQkNgjve% zydV^@m->>Mzz(+Bm~*NRxW(brE%LAy-oL2Qv?uYfMR6u*t~yjzvn4s_`%(lk%H&6D z*XJf}IXWa1xq(WXzTd`o`c_3_TzrLF+N68rr@#G2P0yDmc3ZEP zq?kL3;!z*CM1ps!30qHHzJzp|1#cf+LEW}@e~7A}dvcpmwz}C_MvkrV>n`aqA6&z; z!z!kggR2nFO|VZOf+Tw0%48{Z)GXdS!ZRa>Z}wKznLAJxXXi3<0KR5jmjJl#*0}L- z)z`~e+l$MS`y4BcY0qSzKev<>4)d7sbi)DBWm)EOvb_2FP7Of|i=H9%?Xj~3uN{p4 zR}BE$UK_9+luP^TH!(PI=tl@qUEtJ%OhhIZKwy_Pk>-!v}wk--hAJrW=^9yeYHo7Kg}mE6&RFZAZvbe_Kvsj#pg z8kE|VW4-n!-U34k&U)wOjhxm+jw|0{FX~hisFJg5Rox+OwRwEB1<$>9I=e zVQ0EDg`yN1FHZJWtnd5HiRKZ#BlCpQ^-TE(lG1ilCrK!4$+{%7eQCTz0b&8#cyJRO zLCH6$rJwrVpu%>eD{(g;90ZQXwr3CT;$5A;pyK;2B&9Z;E@iO3h`Kb(KbIRr6TGP1 z7Q`Ri%Wb5;K}@|qp3ta+DY4m7uax5kk9NK%I&{!!v9Kw9De~eEuL@hWTR2K>IApx@V8D*SAQ~cijX1^Xo>OPaqN^aYs7k8!?7a7yQU|RDrw_sYmTApx zGzT2YGPT6R3S0)6#?yUFt~uMXGDLQCT2{|qQ(bJ?QWNooRkas2PEQI;`;6+N9&mSQ zB#0-tsAMGK3`&HU4Gvq|o?~uo@~Ad(q{+f@@h&yY$z)MnHQIjrydA}d43DzYGKKTD ztar#6On%%G2r-quBgJ1X>g9hw_);w)Au$@VkAh4}+;ODv!D?TPh2uPy`m`p9c5QTBYm&Zm}w&P=b=$3P*h(4+|3lGf@88V}5jT$yI2A@EL zT*n%8UfXL+Q8?HfhE1;7AQ`n(WXni=&K8fQ$@CpA_0aal75m^a=6yo9HkjPrLIPr$ z_jn#o(miM5ul2K9ToP3ywu_mDF3ArQW-)RZ`D)b#o^452f}#>3Td}($=L{*_V$$a7 ziI-mDjt$^05Y6G+Y4U#X%DmrXIFkcA9A)g?{%)OVdayTpplMhTwwc`s*Gba4lRLmM zZdw!BX#1I8Qh!j{kU<>Pn(V5h0{WDL2&Ly-`gP11*>hgI|F_&p&T9AtcU5gnX!}gd zthmJOSG}}=b-|J=&w%rwGv?c?j67v0eQZNX@#o~bMLvC$tvNyox{unF)bWjG@D*@*J!a{mJ zK0Z?*=#p^5b_>KMK1h-f-j@e{-BQ^qe*3h64q^LRz=2nO)k1sg$)~mO0Onq_KT_2j zeV@lO9r6T8efHjDp- zK&tKf&L6!71^>JVEvWy*RRD2s;LQEsQkVDt5wx24j`aQU0MG!3iCm=xh=LI|y!g`u zyNt0Optd?nZu6jDj%)BQ2pY&I^re@YL#&|fG0>QIDYj?`}FzHXbk zo;I&my)eSXVJ4*1F|P}3JDk~otDnkbfLI1KkQiL-)uk143N9!!w=Fs*XD;_PPQ30y@<&xq(tJD4x1<1J!B9E8!B~FRAxmQd(2Xd_ zUcQd@%K)44d8Dy%Duf@hsuWI&DIJyNl)EeMjxP8Kl~zY9H0O=(ZY@a%*sXTO9lR}d z`?Y;jht$P@59Y=p7jmZ+O2Qh4l9h&iK{}t{YhP2ovrg90-HAERo5^ivlqR2Bw#IoZ znnbLz7oGCW!=21=X3n>xOLT1Yen?3s&M5ZkTqdaF^vmv@(I$J*T*@LSZfhYYMbMc~ z1iljssN~qY-=ehQ=?U6ZDLiVj>~!9Ys7y5)f%>x$H@^0!e-0}RXlj|0JuGuRbZ~(;oA=kRFi<^e5NL|YRs(zI(ubT27Y5egs|U_380-}s z>fnXx@T;(^!o|vzHSYlUZ*4_D9lq_UYHsX#yz`@%ls+cNR#!QvqpZ3_;#ekXoach%}4O? zV_DnDc|=e-4*s=WfY(lIYv6?;LF;^=hG9NB#FfrpX(xI^IFB($^CD_~_Ua3Ii{Sdpdcjm!S%vq3GGr zFl~lyG+(+Ut)tnn1~WDHwRg1ezK(B6)8s8~=XKUSJi!wY?(aLepp4Nrvv~NTNtrk9 ze|oS@Kk)oO#vSrHrCY0C=kMDTT~p6x2O`DA=6^ZOiSXL@jYrHHI$8s1?gCW9uv{Wu z*@5?+Mzg$P7~`KP(=L)7(B=ov`IYq(VKe2eyb{`CRVGVU!8(et@8ji*@z-y`baEWa zhGKOtU~8<&8cy%%YV>$sX00uu@KICrVr(6W z`RM$t*`)&+{qmG9oKCIx^TY0NEuZ{tI|9gR<(Xg8CqepdNd$mSZPVEi(lyh!_DhmC ze*9NO%6gmAMfp-#m=NVZmLF z)CNYt5{|?oup6L0q|P@5nOT0tvpuYf;4aMI3BBMQGFTsY--zZan(hMA>eD1+3xZ~><+OKX@erYa)uhjD|-tGn)I;fFF^uZFa% z;ii^!u(QdaVwDa|Sf}5WDOSm=eIUAfkEgBvEqF} z@pPry65JQ!7*>16$8>~T9^Uj#{du)*4AITD`;zXS0<<~_va(9iA~U=Vy$-gg?}jp8 zjyBsdx>>PZwAp};nEAA%2&X_VcAFy#W$0S!lCRUgy$l$=5yAyB8~!Pp-E07d)LOlA zM>aqlVnH|*5)wp6jCp;^Mecp`LY|twYj!2DDo)ThF$dfE6QSh5JS6#QQI~q~jY@Tz zpnN28TeeCNI(USTsa-fYGQ)IHx60mEgPA2pyHGt{WG&sMFPPvqE47`jv2De~4YVDP zh@%7D4$mwwQ&ou6JT-8;4eH@D^3$VYc4Lhrp$)4hnr+#_D1n%SKw5KV zDJSH&BS*|&?P<7@x!FG#yXsb=t@jGbnun>tq05Se!OKR#D{(v98OM7E z$iGzrndbyG1;n);<>lq2>P1OS>FJ#Cm|5p|yg29Lt62X`9UyHTAegTN(kr#i*kuy| zwJaS;60;jS)9DEv-#_cz)yQAyT?Oa-YS#Kg$^}jo59k|^nZAv|c5#Ay3T#UW?5hEBaG<*kvCV+&Uofn7P@U9s&Xuxd_t> zL${8>O&duAm8UD$`rZSE9(bfJK_4U*#! zsN?S~2^uh;#;;1G*k8ARZDF)_R~DWrkV@tck4cI<+@sG=%e0UcMl zJt8VUzwc2(84M&ucbxA?O=g|H;<0)Txp zL$k9h=zJS<#Xa2E{OT*~2G*j%?Nxn>cnzz`M|%Exr#$l#7cnL&I^Gi8^QgORmx*Rj za13Hu$9X9AIVWL{Z5}mbKLt5-TWAtkro|6k#EQ8*$o6Xp@knu{ElP?Via(_mHnJt& zQfHC~?(guGglhEidCx#pc?;=au#%Wvf1|^9iDL0v2$eSW{m zzu@J_wp_&j#!$zmLoPVfTotn6rYx|bdvBeTe%Q!l2QgVXWpBL5y4#y)3q{Qu(re2? zQ~ZF+yC5L-yYS3nA$DN4B6^wjTg8$VF4ltXlaXDVMtpJinJO$$43^9YD;U)>dnR{I z*{_gRd>NOfTUT~&2fWPNRjCOJwISUL&Xfv{3bJ7!-S4l`W0d{xnv9%tAUQvSg^l$Y z_w7FsJT7s6ylfUxj@j0r`5{w@)`P*u!||l#oBlpq7#ZFaaaP*bP&t;&t^0Hnt*iH{ z`ZGKahs5(~O9qD(tM;3_Enfbi$R}MkFjgejM;%ow-xh&*IP*})mtHrK)dmR=JXXHz~cO`Fnfa6JW`V$Wa@#1|00=DitWZxVZdot_TUa?ZH<~RV!898OdwV zD2*p{SQ;Ni8q>>v#ysceS{Rj(efaG?I{wg2ui0f+_^VQjR;!#@mkoYUR6)ffQ4jOyrCnxaoGf?;mKywQxrr2@1I1Hgt?AtNof0+P$c&5!912)T-Pb+yyHN9b zT{C@Q!UD@U-Rkao7uq`~EM@DQC%8pFe_uol5hVbTN;gEe(6`m*gm}Dm7AU-QQ~6Mn zcFpRVnBnT3(LM$Najz1~43yBYFan6zkapjkDZeVsX6*%KdKzM`A+W*H_yFXV4$VhD z9jbIj`pN2=u`wcud=3j!E7gSpl=NyF8X)~T_pty`&Y|4|0QD*M`P;Jy%R%U)8*0x) zh>uw4so2z0WrStEz3KYp)nZ)j?G{9AwjYYWtHW4^+X_R&V*ToUa{I)h;9xjh#x{S+ z;nnHJgIzC7Bh(AK(llkBIpp-2zHnQOQW>?5Ytzk;kb&Ie4$|*mBdx}jn)&7BvbwoS zl#uaRQ@FJj3>7$W^Ly>+a@z%mer4D1*Wf_LqQVN~7pXrd-)xkv>!e(IR1-#JRvfh3I$XvSg}t#6@%CuQ{4!l@kg1^f@H-qF$H&>x^~vNLFC zHoY2-%uxz{llS`xpioy|%O^VlXg&)$IdLo@hu>}rKGazxU}D73b*^n4L|DuxDPDY| z;+*50i0Rstfo|-D4>W4we2=e2J0ci~nV3t8{t^ItqbNmpby+%U*0d2LJAb*;H4Zl$ zj$9nn-K}vHggaZ6joQ*hwN7pStVJSvhA05;+#->WH=uw_61^&cea+H)ihT?7k7jO9{x8Vdwt6FZey3=pte4mZI&6-{dRnQci2{| zmZB(@`^lS>TTOc2!UY%A+wGYV()LalA*1FfIpY%qm=qRAh726kmWvk-x9%6=RHqLS zG`VNbyPWB3S_^pNwB3ELBthE`>ZsK46X&g>{Gb#G6;{R}g9n`rmdzUOwWPQG)xhDm z0b90FcYNZ@;do-WBToTWRJ>_ty37M-)+PBce2*l~I~uU?LO3__9t+mkU~tQp?SLmo z?FQ>p2)h{iZ=lLglpjBSc%1ao#K&{d@IL@k8~i^n_}ukFO8wQPKs3;n=NIcx|o#XqaA=I+Ogy|1;u(YmyDk75%c`wA*DNZQ?Gr z;BSFe!0niXZBaN6HVsP2m)0|F&yyOWd2M}UOfD-fiuk}@SFC7s9dGX{m&??*I+ zT?B2fLAy@%`t!(e8rRE)3SDn+jXFh=Sq7y*tDL76!#zp#PJouPN0 zAg+45-Qts*L!Ok?Z~o|FrEiWWb-LdugZcI04?Wp(7N!xR<_Fx*l0TYivj;a2)k0B_{5P(G5p(_1F}0A;suoIKewfEZ z6VTHGI2CnDq@Em*$05!ZukKIw$j7$md7+g7I{5tq3lK5h+DDRo^T z&-gX`3uxCVm1QEX%Nv-FALC)NUpGfDA;>*p0Z1m-9ha}>`fu#*`IheP=PrO}#tC~P zCx(!ok%79L*;`MGC(D(Zm$Z6NR54chxEk| zt_NUJ+xz(+GDvcTxIWn+HmkYI@{X?D;B0pn7fod*AgV?n^0Y8NKCr91zIp2Y?(Sf~ zw#EQhbw~-j#ne%`9Y8F`^-$&S?|+{EABa{A;SlyP^6~L;Yj^kN&jd%+`u{X+ZVRaD zKXi7Y->Tm~lKuWEpV+DXJ08C&EB?>7tLR9+0O3u}n%dgh)PDsxzp2B)!z=&De3bgC zN{)(>m;G1$Re?c4LE)#S%B7WUZ~6U6>c5+k|JB<)48<+6vQAz?vcZ3# z@OFc*@qu|P9cHlolOv#!GZmYgojC02dwQytKaN2Gn=oqd-8ms3@|pvr6jYjx!2?3R z4ZC81ayKAx2rxVX4Q=V{Tqh87!wSignvB|vn|7lbxuf{RL+~_%>Ovohe-#FICQIZ+ zMb~K#MTCV-0YDKUhea*?2QA50tKymZw~l)sp1O9;?XfG@aH@8_E%DsA>eiT0F&gjI zq=M?83@cVvIb`UzgmC+{Q3*+nlZUl&NW&;f@4Qv*<Smv6NW{BH=*X;>xV<8w%A#!_dRJ*O6WcxFm?3 zD9?~s9x~c@A7+F<2EpY>Kg*74?($>F9_ML(vO9LGzfyqC=LDDqBOhgim83Pu_DxtG z?o;^IKHQ(}(VJq7V#nf^k<<9GcnuK=G^TpK!|m(nKJ=Sl09(7=l!h?{JAQjQ$ike+F4$`A z#u~i2%U*#u-&=G7^M|0A6Q$@evpV$U%a_qfNh%DMSJ!8oWMHlVgmg8Pq2=u%5`KKI zVBak7DY({ld?zPTB+P+iB&K*<@ILp#-VCWp0k7c0H6Gncbvd|}cqF(ccJEhU5JuajozhU5trWz8Uhco$pS7XisavxNS zs%|IObqTL5NepD7s2b~6X|z$$=xA3>sg@0q5sP@ymvCfM-EY#KrhQCWlrk`V=0tfM zcSH>h*Bp0;LqJqvEIV2*WtVM9nT*uwQ0X$4JTQsK<(~&AH?e(0u+&`=oRS%S`ZuP5~DZ)Ef`;GK#-wam|wg>C9svFzIk7wNbuU2Lm=r8?aB1#z6<`~tV z#+$;8X&OC7j7H2ES3@K*b?($a>n(K4!2S32-=K;1{LniM1#HU3-sFhx=e?Tk)O42| zQC}+jnaC_DTsX}rtV_IO2R2ZqybT$8Q7u#Esw?hT>N&b5p;qJ>Hs?tPU)KH zsuJ_OL`AL00dOQ4H+Kr)+B`G|oq(6;nY8sMuaroF)sDvvm6rziJ;B`z5w)p7;W^^x zb~x#bU*3(Gq>S)Fo3zy3Y2s+`C7-v$Odk_j>(w0{2uJi~5Z;xPr)1d0zx#-$jEVnGw@ zMaIcIv?q%h!wRee&ykS}6|^2_+7B^QR8#;kTn6X@tJhe`0uuH6#Ww(PI3_M`aI5YY zxeT85#BG4?+cEHuJ7?GbxLSQ9NRgoiL{C+6>j%>~^Iahu<3#`Focui$aZeaWm>M<4 zK0KNJkg3k>Jea55+hd#R6660zMwR;iWOn~C{{O!X^is_Ks#|_^o=lw_&&o`vsa5T~ z8);;}(4m+5x$wQXgiS#0n!{VrqAt=?*=R0o>JIG9Vt4P(cRgW2y)V~bJo1lI&{HH1 z5bMWiq^1~!;g;>O+1PxC-JG)O<0KD@H+Idrf(XQd!*sy0t@84p(f&gq)eIe@F5wPGJUmIT zRSpN0YJK$dTuSCvW6)x{EI~XBRCo?KUImL!RB9z!@ZQQdAc4W7HkJHgb^OT%ODsSk@$!WAj?gR>(7 zn_N065uyTYfDz7kCHT2UV5WD(PjdjZ$aPgy=Gn{Rvl&-<`yGkRuasXE6ndGf4R52p z9PH_us-}u$W-z6-y{KJlP;}S7yhk>&zB`SgUue!MiM6M7IQ?RuoPm-2mY<&)y6s`2K>#db<83#DI+u>!gQQQNpx?>wdJ$W!x6-6-}a% z&YrHKFitI-kqv}AmJk+8lc#Xvw+QeJQ6-q8uh~*-cZa-W_6*O+QB^?9r)DWq#jr&vf7J7YAp!w&rUKT9t#2jKBx!KbsH#$b1lO;{t+QbfU*u zW}{O;F|?)F>F`4LdGr^7sqFeXMNOOfg9qKN#c?bahwtMxPlk9#TW(N+v?e*;JC3KL zOzdB$z9BtDuRTc>6Za{rOP|wq<6j)8s207$!`xsw*}5AbeW~8s;YFh3-JELlPAi4O zi%ZA^6`&wAK4~O>?)2>QfJgZ!cHTxe$VnCn+4t9(@3O3P7tkVHbHZp)W>8oBt6eRw zUC4CcqV(l(8^)gN%2HF$Cj4q3)fesh)U`iE?l6EA;8o@mAzAn9H`Y$z$t|gfe;KPn(pIz2w3#_m-<{YIB$9Dss)B*56cwLP;oog#;wK`+&DL~5m z-M`plul(;=C=U&1@(I<(zfqp^Rivz~K<~gKuS8@rt`VyZPL-hARN4#9aC41ZHJ5ql zM(B6l&cpI44Bcs4&e4+BOoatsU*uJkV3=P=4X8FJ7dk~na^h$Xo)-~|{EYaJ+t zS6pzs&x!FfNZ0-KwDCTlghUK~^Yx1RXS!kVZVfzIj}PsP11W4l7+#s8_siT9x7id> z&CV>&C-xqydgQPYGyUDR+TpceBq6acLee}pTq7-pZE(yFwFycSPBL|1VxhD27KV_8 zL9I}hd>zxA9vPX`7+pmwK%cWWv;)t-_J)JPHIZC1wQ7SgiQKN}*RT01nO5?ZIMDG~ zlVPV=bIKGS*4<%qj^R5$e=IQs8^>lt<)$g17K+wp65J}+t(%Mv*mFJo{8)EK#OKt% zlLNV%dLoy?roiUB2(nGCR|n`a@GY$pZwt`r+b8wozZ|L>(S)H*L?qphD8YDwk}K%CB3Ed5cS}^kNmtQRzw4k zs`|i5nT{bubvIG83Jbs5+56>mtYh`v5q8adeOv9SXu-MG)}BT=O=`9t`aaWa979y{ zm|8LcdvmS4&sRRy6DSQR*LOZ~NJ2vQla3mk|MYsD>$a;D(CbQGd!~^rNtOwYgnLCJa98Y*qP!uaf!k2dsF58CyY=LdO5HZO}~0m zMXmKP=f|3Vk}nm(K!^jGjdqZVl%*uI$@>u|T$L%Oi+%hYkw>PD%c(2379S=^F_f`y z`8av}Uu8+7GWN1y#T|McPh)o)pJ!B}&*XFlhTebWJ9(jX>{zub{>c`z!GNLiaQ?b4 z?s7Xnv;?as1Sg5)o5Dyf4hA+Mg73xHfd@5N6ml4y5H)V8=<&EDlJcr@=CyOm4xAXz zq&+NasB9VfT-SpKIXM}3gm6hBY=Wx;`5`B$7X^CQy20^^Ut4buf;C;a%iH`}nkJ_d z-P{(#^@;@fq|U`7XEYpkQEjMoHwY(uJE?EwE-kr~Hw)ftAJ10Dx_&#|@t@u-^MBku z*QBn9;xK3pCRz}>zC*9FVGP7U;wmyQ)FjL##s092kG#zd_a3|u81UAOZPD26*Zdl6 zC(h_e#@57zE<~?6j4Y8Z({YiKTbtsEWGt% zth)s1ui22#_x;e0A1E=)4aIs!-$7}Dfo^lmp~upTO_Zs9P@8|;n_n=kSD$4@A+6Gp zzR(&VZ;!~(&_+2XBa=OejcF*CtR4tSQeKYE>M2($P`x#HKJRv;L;DnZj)7DHXRAF$ zU9DMV2ALb{?^V>#2->?>-NuHf0z$E?ykIk1`%pihfSbLb%Wv7W z=h%yny+NtJlPaapQxcLqW_EdWIBQfrC(Z;)Wlb42mb~&C8*N|(y=L@wg~IL`u?)4A21u_>wn$J$)D)gU>baCha?^JIbcI& zxIrXt;qS|iEOFS7zb4ht1$`A`vxR0J-OaqYIt$C-6MUe1VcXF;F1pF+xvi9kqWIo? zhInD{Tb-aj^W)ffb*=2+5yGC5j4VHsk}g%<@aaA42&uVTo={GM>01(w2_}p;ACy9U4tC7X2eIZgHN~B1BfGuw8`H7UYio>n$wPo> zI+`FkIIJ~HIbo44sZnCLqs&$;=WyV}G%qka6o7`RYj@TXK*88d?E#gZ%Ifr1Wy4Zy zxaW{z$@H6VlHlDTDzsD$_~aB^N>0@+6W-|njB-3P+!?;F*qR$*;*QP(JxQYc!WSg`^H+T!j|N(;q{ zyGx+BTOg&lTY;h}#frNGcZZ_p3>)CVdwdWdh zj4?G*|8Al#mdUkZcSc-@WayR`QxVhsAw~U&L+4nF^9)rL4Ns$& zeZFE+^3x2}#QIox$3AFl?of4R@m5M*u8PpCFJFPOrmQ)Czem`QjwPW6 z5yY)R4>#E9H>`zPPg4omlp8BFW{dNN4EGIar?-PNe0qG>`y3Rb!BmI#BzC7g3sm+y zz@m)i0drfuQ4JcoNkg{Xr7@X*vlU_ZCsGhhp=md?hiG8%5?GC&1lo#3q&YjWv#vEA zcP=?-Ix=4ID%-pFINDsuD_b z0pBiG7n%d|OVQ5=ey2({CcnM?!h?pZ%PR5f=a$87+LQ(Lbh*$biNF6f21QHU0-a5M zfghT=4(M9X$fD;!wVBMQr+c?HA@O}g54hqd6&uGtv;220L8hN0&F62ibf_8$23Xu~DH}&p0_k>#lqw{?=pc^iH>-i(s z^K*ntYtOfu4aG|n;rpSGg@sW|XBajR5y2g!Bx+=~$>}R>>6$N>v#Qv1Z+URk@N7#4 zy85Gv(6r9V%tq)N<%P;m*Om$Y$r+xLp?V$P>*ts;?AVTynGeOk@2503#D@0(D<@lw z8x)M^Y)2_`6C?I9q&^?X$Huj zbH2uf_w$W+PFouDquZgpar}-H;|pqU6o-1&H)v|Se=4H+=2!dr5ai#yyeJ@f{wm<+ zQn-d%L*&X_PF3q8-#dw;;4usQnbsMuVm zw2Y!D`V~B>&zW=NHR(Pu)ErsDA~+Jped}*fl5$E@pGx8?(GC;}uYMva7Wxpdqa|() zzJogHZq$+H!~{-7)&SF9A(ou;BfXeB#D0Jf#w)+x`0&X75v88pYaxWTc(8BkG(BX` zn0|BJ4}OW2RtVLGq(VJh~^e4DUc7(WX>Evj5n#as}jAC4}M{`1oXT zNsrih3%Kk+r{lbyoY^d4C*XTrB`1`qwBLoHv-?;ob_8&6_!W19c;>LPJL&N9k(DIe z-gE!oFOzo8-`*poz1d9kMxz!5bSzo4URD{M`(r_59DU)VZ-2@qK3k-D6uu9MYj190 zo39H4bJ{TEj<{{!^j5k;`LrwqRPmKR09>BIFk$Yr=Or`n&(~5$ma&?eVQ4C|l^9CcKC^1Bu98s2-f>7U zUfii}-|V{R&4>DHLjBP5c0my9q?Y(VwS%b6a%Jwxx7)5)=@I~UM`IjiHB<0!5qEBdWM$ zKL%61GdSK0D)s%ELs-tj4xvM}u5deJ8ZtAxe1UgaqzDSxU{%%`$=!q-J-_FQq{{+< zYr=#t8y>~5+f=Qz@eSNXNyqPT7N@nXY5wvQV6?b;1Z*aj^EQ9fhuRDrYNKldt~Ec% z$cz~W&V^_M?*n{fa4}UwU-K9|rmBfe%(}1(J(g6q{*gJCJB*NCh14d|@zO?ht|jfrH=fT%4ZXujg96vX?OW7HZ2-V4VJLids_S zzJ)Mm08Au)2BOF>St-M67OwWe32jA-b&cNiS2*pagu_mlJ#TYFLrNUOQ!jaBsY>&f zUY6tZw$MmL-Ydje^2#3EJxjUJc3Q}D?exd6srGrQ14)7TRMJ16WQDFy&g1qC z`*ka3bdMA2k9z}$hH#CU<8wWi3w|yTcS_iW=P*Stg4Nz2*;DV1cw9sucqpkf;iL15 zPITu_*gN&ioD^SK{(1ZhcGzd%LFe=&0_2s_HAy((v`c)ji-?sz;8ts`cRDxN*KRTz zZ?JM;J};G?0=I;po0i3Se>+XIT>eaIh!tV3b##J7XX@+q6v3%Sq}Jif&_EY0O%~tG zPjqjJLW6^@gdz4=S&rewHj8;b}IPTZ$kTJiB#R2oiAb~ zyN+;jjQ7c>iPK;r}8VPol4IK zwKidyyU^a`61dZ8-&T0QRP4M=;}TXWl~8*8C!_Z-dLHhN__p_PE5U2rdRJbA(^xru zi>^Er6|~~~qV}wFoak`(TOrh5=an~5f-kn6AGbYQHeb+_Z!06R3Yi5Wj-Q)Ge7 zpM^GyVMF~jlJPRWIhV6N(%51m*{aH{sJxfthjubu1Srd2#oLX+i|%`sSB);4dxmhm zL4%?dadgz>2anC+&5^v&32=Ke6A=`P_Onc&{8ER|l`9YKBgOp= zT^BI?xs6@AX#|eouty-{8!M1Wara6|4sD^fBaL{{PrHG-x*+jOKrOXkTqVc zCagpX60X@u1;zUI;Lr9@CMwA3k19WTiP5CY&oRn8_lP;=3AvFgw<$v;94Jq>CAebB z=DIXTLpbDI74cG-g|gU^9He_Z61?|OD?=Qo|M4O^AW)Rnk`{}rovG4$Ws^X7&Jv)_ zO7AIJ@Mmj{w;HxVk`a@q!XTu^a}^ygqU`i%c|blezHzJ7g9lA30#Rr?l*ffZEiTT{ zytxt0D6CV3Ci#^wAq$f7Lp;w=yeg<-i_=aHF0qN9HYf4&sHcNkfm=-y_^N}`a5e&` zy<-|Tu$Ua5j#3VF*+G3~pwNV#$J-z|Vg{v?e3Odpx&Quf6Z0~OS)s(HaBLeDK}dda z(blY}$MEOZE9JJ+m*g>%96!e@#Xnws{*j7dBtbDc?RuJDM!rQt6KqrX9Dvxk?1CA2 z$#-kL%VZWNCnnaU@f3Z&Z`2)5crSZUxSvqJn#vckFn6 zN?F$bdK=${lCDaNeR-K6ytk&lAbf@5nedm(ZNRSBFsnV~xZ8@0WU758P2R>TChq#M z$YP2ClHUNYTwJCV2{?qpM~Z3kk3dX9zxY;F$K8J}hk+(g;dW*+$_zfH5>$3Sr zDJ|eCN!E1SJs#iy$J?u-zD(ZK4DO^JRdq^Vi?$DhlChmo^uIQIW?`4=hvR`ej4 zkeiwuOu7mrg$1TWSH4BoHGP6l3QgXYG`gzTJ0}r+? zT&fZ>01}{xy_`fC^a)VEo|Yw(B9rBLt> z_m&-@&W9$L%E53tg&@~~I08=MI%JPa&AkKE! z-tn=3ieUdhe!rI9Tyh}$Mdw+g(X!Cv^PeNfm70<@twlV7BqxIap;kVy@euAeV{=Pt$1(wD4Cb zgyzJ;Xf~oIVVdfeD^eT^)|cLh7;obE)BP&q4f6AGv2i`XAhRhtPqV)A9S5Y?XmhOO z;s_gr;b@LIlZh5J#qYhoGN15Mn|8BLuAG>p?i-nD8EGqvd?zyc&8@w%-F#?)Jywrr zTi8r=67Cz%rs~14aJkNwkFO=pwfc3tYV0FtH>QG*{J@NzL#f*>D#tE%sXVkq&8OCn zIdv0-fiA*G2k%68SaaW49nvKh1$a1mKMX-G`@gao)-SW)HkAkLBE>)G-_xI3<1HxD zK7kShQG6{iED>!;c9%pl(Z24N?9Ruq)%A2@?So2IIJ9fP(0cl28vsPC1Z9@$37I#& z#+olzM;3_vEF>1HzW%Zh@T-rqM*2SGtp2@v7=JPQ9aAT^daaLLNHFqeHHMHNoib?1 z#p+;5)`jS^!Mo#~Qah1UgTmMEeJ^^pR%Z4~_t)ZhZ$9Z{e(GAq;7s)@vq5=XI1Hph z$>P)SW+y&fK>-<0A)z52v_G@je0g^Yy?=rN`jE6H^dJ_ZCH8KK2I*`D zFq2b+uzXr_F5!Fg&%R>2Nw4NX&3fgpPA;26gm)m6k^Z@S+lMkHGm8OE_#^=aOrKJG z3slKyYr{eYa9R;Hkv20nX`{&3*KL2CY*GvKXc?R~R)4Gn5T5QYb)bUEq<83KN$8d4 ziPoO?Nu2b6Geg@z2~YJmtJh|Y)=u8&im$<=Dn;(K;~PTcFt83g8>hb5Y5W6&Ik@}y zD|~=!Sy;>YssR4vJ(9kM_xJIql*T>f=-O1-?m>=ktgE z3?^z%Juo!h%$~Zk6Fnw|(uCyGNU}_n4NR_AN z>y)?pJUvvSf`9P_!%;^@2~NH4x5V>!hrgC9W}eFVMU!+jIS=cROD{awdn~nfO`_Ye z)Dwx?K2c2#HaYA)J0O25QNP=@SR|~X04nA5~aE{~0svCC3n9{y+ z6e2;oe-cJHcvL!PGSZWbAt~8FD_ijLcG>7%;z|IYuM6Ecl%QvSL&;E3a#63odv!ug zahs9P*P4zy)^q(;nO6&nsk9Rvryq8QUSOrv@g-QKjNOI{h5txeeoyz@`HLn4KFV=y z0|w|zek^u_EeoR@X{|M)*!5kXZxj#VapViF7+6FN-cW-a`Cu(+3N+f1Vzim^(!OQd zd}VbSRoX4kqaC>n_OeLzciOl4F*&P{jc3|T{<;anVSS0}HqE|bfpUto>JU?=>c{d1+{NXXH=uwGo48>-?0LIWxr{Yz@<6eM&V*KktoU1o2 zr=n6mI-<1y(8C@5`gBK~#4xhoz2-p-Uu-n9)m}^Tz|x70T}sbc{II4|QA2nmLTjRW zvnvA21ttfcP@t0IXObo4ev98s>kts}-g=jS3>1F1$f3pC_BZ-7+(_DgY$60V?sNGB zB)GafiJNj3&g>H?c0>I3#Nx8^1ZkDjobawS%9(654BQ@f6C2^yOQ!zo+~Ja=ASXx9 z#Z@8iUi+7v3de~;uvGczGQG{+Frm04_9v1L>W^-JACN6xujKt9JdX9X#4Wv??ELuU z#vsf4mjU9EIy?7M6;y0QkDj%g)0LF%y!;o~c6j{{2~~r;B;$Jh^&04`<77veukK_qBNCJA%N+SM&5wTpbOXk}7xybM#~tOEQ5Zj9()~&$ zluD>Oex)xW{}GKK4n-%wrT-Vkeqh&7#r(yG|97Yr|7Df_pHZ9k|Ma(DStclNrrrC) zT#=e^Kpx|P#l%+fZcNdip(|(l^_z>e(F4y3+ld!ywjw`|sb^L8-pC38=X@EHl%V)4 z!JIA}-s1mZ*9yjM&ine6(SPoh%X~0|MX&baj!G1p;b&7y&0J2z>BA2x-M`a~Pyc5s zF6%hE&~6rA;uW2wLE0d3?%?cts$$V1J&q*K``Vz4j>s$20`kh|;90Y+NUnUvzES(P zAXHS0QxjYsEwInc1S+Ym!41(0_~s>Zw?nmjU%IRG*u$Y?$P=Ok@t>N2+)ml>1>SK& zR%iyc!#3is$_kBSqPEp)YzYj6O)Pbo0j-QGJ~7H!|P8 zJ)qACZ~IO6irBp_Vqeu{JWk^-k@RD?)vdhgReX9G!nbj>u%}&moSIoOi{^(FqH1)_ z>1G02Y}4uZGYljB^=~lym4*ucvc=-{6*ph>%9aEjkp1%KnQ*nHcuMu>*~TBRaHJ8_ zA_-UdYOo|b(_5C{$MvQqI--@saF4gFeP;mkG3#%{Z7c#D;Zrj4iXdAC(<~;Y^JdYE znfm+$Kao^|$u__NhGju0d-ts;LHWHcu4)0h*W+OBOKACt#SgzXDZfDkmTnVXtzaV6 z`MJHt3+*4MHtnYmrRa+ar)%mz2XZfQ871ibQu$6a85HyIGs4YA^s99n*&~7&2=y+2 zQExb7e|13)>_x9^!E+Q~N=)Mt3+N7YNsM9Y@wlx)-Rvsy$3pjt`CWta#+)NI8E7@> zqVC&t6i*svXld@N{LWMK+f%YJe=*kOuo_N!%bVzd`wQG&da1)DIS(sRvySw(dj!FC z)BEE9#^ysCG1w32+TvJdHX*Fzw2Ue79hH`CP9lDcPyi$C3btLTZk_|8a;PPo_*FGf2RZ!-1G_bj0 zdAK8^T4<(Rw#irI@aXFklc5!apudHCa?&K`$NkLO=veB2_Lo}9b}}Y5xXxgZG!pEW zI>{DEc)pcjS!uev6zq;c^||6g_P{tv%43xBxGCsph|Z7G&2RH@EXtT|)Uz=m$%OtS z3SYfIYuLAj+fv^2YDb|p8>3p^aFy(~YkQ~VE2rnyv#WR06OsSDpn|-A$?~}}Za^!3 z^*RE;wv|qmKcgziO|>cXc_)(hn+7%HI z_C2*uiUf6rpTa5LZqIJEXG=Xv81y~9k72k5>U2-fPq720RX4 z$(MQb=#E=}fT5vP5FI6>riPGQY;=FHn~O$6ceAE@_x|>2)9y!m*n9bcjwk|GjHt(w zLQ&ZD;y_5fPn|N)Ba2r~3=*WcGR+G?M0$;8m?vafp!Kebft>A?rxX}rz+apWO|5X2 zp`KDVFFP^QyaCFbH)zO+7zt-Fg~N>ZB6n>rs9Q+GVrgPoQrSfv!(tBHb}OXp@=vhe zLnk>;Uu;m@5GkNtJeMi9zTdJdU@^fZdxT zCRf3)y(J*y!fXYi*#_tjX4o+@Q^gA?dlS+|V$WDz0^q<&lpI3819x?(ljxgNB z-k9Y}zKTNy8JyWRt(A!PeWO+p_D>_hbe-Qd0N;FL%m#;Ilk5VM(%u)b2h>6dOx7VR zm-bp!(TIV%Wc=mOuQEwXgWGJQO3*c((N}GOM{JrRfvs<;Gpu)Acgo2>zA7L$y*tD9 z%cpKRbdjPFdxWFV%ExkiUPK|#OKMVyUdJ%}u{96NpFA!@9V@Xf*u#%X#C6V$($jO1 z{SEwiN0P&A0vP|`ph45>ok2Q}ZztvQqRWqty^{e?+xD^01u$%F$mmJ=^<%9aDphio z6kL$2XJI6Nd6=CL_!&<_leCe5u)z-OE9MX-?m=`JKu_`CC5gtjxsfCMaSpZ&oPkFpGhj+!RGc1~VG4)}y1Q&4Ck9K(8 zu`nBeQXuEb{lyM>D{AB5y3)_s21qa2RWn*qz7*gyYuqF7kW^ic-m3Cim8yH}ZguzA z7`XRH6>EpDzT&izx77g<{!k%yloYLhwwDJ8d0flf@BEbe=-K$M+if$m1SdzL2o)ye zV7)o(GGZ3z_1fX4pIFuDYjM$KsSiu8^$2VYA4qs6j!@>)?+$HA8MC#KyAIOGtosrs&JY8Qd zJ1^}%#K-&g8{>m6n#*jXH|LyX8O#3iVAf>|{wL0YY z1WgB9xMZcf?elZTXC9a_fTvlip9(yOu6Q9Y>IbSmRyr-Bg($=1Ed>mACngCm#AUs2 z#!?dynKY4wt=O0vFSs*;i-DK*1C<8xLudGAoTp?v_OZ8V(ZLhWa=5BsPpJQWc z_HS&i1j)LDE-*1JH{Yab^)Bu@P=crN@a9?D*~X{_*OOpwyIy02gxC@yizT(joQIQO zF%V`iwdeMp2RVXInOHw{(RSxEjt2oVjUmj^YtS4l%crK0M$k`ih`_XIe zoTi0Bv_F(Z+b;VIM|Kxe0Dw4=daT9ARmZjrt_=NH7zgToUxmODp>ck!4I;a3!8b&s zHh|20@BO{?D~y$Iq85O)8EouAc-BQJV8X!(tP5pX2r@kP3!krvpSsC^w)#IrcJ@ML zAD`>FwC&6G0F2X}$pYp^viLpg2ep}YOBpo4mW6|ZfDSz9@Z^xg*ssFTd{rGJEka%$D#Mx5*Lg!(h*w>Wc3shmv`)6phHzw}*-L5o{;FI~Z z!y)5~7>jd2%Ku84OFuji@QLEpgnj>1to2Q?8WFZ4U8iwfte_jcrsgnGh|CAMw9pMMBp8wl`Z|41f7W)00lmGqwew@;nLGG52Jx)bB^x^z-)!oE5`C{p?E4fY-+AqUY-R@sJxe^1~dcJ!)s zdrPhi1u`D%{aeXJn$U+za*K@X+d`k5B60t%OD)x-QSDjrQ@<+K6aNSwFa`$FQU&I) zPu&`JYfF|n#qp4+3Vwg+72Wb+fqj2Z*Jioj!iOxR!B!Z~79Mq04WX74CY{(a-yxai zoWPov1!@L`jg8aOrS-CVf*5nA z7!K~8`Lr5AXHL$5G|T0Edso2L7W&c#-UM9Ha0R0r&pj;f!|Xq&_k5KNy#MkM>(T#O z`{%}$u%US3BGluzC|M3aGnThX&m*R+H1wFetS~J7mY@|2Gs0JJ`pXPus5i{T)k}rQZxc>JX0w#Jg zA8hj=;i*16NSJt}D0z?h0uLFT!>FzOAgMo1GU=<*v-}AFA?e}AI>BXx?~36p!bhVE zS@|Vc$xz7hpsyZAaZsv739a(rsb^b>6%28$=v6D4X{^+R*l2!{$&>F%MHelMl{QJNsayGNzeT)GjQwu{oIsqRa)ygx?;BBjtO1I+BSd!RumU7y~o6!YT;}7z8Ge4 z^)LO6_^-E6{K80ZbTj{+YO?0tH-zB=Al*4kMZ))ooKfQJasfKn{~9|{EyK0>R_3Vd zYf9mcp37uovfC1{a=ql?vOaMA*P9omn->Hl9HrwPUx)%XIo3d0zqRkBB@km-X!XZl zVaPwR787MKITtS?9qx>Jlt6@sM9RsP{gu;OoqAV>6TEZZ>!VTFlkrpK84vYj?wy-L zHqor0ksRjI7cuLZ6``36%aRG3_o7lzkt{p;`My;?>*EzWEB-?7k7OR@_W|$_X&a+$ zPj`=!NCu&svB;_7-TBh9a*~rH?m=%_Ch=-|(uG;!S|Ev-P}()ptrz#x-EU6cnN0X? zp&L-9wBR6Tj^~+Z%(kEjZ+drfuC#@~0|zA&B8Syv&MZcfMi zdszTw;2T%sx^mV1{Dp)%)x?FZ`iu&GJ0ap`)d>uZrdh5>dlcZ(m z)UM-VlJ|5SVd-l7cSy#pGhSCU@rG}U;z$7DYN|0rw66O8N>IpsP{v9|q>$5t1;Y3F zMt8Su0fY0aIcpdlPweSwqJ@v-$1WyLv(Y~yukO-ke#hMFq{cQe6MU8hh-E>h!E z`LpD*Z$kwJ9WnNIV#HhiU8#&ai>rQ;5+FJ`r?w|$B3G;+w=6tPG0b?P+{{7vBc(#r zj`i(OpnaDjvE)?(|NSSkLs=(d(AZ~+7Jt?noDq;W`5x-R`zob;_D4bx{}74m)#j<4 zaCrT01Bb$OX=?6(L-H28FvV^Gd;K850xs;k=>=COZL5C~CCX{bbgA`t6r#n!b{+(sp5fkv)J%-nXlu$s-P~ zo0-wN@6k%Wplq!c2fii#SmQb+3+JwLJXgjSE|(Xk&CP8BNXa`)!-J|rL%2Dfp0l7W zn6}%m%+e#Puw7K8G~eHbb+6Sgh#XV`g&NZK4xw<@lkosZjC)IaWav|&`sDiL=JuhD zKh?kEUDxYeMJqIPMkeaeX9;5RyCMpK+KvK-94*x<<}~AOKwQipvjkp$X`!G~pTv zGeL%YnbJFbifWaW%i;{;uNFHzn~4WxD&Fe@HVNPU!Jdv~r&B zWGJ{eTwFGQoX1dn?rj;du@|Z_v2@)BZ<4G<&WXg>SZ77AL0$yLijlH+{W>BUi1-y( z=e(V^D$jn=3|qm6W&pIEyl2|Pp;2qG5kuC8KO7}CmcQ5Q88$i)H+53gA-XO4Q-hh>OE@it;H3CG+_5Vqv4y{a)Sk|g>= zS3w-VqeJhW?>uz-P*1Ayhs2%AK#$(l(S~z;fLg%xjEgw0!z0jFKFup%2lJFcuD-K6 znVw+nQ`ATM%0LS~E)0H`he;nhdPK3-0TaGY%X*s(s?i<><0j`=EI%dpfLd&A(;fNy z39!#=cg>0m z?HcR>7Nk@rr2dZ>n{BKbq@4HC<=|#IcLo$SPmV#qLC0_it347(U8y9}IA@(tIX*Cu z-7lV5{c+5#wC5|`t2$~(&DT59jESk)d5my~c_yDkozn1!atKL%j%WUE=vw1UsC#1j z;tGCKZ>{4l5evgi_owXDf4XHovoGDN@s)%H1OQmYXcyb2>K*mYl&)-(pCZplTH3CI zIE49Is|%dnKn%Hai^Ko1xKLAnSzPvgitP9AK8bg)y4q46!IIrBeaLP~Zf1R#BlXa0 z(Rul8&)`QQBZYC3FW%N|9bK!8O;P<6!?(SFA6<*vXpaMXT==OJH(NXsDYS~;8VGfm z)-R{fm?4&xriw(vI3(Wfpf%QP%a$g>ss+xD)y`zD8BdqbH?%||6#_^~cYhsVO_xn_;lnS^##h;HT2l)(#-!f z-qz?@O3`fUV5~842QiWvuxz5+7jDf^U6$9%0mHBPwJz6Yp^W`@LAm zlgG7s=OqcCY!LFl3sKjNRdYX-_DcP!(JuYiqg;9Z+PGorYwp-amgGr}ifUymCoSz) zN8Yz$E|TXhSg-p(6Y3^oWYo@fz#~1a5w?5qRQ^|`-*E0kjD?|Hk0}c(XoS9Yq0ZSIUTii!w(V&|rGmp)IS->n`1Lr(7^rR!6j#NvS3FuJx zOPwdJN^D#Kq<&mV*->a^(`Z4?7=<5$=E&oJ9qi^?r+c;8!hFP~OUltx?D0c}>RVm@hhFQk$Ul zbc6KjxC;A2{_Y@M`{+woviSZYazHs2ZTJtu?shV?Ybv*;P57R)p(hf@ zQ+Q@WbDl&fT0iH7afMl>ba2x_s~DmTN8=^wkgx&x#COenPyjX*73)V=sB0ou9cObN ze4l=QvT>!G>UA|Mgz*ENQ-xPzP6F#NsQ7qOT9`Lix4O-c{p%^6+%+@JyV){vv(qUsAgPh%~gw1&$ii9GQDMUIBVKk=hilPjvrTgQCHl475_vT!sW3H4N_ zh$K+#%}*tsJiYS_RESK+Qv8`_&LJy%YN1jUUR9dKY;AGQk@)j_J!jT(>*5J~GJ|S1 zQF4$oM@n#p>H)m3_nkr{Xbm}sA&gGTO%-M(HQ%6r#$rOpD0yB594x;#79W+0&Qe4KAc@acKo z;*v>ZR$l<-J)`)*Zb=AbLBm-4Qlob2p!xFVZ3g!FIbGQ#) zvB;9&>P)@}+Y>&Sn8Kx8_R?r6BCHl$oI{$wKuyZ8O-j#+Hc>{0HZ*Px3L;nLP^yE_ zA46bYa9-m&RRTMqD@Z3>b{E1S#(Hy?$CO*II8c2uU6ms0R~$FjlXDyf^kOU__9S?2ET zRx@ztBxAw#ImZ*}_cG5Koj=4x`dnXk9No=Q8xZKh>sYl_4ojm73el4`f$uG0wke+9 zIk9ZCs;JAlWB90dQnpf#&T=%SLkpX>=Q;`XjCBBi;x4ao#AHT)$*} zHpDXA-xORb6c)vPzC+0VCa`eGl)D`pcqLwQ?6ShRu1(;V6m!2lnxZdmuoekTWIXgH z?iU(73J?5rYmM(ucizqmcENO1^tbF6^NGTR^IBi=V~tR$7(0rIs{EV_vl7m83Jm8V zy?wo5n7&&sDYZBz_zBNYapW@+xEI8WYhO6FD^38ck3Wt%GqC1;1WRWnOEC8YV8;LO z!gC!lxm{9iJSA)Qux_8ShriUYaesw^i{LfC_Fn9pXTKv1!g8pQC zY5{DxupTyxa${LNOWUamM*k-D&(Xlh-b@4lVB@WVBTkY;bWy*-cC@Omz$QwGCT8*BgX z=@{Qd>UVbrr!UkJGE{@qvNm3CpywU99c%=b5>Xq}#=9wq#GI<@w0Xyxrw^_ewl(VS zo!gyJT;zhf0-yp3HdxdMGODr?$c%wFhlE0?hYE9y>{iX3n<)EJ| zw7N7+K|WYQW5Dz_8P^xYg5qu9(5)sU*J3dEk$$e;h|V>?;0V;6YUkYR4dU9y}c5H~OFNXx|c zOB!0U*YB&>w35P+?njK?mRO53*8GNVNzYl4Lti9>A}^pZ@KWeEuRn(j6=s~vNP+E$ zWLiQPd3#k@V{^t6O{8y3Dq>zVkTCyT5oq>2(VtrCW?Opp@YnmRO*fmluN;^IAG)$m zTadb1AM?hG)Rh@;H;3zdXa^)zCVp$u>jhKmOWi8)eyW%L^G5WcaqleU=c0{IY0aol zt(;$IZ2O2VP@D$s%38hN6JTUNck>~w5V&y(2&qOcOo<3*VXU&xCF(wbUdO81miPu1 zU-%|GxOiN7#k6=5_X!{V)=2ja0V<9tJNSP=E~M(w z&CT79TL`cVg{Ncz>!v zLhGKDv+C=2_(*LT`M|x>>R0TGe6yIXEmES;AoXT${|A>BlIi z5aV*uMmuyRRB+b;R`0DsLfxX&mc0ZnscL21JZeAn7Z?PnWq19)xK=zL*;W~Tux(g1 zdgSKWYRRwGdsGbqIM&h zS3o19KMo%{O+Am7&Fjp>CnRq&nDOJ`u+40SNlW)0`r~CAs_i$cNL;{)3f!7 z6evd?u(3=KJEw{@MIk9>Z0dI9Q4)K4nEoTjQv zT)}c8!C|6SF9(VylrZ?HbdhlLKNk0XLSkZ}UhS9ciK4%y@8*zOyNwx6wS-@R{C-x;eQ(nxI`8XwgZSMbr$EI#p~sg+S&RT5$j>_~p?0A6C;|1qF|2}RRt+V?zdg$c=kE`#-yxS4yPA-n!KZxymdT+AF zKk4|wdp}WsLg3JCTt!~bnJWpi z@2QoMKKZ{!r`b83uR?)_=l4el$F`$|*mWDt-^c9CfL8PKt+73Dwt=5T;LTay@h+jR zhf>AQ*A`qz#PqHBE@zNl(PH24zPGBiaT_f+)r52Nxsu|n#?@v%1laWF>pj7E)c=M) z>^t!9{>mcPf3 zj{Xzq+gK~qyH@T2I|M>{B)=BWHd48oPFUHQ9KGEhTc3aV?CYBvR+{}G9csVHy2$_d zd2h7xB1JJCLYgjo!jG{4LMNP?YnlF_gZvy*a-Fuc(a2-DOjYxiFyk_91_cA`D=Tb% zg0!+32?VVu7*B%Xkz0+&_Gc&!$!n?`LYj4p9*(GVk)W~TQ6@7<>@7qsOC@dnGoAxM z2_WCip1Ei^Yr)|;$lv6`SyWq&1vZJ2f>+9FE{3|7tX2LDi1xcJ zI*+&!CI%EX$2(qkf5f0X?@{GZq3u}X{^qbJ-toNGmZ)pVjwYdJM!gN-kZ01E_v&am z`$Pwt@@vS|o>H684n%9U*6GKlRAJ6)&ro9Mw~QcthxV>9_+s<6W5RETy1r|P6!`Ss z7rUI#iH2&yW^)8KSi`>cGb6R&g_p_tXmK4V2!D^Ha9Nlyg@Jdx*-|>;{sg1xo;0I$ z6b?dt554lV%aa7d1TON6zsQmajS@pl!zN5@CthN0w-t2F<2`b!uFpDhRe-A z3qRsxPD(Nl&|auzrv28j)$$^)tR#X)xmcO`_gJK-_Nhw@B@chWl!pf*L~wJIW!5c- z^U1l@Ai1HA$ZPDcW2TWh{QKD8v%Qhz;>2F4)ok~Y+vTDDW~fg>!>y7L5P@F=yrVZ< zw0j$0CzvW?%w~4$=j3wr*{4M!U4)49(8P}lY^M@5_LKFv(S6JR+Y5nQ>TuwBub0`L z(&_@Fl>d=O-P-EU-X2D!d4tje+8G-7ct*-e)`=Fv_}&ti&OXr-jV%Civ8gG zd<^gt!o#_f)~Vx=mOX)^*i`+(Go#mrLn5;cd@)b^SgYWHjeMexrl)Y767Blz3ObV+ zBf4)-HvNApY6kvxvBquUc{z(<{GAj8A=kKd&5CbO5 z3#zw=PPVOfiLNuYslGACeu?>P;Qc^yU22ilv{mEiIrSppK0MtFg;eI0jU~Ys>TOY( zwbdZA6$UzgKM6F>8Dd$~Z0uQU+2akOm8UpGK^qH8)b!uq9vu8s2u7tKoo%$4!`qO?cJKznfcR7h}36&cAe!`cU)dedici9)&xjy{)KIf%T z$?A1h=TLf)gvo-(*K+D4uZ?iDM}ue=i$m4+Lq|7AmWs7&&nC1l-o9wGQ#i%%)hFis zA35nS$6VYvkN@MQPH^2rv}E2zCK<7U7H@)E}lmIng>tgFg>=?PAtUj zd*I|wS9w*TbSTe-Id>7t#oMf9cqSsRW`MBz4W%v4Wia2b!DjY-5pxECJe>cFytj;s zt9klGLlPha3+`?qxVr=h79_aq;O;KLgS%UBcXyw`26qiQIKdt6< zozq`t&6eI>U0t=Ss(-tx&{`FVp~fFDm_y6g1%Y*JIe$3H1k4 zG6^^3dY5K8RtA#O`MpQ5J?xyaYZs;KGeXbt_VcqK=XVC2eHwJ;+q$6RzoHr^;;L}} zAgHwh|FRIYSkl1@HyVc!D3_l~98tds1jZne z)LilL4KajFxW0JJiKi~=)uE9Y`<U^RYw?=c*$gvd zur}zye16G)4Aej3NO`_H$nVZnM1U0XklLJGUq1s?ChGVP#Zd6 z2np}+mHH_*yT?y7zBt0)}l80$>#rHZkkXU{=hxb<&NstBA&^R z#|j*#-oI({3Q^m)c-(rDcPlgz42|{yPvAWFk!ZwtkRv~ApE%vW0}o15h-%p{`2*eA+0V;YPb z{EAoKu63!O9{4eEPJe>AAl3HpSf?E!mC->HSZ1>oj5;Q#xfjLW${)4DzAx>V>kr#e zUH{Y=2e$M2!be9+_Jhih8t6Q>QXP&>N}W!>?m@oZU7O)NE8LZ)n$FdJDn$2&KvlPDufbDBQK48>B#`a~!oPXd>u^B6|adC#2px~zenWv-{!t=%Y zk0IC436uwDVY#Z>XoVu)vuzFvV@I~KeysLX<+fc4sWV%snBgVQOa=Jt-dq#im8%G@ z7w2350-IthK=R}(-@hf=2!{mM9A;nOtwS?m1pEUzTM_vmT_Pxm)ITe0e2TCT9#u18 z>k>Urn-1uksq~@p{Y#2g?#({{t!*ZyKc)NnsTi&;u|Ye6!4lt!a6Ss#{wLY8L;RnT zPh$NA+Gb3;@4%)xYHDZG$U~7U#O?0(M|tgkoSeUP8|{WPmMh$UacsmYY5pK}{?qcs z{(9Db{!6p}&rjF?gKzPHQWnmK_%8yDd_e9Gpai|tVzzW36ZRiV9V#FGt^Y$hslRY1 z|DHudqn*TrO3{B>?El7TSsC@Hf3W~i!TjIo>Hqw@TXr;}X#mccu8jZkecPnqk3+js zd!zs`BSM#vTt+LGqCHvp*W(=oOaE1j%-J~Kux1I0YWkP)4)Jt4D|k@WZyM6@n7}$F zRgzLO`UP$c{W1W0*^)XR*8enq7`t?uq!;IcEFl-6*T zQ_=u25^?2cN`u6feRrqVo(B^DQy3$b{IBv+)`P7!Wep`5%}f+ zq5V(SLaOC#XX<>g|Cad_+ny_e5(V9=mDAqFk0bo<>k0%DeWh`1Tx>X)YL<1)BGAyj z`%gg!+P~_!t+*Vi%kjb!ajBF`#qeYgFx8-US&-3j9#Q(plS{-ggwwMx@uwPT)NE=TmC~^-btG< zG*oKLZ|d}%=BG3=?~^BX-qLoWJ>S_2p73n~Zu#4(r;hQvpISfL`2Lexn=0auaneMD z0pnvrisxy_t`Hhfg0?NrDuJ$0SH$8vKg(85c^XOKU`rUQ$Cy9Pcah@c{42+al}}9q z%@oXe?1YZMB1PFRhURF87XGYq;~?CRCf}bPkm7RHSUyB~eAa6-%;z89?(vqXlOzDk zcd4Bvdgy)Nznov0`&)x-i?dB`o)OP5!{D*V94)7_gd0lMwspb1$N@B3cWDd(fV=$= z6))a19@Frch_~d=r(X)KTP%!?2`(=CHRv@jFlw}1>pUT(u2)hr;kkDwn4l`b@S^A7sbzbPf~pH@aF zmQx8kW2?SwV6;o_mkQxWFtv;^`0d5Uqm+ViqAk+dAg-{Culc@p+4r zA>(e$&wB(3u7f@K774>S`~JK9%dEQJKUx+IO#!Npx37(If$Kv0vuR%<-rIiG*ZAf1 zTHz&g@cWp76Cr!#VE=1&ESTb{OtlvUoL3J(j&hz8@ib4%Z+#@)at^fx-ydQ!i4L=Z zknp)9Q>LjcE}y^4ubTxd_vQS{3TV`c<)x42q#N$yw5?c5+ak!=y|N=^BdYqz+#;{{oh*Prf% z!z>X%dJD1TZiT3kJswMoLG$gdyc?%yICKB0he8#m2@USNOR=2TJk3kFIv)2Dsz7xf zc|FH%(#{fc>;IP4%R8fjh0sNjjZv;1ouiR!6;9S@;{bOvzDJoQ24BUinn<3Umf~i% z1#AF1(Ud=LpFH8S^4a8c>%(!`>$7eaaxDMpt=AvMews2t4eGfs%4i9iX zO6lt#->Lx=o_*JNtaqoYIqWi>ZCb}@yHm<4)5Kh~87->=PL+fqL`krmwS1;uDf|BK zy#3(*t5orPvAr)Aq zq}$|BE#dyM=+^s!A>Zo@Vy*!z0tKzcg#NR%6D0rID7G2ROnF>YB-ZHke|bU&RR&Vh z)2be&Ft1|>>mQ5P?_E+pc{GtSCzA<0@*(fug&~xOhEY7bu_hqri}zt)z9W(8a`97( ze7h-MJbx{n&inxXL7nQyPkd+dMf#ubT&Kjg$ny4Zu*Oz85X9OA zGKuNLC!33dKmI!pv0B4_qV3}LR&FCn4E*PV6azKpXf1v|k7po$$RV#CqJ2MGo&;Cn zv41yA`0aiq_CO}Zzc-^bnL*QD|G({j)y}DKvNsimN;(>`Gv4E|4;+rG;Jiz!;V}p~<0LI}xG3f&sZHkCRjILE1k=)MA#0gMPQME!#W zK~-H`Ty*x?a+HR)J=0jXoxgqnH0Prt+K1$(4&A-)M{Ih|k(~M0;t;}&hLQ=k{2o_qNmBcK2)eS1pPPJb{lc4=Ct!h3(RHygTh&zSsYRb1JkPKaHb(uS zgEyM@STA`j+NID2&1hX{LhLfZTny_@fIjiIxOn9>(uO3!YtAvKmp>fhfGizmG62j! z#6+T95GWWtnEj&m=#z6hKAFK?PB}0T>vYXj2`Th6q5qx_76WQm@wzD}WEOoXu^We- ze!qZxKlmKLTl`@*3GN*!5D*H@wbrGo^rwM)o?%gP-X(~R(&FLbLxaM6g z5O$JA5{eH_Bias=j8kna+40fddiP{=2Iv-e#&~{RKfmgU?GBTg{?Upj- z@i)f}b~BvLsfUUeq&PFb7%#$W=_Dy+4*)p~9Gp2=VeL5HF(C7Dr%GF@o>vp!jB zrV+XJSR_Y7XZ=?707d7)ki@|qmYIEluv`RGshrFP1E%8u4QExTUD#Ta)c|91PQa5 zws89=uuHY(MQ`jy{@LLbk&k=C!v1QVH)cU)1eK`;G%tli8&5)aWgFk*=^5}gT{h+E zjrmFms&y%^DGfc5lpAC&P}_=w)r_3(#^fOhNZePin+yr*B9fXKs8V3vOnFeWHO;Q- z=?N6rt3A#9>J|b+zmh(E!{f4<9AzL3`R0EZ^kK>110n`Yxmf37A|+^4Kc(y$nh>h{GNo)u7SbTUXx#sM>zcRT%Ki+Lo>+VXKUq;x79_hM zNiN@Zo&c$lBX<}kZEbKGvn3MTQY2ZLBSOT(TT6@aAPaOM>aIW9Nk;37_}sC-z`Cud z5us5Z*HRTUT@zZ?9&EyQ4Xe}nF6vZ|;m~W^)HG86Tc5uFAuNW2IZ|f(q3F~B3)0>J zzG=Rc1ogAxcU!odv7fGxP_;{m%**UGCojISyXXj96Qn)y!*6QtuJ25@eGRqsiWfuO z>o`^`i!W4FJ28i=XUF&#q9vGrZ9empY{;0(lRJbRwoc?zYyi}BZF+Wq4P0tb+|(|6 z;FY5%TH91fkRTi5OW>$9)rruXJ#2g#yB``ewG8A#X7VmttY!$)$z`g?NHnD(}b)I`BB@c88hZh@{3Gn~mS~$ZAeM zGz9hUsO~^l>|7Z|UlQL}o*PT=lei?5RZTA~0M#^Lv1x8czv&Moa z^pk&Y2TJCSq6;q+6e98bRTbb}2E5u}l@G+#$L^|@XT{Y8>^v8$Z`wi7!rt@5RC2M{ z`LLt%``(@h)mdpt&vB(_m zOS@j3Nk-`l?@8toCO4%+?&8*2-dlVQFNZozyN!C46=En9mtj>yf9T-=)N)kUR}qWv zeWlBE2iJbMGvR``yMx(oRIYyTS1!6&LZsES9Z|oqp6y3fvK|e7mv_XoqySldSZErj zY7aO}&50+eh+e<2iWlj_*po z1qjxjU(#f=mbxNZD6<2uQS)uu1f8HIe&_k_j+KZZic#Yc?pgCT+rA(XxGVcirJkPp z6OOo+5gb;N?`4T!8Okk#ra z*WxHNbd$;kab)dsWL$T}z2jHg_Kc{N(iHp=& zveC)%RYanvi|_-t;bY8cIb;wC2#)UEpO{c^j4(&c^od`NK8vfD9(v6(iv6v#Ssq#jOGI zteY%ajqb0n?EO9&)4pLkYT*&T>{0G>nKL|kvkhp(%mBC14B%8&2@Etd?OCJ`iR{A(ryaM> z$3I+u$JPrs#=`kx&Sq7D4Y*LFh(JMx$G5bC0&a^Zf45MHTYMhrZCt~hTyfTRxPZLQ zv%NqA-j|OU&s#Q@QP#TPPiODxBRyKx8Pwp3TlBsMm_48X_mCS$?hd#>3&|F^;z?lc z$JKXvq8EO^_i6&tI-C<`+(wbH(~LS!C5%f*ecWy1>a5KzXTr&oz%+r9V1^MBLS3Gj zca|KzKU^v(oxwjwt{~+D3y*igrmM2{70d=vlTBaL0GF;05z5dRl~uQuIh|kGyI+&L zxu$KqEfJq*REo^hz@gEme^Bl-!3|~@xLa?JZUF!ADGNZG^KGpYTvCkeL%=porDR~a zZ`#w3xV0!U;7PY2Tw`9{TQ3b@+1MO25t^^H3a0Y#pKP#k%zHU9+xo51$E?UnFr95? zcA4qgY&Y^Uu=S8U!rOJZsF8&GR5v>veqM$;xz!g@dD>j*Y^s!bMUQ$I!qufM=vhe6 z!7IzmX}Y|-vDguTvc;vRv4*YY4ys}nceS;-yf-T{U_+vC-Vx4of1v^vj994Fv*dW| z0Y1kW;KD<2y_X|6bE_6e($NGu%O(wO(E+BV2Dr3*k+5(27?UNU=5_lPZWPogjw<#n zT}{B>@(j9Q$Bs>{IjQSUjYp*hIfZQeCpSX(fr1dti2c=c0`GMl+oQS#B&}gV0Qgo{ z{DP*C;Gwos=L!o_0X7utnjSG*a2+eKH1h#bK`a9Z9@eYNSUh&*`W)s=@`)oj3vVoK zoN&7qTe8Z%ff+Pu1RcOCmg|Crh?zhRVBnwsCMWIn&)`!hj^6v0v4Mn4VA#u{1^a2& zwqhrf&Py!{!B;p}=KC=x;*s{sD|hJ{+@!iO>(d8|VlN6h>w!Yb+wvcUMf) zjkE2!2RgiK=n2dMo$)Q`7j5iyU2`G0Z=iV?^0=CJaefJ=JayXL)4&{tYY z99;8=zhHYu!ous6bdEfi8{kgb8ha8C+CIS2R=u8!F1rDDK$Q9?#jv@pJUM>573bC znJwgLWC!1<9M6K?%doU&@k-lGHkC+Q|I&7SKBco~(`#3kuV-(`!Ym4+`?o%y@JKvm zTTtoJTe$<<8>jBvjK*BB`MQLd-n4F}xgT>vrM}IyjO6Y}sq!x^ewR6a2YET?F=mS> zR|Y^vJH`8e-jOATs01Y%!Lj&V-Fxe~0W8jKmUoXnO$(d^N^M+R_nl2^+!+>ZR!Nz_ zw6hLIp>XUy!6dd3oTtd(0JUv92B#Z-=ZlQtQ=d4!r=jBvr!D@WLn86cd8sBJE#C3; znLPyYDn^P34&PRt$0ou*JFqRQx2~q=@B-B`$Fd+8fO<3IMjF$WjNo&Mz$-^m1~~8T zGUvRMy30*9cIrpE*3RIrHdt?7*jhTl2Q>`Ax3}rHFGn5Tc3L~BH!tqM(Nm+|=LCed z^ZW<(Hw580UuXyALQ7@rj;MXitGB3Ga`iJX<6lL&OC7))YU2a&+oi(E5IHrf<8u`1 z*s0%eC+JU#%*55SrfV{OfPHsvBfQot`9!r3c9yYD5@)@b

F;-frh>f=fNe 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

wwhncyQ%Urh-|Jn~ct@${&SLbwr-f&jw>8 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 NvXV*?6=L80{})8K2>Jj3 literal 195570 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%0D|~ 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 diff --git a/docs/modules/demos/pages/jupyterhub-keycloak.adoc b/docs/modules/demos/pages/jupyterhub-keycloak.adoc index a36d218e..b37c032c 100644 --- a/docs/modules/demos/pages/jupyterhub-keycloak.adoc +++ b/docs/modules/demos/pages/jupyterhub-keycloak.adoc @@ -29,10 +29,12 @@ Install this demo on an existing Kubernetes cluster: $ stackablectl demo install jupyterhub-keycloak ---- -WARNING: There are security issues to be aware of when running a distributed Spark cluster from within a JupyterHub notebook. -With distributed spark the Notebook acts as the driver and requests executors Pods from k8s. +WARNING: There are two security issues to be aware of when using this notebook. +Firstly, when running a distributed Spark cluster from within a JupyterHub notebook, the notebook acts as the driver and requests executors Pods from k8s. These Pods in turn can mount *all* volumes and Secrets in that namespace. To prevent this from breaking user separation, it is planned to use an OPA gatekeeper to have OPA rules that restrict what the created executor Pods can mount. This is not yet implemented in this demo. +Secondly, this demo currently employs user impersonation for the spark job that writes to HDFS. +In a later iteration of this demo it is planned to replace this for HDFS with OPA group mapping for authorization and Kerberos for authentication. [#system-requirements] == System requirements @@ -42,11 +44,13 @@ To run this demo, your system needs at least: * 8 {k8s-cpu}[cpu units] (core/hyperthread) * 32GiB memory +You may need more resources depending on how many concurrent users are logged in, and which notebook profiles they are using. + == Aim / Context This demo shows how to authenticate JupyerHub users against a Keycloak backend using JupyterHub's OAuthenticator. The same users as in the xref:end-to-end-security.adoc[End-to-end-security] demo are configured in Keycloak and these will be used as examples. -The notebook offers a simple template for using spark to interact with different backends. +The notebook offers a simple template for using spark to interact with different backends, specifically S3 and HDFS. == Overview @@ -70,15 +74,22 @@ Have a look at the available Pods before logging in: [source,console] ---- $ kubectl get pods -NAME READY STATUS RESTARTS AGE -hub-7469c78668-sgzp6 1/1 Running 0 3m39s -keycloak-544d757f57-2qgjb 2/2 Running 0 3m41s -load-gas-data-z7qxb 0/1 Completed 0 37s -minio-5486d7584f-whw69 1/1 Running 0 4m5s -proxy-cd7d57d78-xjlrp 1/1 Running 0 3m39s +NAME READY STATUS RESTARTS AGE +create-hdfs-dir-jw7h4 0/1 Completed 0 54m +hdfs-datanode-default-0 1/1 Running 0 54m +hdfs-journalnode-default-0 1/1 Running 0 54m +hdfs-namenode-default-0 2/2 Running 0 54m +hdfs-namenode-default-1 2/2 Running 0 50m +hub-84f49ccbd7-29h7j 1/1 Running 0 56m +keycloak-544d757f57-f55kr 2/2 Running 0 57m +load-gas-data-m6z5p 0/1 Completed 0 54m +minio-5486d7584f-x2jn8 1/1 Running 0 57m +proxy-648bf7f45b-62vqg 1/1 Running 0 56m +zookeeper-server-default-0 1/1 Running 0 54m + ---- -The `proxy` Pod has an associated `proxy-public` service with a statically-defined port (31095), exposed as a NodePort. +The `proxy` Pod has an associated `proxy-public` service with a statically-defined port (31095), exposed with type NodePort. In order to reach the JupyterHub web interface, navigate to this service. The node port IP can be found in the ConfigMap `keycloak-address` (written by the Keycloak deployment as it starts up). In the example below that would then be 172.19.0.5:31095: @@ -110,9 +121,13 @@ A successful login will redirect you back to JupyterHub where different profiles image::jupyterhub-keycloak/server-options.png[] -The demo includes a notebook that is already mounted. -You can also inspect the `hdfs` folder where the `core-site.xml` and `hdfs-site.xml` from the discovery ConfigMap of the HDFS cluster are located. -Double-click on the file `notebook/process-s3.ipynb` in the explorer window on the left: +The explorer window on the left includes HDFS configuration files and a notebook that is already mounted. +Open the `hdfs` folder where the `core-site.xml` and `hdfs-site.xml` from the discovery ConfigMap of the HDFS cluster are located. +You can see how to reference the HDFS cluster when reading from it in the notebook (`hdfs://hdfs/`): + +image::jupyterhub-keycloak/hdfs-core-site.png[] + +Double-click on the file `notebook/process-s3.ipynb`: image::jupyterhub-keycloak/load-nb.png[] @@ -124,8 +139,6 @@ The notebook includes some comments regarding image compatibility and uses a cus The java versions also match exactly. Python versions need to match at the `major:minor` level, which is why Python 3.11 is used in the custom image. -WARNING: spark security issues - Once the spark executor has been started (we have specified `spark.executor.instances` = 1) it will spin up as an extra pod. We have named the spark job to incorporate the current user (justin-martin). JupyterHub has started a pod for the user's notebook instance (`jupyter-justin-martin---bdd3b4a1`) and another one for the spark executor (`process-s3-jupyter-justin-martin-bdd3b4a1-9e9da995473f481f-exec-1`): @@ -134,13 +147,10 @@ JupyterHub has started a pod for the user's notebook instance (`jupyter-justin-m ---- 12:49 $ kubectl get pods NAME READY STATUS RESTARTS AGE -hub-7469c78668-sgzp6 1/1 Running 0 25m +... jupyter-justin-martin---bdd3b4a1 1/1 Running 0 17m -keycloak-544d757f57-2qgjb 2/2 Running 0 25m -load-gas-data-z7qxb 0/1 Completed 0 22m -minio-5486d7584f-whw69 1/1 Running 0 26m process-s3-jupyter-justin-martin-... 1/1 Running 0 2m9s -proxy-cd7d57d78-xjlrp 1/1 Running 0 25m +... ---- Stop the kernel in the notebook (which will shut down the spark session and thus the executor) and log out as the current user. @@ -167,14 +177,11 @@ You should now see user-specific pods for all three users: ---- 16:16 $ kubectl get pods NAME READY STATUS RESTARTS AGE -hub-7666dfd6cf-p52sn 1/1 Running 0 7m30s +... jupyter-daniel-king---181a80ce 1/1 Running 0 6m17s jupyter-isla-williams---14730816 1/1 Running 0 4m50s jupyter-justin-martin---bdd3b4a1 1/1 Running 0 3h47m -keycloak-544d757f57-2qgjb 2/2 Running 0 3h56m -load-gas-data-z7qxb 0/1 Completed 0 3h53m -minio-5486d7584f-whw69 1/1 Running 0 3h56m -proxy-6c86fb64f7-422d6 1/1 Running 0 7m31s +... ---- The admin user (`isla.williams`) will also have an extra Admin tab in the JupyterHub console where current users can be managed: From 884f0bfd932c23607e3c7fefa57ef9c3f75f7adc Mon Sep 17 00:00:00 2001 From: Andrew Kenworthy Date: Fri, 28 Feb 2025 15:35:45 +0100 Subject: [PATCH 30/37] doc cleanup --- demos/demos-v2.yaml | 1 + docs/modules/demos/pages/jupyterhub-keycloak.adoc | 6 ++++-- stacks/jupyterhub-keycloak/Dockerfile | 6 ++++-- stacks/jupyterhub-keycloak/process-s3.ipynb | 9 ++++----- stacks/stacks-v2.yaml | 1 + 5 files changed, 14 insertions(+), 9 deletions(-) diff --git a/demos/demos-v2.yaml b/demos/demos-v2.yaml index 183b6d38..a491ca9d 100644 --- a/demos/demos-v2.yaml +++ b/demos/demos-v2.yaml @@ -236,6 +236,7 @@ demos: - spark - S3 manifests: + # TODO: revert paths - plainYaml: demos/jupyterhub-keycloak/load-gas-data.yaml - plainYaml: demos/jupyterhub-keycloak/create-hdfs-dir.yaml supportedNamespaces: [] diff --git a/docs/modules/demos/pages/jupyterhub-keycloak.adoc b/docs/modules/demos/pages/jupyterhub-keycloak.adoc index b37c032c..ae3f3b07 100644 --- a/docs/modules/demos/pages/jupyterhub-keycloak.adoc +++ b/docs/modules/demos/pages/jupyterhub-keycloak.adoc @@ -8,8 +8,6 @@ :jupyter: https://jupyter.org :keycloak: https://www.keycloak.org/ :gas-sensor: https://archive.ics.uci.edu/dataset/487/gas+sensor+array+temperature+modulation -:jhub-foundation: https://github.com/jupyter/docker-stacks/blob/main/images/docker-stacks-foundation/Dockerfile#L6 -:spark-infra: https://github.com/apache/spark/blob/v3.5.2/dev/infra/Dockerfile This demo showcases the integration between {jupyter}[Jupyter] and {keycloak}[Keycloak] deployed on the Stackable Data Platform (SDP) Kubernetes cluster. {jupyterlab}[JupyterLab] is deployed using the {jupyterhub-k8s}[pyspark-notebook stack] provided by the Jupyter community. @@ -188,6 +186,10 @@ The admin user (`isla.williams`) will also have an extra Admin tab in the Jupyte image::jupyterhub-keycloak/admin-tab.png[] +You can inspect the S3 buckets by adding a port forward on port 9001 of the minio Pod and logging in with `admin/adminadmin`: + +image::jupyterhub-keycloak/s3-buckets.png[] + NOTE: if you attempt to re-run the notebook you will need to first remove the `_temporary folders` from the S3 buckets. These are created by spark jobs and are not removed from the bucket when the job has completed. diff --git a/stacks/jupyterhub-keycloak/Dockerfile b/stacks/jupyterhub-keycloak/Dockerfile index 49cd7315..874bbd17 100644 --- a/stacks/jupyterhub-keycloak/Dockerfile +++ b/stacks/jupyterhub-keycloak/Dockerfile @@ -1,4 +1,7 @@ -# kind load docker-image spark:3.5.2-python311 -n stackable-data-platform +# docker build -t oci.stackable.tech/sandbox/spark:3.5.2-python311 -f Dockerfile . +# kind load docker-image oci.stackable.tech/sandbox/spark:3.5.2-python311 -n stackable-data-platform +# or: +# docker push oci.stackable.tech/sandbox/spark:3.5.2-python311 FROM spark:3.5.2-scala2.12-java17-ubuntu @@ -9,7 +12,6 @@ RUN set -ex; \ # Install dependencies for Python 3.11 apt-get install -y \ software-properties-common \ - && add-apt-repository ppa:deadsnakes/ppa \ && apt-get update && apt-get install -y \ python3.11 \ python3.11-venv \ diff --git a/stacks/jupyterhub-keycloak/process-s3.ipynb b/stacks/jupyterhub-keycloak/process-s3.ipynb index 5eeb0255..7d79f898 100644 --- a/stacks/jupyterhub-keycloak/process-s3.ipynb +++ b/stacks/jupyterhub-keycloak/process-s3.ipynb @@ -44,14 +44,13 @@ "metadata": {}, "source": [ "## Spark\n", - "Spark can be used in Client mode (recommended for JupyterHub notebooks, as code is intended to be called in an interactive\n", - "fashion), which is the default, or Cluster mode. This notebook uses spark in client mode, meaning that the notebook itself\n", + "Spark can be used in client mode (recommended for JupyterHub notebooks, as code is intended to be called in an interactive\n", + "fashion), which is the default, or cluster mode. This notebook uses spark in client mode, meaning that the notebook itself\n", "acts as the driver. It is important that the versions of spark and python match across the driver (running in the juypyterhub image)\n", "and the executor(s) (running in a separate image, specified below with the `spark.kubernetes.container.image` setting).\n", "\n", - "The jupyterhub image `quay.io/jupyter/pyspark-notebook:spark-3.5.2` appears to be based off the official spark image, as the versions \n", - "of java match exactly. Python versions can differ at patch level, and the image used below `oci.stackable.tech/sandbox/spark:3.5.2-python311`\n", - "is built from a `spark:3.5.2-scala2.12-java17-ubuntu` base image with python 3.11 (the same major/minor version as the notebook) installed.\n", + "The jupyterhub image `quay.io/jupyter/pyspark-notebook:spark-3.5.2` uses a base ubuntu image (like the spark images).\n", + "The versions of java match exactly. Python versions can differ at patch level, and the image used below `oci.stackable.tech/sandbox/spark:3.5.2-python311` is built from a `spark:3.5.2-scala2.12-java17-ubuntu` base image with python 3.11 (the same major/minor version as the notebook) installed.\n", "\n", "## S3\n", "As we will be reading data from an S3 bucket, we need to add the necessary `hadoop` and `aws` libraries in the same hadoop version as the\n", diff --git a/stacks/stacks-v2.yaml b/stacks/stacks-v2.yaml index 9cd97eef..f0fcf032 100644 --- a/stacks/stacks-v2.yaml +++ b/stacks/stacks-v2.yaml @@ -668,6 +668,7 @@ stacks: memory: 9010Mi pvc: 24Gi manifests: + # TODO: revert paths - helmChart: stacks/_templates/minio.yaml - plainYaml: stacks/jupyterhub-keycloak/keycloak-serviceaccount.yaml - plainYaml: stacks/jupyterhub-keycloak/keycloak-realm-config.yaml From 3d4484c8bf8fe6cda3dbddfaf56e8cce93aba765 Mon Sep 17 00:00:00 2001 From: Andrew Kenworthy <1712947+adwk67@users.noreply.github.com> Date: Mon, 3 Mar 2025 14:06:27 +0100 Subject: [PATCH 31/37] Apply suggestions from code review Review comments. Co-authored-by: Malte Sander --- demos/demos-v2.yaml | 1 + docs/modules/demos/pages/jupyterhub-keycloak.adoc | 14 +++++++------- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/demos/demos-v2.yaml b/demos/demos-v2.yaml index a491ca9d..d7a7633b 100644 --- a/demos/demos-v2.yaml +++ b/demos/demos-v2.yaml @@ -235,6 +235,7 @@ demos: - keycloak - spark - S3 + - HDFS manifests: # TODO: revert paths - plainYaml: demos/jupyterhub-keycloak/load-gas-data.yaml diff --git a/docs/modules/demos/pages/jupyterhub-keycloak.adoc b/docs/modules/demos/pages/jupyterhub-keycloak.adoc index ae3f3b07..325434d2 100644 --- a/docs/modules/demos/pages/jupyterhub-keycloak.adoc +++ b/docs/modules/demos/pages/jupyterhub-keycloak.adoc @@ -9,7 +9,7 @@ :keycloak: https://www.keycloak.org/ :gas-sensor: https://archive.ics.uci.edu/dataset/487/gas+sensor+array+temperature+modulation -This demo showcases the integration between {jupyter}[Jupyter] and {keycloak}[Keycloak] deployed on the Stackable Data Platform (SDP) Kubernetes cluster. +This demo showcases the integration between {jupyter}[JupyterHub] and {keycloak}[Keycloak] deployed on the Stackable Data Platform (SDP) onto a Kubernetes cluster. {jupyterlab}[JupyterLab] is deployed using the {jupyterhub-k8s}[pyspark-notebook stack] provided by the Jupyter community. A simple notebook is provided that shows how to start a distributed Spark cluster, reading and writing data from: @@ -48,7 +48,7 @@ You may need more resources depending on how many concurrent users are logged in This demo shows how to authenticate JupyerHub users against a Keycloak backend using JupyterHub's OAuthenticator. The same users as in the xref:end-to-end-security.adoc[End-to-end-security] demo are configured in Keycloak and these will be used as examples. -The notebook offers a simple template for using spark to interact with different backends, specifically S3 and HDFS. +The notebook offers a simple template for using Spark to interact with different backends, specifically S3 and HDFS. == Overview @@ -89,7 +89,7 @@ zookeeper-server-default-0 1/1 Running 0 54m The `proxy` Pod has an associated `proxy-public` service with a statically-defined port (31095), exposed with type NodePort. In order to reach the JupyterHub web interface, navigate to this service. -The node port IP can be found in the ConfigMap `keycloak-address` (written by the Keycloak deployment as it starts up). +The node port IP can be found in the ConfigMap `keycloak-address` (written by the Keycloak Deployment as it starts up). In the example below that would then be 172.19.0.5:31095: [source,yaml] @@ -104,14 +104,14 @@ metadata: namespace: default ---- -NOTE: The hub may show `CreateContainerConfigError`` for a few moments on start-up as it requires the ConfigMap written by the Keycloak deployment. +NOTE: The `hub` Pod may show a `CreateContainerConfigError` for a few moments on start-up as it requires the ConfigMap written by the Keycloak deployment. You should see the JupyterHub login page, which will indicate a re-direct to the OAuth service (Keycloak): image::jupyterhub-keycloak/oauth-login.png[] Click on the sign-in button. -You will redirected to the Keycloak login, where you can enter one of the afore-mentioned users: +You will be redirected to the Keycloak login, where you can enter one of the aforementioned users: image::jupyterhub-keycloak/keycloak-login.png[] @@ -133,7 +133,7 @@ Run the notebook by selecting "Run All Cells" from the menu: image::jupyterhub-keycloak/run-nb.png[] -The notebook includes some comments regarding image compatibility and uses a custom image built off the official Spark official that matches the Spark version used in the notebook. +The notebook includes some comments regarding image compatibility and uses a custom image built off the official Spark image that matches the Spark version used in the notebook. The java versions also match exactly. Python versions need to match at the `major:minor` level, which is why Python 3.11 is used in the custom image. @@ -152,7 +152,7 @@ process-s3-jupyter-justin-martin-... 1/1 Running 0 2m9s ---- Stop the kernel in the notebook (which will shut down the spark session and thus the executor) and log out as the current user. -Log in now as `daniel.king` and then again `isla.williams` (you may need so do this in a clean browser sessions so that existing login cookies are removed). +Log in now as `daniel.king` and then again as `isla.williams` (you may need to do this in a clean browser sessions so that existing login cookies are removed). This user has been defined as an admin user in the jupyterhub configuration: [source,yaml] From 80bd2c6065e69f85841ef885667da7caf409f9ec Mon Sep 17 00:00:00 2001 From: Andrew Kenworthy Date: Mon, 3 Mar 2025 16:12:06 +0100 Subject: [PATCH 32/37] review suggestions: remove HDFS, improve docs and server options --- demos/demos-v2.yaml | 4 +- .../jupyterhub-keycloak/create-hdfs-dir.yaml | 29 --------- .../jupyterhub-keycloak/hdfs-core-site.png | Bin 39964 -> 0 bytes .../jupyterhub-keycloak/server-options.png | Bin 29720 -> 27572 bytes .../demos/pages/jupyterhub-keycloak.adoc | 50 +++++++-------- stacks/jupyterhub-keycloak/hdfs.yaml | 57 ------------------ stacks/jupyterhub-keycloak/jupyterhub.yaml | 52 ++++++---------- stacks/jupyterhub-keycloak/process-s3.ipynb | 21 ------- stacks/jupyterhub-keycloak/zookeeper.yaml | 12 ---- stacks/stacks-v2.yaml | 6 +- 10 files changed, 42 insertions(+), 189 deletions(-) delete mode 100644 demos/jupyterhub-keycloak/create-hdfs-dir.yaml delete mode 100644 docs/modules/demos/images/jupyterhub-keycloak/hdfs-core-site.png delete mode 100644 stacks/jupyterhub-keycloak/hdfs.yaml delete mode 100644 stacks/jupyterhub-keycloak/zookeeper.yaml diff --git a/demos/demos-v2.yaml b/demos/demos-v2.yaml index d7a7633b..0c7bbc14 100644 --- a/demos/demos-v2.yaml +++ b/demos/demos-v2.yaml @@ -235,11 +235,9 @@ demos: - keycloak - spark - S3 - - HDFS manifests: - # TODO: revert paths + # TODO: revert paths - plainYaml: demos/jupyterhub-keycloak/load-gas-data.yaml - - plainYaml: demos/jupyterhub-keycloak/create-hdfs-dir.yaml supportedNamespaces: [] resourceRequests: cpu: 6400m diff --git a/demos/jupyterhub-keycloak/create-hdfs-dir.yaml b/demos/jupyterhub-keycloak/create-hdfs-dir.yaml deleted file mode 100644 index 15ae78bc..00000000 --- a/demos/jupyterhub-keycloak/create-hdfs-dir.yaml +++ /dev/null @@ -1,29 +0,0 @@ ---- -apiVersion: batch/v1 -kind: Job -metadata: - name: create-hdfs-dir -spec: - template: - spec: - containers: - - name: create-hdfs-dir - image: oci.stackable.tech/sdp/hadoop:3.4.0-stackable0.0.0-dev - # yamllint disable rule:line-length - command: [ - "bash", "-c", "/stackable/hadoop/bin/hdfs dfs -mkdir -p /gas-sensor-data \ - && /stackable/hadoop/bin/hdfs dfs -chown -R access-spark /gas-sensor-data" - ] - # yamllint enable rule:line-length - volumeMounts: - - name: hdfs-discovery-configmap - mountPath: /hdfs - env: - - name: HADOOP_CONF_DIR - value: /hdfs - volumes: - - name: hdfs-discovery-configmap - configMap: - name: hdfs - restartPolicy: OnFailure - backoffLimit: 50 diff --git a/docs/modules/demos/images/jupyterhub-keycloak/hdfs-core-site.png b/docs/modules/demos/images/jupyterhub-keycloak/hdfs-core-site.png deleted file mode 100644 index e741c7d2faee078a647469b61afb4755a148551e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39964 zcma&NRa9NU5-kcLxCi$T+}+(B0>NE^YjAgWf(3VXcXxMp*Wj*ik#o+w_v3v$#@Mj- z+P!r}=S#yIvZ_9PiIyO^} zDaysNQlSo<{_TTH^XCGpf|J;Vs16P(RM-|!HiQ?Oj zmE-OD$*5MM`kx;B3(-y~Tl{QaVftZyJ)tT7M2rGAqv%MC;)D9sXv21kTO* zMu)mD#(xG9oSZ$IP_jRkVz)Pp7KhWcTb3mAX3eL%I_~_2*?&Di&fbXie()aBKhrSm zi}t_o6rUC?%8-`RrAT)XJb!O#=q}&uDa2tF%Ci&8a}XYC_dXhS2`})>`}$W!vCt;@ z2K-pGtmG2aiZR;pEBNzxd!wm^%>xYm&-}~<*PZ+t2jXqdTsfId|>g(uGaku=VPj;LF1WL6*03%>>w?yZ?i7D z6t!N-{ySk|HVE%N%~3pZXUD<%YY-)h`ound-z1nn^%EyZXUJ{W9dp?49ff$^i|oI{ zM2ntEc_dXbmf56%_Bd$tIT%xCJ2FN;ToNY`tK9!OZ}fzNfD1g1%z`Uokbah;t~)z! zx5^Y|Nhn-_+;dt`{umpSyh|Rb%5a2cWl7kMe?Z}yM!ZIJaXHwsPi&Rf@jE&DQ|#?G zX3`p68@J}WL#YkkhBukDT*wWi?)NXg6%p#ia4GrI?FLc$zi!)-PUDAQ-=Vi!XIEgo zYx7VrFHO-_IWWJ395VSI_K>I?Ey!k{$2lCH2j__ng&OZ~t{m5IAd$AB2q`3#fwjoE z!sR@PtllNzh^z7X5YqKUE5!Z|cheI$c=j@4H2bdOdUGrg#p@I9YzHmjO72N>qK1Jk zzPnBttf#{)1XJOMkJwN!XW8L|(q7m!6!69m$0P=xZ18t3k&sTLhNmVqEqo=3!vta_ zOp7n!xE|vDY<>LCsBbhOHM`@$6%#`^Hl~C^(?%j-DZ+o{kN;4`=OZlh(kV9c%go$O zHjeRtD^-8D)(%yhFt+`9Il(Wkt_52+9uX6WKeOH4BM^??_+t8s$=u1m+yAqh zbCnlecH)jE=!o?v0w=!;UezkR5QOQ%r(nrH5gicpxiO74q%+-{C3yyBKSxbVjOi`S z>9Y5ux}H4`gN&q!9FI*B*ky?+jaWUc)aj2UIHCik^zP^N7i^W*$oanXKc(q`9ID9a z>Q1XV3PUJPb(Qx15x==ntwkPLLf(YH9ORA@To-cE&>j+*yW;r<9O+;fsy2AK=aais#2g2cZM@JX+rdKO}R(}bC&|Pe9dYIW79ecSC=9Bw;NZqR-*|z5Xq&W+d zZ@d-8yh}Z_BCu5QUKCaOJ5G(b+EkNhegq%dU+f>#kXgyxul;Q(WS8kfeAe!r1SrDN1JEMd?!o>$I2Rg9l*5H2hW_^ zdJU#y3+h1a@MH{jGY)=KPp|afH8YE+e?c9J_VM|Qa4NL{%o4Z#ub-^k*Kf6zwU*mO~L*T#+~ zGFXyYQ?=U4y5iZkBCV7-!9Rk&;(Q^ovnwZ9mRZq*M^RCv;_r>~^?}PZw_rgvag~`D z;>Tu%RxeBWn`6JuL*f*+(B4jf$0wG$^Dzs*?6_;=|j}n21c{TKvKU z&bKhlcJFFMd%{*~?6Jx%n4-ZDIZo(rva{sAIiEdRmLl;NPte<7XiTb%ErQO|6XNb& z-5JF|+UUK)6@hr|bo`IRG$BpfONmWy6Jc!c+^^gxUg;AUdvKoERR05=`5GcUNUkru zM8rJFhqp?

jAlh80PNoe!SshbVC@=qWQwxcEI#e>AG6xAw<*Vj4<4!tYD)$2(nY z3TRr34Sum{ad9(%k?Q{TSaz>DPiCPv;46^(Y7S9#l#o*$xQhpA1BXp|Kia0 zsIJXfwcLDa))G|p^h{&%=m}XefT?;_p&H6-DrVj9srlg6xJkjdFH8D_#E)HN$F_4j z?pklL-ks3s;$L5>|2-0v8^=BHkqI5iOIpWW%OxX^)%${F-&K=mro%>W$w6bkP6(U9 zTGk+O!a|wsR9CDU!N_TX_^~wW_$2EarJd!;4{_4mi+dx;5@Uy-Di6d7t4n{s1L3jK zXE{a_>xU|LmGxBYaC_F&-p$NHjfdr@GBVjN_lk-hub)uOy`L3IUx?Q#Z`ZQPx;&o2 z8Mk2Vt`&{kaf{k?^z{q6+kbFcFEdx3RZ$7=j7*X_SVT!tHxDhhQp9>AdBJL7jg+%> ztb68?k|t?{BAkEgV+)?|AWhalxD7cSzUbLlMiDXUXSkNI3lm-_2MgiF=G11nDPSj154hL zeM0UPnt1=VC)?pB4G6~DrN*YFIMwuex|q0R<~x}Zn&$Mir@I^n_2n|od6%i?DwneQ z$M5;vWhA_`&^BFdS?Rk3v4hMY*fi=Tq<);A-kMVbgud$CL46V%Yn|&>*vr_%TNtl$ z=r#JxuqUDuN=ik;xlmjVDd`z>e_mqCT zx4GqB?&pyt^lQeGri4?2No2_C3QKQ&%K>fE@}AQum&CD)kI5PsYcm?fIb~r+orw8G ztbI?m`NFwf4zKUXCZ&;}Wxag%dWas+KYjaEos4t`9e2FPoM_Q=pQSbOY+Jg4@{eXO zjelW8&E*27cqn$4bQ_npleD4E)P&+eDapAj8u7Pg0pUJ4eU*owqG>5((+yxSEu(5% zoU=!hS`+lv88H(5kHp_ZNzuz#59@00*!bh6naf2AW_~Bd!>?)|Vf9W#d^K1`?JpEarM!>v)Y;05Kxc)3+ZBTsZ^9$zFLO`VrFA9X%w5tiGUM!fE!%7Vd z-g;LBGTICFQ%_YZmj@~`lL}KxHLsL8-c!B#fhP77sb^klO8N0g*R<0^5~gSb-D$Q< z)Iz-qtQ@1~?{XhtAuTFyc867M?hOjg40TFuy4L2v->XKFFn*?}fv=_<4odU-fu3Jk z!!z>>xZte$_4_%`TZ5KtGfm}Lh;rHMQAm8}xXr&V@Cq_vCClGz(-3<%v2NCy|5C*Q zex5V*06tOP?F4Ol=|+V69u2im_Jnd)0WLu{q7Yc>(E5Dl=}Mz9 z-a4;77;4x(lQ+?xjlmsOD>}1I-RoS#5C=^~fXVpr!q;m52Bhf5UI2SGCOhd#C|eida8g zpwG5%XK;`hPdjN(81S;uupuSwBoU@uLPiA3FUD`fhTz4K(VJZ^HTV36*8n;(y;bli zY&}7JKi|1F1OIw1k&6XtpwwGLq$`Y6q%-!_)!e)vfu`(-mdkBE(bq;W2`M6Rn^QS& zDrfjZNE{;7)YFN~Go{o)&LOVq?ZUi3$ZIL|)>xd7g5j_7 z@3?qjcYW;ib!|hh1Z=j|HH9Uw$(Nd~=BC^I^yB)Tub-^=(g`DKYnDVxN^0>bv#S^C zc_U`KFI5A7ocwt&^T|Z&FoRS5@ROypyOK%^pdt*mmR;mmh!*}Y)$egQa_^E>rz@H| zw_dZR3j@bK2~s;!;)Mx|D&NGJy=fmjvVED72-MkgW;5l5&+FdG()CVSKCi!}m+%S& zOMk{jG#vLuf|C+M8((MfKdeP?Zb_sTT5*FxNi)EDb=G-8!0vk?J{c&wMI=#-9ZXuE z`0~BK7kh6mg?3ZzWk$gU7J=Rg^%}P~({<<&Oz@&2P*hNB615*`57*7uZBI;Lv3k9s zt#0G&H*5+(Vns&h+eqvb@PTvj8(k7tTONli zbkWE)+u}R;C(0*ci()@))Yz8XTf1h0rE+X6l+YFc5_-4Xo<5pbk!0)*=Wd90W=;K5 zvfvnA?PC{(^TGYH=&@BdVf zXIV|c4P0K!x3CuV|M;L76brFx7Yd(+OUrvz=drgJKZ&-=P-sB~0H3W;x}kjk@?>)f?+7?{?D7x*j>qgJwp+ec3Q2}Th>SZ zk9C{zVA+xQ7b;wVh<&s`ggHVd2Zr!*t^D=>CF839H~;>v3H{$`po!a({I9XD@d?O> z1G8FdUgG>rc*X^ZfV$a^B|Gvg)v&kQyKv$el`+xN@@}F5h9+q8+u|sfW>%N z;)OU*YIS&~%@oL~n5-C$C2t)bs`eqT5qWU`5JI0Z>N3+l0l|dBoXnnErp+Cti4o3~ z(R-EVTLCAuAm!!7_XdmwN9DJ%BTGdE9$O++T@aGk}`X|NV%E7}!LqmiV6d~;%G{!4jj;Eay6NtvfCu|Ps zydKG3FFOQi%XeiB>)Bc@j>=J8#rB@zX&m5Mupm4q-GPprA;} zSZwd?T;AV{6_hk9_ubssD^e=O$J3dmtET~5g%5{?g~iUrb-nI(9R*W=~RfLgr;7Li!w&)efUC$%Rv<$$*FV!q9OcoRk&&X^x=Gts#1Zr9*%nD;a@ zElCZdOGy2&V(B|8d`>~(mcngqe|VB0tX3!e>@d<{+@eC(U^Ot|jF;-kL;F@_qrupn zQpUZE?jfxz4>pKgT(uF{toZ%XE08beQEDkqo8#=h1|sg4?Ww%NA2;9b=c&y&XXl~Q zzV!y3Q|qoQ;bzjNk-Y^CX2G9drHaUG9UO>hYvY^GmkQ)eAz@-dbpjI7QoSWkPY`0o z?_QYA!5E^vdd<>j(8j&AQny38JjX!)6l}b`M*s;!Z|tNpu3(&jkXbu z^&275yS7H%xS$$BJ(02{Z%&tDS64Ol_4OxBnEn0zK`LEu%~&m$d;c&P5LbOsCL4+` ztTh;j)MHEv^>nnc$#l8iXAM7GFVpG3_a+nyTx9<}JTf%2b-Gjo;_T|GP@&zH?eO^c zI9v2%Ksie-KFC)?tXBo85=nt*sigFE31yOp|=Jh zs9++HTjg`TJqG`ik-xIE6qAyo5vRJQse+cwV&1P|-DdbpD_}qcplysSz8jwostw!e z)H}K17$g3$5iPRl(w^{LiKN8$`cg0@Woe9O>scMj{XLMrCwFZ1p!zjy9ih7ngI8nV zxOtvW#$blZ#CK*m?BB!cxKePt~QY^R;$ab+xf*w@U8i+-pU8!_Zvr&$tx=F z3a)=5VG>D&EK&7evup@dxr$buRGGsEQ(>!H>onGt}Cm157M@b>0V1i$Drzi z%j2VyP}A$GV+m2Ko33AChzhFM8G>!zLzS`$IbWY{!M>7`268$a+W^=r>Tiw})Wf~0$4664G66K}4V?Gfe4~NgNtdY59mg}uai;Ih2Mudcf zu$WDv;lDLIZFs%&m@kxrcdoCe`+z|%vuB4gV8U6fHpV`_AM-AhsL;W{zyybdffZi$!i=J*jIw|}oAsajA z5SjldJKGm=hNrEPCJzmaRh(mq2ZoSQ*|$d1x_yJV1^CH7!mFfs2JHylQef;)UpPxy zgzCw9ytx<&BiK-g1Tk-yiAhcLCWE$|F~YJgEVN#a7C55b&0u1g#P}c_78u_ZNdw5f zS(NH@c%q`BR_gb`cvDK1`g=3}F8RCCP-DH({>1=ux!!W5Qm?0&yK=d|pb88op@n8m zPBxv}^p}f;MQLBIRGtEZ!?7Z;?}~jfYiZ{l@9l>p=;TjcGIEvG)z!h_;k_ozj4oF{ z)f=oLVq;N)5DAQiev=Rr6K5`*Byqb`mkE`9N%%tL?X=;MSYuDk%?!jT+tVHi{I=R(@}It?bT z@O}tvBT;*O9{uCx=)BjXgTm)q#uq>c$UZa6Dqz${ZNNwC=_6hQ7J%L&#o1$JH-7vrPHD0J1-Ho<*My66>O%c z)uG{3FYa;Khf%0V*&m6gK{J3+Z+s~U1Zzwk&&RwzJS*O<-=C!v{jy;-ccE(K00MWn2Knn>pv zna-1P*-tVKB~b=3yIpI;c-=hMDxDtP=F@Q;Py>TJ;2HY@a-3~9YbS4gSzlsL+F3Eby{`-5HL@0Gj+P2w|x7RSH(W63Nc2IcdmYGB{<%2XmF zBOe|f;+o6VYK-DDCwLkW~3aVC-w8Nz}1!r03B5|2B&hTFUybWupSnv(pUIR~CwecEE^n^|LqV6M_ zR~wJq%bL-HJEs2)9isBZL1$#+a~(aIXEb0%NWglCi$jHGBcT|KubW?OxX8Pyy>L#R z+!~(MdcHnoGf+Ayl*|Em+7Cm={j%KJUU*DtIrkHrOfoaHw@4T|8cmCbyRuA7a`G^M zFfJ}HDW*vJ2L^(8-0mh@UF_8Bie2!k$~Bw1={jDzN9Z~hgz1F`3DiDOyoX20cDbEz+>>QJHOm&Ty1@w7F)bz4P=9M7M^L$~qeL=EZo_ z?eaRp(`MhNT=1UHIwdYM-2i3wu!Lq1`i8Y*aE5I%2yQv%>5$kc#)eYz_WF#$^GHih zUU>Dnq_k*}iaSdrNC2)nW%MPUa1>|H65q~Y&AVO*i4al7=uL%i)U6Arj5mZNtbRss z(X7>b^b7bA6x3P&3*ABNg9+waIS2$C#K?Kkv@zCXlUdgkY=C2u>J};qs3>H-#8tbKGXKyqS4D__X6bUV!^yk|8$1fBG`=5~ zf%*PqBfZqZ;*t=2fy*0?JG2?L|H~deNcbuPn&stHaJ&5PMn?vV`8>VNW~aV^N{0KD z#H<?^tKvEDcEXoubYg_hefWd@} zmV_S?iGOkT9Fu`9AzCCWz8GI?!x%a^M0XmHusMrYBg48w0q7qR5~4R4P1xtE8G*_0 zsZL!+S{e=k0YQn=KzFA`3EnPd7e6Ct><` z$qt6qZB@O4t;2Q(dNbNuP5>-M^+z-rq48K}tH?Q9Yr&{9nG<#*RbhEeqYFa7`$)RF zKWqifR_JWZZ^fAdjMT9Fe7;Ph$q;~6*Kg0~i7jbB@X*uKBT>KcFB~e~Cg}zOY^K-y z+n$xmyyB@-F&Z5*`Znv*($eXATgzx7)IER{6}*`0EmxGYIyCOL??QeG|0QbkKc5!c z&>>G?r@@{11Rk)UFS|rvT&%LJ(Z933y$GOjIi6coz?)!Th{?*zvWVU5noMPb>w0qN zn`#9Bm{PS;7nH!`M!u?O$(#xU1EagAXJ~ks(vAxe5ivD2wU~mEu(W4sscE(shTLwg zjnbUbQECN7KBcj-F^*%eNjiwO*q2x(TR{?s&*5y9V{_iQtvdg%%v2I*RO<%^7uQUk zxeCC5L#*>4Rmj^uXG&VrEm5GPq zD~nUkjf-T=o-nDTM5FM>p3gfb+|Jtu8h`DC=Ic+4j_%IL@sV(Gr5w!^tZ@EIc?Uy= z600cNGV?6V6Do#XK^U!DbQO>C)_-4KtXi4dtQ;6rRNulAn zo&B+gaMxbbq9rp^C{JWGkv`UBcL2C*b`FlMv$M$g>D0b|#6EjiVkEv0HA3{qNk6&T zbgl$SGP9}v34Q6dCnv^-))2fb{Tq;5WQO8ufG?P#JhqSw>oYV}_p3%6|CuWh;Nb#T zeBss3ERaT&Sf@4%3T+Mh&@&35cdZl1qx!fm0O~>SdSe3YC_q``DZl4TP3DLps@Itr z#)FJ75-s|1q>M}XIs`%7p8i2T)jOg8kNV)8S%{j{28c)jABMH>>H_njjs!mkEYE{} zXe1x&@X8Od4-CrR`c9kFY{rFFicP1)xiB4%$&bf5|5>OWK?G>&tSb)a9ND7Ly~EA4 zIy7H_h8jU19dLjDkT+(beygfw%oYJ1%D4T0>mB?bEAa6^|H@AifH=aEe&3@_?Nvi# z-p`hw*i*K*94V8uFwib&XrjTY*Av(OpnTAfzU)&)ggteVeqg9HbrOQ^U#F->METK= zBJ#gZQs(0+Kq>VT@eQ0u!SA?Oem;g9!Bv9+dT}c*Wr7W+tRX!MYwXV-XajCsb%FCT zb%&+jm%q#XnX+Np$@~Kw8o~-gcl#%*6!(@9C40ew{$O0naRx=E(n~z*tNw z{BPtR;*C5Gv(;eh5N&jd(9JMTIM%`7wpRwp-kqhUy+7aI@gCXCJnzQa0#$d(rn>bu zWOG63)@F7TPFB5j5V6y1LOL2h=#yJa7`B;u^X>(?SwHtpMb3$eiLRB6u#2D*{R;V5 zr{hmd9V4VNmJ^Ey+|Vviwb(={3u!;!pusgYp%5*FJ6v@KA=7@~hmgpM2RI?h?cdn) z!(xtW|Lku_lwer8p8jLxKMOfaS=+=R+@DIcwOq#2_Uy(~Fpd>CZ~*EU?okD9h4Uj= zw!twE7MNCc^}qddH>SHf-j-$rtt}6ysPYMnCR>{#P1k)uCR*N?d3ch8e>kfN+xIwI zybHm<6@NR!j46=BmpsW9aU+iCdLLt*6oM{#914tIz~2WOB}bjfz$pCGxF;YgX5mr;jNP zMH)6YL37u309goA;e|&w{Q2`r?1f*J$wC~F%9ez2>mbqCcnAVQQ)!E{(;Vf8VV(R_ zTAr6Uwl)N%#I#@&_z+AKO(H~B=c3j0!{cMLI@Wa8qm85=bx3va2Ss#5r>x3S4-d=r z@0_m(Dcr=+2GT&vzzl+zNei>EXC0lBtTJotIyZJ8QWjRpx#N)ipetvP--;n$YomWX zP+K3JWXW(0l&^L>BWRLvSK?c7*;#W{3l0})*5aLH?VR@S2OI*H4WW8_vESoF>>J#r0@(9tB$s|}$IkN$PT zjndxY=oadyl0oW^J&pA?!~zG8Q{|57jZLHLb)YB!?)vTEB!v29>Ti`O8V}9)4Fw2`%ijD=?3D>KtmE_V`#*7#ic}b!`4rj9 zS_8G$j`hUb%(7s2ETsbuU~*3<1UIJAC}<)q`1Gltg+F9!dCS~A;OLlR$?ir^wNU7F z-NG^<7|K+#g3nP`F?UEJ$SRq^g|DeA_60w&5@!54N9MaSyz)0Hb|K1ljD&N##Lr)njZ zqoSTfv#dKhVW@@c8l*tM_xqw3cNB$y%%RgMHT05NZ>o9kw*&k2v8I${6u>hHD}AR3 z&5r9x0?N12ELZB|o7#bh4O06u(sc}Vz^f-VcujL5B}uX^zNE87_O_Iltp88h{ZNC2 z%d)aJP-y-vs)H3UCaKHne=K?Mv7yTPkG*31>yWySl7#Q#59iQdEbsz9{2+Dp$$VLg z41)V+Cuj<;%75K)vG3^r4+T4Z8xWFGIUR=Q^`I_00dFm>ZDy%Z@G*zm-@C=AVo~^e zhf_KA2tvV-{iC{w5)h?_S+0(waCaYiHsJKZ_Ix^GERLjK={Lwy%E*=GVLVOg=oIy#X3*{FSY( z?ZwqqwWQj=amQbFlBi^O++p#(zt~MpxVX5aa=ZM_%_UxUzm{=4UF-rl*2AVBA`~K` zSi#H^y*jWe0JvOSS<$GIcA@{M3WCyb&iq{hFb2=ZJ&drENCH0D^Yu0?2K~=&cc+9z zM1FuucsWQErDzu?$gRqZ9icQ*Q&ZD3e&+LJ_Rr|xFZpFm^o)%MZjNS(G#bkLZZo{z zINqNYIzSHR%WynBJ?F5}KMV$N9q4YEzp1SZ5mCu?1kfgi2yV2?C;{X;03GIQ8hg-PVweFv-9gGzfWZtYAlDVO-uko zWz6t=qDbR(*p6UZkM0G0grRJ!>Gq`d;Kb*sM>ALOCC=<&CMzXX3~&$D5)<9ECh>o^ zRavW5P)6E(521XPlq`lFTnJngMIQw9%O%C))p5fC=exeEm^T5`xC6Tm_mX8jnGoFE$D=Z9LZmc^|x`M_T=w5d22 z6922L+o@!0D9@%aLvT%Q&i=^W{58ZTAWk@-^hah&zR~1KJoyV}ZmYqz4fn1&jr)E; z#!|%noISgd{(D#7L4B|c8=zDIcIV>6iiSpW|8J-;4dXJg*_V)n{_iswhPK7V+ zSntfgE($}>pv}?&Ra32~(#^2%KG9qhINvgWH1Bae#^$7T$hP6$!!*Hdx9|*0C=7k8 zKGlR1oftKDrV$Zcr?u6qJ{kUFY7hCsd27BG!vP%^jSxS8@JGTRY=tR&NTyCen zqZD{3vS%nY+J3TXEINEEf*i3HM{MU3+WU zZr_zcu4o}#err=o_Y{^UsK_SXX&RQW*JDC|WDYnKi*0WAS{Ti4_g0R7mmU5soYJtI z5<7O@g$Er9AMNLtti3cEeAfV>3UW=H%ofquohQFHB5f8li8ZpK5Q2qi{+a8++LPV%b(EQb&qNvV-^UQ$D$|;uV=$ppR#CS?&lX^tDA;IVcO_WuY5^w|FfF{ap6gFNn>FHNnV(sB?_ePLDjtr^UplRQ zLpjya#*B+DZb~284Tt^BT_;_7^7deYwgnDyd{HNHtnoDi4w%u#+Pc~sU^?U*nm?o4 z9kArcPuZeYs%#DLlD21L+t_pMYEak%&WS}XB%vfV6&DcPe(3kmYBf&+Qgc`UF0cC^ zJT6C6je4Uo><``b#0VKxaJAzKk^J;Er8{6`lR;5rK$Qi5jKp*Z&g$o>xJ)?I0)FU){eHDPr~tiEKr44p-r9x1 zN3*n?p-PqbJb{VENwYtn5d%ZU>nAlsVYW35zGgOLdk)c&M~Nx_i*>a3tqgs5uGrbR zAk;`bvnezopsE?MYP2_Dz2k&-!9MI6PN`>7HNqtOSEw!=Bt~PW-5cN-K_jRO|B{uxN zwQ@w0xwkqPs&|N+T)BN0xIrFXX(>kSn{7|`MlhKtNMXEYvLA%oAO3{ToM6Oy`(784xbB zNhxA9)A+pB%>p!PfEuVyMScMRP!RC`PcYJsi%NHM_Skk96%bvNFVkqU6#+lalN&L! zXwAU0K_>MXKsm3|T~g<~q0k<>=Z|3E+i8}3m7Xq@4%I1BB@_n{%iS9)_q!+&ybQMw zT`n|j%}?dh+9z)^U?39(Coo3WKq~N*2OEpC^Sr=e#ueDxAXmW@7tIB7z-u#$23L?A zD7jzI5WMm?@yZ09w6-o_DhWVtsiHHPJtkmiR7B~~|L}3bpoT-lKjK>1y;+m~z5`6M z4CX%Nm#JbcjPk>!T|hVp8vG4R(1L&;8zpO!2(r|N*G&8cv+$x+`}kdE#_E3El>%4= zBdSZ|A9>Zv8wYY*}9@9I700ZjLok2*^^cbVr@71JHHXC8Z#%*s=?Uusix zDLsFrf)^xEA{BSP*5@8AO9r$BupP*P5Gg+VWvIHRvC-1JJZ~|YQA~A_(bIAR=Pbg+ zEXmGB8CrrA=;`QkK}6Hy+Nc*S$bM#Ie{c$T_bk-?bgEHu;hy6Qj?vjihjusdogR%p z4V|*}J*zv19*6y%4aJQO6k>3pXM6yS*>Tb+B>B#=i%X%e&L*G?k?POsXbt#Xvhr{* zqSIuf?+nj4_Jdnth!7-<7kh5y{ss*Ex-ye)cbR2)lFeVm%kof=GcWn6J-mRmD5{2a zyIV~XuuA(e6Gi)X0TL{rDukO~F_BJ(mNgB~vR-?a>&&Gr*iEN%6$Ui(a&s#Iq3+8_ z5Il}302gUaLI0}{I-%46Fb~MHYb2etIFwjqG*=(px+b&HaYzM7<_XG|(wk>|;45JY zN&7<6*}|APmVXB00ZEX#}wsTjn z52O#E%0f%Yv|eWbZ~^F|?Ud@jo!7}HSqFziM&=t&q@&T60>6dD#5U}{|3j|8*jD16 zpT>;ST>`gyf)X_*FSdFEMb!i`Cz)28(6$-0hgn}0W>=t+&1sjlF3ph zD6rO5n{l45NNbfE+gPRwzP0q_1Rbrx@%$JKw~-JuZ*!1|7G-1M`JMG`we$vuf6Ejx zTfA%56A0gW(G3gK6)bb265_KPkEd>h(Y05~+Zu|M4EUNjTo1VZb*VLHx;y2O$uHv3 zc3SB+7~UB^Y9l7#kzA8SIa>crueDj=pESBulV;H5GV63SRN0lmG&2AW@_Hnf^tvWy zF*x|Cz!A>V9Ur-^B@>LDGXlS425Y`A{go`rh7$)Lt1=v%XN=};zzJceulEOLdD`x$ zoulg(o&&5s^16^>Z#&3g=rlTN_T&Js(dB?}#j;r?^4=S@40qHa@dwSVezS z&Qjf9_gYt0b6J8dU(jPVsLjVsm)4^hC~3ayscwnVri8u#oTXEZ?STce%u5{i+ivz` z&_JOX%vMv#Cv&o)lLyNoD<6)P$HNshY8f7h^nSnbG$SOA8@1&{c~rMoZBR{)rj#8u z44cbGZ*U?(6C+8(`+ebX?X^qG9ii9d1PMSnbIt^|;`n&3vszC>X{Ti9hll6BYgoJQC+s5sI7MFOw%BKxDEB~zrY6wrBAQ`O$ z>f(MFvlC8UuMUI%T}mj^EoW=OOLy!toB z8G?pxn^>&Zw*(m%OD6=AqX;*Nvf1F|^qJ-;UB*PN)BVtq=lBzc@l2-I^NhZDt{3}p z#6Yf=#zr4luw_}h$M%^q1{Ej#n@=0%_!A3`$fcfcxR!7$A?mEZhcuQiJ!~+pN%Q?q z+b%(INWHwz)Nw03*u&%^gOHZ;IsUp&#JJnT;@nkqRY|D0yW?lc*f||5U(Et%I=EPQ z#`OjuC{5+~%i`|pRK8CtwI717UD~*|^14Mqt^sb90_$RwUubkdT#`C9K zg6EzD7xqMUQt|UN!JDiBG<-$BUUXf3FQZa4itW=YF3eUmSxL{^9gu=Rd_Bfi%r)+E zW!{h@Ps(hj6So(W*CP*}!MDmG$_}W)?;VTWIgYKk`M&xa1w_r;!>j*^rAqwTe-D!x z5zC`1mjYB`AtPL!kWlrex1>doX+nFt<60hn8V8m3tR)+W?bubXtQb8uKi}+&gYDsgVz0_0hHz`*8$$QcPn;6L{$>7M#lhH=KeMlePy@RG@eXhDtV4$=Io@rAuVg% z-4z*mYA(;{@K4^F<(Qf-?VH-Zv~f=0Z9@T~4R|UC+dfk3XyvFhQ`?zsmIN%A(x@u; zgxIVW!|@{rjfH$7%CfYg{00F?ANrp8KRjoy$Wo%j zu~ctgc5OE=$IA#S(g-I~p1rDyDA}~Jfb2zq43Bh+=W<12KGx$O9G*W3#NOEj6PhW? zmU#s?kaJ9T$-TM(_dQEJP4gY7*3*3Tz{{|17CZoAR4pM;ZKC)_O2EG(O?2*g1ML~c zFu^Uxm58h0sXqEX4dQ?p_*}PB;IHQH*0oCfv#~Z!rU+y7xgKgu?)bg>bifZ2h>oWvV*Zh*~m^xOAz=42W_Xb0yG*yz`_z_0rJ9vaXG4Qs87Od@NW#5^MWgC$ zzsEIZy0T!sjvK;*@8*-b&k7vg{7H<31kkaX=*`9{Pv>~U2^tbqaO!sEVy@ZS%&?<6 z5~XtbCy-Cqe1+I1wAKQkyLO!aws_u1mpbq>pW6J zmk!xPb|6aka>Yv87}p=%$d4^Bl{Vf$e4wuU#3WbjaftGizzu^6fD)=gTAlXN#qG}j z!ms#czdO8 zlVQj^5x7{s+r-!2xN~!Bm0f_MMmuo?`977;#*(!l*2Yt*RNEbl>yNNnEOzEf#9rLp z)ype(C&L}o*EGn=xwb3`%~LApa!$JWN0s$_2+_h>kOz+34n%ebmb+1(I_;Cwsx%&V z`p4qIch|@bHY7)g{tlo~C*LE!A)^hcJeOY$1R_2TByUiFG(IqGSU$y5o8u1KCzoXm z#JI0v2ZSt}0cEPEt4*8=fgZ`tw6C#Kpz^!{^0YAe&b05Zny|r*=82Hl0rE zWhs#;$LlkYz)%y>s`Mdf7gC&6Bv8$`)YGbtzLzhh7>`lzqTN6cdAwkvewH~UXMo~8 z88CEr@Sv}NbWtUXWLkNoU5YQz#tTu|@{sfKgxis^x>pMbOa2OEg8ltJzr4O;F&Rlu zT><60R|kCWN%tFG8Gtl-Jxo=xNH3`e&$)r9dQPR4^AS;!kKbArR9dbU8yB!9AI8z} zYpr#72zS$@3OZ}#d1$vcD41kviB1PEAR?17Fd&P_e=kyG z4gUClHKgq>n|BhGyr#-{5%a&8mu5PvlBLvNPdX*vJVp^_;a%)^#a+1-J0E#As`M5J zG-(R`+EfrBf^Hbeq*c6(cZLbX+keB(c2RATi1I3&E1QxIK02_x^KOB#&$v98a26y? zapv>&&pTYcBy01x&!cU;5po}$z@XZA-m|$kaIL+he;*hR|HBSa!Np~l%qae}zi~P^ z3SI{$)BO2zwzGb=r8TTC!?+c?x|CZ3(00ZtL9oOJl8A>jCzkPU_$@Qc-qA3|8Lnn06szw&&K zjCaFxw%yjKElV6ANI|c0O~I&ubklSCi(6oAulte#sVY7@n#vWmd)uWg!e^Y9P@P2) zi>G6~>z+8(%DW6t`#w56vGcHGj>~h3P<>m#`B^$i)Xgn3v-66aqYiBBDg0n){`TuR zcZ+gg<+c~y<+OpNiFrqc!O`UKjC(2H_{{NR^Z#lA=5mxexcW_YjcmtfeWqr{4q~0C zBl}Jortc!iE*1R5&M&1;tRZ(VpOZx_UaDv+5N{gmHZmYLMM0DJXbq+a>H0gE;pyB4 zm+#TSIyNSHcHF*KlwQv&J@|b=cXs|$u>u^`sb+_hFDDakd~Qzo=!Q*vo-Z_+ez1PQ zV8OoRU%$ZwlW#2`G5ZL8lRT5!a~v*X_S& z@eS0i4u^pYh5PjSri+XQzKZnPS{`N>vlzYa&HFc!LcX+I_$CuYm zzT_gaUY=Pfv*%6F4zsea8T@uM@oAE&lbI|$ZSBDq)8y*kqI-rIoTa^{b!FbvZ;A?uOrsM-Z z!+bDKZlek9iTFt5_iHmHyK=J~h^6Fj3ilQJB|0Ol@u>2d=2BB0Cp;iyELT_4!4Kyd zXkOvjzJawCDxV`bFRuRR-@T)DdEK%0ukRRY+ZK0aV+M{*(hU+;d|qy8)UBk9yndyo zm*AC(sgt|4>#)C>TA12QU_ZWDF#*NXNoDE*EmEh|a7E~9UL%F%?@bpCC%%fN``z6wxdktof zaO|>}M*1LR+IN@T(!F3;JP_}rt%=?1d#l|x%`pm zYvx>Pfit_2kM=anaYh134?CtGMma0kU+HSs-sn_X0UhUnSEJO+TLCiT6B1!}Q z$|L-i{QvOvmO*ty?V2cr;O-kwAh^3bf#B}$?(P~~65QS0-JRg>5Zv8@-{w0rXXeh_ zx>fL}i)uDacdz%+CHj=WW5dRjonVdp^zS~uBhtkyh)KO;E`^s4w%oU;x-#$sPakI- zu(Vi&W^N!>?m;~1O||2&1ISg|z#sKHM#AB2X9T1t(p&#yV`sfBl$?nC?~M+z{rTWZ zLXQgM(fwXcVY;|326ky0gHP<)W|2O5&|I^c=bo9{A1`dF46cShwSa=> zaB#%i#>Cwe#|^J8(oVsYc^T0XAt zEzlHZ^RA0hQG__uI}oozPg8qa{%U6AXV@*`)rMej*^qJia$&lgARx>O!SzpicMmD% zFD3JNkmTr{*K-D>Euv%o1&nU4i`8~S2fIMk*Qjw1Ca-)vs&Vz)1yOsQRTMCilTL*C zjy!Jy;E~#^@jWs&>G>vN|=Tp~ygbLKF&gbRz#N zQQ8HzzO-yPkG)P@I-HcT1tu*CdWue;Nk((leMDk(`4n$=!%V8GQ!?eiKv|yDISczW z);q-(U?s`XM`&rfZ-3f8R#u_M=cBYZLcz=6lid~aC0gr}0}N89C>SM;=5}vPaFu?n zYkE0e3r4+H)T8j`V1xZpO~dgx%@S^JVm$^N?#gu8kk|gRn}Nc#8v|jPBIv|+F!Oaf z9}B~8*|VJJnM+)A4OZq4DLZ}A8uhu`=^}K-##m-6N>^|f8a`J#P1jD4Gv&!N6=zSt z&(3ch$=$@p7|*j&)itg|3u9pG%AiWi z_?uW`8o%{ET}n1f<7>4ZXS>n8zCLVv0Sej2>fiqU_MDuYtfYH{CxP)G~5xjotc%A=l08`xY1D`yvJNq zF^t_<4@jCQMDg_lv93H9n)GTE{y-_>rk6mRBwfRY-KH8E$x5vFF@u9$b*F_<QOKl-8~Uil|AR6UkJ- zBn-=NGdvH@`;IQNq)*2P27mN@LK?6Zwru*<83j&rbZ8+iwg`4zhbGSB8T86;6^Ny6 zf5Zxg*Rmb}%#;T~-&7|VUg-i;778l!P-M{w2nasN#6^7`4g%iWG*;oR6p{|xx8d9i zB)wactTx;7S2Yaz;t^um)#UyC3UeE)0C`Monp->^12xo`ufb6byJk#&nj;Ch?wT|g ztvGIUDT_V**$TZ&V+iQABkf2aa0&)1jgoeIM+Dn%*^~ieYf|;>2FY!9z6HPFr)*0| zp>0T25v6Nb-27%$5y_{#!1>dE=V~@> z!K^!+E zF*pHVN(hC#^D({PWBk&qC{25xP5GRf|{sc9cy9hwwn`6^t$Z;Ap^ItJ5yM zKY!;XB~vVpZDPqeO~e+SB*hmnjBK}DpRS9j!CWEy*&mzi`t3xSX8H3wMseH{o?|3W z9$US~jAYG8+EnEzm=`oO6u{~n7Z{qAQ7CgE6sewTn7m;8EVyCdO7afa%~+9|tARgk zyf1toZu#7~8xr_U<>MtKJoDi@&eU|DQlo`OkGMuvKL&uZ1AL@~>E=$7B} zGnA#GQ$E6boZeVhWA5JKCA)BmS`)$Oyzx}!4yeiCWaKXn5}EOUS| zU}gQ7BY+>>UREv3ENgG)dArGa|CNyNT}1`!{c+N_8Ax~RgiHVDY{2vsr9t|UmMNY; z4j%$O9I0fY9kA4h5&n0Gnw(YQBVr8$51$7FPZ4lg4jXIB%V|1at|c8D9f>6UJ}wpU zF=#*PI0{IqPVkzdE52~xiW?5dnUbANEmUgQUmTLa6mTTEzk1HD z_TfBF?7&R=eEzuJS7W7YEfTV_ra;Uoo!>Xpcr4Fu<$w ztp`nr2ORR-nVN{)CDXmhoHNa2)^4a=Z<>_;!_^M{yD@lXt22Q->CghI$8hjp?;*~& zXS)4Xz5v7HR%X`&pL^T%uu*Rl$|3sOp~sHoHu(B!spGZG`!n13qgQb)b9Wz}t)9F~ zm%5?OI_8e&7=x$af6xexp>wY{YF+fdhhlF4I8eOcja@%HJgf&qC)b+oA^hs=S#tC8 zfaveg^z`r8STrPj4zPGKHQ=r=Ii4%2H=EwR5~B-pqr?1mrtho5tb`bG%oTqS`xFa> zZi#2%+Ehm_oR%qCsm@-W;7l-*p@g9A?5Fo|Jp_m00j6QVmm+mIkVEt2gLzIxYi?>7 zChp#Cavg1VEenAUwRFX@*A84ko)*(dWe*Q7!0*3%aIo3fagFG8c6Mei>gT1OUr{Z8P|?tGx6VU0kp^DA*JIj@9#rcEa?2387~J{? zg+HlZeT~#zf^B=y+`?cA{fkan07-hlf!~su_5S1Afr?|3xDGech0n&=#&6LTSLVy} zgDBT`_oiS-lOZ&=`7Wy;nRpv{0il)OCv!byDR!PXch)M{15JbDyoN#roTWf)N6?odOHQRwbamIPhA(BiC$q|N22ILJYuC%l{2%m>a9*k z+F_X8Da@uEj{68ej6+RR6CDI{({y(aPZon9n#TVa%QNW2zyvxkSDD9V{>3a`evz?I`$vDI))0|>VAXr=}Jcg zqQLlCFMXEyn2%-Sq~5 zy!E(c*QbTHiu)M3!STr6-Ke`4k7JIu16Pu_KAdt6)kfjP6p_=7foRTi3T|nm*N?Mz z_)}_+{)tF%!fX1K0UhJ`k_1y&YLI-_!!>gbmw&JH7O~Xei7hF%nth8z>8;};#xUFQ z)Ox5fH9j5G%t};C%mf7JdHM89-N)n49n%d*5RaDT{Y4X+lG6YF$U%lDzu4)%eN@X# z>8s6`*rN?*e$N^bfBBXXmG9Bqvk=WW5eg@=XaeE7vzr$ua^4p^M4`$9tDGu*}R?Mr-QMvPX@r4m(hs z&hlJJSOB+eDzX>QK-?vF_~!BTgoF(}%g|4`stLqwfablX#mHV9PosfU)MbBE)tETJ zGAZ-5A^+Cibg}8Gj^%p}1jvo4)=^A>o;1EA>(J1^>ZgMK&+m0AOQlls_4U0h0Py%b zY?~(DkRkmm4iiqm{Em%;2L0ca(x+^(n@0L;{*74>ufwNG>)T z&%w^JWEQdxQPEX)1b>n{k&08n;NZPJ@iI!u>~Eu=$jhVi%_Fim)n;Yp{Xr8Z%@jOQ zXX*Z>t1_Wi9l~q_KC6zZdC#XiyNF=-I48)YM8EBJ&=n#h_M*ij|B1yLTy@7vVSbN9 zuKe-_6kJyG6-;7u5yvP~TEW9TDGxPqu#iH-r62h73u^chMOAipjdN)^dyvJDcK-3h zgUoGU4h^4sSKGBf<1yIa+9YG#kJF}qJtJ{$;Z&Z~`!A66z58*a^Y?gz4}h|sOe9zB zx7YnNTdI9EW%93I{ec065s2)7jg5~3MrK4gkGd_OC*u0N?Sik>j5;hloS28_rSeQT z1ZiM#@xebPt&uuB!rOHFngY7~UDYvgnJ#^e+mvKxXm%_>rZ{$ISi+lT@b<_ZI(gXABp8Qj)@%0hfTI=-S9i00|9uR^X3J z&`KA>F;6wN*q<0gReqY9QG>2;^^4|$5RKGhYi+WJmpr{5<% z#g~s90lvVYmNeWF|6QhYED1x1r;YH*QbKgFLh$bC=?U4h z8COzVyu`uN&CM-ATs061F`3VsOS{#nWm0}NGSG;IWh%ricy}8l-pE4+!W!8 zX!*K;$-;XWnb6!ugA)^7k)zMv(2Iik&2kmre*1+IS@U9`F9L+>6QV2G#f&`~+C%O0 zA(@jjm!ah-ut(ApI zFvGPFQ?F?%)r1oZdG6%1EzASL-aol?=*HE!xJnqVuc`MtJ%%G@wd5&)i5*NoBaT~p znp58ym{(d}$h7~-3ijNC^swuq;}a%kXlkH-*d$9D988f<(+Q@ zTG`F+VpgZ0U=B3{7h3^6*3cCZ-s`Mk(QKi7*_#?j6J~Ee0Oc+pMI6A8`Up@r)Qxx` z5QE8BvKZ*N?-7U*J^}%S^RC(DGm))PKcokWE|iJLw+%PXyF%A@@t^^fC%Xl*I$k%7 z4MN~0yEk4uX-Ks%E?54uZj+&$-)hQJecfvb=Q?p9#$#HK2KF!9KIm<} zU5@qvR2X~NE#{#W?&byqcObS*sdD?#b?uOx$oI&Bu#|!@VR<@nQ#Qv#IJwy2$={oC zUVWcK_%0Ys4nOmxXIN&cft!cqhIPn2Wfq&|isY0DKs5<80{gTn# zWBi?#HCd%OIad?yW>MHDR!C}e<)ZyI zCblQiD~42lYq{;62V6+BXq?jL;)hyKU7F>mj3d@d-AE8aJdYic+y?{4Jn$1~Uc`0U?>kor#Q$Oj+6Y+Z%8jXe?4vQnuK- zzcf-{Y)G~oIIGlw)4*hf1%6@)2>@ZXe|{i3*v>5@wb?>Q#FjSh<0DdP)tK=~9ylbT znm@awlI$zeQ`}fMhzmRE{H0xH1xBlJ=569*I#kWNk)e7p@8r^qvR$$`1#=U5%H)u}F)!&SK{&3AuDlv#4HHAq-yih&>_&l=sEO8}l3DCP zhf7rj>*r&2(_< z_%4UK!q5uB5Em8_3@*6h3W!1&ZMXE+3iktgQQ*ah$U6D6pSqo_LCl`SMSKK5eVgG5 zI?+Ptw5c~Dz}GgD!xrP+|2^o+;K4&{;akhCEjt(3nf6-Ans{ydzk0%1>1Yl_yJ}N~ zEBh#>RFj9w^L7d9>IcXUBkilKP8SLk{Mbp89lFt%z`~7R;%H&EpBDS4XTD6eY)k>jp?^T9z4f<|bpUz>BjQ1I169{HlBHnr5~OkD zvZ4j8?`zpWkY>6_HVYc*rL3y6we0NJ>0%=TsFzaKR>L1^_aj{@*BO{972?Mm{QICU z=pLX198D6gQLFQ3EL96=Pt-&2^k>}b<9mY{cy~ls@n(ja&v5pyZ^#4rE=52RNp}~d znkyYk?|_nc5(qBZ)_ldjW(onZ@eW(}#Y*i9O&v|#sNjzrZC4)3owhv{zi(6Oi%s33 z>GN*z9^eRTZt~PAQYukuzgy4*;o@#IYL~P-b5;O#E=>tIxVTK#EAKd424II`Hi=767RV;~-S0*#oa8q#Pe=Y zKR!Zbxv?*JASaNNtK~=1X4~9;Q}7F|M!g;Yc0oAnsk1=59~`JHTBG3FUTBbA0*C%HwLYSuq`2Q$iJ>f)7^d;@=dxp82~!sr z_ITq-=VzxQetqfB);7Jiv&R@HA`&uDSLKl^~xc%5P71?q$ z!=$nC;#+VX%9iLknc#j-f>{}%RsR>4BHMtgeL+QZZfa%arMlb^jJ!ae%B#t_&I|U? zW{aXA45ziBE@2m<3*%96E85dhB$9Wi*VB=h9jeO@>sz(q_HYvQ9>C&diqK&lzzQ~S zWfh_F_eAwoVeo&DI<3k(dp{8n5#3KJn$&8IU@e@Fz}ONb2I|dc%~tA<4B;Pt9 z^nXa76o;+YqfU;TKS%|E9Wwk3UA4(F?u)++)kJoty-dHt%w)Duz}70X)?2K99x8ja z#+$DAv~-E`F!VpV-*|8uG};<~K~O4kOCFwTK!#gd zS=rFGV+^-e)Vni=5tpsEXFbtzHd!n5+)&)6vxjfDfBteGU7-=nE;Y0{ zj&opR6ZvF&orieiKX<=2qsBOwBF=r@3~&E`vPa0bu%pJKO?1uUwjt|lDpDm!86iJW zwsBOSHCqAS9>MUNGp!`?q@q&IcjV_DN6^OijX|*L^a0m8lbk3#|DBvxqg_<_3E!f}9X5m<{Zn zKsqV-`2n4%SV{b7HJRvH?td#dJZ>mpAT$o*=JiI-)2q+UowzRA|?33xm3<(OoW@dMS-iddL+d;4AUJ9lv)Ts9lp@M_jB2vC)QS z%XiqHpGsY*3WtqXD!JHrnx_D)nHVH$f{yu8I$LlyF!aQz39a3!2|=`9oga+nH|)KB z)rj?lF;L=XPjBPg+25LMejnVN?FXYmt%IZ)G;tTSbzTdZ2X&y`R?e!nFo+S>$VvBLpBZSagJqt zF4_5h>G6Rt_#FWxN#`_U#BVW<^`|eyg~nm($6xtR6MdvD3OW>!|LHfKTGoP94pqBV zU=tEG^`5_~G}GeuZ1<0qu2%Mz{BS*GvubPjY7S+SHSt&O(eiQ-mQD2E7U~*Y88Y`) zmp-GIEf~htK~B}ut0hfIYA#hYO%RG~mB;&?2%uOsyI+A(V-aN+>obpW-DX!6k(55& z(1f zg3YzXQ^Z&_gwbIP765Kl zy5({Z4CXVM|J7Ad-V(o*k!@~{mVbRO!ad zYBcA{YqYedtXgp;scN1UMZh$Stq~mEercbO8E6^jq^H9V|HTy zyVb>TS2#WXH@+@rLKjiYRhl-0g6B#*;;QzZv_UXHaN-elU7Sw_!!Va$fvR!1gkNI& zncruK(_zlmcu_G}b=8r%llsR<@}GcEcwyaj#t$vLqH1HuFN%#WMh`GV8mpea(0zmY zG+pflmQmZHE1l{a2eY^O8i9a8jH>su262#^3{L&o$Y0cP2E}8=Y`#AF>D48>JVx86 z)m&ZgyVj(v;opJ3znKW#G)^qtdPMl_iz*SW?;WH08Jw{pVLnYY$%A`FzY_%`Y1-3z z7M-6yv1N?9vRxV(9YkBTC;MR)g%I|->^6<(uS}R0eUKmeALIvi&6Cn6+xxRncXED! z1CUQol2F)2-F6MRtkcmvUDL_&RB!ytpohR`jo}C1*+HY0tk(0KqjC~Ykm+X?r7H|WFF{=86ialU9~;-*ON#HuPwmYTxX0x;Vx=9ZjqjR z!kC!IxwY+7=b$ibT}%s}NClCi!@Pa`m+F-^uHwqg4a{Uk=~4tUQZ4)a7hg<}zWF-A z;#**imCn4cFxwTm%yhp#T4F*RdY|CGhK#kDoi7r{UPeiNM{CG>IZ$RNzJy^ zR-_?TuH-n??hE~kuH?1^+qf|h`=hlMB3L=hDM7a?b(4Mma7gDMlGB}Cwq?~Px*|f7 zN2_nEK5hQ~--+Ieny6`w*P>9iDM^90)m)t^=DLB-7r~p%&lrU_UEGtu?vXXEPWrgj z?Fl)Tam_5GB@G=l8k>1*K4p&!yrd!+Ng9BATjxGrwc}JpcFa>J{5MEy-6Z5yg={5UmD8dr zh;WK1>9`0eOft+4N;stoslOhGeayJsVmazTHpxSW^s$t3Ehr2m$t`@!)fep@&-TND>H*mH>DId)$P2fOH^jvOS~jhwqP4Y z==7XtU~9v{Y<}gj8tmqQN|Mq9O~m2w7F#a8-E)-`1S&H%%_j{X-|M6K02ac0;~H(e zDxH}8fa<5S0|XABfTTQKCWyd%Juif?tERn=)3>cN){Ic@VLdWl|w7Zi(Ek#S{iat3XXK%{cE6sY=O;W1HA% zR5=vGTyMk}e@v{K3-4A)wy`EK1-2Qk7V@}Hk{tCjI&n+&7lyA%n)9dY@Y8*{&ZTFU zF`gRb&Nle5TcT~4;%E*6A_x(diV_D$-WXmFf=*y?f1~+~e$q9eS@{XkLhkuGK`=`> z>*!7G5`om`pKu}7^T~)v86P=(&2bG)cEST6%DIDc;lB3Iig7IfYkfEC#Jhbk%N;8m zTtsuCee5BG_~D96Z?29u@y!1x@^5(ZtGKbFne-iB>tj^oLhfs9&!&JLmln1fmqe!q z*1RjDZEac#DK3Lj&aoV7SB(18(7mXg7o9}t0>V`%OMUR{wiAZ;KZT!nRN5Pef-MC5zodXogf_<}HN7dh7QmB>Yy zSOuh9wiO%&Mgi}S1T$jOoiok(04&_bDwq&K^ee{JI)vdE!)6@_>Oiv zRWVfOT9%xdej5_90xam_`?b7gDuI^MLXLOflS1utV8#ZK4P5!qpIlAgArT}Hb6`rmK@ih-+S;*Y<-TU$o6!STuUZ)Uf~T1;Y>9p|_E>fAppp0~ z5KR=lfs9ubiX>d!>eH zn$wUXaOvmyjeHrG<`cg`@#Jixn!NYv{P5&rQHCcN(g&r~kFHq6s|xgGltdH`IPL-! zBeDI9H9*3Dqe;sHa5Mk{Zuu|N@&AH^Fjp}Ds}wxO@4vV0`o9j(8Ln8drf!qZpy4(I zbK4Sq`;Yu@Q=&VfY>$7_zOwUj47W|~JE|DMJh744^DfI{7rLp==-*Yod!e3F)`W>C#3o^4y@O}7+(Uat2-h39)qhRhlL_on8e9pdDh z8fc|?gGo;GCC8fz)5h>6M29AhT^GPTxe|BRmWjC)h^NT|G(|GyxW@JmNJXj)Hh<6z z=q&`y14sQ*XxuiT;kAFPqV}IwgSP2Sasg3eiuaDoKLn$*$$vt}~o6A(IX0in#A|oRKy?9l^~5tkO}NWHtSvoO9{R>RM8Ij@{~#7Ny8?J^butJN6q6$@qS;n(T-a4y2$oCh-)$FQwN(~iVzSVzRVYl03|xV=8#^Rg{NE zgkBj{M)>>$c!;8)YKuE6q2OYGTZouCoRJ(#-Q_T#F9kgJ!XvCJ!<8)V8fDo7(O?t6X-K0{A9{LP z)Q-Ik^fKoxICl?lWjb3@-RWq_1+NrTMtEh+p^*2c$)Z$EPrEBu}S#9o2E@lhwH(rGDuPB zTl0n9fP0fCXS{`RD+O7xTF+;fw|2+j-MgKBQue`#5r0wRv}haG9-AX06S{}qcS%>C zL@AS^9yHryd8rQ!S!sgj`?KQl^Rgm;C zzCy$1!IC+U+k)-X*a{E}g(tLJ`~~+5C*VCKa4A{yNNrh{c~_V|QQN;gX#8}oDIzG6 z$H)k%tqV0(?~tmTQr>2A2WKXTQ)e=TwSRO4_Qhk+t42QW;K8{(7xB_G<4jUB2W;|q zt&eWooNi=Q9#rxaZKw>x&{^_|pyT{6XI4xWUpSf4)hfsp_oaJ=WJrn^o-IpNR~C;btKA&egVpoXn5N+hNS?MjfAf?v%8h`Qq&HifgW)y%_2CCx-Ag~O8tybZQ zHZ9thsBMW?kNmyO^qU&{%6<5NM!hbhS@Qe*qW5n2aGP5^iD#F=YcM^hS59bRhL(AS z=d(^q5t2j8d;|w*vr{|nx6DDe_o*9oBFv(dP$%M+(#YAf8NHQBj35f?#i0FP-I^dS zP4E<}Fwm%I279O*e@4G+XZGsAk<^Csw#q>4=h)i~y}dc_Qy)*%M$-+WiRrN!!w-mk zqayVz;&2`3goNbjuedr?OLG%FJ1bgq^#VVZhBf5RS+vaAjjl+*zLAML`dF3`gxeF(-7|eLHznxhVkX_9|C2Kx~uQ_yT|8{$R6r8q5lgpw}uj~^|EypJB z$JSKd`88NVpsWB)PWO*c8j<9$B;Nasvl?H<&}6SEqXQLZ26=ej*E?*WSNt0ZNuI%K zU9z6}jl(pBwAl`yKjT78`6>qT^0Zf-aL?4DcePEW#;)Tf#yO#A1DR>Gyk(+DCHe$q9tW&t0wXw!+vVQ+UB$ zE#dKBOqdGAa2cOt1@T4~hG}@nefyJjkd~b6hZfhLu6V^+6$Au(q$jeZ^2Ys2fZc*v zKCPJ4oV1xu@b_FCCZV&{ovq3)yL|IEP$u#Ufo8lVf;hA=)S2d1#yz)}A=~I*C}Ea9 z=LpVSx6`4NY?ji3+D^qAn2>ZmHNxo5$L3N{-ZT>Nn;(XL#+@vMa70mkntz}Oo`?W>x|0C zQ#?Q8bgP;_ynsEvaAZ}XL`atM)8=m97~Pj9;o}6Y*q&M{Fss@)KWVWBr$_$$OSSQ+vGwbJsv#KjRYDhLyO649c+Vn@ zF_WiH!ccwgA0dG})tB1_k5$w4+W}`KjW-MwPBCZnyU1F~@n(UAovr7PP&Dty z0^5Dy^t?&!r;j65raG@;D*Kp#<7>2cYSX~=grqJcrGo zeTId_n3<%W5@%OIK;^$J0t-n0u?T=P)~7HeAuPu8M^D-@I{Yr^Ck$LhOk8wsjDrKW z2t1Fb^IPC{u=b5~J4Gy9upZehHxoaeulmx>5zK5{o}`rNnz0SVBX}XyY+8Z1DnZ9C z>gW0DE2Qqd6S)QNPNacsn`DZ5BV+2Tatl;Mc|$-z(Vs6>b|x4^|6MjMfG!;0ntkh@ z;72dUc+o|MpiSrpH^rhHf3JlpoTfq*Do#?7TuVraID%a(S1cuG5b)>oOzdP%PjHB| zC&nOIGK;-wuPh$O(bOP!-XLd~_^~}TJVE<7H5!#R3RmSS`0iUs;*tJ_A#NT)-9P3d zhOjQL5&a6-3hVTmy0dWOh+3%=6Jq-!+o?`h*U~@o^@}qj0W*Xdc$7vK2pGT^9?C}sWs>Zo{>NWn(gL@2lKAT$ ztgbkwag;YqeVVYH7D9(aV@}O`K<8cv)x^&A&z)~%1P7D1JgN2egO#h_JTyU9D7MqU zlU-XG0#aGbR!CO?t`9uX<+^yCzRvog^1hTYfEwd zxHa}{#BFc76Q<1_Q7w%18R1&QA8oUTkHTf#aG_Lfn?C>di|In(=3J8{7)1HD8WVf` zq2Wk=h9nssS*4Rd!cT7SK$=kaG+=vQ9&_y39}~qVHJVTLuGQP3FSh+95q_U$d}2r{ z%(=@o_>SbH%odHoIs*eiM`!*=<0436qQA5jAmUs-=u4#AcFg4O8mP~*bZ?Xu=zfh( z3tMs;9F9uvvzj&4kbAEhqr2N7mi!dZL6G$2jx6Y)&!CRY#Aw9V5Vk-ytFkh2_G0Te z<&_8f-*ot@v|O#&39J371da5z=&yz07;nSH7H0K)-ffWGM2;}g(EO^C;W`WLifLh7 zF5v468@EK9N!>{=b|2k!U;CMheeSf5S{Yn7-S;1P)(*N6ZYy4 zB27#--!1VTs!n`P;8$S!TgHq~T;KJ_`%^?`mLCeTP+S${&)jXv!hvi^E09x}*0hNK zwuj(RdN-S}dcD+W`(sWd{Fu=6V20mhB2%5Jxpjdo3?3hn@kZ(q!kZQ%941zVSB?8G z8yanB6S`+OKE%Dg8frO9Of@ICFH0kk@FbAu7nMf84G1Oq2nJ%EXzLkz_J4xKJO8t8 zR!{P8kF874K6y{lW*6A3NB0i?H`R%>Ie=S&Z>PlhcPVa0QhDHj!<{Q_!R9={BhJRu z;0)HY-A*G7X|QvQkP&_nS9_ny*yyjtoaX-D_YrQ4Lts}ShOC4QnVF>7N;m9YMR|Q=3+3B)&hLWhQsG6LS2g~ z;%8!0DUMT0w^>mtI|+ci=2ZXB=nuAZ#KADoUT6kHbhJaRv{u_(FT6*AZ2_Kstj?OT zIN!5R@^=JW&L-X>-xeBU!p=^g(M5LgWucRJ5qj^ivoSx-8sDbY#IQ$|ZN6R&8|^rl zb~daGMf(t(PHpJ`|vBb2*XDO4fBx52X|}UgUbpQMHVP1Oe6m)FAR?9WPc3 z0I0&^XnJNMf}9uf^ypW2ZGjGrlIB(Hg@q{YyfY8*@QVDW5$kIv$|AUZda+Lv^sF1` zgui6qr9`Zh#8yV;V4TZB`vaY5@Dv5A{!gR%G*EcUGi$^MNY5Xy)%^brxOVd%XklVu z<*Jl1va=Tfx?)Vh)p4TPfBfyhu=})~IWiAyEY0cr#sgGxe)R3wcD*(ZLZ5APa0Bt@ zDwnRB)!UqWnB!d;O`*`CQt<4&p<};**694Vkq9!kbp$pOBjG+lnvA;m&V-GM7#ml8 zuO94l(6PGdSH9vW{0~J^K7&h}R<20j@a;{LiTZ1%azV#N%$F7_al?xl%v06P8f|^q z?%SJNgzuQO&-q`UlFYGV#78y%&*FG2tn-%^VHwzkj zC>zZ?SWj2J$_J3s+uR`F!W829^dMD9CX?>ATHQSoN6!DWfOmMAEQ$~JHItMJ>ox^H zQcPTapzt=?*s6IgOeTi9<`dlH1!+z`^?S9uLl~xji49#L)iV`3H5huCexz3}DlgX^ zr_0CxnF}~GE~|wIP;8oIL<8*fWy_UaqbqS{47z5vaKTm7P=49U_wgoR3XTa`foQ-lgtcN1q_Z|MKiA>+{t)2Pa zRj+Cu!KYvM$0H%Uk#TPm{*Zw)v1xRYn-vr@PZ@c~ZaDd7rT`DueagEK<4rIdKhTce zk|>OGgpnO%yt*|8;vnKT6nJIbS@e=t(B~>y)cGSem}{#Ol~nBMaz}t_Rxysd++}xMKxLT zH<)tl#H=#=uGxQ*Mw~7MVq%J5AR!Bw9aq93+cEpjI^|zZZfJSzonZsqn`mkaj|G6w z+Ts`)@CJytbsQ2kBzCiJc7LwE`{xfqXh+db;CQF%sOPt8ZB5-uW8|82?Jnt>u5@m) zA7ndtNmP@5sxP{48wYX_k~~=9<6NO&%hVnGV}4UJ2Qi+2fdMuU+t~AyZ?DBo4C@*ECu@YSGv=&5QL8i4TWD8dZA*{O4=jwXgA)^&tBqtVrDrW4uK?r{ z8SHvDH64Nk4s{h?vcuyB;?BptYr~i=_gn@G3E6@~Z|v~WP4&r>+WjxPcU2u`r_2%ZN%k#gbU&0hw?306x`y|pNefFO7U~i8f-dEe6o2gFv z-goGch6kbuMR-Hu0$@cA*hW;iRL!X8Y{l7;EDLWc69!WUY)6;EYw$YntzT++r&d^~ z$7yly5Z9#^qgJF;Z%jDNNkei7S^t9Ekk}ny@wlJSqu)-w%{p^MdxJtURd9Ph7-tLvFgW z@d5E);@z%w#y}8;a!f`st_|2$lN!NQMMVyPK}CE03cJ8?u%?^u00YAl7Z(v!%C5sy z7rpFAQ^Z-i-q7$IV&ez#1f~?h4KQ7;VAQ@}!b0;fTzawJQBdw$Pkw%TZ_@NA%_aQX z^EJY){_tW~D`8EGj3Xs1%p05mYF)sqPbhp{zz&Spuyef00Qinpwd;P9J#Ew3CejSR zVW3H{UqtACN1&%BCf>Hhb{34dVRVqA7&S%avP>z~@!x%Uyi}bdCOVmp*yFF&*KJ5j zpF!9AXIKE+p=yz!qJ+3utZUy7Oz%i?Q!b8|)mVTA zOjJ*2vk(r-zL%4~HM0{@(I*q$c^)^fws)M$g`*`E z`g@w>#T4A&pBcQL625s~GTyjaIuDF06emP_5{sWLMpX;&YZ)u=?i1z8WmH+STxVsp zao}=CZ}D>bI_sT&o5>wg&}q$(edrW=!#YI2LEPT1BH^QI-xGFY9UwaE^&NigZy47} z{6Q>K#v!-&X$87G^Xt}Jl5a3xDnxuy`n3jx<-?_mv3G@O%#X+wrZw`u=%MfK)@4rOdjF9y1obTc< zJGdZaEqbM1D&zN@4$@}tq^FmP{C!ke)z92dm3&4X2Yc_FyjT(ib;MK1Mx&igG$*>JNq{(*q@ zAY*k&o3QUvU+2w6t@7YJ|8t|2SNh^;T3*=WBiTYiJOqQ48kP4$*I29p_IQLQ&t&V9 z(VJ!ULnfVW?ciola_c0hA)SrlI6ao`tP?b21+hyYef9m77TgkE*K zJL~G9|F@3wuQv8M`?DbGVM0_9H87CdQe6?8ryI!d84?8xELxV&(8q`LKH3K+j=ls| z?E7e+4Y&x1FdY+dyswI;XYKvftPt@~^cSQVi@U2Tfxd8WGus$ZAXK9b*YL}O#VX=r zJyOhmgZRQeA68v7CM5JQwe_P2z76S4w2u@gr~L?v`we}8(V02nkA&Nbx0hQo>S=#D zUHkZfDk2l-<$*KKipRwe3}|H2<0P%&T-x_3|9(=$Z*;JiU~`6>4N-;7Dg9acVGsIE z?SJ4CA$c0SP-2JzvkBSlF0APpQNP?X>Lk0xj|F_LEdQB(X=Jiq7ux3ayMl-43aC-I zHc;lh8~RgxIkx*0s|S~M;_Sb9_n_>PEsV~2XzIiX1^~UVBi+3_If!AM` zs0Zb96Z3ME2;3I;e=%wcCl0PyADCV;m|!}CFCx8vmzQy&u4bntFM362B zD1jdx>7gmTizvN>E<)&4q={hY7!(i#D4-~v&_Q|)0fJy?A=FSsy7Y2h^saM1oU`s< zaOcyk{U$Se?aVu~_ntia;Y!~PG7+r~RJuD|(28%@UW|WoJ>aeA@5X02Df6Z`3|oZ` zZTi%ZR%~dSF3BwdGO{S(@a|bjtAn{BxR{zK6(SzW5C?6yW_&(LN*v0JXvy=dy#hIk zG=W!E{Vr1u>(b}A@BbymtdyhGo$}5OMY*cS>6^OqClxcQ%6u%eG`HP##FE~f1`5?h zbZ3d!JLhs5Iq|}g`7pC{8DiU6`TcfcX0~5_AMM+ZOl z)QMQMw7Qn6{Mq29Zr7l)?lG5B)AN@(>bGWgKR|DahbtM-e)iPjuY2`g)Q&p{>Le*M20=?@rp1(1e%KNgKQ+vczXUg@lYQAMFCogl6jm3bzN9n9w?`IWddz~aLs3hB-im$4)NL1&N ze79No_O#`W063@{Dxb!fSaXMM^8Bll>&^6peuW30b2Eyu5!CDRpUTF4SFNkVEF*LC z?;*(I(>)&+yKheww2qgU3}t(bnt8b?=-PHteu&AT?d>V01qpq0-LngLWMy?NQvDNr zOf3={F-OBtL%J4gU}I+$A}&q)trmKnj_y!y1xaO&AV53p{6gsC&W<`g(+YF%*Df7R znGXD}8=Odht(vn#BQ-GYsz0(qC*{2nv4ifarY-nt4jpMXybv|p-SirLJ(e>3mGXHfWM9UT!5j52rPh}}LTQYb>zPbng| z0IRnw=EWXWZhO|U(7+I;d2V=6&H1bF@m98T&@Pt3i})Uw^k!qFnl5$YSn-8zj%4g> za|+ne#+qRyeKwE|3hf@BX?e#e^CTujpz|44ZiOJ86&KWq!B; zCHG5{M&Qa*Q##h()BTR^$$&&3bo9uQfigXF@!f%Pazyv)c;yKJQBDAtEuyqYC zB?(NNFWTba|MoZ;$*j5`er2@oVY8(!kI~4Mb#JG86b#lgI_fAZxQQ0uZ!q0hL8+iV z3LOs~*wXxN7c6!N2`QXcs88|op^Xh-|J3vIK5c^Aq!qeM>~%b?#|jzp!2Wmr?t9Ma z&D0-{EV>h8)#D$WOQ{^o%UE7xx-s-z{s*V4J! zg;Yp++#IZNno}7(MWz<&-v`eeI($O|(+amp@3lg4yoz)jy~{nR$1Rr~o@$&Gx!u`+WjC-|tUsAaU{J=hh-flvCO7#hy$HL3w; zT;)Eehmzgm1{?%l^TO(?E>>@o5cR#ABtgOPWULC0)?_>I90KnMkx_Dha@dT2|XgRP*-i5A9DWx0M^s&`75J@;Ml%mrAghLYvAg z1#b+0qi9X)!{tj~xC4v~jP;gP&Njd`G4P%Ff2ysgvzeNWFnEvbrTkFYgenhamapaV zOsf=G^fKB?OXW&(UI+|%@#D7y_h0&ZDlvJ%@;{`B-#+edH`SAtElu5t1KS5YX3u2`vuteN`XX}k-7QmZ_6YO1!ie?OOUICSK1>;m%9DVMqm)RhW#&sfS;B= z7>uX8O><^`Qu#-Z%pu42$6j7y0Nz5*l_h@|^@iU_&f3L@E{JxKF0C0+xtaK8T795T zn)!Hy`ysWc&Nk}Va~2$eSN&Wf%WUgf%*`t<*0s{2N`CxXaa4g%_#heS%*wRpUKj`2(y(~3NsP8xVUt5b!GXlPoD#MGii51X22BjvSrKB5Q5>% ziKWlFbCCgeXyUAAcl5%ysGP`s#9?wEF<2@^VezCeRp$X-KUE=1<*Zv@SK9QI0XGjQ z(t&eQ`(lo5>@sq8HE((O$@S~k^}&nYbpRQT^ELq`f4o)^D9^FpxIaaOOXj868{&gE ztrQxxOTiz)EwCH8PZx$5;F_!Rh3WJzMDEp&2E0F`%5N8@0pX2m9(s9ucGaz<>FDVN zuO7evODxA&#u{fTHE*1XeV3kKtlnqZV>E4$7bKCT^}Rq4X+04=OzP^!;8gs!98@Y9 zfIOJOnXwSXYdT{wuaGMyR6V#k(y+2blmiw6cL5_YjUi%5r^w{%^p~0YDxI_K&DZq3 zyJ|RcOz+Lo*HqkPfN46;4$0n@k{jFfWej>xYiB2VP@6bVHxSDoa|2@uD+q_Z($tY z9`v0pl7!W76B^t>O7_HPf3O%EF;DE92KD)=Z&{hI@Uit~c!U}3my7P64UVf!=v z4g-PLj;z{ox_3y07cw&iZ~x|)d^qF;=h0(#tw=w8AY6Sy4HusKrUYyguXV;9>llIo zBG~!vqzh~}P>a;Pc9xu|ps*0^SrtJyu`Me84qW1coVTawTa0m)hqzWMjT*Mw;saiuzfk8!Qv`B<$Ah*Og$3 z3aF9cG4jl-52f9?wQK1lBxv`1gndpwI3YDUD#>nb^Vy~cr8AdSeDgp{)AV=*IqI-N zjNe&^^LcG*{NSg)vqRoVYi*YHZt;S&pw(z`a?suS>3eGwjW?w9$)4f#>{-@4As(0Z zO1PT2qjtw*Y<7LK>Os2Ir!ESS&JM}!l#pv7!Q{hjBgxJE!MjWsCP05!TJ4CT|CLBa zL6MS?@oe?5Ddc$UTTsO)(%BhO#hPB_{vj*2K$M$XZma4P%OZF_F790cN?B5hl~o$J z)o%#o@0NYARzLG{h6buNKt_Sv=__5# zQU6>Nczi=mkts*k5K+6ght^Ki&mYg-e%}saX);pJnGhLnc4w z)CD&tOTN~k%CaA7_uuBs?&c9uH56^|BPKbK4XK5ENq||$#9MtsR9@AEd4J1L3+*$K zUub?)bO#0aYB~E!J@q`oG{nleG2<^sr?nnvtbQ?XPcc}B?8X(EN{odUJa@ulhbmZ{ zIu9me3MoZ`>(#E|yE_vxlb!`O=$KqV7)}__H>YFGve1lyFwc%}A(HyCg zyE<8G5j$}`nocchbc!tCF}gMR3H*9dtpM&S`CVA7MA-&XnxaUKepo4HOPbSR0j}5I zPWjPMq$pLcrqp44B6ZvGkZ>aQBAzTIeRrPvx-_B8+XEE3n^G*=^2=c%v~fD(WA5+r>x*BkJ5`GoO+-Y?BqPzy{ixs z%zjIO+NlfWC`!njX&Sn>mtjbqA4mtnV2GF_e!12RL_fU1(wn2{t)=uJsk$$#i*q0o zo^w%5Aedx;h@?#1PG9QlFDX#9QMzoBV|I8%j2K^3AL2G-$>kH=DUW`C(9QjX{$&&> zW$U37KUJ#dd7I$pDR|V12gEc*)22FEORCJn5;fFF{VjjyDC-)4w(6o=?usiOuS`cD9%xDzybA|9r+orno2pc z%rL~{Dn@njYE^6%78R|nsou^Wt8!%mSc{K`MgaoiOrR)~D1d_o(3}J2)kQ_|Hw26U zPB#6A@I9LAF8L*}&VA>5#>BKVTTtvq)A70)CW%?BEx&ZhzX5Y7eGgd3g!{`#1(S~- z`*n_rtsCpxM*+m_>3vC!yf`o9BFM+A9*37N6}TO1ILruNnTK3BQrmuj|AKvNV%14+ zARpo4??(Q>)3dCppHa56EAN~iGSulF4g63&j({5{5DwfdTCMS3oIfxak-5;t$*!u} z0b(fm(@}k{JbU5u0V0b3B9gmV(u+pRhMpWmJ&F4>gk~Cc_R|;}8ygCZZlCqMcI{eA z$UeRsYhn|^h2y)b<*zO_pQm6Z&y+KDA7ih%;q=PxAxPLfx+;#qsKBmb(y{n`t% z|EoiN!QHD=lK@jPZ~^@J>sQL~jEs!o0TW|mqyq|WgaPoq{lzs?+JS)wWKRqJXwmZt z?OKb({Q^oHBYw9o5Bi;La|Kz23k)K6PS2mELpr6zpAdk72+FsJOf*sJ|fTKKW^ zue#OgW+htrO(J6An>g140yh)D)yO6CZSxXGQa31p0a!S6bag*6eM})W?)b}BuB`fY zVzF3uu>YFQzYQYmTszSe65OCrA~%=eTEZnEvHQOdx8$ZufmH>#xjxH-TzhNd!?V55 zey?@{4(sO5j{V?=dy1}k|6`E>*V=zXM4SQU5o-}xe0&}f2?vhC8ZZ+xv!-Oo&Ej~UNP^bGECnp9dvKF-P)`ah$f9jK=^nY|-5&t$&x4pCD8sJ9gdEL?7 zP13LMC}27y;8n@r4;;#EvX&eH7+GPyDk}uHpkNW+&(P3N(JkYz)kkOjOh5EH&6js` zv@dvP%8dYj74~0P9LNk_E$_7B;^keuBw_f+j)b9rE?E<)_cZVO{YT=e0)em>Xqpv1 u>pp*j2JWTL{~12~mx$v3MgK>*wHbD@M2H^u^x7u^nwFZrYRP@bi+=&1J}4Cc diff --git a/docs/modules/demos/images/jupyterhub-keycloak/server-options.png b/docs/modules/demos/images/jupyterhub-keycloak/server-options.png index fb00ce702cb444f8d5dbfa5c65ee5eed3b7fa5fe..a1d366ef1f27a8008ef548d80aa7aece267fcf98 100644 GIT binary patch literal 27572 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 literal 29720 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 diff --git a/docs/modules/demos/pages/jupyterhub-keycloak.adoc b/docs/modules/demos/pages/jupyterhub-keycloak.adoc index 325434d2..40ed7ebf 100644 --- a/docs/modules/demos/pages/jupyterhub-keycloak.adoc +++ b/docs/modules/demos/pages/jupyterhub-keycloak.adoc @@ -11,15 +11,9 @@ This demo showcases the integration between {jupyter}[JupyterHub] and {keycloak}[Keycloak] deployed on the Stackable Data Platform (SDP) onto a Kubernetes cluster. {jupyterlab}[JupyterLab] is deployed using the {jupyterhub-k8s}[pyspark-notebook stack] provided by the Jupyter community. -A simple notebook is provided that shows how to start a distributed Spark cluster, reading and writing data from: +A simple notebook is provided that shows how to start a distributed Spark cluster, reading and writing data from an S3 instance. -- an S3 instance -- HDFS - -The SDP makes this integration easy by publishing a discovery ConfigMap for the HDFS cluster. -This ConfigMap is then mounted in all Pods running {pyspark}[PySpark] notebooks so that these have access to HDFS data. For this demo a small sample of {gas-sensor}[gas sensor measurements*] is provided. - Install this demo on an existing Kubernetes cluster: [source,console] @@ -27,12 +21,9 @@ Install this demo on an existing Kubernetes cluster: $ stackablectl demo install jupyterhub-keycloak ---- -WARNING: There are two security issues to be aware of when using this notebook. -Firstly, when running a distributed Spark cluster from within a JupyterHub notebook, the notebook acts as the driver and requests executors Pods from k8s. +WARNING: When running a distributed Spark cluster from within a JupyterHub notebook, the notebook acts as the driver and requests executors Pods from k8s. These Pods in turn can mount *all* volumes and Secrets in that namespace. -To prevent this from breaking user separation, it is planned to use an OPA gatekeeper to have OPA rules that restrict what the created executor Pods can mount. This is not yet implemented in this demo. -Secondly, this demo currently employs user impersonation for the spark job that writes to HDFS. -In a later iteration of this demo it is planned to replace this for HDFS with OPA group mapping for authorization and Kerberos for authentication. +To prevent this from breaking user separation, it is planned to use an OPA gatekeeper to define OPA rules that restrict what the created executor Pods can mount. This is not yet implemented in this demo. [#system-requirements] == System requirements @@ -48,7 +39,7 @@ You may need more resources depending on how many concurrent users are logged in This demo shows how to authenticate JupyerHub users against a Keycloak backend using JupyterHub's OAuthenticator. The same users as in the xref:end-to-end-security.adoc[End-to-end-security] demo are configured in Keycloak and these will be used as examples. -The notebook offers a simple template for using Spark to interact with different backends, specifically S3 and HDFS. +The notebook offers a simple template for using Spark to interact with S3 as a storage backend. == Overview @@ -59,10 +50,9 @@ This demo will: ** *JupyterHub*: A multi-user server for Jupyter notebooks ** *Keycloak*: An identity and access management product ** *S3*: A Minio instance for data storage -** *Apache HDFS*: A distributed file system * Download a sample of the gas sensor dataset into S3 * Install the Jupyter notebook -* Demonstrate some basic data operations against S3 and HDFS +* Demonstrate some basic data operations against S3 * Illustrate multi-user usage == JupyterHub @@ -73,17 +63,11 @@ Have a look at the available Pods before logging in: ---- $ kubectl get pods NAME READY STATUS RESTARTS AGE -create-hdfs-dir-jw7h4 0/1 Completed 0 54m -hdfs-datanode-default-0 1/1 Running 0 54m -hdfs-journalnode-default-0 1/1 Running 0 54m -hdfs-namenode-default-0 2/2 Running 0 54m -hdfs-namenode-default-1 2/2 Running 0 50m hub-84f49ccbd7-29h7j 1/1 Running 0 56m keycloak-544d757f57-f55kr 2/2 Running 0 57m load-gas-data-m6z5p 0/1 Completed 0 54m minio-5486d7584f-x2jn8 1/1 Running 0 57m proxy-648bf7f45b-62vqg 1/1 Running 0 56m -zookeeper-server-default-0 1/1 Running 0 54m ---- @@ -111,7 +95,7 @@ You should see the JupyterHub login page, which will indicate a re-direct to the image::jupyterhub-keycloak/oauth-login.png[] Click on the sign-in button. -You will be redirected to the Keycloak login, where you can enter one of the aforementioned users: +You will be redirected to the Keycloak login, where you can enter one of the aforementioned users (e.g. `justin.martin` or `isla.williams`: the password is the same as the username): image::jupyterhub-keycloak/keycloak-login.png[] @@ -119,11 +103,7 @@ A successful login will redirect you back to JupyterHub where different profiles image::jupyterhub-keycloak/server-options.png[] -The explorer window on the left includes HDFS configuration files and a notebook that is already mounted. -Open the `hdfs` folder where the `core-site.xml` and `hdfs-site.xml` from the discovery ConfigMap of the HDFS cluster are located. -You can see how to reference the HDFS cluster when reading from it in the notebook (`hdfs://hdfs/`): - -image::jupyterhub-keycloak/hdfs-core-site.png[] +The explorer window on the left includes a notebook that is already mounted. Double-click on the file `notebook/process-s3.ipynb`: @@ -182,11 +162,23 @@ jupyter-justin-martin---bdd3b4a1 1/1 Running 0 3h47m ... ---- -The admin user (`isla.williams`) will also have an extra Admin tab in the JupyterHub console where current users can be managed: +The admin user (`isla.williams`) will also have an extra Admin tab in the JupyterHub console where current users can be managed. +You can find this in the JupyterHub UI at http://:31095/hub/admin e.g http://172.19.0.5:31095/hub/admin: image::jupyterhub-keycloak/admin-tab.png[] -You can inspect the S3 buckets by adding a port forward on port 9001 of the minio Pod and logging in with `admin/adminadmin`: +You can inspect the S3 buckets by using stackable stacklet list to return the Minio endpoint and logging in there with `admin/adminadmin`: + +[source,console] +---- +15:15 $ stackablectl stacklet list + +┌─────────┬───────────────┬───────────┬───────────────────────────────┬────────────┐ +│ PRODUCT ┆ NAME ┆ NAMESPACE ┆ ENDPOINTS ┆ CONDITIONS │ +╞═════════╪═══════════════╪═══════════╪═══════════════════════════════╪════════════╡ +│ minio ┆ minio-console ┆ default ┆ http http://172.19.0.5:32470 ┆ │ +└─────────┴───────────────┴───────────┴───────────────────────────────┴────────────┘ +---- image::jupyterhub-keycloak/s3-buckets.png[] diff --git a/stacks/jupyterhub-keycloak/hdfs.yaml b/stacks/jupyterhub-keycloak/hdfs.yaml deleted file mode 100644 index 1723aedb..00000000 --- a/stacks/jupyterhub-keycloak/hdfs.yaml +++ /dev/null @@ -1,57 +0,0 @@ ---- -apiVersion: zookeeper.stackable.tech/v1alpha1 -kind: ZookeeperZnode -metadata: - name: hdfs-znode -spec: - clusterRef: - name: zookeeper ---- -apiVersion: hdfs.stackable.tech/v1alpha1 -kind: HdfsCluster -metadata: - name: hdfs -spec: - image: - productVersion: 3.4.0 - clusterConfig: - dfsReplication: 1 - zookeeperConfigMapName: hdfs-znode - nameNodes: - config: - listenerClass: external-stable - resources: - storage: - data: - capacity: 5Gi - roleGroups: - default: - replicas: 2 - configOverrides: &configOverrides - core-site.xml: - # FIXME user jovyan should impersonate access-spark - # (jovyan=supergroup should not be necessary) - hadoop.user.group.static.mapping.overrides: "dr.who=;nn=;nm=;jn=;jovyan=supergroup;access-spark=;" - hadoop.proxyuser.jovyan.users: "*" - hadoop.proxyuser.jovyan.hosts: "*" - dataNodes: - config: - listenerClass: external-unstable - resources: - storage: - data: - capacity: 5Gi - roleGroups: - default: - replicas: 1 - configOverrides: *configOverrides - journalNodes: - config: - resources: - storage: - data: - capacity: 5Gi - roleGroups: - default: - replicas: 1 - configOverrides: *configOverrides diff --git a/stacks/jupyterhub-keycloak/jupyterhub.yaml b/stacks/jupyterhub-keycloak/jupyterhub.yaml index e285c4d7..c1193c22 100644 --- a/stacks/jupyterhub-keycloak/jupyterhub.yaml +++ b/stacks/jupyterhub-keycloak/jupyterhub.yaml @@ -1,3 +1,4 @@ +# yamllint disable-file --- releaseName: jupyterhub name: jupyterhub @@ -10,7 +11,7 @@ options: config: Authenticator: # don't filter here: delegate to Keycloak - allow_all: True + allow_all: true admin_users: - isla.williams GenericOAuthenticator: @@ -145,8 +146,6 @@ options: enabled: false extraLabels: stackable.tech/vendor: Stackable - extraEnv: - HADOOP_CONF_DIR: "/home/jovyan/hdfs" initContainers: - name: download-notebook image: oci.stackable.tech/sdp/tools:1.0.0-stackable0.0.0-dev @@ -175,9 +174,6 @@ options: - name: notebook emptyDir: sizeLimit: 500Mi - - name: hdfs-discovery-configmap - configMap: - name: hdfs extraVolumeMounts: - name: tls-ca-cert mountPath: /stackable/secrets/tls-ca-cert @@ -185,8 +181,6 @@ options: mountPath: /minio-s3-credentials - name: notebook mountPath: /home/jovyan/notebook - - name: hdfs-discovery-configmap - mountPath: /home/jovyan/hdfs profileList: - display_name: "Default" description: "Default profile" @@ -195,37 +189,29 @@ options: cpu: display_name: CPU choices: - "2": - display_name: "2 request, 2 limit" - kubespawner_override: - cpu_guarantee: 2 - cpu_limit: 2 - "1 request, 16 limit": - display_name: "1 request, 16 limit" +{% for cpu in ["1","2","4","8","16","32"] %} + "{{cpu}}": + display_name: "{{cpu}}" kubespawner_override: - cpu_guarantee: 1 - cpu_limit: 16 - "5 request, 16 limit": - display_name: "5 request, 16 limit" - kubespawner_override: - cpu_guarantee: 5 - cpu_limit: 16 + cpu_guarantee: {{cpu}} + cpu_limit: {{cpu}} +{% endfor %} memory: display_name: Memory choices: - "8 GB": - display_name: "8 GB" +{% for memory in ["1","2","4","8","16","32","64","128"] %} + "{{memory}} GB": + display_name: "{{memory}} GB" kubespawner_override: - mem_guarantee: "8G" - mem_limit: "8G" + mem_guarantee: "{{memory}}G" + mem_limit: "{{memory}}G" +{% endfor %} image: display_name: Image choices: - "quay.io/jupyter/pyspark-notebook:python-3.11.9": - display_name: "quay.io/jupyter/pyspark-notebook:python-3.11.9" - kubespawner_override: - image: "quay.io/jupyter/pyspark-notebook:python-3.11.9" - "quay.io/jupyter/pyspark-notebook:spark-3.5.2": - display_name: "quay.io/jupyter/pyspark-notebook:spark-3.5.2" +{% for image in ["quay.io/jupyter/pyspark-notebook:python-3.11.9", "quay.io/jupyter/pyspark-notebook:spark-3.5.2"] %} + "{{image}}": + display_name: "{{image}}" kubespawner_override: - image: "quay.io/jupyter/pyspark-notebook:spark-3.5.2" + image: "{{image}}" +{% endfor %} diff --git a/stacks/jupyterhub-keycloak/process-s3.ipynb b/stacks/jupyterhub-keycloak/process-s3.ipynb index 7d79f898..ac36f6ad 100644 --- a/stacks/jupyterhub-keycloak/process-s3.ipynb +++ b/stacks/jupyterhub-keycloak/process-s3.ipynb @@ -160,27 +160,6 @@ "df.show()" ] }, - { - "cell_type": "code", - "execution_count": null, - "id": "61849d20-c66b-48fc-8bf9-b1f7eae36846", - "metadata": {}, - "outputs": [], - "source": [ - "df.write.csv(\"hdfs://hdfs/gas-sensor-data/csv\", mode=\"overwrite\", header = True)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "4f4ca47a-b03c-4ae0-9c7c-0b9df2938476", - "metadata": {}, - "outputs": [], - "source": [ - "df_hdfs = spark.read.csv(\"hdfs://hdfs/gas-sensor-data/csv\", header = True)\n", - "df_hdfs.count()" - ] - }, { "cell_type": "code", "execution_count": null, diff --git a/stacks/jupyterhub-keycloak/zookeeper.yaml b/stacks/jupyterhub-keycloak/zookeeper.yaml deleted file mode 100644 index 2b2699d7..00000000 --- a/stacks/jupyterhub-keycloak/zookeeper.yaml +++ /dev/null @@ -1,12 +0,0 @@ ---- -apiVersion: zookeeper.stackable.tech/v1alpha1 -kind: ZookeeperCluster -metadata: - name: zookeeper -spec: - image: - productVersion: 3.9.2 - servers: - roleGroups: - default: - replicas: 1 diff --git a/stacks/stacks-v2.yaml b/stacks/stacks-v2.yaml index f0fcf032..fee53aa0 100644 --- a/stacks/stacks-v2.yaml +++ b/stacks/stacks-v2.yaml @@ -656,8 +656,6 @@ stacks: - commons - listener - secret - - hdfs - - zookeeper labels: - security - jupyterhub @@ -668,7 +666,7 @@ stacks: memory: 9010Mi pvc: 24Gi manifests: - # TODO: revert paths + # TODO: revert paths - helmChart: stacks/_templates/minio.yaml - plainYaml: stacks/jupyterhub-keycloak/keycloak-serviceaccount.yaml - plainYaml: stacks/jupyterhub-keycloak/keycloak-realm-config.yaml @@ -676,8 +674,6 @@ stacks: - helmChart: stacks/jupyterhub-keycloak/jupyterhub.yaml - plainYaml: stacks/jupyterhub-keycloak/serviceaccount.yaml - plainYaml: stacks/jupyterhub-keycloak/s3-connection.yaml - - plainYaml: stacks/jupyterhub-keycloak/zookeeper.yaml - - plainYaml: stacks/jupyterhub-keycloak/hdfs.yaml parameters: - name: keycloakAdminPassword description: Password of the Keycloak admin user From 44b0ecf4c09c90266f90263d9ad56578402c12a0 Mon Sep 17 00:00:00 2001 From: Andrew Kenworthy <1712947+adwk67@users.noreply.github.com> Date: Mon, 3 Mar 2025 16:20:22 +0100 Subject: [PATCH 33/37] Update docs/modules/demos/pages/jupyterhub-keycloak.adoc Co-authored-by: Sebastian Bernauer --- docs/modules/demos/pages/jupyterhub-keycloak.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/modules/demos/pages/jupyterhub-keycloak.adoc b/docs/modules/demos/pages/jupyterhub-keycloak.adoc index 40ed7ebf..15434a59 100644 --- a/docs/modules/demos/pages/jupyterhub-keycloak.adoc +++ b/docs/modules/demos/pages/jupyterhub-keycloak.adoc @@ -171,7 +171,7 @@ You can inspect the S3 buckets by using stackable stacklet list to return the Mi [source,console] ---- -15:15 $ stackablectl stacklet list +$ stackablectl stacklet list ┌─────────┬───────────────┬───────────┬───────────────────────────────┬────────────┐ │ PRODUCT ┆ NAME ┆ NAMESPACE ┆ ENDPOINTS ┆ CONDITIONS │ From 49d47e06379c5c83a9aa9216758139ea24352e0a Mon Sep 17 00:00:00 2001 From: Andrew Kenworthy <1712947+adwk67@users.noreply.github.com> Date: Mon, 3 Mar 2025 16:20:37 +0100 Subject: [PATCH 34/37] Update docs/modules/demos/pages/jupyterhub-keycloak.adoc Co-authored-by: Sebastian Bernauer --- docs/modules/demos/pages/jupyterhub-keycloak.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/modules/demos/pages/jupyterhub-keycloak.adoc b/docs/modules/demos/pages/jupyterhub-keycloak.adoc index 15434a59..440dcf1c 100644 --- a/docs/modules/demos/pages/jupyterhub-keycloak.adoc +++ b/docs/modules/demos/pages/jupyterhub-keycloak.adoc @@ -153,7 +153,7 @@ You should now see user-specific pods for all three users: [source,console] ---- -16:16 $ kubectl get pods +$ kubectl get pods NAME READY STATUS RESTARTS AGE ... jupyter-daniel-king---181a80ce 1/1 Running 0 6m17s From 5a2c6cf3a8535ecdddc49458cb88f3429dc47f5a Mon Sep 17 00:00:00 2001 From: Andrew Kenworthy <1712947+adwk67@users.noreply.github.com> Date: Mon, 3 Mar 2025 18:07:25 +0100 Subject: [PATCH 35/37] Update docs/modules/demos/pages/jupyterhub-keycloak.adoc Co-authored-by: Malte Sander --- docs/modules/demos/pages/jupyterhub-keycloak.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/modules/demos/pages/jupyterhub-keycloak.adoc b/docs/modules/demos/pages/jupyterhub-keycloak.adoc index 440dcf1c..fd476e6a 100644 --- a/docs/modules/demos/pages/jupyterhub-keycloak.adoc +++ b/docs/modules/demos/pages/jupyterhub-keycloak.adoc @@ -123,7 +123,7 @@ JupyterHub has started a pod for the user's notebook instance (`jupyter-justin-m [source,console] ---- -12:49 $ kubectl get pods +$ kubectl get pods NAME READY STATUS RESTARTS AGE ... jupyter-justin-martin---bdd3b4a1 1/1 Running 0 17m From 0eb1ac7820c95ca996ebeae160e4b8928eeeb248 Mon Sep 17 00:00:00 2001 From: Andrew Kenworthy <1712947+adwk67@users.noreply.github.com> Date: Mon, 3 Mar 2025 20:59:27 +0100 Subject: [PATCH 36/37] Update docs/modules/demos/pages/jupyterhub-keycloak.adoc Co-authored-by: Malte Sander --- docs/modules/demos/pages/jupyterhub-keycloak.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/modules/demos/pages/jupyterhub-keycloak.adoc b/docs/modules/demos/pages/jupyterhub-keycloak.adoc index fd476e6a..52d1c513 100644 --- a/docs/modules/demos/pages/jupyterhub-keycloak.adoc +++ b/docs/modules/demos/pages/jupyterhub-keycloak.adoc @@ -71,7 +71,7 @@ proxy-648bf7f45b-62vqg 1/1 Running 0 56m ---- -The `proxy` Pod has an associated `proxy-public` service with a statically-defined port (31095), exposed with type NodePort. +The `proxy` Pod has an associated `proxy-public` service with a statically-defined port (31095), exposed with type NodePort. The `keycloak` Pod has a Service called `keycloak` with a fixed port (31093) of type NodePort as well. In order to reach the JupyterHub web interface, navigate to this service. The node port IP can be found in the ConfigMap `keycloak-address` (written by the Keycloak Deployment as it starts up). In the example below that would then be 172.19.0.5:31095: From 7be52881782de472d1fbd1e13e42f072f7bce8f5 Mon Sep 17 00:00:00 2001 From: Andrew Kenworthy Date: Tue, 4 Mar 2025 09:42:23 +0100 Subject: [PATCH 37/37] added a note about proxy reachability --- docs/modules/demos/pages/jupyterhub-keycloak.adoc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/modules/demos/pages/jupyterhub-keycloak.adoc b/docs/modules/demos/pages/jupyterhub-keycloak.adoc index 52d1c513..ebbb4b3c 100644 --- a/docs/modules/demos/pages/jupyterhub-keycloak.adoc +++ b/docs/modules/demos/pages/jupyterhub-keycloak.adoc @@ -74,6 +74,10 @@ proxy-648bf7f45b-62vqg 1/1 Running 0 56m The `proxy` Pod has an associated `proxy-public` service with a statically-defined port (31095), exposed with type NodePort. The `keycloak` Pod has a Service called `keycloak` with a fixed port (31093) of type NodePort as well. In order to reach the JupyterHub web interface, navigate to this service. The node port IP can be found in the ConfigMap `keycloak-address` (written by the Keycloak Deployment as it starts up). +On Kind this can be any node - not necessarily the one where the proxy Pod is running. +This is due to the way in which Docker networking is used within the cluster. +On other clusters it will be necessary to use the exact Node on which the proxy is running. + In the example below that would then be 172.19.0.5:31095: [source,yaml]

DvvY@qyb7OpM0cQesemj2{@eAHSJI7$WV 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 MsQ$E6-aPpK0A2rq=>Px# literal 0 HcmV?d00001 diff --git a/docs/modules/demos/images/jupyterhub-keycloak/load-nb.png b/docs/modules/demos/images/jupyterhub-keycloak/load-nb.png new file mode 100644 index 0000000000000000000000000000000000000000..902bc23e8cfecd5532e26c48b2639c40622a275a GIT binary patch literal 195570 zcmb5W1yq!6*EWoTB2ofUl7b8(-3=lwC7^VtbaxCT9nuX7NOuiAbcb|zcMM(gU)=ZY z^W5+IuWx|-C7L7!yB(VxG1j(~uGE-4|RfPnCn9{~Ze;n`E* z9qduZkH7`V?t|p#XFzj*W)KLxCbSn-u~)P*vUk$8HAFDBw6ZXyx6`*ZG_M|7$S&Rk+X1;iy7*XvoNu+lQXmMuru*6agqy*e*Req z$w5FMN01Z|`s|#tH}9tM#qb(_%=y8R&w}+E+fSCGKyFF>>H(C>5}lWNM)vPhngUsU zlQQMEe|uYpz7DB;d^Z@#Av*X{pS^o4Fw94>M;bZ7lnK*$3mH@|0`#a&`qW`@mvX)`uO8ei>WBvd7`#B#)3Jj{@ zq?h(~5q?KzJd|cpV)?HgL=db^_c7i{$$dKBe}q7sanhDf^1U|euatP?d^?5 z%2!jR8T7AdvE@!nM#R!8kCbQ&l6qe1A`BYj*npgn*KgoYaE(o8xG`S&ul`oA?RCP? z)zwWA@K8hf_oPjn24r0|oaP-;xNLlSM|0k~QTwyP@5CGT--RD!u51bP3N8k(|HQYp zhnZIB{Cm2uRz9f$?b8vxrKK|G{PmvdN9|nD%;{R zgIy=*{GC>8(R=h0s`9NpPc}U0$7TxqY0x$Dyp>y^B2lK940yb_T<#jd)G^`J@(~&|Vhbr8{5rVs+3jLt z3Y8)ero?ztae4fbp}wGg?8l&Pp`AIH4q8v*U=i}qCUvj>0Cosi+U7i7{x+r2fir*5 zEU*2cw@EKwN{*o9)dHqEt^qx6?VAPusN~L@CA*v25>a*YC0voQRUv1G-`yDceH3Eh zq}sF$={s+vGv~_uM46p3coD94+Y+vB9BVR-4X`}i$dBuHi_07Fy@z~crWgW$DbmOq zZ_jU%%u0Iu@ux~V+K3}NrnMS;0EwnM4WgfL_+fEzCN>P(!=UV;?kw=qnD2Q4q3KL% z$B-Ll*rcSv?2q#*bA81uva<9_VYKv492EzWP^ilr&Xfx`{BzgM#%-%UNh6cMbp8nx z0i?k&>d~2YG2BGD)H=U@wMjXTu4)|kL0Sn#eEX00*cY0m4djX6Y03;ZuPzk+n0%J* zK=JnSlJk@7S@6ON1~GDkpSQ4jgXSvlnSrJ4D_DSLO)Kgm?@V<;9Ls!Js0HH<#CeC< zDMWDJvtVRxV2l?{k8=~7d*@b-mV*VdZ)Cm%OLzqP6}YZPAi4%$lF|@E!xL}rrZziM zz!Psx-WBFG?7t$4FLk~_TEYHsy!RYN^JOi%{41U$e_N1Lc*|@D5-!Jy?a8(}yNr5~ zS#6`G4xBBj5-j#uXO^HdW^Z~g^voh>a7IED?>Hh`CwQS*RvW*$`Pz`wP+4>Deuts% z4OsloyQzWz+Y0+&LgFy!Qn4ZzM351E#2UKYvdgEfd zGu-y&GH;&Huk6Df%R~?lW$bTy4uZ{?y`7M;2`U3)N@m|Z#)&g&BAA6tcqYx%#X=9u ztaD0g(^Ot@S&qw@O@_WID>G?v#hWm zazLg# z!R^s1FZ+9Of1djxdu0+1rMt>&YW+MvQxw@5^*%S_rVE;rI(-Q})}`}Sygf=@@s;~c z5#^Nbl!3|`h*A8?!p4c9Onop6t;{1yLIn6W#k-?=UY|8Y3&NOKiew^AH)S#!90pF; zWi5V|qB1)Z18ldFJFdadzI-*6i>Wm5UUGwDaD`-Wiix&h4>Gh~IByAFGa_kF|_N2c}C<;Y)%-}?dT}a_9#8yY| zMHBxnht*LHx9jr0#nCkW7fyUy+p9fPBJSz&QCroX`;m4eDPE;l9EAoJ((7K61I}#v zA1i$3%;!ku^o=`Z9gPYpbD7dEE6;1VO~2ndIm!+ z3X`^dipb-AY;4RQ-T+(buh*FCY4=t_O1dd&SmNNa8j@X0&e2i%rPi0&tTk6OVWUVcjP?wG`RR44_VDXf!fn2W$7#$~^Vy>0UpG$obS{P( zDSt+i#FtH{`s3;apT`@IWKu*_Eeo*AonIq$aWZ2zg!Nyr96i(ax+85M?DG{$s9@TYf0DlNgJ6e4Gatw zsTW>8RozL9DmY%<;2%y#RGmJL#I1LV++2_7!dE?y{@ z;gorOpG>Y)V%jsN^rd8EP4ZLoTSu@Kyyk~enc?@_oB0HKyg4(fC^a{dq@yGb-1x@y z>DfaWs;c(%Cz#GN+T#vFbAsmxgy~aBQ$rmrr86I`ZMM~oUG8&K*Br8E-hmVc&h}PV zQ6g?{?YgG+!n@wzsEs;|sxY;QxSDeO#-Dt|VJq0(X^IdIlD0_7VqU$OMK8qg3r$G8 z{6@#mN%3=jX#L6LV3SPN%c}~VaQuxO5PL~gV+5iD++XgbW%H+Vd0)Wsj{mxl$FZ^1GnaL3>dKbom!apow-~_8T5Br*&3m8+G9d2C_IWfj zx7$C&j5pl%>!S;kmKy$qk4kw@7BiD2?sVTV>+hOPU)r#SCAUx2pp{GA9e4M3P>}~G zFNT0BbOa9EoaC9RNrHRpk+2}#PeU?=9OtCtW;AR#CoM`V{zGYTt7u#qpk6s&4-_{yQrKwl1FELX5+OWs1RFjXSrz#+v$RMYs9%`KfU04nUD zYQ92l3_Oh;eo4O|HYPXwb2db0KzgnAjF9;4qv+@`_qGuo^+|7rm+PvJtg`PM*$ZXK z_YPF}vPH4Ehc4z$6)jprjho$99&hN+rna(1_`hhhr(|YxWSGt0g%zh-os?;=&NrK} zLf|&JhgQx)EU)3}?Bgo5B^DRE^KY*|DQf(|YPSUJg4^=)p2t<(Y84jATOnr9CKV$q zomgI9EA~s74{_h#hM>46F~v^3eUucd zWjZ8f`~6#Y)vk3!iulxM={=;Wrt-{TYsaTR{Dln-?6|O^+yi6@t9FitEAdTIf#;-hDU)PLE&K-<vxYfWXO5cJv zs)P7Nk4Bfl27i6f9LUL{)#67`LrVVT$1tgA1RBORYqnL>Vus3tIh~V%xM-1E5Niu- z!@eNCvgp(($sv}JdDraGC83Lf@p`(H)=T5)wAhH`9JkfYk>MxG@rdr{wRgsuV*)cj zzjQf{eRdx@9O|ZqOGpmvIPzl*43C)2#tnJryOMQICQCR^HVby&U_Yh%<3&?NE22p; z=G_4F-hvtQI;CeC&G;3xL+KdawDh@GF{bJ6jdEyBUc z6BWs4)k9>5oa}y=ax?dMg=Keyx0V+zIUBU!r|5K+*wWpMdsSY>WzJj9I?>foc zK(Vo~YPo*Zz8MVj-wLD8jUAKRlQP&)WMjgO`;&0qPE{7>d;22tAGkd4G86k$&7H` z?&l07xePgN$HdEkD zr{?(Z&p-+OP<>=>qdM;v4;~(DtXhq!ra@#*r+(l||B06pnaeLl!0c=P~RsZN{^zE%XT3fCvhx3t+>*+czB)0X+U~|BuQ%KIk$pS8QAAc;xE_bOYTQZs14Xtj1Tt)PNWKp;)jpF77xTkmom#j#eDV zzB~WU#``qxF3~#TJX9&mP&SQE($SGaK;X={#qnS+2m;~sxURhW{Ui96ahu(V9>e1) z+f4C@(RzRb)D(8l%So$BoBmqh4navBrAFnMhb!T-U{UhK(W(0Tn1KQhY*O1{a}FYa zazO_XkBp9%sn8`1>^p5dM@6-JKK)AO-MYXAFx_uwY5! z`72C;OL8Jk%ZBbovgQ45apxQI6an-}X_uHOQ5?c%$@}Zwbi1QvCl~v|#`PYk=n0G; z^XNc-^~YCa8@Zx&{eqV5QI0JbPPVv!)MZUR^+_1zo(fLa3`qbN$|>Q^TX0|^TFS<% zGMPbVel*bYomHybDUOq^Z(e>xih(C&hrg*bHM_n~WaHk5*$IQWr3}+$dt1bjm>b33 zSo)GIFm>V*=X&JI#m!AoNvV_fu)#MolhV`E6Ty6;A(4dF(fY9QqS~w#@yE)NF#+%W zr$ZhbXzoW>w$n;iQW~h1^awr&8bUNt-0!y;ANDB8LJLJGRus5(Setu%f486cVX}5h zg;4V_r}`)`VWxNbY)RbC=R2AVP%wkiVi*gTzUqxJPL^#va$-7>1iw!5OMOC+aFl@6 z0mH)UCs?yo`CxxyX^wE`8|bDlu&`EPa;1PRQ0YUNKrL3bOrtGbwPK~CF3yB$pJ$?| z$I4V+KMF~s)bXGV{oe4z+^v`B`Dl<9fn4^uzWC0?c97| zh~M>escyG;w>eOak)9sitGT%uBRp#zI8r^4l;Q~1c6OOghYRexgDKo?xXK#C@;|Hc zuCtM+0YloIETQJ&N?_LS{GOWX5qZY-hbl}Fs#ZA27%b%?Jb$V)#LCp0D1_Rs%YV*!`fmxi3vvY3eKXyT+Fp`;i z>)Jbx&~SSXAt9E$nW=N2rJDNccfYCa~Yx!q#1y&CXh=ca7Fg!=#sQ34tWCw6Tx7N0WuG+gq z*Uw>3nbAQyz1C51w`bYtOWo)6dyNhZW%_%&$d}T_D`ePLYssIecEVw2IKdh-^vx+Ft7MOw7sTvc z9@TyOz)8O3rv&Nuq8xeZ{eJg7WKQBga`0O&oL?j)qT*;;JM`)+D+x5+A8dL~Uf1gk z4uQ-TKWC$}>gOLS*BK+uDjlP#wpAmWuQi>ag@AD*uH+(}Axm<;F6La3qYA3GmK@7c z)XWYd*ydrNrWlW8Nyfy-!+@d%;g5N2(!Vj)2y;^EX?K7B+Nhjh5v%xpscu`%W}4d! zUuoa`kvD&C*8R3qT~u2D=43q|71gf=gFs(j#1K6Cl};in^UZFC!J9*I7ud$~^0H8gR^wEo8>ghCq=A8fPQ`Qrr?% zjlcf>!$uf)Z2+`btIti_z0D-&z~W+7*ua)?YT+6C)&wFl*m_n{GGGe7n3 ziOXY8ESB+DB0fC|E6X5!{uruQnDfnN;oxy*c#Qatv>S1 zN_{sW;rMyb8|OaaYEQzT3%O*Ew+PnIg|H0FA}>y%(MCyEMx5jl#%a|jD%tEz4vEvD zwUvQS!DpHpHZ%;aN)$%`bay9;NC-4UUtiujC7>sGUHyb2n1l#B|Y}7#yV59P9%_>Yqu^`JrX9-hs9L2B1kLs!m829O{|7qa!2FP*DpmX!-b3s>~)Q@~_A>#f3Yv3INUo0Ppf< zs>Tg?fGch8A_MmyEw}9!5(&6-k%4cSkugd4yt8zp zKzvJcRh(aclef0E?$Gbejh#)CBi1F~{BGRX&>hI)K_g>MV5~k^QV~U*Mq(&=gB%tr|}U2dEM>ZT_T?g3$QO3 z^^W_daD;a)J*#-GjP9siX8xlV%?_t(rH^uc#@SiCl5w5t7W{O!@RKcKZ82xnHXe*P z%8*z(#~O<$iDIDk2<-&Y9_>Dtt`mYHCS#aC3c_CKEg)RiiFviO1yq8bOK7DART+Jg zAMf-psxdwEZ8&~qphL_2W6ZxOzo;*8xJF(?K2^KzX?0O)RQ;@471;Oo^o>GO8Iwuq z-R9gyl*CoJ_k~ooJH|_;Z<#GFiKn?--9*raWN4aGv`v48AP(=1yywa6 z+k@1n^KMCA2XolER%~3CoPGlMZEcT&&NU=1?n7O2!K@VQ%$Ca`{aS=wl&sj?^Nqao zC5-|2+RrWAE6fh4d3N3~b_jIOckMZ-Jw@s~2`I%H*ivK=Pxm+{eArOMZ0Wo&MBByn z2N~)R%LdpWFBdQGWb&37t#asb8=H$|QM!0wZ>J-i1A)jvf6nk$~$L7GBfy=}&^jt5_Nm;I=QzhWgtMFP?&; zQS9Cm6XCn*tJWpe+6?9V+0kkf>l;3l^FcSWE1-d#*s=)GZX0-2Mw{5ymRqK?F8-v2v-Ic8hsN%O-PF>awf15 zjfI3m@xpPhG|NjyjR7CnQ@*-IR-%%2XAK{^0V3gzubmz>vF+q!*d&i00R1?hU`5kw zMg@9W+7Q479wQ=}g?&onwgb)AIZ$$QCzA5JTJIJ?s@2gDkul669{&`FQ-uwICe#9{ zsb%LIzNJogZ%tx1QyZ5D4u3uVC(@J4&HXxfCtJ+v6nwwdg^`D6+h*&VYj&5(ukiw9 z*mh3(gsRr!RdG{zXBd&P@u|46t?r2a-SrvCOG%jf)p~rPMr~BQmTM4gNke&No5@Hx z3GXXSLC3u*(1pB$LTkBUUy}J`fifcnCFO3Y7uI(Ff09;#v*N{CJL-jnh12cPoavkX zo*vzkwH}%3oBLmGTmMR5f1M6UxDFH;@AL(m>*au!63f$;P;s6MiUAeRtC#J+`mIWv zYuGKYbk#wno-#}y)hpAZqOkAJO2FfJ74r1_{HZ{KP$ddy1x7Vo2v;wP{2xpOkI=WV z;^p-VXi@BM6%tqe*v~A2SG!`>b+_!FyE)j|V}ZPj$>Z7{kYz~9$gHpRM4wg1PSgUq z;v)bMIQiP$85l*BZN_202`hYfHx*Sa!|KRIMXJ{v#V>Ib@Qli{3ipS6MxYz=2JC!5I?=@C2y zvPDwPd3(ip3Fptdi%`M48%|?28Z47y(hGKepM1&i1(C+ZTJdg8g|>|f=3h;?AUY|| zD960je|V(rm6+4-jh~c4mtWP9$+oW_T_tpYrD8q_4YILaS*q*aj~fF_!s5l z`rRLv1g=e|*}F#Bd$cv@hsyv;runbKSCV7&pJA`*IqYsB{OeO9Gd@xO;N`zoc7*Ef z|DYf>{|~qKGsiwI9PkzXA|d%_>26iH{#HAk^$ZLcp6!ey@SSv1h7vGm_)=m=8qo|; z-kl*$WM@U+RmoRO*{5>ex7ev3*@5}o9Ch6PLF_cRczCvZQ_KiY(FmHGy%8Br1wXn5 z2HM-+obOYzvf_C4L{qPBZ%-HBk#O7k0boA7yuAGB?ClWz788^I^i%TrO$#zvDF7Ce z(lN;d`X7$KbcM0YdaQEILEWzDgiH!oQ zx6tUuZNK#ba9cHXb+#vKk^na-ba600o1^%*IkdiN-hu-S2+9iE-z1W<x9qw+hs*DFv#I*~)SIhw8h9BBQE{_N*W#z=(uo85{1f|m+2Sj4@9AZ+KUWxa z;-o^nEHZfx*wr8%*r`yj%3o;)RQ|{3a!M6OMzG?=;Na&mG&Py!)c-PeHkg%VkSZ}uUhCE8G>GZcUV(6U3DEL27OlyitW z3Hb$Ca1FURs4tm@zh@NxzjGHvlP!_egUXE3I;}Ua4Xl!fzN1c%sM#UoEF=pJM$i!2 z1WgHON!{Y%v;@gZ!%C@>!ZP^ESt^zvA^ImWxkyu*UU`1l=&G0)N`5P~n=Zx!a3mbb zVJ9cH2oDDa$fl2uju3R<_jkmCo++zc5vzN9{jthgk`T*xX4DVy zzzoelLRs1po7(7+#6_?zO>X(tN-*`cBww0@G|s#U->8VHIw4#c#nh>a^$Pj+J0~9N ze)L*km%xAu)Yi6p%;jlT5)gc_ac~qj z>ztgNy5{Fo)h%nkv71elx}KSmx~xSSiDqO41Zq?Rz=4p@**dz4^n7nx_``?CA^41z z@m%4=+#^QtImWf6rS}ladDCnI8+-f0+A`$x z0VZize`?cIT3RYL3D`!H%ndCA1Bino4lv~hLk$Q(Zgf4<1AN#UDyqoHNbdn7{e=b> zi;>06bg(SYQ&UsZfZ9TwEHQl+9c|?1$Onn%4JQq_>dptTnlap}TxuAIV5CEz`*R4C z+2zE*^}O)TvZAsw#$vV_>*dQaF)-A8&2p%9gXH5;SQylhbCE!LD?#Rs)li2~nZ_y6 zZH4iW?a`7@)8z_kZ(mxD#wUy7oaOJ1MyLel=8KX zJW0L1AD=&eo|~Jy1mH}2z}*^sEYNN9FLOR#;YjSw~g6`tvq*br1 z)M0mmWB(Aqr40ZNv$nRzH&HFy##9P?;U5xd*-mv)h7d0K5q zw|-p4CTlvoII5Gi81GNt zyGf#(R(eXX6ZVi|4s}|(HwhBUQm-r#0whlB<1=Z?U3#xyUWhgJ{lqbhiS>p3CZyAb zQ?SnM2x2dS;rz1@t4#owasrOodEm^vV%mB68-A%;Q792-@u0m6e#cu1t90~u8?73S zGvn^H;7I~}^Yk@&0~IFiwe%uZtX6F&*rcBYe|9D!c5{y@11S}qKxr(k;LO$Q~Q%LYU& zjR{$d<^%{JPP(7+BHum>=2?BeQKBmY_qUrSFu4U_!)Ei<9KUUgh=aa=G0-8P(m4lR z_G~6<4|Q*zb|2sJFD(|z}}B zAG`+K;saO*+ycNJSRDy<;@Pn+AMmDkdwtG;Y+}2Td;e2NnAX4NNnhdH49^1# z!E|~q;|=d|&I|O9=1+~BoUSKKo>XJP2ffQGj*EG~6Oh(tc}bpq=em4YeVp<-&>E(Q zBkGeL3HSNtIK1Jd-D37li53vv0Gu`x4Dmmb2brgXj{6T4y2}U?G(1#G3tc~Z3M6O5 zMScI`^(X<<`Tbm-Q-Lx*>h>GDdaaP^H^ROYt~7XUe4`v?`YC>f5UbtY!5p@D(*q^1+QnL%`YJ?}#t2f)|BN7t|B&_Im|0Fw)=sHik* zYkC8BrQ#XZlgx^j^9zbw2L{3(d_I6y0ALDuYlE>|dA{qd%y^6Ws6ilB3#{}|r<;%Z z$%^yXtRTU!hQQ8C-pHm@deZI3XMF;E%bb6~soR{e}QLjfS5*OV_ zg20RwjQ5_X$KY4pKHs7V*FN_L<#!AUst*>II9A*g`0gbsi@A^SJb%=S+H>EW*o}!{ zYYi82EWucs+p9EmuLAjXx7ke{eMCT{q1;V;p+%QI6n=-yT_c#B^*eGbwD#RC4orB_ zaH(9An9u(EycuH0gJliM0G`_<)|W5J$a0UN~=nrZ_c|3tI|TO54x$ zBK?bdUt+$>WOTvV4*enXpM~C(!@x0!W6%r+g2mOz`h&P1hg!DO{mK@o|2m%zi_e0V z^O85SAr!mYPwp8W#)|F{0U*l*bEplzV+Y`7XOHC2=|f_1n{cHiHyVE_iYJ1K z2==JdBEsl6U4~9#p{F`DOr$QW^fcD|rd~^(wAMJg{QAyf?{*U^slL-Yk$_ZA`wC3| zq;|T7Kh5ZnQJ+NU+i`o2s=7xg!^A_G=sj?_0l3BmR10$C(ghICK*BT9<9_%X>eS1T zsX|I;;wWYu)6V*3@%SzOmggF4Z|vZ-br#J|T@6_j635HzNhN+s7deri*LnRef-=Wa+|tJng*(FeuqGGMvjvWckRP|y{Em(Y2yOZ)7B@!5ohxm4KdM&VaI z2qzOx*E7bs6Wbn(wQB}Cy0z{|$~oIUdUVdZW_rk6D^M9tawvL8Nk%^8<>m3gZ(;1( zZWjlJLuvd~abG5{zM?(^>v-rb6;N2w14IEDZu?bJ<{T5nntgM%cB++MBeP9SkOgm# z5KExZObC?X;e{0pZ{GNw?M_a*-<{?NTEOltIEZMKi`Rhcq%e?<&E`-{R90A;fj|y+vgwbps_d1m=Gu|cOuxFa~(i!`Q5`Q>rSNnEYM7e7m z$;Uq2)b4WXo>o_qfNr(sH44PLJtSU%Qm6^fa-{OaYvty}4 z+v*sL%5c`m>A-mglyHg2~% zX^ztRfuVMwSNrok1*Z%4OQzuY^i6i-Ob&Lv_GfW)stPcH`s+<9skpKJF+lJKY`N5o zWeoBZj?C<8(4vuEehGe!wBAmjd9~8~9mH_ImB;e2R#@x?TVj6r50nxUMVslH#JiNe z1(9AGFop4#FoUg4najth^_OZFmGy<#&@wXbeY?e7JU@wlV;5H8o~x&=p%1WKRe24yuVbr8DfCrgj$(AReiGQ zFgmqa=6x?sX1rc8|Mas#bX|w^)(7w$iFcY7(&DO+l9A=zY?3DPY;Y<2iR#%D^G(3X zPR9Cx{Cu_RZ0D9d7uL2ye!3nb4bAqF#7qE?Y{>lFw`#ib|5BiI+>RqR#;5vPA$`Xz zyLPmtD&GIvYP6}JQnsx zTmI_r5mi*?B)hRykj#x`!^kV(RHW8D{Nyk_%xB#yx^6Zd5V8v-a3>w#U%eXv$x`2y z62*DyxF`0`!hPh27i!qfm$Og+*SG=DZp6Hfg&Q)502@)e>`&A^Fwnt-c7C`xB^7tyKYqMpW$xJF&WCTtZM}Rm z`kY8~@vP&QcN8wj$!RV)q*N*9(`WPVcQ;H%AZ05v9lMhvuzN*jVv`Z#EGE61=7s>M z_v38NprO9N)fx^Ez!i5lud~xIP*Eu2}a7} z;={yNqs1_%77ua*6$`erIw=83s`)jUv9rz2_^IH+n7vS{HbEI zotPY#Egy%E`N~OCB?l;*{Lx1VGFy&s2EB&cC9==6fRxdm@M6vm(`nIz69Lc_G9+_a zS;l(;1j4iDJe+1LfPw*#W06x(WN2Ok2$w7|G4U4A6g;HSfD2^;jwL`OK5%j!!MGpY zD}4bFGBh(8)<3Bg7>Yy<)mQh1;$M$O6n7nFYWu zv)mm)hpF4cL^^NmD8yKn!NS&QQSA(zUY;7$t4IN|2wnH>w=VSww-+Sl1j}e$6E^Ww zImh$7VQ*OWX`XKmEH5lt=)kNxSLWQveN#}m?Fo(w>wCyAJYQ}Q{|b#{?+Fop597Vp4hVXEy#R&)R$yY&gd!-;kuT(bX`z2rT0~j=8%S}Qx5&w!NDNFeRY=UcM-4} zNf%rwlg0CHU|(wym}yINM!g81bXl#HA#IX|A(&6UX)2B5E2$N^sxBq~Dq~bYkwhN| zW~YaX=?{k$Q1(4gdGk(-ng#FcOY{mp)lYL?K~XAHk%z%5O-2!> zDot?Q&ZjnaJywFKXAGWe9)A1st$$bd1ikZO97*9Kv3q`ZV9aJ5Q$wB=U8$m`PM@JS zC)Xz_pez*7{+~Np-7XgzrLf{W6-&(-m99D64Jn#>8m3g2Ym}Kw(9dvQjoxJW=Tp;+jqDc3qZTW>Fw@xZw+vhnTnJ-P@oUqZ}>$&hx9BWx8`>&UYfLOfZ-@HUKXy;DAET~I?!>Dh^_3Hg#eQ^hQ6S4 z_$7E+Iqr@#avf|7TKidc{&Wy0fq9)48?Sh^J%$j?rY_2>`L%htYcRd=A=QsFZp>zZ zx~wWW4fgyT{GR}aTJ^>|QAoEvXI+oJNKM(4ijzLA^v8>dIBCP_@_e80qR&9216Jkg zdbi{Xn4yiM;|7o)-JffBf)V8ud@9JMI_wLhi1l=W^0dugE}UTgTE3 z@eIuhcCZPtd++?A&%a#Wzy(O+>u-)s9HEi#m24c;5i=bO_g*O{NRC`fpU@&u zMw|-1i8gFpy5X28Qg4GqF{)bdM|1wf{Ls64ycV9UW@o7}uTkm|YavLAJHU0Gd5co_ zF4d0{mcLVM5M2q1mcKw6Cs`j(cureeU-X5N6zya*TH>m+HOn=P9Y(w?)RN|(L(Tde z)?E@jn?xvgvYa=kefOBidHxHn4Q8OegEPu;q~zMGCC{$UbB>_zl{a(z2$?YsNwlpP{209r}hwNCts+s|`gd-Ee|pEm09Z=A^6yx)X< z$*g763f<<5S z@=z!PmG!N2XT*j6!nM0)`2716xJyKJ{NEMxS&ySyGv<1+j#AUOJG@$M9YUK&O4vRg zM~Q2`i(@ZV1WllY0g?5wYl4=B7nol3$=An= zAHe9D-OZ)V9VUjwicI7@TOL0&f zd4U;7wVbq+^gesIWl!gGl4YKAumwA0z`=>i0;Zmv3stg{+D*=|&|UXQ4xUh^!{KzG zb6~Py3Z+r)6qfc8lXXD+qXoD)j1WTNPUmk(j|jj_y|LCzzo|Q{HEs~J(^Pgo{fgZu zn{VTd&`F;lJVY`YL`*Du>48E_e8~b6pC}ct>k~U^7#6|P zex|Ip6{QJ=NzLj}vw2O}I3}~VXoRJ-(xtaf;v_i{2}>O34w??JsNwBkfy>=Z-2`Cy zVLqp}{rX0Ku}}vi{9WR+Xc7)~(3m*xaTZd7=>u{mYmybdv}CAp8|Sr$$&x z(aoh>~`PmE^E3yuVHj2M? z!FRjwI!76ofehp=JH8hbDhRN;Kxp?5BjN;PK#C26eSIN-AggiXk#but^9LymmoM7) z7hrfiP{IUgFJgo=@VyH_)3^9y3aB&;01SJ-6l0^`yd@)PJ+#TcE{VtC-2-a^08kny zKn$=uU2cd9+Z-yf(;O$cfz7F8^u;rl*riexsZ|97vO1{qeMsN%0|s2_2Y8p&pahWP0<}fC<6R)(D%0x-wuS5iteS7f@Qa>sy9c6G;Qmq{ z(6@!@5)kvd#^j{A=8tjEt5uQ%T7D>?Mj+;~4+Lu5td?^%u6c{V4je+^O|9CdT&aT} z>md^&fQC&{R<`&Aw$&bl13-sttsS~N1Bz|i@t?xT8~urG03ZzLTh9PA^_N#yx-8q0 zm23#n-@KCP*JbSfS~H6H9}ndr<8+TWKq3Ob?g-$CfCqgD2$YS5O=>x^83tNb#J3Nn z5Ll-0Jkoy6Dz7M3cD*e!()RIUC3otV{hTEW9`#CKqH>WRax*XtphCqAu=5*$ur&(| zzwZ$2?(gkgfei_60%TW))nb!$3Rl@o){>YZQpN zti1-3Ial}h2bNlVw`Z!%GRGSMMzY#sR%x39u*$P2rl|^JOn^*yiKirx85a?O2~gX} zfI2(ZF7@w8QBZ{S)DAtJ_kEYnbcek@W89`0qCX43DgYO60NL=bIDkYtdk86=L#VMp zkzVXqR@bjhAThbUg$=D2n~mq=rt&&jt_A+7gRj}z0hI;M%Vp%|(TZH2=(zZ^*UE6)VJch_K0Rtx}gng6u$tSs?JU~9@P=Xn5HAS6B>A3*c{ z$()$l+S-8FW_tlpTh%*Jv#=;M^8J}OaAo-LYT>zD>uS}c7GTFDXvAFKJ3{aQZPg)A z2vEYt#&$lRHU>WIrWinDEBfG16a#=<X*Zj%tNJ7M1;(R5t871# z3DjNTx0{0N#k@eN8<0L305IPj@C-m9!+NRtk!91>hFG}5TJOsK{`}bMe+^(KIIVlG zt1BQU-7^V~UM;5nKJ5Ra>Z;?a+O{qTiU@*$AdPfLccXM8-Cfe%5=wV>NlQp~H)Ck)myZ-* z60`9Oz$H9-VlX``j@+=o5t^)a2TQvCGq9i_t#xz0g1%r3N>1lp>_-{{q}Q$grq=E)mi zdV3xsLc&OxX)4d7*}j0MeDbKgd92!b+$9rSg)3E#A!v*BEbr_j$E z*AK8Hb4)eGt-s_%7dG4f)}-VHn8%$4MMjp%uQ)fQgGmC2*T;Ehj@U`K2HItjFz*dFHaEgX%waGB=Rn4NVaBi;m{*duzdBneFRlK5j?pkSK zYz_FdWwM%teU1d-abqYEX*5AYGyftSf>b z7`abVki0Bx_7iiO{JUU0=;ub(K(1II3c>b|%4^zxSuB`CaM|(21%t~Km>!yW=*P`0 z-1vX`Bs{JMRb>i3V2WZ&Mz4WoNYO2U6hO1qvd~#XK3cvSNOCs+TZr|ac~KII@6v=7 z78OB%_3Gn}BtU$E!a_>U?*I9C;0NVGl~Fi7kipiJ=F;E%r;O{rSBrtGKDe>0rB)dG4Sff})<&a<}bi85EP>Bi-a0L5ak3=9mV4Vx*? z%68IT;;}DpZ1jK#f%jts6b`}u%9lwMEk3bV$jL=$2k!|vo6?1VJ)Gv2^CN=}_YC>F zlivSEI$90Lzv2Cbrr?N(e89YKSR1mZ;(^PH9uA?AbWy7A&J)JB<6;b`RJwak-yT0e=tUxH}yU_T?Gir4yU*zYwLhirfXm zi`wda6sr5E?OAqilCoN}Zvc0KskT|l0E3vcKo+>aBn5&2POQ}7$?w6Dz0Uibc%4A# z8JY=IodOis4*Av*kl~#4ywQzQzXx>{M*!G%eAjJ;jQ{>- z=^-X2rV~}*_Pv)Ee}H}zP*s9JB?Sm{pjT3E8CO(O3(CyYt?`HkP*p65GviVVfOc93 zAHUQw_4+5rIMA;$T>{zAC4j`ZfO}L7B(d)?o2#V*R1PI8YjvT}-)XB2VEmwDQ6F&eu5NBX&(IBcdr+vE1Ef@1 zo@WzIrNxB}TJ-!6w+>$SSEhiy2g`F63@BeD6bl)f@!Mhyq0Anb!4k*2Sf z)5p=d?N;>t0R+KcBkTuh6?jZa|5VMczpw>rkyZV~M#rtMJqED6LQHOMZm_l>TC5s7 zIRU``e1Aa-SQR1)N-vvDT) ziOm8F2FN+iR3gFTH#9VW?Q)yO9CUM2$G*jkek=Ep*aRqs8A&>~lLEuv&BmhNO#|xZ za;ojVXS%}B?02?EOZ<*~!*r7i1BlhRU!UU^0MGinQ~Dcj)q{rMl^vEDyOD1nd|kn+ zn`!g*uBo+|EWz7U4J8KX8aicqm-^5N@uk zXadjFhhA7p>#?WrUa*LJy?YsmG+iDuJ|qwCXi-iju3HroW@ycs(7j#FnN3*Ds$}d` zB@iFKvseFucrV<@GV&=}HX-wW{ICMT56wCgAbq^NxpDaOi+K5V9`}(*Hm|{gG}y^% z2d0=yKB}6)dI1nOv&+6#b8|CTnFe6YkB{pt;Sfd+HKw?C>k@8^F;M5D^i9C(;XIg077d8^vQGJ-luCJ_C}gw+n@OpZ!m+{mu<% z-~O;3gC5*h!fL{-Or#{w89AIvd|Y0^S=Yo=Pkt%Xgx62Utz^dFvkq;qf3*dRfEQ(!BYm)$!Y8LsW3)JI-Xa>nti(9sS>x5kuBVgE! zF?4T2zx(#TI~IjEP(sNE;N8JIvKvnl@wr!zJ117g1f%-Y*VnttxdP7`otip$dv#J= z<7sV8Kc(d$(=u@Yg^F2P(!RH|i3PIr3C*jGt(huHkMmt>7i~b$Z|9+a2t@VvLX*;Q zJIKax*xtU@=gH?ovuCfmVPe^k{Rl_^!%5IMUkM~) z*6)M|iAV|+O~Y%oY?Gq_o6hoTrWO8;?qp+AC}lsHXVjMyHSW;W{NMarR=sS~wh9x* zox4k}{cmE+{PShcltSxpLcRa-2Z=c#R!0Cq*2z&Hk!t-g*ieWAiW@ig9)#P`67@B{ zQ)GaAT(mv#4X3c>fOPIm$II1~Q`hUtxTfx4G!F@2Da99@?JUtvbuL|~I7}e$JS$rp zka0Ki>K-I|FFl{`Xm(Dg8C(0CdLQk&2A=BegDH_l?f0^QW4q7Cghcy}wj^ynJJy+< zJ_lG;1AJeX7Knl%sF_Fi?nH#QGOi0m-_!3B!fh-!W|w$nKh0eSY14~MB1t&vGGVdrl-wqN~??wqkX+>>(n>SoP0 zCmZ_(gq<3!1#(~BB`}%NC0-#$Aq1rajIySuKBxp;nbA*1^V$ z58Vk#nw{aKe8KTHl(7l=ebGC;^VC66huFOWI8rkCgW{PO1AjQuliYhwJ{*&U+%OPG znQo-KcHXazb(@YLo%5gDdsY?i6ZKqFCXBMygV3xvp@N${Jq-K6Gs3efQDQ0l0^x@jh|Y-^=i^OzOK%%tgeB_s!v@*pG*hR^kBDJ@d<3UGx) zRd%JWs%5r+RmR!nvFuxMTF8FWOo7fDHrP@NF?;ME_EEguNx7$bk$kZ(3Vq#C=@F@Lm4;Ivm`muQ8F^OM#js~k% zew_-#vEFElN$2F9^3zX!$2M_xGJGeAK(jRXyay4L(#$)#y_$o?7BgdMG&%W$xyiG_ z9S#;~_(u1n-88LBuQ|F-Dwbzz;9|nP!(S60u_FG=%*G_D){astMu)hl+f=n? zwjoNAi$AF!145xMplz_i#Ir>-EwL0ekpD&(8jnWq#pXa3jF@8*vq@WVX9lUrGw$%A zj-UEV#|&n0bejGlS4^aJ>1WKvXY4B_Hz7&Ps3r?cB-G3IRTf(hzl8jBwBMgY4^CEU zh0GQ2sEd+$(!w&wO{^TbdJGtD2PX{z!tRpmX8`_jep z7M6EgGOOI}y-tO@{3`7@u?!#DB34G;>VEUt-Lr7@zF|6s)wnQOuP0Vx!0+9+M8UDZ zs_ePKV72IR^31OH_{1?wxYRq!k%pX%F7$>7Vn^s|L!9|w|0MF1E;`z7kHT#N3niU) zS-L~+*DCjQxN8)#Hs2g4JDu^Kw`}JO%jIRDJ@lt-V>N9><__gZn*Zh|{b_3U1>*?1OUHAg5J=?LuTMa9)!z40w70vwJMe~poC6im_pvYP z8rC9saG6$Mmw7X(4%rm*XAaZ^2NWrqK%TD zJq(70lQ~BGR*IxhY*gIU8b@DZ?R%oSsq}|14`afdueYCU1}JU3af2Pu)e^V5?S}lE zmN|R*uw>MtFvqBQw#vvEJ$}5LdLtz<|7tJ>&DeuaNdZTHERn@Rjq-Mgu4Ch^r#6Yh zn}U@gX@heMCQDcPl5tzT$?vW@TgF*^GAg%26r3CFwfxaD-r9kD76eF(u5sU!iH(bk zveVzKE>;C?JsOWyC$|xPRel&riG#;6^O(518+|B$P1Sy66^`woz33HOy@ZF=7s{0t zq7R=tX$`ubFy7SL5!Oam42qzh9sf7~jSd}(Pd)t}huZ2%L>nLV^I_XlW$#l@`kI$m zUF{XVMq6A>YKb(VNe^_~<@1dLYVWPHxIb$8?3q_ke;4Gzot>lV>q`jt%yAo0^a2!( zLcrk5T4u#|xDkI9zwCENqUCKh(2|THS|YxF{od{592g42v+$LXQY&JCRI6gu!j8z@cf|0i^oC_d)R3=x9brj5w8VND3Yuxo z*iEi;<;4B2$bmNAfvxf%u;WZV129aF5%cdxr=4CD8S_s=NldOD9o8M%Sv-*tnDi$gBeo;Q*Q`DEi|^(?vbyV-Gvi-eBaVG6cStE%acz`kNNLNBX^ z7%eHTMO0LJxiM;n@a3*_byBfJHZV45Ib5R{feQlJI}Yue+g}<&FIcspk&B<$a9$3ZaOsMe-Q{x;dL9*|&;O4Bw zS_lUHrHP5*uUxk)=Ct3G=IYwW8I{r^j8ryFMJ1P)zlBr~R_XKT{CJM|d|RVhPL{9x zV|V<>rks{faCxA?Aj-l9UdMvINqe}}MQJv1^=(K13!Lh;xypXix0b)rCwjp|Z@I|F z(D?g!^YnXg=1(Wg!@UIW^7X205mTg}7p>7>B`=DfPD#k7*_H$3|8-{C*V|1k4{n?W5fQT%j*(Gb)~uQey#Fxuy$FhB zHW`yZhjiKh(l$ouA+d9kp^8iYa@m0*@hi%QjRRBj4R!B*r%;v4*J(%1rMsMYBagZi z9k&h4O-LpL?6Dtt;m2+npoC--Yz5#E5ICHI6ySiqxp!_Z6+mRHlBlTASu^3%A9{H< z&nplaSPE5T6bPdne#)~(2Bzm0l8RGT`KRI+Ky6HA;rO*UZdO!T>4FF25%QjGG3y_( z!O3!Nkf0XfGZzhP-~LEy=?F$r-GBO&n?>B6G&pV#XBvgaHvL&_8D=qc0oB$rJr9F~ z6#M|oxsQvoEL-*m9{f0Dt6LA4>pl7S5so9dfo`vKd)QYlUO*`!l01qS^(ng7 z?K^(=8#)Eg0tYAq4MXK};DdeknR2zov!t6>?sx3`Ra{#p55aiPlx?`3h`zy4U2^-^ zczg~f;E9Q#%UUk3X}-*S;apTgB#+rg?X-4qAouw*Z?S5b2`GhRwU`WhWa2<Ey~DY=v>c7VoY=AGnVmo` zurD`ddp`=zEv{GA7PC}xdN#szhTV5e_AZ!#vXXfs!0L|Kq)fN>tF?SsCReBg+GG*Z z-)NYbu%tW8FMOiROinl4Pl$V^=7Vww`0E)pt5UE}O*KdJ663=&KM!S%{B|@$`uP6C z7r7o%pop$R<=>B8&wP4&^Q%j(r%(5E^FEcYh4Y0MJr%A3O=fI?=4dV3rPfBI_Z$nS zEat~8Ge?5uHJO`+{mmnhe*Xmc#mUraw&Ll@W&~262}Tt-#+q#7Pz{1Dw|GL3D}?q4 zYH4XT>^yEr+8*v~=B+tUc@KR88XJXKRXV%4&#h{C->8%sr_3fX!tPJXHy>Z2@0$-$ z8`Gze=KO9@yEvZE4FjhS{O62-Cvu%R4zC^VP5CQ4As3u>rMQFN)XmOPugxsZPlpa` zU)@APl32>Gn^GD@(K4|`=A#{B7S%tDrYKn=D5x`f5g|O(Ca4BbJJJ2uSzkdrxAyid+z7v`H|zfIT4Vc)`sP@|VQyxl(e>jgC+tqYf{~WPtTn4h zmb+SqG9KpTl`Ukd8ei1O@@Q$QgFZ;!08R1U5AfHo#;tYX1)P;8Sb{_;vVR(;R1whc z)ZYGngJrZo{IkF1UFmZeq%2f9eq9x=7p+UfgsL3R&WrWJQkeS;iEj%Ldmi>(mf)|I zO$AP1dgb07HHz2}UTFtkzT=iPvjsJhy!V%DkLwjs#P-m1msKcqYFxkHc<42AQh9N# z8q_iBcAHsrfw^$kXg1z{jsNMm!KWXg$vkbufyXo*9AO=IGP(H;6+blIkG2frOf)1I zt9J$kKi8Wf#IrU<84)aJcRRrOdzD2Fm}o~0O5bPH(0<-9#%lEl!ZQfKn64}&jmcl% z*bo6|2hbF#b_(HUaD~)U3Npf#GGH-YuO!pnyd}`g2hoqGmSI%w;sQP)FFpg(xeg7? ziMg>j99P!j0S@2+v#LcNI}F!6fxP|s*7X@g`KfE_w@`eFdpm-2!>y9E*pUGwj%`fHcQL`|htFPE+0>i zHK6SNBrf>hsc!iGS7Cd2*PP&Z=G3U6IQqM({HWTwfX9uwQST^|&$mTlWbDzxQ~vx{ zCUlyDH*FL#%?qL<3^u2{QElDH?lP-;E^un+*Eg1n(O>xHf(Q3{jcS*n2Vw4b$?X9p`L8)s6)Z z7d?kH5lezBEc^m<5<&*Hn9|fcS8J@lhfL*$6QFNo>?xPZPM5+O1$f9KPz=*3dLy05 zpZ-S2HR}rrdUVmFFs}Lbc#v(@bSz&czO-z_b2-4Ybv?E1oZ7|Bcwi1H`KZz4b}8Kx zM)^B7lDtVg&Tui4{rAZn4YdEi_CN9I|LYODUTG^q$;a*Z=RK%2RtzMz7Xd}(*`TCM zh9KY{u2Y;TGauy}{a?9-_nlMg!~IP@ipYA%7|^VMUk2x+{IAVu?leH~%hhNBbyM~K zH4~xjF`<@#`@uxpWMofUb(HNZ&M%VKU^YI19A4fn-cpS9UjbA$iN5)`eNDVhcaN1(B zi}z2DvDnt*Wn2E&GQqd#UPa^4oNPiu@{Ns+==Ahqz-0j)%LYL5$eEdA*sW$^05^q* zMXx0eieK+UbRvKl;}BrxZyvbp*Tol*oG6&|U7z5brPg_+< zt}8x^&?dOk*8Z*^len+Oa1n5m5M}t^T@wpwVhP!tK(F0ZZ%}1h*&15*3kZG(wKL-4 zl&qP%fqV-nv_MOdGD%6NsK!N+)7@{^h{wz;_pHgM`z{yma+gIe_lU1LDM6Pm}W=S9%1Y;|LAwgwam)uLogGITKlX@lkl9)X(Ji{JATKhm5) z-pl6>A1y?RNc39r@(__$l7Z=7DJ!-*k&@BCmUG3I1c%R*;2d2@ya9-Q+%KPtA`^A& zo{8KLNE!b2LlZ`cAp3l&hOQumOr#top>X@W6Tu&Y-xVGMD__yxmU=29eh8mnOWk`3 z9?Mh1zzVY>E+`}{QHSv|USL>>v36kU`agSppI%=@iz&(QYvy zz&JYMS~4>N(xAt7O+B%Rb%09(QkK<&16@?&Ltj5t<&fK!EwInhhF_@)Eg(kW89i0af z9d-l~F`6dfyx5}+mD4+DPrTAQc~(ms(t9+D95dpSc2x0-`QED5a-lO}-3@t~FV@V4 zn|CK|$Mt^eHSO3`rST3Hdo!a?i$i_|ZIye4Ykfr_7uT>zbWIPJj4$!Omdd^27j)^wtVDQ*i4Rok_tdujJOdU3%kV)|aEcHT;m9#$& znN7tjmXi56F`UhE?9Ot12lsOs4O5fx)28wi7#k!s#ojSeD>gGs8PQgOV7UfQ zbS!}TN(T(h;9eU=*HR!2YDccBnlX2M7;vXVgZL@c{%g^Q$A14Uys4_|$!2F~_vkP| zUkwM0K5%qL4lTQC#`J%WH+YpRSdhI@ zz#ANuf%SH?Zh)ccsDNTN*#CqaB{{5dmJ0Q;Biqr(u(QJXK zGXY(!F0Zej90Hx>$zy*SuRHfgX}~u#bi%XQv99>un7^--_;`9ed1O_84R$5Vt`?h}Vq^MZ zmLt3Q5b~g_*ABAi#NV__qE96U1tS)5CpZidOG~DS{p@2&ZmGE4r#e5QPRiaV`4+QM z_OIBOA{ib_xQtV44hH;47#dHe<2~CM-39F~XD|70tb>V5oUEi6(T-0IR_P8{n7Gpp z=fq-Nxf2o}uvfOY41y`F<3gXh1fcVC#vm43E)#U;w)Ge;FsA?fu;ParZq$7cQx4~v zTH)+cNkx%%*s|Dw$Dk4$uF463J+9)cafY@h4R~WvFIKT>)ymQH8XGQIgo>h_WV&&y3L3iM#}bO zhJi9RdL!Snn|6`{KI&NG8SGjw+UDH&@BW?+k=c@Hvg(Yk0BC0ldz`1l(Ea#8$&z2Z zKyGfFN>azyq-0LYGGiSjI*(QM1VKCr@BX*T4QhfZ-&{&qtkB-cE{S}0^8P;RH9iI)}o0IM~sC_LxB!otsA(FX8Qt}t+ z--}KD+HiOqJY#mfYw=O$76)hyMqdwjEGp-4@zIZi!1O2w06o>7wv$HkDir&PdDa6> z9pGk7YXTdNf%*jmW!ff^cmC@{q)8KX8F0yc0b za<$K3cz=BN=7oZ7-#E$EigQ%PCfQq>+?9QgK4$T|UO^?byYp`jdlKYbuRjQL@X1mQ zN*9z<8E7~bxsSQ8b!H@dX_ABgKwc))#~$N?{I-=H)eCp+x_R1FbIZl_b*WD%?+Wb4 zsGd!yxlaNtSSib26h}&5j|RQpY>d<{_3oP!?g6vhU^aySNN;PH~U?cou@%IQ7<} z_zVw-kovEK@?@J^S{}8x3rO3q2j}{o7&ea$NOmE3pH`Q;L&V|inz>TY=7{umVwwg} zJXAwMbB}zdc`e^b?Kk|);GS`=JP5!xd0Fjxk733Bg)3oW&iqF2ZG5*I%BnSL$LRY9 zeaAcoW6{|KVZg1O3Eblx@Ipqvp$7kP?%_o#i}pb~f@d}H_jitg(tX<~j^~{(Dip2f zXW+*oq3GstdX-okP>;3qbKK(fQA<%ng$;HEL<@FF^c|-hn|ZND`N2RtuMweqI&Y@< zCdGA98wr0`(TR?w&&_8c&x0s;dl9c%09Ui7X$*s^ACg2=iz%2{Z--YN`oaDqN+tr_ zspIqLgD>``Q8f|&ctwMj39=i}Q?uQ9JgIRYKOeJ8w>LERM)PX@3-ccTt4*0|qYn%> zL6yEsy6*b*sb|bstlPsFI#N2jWna_iNg`CIpo+>GKC9ykJSt)TP@Pr%_x1`$EExg` z*S7ahZv0scbhxd3JO{D)IFs7j-+x62H`>%_GUZx!wV}uf48)jciK73~;TM@P+$ilL z!nQ1%D)R~Q{)xvkjH^UPDrsYlwhA&#a%=n@Qx<1e&W5(HQ3tvu-xKzW*PhHH&Yh9vQ z`Qyy+q~glGQVRAnI>NLJ5Ylq*jaf-UX2}>?V=BDGJ5{pv71w-mnrgehcCwlTWC+OG z#@;7>fImkjW8{qSJ4IS^jy}3D3&VaTtq0K)G&G5Iwq6oMFk_HAEZKQ8@^k42S&pzW zIYdGa@=>&#j>Js)35J0nAJq2n6FPf>B{j!+O%)CwYf^hgmT-jbdkvKt2k5ollPp82 zx{4iNM8Do2Ct8Zu2!-ARQbymQ^Whm)C^rrH{OKK)_0btlU%vQ7=mzJ+7)n1#agsjl zbLv9=N-bq=!B_$#jX!K(Ii<;({`QL&2AZV9UV8X|2))kE)03%&InmLBkkXyyk0fhT z@&*U!(4VraEg2TnjE=a4A{9VuW_bE5yB3c-!7s+CX-wT#S6&k#kmZ`8kW-S3qPUs= z-Q2@_^f6H}blhF8NYcdD+86OP4iX!+ZWB``8wX~Tg(tnt_MfOazGy#3Mlm(Im9#8? zV49fz_KYUmrEzaCCC32QE;2;Xb0my;`B=!IR}qENHZu636S5?T=*GFcr&oAj%>K^z zH5k9m=XCYi4;uP*E7JwtkXbs;wCFZX854c3iH{wg&uQ8+RqQiQcN>GuM4;TP?zF*M zn2W&{E_6>ywcjOk75(u7OPiUlb}F zdrp|CblMnF>rBDK?nq(QW2Je;S0DC*Kahr-GM=a^G_20leMAbPM?&P85w|-!q1^1v zR$6#GqF7k_q;D1xy5!qcP+_Sm0&R)$@S?W1WDs-T-o+WHR&wdNcwx#tm>)sLJMADN zs~MxSO1RF|ismbXh`hVX1@)F8F_&BjpfFr6-R#G2Q1lxsTF z(R!^|(;BPfyi}TvJoN_3&+r71knwBsPP)(FNrU<=VY>RMZ!``61C1*~!i$=(H_e8_ z!Xyar?z6|82cpXJ3L$Jiwc>bB~Yl`-)b6o4=v6<@CqN;XP~maq>O3~b;Lp9Xq?AjH$GiQ# z<8y(y5bqdW*(;CmZjT$hi{jdzA>b0d zFT^*5YRcjGTBn-lzMe=t8NtqZU`dtQ*DoQQT1vXM`(5nKZ+x0;-|ESSf*X8+!kqEI z3Hiyu7TCa*J=izE?{?^iaZKckh2IcdGRPW)O zDK>RPwzI&km3-3%9*-`zHFAgyYc0VD%W>oZTTCW_^(j$RWBtAYbbb7T;Tagbj0?X_ z?koUo34XyFahv@iyVvO-bGpuTu*bG2_{wnBM zoei%gvb(vz-C>+Q_EYe`frDljU(+IK!UMYk@F3ofzkUuvIF5Hy!@H;NH!|yHbwUGG zu??-gr^Ro{`cC*CTuYg5YYWLsCy)k0w9WB{206mM@){nj28Qz!qvA1G-B12}#~8*t z_rg$m`r}&O0(mV%tBdOINv`5>raMz?P?vjCwBL~z*|G}BvWG}u_NARb3c^0fD~3-r zIfUKb@~+KUNre}XJi~!_E2Og*uX4WQks}v?MnJK-L=F~wE%I@F_doYfYmT$e-K(wg ztM=cO=PF$E#yIJ?mQitjqHSqwvs=pKvr0CVW7=F?TB^6P>%TA$UUSIBX0dMT$G$!_ zH?)a>R_UD(1>$*9kSF4aHDu~P4v*L{ERS6-`ORXe#c_IW=Z&+nF}{v|7$Tna&?Qud z6spu3o$2uF^4zt5ZJ6cwW!F!E{i~)?NL$E=odo7QwC>I=is>{mHQeUpc<{kmssAqf z_JH6_$?Kkd?P@Ln&!Nt3mPG)nxi)t!YdfHn1K9(gnWvTQ`1m9|jo@8a0SWJ(>fXu6 zevhi&B?1fkwxVsGu6yCN*6$6yBk0iGxv71YfP1$Bs0ii~H4Qg3-aD~q#xx2PP;C@7 zL$$X-DrKK{g7VGug4a?P^G<_~Biwrrb?uAke!f_5oA|qH#FVvnJdUU&Ft!Ch$O?^V zz1?ZyLlK9x4@mC4Sj-A>j6+dJw+WDMoHg_s7^pIl>v8o`-dG~A5Z5Q@0ru1Q5 ztQPv}3adbW*gB239Lbmf&3~Aug24B-e(1iZc;TY)qIOl6xwa2t@I*SvQwEc0?WyGf zEh&oumV@XseKV_GZd-JRjPj^z-iB@l21xwNO~M>(fg$N$XGmH4LczkaMNb*qvQ_VF zLxAD0x;pe_ni^ax_>Zo0SmU?4gJ!F6P?83%0HqIPY(U&(?uJE>Su$$kURH{ms zdaBzvT#TojcVLELA`l9lt@C>Y`cLl@Y{flj8nqksLZln^Og&7=ao|jk3J~}%s5CUc zTdosUwH4?{W0CBKw^uXd2$!Wxt`5i;o(0H;rSe6*^2VU3@{dCE-O}iH-OW1?ny7#D z07GiA!YbpmCNGiNEt&QAaX$#_wn>h>e@fGU#j>a#d{U||jr-}S84}oyHpd6->ihE4 z7zK-$35IJbBJLfGeo{k48)j79?kWA?AzKl+Tof%dOhVIJLR)MkvWWX&zt8tJ(D{;q~Y;BD?%%AYq7%S1C*r z>nCMcLj+9*Y^einkt$$Y(=ou{7!74#b4f4YlL5SZ2z|9K%G+y`cP6ojgTocKW(ukb zDh12A+b18>Z{)*Uc_x>=lv@svl?yLhucgyy9-%o@$!S_Ozu{swRh<5`j zhswO!1IbB(7~%)ePf)GCQ8z*@1RU%6V3Cg@TbKy{yUr>8DbALf-)|t`sE^x zjCz4Ylu$~k&Yb@R%}}>>-6%uu`nkz<0Q_O|@L0rIzSDEKul8y!ONbm(UEQU3eP~N} zh!ow^!EU$my-OIIZd9LL8In~Im|6{ktz?K#o2UaXE_kwRW*TLt)D8y+i3?sqa#I(v zZcCk`U0%rH8E-~0TfL$tA8DDh>e+sBE0ys2y|7>MmL~ICT6iFD<9KPJqpFvfE^SH! z5eq!NZ5T#cs2|Ru@%s7kH&eoDr}NvuQhDOMQdJA_=Uz6`6>kK^xkPT%>DKoS$MG4N zBZBN$u&+L`f~GG_G}-jAUDx_&E>(1Oe+bqG^fsD>V@9pkU)SdHxvd9IeXCE|_pZm< z(^6G#E|Bq3p>5!*fANKeXgSVOfFt<^A6|q_6W{A^Er7q$!HRWO>}eZ>oXPEt^P6hc zjaXA$|E90*Qaw&!3R*vem33)W72Qx{E>dbwvpD==qWzvhNlw3za4wB-9#-Mks%U`0 z0sqntRvF(Fk7ZAW{#fh%Z#eg=9@NBlW!s(&-+o9H_43s>W(pZM&{hms*z!)tb8TY$@H*f_kDH zOu4l!t=vx~R4f|z+$$G4*qHa2Lz+u#^Bgs`(htZmYv$so z*se!D#*bduH54@_j%YtT1~hTcJka?li1YrFriagXc0_JVtn8oV2yARnvG~^R#Clht z%6{2Ffcs9jP`6ifc+vA3WKl0=o~d+f~(>>Yce?z2sn&IY~iD#2r`4Uz=$6>D<0EuR>N8xF*|wd%8T= z-1?d3cQH4!=NWBwdvL@?@y?S{FFr{DC|36`j!BlvG}-dvr*|c9dh0L5>9&K8_B~$l zhx$n29pJQQ=LS1EvbTne{GO5hBH2oSW38u?;yI5yQZ2(H;c3byr5kKGbIo*XrNirG zyy|#9!NI7-&{9h=R}ijO!<4?EnR93XZx*`hy01xDTx52&tpl}yd`r17!8|aV+HQ7` z)D`eWTE=czfu9rTW#Og{YA80raF6_QW%q>1`+IKtgx!Q-s*=8kMx3A^=3efJm4VE@ zNZ+T7Ulp2aN1-XFML5{j?^l%NIq@87_P@+3^>gWlv>eXL$i`D%%oYr!6<|QqTB8#4 z^F}RJa5tUH4W{c@8mD$P4m?`+vJ{J4mvrxR9N}ItC@B{y7|$9M9i``fb#6N5mgLSW zW@FBafwX1MHkV1&x(>o?$ss>zyW=M6Mh!SrTV>!OdVt~lygW;7FPj(bTm&cJ zP14TvBdGXkWaFPD^Vjb$m(5Dlu_7BR*=|B$x?n)bijejl;`5*D?7A^rYcAJHY2g`s6K=ERGD71&MxBJ-ZvEL20R z5>xkI9?h*>82c81ZFKQ*qoGGB)cBY4OnKrp4c8dIn8V?Slv%@vm1jkN7youl^i2@?g^_(PETV<{HG#%$kPx_ zUYFKzp+MD!`TsTt;wTpdfzL7?7nP;-O*2qi&DtowT~nuxVk> zpz-|hg7}QoG}11X^Y^nvl@;j6h9XW=RqrQHMyEZ>vupR<%hV^zVw2Cw%}`HCYJDf{ zN;9xvMft94SmdRT&!javQkK-z?yjv17U7bK@}fMwU%{4+w4gYR z5po@+ugD@{c~I1v*Hq-iU8JZwF-&y+%bEE6j;1FVn?CKEn9eaMyB%$k=ah4iGCeDi znHFq%_3^m*=o9ZzFE_eLt4z^wH|w4ep>&UmY+%geuS*QKGizg=XZ=3onTc5?VF}#Q zB3w;vR>x5DNz>1d>lP;)-E&}S@_#gnxe}pp?pjSk>BD{R6Wv+6mmJ~1<9^19@6|1U zH?VTGrtbMGAlZi0c=$EeXWW5bl=$gqqJ8v^(wcpp!)DVmjC(WFQg`GQ@YTHsvECKb z3lZR-=~~uNXFIhNV)3U2stYPSWS^w+t_6E{S8)CL{c$(-P5E^j`w$7nSc3MZOBXEc zeQwJQdtrf$v?i{ZDul?3J3P*@FODdmE}Rt)JDm5M*=q>DzTsJ%|L$O=VTSD5UNWL( zlQ#?;_xSqtH5wj~% zbuts$&mDP8qJ#NJ{i_G;sWH>nl)qlT?C^FWQG7@a;aig3Z1tDcwkCD9Em5qBoE}pY zui?^B@(`s-&VPyuDR#C$BVBIQI=5N~9A>RB&5cghRUYPtztquNidaxRr&~Z$*tk;{ zxjG(S=hn?D@;EVh;YmZd!-GiH92>AuZOGG{-l7}VR%YYFkbGceu!Ptr!aQv5h{ztk zIzzcjOOV)p-W73DoB6YJGN@W|Zj5HO|C^W4;lqVeZ`rh1{=)Cp*MFL{$PaFdxh3hsku7x#cxInc&Iy^~Xd}E@`b3}zwWJ)jHjrDA=_H!e zKgE0hiSE`mYXDMyY*5te5)(4JSG4`-Qi->fC!g7=WzECajXSowB!nMQbb0Hr*`j95 zqZ>gp8~UQng|m3{+A5cD$dT7(R$Qt|Iqg0Bo)J$gc62S@7epz`Zj^n0OsGy^qj_Y} z?Z_|IIC|9GwX>@xg1ri}z68zip97x5#r26r*T~F@>g*=)!4Iu@qmuwBu?MSIQFte?L!{9`X!w_)kFoOsjwC%&ZWNjSnh2YBAKC^Pt4Y+wF} zJu#c0_tT{xBxhd{5$o(@i+e-q7sFmm+0miT%VEKjtm>2j%J8agIruH{-bfshMoUjG zCJ_&s=q5Agni1tw`o(eyL_|6Nc)ov+zY`+3#txTs8JBMCDfE0Fz0WV)Eb-wJ zM`TOCRLfUHlpQ$(6&Di*d^fjy$F<)~L)!>D0e)zg?-_~Z=({E>Fks0UBF=)DkZUZn zy%Y7m8tNK2NzTZ=Wbxz)7V3O%O(1T23V(k6kP$4W2J8E4iOy7G*_7<`B{AnJmk!68 zI;+e3a8;^`-eHp-aiVkCP~u$ew;dG>6?)!1q_DTwyfSlTV~5@(wc|{5esbC)2XJHJ zpDFy>5deOi@bkPRga@65zpwbRm&HY&x5WEPxtL&3s{#lg4R9EOJvpIG(xz}wXNcrL}OYMNnXdvT=x3WHxIL?kQMX0)@| ztA0t9Op!ZqQx$TIiC@(?b(O;MV|B5)a5ln7UXXL9?3|K})9=qxi-<^@)kSD(?}2w( zr{7`+d@T~0(Yke5?GJ)BqtciUe-0)Yc}P<8NJ$aB-X=v|8cz%H=sP*1&kW3t70pU4 zxo*jd6VGZvUJ>p_j!#B>!YDt4hlkyTO)zp-pqZLBGTAr8rsDjTY8j zqjP>h$u>)g*2JZ(f_{^>GQqu25)VfLl7;TuO2xOtEt#Y%3n5}dN}yRxx5aMv1vpwm z2y;(_e2FJbLH({kafbCI(XYlrM6cizI&)_-Uu_z7QA!Qz={)zf3u3;qEjFYjK_by_ zL)xQy{iHv6Dywuhho+6?l1cB{@oR)MIR#miN_wa3mM2oy2ievo8rR|C#zdMsWSYw8 zgc!l?;6@omz-5j5KYPOf#0~LI=yGxw+%MNbpQOj*9%Kz)MdR6kdhmE_mwbYH?_J8z zYz3YT5Y_x<=DJvLo}WgorTUbDu%_y2AjXcF41$H zbn&OZ7@|bB+fGk+)W}tZg}ZUoo74~Ip6*K3={IT|SuCYra*YL>YfOFlk0R)2xU&=x z5L&a!9FUUK)xwBcPs{%wdv6&O*V4XwBMA~L1a}RP;O;1WfGGe~fE3lQ7_1Q|30 z3&GvpVPJv|?(Xg|XR)76_I}R$ueZ+me!7ZKsbLmtdNtj5-+kTJ5B@yxYOfp!jM-5) zL>~M{N0Wp4u}kw`Duj*ymK|nj|2LZae|kBCnp=6Yh-CU3gI?u0w^c{lKbK27YE^P2 z%>4Sho~Rkd!BB3$n`=Ski;5cL#$MY0f}nbxCw8E5Q&%M$)u7~J{9%paj8;^9QR!|B ze%qIOk4Q-s5JV;h1vCmWrF&rIv_!GJ$SySQ ztT=`S@3*E$;(7Mvky@5p|K*DNpPtuvRxjg9%8sgg=-g45qifJPZ-~7^t)RQ9a?f!? z7GW~k&35kRy0VgUv^x?u=jdH#O7a4RkI9zA?^9Kzi!ynC$j+MnQttTqBuKks&AIc2 zZh%3pN+TzB!V!?k-B#Se^`=NG%*|hY1!~nC)H4O+x3o(_ryU6A5GD49z>^khffDNo>F12V+>g#|i)f^S@j5{o#lV=}waKUM%Dcs7sJv zK(D&t+)TKbgslLpN`dalJC(Nxft0rGaAA)vlP5s@@d$B1uX064ycy6d>NmynVwKA@#Z(FRzExxs0wpB*SgR0fpyTug*;i;Nh@oys&65 zAONQoxyUYY{g5+2O}43a5$+d`M{Y1#02MR@RV84?MVZ&5MeivY<>1phzEuh3kp1oV zkk@f&*?@XXU6AjqCGV*)HF1KqGaYxn#=x%_FkjGl|0k4M1;g1)9%jeVy>`+U6ZaoY ziHBo)Dc9TPUA-Sw+);)pc>~X(JFtGm7V&uw=R$ zP2GmVkAgzzj|QwSLaF2mMHL4dS@@r}^~EW@0mLw2^W)Z7{+R^D%98jaUX1(OI6M(q zdZ>dl>YWn2Ns*WgK@TGIyJ-9$n(lxn8~G>F1#WHjK>%0a*6bGwg{NGy4M{%OT{De<#Dz>R z1X!&hp`CRWUF_zxA$XGEf)s6>AuV2~Z)KdOysCHez^RW@_@gg=4-kFgO^m#3l~HR< z3`(PNu{yL|s}2lOwzr?!m1532WF>Q4+VIZIx!;?qCTAsD7383Ek82M062k)XEJCm8 z;$dukTt^#vsq<#Cc?+|maZ`HuphVh@!u8LSLfCP_-dH`DXwGYb>uk;*jDi_{&lUxSTME-3SnlE?$rB=^Dw=E5{a{#Z3dgU z_fM0OI&rF)=oZ$fD+CUkKM^*?mzM^XXpV0T3>Q|wmMWrRV%h=2Pr$XeQ@>cV)B|w3 zxOM2~vzn>H{gJEXSW6{_gDnVJK=&`TA2p5Dk^$@dM#=(xvZiZCsdltQo^%qZg5!bU z@|o=S_^d)*_$WlH$8OLisN8eHxJgzJCEfkXbj7N)L76G1CMM`^90EfDpWO;PEG+qz z#od{KFJr9$n_g4E3{vYK&p6wcBZV30x?zc3@!Oa2dzLw~#Uv;z_qWa+w+e`e^WQ#$ zsflpN8XPB$kSg1^baHh|SkToqMp46C;qbUyFHr|l!B+*-xMAdAoBQ&^rEUGY$}MIR zZJc5455~lCidOYGQD)upi$tTL^hGr&W3s(n9Yq(q&FHy!23eV4=Fgjo(xgu3b3-iO z=w!`EtzjQ16bV2KiDh5`jFCX5yLk-1+F>MuU%Y3J!Ludgi@;NtwTZ~IchZC0PE?EN zZ4VC>P%g!MKe>6~)C64za5)W-iX=@cEwtf>lAcPdSSh!wymxqmk93%aN$n5b#({@p zlM>6XfnSmij&N%O$I)GtVDu~M5N19vDooy4rsYphFK2;B`Yn7wHf?H?2^YP)$OSQxCuf2Hr^I$c6iL9xoKH3w|;&cg_9AvSZb_E7XCK~fOT~~~5Rg6JlT+&V zG3lQOq34q|AYBhpS7+WovM(HZ2GoMdL{N)w@S)`(02FRn!E>rfK#7|HOCH>p??Ko*j77yT^0nRd>4B)#Db^ASso5a|OjfG_nur5pR{CBN}rEKN! zixoInq0r6w%oAoBbG|nwd{cMbh7&B4G=yZvizikBi&j^I7vFtmpo8(o*~`D4AD``u zQz!9;oLh~$WS@BbuB6M~J*jGbbN!qDJ6M5&c-AESR7Y8_7C*rHP#>xbI3Z;fA034W zeGVK(m(~sf4&YkH5!rz?xPPR&mU@+=z|Eu~;k#cS z!;?T>fNvm%n0T&WLcY<#7#B|{{9~TM<=I@Kb=_Miqm+Y&Y=Gb>SJ8-~*bZ|pDZd+P zK)9hEXW1MDWp`7Y)PUgH1&CoV?u6OWm~<14(~203K9>y*NkaCTYVMuyaG?29epB!> z4h!N1>>)BIcWEwz7D1Jp2aN6ax26-j-K>aovyqY0PWPp(tSYF)pPSl@Yi*NdyOdh~ z$U|V`xjF#UW>HeLDcaJb3cFRcO5xI2fTx zyOlHo#yVqlE{8aQavZhHUyM7P3~lXbuq!oj5n!gp4rr^>5aWviUgr5(er&|!%k#Y@ zuB%-~F=OfpWga?(os2stq(B)9JCXG_0Ex>eL)zoD=E#pNj+8o~t~lewIL)kodh2*SZ+Ght+h zZQ^2{g%q!$afq9Qo7#Tgfv?8kMBa=rZ*)KR^KMKg^Zv&Ksx?QSn#=mbxLEw{sui@( z*mr@STD&G5>>&znRuFwY>yTX>C+z*8huDX`_WKg0RuP~5d`k|>mMWlLylO#JTZ~p* z5)sXUB}1vK1+~PqkgBXXQWYm7O6N*Z*g(h3IejKI1!BvA&D+un6hqjT8|iGvmi;{} zSf2h^Rs5fasu>IVmio5jrMUyQ5nzAUS?@Pj;;B?nqn6PjgIEIP`nOARi!GWRoE)?# zE;>DqUc`|u>lah={t<6N*)QFsTUs;eUV1HeeqM2!n@1r`*b<3XUK9vhA08v}-5swL z4H=+Gs%3hve;!0baiR7JTX*H~;=)R8??WUQ{0<9D-58gBEw|$|w4|fasJ~(S>e=#X zIfjb{*^CFbRI18YBa{wixj@Ao3~Ag67G#ob-0V(bI&^k(x9+aDj1sHIdl$^Ke?rKq zf&+mPCsJuNB){ZrD{98UpzQh~?6F^OA9`g!dgJ*xcSc;HzzL%jAr#@gEk7eH+|4E% z-%8P~9&f3FlJ3uIqF{A}BPaEhtz!^$?~*w{=tL1WR=ShNP3}wjPAw{C_2uC6DHG4i z`?iC^j{a|9@YkDMEeVANUbfWN7eZ3ul;d%sWIRb=uD;cdQ$$LFtXk7K)%n$501ehn*Vi5$1e@(_3xIJi zd?Ju?tnMmt$*F^&lj3kaXkN1x+mwecU{6!>JhHQ z8aAk|*FZL4$DUD$wZ3rkyw^TgUQw~#s1%=?S{t7BY=AqQEZQ0DfT4XJ5YMYi$a^Ko zwaaZ)(;>;Til-sOCo;zEN{@J1vE?5K68D)m1*S-Lp=*;eRG^q5PBk`i^9t2=HaJaG@n8i$b$+T-uh9q&QUCBrN{E@j=w z_3iL(Y0vTCaG-jYIVDCWvexN-7C$}$v z&~lrx>|L7((&yaFNxw+^eu(wiWgv2@$P4DjlyYRc-lYLC5`K~t+!HG^9iudM^d8M? zsVDw<-}(YnfwleHunqp?Dzog>aLiahJ(sQRcEZ2(q%DxQywsRoGOJAYCY9_ zTEWz8|0za(R4|jc+h)7xXQP#F>;21x>^m(0MF>RVi0p@(_%j!)w1eusVm4UG`fEF5<%MhkI`7rt-cRY2tTs__dcpVXs4VlMRWGSHhEAO)`QJpA2fht&6#Pn3w%} z%81xzjU6NCB51{T_fV~VQ6o0x*r?T-M!JOd)C>EjcmJR_R>Dz_&dn)R_uZvR+of0U zOzTKB6Uq6(dt`|l%V)?|)Iyz~=Q`BzmIfJ`lE3*9<$-JpFovppgKI?kcxR)hf7^r= zYJ-<5>~|;&8x0vu%?Vuj#QG9vb?RSoubgs_?!-}(=m}~Sk>jw4rsN=iP?xxe>v4BB;J?LX>c#> z(2jScaQQq>4vntQ!}eqjste?j7)uGYI^sepv`AnLhYp_gtYN6`u?WaVH92ni5$9!= z5Ngk;uw`$nPKXMo54*KB*ZuO?H(dx*C9t}XNbRgjjW8aOV2sCNv6Q71yiM=4 z95+EtDGOhKFnZxyMC`1})LKHVCDQ-I`XkozoCcOF@dm^`BRE2;&pv7&_oRxbc72V} z(F5tU{i4g?v-nuinfvRpcn_Gb8nyTQMM>{wC?`jgV+Ar*V(bQnBlq5+&(;)uk(Y8o zoT#VeH%0d(1oh-O)|Pf;$KViL#mp#Kf8*dCqd;x+I_gKR{i9WdvnzU&)D+#eZ03D4 zc<8Ifz4nwdevj-V7L6(&U_bpu|Cf!R=KSii)QNCs_ZUdLeTG^>Z2Exyxy0(&iDBQU z8&};lP)G3khQC3J2$h3_bUED9=0HU7*yy7I!%4mj*jfdjucBlHjzcxsPZYW7fUJRBOtn|Pd6E{;uV!>Z0cW9k&M_c zO#aMH%x3A>Su8J+bzo~gmRR8sYMUF>VvkFMnk4I5MLcwpk5!icsTN*-ssjXgQbcha{h4BA^fz#Hji`gaUR*r$@gE8 zP1ck|t)!Esc&)U}@ph?t?5-vz%1XBw0wYf8Xc;O$7Q!FC_wu&nYRCT8K&dP%hB~iM0I#nr$@<67G=9hU1CBZM72PCzVrJW92 zOuHBM;zpp>ZhjAm^_g>)#*$=>mO;4lll;(}NJi-y?H2!f=`Inl{t6}CdQ6P_YeJcT zrVYP0+`iH^mCR-^eF2)i$6IeQ#qRQ(mfy&)DiA9rhDk;yQpY`c*TfnnWchB*JKqt$T~0+Q9Pd>AHc*7vRqeFC-@2k^~E>A1`Qms*6!PqVd23HTDir z#3x!9A5SO(3cLU^PyV72pDt86G)va`ysZxv7_eLz-vs|cZ0ApRMYuIM1ZdDN5O5N@F&URf! z9fw03z<;oAGNz>P$2Zm!Qvvw-)f)%ZuwG6oXHcy~WvL?qku-sT^gH2C{lH%wHB_mK zPV`eJaF@|hyD58DnH<|UcFq`@a%youos0b8LsuHsiB!WqGl4sw{ae5BQHmuYgeik}9J--O%h48X&&aY4U7&fLvD zwp0KIoLwXK+Haj5G}x+6QY|B?f#syJV{M8+_n^@49YTSYrz6)dOmGd%-sgoWEr>i8 z^R(6!b9Q_t@6YGd+L{@UwQ`!lXw01%OF&)8Kte+D01L|nxZ7K!alp!~aL90IaImYZ zs|ldOqv4Q$t5x3SH1I?vS}vNm(qIX6g%tb)C+Na?Z52hGh?m?v+u6E)jYxDzfrYQC zHoQwq#^l|Glc|eG?XyREJ+W$iRgsVIu@Drc&Jk}XalS6p*>lzEe1kU)^wSYQ1(Y&G zMM1gc5-bO9bnSH8Up6K?i=AN)Wq#LK|GRsE3_NNFPveU(dj1CnCEpyERqRw zQr{(Ws@X^EWex8B2Yipz2)@+`{Aq7F|Jyj^_^)cbf4w~Q_CKkH+cdD?SbE0S!aCGfyx5k zyAZv4+2pSeADrYB&cGz%|I?Cc&HDIA#W+g+VDhHTep6w!KRGCvrah`&INZXBhu7^D zx1Ci^P9oI6=pwueRL87CqMyU&fSnQSt(*vPRuj zi-AvtE90N@%8IyT+8<2av`I=2Y^UKaD_9vu-JB?(y>d!FeEAs8Up*W%D;oVXB|RSG zMCpsxhCjj^ZiA31EYH2e!`SA&`KyEdP6;?mU3!gTK{QbQXf7gRUCe77JHdL`&Gqi# z#=D|@C(h_^=%jR#PEN+K6TIr-Oe@bSzvLZ!NznVZ?;=U4Jdb%O9CwTn1^n2jH=kvP z;86~(u%3{>pAXGtMTOtKKNyBkZONQ4^E`d{Igh_l?@Ywmc1H=<^Gc#n%77bzSh4%5 z;MuaYCz{CZ#hrSbC{TKxUww4wWG-9=R44Z}u+5gIUL(evdk`TRE;(4FJgzv2m2AeZ zb%oz)WOC@)x8RE?%(UD@%&v}jqEU1z>YMe)XmKQ+QEJrMc`WT{((d?)lvbMQ0u9Yak;YALMbSUVd>AR@f;dYnpwDd5qrhZs&$K2r> zEn3B?t=OlfkU}TfYozSbvyDVb1?)QC7Z~OXQ!Z5FMQ@ zdsc=cM}PF`Q+3I7K4bTSLCM`I>QaEzZBG5k;@|OTt^>7;1to7osL{U8D*n_xu4qy? zcqWEQ6Lo#Mw`XqKt?TKSg6*M*M0;%oetvaiN%7~|K};|d}KRjjb|7)B3mB|oHtpN{Pi$;@(d4mn}RGoNxH z{ARgUQ?=9&%|{Bo+x45TcoM~|83lrEi;@M3_$)LH)&HK(A}?fyG=hLximCI&++fpt zLW{jMMd#UK?IcjLZ4;VTDH!cOQuFBM&A{1?Rx7l;`|M;R43UZRifKi7&vJQJ#+h*W zYZ=`-Q{L*Eo|lnd$lTPf4$#8I2w%dYa&oM3GMvm=qjVCL2L&I$lUp{7yy~YOOr}(f zEEfz~vZ4%$pa`qu(!`m_H>fSL{#_ITlx^HAYRzm8p7ZSs=fldy_oHZi_rC8QIIK;t!0$pP11 z975xtQ+m2Qw4tcq=V2?efTyUG6DJdB`UZvX>5nY1(XV`YBa%6X*rL>4F(d}fM#~y2 z6rDXHorth`)Bhp)bi`;yIraGk838t{_nTGj$0TEi|*8bdSy#OvJd@~ zBU%lV$trcJ2c@zyUKy4VS^Yfl^oucIsxvbaL-X$Mr6Hri^q(W4yyf%B-1YyjYDQJm zdeOkZK)3v()tOC+_O7z#LG+g97)hAm-C__)0i>MV1H?hbHrZ>GtzYZu)*^B z2ZOYfHFTr`RB~MRn;X90m37x8Kf8BgIM_B<6Mi>tB`sgxu2fyeW`l_?h;=Rao4aF- zE(@jG(ebCr)PKKSe*Uy!tlKyKY5()fUEBFAK{mh67A z$A8WDa^2w8E?mhziT7~tuD;=?3A5N(t?=>!)Vr0pTEfzS>ND`J;o=p#BMWUnobz|n z1clvBnwxPz^n};WWqQGahO?%uX-?UyGyW16={B`1HN5pQJ`O9MQ8|L%bc4Fn?v*;@ zV_fDeX=4#Y8O57o-}pws-GiBcN8mNFPdw29r`ZTzn>Orts6VW5IQ9nCjlDtfYPFwg zZHnFh`HlAyrqVBjq^rVY5S@j$O==KO|HrZ zZVCkFXX3?(q*hrja&#I|Pxd550#1ul-u>bWq~$EtOEuc#pq1=Jwab1=|IW^bL#)B^ zvzD~IZxW6wjd@sVD3ZM|8mxFh#=h;g+xxL}B{?6q_Y#nN0zcDs*^%qzJ}r#(*)s~$6+hJ<>j zRdG2IyFbG!2;fC4VaIvygZ)>toYhmZI&&M!h;=h(1PFb+(d3Z@D7E#hkvc7p&9T8F zv`c++yv|V6s!VM7@Wy`}d*l5^-Of&LFR*^Qd}NF@^Xb*w47D-0-|h_7y1czdDv8AAGq{|N zYILjg90XKo&=uEvFTdV8Qf!e0uTf53-1-@S8V;Ng-t-1P{_ch0jFbDzV-zLIk$4)=}Pvx_Vn zF~MWf$UZX;PMZXPD2PALdH4ruwC;k3xs5TDNJ?SJQ zWkpD(Z~PWnFT%lr(f7n$SKfxN)r)E&@OY=-$gPAZAZjKXDntl>c7YqxRLN*wNZg<) zfeJ?{X;5Nj#oIez&ZsZ6%Z`bIh8tkvH*SSABJ*MD{eIV+u{)z~Bq=l5HFJ*~so`Gb z>Eq4B!e2JqcR{cz+@WyY2B5+tC}z~KDNf#n2MD{xaapx1;TkT# zLHZgOM&|B~QZ;xUK{V_3l)OH&9laax;V6A_@?RtuPFqz- zPC2>t2?2>M=i>);oCh8`eGQ-xChKmc8Q8kK{RMH+AB> zlqQRHJUg0l(>j->caZ#q9%+4`xnnkFjE)Gczfn``^0|)%*c-R?^@Zu&9K?wMmb>L- ziNM_FEv@~r_1Zr=9a-+LY}dEYj;`BmR{`TwfKfN}Yu3oo-P1d{J3o+mQRi0?N%J)` zcOmF&YWpZiqBHb9)tYeO>GHv?8V0!z`Jki-qB1dqnKa%LTC7o|px$=D(uomplxfpO z^^{o(9_(Y)&O5ZqJ!(eei>7F#lr0!P+}^#OuNh);IeLFWrR;j=h3AE=Ui)&Q^rP!J zv5LCHa2Sc3^{zzX*QikMkx8F{4YHL23V*M5{@3ck&9$4)jO?i}mTV0A82w>tFIEe9 z*FJtwY0+<9FmkHPdK{9px;$1SXra;nUhQt-ukZlvln=t0fOD&K&+32- z~dsfFAJv0qv6~v?AP{HXRKEfp?xU7z~1mmn{2gK=Sl#wT4P#wF#B>L}N zjH`#@jE`5}YigMohXc523}L3vqS|3dtxeOAR59njQ(OGY3OuX`8;scky*TN$y9I5^ z)KqMc0R(D|!kuM=6TETTg^ndAWWX*N$zztvK7w8O;mEy{_$Rvp=Te zGG()qzNhM`@b|(MDKb0<2x&-4OOzJY)z7cC0SC3kTXfdXF77AifO`|bOY4E@?p7`0 z0@x~>^L;I+=~n>t)?}hA=bblzA^u7&?m9e22#ALb{t_ntE5uS*2F``4&(V_M`Fgq` zawqbTmr!{DDGL_}2D5PliqJRGR+dYlnbgtanwLa(_jA#F7k>%!4>GW`haGRiRcl}X zCs^6_A_lfu&=Y@Spt2h|E9COrhQ!e({2oo*s3;)RO-xK;1Zo z0{IWDpq26=56I06na91Bcl)NmVa+i3Ek~>xnkyJ`dRpM@c7{EJaFz~qns?#o?F<^bK7Nc99nya zhqVQ|e>5k+6`#J%kE8~uKj5(IfWVgb-mRs#<6J0xLN)?mM8yLXSe46X+mn@@Lqnw#%Xhbb`#ouX zSnLC{Qqmmon3n-v&Mj?KN!1hZIX*ZVQXcyL9QBsBNsbQ4$I4rcN=N>Mn-mOvCmR8< zmP-Jlp>5@~9ZWn)#32~)=r^mVuB|0__|Vz|06fa%fBN6$e!`XXF2Z7BVx&UWv;b-; z3m~-K+L;20yip_byGiNxyON!$Vg!&K(>$Ddi6?%`KSu5h3=h6V=1|LW25UxvN0hSaRLrVSLu|C7cmdp-YOPw)Rk3IDGj|DS~Nl9D}Dx)a5z zjj!Q)cXMOl`^3KjF*&r{8SEc@Ezj#BRsW^DdLN;og-%QVHuX09>V7mJ&1XLL_4{|) z1b(v>`*8pdZ~&OP+TC2a08eo5=%~&+@&?JB*H8MUA&}PsZp$a~qagjR>moJ2-u@~< zwREYlz`&oL%pQpX7C?ql7vL5O(*6oAGdL@SU^fOy{~7x^?6*523?#&j>O&hupQD&{ z&>XCF^dOYvbF$zKbsG(bSWoLpz!ls%*f@`-WFZ8ogFvuSc%HDtrl*@6j*=&okvFFs z&+38uO|INi7nQjQT!x30jsSdKFmc(5r`{IQND9O7_@*FLJi(O9SGgQ z*!7HRi^~$-7HMpcRni&sn&+Bf=fFI&2JHxIK3WVc7h7yYimw|kuM;yP5^aR~G2KYw zCbU&$qwb?LFa-+$gG%x$iB8%|rFYZmww;@AaEE{_nrdz&cwyQBOa*ZNq?bsVWJ# zd|>HU&CLIO!V7_Wp`E(C*G!4VVSiEkVuL<*Rf@X<2JuB#EvZ~{Pi|{V{(bRE8xw26 zV8J|Ps=*J1_IOTG%3McE;hKed^9m_#^tkRYbpR?;y+&Vg%yu*4yA~)6-8tqH*Gy_2 z3);UX;VLvEZ1`LY)CC>uG}YZG545WJQHYlM3Npi(^LItfZ*JTK5T%^5yUP0gxMn6U zqr@u>#fhU{8o;FQ34`Yv@zg|X9E-lb8`h@DMnJDkwEhGGFR{E*M$!u!9Q@zG8=@>}0OXALDji7$3n^m(H*jDybfu()Psa_uO%a|Hts#D?V z=#^hLe*2O5v*|_&5}p|iI$WEo&`fo6ubC^|X#uc2#rp;4e*2Q_cm;5iJl1wC!}MuO zjc+iKt*vc3iZk?oQ!4mmeWSa7&MB^?AcQIe*>gb4gBXxN zWcyf=0-k+zjvci-vGnUketY=#35yqUHmy&=f#>#U9;L0A$DTyoir~V^qLPw|hzb(y z6JR)_H`NGfAM>1E<9DVktzgueroHRNrJBELYCKbIWg~{6=@}?$5jJczTmmhv-CwLw zjaekRyYmKJ@2>-&*tamm$|Pzj&sFm{RY6MGX{vNk22_b17c*5xIVD~%Tq_dmv;?lZ znBi%-a^yWk7#LjVVhPn={BiG|5-Yp4^8UO{DjGq_m_G*fzCvk&HjEkaaS1dr7j4MP z5;4{{#~({$^nGkcqc{_Y_)+T1nP!ph%xoxbRp{Z9w-Pqy^oc(Q*8(zJVK)M{ufMN@ zE+bYQ>g35qV1V)Cof=+(%1Lxy>+}&{1GI#w*q(~We|xW!ZE{@!1{e7jYusM4%)DkT zO*$imYKeoKj_>RF;_g&y%APNSf!>xt)PC(D0G&VDnZ7*b|AxTXbw5WDh4oDcbsZEk z6;m4TY+Q zH@B*3lDNv(klIbvsJ8*rh%a^!7n0m}w8ryS1#VW45!OfEm&?mMU}pK0&r%VFfOOkM z8Xk%T4~`=SD2?jBNmfvaCHV7RjRbuWRT1aAn?kF(hgqLIc_J&vv$&xDbL1JojZp^J zho<~!_|+$X2-vaxpyot)475Ww#7;$ycxD7i`y!NPsv4_0}1E zuz?yA6Z7osY?vinjw)GlZNkvm@ybWsqgFG~?9ck}4FD-gy?*`sekb41OUWg2TWjm@ zKYs=SYx!V}gPCRZa_rO8O90vv_4VuLX5H@q>y&78eK==m8YNOX1a8}LBZ z;DtJ2{T2X4w=Yq!u?PQ82s5npSJrHoDeRiyNEY zu2hBU(Vm?8a4$r}o5PvKw8|NSg@RBs;^e=_$S~FIqmvOfisjI58+_Lk6eiZ-&Iy4Z z9;}PTpY_W%H25#>dt2-*H4~@s14Sghfz(d65kS4#dd*Y0#~hQsy3zZ;_#u@Df*pi4 z=L+j^j%TAN{s6-3Y%l2f)cV2;8G?veiaQtkD`cS&M$S-*c4QuX`S_BKCgT9^Ju^!kS1I|`-j=s=Qsa-DjnMJ2;I{ouI+ z@k7xIakxU#NQkK7Ma*4*{xlmOIG+^Wt-QBTcZF$F@+ewAZQWvobgmLIUgv?uiknzW zdKGB72wm~*7ZYuu*``D?6b%JvQ|fwNVyF z;C;&K#T02WH#0-fFP<~|{l@W`-w`iLAs2m<0}`jCI*>5QSwWvj#bjDgY^B6R^E?Wc zQNU=OrvMXD@R{qeW~_)qhTWS7#U|?pUf@SOM>JIH=^KdVinf8r6uV2?3eFpWK zU1WDtrM4IAxyTSZ=qG$cd@ST;0j|?;MEObq8|17krF%l5nZQ%#f}a!i0^`Z1iU#1S zUAeuSn}PixjA>_WGy*eOA@kJ9RCEy}n|8gulOz_|(`^oDQhd+NR0+_6$4-|UAznW| zL#M>JESL5PJ}7kC=moTu{ zO~2}x`76?>6`l=iuN553TmvK!Kz>l`9{f?DKqcri$IGpt(-0|E$nt{nGd*u=fm*j? z;Y{5b2=9^Rx2_*B3F95S$~{*SW%6>WmX-<^^D_fv9Y3*-JdO`aB%j%1swh=kcIqM` zA*?R$ssego>c?BX=XuJ-&)zA2de~9wh09<9Z-m4zX^;=8w;OpXvbL-&HaEGs@%A@E z2itqq?1Z8MON6kS-$313dRCNY!S#i^_c8HG!0|WZPNeky#h(x#ya?(UWw9JptG3{&Zvv;Ii!a*nw)&HKgWTB|A6ull!|N#k4d zm7x!*rJJ!gP#2MJQtP75Cg)C7Wls`gY%Zj;3daJ{%=ixdFTgU>&BL(KQu-pk6R}dr z@B+#PI`;f=3da)F$L_Jh6T2!q(1ftiz5t3;qWe@-jkDs2Jiay zEweU9;F6q^ErSgC=VpnAjVX-DJxHms_cZHhjcw>d;2zROs{v|4Q&=zGQ11t+^9@=F z+&#Ka6Tq?}`Q3)ZNRhHt2BiE0afF?FGaQLDD;m$cP9~AZH;i$q|HLK0a(CQ=$4?&zBW83?%FX+!qd2Bj# zcj`uDQpz#njPk2nGciJN$ZKn3bJZmEO^F*Cfb?ebNUx2z!*^pk|8 zkR%56S~Ir67kvc44YSWRU(+zzKdo1d`~0vabUa>}kgZ6I~3pjmJHbXJH~}q zU50VJH42T3lDQ{ZYg-yMv5+(yu5C_rdG?5^cjNI1Q?~Q`$iW9)Q1q?)OGL;@9QV*K zb>Pc)D3qm+^i#T5k{Rzk>Ct&S)+g^lK}>JgW)nX@O-Uf6QU0aeY1hl`?WchCrHmU{ z-Q9_gOhcR4icQ4vhEYQz>|@+y9Yd#rW?GQ<$P^F5P*QmNaLU5~dfW^neA2auv@r!u ze`Y$xp6htlep-P(rJ>h_SQK2$c7yGyk;bQE6`7CX7M~ZvUQvWBB?R@JHdtE)>GQfN zt6^>qEL?r|d_(QxS8!INGB0gz^PqMizifB<;=uPfTRBpVGcb~!V`eR*#FL#~Kmyt4 zVrWORgEm4Tm$jLRq^RRy1d~-@kvQc_wR#9E)ZTIq!vH_k=y66EqWa6rx29-*+U%Gd zr#+H0Rz`0r?k8(-Y!15BDKxG!m+GxLxyM*1KwDmzx4&9icH?SWZMg~S<9alh?}PIj zhn;kYGr9dzfXh==BJ65{`ygdT@>8STf1d+jPb2g!kJm-oCZJkI^iv!l3c z6EJeT#-9=e%l9=cZHCAfL&oe?eQIl-#X^J>B)`$HRwl^y9Mb1?`*AZSizue3N~6GV zm$I1%RAC|7GbHWC678}i1a!;Utc0tP307_G%kGITjnwm>i=S``#uUI65hnp zA~(rtnhGEzlW^=3#eM8%S|K`dLre9nh}zD&QK0%D(7HVA*x_YFmvakT?g02B2IHx6A$l6bni8NBif(~UM~}w{toJgi;~0tqz%oy@_=D=8 zk_{3`3fk2IJaz{xd_wbY^HUYb+OnVP5=4|3{;I<`M4NoVYg8C=@|7$5q3Y~=@*&|@ zZOJ`NaJW5(UbKlo^!l<_H`H%<`27QqD;Tph5~Uc1b@?N=x+CoarR%P#!f4EpHI?$d zvSfEm6LZ7av~&Yv)|iYn2{LjcQ#;!Iy-aYE;?@l88`}wJq zzma&(-x~RKvY(^=z2sC5o2Ek6AfxX#iyfjK;_*tibVUzLu()c`s$1i${?aNt(l;p0 zY4-V594lG*tdfTyfs+(ASmE*)Zi5@Q!85{a0Slw6sbfMBa!ib^p0*X^-qJup4NUXR z56#sv$GHT_3_DEv(*hlwQxV-Gs086vX9;`vtxbEzo@+sB4cXHhDt*!;rL=Fb>v&07 zG%9+A5LejIn!GkDLw>z(dKp@3SSnuSJ^`Kr`g_&Mg48v>pL;H*NueIoxZJC~?F#0@ z@f`))@z~+c9^gc?Hb&gi*<`OJ9InwoX%?w4F0 zl{qV(Tz`-Mx2yl`=WM%))8HdF*O%)6%_+ZwmL5I>?C1*A3Si!5%ye|fG&HH3){j|r z3R7UrVKn+P$s<$W{}J*94-O7uJa|wu7av>s2tRT*Con@NB1J?0$sv5(-F7h1dpl7*fo-ID^R#nN;x7II`O#{ zzT41An)=@UmOm|0x8IiYwq*i{I!7Fz{q=xs3H~aGEr_Cw^?D=|U5Um8Dy;xl6Gy3C@1Xh6 zP$|VP`aRChp6+Wn?|dS0A#r)3xOilUUYwugd9Cf(c*EX4Qd5B*CM6z`lV2% zGg^AEtJEkP9=NQrkV>sBA~ehHqt)7hf7-rpI&-QBt%-bD?{By8z(pe9E8Ubx7J7ep zT%lc15%YSLC4m-`Q-erjTc&%D_e?r)K4Z$K60*hJh7&f|)DvnK5WFbyIBRygEw4%r zrqv_8waf3vmm5>oC}pkdaxn7gIO&&H_%LGyl7IMm(~eUd{Ka6!gZ?eu=F8$QuLB6&?6U~CaSaDbUz&*qPuS@4_Y%||OeI_LTQN9LF;`YCoIXD_ z#Z{|aAm=BACuqZq$!1we8%Je4@bOAakEkP@+n7H)~X;Vd4 zHFK+~iO6c*+Bf+3#hK?x)DmqpJ=$$j4-Vg9=^de1x)niY4v<6VQP<5pQkH9}7e~6t znO+yhOz{oo-F!ix)wTI6b@l7yj;IDpQ9Xt)|#E?XqoTAy6j47pF%OWJ5n zhUoL2oaooHnPqX$B?O~TR5Uh)>YP{)?kMO+<11_<=$%}WBJAo{F%*Qk<1N(HC?X78 z5&QO*uN|j{av{a*>?)}uvff}U`blN5D~vi59`5B`fZ*pXEBE$bj);uMO0Hqo)y^g+ z`SP&VgV$u6d9b_#Y^!1$>mjFo%3RIO zQwVk3F2K&-OvI0jSWJ6LDG_-YWlTIwYsi*+8Z|aG{M}cSokgPoTbXg%!fOoX)P$Ct z*^*+2uStz7ruQ=X_;zwOH6#sE=zDjsgeSFfoDX&*M*7OEWD`n2UHnhE8wXZWybmecaSne(H9b zheNeP9=8T^mw-4bLJE?LA{R@E^(Eq81U2KqE}4h)HJz|yj%&sJ&p?d|Qc}njyu>A` zb#Z*m-dGRX)J-{cny~c<8pv$yx2l(jJGjfX& zu@BWYW$Cc8Q>qg)G*Uai{V(?ZGN`Toi{nL+;#Q!zm14!+t&|o@v9=T|?yjL&a7!r; z#l28yi@Otod$6Lx-91PGoIHJ=|2cEcoEP`SeRuDEL1xIzp2^-nTi^9r>)T9u&QCL2 zhTV$l(_N@Vk?DHy!ds%X`i|oZVMS{|de-%v+R_aTP&1dcxId`HMmIuf*wlW%nxq<; zJ^XM?$D<+h#y$bvt0Cpp=ghu^!%!|4Saax11bE=6l|FHFZu=gz*9e!rzwXv<*L-|T2VQ_?@#nm`X?Uc5_p_U#KnvfW^tEtO&7;96J7-thwr z3`|8gFWhI%+ZZ8d@JieLX94X$Bge!h)3!4^Vi&dab13@#Wpg&2sa&t@^viY75wS8&C1XIOgXUW6qoP7701PaS_&7%5@`kGRU-5!E7l0^I4 zkmNRhPKi@||CzR)hy}{W{?3kasV1>(q^<_ST(sq0ZC5lQw6`lOUQ`N6W!u=B{P9)U zNhU9nnznJ$&?_6BnVuSK$P0f7o0`Ej5f17iDP?1+W4do&5j2xDVrK=oPhoC+oRXx$ zsjRzCgOj&DM_Gc&%OK=v-q)PCVbL3qNj%6u`ZP^S-Ud(9I!^@;k28$m8i_G6Raj0K zGeHx;h?TPnWj=(^tj^R$nw17v1r5lor^Y z50J?iCP`lId7InZjNdT%yQ&%WjqBb=nGL!hQLl`oCu@DVA(I&uv%g6xATLS^oS{SA z`G~q2%;ww~Mekgl;i=flwR`3Hi2t4hGL6DH5Q>INCZlCkad)>wMI(cdC#W6vc-zo- zzb8UKjbAoY(}AD922Lh!_6#KN_;K09q^wtTV{x}z?W;@94)gt4fVi5@yWbLW=%z>yWa#%0HhhA~6ekNrR6ESH=~n%|jo z!}X6Rn##DdRM;O5iukmnd0D&TrY@^kNi|-Ci}EEWH-la&YWBXWW$PCVPHwRl4xIcr zkHfnvM>X33AkzvQ*)Hb;T({s2?*gyqbXJT1{D@9yZRH|Ml()XPGZ8+hxp}24l0KTD z>h4FsLHSY8{_lo+!!qd@h}z0zyk7caFiQt_BY9;Wj&X0xGy1BsEa-VX*ryuURy3l< z@?kU0+(lnM*^>46J2BaV@ zPd;P7zEe-~eQQ$|%hh}~b*$iFYlqP-na73)Qic1gV6!#bisUM`Nf$m~EzL)WJZfXS9Vu)${aE}C?^lCROY z(&Y=4y75ig=upb|)|~Q5%#qvso6WiQ+i#QQinee)s;rox0;(g-TSKA82V;dy_gC2r zFwY+fdEAB0J*`98?3%J6AS%;~;(;##5(o2dizp6S8WI{^7 z+Q?OJ{CBy1*gKeVcSf`38mk-u*XwEG9P5&%FLn>;gCa&w7^kpoIwbuBmY8+DIE#M! z#ZE=ht4!8gO(xUcPIi>|R?*NkDryin{qauASZWU&Awi9rZPE)Dgos5*XoqJ!rrnQC ztR6Hh%UnUlu6n|#G{}O{yv`klHYt*N2!3oc_w#p={oklyBTh~D9}rfgs_Fq(zK`yD zZk*~WiyD5vrSOdR%b8n6YcQ8v@5YDul$s>;{=&B{1XSDc_E<@(1?PQ+YH9uKqPf*G z=S1GrL&?%D>t?b_o}`6aMdmd}8x^YUk|xHMU2_FNJRJeJZZBC#j&Kjl)Kyw3mA~KY%v-ynL|9lOQ~O zWoOszJ}p%|cEfxG8;K_L#^=^~%`??#55g8EkMc%hz7njM9Bz+C`Dweej=bsWe;?NB z8i2=%hNH_*SZ*v5;QHidJ;Hq!AbNL>ah9s>6YD~)tTvDZ zi68L(@G%hm5(5C`V6>k<)_zy%K-wpdHdo*w$Wok1rT?|XWDiG!+uGd^OJt&&8>wl7X$_nYv26;;F#eJswQRMN z(d6#)<8E&*E`E0)OHVKq^IX&P${u6~TgHv#Qg!^OLo7ml!*|Fu!t6ZtDwc1j^N@Tn zW%2h$dIxUAPjv70hWO>!Shm^rl-emq*nCZ|^sXT}cHr^yWpARWJPvHpt>j?&k0cho zv`8}e=qB2KPBJUkW>r<={jRQTGisD=ar4CbhgX4&(G?Aj_UnRt7z_-H)c-Do2@b0N zM1hdSVg_El{w0=ph6|A{O@4ESQhrGdUfc0TY@(Ep#yVW*;1yD+-t*cKwOfvjzr^9wc*DB+hy9a`jJq zek|YU6QZ#uA+J&;7d~=S3v0p0q}#Y=ep5LmsM=V@6=vrhMF|Ba^3CG3#RCh zTA&l8Q1FuppZm)^GwEBPg1or*f9WHa0$i8HBBB{ULYP75u#a%v0*Knc=d{moxXRog5Bt z!FEH2xaY>+&%aVR{-T$uiuMu%Lo!^JEc6z<8dV=A|EdNFpZ=pLfQLKKgynCU7REN&iOtB`QCv=vO2vH23XyLiv)za{5 zr&9fm)xs8&+LvH!|Nb<4>5Ms>2PM=9&)MrXeAbYY?LO|lOzOW zNU65!Jm3^8bc%!!OGGS(8}y0|gTDm`A0qC7kVNCyMbL_sz5?=$+R?Ma`NvaFy5fNT z#*GiDn;YTz3Q{+HJjpY>&=ke@RaAUsgDIfF`6!?B1XcFek|ItK%vSt!9Q@8tLl1bD z%?G&J#ET=8=;;ZkxKmxYul<;d)dQcctleoJP~tDN?K-=16y^i#&85BESYmL9 z^6ueR674KaBJ4wM6Aet9s_lkNtrGzwUzwc{2@}WSmu@1okd@f3x#07`!6CPU3)cKV zq4?Y0g+iP6yTWcq_eX66?O7^F%9Ge5<2#dYab@PybTzY&O?>|Bk1`G&EsoWAfqrv1 zGYsBKWZ)7xD*x2N0FF=vcrqgI@p@fy`p#H@Z-$FK#J(g6_m zDE-ar7M4#SbWz={BT{OwJgn7y9~)u#?;gPLx`O{m02`h@e*Wgu;0C{LuE{*Bi>$C% z1rCT$jVStiIB7@vk&($p`-P9A>;(ptKCFlV{B*uz=$N?Tb%W3FC@}aJQj&`hDwZN7V2vT;_cX+4ByXBpcoDEc2vB z*-z(5th^_y{O+~+60SbhPCEDCx9h#i=nM6TE`{*Kp<-L#TUj2R=Yy4<2MPxPB=paW z^CngOxftT>T+(~vYP>!~Cw~_X*Sq%<=ag8Na>jGQ_8B+5b_gp151x{e(pRBEd{5l` zhoAH8TWD}{gUDRT?Ag+n0^aMs+vj0f**&YaEG{D@g{|4KvP|@MpC-IJTWTANzgCO_ zFIhawldqeE=dR4~*|1$`BjSF%{+O&$G*IhR1x;5!z!a{U+tY$_rzu^j7YPO(o4z!O z-0t6JnYD2(2uQLP;mO@`JJi^L*+|^OMc}+|{*e_zn%6G3;o1i@9aRJk(fggN4d3T3 zQ%L)!<0kJ9Cq_Cnp^Uv%yppChrqJ-*W22}7Er9?RD2IThz(~&Q(D*=?0MJKkd4!~4 zn%AvSVwnv7bmVA36~;oE)j?4)BR0-OmKTIHB9N2>;ET~s0i09{+$zYQeDcis%+I0A zI=K@FGQ9QobX4isz>$;ziU4(iX0|&q4*PKGL0Mbk)uhJ5A6Js_CEIr3+)G(qc^O9E z@Lp}sic*uq-HlT3T#LyM&pFHEv|i{UjeW9uZHmPWe<2es(@5huj8{{P)+MBBxQ`|g zMmOmabb$-Z-c12-g)H#OAoWkC!xl?#H_)bAiXI!)A(uW|EVg|e>9t*o{@H7jFm%^C z=D$_5myNDsSF&^c4?A zWx!sMr9CJx!98Kn?{Hm*hlH>CB*RwS21>?vD|ns1t4E_nBN|De=7@9q&fikA{O&|^ z(;BABHf6R~t4XPj`26ph<3^r-km4&ipSAuYCk@Y5AY2xW-(=D~6<%vrSzGVpI2|fb z^%kw(Q!)5=OQ$pX^odqML4k^XQVq4YCvXYX=XMPK_#?s0Le;fGbrSWVQ_=a64nE;w z)91m^x88s(JBo*~@eu@6y>-4h!A7y-a|8HNz zWIT~E#-ZC}4iy6fDt-dhbmZVlL2Nn&qCmMtgNl>|8`^H*$a4< zX}p=XCk3P(uu}>NRkW8*r0usF`a0rG63t#3@+w`>@2P)TiGKTjFa7Nmk<%bcgJ|j8 zfQ@G*60jpJk@a=L&ny&Y?S9j}-tw;e@qgrwvxG+7KP8Pwh*g=nA!?&qe0!j&~*lZnh% z!iQyeVZfB>*}G9()DSt6n1dvk29XFTk1+x~(w$SiMoK?A25#*oU)5GE z>u#5h9_L)Y4)Far*JHe%1BTQ-w5v6;#MfnFO=$*Rwp$EYxZ zc{5bdAb8>krm(EG9neGq0_7T;&fiEYw504U7 zwVMiR#CyjXaJ&P`(lMLZB*YzGw6sW_4CE=9LN^X)0xhlTW3;edAEY-W$I%Dpnabsi zMdwvhlC@t)EXgB;O7z7DuJrrs=LIj1Ix`?K&u7nB?sP2^lYkLOzE$Lz&GLDw93TsH zFV48_TyDvsKOkk%H}#7Gz|URQZv8|kvsky*wEAh=(>xX6JP88y8k`KeF){@+=# zq4YPa1$!(d*Otg>pd{eP!lU1kGmD3L<9GGs*|A{AZorbESKw|Aql>mjeX@!9>Snkq zt}y%QX`|Wjtwcuhx~dIFnC7S6?WDwO(+vT*iQis6mYOe1N;_b>h86Y#mH|H90PvGn z+7plKnlTjT%6Z4IO|O>1-~#AM+`FKFXNQKPY}rKoaTevDMF7*h`HG>eVrmS~bK#eI zH@=ol-7m>9AIPDZHM(cj;(8-08?;P)VoH%ItnI8*;7hNO!_RtZP5 zgZjlqfxp{AQ)F%_RsF>3s#{npn^|-bS}XTLMt4Dt27@l~oTR8{QgN-aKi3_I_k8XaKnv+X{_ukfb+Pr+H5>C!O&K#6CArmOo* z(V>zs*^4}t@I}%>kCKObPPFnP`;6hYsy)2Yxc~ z(YEE5=>=R?UgBUUMw5jbY+0o6XZa3XT3O{H)YBf;16_iC^RRj8E7$vtiiyvtol7>x z14vfFL1KP4Cw_J)<{o`GP?b!w1PWsRV-)i9(RLA=gpNSku_;f!5)d*I7D}$}&v*a1 z;LFtH>)8O=SGk-ZC==gLkn#(&-PA41C1cXQ+c1n$&kp0Trv3)U^+SvgfPJ$wiRE$^ z3md+4G*mXO>xCOBYgK?CuH|SPE--k zvq0OUqa(ezABhA%B1wQ!cIiqmI-ifbexc-4?0Swm_=6C(kq0iszNjmX`}iKcxH_oXs^&ut zzF?z-QDvj#@e+kU!NF;FkD}{wrdz1*-(wwV!qDUysvp7`h;q7xUrxT% zdf>?Lt+=SkXbQ~r=;%{jIz_tz@8rG6jDYheECw$nIuRqtj0#Y?F+El944uA2`xkcWVgsk_q7 z;OFQ|6(ir<)pmq{OJ5eJQOd8e!SS?Lo@wYU*&!GLSl-{*We#+v1FhKeuMgUqCL0P8 z7?wGb@J$;|=DgBVjl0V@yu38l5yy#qbclb$%dZF)9}03DlC>t$T`I-~%jy6V_Fq_N zm#$u(XrU~=Wwn;{fUT&pmom>f0W3plVj zY5Ji8mp%&@U+navKpiq3+6TfRt?}S!YoI&zDA!!DW(>94RhEm+s26k3?-QYaoxbrv>4TOS$ctuXp1E zd*A-P!;xZef213@^-w@$ghp@JwD1jL0qstFXItn1B_57x-C?9v67n0P&oOAoa+2rjbj}jlc zU;7eGJrrP)W?ewXJjKjUNaOTHb1W*uHc?t+GoyBAa7ugQ0$a*;w}O33ua zWdEFJ`I5RqX<8uIw``**!TORz<{CRn_3s>Ze)~^Aj~u5sw%Th&FD1TBOACI#iT{tB zLt-rfeY&N2sMp#^BCL^`A^`;VZwV&Zz1IOOPvc_WyLv)O+SKk+Nwk7d5~iu+qp#7h>47Cvg-)Y1QBdHTi7i9hNn+8kFQ|gOM3+YX3mhG_>xQwJ)n|Iv5FY z9O|6+W}QUD6$3)6_j8O#qSalhZl_f6=?xyw1<+0c;m_MVkpv!h73uk9LmTQgw|_!)6aNRUG6K%0(HIY7%P>w9cC42b>hF8tU%Y+JWL&;)+6)2EYuM9h=37 z+zuSysragkrawnItH5BAbGUNlbj@>~@Hth-k=;Q?O4Kf6CDJ1+*NJo5d{n(R(TC0WDY-=zMlJ9PJQR+`ZOH5u7g|liG#AQjKvxLVS>2mo%uc1B0 z#{3lVDQ99#TSc`7Q$O<$|DkD$!EN0{tvPQ^jebjpQz3=Ebqd{&9((RYtfKF~@|e9b zP6hIWb~=vZXk0tcvBTbZ%a%LvSvRYEmA!YK>ydl?xkSUSPQzDpt9(6fP#- z{9tPvyPb!?_45Zk?m}}(@B)aOD|6M zqM(u48@Zv_a*$fTH43SVn&U=%IJaIu!VT|N6nNv65+9MwL&(*kFmBG+Vt@v!+aC!0 zh-3+?N^rw+TdPCV!#j|&U7gvbOS-Tf!NxJ+j`ESorX-P7T^SQYqxZL?M~G!eW;*4c z#7WP!KC$&63cN9;Y$vAEweBcrtuE$UO^wX7yPRvO<1(o?R9OIb77SI9Rc zmM7KdH7S~WcCH$G(BEq>IOcbRk5S?2MtYPV77i(8YIyNb`L(z~_}D+DFYq>cq;Enn zSJ>3vm$%^}vkzc&AYLsje|i-7-8=9>ObALN;PctqHurVwJWJkMxPjP7XEuM5>!4b% zoiNZPW+gOYY&G_EE9o2@>477+{fm>S%jo#*Y-GfUujTK)JEe(_n(I?u&e^*g>%lj( zjBtRgI%?K+kL2dD184n(NCF=;(qI_Wk}I+p8h68qpH*j#?Mbs=ZdLd5#}MH`tB_&x z;wBGXotZ%c4K-aKeUQ}%4yn&ED;W%`*SihRQ?957KT>^XL1isu5pV?8uF5G~SX=wDqD$y_LkPsg<~k_>4M-(9G9nq0a}$F?wn zg&lm3CUJaV`^qVowPiBL!(u`PrDi>*@@MyHJuxN5tC{7;g4K=Aav%nvknKX9?C9@( zSr^}spx*YzI>whB>nUq*Z^)_xS^bG>{U-B6XgYi;oR$N_g*9Krr`%weaVwu7%1jco zC9}i=R%ERt+luL*-W?eTN-s#xffJTDEqv8ZQS3_U_2uz#ysU>@drlD02DyBP{{Yi= zWVqSHs>#v6Cu|X~EuO6QI=z&9F&&jOC%TZz{?NSNiSN!aJe0GYcgg1)Af3YPS6U(YrjB3YV4^_ZHc?n_Guf_!BU9M+=g&OGt$GqS?1a&Sx9Oxz0`ar?Jvz$nO z&#b zzhF#yze9$zTVA$VZY~CpN`}H%Yecz$K_Qit?jy^aIH{`0rF6fNL)>9d32p z325i~bSh1PLrhF;7GTS^Vh)`CI1Lb9FDm^^o+l}K=kH_7Bs;XvbzPH5o>($IeZYS{ zdqccna~HHdc|7iA3&d||?V9Gu-H3w^-Kahl$!!nWvIMLI<5ny46(guYC_*zy9qU(a zwg0KIo{Q1jI5HYWif^*65@k}n%z#7md6*qRbrwo)Xj<$YYkIyiej$Z?SfbG^AnjEv zRzKe>^Yhx2GuN*n-bXex7G-i|$#tZE*Dx~VF)%fC5CSi$V4Kx`mg))Du)H4*=t5(M z?<)lXX}QJPds~)emE(ebz+jI8ZtS?AKeEi;9E+zdV#Lzlr61mC9P3aC!MD?)h_2wc zCa;4)nya}MO6Ho(|FHnk9w}-z1FIcNANvOYRa1YD&L46)7ffCiE(wnh%rI#bRXq%U zDtc&P5)WwqBD*DfAh)l;0UiyC%+qLa1*AIItvcfIg4_WO22H)>d7QFR%bg>O&Sq~^ zwIX*zn!(*Aid%wpT4+z`&A_Uc=60ovcLdol*-@1_wmW_O?c_Ti7t+%?GVQ< ziVJYUU7>HS^6gux82ze|)~_LDYKMWc0YvB(`DzDCks~eb@=UL6J!Dy==P;f!I#v8g z`b+|RdvOI!q!;#1&(fWxdkI=!7$BFCUY9PF#^#vZ2!Jzlw5aDfxelxnA?GI>t4MTf z;oW2HvPZ^crzdh>H^aCQ*eA`5%aHo7-VNolwuY`jTFQp$r)bJE$KOv!uI7YZf~x?Vv<)*=YFLKZ&}7mtj*PF~0{Ts_81-DU;?p(kTsL!|BaD|DL zuQy_q;_df0omJG*Ok;~jdoRgA>PZet9}tNL02W;DYblxNl`SuZd-2atxBGIRYvBGm z3#dr5>o%%A*a~ftUYX3K6h~qW9r=GO;*J2MBP5dT&! zBDnpybj8*w*ab2NesvE_mCt-=2m3Q>RYY!7EHavzgV6eydtLPFPkpe^e6nQxAJKYQ z7=nFT=UX!Oxm{m_z*Rh)kyc(Uw7>s`Yzen&=_m-;oWPOw&>Ufmxv+RAkls*z6EBXy zGyhrfYYnThJCsu0ap=s}7A@#Yru`S_qH2`06HT!`4Vv)I(6R1xzb;L2x{i}#O0r0d^0M~m3vhL`KSrHy_f3({1?jMoh2KK}%e1k%GYeRG+%Ch5K0 zE3+Pb!n6dOB)EPcKPYK-;xr39HkN6!TZ^h~;M?lBFqloYDs+2j!OL2mog!`Yxivkx z$e(la0$5M*B9|@*nw4iA>>FBNbz%zEzX$=kV1WHor{Q^T0^sj$Z)Uzq-#AZhb=p;v z#0MTd1=+y5Z=B1{CH9v>0X8cKk@P30J?}(vfdJZ@cl2Wtnf~8GlH_Z)rysHdrMfee zF(0zdgF(NKyr?#u3_IIN9u%FM=R9e1MvL-VO16#Z=7$4jlOooJ^_Eex`kyNi%83U|Z@6HXrVBzu<{jD&zM4 zT_nlK`}XQxl4^h_AC^i*qW6$=k0OBvaE0-cn{4JO8M87@I%d$e`idh6Qc z=)3L?+muR03rCEasjM5>*XB1+xvv!b(LHXDnLdH+j-kK_Ul04ld~n3nsCC7sb{$g2<9e|s^SXmhl)UG8c(LiM`;bUDtE zHK`tLG?e`)0yJc+j;`@Iql=HNhSTk!ZMgV=Hu{X8-8EN?;z(#b#MMIGPqRglew2!W zOsy`Nu~$wVyO{K`8ESi(%M-|$acZvFij~MJAC@x``obW5DH8BXo{#y-X}19KwXf#! zp(8OBwcXTrN#~sG-II$lRyjD~FS8*${PWV2tV#+q0p45iV7rUhWz^+Fo zOH50L=GQMAK`gBG{XIg-+;dnn8*-{rJjvNFBwvp4;QmIz`sj07FYvjrGt*!+Qmy{3 zDtZPSXTEtG9=#8jQoP8G`1c%(A?kus%Ex%V#1aYXH+XR`&PQ+F>Qo-ZIibwyHLzDU zG)s|(1Uk+S>31)d(#!mkF0i-*4Tf^oaK?ygZ5@L`jQp}I!#2VG5OEwM$C)-m^o!%! zn8kr8Jufne)B*9+@dIZ@jX)4$xuR1&je>p} zK|~O41WxQhC4<^N{{!cEVJhOY#mT_kx3-~%L>H`5)S>jgW7VXFUr#%o_SUpUxF_d#q?i5s??6y-EgFKr94Bv`7@SLID$1wM!Se zK|0{d?V`_!PjuwZMG<)IeqH)Ny%Op$!0xr)K+jzjlS5tpXsA4Ull^Ox$=&1ZUb_Bh z-{b-gL(Y~qq&QLVZ0c+aWky_U`I-E;D^#PLpErIr4Qnb79@E*ZtQ|p+{Bj)U#RL8; zN{_Q+jp7J9N4XDYOHEFbp=$R5q(feJ!}r3o)e5w}rlq3~Ld1Tf76mNc_M7AOhClxu zVcNd;D2K_8v2;dtSv?<-pr!i&!*w^&h~@T<0-wkCFN~E$;`##I+U=6GOoWdS6_7G< z=nV;5Kkf?T^UUbRRzZ|rs!S+Hy+TWl1NB_EILH;h^?kxbGw3&zOE*p6R(QiAV~_76V! z-p31@JCf7s+Z+o_tI6@q9x|v2<2hc~nFHhNGok`)WdBQdURS;ajEdLsm5*V!BP)Bw zEXOaX;?CV(DN(MLwiDar4T)&F-f4xp zO10UU9cS{N4uNnuMMR3-X8j)#eYUgyH0n>VPghZOKAqYRb$NxEOKj+KzAl1!LZ@D= z51hL+X9ZKY+D=u=#xP*Y=FE)mj&RIg?HLC696t>g>3rIOwSYO@plB@PA) zCB{@xyB)jB%NjGp;kX{uxgF>`L?8`IB`fcW_}yG)gQqLnqXJiK=j9vI7vtjAzi0wz zed>BkRBd2y`wT){3hqWSRoY6J0#_oT1j}yPfk85(j)rQts+x(pBt$aOfXzZGydBG2 zXm$F9CW-52fkhV6cGj|_NFXr~B~$EdMdl++c18RfWxMi1?(iGK)qm_y9#`6|wsp%V zsbWH>y_e+(bjf;Q&9WLZ#mmf>Bfv;#KbE*=^de{se%!@SB(x^H$}F@kGg7p=;(VYE zvf^I@LVBrB16(P~#5ByWRAr(SQXynVYCLFfGQ zkIC!Hsw&Dnc~eQ9kHxMP0U>fcO7Bi&{PXAG3m|2AiS>+v1sZtr z6jEL*Y%%xNeq(tcaD^bmsO*61m%@#S#%e0G{5t|fVl>9t8dS!ViAxMO>=nJLtGIwk zo5Zb*#uVt?S4CZYkypoNT9!{{xZ>Hoxi80Y`WMOJ`>e08|LD=9Z`4KqU|*zEG(a`8 z*B)%v{i6^8U+gjv*9vng27ylmBXVhz{+r|Ypn_6XKE5ZSZZQyQ1kJ^8~i9>{?Ip***no%PoSmG(Z1RiXL>Lp@Rn(A1OdGT+ zRj0O44qMayk=};OD3x-5_`6B%bH})%u~(J7?ANdI|aL;7sq z`pMg|6bI#mCAPAc`U(ocldG@Osbdug`^+}2?7xj7T~n~u2Hgu&vaYjK6y+oKc@ALa zmK}`(LOOw?8Wrz{P0k4KGBK1P3C6kcO#(Ff(T} zJ>v^_m4&X7Im1Nj)Dup8S@}z4zuvgA=L5t~dvW{h%?W;)jBJMo20%xc?SUyo&f4Y3Peu48U6jXa(7 zmm-y??T`p6HqR*ptInZsUn7%`^eDSc4{a8XZ#o0_@g62fXP1noo ztnvHQt?=xL1s6jED7k7V+Hj!)NB;qtlO2bx%e4;4s!rvQf3u1h28>lQXSX~$?PWRK z4NIWodI!Z_rm;P&OKH`o7r>w`iBdNlzr}!?t45wybGsip$Zqye(ioK zyvtQN?~L1jM-#b{u<;OD-!)?0f|3RQbLoDwSda&rQZ2`p;X=$LTg`Zl!ow}{zCVAy z#uLAKJ(E7Mo~>Te(f6Zdn}yrk-HCO*J^Y7Bz{n_PfnN3r>m7(Dzems5Saf>2xQ}~u ztG?2LL#D=?6Vgj4mm?B;!xU%Pv+)A0vxv{)atgI>2*egn)Ubp5rhaC_u6t*Ah=k*t z&-596_h{w=?y*^n)cpJBvR|jhrJnjpOEjMe_R8Hc8ksW|YBtC$EoR`G1+xt{TOo`w zfEOK6ALYEae8`$dxA%MQ1n=(|wT^~@Ncl>q_IjrUv59kBh013nov%;mW3r>&pP&kj zP`yjcj$Rnso{^Olhd0+l*a$l7ue)H^dh!7Wvyac*Rcg?Rh12ie3bg=D)M4uZ*PHa_ z)2d*h9-F7Rg!Y6tI;|}xJvb!SV*})#6^L-@rMZ{Ix?R+NW(T(@B3r#1*>c+%Umn+_ z5BqYW19r1;hvYmD;Owp+=5Pk7AHP|sW%bO8Fiq78bH90h>jl4Rjb*TCJC$%STPUBL zHMcz?Y_q{tjLK}F)w4d=xoIIjS^P6odB)}@K;Qmfs$iRKpGQ)lDU(J>6*p>zOOF6Y9~O1nT!* zn67WtI$5yp|J-K~^lEZrg(wBphrw-Cd++`EMjFmR#{gV7!_vr<`Au_FyF=5j$Z!aK@9j;tLgWKJ zTo-n5$Z7mT0#t0p|l(R1b<8~Pfjt(=15ZM{T97nAAP zYc+QA6xs9*)8n^YzTZmMmDF^7TUrTKJ=v8Z)1=-S*!q+v%_5jmVPv09*bUmN;{Ukd zdmR}K&P$L3Lw(8Sscr2$!)O4+v-97p;{n5lZiUz#drD_cR5PvGb#95`^PLM{^23>! zUKzdS;HYs#oKfW<3y5+@k5pYWR}Rn_{jR+bdL+nJd=+V{A3sx;vw$hc34dSeg~=b2 zD(#5%=V6jAYlGF|$x>ur!>4YFAe~dd%?S<@9~yrDa`%%-Wxb) zhbQrtRqkq773osUXq*dB8%Hg-Fws7I%j%Kn2Q3nFeEi;qttjq)PoC}r?@*JR*pSG( zaiTEUc+_N5)Jc1~_Qy6r^fBAo*AKm@5zB zWeS9(P-0R)e$?odZ{x~k^6L194OpP_mgeSm8N9l{GDZ2+ZZelH^y^?fD5?LPqS4m?E|h>V&ldko(%C z#*DZPDeeWaqO(gu?u~5AITC%t@dAoAhI$A!?I>D({0UG$YF6bX1|c>5Er;0W|B5y~ zAinJ~U%u6!qxvEJjK72_u3D~Tz9Ecj&1poJf-~EHJWnB%AfthcyQS;2CUYVDbYVi> zGA~aP><91ZO^spn3{W^^LYn4UkJ5v>!-8M- z%}?ndD%o;kR)CFwnXbb5mcQ-&8YM=>k!h}QJh<)p2~ABg`Dq!c*1DL-&W3&JWVrWL z!Pz%IH}0*wJD&GL4T3vE!W-j3DPf^pMEYl zT{cJguPwxpQsO^aPHX+Gy?mD^qU=-~1g(9!mKbApU=!qBRRp?|@FHnEge{f{6ZHUt z)7u!Cs+2#cWlaD(8irZ}cZp_sO!v1SUi^O8t@LC8K+=y`h89Q`p!)o(0gzS1tf>5` zYRv>ZvCr&P-uRsckOPi*&sR9(sCUnz6(~n=v)wO)*`O}nL2(q*bbPw+^RvtefdEnK zpT-@hxf5bE*KaTO>#$`$c7Wwdvn;Lr(#DgaCi8^2Rk8YwUiBul!Zexxi3(BIFB94) zl$4a#mh}Gzdtdq2R?{?GN}C}b7HD&!S_n4k(SJ^;Aa{R%l zOJYi*Di67;%0}ju-~eLmk7M#&DPJT&ZeHH{K}nE(@gh`jmHrlH8V&860#W{EV0(-#`DW#$Q(=k!zI^`?P-z z{7_I0&dB3mZI3+y{2LyqCsAEp4b4|i!vftDQE^b8LXNFjd;JSqfdEp=Dl>n7b)X16 z;pCJcIqu|&)2FmbOy;J$wk)f?Zt8iuX{Hc7`_ACW3*utYQ4cj`8x4GWb@hC0MM zt_1lvCsbVJmX?+VP>gBENY&%xPI(3~2aiq29p?hovauQd!4wo%Mu-5Zw)Ilh)>5Ob zt69>-sPlVOT4?FYgsrS0w4xBrIW1!3l26%IC3h#8D)>bt{9cwLZ-|SJjQ_PK_3}R) zK56C>(=0oA?cE>(^oaHLi0~eej#{}9nz*tx3&7>r=wC(o)-ufPSDBR3Zb^QTi=iH}N(K?;qD2);V%lR6*tw}|L_KL+1lb2HJ? zm(+*9|MONVCRo3@pkJ3L!tH9C#EXB~J>p_ST@~>uhaK0m)lNhw5b``Cvic@27h< zJca`NAX0+|;=dZFY2p%gNKm<`_&jPqk z&%16|>3rTmlfRHYW_ZY!Hjr(Z9sG4sNIhlAp~bLr4?Y$;%@cT@o!zVfX$1Wk-;9bP zFr-`&vSqJstzznV%B;o?A74T9-xea70Pf~qA5$AWvD~-bQ>uD<8TI#*t|Il#{|ZNw zbh7N0!x?EyFmK}1x;S^?XC=?{XCf3W`EG;2Qy;b|I#!4M5j8YbrEj_Bn*eeh*LYo^ zym!j@1yIA(pDpsPUwG)@mJx9GaU_fV{D{$Zivrl$#YD2PZLwlu&!p(w;14Q&=Wn4* z@69RW{xWsqrRP4_DinYvtIYgk?}uP^u!1-U;c>& zs8B}h{l4AlV`Z~qp*n_@LHO<~+9z9V&?bTrp-xNI(A`BGL|CjHa(OVD=@;00+Ax2> z9Ff%bq8Bf;<8yR0W5lP+^G+o0+HLZghUUa3v@7aggCUwF8B3fu%79~SiA(oiCDgtF z*EO_NG*>1_2v$dLSSf0(8ho2tFs1UTeR+lb>_6OP99f!0*Ll_<{<`K&y&69_O=gZ; z1l)b<4pE$KN#e(vshD3^0-3X4u)LILZPi2Y`k}Vm`?s=!*l%afTc_+&h=AU-y&M)2 zbuFLJueDIc`M5=GsYPJs(pMT#P$FU6$$UgLemCpoqmZB>cPH?X5Y=w=SL_{|*L$w8 z=*<1l3j+a$Lut7zv%Xc@@#Q8>#rs!8Cd0(K0Le@kM(t`pq=c9!7AopWfnAOKdL0?p z3DVuEFi~k~)0-5jH=hVuLeCB|!5NE~cutF+_5|Z`8WNwMC{CcBsJjoHxbbszyK#d( zG$kbeN{!!wBNNI!ix7g$Z*SEIw;l7hk~D9Pt);Lv55-H$$vw}3C}ORxQJV#Th14v% zz^q4f7}%h({Yf_pt@}w^UyQQ*C0VUss0N0yAFu76=4&C$ZT3iYa2la7v3eK@I<&U_ zpazYsYXQHQABiM0d%(ab++TCv)@GY6crUSd!rXoCsCma22w+{S@`y^7)*C@xHhlx%{3^#|6$3-oI6eb@31CND0%?xd_Vjz757|BR z7QOirQE`76gdWcSC@<9nop)>$|5aY>>G#(b&MLqqKY#x09)wzx&y0Xb693l(T=s>- z!*5&sp6)R*FIb>whkBT}xEeOvqnLWvq?DC%FAe|Vtm(1Hi~cunz5Xs6Ud{j4aoimP zbv&b{!Evd@`0cs454kS=?b;`S3d9xK5~z~k$8TM$h}J}dO+>93RrmL;r-**55gHoi z!8Lv)YRZ0lPFGrcxBu!o(7;19sFQrHRn-P6+3)rG&&QlF|GZC;&~I5-QVQf7ux9Na zmQNha0}T(CEm4(E3H^6fJZ0OTaCN3OVy~0<*?J)Ke#?ZGeHXz_7v=9sp z14HYYFVvNPh6JT2slCyw;e7ej7dy##Pzw9$unNRwr`Ncgo%hyEsaJvj3%u0RPw1Eg zQ5}(CLGh4-QbV-fkJ3=>?W|hnwE*FBLPmq2^Uwgz#_jy_^0Jjbof+K60VJOvby4R* ze=*dzB`b`EK2Y)21KAx5+S-{0-Z$5$3iz=- z_ZUy#fo5@%{^XYXUTWDwFbxg}Od4>Im;Zy3eLU#SiA)gP(o(lQttqDh#aOHQ&sFtEf3Z_1ER0svFo5Xu0vn!nKqm^! zpO;9>iOu1#HK!I2t}F&J+3;*cd@H?Gf3)eL+rU(n;z@%$rjjdrMA(~1^b-wc1BfyC zOq>4rGfjHgzt`2U_FB&6X)(Nrj4GxkCpH{0oi(KRa_1bRZr)~0<+mb6#U$Nr%gDn| z&yn0XWxAmu2`yWkanoBg46Wk$PitbQg-%5V6sOsvN>|&(YJ2vo<9?2H(!~Sp`gy*F zEEml*=5w&bz*)JqFYPD=4w8luTFfMJluncWT6H6RNu-E>>*@97{fElYe6VQK??}~E z^@XFuwKIO0ld@dvPLzEqC-9#0q9<=CY<&Q#Xj`pYSxh3tsQ+(+)gj+`s= z?8RCh`fjgii*4{}jY%&G;a->wzJDo?EoU$!cfN0_VK=96UarOptsiN{X#)D{uo!jO z?8n|9k2m`B1$A3kDyBC7i5+k`MFt>2wXKT7dVHm?+I;jJx^AvptlZ7(69`!kt|2>%e$ z?K-!-_LP5bPgBz8ZvjN=M%@)n2z{Ng%`uHr!FzbSowhTs8!NiMHi+^hllm9Zr4En9 zjDcE?z{Y4gRmDqv*<)b`w@Yd@ zRdUkl%2-9A7t?Krd!j%N3~};3^N7t|k2tC1VF38Ng=hl4TZ~Y+UC;^oFr_rsVi`kD zNPQN|Kj|n2f8#jrSym2jEHlC7t-tJ=8WScNxGfV%*|vQw;3SAS#~kP`O68XQ2yDT)DMJ52{UxI z8m}r61OX>KEw1HVZIMkWF`jHGU?0A*IgJ=^s0?F|oQ&s_xAESA4-UfpKfMXG&+LB~ zXJRR(bmUF$sp$ExZj5ROh{TgvRe;>4MBovmo}O?3`oBrIm-L|r?|EhQU1?hDd?%<>I3x$rXmFi z-W3RMNxMF1s1JC{1s_%L_U43!3YFyJ?Iv7zJ};WckD?=axfb$QF9x?A?yf75E^7Cs zBn@96X=^9PFTqRV47Fq@^IO53^+vi9-te9XvAs!bq5re^Vg_TO_A7dfF{s|R>G=-0 z^lXZFW@CJNnxo!*+($;~P8tUWdwHHc$hCm3#)Nxq?l(>{ix~`Hg(l$J z6v>aeZ1bfG2O5leAb~I^@R+HqPm}#)^pZb)jc#CU>9k(o+{^xAzOfxaZtRRTZnGgh z^3p`spSS*s>co+EuVBz1ZLk!F;d;yT>6)>Mk1jdy4^5IKQbJdWSS}$Hf&9^4H}fe) zWQ-Y&LUb%GcNFF?JjhqX)2(bDaFt0YO*+IXLc?!QDs-i8&-gU_pNJ6Jfum0_)5?bi za=PrnMs|^o+);%O)R=9$U;ZcuG0h54fr?(F)Z1QL=k~&HWT-#vfrBZbjy_qAeyoz5 z=-HU0o+HMU{u6#TtRiyF6^Tk|bMrecW5ncN*}FW*Hb|yD=vQmD#`=4je|Wsu2i@Pt zDBh&iE4dSYO}-uGvjr1CF@CVmig|Ym7GwBaHTdbiz7EZ!;Wg)oc4b-#AVwd9Ib#-A zAtw=m!HPvLv--O!rOzK8J*EA7xG8UQ<7bB#uo8;q*V%Z+{xTF^9*DGjvC?|DU7c1j za!(9IFH~38k*&SgF(x#bK7oYV$^1NcwSy<6A+$k-uc>MrgW;BZ-(5e0CdUQK9CqG5 zE`OPHY89Xk>P8Nx`8x08M3ls5ba>4iZh#-%&X?rxmD;=0n~1sgUn(i8+K*Hb?YFq=POdmJn|F2$JKahFZmpx8w1T?Xzc}z0;ez=w&)-is$_gB6aD<=pa67LHlatpo7|Ji#U$o(CWx79(>mXw5wT@* zXMyDBKoU0)%&e}3*Zd%Q^o*6II~=Nt-J(au!CA71f$ z+$n_LbNshSr9*YazrX&E?y<^xB&ee(k@n^-F$BPbHtYW1O!y$`x8=M5|wCU)LA(f(LBo}S}O3iY>PT{r4@<$+?hl)YKZxa~?7zVpLH;lx00b1k%+ zu-sWV+^mPOG;8%qySoir{n{gEu=i)c)(@q~_8yOJ=7-F)o>|wc;zJJ^j&#kQaF@sD zEtU8YO&9aG`g!2wF+@+m8Sja=*)s+ry^77@;m;a}fh&1_R-AY=%H2+H%u}0w zyPVvEovYmf6>i1%4n?dtnr5TXDUP8TIq^FFC`XdAOE1lRz{9np4V4!SuU4XwixvVD z@+zI=d3I_Y-gHSKQ|ID`og6rrf*;|!)gL_Oq+`Jw0}y-HJ3O_@G>qbN-PQ@gQK-{`Z9t&e@{GQry8cmI(Ia2Kq*u3%}&ri9(b1^fd;^)cu4w|kk{e{5q>`V51Kgo7w zy^W`KpW*#(DbV`9wYbe@N(8VZV!mYeoY`W7w;rRaeXGhr9AW)9?8zhJMIV4l#LMjq z*K*0%fCF^-5NLDmJo69Jtz)1M(pEJ&^>ZdR3=aNOYZ@Di7u_T+uZB55c?7L|N-alS zbpb1<%N=K6*H&dpiP=6Mpj;pdH`HAoQ83t;tfq)3ReY#MoDj5<727kiQ{Ati4rF(}@|KUxx|C3SaWN|vaFCt!v;Xn@)=`b4p(3zoiO zhKW}w!=mODY))y5URbg4WsM>5#~1BfC#SAUDm|kG9Y!5!~6_Chz*t{Gev4rESQm1{IoGabue)7j&`Jt$<{L_3|NL<=f|d+l`ky=a7JhcT>Y8lkrqOd{jEPY$1eZLbJ_5=x2Q*#)6^7=ex|_8Zs2hlnb17->X@RZyyob zz1{m=aQngx`_vxp2snMn9C{N6JU%$25~fG(1efXW&Nl33va>l=$Ws|t3YeHfB|-G! zpxSYj0<}BDlp zx3ZA>#=Bq3Nbk7#i^aUh_nrwQZ;?Xl(F(xY+$;fKjIN)2O(@tP?;QL$hD07~U_)t~ zMpEzgW0>>HtKvJHxr0K*7cV|W*a^z=R$Uz3d@Jb+O}m)Bi(tS#ZZoTdX7}+jS>-E(=bKAdMQChi% zO_Sa3>IJbdvnQ=pI#P{r*E}5XtsJVm;f|BzXNkv(}l;4R18gTCHvDhOTNNfUu8{WW-8>8Hh8Kgj9Vu+=f?;I8`_THzQBoI za{8c9Besy53`2*eSy}O3no1_$(H_hjN$o{5L)k;MP8oipjLyy~*yN+{%vRcL@s*Om z>i8=?s;W_mx$;3IKbJ(_Xquf2{bOetI;TSEb6WoqXe`=NNs{8?;Xmts*a#hW8T1}uL z-Q)1yV@m06N=YSZPQWTQHZl3@J$h)qF|9d5O|J|8XF0qmec$ZcT)M+SWQ)-ZrUJpR>m( zc40nOBZEqVD`HyP`i`+`4u127wC^NVa^Xu%#`07lFiDdTTQc$t z&rS3Ju>8b#d8gMmN|bSw(#H}J1N5vs40Hom3fIZLTx>iRCacV#V+f35hjkt?W}iUA??qt7 zZ$^lft36wGqbRJq6{E_5fLO#w}-L-cMWHpc!6+p$n0Z1#!fVh*$@oW{=z zaofto&^D4Z>?|p?0yF62 z4?dwZOG{W+y;4$XH*ndUXC#=ZN0i2+e6VDWJQO4T3lyBInq=3J?wo=%LF8m(Es8(1 zFM77Q06lkuA|c_vPzZaByVfs~iG+sF((B9WMxv=5-b0`RVpp@#!>|dAf-rr+^lpI{TXPosI&u{TttX*; zZfsbawqBFHmE}_f>9KdZHiqJS*?3j-&iLs7)@1AEsZGI2Q-IGdyy9qh5`KUEp3_ zQJx;VEAP(HMx`T)xfL{s+cME%c?(58Wq|ncgqYI&Z31bQR;We{a72)UyYE~=&m$Vs zK86f!haE^~20e5SMzM}x-gOJvjA))&-Zg0W$i44rb>VsclI7@4x;1+05rNoZ)0{R* z_YS_ur65Tnn&ot6RNKU5bieOpVkRQ`IWZ<*IATvmhFGT%tYEQO+;O_`Sx`ci7Q%x^ zn8BY|0R5=+1UX!l2;Gf)@I5pCdjkU~(WFP%EWhRxH#$s{1M5dG$61T4CC#NZXxDn? z-0lB3OJc9E0fpyhiiugc0q0ioSjJy3bO$}AXM5Z7^Y*wOEE_)&SoEUqc~?;+AcV(;S@k6$k+83z@ju(@euWPrl%Bm->=!XeyC+@{ZQ%tglYn_9-dHnfzR<(qL z*$QS@-lxp;+yzTy#)4Ej)0FAU>lTHGRnbXh{c;Ln^#z0mP-$TsbMFPM!j z)hck^3}cMo*?F^1)p|U!lOPs)%&*T-;(GG@kTS!cko0RYwP$00-9?cBzleJ+de;J^WMlSdav(1g8d*B~J{mT23Ymo#|W zy#oCh&XbKLp?%;Al@|VS`XN8w=w|KP99T8q!H{ekJbMnKh_)bmtxsb8FR{qQ(QvZT zuDb<6LCWzi3Kvu&02Aq#-!#B&sD};sO56BV8dIt*OR^6SKudy^{a(nb2e?rk zrYGbnc(L-KIZkjo?MDnV>Ga3zRlFQV_7vuKW98u3a1)ZP$~t>`FC;9iz?jy$p3Qwf zBEtg40KZ4;58=l$HHIu|ntVhq#h&XAUU=Bdo8=}qqVRenjRmDxu=DWmWjku~Q)Fs_ zS5)@|s&j_eBpMh~Z1P*P@wynz&yU%En$jlC@XIMDppD|b@Z((oXx*v}`ETR*FM57n zzG<}bqTZ*?@ZiOBo>FN6MF=Z1Z{jG|nm&?mHs7-ke0%@Jb}|>Oj~=f&XEjb~n?Q-Z zcR_kFSfU=NM06$D^O<%wtXDh7!lPD2>_17>RFa}(|j zs!Yx$^qI{*}N0_nJZSWV7csnm?l4kwT zyvM?CvLWZKL`TTwrFoDqmYLW&?Vqj2+dgh_MJg{>CDzy;UIB-8gs;L7 zFXT-};i{37>^b(CUs;V}8{+z=Smta($`nbAbCW!hY`XC#QMhQHV}6y=6DfvQ-ERBWl4va7?UddRes%+Q&9OL20ue+R%t?S;pJxet{e^9ovzz&L zKVe=eVjHp2&`8inkF^dg*dgrixw}t4 z(D>&O_Xe;J`9!{N-y@BYqQF4DE+c$Qq-=Q%SSg;Yij3!~Cr+mBmK0UCcZ3O=m&%p#ZOS_v_Sx}9G?KvgEMGl5SyImC3@PE-t)J>-aVk3zK_s#X(B(JVoBw9;F3(yU?s1nD1v}xUzgy4T$F*?oJ~= zuKXC-jhzTgP3$AR#n{=n4Yrc`>AsE5#R2>FS?-eUrwj}#EO=us za}FZ8wPNJ+TknRTMRf<8M=Aj5M(&Af>6sjF zVPEGrt?{XKm^^1GPs`6UXq#BOju5*)jSO@&pnfv^`4dw0rEau< zo0NW7niql)n_6o7ume^*kg~+a!c(aKtWxRs{FbE5b@EIDiDS!-8$Y^|&oCznB7Kzn zq2Jbs-9(L-o9~SeTTM20FASt^JnKRvC?Ga|z<{^UxY!Qki4m?CR0Vj*rMXa=3b`&L zFRM~W%uP;X?ZFw4|4DIFaebB??Qj_}WJfgP2GJamTC%jD{h9B5pcJb6f`HZ_PPS%J z-cueuBQB6Z+g{P`08X9oUZ2sc<`RA8@~|u)-2;(^jXA^W#!#F{;pyR(>yK1BL&@@j zz@XV9!n=p@ZzdRJ4FyR%@Tp$SE3#G>%BUY$vcIMu(%FSSB}sVo+ZOjq6xqgs__<+B z(67>;VNZgOY9FfuX230X(?V*-GJ_UZ!`QRYg2OZ7fzl8GeP6t@F|B2(wW_Yx=V)`} zS9@~?BGD@saWf>KQMr9D)@LapA$9wg967H)x^A=WMM=x(ClSjS(293Z=^5Jg5FUcA zxOxcnKdOncMtXdlJnm;FRVH8~juw+6B3D;e-nQz^acfFnBgKV~1T31E&YOr2-PMM! z2o=pe*92!#qEVBmmR$v}aE~=bvG|mvDBC?ZB01ZwYpNHD-mMjVKBJI}4(w*Neu z+|&D#vBmEZfpwP0l%JnnW_Z?4Nzb^;=wA5r26?{K+m_|^|}}k#lGM)d;F7Q zyqCAenPqjq;ACoQhsP%q%~(f0O5i%Ih*dMWWAKg9z2ZIdYI=BVeE6LPi7$2FLIDgs zm_Gp0twA8(U!{7rgdQbm_OoqRT&pB%5huobJa9)ZWmyWBGWz5L+W1vHeGau{waYL~ z!TqUe5!$M$-XYu%>J=w3i@$YU$}(=UJpXW;X;^ulWG{Ur+dJdDs6 zwf_8Vt<-)5z?nhPqiAUv@#w3ETLI#i4at+OpOfBA68zT39(?54pGfrsUVZptdgy*Yr6w4eHL7Z8)m4lO`lABoB7gGX<6@`+VUi$0`Gf-Sq`c z^S@f9ap6@GEq4GRJu;&xS1F4okLwPw{^PBYQgZ(HM|RNvuX zlE(P9obx?Ccf4cuFN9CeHF z^5fMvm#IVaM|o@Z3d~iz zdaicNn71ngaBNP$gqX4PNWhBUY;D}lMGkUEWr%`dzJ1LdJKSTPl^ah0MAd6#*VjX{ zaFQs#M46yiFgTGWaw_2{$W@)e!}p6fM@=|R5oNO&`{HHBVt&KIdujc-T#zy(PmBj# z3+C0Yon`zFE{nPDS_M+Q?3*n?YSy(+)XH+^7}Rm)M!VXtZOR#Iw6D9-4g8t=fcpoh zT2}Jh0$w2On5EYIm*30uTzQNOrC?`(+YC7g4&UXI#o~L z2^F8eextsw%mc#SeENPG&%92`bbOy^}MKA0VI4M6QuV!EEa$hG?dDS z`X=iAIhXE8q0-Ly_Z_E=OnK7w5f!m?9-g!dno3LUya_riK?HT zmRj~U=+x}IT^^nyLRA6g@y|=VU>k7l^=Pi2;WZ?%^Ox!m$t)KwYlQDAgkHAdko}~n zk+94MY`?5-S*~r{4y#v0!9ozt#DBlws{U zM1r;_2iAt&M1$Xz?@75O?F=)+a3G&UcwwKw5j7~M`SjcC)re9H`MDF0F_&D9;wo~w zj_`HqiE<1e-eeOg+R-TIm`Qo|zV6;^9>)iSI$_Oc(N_Ug*Zwo&%PvGT(e^o(A82mW zm3bNhn+>_ozU5pPbX`FIS2NNK*|YzC-8S49+*z3DU$GMs{A18^HTeC47jWwZgE2|Ja}7diR!y$*nVtEaJ0~I16Z%Ys{4{TE*L( zYZ7W0feLSh!V`Kz!k%4(jCz=_$^yRP=T@|tYm$3M1Kt=Y|0X)WZN;}5IxaH2W|7(G zqdGiuxmU6qcnDyg1-aS1qB@&xWI&?}eO+`hyWO&I%_M=oM{wZneLD9;;CHi+cY|*s z=irbDiA? zS`_vtYH7Ls&^WbOX4kU7t5QY>mC9r8J|qvGA}`vSVDbv8^ZZ~jvKXIX<>|M;n|;sP zxu7k3f^Vq=XUlh(2L4pX{dx4T>~@UZ^|jxrSE7_43&M0RFOa!21U^57!_%EJYT?Wm zdh!j4)IeN+shz!SktdpJW4W@T2E)GQu683{9xd%Lr~hf{LZlx^mmdc3b50CSd9c&M z(WWVM&thmLzh^g2!8@rpx%GVgt$wizTVrgErKaWTMbwr8s%XXLu=1 zE{dKCL0#}yV!P_Hks)q*K6@|zJl~msL6DI5jsM=c03`pJ`?xgwI*YmN0I8C(Wo6p${Dih9Z$J#JXTmLYfR}y+)jGc2t-dr@f($$g(uKmxo!wYC)5i zk43)~Kr#2&aleXFNzEfEb7@{u)C{IR@0%L`;+Gqh(z4-r$46)qH>ASCldi|Ot|^Pg zIfc}{s1sMaGB+S9`;+kCtLJG+@V1C;I8veKu;j|cLlM4r=cw2;64R%r8{Qcltwvuf zQpM+$&&&9lo;bJZ!cTYm6r@c#L9h^So-I`J6VV#kX zA_j5P--`9{L-npDe1H@_p8NO46B_-;fS8K9AaKwaR~MBGNr=J3yW%~CxY@&Ow^lUPqi&) zI%>WsYAmJspe)xGV`w7h{SOA|&z^im{Q-&HjqA@&OhdtlH) zl<_>gGr2?+e}TD0Ad3L3{stPYefYtifUzAh8F_#_rqf`mUE~LTyT#?EqDq`PXz;GP zxx3VXxMjEZ;A|~(n*J1EA_GgrW6_y36@po2gV#LM(L9?VK{z@cyHlPs?&iCEed{3d zhK2pIz430ly|EZ&@8o2MZ}o0O-7Zj!EZJA^ZZqyjyDU-TwPSm20O-)r=`mPyU9=se z-|g#uvC$Daeefb{%PoD=7X_z&rpn?kUS(`|%SfSO&UG>Wn6gkFIrKtC znM1vH^6~8I>Q%(%eopZ(skgHw^2p^&oa;rp{gEPgqy40Z^lbCb`cQ8+1zTsbd&-h~ zhL7dt8CKCS#;38!odjdT2K}QTDT>%+(|j(__up2s7};HlarS;w89U(R_v@&N*a}8+ zgA_Wh2|;$WivjEF+0A|=CN2v2b7JrK)|On(-zLm78KIK4Mh&06E**5__ZCD~LYcul zfn~9j82xqOODi%^mY&ylRQ8|Ye|x^5Px<}TZ%g`*5%llxzhBOx@Bae&-^-!hO{Cws z1peOt_j)AJm$GPphMNQ_dt<%=um95+y;P0;>jaU+u*H}v&c&t35N=^YjI6Um!$uiYG)l`YC%3hCGJSqhZ7>EUS}S!=X!W~6gY&5rq* zKQirqdd(3}U#ShHaGS=MP1Bb(gt)?*Y>_1QaU_oEyKeUYj#LQ1#8JKWjBXfqa-BYt z-p%>QGIxc?bbEZN;oWBQDCMOy5y*1;mD5x8m+}s6I)mPY^^)1d_vNC)jpecQqXzyK zMk7K3s&_Xi3DI(zL7h#1%i z%xmx0cI;a_`WU9rK|9XtZS1h(^1@ zReUtPjzW#)Y=39HpE`7S z<-zOX7mIf`ss{13+a!NiCXB(NAK7@Av*X*gV@Ob+8ZiDQ9fkeM@M)3w4{>2KtJIos z9XMCS@k;o(9y_#JD^e`?(X5u5-r(@nIHh-ATpQ>pjI7bAM3eaJm{AS14FH_&qMkKbsO5TY2J1=-qXn7@ zO!QdCOQ2jO@~wMA<<4w@#U)jKzTvP)>Hc1C-QLL_TdIp0XedEKraWAajM0=BWhm-; zMNUn z1(@wwbIy3I6ZncrT}_;U5j7a2?0z7b4xd2iI^(USv1hSf+bWJ;qbvqV_P+WW3 zodM19kv*IYI7s!Kh}KaLpiBkc$&T{K652}bN(Q>08{a)-h9NiZmCe=Yqw)Rix0VL& zDM64qAt4)!UeI)@mi78IAH$qX{n(mZm03@seToO@zReZR=7xG<)LDh7@HT3;s;WE4 zOc|!6fnx(-_H6+7jYC#;?u*ndXcQ2(+M#_f!Rj$Oi9DK4B}4Tm+PQBo&fheb*iQ;S zT~#Nwg>k8P)P~QHIGA2d6h_V*r>U8b$sdd$YRqL{FT3>#oJpfhOU}wxRW+3T-01Da zOFNx1EEddLt8sT%10C8`RT}%El%3S6Hkfh1g=hQKZ+%Zi7+rt0%r4ZF@G=!n*9ne8 zvJKo`Vvj!?{V)znOuLob*q7m`hkCl}-MR-R*iilS+Lt;OI+M~9%gn)wn0LNYg2#!7 zIVR@1@?Et<_1LA>GsYg z-LHBDOb;?>F>q?wmgd+nA8)ET3Bsgv0^B6ow-d{u5FB|@A)8~gurc3D0QJzBP> zpO;#8I_YklJhv!Y1?zg|$464?S}L9*wm#%xtF`h7ZiF5ZxpGwJ)xKEFw$zXGC&V1S zG^SeWh#IfPJbF%(A^&npvRE{acg3+-T{q>!eLtM_%J1@9T#$T;iC_G&TktN1SoPezYMZb)L4c$j^E>s(UnJC((u5EhR>!1pQTIej zv_1%xn#gJ&rXtB|PCAk;&|Y=vk5?I(=4>djW1f+$vIu@KYq2~cVd{G}Kp_~+HUW5( zp~!A)o=KW!N8+<26q3YQrwjO#oK0xervwQpKo)iIO;!`$+%!nGdsX#G2;ZTmfQ?Dl z=O`w>AOM4}8!t+?$^XOx*hFYLN2W>L)+nRYC@a-}1NAp02T4$sNU}Z4#cNVbeGkn| z5mmYW5#__42ZUC5_fuaI((hP65G2Sy=zr<%ix)mFw*iN}>WyMc%NR0(p1M!9z>)65 zccjM>_bA=t-D+Rj21m(fNup10)niFmR7-C~)c+_&ULSi`yOJbRsNDqvC6PhIR7$7+ z$KG8y#j*5_qYoiKAUFhfCpZMRAi>?;-Q6X)ySuvu_l2OrgS)#f?yz^0bI$vFp7(d| z{R?i@RxwLKS5Nm$Pj`Pm-J?^&Eh_AI8Y|~Ia7})clF&HwGX2r&xnx1FcuEA{QfM8x zTI%w&ph*C`>{y%@J{1hRPJGd&{^KZxXVSNCqR4fHZ%HEBq^6a&0kzs#@{7!~_?Cr6Yi2Q<#l33zz3L^E z4zut?SjBU72(sY)i*9%XCWFo_i0}2@5FE3!@d6)gCxXPQ-}ZVNte4;9_ha6%|7~1o z0+CB}FpMj1Lv4J8-xCWTthl3~3cg1{>10R_i#Lr9^NU5^+WKa;tV1=dgN-cs-u|@; zA>Yn3gTqt(Jrf@4{sdIv4<`#x-mZxEl(euNXLPk2%f}^_Zk24xB{ej|IF(-T=8u-)*lRuD66I z=>LMb2)Uc&P7V=6e||@f`;ud}n8_gF!^gPa?xy7uKoh&w09A-rvUr6^env6OKXP z!ihL&2frpu?#p#&y=Wrs8hsn7$77;Dlc#7P7Gjv+JbP%rJ8s_y@BUXawb0mRX{)A` z&=lGJ#piz!V1@|b#WyX;SLG3%Tf5+MzI7FP9BA?^QR}!-8>M6&5D*q#pBNT?4NmzQ z!$1Zur$CRpFy_ILd|NjQcF*iFuwG&v3VS=)x7RV2-;Y~Gy2DH1g7Gn&mp86fNDwo> zE9^hD-1WncR*c#_vzmjfnd~*p4_}9_c(=T$*i`s688B?k!lIOqIC4Vya6hWBhW!C_ z97J3>bZ8G5F;Nd+1>4P{?C-$TZC1wqWXByPTv&L+C}TlKiR#vAa6o+|hxLV*UI%j3 zVB+PtA0R740=~uu`rS!9MgQS+W`v|*PUlrwn#jb$^PANiDr9DplP8H}TY}|`vB5<9 zZ)!$D;#a@*{57sGMlipgOV`THo2Yy+1#;^-C{#>X0VI`ob76#znT~@T@-NQKcO_@L zQ9)Svz(80E3$zIVHaMuYz#X@^I3$I~_9$rK)9nFd-+9}|QXG1-XiLC8xs}2RTop;ZJeI}k^3s>Xc-fJO-UFEQa zjol@MdUqCxhX#ujm;Tk5nwf_V;N_<+7Z0m9T+F5J6$GcuCYGm7eVn=_ zic_03TH-vQWH1&!uF1X5Nt55p#ac6+Luyfjk2(f>@rZh~M1R>l@U;8QOhc6-y+cs9 zn#0|i!!PupavXEHeSj|ZJ8uqq*iE!In#0qTZ6zi-!)-q_tIrAQeaIZJzU5YoYoF3W zlxN5x_BSjOVu%2!tub<%Osjv8G1HX570q{CKDKvU-j_CbX;agRvgkD?7A7MbcLAc| zUP^*BrO+ha*=rc5*2d{r{&}lebDP=2nN_gYER$9zKF zL!Tbr6^65(xn?-M=LgLNGd=0h?fexX5Fhgmf~66O95|=|1Zzr9dW$ePPuDFJ@)$%{li5eo-WmRxZ+A$(mY(_mE=Jv0x}o zv`OBN7OJ2#{IcJXk*>io{ln-)LETFD1n%mH>Pth?Eltu4KkjJ=@w~w4RZ{8cX^Yav zzv!&!Q{RdbS!y|WBV2Uwxvt(by1=i*+4jUj1qUVZc-g+GVZY_cugHq#RPH!`;faL9 za+t4uB8H^jKbU5Q8vwt&EY-GTN`I?i9vtrfJgDM`*CV5`rnqq3V-xOx06yva3im@G zv5z9#UVFYX7KTclbri$|;lQ$`8uAN5zu08JSE>?T@ij7Wq+WIhCTs)4n?8yY-?M&i z*fEYA2{>GBhpEeGzw%&fr)?RSolab~= zb^b~us@-~{(MK0rq{UESyxe8J7G|9k)LVinzJ2E%(?4Phl9yOb;KTiin?v)-7Zakx z&B@_{9}*tZjEnAd?Ak?VRsS+b1mQMxF+Q4K()c6Rv3@SBJ?@9qZrg_8ciG|JOsJy1 zDu1Y^If!=MO}yIa~4=b;tf~k~jf*DD8p=_M7A?q5d?-=TiIWn#9wpY`OCm9y zEU~>Hi_z_Ej;QtU#PXCk`Wc}*)cY8P-XHf#=h>;@=KFcsA6dveFSa%Sc>)-e9^tlE zm*V17$7v-g%;0}GMu%@sXN=x!#c5r77jKawf}ijrM)SKPH=ZgHE$C96 zcJN(h{CMgo3hO*#?UKSMtbErAzON+6KSO6W`h`AgDb>gtt6!FgG32BxTdnMj)8cJ` zVan+5KHD#UbuG`r>1d;`sf-MAsC_52JB@FsCR2X`#jpa#oxPsR~gHL+*mZTOOfpCGSH`~?5 zYUX|1@4jwAK<{fVCU5Ym6njeyk3sKI>kH}=HJN?Js)r2``WDxn8}qFsqs~~`{-)wP z_{OKwM>>7VII#1CjU3e{ASR)SS5Ee_LSxd$gNDKSyievi)x%Wa>{tQTEJ2S2a(;M}Pe!iUr1L zL2XZ2SjQ6Fo2uIPuWOO+eUdelDO)9xj9clPs~Pkx2Edss;hwECbqSs159`Pr^rjfV zp>u9rbB>dp>sUB;p&bXrIiowwEmqpYu@3lDC7VmE40Yx!SGkk*ejVS)Y`u?3A|LO< z1d=No3Xlib4+i%a1%E8tQOcA}+PS~@0>1v+^r zZSj~lO2VI2kc%@-q&n5*^)sp^koWNnQR?R`MVwOmRHYDiQ~bS?2B3PZuY*1c?;>+x zNdRfUAbf1>xnJp|YMYmF@pO{b(^U^_TMq)7)9j%T zdY3q;Jqll9jT#}uhng?nveBp%u@p}nW|qc{6itcHfu>ME;mj~!mC>wjUS^5^nx}n7 zDoID+V3nb7c*yh|N;WlFL}q?=i# z4cYmE{u)S>1=`=qiXl(5B0+*a8b&Fz=B(&AJD_r8l8acMm`WWEeq!U=J0Zy$ z+G&8z2Tvp)lzm9qoRp#WSs5NsAEMn=?{HoPxqwMk>T9KUdSxg&Zd8@qXD(RIF;8Nt z(9TR9pk$aC7)MRO4O_*Oef{*m&{!`!uiU>lu$&pDgtI6*UYxWY=`3L^fb!U+4NSFe z^K_jvoi)E(7O5tMj+W$M&LLR%Uf4q%J`6h9qJDBOLWjz*^RE5q_#JnC9o^9hLf&&c z^-Q{qwX@f>Z!K*Ujj5BsQk3haNbh@E$#G{Q8{zH-DyhW6Q1w((;%REGK8uJ}YuX-h z+Dv*`7w!poF%z_pCy7*1@0hJD-A=nRG!Z=2Le2wb^mCR^$*%&)FVNcr{5s;Fr>Yel zopo2m>a%NGX;(W88nn6gVjH|a@tKA-*?RC15_XA%&+kl~IHBn%2JY_=NhU8(E9D;! z=!2gv)pchOFUG^jj5k#wADXV_bCF zvj4iYk1g-|@N0j}cu|r1nUkg(=Aj6^%$Y-0)sU^_f@-96-Yvjd!-rKvq{Eu!oLEji zq%lT9&T&|azKHGUf+6Z&b@qKZ^VRXTQ|z*)I5;vfpG8Z$colFDBE6Zh)T)bKl^%5e zu_UzodU*eRUg`6Z%gOtFDx%)rV=Q?Q{Onscj ziWg};x8B$AV;Si>=f|YV#++!eWS&XZoywxt{pMT+K%-*92Zhvv(m;AsH;=b^Dm!8=A_FHaCD^7!0lv&$Q{ipYM>bmWIFg! zP(K2`Kb5MIW`+OpVNFG$%G2f{9Lu95FGY4&KXedn(4CS5Aa_r(hET~84;(7eC7FjJpY?JSgeoV^##Vg9wY zN5V7Bl%PP0km^{E{hYuqu&i)Dsm1bD^N4dvBW!7j;K}ZeqwIwxJbBI(74z|>_uI|5 z6*Op!rE~t|Blj*%fD?CT3%^}leevf?-k9TTn^TbnF_arcYz)>P4b*eEyIzIXJAYw!pL>0_23< zeVoWxhCWipOS`zd1NmB@+eJVKEy&tI&ue2R>@ATxGXE4PPCzqXQu_g@4&4aJx*u<~ zry2QP;^s)^wiE%f9h*F@sk@|d{c;CG;O~1t>IJ+HIX1OG$QP&Ja{?>4pDlb7=+uq! zBVA5?z8fP%R~Ut@MW^tje;Vzfc>=UsPlRhc^Zu72xIa|qqVO&rX+rOM-QrgW!~5YC zPR6c8X-ofxS@sP)_=4!tz^?O+2(n-a+DX+)p&QY(;o*i&=)(02dfTRGox8iQQrOh@XZQf)tMzIIE?DZ~11_VSNq za1MJbD~+G#o`GLEtDkh98xg$EEk{t+Q~l-&-^znXY9t2NE*nu~@O9+N%Cwh;H{4&u z<**UWfK8Rl%&qK$t=w1T-utJ{ccO3VnD&M3e0Ok~hpakv+jA48M?%bA%xSV2lxHM; zR;u~pcf(8^=>akA=Q;`nfEq*JWjsg3*X(h#%(vw@^VqyTdjHTU?ySk$!E%wzlKwxM zYzokfeJ6)?6CYEZf^+b?{HZ)y7)jhHWyTOs2m$SVMQ-o~CvK@bsn|pELBAQ@@7s<8 z{#HW=6z6wqn%-cWPSN0sY}>_OuK9nPe2 zRtMrHo^V}`BaE;N%zy|6|6xGJ5D8QKtPMViQhx?b-}&m2R?wVJIJX7}qb-~mGXYdP zya!*ro1+KNK0K@qPew>%n>}FS&zzWbm(5N%IqQ^kmPGxF4{JRLzZ0g~<7Rw0Y<5Bn z{*8+epyj1p^&TDBvvT^a()OTKrMrfOaaj#$<@u*{$MNvgoaDX4_$Vop^X&BI?78|YSgNKwn+>Qi=geU$dVIFD$oOkW#Kn|+$y#cMwa05-&C5(t(75+` zu9?fKa)E{#RD+nV1N7S>p(y>?s?!EKpsXx^_q4pY%p*40yX_colP3XB*!UgTOMFr> zu#P_Lh7eER=0zn;gw;-erH<)5;hf9UX04TD8k)FNx~rRhQNw(IPvUxUV(Ini?+C75 z)!IbDfQ?I4o!t`&uJM!i&YpT2Olg1&PBVr}`k{B$5crIK5FXs^z(jci^T-cTJ0gZ9~ zUomK#P}5&jFkTwh2ypFrR3)?9qebT7*KXx57hYmuzJq+FtvV)xcL8wOKE2X!zVo#t zk!SOsa4_GPYZ~@LL@Sw2Yj!1r)3MqG6R41HYZCT6jTtKm?NnMu1v?iME0_%v65`28 zM|%P2x@McTg1AA-QTGu@4hKNd=32S${GN%B6>l4qQuNxFMFfm#^q&+W*$)pD-^-eQ z$hkMwi_6`qeIi6sxXz)oqOR3f*Z5h$;JSqXiDk#*`Q`}|L1{-59IunVa7hi?TXb9N z3*GLYFJrqszkXq}svsz$ZgREkv6bQZo?#sdvDN(DFQ6d9v5uiVyGy*s_OW! z`(TN#u#-;BT}JqH5Fq)CnN#s*&07M^6QF!dXOf|gj}O}GlY1u?w)etjF0x~}D@who zq>dloT8(@vb)OGuv!i(;Wd8-;YOCMihl?&gLBhxB9T@8P+&_k0!5VAB-maQ`c8Ql7_$g}OlN zEqpX2p3kR@Gr|oJb_Rjh}PwPW<&48CBon$DExIiqoFV z%v3#`&H8>f8MumEpDjNf?u0H`!gyoZDJ{VI*yLX3wIIorR7AltGBAkP-v4E%CMOwt0cWbB8;u;$^0+Z#3CE*2HHUuTyvsL##$pmQa-iloAy0 z@5d;Z)yrRQ+tgL)?tdedDR3NKbc%r~S(h-hRCWs;sSx5*JkzxB9QLz;J`sxF?$^vT5 zf`w1~;(mfGpZG)j48#!CS&GW9)EAm)kR1*oLb6r{c-*Eo+ubp@xbXCfli%ex%V6qw zf1u)x=?Qi^J08RfKa!b|GCb}SKP#@E#fnu!05Bd(*6tCw7aL#My-K!`kM~MAWWciL ze7fy|=~)&~1A;zk9B^*CwF5apN$+jry#QW6>>Lr|sy(HL^;+Ar&t|oM$JZU`YEmj* zQ5bS9^)Dg4=>Rpb_RGgp7jEiqBDu<6Y`Su+HOSc5lK=5QJC=R9xD#~!95(Gs2x;p6 zrXBZ&nr&se9%kOtVVBlV&W#6ufriT)5oNzPqH5I)EUi}S9$ahGp{R(ka(tH+>C^k- zm&u!&U|fS!6c_LY5_{Y?E9Y_rn)%w7zpl$8I)Ew1Kuasn*7HLboHbUto6wHUysrbV z&iz8uxI!ERU2W_Burr2fdKFr%fN%7WMZs{uYdS3~51WqDDs;(n_y2hbk?6erL7 zQlVM=g_h=F{};a+dkh&MkGF&Z!&3`>OG-DCQB_w}0(>oyCDH_gO8rG?_>G^2PUA7h zW&~oB65G}ovp(pD4`StvuQ>1XB!Ps_kw28X((BHfBx*h%dO!1r`F^6|fJUB&u|?Y= z31 zMfBTdRt5P@T_a(fdwzJCtE<1^>5zgB7gN2-63vVSrYk4+J|F9wNkdQCvs zcQXRr25nj|&5otI(f~N>%Q+YQI1wk(7F?`3ZiP0W+@3zm&}s@eKtYN!t|+q)HU*s2 z;7%n!a!d~oY|%M+VL#n{WH@c7QLCK+TNDi(Q0bN{+w?tvVf&MRwFwTt6nd4wN(fF# zUY<|ek)_#u)uJv$!f9IQG?*VBie!nfz9Qk8IYF1m`-4wvMQ?PcgMX*+;^(!K#_vqW zOU3<#+L(Jw-Lz#o{NC|-GA>-C6<9gEZEo5T$kwqOsQn<*)Uq<11l7?4B!b(>)w6)B)hd zMpx$ML;a6;o)nXEz6@EEFOMf_WQf5$GAp{mCi(sIpF!=%Kx(x+IA5Hhjz~1;AatHP z@ja->Orx%XZ%gLr#H~#aR}6%Odi%Eb>#FUMj=dz_2O)-IHJDPAeOlfvBst?ZTbkoXt{CBfwfiaY=~o#qY~7Q@rkQ>(ZsiFjgRBo5gIDTU zPwUDC*&nE&(ZBxCxkKp!xlbxbG#`h%d5#AL%Wxx->2mw%N^X{W$avvsDMhnmIsUGKbsG5y#nJcEZFD)d$uP!45uCP zjFnzk?Le$mk0$M;-?yL<^xqeaKj~)hB3Ijv z4@|mGc;@h}C0`mSs#sK84`NuHeMTRAjJ7iBPmZp&RV&S5Rgl*R@oZ=pU>}pMF6uV< zp`s-)CeN^)EO$XrV<>43k^GenPQv9E-+S<5f~qW+)rbG(65#(F>#Yn>rqo$+^C7R4*(x!}!| za7R=>VPqQ20Mf*7nCQYCC=nWPh402>CzZ&hV<}Ll-if0zQc5`FA27+##i;=?L)k4# z(TWiD@Q6>p4RLRYV=HXi8LR*{d4Ys1-ESPfIy={J&TtelY> z8+ttkSET^BV%Iu3er?10oV4M73l)Oq*DE0e$?0M=c0Mc+OaN>~@>h9h;AhzC;pp3b zjy>Bt8((e7#i<9W7(~*00bl>wdbKtI$sBCYY71)Lr8XHsJFFw~EA`giH5^#zVS+3f z`MVT)`mM!~%Ay^4$;^P>EiunpoPyQQp9_{7;?*aU9cr=_zewLTpo|Y6JJT7f*M}-< zPJ3wJxMwtYuYGgUAVk89O~MmZ`%Zq6ud!&HxhqRE1lO3@^}Ro7&Tt6JvNy)<%D$7 zSrOvvsSe8+z~vEDkUK}QvrQv!YUVLwmy%t_Sx@!wi%l5m?l>pgWmztEA|-)M+PX?o z=7=@=2m)(ed*Iqk@&VV)`-*n;1TSeWpr1AkGe)C|!o>tmGCca%oa1;S`oLh_)-1Eb zbbMG$45jf`>_)a}A(xrtgf1tPp@iAef^Bhi`O&pxAIxrsm{{B_Df?O2VFyeU!YUE` zuFx%wC(PmKF7$dTAC#g-{OrugC>fmfQ8FJLKGABmUN2YJqoCc-cQZhh;prLLGPC3Q z5~~GqeG{Ie12u)@WQQ$@E;|}Hb!G;PMh)rb98=lN-a?iFT-KagkCt(;jD{8f|B= z`1{tOR6ONiLaRPy`ihZ(VZzYrs`oodpGq;wrsQ_?Wb~85Nw!>uj77~@afgQV1$P>% zRe1>$CkmX5;-M@@=Yh$aF=Nl&Qhaicp-h~E2uvpD*2!m%iJ?D6&g;s?i zO8uIa-Dt_m3tlMBJMmq@F@Up%uxN9Ix``G)W{YNUFg{+VU{erH8WU%s@$;|CZSCIo zzE-?2|f}rXf2;osGyP&n={|i3u8E(OQDqvv$WJ&eK=P{3up9jMv+ecdD3Z*6_t!p74!W5SVYpzG)5uwmyGx=i;^opnGTmULfHw& zs<7g=e3MD=mlTK>QBqjg21NIt8f?{7#NRiF5HQm@uJ&&V`HWtce%t+2?cYSXEIsJ%}kXewb(k zBDfny&K;LYJLiDa8! zcTPr}RWWTiQcTC3&UsoKloZZa*b@(*VShX_r-&$OS_oreV{$*SggIAEIMOng5U|EN4sc}h)V(+ufaCN{5j z{M=eqxHb<2R*zQ|WhS*M!+UytC>dw9YoHCNb>-Ie6ug|!d-(y4BXg$r;7#eiH&mB> zn8`B?97(G55`?^3+c;QMJQ>D~c`X{Go*Mo_gtGkwqz~*))Nw^g(1`(XYmR!1Ya{4C z3pM#6y71F*TT^{=@_ieWuJ~EoPQIpA7wJuK|4v;|xgUk+eDjaF1e*bg@Cb{GhZ_+W zLN4L2hdA*f;xB;i>(~TMh`F2 ziPajitKTg2_7*ff^=>OpINieyZFi9iPP(FuyAAt+xM5yCkQIhrE4&GO7uH^moUOoz zI8BwlNR;do&jhrj#(TQezB7FCQCx>qR?E)~8YAY%(ON1>sqRL*6fT4d(&FX*+Y`GQ z&=|ZN^Aj@oy*#F*FfsVXil0vCsDa`P4_??bb9kZ>^m@zLt5%+T1g*>|&o9X`Zq&7b zEH^hZU2Kp*&;7bh+nbsBdB?p|t7m%#_}DUUM}%em7-Hb55T1uA8iTP+cSZ(5k<;<= zhVQotjCcR_b&$g?GxUJ zMW+Mw5Q&mswN;6ygqydmQ|A7;L6z!VQL8YY+|2#J`RDt(DB2lvuB#y6?alj9y#Oye zqMj$OK6xvXWc>AWKzy@n{S*J?`_8(!l5k6y>h{Togt4f+$~BKf#o3P?iCe&1OkDcy z2W6PR>dhNvG&4_67HRvMdh>oN9GVz4m@6Z`r>T(CL0yCCaiJ3*OIEZc_5@9*J{;M! zw)rb{*R_}v(1P?=dsKELU?cYX>vOGBdlzrVSshLb(bLtGWjkjEQ$C&U?Ha7m*H!v) zEwlW*PdUg1h(Z(Ap~7E&ifLTm>L{SR6F?5EiNU%?1|R6Ppzg}O3F}sO3}Zf=1XbKk zOfizf!Nw*E(~S_7KYU)Qcq4MFeDL1)5=z0hSU4WNG=C5I^nw`y6#(H!MHZWgQfMkI zQVkA@B(}80oC2X@pRCG_<(D^!3mL?}RF~o0e+;Ow?tDAsL;rF5m_Z&;7AldmyF;Od zVUcM0S!pe6{6iWF6}jBIQHncEIE!-U>5#W|tk@g9vFjzO=q zC%)-ypfx1Ud-*8L<5NoD6S?FXt-4fVUitbw1fm$6*T-a@_u`sg(BTL&a|Jhzhnk_{ zP7iKYc_*T`!EIO8yf|g%?1xI@sSk3cp&E}kt;DQWYsQC>lgeg{W8;*RB4In^dFgGL z*ORPxWeKfWr{5|Zr#m%=b_2aG6W+>;p@x4Gmx8-<#@hft)53Cua}@+}2*i5Qz4o-K z3NLBh($^ou9W*F*6*>6d?aD!wr{cj8sw%WP6Pgf_Fyk3&-{o(JI3b`C^UvBp=HIM1 zacK;EMVqYg0Jl~p!Da6|WE~20xQp-2-+T%(0zJCW+`P-}?fWQ#%*FJcpOElbM3mWe zGI0&j_)RdQjSUwQ-?tPbMdtW(OPgp_%Kcat?%-c<_`Q?_q=vFZ%|uB}`OkbA zvAfhOeuiE3YQ~=1E=+V(%cx*`2c9uiqQhR3%C()QWk=OS|;#*SP2Cj6^G^nKfs@YTm} zGOrr73FCdUJ1-=tAQYc_(c*-wQbN-hyunVO&I;@{1^#Ik6+!Bk9V$XEk$W^QV+hCI z&Q;k@tr%lD>986KeMfzA&tBf=NI8<@@zidRPOJ|1Vl)C>qom&X{66J!dwfYh0;79R zCYNR)fTC)Q{O@hMJ+)AoNHxq~e+H0u4ASa3&%u)n-fLbOxp0XiHBGs#)z<{#?ZY}L zS?{;p3Bsw25jiCi`V<)cRF8jGf_R7D4WWmZHZe**BPw`#OZu4}l|RN{t54e}kPj~q z)SGvYbV2Eq&o6+IM+I6m8B--JHroBJCqec4iSYTYff%U&oy`#r9VD&;en#ZENP2yCF3%^^q zOe_OV>7bXKmB~bHPY`M(gRxi~R6jrmgkNmiOuM^;VCv&$`=5t?nLA=2DX8N=AR75O zwJNr%3d~DT>#$-NnKHH4Uo&9#Va*85_JfB#w836n8`*s6ZMF82U!`<>EQh}x?`}G2 zxgZa#kr-;^k{oZ;opB^J;v{Z1Mzx{5_r@BfWGvrH` zgxwwiR4*CJ{OC95T#>x%ek%YpRo1|mayD00!UCN>hRpF-U$`DpNcH6f|44>l3{q%q zj3c-VX`}aP7H3t>&3X8CJ~k%sbf=NxaM;h8S31Oz_})=jRTQZkBwbI1QP?l*%dldh z2aZ7i$wLNAd2Xio+*roq@l?TIF;6yoC3S~Q_?v_8=_lu)Bi}wu zp$xOx><3mSHBD3j?>!%wj<{aj(0B&AKrx-K?y1fbE+j}%`hFli!1=cfUpn$TVam%? zQ7mU*uD{+4RYvoP=p#$`SVQB`#;TO%py>=R{z#n9)5_EIMDB!K+?C@EU_K;!Gl+Oi zY^Bc&?ZBeokT9#Ekyd|;`^5!^*Dsp>+@3Y`Pz7tPZ!}Zl;X^CWqdggup+9UoM*ue3 z%L+rsi6V21oCFjIJ_# zskV8rxGzVM3yHgtVGrqtEb*zF0PKU5Jw9f8wbH7pIPVCO;$VP$Hs)mn73hwu0C(X+i=B`@vB)V!6Tjb zx-d)!;33bs(7eJxxgc+tF}E9?R+v$>iSd>TCAS!OKgOq|poGIp=>7`b=5Fu94tLs| z_pWQDE{#=I8&14|ksVUA_K=5ZojI41undmnWcqp~!m3dty~8f^-rodV0gDI{g7LOQ znuGuW60$4lwT$v2hh>w?JuAvQ@ct(9a9>0K#Keo5Qtn?k5D{H5f6j#{-Hi(hUdC_G zh{iO!3`f`hI`cmhHEMOeTke+UF)sg*k{_p|H*4k;kWB23hBmNlJ&P(u+@% zEj5w5<~s(naPc=2!*2#!Ffp_1*J@K*G2UOe+b}~LT$Tw@q7RuF)ATfPa z6l&W} zLYzW7E_EYC?IMI|4C>n(A&}PEyKP?jYDLR*;Rb$99c%pn-dg zKCyk*D&WhG->zkYWWhRCkp zvDH!lvJu}~!hGrZ@YzAe6gNA~Bg?OQ5+a%q?&BvVIJDE3cugGauaEVbix-7&$8K>X zQ_NGsToO=cWml0*zl?@FkvLyTj#By>n*xbi`v* zeK}*ES%~#7}7q#I0iG9O@ zWegNUsOZZ%&%B}k;<>E1B#1fG)d z21j-SeMcIa7M?rn)AndkeLl%{?bzE@H%ykYqogN}C%&;AVHF1mS1d;?wU{d9@*m)G z0)H5+A+}QWHt!HdeMWK*g!)hgN$_QvvZ~X4pBoO8hu_e2n;bbl2e`R$$vXaaoH24c z?8D7f`gF-Ba=GCxLVu8@TeZZ`%5=gvOXoH8r^U=h3n2J&1;-x=D2*wfJpFp?-jW}T z4WEe=){szDP%-SL4e)BjuMfC!De8uiXC=_rjlh0rgB6Ov%@XfL8xmu#?ff2kgu&vF z68V6J5AE6Bwscz;oWDvsW-I}N428c$zr7m=L%S(+i4GYv8C z$--mRREUj*ZfzY;$2x9*MhNRff|qP21z_`$6Hv~j>y-7vtQB&$5F}V-9~88 z0kGz!H_~k*9@j!b?`!Y2uD{uxB#`8XF)Aszbf-7(xs0w)t-PBmgc@xHWcklqGNv1k zrZ{I-IvS!l#@wTFTtYA1SuncD;%^^#)!_VURJ&AX!)8qVg5%NbxvM`NY()!za=Vi0>kInH?e43NxKPivbC z`!9DL;u$wu+>y>^I=&%ulj2g?2x4)C#lce@)Hze-V3WIS#;ZHBhVYO$zuNO~8^x)J zG1gzx6!sFqW@{l6}yYuwTjo6+L!2(@d^!A9R4^X(kl^xUL? z=m>1|d}E$hw{Lf#oUgYt#k9$;W1+8xI1{ZJvhY>1prwb?FPGPM>G*R{HJyUu>6@}w zIpLEtjZ^woM!LMdfAby@; zt}{2UsVIugki}UUCtP=xTQBzKN7s?_+!bKV`i;qWb~C-Ek2!-ecZO%zWh{w!`kv5f zlftczRYAe-J7eFsk0F>(jfW zPV=}EIWqLR-NpCxmA;t^jJ`b-rnND4f+ybk=W<*RU5tvarRm=f9(GRIT9~@?^%QL3FxQ=qfe&W6<``^TiIi&#>Fa zSMo78lvbD9N-kfS)^yfYRo>wFtHQ7HPtF-Q}^uOVBVdMz;HBvD&|If{dH??j73fFpg?}1dgfq432sBWZ$4O!Mw454(T;qwVcfr&7sEGy(fqS1X}oqGdCb)StnX@1!8ys9w~4ZOiPRjDE>)6$y3UhjK&!Z3gxj=q3?AaA;8 z5=ll?O;N#7bo2DH3KJzAilR9NIiW_3b~0RhG77iA*mIBLyH}eJK~4B&q-bd@ZTOtb zwWgaFp=k*lisX(a+}JJnGd{P=axomGFx4v#ybp20`|E61?fooioQ^21F!}>mP_zg2 zZ(7)yVq|h}8p#W3M|T;;(K}OZ)Z+xgxx05p{;>dL`>pUDF|_)7qecp^ve?DuAJQ26 z>ZgGdlRIlpguMb2Rc{Zn?AU9Tli>adCKIeZqzcb1r#wQx!J$#g2xlqFR4nU@x%tixXU`|s zo83y8nAjF_nz7bYhhCd`QQU4lQ;Y|GK=vKWZrGCRBu4_ZdLY$TeHR8Ts?LPXFHU`ioAZF*vJU_R?u-;~)CUT+5~UA{B!J`FYf!Ua_!GI@W( zvt?RxzCf6sc7CAbkQxsyOI&3&Dno2M%MCA{DH)s67klPetI4ZMInTa-niSyT zBzL##T{gA0)2RE!ScX;~EndAzD27(NQ!#yrOJ**{=u-F?;jAn2z?m!3K-uy49Ejzu z@5=<}c><&bc$PhD-NyiC+scDykQIxi9#po8-uKJ{`@+y)wU5&7{?4((Ag+5Kq{ z#5tL)G|(tctGT;?mA`>uKz{2<)P+vIbxjR<#p&jVi0=;KpuC8YnDC)h5xswPjRV&I z9A8dX;?kB&OPmngQX~bdG?+Ikv z#QQ0s-!sSn*Cc-GSag*A7!?_5Xr`vZU<$jJvh)zpKuRb0!dL@yiX3yVX24le0J#FouZ9llLKeT$|p@bwwfjQ>dF4 zFG|5z_Hgi%;T+%o3KeMksrWh`_JN*Up!Nfmy9wOdx=RN@M8ulY{kVehIRzX2lc0eD zHEo?t%{>E}f&|}4R%amTpFufz?`{x56e~^d{F3#U&3&f}`{vEvh?~m)dKjZxW{$&ro0Q~<+gw1MO?zevm(W^_V)8l42`uCS}1S~$U`(}KoKehEv;5_y3 zTj8(j`@0gk{r`%vWVTlqbjSq&j@bfl?i{8lOywUAt=}JKIMl}bOKa@>I0LyN-2$iN z<9V_=EUxroD1KLB5BpexWhc!%xRci*eW%@=FDYxB2fa$PtzSt`LL)B?#ur=3DhBWF z8-nvI4@-OfVI#C9c8y&HndR&ALSN_tB0>hMk0*D=DQ&zMe{7d17DB~N0@a3|7a08q zgPD#$;$QAs49@`vH%Ppt+LKXJH1-_0-}G|3|37rSbyytDx2~Op5Foe*cMtCF8r+@W z?hXTl;O-DSxVy_RI0PHq-3ND6Bky4F+os)cdHyb@ja zh0hsLT#Ld&uTNvS?#7T$S4{f4DZ@SMu5x$Hl|OB5M1-H?EtA{HgZb9u-B)hSrc0cs zbfd}~6VHX;Rd@#JIzCyi3=bqTK{~|$bgw?{buc+RRA((Y;Z-4!Fw?}L^c};F;IIa# z;a)WvV^MBd-pt^@_$9df33vvoMrNl9xvbA+34Iv<%N5w)Oy0W^=9k4yE?7C0ofIz} z5tWZU(c_=(2ZigA(;K ztvYSs^KI?ZA?#1`gw22N>1Nq*#AHJ-Tza;j^?E+$Up}Lr z^h=i+9ACmadZ+j41~WzRQV;meMe0v}LCXlzUE|hy&pH8Hk|(+Z^LDc6!FF%mc`x=f z628#+1&PNHA7y0oP5{EH!9`dUWByJ0L9smz6)Ok&Xo3B{hoI`3OULJ?{4GY)ZL>lY zqB2T8p5$$VJ(U;#kN|3`3#E_{bi2!Jo{9|hCaC>J76%mqRb1ytkO_<>rcrx;{3*yr;`!eSkuc3hE zK;y-TQ==E033h~XKOcY!INl(Hx9~`FpLVvk<;42S>i(qiMe$CA&|j!aeSq28@qHSo z<^20A@EGb#;Hk6T-KVgik+;X+cRVrQ-kx;jq3U3nsWFDPGg?;dl(KM%?~DX?4b^wb zX|RppJ z-_ZE&mVk{QpKRB_>T=pc$>7?N2|iB&Pu{B=L2Guk_=2&#LiqhjB{o}uoknN2Ic#SB z27~}p<5B}z6VQJ7@3WVJUI-C%2$ZS!+Q0>}+#{ui3;+5GpP zGjt`59UK<_8#X(RDmiy}ul2_<5L#!?v9jTaJe!fqHZAQhp;u_Cq`Ja;{S%V;by{I= zzPDR;$B3OSX6fn55fhxR-Hn)@EYZaP3~2g-n8?qQnd@Z@xY>?NwvoH7u`;7)%)7`W zO&+W1H+8}lAFx#xntf{mu8-ARlltZT7MC1x_dPP7SqgP_{}7Z>+R0;?`qhPnwcYOv znFE8DgU*ZdjHUn3OI~^}LGn!G%azbyo%BwT2)wmWfuXfA<*z4JruGw`S%vG7f>+j6pcKh)Vn(mW%Wd*C7_Q6>kj;kNyo}9!Rgp@OYhj%LitZEv~w5gcSB?@zKtoE z$U0!|y3_Ox0;0r(>{J`+%hc3u(8@fgTnC?soeN8!8Wr`ho*1AW*Y$}s-1<0ilg@j= z*9GI31+v9YVWhlQ^7Cs^9bq+*UPBqN}h1@(myNpDVr2Dy#xJd+3JI< z0tS6tjDAh@262}B+9UA`HN|fz+0*lC7GF(oLliomlUCyI#%V}FAHF3d9VrvrUHR_N z#3*m3cTCr$qzXx)BcY#@H7q*?97p&3Lhe2}F(F(8G&w2GdxD6Q50okm^e1GbMih3q z_cRiu7Gq;6-#k*}k3>@Wno-`La@;o7Ff1n7jp8XQR*fq@+L5Hz87oN+#6P8H-hguN zYH>!xJ%-m-02C`!l$l3~G`)c#Xlx9@EoCgB`EkJ#$ZM7<7_+`1p_1uAg}rz&%T3ivE4&lx*BsC*oekce;NZU(`X)-=Ou;u$<6 zUO-tg`-ItDp5v!hI}+o0HKE1&x3_v}YDaS*Zn`T`WLq+e9)YZb1Jl8FQsP`&bFiPX zoKnBb;q$OdZR4U}oajq^e7WK58-etM%SBwkfqf5@}lB7@8nu>yN&yp zlywYBRnYy#zWU~d+kS9PMtZ|#54CZ-0{g~_^7nX7`E275kNlX2(d;zwFSA#rBYHUF z^@^f&RlWn)V2vLl7Eg$1JbKf{5+aT&@kogDErF+S#xLogti9@0o|nIV^9t-^7SsrM zX+4&gC^e|*_jz)e{CsQdkf=sUzcX8p7?BAc;%x9Kin;#_m3qB$b+~u9Y(=vT+Z*=` zE*ky>r7#QD6uX~zEl6F{eM`l(m0oMEXBpOgnxTW!(OpQG8@m`|W^I+Dt1t}7c>`yo zTpzG{D)}bSyicFa=;;sAv9X7x>twAsZmVth7olyKy{`8A$46aOy=lQij>WxAuVG-)O$*oL zY9nEvmKLZo4{-mqdeNX6Fk!d=N%8w}FN)}CIcuK3{Z+;$%e}d>zy<;+d{bVYe!q6^ z33E)$bsxOL+d&Ji4ITGLv<*w>7@>trYQ_ONDHxJUfg*nOY){ zPvk=Mqi)Z$x$k1F;+ul>g-iI$>}!)&qHg`m(p&!8D!JrqRkx-fL#x8QlcsHBQ0w|Z ztIbl?x_wcU6X5jhnesnf$GQA>yX8xLsr{5=Pv$(6Cw$>n<=EW}{HEN{x}jgU*HbCw zlgu5AmuO}1UC>%jaf2U*#rV9#gW=`aj_Ay4TQbUba3g<^@};3XTc(FFrA9mqM~1=H zJWbKX?zE*_w2q5SrOrvk{!m~m2ef{kNoeDm@(9*bC@uCfqkpV$mrHSF|7G+>i@q_S zr>91q`2}>+t%Cj{qcm?sro;CnMt186uN%jhpMMly<5Un4@%2)qycbwLFKcq0)#^uZ z+ws3affFunFc6!f^%xds18$j~pifBU>dJbWKO1>V3jX4e;|_0dV?v+UbX9=`=$b2A z{bB@tNB0};?s^Ml+881EfW`pymhI30IHvlfDIMa$l^w2!iSg8)#1F%tv9@0Z-p6P0 zAKBwjc3ekU%8HPDab~!0qbKNCWtNt`<{8`2POn_L9N<1*_!wW<@?6RKmc666s;Y=| z_@xNeX~ipxmM22N3$E=}wfaqh@w}lK60EIr96)W2i;0tPpfVXkPWQZw} z9SS?L9_Gx}eNJ^bo+`2)9=yidGo$=&Te299`_i_g{y^I-)ur2l2go#b<3S+5xrS6@ z`(yuws@lD6nrL8>XrzmhPLF+Z;5!~Ul=@iq!={=?A!tT=MTe(_A}^Q~J|2zX z9|PfQoM`t?pVSBL5SBZ0(x|x>O zG^)LgIec9YJq||uv)F7`FEFf;R>@1Mf3EOy#yXyAWf?SNwVrg9fEB9k)M!SLcdISu z>>BwAL_;W30BumQnQR>`8Oyg%gY~XsF{EH`or#;c; zIB&WKjq``q<)gOL4X&uy#1K3=!Y2v!1cC!(fQ**fi*-j1f@0c355LH@W=)7;b0yl5@j=$6a##^Zvzi_fMYO zef40N2z-N0G0|{#%q@7_W4j%BK3{mhR;E3C;Faf?n4a#89uT@*-pvx%htcmby#du? z`AmDsvvW+iIKc!-`@4ZB^5v0*(Hib=VE>4PpZ~^co4>SYO^1+k zPR`1XM#QL0V#%F%ym7e4q_3z3AqAb8^>LJ#PP_jw-5#e4)Wb3Q3DkhKv@xp7u-Z%4 zxWucp9f4gDsJ7&{v}Kisfr5=$Q08eCT&-EXWq4X@vnwUEc|N8%6oq25M7Ft*c`r0U zdczq!Hy*tX!5tMy;1EatZdJD4QrRb+bpT_yiIYSuV=lSju2T+N=+a` zt79IL*I-o1YiU#*x$kwA;PqmC_qa~#VO3|lxt=Ah${GVV*^q2QEv>c!et!4hyq$Y; zfpK6!g87-RDMWhc#0S0w&><_i~Qx{$);K%0H$Kz23yujHHYwh*2ZH_3w>m zz4BMJ(Cbwx(t`z+v1|mB{a~ z!Iw>{FSZ^*CmT3J8hi& za()+TyW=5!C3zO}--e#_LCvokHoq9aW%GlQkU-_H&6;Xmm49@8h>IlJ^LTi#7xZcB z2;gLtD5Z~9S~4t6q}LPIx{8Mdp_0MS?^I0pGzs~OZGK>cQ&UDN@#m4xzWtpC@wY%D zQqPGcPed-d6p??Y##^?m{YxIVu)f#Wg4lUiLE=0?h?G!Sb2GdChqV4Dm+UK>s0)F^ zd*m2WcHus8AVu~SCaw$feS7tIyaIw6%LrwO9Xk=P0>LhqidMVP=NGakSUD}Z{*TBS z!*2t8ezci1al&`^59>s!^8F^zqpn0+cI|!`(vuj_4QdVi1~Jn>_Yar7y&C1h>JT8%L=g+Dgl|z!q^mO@1?z1cF)Bh9vJiYDjh+HdI+wQ&JpqKW5=|y2} zUE}ui{do*yAD_q(@P1)~Jv`rFv`^uKFTQktUQRtBw~ZFcawg!I$uS5uP#&QhJOBfl zh#S#kD=11>%e*og`Jiq-O6(LV=-c5NI3`a8=~Bl9-x94mx>jB$zR)D?* zFXbzni66eaY(mg}QU0{BXV&4h@@*2GTNduD$9`E?y(nbTZ5wv4?MI~q5|Jgveu`(l z!qtER=FoBx%dc_AU;MK$ontEAT&qc9W2HDBqt1E+8A39+1=!RHAdjwMDXBbEP=sSE z`FTL}J}C51{G9+Wte;5H*Y9>7Ai@VC1qx$B6g1)}dGihM8#H^T@vUv6R1aeOzi`vq z(`h9Gjyz8!ehY(cas&c(*ep8(C#QwYU?;&J`6kLkCtV5cQ3t8K-K6}xsA(`U$4!n zX<1`%RCBJ8M@#Ao(<&|G%Z&c{OecxdN&i1kdDE-NlKR`bhS0#c0ELn&=r=xXPP1Tm#?L-# zB%4z?NlD1K>26wir+Z)lp1N|WBF(bYQW^UZz@B^odO>WNii9RnY$Q$g$4YdGaQ-NL z!Wkm07>R#=Br(4=i&N(8h3VOhkBuMWk7aWedKGg-WD+0g4^DD3KjdZapPks|RA_V) zgw`G4#DzZGgNsP5+2)TWUFK%28i~~7pGA)JcT0jcA`>(&i?2NZ3gsrn_tLt_0I6AvK-c)~TY2US(J}axdh3284Xj|BS%_ zg?Ay2NC%HNLPJm9B|hM6FNSePOMa$|65sfP8iS8ZIH>#KshYT!0NC+(GI!2jRzCBa z8Ju&ru<#M7DR7Usos-=jk~L%KwJhUpnDY(kwxL?;jstm)CE@mfYdR z6U|z)Asc1&mHe!_PFilQ5V|4D)I^1iCzM1{%wi)aYJjfv&a4lIeVu#A%B$!2XnmXZ z=&n0vKDO53pEDFQ?Ck`P5`4Mm&e4_4Vu2NG@hgRfjH3?MgGuLBdFd;$g3ITl7P*~8 z0kTIo3!J*e#VnaO5=SlBHKr57>OoXF6s$qK04^}{dZrlS#8iURW$30uhvDnZ?cB1f z4wYcM%ubrgh$elEc5yBhtU{qw_;~yXgqnW1qz49|pB%6lzs>*q=Y42+#1~bfck5T4 zFSA2_2B^#%Uj+A`e~y>)kM4w8khU+|v^_NZxp2h^F7xtLS+U=f`^s50%>VrPd5JpY z7HQ4TNDldJ*r3a}gO*~h96qI?>5IjjS{y#G#yx-m$7p15{iPo7}^1_VzF zGy{RZX{U_$b8ic05hsB%fU1V6RbX}s+FJInmYX0~s5&IMa|zl8uf?_#voCYas4(9P zcXH!m17SnpEmy4s8hs`|mBK|HER2V|HMp+4ml%0m_eAB!L!Y!NfJD)?=?O`VncW98 zv^dtn^|~jf0bVnvxwhyYDm#?R5e!~yO9XY8l$SDePXe4~=s5D%$OUvnI&V4bDc0`v66y zZiu2i=Y{M4jaXI$MQay9W)?gJS_{*Oo5J$X8WwNTbsJC|AQ!lGT+C% z>1?DWv5V=+X93A-ig7cXd_-%j&+Q>H#B24wZR^7K&b^rc=(7v+Y0&j<5*X@*ns>>f z?Q`6%Zq9Kw+RJ+m2!udv95%JCAE~pdY3#Mw9sRXask$nPPH)|wo|p4gTjnH8ew#Ul z=|KNc=|*~?GZn+z@0`+XS9Qo>aAzWhEDQ%-cDxs7zRABVz*}14$o+d^ zqrhyUiv^Ca%&s$)^JmDW89g66q_=eLGk^?RP2+1UKjtLq(hL}LuSAF62a91kSoAD+ zK>b){E?+n|$8y)txgRv+NKQn1Qbc9N2Pv-2?c%by6u9HUl=$+1)h7Iq}Cch$QbdG;fISHN`p7;m^KrRmBoamhTp| z6Xt0x+(TTGSJjmeEXia?mW#_Tq#^0A`i&{3kh*3jduAL^ znq1(dm%!NMO$2;B0O!;wGUSzox0n@eA z;~L`fmjtQMW8mDrg$T8<9}Xp=o6=rP1>{y`F5OE#xPsCof%m~Nd5oE9uLc1N93cW> zio*<){8Zam1Dz^#_vkC5zwk!P6670xPsU+g>N_`~7w6XQzC?-@m~ZkqRbrB5aUMm` zy0u7QwLpFSqV&(CHor0e0 zyv~9^!0m>_LacAHoZa%*$)Q9H_0bcb3s)z-rX@2kVxt4{?M+;SG7;D#7Kf83seVT1 zEnU#05{u-hgvp2*j<^tpbJmK;2|3(ZJ#r`E(w^r%*07&}@-#y3XLqN`MEO!>37sX8 zyJ>3jPOi{KI)@i0N>jm}r%18Mx?1T>lRezSepkK%Buk#_>m6GGZ@)v! zK;kKVmbCL!&?b~@3jXBL>QG%60|d!>wSl=^c-$r&S7(BJ2%-MJ|X$ zOaPcJ7om%|v^}rp3e)-Oxd~y7VC&)M}t1N}c`5XLMm8Lx8 z)Sbm{>t_~{?>k?5x~I#FK$!RwcW!Dc@__}P zcVrZ3VJypZ$%A*QFyGY>r}tniq{>SNtLaS=kKZP@6a9kLk|qbTpzyoqnH^}CTNPVs zJq0hPxL;l}md^#h&EW;|cz9j#er%>b1e`zmtX*BuJ~CIdbv8!ZFe{2Qe{e%#7WtS6 zL*y|iGz+aQdi!Ov)J3KQ(K2cuW4my>a9>)JwOEY}N?M#H++|jHWTJ*3m}kqwE!A?x z?4*I=v>E(7fWXqpge(M}d%V85j&G?vd_21s@aa&>a~+bvOh0TW2@Fom z{eBD0Lf!lhLompg5{fI-R_pA+15PTKo3N@#l-t=;Y$d;y!}kzgvMj9ttu_zE!nq%flv%NEbG z#F#CBnG}?CCD5F}`T8Xgfei6gAZDv_6a9nq5Q?SehBT7=+K5pM7J3zok?o_w;_FWx zo-zyX1uY#MHE$=9nDb-Ca-8PM6fSGOfHMjP%g^isJSgZQ+;15MCWeobb@?j}vt~1M zxFDe8y#TvmyTph+B*%#?5%hReLjLGh`%m39TPPaBv3P6T=2zEVd|!BAhyu%6Nvu3U z=pseBn`g}QE%)l^CRs6ugiNfdTs4Wwmq8!@@F>F7(Ks7B|H3n?-UM+ZJhHwQro`h2 zxdtG9r@p!Lq*`m%dW9j0pcJUh*mYyok|tow21X=K`j5iKJTk0t4I$wRuc!`0(|;@W z%=;zyOfsAkMhC7w&65}>$OS#l@snSwqx~($-Hc4I8%LI^Sz|arzk(=!MKsl3=Y59!VA+eQLB9)81{USi113&Xd0UL7HPO8f=>*b zV{%lJakF%JhiO%unQz5k>3yc37jRk%hKM4OIj{2NvSBz!*CTd@0+VsBlddf+m;=vldljPu8v6pe`&a2FW(yxr)eL450M&w8~u zvr%9IVK-!Hnef!|8h<7L0D|iu1yEJ0;1cpakDLF#E+M5wgi}?=LUBt7aL@P+oR9J| z!kyrlqUaVg#}n@yu$nd^7AB)lTZ}o>_y4$3xKlq_b1td$s8QebCtrMiSH#F|W;|-zKMOy#HfS0O&c?V#?mSse z`>1oblEE0tu(c>08G(CP4y=}#+G6RO6v)nqXjO^Y;*uR>N2OqYzMGTKopc^K7M5+v z&Fz_x*hP6dLD=lSEP_b~wtC>Q3kOD98LlxPO0XZiI=(CxA66r-h4x|C`veq;#Hc*( zNB^ERjtdB@xiQ?1S9}K(KbS$j<`I<-* zYIPkt7A?7wwH!BK@c^&UY~?3@QPs}J?qVRYm;@AJNT z$)}xfRmv0I-Y7382Q8H*?vHFAqO4SJj>S|RwT;;~wrLoaru3xA6>K(yiqewvVr?#2 zS!Uh1SjG;oLybpmz2vjs!u6-4T60#^WQO%9jyzl5xh1QZJI8I==-$F3)J6&R^q>dg z2|smvwziwaCVvcBQ#O2BXWJdLXxanS5zMzZ9Vrhv$ z?W7~+a)gKG;`kKd<_)6|POJY(@K*g& z6&|V)RV+9i1BuLLGUi~dM^pus^nLwlani@fCNv>ibxpFE>@*9qA-DCcUHa6p+!OPg z#$f#14e#OQPl+B+?kTvtsU+iqlHP10@*Dtvy2R~3=)dFlhGdYp@?C2*le)z{*iv%8VAlsRgvQ2(Nwy2S;_I2&FU{@j1lV*4M!f5 z5<^c+A>kP%ErHO|(fDL-BE&2dm_q!aSJWj7jYL!RV#-I)Rcjd1R!>oEK;0M; zmZXo8W=@5JaS?j;O?W8c6LvYv>310}+s8?XHumCqoQBQw;)koWLpN6VAK5+_VP98S z!9JSa4B`p-WKUi>u~)2oLdd*U1(piO#moF!d6XZ%2Jox3=|B#c4OwvZt$b6m@Gw3; zEx%BhUtEZvJKMYH$sqU$Wkc`W5a8q0S{$SLLTohA!%lWstj1#Iqz!Kmh?s7i8j_^F zo8I>pf3U_OE+BCt=8a>kBePLj9M_@ zjRRHWuHT~@me3&CKYD<*1|EV)uN6R@eM5O1P>hRxbyPUG81da8@g!HlZf7w5Z*e83TX%!xUq z)@F-=(I-5B=@+y1M8$hS>kJP;Lt(HU*PZ?incWy8gzrrJO|u_ER2{vfY0rZsqUzi( z9d%wBdan#KqcCTvpD3sM`l)EjaV5LH++vzhK*F_cm8TH5p}4JL%C74b>4`mr`z*&6 z_rz&KN$fQTcT4TJf|#FDj8-fn=jA@0SnTgjhlo|48=w4vNI@;ni44E))Cr2lMF=owi{v)g9> zLKR2dl3X#dw&1FIUkZPka&7#_45;0;|`MT2$Cr?K|bc=*vB)71V4qSvjlxV1(yY z7kVEbzBTj>3ar;qbb?jt?v8Mqxu;5K3}MvW$bCkPAWOX(M`{#U{J~6OyT084yxTzWXwzx06l;3Ze`&1$98?^k(z zX((%TEQ!AGQK9zbLRzqGN!ru$#CkoF_R%M{y;Iue$iB&}2{FN7^|QUiu7A(1Ogs>pOpFo7J>WkFzYN zCn(+Kj5#j$MUqWy!OWJ-3P}SwevWWTQy76@pV;6Ii<1*jE3YT+#H-c!g(C-yjT*jY zJ@C;*W@2CDt*a7_G+q|PLxNNC2m*^f-Yfvh)Rd^JD6qfYO~8DFl2SM(^RVwiN-e${fk@{DU-&te&3eAUCp-?78^t z`q+`9nRYkPPY{p;Z#vSsRzNPh3 zPb4BA$m)9?&0W`?CnfZa{h(o2JgJqpdF@6^L+{lZ!krQyUg<1qd5M{+1SR**vBzGb zN{0)1g7#`JhAnZPy`X9O(n`A?`TBD~^xG5!33VRt;XgO#!s!oOiux$ZjuKxNKJ(SG zB|Opd{EWylw~f3;Y_oF2x|++HNFeqT6o zR6a6zChGjeRr z^23`4|Ne#5S7jwYRspznm?F}jDAy;7YBUnqcx(5X6F)nUO{BrKmxh8!f;=&2sh65- zPVms|U>*+mEvxcdlStq~c3Y7_u9q-Z_`1VxMVX{-b*im6hYIu9wuAVnzZ{6vE$wG) z8@BR`G(PwxWF|6LWq}k0Xow7^ys6D|Al&HM5Hp?m9^HXw07LbgKR$|TIrZD0XEUpl z2vWce+U)66Yt0uLvPu`Km=KGSCsPcPu8omLISTp|d;kPf#_-x~_XUhZ7>P*5(S-J_ z%exSbtAl&OC+De-vEe>YYa$ADkOQB>aNuBJ_8zr#K(oR6Od3$r7Buuzv-=d51hCMNO*HY~};W$|nX%jhx5YDzwp z%&!S0nK$*t&bxVBi%LS}VqgI7xjKWQt|#o-lzRY1kI-!*OF%&WSQs-KF>1DiuYcB{ zx!d#6nK+wb;tS)@V5^|Z_^I8TD;~q4yr4?$yly76J)hXo2z7E|CguKlW@1YN-hSZ` zO6Y2JLT#*b;u^NN$7aBExR%XQ1}~2azg;BUOGI7Ep)tKbjwO_%2VZh?M1&W=$jbSs zN3tGtlf#`L7AhfOU%NqyQ}xo6?H6;`9@(XDuA$t0bC3JuPez+#r{5)u_5r%sW{OV( z=3yK*rVGH0z~#2U21fUB_&YO5LBQ=?QTSIA9?Lj&zC-c&RR!O1ALFtGOEat zJ(9z){SdXoI+?BPRxSFE#5C35jU8|NGLu}t6FD`Q>yd`SZ_ zjIfpe3b9&{rrqRwycoi~jV5xn9WyaiAe4NK6^M@RfA2EAy?1t!0X)(_Nrj0x?{vx! zj2!)dXF%6iz#Ah#fmzb`i-=dmvmNHTt}3%OAFX#S^Y?NplvwAawul6GV!M`ndq|;G zzif7NT04w~`wI#Y{7ps`Wu1_y{uI_^W||kSXp0vyW7sKnF#o+thYzE-JGRF@SfZPN zQZ8-#Ww`%SGNWqTtuM4A(twBifGZpvoI7NmEkp(+c-}u$qvP?)k+;?n2=l7cy>v*> zfbW%l_5`6BWYM^@;x9+RcfJw?aOs5+EK}@9jl#Y*CJ$=%&WnL=Y?!~Y@ z=BA*W#f{q3JZr-Aw!K-{loafJ3>MeQ845j?EG2sDF6AQq`@rRM%xQ&*pW;>dZtlFC zW5erNRo*>N>qA8zROQBcyYoYvONy0$WuCXP_G!dIa9Vqmg2YH*O=w4eb;5aBi-|o? zS)Y`LM0@efa4UJ7O(u&jHqk&s*UI>?wZg>(5A{t_LQelS>#PvB-9@r$ zpV6T{goW*FBf?Y?!^huSKQR|#q+c0Dl>i`||*z3DGlNBDq92x6(XjvqwP4Tg@ciM3y zI?_^rTgSQfq`z0%>y8)mcgw#8@GaKP>%Ue!0_$NZ|Eb;oUYy&CU;L-S|9jJae>n#V z{Z|+3ANTlwE$;M*ZT~&&zo+{56Tlb?_@CdNez!R73~^?Dd~2a_VMHkLe)UyEmgOmL z|DAy>3NMRnpBz(cZAGLP^Dwq zq7AZJ&^Tw3%7PJoO7oJ;E~}r)09WAkbLYIeoN2=91UgTnnp3rRJ;@=rW@8o)@{pFu z-?G^jd>*AX@~2ed&|jdyzBK<~e*ZeH%Q4!loqejt6!S7q1U40GEZ+7&sYv|q4&CVe zJOdAg|K2YE>%PL&WKI*qy7#^F?N4$um_Oyr-c;5_kKlty01y<(P%*bmOhV zaPu#u2aQ+&t|woYFk{3_M$C z2y323$@r`F*OEuK-wW~5)Ao2ZfGIc}dVbe!@K}!7bOK%6u4JC(UAt2+r|e^RXm}_w zDe2G9NUPS4o6+fWk$hKCj4*I?#+*I9kDe-hbnabjMd1xiiBx!Q{&l+CY!mcw7ilh* zhEK@hu6yL0eT2`Y=H5)+z08#0aAk-{Fkj!>dErb^h2dW1_X3(JW{3{xaJqc2sffR} zUlBRa20P>&lD8!XMf1=Ldf52bPY6tLX2ugCR49mPT}Oq&8u_ig$WiTC=KDpQbwiBdZs?t*3=tGr`t9+Wk&+8~;fbQCSiFa5dR&KOfrruJbz_3~pg%*AhMTf4zg z>@XJ+@Po#2m+#k^9-p$i4*iz}Xl@9fu{LzK^_TQnZpu0zDvRjI+Y4}KhAB|-@MB7_ zZ**|8$5cC%`3}aa<%itbel)M7n!g11!xVWYCA>`QlUC{D-9d(!v$W=92QwfB)+`hq zf>LjJ4E`3O>8XolTC7ndDiduC=VZ0K6R2J!+S7E=yLuFn?!9Uo75Imj1X~T>V*Q4| z`?o$^i>R>FG^x5R-f-xW z{cAd&yp$B|M$I?P*I>8t5{??nDE8Mk&%IWT_p8n#=WN|qPa%m2^(5yrvNn{AKPV`# zvz-@AI$7#$nsO{rs)Rp08iP$Q-$H0Jn=&r2Zev2ycn>wR*+b4OH^d4ma$9?}wRbr+ zP#f9}W4Wm>)5}7&ea5x3#!QahKX9reCiZo+PrEGMJ1l^*OyMh>lmi1<&9!J?+K$PX z^A_t?wbiG(Q?qZ$Ltf3doAHM*$3ZVBm*ycTn@mWk$9M%_)6J6}pD>f^qt-bKji>OF zZJPeP^zf*gj+&3HkWh<={BmCNvbvd5Y6WyOAg%Fd?<^fH21oF8B_UZ6>UC$dRX`%s zngZFqj}EeG0uE+o8!-gj;SO($37XnsO10v31qRo`ecy6*+bb_j<`m`#W}Q**ViVz8 z5HV~rxvAFmCx;Yo@7NqWI5j;CgB5KJ#&W5x`6ARcrfxVNv6oYLf86)*%re%^Yy}OM zw6A`uS6$-_QRan*-mGC4+nGU}J{Dk~v5Y8wa@anDF;rHrBgqbWrn-|kgy4ELpEx5% zfwAKfFuo-oo0w)gty8SrWcW|T=dszFa_cB8RAHmxnaW9y*_TI&-L3$~bZFTFM?LSK|zD+KU%FdhI8wrrnpPT1* zSE}Tg66#yRE744SGm&4zhKDThUA()0I%zO-hbf7Tj^=y3rS>MkY`9L`p+bAxb3{$8 zUY{^+Z1WH@qN^rcr?+Osqbh5p%se`$0MfQ#1e3d|5%5TI+A?q|dz*Z~;XV)G_>s{V z(BU?OW=!MNk+x|HFD)xeURRvv_K4o}pk7KiO2tZ(TwJV)#XwisI>SWn1m#MXH@G${ zb9qVkCj(Dh)rRzbsSTeTU`xtJ=_!2$IG1_6C)IwU?MPxJo(H;^s{#m4A#8Tl|I|_7)jXCaRSsB_{R} z`H0z}q9IUI$DrlxzUurU<|Hi-N=C- zqlxzPkL(x$ep|+Qm!-D7>g@?0)j2YbN#&Xhapyc(I3>;N!aZDz`PyI#=bj24omnp= zUltJ&z5NRYW||UDwt+W7;!Sn~{c0WaM?vtu2-DV<awki>165!h~jZ3jJi!~5r*>=WEr4S&wIrJQTh0TuNpkX zCi_wukdxemgWEy&sko8dYfH~jidEk~)6!`*eGU3G$kc6As|BKcFZ{?bG+ZeNiY_}x z*4;O-J0O>LMD6$3nGs(@Z878B5nssf4MfF46}6KlWUb1|eP+xuk&u*o>7)W?&O4yiFtL)%WNwj_4^cmU!#2XfK$@R!jQlI3o>C`bT|wRh$$)_NX6y+0PE*P z8$rw{^h;R(Iz5Bi-5-8{?$^XU`3{V2z$)k}L;YU4`ji~|rF3iCZ-?|qN5L~4s!v;0 zN$c)QDQ|@5Rxi#NelhVgM;9beER=3*y9HjC%RRU$JGAj-A5(In4ZGRlIjC`ix5zarr=&;d^bHn$}6}05&!@3vW z3U!%*&E@#;p_Ns#_%0}oDjR=3pXJ0avcdJQM1?w*A<#9Z=1%tLwA~y$JTpYk+;_wW z2!@Z|wD5`yx%s?3ld;_m5lxiSP}1J~o@YayqA=xXjKv$1E$n_m&PZ{v(E5Mad#kXz zmZn`4g1fs*a3{FT;0{58ySuvvcefB^La^ZOt`m26cXwx#wZ8A)dtaQ3bA8UZn8TiD z^q5^$J*w-ix9gClx;2yVu(@-vS^E#YiNw2bOAYU2Vg4SM6*uWl)%5`$QwCpGxvW2O zoefU5f}D#1?LPT1xAWB}YRjvKt>ikDdarhbe7~{`OBsB=^|sF7X^DkL``S96#)#aO z5RSgkrroa03~rwgidhfYmdPeL2cdWnLg<+N-UG4fx@QK6nAm>qD1L>RqjHbSCGHYk zLOydN`qnMi_ep4oPn0waZ(8Vev$H!&(}g%!GrC!i-;|@UBFOPR^GtH!tB(e29dOL} z)$i0u&xMR^i7sL|oprHoy3v>8yWb_5*EIc!)ynX6hl>8&^H&13(iIsqGitBY*sB3g zV8~Ko@dRXr(Q~@pz$GRSPl6UP+%gP1yt+Fuj!zt!fuqAtysCR3B z!5j`s+j+O8_geRkRP#*@d)POWzC)5N?H!|2E%!o_xv{LD@90}gokI%@S0G~iag6w+v_S^)P2W(*3|`#tPx?RqHt;$aZe2dhuxm|8Zi^>tN&U3 zCY}pZK*DAJ z9^tEzQC48y!x|Kv-&*ZQQeiDCYE4tHv+;GXg@ReeO5mJM^%p=4F`_bi2 z4FL_t^ybHsQGKGugSvOKDQq=`@dXBv9P{Qj<`V6ee9w0(39LEcNCeQF3}5(240>{` z@={Js^j@*Ad>tdAt@OTHq`y2ftVj-)Myd#|hUK6zlzmsJ9n!dO(Z=k-77%U5Kbj2M zjkocuoc_*NDIIlpFKhg=i7KI`YjhhMtEi+o?qZ=Hh1!~g#N685&UJs~Tpwkmz|U40 zW+0)kjU4k-t}inUC*N9?{BqcHzW#HqDEr`EN7QzuyBQbQg#suy+70mF|90wLv%~v7 zGwFSRnKJlMam(CB^!iHaIAj?Xp)`xk@pK7i8(Mp2nNu0Lp$jse4 z)yBZl@dKKn(p*}4+@1SDJj=7>xAseH zVOJin_mYGeI1u!#f#Tz**d$;#bwh&B^Zk`9{E6Qdnk95{$+as>7;DmCo+JSXCebNUmDWio@Zpzd^XLelc@tOIsV_R@U4wr&CHWmgUSKDX->Rj zgf#uLt5YO4LuLhbRRlZYgUgUZM6TGNvPo-yAo}R4(n!(sUWU@L*f_kv=6GvkaPV{W}a`LxGKlk*4^0o0=Oh^lQXHp5a;_V%=B6;N?f_Mu~?OUf%k zMdN@>@6VR@$zcT_-0h<$cOUkZ-W?UF9b)zkqNpl}oxY3q5&%iO3}ID-x@^t%TD5mL zNV9s2@Ye)v8^p{k_tgud9)cu~*RyIN+zzHEyt5Jdemi&fzlOv)we`2%xJ(u+Rl44j z$)7As{w#0-wdbs9gvj#3rTBYy2|XV2XkyJ3 znC&I?fojRA@%xN$b%08%-<*r*cdug>CZ-&gew;3uPJjVNlk&2;YJ|Pjmm0shuFJQ& zG(nDYdY?3b;dwc{mO)BAZ)!~w^jexs^IZH}05mZ|!vi@6SXb&n=vCNUs{#lMOaSJt zIL!Tlw%T{oDp|@IzeZwHN#w5P>x)UiHn;8}Yi=_XkNy7)-JXAXz_S-MRXBqQyu}A0KM#US2ZS8AUVs+>`J=NV)2eeKR$?zItAK+mYR( z7rX~}QUq<;%U8A~O%>u{;a0kCO1~GXPr7U`cGoWS$g{^t+R}76lpL^Wq@)N@6inTA zJ7Kns!4tjQ0p3tSQbLqAG-RjJ5J-ic%1tHra}z{r!ix#tys3vSVrlbEg!J%Ti8>KS z!lJ%boVXcQNVtfT-k8y?H7rhHeWzx1hmCx;D@TmJ`fbBHC43CTXYIpOZfDEV_aoWyk2eOS$n3<07q}P2 zCxnLDx`REScC^NwJg{KC2@XIQ4Yc`D&8z4H%Eu_c4x8x6<6aHI8>*I*&OT$xfmT|J zCJXa6zZ0>F5e#NxSSP!gl6g#j`9kEhzSZc&(Av;IEOW&>w@wmnSWPHq%oKb-$TRCb zQop%d&{|+pbM_{Q3Eq|WLKnC}k2Ar|{aWPFmQ~JIJs5+l%^KZC)hpE{DxbQ&O(B7n zCVVE$my5|XjHUmnE7Gy-RxB=&g$q&9sf)9UYw}H%Z$wAPp!HLeAMT=96EZdq6{@`+ z8B`7C00jAxg7l&c zhjpn6+ikqk6j9plgBg8YXnA}ygUJMRoY$%Tr|D^@@JsMk@33(hv9(!Ir}x2`mTHX# z{@{TYYa15_rXsh4175z?w{SPp8ZrR-qui$eJ(kNFOjm^phsDK^P`=vK_y@a>>2F)C zS*?M!cNOYAO7#$|ydJ1uF4?+bajgG&$J|m?xmIU;@zB-F6Mw;BM;tw+pvA5qx|9CL zj9xwk&JPl?1UEh054=g17vgexlF7vyT;=}};q%)1~gif%|F@ad+;YuQfQPzP5x)&}il;UAT+ zL!!q$K9alpvwRLOeSCve7KXd6JA!uL8GO*=-(S#M{^|T^_0yAaz!oTF`~yWW5i6+A zERmSi*x*3|Zif*`94x4)iJ=W7JDqc1YBN^W-UvM0`Cy0qjQz2}NNp{@v%z`a6w)lA zrp(nH5-P(mia8!bYBMIC<4$`?%y8FC_^y4VcXmiQcF7W@xHrqrP;B?HgZT98UNfb$PNr=d!f?W_YJ53ywwZ!AO7lcLme#qcOsJ+J3c8un}h{$x)>?_ zU2aH^L}cmtY`cRkxE;wu0kgY*K5RC$X;$e8nChO{Ic~t}kB+T#CeU(c8}Mejp{mfG z>=3EH$Ih<5yc7TUWWebM{lIIZ*0w+Ejn@2Y0xhDZK})9Mhy}sSj_9FEAqbbf+_LLi zKuRf9`37ss&gaCI)*q$ZevqjSKPO%99n~xk4s6=Jg4t}2%w~?GSf+zld_H1?xo>|` zJM-`Yx9)(f5FKi@=Fj@#H`c;jZLvp|*i!FD8#nI+prbxISMTiLFwz+!x=*>0t4^5D z;m8o+40SEpWHguqhr(`n7vPbqfn9t*)08C;O-^9rjTusuUsRAECCK5@@kd62R17}} z@Q9n|SSeu5+OCjD{%V4T_2FeY5Dlm);Jc@uEX;j#8`nqkk%CJ=@tU8} z6`36qUt-3uywSV7m&g0Ec-yYSTG>efiRw*I`>_t-Mt}F^I>&)5@VEDuls&Ro->Vu0 ze}|vA_jrvLY6u}`$s?XN12skLthfFsXM@AfW>@~&9$pmN_WDRV3)sc5uJeGtDob>;c?BC z0pGJP{BvNQK7BgD@5Y1zKk3v*-P})QebM=fW}fPKt{*@hnK6}~4NzN)FZJP1&cK>I zNT6Q?o;0?)JnM=a0!Qgmiytba<(T(_~SgAyC28zkF#|k@K;_X;xs=K8E<& zdBbBGG6(3>>7tk)=-|2>!NBefXEml5cc-uX(MF9R4iA3DWbEa`G#`b-Q{VFIXrCZW zGx>C5FOtGLtO@Y^q}SyZ%(|E%;%h`A%!l<}MZj8;F!j)Nb+VK(I0U#= zKOPRkq+4gCUK8|YCc$(~R})O!bx-$f^v3FL?c$?K_5!X;PJ5BFUe22Xreeld7>Vtu zWV86cm9M>nyt0vve((D+4EUkx&tvaG(m+N%5i=luEG@i%{Dh~R7RAnvK$G=ES~69e zClCjUh%)zHO-TEyZ;tAj{2k_X?&6ZC*^ghe0n60h&7L_LCmNOY1!EofV0czF{e}8* z%W95qMgUYW?1fQ7>i?@SqUn5F((nwP%v}|pwq_^rHUl`6=KTueKj_G_MGG;fJJ!~Y z3nqq(%oMZOC_X>@Iis15T(4N4QpWN!U4E*`BJZTP(qJ5@VbBy+-~ppWUjo}ylY!}m zA}uSIv(YS%A!}dxgUpEHIrgXI;H7<314{t+WY^D&aR~@4WJBxIXvu2<~WJ zt%8_|!RI!Vvz<`@G+B>iPsjN7gZlK&Y{ii~lgKzKYAfW!$5$Oe^c_Uz%IH#B8bn1& z!S6}vvW^&J1R^Up)Nkg;#=D=^8C_!I7@YN5Al!`9w>6NfW|shdf+bx7<~bUUSvn(z zZ-;zSZGD0c&dLZQAk*H2hR#<5tIU*kQKjznH;yLsoT|zABkNf9%?pl{%`x&OI`^a# zZAQ-JWT86f7gxmNG)c8~uYry&D#%iInLqeQ0r6UUO2QyPKF=%q6Gq}uxa)D8cZ zq5knT5w2PUq1qE0pIa-|U4^IRw%iVdmj}Iw)N_$?2Ct&TCH<|j+PR5Nke7oNvR&Sv ze&M@wH)T9V(DHEo&%*+#Kj4r7Bn!f1-!TQA5l5%#V6c^LZj+K)LoU+I7M_(TuhM_q zu^Gzr=7rpM@Nd>LbDZg-#(<<& zx=2XW{T^X>ZdvTBH-1x=tB%_-2qTt_0!aspj6TV*CY{NaKBYk%Vnjje&h|1Gc1Xv) z-b5Hslv%uPn`br0ZmoyKSy~PWs0{Y8;2b@J#&d*u#5|RYTD*xr-X4>S&+A{8yo|rE zl;xVvyCK_*H4q834`)FpKw;5Gb=6PZNkD=LsQ`?!&_L!p z;>g2{o^q*k1B(E5vnGN!AXDE=n`JlEh7Bo97rg`q63_#rb83Bg_n5&UgQP_IwQ#n9 zSk!f%47}lm28~0uvA;srH3k`!JrPu&$hGtG>-G_Ybwmr!OnJO0a?8k zT0EZG5?y&UgvU1@fh7Mo?-ysePUomsYEo09fIx5epYyDv8c&b-s@(mwne#mkOI+|l zdv@EWLCE;Ji(OB(nhA7nii9>kd)A{HEg{Bh(jV5l6*~4oQeiDtL~(*IlX$+2?q#fI z8usZMH7Kv9{FxFO$XS%MfPg|0bmHCw~x9POE8PKWSg945A&XT3w>R zi`st{5dw3Ne4t1HssD$vh5zW<|9{d*GVs5|WmOFU)nI9BDXGRwoP$}Y>{C8 zD4zj8b>&-_-Y-ftIGf3BJMF0X_?>{kMVI=eP*zB#gect(?B!D+>R6U*1>>uF$Ve&Z zf!U0C5LS-S__}0SvRPfEM?=kF0Jd#9_Dos+D1pAb*j?{b;y^_YW!E-RD<5B_-ZMF3 zZ8`Ab{?iA)&H$bWv~*y8Y$`5H(>>E9dQZIXF7e@LS#Q}ov1c~W#!dG?wWJ^YmJbDg zyiFWk6Y3gZ)XBhyks<%cm-^`$%13ny;$ulj$`F=rXd5`2j!0~!%{5V8xpsEkZb=L!EJXJUQtS?&3_={hK!o?v{6c4-J7>5R^@8wTq$RJ^|+l)JEera z6?4E3ITgv(RfYlDlaO2X?69iDF4g%a`zsmF|8T(itR}OY7)b9))I(6m=f9~Mk+oU! z(Hlo6wM_`hx`v3<5w_3P87bqQ(i!@9?)#&lVh(-|dMYc2hw5mh_+S8f5{SBP>^c}I!AkBO9L7bt${g{9s z%QIt%YqhA7b6)Okpcx=xzqO<2YY7)(-bHB>b5u0-AU$-z=gi7P?MS2dIMLp z(G9+k+JExXE=9~fC>&C$3z|xD%haZ#ioFl<*c85ya*qKq4a*bv^pCk2kFfW937`4C z9-iZWdzA|kMB7dtw?BJY7_BYDFJh!G%wLZBKtkU{gXdOVtkM8))$+gAXAJ8zAz!=S zg0v@y9^5#bvX`UWXT$239XiE#g?I&7DI!c~o@I)xQ9g4~z-kXpaD|Zy^=)Dc{5BVV zk0-tk+ubC?uoJq=CoUUJ+l_jzfwe5z85E$4QWNVf5uYJBI!(an-GXYb z|CJn!B7vCI8}BSG5#ySCgsH1NOkI5?>L~8Vr+H+hOxULO&E~(Pit=sPQCiZM!y=KU}nD(Owz4BhDlzewx%3KZsPv`vkHV;P}MylCHTtxW7$u(wUl3 zyQTQLqTHc8g~jl6xnAR)f~4sXU$ROTQ0NK~{DZQ`e~iwNj{May;Tan6vMq(gKG|6J z>&_M;ByzO1vJK8qsmZqcz1;cA6tBpyII3Tss6ZFum)lVh&(;XZQ2)7DT*805uDG?%s;j3&C1<*MAIFm^h7#S$vI&7C7buq6@W0Od$Y{gMW zbf*Qs*2^phDs20epmS=@l+JSNJlR^dW}5B?s|)YQh57s2cg4$Q#)^+&T5s0=sMJN1 z=I)Da^fJHzNt_cB|Saj z=pA}7vYWvHM>gNG{B{buWs(T_Q)A3;v1|8@T{J=|g?I{_7IQl;(uli;*w*lIDTy^* zslhwdFP<17ALO^QvftJfrp{OR;L0+La=Jx3qXba!w$h4C>oCeLMIZbs4!{bY5NtaD%a4{*QD3Kzem=<#c)R7Kud-~5D}+-G094J>iX zh)<&>STnRPKW}ut2f0#%frPow?H^PY+{%T3A(?NxD`I_P`%C85R%tI}5^b!Iw> z$xc!iW4L~-Si;OtEKXS*C@R(1017O^^B}<eS~SdzhdbY*926`Br$* zg1oJg(%m$lIYFWS&=>QXJ#u?T+0eXP4wx(-9wK1pWpB(w2V`pX59YF)%sZ!GQik!r z;JDz5D}(;wd*Sqm=3mX$WV6_LV4L3P?;Fv?wQxJz!A5P9J9yuSr~to_Hx-!FPxZi&Cl zfh$WTyIMx5jDOLl!}@UZFzaf`#g*G+{nhDD1Q8LNQsTLgKL68J4s1}FwnCO02G)23 zn={c&Rl9z+hZ7VBjFzIS<%Dy+vYxJZ*<9*Ro@p4EiTS>m01pP5a-)lsvi}EiAgBlp zq>fRxD`x#514d6Q{k75hRO`zs@5-XlA!zm=tVEd_92OY~d{^sB7MB5=2J{Ves)2i) zni+3+WP6W&Wl$*aoUFR?2a9K^LsY#T9vs*1XJF#j1-R;#yoczOw2_J+j?O;6cv1I#MgmL`Iwp zIT;oH@FHIdRZkpa=BvyX%PdZk3v=X!mD$nH3!UV_Uqze4vpED#vsuW>Hzej{J0$kNh!Nzrv<>$DTnobDFQfIfFTHS7B)K01KC z?~?YF4~K;;#O2xC4VdR-m52?AyjE-T-mC5G=UDT3RR^f*iArhj8=fbZh`!d`8md|2 zSKp!XRtaF`#06G_-m0FTWZ-F=EYbR$rfI0rB)Tj)-=;hbvtmzj9EEt##>px%-Pc3ujMfH)S}vaIntyM+)LR8 ziY3nUm!wIAdP0nz*ydga`l}v0ZEE%$4!7wyvR1Z%eGJ=Y%Zuv+A&i{W6)vtsx7Slp zrR|3l(l~|6n<$2eQj`uVoILxzO?-jlrAtiRA(19DR|P(tCxD9 zR0*ofdn|q|WB}7;N$qrrpCyey&?IU&6HX>C{r0M+Qc6c{_d9mu5jg_@780t)rKE9p z9@|w6A5p*v@|)@8qykn;!=#C{*bR$szTR(ZDGrT%A@PSqs3+kbXeDzt_FkrI+Lls# z@OF-KQpQ7I0uQT--hAX&MZ)@k0q*~x_=Wm24hrot3LxS75Z_hx6fviZ4~+_OuZvsG zeVPNr`L)J~F}o2oLGjE~F#I;$IoG($^(HQXS9%*@%v)cMU|o?qtC&+n=SkbXAas;a z{l>w+{}8lWq-NZ0iqcf`#Mb{9JmQrd!0h)*Q&O@1gM>bJD)rlC^Ulz0^0)7O z1zX4N7c!N){NWxl1)=S4&m|1$O5N!ozW8BD5-n&rK%V_8!ivWt9D%^(yA#v;;}+7~ zTXjTi2dtqsON3M~)=Jv+>0v|AB_>m*+#*JUV_%KlRcw${5+{FG@;f5V2;JUUtZL2E zzVfCv!n)JQ-Vh#OXELnNHu}=-Y9tq%*vFHDOZ9nk1pzOyDvr<73t}_$nx@T!Knfr{K zP`)$P?dEaO&hxVK{t|euUH@}GOQ#dI6W5Dcf!}g-vXH*%k_-5uKT)^>S%*+)ftELQ ztn zv%B-AN-+k5_xpQhZ{B&wx=qnJi^UnGpzoG=`NJ`w(S9VEzp?njegF0k!3VR9qNJ$x z*^;i~%f}7pGv5bfDj%E;nR)@Gewp>madxrI%|z>u&T=7`7rY{6=Amo6dcN4TB3M{r z&4lrr8z#ka$b{Kvvp9nk^gR*Zd$}di=H8SZQo{~0!{SLDK5vZGLE#^&TbxyYd-Qs- zAF?ignGC!^$BrC^Vm~X`0aR?CeV>i0&|P^}ZU;qPePZH%5@Z&*BnSFje(tInGwJ=p=tENN{x3WXHo0}SjSH|*KhP=Ug$p%${PduRy%$>c70KO zf7SNAThK}}>y7URJGHv0?-}y)Tj@9Rdxrrg>w;uJYDap@Qzh=h#~((=wx_6S*AWMG z?`Ctn&5N>SP93TFhJLgCu}p2>$KAp&DCCY;ZI65DiXCcvq=f|Y zLx^|F~3sM3i_Ly!eFrJ#5QpS;T6t+(q&9(xpGVfw}7^@P@1t?*-gD*{qe zV*#^i@q$w>x#wS6lf%No5aYnkPGRij9q2YD?Z8`G+8$!TAmL8R^0$J)#t(|bKEC%p+@HQdrug5om0A%{vlQ4`72IUR8+osBh~w{56Am% zO{R4#Bz_PO)fO{An!Q;jDk^IHLtV1X0I7%q#*zCEyX=HaPfwq?;$@|*53@3g%t(?H8kW1j>O+z&0l&u+$#^bE}bMsp0ET$~e@4Jmo<87^N=amZOr5GegKzSjZysg%QJQkD* zQigpn-^ACxCvy|7&V4NscOY}YjhNp9Gl|wvMA2hqM-h~L1#@Bj`f=ok?87pAF>g@O zc&0xu;JS%%Vw|QZXC{Ih;qjzt@Dx!}fk9qya%}Rf*pTV5yDa-qchp>Dr$ejVpS^MN zf20@S@jDdI1T>Zm74cbqMuR=E%|7h0&3{Wy-76!05h!QQWI%K?P2}@^_>s5gu^MdR zNOjj z3}v<@uYqOS3Ft!nzV_Sb-nK(|okZ*0cinz2?!bfHvasx&URu8u`zuv>0KDhNf4VF+ zX4330%~Q^d^*4H<0h)-(Gk_849;vELI7fKSK$O=p`1zg}ohI=wh|ZpR80S$Y^7BTg z$rRi7F~pLtnMDrJ{5ji2idJ6_eLPlw4y8? zi8O=Q`*>H@2>n+8VHpO0C4h!^5~5x?PG{tF&9vt0BM=N%$KcagG%w$ny)Jj!2DNfk z8%mrN8}sNxxjx6MNi|C0bTGdHgQrgNWm1$XjY7diTvVQDILU*%E&UI`zS!ws^@WfU zLP3jX&q^(B(nvZ-d~a$A5qs1yj*>AIb!5YHiY)T23Yq%NFeOf%$j=n{yHGoGI~PVr zWn`4p#F=f777w%3x)bLy@7w@q)@?VQl__m!2Xm@mx60Y5m*JBy&UYEpgp>r?p&kAR zE>C$vFCymePV6+RbB|IN(fN6!6^Gu!4Lu^?&t&ObA&_LGG}J!|y@#d_@eESN%2V;! z&?0TFy={1XsI&|P4^LW>g;)~T&DB^p8qRky_CZM*IA*P{m+a*e^?dv)BLms|jtlqt z7=4FOGeP^%u(mq*bihg49RaMh``ofGD}3xXcVg1e9>bOwgyE98JrdKu#6~iH3STuM zUY!+p5h=2?<3!T_M5DV$8>BVHOsdY$Ph|=DoP0uyTq=Ud&_lR0?%M6kED-C8-ut>- z=PsUHdFDTe>+>dizlrXPo`*Xv8k{;8E;2m zT0;S%#fpY$;6q687VHs!!b*E2R#cb=k7cb4MlTy2Tm7slxh>dYAcb$e6p1x3dTzZO z!Se|kzWJzuYixJh!K@N10$%Gd^RcEe1;>r%`$*SthG~bS5RzYClFtn#{{VS z>N1l*zY!~A&xI`Sldg^Cf9M05hcmtg0=;AF8;c>*Brr! zxUk&o>vS7?nune8pBUUCSz@mr{Wby}$CJC>k>3T|>IDS!Abw}=SBU}&z*h)9B%guK z6pJnlQi^=Cw?u1d@h<7Zi2v|VEf zICoWcA8oX~;x29yyKn!t9Ccmh_?;cu^V2NaB_GFZEwOA858rj_gm+3-mRH5~e+q(uT zpP!3!YE0lOj&VtVasYTE0xyz9CB(Cl2^Z+R*VdWVfv;IaqeugE|ylpiTF+ zexO1a>pS+a0tw!ox<@A%AYlT0tYb;m%+4arc!y;oty?Ns;j;h&21v_j zKDvW*T2zoA{l4mabza@C3}XFySH&ldV5xzqqUwy(EOuYG)cd-Ds1f~2W4_oxp3 zKDWDamC^Nb)UepFZ8F5njVm3P5vM}2i|G5WW!&mFO`_Iw^8-tN;XKmDR z_DGud-*FuGCLtk!UeZC<4D8s3=WZVcpt+60`23H?@#`}~Lgn|!;ilYz%oUKH(R@sU zdV@J(O0Gj5{a@Q-3;V~PqGn^D)I^l5+@Sdxih+QmP-!3qHk|)BLa-hIaw?@B>EvbL zzdrv){kX_^=P8`oA*6=H;jcY(mKN+|PSe(#gEs!cHT%uWmF!+GJz^G2W{M$2$0Vny z%SSjx2^8Dc@Tv|fM7d{z0ChB4tP#i$pBC&^hv)Slg~d8&Aw9D|pd(sO<0RU-O~2^c zDZm0HwjOg#%2LOEpR{{_>d=vyMhl#gGP<;Ja&hhUxZ7}x>d8X2*@h06a%F(Vol}92 zq{3J^>qf9|^snov`KI2EyDx?vm4j@WoDz3EZ)xc&o@bwh6$y^3n$a)$8MEV3oXU| z==&A+864NJkF&H!SUn_o3RIcELycin!S{Q6wle|uX$?0^&Nl_gs1YJ`7M9V^1-TyO zE{N9Uy%y36(1+B6oqdahVA(og2lLoOl^Kudr?sE!GfqDMt4&lhh{l=a#T3z&gI5 zY05WVGzLIgRL^wO^Flfmu*Dpi*C8gV#ul+EjvG?4QXlVA7ljb6CEr`x>F+E$bMHsw zy5!z})q6+*Q*nv)-ihPEEV0gIxmlhXt)m?GWX#fw>jZRo96ZC#!L)VzMu`xt3r ztcO{AK1P7Ebu;JIKI$;%!Chc#*np2Ka%#M;BYgJp5q=jYv@ys4!Cka9W^4iEja|fi zQ|oygekOmA5ow-L6&^+HygV`YJ=Sz?jE-{8c({!0T7WMk8mx#2oMucIF#7nUXdher z^q@u|F9bRH6{A~B@O2cJ4LIqFkWm#CI&3YtDr{qshK^L(u!t3CF++mj6ffty*1e~> z8$;Km%({YAWU8v006UectM39@kQ8{pgvkMA4-Xn>$aF>GYVd8SFXlacFhRq1?rjml z=+s@?HX&oUTjBgpg1p{9=ogCHx+60afrOojmvyDq#SFc=dVVQZ~DRR$Cq z;vC_2rAaXva%)fTkF5VrtU2aZd7(#+BWbeoM^*Q!6UE5u08;=IF^W!V4}0M7hRBCt z>85yaKT%trp@j|Uan;n9vl%U)q92#-z$p$m<3zVnUFycj0_iD~?yRr@oB6H>oc3!j znuV*G;pW4T0p(_@iW&_Vc3@+iOBU=`aIRniN&dH9s-OI#51@%G`|x4iqR#H8w(Ru9 zJ8~-})mP zAe6io+bfFVApjb}mKC5keso5g6Ikbz^4(ALU0;{s_Dy2RkALSwRm}G{&J3_mcQ2^$ z(er!3-CeaS;>-=o)~ih(z$Xawb#|2DbvTg~!EGFi5I9B&*ukYCq$F|yLc4!M?U*ge zYnM~Fwkyc;NfV&wXGYNj93n?VQ0*d7Dq6y7_sOy00*s`=!mzXtf2npHX-OcgrKldI z7ATV_t_KJa)Pu2LNDmRv4{nQpYQ%r|qnsri z9f`wc2dm_^D?J8+*HLd|!}CO^B+G{Rib2HK*b7;j_G6;sT>EC>#eUhz1tsfcy`U@a zXXjxvU?5sf0CGPrabG3xz}qgH>kg)JgA;2E$-N7o&tQT-nl-h1lHhr)1GcE^N0yEP z13-7A|H=ASR)xW7K$>;qnbaH(5A2IAkBpw%#eyAiH_r&^gFFxWd1S)3`1 za3I(7n$7pw?(s56&+woODSS=-?iVnq+~QsUC5Ov9qr*Gx7I413Od(J(8>!wwHRf1( z0pP6Rrd>OQZkcIoZwMB6FyMSlfi51lv{%JO=h@O_S&*M#c|tQk@@)08^76c?8@r|f z-KaNNaMS-CB6xZ%+&>N;@x9&efpU8z-z12Cu;$eq4{&;O3&j>XEo9lEC!XM*pLP^bZVjYY|vDb8NCvC3q+*9OGr!Kw3N($F^V(e~jPy=y#hr zHr!?=TkD#kZXF1ztY~HraHc&h8zes75f3oAQdeH~67qrs&NbVw6R6)HC?qf5k-sUm zRV`F%ywr-1km%!@iBz^J4BnJwfr*?LV<%Tt@dEW-kjjxSd?x~IESbhG;@JD+-kcpn zUOUGwdTg~BU*)phgw7@0C3fTZ=J1Esd9cThtCSZ5wi84(SI(GRhWA~kpCG&%kgs83 z2rO34Db0l6*FPU522q~4lJKqQP;0Io-WiglVcxS=n(QX*6oY1!6khk!c0#T{%0D|~ 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 literal 0 HcmV?d00001 diff --git a/docs/modules/demos/images/jupyterhub-keycloak/oauth-login.png b/docs/modules/demos/images/jupyterhub-keycloak/oauth-login.png new file mode 100644 index 0000000000000000000000000000000000000000..cc6e1d1dade75029b21e0f6ba6cfeecf770bca2e GIT binary patch literal 22750 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 literal 0 HcmV?d00001 diff --git a/docs/modules/demos/images/jupyterhub-keycloak/run-nb.png b/docs/modules/demos/images/jupyterhub-keycloak/run-nb.png new file mode 100644 index 0000000000000000000000000000000000000000..204d18e6d34f360a047a38355f25e29a36a88e31 GIT binary patch literal 51608 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 KF9s4Z4E!Ht>2rku literal 0 HcmV?d00001 diff --git a/docs/modules/demos/images/jupyterhub-keycloak/server-options.png b/docs/modules/demos/images/jupyterhub-keycloak/server-options.png new file mode 100644 index 0000000000000000000000000000000000000000..fb00ce702cb444f8d5dbfa5c65ee5eed3b7fa5fe GIT binary patch literal 29720 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 literal 0 HcmV?d00001 diff --git a/docs/modules/demos/pages/jupyterhub-keycloak.adoc b/docs/modules/demos/pages/jupyterhub-keycloak.adoc new file mode 100644 index 00000000..8ab84ab6 --- /dev/null +++ b/docs/modules/demos/pages/jupyterhub-keycloak.adoc @@ -0,0 +1,187 @@ += jupyterhub-pyspark-hdfs-anomaly-detection-taxi-data + +:k8s-cpu: https://kubernetes.io/docs/tasks/debug/debug-cluster/resource-metrics-pipeline/#cpu +:spark-pkg: https://spark.apache.org/docs/latest/api/python/user_guide/python_packaging.html +:pyspark: https://spark.apache.org/docs/latest/api/python/getting_started/index.html +:jupyterhub-k8s: https://github.com/jupyterhub/zero-to-jupyterhub-k8s +:jupyterlab: https://jupyterlab.readthedocs.io/en/stable/ +:jupyter: https://jupyter.org +:keycloak: https://www.keycloak.org/ +:gas-sensor: https://archive.ics.uci.edu/dataset/487/gas+sensor+array+temperature+modulation +:jhub-foundation: https://github.com/jupyter/docker-stacks/blob/main/images/docker-stacks-foundation/Dockerfile#L6 +:spark-infra: https://github.com/apache/spark/blob/v3.5.2/dev/infra/Dockerfile + +This demo showcases the integration between {jupyter}[Jupyter] and {keycloak}[Keycloak] deployed on the Stackable Data Platform (SDP) Kubernetes cluster. +{jupyterlab}[JupyterLab] is deployed using the {jupyterhub-k8s}[pyspark-notebook stack] provided by the Jupyter community. +A simple notebook is provided that shows how to start a standalone Spark cluster, reading and writing data from: + +- an S3 instance +- HDFS + +The SDP makes this integration easy by publishing a discovery ConfigMap for the HDFS cluster. +This ConfigMap is then mounted in all Pods running {pyspark}[PySpark] notebooks so that these have access to HDFS data. +For this demo a small sample of {gas-sensor}[gas sensor measurements*] is provided. + +Install this demo on an existing Kubernetes cluster: + +[source,console] +---- +$ stackablectl demo install jupyterhub-keycloak +---- + +WARNING: There are security issues to be aware of when running a distributed spark cluster from within a JupyterHub notebook. +With distributed spark the Notebook acts as the driver and requests executors Pods from k8s. +These Pods in turn can mount *all* volumes and Secrets in that namespaces. +To prevent this from breaking user separation, it is planned to use an OPA gatekeeper to have OPA rules that restrict what the created executor Pods can mount. This is not yet implemented in this demo. + +[#system-requirements] +== System requirements + +To run this demo, your system needs at least: + +* 8 {k8s-cpu}[cpu units] (core/hyperthread) +* 32GiB memory + +== Aim / Context + +This demo shows how to authenticate JupyerHub users against a Keycloak backend using JupyterHub's OAuthenticator. +The same users as in the xref:end-to-end-security.adoc[End-to-end-security] demo are configured in Keycloak and these will be used as examples. +The notebook offers a simple template for using spark to interact with different backends. + +== Overview + +This demo will: + +* Install the required Stackable Data Platform operators +* Spin up the following data products: +** *JupyterHub*: A multi-user server for Jupyter notebooks +** *Keycloak*: An identity and access management product +** *S3*: A Minio instance for data storage +** *Apache HDFS*: A distributed file system +* Download a sample of the gas sensor dataset into S3 +* Install the Jupyter notebook +* Demonstrate some basic data operations against S3 and HDFS +* Illustrate multi-user usage + +== JupyterHub + +Have a look at the available Pods before logging in: + +[source,console] +---- +$ kubectl get pods +NAME READY STATUS RESTARTS AGE +hub-7469c78668-sgzp6 1/1 Running 0 3m39s +keycloak-544d757f57-2qgjb 2/2 Running 0 3m41s +load-gas-data-z7qxb 0/1 Completed 0 37s +minio-5486d7584f-whw69 1/1 Running 0 4m5s +proxy-cd7d57d78-xjlrp 1/1 Running 0 3m39s +---- + +The `proxy` Pod has an associated `proxy-public` service with a statically-defined port (31095), exposed as a NodePort. +In order to reach the JupyterHub web interface, navigate to this service. +The node port IP can be found in the ConfigMap `keycloak-address` (written by the Keycloak deployment as it starts up). +In the example below that would then be 172.19.0.5:31095: + +[source,yaml] +---- +apiVersion: v1 +data: + keycloakAddress: 172.19.0.5:31093 # Keycloak itself + keycloakNodeIp: 172.19.0.5 # can be used to access the proxy-public service +kind: ConfigMap +metadata: + name: keycloak-address + namespace: default +---- + +NOTE: The hub may show `CreateContainerConfigError`` for a few moments on start-up as it requires the ConfigMap written by the Keycloak deployment. + +You should see the JupyterHub login page, which will indicate a re-direct to the OAuth service (Keycloak): + +image::jupyterhub-keycloak/oauth-login.png[] + +Click on the sign-in button. +You will redirected to the Keycloak login, where you can enter one of the afore-mentioned users: + +image::jupyterhub-keycloak/keycloak-login.png[] + +A successful login will redirect you back to JupyterHub where different profiles are listed (the drop-down options are visible when you click on the respective fields): + +image::jupyterhub-keycloak/server-options.png[] + +The demo includes a notebook that is already mounted. +Double-click on the file process-s3.ipynb in the explorer window on the left: + +image::jupyterhub-keycloak/load-nb.png[] + +Run the notebook by selecting "Run All Cells" from the menu: + +image::jupyterhub-keycloak/run-nb.png[] + +The notebook includes some comments regarding image compatibility and uses a custom image built off the official Spark official that matches the Spark version used in the notebook. +The java versions also match exactly. +Python versions need to match at the `major:minor` level, which is why Python 3.11 is used in the custom image. + +WARNING: spark security issues + +Once the spark executor has been started (we have specified `spark.executor.instances` = 1) it will spin up as an extra pod. +We have named the spark job to incorporate the current user (justin-martin). +JupyterHub has started a pod for the user's notebook instance (`jupyter-justin-martin---bdd3b4a1`) and another one for the spark executor (`process-s3-jupyter-justin-martin-bdd3b4a1-9e9da995473f481f-exec-1`): + +[source,console] +---- +12:49 $ kubectl get pods +NAME READY STATUS RESTARTS AGE +hub-7469c78668-sgzp6 1/1 Running 0 25m +jupyter-justin-martin---bdd3b4a1 1/1 Running 0 17m +keycloak-544d757f57-2qgjb 2/2 Running 0 25m +load-gas-data-z7qxb 0/1 Completed 0 22m +minio-5486d7584f-whw69 1/1 Running 0 26m +process-s3-jupyter-justin-martin-... 1/1 Running 0 2m9s +proxy-cd7d57d78-xjlrp 1/1 Running 0 25m +---- + +Stop the kernel in the notebook (which will shut down the spark session and thus the executor) and log out as the current user. +Log in now as `daniel.king` and then again `isla.williams` (you may need so do this in a clean browser sessions so that existing login cookies are removed). +This user has been defined as an admin user in the jupyterhub configuration: + +[source,yaml] +---- + ... + hub: + config: + Authenticator: + # don't filter here: delegate to Keycloak + allow_all: True + admin_users: + - isla.williams + ... +---- + +You should now see user-specific pods for all three users: + + +[source,console] +---- +16:16 $ kubectl get pods +NAME READY STATUS RESTARTS AGE +hub-7666dfd6cf-p52sn 1/1 Running 0 7m30s +jupyter-daniel-king---181a80ce 1/1 Running 0 6m17s +jupyter-isla-williams---14730816 1/1 Running 0 4m50s +jupyter-justin-martin---bdd3b4a1 1/1 Running 0 3h47m +keycloak-544d757f57-2qgjb 2/2 Running 0 3h56m +load-gas-data-z7qxb 0/1 Completed 0 3h53m +minio-5486d7584f-whw69 1/1 Running 0 3h56m +proxy-6c86fb64f7-422d6 1/1 Running 0 7m31s +---- + +The admin user (`isla.williams`) will also have an extra Admin tab in the JupyterHub console where current users can be managed: + +image::jupyterhub-keycloak/admin-tab.png[] + +NOTE: if you attempt to re-run the notebook you will need to first remove the `_temporary folders` from the S3 buckets. +These are created by spark jobs and are not removed from the bucket when the job has completed. + +*See: Burgués, Javier, Juan Manuel Jiménez-Soto, and Santiago Marco. "Estimation of the limit of detection in semiconductor gas sensors through linearized calibration models." Analytica chimica acta 1013 (2018): 13-25 +Burgués, Javier, and Santiago Marco. "Multivariate estimation of the limit of detection by orthogonal partial least squares in temperature-modulated MOX sensors." Analytica chimica acta 1019 (2018): 49-64. diff --git a/docs/modules/demos/partials/demos.adoc b/docs/modules/demos/partials/demos.adoc index 473abad6..ebd54e62 100644 --- a/docs/modules/demos/partials/demos.adoc +++ b/docs/modules/demos/partials/demos.adoc @@ -2,6 +2,7 @@ * xref:data-lakehouse-iceberg-trino-spark.adoc[] * xref:end-to-end-security.adoc[] * xref:hbase-hdfs-load-cycling-data.adoc[] +* xref:jupyterhub-keycloak.adoc[] * xref:jupyterhub-pyspark-hdfs-anomaly-detection-taxi-data.adoc[] * xref:logging.adoc[] * xref:nifi-kafka-druid-earthquake-data.adoc[] diff --git a/stacks/jupyterhub-keycloak/jupyterhub-native-auth.yaml b/stacks/jupyterhub-keycloak/jupyterhub-native-auth.yaml new file mode 100644 index 00000000..a2fd7cbd --- /dev/null +++ b/stacks/jupyterhub-keycloak/jupyterhub-native-auth.yaml @@ -0,0 +1,71 @@ +--- +releaseName: jupyterhub +name: jupyterhub +repo: + name: jupyterhub + url: https://jupyterhub.github.io/helm-chart/ +version: 4.0.0 +options: + hub: + config: + Authenticator: + allow_all: True + admin_users: + - admin + JupyterHub: + authenticator_class: nativeauthenticator.NativeAuthenticator + NativeAuthenticator: + open_signup: true + proxy: + service: + type: ClusterIP + rbac: + create: true + prePuller: + hook: + enabled: false + continuous: + enabled: false + scheduling: + userScheduler: + enabled: false + singleuser: + cmd: null + serviceAccountName: hub + networkPolicy: + enabled: false + extraLabels: + stackable.tech/vendor: Stackable + profileList: + - display_name: "Default" + description: "Default profile" + default: true + profile_options: + cpu: + display_name: CPU + choices: + "2": + display_name: "2 request, 2 limit" + kubespawner_override: + cpu_guarantee: 2 + cpu_limit: 2 + "1 request, 16 limit": + display_name: "1 request, 16 limit" + kubespawner_override: + cpu_guarantee: 1 + cpu_limit: 16 + memory: + display_name: Memory + choices: + "8 GB": + display_name: "8 GB" + kubespawner_override: + mem_guarantee: "8G" + mem_limit: "8G" + image: + display_name: Image + choices: + "quay.io/jupyter/pyspark-notebook:python-3.11.9": + display_name: "quay.io/jupyter/pyspark-notebook:python-3.11.9" + kubespawner_override: + image: "quay.io/jupyter/pyspark-notebook:python-3.11.9" diff --git a/stacks/jupyterhub-keycloak/jupyterhub.yaml b/stacks/jupyterhub-keycloak/jupyterhub.yaml index 8ba5805e..a99470e3 100644 --- a/stacks/jupyterhub-keycloak/jupyterhub.yaml +++ b/stacks/jupyterhub-keycloak/jupyterhub.yaml @@ -11,6 +11,8 @@ options: Authenticator: # don't filter here: delegate to Keycloak allow_all: True + admin_users: + - isla.williams GenericOAuthenticator: client_id: jupyterhub client_secret: {{jupyterhubClientPassword}} From 9c7298e11205b3b0e6da16396e561243b9040bd7 Mon Sep 17 00:00:00 2001 From: Andrew Kenworthy Date: Thu, 27 Feb 2025 16:49:07 +0100 Subject: [PATCH 27/37] typo, fixed title --- docs/modules/demos/pages/jupyterhub-keycloak.adoc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/modules/demos/pages/jupyterhub-keycloak.adoc b/docs/modules/demos/pages/jupyterhub-keycloak.adoc index 8ab84ab6..6622bf85 100644 --- a/docs/modules/demos/pages/jupyterhub-keycloak.adoc +++ b/docs/modules/demos/pages/jupyterhub-keycloak.adoc @@ -1,4 +1,4 @@ -= jupyterhub-pyspark-hdfs-anomaly-detection-taxi-data += jupyterhub-keycloak :k8s-cpu: https://kubernetes.io/docs/tasks/debug/debug-cluster/resource-metrics-pipeline/#cpu :spark-pkg: https://spark.apache.org/docs/latest/api/python/user_guide/python_packaging.html @@ -13,7 +13,7 @@ This demo showcases the integration between {jupyter}[Jupyter] and {keycloak}[Keycloak] deployed on the Stackable Data Platform (SDP) Kubernetes cluster. {jupyterlab}[JupyterLab] is deployed using the {jupyterhub-k8s}[pyspark-notebook stack] provided by the Jupyter community. -A simple notebook is provided that shows how to start a standalone Spark cluster, reading and writing data from: +A simple notebook is provided that shows how to start a distributed Spark cluster, reading and writing data from: - an S3 instance - HDFS @@ -29,9 +29,9 @@ Install this demo on an existing Kubernetes cluster: $ stackablectl demo install jupyterhub-keycloak ---- -WARNING: There are security issues to be aware of when running a distributed spark cluster from within a JupyterHub notebook. +WARNING: There are security issues to be aware of when running a distributed Spark cluster from within a JupyterHub notebook. With distributed spark the Notebook acts as the driver and requests executors Pods from k8s. -These Pods in turn can mount *all* volumes and Secrets in that namespaces. +These Pods in turn can mount *all* volumes and Secrets in that namespace. To prevent this from breaking user separation, it is planned to use an OPA gatekeeper to have OPA rules that restrict what the created executor Pods can mount. This is not yet implemented in this demo. [#system-requirements] From 7c497ee4743b21115804859d2c1a3eb1b62c5eaa Mon Sep 17 00:00:00 2001 From: Andrew Kenworthy Date: Fri, 28 Feb 2025 13:47:39 +0100 Subject: [PATCH 28/37] added hdfs write/read steps --- demos/demos-v2.yaml | 3 +- .../jupyterhub-keycloak/create-hdfs-dir.yaml | 29 +++++++++ .../images/jupyterhub-keycloak/s3-buckets.png | Bin 0 -> 200482 bytes .../demos/pages/jupyterhub-keycloak.adoc | 3 +- stacks/jupyterhub-keycloak/README.md | 11 ---- stacks/jupyterhub-keycloak/hdfs.yaml | 57 ++++++++++++++++++ stacks/jupyterhub-keycloak/jupyterhub.yaml | 7 +++ stacks/jupyterhub-keycloak/process-s3.ipynb | 22 ++++++- stacks/jupyterhub-keycloak/zookeeper.yaml | 12 ++++ stacks/stacks-v2.yaml | 4 ++ 10 files changed, 134 insertions(+), 14 deletions(-) create mode 100644 demos/jupyterhub-keycloak/create-hdfs-dir.yaml create mode 100644 docs/modules/demos/images/jupyterhub-keycloak/s3-buckets.png delete mode 100644 stacks/jupyterhub-keycloak/README.md create mode 100644 stacks/jupyterhub-keycloak/hdfs.yaml create mode 100644 stacks/jupyterhub-keycloak/zookeeper.yaml diff --git a/demos/demos-v2.yaml b/demos/demos-v2.yaml index 9a7abab5..183b6d38 100644 --- a/demos/demos-v2.yaml +++ b/demos/demos-v2.yaml @@ -228,7 +228,7 @@ demos: pvc: 16Gi jupyterhub-keycloak: description: Demo showing jupyterhub notebooks secured with keycloak - documentation: TODO + documentation: https://docs.stackable.tech/stackablectl/stable/demos/jupyterhub-keycloak.html stackableStack: jupyterhub-keycloak labels: - jupyterhub @@ -237,6 +237,7 @@ demos: - S3 manifests: - plainYaml: demos/jupyterhub-keycloak/load-gas-data.yaml + - plainYaml: demos/jupyterhub-keycloak/create-hdfs-dir.yaml supportedNamespaces: [] resourceRequests: cpu: 6400m diff --git a/demos/jupyterhub-keycloak/create-hdfs-dir.yaml b/demos/jupyterhub-keycloak/create-hdfs-dir.yaml new file mode 100644 index 00000000..15ae78bc --- /dev/null +++ b/demos/jupyterhub-keycloak/create-hdfs-dir.yaml @@ -0,0 +1,29 @@ +--- +apiVersion: batch/v1 +kind: Job +metadata: + name: create-hdfs-dir +spec: + template: + spec: + containers: + - name: create-hdfs-dir + image: oci.stackable.tech/sdp/hadoop:3.4.0-stackable0.0.0-dev + # yamllint disable rule:line-length + command: [ + "bash", "-c", "/stackable/hadoop/bin/hdfs dfs -mkdir -p /gas-sensor-data \ + && /stackable/hadoop/bin/hdfs dfs -chown -R access-spark /gas-sensor-data" + ] + # yamllint enable rule:line-length + volumeMounts: + - name: hdfs-discovery-configmap + mountPath: /hdfs + env: + - name: HADOOP_CONF_DIR + value: /hdfs + volumes: + - name: hdfs-discovery-configmap + configMap: + name: hdfs + restartPolicy: OnFailure + backoffLimit: 50 diff --git a/docs/modules/demos/images/jupyterhub-keycloak/s3-buckets.png b/docs/modules/demos/images/jupyterhub-keycloak/s3-buckets.png new file mode 100644 index 0000000000000000000000000000000000000000..4b671b629a20f72d67c0b2e6bb85a1ec615895f6 GIT binary patch literal 200482 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 z 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