diff --git a/.github/stale.yml b/.github/stale.yml new file mode 100644 index 00000000000..972e235a185 --- /dev/null +++ b/.github/stale.yml @@ -0,0 +1,39 @@ +# Configuration for probot-stale - https://github.com/probot/stale + +# Number of days of inactivity before an Issue or Pull Request becomes stale +daysUntilStale: 90 + +# Number of days of inactivity before an Issue or Pull Request with the stale label is closed. +# Set to false to disable. If disabled, issues still need to be closed manually, but will remain marked as stale. +daysUntilClose: 30 + +# Only issues or pull requests with all of these labels are check if stale. Defaults to `[]` (disabled) +onlyLabels: [] + +# Issues or Pull Requests with these labels will never be considered stale. Set to `[]` to disable +exemptLabels: [] + +# Set to true to ignore issues in a project (defaults to false) +exemptProjects: true + +# Set to true to ignore issues in a milestone (defaults to false) +exemptMilestones: true + +# Set to true to ignore issues with an assignee (defaults to false) +exemptAssignees: true + +# Label to use when marking as stale +staleLabel: status/stale + +# Comment to post when marking as stale. Set to `false` to disable +markComment: > + This repository uses a bot to automatically label issues which have not had any activity (commit/comment/label) + for 90 days. This helps us manage the community issues better. If the issue is still relevant, please add a comment to the + issue so the bot can remove the label and we know it is still valid. If it is no longer relevant (or possibly fixed in the + latest release), the bot will automatically close the issue in 30 days. Thank you for your contributions. + +# Limit the number of actions per hour, from 1-30. Default is 30 +limitPerRun: 30 + +# Limit to only `issues` +only: issues diff --git a/.gitignore b/.gitignore index daefacf85e2..e50d424efcf 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,5 @@ package-lock.json /scripts/converters/results_to_markdown/.terraform /scripts/converters/results_to_markdown/terraform.tfstate* /scripts/converters/results_to_markdown/*.tfvars + +.idea/ diff --git a/Dockerfile.build b/Dockerfile.build index 614b1980fc8..a50a0e1e472 100644 --- a/Dockerfile.build +++ b/Dockerfile.build @@ -1,4 +1,4 @@ -FROM node:8-alpine +FROM node:16-alpine RUN apk update && apk add py-pygments bash git asciidoc gcompat && rm -rf /var/cache/apk/* diff --git a/config.toml b/config.toml index 35fdfda6e03..6ea4f5e3a0b 100644 --- a/config.toml +++ b/config.toml @@ -209,4 +209,4 @@ pre = "keyboard_arrow_down" [[menu.main]] name = "Partners" url = "https://rancher.com/partners/" - parent = "about" \ No newline at end of file + parent = "about" diff --git a/content/k3s/latest/en/_index.md b/content/k3s/latest/en/_index.md index a02147dc599..4d71be76b38 100644 --- a/content/k3s/latest/en/_index.md +++ b/content/k3s/latest/en/_index.md @@ -26,7 +26,7 @@ K3s is a fully compliant Kubernetes distribution with the following enhancements * Secure by default with reasonable defaults for lightweight environments. * Simple but powerful "batteries-included" features have been added, such as: a local storage provider, a service load balancer, a Helm controller, and the Traefik ingress controller. * Operation of all Kubernetes control plane components is encapsulated in a single binary and process. This allows K3s to automate and manage complex cluster operations like distributing certificates. -* External dependencies have been minimized (just a modern kernel and cgroup mounts needed). K3s packages required dependencies, including: +* External dependencies have been minimized (just a modern kernel and cgroup mounts needed). K3s packages the required dependencies, including: * containerd * Flannel * CoreDNS @@ -38,4 +38,4 @@ K3s is a fully compliant Kubernetes distribution with the following enhancements # What's with the name? -We wanted an installation of Kubernetes that was half the size in terms of memory footprint. Kubernetes is a 10-letter word stylized as K8s. So something half as big as Kubernetes would be a 5-letter word stylized as K3s. There is no long form of K3s and no official pronunciation. \ No newline at end of file +We wanted an installation of Kubernetes that was half the size in terms of memory footprint. Kubernetes is a 10-letter word stylized as K8s. So something half as big as Kubernetes would be a 5-letter word stylized as K3s. There is no long form of K3s and no official pronunciation. diff --git a/content/k3s/latest/en/advanced/_index.md b/content/k3s/latest/en/advanced/_index.md index 494650ebf82..554a0e5469a 100644 --- a/content/k3s/latest/en/advanced/_index.md +++ b/content/k3s/latest/en/advanced/_index.md @@ -13,18 +13,18 @@ This section contains advanced information describing the different ways you can - [Using Docker as the container runtime](#using-docker-as-the-container-runtime) - [Using etcdctl](#using-etcdctl) - [Configuring containerd](#configuring-containerd) -- [Secrets Encryption Config (Experimental)](#secrets-encryption-config-experimental) - [Running K3s with Rootless mode (Experimental)](#running-k3s-with-rootless-mode-experimental) - [Node labels and taints](#node-labels-and-taints) - [Starting the server with the installation script](#starting-the-server-with-the-installation-script) - [Additional preparation for Alpine Linux setup](#additional-preparation-for-alpine-linux-setup) +- [Additional preparation for (Red Hat/CentOS) Enterprise Linux](#additional-preparation-for-red-hat/centos-enterprise-linux) +- [Additional preparation for Raspberry Pi OS Setup](#additional-preparation-for-raspberry-pi-os-setup) +- [Enabling vxlan on Ubuntu 21.10+ on Raspberry Pi](#enabling-vxlan-on-ubuntu-21.10+-on-raspberry-pi) - [Running K3d (K3s in Docker) and docker-compose](#running-k3d-k3s-in-docker-and-docker-compose) -- [Enabling legacy iptables on Raspbian Buster](#enabling-legacy-iptables-on-raspbian-buster) -- [Enabling cgroups for Raspbian Buster](#enabling-cgroups-for-raspbian-buster) - [SELinux Support](#selinux-support) -- [Additional preparation for (Red Hat/CentOS) Enterprise Linux](#additional-preparation-for-red-hat-centos-enterprise-linux) - [Enabling Lazy Pulling of eStargz (Experimental)](#enabling-lazy-pulling-of-estargz-experimental) - [Additional Logging Sources](#additional-logging-sources) +- [Server and agent tokens](#server-and-agent-tokens) # Certificate Rotation @@ -127,8 +127,8 @@ If you would like to use etcdctl after installing K3s with embedded etcd, instal ``` $ VERSION="v3.5.0" -$ curl -L https://github.com/etcd-io/etcd/releases/download/${VERSION}/etcd-${VERSION}-linux-amd64.tar.gz --output etcdctl-${VERSION}-linux-amd64.tar.gz -$ sudo tar -zxvf etcdctl-${VERSION}-linux-amd64.tar.gz -C /usr/local/bin +$ curl -L https://github.com/etcd-io/etcd/releases/download/${VERSION}/etcd-${VERSION}-linux-amd64.tar.gz --output etcdctl-linux-amd64.tar.gz +$ sudo tar -zxvf etcdctl-linux-amd64.tar.gz --strip-components=1 -C /usr/local/bin etcd-${VERSION}-linux-amd64/etcdctl ``` Then start using etcdctl commands with the appropriate K3s flags: @@ -143,46 +143,8 @@ K3s will generate config.toml for containerd in `/var/lib/rancher/k3s/agent/etc/ For advanced customization for this file you can create another file called `config.toml.tmpl` in the same directory and it will be used instead. -The `config.toml.tmpl` will be treated as a Go template file, and the `config.Node` structure is being passed to the template. [This template](https://github.com/rancher/k3s/blob/master/pkg/agent/templates/templates.go#L16-L32) example on how to use the structure to customize the configuration file. +The `config.toml.tmpl` will be treated as a Go template file, and the `config.Node` structure is being passed to the template. See [this folder](https://github.com/k3s-io/k3s/blob/master/pkg/agent/templates) for Linux and Windows examples on how to use the structure to customize the configuration file. -# Secrets Encryption Config (Experimental) -As of v1.17.4+k3s1, K3s added the experimental feature of enabling secrets encryption at rest by passing the flag `--secrets-encryption` on a server, this flag will do the following automatically: - -- Generate an AES-CBC key -- Generate an encryption config file with the generated key - -``` -{ - "kind": "EncryptionConfiguration", - "apiVersion": "apiserver.config.k8s.io/v1", - "resources": [ - { - "resources": [ - "secrets" - ], - "providers": [ - { - "aescbc": { - "keys": [ - { - "name": "aescbckey", - "secret": "xxxxxxxxxxxxxxxxxxx" - } - ] - } - }, - { - "identity": {} - } - ] - } - ] -} -``` - -- Pass the config to the KubeAPI as encryption-provider-config - -Once enabled any created secret will be encrypted with this key. Note that if you disable encryption then any encrypted secrets will not be readable until you enable encryption again. # Running K3s with Rootless mode (Experimental) @@ -294,6 +256,39 @@ Then update the config and reboot: update-extlinux reboot ``` +# Additional preparation for (Red Hat/CentOS) Enterprise Linux + +It is recommended to turn off firewalld: +``` +systemctl disable firewalld --now +``` + +If enabled, it is required to disable nm-cloud-setup and reboot the node: +``` +systemctl disable nm-cloud-setup.service nm-cloud-setup.timer +reboot +``` + +# Additional preparation for Raspberry Pi OS Setup +## Enabling legacy iptables on Raspberry Pi OS +Raspberry Pi OS (formerly Raspbian) defaults to using `nftables` instead of `iptables`. **K3S** networking features require `iptables` and do not work with `nftables`. Follow the steps below to switch configure **Buster** to use `legacy iptables`: +``` +sudo iptables -F +sudo update-alternatives --set iptables /usr/sbin/iptables-legacy +sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy +sudo reboot +``` + +## Enabling cgroups for Raspberry Pi OS + +Standard Raspberry Pi OS installations do not start with `cgroups` enabled. **K3S** needs `cgroups` to start the systemd service. `cgroups`can be enabled by appending `cgroup_memory=1 cgroup_enable=memory` to `/boot/cmdline.txt`. + +# Enabling vxlan on Ubuntu 21.10+ on Raspberry Pi + +Starting with Ubuntu 21.10, vxlan support on Raspberry Pi has been moved into a seperate kernel module. +``` +sudo apt install linux-modules-extra-raspi +``` # Running K3d (K3s in Docker) and docker-compose @@ -331,20 +326,6 @@ Alternatively the `docker run` command can also be used: --privileged rancher/k3s:vX.Y.Z -# Enabling legacy iptables on Raspbian Buster - -Raspbian Buster defaults to using `nftables` instead of `iptables`. **K3S** networking features require `iptables` and do not work with `nftables`. Follow the steps below to switch configure **Buster** to use `legacy iptables`: -``` -sudo iptables -F -sudo update-alternatives --set iptables /usr/sbin/iptables-legacy -sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy -sudo reboot -``` - -# Enabling cgroups for Raspbian Buster - -Standard Raspbian Buster installations do not start with `cgroups` enabled. **K3S** needs `cgroups` to start the systemd service. `cgroups`can be enabled by appending `cgroup_memory=1 cgroup_enable=memory` to `/boot/cmdline.txt`. - ### example of /boot/cmdline.txt ``` console=serial0,115200 console=tty1 root=PARTUUID=58b06195-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait cgroup_memory=1 cgroup_enable=memory @@ -403,19 +384,6 @@ Using a custom `--data-dir` under SELinux is not supported. To customize it, you {{%/tab%}} {{% /tabs %}} -# Additional preparation for (Red Hat/CentOS) Enterprise Linux - -It is recommended to turn off firewalld: -``` -systemctl disable firewalld --now -``` - -If enabled, it is required to disable nm-cloud-setup and reboot the node: -``` -systemctl disable nm-cloud-setup.service nm-cloud-setup.timer -reboot -``` - # Enabling Lazy Pulling of eStargz (Experimental) ### What's lazy pulling and eStargz? @@ -479,4 +447,14 @@ helm repo add rancher-charts https://charts.rancher.io helm repo update helm install --create-namespace -n cattle-logging-system rancher-logging-crd rancher-charts/rancher-logging-crd helm install --create-namespace -n cattle-logging-system rancher-logging --set additionalLoggingSources.k3s.enabled=true rancher-charts/rancher-logging -``` \ No newline at end of file +``` + +# Server and agent tokens + +In K3s, there are two types of tokens: K3S_TOKEN and K3S_AGENT_TOKEN. + +K3S_TOKEN: Defines the key required by the server to offer the HTTP config resources. These resources are requested by the other servers before joining the K3s HA cluster. If the K3S_AGENT_TOKEN is not defined, the agents use this token as well to access the required HTTP resources to join the cluster. Note that this token is also used to generate the encryption key for important content in the database (e.g., bootstrap data). + +K3S_AGENT_TOKEN: Optional. Defines the key required by the server to offer HTTP config resources to the agents. If not defined, agents will require K3S_TOKEN. Defining K3S_AGENT_TOKEN is encouraged to avoid agents having to know K3S_TOKEN, which is also used to encrypt data. + +If no K3S_TOKEN is defined, the first K3s server will generate a random one. The result is part of the content in `/var/lib/rancher/k3s/server/token`. For example, `K1070878408e06a827960208f84ed18b65fa10f27864e71a57d9e053c4caff8504b::server:df54383b5659b9280aa1e73e60ef78fc`, where `df54383b5659b9280aa1e73e60ef78fc` is the K3S_TOKEN. diff --git a/content/k3s/latest/en/backup-restore/_index.md b/content/k3s/latest/en/backup-restore/_index.md index 27252dbb6fb..13031a06c35 100644 --- a/content/k3s/latest/en/backup-restore/_index.md +++ b/content/k3s/latest/en/backup-restore/_index.md @@ -18,7 +18,7 @@ For details on taking database snapshots and restoring your database from them, - [Official MySQL documentation](https://dev.mysql.com/doc/refman/8.0/en/replication-snapshot-method.html) - [Official PostgreSQL documentation](https://www.postgresql.org/docs/8.3/backup-dump.html) -- [Official etcd documentation](https://github.com/etcd-io/etcd/blob/master/Documentation/op-guide/recovery.md) +- [Official etcd documentation](https://etcd.io/docs/latest/op-guide/recovery/) # Backup and Restore with Embedded etcd Datastore (Experimental) @@ -57,7 +57,7 @@ These options can be passed in with the command line, or in the [configuration f | Options | Description | | ----------- | --------------- | | `--etcd-disable-snapshots` | Disable automatic etcd snapshots | -| `--etcd-snapshot-schedule-cron` value | Snapshot interval time in cron spec. eg. every 5 hours `* */5 * * *`(default: `0 */12 * * *`) | +| `--etcd-snapshot-schedule-cron` value | Snapshot interval time in cron spec. eg. every 5 hours `0 */5 * * *`(default: `0 */12 * * *`) | | `--etcd-snapshot-retention` value | Number of snapshots to retain (default: 5) | | `--etcd-snapshot-dir` value | Directory to save db snapshots. (Default location: `${data-dir}/db/snapshots`) | | `--cluster-reset` | Forget all peers and become sole member of a new cluster. This can also be set with the environment variable `[$K3S_CLUSTER_RESET]`. diff --git a/content/k3s/latest/en/helm/_index.md b/content/k3s/latest/en/helm/_index.md index 89d21d70ba5..5d43acbb78f 100644 --- a/content/k3s/latest/en/helm/_index.md +++ b/content/k3s/latest/en/helm/_index.md @@ -96,8 +96,9 @@ metadata: namespace: kube-system spec: valuesContent: |- - image: traefik - imageTag: v1.7.26-alpine + image: + name: traefik + tag: v2.6.1 proxyProtocol: enabled: true trustedIPs: diff --git a/content/k3s/latest/en/installation/airgap/_index.md b/content/k3s/latest/en/installation/airgap/_index.md index 91d37c00830..303cebab4b9 100644 --- a/content/k3s/latest/en/installation/airgap/_index.md +++ b/content/k3s/latest/en/installation/airgap/_index.md @@ -3,7 +3,7 @@ title: "Air-Gap Install" weight: 60 --- -You can install K3s in an air-gapped environment using two different methods. You can either deploy a private registry and mirror docker.io or you can manually deploy images such as for small clusters. +You can install K3s in an air-gapped environment using two different methods. An air-gapped environment is any environment that is not directly connected to the Internet. You can either deploy a private registry and mirror docker.io, or you can manually deploy images such as for small clusters. # Private Registry Method @@ -39,22 +39,23 @@ Follow the steps in the next section to install K3s. # Install K3s -Only after you have completed either the [Private Registry Method](#private-registry-method) or the [Manually Deploy Images Method](#manually-deploy-images-method) above should you install K3s. +### Prerequisites -Obtain the K3s binary from the [releases](https://github.com/rancher/k3s/releases) page, matching the same version used to get the airgap images. -Obtain the K3s install script at https://get.k3s.io +- Before installing K3s, complete the the [Private Registry Method](#private-registry-method) or the [Manually Deploy Images Method](#manually-deploy-images-method) above to prepopulate the images that K3s needs to install. +- Download the K3s binary from the [releases](https://github.com/rancher/k3s/releases) page, matching the same version used to get the airgap images. Place the binary in `/usr/local/bin` on each air-gapped node and ensure it is executable. +- Download the K3s install script at https://get.k3s.io. Place the install script anywhere on each air-gapped node, and name it `install.sh`. -Place the binary in `/usr/local/bin` on each node and ensure it is executable. -Place the install script anywhere on each node, and name it `install.sh`. +When running the K3s script with the `INSTALL_K3S_SKIP_DOWNLOAD` environment variable, K3s will use the local version of the script and binary. -### Install Options +### Installing K3s in an Air-Gapped Environment + You can install K3s on one or more servers as described below. {{% tabs %}} {{% tab "Single Server Configuration" %}} -To install K3s on a single server simply do the following on the server node. +To install K3s on a single server, simply do the following on the server node: ``` INSTALL_K3S_SKIP_DOWNLOAD=true ./install.sh @@ -75,13 +76,13 @@ For example, step two of the High Availability with an External DB guide mention ``` curl -sfL https://get.k3s.io | sh -s - server \ - --datastore-endpoint="mysql://username:password@tcp(hostname:3306)/database-name" + --datastore-endpoint='mysql://username:password@tcp(hostname:3306)/database-name' ``` Instead, you would modify such examples like below: ``` -INSTALL_K3S_SKIP_DOWNLOAD=true INSTALL_K3S_EXEC='server --datastore-endpoint="mysql://username:password@tcp(hostname:3306)/database-name"' ./install.sh +INSTALL_K3S_SKIP_DOWNLOAD=true INSTALL_K3S_EXEC='server' K3S_DATASTORE_ENDPOINT='mysql://username:password@tcp(hostname:3306)/database-name' ./install.sh ``` {{% /tab %}} diff --git a/content/k3s/latest/en/installation/datastore/_index.md b/content/k3s/latest/en/installation/datastore/_index.md index 059d73e16fe..b5476b42f35 100644 --- a/content/k3s/latest/en/installation/datastore/_index.md +++ b/content/k3s/latest/en/installation/datastore/_index.md @@ -23,7 +23,7 @@ If you wish to use an external datastore such as PostgreSQL, MySQL, or etcd you CLI Flag | Environment Variable | Description ------------|-------------|------------------ - `--datastore-endpoint` | `K3S_DATASTORE_ENDPOINT` | Specify a PostgresSQL, MySQL, or etcd connection string. This is a string used to describe the connection to the datastore. The structure of this string is specific to each backend and is detailed below. + `--datastore-endpoint` | `K3S_DATASTORE_ENDPOINT` | Specify a PostgreSQL, MySQL, or etcd connection string. This is a string used to describe the connection to the datastore. The structure of this string is specific to each backend and is detailed below. `--datastore-cafile` | `K3S_DATASTORE_CAFILE` | TLS Certificate Authority (CA) file used to help secure communication with the datastore. If your datastore serves requests over TLS using a certificate signed by a custom certificate authority, you can specify that CA using this parameter so that the K3s client can properly verify the certificate. | | `--datastore-certfile` | `K3S_DATASTORE_CERTFILE` | TLS certificate file used for client certificate based authentication to your datastore. To use this feature, your datastore must be configured to support client certificate based authentication. If you specify this parameter, you must also specify the `datastore-keyfile` parameter. | | `--datastore-keyfile` | `K3S_DATASTORE_KEYFILE` | TLS key file used for client certificate based authentication to your datastore. See the previous `datastore-certfile` parameter for more details. | @@ -81,7 +81,7 @@ The above assumes a typical three node etcd cluster. The parameter can accept on {{% /tab %}} {{% /tabs %}} -
Based on the above, the following example command could be used to launch a server instance that connects to a PostgresSQL database named k3s: +
Based on the above, the following example command could be used to launch a server instance that connects to a PostgreSQL database named k3s: ``` K3S_DATASTORE_ENDPOINT='postgres://username:password@hostname:5432/k3s' k3s server ``` diff --git a/content/k3s/latest/en/installation/disable-flags/_index.md b/content/k3s/latest/en/installation/disable-flags/_index.md index 83b6b692cca..2dbbfeb8920 100644 --- a/content/k3s/latest/en/installation/disable-flags/_index.md +++ b/content/k3s/latest/en/installation/disable-flags/_index.md @@ -3,7 +3,7 @@ title: "Disable Components Flags" weight: 60 --- -When starting K3s server with --cluster-init it will run all control plane components that includes (api server, controller manager, scheduler, and etcd). However you can run server nodes with certain components and execlude others, the following sections will explain how to do that. +Starting the K3s server with `--cluster-init` will run all control plane components, including the api server, controller manager, scheduler, and etcd. However, you can run server nodes with certain components and exclude others; the following sections will explain how to do that. # ETCD Only Nodes diff --git a/content/k3s/latest/en/installation/ha-embedded/_index.md b/content/k3s/latest/en/installation/ha-embedded/_index.md index f8fe7d2ebea..6d4bb7bab49 100644 --- a/content/k3s/latest/en/installation/ha-embedded/_index.md +++ b/content/k3s/latest/en/installation/ha-embedded/_index.md @@ -23,3 +23,14 @@ K3S_TOKEN=SECRET k3s server --server https://:6443 ``` Now you have a highly available control plane. Joining additional worker nodes to the cluster follows the same procedure as a single server cluster. + +There are a few config flags that must be the same in all server nodes: + +* Network related flags: `--cluster-dns`, `--cluster-domain`, `--cluster-cidr`, `--service-cidr` +* Flags controlling the deployment of certain components: `--disable-helm-controller`, `--disable-kube-proxy`, `--disable-network-policy` and any component passed to `--disable` +* Feature related flags: `--secrets-encryption` + +## Existing clusters +If you have an existing cluster using the default embedded SQLite database, you can convert it to etcd by simply restarting your K3s server with the `--cluster-init` flag. Once you've done that, you'll be able to add additional instances as described above. + +>**Important:** K3s v1.22.2 and newer support migration from SQLite to etcd. Older versions will create a new empty datastore if you add `--cluster-init` to an existing server. diff --git a/content/k3s/latest/en/installation/ha/_index.md b/content/k3s/latest/en/installation/ha/_index.md index 00c082d2ac5..4e5072bfff8 100644 --- a/content/k3s/latest/en/installation/ha/_index.md +++ b/content/k3s/latest/en/installation/ha/_index.md @@ -33,12 +33,13 @@ You will first need to create an external datastore for the cluster. See the [Cl ### 2. Launch Server Nodes K3s requires two or more server nodes for this HA configuration. See the [Installation Requirements]({{}}/k3s/latest/en/installation/installation-requirements/) guide for minimum machine requirements. -When running the `k3s server` command on these nodes, you must set the `datastore-endpoint` parameter so that K3s knows how to connect to the external datastore. +When running the `k3s server` command on these nodes, you must set the `datastore-endpoint` parameter so that K3s knows how to connect to the external datastore. The `token` parameter can also be used to set a deterministic token when adding nodes. When empty, this token will be generated automatically for further use. -For example, a command like the following could be used to install the K3s server with a MySQL database as the external datastore: +For example, a command like the following could be used to install the K3s server with a MySQL database as the external datastore and [set a token]({{}}/k3s/latest/en/installation/install-options/server-config/#cluster-options): -``` +```bash curl -sfL https://get.k3s.io | sh -s - server \ + --token=SECRET \ --datastore-endpoint="mysql://username:password@tcp(hostname:3306)/database-name" ``` @@ -62,12 +63,37 @@ Agent nodes need a URL to register against. This can be the IP or hostname of an This endpoint can also be used for accessing the Kubernetes API. So you can, for example, modify your [kubeconfig](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/) file to point to it instead of a specific node. To avoid certificate errors in such a configuration, you should install the server with the `--tls-san YOUR_IP_OR_HOSTNAME_HERE` option. This option adds an additional hostname or IP as a Subject Alternative Name in the TLS cert, and it can be specified multiple times if you would like to access via both the IP and the hostname. -### 4. Optional: Join Agent Nodes +### 4. Optional: Join Additional Server Nodes + +The same example command in Step 2 can be used to join additional server nodes, where the token from the first node needs to be used. + +If the first server node was started without the `--token` CLI flag or `K3S_TOKEN` variable, the token value can be retrieved from any server already joined to the cluster: +```bash +cat /var/lib/rancher/k3s/server/token +``` + +Additional server nodes can then be added [using the token]({{}}/k3s/latest/en/installation/install-options/server-config/#cluster-options): + +```bash +curl -sfL https://get.k3s.io | sh -s - server \ + --token=SECRET \ + --datastore-endpoint="mysql://username:password@tcp(hostname:3306)/database-name" +``` + +There are a few config flags that must be the same in all server nodes: + +* Network related flags: `--cluster-dns`, `--cluster-domain`, `--cluster-cidr`, `--service-cidr` +* Flags controlling the deployment of certain components: `--disable-helm-controller`, `--disable-kube-proxy`, `--disable-network-policy` and any component passed to `--disable` +* Feature related flags: `--secrets-encryption` + +> **Note:** Ensure that you retain a copy of this token as it is required when restoring from backup and adding nodes. Previously, K3s did not enforce the use of a token when using external SQL datastores. + +### 5. Optional: Join Agent Nodes Because K3s server nodes are schedulable by default, the minimum number of nodes for an HA K3s server cluster is two server nodes and zero agent nodes. To add nodes designated to run your apps and services, join agent nodes to your cluster. Joining agent nodes in an HA cluster is the same as joining agent nodes in a single server cluster. You just need to specify the URL the agent should register to and the token it should use. -``` +```bash K3S_TOKEN=SECRET k3s agent --server https://fixed-registration-address:6443 ``` diff --git a/content/k3s/latest/en/installation/install-options/how-to-flags/_index.md b/content/k3s/latest/en/installation/install-options/how-to-flags/_index.md index 25aa9b43567..447dfdc40f9 100644 --- a/content/k3s/latest/en/installation/install-options/how-to-flags/_index.md +++ b/content/k3s/latest/en/installation/install-options/how-to-flags/_index.md @@ -27,9 +27,23 @@ If this command is not specified as a server or agent command, it will default t The final systemd command resolves to a combination of this environment variable and script args. To illustrate this, the following commands result in the same behavior of registering a server without flannel: ```bash -curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--no-flannel" sh -s - -curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="server --no-flannel" sh -s - -curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="server" sh -s - --no-flannel -curl -sfL https://get.k3s.io | sh -s - server --no-flannel -curl -sfL https://get.k3s.io | sh -s - --no-flannel -``` \ No newline at end of file +curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--flannel-backend none" sh -s - +curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="server --flannel-backend none" sh -s - +curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="server" sh -s - --flannel-backend none +curl -sfL https://get.k3s.io | sh -s - server --flannel-backend none +curl -sfL https://get.k3s.io | sh -s - --flannel-backend none +``` + +### Example C: CONFIG FILE + +Before installing k3s, you can create a file called `config.yaml` containing fields that match CLI flags. That file needs to be in the path: `/etc/rancher/k3s/config.yaml` for k3s to consume it. + +The fields in the config file drop the starting `--` from the matching CLI flag. For example: + +``` +write-kubeconfig-mode: 644 +token: "secret" +node-ip: 10.0.10.22,2a05:d012:c6f:4655:d73c:c825:a184:1b75 +cluster-cidr: 10.42.0.0/16,2001:cafe:42:0::/56 +service-cidr: 10.43.0.0/16,2001:cafe:42:1::/112 +``` diff --git a/content/k3s/latest/en/installation/install-options/server-config/_index.md b/content/k3s/latest/en/installation/install-options/server-config/_index.md index 687133583d8..853d2ccb491 100644 --- a/content/k3s/latest/en/installation/install-options/server-config/_index.md +++ b/content/k3s/latest/en/installation/install-options/server-config/_index.md @@ -152,6 +152,7 @@ the agent options are there because the server has the agent process embedded wi | Flag | Description | |------|--------------| +| `--etcd-arg` value | Customized flag for etcd process | | `--kube-apiserver-arg` value | Customized flag for kube-apiserver process | | `--kube-scheduler-arg` value | Customized flag for kube-scheduler process | | `--kube-controller-manager-arg` value | Customized flag for kube-controller-manager process | @@ -234,6 +235,7 @@ OPTIONS: --token-file value (cluster) File containing the cluster-secret/token [$K3S_TOKEN_FILE] --write-kubeconfig value, -o value (client) Write kubeconfig for admin client to this file [$K3S_KUBECONFIG_OUTPUT] --write-kubeconfig-mode value (client) Write kubeconfig with this mode [$K3S_KUBECONFIG_MODE] + --etcd-arg value (flags) Customized flag for etcd process --kube-apiserver-arg value (flags) Customized flag for kube-apiserver process --kube-scheduler-arg value (flags) Customized flag for kube-scheduler process --kube-controller-manager-arg value (flags) Customized flag for kube-controller-manager process diff --git a/content/k3s/latest/en/installation/installation-requirements/_index.md b/content/k3s/latest/en/installation/installation-requirements/_index.md index 1b5d14825de..f4fd336d7f7 100644 --- a/content/k3s/latest/en/installation/installation-requirements/_index.md +++ b/content/k3s/latest/en/installation/installation-requirements/_index.md @@ -44,13 +44,14 @@ K3s performance depends on the performance of the database. To ensure optimal sp The K3s server needs port 6443 to be accessible by all nodes. -The nodes need to be able to reach other nodes over UDP port 8472 when Flannel VXLAN is used. The node should not listen on any other port. K3s uses reverse tunneling such that the nodes make outbound connections to the server and all kubelet traffic runs through that tunnel. However, if you do not use Flannel and provide your own custom CNI, then port 8472 is not needed by K3s. +The nodes need to be able to reach other nodes over UDP port 8472 when Flannel VXLAN is used or over UDP ports 51820 and 51821 (when using IPv6) when Flannel Wireguard backend is used. The node should not listen on any other port. K3s uses reverse tunneling such that the nodes make outbound connections to the server and all kubelet traffic runs through that tunnel. However, if you do not use Flannel and provide your own custom CNI, then the ports needed by Flannel are not needed by K3s. If you wish to utilize the metrics server, you will need to open port 10250 on each node. If you plan on achieving high availability with embedded etcd, server nodes must be accessible to each other on ports 2379 and 2380. > **Important:** The VXLAN port on nodes should not be exposed to the world as it opens up your cluster network to be accessed by anyone. Run your nodes behind a firewall/security group that disables access to port 8472. +> **Warning:** Flannel relies on the [Bridge CNI plugin](https://www.cni.dev/plugins/current/main/bridge/) to create a L2 network that switches traffic. Rogue pods with NET_RAW capabilities can abuse that L2 network to launch attacks such as [ARP spoofing](https://static.sched.com/hosted_files/kccncna19/72/ARP%20DNS%20spoof.pdf). Therefore, as documented in the [kubernetes docs](https://kubernetes.io/docs/concepts/security/pod-security-standards/), please set a restricted profile that disables NET_RAW on non-trustable pods.
Inbound Rules for K3s Server Nodes
@@ -58,6 +59,8 @@ If you plan on achieving high availability with embedded etcd, server nodes must |-----|-----|----------------|---| | TCP | 6443 | K3s agent nodes | Kubernetes API Server | UDP | 8472 | K3s server and agent nodes | Required only for Flannel VXLAN +| UDP | 51820 | K3s server and agent nodes | Required only for Flannel Wireguard backend +| UDP | 51821 | K3s server and agent nodes | Required only for Flannel Wireguard backend with IPv6 | TCP | 10250 | K3s server and agent nodes | Kubelet metrics | TCP | 2379-2380 | K3s server nodes | Required only for HA with embedded etcd diff --git a/content/k3s/latest/en/installation/network-options/_index.md b/content/k3s/latest/en/installation/network-options/_index.md index dcc65a03aea..652f22f6adc 100644 --- a/content/k3s/latest/en/installation/network-options/_index.md +++ b/content/k3s/latest/en/installation/network-options/_index.md @@ -19,10 +19,11 @@ If you wish to use WireGuard as your flannel backend it may require additional k `--flannel-backend=ipsec` | Uses the IPSEC backend which encrypts network traffic. | `--flannel-backend=host-gw` | Uses the host-gw backend. | `--flannel-backend=wireguard` | Uses the WireGuard backend which encrypts network traffic. May require additional kernel modules and configuration. | + `--flannel-ipv6-masq` | Apply masquerading rules to IPv6 traffic (default for IPv4). Only applies on dual-stack or IPv6-only clusters | ### Custom CNI -Run K3s with `--flannel-backend=none` and install your CNI of choice. IP Forwarding should be enabled for Canal and Calico. Please reference the steps below. +Run K3s with `--flannel-backend=none` and install your CNI of choice. Most CNI plugins come with their own network policy engine, so it is recommended to set `--disable-network-policy` as well to avoid conflicts. IP Forwarding should be enabled for Canal and Calico. Please reference the steps below. {{% tabs %}} {{% tab "Canal" %}} @@ -74,15 +75,22 @@ You should see that IP forwarding is set to true. Dual-stack networking must be configured when the cluster is first created. It cannot be enabled on an existing single-stack cluster. -To enable dual-stack in k3s, you must provide valid dual-stack `cluster-cidr` and `service-cidr`, and set `disable-network-policy` on all server nodes. Both servers and agents must provide valid dual-stack `node-ip` settings. Node address auto-detection and network policy enforcement are not supported on dual-stack clusters when using the default flannel CNI. Besides, only vxlan backend is supported at the moment. This is an example of a valid configuration: +Dual-stack is supported on k3s v1.21 or above. + +To enable dual-stack in K3s, you must provide valid dual-stack `cluster-cidr` and `service-cidr` on all server nodes. Both servers and agents must provide valid dual-stack `node-ip` settings. Node address auto-detection is not supported on dual-stack clusters, because kubelet fetches only the first IP address that it finds. Additionally, only vxlan backend is supported currently. This is an example of a valid configuration: ``` -node-ip: 10.0.10.7,2a05:d012:c6f:4611:5c2:5602:eed2:898c -cluster-cidr: 10.42.0.0/16,2001:cafe:42:0::/56 -service-cidr: 10.43.0.0/16,2001:cafe:42:1::/112 -disable-network-policy: true +k3s server --node-ip 10.0.10.7,2a05:d012:c6f:4611:5c2:5602:eed2:898c --cluster-cidr 10.42.0.0/16,2001:cafe:42:0::/56 --service-cidr 10.43.0.0/16,2001:cafe:42:1::/112 ``` Note that you can choose whatever `cluster-cidr` and `service-cidr` value, however the `node-ip` values must correspond to the ip addresses of your main interface. Remember to allow ipv6 traffic if you are deploying in a public cloud. If you are using a custom cni plugin, i.e. a cni plugin different from flannel, the previous configuration might not be enough to enable dual-stack in the cni plugin. Please check how to enable dual-stack in its documentation and verify if network policies can be enabled. + +### IPv6 only installation + +IPv6 only setup is supported on k3s v1.22 or above. Note that network policy enforcement is not supported on IPv6-only clusters when using the default flannel CNI. This is an example of a valid configuration: + +``` +k3s server --disable-network-policy +``` diff --git a/content/k3s/latest/en/installation/private-registry/_index.md b/content/k3s/latest/en/installation/private-registry/_index.md index c87ee3df0cb..523ae6c8586 100644 --- a/content/k3s/latest/en/installation/private-registry/_index.md +++ b/content/k3s/latest/en/installation/private-registry/_index.md @@ -32,22 +32,43 @@ mirrors: Each mirror must have a name and set of endpoints. When pulling an image from a registry, containerd will try these endpoint URLs one by one, and use the first working one. +#### Rewrites + +Each mirror can have a set of rewrites. Rewrites can change the tag of an image based on a regular expression. This is useful if the organization/project structure in the mirror registry is different to the upstream one. + +For example, the following configuration would transparently pull the image `docker.io/rancher/coredns-coredns:1.6.3` from `registry.example.com:5000/mirrorproject/rancher-images/coredns-coredns:1.6.3`: + +``` +mirrors: + docker.io: + endpoint: + - "https://registry.example.com:5000" + rewrite: + "^rancher/(.*)": "mirrorproject/rancher-images/$1" +``` + +The image will still be stored under the original name so that a `crictl image ls` will show `docker.io/rancher/coredns-coredns:1.6.3` as available on the node, even though the image was pulled from the mirrored registry with a different name. + ### Configs -The configs section defines the TLS and credential configuration for each mirror. For each mirror you can define `auth` and/or `tls`. The TLS part consists of: +The `configs` section defines the TLS and credential configuration for each mirror. For each mirror you can define `auth` and/or `tls`. -Directive | Description -----------|------------ -`cert_file` | The client certificate path that will be used to authenticate with the registry -`key_file` | The client key path that will be used to authenticate with the registry -`ca_file` | Defines the CA certificate path to be used to verify the registry's server cert file -`insecure_skip_verify` | Boolean that defines if TLS verification should be skipped for the registry +The `tls` part consists of: -The credentials consist of either username/password or authentication token: +| Directive | Description | +|------------------------|--------------------------------------------------------------------------------------| +| `cert_file` | The client certificate path that will be used to authenticate with the registry | +| `key_file` | The client key path that will be used to authenticate with the registry | +| `ca_file` | Defines the CA certificate path to be used to verify the registry's server cert file | +| `insecure_skip_verify` | Boolean that defines if TLS verification should be skipped for the registry | -- username: user name of the private registry basic auth -- password: user password of the private registry basic auth -- auth: authentication token of the private registry basic auth +The `auth` part consists of either username/password or authentication token: + +| Directive | Description | +|------------|---------------------------------------------------------| +| `username` | user name of the private registry basic auth | +| `password` | user password of the private registry basic auth | +| `auth` | authentication token of the private registry basic auth | Below are basic examples of using private registries in different modes: @@ -142,4 +163,4 @@ Example: `docker tag coredns-coredns:1.6.3 mycustomreg:5000/coredns-coredns` Last, push the images to the private registry. -Example: `docker push mycustomreg:5000/coredns-coredns` +Example: `docker push mycustomreg.com:5000/coredns-coredns` diff --git a/content/k3s/latest/en/networking/_index.md b/content/k3s/latest/en/networking/_index.md index 49ed55deb46..2dff22e927d 100644 --- a/content/k3s/latest/en/networking/_index.md +++ b/content/k3s/latest/en/networking/_index.md @@ -42,7 +42,7 @@ To migrate from an older Traefik v1 instance please refer to the [Traefik docume # Service Load Balancer -Any service load balancer (LB) can be leveraged in your Kubernetes cluster. K3s provides a load balancer known as [Klipper Load Balancer](https://github.com/rancher/klipper-lb) that uses available host ports. +Any service load balancer (LB) can be leveraged in your Kubernetes cluster. K3s provides a load balancer known as [Klipper Load Balancer](https://github.com/k3s-io/klipper-lb) that uses available host ports. Upstream Kubernetes allows a Service of type LoadBalancer to be created, but doesn't include the implementation of the LB. Some LB services require a cloud provider such as Amazon EC2 or Microsoft Azure. By contrast, the K3s service LB makes it possible to use an LB service without a cloud provider. diff --git a/content/k3s/latest/en/security/_index.md b/content/k3s/latest/en/security/_index.md index f8b4285fc49..ba6ef7ccbd6 100644 --- a/content/k3s/latest/en/security/_index.md +++ b/content/k3s/latest/en/security/_index.md @@ -5,7 +5,7 @@ weight: 90 This section describes the methodology and means of securing a K3s cluster. It's broken into 2 sections. These guides assume k3s is running with embedded etcd. -The documents below apply to both CIS 1.5 & 1.6. +The documents below apply to CIS Kubernetes Benchmark v1.6. * [Hardening Guide](./hardening_guide/) * [CIS Benchmark Self-Assessment Guide](./self_assessment/) diff --git a/content/k3s/latest/en/security/hardening_guide/_index.md b/content/k3s/latest/en/security/hardening_guide/_index.md index 6a66acc02aa..e22571f30ef 100644 --- a/content/k3s/latest/en/security/hardening_guide/_index.md +++ b/content/k3s/latest/en/security/hardening_guide/_index.md @@ -3,12 +3,12 @@ title: "CIS Hardening Guide" weight: 80 --- -This document provides prescriptive guidance for hardening a production installation of K3s. It outlines the configurations and controls required to address Kubernetes benchmark controls from the Center for Information Security (CIS). +This document provides prescriptive guidance for hardening a production installation of K3s. It outlines the configurations and controls required to address Kubernetes benchmark controls from the Center for Internet Security (CIS). K3s has a number of security mitigations applied and turned on by default and will pass a number of the Kubernetes CIS controls without modification. There are some notable exceptions to this that require manual intervention to fully comply with the CIS Benchmark: 1. K3s will not modify the host operating system. Any host-level modifications will need to be done manually. -2. Certain CIS policy controls for PodSecurityPolicies and NetworkPolicies will restrict the functionality of this cluster. You must opt into having K3s configure these by adding the appropriate options (enabling of admission plugins) to your command-line flags or configuration file as well as manually applying appropriate policies. Further detail in the sections below. +2. Certain CIS policy controls for `PodSecurityPolicies` and `NetworkPolicies` will restrict the functionality of the cluster. You must opt into having K3s configure these by adding the appropriate options (enabling of admission plugins) to your command-line flags or configuration file as well as manually applying appropriate policies. Further details are presented in the sections below. The first section (1.1) of the CIS Benchmark concerns itself primarily with pod manifest permissions and ownership. K3s doesn't utilize these for the core components since everything is packaged into a single binary. @@ -31,23 +31,24 @@ vm.panic_on_oom=0 vm.overcommit_memory=1 kernel.panic=10 kernel.panic_on_oops=1 +kernel.keys.root_maxbytes=25000000 ``` ## Kubernetes Runtime Requirements -The runtime requirements to comply with the CIS Benchmark are centered around pod security (PSPs) and network policies. These are outlined in this section. K3s doesn't apply any default PSPs or network policies however K3s ships with a controller that is meant to apply a given set of network policies. By default, K3s runs with the "NodeRestriction" admission controller. To enable PSPs, add the following to the K3s start command: `--kube-apiserver-arg="enable-admission-plugins=NodeRestriction,PodSecurityPolicy,ServiceAccount"`. This will have the effect of maintaining the "NodeRestriction" plugin as well as enabling the "PodSecurityPolicy". +The runtime requirements to comply with the CIS Benchmark are centered around pod security (PSPs), network policies and API Server auditing logs. These are outlined in this section. K3s doesn't apply any default PSPs or network policies. However, K3s ships with a controller that is meant to apply a given set of network policies. By default, K3s runs with the `NodeRestriction` admission controller. To enable PSPs, add the following to the K3s start command: `--kube-apiserver-arg="enable-admission-plugins=NodeRestriction,PodSecurityPolicy,ServiceAccount"`. This will have the effect of maintaining the `NodeRestriction` plugin as well as enabling the `PodSecurityPolicy`. The same happens with the API Server auditing logs, K3s doesn't enable them by default, so audit log configuration and audit policy must be created manually. -### PodSecurityPolicies +### Pod Security Policies When PSPs are enabled, a policy can be applied to satisfy the necessary controls described in section 5.2 of the CIS Benchmark. -Here's an example of a compliant PSP. +Here is an example of a compliant PSP. ```yaml apiVersion: policy/v1beta1 kind: PodSecurityPolicy metadata: - name: cis1.5-compliant-psp + name: restricted-psp spec: privileged: false # CIS - 5.2.1 allowPrivilegeEscalation: false # CIS - 5.2.5 @@ -59,7 +60,9 @@ spec: - 'projected' - 'secret' - 'downwardAPI' + - 'csi' - 'persistentVolumeClaim' + - 'ephemeral' hostNetwork: false # CIS - 5.2.4 hostIPC: false # CIS - 5.2.3 hostPID: false # CIS - 5.2.2 @@ -80,7 +83,7 @@ spec: readOnlyRootFilesystem: false ``` -Before the above PSP to be effective, we need to create a couple ClusterRoles and ClusterRole. We also need to include a "system unrestricted policy" which is needed for system-level pods that require additional privileges. +For the above PSP to be effective, we need to create a ClusterRole and a ClusterRoleBinding. We also need to include a "system unrestricted policy" which is needed for system-level pods that require additional privileges. These can be combined with the PSP yaml above and NetworkPolicy yaml below into a single file and placed in the `/var/lib/rancher/k3s/server/manifests` directory. Below is an example of a `policy.yaml` file. @@ -88,7 +91,7 @@ These can be combined with the PSP yaml above and NetworkPolicy yaml below into apiVersion: policy/v1beta1 kind: PodSecurityPolicy metadata: - name: cis1.5-compliant-psp + name: restricted-psp spec: privileged: false allowPrivilegeEscalation: false @@ -100,7 +103,9 @@ spec: - 'projected' - 'secret' - 'downwardAPI' + - 'csi' - 'persistentVolumeClaim' + - 'ephemeral' hostNetwork: false hostIPC: false hostPID: false @@ -123,7 +128,7 @@ spec: apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: - name: psp:restricted + name: psp:restricted-psp labels: addonmanager.kubernetes.io/mode: EnsureExists rules: @@ -131,62 +136,23 @@ rules: resources: ['podsecuritypolicies'] verbs: ['use'] resourceNames: - - cis1.5-compliant-psp + - restricted-psp --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: - name: default:restricted + name: default:restricted-psp labels: addonmanager.kubernetes.io/mode: EnsureExists roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole - name: psp:restricted + name: psp:restricted-psp subjects: - kind: Group name: system:authenticated apiGroup: rbac.authorization.k8s.io --- -kind: NetworkPolicy -apiVersion: networking.k8s.io/v1 -metadata: - name: intra-namespace - namespace: kube-system -spec: - podSelector: {} - ingress: - - from: - - namespaceSelector: - matchLabels: - name: kube-system ---- -kind: NetworkPolicy -apiVersion: networking.k8s.io/v1 -metadata: - name: intra-namespace - namespace: default -spec: - podSelector: {} - ingress: - - from: - - namespaceSelector: - matchLabels: - name: default ---- -kind: NetworkPolicy -apiVersion: networking.k8s.io/v1 -metadata: - name: intra-namespace - namespace: kube-public -spec: - podSelector: {} - ingress: - - from: - - namespaceSelector: - matchLabels: - name: kube-public ---- apiVersion: policy/v1beta1 kind: PodSecurityPolicy metadata: @@ -253,6 +219,45 @@ subjects: - apiGroup: rbac.authorization.k8s.io kind: Group name: system:serviceaccounts +--- +kind: NetworkPolicy +apiVersion: networking.k8s.io/v1 +metadata: + name: intra-namespace + namespace: kube-system +spec: + podSelector: {} + ingress: + - from: + - namespaceSelector: + matchLabels: + name: kube-system +--- +kind: NetworkPolicy +apiVersion: networking.k8s.io/v1 +metadata: + name: intra-namespace + namespace: default +spec: + podSelector: {} + ingress: + - from: + - namespaceSelector: + matchLabels: + name: default +--- +kind: NetworkPolicy +apiVersion: networking.k8s.io/v1 +metadata: + name: intra-namespace + namespace: kube-public +spec: + podSelector: {} + ingress: + - from: + - namespaceSelector: + matchLabels: + name: kube-public ``` > **Note:** The Kubernetes critical additions such as CNI, DNS, and Ingress are ran as pods in the `kube-system` namespace. Therefore, this namespace will have a policy that is less restrictive so that these components can run properly. @@ -263,7 +268,7 @@ subjects: CIS requires that all namespaces have a network policy applied that reasonably limits traffic into namespaces and pods. -Here's an example of a compliant network policy. +Here is an example of a compliant network policy. ```yaml kind: NetworkPolicy @@ -302,11 +307,25 @@ spec: - Ingress ``` -If you are using the default traefik ingress controller with k3s, it will also be blocked by default, so the following network policies must be added to allow traffic to both traefik pods and svclb pods in the kube-system namespace. For version 1.20 and below there is a different label `traefik` used than in 1.21 and above, so remove the one that is not associated with your Kubernetes version. +The metrics-server and Traefik ingress controller will be blocked by default if network policies are not created to allow access. Traefik v1 as packaged in K3s version 1.20 and below uses different labels than Traefik v2. Ensure that you only use the sample yaml below that is associated with the version of Traefik present on your cluster. ```yaml apiVersion: networking.k8s.io/v1 kind: NetworkPolicy +metadata: + name: allow-all-metrics-server + namespace: kube-system +spec: + podSelector: + matchLabels: + k8s-app: metrics-server + ingress: + - {} + policyTypes: + - Ingress +--- +apiVersion: networking.k8s.io/v1 +kind: NetworkPolicy metadata: name: allow-all-svclbtraefik-ingress namespace: kube-system @@ -319,7 +338,7 @@ spec: policyTypes: - Ingress --- -# 1.20 +# Below is for 1.20 ONLY -- remove if on 1.21 or above apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: @@ -334,7 +353,7 @@ spec: policyTypes: - Ingress --- -# 1.21 +# Below is for 1.21 and above ONLY -- remove if on 1.20 or below apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: @@ -352,24 +371,67 @@ spec: > **Note:** Operators must manage network policies as normal for additional namespaces that are created. +### API Server audit configuration + +CIS requirements 1.2.22 to 1.2.25 are related to configuring audit logs for the API Server. K3s doesn't create by default the log directory and audit policy, as auditing requirements are specific to each user's policies and environment. + +The log directory, ideally, must be created before starting K3s. A restrictive access permission is recommended to avoid leaking potential sensitive information. + +```bash +sudo mkdir -p -m 700 /var/lib/rancher/k3s/server/logs +``` + +A starter audit policy to log request metadata is provided below. The policy should be written to a file named `audit.yaml` in `/var/lib/rancher/k3s/server` directory. Detailed information about policy configuration for the API server can be found in the Kubernetes [documentation](https://kubernetes.io/docs/tasks/debug-application-cluster/audit/). + +```yaml +apiVersion: audit.k8s.io/v1 +kind: Policy +rules: +- level: Metadata +``` + +Both configurations must be passed as arguments to the API Server as: + +```bash +--kube-apiserver-arg='audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log' +--kube-apiserver-arg='audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml' +``` + +If the configurations are created after K3s is installed, they must be added to K3s' systemd service in `/etc/systemd/system/k3s.service`. + +```bash +ExecStart=/usr/local/bin/k3s \ + server \ + '--kube-apiserver-arg=audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log' \ + '--kube-apiserver-arg=audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml' \ +``` + +K3s must be restarted to load the new configuration. + +```bash +sudo systemctl daemon-reload +sudo systemctl restart k3s.service +``` + +Additional information about CIS requirements 1.2.22 to 1.2.25 is presented below. + ## Known Issues The following are controls that K3s currently does not pass by default. Each gap will be explained, along with a note clarifying whether it can be passed through manual operator intervention, or if it will be addressed in a future release of K3s. - ### Control 1.2.15 Ensure that the admission control plugin `NamespaceLifecycle` is set.
Rationale -Setting admission control policy to NamespaceLifecycle ensures that objects cannot be created in non-existent namespaces, and that namespaces undergoing termination are not used for creating the new objects. This is recommended to enforce the integrity of the namespace termination process and also for the availability of the newer objects. +Setting admission control policy to `NamespaceLifecycle` ensures that objects cannot be created in non-existent namespaces, and that namespaces undergoing termination are not used for creating the new objects. This is recommended to enforce the integrity of the namespace termination process and also for the availability of the newer objects. This can be remediated by passing this argument as a value to the `enable-admission-plugins=` and pass that to `--kube-apiserver-arg=` argument to `k3s server`. An example can be found below.
-### Control 1.2.16 (mentioned above) +### Control 1.2.16 Ensure that the admission control plugin `PodSecurityPolicy` is set.
Rationale -A Pod Security Policy is a cluster-level resource that controls the actions that a pod can perform and what it has the ability to access. The PodSecurityPolicy objects define a set of conditions that a pod must run with in order to be accepted into the system. Pod Security Policies are comprised of settings and strategies that control the security features a pod has access to and hence this must be used to control pod access permissions. +A Pod Security Policy is a cluster-level resource that controls the actions that a pod can perform and what it has the ability to access. The `PodSecurityPolicy` objects define a set of conditions that a pod must run with in order to be accepted into the system. Pod Security Policies are comprised of settings and strategies that control the security features a pod has access to and hence this must be used to control pod access permissions. This can be remediated by passing this argument as a value to the `enable-admission-plugins=` and pass that to `--kube-apiserver-arg=` argument to `k3s server`. An example can be found below.
@@ -432,16 +494,18 @@ This can be remediated by passing this argument as a value to the `--kube-apiser Ensure that the `--encryption-provider-config` argument is set as appropriate.
Rationale -Where `etcd` encryption is used, it is important to ensure that the appropriate set of encryption providers is used. Currently, the aescbc, kms and secretbox are likely to be appropriate options. +`etcd` is a highly available key-value store used by Kubernetes deployments for persistent storage of all of its REST API objects. These objects are sensitive in nature and should be encrypted at rest to avoid any disclosures. + +Detailed steps on how to configure secrets encryption in K3s are available in [Secrets Encryption](../secrets_encryption/).
### Control 1.2.34 Ensure that encryption providers are appropriately configured.
Rationale -`etcd` is a highly available key-value store used by Kubernetes deployments for persistent storage of all of its REST API objects. These objects are sensitive in nature and should be encrypted at rest to avoid any disclosures. +Where `etcd` encryption is used, it is important to ensure that the appropriate set of encryption providers is used. Currently, the `aescbc`, `kms` and `secretbox` are likely to be appropriate options. -This can be remediated by passing a valid configuration to `k3s` as outlined above. +This can be remediated by passing a valid configuration to `k3s` as outlined above. Detailed steps on how to configure secrets encryption in K3s are available in [Secrets Encryption](../secrets_encryption/).
### Control 1.3.1 @@ -454,7 +518,7 @@ This can be remediated by passing this argument as a value to the `--kube-apiser ### Control 3.2.1 -Ensure that a minimal audit policy is created (Scored) +Ensure that a minimal audit policy is created.
Rationale Logging is an important detective control for all systems, to detect potential unauthorized access. @@ -462,7 +526,6 @@ Logging is an important detective control for all systems, to detect potential u This can be remediated by passing controls 1.2.22 - 1.2.25 and verifying their efficacy.
- ### Control 4.2.7 Ensure that the `--make-iptables-util-chains` argument is set to true.
@@ -473,24 +536,23 @@ This can be remediated by passing this argument as a value to the `--kube-apiser
### Control 5.1.5 -Ensure that default service accounts are not actively used. (Scored) +Ensure that default service accounts are not actively used
Rationale - -Kubernetes provides a default service account which is used by cluster workloads where no specific service account is assigned to the pod. +Kubernetes provides a `default` service account which is used by cluster workloads where no specific service account is assigned to the pod. Where access to the Kubernetes API from a pod is required, a specific service account should be created for that pod, and rights granted to that service account. The default service account should be configured such that it does not provide a service account token and does not have any explicit rights assignments. -
-The remediation for this is to update the `automountServiceAccountToken` field to `false` for the `default` service account in each namespace. +This can be remediated by updating the `automountServiceAccountToken` field to `false` for the `default` service account in each namespace. For `default` service accounts in the built-in namespaces (`kube-system`, `kube-public`, `kube-node-lease`, and `default`), K3s does not automatically do this. You can manually update this field on these service accounts to pass the control. + ## Control Plane Execution and Arguments -Listed below are the K3s control plane components and the arguments they're given at start, by default. Commented to their right is the CIS 1.5 control that they satisfy. +Listed below are the K3s control plane components and the arguments they are given at start, by default. Commented to their right is the CIS 1.6 control that they satisfy. ```bash kube-apiserver @@ -590,13 +652,14 @@ kubelet --tls-private-key-file=/var/lib/rancher/k3s/agent/serving-kubelet.key # 4.2.10 ``` -The command below is an example of how the outlined remediations can be applied. +The command below is an example of how the outlined remediations can be applied to harden K3s. ```bash k3s server \ --protect-kernel-defaults=true \ --secrets-encryption=true \ - --kube-apiserver-arg='audit-log-path=/var/lib/rancher/k3s/server/logs/audit-log' \ + --kube-apiserver-arg='audit-log-path=/var/lib/rancher/k3s/server/logs/audit.log' \ + --kube-apiserver-arg='audit-policy-file=/var/lib/rancher/k3s/server/audit.yaml' \ --kube-apiserver-arg='audit-log-maxage=30' \ --kube-apiserver-arg='audit-log-maxbackup=10' \ --kube-apiserver-arg='audit-log-maxsize=100' \ @@ -611,4 +674,4 @@ k3s server \ ## Conclusion -If you have followed this guide, your K3s cluster will be configured to comply with the CIS Kubernetes Benchmark. You can review the [CIS Benchmark Self-Assessment Guide](../self_assessment/) to understand the expectations of each of the benchmarks and how you can do the same on your cluster. +If you have followed this guide, your K3s cluster will be configured to comply with the CIS Kubernetes Benchmark. You can review the [CIS Benchmark Self-Assessment Guide](../self_assessment/) to understand the expectations of each of the benchmark's checks and how you can do the same on your cluster. diff --git a/content/k3s/latest/en/security/secrets_encryption/_index.md b/content/k3s/latest/en/security/secrets_encryption/_index.md new file mode 100644 index 00000000000..a7491e2fb63 --- /dev/null +++ b/content/k3s/latest/en/security/secrets_encryption/_index.md @@ -0,0 +1,241 @@ +--- +title: Secrets Encryption +weight: 26 +--- + +# Secrets Encryption Config +_Available as of v1.17.4+k3s1_ + +K3s supports enabling secrets encryption at rest by passing the flag `--secrets-encryption` on a server; this flag will do the following automatically: + +- Generate an AES-CBC key +- Generate an encryption config file with the generated key +- Pass the config to the KubeAPI as encryption-provider-config + +Example of the encryption config file: +``` +{ + "kind": "EncryptionConfiguration", + "apiVersion": "apiserver.config.k8s.io/v1", + "resources": [ + { + "resources": [ + "secrets" + ], + "providers": [ + { + "aescbc": { + "keys": [ + { + "name": "aescbckey", + "secret": "xxxxxxxxxxxxxxxxxxx" + } + ] + } + }, + { + "identity": {} + } + ] + } + ] +} +``` + + +## Secrets Encryption Tool +_Available as of v1.21.8+k3s1_ + +K3s contains a utility tool `secrets-encrypt`, which enables automatic control over the following: + +- Disabling/Enabling secrets encryption +- Adding new encryption keys +- Rotating and deleting encryption keys +- Reencrypting secrets + +>**Warning:** Failure to follow proper procedure for rotating encryption keys can leave your cluster permanently corrupted. Proceed with caution. + +### Single-Server Encryption Key Rotation +To rotate secrets encryption keys on a single-node cluster: + +- Start the K3s server with the flag `--secrets-encryption` + +>**Note:** Starting K3s without encryption and enabling it at a later time is currently *not* supported. + +1. Prepare + + ``` + k3s secrets-encrypt prepare + ``` + +2. Kill and restart the K3s server with same arguments +3. Rotate + + ``` + k3s secrets-encrypt rotate + ``` + +4. Kill and restart the K3s server with same arguments +5. Reencrypt + + ``` + k3s secrets-encrypt reencrypt + ``` + +### High-Availability Encryption Key Rotation +The steps are the same for both embedded DB and external DB clusters. + +To rotate secrets encryption keys on HA setups: + +>**Notes:** +> +> - Starting K3s without encryption and enabling it at a later time is currently *not* supported. +> +> - While not required, it is recommended that you pick one server node from which to run the `secrets-encrypt` commands. + +- Start up all three K3s servers with the `--secrets-encryption` flag. For brevity, the servers will be referred to as S1, S2, S3. + +1. Prepare on S1 + + ``` + k3s secrets-encrypt prepare + ``` + +2. Kill and restart S1 with same arguments +3. Once S1 is up, kill and restart the S2 and S3 + +4. Rotate on S1 + + ``` + k3s secrets-encrypt rotate + ``` + +5. Kill and restart S1 with same arguments +6. Once S1 is up, kill and restart the S2 and S3 + +7. Reencrypt on S1 + + ``` + k3s secrets-encrypt reencrypt + ``` + +8. Kill and restart S1 with same arguments +9. Once S1 is up, kill and restart the S2 and S3 + +### Single-Server Secrets Encryption Disable/Enable +After launching a server with `--secrets-encryption` flag, secrets encryption can be disabled. + +To disable secrets encryption on a single-node cluster: + +1. Disable + + ``` + k3s secrets-encrypt disable + ``` + +2. Kill and restart the K3s server with same arguments + +3. Reencrypt with flags + + ``` + k3s secrets-encrypt reencrypt --force --skip + ``` + +To re-enable secrets encryption on a single node cluster: + +1. Enable + + ``` + k3s secrets-encrypt enable + ``` + +2. Kill and restart the K3s server with same arguments + +3. Reencrypt with flags + + ``` + k3s secrets-encrypt reencrypt --force --skip + ``` + +### High-Availability Secrets Encryption Disable/Enable +After launching a HA cluster with `--secrets-encryption` flags, secrets encryption can be disabled. +>**Note:** While not required, it is recommended that you pick one server node from which to run the `secrets-encrypt` commands. + +For brevity, the three servers used in this guide will be referred to as S1, S2, S3. + +To disable secrets encryption on a HA cluster: + +1. Disable on S1 + + ``` + k3s secrets-encrypt disable + ``` + +2. Kill and restart S1 with same arguments +3. Once S1 is up, kill and restart the S2 and S3 + + +4. Reencrypt with flags on S1 + + ``` + k3s secrets-encrypt reencrypt --force --skip + ``` + +To re-enable secrets encryption on a HA cluster: + +1. Enable on S1 + + ``` + k3s secrets-encrypt enable + ``` + +2. Kill and restart S1 with same arguments +3. Once S1 is up, kill and restart the S2 and S3 + +4. Reencrypt with flags on S1 + + ``` + k3s secrets-encrypt reencrypt --force --skip + ``` + + +### Secrets Encryption Status +The secrets-encrypt tool includes a `status` command that displays information about the current status of secrets encryption on the node. + +An example of the command on a single-server node: +``` +$ k3s secrets-encrypt status +Encryption Status: Enabled +Current Rotation Stage: start +Server Encryption Hashes: All hashes match + +Active Key Type Name +------ -------- ---- + * AES-CBC aescbckey + +``` + +Another example on HA cluster, after rotating the keys, but before restarting the servers: +``` +$ k3s secrets-encrypt status +Encryption Status: Enabled +Current Rotation Stage: rotate +Server Encryption Hashes: hash does not match between node-1 and node-2 + +Active Key Type Name +------ -------- ---- + * AES-CBC aescbckey-2021-12-10T22:54:38Z + AES-CBC aescbckey + +``` + +Details on each section are as follows: + +- __Encryption Status__: Displayed whether secrets encryption is disabled or enabled on the node +- __Current Rotation Stage__: Indicates the current rotation stage on the node. + Stages are: `start`, `prepare`, `rotate`, `reencrypt_request`, `reencrypt_active`, `reencrypt_finished` +- __Server Encryption Hashes__: Useful for HA clusters, this indicates whether all servers are on the same stage with their local files. This can be used to identify whether a restart of servers is required before proceeding to the next stage. In the HA example above, node-1 and node-2 have different hashes, indicating that they currently do not have the same encryption configuration. Restarting the servers will sync up their configuration. +- __Key Table__: Summarizes information about the secrets encryption keys found on the node. + * __Active__: The "*" indicates which, if any, of the keys are currently used for secrets encryption. An active key is used by Kubernetes to encrypt any new secrets. + * __Key Type__: All keys using this tool are `AES-CBC` type. See more info [here.](https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/#providers) + * __Name__: Name of the encryption key. \ No newline at end of file diff --git a/content/k3s/latest/en/security/self_assessment/_index.md b/content/k3s/latest/en/security/self_assessment/_index.md index ff7ba082384..6471a95fb83 100644 --- a/content/k3s/latest/en/security/self_assessment/_index.md +++ b/content/k3s/latest/en/security/self_assessment/_index.md @@ -1,18 +1,17 @@ --- -title: "CIS Self Assessment Guide" +title: CIS Self Assessment Guide weight: 90 --- - -### CIS Kubernetes Benchmark v1.5 - K3s v1.17, v1.18, & v1.19 +### CIS Kubernetes Benchmark v1.6 - K3s with Kubernetes v1.17 to v1.21 #### Overview -This document is a companion to the K3s security hardening guide. The hardening guide provides prescriptive guidance for hardening a production installation of K3s, and this benchmark guide is meant to help you evaluate the level of security of the hardened cluster against each control in the CIS Kubernetes benchmark. It is to be used by K3s operators, security teams, auditors, and decision-makers. +This document is a companion to the K3s security hardening guide. The hardening guide provides prescriptive guidance for hardening a production installation of K3s, and this benchmark guide is meant to help you evaluate the level of security of the hardened cluster against each control in the CIS Kubernetes Benchmark. It is to be used by K3s operators, security teams, auditors, and decision-makers. -This guide is specific to the **v1.17**, **v1.18**, and **v1.19** release line of K3s and the **v1.5.1** release of the CIS Kubernetes Benchmark. +This guide is specific to the **v1.17**, **v1.18**, **v1.19**, **v1.20** and **v1.21** release line of K3s and the **v1.6** release of the CIS Kubernetes Benchmark. -For more detail about each control, including more detailed descriptions and remediations for failing tests, you can refer to the corresponding section of the CIS Kubernetes Benchmark v1.5. You can download the benchmark after logging in to [CISecurity.org](https://www.cisecurity.org/benchmark/kubernetes/). +For more information about each control, including detailed descriptions and remediations for failing tests, you can refer to the corresponding section of the CIS Kubernetes Benchmark v1.6. You can download the benchmark, after creating a free account, in [Center for Internet Security (CIS)](https://www.cisecurity.org/benchmark/kubernetes/). #### Testing controls methodology @@ -24,2474 +23,3056 @@ These are the possible results for each control: - **Pass** - The K3s cluster under test passed the audit outlined in the benchmark. - **Not Applicable** - The control is not applicable to K3s because of how it is designed to operate. The remediation section will explain why this is so. -- **Not Scored - Operator Dependent** - The control is not scored in the CIS benchmark and it depends on the cluster's use case or some other factor that must be determined by the cluster operator. These controls have been evaluated to ensure K3s does not prevent their implementation, but no further configuration or auditing of the cluster under test has been performed. +- **Warn** - The control is manual in the CIS benchmark and it depends on the cluster's use case or some other factor that must be determined by the cluster operator. These controls have been evaluated to ensure K3s does not prevent their implementation, but no further configuration or auditing of the cluster under test has been performed. This guide makes the assumption that K3s is running as a Systemd unit. Your installation may vary and will require you to adjust the "audit" commands to fit your scenario. +> NOTE: Only `automated` tests (previously called `scored`) are covered in this guide. + ### Controls --- -## 1 Master Node Security Configuration -### 1.1 Master Node Configuration Files -#### 1.1.1 -Ensure that the API server pod specification file permissions are set to `644` or more restrictive (Scored) -
-Rationale -The API server pod specification file controls various parameters that set the behavior of the API server. You should restrict its file permissions to maintain the integrity of the file. The file should be writable by only the administrators on the system. -
+## 1.1 Master Node Configuration Files +### 1.1.1 Ensure that the API server pod specification file permissions are set to 644 or more restrictive (Automated) + **Result:** Not Applicable +**Remediation:** +Run the below command (based on the file location on your system) on the +master node. +For example, chmod 644 /etc/kubernetes/manifests/kube-apiserver.yaml + +### 1.1.2 Ensure that the API server pod specification file ownership is set to root:root (Automated) -#### 1.1.2 -Ensure that the API server pod specification file ownership is set to `root:root` (Scored) -
-Rationale -The API server pod specification file controls various parameters that set the behavior of the API server. You should set its file ownership to maintain the integrity of the file. The file should be owned by `root:root`. -
**Result:** Not Applicable +**Remediation:** +Run the below command (based on the file location on your system) on the master node. +For example, +chown root:root /etc/kubernetes/manifests/kube-apiserver.yaml + +### 1.1.3 Ensure that the controller manager pod specification file permissions are set to 644 or more restrictive (Automated) -#### 1.1.3 -Ensure that the controller manager pod specification file permissions are set to `644` or more restrictive (Scored) -
-Rationale -The controller manager pod specification file controls various parameters that set the behavior of the Controller Manager on the master node. You should restrict its file permissions to maintain the integrity of the file. The file should be writable by only the administrators on the system. -
**Result:** Not Applicable +**Remediation:** +Run the below command (based on the file location on your system) on the master node. +For example, +chmod 644 /etc/kubernetes/manifests/kube-controller-manager.yaml + +### 1.1.4 Ensure that the controller manager pod specification file ownership is set to root:root (Automated) -#### 1.1.4 -Ensure that the controller manager pod specification file ownership is set to `root:root` (Scored) -
-Rationale -The controller manager pod specification file controls various parameters that set the behavior of various components of the master node. You should set its file ownership to maintain the integrity of the file. The file should be owned by root:root. -
**Result:** Not Applicable +**Remediation:** +Run the below command (based on the file location on your system) on the master node. +For example, +chown root:root /etc/kubernetes/manifests/kube-controller-manager.yaml + +### 1.1.5 Ensure that the scheduler pod specification file permissions are set to 644 or more restrictive (Automated) -#### 1.1.5 -Ensure that the scheduler pod specification file permissions are set to `644` or more restrictive (Scored) -
-Rationale -The scheduler pod specification file controls various parameters that set the behavior of the Scheduler service in the master node. You should restrict its file permissions to maintain the integrity of the file. The file should be writable by only the administrators on the system. -
**Result:** Not Applicable +**Remediation:** +Run the below command (based on the file location on your system) on the master node. +For example, +chmod 644 /etc/kubernetes/manifests/kube-scheduler.yaml + +### 1.1.6 Ensure that the scheduler pod specification file ownership is set to root:root (Automated) -#### 1.1.6 -Ensure that the scheduler pod specification file ownership is set to `root:root` (Scored) -
-Rationale -The scheduler pod specification file controls various parameters that set the behavior of the kube-scheduler service in the master node. You should set its file ownership to maintain the integrity of the file. The file should be owned by root:root. -
**Result:** Not Applicable +**Remediation:** +Run the below command (based on the file location on your system) on the master node. +For example, +chown root:root /etc/kubernetes/manifests/kube-scheduler.yaml + +### 1.1.7 Ensure that the etcd pod specification file permissions are set to 644 or more restrictive (Automated) -#### 1.1.7 -Ensure that the etcd pod specification file permissions are set to `644` or more restrictive (Scored) -
-Rationale -The etcd pod specification file /var/lib/rancher/k3s/agent/pod-manifests/etcd.yaml controls various parameters that set the behavior of the etcd service in the master node. etcd is a highly- available key-value store which Kubernetes uses for persistent storage of all of its REST API object. You should restrict its file permissions to maintain the integrity of the file. The file should be writable by only the administrators on the system. -
**Result:** Not Applicable +**Remediation:** +Run the below command (based on the file location on your system) on the master node. +For example, +chmod 644 /etc/kubernetes/manifests/etcd.yaml + +### 1.1.8 Ensure that the etcd pod specification file ownership is set to root:root (Automated) -#### 1.1.8 -Ensure that the etcd pod specification file ownership is set to `root:root` (Scored) -
-Rationale -The etcd pod specification file /var/lib/rancher/k3s/agent/pod-manifests/etcd.yaml controls various parameters that set the behavior of the etcd service in the master node. etcd is a highly- available key-value store which Kubernetes uses for persistent storage of all of its REST API object. You should set its file ownership to maintain the integrity of the file. The file should be owned by root:root. -
**Result:** Not Applicable +**Remediation:** +Run the below command (based on the file location on your system) on the master node. +For example, +chown root:root /etc/kubernetes/manifests/etcd.yaml + +### 1.1.9 Ensure that the Container Network Interface file permissions are set to 644 or more restrictive (Manual) -#### 1.1.9 -Ensure that the Container Network Interface file permissions are set to 644 or more restrictive (Not Scored) -
-Rationale -Container Network Interface provides various networking options for overlay networking. You should consult their documentation and restrict their respective file permissions to maintain the integrity of those files. Those files should be writable by only the administrators on the system. -
**Result:** Not Applicable +**Remediation:** +Run the below command (based on the file location on your system) on the master node. +For example, +chmod 644 + +### 1.1.10 Ensure that the Container Network Interface file ownership is set to root:root (Manual) -#### 1.1.10 -Ensure that the Container Network Interface file ownership is set to root:root (Not Scored) -
-Rationale -Container Network Interface provides various networking options for overlay networking. You should consult their documentation and restrict their respective file permissions to maintain the integrity of those files. Those files should be owned by root:root. -
**Result:** Not Applicable +**Remediation:** +Run the below command (based on the file location on your system) on the master node. +For example, +chown root:root -#### 1.1.11 -Ensure that the etcd data directory permissions are set to 700 or more restrictive (Scored) -
-Rationale -etcd is a highly-available key-value store used by Kubernetes deployments for persistent storage of all of its REST API objects. This data directory should be protected from any unauthorized reads or writes. It should not be readable or writable by any group members or the world. -
+### 1.1.11 Ensure that the etcd data directory permissions are set to 700 or more restrictive (Automated) -**Result:** Pass -**Audit:** +**Result:** pass + +**Remediation:** +On the etcd server node, get the etcd data directory, passed as an argument --data-dir, +from the below command: +ps -ef | grep etcd +Run the below command (based on the etcd data directory found above). For example, +chmod 700 /var/lib/etcd + +**Audit Script:** `check_for_k3s_etcd.sh` + ```bash -stat -c %a /var/lib/rancher/k3s/server/db/etcd +#!/bin/bash + +# This script is used to ensure that k3s is actually running etcd (and not other databases like sqlite3) +# before it checks the requirement +set -eE + +handle_error() { + echo "false" +} + +trap 'handle_error' ERR + + +if [[ "$(journalctl -D /var/log/journal -u k3s | grep 'Managed etcd' | grep -v grep | wc -l)" -gt 0 ]]; then + case $1 in + "1.1.11") + echo $(stat -c %a /var/lib/rancher/k3s/server/db/etcd);; + "1.2.29") + echo $(journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'etcd-');; + "2.1") + echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');; + "2.2") + echo "$(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth')";; + "2.3") + echo $(grep 'auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);; + "2.4") + echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');; + "2.5") + echo "$(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth')";; + "2.6") + echo $(grep 'peer-auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);; + "2.7") + echo $(grep 'trusted-ca-file' /var/lib/rancher/k3s/server/db/etcd/config);; + esac +else +# If another database is running, return whatever is required to pass the scan + case $1 in + "1.1.11") + echo "700";; + "1.2.29") + echo "--etcd-certfile AND --etcd-keyfile";; + "2.1") + echo "cert-file AND key-file";; + "2.2") + echo "true";; + "2.3") + echo "false";; + "2.4") + echo "peer-cert-file AND peer-key-file";; + "2.5") + echo "true";; + "2.6") + echo "--peer-auto-tls=false";; + "2.7") + echo "--trusted-ca-file";; + esac +fi + +``` + +**Audit Execution:** + +```bash +./check_for_k3s_etcd.sh 1.1.11 +``` + +**Expected Result**: + +```console +'700' is equal to '700' +``` + +**Returned Value**: + +```console 700 ``` -**Remediation:** -K3s manages the etcd data directory and sets its permissions to 700. No manual remediation needed. (only relevant when Etcd is used for the data store) +### 1.1.12 Ensure that the etcd data directory ownership is set to etcd:etcd (Automated) -#### 1.1.12 -Ensure that the etcd data directory ownership is set to `etcd:etcd` (Scored) -
-Rationale -etcd is a highly-available key-value store used by Kubernetes deployments for persistent storage of all of its REST API objects. This data directory should be protected from any unauthorized reads or writes. It should be owned by etcd:etcd. -
- **Result:** Not Applicable +**Remediation:** +On the etcd server node, get the etcd data directory, passed as an argument --data-dir, +from the below command: +ps -ef | grep etcd +Run the below command (based on the etcd data directory found above). +For example, chown etcd:etcd /var/lib/etcd -#### 1.1.13 -Ensure that the `admin.conf` file permissions are set to `644` or more restrictive (Scored) -
-Rationale -The admin.conf is the administrator kubeconfig file defining various settings for the administration of the cluster. You should restrict its file permissions to maintain the integrity of the file. The file should be writable by only the administrators on the system. +### 1.1.13 Ensure that the admin.conf file permissions are set to 644 or more restrictive (Automated) -In K3s, this file is located at `/var/lib/rancher/k3s/server/cred/admin.kubeconfig`. -
-**Result:** Pass +**Result:** Not Applicable **Remediation:** -By default, K3s creates the directory and files with the expected permissions of `644`. No manual remediation should be necessary. +Run the below command (based on the file location on your system) on the master node. +For example, +chmod 644 /var/lib/rancher/k3s/server/cred/admin.kubeconfig + +### 1.1.14 Ensure that the admin.conf file ownership is set to root:root (Automated) -#### 1.1.14 -Ensure that the `admin.conf` file ownership is set to `root:root` (Scored) -
-Rationale -The admin.conf file contains the admin credentials for the cluster. You should set its file ownership to maintain the integrity of the file. The file should be owned by root:root. - -In K3s, this file is located at `/var/lib/rancher/k3s/server/cred/admin.kubeconfig`. -
- -**Result:** Pass +**Result:** pass **Remediation:** -By default, K3s creates the directory and files with the expected ownership of `root:root`. No manual remediation should be necessary. - - -#### 1.1.15 -Ensure that the `scheduler.conf` file permissions are set to `644` or more restrictive (Scored) -
-Rationale - -The scheduler.conf file is the kubeconfig file for the Scheduler. You should restrict its file permissions to maintain the integrity of the file. The file should be writable by only the administrators on the system. - -In K3s, this file is located at `/var/lib/rancher/k3s/server/cred/scheduler.kubeconfig`. -
- -**Result:** Pass - -**Remediation:** -By default, K3s creates the directory and files with the expected permissions of `644`. No manual remediation should be necessary. - - -#### 1.1.16 -Ensure that the `scheduler.conf` file ownership is set to `root:root` (Scored) -
-Rationale -The scheduler.conf file is the kubeconfig file for the Scheduler. You should set its file ownership to maintain the integrity of the file. The file should be owned by root:root. - -In K3s, this file is located at `/var/lib/rancher/k3s/server/cred/scheduler.kubeconfig`. -
- -**Result:** Pass - -**Remediation:** -By default, K3s creates the directory and files with the expected ownership of `root:root`. No manual remediation should be necessary. - - -#### 1.1.17 -Ensure that the `controller.kubeconfig` file permissions are set to `644` or more restrictive (Scored) -
-Rationale -The controller.kubeconfig file is the kubeconfig file for the Scheduler. You should restrict its file permissions to maintain the integrity of the file. The file should be writable by only the administrators on the system. - -In K3s, this file is located at `/var/lib/rancher/k3s/server/cred/controller.kubeconfig`. -
- -**Result:** Pass - -**Remediation:** -By default, K3s creates the directory and files with the expected permissions of `644`. No manual remediation should be necessary. - - -#### 1.1.18 -Ensure that the `controller.kubeconfig` file ownership is set to `root:root` (Scored) -
-Rationale -The controller.kubeconfig file is the kubeconfig file for the Scheduler. You should set its file ownership to maintain the integrity of the file. The file should be owned by root:root. - -In K3s, this file is located at `/var/lib/rancher/k3s/server/cred/controller.kubeconfig`. -
- -**Result:** Pass - -**Remediation:** -By default, K3s creates the directory and files with the expected ownership of `root:root`. No manual remediation should be necessary. - - -#### 1.1.19 -Ensure that the Kubernetes PKI directory and file ownership is set to `root:root` (Scored) -
-Rationale -Kubernetes makes use of a number of certificates as part of its operation. You should set the ownership of the directory containing the PKI information and all files in that directory to maintain their integrity. The directory and files should be owned by root:root. -
- -**Result:** Pass +Run the below command (based on the file location on your system) on the master node. +For example, +chown root:root /etc/kubernetes/admin.conf **Audit:** + ```bash -stat -c %U:%G /var/lib/rancher/k3s/server/tls +/bin/sh -c 'if test -e /var/lib/rancher/k3s/server/cred/admin.kubeconfig; then stat -c %U:%G /var/lib/rancher/k3s/server/cred/admin.kubeconfig; fi' +``` + +**Expected Result**: + +```console +'root:root' is equal to 'root:root' +``` + +**Returned Value**: + +```console root:root ``` +### 1.1.15 Ensure that the scheduler.conf file permissions are set to 644 or more restrictive (Automated) + + +**Result:** pass + **Remediation:** -By default, K3s creates the directory and files with the expected ownership of `root:root`. No manual remediation should be necessary. - - -#### 1.1.20 -Ensure that the Kubernetes PKI certificate file permissions are set to `644` or more restrictive (Scored) -
-Rationale -Kubernetes makes use of a number of certificate files as part of the operation of its components. The permissions on these files should be set to 644 or more restrictive to protect their integrity. -
- -**Result:** Pass +Run the below command (based on the file location on your system) on the master node. +For example, +chmod 644 scheduler **Audit:** -Run the below command on the master node. ```bash -stat -c %n\ %a /var/lib/rancher/k3s/server/tls/*.crt +/bin/sh -c 'if test -e scheduler; then stat -c permissions=%a scheduler; fi' ``` -Verify that the permissions are `644` or more restrictive. +**Expected Result**: + +```console +'permissions' is not present +``` + +### 1.1.16 Ensure that the scheduler.conf file ownership is set to root:root (Automated) + + +**Result:** pass **Remediation:** -By default, K3s creates the files with the expected permissions of `644`. No manual remediation is needed. - - -#### 1.1.21 -Ensure that the Kubernetes PKI key file permissions are set to `600` (Scored) -
-Rationale -Kubernetes makes use of a number of key files as part of the operation of its components. The permissions on these files should be set to 600 to protect their integrity and confidentiality. -
- -**Result:** Pass +Run the below command (based on the file location on your system) on the master node. +For example, +chown root:root scheduler **Audit:** -Run the below command on the master node. ```bash -stat -c %n\ %a /var/lib/rancher/k3s/server/tls/*.key +/bin/sh -c 'if test -e scheduler; then stat -c %U:%G scheduler; fi' ``` -Verify that the permissions are `600` or more restrictive. +**Expected Result**: + +```console +'root:root' is not present +``` + +### 1.1.17 Ensure that the controller-manager.conf file permissions are set to 644 or more restrictive (Automated) + + +**Result:** pass **Remediation:** -By default, K3s creates the files with the expected permissions of `600`. No manual remediation is needed. - - -### 1.2 API Server -This section contains recommendations relating to API server configuration flags - - -#### 1.2.1 -Ensure that the `--anonymous-auth` argument is set to false (Not Scored) - -
-Rationale -When enabled, requests that are not rejected by other configured authentication methods are treated as anonymous requests. These requests are then served by the API server. You should rely on authentication to authorize access and disallow anonymous requests. - -If you are using RBAC authorization, it is generally considered reasonable to allow anonymous access to the API Server for health checks and discovery purposes, and hence this recommendation is not scored. However, you should consider whether anonymous discovery is an acceptable risk for your purposes. -
- -**Result:** Pass +Run the below command (based on the file location on your system) on the master node. +For example, +chmod 644 controllermanager **Audit:** -Run the below command on the master node. ```bash -journalctl -u k3s | grep "Running kube-apiserver" | tail -n1 | grep "anonymous-auth" +/bin/sh -c 'if test -e controllermanager; then stat -c permissions=%a controllermanager; fi' ``` -Verify that `--anonymous-auth=false` is present. +**Expected Result**: + +```console +'permissions' is not present +``` + +### 1.1.18 Ensure that the controller-manager.conf file ownership is set to root:root (Automated) + + +**Result:** pass **Remediation:** -By default, K3s kube-apiserver is configured to run with this flag and value. No manual remediation is needed. - -#### 1.2.2 -Ensure that the `--basic-auth-file` argument is not set (Scored) -
-Rationale -Basic authentication uses plaintext credentials for authentication. Currently, the basic authentication credentials last indefinitely, and the password cannot be changed without restarting the API server. The basic authentication is currently supported for convenience. Hence, basic authentication should not be used. -
- -**Result:** Pass +Run the below command (based on the file location on your system) on the master node. +For example, +chown root:root controllermanager **Audit:** -Run the below command on the master node. ```bash -journalctl -u k3s | grep "Running kube-apiserver" | tail -n1 | grep "basic-auth-file" +stat -c %U:%G /var/lib/rancher/k3s/server/tls ``` -Verify that the `--basic-auth-file` argument does not exist. +**Expected Result**: + +```console +'root:root' is equal to 'root:root' +``` + +**Returned Value**: + +```console +root:root +``` + +### 1.1.19 Ensure that the Kubernetes PKI directory and file ownership is set to root:root (Automated) + + +**Result:** pass **Remediation:** -By default, K3s does not run with basic authentication enabled. No manual remediation is needed. - - -#### 1.2.3 -Ensure that the `--token-auth-file` parameter is not set (Scored) - -
-Rationale -The token-based authentication utilizes static tokens to authenticate requests to the apiserver. The tokens are stored in clear-text in a file on the apiserver, and cannot be revoked or rotated without restarting the apiserver. Hence, do not use static token-based authentication. -
- -**Result:** Pass +Run the below command (based on the file location on your system) on the master node. +For example, +chown -R root:root /etc/kubernetes/pki/ **Audit:** -Run the below command on the master node. ```bash -journalctl -u k3s | grep "Running kube-apiserver" | tail -n1 | grep "token-auth-file" +find /etc/kubernetes/pki/ | xargs stat -c %U:%G ``` -Verify that the `--token-auth-file` argument does not exist. +**Expected Result**: + +```console +'root:root' is not present +``` + +### 1.1.20 Ensure that the Kubernetes PKI certificate file permissions are set to 644 or more restrictive (Manual) + + +**Result:** pass **Remediation:** -By default, K3s does not run with basic authentication enabled. No manual remediation is needed. +Run the below command (based on the file location on your system) on the master node. +For example, +chmod -R 644 /etc/kubernetes/pki/*.crt -#### 1.2.4 -Ensure that the `--kubelet-https` argument is set to true (Scored) +**Audit:** + +```bash +stat -c %n %a /var/lib/rancher/k3s/server/tls/*.crt +``` + +**Expected Result**: + +```console +'permissions' is not present +``` + +### 1.1.21 Ensure that the Kubernetes PKI key file permissions are set to 600 (Manual) + + +**Result:** pass + +**Remediation:** +Run the below command (based on the file location on your system) on the master node. +For example, +chmod -R 600 /etc/kubernetes/pki/*.key + +**Audit:** + +```bash +stat -c %n %a /var/lib/rancher/k3s/server/tls/*.key +``` + +**Expected Result**: + +```console +'permissions' is not present +``` + +## 1.2 API Server +### 1.2.1 Ensure that the --anonymous-auth argument is set to false (Manual) + + +**Result:** warn + +**Remediation:** +Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the below parameter. +--anonymous-auth=false + +**Audit:** + +```bash +journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'anonymous-auth' +``` + +### 1.2.2 Ensure that the --basic-auth-file argument is not set (Automated) + + +**Result:** pass + +**Remediation:** +Follow the documentation and configure alternate mechanisms for authentication. Then, +edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and remove the --basic-auth-file= parameter. + +**Audit:** + +```bash +journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'basic-auth-file' +``` + +**Expected Result**: + +```console +'--basic-auth-file' is not present +``` + +### 1.2.3 Ensure that the --token-auth-file parameter is not set (Automated) + + +**Result:** pass + +**Remediation:** +Follow the documentation and configure alternate mechanisms for authentication. Then, +edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and remove the --token-auth-file= parameter. + +**Audit:** + +```bash +journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'token-auth-file' +``` + +**Expected Result**: + +```console +'--token-auth-file' is not present +``` + +### 1.2.4 Ensure that the --kubelet-https argument is set to true (Automated) -
-Rationale -Connections from apiserver to kubelets could potentially carry sensitive data such as secrets and keys. It is thus important to use in-transit encryption for any communication between the apiserver and kubelets. -
**Result:** Not Applicable +**Remediation:** +Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and remove the --kubelet-https parameter. + +### 1.2.5 Ensure that the --kubelet-client-certificate and --kubelet-client-key arguments are set as appropriate (Automated) + + +**Result:** pass + +**Remediation:** +Follow the Kubernetes documentation and set up the TLS connection between the +apiserver and kubelets. Then, edit API server pod specification file +/etc/kubernetes/manifests/kube-apiserver.yaml on the master node and set the +kubelet client certificate and key parameters as below. +--kubelet-client-certificate= +--kubelet-client-key= + **Audit:** -Run the below command on the master node. ```bash -journalctl -u k3s | grep "Running kube-apiserver" | tail -n1 | grep "kubelet-https" +journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'kubelet-certificate-authority' ``` -Verify that the `--kubelet-https` argument does not exist. +**Expected Result**: + +```console +'--kubelet-client-certificate' is not present AND '--kubelet-client-key' is not present +``` + +### 1.2.6 Ensure that the --kubelet-certificate-authority argument is set as appropriate (Automated) + + +**Result:** pass **Remediation:** -By default, K3s kube-apiserver doesn't run with the `--kubelet-https` parameter as it runs with TLS. No manual remediation is needed. - -#### 1.2.5 -Ensure that the `--kubelet-client-certificate` and `--kubelet-client-key` arguments are set as appropriate (Scored) - -
-Rationale -The apiserver, by default, does not authenticate itself to the kubelet's HTTPS endpoints. The requests from the apiserver are treated anonymously. You should set up certificate-based kubelet authentication to ensure that the apiserver authenticates itself to kubelets when submitting requests. -
- -**Result:** Pass +Follow the Kubernetes documentation and setup the TLS connection between +the apiserver and kubelets. Then, edit the API server pod specification file +/etc/kubernetes/manifests/kube-apiserver.yaml on the master node and set the +--kubelet-certificate-authority parameter to the path to the cert file for the certificate authority. +--kubelet-certificate-authority= **Audit:** -Run the below command on the master node. ```bash -journalctl -u k3s | grep "Running kube-apiserver" | tail -n1 | grep -E 'kubelet-client-certificate|kubelet-client-key' +journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'kubelet-certificate-authority' ``` -Verify that the `--kubelet-client-certificate` and `--kubelet-client-key` arguments exist and they are set as appropriate. +**Expected Result**: + +```console +'--kubelet-certificate-authority' is not present +``` + +### 1.2.7 Ensure that the --authorization-mode argument is not set to AlwaysAllow (Automated) + + +**Result:** pass **Remediation:** -By default, K3s kube-apiserver is ran with these arguments for secure communication with kubelet. No manual remediation is needed. - - -#### 1.2.6 -Ensure that the `--kubelet-certificate-authority` argument is set as appropriate (Scored) -
-Rationale -The connections from the apiserver to the kubelet are used for fetching logs for pods, attaching (through kubectl) to running pods, and using the kubelet’s port-forwarding functionality. These connections terminate at the kubelet’s HTTPS endpoint. By default, the apiserver does not verify the kubelet’s serving certificate, which makes the connection subject to man-in-the-middle attacks, and unsafe to run over untrusted and/or public networks. -
- -**Result:** Pass +Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the --authorization-mode parameter to values other than AlwaysAllow. +One such example could be as below. +--authorization-mode=RBAC **Audit:** -Run the below command on the master node. ```bash -journalctl -u k3s | grep "Running kube-apiserver" | tail -n1 | grep "kubelet-certificate-authority" +journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'authorization-mode' ``` -Verify that the `--kubelet-certificate-authority` argument exists and is set as appropriate. +**Expected Result**: + +```console +'--authorization-mode' is not present +``` + +### 1.2.8 Ensure that the --authorization-mode argument includes Node (Automated) + + +**Result:** pass **Remediation:** -By default, K3s kube-apiserver is ran with this argument for secure communication with kubelet. No manual remediation is needed. - - -#### 1.2.7 -Ensure that the `--authorization-mode` argument is not set to `AlwaysAllow` (Scored) -
-Rationale -The API Server, can be configured to allow all requests. This mode should not be used on any production cluster. -
- -**Result:** Pass +Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the --authorization-mode parameter to a value that includes Node. +--authorization-mode=Node,RBAC **Audit:** -Run the below command on the master node. ```bash -journalctl -u k3s | grep "Running kube-apiserver" | tail -n1 | grep "authorization-mode" +journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'authorization-mode' ``` -Verify that the argument value doesn't contain `AlwaysAllow`. +**Expected Result**: + +```console +'--authorization-mode' is not present +``` + +### 1.2.9 Ensure that the --authorization-mode argument includes RBAC (Automated) + + +**Result:** pass **Remediation:** -By default, K3s sets `Node,RBAC` as the parameter to the `--authorization-mode` argument. No manual remediation is needed. - - -#### 1.2.8 -Ensure that the `--authorization-mode` argument includes `Node` (Scored) -
-Rationale -The Node authorization mode only allows kubelets to read Secret, ConfigMap, PersistentVolume, and PersistentVolumeClaim objects associated with their nodes. -
- -**Result:** Pass +Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the --authorization-mode parameter to a value that includes RBAC, +for example: +--authorization-mode=Node,RBAC **Audit:** -Run the below command on the master node. ```bash -journalctl -u k3s | grep "Running kube-apiserver" | tail -n1 | grep "authorization-mode" +journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'authorization-mode' ``` -Verify `Node` exists as a parameter to the argument. +**Expected Result**: + +```console +'--authorization-mode' is not present +``` + +### 1.2.10 Ensure that the admission control plugin EventRateLimit is set (Manual) + + +**Result:** pass **Remediation:** -By default, K3s sets `Node,RBAC` as the parameter to the `--authorization-mode` argument. No manual remediation is needed. - - -#### 1.2.9 -Ensure that the `--authorization-mode` argument includes `RBAC` (Scored) -
-Rationale -Role Based Access Control (RBAC) allows fine-grained control over the operations that different entities can perform on different objects in the cluster. It is recommended to use the RBAC authorization mode. -
- -**Result:** Pass +Follow the Kubernetes documentation and set the desired limits in a configuration file. +Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +and set the below parameters. +--enable-admission-plugins=...,EventRateLimit,... +--admission-control-config-file= **Audit:** -Run the below command on the master node. ```bash -journalctl -u k3s | grep "Running kube-apiserver" | tail -n1 | grep "authorization-mode" +journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'enable-admission-plugins' ``` -Verify `RBAC` exists as a parameter to the argument. +**Expected Result**: + +```console +'--enable-admission-plugins' is not present +``` + +### 1.2.11 Ensure that the admission control plugin AlwaysAdmit is not set (Automated) + + +**Result:** pass **Remediation:** -By default, K3s sets `Node,RBAC` as the parameter to the `--authorization-mode` argument. No manual remediation is needed. - - -#### 1.2.10 -Ensure that the admission control plugin EventRateLimit is set (Not Scored) -
-Rationale -Using `EventRateLimit` admission control enforces a limit on the number of events that the API Server will accept in a given time slice. A misbehaving workload could overwhelm and DoS the API Server, making it unavailable. This particularly applies to a multi-tenant cluster, where there might be a small percentage of misbehaving tenants which could have a significant impact on the performance of the cluster overall. Hence, it is recommended to limit the rate of events that the API server will accept. - -Note: This is an Alpha feature in the Kubernetes 1.15 release. -
- -**Result:** **Not Scored - Operator Dependent** +Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and either remove the --enable-admission-plugins parameter, or set it to a +value that does not include AlwaysAdmit. **Audit:** -Run the below command on the master node. ```bash -journalctl -u k3s | grep "Running kube-apiserver" | tail -n1 | grep "enable-admission-plugins" +journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'enable-admission-plugins' ``` -Verify that the `--enable-admission-plugins` argument is set to a value that includes EventRateLimit. +**Expected Result**: + +```console +'--enable-admission-plugins' is not present OR '--enable-admission-plugins' is not present +``` + +### 1.2.12 Ensure that the admission control plugin AlwaysPullImages is set (Manual) + + +**Result:** pass **Remediation:** -By default, K3s only sets `NodeRestriction,PodSecurityPolicy` as the parameter to the `--enable-admission-plugins` argument. -To configure this, follow the Kubernetes documentation and set the desired limits in a configuration file. Then refer to K3s's documentation to see how to supply additional api server configuration via the kube-apiserver-arg parameter. - - -#### 1.2.11 -Ensure that the admission control plugin `AlwaysAdmit` is not set (Scored) -
-Rationale -Setting admission control plugin AlwaysAdmit allows all requests and do not filter any requests. - -The AlwaysAdmit admission controller was deprecated in Kubernetes v1.13. Its behavior was equivalent to turning off all admission controllers. -
- -**Result:** Pass +Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the --enable-admission-plugins parameter to include +AlwaysPullImages. +--enable-admission-plugins=...,AlwaysPullImages,... **Audit:** -Run the below command on the master node. ```bash -journalctl -u k3s | grep "Running kube-apiserver" | tail -n1 | grep "enable-admission-plugins" +journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'enable-admission-plugins' ``` -Verify that if the `--enable-admission-plugins` argument is set, its value does not include `AlwaysAdmit`. +**Expected Result**: + +```console +'--enable-admission-plugins' is not present +``` + +### 1.2.13 Ensure that the admission control plugin SecurityContextDeny is set if PodSecurityPolicy is not used (Manual) + + +**Result:** pass **Remediation:** -By default, K3s only sets `NodeRestriction,PodSecurityPolicy` as the parameter to the `--enable-admission-plugins` argument. No manual remediation needed. - - -#### 1.2.12 -Ensure that the admission control plugin AlwaysPullImages is set (Not Scored) -
-Rationale -Setting admission control policy to `AlwaysPullImages` forces every new pod to pull the required images every time. In a multi-tenant cluster users can be assured that their private images can only be used by those who have the credentials to pull them. Without this admission control policy, once an image has been pulled to a node, any pod from any user can use it simply by knowing the image’s name, without any authorization check against the image ownership. When this plug-in is enabled, images are always pulled prior to starting containers, which means valid credentials are required. - -
- -**Result:** **Not Scored - Operator Dependent** +Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the --enable-admission-plugins parameter to include +SecurityContextDeny, unless PodSecurityPolicy is already in place. +--enable-admission-plugins=...,SecurityContextDeny,... **Audit:** -Run the below command on the master node. ```bash -journalctl -u k3s | grep "Running kube-apiserver" | tail -n1 | grep "enable-admission-plugins" +journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'enable-admission-plugins' ``` -Verify that the `--enable-admission-plugins` argument is set to a value that includes `AlwaysPullImages`. +**Expected Result**: + +```console +'--enable-admission-plugins' is not present OR '--enable-admission-plugins' is not present +``` + +### 1.2.14 Ensure that the admission control plugin ServiceAccount is set (Automated) + + +**Result:** pass **Remediation:** -By default, K3s only sets `NodeRestriction,PodSecurityPolicy` as the parameter to the `--enable-admission-plugins` argument. -To configure this, follow the Kubernetes documentation and set the desired limits in a configuration file. Then refer to K3s's documentation to see how to supply additional api server configuration via the kube-apiserver-arg parameter. - -#### 1.2.13 -Ensure that the admission control plugin SecurityContextDeny is set if PodSecurityPolicy is not used (Not Scored) -
-Rationale -SecurityContextDeny can be used to provide a layer of security for clusters which do not have PodSecurityPolicies enabled. -
- -**Result:** Not Scored +Follow the documentation and create ServiceAccount objects as per your environment. +Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and ensure that the --disable-admission-plugins parameter is set to a +value that does not include ServiceAccount. **Audit:** -Run the below command on the master node. ```bash -journalctl -u k3s | grep "Running kube-apiserver" | tail -n1 | grep "enable-admission-plugins" +journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'ServiceAccount' ``` -Verify that the `--enable-admission-plugins` argument is set to a value that includes `SecurityContextDeny`, if `PodSecurityPolicy` is not included. +**Expected Result**: + +```console +'--disable-admission-plugins' is not present OR '--disable-admission-plugins' is not present +``` + +### 1.2.15 Ensure that the admission control plugin NamespaceLifecycle is set (Automated) + + +**Result:** pass **Remediation:** -K3s would need to have the `SecurityContextDeny` admission plugin enabled by passing it as an argument to K3s. `--kube-apiserver-arg='enable-admission-plugins=SecurityContextDeny` - - -#### 1.2.14 -Ensure that the admission control plugin `ServiceAccount` is set (Scored) -
-Rationale -When you create a pod, if you do not specify a service account, it is automatically assigned the `default` service account in the same namespace. You should create your own service account and let the API server manage its security tokens. -
- -**Result:** Pass +Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the --disable-admission-plugins parameter to +ensure it does not include NamespaceLifecycle. **Audit:** -Run the below command on the master node. ```bash -journalctl -u k3s | grep "Running kube-apiserver" | tail -n1 | grep "ServiceAccount" +journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'disable-admission-plugins' ``` -Verify that the `--disable-admission-plugins` argument is set to a value that does not includes `ServiceAccount`. +**Expected Result**: + +```console +'--disable-admission-plugins' is not present OR '--disable-admission-plugins' is not present +``` + +### 1.2.16 Ensure that the admission control plugin PodSecurityPolicy is set (Automated) + + +**Result:** pass **Remediation:** -By default, K3s does not use this argument. If there's a desire to use this argument, follow the documentation and create ServiceAccount objects as per your environment. Then refer to K3s's documentation to see how to supply additional api server configuration via the kube-apiserver-arg parameter. - - -#### 1.2.15 -Ensure that the admission control plugin `NamespaceLifecycle` is set (Scored) -
-Rationale -Setting admission control policy to `NamespaceLifecycle` ensures that objects cannot be created in non-existent namespaces, and that namespaces undergoing termination are not used for creating the new objects. This is recommended to enforce the integrity of the namespace termination process and also for the availability of the newer objects. -
- -**Result:** Pass +Follow the documentation and create Pod Security Policy objects as per your environment. +Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the --enable-admission-plugins parameter to a +value that includes PodSecurityPolicy: +--enable-admission-plugins=...,PodSecurityPolicy,... +Then restart the API Server. **Audit:** -Run the below command on the master node. ```bash -journalctl -u k3s | grep "Running kube-apiserver" | tail -n1 | grep "disable-admission-plugins" +journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'enable-admission-plugins' ``` -Verify that the `--disable-admission-plugins` argument is set to a value that does not include `NamespaceLifecycle`. +**Expected Result**: + +```console +'--enable-admission-plugins' is not present +``` + +### 1.2.17 Ensure that the admission control plugin NodeRestriction is set (Automated) + + +**Result:** pass **Remediation:** -By default, K3s does not use this argument. No manual remediation needed. - - -#### 1.2.16 -Ensure that the admission control plugin `PodSecurityPolicy` is set (Scored) -
-Rationale -A Pod Security Policy is a cluster-level resource that controls the actions that a pod can perform and what it has the ability to access. The `PodSecurityPolicy` objects define a set of conditions that a pod must run with in order to be accepted into the system. Pod Security Policies are comprised of settings and strategies that control the security features a pod has access to and hence this must be used to control pod access permissions. - -**Note:** When the PodSecurityPolicy admission plugin is in use, there needs to be at least one PodSecurityPolicy in place for ANY pods to be admitted. See section 1.7 for recommendations on PodSecurityPolicy settings. -
- -**Result:** Pass +Follow the Kubernetes documentation and configure NodeRestriction plug-in on kubelets. +Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the --enable-admission-plugins parameter to a +value that includes NodeRestriction. +--enable-admission-plugins=...,NodeRestriction,... **Audit:** -Run the below command on the master node. ```bash -journalctl -u k3s | grep "Running kube-apiserver" | tail -n1 | grep "enable-admission-plugins" +journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'enable-admission-plugins' ``` -Verify that the `--enable-admission-plugins` argument is set to a value that includes `PodSecurityPolicy`. +**Expected Result**: + +```console +'--enable-admission-plugins' is not present +``` + +### 1.2.18 Ensure that the --insecure-bind-address argument is not set (Automated) + + +**Result:** pass **Remediation:** -K3s would need to have the `PodSecurityPolicy` admission plugin enabled by passing it as an argument to K3s. `--kube-apiserver-arg='enable-admission-plugins=PodSecurityPolicy`. - - -#### 1.2.17 -Ensure that the admission control plugin `NodeRestriction` is set (Scored) -
-Rationale -Using the `NodeRestriction` plug-in ensures that the kubelet is restricted to the `Node` and `Pod` objects that it could modify as defined. Such kubelets will only be allowed to modify their own `Node` API object, and only modify `Pod` API objects that are bound to their node. - -
- -**Result:** Pass +Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and remove the --insecure-bind-address parameter. **Audit:** -Run the below command on the master node. ```bash -journalctl -u k3s | grep "Running kube-apiserver" | tail -n1 | grep "enable-admission-plugins" +journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'insecure-bind-address' ``` -Verify that the `--enable-admission-plugins` argument is set to a value that includes `NodeRestriction`. +**Expected Result**: + +```console +'--insecure-bind-address' is not present +``` + +### 1.2.19 Ensure that the --insecure-port argument is set to 0 (Automated) + + +**Result:** pass **Remediation:** -K3s would need to have the `NodeRestriction` admission plugin enabled by passing it as an argument to K3s. `--kube-apiserver-arg='enable-admission-plugins=NodeRestriction`. - - -#### 1.2.18 -Ensure that the `--insecure-bind-address` argument is not set (Scored) -
-Rationale -If you bind the apiserver to an insecure address, basically anyone who could connect to it over the insecure port, would have unauthenticated and unencrypted access to your master node. The apiserver doesn't do any authentication checking for insecure binds and traffic to the Insecure API port is not encrpyted, allowing attackers to potentially read sensitive data in transit. -
- -**Result:** Pass +Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the below parameter. +--insecure-port=0 **Audit:** -Run the below command on the master node. ```bash -journalctl -u k3s | grep "Running kube-apiserver" | tail -n1 | grep "insecure-bind-address" +journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'insecure-port' ``` -Verify that the `--insecure-bind-address` argument does not exist. +**Expected Result**: + +```console +'--insecure-port' is not present +``` + +### 1.2.20 Ensure that the --secure-port argument is not set to 0 (Automated) + + +**Result:** pass **Remediation:** -By default, K3s explicitly excludes the use of the `--insecure-bind-address` parameter. No manual remediation is needed. - - -#### 1.2.19 -Ensure that the `--insecure-port` argument is set to `0` (Scored) -
-Rationale -Setting up the apiserver to serve on an insecure port would allow unauthenticated and unencrypted access to your master node. This would allow attackers who could access this port, to easily take control of the cluster. -
- -**Result:** Pass +Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and either remove the --secure-port parameter or +set it to a different (non-zero) desired port. **Audit:** -Run the below command on the master node. ```bash -journalctl -u k3s | grep "Running kube-apiserver" | tail -n1 | grep "insecure-port" +journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'secure-port' ``` -Verify that the `--insecure-port` argument is set to `0`. +**Expected Result**: + +```console +'--secure-port' is not present OR '--secure-port' is not present +``` + +### 1.2.21 Ensure that the --profiling argument is set to false (Automated) + + +**Result:** pass **Remediation:** -By default, K3s starts the kube-apiserver process with this argument's parameter set to `0`. No manual remediation is needed. - - -#### 1.2.20 -Ensure that the `--secure-port` argument is not set to `0` (Scored) -
-Rationale -The secure port is used to serve https with authentication and authorization. If you disable it, no https traffic is served and all traffic is served unencrypted. -
- -**Result:** Pass +Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the below parameter. +--profiling=false **Audit:** -Run the below command on the master node. ```bash -journalctl -u k3s | grep "Running kube-apiserver" | tail -n1 | grep "secure-port" +journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'profiling' ``` -Verify that the `--secure-port` argument is either not set or is set to an integer value between 1 and 65535. +**Expected Result**: + +```console +'--profiling' is not present +``` + +### 1.2.22 Ensure that the --audit-log-path argument is set (Automated) + + +**Result:** pass **Remediation:** -By default, K3s sets the parameter of 6444 for the `--secure-port` argument. No manual remediation is needed. - - -#### 1.2.21 -Ensure that the `--profiling` argument is set to `false` (Scored) -
-Rationale -Profiling allows for the identification of specific performance bottlenecks. It generates a significant amount of program data that could potentially be exploited to uncover system and program details. If you are not experiencing any bottlenecks and do not need the profiler for troubleshooting purposes, it is recommended to turn it off to reduce the potential attack surface. -
- -**Result:** Pass +Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the --audit-log-path parameter to a suitable path and +file where you would like audit logs to be written, for example: +--audit-log-path=/var/log/apiserver/audit.log **Audit:** -Run the below command on the master node. ```bash -journalctl -u k3s | grep "Running kube-apiserver" | tail -n1 | grep "profiling" +journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'audit-log-path' ``` -Verify that the `--profiling` argument is set to false. +**Expected Result**: + +```console +'--audit-log-path' is not present +``` + +### 1.2.23 Ensure that the --audit-log-maxage argument is set to 30 or as appropriate (Automated) + + +**Result:** pass **Remediation:** -By default, K3s sets the `--profiling` flag parameter to false. No manual remediation needed. - - -#### 1.2.22 -Ensure that the `--audit-log-path` argument is set (Scored) -
-Rationale -Auditing the Kubernetes API Server provides a security-relevant chronological set of records documenting the sequence of activities that have affected system by individual users, administrators or other components of the system. Even though currently, Kubernetes provides only basic audit capabilities, it should be enabled. You can enable it by setting an appropriate audit log path. -
- -**Result:** Pass +Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the --audit-log-maxage parameter to 30 or as an appropriate number of days: +--audit-log-maxage=30 **Audit:** -Run the below command on the master node. ```bash -journalctl -u k3s | grep "Running kube-apiserver" | tail -n1 | grep "audit-log-path" +journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'audit-log-maxage' ``` -Verify that the `--audit-log-path` argument is set as appropriate. +**Expected Result**: + +```console +'--audit-log-maxage' is not present +``` + +### 1.2.24 Ensure that the --audit-log-maxbackup argument is set to 10 or as appropriate (Automated) + + +**Result:** pass **Remediation:** -K3s server needs to be run with the following argument, `--kube-apiserver-arg='audit-log-path=/path/to/log/file'`. - - -#### 1.2.23 -Ensure that the `--audit-log-maxage` argument is set to `30` or as appropriate (Scored) -
-Rationale -Retaining logs for at least 30 days ensures that you can go back in time and investigate or correlate any events. Set your audit log retention period to 30 days or as per your business requirements. -
- -**Result:** Pass +Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the --audit-log-maxbackup parameter to 10 or to an appropriate +value. +--audit-log-maxbackup=10 **Audit:** -Run the below command on the master node. ```bash -journalctl -u k3s | grep "Running kube-apiserver" | tail -n1 | grep "audit-log-maxage" +journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'audit-log-maxbackup' ``` -Verify that the `--audit-log-maxage` argument is set to `30` or as appropriate. +**Expected Result**: + +```console +'--audit-log-maxbackup' is not present +``` + +### 1.2.25 Ensure that the --audit-log-maxsize argument is set to 100 or as appropriate (Automated) + + +**Result:** pass **Remediation:** -K3s server needs to be run with the following argument, `--kube-apiserver-arg='audit-log-maxage=30'`. - - -#### 1.2.24 -Ensure that the `--audit-log-maxbackup` argument is set to `10` or as appropriate (Scored) -
-Rationale -Kubernetes automatically rotates the log files. Retaining old log files ensures that you would have sufficient log data available for carrying out any investigation or correlation. For example, if you have set file size of 100 MB and the number of old log files to keep as 10, you would approximate have 1 GB of log data that you could potentially use for your analysis. -
- -**Result:** Pass +Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the --audit-log-maxsize parameter to an appropriate size in MB. +For example, to set it as 100 MB: +--audit-log-maxsize=100 **Audit:** -Run the below command on the master node. ```bash -journalctl -u k3s | grep "Running kube-apiserver" | tail -n1 | grep "audit-log-maxbackup" +journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'audit-log-maxsize' ``` -Verify that the `--audit-log-maxbackup` argument is set to `10` or as appropriate. +**Expected Result**: + +```console +'--audit-log-maxsize' is not present +``` + +### 1.2.26 Ensure that the --request-timeout argument is set as appropriate (Automated) + + +**Result:** pass **Remediation:** -K3s server needs to be run with the following argument, `--kube-apiserver-arg='audit-log-maxbackup=10'`. - - -#### 1.2.25 -Ensure that the `--audit-log-maxsize` argument is set to `100` or as appropriate (Scored) -
-Rationale -Kubernetes automatically rotates the log files. Retaining old log files ensures that you would have sufficient log data available for carrying out any investigation or correlation. If you have set file size of 100 MB and the number of old log files to keep as 10, you would approximate have 1 GB of log data that you could potentially use for your analysis. -
- -**Result:** Pass +Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +and set the below parameter as appropriate and if needed. +For example, +--request-timeout=300s **Audit:** -Run the below command on the master node. ```bash -journalctl -u k3s | grep "Running kube-apiserver" | tail -n1 | grep "audit-log-maxsize" +journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'request-timeout' ``` -Verify that the `--audit-log-maxsize` argument is set to `100` or as appropriate. +**Expected Result**: + +```console +'--request-timeout' is not present OR '--request-timeout' is not present +``` + +### 1.2.27 Ensure that the --service-account-lookup argument is set to true (Automated) + + +**Result:** pass **Remediation:** -K3s server needs to be run with the following argument, `--kube-apiserver-arg='audit-log-maxsize=100'`. - - -#### 1.2.26 -Ensure that the `--request-timeout` argument is set as appropriate (Scored) -
-Rationale -Setting global request timeout allows extending the API server request timeout limit to a duration appropriate to the user's connection speed. By default, it is set to 60 seconds which might be problematic on slower connections making cluster resources inaccessible once the data volume for requests exceeds what can be transmitted in 60 seconds. But, setting this timeout limit to be too large can exhaust the API server resources making it prone to Denial-of-Service attack. Hence, it is recommended to set this limit as appropriate and change the default limit of 60 seconds only if needed. -
- -**Result:** Pass +Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the below parameter. +--service-account-lookup=true +Alternatively, you can delete the --service-account-lookup parameter from this file so +that the default takes effect. **Audit:** -Run the below command on the master node. ```bash -journalctl -u k3s | grep "Running kube-apiserver" | tail -n1 | grep "request-timeout" +journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'service-account-lookup' ``` -Verify that the `--request-timeout` argument is either not set or set to an appropriate value. +**Expected Result**: + +```console +'--service-account-lookup' is not present OR '--service-account-lookup' is not present +``` + +### 1.2.28 Ensure that the --service-account-key-file argument is set as appropriate (Automated) + + +**Result:** pass **Remediation:** -By default, K3s does not set the `--request-timeout` argument. No manual remediation needed. - - -#### 1.2.27 -Ensure that the `--service-account-lookup` argument is set to `true` (Scored) -
-Rationale -If `--service-account-lookup` is not enabled, the apiserver only verifies that the authentication token is valid, and does not validate that the service account token mentioned in the request is actually present in etcd. This allows using a service account token even after the corresponding service account is deleted. This is an example of time of check to time of use security issue. -
- -**Result:** Pass +Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the --service-account-key-file parameter +to the public key file for service accounts: +--service-account-key-file= **Audit:** -Run the below command on the master node. ```bash -journalctl -u k3s | grep "Running kube-apiserver" | tail -n1 | grep "service-account-lookup" +journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'service-account-key-file' ``` -Verify that if the `--service-account-lookup` argument exists it is set to `true`. +**Expected Result**: + +```console +'--service-account-key-file' is not present +``` + +### 1.2.29 Ensure that the --etcd-certfile and --etcd-keyfile arguments are set as appropriate (Automated) + + +**Result:** pass **Remediation:** -K3s server needs to be run with the following argument, `--kube-apiserver-arg='service-account-lookup=true'`. +Follow the Kubernetes documentation and set up the TLS connection between the apiserver and etcd. +Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the etcd certificate and key file parameters. +--etcd-certfile= +--etcd-keyfile= - -#### 1.2.28 -Ensure that the `--service-account-key-file` argument is set as appropriate (Scored) -
-Rationale -By default, if no `--service-account-key-file` is specified to the apiserver, it uses the private key from the TLS serving certificate to verify service account tokens. To ensure that the keys for service account tokens could be rotated as needed, a separate public/private key pair should be used for signing service account tokens. Hence, the public key should be specified to the apiserver with `--service-account-key-file`. -
- -**Result:** Pass - -**Audit:** -Run the below command on the master node. +**Audit Script:** `check_for_k3s_etcd.sh` ```bash -journalctl -u k3s | grep "Running kube-apiserver" | tail -n1 | grep "service-account-key-file" +#!/bin/bash + +# This script is used to ensure that k3s is actually running etcd (and not other databases like sqlite3) +# before it checks the requirement +set -eE + +handle_error() { + echo "false" +} + +trap 'handle_error' ERR + + +if [[ "$(journalctl -D /var/log/journal -u k3s | grep 'Managed etcd' | grep -v grep | wc -l)" -gt 0 ]]; then + case $1 in + "1.1.11") + echo $(stat -c %a /var/lib/rancher/k3s/server/db/etcd);; + "1.2.29") + echo $(journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'etcd-');; + "2.1") + echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');; + "2.2") + echo "$(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth')";; + "2.3") + echo $(grep 'auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);; + "2.4") + echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');; + "2.5") + echo "$(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth')";; + "2.6") + echo $(grep 'peer-auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);; + "2.7") + echo $(grep 'trusted-ca-file' /var/lib/rancher/k3s/server/db/etcd/config);; + esac +else +# If another database is running, return whatever is required to pass the scan + case $1 in + "1.1.11") + echo "700";; + "1.2.29") + echo "--etcd-certfile AND --etcd-keyfile";; + "2.1") + echo "cert-file AND key-file";; + "2.2") + echo "true";; + "2.3") + echo "false";; + "2.4") + echo "peer-cert-file AND peer-key-file";; + "2.5") + echo "true";; + "2.6") + echo "--peer-auto-tls=false";; + "2.7") + echo "--trusted-ca-file";; + esac +fi + ``` -Verify that the `--service-account-key-file` argument exists and is set as appropriate. - -**Remediation:** -By default, K3s sets the `--service-account-key-file` explicitly. No manual remediation needed. - - -#### 1.2.29 -Ensure that the `--etcd-certfile` and `--etcd-keyfile` arguments are set as appropriate (Scored) -
-Rationale -etcd is a highly-available key-value store used by Kubernetes deployments for persistent storage of all of its REST API objects. These objects are sensitive in nature and should be protected by client authentication. This requires the API server to identify itself to the etcd server using a client certificate and key. -
- -**Result:** Pass - -**Audit:** -Run the below command on the master node. +**Audit Execution:** ```bash -journalctl -u k3s | grep "Running kube-apiserver" | tail -n1 | grep -E 'etcd-certfile|etcd-keyfile' +./check_for_k3s_etcd.sh 1.2.29 ``` -Verify that the `--etcd-certfile` and `--etcd-keyfile` arguments exist and they are set as appropriate. +**Expected Result**: + +```console +'--etcd-certfile' is present AND '--etcd-keyfile' is present +``` + +**Returned Value**: + +```console +Feb 21 23:13:24 k3s[5223]: time="2022-02-21T23:13:24.847339487Z" level=info msg="Running kube-apiserver --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit-log --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --enable-admission-plugins=NodeRestriction,PodSecurityPolicy,NamespaceLifecycle,ServiceAccount --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --insecure-port=0 --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key" +``` + +### 1.2.30 Ensure that the --tls-cert-file and --tls-private-key-file arguments are set as appropriate (Automated) + + +**Result:** pass **Remediation:** -By default, K3s sets the `--etcd-certfile` and `--etcd-keyfile` arguments explicitly. No manual remediation needed. - - -#### 1.2.30 -Ensure that the `--tls-cert-file` and `--tls-private-key-file` arguments are set as appropriate (Scored) -
-Rationale -API server communication contains sensitive parameters that should remain encrypted in transit. Configure the API server to serve only HTTPS traffic. -
- -**Result:** Pass +Follow the Kubernetes documentation and set up the TLS connection on the apiserver. +Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the TLS certificate and private key file parameters. +--tls-cert-file= +--tls-private-key-file= **Audit:** -Run the below command on the master node. ```bash -journalctl -u k3s | grep "Running kube-apiserver" | tail -n1 | grep -E 'tls-cert-file|tls-private-key-file' +journalctl -D /var/log/journal -u k3s | grep -A1 'Running kube-apiserver' | tail -n2 ``` -Verify that the `--tls-cert-file` and `--tls-private-key-file` arguments exist and they are set as appropriate. +**Expected Result**: + +```console +'--tls-cert-file' is present AND '--tls-private-key-file' is present +``` + +**Returned Value**: + +```console +Feb 21 23:13:24 k3s[5223]: time="2022-02-21T23:13:24.847339487Z" level=info msg="Running kube-apiserver --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit-log --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --enable-admission-plugins=NodeRestriction,PodSecurityPolicy,NamespaceLifecycle,ServiceAccount --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --insecure-port=0 --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key" Feb 21 23:13:24 k3s[5223]: {"level":"info","ts":"2022-02-21T23:13:24.848Z","caller":"raft/raft.go:1530","msg":"b3656202b34887ca switched to configuration voters=(12926846069174208458)"} +``` + +### 1.2.31 Ensure that the --client-ca-file argument is set as appropriate (Automated) + + +**Result:** pass **Remediation:** -By default, K3s sets the `--tls-cert-file` and `--tls-private-key-file` arguments explicitly. No manual remediation needed. - - -#### 1.2.31 -Ensure that the `--client-ca-file` argument is set as appropriate (Scored) -
-Rationale -API server communication contains sensitive parameters that should remain encrypted in transit. Configure the API server to serve only HTTPS traffic. If `--client-ca-file` argument is set, any request presenting a client certificate signed by one of the authorities in the `client-ca-file` is authenticated with an identity corresponding to the CommonName of the client certificate. -
- -**Result:** Pass +Follow the Kubernetes documentation and set up the TLS connection on the apiserver. +Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the client certificate authority file. +--client-ca-file= **Audit:** -Run the below command on the master node. ```bash -journalctl -u k3s | grep "Running kube-apiserver" | tail -n1 | grep "client-ca-file" +journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'client-ca-file' ``` -Verify that the `--client-ca-file` argument exists and it is set as appropriate. +**Expected Result**: + +```console +'--client-ca-file' is not present +``` + +### 1.2.32 Ensure that the --etcd-cafile argument is set as appropriate (Automated) + + +**Result:** pass **Remediation:** -By default, K3s sets the `--client-ca-file` argument explicitly. No manual remediation needed. - - -#### 1.2.32 -Ensure that the `--etcd-cafile` argument is set as appropriate (Scored) -
-Rationale -etcd is a highly-available key-value store used by Kubernetes deployments for persistent storage of all of its REST API objects. These objects are sensitive in nature and should be protected by client authentication. This requires the API server to identify itself to the etcd server using a SSL Certificate Authority file. -
- -**Result:** Pass +Follow the Kubernetes documentation and set up the TLS connection between the apiserver and etcd. +Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the etcd certificate authority file parameter. +--etcd-cafile= **Audit:** -Run the below command on the master node. ```bash -journalctl -u k3s | grep "Running kube-apiserver" | tail -n1 | grep "etcd-cafile" +journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'etcd-cafile' ``` -Verify that the `--etcd-cafile` argument exists and it is set as appropriate. +**Expected Result**: + +```console +'--etcd-cafile' is not present +``` + +### 1.2.33 Ensure that the --encryption-provider-config argument is set as appropriate (Manual) + + +**Result:** pass **Remediation:** -By default, K3s sets the `--etcd-cafile` argument explicitly. No manual remediation needed. - - -#### 1.2.33 -Ensure that the `--encryption-provider-config` argument is set as appropriate (Scored) -
-Rationale -etcd is a highly available key-value store used by Kubernetes deployments for persistent storage of all of its REST API objects. These objects are sensitive in nature and should be encrypted at rest to avoid any disclosures. -
- -**Result:** Pass +Follow the Kubernetes documentation and configure a EncryptionConfig file. +Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the --encryption-provider-config parameter to the path of that file: --encryption-provider-config=
**Audit:** -Run the below command on the master node. ```bash -journalctl -u k3s | grep "Running kube-apiserver" | tail -n1 | grep "encryption-provider-config" +journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'encryption-provider-config' ``` -Verify that the `--encryption-provider-config` argument is set to a EncryptionConfigfile. Additionally, ensure that the `EncryptionConfigfile` has all the desired resources covered especially any secrets. +**Expected Result**: + +```console +'--encryption-provider-config' is not present +``` + +### 1.2.34 Ensure that encryption providers are appropriately configured (Manual) + + +**Result:** warn **Remediation:** -K3s server needs to be ran with the follow, `--kube-apiserver-arg='encryption-provider-config=/path/to/encryption_config'`. This can be done by running k3s with the `--secrets-encryptiuon` argument which will configure the encryption provider. - - -#### 1.2.34 -Ensure that encryption providers are appropriately configured (Scored) -
-Rationale -Where `etcd` encryption is used, it is important to ensure that the appropriate set of encryption providers is used. Currently, the `aescbc`, `kms` and `secretbox` are likely to be appropriate options. -
- -**Result:** Pass - -**Remediation:** -Follow the Kubernetes documentation and configure a `EncryptionConfig` file. -In this file, choose **aescbc**, **kms** or **secretbox** as the encryption provider. +Follow the Kubernetes documentation and configure a EncryptionConfig file. +In this file, choose aescbc, kms or secretbox as the encryption provider. **Audit:** -Run the below command on the master node. ```bash grep aescbc /path/to/encryption-config.json ``` -Run the below command on the master node. - -Verify that aescbc is set as the encryption provider for all the desired resources. - -**Remediation** -K3s server needs to be run with the following, `--secrets-encryption=true`, and verify that one of the allowed encryption providers is present. +### 1.2.35 Ensure that the API Server only makes use of Strong Cryptographic Ciphers (Manual) -#### 1.2.35 -Ensure that the API Server only makes use of Strong Cryptographic Ciphers (Not Scored) +**Result:** pass -
-Rationale -TLS ciphers have had a number of known vulnerabilities and weaknesses, which can reduce the protection provided by them. By default Kubernetes supports a number of TLS cipher suites including some that have security concerns, weakening the protection provided. -
- -**Result:** **Not Scored - Operator Dependent** +**Remediation:** +Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the below parameter. +--tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM +_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM +_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM +_SHA384 **Audit:** -Run the below command on the master node. ```bash -journalctl -u k3s | grep "Running kube-apiserver" | tail -n1 | grep "tls-cipher-suites" +journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'tls-cipher-suites' ``` -Verify that the `--tls-cipher-suites` argument is set as outlined in the remediation procedure below. +**Expected Result**: + +```console +'--tls-cipher-suites' is not present +``` + +## 1.3 Controller Manager +### 1.3.1 Ensure that the --terminated-pod-gc-threshold argument is set as appropriate (Manual) + + +**Result:** pass **Remediation:** -By default, K3s explicitly doesn't set this flag. No manual remediation needed. - - -### 1.3 Controller Manager - -#### 1.3.1 -Ensure that the `--terminated-pod-gc-threshold` argument is set as appropriate (Not Scored) -
-Rationale -Garbage collection is important to ensure sufficient resource availability and avoiding degraded performance and availability. In the worst case, the system might crash or just be unusable for a long period of time. The current setting for garbage collection is 12,500 terminated pods which might be too high for your system to sustain. Based on your system resources and tests, choose an appropriate threshold value to activate garbage collection. -
- -**Result:** **Not Scored - Operator Dependent** +Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml +on the master node and set the --terminated-pod-gc-threshold to an appropriate threshold, +for example: +--terminated-pod-gc-threshold=10 **Audit:** -Run the below command on the master node. ```bash -journalctl -u k3s | grep "Running kube-controller-manager" | tail -n1 | grep "terminated-pod-gc-threshold +journalctl -D /var/log/journal -u k3s | grep 'Running kube-controller-manager' | tail -n1 | grep 'terminated-pod-gc-threshold' ``` -Verify that the `--terminated-pod-gc-threshold` argument is set as appropriate. +**Expected Result**: + +```console +'--terminated-pod-gc-threshold' is not present +``` + +### 1.3.2 Ensure that the --profiling argument is set to false (Automated) + + +**Result:** pass **Remediation:** -K3s server needs to be run with the following, `--kube-controller-manager-arg='terminated-pod-gc-threshold=10`. - - -#### 1.3.2 -Ensure that the `--profiling` argument is set to false (Scored) -
-Rationale -Profiling allows for the identification of specific performance bottlenecks. It generates a significant amount of program data that could potentially be exploited to uncover system and program details. If you are not experiencing any bottlenecks and do not need the profiler for troubleshooting purposes, it is recommended to turn it off to reduce the potential attack surface. -
- -**Result:** Pass +Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml +on the master node and set the below parameter. +--profiling=false **Audit:** -Run the below command on the master node. ```bash -journalctl -u k3s | grep "Running kube-controller-manager" | tail -n1 | grep "profiling" +journalctl -D /var/log/journal -u k3s | grep 'Running kube-controller-manager' | tail -n1 | grep 'profiling' ``` -Verify that the `--profiling` argument is set to false. +**Expected Result**: + +```console +'--profiling' is not present +``` + +### 1.3.3 Ensure that the --use-service-account-credentials argument is set to true (Automated) + + +**Result:** pass **Remediation:** -By default, K3s sets the `--profiling` flag parameter to false. No manual remediation needed. - - -#### 1.3.3 -Ensure that the `--use-service-account-credentials` argument is set to `true` (Scored) -
-Rationale -The controller manager creates a service account per controller in the `kube-system` namespace, generates a credential for it, and builds a dedicated API client with that service account credential for each controller loop to use. Setting the `--use-service-account-credentials` to `true` runs each control loop within the controller manager using a separate service account credential. When used in combination with RBAC, this ensures that the control loops run with the minimum permissions required to perform their intended tasks. -
- -**Result:** Pass +Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml +on the master node to set the below parameter. +--use-service-account-credentials=true **Audit:** -Run the below command on the master node. ```bash -journalctl -u k3s | grep "Running kube-controller-manager" | tail -n1 | grep "use-service-account-credentials" +journalctl -D /var/log/journal -u k3s | grep 'Running kube-controller-manager' | tail -n1 | grep 'use-service-account-credentials' ``` -Verify that the `--use-service-account-credentials` argument is set to true. +**Expected Result**: + +```console +'--use-service-account-credentials' is not present +``` + +### 1.3.4 Ensure that the --service-account-private-key-file argument is set as appropriate (Automated) + + +**Result:** pass **Remediation:** -K3s server needs to be run with the following, `--kube-controller-manager-arg='use-service-account-credentials=true'` - - -#### 1.3.4 -Ensure that the `--service-account-private-key-file` argument is set as appropriate (Scored) -
-Rationale -To ensure that keys for service account tokens can be rotated as needed, a separate public/private key pair should be used for signing service account tokens. The private key should be specified to the controller manager with `--service-account-private-key-file` as appropriate. -
- -**Result:** Pass +Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml +on the master node and set the --service-account-private-key-file parameter +to the private key file for service accounts. +--service-account-private-key-file= **Audit:** -Run the below command on the master node. ```bash -journalctl -u k3s | grep "Running kube-controller-manager" | tail -n1 | grep "service-account-private-key-file" +journalctl -D /var/log/journal -u k3s | grep 'Running kube-controller-manager' | tail -n1 | grep 'service-account-private-key-file' ``` -Verify that the `--service-account-private-key-file` argument is set as appropriate. +**Expected Result**: + +```console +'--service-account-private-key-file' is not present +``` + +### 1.3.5 Ensure that the --root-ca-file argument is set as appropriate (Automated) + + +**Result:** pass **Remediation:** -By default, K3s sets the `--service-account-private-key-file` argument with the service account key file. No manual remediation needed. - - -#### 1.3.5 -Ensure that the `--root-ca-file` argument is set as appropriate (Scored) -
-Rationale -Processes running within pods that need to contact the API server must verify the API server's serving certificate. Failing to do so could be a subject to man-in-the-middle attacks. - -Providing the root certificate for the API server's serving certificate to the controller manager with the `--root-ca-file` argument allows the controller manager to inject the trusted bundle into pods so that they can verify TLS connections to the API server. -
- -**Result:** Pass +Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml +on the master node and set the --root-ca-file parameter to the certificate bundle file`. +--root-ca-file= **Audit:** -Run the below command on the master node. ```bash -journalctl -u k3s | grep "Running kube-controller-manager" | tail -n1 | grep "root-ca-file" +journalctl -D /var/log/journal -u k3s | grep 'Running kube-controller-manager' | tail -n1 | grep 'root-ca-file' ``` -Verify that the `--root-ca-file` argument exists and is set to a certificate bundle file containing the root certificate for the API server's serving certificate +**Expected Result**: -**Remediation:** -By default, K3s sets the `--root-ca-file` argument with the root ca file. No manual remediation needed. - - -#### 1.3.6 -Ensure that the `RotateKubeletServerCertificate` argument is set to `true` (Scored) -
-Rationale -`RotateKubeletServerCertificate` causes the kubelet to both request a serving certificate after bootstrapping its client credentials and rotate the certificate as its existing credentials expire. This automated periodic rotation ensures that there are no downtimes due to expired certificates and thus addressing availability in the CIA security triad. - -Note: This recommendation only applies if you let kubelets get their certificates from the API server. In case your kubelet certificates come from an outside authority/tool (e.g. Vault) then you need to take care of rotation yourself. -
- -**Result:** Not Applicable - -**Audit:** -Run the below command on the master node. - -```bash -journalctl -u k3s | grep "Running kube-controller-manager" | tail -n1 | grep "RotateKubeletServerCertificate" +```console +'--root-ca-file' is not present ``` -Verify that RotateKubeletServerCertificateargument exists and is set to true. +### 1.3.6 Ensure that the RotateKubeletServerCertificate argument is set to true (Automated) -**Remediation:** -By default, K3s implements its own logic for certificate generation and rotation. - - -#### 1.3.7 -Ensure that the `--bind-address` argument is set to `127.0.0.1` (Scored) -
-Rationale -The Controller Manager API service which runs on port 10252/TCP by default is used for health and metrics information and is available without authentication or encryption. As such it should only be bound to a localhost interface, to minimize the cluster's attack surface. -
- -**Result:** Pass - -**Audit:** -Run the below command on the master node. - -```bash -journalctl -u k3s | grep "Running kube-controller-manager" | tail -n1 | grep "bind-address" -``` - -Verify that the `--bind-address` argument is set to 127.0.0.1. - -**Remediation:** -By default, K3s sets the `--bind-address` argument to `127.0.0.1`. No manual remediation needed. - - -### 1.4 Scheduler -This section contains recommendations relating to Scheduler configuration flags - - -#### 1.4.1 -Ensure that the `--profiling` argument is set to `false` (Scored) -
-Rationale -Profiling allows for the identification of specific performance bottlenecks. It generates a significant amount of program data that could potentially be exploited to uncover system and program details. If you are not experiencing any bottlenecks and do not need the profiler for troubleshooting purposes, it is recommended to turn it off to reduce the potential attack surface. -
- -**Result:** Pass - -**Audit:** -Run the below command on the master node. - -```bash -journalctl -u k3s | grep "Running kube-scheduler" | tail -n1 | grep "profiling" -``` - -Verify that the `--profiling` argument is set to false. - -**Remediation:** -By default, K3s sets the `--profiling` flag parameter to false. No manual remediation needed. - - -#### 1.4.2 -Ensure that the `--bind-address` argument is set to `127.0.0.1` (Scored) -
-Rationale - -The Scheduler API service which runs on port 10251/TCP by default is used for health and metrics information and is available without authentication or encryption. As such it should only be bound to a localhost interface, to minimize the cluster's attack surface. -
- -**Result:** Pass - -**Audit:** -Run the below command on the master node. - -```bash -journalctl -u k3s | grep "Running kube-scheduler" | tail -n1 | grep "bind-address" -``` - -Verify that the `--bind-address` argument is set to 127.0.0.1. - -**Remediation:** -By default, K3s sets the `--bind-address` argument to `127.0.0.1`. No manual remediation needed. - - -## 2 Etcd Node Configuration -This section covers recommendations for etcd configuration. - -#### 2.1 -Ensure that the `cert-file` and `key-file` fields are set as appropriate (Scored) -
-Rationale -etcd is a highly-available key-value store used by Kubernetes deployments for persistent storage of all of its REST API objects. These objects are sensitive in nature and should be encrypted in transit. -
- -**Result:** Pass - -**Audit:** -Run the below command on the master node. - -```bash -grep -E 'cert-file|key-file' /var/lib/rancher/k3s/server/db/etcd/config -``` - -Verify that the `cert-file` and the `key-file` fields are set as appropriate. - -**Remediation:** -By default, K3s uses a config file for etcd that can be found at `/var/lib/rancher/k3s/server/db/etcd/config`. Server and peer cert and key files are specified. No manual remediation needed. - - -#### 2.2 -Ensure that the `client-cert-auth` field is set to `true` (Scored) -
-Rationale -etcd is a highly-available key-value store used by Kubernetes deployments for persistent storage of all of its REST API objects. These objects are sensitive in nature and should not be available to unauthenticated clients. You should enable the client authentication via valid certificates to secure the access to the etcd service. -
- -**Result:** Pass - -**Audit:** -Run the below command on the master node. - -```bash -grep 'client-cert-auth' /var/lib/rancher/k3s/server/db/etcd/config -``` - -Verify that the `client-cert-auth` field is set to true. - -**Remediation:** -By default, K3s uses a config file for etcd that can be found at `/var/lib/rancher/k3s/server/db/etcd/config`. `client-cert-auth` is set to true. No manual remediation needed. - - -#### 2.3 -Ensure that the `auto-tls` field is not set to `true` (Scored) -
-Rationale -etcd is a highly-available key-value store used by Kubernetes deployments for persistent storage of all of its REST API objects. These objects are sensitive in nature and should not be available to unauthenticated clients. You should enable the client authentication via valid certificates to secure the access to the etcd service. -
- -**Result:** Pass - -**Remediation:** -By default, K3s starts Etcd without this flag. It is set to `false` by default. - - -#### 2.4 -Ensure that the `peer-cert-file` and `peer-key-file` fields are set as appropriate (Scored) -
-Rationale -etcd is a highly-available key-value store used by Kubernetes deployments for persistent storage of all of its REST API objects. These objects are sensitive in nature and should be encrypted in transit and also amongst peers in the etcd clusters. -
- -**Result:** Pass - -**Remediation:** -By default, K3s starts Etcd with a config file found here, `/var/lib/rancher/k3s/server/db/etcd/config`. The config file contains `peer-transport-security:` which has fields that have the peer cert and peer key files. - - -#### 2.5 -Ensure that the `client-cert-auth` field is set to `true` (Scored) -
-Rationale -etcd is a highly-available key-value store used by Kubernetes deployments for persistent storage of all of its REST API objects. These objects are sensitive in nature and should be accessible only by authenticated etcd peers in the etcd cluster. -
- -**Result:** Pass - -**Audit:** -Run the below command on the master node. - -```bash -grep 'client-cert-auth' /var/lib/rancher/k3s/server/db/etcd/config -``` - -Verify that the `client-cert-auth` field in the peer section is set to true. - -**Remediation:** -By default, K3s uses a config file for etcd that can be found at `/var/lib/rancher/k3s/server/db/etcd/config`. Within the file, the `client-cert-auth` field is set. No manual remediation needed. - - -#### 2.6 -Ensure that the `peer-auto-tls` field is not set to `true` (Scored) -
-Rationale -etcd is a highly-available key-value store used by Kubernetes deployments for persistent storage of all of its REST API objects. These objects are sensitive in nature and should be accessible only by authenticated etcd peers in the etcd cluster. Hence, do not use self- signed certificates for authentication. -
- -**Result:** Pass - -**Audit:** -Run the below command on the master node. - -```bash -grep 'peer-auto-tls' /var/lib/rancher/k3s/server/db/etcd/config -``` - -Verify that if the `peer-auto-tls` field does not exist. - -**Remediation:** -By default, K3s uses a config file for etcd that can be found at `/var/lib/rancher/k3s/server/db/etcd/config`. Within the file, it does not contain the `peer-auto-tls` field. No manual remediation needed. - - -#### 2.7 -Ensure that a unique Certificate Authority is used for etcd (Not Scored) -
-Rationale -etcd is a highly available key-value store used by Kubernetes deployments for persistent storage of all of its REST API objects. Its access should be restricted to specifically designated clients and peers only. - -Authentication to etcd is based on whether the certificate presented was issued by a trusted certificate authority. There is no checking of certificate attributes such as common name or subject alternative name. As such, if any attackers were able to gain access to any certificate issued by the trusted certificate authority, they would be able to gain full access to the etcd database. -
- -**Result:** Pass - -**Audit:** -Run the below command on the master node. - -```bash -# To find the ca file used by etcd: -grep 'trusted-ca-file' /var/lib/rancher/k3s/server/db/etcd/config -# To find the kube-apiserver process: -journalctl -u k3s | grep "Running kube-apiserver" | tail -n1 -``` - -Verify that the file referenced by the `client-ca-file` flag in the apiserver process is different from the file referenced by the `trusted-ca-file` parameter in the etcd configuration file. - -**Remediation:** -By default, K3s uses a config file for etcd that can be found at `/var/lib/rancher/k3s/server/db/etcd/config` and the `trusted-ca-file` parameters in it are set to unique values specific to etcd. No manual remediation needed. - - - -## 3 Control Plane Configuration - - -### 3.1 Authentication and Authorization - - -#### 3.1.1 -Client certificate authentication should not be used for users (Not Scored) -
-Rationale -With any authentication mechanism the ability to revoke credentials if they are compromised or no longer required, is a key control. Kubernetes client certificate authentication does not allow for this due to a lack of support for certificate revocation. -
- -**Result:** Not Scored - Operator Dependent - -**Audit:** -Review user access to the cluster and ensure that users are not making use of Kubernetes client certificate authentication. - -**Remediation:** -Alternative mechanisms provided by Kubernetes such as the use of OIDC should be implemented in place of client certificates. - -### 3.2 Logging - - -#### 3.2.1 -Ensure that a minimal audit policy is created (Scored) -
-Rationale -Logging is an important detective control for all systems, to detect potential unauthorized access. -
- -**Result:** Does not pass. See the [Hardening Guide](../hardening_guide/) for details. - -**Audit:** -Run the below command on the master node. - -```bash -journalctl -u k3s | grep "Running kube-apiserver" | tail -n1 | grep "audit-policy-file" -``` - -Verify that the `--audit-policy-file` is set. Review the contents of the file specified and ensure that it contains a valid audit policy. - -**Remediation:** -Create an audit policy file for your cluster and pass it to k3s. e.g. `--kube-apiserver-arg='audit-log-path=/var/lib/rancher/k3s/server/logs/audit-log'` - - -#### 3.2.2 -Ensure that the audit policy covers key security concerns (Not Scored) -
-Rationale -Security audit logs should cover access and modification of key resources in the cluster, to enable them to form an effective part of a security environment. -
- -**Result:** Not Scored - Operator Dependent - -**Remediation:** - - -## 4 Worker Node Security Configuration - - -### 4.1 Worker Node Configuration Files - - -#### 4.1.1 -Ensure that the kubelet service file permissions are set to `644` or more restrictive (Scored) -
-Rationale -The `kubelet` service file controls various parameters that set the behavior of the kubelet service in the worker node. You should restrict its file permissions to maintain the integrity of the file. The file should be writable by only the administrators on the system. -
**Result:** Not Applicable **Remediation:** -K3s doesn’t launch the kubelet as a service. It is launched and managed by the K3s supervisor process. All configuration is passed to it as command line arguments at run time. +Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml +on the master node and set the --feature-gates parameter to include RotateKubeletServerCertificate=true. +--feature-gates=RotateKubeletServerCertificate=true + +### 1.3.7 Ensure that the --bind-address argument is set to 127.0.0.1 (Automated) -#### 4.1.2 -Ensure that the kubelet service file ownership is set to `root:root` (Scored) -
-Rationale -The `kubelet` service file controls various parameters that set the behavior of the kubelet service in the worker node. You should set its file ownership to maintain the integrity of the file. The file should be owned by `root:root`. -
+**Result:** pass + +**Remediation:** +Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml +on the master node and ensure the correct value for the --bind-address parameter + +**Audit:** + +```bash +journalctl -D /var/log/journal -u k3s | grep 'Running kube-controller-manager' | tail -n1 | grep 'bind-address' +``` + +**Expected Result**: + +```console +'--bind-address' is present OR '--bind-address' is not present +``` + +## 1.4 Scheduler +### 1.4.1 Ensure that the --profiling argument is set to false (Automated) + + +**Result:** pass + +**Remediation:** +Edit the Scheduler pod specification file /etc/kubernetes/manifests/kube-scheduler.yaml file +on the master node and set the below parameter. +--profiling=false + +**Audit:** + +```bash +journalctl -D /var/log/journal -u k3s | grep 'Running kube-scheduler' | tail -n1 +``` + +**Expected Result**: + +```console +'false' is equal to 'false' +``` + +**Returned Value**: + +```console +Feb 21 23:13:24 k3s[5223]: time="2022-02-21T23:13:24.851975832Z" level=info msg="Running kube-scheduler --address=127.0.0.1 --bind-address=127.0.0.1 --kubeconfig=/var/lib/rancher/k3s/server/cred/scheduler.kubeconfig --port=10251 --profiling=false --secure-port=0" +``` + +### 1.4.2 Ensure that the --bind-address argument is set to 127.0.0.1 (Automated) + + +**Result:** pass + +**Remediation:** +Edit the Scheduler pod specification file /etc/kubernetes/manifests/kube-scheduler.yaml +on the master node and ensure the correct value for the --bind-address parameter + +**Audit:** + +```bash +journalctl -D /var/log/journal -u k3s | grep 'Running kube-scheduler' | tail -n1 | grep 'bind-address' +``` + +**Expected Result**: + +```console +'--bind-address' is present OR '--bind-address' is not present +``` + +## 2 Etcd Node Configuration Files +### 2.1 Ensure that the --cert-file and --key-file arguments are set as appropriate (Automated) + + +**Result:** pass + +**Remediation:** +Follow the etcd service documentation and configure TLS encryption. +Then, edit the etcd pod specification file /etc/kubernetes/manifests/etcd.yaml +on the master node and set the below parameters. +--cert-file=
+--key-file=
+ +**Audit Script:** `check_for_k3s_etcd.sh` + +```bash +#!/bin/bash + +# This script is used to ensure that k3s is actually running etcd (and not other databases like sqlite3) +# before it checks the requirement +set -eE + +handle_error() { + echo "false" +} + +trap 'handle_error' ERR + + +if [[ "$(journalctl -D /var/log/journal -u k3s | grep 'Managed etcd' | grep -v grep | wc -l)" -gt 0 ]]; then + case $1 in + "1.1.11") + echo $(stat -c %a /var/lib/rancher/k3s/server/db/etcd);; + "1.2.29") + echo $(journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'etcd-');; + "2.1") + echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');; + "2.2") + echo "$(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth')";; + "2.3") + echo $(grep 'auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);; + "2.4") + echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');; + "2.5") + echo "$(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth')";; + "2.6") + echo $(grep 'peer-auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);; + "2.7") + echo $(grep 'trusted-ca-file' /var/lib/rancher/k3s/server/db/etcd/config);; + esac +else +# If another database is running, return whatever is required to pass the scan + case $1 in + "1.1.11") + echo "700";; + "1.2.29") + echo "--etcd-certfile AND --etcd-keyfile";; + "2.1") + echo "cert-file AND key-file";; + "2.2") + echo "true";; + "2.3") + echo "false";; + "2.4") + echo "peer-cert-file AND peer-key-file";; + "2.5") + echo "true";; + "2.6") + echo "--peer-auto-tls=false";; + "2.7") + echo "--trusted-ca-file";; + esac +fi + +``` + +**Audit Execution:** + +```bash +./check_for_k3s_etcd.sh 2.1 +``` + +**Expected Result**: + +```console +'cert-file' is present AND 'key-file' is present +``` + +**Returned Value**: + +```console +cert-file: /var/lib/rancher/k3s/server/tls/etcd/server-client.crt key-file: /var/lib/rancher/k3s/server/tls/etcd/server-client.key +``` + +### 2.2 Ensure that the --client-cert-auth argument is set to true (Automated) + + +**Result:** pass + +**Remediation:** +Edit the etcd pod specification file /var/lib/rancher/k3s/server/db/etcd/config on the master +node and set the below parameter. +--client-cert-auth="true" + +**Audit Script:** `check_for_k3s_etcd.sh` + +```bash +#!/bin/bash + +# This script is used to ensure that k3s is actually running etcd (and not other databases like sqlite3) +# before it checks the requirement +set -eE + +handle_error() { + echo "false" +} + +trap 'handle_error' ERR + + +if [[ "$(journalctl -D /var/log/journal -u k3s | grep 'Managed etcd' | grep -v grep | wc -l)" -gt 0 ]]; then + case $1 in + "1.1.11") + echo $(stat -c %a /var/lib/rancher/k3s/server/db/etcd);; + "1.2.29") + echo $(journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'etcd-');; + "2.1") + echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');; + "2.2") + echo "$(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth')";; + "2.3") + echo $(grep 'auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);; + "2.4") + echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');; + "2.5") + echo "$(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth')";; + "2.6") + echo $(grep 'peer-auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);; + "2.7") + echo $(grep 'trusted-ca-file' /var/lib/rancher/k3s/server/db/etcd/config);; + esac +else +# If another database is running, return whatever is required to pass the scan + case $1 in + "1.1.11") + echo "700";; + "1.2.29") + echo "--etcd-certfile AND --etcd-keyfile";; + "2.1") + echo "cert-file AND key-file";; + "2.2") + echo "true";; + "2.3") + echo "false";; + "2.4") + echo "peer-cert-file AND peer-key-file";; + "2.5") + echo "true";; + "2.6") + echo "--peer-auto-tls=false";; + "2.7") + echo "--trusted-ca-file";; + esac +fi + +``` + +**Audit Execution:** + +```bash +./check_for_k3s_etcd.sh 2.2 +``` + +**Expected Result**: + +```console +'--client-cert-auth' is not present +``` + +**Returned Value**: + +```console +client-cert-auth: true +``` + +### 2.3 Ensure that the --auto-tls argument is not set to true (Automated) + + +**Result:** pass + +**Remediation:** +Edit the etcd pod specification file /var/lib/rancher/k3s/server/db/etcd/config on the master +node and either remove the --auto-tls parameter or set it to false. + --auto-tls=false + +**Audit Script:** `check_for_k3s_etcd.sh` + +```bash +#!/bin/bash + +# This script is used to ensure that k3s is actually running etcd (and not other databases like sqlite3) +# before it checks the requirement +set -eE + +handle_error() { + echo "false" +} + +trap 'handle_error' ERR + + +if [[ "$(journalctl -D /var/log/journal -u k3s | grep 'Managed etcd' | grep -v grep | wc -l)" -gt 0 ]]; then + case $1 in + "1.1.11") + echo $(stat -c %a /var/lib/rancher/k3s/server/db/etcd);; + "1.2.29") + echo $(journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'etcd-');; + "2.1") + echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');; + "2.2") + echo "$(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth')";; + "2.3") + echo $(grep 'auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);; + "2.4") + echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');; + "2.5") + echo "$(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth')";; + "2.6") + echo $(grep 'peer-auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);; + "2.7") + echo $(grep 'trusted-ca-file' /var/lib/rancher/k3s/server/db/etcd/config);; + esac +else +# If another database is running, return whatever is required to pass the scan + case $1 in + "1.1.11") + echo "700";; + "1.2.29") + echo "--etcd-certfile AND --etcd-keyfile";; + "2.1") + echo "cert-file AND key-file";; + "2.2") + echo "true";; + "2.3") + echo "false";; + "2.4") + echo "peer-cert-file AND peer-key-file";; + "2.5") + echo "true";; + "2.6") + echo "--peer-auto-tls=false";; + "2.7") + echo "--trusted-ca-file";; + esac +fi + +``` + +**Audit Execution:** + +```bash +./check_for_k3s_etcd.sh 2.3 +``` + +**Expected Result**: + +```console +'--auto-tls' is not present OR '--auto-tls' is not present +``` + +**Returned Value**: + +```console +false +``` + +### 2.4 Ensure that the --peer-cert-file and --peer-key-file arguments are set as appropriate (Automated) + + +**Result:** pass + +**Remediation:** +Follow the etcd service documentation and configure peer TLS encryption as appropriate +for your etcd cluster. +Then, edit the etcd pod specification file /var/lib/rancher/k3s/server/db/etcd/config on the +master node and set the below parameters. +--peer-client-file=
+--peer-key-file=
+ +**Audit Script:** `check_for_k3s_etcd.sh` + +```bash +#!/bin/bash + +# This script is used to ensure that k3s is actually running etcd (and not other databases like sqlite3) +# before it checks the requirement +set -eE + +handle_error() { + echo "false" +} + +trap 'handle_error' ERR + + +if [[ "$(journalctl -D /var/log/journal -u k3s | grep 'Managed etcd' | grep -v grep | wc -l)" -gt 0 ]]; then + case $1 in + "1.1.11") + echo $(stat -c %a /var/lib/rancher/k3s/server/db/etcd);; + "1.2.29") + echo $(journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'etcd-');; + "2.1") + echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');; + "2.2") + echo "$(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth')";; + "2.3") + echo $(grep 'auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);; + "2.4") + echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');; + "2.5") + echo "$(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth')";; + "2.6") + echo $(grep 'peer-auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);; + "2.7") + echo $(grep 'trusted-ca-file' /var/lib/rancher/k3s/server/db/etcd/config);; + esac +else +# If another database is running, return whatever is required to pass the scan + case $1 in + "1.1.11") + echo "700";; + "1.2.29") + echo "--etcd-certfile AND --etcd-keyfile";; + "2.1") + echo "cert-file AND key-file";; + "2.2") + echo "true";; + "2.3") + echo "false";; + "2.4") + echo "peer-cert-file AND peer-key-file";; + "2.5") + echo "true";; + "2.6") + echo "--peer-auto-tls=false";; + "2.7") + echo "--trusted-ca-file";; + esac +fi + +``` + +**Audit Execution:** + +```bash +./check_for_k3s_etcd.sh 2.4 +``` + +**Expected Result**: + +```console +'cert-file' is present AND 'key-file' is present +``` + +**Returned Value**: + +```console +cert-file: /var/lib/rancher/k3s/server/tls/etcd/peer-server-client.crt key-file: /var/lib/rancher/k3s/server/tls/etcd/peer-server-client.key +``` + +### 2.5 Ensure that the --peer-client-cert-auth argument is set to true (Automated) + + +**Result:** pass + +**Remediation:** +Edit the etcd pod specification file /var/lib/rancher/k3s/server/db/etcd/config on the master +node and set the below parameter. +--peer-client-cert-auth=true + +**Audit Script:** `check_for_k3s_etcd.sh` + +```bash +#!/bin/bash + +# This script is used to ensure that k3s is actually running etcd (and not other databases like sqlite3) +# before it checks the requirement +set -eE + +handle_error() { + echo "false" +} + +trap 'handle_error' ERR + + +if [[ "$(journalctl -D /var/log/journal -u k3s | grep 'Managed etcd' | grep -v grep | wc -l)" -gt 0 ]]; then + case $1 in + "1.1.11") + echo $(stat -c %a /var/lib/rancher/k3s/server/db/etcd);; + "1.2.29") + echo $(journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'etcd-');; + "2.1") + echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');; + "2.2") + echo "$(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth')";; + "2.3") + echo $(grep 'auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);; + "2.4") + echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');; + "2.5") + echo "$(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth')";; + "2.6") + echo $(grep 'peer-auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);; + "2.7") + echo $(grep 'trusted-ca-file' /var/lib/rancher/k3s/server/db/etcd/config);; + esac +else +# If another database is running, return whatever is required to pass the scan + case $1 in + "1.1.11") + echo "700";; + "1.2.29") + echo "--etcd-certfile AND --etcd-keyfile";; + "2.1") + echo "cert-file AND key-file";; + "2.2") + echo "true";; + "2.3") + echo "false";; + "2.4") + echo "peer-cert-file AND peer-key-file";; + "2.5") + echo "true";; + "2.6") + echo "--peer-auto-tls=false";; + "2.7") + echo "--trusted-ca-file";; + esac +fi + +``` + +**Audit Execution:** + +```bash +./check_for_k3s_etcd.sh 2.5 +``` + +**Expected Result**: + +```console +'--client-cert-auth' is not present +``` + +**Returned Value**: + +```console +client-cert-auth: true +``` + +### 2.6 Ensure that the --peer-auto-tls argument is not set to true (Automated) + + +**Result:** pass + +**Remediation:** +Edit the etcd pod specification file /var/lib/rancher/k3s/server/db/etcd/config on the master +node and either remove the --peer-auto-tls parameter or set it to false. +--peer-auto-tls=false + +**Audit Script:** `check_for_k3s_etcd.sh` + +```bash +#!/bin/bash + +# This script is used to ensure that k3s is actually running etcd (and not other databases like sqlite3) +# before it checks the requirement +set -eE + +handle_error() { + echo "false" +} + +trap 'handle_error' ERR + + +if [[ "$(journalctl -D /var/log/journal -u k3s | grep 'Managed etcd' | grep -v grep | wc -l)" -gt 0 ]]; then + case $1 in + "1.1.11") + echo $(stat -c %a /var/lib/rancher/k3s/server/db/etcd);; + "1.2.29") + echo $(journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'etcd-');; + "2.1") + echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');; + "2.2") + echo "$(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth')";; + "2.3") + echo $(grep 'auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);; + "2.4") + echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');; + "2.5") + echo "$(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth')";; + "2.6") + echo $(grep 'peer-auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);; + "2.7") + echo $(grep 'trusted-ca-file' /var/lib/rancher/k3s/server/db/etcd/config);; + esac +else +# If another database is running, return whatever is required to pass the scan + case $1 in + "1.1.11") + echo "700";; + "1.2.29") + echo "--etcd-certfile AND --etcd-keyfile";; + "2.1") + echo "cert-file AND key-file";; + "2.2") + echo "true";; + "2.3") + echo "false";; + "2.4") + echo "peer-cert-file AND peer-key-file";; + "2.5") + echo "true";; + "2.6") + echo "--peer-auto-tls=false";; + "2.7") + echo "--trusted-ca-file";; + esac +fi + +``` + +**Audit Execution:** + +```bash +./check_for_k3s_etcd.sh 2.6 +``` + +**Expected Result**: + +```console +'--peer-auto-tls' is not present OR '--peer-auto-tls' is present +``` + +**Returned Value**: + +```console +false +``` + +### 2.7 Ensure that a unique Certificate Authority is used for etcd (Manual) + + +**Result:** pass + +**Remediation:** +[Manual test] +Follow the etcd documentation and create a dedicated certificate authority setup for the +etcd service. +Then, edit the etcd pod specification file /var/lib/rancher/k3s/server/db/etcd/config on the +master node and set the below parameter. +--trusted-ca-file=
+ +**Audit Script:** `check_for_k3s_etcd.sh` + +```bash +#!/bin/bash + +# This script is used to ensure that k3s is actually running etcd (and not other databases like sqlite3) +# before it checks the requirement +set -eE + +handle_error() { + echo "false" +} + +trap 'handle_error' ERR + + +if [[ "$(journalctl -D /var/log/journal -u k3s | grep 'Managed etcd' | grep -v grep | wc -l)" -gt 0 ]]; then + case $1 in + "1.1.11") + echo $(stat -c %a /var/lib/rancher/k3s/server/db/etcd);; + "1.2.29") + echo $(journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'etcd-');; + "2.1") + echo $(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');; + "2.2") + echo "$(grep -A 5 'client-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth')";; + "2.3") + echo $(grep 'auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);; + "2.4") + echo $(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep -E 'cert-file|key-file');; + "2.5") + echo "$(grep -A 5 'peer-transport-security' /var/lib/rancher/k3s/server/db/etcd/config | grep 'client-cert-auth')";; + "2.6") + echo $(grep 'peer-auto-tls' /var/lib/rancher/k3s/server/db/etcd/config);; + "2.7") + echo $(grep 'trusted-ca-file' /var/lib/rancher/k3s/server/db/etcd/config);; + esac +else +# If another database is running, return whatever is required to pass the scan + case $1 in + "1.1.11") + echo "700";; + "1.2.29") + echo "--etcd-certfile AND --etcd-keyfile";; + "2.1") + echo "cert-file AND key-file";; + "2.2") + echo "true";; + "2.3") + echo "false";; + "2.4") + echo "peer-cert-file AND peer-key-file";; + "2.5") + echo "true";; + "2.6") + echo "--peer-auto-tls=false";; + "2.7") + echo "--trusted-ca-file";; + esac +fi + +``` + +**Audit Execution:** + +```bash +./check_for_k3s_etcd.sh 2.7 +``` + +**Expected Result**: + +```console +'trusted-ca-file' is present +``` + +**Returned Value**: + +```console +trusted-ca-file: /var/lib/rancher/k3s/server/tls/etcd/server-ca.crt trusted-ca-file: /var/lib/rancher/k3s/server/tls/etcd/peer-ca.crt +``` + +## 3.1 Authentication and Authorization +### 3.1.1 Client certificate authentication should not be used for users (Manual) + + +**Result:** warn + +**Remediation:** +Alternative mechanisms provided by Kubernetes such as the use of OIDC should be +implemented in place of client certificates. + +## 3.2 Logging +### 3.2.1 Ensure that a minimal audit policy is created (Manual) + + +**Result:** warn + +**Remediation:** +Create an audit policy file for your cluster. + +**Audit:** + +```bash +journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'audit-policy-file' +``` + +### 3.2.2 Ensure that the audit policy covers key security concerns (Manual) + + +**Result:** warn + +**Remediation:** +Consider modification of the audit policy in use on the cluster to include these items, at a +minimum. + +## 4.1 Worker Node Configuration Files +### 4.1.1 Ensure that the kubelet service file permissions are set to 644 or more restrictive (Automated) + **Result:** Not Applicable **Remediation:** -K3s doesn’t launch the kubelet as a service. It is launched and managed by the K3s supervisor process. All configuration is passed to it as command line arguments at run time. +Run the below command (based on the file location on your system) on the each worker node. +For example, +chmod 644 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf +### 4.1.2 Ensure that the kubelet service file ownership is set to root:root (Automated) -#### 4.1.3 -Ensure that the proxy kubeconfig file permissions are set to `644` or more restrictive (Scored) -
-Rationale -The `kube-proxy` kubeconfig file controls various parameters of the `kube-proxy` service in the worker node. You should restrict its file permissions to maintain the integrity of the file. The file should be writable by only the administrators on the system. - -It is possible to run `kube-proxy` with the kubeconfig parameters configured as a Kubernetes ConfigMap instead of a file. In this case, there is no proxy kubeconfig file. -
**Result:** Not Applicable +**Remediation:** +Run the below command (based on the file location on your system) on the each worker node. +For example, +chown root:root /etc/systemd/system/kubelet.service.d/10-kubeadm.conf + +### 4.1.3 If proxy kubeconfig file exists ensure permissions are set to 644 or more restrictive (Manual) + + +**Result:** pass + +**Remediation:** +Run the below command (based on the file location on your system) on the each worker node. +For example, +chmod 644 /var/lib/rancher/k3s/agent/kubeproxy.kubeconfig + **Audit:** -Run the below command on the worker node. ```bash stat -c %a /var/lib/rancher/k3s/agent/kubeproxy.kubeconfig +``` + +**Expected Result**: + +```console +'permissions' is present OR '/var/lib/rancher/k3s/agent/kubeproxy.kubeconfig' is not present +``` + +**Returned Value**: + +```console 644 ``` -Verify that if a file is specified and it exists, the permissions are 644 or more restrictive. +### 4.1.4 Ensure that the proxy kubeconfig file ownership is set to root:root (Manual) + + +**Result:** pass **Remediation:** -K3s runs `kube-proxy` in process and does not use a config file. - - -#### 4.1.4 -Ensure that the proxy kubeconfig file ownership is set to `root:root` (Scored) -
-Rationale -The kubeconfig file for `kube-proxy` controls various parameters for the `kube-proxy` service in the worker node. You should set its file ownership to maintain the integrity of the file. The file should be owned by `root:root`. -
- -**Result:** Not Applicable +Run the below command (based on the file location on your system) on the each worker node. +For example, chown root:root /var/lib/rancher/k3s/agent/kubeproxy.kubeconfig **Audit:** -Run the below command on the master node. ```bash stat -c %U:%G /var/lib/rancher/k3s/agent/kubeproxy.kubeconfig +``` + +**Expected Result**: + +```console +'root:root' is not present OR '/var/lib/rancher/k3s/agent/kubeproxy.kubeconfig' is not present +``` + +**Returned Value**: + +```console root:root ``` -Verify that if a file is specified and it exists, the permissions are 644 or more restrictive. +### 4.1.5 Ensure that the --kubeconfig kubelet.conf file permissions are set to 644 or more restrictive (Automated) + + +**Result:** pass **Remediation:** -K3s runs `kube-proxy` in process and does not use a config file. - - -#### 4.1.5 -Ensure that the kubelet.conf file permissions are set to `644` or more restrictive (Scored) -
-Rationale -The `kubelet.conf` file is the kubeconfig file for the node, and controls various parameters that set the behavior and identity of the worker node. You should restrict its file permissions to maintain the integrity of the file. The file should be writable by only the administrators on the system. -
- -**Result:** Pass +Run the below command (based on the file location on your system) on the each worker node. +For example, +chmod 644 /var/lib/rancher/k3s/server/cred/admin.kubeconfig **Audit:** -Run the below command on the worker node. ```bash stat -c %a /var/lib/rancher/k3s/agent/kubelet.kubeconfig +``` + +**Expected Result**: + +```console +'644' is equal to '644' +``` + +**Returned Value**: + +```console 644 ``` +### 4.1.6 Ensure that the --kubeconfig kubelet.conf file ownership is set to root:root (Manual) + + +**Result:** warn + **Remediation:** -By default, K3s creates `kubelet.kubeconfig` with `644` permissions. No manual remediation needed. - -#### 4.1.6 -Ensure that the kubelet.conf file ownership is set to `root:root` (Scored) -
-Rationale -The `kubelet.conf` file is the kubeconfig file for the node, and controls various parameters that set the behavior and identity of the worker node. You should set its file ownership to maintain the integrity of the file. The file should be owned by `root:root`. -
- -**Result:** Not Applicable +Run the below command (based on the file location on your system) on the each worker node. +For example, +chown root:root /var/lib/rancher/k3s/server/cred/admin.kubeconfig **Audit:** -Run the below command on the master node. ```bash stat -c %U:%G /var/lib/rancher/k3s/agent/kubelet.kubeconfig -root:root ``` +### 4.1.7 Ensure that the certificate authorities file permissions are set to 644 or more restrictive (Manual) + + +**Result:** pass + **Remediation:** -By default, K3s creates `kubelet.kubeconfig` with `root:root` ownership. No manual remediation needed. - - -#### 4.1.7 -Ensure that the certificate authorities file permissions are set to `644` or more restrictive (Scored) -
-Rationale -The certificate authorities file controls the authorities used to validate API requests. You should restrict its file permissions to maintain the integrity of the file. The file should be writable by only the administrators on the system. -
- -**Result:** Pass +Run the following command to modify the file permissions of the +--client-ca-file chmod 644 **Audit:** -Run the below command on the master node. ```bash stat -c %a /var/lib/rancher/k3s/server/tls/server-ca.crt +``` + +**Expected Result**: + +```console +'644' is equal to '644' OR '640' is present OR '600' is present OR '444' is present OR '440' is present OR '400' is present OR '000' is present +``` + +**Returned Value**: + +```console 644 ``` -Verify that the permissions are 644. +### 4.1.8 Ensure that the client certificate authorities file ownership is set to root:root (Manual) + + +**Result:** warn **Remediation:** -By default, K3s creates `/var/lib/rancher/k3s/server/tls/server-ca.crt` with `644` permissions. - - -#### 4.1.8 -Ensure that the client certificate authorities file ownership is set to `root:root` (Scored) -
-Rationale -The certificate authorities file controls the authorities used to validate API requests. You should set its file ownership to maintain the integrity of the file. The file should be owned by `root:root`. -
- -**Result:** Pass +Run the following command to modify the ownership of the --client-ca-file. +chown root:root **Audit:** -Run the below command on the master node. ```bash stat -c %U:%G /var/lib/rancher/k3s/server/tls/client-ca.crt -root:root ``` -**Remediation:** -By default, K3s creates `/var/lib/rancher/k3s/server/tls/client-ca.crt` with `root:root` ownership. +### 4.1.9 Ensure that the kubelet --config configuration file has permissions set to 644 or more restrictive (Automated) -#### 4.1.9 -Ensure that the kubelet configuration file has permissions set to `644` or more restrictive (Scored) -
-Rationale -The kubelet reads various parameters, including security settings, from a config file specified by the `--config` argument. If this file is specified you should restrict its file permissions to maintain the integrity of the file. The file should be writable by only the administrators on the system. -
- **Result:** Not Applicable **Remediation:** -K3s doesn’t require or maintain a configuration file for the kubelet process. All configuration is passed to it as command line arguments at run time. +Run the following command (using the config file location identified in the Audit step) +chmod 644 /var/lib/kubelet/config.yaml +### 4.1.10 Ensure that the kubelet --config configuration file ownership is set to root:root (Automated) -#### 4.1.10 -Ensure that the kubelet configuration file ownership is set to `root:root` (Scored) -
-Rationale -The kubelet reads various parameters, including security settings, from a config file specified by the `--config` argument. If this file is specified you should restrict its file permissions to maintain the integrity of the file. The file should be owned by `root:root`. -
**Result:** Not Applicable **Remediation:** -K3s doesn’t require or maintain a configuration file for the kubelet process. All configuration is passed to it as command line arguments at run time. +Run the following command (using the config file location identified in the Audit step) +chown root:root /var/lib/kubelet/config.yaml + +## 4.2 Kubelet +### 4.2.1 Ensure that the anonymous-auth argument is set to false (Automated) -### 4.2 Kubelet -This section contains recommendations for kubelet configuration. - - -#### 4.2.1 -Ensure that the `--anonymous-auth` argument is set to false (Scored) -
-Rationale -When enabled, requests that are not rejected by other configured authentication methods are treated as anonymous requests. These requests are then served by the Kubelet server. You should rely on authentication to authorize access and disallow anonymous requests. -
- -**Result:** Pass - -**Audit:** -Run the below command on the master node. - -```bash -journalctl -u k3s | grep "Running kube-apiserver" | tail -n1 | grep "anonymous-auth" -``` - -Verify that the value for `--anonymous-auth` is false. +**Result:** pass **Remediation:** -By default, K3s starts kubelet with `--anonymous-auth` set to false. No manual remediation needed. - -#### 4.2.2 -Ensure that the `--authorization-mode` argument is not set to `AlwaysAllow` (Scored) -
-Rationale -Kubelets, by default, allow all authenticated requests (even anonymous ones) without needing explicit authorization checks from the apiserver. You should restrict this behavior and only allow explicitly authorized requests. -
- -**Result:** Pass +If using a Kubelet config file, edit the file to set authentication: anonymous: enabled to +false. +If using executable arguments, edit the kubelet service file +/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and +set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable. +--anonymous-auth=false +Based on your system, restart the kubelet service. For example: +systemctl daemon-reload +systemctl restart kubelet.service **Audit:** -Run the below command on the master node. ```bash -journalctl -u k3s | grep "Running kube-apiserver" | tail -n1 | grep "authorization-mode" +journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'anonymous-auth' | grep -v grep ``` -Verify that `AlwaysAllow` is not present. +**Expected Result**: + +```console +'false' is equal to 'false' +``` + +**Returned Value**: + +```console +Feb 21 23:13:24 k3s[5223]: time="2022-02-21T23:13:24.847339487Z" level=info msg="Running kube-apiserver --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit-log --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --enable-admission-plugins=NodeRestriction,PodSecurityPolicy,NamespaceLifecycle,ServiceAccount --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --insecure-port=0 --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key" +``` + +### 4.2.2 Ensure that the --authorization-mode argument is not set to AlwaysAllow (Automated) + + +**Result:** pass **Remediation:** -K3s starts kubelet with `Webhook` as the value for the `--authorization-mode` argument. No manual remediation needed. - - -#### 4.2.3 -Ensure that the `--client-ca-file` argument is set as appropriate (Scored) -
-Rationale -The connections from the apiserver to the kubelet are used for fetching logs for pods, attaching (through kubectl) to running pods, and using the kubelet’s port-forwarding functionality. These connections terminate at the kubelet’s HTTPS endpoint. By default, the apiserver does not verify the kubelet’s serving certificate, which makes the connection subject to man-in-the-middle attacks, and unsafe to run over untrusted and/or public networks. Enabling Kubelet certificate authentication ensures that the apiserver could authenticate the Kubelet before submitting any requests. -
- -**Result:** Pass +If using a Kubelet config file, edit the file to set authorization: mode to Webhook. If +using executable arguments, edit the kubelet service file +/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and +set the below parameter in KUBELET_AUTHZ_ARGS variable. +--authorization-mode=Webhook +Based on your system, restart the kubelet service. For example: +systemctl daemon-reload +systemctl restart kubelet.service **Audit:** -Run the below command on the master node. ```bash -journalctl -u k3s | grep "Running kube-apiserver" | tail -n1 | grep "client-ca-file" +journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver' | tail -n1 | grep 'authorization-mode' | grep -v grep ``` -Verify that the `--client-ca-file` argument has a ca file associated. +**Expected Result**: + +```console +'Node,RBAC' not have 'AlwaysAllow' +``` + +**Returned Value**: + +```console +Feb 21 23:13:24 k3s[5223]: time="2022-02-21T23:13:24.847339487Z" level=info msg="Running kube-apiserver --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit-log --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --enable-admission-plugins=NodeRestriction,PodSecurityPolicy,NamespaceLifecycle,ServiceAccount --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --insecure-port=0 --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key" +``` + +### 4.2.3 Ensure that the --client-ca-file argument is set as appropriate (Automated) + + +**Result:** pass **Remediation:** -By default, K3s starts the kubelet process with the `--client-ca-file`. No manual remediation needed. - - -#### 4.2.4 -Ensure that the `--read-only-port` argument is set to `0` (Scored) -
-Rationale -The Kubelet process provides a read-only API in addition to the main Kubelet API. Unauthenticated access is provided to this read-only API which could possibly retrieve potentially sensitive information about the cluster. -
- -**Result:** Pass +If using a Kubelet config file, edit the file to set authentication: x509: clientCAFile to +the location of the client CA file. +If using command line arguments, edit the kubelet service file +/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and +set the below parameter in KUBELET_AUTHZ_ARGS variable. +--client-ca-file= +Based on your system, restart the kubelet service. For example: +systemctl daemon-reload +systemctl restart kubelet.service **Audit:** -Run the below command on the master node. ```bash -journalctl -u k3s | grep "Running kubelet" | tail -n1 | grep "read-only-port" +journalctl -D /var/log/journal -u k3s | grep 'Running kube-apiserver'| tail -n1 | grep 'client-ca-file' | grep -v grep ``` -Verify that the `--read-only-port` argument is set to 0. + +**Expected Result**: + +```console +'--client-ca-file' is present +``` + +**Returned Value**: + +```console +Feb 21 23:13:24 k3s[5223]: time="2022-02-21T23:13:24.847339487Z" level=info msg="Running kube-apiserver --advertise-port=6443 --allow-privileged=true --anonymous-auth=false --api-audiences=https://kubernetes.default.svc.cluster.local,k3s --audit-log-maxage=30 --audit-log-maxbackup=10 --audit-log-maxsize=100 --audit-log-path=/var/lib/rancher/k3s/server/logs/audit-log --authorization-mode=Node,RBAC --bind-address=127.0.0.1 --cert-dir=/var/lib/rancher/k3s/server/tls/temporary-certs --client-ca-file=/var/lib/rancher/k3s/server/tls/client-ca.crt --enable-admission-plugins=NodeRestriction,PodSecurityPolicy,NamespaceLifecycle,ServiceAccount --encryption-provider-config=/var/lib/rancher/k3s/server/cred/encryption-config.json --etcd-cafile=/var/lib/rancher/k3s/server/tls/etcd/server-ca.crt --etcd-certfile=/var/lib/rancher/k3s/server/tls/etcd/client.crt --etcd-keyfile=/var/lib/rancher/k3s/server/tls/etcd/client.key --etcd-servers=https://127.0.0.1:2379 --insecure-port=0 --kubelet-certificate-authority=/var/lib/rancher/k3s/server/tls/server-ca.crt --kubelet-client-certificate=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.crt --kubelet-client-key=/var/lib/rancher/k3s/server/tls/client-kube-apiserver.key --profiling=false --proxy-client-cert-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.crt --proxy-client-key-file=/var/lib/rancher/k3s/server/tls/client-auth-proxy.key --request-timeout=300s --requestheader-allowed-names=system:auth-proxy --requestheader-client-ca-file=/var/lib/rancher/k3s/server/tls/request-header-ca.crt --requestheader-extra-headers-prefix=X-Remote-Extra- --requestheader-group-headers=X-Remote-Group --requestheader-username-headers=X-Remote-User --secure-port=6444 --service-account-issuer=https://kubernetes.default.svc.cluster.local --service-account-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-account-lookup=true --service-account-signing-key-file=/var/lib/rancher/k3s/server/tls/service.key --service-cluster-ip-range=10.43.0.0/16 --service-node-port-range=30000-32767 --storage-backend=etcd3 --tls-cert-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.crt --tls-private-key-file=/var/lib/rancher/k3s/server/tls/serving-kube-apiserver.key" +``` + +### 4.2.4 Ensure that the --read-only-port argument is set to 0 (Manual) + + +**Result:** warn **Remediation:** -By default, K3s starts the kubelet process with the `--read-only-port` argument set to `0`. - - -#### 4.2.5 -Ensure that the `--streaming-connection-idle-timeout` argument is not set to `0` (Scored) -
-Rationale -Setting idle timeouts ensures that you are protected against Denial-of-Service attacks, inactive connections and running out of ephemeral ports. - -**Note:** By default, `--streaming-connection-idle-timeout` is set to 4 hours which might be too high for your environment. Setting this as appropriate would additionally ensure that such streaming connections are timed out after serving legitimate use cases. -
- -**Result:** Pass +If using a Kubelet config file, edit the file to set readOnlyPort to 0. +If using command line arguments, edit the kubelet service file +/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and +set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable. +--read-only-port=0 +Based on your system, restart the kubelet service. For example: +systemctl daemon-reload +systemctl restart kubelet.service **Audit:** -Run the below command on the master node. ```bash -journalctl -u k3s | grep "Running kubelet" | tail -n1 | grep "streaming-connection-idle-timeout" +journalctl -D /var/log/journal -u k3s | grep 'Running kubelet' | tail -n1 | grep 'read-only-port' ``` -Verify that there's nothing returned. +### 4.2.5 Ensure that the --streaming-connection-idle-timeout argument is not set to 0 (Manual) + + +**Result:** warn **Remediation:** -By default, K3s does not set `--streaming-connection-idle-timeout` when starting kubelet. - - -#### 4.2.6 -Ensure that the `--protect-kernel-defaults` argument is set to `true` (Scored) -
-Rationale -Kernel parameters are usually tuned and hardened by the system administrators before putting the systems into production. These parameters protect the kernel and the system. Your kubelet kernel defaults that rely on such parameters should be appropriately set to match the desired secured system state. Ignoring this could potentially lead to running pods with undesired kernel behavior. -
- -**Result:** Pass +If using a Kubelet config file, edit the file to set streamingConnectionIdleTimeout to a +value other than 0. +If using command line arguments, edit the kubelet service file +/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and +set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable. +--streaming-connection-idle-timeout=5m +Based on your system, restart the kubelet service. For example: +systemctl daemon-reload +systemctl restart kubelet.service **Audit:** -Run the below command on the master node. ```bash -journalctl -u k3s | grep "Running kubelet" | tail -n1 | grep "protect-kernel-defaults" +journalctl -D /var/log/journal -u k3s | grep 'Running kubelet' | tail -n1 | grep 'streaming-connection-idle-timeout' ``` +### 4.2.6 Ensure that the --protect-kernel-defaults argument is set to true (Automated) + + +**Result:** pass + **Remediation:** -K3s server needs to be started with the following, `--protect-kernel-defaults=true`. - - -#### 4.2.7 -Ensure that the `--make-iptables-util-chains` argument is set to `true` (Scored) -
-Rationale -Kubelets can automatically manage the required changes to iptables based on how you choose your networking options for the pods. It is recommended to let kubelets manage the changes to iptables. This ensures that the iptables configuration remains in sync with pods networking configuration. Manually configuring iptables with dynamic pod network configuration changes might hamper the communication between pods/containers and to the outside world. You might have iptables rules too restrictive or too open. -
- -**Result:** Pass +If using a Kubelet config file, edit the file to set protectKernelDefaults: true. +If using command line arguments, edit the kubelet service file +/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and +set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable. +--protect-kernel-defaults=true +Based on your system, restart the kubelet service. For example: +systemctl daemon-reload +systemctl restart kubelet.service **Audit:** -Run the below command on the master node. ```bash -journalctl -u k3s | grep "Running kubelet" | tail -n1 | grep "make-iptables-util-chains" +journalctl -D /var/log/journal -u k3s | grep 'Running kubelet' | tail -n1 | grep 'protect-kernel-defaults' ``` -Verify there are no results returned. +**Expected Result**: + +```console +'true' is equal to 'true' +``` + +**Returned Value**: + +```console +Feb 21 23:13:32 k3s[5223]: time="2022-02-21T23:13:32.581127632Z" level=info msg="Running kubelet --address=0.0.0.0 --anonymous-auth=false --authentication-token-webhook=true --authorization-mode=Webhook --cgroup-driver=cgroupfs --client-ca-file=/var/lib/rancher/k3s/agent/client-ca.crt --cloud-provider=external --cluster-dns=10.43.0.10 --cluster-domain=cluster.local --cni-bin-dir=/var/lib/rancher/k3s/data/9de9bfcf367b723ef0ac73dd91761165a4a8ad11ad16a758d3a996264e60c612/bin --cni-conf-dir=/var/lib/rancher/k3s/agent/etc/cni/net.d --container-runtime-endpoint=unix:///run/k3s/containerd/containerd.sock --container-runtime=remote --containerd=/run/k3s/containerd/containerd.sock --eviction-hard=imagefs.available<5%,nodefs.available<5% --eviction-minimum-reclaim=imagefs.available=10%,nodefs.available=10% --fail-swap-on=false --healthz-bind-address=127.0.0.1 --hostname-override= --kubeconfig=/var/lib/rancher/k3s/agent/kubelet.kubeconfig --make-iptables-util-chains=true --node-labels= --pod-manifest-path=/var/lib/rancher/k3s/agent/pod-manifests --protect-kernel-defaults=true --read-only-port=0 --resolv-conf=/run/systemd/resolve/resolv.conf --serialize-image-pulls=false --streaming-connection-idle-timeout=5m --tls-cert-file=/var/lib/rancher/k3s/agent/serving-kubelet.crt --tls-private-key-file=/var/lib/rancher/k3s/agent/serving-kubelet.key" +``` + +### 4.2.7 Ensure that the --make-iptables-util-chains argument is set to true (Automated) + + +**Result:** pass **Remediation:** -K3s server needs to be run with the following, `--kube-apiserver-arg='make-iptables-util-chains=true'`. +If using a Kubelet config file, edit the file to set makeIPTablesUtilChains: true. +If using command line arguments, edit the kubelet service file +/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and +remove the --make-iptables-util-chains argument from the +KUBELET_SYSTEM_PODS_ARGS variable. +Based on your system, restart the kubelet service. For example: +systemctl daemon-reload +systemctl restart kubelet.service +**Audit:** + +```bash +journalctl -D /var/log/journal -u k3s | grep 'Running kubelet' | tail -n1 | grep 'make-iptables-util-chains' +``` + +**Expected Result**: + +```console +'true' is equal to 'true' OR '--make-iptables-util-chains' is not present +``` + +**Returned Value**: + +```console +Feb 21 23:13:32 k3s[5223]: time="2022-02-21T23:13:32.581127632Z" level=info msg="Running kubelet --address=0.0.0.0 --anonymous-auth=false --authentication-token-webhook=true --authorization-mode=Webhook --cgroup-driver=cgroupfs --client-ca-file=/var/lib/rancher/k3s/agent/client-ca.crt --cloud-provider=external --cluster-dns=10.43.0.10 --cluster-domain=cluster.local --cni-bin-dir=/var/lib/rancher/k3s/data/9de9bfcf367b723ef0ac73dd91761165a4a8ad11ad16a758d3a996264e60c612/bin --cni-conf-dir=/var/lib/rancher/k3s/agent/etc/cni/net.d --container-runtime-endpoint=unix:///run/k3s/containerd/containerd.sock --container-runtime=remote --containerd=/run/k3s/containerd/containerd.sock --eviction-hard=imagefs.available<5%,nodefs.available<5% --eviction-minimum-reclaim=imagefs.available=10%,nodefs.available=10% --fail-swap-on=false --healthz-bind-address=127.0.0.1 --hostname-override= --kubeconfig=/var/lib/rancher/k3s/agent/kubelet.kubeconfig --make-iptables-util-chains=true --node-labels= --pod-manifest-path=/var/lib/rancher/k3s/agent/pod-manifests --protect-kernel-defaults=true --read-only-port=0 --resolv-conf=/run/systemd/resolve/resolv.conf --serialize-image-pulls=false --streaming-connection-idle-timeout=5m --tls-cert-file=/var/lib/rancher/k3s/agent/serving-kubelet.crt --tls-private-key-file=/var/lib/rancher/k3s/agent/serving-kubelet.key" +``` + +### 4.2.8 Ensure that the --hostname-override argument is not set (Manual) -#### 4.2.8 -Ensure that the `--hostname-override` argument is not set (Not Scored) -
-Rationale -Overriding hostnames could potentially break TLS setup between the kubelet and the apiserver. Additionally, with overridden hostnames, it becomes increasingly difficult to associate logs with a particular node and process them for security analytics. Hence, you should setup your kubelet nodes with resolvable FQDNs and avoid overriding the hostnames with IPs. -
**Result:** Not Applicable **Remediation:** -K3s does set this parameter for each host, but K3s also manages all certificates in the cluster. It ensures the hostname-override is included as a subject alternative name (SAN) in the kubelet's certificate. +Edit the kubelet service file /etc/systemd/system/kubelet.service.d/10-kubeadm.conf +on each worker node and remove the --hostname-override argument from the +KUBELET_SYSTEM_PODS_ARGS variable. +Based on your system, restart the kubelet service. For example: +systemctl daemon-reload +systemctl restart kubelet.service + +### 4.2.9 Ensure that the --event-qps argument is set to 0 or a level which ensures appropriate event capture (Manual) -#### 4.2.9 -Ensure that the `--event-qps` argument is set to 0 or a level which ensures appropriate event capture (Not Scored) -
-Rationale -It is important to capture all events and not restrict event creation. Events are an important source of security information and analytics that ensure that your environment is consistently monitored using the event data. -
- -**Result:** Not Scored - Operator Dependent +**Result:** warn **Remediation:** -See CIS Benchmark guide for further details on configuring this. - -#### 4.2.10 -Ensure that the `--tls-cert-file` and `--tls-private-key-file` arguments are set as appropriate (Scored) -
-Rationale -Kubelet communication contains sensitive parameters that should remain encrypted in transit. Configure the Kubelets to serve only HTTPS traffic. -
- -**Result:** Pass +If using a Kubelet config file, edit the file to set eventRecordQPS: to an appropriate level. +If using command line arguments, edit the kubelet service file +/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and +set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable. +Based on your system, restart the kubelet service. For example: +systemctl daemon-reload +systemctl restart kubelet.service **Audit:** -Run the below command on the master node. ```bash -journalctl -u k3s | grep "Running kubelet" | tail -n1 | grep -E 'tls-cert-file|tls-private-key-file' +/bin/ps -fC containerd ``` -Verify the `--tls-cert-file` and `--tls-private-key-file` arguments are present and set appropriately. +### 4.2.10 Ensure that the --tls-cert-file and --tls-private-key-file arguments are set as appropriate (Manual) + + +**Result:** warn **Remediation:** -By default, K3s sets the `--tls-cert-file` and `--tls-private-key-file` arguments when executing the kubelet process. +If using a Kubelet config file, edit the file to set tlsCertFile to the location +of the certificate file to use to identify this Kubelet, and tlsPrivateKeyFile +to the location of the corresponding private key file. +If using command line arguments, edit the kubelet service file +/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and +set the below parameters in KUBELET_CERTIFICATE_ARGS variable. +--tls-cert-file= +--tls-private-key-file= +Based on your system, restart the kubelet service. For example: +systemctl daemon-reload +systemctl restart kubelet.service +**Audit:** -#### 4.2.11 -Ensure that the `--rotate-certificates` argument is not set to `false` (Scored) -
-Rationale +```bash +journalctl -D /var/log/journal -u k3s | grep 'Running kubelet' | tail -n1 +``` -The `--rotate-certificates` setting causes the kubelet to rotate its client certificates by creating new CSRs as its existing credentials expire. This automated periodic rotation ensures that there is no downtime due to expired certificates and thus addressing availability in the CIA security triad. +### 4.2.11 Ensure that the --rotate-certificates argument is not set to false (Manual) -**Note:** This recommendation only applies if you let kubelets get their certificates from the API server. In case your kubelet certificates come from an outside authority/tool (e.g. Vault) then you need to take care of rotation yourself. - -**Note:**This feature also requires the `RotateKubeletClientCertificate` feature gate to be enabled (which is the default since Kubernetes v1.7) -
**Result:** Not Applicable **Remediation:** -By default, K3s implements its own logic for certificate generation and rotation. +If using a Kubelet config file, edit the file to add the line rotateCertificates: true or +remove it altogether to use the default value. +If using command line arguments, edit the kubelet service file +/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and +remove --rotate-certificates=false argument from the KUBELET_CERTIFICATE_ARGS +variable. +Based on your system, restart the kubelet service. For example: +systemctl daemon-reload +systemctl restart kubelet.service +### 4.2.12 Verify that the RotateKubeletServerCertificate argument is set to true (Manual) -#### 4.2.12 -Ensure that the `RotateKubeletServerCertificate` argument is set to `true` (Scored) -
-Rationale -`RotateKubeletServerCertificate` causes the kubelet to both request a serving certificate after bootstrapping its client credentials and rotate the certificate as its existing credentials expire. This automated periodic rotation ensures that there are no downtimes due to expired certificates and thus addressing availability in the CIA security triad. - -Note: This recommendation only applies if you let kubelets get their certificates from the API server. In case your kubelet certificates come from an outside authority/tool (e.g. Vault) then you need to take care of rotation yourself. -
**Result:** Not Applicable **Remediation:** -By default, K3s implements its own logic for certificate generation and rotation. +Edit the kubelet service file /etc/systemd/system/kubelet.service.d/10-kubeadm.conf +on each worker node and set the below parameter in KUBELET_CERTIFICATE_ARGS variable. +--feature-gates=RotateKubeletServerCertificate=true +Based on your system, restart the kubelet service. For example: +systemctl daemon-reload +systemctl restart kubelet.service + +### 4.2.13 Ensure that the Kubelet only makes use of Strong Cryptographic Ciphers (Manual) -#### 4.2.13 -Ensure that the Kubelet only makes use of Strong Cryptographic Ciphers (Not Scored) -
-Rationale -TLS ciphers have had a number of known vulnerabilities and weaknesses, which can reduce the protection provided by them. By default Kubernetes supports a number of TLS ciphersuites including some that have security concerns, weakening the protection provided. -
- -**Result:** Not Scored - Operator Dependent +**Result:** warn **Remediation:** -Configuration of the parameter is dependent on your use case. Please see the CIS Kubernetes Benchmark for suggestions on configuring this for your use-case. - - -## 5 Kubernetes Policies - - -### 5.1 RBAC and Service Accounts - - -#### 5.1.1 -Ensure that the cluster-admin role is only used where required (Not Scored) -
-Rationale -Kubernetes provides a set of default roles where RBAC is used. Some of these roles such as `cluster-admin` provide wide-ranging privileges which should only be applied where absolutely necessary. Roles such as `cluster-admin` allow super-user access to perform any action on any resource. When used in a `ClusterRoleBinding`, it gives full control over every resource in the cluster and in all namespaces. When used in a `RoleBinding`, it gives full control over every resource in the rolebinding's namespace, including the namespace itself. -
- -**Result:** Pass - -**Remediation:** -K3s does not make inappropriate use of the cluster-admin role. Operators must audit their workloads of additional usage. See the CIS Benchmark guide for more details. - -#### 5.1.2 -Minimize access to secrets (Not Scored) -
-Rationale -Inappropriate access to secrets stored within the Kubernetes cluster can allow for an attacker to gain additional access to the Kubernetes cluster or external resources whose credentials are stored as secrets. -
- -**Result:** Not Scored - Operator Dependent - -**Remediation:** -K3s limits its use of secrets for the system components appropriately, but operators must audit the use of secrets by their workloads. See the CIS Benchmark guide for more details. - -#### 5.1.3 -Minimize wildcard use in Roles and ClusterRoles (Not Scored) -
-Rationale -The principle of least privilege recommends that users are provided only the access required for their role and nothing more. The use of wildcard rights grants is likely to provide excessive rights to the Kubernetes API. -
- -**Result:** Not Scored - Operator Dependent +If using a Kubelet config file, edit the file to set TLSCipherSuites: to +TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 +or to a subset of these values. +If using executable arguments, edit the kubelet service file +/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and +set the --tls-cipher-suites parameter as follows, or to a subset of these values. +--tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 +Based on your system, restart the kubelet service. For example: +systemctl daemon-reload +systemctl restart kubelet.service **Audit:** -Run the below command on the master node. ```bash -# Retrieve the roles defined across each namespaces in the cluster and review for wildcards -kubectl get roles --all-namespaces -o yaml - -# Retrieve the cluster roles defined in the cluster and review for wildcards -kubectl get clusterroles -o yaml +/bin/ps -fC containerd ``` -Verify that there are not wildcards in use. +## 5.1 RBAC and Service Accounts +### 5.1.1 Ensure that the cluster-admin role is only used where required (Manual) + + +**Result:** warn **Remediation:** -Operators should review their workloads for proper role usage. See the CIS Benchmark guide for more details. +Identify all clusterrolebindings to the cluster-admin role. Check if they are used and +if they need this role or if they could use a role with fewer privileges. +Where possible, first bind users to a lower privileged role and then remove the +clusterrolebinding to the cluster-admin role : +kubectl delete clusterrolebinding [name] -#### 5.1.4 -Minimize access to create pods (Not Scored) -
-Rationale -The ability to create pods in a cluster opens up possibilities for privilege escalation and should be restricted, where possible. -
+### 5.1.2 Minimize access to secrets (Manual) -**Result:** Not Scored - Operator Dependent + +**Result:** warn **Remediation:** -Operators should review who has access to create pods in their cluster. See the CIS Benchmark guide for more details. +Where possible, remove get, list and watch access to secret objects in the cluster. -#### 5.1.5 -Ensure that default service accounts are not actively used. (Scored) -
-Rationale -Kubernetes provides a default service account which is used by cluster workloads where no specific service account is assigned to the pod. +### 5.1.3 Minimize wildcard use in Roles and ClusterRoles (Manual) -Where access to the Kubernetes API from a pod is required, a specific service account should be created for that pod, and rights granted to that service account. -The default service account should be configured such that it does not provide a service account token and does not have any explicit rights assignments. -
+**Result:** warn -**Result:** Fail. Currently requires operator intervention See the [Hardening Guide]({{}}/k3s/latest/en/security/hardening_guide) for details. +**Remediation:** +Where possible replace any use of wildcards in clusterroles and roles with specific +objects or actions. -**Audit:** -For each namespace in the cluster, review the rights assigned to the default service account and ensure that it has no roles or cluster roles bound to it apart from the defaults. Additionally ensure that the automountServiceAccountToken: false setting is in place for each default service account. +### 5.1.4 Minimize access to create pods (Manual) + + +**Result:** warn + +**Remediation:** +Where possible, remove create access to pod objects in the cluster. + +### 5.1.5 Ensure that default service accounts are not actively used. (Manual) + + +**Result:** warn **Remediation:** Create explicit service accounts wherever a Kubernetes workload requires specific access to the Kubernetes API server. Modify the configuration of each default service account to include this value - -``` bash automountServiceAccountToken: false -``` + +### 5.1.6 Ensure that Service Account Tokens are only mounted where necessary (Manual) -#### 5.1.6 -Ensure that Service Account Tokens are only mounted where necessary (Not Scored) -
-Rationale -Mounting service account tokens inside pods can provide an avenue for privilege escalation attacks where an attacker is able to compromise a single pod in the cluster. - -Avoiding mounting these tokens removes this attack avenue. -
- -**Result:** Not Scored - Operator Dependent +**Result:** warn **Remediation:** -The pods launched by K3s are part of the control plane and generally need access to communicate with the API server, thus this control does not apply to them. Operators should review their workloads and take steps to modify the definition of pods and service accounts which do not need to mount service account tokens to disable it. +Modify the definition of pods and service accounts which do not need to mount service +account tokens to disable it. -### 5.2 Pod Security Policies +## 5.2 Pod Security Policies +### 5.2.1 Minimize the admission of privileged containers (Manual) -#### 5.2.1 -Minimize the admission of containers wishing to share the host process ID namespace (Scored) -
-Rationale -Privileged containers have access to all Linux Kernel capabilities and devices. A container running with full privileges can do almost everything that the host can do. This flag exists to allow special use-cases, like manipulating the network stack and accessing devices. +**Result:** warn -There should be at least one PodSecurityPolicy (PSP) defined which does not permit privileged containers. - -If you need to run privileged containers, this should be defined in a separate PSP and you should carefully check RBAC controls to ensure that only limited service accounts and users are given permission to access that PSP. -
- -**Result:** Pass +**Remediation:** +Create a PSP as described in the Kubernetes documentation, ensuring that +the .spec.privileged field is omitted or set to false. **Audit:** -Run the below command on the master node. ```bash -kubectl describe psp | grep MustRunAsNonRoot +kubectl describe psp global-restricted-psp | grep MustRunAsNonRoot ``` -Verify that the result is `Rule: MustRunAsNonRoot`. +### 5.2.2 Minimize the admission of containers wishing to share the host process ID namespace (Manual) + + +**Result:** pass **Remediation:** -An operator should apply a PodSecurityPolicy that sets the `Rule` value to `MustRunAsNonRoot`. An example of this can be found in the [Hardening Guide](../hardening_guide/). - - -#### 5.2.2 -Minimize the admission of containers wishing to share the host process ID namespace (Scored) -
-Rationale -A container running in the host's PID namespace can inspect processes running outside the container. If the container also has access to ptrace capabilities this can be used to escalate privileges outside of the container. - -There should be at least one PodSecurityPolicy (PSP) defined which does not permit containers to share the host PID namespace. - -If you need to run containers which require hostPID, this should be defined in a separate PSP and you should carefully check RBAC controls to ensure that only limited service accounts and users are given permission to access that PSP. -
- -**Result:** Pass +Create a PSP as described in the Kubernetes documentation, ensuring that the +.spec.hostPID field is omitted or set to false. **Audit:** -Run the below command on the master node. ```bash kubectl get psp -o json | jq .items[] | jq -r 'select((.spec.hostPID == null) or (.spec.hostPID == false))' | jq .metadata.name | wc -l | xargs -I {} echo '--count={}' ``` -Verify that the returned count is 1. +**Expected Result**: + +```console +1 is greater than 0 +``` + +**Returned Value**: + +```console +--count=1 +``` + +### 5.2.3 Minimize the admission of containers wishing to share the host IPC namespace (Manual) + + +**Result:** pass **Remediation:** -An operator should apply a PodSecurityPolicy that sets the `hostPID` value to false explicitly for the PSP it creates. An example of this can be found in the [Hardening Guide](../hardening_guide/). - - -#### 5.2.3 -Minimize the admission of containers wishing to share the host IPC namespace (Scored) -
-Rationale - -A container running in the host's IPC namespace can use IPC to interact with processes outside the container. - -There should be at least one PodSecurityPolicy (PSP) defined which does not permit containers to share the host IPC namespace. - -If you have a requirement to containers which require hostIPC, this should be defined in a separate PSP and you should carefully check RBAC controls to ensure that only limited service accounts and users are given permission to access that PSP. -
- -**Result:** Pass +Create a PSP as described in the Kubernetes documentation, ensuring that the +.spec.hostIPC field is omitted or set to false. **Audit:** -Run the below command on the master node. ```bash kubectl get psp -o json | jq .items[] | jq -r 'select((.spec.hostIPC == null) or (.spec.hostIPC == false))' | jq .metadata.name | wc -l | xargs -I {} echo '--count={}' ``` -Verify that the returned count is 1. +**Expected Result**: + +```console +1 is greater than 0 +``` + +**Returned Value**: + +```console +--count=1 +``` + +### 5.2.4 Minimize the admission of containers wishing to share the host network namespace (Manual) + + +**Result:** pass **Remediation:** -An operator should apply a PodSecurityPolicy that sets the `HostIPC` value to false explicitly for the PSP it creates. An example of this can be found in the [Hardening Guide](../hardening_guide/). - - -#### 5.2.4 -Minimize the admission of containers wishing to share the host network namespace (Scored) -
-Rationale -A container running in the host's network namespace could access the local loopback device, and could access network traffic to and from other pods. - -There should be at least one PodSecurityPolicy (PSP) defined which does not permit containers to share the host network namespace. - -If you have need to run containers which require hostNetwork, this should be defined in a separate PSP and you should carefully check RBAC controls to ensure that only limited service accounts and users are given permission to access that PSP. -
- -**Result:** Pass +Create a PSP as described in the Kubernetes documentation, ensuring that the +.spec.hostNetwork field is omitted or set to false. **Audit:** -Run the below command on the master node. ```bash kubectl get psp -o json | jq .items[] | jq -r 'select((.spec.hostNetwork == null) or (.spec.hostNetwork == false))' | jq .metadata.name | wc -l | xargs -I {} echo '--count={}' ``` -Verify that the returned count is 1. +**Expected Result**: + +```console +1 is greater than 0 +``` + +**Returned Value**: + +```console +--count=1 +``` + +### 5.2.5 Minimize the admission of containers with allowPrivilegeEscalation (Manual) + + +**Result:** pass **Remediation:** -An operator should apply a PodSecurityPolicy that sets the `HostNetwork` value to false explicitly for the PSP it creates. An example of this can be found in the [Hardening Guide](../hardening_guide/). - - -#### 5.2.5 -Minimize the admission of containers with `allowPrivilegeEscalation` (Scored) -
-Rationale -A container running with the `allowPrivilegeEscalation` flag set to true may have processes that can gain more privileges than their parent. - -There should be at least one PodSecurityPolicy (PSP) defined which does not permit containers to allow privilege escalation. The option exists (and is defaulted to true) to permit setuid binaries to run. - -If you have need to run containers which use setuid binaries or require privilege escalation, this should be defined in a separate PSP and you should carefully check RBAC controls to ensure that only limited service accounts and users are given permission to access that PSP. -
- -**Result:** Pass +Create a PSP as described in the Kubernetes documentation, ensuring that the +.spec.allowPrivilegeEscalation field is omitted or set to false. **Audit:** -Run the below command on the master node. ```bash kubectl get psp -o json | jq .items[] | jq -r 'select((.spec.allowPrivilegeEscalation == null) or (.spec.allowPrivilegeEscalation == false))' | jq .metadata.name | wc -l | xargs -I {} echo '--count={}' ``` -Verify that the returned count is 1. +**Expected Result**: + +```console +1 is greater than 0 +``` + +**Returned Value**: + +```console +--count=1 +``` + +### 5.2.6 Minimize the admission of root containers (Manual) + + +**Result:** pass **Remediation:** -An operator should apply a PodSecurityPolicy that sets the `allowPrivilegeEscalation` value to false explicitly for the PSP it creates. An example of this can be found in the [Hardening Guide](../hardening_guide/). - - -#### 5.2.6 -Minimize the admission of root containers (Not Scored) -
-Rationale -Containers may run as any Linux user. Containers which run as the root user, whilst constrained by Container Runtime security features still have an escalated likelihood of container breakout. - -Ideally, all containers should run as a defined non-UID 0 user. - -There should be at least one PodSecurityPolicy (PSP) defined which does not permit root users in a container. - -If you need to run root containers, this should be defined in a separate PSP and you should carefully check RBAC controls to ensure that only limited service accounts and users are given permission to access that PSP. -
- -**Result:** Not Scored +Create a PSP as described in the Kubernetes documentation, ensuring that the +.spec.runAsUser.rule is set to either MustRunAsNonRoot or MustRunAs with the range of +UIDs not including 0. **Audit:** -Run the below command on the master node. ```bash kubectl get psp -o json | jq .items[] | jq -r 'select((.spec.allowPrivilegeEscalation == null) or (.spec.allowPrivilegeEscalation == false))' | jq .metadata.name | wc -l | xargs -I {} echo '--count={}' ``` -Verify that the returned count is 1. +**Expected Result**: -**Remediation:** -An operator should apply a PodSecurityPolicy that sets the `runAsUser.Rule` value to `MustRunAsNonRoot`. An example of this can be found in the [Hardening Guide](../hardening_guide/). - - -#### 5.2.7 -Minimize the admission of containers with the NET_RAW capability (Not Scored) -
-Rationale -Containers run with a default set of capabilities as assigned by the Container Runtime. By default this can include potentially dangerous capabilities. With Docker as the container runtime the NET_RAW capability is enabled which may be misused by malicious containers. - -Ideally, all containers should drop this capability. - -There should be at least one PodSecurityPolicy (PSP) defined which prevents containers with the NET_RAW capability from launching. - -If you need to run containers with this capability, this should be defined in a separate PSP and you should carefully check RBAC controls to ensure that only limited service accounts and users are given permission to access that PSP. -
- -**Result:** Not Scored - -**Audit:** -Run the below command on the master node. - -```bash -kubectl get psp -o json | jq .spec.requiredDropCapabilities[] +```console +1 is greater than 0 ``` -Verify the value is `"ALL"`. +**Returned Value**: + +```console +--count=1 +``` + +### 5.2.7 Minimize the admission of containers with the NET_RAW capability (Manual) + + +**Result:** warn **Remediation:** -An operator should apply a PodSecurityPolicy that sets `.spec.requiredDropCapabilities[]` to a value of `All`. An example of this can be found in the [Hardening Guide](../hardening_guide/). - - -#### 5.2.8 -Minimize the admission of containers with added capabilities (Not Scored) -
-Rationale -Containers run with a default set of capabilities as assigned by the Container Runtime. Capabilities outside this set can be added to containers which could expose them to risks of container breakout attacks. - -There should be at least one PodSecurityPolicy (PSP) defined which prevents containers with capabilities beyond the default set from launching. - -If you need to run containers with additional capabilities, this should be defined in a separate PSP and you should carefully check RBAC controls to ensure that only limited service accounts and users are given permission to access that PSP. -
- -**Result:** Not Scored +Create a PSP as described in the Kubernetes documentation, ensuring that the +.spec.requiredDropCapabilities is set to include either NET_RAW or ALL. **Audit:** -Run the below command on the master node. ```bash kubectl get psp ``` -Verify that there are no PSPs present which have `allowedCapabilities` set to anything other than an empty array. +### 5.2.8 Minimize the admission of containers with added capabilities (Manual) + + +**Result:** warn **Remediation:** -An operator should apply a PodSecurityPolicy that sets `allowedCapabilities` to anything other than an empty array. An example of this can be found in the [Hardening Guide](../hardening_guide/). +Ensure that allowedCapabilities is not present in PSPs for the cluster unless +it is set to an empty array. + +### 5.2.9 Minimize the admission of containers with capabilities assigned (Manual) -#### 5.2.9 -Minimize the admission of containers with capabilities assigned (Not Scored) -
-Rationale -Containers run with a default set of capabilities as assigned by the Container Runtime. Capabilities are parts of the rights generally granted on a Linux system to the root user. +**Result:** warn -In many cases applications running in containers do not require any capabilities to operate, so from the perspective of the principle of least privilege use of capabilities should be minimized. -
+**Remediation:** +Review the use of capabilites in applications runnning on your cluster. Where a namespace +contains applicaions which do not require any Linux capabities to operate consider adding +a PSP which forbids the admission of containers which do not drop all capabilities. -**Result:** Not Scored +## 5.3 Network Policies and CNI +### 5.3.1 Ensure that the CNI in use supports Network Policies (Manual) -**Audit:** -Run the below command on the master node. + +**Result:** warn + +**Remediation:** +If the CNI plugin in use does not support network policies, consideration should be given to +making use of a different plugin, or finding an alternate mechanism for restricting traffic +in the Kubernetes cluster. + +### 5.3.2 Ensure that all Namespaces have Network Policies defined (Manual) + + +**Result:** pass + +**Remediation:** +Follow the documentation and create NetworkPolicy objects as you need them. + +**Audit Script:** `check_for_rke2_network_policies.sh` ```bash -kubectl get psp -``` +#!/bin/bash -**Remediation:** -An operator should apply a PodSecurityPolicy that sets `requiredDropCapabilities` to `ALL`. An example of this can be found in the [Hardening Guide](../hardening_guide/). +set -eE +handle_error() { + echo "false" +} -### 5.3 Network Policies and CNI +trap 'handle_error' ERR - -#### 5.3.1 -Ensure that the CNI in use supports Network Policies (Not Scored) -
-Rationale -Kubernetes network policies are enforced by the CNI plugin in use. As such it is important to ensure that the CNI plugin supports both Ingress and Egress network policies. -
- -**Result:** Pass - -**Audit:** -Review the documentation of CNI plugin in use by the cluster, and confirm that it supports Ingress and Egress network policies. - -**Remediation:** -By default, K3s use Canal (Calico and Flannel) and fully supports network policies. - - -#### 5.3.2 -Ensure that all Namespaces have Network Policies defined (Scored) -
-Rationale -Running different applications on the same Kubernetes cluster creates a risk of one compromised application attacking a neighboring application. Network segmentation is important to ensure that containers can communicate only with those they are supposed to. A network policy is a specification of how selections of pods are allowed to communicate with each other and other network endpoints. - -Network Policies are namespace scoped. When a network policy is introduced to a given namespace, all traffic not allowed by the policy is denied. However, if there are no network policies in a namespace all traffic will be allowed into and out of the pods in that namespace. -
- -**Result:** Pass - -**Audit:** -Run the below command on the master node. - -```bash -for i in kube-system kube-public default; do - kubectl get networkpolicies -n $i; +for namespace in kube-system kube-public default; do + policy_count=$(/var/lib/rancher/rke2/bin/kubectl get networkpolicy -n ${namespace} -o json | jq -r '.items | length') + if [ ${policy_count} -eq 0 ]; then + echo "false" + exit + fi done + +echo "true" + ``` -Verify that there are network policies applied to each of the namespaces. - -**Remediation:** -An operator should apply NetworkPolcyies that prevent unneeded traffic from traversing networks unnecessarily. An example of applying a NetworkPolcy can be found in the [Hardening Guide](../hardening_guide/). - -### 5.4 Secrets Management - - -#### 5.4.1 -Prefer using secrets as files over secrets as environment variables (Not Scored) -
-Rationale -It is reasonably common for application code to log out its environment (particularly in the event of an error). This will include any secret values passed in as environment variables, so secrets can easily be exposed to any user or entity who has access to the logs. -
- -**Result:** Not Scored - -**Audit:** -Run the following command to find references to objects which use environment variables defined from secrets. +**Audit Execution:** ```bash -kubectl get all -o jsonpath='{range .items[?(@..secretKeyRef)]} {.kind} {.metadata.name} {"\n"}{end}' -A +./check_for_rke2_network_policies.sh ``` -**Remediation:** -If possible, rewrite application code to read secrets from mounted secret files, rather than from environment variables. +**Expected Result**: + +```console +'true' is equal to 'true' +``` + +**Returned Value**: + +```console +true +``` + +## 5.4 Secrets Management +### 5.4.1 Prefer using secrets as files over secrets as environment variables (Manual) -#### 5.4.2 -Consider external secret storage (Not Scored) -
-Rationale -Kubernetes supports secrets as first-class objects, but care needs to be taken to ensure that access to secrets is carefully limited. Using an external secrets provider can ease the management of access to secrets, especially where secrets are used across both Kubernetes and non-Kubernetes environments. -
- -**Result:** Not Scored - -**Audit:** -Review your secrets management implementation. +**Result:** warn **Remediation:** -Refer to the secrets management options offered by your cloud provider or a third-party secrets management solution. - - -### 5.5 Extensible Admission Control - - -#### 5.5.1 -Configure Image Provenance using ImagePolicyWebhook admission controller (Not Scored) -
-Rationale -Kubernetes supports plugging in provenance rules to accept or reject the images in your deployments. You could configure such rules to ensure that only approved images are deployed in the cluster. -
- -**Result:** Not Scored +if possible, rewrite application code to read secrets from mounted secret files, rather than +from environment variables. **Audit:** -Review the pod definitions in your cluster and verify that image _provenance_ is configured as appropriate. + +```bash +kubectl get all -o jsonpath='{range .items[?(@..secretKeyRef)]} {.kind} {.metadata.name} {' '}{end}' -A +``` + +### 5.4.2 Consider external secret storage (Manual) + + +**Result:** warn + +**Remediation:** +Refer to the secrets management options offered by your cloud provider or a third-party +secrets management solution. + +## 5.5 Extensible Admission Control +### 5.5.1 Configure Image Provenance using ImagePolicyWebhook admission controller (Manual) + + +**Result:** warn **Remediation:** Follow the Kubernetes documentation and setup image provenance. - -### 5.6 Omitted -The v1.5.1 Benchmark skips 5.6 and goes from 5.5 to 5.7. We are including it here merely for explanation. +## 5.7 General Policies +### 5.7.1 Create administrative boundaries between resources using namespaces (Manual) -### 5.7 General Policies -These policies relate to general cluster management topics, like namespace best practices and policies applied to pod objects in the cluster. +**Result:** warn + +**Remediation:** +Follow the documentation and create namespaces for objects in your deployment as you need +them. + +### 5.7.2 Ensure that the seccomp profile is set to docker/default in your pod definitions (Manual) -#### 5.7.1 -Create administrative boundaries between resources using namespaces (Not Scored) -
-Rationale -Limiting the scope of user permissions can reduce the impact of mistakes or malicious activities. A Kubernetes namespace allows you to partition created resources into logically named groups. Resources created in one namespace can be hidden from other namespaces. By default, each resource created by a user in Kubernetes cluster runs in a default namespace, called default. You can create additional namespaces and attach resources and users to them. You can use Kubernetes Authorization plugins to create policies that segregate access to namespace resources between different users. -
+**Result:** warn -**Result:** Not Scored +**Remediation:** +Seccomp is an alpha feature currently. By default, all alpha features are disabled. So, you +would need to enable alpha features in the apiserver by passing "--feature- +gates=AllAlpha=true" argument. +Edit the /etc/kubernetes/apiserver file on the master node and set the KUBE_API_ARGS +parameter to "--feature-gates=AllAlpha=true" +KUBE_API_ARGS="--feature-gates=AllAlpha=true" +Based on your system, restart the kube-apiserver service. For example: +systemctl restart kube-apiserver.service +Use annotations to enable the docker/default seccomp profile in your pod definitions. An +example is as below: +apiVersion: v1 +kind: Pod +metadata: + name: trustworthy-pod + annotations: + seccomp.security.alpha.kubernetes.io/pod: docker/default +spec: + containers: + - name: trustworthy-container + image: sotrustworthy:latest + +### 5.7.3 Apply Security Context to Your Pods and Containers (Manual) + + +**Result:** warn + +**Remediation:** +Follow the Kubernetes documentation and apply security contexts to your pods. For a +suggested list of security contexts, you may refer to the CIS Security Benchmark for Docker +Containers. + +### 5.7.4 The default namespace should not be used (Manual) + + +**Result:** pass + +**Remediation:** +Ensure that namespaces are created to allow for appropriate segregation of Kubernetes +resources and that all new resources are created in a specific namespace. **Audit:** -Run the below command and review the namespaces created in the cluster. ```bash -kubectl get namespaces +kubectl get all --no-headers -n default | grep -v service | wc -l | xargs -I {} echo '--count={}' ``` -Ensure that these namespaces are the ones you need and are adequately administered as per your requirements. +**Expected Result**: -**Remediation:** -Follow the documentation and create namespaces for objects in your deployment as you need them. - - -#### 5.7.2 -Ensure that the seccomp profile is set to `docker/default` in your pod definitions (Not Scored) -
-Rationale -Seccomp (secure computing mode) is used to restrict the set of system calls applications can make, allowing cluster administrators greater control over the security of workloads running in the cluster. Kubernetes disables seccomp profiles by default for historical reasons. You should enable it to ensure that the workloads have restricted actions available within the container. -
- -**Result:** Not Scored - -**Audit:** -Review the pod definitions in your cluster. It should create a line as below: - -```yaml -annotations: - seccomp.security.alpha.kubernetes.io/pod: docker/default +```console +'0' is equal to '0' ``` -**Remediation:** -Review the Kubernetes documentation and if needed, apply a relevant PodSecurityPolicy. +**Returned Value**: -#### 5.7.3 -Apply Security Context to Your Pods and Containers (Not Scored) -
-Rationale -A security context defines the operating system security settings (uid, gid, capabilities, SELinux role, etc..) applied to a container. When designing your containers and pods, make sure that you configure the security context for your pods, containers, and volumes. A security context is a property defined in the deployment yaml. It controls the security parameters that will be assigned to the pod/container/volume. There are two levels of security context: pod level security context, and container-level security context. -
- -**Result:** Not Scored - -**Audit:** -Review the pod definitions in your cluster and verify that you have security contexts defined as appropriate. - -**Remediation:** -Follow the Kubernetes documentation and apply security contexts to your pods. For a suggested list of security contexts, you may refer to the CIS Security Benchmark. - - -#### 5.7.4 -The default namespace should not be used (Scored) -
-Rationale -Resources in a Kubernetes cluster should be segregated by namespace, to allow for security controls to be applied at that level and to make it easier to manage resources. -
- -**Result:** Pass - -**Audit:** -Run the below command on the master node. - -```bash -kubectl get all -n default +```console +--count=0 ``` - -The only entries there should be system-managed resources such as the kubernetes service. - -**Remediation:** -By default, K3s does not utilize the default namespace. diff --git a/content/k3s/latest/en/storage/_index.md b/content/k3s/latest/en/storage/_index.md index fd0dcba1168..883128ee118 100644 --- a/content/k3s/latest/en/storage/_index.md +++ b/content/k3s/latest/en/storage/_index.md @@ -9,6 +9,26 @@ A persistent volume (PV) is a piece of storage in the Kubernetes cluster, while This page describes how to set up persistent storage with a local storage provider, or with [Longhorn.](#setting-up-longhorn) +# What's changed in K3s storage? + +K3s removes several optional volume plugins and all built-in (sometimes referred to as "in-tree") cloud providers. We do this in order to achieve a smaller binary size and to avoid dependence on third-party cloud or data center technologies and services, which may not be available in many K3s use cases. We are able to do this because their removal affects neither core Kubernetes functionality nor conformance. + +The following volume plugins have been removed from K3s: + +* cephfs +* fc +* flocker +* git_repo +* glusterfs +* portworx +* quobyte +* rbd +* storageos + +Both components have out-of-tree alternatives that can be used with K3s: The Kubernetes [Container Storage Interface (CSI)](https://github.com/container-storage-interface/spec/blob/master/spec.md) and [Cloud Provider Interface (CPI)](https://kubernetes.io/docs/tasks/administer-cluster/running-cloud-controller/). + +Kubernetes maintainers are actively migrating in-tree volume plugins to CSI drivers. For more information on this migration, please refer [here](https://kubernetes.io/blog/2021/12/10/storage-in-tree-to-csi-migration-status-update/). + # Setting up the Local Storage Provider K3s comes with Rancher's Local Path Provisioner and this enables the ability to create persistent volume claims out of the box using local storage on the respective node. Below we cover a simple example. For more information please reference the official documentation [here](https://github.com/rancher/local-path-provisioner/blob/master/README.md#usage). diff --git a/content/k3s/latest/en/upgrades/_index.md b/content/k3s/latest/en/upgrades/_index.md index 1b9c86805ad..fad09759854 100644 --- a/content/k3s/latest/en/upgrades/_index.md +++ b/content/k3s/latest/en/upgrades/_index.md @@ -3,12 +3,22 @@ title: "Upgrades" weight: 25 --- -This section describes how to upgrade your K3s cluster. +### Upgrading your K3s cluster [Upgrade basics]({{< baseurl >}}/k3s/latest/en/upgrades/basic/) describes several techniques for upgrading your cluster manually. It can also be used as a basis for upgrading through third-party Infrastructure-as-Code tools like [Terraform](https://www.terraform.io/). [Automated upgrades]({{< baseurl >}}/k3s/latest/en/upgrades/automated/) describes how to perform Kubernetes-native automated upgrades using Rancher's [system-upgrade-controller](https://github.com/rancher/system-upgrade-controller). -> If Traefik is not disabled K3s versions 1.20 and earlier will have installed Traefik v1, while K3s versions 1.21 and later will install Traefik v2 if v1 is not already present. To upgrade Traefik, please refer to the [Traefik documentation](https://doc.traefik.io/traefik/migration/v1-to-v2/) and use the [migration tool](https://github.com/traefik/traefik-migration-tool) to migrate from the older Traefik v1 to Traefik v2. +### Version-specific caveats -> The experimental embedded Dqlite data store was deprecated in K3s v1.19.1. Please note that upgrades from experimental Dqlite to experimental embedded etcd are not supported. If you attempt an upgrade it will not succeed and data will be lost. +- **Traefik:** If Traefik is not disabled, K3s versions 1.20 and earlier will install Traefik v1, while K3s versions 1.21 and later will install Traefik v2, if v1 is not already present. To upgrade from the older Traefik v1 to Traefik v2, please refer to the [Traefik documentation](https://doc.traefik.io/traefik/migration/v1-to-v2/) and use the [migration tool](https://github.com/traefik/traefik-migration-tool). + +- **K3s bootstrap data:** If you are using K3s in an HA configuration with an external SQL datastore, and your server (control-plane) nodes were not started with the `--token` CLI flag, you will no longer be able to add additional K3s servers to the cluster without specifying the token. Ensure that you retain a copy of this token, as it is required when restoring from backup. Previously, K3s did not enforce the use of a token when using external SQL datastores. + - The affected versions are <= v1.19.12+k3s1, v1.20.8+k3s1, v1.21.2+k3s1; the patched versions are v1.19.13+k3s1, v1.20.9+k3s1, v1.21.3+k3s1. + + - You may retrieve the token value from any server already joined to the cluster as follows: +``` +cat /var/lib/rancher/k3s/server/token +``` + +- **Experimental Dqlite:** The experimental embedded Dqlite data store was deprecated in K3s v1.19.1. Please note that upgrades from experimental Dqlite to experimental embedded etcd are not supported. If you attempt an upgrade, it will not succeed, and data will be lost. diff --git a/content/rancher/v2.0-v2.4/_index.md b/content/rancher/v2.0-v2.4/_index.md index 25b54e1aff6..4d23120e33c 100644 --- a/content/rancher/v2.0-v2.4/_index.md +++ b/content/rancher/v2.0-v2.4/_index.md @@ -1,5 +1,5 @@ --- -title: v2.0-v2.4.x +title: Rancher 2.0-2.4 weight: 3 showBreadcrumb: false --- diff --git a/content/rancher/v2.0-v2.4/en/_index.md b/content/rancher/v2.0-v2.4/en/_index.md index 153f22c3b87..6720ef85a73 100644 --- a/content/rancher/v2.0-v2.4/en/_index.md +++ b/content/rancher/v2.0-v2.4/en/_index.md @@ -1,8 +1,8 @@ --- -title: "Rancher v2.0-v2.4" +title: "Rancher 2.0-2.4" shortTitle: "Rancher 2.0-2.4" description: "Rancher adds significant value on top of Kubernetes: managing hundreds of clusters from one interface, centralizing RBAC, enabling monitoring and alerting. Read more." -metaTitle: "Rancher 2.x Docs: What is New?" +metaTitle: "Rancher 2.0-2.4 Docs: What is New?" metaDescription: "Rancher 2 adds significant value on top of Kubernetes: managing hundreds of clusters from one interface, centralizing RBAC, enabling monitoring and alerting. Read more." insertOneSix: true weight: 1 @@ -18,4 +18,4 @@ Rancher adds significant value on top of Kubernetes, first by centralizing authe It then enables detailed monitoring and alerting for clusters and their resources, ships logs to external providers, and integrates directly with Helm via the Application Catalog. If you have an external CI/CD system, you can plug it into Rancher, but if you don't, Rancher even includes a pipeline engine to help you automatically deploy and upgrade workloads. -Rancher is a _complete_ container management platform for Kubernetes, giving you the tools to successfully run Kubernetes anywhere. \ No newline at end of file +Rancher is a _complete_ container management platform for Kubernetes, giving you the tools to successfully run Kubernetes anywhere. diff --git a/content/rancher/v2.0-v2.4/en/admin-settings/authentication/ping-federate/_index.md b/content/rancher/v2.0-v2.4/en/admin-settings/authentication/ping-federate/_index.md index e9a43d062f2..987ab8e966a 100644 --- a/content/rancher/v2.0-v2.4/en/admin-settings/authentication/ping-federate/_index.md +++ b/content/rancher/v2.0-v2.4/en/admin-settings/authentication/ping-federate/_index.md @@ -29,6 +29,8 @@ Note that these URLs will not return valid data until the authentication configu 1. **Groups Field**: Make entries for managing group memberships (example: `memberOf`). + 1. **Entity ID Field** (optional): The published, protocol-dependent, unique identifier of your partner. This ID defines your organization as the entity operating the server for SAML 2.0 transactions. This ID may have been obtained out-of-band or via a SAML metadata file. + 1. **Rancher API Host**: Enter the URL for your Rancher Server. 1. **Private Key** and **Certificate**: This is a key-certificate pair to create a secure shell between Rancher and your IdP. diff --git a/content/rancher/v2.0-v2.4/en/admin-settings/config-private-registry/_index.md b/content/rancher/v2.0-v2.4/en/admin-settings/config-private-registry/_index.md index d258e527c23..09779408bb8 100644 --- a/content/rancher/v2.0-v2.4/en/admin-settings/config-private-registry/_index.md +++ b/content/rancher/v2.0-v2.4/en/admin-settings/config-private-registry/_index.md @@ -4,7 +4,7 @@ weight: 400 aliases: --- -You might want to use a private Docker registry to share your custom base images within your organization. With a private registry, you can keep a private, consistent, and centralized source of truth for the Docker images that are used in your clusters. +You might want to use a private container registry to share your custom base images within your organization. With a private registry, you can keep a private, consistent, and centralized source of truth for the container images that are used in your clusters. There are two main ways to set up private registries in Rancher: by setting up the global default registry through the **Settings** tab in the global view, and by setting up a private registry in the advanced options in the cluster-level settings. The global default registry is intended to be used for air-gapped setups, for registries that do not require credentials. The cluster-level private registry is intended to be used in all setups in which the private registry requires credentials. diff --git a/content/rancher/v2.0-v2.4/en/admin-settings/rbac/cluster-project-roles/_index.md b/content/rancher/v2.0-v2.4/en/admin-settings/rbac/cluster-project-roles/_index.md index 6185daa0bee..6e155df7033 100644 --- a/content/rancher/v2.0-v2.4/en/admin-settings/rbac/cluster-project-roles/_index.md +++ b/content/rancher/v2.0-v2.4/en/admin-settings/rbac/cluster-project-roles/_index.md @@ -84,6 +84,10 @@ _Project roles_ are roles that can be used to grant users access to a project. T These users can manage project-scoped resources like namespaces and workloads, but cannot manage other project members. + >**Note:** + > + >By default, the Rancher role of `project-member` inherits from the `Kubernetes-edit` role, and the `project-owner` role inherits from the `Kubernetes-admin` role. As such, both `project-member` and `project-owner` roles will allow for namespace management, including the ability to create and delete namespaces. + - **Read Only:** These users can view everything in the project but cannot create, update, or delete anything. diff --git a/content/rancher/v2.0-v2.4/en/admin-settings/rbac/global-permissions/_index.md b/content/rancher/v2.0-v2.4/en/admin-settings/rbac/global-permissions/_index.md index 0f5e5f00c9d..125c2cbe699 100644 --- a/content/rancher/v2.0-v2.4/en/admin-settings/rbac/global-permissions/_index.md +++ b/content/rancher/v2.0-v2.4/en/admin-settings/rbac/global-permissions/_index.md @@ -27,25 +27,6 @@ This section covers the following topics: - [Configuring global permissions for groups](#configuring-global-permissions-for-groups) - [Refreshing group memberships](#refreshing-group-memberships) -### List of `restricted-admin` Permissions - -The `restricted-admin` permissions are as follows: - -- Has full admin access to all downstream clusters managed by Rancher. -- Has very limited access to the local Kubernetes cluster. Can access Rancher custom resource definitions, but has no access to any Kubernetes native types. -- Can add other users and assign them to clusters outside of the local cluster. -- Can create other restricted admins. -- Cannot grant any permissions in the local cluster they don't currently have. (This is how Kubernetes normally operates) - - -### Changing Global Administrators to Restricted Admins - -If Rancher already has a global administrator, they should change all global administrators over to the new `restricted-admin` role. - -This can be done through **Security > Users** and moving any Administrator role over to Restricted Administrator. - -Signed-in users can change themselves over to the `restricted-admin` if they wish, but they should only do that as the last step, otherwise they won't have the permissions to do so. - # Global Permission Assignment Global permissions for local users are assigned differently than users who log in to Rancher using external authentication. diff --git a/content/rancher/v2.0-v2.4/en/backups/restore/rke-restore/v2.0-v2.1/_index.md b/content/rancher/v2.0-v2.4/en/backups/restore/rke-restore/v2.0-v2.1/_index.md index b7026acc4a4..bfc20ae2b48 100644 --- a/content/rancher/v2.0-v2.4/en/backups/restore/rke-restore/v2.0-v2.1/_index.md +++ b/content/rancher/v2.0-v2.4/en/backups/restore/rke-restore/v2.0-v2.1/_index.md @@ -28,7 +28,7 @@ Because of the changes necessary to address [CVE-2018-20321](https://cve.mitre.o 2. After executing the command a `tokens.json` file will be created. Important! Back up this file in a safe place.** You will need it to restore functionality to your clusters after rolling back Rancher. **If you lose this file, you may lose access to your clusters.** -3. Rollback Rancher following the [normal instructions]({{}}/rancher/v2.x/en/upgrades/rollbacks/). +3. Rollback Rancher following the [normal instructions]({{}}/rancher/v2.0-v2.4/en/upgrades/rollbacks/). 4. Once Rancher comes back up, every cluster managed by Rancher (except for Imported clusters) will be in an `Unavailable` state. diff --git a/content/rancher/v2.0-v2.4/en/best-practices/management/_index.md b/content/rancher/v2.0-v2.4/en/best-practices/management/_index.md index d85e5a22cbf..5e23755f729 100644 --- a/content/rancher/v2.0-v2.4/en/best-practices/management/_index.md +++ b/content/rancher/v2.0-v2.4/en/best-practices/management/_index.md @@ -4,6 +4,7 @@ weight: 101 aliases: - /rancher/v2.0-v2.4/en/best-practices/management - /rancher/v2.0-v2.4/en/best-practices/v2.0-v2.4/management + - /rancher/v2.x/en/best-practices/management/ - /rancher/v2.x/en/best-practices/v2.0-v2.4/management/ --- @@ -86,8 +87,8 @@ Run your etcd and control plane nodes on virtual machines where you can scale vC ### Use at Least Three etcd Nodes Provision 3 or 5 etcd nodes. Etcd requires a quorum to determine a leader by the majority of nodes, therefore it is not recommended to have clusters of even numbers. Three etcd nodes is generally sufficient for smaller clusters and five etcd nodes for large clusters. -### Use at Least Two Control Plane Nodes -Provision two or more control plane nodes. Some control plane components, such as the `kube-apiserver`, run in [active-active](https://www.jscape.com/blog/active-active-vs-active-passive-high-availability-cluster) mode and will give you more scalability. Other components such as kube-scheduler and kube-controller run in active-passive mode (leader elect) and give you more fault tolerance. +### Use at Least Three Control Plane Nodes +Provision three or more control plane nodes. Some control plane components, such as the `kube-apiserver`, run in [active-active](https://www.jscape.com/blog/active-active-vs-active-passive-high-availability-cluster) mode and will give you more scalability. Other components such as kube-scheduler and kube-controller run in active-passive mode (leader elect) and give you more fault tolerance. ### Monitor Your Cluster Closely monitor and scale your nodes as needed. You should [enable cluster monitoring]({{}}/rancher/v2.0-v2.4/en/monitoring-alerting/legacy/monitoring/cluster-monitoring/) and use the Prometheus metrics and Grafana visualization options as a starting point. diff --git a/content/rancher/v2.0-v2.4/en/cluster-admin/projects-and-namespaces/_index.md b/content/rancher/v2.0-v2.4/en/cluster-admin/projects-and-namespaces/_index.md index 9774a89c470..545de58bf84 100644 --- a/content/rancher/v2.0-v2.4/en/cluster-admin/projects-and-namespaces/_index.md +++ b/content/rancher/v2.0-v2.4/en/cluster-admin/projects-and-namespaces/_index.md @@ -162,6 +162,9 @@ By default, your user is added as the project `Owner`. >**Notes on Permissions:** > >- Users assigned the `Owner` or `Member` role for a project automatically inherit the `namespace creation` role. However, this role is a [Kubernetes ClusterRole](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#role-and-clusterrole), meaning its scope extends to all projects in the cluster. Therefore, users explicitly assigned the `Owner` or `Member` role for a project can create namespaces in other projects they're assigned to, even with only the `Read Only` role assigned. +> +>- By default, the Rancher role of `project-member` inherits from the `Kubernetes-edit` role, and the `project-owner` role inherits from the `Kubernetes-admin` role. As such, both `project-member` and `project-owner` roles will allow for namespace management, including the ability to create and delete namespaces. +> >- Choose `Custom` to create a custom role on the fly: [Custom Project Roles]({{}}/rancher/v2.0-v2.4/en/admin-settings/rbac/cluster-project-roles/#custom-project-roles). To add members: diff --git a/content/rancher/v2.0-v2.4/en/helm-charts/creating-apps/_index.md b/content/rancher/v2.0-v2.4/en/helm-charts/creating-apps/_index.md index a0928f9373a..73d1f6efe48 100644 --- a/content/rancher/v2.0-v2.4/en/helm-charts/creating-apps/_index.md +++ b/content/rancher/v2.0-v2.4/en/helm-charts/creating-apps/_index.md @@ -128,4 +128,4 @@ This reference contains variables that you can use in `questions.yml` nested und # Tutorial: Example Custom Chart Creation -For a tutorial on adding a custom Helm chart to a custom catalog, refer to [this page.]({{}}/rancher/v2.x/en/catalog/tutorial) +For a tutorial on adding a custom Helm chart to a custom catalog, refer to [this page.]({{}}/rancher/v2.0-v2.4/en/catalog/tutorial) diff --git a/content/rancher/v2.0-v2.4/en/helm-charts/tutorial/_index.md b/content/rancher/v2.0-v2.4/en/helm-charts/tutorial/_index.md index 5a23d0b7092..09b5c493fc1 100644 --- a/content/rancher/v2.0-v2.4/en/helm-charts/tutorial/_index.md +++ b/content/rancher/v2.0-v2.4/en/helm-charts/tutorial/_index.md @@ -50,20 +50,20 @@ You can fill your custom catalogs with either Helm Charts or Rancher Charts, alt - CMS questions: - variable: persistence.enabled - default: "false" - description: "Enable persistent volume for WordPress" - type: boolean - required: true - label: WordPress Persistent Volume Enabled - show_subquestion_if: true - group: "WordPress Settings" - subquestions: - - variable: persistence.size + default: "false" + description: "Enable persistent volume for WordPress" + type: boolean + required: true + label: WordPress Persistent Volume Enabled + show_subquestion_if: true + group: "WordPress Settings" + subquestions: + - variable: persistence.size default: "10Gi" description: "WordPress Persistent Volume Size" type: string label: WordPress Volume Size - - variable: persistence.storageClass + - variable: persistence.storageClass default: "" description: "If undefined or null, uses the default StorageClass. Default to null" type: storageclass diff --git a/content/rancher/v2.0-v2.4/en/installation/install-rancher-on-k8s/_index.md b/content/rancher/v2.0-v2.4/en/installation/install-rancher-on-k8s/_index.md index 98c8db4a6e8..0e79ce86a0d 100644 --- a/content/rancher/v2.0-v2.4/en/installation/install-rancher-on-k8s/_index.md +++ b/content/rancher/v2.0-v2.4/en/installation/install-rancher-on-k8s/_index.md @@ -196,7 +196,7 @@ helm install rancher rancher-/rancher \ --namespace cattle-system \ --set hostname=rancher.my.org \ --set ingress.tls.source=letsEncrypt \ - --set letsEncrypt.email=me@example.org + --set letsEncrypt.email=me@example.org \ ``` Wait for Rancher to be rolled out: @@ -231,7 +231,7 @@ helm install rancher rancher-/rancher \ If you are using a Private CA signed certificate , add `--set privateCA=true` to the command: ``` -helm install rancher rancher-latest/rancher \ +helm install rancher rancher-/rancher \ --namespace cattle-system \ --set hostname=rancher.my.org \ --set ingress.tls.source=secret \ diff --git a/content/rancher/v2.0-v2.4/en/installation/install-rancher-on-k8s/chart-options/_index.md b/content/rancher/v2.0-v2.4/en/installation/install-rancher-on-k8s/chart-options/_index.md index ff6631bef9a..f027000a6cb 100644 --- a/content/rancher/v2.0-v2.4/en/installation/install-rancher-on-k8s/chart-options/_index.md +++ b/content/rancher/v2.0-v2.4/en/installation/install-rancher-on-k8s/chart-options/_index.md @@ -126,7 +126,7 @@ To customize or use a different ingress with Rancher server you can set your own Example on setting a custom certificate issuer: ```plain ---set ingress.extraAnnotations.'certmanager\.k8s\.io/cluster-issuer'=ca-key-pair +--set ingress.extraAnnotations.'cert-manager\.io/cluster-issuer'=issuer-name ``` Example on setting a static proxy header with `ingress.configurationSnippet`. This value is parsed like a template so variables can be used. diff --git a/content/rancher/v2.0-v2.4/en/installation/install-rancher-on-k8s/upgrades/_index.md b/content/rancher/v2.0-v2.4/en/installation/install-rancher-on-k8s/upgrades/_index.md index e49c62f7d23..cb3cf8b9655 100644 --- a/content/rancher/v2.0-v2.4/en/installation/install-rancher-on-k8s/upgrades/_index.md +++ b/content/rancher/v2.0-v2.4/en/installation/install-rancher-on-k8s/upgrades/_index.md @@ -168,7 +168,7 @@ helm upgrade rancher rancher-/rancher \ ### Option B: Reinstalling Rancher and cert-manager -If you are currently running the cert-manger whose version is older than v0.11, and want to upgrade both Rancher and cert-manager to a newer version, then you need to reinstall both Rancher and cert-manger due to the API change in cert-manger v0.11. +If you are currently running the cert-manager whose version is older than v0.11, and want to upgrade both Rancher and cert-manager to a newer version, then you need to reinstall both Rancher and cert-manager due to the API change in cert-manager v0.11. 1. Uninstall Rancher diff --git a/content/rancher/v2.0-v2.4/en/installation/install-rancher-on-k8s/upgrades/helm2/_index.md b/content/rancher/v2.0-v2.4/en/installation/install-rancher-on-k8s/upgrades/helm2/_index.md index 7895c69d7af..e0f9ac2787c 100644 --- a/content/rancher/v2.0-v2.4/en/installation/install-rancher-on-k8s/upgrades/helm2/_index.md +++ b/content/rancher/v2.0-v2.4/en/installation/install-rancher-on-k8s/upgrades/helm2/_index.md @@ -114,7 +114,7 @@ helm upgrade --install rancher rancher-/rancher \ {{% accordion label="Option B: Reinstalling Rancher chart" %}} -If you are currently running the cert-manger whose version is older than v0.11, and want to upgrade both Rancher and cert-manager to a newer version, then you need to reinstall both Rancher and cert-manger due to the API change in cert-manger v0.11. +If you are currently running the cert-manager whose version is older than v0.11, and want to upgrade both Rancher and cert-manager to a newer version, then you need to reinstall both Rancher and cert-manager due to the API change in cert-manager v0.11. 1. Uninstall Rancher diff --git a/content/rancher/v2.0-v2.4/en/installation/other-installation-methods/air-gap/prepare-nodes/_index.md b/content/rancher/v2.0-v2.4/en/installation/other-installation-methods/air-gap/prepare-nodes/_index.md index d3a7a28d33d..efd93d093c7 100644 --- a/content/rancher/v2.0-v2.4/en/installation/other-installation-methods/air-gap/prepare-nodes/_index.md +++ b/content/rancher/v2.0-v2.4/en/installation/other-installation-methods/air-gap/prepare-nodes/_index.md @@ -142,7 +142,7 @@ For a how-to guide for setting up a DNS record to route domain traffic to an Ama Rancher supports air gap installs using a secure Docker private registry. You must have your own private registry or other means of distributing Docker images to your machines. -In a later step, when you set up your K3s Kubernetes cluster, you will create a [private registries configuration file]({{}}/k3s/latest/en/installation/private-registry/) with details from this registry. +In a later step, when you set up your RKE Kubernetes cluster, you will create a [private registries configuration file]({{}}/rke/latest/en/config-options/private-registries/) with details from this registry. If you need help with creating a private registry, please refer to the [official Docker documentation.](https://docs.docker.com/registry/deploying/#run-an-externally-accessible-registry) @@ -164,8 +164,6 @@ For an example of one way to set up Linux nodes, refer to this [tutorial]({{}}/k3s/latest/en/installation/private-registry/) with details from this registry. - If you need help with creating a private registry, please refer to the [official Docker documentation.](https://docs.docker.com/registry/) {{% /tab %}} diff --git a/content/rancher/v2.0-v2.4/en/installation/other-installation-methods/single-node-docker/single-node-upgrades/_index.md b/content/rancher/v2.0-v2.4/en/installation/other-installation-methods/single-node-docker/single-node-upgrades/_index.md index be69fcd235e..7e7e935097c 100644 --- a/content/rancher/v2.0-v2.4/en/installation/other-installation-methods/single-node-docker/single-node-upgrades/_index.md +++ b/content/rancher/v2.0-v2.4/en/installation/other-installation-methods/single-node-docker/single-node-upgrades/_index.md @@ -86,7 +86,7 @@ During upgrade, you create a copy of the data from your current Rancher containe ``` - docker run --volumes-from rancher-data -v $PWD:/backup busybox tar zcvf /backup/rancher-data-backup--.tar.gz /var/lib/rancher + docker run --volumes-from rancher-data -v "$PWD:/backup" --rm busybox tar zcvf /backup/rancher-data-backup--.tar.gz /var/lib/rancher ``` **Step Result:** When you enter this command, a series of commands should run. diff --git a/content/rancher/v2.0-v2.4/en/installation/requirements/_index.md b/content/rancher/v2.0-v2.4/en/installation/requirements/_index.md index ef77bd8dd89..fbf442d663e 100644 --- a/content/rancher/v2.0-v2.4/en/installation/requirements/_index.md +++ b/content/rancher/v2.0-v2.4/en/installation/requirements/_index.md @@ -78,7 +78,8 @@ Performance increased in Rancher v2.4.0. For the requirements of Rancher before | X-Large | Up to 1000 | Up to 10,000 | 16 | 64 GB | | XX-Large | Up to 2000 | Up to 20,000 | 32 | 128 GB | -[Contact Rancher](https://rancher.com/contact/) for more than 2000 clusters and/or 20,000 nodes. +Every use case and environment is different. Please [contact Rancher](https://rancher.com/contact/) to review yours. + {{% /tab %}} {{% tab "K3s" %}} @@ -93,7 +94,7 @@ These requirements apply to each host in a [K3s Kubernetes cluster where the Ran | X-Large | Up to 1000 | Up to 10,000 | 16 | 64 GB | 2 cores, 4 GB + 1000 IOPS | | XX-Large | Up to 2000 | Up to 20,000 | 32 | 128 GB | 2 cores, 4 GB + 1000 IOPS | -[Contact Rancher](https://rancher.com/contact/) for more than 2000 clusters and/or 20,000 nodes. +Every use case and environment is different. Please [contact Rancher](https://rancher.com/contact/) to review yours. {{% /tab %}} diff --git a/content/rancher/v2.0-v2.4/en/installation/requirements/installing-docker/_index.md b/content/rancher/v2.0-v2.4/en/installation/requirements/installing-docker/_index.md index 4414cb08794..9fdeb407a47 100644 --- a/content/rancher/v2.0-v2.4/en/installation/requirements/installing-docker/_index.md +++ b/content/rancher/v2.0-v2.4/en/installation/requirements/installing-docker/_index.md @@ -3,7 +3,7 @@ title: Installing Docker weight: 1 --- -For Helm CLI installs, Docker is required to be installed on any node that runs the Rancher server. +Docker is required to be installed on nodes where the Rancher server will be installed with Helm or Docker. There are a couple of options for installing Docker. One option is to refer to the [official Docker documentation](https://docs.docker.com/install/) about how to install Docker on Linux. The steps will vary based on the Linux distribution. diff --git a/content/rancher/v2.0-v2.4/en/installation/resources/advanced/firewall/_index.md b/content/rancher/v2.0-v2.4/en/installation/resources/advanced/firewall/_index.md index f3ee9defadd..67c6f880325 100644 --- a/content/rancher/v2.0-v2.4/en/installation/resources/advanced/firewall/_index.md +++ b/content/rancher/v2.0-v2.4/en/installation/resources/advanced/firewall/_index.md @@ -3,7 +3,7 @@ title: Opening Ports with firewalld weight: 1 --- -> We recommend disabling firewalld. For Kubernetes 1.19, firewalld must be turned off. +> We recommend disabling firewalld. For Kubernetes 1.19.x and higher, firewalld must be turned off. Some distributions of Linux [derived from RHEL,](https://en.wikipedia.org/wiki/Red_Hat_Enterprise_Linux#Rebuilds) including Oracle Linux, may have default firewall rules that block communication with Helm. diff --git a/content/rancher/v2.0-v2.4/en/installation/resources/advanced/helm2/helm-rancher/_index.md b/content/rancher/v2.0-v2.4/en/installation/resources/advanced/helm2/helm-rancher/_index.md index 985141b076a..dc96db26d41 100644 --- a/content/rancher/v2.0-v2.4/en/installation/resources/advanced/helm2/helm-rancher/_index.md +++ b/content/rancher/v2.0-v2.4/en/installation/resources/advanced/helm2/helm-rancher/_index.md @@ -131,7 +131,12 @@ deployment "rancher" successfully rolled out This option uses `cert-manager` to automatically request and renew [Let's Encrypt](https://letsencrypt.org/) certificates. This is a free service that provides you with a valid certificate as Let's Encrypt is a trusted CA. This configuration uses HTTP validation (`HTTP-01`) so the load balancer must have a public DNS record and be accessible from the internet. -- Set `hostname` to the public DNS record, set `ingress.tls.source` to `letsEncrypt` and `letsEncrypt.email` to the email address used for communication about your certificate (for example, expiry notices) +In the following command, + +- Set `hostname` to the public DNS record that resolves to your load balancer. +- Set `ingress.tls.source` to `letsEncrypt`. +- Set `letsEncrypt.email` to the email address used for communication about your certificate (for example, expiry notices). +- Set `letsEncrypt.ingress.class` to whatever your ingress controller is, e.g., `traefik`, `nginx`, `haproxy`, etc. - If you are installing an alpha version, Helm requires adding the `--devel` option to the command. ``` @@ -140,7 +145,8 @@ helm install rancher-/rancher \ --namespace cattle-system \ --set hostname=rancher.my.org \ --set ingress.tls.source=letsEncrypt \ - --set letsEncrypt.email=me@example.org + --set letsEncrypt.email=me@example.org \ + --set letsEncrypt.ingress.class=nginx ``` Wait for Rancher to be rolled out: diff --git a/content/rancher/v2.0-v2.4/en/installation/resources/feature-flags/_index.md b/content/rancher/v2.0-v2.4/en/installation/resources/feature-flags/_index.md index c235116ee24..3c0c500c5aa 100644 --- a/content/rancher/v2.0-v2.4/en/installation/resources/feature-flags/_index.md +++ b/content/rancher/v2.0-v2.4/en/installation/resources/feature-flags/_index.md @@ -107,7 +107,7 @@ When installing Rancher with Docker, use the `--features` option. In the below e docker run -d -p 80:80 -p 443:443 \ --restart=unless-stopped \ rancher/rancher:rancher-latest \ - --features==true,=true # Available as of v2.3.0 + --features==true,=true # Available as of v2.3.0 ``` {{% /tab %}} diff --git a/content/rancher/v2.0-v2.4/en/installation/resources/installing-docker/_index.md b/content/rancher/v2.0-v2.4/en/installation/resources/installing-docker/_index.md deleted file mode 100644 index faec8aed59c..00000000000 --- a/content/rancher/v2.0-v2.4/en/installation/resources/installing-docker/_index.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Installing Docker -weight: 1 -aliases: - - /rancher/v2.0-v2.4/en/installation/requirements/installing-docker ---- - -Docker is required to be installed on nodes where the Rancher server will be installed with Helm or Docker. - -There are a couple of options for installing Docker. One option is to refer to the [official Docker documentation](https://docs.docker.com/install/) about how to install Docker on Linux. The steps will vary based on the Linux distribution. - -Another option is to use one of Rancher's Docker installation scripts, which are available for most recent versions of Docker. - -For example, this command could be used to install Docker 19.03 on Ubuntu: - -``` -curl https://releases.rancher.com/install-docker/19.03.sh | sh -``` - -Rancher has installation scripts for every version of upstream Docker that Kubernetes supports. To find out whether a script is available for installing a certain Docker version, refer to this [GitHub repository,](https://github.com/rancher/install-docker) which contains all of Rancher's Docker installation scripts. \ No newline at end of file diff --git a/content/rancher/v2.0-v2.4/en/installation/resources/tls-secrets/_index.md b/content/rancher/v2.0-v2.4/en/installation/resources/tls-secrets/_index.md index 40f9c5294d2..3c32084c5e6 100644 --- a/content/rancher/v2.0-v2.4/en/installation/resources/tls-secrets/_index.md +++ b/content/rancher/v2.0-v2.4/en/installation/resources/tls-secrets/_index.md @@ -35,4 +35,4 @@ kubectl -n cattle-system create secret generic tls-ca \ # Updating a Private CA Certificate -Follow the steps on [this page]({{}}/rancher/v2.x/en/installation/resources/update-ca-cert) to update the SSL certificate of the ingress in a Rancher [high availability Kubernetes installation]({{}}/rancher/v2.0-v2.4/en/installation/install-rancher-on-k8s/) or to switch from the default self-signed certificate to a custom certificate. \ No newline at end of file +Follow the steps on [this page]({{}}/rancher/v2.0-v2.4/en/installation/resources/update-ca-cert) to update the SSL certificate of the ingress in a Rancher [high availability Kubernetes installation]({{}}/rancher/v2.0-v2.4/en/installation/install-rancher-on-k8s/) or to switch from the default self-signed certificate to a custom certificate. \ No newline at end of file diff --git a/content/rancher/v2.0-v2.4/en/installation/resources/upgrading-cert-manager/_index.md b/content/rancher/v2.0-v2.4/en/installation/resources/upgrading-cert-manager/_index.md index 4d8266873c8..29d2e411443 100644 --- a/content/rancher/v2.0-v2.4/en/installation/resources/upgrading-cert-manager/_index.md +++ b/content/rancher/v2.0-v2.4/en/installation/resources/upgrading-cert-manager/_index.md @@ -19,7 +19,7 @@ To address these changes, this guide will do two things: 1. Explain the cert-manager API changes and link to cert-manager's official documentation for migrating your data > **Important:** -> If you are currently running the cert-manger whose version is older than v0.11, and want to upgrade both Rancher and cert-manager to a newer version, you need to reinstall both of them: +> If you are currently running the cert-manager whose version is older than v0.11, and want to upgrade both Rancher and cert-manager to a newer version, you need to reinstall both of them: > 1. Take a one-time snapshot of your Kubernetes cluster running Rancher server > 2. Uninstall Rancher, cert-manager, and the CustomResourceDefinition for cert-manager diff --git a/content/rancher/v2.0-v2.4/en/installation/resources/upgrading-cert-manager/helm-2-instructions/_index.md b/content/rancher/v2.0-v2.4/en/installation/resources/upgrading-cert-manager/helm-2-instructions/_index.md index aba42eb1959..968cd6d6666 100644 --- a/content/rancher/v2.0-v2.4/en/installation/resources/upgrading-cert-manager/helm-2-instructions/_index.md +++ b/content/rancher/v2.0-v2.4/en/installation/resources/upgrading-cert-manager/helm-2-instructions/_index.md @@ -19,7 +19,7 @@ To address these changes, this guide will do two things: 1. Explain the cert-manager API changes and link to cert-manager's offficial documentation for migrating your data > **Important:** -> If you are currently running the cert-manger whose version is older than v0.11, and want to upgrade both Rancher and cert-manager to a newer version, you need to reinstall both of them: +> If you are currently running the cert-manager whose version is older than v0.11, and want to upgrade both Rancher and cert-manager to a newer version, you need to reinstall both of them: > 1. Take a one-time snapshot of your Kubernetes cluster running Rancher server > 2. Uninstall Rancher, cert-manager, and the CustomResourceDefinition for cert-manager diff --git a/content/rancher/v2.0-v2.4/en/k8s-in-rancher/workloads/deploy-workloads/_index.md b/content/rancher/v2.0-v2.4/en/k8s-in-rancher/workloads/deploy-workloads/_index.md index 95a39db870d..249bd6e59d9 100644 --- a/content/rancher/v2.0-v2.4/en/k8s-in-rancher/workloads/deploy-workloads/_index.md +++ b/content/rancher/v2.0-v2.4/en/k8s-in-rancher/workloads/deploy-workloads/_index.md @@ -15,7 +15,7 @@ Deploy a workload to run an application in one or more containers. 1. Enter a **Name** for the workload. -1. Select a [workload type]({{}}/rancher/v2.0-v2.4/en/k8s-in-rancher/workloads/). The workload defaults to a scalable deployment, by can change the workload type by clicking **More options.** +1. Select a [workload type]({{}}/rancher/v2.0-v2.4/en/k8s-in-rancher/workloads/). The workload defaults to a scalable deployment, but you can change the workload type by clicking **More options.** 1. From the **Docker Image** field, enter the name of the Docker image that you want to deploy to the project, optionally prefacing it with the registry host (e.g. `quay.io`, `registry.gitlab.com`, etc.). During deployment, Rancher pulls this image from the specified public or private registry. If no registry host is provided, Rancher will pull the image from [Docker Hub](https://hub.docker.com/explore/). Enter the name exactly as it appears in the registry server, including any required path, and optionally including the desired tag (e.g. `registry.gitlab.com/user/path/image:tag`). If no tag is provided, the `latest` tag will be automatically used. diff --git a/content/rancher/v2.0-v2.4/en/overview/_index.md b/content/rancher/v2.0-v2.4/en/overview/_index.md index b572069fbbb..16d8a5d0590 100644 --- a/content/rancher/v2.0-v2.4/en/overview/_index.md +++ b/content/rancher/v2.0-v2.4/en/overview/_index.md @@ -37,7 +37,7 @@ The Rancher API server is built on top of an embedded Kubernetes API server and - **Provisioning Kubernetes clusters:** The Rancher API server can [provision Kubernetes]({{}}/rancher/v2.0-v2.4/en/cluster-provisioning/) on existing nodes, or perform [Kubernetes upgrades.]({{}}/rancher/v2.0-v2.4/en/cluster-admin/upgrading-kubernetes) - **Catalog management:** Rancher provides the ability to use a [catalog of Helm charts]({{}}/rancher/v2.0-v2.4/en/catalog/) that make it easy to repeatedly deploy applications. -- **Managing projects:** A project is a group of multiple namespaces and access control policies within a cluster. A project is a Rancher concept, not a Kubernetes concept, which allows you manage multiple namespaces as a group and perform Kubernetes operations in them. The Rancher UI provides features for [project administration]({{}}/rancher/v2.0-v2.4/en/project-admin/) and for [managing applications within projects.]({{}}/rancher/v2.0-v2.4/en/k8s-in-rancher/) +- **Managing projects:** A project is a group of multiple namespaces and access control policies within a cluster. A project is a Rancher concept, not a Kubernetes concept, which allows you to manage multiple namespaces as a group and perform Kubernetes operations in them. The Rancher UI provides features for [project administration]({{}}/rancher/v2.0-v2.4/en/project-admin/) and for [managing applications within projects.]({{}}/rancher/v2.0-v2.4/en/k8s-in-rancher/) - **Pipelines:** Setting up a [pipeline]({{}}/rancher/v2.0-v2.4/en/project-admin/pipelines/) can help developers deliver new software as quickly and efficiently as possible. Within Rancher, you can configure pipelines for each of your Rancher projects. - **Istio:** Our [integration with Istio]({{}}/rancher/v2.0-v2.4/en/cluster-admin/tools/istio/) is designed so that a Rancher operator, such as an administrator or cluster owner, can deliver Istio to developers. Then developers can use Istio to enforce security policies, troubleshoot problems, or manage traffic for green/blue deployments, canary deployments, or A/B testing. diff --git a/content/rancher/v2.0-v2.4/en/overview/concepts/_index.md b/content/rancher/v2.0-v2.4/en/overview/concepts/_index.md index afac8412a3f..c637928995d 100644 --- a/content/rancher/v2.0-v2.4/en/overview/concepts/_index.md +++ b/content/rancher/v2.0-v2.4/en/overview/concepts/_index.md @@ -52,7 +52,7 @@ Three etcd nodes is generally sufficient for smaller clusters and five etcd node ### Controlplane Nodes -Controlplane nodes run the Kubernetes API server, scheduler, and controller manager. These nodes take care of routine tasks to ensure that your cluster maintains your configuration. Because all cluster data is stored on your etcd nodes, control plane nodes are stateless. You can run control plane on a single node, although two or more nodes are recommended for redundancy. Additionally, a single node can share the control plane and etcd roles. +Controlplane nodes run the Kubernetes API server, scheduler, and controller manager. These nodes take care of routine tasks to ensure that your cluster maintains your configuration. Because all cluster data is stored on your etcd nodes, control plane nodes are stateless. You can run control plane on a single node, although three or more nodes are recommended for redundancy. Additionally, a single node can share the control plane and etcd roles. ### Worker Nodes @@ -69,4 +69,4 @@ For high-availability installations of Rancher, Helm is the tool used to install Helm is the package management tool of choice for Kubernetes. Helm charts provide templating syntax for Kubernetes YAML manifest documents. With Helm we can create configurable deployments instead of just using static files. For more information about creating your own catalog of deployments, check out the docs at [https://helm.sh/](https://helm.sh). -For more information on service accounts and cluster role binding, refer to the [Kubernetes documentation.](https://kubernetes.io/docs/reference/access-authn-authz/rbac/) \ No newline at end of file +For more information on service accounts and cluster role binding, refer to the [Kubernetes documentation.](https://kubernetes.io/docs/reference/access-authn-authz/rbac/) diff --git a/content/rancher/v2.0-v2.4/en/project-admin/project-members/_index.md b/content/rancher/v2.0-v2.4/en/project-admin/project-members/_index.md index 47f4c7eddfe..a0a4a0922d7 100644 --- a/content/rancher/v2.0-v2.4/en/project-admin/project-members/_index.md +++ b/content/rancher/v2.0-v2.4/en/project-admin/project-members/_index.md @@ -42,6 +42,8 @@ Following project creation, you can add users as project members so that they ca > >- Users assigned the `Owner` or `Member` role for a project automatically inherit the `namespace creation` role. However, this role is a [Kubernetes ClusterRole](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#role-and-clusterrole), meaning its scope extends to all projects in the cluster. Therefore, users explicitly assigned the `Owner` or `Member` role for a project can create namespaces in other projects they're assigned to, even with only the `Read Only` role assigned. > + >- By default, the Rancher role of `project-member` inherits from the `Kubernetes-edit` role, and the `project-owner` role inherits from the `Kubernetes-admin` role. As such, both `project-member` and `project-owner` roles will allow for namespace management, including the ability to create and delete namespaces. + > >- For `Custom` roles, you can modify the list of individual roles available for assignment. > > - To add roles to the list, [Add a Custom Role]({{}}/rancher/v2.0-v2.4/en/admin-settings/rbac/default-custom-roles). diff --git a/content/rancher/v2.0-v2.4/en/project-admin/resource-quotas/_index.md b/content/rancher/v2.0-v2.4/en/project-admin/resource-quotas/_index.md index 6cac538d8f9..af27d4b3457 100644 --- a/content/rancher/v2.0-v2.4/en/project-admin/resource-quotas/_index.md +++ b/content/rancher/v2.0-v2.4/en/project-admin/resource-quotas/_index.md @@ -45,4 +45,4 @@ Edit [resource quotas]({{}}/rancher/v2.0-v2.4/en/k8s-in-rancher/project 1. Click **Create**. -**Result:** The resource quota is applied to your project and namespaces. When you add more namespaces in the future, Rancher validates that the project can accommodate the namespace. If the project can't allocate the resources, Rancher won't let you save your changes. +**Result:** The resource quota is applied to your project and namespaces. When you add more namespaces in the future, Rancher validates that the project can accommodate the namespace. If the project can't allocate the resources, you may still create namespaces, but they will be given a resource quota of 0. Subsequently, Rancher will not allow you to create any resources restricted by this quota. diff --git a/content/rancher/v2.0-v2.4/en/project-admin/tools/_index.md b/content/rancher/v2.0-v2.4/en/project-admin/tools/_index.md index bdd701e0d31..c1adfb7bc85 100644 --- a/content/rancher/v2.0-v2.4/en/project-admin/tools/_index.md +++ b/content/rancher/v2.0-v2.4/en/project-admin/tools/_index.md @@ -43,4 +43,4 @@ For details on project-level logging, see [this section.](./project-logging) _Available as of v2.2.0_ -Using Rancher, you can monitor the state and processes of your cluster nodes, Kubernetes components, and software deployments through integration with [Prometheus](https://prometheus.io/), a leading open-source monitoring solution. For details, refer to the [monitoring section.]({{}}/rancher/v2.0-v2.4/en/cluster-admin/tools/monitoring) +Using Rancher, you can monitor the state and processes of your cluster nodes, Kubernetes components, and software deployments through integration with [Prometheus](https://prometheus.io/), a leading open-source monitoring solution. For details, refer to the [monitoring section.]({{}}/rancher/v2.0-v2.4/en/cluster-admin/tools/cluster-monitoring) diff --git a/content/rancher/v2.0-v2.4/en/quick-start-guide/deployment/amazon-aws-qs/_index.md b/content/rancher/v2.0-v2.4/en/quick-start-guide/deployment/amazon-aws-qs/_index.md index 9c45743601b..92e07f38fc3 100644 --- a/content/rancher/v2.0-v2.4/en/quick-start-guide/deployment/amazon-aws-qs/_index.md +++ b/content/rancher/v2.0-v2.4/en/quick-start-guide/deployment/amazon-aws-qs/_index.md @@ -5,6 +5,8 @@ weight: 100 --- The following steps will quickly deploy a Rancher Server on AWS with a single node cluster attached. +>**Note:** The intent of these guides is to quickly launch a sandbox that you can use to evaluate Rancher. These guides are not intended for production environments. For comprehensive setup instructions, see [Installation]({{}}/rancher/v2.0-v2.4/en/installation/). + ## Prerequisites >**Note** diff --git a/content/rancher/v2.0-v2.4/en/quick-start-guide/deployment/digital-ocean-qs/_index.md b/content/rancher/v2.0-v2.4/en/quick-start-guide/deployment/digital-ocean-qs/_index.md index 0f11b237ccf..06f557f5c88 100644 --- a/content/rancher/v2.0-v2.4/en/quick-start-guide/deployment/digital-ocean-qs/_index.md +++ b/content/rancher/v2.0-v2.4/en/quick-start-guide/deployment/digital-ocean-qs/_index.md @@ -5,6 +5,8 @@ weight: 100 --- The following steps will quickly deploy a Rancher Server on DigitalOcean with a single node cluster attached. +>**Note:** The intent of these guides is to quickly launch a sandbox that you can use to evaluate Rancher. These guides are not intended for production environments. For comprehensive setup instructions, see [Installation]({{}}/rancher/v2.0-v2.4/en/installation/). + ## Prerequisites >**Note** diff --git a/content/rancher/v2.0-v2.4/en/quick-start-guide/deployment/google-gcp-qs/_index.md b/content/rancher/v2.0-v2.4/en/quick-start-guide/deployment/google-gcp-qs/_index.md index 0eeb4a5624d..31911cc0af8 100644 --- a/content/rancher/v2.0-v2.4/en/quick-start-guide/deployment/google-gcp-qs/_index.md +++ b/content/rancher/v2.0-v2.4/en/quick-start-guide/deployment/google-gcp-qs/_index.md @@ -5,6 +5,8 @@ weight: 100 --- The following steps will quickly deploy a Rancher server on GCP in a single-node RKE Kubernetes cluster, with a single-node downstream Kubernetes cluster attached. +>**Note:** The intent of these guides is to quickly launch a sandbox that you can use to evaluate Rancher. These guides are not intended for production environments. For comprehensive setup instructions, see [Installation]({{}}/rancher/v2.0-v2.4/en/installation/). + ## Prerequisites >**Note** diff --git a/content/rancher/v2.0-v2.4/en/quick-start-guide/deployment/microsoft-azure-qs/_index.md b/content/rancher/v2.0-v2.4/en/quick-start-guide/deployment/microsoft-azure-qs/_index.md index 663c03edc1b..448549c6778 100644 --- a/content/rancher/v2.0-v2.4/en/quick-start-guide/deployment/microsoft-azure-qs/_index.md +++ b/content/rancher/v2.0-v2.4/en/quick-start-guide/deployment/microsoft-azure-qs/_index.md @@ -6,6 +6,8 @@ weight: 100 The following steps will quickly deploy a Rancher server on Azure in a single-node RKE Kubernetes cluster, with a single-node downstream Kubernetes cluster attached. +>**Note:** The intent of these guides is to quickly launch a sandbox that you can use to evaluate Rancher. These guides are not intended for production environments. For comprehensive setup instructions, see [Installation]({{}}/rancher/v2.0-v2.4/en/installation/). + ## Prerequisites >**Note** diff --git a/content/rancher/v2.0-v2.4/en/quick-start-guide/deployment/quickstart-manual-setup/_index.md b/content/rancher/v2.0-v2.4/en/quick-start-guide/deployment/quickstart-manual-setup/_index.md index 33d31c1b52c..753006eb6b6 100644 --- a/content/rancher/v2.0-v2.4/en/quick-start-guide/deployment/quickstart-manual-setup/_index.md +++ b/content/rancher/v2.0-v2.4/en/quick-start-guide/deployment/quickstart-manual-setup/_index.md @@ -8,6 +8,8 @@ Howdy Partner! This tutorial walks you through: - Creation of your first cluster - Deployment of an application, Nginx +>**Note:** The intent of these guides is to quickly launch a sandbox that you can use to evaluate Rancher. These guides are not intended for production environments. For comprehensive setup instructions, see [Installation]({{}}/rancher/v2.0-v2.4/en/installation/). + ## Quick Start Outline This Quick Start Guide is divided into different tasks for easier consumption. @@ -96,13 +98,13 @@ In this task, you can use the versatile **Custom** option. This option lets you 11. When you finish running the command on your Linux host, click **Done**. -**Result:** +**Result:** Your cluster is created and assigned a state of **Provisioning.** Rancher is standing up your cluster. You can access your cluster after its state is updated to **Active.** -**Active** clusters are assigned two Projects: +**Active** clusters are assigned two Projects: - `Default`, containing the `default` namespace - `System`, containing the `cattle-system`, `ingress-nginx`, `kube-public`, and `kube-system` namespaces diff --git a/content/rancher/v2.0-v2.4/en/quick-start-guide/deployment/quickstart-vagrant/_index.md b/content/rancher/v2.0-v2.4/en/quick-start-guide/deployment/quickstart-vagrant/_index.md index 933a94ce66b..a996135f282 100644 --- a/content/rancher/v2.0-v2.4/en/quick-start-guide/deployment/quickstart-vagrant/_index.md +++ b/content/rancher/v2.0-v2.4/en/quick-start-guide/deployment/quickstart-vagrant/_index.md @@ -4,6 +4,8 @@ weight: 200 --- The following steps quickly deploy a Rancher Server with a single node cluster attached. +>**Note:** The intent of these guides is to quickly launch a sandbox that you can use to evaluate Rancher. These guides are not intended for production environments. For comprehensive setup instructions, see [Installation]({{}}/rancher/v2.0-v2.4/en/installation/). + ## Prerequisites - [Vagrant](https://www.vagrantup.com): Vagrant is required as this is used to provision the machine based on the Vagrantfile. @@ -14,7 +16,7 @@ The following steps quickly deploy a Rancher Server with a single node cluster a - Vagrant will require plugins to create VirtualBox VMs. Install them with the following commands: `vagrant plugin install vagrant-vboxmanage` - + `vagrant plugin install vagrant-vbguest` ## Getting Started diff --git a/content/rancher/v2.0-v2.4/en/troubleshooting/dns/_index.md b/content/rancher/v2.0-v2.4/en/troubleshooting/dns/_index.md index 48a98a37919..169b5d84104 100644 --- a/content/rancher/v2.0-v2.4/en/troubleshooting/dns/_index.md +++ b/content/rancher/v2.0-v2.4/en/troubleshooting/dns/_index.md @@ -158,7 +158,7 @@ kubectl run -i --restart=Never --rm test-${RANDOM} --image=ubuntu --overrides='{ Enabling query logging can be done by enabling the [log plugin](https://coredns.io/plugins/log/) in the Corefile configuration in the configmap `coredns`. You can do so by using `kubectl -n kube-system edit configmap coredns` or use the command below to replace the configuration in place: ``` -kubectl get configmap -n kube-system coredns -o json | kubectl get configmap -n kube-system coredns -o json | sed -e 's_loadbalance_log\\n loadbalance_g' | kubectl apply -f - +kubectl get configmap -n kube-system coredns -o json | sed -e 's_loadbalance_log\\n loadbalance_g' | kubectl apply -f - ``` All queries will now be logged and can be checked using the command in [Check CoreDNS logging](#check-coredns-logging). diff --git a/content/rancher/v2.5/_index.md b/content/rancher/v2.5/_index.md index 89c7c0d8e09..61f266de705 100644 --- a/content/rancher/v2.5/_index.md +++ b/content/rancher/v2.5/_index.md @@ -1,5 +1,5 @@ --- -title: Rancher 2.5.7-2.5.9 +title: Rancher 2.5 weight: 2 showBreadcrumb: false --- diff --git a/content/rancher/v2.5/en/_index.md b/content/rancher/v2.5/en/_index.md index 513fb4d9836..95a369285c1 100644 --- a/content/rancher/v2.5/en/_index.md +++ b/content/rancher/v2.5/en/_index.md @@ -2,7 +2,7 @@ title: "Rancher 2.5" shortTitle: "Rancher 2.5" description: "Rancher adds significant value on top of Kubernetes: managing hundreds of clusters from one interface, centralizing RBAC, enabling monitoring and alerting. Read more." -metaTitle: "Rancher 2.5.7-2.5.9 Docs: What is New?" +metaTitle: "Rancher 2.5 Docs: What is New?" metaDescription: "Rancher 2 adds significant value on top of Kubernetes: managing hundreds of clusters from one interface, centralizing RBAC, enabling monitoring and alerting. Read more." insertOneSix: false weight: 2 diff --git a/content/rancher/v2.5/en/admin-settings/authentication/ad/_index.md b/content/rancher/v2.5/en/admin-settings/authentication/ad/_index.md index 0cce01d449d..2c9c82a4374 100644 --- a/content/rancher/v2.5/en/admin-settings/authentication/ad/_index.md +++ b/content/rancher/v2.5/en/admin-settings/authentication/ad/_index.md @@ -101,7 +101,7 @@ The table below details the parameters for the group schema configuration. | Search Attribute | Attribute used to construct search filters when adding groups to clusters or projects. See description of user schema `Search Attribute`. | | Search Filter | This filter gets applied to the list of groups that is searched when Rancher attempts to add groups to a site access list or tries to add groups to clusters or projects. For example, a group search filter could be (|(cn=group1)(cn=group2)). Note: If the search filter does not use [valid AD search syntax,](https://docs.microsoft.com/en-us/windows/win32/adsi/search-filter-syntax) the list of groups will be empty. | | Group DN Attribute | The name of the group attribute whose format matches the values in the user attribute describing a the user's memberships. See `User Member Attribute`. | -| Nested Group Membership | This settings defines whether Rancher should resolve nested group memberships. Use only if your organisation makes use of these nested memberships (ie. you have groups that contain other groups as members. We advise avoiding nested groups when possible). | +| Nested Group Membership | This settings defines whether Rancher should resolve nested group memberships. Use only if your organization makes use of these nested memberships (i.e., you have groups that contain other groups as members. We advise avoiding nested groups when possible). | --- @@ -153,7 +153,7 @@ This command performs an LDAP search with the search base set to the domain root Since in this case the user's DN is `CN=John Doe,CN=Users,DC=acme,DC=com` [5], we should configure the **User Search Base** with the parent node DN `CN=Users,DC=acme,DC=com`. -Similarly, based on the DN of the group referenced in the **memberOf** attribute [4], the correct value for the **Group Search Base** would be the parent node of that value, ie. `OU=Groups,DC=acme,DC=com`. +Similarly, based on the DN of the group referenced in the **memberOf** attribute [4], the correct value for the **Group Search Base** would be the parent node of that value, i.e., `OU=Groups,DC=acme,DC=com`. ### Identify User Schema @@ -166,7 +166,7 @@ The output of the above `ldapsearch` query also allows to determine the correct > **Note:** > -> If the AD users in our organisation were to authenticate with their UPN (e.g. jdoe@acme.com) instead of the short logon name, then we would have to set the `Login Attribute` to **userPrincipalName** instead. +> If the AD users in our organization were to authenticate with their UPN (e.g. jdoe@acme.com) instead of the short logon name, then we would have to set the `Login Attribute` to **userPrincipalName** instead. We'll also set the `Search Attribute` parameter to **sAMAccountName|name**. That way users can be added to clusters/projects in the Rancher UI either by entering their username or full name. diff --git a/content/rancher/v2.5/en/admin-settings/authentication/keycloak/_index.md b/content/rancher/v2.5/en/admin-settings/authentication/keycloak/_index.md index 95a37c00e2f..e4e75f36477 100644 --- a/content/rancher/v2.5/en/admin-settings/authentication/keycloak/_index.md +++ b/content/rancher/v2.5/en/admin-settings/authentication/keycloak/_index.md @@ -25,36 +25,87 @@ If your organization uses Keycloak Identity Provider (IdP) for user authenticati >1: Optionally, you can enable either one or both of these settings. >2: Rancher SAML metadata won't be generated until a SAML provider is configured and saved. - + {{< img "/img/rancher/keycloak/keycloak-saml-client-configuration.png" "">}} - + - In the new SAML client, create Mappers to expose the users fields - Add all "Builtin Protocol Mappers" {{< img "/img/rancher/keycloak/keycloak-saml-client-builtin-mappers.png" "">}} - Create a new "Group list" mapper to map the member attribute to a user's groups - {{< img "/img/rancher/keycloak/keycloak-saml-client-group-mapper.png" "">}} -- Export a `metadata.xml` file from your Keycloak client: - From the `Installation` tab, choose the `SAML Metadata IDPSSODescriptor` format option and download your file. - - >**Note** - > Keycloak versions 6.0.0 and up no longer provide the IDP metadata under the `Installation` tab. - > You can still get the XML from the following url: - > - > `https://{KEYCLOAK-URL}/auth/realms/{REALM-NAME}/protocol/saml/descriptor` - > - > The XML obtained from this URL contains `EntitiesDescriptor` as the root element. Rancher expects the root element to be `EntityDescriptor` rather than `EntitiesDescriptor`. So before passing this XML to Rancher, follow these steps to adjust it: - > - > * Copy all the attributes from `EntitiesDescriptor` to the `EntityDescriptor` that are not present. - > * Remove the `` tag from the beginning. - > * Remove the `` from the end of the xml. - > - > You are left with something similar as the example below: - > - > ``` - > - > .... - > - > ``` + {{< img "/img/rancher/keycloak/keycloak-saml-client-group-mapper.png" "">}} + +## Getting the IDP Metadata + +{{% tabs %}} +{{% tab "Keycloak 5 and earlier" %}} +To get the IDP metadata, export a `metadata.xml` file from your Keycloak client. +From the **Installation** tab, choose the **SAML Metadata IDPSSODescriptor** format option and download your file. +{{% /tab %}} +{{% tab "Keycloak 6-13" %}} + +1. From the **Configure** section, click the **Realm Settings** tab. +1. Click the **General** tab. +1. From the **Endpoints** field, click **SAML 2.0 Identity Provider Metadata**. + +Verify the IDP metadata contains the following attributes: + +``` +xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" +xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" +xmlns:ds="http://www.w3.org/2000/09/xmldsig#" +``` + +Some browsers, such as Firefox, may render/process the document such that the contents appear to have been modified, and some attributes appear to be missing. In this situation, use the raw response data that can be found using your browser. + +The following is an example process for Firefox, but will vary slightly for other browsers: + +1. Press **F12** to access the developer console. +1. Click the **Network** tab. +1. From the table, click the row containing `descriptor`. +1. From the details pane, click the **Response** tab. +1. Copy the raw response data. + +The XML obtained contains `EntitiesDescriptor` as the root element. Rancher expects the root element to be `EntityDescriptor` rather than `EntitiesDescriptor`. So before passing this XML to Rancher, follow these steps to adjust it: + +1. Copy all the attributes from `EntitiesDescriptor` to the `EntityDescriptor` that are not present. +1. Remove the `` tag from the beginning. +1. Remove the `` from the end of the xml. + +You are left with something similar as the example below: + +``` + +.... + +``` + +{{% /tab %}} +{{% tab "Keycloak 14+" %}} + +1. From the **Configure** section, click the **Realm Settings** tab. +1. Click the **General** tab. +1. From the **Endpoints** field, click **SAML 2.0 Identity Provider Metadata**. + +Verify the IDP metadata contains the following attributes: + +``` +xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" +xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" +xmlns:ds="http://www.w3.org/2000/09/xmldsig#" +``` + +Some browsers, such as Firefox, may render/process the document such that the contents appear to have been modified, and some attributes appear to be missing. In this situation, use the raw response data that can be found using your browser. + +The following is an example process for Firefox, but will vary slightly for other browsers: + +1. Press **F12** to access the developer console. +1. Click the **Network** tab. +1. From the table, click the row containing `descriptor`. +1. From the details pane, click the **Response** tab. +1. Copy the raw response data. + +{{% /tab %}} +{{% /tabs %}} ## Configuring Keycloak in Rancher diff --git a/content/rancher/v2.5/en/admin-settings/authentication/ping-federate/_index.md b/content/rancher/v2.5/en/admin-settings/authentication/ping-federate/_index.md index 87abce2b877..525717bb7b9 100644 --- a/content/rancher/v2.5/en/admin-settings/authentication/ping-federate/_index.md +++ b/content/rancher/v2.5/en/admin-settings/authentication/ping-federate/_index.md @@ -30,6 +30,8 @@ Note that these URLs will not return valid data until the authentication configu 1. **Groups Field**: Make entries for managing group memberships (example: `memberOf`). + 1. **Entity ID Field** (optional): The published, protocol-dependent, unique identifier of your partner. This ID defines your organization as the entity operating the server for SAML 2.0 transactions. This ID may have been obtained out-of-band or via a SAML metadata file. + 1. **Rancher API Host**: Enter the URL for your Rancher Server. 1. **Private Key** and **Certificate**: This is a key-certificate pair to create a secure shell between Rancher and your IdP. diff --git a/content/rancher/v2.5/en/admin-settings/config-private-registry/_index.md b/content/rancher/v2.5/en/admin-settings/config-private-registry/_index.md index 378d84aea5f..d9b05763201 100644 --- a/content/rancher/v2.5/en/admin-settings/config-private-registry/_index.md +++ b/content/rancher/v2.5/en/admin-settings/config-private-registry/_index.md @@ -5,7 +5,7 @@ aliases: - /rancher/v2.x/en/admin-settings/config-private-registry/ --- -You might want to use a private Docker registry to share your custom base images within your organization. With a private registry, you can keep a private, consistent, and centralized source of truth for the Docker images that are used in your clusters. +You might want to use a private container registry to share your custom base images within your organization. With a private registry, you can keep a private, consistent, and centralized source of truth for the container images that are used in your clusters. There are two main ways to set up private registries in Rancher: by setting up the global default registry through the **Settings** tab in the global view, and by setting up a private registry in the advanced options in the cluster-level settings. The global default registry is intended to be used for air-gapped setups, for registries that do not require credentials. The cluster-level private registry is intended to be used in all setups in which the private registry requires credentials. diff --git a/content/rancher/v2.5/en/admin-settings/rbac/cluster-project-roles/_index.md b/content/rancher/v2.5/en/admin-settings/rbac/cluster-project-roles/_index.md index 6c82e42e726..4996f82ab54 100644 --- a/content/rancher/v2.5/en/admin-settings/rbac/cluster-project-roles/_index.md +++ b/content/rancher/v2.5/en/admin-settings/rbac/cluster-project-roles/_index.md @@ -86,6 +86,10 @@ _Project roles_ are roles that can be used to grant users access to a project. T These users can manage project-scoped resources like namespaces and workloads, but cannot manage other project members. + >**Note:** + > + >By default, the Rancher role of `project-member` inherits from the `Kubernetes-edit` role, and the `project-owner` role inherits from the `Kubernetes-admin` role. As such, both `project-member` and `project-owner` roles will allow for namespace management, including the ability to create and delete namespaces. + - **Read Only:** These users can view everything in the project but cannot create, update, or delete anything. @@ -94,7 +98,6 @@ _Project roles_ are roles that can be used to grant users access to a project. T > >Users assigned the `Owner` or `Member` role for a project automatically inherit the `namespace creation` role. However, this role is a [Kubernetes ClusterRole](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#role-and-clusterrole), meaning its scope extends to all projects in the cluster. Therefore, users explicitly assigned the `owner` or `member` role for a project can create namespaces in other projects they're assigned to, even with only the `Read Only` role assigned. - #### Custom Project Roles Rancher lets you assign _custom project roles_ to a standard user instead of the typical `Owner`, `Member`, or `Read Only` roles. These roles can be either a built-in custom project role or one defined by a Rancher administrator. They are convenient for defining narrow or specialized access for a standard user within a project. See the table below for a list of built-in custom project roles. diff --git a/content/rancher/v2.5/en/api/_index.md b/content/rancher/v2.5/en/api/_index.md index c6c3fdb63e3..a36f5f9fea2 100644 --- a/content/rancher/v2.5/en/api/_index.md +++ b/content/rancher/v2.5/en/api/_index.md @@ -52,3 +52,17 @@ Most collections can be sorted on the server-side by common fields using HTTP qu ## Pagination API responses are paginated with a limit of 100 resources per page by default. This can be changed with the `limit` query parameter, up to a maximum of 1000, e.g. `/v3/pods?limit=1000`. The `pagination` map in collection responses tells you whether or not you have the full result set and has a link to the next page if you do not. + +## Capturing Rancher API Calls + +You can use browser developer tools to capture how the Rancher API is called. For example, you could follow these steps to use the Chrome developer tools to get the API call for provisioning an RKE cluster: + +1. In the Rancher UI, go to **Cluster Management** and click **Create.** +1. Click one of the cluster types. This example uses Digital Ocean. +1. Fill out the form with a cluster name and node template, but don't click **Create**. +1. You will need to open the developer tools before the cluster creation to see the API call being recorded. To open the tools, right-click on the Rancher UI and click **Inspect.** +1. In the developer tools, click the **Network** tab. +1. On the **Network** tab, make sure **Fetch/XHR** is selected. +1. In the Rancher UI, click **Create**. In the developer tools, you should see a new network request with the name `cluster?_replace=true`. +1. Right-click `cluster?_replace=true` and click **Copy > Copy as cURL.** +1. Paste the result into any text editor. You will be able to see the POST request, including the URL it was sent to, all of the headers, and the full body of the request. This command can be used to create a cluster from the command line. Note: The request should be stored in a safe place because it contains credentials. \ No newline at end of file diff --git a/content/rancher/v2.5/en/backups/_index.md b/content/rancher/v2.5/en/backups/_index.md index 0f765d2d84d..01b07a0db84 100644 --- a/content/rancher/v2.5/en/backups/_index.md +++ b/content/rancher/v2.5/en/backups/_index.md @@ -63,6 +63,8 @@ The Backup and Restore custom resources can be created in the Rancher UI, or by The `rancher-backup` operator can be installed from the Rancher UI, or with the Helm CLI. In both cases, the `rancher-backup` Helm chart is installed on the Kubernetes cluster running the Rancher server. It is a cluster-admin only feature and available only for the **local** cluster. (*If you do not see `rancher-backup` in the Rancher UI, you may have selected the wrong cluster.*) +>**NOTE:** There are two known issues in Fleet that occur after performing a restoration using the backup-restore-operator: Fleet agents are inoperable and clientSecretName and helmSecretName are not included in Fleet gitrepos. Refer [here]({{}}rancher/v2.5/en/deploy-across-clusters/fleet/#troubleshooting) for workarounds. + ### Installing rancher-backup with the Rancher UI 1. In the Rancher UI's Cluster Manager, choose the cluster named **local** diff --git a/content/rancher/v2.5/en/backups/back-up-rancher/_index.md b/content/rancher/v2.5/en/backups/back-up-rancher/_index.md index 51cdf22dfc1..47f57c96e26 100644 --- a/content/rancher/v2.5/en/backups/back-up-rancher/_index.md +++ b/content/rancher/v2.5/en/backups/back-up-rancher/_index.md @@ -7,11 +7,13 @@ aliases: - /rancher/v2.x/en/backups/v2.5/back-up-rancher/ --- -In this section, you'll learn how to back up Rancher running on any Kubernetes cluster. To backup Rancher installed with Docker, refer the instructions for [single node backups]({{}}/rancher/v2.5/en/backups/v2.5/docker-installs/docker-backups) +In this section, you'll learn how to back up Rancher running on any Kubernetes cluster. To backup Rancher installed with Docker, refer to the instructions for [single node backups]({{}}/rancher/v2.5/en/backups/v2.5/docker-installs/docker-backups). The backup-restore operator needs to be installed in the local cluster, and only backs up the Rancher app. The backup and restore operations are performed only in the local Kubernetes cluster. -> When restoring a backup into a new Rancher setup, the version of the new setup should be the same as the one where the backup is made. +Note that the rancher-backup operator version 1.x.x is for Rancher v2.5.x. + +> When restoring a backup into a new Rancher setup, the version of the new setup should be the same as the one where the backup is made. The Kubernetes version should also be considered when restoring a backup, since the supported apiVersion in the cluster and in the backup file could be different. ### Prerequisites @@ -28,6 +30,8 @@ Backups are created as .tar.gz files. These files can be pushed to S3 or Minio, 1. Click **Rancher Backups.** 1. Configure the default storage location. For help, refer to the [storage configuration section.](../configuration/storage-config) +>**NOTE:** There are two known issues in Fleet that occur after performing a restoration using the backup-restore-operator: Fleet agents are inoperable and clientSecretName and helmSecretName are not included in Fleet gitrepos. Refer [here]({{}}/rancher/v2.5/en/deploy-across-clusters/fleet/#troubleshooting) for workarounds. + ### 2. Perform a Backup To perform a backup, a custom resource of type Backup must be created. diff --git a/content/rancher/v2.5/en/backups/migrating-rancher/_index.md b/content/rancher/v2.5/en/backups/migrating-rancher/_index.md index 1fc70aee590..e84fe21de1b 100644 --- a/content/rancher/v2.5/en/backups/migrating-rancher/_index.md +++ b/content/rancher/v2.5/en/backups/migrating-rancher/_index.md @@ -21,13 +21,19 @@ Rancher can be installed on any Kubernetes cluster, including hosted Kubernetes - [K3s Kubernetes installation docs]({{}}/k3s/latest/en/installation/) ### 1. Install the rancher-backup Helm chart -Install version 1.x.x of the rancher-backup chart. +Install version 1.x.x of the rancher-backup chart. The following assumes a connected environment with access to DockerHub: + ``` helm repo add rancher-charts https://charts.rancher.io helm repo update helm install rancher-backup-crd rancher-charts/rancher-backup-crd -n cattle-resources-system --create-namespace --version $CHART_VERSION helm install rancher-backup rancher-charts/rancher-backup -n cattle-resources-system --version $CHART_VERSION ``` +
+For an **air-gapped environment**, use the option below to pull the `backup-restore-operator` image from your private registry when installing the rancher-backup-crd helm chart. +``` +--set image.repository $REGISTRY/rancher/backup-restore-operator +``` ### 2. Restore from backup using a Restore custom resource @@ -70,20 +76,19 @@ spec: endpoint: s3.us-west-2.amazonaws.com ``` -> **Important:** The field `encryptionConfigSecretName` must be set only if your backup was created with encryption enabled. Provide the name of the Secret containing the encryption config file. If you only have the encryption config file, but don't have a secret created with it in this cluster, use the following steps to create the secret: -1. The encryption configuration file must be named `encryption-provider-config.yaml`, and the `--from-file` flag must be used to create this secret. So save your `EncryptionConfiguration` in a file called `encryption-provider-config.yaml` and run this command: +>**Important:** The field `encryptionConfigSecretName` must be set only if your backup was created with encryption enabled. Provide the name of the Secret containing the encryption config file. If you only have the encryption config file, but don't have a secret created with it in this cluster, use the following steps to create the secret: -``` -kubectl create secret generic encryptionconfig \ - --from-file=./encryption-provider-config.yaml \ - -n cattle-resources-system -``` - -Then apply the resource: - -``` -kubectl apply -f migrationResource.yaml -``` +1. The encryption configuration file must be named `encryption-provider-config.yaml`, and the `--from-file` flag must be used to create this secret. So save your `EncryptionConfiguration` in a file called `encryption-provider-config.yaml` and run this command: + ``` + kubectl create secret generic encryptionconfig \ + --from-file=./encryption-provider-config.yaml \ + -n cattle-resources-system + ``` + +1. Then apply the resource: + ``` + kubectl apply -f migrationResource.yaml + ``` ### 3. Install cert-manager diff --git a/content/rancher/v2.5/en/best-practices/rancher-server/deployment-types/_index.md b/content/rancher/v2.5/en/best-practices/rancher-server/deployment-types/_index.md index f32518a92f7..f7ba5e5f02e 100644 --- a/content/rancher/v2.5/en/best-practices/rancher-server/deployment-types/_index.md +++ b/content/rancher/v2.5/en/best-practices/rancher-server/deployment-types/_index.md @@ -19,7 +19,7 @@ When you set up your high-availability Rancher installation, consider the follow Don't run other workloads or microservices in the Kubernetes cluster that Rancher is installed on. ### Make sure nodes are configured correctly for Kubernetes ### -It's important to follow K8s and etcd best practices when deploying your nodes, including disabling swap, double checking you have full network connectivity between all machines in the cluster, using unique hostnames, MAC addresses, and product_uuids for every node, checking that all correct ports are opened, and deploying with ssd backed etcd. More details can be found in the [kubernetes docs](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/#before-you-begin) and [etcd's performance op guide](https://github.com/etcd-io/etcd/blob/master/Documentation/op-guide/performance.md) +It's important to follow K8s and etcd best practices when deploying your nodes, including disabling swap, double checking you have full network connectivity between all machines in the cluster, using unique hostnames, MAC addresses, and product_uuids for every node, checking that all correct ports are opened, and deploying with ssd backed etcd. More details can be found in the [kubernetes docs](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/#before-you-begin) and [etcd's performance op guide](https://etcd.io/docs/v3.4/op-guide/performance/). ### When using RKE: Back up the Statefile RKE keeps record of the cluster state in a file called `cluster.rkestate`. This file is important for the recovery of a cluster and/or the continued maintenance of the cluster through RKE. Because this file contains certificate material, we strongly recommend encrypting this file before backing up. After each run of `rke up` you should backup the state file. diff --git a/content/rancher/v2.5/en/best-practices/rancher-server/rancher-in-vsphere/_index.md b/content/rancher/v2.5/en/best-practices/rancher-server/rancher-in-vsphere/_index.md index 9b987726412..d3db6045085 100644 --- a/content/rancher/v2.5/en/best-practices/rancher-server/rancher-in-vsphere/_index.md +++ b/content/rancher/v2.5/en/best-practices/rancher-server/rancher-in-vsphere/_index.md @@ -53,7 +53,7 @@ https://rancher.com/docs/rancher/v2.5/en/installation/requirements/ ### Leverage VM Templates to Construct the Environment -To facilitate consistency across the deployed Virtual Machines across the environment, consider the use of "Golden Images" in the form of VM templates. Packer can be used to accomplish this, adding greater customisation options. +To facilitate the consistency of Virtual Machines deployed across the environment, consider the use of "Golden Images" in the form of VM templates. Packer can be used to accomplish this, adding greater customization options. ### Leverage DRS Anti-Affinity Rules (Where Possible) to Separate Rancher Cluster Nodes Across ESXi Hosts diff --git a/content/rancher/v2.5/en/cli/_index.md b/content/rancher/v2.5/en/cli/_index.md index 0413cdde5ed..6996b6bdf3d 100644 --- a/content/rancher/v2.5/en/cli/_index.md +++ b/content/rancher/v2.5/en/cli/_index.md @@ -1,13 +1,23 @@ --- -title: Using the Rancher Command Line Interface -description: The Rancher CLI is a unified tool that you can use to interact with Rancher. With it, you can operate Rancher using a command line interface rather than the GUI -metaTitle: "Using the Rancher Command Line Interface " -metaDescription: "The Rancher CLI is a unified tool that you can use to interact with Rancher. With it, you can operate Rancher using a command line interface rather than the GUI" +title: CLI with Rancher +description: Interact with Rancher using command line interface (CLI) tools from your workstation. weight: 21 -aliases: - - /rancher/v2.5/en/cluster-admin/cluster-access/cli --- +- [Rancher CLI](#rancher-cli) + - [Download Rancher CLI](#download-rancher-cli) + - [Requirements](#requirements) + - [CLI Authentication](#cli-authentication) + - [Project Selection](#project-selection) + - [Commands](#commands) + - [Rancher CLI Help](#rancher-cli-help) + - [Limitations](#limitations) +- [kubectl](#kubectl) + - [kubectl Utility](#kubectl-utility) + - [Authentication with kubectl and kubeconfig Tokens with TTL](#authentication-with-kubectl-and-kubeconfig-tokens-with-ttl) + +# Rancher CLI + The Rancher CLI (Command Line Interface) is a unified tool that you can use to interact with Rancher. With this tool, you can operate Rancher using a command line rather than the GUI. ### Download Rancher CLI @@ -38,11 +48,11 @@ Before you can perform any commands, you must select a Rancher project to perfor **Example: `./rancher context switch` Output** ``` User:rancher-cli-directory user$ ./rancher context switch -NUMBER CLUSTER NAME PROJECT ID PROJECT NAME -1 cluster-2 c-7q96s:p-h4tmb project-2 -2 cluster-2 c-7q96s:project-j6z6d Default -3 cluster-1 c-lchzv:p-xbpdt project-1 -4 cluster-1 c-lchzv:project-s2mch Default +NUMBER CLUSTER NAME PROJECT ID PROJECT NAME +1 cluster-2 c-7q96s:p-h4tmb project-2 +2 cluster-2 c-7q96s:project-j6z6d Default +3 cluster-1 c-lchzv:p-xbpdt project-1 +4 cluster-1 c-lchzv:project-s2mch Default Select a Project: ``` @@ -53,14 +63,16 @@ INFO[0005] Setting new context to project project-1 INFO[0005] Saving config to /Users/markbishop/.rancher/cli2.json ``` +Ensure you can run `rancher kubectl get pods` successfully. + ### Commands The following commands are available for use in Rancher CLI. | Command | Result | |---|---| -| `apps, [app]` | Performs operations on catalog applications (i.e. individual [Helm charts](https://docs.helm.sh/developing_charts/) or Rancher charts. | -| `catalog` | Performs operations on [catalogs]({{}}/rancher/v2.5/en/catalog/). | +| `apps, [app]` | Performs operations on catalog applications (i.e., individual [Helm charts](https://docs.helm.sh/developing_charts/)) or Rancher charts. | +| `catalog` | Performs operations on [catalogs]({{}}/rancher/v2.5/en/helm-charts/). | | `clusters, [cluster]` | Performs operations on your [clusters]({{}}/rancher/v2.5/en/cluster-provisioning/). | | `context` | Switches between Rancher [projects]({{}}/rancher/v2.5/en/cluster-admin/projects-and-namespaces/). For an example, see [Project Selection](#project-selection). | | `inspect [OPTIONS] [RESOURCEID RESOURCENAME]` | Displays details about [Kubernetes resources](https://kubernetes.io/docs/reference/kubectl/cheatsheet/#resource-types) or Rancher resources (i.e.: [projects]({{}}/rancher/v2.5/en/cluster-admin/projects-and-namespaces/) and [workloads]({{}}/rancher/v2.5/en/k8s-in-rancher/workloads/)). Specify resources by name or ID. | @@ -80,3 +92,38 @@ The following commands are available for use in Rancher CLI. Once logged into Rancher Server using the CLI, enter `./rancher --help` for a list of commands. All commands accept the `--help` flag, which documents each command's usage. + +### Limitations + +The Rancher CLI **cannot** be used to install [dashboard apps or Rancher feature charts](../helm-charts/). + +# kubectl + +Interact with Rancher using kubectl. + +### kubectl Utility + +Install the `kubectl` utility. See [install kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/). + +Configure kubectl by visiting your cluster in the Rancher Web UI, clicking on `Kubeconfig`, copying contents, and putting them into your `~/.kube/config` file. + +Run `kubectl cluster-info` or `kubectl get pods` successfully. + +### Authentication with kubectl and kubeconfig Tokens with TTL + +_Requirements_ + +If admins have [enforced TTL on kubeconfig tokens]({{}}/rancher/v2.5/en/api/api-tokens/#setting-ttl-on-kubeconfig-tokens), the kubeconfig file requires the [Rancher CLI](../cli) to be present in your PATH when you run `kubectl`. Otherwise, you’ll see an error like: +`Unable to connect to the server: getting credentials: exec: exec: "rancher": executable file not found in $PATH`. + +This feature enables kubectl to authenticate with the Rancher server and get a new kubeconfig token when required. The following auth providers are currently supported: + +1. Local +2. Active Directory (LDAP only) +3. FreeIPA +4. OpenLDAP +5. SAML providers: Ping, Okta, ADFS, Keycloak, Shibboleth + +When you first run kubectl, for example, `kubectl get pods`, it will ask you to pick an auth provider and log in with the Rancher server. +The kubeconfig token is cached in the path where you run kubectl under `./.cache/token`. This token is valid until [it expires](../../api/api-tokens/#setting-ttl-on-kubeconfig-tokens-period), or [gets deleted from the Rancher server](../../api/api-tokens/#deleting-tokens). +Upon expiration, the next `kubectl get pods` will ask you to log in with the Rancher server again. diff --git a/content/rancher/v2.5/en/cluster-admin/certificate-rotation/_index.md b/content/rancher/v2.5/en/cluster-admin/certificate-rotation/_index.md index b3f52ad2d3f..168a7e4094b 100644 --- a/content/rancher/v2.5/en/cluster-admin/certificate-rotation/_index.md +++ b/content/rancher/v2.5/en/cluster-admin/certificate-rotation/_index.md @@ -12,9 +12,29 @@ By default, Kubernetes clusters require certificates and Rancher launched Kubern Certificates can be rotated for the following services: - etcd -- kubelet +- kubelet (node certificate) +- kubelet (serving certificate, if [enabled]({{}}/rke/latest/en/config-options/services/#kubelet-options)) - kube-apiserver - kube-proxy - kube-scheduler - kube-controller-manager + +### Certificate Rotation + +Rancher launched Kubernetes clusters have the ability to rotate the auto-generated certificates through the UI. + +1. In the **Global** view, navigate to the cluster that you want to rotate certificates. + +2. Select **⋮ > Rotate Certificates**. + +3. Select which certificates that you want to rotate. + + * Rotate all Service certificates (keep the same CA) + * Rotate an individual service and choose one of the services from the drop-down menu + +4. Click **Save**. + +**Results:** The selected certificates will be rotated and the related services will be restarted to start using the new certificate. + +> **Note:** Even though the RKE CLI can use custom certificates for the Kubernetes cluster components, Rancher currently doesn't allow the ability to upload these in Rancher launched Kubernetes clusters. diff --git a/content/rancher/v2.5/en/cluster-admin/editing-clusters/eks-config-reference/_index.md b/content/rancher/v2.5/en/cluster-admin/editing-clusters/eks-config-reference/_index.md index bb4e31086c1..0ea3ab8ad80 100644 --- a/content/rancher/v2.5/en/cluster-admin/editing-clusters/eks-config-reference/_index.md +++ b/content/rancher/v2.5/en/cluster-admin/editing-clusters/eks-config-reference/_index.md @@ -16,7 +16,7 @@ Complete each drop-down and field using the information obtained for your IAM po | Setting | Description | | ---------- | -------------------------------------------------------------------------------------------------------------------- | | Region | From the drop-down choose the geographical region in which to build your cluster. | -| Cloud Credentials | Select the cloud credentials that you created for your IAM policy. For more information on creating cloud credentials in Rancher, refer to [this page.]({{}}/rancher/v2.x/en/user-settings/cloud-credentials/) | +| Cloud Credentials | Select the cloud credentials that you created for your IAM policy. For more information on creating cloud credentials in Rancher, refer to [this page.]({{}}/rancher/v2.5/en/user-settings/cloud-credentials/) | ### Service Role @@ -186,7 +186,7 @@ Complete each drop-down and field using the information obtained for your IAM po | Setting | Description | | ---------- | -------------------------------------------------------------------------------------------------------------------- | | Region | From the drop-down choose the geographical region in which to build your cluster. | -| Cloud Credentials | Select the cloud credentials that you created for your IAM policy. For more information on creating cloud credentials in Rancher, refer to [this page.]({{}}/rancher/v2.x/en/user-settings/cloud-credentials/) | +| Cloud Credentials | Select the cloud credentials that you created for your IAM policy. For more information on creating cloud credentials in Rancher, refer to [this page.]({{}}/rancher/v2.5/en/user-settings/cloud-credentials/) | ### Service Role diff --git a/content/rancher/v2.5/en/cluster-admin/editing-clusters/gke-config-reference/private-clusters/_index.md b/content/rancher/v2.5/en/cluster-admin/editing-clusters/gke-config-reference/private-clusters/_index.md index d66fdb087bd..9de7dbf3c1d 100644 --- a/content/rancher/v2.5/en/cluster-admin/editing-clusters/gke-config-reference/private-clusters/_index.md +++ b/content/rancher/v2.5/en/cluster-admin/editing-clusters/gke-config-reference/private-clusters/_index.md @@ -25,7 +25,7 @@ If restricting outgoing internet access is not a concern for your organization, >**Note** >This scenario is not officially supported, but is described for cases in which using the Cloud NAT service is not sufficient. -If restricting both incoming and outgoing traffic to nodes is a requirement, follow the air-gapped installation instructions to set up a private container image [registry](https://rancher.com/docs/rancher/v2.x/en/installation/other-installation-methods/air-gap/) on the VPC where the cluster is going to be, allowing the cluster nodes to access and download the images they need to run the cluster agent. If the control plane endpoint is also private, Rancher will need [direct access](#direct-access) to it. +If restricting both incoming and outgoing traffic to nodes is a requirement, follow the air-gapped installation instructions to set up a private container image [registry](https://rancher.com/docs/rancher/v2.5/en/installation/other-installation-methods/air-gap/) on the VPC where the cluster is going to be, allowing the cluster nodes to access and download the images they need to run the cluster agent. If the control plane endpoint is also private, Rancher will need [direct access](#direct-access) to it. ### Private Control Plane Endpoint diff --git a/content/rancher/v2.5/en/cluster-admin/nodes/_index.md b/content/rancher/v2.5/en/cluster-admin/nodes/_index.md index 514ebc67a18..af48e6fa950 100644 --- a/content/rancher/v2.5/en/cluster-admin/nodes/_index.md +++ b/content/rancher/v2.5/en/cluster-admin/nodes/_index.md @@ -42,11 +42,11 @@ The following table lists which node options are available for each type of clus | [Download Keys](#ssh-into-a-node-hosted-by-an-infrastructure-provider) | ✓ | | | | | Download SSH key in order to SSH into the node. | | [Node Scaling](#scaling-nodes) | ✓ | | | ✓ | | Scale the number of nodes in the node pool up or down. | -[1]: {{}}/rancher/v2.x/en/cluster-provisioning/rke-clusters/node-pools/ -[2]: {{}}/rancher/v2.x/en/cluster-provisioning/rke-clusters/custom-nodes/ -[3]: {{}}/rancher/v2.x/en/cluster-provisioning/hosted-kubernetes-clusters/ -[4]: {{}}/rancher/v2.x/en/cluster-provisioning/registered-clusters/ -[5]: {{}}/rancher/v2.x/en/cluster-provisioning/registered-clusters/ +[1]: {{}}/rancher/v2.5/en/cluster-provisioning/rke-clusters/node-pools/ +[2]: {{}}/rancher/v2.5/en/cluster-provisioning/rke-clusters/custom-nodes/ +[3]: {{}}/rancher/v2.5/en/cluster-provisioning/hosted-kubernetes-clusters/ +[4]: {{}}/rancher/v2.5/en/cluster-provisioning/registered-clusters/ +[5]: {{}}/rancher/v2.5/en/cluster-provisioning/registered-clusters/ \* Delete option accessible via View API diff --git a/content/rancher/v2.5/en/cluster-admin/projects-and-namespaces/_index.md b/content/rancher/v2.5/en/cluster-admin/projects-and-namespaces/_index.md index 86c6574c224..493331bc93c 100644 --- a/content/rancher/v2.5/en/cluster-admin/projects-and-namespaces/_index.md +++ b/content/rancher/v2.5/en/cluster-admin/projects-and-namespaces/_index.md @@ -156,6 +156,9 @@ By default, your user is added as the project `Owner`. >**Notes on Permissions:** > >- Users assigned the `Owner` or `Member` role for a project automatically inherit the `namespace creation` role. However, this role is a [Kubernetes ClusterRole](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#role-and-clusterrole), meaning its scope extends to all projects in the cluster. Therefore, users explicitly assigned the `Owner` or `Member` role for a project can create namespaces in other projects they're assigned to, even with only the `Read Only` role assigned. +> +>- By default, the Rancher role of `project-member` inherits from the `Kubernetes-edit` role, and the `project-owner` role inherits from the `Kubernetes-admin` role. As such, both `project-member` and `project-owner` roles will allow for namespace management, including the ability to create and delete namespaces. +> >- Choose `Custom` to create a custom role on the fly: [Custom Project Roles]({{}}/rancher/v2.5/en/admin-settings/rbac/cluster-project-roles/#custom-project-roles). To add members: diff --git a/content/rancher/v2.5/en/cluster-admin/volumes-and-storage/iscsi-volumes/_index.md b/content/rancher/v2.5/en/cluster-admin/volumes-and-storage/iscsi-volumes/_index.md index 1a30d52540d..deaaaac4fc5 100644 --- a/content/rancher/v2.5/en/cluster-admin/volumes-and-storage/iscsi-volumes/_index.md +++ b/content/rancher/v2.5/en/cluster-admin/volumes-and-storage/iscsi-volumes/_index.md @@ -19,9 +19,12 @@ If you encounter this issue, you can work around it by installing the initiator After installing the initiator tool on your nodes, edit the YAML for your cluster, editing the kubelet configuration to mount the iSCSI binary and configuration, as shown in the sample below. ->**Note:** +>**Notes:** +> +>- Before updating your Kubernetes YAML to mount the iSCSI binary and configuration, make sure either the `open-iscsi` (deb) or `iscsi-initiator-utils` (yum) package is installed on your cluster nodes. If this package isn't installed _before_ the bind mounts are created in your Kubernetes YAML, Docker will automatically create the directories and files on each node and will not allow the package install to succeed.
+>
> ->Before updating your Kubernetes YAML to mount the iSCSI binary and configuration, make sure either the `open-iscsi` (deb) or `iscsi-initiator-utils` (yum) package is installed on your cluster nodes. If this package isn't installed _before_ the bind mounts are created in your Kubernetes YAML, Docker will automatically create the directories and files on each node and will not allow the package install to succeed. +>- The example YAML below does not apply to K3s, but only to RKE clusters. Since the K3s kubelet does not run in a container, adding extra binds is not necessary. However, all iSCSI tools must still be installed on your K3s nodes. ``` services: diff --git a/content/rancher/v2.5/en/cluster-provisioning/hosted-kubernetes-clusters/eks/permissions/_index.md b/content/rancher/v2.5/en/cluster-provisioning/hosted-kubernetes-clusters/eks/permissions/_index.md index 0567e110d02..8f4539e1c6f 100644 --- a/content/rancher/v2.5/en/cluster-provisioning/hosted-kubernetes-clusters/eks/permissions/_index.md +++ b/content/rancher/v2.5/en/cluster-provisioning/hosted-kubernetes-clusters/eks/permissions/_index.md @@ -24,6 +24,7 @@ Resource targeting uses `*` as the ARN of many of the resources created cannot b "ec2:RunInstances", "ec2:RevokeSecurityGroupIngress", "ec2:RevokeSecurityGroupEgress", + "ec2:DescribeRegions", "ec2:DescribeVpcs", "ec2:DescribeTags", "ec2:DescribeSubnets", @@ -123,31 +124,6 @@ Resource targeting uses `*` as the ARN of many of the resources created cannot b ### Service Role Permissions -Rancher will create a service role with the following trust policy: - -```json -{ - "Version": "2012-10-17", - "Statement": [ - { - "Action": "sts:AssumeRole", - "Principal": { - "Service": "eks.amazonaws.com" - }, - "Effect": "Allow", - "Sid": "" - } - ] -} -``` - -This role will also have two role policy attachments with the following policies ARNs: - -``` -arn:aws:iam::aws:policy/AmazonEKSClusterPolicy -arn:aws:iam::aws:policy/AmazonEKSServicePolicy -``` - Permissions required for Rancher to create service role on users behalf during the EKS cluster creation process. ```json @@ -182,36 +158,66 @@ Permissions required for Rancher to create service role on users behalf during t } ``` +When an EKS cluster is created, Rancher will create a service role with the following trust policy: + +```json +{ + "Version": "2012-10-17", + "Statement": [ + { + "Action": "sts:AssumeRole", + "Principal": { + "Service": "eks.amazonaws.com" + }, + "Effect": "Allow", + "Sid": "" + } + ] +} +``` + +This role will also have two role policy attachments with the following policies ARNs: + +``` +arn:aws:iam::aws:policy/AmazonEKSClusterPolicy +arn:aws:iam::aws:policy/AmazonEKSServicePolicy +``` + ### VPC Permissions Permissions required for Rancher to create VPC and associated resources. ```json { - "Sid": "VPCPermissions", - "Effect": "Allow", - "Action": [ - "ec2:ReplaceRoute", - "ec2:ModifyVpcAttribute", - "ec2:ModifySubnetAttribute", - "ec2:DisassociateRouteTable", - "ec2:DetachInternetGateway", - "ec2:DescribeVpcs", - "ec2:DeleteVpc", - "ec2:DeleteTags", - "ec2:DeleteSubnet", - "ec2:DeleteRouteTable", - "ec2:DeleteRoute", - "ec2:DeleteInternetGateway", - "ec2:CreateVpc", - "ec2:CreateSubnet", - "ec2:CreateSecurityGroup", - "ec2:CreateRouteTable", - "ec2:CreateRoute", - "ec2:CreateInternetGateway", - "ec2:AttachInternetGateway", - "ec2:AssociateRouteTable" - ], - "Resource": "*" + "Version": "2012-10-17", + "Statement": [ + { + "Sid": "VPCPermissions", + "Effect": "Allow", + "Action": [ + "ec2:ReplaceRoute", + "ec2:ModifyVpcAttribute", + "ec2:ModifySubnetAttribute", + "ec2:DisassociateRouteTable", + "ec2:DetachInternetGateway", + "ec2:DescribeVpcs", + "ec2:DeleteVpc", + "ec2:DeleteTags", + "ec2:DeleteSubnet", + "ec2:DeleteRouteTable", + "ec2:DeleteRoute", + "ec2:DeleteInternetGateway", + "ec2:CreateVpc", + "ec2:CreateSubnet", + "ec2:CreateSecurityGroup", + "ec2:CreateRouteTable", + "ec2:CreateRoute", + "ec2:CreateInternetGateway", + "ec2:AttachInternetGateway", + "ec2:AssociateRouteTable" + ], + "Resource": "*" + } + ] } -``` \ No newline at end of file +``` diff --git a/content/rancher/v2.5/en/cluster-provisioning/node-requirements/_index.md b/content/rancher/v2.5/en/cluster-provisioning/node-requirements/_index.md index 54e83ca885d..3daf9c0cb8f 100644 --- a/content/rancher/v2.5/en/cluster-provisioning/node-requirements/_index.md +++ b/content/rancher/v2.5/en/cluster-provisioning/node-requirements/_index.md @@ -32,6 +32,13 @@ For information on how to install Docker, refer to the official [Docker document Some distributions of Linux derived from RHEL, including Oracle Linux, may have default firewall rules that block communication with Helm. We recommend disabling firewalld. For Kubernetes 1.19, firewalld must be turned off. +>**Note:** In RHEL 8.4, two extra services are included on the NetworkManager: `nm-cloud-setup.service` and `nm-cloud-setup.timer`. These services add a routing table that interferes with the CNI plugin's configuration. If these services are enabled, you must disable them using the command below, and then reboot the node to restore connectivity: +> +> ``` + systemctl disable nm-cloud-setup.service nm-cloud-setup.timer + reboot + ``` + ### SUSE Linux Nodes SUSE Linux may have a firewall that blocks all ports by default. In that situation, follow [these steps]({{}}/rancher/v2.5/en/installation/requirements/ports/#opening-suse-linux-ports) to open the ports needed for adding a host to a custom cluster. diff --git a/content/rancher/v2.5/en/cluster-provisioning/registered-clusters/_index.md b/content/rancher/v2.5/en/cluster-provisioning/registered-clusters/_index.md index 8791b91df96..0e1ee65c004 100644 --- a/content/rancher/v2.5/en/cluster-provisioning/registered-clusters/_index.md +++ b/content/rancher/v2.5/en/cluster-provisioning/registered-clusters/_index.md @@ -20,6 +20,17 @@ The control that Rancher has to manage a registered cluster depends on the type # Prerequisites +{{% tabs %}} +{{% tab "v2.5.9+" %}} + +### Kubernetes Node Roles + +Registered RKE Kubernetes clusters must have all three node roles - etcd, controlplane and worker. A cluster with only controlplane components cannot be registered in Rancher. + +For more information on RKE node roles, see the [best practices.]({{}}/rancher/v2.5/en/cluster-provisioning/production/#cluster-architecture) + +### Permissions + If your existing Kubernetes cluster already has a `cluster-admin` role defined, you must have this `cluster-admin` privilege to register the cluster in Rancher. In order to apply the privilege, you need to run: @@ -36,6 +47,38 @@ By default, GKE users are not given this privilege, so you will need to run the If you are registering a K3s cluster, make sure the `cluster.yml` is readable. It is protected by default. For details, refer to [Configuring a K3s cluster to enable importation to Rancher.](#configuring-a-k3s-cluster-to-enable-registration-in-rancher) +### EKS Clusters + +EKS clusters must have at least one managed node group to be imported into Rancher or provisioned from Rancher successfully. + +{{% /tab %}} +{{% tab "Rancher before v2.5.9" %}} + +### Permissions + +If your existing Kubernetes cluster already has a `cluster-admin` role defined, you must have this `cluster-admin` privilege to register the cluster in Rancher. + +In order to apply the privilege, you need to run: + +```plain +kubectl create clusterrolebinding cluster-admin-binding \ + --clusterrole cluster-admin \ + --user [USER_ACCOUNT] +``` + +before running the `kubectl` command to register the cluster. + +By default, GKE users are not given this privilege, so you will need to run the command before registering GKE clusters. To learn more about role-based access control for GKE, please click [here](https://cloud.google.com/kubernetes-engine/docs/how-to/role-based-access-control). + +If you are registering a K3s cluster, make sure the `cluster.yml` is readable. It is protected by default. For details, refer to [Configuring a K3s cluster to enable importation to Rancher.](#configuring-a-k3s-cluster-to-enable-registration-in-rancher) + +### EKS Clusters + +EKS clusters must have at least one managed node group to be imported into Rancher or provisioned from Rancher successfully. + +{{% /tab %}} +{{% /tabs %}} + # Registering a Cluster 1. From the **Clusters** page, click **Add Cluster**. @@ -76,6 +119,34 @@ The option can also be specified using the environment variable `K3S_KUBECONFIG_ $ curl -sfL https://get.k3s.io | K3S_KUBECONFIG_MODE="644" sh -s - ``` +### Configuring an Imported EKS Cluster with Terraform + +You should define **only** the minimum fields that Rancher requires when importing an EKS cluster with Terraform. This is important as Rancher will overwrite what was in the EKS cluster with any config that the user has provided. + +>**Warning:** Even a small difference between the current EKS cluster and a user-provided config could have unexpected results. + +The minimum config fields required by Rancher to import EKS clusters with Terraform using `eks_config_v2` are as follows: + +- cloud_credential_id +- name +- region +- imported (this field should always be set to `true` for imported clusters) + +Example YAML configuration for imported EKS clusters: + +``` +resource "rancher2_cluster" "my-eks-to-import" { + name = "my-eks-to-import" + description = "Terraform EKS Cluster" + eks_config_v2 { + cloud_credential_id = rancher2_cloud_credential.aws.id + name = var.aws_eks_name + region = var.aws_region + imported = true + } +} +``` + # Management Capabilities for Registered Clusters The control that Rancher has to manage a registered cluster depends on the type of cluster. diff --git a/content/rancher/v2.5/en/cluster-provisioning/rke-clusters/cloud-providers/_index.md b/content/rancher/v2.5/en/cluster-provisioning/rke-clusters/cloud-providers/_index.md index 82f660865e9..2679bbe634b 100644 --- a/content/rancher/v2.5/en/cluster-provisioning/rke-clusters/cloud-providers/_index.md +++ b/content/rancher/v2.5/en/cluster-provisioning/rke-clusters/cloud-providers/_index.md @@ -6,7 +6,7 @@ aliases: - /rancher/v2.5/en/cluster-provisioning/rke-clusters/options/cloud-providers - /rancher/v2.x/en/cluster-provisioning/rke-clusters/cloud-providers/ --- -A _cloud provider_ is a module in Kubernetes that provides an interface for managing nodes, load balancers, and networking routes. For more information, refer to the [official Kubernetes documentation on cloud providers.](https://kubernetes.io/docs/concepts/cluster-administration/cloud-providers/) +A _cloud provider_ is a module in Kubernetes that provides an interface for managing nodes, load balancers, and networking routes. When a cloud provider is set up in Rancher, the Rancher server can automatically provision new nodes, load balancers or persistent storage devices when launching Kubernetes definitions, if the cloud provider you're using supports such automation. @@ -39,9 +39,9 @@ For details on enabling the vSphere cloud provider, refer to [this page.](./vsph ### Setting up a Custom Cloud Provider -The `Custom` cloud provider is available if you want to configure any [Kubernetes cloud provider](https://kubernetes.io/docs/concepts/cluster-administration/cloud-providers/). +The `Custom` cloud provider is available if you want to configure any Kubernetes cloud provider. -For the custom cloud provider option, you can refer to the [RKE docs]({{}}/rke/latest/en/config-options/cloud-providers/) on how to edit the yaml file for your specific cloud provider. There are specific cloud providers that have more detailed configuration : +For the custom cloud provider option, you can refer to the [RKE docs]({{}}/rke/latest/en/config-options/cloud-providers/) on how to edit the yaml file for your specific cloud provider. There are specific cloud providers that have more detailed configuration: * [vSphere]({{}}/rke/latest/en/config-options/cloud-providers/vsphere/) * [OpenStack]({{}}/rke/latest/en/config-options/cloud-providers/openstack/) diff --git a/content/rancher/v2.5/en/cluster-provisioning/rke-clusters/cloud-providers/vsphere/out-of-tree/_index.md b/content/rancher/v2.5/en/cluster-provisioning/rke-clusters/cloud-providers/vsphere/out-of-tree/_index.md index 33c3a39e9d8..545d87e0f49 100644 --- a/content/rancher/v2.5/en/cluster-provisioning/rke-clusters/cloud-providers/vsphere/out-of-tree/_index.md +++ b/content/rancher/v2.5/en/cluster-provisioning/rke-clusters/cloud-providers/vsphere/out-of-tree/_index.md @@ -13,7 +13,10 @@ This page covers how to install the Cloud Provider Interface (CPI) and Cloud Sto # Prerequisites -The vSphere version must be 7.0u1 or higher. +The vSphere versions supported: + +* 6.7u3 +* 7.0u1 or higher. The Kubernetes version must be 1.19 or higher. diff --git a/content/rancher/v2.5/en/cluster-provisioning/rke-clusters/options/_index.md b/content/rancher/v2.5/en/cluster-provisioning/rke-clusters/options/_index.md index 662af99a33d..63b3bfddcbd 100644 --- a/content/rancher/v2.5/en/cluster-provisioning/rke-clusters/options/_index.md +++ b/content/rancher/v2.5/en/cluster-provisioning/rke-clusters/options/_index.md @@ -158,7 +158,7 @@ Option to enable or disable [recurring etcd snapshots]({{}}/rke/latest/ _Available as of v2.5.6_ -Option to set environment variables for [rancher agents]({{}}/rancher/v2.x/en/cluster-provisioning/rke-clusters/rancher-agents/). The environment variables can be set using key value pairs. If rancher agent requires use of proxy to communicate with Rancher server, `HTTP_PROXY`, `HTTPS_PROXY` and `NO_PROXY` environment variables can be set using agent environment variables. +Option to set environment variables for [rancher agents]({{}}/rancher/v2.5/en/cluster-provisioning/rke-clusters/rancher-agents/). The environment variables can be set using key value pairs. If rancher agent requires use of proxy to communicate with Rancher server, `HTTP_PROXY`, `HTTPS_PROXY` and `NO_PROXY` environment variables can be set using agent environment variables. # Cluster Config File diff --git a/content/rancher/v2.5/en/cluster-provisioning/rke-clusters/windows-clusters/_index.md b/content/rancher/v2.5/en/cluster-provisioning/rke-clusters/windows-clusters/_index.md index 37ff393eded..16bf34656c1 100644 --- a/content/rancher/v2.5/en/cluster-provisioning/rke-clusters/windows-clusters/_index.md +++ b/content/rancher/v2.5/en/cluster-provisioning/rke-clusters/windows-clusters/_index.md @@ -85,7 +85,7 @@ If you are configuring DHCP options sets for an AWS virtual private cloud, note > Some Linux operating systems accept multiple domain names separated by spaces. However, other Linux operating systems and Windows treat the value as a single domain, which results in unexpected behavior. If your DHCP options set is associated with a VPC that has instances with multiple operating systems, specify only one domain name. -#### Rancher on vSphere with ESXi 6.7u2 and above +### Rancher on vSphere with ESXi 6.7u2 and above If you are using Rancher on VMware vSphere with ESXi 6.7u2 or later with Red Hat Enterprise Linux 8.3, CentOS 8.3, or SUSE Enterprise Linux 15 SP2 or later, it is necessary to disable the `vmxnet3` virtual network adapter hardware offloading feature. Failure to do so will result in all network connections between pods on different cluster nodes to fail with timeout errors. All connections from Windows pods to critical services running on Linux nodes, such as CoreDNS, will fail as well. It is also possible that external connections may fail. This issue is the result of Linux distributions enabling the hardware offloading feature in `vmxnet3` and a bug in the `vmxnet3` hardware offloading feature that results in the discarding of packets for guest overlay traffic. To address this issue, it is necessary disable the `vmxnet3` hardware offloading feature. This setting does not survive reboot, so it is necessary to disable on every boot. The recommended course of action is to create a systemd unit file at `/etc/systemd/system/disable_hw_offloading.service`, which disables the `vmxnet3` hardware offloading feature on boot. A sample systemd unit file which disables the `vmxnet3` hardware offloading feature is as follows. Note that `` must be customized to the host `vmxnet3` network interface, e.g., `ens192`: diff --git a/content/rancher/v2.5/en/deploy-across-clusters/fleet/_index.md b/content/rancher/v2.5/en/deploy-across-clusters/fleet/_index.md index abea9bad31e..9774589340a 100644 --- a/content/rancher/v2.5/en/deploy-across-clusters/fleet/_index.md +++ b/content/rancher/v2.5/en/deploy-across-clusters/fleet/_index.md @@ -16,6 +16,8 @@ Fleet is a separate project from Rancher, and can be installed on any Kubernetes - [Windows Support](#windows-support) - [GitHub Repository](#github-repository) - [Using Fleet Behind a Proxy](#using-fleet-behind-a-proxy) +- [Helm Chart Dependencies](#helm-chart-dependencies) +- [Troubleshooting](#troubleshooting) - [Documentation](#documentation) # Architecture @@ -24,7 +26,24 @@ For information about how Fleet works, see [this page.](./architecture) # Accessing Fleet in the Rancher UI -Fleet comes preinstalled in Rancher v2.5. To access it, go to the **Cluster Explorer** in the Rancher UI. In the top left dropdown menu, click **Cluster Explorer > Continuous Delivery.** On this page, you can edit Kubernetes resources and cluster groups managed by Fleet. +Fleet comes preinstalled in Rancher v2.5. Users can leverage continuous delivery to deploy their applications to the Kubernetes clusters in the git repository without any manual operation by following **gitops** practice. For additional information on Continuous Delivery and other Fleet troubleshooting tips, refer [here](https://fleet.rancher.io/troubleshooting/). + +Follow the steps below to access Continuous Delivery in the Rancher UI: + +1. Click **Cluster Explorer** in the Rancher UI. + +1. In the top left dropdown menu, click **Cluster Explorer > Continuous Delivery.** + +1. Select your namespace at the top of the menu, noting the following: + - By default,`fleet-default` is selected which includes all downstream clusters that are registered through Rancher. + - You may switch to `fleet-local`, which only contains the `local` cluster, or you may create your own workspace to which you may assign and move clusters. + - You can then manage clusters by clicking on **Clusters** on the left navigation bar. + +1. Click on **Gitrepos** on the left navigation bar to deploy the gitrepo into your clusters in the current workspace. + +1. Select your [git repository](https://fleet.rancher.io/gitrepo-add/) and [target clusters/cluster group](https://fleet.rancher.io/gitrepo-structure/). You can also create the cluster group in the UI by clicking on **Cluster Groups** from the left navigation bar. + +1. Once the gitrepo is deployed, you can monitor the application through the Rancher UI. # Windows Support @@ -44,6 +63,31 @@ _Available as of v2.5.8_ For details on using Fleet behind a proxy, see [this page.](./proxy) +# Helm Chart Dependencies + +In order for Helm charts with dependencies to deploy successfully, you must run a manual command (as listed below), as it is up to the user to fulfill the dependency list. If you do not do this and proceed to clone your repository and run `helm install`, your installation will fail because the dependencies will be missing. + +The Helm chart in the git repository must include its dependencies in the charts subdirectory. You must either manually run `helm dependencies update $chart` OR run `helm dependencies build $chart` locally, then commit the complete charts directory to your git repository. Note that you will update your commands with the applicable parameters. + +# Troubleshooting +--- +* **Known Issue:** Fleet becomes inoperable after a restore using the [backup-restore-operator]({{}}/rancher/v2.5/en/backups/back-up-rancher/#1-install-the-rancher-backup-operator). We will update the community once a permanent solution is in place. + +* **Temporary Workaround:**
+ 1. Find the two service account tokens listed in the fleet-controller and the fleet-controller-bootstrap service accounts. These are under the fleet-system namespace of the local cluster.
+ 2. Remove the non-existent token secret. Doing so allows for only one entry to be present for the service account token secret that actually exists.
+ 3. Delete the fleet-controller Pod in the fleet-system namespace to reschedule.
+ 4. After the service account token issue is resolved, you can force redeployment of the fleet-agents. In the Rancher UI, go to **☰ > Cluster Management**, click on **Clusters** page, then click **Force Update**.
+ 5. If the fleet-agent bundles remain in a `Modified` state after Step 4, update the field `spec.forceSyncGeneration` for the fleet-agent bundle to force re-creation. + +--- +* **Known Issue:** clientSecretName and helmSecretName secrets for Fleet gitrepos are not included in the backup nor restore created by the [backup-restore-operator]({{}}/rancher/v2.5/en/backups/back-up-rancher/#1-install-the-rancher-backup-operator). We will update the community once a permanent solution is in place. + +* **Temporary Workaround:**
+By default, user-defined secrets are not backed up in Fleet. It is necessary to recreate secrets if performing a disaster recovery restore or migration of Rancher into a fresh cluster. To modify resourceSet to include extra resources you want to backup, refer to docs [here](https://github.com/rancher/backup-restore-operator#user-flow). + +--- + # Documentation The Fleet documentation is at [https://fleet.rancher.io/.](https://fleet.rancher.io/) diff --git a/content/rancher/v2.5/en/faq/removing-rancher/_index.md b/content/rancher/v2.5/en/faq/removing-rancher/_index.md index 49c1acde9bc..e05744e7400 100644 --- a/content/rancher/v2.5/en/faq/removing-rancher/_index.md +++ b/content/rancher/v2.5/en/faq/removing-rancher/_index.md @@ -27,7 +27,7 @@ The capability to access a downstream cluster without Rancher depends on the typ - **Registered clusters:** The cluster will be unaffected and you can access the cluster using the same methods that you did before the cluster was registered into Rancher. - **Hosted Kubernetes clusters:** If you created the cluster in a cloud-hosted Kubernetes provider such as EKS, GKE, or AKS, you can continue to manage the cluster using your provider's cloud credentials. -- **RKE clusters:** To access an [RKE cluster,]({{}}/rancher/v2.5/en/cluster-provisioning/rke-clusters/) the cluster must have the [authorized cluster endpoint]({{}}/rancher/v2.5/en/overview/architecture/#4-authorized-cluster-endpoint) enabled, and you must have already downloaded the cluster's kubeconfig file from the Rancher UI. (The authorized cluster endpoint is enabled by default for RKE clusters.) With this endpoint, you can access your cluster with kubectl directly instead of communicating through the Rancher server's [authentication proxy.]({{}}/rancher/v2.5/en/overview/architecture/#1-the-authentication-proxy) For instructions on how to configure kubectl to use the authorized cluster endpoint, refer to the section about directly accessing clusters with [kubectl and the kubeconfig file.]({{}}/rancher/v2.5/en/cluster-admin/cluster-access/kubectl/#authenticating-directly-with-a-downstream-cluster) These clusters will use a snapshot of the authentication as it was configured when Rancher was removed. +- **RKE clusters:** Please note that you will no longer be able to manage the individual Kubernetes components or perform any upgrades on them after the deletion of the Rancher server. However, you can still access the cluster to manage your workloads. To access an [RKE cluster,]({{}}/rancher/v2.5/en/cluster-provisioning/rke-clusters/) the cluster must have the [authorized cluster endpoint]({{}}/rancher/v2.5/en/overview/architecture/#4-authorized-cluster-endpoint) enabled, and you must have already downloaded the cluster's kubeconfig file from the Rancher UI. (The authorized cluster endpoint is enabled by default for RKE clusters.) With this endpoint, you can access your cluster with kubectl directly instead of communicating through the Rancher server's [authentication proxy.]({{}}/rancher/v2.5/en/overview/architecture/#1-the-authentication-proxy) For instructions on how to configure kubectl to use the authorized cluster endpoint, refer to the section about directly accessing clusters with [kubectl and the kubeconfig file.]({{}}/rancher/v2.5/en/cluster-admin/cluster-access/kubectl/#authenticating-directly-with-a-downstream-cluster) These clusters will use a snapshot of the authentication as it was configured when Rancher was removed. ### What if I don't want Rancher anymore? diff --git a/content/rancher/v2.5/en/faq/technical/_index.md b/content/rancher/v2.5/en/faq/technical/_index.md index f338f2a0180..9ea91ea6d92 100644 --- a/content/rancher/v2.5/en/faq/technical/_index.md +++ b/content/rancher/v2.5/en/faq/technical/_index.md @@ -173,3 +173,8 @@ In Kubernetes v1.13, the `TaintBasedEvictions` feature is enabled by default. Se ### Can I use keyboard shortcuts in the UI? Yes, most parts of the UI can be reached using keyboard shortcuts. For an overview of the available shortcuts, press `?` anywhere in the UI. + + +### What does `Unknown schema for type:` errors followed by something like `catalog.cattle.io.operation` mean when trying to modify an App? + +This error occurs when Kubernetes can not find the CRD mentioned. The vast majority of the time these are a result of missing RBAC permissions. Try with an admin user and if this works, add permissions for the resource mentioned by the error (ie. `Get`, `List`, `Patch` as needed). diff --git a/content/rancher/v2.5/en/helm-charts/_index.md b/content/rancher/v2.5/en/helm-charts/_index.md index e5e6ba7853e..b74682a0c62 100644 --- a/content/rancher/v2.5/en/helm-charts/_index.md +++ b/content/rancher/v2.5/en/helm-charts/_index.md @@ -50,6 +50,39 @@ From the left sidebar select _"Repositories"_. These items represent helm repositories, and can be either traditional helm endpoints which have an index.yaml, or git repositories which will be cloned and can point to a specific branch. In order to use custom charts, simply add your repository here and they will become available in the Charts tab under the name of the repository. +To add a private CA for Helm Chart repositories: + +- **HTTP-based chart repositories**: You must add a base64 encoded copy of the CA certificate in DER format to the spec.caBundle field of the chart repo, such as `openssl x509 -outform der -in ca.pem | base64 -w0`. Click **Edit YAML** for the chart repo and set, as in the following example:
+ ``` + [...] + spec: + caBundle: + MIIFXzCCA0egAwIBAgIUWNy8WrvSkgNzV0zdWRP79j9cVcEwDQYJKoZIhvcNAQELBQAwPzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQKDAtNeU9yZywgSW5jLjENMAsGA1UEAwwEcm9vdDAeFw0yMTEyMTQwODMyMTdaFw0yNDEwMDMwODMyMT + ... + nDxZ/tNXt/WPJr/PgEB3hQdInDWYMg7vGO0Oz00G5kWg0sJ0ZTSoA10ZwdjIdGEeKlj1NlPyAqpQ+uDnmx6DW+zqfYtLnc/g6GuLLVPamraqN+gyU8CHwAWPNjZonFN9Vpg0PIk1I2zuOc4EHifoTAXSpnjfzfyAxCaZsnTptimlPFJJqAMj+FfDArGmr4= + [...] + ``` + +- **Git-based chart repositories**: It is not currently possible to add a private CA. For git-based chart repositories with a certificate signed by a private CA, you must disable TLS verification. Click **Edit YAML** for the chart repo, and add the key/value pair as follows: + ``` + [...] + spec: + insecureSkipTLSVerify: true + [...] + ``` + +> **Note:** Helm chart repositories with authentication +> +> As of Rancher v2.5.12, a new value `disableSameOriginCheck` has been added to the Repo.Spec. This allows users to bypass the same origin checks, sending the repository Authentication information as a Basic Auth Header with all API calls. This is not recommended but can be used as a temporary solution in cases of non-standard Helm chart repositories such as those that have redirects to a different origin URL. +> +> To use this feature for an existing Helm chart repository, click â‹® > Edit YAML. On the `spec` portion of the YAML file, add `disableSameOriginCheck` and set it to `true`. +> +> ```yaml +[...] +spec: + disableSameOriginCheck: true +[...] +``` ### Helm Compatibility diff --git a/content/rancher/v2.5/en/installation/_index.md b/content/rancher/v2.5/en/installation/_index.md index 409e36d4d8e..9f49f7a1b73 100644 --- a/content/rancher/v2.5/en/installation/_index.md +++ b/content/rancher/v2.5/en/installation/_index.md @@ -17,7 +17,7 @@ In this section, - **RKE (Rancher Kubernetes Engine)** is a certified Kubernetes distribution and CLI/library which creates and manages a Kubernetes cluster. - **K3s (Lightweight Kubernetes)** is also a fully compliant Kubernetes distribution. It is newer than RKE, easier to use, and more lightweight, with a binary size of less than 100 MB. - **RKE2** is a fully conformant Kubernetes distribution that focuses on security and compliance within the U.S. Federal Government sector. -- **RancherD** is a new tool for installing Rancher, which is available as of Rancher v2.5.4. It is an experimental feature. RancherD is a single binary that first launches an RKE2 Kubernetes cluster, then installs the Rancher server Helm chart on the cluster. +- **RancherD** was an experimental tool for installing Rancher; a single binary that first launched an RKE2 Kubernetes cluster, then installed the Rancher server Helm chart on the cluster. It was available as part of Rancher v2.5.4 through v2.5.10 but is now deprecated and not available for recent releases. # Changes to Installation in Rancher v2.5 @@ -37,9 +37,7 @@ We recommend using Helm, a Kubernetes package manager, to install Rancher on mul ### High-availability Kubernetes Install with RancherD -_Available as of v2.5.4_ - -> This is an experimental feature. +> **Note:** RancherD was an experimental feature available as part of Rancher v2.5.4 through v2.5.10 but is now deprecated and not available for recent releases. RancherD is a single binary that first launches an RKE2 Kubernetes cluster, then installs the Rancher server Helm chart on the cluster. diff --git a/content/rancher/v2.5/en/installation/install-rancher-on-k8s/_index.md b/content/rancher/v2.5/en/installation/install-rancher-on-k8s/_index.md index 94497592e86..b0e02303a79 100644 --- a/content/rancher/v2.5/en/installation/install-rancher-on-k8s/_index.md +++ b/content/rancher/v2.5/en/installation/install-rancher-on-k8s/_index.md @@ -6,7 +6,7 @@ aliases: - /rancher/v2.5/en/installation/k8s-install/ - /rancher/v2.5/en/installation/k8s-install/helm-rancher - /rancher/v2.5/en/installation/k8s-install/kubernetes-rke - - /rancher/v2.5/en/installation/ha-server-install + - /rancher/v2.5/en/installation/ha-server-install - /rancher/v2.5/en/installation/install-rancher-on-k8s/install - /rancher/v2.x/en/installation/install-rancher-on-k8s/ --- @@ -24,7 +24,7 @@ In this section, you'll learn how to deploy Rancher on a Kubernetes cluster usin ### Kubernetes Cluster -Set up the Rancher server's local Kubernetes cluster. +Set up the Rancher server's local Kubernetes cluster. Rancher can be installed on any Kubernetes cluster. This cluster can use upstream Kubernetes, or it can use one of Rancher's Kubernetes distributions, or it can be a managed Kubernetes cluster from a provider such as Amazon EKS. @@ -113,7 +113,7 @@ There are three recommended options for the source of the certificate used for T ### 4. Install cert-manager -> You should skip this step if you are bringing your own certificate files (option `ingress.tls.source=secret`), or if you use [TLS termination on an external load balancer]({{}}/rancher/v2.5/en/installation/install-rancher-on-k8s/chart-options/#external-tls-termination). +> You should skip this step if you are bringing your own certificate files (option `ingress.tls.source=secret`), or if you use [TLS termination on an external load balancer]({{}}/rancher/v2.5/en/installation/install-rancher-on-k8s/chart-options/#external-tls-termination). This step is only required to use certificates issued by Rancher's generated CA (`ingress.tls.source=rancher`) or to request Let's Encrypt issued certificates (`ingress.tls.source=letsEncrypt`). @@ -157,6 +157,8 @@ cert-manager-webhook-787858fcdb-nlzsq 1/1 Running 0 2m The exact command to install Rancher differs depending on the certificate configuration. +However, irrespective of the certificate configuration, the name of the Rancher installation in the `cattle-system` namespace should always be `rancher`. + {{% tabs %}} {{% tab "Rancher-generated Certificates" %}} @@ -168,7 +170,7 @@ Because `rancher` is the default option for `ingress.tls.source`, we are not spe - Set `hostname` to the DNS record that resolves to your load balancer. - Set `replicas` to the number of replicas to use for the Rancher Deployment. This defaults to 3; if you have less than 3 nodes in your cluster you should reduce it accordingly. - To install a specific Rancher version, use the `--version` flag, example: `--version 2.3.6`. -- If you are installing an alpha version, Helm requires adding the `--devel` option to the command. +- If you are installing an alpha version, Helm requires adding the `--devel` option to the command. ``` helm install rancher rancher-/rancher \ @@ -190,7 +192,7 @@ deployment "rancher" successfully rolled out This option uses `cert-manager` to automatically request and renew [Let's Encrypt](https://letsencrypt.org/) certificates. This is a free service that provides you with a valid certificate as Let's Encrypt is a trusted CA. ->**Note:**: You need to have port 80 open as the HTTP-01 challenge can only be done on port 80. +>**Note:** You need to have port 80 open as the HTTP-01 challenge can only be done on port 80. In the following command, @@ -198,8 +200,9 @@ In the following command, - Set `replicas` to the number of replicas to use for the Rancher Deployment. This defaults to 3; if you have less than 3 nodes in your cluster you should reduce it accordingly. - Set `ingress.tls.source` to `letsEncrypt`. - Set `letsEncrypt.email` to the email address used for communication about your certificate (for example, expiry notices). +- Set `letsEncrypt.ingress.class` to whatever your ingress controller is, e.g., `traefik`, `nginx`, `haproxy`, etc. - To install a specific Rancher version, use the `--version` flag, example: `--version 2.3.6`. -- If you are installing an alpha version, Helm requires adding the `--devel` option to the command. +- If you are installing an alpha version, Helm requires adding the `--devel` option to the command. ``` helm install rancher rancher-/rancher \ @@ -207,7 +210,8 @@ helm install rancher rancher-/rancher \ --set hostname=rancher.my.org \ --set replicas=3 \ --set ingress.tls.source=letsEncrypt \ - --set letsEncrypt.email=me@example.org + --set letsEncrypt.email=me@example.org \ + --set letsEncrypt.ingress.class=nginx ``` Wait for Rancher to be rolled out: @@ -232,7 +236,7 @@ Although an entry in the `Subject Alternative Names` is technically required, ha - Set `replicas` to the number of replicas to use for the Rancher Deployment. This defaults to 3; if you have less than 3 nodes in your cluster you should reduce it accordingly. - Set `ingress.tls.source` to `secret`. - To install a specific Rancher version, use the `--version` flag, example: `--version 2.3.6`. -- If you are installing an alpha version, Helm requires adding the `--devel` option to the command. +- If you are installing an alpha version, Helm requires adding the `--devel` option to the command. ``` helm install rancher rancher-/rancher \ @@ -245,7 +249,7 @@ helm install rancher rancher-/rancher \ If you are using a Private CA signed certificate , add `--set privateCA=true` to the command: ``` -helm install rancher rancher-latest/rancher \ +helm install rancher rancher-/rancher \ --namespace cattle-system \ --set hostname=rancher.my.org \ --set ingress.tls.source=secret \ diff --git a/content/rancher/v2.5/en/installation/install-rancher-on-k8s/chart-options/_index.md b/content/rancher/v2.5/en/installation/install-rancher-on-k8s/chart-options/_index.md index 5f922b37e88..e1572af146b 100644 --- a/content/rancher/v2.5/en/installation/install-rancher-on-k8s/chart-options/_index.md +++ b/content/rancher/v2.5/en/installation/install-rancher-on-k8s/chart-options/_index.md @@ -124,7 +124,7 @@ To customize or use a different ingress with Rancher server you can set your own Example on setting a custom certificate issuer: ```plain ---set ingress.extraAnnotations.'certmanager\.k8s\.io/cluster-issuer'=ca-key-pair +--set ingress.extraAnnotations.'cert-manager\.io/cluster-issuer'=issuer-name ``` Example on setting a static proxy header with `ingress.configurationSnippet`. This value is parsed like a template so variables can be used. diff --git a/content/rancher/v2.5/en/installation/install-rancher-on-k8s/upgrades/_index.md b/content/rancher/v2.5/en/installation/install-rancher-on-k8s/upgrades/_index.md index 49ce4d505fc..8e1acae6ce0 100644 --- a/content/rancher/v2.5/en/installation/install-rancher-on-k8s/upgrades/_index.md +++ b/content/rancher/v2.5/en/installation/install-rancher-on-k8s/upgrades/_index.md @@ -165,7 +165,7 @@ helm upgrade rancher rancher-/rancher \ ### Option B: Reinstalling Rancher and cert-manager -If you are currently running the cert-manger whose version is older than v0.11, and want to upgrade both Rancher and cert-manager to a newer version, then you need to reinstall both Rancher and cert-manger due to the API change in cert-manger v0.11. +If you are currently running the cert-manager whose version is older than v0.11, and want to upgrade both Rancher and cert-manager to a newer version, then you need to reinstall both Rancher and cert-manager due to the API change in cert-manager v0.11. 1. Uninstall Rancher diff --git a/content/rancher/v2.5/en/installation/other-installation-methods/air-gap/install-rancher/_index.md b/content/rancher/v2.5/en/installation/other-installation-methods/air-gap/install-rancher/_index.md index d97e2266801..78daa4f58a0 100644 --- a/content/rancher/v2.5/en/installation/other-installation-methods/air-gap/install-rancher/_index.md +++ b/content/rancher/v2.5/en/installation/other-installation-methods/air-gap/install-rancher/_index.md @@ -115,7 +115,8 @@ helm template cert-manager ./cert-manager-v1.5.1.tgz --output-dir . \ --namespace cert-manager \ --set image.repository=/quay.io/jetstack/cert-manager-controller \ --set webhook.image.repository=/quay.io/jetstack/cert-manager-webhook \ - --set cainjector.image.repository=/quay.io/jetstack/cert-manager-cainjector + --set cainjector.image.repository=/quay.io/jetstack/cert-manager-cainjector \ + --set startupapicheck.image.repository=/quay.io/jetstack/cert-manager-ctl ``` ### 4. Download the cert-manager CRD diff --git a/content/rancher/v2.5/en/installation/other-installation-methods/air-gap/populate-private-registry/_index.md b/content/rancher/v2.5/en/installation/other-installation-methods/air-gap/populate-private-registry/_index.md index d42ee6f04e8..5c152feb541 100644 --- a/content/rancher/v2.5/en/installation/other-installation-methods/air-gap/populate-private-registry/_index.md +++ b/content/rancher/v2.5/en/installation/other-installation-methods/air-gap/populate-private-registry/_index.md @@ -66,7 +66,7 @@ In a Kubernetes Install, if you elect to use the Rancher default self-signed TLS helm repo add jetstack https://charts.jetstack.io helm repo update helm fetch jetstack/cert-manager --version v1.5.1 - helm template ./cert-manager-.tgz | grep -oP '(?<=image: ").*(?=")' >> ./rancher-images.txt + helm template ./cert-manager-.tgz | awk '$1 ~ /image:/ {print $2}' | sed s/\"//g >> ./rancher-images.txt ``` 2. Sort and unique the images list to remove any overlap between the sources: @@ -237,7 +237,7 @@ The workstation must have Docker 18.02+ in order to support manifests, which are helm repo add jetstack https://charts.jetstack.io helm repo update helm fetch jetstack/cert-manager --version v0.12.0 - helm template ./cert-manager-.tgz | grep -oP '(?<=image: ").*(?=")' >> ./rancher-images.txt + helm template ./cert-manager-.tgz | | awk '$1 ~ /image:/ {print $2}' | sed s/\"//g >> ./rancher-images.txt ``` 2. Sort and unique the images list to remove any overlap between the sources: diff --git a/content/rancher/v2.5/en/installation/other-installation-methods/air-gap/prepare-nodes/_index.md b/content/rancher/v2.5/en/installation/other-installation-methods/air-gap/prepare-nodes/_index.md index 4879223c572..84bff627287 100644 --- a/content/rancher/v2.5/en/installation/other-installation-methods/air-gap/prepare-nodes/_index.md +++ b/content/rancher/v2.5/en/installation/other-installation-methods/air-gap/prepare-nodes/_index.md @@ -145,7 +145,7 @@ For a how-to guide for setting up a DNS record to route domain traffic to an Ama Rancher supports air gap installs using a secure Docker private registry. You must have your own private registry or other means of distributing Docker images to your machines. -In a later step, when you set up your K3s Kubernetes cluster, you will create a [private registries configuration file]({{}}/k3s/latest/en/installation/private-registry/) with details from this registry. +In a later step, when you set up your RKE Kubernetes cluster, you will create a [private registries configuration file]({{}}/rke/latest/en/config-options/private-registries/) with details from this registry. If you need help with creating a private registry, please refer to the [official Docker documentation.](https://docs.docker.com/registry/deploying/#run-an-externally-accessible-registry) @@ -167,8 +167,6 @@ For an example of one way to set up Linux nodes, refer to this [tutorial]({{}}/k3s/latest/en/installation/private-registry/) with details from this registry. - If you need help with creating a private registry, please refer to the [official Docker documentation.](https://docs.docker.com/registry/) {{% /tab %}} diff --git a/content/rancher/v2.5/en/installation/other-installation-methods/behind-proxy/install-rancher/_index.md b/content/rancher/v2.5/en/installation/other-installation-methods/behind-proxy/install-rancher/_index.md index fac08ab40c9..dfc9854ee4d 100644 --- a/content/rancher/v2.5/en/installation/other-installation-methods/behind-proxy/install-rancher/_index.md +++ b/content/rancher/v2.5/en/installation/other-installation-methods/behind-proxy/install-rancher/_index.md @@ -26,14 +26,14 @@ kubectl create namespace cert-manager Install the CustomResourceDefinitions of cert-manager: ``` -kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v0.15.2/cert-manager.crds.yaml +kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/v1.5.1/cert-manager.crds.yaml ``` And install it with Helm. Note that cert-manager also needs your proxy configured in case it needs to communicate with Let's Encrypt or other external certificate issuers: ``` helm upgrade --install cert-manager jetstack/cert-manager \ - --namespace cert-manager --version v0.15.2 \ + --namespace cert-manager --version v1.5.1 \ --set http_proxy=http://${proxy_host} \ --set https_proxy=http://${proxy_host} \ --set noProxy=127.0.0.0/8\\,10.0.0.0/8\\,cattle-system.svc\\,172.16.0.0/12\\,192.168.0.0/16\\,.svc\\,.cluster.local @@ -60,14 +60,16 @@ Create a namespace: kubectl create namespace cattle-system ``` -And install Rancher with Helm. Rancher also needs a proxy configuration so that it can communicate with external application catalogs or retrieve Kubernetes version update metadata: +And install Rancher with Helm. Rancher also needs a proxy configuration so that it can communicate with external application catalogs or retrieve Kubernetes version update metadata. + +Note that `rancher.cattle-system` must be added to the noProxy list (as shown below) so that Fleet can communicate directly to Rancher with Kubernetes service DNS using service discovery. ``` helm upgrade --install rancher rancher-latest/rancher \ --namespace cattle-system \ --set hostname=rancher.example.com \ --set proxy=http://${proxy_host} - --set noProxy=127.0.0.0/8\\,10.0.0.0/8\\,cattle-system.svc\\,172.16.0.0/12\\,192.168.0.0/16\\,.svc\\,.cluster.local + --set noProxy=127.0.0.0/8\\,10.0.0.0/8\\,cattle-system.svc\\,172.16.0.0/12\\,192.168.0.0/16\\,.svc\\,.cluster.local,rancher.cattle-system ``` After waiting for the deployment to finish: diff --git a/content/rancher/v2.5/en/installation/other-installation-methods/install-rancher-on-linux/_index.md b/content/rancher/v2.5/en/installation/other-installation-methods/install-rancher-on-linux/_index.md index 8b3d6e7b472..19c6afd9c62 100644 --- a/content/rancher/v2.5/en/installation/other-installation-methods/install-rancher-on-linux/_index.md +++ b/content/rancher/v2.5/en/installation/other-installation-methods/install-rancher-on-linux/_index.md @@ -6,9 +6,7 @@ aliases: - /rancher/v2.x/en/installation/install-rancher-on-linux/ --- -_Available as of Rancher v2.5.4_ - -> This is an experimental feature. +> **Note:** RancherD was an experimental feature available as part of Rancher v2.5.4 through v2.5.10 but is now deprecated and not available for recent releases. We are excited to introduce a new, simpler way to install Rancher called RancherD. diff --git a/content/rancher/v2.5/en/installation/other-installation-methods/install-rancher-on-linux/rancherd-configuration/_index.md b/content/rancher/v2.5/en/installation/other-installation-methods/install-rancher-on-linux/rancherd-configuration/_index.md index 770326f9bd7..01986082057 100644 --- a/content/rancher/v2.5/en/installation/other-installation-methods/install-rancher-on-linux/rancherd-configuration/_index.md +++ b/content/rancher/v2.5/en/installation/other-installation-methods/install-rancher-on-linux/rancherd-configuration/_index.md @@ -6,7 +6,7 @@ aliases: - /rancher/v2.x/en/installation/install-rancher-on-linux/rancherd-configuration/ --- -> RancherD is an experimental feature. +> **Note:** RancherD was an experimental feature available as part of Rancher v2.5.4 through v2.5.10 but is now deprecated and not available for recent releases. In RancherD, a server node is defined as a machine (bare-metal or virtual) running the `rancherd server` command. The server runs the Kubernetes API as well as Kubernetes workloads. @@ -22,7 +22,7 @@ In the RancherD installation instructions, we recommend running three server nod # Certificates for the Rancher Server -Rancherd does not use cert-manger to provision certs. Instead RancherD allows you to bring your own self-signed or trusted certs by storing the .pem files in `/etc/rancher/ssl/`. When doing this you should also set the `publicCA` parameter to `true` in your HelmChartConfig. For more information on the HelmChartConfig, refer to the section about [customizing the RancherD Helm chart.](#customizing-the-rancherd-helm-chart) +Rancherd does not use cert-manager to provision certs. Instead RancherD allows you to bring your own self-signed or trusted certs by storing the .pem files in `/etc/rancher/ssl/`. When doing this you should also set the `publicCA` parameter to `true` in your HelmChartConfig. For more information on the HelmChartConfig, refer to the section about [customizing the RancherD Helm chart.](#customizing-the-rancherd-helm-chart) Private key: `/etc/rancher/ssl/key.pem` diff --git a/content/rancher/v2.5/en/installation/other-installation-methods/install-rancher-on-linux/rollbacks/_index.md b/content/rancher/v2.5/en/installation/other-installation-methods/install-rancher-on-linux/rollbacks/_index.md index d9144867731..01ade576014 100644 --- a/content/rancher/v2.5/en/installation/other-installation-methods/install-rancher-on-linux/rollbacks/_index.md +++ b/content/rancher/v2.5/en/installation/other-installation-methods/install-rancher-on-linux/rollbacks/_index.md @@ -6,6 +6,6 @@ aliases: - /rancher/v2.x/en/installation/install-rancher-on-linux/rollbacks/ --- -> RancherD is an experimental feature. +> **Note:** RancherD was an experimental feature available as part of Rancher v2.5.4 through v2.5.10 but is now deprecated and not available for recent releases. To roll back Rancher to a previous version, re-run the installation script with the previous version specified in the `INSTALL_RANCHERD_VERSION` environment variable. \ No newline at end of file diff --git a/content/rancher/v2.5/en/installation/other-installation-methods/install-rancher-on-linux/upgrades/_index.md b/content/rancher/v2.5/en/installation/other-installation-methods/install-rancher-on-linux/upgrades/_index.md index 66f41139153..3f63915f6f5 100644 --- a/content/rancher/v2.5/en/installation/other-installation-methods/install-rancher-on-linux/upgrades/_index.md +++ b/content/rancher/v2.5/en/installation/other-installation-methods/install-rancher-on-linux/upgrades/_index.md @@ -6,7 +6,7 @@ aliases: - /rancher/v2.x/en/installation/install-rancher-on-linux/upgrades/ --- -> RancherD is an experimental feature. +> **Note:** RancherD was an experimental feature available as part of Rancher v2.5.4 through v2.5.10 but is now deprecated and not available for recent releases. When RancherD is upgraded, the Rancher Helm controller and the Fleet pods are upgraded. diff --git a/content/rancher/v2.5/en/installation/other-installation-methods/single-node-docker/single-node-upgrades/_index.md b/content/rancher/v2.5/en/installation/other-installation-methods/single-node-docker/single-node-upgrades/_index.md index ce5f6c3f6c2..6c55386d77d 100644 --- a/content/rancher/v2.5/en/installation/other-installation-methods/single-node-docker/single-node-upgrades/_index.md +++ b/content/rancher/v2.5/en/installation/other-installation-methods/single-node-docker/single-node-upgrades/_index.md @@ -87,7 +87,7 @@ During upgrade, you create a copy of the data from your current Rancher containe ``` - docker run --volumes-from rancher-data -v $PWD:/backup busybox tar zcvf /backup/rancher-data-backup--.tar.gz /var/lib/rancher + docker run --volumes-from rancher-data -v "$PWD:/backup" --rm busybox tar zcvf /backup/rancher-data-backup--.tar.gz /var/lib/rancher ``` **Step Result:** When you enter this command, a series of commands should run. diff --git a/content/rancher/v2.5/en/installation/requirements/_index.md b/content/rancher/v2.5/en/installation/requirements/_index.md index 77d8abc2244..41eda67564e 100644 --- a/content/rancher/v2.5/en/installation/requirements/_index.md +++ b/content/rancher/v2.5/en/installation/requirements/_index.md @@ -80,7 +80,7 @@ If you are installing Rancher on a K3s cluster with Alpine Linux, follow [these ### RancherD Specific Requirements -_The RancherD install is available as of v2.5.4. It is an experimental feature._ +> **Note:** RancherD was an experimental feature available as part of Rancher v2.5.4 through v2.5.10 but is now deprecated and not available for recent releases. At this time, only Linux OSes that leverage systemd are supported. @@ -103,6 +103,7 @@ The Ingress should be deployed as DaemonSet to ensure your load balancer can suc Docker is required for Helm chart installs, and it can be installed by following the steps in the official [Docker documentation.](https://docs.docker.com/) Rancher also provides [scripts]({{}}/rancher/v2.5/en/installation/requirements/installing-docker) to install Docker with one command. Docker is not required for RancherD installs. + # Hardware Requirements The following sections describe the CPU, memory, and disk requirements for the nodes where the Rancher server is installed. @@ -125,7 +126,7 @@ These requirements apply to RKE Kubernetes clusters, as well as to hosted Kubern | X-Large | Up to 1000 | Up to 10,000 | 16 | 64 GB | | XX-Large | Up to 2000 | Up to 20,000 | 32 | 128 GB | -[Contact Rancher](https://rancher.com/contact/) for more than 2000 clusters and/or 20,000 nodes. +Every use case and environment is different. Please [contact Rancher](https://rancher.com/contact/) to review yours. ### K3s Kubernetes @@ -139,11 +140,11 @@ These CPU and memory requirements apply to each host in a [K3s Kubernetes cluste | X-Large | Up to 1000 | Up to 10,000 | 16 | 64 GB | 2 cores, 4 GB + 1000 IOPS | | XX-Large | Up to 2000 | Up to 20,000 | 32 | 128 GB | 2 cores, 4 GB + 1000 IOPS | -[Contact Rancher](https://rancher.com/contact/) for more than 2000 clusters and/or 20,000 nodes. +Every use case and environment is different. Please [contact Rancher](https://rancher.com/contact/) to review yours. ### RancherD -_RancherD is available as of v2.5.4. It is an experimental feature._ +> **Note:** RancherD was an experimental feature available as part of Rancher v2.5.4 through v2.5.10 but is now deprecated and not available for recent releases. These CPU and memory requirements apply to each instance with RancherD installed. Minimum recommendations are outlined here. @@ -176,7 +177,7 @@ Each node in the Kubernetes cluster that Rancher is installed on should run an I The Ingress should be deployed as DaemonSet to ensure your load balancer can successfully route traffic to all nodes. -For RKE, K3s and RancherD installations, you don't have to install the Ingress manually because is is installed by default. +For RKE, K3s and RancherD installations, you don't have to install the Ingress manually because it is installed by default. For hosted Kubernetes clusters (EKS, GKE, AKS) and RKE2 Kubernetes installations, you will need to set up the ingress. diff --git a/content/rancher/v2.5/en/installation/requirements/installing-docker/_index.md b/content/rancher/v2.5/en/installation/requirements/installing-docker/_index.md index 02a005d245f..8b16d157505 100644 --- a/content/rancher/v2.5/en/installation/requirements/installing-docker/_index.md +++ b/content/rancher/v2.5/en/installation/requirements/installing-docker/_index.md @@ -3,7 +3,7 @@ title: Installing Docker weight: 1 --- -For Helm CLI installs, Docker is required to be installed on any node that runs the Rancher server. +Docker is required to be installed on nodes where the Rancher server will be installed with Helm or Docker. There are a couple of options for installing Docker. One option is to refer to the [official Docker documentation](https://docs.docker.com/install/) about how to install Docker on Linux. The steps will vary based on the Linux distribution. diff --git a/content/rancher/v2.5/en/installation/requirements/ports/_index.md b/content/rancher/v2.5/en/installation/requirements/ports/_index.md index fb88592b0ca..af7f109a891 100644 --- a/content/rancher/v2.5/en/installation/requirements/ports/_index.md +++ b/content/rancher/v2.5/en/installation/requirements/ports/_index.md @@ -119,6 +119,8 @@ The following tables break down the port requirements for inbound and outbound t ### Ports for Rancher Server Nodes on RancherD or RKE2 +> **Note:** RancherD was an experimental feature available as part of Rancher v2.5.4 through v2.5.10 but is now deprecated and not available for recent releases. + {{% accordion label="Click to expand" %}} The RancherD (or RKE2) server needs port 6443 and 9345 to be accessible by other nodes in the cluster. diff --git a/content/rancher/v2.5/en/installation/resources/advanced/firewall/_index.md b/content/rancher/v2.5/en/installation/resources/advanced/firewall/_index.md index b779951aa7b..2ff27022f24 100644 --- a/content/rancher/v2.5/en/installation/resources/advanced/firewall/_index.md +++ b/content/rancher/v2.5/en/installation/resources/advanced/firewall/_index.md @@ -5,7 +5,7 @@ aliases: - /rancher/v2.x/en/installation/resources/advanced/firewall/ --- -> We recommend disabling firewalld. For Kubernetes 1.19, firewalld must be turned off. +> We recommend disabling firewalld. For Kubernetes 1.19.x and higher, firewalld must be turned off. Some distributions of Linux [derived from RHEL,](https://en.wikipedia.org/wiki/Red_Hat_Enterprise_Linux#Rebuilds) including Oracle Linux, may have default firewall rules that block communication with Helm. diff --git a/content/rancher/v2.5/en/installation/resources/choosing-version/_index.md b/content/rancher/v2.5/en/installation/resources/choosing-version/_index.md index 9d7ec763c11..618e8e36c33 100644 --- a/content/rancher/v2.5/en/installation/resources/choosing-version/_index.md +++ b/content/rancher/v2.5/en/installation/resources/choosing-version/_index.md @@ -14,6 +14,8 @@ For Docker installations of Rancher, which is used for development and testing, The Helm chart version also applies to RancherD installs because RancherD installs the Rancher Helm chart on a Kubernetes cluster. +> **Note:** RancherD was an experimental feature available as part of Rancher v2.5.4 through v2.5.10 but is now deprecated and not available for recent releases. + {{% tabs %}} {{% tab "Helm Charts" %}} diff --git a/content/rancher/v2.5/en/installation/resources/feature-flags/_index.md b/content/rancher/v2.5/en/installation/resources/feature-flags/_index.md index d134423b4cb..b06257e74e4 100644 --- a/content/rancher/v2.5/en/installation/resources/feature-flags/_index.md +++ b/content/rancher/v2.5/en/installation/resources/feature-flags/_index.md @@ -56,7 +56,7 @@ When you install Rancher, enable the feature you want with a feature flag. The c > **Note:** Values set from the Rancher API will override the value passed in through the command line. -When installing Rancher with a Helm chart, use the `--features` option. In the below example, two features are enabled by passing the feature flag names names in a comma separated list: +When installing Rancher with a Helm chart, use the `--set` option. In the below example, two features are enabled by passing the feature flag names in a comma separated list: ``` helm install rancher-latest/rancher \ @@ -131,7 +131,7 @@ When installing Rancher with Docker, use the `--features` option. In the below e docker run -d -p 80:80 -p 443:443 \ --restart=unless-stopped \ rancher/rancher:rancher-latest \ - --features==true,=true + --features==true,=true ``` diff --git a/content/rancher/v2.5/en/installation/resources/installing-docker/_index.md b/content/rancher/v2.5/en/installation/resources/installing-docker/_index.md deleted file mode 100644 index ceb75b12645..00000000000 --- a/content/rancher/v2.5/en/installation/resources/installing-docker/_index.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Installing Docker -weight: 1 -aliases: - - /rancher/v2.5/en/installation/requirements/installing-docker ---- - -Docker is required to be installed on nodes where the Rancher server will be installed with Helm or Docker. Docker is not required for RancherD installs. - -There are a couple of options for installing Docker. One option is to refer to the [official Docker documentation](https://docs.docker.com/install/) about how to install Docker on Linux. The steps will vary based on the Linux distribution. - -Another option is to use one of Rancher's Docker installation scripts, which are available for most recent versions of Docker. - -For example, this command could be used to install Docker 19.03 on Ubuntu: - -``` -curl https://releases.rancher.com/install-docker/19.03.sh | sh -``` - -Rancher has installation scripts for every version of upstream Docker that Kubernetes supports. To find out whether a script is available for installing a certain Docker version, refer to this [GitHub repository,](https://github.com/rancher/install-docker) which contains all of Rancher's Docker installation scripts. \ No newline at end of file diff --git a/content/rancher/v2.5/en/installation/resources/k8s-tutorials/ha-rke2/_index.md b/content/rancher/v2.5/en/installation/resources/k8s-tutorials/ha-rke2/_index.md index 64d7472dbdd..788a80c1e4a 100644 --- a/content/rancher/v2.5/en/installation/resources/k8s-tutorials/ha-rke2/_index.md +++ b/content/rancher/v2.5/en/installation/resources/k8s-tutorials/ha-rke2/_index.md @@ -8,7 +8,7 @@ aliases: --- _Tested on v2.5.6_ -This section describes how to install a Kubernetes cluster according to the [best practices for the Rancher server environment.]({{}}/rancher/v2.x/en/overview/architecture-recommendations/#environment-for-kubernetes-installations) +This section describes how to install a Kubernetes cluster according to the [best practices for the Rancher server environment.]({{}}/rancher/v2.5/en/overview/architecture-recommendations/#environment-for-kubernetes-installations) # Prerequisites diff --git a/content/rancher/v2.5/en/installation/resources/k8s-tutorials/infrastructure-tutorials/infra-for-rke2-ha/_index.md b/content/rancher/v2.5/en/installation/resources/k8s-tutorials/infrastructure-tutorials/infra-for-rke2-ha/_index.md index ac26cf28e2a..0f4d80d55c1 100644 --- a/content/rancher/v2.5/en/installation/resources/k8s-tutorials/infrastructure-tutorials/infra-for-rke2-ha/_index.md +++ b/content/rancher/v2.5/en/installation/resources/k8s-tutorials/infrastructure-tutorials/infra-for-rke2-ha/_index.md @@ -19,9 +19,9 @@ To install the Rancher management server on a high-availability RKE2 cluster, we ### 1. Set up Linux Nodes -Make sure that your nodes fulfill the general installation requirements for [OS, container runtime, hardware, and networking.]({{}}/rancher/v2.x/en/installation/requirements/) +Make sure that your nodes fulfill the general installation requirements for [OS, container runtime, hardware, and networking.]({{}}/rancher/v2.5/en/installation/requirements/) -For an example of one way to set up Linux nodes, refer to this [tutorial]({{}}/rancher/v2.x/en/installation/options/ec2-node) for setting up nodes as instances in Amazon EC2. +For an example of one way to set up Linux nodes, refer to this [tutorial]({{}}/rancher/v2.5/en/installation/options/ec2-node) for setting up nodes as instances in Amazon EC2. ### 2. Set up the Load Balancer @@ -34,11 +34,11 @@ When Rancher is installed (also in a later step), the Rancher system creates an For your implementation, consider if you want or need to use a Layer-4 or Layer-7 load balancer: - **A layer-4 load balancer** is the simpler of the two choices, in which you are forwarding TCP traffic to your nodes. We recommend configuring your load balancer as a Layer 4 balancer, forwarding traffic to ports TCP/80 and TCP/443 to the Rancher management cluster nodes. The Ingress controller on the cluster will redirect HTTP traffic to HTTPS and terminate SSL/TLS on port TCP/443. The Ingress controller will forward traffic to port TCP/80 to the Ingress pod in the Rancher deployment. -- **A layer-7 load balancer** is a bit more complicated but can offer features that you may want. For instance, a layer-7 load balancer is capable of handling TLS termination at the load balancer, as opposed to Rancher doing TLS termination itself. This can be beneficial if you want to centralize your TLS termination in your infrastructure. Layer-7 load balancing also offers the capability for your load balancer to make decisions based on HTTP attributes such as cookies, etc. that a layer-4 load balancer is not able to concern itself with. If you decide to terminate the SSL/TLS traffic on a layer-7 load balancer, you will need to use the `--set tls=external` option when installing Rancher in a later step. For more information, refer to the [Rancher Helm chart options.]({{}}/rancher/v2.x/en/installation/options/chart-options/#external-tls-termination) +- **A layer-7 load balancer** is a bit more complicated but can offer features that you may want. For instance, a layer-7 load balancer is capable of handling TLS termination at the load balancer, as opposed to Rancher doing TLS termination itself. This can be beneficial if you want to centralize your TLS termination in your infrastructure. Layer-7 load balancing also offers the capability for your load balancer to make decisions based on HTTP attributes such as cookies, etc. that a layer-4 load balancer is not able to concern itself with. If you decide to terminate the SSL/TLS traffic on a layer-7 load balancer, you will need to use the `--set tls=external` option when installing Rancher in a later step. For more information, refer to the [Rancher Helm chart options.]({{}}/rancher/v2.5/en/installation/options/chart-options/#external-tls-termination) -For an example showing how to set up an NGINX load balancer, refer to [this page.]({{}}/rancher/v2.x/en/installation/options/nginx/) +For an example showing how to set up an NGINX load balancer, refer to [this page.]({{}}/rancher/v2.5/en/installation/options/nginx/) -For a how-to guide for setting up an Amazon ELB Network Load Balancer, refer to [this page.]({{}}/rancher/v2.x/en/installation/options/nlb/) +For a how-to guide for setting up an Amazon ELB Network Load Balancer, refer to [this page.]({{}}/rancher/v2.5/en/installation/options/nlb/) > **Important:** > Do not use this load balancer (i.e, the `local` cluster Ingress) to load balance applications other than Rancher following installation. Sharing this Ingress with other applications may result in websocket errors to Rancher following Ingress configuration reloads for other apps. We recommend dedicating the `local` cluster to Rancher and no other applications. diff --git a/content/rancher/v2.5/en/installation/resources/tls-secrets/_index.md b/content/rancher/v2.5/en/installation/resources/tls-secrets/_index.md index 850856ff865..9878109b8b6 100644 --- a/content/rancher/v2.5/en/installation/resources/tls-secrets/_index.md +++ b/content/rancher/v2.5/en/installation/resources/tls-secrets/_index.md @@ -38,4 +38,4 @@ kubectl -n cattle-system create secret generic tls-ca \ # Updating a Private CA Certificate -Follow the steps on [this page]({{}}/rancher/v2.x/en/installation/resources/update-ca-cert) to update the SSL certificate of the ingress in a Rancher [high availability Kubernetes installation]({{}}/rancher/v2.5/en/installation/install-rancher-on-k8s/) or to switch from the default self-signed certificate to a custom certificate. \ No newline at end of file +Follow the steps on [this page]({{}}/rancher/v2.5/en/installation/resources/update-ca-cert) to update the SSL certificate of the ingress in a Rancher [high availability Kubernetes installation]({{}}/rancher/v2.5/en/installation/install-rancher-on-k8s/) or to switch from the default self-signed certificate to a custom certificate. \ No newline at end of file diff --git a/content/rancher/v2.5/en/installation/resources/update-ca-cert/_index.md b/content/rancher/v2.5/en/installation/resources/update-ca-cert/_index.md index c256f9f5905..751feae2d8c 100644 --- a/content/rancher/v2.5/en/installation/resources/update-ca-cert/_index.md +++ b/content/rancher/v2.5/en/installation/resources/update-ca-cert/_index.md @@ -13,6 +13,7 @@ A summary of the steps is as follows: 2. Create or update the `tls-ca` Kubernetes secret resource with the root CA certificate (only required when using a private CA). 3. Update the Rancher installation using the Helm CLI. 4. Reconfigure the Rancher agents to trust the new CA certificate. +5. Select Force Update of Fleet clusters to connect fleet-agent to Rancher. The details of these instructions are below. @@ -145,3 +146,12 @@ First, generate the agent definitions as described here: https://gist.github.com Then, connect to a controlplane node of the downstream cluster via SSH, create a Kubeconfig and apply the definitions: https://gist.github.com/superseb/b14ed3b5535f621ad3d2aa6a4cd6443b + + +# 5. Select Force Update of Fleet clusters to connect fleet-agent to Rancher + +Select 'Force Update' for the clusters within the [Continuous Delivery]({{}}/rancher/v2.5/en/deploy-across-clusters/fleet/#accessing-fleet-in-the-rancher-ui) view under Cluster Explorer in the Rancher UI to allow the fleet-agent in downstream clusters to successfully connect to Rancher. + +### Why is this step required? + +Fleet agents in Rancher managed clusters store kubeconfig that is used to connect to the Rancher proxied kube-api in the fleet-agent secret of the fleet-system namespace. The kubeconfig contains a certificate-authority-data block containing the Rancher CA. When changing the Rancher CA, this block needs to be updated for a successful connection of the fleet-agent to Rancher. diff --git a/content/rancher/v2.5/en/installation/resources/upgrading-cert-manager/_index.md b/content/rancher/v2.5/en/installation/resources/upgrading-cert-manager/_index.md index a3be656b66a..9b557f0ccc7 100644 --- a/content/rancher/v2.5/en/installation/resources/upgrading-cert-manager/_index.md +++ b/content/rancher/v2.5/en/installation/resources/upgrading-cert-manager/_index.md @@ -20,7 +20,7 @@ To address these changes, this guide will do two things: 1. Explain the cert-manager API changes and link to cert-manager's official documentation for migrating your data > **Important:** -> If you are currently running the cert-manger whose version is older than v0.11, and want to upgrade both Rancher and cert-manager to a newer version, you need to reinstall both of them: +> If you are currently running the cert-manager whose version is older than v0.11, and want to upgrade both Rancher and cert-manager to a newer version, you need to reinstall both of them: > 1. Take a one-time snapshot of your Kubernetes cluster running Rancher server > 2. Uninstall Rancher, cert-manager, and the CustomResourceDefinition for cert-manager diff --git a/content/rancher/v2.5/en/installation/resources/upgrading-cert-manager/helm-2-instructions/_index.md b/content/rancher/v2.5/en/installation/resources/upgrading-cert-manager/helm-2-instructions/_index.md index 761a2487d26..070dff28f02 100644 --- a/content/rancher/v2.5/en/installation/resources/upgrading-cert-manager/helm-2-instructions/_index.md +++ b/content/rancher/v2.5/en/installation/resources/upgrading-cert-manager/helm-2-instructions/_index.md @@ -18,7 +18,7 @@ To address these changes, this guide will do two things: 1. Explain the cert-manager API changes and link to cert-manager's offficial documentation for migrating your data > **Important:** -> If you are currently running the cert-manger whose version is older than v0.11, and want to upgrade both Rancher and cert-manager to a newer version, you need to reinstall both of them: +> If you are currently running the cert-manager whose version is older than v0.11, and want to upgrade both Rancher and cert-manager to a newer version, you need to reinstall both of them: > 1. Take a one-time snapshot of your Kubernetes cluster running Rancher server > 2. Uninstall Rancher, cert-manager, and the CustomResourceDefinition for cert-manager diff --git a/content/rancher/v2.5/en/k8s-in-rancher/workloads/deploy-workloads/_index.md b/content/rancher/v2.5/en/k8s-in-rancher/workloads/deploy-workloads/_index.md index c27ebdcc9e6..4d90d3f5db1 100644 --- a/content/rancher/v2.5/en/k8s-in-rancher/workloads/deploy-workloads/_index.md +++ b/content/rancher/v2.5/en/k8s-in-rancher/workloads/deploy-workloads/_index.md @@ -16,7 +16,7 @@ Deploy a workload to run an application in one or more containers. 1. Enter a **Name** for the workload. -1. Select a [workload type]({{}}/rancher/v2.5/en/k8s-in-rancher/workloads/). The workload defaults to a scalable deployment, by can change the workload type by clicking **More options.** +1. Select a [workload type]({{}}/rancher/v2.5/en/k8s-in-rancher/workloads/). The workload defaults to a scalable deployment, but you can change the workload type by clicking **More options.** 1. From the **Docker Image** field, enter the name of the Docker image that you want to deploy to the project, optionally prefacing it with the registry host (e.g. `quay.io`, `registry.gitlab.com`, etc.). During deployment, Rancher pulls this image from the specified public or private registry. If no registry host is provided, Rancher will pull the image from [Docker Hub](https://hub.docker.com/explore/). Enter the name exactly as it appears in the registry server, including any required path, and optionally including the desired tag (e.g. `registry.gitlab.com/user/path/image:tag`). If no tag is provided, the `latest` tag will be automatically used. diff --git a/content/rancher/v2.5/en/monitoring-alerting/configuration/_index.md b/content/rancher/v2.5/en/monitoring-alerting/configuration/_index.md index e56978fbb98..2d7867cbc4c 100644 --- a/content/rancher/v2.5/en/monitoring-alerting/configuration/_index.md +++ b/content/rancher/v2.5/en/monitoring-alerting/configuration/_index.md @@ -15,6 +15,8 @@ For information on configuring custom scrape targets and rules for Prometheus, p The resource requests and limits for the monitoring application can be configured when installing `rancher-monitoring`. For more information about the default limits, see [this page.](./helm-chart-options/#configuring-resource-limits-and-requests) +>**Note:** On an idle cluster, Monitoring V2 has significantly higher CPU usage (up to 70%) as compared to Monitoring V1. To improve performance and achieve similar results as in Monitoring V1, turn off the Prometheus adapter. + # Prometheus Configuration It is usually not necessary to directly edit the Prometheus custom resource. diff --git a/content/rancher/v2.5/en/monitoring-alerting/configuration/servicemonitor-podmonitor/_index.md b/content/rancher/v2.5/en/monitoring-alerting/configuration/servicemonitor-podmonitor/_index.md index 79f3da27930..39ddfd2b5a0 100644 --- a/content/rancher/v2.5/en/monitoring-alerting/configuration/servicemonitor-podmonitor/_index.md +++ b/content/rancher/v2.5/en/monitoring-alerting/configuration/servicemonitor-podmonitor/_index.md @@ -26,6 +26,6 @@ For more information about how ServiceMonitors work, refer to the [Prometheus Op This pseudo-CRD maps to a section of the Prometheus custom resource configuration. It declaratively specifies how group of pods should be monitored. -When a PodMonitor is created, the Prometheus Operator updates the Prometheus scrape configuration to include the PodMonitor configuration. Then Prometheus begins scraping metrics from the endpoint defined in the ServiceMonitor. +When a PodMonitor is created, the Prometheus Operator updates the Prometheus scrape configuration to include the PodMonitor configuration. Then Prometheus begins scraping metrics from the endpoint defined in the PodMonitor. Any Pods in your cluster that match the labels located within the PodMonitor `selector` field will be monitored based on the `podMetricsEndpoints` specified on the PodMonitor. For more information on what fields can be specified, please look at the [spec](https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#podmonitorspec) provided by Prometheus Operator. diff --git a/content/rancher/v2.5/en/monitoring-alerting/how-monitoring-works/_index.md b/content/rancher/v2.5/en/monitoring-alerting/how-monitoring-works/_index.md index 6445df9e75a..30b19cdbc66 100644 --- a/content/rancher/v2.5/en/monitoring-alerting/how-monitoring-works/_index.md +++ b/content/rancher/v2.5/en/monitoring-alerting/how-monitoring-works/_index.md @@ -11,52 +11,78 @@ weight: 1 # 1. Architecture Overview -This diagram shows how data flows through the Monitoring V2 application: +_**The following sections describe how data flows through the Monitoring V2 application:**_ -{{% row %}} -{{% column %}} +### Prometheus Operator -![How data flows through the monitoring application]({{}}/img/rancher/monitoring-v2-architecture-overview.svg) +Prometheus Operator observes ServiceMonitors, PodMonitors, and PrometheusRules being created. When the Prometheus configuration resources are created, Prometheus Operator calls the Prometheus API to sync the new configuration. As the diagram at the end of this section shows, the Prometheus Operator acts as the intermediary between Prometheus and Kubernetes, calling the Prometheus API to synchronize Prometheus with the monitoring-related resources in Kubernetes. -{{% /column %}} -{{% column %}} +### ServiceMonitors and PodMonitors +ServiceMonitors and PodMonitors declaratively specify targets, such as Services and Pods, that need to be monitored. -1. Rules define what Prometheus metrics or time series database queries should result in alerts being fired. -2. ServiceMonitors and PodMonitors declaratively specify how services and pods should be monitored. They use labels to scrape metrics from pods. -3. Prometheus Operator observes ServiceMonitors, PodMonitors and PrometheusRules being created. -4. When the Prometheus configuration resources are created, Prometheus Operator calls the Prometheus API to sync the new configuration. -5. Recording Rules are not directly used for alerting. They create new time series of precomputed queries. These new time series data can then be queried to generate alerts. -6. Prometheus scrapes all targets in the scrape configuration on a recurring schedule based on the scrape interval, storing the results in its time series database.Depending on the Kubernetes master component and Kubernetes distribution, the metrics from a certain Kubernetes component could be directly exposed to Prometheus, proxied through PushProx, or not available. For details, see Scraping and Exposing Metrics. -7. Prometheus evaluates the alerting rules against the time series database. It fires alerts to Alertmanager whenever an alerting rule evaluates to a positive number. -8. Alertmanager uses routes to group, label and filter the fired alerts to translate them into useful notifications. -9. Alertmanager uses the Receiver configuration to send notifications to Slack, PagerDuty, SMS, or other types of receivers. +- Targets are scraped on a recurring schedule based on the configured Prometheus scrape interval, and the metrics that are scraped are stored into the Prometheus Time Series Database (TSDB). -{{% /column %}} -{{% /row %}} +- In order to perform the scrape, ServiceMonitors and PodMonitors are defined with label selectors that determine which Services or Pods should be scraped and endpoints that determine how the scrape should happen on the given target, e.g., scrape/metrics in TCP 10252, proxying through IP addr x.x.x.x. +- Out of the box, Monitoring V2 comes with certain pre-configured exporters that are deployed based on the type of Kubernetes cluster that it is deployed on. For more information, see [Scraping and Exposing Metrics](#5-scraping-and-exposing-metrics). +### How PushProx Works + +- Certain internal Kubernetes components are scraped via a proxy deployed as part of Monitoring V2 called **PushProx**. The Kubernetes components that expose metrics to Prometheus through PushProx are the following: +`kube-controller-manager`, `kube-scheduler`, `etcd`, and `kube-proxy`. + +- For each PushProx exporter, we deploy one PushProx client onto all target nodes. For example, a PushProx client is deployed onto all controlplane nodes for kube-controller-manager, all etcd nodes for kube-etcd, and all nodes for kubelet. + +- We deploy exactly one PushProx proxy per exporter. The process for exporting metrics is as follows: + +1. The PushProx Client establishes an outbound connection with the PushProx Proxy. +1. The client then polls the proxy for scrape requests that have come into the proxy. +1. When the proxy receives a scrape request from Prometheus, the client sees it as a result of the poll. +1. The client scrapes the internal component. +1. The internal component responds by pushing metrics back to the proxy. + + +

Process for Exporting Metrics with PushProx:
+ +![Process for Exporting Metrics with PushProx]({{}}/img/rancher/pushprox-process.svg) + +### PrometheusRules + +PrometheusRules allow users to define rules for what metrics or time series database queries should result in alerts being fired. Rules are evaluated on an interval. + +- **Recording rules** create a new time series based on existing series that have been collected. They are frequently used to precompute complex queries. +- **Alerting rules** run a particular query and fire an alert from Prometheus if the query evaluates to a non-zero value. + +### Alert Routing + +Once Prometheus determines that an alert needs to be fired, alerts are forwarded to **Alertmanager**. + +- Alerts contain labels that come from the PromQL query itself and additional labels and annotations that can be provided as part of specifying the initial PrometheusRule. + +- Before receiving any alerts, Alertmanager will use the **routes** and **receivers** specified in its configuration to form a routing tree on which all incoming alerts are evaluated. Each node of the routing tree can specify additional grouping, labeling, and filtering that needs to happen based on the labels attached to the Prometheus alert. A node on the routing tree (usually a leaf node) can also specify that an alert that reaches it needs to be sent out to a configured Receiver, e.g., Slack, PagerDuty, SMS, etc. Note that Alertmanager will send an alert first to **alertingDriver**, then alertingDriver will send or forward alert to the proper destination. + +- Routes and receivers are also stored in the Kubernetes API via the Alertmanager Secret. When the Secret is updated, Alertmanager is also updated automatically. Note that routing occurs via labels only (not via annotations, etc.). + +
How data flows through the monitoring application:
# 2. How Prometheus Works -### 2.1. Storing Time Series Data +### Storing Time Series Data After collecting metrics from exporters, Prometheus stores the time series in a local on-disk time series database. Prometheus optionally integrates with remote systems, but `rancher-monitoring` uses local storage for the time series database. -The database can then be queried using PromQL, the query language for Prometheus. Grafana dashboards use PromQL queries to generate data visualizations. +Once stored, users can query this TSDB using PromQL, the query language for Prometheus. -### 2.2. Querying the Time Series Database +PromQL queries can be visualized in one of two ways: -The PromQL query language is the primary tool to query Prometheus for time series data. +1. By supplying the query in Prometheus's Graph UI, which will show a simple graphical view of the data. +1. By creating a Grafana Dashboard that contains the PromQL query and additional formatting directives that label axes, add units, change colors, use alternative visualizations, etc. -In Grafana, you can right-click a CPU utilization and click Inspect. This opens a panel that shows the [raw query results.](https://grafana.com/docs/grafana/latest/panels/inspect-panel/#inspect-raw-query-results)The raw results demonstrate how each dashboard is powered by PromQL queries. +### Defining Rules for Prometheus -### 2.3. Defining Rules for when Alerts Should be Fired - -Rules define the conditions for Prometheus to fire alerts. When PrometheusRule custom resources are created or updated, the Prometheus Operator observes the change and calls the Prometheus API to synchronize the rule configuration with the Alerting Rules and Recording Rules in Prometheus. - -When you define a Rule (which is declared within a RuleGroup in a PrometheusRule resource), the [spec of the Rule itself](https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#rule) contains labels that are used by Alertmanager to figure out which Route should receive this Alert. For example, an Alert with the label `team: front-end` will be sent to all Routes that match on that label. +Rules define queries that Prometheus needs to execute on a regular `evaluationInterval` to perform certain actions, such as firing an alert (alerting rules) or precomputing a query based on others existing in its TSDB (recording rules). These rules are encoded in PrometheusRules custom resources. When PrometheusRule custom resources are created or updated, the Prometheus Operator observes the change and calls the Prometheus API to synchronize the set of rules that Prometheus is currently evaluating on a regular interval. A PrometheusRule allows you to define one or more RuleGroups. Each RuleGroup consists of a set of Rule objects that can each represent either an alerting or a recording rule with the following fields: @@ -65,7 +91,9 @@ A PrometheusRule allows you to define one or more RuleGroups. Each RuleGroup con - Labels that should be attached to the alert or record that identify it (e.g. cluster name or severity) - Annotations that encode any additional important pieces of information that need to be displayed on the notification for an alert (e.g. summary, description, message, runbook URL, etc.). This field is not required for recording rules. -### 2.4. Firing Alerts +On evaluating a [rule](https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/api.md#rule), Prometheus will execute the provided PromQL query, add additional provided labels (or annotations - only for alerting rules), and execute the appropriate action for the rule. For example, an Alerting Rule that adds `team: front-end` as a label to the provided PromQL query will append that label to the fired alert, which will allow Alertmanager to forward the alert to the correct Receiver. + +### Alerting and Recording Rules Prometheus doesn't maintain the state of whether alerts are active. It fires alerts repetitively at every evaluation interval, relying on Alertmanager to group and filter the alerts into meaningful notifications. @@ -80,6 +108,7 @@ Alerting rules are more commonly used. Whenever an alerting rule evaluates to a The Rule file adds labels and annotations to alerts before firing them, depending on the use case: - Labels indicate information that identifies the alert and could affect the routing of the alert. For example, if when sending an alert about a certain container, the container ID could be used as a label. + - Annotations denote information that doesn't affect where an alert is routed, for example, a runbook or an error message. # 3. How Alertmanager Works @@ -87,17 +116,24 @@ The Rule file adds labels and annotations to alerts before firing them, dependin The Alertmanager handles alerts sent by client applications such as the Prometheus server. It takes care of the following tasks: - Deduplicating, grouping, and routing alerts to the correct receiver integration such as email, PagerDuty, or OpsGenie + - Silencing and inhibition of alerts + - Tracking alerts that fire over time + - Sending out the status of whether an alert is currently firing, or if it is resolved + +### Alerts Forwarded by alertingDrivers + +When alertingDrivers are installed, this creates a `Service` that can be used as the receiver's URL for Teams or SMS, based on the alertingDriver's configuration. The URL in the Receiver points to the alertingDrivers; so the Alertmanager sends alert first to alertingDriver, then alertingDriver forwards or sends alert to the proper destination. -### 3.1. Routing Alerts to Receivers +### Routing Alerts to Receivers Alertmanager coordinates where alerts are sent. It allows you to group alerts based on labels and fire them based on whether certain labels are matched. One top-level route accepts all alerts. From there, Alertmanager continues routing alerts to receivers based on whether they match the conditions of the next route. -While the Rancher UI forms only allow editing a routing tree that is two levels deep, you can configure more deeply nested routing structures by editing the Alertmanager custom resource YAML. +While the Rancher UI forms only allow editing a routing tree that is two levels deep, you can configure more deeply nested routing structures by editing the Alertmanager Secret. -### 3.2. Configuring Multiple Receivers +### Configuring Multiple Receivers By editing the forms in the Rancher UI, you can set up a Receiver resource with all the information Alertmanager needs to send alerts to your notification system. @@ -109,120 +145,89 @@ Prometheus Operator introduces a set of [Custom Resource Definitions](https://gi Prometheus Operator will automatically update your Prometheus configuration based on the live state of the resources and configuration options that are edited in the Rancher UI. -### 4.1. Resources Deployed by Default +### Resources Deployed by Default By default, a set of resources curated by the [kube-prometheus](https://github.com/prometheus-operator/kube-prometheus) project are deployed onto your cluster as part of installing the Rancher Monitoring Application to set up a basic Monitoring/Alerting stack. The resources that get deployed onto your cluster to support this solution can be found in the [`rancher-monitoring`](https://github.com/rancher/charts/tree/main/charts/rancher-monitoring) Helm chart, which closely tracks the upstream [kube-prometheus-stack](https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack) Helm chart maintained by the Prometheus community with certain changes tracked in the [CHANGELOG.md](https://github.com/rancher/charts/blob/main/charts/rancher-monitoring/CHANGELOG.md). -There are also certain special types of ConfigMaps and Secrets such as those corresponding to Grafana Dashboards, Grafana Datasources, and Alertmanager Configs that will automatically update your Prometheus configuration via sidecar proxies that observe the live state of those resources within your cluster. +### Default Exporters -### 4.2. PushProx +Monitoring V2 deploys three default exporters that provide additional metrics for Prometheus to store: -PushProx enhances the security of the monitoring application, allowing it to be installed on hardened Kubernetes clusters. +1. `node-exporter`: exposes hardware and OS metrics for Linux hosts. For more information on `node-exporter`, refer to the [upstream documentation](https://prometheus.io/docs/guides/node-exporter/). -To expose Kubernetes metrics, PushProxes use a client proxy model to expose specific ports within default Kubernetes components. Node exporters expose metrics to PushProx through an outbound connection. +1. `windows-exporter`: exposes hardware and OS metrics for Windows hosts (only deployed on Windows clusters). For more information on `windows-exporter`, refer to the [upstream documentation](https://github.com/prometheus-community/windows_exporter). -The proxy allows `rancher-monitoring` to scrape metrics from processes on the hostNetwork, such as the `kube-api-server`, without opening up node ports to inbound connections. +1. `kube-state-metrics`: expose additional metrics that track the state of resources contained in the Kubernetes API (e.g., pods, workloads, etc.). For more information on `kube-state-metrics`, refer to the [upstream documentation](https://github.com/kubernetes/kube-state-metrics/tree/master/docs). -PushProx is a DaemonSet that listens for clients that seek to register. Once registered, it proxies scrape requests through the established connection. Then the client executes the request to etcd. +ServiceMonitors and PodMonitors will scrape these exporters, as defined [here](#defining-what-metrics-are-scraped). Prometheus stores these metrics, and you can query the results via either Prometheus's UI or Grafana. -All of the default ServiceMonitors, such as `rancher-monitoring-kube-controller-manager`, are configured to hit the metrics endpoint of the client using this proxy. +See the [architecture](#1-architecture-overview) section for more information on recording rules, alerting rules, and Alertmanager. -For more details about how PushProx works, refer to [Scraping Metrics with PushProx.](#5-5-scraping-metrics-with-pushprox) - - -### 4.3. Default Exporters - -`rancher-monitoring` deploys two exporters to expose metrics to prometheus: `node-exporter` and `windows-exporter`. Both are deployed as DaemonSets. - -`node-exporter` exports container, pod and node metrics for CPU and memory from each Linux node. `windows-exporter` does the same, but for Windows nodes. - -For more information on `node-exporter`, refer to the [upstream documentation.](https://prometheus.io/docs/guides/node-exporter/) - -[kube-state-metrics](https://github.com/kubernetes/kube-state-metrics) is also useful because it exports metrics for Kubernetes components. - -### 4.4. Components Exposed in the Rancher UI +### Components Exposed in the Rancher UI When the monitoring application is installed, you will be able to edit the following components in the Rancher UI: | Component | Type of Component | Purpose and Common Use Cases for Editing | |--------------|------------------------|---------------------------| -| ServiceMonitor | Custom resource | Set up targets to scrape custom metrics from. Automatically updates the scrape configuration in the Prometheus custom resource. | -| PodMonitor | Custom resource | Set up targets to scrape custom metrics from. Automatically updates the scrape configuration in the Prometheus custom resource. | -| Receiver | Configuration block (part of Alertmanager) | Set up a notification system to receive alerts. Automatically updates the Alertmanager custom resource. | -| Route | Configuration block (part of Alertmanager) | Add identifying information to make alerts more meaningful and direct them to individual teams. Automatically updates the Alertmanager custom resource. | -| PrometheusRule | Custom resource | For more advanced use cases, you may want to define what Prometheus metrics or time series database queries should result in alerts being fired. Automatically updates the Prometheus custom resource. | -| Alertmanager | Custom resource | Edit this custom resource only if you need more advanced configuration options beyond what the Rancher UI exposes in the Routes and Receivers sections. For example, you might want to edit this resource to add a routing tree with more than two levels. | -| Prometheus | Custom resource | Edit this custom resource only if you need more advanced configuration beyond what can be configured using ServiceMonitors, PodMonitors, or [Rancher monitoring Helm chart options.](../configuration/helm-chart-options) | +| ServiceMonitor | Custom resource | Sets up Kubernetes Services to scrape custom metrics from. Automatically updates the scrape configuration in the Prometheus custom resource. | +| PodMonitor | Custom resource | Sets up Kubernetes Pods to scrape custom metrics from. Automatically updates the scrape configuration in the Prometheus custom resource. | +| Receiver | Configuration block (part of Alertmanager) | Modifies information on where to send an alert (e.g., Slack, PagerDuty, etc.) and any necessary information to send the alert (e.g., TLS certs, proxy URLs, etc.). Automatically updates the Alertmanager custom resource. | +| Route | Configuration block (part of Alertmanager) | Modifies the routing tree that is used to filter, label, and group alerts based on labels and send them to the appropriate Receiver. Automatically updates the Alertmanager custom resource. | +| PrometheusRule | Custom resource | Defines additional queries that need to trigger alerts or define materialized views of existing series that are within Prometheus's TSDB. Automatically updates the Prometheus custom resource. | + +### PushProx + +PushProx allows Prometheus to scrape metrics across a network boundary, which prevents users from having to expose metrics ports for internal Kubernetes components on each node in a Kubernetes cluster. + +Since the metrics for Kubernetes components are generally exposed on the host network of nodes in the cluster, PushProx deploys a DaemonSet of clients that sit on the hostNetwork of each node and make an outbound connection to a single proxy that is sitting on the Kubernetes API. Prometheus can then be configured to proxy scrape requests through the proxy to each client, which allows it to scrape metrics from the internal Kubernetes components without requiring any inbound node ports to be open. + +Refer to [Scraping Metrics with PushProx](#scraping-metrics-with-pushprox) for more. # 5. Scraping and Exposing Metrics -### 5.1. Defining what Metrics are Scraped +### Defining what Metrics are Scraped -ServiceMonitors define targets that are intended for Prometheus to scrape. The [Prometheus custom resource tells](https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/design.md#prometheus) Prometheus which ServiceMonitors it should use to find out where to scrape metrics from. +ServiceMonitors and PodMonitors define targets that are intended for Prometheus to scrape. The [Prometheus custom resource](https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/design.md#prometheus) tells Prometheus which ServiceMonitors or PodMonitors it should use to find out where to scrape metrics from. -The Prometheus Operator observes the ServiceMonitors. When it observes that ServiceMonitors are created or updated, it calls the Prometheus API to update the scrape configuration in the Prometheus custom resource and keep it in sync with the scrape configuration in the ServiceMonitors. This scrape configuration tells Prometheus which endpoints to scrape metrics from and how it will label the metrics from those endpoints. +The Prometheus Operator observes the ServiceMonitors and PodMonitors. When it observes that they are created or updated, it calls the Prometheus API to update the scrape configuration in the Prometheus custom resource and keep it in sync with the scrape configuration in the ServiceMonitors or PodMonitors. This scrape configuration tells Prometheus which endpoints to scrape metrics from and how it will label the metrics from those endpoints. Prometheus scrapes all of the metrics defined in its scrape configuration at every `scrape_interval`, which is one minute by default. The scrape configuration can be viewed as part of the Prometheus custom resource that is exposed in the Rancher UI. -### 5.2. How the Prometheus Operator Sets up Metrics Scraping +### How the Prometheus Operator Sets up Metrics Scraping The Prometheus Deployment or StatefulSet scrapes metrics, and the configuration of Prometheus is controlled by the Prometheus custom resources. The Prometheus Operator watches for Prometheus and Alertmanager resources, and when they are created, the Prometheus Operator creates a Deployment or StatefulSet for Prometheus or Alertmanager with the user-defined configuration. -
How the Prometheus Operator Sets up Metrics Scraping
+When the Prometheus Operator observes ServiceMonitors, PodMonitors, and PrometheusRules being created, it knows that the scrape configuration needs to be updated in Prometheus. It updates Prometheus by first updating the configuration and rules files in the volumes of Prometheus's Deployment or StatefulSet. Then it calls the Prometheus API to sync the new configuration, resulting in the Prometheus Deployment or StatefulSet to be modified in place. -![How the Prometheus Operator sets up metrics scraping]({{}}/img/rancher/set-up-scraping.svg) - -When the Prometheus Operator observes ServiceMonitors, PodMonitors and PrometheusRules being created, it knows that the scrape configuration needs to be updated in Prometheus. It updates Prometheus by first updating the configuration and rules files in the volumes of Prometheus's Deployment or StatefulSet. Then it calls the Prometheus API to sync the new configuration, resulting in the Prometheus Deployment or StatefulSet to be modified in place. - -![How the Prometheus Operator Updates Scrape Configuration]({{}}/img/rancher/update-scrape-config.svg) - -### 5.3. How Kubernetes Component Metrics are Exposed +### How Kubernetes Component Metrics are Exposed Prometheus scrapes metrics from deployments known as [exporters,](https://prometheus.io/docs/instrumenting/exporters/) which export the time series data in a format that Prometheus can ingest. In Prometheus, time series consist of streams of timestamped values belonging to the same metric and the same set of labeled dimensions. -To allow monitoring to be installed on hardened Kubernetes clusters, `rancher-monitoring` application proxies the communication between Prometheus and the exporter through PushProx for some Kubernetes master components. +### Scraping Metrics with PushProx -### 5.4. Scraping Metrics without PushProx +Certain internal Kubernetes components are scraped via a proxy deployed as part of Monitoring V2 called PushProx. For detailed information on PushProx, refer [here](#how-pushprox-works) and to the above [architecture](#1-architecture-overview) section. -The Kubernetes components that directly expose metrics to Prometheus are the following: +### Scraping Metrics -- kubelet -- ingress-nginx* +The following Kubernetes components are directly scraped by Prometheus: + +- kubelet* +- ingress-nginx** - coreDns/kubeDns - kube-api-server -\* For RKE and RKE2 clusters, ingress-nginx is deployed by default and treated as an internal Kubernetes component. +\* You can optionally use `hardenedKubelet.enabled` to use a PushProx, but that is not the default. -### 5.5. Scraping Metrics with PushProx +** For RKE and RKE2 clusters, ingress-nginx is deployed by default and treated as an internal Kubernetes component. -The purpose of this architecture is to allow us to scrape internal Kubernetes components without exposing those ports to inbound requests. As a result, Prometheus can scrape metrics across a network boundary. -The Kubernetes components that expose metrics to Prometheus through PushProx are the following: +### Scraping Metrics Based on Kubernetes Distribution -- kube-controller-manager -- kube-scheduler -- etcd -- kube-proxy - -For each PushProx exporter, we deploy one PushProx client onto all target nodes. For example, a PushProx client is deployed onto all controlplane nodes for kube-controller-manager, all etcd nodes for kube-etcd, and all nodes for kubelet. We deploy exactly one PushProx proxy per exporter. - -The process for exporting metrics is as follows: - -1. The PushProx Client establishes an outbound connection with the PushProx Proxy. -2. The client then polls the proxy for scrape requests that have come into the proxy. -3. When the proxy receives a scrape request from Prometheus, the client sees it as a result of the poll. -4. The client scrapes the internal component. -5. The internal component responds by pushing metrics back to the proxy. - -
Process for Exporting Metrics with PushProx
- -![Process for Exporting Metrics with PushProx]({{}}/img/rancher/pushprox-process.svg) - -Metrics are scraped differently based on the Kubernetes distribution. For help with terminology, see Terminology(#terminology). For details, see the table below: +Metrics are scraped differently based on the Kubernetes distribution. For help with terminology, refer [here](#terminology). For details, see the table below:
How Metrics are Exposed to Prometheus
@@ -239,7 +244,7 @@ Metrics are scraped differently based on the Kubernetes distribution. For help w \* For RKE and RKE2 clusters, ingress-nginx is deployed by default and treated as an internal Kubernetes component. -### 5.6. Terminology +### Terminology - **kube-scheduler:** The internal Kubernetes component that uses information in the pod spec to decide on which node to run a pod. - **kube-controller-manager:** The internal Kubernetes component that is responsible for node management (detecting if a node fails), pod replication and endpoint creation. diff --git a/content/rancher/v2.5/en/monitoring-alerting/rbac/_index.md b/content/rancher/v2.5/en/monitoring-alerting/rbac/_index.md index 4bc0e009c2a..3260cf8cf95 100644 --- a/content/rancher/v2.5/en/monitoring-alerting/rbac/_index.md +++ b/content/rancher/v2.5/en/monitoring-alerting/rbac/_index.md @@ -128,8 +128,8 @@ The relationship between the default roles deployed by Rancher Cluster Manager ( | --------- | --------- | --------- | --------- | | cluster-owner | cluster-admin | N/A | ClusterRoleBinding | | cluster-member | admin | monitoring-admin | ClusterRoleBinding | -| project-owner | edit | monitoring-admin | RoleBinding within Project namespace | -| project-member | view | monitoring-edit | RoleBinding within Project namespace | +| project-owner | admin | monitoring-admin | RoleBinding within Project namespace | +| project-member | edit | monitoring-edit | RoleBinding within Project namespace | In addition to these default Roles, the following additional Rancher project roles can be applied to members of your Cluster to provide additional access to Monitoring. These Rancher Roles will be tied to ClusterRoles deployed by the Monitoring chart: diff --git a/content/rancher/v2.5/en/overview/_index.md b/content/rancher/v2.5/en/overview/_index.md index dea44182edd..0bfde58d339 100644 --- a/content/rancher/v2.5/en/overview/_index.md +++ b/content/rancher/v2.5/en/overview/_index.md @@ -39,7 +39,7 @@ The Rancher API server is built on top of an embedded Kubernetes API server and - **Provisioning Kubernetes clusters:** The Rancher API server can [provision Kubernetes]({{}}/rancher/v2.5/en/cluster-provisioning/) on existing nodes, or perform [Kubernetes upgrades.]({{}}/rancher/v2.5/en/cluster-admin/upgrading-kubernetes) - **Catalog management:** Rancher provides the ability to use a [catalog of Helm charts]({{}}/rancher/v2.5/en/catalog/) that make it easy to repeatedly deploy applications. -- **Managing projects:** A project is a group of multiple namespaces and access control policies within a cluster. A project is a Rancher concept, not a Kubernetes concept, which allows you manage multiple namespaces as a group and perform Kubernetes operations in them. The Rancher UI provides features for [project administration]({{}}/rancher/v2.5/en/project-admin/) and for [managing applications within projects.]({{}}/rancher/v2.5/en/k8s-in-rancher/) +- **Managing projects:** A project is a group of multiple namespaces and access control policies within a cluster. A project is a Rancher concept, not a Kubernetes concept, which allows you to manage multiple namespaces as a group and perform Kubernetes operations in them. The Rancher UI provides features for [project administration]({{}}/rancher/v2.5/en/project-admin/) and for [managing applications within projects.]({{}}/rancher/v2.5/en/k8s-in-rancher/) - **Pipelines:** Setting up a [pipeline]({{}}/rancher/v2.5/en/project-admin/pipelines/) can help developers deliver new software as quickly and efficiently as possible. Within Rancher, you can configure pipelines for each of your Rancher projects. - **Istio:** Our [integration with Istio]({{}}/rancher/v2.5/en/istio/) is designed so that a Rancher operator, such as an administrator or cluster owner, can deliver Istio to developers. Then developers can use Istio to enforce security policies, troubleshoot problems, or manage traffic for green/blue deployments, canary deployments, or A/B testing. diff --git a/content/rancher/v2.5/en/overview/architecture-recommendations/_index.md b/content/rancher/v2.5/en/overview/architecture-recommendations/_index.md index a2aa6faf9f5..25029e83663 100644 --- a/content/rancher/v2.5/en/overview/architecture-recommendations/_index.md +++ b/content/rancher/v2.5/en/overview/architecture-recommendations/_index.md @@ -34,7 +34,7 @@ We don't recommend installing Rancher in a single Docker container, because if t ### K3s Kubernetes Cluster Installations -One option for the underlying Kubernetes cluster is to use K3s Kubernetes. K3s Rancher's CNCF certified Kubernetes distribution. It is easy to install, with half the memory of Kubernetes, all in a binary less than 100 MB. One main advantage of this K3s architecture is that it allows an external datastore to hold the cluster data, allowing the K3s server nodes to be treated as ephemeral. +One option for the underlying Kubernetes cluster is to use K3s Kubernetes. K3s is Rancher's CNCF certified Kubernetes distribution. It is easy to install and uses half the memory of Kubernetes, all in a binary of less than 100 MB. Another advantage of K3s is that it allows an external datastore to hold the cluster data, allowing the K3s server nodes to be treated as ephemeral.
Architecture of a K3s Kubernetes Cluster Running the Rancher Management Server
![Architecture of a K3s Kubernetes Cluster Running the Rancher Management Server]({{}}/img/rancher/k3s-server-storage.svg) @@ -110,4 +110,4 @@ For more best practices for downstream clusters, refer to the [production checkl If you are using an [authorized cluster endpoint,]({{}}/rancher/v2.5/en/overview/architecture/#4-authorized-cluster-endpoint) we recommend creating an FQDN pointing to a load balancer which balances traffic across your nodes with the `controlplane` role. -If you are using private CA signed certificates on the load balancer, you have to supply the CA certificate, which will be included in the generated kubeconfig file to validate the certificate chain. See the documentation on [kubeconfig files]({{}}/rancher/v2.5/en/k8s-in-rancher/kubeconfig/) and [API keys]({{}}/rancher/v2.5/en/user-settings/api-keys/#creating-an-api-key) for more information. \ No newline at end of file +If you are using private CA signed certificates on the load balancer, you have to supply the CA certificate, which will be included in the generated kubeconfig file to validate the certificate chain. See the documentation on [kubeconfig files]({{}}/rancher/v2.5/en/k8s-in-rancher/kubeconfig/) and [API keys]({{}}/rancher/v2.5/en/user-settings/api-keys/#creating-an-api-key) for more information. diff --git a/content/rancher/v2.5/en/overview/concepts/_index.md b/content/rancher/v2.5/en/overview/concepts/_index.md index 4e9d2d89e0d..30d5374875b 100644 --- a/content/rancher/v2.5/en/overview/concepts/_index.md +++ b/content/rancher/v2.5/en/overview/concepts/_index.md @@ -54,7 +54,7 @@ Three etcd nodes is generally sufficient for smaller clusters and five etcd node ### Controlplane Nodes -Controlplane nodes run the Kubernetes API server, scheduler, and controller manager. These nodes take care of routine tasks to ensure that your cluster maintains your configuration. Because all cluster data is stored on your etcd nodes, control plane nodes are stateless. You can run control plane on a single node, although two or more nodes are recommended for redundancy. Additionally, a single node can share the control plane and etcd roles. +Controlplane nodes run the Kubernetes API server, scheduler, and controller manager. These nodes take care of routine tasks to ensure that your cluster maintains your configuration. Because all cluster data is stored on your etcd nodes, control plane nodes are stateless. You can run control plane on a single node, although three or more nodes are recommended for redundancy. Additionally, a single node can share the control plane and etcd roles. ### Worker Nodes @@ -71,4 +71,4 @@ For high-availability installations of Rancher, Helm is the tool used to install Helm is the package management tool of choice for Kubernetes. Helm charts provide templating syntax for Kubernetes YAML manifest documents. With Helm we can create configurable deployments instead of just using static files. For more information about creating your own catalog of deployments, check out the docs at [https://helm.sh/](https://helm.sh). -For more information on service accounts and cluster role binding, refer to the [Kubernetes documentation.](https://kubernetes.io/docs/reference/access-authn-authz/rbac/) \ No newline at end of file +For more information on service accounts and cluster role binding, refer to the [Kubernetes documentation.](https://kubernetes.io/docs/reference/access-authn-authz/rbac/) diff --git a/content/rancher/v2.5/en/pipelines/_index.md b/content/rancher/v2.5/en/pipelines/_index.md index a47fdaf7577..8c7ac545a87 100644 --- a/content/rancher/v2.5/en/pipelines/_index.md +++ b/content/rancher/v2.5/en/pipelines/_index.md @@ -6,7 +6,9 @@ aliases: - /rancher/v2.x/en/pipelines/ --- -> As of Rancher v2.5, Git-based deployment pipelines are now recommended to be handled with Rancher Continuous Delivery powered by [Fleet,]({{}}/rancher/v2.5/en/deploy-across-clusters/fleet) available in Cluster Explorer. +> As of Rancher v2.5, Git-based deployment pipelines are now deprecated. We recommend handling pipelines with Rancher Continuous Delivery powered by [Fleet]({{}}/rancher/v2.5/en/deploy-across-clusters/fleet), available in Cluster Explorer. +> +>**Notice:** Fleet does not replace Rancher pipelines; the distinction is that Rancher pipelines are now powered by Fleet. Rancher's pipeline provides a simple CI/CD experience. Use it to automatically checkout code, run builds or scripts, publish Docker images or catalog applications, and deploy the updated software to users. diff --git a/content/rancher/v2.5/en/project-admin/project-members/_index.md b/content/rancher/v2.5/en/project-admin/project-members/_index.md index a8476db8ec8..45a149e90ea 100644 --- a/content/rancher/v2.5/en/project-admin/project-members/_index.md +++ b/content/rancher/v2.5/en/project-admin/project-members/_index.md @@ -43,6 +43,8 @@ Following project creation, you can add users as project members so that they ca > >- Users assigned the `Owner` or `Member` role for a project automatically inherit the `namespace creation` role. However, this role is a [Kubernetes ClusterRole](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#role-and-clusterrole), meaning its scope extends to all projects in the cluster. Therefore, users explicitly assigned the `Owner` or `Member` role for a project can create namespaces in other projects they're assigned to, even with only the `Read Only` role assigned. > + >- By default, the Rancher role of `project-member` inherits from the `Kubernetes-edit` role, and the `project-owner` role inherits from the `Kubernetes-admin` role. As such, both `project-member` and `project-owner` roles will allow for namespace management, including the ability to create and delete namespaces. + > >- For `Custom` roles, you can modify the list of individual roles available for assignment. > > - To add roles to the list, [Add a Custom Role]({{}}/rancher/v2.5/en/admin-settings/rbac/default-custom-roles). diff --git a/content/rancher/v2.5/en/project-admin/resource-quotas/_index.md b/content/rancher/v2.5/en/project-admin/resource-quotas/_index.md index 77f54f689cc..5bd7f0ae075 100644 --- a/content/rancher/v2.5/en/project-admin/resource-quotas/_index.md +++ b/content/rancher/v2.5/en/project-admin/resource-quotas/_index.md @@ -42,4 +42,4 @@ Edit [resource quotas]({{}}/rancher/v2.5/en/cluster-admin/projects-and- 1. Click **Create**. -**Result:** The resource quota is applied to your project and namespaces. When you add more namespaces in the future, Rancher validates that the project can accommodate the namespace. If the project can't allocate the resources, Rancher won't let you save your changes. +**Result:** The resource quota is applied to your project and namespaces. When you add more namespaces in the future, Rancher validates that the project can accommodate the namespace. If the project can't allocate the resources, you may still create namespaces, but they will be given a resource quota of 0. Subsequently, Rancher will not allow you to create any resources restricted by this quota. diff --git a/content/rancher/v2.5/en/quick-start-guide/_index.md b/content/rancher/v2.5/en/quick-start-guide/_index.md index 13ea050b05e..6e8bb1f38ee 100644 --- a/content/rancher/v2.5/en/quick-start-guide/_index.md +++ b/content/rancher/v2.5/en/quick-start-guide/_index.md @@ -1,10 +1,8 @@ --- title: Rancher Deployment Quick Start Guides metaDescription: Use this section to jump start your Rancher deployment and testing. It contains instructions for a simple Rancher setup and some common use cases. -short title: Use this section to jump start your Rancher deployment and testing. It contains instructions for a simple Rancher setup and some common use cases. +short title: Use this section to jump start your Rancher deployment and testing. It contains instructions for a simple Rancher setup and some common use cases. weight: 2 -aliases: - - /rancher/v2.x/en/quick-start-guide/ --- >**Note:** The intent of these guides is to quickly launch a sandbox that you can use to evaluate Rancher. These guides are not intended for production environments. For comprehensive setup instructions, see [Installation]({{}}/rancher/v2.5/en/installation/). @@ -15,5 +13,3 @@ We have Quick Start Guides for: - [Deploying Rancher Server]({{}}/rancher/v2.5/en/quick-start-guide/deployment/): Get started running Rancher using the method most convenient for you. - [Deploying Workloads]({{}}/rancher/v2.5/en/quick-start-guide/workload/): Deploy a simple [workload](https://kubernetes.io/docs/concepts/workloads/) and expose it, letting you access it from outside the cluster. - -- [Using the CLI]({{}}/rancher/v2.5/en/quick-start-guide/cli/): Use `kubectl` or Rancher command line interface (CLI) to interact with your Rancher instance. diff --git a/content/rancher/v2.5/en/quick-start-guide/cli/_index.md b/content/rancher/v2.5/en/quick-start-guide/cli/_index.md deleted file mode 100644 index 954e27f6a70..00000000000 --- a/content/rancher/v2.5/en/quick-start-guide/cli/_index.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -title: CLI with Rancher -weight: 100 -aliases: - - /rancher/v2.x/en/quick-start-guide/cli/ ---- - -Interact with Rancher using command line interface (CLI) tools from your workstation. - -## Rancher CLI - -Follow the steps in [rancher cli](../../cli). - -Ensure you can run `rancher kubectl get pods` successfully. - - -## kubectl -Install the `kubectl` utility. See [install kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/). - - -Configure kubectl by visiting your cluster in the Rancher Web UI then clicking on `Kubeconfig`, copying contents and putting into your `~/.kube/config` file. - -Run `kubectl cluster-info` or `kubectl get pods` successfully. - -## Authentication with kubectl and kubeconfig Tokens with TTL - -_Requirements_ - -If admins have [enforced TTL on kubeconfig tokens]({{}}/rancher/v2.5/en/api/api-tokens/#setting-ttl-on-kubeconfig-tokens), the kubeconfig file requires the [Rancher cli](../cli) to be present in your PATH when you run `kubectl`. Otherwise, you’ll see error like: -`Unable to connect to the server: getting credentials: exec: exec: "rancher": executable file not found in $PATH`. - -This feature enables kubectl to authenticate with the Rancher server and get a new kubeconfig token when required. The following auth providers are currently supported: - -1. Local -2. Active Directory -3. FreeIpa, OpenLdap -4. SAML providers - Ping, Okta, ADFS, Keycloak, Shibboleth - -When you first run kubectl, for example, `kubectl get pods`, it will ask you to pick an auth provider and log in with the Rancher server. -The kubeconfig token is cached in the path where you run kubectl under `./.cache/token`. This token is valid till [it expires](../../api/api-tokens/#setting-ttl-on-kubeconfig-tokens-period), or [gets deleted from the Rancher server](../../api/api-tokens/#deleting-tokens) -Upon expiration, the next `kubectl get pods` will ask you to log in with the Rancher server again. diff --git a/content/rancher/v2.5/en/quick-start-guide/deployment/amazon-aws-qs/_index.md b/content/rancher/v2.5/en/quick-start-guide/deployment/amazon-aws-qs/_index.md index c5f189a9542..146b7151ad4 100644 --- a/content/rancher/v2.5/en/quick-start-guide/deployment/amazon-aws-qs/_index.md +++ b/content/rancher/v2.5/en/quick-start-guide/deployment/amazon-aws-qs/_index.md @@ -1,11 +1,11 @@ --- title: Rancher AWS Quick Start Guide -description: Read this step by step Rancher AWS guide to quickly deploy a Rancher Server with a single node cluster attached. +description: Read this step by step Rancher AWS guide to quickly deploy a Rancher server with a single-node downstream Kubernetes cluster attached. weight: 100 -aliases: - - /rancher/v2.x/en/quick-start-guide/deployment/amazon-aws-qs/ --- -The following steps will quickly deploy a Rancher Server on AWS with a single node cluster attached. +The following steps will quickly deploy a Rancher server on AWS in a single-node K3s Kubernetes cluster, with a single-node downstream Kubernetes cluster attached. + +>**Note:** The intent of these guides is to quickly launch a sandbox that you can use to evaluate Rancher. These guides are not intended for production environments. For comprehensive setup instructions, see [Installation]({{}}/rancher/v2.5/en/installation/). ## Prerequisites @@ -21,25 +21,26 @@ The following steps will quickly deploy a Rancher Server on AWS with a single no 1. Clone [Rancher Quickstart](https://github.com/rancher/quickstart) to a folder using `git clone https://github.com/rancher/quickstart`. -1. Go into the AWS folder containing the terraform files by executing `cd quickstart/aws`. +2. Go into the AWS folder containing the terraform files by executing `cd quickstart/aws`. -1. Rename the `terraform.tfvars.example` file to `terraform.tfvars`. +3. Rename the `terraform.tfvars.example` file to `terraform.tfvars`. -1. Edit `terraform.tfvars` and customize the following variables: +4. Edit `terraform.tfvars` and customize the following variables: - `aws_access_key` - Amazon AWS Access Key - `aws_secret_key` - Amazon AWS Secret Key - `rancher_server_admin_password` - Admin password for created Rancher server -1. **Optional:** Modify optional variables within `terraform.tfvars`. +5. **Optional:** Modify optional variables within `terraform.tfvars`. See the [Quickstart Readme](https://github.com/rancher/quickstart) and the [AWS Quickstart Readme](https://github.com/rancher/quickstart/tree/master/aws) for more information. Suggestions include: - - `aws_region` - Amazon AWS region, choose the closest instead of the default + - `aws_region` - Amazon AWS region, choose the closest instead of the default (`us-east-1`) - `prefix` - Prefix for all created resources - `instance_type` - EC2 instance size used, minimum is `t3a.medium` but `t3a.large` or `t3a.xlarge` could be used if within budget + - `add_windows_node` - If true, an additional Windows worker node is added to the workload cluster -1. Run `terraform init`. +6. Run `terraform init`. -1. To initiate the creation of the environment, run `terraform apply --auto-approve`. Then wait for output similar to the following: +7. To initiate the creation of the environment, run `terraform apply --auto-approve`. Then wait for output similar to the following: ``` Apply complete! Resources: 16 added, 0 changed, 0 destroyed. @@ -51,11 +52,12 @@ Suggestions include: workload_node_ip = yy.yy.yy.yy ``` -1. Paste the `rancher_server_url` from the output above into the browser. Log in when prompted (default username is `admin`, use the password set in `rancher_server_admin_password`). +8. Paste the `rancher_server_url` from the output above into the browser. Log in when prompted (default username is `admin`, use the password set in `rancher_server_admin_password`). +9. ssh to the Rancher server using the `id_rsa` key generated in `quickstart/aws`. #### Result -Two Kubernetes clusters are deployed into your AWS account, one running Rancher Server and the other ready for experimentation deployments. Please note that while this setup is a great way to explore Rancher functionality, a production setup should follow our high availability setup guidelines. +Two Kubernetes clusters are deployed into your AWS account, one running Rancher Server and the other ready for experimentation deployments. Please note that while this setup is a great way to explore Rancher functionality, a production setup should follow our high availability setup guidelines. SSH keys for the VMs are auto-generated and stored in the module directory. ### What's Next? diff --git a/content/rancher/v2.5/en/quick-start-guide/deployment/digital-ocean-qs/_index.md b/content/rancher/v2.5/en/quick-start-guide/deployment/digital-ocean-qs/_index.md index 2e3e94777df..168b580dbdf 100644 --- a/content/rancher/v2.5/en/quick-start-guide/deployment/digital-ocean-qs/_index.md +++ b/content/rancher/v2.5/en/quick-start-guide/deployment/digital-ocean-qs/_index.md @@ -1,11 +1,11 @@ --- title: Rancher DigitalOcean Quick Start Guide -description: Read this step by step Rancher DigitalOcean guide to quickly deploy a Rancher Server with a single node cluster attached. +description: Read this step by step Rancher DigitalOcean guide to quickly deploy a Rancher server with a single-node downstream Kubernetes cluster attached. weight: 100 -aliases: - - /rancher/v2.x/en/quick-start-guide/deployment/digital-ocean-qs/ --- -The following steps will quickly deploy a Rancher Server on DigitalOcean with a single node cluster attached. +The following steps will quickly deploy a Rancher server on DigitalOcean in a single-node K3s Kubernetes cluster, with a single-node downstream Kubernetes cluster attached. + +>**Note:** The intent of these guides is to quickly launch a sandbox that you can use to evaluate Rancher. These guides are not intended for production environments. For comprehensive setup instructions, see [Installation]({{}}/rancher/v2.5/en/installation/). ## Prerequisites @@ -21,25 +21,24 @@ The following steps will quickly deploy a Rancher Server on DigitalOcean with a 1. Clone [Rancher Quickstart](https://github.com/rancher/quickstart) to a folder using `git clone https://github.com/rancher/quickstart`. -1. Go into the DigitalOcean folder containing the terraform files by executing `cd quickstart/do`. +2. Go into the DigitalOcean folder containing the terraform files by executing `cd quickstart/do`. -1. Rename the `terraform.tfvars.example` file to `terraform.tfvars`. +3. Rename the `terraform.tfvars.example` file to `terraform.tfvars`. -1. Edit `terraform.tfvars` and customize the following variables: +4. Edit `terraform.tfvars` and customize the following variables: - `do_token` - DigitalOcean access key - `rancher_server_admin_password` - Admin password for created Rancher server -1. **Optional:** Modify optional variables within `terraform.tfvars`. +5. **Optional:** Modify optional variables within `terraform.tfvars`. See the [Quickstart Readme](https://github.com/rancher/quickstart) and the [DO Quickstart Readme](https://github.com/rancher/quickstart/tree/master/do) for more information. Suggestions include: - - `do_region` - DigitalOcean region, choose the closest instead of the default + - `do_region` - DigitalOcean region, choose the closest instead of the default (`nyc1`) - `prefix` - Prefix for all created resources - `droplet_size` - Droplet size used, minimum is `s-2vcpu-4gb` but `s-4vcpu-8gb` could be used if within budget - - `ssh_key_file_name` - Use a specific SSH key instead of `~/.ssh/id_rsa` (public key is assumed to be `${ssh_key_file_name}.pub`) -1. Run `terraform init`. +6. Run `terraform init`. -1. To initiate the creation of the environment, run `terraform apply --auto-approve`. Then wait for output similar to the following: +7. To initiate the creation of the environment, run `terraform apply --auto-approve`. Then wait for output similar to the following: ``` Apply complete! Resources: 15 added, 0 changed, 0 destroyed. @@ -51,11 +50,12 @@ Suggestions include: workload_node_ip = yy.yy.yy.yy ``` -1. Paste the `rancher_server_url` from the output above into the browser. Log in when prompted (default username is `admin`, use the password set in `rancher_server_admin_password`). +8. Paste the `rancher_server_url` from the output above into the browser. Log in when prompted (default username is `admin`, use the password set in `rancher_server_admin_password`). +9. ssh to the Rancher Server using the `id_rsa` key generated in `quickstart/do`. #### Result -Two Kubernetes clusters are deployed into your DigitalOcean account, one running Rancher Server and the other ready for experimentation deployments. +Two Kubernetes clusters are deployed into your DigitalOcean account, one running Rancher Server and the other ready for experimentation deployments. Please note that while this setup is a great way to explore Rancher functionality, a production setup should follow our high availability setup guidelines. SSH keys for the VMs are auto-generated and stored in the module directory. ### What's Next? diff --git a/content/rancher/v2.5/en/quick-start-guide/deployment/google-gcp-qs/_index.md b/content/rancher/v2.5/en/quick-start-guide/deployment/google-gcp-qs/_index.md index 48eaec3b4ba..35839e68f87 100644 --- a/content/rancher/v2.5/en/quick-start-guide/deployment/google-gcp-qs/_index.md +++ b/content/rancher/v2.5/en/quick-start-guide/deployment/google-gcp-qs/_index.md @@ -1,69 +1,70 @@ ---- -title: Rancher GCP Quick Start Guide -description: Read this step by step Rancher GCP guide to quickly deploy a Rancher Server with a single node cluster attached. -weight: 100 -aliases: - - /rancher/v2.x/en/quick-start-guide/deployment/google-gcp-qs/ ---- -The following steps will quickly deploy a Rancher server on GCP in a single-node RKE Kubernetes cluster, with a single-node downstream Kubernetes cluster attached. - -## Prerequisites - ->**Note** ->Deploying to Google GCP will incur charges. - -- [Google GCP Account](https://console.cloud.google.com/): A Google GCP Account is required to create resources for deploying Rancher and Kubernetes. -- [Google GCP Project](https://cloud.google.com/appengine/docs/standard/nodejs/building-app/creating-project): Use this link to follow a tutorial to create a GCP Project if you don't have one yet. -- [Google GCP Service Account](https://cloud.google.com/iam/docs/creating-managing-service-account-keys): Use this link and follow instructions to create a GCP service account and token file. -- [Terraform](https://www.terraform.io/downloads.html): Used to provision the server and cluster in Google GCP. - - -## Getting Started - -1. Clone [Rancher Quickstart](https://github.com/rancher/quickstart) to a folder using `git clone https://github.com/rancher/quickstart`. - -1. Go into the GCP folder containing the terraform files by executing `cd quickstart/gcp`. - -1. Rename the `terraform.tfvars.example` file to `terraform.tfvars`. - -1. Edit `terraform.tfvars` and customize the following variables: - - `gcp_account_json` - GCP service account file path and file name - - `rancher_server_admin_password` - Admin password for created Rancher server - -1. **Optional:** Modify optional variables within `terraform.tfvars`. -See the [Quickstart Readme](https://github.com/rancher/quickstart) and the [GCP Quickstart Readme](https://github.com/rancher/quickstart/tree/master/gcp) for more information. -Suggestions include: - - `gcp_region` - Google GCP region, choose the closest instead of the default - - `prefix` - Prefix for all created resources - - `machine_type` - Compute instance size used, minimum is `n1-standard-1` but `n1-standard-2` or `n1-standard-4` could be used if within budget - - `ssh_key_file_name` - Use a specific SSH key instead of `~/.ssh/id_rsa` (public key is assumed to be `${ssh_key_file_name}.pub`) - -1. Run `terraform init`. - -1. To initiate the creation of the environment, run `terraform apply --auto-approve`. Then wait for output similar to the following: - - ``` - Apply complete! Resources: 16 added, 0 changed, 0 destroyed. - - Outputs: - - rancher_node_ip = xx.xx.xx.xx - rancher_server_url = https://rancher.xx.xx.xx.xx.sslip.io - workload_node_ip = yy.yy.yy.yy - ``` - -1. Paste the `rancher_server_url` from the output above into the browser. Log in when prompted (default username is `admin`, use the password set in `rancher_server_admin_password`). - -#### Result - -Two Kubernetes clusters are deployed into your GCP account, one running Rancher Server and the other ready for experimentation deployments. - -### What's Next? - -Use Rancher to create a deployment. For more information, see [Creating Deployments]({{< baseurl >}}/rancher/v2.5/en/quick-start-guide/workload). - -## Destroying the Environment - -1. From the `quickstart/gcp` folder, execute `terraform destroy --auto-approve`. - -2. Wait for confirmation that all resources have been destroyed. +--- +title: Rancher GCP Quick Start Guide +description: Read this step by step Rancher GCP guide to quickly deploy a Rancher server with a single-node downstream Kubernetes cluster attached. +weight: 100 +--- +The following steps will quickly deploy a Rancher server on GCP in a single-node K3s Kubernetes cluster, with a single-node downstream Kubernetes cluster attached. + +>**Note:** The intent of these guides is to quickly launch a sandbox that you can use to evaluate Rancher. These guides are not intended for production environments. For comprehensive setup instructions, see [Installation]({{}}/rancher/v2.5/en/installation/). + +## Prerequisites + +>**Note** +>Deploying to Google GCP will incur charges. + +- [Google GCP Account](https://console.cloud.google.com/): A Google GCP Account is required to create resources for deploying Rancher and Kubernetes. +- [Google GCP Project](https://cloud.google.com/appengine/docs/standard/nodejs/building-app/creating-project): Use this link to follow a tutorial to create a GCP Project if you don't have one yet. +- [Google GCP Service Account](https://cloud.google.com/iam/docs/creating-managing-service-account-keys): Use this link and follow instructions to create a GCP service account and token file. +- [Terraform](https://www.terraform.io/downloads.html): Used to provision the server and cluster in Google GCP. + + +## Getting Started + +1. Clone [Rancher Quickstart](https://github.com/rancher/quickstart) to a folder using `git clone https://github.com/rancher/quickstart`. + +2. Go into the GCP folder containing the terraform files by executing `cd quickstart/gcp`. + +3. Rename the `terraform.tfvars.example` file to `terraform.tfvars`. + +4. Edit `terraform.tfvars` and customize the following variables: + - `gcp_account_json` - GCP service account file path and file name + - `rancher_server_admin_password` - Admin password for created Rancher server + +5. **Optional:** Modify optional variables within `terraform.tfvars`. +See the [Quickstart Readme](https://github.com/rancher/quickstart) and the [GCP Quickstart Readme](https://github.com/rancher/quickstart/tree/master/gcp) for more information. +Suggestions include: + - `gcp_region` - Google GCP region, choose the closest instead of the default (`us-east4`) + - `gcp_zone` - Google GCP zone, choose the closest instead of the default (`us-east4-a`) + - `prefix` - Prefix for all created resources + - `machine_type` - Compute instance size used, minimum is `n1-standard-1` but `n1-standard-2` or `n1-standard-4` could be used if within budget + +6. Run `terraform init`. + +7. To initiate the creation of the environment, run `terraform apply --auto-approve`. Then wait for output similar to the following: + + ``` + Apply complete! Resources: 16 added, 0 changed, 0 destroyed. + + Outputs: + + rancher_node_ip = xx.xx.xx.xx + rancher_server_url = https://rancher.xx.xx.xx.xx.sslip.io + workload_node_ip = yy.yy.yy.yy + ``` + +8. Paste the `rancher_server_url` from the output above into the browser. Log in when prompted (default username is `admin`, use the password set in `rancher_server_admin_password`). +9. ssh to the Rancher Server using the `id_rsa` key generated in `quickstart/gcp`. + +#### Result + +Two Kubernetes clusters are deployed into your GCP account, one running Rancher Server and the other ready for experimentation deployments. Please note that while this setup is a great way to explore Rancher functionality, a production setup should follow our high availability setup guidelines. SSH keys for the VMs are auto-generated and stored in the module directory. + +### What's Next? + +Use Rancher to create a deployment. For more information, see [Creating Deployments]({{< baseurl >}}/rancher/v2.5/en/quick-start-guide/workload). + +## Destroying the Environment + +1. From the `quickstart/gcp` folder, execute `terraform destroy --auto-approve`. + +2. Wait for confirmation that all resources have been destroyed. diff --git a/content/rancher/v2.5/en/quick-start-guide/deployment/microsoft-azure-qs/_index.md b/content/rancher/v2.5/en/quick-start-guide/deployment/microsoft-azure-qs/_index.md index a77fede6147..72c5d43096e 100644 --- a/content/rancher/v2.5/en/quick-start-guide/deployment/microsoft-azure-qs/_index.md +++ b/content/rancher/v2.5/en/quick-start-guide/deployment/microsoft-azure-qs/_index.md @@ -1,73 +1,76 @@ ---- -title: Rancher Azure Quick Start Guide -description: Read this step by step Rancher Azure guide to quickly deploy a Rancher Server with a single node cluster attached. -weight: 100 -aliases: - - /rancher/v2.x/en/quick-start-guide/deployment/microsoft-azure-qs/ ---- - -The following steps will quickly deploy a Rancher server on Azure in a single-node RKE Kubernetes cluster, with a single-node downstream Kubernetes cluster attached. - -## Prerequisites - ->**Note** ->Deploying to Microsoft Azure will incur charges. - -- [Microsoft Azure Account](https://azure.microsoft.com/en-us/free/): A Microsoft Azure Account is required to create resources for deploying Rancher and Kubernetes. -- [Microsoft Azure Subscription](https://docs.microsoft.com/en-us/azure/cost-management-billing/manage/create-subscription#create-a-subscription-in-the-azure-portal): Use this link to follow a tutorial to create a Microsoft Azure subscription if you don't have one yet. -- [Micsoroft Azure Tenant](https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-create-new-tenant): Use this link and follow instructions to create a Microsoft Azure tenant. -- [Microsoft Azure Client ID/Secret](https://docs.microsoft.com/en-us/azure/active-directory/develop/howto-create-service-principal-portal): Use this link and follow instructions to create a Microsoft Azure client and secret. -- [Terraform](https://www.terraform.io/downloads.html): Used to provision the server and cluster in Microsoft Azure. - - -## Getting Started - -1. Clone [Rancher Quickstart](https://github.com/rancher/quickstart) to a folder using `git clone https://github.com/rancher/quickstart`. - -1. Go into the Azure folder containing the terraform files by executing `cd quickstart/azure`. - -1. Rename the `terraform.tfvars.example` file to `terraform.tfvars`. - -1. Edit `terraform.tfvars` and customize the following variables: - - `azure_subscription_id` - Microsoft Azure Subscription ID - - `azure_client_id` - Microsoft Azure Client ID - - `azure_client_secret` - Microsoft Azure Client Secret - - `azure_tenant_id` - Microsoft Azure Tenant ID - - `rancher_server_admin_password` - Admin password for created Rancher server - -2. **Optional:** Modify optional variables within `terraform.tfvars`. -See the [Quickstart Readme](https://github.com/rancher/quickstart) and the [Azure Quickstart Readme](https://github.com/rancher/quickstart/tree/master/azure) for more information. -Suggestions include: - - `azure_location` - Microsoft Azure region, choose the closest instead of the default - - `prefix` - Prefix for all created resources - - `instance_type` - Compute instance size used, minimum is `Standard_DS2_v2` but `Standard_DS2_v3` or `Standard_DS3_v2` could be used if within budget - -1. Run `terraform init`. - -1. To initiate the creation of the environment, run `terraform apply --auto-approve`. Then wait for output similar to the following: - - ``` - Apply complete! Resources: 16 added, 0 changed, 0 destroyed. - - Outputs: - - rancher_node_ip = xx.xx.xx.xx - rancher_server_url = https://rancher.xx.xx.xx.xx.sslip.io - workload_node_ip = yy.yy.yy.yy - ``` - -1. Paste the `rancher_server_url` from the output above into the browser. Log in when prompted (default username is `admin`, use the password set in `rancher_server_admin_password`). -2. ssh to the Rancher Server using the `id_rsa` key generated in `quickstart/azure`. -#### Result - -Two Kubernetes clusters are deployed into your Azure account, one running Rancher Server and the other ready for experimentation deployments. - -### What's Next? - -Use Rancher to create a deployment. For more information, see [Creating Deployments]({{< baseurl >}}/rancher/v2.5/en/quick-start-guide/workload). - -## Destroying the Environment - -1. From the `quickstart/azure` folder, execute `terraform destroy --auto-approve`. - -2. Wait for confirmation that all resources have been destroyed. +--- +title: Rancher Azure Quick Start Guide +description: Read this step by step Rancher Azure guide to quickly deploy a Rancher server with a single-node downstream Kubernetes cluster attached. +weight: 100 +--- + +The following steps will quickly deploy a Rancher server on Azure in a single-node K3s Kubernetes cluster, with a single-node downstream Kubernetes cluster attached. + +>**Note:** The intent of these guides is to quickly launch a sandbox that you can use to evaluate Rancher. These guides are not intended for production environments. For comprehensive setup instructions, see [Installation]({{}}/rancher/v2.5/en/installation/). + +## Prerequisites + +>**Note** +>Deploying to Microsoft Azure will incur charges. + +- [Microsoft Azure Account](https://azure.microsoft.com/en-us/free/): A Microsoft Azure Account is required to create resources for deploying Rancher and Kubernetes. +- [Microsoft Azure Subscription](https://docs.microsoft.com/en-us/azure/cost-management-billing/manage/create-subscription#create-a-subscription-in-the-azure-portal): Use this link to follow a tutorial to create a Microsoft Azure subscription if you don't have one yet. +- [Micsoroft Azure Tenant](https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-create-new-tenant): Use this link and follow instructions to create a Microsoft Azure tenant. +- [Microsoft Azure Client ID/Secret](https://docs.microsoft.com/en-us/azure/active-directory/develop/howto-create-service-principal-portal): Use this link and follow instructions to create a Microsoft Azure client and secret. +- [Terraform](https://www.terraform.io/downloads.html): Used to provision the server and cluster in Microsoft Azure. + + +## Getting Started + +1. Clone [Rancher Quickstart](https://github.com/rancher/quickstart) to a folder using `git clone https://github.com/rancher/quickstart`. + +2. Go into the Azure folder containing the terraform files by executing `cd quickstart/azure`. + +3. Rename the `terraform.tfvars.example` file to `terraform.tfvars`. + +4. Edit `terraform.tfvars` and customize the following variables: + - `azure_subscription_id` - Microsoft Azure Subscription ID + - `azure_client_id` - Microsoft Azure Client ID + - `azure_client_secret` - Microsoft Azure Client Secret + - `azure_tenant_id` - Microsoft Azure Tenant ID + - `rancher_server_admin_password` - Admin password for created Rancher server + +5. **Optional:** Modify optional variables within `terraform.tfvars`. +See the [Quickstart Readme](https://github.com/rancher/quickstart) and the [Azure Quickstart Readme](https://github.com/rancher/quickstart/tree/master/azure) for more information. +Suggestions include: + - `azure_location` - Microsoft Azure region, choose the closest instead of the default (`East US`) + - `prefix` - Prefix for all created resources + - `instance_type` - Compute instance size used, minimum is `Standard_DS2_v2` but `Standard_DS2_v3` or `Standard_DS3_v2` could be used if within budget + - `add_windows_node` - If true, an additional Windows worker node is added to the workload cluster + - `windows_admin_password` - The admin password of the windows worker node + +6. Run `terraform init`. + +7. To initiate the creation of the environment, run `terraform apply --auto-approve`. Then wait for output similar to the following: + + ``` + Apply complete! Resources: 16 added, 0 changed, 0 destroyed. + + Outputs: + + rancher_node_ip = xx.xx.xx.xx + rancher_server_url = https://rancher.xx.xx.xx.xx.sslip.io + workload_node_ip = yy.yy.yy.yy + ``` + +8. Paste the `rancher_server_url` from the output above into the browser. Log in when prompted (default username is `admin`, use the password set in `rancher_server_admin_password`). +9. ssh to the Rancher Server using the `id_rsa` key generated in `quickstart/azure`. + +#### Result + +Two Kubernetes clusters are deployed into your Azure account, one running Rancher Server and the other ready for experimentation deployments. Please note that while this setup is a great way to explore Rancher functionality, a production setup should follow our high availability setup guidelines. SSH keys for the VMs are auto-generated and stored in the module directory. + +### What's Next? + +Use Rancher to create a deployment. For more information, see [Creating Deployments]({{< baseurl >}}/rancher/v2.5/en/quick-start-guide/workload). + +## Destroying the Environment + +1. From the `quickstart/azure` folder, execute `terraform destroy --auto-approve`. + +2. Wait for confirmation that all resources have been destroyed. diff --git a/content/rancher/v2.5/en/quick-start-guide/deployment/quickstart-manual-setup/_index.md b/content/rancher/v2.5/en/quick-start-guide/deployment/quickstart-manual-setup/_index.md index 770940ff92f..e9051c73081 100644 --- a/content/rancher/v2.5/en/quick-start-guide/deployment/quickstart-manual-setup/_index.md +++ b/content/rancher/v2.5/en/quick-start-guide/deployment/quickstart-manual-setup/_index.md @@ -10,6 +10,8 @@ Howdy Partner! This tutorial walks you through: - Creation of your first cluster - Deployment of an application, Nginx +>**Note:** The intent of these guides is to quickly launch a sandbox that you can use to evaluate Rancher. These guides are not intended for production environments. For comprehensive setup instructions, see [Installation]({{}}/rancher/v2.5/en/installation/). + ## Quick Start Outline This Quick Start Guide is divided into different tasks for easier consumption. @@ -48,7 +50,7 @@ To install Rancher on your host, connect to it and then use a shell to install. 1. Log in to your Linux host using your preferred shell, such as PuTTy or a remote Terminal connection. -2. From your shell, enter the following command: +1. From your shell, enter the following command: ``` sudo docker run -d --restart=unless-stopped -p 80:80 -p 443:443 --privileged rancher/rancher @@ -60,13 +62,17 @@ To install Rancher on your host, connect to it and then use a shell to install. Log in to Rancher to begin using the application. After you log in, you'll make some one-time configurations. -1. Open a web browser and enter the IP address of your host: `https://`. +1. Open a web browser and enter the IP address of your host: `https://`. Replace `` with your host IP address. -2. When prompted, create a password for the default `admin` account there cowpoke! +1. When prompted, create a password for the default `admin` account there cowpoke! -3. Set the **Rancher Server URL**. The URL can either be an IP address or a host name. However, each node added to your cluster must be able to connect to this URL.

If you use a hostname in the URL, this hostname must be resolvable by DNS on the nodes you want to add to you cluster. +1. Set the **Default View**. + - If `I want to create or manage multiple clusters` is selected, the Cluster Manager UI is used as the default view. + - If `I'm only going to use the cluster Rancher was installed on` is selected, the Cluster Explorer UI is used as the default view. + +1. Set the **Rancher Server URL**. The URL can either be an IP address or a host name. However, each node added to your cluster must be able to connect to this URL.

If you use a hostname in the URL, this hostname must be resolvable by DNS on the nodes you want to add to you cluster.
@@ -76,35 +82,37 @@ Welcome to Rancher! You are now able to create your first Kubernetes cluster. In this task, you can use the versatile **Custom** option. This option lets you add _any_ Linux host (cloud-hosted VM, on-prem VM, or bare-metal) to be used in a cluster. +1. If you chose `I'm only going to use the cluster Rancher was installed on` when setting the default view, click the **Cluster Manager** button in the upper-right of the UI to access the **Clusters** page. + 1. From the **Clusters** page, click **Add Cluster**. -2. Choose **Existing Nodes**. +1. Choose **Existing Nodes**. -3. Enter a **Cluster Name**. +1. Enter a **Cluster Name**. -4. Skip **Member Roles** and **Cluster Options**. We'll tell you about them later. +1. Skip **Member Roles** and **Cluster Options**. We'll tell you about them later. -5. Click **Next**. +1. Click **Next**. -6. From **Node Role**, select _all_ the roles: **etcd**, **Control**, and **Worker**. +1. From **Node Role**, select _all_ the roles: **etcd**, **Control**, and **Worker**. -7. **Optional**: Rancher auto-detects the IP addresses used for Rancher communication and cluster communication. You can override these using `Public Address` and `Internal Address` in the **Node Address** section. +1. **Optional**: Rancher auto-detects the IP addresses used for Rancher communication and cluster communication. You can override these using `Public Address` and `Internal Address` in the **Node Address** section. -8. Skip the **Labels** stuff. It's not important for now. +1. Skip the **Labels** stuff. It's not important for now. -9. Copy the command displayed on screen to your clipboard. +1. Copy the command displayed on screen to your clipboard. -10. Log in to your Linux host using your preferred shell, such as PuTTy or a remote Terminal connection. Run the command copied to your clipboard. +1. Log in to your Linux host using your preferred shell, such as PuTTy or a remote Terminal connection. Run the command copied to your clipboard. -11. When you finish running the command on your Linux host, click **Done**. +1. When you finish running the command on your Linux host, click **Done**. -**Result:** +**Result:** Your cluster is created and assigned a state of **Provisioning.** Rancher is standing up your cluster. You can access your cluster after its state is updated to **Active.** -**Active** clusters are assigned two Projects: +**Active** clusters are assigned two Projects: - `Default`, containing the `default` namespace - `System`, containing the `cattle-system`, `ingress-nginx`, `kube-public`, and `kube-system` namespaces diff --git a/content/rancher/v2.5/en/quick-start-guide/deployment/quickstart-vagrant/_index.md b/content/rancher/v2.5/en/quick-start-guide/deployment/quickstart-vagrant/_index.md index b175645408d..43102865117 100644 --- a/content/rancher/v2.5/en/quick-start-guide/deployment/quickstart-vagrant/_index.md +++ b/content/rancher/v2.5/en/quick-start-guide/deployment/quickstart-vagrant/_index.md @@ -6,6 +6,8 @@ aliases: --- The following steps quickly deploy a Rancher Server with a single node cluster attached. +>**Note:** The intent of these guides is to quickly launch a sandbox that you can use to evaluate Rancher. These guides are not intended for production environments. For comprehensive setup instructions, see [Installation]({{}}/rancher/v2.5/en/installation/). + ## Prerequisites - [Vagrant](https://www.vagrantup.com): Vagrant is required as this is used to provision the machine based on the Vagrantfile. @@ -16,7 +18,7 @@ The following steps quickly deploy a Rancher Server with a single node cluster a - Vagrant will require plugins to create VirtualBox VMs. Install them with the following commands: `vagrant plugin install vagrant-vboxmanage` - + `vagrant plugin install vagrant-vbguest` ## Getting Started @@ -32,7 +34,7 @@ The following steps quickly deploy a Rancher Server with a single node cluster a 4. To initiate the creation of the environment run, `vagrant up --provider=virtualbox`. -5. Once provisioning finishes, go to `https://172.22.101.101` in the browser. The default user/password is `admin/admin`. +5. Once provisioning finishes, go to `https://192.168.56.101` in the browser. The default user/password is `admin/admin`. **Result:** Rancher Server and your Kubernetes cluster is installed on VirtualBox. diff --git a/content/rancher/v2.5/en/security/_index.md b/content/rancher/v2.5/en/security/_index.md index c52daf4bde1..531c7d2ca33 100644 --- a/content/rancher/v2.5/en/security/_index.md +++ b/content/rancher/v2.5/en/security/_index.md @@ -33,6 +33,7 @@ On this page, we provide security-related documentation along with resources to - [The CIS Benchmark and self-assessment](#the-cis-benchmark-and-self-assessment) - [Third-party penetration test reports](#third-party-penetration-test-reports) - [Rancher CVEs and resolutions](#rancher-cves-and-resolutions) +- [Kubernetes Security Best Practices](#kubernetes-security-best-practices) ### Running a CIS Security Scan on a Kubernetes Cluster @@ -86,3 +87,7 @@ Results: ### Rancher CVEs and Resolutions Rancher is committed to informing the community of security issues in our products. For the list of CVEs (Common Vulnerabilities and Exposures) for issues we have resolved, refer to [this page.](./cve) + +### Kubernetes Security Best Practices + +For recommendations on securing your Kubernetes cluster, refer to the [Best Practices](./best-practices) guide. diff --git a/content/rancher/v2.5/en/security/best-practices/_index.md b/content/rancher/v2.5/en/security/best-practices/_index.md new file mode 100644 index 00000000000..1b207551e35 --- /dev/null +++ b/content/rancher/v2.5/en/security/best-practices/_index.md @@ -0,0 +1,8 @@ +--- +title: Kubernetes Security Best Practices +weight: 5 +--- + +# Restricting cloud metadata API access + +Cloud providers such as AWS, Azure, or GCP often expose metadata services locally to instances. By default, this endpoint is accessible by pods running on a cloud instance, including pods in hosted Kubernetes providers such as EKS, AKS or GKE, and can contain cloud credentials for that node, provisioning data such as kubelet credentials, or other sensitive data. To mitigate this risk when running on a cloud platform, follow the [Kubernetes security recommendations](https://kubernetes.io/docs/tasks/administer-cluster/securing-a-cluster/#restricting-cloud-metadata-api-access): limit permissions given to instance credentials, use network policies to restrict pod access to the metadata API, and avoid using provisioning data to deliver secrets. diff --git a/content/rancher/v2.5/en/security/rancher-2.5/1.5-benchmark-2.5/_index.md b/content/rancher/v2.5/en/security/rancher-2.5/1.5-benchmark-2.5/_index.md index 02b34e42fdb..4fed8f40550 100644 --- a/content/rancher/v2.5/en/security/rancher-2.5/1.5-benchmark-2.5/_index.md +++ b/content/rancher/v2.5/en/security/rancher-2.5/1.5-benchmark-2.5/_index.md @@ -1281,7 +1281,7 @@ on the master node and ensure the correct value for the `--bind-address` paramet **Expected result**: ``` -'--bind-address' is present OR '--bind-address' is not present +'--bind-address' argument is set to 127.0.0.1 ``` ### 1.4 Scheduler @@ -1327,7 +1327,7 @@ on the master node and ensure the correct value for the `--bind-address` paramet **Expected result**: ``` -'--bind-address' is present OR '--bind-address' is not present +'--bind-address' argument is set to 127.0.0.1 ``` ## 2 Etcd Node Configuration diff --git a/content/rancher/v2.5/en/security/rancher-2.5/1.5-hardening-2.5/_index.md b/content/rancher/v2.5/en/security/rancher-2.5/1.5-hardening-2.5/_index.md index 26907ab28b6..491aec9c080 100644 --- a/content/rancher/v2.5/en/security/rancher-2.5/1.5-hardening-2.5/_index.md +++ b/content/rancher/v2.5/en/security/rancher-2.5/1.5-hardening-2.5/_index.md @@ -667,6 +667,7 @@ rancher_kubernetes_engine_config: service_node_port_range: 30000-32767 kube_controller: extra_args: + bind-address: 127.0.0.1 address: 127.0.0.1 feature-gates: RotateKubeletServerCertificate=true profiling: 'false' @@ -685,6 +686,7 @@ rancher_kubernetes_engine_config: generate_serving_certificate: true scheduler: extra_args: + bind-address: 127.0.0.1 address: 127.0.0.1 profiling: 'false' ssh_agent_auth: false diff --git a/content/rancher/v2.5/en/security/rancher-2.5/1.6-benchmark-2.5/_index.md b/content/rancher/v2.5/en/security/rancher-2.5/1.6-benchmark-2.5/_index.md index 57b65e5b004..e0dc1e45c5d 100644 --- a/content/rancher/v2.5/en/security/rancher-2.5/1.6-benchmark-2.5/_index.md +++ b/content/rancher/v2.5/en/security/rancher-2.5/1.6-benchmark-2.5/_index.md @@ -1803,13 +1803,13 @@ on the master node and ensure the correct value for the --bind-address parameter **Expected Result**: ```console -'--bind-address' is not present OR '--bind-address' is not present +'--bind-address' argument is set to 127.0.0.1 ``` **Returned Value**: ```console -root 4788 4773 4 16:16 ? 00:00:09 kube-controller-manager --configure-cloud-routes=false --cloud-provider= --service-cluster-ip-range=10.43.0.0/16 --v=2 --pod-eviction-timeout=5m0s --leader-elect=true --cluster-cidr=10.42.0.0/16 --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --profiling=false --node-monitor-grace-period=40s --service-account-private-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --address=0.0.0.0 --allow-untagged-cloud=true --root-ca-file=/etc/kubernetes/ssl/kube-ca.pem --allocate-node-cidrs=true --enable-hostpath-provisioner=false --terminated-pod-gc-threshold=1000 --feature-gates=RotateKubeletServerCertificate=true --use-service-account-credentials=true +root 4788 4773 4 16:16 ? 00:00:09 kube-controller-manager --configure-cloud-routes=false --cloud-provider= --service-cluster-ip-range=10.43.0.0/16 --v=2 --bind-address=127.0.0.1 --pod-eviction-timeout=5m0s --leader-elect=true --cluster-cidr=10.42.0.0/16 --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --profiling=false --node-monitor-grace-period=40s --service-account-private-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --address=127.0.0.1 --allow-untagged-cloud=true --root-ca-file=/etc/kubernetes/ssl/kube-ca.pem --allocate-node-cidrs=true --enable-hostpath-provisioner=false --terminated-pod-gc-threshold=1000 --feature-gates=RotateKubeletServerCertificate=true --use-service-account-credentials=true ``` ## 1.4 Scheduler @@ -1859,13 +1859,13 @@ on the master node and ensure the correct value for the --bind-address parameter **Expected Result**: ```console -'--bind-address' is not present OR '--bind-address' is not present +'--bind-address' argument is set to 127.0.0.1 ``` **Returned Value**: ```console -root 4947 4930 1 16:16 ? 00:00:02 kube-scheduler --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-scheduler.yaml --leader-elect=true --profiling=false --v=2 --address=0.0.0.0 +root 4947 4930 1 16:16 ? 00:00:02 kube-scheduler --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-scheduler.yaml --leader-elect=true --profiling=false --v=2 --address=127.0.0.1 --bind-address=127.0.0.1 ``` ## 2 Etcd Node Configuration Files diff --git a/content/rancher/v2.5/en/security/rancher-2.5/1.6-hardening-2.5/_index.md b/content/rancher/v2.5/en/security/rancher-2.5/1.6-hardening-2.5/_index.md index 0b6497f2e1f..d628bfd8c5a 100644 --- a/content/rancher/v2.5/en/security/rancher-2.5/1.6-hardening-2.5/_index.md +++ b/content/rancher/v2.5/en/security/rancher-2.5/1.6-hardening-2.5/_index.md @@ -511,6 +511,8 @@ rancher_kubernetes_engine_config: kube_controller: extra_args: feature-gates: RotateKubeletServerCertificate=true + bind-address: 127.0.0.1 + address: 127.0.0.1 kubelet: extra_args: feature-gates: RotateKubeletServerCertificate=true @@ -519,6 +521,10 @@ rancher_kubernetes_engine_config: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 fail_swap_on: false generate_serving_certificate: true + scheduler: + extra_args: + bind-address: 127.0.0.1 + address: 127.0.0.1 ssh_agent_auth: false upgrade_strategy: max_unavailable_controlplane: '1' diff --git a/content/rancher/v2.5/en/troubleshooting/dns/_index.md b/content/rancher/v2.5/en/troubleshooting/dns/_index.md index 99274794206..3822399c32f 100644 --- a/content/rancher/v2.5/en/troubleshooting/dns/_index.md +++ b/content/rancher/v2.5/en/troubleshooting/dns/_index.md @@ -160,7 +160,7 @@ kubectl run -i --restart=Never --rm test-${RANDOM} --image=ubuntu --overrides='{ Enabling query logging can be done by enabling the [log plugin](https://coredns.io/plugins/log/) in the Corefile configuration in the configmap `coredns`. You can do so by using `kubectl -n kube-system edit configmap coredns` or use the command below to replace the configuration in place: ``` -kubectl get configmap -n kube-system coredns -o json | kubectl get configmap -n kube-system coredns -o json | sed -e 's_loadbalance_log\\n loadbalance_g' | kubectl apply -f - +kubectl get configmap -n kube-system coredns -o json | sed -e 's_loadbalance_log\\n loadbalance_g' | kubectl apply -f - ``` All queries will now be logged and can be checked using the command in [Check CoreDNS logging](#check-coredns-logging). diff --git a/content/rancher/v2.6/_index.md b/content/rancher/v2.6/_index.md index a1ea29d36e4..5060194d87d 100644 --- a/content/rancher/v2.6/_index.md +++ b/content/rancher/v2.6/_index.md @@ -1,5 +1,5 @@ --- -title: v2.6.x +title: Rancher 2.6 weight: 1 showBreadcrumb: false --- diff --git a/content/rancher/v2.6/en/_index.md b/content/rancher/v2.6/en/_index.md index d8bfd4a20c3..98bdedcac77 100644 --- a/content/rancher/v2.6/en/_index.md +++ b/content/rancher/v2.6/en/_index.md @@ -2,7 +2,7 @@ title: "Rancher 2.6" shortTitle: "Rancher 2.6 (Latest)" description: "Rancher adds significant value on top of Kubernetes: managing hundreds of clusters from one interface, centralizing RBAC, enabling monitoring and alerting. Read more." -metaTitle: "Rancher 2.x Docs: What is New?" +metaTitle: "Rancher 2.6 Docs: What is New?" metaDescription: "Rancher 2 adds significant value on top of Kubernetes: managing hundreds of clusters from one interface, centralizing RBAC, enabling monitoring and alerting. Read more." insertOneSix: false weight: 1 diff --git a/content/rancher/v2.6/en/admin-settings/authentication/ad/_index.md b/content/rancher/v2.6/en/admin-settings/authentication/ad/_index.md index a919075bdaa..251039f2c97 100644 --- a/content/rancher/v2.6/en/admin-settings/authentication/ad/_index.md +++ b/content/rancher/v2.6/en/admin-settings/authentication/ad/_index.md @@ -101,7 +101,7 @@ The table below details the parameters for the group schema configuration. | Search Attribute | Attribute used to construct search filters when adding groups to clusters or projects. See description of user schema `Search Attribute`. | | Search Filter | This filter gets applied to the list of groups that is searched when Rancher attempts to add groups to a site access list or tries to add groups to clusters or projects. For example, a group search filter could be (|(cn=group1)(cn=group2)). Note: If the search filter does not use [valid AD search syntax,](https://docs.microsoft.com/en-us/windows/win32/adsi/search-filter-syntax) the list of groups will be empty. | | Group DN Attribute | The name of the group attribute whose format matches the values in the user attribute describing a the user's memberships. See `User Member Attribute`. | -| Nested Group Membership | This settings defines whether Rancher should resolve nested group memberships. Use only if your organisation makes use of these nested memberships (ie. you have groups that contain other groups as members. We advise avoiding nested groups when possible). | +| Nested Group Membership | This settings defines whether Rancher should resolve nested group memberships. Use only if your organization makes use of these nested memberships (i.e., you have groups that contain other groups as members. We advise avoiding nested groups when possible to avoid potential performance issues when there is a large amount of nested memberships). | --- @@ -153,7 +153,7 @@ This command performs an LDAP search with the search base set to the domain root Since in this case the user's DN is `CN=John Doe,CN=Users,DC=acme,DC=com` [5], we should configure the **User Search Base** with the parent node DN `CN=Users,DC=acme,DC=com`. -Similarly, based on the DN of the group referenced in the **memberOf** attribute [4], the correct value for the **Group Search Base** would be the parent node of that value, ie. `OU=Groups,DC=acme,DC=com`. +Similarly, based on the DN of the group referenced in the **memberOf** attribute [4], the correct value for the **Group Search Base** would be the parent node of that value, i.e., `OU=Groups,DC=acme,DC=com`. ### Identify User Schema @@ -166,7 +166,7 @@ The output of the above `ldapsearch` query also allows to determine the correct > **Note:** > -> If the AD users in our organisation were to authenticate with their UPN (e.g. jdoe@acme.com) instead of the short logon name, then we would have to set the `Login Attribute` to **userPrincipalName** instead. +> If the AD users in our organization were to authenticate with their UPN (e.g. jdoe@acme.com) instead of the short logon name, then we would have to set the `Login Attribute` to **userPrincipalName** instead. We'll also set the `Search Attribute` parameter to **sAMAccountName|name**. That way users can be added to clusters/projects in the Rancher UI either by entering their username or full name. diff --git a/content/rancher/v2.6/en/admin-settings/authentication/keycloak-saml/_index.md b/content/rancher/v2.6/en/admin-settings/authentication/keycloak-saml/_index.md index bd94b700d23..ca2952111fb 100644 --- a/content/rancher/v2.6/en/admin-settings/authentication/keycloak-saml/_index.md +++ b/content/rancher/v2.6/en/admin-settings/authentication/keycloak-saml/_index.md @@ -23,36 +23,87 @@ If your organization uses Keycloak Identity Provider (IdP) for user authenticati >1: Optionally, you can enable either one or both of these settings. >2: Rancher SAML metadata won't be generated until a SAML provider is configured and saved. - + {{< img "/img/rancher/keycloak/keycloak-saml-client-configuration.png" "">}} - + - In the new SAML client, create Mappers to expose the users fields - Add all "Builtin Protocol Mappers" {{< img "/img/rancher/keycloak/keycloak-saml-client-builtin-mappers.png" "">}} - Create a new "Group list" mapper to map the member attribute to a user's groups - {{< img "/img/rancher/keycloak/keycloak-saml-client-group-mapper.png" "">}} -- Export a `metadata.xml` file from your Keycloak client: - From the `Installation` tab, choose the `SAML Metadata IDPSSODescriptor` format option and download your file. - - >**Note** - > Keycloak versions 6.0.0 and up no longer provide the IDP metadata under the `Installation` tab. - > You can still get the XML from the following url: - > - > `https://{KEYCLOAK-URL}/auth/realms/{REALM-NAME}/protocol/saml/descriptor` - > - > The XML obtained from this URL contains `EntitiesDescriptor` as the root element. Rancher expects the root element to be `EntityDescriptor` rather than `EntitiesDescriptor`. So before passing this XML to Rancher, follow these steps to adjust it: - > - > * Copy all the attributes from `EntitiesDescriptor` to the `EntityDescriptor` that are not present. - > * Remove the `` tag from the beginning. - > * Remove the `` from the end of the xml. - > - > You are left with something similar as the example below: - > - > ``` - > - > .... - > - > ``` + {{< img "/img/rancher/keycloak/keycloak-saml-client-group-mapper.png" "">}} + +## Getting the IDP Metadata + +{{% tabs %}} +{{% tab "Keycloak 5 and earlier" %}} +To get the IDP metadata, export a `metadata.xml` file from your Keycloak client. +From the **Installation** tab, choose the **SAML Metadata IDPSSODescriptor** format option and download your file. +{{% /tab %}} +{{% tab "Keycloak 6-13" %}} + +1. From the **Configure** section, click the **Realm Settings** tab. +1. Click the **General** tab. +1. From the **Endpoints** field, click **SAML 2.0 Identity Provider Metadata**. + +Verify the IDP metadata contains the following attributes: + +``` +xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" +xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" +xmlns:ds="http://www.w3.org/2000/09/xmldsig#" +``` + +Some browsers, such as Firefox, may render/process the document such that the contents appear to have been modified, and some attributes appear to be missing. In this situation, use the raw response data that can be found using your browser. + +The following is an example process for Firefox, but will vary slightly for other browsers: + +1. Press **F12** to access the developer console. +1. Click the **Network** tab. +1. From the table, click the row containing `descriptor`. +1. From the details pane, click the **Response** tab. +1. Copy the raw response data. + +The XML obtained contains `EntitiesDescriptor` as the root element. Rancher expects the root element to be `EntityDescriptor` rather than `EntitiesDescriptor`. So before passing this XML to Rancher, follow these steps to adjust it: + +1. Copy all the attributes from `EntitiesDescriptor` to the `EntityDescriptor` that are not present. +1. Remove the `` tag from the beginning. +1. Remove the `` from the end of the xml. + +You are left with something similar as the example below: + +``` + +.... + +``` + +{{% /tab %}} +{{% tab "Keycloak 14+" %}} + +1. From the **Configure** section, click the **Realm Settings** tab. +1. Click the **General** tab. +1. From the **Endpoints** field, click **SAML 2.0 Identity Provider Metadata**. + +Verify the IDP metadata contains the following attributes: + +``` +xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" +xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" +xmlns:ds="http://www.w3.org/2000/09/xmldsig#" +``` + +Some browsers, such as Firefox, may render/process the document such that the contents appear to have been modified, and some attributes appear to be missing. In this situation, use the raw response data that can be found using your browser. + +The following is an example process for Firefox, but will vary slightly for other browsers: + +1. Press **F12** to access the developer console. +1. Click the **Network** tab. +1. From the table, click the row containing `descriptor`. +1. From the details pane, click the **Response** tab. +1. Copy the raw response data. + +{{% /tab %}} +{{% /tabs %}} ## Configuring Keycloak in Rancher diff --git a/content/rancher/v2.6/en/admin-settings/authentication/ping-federate/_index.md b/content/rancher/v2.6/en/admin-settings/authentication/ping-federate/_index.md index 5040d63561b..484b0a1610c 100644 --- a/content/rancher/v2.6/en/admin-settings/authentication/ping-federate/_index.md +++ b/content/rancher/v2.6/en/admin-settings/authentication/ping-federate/_index.md @@ -27,6 +27,8 @@ Note that these URLs will not return valid data until the authentication configu 1. **Groups Field**: Make entries for managing group memberships (example: `memberOf`). + 1. **Entity ID Field** (optional): The published, protocol-dependent, unique identifier of your partner. This ID defines your organization as the entity operating the server for SAML 2.0 transactions. This ID may have been obtained out-of-band or via a SAML metadata file. + 1. **Rancher API Host**: Enter the URL for your Rancher Server. 1. **Private Key** and **Certificate**: This is a key-certificate pair to create a secure shell between Rancher and your IdP. diff --git a/content/rancher/v2.6/en/admin-settings/branding/_index.md b/content/rancher/v2.6/en/admin-settings/branding/_index.md index 1fbe6d9f78b..4e5cff17e20 100644 --- a/content/rancher/v2.6/en/admin-settings/branding/_index.md +++ b/content/rancher/v2.6/en/admin-settings/branding/_index.md @@ -40,7 +40,21 @@ You can override the primary color used throughout the UI with a custom color of ### Fixed Banners +{{% tabs %}} +{{% tab "Rancher before v2.6.4" %}} Display a custom fixed banner in the header, footer, or both. +{{% /tab %}} +{{% tab "Rancher v2.6.4+" %}} +Display a custom fixed banner in the header, footer, or both. + +As of Rancher v2.6.4, configuration of fixed banners has moved from the **Branding** tab to the **Banners** tab. + +To configure banner settings, + +1. Click **☰ > Global settings**. +2. Click **Banners**. +{{% /tab %}} +{{% /tabs %}} # Custom Navigation Links diff --git a/content/rancher/v2.6/en/admin-settings/config-private-registry/_index.md b/content/rancher/v2.6/en/admin-settings/config-private-registry/_index.md index 16690af8bd3..cd36201d114 100644 --- a/content/rancher/v2.6/en/admin-settings/config-private-registry/_index.md +++ b/content/rancher/v2.6/en/admin-settings/config-private-registry/_index.md @@ -3,7 +3,7 @@ title: Configuring a Global Default Private Registry weight: 40 --- -You might want to use a private Docker registry to share your custom base images within your organization. With a private registry, you can keep a private, consistent, and centralized source of truth for the container images that are used in your clusters. +You might want to use a private container registry to share your custom base images within your organization. With a private registry, you can keep a private, consistent, and centralized source of truth for the container images that are used in your clusters. There are two main ways to set up private registries in Rancher: by setting up the global default registry through the **Settings** tab in the global view, and by setting up a private registry in the advanced options in the cluster-level settings. The global default registry is intended to be used for air-gapped setups, for registries that do not require credentials. The cluster-level private registry is intended to be used in all setups in which the private registry requires credentials. @@ -35,4 +35,4 @@ You can follow these steps to configure a private registry when you create a clu **Result:** The new cluster will be able to pull images from the private registry. -The private registry cannot be configured after the cluster is created. \ No newline at end of file +The private registry cannot be configured after the cluster is created. diff --git a/content/rancher/v2.6/en/admin-settings/pod-security-policies/_index.md b/content/rancher/v2.6/en/admin-settings/pod-security-policies/_index.md index 2e0d6d70fc3..9244102623d 100644 --- a/content/rancher/v2.6/en/admin-settings/pod-security-policies/_index.md +++ b/content/rancher/v2.6/en/admin-settings/pod-security-policies/_index.md @@ -9,6 +9,7 @@ If a pod does not meet the conditions specified in the PSP, Kubernetes will not - [How PSPs Work](#how-psps-work) - [Default PSPs](#default-psps) + - [Restricted-NoRoot](#restricted-noroot) - [Restricted](#restricted) - [Unrestricted](#unrestricted) - [Creating PSPs](#creating-psps) @@ -28,18 +29,22 @@ PSPs work through inheritance: Any workloads that are already running in a cluster or project before a PSP is assigned will not be checked if it complies with the PSP. Workloads would need to be cloned or upgraded to see if they pass the PSP. -Read more about Pod Security Policies in the [Kubernetes Documentation](https://kubernetes.io/docs/concepts/policy/pod-security-policy/). +Read more about Pod Security Policies in the [Kubernetes documentation](https://kubernetes.io/docs/concepts/policy/pod-security-policy/). # Default PSPs -Rancher ships with two default Pod Security Policies (PSPs): the `restricted` and `unrestricted` policies. +Rancher ships with three default Pod Security Policies (PSPs): the `restricted-noroot`, `restricted` and `unrestricted` policies. -### Restricted +### Restricted-NoRoot This policy is based on the Kubernetes [example restricted policy](https://raw.githubusercontent.com/kubernetes/website/master/content/en/examples/policy/restricted-psp.yaml). It significantly restricts what types of pods can be deployed to a cluster or project. This policy: - Prevents pods from running as a privileged user and prevents escalation of privileges. -- Validates that server-required security mechanisms are in place (such as restricting what volumes can be mounted to only the core volume types and preventing root supplemental groups from being added. +- Validates that server-required security mechanisms are in place, such as restricting what volumes can be mounted to only the core volume types and preventing root supplemental groups from being added. + +### Restricted + +This policy is a relaxed version of the `restricted-noroot` policy, with almost all the restrictions in place, except for the fact that it allows running containers as a privileged user. ### Unrestricted @@ -51,9 +56,9 @@ Using Rancher, you can create a Pod Security Policy using our GUI rather than cr ### Requirements -Rancher can only assign PSPs for clusters that are [launched using RKE.]({{< baseurl >}}/rancher/v2.6/en/cluster-provisioning/rke-clusters/) +Rancher can only assign PSPs for clusters that are [launched using RKE]({{< baseurl >}}/rancher/v2.6/en/cluster-provisioning/rke-clusters/). -You must enable PSPs at the cluster level before you can assign them to a project. This can be configured by [editing the cluster.]({{}}/rancher/v2.6/en/cluster-admin/editing-clusters/) +You must enable PSPs at the cluster level before you can assign them to a project. This can be configured by [editing the cluster]({{}}/rancher/v2.6/en/cluster-admin/editing-clusters/). It is a best practice to set PSP at the cluster level. @@ -63,19 +68,11 @@ We recommend adding PSPs during cluster and project creation instead of adding i 1. In the upper left corner, click **☰ > Cluster Management**. 1. In the left navigation bar, click **Pod Security Policies**. -1. Click **Add policy**. +1. Click **Add Policy**. 1. Name the policy. 1. Complete each section of the form. Refer to the [Kubernetes documentation](https://kubernetes.io/docs/concepts/policy/pod-security-policy/) for more information on what each policy does. 1. Click **Create**. # Configuration -The Kubernetes documentation on PSPs is [here.](https://kubernetes.io/docs/concepts/policy/pod-security-policy/) - - - - - -[1]: https://kubernetes.io/docs/concepts/policy/pod-security-policy/#volumes-and-file-systems -[2]: https://kubernetes.io/docs/concepts/policy/pod-security-policy/#host-namespaces -[3]: https://kubernetes.io/docs/concepts/policy/pod-security-policy/#users-and-groups +The Kubernetes documentation on PSPs is [here](https://kubernetes.io/docs/concepts/policy/pod-security-policy/). diff --git a/content/rancher/v2.6/en/admin-settings/rbac/cluster-project-roles/_index.md b/content/rancher/v2.6/en/admin-settings/rbac/cluster-project-roles/_index.md index c966d787383..c2767b8a66f 100644 --- a/content/rancher/v2.6/en/admin-settings/rbac/cluster-project-roles/_index.md +++ b/content/rancher/v2.6/en/admin-settings/rbac/cluster-project-roles/_index.md @@ -5,7 +5,7 @@ weight: 1127 Cluster and project roles define user authorization inside a cluster or project. -To manage these roles, +To manage these roles, 1. Click **☰ > Users & Authentication**. 1. In the left navigation bar, click **Roles** and go to the **Cluster** or **Project/Namespaces** tab. @@ -60,8 +60,8 @@ The following table lists the permissions available for the `Manage Nodes` role | SSH Access | ✓ | ✓ | | Delete Nodes | ✓ | ✓ | | Scale Clusters Up and Down | ✓ | * | -***In RKE2, you must have permission to edit a cluster to be able to scale clusters up and down.** -
+***In RKE2, you must have permission to edit a cluster to be able to scale clusters up and down.** +
For details on how each cluster role can access Kubernetes resources, you can look them up in the Rancher UI: @@ -81,12 +81,24 @@ To assign a custom role to a new cluster member, you can use the Rancher UI. To To assign the role to a new cluster member, +{{% tabs %}} +{{% tab "Rancher before v2.6.4" %}} 1. Click **☰ > Cluster Management**. 1. Go to the cluster where you want to assign a role to a member and click **Explore**. 1. Click **RBAC > Cluster Members**. 1. Click **Add**. 1. In the **Cluster Permissions** section, choose the custom cluster role that should be assigned to the member. 1. Click **Create**. +{{% /tab %}} +{{% tab "Rancher v2.6.4+" %}} +1. Click **☰ > Cluster Management**. +1. Go to the cluster where you want to assign a role to a member and click **Explore**. +1. Click **Cluster > Cluster Members**. +1. Click **Add**. +1. In the **Cluster Permissions** section, choose the custom cluster role that should be assigned to the member. +1. Click **Create**. +{{% /tab %}} +{{% /tabs %}} **Result:** The member has the assigned role. @@ -111,6 +123,10 @@ _Project roles_ are roles that can be used to grant users access to a project. T These users can manage project-scoped resources like namespaces and workloads, but cannot manage other project members. + >**Note:** + > + >By default, the Rancher role of `project-member` inherits from the `Kubernetes-edit` role, and the `project-owner` role inherits from the `Kubernetes-admin` role. As such, both `project-member` and `project-owner` roles will allow for namespace management, including the ability to create and delete namespaces. + - **Read Only:** These users can view everything in the project but cannot create, update, or delete anything. @@ -119,7 +135,6 @@ _Project roles_ are roles that can be used to grant users access to a project. T > >Users assigned the `Owner` or `Member` role for a project automatically inherit the `namespace creation` role. However, this role is a [Kubernetes ClusterRole](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#role-and-clusterrole), meaning its scope extends to all projects in the cluster. Therefore, users explicitly assigned the `owner` or `member` role for a project can create namespaces in other projects they're assigned to, even with only the `Read Only` role assigned. - #### Custom Project Roles Rancher lets you assign _custom project roles_ to a standard user instead of the typical `Owner`, `Member`, or `Read Only` roles. These roles can be either a built-in custom project role or one defined by a Rancher administrator. They are convenient for defining narrow or specialized access for a standard user within a project. See the table below for a list of built-in custom project roles. diff --git a/content/rancher/v2.6/en/admin-settings/rke-templates/enforcement/_index.md b/content/rancher/v2.6/en/admin-settings/rke-templates/enforcement/_index.md index 9125f7ff342..cd51f196341 100644 --- a/content/rancher/v2.6/en/admin-settings/rke-templates/enforcement/_index.md +++ b/content/rancher/v2.6/en/admin-settings/rke-templates/enforcement/_index.md @@ -25,6 +25,8 @@ To require new clusters to use an RKE template, administrators can turn on RKE t 1. Go to the `cluster-template-enforcement` setting. Click **⋮ > Edit Setting**. 1. Set the value to **True** and click **Save**. + >**Important:** When the admin sets the `cluster-template-enforcement` to True, they also need to share the `clusterTemplates` with users so that users can select one of these templates to create the cluster. + **Result:** All clusters provisioned by Rancher must use a template, unless the creator is an administrator. # Disabling RKE Template Enforcement diff --git a/content/rancher/v2.6/en/api/_index.md b/content/rancher/v2.6/en/api/_index.md index 60cf9320914..d1cc9cc4454 100644 --- a/content/rancher/v2.6/en/api/_index.md +++ b/content/rancher/v2.6/en/api/_index.md @@ -5,7 +5,22 @@ weight: 24 ## How to use the API -The API has its own user interface accessible from a web browser. This is an easy way to see resources, perform actions, and see the equivalent cURL or HTTP request & response. To access it, click on your user avatar in the upper right corner. Under **API & Keys**, you can find the URL endpoint as well as create [API keys]({{}}/rancher/v2.6/en/user-settings/api-keys/). +The API has its own user interface accessible from a web browser. This is an easy way to see resources, perform actions, and see the equivalent cURL or HTTP request & response. To access it: + +{{% tabs %}} +{{% tab "Rancher v2.6.4+" %}} + +1. Click on your user avatar in the upper right corner. +1. Click **Account & API Keys**. +1. Under the **API Keys** section, find the **API Endpoint** field and click the link. The link will look something like `https:///v3`, where `` is the fully qualified domain name of your Rancher deployment. + +{{% /tab %}} +{{% tab "Rancher before v2.6.4" %}} + +Go to the URL endpoint at `https:///v3`, where `` is the fully qualified domain name of your Rancher deployment. + +{{% /tab %}} +{{% /tabs %}} ## Authentication @@ -50,3 +65,17 @@ Most collections can be sorted on the server-side by common fields using HTTP qu ## Pagination API responses are paginated with a limit of 100 resources per page by default. This can be changed with the `limit` query parameter, up to a maximum of 1000, e.g. `/v3/pods?limit=1000`. The `pagination` map in collection responses tells you whether or not you have the full result set and has a link to the next page if you do not. + +## Capturing Rancher API Calls + +You can use browser developer tools to capture how the Rancher API is called. For example, you could follow these steps to use the Chrome developer tools to get the API call for provisioning an RKE cluster: + +1. In the Rancher UI, go to **Cluster Management** and click **Create.** +1. Click one of the cluster types. This example uses Digital Ocean. +1. Fill out the form with a cluster name and node template, but don't click **Create**. +1. You will need to open the developer tools before the cluster creation to see the API call being recorded. To open the tools, right-click on the Rancher UI and click **Inspect.** +1. In the developer tools, click the **Network** tab. +1. On the **Network** tab, make sure **Fetch/XHR** is selected. +1. In the Rancher UI, click **Create**. In the developer tools, you should see a new network request with the name `cluster?_replace=true`. +1. Right-click `cluster?_replace=true` and click **Copy > Copy as cURL.** +1. Paste the result into any text editor. You will be able to see the POST request, including the URL it was sent to, all of the headers, and the full body of the request. This command can be used to create a cluster from the command line. Note: The request should be stored in a safe place because it contains credentials. diff --git a/content/rancher/v2.6/en/backups/_index.md b/content/rancher/v2.6/en/backups/_index.md index b090f2972b2..d9e4dd96065 100644 --- a/content/rancher/v2.6/en/backups/_index.md +++ b/content/rancher/v2.6/en/backups/_index.md @@ -43,10 +43,14 @@ When a Restore custom resource is created, the operator accesses the backup .tar The Backup and Restore custom resources can be created in the Rancher UI, or by using `kubectl apply`. +>**Note:** Refer [here]({{}}/rancher/v2.6/en/backups/migrating-rancher/#2-restore-from-backup-using-a-restore-custom-resource) for help on restoring an existing backup file into a v1.22 cluster in Rancher v2.6.3. + # Installing the rancher-backup Operator The `rancher-backup` operator can be installed from the Rancher UI, or with the Helm CLI. In both cases, the `rancher-backup` Helm chart is installed on the Kubernetes cluster running the Rancher server. It is a cluster-admin only feature and available only for the **local** cluster. (*If you do not see `rancher-backup` in the Rancher UI, you may have selected the wrong cluster.*) +>**NOTE:** There is a known issue in Fleet that occurs after performing a restoration using the backup-restore-operator: Secrets used for clientSecretName and helmSecretName are not included in Fleet gitrepos. Refer [here]({{}}rancher/v2.6/en/deploy-across-clusters/fleet/#troubleshooting) for a workaround. + ### Installing rancher-backup with the Rancher UI 1. In the upper left corner, click **☰ > Cluster Management**. diff --git a/content/rancher/v2.6/en/backups/back-up-rancher/_index.md b/content/rancher/v2.6/en/backups/back-up-rancher/_index.md index acfe23fc3fb..629a7ad2c64 100644 --- a/content/rancher/v2.6/en/backups/back-up-rancher/_index.md +++ b/content/rancher/v2.6/en/backups/back-up-rancher/_index.md @@ -5,12 +5,18 @@ weight: 1 In this section, you'll learn how to back up Rancher running on any Kubernetes cluster. To backup Rancher installed with Docker, refer the instructions for [single node backups]({{}}/rancher/v2.6/en/backups/docker-installs/docker-backups) -The backup-restore operator needs to be installed in the local cluster, and only backs up the Rancher app. The backup and restore operations are performed only in the local Kubernetes cluster. +The backup-restore operator needs to be installed in the local cluster, and only backs up the Rancher app. The backup and restore operations are performed only in the local Kubernetes cluster. + +Note that the rancher-backup operator version 2.x.x is for Rancher v2.6.x. + +> When restoring a backup into a new Rancher setup, the version of the new setup should be the same as the one where the backup is made. The Kubernetes version should also be considered when restoring a backup, since the supported apiVersion in the cluster and in the backup file could be different. ### Prerequisites The Rancher version must be v2.5.0 and up. +Refer [here]({{}}/rancher/v2.6/en/backups/migrating-rancher/#2-restore-from-backup-using-a-restore-custom-resource) for help on restoring an existing backup file into a v1.22 cluster in Rancher v2.6.3. + ### 1. Install the Rancher Backups operator The backup storage location is an operator-level setting, so it needs to be configured when the Rancher Backups application is installed or upgraded. @@ -25,6 +31,8 @@ Backups are created as .tar.gz files. These files can be pushed to S3 or Minio, 1. Configure the default storage location. For help, refer to the [storage configuration section.](../configuration/storage-config) 1. Click **Install**. +>**NOTE:** There is a known issue in Fleet that occurs after performing a restoration using the backup-restore-operator: Secrets used for clientSecretName and helmSecretName are not included in Fleet gitrepos. Refer [here]({{}}rancher/v2.6/en/deploy-across-clusters/fleet/#troubleshooting) for a workaround. + ### 2. Perform a Backup To perform a backup, a custom resource of type Backup must be created. diff --git a/content/rancher/v2.6/en/backups/examples/_index.md b/content/rancher/v2.6/en/backups/examples/_index.md index 87c607b7780..b1282f9c3ca 100644 --- a/content/rancher/v2.6/en/backups/examples/_index.md +++ b/content/rancher/v2.6/en/backups/examples/_index.md @@ -272,6 +272,13 @@ data: # Example EncryptionConfiguration +The snippet below demonstrates two different types of secrets and their relevance with respect to Backup and Restore of custom resources. + +The first example is that of a secret that is used to encrypt the backup files. The backup operator, in this case, will not be able to read the secrets encryption file. It only uses the contents of the secret. + +The second example is that of a Kubernetes secrets encryption config file that is used to encrypt secrets when stored in etcd. **When backing up the etcd datastore, be sure to also back up the EncryptionConfiguration.** Failure to do so will result in an inability to use the restored data if secrets encryption was in use at the time the data was backed up. + + ```yaml apiVersion: apiserver.config.k8s.io/v1 kind: EncryptionConfiguration diff --git a/content/rancher/v2.6/en/backups/migrating-rancher/_index.md b/content/rancher/v2.6/en/backups/migrating-rancher/_index.md index 0154b6b1bd7..5b5e4f3acdd 100644 --- a/content/rancher/v2.6/en/backups/migrating-rancher/_index.md +++ b/content/rancher/v2.6/en/backups/migrating-rancher/_index.md @@ -9,7 +9,7 @@ If you are migrating Rancher to a new Kubernetes cluster, you don't need to inst These instructions assume you have [created a backup](../back-up-rancher) and you have already installed a new Kubernetes cluster where Rancher will be deployed. -It is required to use the same hostname that was set as the server URL in the first cluster. +>**Warning:** It is required to use the same hostname that was set as the server URL in the first cluster. If not done, downstream clusters will show as unavailable in the cluster management page of the UI, and you won't be able to click inside the cluster or on the cluster's Explore button. Rancher version must be v2.5.0 and up @@ -19,17 +19,31 @@ Rancher can be installed on any Kubernetes cluster, including hosted Kubernetes - [K3s Kubernetes installation docs]({{}}/k3s/latest/en/installation/) ### 1. Install the rancher-backup Helm chart -Install version 2.x.x of the rancher-backup chart. +Install version 2.x.x of the rancher-backup chart. The following assumes a connected environment with access to DockerHub: ``` helm repo add rancher-charts https://charts.rancher.io helm repo update helm install rancher-backup-crd rancher-charts/rancher-backup-crd -n cattle-resources-system --create-namespace --version $CHART_VERSION helm install rancher-backup rancher-charts/rancher-backup -n cattle-resources-system --version $CHART_VERSION ``` +
+For an **air-gapped environment**, use the option below to pull the `backup-restore-operator` image from your private registry when installing the rancher-backup-crd helm chart. +``` +--set image.repository $REGISTRY/rancher/backup-restore-operator +``` ### 2. Restore from backup using a Restore custom resource -If you are using an S3 store as the backup source, and need to use your S3 credentials for restore, create a secret in this cluster using your S3 credentials. The Secret data must have two keys, `accessKey` and `secretKey` containing the s3 credentials like this: +>**Important:** Kubernetes v1.22, available as an experimental feature of v2.6.3, does not support restoring from backup files containing CRDs with the apiVersion `apiextensions.k8s.io/v1beta1`. In v1.22, the default `resourceSet` in the rancher-backup app is updated to collect only CRDs that use `apiextensions.k8s.io/v1`. There are currently two ways to work around this issue: +> +1. Update the default `resourceSet` to collect the CRDs with the apiVersion v1. +1. Update the default `resourceSet` and the client to use the new APIs internally, with `apiextensions.k8s.io/v1` as the replacement. +> +> - Note that when making or restoring backups for v1.22, the Rancher version and the local cluster's Kubernetes version should be the same. The Kubernetes version should be considered when restoring a backup since the supported apiVersion in the cluster and in the backup file could be different. + +If you are using an S3 store as the backup source and need to use your S3 credentials for restore, create a secret in this cluster using your S3 credentials. The Secret data must have two keys - `accessKey` and `secretKey` - that contain the S3 credentials. + +**Warning:** The values `accessKey` and `secretKey` in the example below must be base64-encoded first when creating the object directly. If not encoded first, the pasted values will cause errors when you are attempting to backup or restore. ```yaml apiVersion: v1 @@ -42,7 +56,7 @@ stringData: secretKey: ``` -This secret can be created in any namespace, with the above example it will get created in the default namespace +This secret can be created in any namespace; with the above example, it will get created in the default namespace. In the Restore custom resource, `prune` must be set to false. @@ -68,21 +82,34 @@ spec: endpoint: s3.us-west-2.amazonaws.com ``` -> **Important:** The field `encryptionConfigSecretName` must be set only if your backup was created with encryption enabled. Provide the name of the Secret containing the encryption config file. If you only have the encryption config file, but don't have a secret created with it in this cluster, use the following steps to create the secret: -1. The encryption configuration file must be named `encryption-provider-config.yaml`, and the `--from-file` flag must be used to create this secret. So save your `EncryptionConfiguration` in a file called `encryption-provider-config.yaml` and run this command: +>**Important:** The field `encryptionConfigSecretName` must be set only if your backup was created with encryption enabled. Provide the name of the Secret containing the encryption config file. If you only have the encryption config file, but don't have a secret created with it in this cluster, use the following steps to create the secret: +1. The encryption configuration file must be named `encryption-provider-config.yaml`, and the `--from-file` flag must be used to create this secret. So save your `EncryptionConfiguration` in a file called `encryption-provider-config.yaml` and run this command: ``` kubectl create secret generic encryptionconfig \ --from-file=./encryption-provider-config.yaml \ -n cattle-resources-system ``` -Then apply the resource: +1. Apply the manifest, and watch for the Restore resources status: + Apply the resource: ``` -kubectl apply -f migrationResource.yaml +kubectl apply -f migrationResource.yaml ``` + Watch the Restore status: +``` +kubectl get restore +``` + + Watch the restoration logs: +``` +kubectl logs -n cattle-resources-system --tail 100 -f rancher-backup-xxx-xxx +``` + +Once the Restore resource has the status `Completed`, you can continue the Rancher installation. + ### 3. Install cert-manager Follow the steps to [install cert-manager]({{}}/rancher/v2.6/en/installation/install-rancher-on-k8s/#5-install-cert-manager) in the documentation about installing cert-manager on Kubernetes. diff --git a/content/rancher/v2.6/en/backups/restoring-rancher/_index.md b/content/rancher/v2.6/en/backups/restoring-rancher/_index.md index 0d9925329a1..2ec7691aa79 100644 --- a/content/rancher/v2.6/en/backups/restoring-rancher/_index.md +++ b/content/rancher/v2.6/en/backups/restoring-rancher/_index.md @@ -3,15 +3,33 @@ title: Restoring Rancher weight: 2 --- -A restore is performed by creating a Restore custom resource. +This page outlines how to perform a restore with Rancher. > **Important** > > * Follow the instructions from this page for restoring rancher on the same cluster where it was backed up from. In order to migrate rancher to a new cluster, follow the steps to [migrate rancher.]({{}}/rancher/v2.6/en/backups/migrating-rancher) > * While restoring rancher on the same setup, the operator will scale down the rancher deployment when restore starts, and it will scale back up the deployment once restore completes. So Rancher will be unavailable during the restore. +> * If you need to restore Rancher to a previous version after an upgrade, see the [rollback documentation.]({{}}/rancher/v2.6/en/installation/install-rancher-on-k8s/rollbacks/) + +### Additional Steps for Rollbacks with Rancher v2.6.4+ + +In Rancher v2.6.4, the cluster-api module has been upgraded from v0.4.4 to v1.0.2 in which the apiVersion of CAPI CRDs are upgraded from `cluster.x-k8s.io/v1alpha4` to `cluster.x-k8s.io/v1beta1`. This has the effect of causing rollbacks from Rancher v2.6.4 to any previous version of Rancher v2.6.x to fail because the previous version the CRDs needed to roll back are no longer available in v1beta1. + +To avoid this, the Rancher resource cleanup scripts should be run **before** the restore or rollback is attempted. Specifically, two scripts have been created to assist you: one to clean up the cluster (`cleanup.sh`), and one to check for any Rancher-related resources in the cluster (`verify.sh`). Details on the cleanup script can be found in the [rancherlabs/support-tools repo](https://github.com/rancherlabs/support-tools/tree/master/rancher-cleanup). + +> **Caution** Rancher will be down as the `cleanup` script runs as it deletes the resources created by rancher. + +The additional preparations: + +1. Follow these [instructions](https://github.com/rancherlabs/support-tools/blob/master/rancher-cleanup/README.md) to run the scripts. +1. Follow these [instructions](https://rancher.com/docs/rancher/v2.6/en/backups/migrating-rancher/) to install the rancher-backup Helm chart on the existing cluster and restore the previous state. + 1. Omit Step 3. + 1. When Step 4 is reached, install the required Rancher v2.6.x version on the local cluster you intend to roll back to. ### Create the Restore Custom Resource +A restore is performed by creating a Restore custom resource. + 1. In the upper left corner, click **☰ > Cluster Management**. 1. On the **Clusters** page, go to the `local` cluster and click **Explore**. The `local` cluster runs the Rancher server. 1. In the left navigation bar, click **Rancher Backups > Restores**. @@ -64,6 +82,6 @@ In some cases, after restoring the backup, Rancher logs will show errors similar ``` 2021/10/05 21:30:45 [ERROR] error syncing 'c-89d82/m-4067aa68dd78': handler rke-worker-upgrader: clusters.management.cattle.io "c-89d82" not found, requeuing ``` -This happens because one of the resources that was just restored has finalizers but the related resources have been deleted so the handler cannot find it. +This happens because one of the resources that was just restored has finalizers, but the related resources have been deleted so the handler cannot find it. To eliminate the errors, we need to find and delete the resource that causes the error. See more information [here](https://github.com/rancher/rancher/issues/35050#issuecomment-937968556) diff --git a/content/rancher/v2.6/en/best-practices/_index.md b/content/rancher/v2.6/en/best-practices/_index.md index 4a9912da47b..37310b8fdd9 100644 --- a/content/rancher/v2.6/en/best-practices/_index.md +++ b/content/rancher/v2.6/en/best-practices/_index.md @@ -12,9 +12,7 @@ Use the navigation bar on the left to find the current best practices for managi For more guidance on best practices, you can consult these resources: - [Security]({{}}/rancher/v2.6/en/security/) -- [Rancher Blog](https://rancher.com/blog/) - - [Articles about best practices on the Rancher blog](https://rancher.com/tags/best-practices/) - - [101 More Security Best Practices for Kubernetes](https://rancher.com/blog/2019/2019-01-17-101-more-kubernetes-security-best-practices/) +- [Rancher Blog](https://www.suse.com/c/rancherblog/) - [Rancher Forum](https://forums.rancher.com/) - [Rancher Users Slack](https://slack.rancher.io/) - [Rancher Labs YouTube Channel - Online Meetups, Demos, Training, and Webinars](https://www.youtube.com/channel/UCh5Xtp82q8wjijP8npkVTBA/featured) diff --git a/content/rancher/v2.6/en/best-practices/rancher-server/deployment-types/_index.md b/content/rancher/v2.6/en/best-practices/rancher-server/deployment-types/_index.md index 2c9d5a218b1..35e0fcaf41a 100644 --- a/content/rancher/v2.6/en/best-practices/rancher-server/deployment-types/_index.md +++ b/content/rancher/v2.6/en/best-practices/rancher-server/deployment-types/_index.md @@ -15,7 +15,7 @@ When you set up your high-availability Rancher installation, consider the follow Don't run other workloads or microservices in the Kubernetes cluster that Rancher is installed on. ### Make sure nodes are configured correctly for Kubernetes ### -It's important to follow K8s and etcd best practices when deploying your nodes, including disabling swap, double checking you have full network connectivity between all machines in the cluster, using unique hostnames, MAC addresses, and product_uuids for every node, checking that all correct ports are opened, and deploying with ssd backed etcd. More details can be found in the [kubernetes docs](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/#before-you-begin) and [etcd's performance op guide](https://github.com/etcd-io/etcd/blob/master/Documentation/op-guide/performance.md) +It's important to follow K8s and etcd best practices when deploying your nodes, including disabling swap, double checking you have full network connectivity between all machines in the cluster, using unique hostnames, MAC addresses, and product_uuids for every node, checking that all correct ports are opened, and deploying with ssd backed etcd. More details can be found in the [kubernetes docs](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/#before-you-begin) and [etcd's performance op guide](https://etcd.io/docs/v3.4/op-guide/performance/). ### When using RKE: Back up the Statefile RKE keeps record of the cluster state in a file called `cluster.rkestate`. This file is important for the recovery of a cluster and/or the continued maintenance of the cluster through RKE. Because this file contains certificate material, we strongly recommend encrypting this file before backing up. After each run of `rke up` you should backup the state file. diff --git a/content/rancher/v2.6/en/best-practices/rancher-server/rancher-in-vsphere/_index.md b/content/rancher/v2.6/en/best-practices/rancher-server/rancher-in-vsphere/_index.md index 48d5459b691..207ab8accb2 100644 --- a/content/rancher/v2.6/en/best-practices/rancher-server/rancher-in-vsphere/_index.md +++ b/content/rancher/v2.6/en/best-practices/rancher-server/rancher-in-vsphere/_index.md @@ -50,7 +50,7 @@ https://rancher.com/docs/rancher/v2.6/en/installation/requirements/ ### Leverage VM Templates to Construct the Environment -To facilitate consistency across the deployed Virtual Machines across the environment, consider the use of "Golden Images" in the form of VM templates. Packer can be used to accomplish this, adding greater customisation options. +To facilitate the consistency of Virtual Machines deployed across the environment, consider the use of "Golden Images" in the form of VM templates. Packer can be used to accomplish this, adding greater customization options. ### Leverage DRS Anti-Affinity Rules (Where Possible) to Separate Rancher Cluster Nodes Across ESXi Hosts diff --git a/content/rancher/v2.6/en/cli/_index.md b/content/rancher/v2.6/en/cli/_index.md index 89928a7dc9b..553cb44c5c2 100644 --- a/content/rancher/v2.6/en/cli/_index.md +++ b/content/rancher/v2.6/en/cli/_index.md @@ -1,17 +1,33 @@ --- -title: Using the Rancher Command Line Interface -description: The Rancher CLI is a unified tool that you can use to interact with Rancher. With it, you can operate Rancher using a command line interface rather than the GUI -metaTitle: "Using the Rancher Command Line Interface " -metaDescription: "The Rancher CLI is a unified tool that you can use to interact with Rancher. With it, you can operate Rancher using a command line interface rather than the GUI" +title: CLI with Rancher +description: Interact with Rancher using command line interface (CLI) tools from your workstation. weight: 21 --- +- [Rancher CLI](#rancher-cli) + - [Download Rancher CLI](#download-rancher-cli) + - [Requirements](#requirements) + - [CLI Authentication](#cli-authentication) + - [Project Selection](#project-selection) + - [Commands](#commands) + - [Rancher CLI Help](#rancher-cli-help) + - [Limitations](#limitations) +- [kubectl](#kubectl) + - [kubectl Utility](#kubectl-utility) + - [Authentication with kubectl and kubeconfig Tokens with TTL](#authentication-with-kubectl-and-kubeconfig-tokens-with-ttl) + +# Rancher CLI + The Rancher CLI (Command Line Interface) is a unified tool that you can use to interact with Rancher. With this tool, you can operate Rancher using a command line rather than the GUI. ### Download Rancher CLI The binary can be downloaded directly from the UI. The link can be found in the right hand side of the footer in the UI. We have binaries for Windows, Mac, and Linux. You can also check the [releases page for our CLI](https://github.com/rancher/cli/releases) for direct downloads of the binary. +1. In the upper left corner, click **☰**. +1. At the bottom, click **v2.6.x**, where **v2.6.x** is a hyperlinked text indicating the installed Rancher version. +1. Under the **CLI Downloads section**, there are links to download the binaries for Windows, Mac, and Linux. You can also check the [releases page for our CLI](https://github.com/rancher/cli/releases) for direct downloads of the binary. + ### Requirements After you download the Rancher CLI, you need to make a few configurations. Rancher CLI requires: @@ -36,11 +52,11 @@ Before you can perform any commands, you must select a Rancher project to perfor **Example: `./rancher context switch` Output** ``` User:rancher-cli-directory user$ ./rancher context switch -NUMBER CLUSTER NAME PROJECT ID PROJECT NAME -1 cluster-2 c-7q96s:p-h4tmb project-2 -2 cluster-2 c-7q96s:project-j6z6d Default -3 cluster-1 c-lchzv:p-xbpdt project-1 -4 cluster-1 c-lchzv:project-s2mch Default +NUMBER CLUSTER NAME PROJECT ID PROJECT NAME +1 cluster-2 c-7q96s:p-h4tmb project-2 +2 cluster-2 c-7q96s:project-j6z6d Default +3 cluster-1 c-lchzv:p-xbpdt project-1 +4 cluster-1 c-lchzv:project-s2mch Default Select a Project: ``` @@ -51,13 +67,15 @@ INFO[0005] Setting new context to project project-1 INFO[0005] Saving config to /Users/markbishop/.rancher/cli2.json ``` +Ensure you can run `rancher kubectl get pods` successfully. + ### Commands The following commands are available for use in Rancher CLI. | Command | Result | |---|---| -| `apps, [app]` | Performs operations on catalog applications (i.e. individual [Helm charts](https://docs.helm.sh/developing_charts/) or Rancher charts. | +| `apps, [app]` | Performs operations on catalog applications (i.e., individual [Helm charts](https://docs.helm.sh/developing_charts/)) or Rancher charts. | | `catalog` | Performs operations on [catalogs]({{}}/rancher/v2.6/en/helm-charts/). | | `clusters, [cluster]` | Performs operations on your [clusters]({{}}/rancher/v2.6/en/cluster-provisioning/). | | `context` | Switches between Rancher [projects]({{}}/rancher/v2.6/en/cluster-admin/projects-and-namespaces/). For an example, see [Project Selection](#project-selection). | @@ -78,3 +96,38 @@ The following commands are available for use in Rancher CLI. Once logged into Rancher Server using the CLI, enter `./rancher --help` for a list of commands. All commands accept the `--help` flag, which documents each command's usage. + +### Limitations + +The Rancher CLI **cannot** be used to install [dashboard apps or Rancher feature charts](../helm-charts/). + +# kubectl + +Interact with Rancher using kubectl. + +### kubectl Utility + +Install the `kubectl` utility. See [install kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/). + +Configure kubectl by visiting your cluster in the Rancher Web UI, clicking on `Kubeconfig`, copying contents, and putting them into your `~/.kube/config` file. + +Run `kubectl cluster-info` or `kubectl get pods` successfully. + +### Authentication with kubectl and kubeconfig Tokens with TTL + +_Requirements_ + +If admins have [enforced TTL on kubeconfig tokens]({{}}/rancher/v2.6/en/api/api-tokens/#setting-ttl-on-kubeconfig-tokens), the kubeconfig file requires the [Rancher CLI](../cli) to be present in your PATH when you run `kubectl`. Otherwise, you’ll see an error like: +`Unable to connect to the server: getting credentials: exec: exec: "rancher": executable file not found in $PATH`. + +This feature enables kubectl to authenticate with the Rancher server and get a new kubeconfig token when required. The following auth providers are currently supported: + +1. Local +2. Active Directory (LDAP only) +3. FreeIPA +4. OpenLDAP +5. SAML providers: Ping, Okta, ADFS, Keycloak, Shibboleth + +When you first run kubectl, for example, `kubectl get pods`, it will ask you to pick an auth provider and log in with the Rancher server. +The kubeconfig token is cached in the path where you run kubectl under `./.cache/token`. This token is valid until [it expires](../../api/api-tokens/#setting-ttl-on-kubeconfig-tokens-period), or [gets deleted from the Rancher server](../../api/api-tokens/#deleting-tokens). +Upon expiration, the next `kubectl get pods` will ask you to log in with the Rancher server again. diff --git a/content/rancher/v2.6/en/cluster-admin/certificate-rotation/_index.md b/content/rancher/v2.6/en/cluster-admin/certificate-rotation/_index.md index 38eb69b8cb1..c38a4dd0d5b 100644 --- a/content/rancher/v2.6/en/cluster-admin/certificate-rotation/_index.md +++ b/content/rancher/v2.6/en/cluster-admin/certificate-rotation/_index.md @@ -9,12 +9,64 @@ By default, Kubernetes clusters require certificates and Rancher launched Kubern Certificates can be rotated for the following services: +{{% tabs %}} +{{% tab "RKE" %}} + - etcd -- kubelet +- kubelet (node certificate) +- kubelet (serving certificate, if [enabled]({{}}/rke/latest/en/config-options/services/#kubelet-options)) - kube-apiserver - kube-proxy - kube-scheduler - kube-controller-manager +{{% /tab %}} +{{% tab "RKE2" %}} + +- admin +- api-server +- controller-manager +- scheduler +- rke2-controller +- rke2-server +- cloud-controller +- etcd +- auth-proxy +- kubelet +- kube-proxy + +{{% /tab %}} +{{% /tabs %}} + > **Note:** For users who didn't rotate their webhook certificates, and they have expired after one year, please see this [page]({{}}/rancher/v2.6/en/troubleshooting/expired-webhook-certificates/) for help. + +### Certificate Rotation + +Rancher launched Kubernetes clusters have the ability to rotate the auto-generated certificates through the UI. + +1. In the upper left corner, click **☰ > Cluster Management**. +1. On the **Clusters** page, go to the cluster you want to rotate certificates for amd click **⋮ > Rotate Certificates**. +1. Select which certificates that you want to rotate. + + * Rotate all Service certificates (keep the same CA) + * Rotate an individual service and choose one of the services from the drop-down menu + +1. Click **Save**. + +**Results:** The selected certificates will be rotated and the related services will be restarted to start using the new certificate. + +### Additional Notes + +{{% tabs %}} +{{% tab "RKE" %}} + +Even though the RKE CLI can use custom certificates for the Kubernetes cluster components, Rancher currently doesn't allow the ability to upload these in Rancher launched Kubernetes clusters. + +{{% /tab %}} +{{% tab "RKE2" %}} + +In RKE2, both etcd and control plane nodes are treated as the same `server` concept. As such, when rotating certificates of services specific to either of these components will result in certificates being rotated on both. The certificates will only change for the specified service, but you will see nodes for both components go into an updating state. You may also see worker only nodes go into an updating state. This is to restart the workers after a certificate change to ensure they get the latest client certs. + +{{% /tab %}} +{{% /tabs %}} diff --git a/content/rancher/v2.6/en/cluster-admin/cluster-access/_index.md b/content/rancher/v2.6/en/cluster-admin/cluster-access/_index.md index 9d092a24550..291423864fc 100644 --- a/content/rancher/v2.6/en/cluster-admin/cluster-access/_index.md +++ b/content/rancher/v2.6/en/cluster-admin/cluster-access/_index.md @@ -20,7 +20,7 @@ Rancher provides an intuitive user interface for interacting with your clusters. You can use the Kubernetes command-line tool, [kubectl](https://kubernetes.io/docs/reference/kubectl/overview/), to manage your clusters. You have two options for using kubectl: -- **Rancher kubectl shell:** Interact with your clusters by launching a kubectl shell available in the Rancher UI. This option requires no configuration actions on your part. For more information, see [Accessing Clusters with kubectl Shell]({{}}/rancher/v2.6/en/cluster-access/kubectl/). +- **Rancher kubectl shell:** Interact with your clusters by launching a kubectl shell available in the Rancher UI. This option requires no configuration actions on your part. For more information, see [Accessing Clusters with kubectl Shell]({{}}/rancher/v2.6/en/cluster-admin/cluster-access/kubectl/). - **Terminal remote connection:** You can also interact with your clusters by installing [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) on your local desktop and then copying the cluster's kubeconfig file to your local `~/.kube/config` directory. For more information, see [Accessing Clusters with kubectl and a kubeconfig File](./kubectl/). ### Rancher CLI diff --git a/content/rancher/v2.6/en/cluster-admin/editing-clusters/_index.md b/content/rancher/v2.6/en/cluster-admin/editing-clusters/_index.md index c9e257784be..cab7cdd0d06 100644 --- a/content/rancher/v2.6/en/cluster-admin/editing-clusters/_index.md +++ b/content/rancher/v2.6/en/cluster-admin/editing-clusters/_index.md @@ -12,8 +12,8 @@ For information on editing cluster membership, go to [this page.]({{}}/ The cluster configuration options depend on the type of Kubernetes cluster: - [RKE Cluster Configuration](./rke-config-reference) -- [RKE2 Cluster Configuration](./rke2-config-reference) (Tech Preview) -- [K3s Cluster Configuration](./k3s-config-reference) (Tech Preview) +- [RKE2 Cluster Configuration](./rke2-config-reference) +- [K3s Cluster Configuration](./k3s-config-reference) - [EKS Cluster Configuration](./eks-config-reference) - [GKE Cluster Configuration](./gke-config-reference) - [AKS Cluster Configuration](./aks-config-reference) diff --git a/content/rancher/v2.6/en/cluster-admin/editing-clusters/eks-config-reference/_index.md b/content/rancher/v2.6/en/cluster-admin/editing-clusters/eks-config-reference/_index.md index 67d3e46d94f..4eec75f21f7 100644 --- a/content/rancher/v2.6/en/cluster-admin/editing-clusters/eks-config-reference/_index.md +++ b/content/rancher/v2.6/en/cluster-admin/editing-clusters/eks-config-reference/_index.md @@ -11,7 +11,7 @@ Complete each drop-down and field using the information obtained for your IAM po | Setting | Description | | ---------- | -------------------------------------------------------------------------------------------------------------------- | | Region | From the drop-down choose the geographical region in which to build your cluster. | -| Cloud Credentials | Select the cloud credentials that you created for your IAM policy. For more information on creating cloud credentials in Rancher, refer to [this page.]({{}}/rancher/v2.x/en/user-settings/cloud-credentials/) | +| Cloud Credentials | Select the cloud credentials that you created for your IAM policy. For more information on creating cloud credentials in Rancher, refer to [this page.]({{}}/rancher/v2.6/en/user-settings/cloud-credentials/) | ### Service Role diff --git a/content/rancher/v2.6/en/cluster-admin/editing-clusters/gke-config-reference/_index.md b/content/rancher/v2.6/en/cluster-admin/editing-clusters/gke-config-reference/_index.md index 30b22867584..b87543a3157 100644 --- a/content/rancher/v2.6/en/cluster-admin/editing-clusters/gke-config-reference/_index.md +++ b/content/rancher/v2.6/en/cluster-admin/editing-clusters/gke-config-reference/_index.md @@ -103,13 +103,13 @@ The address range assigned to the services in the cluster. Must be a valid CIDR _Mutable: no_ -> Warning: private clusters require additional planning and configuration outside of Rancher. Refer to the [private cluster guide]({{< baseurl >}}/rancher/v2.6/en/cluster-provisioning/hosted-kubernetes-clusters/gke/private-clusters/). +> Warning: private clusters require additional planning and configuration outside of Rancher. Refer to the [private cluster guide]({{< baseurl >}}/rancher/v2.6/en/cluster-admin/editing-clusters/gke-config-reference/private-clusters/). Assign nodes only internal IP addresses. Private cluster nodes cannot access the public internet unless additional networking steps are taken in GCP. ### Enable Private Endpoint -> Warning: private clusters require additional planning and configuration outside of Rancher. Refer to the [private cluster guide]({{< baseurl >}}/rancher/v2.6/en/cluster-provisioning/hosted-kubernetes-clusters/gke/#private-clusters). +> Warning: private clusters require additional planning and configuration outside of Rancher. Refer to the [private cluster guide]({{< baseurl >}}/rancher/v2.6/en/cluster-admin/editing-clusters/gke-config-reference/private-clusters/). _Mutable: no_ diff --git a/content/rancher/v2.6/en/cluster-admin/editing-clusters/gke-config-reference/private-clusters/_index.md b/content/rancher/v2.6/en/cluster-admin/editing-clusters/gke-config-reference/private-clusters/_index.md index cf3b3963f05..95d9bd39bcc 100644 --- a/content/rancher/v2.6/en/cluster-admin/editing-clusters/gke-config-reference/private-clusters/_index.md +++ b/content/rancher/v2.6/en/cluster-admin/editing-clusters/gke-config-reference/private-clusters/_index.md @@ -21,7 +21,7 @@ If restricting outgoing internet access is not a concern for your organization, >**Note** >This scenario is not officially supported, but is described for cases in which using the Cloud NAT service is not sufficient. -If restricting both incoming and outgoing traffic to nodes is a requirement, follow the air-gapped installation instructions to set up a private container image [registry](https://rancher.com/docs/rancher/v2.x/en/installation/other-installation-methods/air-gap/) on the VPC where the cluster is going to be, allowing the cluster nodes to access and download the images they need to run the cluster agent. If the control plane endpoint is also private, Rancher will need [direct access](#direct-access) to it. +If restricting both incoming and outgoing traffic to nodes is a requirement, follow the air-gapped installation instructions to set up a private container image [registry](https://rancher.com/docs/rancher/v2.6/en/installation/other-installation-methods/air-gap/) on the VPC where the cluster is going to be, allowing the cluster nodes to access and download the images they need to run the cluster agent. If the control plane endpoint is also private, Rancher will need [direct access](#direct-access) to it. ### Private Control Plane Endpoint diff --git a/content/rancher/v2.6/en/cluster-admin/editing-clusters/k3s-config-reference/_index.md b/content/rancher/v2.6/en/cluster-admin/editing-clusters/k3s-config-reference/_index.md index 47ee18b44e2..00d784cfa0c 100644 --- a/content/rancher/v2.6/en/cluster-admin/editing-clusters/k3s-config-reference/_index.md +++ b/content/rancher/v2.6/en/cluster-admin/editing-clusters/k3s-config-reference/_index.md @@ -1,5 +1,5 @@ --- -title: K3s Cluster Configuration Reference (Tech Preview) +title: K3s Cluster Configuration Reference shortTitle: K3s Cluster Configuration weight: 6 --- diff --git a/content/rancher/v2.6/en/cluster-admin/editing-clusters/rke-config-reference/_index.md b/content/rancher/v2.6/en/cluster-admin/editing-clusters/rke-config-reference/_index.md index 2b530a8db5e..27e73a4c408 100644 --- a/content/rancher/v2.6/en/cluster-admin/editing-clusters/rke-config-reference/_index.md +++ b/content/rancher/v2.6/en/cluster-admin/editing-clusters/rke-config-reference/_index.md @@ -189,7 +189,7 @@ Option to enable or disable [recurring etcd snapshots]({{}}/rke/latest/ ### Agent Environment Variables -Option to set environment variables for [rancher agents]({{}}/rancher/v2.x/en/cluster-provisioning/rke-clusters/rancher-agents/). The environment variables can be set using key value pairs. If rancher agent requires use of proxy to communicate with Rancher server, `HTTP_PROXY`, `HTTPS_PROXY` and `NO_PROXY` environment variables can be set using agent environment variables. +Option to set environment variables for [rancher agents]({{}}/rancher/v2.6/en/cluster-provisioning/rke-clusters/rancher-agents/). The environment variables can be set using key value pairs. If rancher agent requires use of proxy to communicate with Rancher server, `HTTP_PROXY`, `HTTPS_PROXY` and `NO_PROXY` environment variables can be set using agent environment variables. ### Updating ingress-nginx @@ -341,7 +341,10 @@ Example: local_cluster_auth_endpoint: enabled: true fqdn: "FQDN" - ca_certs: "BASE64_CACERT" + ca_certs: |- + -----BEGIN CERTIFICATE----- + ... + -----END CERTIFICATE----- ``` ### Custom Network Plug-in diff --git a/content/rancher/v2.6/en/cluster-admin/editing-clusters/rke2-config-reference/_index.md b/content/rancher/v2.6/en/cluster-admin/editing-clusters/rke2-config-reference/_index.md index 907fbfb3aea..3e1ee54d5db 100644 --- a/content/rancher/v2.6/en/cluster-admin/editing-clusters/rke2-config-reference/_index.md +++ b/content/rancher/v2.6/en/cluster-admin/editing-clusters/rke2-config-reference/_index.md @@ -1,5 +1,5 @@ --- -title: RKE2 Cluster Configuration Reference (Tech Preview) +title: RKE2 Cluster Configuration Reference shortTitle: RKE2 Cluster Configuration weight: 5 --- @@ -8,7 +8,7 @@ This section covers the configuration options that are available in Rancher for # Overview -You can configure the Kubernetes options one of two ways: +You can configure the Kubernetes options in one of the two following ways: - [Rancher UI](#configuration-options-in-the-rancher-ui): Use the Rancher UI to select options that are commonly customized when setting up a Kubernetes cluster. - [Cluster Config File](#cluster-config-file): Instead of using the Rancher UI to choose Kubernetes options for the cluster, advanced users can create an RKE2 config file. Using a config file allows you to set any of the [options](https://docs.rke2.io/install/install_options/install_options) available in an RKE2 installation. @@ -28,17 +28,27 @@ For more detail, see [Upgrading Kubernetes]({{}}/rancher/v2.6/en/cluste The [Network Provider](https://kubernetes.io/docs/concepts/cluster-administration/networking/) that the cluster uses. -> After you launch the cluster, you cannot change your network provider. Therefore, choose which network provider you want to use carefully, as Kubernetes doesn't allow switching between network providers. Once a cluster is created with a network provider, changing network providers would require you tear down the entire cluster and all its applications. +> After you launch the cluster, you cannot change your network provider. Therefore, choose which network provider you want to use carefully, as Kubernetes doesn't allow switching between network providers. Once a cluster is created with a network provider, changing network providers would require you to tear down the entire cluster and all its applications. Out of the box, Rancher is compatible with the following network providers: - [Canal](https://github.com/projectcalico/canal) -- [Cilium](https://cilium.io/) +- [Cilium](https://cilium.io/)* - [Calico](https://docs.projectcalico.org/v3.11/introduction/) - [Multus](https://github.com/k8snetworkplumbingwg/multus-cni) +\* When using [project network isolation](#project-network-isolation) in the [Cilium CNI]({{}}/rancher/v2.6/en/faq/networking/cni-providers/#cilium), it is possible to enable cross-node ingress routing. Click the [CNI provider docs]({{}}/rancher/v2.6/en/faq/networking/cni-providers/#ingress-routing-across-nodes-in-cilium) to learn more. + For more details on the different networking providers and how to configure them, please view our [RKE2 documentation](https://docs.rke2.io/install/network_options/). +##### Dual-stack Networking + +[Dual-stack](https://docs.rke2.io/install/network_options/#dual-stack-configuration) networking is supported for all CNI providers. To configure RKE2 in dual-stack mode, set valid IPv4/IPv6 CIDRs for your [Cluster CIDR](#cluster-cidr) and/or [Service CIDR](#service-cidr). + +###### Additional Configuration {#dual-stack-additional-config} + +When using `cilium` or `multus,cilium` as your container network interface provider, ensure the **Enable IPv6 Support** option is also enabled. + #### Cloud Provider You can configure a [Kubernetes cloud provider]({{}}/rancher/v2.6/en/cluster-provisioning/rke-clusters/cloud-providers). If you want to use dynamically provisioned [volumes and storage]({{}}/rancher/v2.6/en/cluster-admin/volumes-and-storage/) in Kubernetes, typically you must select the specific cloud provider in order to use it. For example, if you want to use Amazon EBS, you would need to select the `aws` cloud provider. @@ -81,7 +91,7 @@ Each cloud provider capable of launching a cluster using RKE2 can collect metric ### Add-On Config -Additional Kubernetes manifests, managed as a [Add-on](https://kubernetes.io/docs/concepts/cluster-administration/addons/), to apply to the cluster on startup. Refer to the [RKE2 documentation](https://docs.rke2.io/helm/#automatically-deploying-manifests-and-helm-charts) for details. +Additional Kubernetes manifests, managed as an [Add-on](https://kubernetes.io/docs/concepts/cluster-administration/addons/), to apply to the cluster on startup. Refer to the [RKE2 documentation](https://docs.rke2.io/helm/#automatically-deploying-manifests-and-helm-charts) for details. ### Agent Environment Vars @@ -101,12 +111,24 @@ Option to choose whether to expose etcd metrics to the public or only within the #### Cluster CIDR -IPv4/IPv6 network CIDRs to use for pod IPs (default: 10.42.0.0/16). +IPv4 and/or IPv6 network CIDRs to use for pod IPs (default: 10.42.0.0/16). + +##### Dual-stack Networking + +To configure [dual-stack](https://docs.rke2.io/install/network_options/#dual-stack-configuration) mode, enter a valid IPv4/IPv6 CIDR. For example `10.42.0.0/16,2001:cafe:42:0::/56`. + +[Additional configuration](#dual-stack-additional-config) is required when using `cilium` or `multus,cilium` as your [container network](#container-network) interface provider. #### Service CIDR IPv4/IPv6 network CIDRs to use for service IPs (default: 10.43.0.0/16). +##### Dual-stack Networking + +To configure [dual-stack](https://docs.rke2.io/install/network_options/#dual-stack-configuration) mode, enter a valid IPv4/IPv6 CIDR. For example `10.42.0.0/16,2001:cafe:42:0::/56`. + +[Additional configuration](#dual-stack-additional-config) is required when using `cilium ` or `multus,cilium` as your [container network](#container-network) interface provider. + #### Cluster DNS IPv4 Cluster IP for coredns service. Should be in your service-cidr range (default: 10.43.0.10). @@ -139,7 +161,7 @@ Select the image repository to pull Rancher images from. For more details and co ### Upgrade Strategy -#### Controle Plane Concurrency +#### Control Plane Concurrency Select how many nodes can be upgraded at the same time. Can be a fixed number or percentage. @@ -164,5 +186,3 @@ Option to set kubelet options for different nodes. For available options, refer Instead of using the Rancher UI forms to choose Kubernetes options for the cluster, advanced users can create an RKE2 config file. Using a config file allows you to set any of the [options](https://docs.rke2.io/install/install_options/install_options) available in an RKE2 installation. To edit an RKE2 config file directly from the Rancher UI, click **Edit as YAML**. - - diff --git a/content/rancher/v2.6/en/cluster-admin/nodes/_index.md b/content/rancher/v2.6/en/cluster-admin/nodes/_index.md index a60fb2d562a..9f2243cceab 100644 --- a/content/rancher/v2.6/en/cluster-admin/nodes/_index.md +++ b/content/rancher/v2.6/en/cluster-admin/nodes/_index.md @@ -40,11 +40,11 @@ The following table lists which node options are available for each type of clus | [Download Keys](#ssh-into-a-node-hosted-by-an-infrastructure-provider) | ✓ | | | | | Download SSH key in order to SSH into the node. | | [Node Scaling](#scaling-nodes) | ✓ | | | ✓ | | Scale the number of nodes in the node pool up or down. | -[1]: {{}}/rancher/v2.x/en/cluster-provisioning/rke-clusters/node-pools/ -[2]: {{}}/rancher/v2.x/en/cluster-provisioning/rke-clusters/custom-nodes/ -[3]: {{}}/rancher/v2.x/en/cluster-provisioning/hosted-kubernetes-clusters/ -[4]: {{}}/rancher/v2.x/en/cluster-provisioning/registered-clusters/ -[5]: {{}}/rancher/v2.x/en/cluster-provisioning/registered-clusters/ +[1]: {{}}/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/ +[2]: {{}}/rancher/v2.6/en/cluster-provisioning/rke-clusters/custom-nodes/ +[3]: {{}}/rancher/v2.6/en/cluster-provisioning/hosted-kubernetes-clusters/ +[4]: {{}}/rancher/v2.6/en/cluster-provisioning/registered-clusters/ +[5]: {{}}/rancher/v2.6/en/cluster-provisioning/registered-clusters/ \* Delete option accessible via View API diff --git a/content/rancher/v2.6/en/cluster-admin/projects-and-namespaces/_index.md b/content/rancher/v2.6/en/cluster-admin/projects-and-namespaces/_index.md index 71820214033..d1ae03863b4 100644 --- a/content/rancher/v2.6/en/cluster-admin/projects-and-namespaces/_index.md +++ b/content/rancher/v2.6/en/cluster-admin/projects-and-namespaces/_index.md @@ -8,6 +8,8 @@ A namespace is a Kubernetes concept that allows a virtual cluster within a clust A project is a group of namespaces, and it is a concept introduced by Rancher. Projects allow you to manage multiple namespaces as a group and perform Kubernetes operations in them. You can use projects to support multi-tenancy, so that a team can access a project within a cluster without having access to other projects in the same cluster. +>**Note:** As of Rancher v2.6, projects are de-emphasized on the UI because it is no longer required to create any Kubernetes resources within a project scope. However, resources such as [Secrets]({{}}/rancher/v2.6/en/k8s-in-rancher/secrets/#creating-secrets-in-projects) can still be created in a project scope if the legacy feature flag is enabled. + This section describes how projects and namespaces work with Rancher. It covers the following topics: - [About namespaces](#about-namespaces) @@ -150,6 +152,9 @@ By default, your user is added as the project `Owner`. >**Notes on Permissions:** > >- Users assigned the `Owner` or `Member` role for a project automatically inherit the `namespace creation` role. However, this role is a [Kubernetes ClusterRole](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#role-and-clusterrole), meaning its scope extends to all projects in the cluster. Therefore, users explicitly assigned the `Owner` or `Member` role for a project can create namespaces in other projects they're assigned to, even with only the `Read Only` role assigned. +> +>- By default, the Rancher role of `project-member` inherits from the `Kubernetes-edit` role, and the `project-owner` role inherits from the `Kubernetes-admin` role. As such, both `project-member` and `project-owner` roles will allow for namespace management, including the ability to create and delete namespaces. +> >- Choose `Custom` to create a custom role on the fly: [Custom Project Roles]({{}}/rancher/v2.6/en/admin-settings/rbac/cluster-project-roles/#custom-project-roles). To add members: diff --git a/content/rancher/v2.6/en/cluster-admin/volumes-and-storage/_index.md b/content/rancher/v2.6/en/cluster-admin/volumes-and-storage/_index.md index 9467dfa660f..745fbce0131 100644 --- a/content/rancher/v2.6/en/cluster-admin/volumes-and-storage/_index.md +++ b/content/rancher/v2.6/en/cluster-admin/volumes-and-storage/_index.md @@ -44,7 +44,7 @@ For details and prerequisites, refer to [this page.](./provisioning-new-storage) Longhorn is free, open source software. Originally developed by Rancher Labs, it is now being developed as a sandbox project of the Cloud Native Computing Foundation. It can be installed on any Kubernetes cluster with Helm, with kubectl, or with the Rancher UI. -If you have a pool of block storage, Longhorn can help you provide persistent storage to your Kubernetes cluster without relying on cloud providers. For more information about Longhorn features, refer to the [documentation.](https://longhorn.io/docs/1.0.2/what-is-longhorn/) +If you have a pool of block storage, Longhorn can help you provide persistent storage to your Kubernetes cluster without relying on cloud providers. For more information about Longhorn features, refer to the [documentation.](https://longhorn.io/docs/latest/what-is-longhorn/) Rancher v2.5 simplified the process of installing Longhorn on a Rancher-managed cluster. For more information, see [this page.]({{}}/rancher/v2.6/en/longhorn) diff --git a/content/rancher/v2.6/en/cluster-admin/volumes-and-storage/iscsi-volumes/_index.md b/content/rancher/v2.6/en/cluster-admin/volumes-and-storage/iscsi-volumes/_index.md index 01d87aabd59..c8a14cb458d 100644 --- a/content/rancher/v2.6/en/cluster-admin/volumes-and-storage/iscsi-volumes/_index.md +++ b/content/rancher/v2.6/en/cluster-admin/volumes-and-storage/iscsi-volumes/_index.md @@ -17,9 +17,12 @@ If you encounter this issue, you can work around it by installing the initiator After installing the initiator tool on your nodes, edit the YAML for your cluster, editing the kubelet configuration to mount the iSCSI binary and configuration, as shown in the sample below. ->**Note:** +>**Notes:** +> +>- Before updating your Kubernetes YAML to mount the iSCSI binary and configuration, make sure either the `open-iscsi` (deb) or `iscsi-initiator-utils` (yum) package is installed on your cluster nodes. If this package isn't installed _before_ the bind mounts are created in your Kubernetes YAML, Docker will automatically create the directories and files on each node and will not allow the package install to succeed.
+>
> ->Before updating your Kubernetes YAML to mount the iSCSI binary and configuration, make sure either the `open-iscsi` (deb) or `iscsi-initiator-utils` (yum) package is installed on your cluster nodes. If this package isn't installed _before_ the bind mounts are created in your Kubernetes YAML, Docker will automatically create the directories and files on each node and will not allow the package install to succeed. +>- The example YAML below does not apply to K3s, but only to RKE clusters. Since the K3s kubelet does not run in a container, adding extra binds is not necessary. However, all iSCSI tools must still be installed on your K3s nodes. ``` services: diff --git a/content/rancher/v2.6/en/cluster-provisioning/_index.md b/content/rancher/v2.6/en/cluster-provisioning/_index.md index 5a33cad88f8..9e9f44c4c87 100644 --- a/content/rancher/v2.6/en/cluster-provisioning/_index.md +++ b/content/rancher/v2.6/en/cluster-provisioning/_index.md @@ -20,6 +20,7 @@ This section covers the following topics: - [Launching Kubernetes and Provisioning Nodes in an Infrastructure Provider](#launching-kubernetes-and-provisioning-nodes-in-an-infrastructure-provider) - [Launching Kubernetes on Existing Custom Nodes](#launching-kubernetes-on-existing-custom-nodes) - [Registering Existing Clusters](#registering-existing-clusters) +- [Programmatically Creating Clusters](#programmatically-creating-clusters) @@ -78,3 +79,9 @@ Registering EKS clusters now provides additional benefits. For the most part, re When you delete an EKS cluster that was created in Rancher, the cluster is destroyed. When you delete an EKS cluster that was registered in Rancher, it is disconnected from the Rancher server, but it still exists and you can still access it in the same way you did before it was registered in Rancher. For more information, see [this page.](./registered-clusters) + +# Programmatically Creating Clusters + +The most common way to programmatically deploy Kubernetes clusters through Rancher is by using the Rancher2 Terraform provider. The documentation for creating clusters with Terraform is [here.](https://registry.terraform.io/providers/rancher/rancher2/latest/docs/resources/cluster) + +EKS, GKE, AKS clusters and RKE clusters can be created or imported with Terraform. \ No newline at end of file diff --git a/content/rancher/v2.6/en/cluster-provisioning/hosted-kubernetes-clusters/aks/_index.md b/content/rancher/v2.6/en/cluster-provisioning/hosted-kubernetes-clusters/aks/_index.md index e3aa18629c8..f54e1e42bdd 100644 --- a/content/rancher/v2.6/en/cluster-provisioning/hosted-kubernetes-clusters/aks/_index.md +++ b/content/rancher/v2.6/en/cluster-provisioning/hosted-kubernetes-clusters/aks/_index.md @@ -14,8 +14,8 @@ You can use Rancher to create a cluster hosted in Microsoft Azure Kubernetes Ser - [Role-based Access Control](#role-based-access-control) - [AKS Cluster Configuration Reference](#aks-cluster-configuration-reference) - [Private Clusters](#private-clusters) -- [Minimum AKS Permissions](#minimum-aks-permissions) - [Syncing](#syncing) +- [Programmatically Creating AKS Clusters](#programmatically-creating-aks-clusters) # Prerequisites in Microsoft Azure @@ -152,3 +152,7 @@ For more information about connecting to an AKS private cluster, see the [AKS do The AKS provisioner can synchronize the state of an AKS cluster between Rancher and the provider. For an in-depth technical explanation of how this works, see [Syncing.]({{}}/rancher/v2.6/en/cluster-admin/editing-clusters/syncing) For information on configuring the refresh interval, see [this section.]({{}}/rancher/v2.6/en/cluster-admin/editing-clusters/gke-config-reference/#configuring-the-refresh-interval) + +# Programmatically Creating AKS Clusters + +The most common way to programmatically deploy AKS clusters through Rancher is by using the Rancher2 Terraform provider. The documentation for creating clusters with Terraform is [here.](https://registry.terraform.io/providers/rancher/rancher2/latest/docs/resources/cluster) \ No newline at end of file diff --git a/content/rancher/v2.6/en/cluster-provisioning/hosted-kubernetes-clusters/eks/_index.md b/content/rancher/v2.6/en/cluster-provisioning/hosted-kubernetes-clusters/eks/_index.md index 3235e46801c..3f55612fbdd 100644 --- a/content/rancher/v2.6/en/cluster-provisioning/hosted-kubernetes-clusters/eks/_index.md +++ b/content/rancher/v2.6/en/cluster-provisioning/hosted-kubernetes-clusters/eks/_index.md @@ -17,6 +17,7 @@ Amazon EKS provides a managed control plane for your Kubernetes cluster. Amazon - [Minimum EKS Permissions](#minimum-eks-permissions) - [Syncing](#syncing) - [Troubleshooting](#troubleshooting) +- [Programmatically Creating EKS Clusters](#programmatically-creating-eks-clusters) # Prerequisites in Amazon Web Services >**Note** @@ -108,4 +109,8 @@ If your changes were overwritten, it could be due to the way the cluster data is If an unauthorized error is returned while attempting to modify or register the cluster and the cluster was not created with the role or user that your credentials belong to, refer to [Security and Compliance.](#security-and-compliance) -For any issues or troubleshooting details for your Amazon EKS Kubernetes cluster, please see this [documentation](https://docs.aws.amazon.com/eks/latest/userguide/troubleshooting.html). \ No newline at end of file +For any issues or troubleshooting details for your Amazon EKS Kubernetes cluster, please see this [documentation](https://docs.aws.amazon.com/eks/latest/userguide/troubleshooting.html). + +# Programmatically Creating EKS Clusters + +The most common way to programmatically deploy EKS clusters through Rancher is by using the Rancher2 Terraform provider. The documentation for creating clusters with Terraform is [here.](https://registry.terraform.io/providers/rancher/rancher2/latest/docs/resources/cluster) \ No newline at end of file diff --git a/content/rancher/v2.6/en/cluster-provisioning/hosted-kubernetes-clusters/eks/permissions/_index.md b/content/rancher/v2.6/en/cluster-provisioning/hosted-kubernetes-clusters/eks/permissions/_index.md index 0567e110d02..8f4539e1c6f 100644 --- a/content/rancher/v2.6/en/cluster-provisioning/hosted-kubernetes-clusters/eks/permissions/_index.md +++ b/content/rancher/v2.6/en/cluster-provisioning/hosted-kubernetes-clusters/eks/permissions/_index.md @@ -24,6 +24,7 @@ Resource targeting uses `*` as the ARN of many of the resources created cannot b "ec2:RunInstances", "ec2:RevokeSecurityGroupIngress", "ec2:RevokeSecurityGroupEgress", + "ec2:DescribeRegions", "ec2:DescribeVpcs", "ec2:DescribeTags", "ec2:DescribeSubnets", @@ -123,31 +124,6 @@ Resource targeting uses `*` as the ARN of many of the resources created cannot b ### Service Role Permissions -Rancher will create a service role with the following trust policy: - -```json -{ - "Version": "2012-10-17", - "Statement": [ - { - "Action": "sts:AssumeRole", - "Principal": { - "Service": "eks.amazonaws.com" - }, - "Effect": "Allow", - "Sid": "" - } - ] -} -``` - -This role will also have two role policy attachments with the following policies ARNs: - -``` -arn:aws:iam::aws:policy/AmazonEKSClusterPolicy -arn:aws:iam::aws:policy/AmazonEKSServicePolicy -``` - Permissions required for Rancher to create service role on users behalf during the EKS cluster creation process. ```json @@ -182,36 +158,66 @@ Permissions required for Rancher to create service role on users behalf during t } ``` +When an EKS cluster is created, Rancher will create a service role with the following trust policy: + +```json +{ + "Version": "2012-10-17", + "Statement": [ + { + "Action": "sts:AssumeRole", + "Principal": { + "Service": "eks.amazonaws.com" + }, + "Effect": "Allow", + "Sid": "" + } + ] +} +``` + +This role will also have two role policy attachments with the following policies ARNs: + +``` +arn:aws:iam::aws:policy/AmazonEKSClusterPolicy +arn:aws:iam::aws:policy/AmazonEKSServicePolicy +``` + ### VPC Permissions Permissions required for Rancher to create VPC and associated resources. ```json { - "Sid": "VPCPermissions", - "Effect": "Allow", - "Action": [ - "ec2:ReplaceRoute", - "ec2:ModifyVpcAttribute", - "ec2:ModifySubnetAttribute", - "ec2:DisassociateRouteTable", - "ec2:DetachInternetGateway", - "ec2:DescribeVpcs", - "ec2:DeleteVpc", - "ec2:DeleteTags", - "ec2:DeleteSubnet", - "ec2:DeleteRouteTable", - "ec2:DeleteRoute", - "ec2:DeleteInternetGateway", - "ec2:CreateVpc", - "ec2:CreateSubnet", - "ec2:CreateSecurityGroup", - "ec2:CreateRouteTable", - "ec2:CreateRoute", - "ec2:CreateInternetGateway", - "ec2:AttachInternetGateway", - "ec2:AssociateRouteTable" - ], - "Resource": "*" + "Version": "2012-10-17", + "Statement": [ + { + "Sid": "VPCPermissions", + "Effect": "Allow", + "Action": [ + "ec2:ReplaceRoute", + "ec2:ModifyVpcAttribute", + "ec2:ModifySubnetAttribute", + "ec2:DisassociateRouteTable", + "ec2:DetachInternetGateway", + "ec2:DescribeVpcs", + "ec2:DeleteVpc", + "ec2:DeleteTags", + "ec2:DeleteSubnet", + "ec2:DeleteRouteTable", + "ec2:DeleteRoute", + "ec2:DeleteInternetGateway", + "ec2:CreateVpc", + "ec2:CreateSubnet", + "ec2:CreateSecurityGroup", + "ec2:CreateRouteTable", + "ec2:CreateRoute", + "ec2:CreateInternetGateway", + "ec2:AttachInternetGateway", + "ec2:AssociateRouteTable" + ], + "Resource": "*" + } + ] } -``` \ No newline at end of file +``` diff --git a/content/rancher/v2.6/en/cluster-provisioning/hosted-kubernetes-clusters/gke/_index.md b/content/rancher/v2.6/en/cluster-provisioning/hosted-kubernetes-clusters/gke/_index.md index 0f1d1eec0e1..95567faa8c9 100644 --- a/content/rancher/v2.6/en/cluster-provisioning/hosted-kubernetes-clusters/gke/_index.md +++ b/content/rancher/v2.6/en/cluster-provisioning/hosted-kubernetes-clusters/gke/_index.md @@ -10,6 +10,7 @@ weight: 2105 - [Configuration Reference](#configuration-reference) - [Updating Kubernetes Version](#updating-kubernetes-version) - [Syncing](#syncing) +- [Programmatically Creating GKE Clusters](#programmatically-creating-gke-clusters) # Prerequisites @@ -98,3 +99,6 @@ The GKE provisioner can synchronize the state of a GKE cluster between Rancher a For information on configuring the refresh interval, see [this section.]({{}}/rancher/v2.6/en/cluster-admin/editing-clusters/gke-config-reference/#configuring-the-refresh-interval) +# Programmatically Creating GKE Clusters + +The most common way to programmatically deploy GKE clusters through Rancher is by using the Rancher2 Terraform provider. The documentation for creating clusters with Terraform is [here.](https://registry.terraform.io/providers/rancher/rancher2/latest/docs/resources/cluster) \ No newline at end of file diff --git a/content/rancher/v2.6/en/cluster-provisioning/node-requirements/_index.md b/content/rancher/v2.6/en/cluster-provisioning/node-requirements/_index.md index bd24c9adeb8..519e8c31077 100644 --- a/content/rancher/v2.6/en/cluster-provisioning/node-requirements/_index.md +++ b/content/rancher/v2.6/en/cluster-provisioning/node-requirements/_index.md @@ -30,6 +30,13 @@ For information on how to install Docker, refer to the official [Docker document Some distributions of Linux derived from RHEL, including Oracle Linux, may have default firewall rules that block communication with Helm. We recommend disabling firewalld. For Kubernetes 1.19, firewalld must be turned off. +>**Note:** In RHEL 8.4, two extra services are included on the NetworkManager: `nm-cloud-setup.service` and `nm-cloud-setup.timer`. These services add a routing table that interferes with the CNI plugin's configuration. If these services are enabled, you must disable them using the command below, and then reboot the node to restore connectivity: +> +> ``` + systemctl disable nm-cloud-setup.service nm-cloud-setup.timer + reboot + ``` + ### SUSE Linux Nodes SUSE Linux may have a firewall that blocks all ports by default. In that situation, follow [these steps]({{}}/rancher/v2.6/en/installation/requirements/ports/#opening-suse-linux-ports) to open the ports needed for adding a host to a custom cluster. diff --git a/content/rancher/v2.6/en/cluster-provisioning/registered-clusters/_index.md b/content/rancher/v2.6/en/cluster-provisioning/registered-clusters/_index.md index 6ad807cd9fa..5bcc0cc73f0 100644 --- a/content/rancher/v2.6/en/cluster-provisioning/registered-clusters/_index.md +++ b/content/rancher/v2.6/en/cluster-provisioning/registered-clusters/_index.md @@ -12,10 +12,19 @@ The control that Rancher has to manage a registered cluster depends on the type - [Management Capabilities for Registered Clusters](#management-capabilities-for-registered-clusters) - [Configuring K3s Cluster Upgrades](#configuring-k3s-cluster-upgrades) - [Debug Logging and Troubleshooting for Registered K3s Clusters](#debug-logging-and-troubleshooting-for-registered-k3s-clusters) +- [Authorized Cluster Endpoint Support for RKE2 and K3s Clusters](#authorized-cluster-endpoint-support-for-rke2-and-k3s-clusters) - [Annotating Registered Clusters](#annotating-registered-clusters) # Prerequisites +### Kubernetes Node Roles + +Registered RKE Kubernetes clusters must have all three node roles - etcd, controlplane and worker. A cluster with only controlplane components cannot be registered in Rancher. + +For more information on RKE node roles, see the [best practices.]({{}}/rancher/v2.6/en/cluster-provisioning/production/#cluster-architecture) + +### Permissions + If your existing Kubernetes cluster already has a `cluster-admin` role defined, you must have this `cluster-admin` privilege to register the cluster in Rancher. In order to apply the privilege, you need to run: @@ -32,11 +41,14 @@ By default, GKE users are not given this privilege, so you will need to run the If you are registering a K3s cluster, make sure the `cluster.yml` is readable. It is protected by default. For details, refer to [Configuring a K3s cluster to enable importation to Rancher.](#configuring-a-k3s-cluster-to-enable-registration-in-rancher) +### EKS Clusters + +EKS clusters must have at least one managed node group to be imported into Rancher or provisioned from Rancher successfully. + # Registering a Cluster 1. Click **☰ > Cluster Management**. 1. On the **Clusters** page, **Import Existing**. -1. Enter a **Cluster Name**. 1. Choose the type of cluster. 1. Use **Member Roles** to configure user authorization for the cluster. Click **Add Member** to add users that can access the cluster. Use the **Role** drop-down to set permissions for each user. 1. If you are importing a generic Kubernetes cluster in Rancher, perform the following steps for setup:
@@ -48,7 +60,6 @@ If you are registering a K3s cluster, make sure the `cluster.yml` is readable. I 1. If you are using self-signed certificates, you will receive the message `certificate signed by unknown authority`. To work around this validation, copy the command starting with `curl` displayed in Rancher to your clipboard. Then run the command on a node where kubeconfig is configured to point to the cluster you want to import. 1. When you finish running the command(s) on your node, click **Done**. - **Result:** - Your cluster is registered and assigned a state of **Pending**. Rancher is deploying resources to manage your cluster. @@ -75,6 +86,34 @@ The option can also be specified using the environment variable `K3S_KUBECONFIG_ $ curl -sfL https://get.k3s.io | K3S_KUBECONFIG_MODE="644" sh -s - ``` +### Configuring an Imported EKS Cluster with Terraform + +You should define **only** the minimum fields that Rancher requires when importing an EKS cluster with Terraform. This is important as Rancher will overwrite what was in the EKS cluster with any config that the user has provided. + +>**Warning:** Even a small difference between the current EKS cluster and a user-provided config could have unexpected results. + +The minimum config fields required by Rancher to import EKS clusters with Terraform using `eks_config_v2` are as follows: + +- cloud_credential_id +- name +- region +- imported (this field should always be set to `true` for imported clusters) + +Example YAML configuration for imported EKS clusters: + +``` +resource "rancher2_cluster" "my-eks-to-import" { + name = "my-eks-to-import" + description = "Terraform EKS Cluster" + eks_config_v2 { + cloud_credential_id = rancher2_cloud_credential.aws.id + name = var.aws_eks_name + region = var.aws_region + imported = true + } +} +``` + # Management Capabilities for Registered Clusters The control that Rancher has to manage a registered cluster depends on the type of cluster. @@ -129,7 +168,7 @@ Also in the K3s documentation, nodes with the worker role are called agent nodes # Debug Logging and Troubleshooting for Registered K3s Clusters -Nodes are upgraded by the system upgrade controller running in the downstream cluster. Based on the cluster configuration, Rancher deploys two [plans](https://github.com/rancher/system-upgrade-controller#example-upgrade-plan) to upgrade K3s nodes: one for controlplane nodes and one for workers. The system upgrade controller follows the plans and upgrades the nodes. +Nodes are upgraded by the system upgrade controller running in the downstream cluster. Based on the cluster configuration, Rancher deploys two [plans](https://github.com/rancher/system-upgrade-controller#example-upgrade-plan) to upgrade K3s nodes: one for controlplane nodes and one for workers. The system upgrade controller follows the plans and upgrades the nodes. To enable debug logging on the system upgrade controller deployment, edit the [configmap](https://github.com/rancher/system-upgrade-controller/blob/50a4c8975543d75f1d76a8290001d87dc298bdb4/manifests/system-upgrade-controller.yaml#L32) to set the debug environment variable to true. Then restart the `system-upgrade-controller` pod. @@ -149,8 +188,55 @@ If the cluster becomes stuck in upgrading, restart the `system-upgrade-controlle To prevent issues when upgrading, the [Kubernetes upgrade best practices](https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/) should be followed. +# Authorized Cluster Endpoint Support for RKE2 and K3s Clusters +_Available as of v2.6.3_ +Authorized Cluster Endpoint (ACE) support has been added for registered RKE2 and K3s clusters. This support includes manual steps you will perform on the downstream cluster to enable the ACE. For additional information on the authorized cluster endpoint, click [here]({{}}/rancher/v2.6/en/cluster-admin/cluster-access/ace/). + +> **Note:** +> +> - These steps only need to be performed on the control plane nodes of the downstream cluster. You must configure each control plane node individually. +> +> - The following steps will work on both RKE2 and K3s clusters registered in v2.6.x as well as those registered (or imported) from a previous version of Rancher with an upgrade to v2.6.x. +> +> - These steps will alter the configuration of the downstream RKE2 and K3s clusters and deploy the `kube-api-authn-webhook`. If a future implementation of the ACE requires an update to the `kube-api-authn-webhook`, then this would also have to be done manually. For more information on this webhook, click [here]({{}}/rancher/v2.6/en/cluster-admin/cluster-access/ace/#about-the-kube-api-auth-authentication-webhook). + +###### **Manual steps to be taken on the control plane of each downstream cluster to enable ACE:** + +1. Create a file at `/var/lib/rancher/{rke2,k3s}/kube-api-authn-webhook.yaml` with the following contents: + + apiVersion: v1 + kind: Config + clusters: + - name: Default + cluster: + insecure-skip-tls-verify: true + server: http://127.0.0.1:6440/v1/authenticate + users: + - name: Default + user: + insecure-skip-tls-verify: true + current-context: webhook + contexts: + - name: webhook + context: + user: Default + cluster: Default + +1. Add the following to the config file (or create one if it doesn’t exist); note that the default location is `/etc/rancher/{rke2,k3s}/config.yaml`: + + kube-apiserver-arg: + - authentication-token-webhook-config-file=/var/lib/rancher/{rke2,k3s}/kube-api-authn-webhook.yaml + +1. Run the following commands: + + sudo systemctl stop {rke2,k3s}-server + sudo systemctl start {rke2,k3s}-server + +1. Finally, you **must** go back to the Rancher UI and edit the imported cluster there to complete the ACE enablement. Click on **⋮ > Edit Config**, then click the **Networking** tab under Cluster Configuration. Finally, click the **Enabled** button for **Authorized Endpoint**. Once the ACE is enabled, you then have the option of entering a fully qualified domain name (FQDN) and certificate information. + + >**Note:** The FQDN field is optional, and if one is entered, it should point to the downstream cluster. Certificate information is only needed if there is a load balancer in front of the downstream cluster that is using an untrusted certificate. If you have a valid certificate, then nothing needs to be added to the CA Certificates field. # Annotating Registered Clusters @@ -200,4 +286,3 @@ To annotate a registered cluster, 1. Click **Save**. **Result:** The annotation does not give the capabilities to the cluster, but it does indicate to Rancher that the cluster has those capabilities. - diff --git a/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/_index.md b/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/_index.md index 66fea5d3088..21f9d9de5d5 100644 --- a/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/_index.md +++ b/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/_index.md @@ -3,7 +3,7 @@ title: Launching Kubernetes with Rancher weight: 4 --- -You can have Rancher launch a Kubernetes cluster using any nodes you want. When Rancher deploys Kubernetes onto these nodes, it uses [Rancher Kubernetes Engine]({{}}/rke/latest/en/) (RKE), which is Rancher's own lightweight Kubernetes installer. It can launch Kubernetes on any computers, including: +You can have Rancher launch a Kubernetes cluster using any nodes you want. When Rancher deploys Kubernetes onto these nodes, you can choose between [Rancher Kubernetes Engine]({{}}/rke/latest/en/) (RKE) or [RKE2](https://docs.rke2.io) distributions. Rancher can launch Kubernetes on any computers, including: - Bare-metal servers - On-premise virtual machines @@ -11,29 +11,9 @@ You can have Rancher launch a Kubernetes cluster using any nodes you want. When Rancher can install Kubernetes on existing nodes, or it can dynamically provision nodes in an infrastructure provider and install Kubernetes on them. -RKE clusters include clusters that Rancher launched on Windows nodes or other existing custom nodes, as well as clusters that Rancher launched with new nodes on Azure, Digital Ocean, EC2, or vSphere. +Rancher can also create pools of nodes. One benefit of installing Kubernetes on node pools hosted by an infrastructure provider is that if a node loses connectivity with the cluster, Rancher can automatically create another node to join the cluster to ensure that the count of the node pool is as expected. -### Changes in Rancher v2.6 - -_Tech Preview_ - -Rancher v2.6 introduces provisioning for [RKE2](https://docs.rke2.io/) clusters directly from the Rancher UI. RKE2, also known as RKE Government, is a fully conformant Kubernetes distribution that focuses on security and compliance within the U.S. Federal Government sector. - -RKE2 provisioning is built on top of a new provisioning framework that leverages the upstream [Cluster API](https://github.com/kubernetes-sigs/cluster-api) project. With this new provisioning framework, you can: - -- Provision RKE2 clusters on Digital Ocean, AWS EC2, Azure, and vSphere -- Fully configure RKE2 clusters within Rancher -- Choose CNI options Calico, Cilium, and Multus in addition to Canal -- Install custom RKE2 clusters on pre-provisioned VMs or bare-metal nodes - -The RKE2 provisioning tech preview also includes installing RKE2 on Windows clusters. Windows features for RKE2 include: - -- Windows Containers with RKE2 powered by containerd -- Added provisioning of Windows RKE2 custom clusters directly from the Rancher UI -- Calico CNI for Windows RKE2 custom clusters. -- SAC releases of Windows Server (2004 and 20H2) are included in the technical preview. - -Windows Support for RKE2 Custom Clusters requires choosing Calico as the CNI. +## RKE ### Requirements @@ -54,3 +34,48 @@ In this scenario, you want to install Kubernetes on bare-metal servers, on-prem If you want to reuse a node from a previous custom cluster, [clean the node]({{}}/rancher/v2.6/en/cluster-admin/cleaning-cluster-nodes/) before using it in a cluster again. If you reuse a node that hasn't been cleaned, cluster provisioning may fail. For more information, refer to the section on [custom nodes.]({{}}/rancher/v2.6/en/cluster-provisioning/rke-clusters/custom-nodes/) + +# Programmatically Creating RKE Clusters + +The most common way to programmatically deploy RKE clusters through Rancher is by using the Rancher2 Terraform provider. The documentation for creating clusters with Terraform is [here.](https://registry.terraform.io/providers/rancher/rancher2/latest/docs/resources/cluster) + +## RKE2 + +Rancher v2.6 introduced provisioning for [RKE2](https://docs.rke2.io/) clusters directly from the Rancher UI. RKE2, also known as RKE Government, is a fully conformant Kubernetes distribution that focuses on security and compliance within the U.S. Federal Government sector. In Rancher v.2.6.4 and earlier, RKE2 provisioning was in tech preview. + +Note that in Rancher v2.6.5, RKE2 provisioning became GA. + +### Requirements + +If you use RKE2 to set up a cluster, your nodes must meet the [requirements](https://docs.rke2.io/install/requirements/) for nodes in downstream user clusters. + +### Launching Kubernetes on New Nodes in an Infrastructure Provider + +RKE2 provisioning is built on top of a new provisioning framework that leverages the upstream [Cluster API](https://github.com/kubernetes-sigs/cluster-api) project. With this new provisioning framework, you can: + +- Provision RKE2 clusters onto any provider for which Rancher has a node driver +- Fully configure RKE2 clusters within Rancher +- Choose CNI options Calico, Cilium, and Multus in addition to Canal + +RKE2 provisioning also includes installing RKE2 on clusters with Windows nodes. + +Windows features for RKE2 include: + +- Windows supports the vSphere node driver +- Calico CNI for Windows RKE2 custom clusters +- Project Network Isolation (PNI) for Calico +- Windows Containers with RKE2 powered by containerd +- Provisioning of Windows RKE2 clusters through Terraform +- Provisioning of Windows RKE2 custom clusters directly from the Rancher UI + +Windows Support for RKE2 Custom Clusters requires choosing Calico as the CNI. + +### Launching Kubernetes on Existing Custom Nodes + +RKE2 provisioning also allows you to install custom clusters on pre-provisioned VMs or bare-metal nodes. + +If you want to reuse a node from a previous custom cluster, clean the node before using it in a cluster again. If you reuse a node that hasn't been cleaned, cluster provisioning may fail. + +# Programmatically Creating RKE2 Clusters + +The most common way to programmatically deploy RKE2 clusters through Rancher is by using the Rancher2 Terraform provider. The documentation for creating clusters with Terraform is [here.](https://registry.terraform.io/providers/rancher/rancher2/latest/docs/resources/cluster_v2) \ No newline at end of file diff --git a/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/behavior-differences-between-rke1-and-rke2/_index.md b/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/behavior-differences-between-rke1-and-rke2/_index.md new file mode 100644 index 00000000000..99a3f18f370 --- /dev/null +++ b/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/behavior-differences-between-rke1-and-rke2/_index.md @@ -0,0 +1,34 @@ +--- +title: Behavior Differences Between RKE1 and RKE2 +weight: 2450 +--- + +RKE2, also known as RKE Government, is a Kubernetes distribution that focuses on security and compliance for U.S. Federal Government entities. It is considered the next iteration of the Rancher Kubernetes Engine, now known as RKE1. + +RKE1 and RKE2 have several slight behavioral differences to note, and this page will highlight some of these at a high level. + +### Control Plane Components + +RKE1 uses Docker for deploying and managing control plane components, and it also uses Docker as the container runtime for Kubernetes. By contrast, RKE2 launches control plane components as static pods that are managed by the kubelet. RKE2's container runtime is containerd, which allows things such as container registry mirroring (RKE1 with Docker does not). + +### Cluster API + +RKE2/K3s provisioning is built on top of the Cluster API (CAPI) upstream framework which often makes RKE2-provisioned clusters behave differently than RKE1-provisioned clusters. + +When you make changes to your cluster configuration in RKE2, this **may** result in nodes reprovisioning. This is controlled by CAPI controllers and not by Rancher itself. Note that for etcd nodes, the same behavior does not apply. + +The following are some specific example configuration changes that may cause the described behavior: + +- When editing the cluster and enabling `drain before delete`, the existing control plane nodes and worker are deleted and new nodes are created. + +- When nodes are being provisioned and a scale down operation is performed, rather than scaling down the desired number of nodes, it is possible that the currently provisioning nodes get deleted and new nodes are provisioned to reach the desired node count. Please note that this is a bug in Cluster API, and it will be fixed in an upcoming release. Once fixed, Rancher will update the documentation. + +Users who are used to RKE1 provisioning should take note of this new RKE2 behavior which may be unexpected. + +### Terminology + +You will notice that some terms have changed or gone away going from RKE1 to RKE2. For example, in RKE1 provisioning, you use **node templates**; in RKE2 provisioning, you can configure your cluster node pools when creating or editing the cluster. Another example is that the term **node pool** in RKE1 is now known as **machine pool** in RKE2. + + + + diff --git a/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/cloud-providers/_index.md b/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/cloud-providers/_index.md index 0d82a9a6e0b..bcb6f1d2089 100644 --- a/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/cloud-providers/_index.md +++ b/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/cloud-providers/_index.md @@ -2,7 +2,7 @@ title: Setting up Cloud Providers weight: 2300 --- -A _cloud provider_ is a module in Kubernetes that provides an interface for managing nodes, load balancers, and networking routes. For more information, refer to the [official Kubernetes documentation on cloud providers.](https://kubernetes.io/docs/concepts/cluster-administration/cloud-providers/) +A _cloud provider_ is a module in Kubernetes that provides an interface for managing nodes, load balancers, and networking routes. When a cloud provider is set up in Rancher, the Rancher server can automatically provision new nodes, load balancers or persistent storage devices when launching Kubernetes definitions, if the cloud provider you're using supports such automation. @@ -35,9 +35,9 @@ For details on enabling the vSphere cloud provider, refer to [this page.](./vsph ### Setting up a Custom Cloud Provider -The `Custom` cloud provider is available if you want to configure any [Kubernetes cloud provider](https://kubernetes.io/docs/concepts/cluster-administration/cloud-providers/). +The `Custom` cloud provider is available if you want to configure any Kubernetes cloud provider. -For the custom cloud provider option, you can refer to the [RKE docs]({{}}/rke/latest/en/config-options/cloud-providers/) on how to edit the yaml file for your specific cloud provider. There are specific cloud providers that have more detailed configuration : +For the custom cloud provider option, you can refer to the [RKE docs]({{}}/rke/latest/en/config-options/cloud-providers/) on how to edit the yaml file for your specific cloud provider. There are specific cloud providers that have more detailed configuration: * [vSphere]({{}}/rke/latest/en/config-options/cloud-providers/vsphere/) * [OpenStack]({{}}/rke/latest/en/config-options/cloud-providers/openstack/) diff --git a/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/cloud-providers/vsphere/out-of-tree/_index.md b/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/cloud-providers/vsphere/out-of-tree/_index.md index b9ba43c3c29..d9b95fc9b6f 100644 --- a/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/cloud-providers/vsphere/out-of-tree/_index.md +++ b/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/cloud-providers/vsphere/out-of-tree/_index.md @@ -10,7 +10,10 @@ This page covers how to install the Cloud Provider Interface (CPI) and Cloud Sto # Prerequisites -The vSphere version must be 7.0u1 or higher. +The vSphere versions supported: + +* 6.7u3 +* 7.0u1 or higher. The Kubernetes version must be 1.19 or higher. diff --git a/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/_index.md b/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/_index.md index 3c89deb26c9..1de5cadd416 100644 --- a/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/_index.md +++ b/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/_index.md @@ -3,58 +3,55 @@ title: Launching Kubernetes on New Nodes in an Infrastructure Provider weight: 2205 --- +This section covers the following topics: + +- [RKE Clusters](#rke-clusters) + - [Node templates](#node-templates) + - [Node labels](#node-labels) + - [Node taints](#node-taints) + - [Administrator control of node templates](#administrator-control-of-node-templates) + - [Node pools](#node-pools) + - [Node pool taints](#node-pool-taints) + - [About node auto-replace](#about-node-auto-replace) + - [Enabling node auto-replace](#enabling-node-auto-replace) + - [Disabling node auto-replace](#disabling-node-auto-replace) + - [Cloud credentials](#cloud-credentials) + - [Node drivers](#node-drivers) +- [RKE2 Clusters](#rke2-clusters) + - [Node roles in RKE2](#node-roles-in-rke2) + +When you create an RKE or RKE2 cluster using a node template in Rancher, each resulting node pool is shown in a new **Machine Pools** tab. You can see the machine pools by doing the following: + +1. Click **☰ > Cluster Management**. +1. Click the name of the RKE or RKE2 cluster. + +## RKE Clusters + Using Rancher, you can create pools of nodes based on a [node template]({{}}/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/#node-templates). This node template defines the parameters you want to use to launch nodes in your infrastructure providers or cloud providers. One benefit of installing Kubernetes on node pools hosted by an infrastructure provider is that if a node loses connectivity with the cluster, Rancher can automatically create another node to join the cluster to ensure that the count of the node pool is as expected. The available cloud providers to create a node template are decided based on active [node drivers]({{}}/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/#node-drivers). -This section covers the following topics: - -- [Changes in Rancher v2.6](#changes-in-rancher-v2-6) -- [Node templates](#node-templates) - - [Node labels](#node-labels) - - [Node taints](#node-taints) - - [Administrator control of node templates](#administrator-control-of-node-templates) -- [Node pools](#node-pools) - - [Node pool taints](#node-pool-taints) - - [About node auto-replace](#about-node-auto-replace) - - [Enabling node auto-replace](#enabling-node-auto-replace) - - [Disabling node auto-replace](#disabling-node-auto-replace) -- [Cloud credentials](#cloud-credentials) -- [Node drivers](#node-drivers) -- [Node roles in RKE2](#node-roles-in-rke2) - -# Changes in Rancher v2.6 - -_Tech Preview_ - -Rancher v2.6 introduces provisioning for [RKE2](https://docs.rke2.io/) clusters directly from the Rancher UI. RKE2, also known as RKE Government, is a fully conformant Kubernetes distribution that focuses on security and compliance within the U.S. Federal Government sector. - -When you create an RKE or RKE2 cluster using a node template in Rancher, each resulting node pool is shown in a new **Machine Pools** tab. You can see the machine pools by doing the following: - -1. Click **☰ > Cluster Management**. -1. Click the name of the RKE or RKE2 cluster. - -# Node Templates +### Node Templates A node template is the saved configuration for the parameters to use when provisioning nodes in a specific cloud provider. These nodes can be launched from the UI. Rancher uses [Docker Machine](https://docs.docker.com/machine/) to provision these nodes. The available cloud providers to create node templates are based on the active node drivers in Rancher. After you create a node template in Rancher, it's saved so that you can use this template again to create node pools. Node templates are bound to your login. After you add a template, you can remove them from your user profile. -### Node Labels +#### Node Labels You can add [labels](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/) on each node template, so that any nodes created from the node template will automatically have these labels on them. Invalid labels can prevent upgrades or can prevent Rancher from starting. For details on label syntax requirements, see the [Kubernetes documentation.](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#syntax-and-character-set) -### Node Taints +#### Node Taints You can add [taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) on each node template, so that any nodes created from the node template will automatically have these taints on them. Since taints can be added at a node template and node pool, if there is no conflict with the same key and effect of the taints, all taints will be added to the nodes. If there are taints with the same key and different effect, the taints from the node pool will override the taints from the node template. -### Administrator Control of Node Templates +#### Administrator Control of Node Templates Administrators can control all node templates. Admins can now maintain all the node templates within Rancher. When a node template owner is no longer using Rancher, the node templates created by them can be managed by administrators so the cluster can continue to be updated and maintained. @@ -65,7 +62,7 @@ To access all node templates, an administrator will need to do the following: **Result:** All node templates are listed. The templates can be edited or cloned by clicking the **⋮**. -# Node Pools +### Node Pools Using Rancher, you can create pools of nodes based on a [node template](#node-templates). @@ -75,15 +72,15 @@ The benefit of using a node pool is that if a node is destroyed or deleted, you Each node pool must have one or more nodes roles assigned. -Each node role (i.e. etcd, control plane, and worker) should be assigned to a distinct node pool. Although it is possible to assign multiple node roles to a node pool, this should not be done for production clusters. +Each node role (i.e. etcd, controlplane, and worker) should be assigned to a distinct node pool. Although it is possible to assign multiple node roles to a node pool, this should not be done for production clusters. The recommended setup is to have: - a node pool with the etcd node role and a count of three -- a node pool with the control plane node role and a count of at least two +- a node pool with the controlplane node role and a count of at least two - a node pool with the worker node role and a count of at least two -### Node Pool Taints +#### Node Pool Taints If you haven't defined [taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) on your node template, you can add taints for each node pool. The benefit of adding taints at a node pool is beneficial over adding it at a node template is that you can swap out the node templates without worrying if the taint is on the node template. @@ -91,7 +88,7 @@ For each taint, they will automatically be added to any created node in the node When there are taints on the node pool and node template, if there is no conflict with the same key and effect of the taints, all taints will be added to the nodes. If there are taints with the same key and different effect, the taints from the node pool will override the taints from the node template. -### About Node Auto-replace +#### About Node Auto-replace If a node is in a node pool, Rancher can automatically replace unreachable nodes. Rancher will use the existing node template for the given node pool to recreate the node if it becomes inactive for a specified number of minutes. @@ -99,7 +96,7 @@ If a node is in a node pool, Rancher can automatically replace unreachable nodes Node auto-replace works on top of the Kubernetes node controller. The node controller periodically checks the status of all the nodes (configurable via the `--node-monitor-period` flag of the `kube-controller`). When a node is unreachable, the node controller will taint that node. When this occurs, Rancher will begin its deletion countdown. You can configure the amount of time Rancher waits to delete the node. If the taint is not removed before the deletion countdown ends, Rancher will proceed to delete the node object. Rancher will then provision a node in accordance with the set quantity of the node pool. -### Enabling Node Auto-replace +#### Enabling Node Auto-replace When you create the node pool, you can specify the amount of time in minutes that Rancher will wait to replace an unresponsive node. @@ -109,7 +106,7 @@ When you create the node pool, you can specify the amount of time in minutes tha **Result:** Node auto-replace is enabled for the node pool. -### Disabling Node Auto-replace +#### Disabling Node Auto-replace You can disable node auto-replace from the Rancher UI with the following steps: @@ -120,7 +117,7 @@ You can disable node auto-replace from the Rancher UI with the following steps: **Result:** Node auto-replace is disabled for the node pool. -# Cloud Credentials +### Cloud Credentials Node templates can use cloud credentials to store credentials for launching nodes in your cloud provider, which has some benefits: @@ -132,20 +129,26 @@ Node templates can use cloud credentials to store credentials for launching node After cloud credentials are created, the user can start [managing the cloud credentials that they created]({{}}/rancher/v2.6/en/user-settings/cloud-credentials/). -# Node Drivers +### Node Drivers If you don't find the node driver that you want to use, you can see if it is available in Rancher's built-in [node drivers and activate it]({{}}/rancher/v2.6/en/admin-settings/drivers/node-drivers/#activating-deactivating-node-drivers), or you can [add your own custom node driver]({{}}/rancher/v2.6/en/admin-settings/drivers/node-drivers/#adding-custom-node-drivers). -# Node Roles in RKE2 +## RKE2 Clusters -The RKE2 CLI exposes two roles, `server` and `agent`, which represent the Kubernetes node-roles `etcd` + `control-plane` and `worker` respectively. With RKE2 integration in Rancher v2.6, RKE2 node pools can represent more fine-grained role assignments such that `etcd` and `control-plane` roles can be represented. +Rancher v2.6 introduces provisioning for [RKE2](https://docs.rke2.io/) clusters directly from the Rancher UI. RKE2, also known as RKE Government, is a fully conformant Kubernetes distribution that focuses on security and compliance within the U.S. Federal Government sector. + +> **Note:** For RKE2 cluster templates, please refer to [this page]({{}}/rancher/v2.6/en/admin-settings/cluster-templates/#rke2-cluster-template) for additional information. + +### Node Roles + +The RKE2 CLI exposes two roles, `server` and `agent`, which represent the Kubernetes node-roles `etcd` + `controlplane` and `worker` respectively. With RKE2 integration in Rancher v2.6, RKE2 node pools can represent more fine-grained role assignments such that `etcd` and `controlplane` roles can be represented. The same functionality of using `etcd`, `controlplane` and `worker` nodes is possible in the RKE2 CLI by using flags and node tainting to control where workloads and the Kubernetes master were scheduled. The reason those roles were not implemented as first-class roles in the RKE2 CLI is that RKE2 is conceptualized as a set of raw building blocks that are best leveraged through an orchestration system such as Rancher. +The implementation of the three node roles in Rancher means that Rancher managed RKE2 clusters are able to easily leverage all of the same architectural best practices that are recommended for RKE clusters. + In our [recommended cluster architecture]({{}}/rancher/v2.6/en/cluster-provisioning/production/recommended-architecture/), we outline how many nodes of each role clusters should have: - At least three nodes with the role etcd to survive losing one node - At least two nodes with the role controlplane for master component high availability -- At least two nodes with the role worker for workload rescheduling upon node failure - -The implementation of the three node roles in Rancher means that Rancher managed RKE2 clusters are able to easily leverage all of the same architectural best practices that are recommended for RKE clusters. \ No newline at end of file +- At least two nodes with the role worker for workload rescheduling upon node failure \ No newline at end of file diff --git a/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/azure/_index.md b/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/azure/_index.md index c918601b214..8e7deb9bf62 100644 --- a/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/azure/_index.md +++ b/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/azure/_index.md @@ -6,7 +6,7 @@ weight: 2220 In this section, you'll learn how to install an [RKE]({{}}/rke/latest/en/) Kubernetes cluster in Azure through Rancher. -First, you will set up your Azure cloud credentials in Rancher. Then you will use your cloud credentials to create a node template, which Rancher will use to provision new nodes in Azure. +First, you will set up your Azure cloud credentials in Rancher. Then you will use your cloud credentials to create a node template, which Rancher will use to provision new nodes in Azure. Then you will create an Azure cluster in Rancher, and when configuring the new cluster, you will define node pools for it. Each node pool will have a Kubernetes role of etcd, controlplane, or worker. Rancher will install Kubernetes on the new nodes, and it will set up each node with the Kubernetes role defined by the node pool. @@ -25,29 +25,31 @@ For more information on configuring Azure node templates, refer to the [Azure no - [Creating an Azure Cluster](#creating-an-azure-cluster) # Preparation in Azure - + Before creating a node template in Rancher using a cloud infrastructure such as Azure, we must configure Rancher to allow the manipulation of resources in an Azure subscription. To do this, we will first create a new Azure **service principal (SP)** in Azure **Active Directory (AD)**, which, in Azure, is an application user who has permission to manage Azure resources. The following is a template `az cli` script that you have to run for creating an service principal, where you have to enter your SP name, role, and scope: - + ``` az ad sp create-for-rbac \ --name="" \ --role="Contributor" \ --scopes="/subscriptions/" ``` - + The creation of this service principal returns three pieces of identification information, *The application ID, also called the client ID*, and *The client secret*. This information will be used when you create a node template for Azure. # Creating an Azure Cluster +{{% tabs %}} +{{% tab "RKE" %}} 1. [Create your cloud credentials](#1-create-your-cloud-credentials) 2. [Create a node template with your cloud credentials](#2-create-a-node-template-with-your-cloud-credentials) 3. [Create a cluster with node pools using the node template](#3-create-a-cluster-with-node-pools-using-the-node-template) - + ### 1. Create your cloud credentials 1. Click **☰ > Cluster Management**. @@ -57,7 +59,7 @@ The creation of this service principal returns three pieces of identification in 1. Enter your Azure credentials. 1. Click **Create**. -**Result:** You have created the cloud credentials that will be used to provision nodes in your cluster. You can reuse these credentials for other node templates, or in other clusters. +**Result:** You have created the cloud credentials that will be used to provision nodes in your cluster. You can reuse these credentials for other node templates, or in other clusters. ### 2. Create a node template with your cloud credentials @@ -82,17 +84,53 @@ Use Rancher to create a Kubernetes cluster in Azure. 1. Use **Member Roles** to configure user authorization for the cluster. Click **Add Member** to add users that can access the cluster. Use the **Role** drop-down to set permissions for each user. 1. Click **Create**. -**Result:** +{{% /tab %}} +{{% tab "RKE2" %}} + +### 1. Create your cloud credentials + +If you already have a set of cloud credentials to use, skip this section. + +1. Click **☰ > Cluster Management**. +1. Click **Cloud Credentials**. +1. Click **Create**. +1. Click **Azure**. +1. Enter your Azure credentials. +1. Click **Create**. + +**Result:** You have created the cloud credentials that will be used to provision nodes in your cluster. You can reuse these credentials for other node templates, or in other clusters. + +### 2. Create your cluster + +Use Rancher to create a Kubernetes cluster in Azure. + +1. Click **☰ > Cluster Management**. +1. On the **Clusters** page, click **Create**. +1. Toggle the switch to **RKE2/K3s**. +1. Click **Azure**. +1. Select a **Cloud Credential**, if more than one exists. Otherwise, it's preselected. +1. Enter a **Cluster Name**. +1. Create a machine pool for each Kubernetes role. Refer to the [best practices]({{}}/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools#node-roles-in-rke2) for recommendations on role assignments and counts. + 1. For each machine pool, define the machine configuration. Refer to the [Azure machine configuration reference]({{}}/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/azure/azure-machine-config/) for information on configuration options. +1. Use the **Cluster Configuration** to choose the version of Kubernetes that will be installed, what network provider will be used and if you want to enable project network isolation. For help configuring the cluster, refer to the [RKE2 cluster configuration reference.]({{}}/rancher/v2.6/en/cluster-admin/editing-clusters/rke2-config-reference/) +1. Use **Member Roles** to configure user authorization for the cluster. Click **Add Member** to add users that can access the cluster. Use the **Role** drop-down to set permissions for each user. +1. Click **Create**. + +{{% /tab %}} +{{% /tabs %}} + +**Result:** Your cluster is created and assigned a state of **Provisioning**. Rancher is standing up your cluster. You can access your cluster after its state is updated to **Active**. -**Active** clusters are assigned two Projects: +**Active** clusters are assigned two Projects: - `Default`, containing the `default` namespace - `System`, containing the `cattle-system`, `ingress-nginx`, `kube-public`, and `kube-system` namespaces + ### Optional Next Steps After creating your cluster, you can access it through the Rancher UI. As a best practice, we recommend setting up these alternate ways of accessing your cluster: diff --git a/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/azure/azure-machine-config/_index.md b/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/azure/azure-machine-config/_index.md new file mode 100644 index 00000000000..4c5304eb1e2 --- /dev/null +++ b/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/azure/azure-machine-config/_index.md @@ -0,0 +1,121 @@ +--- +title: Azure Machine Configuration +weight: 2 +--- + +For more information about Azure, refer to the official [Azure documentation.](https://docs.microsoft.com/en-us/azure/?product=featured) + +### Environment + +Microsoft provides multiple [clouds](https://docs.microsoft.com/en-us/cli/azure/cloud?view=azure-cli-latest) for compliance with regional laws, which are available for your use: + +- AzurePublicCloud +- AzureGermanCloud +- AzureChinaCloud +- AzureUSGovernmentCloud + +### Location + +Configure the cluster and node [location](https://docs.microsoft.com/en-us/azure/virtual-machines/regions). + +### Resource Group + +A resource group is a container that holds related resources for an Azure solution. The resource group can include all the resources for the solution, or only those resources that you want to manage as a group. You decide how you want to allocate resources to resource groups based on what makes the most sense for your organization. Generally, add resources that share the same lifecycle to the same resource group so you can easily deploy, update, and delete them as a group. + +Use an existing resource group or enter a resource group name and one will be created for you. + +For information on managing resource groups, see the [Azure documentation.](https://docs.microsoft.com/en-us/azure/azure-resource-manager/management/manage-resource-groups-portal) + +### Availability Set (unmanaged) + +Name or ID of an existing [availability set](https://docs.microsoft.com/en-us/azure/virtual-machines/availability-set-overview) to add the VM to. + +### Image + +The name of the operating system image provided as an ARM resource identifier. Requires using managed disk. + +### VM Size + +Choose a size for each VM in the node pool. For details about each VM size, see [this page.](https://azure.microsoft.com/en-us/pricing/details/virtual-machines/linux/) + +## Advanced Options + +### Fault Domain Count + +Fault domains define the group of virtual machines that share a common power source and network switch. If the availability set has already been created, the fault domain count will be ignored. + +For more information on fault domains, see [refer here](https://docs.microsoft.com/en-us/azure/virtual-machines/availability-set-overview#how-do-availability-sets-work). + +### Update Domain Count + +Update domains indicate groups of virtual machines and underlying physical hardware that can be rebooted at the same time. If the availability set has already been created, the update domain count will be ignored. + +For more information on update domains, see [refer here](https://docs.microsoft.com/en-us/azure/virtual-machines/availability-set-overview#how-do-availability-sets-work). + +### Purchase Plan + +Some VM images in the Azure Marketplace require a plan. If applicable, select a purchase plan, formatted as `publisher:product:plan`, to use with your chosen image. + +### Subnet + +The name of the subnet when creating a new VNet or referencing an existing one. + +Default: `docker-machine` + +### Subnet Prefix + +The subnet IP address prefix to use when creating a new VNet in CIDR format. + +Default: `192.168.0.0/16` + +### Virtual Network + +The [virtual network](https://docs.microsoft.com/en-us/azure/virtual-network/virtual-networks-overview) to use or create if one does not exist. Formatted as `[resourcegroup:]name`. + +### Public IP Options + +#### No Public IP + +Do not allocate a public IP address. + +#### Static Public IP + +Allocate a static public IP address. + +### Use Private IP + +Use a static private IP address. + +### Private IP Address + +Configure a static private IP address to use. + +### Network Security Group + +The [network security group](https://docs.microsoft.com/en-us/azure/virtual-network/network-security-groups-overview) to use. All nodes using this template will use the supplied network security group. If no network security group is provided, a new one will be created for each node. + +### DNS Label + +A unique DNS name label for the public IP address. + +### Storage Type + +The [storage account](https://docs.microsoft.com/en-us/azure/storage/common/storage-account-overview) type to use with your VMs. Options include Standard LRS, Standard ZRS, Standard GRS, Standard RAGRS, and Premium LRS. + +### Use Managed Disks + +[Azure managed disks](https://docs.microsoft.com/en-us/azure/virtual-machines/managed-disks-overview) are block-level storage volumes that are managed by Azure and used with Azure Virtual Machines. Managed disks are designed for 99.999% availability. Managed disks achieve this by providing you with three replicas of your data, allowing for high durability. + +### Managed Disk Size + +The size in GB for the disk for each node. + +### SSH Username + +The username used to create an SSH connection to your nodes. + +### Open Port + +Opens inbound traffic on specified ports. When using an existing Network Security Group, Open Ports are ignored. + +Default: `2379/tcp, 2380/tcp, 6443/tcp, 9796/tcp, 10250/tcp, 10251/tcp, 10252/tcp, 10256/tcp` and `8472/udp, 4789/udp` \ No newline at end of file diff --git a/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/digital-ocean/_index.md b/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/digital-ocean/_index.md index 4c1903b9f63..7d3e103cd1e 100644 --- a/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/digital-ocean/_index.md +++ b/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/digital-ocean/_index.md @@ -5,10 +5,12 @@ weight: 2215 --- In this section, you'll learn how to use Rancher to install an [RKE](https://rancher.com/docs/rke/latest/en/) Kubernetes cluster in DigitalOcean. -First, you will set up your DigitalOcean cloud credentials in Rancher. Then you will use your cloud credentials to create a node template, which Rancher will use to provision new nodes in DigitalOcean. +First, you will set up your DigitalOcean cloud credentials in Rancher. Then you will use your cloud credentials to create a node template, which Rancher will use to provision new nodes in DigitalOcean. Then you will create a DigitalOcean cluster in Rancher, and when configuring the new cluster, you will define node pools for it. Each node pool will have a Kubernetes role of etcd, controlplane, or worker. Rancher will install RKE Kubernetes on the new nodes, and it will set up each node with the Kubernetes role defined by the node pool. +{{% tabs %}} +{{% tab "RKE" %}} 1. [Create your cloud credentials](#1-create-your-cloud-credentials) 2. [Create a node template with your cloud credentials](#2-create-a-node-template-with-your-cloud-credentials) @@ -23,7 +25,7 @@ Then you will create a DigitalOcean cluster in Rancher, and when configuring the 1. Enter your Digital Ocean credentials. 1. Click **Create**. -**Result:** You have created the cloud credentials that will be used to provision nodes in your cluster. You can reuse these credentials for other node templates, or in other clusters. +**Result:** You have created the cloud credentials that will be used to provision nodes in your cluster. You can reuse these credentials for other node templates, or in other clusters. ### 2. Create a node template with your cloud credentials @@ -46,13 +48,46 @@ Creating a [node template]({{}}/rancher/v2.6/en/cluster-provisioning/rk 1. Use **Member Roles** to configure user authorization for the cluster. Click **Add Member** to add users that can access the cluster. Use the **Role** drop-down to set permissions for each user. 1. Click **Create**. -**Result:** +{{% /tab %}} +{{% tab "RKE2" %}} + +### 1. Create your cloud credentials + +If you already have a set of cloud credentials to use, skip this section. + +1. Click **☰ > Cluster Management**. +1. Click **Cloud Credentials**. +1. Click **Create**. +1. Click **DigitalOcean**. +1. Enter your Digital Ocean credentials. +1. Click **Create**. + +### 2. Create your cluster + +Use Rancher to create a Kubernetes cluster in DigitalOcean. + +1. Click **☰ > Cluster Management**. +1. On the **Clusters** page, click **Create**. +1. Toggle the switch to **RKE2/K3s**. +1. Click **DigitalOcean**. +1. Select a **Cloud Credential**, if more than one exists. Otherwise, it's preselected. +1. Enter a **Cluster Name**. +1. Create a machine pool for each Kubernetes role. Refer to the [best practices]({{}}/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools#node-roles-in-rke2) for recommendations on role assignments and counts. + 1. For each machine pool, define the machine configuration. Refer to the [DigitalOcean machine configuration reference]({{}}/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/digital-ocean/do-machine-config/) for information on configuration options. +1. Use the **Cluster Configuration** to choose the version of Kubernetes that will be installed, what network provider will be used and if you want to enable project network isolation. For help configuring the cluster, refer to the [RKE2 cluster configuration reference.]({{}}/rancher/v2.6/en/cluster-admin/editing-clusters/rke2-config-reference/) +1. Use **Member Roles** to configure user authorization for the cluster. Click **Add Member** to add users that can access the cluster. Use the **Role** drop-down to set permissions for each user. +1. Click **Create**. + +{{% /tab %}} +{{% /tabs %}} + +**Result:** Your cluster is created and assigned a state of **Provisioning**. Rancher is standing up your cluster. You can access your cluster after its state is updated to **Active**. -**Active** clusters are assigned two Projects: +**Active** clusters are assigned two Projects: - `Default`, containing the `default` namespace - `System`, containing the `cattle-system`, `ingress-nginx`, `kube-public`, and `kube-system` namespaces @@ -61,4 +96,4 @@ You can access your cluster after its state is updated to **Active**. After creating your cluster, you can access it through the Rancher UI. As a best practice, we recommend setting up these alternate ways of accessing your cluster: - **Access your cluster with the kubectl CLI:** Follow [these steps]({{}}/rancher/v2.6/en/cluster-admin/cluster-access/kubectl/#accessing-clusters-with-kubectl-on-your-workstation) to access clusters with kubectl on your workstation. In this case, you will be authenticated through the Rancher server’s authentication proxy, then Rancher will connect you to the downstream cluster. This method lets you manage the cluster without the Rancher UI. -- **Access your cluster with the kubectl CLI, using the authorized cluster endpoint:** Follow [these steps]({{}}/rancher/v2.6/en/cluster-admin/cluster-access/kubectl/#authenticating-directly-with-a-downstream-cluster) to access your cluster with kubectl directly, without authenticating through Rancher. We recommend setting up this alternative method to access your cluster so that in case you can’t connect to Rancher, you can still access the cluster. \ No newline at end of file +- **Access your cluster with the kubectl CLI, using the authorized cluster endpoint:** Follow [these steps]({{}}/rancher/v2.6/en/cluster-admin/cluster-access/kubectl/#authenticating-directly-with-a-downstream-cluster) to access your cluster with kubectl directly, without authenticating through Rancher. We recommend setting up this alternative method to access your cluster so that in case you can’t connect to Rancher, you can still access the cluster. diff --git a/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/digital-ocean/do-machine-config/_index.md b/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/digital-ocean/do-machine-config/_index.md new file mode 100644 index 00000000000..0ae2f8d831a --- /dev/null +++ b/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/digital-ocean/do-machine-config/_index.md @@ -0,0 +1,34 @@ +--- +title: DigitalOcean Machine Configuration +weight: 2 +--- + +For more details about DigitalOcean, Droplets, refer to the [official documentation](https://docs.digitalocean.com/products/compute/). + +### Region + +Configure the [region](https://docs.digitalocean.com/products/app-platform/concepts/region/) where Droplets are created. + +### Size + +Configure the [size](https://docs.digitalocean.com/products/droplets/resources/choose-plan/) of Droplets. + +### OS Image + +Configure the operating system [image](https://docs.digitalocean.com/products/images/) Droplets are created from. + +### Monitoring + +Enable the DigitalOcean agent for additional [monitoring](https://docs.digitalocean.com/products/monitoring/). + +### IPv6 + +Enable IPv6 for Droplets. + +### Private Networking + +Enable private networking for Droplets. + +### Droplet Tags + +Apply a tag (label) to a Droplet. Tags may only contain letters, numbers, colons, dashes, and underscores. For example, `my_server`. diff --git a/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/ec2/_index.md b/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/ec2/_index.md index 4e50330f632..26d8d3c4576 100644 --- a/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/ec2/_index.md +++ b/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/ec2/_index.md @@ -6,7 +6,7 @@ weight: 2210 --- In this section, you'll learn how to use Rancher to install an [RKE](https://rancher.com/docs/rke/latest/en/) Kubernetes cluster in Amazon EC2. -First, you will set up your EC2 cloud credentials in Rancher. Then you will use your cloud credentials to create a node template, which Rancher will use to provision new nodes in EC2. +First, you will set up your EC2 cloud credentials in Rancher. Then you will use your cloud credentials to create a node template, which Rancher will use to provision new nodes in EC2. Then you will create an EC2 cluster in Rancher, and when configuring the new cluster, you will define node pools for it. Each node pool will have a Kubernetes role of etcd, controlplane, or worker. Rancher will install RKE Kubernetes on the new nodes, and it will set up each node with the Kubernetes role defined by the node pool. @@ -23,6 +23,9 @@ Then you will create an EC2 cluster in Rancher, and when configuring the new clu The steps to create a cluster differ based on your Rancher version. +{{% tabs %}} +{{% tab "RKE" %}} + 1. [Create your cloud credentials](#1-create-your-cloud-credentials) 2. [Create a node template with your cloud credentials and information from EC2](#2-create-a-node-template-with-your-cloud-credentials-and-information-from-ec2) 3. [Create a cluster with node pools using the node template](#3-create-a-cluster-with-node-pools-using-the-node-template) @@ -38,7 +41,7 @@ The steps to create a cluster differ based on your Rancher version. 1. Enter your AWS EC2 **Access Key** and **Secret Key**. 1. Click **Create**. -**Result:** You have created the cloud credentials that will be used to provision nodes in your cluster. You can reuse these credentials for other node templates, or in other clusters. +**Result:** You have created the cloud credentials that will be used to provision nodes in your cluster. You can reuse these credentials for other node templates, or in other clusters. ### 2. Create a node template with your cloud credentials and information from EC2 @@ -59,20 +62,55 @@ Add one or more node pools to your cluster. For more information about node pool 1. Click **☰ > Cluster Management**. 1. On the **Clusters** page, click **Create**. 1. Click **Amazon EC2**. -1. Create a node pool for each Kubernetes role. For each node pool, choose a node template that you created. For more information about node pools, including best practices for assigning Kubernetes roles to them, see [this section.]({{}}/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools) +1. Create a node pool for each Kubernetes role. For each node pool, choose a node template that you created. For more information about node pools, including best practices for assigning Kubernetes roles to them, see [this section.]({{}}/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools) 1. Click **Add Member** to add users that can access the cluster. Use the **Role** drop-down to set permissions for each user. 1. Use **Cluster Options** to choose the version of Kubernetes that will be installed, what network provider will be used and if you want to enable project network isolation. Refer to [Selecting Cloud Providers]({{}}/rancher/v2.6/en/cluster-provisioning/rke-clusters/cloud-providers/) to configure the Kubernetes Cloud Provider. For help configuring the cluster, refer to the [RKE cluster configuration reference.]({{}}/rancher/v2.6/en/cluster-provisioning/rke-clusters/options) >**Note:** If you want to use the [dual-stack](https://kubernetes.io/docs/concepts/services-networking/dual-stack/) feature, there are additional [requirements]({{}}/rke//latest/en/config-options/dual-stack#requirements) that must be taken into consideration. 1. Click **Create**. -**Result:** +{{% /tab %}} +{{% tab "RKE2" %}} + +### 1. Create your cloud credentials + +If you already have a set of cloud credentials to use, skip this section. + +1. Click **☰ > Cluster Management**. +1. Click **Cloud Credentials**. +1. Click **Create**. +1. Click **Amazon**. +1. Enter a name for the cloud credential. +1. In the **Default Region** field, select the AWS region where your cluster nodes will be located. +1. Enter your AWS EC2 **Access Key** and **Secret Key**. +1. Click **Create**. + +**Result:** You have created the cloud credentials that will be used to provision nodes in your cluster. You can reuse these credentials for other node templates, or in other clusters. + +### 2. Create your cluster + +1. Click **☰ > Cluster Management**. +1. On the **Clusters** page, click **Create**. +1. Toggle the switch to **RKE2/K3s**. +1. Click **Amazon EC2**. +1. Select a **Cloud Credential**, if more than one exists. Otherwise, it's preselected. +1. Enter a **Cluster Name**. +1. Create a machine pool for each Kubernetes role. Refer to the [best practices]({{}}/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools#node-roles-in-rke2) for recommendations on role assignments and counts. + 1. For each machine pool, define the machine configuration. Refer to [the EC2 machine configuration reference]({{}}/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/ec2/ec2-machine-config/) for information on configuration options. +1. Use the **Cluster Configuration** to choose the version of Kubernetes that will be installed, what network provider will be used and if you want to enable project network isolation. For help configuring the cluster, refer to the [RKE2 cluster configuration reference.]({{}}/rancher/v2.6/en/cluster-admin/editing-clusters/rke2-config-reference/) +1. Use **Member Roles** to configure user authorization for the cluster. Click **Add Member** to add users that can access the cluster. Use the **Role** drop-down to set permissions for each user. +1. Click **Create**. + +{{% /tab %}} +{{% /tabs %}} + +**Result:** Your cluster is created and assigned a state of **Provisioning**. Rancher is standing up your cluster. You can access your cluster after its state is updated to **Active**. -**Active** clusters are assigned two Projects: +**Active** clusters are assigned two Projects: - `Default`, containing the `default` namespace - `System`, containing the `cattle-system`, `ingress-nginx`, `kube-public`, and `kube-system` namespaces diff --git a/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/ec2/ec2-machine-config/_index.md b/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/ec2/ec2-machine-config/_index.md new file mode 100644 index 00000000000..d29a7567669 --- /dev/null +++ b/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/ec2/ec2-machine-config/_index.md @@ -0,0 +1,79 @@ +--- +title: EC2 Machine Configuration Reference +weight: 2 +--- + +For more details about EC2 nodes, refer to the official documentation for the [EC2 Management Console](https://aws.amazon.com/ec2). + +### Region + +The geographical [region](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html) in which to build your cluster. + +### Zone + +The [zone](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-availability-zones), an isolated location within a region to build your cluster + +### Instance Type + +The [instance type](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html), which determines the hardware characteristics, used to provision your cluster. + +### Root Disk Size + +Configure the size (in GB) for your [root device](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/RootDeviceStorage.html). + +### VPC/Subnet + +The [VPC](https://docs.aws.amazon.com/vpc/latest/userguide/configure-your-vpc.html) or specific [subnet](https://docs.aws.amazon.com/vpc/latest/userguide/configure-subnets.html), an IP range in your VPC, to add your resources to. + +### IAM Instance Profile Name + +The name of the [instance profile] used to pass an IAM role to an EC2 instance. + +## Advanced Options + +### AMI ID + +The [Amazon Machine Image](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AMIs.html) used for the nodes in your cluster. + +### SSH Username for AMI + +The username for connecting to your launched instances. Refer to [here](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/connection-prereqs.html) for the default usernames to selected AMIs. For AMIs not listed, check with the AMI provider. + +### Security Group + +Choose the default security group or configure a security group. + +Please refer to [Amazon EC2 security group when using Node Driver]({{}}/rancher/v2.6/en/installation/requirements/ports/#rancher-aws-ec2-security-group) to see what rules are created in the `rancher-nodes` Security Group. + +### EBS Root Volume Type + +The [EBS volume type](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-volume-types.html) to use for the root device. + +### Encrypt EBS Volume + +Enable [Amazon EBS Encryption](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html). + +### Request Spot Instance + +Enable option to [request spot instances](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-requests.html) and specify the maximum instance price per hour you're willing to pay. + +### Use only private address + +Enable option on use only [private addresses](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-instance-addressing.html). + +### EBS-Optimized Instance + +Use an [EBS-optimized instance](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-optimized.html). + +### Allow access to EC2 metadata + +Enable access to [EC2 metadata](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html). + +### Use tokens for metadata + +Use [Instance Metadata Service Version 2 (IMDSv2)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html), a token-based method to access metadata. + +### Add Tag + +Add metadata using [tags](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html) to categorize resources. + diff --git a/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/ec2/ec2-node-template-config/_index.md b/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/ec2/ec2-node-template-config/_index.md index 6e3a1b0dc8c..4da61dccaf7 100644 --- a/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/ec2/ec2-node-template-config/_index.md +++ b/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/ec2/ec2-node-template-config/_index.md @@ -34,6 +34,11 @@ Choose the default security group or configure a security group. Please refer to [Amazon EC2 security group when using Node Driver]({{}}/rancher/v2.6/en/installation/requirements/ports/#rancher-aws-ec2-security-group) to see what rules are created in the `rancher-nodes` Security Group. +--- +**_New in v2.6.4_** + +If you provide your own security group for an EC2 instance, please note that Rancher will not modify it. As such, you will be responsible for ensuring that your security group is set to allow the [necessary ports for Rancher to provision the instance]({{}}/rancher/v2.6/en/installation/requirements/ports/#ports-for-rancher-server-nodes-on-rke). For more information on controlling inbound and outbound traffic to EC2 instances with security groups, refer [here](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html#WorkingWithSecurityGroups). + ### Instance Options Configure the instances that will be created. Make sure you configure the correct **SSH User** for the configured AMI. It is possible that a selected region does not support the default instance type. In this scenario you must select an instance type that does exist, otherwise an error will occur stating the requested configuration is not supported. diff --git a/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/nutanix/_index.md b/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/nutanix/_index.md new file mode 100644 index 00000000000..f009dc078f8 --- /dev/null +++ b/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/nutanix/_index.md @@ -0,0 +1,20 @@ +--- +title: Creating a Nutanix AOS Cluster +shortTitle: Nutanix +description: Use Rancher to create a Nutanix AOS (AHV) cluster. It may consist of groups of VMs with distinct properties which allow for fine-grained control over the sizing of nodes. +metaDescription: Use Rancher to create a Nutanix AOS (AHV) cluster. It may consist of groups of VMs with distinct properties which allow for fine-grained control over the sizing of nodes. +weight: 2225 +--- + +[Nutanix Acropolis Operating System](https://www.nutanix.com/products/acropolis) (Nutanix AOS) is an operating system for the Nutanix hyper-converged infrastructure platform. AOS comes with a built-in hypervisor called [Acropolis Hypervisor](https://www.nutanix.com/products/ahv), or AHV. By using Rancher with Nutanix AOS (AHV), you can bring cloud operations on-premises. + +Rancher can provision nodes in AOS (AHV) and install Kubernetes on them. When creating a Kubernetes cluster in AOS, Rancher first provisions the specified number of virtual machines by communicating with the Prism Central API. Then it installs Kubernetes on top of the VMs. + +A Nutanix cluster may consist of multiple groups of VMs with distinct properties, such as the amount of memory or the number of vCPUs. This grouping allows for fine-grained control over the sizing of nodes for each Kubernetes role. + +- [Creating a Nutanix Cluster]({{}}/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/nutanix/provisioning-nutanix-clusters/#creating-a-nutanix-aos-cluster) +- [Provisioning Storage]({{}}/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/nutanix/provisioning-nutanix-clusters) + +# Creating a Nutanix Cluster + +In [this section,](./provisioning-nutanix-clusters) you'll learn how to use Rancher to install an [RKE]({{}}/rke/latest/en/) Kubernetes cluster in Nutanix AOS. \ No newline at end of file diff --git a/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/nutanix/nutanix-node-template-config/_index.md b/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/nutanix/nutanix-node-template-config/_index.md new file mode 100644 index 00000000000..a4ae10d8ece --- /dev/null +++ b/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/nutanix/nutanix-node-template-config/_index.md @@ -0,0 +1,64 @@ +--- +title: Nutanix Node Template Configuration +weight: 2 +--- + +- [Account Access](#account-access) +- [Scheduling](#scheduling) +- [Instance Options](#instance-options) +- [Networks](#networks) +- [VM Categories](#vm-categories) +- [cloud-init](#cloud-init) + +# Account Access + +| Parameter | Required | Description | Default +|:-----------------------------|:--------:|:-----------------------------------------------------------------|:----- +| Management Endpoint | ✓ | Hostname/IP address of Prism Central | +| Username | ✓ | Username of the Prism Central user | +| Password | ✓ | Password of the Prism Central user | +| Allow insecure communication | | Set to true to allow insecure SSL communication to Prism Central | False + +# Scheduling + +Choose what Nutanix cluster the virtual machine will be scheduled to. + +| Parameter | Required | Description +|:----------|:--------:|:---------------------------------------------------------------------------- +| Cluster | ✓ | Name of the Nutanix cluster where the VM should be deployed (case sensitive) + +# Instance Options + +In the **Instance Options** section, configure the number of vCPUs, memory, and disk size for the VMs created by this template. + +| Parameter | Required | Description | Default +|:---------------------|:--------:|:--------------------------------------------------------------------------------------------|:------- +| CPUs | | Number of vCPUs allocated to the VM (cores) | 2 +| Memory | | Amount of RAM allocated to the VM (MB) | 2 GB +| Template Image | ✓ | Name of the Disk Image template to clone as the VM's primary disk (must support cloud-init) | +| VM Disk Size | | New size of the VM's primary disk (in GiB) | +| Additional Disk Size | | Size of an additional disk to add to the VM (in GiB) | +| Storage Container | | Storage container _UUID_ in which to provision an additional disk | +| Cloud Config YAML | | Cloud-init to provide to the VM (will be patched with Rancher root user) | +| Network | ✓ | Name(s) of the network(s) to attach to the VM | +| VM Categories | | Name(s) of any categories to be applied to the VM | + +The VM may use any modern Linux operating system that is configured with support for [cloud-init](https://cloudinit.readthedocs.io/en/latest/) using the [Config Drive v2 datasource](https://cloudinit.readthedocs.io/en/latest/topics/datasources/configdrive.html). + +# Networks + +The node template allows a VM to be provisioned with multiple networks. In the **Network** field, you can click **Add** to add any networks available to you in AOS. + +# VM Categories + +A category is a grouping of entities into a key value pair. Typically, VMs are assigned to a category based on some criteria. Policies can then be tied to those entities that are assigned (grouped by) a specific category value. + +# cloud-init + +[Cloud-init](https://cloudinit.readthedocs.io/en/latest/) allows you to initialize your nodes by applying configuration on the first boot. This may involve things such as creating users or authorizing SSH keys. + +To make use of cloud-init initialization, paste a cloud config using valid YAML syntax into the **Cloud Config YAML** field. Refer to the [cloud-init documentation](https://cloudinit.readthedocs.io/en/latest/topics/examples.html) for a commented set of examples of supported cloud config directives. + +Note that cloud-init based network configuration is not recommended and only supported via user data `runcmd` rather than by NoCloud or other network configuration datasources. + +Nutanix IP Address Management (IPAM) or another DHCP service is recommended. diff --git a/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/nutanix/provisioning-nutanix-clusters/_index.md b/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/nutanix/provisioning-nutanix-clusters/_index.md new file mode 100644 index 00000000000..de2647ddced --- /dev/null +++ b/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/nutanix/provisioning-nutanix-clusters/_index.md @@ -0,0 +1,90 @@ +--- +title: Provisioning Kubernetes Clusters in Nutanix AOS +weight: 1 +--- + +To use Rancher to install an [RKE]({{}}/rke/latest/en/) Kubernetes cluster in Nutanix AOS (AHV): + +1. Locate Rancher's built-in Nutanix [node driver and activate it]({{}}/rancher/v2.6/en/admin-settings/drivers/node-drivers/#activating-deactivating-node-drivers). + +1. Create a node template, which Rancher will use to provision nodes in Nutanix AOS. + +1. Create a Nutanix AOS cluster in Rancher. When configuring the new cluster, you will define node pools for it. Each node pool will have a Kubernetes role of etcd, controlplane, or worker. Rancher will install RKE Kubernetes on the new nodes, and it will set up each node with the Kubernetes role defined by the node pool. + +For details on configuring the Nutanix AOS node template, refer to the [Nutanix AOS node template configuration reference.]({{}}/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/nutanix/nutanix-node-template-config/) + +For details on configuring RKE Kubernetes clusters in Rancher, refer to the [cluster configuration reference.]({{}}/rancher/v2.6/en/cluster-admin/editing-clusters/rke-config-reference/) + +- [Preparation in Nutanix AOS](#preparation-in-nutanix-aos) +- [Creating a Nutanix AOS Cluster](#creating-a-nutanix-aos-cluster) + +# Preparation in Nutanix AOS + +The following sections describe the requirements for setting up Nutanix AOS so that Rancher can provision VMs and clusters. + +**Note:** The node templates are documented and tested with Nutanix AOS version 5.20.2 and 6.0.1. + +### Create Credentials in Nutanix AOS + +Before proceeding to create a cluster, you must ensure that you have a [Nutanix Prism Central user account](https://portal.nutanix.com/page/documents/details?targetId=Nutanix-Security-Guide-v6_0:wc-user-create-wc-t.html) with admin permissions. When you set up a node template, the template will need to use these credentials. + +### Network Permissions + +You must ensure that the hosts running the Rancher server are able to establish the following network connections: + +- To the Nutanix Prism Central API (usually port 9440/TCP). +- To port 22/TCP and 2376/TCP on the created VMs + +See [Node Networking Requirements]({{}}/rancher/v2.6/en/cluster-provisioning/node-requirements/#networking-requirements) for a detailed list of port requirements applicable for creating nodes on an infrastructure provider. + +### VM-VM Anti-Affinity Policies + +Setting up [VM-VM Anti-Affinity Policies](https://portal.nutanix.com/page/documents/details?targetId=AHV-Admin-Guide-v6_1:ahv-vm-anti-affinity-t.html) is recommended. These rules allow VMs assigned the etcd and control-plane roles to operate on separate AHV hosts when they are assigned to different node pools. This practice ensures that the failure of a single physical machine does not affect the availability of those planes. + +# Creating a Nutanix AOS Cluster + +1. [Create a node template ](#1-create-a-node-template) +2. [Create a cluster with node pools using the node template](#2-create-a-cluster-with-node-pools-using-the-node-template) + +### 1. Create a node template + +Creating a [node template]({{}}/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/#node-templates) for Nutanix AOS will allow Rancher to provision new nodes in Nutanix AOS. Node templates can be reused for other clusters. + +1. Click **☰ > Cluster Management**. +1. Click **RKE1 Configuration > Node Templates**. +1. Click **Create**. +1. Click **Add Template**. +1. Click **Nutanix**. +1. Fill out a node template for Nutanix AOS. For help filling out the form, refer to the Nutanix AOS node template [configuration reference.]({{}}/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/nutanix/nutanix-node-template-config/). +1. Click **Create**. + +### 2. Create a cluster with node pools using the node template + +Use Rancher to create a Kubernetes cluster in Nutanix AOS. + +1. Click **☰ > Cluster Management**. +1. On the **Clusters** page, click **Create**. +1. Click **Nutanix**. +1. Enter a **Cluster Name**, then click **Continue**. +1. Use **Member Roles** to configure user authorization for the cluster. Click **Add Member** to add users who can access the cluster. Use the **Role** drop-down to set permissions for each user. +1. Use **Cluster Options** to choose the version of Kubernetes that will be installed, what network provider will be used, and whether you want to enable project network isolation. To see more cluster options, click on **Show advanced options**. For help configuring the cluster, refer to the [RKE cluster configuration reference.]({{}}/rancher/v2.6/en/cluster-admin/editing-clusters/rke-config-reference/) +1. Add one or more node pools to your cluster. Each node pool uses a node template to provision new nodes. For more information about node pools, including best practices for assigning Kubernetes roles to the nodes, see [this section.]({{}}/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/#node-pools) +1. Review your options to confirm they're correct. Then click **Create**. + +**Result:** Your cluster is created and assigned a state of **Provisioning**. Rancher is standing up your cluster. + +You can access your cluster after its state is updated to **Active**. + +**Active** clusters are assigned two Projects: + +- `Default`, containing the `default` namespace +- `System`, containing the `cattle-system`, `ingress-nginx`, `kube-public`, and `kube-system` namespaces + + +# Optional Next Steps + +After creating your cluster, you can access it through the Rancher UI. As a best practice, we recommend setting up these alternate ways of accessing your cluster: + +- **Access your cluster with the kubectl CLI:** Follow [these steps]({{}}/rancher/v2.6/en/cluster-admin/cluster-access/kubectl/#accessing-clusters-with-kubectl-on-your-workstation) to access clusters with kubectl on your workstation. In this case, you will be authenticated through the Rancher server’s authentication proxy, then Rancher will connect you to the downstream cluster. This method lets you manage the cluster without the Rancher UI. + +- **Access your cluster with the kubectl CLI, using the authorized cluster endpoint:** Follow [these steps]({{}}/rancher/v2.6/en/cluster-admin/cluster-access/kubectl/#authenticating-directly-with-a-downstream-cluster) to access your cluster with kubectl directly, without authenticating through Rancher. We recommend setting up this alternative method to access your cluster so that in case you can’t connect to Rancher, you can still access the cluster. \ No newline at end of file diff --git a/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/vsphere/_index.md b/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/vsphere/_index.md index 13c897c89b3..e11d83949fb 100644 --- a/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/vsphere/_index.md +++ b/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/vsphere/_index.md @@ -36,6 +36,7 @@ For the fields to be populated, your setup needs to fulfill the [prerequisites.] ### More Supported Operating Systems You can provision VMs with any operating system that supports `cloud-init`. Only YAML format is supported for the [cloud config.](https://cloudinit.readthedocs.io/en/latest/topics/examples.html) + ### Video Walkthrough of v2.3.3 Node Template Features In this YouTube video, we demonstrate how to set up a node template with the new features designed to help you bring cloud operations to on-premises clusters. @@ -54,4 +55,4 @@ For an example of how to provision storage in vSphere using Rancher, refer to [t When a cloud provider is set up in Rancher, the Rancher server can automatically provision new infrastructure for the cluster, including new nodes or persistent storage devices. -For details, refer to the section on [enabling the vSphere cloud provider.]({{}}/rancher/v2.6/en/cluster-provisioning/rke-clusters/cloud-providers/vsphere) \ No newline at end of file +For details, refer to the section on [enabling the vSphere cloud provider.]({{}}/rancher/v2.6/en/cluster-provisioning/rke-clusters/cloud-providers/vsphere) diff --git a/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/vsphere/creating-a-vm-template/_index.md b/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/vsphere/creating-a-vm-template/_index.md new file mode 100644 index 00000000000..1ed401c2ebd --- /dev/null +++ b/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/vsphere/creating-a-vm-template/_index.md @@ -0,0 +1,160 @@ +--- +title: Creating a vSphere Virtual Machine Template +weight: 4 +--- + +Creating virtual machines in a repeatable and reliable fashion can often be difficult. VMware vSphere offers the ability to build one VM that can then be converted to a template. The template can then be used to create identically configured VMs. Rancher leverages this capability within node pools to create identical RKE1 and RKE2 nodes. + +In order to leverage the template to create new VMs, Rancher has some [specific requirements](#requirements) that the VM must have pre-installed. After you configure the VM with these requirements, you will next need to [prepare the VM](#preparing-your-vm) before [creating the template](#creating-a-template). Finally, once preparation is complete, the VM can be [converted to a template](#converting-to-a-template) and [moved into a content library](#moving-to-a-content-library), ready for Rancher node pool usage. + +- [Requirements](#requirements) +- [Creating a Template](#creating-a-template) +- [Preparing Your VM](#preparing-your-vm) +- [Converting to a Template](#converting-to-a-template) +- [Moving to a content library](#moving-to-a-content-library) +- [Other Resources](#other-resources) + +# Requirements + +There is specific tooling required for both Linux and Windows VMs to be usable by the vSphere node driver. The most critical dependency is [cloud-init](https://cloud-init.io/) for Linux and [cloudbase-init](https://cloudbase.it/cloudbase-init/) for Windows. Both of these are used for provisioning the VMs by configuring the hostname and by setting up the SSH access and the default Rancher user. Users can add additional content to these as desired if other configuration is needed. In addition, other requirements are listed below for reference. + +**Note:** If you have any specific firewall rules or configuration, you will need to add this to the VM before creating a template. + +## Linux Dependencies + +The packages that need to be installed on the template are listed below. These will have slightly different names based on distribution; some distributions ship these by default, for example. + +* curl +* wget +* git +* net-tools +* unzip +* apparmor-parser +* ca-certificates +* cloud-init +* cloud-guest-utils +* cloud-image-utils +* growpart +* cloud-initramfs-growroot +* open-iscsi +* openssh-server +* [open-vm-tools](https://docs.vmware.com/en/VMware-Tools/11.3.0/com.vmware.vsphere.vmwaretools.doc/GUID-8B6EA5B7-453B-48AA-92E5-DB7F061341D1.html) + +## Windows Dependencies + +The list of packages that need to be installed on the template is as follows: + +* Windows Container Feature +* [cloudbase-init](https://cloudbase.it/cloudbase-init/#download) +* [Docker EE](https://docs.microsoft.com/en-us/virtualization/windowscontainers/quick-start/set-up-environment?tabs=Windows-Server#install-docker) - RKE1 Only + +**Important to note: The configuration for Windows templates varies between RKE1 and RKE2:** +- RKE1 leverages Docker, so any RKE1 templates need to have Docker EE pre-installed as well +- RKE2 does not require Docker EE, and thus it does not need to be installed + +# Creating a Template + +You may either manually create your VM or you can utilize [other alternatives](#alternatives-to-manual-creation) to create your VM. + +## Manual Creation +1. Manually create your VM by following [these instructions](https://docs.vmware.com/en/VMware-vSphere/7.0/com.vmware.vsphere.vm_admin.doc/GUID-AE8AFBF1-75D1-4172-988C-378C35C9FAF2.html) from VMware. Once you have a VM running, you can manually install the dependencies listed above to configure the VM correctly for the vSphere node driver. +2. Customize as needed based on your specific environment and requirements. +3. Proceed with the final preparation before creating your template. + +## Alternatives to Manual Creation + +Other alternative options to create VMs are listed below: + +* [VMware PowerCLI](https://developer.vmware.com/powercli) +* [Packer](https://www.packer.io/) +* [SaltStack](https://saltproject.io/) +* [Ansible](https://www.ansible.com/) + +Packer is a frequently-used alternative. Refer to this [reference](https://github.com/vmware-samples/packer-examples-for-vsphere) for examples of its usage with vSphere. + +# Preparing Your VM + +After creating a VM with all the required dependencies (and any additional required items), you must perform the most critical step next: preparing the VM to be turned into a template. This preparation will reset critical data such as the VM hostname, IPs, etc., to prevent that information from being brought into a new VM. If you fail to perform this step, you could create a VM with the same hostname, IP address, etc. + +Note that these preparatory steps differ between Linux and Windows. + +## Linux Preparation + +The commands below will reset your VM in Linux: + +```Bash +# Cleaning logs. +if [ -f /var/log/audit/audit.log ]; then + cat /dev/null > /var/log/audit/audit.log +fi +if [ -f /var/log/wtmp ]; then + cat /dev/null > /var/log/wtmp +fi +if [ -f /var/log/lastlog ]; then + cat /dev/null > /var/log/lastlog +fi + +# Cleaning udev rules. +if [ -f /etc/udev/rules.d/70-persistent-net.rules ]; then + rm /etc/udev/rules.d/70-persistent-net.rules +fi + +# Cleaning the /tmp directories +rm -rf /tmp/* +rm -rf /var/tmp/* + +# Cleaning the SSH host keys +rm -f /etc/ssh/ssh_host_* + +# Cleaning the machine-id +truncate -s 0 /etc/machine-id +rm /var/lib/dbus/machine-id +ln -s /etc/machine-id /var/lib/dbus/machine-id + +# Cleaning the shell history +unset HISTFILE +history -cw +echo > ~/.bash_history +rm -fr /root/.bash_history + +# Truncating hostname, hosts, resolv.conf and setting hostname to localhost +truncate -s 0 /etc/{hostname,hosts,resolv.conf} +hostnamectl set-hostname localhost + +# Clean cloud-init +cloud-init clean -s -l +``` + +## Windows Preparation + +Windows has a utility called [sysprep](https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/sysprep--generalize--a-windows-installation) that is used to generalize an image and reset the same items listed above for Linux. The command is as follows: + +```PowerShell +sysprep.exe /generalize /shutdown /oobe +``` + +# Converting to a Template + +1. Shut down and stop the VM. +2. Right-click on the VM in the inventory list and select **Template**. +3. Click on **Convert to Template**. + +**Result:** Once the process has completed, a template will be available for use. + +For additional information on converting a VM to a template, see the [VMware guide](https://docs.vmware.com/en/VMware-vSphere/7.0/com.vmware.vsphere.vm_admin.doc/GUID-5B3737CC-28DB-4334-BD18-6E12011CDC9F.html). + +# Moving to a Content library + +Rancher has the ability to use templates provided by a content library. Content libraries store and manage content within vSphere, and they also offer the ability to publish and share that content. + +Below are some helpful links on content libraries: + +* [Create a content library](https://docs.vmware.com/en/VMware-vSphere/7.0/com.vmware.vsphere.vm_admin.doc/GUID-2A0F1C13-7336-45CE-B211-610D39A6E1F4.html) +* [Clone the template to the content library](https://docs.vmware.com/en/VMware-vSphere/7.0/com.vmware.vsphere.vm_admin.doc/GUID-AC1545F0-F8BA-4CD2-96EB-21B3DFAA1DC1.html) + +# Other Resources + +Here is a list of additional resources that may be useful: + +* [Tutorial for creating a Linux template](https://docs.microsoft.com/en-us/azure/cloud-adoption-framework/manage/hybrid/server/best-practices/vmware-ubuntu-template) +* [Tutorial for creating a Windows template](https://docs.microsoft.com/en-us/azure/cloud-adoption-framework/manage/hybrid/server/best-practices/vmware-windows-template) diff --git a/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/vsphere/creating-credentials/_index.md b/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/vsphere/creating-credentials/_index.md index 6f83c84c66c..55ac548274e 100644 --- a/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/vsphere/creating-credentials/_index.md +++ b/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/node-pools/vsphere/creating-credentials/_index.md @@ -10,9 +10,11 @@ The following table lists the permissions required for the vSphere user account: | Privilege Group | Operations | |:----------------------|:-----------------------------------------------------------------------| | Datastore | AllocateSpace
Browse
FileManagement (Low level file operations)
UpdateVirtualMachineFiles
UpdateVirtualMachineMetadata | +| Global | Set custom attribute | | Network | Assign | | Resource | AssignVMToPool | | Virtual Machine | Config (All)
GuestOperations (All)
Interact (All)
Inventory (All)
Provisioning (All) | +| vSphere Tagging | Assign or Unassign vSphere Tag
Assign or Unassign vSphere Tag on Object | The following steps create a role with the required privileges and then assign it to a new user in the vSphere console: diff --git a/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/windows-clusters/_index.md b/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/windows-clusters/_index.md index 1d5b9d4b072..5db4add3d41 100644 --- a/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/windows-clusters/_index.md +++ b/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/windows-clusters/_index.md @@ -28,13 +28,13 @@ This guide covers the following topics: - [Configuration for Storage Classes in Azure](#configuration-for-storage-classes-in-azure) - # Changes in Rancher v2.6 - -_Tech Preview_ +# Changes in Rancher v2.6 Rancher v2.6 introduces provisioning for [RKE2](https://docs.rke2.io/) clusters directly from the Rancher UI. RKE2, also known as RKE Government, is a fully conformant Kubernetes distribution that focuses on security and compliance within the U.S. Federal Government sector. -The RKE2 provisioning tech preview also includes installing RKE2 on Windows clusters. Windows features for RKE2 include: +As of Rancher v2.6.5, provisioning for RKE2 is GA. + +The RKE2 provisioning feature also includes installing RKE2 on Windows clusters. Windows features for RKE2 include: - Windows Containers with RKE2 powered by containerd - Added provisioning of Windows RKE2 custom clusters directly from the Rancher UI @@ -43,6 +43,8 @@ The RKE2 provisioning tech preview also includes installing RKE2 on Windows clus Windows Support for RKE2 Custom Clusters requires choosing Calico as the CNI. +>**Important:** Rancher will allow Windows workload pods to deploy on both Windows and Linux worker nodes by default. When creating mixed clusters in RKE2, you must edit the `nodeSelector` in the chart to direct the pods to be placed onto a compatible Windows node. Refer to the [Kubernetes documentation](https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#nodeselector) for more information on how to use `nodeSelector` to assign pods to nodes. + # Requirements for Windows Clusters The general node requirements for networking, operating systems, and Docker are the same as the node requirements for a [Rancher installation]({{}}/rancher/v2.6/en/installation/requirements/). @@ -85,6 +87,32 @@ If you are configuring DHCP options sets for an AWS virtual private cloud, note > Some Linux operating systems accept multiple domain names separated by spaces. However, other Linux operating systems and Windows treat the value as a single domain, which results in unexpected behavior. If your DHCP options set is associated with a VPC that has instances with multiple operating systems, specify only one domain name. +### Rancher on vSphere with ESXi 6.7u2 and above + +If you are using Rancher on VMware vSphere with ESXi 6.7u2 or later with Red Hat Enterprise Linux 8.3, CentOS 8.3, or SUSE Enterprise Linux 15 SP2 or later, it is necessary to disable the `vmxnet3` virtual network adapter hardware offloading feature. Failure to do so will result in all network connections between pods on different cluster nodes to fail with timeout errors. All connections from Windows pods to critical services running on Linux nodes, such as CoreDNS, will fail as well. It is also possible that external connections may fail. This issue is the result of Linux distributions enabling the hardware offloading feature in `vmxnet3` and a bug in the `vmxnet3` hardware offloading feature that results in the discarding of packets for guest overlay traffic. To address this issue, it is necessary disable the `vmxnet3` hardware offloading feature. This setting does not survive reboot, so it is necessary to disable on every boot. The recommended course of action is to create a systemd unit file at `/etc/systemd/system/disable_hw_offloading.service`, which disables the `vmxnet3` hardware offloading feature on boot. A sample systemd unit file which disables the `vmxnet3` hardware offloading feature is as follows. Note that `` must be customized to the host `vmxnet3` network interface, e.g., `ens192`: + +``` +[Unit] +Description=Disable vmxnet3 hardware offloading feature + +[Service] +Type=oneshot +ExecStart=ethtool -K tx-udp_tnl-segmentation off +ExecStart=ethtool -K tx-udp_tnl-csum-segmentation off +StandardOutput=journal + +[Install] +WantedBy=multi-user.target +``` +Then set the appropriate permissions on the systemd unit file: +``` +chmod 0644 /etc/systemd/system/disable_hw_offloading.service +``` +Finally, enable the systemd service: +``` +systemctl enable disable_hw_offloading.service +``` + ### Architecture Requirements The Kubernetes cluster management nodes (`etcd` and `controlplane`) must be run on Linux nodes. diff --git a/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/windows-clusters/windows-parity/_index.md b/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/windows-clusters/windows-parity/_index.md index 1a6e9f9f215..658b48e8b18 100644 --- a/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/windows-clusters/windows-parity/_index.md +++ b/content/rancher/v2.6/en/cluster-provisioning/rke-clusters/windows-clusters/windows-parity/_index.md @@ -11,7 +11,7 @@ The following chart describes the feature parity between Windows and Linux on Ra --- | --- | --- **Distributions** | | RKE | Supported | Supported -RKE2 | Supported | Tenatively Planned For 2.6.x +RKE2 | Supported | Supported K3S | Supported | Not Supported EKS | Supported | Not Supported GKE | Supported | Not Supported @@ -38,7 +38,7 @@ Backup/Restore Operator | Supported | Not Supported **CNI / Add-ons** | | Flannel | Supported | Supported Canal | Supported | Not Supported -Calico | Supported | Tentatively Planned for 2.6.x +Calico | Supported | Supported (RKE2 Only) Cilium | Supported | Not Supported Multus | Supported | Not Supported Traefik | Supported | Not Supported diff --git a/content/rancher/v2.6/en/contributing/_index.md b/content/rancher/v2.6/en/contributing/_index.md index 3900cabb57f..cb8d8332c8e 100644 --- a/content/rancher/v2.6/en/contributing/_index.md +++ b/content/rancher/v2.6/en/contributing/_index.md @@ -24,7 +24,7 @@ Repository | URL | Description Rancher | https://github.com/rancher/rancher | This repository is the main source code for Rancher 2.x. Types | https://github.com/rancher/types | This repository is the repository that has all the API types for Rancher 2.x. API Framework | https://github.com/rancher/norman | This repository is an API framework for building Rancher style APIs backed by Kubernetes Custom Resources. -User Interface | https://github.com/rancher/ui | This repository is the source of the UI. +User Interface | https://github.com/rancher/dashboard/ | This repository is the source of the Dashboard UI. (Rancher) Docker Machine | https://github.com/rancher/machine | This repository is the source of the Docker Machine binary used when using Node Drivers. This is a fork of the `docker/machine` repository. machine-package | https://github.com/rancher/machine-package | This repository is used to build the Rancher Docker Machine binary. kontainer-engine | https://github.com/rancher/kontainer-engine | This repository is the source of kontainer-engine, the tool to provision hosted Kubernetes clusters. @@ -36,7 +36,7 @@ loglevel repository | https://github.com/rancher/loglevel | This repository is t To see all libraries/projects used in Rancher, see the [`go.mod` file](https://github.com/rancher/rancher/blob/master/go.mod) in the `rancher/rancher` repository. -![Rancher diagram]({{}}/img/rancher/ranchercomponentsdiagram.svg)
+![Rancher diagram]({{}}/img/rancher/ranchercomponentsdiagram-2.6.svg)
Rancher components used for provisioning/managing Kubernetes clusters. # Building diff --git a/content/rancher/v2.6/en/deploy-across-clusters/fleet/_index.md b/content/rancher/v2.6/en/deploy-across-clusters/fleet/_index.md index f9ef3cc818c..1b129ee97f0 100644 --- a/content/rancher/v2.6/en/deploy-across-clusters/fleet/_index.md +++ b/content/rancher/v2.6/en/deploy-across-clusters/fleet/_index.md @@ -12,6 +12,8 @@ Fleet is a separate project from Rancher, and can be installed on any Kubernetes - [Windows Support](#windows-support) - [GitHub Repository](#github-repository) - [Using Fleet Behind a Proxy](#using-fleet-behind-a-proxy) +- [Helm Chart Dependencies](#helm-chart-dependencies) +- [Troubleshooting](#troubleshooting) - [Documentation](#documentation) # Architecture @@ -20,7 +22,24 @@ For information about how Fleet works, see [this page.](./architecture) # Accessing Fleet in the Rancher UI -Fleet comes preinstalled in Rancher. To access it, click **☰ > Continuous Delivery**. +Fleet comes preinstalled in Rancher and is managed by the **Continous Delivery** option in the Rancher UI. For additional information on Continuous Delivery and other Fleet troubleshooting tips, refer [here](https://fleet.rancher.io/troubleshooting/). + +Users can leverage continuous delivery to deploy their applications to the Kubernetes clusters in the git repository without any manual operation by following **gitops** practice. + +Follow the steps below to access Continuous Delivery in the Rancher UI: + +1. Click **☰ > Continuous Delivery**. + +1. Select your namespace at the top of the menu, noting the following: + - By default,`fleet-default` is selected which includes all downstream clusters that are registered through Rancher. + - You may switch to `fleet-local`, which only contains the `local` cluster, or you may create your own workspace to which you may assign and move clusters. + - You can then manage clusters by clicking on **Clusters** on the left navigation bar. + +1. Click on **Gitrepos** on the left navigation bar to deploy the gitrepo into your clusters in the current workspace. + +1. Select your [git repository](https://fleet.rancher.io/gitrepo-add/) and [target clusters/cluster group](https://fleet.rancher.io/gitrepo-structure/). You can also create the cluster group in the UI by clicking on **Cluster Groups** from the left navigation bar. + +1. Once the gitrepo is deployed, you can monitor the application through the Rancher UI. # Windows Support @@ -36,6 +55,22 @@ The Fleet Helm charts are available [here.](https://github.com/rancher/fleet/rel For details on using Fleet behind a proxy, see [this page.](./proxy) +# Helm Chart Dependencies + +In order for Helm charts with dependencies to deploy successfully, you must run a manual command (as listed below), as it is up to the user to fulfill the dependency list. If you do not do this and proceed to clone your repository and run `helm install`, your installation will fail because the dependencies will be missing. + +The Helm chart in the git repository must include its dependencies in the charts subdirectory. You must either manually run `helm dependencies update $chart` OR run `helm dependencies build $chart` locally, then commit the complete charts directory to your git repository. Note that you will update your commands with the applicable parameters. + +# Troubleshooting + +--- +* **Known Issue:** clientSecretName and helmSecretName secrets for Fleet gitrepos are not included in the backup nor restore created by the [backup-restore-operator]({{}}/rancher/v2.6/en/backups/back-up-rancher/#1-install-the-rancher-backups-operator). We will update the community once a permanent solution is in place. + +* **Temporary Workaround:**
+By default, user-defined secrets are not backed up in Fleet. It is necessary to recreate secrets if performing a disaster recovery restore or migration of Rancher into a fresh cluster. To modify resourceSet to include extra resources you want to backup, refer to docs [here](https://github.com/rancher/backup-restore-operator#user-flow). + +--- + # Documentation The Fleet documentation is at [https://fleet.rancher.io/.](https://fleet.rancher.io/) diff --git a/content/rancher/v2.6/en/faq/dockershim/_index.md b/content/rancher/v2.6/en/faq/dockershim/_index.md new file mode 100644 index 00000000000..a9f79c0bddd --- /dev/null +++ b/content/rancher/v2.6/en/faq/dockershim/_index.md @@ -0,0 +1,46 @@ +--- +title: Dockershim +weight: 300 +--- + +The Dockershim is the CRI compliant layer between the Kubelet and the Docker daemon. As part of the Kubernetes 1.20 release, the [deprecation of the in-tree Dockershim was announced](https://kubernetes.io/blog/2020/12/02/dont-panic-kubernetes-and-docker/). Removal is currently scheduled for Kubernetes 1.24. For more information on the deprecation and its timelines, see the [Kubernetes Dockershim Deprecation FAQ](https://kubernetes.io/blog/2020/12/02/dockershim-faq/#when-will-dockershim-be-removed). + +RKE clusters, starting with Kubernetes 1.21, now support the external Dockershim to continue leveraging Docker as the CRI runtime. We now implement the upstream open source community Dockershim announced by [Mirantis and Docker](https://www.mirantis.com/blog/mirantis-to-take-over-support-of-kubernetes-dockershim-2/) to ensure RKE clusters can continue to leverage Docker. + +To enable the external Dockershim, configure the following option. + +``` +enable_cri_dockerd: true +``` + +For users looking to use another container runtime, Rancher has the edge-focused K3s and datacenter-focused RKE2 Kubernetes distributions that use containerd as the default runtime. Imported RKE2 and K3s Kubernetes clusters can then be upgraded and managed through Rancher even after the removal of in-tree Dockershim in Kubernetes 1.24. + +### FAQ + +
+ +Q. Do I have to upgrade Rancher to get Rancher’s support of the upstream Dockershim? + +The upstream support of Dockershim begins for RKE in Kubernetes 1.21. You will need to be on Rancher 2.6 or above to have support for RKE with Kubernetes 1.21. See our [support matrix](https://rancher.com/support-maintenance-terms/all-supported-versions/rancher-v2.6.0/) for details. + +
+ +Q. I am currently on RKE with Kubernetes 1.20. Do I need to upgrade to RKE with Kubernetes 1.21 sooner to avoid being out of support for Dockershim? + +A. The version of Dockershim in RKE with Kubernetes 1.20 will continue to work and is not scheduled for removal upstream until Kubernetes 1.24. It will only emit a warning of its future deprecation, which Rancher has mitigated in RKE with Kubernetes 1.21. You can plan your upgrade to Kubernetes 1.21 as you would normally, but should consider enabling the external Dockershim by Kubernetes 1.22. The external Dockershim will need to be enabled before upgrading to Kubernetes 1.24, at which point the existing implementation will be removed. + +For more information on the deprecation and its timeline, see the [Kubernetes Dockershim Deprecation FAQ](https://kubernetes.io/blog/2020/12/02/dockershim-faq/#when-will-dockershim-be-removed). + +
+ +Q: What are my other options if I don’t want to depend on the Dockershim? + +A: You can use a runtime like containerd with Kubernetes that does not require Dockershim support. RKE2 or K3s are two options for doing this. + +
+ +Q: If I am already using RKE1 and want to switch to RKE2, what are my migration options? + +A: Rancher is exploring the possibility of an in-place upgrade path. Alternatively you can always migrate workloads from one cluster to another using kubectl. + +
diff --git a/content/rancher/v2.6/en/faq/networking/cni-providers/_index.md b/content/rancher/v2.6/en/faq/networking/cni-providers/_index.md index 498e63ad5f1..ea4bbde4872 100644 --- a/content/rancher/v2.6/en/faq/networking/cni-providers/_index.md +++ b/content/rancher/v2.6/en/faq/networking/cni-providers/_index.md @@ -14,11 +14,11 @@ Kubernetes uses CNI as an interface between network providers and Kubernetes pod For more information visit [CNI GitHub project](https://github.com/containernetworking/cni). -### What Network Models are Used in CNI? +## What Network Models are Used in CNI? -CNI network providers implement their network fabric using either an encapsulated network model such as Virtual Extensible Lan ([VXLAN](https://github.com/coreos/flannel/blob/master/Documentation/backends.md#vxlan)) or an unencapsulated network model such as Border Gateway Protocol ([BGP](https://en.wikipedia.org/wiki/Border_Gateway_Protocol)). +CNI network providers implement their network fabric using either an encapsulated network model such as Virtual Extensible Lan ([VXLAN](https://github.com/flannel-io/flannel/blob/master/Documentation/backends.md#vxlan)) or an unencapsulated network model such as Border Gateway Protocol ([BGP](https://en.wikipedia.org/wiki/Border_Gateway_Protocol)). -#### What is an Encapsulated Network? +### What is an Encapsulated Network? This network model provides a logical Layer 2 (L2) network encapsulated over the existing Layer 3 (L3) network topology that spans the Kubernetes cluster nodes. With this model you have an isolated L2 network for containers without needing routing distribution, all at the cost of minimal overhead in terms of processing and increased IP package size, which comes from an IP header generated by overlay encapsulation. Encapsulation information is distributed by UDP ports between Kubernetes workers, interchanging network control plane information about how MAC addresses can be reached. Common encapsulation used in this kind of network model is VXLAN, Internet Protocol Security (IPSec), and IP-in-IP. @@ -26,11 +26,11 @@ In simple terms, this network model generates a kind of network bridge extended This network model is used when an extended L2 bridge is preferred. This network model is sensitive to L3 network latencies of the Kubernetes workers. If datacenters are in distinct geolocations, be sure to have low latencies between them to avoid eventual network segmentation. -CNI network providers using this network model include Flannel, Canal, and Weave. +CNI network providers using this network model include Flannel, Canal, Weave, and Cilium. By default, Calico is not using this model, but it can be configured to do so. ![Encapsulated Network]({{}}/img/rancher/encapsulated-network.png) -#### What is an Unencapsulated Network? +### What is an Unencapsulated Network? This network model provides an L3 network to route packets between containers. This model doesn't generate an isolated l2 network, nor generates overhead. These benefits come at the cost of Kubernetes workers having to manage any route distribution that's needed. Instead of using IP headers for encapsulation, this network model uses a network protocol between Kubernetes workers to distribute routing information to reach pods, such as [BGP](https://en.wikipedia.org/wiki/Border_Gateway_Protocol). @@ -38,13 +38,17 @@ In simple terms, this network model generates a kind of network router extended This network model is used when a routed L3 network is preferred. This mode dynamically updates routes at the OS level for Kubernetes workers. It's less sensitive to latency. -CNI network providers using this network model include Calico and Romana. +CNI network providers using this network model include Calico and Cilium. Cilium may be configured with this model although it is not the default mode. ![Unencapsulated Network]({{}}/img/rancher/unencapsulated-network.png) -### What CNI Providers are Provided by Rancher? +## What CNI Providers are Provided by Rancher? -Out-of-the-box, Rancher provides the following CNI network providers for Kubernetes clusters: Canal, Flannel, Calico and Weave. You can choose your CNI network provider when you create new Kubernetes clusters from Rancher. +### RKE Kubernetes clusters + +Out-of-the-box, Rancher provides the following CNI network providers for RKE Kubernetes clusters: Canal, Flannel, and Weave. + +You can choose your CNI network provider when you create new Kubernetes clusters from Rancher. #### Canal @@ -54,7 +58,7 @@ Canal is a CNI network provider that gives you the best of Flannel and Calico. I In Rancher, Canal is the default CNI network provider combined with Flannel and VXLAN encapsulation. -Kubernetes workers should open UDP port `8472` (VXLAN) and TCP port `9099` (healthcheck). For details, refer to [the port requirements for user clusters.]({{}}/rancher/v2.6/en/cluster-provisioning/node-requirements/) +Kubernetes workers should open UDP port `8472` (VXLAN) and TCP port `9099` (health checks). If using Wireguard, you should open UDP ports `51820` and `51821`. For more details, refer to [the port requirements for user clusters]({{}}/rancher/v2.6/en/cluster-provisioning/node-requirements/). {{< img "/img/rancher/canal-diagram.png" "Canal Diagram">}} @@ -64,33 +68,18 @@ For more information, see the [Canal GitHub Page.](https://github.com/projectcal ![Flannel Logo]({{}}/img/rancher/flannel-logo.png) -Flannel is a simple and easy way to configure L3 network fabric designed for Kubernetes. Flannel runs a single binary agent named flanneld on each host, which is responsible for allocating a subnet lease to each host out of a larger, preconfigured address space. Flannel uses either the Kubernetes API or etcd directly to store the network configuration, the allocated subnets, and any auxiliary data (such as the host's public IP). Packets are forwarded using one of several backend mechanisms, with the default encapsulation being [VXLAN](https://github.com/coreos/flannel/blob/master/Documentation/backends.md#vxlan). +Flannel is a simple and easy way to configure L3 network fabric designed for Kubernetes. Flannel runs a single binary agent named flanneld on each host, which is responsible for allocating a subnet lease to each host out of a larger, preconfigured address space. Flannel uses either the Kubernetes API or etcd directly to store the network configuration, the allocated subnets, and any auxiliary data (such as the host's public IP). Packets are forwarded using one of several backend mechanisms, with the default encapsulation being [VXLAN](https://github.com/flannel-io/flannel/blob/master/Documentation/backends.md#vxlan). -Encapsulated traffic is unencrypted by default. Therefore, flannel provides an experimental backend for encryption, [IPSec](https://github.com/coreos/flannel/blob/master/Documentation/backends.md#ipsec), which makes use of [strongSwan](https://www.strongswan.org/) to establish encrypted IPSec tunnels between Kubernetes workers. +Encapsulated traffic is unencrypted by default. Flannel provides two solutions for encryption: -Kubernetes workers should open UDP port `8472` (VXLAN) and TCP port `9099` (healthcheck). See [the port requirements for user clusters]({{}}/rancher/v2.6/en/cluster-provisioning/node-requirements/#networking-requirements) for more details. +* [IPSec](https://github.com/flannel-io/flannel/blob/master/Documentation/backends.md#ipsec), which makes use of [strongSwan](https://www.strongswan.org/) to establish encrypted IPSec tunnels between Kubernetes workers. It is an experimental backend for encryption. +* [WireGuard](https://github.com/flannel-io/flannel/blob/master/Documentation/backends.md#wireguard), which is a more faster-performing alternative to strongSwan. + +Kubernetes workers should open UDP port `8472` (VXLAN). See [the port requirements for user clusters]({{}}/rancher/v2.6/en/cluster-provisioning/node-requirements/#networking-requirements) for more details. ![Flannel Diagram]({{}}/img/rancher/flannel-diagram.png) -For more information, see the [Flannel GitHub Page](https://github.com/coreos/flannel). - -#### Calico - -![Calico Logo]({{}}/img/rancher/calico-logo.png) - -Calico enables networking and network policy in Kubernetes clusters across the cloud. Calico uses a pure, unencapsulated IP network fabric and policy engine to provide networking for your Kubernetes workloads. Workloads are able to communicate over both cloud infrastructure and on-prem using BGP. - -Calico also provides a stateless IP-in-IP encapsulation mode that can be used, if necessary. Calico also offers policy isolation, allowing you to secure and govern your Kubernetes workloads using advanced ingress and egress policies. - -Kubernetes workers should open TCP port `179` (BGP). See [the port requirements for user clusters]({{}}/rancher/v2.6/en/cluster-provisioning/node-requirements/#networking-requirements) for more details. - -![Calico Diagram]({{}}/img/rancher/calico-diagram.svg) - -For more information, see the following pages: - -- [Project Calico Official Site](https://www.projectcalico.org/) -- [Project Calico GitHub Page](https://github.com/projectcalico/calico) - +For more information, see the [Flannel GitHub Page](https://github.com/flannel-io/flannel). #### Weave @@ -104,16 +93,73 @@ For more information, see the following pages: - [Weave Net Official Site](https://www.weave.works/) -### CNI Features by Provider +### RKE2 Kubernetes clusters + +Out-of-the-box, Rancher provides the following CNI network providers for RKE2 Kubernetes clusters: [Canal](#canal) (see above section), Calico, and Cilium. + +You can choose your CNI network provider when you create new Kubernetes clusters from Rancher. + +#### Calico + +![Calico Logo]({{}}/img/rancher/calico-logo.png) + +Calico enables networking and network policy in Kubernetes clusters across the cloud. By default, Calico uses a pure, unencapsulated IP network fabric and policy engine to provide networking for your Kubernetes workloads. Workloads are able to communicate over both cloud infrastructure and on-prem using BGP. + +Calico also provides a stateless IP-in-IP or VXLAN encapsulation mode that can be used, if necessary. Calico also offers policy isolation, allowing you to secure and govern your Kubernetes workloads using advanced ingress and egress policies. + +Kubernetes workers should open TCP port `179` if using BGP or UDP port `4789` if using VXLAN encapsulation. In addition, TCP port `5473` is needed when using Typha. See [the port requirements for user clusters]({{}}/rancher/v2.6/en/cluster-provisioning/node-requirements/#networking-requirements) for more details. + +>**Important:** In Rancher v2.6.3, Calico probes fail on Windows nodes upon RKE2 installation. Note that this issue is resolved in v2.6.4. +> +>- To work around this issue, first navigate to `https:///v3/settings/windows-rke2-install-script`. +> +>- There, change the current setting: `https://raw.githubusercontent.com/rancher/wins/v0.1.3/install.ps1` to this new setting: `https://raw.githubusercontent.com/rancher/rke2/master/windows/rke2-install.ps1`. + +![Calico Diagram]({{}}/img/rancher/calico-diagram.svg) + +For more information, see the following pages: + +- [Project Calico Official Site](https://www.projectcalico.org/) +- [Project Calico GitHub Page](https://github.com/projectcalico/calico) + +#### Cilium + +![Cilium Logo]({{}}/img/rancher/cilium-logo.png) + +Cilium enables networking and network policies (L3, L4, and L7) in Kubernetes. By default, Cilium uses eBPF technologies to route packets inside the node and VXLAN to send packets to other nodes. Unencapsulated techniques can also be configured. + +Cilium recommends kernel versions greater than 5.2 to be able to leverage the full potential of eBPF. Kubernetes workers should open TCP port `8472` for VXLAN and TCP port `4240` for health checks. In addition, ICMP 8/0 must be enabled for health checks. For more information, check [Cilium System Requirements](https://docs.cilium.io/en/latest/operations/system_requirements/#firewall-requirements). + +##### Ingress Routing Across Nodes in Cilium +
+By default, Cilium does not allow pods to contact pods on other nodes. To work around this, enable the ingress controller to route requests across nodes with a `CiliumNetworkPolicy`. + +After selecting the Cilium CNI and enabling Project Network Isolation for your new cluster, configure as follows: + +``` +apiVersion: cilium.io/v2 +kind: CiliumNetworkPolicy +metadata: + name: hn-nodes + namespace: default +spec: + endpointSelector: {} + ingress: + - fromEntities: + - remote-node +``` + +## CNI Features by Provider The following table summarizes the different features available for each CNI network provider provided by Rancher. | Provider | Network Model | Route Distribution | Network Policies | Mesh | External Datastore | Encryption | Ingress/Egress Policies | | ---- | ---- | ---- | ---- | ---- | ---- | ---- | ---- | -| Canal | Encapsulated (VXLAN) | No | Yes | No | K8S API | No | Yes | -| Flannel | Encapsulated (VXLAN) | No | No | No | K8S API | No | No | -| Calico | Encapsulated (VXLAN,IPIP) OR Unencapsulated | Yes | Yes | Yes | Etcd and K8S API | No | Yes | +| Canal | Encapsulated (VXLAN) | No | Yes | No | K8s API | Yes | Yes | +| Flannel | Encapsulated (VXLAN) | No | No | No | K8s API | Yes | No | +| Calico | Encapsulated (VXLAN,IPIP) OR Unencapsulated | Yes | Yes | Yes | Etcd and K8s API | Yes | Yes | | Weave | Encapsulated | Yes | Yes | Yes | No | Yes | Yes | +| Cilium | Encapsulated (VXLAN) | Yes | Yes | Yes | Etcd and K8s API | Yes | Yes | - Network Model: Encapsulated or unencapsulated. For more information, see [What Network Models are Used in CNI?](#what-network-models-are-used-in-cni) @@ -129,25 +175,27 @@ The following table summarizes the different features available for each CNI net - Ingress/Egress Policies: This feature allows you to manage routing control for both Kubernetes and non-Kubernetes communications. -#### CNI Community Popularity -The following table summarizes different GitHub metrics to give you an idea of each project's popularity and activity. This data was collected in January 2020. +## CNI Community Popularity + +The following table summarizes different GitHub metrics to give you an idea of each project's popularity and activity. This data was collected in January 2022. | Provider | Project | Stars | Forks | Contributors | | ---- | ---- | ---- | ---- | ---- | -| Canal | https://github.com/projectcalico/canal | 614 | 89 | 19 | -| flannel | https://github.com/coreos/flannel | 4977 | 1.4k | 140 | -| Calico | https://github.com/projectcalico/calico | 1534 | 429 | 135 | -| Weave | https://github.com/weaveworks/weave/ | 5737 | 559 | 73 | +| Canal | https://github.com/projectcalico/canal | 679 | 100 | 21 | +| Flannel | https://github.com/flannel-io/flannel | 7k | 2.5k | 185 | +| Calico | https://github.com/projectcalico/calico | 3.1k | 741 | 224 | +| Weave | https://github.com/weaveworks/weave/ | 6.2k | 635 | 84 | +| Cilium | https://github.com/cilium/cilium | 10.6k | 1.3k | 352 |
-### Which CNI Provider Should I Use? +## Which CNI Provider Should I Use? It depends on your project needs. There are many different providers, which each have various features and options. There isn't one provider that meets everyone's needs. Canal is the default CNI network provider. We recommend it for most use cases. It provides encapsulated networking for containers with Flannel, while adding Calico network policies that can provide project/namespace isolation in terms of networking. -### How can I configure a CNI network provider? +## How can I configure a CNI network provider? Please see [Cluster Options]({{}}/rancher/v2.6/en/cluster-provisioning/rke-clusters/options/) on how to configure a network provider for your cluster. For more advanced configuration options, please see how to configure your cluster using a [Config File]({{}}/rancher/v2.6/en/cluster-provisioning/rke-clusters/options/#cluster-config-file) and the options for [Network Plug-ins]({{}}/rke/latest/en/config-options/add-ons/network-plugins/). diff --git a/content/rancher/v2.6/en/helm-charts/_index.md b/content/rancher/v2.6/en/helm-charts/_index.md index f61e0c2ecfe..aab00dd91dd 100644 --- a/content/rancher/v2.6/en/helm-charts/_index.md +++ b/content/rancher/v2.6/en/helm-charts/_index.md @@ -5,6 +5,43 @@ weight: 11 In this section, you'll learn how to manage Helm chart repositories and applications in Rancher. Helm chart repositories are managed using **Apps & Marketplace**. It uses a catalog-like system to import bundles of charts from repositories and then uses those charts to either deploy custom Helm applications or Rancher's tools such as Monitoring or Istio. Rancher tools come as pre-loaded repositories which deploy as standalone Helm charts. Any additional repositories are only added to the current cluster. +### Changes in Rancher v2.6 + +Starting in Rancher v2.6.0, a new versioning scheme for Rancher feature charts was implemented. The changes are centered around the major version of the charts and the +up annotation for upstream charts, where applicable. + +**Major Version:** The major version of the charts is tied to Rancher minor versions. When you upgrade to a new Rancher minor version, you should ensure that all of your **Apps & Marketplace** charts are also upgraded to the correct release line for the chart. + +>**Note:** Any major versions that are less than the ones mentioned in the table below are meant for 2.5 and below only. For example, you are advised to not use <100.x.x versions of Monitoring in 2.6.x+. + +**Feature Charts:** + +| **Name** | **Supported Minimum Version** | **Supported Maximum Version** | +| ---------------- | ------------ | ------------ | +| external-ip-webhook | 100.0.0+up1.0.0 | 100.0.1+up1.0.1 | +| harvester-cloud-provider | 100.0.2+up0.1.12 | 100.0.2+up0.1.12 | +| harvester-csi-driver | 100.0.2+up0.1.11 | 100.0.2+up0.1.11 | +| rancher-alerting-drivers | 100.0.0 | 100.0.2 | +| rancher-backup | 2.0.1 | 2.1.2 | +| rancher-cis-benchmark | 2.0.1 | 2.0.4 | +| rancher-gatekeeper | 100.0.0+up3.6.0 | 100.1.0+up3.7.1 | +| rancher-istio | 100.0.0+up1.10.4 | 100.2.0+up1.12.6 | +| rancher-logging | 100.0.0+up3.12.0 | 100.1.2+up3.17.4 | +| rancher-longhorn | 100.0.0+up1.1.2 | 100.1.1+up1.2.3 | +| rancher-monitoring | 100.0.0+up16.6.0 | 100.1.0+up19.0.3 +| rancher-sriov (experimental) | 100.0.0+up0.1.0 | 100.0.3+up0.1.0 | +| rancher-vsphere-cpi | 100.3.0+up1.2.1 | 100.3.0+up1.2.1 | +| rancher-vsphere-csi | 100.3.0+up2.5.1-rancher1 | 100.3.0+up2.5.1-rancher1 | +| rancher-wins-upgrader | 0.0.100 | 100.0.0+up0.0.1 | +| neuvector | 100.0.0+up2.2.0 | 100.0.0+up2.2.0 | + +
+**Charts based on upstream:** For charts that are based on upstreams, the +up annotation should inform you of what upstream version the Rancher chart is tracking. Check the upstream version compatibility with Rancher during upgrades also. + +- As an example, `100.x.x+up16.6.0` for Monitoring tracks upstream kube-prometheus-stack `16.6.0` with some Rancher patches added to it. + +- On upgrades, ensure that you are not downgrading the version of the chart that you are using. For example, if you are using a version of Monitoring > `16.6.0` in Rancher 2.5, you should not upgrade to `100.x.x+up16.6.0`. Instead, you should upgrade to the appropriate version in the next release. + + ### Charts From the top-left menu select _"Apps & Marketplace"_ and you will be taken to the Charts page. @@ -25,6 +62,44 @@ From the left sidebar select _"Repositories"_. These items represent helm repositories, and can be either traditional helm endpoints which have an index.yaml, or git repositories which will be cloned and can point to a specific branch. In order to use custom charts, simply add your repository here and they will become available in the Charts tab under the name of the repository. +To add a private CA for Helm Chart repositories: + +- **HTTP-based chart repositories**: You must add a base64 encoded copy of the CA certificate in DER format to the spec.caBundle field of the chart repo, such as `openssl x509 -outform der -in ca.pem | base64 -w0`. Click **Edit YAML** for the chart repo and set, as in the following example:
+ ``` + [...] + spec: + caBundle: + MIIFXzCCA0egAwIBAgIUWNy8WrvSkgNzV0zdWRP79j9cVcEwDQYJKoZIhvcNAQELBQAwPzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQKDAtNeU9yZywgSW5jLjENMAsGA1UEAwwEcm9vdDAeFw0yMTEyMTQwODMyMTdaFw0yNDEwMDMwODMyMT + ... + nDxZ/tNXt/WPJr/PgEB3hQdInDWYMg7vGO0Oz00G5kWg0sJ0ZTSoA10ZwdjIdGEeKlj1NlPyAqpQ+uDnmx6DW+zqfYtLnc/g6GuLLVPamraqN+gyU8CHwAWPNjZonFN9Vpg0PIk1I2zuOc4EHifoTAXSpnjfzfyAxCaZsnTptimlPFJJqAMj+FfDArGmr4= + [...] + ``` + + +- **Git-based chart repositories**: You must add a base64 encoded copy of the CA certificate in DER format to the spec.caBundle field of the chart repo, such as `openssl x509 -outform der -in ca.pem | base64 -w0`. Click **Edit YAML** for the chart repo and set, as in the following example:
+ ``` + [...] + spec: + caBundle: + MIIFXzCCA0egAwIBAgIUWNy8WrvSkgNzV0zdWRP79j9cVcEwDQYJKoZIhvcNAQELBQAwPzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMRQwEgYDVQQKDAtNeU9yZywgSW5jLjENMAsGA1UEAwwEcm9vdDAeFw0yMTEyMTQwODMyMTdaFw0yNDEwMDMwODMyMT + ... + nDxZ/tNXt/WPJr/PgEB3hQdInDWYMg7vGO0Oz00G5kWg0sJ0ZTSoA10ZwdjIdGEeKlj1NlPyAqpQ+uDnmx6DW+zqfYtLnc/g6GuLLVPamraqN+gyU8CHwAWPNjZonFN9Vpg0PIk1I2zuOc4EHifoTAXSpnjfzfyAxCaZsnTptimlPFJJqAMj+FfDArGmr4= + [...] + ``` + + +> **Note:** Helm chart repositories with authentication +> +> As of Rancher v2.6.3, a new value `disableSameOriginCheck` has been added to the Repo.Spec. This allows users to bypass the same origin checks, sending the repository Authentication information as a Basic Auth Header with all API calls. This is not recommended but can be used as a temporary solution in cases of non-standard Helm chart repositories such as those that have redirects to a different origin URL. +> +> To use this feature for an existing Helm chart repository, click ⋮ > Edit YAML. On the `spec` portion of the YAML file, add `disableSameOriginCheck` and set it to `true`. +> +> ```yaml +[...] +spec: + disableSameOriginCheck: true +[...] +``` ### Helm Compatibility @@ -42,7 +117,21 @@ After installing a chart, you can find it in the _"Installed Apps"_ tab. In this Most Rancher tools have additional pages located in the toolbar below the _"Apps & Marketplace"_ section to help manage and use the features. These pages include links to dashboards, forms to easily add Custom Resources, and additional information. > If you are upgrading your chart using _"Customize Helm options before upgrade"_ , please be aware that using the _"--force"_ option may result in errors if your chart has immutable fields. This is because some objects in Kubernetes cannot be changed once they are created. To ensure you do not get this error you can: -> +> > * use the default upgrade option ( i.e do not use _"--force"_ option ) > * uninstall the existing chart and install the upgraded chart > * delete the resources with immutable fields from the cluster before performing the _"--force"_ upgrade + +#### Changes in Rancher v2.6.3 + +The upgrade button has been removed for legacy apps from the **Apps & Marketplace > Installed Apps** page. + +If you have a legacy app installed and want to upgrade it: + +- The legacy [feature flag]({{}}/rancher/v2.6/en/installation/resources/feature-flags/) must be turned on (if it's not turned on automatically because of having a legacy app before upgrading) +- You can upgrade the app from cluster explorer, from the left nav section **Legacy > Project > Apps** +- For multi-cluster apps, you can go to **≡ > Multi-cluster Apps** and upgrade the app from there + +### Limitations + +[Dashboard apps or Rancher feature charts](../helm-charts/) **cannot** be installed using the Rancher CLI. diff --git a/content/rancher/v2.6/en/installation/install-rancher-on-k8s/_index.md b/content/rancher/v2.6/en/installation/install-rancher-on-k8s/_index.md index 11b5f6c2def..5d97210cc95 100644 --- a/content/rancher/v2.6/en/installation/install-rancher-on-k8s/_index.md +++ b/content/rancher/v2.6/en/installation/install-rancher-on-k8s/_index.md @@ -17,7 +17,7 @@ In this section, you'll learn how to deploy Rancher on a Kubernetes cluster usin ### Kubernetes Cluster -Set up the Rancher server's local Kubernetes cluster. +Set up the Rancher server's local Kubernetes cluster. Rancher can be installed on any Kubernetes cluster. This cluster can use upstream Kubernetes, or it can use one of Rancher's Kubernetes distributions, or it can be a managed Kubernetes cluster from a provider such as Amazon EKS. @@ -104,8 +104,12 @@ There are three recommended options for the source of the certificate used for T ### 4. Install cert-manager +**Note:** New in v2.6.4, cert-manager versions 1.6.2 and 1.7.1 are compatible. We recommend v1.7.x because v 1.6.x will reach end-of-life on March 30, 2022. + > You should skip this step if you are bringing your own certificate files (option `ingress.tls.source=secret`), or if you use [TLS termination on an external load balancer]({{}}/rancher/v2.6/en/installation/install-rancher-on-k8s/chart-options/#external-tls-termination). +> You should skip this step if you are bringing your own certificate files (option `ingress.tls.source=secret`), or if you use [TLS termination on an external load balancer]({{}}/rancher/v2.6/en/installation/install-rancher-on-k8s/chart-options/#external-tls-termination). + This step is only required to use certificates issued by Rancher's generated CA (`ingress.tls.source=rancher`) or to request Let's Encrypt issued certificates (`ingress.tls.source=letsEncrypt`). {{% accordion id="cert-manager" label="Click to Expand" %}} @@ -116,7 +120,7 @@ These instructions are adapted from the [official cert-manager documentation](ht ``` # If you have installed the CRDs manually instead of with the `--set installCRDs=true` option added to your Helm install command, you should upgrade your CRD resources before upgrading the Helm chart: -kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.5.1/cert-manager.crds.yaml +kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.7.1/cert-manager.crds.yaml # Add the Jetstack Helm repository helm repo add jetstack https://charts.jetstack.io @@ -128,7 +132,7 @@ helm repo update helm install cert-manager jetstack/cert-manager \ --namespace cert-manager \ --create-namespace \ - --version v1.5.1 + --version v1.7.1 ``` Once you’ve installed cert-manager, you can verify it is deployed correctly by checking the cert-manager namespace for running pods: @@ -148,6 +152,10 @@ cert-manager-webhook-787858fcdb-nlzsq 1/1 Running 0 2m The exact command to install Rancher differs depending on the certificate configuration. +However, irrespective of the certificate configuration, the name of the Rancher installation in the `cattle-system` namespace should always be `rancher`. + +> **Tip for testing and development:** This final command to install Rancher requires a domain name that forwards traffic to Rancher. If you are using the Helm CLI to set up a proof-of-concept, you can use a fake domain name when passing the `hostname` option. An example of a fake domain name would be `.sslip.io`, which would expose Rancher on an IP where it is running. Production installs would require a real domain name. + {{% tabs %}} {{% tab "Rancher-generated Certificates" %}} @@ -158,7 +166,7 @@ Because `rancher` is the default option for `ingress.tls.source`, we are not spe - Set the `hostname` to the DNS name you pointed at your load balancer. - Set the `bootstrapPassword` to something unique for the `admin` user. -- If you are installing an alpha version, Helm requires adding the `--devel` option to the command. +- If you are installing an alpha version, Helm requires adding the `--devel` option to the command. - To install a specific Rancher version, use the `--version` flag, example: `--version 2.3.6` ``` @@ -181,7 +189,7 @@ deployment "rancher" successfully rolled out This option uses `cert-manager` to automatically request and renew [Let's Encrypt](https://letsencrypt.org/) certificates. This is a free service that provides you with a valid certificate as Let's Encrypt is a trusted CA. ->**Note:**: You need to have port 80 open as the HTTP-01 challenge can only be done on port 80. +>**Note:** You need to have port 80 open as the HTTP-01 challenge can only be done on port 80. In the following command, @@ -189,7 +197,8 @@ In the following command, - Set the `bootstrapPassword` to something unique for the `admin` user. - `ingress.tls.source` is set to `letsEncrypt` - `letsEncrypt.email` is set to the email address used for communication about your certificate (for example, expiry notices) -- If you are installing an alpha version, Helm requires adding the `--devel` option to the command. +- Set `letsEncrypt.ingress.class` to whatever your ingress controller is, e.g., `traefik`, `nginx`, `haproxy`, etc. +- If you are installing an alpha version, Helm requires adding the `--devel` option to the command. ``` helm install rancher rancher-/rancher \ @@ -197,7 +206,8 @@ helm install rancher rancher-/rancher \ --set hostname=rancher.my.org \ --set bootstrapPassword=admin \ --set ingress.tls.source=letsEncrypt \ - --set letsEncrypt.email=me@example.org + --set letsEncrypt.email=me@example.org \ + --set letsEncrypt.ingress.class=nginx ``` Wait for Rancher to be rolled out: @@ -221,7 +231,7 @@ Although an entry in the `Subject Alternative Names` is technically required, ha - Set the `hostname`. - Set the `bootstrapPassword` to something unique for the `admin` user. - Set `ingress.tls.source` to `secret`. -- If you are installing an alpha version, Helm requires adding the `--devel` option to the command. +- If you are installing an alpha version, Helm requires adding the `--devel` option to the command. ``` helm install rancher rancher-/rancher \ @@ -234,7 +244,7 @@ helm install rancher rancher-/rancher \ If you are using a Private CA signed certificate , add `--set privateCA=true` to the command: ``` -helm install rancher rancher-latest/rancher \ +helm install rancher rancher-/rancher \ --namespace cattle-system \ --set hostname=rancher.my.org \ --set bootstrapPassword=admin \ diff --git a/content/rancher/v2.6/en/installation/install-rancher-on-k8s/chart-options/_index.md b/content/rancher/v2.6/en/installation/install-rancher-on-k8s/chart-options/_index.md index 9ce31bc66f9..4436fcfe473 100644 --- a/content/rancher/v2.6/en/installation/install-rancher-on-k8s/chart-options/_index.md +++ b/content/rancher/v2.6/en/installation/install-rancher-on-k8s/chart-options/_index.md @@ -137,7 +137,7 @@ To customize or use a different ingress with Rancher server you can set your own Example on setting a custom certificate issuer: ```plain ---set ingress.extraAnnotations.'certmanager\.k8s\.io/cluster-issuer'=ca-key-pair +--set ingress.extraAnnotations.'cert-manager\.io/cluster-issuer'=issuer-name ``` Example on setting a static proxy header with `ingress.configurationSnippet`. This value is parsed like a template so variables can be used. diff --git a/content/rancher/v2.6/en/installation/install-rancher-on-k8s/upgrades/_index.md b/content/rancher/v2.6/en/installation/install-rancher-on-k8s/upgrades/_index.md index 562a1d8223b..cfe481e2b94 100644 --- a/content/rancher/v2.6/en/installation/install-rancher-on-k8s/upgrades/_index.md +++ b/content/rancher/v2.6/en/installation/install-rancher-on-k8s/upgrades/_index.md @@ -148,7 +148,13 @@ helm upgrade rancher rancher-/rancher \ ### Option B: Reinstalling Rancher and cert-manager -If you are currently running the cert-manger whose version is older than v0.11, and want to upgrade both Rancher and cert-manager to a newer version, then you need to reinstall both Rancher and cert-manger due to the API change in cert-manger v0.11. +If you are currently running the cert-manager whose version is 1.5 or below, and want to upgrade both Rancher and cert-manager to a new version (1.6+ in the case of cert-manager), then you need to re-install both Rancher and cert-manager due to the API change in cert-manager 1.6. This will also be necessary if you are upgrading from a version of cert manager below 0.11 to a version of cert-manager above 0.11. + +>**Important:** +> +>- New in v2.6.4, cert-manager versions 1.6.2 and 1.7.1 are compatible. We recommend v1.7.x because v 1.6.x will reach end-of-life on March 30, 2022. +> +>- Note that if you are below version 1.5 and want to go to 1.7, you should first upgrade to 1.6 as an intermediate step. Follow the cert-manager docs [here](https://cert-manager.io/docs/installation/upgrading/upgrading-1.5-1.6/) to do a 1.5 to 1.6 upgrade, and [here](https://cert-manager.io/docs/installation/upgrading/upgrading-1.6-1.7/) to then do a 1.6 to 1.7 upgrade. For more details on upgrading cert-manager, refer to our [documentation]({{}}/rancher/v2.6/en/installation/resources/upgrading-cert-manager). 1. Uninstall Rancher diff --git a/content/rancher/v2.6/en/installation/other-installation-methods/air-gap/install-rancher/_index.md b/content/rancher/v2.6/en/installation/other-installation-methods/air-gap/install-rancher/_index.md index d2be9a4a1ef..a739fd07987 100644 --- a/content/rancher/v2.6/en/installation/other-installation-methods/air-gap/install-rancher/_index.md +++ b/content/rancher/v2.6/en/installation/other-installation-methods/air-gap/install-rancher/_index.md @@ -94,8 +94,10 @@ helm repo update Fetch the latest cert-manager chart available from the [Helm chart repository](https://hub.helm.sh/charts/jetstack/cert-manager). +**Note:** New in v2.6.4, cert-manager versions 1.6.2 and 1.7.1 are compatible. We recommend v1.7.x because v 1.6.x will reach end-of-life on March 30, 2022. + ```plain -helm fetch jetstack/cert-manager --version v1.5.1 +helm fetch jetstack/cert-manager --version v1.7.1 ``` ### 3. Render the cert-manager template @@ -103,18 +105,19 @@ helm fetch jetstack/cert-manager --version v1.5.1 Render the cert-manager template with the options you would like to use to install the chart. Remember to set the `image.repository` option to pull the image from your private registry. This will create a `cert-manager` directory with the Kubernetes manifest files. ```plain -helm template cert-manager ./cert-manager-v1.5.1.tgz --output-dir . \ +helm template cert-manager ./cert-manager-v1.7.1.tgz --output-dir . \ --namespace cert-manager \ --set image.repository=/quay.io/jetstack/cert-manager-controller \ --set webhook.image.repository=/quay.io/jetstack/cert-manager-webhook \ - --set cainjector.image.repository=/quay.io/jetstack/cert-manager-cainjector + --set cainjector.image.repository=/quay.io/jetstack/cert-manager-cainjector \ + --set startupapicheck.image.repository=/quay.io/jetstack/cert-manager-ctl ``` ### 4. Download the cert-manager CRD Download the required CRD file for cert-manager: ```plain - curl -L -o cert-manager/cert-manager-crd.yaml https://github.com/jetstack/cert-manager/releases/download/v1.5.1/cert-manager.crds.yaml + curl -L -o cert-manager/cert-manager-crd.yaml https://github.com/jetstack/cert-manager/releases/download/v1.7.1/cert-manager.crds.yaml ``` ### 5. Render the Rancher template diff --git a/content/rancher/v2.6/en/installation/other-installation-methods/air-gap/populate-private-registry/_index.md b/content/rancher/v2.6/en/installation/other-installation-methods/air-gap/populate-private-registry/_index.md index 2c27c28bb2c..18c8817f76f 100644 --- a/content/rancher/v2.6/en/installation/other-installation-methods/air-gap/populate-private-registry/_index.md +++ b/content/rancher/v2.6/en/installation/other-installation-methods/air-gap/populate-private-registry/_index.md @@ -51,6 +51,8 @@ If you will use ARM64 hosts, the registry must support manifests. As of April 20 In a Kubernetes Install, if you elect to use the Rancher default self-signed TLS certificates, you must add the [`cert-manager`](https://hub.helm.sh/charts/jetstack/cert-manager) image to `rancher-images.txt` as well. +**Note:** New in v2.6.4, cert-manager versions 1.6.2 and 1.7.1 are compatible. We recommend v1.7.x because v 1.6.x will reach end-of-life on March 30, 2022. + 1. Fetch the latest `cert-manager` Helm chart and parse the template for image details: > **Note:** Recent changes to cert-manager require an upgrade. If you are upgrading Rancher and using a version of cert-manager older than v0.12.0, please see our [upgrade documentation]({{}}/rancher/v2.6/en/installation/resources/upgrading-cert-manager/). @@ -58,8 +60,8 @@ In a Kubernetes Install, if you elect to use the Rancher default self-signed TLS ```plain helm repo add jetstack https://charts.jetstack.io helm repo update - helm fetch jetstack/cert-manager --version v1.5.1 - helm template ./cert-manager-.tgz | grep -oP '(?<=image: ").*(?=")' >> ./rancher-images.txt + helm fetch jetstack/cert-manager --version v1.7.1 + helm template ./cert-manager-.tgz | awk '$1 ~ /image:/ {print $2}' | sed s/\"//g >> ./rancher-images.txt ``` 2. Sort and unique the images list to remove any overlap between the sources: @@ -230,7 +232,7 @@ The workstation must have Docker 18.02+ in order to support manifests, which are helm repo add jetstack https://charts.jetstack.io helm repo update helm fetch jetstack/cert-manager --version v0.12.0 - helm template ./cert-manager-.tgz | grep -oP '(?<=image: ").*(?=")' >> ./rancher-images.txt + helm template ./cert-manager-.tgz | awk '$1 ~ /image:/ {print $2}' | sed s/\"//g >> ./rancher-images.txt ``` 2. Sort and unique the images list to remove any overlap between the sources: diff --git a/content/rancher/v2.6/en/installation/other-installation-methods/air-gap/prepare-nodes/_index.md b/content/rancher/v2.6/en/installation/other-installation-methods/air-gap/prepare-nodes/_index.md index e054670c0a0..19cc8159774 100644 --- a/content/rancher/v2.6/en/installation/other-installation-methods/air-gap/prepare-nodes/_index.md +++ b/content/rancher/v2.6/en/installation/other-installation-methods/air-gap/prepare-nodes/_index.md @@ -142,7 +142,7 @@ For a how-to guide for setting up a DNS record to route domain traffic to an Ama Rancher supports air gap installs using a secure Docker private registry. You must have your own private registry or other means of distributing Docker images to your machines. -In a later step, when you set up your K3s Kubernetes cluster, you will create a [private registries configuration file]({{}}/k3s/latest/en/installation/private-registry/) with details from this registry. +In a later step, when you set up your RKE Kubernetes cluster, you will create a [private registries configuration file]({{}}/rke/latest/en/config-options/private-registries/) with details from this registry. If you need help with creating a private registry, please refer to the [official Docker documentation.](https://docs.docker.com/registry/deploying/#run-an-externally-accessible-registry) @@ -164,8 +164,6 @@ For an example of one way to set up Linux nodes, refer to this [tutorial]({{}}/k3s/latest/en/installation/private-registry/) with details from this registry. - If you need help with creating a private registry, please refer to the [official Docker documentation.](https://docs.docker.com/registry/) {{% /tab %}} diff --git a/content/rancher/v2.6/en/installation/other-installation-methods/behind-proxy/install-rancher/_index.md b/content/rancher/v2.6/en/installation/other-installation-methods/behind-proxy/install-rancher/_index.md index ae9faf9304b..c147692a558 100644 --- a/content/rancher/v2.6/en/installation/other-installation-methods/behind-proxy/install-rancher/_index.md +++ b/content/rancher/v2.6/en/installation/other-installation-methods/behind-proxy/install-rancher/_index.md @@ -23,15 +23,17 @@ kubectl create namespace cert-manager Install the CustomResourceDefinitions of cert-manager: +**Note:** New in v2.6.4, cert-manager versions 1.6.2 and 1.7.1 are compatible. We recommend v1.7.x because v 1.6.x will reach end-of-life on March 30, 2022. + ``` -kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.5.1/cert-manager.crds.yaml +kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.7.1/cert-manager.crds.yaml ``` And install it with Helm. Note that cert-manager also needs your proxy configured in case it needs to communicate with Let's Encrypt or other external certificate issuers: ``` helm upgrade --install cert-manager jetstack/cert-manager \ - --namespace cert-manager --version v1.5.1 \ + --namespace cert-manager --version v1.7.1 \ --set http_proxy=http://${proxy_host} \ --set https_proxy=http://${proxy_host} \ --set no_proxy=127.0.0.0/8\\,10.0.0.0/8\\,cattle-system.svc\\,172.16.0.0/12\\,192.168.0.0/16\\,.svc\\,.cluster.local @@ -64,8 +66,8 @@ And install Rancher with Helm. Rancher also needs a proxy configuration so that helm upgrade --install rancher rancher-latest/rancher \ --namespace cattle-system \ --set hostname=rancher.example.com \ - --set proxy=http://${proxy_host} - --set no_proxy=127.0.0.0/8\\,10.0.0.0/8\\,cattle-system.svc\\,172.16.0.0/12\\,192.168.0.0/16\\,.svc\\,.cluster.local + --set proxy=http://${proxy_host} \ + --set noProxy=127.0.0.0/8\\,10.0.0.0/8\\,cattle-system.svc\\,172.16.0.0/12\\,192.168.0.0/16\\,.svc\\,.cluster.local ``` After waiting for the deployment to finish: diff --git a/content/rancher/v2.6/en/installation/other-installation-methods/behind-proxy/launch-kubernetes/_index.md b/content/rancher/v2.6/en/installation/other-installation-methods/behind-proxy/launch-kubernetes/_index.md index b47128310e9..41428448b27 100644 --- a/content/rancher/v2.6/en/installation/other-installation-methods/behind-proxy/launch-kubernetes/_index.md +++ b/content/rancher/v2.6/en/installation/other-installation-methods/behind-proxy/launch-kubernetes/_index.md @@ -9,7 +9,7 @@ Once the infrastructure is ready, you can continue with setting up an RKE cluste First, you have to install Docker and setup the HTTP proxy on all three Linux nodes. For this perform the following steps on all three nodes. -For convenience export the IP address and port of your proxy into an environment variable and set up the HTTP_PROXY variables for your current shell: +For convenience, export the IP address and port of your proxy into an environment variable and set up the HTTP_PROXY variables for your current shell: ``` export proxy_host="10.0.0.5:8888" @@ -58,6 +58,24 @@ sudo systemctl daemon-reload sudo systemctl restart docker ``` +#### Air-gapped proxy + +_New in v2.6.4_ + +You can now provision node driver clusters from an air-gapped cluster configured to use a proxy for outbound connections. + +In addition to setting the default rules for a proxy server, you will need to add additional rules, shown below, to provision node driver clusters from a proxied Rancher environment. + +You will configure your filepath according to your setup, e.g., `/etc/apt/apt.conf.d/proxy.conf`: + +``` +acl SSL_ports port 22 +acl SSL_ports port 2376 + +acl Safe_ports port 22 # ssh +acl Safe_ports port 2376 # docker port +``` + ### Creating the RKE Cluster You need several command line tools on the host where you have SSH access to the Linux nodes to create and interact with the cluster: diff --git a/content/rancher/v2.6/en/installation/other-installation-methods/single-node-docker/_index.md b/content/rancher/v2.6/en/installation/other-installation-methods/single-node-docker/_index.md index c047052f024..a52c192fe83 100644 --- a/content/rancher/v2.6/en/installation/other-installation-methods/single-node-docker/_index.md +++ b/content/rancher/v2.6/en/installation/other-installation-methods/single-node-docker/_index.md @@ -44,14 +44,13 @@ Choose from the following options: - [Option B: Bring Your Own Certificate, Self-signed](#option-b-bring-your-own-certificate-self-signed) - [Option C: Bring Your Own Certificate, Signed by a Recognized CA](#option-c-bring-your-own-certificate-signed-by-a-recognized-ca) - [Option D: Let's Encrypt Certificate](#option-d-let-s-encrypt-certificate) +- [Option E: Localhost tunneling, no Certificate](#option-e-localhost-tunneling-no-certificate) ### Option A: Default Rancher-generated Self-signed Certificate If you are installing Rancher in a development or testing environment where identity verification isn't a concern, install Rancher using the self-signed certificate that it generates. This installation option omits the hassle of generating a certificate yourself. -Log into your Linux host, and then run the minimum installation command below. - -Privileged access is [required.](#privileged-access-for-rancher) +Log into your host, and run the command below: ```bash docker run -d --restart=unless-stopped \ @@ -78,7 +77,7 @@ After creating your certificate, run the Docker command below to install Rancher | `` | The path to the private key for your certificate. | | `` | The path to the certificate authority's certificate. | -Privileged access is [required.](#privileged-access-for-rancher) +Log into your host, and run the command below: ```bash docker run -d --restart=unless-stopped \ @@ -92,7 +91,9 @@ docker run -d --restart=unless-stopped \ ### Option C: Bring Your Own Certificate, Signed by a Recognized CA -In production environments where you're exposing an app publicly, use a certificate signed by a recognized CA so that your user base doesn't encounter security warnings. +In production environments where you're exposing an app publicly, you would use a certificate signed by a recognized CA so that your user base doesn't encounter security warnings. + +The Docker install is not recommended for production. These instructions are provided for testing and development purposes only. > **Prerequisites:** > @@ -110,7 +111,7 @@ After obtaining your certificate, run the Docker command below. | `` | The path to your full certificate chain. | | `` | The path to the private key for your certificate. | -Privileged access is [required.](#privileged-access-for-rancher) +Log into your host, and run the command below: ```bash docker run -d --restart=unless-stopped \ @@ -128,6 +129,8 @@ docker run -d --restart=unless-stopped \ For production environments, you also have the option of using [Let's Encrypt](https://letsencrypt.org/) certificates. Let's Encrypt uses an http-01 challenge to verify that you have control over your domain. You can confirm that you control the domain by pointing the hostname that you want to use for Rancher access (for example, `rancher.mydomain.com`) to the IP of the machine it is running on. You can bind the hostname to the IP address by creating an A record in DNS. +The Docker install is not recommended for production. These instructions are provided for testing and development purposes only. + > **Prerequisites:** > > - Let's Encrypt is an Internet service. Therefore, this option cannot be used in an internal/air gapped network. @@ -140,7 +143,7 @@ After you fulfill the prerequisites, you can install Rancher using a Let's Encry | ----------------- | ------------------- | | `` | Your domain address | -Privileged access is [required.](#privileged-access-for-rancher) +Log into your host, and run the command below: ``` docker run -d --restart=unless-stopped \ @@ -150,6 +153,22 @@ docker run -d --restart=unless-stopped \ --acme-domain ``` +### Option E: Localhost tunneling, no Certificate + +If you are installing Rancher in a development or testing environment where you have a localhost tunneling solution running, such as [ngrok](https://ngrok.com/), avoid generating a certificate. This installation option doesn't require a certificate. + +- You will use `--no-cacerts` in the argument to disable the default CA certificate generated by Rancher. + +Log into your host, and run the command below: + +```bash +docker run -d --restart=unless-stopped \ + -p 80:80 -p 443:443 \ + --privileged \ + rancher/rancher:latest \ + --no-cacerts +``` + ## Advanced Options When installing Rancher on a single node with Docker, there are several advanced options that can be enabled: diff --git a/content/rancher/v2.6/en/installation/other-installation-methods/single-node-docker/proxy/_index.md b/content/rancher/v2.6/en/installation/other-installation-methods/single-node-docker/proxy/_index.md index 1ac4a66c017..37d3d2cfc00 100644 --- a/content/rancher/v2.6/en/installation/other-installation-methods/single-node-docker/proxy/_index.md +++ b/content/rancher/v2.6/en/installation/other-installation-methods/single-node-docker/proxy/_index.md @@ -40,3 +40,21 @@ docker run -d --restart=unless-stopped \ ``` Privileged access is [required.]({{}}/rancher/v2.6/en/installation/other-installation-methods/single-node-docker/#privileged-access-for-rancher) + +### Air-gapped proxy configuration + +_New in v2.6.4_ + +You can now provision node driver clusters from an air-gapped cluster configured to use a proxy for outbound connections. + +In addition to setting the default rules for a proxy server as shown above, you will need to add additional rules, shown below, to provision node driver clusters from a proxied Rancher environment. + +You will configure your filepath according to your setup, e.g., `/etc/apt/apt.conf.d/proxy.conf`: + +``` +acl SSL_ports port 22 +acl SSL_ports port 2376 + +acl Safe_ports port 22 # ssh +acl Safe_ports port 2376 # docker port +``` \ No newline at end of file diff --git a/content/rancher/v2.6/en/installation/other-installation-methods/single-node-docker/single-node-upgrades/_index.md b/content/rancher/v2.6/en/installation/other-installation-methods/single-node-docker/single-node-upgrades/_index.md index 7ee1d1f9328..3b03de02a22 100644 --- a/content/rancher/v2.6/en/installation/other-installation-methods/single-node-docker/single-node-upgrades/_index.md +++ b/content/rancher/v2.6/en/installation/other-installation-methods/single-node-docker/single-node-upgrades/_index.md @@ -5,9 +5,11 @@ weight: 1010 The following instructions will guide you through upgrading a Rancher server that was installed with Docker. +> **Docker installs are not supported in production environments.** These instructions are provided for testing and development purposes only. If you have already deployed a Docker install in production and need to upgrade to a new Rancher version, we recommend [migrating to the Helm chart install]({{}}/rancher/v2.6/en/backups/migrating-rancher/) before upgrading. + # Prerequisites -- **Review the [known upgrade issues]({{}}/rancher/v2.6/en/installation/install-rancher-on-k8s/upgrades/#known-upgrade-issues) in the Rancher documentation for the most noteworthy issues to consider when upgrading Rancher. A more complete list of known issues for each Rancher version can be found in the release notes on [GitHub](https://github.com/rancher/rancher/releases) and on the [Rancher forums.](https://forums.rancher.com/c/announcements/12) Note that upgrades to or from any chart in the [rancher-alpha repository]({{}}/rancher/v2.6/en/installation/install-rancher-on-k8s/chart-options/#helm-chart-repositories/) aren’t supported. +- **Review the [known upgrade issues]({{}}/rancher/v2.6/en/installation/install-rancher-on-k8s/upgrades/#known-upgrade-issues)** section in the Rancher documentation for the most noteworthy issues to consider when upgrading Rancher. A more complete list of known issues for each Rancher version can be found in the release notes on [GitHub](https://github.com/rancher/rancher/releases) and on the [Rancher forums](https://forums.rancher.com/c/announcements/12). Note that upgrades to or from any chart in the [rancher-alpha repository]({{}}/rancher/v2.6/en/installation/install-rancher-on-k8s/chart-options/#helm-chart-repositories/) aren’t supported. - **For [air gap installs only,]({{}}/rancher/v2.6/en/installation/other-installation-methods/air-gap) collect and populate images for the new Rancher server version**. Follow the guide to [populate your private registry]({{}}/rancher/v2.6/en/installation/other-installation-methods/air-gap/populate-private-registry/) with the images for the Rancher version that you want to upgrade to. # Placeholder Review @@ -80,7 +82,7 @@ During upgrade, you create a copy of the data from your current Rancher containe ``` - docker run --volumes-from rancher-data -v $PWD:/backup busybox tar zcvf /backup/rancher-data-backup--.tar.gz /var/lib/rancher + docker run --volumes-from rancher-data -v "$PWD:/backup" --rm busybox tar zcvf /backup/rancher-data-backup--.tar.gz /var/lib/rancher ``` **Step Result:** When you enter this command, a series of commands should run. diff --git a/content/rancher/v2.6/en/installation/requirements/_index.md b/content/rancher/v2.6/en/installation/requirements/_index.md index 9f1c959f73b..f515e688580 100644 --- a/content/rancher/v2.6/en/installation/requirements/_index.md +++ b/content/rancher/v2.6/en/installation/requirements/_index.md @@ -68,7 +68,7 @@ net.bridge.bridge-nf-call-iptables=1 For the container runtime, K3s should work with any modern version of Docker or containerd. -Rancher needs to be installed on a supported Kubernetes version. To find out which versions of Kubernetes are supported for your Rancher version, refer to the [support maintenance terms.](https://rancher.com/support-maintenance-terms/) To specify the K3s version, use the INSTALL_K3S_VERSION environment variable when running the K3s installation script. +Rancher needs to be installed on a supported Kubernetes version. To find out which versions of Kubernetes are supported for your Rancher version, refer to the [support maintenance terms.](https://rancher.com/support-maintenance-terms/) To specify the K3s version, use the INSTALL_K3S_VERSION environment variable when running the K3s installation script. If you are installing Rancher on a K3s cluster with **Raspbian Buster**, follow [these steps]({{}}/k3s/latest/en/advanced/#enabling-legacy-iptables-on-raspbian-buster) to switch to legacy iptables. @@ -82,8 +82,6 @@ For details on which OS versions were tested with RKE2, refer to the [support ma Docker is not required for RKE2 installs. -The Ingress should be deployed as DaemonSet to ensure your load balancer can successfully route traffic to all nodes. Currently, RKE2 deploys nginx-ingress as a deployment by default, so you will need to deploy it as a DaemonSet by following [these steps.]({{}}/rancher/v2.6/en/installation/resources/k8s-tutorials/ha-rke2/#5-configure-nginx-to-be-a-daemonset) - ### Installing Docker Docker is required for Helm chart installs, and it can be installed by following the steps in the official [Docker documentation.](https://docs.docker.com/) Rancher also provides [scripts]({{}}/rancher/v2.6/en/installation/requirements/installing-docker) to install Docker with one command. @@ -110,7 +108,7 @@ These requirements apply to RKE Kubernetes clusters, as well as to hosted Kubern | X-Large | Up to 1000 | Up to 10,000 | 16 | 64 GB | | XX-Large | Up to 2000 | Up to 20,000 | 32 | 128 GB | -[Contact Rancher](https://rancher.com/contact/) for more than 2000 clusters and/or 20,000 nodes. +Every use case and environment is different. Please [contact Rancher](https://rancher.com/contact/) to review yours. ### K3s Kubernetes @@ -124,7 +122,7 @@ These CPU and memory requirements apply to each host in a [K3s Kubernetes cluste | X-Large | Up to 1000 | Up to 10,000 | 16 | 64 GB | 2 cores, 4 GB + 1000 IOPS | | XX-Large | Up to 2000 | Up to 20,000 | 32 | 128 GB | 2 cores, 4 GB + 1000 IOPS | -[Contact Rancher](https://rancher.com/contact/) for more than 2000 clusters and/or 20,000 nodes. +Every use case and environment is different. Please [contact Rancher](https://rancher.com/contact/) to review yours. ### RKE2 Kubernetes @@ -151,7 +149,7 @@ Each node in the Kubernetes cluster that Rancher is installed on should run an I The Ingress should be deployed as DaemonSet to ensure your load balancer can successfully route traffic to all nodes. -For RKE and K3s installations, you don't have to install the Ingress manually because is is installed by default. +For RKE and K3s installations, you don't have to install the Ingress manually because it is installed by default. For hosted Kubernetes clusters (EKS, GKE, AKS) and RKE2 Kubernetes installations, you will need to set up the ingress. @@ -170,6 +168,8 @@ Rancher performance depends on etcd in the cluster performance. To ensure optima This section describes the networking requirements for the node(s) where the Rancher server is installed. +> If a server containing Rancher has the `X-Frame-Options=DENY` header, some pages in the new Rancher UI will not be able to render after upgrading from the legacy UI. This is because some legacy pages are embedded as iFrames in the new UI. + ### Node IP Addresses Each node used should have a static IP configured, regardless of whether you are installing Rancher on a single node or on an HA cluster. In case of DHCP, each node should have a DHCP reservation to make sure the node gets the same IP allocated. @@ -180,12 +180,4 @@ To operate properly, Rancher requires a number of ports to be open on Rancher no # Dockershim Support -In Kubernetes v1.20, the dockershim became deprecated, and Docker became deprecated as a container runtime for Kubernetes. Dockershim was built into Kubernetes as a type of adapter that allowed Kubernetes to manage Docker containers. It was necessary because the Docker Daemon was not compliant with the CRI (Container Runtime Interface) that was created for Kubernetes. The dockershim is still included in the kubelet in Kubernetes v1.20. - -Rancher plans to implement the [upstream open source community Dockershim announced by Mirantis and Docker](https://www.mirantis.com/blog/mirantis-to-take-over-support-of-kubernetes-dockershim-2/) to ensure RKE clusters can continue to leverage Docker as their container runtime. Users of RKE will be able to continue upgrading and building new RKE clusters leveraging Docker as the runtime and install method. - -For users looking to use another container runtime, Rancher has the edge-focused K3s and datacenter-focused RKE2 Kubernetes distributions that use containerd as the default runtime. Imported RKE2 and K3s Kubernetes clusters can then be upgraded and managed through Rancher going forward. - -For more information on the deprecation of Docker as a container runtime for Kubernetes, see the [official Kubernetes blog post](https://kubernetes.io/blog/2020/12/02/dont-panic-kubernetes-and-docker/) and the [official blog post from Mirantis.](https://www.mirantis.com/blog/mirantis-to-take-over-support-of-kubernetes-dockershim-2/) - -The dockershim deprecation schedule is tracked by the upstream Kubernetes community in [Kubernetes Enhancement Proposal (KEP) 1985.](https://github.com/kubernetes/enhancements/tree/master/keps/sig-node/1985-remove-dockershim) \ No newline at end of file +For more information on Dockershim support, refer to [this page]({{}}/rancher/v2.6/en/installation/requirements/dockershim/). diff --git a/content/rancher/v2.6/en/installation/requirements/dockershim/_index.md b/content/rancher/v2.6/en/installation/requirements/dockershim/_index.md new file mode 100644 index 00000000000..e4c3490c4b2 --- /dev/null +++ b/content/rancher/v2.6/en/installation/requirements/dockershim/_index.md @@ -0,0 +1,44 @@ +--- +title: Dockershim +weight: 300 +--- + +The Dockershim is the CRI compliant layer between the Kubelet and the Docker daemon. As part of the Kubernetes 1.20 release, the [deprecation of the in-tree Dockershim was announced](https://kubernetes.io/blog/2020/12/02/dont-panic-kubernetes-and-docker/). For more information on the deprecation and its timelines, see the [Kubernetes Dockershim Deprecation FAQ](https://kubernetes.io/blog/2020/12/02/dockershim-faq/#when-will-dockershim-be-removed). + +RKE clusters now support the external Dockershim to continue leveraging Docker as the CRI runtime. We now implement the upstream open source community external Dockershim announced by [Mirantis and Docker](https://www.mirantis.com/blog/mirantis-to-take-over-support-of-kubernetes-dockershim-2/) to ensure RKE clusters can continue to leverage Docker. + +To enable the external Dockershim, configure the following option. + +``` +enable_cri_dockerd: true +``` + +For users looking to use another container runtime, Rancher has the edge-focused K3s and datacenter-focused RKE2 Kubernetes distributions that use containerd as the default runtime. Imported RKE2 and K3s Kubernetes clusters can then be upgraded and managed through Rancher going forward. + +### FAQ + +
+ +Q. Do I have to upgrade Rancher to get Rancher’s support of the upstream Dockershim? + +A The upstream support of Dockershim begins for RKE in Kubernetes 1.21. You will need to be on a version of Rancher that supports RKE 1.21. See our support matrix for details. + +
+ +Q. I am currently on RKE with Kubernetes 1.20. Do I need to upgrade to RKE with Kubernetes 1.21 sooner to avoid being out of support for Dockershim? + +A. The version of Dockershim in RKE with Kubernetes 1.20 will continue to work and it is not deprecated until a later release. For information on the timeline, see the [Kubernetes Dockershim Deprecation FAQ](https://kubernetes.io/blog/2020/12/02/dockershim-faq/#when-will-dockershim-be-removed). It will only emit a warning of its future deprecation, which Rancher has mitigated in RKE with Kubernetes 1.21. You can plan your upgrade to 1.21 as you would normally. + +
+ +Q: What are my other options if I don’t want to depend on the Dockershim? + +A: You can use a runtime like containerd with Kubernetes that does not require Dockershim support. RKE2 or K3s are two options for doing this. + +
+ +Q: If I am already using RKE1 and want to switch to RKE2, what are my migration options? + +A: Today, you can stand up a new cluster and migrate workloads to a new RKE2 cluster that uses containerd. Rancher is exploring the possibility of an in-place upgrade path. + +
diff --git a/content/rancher/v2.6/en/installation/requirements/installing-docker/_index.md b/content/rancher/v2.6/en/installation/requirements/installing-docker/_index.md index 02a005d245f..8b16d157505 100644 --- a/content/rancher/v2.6/en/installation/requirements/installing-docker/_index.md +++ b/content/rancher/v2.6/en/installation/requirements/installing-docker/_index.md @@ -3,7 +3,7 @@ title: Installing Docker weight: 1 --- -For Helm CLI installs, Docker is required to be installed on any node that runs the Rancher server. +Docker is required to be installed on nodes where the Rancher server will be installed with Helm or Docker. There are a couple of options for installing Docker. One option is to refer to the [official Docker documentation](https://docs.docker.com/install/) about how to install Docker on Linux. The steps will vary based on the Linux distribution. diff --git a/content/rancher/v2.6/en/installation/requirements/ports/_index.md b/content/rancher/v2.6/en/installation/requirements/ports/_index.md index 9e724310864..a9eaaf1bd81 100644 --- a/content/rancher/v2.6/en/installation/requirements/ports/_index.md +++ b/content/rancher/v2.6/en/installation/requirements/ports/_index.md @@ -88,6 +88,7 @@ The following tables break down the port requirements for traffic between the Ra | TCP | 2379 | etcd client requests | | TCP | 2380 | etcd peer communication | | TCP | 6443 | Kubernetes apiserver | +| TCP | 8443 | Nginx Ingress's Validating Webhook | | UDP | 8472 | Canal/Flannel VXLAN overlay networking | | TCP | 9099 | Canal/Flannel livenessProbe/readinessProbe | | TCP | 10250 | Metrics server communication with all nodes | diff --git a/content/rancher/v2.6/en/installation/resources/advanced/firewall/_index.md b/content/rancher/v2.6/en/installation/resources/advanced/firewall/_index.md index 291cee6d594..69c1afae91d 100644 --- a/content/rancher/v2.6/en/installation/resources/advanced/firewall/_index.md +++ b/content/rancher/v2.6/en/installation/resources/advanced/firewall/_index.md @@ -3,7 +3,7 @@ title: Opening Ports with firewalld weight: 1 --- -> We recommend disabling firewalld. For Kubernetes 1.19, firewalld must be turned off. +> We recommend disabling firewalld. For Kubernetes 1.19.x and higher, firewalld must be turned off. Some distributions of Linux [derived from RHEL,](https://en.wikipedia.org/wiki/Red_Hat_Enterprise_Linux#Rebuilds) including Oracle Linux, may have default firewall rules that block communication with Helm. diff --git a/content/rancher/v2.6/en/installation/resources/feature-flags/_index.md b/content/rancher/v2.6/en/installation/resources/feature-flags/_index.md index a3fac147dad..25baf0c06a2 100644 --- a/content/rancher/v2.6/en/installation/resources/feature-flags/_index.md +++ b/content/rancher/v2.6/en/installation/resources/feature-flags/_index.md @@ -26,12 +26,12 @@ For example, if you install Rancher, then set a feature flag to true with the Ra The following is a list of the feature flags available in Rancher: - `harvester`: This feature flag is available starting in v2.6.1. It is used to manage access to the Virtualization Management page where users can navigate directly to Harvester clusters and access the Harvester UI. For more information, see [this page]({{}}/rancher/v2.6/en/virtualization-admin/#feature-flag/). -- `rke2`: We have introduced the ability to provision RKE2 clusters as tech preview. By default, this feature flag is enabled, which allows users to attempt to provision these type of clusters. +- `rke2`: Used to enable the ability to provision RKE2 clusters. By default, this feature flag is enabled, which allows users to attempt to provision these type of clusters. - `fleet`: The previous `fleet` feature flag is now required to be enabled as the Fleet capabilities are leveraged within the new provisioning framework. If you had this feature flag disabled in earlier versions, upon upgrading to Rancher v2.6, the flag will automatically be enabled. See this [page]({{}}/rancher/v2.6/en/deploy-across-clusters/fleet) for more information. - `continuous-delivery`: In Rancher v2.5.x, Fleet came with a GitOps feature that could not be disabled separately from Fleet. In Rancher v2.6, the `continuous-delivery` feature flag was introduced to allow the GitOps feature of Fleet to be disabled. For more information, see [this page.](./continuous-delivery). - `legacy`: There are a set of features from previous versions that are slowly being phased out of Rancher for newer iterations of the feature. This is a mix of deprecated features as well as features that will eventually be moved to newer variations in Rancher. By default, this feature flag is disabled for new installations. If you are upgrading from a previous version, this feature flag would be enabled. - `token-hashing`: Used to enable new token-hashing feature. Once enabled, existing tokens will be hashed and all new tokens will be hashed automatically using the SHA256 algorithm. Once a token is hashed it cannot be undone. Once this feature flag is enabled, it cannot be disabled. See [hashing of tokens]({{}}/rancher/v2.6/en/api/api-tokens) for more information. -- `unsupported-storage-drivers`: This feature [allows unsupported storage drivers.]({{}}/rancher/v2.6/en/installation/resources/feature-flags/enable-not-default-storage-drivers). In other words, it enables types for storage providers and provisioners that are not enabled by default. +- `unsupported-storage-drivers`: This feature [allows unsupported storage drivers.]({{}}/rancher/v2.6/en/installation/resources/feature-flags/enable-not-default-storage-drivers). In other words, it enables types for storage providers and provisioners that are not enabled by default. - `istio-virtual-service-ui`: This feature enables a [UI to create, read, update, and delete Istio virtual services and destination rules,]({{}}/rancher/v2.6/en/installation/resources/feature-flags/istio-virtual-service-ui) which are traffic management features of Istio. - `multi-cluster-management`: Used for multi-cluster provisioning and management of Kubernetes clusters. This feature flag can only be set at install time and not changed afterwards. @@ -61,7 +61,7 @@ When you install Rancher, enable the feature you want with a feature flag. The c > **Note:** Values set from the Rancher API will override the value passed in through the command line. -When installing Rancher with a Helm chart, use the `--features` option. In the below example, two features are enabled by passing the feature flag names names in a comma separated list: +When installing Rancher with a Helm chart, use the `--set` option. In the below example, two features are enabled by passing the feature flag names in a comma separated list: ``` helm install rancher rancher-latest/rancher \ @@ -102,7 +102,7 @@ When installing Rancher with Docker, use the `--features` option. In the below e docker run -d -p 80:80 -p 443:443 \ --restart=unless-stopped \ rancher/rancher:rancher-latest \ - --features==true,=true + --features==true,=true ``` diff --git a/content/rancher/v2.6/en/installation/resources/installing-docker/_index.md b/content/rancher/v2.6/en/installation/resources/installing-docker/_index.md deleted file mode 100644 index 69be5eb6baa..00000000000 --- a/content/rancher/v2.6/en/installation/resources/installing-docker/_index.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Installing Docker -weight: 1 ---- - -Docker is required to be installed on nodes where the Rancher server will be installed with Helm or Docker. - -There are a couple of options for installing Docker. One option is to refer to the [official Docker documentation](https://docs.docker.com/install/) about how to install Docker on Linux. The steps will vary based on the Linux distribution. - -Another option is to use one of Rancher's Docker installation scripts, which are available for most recent versions of Docker. - -For example, this command could be used to install Docker 19.03 on Ubuntu: - -``` -curl https://releases.rancher.com/install-docker/19.03.sh | sh -``` - -Rancher has installation scripts for every version of upstream Docker that Kubernetes supports. To find out whether a script is available for installing a certain Docker version, refer to this [GitHub repository,](https://github.com/rancher/install-docker) which contains all of Rancher's Docker installation scripts. \ No newline at end of file diff --git a/content/rancher/v2.6/en/installation/resources/k8s-tutorials/ha-RKE/_index.md b/content/rancher/v2.6/en/installation/resources/k8s-tutorials/ha-RKE/_index.md index 65ab4409c3d..ce46ab810c0 100644 --- a/content/rancher/v2.6/en/installation/resources/k8s-tutorials/ha-RKE/_index.md +++ b/content/rancher/v2.6/en/installation/resources/k8s-tutorials/ha-RKE/_index.md @@ -80,6 +80,8 @@ ingress: > Please see the [RKE Documentation]({{}}/rke/latest/en/config-options/) for the full list of options and capabilities. > > For tuning your etcd cluster for larger Rancher installations, see the [etcd settings guide]({{}}/rancher/v2.6/en/installation/resources/advanced/etcd/). +> +> For more information regarding Dockershim support, refer to [this page]({{}}/rancher/v2.6/en/installation/requirements/dockershim/) ### 2. Run RKE diff --git a/content/rancher/v2.6/en/installation/resources/k8s-tutorials/ha-rke2/_index.md b/content/rancher/v2.6/en/installation/resources/k8s-tutorials/ha-rke2/_index.md index 6c72adfaf09..f69c494b175 100644 --- a/content/rancher/v2.6/en/installation/resources/k8s-tutorials/ha-rke2/_index.md +++ b/content/rancher/v2.6/en/installation/resources/k8s-tutorials/ha-rke2/_index.md @@ -5,7 +5,7 @@ weight: 2 --- _Tested on v2.5.6_ -This section describes how to install a Kubernetes cluster according to the [best practices for the Rancher server environment.]({{}}/rancher/v2.x/en/overview/architecture-recommendations/#environment-for-kubernetes-installations) +This section describes how to install a Kubernetes cluster according to the [best practices for the Rancher server environment.]({{}}/rancher/v2.6/en/overview/architecture-recommendations/#environment-for-kubernetes-installations) # Prerequisites @@ -89,7 +89,7 @@ To use this `kubeconfig` file, 1. Install [kubectl,](https://kubernetes.io/docs/tasks/tools/install-kubectl/#install-kubectl) a Kubernetes command-line tool. 2. Copy the file at `/etc/rancher/rke2/rke2.yaml` and save it to the directory `~/.kube/config` on your local machine. -3. In the kubeconfig file, the `server` directive is defined as localhost. Configure the server as the DNS of your load balancer, referring to port 6443. (The Kubernetes API server will be reached at port 6443, while the Rancher server will be reached at ports 80 and 443.) Here is an example `rke2.yaml`: +3. In the kubeconfig file, the `server` directive is defined as localhost. Configure the server as the DNS of your control-plane load balancer, on port 6443. (The RKE2 Kubernetes API Server uses port 6443, while the Rancher server will be served via the NGINX Ingress on ports 80 and 443.) Here is an example `rke2.yaml`: ```yml apiVersion: v1 @@ -128,55 +128,40 @@ Now that you have set up the `kubeconfig` file, you can use `kubectl` to access Check that all the required pods and containers are healthy are ready to continue: ``` - /var/lib/rancher/rke2/bin/kubectl --kubeconfig /etc/rancher/rke2/rke2.yaml get pods -A -NAMESPACE NAME READY STATUS RESTARTS AGE -kube-system etcd-ip-172-31-18-145 1/1 Running 0 4m37s -kube-system etcd-ip-172-31-25-73 1/1 Running 0 20m -kube-system etcd-ip-172-31-31-210 1/1 Running 0 9m12s -kube-system helm-install-rke2-canal-th9k9 0/1 Completed 0 21m -kube-system helm-install-rke2-coredns-6njr6 0/1 Completed 0 21m -kube-system helm-install-rke2-ingress-nginx-vztsd 0/1 Completed 0 21m -kube-system helm-install-rke2-kube-proxy-6std5 0/1 Completed 0 21m -kube-system helm-install-rke2-metrics-server-9sl7m 0/1 Completed 0 21m -kube-system kube-apiserver-ip-172-31-18-145 1/1 Running 0 4m22s -kube-system kube-apiserver-ip-172-31-25-73 1/1 Running 0 20m -kube-system kube-apiserver-ip-172-31-31-210 1/1 Running 0 9m8s -kube-system kube-controller-manager-ip-172-31-18-145 1/1 Running 0 4m8s -kube-system kube-controller-manager-ip-172-31-25-73 1/1 Running 0 21m -kube-system kube-controller-manager-ip-172-31-31-210 1/1 Running 0 8m55s -kube-system kube-proxy-57twm 1/1 Running 0 10m -kube-system kube-proxy-f7pc6 1/1 Running 0 5m24s -kube-system kube-proxy-rj4t5 1/1 Running 0 21m -kube-system kube-scheduler-ip-172-31-18-145 1/1 Running 0 4m15s -kube-system kube-scheduler-ip-172-31-25-73 1/1 Running 0 21m -kube-system kube-scheduler-ip-172-31-31-210 1/1 Running 0 8m48s -kube-system rke2-canal-4x972 2/2 Running 0 10m -kube-system rke2-canal-flh8m 2/2 Running 0 5m24s -kube-system rke2-canal-zfhkr 2/2 Running 0 21m -kube-system rke2-coredns-rke2-coredns-6cd96645d6-cmstq 1/1 Running 0 21m -kube-system rke2-ingress-nginx-controller-54946dd48f-6mp76 1/1 Running 0 20m -kube-system rke2-ingress-nginx-default-backend-5795954f8-p92xx 1/1 Running 0 20m -kube-system rke2-metrics-server-5f9b5757dc-k5sgh 1/1 Running 0 20m +/var/lib/rancher/rke2/bin/kubectl --kubeconfig /etc/rancher/rke2/rke2.yaml get pods -A +NAMESPACE NAME READY STATUS RESTARTS AGE +kube-system cloud-controller-manager-rke2-server-1 1/1 Running 0 2m28s +kube-system cloud-controller-manager-rke2-server-2 1/1 Running 0 61s +kube-system cloud-controller-manager-rke2-server-3 1/1 Running 0 49s +kube-system etcd-rke2-server-1 1/1 Running 0 2m13s +kube-system etcd-rke2-server-2 1/1 Running 0 87s +kube-system etcd-rke2-server-3 1/1 Running 0 56s +kube-system helm-install-rke2-canal-hs6sx 0/1 Completed 0 2m17s +kube-system helm-install-rke2-coredns-xmzm8 0/1 Completed 0 2m17s +kube-system helm-install-rke2-ingress-nginx-flwnl 0/1 Completed 0 2m17s +kube-system helm-install-rke2-metrics-server-7sggn 0/1 Completed 0 2m17s +kube-system kube-apiserver-rke2-server-1 1/1 Running 0 116s +kube-system kube-apiserver-rke2-server-2 1/1 Running 0 66s +kube-system kube-apiserver-rke2-server-3 1/1 Running 0 48s +kube-system kube-controller-manager-rke2-server-1 1/1 Running 0 2m30s +kube-system kube-controller-manager-rke2-server-2 1/1 Running 0 57s +kube-system kube-controller-manager-rke2-server-3 1/1 Running 0 42s +kube-system kube-proxy-rke2-server-1 1/1 Running 0 2m25s +kube-system kube-proxy-rke2-server-2 1/1 Running 0 59s +kube-system kube-proxy-rke2-server-3 1/1 Running 0 85s +kube-system kube-scheduler-rke2-server-1 1/1 Running 0 2m30s +kube-system kube-scheduler-rke2-server-2 1/1 Running 0 57s +kube-system kube-scheduler-rke2-server-3 1/1 Running 0 42s +kube-system rke2-canal-b9lvm 2/2 Running 0 91s +kube-system rke2-canal-khwp2 2/2 Running 0 2m5s +kube-system rke2-canal-swfmq 2/2 Running 0 105s +kube-system rke2-coredns-rke2-coredns-547d5499cb-6tvwb 1/1 Running 0 92s +kube-system rke2-coredns-rke2-coredns-547d5499cb-rdttj 1/1 Running 0 2m8s +kube-system rke2-coredns-rke2-coredns-autoscaler-65c9bb465d-85sq5 1/1 Running 0 2m8s +kube-system rke2-ingress-nginx-controller-69qxc 1/1 Running 0 52s +kube-system rke2-ingress-nginx-controller-7hprp 1/1 Running 0 52s +kube-system rke2-ingress-nginx-controller-x658h 1/1 Running 0 52s +kube-system rke2-metrics-server-6564db4569-vdfkn 1/1 Running 0 66s ``` **Result:** You have confirmed that you can access the cluster with `kubectl` and the RKE2 cluster is running successfully. Now the Rancher management server can be installed on the cluster. - -### 5. Configure nginx to be a daemonset - -Currently, RKE2 deploys nginx-ingress as a deployment, and that can impact the Rancher deployment so that you cannot use all servers to proxy requests to the Rancher pods. - -To rectify that, place the following file in /var/lib/rancher/rke2/server/manifests on any of the server nodes: - -```yaml -apiVersion: helm.cattle.io/v1 -kind: HelmChartConfig -metadata: - name: rke2-ingress-nginx - namespace: kube-system -spec: - valuesContent: |- - controller: - kind: DaemonSet - daemonset: - useHostPort: true -``` diff --git a/content/rancher/v2.6/en/installation/resources/k8s-tutorials/infrastructure-tutorials/infra-for-rke2-ha/_index.md b/content/rancher/v2.6/en/installation/resources/k8s-tutorials/infrastructure-tutorials/infra-for-rke2-ha/_index.md index 82eb68522f7..e03f8ccc868 100644 --- a/content/rancher/v2.6/en/installation/resources/k8s-tutorials/infrastructure-tutorials/infra-for-rke2-ha/_index.md +++ b/content/rancher/v2.6/en/installation/resources/k8s-tutorials/infrastructure-tutorials/infra-for-rke2-ha/_index.md @@ -17,9 +17,9 @@ To install the Rancher management server on a high-availability RKE2 cluster, we ### 1. Set up Linux Nodes -Make sure that your nodes fulfill the general installation requirements for [OS, container runtime, hardware, and networking.]({{}}/rancher/v2.x/en/installation/requirements/) +Make sure that your nodes fulfill the general installation requirements for [OS, container runtime, hardware, and networking.]({{}}/rancher/v2.6/en/installation/requirements/) -For an example of one way to set up Linux nodes, refer to this [tutorial]({{}}/rancher/v2.x/en/installation/resources/k8s-tutorials/infrastructure-tutorials/ec2-node) for setting up nodes as instances in Amazon EC2. +For an example of one way to set up Linux nodes, refer to this [tutorial]({{}}/rancher/v2.6/en/installation/resources/k8s-tutorials/infrastructure-tutorials/ec2-node) for setting up nodes as instances in Amazon EC2. ### 2. Set up the Load Balancer @@ -32,11 +32,11 @@ When Rancher is installed (also in a later step), the Rancher system creates an For your implementation, consider if you want or need to use a Layer-4 or Layer-7 load balancer: - **A layer-4 load balancer** is the simpler of the two choices, in which you are forwarding TCP traffic to your nodes. We recommend configuring your load balancer as a Layer 4 balancer, forwarding traffic to ports TCP/80 and TCP/443 to the Rancher management cluster nodes. The Ingress controller on the cluster will redirect HTTP traffic to HTTPS and terminate SSL/TLS on port TCP/443. The Ingress controller will forward traffic to port TCP/80 to the Ingress pod in the Rancher deployment. -- **A layer-7 load balancer** is a bit more complicated but can offer features that you may want. For instance, a layer-7 load balancer is capable of handling TLS termination at the load balancer, as opposed to Rancher doing TLS termination itself. This can be beneficial if you want to centralize your TLS termination in your infrastructure. Layer-7 load balancing also offers the capability for your load balancer to make decisions based on HTTP attributes such as cookies, etc. that a layer-4 load balancer is not able to concern itself with. If you decide to terminate the SSL/TLS traffic on a layer-7 load balancer, you will need to use the `--set tls=external` option when installing Rancher in a later step. For more information, refer to the [Rancher Helm chart options.]({{}}/rancher/v2.x/en/installation/resources/chart-options/#external-tls-termination) +- **A layer-7 load balancer** is a bit more complicated but can offer features that you may want. For instance, a layer-7 load balancer is capable of handling TLS termination at the load balancer, as opposed to Rancher doing TLS termination itself. This can be beneficial if you want to centralize your TLS termination in your infrastructure. Layer-7 load balancing also offers the capability for your load balancer to make decisions based on HTTP attributes such as cookies, etc. that a layer-4 load balancer is not able to concern itself with. If you decide to terminate the SSL/TLS traffic on a layer-7 load balancer, you will need to use the `--set tls=external` option when installing Rancher in a later step. For more information, refer to the [Rancher Helm chart options.]({{}}/rancher/v2.6/en/installation/resources/chart-options/#external-tls-termination) For an example showing how to set up an NGINX load balancer, refer to [this page.]({{}}/rancher/v2.6/en/installation/resources/k8s-tutorials/infrastructure-tutorials/nginx/) -For a how-to guide for setting up an Amazon ELB Network Load Balancer, refer to [this page.]({{}}/rancher/v2.x/en/installation/resources/k8s-tutorials/infrastructure-tutorials/nlb/) +For a how-to guide for setting up an Amazon ELB Network Load Balancer, refer to [this page.]({{}}/rancher/v2.6/en/installation/resources/k8s-tutorials/infrastructure-tutorials/nlb/) > **Important:** > Do not use this load balancer (i.e, the `local` cluster Ingress) to load balance applications other than Rancher following installation. Sharing this Ingress with other applications may result in websocket errors to Rancher following Ingress configuration reloads for other apps. We recommend dedicating the `local` cluster to Rancher and no other applications. diff --git a/content/rancher/v2.6/en/installation/resources/tls-secrets/_index.md b/content/rancher/v2.6/en/installation/resources/tls-secrets/_index.md index e977c983669..cd11f1e9684 100644 --- a/content/rancher/v2.6/en/installation/resources/tls-secrets/_index.md +++ b/content/rancher/v2.6/en/installation/resources/tls-secrets/_index.md @@ -35,4 +35,4 @@ kubectl -n cattle-system create secret generic tls-ca \ # Updating a Private CA Certificate -Follow the steps on [this page]({{}}/rancher/v2.x/en/installation/resources/update-ca-cert) to update the SSL certificate of the ingress in a Rancher [high availability Kubernetes installation]({{}}/rancher/v2.6/en/installation/install-rancher-on-k8s/) or to switch from the default self-signed certificate to a custom certificate. \ No newline at end of file +Follow the steps on [this page]({{}}/rancher/v2.6/en/installation/resources/update-ca-cert) to update the SSL certificate of the ingress in a Rancher [high availability Kubernetes installation]({{}}/rancher/v2.6/en/installation/install-rancher-on-k8s/) or to switch from the default self-signed certificate to a custom certificate. \ No newline at end of file diff --git a/content/rancher/v2.6/en/installation/resources/update-ca-cert/_index.md b/content/rancher/v2.6/en/installation/resources/update-ca-cert/_index.md index 5a7a477fa82..057ca0f8c77 100644 --- a/content/rancher/v2.6/en/installation/resources/update-ca-cert/_index.md +++ b/content/rancher/v2.6/en/installation/resources/update-ca-cert/_index.md @@ -11,6 +11,7 @@ A summary of the steps is as follows: 2. Create or update the `tls-ca` Kubernetes secret resource with the root CA certificate (only required when using a private CA). 3. Update the Rancher installation using the Helm CLI. 4. Reconfigure the Rancher agents to trust the new CA certificate. +5. Select Force Update of Fleet clusters to connect fleet-agent to Rancher. The details of these instructions are below. @@ -132,7 +133,7 @@ Using a Kubeconfig for each downstream cluster update the environment variable f ``` $ kubectl edit -n cattle-system ds/cattle-node-agent -$ kubectl edit -n cattle-system deployment/cluster-agent +$ kubectl edit -n cattle-system deployment/cattle-cluster-agent ``` ### Method 3: Recreate Rancher agents @@ -143,3 +144,11 @@ First, generate the agent definitions as described here: https://gist.github.com Then, connect to a controlplane node of the downstream cluster via SSH, create a Kubeconfig and apply the definitions: https://gist.github.com/superseb/b14ed3b5535f621ad3d2aa6a4cd6443b + +# 5. Select Force Update of Fleet clusters to connect fleet-agent to Rancher + +Select 'Force Update' for the clusters within the [Continuous Delivery]({{}}/rancher/v2.6/en/deploy-across-clusters/fleet/#accessing-fleet-in-the-rancher-ui) view of the Rancher UI to allow the fleet-agent in downstream clusters to successfully connect to Rancher. + +### Why is this step required? + +Fleet agents in Rancher managed clusters store kubeconfig that is used to connect to the Rancher proxied kube-api in the fleet-agent secret of the fleet-system namespace. The kubeconfig contains a certificate-authority-data block containing the Rancher CA. When changing the Rancher CA, this block needs to be updated for a successful connection of the fleet-agent to Rancher. diff --git a/content/rancher/v2.6/en/installation/resources/upgrading-cert-manager/_index.md b/content/rancher/v2.6/en/installation/resources/upgrading-cert-manager/_index.md index da62f1e9deb..f3b21f8aed0 100644 --- a/content/rancher/v2.6/en/installation/resources/upgrading-cert-manager/_index.md +++ b/content/rancher/v2.6/en/installation/resources/upgrading-cert-manager/_index.md @@ -15,7 +15,7 @@ To address these changes, this guide will do two things: 1. Explain the cert-manager API changes and link to cert-manager's official documentation for migrating your data > **Important:** -> If you are currently running the cert-manger whose version is older than v0.11, and want to upgrade both Rancher and cert-manager to a newer version, you need to reinstall both of them: +> If you are currently running the cert-manager whose version is 1.5 or below, and want to upgrade both Rancher and cert-manager to a new version (1.6+ in the case of cert-manager), then you need to re-install both Rancher and cert-manager due to the API change in cert-manager 1.6. This will also be necessary if you are upgrading from a version of cert manager below 0.11 to a version of cert-manager above 0.11. Follow the steps below: > 1. Take a one-time snapshot of your Kubernetes cluster running Rancher server > 2. Uninstall Rancher, cert-manager, and the CustomResourceDefinition for cert-manager @@ -220,6 +220,13 @@ cert-manager-webhook-787858fcdb-nlzsq 1/1 Running 0 2m ## Cert-Manager API change and data migration +--- +_New in v2.6.4_ + +Rancher now supports cert-manager versions 1.6.2 and 1.7.1. We recommend v1.7.x because v 1.6.x will reach end-of-life on March 30, 2022. To read more, see the [cert-manager docs]({{}}/rancher/v2.6/en/installation/install-rancher-on-k8s/#4-install-cert-manager). For instructions on upgrading cert-manager from version 1.5 to 1.6, see the upstream cert-manager documentation [here](https://cert-manager.io/docs/installation/upgrading/upgrading-1.5-1.6/). For instructions on upgrading cert-manager from version 1.6 to 1.7, see the upstream cert-manager documentation [here](https://cert-manager.io/docs/installation/upgrading/upgrading-1.6-1.7/). + +--- + Cert-manager has deprecated the use of the `certificate.spec.acme.solvers` field and will drop support for it completely in an upcoming release. Per the cert-manager documentation, a new format for configuring ACME certificate resources was introduced in v0.8. Specifically, the challenge solver configuration field was moved. Both the old format and new are supported as of v0.9, but support for the old format will be dropped in an upcoming release of cert-manager. The cert-manager documentation strongly recommends that after upgrading you update your ACME Issuer and Certificate resources to the new format. diff --git a/content/rancher/v2.6/en/k8s-in-rancher/load-balancers-and-ingress/ingress/_index.md b/content/rancher/v2.6/en/k8s-in-rancher/load-balancers-and-ingress/ingress/_index.md index 3ca7dc768d4..bb69c198262 100644 --- a/content/rancher/v2.6/en/k8s-in-rancher/load-balancers-and-ingress/ingress/_index.md +++ b/content/rancher/v2.6/en/k8s-in-rancher/load-balancers-and-ingress/ingress/_index.md @@ -14,6 +14,7 @@ Ingresses can be added for workloads to provide load balancing, SSL termination 1. Enter a **Name** for the ingress. 1. Create ingress forwarding **Rules**. For help configuring the rules, refer to [this section.](#ingress-rule-configuration) If any of your ingress rules handle requests for encrypted ports, add a certificate to encrypt/decrypt communications. 1. **Optional:** click **Add Rule** to create additional ingress rules. For example, after you create ingress rules to direct requests for your hostname, you'll likely want to create a default backend to handle 404s. +1. Click **Create** at the bottom right. **Result:** Your ingress is added to the project. The ingress begins enforcing your ingress rules. diff --git a/content/rancher/v2.6/en/k8s-in-rancher/registries/_index.md b/content/rancher/v2.6/en/k8s-in-rancher/registries/_index.md index c5494e3d61e..0b075b620d0 100644 --- a/content/rancher/v2.6/en/k8s-in-rancher/registries/_index.md +++ b/content/rancher/v2.6/en/k8s-in-rancher/registries/_index.md @@ -14,13 +14,13 @@ Deployments use the Kubernetes registry secret to authenticate with a private Do Currently, deployments pull the private registry credentials automatically only if the workload is created in the Rancher UI and not when it is created via kubectl. -# Creating a Registry +# Creating a Registry in Namespaces >**Prerequisites:** You must have a [private registry](https://docs.docker.com/registry/deploying/) available to use. 1. In the upper left corner, click **☰ > Cluster Management**. 1. Go to the cluster where you want to add a registry and click **Explore**. -1. In the left navigation lick **More Resources > Core > Secrets**. +1. In the left navigation, click either **Storage > Secrets** or **More Resources > Core > Secrets**. 1. Click **Create**. 1. Click **Registry**. 1. Enter a **Name** for the registry. @@ -28,17 +28,46 @@ Currently, deployments pull the private registry credentials automatically only >**Note:** Kubernetes classifies secrets, certificates, and registries all as [secrets](https://kubernetes.io/docs/concepts/configuration/secret/), and no two secrets in a project or namespace can have duplicate names. Therefore, to prevent conflicts, your registry must have a unique name among all secrets within your workspace. 1. Select a namespace for the registry. - 1. Select the website that hosts your private registry. Then enter credentials that authenticate with the registry. For example, if you use DockerHub, provide your DockerHub username and password. - 1. Click **Save**. **Result:** - Your secret is added to the namespace you chose. -- You can view the secret in the Rancher UI from the **Resources > Registries** view. +- You can view the secret in the Rancher UI by clicking either **Storage > Secrets** or **More Resources > Core > Secrets**. - Any workload that you create in the Rancher UI will have the credentials to access the registry if the workload is within the registry's scope. +# Creating a Registry in Projects + +>**Prerequisites:** You must have a [private registry](https://docs.docker.com/registry/deploying/) available to use. + +Before v2.6, secrets were required to be in a project scope. Projects are no longer required, and you may use the namespace scope instead. As a result, the Rancher UI was updated to reflect this new functionality. However, you may still create a project-scoped registry if desired. Use the following steps to do so: + +1. In the upper left corner, click **☰ > Global Settings** in the dropdown. +1. Click **Feature Flags**. +1. Go to the `legacy` feature flag and click **Activate**. +1. In the upper left corner, click **☰ > Cluster Management**. +1. Go to the cluster where you want to add a registry and click **Explore**. +1. In the left navigation, click either **Storage > Secrets** or **More Resources > Core > Secrets**. +1. Click **Create**. +1. Click **Registry**. +1. In the top navigation bar, filter to see only one project. +1. Enter a **Name** for the registry. + + >**Note:** Kubernetes classifies secrets, certificates, and registries all as [secrets](https://kubernetes.io/docs/concepts/configuration/secret/), and no two secrets in a project or namespace can have duplicate names. Therefore, to prevent conflicts, your registry must have a unique name among all secrets within your workspace. + +1. Select a namespace for the registry. +1. Select the website that hosts your private registry. Then enter credentials that authenticate with the registry. For example, if you use DockerHub, provide your DockerHub username and password. +1. Click **Save**. + +**Result:** + +- Your secret is added to the individual project you chose. +- You can view the secret in the Rancher UI by clicking either **Storage > Secrets** or **More Resources > Core > Secrets**. +- Any workload that you create in the Rancher UI will have the credentials to access the registry if the workload is within the registry's scope. + +>**Note:** Project-scoped registries on the local cluster are only visible when a single project is selected. + # Using a Private Registry You can deploy a workload with an image from a private registry through the Rancher UI, or with `kubectl`. diff --git a/content/rancher/v2.6/en/k8s-in-rancher/secrets/_index.md b/content/rancher/v2.6/en/k8s-in-rancher/secrets/_index.md index 0663d4f1bc3..9c7f74220ea 100644 --- a/content/rancher/v2.6/en/k8s-in-rancher/secrets/_index.md +++ b/content/rancher/v2.6/en/k8s-in-rancher/secrets/_index.md @@ -11,17 +11,17 @@ When configuring a workload, you'll be able to choose which secrets to include. Mounted secrets will be updated automatically unless they are mounted as subpath volumes. For details on how updated secrets are propagated, refer to the [Kubernetes documentation.](https://kubernetes.io/docs/concepts/configuration/secret/#mounted-secrets-are-updated-automatically) -# Creating Secrets +# Creating Secrets in Namespaces 1. In the upper left corner, click **☰ > Cluster Management**. 1. Go to the cluster where you want to add a secret and click **Explore**. -1. Click **More Resources > Core > Secrets**. +1. To navigate to secrets, you may click either **Storage > Secrets** or **More Resources > Core > Secrets**. 1. Click **Create**. 1. Select the type of secret you want to create. 1. Select a **Namespace** for the secret. 1. Enter a **Name** for the secret. - >**Note:** Kubernetes classifies secrets, certificates, and registries all as [secrets](https://kubernetes.io/docs/concepts/configuration/secret/), and no two secrets in a project or namespace can have duplicate names. Therefore, to prevent conflicts, your secret must have a unique name among all secrets within your workspace. + >**Note:** Kubernetes classifies secrets, certificates, and registries all as [secrets](https://kubernetes.io/docs/concepts/configuration/secret/), and no two secrets in a namespace can have duplicate names. Therefore, to prevent conflicts, your secret must have a unique name among all secrets within your workspace. 1. From **Data**, click **Add** to add a key-value pair. Add as many values as you need. @@ -31,12 +31,31 @@ Mounted secrets will be updated automatically unless they are mounted as subpath 1. Click **Save**. -**Result:** Your secret is added to the project or namespace, depending on the scope you chose. You can view the secret in the Rancher UI from the **Resources > Secrets** view. +**Result:** Your secret is added to the namespace you chose. You can view the secret in the Rancher UI by clicking either **Storage > Secrets** or **More Resources > Core > Secrets**. Mounted secrets will be updated automatically unless they are mounted as subpath volumes. For details on how updated secrets are propagated, refer to the [Kubernetes documentation.](https://kubernetes.io/docs/concepts/configuration/secret/#mounted-secrets-are-updated-automatically) + +# Creating Secrets in Projects + +Before v2.6, secrets were required to be in a project scope. Projects are no longer required, and you may use the namespace scope instead. As a result, the Rancher UI was updated to reflect this new functionality. However, you may still create project-scoped secrets if desired. Note that you have to first enable the `legacy` feature flag and look at a single project to do so. Use the following steps to set up your project-level secret: + +1. In the upper left corner, click **☰ > Global Settings** in the dropdown. +1. Click **Feature Flags**. +1. Go to the `legacy` feature flag and click **Activate**. +1. In the upper left corner, click **☰ > Cluster Management** in the dropdown. +1. Go to the cluster that you created and click **Explore.** +1. Click **Legacy > Projects**. +1. In the top navigation bar, filter to see only one project. +1. In the left navigation bar, click **Secrets**. +1. Click **Add Secret**. + +**Result:** Your secret is added to the individual project you chose. You can view the secret in the Rancher UI by clicking either **Storage > Secrets** or **More Resources > Core > Secrets**. + +>**Note:** Project-scoped secrets on the local cluster are only visible when a single project is selected. + # What's Next? -Now that you have a secret added to the project or namespace, you can add it to a workload that you deploy. +Now that you have a secret added to a namespace, you can add it to a workload that you deploy. For more information on adding secret to a workload, see [Deploying Workloads]({{}}/rancher/v2.6/en/k8s-in-rancher/workloads/deploy-workloads/). diff --git a/content/rancher/v2.6/en/k8s-in-rancher/workloads/upgrade-workloads/_index.md b/content/rancher/v2.6/en/k8s-in-rancher/workloads/upgrade-workloads/_index.md index be8c09f7792..f6804adb2ea 100644 --- a/content/rancher/v2.6/en/k8s-in-rancher/workloads/upgrade-workloads/_index.md +++ b/content/rancher/v2.6/en/k8s-in-rancher/workloads/upgrade-workloads/_index.md @@ -16,6 +16,6 @@ When a new version of an application image is released on Docker Hub, you can up These options control how the upgrade rolls out to containers that are currently running. For example, for scalable deployments, you can choose whether you want to stop old pods before deploying new ones, or vice versa, as well as the upgrade batch size. -1. Click **Upgrade**. +1. Click **Save**. **Result:** The workload begins upgrading its containers, per your specifications. Note that scaling up the deployment or updating the upgrade/scaling policy won't result in the pods recreation. diff --git a/content/rancher/v2.6/en/logging/custom-resource-config/flows/_index.md b/content/rancher/v2.6/en/logging/custom-resource-config/flows/_index.md index f4ffeb05cfb..2ad4991dc8f 100644 --- a/content/rancher/v2.6/en/logging/custom-resource-config/flows/_index.md +++ b/content/rancher/v2.6/en/logging/custom-resource-config/flows/_index.md @@ -3,7 +3,7 @@ title: Flows and ClusterFlows weight: 1 --- -For the full details on configuring `Flows` and `ClusterFlows`, see the [Banzai Cloud Logging operator documentation.](https://banzaicloud.com/docs/one-eye/logging-operator/configuration/output/) +For the full details on configuring `Flows` and `ClusterFlows`, see the [Banzai Cloud Logging operator documentation.](https://banzaicloud.com/docs/one-eye/logging-operator/configuration/flow/) - [Configuration](#configuration) - [YAML Example](#yaml-example) diff --git a/content/rancher/v2.6/en/longhorn/_index.md b/content/rancher/v2.6/en/longhorn/_index.md index ad14ffbb067..fc3d2e2ac91 100644 --- a/content/rancher/v2.6/en/longhorn/_index.md +++ b/content/rancher/v2.6/en/longhorn/_index.md @@ -6,7 +6,7 @@ weight: 19 [Longhorn](https://longhorn.io/) is a lightweight, reliable and easy-to-use distributed block storage system for Kubernetes. -Longhorn is free, open source software. Originally developed by Rancher Labs, it is now being developed as a sandbox project of the Cloud Native Computing Foundation. It can be installed on any Kubernetes cluster with Helm, with kubectl, or with the Rancher UI. You can learn more about its architecture [here.](https://longhorn.io/docs/1.0.2/concepts/) +Longhorn is free, open source software. Originally developed by Rancher Labs, it is now being developed as a sandbox project of the Cloud Native Computing Foundation. It can be installed on any Kubernetes cluster with Helm, with kubectl, or with the Rancher UI. You can learn more about its architecture [here.](https://longhorn.io/docs/latest/concepts/) With Longhorn, you can: @@ -24,12 +24,12 @@ With Longhorn, you can: ### Installing Longhorn with Rancher -1. Fulfill all [Installation Requirements.](https://longhorn.io/docs/1.1.0/deploy/install/#installation-requirements) +1. Fulfill all [Installation Requirements.](https://longhorn.io/docs/latest/deploy/install/#installation-requirements) 1. Go to the cluster where you want to install Longhorn. 1. Click **Apps & Marketplace**. 1. Click **Charts**. 1. Click **Longhorn**. -1. Optional: To customize the initial settings, click **Longhorn Default Settings** and edit the configuration. For help customizing the settings, refer to the [Longhorn documentation.](https://longhorn.io/docs/1.0.2/references/settings/) +1. Optional: To customize the initial settings, click **Longhorn Default Settings** and edit the configuration. For help customizing the settings, refer to the [Longhorn documentation.](https://longhorn.io/docs/latest/references/settings/) 1. Click **Install**. **Result:** Longhorn is deployed in the Kubernetes cluster. @@ -64,7 +64,7 @@ Longhorn creates a dedicated storage controller for each volume and synchronousl The storage controller and replicas are themselves orchestrated using Kubernetes. -You can learn more about its architecture [here.](https://longhorn.io/docs/1.0.2/concepts/) +You can learn more about its architecture [here.](https://longhorn.io/docs/latest/concepts/)
Longhorn Architecture
![Longhorn Architecture]({{}}/img/rancher/longhorn-architecture.svg) diff --git a/content/rancher/v2.6/en/monitoring-alerting/configuration/_index.md b/content/rancher/v2.6/en/monitoring-alerting/configuration/_index.md index 078bf7f31e4..876031fb4d7 100644 --- a/content/rancher/v2.6/en/monitoring-alerting/configuration/_index.md +++ b/content/rancher/v2.6/en/monitoring-alerting/configuration/_index.md @@ -11,6 +11,8 @@ For information on configuring custom scrape targets and rules for Prometheus, p The resource requests and limits for the monitoring application can be configured when installing `rancher-monitoring`. For more information about the default limits, see [this page.](./helm-chart-options/#configuring-resource-limits-and-requests) +>**Note:** On an idle cluster, Monitoring V2 has significantly higher CPU usage (up to 70%) as compared to Monitoring V1. To improve performance and achieve similar results as in Monitoring V1, turn off the Prometheus adapter. + # Prometheus Configuration It is usually not necessary to directly edit the Prometheus custom resource. diff --git a/content/rancher/v2.6/en/monitoring-alerting/configuration/receiver/_index.md b/content/rancher/v2.6/en/monitoring-alerting/configuration/receiver/_index.md index d1754f86d81..3a9daaeb6ce 100644 --- a/content/rancher/v2.6/en/monitoring-alerting/configuration/receiver/_index.md +++ b/content/rancher/v2.6/en/monitoring-alerting/configuration/receiver/_index.md @@ -24,7 +24,6 @@ The [Alertmanager Config](https://prometheus.io/docs/alerting/latest/configurati - [Trusted CA for Notifiers](#trusted-ca-for-notifiers) # Creating Receivers in the Rancher UI -_Available as of v2.5.4_ > **Prerequisites:** > @@ -33,11 +32,27 @@ _Available as of v2.5.4_ To create notification receivers in the Rancher UI, -1. Go to the cluster where you want to create receivers. Click **Monitoring** and click **Receiver**. +{{% tabs %}} +{{% tab "Rancher v2.6.5+" %}} + +1. Go to the cluster where you want to create receivers. Click **Monitoring -> Alerting -> AlertManagerConfigs**. +1. Ciick **Create**. +1. Click **Add Receiver**. +1. Enter a **Name** for the receiver. +1. Configure one or more providers for the receiver. For help filling out the forms, refer to the configuration options below. +1. Click **Create**. + +{{% /tab %}} +{{% tab "Rancher before v2.6.5" %}} + +1. Go to the cluster where you want to create receivers. Click **Monitoring** and click **Receiver**. 2. Enter a name for the receiver. 3. Configure one or more providers for the receiver. For help filling out the forms, refer to the configuration options below. 4. Click **Create**. +{{% /tab %}} +{{% /tabs %}} + **Result:** Alerts can be configured to send notifications to the receiver(s). # Receiver Configuration @@ -72,7 +87,7 @@ The custom receiver option can be used to configure any receiver in YAML that ca | Field | Type | Description | |------|--------------|------| | URL | String | Enter your Slack webhook URL. For instructions to create a Slack webhook, see the [Slack documentation.](https://get.slack.help/hc/en-us/articles/115005265063-Incoming-WebHooks-for-Slack) | -| Default Channel | String | Enter the name of the channel that you want to send alert notifications in the following format: `#`. | +| Default Channel | String | Enter the name of the channel that you want to send alert notifications in the following format: `#`. | | Proxy URL | String | Proxy for the webhook notifications. | | Enable Send Resolved Alerts | Bool | Whether to send a follow-up notification if an alert has been resolved (e.g. [Resolved] High CPU Usage). | @@ -81,7 +96,7 @@ The custom receiver option can be used to configure any receiver in YAML that ca | Field | Type | Description | |------|--------------|------| | Default Recipient Address | String | The email address that will receive notifications. | -| Enable Send Resolved Alerts | Bool | Whether to send a follow-up notification if an alert has been resolved (e.g. [Resolved] High CPU Usage). | +| Enable Send Resolved Alerts | Bool | Whether to send a follow-up notification if an alert has been resolved (e.g. [Resolved] High CPU Usage). | SMTP options: @@ -100,7 +115,7 @@ SMTP options: | Integration Type | String | `Events API v2` or `Prometheus`. | | Default Integration Key | String | For instructions to get an integration key, see the [PagerDuty documentation.](https://www.pagerduty.com/docs/guides/prometheus-integration-guide/) | | Proxy URL | String | Proxy for the PagerDuty notifications. | -| Enable Send Resolved Alerts | Bool | Whether to send a follow-up notification if an alert has been resolved (e.g. [Resolved] High CPU Usage). | +| Enable Send Resolved Alerts | Bool | Whether to send a follow-up notification if an alert has been resolved (e.g. [Resolved] High CPU Usage). | # Opsgenie @@ -172,7 +187,7 @@ The SMS receiver is not a native receiver and must be enabled before it can be u 1. In the upper left corner, click **☰ > Cluster Management**. 1. On the **Clusters** page, go to the cluster where you want to install `rancher-alerting-drivers` and click **Explore**. -1. In the left navigation bar, click +1. In the left navigation bar, click 1. Click the **Alerting Drivers** app. 1. Click the **Helm Deploy Options** tab 1. Select the **SMS** option and click **Install**. @@ -224,11 +239,11 @@ You can also set up multiple receivers by using the `continue` option for a rout To set up notifications via Slack, the following Alertmanager Config YAML can be placed into the `alertmanager.yaml` key of the Alertmanager Config Secret, where the `api_url` should be updated to use your Webhook URL from Slack: ```yaml -route: +route: group_by: ['job'] group_wait: 30s group_interval: 5m - repeat_interval: 3h + repeat_interval: 3h receiver: 'slack-notifications' receivers: - name: 'slack-notifications' diff --git a/content/rancher/v2.6/en/monitoring-alerting/configuration/route/_index.md b/content/rancher/v2.6/en/monitoring-alerting/configuration/route/_index.md index 4fc0019c79f..4366f20a9a5 100644 --- a/content/rancher/v2.6/en/monitoring-alerting/configuration/route/_index.md +++ b/content/rancher/v2.6/en/monitoring-alerting/configuration/route/_index.md @@ -42,6 +42,21 @@ The route needs to refer to a [receiver](#receiver-configuration) that has alrea ### Grouping +{{% tabs %}} +{{% tab "Rancher v2.6.5+" %}} + +> **Note** As of Rancher v2.6.5 `Group By` now accepts a list of strings instead of key-value pairs. See the [upstream documentation](https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/api.md#route) for details. + +| Field | Default | Description | +|-------|--------------|---------| +| Group By | N/a | List of labels to group by. Labels must not be repeated (unique list). Special label "..." (aggregate by all possible labels), if provided, must be the only element in the list. | +| Group Wait | 30s | How long to wait to buffer alerts of the same group before sending initially. | +| Group Interval | 5m | How long to wait before sending an alert that has been added to a group of alerts for which an initial notification has already been sent. | +| Repeat Interval | 4h | How long to wait before re-sending a given alert that has already been sent. | + +{{% /tab %}} +{{% tab "Rancher before v2.6.5" %}} + | Field | Default | Description | |-------|--------------|---------| | Group By | N/a | The labels by which incoming alerts are grouped together. For example, `[ group_by: '[' , ... ']' ]` Multiple alerts coming in for labels such as `cluster=A` and `alertname=LatencyHigh` can be batched into a single group. To aggregate by all possible labels, use the special value `'...'` as the sole label name, for example: `group_by: ['...']` Grouping by `...` effectively disables aggregation entirely, passing through all alerts as-is. This is unlikely to be what you want, unless you have a very low alert volume or your upstream notification system performs its own grouping. | @@ -49,6 +64,11 @@ The route needs to refer to a [receiver](#receiver-configuration) that has alrea | Group Interval | 5m | How long to wait before sending an alert that has been added to a group of alerts for which an initial notification has already been sent. | | Repeat Interval | 4h | How long to wait before re-sending a given alert that has already been sent. | +{{% /tab %}} +{{% /tabs %}} + + + ### Matching The **Match** field refers to a set of equality matchers used to identify which alerts to send to a given Route based on labels defined on that alert. When you add key-value pairs to the Rancher UI, they correspond to the YAML in this format: diff --git a/content/rancher/v2.6/en/monitoring-alerting/configuration/servicemonitor-podmonitor/_index.md b/content/rancher/v2.6/en/monitoring-alerting/configuration/servicemonitor-podmonitor/_index.md index 20dc901da31..d2f848b6e67 100644 --- a/content/rancher/v2.6/en/monitoring-alerting/configuration/servicemonitor-podmonitor/_index.md +++ b/content/rancher/v2.6/en/monitoring-alerting/configuration/servicemonitor-podmonitor/_index.md @@ -26,6 +26,6 @@ For more information about how ServiceMonitors work, refer to the [Prometheus Op This pseudo-CRD maps to a section of the Prometheus custom resource configuration. It declaratively specifies how group of pods should be monitored. -When a PodMonitor is created, the Prometheus Operator updates the Prometheus scrape configuration to include the PodMonitor configuration. Then Prometheus begins scraping metrics from the endpoint defined in the ServiceMonitor. +When a PodMonitor is created, the Prometheus Operator updates the Prometheus scrape configuration to include the PodMonitor configuration. Then Prometheus begins scraping metrics from the endpoint defined in the PodMonitor. Any Pods in your cluster that match the labels located within the PodMonitor `selector` field will be monitored based on the `podMetricsEndpoints` specified on the PodMonitor. For more information on what fields can be specified, please look at the [spec](https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#podmonitorspec) provided by Prometheus Operator. diff --git a/content/rancher/v2.6/en/monitoring-alerting/how-monitoring-works/_index.md b/content/rancher/v2.6/en/monitoring-alerting/how-monitoring-works/_index.md index 9e7690d7de3..30b19cdbc66 100644 --- a/content/rancher/v2.6/en/monitoring-alerting/how-monitoring-works/_index.md +++ b/content/rancher/v2.6/en/monitoring-alerting/how-monitoring-works/_index.md @@ -8,56 +8,81 @@ weight: 1 3. [How Alertmanager Works](#3-how-alertmanager-works) 4. [Monitoring V2 Specific Components](#4-monitoring-v2-specific-components) 5. [Scraping and Exposing Metrics](#5-scraping-and-exposing-metrics) -6. [Monitoring on RKE2 Clusters](#6-monitoring-on-rke2-clusters) # 1. Architecture Overview -This diagram shows how data flows through the Monitoring V2 application: +_**The following sections describe how data flows through the Monitoring V2 application:**_ -{{% row %}} -{{% column %}} +### Prometheus Operator -![How data flows through the monitoring application]({{}}/img/rancher/monitoring-v2-architecture-overview.svg) +Prometheus Operator observes ServiceMonitors, PodMonitors, and PrometheusRules being created. When the Prometheus configuration resources are created, Prometheus Operator calls the Prometheus API to sync the new configuration. As the diagram at the end of this section shows, the Prometheus Operator acts as the intermediary between Prometheus and Kubernetes, calling the Prometheus API to synchronize Prometheus with the monitoring-related resources in Kubernetes. -{{% /column %}} -{{% column %}} +### ServiceMonitors and PodMonitors +ServiceMonitors and PodMonitors declaratively specify targets, such as Services and Pods, that need to be monitored. -1. Rules define what Prometheus metrics or time series database queries should result in alerts being fired. -2. ServiceMonitors and PodMonitors declaratively specify how services and pods should be monitored. They use labels to scrape metrics from pods. -3. Prometheus Operator observes ServiceMonitors, PodMonitors and PrometheusRules being created. -4. When the Prometheus configuration resources are created, Prometheus Operator calls the Prometheus API to sync the new configuration. -5. Recording Rules are not directly used for alerting. They create new time series of precomputed queries. These new time series data can then be queried to generate alerts. -6. Prometheus scrapes all targets in the scrape configuration on a recurring schedule based on the scrape interval, storing the results in its time series database.Depending on the Kubernetes master component and Kubernetes distribution, the metrics from a certain Kubernetes component could be directly exposed to Prometheus, proxied through PushProx, or not available. For details, see Scraping and Exposing Metrics. -7. Prometheus evaluates the alerting rules against the time series database. It fires alerts to Alertmanager whenever an alerting rule evaluates to a positive number. -8. Alertmanager uses routes to group, label and filter the fired alerts to translate them into useful notifications. -9. Alertmanager uses the Receiver configuration to send notifications to Slack, PagerDuty, SMS, or other types of receivers. +- Targets are scraped on a recurring schedule based on the configured Prometheus scrape interval, and the metrics that are scraped are stored into the Prometheus Time Series Database (TSDB). -{{% /column %}} -{{% /row %}} +- In order to perform the scrape, ServiceMonitors and PodMonitors are defined with label selectors that determine which Services or Pods should be scraped and endpoints that determine how the scrape should happen on the given target, e.g., scrape/metrics in TCP 10252, proxying through IP addr x.x.x.x. +- Out of the box, Monitoring V2 comes with certain pre-configured exporters that are deployed based on the type of Kubernetes cluster that it is deployed on. For more information, see [Scraping and Exposing Metrics](#5-scraping-and-exposing-metrics). +### How PushProx Works + +- Certain internal Kubernetes components are scraped via a proxy deployed as part of Monitoring V2 called **PushProx**. The Kubernetes components that expose metrics to Prometheus through PushProx are the following: +`kube-controller-manager`, `kube-scheduler`, `etcd`, and `kube-proxy`. + +- For each PushProx exporter, we deploy one PushProx client onto all target nodes. For example, a PushProx client is deployed onto all controlplane nodes for kube-controller-manager, all etcd nodes for kube-etcd, and all nodes for kubelet. + +- We deploy exactly one PushProx proxy per exporter. The process for exporting metrics is as follows: + +1. The PushProx Client establishes an outbound connection with the PushProx Proxy. +1. The client then polls the proxy for scrape requests that have come into the proxy. +1. When the proxy receives a scrape request from Prometheus, the client sees it as a result of the poll. +1. The client scrapes the internal component. +1. The internal component responds by pushing metrics back to the proxy. + + +

Process for Exporting Metrics with PushProx:
+ +![Process for Exporting Metrics with PushProx]({{}}/img/rancher/pushprox-process.svg) + +### PrometheusRules + +PrometheusRules allow users to define rules for what metrics or time series database queries should result in alerts being fired. Rules are evaluated on an interval. + +- **Recording rules** create a new time series based on existing series that have been collected. They are frequently used to precompute complex queries. +- **Alerting rules** run a particular query and fire an alert from Prometheus if the query evaluates to a non-zero value. + +### Alert Routing + +Once Prometheus determines that an alert needs to be fired, alerts are forwarded to **Alertmanager**. + +- Alerts contain labels that come from the PromQL query itself and additional labels and annotations that can be provided as part of specifying the initial PrometheusRule. + +- Before receiving any alerts, Alertmanager will use the **routes** and **receivers** specified in its configuration to form a routing tree on which all incoming alerts are evaluated. Each node of the routing tree can specify additional grouping, labeling, and filtering that needs to happen based on the labels attached to the Prometheus alert. A node on the routing tree (usually a leaf node) can also specify that an alert that reaches it needs to be sent out to a configured Receiver, e.g., Slack, PagerDuty, SMS, etc. Note that Alertmanager will send an alert first to **alertingDriver**, then alertingDriver will send or forward alert to the proper destination. + +- Routes and receivers are also stored in the Kubernetes API via the Alertmanager Secret. When the Secret is updated, Alertmanager is also updated automatically. Note that routing occurs via labels only (not via annotations, etc.). + +
How data flows through the monitoring application:
# 2. How Prometheus Works -### 2.1. Storing Time Series Data +### Storing Time Series Data After collecting metrics from exporters, Prometheus stores the time series in a local on-disk time series database. Prometheus optionally integrates with remote systems, but `rancher-monitoring` uses local storage for the time series database. -The database can then be queried using PromQL, the query language for Prometheus. Grafana dashboards use PromQL queries to generate data visualizations. +Once stored, users can query this TSDB using PromQL, the query language for Prometheus. -### 2.2. Querying the Time Series Database +PromQL queries can be visualized in one of two ways: -The PromQL query language is the primary tool to query Prometheus for time series data. +1. By supplying the query in Prometheus's Graph UI, which will show a simple graphical view of the data. +1. By creating a Grafana Dashboard that contains the PromQL query and additional formatting directives that label axes, add units, change colors, use alternative visualizations, etc. -In Grafana, you can right-click a CPU utilization and click Inspect. This opens a panel that shows the [raw query results.](https://grafana.com/docs/grafana/latest/panels/inspect-panel/#inspect-raw-query-results)The raw results demonstrate how each dashboard is powered by PromQL queries. +### Defining Rules for Prometheus -### 2.3. Defining Rules for when Alerts Should be Fired - -Rules define the conditions for Prometheus to fire alerts. When PrometheusRule custom resources are created or updated, the Prometheus Operator observes the change and calls the Prometheus API to synchronize the rule configuration with the Alerting Rules and Recording Rules in Prometheus. - -When you define a Rule (which is declared within a RuleGroup in a PrometheusRule resource), the [spec of the Rule itself](https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/api.md#rule) contains labels that are used by Alertmanager to figure out which Route should receive this Alert. For example, an Alert with the label `team: front-end` will be sent to all Routes that match on that label. +Rules define queries that Prometheus needs to execute on a regular `evaluationInterval` to perform certain actions, such as firing an alert (alerting rules) or precomputing a query based on others existing in its TSDB (recording rules). These rules are encoded in PrometheusRules custom resources. When PrometheusRule custom resources are created or updated, the Prometheus Operator observes the change and calls the Prometheus API to synchronize the set of rules that Prometheus is currently evaluating on a regular interval. A PrometheusRule allows you to define one or more RuleGroups. Each RuleGroup consists of a set of Rule objects that can each represent either an alerting or a recording rule with the following fields: @@ -66,7 +91,9 @@ A PrometheusRule allows you to define one or more RuleGroups. Each RuleGroup con - Labels that should be attached to the alert or record that identify it (e.g. cluster name or severity) - Annotations that encode any additional important pieces of information that need to be displayed on the notification for an alert (e.g. summary, description, message, runbook URL, etc.). This field is not required for recording rules. -### 2.4. Firing Alerts +On evaluating a [rule](https://github.com/prometheus-operator/prometheus-operator/blob/main/Documentation/api.md#rule), Prometheus will execute the provided PromQL query, add additional provided labels (or annotations - only for alerting rules), and execute the appropriate action for the rule. For example, an Alerting Rule that adds `team: front-end` as a label to the provided PromQL query will append that label to the fired alert, which will allow Alertmanager to forward the alert to the correct Receiver. + +### Alerting and Recording Rules Prometheus doesn't maintain the state of whether alerts are active. It fires alerts repetitively at every evaluation interval, relying on Alertmanager to group and filter the alerts into meaningful notifications. @@ -81,6 +108,7 @@ Alerting rules are more commonly used. Whenever an alerting rule evaluates to a The Rule file adds labels and annotations to alerts before firing them, depending on the use case: - Labels indicate information that identifies the alert and could affect the routing of the alert. For example, if when sending an alert about a certain container, the container ID could be used as a label. + - Annotations denote information that doesn't affect where an alert is routed, for example, a runbook or an error message. # 3. How Alertmanager Works @@ -88,17 +116,24 @@ The Rule file adds labels and annotations to alerts before firing them, dependin The Alertmanager handles alerts sent by client applications such as the Prometheus server. It takes care of the following tasks: - Deduplicating, grouping, and routing alerts to the correct receiver integration such as email, PagerDuty, or OpsGenie + - Silencing and inhibition of alerts + - Tracking alerts that fire over time + - Sending out the status of whether an alert is currently firing, or if it is resolved + +### Alerts Forwarded by alertingDrivers + +When alertingDrivers are installed, this creates a `Service` that can be used as the receiver's URL for Teams or SMS, based on the alertingDriver's configuration. The URL in the Receiver points to the alertingDrivers; so the Alertmanager sends alert first to alertingDriver, then alertingDriver forwards or sends alert to the proper destination. -### 3.1. Routing Alerts to Receivers +### Routing Alerts to Receivers Alertmanager coordinates where alerts are sent. It allows you to group alerts based on labels and fire them based on whether certain labels are matched. One top-level route accepts all alerts. From there, Alertmanager continues routing alerts to receivers based on whether they match the conditions of the next route. -While the Rancher UI forms only allow editing a routing tree that is two levels deep, you can configure more deeply nested routing structures by editing the Alertmanager custom resource YAML. +While the Rancher UI forms only allow editing a routing tree that is two levels deep, you can configure more deeply nested routing structures by editing the Alertmanager Secret. -### 3.2. Configuring Multiple Receivers +### Configuring Multiple Receivers By editing the forms in the Rancher UI, you can set up a Receiver resource with all the information Alertmanager needs to send alerts to your notification system. @@ -110,120 +145,89 @@ Prometheus Operator introduces a set of [Custom Resource Definitions](https://gi Prometheus Operator will automatically update your Prometheus configuration based on the live state of the resources and configuration options that are edited in the Rancher UI. -### 4.1. Resources Deployed by Default +### Resources Deployed by Default By default, a set of resources curated by the [kube-prometheus](https://github.com/prometheus-operator/kube-prometheus) project are deployed onto your cluster as part of installing the Rancher Monitoring Application to set up a basic Monitoring/Alerting stack. The resources that get deployed onto your cluster to support this solution can be found in the [`rancher-monitoring`](https://github.com/rancher/charts/tree/main/charts/rancher-monitoring) Helm chart, which closely tracks the upstream [kube-prometheus-stack](https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack) Helm chart maintained by the Prometheus community with certain changes tracked in the [CHANGELOG.md](https://github.com/rancher/charts/blob/main/charts/rancher-monitoring/CHANGELOG.md). -There are also certain special types of ConfigMaps and Secrets such as those corresponding to Grafana Dashboards, Grafana Datasources, and Alertmanager Configs that will automatically update your Prometheus configuration via sidecar proxies that observe the live state of those resources within your cluster. +### Default Exporters -### 4.2. PushProx +Monitoring V2 deploys three default exporters that provide additional metrics for Prometheus to store: -PushProx enhances the security of the monitoring application, allowing it to be installed on hardened Kubernetes clusters. +1. `node-exporter`: exposes hardware and OS metrics for Linux hosts. For more information on `node-exporter`, refer to the [upstream documentation](https://prometheus.io/docs/guides/node-exporter/). -To expose Kubernetes metrics, PushProxes use a client proxy model to expose specific ports within default Kubernetes components. Node exporters expose metrics to PushProx through an outbound connection. +1. `windows-exporter`: exposes hardware and OS metrics for Windows hosts (only deployed on Windows clusters). For more information on `windows-exporter`, refer to the [upstream documentation](https://github.com/prometheus-community/windows_exporter). -The proxy allows `rancher-monitoring` to scrape metrics from processes on the hostNetwork, such as the `kube-api-server`, without opening up node ports to inbound connections. +1. `kube-state-metrics`: expose additional metrics that track the state of resources contained in the Kubernetes API (e.g., pods, workloads, etc.). For more information on `kube-state-metrics`, refer to the [upstream documentation](https://github.com/kubernetes/kube-state-metrics/tree/master/docs). -PushProx is a DaemonSet that listens for clients that seek to register. Once registered, it proxies scrape requests through the established connection. Then the client executes the request to etcd. +ServiceMonitors and PodMonitors will scrape these exporters, as defined [here](#defining-what-metrics-are-scraped). Prometheus stores these metrics, and you can query the results via either Prometheus's UI or Grafana. -All of the default ServiceMonitors, such as `rancher-monitoring-kube-controller-manager`, are configured to hit the metrics endpoint of the client using this proxy. +See the [architecture](#1-architecture-overview) section for more information on recording rules, alerting rules, and Alertmanager. -For more details about how PushProx works, refer to [Scraping Metrics with PushProx.](#5-5-scraping-metrics-with-pushprox) - - -### 4.3. Default Exporters - -`rancher-monitoring` deploys two exporters to expose metrics to prometheus: `node-exporter` and `windows-exporter`. Both are deployed as DaemonSets. - -`node-exporter` exports container, pod and node metrics for CPU and memory from each Linux node. `windows-exporter` does the same, but for Windows nodes. - -For more information on `node-exporter`, refer to the [upstream documentation.](https://prometheus.io/docs/guides/node-exporter/) - -[kube-state-metrics](https://github.com/kubernetes/kube-state-metrics) is also useful because it exports metrics for Kubernetes components. - -# 4.4. Components Exposed in the Rancher UI +### Components Exposed in the Rancher UI When the monitoring application is installed, you will be able to edit the following components in the Rancher UI: | Component | Type of Component | Purpose and Common Use Cases for Editing | |--------------|------------------------|---------------------------| -| ServiceMonitor | Custom resource | Set up targets to scrape custom metrics from. Automatically updates the scrape configuration in the Prometheus custom resource. | -| PodMonitor | Custom resource | Set up targets to scrape custom metrics from. Automatically updates the scrape configuration in the Prometheus custom resource. | -| Receiver | Configuration block (part of Alertmanager) | Set up a notification system to receive alerts. Automatically updates the Alertmanager custom resource. | -| Route | Configuration block (part of Alertmanager) | Add identifying information to make alerts more meaningful and direct them to individual teams. Automatically updates the Alertmanager custom resource. | -| PrometheusRule | Custom resource | For more advanced use cases, you may want to define what Prometheus metrics or time series database queries should result in alerts being fired. Automatically updates the Prometheus custom resource. | -| Alertmanager | Custom resource | Edit this custom resource only if you need more advanced configuration options beyond what the Rancher UI exposes in the Routes and Receivers sections. For example, you might want to edit this resource to add a routing tree with more than two levels. | -| Prometheus | Custom resource | Edit this custom resource only if you need more advanced configuration beyond what can be configured using ServiceMonitors, PodMonitors, or [Rancher monitoring Helm chart options.](../configuration/helm-chart-options) | +| ServiceMonitor | Custom resource | Sets up Kubernetes Services to scrape custom metrics from. Automatically updates the scrape configuration in the Prometheus custom resource. | +| PodMonitor | Custom resource | Sets up Kubernetes Pods to scrape custom metrics from. Automatically updates the scrape configuration in the Prometheus custom resource. | +| Receiver | Configuration block (part of Alertmanager) | Modifies information on where to send an alert (e.g., Slack, PagerDuty, etc.) and any necessary information to send the alert (e.g., TLS certs, proxy URLs, etc.). Automatically updates the Alertmanager custom resource. | +| Route | Configuration block (part of Alertmanager) | Modifies the routing tree that is used to filter, label, and group alerts based on labels and send them to the appropriate Receiver. Automatically updates the Alertmanager custom resource. | +| PrometheusRule | Custom resource | Defines additional queries that need to trigger alerts or define materialized views of existing series that are within Prometheus's TSDB. Automatically updates the Prometheus custom resource. | + +### PushProx + +PushProx allows Prometheus to scrape metrics across a network boundary, which prevents users from having to expose metrics ports for internal Kubernetes components on each node in a Kubernetes cluster. + +Since the metrics for Kubernetes components are generally exposed on the host network of nodes in the cluster, PushProx deploys a DaemonSet of clients that sit on the hostNetwork of each node and make an outbound connection to a single proxy that is sitting on the Kubernetes API. Prometheus can then be configured to proxy scrape requests through the proxy to each client, which allows it to scrape metrics from the internal Kubernetes components without requiring any inbound node ports to be open. + +Refer to [Scraping Metrics with PushProx](#scraping-metrics-with-pushprox) for more. # 5. Scraping and Exposing Metrics -### 5.1. Defining what Metrics are Scraped +### Defining what Metrics are Scraped -ServiceMonitors define targets that are intended for Prometheus to scrape. The [Prometheus custom resource tells](https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/design.md#prometheus) Prometheus which ServiceMonitors it should use to find out where to scrape metrics from. +ServiceMonitors and PodMonitors define targets that are intended for Prometheus to scrape. The [Prometheus custom resource](https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/design.md#prometheus) tells Prometheus which ServiceMonitors or PodMonitors it should use to find out where to scrape metrics from. -The Prometheus Operator observes the ServiceMonitors. When it observes that ServiceMonitors are created or updated, it calls the Prometheus API to update the scrape configuration in the Prometheus custom resource and keep it in sync with the scrape configuration in the ServiceMonitors. This scrape configuration tells Prometheus which endpoints to scrape metrics from and how it will label the metrics from those endpoints. +The Prometheus Operator observes the ServiceMonitors and PodMonitors. When it observes that they are created or updated, it calls the Prometheus API to update the scrape configuration in the Prometheus custom resource and keep it in sync with the scrape configuration in the ServiceMonitors or PodMonitors. This scrape configuration tells Prometheus which endpoints to scrape metrics from and how it will label the metrics from those endpoints. Prometheus scrapes all of the metrics defined in its scrape configuration at every `scrape_interval`, which is one minute by default. The scrape configuration can be viewed as part of the Prometheus custom resource that is exposed in the Rancher UI. -### 5.2. How the Prometheus Operator Sets up Metrics Scraping +### How the Prometheus Operator Sets up Metrics Scraping The Prometheus Deployment or StatefulSet scrapes metrics, and the configuration of Prometheus is controlled by the Prometheus custom resources. The Prometheus Operator watches for Prometheus and Alertmanager resources, and when they are created, the Prometheus Operator creates a Deployment or StatefulSet for Prometheus or Alertmanager with the user-defined configuration. -
How the Prometheus Operator Sets up Metrics Scraping
+When the Prometheus Operator observes ServiceMonitors, PodMonitors, and PrometheusRules being created, it knows that the scrape configuration needs to be updated in Prometheus. It updates Prometheus by first updating the configuration and rules files in the volumes of Prometheus's Deployment or StatefulSet. Then it calls the Prometheus API to sync the new configuration, resulting in the Prometheus Deployment or StatefulSet to be modified in place. -![How the Prometheus Operator sets up metrics scraping]({{}}/img/rancher/set-up-scraping.svg) - -When the Prometheus Operator observes ServiceMonitors, PodMonitors and PrometheusRules being created, it knows that the scrape configuration needs to be updated in Prometheus. It updates Prometheus by first updating the configuration and rules files in the volumes of Prometheus's Deployment or StatefulSet. Then it calls the Prometheus API to sync the new configuration, resulting in the Prometheus Deployment or StatefulSet to be modified in place. - -![How the Prometheus Operator Updates Scrape Configuration]({{}}/img/rancher/update-scrape-config.svg) - -### 5.3. How Kubernetes Component Metrics are Exposed +### How Kubernetes Component Metrics are Exposed Prometheus scrapes metrics from deployments known as [exporters,](https://prometheus.io/docs/instrumenting/exporters/) which export the time series data in a format that Prometheus can ingest. In Prometheus, time series consist of streams of timestamped values belonging to the same metric and the same set of labeled dimensions. -To allow monitoring to be installed on hardened Kubernetes clusters, `rancher-monitoring` application proxies the communication between Prometheus and the exporter through PushProx for some Kubernetes master components. +### Scraping Metrics with PushProx -### 5.4. Scraping Metrics without PushProx +Certain internal Kubernetes components are scraped via a proxy deployed as part of Monitoring V2 called PushProx. For detailed information on PushProx, refer [here](#how-pushprox-works) and to the above [architecture](#1-architecture-overview) section. -The Kubernetes components that directly expose metrics to Prometheus are the following: +### Scraping Metrics -- kubelet -- ingress-nginx* +The following Kubernetes components are directly scraped by Prometheus: + +- kubelet* +- ingress-nginx** - coreDns/kubeDns - kube-api-server -\* For RKE and RKE2 clusters, ingress-nginx is deployed by default and treated as an internal Kubernetes component. +\* You can optionally use `hardenedKubelet.enabled` to use a PushProx, but that is not the default. -### 5.5. Scraping Metrics with PushProx +** For RKE and RKE2 clusters, ingress-nginx is deployed by default and treated as an internal Kubernetes component. -The purpose of this architecture is to allow us to scrape internal Kubernetes components without exposing those ports to inbound requests. As a result, Prometheus can scrape metrics across a network boundary. -The Kubernetes components that expose metrics to Prometheus through PushProx are the following: +### Scraping Metrics Based on Kubernetes Distribution -- kube-controller-manager -- kube-scheduler -- etcd -- kube-proxy - -For each PushProx exporter, we deploy one PushProx client onto all target nodes. For example, a PushProx client is deployed onto all controlplane nodes for kube-controller-manager, all etcd nodes for kube-etcd, and all nodes for kubelet. We deploy exactly one PushProx proxy per exporter. - -The process for exporting metrics is as follows: - -1. The PushProx Client establishes an outbound connection with the PushProx Proxy. -2. The client then polls the proxy for scrape requests that have come into the proxy. -3. When the proxy receives a scrape request from Prometheus, the client sees it as a result of the poll. -4. The client scrapes the internal component. -5. The internal component responds by pushing metrics back to the proxy. - -
Process for Exporting Metrics with PushProx
- -![Process for Exporting Metrics with PushProx]({{}}/img/rancher/pushprox-process.svg) - -Metrics are scraped differently based on the Kubernetes distribution. For help with terminology, see Terminology(#terminology). For details, see the table below: +Metrics are scraped differently based on the Kubernetes distribution. For help with terminology, refer [here](#terminology). For details, see the table below:
How Metrics are Exposed to Prometheus
@@ -240,7 +244,7 @@ Metrics are scraped differently based on the Kubernetes distribution. For help w \* For RKE and RKE2 clusters, ingress-nginx is deployed by default and treated as an internal Kubernetes component. -### 5.6. Terminology +### Terminology - **kube-scheduler:** The internal Kubernetes component that uses information in the pod spec to decide on which node to run a pod. - **kube-controller-manager:** The internal Kubernetes component that is responsible for node management (detecting if a node fails), pod replication and endpoint creation. @@ -250,13 +254,3 @@ Metrics are scraped differently based on the Kubernetes distribution. For help w - **ingress-nginx:** An Ingress controller for Kubernetes using NGINX as a reverse proxy and load balancer. - **coreDns/kubeDns:** The internal Kubernetes component responsible for DNS. - **kube-api-server:** The main internal Kubernetes component that is responsible for exposing APIs for the other master components. - -# 6. Monitoring on RKE2 Clusters - -Rancher v2.6 introduced the ability to provision new Kubernetes clusters with [RKE2,](https://docs.rke2.io/) which is Rancher's fully conformant Kubernetes distribution that focuses on security and compliance within the U.S. Federal Government sector. To allow Monitoring V2 to be installed on RKE2 Kubernetes clusters, the `rkeIngressNginx` and `rke2IngressNginx` sub-charts were introduced to scrape metrics from the `ingress-nginx` Deployment/DaemonSet in RKE and RKE2 clusters respectively. - -The PushProx pod needs to run on the same nodes as the `ingress-nginx` pod. - -When the RKE2 cluster's Kubernetes version is <= 1.20, the workload type of `ingress-nginx` is a Deployment. The `pushprox-ingress-nginx-client` is deployed as a Deployment, and the Rancher UI sets the Helm chart value `rke2IngressNginx.deployment.enabled=true`. - -For Kubernetes >= 1.21, the workload type of `ingress-nginx` is a DaemonSet. The `pushprox-ingress-nginx-client` is deployed as a DaemonSet, which is the default behavior. \ No newline at end of file diff --git a/content/rancher/v2.6/en/monitoring-alerting/prometheus-federator/_index.md b/content/rancher/v2.6/en/monitoring-alerting/prometheus-federator/_index.md new file mode 100644 index 00000000000..cc88321bee4 --- /dev/null +++ b/content/rancher/v2.6/en/monitoring-alerting/prometheus-federator/_index.md @@ -0,0 +1,83 @@ +--- +title: Prometheus Federator +weight: 7 +--- + +Prometheus Federator, also referred to as Project Monitoring v2, deploys a Helm Project Operator (based on the [rancher/helm-project-operator](https://github.com/rancher/helm-project-operator)), an operator that manages deploying Helm charts each containing a Project Monitoring Stack, where each stack contains: + +- [Prometheus](https://prometheus.io/) (managed externally by [Prometheus Operator](https://github.com/prometheus-operator/prometheus-operator)) +- [Alertmanager](https://prometheus.io/docs/alerting/latest/alertmanager/) (managed externally by [Prometheus Operator](https://github.com/prometheus-operator/prometheus-operator)) +- [Grafana](https://github.com/helm/charts/tree/master/stable/grafana) (deployed via an embedded Helm chart) +- Default PrometheusRules and Grafana dashboards based on the collection of community-curated resources from [kube-prometheus](https://github.com/prometheus-operator/kube-prometheus/) +- Default ServiceMonitors that watch the deployed resources + +> **Important** Prometheus Federator is designed to be deployed alongside an existing Prometheus Operator deployment in a cluster that has already installed the Prometheus Operator CRDs. + +## How does the operator work? + +1. On deploying this chart, users can create ProjectHelmCharts CRs with `spec.helmApiVersion` set to `monitoring.cattle.io/v1alpha1` (also known as "Project Monitors" in the Rancher UI) in a **Project Registration Namespace (`cattle-project-`)**. +2. On seeing each ProjectHelmChartCR, the operator will automatically deploy a Project Prometheus stack on the Project Owner's behalf in the **Project Release Namespace (`cattle-project--monitoring`)** based on a HelmChart CR and a HelmRelease CR automatically created by the ProjectHelmChart controller in the **Operator / System Namespace**. +3. RBAC will automatically be assigned in the Project Release Namespace to allow users to view the Prometheus, Alertmanager, and Grafana UIs of the Project Monitoring Stack deployed; this will be based on RBAC defined on the Project Registration Namespace against the [default Kubernetes user-facing roles](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#user-facing-roles). For more information, see the section on [configuring RBAC](./rbac/). + +### What is a Project? + +In Prometheus Federator, a Project is a group of namespaces that can be identified by a `metav1.LabelSelector`. By default, the label used to identify projects is `field.cattle.io/projectId`, the label used to identify namespaces that are contained within a given Rancher Project. + +### Configuring the Helm release created by a ProjectHelmChart + +The `spec.values` of this ProjectHelmChart's resources will correspond to the `values.yaml` override to be supplied to the underlying Helm chart deployed by the operator on the user's behalf; to see the underlying chart's `values.yaml` spec, either: + +- View the chart's definition located at [`rancher/prometheus-federator` under `charts/rancher-project-monitoring`](https://github.com/rancher/prometheus-federator/blob/main/charts/rancher-project-monitoring) (where the chart version will be tied to the version of this operator). +- Look for the ConfigMap named `monitoring.cattle.io.v1alpha1` that is automatically created in each Project Registration Namespace, which will contain both the `values.yaml` and `questions.yaml` that was used to configure the chart (which was embedded directly into the `prometheus-federator` binary). + +### Namespaces + +As a Project Operator based on [rancher/helm-project-operator](https://github.com/rancher/helm-project-operator), Prometheus Federator has three different classifications of namespaces that the operator looks out for: + +1. **Operator / System Namespace**: The namespace that the operator is deployed into (e.g., `cattle-monitoring-system`). This namespace will contain all HelmCharts and HelmReleases for all ProjectHelmCharts watched by this operator. **Only Cluster Admins should have access to this namespace.** +2. **Project Registration Namespace (`cattle-project-`)**: The set of namespaces that the operator watches for ProjectHelmCharts within. The RoleBindings and ClusterRoleBindings that apply to this namespace will also be the source of truth for the auto-assigned RBAC created in the Project Release Namespace. For details, refer to the [RBAC page](./rbac/). **Project Owners (admin), Project Members (edit), and Read-Only Members (view) should have access to this namespace.** + + > **Note:** Project Registration Namespaces will be auto-generated by the operator and imported into the Project it is tied to if `.Values.global.cattle.projectLabel` is provided, which is set to `field.cattle.io/projectId` by default. This indicates that a Project Registration Namespace should be created by the operator if at least one namespace is observed with that label. The operator will not let these namespaces be deleted unless either all namespaces with that label are gone (e.g., this is the last namespace in that project, in which case the namespace will be marked with the label `"helm.cattle.io/helm-project-operator-orphaned": "true"`, which signals that it can be deleted), or it is no longer watching that project because the project ID was provided under `.Values.helmProjectOperator.otherSystemProjectLabelValues`, which serves as a denylist for Projects. These namespaces will also never be auto-deleted to avoid destroying user data; it is recommended that users clean up these namespaces manually if desired on creating or deleting a project. + + > **Note:** If `.Values.global.cattle.projectLabel` is not provided, the Operator / System Namespace will also be the Project Registration Namespace. +3. **Project Release Namespace (`cattle-project--monitoring`):** The set of namespaces that the operator deploys Project Monitoring Stacks within on behalf of a ProjectHelmChart; the operator will also automatically assign RBAC to Roles created in this namespace by the Project Monitoring Stack based on bindings found in the Project Registration Namespace. **Only Cluster Admins should have access to this namespace; Project Owners (admin), Project Members (edit), and Read-Only Members (view) will be assigned limited access to this namespace by the deployed Helm Chart and Prometheus Federator.** + + > **Note:** Project Release Namespaces are automatically deployed and imported into the project whose ID is specified under `.Values.helmProjectOperator.projectReleaseNamespaces.labelValue`, which defaults to the value of `.Values.global.cattle.systemProjectId` if not specified, whenever a ProjectHelmChart is specified in a Project Registration Namespace. + + > **Note:** Project Release Namespaces follow the same orphaning conventions as Project Registration Namespaces (see note above). + + > **Note:** If `.Values.projectReleaseNamespaces.enabled` is false, the Project Release Namespace will be the same as the Project Registration Namespace. + +### Helm Resources (HelmChart, HelmRelease) + +On deploying a ProjectHelmChart, the Prometheus Federator will automatically create and manage two child custom resources that manage the underlying Helm resources in turn: + +- A HelmChart CR (managed via an embedded [k3s-io/helm-contoller](https://github.com/k3s-io/helm-controller) in the operator): This custom resource automatically creates a Job in the same namespace that triggers a `helm install`, `helm upgrade`, or `helm uninstall` depending on the change applied to the HelmChart CR. This CR is automatically updated on changes to the ProjectHelmChart (e.g., modifying the values.yaml) or changes to the underlying Project definition (e.g., adding or removing namespaces from a project). + +> **Important:** If a ProjectHelmChart is not deploying or updating the underlying Project Monitoring Stack for some reason, the Job created by this resource in the Operator / System namespace should be the first place you check to see if there's something wrong with the Helm operation. However, this is generally only accessible by a **Cluster Admin.** + +- A HelmRelease CR (managed via an embedded [rancher/helm-locker](https://github.com/rancher/helm-locker) in the operator): This custom resource automatically locks a deployed Helm release in place and automatically overwrites updates to underlying resources unless the change happens via a Helm operation (`helm install`, `helm upgrade`, or `helm uninstall` performed by the HelmChart CR). + +> **Note:** HelmRelease CRs emit Kubernetes Events that detect when an underlying Helm release is being modified and locks it back to place. To view these events, you can use `kubectl describe helmrelease -n `; you can also view the logs on this operator to see when changes are detected and which resources modifications were attempted on. + +Both of these resources are created for all Helm charts in the Operator / System namespaces to avoid escalation of privileges to underprivileged users. + +### Advanced Helm Project Operator Configuration + +For more information on advanced configurations, refer to [this page](https://github.com/rancher/prometheus-federator/blob/main/charts/prometheus-federator/0.0.1/README.md#advanced-helm-project-operator-configuration). + + + +### Prometheus Federator on the Local Cluster + +Prometheus Federator is a resource intensive application. Installing it to the local cluster is possible, but **not recommended**. \ No newline at end of file diff --git a/content/rancher/v2.6/en/monitoring-alerting/prometheus-federator/guides/customizing-grafana/_index.md b/content/rancher/v2.6/en/monitoring-alerting/prometheus-federator/guides/customizing-grafana/_index.md new file mode 100644 index 00000000000..f5cc1e5653d --- /dev/null +++ b/content/rancher/v2.6/en/monitoring-alerting/prometheus-federator/guides/customizing-grafana/_index.md @@ -0,0 +1,8 @@ +--- +title: Customizing Grafana Dashboards +weight: 3 +--- + +Grafana dashboards are customized the same way whether it's for rancher-monitoring or for Prometheus Federator. + +For instructions, refer to [this page](../../../guides/customize-grafana/). \ No newline at end of file diff --git a/content/rancher/v2.6/en/monitoring-alerting/prometheus-federator/guides/enable-prom-fed/_index.md b/content/rancher/v2.6/en/monitoring-alerting/prometheus-federator/guides/enable-prom-fed/_index.md new file mode 100644 index 00000000000..ae4ff801de2 --- /dev/null +++ b/content/rancher/v2.6/en/monitoring-alerting/prometheus-federator/guides/enable-prom-fed/_index.md @@ -0,0 +1,62 @@ +--- +title: Enable Prometheus Federator +weight: 1 +--- + +- [Requirements](#requirements) +- [Install the Prometheus Federator Application](#install-the-prometheus-federator-application) + +# Requirements + +By default, Prometheus Federator is configured and intended to be deployed alongside [rancher-monitoring](https://rancher.com/docs/rancher/v2.6/en/monitoring-alerting/), which deploys Prometheus Operator alongside a Cluster Prometheus that each Project Monitoring Stack is configured to federate namespace-scoped metrics from by default. + +For instructions on installing rancher-monitoring, refer to [this page](../../../guides/enable-monitoring/). + +The default configuration should already be compatible with your rancher-monitoring stack. However, to optimize the security and usability of Prometheus Federator in your cluster, we recommend making these additional configurations to rancher-monitoring: + +- [Ensure the cattle-monitoring-system namespace is placed into the System Project](#ensure-the-cattle-monitoring-system-namespace-is-placed-into-the-system-project-or-a-similarly-locked-down-project-that-has-access-to-other-projects-in-the-cluster). +- [Configure rancher-monitoring to only watch for resources created by the Helm chart itself](#configure-rancher-monitoring-to-only-watch-for-resources-created-by-the-helm-chart-itself). +- [Increase the CPU / memory limits of the Cluster Prometheus](#increase-the-cpu--memory-limits-of-the-cluster-prometheus). + +## Ensure the cattle-monitoring-system namespace is placed into the System Project (or a similarly locked down Project that has access to other Projects in the cluster) + +Prometheus Operator's security model expects that the namespace it is deployed into (e.g., `cattle-monitoring-system`) has limited access for anyone except Cluster Admins to avoid privilege escalation via execing into Pods (such as the Jobs executing Helm operations). In addition, deploying Prometheus Federator and all Project Prometheus stacks into the System Project ensures that each Project Prometheus is able to reach out to scrape workloads across all Projects, even if Network Policies are defined via Project Network Isolation. It also provides limited access for Project Owners, Project Members, and other users so that they're unable to access data that they shouldn't have access to (i.e., being allowed to exec into pods, set up the ability to scrape namespaces outside of a given Project, etc.). + +## Configure rancher-monitoring to only watch for resources created by the Helm chart itself + +Since each Project Monitoring Stack will watch the other namespaces and collect additional custom workload metrics or dashboards already, it's recommended to configure the following settings on all selectors to ensure that the Cluster Prometheus Stack only monitors resources created by the Helm Chart itself: + +``` +matchLabels: + release: "rancher-monitoring" +``` + +The following selector fields are recommended to have this value: +- `.Values.alertmanager.alertmanagerSpec.alertmanagerConfigSelector` +- `.Values.prometheus.prometheusSpec.serviceMonitorSelector` +- `.Values.prometheus.prometheusSpec.podMonitorSelector` +- `.Values.prometheus.prometheusSpec.ruleSelector` +- `.Values.prometheus.prometheusSpec.probeSelector` + +Once this setting is turned on, you can always create ServiceMonitors or PodMonitors that are picked up by the Cluster Prometheus by adding the label `release: "rancher-monitoring"` to them, in which case they will be ignored by Project Monitoring Stacks automatically by default, even if the namespace in which those ServiceMonitors or PodMonitors reside in are not system namespaces. + +> Note: If you don't want to allow users to be able to create ServiceMonitors and PodMonitors that aggregate into the Cluster Prometheus in Project namespaces, you can additionally set the namespaceSelectors on the chart to only target system namespaces (which must contain `cattle-monitoring-system` and `cattle-dashboards`, where resources are deployed into by default by rancher-monitoring; you will also need to monitor the `default` namespace to get apiserver metrics or create a custom ServiceMonitor to scrape apiserver metrics from the Service residing in the default namespace) to limit your Cluster Prometheus from picking up other Prometheus Operator CRs. In that case, it would be recommended to turn `.Values.prometheus.prometheusSpec.ignoreNamespaceSelectors=true` to allow you to define ServiceMonitors that can monitor non-system namespaces from within a system namespace. + +## Increase the CPU / memory limits of the Cluster Prometheus + +Depending on a cluster's setup, it's generally recommended to give a large amount of dedicated memory to the Cluster Prometheus to avoid restarts due to out-of-memory errors (OOMKilled) usually caused by churn created in the cluster that causes a large number of high cardinality metrics to be generated and ingested by Prometheus within one block of time. This is one of the reasons why the default Rancher Monitoring stack expects around 4GB of RAM to be able to operate in a normal-sized cluster. However, when introducing Project Monitoring Stacks that are all sending `/federate` requests to the same Cluster Prometheus and are reliant on the Cluster Prometheus being "up" to federate that system data on their namespaces, it's even more important that the Cluster Prometheus has an ample amount of CPU / memory assigned to it to prevent an outage that can cause data gaps across all Project Prometheis in the cluster. + +> Note: There are no specific recommendations on how much memory the Cluster Prometheus should be configured with since it depends entirely on the user's setup (namely the likelihood of encountering a high churn rate and the scale of metrics that could be generated at that time); it generally varies per setup. + +# Install the Prometheus Federator Application + +1. Click **☰ > Cluster Management**. +1. Go to the cluster that you want to install Prometheus Federator and click **Explore**. +1. Click **Apps -> Charts**. +1. Click the **Prometheus Federator** chart. +1. Click **Install**. +1. On the **Metadata** page, click **Next**. +1. In the **Project Release Namespace Project ID** field, the `System Project` is used as the default but can be overridden with another project with similarly [limited access](#ensure-the-cattle-monitoring-system-namespace-is-placed-into-the-system-project-or-a-similarly-locked-down-project-that-has-access-to-other-projects-in-the-cluster). + +### Display CPU and Memory Metrics for a Workload + +Displaying CPU and memory metrics with Prometheus Federator is done the same way as with rancher-monitoring. For instructions, refer [here](../../../guides/monitoring-workloads/_index.md#display-cpu-and-memory-metrics-for-a-workload). + +### Setting up Metrics Beyond CPU and Memory + +Setting up metrics beyond CPU and memory with Prometheus Federator is done the same way as with rancher-monitoring. For instructions, refer [here](../../../guides/monitoring-workloads/_index.md#setting-up-metrics-beyond-cpu-and-memory). + + \ No newline at end of file diff --git a/content/rancher/v2.6/en/monitoring-alerting/prometheus-federator/guides/uninstall-prom-fed/_index.md b/content/rancher/v2.6/en/monitoring-alerting/prometheus-federator/guides/uninstall-prom-fed/_index.md new file mode 100644 index 00000000000..2db6cdda414 --- /dev/null +++ b/content/rancher/v2.6/en/monitoring-alerting/prometheus-federator/guides/uninstall-prom-fed/_index.md @@ -0,0 +1,14 @@ +--- +title: Uninstall Prometheus Federator +weight: 2 +--- + +1. Click **☰ > Cluster Management**. +1. Go to the cluster that you created and click **Explore**. +1. In the left navigation bar, click **Apps & Marketplace**. +1. Click **Installed Apps**. +1. Go to the `cattle-monitoring-system` namespace and check the boxes for `rancher-monitoring-crd` and `rancher-monitoring`. +1. Click **Delete**. +1. Confirm **Delete**. + +**Result:** `prometheus-federator` is uninstalled. diff --git a/content/rancher/v2.6/en/monitoring-alerting/prometheus-federator/rbac/_index.md b/content/rancher/v2.6/en/monitoring-alerting/prometheus-federator/rbac/_index.md new file mode 100644 index 00000000000..d656246d982 --- /dev/null +++ b/content/rancher/v2.6/en/monitoring-alerting/prometheus-federator/rbac/_index.md @@ -0,0 +1,29 @@ +--- +title: Role-Based Access Control +shortTitle: RBAC +weight: 2 +--- + +This section describes the expectations for Role-Based Access Control (RBAC) for Prometheus Federator. + +As described in the section on [namespaces](../_index.md#namespaces), Prometheus Federator expects that Project Owners, Project Members, and other users in the cluster with Project-level permissions (e.g. permissions in a certain set of namespaces identified by a single label selector) have minimal permissions in any namespaces except the Project Registration Namespace (which is imported into the project by default) and those that already comprise their projects. Therefore, in order to allow Project Owners to assign specific chart permissions to other users in their Project namespaces, the Helm Project Operator will automatically watch the following bindings: + +- ClusterRoleBindings +- RoleBindings in the Project Release Namespace + +On observing a change to one of those types of bindings, the Helm Project Operator will check whether the `roleRef` that the the binding points to matches a ClusterRole with the name provided under: + +- `helmProjectOperator.releaseRoleBindings.clusterRoleRefs.admin` +- `helmProjectOperator.releaseRoleBindings.clusterRoleRefs.edit` +- `helmProjectOperator.releaseRoleBindings.clusterRoleRefs.view` + +By default, these roleRefs will correspond to `admin`, `edit`, and `view` respectively, which are the [default Kubernetes user-facing roles](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#user-facing-roles). + +> **Note** For Rancher RBAC users, these [default Kubernetes user-facing roles](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#user-facing-roles) directly correlate to the `Project Owner`, `Project Member`, and `Read-Only` default Project Role Templates. + +If the `roleRef` matches, the Helm Project Operator will filter the `subjects` of the binding for all Users and Groups and use that to automatically construct a RoleBinding for each Role in the Project Release Namespace with the same name as the role and the following labels: + +- `helm.cattle.io/project-helm-chart-role: {{ .Release.Name }}` +- `helm.cattle.io/project-helm-chart-role-aggregate-from: ` + +By default, `rancher-project-monitoring`, the underlying chart deployed by Prometheus Federator, creates three default Roles per Project Release Namespace that provide `admin`, `edit`, and `view` users to permissions to view the Prometheus, Alertmanager, and Grafana UIs of the Project Monitoring Stack to provide least privilege. However, if a Cluster Admin would like to assign additional permissions to certain users, they can either directly assign RoleBindings in the Project Release Namespace to certain users or create Roles with the above two labels on them to allow Project Owners to control assigning those RBAC roles to users in their Project Registration namespaces. \ No newline at end of file diff --git a/content/rancher/v2.6/en/monitoring-alerting/rbac/_index.md b/content/rancher/v2.6/en/monitoring-alerting/rbac/_index.md index ba487525225..e025b733e64 100644 --- a/content/rancher/v2.6/en/monitoring-alerting/rbac/_index.md +++ b/content/rancher/v2.6/en/monitoring-alerting/rbac/_index.md @@ -124,8 +124,8 @@ The relationship between the default roles deployed by Rancher (i.e. cluster-own | --------- | --------- | --------- | --------- | | cluster-owner | cluster-admin | N/A | ClusterRoleBinding | | cluster-member | admin | monitoring-admin | ClusterRoleBinding | -| project-owner | edit | monitoring-admin | RoleBinding within Project namespace | -| project-member | view | monitoring-edit | RoleBinding within Project namespace | +| project-owner | admin | monitoring-admin | RoleBinding within Project namespace | +| project-member | edit | monitoring-edit | RoleBinding within Project namespace | In addition to these default Roles, the following additional Rancher project roles can be applied to members of your Cluster to provide additional access to Monitoring. These Rancher Roles will be tied to ClusterRoles deployed by the Monitoring chart: diff --git a/content/rancher/v2.6/en/neuvector-integration/_index.md b/content/rancher/v2.6/en/neuvector-integration/_index.md new file mode 100644 index 00000000000..1c58d6e200a --- /dev/null +++ b/content/rancher/v2.6/en/neuvector-integration/_index.md @@ -0,0 +1,120 @@ +--- +title: NeuVector Integration +weight: 22 +--- + +### NeuVector Integration in Rancher + +New in Rancher v2.6.5, [NeuVector 5.x](https://open-docs.neuvector.com/) is an open-source container-centric security platform that is now integrated into Rancher. NeuVector offers real-time compliance, visibility, and protection for critical applications and data during runtime. NeuVector provides a firewall, container process/file system monitoring, security auditing with CIS benchmarks, and vulnerability scanning. For more information on Rancher security, please see the [security documentation]({{}}/rancher/v2.6/en/security/). + +NeuVector can be enabled through a Helm chart that may be installed either through **Apps & Marketplace** or through the **Cluster Tools** button in the Rancher UI. Once the Helm chart is installed, users can easily [deploy and manage NeuVector clusters within Rancher](https://open-docs.neuvector.com/deploying/rancher#deploy-and-manage-neuvector-through-rancher-apps-marketplace). + +### Installing NeuVector with Rancher + +The Harvester Helm Chart is used to manage access to the NeuVector UI in Rancher where users can navigate directly to deploy and manage their NeuVector clusters. + +**To navigate to and install the NeuVector chart through Apps & Marketplace:** + +1. Click **☰ > Cluster Management**. +1. On the Clusters page, go to the cluster where you want to deploy NeuVector, and click **Explore**. +1. Go to **Apps & Marketplace > Charts**, and install **NeuVector** from the chart repo. +1. Different cluster types require different container runtimes. When configuring Helm chart values, go to the **Container Runtime** section, and select your runtime in accordance with the cluster type. Finally, click **Install** again. + +Some examples are as follows: + + - RKE1: `docker` + - K3s and RKE2: `k3scontainerd` + - AKS: `containerd` for v1.19 and up + - EKS: `docker` for v1.22 and below; `containerd` for v1.23 and up + - GKE: `containerd` (see the [Google docs](https://cloud.google.com/kubernetes-engine/docs/concepts/using-containerd) for more) + + >**Note:** Only one container runtime engine may be selected at a time during installation. + +**To navigate to and install the NeuVector chart through Cluster Tools:** + +1. Click **☰ > Cluster Management**. +1. On the Clusters page, go to the cluster where you want to deploy NeuVector, and click **Explore**. +1. Click on **Cluster Tools** at the bottom of the left navigation bar. +1. Repeat step 4 above to select your container runtime accordingly, then click **Install** again. + +### Accessing NeuVector from the Rancher UI + +1. Navigate to the cluster explorer of the cluster where NeuVector is installed. In the left navigation bar, click **NeuVector**. +1. Click the external link to go to the NeuVector UI. Once the link is selected, users must accept the `END USER LICENSE AGREEMENT` to access the NeuVector UI. + +### Uninstalling NeuVector from the Rancher UI + +**To uninstall from Apps & Marketplace:** + +1. Click **☰ > Cluster Management**. +1. Under **Apps & Marketplace**, click **Installed Apps**. +1. Under `cattle-neuvector-system`, select both the NeuVector app (and the associated CRD if desired), then click **Delete**. + +**To uninstall from Cluster Tools:** + +1. Click **☰ > Cluster Management**. +1. Click on **Cluster Tools** at the bottom-left of the screen, then click on the trash can icon under the NeuVector chart. Select `Delete the CRD associated with this app` if desired, then click **Delete**. + +### GitHub Repository + +The NeuVector project is available [here](https://github.com/neuvector/neuvector). + +### Documentation + +The NeuVector documentation is [here](https://open-docs.neuvector.com/). + +### Architecture + +The NeuVector security solution contains four types of security containers: Controllers, Enforcers, Managers, and Scanners. A special container called an All-in-One is also provided to combine the Controller, Enforcer, and Manager functions all in one container, primarily for Docker-native deployments. There is also an Updater which, when run, will update the CVE database. + +- **Controller:** Manages the NeuVector Enforcer container; provides REST APIs for the management console. +- **Enforcer:** Enforces security policies. +- **Manager:** Provides a web-UI and CLI console to manage the NeuVector platform. +- **All-in-One:** Includes the Controller, Enforcer, and Manager. +- **Scanner:** Performs the vulnerability and compliance scanning for images, containers, and nodes. +- **Updater:** Updates the CVE database for Neuvector (when run); redeploys scanner pods. + +
**NeuVector Security Containers:**
+![NeuVector Security Containers]({{}}/img/rancher/neuvector-security-containers.png) + +
**NeuVector Architecture:**
+![NeuVector Architecture]({{}}/img/rancher/neuvector-architecture.png) + +To learn more about NeuVector's architecture, please refer [here](https://open-docs.neuvector.com/basics/overview#architecture). + +### CPU and Memory Allocations + +Below are the minimum recommended computing resources for the NeuVector chart installation in a default deployment. Note that the resource limit is not set. + +| Container | CPU - Request | Memory - Request | +|------------|--------|---------| +| Controller | 3 (1GB 1vCPU needed per controller) | * +| Enforcer | On all nodes (500MB .5vCPU) | 1GB +| Manager | 1 (500MB .5vCPU) | * +| Scanner | 3 (100MB .5vCPU) | * + +\* Minimum 1GB of memory total required for Controller, Manager, and Scanner containers combined. + + +### Support Limitations + +* Only admins and cluster owners are currently supported. + +* Fleet multi-cluster deployment is not supported. + +* NeuVector is not supported on a Windows cluster. + +* NeuVector installation is not supported on hardened clusters. + +* NeuVector installation is not supported on SELinux clusters. + +* NeuVector installation is not supported on clusters in an air-gapped environment. + +### Other Limitations + +* Currently, NeuVector feature chart installation fails when a NeuVector partner chart already exists. To work around this issue, uninstall the NeuVector partner chart and reinstall the NeuVector feature chart. + +* Sometimes when the controllers are not ready, the NeuVector UI is not accessible from the Rancher UI. During this time, controllers will try to restart, and it takes a few minutes for the controllers to be active. + +* Container runtime is not auto-detected for different cluster types when installing the NeuVector chart. To work around this, you can specify the runtime manually. + diff --git a/content/rancher/v2.6/en/overview/_index.md b/content/rancher/v2.6/en/overview/_index.md index 69002e77d81..22d719374d7 100644 --- a/content/rancher/v2.6/en/overview/_index.md +++ b/content/rancher/v2.6/en/overview/_index.md @@ -38,7 +38,7 @@ The Rancher API server is built on top of an embedded Kubernetes API server and - **Provisioning Kubernetes clusters:** The Rancher API server can [provision Kubernetes]({{}}/rancher/v2.6/en/cluster-provisioning/) on existing nodes, or perform [Kubernetes upgrades.]({{}}/rancher/v2.6/en/cluster-admin/upgrading-kubernetes) - **Catalog management:** Rancher provides the ability to use a [catalog of Helm charts]({{}}/rancher/v2.6/en/helm-charts/) that make it easy to repeatedly deploy applications. -- **Managing projects:** A project is a group of multiple namespaces and access control policies within a cluster. A project is a Rancher concept, not a Kubernetes concept, which allows you manage multiple namespaces as a group and perform Kubernetes operations in them. The Rancher UI provides features for [project administration]({{}}/rancher/v2.6/en/project-admin/) and for [managing applications within projects.]({{}}/rancher/v2.6/en/k8s-in-rancher/) +- **Managing projects:** A project is a group of multiple namespaces and access control policies within a cluster. A project is a Rancher concept, not a Kubernetes concept, which allows you to manage multiple namespaces as a group and perform Kubernetes operations in them. The Rancher UI provides features for [project administration]({{}}/rancher/v2.6/en/project-admin/) and for [managing applications within projects.]({{}}/rancher/v2.6/en/k8s-in-rancher/) - **Pipelines:** Setting up a [pipeline]({{}}/rancher/v2.6/en/project-admin/pipelines/) can help developers deliver new software as quickly and efficiently as possible. Within Rancher, you can configure pipelines for each of your Rancher projects. - **Istio:** Our [integration with Istio]({{}}/rancher/v2.6/en/istio/) is designed so that a Rancher operator, such as an administrator or cluster owner, can deliver Istio to developers. Then developers can use Istio to enforce security policies, troubleshoot problems, or manage traffic for green/blue deployments, canary deployments, or A/B testing. diff --git a/content/rancher/v2.6/en/overview/architecture-recommendations/_index.md b/content/rancher/v2.6/en/overview/architecture-recommendations/_index.md index b679b3a3f72..112388c36c9 100644 --- a/content/rancher/v2.6/en/overview/architecture-recommendations/_index.md +++ b/content/rancher/v2.6/en/overview/architecture-recommendations/_index.md @@ -12,7 +12,7 @@ This section covers the following topics: - [Recommended Load Balancer Configuration for Kubernetes Installations](#recommended-load-balancer-configuration-for-kubernetes-installations) - [Environment for Kubernetes Installations](#environment-for-kubernetes-installations) - [Recommended Node Roles for Kubernetes Installations](#recommended-node-roles-for-kubernetes-installations) -- [Architecture for an Authorized Cluster Endpoint](#architecture-for-an-authorized-cluster-endpoint) +- [Architecture for an Authorized Cluster Endpoint (ACE)](#architecture-for-an-authorized-cluster-endpoint-ace) # Separation of Rancher and User Clusters @@ -32,7 +32,7 @@ We don't recommend installing Rancher in a single Docker container, because if t ### K3s Kubernetes Cluster Installations -One option for the underlying Kubernetes cluster is to use K3s Kubernetes. K3s Rancher's CNCF certified Kubernetes distribution. It is easy to install, with half the memory of Kubernetes, all in a binary less than 100 MB. One main advantage of this K3s architecture is that it allows an external datastore to hold the cluster data, allowing the K3s server nodes to be treated as ephemeral. +One option for the underlying Kubernetes cluster is to use K3s Kubernetes. K3s is Rancher's CNCF certified Kubernetes distribution. It is easy to install and uses half the memory of Kubernetes, all in a binary of less than 100 MB. Another advantage of K3s is that it allows an external datastore to hold the cluster data, allowing the K3s server nodes to be treated as ephemeral.
Architecture of a K3s Kubernetes Cluster Running the Rancher Management Server
![Architecture of a K3s Kubernetes Cluster Running the Rancher Management Server]({{}}/img/rancher/k3s-server-storage.svg) @@ -104,8 +104,10 @@ Because no additional workloads will be deployed on the Rancher server cluster, For more best practices for downstream clusters, refer to the [production checklist]({{}}/rancher/v2.6/en/cluster-provisioning/production) or our [best practices guide.]({{}}/rancher/v2.6/en/best-practices/) -# Architecture for an Authorized Cluster Endpoint +# Architecture for an Authorized Cluster Endpoint (ACE) -If you are using an [authorized cluster endpoint,]({{}}/rancher/v2.6/en/overview/architecture/#4-authorized-cluster-endpoint) we recommend creating an FQDN pointing to a load balancer which balances traffic across your nodes with the `controlplane` role. +If you are using an [authorized cluster endpoint (ACE),]({{}}/rancher/v2.6/en/overview/architecture/#4-authorized-cluster-endpoint) we recommend creating an FQDN pointing to a load balancer which balances traffic across your nodes with the `controlplane` role. If you are using private CA signed certificates on the load balancer, you have to supply the CA certificate, which will be included in the generated kubeconfig file to validate the certificate chain. See the documentation on [kubeconfig files]({{}}/rancher/v2.6/en/cluster-admin/cluster-access/kubectl/) and [API keys]({{}}/rancher/v2.6/en/user-settings/api-keys/#creating-an-api-key) for more information. + +As of Rancher v2.6.3, ACE support is available for registered RKE2 and K3s clusters. To view the manual steps to perform on the downstream cluster to enable the ACE, click [here]({{}}/rancher/v2.6/en/cluster-provisioning/registered-clusters/#authorized-cluster-endpoint-support-for-rke2-and-k3s-clusters). diff --git a/content/rancher/v2.6/en/overview/architecture/_index.md b/content/rancher/v2.6/en/overview/architecture/_index.md index 01d5be52f5f..a6c09157de9 100644 --- a/content/rancher/v2.6/en/overview/architecture/_index.md +++ b/content/rancher/v2.6/en/overview/architecture/_index.md @@ -20,7 +20,7 @@ This section covers the following topics: - [The authentication proxy](#1-the-authentication-proxy) - [Cluster controllers and cluster agents](#2-cluster-controllers-and-cluster-agents) - [Node agents](#3-node-agents) - - [Authorized cluster endpoint](#4-authorized-cluster-endpoint) + - [Authorized cluster endpoint (ACE)](#4-authorized-cluster-endpoint-ace) - [Important files](#important-files) - [Tools for provisioning Kubernetes clusters](#tools-for-provisioning-kubernetes-clusters) - [Rancher server components and source code](#rancher-server-components-and-source-code) @@ -103,11 +103,13 @@ If the cluster agent (also called `cattle-cluster-agent`) is not available, one The `cattle-node-agent` is deployed using a [DaemonSet](https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/) resource to make sure it runs on every node in a Rancher-launched Kubernetes cluster. It is used to interact with the nodes when performing cluster operations. Examples of cluster operations include upgrading the Kubernetes version and creating or restoring etcd snapshots. -### 4. Authorized Cluster Endpoint +### 4. Authorized Cluster Endpoint (ACE) An authorized cluster endpoint allows users to connect to the Kubernetes API server of a downstream cluster without having to route their requests through the Rancher authentication proxy. -> The authorized cluster endpoint only works on Rancher-launched Kubernetes clusters. In other words, it only works in clusters where Rancher [used RKE]({{}}/rancher/v2.6/en/cluster-provisioning/rke-clusters) to provision the cluster. It is not available for registered clusters, or for clusters in a hosted Kubernetes provider, such as Amazon's EKS. +> The authorized cluster endpoint only works on Rancher-launched Kubernetes clusters. In other words, it only works in clusters where Rancher [used RKE]({{}}/rancher/v2.6/en/cluster-provisioning/rke-clusters) to provision the cluster. The ACE is not available for clusters in a hosted Kubernetes provider, such as Amazon's EKS. + +> The [ACE is available for registered RKE2 and K3s clusters]({{}}/rancher/v2.6/en/cluster-provisioning/registered-clusters/#authorized-cluster-endpoint-support-for-rke2-and-k3s-clusters) as of Rancher v2.6.3. There are two main reasons why a user might need the authorized cluster endpoint: diff --git a/content/rancher/v2.6/en/overview/concepts/_index.md b/content/rancher/v2.6/en/overview/concepts/_index.md index 2736a842f2d..5cd01b9460c 100644 --- a/content/rancher/v2.6/en/overview/concepts/_index.md +++ b/content/rancher/v2.6/en/overview/concepts/_index.md @@ -52,7 +52,7 @@ Three etcd nodes is generally sufficient for smaller clusters and five etcd node ### Controlplane Nodes -Controlplane nodes run the Kubernetes API server, scheduler, and controller manager. These nodes take care of routine tasks to ensure that your cluster maintains your configuration. Because all cluster data is stored on your etcd nodes, control plane nodes are stateless. You can run control plane on a single node, although two or more nodes are recommended for redundancy. Additionally, a single node can share the control plane and etcd roles. +Controlplane nodes run the Kubernetes API server, scheduler, and controller manager. These nodes take care of routine tasks to ensure that your cluster maintains your configuration. Because all cluster data is stored on your etcd nodes, control plane nodes are stateless. You can run control plane on a single node, although three or more nodes are recommended for redundancy. Additionally, a single node can share the control plane and etcd roles. ### Worker Nodes diff --git a/content/rancher/v2.6/en/pipelines/_index.md b/content/rancher/v2.6/en/pipelines/_index.md index ebf82d30aaf..5c9a2e868d7 100644 --- a/content/rancher/v2.6/en/pipelines/_index.md +++ b/content/rancher/v2.6/en/pipelines/_index.md @@ -3,7 +3,12 @@ title: Pipelines weight: 10 --- -> As of Rancher v2.5, Git-based deployment pipelines are now deprecated. We recommend handling pipelines with Rancher Continuous Delivery powered by [Fleet.](https://fleet.rancher.io/) To get to Fleet in Rancher, click ☰ > Continuous Delivery. Note that pipelines in Kubernetes 1.21+ are no longer supported. +> As of Rancher v2.5, Git-based deployment pipelines are now deprecated. We recommend handling pipelines with Rancher Continuous Delivery powered by [Fleet]({{}}/rancher/v2.6/en/deploy-across-clusters/fleet). To get to Fleet in Rancher, click ☰ > Continuous Delivery. +> +>**Notice:** +> +> - Pipelines in Kubernetes 1.21+ are no longer supported. +> - Fleet does not replace Rancher pipelines; the distinction is that Rancher pipelines are now powered by Fleet. Rancher's pipeline provides a simple CI/CD experience. Use it to automatically checkout code, run builds or scripts, publish Docker images or catalog applications, and deploy the updated software to users. diff --git a/content/rancher/v2.6/en/project-admin/project-members/_index.md b/content/rancher/v2.6/en/project-admin/project-members/_index.md index c84e655974f..32708445e60 100644 --- a/content/rancher/v2.6/en/project-admin/project-members/_index.md +++ b/content/rancher/v2.6/en/project-admin/project-members/_index.md @@ -38,7 +38,9 @@ Following project creation, you can add users as project members so that they ca >**Notes:** > - >- Users assigned the `Owner` or `Member` role for a project automatically inherit the `namespace creation` role. However, this role is a [Kubernetes ClusterRole](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#role-and-clusterrole), meaning its scope extends to all projects in the cluster. Therefore, users explicitly assigned the `Owner` or `Member` role for a project can create namespaces in other projects they're assigned to, even with only the `Read Only` role assigned. + >- Users assigned the `Owner` or `Member` role for a project automatically inherit the `namespace creation` role. However, this role is a [Kubernetes ClusterRole](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#role-and-clusterrole), meaning its scope extends to all projects in the cluster. Therefore, users explicitly assigned the `Owner` or `Member` role for a project can create or delete namespaces in other projects they're assigned to, even with only the `Read Only` role assigned. + > + >- By default, the Rancher role of `project-member` inherits from the `Kubernetes-edit` role, and the `project-owner` role inherits from the `Kubernetes-admin` role. As such, both `project-member` and `project-owner` roles will allow for namespace management, including the ability to create and delete namespaces. > >- For `Custom` roles, you can modify the list of individual roles available for assignment. > diff --git a/content/rancher/v2.6/en/project-admin/resource-quotas/_index.md b/content/rancher/v2.6/en/project-admin/resource-quotas/_index.md index 7b4239b9bdd..75e1aea6b90 100644 --- a/content/rancher/v2.6/en/project-admin/resource-quotas/_index.md +++ b/content/rancher/v2.6/en/project-admin/resource-quotas/_index.md @@ -38,4 +38,4 @@ Edit resource quotas when: 1. Click **Create**. -**Result:** The resource quota is applied to your project and namespaces. When you add more namespaces in the future, Rancher validates that the project can accommodate the namespace. If the project can't allocate the resources, Rancher won't let you save your changes. +**Result:** The resource quota is applied to your project and namespaces. When you add more namespaces in the future, Rancher validates that the project can accommodate the namespace. If the project can't allocate the resources, you may still create namespaces, but they will be given a resource quota of 0. Subsequently, Rancher will not allow you to create any resources restricted by this quota. diff --git a/content/rancher/v2.6/en/project-admin/resource-quotas/quotas-for-projects/_index.md b/content/rancher/v2.6/en/project-admin/resource-quotas/quotas-for-projects/_index.md index 63a18ba0f49..7e2aaf3e869 100644 --- a/content/rancher/v2.6/en/project-admin/resource-quotas/quotas-for-projects/_index.md +++ b/content/rancher/v2.6/en/project-admin/resource-quotas/quotas-for-projects/_index.md @@ -19,18 +19,38 @@ The resource quota includes two limits, which you set while creating or editing - **Project Limits:** - This set of values configures an overall resource limit for the project. If you try to add a new namespace to the project, Rancher uses the limits you've set to validate that the project has enough resources to accommodate the namespace. In other words, if you try to move a namespace into a project near its resource quota, Rancher blocks you from moving the namespace. + This set of values configures a total limit for each specified resource shared among all namespaces in the project. - **Namespace Default Limits:** - This value is the default resource limit available for each namespace. When the resource quota is created at the project level, this limit is automatically propagated to each namespace in the project. Each namespace is bound to this default limit unless you override it. + This set of values configures the default quota limit available for each namespace for each specified resource. + When a namespace is created in the project without overrides, this limit is automatically bound to the namespace and enforced. + In the following diagram, a Rancher administrator wants to apply a resource quota that sets the same CPU and memory limit for every namespace in their project (`Namespace 1-4`). However, in Rancher, the administrator can set a resource quota for the project (`Project Resource Quota`) rather than individual namespaces. This quota includes resource limits for both the entire project (`Project Limit`) and individual namespaces (`Namespace Default Limit`). Rancher then propagates the `Namespace Default Limit` quotas to each namespace (`Namespace Resource Quota`) when created. Rancher: Resource Quotas Propagating to Each Namespace ![Rancher Resource Quota Implementation]({{}}/img/rancher/rancher-resource-quota.png) -Let's highlight some more nuanced functionality. If a quota is deleted at the project level, it will also be removed from all namespaces contained within that project, despite any overrides that may exist. Further, updating an existing namespace default limit for a quota at the project level will not result in that value being propagated to existing namespaces in the project; the updated value will only be applied to newly created namespaces in that project. To update a namespace default limit for existing namespaces you can delete and subsequently recreate the quota at the project level with the new default value. This will result in the new default value being applied to all existing namespaces in the project. +Let's highlight some more nuanced functionality for namespaces created **_within_** the Rancher UI. If a quota is deleted at the project level, it will also be removed from all namespaces contained within that project, despite any overrides that may exist. Further, updating an existing namespace default limit for a quota at the project level will not result in that value being propagated to existing namespaces in the project; the updated value will only be applied to newly created namespaces in that project. To update a namespace default limit for existing namespaces you can delete and subsequently recreate the quota at the project level with the new default value. This will result in the new default value being applied to all existing namespaces in the project. + +Before creating a namespace in a project, Rancher compares the amounts of the project's available resources and requested resources, regardless of whether they come from the default or overridden limits. +If the requested resources exceed the remaining capacity in the project for those resources, Rancher will assign the namespace the remaining capacity for that resource. + +However, this is not the case with namespaces created **_outside_** of Rancher's UI. For namespaces created via `kubectl`, Rancher +will assign a resource quota that has a **zero** amount for any resource that requested more capacity than what remains in the project. + +To create a namespace in an existing project via `kubectl`, use the `field.cattle.io/projectId` annotation. To override the default +requested quota limit, use the `field.cattle.io/resourceQuota` annotation. +``` +apiVersion: v1 +kind: Namespace +metadata: + annotations: + field.cattle.io/projectId: [your-cluster-ID]:[your-project-ID] + field.cattle.io/resourceQuota: '{"limit":{"limitsCpu":"100m", "limitsMemory":"100Mi", "configMaps": "50"}}' + name: my-ns +``` The following table explains the key differences between the two quota types. diff --git a/content/rancher/v2.6/en/quick-start-guide/_index.md b/content/rancher/v2.6/en/quick-start-guide/_index.md index 65fa4db14f4..b6b0ba33866 100644 --- a/content/rancher/v2.6/en/quick-start-guide/_index.md +++ b/content/rancher/v2.6/en/quick-start-guide/_index.md @@ -1,8 +1,10 @@ --- title: Rancher Deployment Quick Start Guides metaDescription: Use this section to jump start your Rancher deployment and testing. It contains instructions for a simple Rancher setup and some common use cases. -short title: Use this section to jump start your Rancher deployment and testing. It contains instructions for a simple Rancher setup and some common use cases. +short title: Use this section to jump start your Rancher deployment and testing. It contains instructions for a simple Rancher setup and some common use cases. weight: 2 +aliases: + - /rancher/v2.x/en/quick-start-guide/ --- >**Note:** The intent of these guides is to quickly launch a sandbox that you can use to evaluate Rancher. These guides are not intended for production environments. For comprehensive setup instructions, see [Installation]({{}}/rancher/v2.6/en/installation/). @@ -13,5 +15,3 @@ We have Quick Start Guides for: - [Deploying Rancher Server]({{}}/rancher/v2.6/en/quick-start-guide/deployment/): Get started running Rancher using the method most convenient for you. - [Deploying Workloads]({{}}/rancher/v2.6/en/quick-start-guide/workload/): Deploy a simple [workload](https://kubernetes.io/docs/concepts/workloads/) and expose it, letting you access it from outside the cluster. - -- [Using the CLI]({{}}/rancher/v2.6/en/quick-start-guide/cli/): Use `kubectl` or Rancher command line interface (CLI) to interact with your Rancher instance. diff --git a/content/rancher/v2.6/en/quick-start-guide/cli/_index.md b/content/rancher/v2.6/en/quick-start-guide/cli/_index.md deleted file mode 100644 index c0787bc4c08..00000000000 --- a/content/rancher/v2.6/en/quick-start-guide/cli/_index.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: CLI with Rancher -weight: 100 ---- - -Interact with Rancher using command line interface (CLI) tools from your workstation. - -## Rancher CLI - -Follow the steps in [rancher cli](../../cli). - -Ensure you can run `rancher kubectl get pods` successfully. - - -## kubectl -Install the `kubectl` utility. See [install kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/). - - -Configure kubectl by visiting your cluster in the Rancher Web UI then clicking on `Kubeconfig`, copying contents and putting into your `~/.kube/config` file. - -Run `kubectl cluster-info` or `kubectl get pods` successfully. - -## Authentication with kubectl and kubeconfig Tokens with TTL - -_Requirements_ - -If admins have [enforced TTL on kubeconfig tokens]({{}}/rancher/v2.6/en/api/api-tokens/#setting-ttl-on-kubeconfig-tokens), the kubeconfig file requires the [Rancher cli](../cli) to be present in your PATH when you run `kubectl`. Otherwise, you’ll see error like: -`Unable to connect to the server: getting credentials: exec: exec: "rancher": executable file not found in $PATH`. - -This feature enables kubectl to authenticate with the Rancher server and get a new kubeconfig token when required. The following auth providers are currently supported: - -1. Local -2. Active Directory -3. FreeIpa, OpenLdap -4. SAML providers - Ping, Okta, ADFS, Keycloak, Shibboleth - -When you first run kubectl, for example, `kubectl get pods`, it will ask you to pick an auth provider and log in with the Rancher server. -The kubeconfig token is cached in the path where you run kubectl under `./.cache/token`. This token is valid till [it expires](../../api/api-tokens/#setting-ttl-on-kubeconfig-tokens-period), or [gets deleted from the Rancher server](../../api/api-tokens/#deleting-tokens) -Upon expiration, the next `kubectl get pods` will ask you to log in with the Rancher server again. diff --git a/content/rancher/v2.6/en/quick-start-guide/deployment/_index.md b/content/rancher/v2.6/en/quick-start-guide/deployment/_index.md index f7d4da476aa..fa4236b3a6f 100644 --- a/content/rancher/v2.6/en/quick-start-guide/deployment/_index.md +++ b/content/rancher/v2.6/en/quick-start-guide/deployment/_index.md @@ -5,11 +5,15 @@ weight: 100 Use one of the following guides to deploy and provision Rancher and a Kubernetes cluster in the provider of your choice. -- [DigitalOcean](./digital-ocean-qs) (uses Terraform) - [AWS](./amazon-aws-qs) (uses Terraform) +- [AWS Marketplace](./amazon-aws-marketplace-qs) (uses Amazon EKS) - [Azure](./microsoft-azure-qs) (uses Terraform) +- [DigitalOcean](./digital-ocean-qs) (uses Terraform) - [GCP](./google-gcp-qs) (uses Terraform) +- [Hetzner Cloud](./hetzner-cloud-qs) (uses Terraform) - [Vagrant](./quickstart-vagrant) +- [Equinix Metal](./equinix-metal-qs) + If you prefer, the following guide will take you through the same process in individual steps. Use this if you want to run Rancher in a different provider, on prem, or if you would just like to see how easy it is. diff --git a/content/rancher/v2.6/en/quick-start-guide/deployment/amazon-aws-marketplace-qs/_index.md b/content/rancher/v2.6/en/quick-start-guide/deployment/amazon-aws-marketplace-qs/_index.md new file mode 100644 index 00000000000..bac47239b49 --- /dev/null +++ b/content/rancher/v2.6/en/quick-start-guide/deployment/amazon-aws-marketplace-qs/_index.md @@ -0,0 +1,7 @@ +--- +title: Rancher AWS Marketplace Quick Start +description: Use Amazon EKS to deploy Rancher server. +weight: 110 +--- + +There is now an additional way for you to deploy the Rancher server in AWS by using Amazon EKS. To learn more, see our [Amazon Marketplace listing](https://aws.amazon.com/marketplace/pp/prodview-2yzbnvagmi4as). \ No newline at end of file diff --git a/content/rancher/v2.6/en/quick-start-guide/deployment/amazon-aws-qs/_index.md b/content/rancher/v2.6/en/quick-start-guide/deployment/amazon-aws-qs/_index.md index 1a0bc66ec49..64ba81e19bf 100644 --- a/content/rancher/v2.6/en/quick-start-guide/deployment/amazon-aws-qs/_index.md +++ b/content/rancher/v2.6/en/quick-start-guide/deployment/amazon-aws-qs/_index.md @@ -1,9 +1,11 @@ --- title: Rancher AWS Quick Start Guide -description: Read this step by step Rancher AWS guide to quickly deploy a Rancher Server with a single node cluster attached. +description: Read this step by step Rancher AWS guide to quickly deploy a Rancher server with a single-node downstream Kubernetes cluster attached. weight: 100 --- -The following steps will quickly deploy a Rancher Server on AWS with a single node cluster attached. +The following steps will quickly deploy a Rancher server on AWS in a single-node K3s Kubernetes cluster, with a single-node downstream Kubernetes cluster attached. + +>**Note:** The intent of these guides is to quickly launch a sandbox that you can use to evaluate Rancher. These guides are not intended for production environments. For comprehensive setup instructions, see [Installation]({{}}/rancher/v2.6/en/installation/). ## Prerequisites @@ -19,25 +21,26 @@ The following steps will quickly deploy a Rancher Server on AWS with a single no 1. Clone [Rancher Quickstart](https://github.com/rancher/quickstart) to a folder using `git clone https://github.com/rancher/quickstart`. -1. Go into the AWS folder containing the terraform files by executing `cd quickstart/aws`. +2. Go into the AWS folder containing the terraform files by executing `cd quickstart/aws`. -1. Rename the `terraform.tfvars.example` file to `terraform.tfvars`. +3. Rename the `terraform.tfvars.example` file to `terraform.tfvars`. -1. Edit `terraform.tfvars` and customize the following variables: - - `aws_access_key` - Amazon AWS Access Key +4. Edit `terraform.tfvars` and customize the following variables: + - `aws_access_key` - Amazon AWS Access Key - `aws_secret_key` - Amazon AWS Secret Key - `rancher_server_admin_password` - Admin password for created Rancher server -1. **Optional:** Modify optional variables within `terraform.tfvars`. +5. **Optional:** Modify optional variables within `terraform.tfvars`. See the [Quickstart Readme](https://github.com/rancher/quickstart) and the [AWS Quickstart Readme](https://github.com/rancher/quickstart/tree/master/aws) for more information. Suggestions include: - - `aws_region` - Amazon AWS region, choose the closest instead of the default + - `aws_region` - Amazon AWS region, choose the closest instead of the default (`us-east-1`) - `prefix` - Prefix for all created resources - `instance_type` - EC2 instance size used, minimum is `t3a.medium` but `t3a.large` or `t3a.xlarge` could be used if within budget + - `add_windows_node` - If true, an additional Windows worker node is added to the workload cluster -1. Run `terraform init`. +6. Run `terraform init`. -1. To initiate the creation of the environment, run `terraform apply --auto-approve`. Then wait for output similar to the following: +7. To initiate the creation of the environment, run `terraform apply --auto-approve`. Then wait for output similar to the following: ``` Apply complete! Resources: 16 added, 0 changed, 0 destroyed. @@ -45,17 +48,18 @@ Suggestions include: Outputs: rancher_node_ip = xx.xx.xx.xx - rancher_server_url = https://rancher.xx.xx.xx.xx.xip.io + rancher_server_url = https://rancher.xx.xx.xx.xx.sslip.io workload_node_ip = yy.yy.yy.yy ``` -1. Paste the `rancher_server_url` from the output above into the browser. Log in when prompted (default username is `admin`, use the password set in `rancher_server_admin_password`). +8. Paste the `rancher_server_url` from the output above into the browser. Log in when prompted (default username is `admin`, use the password set in `rancher_server_admin_password`). +9. ssh to the Rancher Server using the `id_rsa` key generated in `quickstart/aws`. -#### Result +##### Result -Two Kubernetes clusters are deployed into your AWS account, one running Rancher Server and the other ready for experimentation deployments. Please note that while this setup is a great way to explore Rancher functionality, a production setup should follow our high availability setup guidelines. +Two Kubernetes clusters are deployed into your AWS account, one running Rancher Server and the other ready for experimentation deployments. Please note that while this setup is a great way to explore Rancher functionality, a production setup should follow our high availability setup guidelines. SSH keys for the VMs are auto-generated and stored in the module directory. -### What's Next? +## What's Next? Use Rancher to create a deployment. For more information, see [Creating Deployments]({{}}/rancher/v2.6/en/quick-start-guide/workload). diff --git a/content/rancher/v2.6/en/quick-start-guide/deployment/digital-ocean-qs/_index.md b/content/rancher/v2.6/en/quick-start-guide/deployment/digital-ocean-qs/_index.md index 02384c1b601..8afb42b9d33 100644 --- a/content/rancher/v2.6/en/quick-start-guide/deployment/digital-ocean-qs/_index.md +++ b/content/rancher/v2.6/en/quick-start-guide/deployment/digital-ocean-qs/_index.md @@ -1,9 +1,11 @@ --- title: Rancher DigitalOcean Quick Start Guide -description: Read this step by step Rancher DigitalOcean guide to quickly deploy a Rancher Server with a single node cluster attached. -weight: 100 +description: Read this step by step Rancher DigitalOcean guide to quickly deploy a Rancher server with a single-node downstream Kubernetes cluster attached. +weight: 120 --- -The following steps will quickly deploy a Rancher Server on DigitalOcean with a single node cluster attached. +The following steps will quickly deploy a Rancher server on DigitalOcean in a single-node K3s Kubernetes cluster, with a single-node downstream Kubernetes cluster attached. + +>**Note:** The intent of these guides is to quickly launch a sandbox that you can use to evaluate Rancher. These guides are not intended for production environments. For comprehensive setup instructions, see [Installation]({{}}/rancher/v2.6/en/installation/). ## Prerequisites @@ -19,25 +21,24 @@ The following steps will quickly deploy a Rancher Server on DigitalOcean with a 1. Clone [Rancher Quickstart](https://github.com/rancher/quickstart) to a folder using `git clone https://github.com/rancher/quickstart`. -1. Go into the DigitalOcean folder containing the terraform files by executing `cd quickstart/do`. +2. Go into the DigitalOcean folder containing the terraform files by executing `cd quickstart/do`. -1. Rename the `terraform.tfvars.example` file to `terraform.tfvars`. +3. Rename the `terraform.tfvars.example` file to `terraform.tfvars`. -1. Edit `terraform.tfvars` and customize the following variables: +4. Edit `terraform.tfvars` and customize the following variables: - `do_token` - DigitalOcean access key - `rancher_server_admin_password` - Admin password for created Rancher server -1. **Optional:** Modify optional variables within `terraform.tfvars`. +5. **Optional:** Modify optional variables within `terraform.tfvars`. See the [Quickstart Readme](https://github.com/rancher/quickstart) and the [DO Quickstart Readme](https://github.com/rancher/quickstart/tree/master/do) for more information. Suggestions include: - - `do_region` - DigitalOcean region, choose the closest instead of the default + - `do_region` - DigitalOcean region, choose the closest instead of the default (`nyc1`) - `prefix` - Prefix for all created resources - `droplet_size` - Droplet size used, minimum is `s-2vcpu-4gb` but `s-4vcpu-8gb` could be used if within budget - - `ssh_key_file_name` - Use a specific SSH key instead of `~/.ssh/id_rsa` (public key is assumed to be `${ssh_key_file_name}.pub`) -1. Run `terraform init`. +6. Run `terraform init`. -1. To initiate the creation of the environment, run `terraform apply --auto-approve`. Then wait for output similar to the following: +7. To initiate the creation of the environment, run `terraform apply --auto-approve`. Then wait for output similar to the following: ``` Apply complete! Resources: 15 added, 0 changed, 0 destroyed. @@ -45,15 +46,16 @@ Suggestions include: Outputs: rancher_node_ip = xx.xx.xx.xx - rancher_server_url = https://rancher.xx.xx.xx.xx.xip.io + rancher_server_url = https://rancher.xx.xx.xx.xx.sslip.io workload_node_ip = yy.yy.yy.yy ``` -1. Paste the `rancher_server_url` from the output above into the browser. Log in when prompted (default username is `admin`, use the password set in `rancher_server_admin_password`). +8. Paste the `rancher_server_url` from the output above into the browser. Log in when prompted (default username is `admin`, use the password set in `rancher_server_admin_password`). +9. ssh to the Rancher Server using the `id_rsa` key generated in `quickstart/do`. #### Result -Two Kubernetes clusters are deployed into your DigitalOcean account, one running Rancher Server and the other ready for experimentation deployments. +Two Kubernetes clusters are deployed into your DigitalOcean account, one running Rancher Server and the other ready for experimentation deployments. Please note that while this setup is a great way to explore Rancher functionality, a production setup should follow our high availability setup guidelines. SSH keys for the VMs are auto-generated and stored in the module directory. ### What's Next? diff --git a/content/rancher/v2.6/en/quick-start-guide/deployment/equinix-metal-qs/_index.md b/content/rancher/v2.6/en/quick-start-guide/deployment/equinix-metal-qs/_index.md index 0daf725fdbc..ad208bd3bf8 100644 --- a/content/rancher/v2.6/en/quick-start-guide/deployment/equinix-metal-qs/_index.md +++ b/content/rancher/v2.6/en/quick-start-guide/deployment/equinix-metal-qs/_index.md @@ -1,6 +1,6 @@ --- title: Rancher Equinix Metal Quick Start -weight: 300 +weight: 250 --- ## This tutorial walks you through the following: @@ -10,6 +10,8 @@ weight: 300 - Creation of your first cluster - Deployment of an application, Nginx +>**Note:** The intent of these guides is to quickly launch a sandbox that you can use to evaluate Rancher. The Docker install is not recommended for production environments. For comprehensive setup instructions, see [Installation]({{}}/rancher/v2.6/en/installation/). + ## Quick Start Outline This Quick Start Guide is divided into different tasks for easier consumption. @@ -41,7 +43,7 @@ This Quick Start Guide is divided into different tasks for easier consumption. - [Equinix Metal Pricing](https://metal.equinix.com/developers/docs/servers/server-specs/) **Note:** - > When provisioning a new Equinix Metal Server via the CLI or API you will need to be able to provide the following information: project-id, plan, metro, and the operating-system + > When provisioning a new Equinix Metal Server via the CLI or API you will need to be able to provide the following information: project-id, plan, metro, and the operating-system > When using a cloud-hosted virtual machine you need to allow inbound TCP communication to ports 80 and 443. Please see your cloud-host's documentation for information regarding port configuration. > For a full list of port requirements, refer to [Docker Installation]({{}}/rancher/v2.6/en/cluster-provisioning/node-requirements/). > Provision the host according to our [Requirements]({{}}/rancher/v2.6/en/installation/requirements/). @@ -102,13 +104,13 @@ In this task, you can use the versatile **Custom** option. This option lets you 11. When you finish running the command on your Linux host, click **Done**. -**Result:** +**Result:** Your cluster is created and assigned a state of **Provisioning**. Rancher is standing up your cluster. You can access your cluster after its state is updated to **Active**. -**Active** clusters are assigned two Projects: +**Active** clusters are assigned two Projects: - `Default`, containing the `default` namespace - `System`, containing the `cattle-system`, `ingress-nginx`, `kube-public`, and `kube-system` namespaces diff --git a/content/rancher/v2.6/en/quick-start-guide/deployment/google-gcp-qs/_index.md b/content/rancher/v2.6/en/quick-start-guide/deployment/google-gcp-qs/_index.md index fe13ba86aca..b589f810c46 100644 --- a/content/rancher/v2.6/en/quick-start-guide/deployment/google-gcp-qs/_index.md +++ b/content/rancher/v2.6/en/quick-start-guide/deployment/google-gcp-qs/_index.md @@ -1,67 +1,70 @@ ---- -title: Rancher GCP Quick Start Guide -description: Read this step by step Rancher GCP guide to quickly deploy a Rancher Server with a single node cluster attached. -weight: 100 ---- -The following steps will quickly deploy a Rancher server on GCP in a single-node RKE Kubernetes cluster, with a single-node downstream Kubernetes cluster attached. - -## Prerequisites - ->**Note** ->Deploying to Google GCP will incur charges. - -- [Google GCP Account](https://console.cloud.google.com/): A Google GCP Account is required to create resources for deploying Rancher and Kubernetes. -- [Google GCP Project](https://cloud.google.com/appengine/docs/standard/nodejs/building-app/creating-project): Use this link to follow a tutorial to create a GCP Project if you don't have one yet. -- [Google GCP Service Account](https://cloud.google.com/iam/docs/creating-managing-service-account-keys): Use this link and follow instructions to create a GCP service account and token file. -- [Terraform](https://www.terraform.io/downloads.html): Used to provision the server and cluster in Google GCP. - - -## Getting Started - -1. Clone [Rancher Quickstart](https://github.com/rancher/quickstart) to a folder using `git clone https://github.com/rancher/quickstart`. - -1. Go into the GCP folder containing the terraform files by executing `cd quickstart/gcp`. - -1. Rename the `terraform.tfvars.example` file to `terraform.tfvars`. - -1. Edit `terraform.tfvars` and customize the following variables: - - `gcp_account_json` - GCP service account file path and file name - - `rancher_server_admin_password` - Admin password for created Rancher server - -1. **Optional:** Modify optional variables within `terraform.tfvars`. -See the [Quickstart Readme](https://github.com/rancher/quickstart) and the [GCP Quickstart Readme](https://github.com/rancher/quickstart/tree/master/gcp) for more information. -Suggestions include: - - `gcp_region` - Google GCP region, choose the closest instead of the default - - `prefix` - Prefix for all created resources - - `machine_type` - Compute instance size used, minimum is `n1-standard-1` but `n1-standard-2` or `n1-standard-4` could be used if within budget - - `ssh_key_file_name` - Use a specific SSH key instead of `~/.ssh/id_rsa` (public key is assumed to be `${ssh_key_file_name}.pub`) - -1. Run `terraform init`. - -1. To initiate the creation of the environment, run `terraform apply --auto-approve`. Then wait for output similar to the following: - - ``` - Apply complete! Resources: 16 added, 0 changed, 0 destroyed. - - Outputs: - - rancher_node_ip = xx.xx.xx.xx - rancher_server_url = https://rancher.xx.xx.xx.xx.xip.io - workload_node_ip = yy.yy.yy.yy - ``` - -1. Paste the `rancher_server_url` from the output above into the browser. Log in when prompted (default username is `admin`, use the password set in `rancher_server_admin_password`). - -#### Result - -Two Kubernetes clusters are deployed into your GCP account, one running Rancher Server and the other ready for experimentation deployments. - -### What's Next? - -Use Rancher to create a deployment. For more information, see [Creating Deployments]({{< baseurl >}}/rancher/v2.6/en/quick-start-guide/workload). - -## Destroying the Environment - -1. From the `quickstart/gcp` folder, execute `terraform destroy --auto-approve`. - -2. Wait for confirmation that all resources have been destroyed. +--- +title: Rancher GCP Quick Start Guide +description: Read this step by step Rancher GCP guide to quickly deploy a Rancher server with a single-node downstream Kubernetes cluster attached. +weight: 130 +--- +The following steps will quickly deploy a Rancher server on GCP in a single-node K3s Kubernetes cluster, with a single-node downstream Kubernetes cluster attached. + +>**Note:** The intent of these guides is to quickly launch a sandbox that you can use to evaluate Rancher. These guides are not intended for production environments. For comprehensive setup instructions, see [Installation]({{}}/rancher/v2.6/en/installation/). + +## Prerequisites + +>**Note** +>Deploying to Google GCP will incur charges. + +- [Google GCP Account](https://console.cloud.google.com/): A Google GCP Account is required to create resources for deploying Rancher and Kubernetes. +- [Google GCP Project](https://cloud.google.com/appengine/docs/standard/nodejs/building-app/creating-project): Use this link to follow a tutorial to create a GCP Project if you don't have one yet. +- [Google GCP Service Account](https://cloud.google.com/iam/docs/creating-managing-service-account-keys): Use this link and follow instructions to create a GCP service account and token file. +- [Terraform](https://www.terraform.io/downloads.html): Used to provision the server and cluster in Google GCP. + + +## Getting Started + +1. Clone [Rancher Quickstart](https://github.com/rancher/quickstart) to a folder using `git clone https://github.com/rancher/quickstart`. + +2. Go into the GCP folder containing the terraform files by executing `cd quickstart/gcp`. + +3. Rename the `terraform.tfvars.example` file to `terraform.tfvars`. + +4. Edit `terraform.tfvars` and customize the following variables: + - `gcp_account_json` - GCP service account file path and file name + - `rancher_server_admin_password` - Admin password for created Rancher server + +5. **Optional:** Modify optional variables within `terraform.tfvars`. +See the [Quickstart Readme](https://github.com/rancher/quickstart) and the [GCP Quickstart Readme](https://github.com/rancher/quickstart/tree/master/gcp) for more information. +Suggestions include: + - `gcp_region` - Google GCP region, choose the closest instead of the default (`us-east4`) + - `gcp_zone` - Google GCP zone, choose the closest instead of the default (`us-east4-a`) + - `prefix` - Prefix for all created resources + - `machine_type` - Compute instance size used, minimum is `n1-standard-1` but `n1-standard-2` or `n1-standard-4` could be used if within budget + +6. Run `terraform init`. + +7. To initiate the creation of the environment, run `terraform apply --auto-approve`. Then wait for output similar to the following: + + ``` + Apply complete! Resources: 16 added, 0 changed, 0 destroyed. + + Outputs: + + rancher_node_ip = xx.xx.xx.xx + rancher_server_url = https://rancher.xx.xx.xx.xx.sslip.io + workload_node_ip = yy.yy.yy.yy + ``` + +8. Paste the `rancher_server_url` from the output above into the browser. Log in when prompted (default username is `admin`, use the password set in `rancher_server_admin_password`). +9. ssh to the Rancher Server using the `id_rsa` key generated in `quickstart/gcp`. + +#### Result + +Two Kubernetes clusters are deployed into your GCP account, one running Rancher Server and the other ready for experimentation deployments. Please note that while this setup is a great way to explore Rancher functionality, a production setup should follow our high availability setup guidelines. SSH keys for the VMs are auto-generated and stored in the module directory. + +### What's Next? + +Use Rancher to create a deployment. For more information, see [Creating Deployments]({{< baseurl >}}/rancher/v2.6/en/quick-start-guide/workload). + +## Destroying the Environment + +1. From the `quickstart/gcp` folder, execute `terraform destroy --auto-approve`. + +2. Wait for confirmation that all resources have been destroyed. diff --git a/content/rancher/v2.6/en/quick-start-guide/deployment/hetzner-cloud-qs/_index.md b/content/rancher/v2.6/en/quick-start-guide/deployment/hetzner-cloud-qs/_index.md new file mode 100644 index 00000000000..ea7a2bbf1b8 --- /dev/null +++ b/content/rancher/v2.6/en/quick-start-guide/deployment/hetzner-cloud-qs/_index.md @@ -0,0 +1,68 @@ +--- +title: Rancher Hetzner Cloud Quick Start Guide +description: Read this step by step Rancher Hetzner Cloud guide to quickly deploy a Rancher server with a single-node downstream Kubernetes cluster attached. +weight: 140 +--- +The following steps will quickly deploy a Rancher server on Hetzner Cloud in a single-node K3s Kubernetes cluster, with a single-node downstream Kubernetes cluster attached. + +>**Note:** The intent of these guides is to quickly launch a sandbox that you can use to evaluate Rancher. These guides are not intended for production environments. For comprehensive setup instructions, see [Installation]({{}}/rancher/v2.6/en/installation/). + +## Prerequisites + +>**Note** +>Deploying to Hetzner Cloud will incur charges. + +- [Hetzner Cloud Account](https://www.hetzner.com): You will require an account on Hetzner as this is where the server and cluster will run. +- [Hetzner API Access Key](https://docs.hetzner.cloud/#getting-started): Use these instructions to create a Hetzner Cloud API Key if you don't have one. +- [Terraform](https://www.terraform.io/downloads.html): Used to provision the server and cluster to Hetzner. + + +## Getting Started + +1. Clone [Rancher Quickstart](https://github.com/rancher/quickstart) to a folder using `git clone https://github.com/rancher/quickstart`. + +2. Go into the Hetzner folder containing the terraform files by executing `cd quickstart/hcloud`. + +3. Rename the `terraform.tfvars.example` file to `terraform.tfvars`. + +4. Edit `terraform.tfvars` and customize the following variables: + - `hcloud_token` - Hetzner API access key + - `rancher_server_admin_password` - Admin password for created Rancher server + +5. **Optional:** Modify optional variables within `terraform.tfvars`. +See the [Quickstart Readme](https://github.com/rancher/quickstart) and the [Hetzner Quickstart Readme](https://github.com/rancher/quickstart/tree/master/hcloud) for more information. +Suggestions include: + - `prefix` - Prefix for all created resources + - `instance_type` - Instance type, minimum required is `cx21` + - `hcloud_location` - Hetzner Cloud location, choose the closest instead of the default (`fsn1`) + +6. Run `terraform init`. + +7. To initiate the creation of the environment, run `terraform apply --auto-approve`. Then wait for output similar to the following: + + ``` + Apply complete! Resources: 15 added, 0 changed, 0 destroyed. + + Outputs: + + rancher_node_ip = xx.xx.xx.xx + rancher_server_url = https://rancher.xx.xx.xx.xx.sslip.io + workload_node_ip = yy.yy.yy.yy + ``` + +8. Paste the `rancher_server_url` from the output above into the browser. Log in when prompted (default username is `admin`, use the password set in `rancher_server_admin_password`). +9. ssh to the Rancher Server using the `id_rsa` key generated in `quickstart/hcloud`. + +#### Result + +Two Kubernetes clusters are deployed into your Hetzner account, one running Rancher Server and the other ready for experimentation deployments. Please note that while this setup is a great way to explore Rancher functionality, a production setup should follow our high availability setup guidelines. SSH keys for the VMs are auto-generated and stored in the module directory. + +### What's Next? + +Use Rancher to create a deployment. For more information, see [Creating Deployments]({{}}/rancher/v2.6/en/quick-start-guide/workload). + +## Destroying the Environment + +1. From the `quickstart/hcloud` folder, execute `terraform destroy --auto-approve`. + +2. Wait for confirmation that all resources have been destroyed. diff --git a/content/rancher/v2.6/en/quick-start-guide/deployment/microsoft-azure-qs/_index.md b/content/rancher/v2.6/en/quick-start-guide/deployment/microsoft-azure-qs/_index.md index c3d758f9ccf..ec8d16a475e 100644 --- a/content/rancher/v2.6/en/quick-start-guide/deployment/microsoft-azure-qs/_index.md +++ b/content/rancher/v2.6/en/quick-start-guide/deployment/microsoft-azure-qs/_index.md @@ -1,71 +1,76 @@ ---- -title: Rancher Azure Quick Start Guide -description: Read this step by step Rancher Azure guide to quickly deploy a Rancher Server with a single node cluster attached. -weight: 100 ---- - -The following steps will quickly deploy a Rancher server on Azure in a single-node RKE Kubernetes cluster, with a single-node downstream Kubernetes cluster attached. - -## Prerequisites - ->**Note** ->Deploying to Microsoft Azure will incur charges. - -- [Microsoft Azure Account](https://azure.microsoft.com/en-us/free/): A Microsoft Azure Account is required to create resources for deploying Rancher and Kubernetes. -- [Microsoft Azure Subscription](https://docs.microsoft.com/en-us/azure/cost-management-billing/manage/create-subscription#create-a-subscription-in-the-azure-portal): Use this link to follow a tutorial to create a Microsoft Azure subscription if you don't have one yet. -- [Micsoroft Azure Tenant](https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-create-new-tenant): Use this link and follow instructions to create a Microsoft Azure tenant. -- [Microsoft Azure Client ID/Secret](https://docs.microsoft.com/en-us/azure/active-directory/develop/howto-create-service-principal-portal): Use this link and follow instructions to create a Microsoft Azure client and secret. -- [Terraform](https://www.terraform.io/downloads.html): Used to provision the server and cluster in Microsoft Azure. - - -## Getting Started - -1. Clone [Rancher Quickstart](https://github.com/rancher/quickstart) to a folder using `git clone https://github.com/rancher/quickstart`. - -1. Go into the Azure folder containing the terraform files by executing `cd quickstart/azure`. - -1. Rename the `terraform.tfvars.example` file to `terraform.tfvars`. - -1. Edit `terraform.tfvars` and customize the following variables: - - `azure_subscription_id` - Microsoft Azure Subscription ID - - `azure_client_id` - Microsoft Azure Client ID - - `azure_client_secret` - Microsoft Azure Client Secret - - `azure_tenant_id` - Microsoft Azure Tenant ID - - `rancher_server_admin_password` - Admin password for created Rancher server - -2. **Optional:** Modify optional variables within `terraform.tfvars`. -See the [Quickstart Readme](https://github.com/rancher/quickstart) and the [Azure Quickstart Readme](https://github.com/rancher/quickstart/tree/master/azure) for more information. -Suggestions include: - - `azure_location` - Microsoft Azure region, choose the closest instead of the default - - `prefix` - Prefix for all created resources - - `instance_type` - Compute instance size used, minimum is `Standard_DS2_v2` but `Standard_DS2_v3` or `Standard_DS3_v2` could be used if within budget - -1. Run `terraform init`. - -1. To initiate the creation of the environment, run `terraform apply --auto-approve`. Then wait for output similar to the following: - - ``` - Apply complete! Resources: 16 added, 0 changed, 0 destroyed. - - Outputs: - - rancher_node_ip = xx.xx.xx.xx - rancher_server_url = https://rancher.xx.xx.xx.xx.xip.io - workload_node_ip = yy.yy.yy.yy - ``` - -1. Paste the `rancher_server_url` from the output above into the browser. Log in when prompted (default username is `admin`, use the password set in `rancher_server_admin_password`). -2. ssh to the Rancher Server using the `id_rsa` key generated in `quickstart/azure`. -#### Result - -Two Kubernetes clusters are deployed into your Azure account, one running Rancher Server and the other ready for experimentation deployments. - -### What's Next? - -Use Rancher to create a deployment. For more information, see [Creating Deployments]({{< baseurl >}}/rancher/v2.6/en/quick-start-guide/workload). - -## Destroying the Environment - -1. From the `quickstart/azure` folder, execute `terraform destroy --auto-approve`. - -2. Wait for confirmation that all resources have been destroyed. +--- +title: Rancher Azure Quick Start Guide +description: Read this step by step Rancher Azure guide to quickly deploy a Rancher server with a single-node downstream Kubernetes cluster attached. +weight: 115 +--- + +The following steps will quickly deploy a Rancher server on Azure in a single-node K3s Kubernetes cluster, with a single-node downstream Kubernetes cluster attached. + +>**Note:** The intent of these guides is to quickly launch a sandbox that you can use to evaluate Rancher. These guides are not intended for production environments. For comprehensive setup instructions, see [Installation]({{}}/rancher/v2.6/en/installation/). + +## Prerequisites + +>**Note** +>Deploying to Microsoft Azure will incur charges. + +- [Microsoft Azure Account](https://azure.microsoft.com/en-us/free/): A Microsoft Azure Account is required to create resources for deploying Rancher and Kubernetes. +- [Microsoft Azure Subscription](https://docs.microsoft.com/en-us/azure/cost-management-billing/manage/create-subscription#create-a-subscription-in-the-azure-portal): Use this link to follow a tutorial to create a Microsoft Azure subscription if you don't have one yet. +- [Micsoroft Azure Tenant](https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-create-new-tenant): Use this link and follow instructions to create a Microsoft Azure tenant. +- [Microsoft Azure Client ID/Secret](https://docs.microsoft.com/en-us/azure/active-directory/develop/howto-create-service-principal-portal): Use this link and follow instructions to create a Microsoft Azure client and secret. +- [Terraform](https://www.terraform.io/downloads.html): Used to provision the server and cluster in Microsoft Azure. + + +## Getting Started + +1. Clone [Rancher Quickstart](https://github.com/rancher/quickstart) to a folder using `git clone https://github.com/rancher/quickstart`. + +2. Go into the Azure folder containing the terraform files by executing `cd quickstart/azure`. + +3. Rename the `terraform.tfvars.example` file to `terraform.tfvars`. + +4. Edit `terraform.tfvars` and customize the following variables: + - `azure_subscription_id` - Microsoft Azure Subscription ID + - `azure_client_id` - Microsoft Azure Client ID + - `azure_client_secret` - Microsoft Azure Client Secret + - `azure_tenant_id` - Microsoft Azure Tenant ID + - `rancher_server_admin_password` - Admin password for created Rancher server + +5. **Optional:** Modify optional variables within `terraform.tfvars`. +See the [Quickstart Readme](https://github.com/rancher/quickstart) and the [Azure Quickstart Readme](https://github.com/rancher/quickstart/tree/master/azure) for more information. +Suggestions include: + - `azure_location` - Microsoft Azure region, choose the closest instead of the default (`East US`) + - `prefix` - Prefix for all created resources + - `instance_type` - Compute instance size used, minimum is `Standard_DS2_v2` but `Standard_DS2_v3` or `Standard_DS3_v2` could be used if within budget + - `add_windows_node` - If true, an additional Windows worker node is added to the workload cluster + - `windows_admin_password` - The admin password of the windows worker node + +6. Run `terraform init`. + +7. To initiate the creation of the environment, run `terraform apply --auto-approve`. Then wait for output similar to the following: + + ``` + Apply complete! Resources: 16 added, 0 changed, 0 destroyed. + + Outputs: + + rancher_node_ip = xx.xx.xx.xx + rancher_server_url = https://rancher.xx.xx.xx.xx.sslip.io + workload_node_ip = yy.yy.yy.yy + ``` + +8. Paste the `rancher_server_url` from the output above into the browser. Log in when prompted (default username is `admin`, use the password set in `rancher_server_admin_password`). +9. ssh to the Rancher Server using the `id_rsa` key generated in `quickstart/azure`. + +#### Result + +Two Kubernetes clusters are deployed into your Azure account, one running Rancher Server and the other ready for experimentation deployments. Please note that while this setup is a great way to explore Rancher functionality, a production setup should follow our high availability setup guidelines. SSH keys for the VMs are auto-generated and stored in the module directory. + +### What's Next? + +Use Rancher to create a deployment. For more information, see [Creating Deployments]({{< baseurl >}}/rancher/v2.6/en/quick-start-guide/workload). + +## Destroying the Environment + +1. From the `quickstart/azure` folder, execute `terraform destroy --auto-approve`. + +2. Wait for confirmation that all resources have been destroyed. diff --git a/content/rancher/v2.6/en/quick-start-guide/deployment/quickstart-manual-setup/_index.md b/content/rancher/v2.6/en/quick-start-guide/deployment/quickstart-manual-setup/_index.md index 0103875d09e..b24baf5a47e 100644 --- a/content/rancher/v2.6/en/quick-start-guide/deployment/quickstart-manual-setup/_index.md +++ b/content/rancher/v2.6/en/quick-start-guide/deployment/quickstart-manual-setup/_index.md @@ -1,116 +1,137 @@ --- -title: Manual Quick Start +title: Helm CLI Quick Start weight: 300 --- -Howdy Partner! This tutorial walks you through: -- Installation of Rancher 2.x -- Creation of your first cluster -- Deployment of an application, Nginx +These instructions capture a quick way to set up a proof-of-concept Rancher installation. -## Quick Start Outline +These instructions assume you have a Linux virtual machine that you will communicate with from your local workstation. Rancher will be installed on the Linux machine. You will need to retrieve the IP address of that machine so that you can access Rancher from your local workstation. Rancher is designed to manage Kubernetes clusters remotely, so any Kubernetes cluster that Rancher manages in the future will also need to be able to reach this IP address. -This Quick Start Guide is divided into different tasks for easier consumption. +We don't recommend installing Rancher locally because it creates a networking problem. Installing Rancher on localhost does not allow Rancher to communicate with downstream Kubernetes clusters, so on localhost you wouldn't be able to test Rancher's cluster provisioning or cluster management functionality. - +Your Linux machine can be anywhere. It could be an Amazon EC2 instance, a Digital Ocean droplet, or an Azure virtual machine, to name a few examples. Other Rancher docs often use 'node' as a generic term for all of these. One possible way to deploy a Linux machine is by setting up an Amazon EC2 instance as shown in [this tutorial]({{}}/rancher/v2.6/en/installation/resources/k8s-tutorials/infrastructure-tutorials/ec2-node/). + +The full installation requirements are [here]({{}}/rancher/v2.6/en/installation/requirements/). -1. [Provision a Linux Host](#1-provision-a-linux-host) +## Install K3s on Linux -1. [Install Rancher](#2-install-rancher) +Install a K3s cluster by running this command on the Linux machine: -1. [Log In](#3-log-in) +``` +curl -sfL https://get.k3s.io | sh -s - server +``` -1. [Create the Cluster](#4-create-the-cluster) +Save the IP of the Linux machine. - -
-### 1. Provision a Linux Host +## Save the kubeconfig to your workstation - Begin creation of a custom cluster by provisioning a Linux host. Your host can be: +The kubeconfig file is important for accessing the Kubernetes cluster. Copy the file at `/etc/rancher/k3s/k3s.yaml` from the Linux machine and save it to your local workstation in the directory `~/.kube/config`. One way to do this is by using the `scp` tool and run this command on your local machine: -- A cloud-host virtual machine (VM) -- An on-prem VM -- A bare-metal server +{{% tabs %}} +{{% tab "Mac and Linux" %}} - >**Note:** - > When using a cloud-hosted virtual machine you need to allow inbound TCP communication to ports 80 and 443. Please see your cloud-host's documentation for information regarding port configuration. - > - > For a full list of port requirements, refer to [Docker Installation]({{}}/rancher/v2.6/en/cluster-provisioning/node-requirements/). +``` +scp root@:/etc/rancher/k3s/k3s.yaml ~/.kube/config +``` - Provision the host according to our [Requirements]({{}}/rancher/v2.6/en/installation/requirements/). +{{% /tab %}} +{{% tab "Windows" %}} -### 2. Install Rancher +By default, "scp" is not a recognized command, so we need to install a module first. -To install Rancher on your host, connect to it and then use a shell to install. +In Windows Powershell: -1. Log in to your Linux host using your preferred shell, such as PuTTy or a remote Terminal connection. +``` +Find-Module Posh-SSH +Install-Module Posh-SSH -2. From your shell, enter the following command: +## Get the remote kubeconfig file +scp root@:/etc/rancher/k3s/k3s.yaml $env:USERPROFILE\.kube\config +``` - ``` - sudo docker run -d --restart=unless-stopped -p 80:80 -p 443:443 --privileged rancher/rancher - ``` +{{% /tab %}} +{{% /tabs %}} -**Result:** Rancher is installed. +## Edit the Rancher server URL in the kubeconfig -### 3. Log In +In the kubeconfig file, the server directive is defined as `localhost`. You will need to change the server directive from `localhost` to `:6443`. The Kubernetes API server will be reached at port 6443, while the Rancher server will be reached at ports 80 and 443. This edit is needed so that when you run Helm or kubectl commands from your local workstation, you will be able to communicate with the Kubernetes cluster that Rancher will be installed on. -Log in to Rancher to begin using the application. After you log in, you'll make some one-time configurations. +{{% tabs %}} +{{% tab "Mac and Linux" %}} -1. Open a web browser and enter the IP address of your host: `https://`. +One way to open the kubeconfig file for editing is to use Vim: - Replace `` with your host IP address. +``` +vi ~/.kube/config +``` -2. When prompted, create a password for the default `admin` account there cowpoke! +Press `i` to put Vim in insert mode. To save your work, press `Esc`. Then press `:wq` and press `Enter`. -3. Set the **Rancher Server URL**. The URL can either be an IP address or a host name. However, each node added to your cluster must be able to connect to this URL.

If you use a hostname in the URL, this hostname must be resolvable by DNS on the nodes you want to add to you cluster. +{{% /tab %}} +{{% tab "Windows" %}} -
+In Windows Powershell, you can use `notepad.exe` for editing the kubeconfig file: -### 4. Create the Cluster +``` +notepad.exe $env:USERPROFILE\.kube\config +``` -Welcome to Rancher! You are now able to create your first Kubernetes cluster. +Once edited, either press `ctrl+s` or go to `File > Save` to save your work. -In this task, you can use the versatile **Custom** option. This option lets you add _any_ Linux host (cloud-hosted VM, on-prem VM, or bare-metal) to be used in a cluster. -1. Click **☰ > Cluster Management**. -1. From the **Clusters** page, click **Create**. -2. Choose **Custom**. +{{% /tab %}} +{{% /tabs %}} -3. Enter a **Cluster Name**. +## Install Rancher with Helm -4. Skip **Member Roles** and **Cluster Options**. We'll tell you about them later. +Then from your local workstation, run the following commands. You will need to have [kubectl](https://kubernetes.io/docs/tasks/tools/#kubectl) and [helm.](https://helm.sh/docs/intro/install/) installed. -5. Click **Next**. +``` +helm repo add rancher-latest https://releases.rancher.com/server-charts/latest -6. From **Node Role**, select _all_ the roles: **etcd**, **Control**, and **Worker**. +kubectl create namespace cattle-system -7. **Optional**: Rancher auto-detects the IP addresses used for Rancher communication and cluster communication. You can override these using `Public Address` and `Internal Address` in the **Node Address** section. +kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.7.1/cert-manager.crds.yaml -8. Skip the **Labels** stuff. It's not important for now. +helm repo add jetstack https://charts.jetstack.io -9. Copy the command displayed on screen to your clipboard. +helm repo update -10. Log in to your Linux host using your preferred shell, such as PuTTy or a remote Terminal connection. Run the command copied to your clipboard. +helm install cert-manager jetstack/cert-manager \ + --namespace cert-manager \ + --create-namespace \ + --version v1.7.1 -11. When you finish running the command on your Linux host, click **Done**. +# Windows Powershell +helm install cert-manager jetstack/cert-manager ` + --namespace cert-manager ` + --create-namespace ` + --version v1.7.1 +``` -**Result:** +The final command to install Rancher is below. The command requires a domain name that forwards traffic to the Linux machine. For the sake of simplicity in this tutorial, you can use a fake domain name to create your proof-of-concept. An example of a fake domain name would be `.sslip.io`. -Your cluster is created and assigned a state of **Provisioning**. Rancher is standing up your cluster. +``` +helm install rancher rancher-latest/rancher \ + --namespace cattle-system \ + --set hostname=.sslip.io \ + --set replicas=1 \ + --set bootstrapPassword= -You can access your cluster after its state is updated to **Active**. +# Windows Powershell +helm install rancher rancher-latest/rancher ` + --namespace cattle-system ` + --set hostname=.sslip.io ` + --set replicas=1 ` + --set bootstrapPassword= +``` +``` -**Active** clusters are assigned two Projects: +Now if you navigate to `.sslip.io` in a web browser, you should see the Rancher UI. -- `Default`, containing the `default` namespace -- `System`, containing the `cattle-system`, `ingress-nginx`, `kube-public`, and `kube-system` namespaces +To make these instructions simple, we used a fake domain name and self-signed certificates to do this installation. Therefore, you will probably need to add a security exception to your web browser to see the Rancher UI. Note that for production installs, you would need a high-availability setup with a load balancer, a real domain name and real certificates. -#### Finished +These instructions also left out the full installation requirements and other installation options. If you have any issues with these steps, refer to the full [Helm CLI installation docs.]({{}}/rancher/v2.6/en/installation/install-rancher-on-k8s/) -Congratulations! You have created your first cluster. - -#### What's Next? - -Use Rancher to create a deployment. For more information, see [Creating Deployments]({{}}/rancher/v2.6/en/quick-start-guide/workload). +To launch new Kubernetes clusters with your new Rancher server, you may need to set up cloud credentials in Rancher. For more information, see [Launching Kubernetes clusters with Rancher.]({{}}/rancher/v2.6/en/cluster-provisioning/rke-clusters/) diff --git a/content/rancher/v2.6/en/quick-start-guide/deployment/quickstart-vagrant/_index.md b/content/rancher/v2.6/en/quick-start-guide/deployment/quickstart-vagrant/_index.md index 3f22066b26a..86b3bb420c3 100644 --- a/content/rancher/v2.6/en/quick-start-guide/deployment/quickstart-vagrant/_index.md +++ b/content/rancher/v2.6/en/quick-start-guide/deployment/quickstart-vagrant/_index.md @@ -4,6 +4,8 @@ weight: 200 --- The following steps quickly deploy a Rancher Server with a single node cluster attached. +>**Note:** The intent of these guides is to quickly launch a sandbox that you can use to evaluate Rancher. These guides are not intended for production environments. For comprehensive setup instructions, see [Installation]({{}}/rancher/v2.6/en/installation/). + ## Prerequisites - [Vagrant](https://www.vagrantup.com): Vagrant is required as this is used to provision the machine based on the Vagrantfile. @@ -14,7 +16,7 @@ The following steps quickly deploy a Rancher Server with a single node cluster a - Vagrant will require plugins to create VirtualBox VMs. Install them with the following commands: `vagrant plugin install vagrant-vboxmanage` - + `vagrant plugin install vagrant-vbguest` ## Getting Started @@ -30,7 +32,7 @@ The following steps quickly deploy a Rancher Server with a single node cluster a 4. To initiate the creation of the environment run, `vagrant up --provider=virtualbox`. -5. Once provisioning finishes, go to `https://172.22.101.101` in the browser. The default user/password is `admin/admin`. +5. Once provisioning finishes, go to `https://192.168.56.101` in the browser. The default user/password is `admin/adminPassword`. **Result:** Rancher Server and your Kubernetes cluster is installed on VirtualBox. diff --git a/content/rancher/v2.6/en/quick-start-guide/workload/quickstart-deploy-workload-ingress/_index.md b/content/rancher/v2.6/en/quick-start-guide/workload/quickstart-deploy-workload-ingress/_index.md index fb4ac811514..004950b7fe2 100644 --- a/content/rancher/v2.6/en/quick-start-guide/workload/quickstart-deploy-workload-ingress/_index.md +++ b/content/rancher/v2.6/en/quick-start-guide/workload/quickstart-deploy-workload-ingress/_index.md @@ -13,13 +13,14 @@ You're ready to create your first Kubernetes [workload](https://kubernetes.io/do For this workload, you'll be deploying the application Rancher Hello-World. -1. Click **☰ > Cluster Management**. +1. Click **☰ > Cluster Management**. 1. Go to the cluster that you created and click **Explore**. 1. Click **Workload**. 1. Click **Create**. 1. Click **Deployment**. 1. Enter a **Name** for your workload. 1. From the **Docker Image** field, enter `rancher/hello-world`. This field is case-sensitive. +1. Click **Add Port** and enter `80` in the **Private Container Port** field. Adding a port enables access to the application inside and outside of the cluster. For more information, see [Services]({{}}/rancher/v2.6/en/k8s-in-rancher/workloads/#services). 1. Click **Create**. **Result:** @@ -30,32 +31,33 @@ For this workload, you'll be deploying the application Rancher Hello-World.
### 2. Expose The Application Via An Ingress -Now that the application is up and running it needs to be exposed so that other services can connect. +Now that the application is up and running, it needs to be exposed so that other services can connect. 1. Click **☰ > Cluster Management**. -1. Go to the cluster that you created and click **Explore**. +1. Go to the cluster that you created and click **Explore**. -2. From the main menu of the **Dashboard**, select **Projects**. +1. Click **Service Discovery > Ingresses**. -3. Open the **Default** project. +1. Click **Create.** -4. Click **Resources > Workloads > Load Balancing**. Click on the **Load Balancing** tab. +1. When choosing **Namespace**, ensure it is the same as the one used when you created your deployment. Otherwise, your deployment will not be available when you attempt to select **Target Service**, as in Step 8 below. -5. Click **Add Ingress**. +1. Enter a **Name**, such as **hello**. -6. Enter a name i.e. **hello**. +1. Specify your **Path**, such as `/hello`. -7. In the **Target** field, drop down the list and choose the name that you set for your service. +1. In the **Target Service** field, drop down the list and choose the name that you set for your service. -8. Enter `80` in the **Port** field. +1. In the **Port** field, drop down the list and select `80`. -9. Leave everything else as default and click **Save**. +1. Click **Create** at the bottom right. + +**Result:** The application is assigned a `sslip.io` address and exposed. It may take a minute or two to populate. -**Result:** The application is assigned a `xip.io` address and exposed. It may take a minute or two to populate. ### View Your Application -From the **Load Balancing** page, click the target link, which will look something like `hello.default.xxx.xxx.xxx.xxx.xip.io > hello-world`. +From the **Deployments** page, find the **Endpoints** column for your deployment and click on an endpoint. The endpoints available will depend on how you configured the port you added to your deployment. For endpoints where you do not see a randomly assigned port, append the path you specified when creating the ingress to the IP address. For example, if your endpoint looks like `xxx.xxx.xxx.xxx` or `https://xxx.xxx.xxx.xxx` change it to `xxx.xxx.xxx.xxx/hello` or `https://xxx.xxx.xxx.xxx/hello`. Your application will open in a separate window. diff --git a/content/rancher/v2.6/en/security/_index.md b/content/rancher/v2.6/en/security/_index.md index 49518e50f01..8b782b613c5 100644 --- a/content/rancher/v2.6/en/security/_index.md +++ b/content/rancher/v2.6/en/security/_index.md @@ -11,7 +11,7 @@ weight: 20

Reporting process

-

Please submit possible security issues by emailing security@rancher.com

+

Please submit possible security issues by emailing security-rancher@suse.com .

Announcements

@@ -20,24 +20,32 @@ weight: 20 -Security is at the heart of all Rancher features. From integrating with all the popular authentication tools and services, to an enterprise grade [RBAC capability,]({{}}/rancher/v2.6/en/admin-settings/rbac) Rancher makes your Kubernetes clusters even more secure. +Security is at the heart of all Rancher features. From integrating with all the popular authentication tools and services, to an enterprise grade [RBAC capability]({{}}/rancher/v2.6/en/admin-settings/rbac), Rancher makes your Kubernetes clusters even more secure. -On this page, we provide security-related documentation along with resources to help you secure your Rancher installation and your downstream Kubernetes clusters: +On this page, we provide security related documentation along with resources to help you secure your Rancher installation and your downstream Kubernetes clusters: +- [NeuVector Integration with Rancher](#neuvector-integration-with-rancher) - [Running a CIS security scan on a Kubernetes cluster](#running-a-cis-security-scan-on-a-kubernetes-cluster) - [SELinux RPM](#selinux-rpm) - [Guide to hardening Rancher installations](#rancher-hardening-guide) - [The CIS Benchmark and self-assessment](#the-cis-benchmark-and-self-assessment) - [Third-party penetration test reports](#third-party-penetration-test-reports) -- [Rancher CVEs and resolutions](#rancher-cves-and-resolutions) +- [Rancher Security Advisories and CVEs](#rancher-security-advisories-and-cves) +- [Kubernetes Security Best Practices](#kubernetes-security-best-practices) + +### NeuVector Integration with Rancher + +_New in v2.6.5_ + +NeuVector is an open-source, container-focused security application that is now integrated into Rancher. NeuVector provides production security, DevOps vulnerability protection, and a container firewall, et al. Please see the [Rancher docs]({{}}/rancher/v2.6/en/neuvector-integration) and the [NeuVector docs](https://open-docs.neuvector.com/) for more information. ### Running a CIS Security Scan on a Kubernetes Cluster -Rancher leverages [kube-bench](https://github.com/aquasecurity/kube-bench) to run a security scan to check whether Kubernetes is deployed according to security best practices as defined in the CIS (Center for Internet Security) Kubernetes Benchmark. +Rancher leverages [kube-bench](https://github.com/aquasecurity/kube-bench) to run a security scan to check whether Kubernetes is deployed according to security best practices as defined in the [CIS](https://www.cisecurity.org/cis-benchmarks/) (Center for Internet Security) Kubernetes Benchmark. The CIS Kubernetes Benchmark is a reference document that can be used to establish a secure configuration baseline for Kubernetes. -The Center for Internet Security (CIS) is a 501(c\)(3) non-profit organization, formed in October 2000, with a mission to "identify, develop, validate, promote, and sustain best practice solutions for cyber defense and build and lead communities to enable an environment of trust in cyberspace." +The Center for Internet Security (CIS) is a 501(c\)(3) non-profit organization, formed in October 2000, with a mission to "identify, develop, validate, promote, and sustain best practice solutions for cyber defense and build and lead communities to enable an environment of trust in cyberspace". CIS Benchmarks are best practices for the secure configuration of a target system. CIS Benchmarks are developed through the generous volunteer efforts of subject matter experts, technology vendors, public and private community members, and the CIS Benchmark Development team. @@ -45,13 +53,13 @@ The Benchmark provides recommendations of two types: Automated and Manual. We ru When Rancher runs a CIS security scan on a cluster, it generates a report showing the results of each test, including a summary with the number of passed, skipped and failed tests. The report also includes remediation steps for any failed tests. -For details, refer to the section on [security scans.]({{}}/rancher/v2.6/en/cis-scans) +For details, refer to the section on [security scans]({{}}/rancher/v2.6/en/cis-scans). ### SELinux RPM [Security-Enhanced Linux (SELinux)](https://en.wikipedia.org/wiki/Security-Enhanced_Linux) is a security enhancement to Linux. After being historically used by government agencies, SELinux is now industry standard and is enabled by default on CentOS 7 and 8. -We provide two RPMs (Red Hat packages) that enable Rancher products to function properly on SELinux-enforcing hosts: `rancher-selinux` and `rke2-selinux`. For details, see [this page.]({{}}/rancher/v2.6/en/security/selinux) +We provide two RPMs (Red Hat packages) that enable Rancher products to function properly on SELinux-enforcing hosts: `rancher-selinux` and `rke2-selinux`. For details, see [this page]({{}}/rancher/v2.6/en/security/selinux). ### Rancher Hardening Guide @@ -77,9 +85,13 @@ Rancher periodically hires third parties to perform security audits and penetrat Results: -- [Cure53 Pen Test - 7/2019](https://releases.rancher.com/documents/security/pen-tests/2019/RAN-01-cure53-report.final.pdf) -- [Untamed Theory Pen Test- 3/2019](https://releases.rancher.com/documents/security/pen-tests/2019/UntamedTheory-Rancher_SecurityAssessment-20190712_v5.pdf) +- [Cure53 Pen Test - July 2019](https://releases.rancher.com/documents/security/pen-tests/2019/RAN-01-cure53-report.final.pdf) +- [Untamed Theory Pen Test- March 2019](https://releases.rancher.com/documents/security/pen-tests/2019/UntamedTheory-Rancher_SecurityAssessment-20190712_v5.pdf) -### Rancher CVEs and Resolutions +### Rancher Security Advisories and CVEs Rancher is committed to informing the community of security issues in our products. For the list of CVEs (Common Vulnerabilities and Exposures) for issues we have resolved, refer to [this page.](./cve) + +### Kubernetes Security Best Practices + +For recommendations on securing your Kubernetes cluster, refer to the [Kubernetes Security Best Practices](./best-practices) guide. diff --git a/content/rancher/v2.6/en/security/best-practices/_index.md b/content/rancher/v2.6/en/security/best-practices/_index.md new file mode 100644 index 00000000000..4dc70b3d510 --- /dev/null +++ b/content/rancher/v2.6/en/security/best-practices/_index.md @@ -0,0 +1,12 @@ +--- +title: Kubernetes Security Best Practices +weight: 5 +--- + +### Restricting cloud metadata API access + +Cloud providers such as AWS, Azure, DigitalOcean or GCP often expose metadata services locally to instances. By default, this endpoint is accessible by pods running on a cloud instance, including pods in hosted Kubernetes providers such as EKS, AKS, DigitalOcean Kubernetes or GKE, and can contain cloud credentials for that node, provisioning data such as kubelet credentials, or other sensitive data. To mitigate this risk when running on a cloud platform, follow the [Kubernetes security recommendations](https://kubernetes.io/docs/tasks/administer-cluster/securing-a-cluster/#restricting-cloud-metadata-api-access): limit permissions given to instance credentials, use network policies to restrict pod access to the metadata API, and avoid using provisioning data to deliver secrets. + +It is advised to consult your cloud provider's security best practices for further recommendations and specific details on how to restrict access to cloud instance metadata API. + +Further references: MITRE ATT&CK knowledge base on - [Unsecured Credentials: Cloud Instance Metadata API](https://attack.mitre.org/techniques/T1552/005/). diff --git a/content/rancher/v2.6/en/security/cve/_index.md b/content/rancher/v2.6/en/security/cve/_index.md index b97cf1a59c5..b353c508096 100644 --- a/content/rancher/v2.6/en/security/cve/_index.md +++ b/content/rancher/v2.6/en/security/cve/_index.md @@ -1,12 +1,19 @@ --- -title: Rancher CVEs and Resolutions +title: Security Advisories and CVEs weight: 300 --- -Rancher is committed to informing the community of security issues in our products. Rancher will publish CVEs (Common Vulnerabilities and Exposures) for issues we have resolved. +Rancher is committed to informing the community of security issues in our products. Rancher will publish security advisories and CVEs (Common Vulnerabilities and Exposures) for issues we have resolved. New security advisories are also published in Rancher's GitHub [security page](https://github.com/rancher/rancher/security/advisories). | ID | Description | Date | Resolution | |----|-------------|------|------------| +| [CVE-2021-36784](https://github.com/rancher/rancher/security/advisories/GHSA-jwvr-vv7p-gpwq) | A vulnerability was discovered in Rancher versions from 2.5.0 up to and including 2.5.12 and from 2.6.0 up to and including 2.6.3 which allows users who have create or update permissions on [Global Roles](https://rancher.com/docs/rancher/v2.6/en/admin-settings/rbac/) to escalate their permissions, or those of another user, to admin-level permissions. Global Roles grant users Rancher-wide permissions, such as the ability to create clusters. In the identified versions of Rancher, when users are given permission to edit or create Global Roles, they are not restricted to only granting permissions which they already posses. This vulnerability affects customers who utilize non-admin users that are able to create or edit Global Roles. The most common use case for this scenario is the `restricted-admin` role. | 14 Apr 2022 | [Rancher v2.6.4](https://github.com/rancher/rancher/releases/tag/v2.6.4) and [Rancher v2.5.13](https://github.com/rancher/rancher/releases/tag/v2.5.13) | +| [CVE-2021-4200](https://github.com/rancher/rancher/security/advisories/GHSA-hx8w-ghh8-r4xf) | This vulnerability only affects customers using the `restricted-admin` role in Rancher. A vulnerability was discovered in Rancher versions from 2.5.0 up to and including 2.5.12 and from 2.6.0 up to and including 2.6.3 where the `global-data` role in `cattle-global-data` namespace grants write access to the Catalogs. Since each user with any level of catalog access was bound to the `global-data` role, this grants write access to templates (`CatalogTemplates`) and template versions (`CatalogTemplateVersions`) for any user with any level of catalog access. New users created in Rancher are by default assigned to the `user` role (standard user), which is not designed to grant write catalog access. This vulnerability effectively elevates the privilege of any user to write access for the catalog template and catalog template version resources. | 14 Apr 2022 | [Rancher v2.6.4](https://github.com/rancher/rancher/releases/tag/v2.6.4) and [Rancher v2.5.13](https://github.com/rancher/rancher/releases/tag/v2.5.13) | +| [GHSA-wm2r-rp98-8pmh](https://github.com/rancher/rancher/security/advisories/GHSA-wm2r-rp98-8pmh) | This vulnerability only affects customers using [Fleet](https://rancher.com/docs/rancher/v2.6/en/deploy-across-clusters/fleet/) for continuous delivery with authenticated Git and/or Helm repositories. An issue was discovered in `go-getter` library in versions prior to [`v1.5.11`](https://github.com/hashicorp/go-getter/releases/tag/v1.5.11) that exposes SSH private keys in base64 format due to a failure in redacting such information from error messages. The vulnerable version of this library is used in Rancher through Fleet in versions of Fleet prior to [`v0.3.9`](https://github.com/rancher/fleet/releases/tag/v0.3.9). This issue affects Rancher versions 2.5.0 up to and including 2.5.12 and from 2.6.0 up to and including 2.6.3. The issue was found and reported by Dagan Henderson from Raft Engineering. | 14 Apr 2022 | [Rancher v2.6.4](https://github.com/rancher/rancher/releases/tag/v2.6.4) and [Rancher v2.5.13](https://github.com/rancher/rancher/releases/tag/v2.5.13) | +| [CVE-2021-36778](https://github.com/rancher/rancher/security/advisories/GHSA-4fc7-hc63-7fjg) | A vulnerability was discovered in Rancher versions from 2.5.0 up to and including 2.5.11 and from 2.6.0 up to and including 2.6.2, where an insufficient check of the same-origin policy when downloading Helm charts from a configured private repository can lead to exposure of the repository credentials to a third-party provider. This issue only happens when the user configures access credentials to a private repository in Rancher inside `Apps & Marketplace > Repositories`. The issue was found and reported by Martin Andreas Ullrich. | 14 Apr 2022 | [Rancher v2.6.3](https://github.com/rancher/rancher/releases/tag/v2.6.3) and [Rancher v2.5.12](https://github.com/rancher/rancher/releases/tag/v2.5.12) | +| [GHSA-hwm2-4ph6-w6m5](https://github.com/rancher/rancher/security/advisories/GHSA-hwm2-4ph6-w6m5) | A vulnerability was discovered in versions of Rancher starting 2.0 up to and including 2.6.3. The `restricted` pod security policy (PSP) provided in Rancher deviated from the upstream `restricted` policy provided in Kubernetes on account of which Rancher's PSP had `runAsUser` set to `runAsAny`, while upstream had `runAsUser` set to `MustRunAsNonRoot`. This allowed containers to run as any user, including a privileged user (`root`), even when Rancher's `restricted` policy was enforced on a project or at the cluster level. | 31 Mar 2022 | [Rancher v2.6.4](https://github.com/rancher/rancher/releases/tag/v2.6.4) | +| [CVE-2021-36775](https://github.com/rancher/rancher/security/advisories/GHSA-28g7-896h-695v) | A vulnerability was discovered in Rancher versions up to and including 2.4.17, 2.5.11 and 2.6.2. After removing a `Project Role` associated with a group from the project, the bindings that granted access to cluster-scoped resources for those subjects were not deleted. This was due to an incomplete authorization logic check. A user who was a member of the affected group with authenticated access to Rancher could exploit this vulnerability to access resources they shouldn't have had access to. The exposure level would depend on the original permission level granted to the affected project role. This vulnerability only affected customers using group based authentication in Rancher. | 31 Mar 2022 | [Rancher v2.6.3](https://github.com/rancher/rancher/releases/tag/v2.6.3), [Rancher v2.5.12](https://github.com/rancher/rancher/releases/tag/v2.5.12) and [Rancher v2.4.18](https://github.com/rancher/rancher/releases/tag/v2.4.18) | +| [CVE-2021-36776](https://github.com/rancher/rancher/security/advisories/GHSA-gvh9-xgrq-r8hw) | A vulnerability was discovered in Rancher versions starting 2.5.0 up to and including 2.5.9, that allowed an authenticated user to impersonate any user on a cluster through an API proxy, without requiring knowledge of the impersonated user's credentials. This was due to the API proxy not dropping the impersonation header before sending the request to the Kubernetes API. A malicious user with authenticated access to Rancher could use this to impersonate another user with administrator access in Rancher, thereby gaining administrator level access to the cluster. | 31 Mar 2022 | [Rancher v2.6.0](https://github.com/rancher/rancher/releases/tag/v2.6.0) and [Rancher v2.5.10](https://github.com/rancher/rancher/releases/tag/v2.5.10) | | [CVE-2021-25318](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-25318) | A vulnerability was discovered in Rancher versions 2.0 through the aforementioned fixed versions, where users were granted access to resources regardless of the resource's API group. For example, Rancher should have allowed users access to `apps.catalog.cattle.io`, but instead incorrectly gave access to `apps.*`. Resources affected in the **Downstream clusters** and **Rancher management cluster** can be found [here](https://github.com/rancher/rancher/security/advisories/GHSA-f9xf-jq4j-vqw4). There is not a direct mitigation besides upgrading to the patched Rancher versions. | 14 Jul 2021 | [Rancher v2.5.9](https://github.com/rancher/rancher/releases/tag/v2.5.9) and [Rancher v2.4.16](https://github.com/rancher/rancher/releases/tag/v2.4.16) | | [CVE-2021-31999](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-31999) | A vulnerability was discovered in Rancher 2.0.0 through the aforementioned patched versions, where a malicious Rancher user could craft an API request directed at the proxy for the Kubernetes API of a managed cluster to gain access to information they do not have access to. This is done by passing the "Impersonate-User" or "Impersonate-Group" header in the Connection header, which is then correctly removed by the proxy. At this point, instead of impersonating the user and their permissions, the request will act as if it was from the Rancher management server and incorrectly return the information. The vulnerability is limited to valid Rancher users with some level of permissions on the cluster. There is not a direct mitigation besides upgrading to the patched Rancher versions. | 14 Jul 2021 | [Rancher v2.5.9](https://github.com/rancher/rancher/releases/tag/v2.5.9) and [Rancher v2.4.16](https://github.com/rancher/rancher/releases/tag/v2.4.16) | | [CVE-2021-25320](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-25320) | A vulnerability was discovered in Rancher 2.2.0 through the aforementioned patched versions, where cloud credentials weren't being properly validated through the Rancher API. Specifically through a proxy designed to communicate with cloud providers. Any Rancher user that was logged-in and aware of a cloud-credential ID that was valid for a given cloud provider, could call that cloud provider's API through the proxy API, and the cloud-credential would be attached. The exploit is limited to valid Rancher users. There is not a direct mitigation outside of upgrading to the patched Rancher versions. | 14 Jul 2021 | [Rancher v2.5.9](https://github.com/rancher/rancher/releases/tag/v2.5.9) and [Rancher v2.4.16](https://github.com/rancher/rancher/releases/tag/v2.4.16) | @@ -18,4 +25,4 @@ Rancher is committed to informing the community of security issues in our produc | [CVE-2019-12274](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-12274) | Nodes using the built-in node drivers using a file path option allows the machine to read arbitrary files including sensitive ones from inside the Rancher server container. | 5 Jun 2019 | [Rancher v2.2.4](https://github.com/rancher/rancher/releases/tag/v2.2.4), [Rancher v2.1.10](https://github.com/rancher/rancher/releases/tag/v2.1.10) and [Rancher v2.0.15](https://github.com/rancher/rancher/releases/tag/v2.0.15) | | [CVE-2019-11202](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-11202) | The default admin, that is shipped with Rancher, will be re-created upon restart of Rancher despite being explicitly deleted. | 16 Apr 2019 | [Rancher v2.2.2](https://github.com/rancher/rancher/releases/tag/v2.2.2), [Rancher v2.1.9](https://github.com/rancher/rancher/releases/tag/v2.1.9) and [Rancher v2.0.14](https://github.com/rancher/rancher/releases/tag/v2.0.14) | | [CVE-2019-6287](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-6287) | Project members continue to get access to namespaces from projects that they were removed from if they were added to more than one project. | 29 Jan 2019 | [Rancher v2.1.6](https://github.com/rancher/rancher/releases/tag/v2.1.6) and [Rancher v2.0.11](https://github.com/rancher/rancher/releases/tag/v2.0.11) | -| [CVE-2018-20321](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-20321) | Any project member with access to the `default` namespace can mount the `netes-default` service account in a pod and then use that pod to execute administrative privileged commands against the Kubernetes cluster. | 29 Jan 2019 | [Rancher v2.1.6](https://github.com/rancher/rancher/releases/tag/v2.1.6) and [Rancher v2.0.11](https://github.com/rancher/rancher/releases/tag/v2.0.11) - Rolling back from these versions or greater have specific [instructions]({{}}/rancher/v2.6/en/installation/install-rancher-on-k8s/rollbacks). | \ No newline at end of file +| [CVE-2018-20321](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-20321) | Any project member with access to the `default` namespace can mount the `netes-default` service account in a pod and then use that pod to execute administrative privileged commands against the Kubernetes cluster. | 29 Jan 2019 | [Rancher v2.1.6](https://github.com/rancher/rancher/releases/tag/v2.1.6) and [Rancher v2.0.11](https://github.com/rancher/rancher/releases/tag/v2.0.11) - Rolling back from these versions or greater have specific [instructions]({{}}/rancher/v2.6/en/installation/install-rancher-on-k8s/rollbacks). | diff --git a/content/rancher/v2.6/en/security/hardening-guides/1.6-benchmark-2.6/Rancher_v2-6_CIS_v1-6_Benchmark_Assessment.pdf b/content/rancher/v2.6/en/security/hardening-guides/1.6-benchmark-2.6/Rancher_v2-6_CIS_v1-6_Benchmark_Assessment.pdf new file mode 100644 index 00000000000..f08210f51e6 --- /dev/null +++ b/content/rancher/v2.6/en/security/hardening-guides/1.6-benchmark-2.6/Rancher_v2-6_CIS_v1-6_Benchmark_Assessment.pdf @@ -0,0 +1,14832 @@ +%PDF-1.7 +%🖤 +1 0 obj +<< +/Type /Pages +/Kids [ 6 0 R 8 0 R 38 0 R 76 0 R 114 0 R 152 0 R 186 0 R 222 0 R 258 0 R 292 0 R 304 0 R 309 0 R 313 0 R 315 0 R 318 0 R 323 0 R 325 0 R 349 0 R 374 0 R 407 0 R 440 0 R 464 0 R 503 0 R 508 0 R 511 0 R 514 0 R 516 0 R 519 0 R 521 0 R 524 0 R 527 0 R 529 0 R 532 0 R 534 0 R 537 0 R 540 0 R 542 0 R 545 0 R 548 0 R 550 0 R 553 0 R 555 0 R 559 0 R 562 0 R 565 0 R 567 0 R 570 0 R 572 0 R 575 0 R 578 0 R 580 0 R 583 0 R 586 0 R 588 0 R 591 0 R 593 0 R 596 0 R 599 0 R 601 0 R 604 0 R 607 0 R 609 0 R 612 0 R 614 0 R 617 0 R 620 0 R 622 0 R 625 0 R 627 0 R 630 0 R 633 0 R 635 0 R 638 0 R 641 0 R 643 0 R 660 0 R 674 0 R 677 0 R 680 0 R 683 0 R 686 0 R 689 0 R 692 0 R 694 0 R 698 0 R 700 0 R 703 0 R 705 0 R 708 0 R 710 0 R 713 0 R 715 0 R 717 0 R 720 0 R 722 0 R 725 0 R 727 0 R 730 0 R 732 0 R 734 0 R 737 0 R 739 0 R 741 0 R 743 0 R 746 0 R 748 0 R 751 0 R 755 0 R 764 0 R 772 0 R 774 0 R 779 0 R 784 0 R 790 0 R 794 0 R 798 0 R 804 0 R 808 0 R 812 0 R 815 0 R 817 0 R 842 0 R 853 0 R 856 0 R 860 0 R 863 0 R 880 0 R 887 0 R 889 0 R 891 0 R 893 0 R ] +/Count 131 +>> +endobj +2 0 obj +<< +/Title (CIS v1.6 Benchmark - Self-Assessment Guide - Rancher v2.6) +/Creator (pandoc) +/Producer (WeasyPrint 54.2) +>> +endobj +3 0 obj +<< +/Type /Catalog +/Pages 1 0 R +/Outlines 1055 0 R +/Names << +/Dests << +/Names [ (TOC) [ 8 0 R /XYZ 77.509843 756.850394 0 ] (api-server) [ 508 0 R /XYZ 41.740157 784.430079 0 ] (apply-security-context-to-your-pods-and-containers-manual) [ 891 0 R /XYZ 84.259843 324.051496 0 ] (authentication-and-authorization) [ 741 0 R /XYZ 41.740157 784.430079 0 ] (cb1) [ 315 0 R /XYZ 84.259843 207.170079 0 ] (cb1-1) [ 315 0 R /XYZ 101.433071 205.473057 0 ] (cb10) [ 349 0 R /XYZ 84.259843 342.035606 0 ] (cb10-1) [ 349 0 R /XYZ 101.433071 340.338585 0 ] (cb101) [ 622 0 R /XYZ 84.259843 504.320079 0 ] (cb101-1) [ 622 0 R /XYZ 101.433071 502.623057 0 ] (cb104) [ 627 0 R /XYZ 84.259843 772.370079 0 ] (cb104-1) [ 627 0 R /XYZ 101.433071 770.673057 0 ] (cb107) [ 630 0 R /XYZ 84.259843 313.070079 0 ] (cb107-1) [ 630 0 R /XYZ 101.433071 311.373057 0 ] (cb110) [ 635 0 R /XYZ 84.259843 560.570079 0 ] (cb110-1) [ 635 0 R /XYZ 101.433071 558.873057 0 ] (cb113) [ 638 0 R /XYZ 84.259843 110.570079 0 ] (cb113-1) [ 638 0 R /XYZ 101.433071 108.873057 0 ] (cb116) [ 643 0 R /XYZ 84.259843 418.070079 0 ] (cb116-1) [ 643 0 R /XYZ 101.433071 416.373057 0 ] (cb116-10) [ 643 0 R /XYZ 99.933071 189.008799 0 ] (cb116-11) [ 643 0 R /XYZ 99.933071 170.061778 0 ] (cb116-12) [ 643 0 R /XYZ 99.933071 151.114756 0 ] (cb116-13) [ 643 0 R /XYZ 99.933071 132.167735 0 ] (cb116-14) [ 643 0 R /XYZ 99.933071 113.220714 0 ] (cb116-15) [ 643 0 R /XYZ 99.933071 94.273692 0 ] (cb116-16) [ 660 0 R /XYZ 99.933071 799.173057 0 ] (cb116-17) [ 660 0 R /XYZ 99.933071 780.226036 0 ] (cb116-18) [ 660 0 R /XYZ 99.933071 761.279014 0 ] (cb116-19) [ 660 0 R /XYZ 99.933071 742.331993 0 ] (cb116-2) [ 643 0 R /XYZ 99.933071 397.426036 0 ] (cb116-20) [ 660 0 R /XYZ 99.933071 723.384971 0 ] (cb116-21) [ 660 0 R /XYZ 99.933071 704.437950 0 ] (cb116-22) [ 660 0 R /XYZ 99.933071 685.490928 0 ] (cb116-23) [ 660 0 R /XYZ 99.933071 666.543907 0 ] (cb116-24) [ 660 0 R /XYZ 99.933071 647.596885 0 ] (cb116-25) [ 660 0 R /XYZ 99.933071 628.649864 0 ] (cb116-3) [ 643 0 R /XYZ 99.933071 378.479014 0 ] (cb116-4) [ 643 0 R /XYZ 99.933071 340.584971 0 ] (cb116-5) [ 643 0 R /XYZ 99.933071 321.637950 0 ] (cb116-6) [ 643 0 R /XYZ 99.933071 302.690928 0 ] (cb116-7) [ 643 0 R /XYZ 99.933071 283.743907 0 ] (cb116-8) [ 643 0 R /XYZ 99.933071 264.796885 0 ] (cb116-9) [ 643 0 R /XYZ 99.933071 226.902842 0 ] (cb117) [ 660 0 R /XYZ 84.259843 569.399864 0 ] (cb117-1) [ 660 0 R /XYZ 101.433071 567.702842 0 ] (cb120) [ 660 0 R /XYZ 84.259843 196.152842 0 ] (cb120-1) [ 660 0 R /XYZ 101.433071 194.455821 0 ] (cb121) [ 674 0 R /XYZ 84.259843 550.251496 0 ] (cb121-1) [ 674 0 R /XYZ 101.433071 548.554475 0 ] (cb124) [ 677 0 R /XYZ 84.259843 571.820079 0 ] (cb124-1) [ 677 0 R /XYZ 101.433071 570.123057 0 ] (cb127) [ 680 0 R /XYZ 84.259843 575.570079 0 ] (cb127-1) [ 680 0 R /XYZ 101.433071 573.873057 0 ] (cb13) [ 374 0 R /XYZ 84.259843 711.620079 0 ] (cb13-1) [ 374 0 R /XYZ 101.433071 709.923057 0 ] (cb13-10) [ 374 0 R /XYZ 99.933071 501.505821 0 ] (cb13-11) [ 374 0 R /XYZ 99.933071 482.558799 0 ] (cb13-12) [ 374 0 R /XYZ 99.933071 463.611778 0 ] (cb13-13) [ 374 0 R /XYZ 99.933071 444.664756 0 ] (cb13-14) [ 374 0 R /XYZ 99.933071 425.717735 0 ] (cb13-15) [ 374 0 R /XYZ 99.933071 406.770714 0 ] (cb13-16) [ 374 0 R /XYZ 99.933071 387.823692 0 ] (cb13-17) [ 374 0 R /XYZ 99.933071 368.876671 0 ] (cb13-18) [ 374 0 R /XYZ 99.933071 349.929649 0 ] (cb13-19) [ 374 0 R /XYZ 99.933071 330.982628 0 ] (cb13-2) [ 374 0 R /XYZ 99.933071 690.976036 0 ] (cb13-20) [ 374 0 R /XYZ 99.933071 312.035606 0 ] (cb13-21) [ 374 0 R /XYZ 99.933071 293.088585 0 ] (cb13-22) [ 374 0 R /XYZ 99.933071 274.141563 0 ] (cb13-23) [ 374 0 R /XYZ 99.933071 255.194542 0 ] (cb13-24) [ 374 0 R /XYZ 99.933071 236.247520 0 ] (cb13-25) [ 374 0 R /XYZ 99.933071 217.300499 0 ] (cb13-26) [ 374 0 R /XYZ 99.933071 198.353477 0 ] (cb13-27) [ 374 0 R /XYZ 99.933071 179.406456 0 ] (cb13-28) [ 374 0 R /XYZ 99.933071 160.459434 0 ] (cb13-29) [ 374 0 R /XYZ 99.933071 141.512413 0 ] (cb13-3) [ 374 0 R /XYZ 99.933071 672.029014 0 ] (cb13-30) [ 374 0 R /XYZ 99.933071 122.565391 0 ] (cb13-31) [ 374 0 R /XYZ 99.933071 103.618370 0 ] (cb13-32) [ 407 0 R /XYZ 99.933071 799.173057 0 ] (cb13-33) [ 407 0 R /XYZ 99.933071 780.226036 0 ] (cb13-34) [ 407 0 R /XYZ 99.933071 761.279014 0 ] (cb13-35) [ 407 0 R /XYZ 99.933071 742.331993 0 ] (cb13-36) [ 407 0 R /XYZ 99.933071 723.384971 0 ] (cb13-37) [ 407 0 R /XYZ 99.933071 704.437950 0 ] (cb13-38) [ 407 0 R /XYZ 99.933071 685.490928 0 ] (cb13-39) [ 407 0 R /XYZ 99.933071 666.543907 0 ] (cb13-4) [ 374 0 R /XYZ 99.933071 634.134971 0 ] (cb13-40) [ 407 0 R /XYZ 99.933071 647.596885 0 ] (cb13-41) [ 407 0 R /XYZ 99.933071 628.649864 0 ] (cb13-42) [ 407 0 R /XYZ 99.933071 609.702842 0 ] (cb13-43) [ 407 0 R /XYZ 99.933071 590.755821 0 ] (cb13-44) [ 407 0 R /XYZ 99.933071 571.808799 0 ] (cb13-45) [ 407 0 R /XYZ 99.933071 552.861778 0 ] (cb13-46) [ 407 0 R /XYZ 99.933071 533.914756 0 ] (cb13-47) [ 407 0 R /XYZ 99.933071 514.967735 0 ] (cb13-48) [ 407 0 R /XYZ 99.933071 496.020714 0 ] (cb13-49) [ 407 0 R /XYZ 99.933071 477.073692 0 ] (cb13-5) [ 374 0 R /XYZ 99.933071 596.240928 0 ] (cb13-50) [ 407 0 R /XYZ 99.933071 458.126671 0 ] (cb13-51) [ 407 0 R /XYZ 99.933071 439.179649 0 ] (cb13-52) [ 407 0 R /XYZ 99.933071 420.232628 0 ] (cb13-53) [ 407 0 R /XYZ 99.933071 382.338585 0 ] (cb13-54) [ 407 0 R /XYZ 99.933071 363.391563 0 ] (cb13-55) [ 407 0 R /XYZ 99.933071 344.444542 0 ] (cb13-56) [ 407 0 R /XYZ 99.933071 325.497520 0 ] (cb13-57) [ 407 0 R /XYZ 99.933071 306.550499 0 ] (cb13-58) [ 407 0 R /XYZ 99.933071 287.603477 0 ] (cb13-59) [ 407 0 R /XYZ 99.933071 268.656456 0 ] (cb13-6) [ 374 0 R /XYZ 99.933071 577.293907 0 ] (cb13-60) [ 407 0 R /XYZ 99.933071 249.709434 0 ] (cb13-61) [ 407 0 R /XYZ 99.933071 230.762413 0 ] (cb13-7) [ 374 0 R /XYZ 99.933071 558.346885 0 ] (cb13-8) [ 374 0 R /XYZ 99.933071 539.399864 0 ] (cb13-9) [ 374 0 R /XYZ 99.933071 520.452842 0 ] (cb130) [ 683 0 R /XYZ 84.259843 560.570079 0 ] (cb130-1) [ 683 0 R /XYZ 101.433071 558.873057 0 ] (cb133) [ 686 0 R /XYZ 84.259843 556.820079 0 ] (cb133-1) [ 686 0 R /XYZ 101.433071 555.123057 0 ] (cb136) [ 689 0 R /XYZ 84.259843 369.020079 0 ] (cb136-1) [ 689 0 R /XYZ 101.433071 367.323057 0 ] (cb139) [ 694 0 R /XYZ 84.259843 565.251496 0 ] (cb139-1) [ 694 0 R /XYZ 101.433071 563.554475 0 ] (cb14) [ 407 0 R /XYZ 84.259843 171.512413 0 ] (cb14-1) [ 407 0 R /XYZ 101.433071 169.815391 0 ] (cb142) [ 694 0 R /XYZ 84.259843 102.004475 0 ] (cb142-1) [ 694 0 R /XYZ 101.433071 100.307453 0 ] (cb145) [ 700 0 R /XYZ 84.259843 514.251496 0 ] (cb145-1) [ 700 0 R /XYZ 101.433071 512.554475 0 ] (cb148) [ 705 0 R /XYZ 84.259843 309.320079 0 ] (cb148-1) [ 705 0 R /XYZ 101.433071 307.623057 0 ] (cb151) [ 710 0 R /XYZ 84.259843 103.070079 0 ] (cb151-1) [ 710 0 R /XYZ 101.433071 101.373057 0 ] (cb154) [ 717 0 R /XYZ 84.259843 613.970079 0 ] (cb154-1) [ 717 0 R /XYZ 101.433071 612.273057 0 ] (cb157) [ 722 0 R /XYZ 84.259843 403.070079 0 ] (cb157-1) [ 722 0 R /XYZ 101.433071 401.373057 0 ] (cb160) [ 727 0 R /XYZ 84.259843 178.070079 0 ] (cb160-1) [ 727 0 R /XYZ 101.433071 176.373057 0 ] (cb163) [ 734 0 R /XYZ 84.259843 628.970079 0 ] (cb163-1) [ 734 0 R /XYZ 101.433071 627.273057 0 ] (cb166) [ 743 0 R /XYZ 84.259843 595.251496 0 ] (cb166-1) [ 743 0 R /XYZ 101.433071 593.554475 0 ] (cb169) [ 748 0 R /XYZ 84.259843 267.651496 0 ] (cb169-1) [ 748 0 R /XYZ 101.433071 265.954475 0 ] (cb17) [ 440 0 R /XYZ 84.259843 543.320079 0 ] (cb17-1) [ 440 0 R /XYZ 101.433071 541.623057 0 ] (cb17-10) [ 440 0 R /XYZ 99.933071 333.205821 0 ] (cb17-11) [ 440 0 R /XYZ 99.933071 314.258799 0 ] (cb17-12) [ 440 0 R /XYZ 99.933071 295.311778 0 ] (cb17-13) [ 440 0 R /XYZ 99.933071 276.364756 0 ] (cb17-14) [ 440 0 R /XYZ 99.933071 257.417735 0 ] (cb17-15) [ 440 0 R /XYZ 99.933071 238.470714 0 ] (cb17-16) [ 440 0 R /XYZ 99.933071 219.523692 0 ] (cb17-17) [ 440 0 R /XYZ 99.933071 200.576671 0 ] (cb17-18) [ 440 0 R /XYZ 99.933071 181.629649 0 ] (cb17-19) [ 440 0 R /XYZ 99.933071 162.682628 0 ] (cb17-2) [ 440 0 R /XYZ 99.933071 522.676036 0 ] (cb17-20) [ 440 0 R /XYZ 99.933071 143.735606 0 ] (cb17-21) [ 440 0 R /XYZ 99.933071 124.788585 0 ] (cb17-22) [ 440 0 R /XYZ 99.933071 105.841563 0 ] (cb17-23) [ 464 0 R /XYZ 99.933071 799.173057 0 ] (cb17-24) [ 464 0 R /XYZ 99.933071 780.226036 0 ] (cb17-25) [ 464 0 R /XYZ 99.933071 761.279014 0 ] (cb17-26) [ 464 0 R /XYZ 99.933071 742.331993 0 ] (cb17-27) [ 464 0 R /XYZ 99.933071 723.384971 0 ] (cb17-28) [ 464 0 R /XYZ 99.933071 704.437950 0 ] (cb17-29) [ 464 0 R /XYZ 99.933071 685.490928 0 ] (cb17-3) [ 440 0 R /XYZ 99.933071 503.729014 0 ] (cb17-30) [ 464 0 R /XYZ 99.933071 666.543907 0 ] (cb17-31) [ 464 0 R /XYZ 99.933071 647.596885 0 ] (cb17-32) [ 464 0 R /XYZ 99.933071 628.649864 0 ] (cb17-33) [ 464 0 R /XYZ 99.933071 609.702842 0 ] (cb17-34) [ 464 0 R /XYZ 99.933071 590.755821 0 ] (cb17-35) [ 464 0 R /XYZ 99.933071 571.808799 0 ] (cb17-36) [ 464 0 R /XYZ 99.933071 552.861778 0 ] (cb17-37) [ 464 0 R /XYZ 99.933071 533.914756 0 ] (cb17-38) [ 464 0 R /XYZ 99.933071 514.967735 0 ] (cb17-39) [ 464 0 R /XYZ 99.933071 496.020714 0 ] (cb17-4) [ 440 0 R /XYZ 99.933071 465.834971 0 ] (cb17-40) [ 464 0 R /XYZ 99.933071 477.073692 0 ] (cb17-41) [ 464 0 R /XYZ 99.933071 458.126671 0 ] (cb17-42) [ 464 0 R /XYZ 99.933071 439.179649 0 ] (cb17-43) [ 464 0 R /XYZ 99.933071 420.232628 0 ] (cb17-44) [ 464 0 R /XYZ 99.933071 401.285606 0 ] (cb17-45) [ 464 0 R /XYZ 99.933071 382.338585 0 ] (cb17-46) [ 464 0 R /XYZ 99.933071 363.391563 0 ] (cb17-47) [ 464 0 R /XYZ 99.933071 344.444542 0 ] (cb17-48) [ 464 0 R /XYZ 99.933071 325.497520 0 ] (cb17-49) [ 464 0 R /XYZ 99.933071 306.550499 0 ] (cb17-5) [ 440 0 R /XYZ 99.933071 427.940928 0 ] (cb17-50) [ 464 0 R /XYZ 99.933071 287.603477 0 ] (cb17-51) [ 464 0 R /XYZ 99.933071 268.656456 0 ] (cb17-52) [ 464 0 R /XYZ 99.933071 249.709434 0 ] (cb17-53) [ 464 0 R /XYZ 99.933071 211.815391 0 ] (cb17-54) [ 464 0 R /XYZ 99.933071 192.868370 0 ] (cb17-55) [ 464 0 R /XYZ 99.933071 173.921348 0 ] (cb17-56) [ 464 0 R /XYZ 99.933071 154.974327 0 ] (cb17-57) [ 464 0 R /XYZ 99.933071 136.027305 0 ] (cb17-58) [ 464 0 R /XYZ 99.933071 117.080284 0 ] (cb17-59) [ 464 0 R /XYZ 99.933071 98.133262 0 ] (cb17-6) [ 440 0 R /XYZ 99.933071 408.993907 0 ] (cb17-60) [ 503 0 R /XYZ 99.933071 799.173057 0 ] (cb17-61) [ 503 0 R /XYZ 99.933071 780.226036 0 ] (cb17-7) [ 440 0 R /XYZ 99.933071 390.046885 0 ] (cb17-8) [ 440 0 R /XYZ 99.933071 371.099864 0 ] (cb17-9) [ 440 0 R /XYZ 99.933071 352.152842 0 ] (cb172) [ 751 0 R /XYZ 84.259843 607.820079 0 ] (cb172-1) [ 751 0 R /XYZ 101.433071 606.123057 0 ] (cb174) [ 751 0 R /XYZ 84.259843 298.679014 0 ] (cb174-1) [ 751 0 R /XYZ 101.433071 296.981993 0 ] (cb176) [ 755 0 R /XYZ 84.259843 715.370079 0 ] (cb176-1) [ 755 0 R /XYZ 101.433071 713.673057 0 ] (cb179) [ 755 0 R /XYZ 84.259843 375.479014 0 ] (cb179-1) [ 755 0 R /XYZ 101.433071 373.781993 0 ] (cb179-2) [ 755 0 R /XYZ 99.933071 354.834971 0 ] (cb179-3) [ 755 0 R /XYZ 99.933071 335.887950 0 ] (cb179-4) [ 755 0 R /XYZ 99.933071 279.046885 0 ] (cb179-5) [ 755 0 R /XYZ 99.933071 260.099864 0 ] (cb18) [ 503 0 R /XYZ 84.259843 720.976036 0 ] (cb18-1) [ 503 0 R /XYZ 101.433071 719.279014 0 ] (cb180) [ 755 0 R /XYZ 84.259843 200.849864 0 ] (cb180-1) [ 755 0 R /XYZ 101.433071 199.152842 0 ] (cb182) [ 764 0 R /XYZ 84.259843 655.220079 0 ] (cb182-1) [ 764 0 R /XYZ 101.433071 653.523057 0 ] (cb182-2) [ 764 0 R /XYZ 99.933071 634.576036 0 ] (cb182-3) [ 764 0 R /XYZ 99.933071 615.629014 0 ] (cb182-4) [ 764 0 R /XYZ 99.933071 558.787950 0 ] (cb182-5) [ 764 0 R /XYZ 99.933071 539.840928 0 ] (cb183) [ 764 0 R /XYZ 84.259843 480.590928 0 ] (cb183-1) [ 764 0 R /XYZ 101.433071 478.893907 0 ] (cb185) [ 774 0 R /XYZ 84.259843 490.251496 0 ] (cb185-1) [ 774 0 R /XYZ 101.433071 488.554475 0 ] (cb186) [ 774 0 R /XYZ 84.259843 429.304475 0 ] (cb186-1) [ 774 0 R /XYZ 101.433071 427.607453 0 ] (cb188) [ 774 0 R /XYZ 84.259843 116.807453 0 ] (cb188-1) [ 774 0 R /XYZ 101.433071 115.110432 0 ] (cb189) [ 779 0 R /XYZ 84.259843 772.370079 0 ] (cb189-1) [ 779 0 R /XYZ 101.433071 770.673057 0 ] (cb191) [ 779 0 R /XYZ 84.259843 459.873057 0 ] (cb191-1) [ 779 0 R /XYZ 101.433071 458.176036 0 ] (cb192) [ 779 0 R /XYZ 84.259843 398.926036 0 ] (cb192-1) [ 779 0 R /XYZ 101.433071 397.229014 0 ] (cb194) [ 784 0 R /XYZ 84.259843 799.370079 0 ] (cb194-1) [ 784 0 R /XYZ 101.433071 797.673057 0 ] (cb195) [ 784 0 R /XYZ 84.259843 738.423057 0 ] (cb195-1) [ 784 0 R /XYZ 101.433071 736.726036 0 ] (cb197) [ 784 0 R /XYZ 84.259843 410.926036 0 ] (cb197-1) [ 784 0 R /XYZ 101.433071 409.229014 0 ] (cb198) [ 784 0 R /XYZ 84.259843 349.979014 0 ] (cb198-1) [ 784 0 R /XYZ 101.433071 348.281993 0 ] (cb2) [ 318 0 R /XYZ 84.259843 730.370079 0 ] (cb2-1) [ 318 0 R /XYZ 101.433071 728.673057 0 ] (cb201) [ 790 0 R /XYZ 84.259843 230.570079 0 ] (cb201-1) [ 790 0 R /XYZ 101.433071 228.873057 0 ] (cb202) [ 790 0 R /XYZ 84.259843 169.623057 0 ] (cb202-1) [ 790 0 R /XYZ 101.433071 167.926036 0 ] (cb204) [ 794 0 R /XYZ 84.259843 583.970079 0 ] (cb204-1) [ 794 0 R /XYZ 101.433071 582.273057 0 ] (cb205) [ 794 0 R /XYZ 84.259843 523.023057 0 ] (cb205-1) [ 794 0 R /XYZ 101.433071 521.326036 0 ] (cb207) [ 798 0 R /XYZ 84.259843 700.370079 0 ] (cb207-1) [ 798 0 R /XYZ 101.433071 698.673057 0 ] (cb208) [ 798 0 R /XYZ 84.259843 639.423057 0 ] (cb208-1) [ 798 0 R /XYZ 101.433071 637.726036 0 ] (cb21) [ 508 0 R /XYZ 84.259843 565.251496 0 ] (cb21-1) [ 508 0 R /XYZ 101.433071 563.554475 0 ] (cb210) [ 798 0 R /XYZ 84.259843 296.926036 0 ] (cb210-1) [ 798 0 R /XYZ 101.433071 295.229014 0 ] (cb211) [ 798 0 R /XYZ 84.259843 235.979014 0 ] (cb211-1) [ 798 0 R /XYZ 101.433071 234.281993 0 ] (cb213) [ 804 0 R /XYZ 84.259843 640.370079 0 ] (cb213-1) [ 804 0 R /XYZ 101.433071 638.673057 0 ] (cb214) [ 804 0 R /XYZ 84.259843 579.423057 0 ] (cb214-1) [ 804 0 R /XYZ 101.433071 577.726036 0 ] (cb217) [ 808 0 R /XYZ 84.259843 428.570079 0 ] (cb217-1) [ 808 0 R /XYZ 101.433071 426.873057 0 ] (cb218) [ 808 0 R /XYZ 84.259843 131.823057 0 ] (cb218-1) [ 808 0 R /XYZ 101.433071 130.126036 0 ] (cb219) [ 812 0 R /XYZ 84.259843 799.370079 0 ] (cb219-1) [ 812 0 R /XYZ 101.433071 797.673057 0 ] (cb221) [ 817 0 R /XYZ 84.259843 768.620079 0 ] (cb221-1) [ 817 0 R /XYZ 101.433071 766.923057 0 ] (cb221-10) [ 817 0 R /XYZ 99.933071 596.399864 0 ] (cb221-11) [ 817 0 R /XYZ 99.933071 577.452842 0 ] (cb221-12) [ 817 0 R /XYZ 99.933071 482.717735 0 ] (cb221-13) [ 817 0 R /XYZ 99.933071 463.770714 0 ] (cb221-14) [ 817 0 R /XYZ 99.933071 444.823692 0 ] (cb221-15) [ 817 0 R /XYZ 99.933071 425.876671 0 ] (cb221-16) [ 817 0 R /XYZ 99.933071 406.929649 0 ] (cb221-17) [ 817 0 R /XYZ 99.933071 387.982628 0 ] (cb221-18) [ 817 0 R /XYZ 99.933071 350.088585 0 ] (cb221-19) [ 817 0 R /XYZ 99.933071 331.141563 0 ] (cb221-2) [ 817 0 R /XYZ 99.933071 747.976036 0 ] (cb221-20) [ 817 0 R /XYZ 99.933071 198.512413 0 ] (cb221-21) [ 817 0 R /XYZ 99.933071 179.565391 0 ] (cb221-22) [ 817 0 R /XYZ 99.933071 160.618370 0 ] (cb221-23) [ 817 0 R /XYZ 99.933071 103.777305 0 ] (cb221-24) [ 842 0 R /XYZ 99.933071 799.173057 0 ] (cb221-25) [ 842 0 R /XYZ 99.933071 780.226036 0 ] (cb221-26) [ 842 0 R /XYZ 99.933071 761.279014 0 ] (cb221-27) [ 842 0 R /XYZ 99.933071 742.331993 0 ] (cb221-28) [ 842 0 R /XYZ 99.933071 723.384971 0 ] (cb221-29) [ 842 0 R /XYZ 99.933071 704.437950 0 ] (cb221-3) [ 817 0 R /XYZ 99.933071 729.029014 0 ] (cb221-30) [ 842 0 R /XYZ 99.933071 685.490928 0 ] (cb221-31) [ 842 0 R /XYZ 99.933071 666.543907 0 ] (cb221-4) [ 817 0 R /XYZ 99.933071 710.081993 0 ] (cb221-5) [ 817 0 R /XYZ 99.933071 691.134971 0 ] (cb221-6) [ 817 0 R /XYZ 99.933071 672.187950 0 ] (cb221-7) [ 817 0 R /XYZ 99.933071 653.240928 0 ] (cb221-8) [ 817 0 R /XYZ 99.933071 634.293907 0 ] (cb221-9) [ 817 0 R /XYZ 99.933071 615.346885 0 ] (cb222) [ 842 0 R /XYZ 84.259843 607.293907 0 ] (cb222-1) [ 842 0 R /XYZ 101.433071 605.596885 0 ] (cb225) [ 853 0 R /XYZ 84.259843 434.451496 0 ] (cb225-1) [ 853 0 R /XYZ 101.433071 432.754475 0 ] (cb228) [ 856 0 R /XYZ 84.259843 799.370079 0 ] (cb228-1) [ 856 0 R /XYZ 101.433071 797.673057 0 ] (cb231) [ 856 0 R /XYZ 84.259843 448.229014 0 ] (cb231-1) [ 856 0 R /XYZ 101.433071 446.531993 0 ] (cb234) [ 860 0 R /XYZ 84.259843 799.370079 0 ] (cb234-1) [ 860 0 R /XYZ 101.433071 797.673057 0 ] (cb237) [ 863 0 R /XYZ 84.259843 394.701496 0 ] (cb237-1) [ 863 0 R /XYZ 101.433071 393.004475 0 ] (cb237-10) [ 863 0 R /XYZ 99.933071 222.481281 0 ] (cb237-11) [ 863 0 R /XYZ 99.933071 203.534260 0 ] (cb237-12) [ 863 0 R /XYZ 99.933071 165.640217 0 ] (cb237-13) [ 863 0 R /XYZ 99.933071 127.746174 0 ] (cb237-14) [ 863 0 R /XYZ 99.933071 108.799152 0 ] (cb237-15) [ 863 0 R /XYZ 99.933071 89.852131 0 ] (cb237-16) [ 880 0 R /XYZ 99.933071 799.173057 0 ] (cb237-17) [ 880 0 R /XYZ 99.933071 780.226036 0 ] (cb237-18) [ 880 0 R /XYZ 99.933071 761.279014 0 ] (cb237-19) [ 880 0 R /XYZ 99.933071 742.331993 0 ] (cb237-2) [ 863 0 R /XYZ 99.933071 374.057453 0 ] (cb237-3) [ 863 0 R /XYZ 99.933071 355.110432 0 ] (cb237-4) [ 863 0 R /XYZ 99.933071 336.163410 0 ] (cb237-5) [ 863 0 R /XYZ 99.933071 317.216389 0 ] (cb237-6) [ 863 0 R /XYZ 99.933071 298.269367 0 ] (cb237-7) [ 863 0 R /XYZ 99.933071 279.322346 0 ] (cb237-8) [ 863 0 R /XYZ 99.933071 260.375324 0 ] (cb237-9) [ 863 0 R /XYZ 99.933071 241.428303 0 ] (cb238) [ 880 0 R /XYZ 84.259843 683.081993 0 ] (cb238-1) [ 880 0 R /XYZ 101.433071 681.384971 0 ] (cb24) [ 511 0 R /XYZ 84.259843 125.570079 0 ] (cb24-1) [ 511 0 R /XYZ 101.433071 123.873057 0 ] (cb241) [ 893 0 R /XYZ 84.259843 768.620079 0 ] (cb241-1) [ 893 0 R /XYZ 101.433071 766.923057 0 ] (cb241-10) [ 893 0 R /XYZ 99.933071 596.399864 0 ] (cb241-11) [ 893 0 R /XYZ 99.933071 577.452842 0 ] (cb241-12) [ 893 0 R /XYZ 99.933071 520.611778 0 ] (cb241-13) [ 893 0 R /XYZ 99.933071 501.664756 0 ] (cb241-14) [ 893 0 R /XYZ 99.933071 482.717735 0 ] (cb241-15) [ 893 0 R /XYZ 99.933071 463.770714 0 ] (cb241-16) [ 893 0 R /XYZ 99.933071 444.823692 0 ] (cb241-17) [ 893 0 R /XYZ 99.933071 425.876671 0 ] (cb241-18) [ 893 0 R /XYZ 99.933071 406.929649 0 ] (cb241-2) [ 893 0 R /XYZ 99.933071 747.976036 0 ] (cb241-3) [ 893 0 R /XYZ 99.933071 729.029014 0 ] (cb241-4) [ 893 0 R /XYZ 99.933071 710.081993 0 ] (cb241-5) [ 893 0 R /XYZ 99.933071 691.134971 0 ] (cb241-6) [ 893 0 R /XYZ 99.933071 672.187950 0 ] (cb241-7) [ 893 0 R /XYZ 99.933071 653.240928 0 ] (cb241-8) [ 893 0 R /XYZ 99.933071 634.293907 0 ] (cb241-9) [ 893 0 R /XYZ 99.933071 615.346885 0 ] (cb242) [ 893 0 R /XYZ 84.259843 347.679649 0 ] (cb242-1) [ 893 0 R /XYZ 101.433071 345.982628 0 ] (cb27) [ 516 0 R /XYZ 84.259843 425.570079 0 ] (cb27-1) [ 516 0 R /XYZ 101.433071 423.873057 0 ] (cb3) [ 318 0 R /XYZ 84.259843 523.623057 0 ] (cb3-1) [ 318 0 R /XYZ 101.433071 521.926036 0 ] (cb30) [ 521 0 R /XYZ 84.259843 715.370079 0 ] (cb30-1) [ 521 0 R /XYZ 101.433071 713.673057 0 ] (cb33) [ 524 0 R /XYZ 84.259843 211.820079 0 ] (cb33-1) [ 524 0 R /XYZ 101.433071 210.123057 0 ] (cb36) [ 529 0 R /XYZ 84.259843 451.820079 0 ] (cb36-1) [ 529 0 R /XYZ 101.433071 450.123057 0 ] (cb39) [ 534 0 R /XYZ 84.259843 730.370079 0 ] (cb39-1) [ 534 0 R /XYZ 101.433071 728.673057 0 ] (cb42) [ 537 0 R /XYZ 84.259843 294.320079 0 ] (cb42-1) [ 537 0 R /XYZ 101.433071 292.623057 0 ] (cb45) [ 542 0 R /XYZ 84.259843 575.570079 0 ] (cb45-1) [ 542 0 R /XYZ 101.433071 573.873057 0 ] (cb48) [ 545 0 R /XYZ 84.259843 129.320079 0 ] (cb48-1) [ 545 0 R /XYZ 101.433071 127.623057 0 ] (cb51) [ 550 0 R /XYZ 84.259843 350.570079 0 ] (cb51-1) [ 550 0 R /XYZ 101.433071 348.873057 0 ] (cb54) [ 555 0 R /XYZ 84.259843 538.070079 0 ] (cb54-1) [ 555 0 R /XYZ 101.433071 536.373057 0 ] (cb55) [ 555 0 R /XYZ 84.259843 301.323057 0 ] (cb55-1) [ 555 0 R /XYZ 101.433071 299.626036 0 ] (cb56) [ 559 0 R /XYZ 84.259843 799.370079 0 ] (cb56-1) [ 559 0 R /XYZ 101.433071 797.673057 0 ] (cb59) [ 562 0 R /XYZ 84.259843 350.570079 0 ] (cb59-1) [ 562 0 R /XYZ 101.433071 348.873057 0 ] (cb6) [ 318 0 R /XYZ 84.259843 138.376036 0 ] (cb6-1) [ 318 0 R /XYZ 101.433071 136.679014 0 ] (cb62) [ 567 0 R /XYZ 84.259843 598.970079 0 ] (cb62-1) [ 567 0 R /XYZ 101.433071 597.273057 0 ] (cb65) [ 572 0 R /XYZ 84.259843 772.370079 0 ] (cb65-1) [ 572 0 R /XYZ 101.433071 770.673057 0 ] (cb68) [ 575 0 R /XYZ 84.259843 271.820079 0 ] (cb68-1) [ 575 0 R /XYZ 101.433071 270.123057 0 ] (cb71) [ 580 0 R /XYZ 84.259843 571.820079 0 ] (cb71-1) [ 580 0 R /XYZ 101.433071 570.123057 0 ] (cb74) [ 583 0 R /XYZ 84.259843 144.320079 0 ] (cb74-1) [ 583 0 R /XYZ 101.433071 142.623057 0 ] (cb77) [ 588 0 R /XYZ 84.259843 440.570079 0 ] (cb77-1) [ 588 0 R /XYZ 101.433071 438.873057 0 ] (cb80) [ 593 0 R /XYZ 84.259843 715.370079 0 ] (cb80-1) [ 593 0 R /XYZ 101.433071 713.673057 0 ] (cb83) [ 596 0 R /XYZ 84.259843 275.570079 0 ] (cb83-1) [ 596 0 R /XYZ 101.433071 273.873057 0 ] (cb86) [ 601 0 R /XYZ 84.259843 556.820079 0 ] (cb86-1) [ 601 0 R /XYZ 101.433071 555.123057 0 ] (cb89) [ 604 0 R /XYZ 84.259843 125.570079 0 ] (cb89-1) [ 604 0 R /XYZ 101.433071 123.873057 0 ] (cb9) [ 325 0 R /XYZ 84.259843 509.420079 0 ] (cb9-1) [ 325 0 R /XYZ 101.433071 507.723057 0 ] (cb9-10) [ 325 0 R /XYZ 99.933071 318.252842 0 ] (cb9-11) [ 325 0 R /XYZ 99.933071 299.305821 0 ] (cb9-12) [ 325 0 R /XYZ 99.933071 280.358799 0 ] (cb9-13) [ 325 0 R /XYZ 99.933071 261.411778 0 ] (cb9-14) [ 325 0 R /XYZ 99.933071 242.464756 0 ] (cb9-15) [ 325 0 R /XYZ 99.933071 223.517735 0 ] (cb9-16) [ 325 0 R /XYZ 99.933071 204.570714 0 ] (cb9-17) [ 325 0 R /XYZ 99.933071 185.623692 0 ] (cb9-18) [ 325 0 R /XYZ 99.933071 166.676671 0 ] (cb9-19) [ 325 0 R /XYZ 99.933071 147.729649 0 ] (cb9-2) [ 325 0 R /XYZ 99.933071 488.776036 0 ] (cb9-20) [ 325 0 R /XYZ 99.933071 128.782628 0 ] (cb9-21) [ 325 0 R /XYZ 99.933071 109.835606 0 ] (cb9-22) [ 325 0 R /XYZ 99.933071 90.888585 0 ] (cb9-23) [ 349 0 R /XYZ 99.933071 799.173057 0 ] (cb9-24) [ 349 0 R /XYZ 99.933071 780.226036 0 ] (cb9-25) [ 349 0 R /XYZ 99.933071 761.279014 0 ] (cb9-26) [ 349 0 R /XYZ 99.933071 742.331993 0 ] (cb9-27) [ 349 0 R /XYZ 99.933071 723.384971 0 ] (cb9-28) [ 349 0 R /XYZ 99.933071 704.437950 0 ] (cb9-29) [ 349 0 R /XYZ 99.933071 685.490928 0 ] (cb9-3) [ 325 0 R /XYZ 99.933071 469.829014 0 ] (cb9-30) [ 349 0 R /XYZ 99.933071 666.543907 0 ] (cb9-31) [ 349 0 R /XYZ 99.933071 647.596885 0 ] (cb9-32) [ 349 0 R /XYZ 99.933071 628.649864 0 ] (cb9-33) [ 349 0 R /XYZ 99.933071 609.702842 0 ] (cb9-34) [ 349 0 R /XYZ 99.933071 590.755821 0 ] (cb9-35) [ 349 0 R /XYZ 99.933071 571.808799 0 ] (cb9-36) [ 349 0 R /XYZ 99.933071 552.861778 0 ] (cb9-37) [ 349 0 R /XYZ 99.933071 533.914756 0 ] (cb9-38) [ 349 0 R /XYZ 99.933071 514.967735 0 ] (cb9-39) [ 349 0 R /XYZ 99.933071 496.020714 0 ] (cb9-4) [ 325 0 R /XYZ 99.933071 431.934971 0 ] (cb9-40) [ 349 0 R /XYZ 99.933071 477.073692 0 ] (cb9-41) [ 349 0 R /XYZ 99.933071 458.126671 0 ] (cb9-42) [ 349 0 R /XYZ 99.933071 439.179649 0 ] (cb9-43) [ 349 0 R /XYZ 99.933071 420.232628 0 ] (cb9-44) [ 349 0 R /XYZ 99.933071 401.285606 0 ] (cb9-5) [ 325 0 R /XYZ 99.933071 412.987950 0 ] (cb9-6) [ 325 0 R /XYZ 99.933071 394.040928 0 ] (cb9-7) [ 325 0 R /XYZ 99.933071 375.093907 0 ] (cb9-8) [ 325 0 R /XYZ 99.933071 356.146885 0 ] (cb9-9) [ 325 0 R /XYZ 99.933071 337.199864 0 ] (cb92) [ 609 0 R /XYZ 84.259843 440.570079 0 ] (cb92-1) [ 609 0 R /XYZ 101.433071 438.873057 0 ] (cb95) [ 614 0 R /XYZ 84.259843 685.370079 0 ] (cb95-1) [ 614 0 R /XYZ 101.433071 683.673057 0 ] (cb98) [ 617 0 R /XYZ 84.259843 238.070079 0 ] (cb98-1) [ 617 0 R /XYZ 101.433071 236.373057 0 ] (cis-v1.6-kubernetes-benchmark---rancher-v2.6-with-kubernetes-v1.18-to-v1.21) [ 304 0 R /XYZ 84.259843 784.970079 0 ] (client-certificate-authentication-should-not-be-used-for-users-manual) [ 741 0 R /XYZ 84.259843 684.651496 0 ] (configure-image-provenance-using-imagepolicywebhook-admission-controller-manual) [ 889 0 R /XYZ 84.259843 684.651496 0 ] (consider-external-secret-storage-manual) [ 887 0 R /XYZ 84.259843 568.851496 0 ] (contentsbox) [ 8 0 R /XYZ 77.509843 756.850394 0 ] (controller-manager) [ 674 0 R /XYZ 41.740157 784.430079 0 ] (controls) [ 309 0 R /XYZ 84.259843 612.381496 0 ] (create-administrative-boundaries-between-resources-using-namespaces-manual) [ 891 0 R /XYZ 84.259843 720.651496 0 ] (ensure-that-a-minimal-audit-policy-is-created-automated) [ 743 0 R /XYZ 84.259843 720.651496 0 ] (ensure-that-a-unique-certificate-authority-is-used-for-etcd-automated) [ 734 0 R /XYZ 84.259843 799.370079 0 ] (ensure-that-all-namespaces-have-network-policies-defined-automated) [ 863 0 R /XYZ 84.259843 538.851496 0 ] (ensure-that-default-service-accounts-are-not-actively-used.-automated) [ 815 0 R /XYZ 84.259843 206.451496 0 ] (ensure-that-encryption-providers-are-appropriately-configured-automated) [ 643 0 R /XYZ 84.259843 577.220079 0 ] (ensure-that-service-account-tokens-are-only-mounted-where-necessary-manual) [ 842 0 R /XYZ 84.259843 449.446885 0 ] (ensure-that-the---anonymous-auth-argument-is-set-to-false-automated) [ 508 0 R /XYZ 84.259843 720.651496 0 ] (ensure-that-the---audit-log-maxage-argument-is-set-to-30-or-as-appropriate-automated) [ 596 0 R /XYZ 84.259843 445.970079 0 ] (ensure-that-the---audit-log-maxbackup-argument-is-set-to-10-or-as-appropriate-automated) [ 601 0 R /XYZ 84.259843 727.220079 0 ] (ensure-that-the---audit-log-maxsize-argument-is-set-to-100-or-as-appropriate-automated) [ 604 0 R /XYZ 84.259843 295.970079 0 ] (ensure-that-the---audit-log-path-argument-is-set-automated) [ 591 0 R /XYZ 84.259843 183.470079 0 ] (ensure-that-the---authorization-mode-argument-includes-node-automated) [ 537 0 R /XYZ 84.259843 464.720079 0 ] (ensure-that-the---authorization-mode-argument-includes-rbac-automated) [ 542 0 R /XYZ 84.259843 745.970079 0 ] (ensure-that-the---authorization-mode-argument-is-not-set-to-alwaysallow-automated) [ 532 0 R /XYZ 84.259843 183.470079 0 ] (ensure-that-the---authorization-mode-argument-is-not-set-to-alwaysallow-automated-1) [ 774 0 R /XYZ 84.259843 332.207453 0 ] (ensure-that-the---auto-tls-argument-is-not-set-to-true-automated) [ 710 0 R /XYZ 84.259843 258.470079 0 ] (ensure-that-the---basic-auth-file-argument-is-not-set-automated) [ 511 0 R /XYZ 84.259843 295.970079 0 ] (ensure-that-the---bind-address-argument-is-set-to-127.0.0.1-automated) [ 689 0 R /XYZ 84.259843 524.420079 0 ] (ensure-that-the---bind-address-argument-is-set-to-127.0.0.1-automated-1) [ 694 0 R /XYZ 84.259843 257.404475 0 ] (ensure-that-the---cert-file-and---key-file-arguments-are-set-as-appropriate-automated) [ 700 0 R /XYZ 84.259843 684.651496 0 ] (ensure-that-the---client-ca-file-argument-is-set-as-appropriate-automated) [ 630 0 R /XYZ 84.259843 483.470079 0 ] (ensure-that-the---client-ca-file-argument-is-set-as-appropriate-automated-1) [ 779 0 R /XYZ 84.259843 675.273057 0 ] (ensure-that-the---client-cert-auth-argument-is-set-to-true-automated) [ 705 0 R /XYZ 84.259843 464.720079 0 ] (ensure-that-the---encryption-provider-config-argument-is-set-as-appropriate-automated) [ 638 0 R /XYZ 84.259843 295.970079 0 ] (ensure-that-the---etcd-cafile-argument-is-set-as-appropriate-automated) [ 635 0 R /XYZ 84.259843 745.970079 0 ] (ensure-that-the---etcd-certfile-and---etcd-keyfile-arguments-are-set-as-appropriate-automated) [ 622 0 R /XYZ 84.259843 689.720079 0 ] (ensure-that-the---event-qps-argument-is-set-to-0-or-a-level-which-ensures-appropriate-event-capture-automated) [ 794 0 R /XYZ 84.259843 208.126036 0 ] (ensure-that-the---hostname-override-argument-is-not-set-manual) [ 794 0 R /XYZ 84.259843 425.926036 0 ] (ensure-that-the---insecure-bind-address-argument-is-not-set-automated) [ 575 0 R /XYZ 84.259843 427.220079 0 ] (ensure-that-the---insecure-port-argument-is-set-to-0-automated) [ 580 0 R /XYZ 84.259843 727.220079 0 ] (ensure-that-the---kubeconfig-kubelet.conf-file-ownership-is-set-to-rootroot-automated) [ 751 0 R /XYZ 84.259843 163.687950 0 ] (ensure-that-the---kubeconfig-kubelet.conf-file-permissions-are-set-to-644-or-more-restrictive-automated) [ 751 0 R /XYZ 84.259843 454.079014 0 ] (ensure-that-the---kubelet-certificate-authority-argument-is-set-as-appropriate-automated) [ 529 0 R /XYZ 84.259843 652.220079 0 ] (ensure-that-the---kubelet-client-certificate-and---kubelet-client-key-arguments-are-set-as-appropriate-automated) [ 524 0 R /XYZ 84.259843 427.220079 0 ] (ensure-that-the---kubelet-https-argument-is-set-to-true-automated) [ 519 0 R /XYZ 84.259843 164.720079 0 ] (ensure-that-the---make-iptables-util-chains-argument-is-set-to-true-automated) [ 794 0 R /XYZ 84.259843 799.370079 0 ] (ensure-that-the---peer-auto-tls-argument-is-not-set-to-true-automated) [ 727 0 R /XYZ 84.259843 333.470079 0 ] (ensure-that-the---peer-cert-file-and---peer-key-file-arguments-are-set-as-appropriate-automated) [ 717 0 R /XYZ 84.259843 799.370079 0 ] (ensure-that-the---peer-client-cert-auth-argument-is-set-to-true-automated) [ 722 0 R /XYZ 84.259843 558.470079 0 ] (ensure-that-the---profiling-argument-is-set-to-false-automated) [ 588 0 R /XYZ 84.259843 595.970079 0 ] (ensure-that-the---profiling-argument-is-set-to-false-automated-1) [ 677 0 R /XYZ 84.259843 727.220079 0 ] (ensure-that-the---profiling-argument-is-set-to-false-automated-2) [ 694 0 R /XYZ 84.259843 720.651496 0 ] (ensure-that-the---protect-kernel-defaults-argument-is-set-to-true-automated) [ 790 0 R /XYZ 84.259843 445.970079 0 ] (ensure-that-the---read-only-port-argument-is-set-to-0-automated) [ 779 0 R /XYZ 84.259843 301.829014 0 ] (ensure-that-the---request-timeout-argument-is-set-as-appropriate-automated) [ 609 0 R /XYZ 84.259843 595.970079 0 ] (ensure-that-the---root-ca-file-argument-is-set-as-appropriate-automated) [ 686 0 R /XYZ 84.259843 727.220079 0 ] (ensure-that-the---rotate-certificates-argument-is-not-set-to-false-automated) [ 798 0 R /XYZ 84.259843 138.881993 0 ] (ensure-that-the---secure-port-argument-is-not-set-to-0-automated) [ 583 0 R /XYZ 84.259843 314.720079 0 ] (ensure-that-the---service-account-key-file-argument-is-set-as-appropriate-automated) [ 617 0 R /XYZ 84.259843 408.470079 0 ] (ensure-that-the---service-account-lookup-argument-is-set-to-true-automated) [ 612 0 R /XYZ 84.259843 164.720079 0 ] (ensure-that-the---service-account-private-key-file-argument-is-set-as-appropriate-automated) [ 683 0 R /XYZ 84.259843 745.970079 0 ] (ensure-that-the---streaming-connection-idle-timeout-argument-is-not-set-to-0-automated) [ 784 0 R /XYZ 84.259843 641.326036 0 ] (ensure-that-the---terminated-pod-gc-threshold-argument-is-set-as-appropriate-automated) [ 674 0 R /XYZ 84.259843 720.651496 0 ] (ensure-that-the---tls-cert-file-and---tls-private-key-file-arguments-are-set-as-appropriate-automated) [ 625 0 R /XYZ 84.259843 239.720079 0 ] (ensure-that-the---tls-cert-file-and---tls-private-key-file-arguments-are-set-as-appropriate-automated-1) [ 798 0 R /XYZ 84.259843 542.326036 0 ] (ensure-that-the---token-auth-file-parameter-is-not-set-automated) [ 516 0 R /XYZ 84.259843 595.970079 0 ] (ensure-that-the---use-service-account-credentials-argument-is-set-to-true-automated) [ 680 0 R /XYZ 84.259843 745.970079 0 ] (ensure-that-the-admin.conf-file-ownership-is-set-to-rootroot-automated) [ 323 0 R /XYZ 84.259843 586.670079 0 ] (ensure-that-the-admin.conf-file-permissions-are-set-to-644-or-more-restrictive-automated) [ 323 0 R /XYZ 84.259843 702.470079 0 ] (ensure-that-the-admission-control-plugin-alwaysadmit-is-not-set-automated) [ 550 0 R /XYZ 84.259843 520.970079 0 ] (ensure-that-the-admission-control-plugin-alwayspullimages-is-set-manual) [ 555 0 R /XYZ 84.259843 708.470079 0 ] (ensure-that-the-admission-control-plugin-eventratelimit-is-set-automated) [ 545 0 R /XYZ 84.259843 314.720079 0 ] (ensure-that-the-admission-control-plugin-namespacelifecycle-is-set-automated) [ 562 0 R /XYZ 84.259843 520.970079 0 ] (ensure-that-the-admission-control-plugin-noderestriction-is-set-automated) [ 570 0 R /XYZ 84.259843 258.470079 0 ] (ensure-that-the-admission-control-plugin-podsecuritypolicy-is-set-automated) [ 567 0 R /XYZ 84.259843 799.370079 0 ] (ensure-that-the-admission-control-plugin-securitycontextdeny-is-set-if-podsecuritypolicy-is-not-used-manual) [ 555 0 R /XYZ 84.259843 501.723057 0 ] (ensure-that-the-admission-control-plugin-serviceaccount-is-set-automated) [ 555 0 R /XYZ 84.259843 264.976036 0 ] (ensure-that-the-anonymous-auth-argument-is-set-to-false-automated) [ 774 0 R /XYZ 84.259843 720.651496 0 ] (ensure-that-the-api-server-only-makes-use-of-strong-cryptographic-ciphers-automated) [ 660 0 R /XYZ 84.259843 411.552842 0 ] (ensure-that-the-api-server-pod-specification-file-ownership-is-set-to-rootroot-automated) [ 313 0 R /XYZ 84.259843 553.851496 0 ] (ensure-that-the-api-server-pod-specification-file-permissions-are-set-to-644-or-more-restrictive-automated) [ 313 0 R /XYZ 84.259843 684.651496 0 ] (ensure-that-the-audit-policy-covers-key-security-concerns-manual) [ 746 0 R /XYZ 84.259843 333.470079 0 ] (ensure-that-the-certificate-authorities-file-permissions-are-set-to-644-or-more-restrictive-automated) [ 755 0 R /XYZ 84.259843 519.629014 0 ] (ensure-that-the-client-certificate-authorities-file-ownership-is-set-to-rootroot-automated) [ 764 0 R /XYZ 84.259843 799.370079 0 ] (ensure-that-the-cluster-admin-role-is-only-used-where-required-manual) [ 815 0 R /XYZ 84.259843 684.651496 0 ] (ensure-that-the-cni-in-use-supports-network-policies-manual) [ 863 0 R /XYZ 84.259843 684.651496 0 ] (ensure-that-the-container-network-interface-file-ownership-is-set-to-rootroot-manual) [ 315 0 R /XYZ 84.259843 170.823057 0 ] (ensure-that-the-container-network-interface-file-permissions-are-set-to-644-or-more-restrictive-manual) [ 315 0 R /XYZ 84.259843 347.570079 0 ] (ensure-that-the-controller-manager-pod-specification-file-ownership-is-set-to-rootroot-automated) [ 313 0 R /XYZ 84.259843 277.251496 0 ] (ensure-that-the-controller-manager-pod-specification-file-permissions-are-set-to-644-or-more-restrictive-automated) [ 313 0 R /XYZ 84.259843 423.051496 0 ] (ensure-that-the-controller-manager.conf-file-ownership-is-set-to-rootroot-automated) [ 325 0 R /XYZ 84.259843 799.370079 0 ] (ensure-that-the-controller-manager.conf-file-permissions-are-set-to-644-or-more-restrictive-automated) [ 323 0 R /XYZ 84.259843 209.270079 0 ] (ensure-that-the-etcd-data-directory-ownership-is-set-to-etcdetcd-automated) [ 318 0 R /XYZ 84.259843 365.776036 0 ] (ensure-that-the-etcd-data-directory-permissions-are-set-to-700-or-more-restrictive-automated) [ 318 0 R /XYZ 84.259843 694.023057 0 ] (ensure-that-the-etcd-pod-specification-file-ownership-is-set-to-rootroot-automated) [ 315 0 R /XYZ 84.259843 478.370079 0 ] (ensure-that-the-etcd-pod-specification-file-permissions-are-set-to-644-or-more-restrictive-automated) [ 315 0 R /XYZ 84.259843 609.170079 0 ] (ensure-that-the-kubelet---config-configuration-file-has-permissions-set-to-644-or-more-restrictive-automated) [ 764 0 R /XYZ 84.259843 383.493907 0 ] (ensure-that-the-kubelet---config-configuration-file-ownership-is-set-to-rootroot-automated) [ 764 0 R /XYZ 84.259843 195.693907 0 ] (ensure-that-the-kubelet-only-makes-use-of-strong-cryptographic-ciphers-automated) [ 808 0 R /XYZ 84.259843 392.223057 0 ] (ensure-that-the-kubelet-service-file-ownership-is-set-to-rootroot-automated) [ 748 0 R /XYZ 84.259843 553.851496 0 ] (ensure-that-the-kubelet-service-file-permissions-are-set-to-644-or-more-restrictive-automated) [ 748 0 R /XYZ 84.259843 684.651496 0 ] (ensure-that-the-kubernetes-pki-certificate-file-permissions-are-set-to-644-or-more-restrictive-automated) [ 349 0 R /XYZ 84.259843 184.188585 0 ] (ensure-that-the-kubernetes-pki-directory-and-file-ownership-is-set-to-rootroot-automated) [ 325 0 R /XYZ 84.259843 668.570079 0 ] (ensure-that-the-kubernetes-pki-key-file-permissions-are-set-to-600-automated) [ 440 0 R /XYZ 84.259843 702.470079 0 ] (ensure-that-the-proxy-kubeconfig-file-ownership-is-set-to-rootroot-automated) [ 751 0 R /XYZ 84.259843 763.220079 0 ] (ensure-that-the-rotatekubeletservercertificate-argument-is-set-to-true-automated) [ 689 0 R /XYZ 84.259843 727.220079 0 ] (ensure-that-the-scheduler-pod-specification-file-ownership-is-set-to-rootroot-automated) [ 315 0 R /XYZ 84.259843 739.970079 0 ] (ensure-that-the-scheduler-pod-specification-file-permissions-are-set-to-644-or-more-restrictive-automated) [ 313 0 R /XYZ 84.259843 146.451496 0 ] (ensure-that-the-scheduler.conf-file-ownership-is-set-to-rootroot-automated) [ 323 0 R /XYZ 84.259843 340.070079 0 ] (ensure-that-the-scheduler.conf-file-permissions-are-set-to-644-or-more-restrictive-automated) [ 323 0 R /XYZ 84.259843 470.870079 0 ] (ensure-that-the-seccomp-profile-is-set-to-dockerdefault-in-your-pod-definitions-manual) [ 891 0 R /XYZ 84.259843 604.851496 0 ] (etcd-node-configuration-files) [ 700 0 R /XYZ 41.740157 784.430079 0 ] (extensible-admission-control) [ 889 0 R /XYZ 41.740157 784.430079 0 ] (general-policies) [ 891 0 R /XYZ 41.740157 784.430079 0 ] (header_bottom_text) [ 6 0 R /XYZ 85.009843 392.718898 0 ] (if-proxy-kubeconfig-file-exists-ensure-permissions-are-set-to-644-or-more-restrictive-automated) [ 748 0 R /XYZ 84.259843 423.051496 0 ] (kubelet) [ 774 0 R /XYZ 41.740157 784.430079 0 ] (logging) [ 743 0 R /XYZ 41.740157 784.430079 0 ] (master-node-configuration-files) [ 313 0 R /XYZ 41.740157 784.430079 0 ] (minimize-access-to-create-pods-manual) [ 815 0 R /XYZ 84.259843 307.251496 0 ] (minimize-access-to-secrets-manual) [ 815 0 R /XYZ 84.259843 523.851496 0 ] (minimize-the-admission-of-containers-wishing-to-share-the-host-ipc-namespace-automated) [ 853 0 R /XYZ 84.259843 238.710432 0 ] (minimize-the-admission-of-containers-wishing-to-share-the-host-network-namespace-automated) [ 856 0 R /XYZ 84.259843 603.629014 0 ] (minimize-the-admission-of-containers-wishing-to-share-the-host-process-id-namespace-automated) [ 853 0 R /XYZ 84.259843 589.851496 0 ] (minimize-the-admission-of-containers-with-added-capabilities-manual) [ 860 0 R /XYZ 84.259843 323.081993 0 ] (minimize-the-admission-of-containers-with-allowprivilegeescalation-automated) [ 856 0 R /XYZ 84.259843 252.487950 0 ] (minimize-the-admission-of-containers-with-capabilities-assigned-manual) [ 860 0 R /XYZ 84.259843 207.281993 0 ] (minimize-the-admission-of-containers-with-the-net_raw-capability-manual) [ 860 0 R /XYZ 84.259843 453.881993 0 ] (minimize-the-admission-of-privileged-containers-manual) [ 853 0 R /XYZ 84.259843 720.651496 0 ] (minimize-the-admission-of-root-containers-manual) [ 860 0 R /XYZ 84.259843 584.681993 0 ] (minimize-wildcard-use-in-roles-and-clusterroles-manual) [ 815 0 R /XYZ 84.259843 423.051496 0 ] (network-policies-and-cni) [ 863 0 R /XYZ 41.740157 784.430079 0 ] (overview) [ 304 0 R /XYZ 84.259843 704.822079 0 ] (pod-security-policies) [ 853 0 R /XYZ 41.740157 784.430079 0 ] (prefer-using-secrets-as-files-over-secrets-as-environment-variables-manual) [ 887 0 R /XYZ 84.259843 684.651496 0 ] (rbac-and-service-accounts) [ 815 0 R /XYZ 41.740157 784.430079 0 ] (scheduler) [ 694 0 R /XYZ 41.740157 784.430079 0 ] (secrets-management) [ 887 0 R /XYZ 41.740157 784.430079 0 ] (testing-controls-methodology) [ 304 0 R /XYZ 84.259843 166.076079 0 ] (the-default-namespace-should-not-be-used-automated) [ 891 0 R /XYZ 84.259843 193.251496 0 ] (title-block-header) [ 6 0 R /XYZ 84.259843 502.818898 0 ] (verify-that-the-rotatekubeletservercertificate-argument-is-set-to-true-automated) [ 808 0 R /XYZ 84.259843 670.970079 0 ] (worker-node-configuration-files) [ 748 0 R /XYZ 41.740157 784.430079 0 ] ] +>> +>> +>> +endobj +4 0 obj +<< +/ExtGState << +/a1.0 << +/ca 1 +>> +/A1.0 << +/CA 1 +>> +>> +/XObject << +>> +/Pattern << +>> +/Shading << +>> +/Font 1076 0 R +>> +endobj +5 0 obj +<< +/Filter /FlateDecode +/Length 2619 +>> +stream +xœµš[‹¤·†ïûWôµaå’ªtc°! Øø"dÁ1!vãµ1³�u.ò÷óÖ×­CO¿{ðn²Ã̶ªôIõI¥§ª4Ï‚¯?šÅÐZ¯ÅΗק7' 5 þ=î‡ú¯ø®ùÅjȱ—–ϯ] 5ÔžS-ç§~w +DƒëMt°ƒ_C#Ž�øÈýœÜî?üù«¯ÿòíÿË%®ÿßoõUþ¿ÙâÛøù“¶íÍ©G<ªNT/¨ÂüZH +êûÐÏžå ²8¶) Ïoyò¸Ì3{Ýî÷ÅK~O÷®—ÿ[ãÖÿͱÁ2_Ϫ®wqrˆ‘päçb`«øÒ£ˆN(váí£Ì±P§g²Ë)Âcûóž(°åö±ÏÁ5��8ûe=ŸÇc#‘¦ÑrŸ¿NL„x²ÄG±¿½„xû}v zk•i +’þ>…k@Ûû®׃ïG•M˜…²M·ÄɆ=Ñ럹te §éûÒÅmûGßT·í|—ðr´ú\úD¥~‹6†«‹,cÈt3ªOi=ç†ØÜ'"ºœˆð…Œ¡ ›9õÛ®y-r¶áH6ûõÑ�ˆ.'Úï6Zž;Ug¯¶ícå—)Ëյͅ'²c�nÒê¿ ÛΈèøx/.¾c¯‘.¿IÂË y³=ˆŸN¹’Þy±Bòp½]¨Û¸SÜdùË’"¾-Žæ�y&ç?¯¨ÈSêä9> ¨�y5¶Zk?›S|¿H»¼Lê[�huõÝ–+Ö:}v_¯Ø„ôwèÎÞsÅî¤Û’mòÚ‡y© �{qœ^7ÅŽ°±>“•»P†˜n‰ótå§;ñ²3Ï£šeNVâæîyŽ»Äe²ói×¹ãÑKëiïwóù!¼�Íž‹ÝõÛ˜d‰“Ìh·&Û„Ë0@a‰FŸñ8­“NþëÂñq2q/§_OG˜KšS÷Œu$*Â=ËŠçÿ Ï7øþídçïFir�ãI&-Òdë�x�dþ{Åö�bÿ=ãÎc³ “mØ_âØVß<¼aÆñ”6^Ûz\ØGÏ8 §v浆›8M×MQ·•Éï^ž­âLd>uoVÀ¾6u¼¦Q/j‡Uh쯃f[:]!ù¼ ‰–w]!ZKÛƒh샢¹MØ—ewfºCî“Ì¥wûmß +õ¹¶Æ–FxS—ÎV˜Ý‡²ã-¶.H�uoì[Ü'íwö£?úx}ò¾ßL.ã¸t¢}JŸvé|1—Nàq©Írßœ1GÏÞ‡w­ÐK·³§3ÉYGc¥vר}t“¶õØ­CÞ'µ!»›tЉ ÈdÈæˆuØTn��e9Þ¸ÑUª3§XÒ_÷•Îû®ÌEÌû®”‡¾>îˆx3[Ò™åÝ�ëz;Y=g.Ùˆ¬ìOO©­ž:d�sÛýÜ#Úž·×°eHY™©¬ÇòCÏ�âßÇœzáÄz�¯ã&$¶u™‡@}\ºèñ÷YÒJCÌÅV­mW#ø™wß•<ÞˆŒ»’}&lG0U©ÑÿÒŽ›ðE¿bjü¬ }¥?¶o½¥×ƒñøS ü»]ÍfõRÑÿ²J=émþ á*‘^ E»»:9¾þ ŠÝH +endstream +endobj +6 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 5 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +7 0 obj +<< +/Filter /FlateDecode +/Length 3661 +>> +stream +xœí\[¯Ü¶~ß_±Ï¢�C/@Q Ú $¨Ñ¤-ú`oíÅq§ýûý(‰äp¥�õ¹¹±»6Ž-}‘Ãon¤D{4øû¹Å?ÉÛ)¥ƒ?žÞÞÌÙàÏ,1œÌ—¿Ç�üKì'¦Èœ�6ÚÉĽ9¾=Xã&çƒç(ñ»7ÚøŸ~n²8Lœ‡l'›¬5tä0…Lٺ㯯ßC: +i3…ò'·¿þtøâ%t?þôïÃ›Ïæ¡‡HS6Ì–ŽDqŠÑöópÁ"HtIâe¸¡áŽ:Žæ[;_‡Ûo¢Ô;‘7u��0»Áho]˜‰wÐÖñé ñ&×Ûxê­ôq¸JKý:zÆÓñBއ!ÎqX¨I÷4ȶi—à7½•ÞcgjŸïQoiìÁq´Càs\º 41´E;Ð;ß�Q1š·B÷r(Þ,,q Ñ[ˆÞBt¢\‹!*5GvFt Ñ[ˆÞBô™Bt?ï?ѽº·½…è-DŸl¢ëÃ~íøŠl÷«¨ÄÏCÔù(fÓ⦎!*p\>ï^C4‰G ½GÏ[×èèèC´ã2“x” P–mÓ.Á=v¦öùõ–ÆìF;Ô€éøà2y¢MˆžÙ�.ØAàH#ÛÍfÏÇÓñ1D³x´Ö]º÷8 ƒì;XiÚ„¨`jŸïÇ„hÍÛ ¡{9o–¸…è-Do!º ч®EeˆJMÆÑ‡�ÝBô¢·}¦ÝÅûOt/…î-Do!z ÑGMt­�µ8AÂò—Œ�%Fûo½¾M×pÙP ÒÝÖìfÊìBš·" ±�àçšL˜˜�%VdMì] +F“I;Ï9(2¾l¸fç¬"ÃÐÙƒT¨È@g’!E&ÐäsäBäe™4ù”(:E&úÉÇlŒÆa2“Gˆ{�à c ªÈdèÌe3€&�½Í¬pÈðtØ,$…C¶Ð™œ'…CØa‚ŸYV8d‚ÎVV8d8²ËðD…CøÎsAá�}ÙÈ­Q8d± 19…Cfš'„�&�}vFã0@goŒ×8,›oÐJÔ8Œ¡¤:¶‡ :["¯qXR¦¡œ”œÀÙO”]$…Ã`ÌDÉ#Ì4™0Qd›ƒ¥‰gR8 HxĘú(‚Î>º¬ptvÉ:…CxŠAJAá0xèl3"U“�ÎÖÀôŠ CgcMTü9ÌhrùBD“ “MÄ^ãuÚFGIã0¦Éo¬ÆaB…DO¬qX²{öZM :;”.…ȹ’%H*F�m Yá0¢Z“¼VSàì“ÉÙj5%¢š”³VS@1dLÐjJD4Ñ:­¦DÔAàA +‡uÐp‰BM:{d2�CÔAxª³‡¨ƒ†Øh5%¢Ë1)9!¢X«)¸œ#i5%fLæRÌZM‰¹LšSÔjJ2nÊ!û p˜L†Œ!­¦$ �Ùd§p˜:{¸˜Â!f˜C’7 +‡ÉAgrV«)ÉAg‹…ŠâÏÉCgãƒVS—y2*¯Æ!ã3?­¦ lO N¤Õ$Ý)…ˆuƒ"y*_Îi5%%è즇XÂ�£¨ÕLX c0EÔd 3YÒj +Ö<xÖjJ¶ÐÙPÔjJÆaÌÎk5~1Åä­VS2•…§ÏZM�#O1`ö¢p_ž�_œVS2®ÑG Š Cg‡¨×8dèL°¼’r€Î¶D�"¡3f‡ZMÉ:µš’“ÊݲVSryÉ™ˆ‚Æaæ)Dg´šuíê…B"„"ÖÜÞkU«^¨í™ŒB#„ ·Ã,Pá+O(Ž¡Ås§^W¡{kWÆ„ÇÌßÐbN‡C6.ûóÅ‹ç}ñåÃß�5ö»�K_½8`±´|X0ç*TFdÏ#Öte-� êñÅÛÃýã—_ýé æÅ›ÃßÊ}ùùý?Ž/¾>üášÏàðœ¢e::�ÍW:àu€‰ÛGxDÙÍ vÞ¯ƒ¼´ŸçÉ-"Ú€tLá�×QÎýÜüwßý囿ýøtÍsqØgl3gÿ|Í£jbô|͇2×|¶æc‰Ï+ÍÇG4�,{Í´�h>a±wÍ´�iùÿšiÑ|.ßas:×É©²+2³“ž¬{ùz=Þ%e½þFèèDf•«âÞê¤-`Ò™¾qÇY÷‰fIôÌmqÖ¸ü˜uŒm̦Ÿ·>k0…¡ƒsîòæÕÂ3§ªŸþÕÑfNOªÞ©l„ô>÷ þD|‚–dÖ¯:¼Zïu«/œDòº·°9ç³&™ù§øÃ?·ØÓÙ“±šeÝžáiìé•dÚ’“ð÷Vxü’è~;9@å3œóù~¹b-¼E(oJœî3ñÿÄgî•#4NËRäTó“›#ÊÚÛêöNOcïyÌb¢Yt›'Žç¶þ$æegˆýç!çó¹Ë¹?äOÀ>Hý�öœËÛ‘éÚ|îååòºØ ÂNMŸ×g•ÓxÎéo3Ž“áks¿W™íŸ,f߷ΪüÒ9¿Od·²G·Ûé‰Ö`çO¶üÊ�à·>°¨ÎüWÿ^(ÑI´QõÈk{¡ö÷[¨É)n¸ý5Ù‰¹ë\ßüƒîåíé•yYùß}"¾ðAêqvçœÞ§?ÐŽÁ]›Où§{Ö¶—‹}9È ìÔÛ¯þ[íÉõ¹ÌsÖÛ—‹ÿV^úV¹Lç\þ/êíúŠ¡¾Åˆ EÙ–½ atteGS ó›ãÃ/ï#RƳ›_Ñ—í«–hb›Câ ï†×ÞË›z«¼X-»=Öçç¾<½ŽŽþ.â¾ïVÓÏažœ¼pŸÔ�çvªë×Ç ëóïÙt±›ëaï/6/ŸÞÊÞR_6wñÑ.{‡ý¼‡«| >ãå×WC»�¨ÚÉÎÌÚã…[çßÛý®I­¿ÊÛLìlÙ�ºüžoq²Ê/oÂÞlöS1@Ù”e'^Ž£3>‡ï`æ<ùØ—˜ïp=4­-o«`ÃN‡ò’,ŸKº²—a9Ì­q€ëaÙMÑïçz›[BšêYqú¥ãw»…ËèËg1 #”IÓzš*ªÎ{ƒ^Êöû�WaëŒy Ñ]‡ƒ¹ÊR;ÌÍæ›ê’:+Ì_e) +sjàé€nÝ9z·‹’mUvÉ4Ì ¥rC¹J6ƒøf§¨|c²?7µéò1A».¬FSZÁTÉ7¹\åv ÓaWnm�›¥b“JýÖ\™ïªtWw©¿ƒÍ­(ÒÄ�8-/Ÿ©ÚA¡X ÚÚ$á7´O‡’w6ðÝ�ãŽ4÷\a¸ºž�h·ÁÉtéhÙR½!4+V6ñ”—TÁ -™g>°¾¹Tù( ŸõNJl6x$Iâ¡e¿Ç€õ±Ë +ºlŒÍg%_6™ù’t›tcl@e�¹ªW’TK#l›×5¸¤°ÊOË•4U t×an®|7À]On¡ZöV¯`°ÂݹµÛáÐrç�„c³¸ ¾ ¢×� |¾‚§¹°ùs¸¸~ª�t˜L«v½3vÅ�:ÜÓèÝ ×hmÙÉæÜ{�íUÜÓáçÃ\æÈ1åò�ª›7¶Ëi–=þ2_ãç_ü¶nÖ[ê8™–-¨åÖ–•ŒÈU^…‰r[Ø�¼Hû¶©Ërõ†VljD¾öývÓ{•´-ƒÚvU‚Ü905×%ë3¬€§3ÛDæ±¶é{9uupè¦ì lZáD§©_s½$E“8+¢½¤ãª'q#Nd£8æ®Ù fqHÙI£¾èï¥)\éKœˆiD9uýšïeV6]±yBÄ[q³·CÃÞÊNó ÏŽÒ¯GÛ}U9Ô(hKí ½“hXA[ÂÛGÝ|ÆÓVsܱœÔàí µ¶œˆ=×&9=4úÔÂ'ÒGšúm«ËN}ņNk¡hé¢|ÖS±Öb¬:…õ¶JË<â´ËRlsŠŽþ,™fi•F"K«„�li·V¼6[rmÄÒ�c�é’m.™v° ïn¨ï’®bÛ¾ýØw­¶G1 ß }fjúm¼‘|Pþ{Hììî¡Ü“…ØÔa˜P¾¢�ŽÜ1—éN +9dùšÊ'ñläÞ÷èK¶�DêÃÙÌ�E»3ÑÂß.¨pwˆK Ó/ˆ¦ÖïÕ/Ü–Íî�îGÀÅïö÷ػɭŸñÏO„Úi,KEÎÉ»2éE�gÍ…-÷¼yìõýÀȵ +endstream +endobj +8 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 7 0 R +/Resources 4 0 R +/Annots [ 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R 14 0 R 15 0 R 16 0 R 17 0 R 18 0 R 19 0 R 20 0 R 21 0 R 22 0 R 23 0 R 24 0 R 25 0 R 26 0 R 27 0 R 28 0 R 29 0 R 30 0 R 31 0 R 32 0 R 33 0 R 34 0 R 35 0 R 36 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +9 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 76.423228 671.061024 504.679134 638.361024 ] +/BS << +/W 0 +>> +/Dest (cis-v1.6-kubernetes-benchmark---rancher-v2.6-with-kubernetes-v1.18-to-v1.21) +>> +endobj +10 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 488.750423 648.111024 496.429134 633.111024 ] +/BS << +/W 0 +>> +/Dest (cis-v1.6-kubernetes-benchmark---rancher-v2.6-with-kubernetes-v1.18-to-v1.21) +>> +endobj +11 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 76.423228 626.361024 504.679134 593.661024 ] +/BS << +/W 0 +>> +/Dest (controls) +>> +endobj +12 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 485.690364 618.411024 496.429134 603.411024 ] +/BS << +/W 0 +>> +/Dest (controls) +>> +endobj +13 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 76.423228 581.661024 504.679134 548.961024 ] +/BS << +/W 0 +>> +/Dest (master-node-configuration-files) +>> +endobj +14 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 485.521907 573.711024 496.429134 558.711024 ] +/BS << +/W 0 +>> +/Dest (master-node-configuration-files) +>> +endobj +15 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 530.961024 498.679134 507.561024 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-api-server-pod-specification-file-permissions-are-set-to-644-or-more-restrictive-automated) +>> +endobj +16 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 510.561024 491.179134 495.561024 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-api-server-pod-specification-file-permissions-are-set-to-644-or-more-restrictive-automated) +>> +endobj +17 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 491.361024 498.679134 467.961024 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-api-server-pod-specification-file-ownership-is-set-to-rootroot-automated) +>> +endobj +18 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 470.961024 491.179134 455.961024 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-api-server-pod-specification-file-ownership-is-set-to-rootroot-automated) +>> +endobj +19 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 451.761024 498.679134 428.361024 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-controller-manager-pod-specification-file-permissions-are-set-to-644-or-more-restrictive-automated) +>> +endobj +20 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 431.361024 491.179134 416.361024 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-controller-manager-pod-specification-file-permissions-are-set-to-644-or-more-restrictive-automated) +>> +endobj +21 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 412.161024 498.679134 388.761024 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-controller-manager-pod-specification-file-ownership-is-set-to-rootroot-automated) +>> +endobj +22 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 391.761024 491.179134 376.761024 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-controller-manager-pod-specification-file-ownership-is-set-to-rootroot-automated) +>> +endobj +23 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 372.561024 498.679134 349.161024 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-scheduler-pod-specification-file-permissions-are-set-to-644-or-more-restrictive-automated) +>> +endobj +24 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 352.161024 491.179134 337.161024 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-scheduler-pod-specification-file-permissions-are-set-to-644-or-more-restrictive-automated) +>> +endobj +25 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 332.961024 498.679134 309.561024 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-scheduler-pod-specification-file-ownership-is-set-to-rootroot-automated) +>> +endobj +26 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 312.561024 491.179134 297.561024 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-scheduler-pod-specification-file-ownership-is-set-to-rootroot-automated) +>> +endobj +27 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 293.361024 498.679134 269.961024 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-etcd-pod-specification-file-permissions-are-set-to-644-or-more-restrictive-automated) +>> +endobj +28 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 272.961024 491.179134 257.961024 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-etcd-pod-specification-file-permissions-are-set-to-644-or-more-restrictive-automated) +>> +endobj +29 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 253.761024 498.679134 230.361024 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-etcd-pod-specification-file-ownership-is-set-to-rootroot-automated) +>> +endobj +30 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 233.361024 491.179134 218.361024 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-etcd-pod-specification-file-ownership-is-set-to-rootroot-automated) +>> +endobj +31 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 214.161024 498.679134 190.761024 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-container-network-interface-file-permissions-are-set-to-644-or-more-restrictive-manual) +>> +endobj +32 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 193.761024 491.179134 178.761024 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-container-network-interface-file-permissions-are-set-to-644-or-more-restrictive-manual) +>> +endobj +33 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 174.561024 498.679134 151.161024 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-container-network-interface-file-ownership-is-set-to-rootroot-manual) +>> +endobj +34 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 154.161024 491.179134 139.161024 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-container-network-interface-file-ownership-is-set-to-rootroot-manual) +>> +endobj +35 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 134.961024 498.679134 111.561024 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-etcd-data-directory-permissions-are-set-to-700-or-more-restrictive-automated) +>> +endobj +36 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 114.561024 491.179134 99.561024 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-etcd-data-directory-permissions-are-set-to-700-or-more-restrictive-automated) +>> +endobj +37 0 obj +<< +/Filter /FlateDecode +/Length 3681 +>> +stream +xœí\[‹Ç~?¿â<Üîªêê AIÀ&`ƒÈ•<ÈÇRBXì<äï§jfú2sfêìj�,%¬ÄîÎÔ|Ó]]_]ºçg/ÿ¿ù•¸œKŠá|yúéä]b/ÿ&Äjg:ü�üŒÿ’Ó³)Ÿ9±ó Ðùý(�ÙÅYü â|C<´òpúÓ¯N?î7gt¥ÄÀþüóÛ’‚‹™³ÉÞÅ” ‰�hA +º(b"êr +à�!àE_ödb@„¾Xј"˜•±xŸ-ŒèŒP|20$:CÈ&&ˆÎ>%-Œèì}41ŒŽ ±g “çLL ŽS! Lò‚Aô†ï@ŠŽ#ƒ‰É¢3gï ï�,:³/&¦ˆÎ�²7\ ½èL1yÃЋÎX¢‰Ñ1ÃP¢”�ÉÄ èì3ÃÇ�DgP ÿAŠ.”àML@r”c&»�J61ƒ©þƒÑ»9Ã0ŠÎœÙÄ$Ñ™!Ã0‰Î!�‰É¢3%,†ÿH¨ ÆC±ü§ˆÎBˆ…!/:—bøyÑÙK!±0 :{HÙðÉrŽJˆ6&:ʉ³ácD(²á?DÙQ’ß&G1b6üG²“#.`cDgFŸ £(:‡P²á?$%�(e#5�ȧlø�ØÆ‘™��!r6|Œ¤ Š÷„lù�ÔAñ!²0Aê Ælø�R‡9ƒ�‰‚Ÿ ÿ R1QI†ÿ©ƒÏÙÄHD.)þ¤"c´1¢s`N†ÿ©ƒbÁ`cDgJ†�©ƒ’£1þ¤"$°1¢3xŸ ÿ RÑc±1ÙAᜠ“:à¤^¦dø�LSÑÆD'ƒâdøK”V‚��£§høK”R‰Ñð–:(s °1¢3 ÿa©ƒ@PlŒè,Å0þÃRe7EÃXê ÌG£��½d<Ãdž%Óü®0Ë”g™ ê‰ÃeqKe2øie²nvDó>z^Ìüü�Ó—oÀùó?þ}z÷«iYE¥âY<àÌRc[ÊxhZw¹,Z¤ÙÚ­@š<ÆTÛYÉç‘õ“$sôN†“¹4&±WrqóŽ.2QÚJ‡Ž/§QN,i¶µ=ÈSo¥õ©Tô8¨.½¬ŒÐåjY#\ÉAf Ýz\Iylw <ȇÑ=–Ú·÷eÍC<à!®yˆ¼•¯\&»¶Ò xÀà Ï·ÆÃÒcÔ"rÍC—®yèò™[ùàÒC�+éŠ8àaŒ6ú¡ÇÁRûö¾œ¼+¤ÿÎ×vˆ£yºÇ¡¸òæ�‰—} Ñ—½ +ѨÿÒùzã !:j¸}ÜÑKˆ¾„èKˆ~¤ÝŧOt�B÷%D_Bô%DŸ5Ñ]Ý!šnÉ is_M/å4‡ó�|lhçÖZ? Îä<ø’y»º¦BÎ&&:¢˜ LFGœ3‚…Éz7M”�0E/(cârŒIÞ»€!a¶0Ñ…ãt³áèBÌ1š˜,Aê#E£7Hãt³ê£7H(ðtîsä`p‘:N™Áà"…¬7áB¶0Ôq|¥¨7)C@ƒ¯£–%Ê_’#„{q “]Ohq‘ƒK„X,.ŠÞàMLt)E$ƒ¯,y:•ŒÞà+{ Dô� ¾2—B0¸�6\ŽÀà"£ä }¶0¤¹8{6øÊ’2 y_9WJ6øÊ,¹.Qaƒ¯Ìѕ .rÔ)‹‹Xœ§’£…Ñg "d²øÊ’‘ÅÞâ+'�A¤dñUȦ,.¤¸C( .¤:H³…pP(ƒ¯"›,£70H)q6ø’R¡7?$-® .JGž‚Åi Éò|±øÃä(¤@_â^ޤhxƒ¯Ù‘TÁdð%L¹DÁâ"É´�˜¼ÅE&'Y“‰)zƒÅWa½¡Ž`ðÆŽ‘滔ǠäXò<lÈlˆËœ :Tçâ‹ BvQo'lI»º Ðg'Ãmñtñ †íÄ`„ó>üð>ÀO;‡~óúTæg¦ŠL/õÖ2z­Î^’�/j‰×ïO_~ûí¿ùëŸe(¯ß�þö•<ÈO~õ÷óë¯O¿}-�?µù(óÎÍ—o^ +�”þ�×¼ÌàÃÇk^ŸÀ�Ø|¢›Ô>£ù ž‹Ú7Ïh>å›Ô>£y&¸Ií÷Ïh^ænµ¬]<®yˆË£Žqê@~²n¢.¬ÉË$J;øËï~ý›ß³é }¸þÉÛ�õÜæÉ,~^ÖÑYñ-ë?Ãwr°‹Ÿç;ìÀ’µÐ3š�v`ióüŒŒïÑŽ,m?®Úßw{\ܧ'1}�C:Yü£L3£6õñ_Y`öžEÆÒ¿>ÙȬKÆùË;|/?aÞ^ÉŒþ�dºÔ\0ú·ž£›ìÒÛW¼gœe|YÚ×ý7³NaÑGu›úÔóiiï2˧sb×£ê¨íìé?le³Í÷íªèvê-½è�a±UÕßãÍ‹.f»âyÕî.GñN…Y§IÏËÜ–ö1q€‹­‹b�Þ¼•íwCû4ðà»Ý'›_úù•‹I�Q?ƒ(š.çŸÆýâ—ú§î‡lÚ2nmYûçêc<ëZ}nÒ»tïÄ©ÌÕãmNÓgÀé�cl:—Ÿ%ÆÖ2Ën²fÝØí>|Lßæ#߇�É>±Ë&nr·;ó+ ú¯þŸãÖÀŸ&ðd¶çð6Ñås%ú³ŠF­1ïD’.îo“ôæNÙq°{uDÝŸìþ®Ûü0X²ê›Ï*bM£¦+£>:²»³üòôVÚmgøþÙîÕ¦!qkÈÛÑW"¹0cþ¤ACŸ ·q8gâyá-®Çýy$n¦+ÛþO$nŽ|kªÅóögáo_¡ž?a.ŸhšMý²Ô�MóÖ¦Oæª_ + ÚåVÉ�K¡a“±ÃbÀÅx4TiUÐHÌãBîø*w�¹‡—hÙ†¡l7Æ.Cä,^Òp¹·³bõÍrÌ/†Þ8•eêð®â,£%ÿqV¿‰W¿¼!þ^öç{&Ú³·ÞeÜFá“í_yNû|ÜɆåpaYmx§+tÕ†U×Uæ‚ÇÛ‘G[†ÁŽ5Sò§²¥>Mr°þ«¶¼Ó•±æ�oו£MõÓrüûe8uúòÖO µ|ŒKŸýXÈü¥®agÁÏϼ?éw„”ýþ8ž·D¬Ÿ)ÚŠ„æRß–_‰ƒ>“ó8± +—MßÚ +P�Mv9é[$é{ófi�룤ó¦>3ØÏçzÍ1ŒuO�~îxG(gF¸ëèõ¥ YÌÓ—¥hÙ‹M}R¹ {ƒaÄöû‰7Å@~òµÐÝu±Ä`©Xl›¥qNØUMý‹i Ó^NÒ-m¥»R„&Ãj]ýÎOÕoPª4)Wd#$4žvDú†Í•ð _›Bf;>°†./Â\)4\©¸Ñå´‹[ZãÆTj¨ÜO-Õò]•îê”›áwd“�©¤‰‡a<Õ͵8*•kŸ¿Á+áå¤yçJüpâ´ƒæž+¶§¿çTÁMª™gÚÐgd 60îõN46›xm¤Q[Ö {€�:v0¤Ô|v´—,¬vðštºYl%L6ÈS©êi’jÉc-†æuM¬)¬Ú§åÊQè«Ò]ss凕¸ëÉ-TÅÙkgwçÖnÇ–;FqjŒë‡úê zˆƒÏWáe*la+V×ϵ“.Fߪ]ïlvÅ$)tqO£“¸FkËN ïn,›=Èö*îåôÏÓTæ�‹¾¡«ßjZ¿þçÿækùù×)œÿPIŸë¸~Çoé[n]‰ÇJ†H•›bÄÒ„-l!†!íw1äŽåê ­Ž#ù:ôÓ}Oì -ƒB;: +¹Ûpcs],Æð²±b›È<—›^°ç]ªƒ“nH?qTµ’�q8²›û1ê%ù<4){ +í%ôã‡Ã‰²36*»C‡¥k¶RSr줙^õ#¤} ;Ã4Bw© ½ÌŽMWÙ4Š`89Àªác§e¥ÏŽÒ^Ïæ}Q9ÖPiKíMú0JÛÀTÚÞ¾”¦Ý¸Þm5‡ÎºSƒ·[¨µECìQ›äôÐèS‹°Ú}t�æ~Úà±ÓPe«Nk¡héBßÅ®²Öbª:Åå´j–iÄy×J©Í)ºôŸ£¥yd¥‘GVâVÛ­¯Í–¨M€xtçÔGç;²Í%óŽ,Žg7ièHª²ë¾ÃºïZmÏÃ0BW$ö™©ï§ñòƒò߇ÄÎîë{¨Õ¥Èí†×�¬B"¤sÑéNŽQrˆ DVÍ!×Fž|Ž}±äú’H½X2öú¶¹~{ÄßTx�åö�¡©åmýƒÓô%æ�!=͇oÃí¿^@Ž–�LW„ÚnÒ¥"—¬o¥û,A^ ùƒ;Ëñê²×wÿW‘�Š +endstream +endobj +38 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 37 0 R +/Resources 4 0 R +/Annots [ 39 0 R 40 0 R 41 0 R 42 0 R 43 0 R 44 0 R 45 0 R 46 0 R 47 0 R 48 0 R 49 0 R 50 0 R 51 0 R 52 0 R 53 0 R 54 0 R 55 0 R 56 0 R 57 0 R 58 0 R 59 0 R 60 0 R 61 0 R 62 0 R 63 0 R 64 0 R 65 0 R 66 0 R 67 0 R 68 0 R 69 0 R 70 0 R 71 0 R 72 0 R 73 0 R 74 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +39 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 790.370079 498.679134 766.970079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-etcd-data-directory-ownership-is-set-to-etcdetcd-automated) +>> +endobj +40 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 769.970079 491.179134 754.970079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-etcd-data-directory-ownership-is-set-to-etcdetcd-automated) +>> +endobj +41 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 750.770079 498.679134 727.370079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-admin.conf-file-permissions-are-set-to-644-or-more-restrictive-automated) +>> +endobj +42 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 730.370079 491.179134 715.370079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-admin.conf-file-permissions-are-set-to-644-or-more-restrictive-automated) +>> +endobj +43 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 711.170079 498.679134 687.770079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-admin.conf-file-ownership-is-set-to-rootroot-automated) +>> +endobj +44 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 690.770079 491.179134 675.770079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-admin.conf-file-ownership-is-set-to-rootroot-automated) +>> +endobj +45 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 671.570079 498.679134 648.170079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-scheduler.conf-file-permissions-are-set-to-644-or-more-restrictive-automated) +>> +endobj +46 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 651.170079 491.179134 636.170079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-scheduler.conf-file-permissions-are-set-to-644-or-more-restrictive-automated) +>> +endobj +47 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 631.970079 498.679134 608.570079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-scheduler.conf-file-ownership-is-set-to-rootroot-automated) +>> +endobj +48 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 611.570079 491.179134 596.570079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-scheduler.conf-file-ownership-is-set-to-rootroot-automated) +>> +endobj +49 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 592.370079 498.679134 568.970079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-controller-manager.conf-file-permissions-are-set-to-644-or-more-restrictive-automated) +>> +endobj +50 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 571.970079 491.179134 556.970079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-controller-manager.conf-file-permissions-are-set-to-644-or-more-restrictive-automated) +>> +endobj +51 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 552.770079 498.679134 529.370079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-controller-manager.conf-file-ownership-is-set-to-rootroot-automated) +>> +endobj +52 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 532.370079 491.179134 517.370079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-controller-manager.conf-file-ownership-is-set-to-rootroot-automated) +>> +endobj +53 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 513.170079 498.679134 489.770079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-kubernetes-pki-directory-and-file-ownership-is-set-to-rootroot-automated) +>> +endobj +54 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 492.770079 491.179134 477.770079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-kubernetes-pki-directory-and-file-ownership-is-set-to-rootroot-automated) +>> +endobj +55 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 473.570079 498.679134 450.170079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-kubernetes-pki-certificate-file-permissions-are-set-to-644-or-more-restrictive-automated) +>> +endobj +56 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 453.170079 491.179134 438.170079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-kubernetes-pki-certificate-file-permissions-are-set-to-644-or-more-restrictive-automated) +>> +endobj +57 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 433.970079 498.679134 410.570079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-kubernetes-pki-key-file-permissions-are-set-to-600-automated) +>> +endobj +58 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 413.570079 491.179134 398.570079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-kubernetes-pki-key-file-permissions-are-set-to-600-automated) +>> +endobj +59 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 76.423228 394.370079 504.679134 361.670079 ] +/BS << +/W 0 +>> +/Dest (api-server) +>> +endobj +60 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.982112 386.420079 496.429134 371.420079 ] +/BS << +/W 0 +>> +/Dest (api-server) +>> +endobj +61 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 343.670079 498.679134 320.270079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---anonymous-auth-argument-is-set-to-false-automated) +>> +endobj +62 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 323.270079 491.179134 308.270079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---anonymous-auth-argument-is-set-to-false-automated) +>> +endobj +63 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 304.070079 498.679134 280.670079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---basic-auth-file-argument-is-not-set-automated) +>> +endobj +64 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 298.670079 491.179134 283.670079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---basic-auth-file-argument-is-not-set-automated) +>> +endobj +65 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 264.470079 498.679134 241.070079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---token-auth-file-parameter-is-not-set-automated) +>> +endobj +66 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 259.070079 491.179134 244.070079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---token-auth-file-parameter-is-not-set-automated) +>> +endobj +67 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 224.870079 498.679134 201.470079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---kubelet-https-argument-is-set-to-true-automated) +>> +endobj +68 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 219.470079 491.179134 204.470079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---kubelet-https-argument-is-set-to-true-automated) +>> +endobj +69 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 185.270079 498.679134 161.870079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---kubelet-client-certificate-and---kubelet-client-key-arguments-are-set-as-appropriate-automated) +>> +endobj +70 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 164.870079 491.179134 149.870079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---kubelet-client-certificate-and---kubelet-client-key-arguments-are-set-as-appropriate-automated) +>> +endobj +71 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 145.670079 498.679134 122.270079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---kubelet-certificate-authority-argument-is-set-as-appropriate-automated) +>> +endobj +72 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 125.270079 491.179134 110.270079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---kubelet-certificate-authority-argument-is-set-as-appropriate-automated) +>> +endobj +73 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 106.070079 498.679134 82.670079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---authorization-mode-argument-is-not-set-to-alwaysallow-automated) +>> +endobj +74 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 85.670079 491.179134 70.670079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---authorization-mode-argument-is-not-set-to-alwaysallow-automated) +>> +endobj +75 0 obj +<< +/Filter /FlateDecode +/Length 3492 +>> +stream +xœå\ÛŽä¶}ï¯èg¦IVÉ1�°À¹"³m��`Ö€�‡ü~Õ⥻5Õ3Ó½ 6ÙÅìJ¥R‰:‡¬:¤¤ {�¿ŸüS8¸R4'Þ>ì~Þy—ÅãÏâq²³þ~æ¿!dWϦ²>—bôœ÷æ f�hÿs¹bžÃ<íþôÙî§íXaOÎ{ %îù~vÉìr1—ç] +n,jâh¸$—¹xŸŸwÑèrJ”ƒáR\.œ)=ï<»â)åç}‚w%Nbù$WHKTÃ'FW¤eËTä$bàmVÖhÐØ;ð‹� îÈ)…$A¢SôÂ`a(Åi*T *Bb§%e¶0Ì$x Ü��ÄÙ°àã_ âÎ'½…¡Šó¹H20ŒmÖ¤d`}v@ª�a äQJ†1¨C c²'5ús¤àB)Y #e‡v‡`p™®ÇÅÀ0²:ø6¸ˆ"."ç Ã\,^²ÅEB›#ÃÂ0“£�É[\duD Ý°ˆ#aOåHja¨Ù�,l?ïCžã@40$¯ŽcFR0|‚8f)b`H18Fjކ³ã¥‘CÚ@ê°|ÔI@20$'”S60$ N$y6ú3Iv’™½…aB›5ælq‘Ô¥YfA Å­[\”àç’, Kv)% WÃGɥ¢†ª.{¤ƒ ö‚¢Œ‚a`È!¸LÈô†ŒÍ,¨†ÉeHž``ÈmVd`È$®B3|ªÀB †ÌØdEB4|„\I%²…¡(Ä\BG4|’8õŒŠaø ¢¸ã�å“]R‹ ÔA�î“…!ê B$E‹ ÔAU ACtvç³\ˆ/Î#±FC ì J1¸@Ôe�Òbù$çAF0¸Š.ø¤–V*.D!K¬ +³ LÙR«"Þ…T+ªå“P—=[zUÚ¬¥XzU Ó#Ä”¥W‘ ]$K¯b;Üz±ô*Š€‹*ÀÂR=*º¡ÑŸZ�|QK¯b`9Ô²ôj‚VGÍÈ–^MÐê”P + . Ga¸[z5A«³Gƒ‹­ÎAƒ¥Wчî#dp‘ ÕYD-½ +!ï Œc2¸HÐê ÉÒ« Z½ªpK¯B9t²ôjÊÉ •¥W‘R� eZzÇI†Êr¾Xz5{�ºŒÉ®5}õÉ%R±ôjÑ%A:40̘Rãþ£¥WsD›jËÀJóiò–^Åu’ÄÀÝ3jÍ–^ÅŒSêâ-½ŠIæÔè�9a¾ì¡- æËP6jq‘1_æ –^ÍóeQ�óe( K¯fE›5%K¯fÅ|9ˆ·ôjATTnK¯ÔA¤Â:¨ÙK¯ÔA”¶ôj�VGç)–^-Ðê˜TFK¯huT&±ô*d(æÔUÐ>Ðê YzÌ©«�2| Õ±ë-½Z ÕÕfø@«©É×ð�V¹&Ës|­�Þð�V�¾fù`¾ëÅž÷Qhõˆb`éU…VG–WK¯¢*aNÉҫС®fK¯*´:F²·ôªB«cT�¥W¡g1§–léUL 0§æ`éU…V'…<´0„VgŒ.K¯*´:æ!ÑÒ« +­ŽùƒXzU¡Õ¡ûÕÒ« +­Î…ÉÒ« +­��,½ªÐê†êó>Á{L˜kß°½ÇŒY2’°å0eÎ)ØK¬íVFâ´œ"&Í9úÈu zcáZP‹ÐÊmUé\Œ|¡†·l{××ùa÷ÅrÓþ‡î?[WÚ/}õn§Çå{…&[4¢¯ÚÎëÒd¤£wv_|ûí¿ùëŸq#ïwûU]=ÅOùòïûw_ï~óÁ_>a{%üÃÛÃÇPÅ“þý áS>®_=º,ÐÛÃÊ`¼^nŸÉ¤öÆðŒ~oQ{kxè#‹Ú>¿=¼P¸J­ÞÊíµ7ôûDù*µ‡ÂCXÔbøíá1ë6©-·õœ edQ[në9�ã&µå¶Œ©õ¹Ì•ð7ôœ*1®Q{CÏAñM&·z‘27cc†z|Ô—‚¾éGHyHL¿›ñS%‚¬ÿ¿÷ÞCƲ<›ó‚j uÇë#ÚzL0R~ÌÇíÛêƒS—ŸÅ§Œã˜wcðÿw#Ʋ�׬çÕGáuŸóˆ¹øÖsÖ˜þxliçÚŽ%öíæÇ£_‹Qï¥úÔç¿#ö×mìê³à^ÅËãâtOK›ýtëõüÁŒËu®;ǽàáðÀNŒrÄ3&¯tŽ×�x€~N6uŸîÃE=VÛ´´ó°ÆI§˜/~iì/÷&+�k\š0}X÷6ê)ç—ø¸žÓÚ1s¶r³´kÁÖÂ/†süîÃKäRçY×xáOˆ^�U;÷$ëµâùõ·øXsV¿‡—ñ“Îq¼?„z¯ó#ÿü­ç<âa`¶Ä™rÚëÇP}/8¢ÆIX¯½¶ï +/uŽ|�—ôéðB+†<·q#•Ÿx{Áûýq;¶ýpô}#?ùÓƒumù^¯µµû®ùwñÛj×ùX/£­¼ÚÞÞGbóŠöàãlèSë#Ë9:°]j¯Û-þ–NyUàxŽß}rj}ŸàZ¤|B¼„µ M¦ÕŸ'~ÚXÐiì4þ§ö¾ž§|Žç}x’_¢Môâécä°qTßÉøúD’¼DŸ<|B�ÌYWM߯T<ñºqí×sSÎ1¼7)”—h”{¯CFœ‹þ]V~õ>Ú¼yÁ<ßÆï«æÂ7éxü|”uˆú^Ç ´À½×"^À…¬yf#ù�XwlG{jÌ¥-4tÔí8æH×j·Üo¡áøÑñ{¶¯~t¸hž6ïL£=÷Á°D½Vå~sôóuFn5¨åÑÇã}TÜÖý~ÞßÛ;áVâµú$÷›C¿·æ»ÆmëwÏ�iŒé–Gú5̵Zõçø-çÐ<¾Æö¢Y&~îÇ£Ö瑩óx§yîM<®ë³Ëœçûõúô8å7s*çXþ—8­ßH\çôNsä[8íúÿ»�4>W.߯g¨¯û¤ÿ(¡ëƒËöp4 Z%�\É“ßSvY%æ´¼´ûé%.õƲ’ËË‹>ûP¿¸” ©È3/ú¬W¯/&…‹‡§i*!sôïµØ±æúm}vú—ßþú«ß}3ž�ֵǺL�/�úc›ÿËàxßï'˜ä8Þ[_›×²í¡Gûsšúú½ÕâÚ·Ê&ºzüö,hjO[;ë÷ÐÆÒå»?ïå‘áR_GôH L,õuÜX\^ìûúíUòi}Ÿ«¾Îµ öÏœº|ëüs÷Z?öN(háýñÛèigõ?>`ÿ° Ë»àõz@ý +­nÁ\_5?7?�f­oñ_˜¹¾zò2s5®›¾ÇâÐ»í° è²zîIõÅ´ã¦öà0®›õŸq¾´Óè8~cÛ«�þxá #ÎLáÒ\ïÞ»°šeù’—Ö½Ô›"©µ¹¾hÞòì;ޝš‘ª&£\ýt¹aÆÔæû¦vÎaìMŸ¡ ýÍ7æ‰NËxØá²tn}Ú´ÆÐm±¡}·ÑÔ(íViž�î]Ø»ø ÿšt»wGìÄ:A6Ù³¶æÕ$Õ“Ç©9ô^×Í5…5|z®œ�¾5—fé]ùéÄ<Ú)}¨¢³·‹¥0uwéq‡9õÜù4›sg¼þb„v£¤©Ï7ãa)l|n®]¿´‹ sô½Ú�‹MÆÑ0$…aiôi1·ÑÚ³SPí›c�mUÜÃîÇÝRæ"ÕÏ Ñ=ë7Jt"³Âþ_ðù?ÿØñþ÷íÍëc�¾g‹Øsë‰y®d1R£ðª9FíÆ>l&cä)ís(ÃWZoèu<Æ)_ó8Ý�ÄÞ»[yxR³]^›O¯Ýªí~º  IC™úqš\x¾)ÿ½eìl¾™½åu²J_Âð(Ô2EÚk•;¥þŠ –:kæ2­�¼ú{±ärI¤-–ÌW˜´SýµžkÂèõS¨õ�=sšúÍ[zÏ~ôµý=9Zþ¬+B}7ש¢h©ŸÛù‚A®!û°¹6tö±Äò÷ßOñ¥3 +endstream +endobj +76 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 75 0 R +/Resources 4 0 R +/Annots [ 77 0 R 78 0 R 79 0 R 80 0 R 81 0 R 82 0 R 83 0 R 84 0 R 85 0 R 86 0 R 87 0 R 88 0 R 89 0 R 90 0 R 91 0 R 92 0 R 93 0 R 94 0 R 95 0 R 96 0 R 97 0 R 98 0 R 99 0 R 100 0 R 101 0 R 102 0 R 103 0 R 104 0 R 105 0 R 106 0 R 107 0 R 108 0 R 109 0 R 110 0 R 111 0 R 112 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +77 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 790.370079 498.679134 766.970079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---authorization-mode-argument-includes-node-automated) +>> +endobj +78 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 769.970079 491.179134 754.970079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---authorization-mode-argument-includes-node-automated) +>> +endobj +79 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 750.770079 498.679134 727.370079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---authorization-mode-argument-includes-rbac-automated) +>> +endobj +80 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 730.370079 491.179134 715.370079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---authorization-mode-argument-includes-rbac-automated) +>> +endobj +81 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 711.170079 498.679134 687.770079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-admission-control-plugin-eventratelimit-is-set-automated) +>> +endobj +82 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 690.770079 491.179134 675.770079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-admission-control-plugin-eventratelimit-is-set-automated) +>> +endobj +83 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 671.570079 498.679134 648.170079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-admission-control-plugin-alwaysadmit-is-not-set-automated) +>> +endobj +84 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 651.170079 491.179134 636.170079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-admission-control-plugin-alwaysadmit-is-not-set-automated) +>> +endobj +85 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 631.970079 498.679134 608.570079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-admission-control-plugin-alwayspullimages-is-set-manual) +>> +endobj +86 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 611.570079 491.179134 596.570079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-admission-control-plugin-alwayspullimages-is-set-manual) +>> +endobj +87 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 592.370079 498.679134 568.970079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-admission-control-plugin-securitycontextdeny-is-set-if-podsecuritypolicy-is-not-used-manual) +>> +endobj +88 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 571.970079 491.179134 556.970079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-admission-control-plugin-securitycontextdeny-is-set-if-podsecuritypolicy-is-not-used-manual) +>> +endobj +89 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 552.770079 498.679134 529.370079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-admission-control-plugin-serviceaccount-is-set-automated) +>> +endobj +90 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 532.370079 491.179134 517.370079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-admission-control-plugin-serviceaccount-is-set-automated) +>> +endobj +91 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 513.170079 498.679134 489.770079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-admission-control-plugin-namespacelifecycle-is-set-automated) +>> +endobj +92 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 492.770079 491.179134 477.770079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-admission-control-plugin-namespacelifecycle-is-set-automated) +>> +endobj +93 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 473.570079 498.679134 450.170079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-admission-control-plugin-podsecuritypolicy-is-set-automated) +>> +endobj +94 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 453.170079 491.179134 438.170079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-admission-control-plugin-podsecuritypolicy-is-set-automated) +>> +endobj +95 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 433.970079 498.679134 410.570079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-admission-control-plugin-noderestriction-is-set-automated) +>> +endobj +96 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 413.570079 491.179134 398.570079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-admission-control-plugin-noderestriction-is-set-automated) +>> +endobj +97 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 394.370079 498.679134 370.970079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---insecure-bind-address-argument-is-not-set-automated) +>> +endobj +98 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 373.970079 491.179134 358.970079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---insecure-bind-address-argument-is-not-set-automated) +>> +endobj +99 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 354.770079 498.679134 331.370079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---insecure-port-argument-is-set-to-0-automated) +>> +endobj +100 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 349.370079 491.179134 334.370079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---insecure-port-argument-is-set-to-0-automated) +>> +endobj +101 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 315.170079 498.679134 291.770079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---secure-port-argument-is-not-set-to-0-automated) +>> +endobj +102 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 309.770079 491.179134 294.770079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---secure-port-argument-is-not-set-to-0-automated) +>> +endobj +103 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 275.570079 498.679134 252.170079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---profiling-argument-is-set-to-false-automated) +>> +endobj +104 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 270.170079 491.179134 255.170079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---profiling-argument-is-set-to-false-automated) +>> +endobj +105 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 235.970079 498.679134 212.570079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---audit-log-path-argument-is-set-automated) +>> +endobj +106 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 230.570079 491.179134 215.570079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---audit-log-path-argument-is-set-automated) +>> +endobj +107 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 196.370079 498.679134 172.970079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---audit-log-maxage-argument-is-set-to-30-or-as-appropriate-automated) +>> +endobj +108 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 175.970079 491.179134 160.970079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---audit-log-maxage-argument-is-set-to-30-or-as-appropriate-automated) +>> +endobj +109 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 156.770079 498.679134 133.370079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---audit-log-maxbackup-argument-is-set-to-10-or-as-appropriate-automated) +>> +endobj +110 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 136.370079 491.179134 121.370079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---audit-log-maxbackup-argument-is-set-to-10-or-as-appropriate-automated) +>> +endobj +111 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 117.170079 498.679134 93.770079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---audit-log-maxsize-argument-is-set-to-100-or-as-appropriate-automated) +>> +endobj +112 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 96.770079 491.179134 81.770079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---audit-log-maxsize-argument-is-set-to-100-or-as-appropriate-automated) +>> +endobj +113 0 obj +<< +/Filter /FlateDecode +/Length 3624 +>> +stream +xœí\Ý‹ä6ï¿¢ŸQTRUI‚¸ÀÝAÂAË}r³ÍnÂ1ØÜÃýûWr[R¹Û.ïL÷f703ôŒ]þ¹TªOIVŽ^~¿ù“\Î%1OïïÞ%òò3!'Óå壒«wÇ|¤DΗP ßi:gÇgò£�óYqy<üí‹Ã/ë¬à\)Œä�¿¾Ñ�„Ž3e ’½ã”¶ %82€q)!ømx‘—|41 c ¾X‘82˜˜ "‡â}¶0"s€â“�‰"3`61(2û”<[‘Ù{61•Hž,Lv”M ££T¢G“¼`Bð†ï@bGL`b²ÈLÙ{Ã{ ‹Ì䋉)"3Æì  ^dŽœ¼á?Á‹Ì¡°‰‘9,†ÿ‰RŠ&&ˆÌ>‡bøXˆ"³(†ÿ„È zƒÁaf¹fa²ÃT²‰!LHÅðŸÀÞ!Ë̔ÉÄ$‘™‹á?!‰ÌˆÑÄd‘9¦P ÿ‘PŒ‡bùO™Å &z‘¨Ã¢™½ "³‡” ÿ‘,çbA¶1ìbN” ‹1Æc6ü'Æìb’¿ÑEæ� ÿ‘ìä"°1"3Ÿ ‹,2#–løO”cÊ&Fj`Œ>eÃD7.J�Ù‘˜²ácQÊ xfˤŠE ƒRC¡� ÿ‘BêBÎ`cX0à“á?(u0¤X’á?(uPâ9›©ƒ�JJ†ÿ ÔÁ@�mŒÈŒDÉð”:(D#2GˆÉð1”:(9:$ÃPê`€6Fdï“á?(u0øPlLvP('ÃǤ8©—)þ#ÃTÁÛvÒ)J†ÿ�ÔAá‚6FdfÙð1’:(¥2°á?$uPÆ@`cDæX<þCR!B±1"³C6ü‡¤ÊibÃHê ŒGÙÆˆÌ^2žá?2Î’a>ãfò¯LªxâpYܲZý43Y²ÕhZGŸ'3¿þtøêœ?þôßÃÛ/¦i ‹HÅ“xÀ‘¤*rŸÊxèRºLZ„mkV �ΜŸýܳq“dŽÑˆºIÑ…™Ä"\ÑÅͺÈ@é’ª>4=’¤ÙÎ[ÑÓàÒ[äXZwjPO % zUŽÌ®è #‰Žî-.¨¤y‡U+ºê½jQij]ß§¥xü´Ó%}á2Ù¼¤^Ø!lØAѳóØí0·Èµˆ\ÛaP—vô³/éÊ¥U‹ ê°a½÷ªE¥©u}ŸÞ•XŽ×vˆªÞ¼ÛÝíP\x³²ÄKˆ¾„èKˆ^…(ןt¼>xBˆj —½ç•½„èKˆ¾„èG +ÑõP|ú@w+t_Bô%D_Bô¦�îâ £j®[—rºˆjƼA׌V­�»à�ìsºœ]‹¥¢ÌÓ§ÓM »XR`0098Ä‚‘,L® xz µ…©H(ž:70É×QTÈ�9‰Í¸>34dN¢¼>zCæ$ÊN02§€.2Y2Gï2‹–ØÂ°+PüôPg ƒo Î y›˜"bÄl`êZŠü ÁÀ08‰‹%³Ä4¤’“%sŠ.ÄàÑ’9I¢ÍÀ’9“‹QR²%ss&¶d–dŠèS4lš}ìÉySíÄNr´;9HbÚ‰�’K;±“cti'v²´¼;Éå�ØÉ$õw'v2I¾ß‰�,9ÊïÄŽ8—ó;±“%GÁNìdÉQ°;YrT؉�,9*ìÄŽHââNìÉQq'vŠä(܉�"9 +wb§Ô‡¸;±SêCÜ�Ø)’£x'v¤˜Ž=›É«;±S]Ú‰�Â’Wwb§°äÕ�Ø)u³;Er”߉�"9ÊïÄN‘;±S$GÁN쀗$v‚G@ezìu=WËòc¸ Öå%œ_]—×pZ‡o.Ì¿_¹ôí«C9ob*2Þ«Ïzƒ¯¡ê«Ö%ðøêÝá«~øë÷ÿü»tåÕÛÿ¾ö¾Æ<Ð7ÿ>¾úîðÇWÂü©ì¥Èåöü|öb«Øìó ì¥üâû‡ç³¯�îÃû×7°—��eÚùÄç³Ç@¦inóLÙ4íÃmžCLÓ>Üæ9”Ñ4me_>Œ=ð¼÷�¥�º‡EëGu¦=ÀÔÀ?þô‡oÿüýE7¸fòv`ÝÊ>Ú�õp›çg°«²?ÝÀžíÀz}[`°«²ÇسX¯oÌø>Ø‘uÍÝíÃìöaÚéÛ ÎyLü:o”TþêµFïC–Á…ЈåS�åšDÒt�d΋"—L[¦ãmÆÈ­Ó§ÝGxæ3ó?]¯÷�俟¯…¹½™ïÔFåñ0Óætæ9ÉÁóu}?«ã8hnk>®øf¾ïc»¦Ë~L͇L=ò¥ïdŸB2ÙØµÏëÏÌ>o¾ üõÌãTiÞœíÖÚºOŒYº p©»�Ås÷±á´[w߆§ûÚ°éj²S³‹¶kÚ° Ì}Úãµ°ñÓí»È�º�O·3_ê÷ÓØYz.Øvæ:ê¸s¬¦9òš��Ø[±ó%/­³)(}Ü+ίýÀÔq¸Ôñ}jï]ý .ìûÞ9ÞyÖûi©ß~ ?f¾çX§îôþc¬±öíB¿QÆßƒ-0\êìN¶ ²7®áóçî¶€³þ'�œf�´ù@8_×¹o¢µ1P¹µÙñ|ÏlˇßjlƒéRŸ&×Õ�å;c›jÇô<;~¨½üe¿Wìµ5ÞxŠÞ¦Ú8�ÓÖl¯û„ÉÔ[¼ÔÛ�ìÁô!c�|Ÿ¸ªòÆúÖI¼œ7ÌÇÓ½³­´[ÿãˆyÄE»Ëh§ÏÍß6G]ñ•éÞ‡¹³½§~LóSŸùRŸ•?ž� ÿz²ÇÒ!Ô`š-ì,â0fït ¦)f*.o—†ˆM˜•ÿЮ[Šà¬'SÛ«:<ÿ¿óè†t$ûÙp­Õž¹ƒª¶çhí|^9&{­”u× K¡É³Ó7g§<2Ç]mÙû§F@Ížwª zç™K›ÙÜYesÖÇAz/ý©Ìx—Õöªj-õÜü®éî~¶±tšáj–·X‰»§ý2nÎÖšýž9zùX«k¿Å¬üöü6mkù ò[.›³¾fß;�†ôÓ‡¶:ýûœ�ø8³¾‚›³¾f‹;= Š4ô¯e o¾�Si9ïíÐçÖ6\¬ªa[ñäk¿ý4O +_êöNO ¼ßœâ5£Ýùñ¶ä6/Qö¤˜Î=x»oQšå@ß{Mý‹ÿÑVX¸un7?smÏuI+ÑåTÄ�1¹T($žö0~ùH4•èÒ´K©N5‚#(2¬ßØ¥4·^7q�±ÝAXæö˜£N^R¤ÕK  :MŒMÿEùQ z6Ã60÷ʶo†ŸèéæÀåL8üBûÈš?„ÙWôRÁ‚›.*ySÚ¢¦Õ×;EÞ¨n H}w�§i_È´e2Ô�•~¤äD:Ρ٠&ÍÂqãÖéuUï;j~ƒU}[Ô7lœ_o¥NfüyoÀ»C}ùN5@Ý# +ŽÎGB®ïö¹$?Š™KûŠù‚Œuß̇‘+q>ô�BvÚé±~5â©m¥ƒÒ™×/7œµÞÔû©ÝÏñÚYuúsÃ+D¹“áš\{_¿Is&Óô:¦8Ÿq…¸É,ÄÁ5v07î’%Õ("]½jn�%KÆ~XºÍc¢kÕ�2ƤÌiOi6^RW©:-4íÖ—ã4ù”P¥S©!»A°Ûi…T¿–rEüÒ7Ö(ÆìוՂË317GÂŽ+ ·B:Vq37ê–J•Ç­¥i~ˆ2\=æ®øÚ¤£™*iâQ�BÝÛì É\-Ðlí³ò›pE<jÞ¹"?(­ iä +OÍõ41*¾�œýð—AM¹©Š¡ÓêÖºú÷œ*¨Skæ™ê^h ôÙh¤Æf'/•¤éܳ®i0 ¬R¤Ô}VëK&+øšt;ºklAU*SôivcÍ=y,Éн®“k +kúé¹R}Bšdê®ü¸ 9©‡ª8{kŒA¹;u¾ƒÌ=w>jrê¯o·k�u€•Ï7âi*lxI®®Ÿ[#ƒ|¯v£1E‚IRä‘F'r‹Öž� ”~8‚l­âž?¦2"…R¿ÖZ_p´üÎÿ'˜ïäóŸÿÒ¶�Ÿëx}ùÝÜ~è¹uAÖ•,„ØL¸K¡tbE ¨Òþ CXjÞÐëx*_ã¸Ý�ÄÞ�Ð3(ô«šHC‡ŠºëˆJ3dOZì™[m3 +öù4¶ÎI3±¾¨I%'º;ršÇµ8JòQ±”³ +%êÕ�r¢™Ê©j° ÉbV‡Ô�tÕWùQ›"Ö¶Ô‰FÔÓ8®á(³šu£M½Pu3‚1‚n´,äYúÙáu³Ýg‘¹E@¥öÔÞ©�šÚ;V©=á­SãtÊËÓ^sⱞ´àê¼¢Š½Ø9#4ÆÐ'ÚG5�ÛféF±Ñ�¶BÑÓEìß–¡Á15™x¾­©eêq^ÕRêcŠAýYkš´UºI[…¯°•o«x}´ûˆ´;§Ñ;?�},™Wh¬ïîTÈØh×mã²íVm�ª8á12õã6ºB>+ÿ='vV7•¯¡K!�û†¯o&…C<–:ÜÉÌ’Cê—))aVk#O¾Ç^,¹^i‹%º%1‡LÚ£O þ¶!£\(û«ù+î·¿Ú¥§)`ókë_ˆ.ÎßüŸV„úiªSE*ëÛ²y�ä7žfç«e¯ÿdb9 +endstream +endobj +114 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 113 0 R +/Resources 4 0 R +/Annots [ 115 0 R 116 0 R 117 0 R 118 0 R 119 0 R 120 0 R 121 0 R 122 0 R 123 0 R 124 0 R 125 0 R 126 0 R 127 0 R 128 0 R 129 0 R 130 0 R 131 0 R 132 0 R 133 0 R 134 0 R 135 0 R 136 0 R 137 0 R 138 0 R 139 0 R 140 0 R 141 0 R 142 0 R 143 0 R 144 0 R 145 0 R 146 0 R 147 0 R 148 0 R 149 0 R 150 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +115 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 790.370079 498.679134 766.970079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---request-timeout-argument-is-set-as-appropriate-automated) +>> +endobj +116 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 769.970079 491.179134 754.970079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---request-timeout-argument-is-set-as-appropriate-automated) +>> +endobj +117 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 750.770079 498.679134 727.370079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---service-account-lookup-argument-is-set-to-true-automated) +>> +endobj +118 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 730.370079 491.179134 715.370079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---service-account-lookup-argument-is-set-to-true-automated) +>> +endobj +119 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 711.170079 498.679134 687.770079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---service-account-key-file-argument-is-set-as-appropriate-automated) +>> +endobj +120 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 690.770079 491.179134 675.770079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---service-account-key-file-argument-is-set-as-appropriate-automated) +>> +endobj +121 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 671.570079 498.679134 648.170079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---etcd-certfile-and---etcd-keyfile-arguments-are-set-as-appropriate-automated) +>> +endobj +122 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 651.170079 491.179134 636.170079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---etcd-certfile-and---etcd-keyfile-arguments-are-set-as-appropriate-automated) +>> +endobj +123 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 631.970079 498.679134 608.570079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---tls-cert-file-and---tls-private-key-file-arguments-are-set-as-appropriate-automated) +>> +endobj +124 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 611.570079 491.179134 596.570079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---tls-cert-file-and---tls-private-key-file-arguments-are-set-as-appropriate-automated) +>> +endobj +125 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 592.370079 498.679134 568.970079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---client-ca-file-argument-is-set-as-appropriate-automated) +>> +endobj +126 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 571.970079 491.179134 556.970079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---client-ca-file-argument-is-set-as-appropriate-automated) +>> +endobj +127 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 552.770079 498.679134 529.370079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---etcd-cafile-argument-is-set-as-appropriate-automated) +>> +endobj +128 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 532.370079 491.179134 517.370079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---etcd-cafile-argument-is-set-as-appropriate-automated) +>> +endobj +129 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 513.170079 498.679134 489.770079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---encryption-provider-config-argument-is-set-as-appropriate-automated) +>> +endobj +130 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 492.770079 491.179134 477.770079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---encryption-provider-config-argument-is-set-as-appropriate-automated) +>> +endobj +131 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 473.570079 498.679134 450.170079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-encryption-providers-are-appropriately-configured-automated) +>> +endobj +132 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 453.170079 491.179134 438.170079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-encryption-providers-are-appropriately-configured-automated) +>> +endobj +133 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 433.970079 498.679134 410.570079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-api-server-only-makes-use-of-strong-cryptographic-ciphers-automated) +>> +endobj +134 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 413.570079 491.179134 398.570079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-api-server-only-makes-use-of-strong-cryptographic-ciphers-automated) +>> +endobj +135 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 76.423228 394.370079 504.679134 361.670079 ] +/BS << +/W 0 +>> +/Dest (controller-manager) +>> +endobj +136 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 483.326107 386.420079 496.429134 371.420079 ] +/BS << +/W 0 +>> +/Dest (controller-manager) +>> +endobj +137 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 343.670079 498.679134 320.270079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---terminated-pod-gc-threshold-argument-is-set-as-appropriate-automated) +>> +endobj +138 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 323.270079 491.179134 308.270079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---terminated-pod-gc-threshold-argument-is-set-as-appropriate-automated) +>> +endobj +139 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 304.070079 498.679134 280.670079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---profiling-argument-is-set-to-false-automated-1) +>> +endobj +140 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 298.670079 491.179134 283.670079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---profiling-argument-is-set-to-false-automated-1) +>> +endobj +141 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 264.470079 498.679134 241.070079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---use-service-account-credentials-argument-is-set-to-true-automated) +>> +endobj +142 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 244.070079 491.179134 229.070079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---use-service-account-credentials-argument-is-set-to-true-automated) +>> +endobj +143 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 224.870079 498.679134 201.470079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---service-account-private-key-file-argument-is-set-as-appropriate-automated) +>> +endobj +144 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 204.470079 491.179134 189.470079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---service-account-private-key-file-argument-is-set-as-appropriate-automated) +>> +endobj +145 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 185.270079 498.679134 161.870079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---root-ca-file-argument-is-set-as-appropriate-automated) +>> +endobj +146 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 164.870079 491.179134 149.870079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---root-ca-file-argument-is-set-as-appropriate-automated) +>> +endobj +147 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 145.670079 498.679134 122.270079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-rotatekubeletservercertificate-argument-is-set-to-true-automated) +>> +endobj +148 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 125.270079 491.179134 110.270079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-rotatekubeletservercertificate-argument-is-set-to-true-automated) +>> +endobj +149 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 106.070079 498.679134 82.670079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---bind-address-argument-is-set-to-127.0.0.1-automated) +>> +endobj +150 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 85.670079 491.179134 70.670079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---bind-address-argument-is-set-to-127.0.0.1-automated) +>> +endobj +151 0 obj +<< +/Filter /FlateDecode +/Length 3789 +>> +stream +xœí][¯ä¶ ~Ÿ_1Ï¢èBê -� @,zE6ÓÝÅÙIú÷KÙ–HÙ²|æœÙ´h|gwü™"%’%Ëö¬¹júó©¡¿"c +®·—Ÿ.ZÔô3I4ÓéoéWþñÁª¤�½ú¨|²É¸ë‡‹Ñ¤•”º(à'‚}�ƒcØûP”HøOŸ\~”M|b¢ ä)heÖ°¦ª7 +¶`µy»Øè ,+xb%Õœ1¦H‹¾ ô&‡"ðì ¬q£m•f‹ ¤nÛó¬„ ë¨öØI]?7}–ñ•î�­û=®`‘"t:ÁlÜowÜϸÑJCuÿbÎÛu¿Ýq¿mÝo`�‹ %ÚºßôÝÏpº°ÇNêúùFlL.ÿ\·~þþòÙ[£ôõû]Þ2³ñRɇ>Iwi'ý'cpÒñ¤ã¯žŽ>ÿ„ëöÃtlÆÒŒÜwFsò$äIȇ²O¼{W«{4=éxÒñWOÇ{–«Æ„¢ÄZ-èȸq^ŒÜÄ#\è)„ì*3W§Ìôsýù]#V¡AÉD\p2*a¨2Þ(MÔv$hÐ29†Ö[#™¤"Dði ½ÒAûd2Éû0ÅCZʪ#ZJä#ZúØõáü^Æ ÅFë\cþ4íp¬† ¥±+=oŠŒ—}6o®tf�7ó‰ϸ( ¾žg,X6Ò4²B—~�‹iÂt& a¸™llÔ¥±/c�¬7#™ <$p8�qNm¼N#™¤ºG}TQcÂQŸ‘„ѸQŸÉyÉh§G}öN¥¼›3ê3åº6àqÔçà•ö>Z?�¡¢bLÊ[™¨L 2 ”µÎAÜ—­• ˆÖŽd¼¢¸ú4è3«\H1 ú ”¯à¬†AŸÁR™�`ͨÏN+¤€¤QŸ�W#úQŸ©”zÐÁ b +ÀÛ«»2*p¼Vá€;੺p¦*;愨Òw æ ´1w QÝ:à¤@¹:æj§Ìw�j”=àR�²ÜAªQî€;H5Êp©FÁw�jp‡jªÂîÐ<¨ð€;H5Êp©Fùî §ºzÀ ¨Âw(-(WÇÜÁêĹ+“¨®pSRé€;žj”>àŽ§e¸ã©F™îP*+{ÀO5ÊpÇS�rÜñT£Üw<Õ(8àŽ§=äÅbAlÉú{ò�8öÅŸ³)ïCRºs­"ðæšÄçmÿÎvBƒonþÒzPwÖÈooÿ2.®2|+gÓ1Ü\«ò•¸·)ðÄZªÅ@åËoÖÈmÖÈo®UÞܼ­4Hݶëà«a¾Ìžêû»½ ,ƒ-ã ƒ-ï3Þ<5G¥~s­²ŠƒÝ‰ã–®6×*ÁÚnìNl‡åÊAàò..[”h³#ãà¶7ƒÙS}¿bS^ŒæÃu÷©(½(#qRô¤èIÑ E_¸)ßP´O3zßÑIÑ“¢'E?EûT¼¡»GÝ“¢'EOоj¡+®iC¨ûͦ|/FÏ—Ì»8ëÙnÊ‹Fù‚–ÚÑ\\lž!ìËx­�ŸÇÛ‘ ò@_&€‚ž­õ�è¸Ü 0ÊööiìJ?g{ ¤Ô½•)ð¦:F-îâ‰ÄnðuÕŒZ³‘¦Qs›«Ö0�‹z5?E,Qq»Qâ.ÊJÀ8hÖÂÁÖú úÇhÃV�7USà¢Þ ‹åþ5U³qdƒ‹§ŸÙ"{ªïï¶ÊÈ`˪$ƒ-kXÓ[ö¸QaS5Wq°;q°2qS5#¸nÜN\‡¥† \¤´°(Ñ6f'¯£—u:¥NúŠí1š;Ôݧ¢Äe$NŠž=)º¡è ·Š6ãiFï;#:)zRô¤èG¢hŸŠ÷/t÷¨{Rô¤èIÑW-tÅ%mB#(Êx$ñèù‚yz¶Û¢Ñîkv18å^é‹!)Lú>\o±ˆà?ãµÈFúÎ×"êœúòÍŸ廍üÕç��wÎRÿɤÓÔç7.Ÿýåw¿ùò÷_ÓHÞ¼¿üís­Íwô¾øûõÍW—ß¾!íýiVŸæÇ[¢ÕùQ,ôÊëd({²úo¾ùã×ýóãÔ[ +4FœûAKËÙM��ï¨M¶L~ô‚5z0‹±é_˜�Ú¬˜ŽÑÏÆgcù†¥30n°E†šN¿èæ¶h�{ûnéômÖ ogÙIÎÇ“-½ ̰þ©�_lùå¼°�v‘K³¾l§Èe\Sß,,úùÉÎ2†âX}93}Tgvý‡�õ ðWX0˜?O‰°è�ìøÇûs溌ϭþ…¡¿ÜÚ_wÇ¡K £Õ‚ BXØSØdf£ØÙÖ/1KÝ„óPtîÆrS»"[˜èGÎp._±í3?¡Dgºúc&F‘1†�TÛ¾ûÂúÏ—ö·AÛA¶m²2ö³n:/e�¬üyrxÍ–¡ÃQ:üEÙ××�(©MìÍ~ÏSú´×Egd}�®¸TœiúyheÍoAß§þÁ>]õuš¥Ï/òÙRTªíÿŽcR¶ïÃðøY"çßkëLWß/^{F¾�Þ°j|ûüõÈcÞ”íÇ8þB1þŸ­GC¿ùµß�¼–ïÇ#ýñø¿­e4¿îͱo_æWXÖU¸´›Æ mßí*‡á¶Ô¿å³]åö4βZsÍÚø6²?K Ì ÎÒV;öµ\´>fÕ|´ËàW ÐÕeÒL@:eµ2^ú¡³þÑÓ3JŽ�—ÿƒ•´H3 �ê5uøŽÈ¯«Ú=ŽA/—þ„>ó@fô32GÊLãðœ=NsP&»Ë5ò8cŽösŠ£Ë²÷ýÜ¡\j¦ßz¡?ŠfŒQ,ýö£ùÊë£Ê-:vcMÞÑ…½· î=G¹Çñ _ú²áçÃêc¾c²Zë­ýô k‘ù£\P§m6®×urŽÙÇu•é2ËÍ}™¾lו]Á€ä\4NÅ�¨@\]P!åwΧ[K—Ÿ#’ãRþZŽ|÷((ãjòwn-ÖóÝ73Ø2Ì;ÛˆG¾}‚Ã.sa³ä&W¦™$Š_Y†”�¢â¾ïDÚåsïx¹1í“”�¼Ÿ MÆír‰^‹Ìò¹·¤°ËrcJ Q<«~ä0ÉÝÍZÌ’\Jm6sº`¤2E"£óûÙ¦ï°Q… ¿bPÔ;m‰“™> +endobj +153 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 76.423228 790.370079 504.679134 757.670079 ] +/BS << +/W 0 +>> +/Dest (scheduler) +>> +endobj +154 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.309749 782.420079 496.429134 767.420079 ] +/BS << +/W 0 +>> +/Dest (scheduler) +>> +endobj +155 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 739.670079 498.679134 716.270079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---profiling-argument-is-set-to-false-automated-2) +>> +endobj +156 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 734.270079 491.179134 719.270079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---profiling-argument-is-set-to-false-automated-2) +>> +endobj +157 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 700.070079 498.679134 676.670079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---bind-address-argument-is-set-to-127.0.0.1-automated-1) +>> +endobj +158 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 679.670079 491.179134 664.670079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---bind-address-argument-is-set-to-127.0.0.1-automated-1) +>> +endobj +159 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 76.423228 660.470079 504.679134 627.770079 ] +/BS << +/W 0 +>> +/Dest (etcd-node-configuration-files) +>> +endobj +160 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.237972 652.520079 496.429134 637.520079 ] +/BS << +/W 0 +>> +/Dest (etcd-node-configuration-files) +>> +endobj +161 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 609.770079 498.679134 586.370079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---cert-file-and---key-file-arguments-are-set-as-appropriate-automated) +>> +endobj +162 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 589.370079 491.179134 574.370079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---cert-file-and---key-file-arguments-are-set-as-appropriate-automated) +>> +endobj +163 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 570.170079 498.679134 546.770079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---client-cert-auth-argument-is-set-to-true-automated) +>> +endobj +164 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 564.770079 491.179134 549.770079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---client-cert-auth-argument-is-set-to-true-automated) +>> +endobj +165 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 530.570079 498.679134 507.170079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---auto-tls-argument-is-not-set-to-true-automated) +>> +endobj +166 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 525.170079 491.179134 510.170079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---auto-tls-argument-is-not-set-to-true-automated) +>> +endobj +167 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 490.970079 498.679134 467.570079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---peer-cert-file-and---peer-key-file-arguments-are-set-as-appropriate-automated) +>> +endobj +168 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 470.570079 491.179134 455.570079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---peer-cert-file-and---peer-key-file-arguments-are-set-as-appropriate-automated) +>> +endobj +169 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 451.370079 498.679134 427.970079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---peer-client-cert-auth-argument-is-set-to-true-automated) +>> +endobj +170 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 430.970079 491.179134 415.970079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---peer-client-cert-auth-argument-is-set-to-true-automated) +>> +endobj +171 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 411.770079 498.679134 388.370079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---peer-auto-tls-argument-is-not-set-to-true-automated) +>> +endobj +172 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.786556 406.370079 491.179134 391.370079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---peer-auto-tls-argument-is-not-set-to-true-automated) +>> +endobj +173 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 372.170079 498.679134 348.770079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-a-unique-certificate-authority-is-used-for-etcd-automated) +>> +endobj +174 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.090267 351.770079 491.179134 336.770079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-a-unique-certificate-authority-is-used-for-etcd-automated) +>> +endobj +175 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 76.423228 332.570079 504.679134 299.870079 ] +/BS << +/W 0 +>> +/Dest (authentication-and-authorization) +>> +endobj +176 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.986019 324.620079 496.429134 309.620079 ] +/BS << +/W 0 +>> +/Dest (authentication-and-authorization) +>> +endobj +177 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 281.870079 498.679134 258.470079 ] +/BS << +/W 0 +>> +/Dest (client-certificate-authentication-should-not-be-used-for-users-manual) +>> +endobj +178 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.090267 261.470079 491.179134 246.470079 ] +/BS << +/W 0 +>> +/Dest (client-certificate-authentication-should-not-be-used-for-users-manual) +>> +endobj +179 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 76.423228 242.270079 504.679134 209.570079 ] +/BS << +/W 0 +>> +/Dest (logging) +>> +endobj +180 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.506282 234.320079 496.429134 219.320079 ] +/BS << +/W 0 +>> +/Dest (logging) +>> +endobj +181 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 191.570079 498.679134 168.170079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-a-minimal-audit-policy-is-created-automated) +>> +endobj +182 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.090267 186.170079 491.179134 171.170079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-a-minimal-audit-policy-is-created-automated) +>> +endobj +183 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 151.970079 498.679134 128.570079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-audit-policy-covers-key-security-concerns-manual) +>> +endobj +184 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.090267 146.570079 491.179134 131.570079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-audit-policy-covers-key-security-concerns-manual) +>> +endobj +185 0 obj +<< +/Filter /FlateDecode +/Length 3766 +>> +stream +xœí\[¯·~ׯÐs€lxrH Ðm�Àè}8VìÅq§ýûý¸Z’³wt.:'n#²µ³9çÂËh%»7øû¹Å?‰ì”RæHûÇÝÇ�™8ü™«‹ùö÷xÉ¿‘Ý”MÖícšbvÙúý‡�5è�ú$Ä÷Ç*fßÅ1ríDŠÿòÙîgÙ$æ®@4ébôÄf²§âȶuo':6�‡�[Óë yî�4uÖÚŠÜ„ô ‡"äÅ*§rk\Cw�+)˾ÝȲRl{M_7ÒÐÎ+ÎÒ¿ÒüimþNÄ"Dp;Ó™pe~·aþ.·f2ÔÌ¿¨³Ö Íï6ÌïÖæ·t*,4JéÚüvlþ.nCúº‘†v> ³/öço~ùq÷Å��ÌþÇïÞ6'æÊJm$ÆIº™vÒ~Ò·t¼¥ão>cùÃûó7�HÇÕXV#�ƒÑÜò–�·„¼JBŽï±»Õ­4½¥ã-óéø˜íªµÜ:!'�]n}#·é’\ôSrØ™ÝÃA9R0û_Þ­0èÀ¥�tLš'.ÛÄÆFÍä ·VÀs`²FÁ Ú\0^Ç€3yg²‚Iàì£U1œ]6&ipv@ò6Æ!Ó ©cÀÙ0›¨`,8UŒÃ´—}0AÃÄɦH*Æ»Érö†4L•øq„ŒŠÁª˜Î!£Ä� àLV1œÉ'£Ä˜C +#7Ø(ñãœ]Ž*&�³s”•øq œmð*&ƒ³I.+1†›ÀX›•ø�£&“ɨ˜2Y¦ˆ{&N†sR1Îã8+ñã]šL 1+ñã=8‡T �s°”•øñÎD^Åpö skpöÆf%~|gç�ŠÁ‚blÈY‰ÏàlRR1 œ f3%~|Šš)ª˜ì§œ8$%ƤÀJJü`˜2{¯b°KÊ1"ô5 8‡lUŒç€YQ‰1¬ÙX¸)'%~ȃ³ç¤bœ½á¤Ä8cÁP1œ1Ù%%Æ(€35)ñCœd*†Ëö%`Ò0x›’U1Ƀ “?”ò”ØgVâ‡r˜RŒIIJå +™Y‰Ÿ€­[ +.ª Î+ñ,8ûD*Æ�³·ž• œaIÐ0xkÙªgk +ñœ�Ë*&„ ob%ÆB´"žY‰Ÿ€�8'U öËÌX‰ŸÀyâȤb8Gã£c˜&˳†gŠVÃ@Í„P5Q‰Ÿˆ3{ìÜ4ŒgGiãÀÙ2G%~¢gœ TŒgãCTâ'úrò‹t†Y6þ£ÓBÀ¾——g2óÇ['ûW cøñ#1½è±.k ]¾ª&DœdGE¿•ü¬Ê€‰Ñ�ι]¾®3t¹(”†f ÍýÌ(+ó1ý¼ÔÀX [/M#ÏdOϺBº:ë +ùªÔ ä²JÐ5®¤Nöí†^ɹ÷Ò‹ ÝRc{¯Ë ÒÙ+?ÐÚµàÐå«�‰S8+9œøÁmøÁI?ijš—edàÞð¯ý°Ô„|U.hWҕ솄¼�^Vº¥Æö~ÆÇdb46Rw;WVž¸¥è-Eo)z–¢Oüèl•¢+æ«ÑÇÁˆn)zKÑ[оPŠŽSññÝ­Ô½¥è-Eo)ú¬�®<Ó—¦èœ!^ÂÆ¥˜Ó(ö3ó–\vtþ›hu<’³Ãé|}¼æRÂ‰š¬‚¡¹—[ydˆ)%¸H­¼?Âàüžœƒ‚‰à\BGãŒ8Jј¤qfp�Æ™Á™`�sgò½<2Âd[Jy6kœ3ÞzÇNᜠ8B +çdÀÙÙ^¢a,8Ûè�Â}”r_ò +gp™’ >jœKi(ç”4Î>ƒÓ8S(%ÁLçPʆžXãxbN¦}46ÂÄR6tÁ% 3— Mˆ +†KÙІVºaR)FÛ>zb¸<ÚIãœÁ™B/-1¥lˆ4U8cþ†œS8g ΣS8g¼eç{y„q¾”“Q8czÆy¯qöàlbŠggc}Ö8c• ÙiœCyÃiœCž"&Ö8cÁŽœƒÑ8c™Œ×838Ç¢Æ9�3Ò=iœ8D«Æ9ƒsp–”ü² g¤ØëòcX“µY™°ƒ¶ì”i ðöX2”y¡¬(X©>VA§µg±"ŠÚ³Ë± áùâ(àa ߬=ÜúúÍ8~Ý#î£Çƃ³GÞg‚"o¬Ý¿ù°ûâoøÝ×ücyó~÷�/aqÂËã•¿úçþÍ7»ß¿�EG>ªÈ³ëJå~o9NX -¿¨øî»?û÷¿^W…C.Ó «Hnr/«ÂûâéË*îž¡"•…õEU™¹û9*°$=ÄÝoŸ®¸¹ûð X4âîg¨ˆØ·<ÄÝT!g*GômöX´&º0…̯§�ƒùrò=SEr—“ï¹*ørò•WxºŠl/'ßsU¤ËÉW^q¥âR<•gX©n–Ô‰ñ²G±ëïŒ ¯` ½Ã+ßÏ÷ìññQ^d..xÜ£Œ×¯ÒÇÒÓ— |”WÜÜ®bß/:–ña{}¶Rå�¬ecÊ6g.36’„ŒKG…! +B ñ™ÔÛNp%[0Å¥-íÙŠ�Ý@¡(ÖöÖß½ëmf¼x³%.ý•ëY?�pŽ'úùØÆÌ+åb‡zÏuÇ•ÿšS“jh–†.¶­úgž¼\/ãlŽÍ�£�ý-ö^øÍc­��Žd˜hÅãÌÇáõqïÝ’µ]\tŽ10ë=t?k~�Û»åUlðéLµ£?µã•üƒ“·Óý³ŒÍŽC�ÿÆ<ÂaÃmRYì{7¶õl³·Ý–óx¢¸·¯ž‡ª-Ó©-×ùÚãàõóp~HW÷3_'¯ŸVzjÇ+ù'âH¬û']Ç?eÝ.¯‡ùCŸW ¯Þ®Î¯µ^ªöLgö|ðºúkæ)9{²nŸÅAþŽƒ«å²jC:µá圿ª™.íyî®´ç‘{š9&›Ç5ç–S©÷ÑâýÐã¹Æû§±çUmœOmüéäpp|iOõöŠþ/|g;öUcãUò:Щ]_7¯ÑúÒêð:g™6woÍÕ¹~�ìÉ+Çê¯Gæ÷¯fS€Nlú´³ð¯™ïÑ»K{·¥ øÿ¯“ï1œÚõÅò}Xp»TÀ­N®ŒMÇhƒä �Û±påŠ-íkÖDF-d«ÅÄʰZÙkä˜ÁêóÀÓØ\j¤£±*îz™™Ìæ©7˜«VŸZÖi+éã +íªíeIöÑv®þdÍܩ½\õÍ]áó•Ë_.±û½ùþ2#\ÑwaóD\}¯ì»�ÝT»Wfq3X)Ÿ™r•�ߟVQêÊv�6Tmǧ¶»ŽOÊs(§Óê¾®Oj»yŽX|ÑN™ï�±8ËÄî`e×+ÍSuõ¾’ãæ ±Ú1]ÙŽrG´Ø³íâìÑFë]ƒi«ûj÷$æ¬9¹ç¬§âª­]·Õóæ4Õžéì4ø¾\>²«Ÿ r‘ù‹Åœ]4{Ïåk¶ŽãüœËîç‡@ÊX¸õ+…}_Í�…¦Ð]DË&¯™©Ü{×C­üï£Øÿä£Ü-S\sËò~ä~·„F ¯tÒݨ +>uÚÆPÓèü±“�»�°Å¤|‰ÛØÇSpˆ'—&žåûÀØÅ䪟ìlY»ßh:ÿöëdžZ~ÖLÁÛòSÇߊ þøéò‡�Í4”G$íŽï †²p*¾‡›sý¦íJLóO½W”Ÿb9zÑo'Óã¥K9US!5«¬<òTþ=N¡IËÌ3¿)?fkòª+)¹ÙÄk#Iyl³�,`‰;V˜«< +áÏäè;™¾Lº Ý,¶’ +“ 9çJ¯LRmòX‹m‹º&.SXµO›+¥ÐTP×Å¡…òýJÜy†–ªöª,Zî¡õÛűÍ�÷RÌÍã{×:ˆ¾DóUx˜6:—ÐOUI—Ÿ<«áÓ” a'†I¡‹û4z?‹k¶¶ÙÉæÜÞö$­¸‡ÝO»y™s>¸\¾ÝW~éeýÕ!»ÿ0ßàõ¯íÿT->®ãδÙµ¹u%–+™s¾ºð¢¸<È[…-m„Б˜ö»Ø¦Ž 5Ú:¯©77}b¯HÛfPÛîJaè6b×B×Y/,ááÄŠm#ó\ßôûxéëà Æ—‡Ô++\Èáà2õ{¾/É{Ñ%® +´/é¸KN4Ä…ì—BaîÌV4K@J%Íô…?IWø¢K\ˆmD¹ôýõeVv]eó(„¬hLvÕ1Y©4¯ø H?9½ží÷…r¬P¤mjoÒ{)m+Ò6á�¥~¾Œë˶æø}¹¨ÉÛ-Ôúò"÷|ÛäôÔè[ Z]ÈÒÔ›-€ •R•­”Ö…¢M�™*k=rå—fÕ,óˆÓÐJÜö]ú“´t�^iF Ò+ñ [ú­+^Û-ù¶ +2œ¹�ÎtdÛK¦�,ÊÖMJé«ì\7­u×Õv/†A�Hì;SÓ›…3䓿¿§äÎð™äjU +±©•0 j²ì�ß—è2)FÌ!T~Þ�)‰ÚÈ£ÛèÅ’ó’H-–HMpíÞ°E¼mP¸Ç�|ù†èjù¦ïF³l†Czœ6¿Õ4~‚ÜO~ùô\j—\ŽŠ!§ò�2“�äÙ²Ùø|ëî¬ìõýú£ +endstream +endobj +186 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 185 0 R +/Resources 4 0 R +/Annots [ 187 0 R 188 0 R 189 0 R 190 0 R 191 0 R 192 0 R 193 0 R 194 0 R 195 0 R 196 0 R 197 0 R 198 0 R 199 0 R 200 0 R 201 0 R 202 0 R 203 0 R 204 0 R 205 0 R 206 0 R 207 0 R 208 0 R 209 0 R 210 0 R 211 0 R 212 0 R 213 0 R 214 0 R 215 0 R 216 0 R 217 0 R 218 0 R 219 0 R 220 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +187 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 76.423228 790.370079 504.679134 757.670079 ] +/BS << +/W 0 +>> +/Dest (worker-node-configuration-files) +>> +endobj +188 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.434505 782.420079 496.429134 767.420079 ] +/BS << +/W 0 +>> +/Dest (worker-node-configuration-files) +>> +endobj +189 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 739.670079 498.679134 716.270079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-kubelet-service-file-permissions-are-set-to-644-or-more-restrictive-automated) +>> +endobj +190 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.090267 719.270079 491.179134 704.270079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-kubelet-service-file-permissions-are-set-to-644-or-more-restrictive-automated) +>> +endobj +191 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 700.070079 498.679134 676.670079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-kubelet-service-file-ownership-is-set-to-rootroot-automated) +>> +endobj +192 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.090267 679.670079 491.179134 664.670079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-kubelet-service-file-ownership-is-set-to-rootroot-automated) +>> +endobj +193 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 660.470079 498.679134 637.070079 ] +/BS << +/W 0 +>> +/Dest (if-proxy-kubeconfig-file-exists-ensure-permissions-are-set-to-644-or-more-restrictive-automated) +>> +endobj +194 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.090267 640.070079 491.179134 625.070079 ] +/BS << +/W 0 +>> +/Dest (if-proxy-kubeconfig-file-exists-ensure-permissions-are-set-to-644-or-more-restrictive-automated) +>> +endobj +195 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 620.870079 498.679134 597.470079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-proxy-kubeconfig-file-ownership-is-set-to-rootroot-automated) +>> +endobj +196 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.090267 600.470079 491.179134 585.470079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-proxy-kubeconfig-file-ownership-is-set-to-rootroot-automated) +>> +endobj +197 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 581.270079 498.679134 557.870079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---kubeconfig-kubelet.conf-file-permissions-are-set-to-644-or-more-restrictive-automated) +>> +endobj +198 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.090267 560.870079 491.179134 545.870079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---kubeconfig-kubelet.conf-file-permissions-are-set-to-644-or-more-restrictive-automated) +>> +endobj +199 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 541.670079 498.679134 518.270079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---kubeconfig-kubelet.conf-file-ownership-is-set-to-rootroot-automated) +>> +endobj +200 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.090267 521.270079 491.179134 506.270079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---kubeconfig-kubelet.conf-file-ownership-is-set-to-rootroot-automated) +>> +endobj +201 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 502.070079 498.679134 478.670079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-certificate-authorities-file-permissions-are-set-to-644-or-more-restrictive-automated) +>> +endobj +202 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.090267 481.670079 491.179134 466.670079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-certificate-authorities-file-permissions-are-set-to-644-or-more-restrictive-automated) +>> +endobj +203 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 462.470079 498.679134 439.070079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-client-certificate-authorities-file-ownership-is-set-to-rootroot-automated) +>> +endobj +204 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.090267 442.070079 491.179134 427.070079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-client-certificate-authorities-file-ownership-is-set-to-rootroot-automated) +>> +endobj +205 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 422.870079 498.679134 399.470079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-kubelet---config-configuration-file-has-permissions-set-to-644-or-more-restrictive-automated) +>> +endobj +206 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.090267 402.470079 491.179134 387.470079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-kubelet---config-configuration-file-has-permissions-set-to-644-or-more-restrictive-automated) +>> +endobj +207 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 383.270079 498.679134 359.870079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-kubelet---config-configuration-file-ownership-is-set-to-rootroot-automated) +>> +endobj +208 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.090267 362.870079 491.179134 347.870079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-kubelet---config-configuration-file-ownership-is-set-to-rootroot-automated) +>> +endobj +209 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 76.423228 343.670079 504.679134 310.970079 ] +/BS << +/W 0 +>> +/Dest (kubelet) +>> +endobj +210 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 484.911067 335.720079 496.429134 320.720079 ] +/BS << +/W 0 +>> +/Dest (kubelet) +>> +endobj +211 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 292.970079 498.679134 269.570079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-anonymous-auth-argument-is-set-to-false-automated) +>> +endobj +212 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.090267 272.570079 491.179134 257.570079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-anonymous-auth-argument-is-set-to-false-automated) +>> +endobj +213 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 253.370079 498.679134 229.970079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---authorization-mode-argument-is-not-set-to-alwaysallow-automated-1) +>> +endobj +214 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.090267 232.970079 491.179134 217.970079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---authorization-mode-argument-is-not-set-to-alwaysallow-automated-1) +>> +endobj +215 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 213.770079 498.679134 190.370079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---client-ca-file-argument-is-set-as-appropriate-automated-1) +>> +endobj +216 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.090267 193.370079 491.179134 178.370079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---client-ca-file-argument-is-set-as-appropriate-automated-1) +>> +endobj +217 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 174.170079 498.679134 150.770079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---read-only-port-argument-is-set-to-0-automated) +>> +endobj +218 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.090267 168.770079 491.179134 153.770079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---read-only-port-argument-is-set-to-0-automated) +>> +endobj +219 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 134.570079 498.679134 111.170079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---streaming-connection-idle-timeout-argument-is-not-set-to-0-automated) +>> +endobj +220 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.090267 114.170079 491.179134 99.170079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---streaming-connection-idle-timeout-argument-is-not-set-to-0-automated) +>> +endobj +221 0 obj +<< +/Filter /FlateDecode +/Length 4001 +>> +stream +xœí\K�$· ¾÷¯èsËEê Ä@ÀFXä‰Ö�]Á¬;‡üýPÕz°ªTìÙéYøÒ³˜�*%RüHŠR=ÜÙò¿/ÿ—Й”r x¾|<ýr²&’埅cu²\þžå?ç¢)­}:cÈ3dçÏ%=$®ä'&§dÑËÓ鯿;ý<ïÊ�½±Î“Çó¯ï%KD]Îɳ$F‹Ya &Ft.³d0ɲ⨰ð¨ Á1‹³h‘wŠ2ÎY†|ŠO0Ùf$RxLö�@Ó’ÉÁS¶ +�G“³ ”v+ëbMŒÆ"ƬÀéˆ/D—‚‚§£llN4}”³‚¨‹Î°<HyHÆ1î^Ó'y¶x¡Æ“ x„ ašÉ@pÞ+ú€uRB«`ʺïˆ]^áqÞ°:ä}ÀeãCVÁ€ŒÏ!DSðÎ øˆš>>$›¬‚) 7cŠ +¦€Ù‡:júòlISÆÁGET0e0 ±§¢¦Oô†!§a³ ŒhÒ0MdŠ•µ$Ɖ’Ó%¢Ó0ÍÑDÖ&)˜zë9ar–Rôñ6sƤ +¦ìƒœ2!$S¶ ç̵<æ�)pFTx¼çœéSV0õ>›ìlÖò˜GâœY´VxÈqÎ$ξOäœ .h6 È2€‚©�–sf` i<�s¦çL¯ð$0ÎZôš>)qÎ,€Â“‘s&2Ç!DWãY�>LFôÑGˆ>Bô3…è<?½Ð= +ÝGˆ>Bô¢wºòuäW·3ˆæ7.Žè¢Ÿý ÑhYŽ£‡œ7kk +hbÌÔ¶'§<Œe +¡o3Ìy‚ÉÑF…'ñŸ}Ûâ�óäe+Ýj:—­kf²ŠÎ¡l]çl³¢s([׉BVt®ldEçà²a[§¬è€L@¬éÌI%z°IÓÙó¡K!i:£/QIÓ³ÉÙ¥¶ <塲՗°mçLyˆÙ4žd€\h[éSžˆÆûmKlÊ“¬AÀ5�S0ìÌývÄ”‡S)ådƒ¦sæØIȳí1O´%vEçXn¯QLAÑ9–Ûkˆ�#”Øá™MÑ9rÚãS†Máñ;�4�±ÄŽM¤éŒ;1"*¾99a@‹Š¯F*±c94žÀ±ã# _Œƒa%Tâ+Æ;|IÓ9•„­×tæ•“ï[ÎSž2ÕD ^Ñ9q%à($¯èœ,Ç–ÉIáq%v¬Eç;Ž£UÑ9ÇŽõšÎ<árŽN éì9vb@§éŒ;Á[§øj"Žž³ÝÖW·ÛÉb¢ûÉP¦‰Ù~òŠ�æìÏÙPN‘Ä3 £œôU=�Jþš,…Wôm��xbÅI}'è«:[ÐE…œ"»Ñž:¯êìÌ%jGA£—.‘g‘^QýuUß úªÎtQ! ‰+*ʾaj`I£…¥æö¾¬q h�C­z}å2ÑÄ]�½Áp‰CÚÕÙÙå)ù‡¼Æ¡V½‚.\ZH\QW8¸D`ôÑ ‰ÂRs{ß±¡,Fóñ t�CqeE�Ä#D!úÑ]ˆ¾pCy¢+ÍW£“=Bô¢�ýL!:ÅO/t�B÷¢�}„è]…îêQoàE-@ÙlYí(gôbøcÍ|D—í·”E+wf˜Xñ´]^gLek—­¼#^¦§lí²…rĬ‰)ÑòTõ!O0!EGQá‰eË‚¢KO2ȸ/Oàñ$4>AZž,>âÉÖ@r¸lMòã"ÿÇ<ÎrPÛ˜C3{Œ6)–f¯ô†}ìºÃvÌTž°E°Š­Ù3Èppư5öv?Fx‰Ø�Id¨Ðv/2HnšrîÆü2¹ôõÛS¾¾‚’ÏÁ³­�ÝŒÇe9Þmv€ç·O_~÷Ý_¾ýÇßx o?œþù•µŒÙõ7¾ù×ùí7§?¼eŸ*"px†ˆt‡ˆÌiýóŠ(Ošãçá�Ãä"ò"¢Üwˆ@ gÁýÃ"8/=îgŠp¡¾›–ITnƹ3q,B9r‹�¿ÿñ÷_ÿéÛ�â_ÿòqP¾|wŠ(wÏn¡q¯ˆt;øîýíà»SDr·ƒï^ávðô·MÆï¹çlË(·Ý6¼|™Çñ4Ö"æc€:žõÑò„w�ûÊ œ�÷ù×Uå/WL¶ÜèIÖŸSàßrÌ×1]¯·Áø¯Ç+Zåá¦Ë/ùk[‚ÊÃ×1\�Ëu|ÿÂWWúÂç*χz½µÉU^½VÚÝŠ¬…^ô{Wuµµ?7ôÃËà/—ëB÷¢_?¦*§N?s»–·‡a‹--�ªŽ­ÏEc/2/j¿Èk­U¿;ŒÞ½2FUG‰ÅbûKÅ/Öëtµýb»PÛÖ±ÞŽY²—>ÜoŽUØÚô•°Êå‘ «^«B[t­1´Ä ;.˜”ëYÄU|âèï“qp#†g¸{úf?W1Á«Oè6^Ë¡nÃË+Û0 û¸‘‹«¿_u¾ÒàÚgëùûa­Ób³Âû®êi1¥Ú1líˆöZ�Ïor´þ"baáŸØm¡ÑWÜcó:±æËãVºŸà°ó«åÆXç› r[‹«Åoœ÷~`Øíêꘔ¾¤­)¯í±›/Š,ÅGw¾¬æÉòöêÚÆ[Ÿ^úy¡ÿ¼’”åþm?ÀWöYÃlqÚø^*NaÍûâ¼r#÷Ê<Óê¤æg7ðŽ[[¾FåmØ5L­k‹Î>¿!/jÀÅwòÕ矋“?ÀÞ¿q%†–ùˆF~möó;1gÂ31ýíj„­�_ ;Ê·jš‚]x�øº…OŸ3]õéæ“šµÛ7 ·öX×5>·~[=*]Ô½KÛwu\5ß�9YµcÜÚqñ©‹è£ùWxa~kVçÀ`}ôìÆVK ¶Àº +™ Ä¶ ’V�4±ž‡ªôjҌĜêêT(+•¾×ëe? OéšjFÇëàë׌³Üj–‘=óTá�Í ½²ÛêÞ*´¶Ò½ FÍ�,`’É_V‘¿[�nqh™[ØgùÛÎÿ½ÎŽÍ9Z”v{ÉÌ×l„DsÇxÒn•¶OxþxìêjwYQµ�¾› $}Èo|ˆ‚=êãå6Š~· +ÛÚ(¾>æëí¬J-s¿Šļ[=lÇ×’Ù'æm‡j5Û$OT“ç¶zŸW„­�¶#W’GyÈ9Í^Émíõ:ÕEy(Ûê8¼pòžIjiß8_U§“eÅlûJ”³Òd+àYÉ¿m}n‚¦É$ݰaVÊß –i qkÛ;mf© ”È]ª×\6m>¤.màÚ@3ŸQ2ˆbõÙ©}[&lË€†Èe ¿-0w‹ú6Uƒ¼[{BwÅæ%bÃtVÞB³Þh÷ "±õh¹7Ÿy6áÕž‰åº°ÜP?ýü–@ÌÞÄåžyq0ä2O©7Í«ôòp‚Sn²,¯¥Öý¿âvÑÓÔ×Ê,—«O-æÍ“LѪgûÞsÏLåÚ{Û×ò+ÿüp…­Ð¼"øfk9¨ë¼ížjïŸL}/¼ÂÙÇÐï·ìnýr¢Ä¡È,ŒŽ³åÃI—�B2q¡Ÿ)Ö.$h8¹Å²î|Ðtùöå/�«~ÓšòáÆ„çë·2ÅIå¿ÞÇúxº>P~Ø ]�˜ÌÂhK~b˜³Á ™S?<“\ˆõÐö¾Ê;cÚåä|y½~n×�ÿÇ<ßðïNxþs{Šñ:�ƒíÙzn]‘åLà„7ɹ{Ø" HûƒìÒà¥æ }ùGs;{ãt=ƒº~UiØP�¡»nù~ð° )ÄËÆŠ½�¹›1a_O}œ-_>w‡*'r8|šÆ5?¦ä³è’Ï +ë˜Òù*‚hÈ'²S>óÐl¥fqH)¤›¾è� +_d‰QF”S?®á˜fe×�¶ŒB° �Ñ­:F'…æ•>¥_^wã^U- +µ§öN}’Ô>°Bí oNõËiXŸö9Ç/«nÁ;,Ôûò"ö|/rFhŒÒW'ÒG5�f•�¤Pl´•Ð6QôtÁ4Ûh½ÇØt +µY3Ë2â4µRì5Å þ$-M•nD’¨„oé·Íx½Zò½"éÎqŒÎÎ^K¦ -ÈÖ�ŠƒÓ7Ú^6®e·Ùö,†�C‘0*S;šÑŽóEùï%±3}úqÆµÚ +q©oaØò a=øs.åNùîÐÙ—OWSÄ$öF>¹�¾Y²ßi›%RÃÁ‹vo£c;Pá‰/äÛDWõ5›ƒfÙN‡ôi8|�bþ¬ª7¾¾}´ìõÓX–Š”Sù‹Må=6íÁ>ä»m¯ïÿƒiý¢ +endstream +endobj +222 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 221 0 R +/Resources 4 0 R +/Annots [ 223 0 R 224 0 R 225 0 R 226 0 R 227 0 R 228 0 R 229 0 R 230 0 R 231 0 R 232 0 R 233 0 R 234 0 R 235 0 R 236 0 R 237 0 R 238 0 R 239 0 R 240 0 R 241 0 R 242 0 R 243 0 R 244 0 R 245 0 R 246 0 R 247 0 R 248 0 R 249 0 R 250 0 R 251 0 R 252 0 R 253 0 R 254 0 R 255 0 R 256 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +223 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 790.370079 498.679134 766.970079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---protect-kernel-defaults-argument-is-set-to-true-automated) +>> +endobj +224 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.090267 769.970079 491.179134 754.970079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---protect-kernel-defaults-argument-is-set-to-true-automated) +>> +endobj +225 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 750.770079 498.679134 727.370079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---make-iptables-util-chains-argument-is-set-to-true-automated) +>> +endobj +226 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.090267 730.370079 491.179134 715.370079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---make-iptables-util-chains-argument-is-set-to-true-automated) +>> +endobj +227 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 711.170079 498.679134 687.770079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---hostname-override-argument-is-not-set-manual) +>> +endobj +228 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.090267 705.770079 491.179134 690.770079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---hostname-override-argument-is-not-set-manual) +>> +endobj +229 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 671.570079 498.679134 648.170079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---event-qps-argument-is-set-to-0-or-a-level-which-ensures-appropriate-event-capture-automated) +>> +endobj +230 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.090267 651.170079 491.179134 636.170079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---event-qps-argument-is-set-to-0-or-a-level-which-ensures-appropriate-event-capture-automated) +>> +endobj +231 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 631.970079 498.679134 608.570079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---tls-cert-file-and---tls-private-key-file-arguments-are-set-as-appropriate-automated-1) +>> +endobj +232 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.090267 611.570079 491.179134 596.570079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---tls-cert-file-and---tls-private-key-file-arguments-are-set-as-appropriate-automated-1) +>> +endobj +233 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 592.370079 498.679134 568.970079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---rotate-certificates-argument-is-not-set-to-false-automated) +>> +endobj +234 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.090267 571.970079 491.179134 556.970079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the---rotate-certificates-argument-is-not-set-to-false-automated) +>> +endobj +235 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 552.770079 498.679134 529.370079 ] +/BS << +/W 0 +>> +/Dest (verify-that-the-rotatekubeletservercertificate-argument-is-set-to-true-automated) +>> +endobj +236 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.090267 532.370079 491.179134 517.370079 ] +/BS << +/W 0 +>> +/Dest (verify-that-the-rotatekubeletservercertificate-argument-is-set-to-true-automated) +>> +endobj +237 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 513.170079 498.679134 489.770079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-kubelet-only-makes-use-of-strong-cryptographic-ciphers-automated) +>> +endobj +238 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.090267 492.770079 491.179134 477.770079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-kubelet-only-makes-use-of-strong-cryptographic-ciphers-automated) +>> +endobj +239 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 76.423228 473.570079 504.679134 440.870079 ] +/BS << +/W 0 +>> +/Dest (rbac-and-service-accounts) +>> +endobj +240 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 478.154476 465.620079 496.429134 450.620079 ] +/BS << +/W 0 +>> +/Dest (rbac-and-service-accounts) +>> +endobj +241 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 422.870079 498.679134 399.470079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-cluster-admin-role-is-only-used-where-required-manual) +>> +endobj +242 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.090267 402.470079 491.179134 387.470079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-cluster-admin-role-is-only-used-where-required-manual) +>> +endobj +243 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 383.270079 498.679134 359.870079 ] +/BS << +/W 0 +>> +/Dest (minimize-access-to-secrets-manual) +>> +endobj +244 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.090267 377.870079 491.179134 362.870079 ] +/BS << +/W 0 +>> +/Dest (minimize-access-to-secrets-manual) +>> +endobj +245 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 343.670079 498.679134 320.270079 ] +/BS << +/W 0 +>> +/Dest (minimize-wildcard-use-in-roles-and-clusterroles-manual) +>> +endobj +246 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.090267 338.270079 491.179134 323.270079 ] +/BS << +/W 0 +>> +/Dest (minimize-wildcard-use-in-roles-and-clusterroles-manual) +>> +endobj +247 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 304.070079 498.679134 280.670079 ] +/BS << +/W 0 +>> +/Dest (minimize-access-to-create-pods-manual) +>> +endobj +248 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.090267 298.670079 491.179134 283.670079 ] +/BS << +/W 0 +>> +/Dest (minimize-access-to-create-pods-manual) +>> +endobj +249 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 264.470079 498.679134 241.070079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-default-service-accounts-are-not-actively-used.-automated) +>> +endobj +250 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.090267 244.070079 491.179134 229.070079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-default-service-accounts-are-not-actively-used.-automated) +>> +endobj +251 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 224.870079 498.679134 201.470079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-service-account-tokens-are-only-mounted-where-necessary-manual) +>> +endobj +252 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.090267 204.470079 491.179134 189.470079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-service-account-tokens-are-only-mounted-where-necessary-manual) +>> +endobj +253 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 76.423228 185.270079 504.679134 152.570079 ] +/BS << +/W 0 +>> +/Dest (pod-security-policies) +>> +endobj +254 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 478.622493 177.320079 496.429134 162.320079 ] +/BS << +/W 0 +>> +/Dest (pod-security-policies) +>> +endobj +255 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 134.570079 498.679134 111.170079 ] +/BS << +/W 0 +>> +/Dest (minimize-the-admission-of-privileged-containers-manual) +>> +endobj +256 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.090267 129.170079 491.179134 114.170079 ] +/BS << +/W 0 +>> +/Dest (minimize-the-admission-of-privileged-containers-manual) +>> +endobj +257 0 obj +<< +/Filter /FlateDecode +/Length 3764 +>> +stream +xœí]m‹$·þ>¿b>,K¥*½€1Ä�l6y%ö&>›°k8çCþ~J=z)u«Õ³»w‡gí¹é~¦ZUªGU%iz{ÍYóŸþ' Q!Dïð|y:½?iåIóÏ"Ñ�,Ï/ùŸ1^¥«m8£‹ +#DcÏOwA¹+üÈp8€E+�§¿|vúyÜ”9[¥�%‹ç_~�"•71³/¸[è5ƉˆSÞ£1n_$‚ +š lj÷ +ì‹�*Y31ÆÍ� ~&ãTÔ‰&2*ZG0³‚ŠÎRÔ‹*Fí(LdxXiã=ÌìA¯4¢�: ñÞ7áÓPT:†3{)ã„Qã�b}ÚM(å.)üۙ=Á*ÐiÎd¢‹àfœFRàŒµ{@! žpʶ(kˆ‡üDÆXÅæ��Ø&*ë¢ÓNHÙ蜟p +Ö(ëqf�õ +I=áÐ*ô>ø §€Q‡:Îì!RdÙ“N™E~Â)“©ˆG*ÎìñV1¥`fœú¨3fœRÉ˳$Ɖ’Ó%¢™q½òlM˜pjµå„ÉYjb�Õ‘3&9˜pÊc�S&¸0á”=Ã93úY³À‡ä8#Nd¬åœiCœpjmTÑè8Ëc‰sf²z"C†s&qö�ÉxΙ`Ü̇ùƒ0áÔzÍ9Ó±‡f2Žs¦åL?‘  ŒÖhgö„À93Í&29g"³±/ƒZsÎ4\Uf2ŽsfðzÂ)àœIÞO8EžI€ƒ`görÎLl"c5çLý„S´Žs&jœÙƒ ¬ç +>á1pÎ \Z&2„œ3 pf�Óœ39»N8EçTª¸aÍižj ¦gεæ4‹ “A/3¾Y)Mcéë$ò—O_<ðÔàüãNï>[¦“Îó´D±ÙÈK×)$—¶buÃy²ÈC¥â®áœ[;¿öL^MIwˆÆ8ÎÌwtà}è8ÕùÐÙ8öáz‹E�/öXB:l±tÒ4”¾e‹Åñh‚AåxWaœ‹ É¡ÃוÇ9jJº‹H4Öê€ÀEÍHnë‘PÜU¿$ímåñšZ+U£_Œ]g<�vOà]帨Bc‡‚l†îpßZ©…§Æþ¾ô<àØó�ë€À»!ãm*ÏŠØá$nSy¼öCü¾ç!×�‹!-4vhǃÙáAàµ÷B£ðÔØß¯Øb½yÚ ÝýPì¼(˜¸‡è=Dï!º Ñn±t!ÚYÞõÞ ztÑ{ˆÞCô#…è8Ÿ?ÑÝ Ý{ˆÞCô¢¯šèÊ»,Ó A5DÅ=œmë®ÛJÙÃE;Û-qÑî’ÝÛÀÌ·<¢²ÛžtºKlº=àÉ)°ÅÂÿð²~¾Åâ�[,ޓƒ-¶E¹ƒ-ü±Ó�@> Zú0ð(;òa00öáz‹E�ÃK'ýò-–�î]T�w& 4\$‡_WžÀCOà]帨õ  Å]å ^~—/ñÐZiƒ®õHØ×Ð.ã ¼«<5ChìP'Û†¡ƒ;\·V𯿩±¿{»%Ù¾ç!×�wC&*¿©<+`‡�<„Må Á y0;<˜ž‡\.‡tÓØ¡f‡µ÷RcóÔØß¯Øb½yÚ ÝýP”¸ŸÜhvÑ{ˆÞCô¥[,]ˆJKÂø+òÞã÷½‡è=D?FˆŽCñùݽн‡è=Dï!úª‰®üTëÄ×ýo[wÝVÊ.ÞÚÙn±ˆ‹Òrsîè–—ìâŽ�™ b[ú�e îõìËXù#]ëía¸Ø°FÁh{ “¦¡ôîöÀûÁG_¿9Åë/bdzcÿЖ��Èm³¿ðüæéôÅwßýùÛ¿ÿ•;òæÝé_jm�_Ä/÷Õ?Ïo¾9ýþ +x® +ÇCò㪀tWÎ *ü+Tp�ãÇUa5'ÎT„W¨ðö&º_¡SÌ|dœo¡ûFÆå'8VÂ,ƒ�ž£Žc¢M¿¨›”üí¿ûú�ߔė÷ƒümÁ÷ +Žn ¾U¬] "닚�]õöåýð\�o‰�W¨)ã~8+W¥_/'s.Ý>|ìªËËû‘nÊT½Šq ÷Î|×£\š”FF�Ûü2YG~×vù_ãE³ò{9ÿ¿‡« y>~ÛΑmE/dÝõµõ­å:>Ƙ¯qí³¥=z¹]¢kËu­ÝEo‘{hö¤¶–ã"ƒ×6vm~›õ';r5û1=j£92ùŽl¶®ýXìuÍ^`ûÀg½&Û¢…\ñ™köh¶’\hýY®Ál{¸úX_¦¶ò$3t¶nxv¿ež?6½»©/ÝÚ—¿2—1}ƒ;åÒÿ–¹œùÌÚwÕFµmi'éúáÿ§€¼ žs>n³ÞªóÝõµ´óp�±ÅÇI6^ß™p鲯—6Š/«½S_ºµ/? G6=FgÎQüu9*5gyùçó–üb‹ÌÕ?Åç¾H+á¹/>­ñº¶ÁšëX´ çv-¥1ôZî«}h:ß›IŒéÜ>Íýè×~|9'éñ(µþí§ÅIщ2Foôûr>ÄXGŠGu÷ò‰ùõþ[ä…m)_}8­½è×þ»‰‹¶3&í”.m­î 1eR{Pämqlî8º�Ž›6øÀåä04n[m¹ü޹ñ�=ârµÍ~°eûõhjÆeã/b•ÊZÚ+:l~eç,Îú€|yä9»»zqº[¥>×orvRûy0Û«¢´ûjñê�¶d9c~¸5²­ýóì™Î0ÊŽ6† + e¹‘´¤%Ž�KËE¨ëT¯:{Ic³Žz²bêµM¾�¦:ß ×ÜYrc ëuÈAgJdʦÊüµæ[h#£êº¹Má�[Žß¶Q»øÁ[&~­Ù­Dõïæ¬4ŒŽ£½ÀÒ钒ב�D-²7N:ú6HðÝŒ N,Œö£(¬jRU–GüÃ6ÇB™í¬¼\"°‹ +Ó¼.WÒ{9j{”O)íâ<|eéË<*H·h¹øxÆ5u"ºÕêr=kdˆ(¤ÛG]ÞÙ-ÈžØ2VÏj^2( ¼[¾¬<ý|‹Hê‡�VùåûÈ4˜A‘‰.ÐÎ’Y{ºÝÛLvÈ—_ä ŒÞÒ0&ÒZ6Ù\KZˆ¶X4‰á‘7€jé¥4…@WuÞ]“{ÂANRC;%NÈÃX&Ÿ®}Z Ó·«¤å³ïÿþD�S‹0;F§G3Z\« Aù?“Wl� Px2‹gÍyçÒåéÚï«T~à¶VéÑÐÏ×§q‹“,ýâédbúº5ýðPt=b˜•Ñ~dš£ÂŒX¾Ë>„˜um ëwỜŒM÷b¬$-•›êM¬�3˜�JoÒõT.³×p…r–ýUñä+�Ù©÷éÖ�+Ì$PP6Ÿ¹j +¹b3ƒ­A”²­Ává!l¬ mA-Ô5˜c0Y¨‡±rn¡™.]gýE¼ s^N¬Ö®ÑÇ! +¦bP¼ ºbV+JE²‚•§”îƒÙ€ŸëÒ42™õsÁ”§�¦�Ø|Tåb‘@—ÓP.·F•)_¥B»4Ï7SÚP·¡:~€->Ê(§‰Gqj´-‡=œî¸¨\ë Æ lÀË)å� üx"?�¦–+4•¡'A+Ú­pÐm¼4Ô‡â*Í‚¹³Ãôï5UPESæYÒ7]¦4 Ïš’›î�$qW³Ž<�žHo6(·��3ðO§ò)éVéê±.ørïAiÚÕäÑÃ¦Žº +§VüSs¥u1‚Õ5˜êP~ìàf'ÕPåÁ^”9#†;Õvìjî|”°¯Œ‡µ­81æ xY +®á4ôCQÒ`еÚ5el†qRhpK£� \¢µf'c=lA6ª¸—ÓO§¥Ì�%ˆé>Z›)ÔM³Ìù¿,ó ¿þ}ÂóŸÊb×:ºf ¨¹µƒe%°…ÂC V°†�EÚo° M–Êh¨u@äkl—ë–Ø‹¤©ÔÔO%H͇†:tÓ_(hž¡ xYy±Nd^ËM+Ø×S[:§Óß48וNdwø4´Ïl+ÉgÑ$Ÿ%ÑVÒùSq!ŸÈFùT(ŒÍ²ÎÌ4 ¥’êúd?J*lÒ%NÄ4"�Úö¶2+›.ØÒ !‚F\Œ¦k�T;{F¿8¼^Í{6Ù•HhMí}”híXBk£v9uýi­9vùs%x›‡j[VÄž­“œmj�݉£ í²,@R)¬SZ +EMŒé‚Õ}±ÉåËŠ[–‡¡—|�S4ô'éi’¬T'’dÅmdS»¥âÕÙ’­ ’ÃÙ·Þé&Yç’a€9yuE±IÚ‚muc¯»TÛ³è6C\›™êvm$_”ÿ^;Ã[×FRÝVˆ u C§?R`¼{Žiºœã’þ8y boäÙ×Ì7K¶["e³Djb:xÑnµ7<ÞvLxäâñ¢©|WýÎeQ»ô<ìÞœ>¾ÑÐ*›Õ`Ùª§>-)†ô'utà �Æë�ýÒí¶×÷ÿ"§¿ +endstream +endobj +258 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 257 0 R +/Resources 4 0 R +/Annots [ 259 0 R 260 0 R 261 0 R 262 0 R 263 0 R 264 0 R 265 0 R 266 0 R 267 0 R 268 0 R 269 0 R 270 0 R 271 0 R 272 0 R 273 0 R 274 0 R 275 0 R 276 0 R 277 0 R 278 0 R 279 0 R 280 0 R 281 0 R 282 0 R 283 0 R 284 0 R 285 0 R 286 0 R 287 0 R 288 0 R 289 0 R 290 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +259 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 790.370079 498.679134 766.970079 ] +/BS << +/W 0 +>> +/Dest (minimize-the-admission-of-containers-wishing-to-share-the-host-process-id-namespace-automated) +>> +endobj +260 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.090267 769.970079 491.179134 754.970079 ] +/BS << +/W 0 +>> +/Dest (minimize-the-admission-of-containers-wishing-to-share-the-host-process-id-namespace-automated) +>> +endobj +261 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 750.770079 498.679134 727.370079 ] +/BS << +/W 0 +>> +/Dest (minimize-the-admission-of-containers-wishing-to-share-the-host-ipc-namespace-automated) +>> +endobj +262 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.090267 730.370079 491.179134 715.370079 ] +/BS << +/W 0 +>> +/Dest (minimize-the-admission-of-containers-wishing-to-share-the-host-ipc-namespace-automated) +>> +endobj +263 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 711.170079 498.679134 687.770079 ] +/BS << +/W 0 +>> +/Dest (minimize-the-admission-of-containers-wishing-to-share-the-host-network-namespace-automated) +>> +endobj +264 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.090267 690.770079 491.179134 675.770079 ] +/BS << +/W 0 +>> +/Dest (minimize-the-admission-of-containers-wishing-to-share-the-host-network-namespace-automated) +>> +endobj +265 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 671.570079 498.679134 648.170079 ] +/BS << +/W 0 +>> +/Dest (minimize-the-admission-of-containers-with-allowprivilegeescalation-automated) +>> +endobj +266 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.090267 651.170079 491.179134 636.170079 ] +/BS << +/W 0 +>> +/Dest (minimize-the-admission-of-containers-with-allowprivilegeescalation-automated) +>> +endobj +267 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 631.970079 498.679134 608.570079 ] +/BS << +/W 0 +>> +/Dest (minimize-the-admission-of-root-containers-manual) +>> +endobj +268 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.090267 626.570079 491.179134 611.570079 ] +/BS << +/W 0 +>> +/Dest (minimize-the-admission-of-root-containers-manual) +>> +endobj +269 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 592.370079 498.679134 568.970079 ] +/BS << +/W 0 +>> +/Dest (minimize-the-admission-of-containers-with-the-net_raw-capability-manual) +>> +endobj +270 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.090267 571.970079 491.179134 556.970079 ] +/BS << +/W 0 +>> +/Dest (minimize-the-admission-of-containers-with-the-net_raw-capability-manual) +>> +endobj +271 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 552.770079 498.679134 529.370079 ] +/BS << +/W 0 +>> +/Dest (minimize-the-admission-of-containers-with-added-capabilities-manual) +>> +endobj +272 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.090267 532.370079 491.179134 517.370079 ] +/BS << +/W 0 +>> +/Dest (minimize-the-admission-of-containers-with-added-capabilities-manual) +>> +endobj +273 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 513.170079 498.679134 489.770079 ] +/BS << +/W 0 +>> +/Dest (minimize-the-admission-of-containers-with-capabilities-assigned-manual) +>> +endobj +274 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.090267 492.770079 491.179134 477.770079 ] +/BS << +/W 0 +>> +/Dest (minimize-the-admission-of-containers-with-capabilities-assigned-manual) +>> +endobj +275 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 76.423228 473.570079 504.679134 440.870079 ] +/BS << +/W 0 +>> +/Dest (network-policies-and-cni) +>> +endobj +276 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 478.070980 465.620079 496.429134 450.620079 ] +/BS << +/W 0 +>> +/Dest (network-policies-and-cni) +>> +endobj +277 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 422.870079 498.679134 399.470079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-cni-in-use-supports-network-policies-manual) +>> +endobj +278 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.090267 417.470079 491.179134 402.470079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-cni-in-use-supports-network-policies-manual) +>> +endobj +279 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 383.270079 498.679134 359.870079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-all-namespaces-have-network-policies-defined-automated) +>> +endobj +280 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.090267 362.870079 491.179134 347.870079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-all-namespaces-have-network-policies-defined-automated) +>> +endobj +281 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 76.423228 343.670079 504.679134 310.970079 ] +/BS << +/W 0 +>> +/Dest (secrets-management) +>> +endobj +282 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 478.118587 335.720079 496.429134 320.720079 ] +/BS << +/W 0 +>> +/Dest (secrets-management) +>> +endobj +283 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 292.970079 498.679134 269.570079 ] +/BS << +/W 0 +>> +/Dest (prefer-using-secrets-as-files-over-secrets-as-environment-variables-manual) +>> +endobj +284 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.090267 272.570079 491.179134 257.570079 ] +/BS << +/W 0 +>> +/Dest (prefer-using-secrets-as-files-over-secrets-as-environment-variables-manual) +>> +endobj +285 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 253.370079 498.679134 229.970079 ] +/BS << +/W 0 +>> +/Dest (consider-external-secret-storage-manual) +>> +endobj +286 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.090267 247.970079 491.179134 232.970079 ] +/BS << +/W 0 +>> +/Dest (consider-external-secret-storage-manual) +>> +endobj +287 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 76.423228 213.770079 504.679134 181.070079 ] +/BS << +/W 0 +>> +/Dest (extensible-admission-control) +>> +endobj +288 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 478.131038 205.820079 496.429134 190.820079 ] +/BS << +/W 0 +>> +/Dest (extensible-admission-control) +>> +endobj +289 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 163.070079 498.679134 139.670079 ] +/BS << +/W 0 +>> +/Dest (configure-image-provenance-using-imagepolicywebhook-admission-controller-manual) +>> +endobj +290 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.090267 142.670079 491.179134 127.670079 ] +/BS << +/W 0 +>> +/Dest (configure-image-provenance-using-imagepolicywebhook-admission-controller-manual) +>> +endobj +291 0 obj +<< +/Filter /FlateDecode +/Length 2232 +>> +stream +xœíZÝ‹$7¯¿¢žq,ù–…r �†$wÇ=ì» GïÁ&ù÷#»,YÕU]½³»yÊÌÐÓå_É’¬/«\³¥ßÏ�þd&ç’¢Ÿ—·Ó»Éš,ý4ŠÍ Ýþ�>ú7&4ņ8ÇlbÁn~;�%®ÄÔe_Ž '7à3ÑðOŸMÿ×SbÔ”§d \Ã1�°ã÷ È\&ƒMc…—ÁDÄS+ݺè¥(¼ZÅ“×8Xê!qƒ&Í�,«a§ãß>cýIóþâ é¸YËfåñ`5Ï ùœ�Ï ùIò8ñžÚ­ÞJÓçt|NÇ¿}:>¥]HÌÄa KNÇ�ƒ‹jå�ïáŠ'ä!3˜�±¶ôóo¯74�(Îh²qèÞ MðÆÑ³sˆ'4Ñ øŒ&—3„3}(Ú¼MPÎôIÙxŒèÓ MöÆû€åLŸb��Þy<£‰Æg犽Mƒ”éÁ¢w'ú Í& Y;œÐ€7ÁÛàNôA´&„ò™>MH9b>¡q¤3]¦3}¥PþŸÄz*h.¤tâS µVø gú„hbr9žÄ¹\rö6M6éNÌcò&݉yÌëyÑYÌcŽ&݉yÊQ“îÄ<Êù;1ï¨rå;1OK2ùNÌ; bw'æÒÎuó½U®@5ÂÚ”Éδ‰ÙvÔv•Kš<“¯ÇsöÝÁ­¯&ˆýø/ÎÑ%*wž22Vq`~x;}ñ¯|ùÕ?¿¥µ<¼™þóÂZðô!‘à^þw~øfúú�$œÈ(«ˆB¢´®E¢xµÈ0UÄ÷ßÿøí¿þ´"©õø‹EPFá_+ÂAõôSEÜóuíüUw|�éC©¯(ÀœµHßž°ý›rÜ“þÍzßÑ'à:ö }bÿ®´qÕ‘º›UÊ!Oý ï’ÉDŸìñB•"íÛw…bW"¯Š„´^×{M1×sëªDSº~Ç•Ž•os*^Ôܰ.$ðbS§ zAƒ¶�+Ïn 6R½Ïú5¹Ì3tã(>¡_‹®¯N –´Áª�Úß×ËòØW²ìãúÕèa•-Ž\Îä’@j ´Ü�oB÷M·AÓ#;´µV{>ûo0¦é:7ÝÙvv]S»ßmK��{õºûoQv�Ã?,§òjtýºÉxýã‹Ø€ÝïU‡ÒuÍ«æÅ¾j|—­EÇÆçÔ¦îÚ¦«Üu]·§8ìú‘¾ŒÎà¹/» ô}-®¯é ¯|$>îº2 F¥s·gx<ö‡[^x±·£–¤òÎ�Ü<”ãU.u^o³ÚØs›u}ÜU<ß‹¥÷É_‰çÇa£÷ŠGÃ9>uÎq}Ƀ¾Ú».ì‡ÀvIŠvÙl0¼�QÿkçÎäTÈü3õ‰Ú�[¿CíÎ{�T§âLjMÝ›¨·¦”zý㎦K¯-!œlrÄRºìºÛ%÷¸6¸¬¡ÜÌTú¾Z]Yzhq ‡îŠGe¦zïõJW+Á&-Þ¬î®x3sTå¨_‹»a¸­î³ÍµË› Þº”>^—�²–áu »öãÝr}P¤M—`,5ŸÔÒ¤8Gêÿ>Ó~LÚÅŒì'h–…ùÆÔöNø�Põ×Äô¸å dßß!«A§_{!zÒ§F¤÷±&¬WgäÁ€é9?ÖænÓã¾'\Á~i…—&l™ÀÕc™+JWû²õ²sû%^M�xš[K ò¨ý*ø¤™öp]}=¼[arBÈÆõQUè�°8zM;މwapV�aZ%nÀ”ƒ…iQ.åÙ¥‚¢º6(÷3-&åÎ3p™H¬»F/‡(‚`ÈÖE+˜SJASŠC¼øéªÇb;ðsˬ=9Sî+¯Ñód3’ºÂtÐ2ÒunA<•„*�©…-?T¡^Ï6ncÍF¥2qQC°Ž/·p¬`_Û¬âwà2Õº³ƒ/SHÔaÔ +8ô4è_�³ñ2ДÙT”šŒÑó¯×R­•§]Ô£D`z4„ÔÜxk$�G©:þÈàÓ Uæª n‡ïlèkÑj±ØU&Sx*¬^-RR<¶0HÔ \KÛGj¥-+Aâ$”/xè$U)ØYXîAø8Jí¼h8‰Ç!zYÄØ¢Šy—¶±ùk¸†~f!^�B¯„)p(FEaÀ£Œ^ÌÙ*Õ J‘Ë‘dG;î2ý:µm]ÀR_¡9Šéí™=ÌÍ7ôùßäçïøˆiÝÇÑJµ@©­XïdˆŽ]x®: JÚ(½*û†Úï]åÈPQ)í‚^4* «¨¼cÔµaÜeÏqspò /§rÏI“3Rc´~3Ð1ªÐ<¦u‚ …zÆ6By£�rA˜eL8&Ö)öil–¶â|h¥$=Å@Õ–Ú+bÄ ½w´•/ïxÒ-9i€‚ç4Vg¥ô’ù‹z¶ ~P:Æö²ýV6ï¶³Z†ŠÄÑ™Ú1-ì(?¨þ}Hîž QmŽB ˆ¥�ÚCrèæRÛ�#ÕZ=5û¬ÎFž<çü°d$‡%Z¹ƒÚ�M@ñvC… Ý(÷o(Vý%û�iÅ.éi¸ùvëø}‡3®ÿçA;’aª�Š¡d_ÿy!S’Höä]—Û}ýð'&NK¸ +endstream +endobj +292 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 291 0 R +/Resources 4 0 R +/Annots [ 293 0 R 294 0 R 295 0 R 296 0 R 297 0 R 298 0 R 299 0 R 300 0 R 301 0 R 302 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +293 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 76.423228 790.370079 504.679134 757.670079 ] +/BS << +/W 0 +>> +/Dest (general-policies) +>> +endobj +294 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.986019 782.420079 496.429134 767.420079 ] +/BS << +/W 0 +>> +/Dest (general-policies) +>> +endobj +295 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 739.670079 498.679134 716.270079 ] +/BS << +/W 0 +>> +/Dest (create-administrative-boundaries-between-resources-using-namespaces-manual) +>> +endobj +296 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.090267 719.270079 491.179134 704.270079 ] +/BS << +/W 0 +>> +/Dest (create-administrative-boundaries-between-resources-using-namespaces-manual) +>> +endobj +297 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 700.070079 498.679134 676.670079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-seccomp-profile-is-set-to-dockerdefault-in-your-pod-definitions-manual) +>> +endobj +298 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.090267 679.670079 491.179134 664.670079 ] +/BS << +/W 0 +>> +/Dest (ensure-that-the-seccomp-profile-is-set-to-dockerdefault-in-your-pod-definitions-manual) +>> +endobj +299 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 660.470079 498.679134 637.070079 ] +/BS << +/W 0 +>> +/Dest (apply-security-context-to-your-pods-and-containers-manual) +>> +endobj +300 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.090267 655.070079 491.179134 640.070079 ] +/BS << +/W 0 +>> +/Dest (apply-security-context-to-your-pods-and-containers-manual) +>> +endobj +301 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.673228 620.870079 498.679134 597.470079 ] +/BS << +/W 0 +>> +/Dest (the-default-namespace-should-not-be-used-automated) +>> +endobj +302 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 477.090267 615.470079 491.179134 600.470079 ] +/BS << +/W 0 +>> +/Dest (the-default-namespace-should-not-be-used-automated) +>> +endobj +303 0 obj +<< +/Filter /FlateDecode +/Length 4723 +>> +stream +xœÍ\ÛŽäH}¯¯¨g¤ñæý"!¤E$ ƒB<ÌÛ»B=H ü>'mgf¤}ìªê.ÓêérD:y"2ì²¾*ü|Ðø/9=¥”cp×ÛçË�5E¯ðo1ÌìoðýU+'¯sHþú¹lœbö&†ëëÿmåð×Ërùûx޾š)ç`´¿þã»ÂrvŠ)Få +ƒ¥´%,ï§�„ô„)æÌXPÃGgÜž¡†ËÉ3ÔpÆ$ÂJPú¨íž•¡†‰Ú1ÔÐÙGÂÒ +zh£åAåœ5„§ý`ôÀxFO!e“)/‚§£aStñVƳÐÅá‡ñ€ÞÆ”Èj5eu[e5ãyèbLt”]à|†&@ƒ¬ ©àÃãä²q L²“K.10)O.FË`Àd?¹�#ë4xF3 ° +ºxX ]V.åA›Ãk  0,°ºgX ­C´0,°€[§²fX`�·NéÀ°Àp¡¦bX`�¸6ǰÀrJ™a�æZ`'à ÐÅr� ,P×ú`XÀ®u)0,°À]ë´bXà€»ÖâLʃ.`†@ÇÉêd8à®Õ*2,pÀ],#ð^�‡�abe2))†¸k’r p×D¤Ê‹Ö eXà€»Æc +,sw�W†a�îgÃÊüQ´îBÃ`ü„Œjxà®¶ÈÔŒÜÕ&+†¸‹ºÁ3,@8LÃä·I+„.ååIå”xà.`É0,@žT’P^œHšaÀxR¨Cà.Ò{fX€»Ê[˰ w•CÙCyÐÅ&ðu xX¶dM£X�”R0pWix˜ñ€»JÅ̰ wKÚdXb!˜Ä° +N¨‚ Â�Ü”c BVà¡ä£¼0áØ3,ˆ +È¢<èâ¢cX€ÂzÊ6'†Ñ@k Âh  J†¨¦¬Q}ÓítA¸Ðý�ƒ.¨ɦ”�cX}À~ Ve¼`¦×”—ÀÓ‘aAŒnB*Ö °—š=ÃüTÊ%†P<íÄ ]°T MÉ 2g< ]Pd3,@¥ žÖ ’�.¨$“°Ë Ša24ö’05ã9Uö™‰aAra*¥"Ã,ì4�””] àŸ²Ùö °ùÁfÛʃ.Ö;†)™²ÝL R‚.F†ˆÍ²ßŒ ²‚.¨ød¦R&3,Œƒ§¬ö›Æ1,Àº,ûÍİ […ý&¶xdÝfÊ~32,Ⱥx”(”]P4e²n�IØo�/@“ÂBÙo&†(3°ßDEO[©ì7#mw}21p•i`X€ì7QÙ²½½ðúˆúŒ3SÙq&Ú1P€^�ÜJ[ +Ø‹liÏ@|ˉ6  &v–)ЮÒ*˜ZѶ�þ¢s;LXºO²E93Å2ÉŒeáPÝ·=Gf†-ý±|ùê’ïõû^^~2wÊêÐà {ƒ=ª{ý|Ñ8°.” · ¿ŽtÛéƒAŸçÄ…•>öM(°ŠŠßˆ£>èyJHø¯ûdžÉ×Y�óÃÆƒÌûu¤‹y r¶óãÂ�°ŸŠ(è–ùqÑbÔ[æçK¡¦¥nœ_ÙXîçý:ÒÅ<9Ûùqa¥7–ƒ.9ž-F½e~ß©ä»ñŸÇÊØÏûu¤‹y r¶óãÂ�ÐËÞ¼ä¨y~\´õ–ùÉ G-ôÀú³wé]ÎéúSØ9,뎉Ädösó‘A.çs¼ÞþŒôÝ|¸°:.òÍózXîŸh¥˜?ï̇ ;ÃÇ.âÝøØ­ô×1~0<é»ùqaÕ_\äý5èayüÅ!o±x½3.ì ï…¿Þ‹÷„¤¿Žñ�凑¾›VýÅE¾Ñ_ƒ–Ç_ò0‹×;óáÂÎò—ð×{ó—nyGúKÒ¥_x¾é»ùqaÕ_\äý5èayüÅ¡®`ñzg>\ØY>þúbùØ{ÿÞÛ{t!çïÕ5• Íwµ7i¹œ†QoÎÎÃìŽÑ‘e¿�¾Ÿ¶™—üÞÙ ­x-%课¾3;.ì$W _.WÞ;ÆJ– ú~~\ØÆ{\òû¼7hÅ+ÇÁ{<–ïÌŽ ;ÉÜÒ{_,sÞ;FN–ú~~\ØÆ{\òû¼7hÅëÈÁ{<–ïÌŽ ;ÉãÒ{_,�ÞòûÁ~󀾟¶ñ—ü>ï Zñªrð�å;³ãÂN²ºôÞ{²ú¾ öó��'£Údú¡€î\ V›týøùòÕŸ~ùõÏõ›«¾~|¹üù§J™€ß›R6üìƒþi¹{½KÙáWã7/4óèiã<~Žñ×ë•VŽãúWÈ2ul‡ë¹o—Ïåç9î»e¼VË_ëW9¯^»éêºÔ×ZÇÞV½Ê¹¹~üõC6+»Ñf;½qþƒ-Ëßoã½9[çä~¶hVuà§WSȶ<õUõ,vzYæ=Ûlµ«û¶ë\þöë¯üõ³ÿTæ´È(ÇÅ…7�q«oŠ_A3¹ëÝìV››EÎÌ/rr¿æ¬Ëm+¯]ôõi�‹´œïã2ÿ_|,OÎ6øÝ¯._}½®�Áf2Ùj•ç5_Íó*+I-�_朔¿þëòûÃEÕM=ˆ‘¦Þ­#­= V°ˆ®~(4-ϤaÁ…œ«×¬ÙX1¯Ls$ŸD€ñaRF‹°O[x#ǯžžÇ›e¼·uE‹HjNÛ•\W1[Á›Õ–1M_ßW²¿‰ˆ®èû|æqåï¹ÝâÖnîÓr­Ùî«<½ÎÏnætÿÚë8"sžŸ]ý\ý.øÕuL¥Í¶¨v¨v¾õ¸¡×“v¯còz]jŸ¼³Ï£svû9ÎñWýYõñSeøÊw+н¬×$çHT9�±—®×Ì�'HäżV9c–:³™Õ�ÄÔv­ÕµXõóq¿¦ê|fT¶+¿Ú£ÊLk,¬¶óIØ.ñµ9Û·ž·Êß!ök‘"|:µ•}8¾R÷™ }n-V–Ìsÿ´þÝÄTµÑÌ[};`Üjû³/clRûÝ�—žìÍ#ø}GUw?b…·}NóÚ û˜ªãªogÙ‹êø“ÌÞdRßœ|9µ[ÞÙí èÕî¶:=öÃŽ¥T›JPmª@øþ¯û9˜Þ³y3ó ½ÌÎ^§×ñÛëØC¿îä˜Ü{\;}�m~*ç=ú8Õ»6{û=íßSùïѳ< ªÖþÄ^χâçTæ{t±�Áÿ•„&w|5î:Oe¹�¬çý,âg}‘¸šnälkÛùïÞ¯"æÞm'#ķ½~ûnÇÛïvÀ+6²§×Ýù|WÏmå�îœ}Š14ûÛõãÑ}ÌVŸ2¾ØÛÈšï Æ}&§ÈšlØ+†q̬OÅA±ÿ+9í –…}æg¼G{oê$YcIÜiþUÝ&çuâcu˜¬E¶µÊÑAú©Î½Ù礮]±3•ï$«�zn}=Y{ÈšM¯ó¿îµæºøÆc±tuf[‰xkµ™Ü?Ö½›¬%ë¾#n}(:3å똬¹í&»4¿»x´2ÝÞ'nyöŽ­¹×øX9¹­ÍéÈÊ;sŒm»È ÿîrÌç×±¢ŠvõŽM]÷w]å}7`þª¡JQ“ù™ †<0è½Y/æ¶×}~z_UêPn|½ÜW-•zŽÎ¦ éOßW•. rŠ»ÚÍ>�SÔ·›x¿=zϸ|ó¯ÍÍ”›µÐ$IznRÌùÜž¹gœKû+8yÏxƒv»} ’lUE­b뽺:Î,òüíl" ð1?Ú‹ÿ?ì•4úºªy¿„Ûõ¨r^5ä¼µ™r[o㓈ú£ǦjlYLèÄ*¿†ˆõ› +SÞ‡®½¤m%ùPv<±SÓã)ÔŸ¿ 9¯Fudzl¾õ±-¨ +í¯®åæñ² ÷VçÕ±¢Ìª�øúfýšcô°‚×vþzzPâ[“­[pwÈ�îÀÕ^Ö«—¯†ê¼ƒÈò~3›®ÆM.Çò•àó'ÍxõðLåQ¬7ãF�Ç—Å”…n6±Z?³ÔþÆFþ½ÝÑÐßß¹íÇK˜¿Ê®ç×™(äTmÊûήñ[ü�¯åëóIY§«›ôlX}=8s~KÜ�mÔúâ8UÞ%SÞ#°¼UN¬ã—<øù¢;¡&—ù%Oj&'S:ùõRõv„ì\oúÜ!âúQ5YN·R¥Ý.›·#­¯�ƒŠçôlë9_gSÎ÷õ´òåk§ê ;ýx¹0!âÌ ÷ä2{5é•\^”–&»…¦ŠUg»@'Çv�ýÄ»dm• ú=Q‰Ëu²qU]^¬ÑL:±©.M§…ûëX…;ψ· .k·ÔWJ-¯gª¢ªuQðTšJåFõudsˆk~"¤Û…?¨*ÚÁ™�/¼fjÙï­�äÚ¸\ÇÒíBÇ­Ò|óTl£R?5WËwUz¨ÛÔ Oh7ñ,k,o~kDÙúq$‡â�êk•Dܘñv)O8ïȯÉhß±Bùz’h…ÜFNªÇK§ÆTM…¥Yiååÿ*|£ä™?h×Bª¼æ£õ‹”µÙÈ£‘$=4ÔqÌÚÅ>V˜KÇØbVÚK'EÆÐm£›Åª0™ Ç\Õ+ ÕÀc$ëu�\ ¬Ú§a¥$ªª.×ɾ…òë@îzú¶TìõbA‹p÷Mn'‡†�¯’›ÇuygKÓ·É1_‰·9±¹-¹„~ªéd£Z¶ëÄ®@¡“;Œ¾ÎäºZ:•÷PÖ�}‘±Œ{»üp™Óœ±Þ”;2Áêò +2Yeiì7Õõ×øýÛÅ][¿å°äq£Z˜†­Yf²òÂÊô ¹¼À²Û²Dãìw²N}¬¯ÑÐò¸1¯]?]u`¯#uCPݸ’è» Ù´Ð5Ú +ËøâmcÅVȼ×7=a/‡¶N—±åm)U«ò ¡ SçÙž’¯B$ŽÊОÒÁuFœˆ)‡â‚¹k6¨YR^¤™¾èï¤+l¹–8eD9´�çzš•¢+mž…‚ØÊ)ØiyÑ<èC”~óòz·ßW•C]…Ú ½Q_%µM¬Pàqêü•Á^$.‡-çØk9¨‹·[¨É²bíÙVäô¥ÑK 7ÈÔÔO[xyQWiÃEk¢hpšª´&1V�ÂzZ5Ë<ãD­[MÑ©?HK{é•fD/½vc‹ÜšñZµd[äe8Ç>;ÕG¶Z2Z�g7ªë#m¥í¯íÆk×l{Óp]‘Ð+SÕOó»‘o¿·¬ÚKe£êÏÜ Ñ©¿% +‰Úéh��_ü­RÀWÞÝ]­‘§Ï9ï•ì;"µW"¯wLÎZuy…;WáŒ|Ÿ!DÕ×»óÓ²¢Sz·¯Ûâ�ïù¾ø·6„Úa,[ÅòÊn[ŠÞTÞ4ÕA#ÜõÇõÖöÉüóo¡±è +endstream +endobj +304 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 303 0 R +/Resources 4 0 R +/Annots [ 305 0 R 306 0 R 307 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +305 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 84.259843 740.570079 409.271317 725.570079 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (https://releases.rancher.com/documents/security/2.6/Rancher_v2-6_CIS_v1-6_Benchmark_Assessment.pdf) +>> +>> +endobj +306 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 351.653153 216.824079 461.230790 201.824079 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (https://www.cisecurity.org/benchmark/kubernetes/) +>> +>> +endobj +307 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 84.259843 201.824079 165.615800 186.824079 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (https://www.cisecurity.org/benchmark/kubernetes/) +>> +>> +endobj +308 0 obj +<< +/Filter /FlateDecode +/Length 3498 +>> +stream +xœí[K�·¾Ï¯˜³Ó$«ø2�pàƒ‚ä �µ6‚Q9ÿý|Ån’Õ35»²|ñ!Z¬Ô¬â£X�¯ŠìV8{ü|ðWåàjm%óùòþôáä]Iz�C£³¿ÃoIç๸Z®éü^T\i)–|¾žð×MSw¿žÞ|vúÏqL8G×ZŽ!�y',&Wj)>¬–d°Rr¥Ä” V[lÍbAŒT8ò=«@ n5Y,ˆÁ1VƒU!q tÏj#–À b„–ŠÁ +r„è½Éƒ ž™¢Á Ée(=[¼\®-6“WÀ %Z<"— ‡,^s9çT-C–Ô|°x ²¤Àì-daªÅâeÈB™¼Éƒ,±²x²Dh§¼ +Yà]ÕäAŸ}°x�\j•Ùä5ð|-õž}r©y‹‚KðM2yˆ()ƒ!Kö©™<È’ÈG‹G�…ñcñ€‰J­F´F‰nò,^‚,16y�Æ· fÈâK¶ ä—, ˆ¥8n‘-ˆ•W® +ÄÚ—B Ä–çV, À‹Áò�%q¶�€daD®Éƒ,ÔØÂŠ�,, ‚,‘ÉÂÚ2¼ÅÂܲoÁÂÞ²ÙÂàBLoaq©f¶°€¹p¥fas ØiatîÅÂêRÊÑÂì×law‰ƒ·°€�»Diò ØÂ ££PÉÂîRðÅÂî"Œ¢…°ªƒf à+.Öê-,`àn¬ž-,`àn,H&¯8Ä YXÀÀݘ°+swcòÑÂîFŽÙÂ8Šþx³îB’]@¬…È÷àE²°“¹ˆ²Ä‚Ü éψi • µe p7T˜Ïä5 +4nÄ-´ìBÎÍ‚ÜE¢" pðY-,Æ;dÔhaAîB¦¶xÀÝ›·° wQ7$ à. °°ùÍ×5yÍùV«… ¸ XŠ ;_�$&¯88R°°`ì<êP 2pé½YX��»>YX��»žQö˜<ÈB5ZX€º<„­Ó(V��@ +‹Üõ¶xÀ]ïK³° w%mZX�‹bµ°:TÁÑ‚\ÙµR²…¹yðPò™¼ìÐNBd™<ÈÂ…-,@aíµjaA‰�…b´° DÈ‚’ÁÂT®Tßæñ²À]ÌóCTŠÉ\mÌ””qƒV-^Ž®ÀµÉ«à…baA)ì�Šƒ…8K¹Š ·°ï¤\²°b€ØÂ‚Ò BŤ"W#*s‹ Šl Pé‚‚…5BTƒÔXqÊÌÞÂdhœ%¡j‹Ç^ΙÕ‚ÊÙI©haÂ'M ¥Éƒ,€ `9l' pøÁaÇ“Y(±…µF9nV j…,ÑG à›rÞ,4YPñYXÐ|vR&[XÏ{ Z¨8oF¶°q)çÍjaA#�ó&ŽxFÜ6ÊrÞ,4†, %ŠÉƒ,(šš·À$œ7�N/C–ØØÂ‚–³œ7«…(3pÞDEo^ T9o󺸛�ÉâwQ™f ÐÀy•­u¶÷ÞTPŸÙÌ*'ÎjÞx@oBn5¯ <°Ùª˜wà+g$óÒbâdY³yk€´ +fðæµ�þ¢ã;LØnŸôU†;äÌZd“ aÁ¨îç™cu£ݶû±_~:}ñÉ÷üÓOOŸõ›²ñêŬ›ÄAl°÷ûJ"'±KAÓ¯§Ì¢°[ºÈ9{³œrï¨yô½œY]°Süöz¤KÑéjÅXóè­äSÔ‹Þ�¢_Ag�·tŒ«÷\ñ@�zî¸t•—Nô¹{µ¢Ò”­ïËé Lÿá8Óä2‚¦[—�(eE î/#æ-m™? áì×™b~Ǩ¥²÷Ÿ€K|wtzà +ttïoéHæ«7TÊ÷Ôƒ+„® èPiž®°¯(æ²\!=p…ttÔx7ô€SÉì=WÒÁë÷§/¾ÿË«¯¾þ+ðýõÓéŸÂÁæ-üöüVïSÚþÅùÊ3Ê¿ñ ÜF‘ØyÒæ§�Ïh£/’…çËÞ'ï¼�xØ~÷¹;¯­¹ú{ÚÆz;î²Èo÷ùöæX?b­:�5wÙ{¿¼Í'ów9…÷�'{½û½|ù¯óëoè³i}Š +§ª¼Z2lÓ •È¿‰¶%»xC=—­=Ä’yä™’š'M4EVæ’¹§ZǼe_¯(ÕÇ5GÚù]¶±õ°©n¼É¡Ý#<§y<êeì·Ë©Öî:Rk™.p#[×ã0ßeŸkôÝ]D\c¸GŸ»ÞìŸw]f5·¡û[YâÎëãÞÝØáÛwþ“Úk}Vt§¿=üL—ýaçkýì¡#ºžûÕ:Ùç~3æ_‹ØWúT¡>ô4ýáVŽ�ðý!GÊJÇ{ß¡ÏNÛ×Ò00örÜÿ³zLwñùnï±ïáïOÛ<~-ïpû\ûúôÅ«Ss’« esC¶ ðô«¼n­â\õëéï(ZîAú¡õ4ÏB´ìßÿ°ü|èbè¶ë§){_”ÿ)Ÿxóv×õÀ˜ûÊßfßÝüEáÎôï;;`9SM9[vøcùY�Æ+�Ë-¸çPrû]:?Ló¢Î&ŒX8`ÐÀÅËÂg—GZ)æ¢âïÙ4Ê�þ.�ñà9,¿·ÛÞWùL—í�/ÜÅ¡Zç°Ç¼Ïó´0)„io9Ž1ÎMÀä s„Øß¥âP,ï6ÍRòPÜ0H°*ü¸cÒðï§-7 ¿ì>¹A�Õ7Ž8R9‚´3ª:J”dy°}ÿ^c?·|Â�—Ž:Ôÿœï Œí„¯—‹Ï,¬å¢u¬‡ |çÍi,¾)p6£¼˜Ú¥>êñÛ7¯^½þÇÒã(w¦{e{å—�mF$&Àrù%›=ÌåÓ´ÿ4å{#L›îq¦rÚÊíÊÞ©ß]Æ(µþ2^’KçHÌ–½ó�?„½¡¹)õóöNYå�ô±6NòáFñ‹6Ö¹!ÙuŽ +òT\…(9ßÕÏê¨p¨Û,Ü»¨úâíÂÖQó*Ü™IAö׎ڜM¼k +‘ª¹ÛØ¥ýòó š û¿ó€´µ·l�ç!ÃwûÕVIX6ê¯$²W7eÓ_ìò‚÷ÝŸ ÷Õ§�$Ç&yµÈËò(çÒ"×À� O^b¶À[‰ö4?æ4†~a?Ò^öõ°n=ò*Ñu¹ÞçÙç)(.p˜ÿ…ãTßC{øòÖlN¹¿¾ý¶ÏÕ…(߸�3;ÉF¥�Cª'ÃL¡+6œŒì_~˜½ö�½|? / Ucï¿M(B»<\·Øã;¹ÆÑXäëI>ìbƒÌ¼üÿ²÷G?çâ0ÃiÐ.§�m·=AöÇs¤’ר�ŒOc˜\¸³�¨_9o DŒÌáž,»¨ïdù8®:Ú[yŠ’ò�Ä5!ë¾kÂ5ðEr ¯ˆéžèÕr‹yÈ#çÂñئÍå°8Dת Êü£o,ÊœÏ/(}Æ~õjR哜1ÕÐ.’ç ‘ªMj=§AxÚÉ ]Nñs?¦fsò•ÕäÅæF¬Ã‘xök£ŸAºœÌ~ûliZªÌ^u mCóK”åêT§â ÚEå¥"_ûªñ4�ä,¶öUùM¼#^N‰g$.òõ”ŠÑ;-¬ði¸ž&’šw’«_þ²¨¥U!4M^ ÉßT¤Iäé�§KÉ«ÝÕZ‹HlNòQIšž'ê°¥�ÀeõUê +¥LŸÕú +Õýtg况U©LÑKâ HMð8’ÃôºIú™X©‰~!÷Гœ¦+_ä%gš¡šü\,åîiλÈybçU“Ë´x�÷ôSÞ9¯òùA¼ôÄÆ·dqý:Yäèg¶[‹)â  °È F¯�<¢u¢“|{<W�Y÷rúùÔÓJäØð�)ÈggºÊ +ç_ÑçüþûÄçoÇ{Î-�£ëlj­²Îdò‘rýH²|´<ˆ3l1²‚ýEuõMÃf�Qá5¯á~ûè&‚†ÉÕÄ´t¨Èqºn ¤4“ž!^n´8 ™ßk›•°·&�ÍÉ[Þ�©ÐÐÛA³.­”|VS¢%]WJ—£ˆ†žMµ`[’ćԋLÕ‹ü¬MA²–j¨2Bš´x¼Ò¬žzÐú.T”À¤zbzÑv�Çú“ÃëwÛ}9�ê„öI½jêܘP'àÙTêÍ|lΜCgiŒà]šs‘Š=šEÎ +�UZð¡¡}TQë¶wHzQ´Ã¢#QL¸ÍÚœ± ™ò>l¨¥ï¸šZ*³¦XÔŸµ¦“¶ÊTbÒVÉw}eÞ‘ñfµD³JÚ�ËÚ�_=g-Y ZÖ£'•WO´ûµù¸öȶgµ ^‚äU™ú5,Ýõü$üû”Ø1/Þ­^ã§ß„„º¾ B¢æP(RÿÏ^¾æ aù^·pUW#¿yÌów%÷7"ã®D¯s8&ò%ÈÛ³E¸‚Ñ^f¨©Æ鳇5oné·)àá'Vökš×•ýBh6‹å¿i‘½U¾./Þ~kÒ¯�Òáú¤ÿü>3]B +endstream +endobj +309 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 308 0 R +/Resources 4 0 R +/Annots [ 310 0 R 311 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +310 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 84.259843 739.370079 128.273270 724.370079 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (https://kubernetes.io/docs/tasks/tools/) +>> +>> +endobj +311 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 345.193925 739.370079 356.281327 724.370079 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (https://stedolan.github.io/jq/) +>> +>> +endobj +312 0 obj +<< +/Filter /FlateDecode +/Length 3610 +>> +stream +xœí\ß‹$·~Ÿ¿bž 'KªÒ/0†’€C&„<œÇw6a.pÎCþý|ÕÓ’ª»k×»··8ö­×s;ý•Z*•ª¾*õvw8{ü¼ +ø§rpµ¶’ù|yúpò®$�ÿ–›ƒEü7|J:ÏÅ¥ÐrMç÷Pq¥¥XòùzÂ?»CÝüzúî‹Ó¿·ç„st­åÒùç·"br¥–â“!jù@†(%WJLÙåà0ÅÖ,ÔH…#Ejp«ÉA ޱ¢ +5ˆK £¨A�X["¨Z*†(xè¢÷¦ ŠxfІ,$—aôlÉbp¹¶ØLY�,”hɈ\.R°dÍåœSµd ]RóÁ’%è’³·dÐ…©K–¡ eò¦ ºÄZÈ’èa�fÈ*t�wUS]|öÁ’5r©UfSÖ óµÔ£,úäR%ò–,—à›dÊQX¤\ Y„.Ù§fÊ K"-AÆ�%O$*µÑ%ºÉS°d ºÄXØ”A,¾Å1C_²Eˆ '¼dq@,Åq‹l‘@¬ä¸rµX Öæ¸²h ¶ä8·bñùY �‡.‰³Å  #rMt¡ÆP„.h`qt‰LØ–á-è–} ø–}Èjz‹ ŒK5³ÅÊ…+5‹ œKàN‹ ¤‹p/X—RŽh—¸f‹ ¼K¼Å Þ%™¦ ºÀ�-.;: +•,.`ð._,.`ð.Â(Z\€UuðÃlq|ÅÅZ½Å Þ�ճŠÞ�)À”‡$‹ ¼¦`enðnL>Z\ÀàÝÈ1[\GqàoVà]PH²Ë肵¸ù²H 3Q–X\�À»¡!ý1 ¶r¡¶lqAå3eÍ…‹q +»�s³¸ �w‘¨Èâ‚Þ}V‹ Àñ5Z\�À»��©-x7Äæ-.Hà]Ô É⸃ (,.@~sÁÃuMYs¾ÕjqAï‚–¢ÅÈÂÎW0‰)+Ž,.;�:Ôâ‚ ÞEzodð®ODdð®g”=¦ ºP� ®� akÄ4ŠUç#˜Â’�w}À +[2ð®÷¥Y\�Á»’6-.ÈE€X-.€‚Up´¸ Wv­”lqAn2”|¦,;'‹ Š�@Y¦ ºpa‹ PX»F­Z\P"t¡-.(º d°¸�kÕ·¹=€.psÀЕ¢Å`2W³Å%eìÇ`UK–£«tmÊ*d¡X\P +;¤â`qöR®"è-.Á;)—,.€�¶¸ 4è‚P±¸©ÈÕˆÊÜ’è‚"ÛâTº�…`qA�ÐÕ Å5Vì2³·¸{I˜Ú’±—}fµ¸ rvR*Z\€0ÁNLiÊ  hÂâ¬�l¶“ÅØü`³‰mŽ)ƒ.”Øâ‚Z£l7«ÅµB—è£ÅðMÙo‹ š‡.¨ø,.h>;)“-.�Cæ½Å-Tì7#[\€¸”ýfµ¸ ‘Ç~[<#neÙo‹ C—„Å”AM͈[pö›`'K–¡KllqAËYö›Õâ”Øo¢¢7/ TÙoórx750“%ï¢2ÍàûMT¶ÖÞÞƒxSA}f «ì8«yÅÀƒzr«yÉÀƒ{‘­ŠyÍÀƒ|e�d^4€šØYÖl^5@Z…0xó²�ÿ¢ã'Ü®>éKTîP�3k‘I6„£º{ŽÙŒîhv»>öó�§/ß ùžüÏéÝË•²þ#¾‘$HAÓXíØ°ÚïO0¶‡¨k³‚¯€+*ÓL éÞäš÷àrÕb/'c[ +vâ±×-ŽÝ`]p5êÚÞZé¦Ð‹š‰‚¯'l°#ÝÁ)Ͷc8 òìwÂs&W…ÎIÏ¡¦u,û^Nßa¡?è>¦5A*iM‚õ`€ó¿8N‘µ,m®u@vY¯]¢…8bØ®5–Z[/‘Zekü«²£ž¯²º†—Us,¶ÝQ†Û²}îmñín|hÂ[Ò8ª¦î-c¸ yÅð¡jûPU>TÑz§<ÛŽá4¨}(›>4Ð9é9Ô´ŽeßËKäþ*‘+¥ºüw>~1Xvc�1‡÷v@Þd»)Û¿ßKð}fÁ—å¿r>~yDði…ÕŒµ!6žý|/Á÷|� >3ÈWrÞ�/�÷xŸYà=¼ä<î÷¿y}‚fËM5øÝØ1×åÏòWú"—4ϯߟ¾üûŸþðÍŸÿ‚ýãëw§|å}`|Âí·§åÏøž2>ØrÅï´ÊÐ.E` þõ?ϯ¿½cLùËùS†‰ùvjBÜð¹àóÇk÷Ë�å†÷v2dìmß­ªäÛ°¡Á Æ}A¯æ!öÊŽ8Ë 1fù;n¤ÚµÐ“Õ“ŽõëWá+uý�×ßO·Ñ¥í¢å÷7¼k}À×¶r’ß—µMžré3µ­�“|âÚ¦lÏ™´å¼Z¤[&ï­·�‹ôÁ+>‚¼·`×bÑÞ¯#æ­Õ,-ºlцwÕVQÖì}Èq�ë¶åöñÊJÃr~‹�¾Ó𛛬¬Øj¹aµ6ÏñßßVn¬¾Ò%yeíº®Òeµh^M™76mp0b�†N7ÿ—U‘þÂÇ~2É%y¹íãØ�Én·EïÕ“–ÕVÂi禾ý]úú9ç¥_#f�9ÈmBÙsÌÍè{Ñ9¯6è6ÙÑNZ×q£uŸÛŽ;Ö‚nóLkĉîñ­Dø*++…õ±„gÞ(¿ësåum.;Š[Ÿ[ìz¹õ³è­Žo¾~¯­yoþHžäOvLëËo×9­ó Ý—IÙÔ`¦¦o-ý¿[ûûX]×±úÚŽt“w븱£â~Û–ù`ËÎ3]§ÕûZu4‹ë9í×sã“ií3(ö¿Ì1Bx8˲ü=ëþ<•&¾äª;¬÷V½¿ÙŽ2fÔgø½Ê[¤}tjõ�uã¨u¬8sGøánÙ§Ï7Œ2¿~‚|sìçyò £l¼Cß'ç›cߟw¾Iao�—|ó±ù&ÑÁ–¿‘|“°W÷ç›ü¼¹æ6ë]ßeË’}å7Vèæ8bígÍK·kÛÛÕŠ’ß÷êá^˜ÃÞZŸ6æ$w?=ûyž<˜k»Kß'çÁcߟw,~o�g̓;Žï6Ý3œt9îÈn¿n^¼×žñ`OöÛ|÷È‹%7¹jy_^ìÑþ’‘KÝÛÕÌ‹Ÿån­ÊsŽŸ Kûyž,UåyÇgÊRǾ?ï,UëÞ/Yê)Yªùƒ=ƒYª1¹v–ªÏµp0lÞÊ–ª*Sý_1lyoÉß÷Þì9ò×r¿¾ÿ Ìèè©ì�¯×Û¢—÷Eøs +´<»”½º¥~½ãúMî¿)Û¸ýx»ö7¯µÐ¥¼ü^Ùq+ò¼ˆõ—zI„rqž:6òm5O·}è¡©UdoW‡ó«y;‰¾»…‘àqG°ýûž—ñÞÌDÈe:Ùè¿»ÒgC 2fês8,Û‡S^žs +˳®>W¢¼ ãœÙ‘¬C;˳UÕ‡¾La1l8ßqæò +‘£ÕúV/ËCf·Wލƒµý‡e�߃WØåÎ$Ëüר&|=É Ø€™'ý,àúÕ�¾8 vëØåHî4Ùµ¤äüúuR ¥þ5¦>9?õÓäÉö½-ϦÜ6@œ™Ã–Ù{VXÞ¢Q­Gy¨’r×àì�uÛÙá<ñá@^�éz5Ü„#w}‚u×Ó ©~\ýô—‰–ÚM…Ðì˜9 Cò(m× +z:8¬SF3%ŸU—8’¦3¥CÊQ�ˆÝ)Õ€mj¶QSR2L/ú³^ +’±Ô�*#ä�¦ŒgšÕ]wl™…j‚˜ô�´mô1”þèðzòº¯*ç‚jèU£cb‚³QZóöpä:ËAÞi¡Ñ©Ø£QäÌИ¥o´�*´ÎÓÖIÊÛ ÚÅ  `¾c£ÇÒuÊëiÝ,ËŒ«i¥2jЉþ¤-�ôª #&½*ùÐVúíoTK4 + ¤Ý¹ÌÙùÙrÔ’ÕÀ²>{ <[RÇŽcóvìžmÏj<ɳ2õó´thùQü÷1±c>`µê?Ë•�Pç+�¨9Š´¼ÒלÁ!,/ö)\Õ¥‘GŸó±°ë‘°މ| ò~O[…+í—ª«þîOû´æÍ)=Îw¾‹Á|h#,/x[žöX.�Ã"[EyŸ#IÑ[å5TÅßóGÞ\>Y~þ‰r +endstream +endobj +313 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 312 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +314 0 obj +<< +/Filter /FlateDecode +/Length 3664 +>> +stream +xœí\M�·½Ï¯˜³Ñ,Vñ 0 Ø@À�A�ƒ4ÑÚVäò÷óª§ùÑݵ³Ò®[±µXͰŠM>‹¯ŠìÇÏ ÂEÈ•Rs’óåíéÝÉ»=þ-56…Eý~s<“—ì"ÕTâù­ +8»\cÈé|»â\ýþô×/NÿÞ^CçàjM�âùç7ªv¹ä죡ªPybC£Ë9Äd¨9 ±VK1K�£*†Ô-`HÅPÀ`ÉÄGUŒ�I,`P�ÙP‘ +Þ›:ñ" E—`ôdé¹Tj¨¦.CG9X:f—²P$KW]J)K'À«'K�%’ˆ·tÀ"\²¥KÀ‰½©–P2[º ,Ö©†® ¼«˜:`ñÉ“¥«ìb-"¦®BçK.G]ðÑÅÂì-‘‹ðM6uXQ˜¤” ]–äc5uÀÙKÇÀ"ø±tà‰È¹cµ]Ýì™,]–²˜:`Áä[ °øœ, +À +rÊK„œ�Ô  „ÂNŠ‹B©Nrf‹B�NRͰ'èYDÀX¢$‹ ˜€E°rM°p‹ 8 *X\À ,AØâÛ +¼ÅâÝŠ¯dqƒoÅS²¸€A¸€é-.`0.—$0(®T-.`p.ƒ;-.`�.–{¶¸€ÁºS°¸€A»,%Y\Àà]òx—Wš:`�[\vtL…-.ð.“ÏxË(X\€YuðÃdq|Å…R¼ÅÞ Å‹ÅÞ !ÀÔe‡5Èx7D ÁŠÜàÝ}°¸@À»AB²¸ŽâÀ?ÞÌÀ» �h§À‚µ¸ñºÀ 1�–X\Á»TþŒ5 ¶rTj²¸ ‚w©`úL]u”aqcÝÂÊŽRªDð.[\Á» Ïbq8Þ!¢‹ "x—‘ÚÒ�w)ToqAï"oˆÀ!°¸ñÍ‘‡ëšºê|-Åâ‚Þ-‹ …�/`S—‰,.;�<Ôâ‚ÞEx¯$ð®�Ì$ð®¤=¦X¸‹ �×@‡ek¬i$«Î0…¥ïz [:ð®÷¹Z\�À»6-.HY¡X\€Yp°¸ q5çdqAª:¤|¦.9”£ÅÙCAY¦X$‹ÅH¬]åZ,.ÈX8‹ r¤  #p•�}›Û`�»˜ûdŠ€É\©"䘰ƒU-] +®dе©+ÐQ¶¸ gqÅdqöR®`Ñ[\‚wš.Y\БX\�+°`©X\€PäJ@fnéX�d[\€L:"‹ Jdƒ”P°ËLÞâDhì%ajK'^÷™Åâ‚"Éiªhq– vš`JS,  ‹ 0?ºÙŽ`óƒÍ&¶9¦X8ŠÅ¥Ýn‹ J–àƒÅðMÝof‹ ªd|TŸœ¦É€Æ¡óÞâ‚JûÍ `]ê~³X\PÙc¿‰-ž±n+'Ýof‹ ªKDŠbê€IS5Ö-8 ûM°“¥KÀªX\PSÒýf±¸iö›ÈèÍ#�¢ûÍl€wc3Y:ð.2Ódq +Øo"³µööÄ3ò3[YtÇYÌê�ˆ­æ‘�÷"ZeóÌÀƒ|u�d&v–%™§«P’7� <øù˜8ázú4Q%¸CFÌ,YY±,Ù}ßsŒjü@µëùØÏ?ž¾|…à{þñ?§»/–“²öCp~–¤kådÜó ¾rK{‚&’í HàS®Q¹�Z\Ý$B1Âm=÷/´… ÄŠ™�Ì,#“M¿Ø*抓‰õƒ¯ùX�fÿöå ür=ÛLçÉ‚Xdl7zùöôåßþøÍ·ú3Ú|ywúûWzŽà½ïõLA?á4^.øÈÖï;ˈy§~ý�óËïæ~ô(&yìkê¶méMÜárí"­Mê÷xÕG¾~_º¨kwiÛmƒ¥õEë^®ßzxƒß²êòõi}áZÿêÚ§_ûYtrųô±Ê}˜pù« –:´âžÊKr0Çdöº7‡¤iHëPåÕjšh[|é¦Õ½PU¶�›®íËëa®eˆwÃÜ´¶d•ß­m=×:Um—ziÅ2OÙÆdª¿e6ýº³›¬8¦ÕSÛ´4 ç~Lû©Û¸_\Û\ñõq®}­X±†}¿ðbgäQ£S( 9¶Åêý³®3P¾~A_i¯ëgZ?›|vJEôú*ŸG¸‘·ºk;WOº«7¬å;\€aÕåm;ˬ–µ½ËäiïÛñ½ö¬˜÷Vì­¿ÚöÒFÑGÝF|¹">:PõºekÉÖG÷‰ÖgûÌÊ~ëô:ÿúº¶ú,Ní6:iô·XúrkìÒft¦Ncm_qÛI¬ µÚÛY¨“Öõ‘'ĶŽï¶³¬”»™E¯¤‡ð>;²Ûþm‡–�ööø=¶¼Ol å`·Ï$¶pÈÎߎ-¯>mliŒ¹xB3óécÇä�ñý–Ù;«í-º÷·³ìíÜ=dcoD�󔯿~²Ñ̳¬·Ý~Š qØ­Û¬Žk>nÔÑ;Iþ#D�c;Ÿ&êè¥ð>;êÛþmG‘½=>eÔÙóͯ'ÂLßoFŽ›¶L[þÂ&ê½üÛæõ`¸ÿÛ(ó1öïoó°·ùç³?Ñû¨ò"ű�O)ô~êxŸ)Žmÿ¶#E¢½=~�O�‰¶ü…#EÊѕۑâòi£DHGFߎ~ËÚ�Qš§tvŸsð7kÛ—]›Í;êÚ~ÚzâSθRÝ[ðY»›¯v~ö+Þ©°Ÿf˜¶Þ ëz½w2³+!îÛYÆõjØ1ÒM©>„ãÙñäØvãüÃ~=yãÚÿ2þpˆ#üàö…¦¼@ÿí8mæÁC7¯}ó¯©�ð¨mË~ü±µ1sZZåslÕ¥vy{·ƒ—×ÜCrãÆ•¬¸ózmÇû‘›hSÌÑ~¯ëhØu»înÙ¢„¸³Eh1¼Ùvòõ?¼\îHr¿#ÉÆ(ë™áTH¥Tœ‚)Mw1?ôš'ÝÅ\o^º �a¼ŽkÐÇ)¼‹¾/‡;šÒz½š¦‰cÇ›’äPðË ÎïÿúÍ7/ÿ2npŠj43•¯†°½áL9rØuÒ–¤z†Ì·¸Qn£Ì–^7 +ß´“wzº%|”�»»ËC¨YŸ¨¬Äɨé¼XDŸá9^ÝÇ';›ÂÅ)Œr…aŸ…r.“¼Ž²Üíì–�©äR¦,œ�úrè7ÊÕ›Þ#6Wž,Çļ]~Huô“?ýÆøsOy*ÏfýÜnë=?m©I_=A›éyi˱�‡Òøþëƒ89¢¡H¼<@ ZÏõtþ´Ê#t| +¨=Rs¦Ý,ÛUª¦aYíXÛ5ëCkÖÂÓ ŽÊm'V�ûêͤ´�¼=3~3h{Y -Û¹»:¶ÊÃnw×¾ïwmKëŽnYy,’Þ~˪&<›LCûŒm ‡i{wJËÖ´àY< µi¢Å°t~àÊå=Æw½Öúj£×·ôI×ë{�Sa­ÿn™à·XéâR[ÛËkH~—Ð +C|Ò×ÐÄ‹ ‚xD¬Âõ«ïm u¾i² ˜ìê¾&"¡_¿RÒÌáú©U×Çv™>(¾Uâå¹kdžW&:ŠuôÞÑ*ÖWùŠãµ”:”˜fGƒ2× Ž ûI�B?u7ÄAÒG¿»éÒvè³éhšþV7äi:o /'tË{é½)ÕˆZSͺÁwO j—ÆV³Oˆôy2D—“!|á[Ó‚ÉìúiÖô1ì«°4G’^¯¶z†èr2ë­­Å>S¹×*ãÒÚ,?  WçÒ oÈ.SàÎúnò´F<·¯[±nSû\û2ùM8/§(}%ñý)f£v\ács½YÈS»]\üð—!Í¥™ +K³Éô!VýÿJ±K•y–/$Ý¥ôAôQ�èÚìâ­‘fyê¬#–Hò¨;™‹rî>;Û‹Š7ê+éöÚÝbéd²Ižkƒ§$ÕÉc+¦îu]¬ÖìÓ¹rúÝ qì®|¿œ±/Õè{g‰&w�½Ý!N�;ïgqî3NúVAÇÛÛ�|¾ /K`“½X]¿´N†8øíFg“p) ñ ÑûEÜVkg'}Sº}‹ÌЏ—ÓO§%ÌŽA·Ø‰I_’›³,:ÿu¾Ãï¿Nrþ¾=•}�ãÁw¶�[7â9’é+Õå=ÅúŠuöe3 ƒL´?ÄTFÝØ¼¡Çñ&¾–q¹ÄÞjRgPêÚY‡ 'q讈'ËÄÂËΊ=‘yîÜŒ€}-rºa}ž¿¡BaŠeèx„äóÔ$JZu„th%L¢07ŠâÔaÈ60Õ!çNºé¿ÌS¡G)saJ#´ÈC'#ÌÎM7Ù2Š© +R`ž sÃBs§uƒÇýäåõìy_!§¶TÚ©½Kïgi˜J;áÙR^Ši[ì1‡ÏZh‹wX¨·ÅÓÚãžäŒ¥1R Ùf�¤e\¶Vˆs§Òd›N[ èt™o²Þbn˜ÒzY3Ë2âbZ)÷œbHš-çYéFŒó¬¤C]m·E¼ž-qO€âìÎyŒÎ�š=—,†,ÍWw©ŒšÜdǾeÛw‹¶çi2€¤‘™úqY<Ô|ÿ=eí˜/ÁXµÚÏrBe¼Ç„@-”9ðò§i|I "úvq–2�|ð5·ÏJŽ'"í¬dî Óá„ÙgÒ?2dC¸‡¢>®˜šj€È¾¬zsHf€_³_YZþÊþ­B½˜u«¨T†5é-ú.|öö+LË1PÞŸ,?ÿCvÆ� +endstream +endobj +315 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 314 0 R +/Resources 4 0 R +/Annots [ 316 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +316 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 205.473057 101.433071 186.723057 ] +/BS << +/W 0 +>> +/Dest (cb1-1) +>> +endobj +317 0 obj +<< +/Filter /FlateDecode +/Length 3947 +>> +stream +xœí\[‹dÇ ~ï_ÑÏ—UUªƒ IÀÁ† &˜<ŒÛ›0ØyÈßϧ:u;}4=½»ãdC¼Ãl÷‘ê¢RIŸ¤:çŒ=~>¶ø/³59—ù|ùùôˉL +„µÅ¿Æo +gKœL°%æpþY>™T‚KñütÂW—kó§Ó7�þ±ïcÏΔ� ç_{“rJV‹¬WX!˜”\ˆ ++Zƒ%–¢± FHìøÈJƒK b°sYaeˆá9Ydˆá’e�1l IaY‚Ö©<BÌÞ)<L„Ò£ÆsÖÄ\\Qy <›œÆóÞÄÄ6X�WLŒ1d�Ç�%²/@–`™IãAö9i¼Y|ô¤ò ‹ËÉk¼Y´S^†,°®¬ò E²¯xJfVy<Ê)yŽ‚ Ù{ÒxÖšÛô*…MŠIá9È)•Y‚'§ñ°†9;)7³†9CGNÃئԛIÂB�Ÿ†…¢‘4YÃÀ8xD›Qo:Ö°~)õfÖ° xB½‰OñÛâ£Ô›IÂÂ�% EQy�ISQü˜„zè¤ñ"dq…5,(1J½™5,@š�z½z$�¥ÞLêqp7 “Æî"3�àõ&2[­¶'oHÈÏtf–Š3«'è ˆ­ê‘{­’zf@_©‘ÔCˆ‰Ê2GõÔaLK걑�ñ¶Ó§õˆ*ÂbfN²È·`d÷£æ˜Íü3Ͷó±_<}ò€à{þñŸ§Ç�êIYÿ±0~ϱÖb_Åì7ðÊÔñ&’m'H$„€ïÒG„He +i‹íÐM„D(F¸-çñÅîE†Ä"³E2SWÆ»yQ*Xì•�ª¬oÝç•d�:BÝ‹ú/ {»_¯wöyu½®óÞ«×;û¼º¬R'Á9=ñÕ¼Tÿ©²ÞÙçEY½ü;¿¼$2Òmz]Ö¿®�Óö +À‹Ú¼÷Úë�}^ÝÖyïµ×;û¼†¬GøýâÍ yÆv�#ž "Ø:d 'o~>}ò×?~þÅŸþŒ1ß<ž¾ýTΉ8ÉÙ¢|"x_ðË µïÁáøo¿ÿìoç7_®óÈ‘l$ÆòöóÈÐ(óêð!oÝåºùÝ6•\s›žÛ4�Û55ÑxCÄ>}×ú +=NÑëîÆ|¥-ïq¡µ¹eNmÙsÌÃòWC½^~èCÈòC&6zlÓ4ÍÓåeчÖ¾}\Û–Ðè¶�áJ³µ«}¾kãˆjý¢ŠÇ©z™·oÇ�'4šÛæ·ßiäo©È¢.ÙëÈñ¦ŸnuÛ¸ÛxS½Ë�(‹LÔù °,Œ[¡’�,f�ÊoÛç�<²9"V„’ë5¾8)�÷QAÉwðNî³nª—Ö‡!/*Zv8ªÎúÕ7Ÿþæ/ÓYCüìc+Ÿiûd^®7Å?;‰€§MAràÝ$ÝSe—¹�_= Ûâó¶ÍòÝ=,ÛûÜ,•| Ð_Tf±�/õŽAêÎAé¼²æO7Sµn^·}Z7×S‘ã²Ð˼æÇö™[Ûø¢.YîcxVMÚó -»�(@Ë`ãrñ‡q3JIÔZT[Þ{÷ÉÍÑ»ôvY…|vzX€¤K×fwÜ+zÇÆÜèqâkuÖŽ“¼Ð.sn Õw£E¹>nh vYämŸþêkªóñÕšâ”–°íß=*÷«Ê«�-RW¿€ÝÛf{ýsƒê¹²Ï+mHÖìðÝF»L-ÕÕ–ÙG¢Û�KŸ>6-ÚïQïr våÖa hûGÐ� ~÷лŽ½œÑÈ}Àã8c7{XŠ·ä�[ƒÏÈñÞÉÇqìš}ÜÊËî™DµÌr;ÄŽpù0Ǻwž·ó Å{oê×]ë`¿7û,©ÓÇw{åY-ui{Sןf¬¨ñâjƒÖÖ1tT–T�^/¬±©Ù`_‹í¶Tï¶ÎøZguÝÝ.ýó{øÁe¶¯fg7õúê)fÞ¯Cæã¾çÛ.¯”šÒôʼnÑÛo½îs6[®1ÿ±aK¿ÞéëÖšå–ø~Ío“¶2ê¿\jQ(Ù‘¥TïÜL[ïìóÁ¤­ÈÙPí¦lão˜¶î'¹•¶öñ‡)Ø>9íÓ½i*=t/ibO {ª¸òòÕšâ2¾šê¶•¡D›™œšò¹æ=eâ¥ö[�èÌ�ÁR†)rÛùjÒšZ>c¼AîN5C/àäb|Áxïìó>‡L¿… nÙ0=\ÁL‡ó‹’œvÛXR¸n_ݦ6ß—,äµyôrBµ¦ã-k–’hœJTÈ^­©Áfµ¢\×r´$6¥„œìÕ„7-©Øn.�e×_2¤»º|hv)Þ²£¹·ï\&Æ �%f,òþ21L ûŸ*;ía/óHÒ;êvY.KÒvÙ{å¾Dœë¨sÜ]0Æ´*ÿÛO�ë–¤TÓÅëu‰Šœá/ž÷nEÝqœ·+ê‡çäxï¢î8öÿ_Q—âµ~/êè…¢.åk�ý^ÔÝÒW¦ƒ¾þEÝÕý†{qõu‹=y7h¯ ÇGÔ{7ƴý±�Ü®ã^¯Ý÷ø2m}Øi/2×}íí5=¿u›l{1cm³ÍcíÍÛa9^ë±Ç¾Æà6ÿ¨eºïôùzÛ‡ÛºMؽò·Ïî—S‡ãýõ…5÷ã6ýõÛ†cŸ¿]íwÉ+né'_ëg؆¥y›²ãõ!'»²™÷Þ¯"a÷`÷÷r®oß”RÎ.;c³¼C÷BzgŸæ�£„$OG†v#ý·9äØOòv÷æ>øÃŽ"ÏÈfK%ý;ö“^•¨_·GÖR@ÇPo¿iynXî‹M^0Ôãórý¡“³½zÄc¯@ )ïªú|v°˜’äñNU}P‰ƒŸúŽ e©[Þäºú|ùŠð~˜WÕÝs•Ç “„î®rÏþ]Ë)Ý3ø;Æ¿…÷} ¡¯á°m¿œb},ÙÖWS(fc�¼»zŽl¼ìƒ@‹ø“gÛ·ÉVÅÚó3=ë¿¿ŒVí%`’÷‚ä™ðí á墵ÿ¥nðÏ(!ÙÄ^4Öö¨’pášüt’6Y!3ÏÊó²ÛWc!‡qW´  7™rÝðFíë¬vó¶¯.ôÕHÿлÉCL½‘¯�’n+DôŒöH–Õ“±�,/½fãÛU¢Èóƒ8äµípv|‘l=-Äp$Ò2Ý$;îòXyIb¨.Nâ}U�]¶¿·uiÙÎ[ÄËI„¼¦>©TyÕ®ÕµëhÐü"TÔÐ[Ž á±O +érRˆSš±™ƒ¿ìš¼°°s7$íJo§�.'µ]-Œ�J£Už]K×üešºÏCñ +í²œ%y‹ñòýëž,c¯)/vãÄË)ððÄI~:…¤´+P¯•#Ñ/ãr¦i/“šrW\³ÓäqoùƒŠ0¨‚<õ‹åaRr;¯æ$⛃¼WÒJ�uXÓ€å4Û.ê²) ›]õe3)ítG롱uQÙBOã©]©{²V7Èa]?+W"u!0Ý$‡aÊO;ò”3 W 4&‹v1÷0Æ�ä8°ói%§±ãVÞ¿òŽq›ïÄK l|MÓÏ}’Iv4¢Ýœl!NÁ +“> +endobj +319 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 728.673057 101.433071 709.923057 ] +/BS << +/W 0 +>> +/Dest (cb2-1) +>> +endobj +320 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 521.926036 101.433071 503.176036 ] +/BS << +/W 0 +>> +/Dest (cb3-1) +>> +endobj +321 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 136.679014 101.433071 117.929014 ] +/BS << +/W 0 +>> +/Dest (cb6-1) +>> +endobj +322 0 obj +<< +/Filter /FlateDecode +/Length 3538 +>> +stream +xœíœM�Ç †ïó+ælÀeV‘õlÀ àÀ�‘Ãz"ÙVäò÷ó²§ë£»¹»’v7¶¢h!iš¬®b³XY=ÝëÏ„ŸÏ=þ)â])5'9_ޜޞÈåHø³´Ø,êïñ7dz'É.úšJ<¿Qg—k 9�ïNøgw87¿;ýðÙéŸÛsü9¸ZSðñüë+U »\r¦h¨*TäÙPÅèr1ªä.±VK3b– GU†RK´T0CB(†ªÀ –ìù¨ª0#d/– +fø³¡ò;| 2u0„D8:]‚Ó“¥ Þ¥RC5u:Ÿƒ¥cv)‹�ÞÒU—RŠÅÒ l‰•¼¥‹°%z²t°E¸dK—` '&S[BÉlé2l ðN5t¶ ºŠ©ƒ-”È[ºÊ.Ö"bê*tTr9êE 3Y:ï]Dl²©ÃŠÂ$¥lèlI«©ƒ-‘)X:†-‚KNDÎ¥«5èêfboé"l !‹©ƒ-˜|‹!ÁÊÉBV�S.Y 9;©A,„ÂNŠ‹¡T'9³…�P£“T³Å&]ð˜`K”d‘€=l¬\S[¸ŠÅ° ,0Ö l±€A[A´X,`àV¨z‹ Þ +ùd±€\˜I Äå’Äb¹¥j±€Á\;-0 ‹åž-0¨Ë1‹ ì²”d±€Á]O ÜeÆ™¦¶ €-€ŽŽ}a‹î²§l±@À],£`±³ê‡ÉbbÅ…RÈb�€»¡�X,p7d¤S—Ö [,p7D\‚•¹ÁÝ)X,p7HH (ü!³w��h—°€µX€|]`‹èÌ”% "¸ë+ÒŸ±¦A+çKM "¸ë ¦ÏÔUç3muÐ\‡Q\o²©QHwúç|ü°±†~¿ÖãšßÙÆÇ?³‘ÜÆE™ƒ¥£ÃzT‰!2àsG UÖO¦¾ç)Ïh0adž ¡ × ÈÄ:@±K²iüõÍ «gµâzc¶zŽÍ|€;t ñ|óæôÅw?|õÕÍ_Û7¯O?þMo‰¤|ù¹Ç瘯ÿKZÿ_�ýßo£ý &%¹¬íV½Ê"¯²¸žS¶mú±_ûÿÛùæÛÓ77c�襦õ“ú{ï´Üo¶*€çXèzuýãW_ÿéÏãê°1DïÚ+þêÿñ:ŠÊ°Äë0�¤^“××6°f< "*ŒÝ€?.Þù²Ù» Ô8-n�O±A/�DÚ»�ò”H{‰Ó[­DØ“£ËŒìÐi²«N±�*EoÉúPÌØ@IˆYÜýŸ®1zDn#56ùWKtcä§Õ^¹äkÛ%Î4IWÊè_ÇŒÃv\©ëyõÚ^c´�ËklÇ©¿´[Y—cŸóÊ\ì�¯% {çëXú¸®Šwq|˜¿øZ+¸|ý»ô†—cÚʺ=mý¶ëÊ«ì²ú+¯×XÇ9ôæO¦¹ÊSß4æ¨3àrXïóµh}¶Yï�)iåÅëk�s?‰µ8×ÀÇ~ö(ñÂðõbw›Û×ã:—¸‰mþ´·¦ûì¥qÍK¿2ù/\¹h\ƒ~a�HBªFß‹Íi°3¦áÛ>·ë<.cÔ§ÛqgëuÆËê|¯t=®º|=§ùéçÃfÃ";¬Ói-¾Zç/{›-ýÒC¾f¿÷‡´¸ZsÊÖ˜×5¿ŽÛÖxˤiØßú½fÈ1KßéF¬}[×ßüÖûNÊ¡/ßy•cßìh»Ê-¢¶ÈþˆÚÚÞîÎiÑÑèøÓDWnuÏ®æy’rÞûøº’Vû œfÑûtÏOEý¦‚ž�ŠÇ~^†Šú�Å=ö>™ŠÇ¾?m*JÞûãS¢¢~$�S± R¼;�ÒV·DËÚwóŠŽñû¬AßÃó¼÷üÌ8íùã­BcªNž�·Ç~^†·‰â}ö>™·Ç¾kÞ.,¹�Vc»ÖƺË.žÂ6æ¿^&ŽMÇ×ò ¯ÃÞ÷ñ³Ý±|~ß +WÙÆÞÔˆ2ÓäH’G‹üõÄî±ë2åµFŒ´Ú2ÏÙÆg�å)ü³÷[#Q³‰¶ù¥ç”‰¼ó5íçnqísÎ;—1Æûä˜T¢+�ç˜ú?�_~wy¦½ïyvå2ıŸ—É9×ûì}r†8öýigˆ\÷þø†x— QüÁoI†(‰\x“ž!ûy™<¤ÏfÜcï“óбïO;Õ¼÷ÇKæ¡=w›O&ŽM›ß.W=èÏzð§ìrÐoœ«¾¹YŸÀXÞþ¢sô¼<‰˜hz@¦þh“G¾ù>>NÓžÿ8ëÏþ«íáÓª5oÖgäƒ`O˜õé/ë+c]º—Émúê”PÛv+7·2¨‡—ê^­ˆ§uɶi} #•‡]H´Ïû)\Æ»K·Ý´ÜôßBq²g3•:fl×p˜¶·§´<µè—'×)烾چí³c�‡zÖ'% ±ø6M~q¬?ßsæòBàÛÞj}G�ôµ}dôúát°¶»Lðdrq©åîå}ZÄ%´ƒ!¾;éû\bˆEFðˆX…ëGê}‰ïõD“]NúPSÝ·äèhý8Š}zâú1Äv5z~l§ésvB­/Oš]6„83ù£X¯žœ_ÅúN\q¼¥nJLÍfG‡2·Ž{¦I�Bš†â ͯÏPw×¥!ì¦Ï®óÓô·¶!OÓù�ðr°¼—Þ™R}§uÕ¼¨Ëx2ªvil-û„HŸ'Ct9ÂÏ©u-˜Ì®ŸfMŸg¾ +K $éíjkgˆ.'³ÝÚ[ì3•{«2N­ÍóÔê\ºã Ùe*̳¾ä;­âöq+Ö«Ï5•)nÂAx9¡“ƒøî³Ñ:VPl¡7 yê·‹ �xÒ\š«°4›LŸÕ¯¨ˆ]ªäY>è`¾u0�AtmvñÖI³߬ÂÁ|98,CÇ#%Ÿ§.q¤MGJ‡VÂt"æNq8 X‡e35 çAºëÕ~™§‚u¬é`*#ô�‡NFš�»n²å*¦&(�y>˜;?Z7öFðòzò¼¯&§¶TÚÑÞ¥w³´_˜J;ðl)/‡i{ØsŸõ -Þá¡ÞOk�{‘3–Æ(-ds0Çè$-ã´µAœ•&Û ÚEÇdÔd½ÇÜlJëiÍ-ËÓK¹×CúËìé8ÏJwbœg%Új¿-ãõj‰{çpÎãêh´ìµd1di>»Ke´ä&;Ž-Û±[¶=O—!Ã�4*S§ÅCËâ߇¬�ë9»»V«ö³Ü ñe¼„D->sàåw¼PI }M7K™n�¼÷9ß+9Þi÷Jæ‘0N˜){ým=¶ wPÔÇSWí7ùاU2/éýpï›UG…Þ Z~]ÃòªÄrC¨fÝ*êoga-z‹¾TžÉ~Óäú�ûæöÉòó Ž ; +endstream +endobj +323 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 322 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +324 0 obj +<< +/Filter /FlateDecode +/Length 4631 +>> +stream +xœÕ\[¯$¹m~ï_ÑÏV+‰Ô 0XI~00�,ü0Óžµœ °ÎCþ~>ªJ—ªfwÕ9sœœÌAOw‘ºPù‘R©Ê]-þ¾sø/³39—ùzûåòëÅš,þÕ›‹Êþ#>)\�åd‚+1‡ë/B dR >ÅëËÿí.çâ/—?ýæòŸÛ:îêM)Ñ»pýûWa1™”S²Aa°¬#…‚Iɇ¨°¢3b) b„ÄžïY bpÉAcA ö>+¬ 1ˆ“£{V�>9ÖXÕ�–³�ÃykU±Ìäž &BéQãygb.¾¨¼žK^㙘اñЉ1†¬ñ²„b�Æ �%8f«ñ SN/BŠdUdñ9‘ÆK�ÅC;EáeÈëÊ*²Øh�Æ+dBÉÌ*¯€gsÊ÷%Ãų>“áÌYCŸ‹á”Hƒ_‚áX’†dxÞi@@²Ž�ƒ, ÏUy�… +kX@² €†D�Å3iX@@[†µhX@€[¶ÅiX@À[¶.jX@\ˆi5, .åÈ ¦T4, `.;5, €.Ü=iX@@] +ÑkX@€]â5, à.±³0p—5Ud�kXt4ä2iXÀÀ]r6iXÀÀ]¸‘×°³j`‡QÃØŠñ9[ ¸ë³e ¸ëB€ÊK>H0p× A‹ÜÀ]¬×°€�»ž}Ô°†b€?VÍ€»€� §�«aâ=xž4,@cÆ#-Ѱ w]AøS|he\.QÂÜuÓ§òŠq WüZ6.Æ¢aAî"P‘†¸ øÌã "ª×° w!Rk<à®óÅjX€»È‚†0ã�hX€øfœ…骼blÉYÂÜ,y …�Í@•— ÉiX06y¨†¸‹ð^4,ˆÀ]ˆ4,ˆÀ]ËH{Td¡ì5,@^ÜVñi$«Æz …ÆîZ‡ÖxÀ]kSѰ w%ljX“|Ö°dÁ^˜ٔ”¢†±Xð�ò©¼hp4,H„ÈRy�…kX€ÄÚ*YÂä! y¯aAò�)ƒ†ÈLqȾÕåd�¹¨ë†,È5,’™\˜5,H!b=­j¼èMN€k•—ÁsIÂ”Ø ; °–2N¯aÞHº¤aÄϱ†©@¸Š†E&{dæÏA$Ù ÓÏ9 ²‡,È5,È>c•­†ˆÐXKBÕ�­¬3³†™£‘TQø Vš@J•Y`~d±4,Àâ‹M,sTd¡Àäìe¹™5,Ȳxë5,€mÊz3iXP,dAƧaA±ÑHš¬a`ý|ùé·@)ÆÇí¾¿üð�û­äOp“¼ünýŽëw£k9/e1c–׺PP½¾£¯e�*ø]Ûii¯Ñùçõ“:ij²RÛv£þ<•qzÛ\Ö~ñÍ·Ñn•¯•ý¼«³¶ÙÆÜÇ€ú�~øóõÓïOÍ@™gà§Ö@Jîä­Òš`õzRLÿF÷—Ç<©g¿`yš°©Ý®Ì´ôÍRç¶,®#ŠóPÄø±•ÍÍu,´@¥çE±‹\÷í`5�È_w—îÚYq�mÈ^å¦åS'ì¶Ln�ôÐ&ñ©¼1=’׎1×v›n« NƒìFF‹¥}QÚ®2ÇUM'i’]DzÌ>¥Ù¶ß>´Œ3ÜVýà·ÿ*N¹òÒR§ë_<äódCm¬¼ÎÍmç°~’kµ…ZÆ­rO×µ?~ªë¼×Çâˆë˜šã}^ut�?rR¡ÍòÎmà8 0š­µºûö_%û:Ÿm®k¹¸Îñ<¯U¯Ïôéí�>y´]‡I¦Õž»>ærI×Ù<¿ k›nðÛèùóà'[æyƒ~jȹýcÃ�xMkƒÃíê›§NÈLk]7{Ç¢NÞº SI³ìWh1îµø¶ 5ÛèÿÇøƒ�ÉïîÛ¹÷×§rÈÍäP\¹o»aÿ�O~™ð±YäÏk?Ÿw>¿ÇÁi~8ŒqÏ5ãÚ]F¯}·­áãòû©nã~ü¡µ1cT\ésŒ·¹ËÞõ Åç5áÔ°nE�}ü‘:_Öv¬9Šô1Åé·ÍG“§~ÍXëmÏ{†? Z­ãŸê,ïuÖ-J]|]ýcƒ~{ä[ÊÖ±|]æîy¿Œ/šB¥Ö¯o¹F›ûU~Š«-†�EüT�BPÚ·kâýOŸ°«÷�)c•ex´[Öbk1‘õ 'é`Ú×o¯¯ó¦åÛºjÃúТ(˜T¼ì%YlÉ–ï–raú¥wÔåÝhãû?üéÇ?ýÛXË5sk�©N¡¿wÕêæ~k–Í$jù–x» xâ +µî—i +ä˜D_Ën(J,¹±K”¯\6â#ó¼¾ÎÿÎpëu™‚~é(tyCžL�•¬‹W/Ê»&,ßÕC‹Ê-z¯ô<®C[²¶²¼mïá4$–M„Ú#í?-ú JßöRän¶-¥\ƒÜHȹnŠ?—ì\�wÙYyé‚q׌ t� Dà°…¤ÛvR7éØÎpzYj©Ô¨£¶³3Àf\<ÕkmÌ©ÞÆïðm[s öLô»uj;Ⱦ“9ÈÜÚ»OCW§ûËq™Mh™§Tvæ=É]3�Íbkæ{®Êÿ5ª qáb™ÉÛ¨–2)K”¨«‰‹ÜУbë9�x‘ü‘žÎÕù8ŠŠlä�õO½û‘GÔ�‡fíeëiËòrçé;o눰ó€nÙ}é9yÜŒÜvV·ßOe.Cž^o‡,/v»ëôÐ`Ò/4�YÌ&"¹ùÜ\ÎÔø8Æ’%†e9�¨‹7°!ÃðÄ»”A´žø@/çª|ÅD'·�É}æE³Eõ˜·‹ÍÛ2âN™>È]UNXV@5.Ë9ï#mž«óqÔIEÈ‘žª³Ò²çVWµ¶­.W”Ï:@,«Â]:Fåï@©¶ùÍ€ö`ZƒrI.¹³ÐqªÆÇ™R9œbÌô:èH Ú"ç r4u�‡ÐqªÊÇQL¤ÃD>·õnG{¸x#Œ¤åðs=<äÔ�,-aNÖù0ªMòEö6ñ)éª [•6×n�²Ï96™½®l¤Ì«œÂ;‚êçEßk›‚à +TNGÈq ƒ<ÁëH²su>Þ6ÅhÄ¢nr'„Ö{ rw„òº˜]=ΧµLX£K�6¼*%9B9OôÓ¢ï5ÑYŽášéJ˜4S8\ê�¬óñ&ZÊÙ¾ôE_Ëù×m(ú*Ÿu³öaórHÏÙ\Ü®ùyëöqí Ã’‚Z;Õ.²™%§¡µÚrÛéëëÌ7Úƒ}Á,»T<½E^yhÆÁ²‹®h�‰�¬éJÏIO0WEU_‡ý×Ç)YŽjc?3þPL}D0«ý×}T|ŽZ©�øà¢ÒŠûzb$X-Ùv¦ ´ ­ŠÛí«=œeŸLJÑÊ U’Ãþ„…Ãzœ«óa’yж”ƒýïy�qèî1ëR ¿kö'e…°ÜGk)Ãc—”É,¶Ä¢´y(‘ÜbÙSk‡ Íäøwæä!ˆœH²X9 šåøæsë8UåãG” �=ëåÍÆ±iv6ŽðåÌ>SÆ"ž�„`V]’gõê™õçŠ?Uåã(¾ c�_úM‡¾…§ª§Xyˆ–åÁ�#´z^ô½²°â³<9�¥È58oŠÅ/:’ì\��—…y4Š#у©ûÆ,lÛük³0¥¶ÜÎÿr£„ï[»-ŸÍvÒA»$�‚ã"©ãZVð´'-7^$Ó»?òÛ>“Ùxü,RëÁø_ŸGÚq¬éa"cs.&zËœ1Ë¢-ÈÃJm>‘ Ê�íP\Ògý°ÿä Ò&‡Ü[©ÞéþÜQF(Šó6ê:<™QàC�c³¦‰SeDQß  iã5¥<‡7Fz{>££”Ûªò0[±ñtJy²Î‡Q½³NŽf1;Ý1ï’Ê?®O‚Á l=#Oðǃe]-‡E´PÅVŸèºº]Î&£G Ѥ¼ +«íä“<5©=%OqÔðÝî'”é¼úšŠùv’Ò�£wýdiXŽßµ¤¤Ÿ€\OèŠò„^OKNO´ßûÓüµ¿õ¤=Ê·žØÜ´ßNñNòlN¶JŸ¡�á‡ý´ýz‰õi_Wßø`á,HóK–ô�d6©\å ãl �q�&Wë®jÖiýÚKÉÿ Yy݆> +endobj +326 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 507.723057 101.433071 488.973057 ] +/BS << +/W 0 +>> +/Dest (cb9-1) +>> +endobj +327 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 488.776036 99.933071 470.026036 ] +/BS << +/W 0 +>> +/Dest (cb9-2) +>> +endobj +328 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 469.829014 99.933071 451.079014 ] +/BS << +/W 0 +>> +/Dest (cb9-3) +>> +endobj +329 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 431.934971 99.933071 413.184971 ] +/BS << +/W 0 +>> +/Dest (cb9-4) +>> +endobj +330 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 412.987950 99.933071 394.237950 ] +/BS << +/W 0 +>> +/Dest (cb9-5) +>> +endobj +331 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 394.040928 99.933071 375.290928 ] +/BS << +/W 0 +>> +/Dest (cb9-6) +>> +endobj +332 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 375.093907 99.933071 356.343907 ] +/BS << +/W 0 +>> +/Dest (cb9-7) +>> +endobj +333 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 356.146885 99.933071 337.396885 ] +/BS << +/W 0 +>> +/Dest (cb9-8) +>> +endobj +334 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 337.199864 99.933071 318.449864 ] +/BS << +/W 0 +>> +/Dest (cb9-9) +>> +endobj +335 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 318.252842 99.933071 299.502842 ] +/BS << +/W 0 +>> +/Dest (cb9-10) +>> +endobj +336 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 299.305821 99.933071 280.555821 ] +/BS << +/W 0 +>> +/Dest (cb9-11) +>> +endobj +337 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 280.358799 99.933071 261.608799 ] +/BS << +/W 0 +>> +/Dest (cb9-12) +>> +endobj +338 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 261.411778 99.933071 242.661778 ] +/BS << +/W 0 +>> +/Dest (cb9-13) +>> +endobj +339 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 242.464756 99.933071 223.714756 ] +/BS << +/W 0 +>> +/Dest (cb9-14) +>> +endobj +340 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 223.517735 99.933071 204.767735 ] +/BS << +/W 0 +>> +/Dest (cb9-15) +>> +endobj +341 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 204.570714 99.933071 185.820714 ] +/BS << +/W 0 +>> +/Dest (cb9-16) +>> +endobj +342 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 185.623692 99.933071 166.873692 ] +/BS << +/W 0 +>> +/Dest (cb9-17) +>> +endobj +343 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 166.676671 99.933071 147.926671 ] +/BS << +/W 0 +>> +/Dest (cb9-18) +>> +endobj +344 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 147.729649 99.933071 128.979649 ] +/BS << +/W 0 +>> +/Dest (cb9-19) +>> +endobj +345 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 128.782628 99.933071 110.032628 ] +/BS << +/W 0 +>> +/Dest (cb9-20) +>> +endobj +346 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 109.835606 99.933071 91.085606 ] +/BS << +/W 0 +>> +/Dest (cb9-21) +>> +endobj +347 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 90.888585 99.933071 72.138585 ] +/BS << +/W 0 +>> +/Dest (cb9-22) +>> +endobj +348 0 obj +<< +/Filter /FlateDecode +/Length 4926 +>> +stream +xœÍ][�$»m~ï_ÑÏެ © `àp8ðƒ� Œ ÈÃîœÁÇyÈßÏGuéR]œ®êÞÞxv0;]¢D±$ò#©R©ÝÙâç‡ÿ29“sI‘Î/¿œ~=Y“Øâ_­±º¨ä?ã7ñÙYJ†]‰™Ï¿HAH&ö)žßNøïêr®þvúËoN_·qgoJ‰Þñù_…DÁ¤œ’e…T@².($f“’ç¨�¢3¸ÅR4ÄàDž¶¤1¨dÖHƒ¼Ï +)CŒ@É…-©@ Ÿi$ˆá +'…ä,äpÞZ•A,Qð +ͱ‰ô¨Ñ¼31_TZÍ%¯ÑB01‘c§ÑЉ1rÖhY¸X§Ñ²°#² ²PÈI£EÈb°* ²øœ‚FK�ÅctŠBË�Ú•Ud±Ñ:�V‚á’‰TZÍæ”·4oÙpÁj4ç C7ƒJƒEa’bRh²DËE¥AÖk´Y? 8Á!å¬X«ë68�Æ�ÅûD* ²`ò5ð²Ø5€Á% |J†Š' |†2e |.†R + øÂ†bIë@óN‚`! SÔ� 8ÈB°\•YB! ‚‡,¨ aA�ÅSа m Ú¢aAÜ’-N¼%뢆€ 1­†ˆr$  ªT4,ÀÜìÔ° taîIÃ‚Ô ½†°(G p7�³p7´Ti� +¬aÐÑ—ƒ†Ü Î& ¸ 3ò`V ô0jX]1>g«aw}¶¤aw}‚ PiÉÀƒ†ÜõŒ[Ð<7p׳õpד�@Q ðǪÑpÂz8Y°À߃惆`f< ¸ë +ÜŸbÓ@+ãr‰0p×eLŸJ+Æ%Œ¸b·eãb,0pŽ*hXÀÀ]ÀgÖ°oàQ½† ÜužZ£w�/VÃî"n`  Æ!аþÍ8 ÕUiÅØ’³† Ü,y à…�Í@•– ÉiX06q¨†¸ ÷^4,ˆÀ]Ë!hX�»–ö¨4Ȳװq h0[Ŧ¬ë� ¸kfX£w­MEÂÜ·©aALRೆÐ +öÄL¦¤5,ˆÅ‚†�O¥EƒkÖ° Y0 K¥AJ¤akSBÉ$Y‚÷$Y2hX€ˆÀ‡è[M ÔEͲ RÔ°Hfr!Ò° qD>†QÕhÑ›œ×*-ƒæ’†)‘�+v —2F¯aÞH¸¤aÄÍ‘†©@˜Š†pE&{DæÍAÙ ÒÍ9 ²‡,ˆ5,È>#ËŒVÃxhä’j�FVò̬aA¦h$TÔ°f‚LH©Ò `BÃÌ�$Û¬a’$›HsTd Läì%ÝÌä Y¼õ@7%ßL YñiXPl4&kXÍZ ŠËÈ7=iX»”|3kXP‚E¾‰O±Û¢ä›IÂB�…¢¨4È‚ ©(v LB¾ tÒh²øB”%ßÌ Ì@¾‰ˆ^]È’o&u¹¸ËȤр»ˆL£†¸@¾‰ÈVËí-€—â3�˜%ãÌêŠ�ô2|«ºd`�½ðVI]3°_É‘ÔEˆ‰Ì2GuÕnDgÕe üEÍKTê�à3s’›,0 BtßsŽQ-¼Sí²>ö�¿ž~ûÎ÷ü×ÿ9½þ¦®”µå%±f1_0Ý€+SÙ2ôD…1Š„ð‘6"D*CHX\ÝDH¸b¸ÛrîÜZdH,2;3õÎhÃT…¨Ëzw›'É:ÆÑ,òwï�� A7|�8vm\¶yú¸ÎýŽAÒd½»ÍÓeMÈ12Y×ýªBîUÞ•.È¿óöÃŽ�ÕÉr¯ò“… }­$¸H/À…”L«ù¬î½e6„˜ÙÒ™ÁŸ–Xv<Öä’b$$ŠŽ¨Š—¨®ù"ºž+ÿþÓ héþòl£_Nr ¶K%ÏŸ~9ýöOùé§OÿŽn?½žþówÖrüñ'Óå/ÑúÚ¿à3 ªcÙ/e¯¸~Yê -/Ÿ^^DÀØ/?þ×ùÓß—Ñ– !eº’rW°Ûle Q3òº-[¤ž"[ZØÛ°#c¨ÏŠHbÛ-3Y�Í—AÆò9à×ý|ùì?K��¦‰@‚!EÚ½ÆAž19ăJcL½Lap—Û á"!:Km:ÓRwíN‡²4Y‘o;”§5öç=,ëSˆî•9·/—Æø´6=Àò [J9{àDÛr;æz°ÍCöú=ÌɶA[L¦n§Ÿ3ø2l�^—¿y×$œdLÎæâ®::¤eN°úÂZkæIŠÉPißP=bd'ë(Y•êb©�ÿ®”˜SÀÀGMÊgáÜZˆv˳NíŽÜ×#x“$‡Ë5×Üp EÚ*¡n*HÅ·—ËSäÝÄaÏT޵ù8¦ÂàGÁ[Ý¥U$ÞUiðˆÁfIAWìê0—;œØl[NÍ(â0ß1y‡ cÃsß|]CçZëÅ+<Óñïz�Ù,î¿ytV"¥¢µæ×; ê�¾ë#6Dz„³�Ý6†ùÇ£± 9'�2y£Æ«àäŸáø>Ÿ+ø¼>Dy€ï’ª»]YÁ¢=N%›Ùéûž_�HPr ÅÞVÇÚ|°JòLŸ‹õÏ«»jáΨ{¬ ·'Ö†ç]€µmýϬûïg¬í|ÝXô=Övv¿ °i¬-ŸGë}i°vÓ® °¶œÞ¬,ë¶ÅEöÖ3nWýxZõ"»¥²“$êL)(Ÿ#ÙÁ6o%Ã{Ä©ÁÉö½g@éš]5�–X• ·ðU~÷82¶È“w…ã>ôYoR±²–¤´>´ˆ2 W¹#¾ËëyÅF³‡ÓIÙ8–æX›¥{Ù(Ûhò ×rÔÅÄl,bŠà¯Ø>ìbÄcSFJUŽ¢ëá ¶­÷ŒaŠÍ•Öi�¹ëÞI1¨$ëz�ܽì—'àk­é¬ùìªõØk59Öÿä*•{ë›-gédý¼_gßiM®A¹ü–å÷˜¾.§‡k‰6aäTûÚ—Ú”KÅ=2›Sþñ 6Q4˲e‚6Å䲎|Àþ¼_gßAB›Ä¥¬ÎÀQ�jõå +«p9äâ¢<ÕŽÌI�»\\¬"]’u°¬µ´û<ø`›�ãâ0ǘÃwÔÕ�¥¤5ûç,%myÞ³”¤´æ‹ãí�¨^õ¬¨ÀFMr’ýg²·Ù} ¡®ŠÜÖ’CM>Œ’È›=Ù˜åwQ’5ûYIxz®9V¥®'^Ø ²–�»ì�‹–·3Çš|œ ðœ³GìüÔ@tͶ=㪮tÈðòu÷ûá�>Ôäã 4Ë–8$(å)‹Ikv+øÓ@Ft!ËÎK &nÜöGýX›�3ìI^'MŸ¬ß+¶ÏH´¶ïI´”Öw$ZJë»­G$‰Ö#w?-¥õ�‰Ö#ý�DK»÷ÿÿDK»‡ƒ¡ñ´’¶år(4ž­-‡{Bã�³‰lcÝLp04>ØæÃ€YyÇÈÊ»ñß#êY³Nh¼åyOh¬´þÆÐ˜\0ׇÆÇš|%ñò¬Ìgæï£$+ö÷‡Æò>´Kц|8b;ÖäãL#Ô)ÌlŸ:¬Ùî‡ÆÀQ#gsàÉ+qu“Àí�>Ôäã ´¼‚žô)¡ñšÝ�GnÉ— ²»·+è`›3Äl�}Ÿôݾ«}ž¿;¼ûtÒêuÇvùŽ=ÂÛÖîµý ý€ S®´Þ¡»TZ‡}D�×=û‰Þ¿¯kC`´/‘ä5ì½Ý&·«~ƒÚ¯{!X��ÙÛ}�nV}H [ïóÈ rÆ�“VM};l2Ž5y†¤O†9…Ë9ÌH…ŽÇBË:VÜ ÛÖ<Œ«çWùXXÉEŽc«o†xÌÙkòaGzîïóÒ«Ð⥷:þ‚ƒîg}Úä` xcyÝ�’œùäÈîE£Ûü³'Ž»¼HZk�Óí°í’—¢f[ÜØç²«¥½�Õc£) »v7t½:ñYqM|Åwv_­,]Ñ–6}S—{wÕ#µU�õ°ô=Q‹ÂðuÏy¥wKVÚÎÞŸŽ+Nás5zU–xu‡¯w™T’C«ä}¹ ›Ôb:&óIËçż_®y1-z­_Æyt*i ò\sÝiÕ±wÌ0ÞLÉËÑ[!Ô#YnšßÁ6»æwãEáïa…)¦[V(‹w}ϲù¸[A5tÒšÚ]-‘H=¾ +Ø/›™�ôýãq­Ë6ßÒº®Qiknö0i]]âY´-W9¶‡T8'wÕá-�“Seí ù˜Ÿ>Öä£é[¦|Kßnη:ÓÈ ìÔg¿œç÷™�[ê¼ÃO±§¿ ÅÃÐE?VyW:Þ_Xtç¢Ëñ]Áª|©ë¿Î˜¼è�~š>^�nÈ–¶’lU;‹SÛ%ȸxÂ…FƒO­ßh¯“Êâæ¡¼¼>3õl—ðæÚ;¼Ì©¸‚t5‚q}÷môftpò’BºüVº3Q¯íº¬óæõhV¾®‹£Ì@›kºCoü¦ðåÄÔ-q¿�8)µy`…å¦zsa˜øöâl‡¾ŒRyAïò ¦ÙÊä\6ùÿÜKyêG]¥älÅq5:ÛìÅëAšËcGÒFÀQu§ár)u��ÇËe«ÔÐíµûˆ­J§!›ÊSiâ HuðX»®u½X ¬�OÇʹÐ6!ÐÝ(æ®Êo«â!'wSeÛ;‹nRwî|GqìØù6§>ãNÊìòv¾“η—êØèºXT?·NF±<¬iêÓ;› +‡`…Q<`ô­7kíè$‡ÿ·�ÃÈ4�ûrúÛ©º9ØË²] NÎ}ž£,wþ_Ôù#~ÿûDç?µƒ/~ÜÛŽ¾cëªxödò-ù`±|k@+ìf3zš`»<êrÓ†îǽŸðšFs;€½ÕtA]§Î…<Æp*ö]u½ ÓÈð�—«Qì�Ì·ÎÍpØ—ËÐnÝ9¢²I…‹ùvp™- —|žXâJª—*ù©!.f¦¸œ:,C²•˜¢�s'}èE~š§"H_ÓÅFÈe4nvfÝÊê]LU‡ùbfLnî´¬äQ„~ؼ¾yÞ‘c³)íÐÞKßæÒ~cRÚO/ õ2®/»Ï uÝ´ï¡Î+L¶z�3Lc„´º˜ut*Í£ÙR�çN©•­:mŽ¢ÃÊl+ëS“).ÍÚ°Ô;Îê(¥SŒÒ¿Í#Íó¬ôAäyV⦮ðm¯GK¡@<«swgGÍKf¥,έ{)�š¡•mû¦ußÍÛž§Û !H‘©ÍxSó!ü{Äv.m®V´Zí§®„¸<Žæ•ƒR] +>Ôo[²9Fw®ë«œ(OK#w·¹½V²]ik%sO˜C!Øää{³tÞ@(û„‰UûN-½™<Vné¾P–‚ÌÙÍJPý┺]„ú¥<¸ñò=IA‚Þ,_ï�¬{-÷Ëjù¤þü·ÝÏÒ +endstream +endobj +349 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 348 0 R +/Resources 4 0 R +/Annots [ 350 0 R 351 0 R 352 0 R 353 0 R 354 0 R 355 0 R 356 0 R 357 0 R 358 0 R 359 0 R 360 0 R 361 0 R 362 0 R 363 0 R 364 0 R 365 0 R 366 0 R 367 0 R 368 0 R 369 0 R 370 0 R 371 0 R 372 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +350 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 799.173057 99.933071 780.423057 ] +/BS << +/W 0 +>> +/Dest (cb9-23) +>> +endobj +351 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 780.226036 99.933071 761.476036 ] +/BS << +/W 0 +>> +/Dest (cb9-24) +>> +endobj +352 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 761.279014 99.933071 742.529014 ] +/BS << +/W 0 +>> +/Dest (cb9-25) +>> +endobj +353 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 742.331993 99.933071 723.581993 ] +/BS << +/W 0 +>> +/Dest (cb9-26) +>> +endobj +354 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 723.384971 99.933071 704.634971 ] +/BS << +/W 0 +>> +/Dest (cb9-27) +>> +endobj +355 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 704.437950 99.933071 685.687950 ] +/BS << +/W 0 +>> +/Dest (cb9-28) +>> +endobj +356 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 685.490928 99.933071 666.740928 ] +/BS << +/W 0 +>> +/Dest (cb9-29) +>> +endobj +357 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 666.543907 99.933071 647.793907 ] +/BS << +/W 0 +>> +/Dest (cb9-30) +>> +endobj +358 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 647.596885 99.933071 628.846885 ] +/BS << +/W 0 +>> +/Dest (cb9-31) +>> +endobj +359 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 628.649864 99.933071 609.899864 ] +/BS << +/W 0 +>> +/Dest (cb9-32) +>> +endobj +360 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 609.702842 99.933071 590.952842 ] +/BS << +/W 0 +>> +/Dest (cb9-33) +>> +endobj +361 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 590.755821 99.933071 572.005821 ] +/BS << +/W 0 +>> +/Dest (cb9-34) +>> +endobj +362 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 571.808799 99.933071 553.058799 ] +/BS << +/W 0 +>> +/Dest (cb9-35) +>> +endobj +363 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 552.861778 99.933071 534.111778 ] +/BS << +/W 0 +>> +/Dest (cb9-36) +>> +endobj +364 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 533.914756 99.933071 515.164756 ] +/BS << +/W 0 +>> +/Dest (cb9-37) +>> +endobj +365 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 514.967735 99.933071 496.217735 ] +/BS << +/W 0 +>> +/Dest (cb9-38) +>> +endobj +366 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 496.020714 99.933071 477.270714 ] +/BS << +/W 0 +>> +/Dest (cb9-39) +>> +endobj +367 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 477.073692 99.933071 458.323692 ] +/BS << +/W 0 +>> +/Dest (cb9-40) +>> +endobj +368 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 458.126671 99.933071 439.376671 ] +/BS << +/W 0 +>> +/Dest (cb9-41) +>> +endobj +369 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 439.179649 99.933071 420.429649 ] +/BS << +/W 0 +>> +/Dest (cb9-42) +>> +endobj +370 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 420.232628 99.933071 401.482628 ] +/BS << +/W 0 +>> +/Dest (cb9-43) +>> +endobj +371 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 401.285606 99.933071 382.535606 ] +/BS << +/W 0 +>> +/Dest (cb9-44) +>> +endobj +372 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 340.338585 101.433071 321.588585 ] +/BS << +/W 0 +>> +/Dest (cb10-1) +>> +endobj +373 0 obj +<< +/Filter /FlateDecode +/Length 4729 +>> +stream +xœÍ]K�$¹�¾ç¯È³�ÑH"õ cÀ»€>è…±øÐSÓmcQc`¼‡ýûûQzD$3#ª¦f�]Ȫ RE~¤!µ»Zü|ãð+³39—ùúòÓåç‹5)Xü«%6•ýg|R¸:ËÉWbן„@ɤ|Š×× ~í.ç⯗¿üæò�mwõ¦”è]¸þó‹°˜LÊ)Ù ° +XÖ‘Â +Á¤äCTXÑÜb) b„ÄžoY bpÉAcA ö>+¬ 1ˆ“£[V�>9ÖXÕ�–³�ÃykU±Ìäž &BéQãygb.¾¨¼žK^㙘اñЉ1†¬ñ²„b�Æ �%8f«ñ SN/BŠdUdñ9‘ÆK�ÅC;EáeÈëÊ*²Øh�Æ+dBÉÌ*¯€gsÊ·%Ãų>“áÌYCŸ‹á”Hƒ_‚áX’†dxÞi@@²Ž�ƒ, ÏUy�… +kX@² €†D�Å3iX@@[†µhX@€[¶ÅiX@À[¶.jX@\ˆi5, .åÈ ¦T4, `.;5, €.Ü=iX@@] +ÑkX@€]â5, à.±³0p—5Ud�kXt4ä2iXÀÀ]r6iXÀÀ]¸‘×°£j`‡QÃØŠñ9[ ¸ë³e ¸ëB€ÊK>H0p×Ü‚¹�»>X¯aw=û¨a Ŭš w!AO VÃÄ{ðçÅèN±e}쟻|ûÁ÷ú·ÿ¹|ýM])k?ÆOëÄó›X|Áx¯Lm�� ˆBä*"$|W%#•!¦0®Ën"&‚1n¹ö/n+4d©Ò™zo¼é“‡Ñ¢¨KûöJ!í­êÿéŒYÖ7ãuR"Í1`JŸ~º|û_ÿöÝïÿý?Ðæ§¯—ï+k Ör¶VÖä/ Çò > Úú=`v0öîÇßýõúé�s?²-æ6eÛ�4�¯6òR]®k“?,]É5¯Ýó×µ›Ï+=®×v�—6D<áÛÖºB�CôÚ‡Ð_YoïëD[û–>µÛmÞÜþ¤æ²¿ýК�Ûk3q¥Çµ›UóöåXô®†¹nk×­·°ÒÝÚ&4K›k¹Z燵Q-Mªø:T/ýV¾j­M®í8‰hiùÔk¿¶�–úÎ?R•|Ýꊿ,zjæ òÖáÎӽƥŸ*ó—eˆäÚþ¸Üo5©—ö�”ážÞ¶¾=¯}·a_ï‰âh³Ò×1ѼÀÊ¢bnPÚ·´”ÿÃ'ÀE]Ú$DDÀ³¬:.p!‹Œ±$@TLÝm}öÐ!æíuÞ…0+°`d0¼¸7CÅKºƒ†‰ªå´ ­×E ýÒcªÙäÝhãÛ?ýå»ï>ýçŸfjÕ{ã:¬þÖK«‡·¡oæa×a‰+òØj*ë_þaR¿¬âw´.²ð‚iïÕa~ðFÊ|EF&¾1«ÿíuþÔÏ­×EýýRl¤É !¨ßÊô€W¯Ê¿ûÆ jÅõoXþVÏ^¿óËÊsÍãÇu( Ðײ¼mïÞ0xÌ‹SWÜ =Ðþ㢿@éÛ^ÇäòQ"x²Îó(•�òää­—‡Þ¾�½_[¶ÛfËærÒ+õ� ÑØÄœâ5›XˆdMúñ°œ©ñ<ƒ’¤=*°}Pî@@v†(¹äNùsUžG1ˆbÌôÐZg ïYæ.SjÝ&í{e²�²œ,� +Ngû'ë<�:1sXJ÷ìlQgÿH®ÄË÷:£oë;e¨wz—u™òN‰våïÂamóW ¥ï–éD +±�Bs»÷úìeöwÇ4É!°xyBɘ¦‘X}°;识¾ÈçÈïG6³mþj`�VÔÚá¨va$“²cL«-áôËÛM8Úƒ^e{°Ãhfÿ™É#~�¾€ÏòL©-Î祯G°ltyOÿö—²Mjípæþc’¹@*Yí‰ê|x2ò\·—ܶ⾜¸vN6d‡·˜ßÃÙ¦':¤!}76†š‹ž]h9Yçi’�äí t}gq�θ:Úˆd3"Ͷ¹ïç9ô~ju>nÚ<–h‚�ÛÚáÄbÐäð7f!é}& ÄÙ ô\•ç1Š$:årg¡ÿ­F±in6Š0Otî.Lä,�µe‹>b’œaP÷ò=Vø©*O£pÙÇÜCÎ8QÃw{𫪧ïr „ìþ(óz\ô£2¯BF#&ñÇ=,úyÖ¶»è ¥â"Õ÷5¹°ã#D?YçùrBàŸ€“þxâ—æ„ÛæßšÞÖ–™$Ïe½õ&[by�²c…3“WkÿjyåÈí4™ÏfF#CS´w&3š2´ÛÞ’9w‰�ìÅö²eÛÛtøòÉ:OƒÉ²•Ä pc„?$ +îÚû~5"¿f!bHuž½]3´Ã´ß{kœœ÷�µ.³vïë1rµú¯æc²¢tÛvÏM)ØŸ×ý»0Xy‘�ê¹ ÑNÛ�»Ñ9°±*«I®n‡ÛÛ½­hRî£|­Ÿd¯»¶µÕÇUsí qY^l“�an…cß6®ÛÆGÑ_Ýø÷ÅöG +}Sàº_U ½.ÌIÙ¶ -�ïmKm}?qÝ|à?Ûe³¡ìn[76nÚo{Z'y6=Ëò¶Çr7Ãöó%Ö3\=§ÇÆlœ—ƒü®‘� @M΅ȆцÉUÅʳµf=þðç^J~ƒdå�$YÀ©Ã8_¬å®üÓEæ¢ñÒåô2[ÉÙ·‹A~½Èéu¬�™ÛæÂC²ׯ¶·7ð;Ú P8½/)+¤ë×¾«²î¨[¾b¦GýЪɩl[!ªûê—Ž"jFwK–»ƬdÙIš ­W±‹b“ÄÑ ÏeGƒ£â!Ù‘�ˆá–h§îÙs“ÇÉk%]uq»è³êÜ4ü­¬OÓp>"¾\Ð-í©¯*UÎkM5íË�&¡J§†V²÷qRH/…ø�mM3³ó§Q“Ó[bn†Ä½\iåÒËE-·¶úH¥^*�ª¥i~ˆ2L�rW¼B«:Z©IŽ4�|ÄRûº%Ë}¬mžìÆß_.�»'òë%$¥tXaC3½™HS»�œí°—AM¹© +®Ùhrö…ü^ "tª Oý⸛”œ_3®F'â›�¼UÒL�uXÓ€ã4ÊNêBFÒmvÖ—ËV)/ ÛKw�m¨“Ê&z*M<©[²ëV×ÉaM?+g¢mB »AÝ”_7ä!gè®lï,ºÉÜCow�cÇÎ×™œúˆ;9Œ¨ËÛÛ�l¾_j`ã=YL?·NYfSÍ|zgqP䣯•ܼµ£“°Ú¾'Ó"îËåï—æ</y}$'gëÍY–»þ/ÊüŸÿ¾ðõOí0—%Ž{ÛÑÂwlÝ�çH&'±æ“dÙ<݈Ým&¢ç öÙåQ64kèqÜû ¯yT·Ø[I×ÔuîL C‡ÙwÓ•ã†fÂâËN‹=‘ù¥c3örIíæÐ É1@M*\Ì·ƒË> +endobj +375 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 709.923057 101.433071 691.173057 ] +/BS << +/W 0 +>> +/Dest (cb13-1) +>> +endobj +376 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 690.976036 99.933071 672.226036 ] +/BS << +/W 0 +>> +/Dest (cb13-2) +>> +endobj +377 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 672.029014 99.933071 653.279014 ] +/BS << +/W 0 +>> +/Dest (cb13-3) +>> +endobj +378 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 634.134971 99.933071 615.384971 ] +/BS << +/W 0 +>> +/Dest (cb13-4) +>> +endobj +379 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 596.240928 99.933071 577.490928 ] +/BS << +/W 0 +>> +/Dest (cb13-5) +>> +endobj +380 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 577.293907 99.933071 558.543907 ] +/BS << +/W 0 +>> +/Dest (cb13-6) +>> +endobj +381 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 558.346885 99.933071 539.596885 ] +/BS << +/W 0 +>> +/Dest (cb13-7) +>> +endobj +382 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 539.399864 99.933071 520.649864 ] +/BS << +/W 0 +>> +/Dest (cb13-8) +>> +endobj +383 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 520.452842 99.933071 501.702842 ] +/BS << +/W 0 +>> +/Dest (cb13-9) +>> +endobj +384 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 501.505821 99.933071 482.755821 ] +/BS << +/W 0 +>> +/Dest (cb13-10) +>> +endobj +385 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 482.558799 99.933071 463.808799 ] +/BS << +/W 0 +>> +/Dest (cb13-11) +>> +endobj +386 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 463.611778 99.933071 444.861778 ] +/BS << +/W 0 +>> +/Dest (cb13-12) +>> +endobj +387 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 444.664756 99.933071 425.914756 ] +/BS << +/W 0 +>> +/Dest (cb13-13) +>> +endobj +388 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 425.717735 99.933071 406.967735 ] +/BS << +/W 0 +>> +/Dest (cb13-14) +>> +endobj +389 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 406.770714 99.933071 388.020714 ] +/BS << +/W 0 +>> +/Dest (cb13-15) +>> +endobj +390 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 387.823692 99.933071 369.073692 ] +/BS << +/W 0 +>> +/Dest (cb13-16) +>> +endobj +391 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 368.876671 99.933071 350.126671 ] +/BS << +/W 0 +>> +/Dest (cb13-17) +>> +endobj +392 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 349.929649 99.933071 331.179649 ] +/BS << +/W 0 +>> +/Dest (cb13-18) +>> +endobj +393 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 330.982628 99.933071 312.232628 ] +/BS << +/W 0 +>> +/Dest (cb13-19) +>> +endobj +394 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 312.035606 99.933071 293.285606 ] +/BS << +/W 0 +>> +/Dest (cb13-20) +>> +endobj +395 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 293.088585 99.933071 274.338585 ] +/BS << +/W 0 +>> +/Dest (cb13-21) +>> +endobj +396 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 274.141563 99.933071 255.391563 ] +/BS << +/W 0 +>> +/Dest (cb13-22) +>> +endobj +397 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 255.194542 99.933071 236.444542 ] +/BS << +/W 0 +>> +/Dest (cb13-23) +>> +endobj +398 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 236.247520 99.933071 217.497520 ] +/BS << +/W 0 +>> +/Dest (cb13-24) +>> +endobj +399 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 217.300499 99.933071 198.550499 ] +/BS << +/W 0 +>> +/Dest (cb13-25) +>> +endobj +400 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 198.353477 99.933071 179.603477 ] +/BS << +/W 0 +>> +/Dest (cb13-26) +>> +endobj +401 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 179.406456 99.933071 160.656456 ] +/BS << +/W 0 +>> +/Dest (cb13-27) +>> +endobj +402 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 160.459434 99.933071 141.709434 ] +/BS << +/W 0 +>> +/Dest (cb13-28) +>> +endobj +403 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 141.512413 99.933071 122.762413 ] +/BS << +/W 0 +>> +/Dest (cb13-29) +>> +endobj +404 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 122.565391 99.933071 103.815391 ] +/BS << +/W 0 +>> +/Dest (cb13-30) +>> +endobj +405 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 103.618370 99.933071 84.868370 ] +/BS << +/W 0 +>> +/Dest (cb13-31) +>> +endobj +406 0 obj +<< +/Filter /FlateDecode +/Length 4922 +>> +stream +xœÍ]]Ï#»m¾÷¯ðu€£H"õ8Ú)r`‹ z±y³o‚â=Nzѿ߇òŒ¤ñðõÈ^ñ.¼ë!õÁ¡ÈG¤F#»³ÅßþÉìLÎ%E>¿ý|úådM +j‰ÍEeÿŸÎÎr2Á•˜Ãùg!P2©Ÿâùã„®.Çâ§?þêô?Û:îìM)Ñ»pþû7a1™”S²Aa°¬#…‚Iɇ¨°¢3¸ÅR4ĉ=ïY bpÉAcA ö>+¬ 1ˆ“£=«@ Ÿk,ˆáJH +ËYÈá¼µ*‚Xfò +Ï¡ô¨ñ¼31_T^Ï%¯ñˆLLì‚ÓxÅÄCÖx YB±NãȳÕx�…)'�! E²*²øœHã%Èâ¡�¢ð2d�ue•Yl´Nã2¡df•WÀ³9å=ÏÛ`B&²Ï9`›¤òàQ¤˜ž‡,ц¢ò K ë5AÆ_�œ”rV¼Õ‹w“%§ñdñ>±Êƒ,| |„,6E àAFpIß’áâYŸÉp次€ÏÅpJ¤Á€/Áp,Iò<ï4 YG ÈA†çª<ÈB…5, YP@Ã"Èâ™4,  -ÃZ4, À-Ûâ4, à-[5, .Ä´—rd � S*0—€�@îž4,  .…è5, À.qŽp—ØY ¸K„š*²À€5,:r™4,`à.9›4,`à.ÜÈkX€Q5°Ã¨alÅøœ­† ÜõÙ²† Üõ S€ÊK>H0p×Ü‚6sw}°^ÃîzöQÊþX5îB‚@¬†˜ïÁó¤a3a‰†¸ë +¦?ŧ�VÆå5,À]—1|*¯— qÅo¡eãb,à.&*Ò° wŸYÃ`¼ÁŒê5,À]G˜©5p×ùb5,À]Ä A؃q4,Àüfœ…骼blÉYÂÜ,y 0 ›�$*/’Ó°`l,âP "pÓ{Ѱ wm Ò° w-#ìQy�…²×°q xp[ŧ¬ë�¸kFXãw­MEÂÜ•iS˜„ೆÐ +öÄ̦¤5,ˆÅ‚‡�OåEƒë aA² @–ʃ,œXÃÖ¦PÉ$YÈ{ ’‡,4,@D`ŠCô­¦�æ¢æ Y)jX$3¹0kX�BD>­j¼èMN€k•—ÁsI”Ø`*v —2N¯aÞH¸¤aÄϱ†©@¸Š†˜ŠLöˆÌ5žƒ,²5,@¤ žsdY jX�}F–­†˜¡‘KBÕ�­ä™YÂÌÑH¨¨aÜ™&�RåAÀ„†I¶ƒ†H~�l"ÍQy�…kX�³—t3kX�3dñÖkXÛ”|3iXP,dAħaA±ÑH˜¬a`)vYûû_O¿þŠÉ÷ü×ÿ=½ÿª®”­ŒŸ8JbÄE|Áp®LmŽ´ºéÔEBøH"•.¤,.‹n"$¦bL·åܾ¸­È�Xdvfê�ñØ/2‡¡¢¨Ëzw�'ÉÚu”ÑÂAŽyTR#ÈÿT½NÖyº^Ç~»’4Yï®ó,Yií°†´ AñY&ËDu¢ÉL™RIï«ñ 9Ñ�DX¥¨x™‘3È%,o +ÿöË à´tY÷n—ƒØˆ‘šõöüåçÓ¯ÿÇŸ~úòèöËûéO?ZËù7?8ùÿýòˆËµÐÿëüåw§ù²ULžŠBYª#¢ +ÞÔÜ\•‡T÷�вkœÌT�!±Áç7U7Ÿ·†H8’Í€‹MkÒ¡Ï5cÒ­ŸeÕw¡{{Ð�ÇÔã$=Éûl8¬\cj ²RÒ„o�D$Š]2ö‹do]J¹“Zuâ‘ÄTȰ�ŸJ|mk@�¶Œv’e·~Þ´µ¹*/ckÈ¿�‚"îtº{"²ä·Ï\Ñ!¸D~g�Ôr³èw¨cÛ ’tŸ#ô!ëè5ù#Éæê¼°ÊÓ$6Åzu誛¯nmlj‹SÉw—»7�Ýv{ñž”% +-È÷æáz²ÎËø�—Ô Ý"åS}èm™ÒʼIÐíÛ€KúélF²mþ2Õ–�ÔÚGðì�¦Ú"ë|Zm¨Û¼sò@ˆ|y¤ÿanyàÞSUjóŒ±s¬Ëð1>Ô?bÇ<õjí0sÿH]‰RækÓZ§®7rÔJ�øT<)­¸owB.¸DdÍŠBZ¬úÏ=ˆ N1‡ìdÆ…ÛXX¦•Èú6LÖy@º <•çþψڶÍÝ�ç[GÝ ˆ,ž'fYü™Œk檼ÎpÈ#8Y³ÎÄ5>VtÉÆ5·‹>+®ñ9É¢”,8‚×\8СÍÕy½¸FžügW€êС«jïþ}ñ‡Ø“ƒ{|¤Ò?±>‚B+OáœÏþJ¼? 9kƒD®§“’}»r N ~i¿ÞRî0ûy«2�s]ÛÝ·JïHÄ2�ÿwÃQåÊý�["Ù¡æb"­¥5Ù›HIåQƒ}Óñ @irôò°åÈao}–Ãeã|}²W‘Ü'⣰w²Î :l�•?Ì EuØðuˆÞ¶Ë=}™g&Þvto$¼¯ Åà¸|ì¸CŒªIuqܵý{bÆ}km®ºÖ۲ܥLðÇpƒlŸ1ÌVÓÆ\L8Ö^Ò»$;G�„ØAþaî åꃫÛ~1WçeBJ²›1!n~J$¸m®š-m£¼ÃÙkt‚]kÍøcwÓ S`׿=IšR{™î2üg–ó¿_f»â7hcò~‡ã<Ð7ì!¤l“V{¹�çãŽ$Oq³˜º&Íw·ÃÖ›DÙSÐÚùºXû×£A¬ÁeR­½IS&d](.©–þiô�3”a#Œñ0z¸YôYÑ;204bè¹/cÃJNÖy½èAß‘Ï!<.·Í=¾þÖ×Àö-Û¸E±S£RûŽÕ3¥ö2O¦:÷ãòÀø€®`TjϬ×Q(¦¾ü‘ê?&S"§¢ÖžY¯»l‘vQ‰ÖÿäzÝ�rí[™ŠÍÝ·pÏz�ì{FØm¡PªÛVÝeYþ&þÌÕy™(�¢ÊBПK_`g~b6“ù«f†Ÿv-NDW-6SjßñtV©�–øsz ý z:ôÈÝËÛKÌœƒV{P|vuñÕ^›É\ÿ¹îa +‘º÷¾lÿ‰öŸ þ#ðÜ//‹­y.A×Õ,ø‰½lUš¿ùí[¸ ü"ÚD¾I@¯á…ˆ¯�Ç'ë¼øÉÈ�a¤à7 ‚=ÉÜ6ÿœ$sßæ=I¦R;, &oÌͤX¼Ü:Bçh +Q8ž"§ª¼Œ‘ÀMñø¦o ù^#Ù6?I +{.{=­"n“‚7."9<ʑ檼ÎÈ«M™"ÝÚ6«ø¢l›=~·åcöv^ÑSU^GÑA¨‘薥ϧ ÛæÛå(¯‹É µNÞb“·„r}³ã¶Öç꼎Úå][ä•é§Ú÷¦Ùg„àûï Á•Úw„àJí»CðG$è!ø#wßCp¥ö�!ø#ý÷\»w„”²˜˜.Ÿ{Ö74Yð)Ë玵†ÆdX´}Ø*†GÃH0,÷>0*C¢ñ U +�ôßEXÍè" Bf ô¿Ó*ØyK±ê¸Éd펃×ý|Î*äehhµèþz(�<œðAžV?0*òÒ´w9éž>cAüÂöYE@HФ;emæhVA“VåµÈÐÒ'V1•G o|©ž>¦Ã»°¡ÈÑBÞ;;ýZÉ\•— ¢•÷¢ë:êfƒ;2ýè"bq>ÓŸ¬ó:ê"ykˆÙÍÄXöî$nÛüs2ý}›÷dúJíïÌô‘0Ѭ›Îôçª¼Ž‘yA*9L«ÿ#Ù4¦£¼`=nw6�«ò:�ƒQ[ßòøh&´mö8Ó�a”VüüK‰SU^FÑÉÊÆ:ì-KŸÏô·Í+ó–±1DèÀǧ`ÇGYýd�×Q±¼[›Ñµ¾p³GìÇeÏÄ.ÀnÕÛævö=„ûÚî}ýÌ?Õ@†a=A©}Ç;1Jíå±Ð3·Fïè™äç÷³sö†|F +y>Újs»èw˜û¶—(»äåܰc�n}H [/ˆ×ƒ`RÏEŽUŒ%Б„SUž!és!#×s¥HýT!ã±�r€Œm÷B†R;ôLcÝä»î¾; +'3ĹzàŹIv®ÊËÌ™ä�‰;nç§Áߥmt,ýÅ¥£x˜Hd˜0)^žŒüç¿þôÛû÷á–á�¹Fz�Ö/S»à_íUxñR&¬eüe.rùdØJ1”Š“%E¶s ò“uþÙÚÁ®žµ“þXØ-Óƒœ˜;úâÎ?¿-ÿû¾ìþÙ>Þ–„­á]ñWï² ým[¯Õ_éCX±òV¹[Ù÷}.O‹E�[•´ý¨‹±¬½­AÍ*uÕиwÐNå}»ÂŒðÉ];¥�+ÍUY®µñÞyuÅ £dÿ2ŒÌÚ Ýûùb”œKE6ÝïµQu«:L=`Š�ô…ì\ÞJG87WåŸí.]\Ê&GGIǹ�)Û»0®¤bJt%|‚q –ð,-ß¼«çfH¹ëø½šÑe¸{§òj'|TÞ•ÜvZ¸ãá–³—’œá` +rf^Ý ¿åÔõ°ÈÁ ®ÚÙHgw�l(§ù”$§¹Ö-­IÎ)SÕ{,ª +²ÈËbÏ—ß:]¬êsõÖ¸CJ¦á}³mwzUw\Ôÿ¾ìV·ËT/Ÿ6qigi»MO_—az[¦®|Õ~Xúä©m„áÂz»aûåëùz®ž±jc®û¶²‰iä…»T½.eKÜŽ=rU±îüIÍztý/­”ü ’•neE ãx±”ÿ¥ðÏ'Ùd]_ë“£7êÉÓ¶’³_/:ùã$'�³Bf6~’,Äå«mmÉZÝí ¨”L¹.‰™Ò._Kk\¦ÏËWÖ»‘úa­&'ÂÉ~ˆõJlþÒ±BDÍèöd¹{$€ YNoφ–«ØD q•YÂÄÖ �e{ƒ½â!YÞÀïİ'Ú¡»N–³eÖ²¾}-mÌAl¢�ªsÃð¯e}†óñí„néšú¡RåÌ赩U»H´W B•F kÉ6 ÜÆI!½�âvmš1˜�?Œšœ¼y!æÕ�¸•+k9…ôvRË-­…6R©•ʽjY5ßEé¦N¹)^¡U-Ô$?G1øˆ¥õë–eÖ±¶y°¿#¾�d[ÍŽüq +I):VذšÞH¤¡ÝFζÛK§"\T×\irn¡ü{�ŠÐ¨‚<õ‹ãfRÅô«Þ‰øf#o•4ÒcCÖ4à8õ²ƒº\JÍfG}¹l•òº­tÓØ†:¨l #b°­éØÀcKvÍêY lÕOÃÊ‘hW!Ð]'‡fÊr—34W ¶uÝ`ÛɱaçÇHNmÄ�$Ûämí6¿ßêÄÆ×d1ý¼vÒɲª¸šOël vÁ +�Üaô£’Womè$?ޱ~íN¦Í¸o§¿�ê4ç)x œ#99}Œ²ÜùÿPæwøü÷‰Ï¿_â¼ÌãÞ6´ð [7äq&“_ÑÈ“dùU�•ØÜf z`¿“]îeÃj m÷~ÀkîÕmöµ¤kêw$†®Ã�ì›ézGƒf âÛ•[ ó½cÓ'ìË%­7‡nHŽp]¥ÂÅx;¸Ì�G}J>MâJŠö)\öCE\Œ�ârè°tÉ6bŠAŽ�4Õ‹ü<…¬í�C!—Ôyܧٱé•Vïb(‚˜Æ‹±avc§e#�"ôÃîõÝ㾈WjƒöFý©íÆ„ÚO§R½ŒÛË6çPÍ+WçíjmÑà{Ô‚œî=´àÍÅh£5÷jK�0vÊ+mÓé:Q4¸Í®´ÖbZeŠKµU-õ޳ª¥ÔbŠNýÛ¨é0ŽJSbG%îÊJ»ëŒ×¢%jPÍ9õ»³½d‹%³B‹cíFå^’VÚ¾oÞö½Î¶çá6¸ {dj{µ°+ùþ=â;—:W«Z©õo] q¹]�‰š]"Oõ×ÈlŽÑÉ3q¤ä‰ó°4rw�Ûk%û‘u­dì Ãa˜È&'¿+§‹ðF9f M­¿9§W“�eÊ-ݧe)¨ÃœÝ­ÕŸeA¨]&IåwÄH‚Þ,?’¬S—†ê +m–Oêßÿ r +endstream +endobj +407 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 406 0 R +/Resources 4 0 R +/Annots [ 408 0 R 409 0 R 410 0 R 411 0 R 412 0 R 413 0 R 414 0 R 415 0 R 416 0 R 417 0 R 418 0 R 419 0 R 420 0 R 421 0 R 422 0 R 423 0 R 424 0 R 425 0 R 426 0 R 427 0 R 428 0 R 429 0 R 430 0 R 431 0 R 432 0 R 433 0 R 434 0 R 435 0 R 436 0 R 437 0 R 438 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +408 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 799.173057 99.933071 780.423057 ] +/BS << +/W 0 +>> +/Dest (cb13-32) +>> +endobj +409 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 780.226036 99.933071 761.476036 ] +/BS << +/W 0 +>> +/Dest (cb13-33) +>> +endobj +410 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 761.279014 99.933071 742.529014 ] +/BS << +/W 0 +>> +/Dest (cb13-34) +>> +endobj +411 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 742.331993 99.933071 723.581993 ] +/BS << +/W 0 +>> +/Dest (cb13-35) +>> +endobj +412 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 723.384971 99.933071 704.634971 ] +/BS << +/W 0 +>> +/Dest (cb13-36) +>> +endobj +413 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 704.437950 99.933071 685.687950 ] +/BS << +/W 0 +>> +/Dest (cb13-37) +>> +endobj +414 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 685.490928 99.933071 666.740928 ] +/BS << +/W 0 +>> +/Dest (cb13-38) +>> +endobj +415 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 666.543907 99.933071 647.793907 ] +/BS << +/W 0 +>> +/Dest (cb13-39) +>> +endobj +416 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 647.596885 99.933071 628.846885 ] +/BS << +/W 0 +>> +/Dest (cb13-40) +>> +endobj +417 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 628.649864 99.933071 609.899864 ] +/BS << +/W 0 +>> +/Dest (cb13-41) +>> +endobj +418 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 609.702842 99.933071 590.952842 ] +/BS << +/W 0 +>> +/Dest (cb13-42) +>> +endobj +419 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 590.755821 99.933071 572.005821 ] +/BS << +/W 0 +>> +/Dest (cb13-43) +>> +endobj +420 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 571.808799 99.933071 553.058799 ] +/BS << +/W 0 +>> +/Dest (cb13-44) +>> +endobj +421 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 552.861778 99.933071 534.111778 ] +/BS << +/W 0 +>> +/Dest (cb13-45) +>> +endobj +422 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 533.914756 99.933071 515.164756 ] +/BS << +/W 0 +>> +/Dest (cb13-46) +>> +endobj +423 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 514.967735 99.933071 496.217735 ] +/BS << +/W 0 +>> +/Dest (cb13-47) +>> +endobj +424 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 496.020714 99.933071 477.270714 ] +/BS << +/W 0 +>> +/Dest (cb13-48) +>> +endobj +425 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 477.073692 99.933071 458.323692 ] +/BS << +/W 0 +>> +/Dest (cb13-49) +>> +endobj +426 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 458.126671 99.933071 439.376671 ] +/BS << +/W 0 +>> +/Dest (cb13-50) +>> +endobj +427 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 439.179649 99.933071 420.429649 ] +/BS << +/W 0 +>> +/Dest (cb13-51) +>> +endobj +428 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 420.232628 99.933071 401.482628 ] +/BS << +/W 0 +>> +/Dest (cb13-52) +>> +endobj +429 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 382.338585 99.933071 363.588585 ] +/BS << +/W 0 +>> +/Dest (cb13-53) +>> +endobj +430 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 363.391563 99.933071 344.641563 ] +/BS << +/W 0 +>> +/Dest (cb13-54) +>> +endobj +431 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 344.444542 99.933071 325.694542 ] +/BS << +/W 0 +>> +/Dest (cb13-55) +>> +endobj +432 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 325.497520 99.933071 306.747520 ] +/BS << +/W 0 +>> +/Dest (cb13-56) +>> +endobj +433 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 306.550499 99.933071 287.800499 ] +/BS << +/W 0 +>> +/Dest (cb13-57) +>> +endobj +434 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 287.603477 99.933071 268.853477 ] +/BS << +/W 0 +>> +/Dest (cb13-58) +>> +endobj +435 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 268.656456 99.933071 249.906456 ] +/BS << +/W 0 +>> +/Dest (cb13-59) +>> +endobj +436 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 249.709434 99.933071 230.959434 ] +/BS << +/W 0 +>> +/Dest (cb13-60) +>> +endobj +437 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 230.762413 99.933071 212.012413 ] +/BS << +/W 0 +>> +/Dest (cb13-61) +>> +endobj +438 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 169.815391 101.433071 151.065391 ] +/BS << +/W 0 +>> +/Dest (cb14-1) +>> +endobj +439 0 obj +<< +/Filter /FlateDecode +/Length 4511 +>> +stream +xœÍ\K�$· ¾÷¯ès+’H½Ã€ $ä``ƒ 0rX·wãvùûù¨*=ªšÝ]³;ŽÛ‹ñL‘zPù‘RIåÎÿ¾pø_fgr.)òùòãé§“5)XüWKl*û[ü¤pv–“ ®ÄÎ? +�’I%øÏ/'üo÷89ýõ7§o븳7¥DïÂùçÂb2)§dƒÂ*`YG ++“’QaEg0ÄR4ĉ=_³Äà’ƒÆ‚ì}VXb'G׬1|r¬± †+!),g!‡óÖª<b™É+<L„Ò£ÆóÎÄ\|Qy <—¼Æ#21± Nãc Yã1d Å:� KpÌVãA¦œ4^„,ɪ<Èâs"�— ‹‡vŠÂË�Ö•Ud±Ñ:�WÈ„’™U^Ïæ”¯yÞ2‘ÕxΙÛ$•�Â$Ťðþ¦î”µ B-Íȯà¾`º²o‡áSijJÁ^SV:Meåƒë&›…p'ÿ�¯ÿØH +A¿Ývë0æÃ2>*ü¶BDˆ£lP Ì#7\ú<ÖÖÙ,Mˆ< ûúJ…NH\ʹÿá©tîxhI•öõ•ÞJZj#…DQé×Ëj•¨f1Ù€+qt’õ•UÞÐ,VÃH¯"ÊPñŽ ,$,o +óîdZ¥X6½û££ÐÄGuˆ4>œßýxúíŸÿúõ×ïþ=½ûxúîK}o˜¿úÂáïÖßyùÍëo)ƒ\ÞòeåÇ•N£L੯¿?Žr½?hÇúþêïçw<ýîÝ€"x\GÏ“8,`="' UÆú·ßýÍþ4ÆŠ%8Ú•>¥é?n¡L«LTD~‘})9jÿS‡@^`n@.·ëPúp?ty7F„l²Y VÍjîÚݱ*Ÿcw¿„¹É¦ö{»;ßêLãíÔgœæ¹žll;ŸÕyGb�š~¯}˳̹o6ì¶öÝd «Ý,vŒ¿¿ov¾<_ÑײþÃ4¾f{aôÓl±þž|ŠÖºþ²ú؇µL{½,6Ú墩}»ðû8Öß•æõ±Öv¹�uµù#ª÷³ê¿›{Ë[íÌžï$[¦uhB„ï1ê IæzuT<4V=örå�³l’·n¼³#@\½ûãÒ^óÚ¹�H²h‘�ñëvºÆym+Þ•£Ä[rØ1–:£m|u¦tRd“$Ѳ�Ei»ZPXÎÍÖ9¬¥Yc¿ôÓ>®ÏvÒ·è(óSë®ãž‘³É«ö§Xlë[úÔÆ=Ú¼§[rûñ‡ÖÆê µ�¸ÒãäqbʗDzw=Ìu[»nÃJwkÔ¥ÍТ$þþ~mÇ®¶Ótñqè^ú­|?ôZ› ³ß,?õÙO(åù®®h¯+þ°úÁ�öÈ´ô³Øù"·<Û¶È$cï(dïÊ!{6Hû¼mr,>?ü áÅÕ&ÃJ§›þê­lêcM”ö-MQ¹¾z$¬Xí™B‘�ÁšÛ1Ò<¬õDí@×Ãòëë|Ræúꀶݽ£.ïFW¹™]uå¸N©¿vÙ:õþV Yù“ûV³Y#0ªI‘¼„Š„~DÚ�(ûGYÑÁ:ÿõȇX}GýV¶ïxõ°¼Ë?Zž"ÓZ oñ»yÿx¥¡û6ïùÖ4ølrÉ„ÚGÚ¿[ô3”¾í%°q˜áRÎ07LÙ|¹/Ù±:o± |‚Çl(cÝm(laIY„õ ÞN/K-�š’=­��6ã⩞¶�ÛáUò¼[ÐMm,¸3µS†\mñ¸©G[Z_DØÝx¯̳߭œKâ{GÖ�.†o8S*†=É —”A´X.>2ÝCU~mDâBˆÈäm¼¿ÂÛçûiùYò­I᪃esÄrü ì4Åf/[¾wõx°ÎÓ(28yÇÔöw=¿Y÷Fi{+ÝѺì–ÛÝ»vüî!åÚ#÷ýÎÓ½ôã¶Î-/ÞxÝÊæ6ëßïu™zٽܻñïÇ·C¸(†øå^ÝÃ帢‹Íò¦Wö÷³lÊß·ÌCUžÇ0Ybi–Cvª‡¿ßS›ä´Uþ¬¦›Þ�/9—äEI"“crùQ"x°Îó(5ÊÉ7'§Rïzû>ö~¼oÙZl›-›ËA¯Ô'&[É9Ås–µ#É;ãûÓr¤ÆóLJa²ä|cRtˆVÎA'—Üá ¬ÊÓ(FÎ •c¦»Ö:cxÏ2w™R³è[[ãòÖi»¼Ê?œí¬ó<ê”£Š®Pºeg‹:ûOšv§­{=e¨wzë +’vÈ;%Ú•¿ ‡µÍ_0”~²LRˆ}šÛ½Õg/³_@¸¦¢ñÑË "f2$§Å¥ƒužÇ4™râc¦ù+ÿô©óùa¥Ë ð¼lIî¦X̳nO®Ïû5¤½ûbv&øz4ð`ì;Tãy&¾ "I .¯Š}ÉF¹ÀT‚?'¹Dó߃užF5Éד¦ú„ÀõºE/vØ¡p·ï¢åjW/Ë/[ØË=�þ +Gñ¡Í«…Ë�©'oÐqä|Ô#Õxžig@w²ryêU’!<3�s4u��²ÁcUžG1r+ a,Ü8DÒÖ.ÍÖöà'f†)×3{VÎ=À#üŒÜ#Í«ó<ª-QNá…pçýÀ5�ÎËôìi+›e¥ªìl“É”�ÍßÜ/úVo2ÉÕ +Ǿœ9ŒÈ¶É#ÉŽÕy¾·a‘<þzü`¿³¾_ñw¤[¤¿J~Ý”ü+;ýuîã6Š´WK¶½Ø¾±?xëM‚¶3Q�—±½>fÖÆõæÛMrX�"׋$wt��<´ùcužWròrù6Ò�]úþNðFº²¼_¿Ù‘Íw6·ë¨�@‘¹SÏ Î†xËÀôIËd¢�X©<Ƨ»Eß +ŸŠÍòy�àÂq|:Xçùð©Èý?[änõçâS OmWRy£ùp£A{Ù|£ŽóÛËo'»éïßœîßþÍoK.Íuëÿ&Lã÷{ÜÓ³ŸBläB¢³g˜Š‹Ë9“ûæu¨ÊÓ`”\H‘-Q¯o‰«¯^àR�«Ë,WG¶�ϧ€n׎ÙX—�é*µefý�ݲƒQLJØt¿è›aS–«EHƒåŒ2aPÓ£=Õƒuž›äN^IZ5#ÊËA2Ÿ—ƒt¼âƒ¯¥uWHŽÜÖri]y× Ø>Ùß®W^R8Ë»eªW£�nÐt…>,ò@×÷mÚìžÝN—ÛsðhR¾uƒu�‡’J’ëaÚihס·E[™NF¯°ìÛy@�«é\"·ÂF”ïçôÖó¤íÕWúÙX;ÎÜFÛϼÖWëy/7¤¾8[ÏnÚogN'y6ç0˲³ŒájÚ~:Åz­ÑÕ«í^Ž4®ÈËX62㩜å*e¶„ô{�&WëÎ7jÖ/ýÔK­²ò]¹Sº|ahzXËÿT'øÇ““÷Nv1ä僶’eñº'¿œäƒ/¬�™Ç‰ìd!®ÚÞ»~|°Ñ.'¹õTö%)»þ9N�Ó8nÚh¤~hÕä"ÛVˆêU´¥c…ˆšÑ]“eôÖ¸•,Í0¯O±‹b“ÄÑ ÏeGƒ£âC²#;Ã5ÑNÝ ²ç&�“KÖ]uq»è³êÜ4ý­¬OÓtÞ#^Nè–öÔ•*7™ZSM»ÞvMB•N ­dŸîó¤�.'…ø…mM3&³ó§Y“ Ï 17Câ^®´r +érRË­­…>S©—Ê£jiš¢ S§Ü¯Ð.ÓM‰$_›|ÄRûsK–Cü}®±(v㯈—Sàür +I)VØÐLo&ÒÔn'g;ìePSnª‚k6š\•ÿ/P:U�§þ!—\k`~�ˆovòVI3=vÔaMŽÓ(;©Ë¥ÔmvÖ—ËV)/ ÛKw�m¨“Ê&z*M<©[²ëV×ÉaM?+g¢mB »AÝ”_6ä!gè®lï,ºÉÜCow�cÇΗ™œúŒ;¹¿ßåííN6߈—ØxOÓÏ­“A–k[Í|zgqPä£/•ܼµ£“|“¬ý9œL‹¸—Ó?O5Ìy +^rÖHN>G3gYîü_”ù#~þuâóŸÛýç%Ž{ÛÑÂwlÝ�çH&/ËÉò1³Fìn3=O°?È.�²¡YC�ãr[+íhRÝ`o%]GP×¹31 NdßMWn Í„;ÄËN‹=‘ùܹ{y¤68tCrs¾I…‡y8x̃G#$Ÿ§&ñ$EGH—ýTs£xœ:,C²�˜b�s']õ"?ÏSAÒ×ô0¥òHƒÇ#ÌÎM7ZÅT)0ÍsÃìæNËFEèOv¯Ïž÷UäØ<@¨Ú;õe¦ö� µžN¥ú·�=æÐYšó õ¶hò=êIÎp�‘Zðæa¶Ñ‰šGµµ@˜;åFÛtÚE‡ Ðl£õS“)®ÕšZꈳª¥ÔsŠAýç¬é0ÏJWb˜g%^••v[ÄëÙõ(ÌæœÆèì(ÙsɬÐâ\»Sy”¤F»î›·}·h{ž†ÁC�82S;ª…«’Ÿ„Ÿâ;K�Ý®ƒVªý«;!.�/† PË–›§úX›c†°|Ç+qž¶F^]çþ^ÉõŽHÛ+™{Ât&²ÉÉç|u^À(�SSíS¿zµbÕ!½NÊVЀ9{µT¿çXoø× ¡þ˜d©(Ÿo%Izå³.Yý u e»ëUÿýU÷¯ +endstream +endobj +440 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 439 0 R +/Resources 4 0 R +/Annots [ 441 0 R 442 0 R 443 0 R 444 0 R 445 0 R 446 0 R 447 0 R 448 0 R 449 0 R 450 0 R 451 0 R 452 0 R 453 0 R 454 0 R 455 0 R 456 0 R 457 0 R 458 0 R 459 0 R 460 0 R 461 0 R 462 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +441 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 541.623057 101.433071 522.873057 ] +/BS << +/W 0 +>> +/Dest (cb17-1) +>> +endobj +442 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 522.676036 99.933071 503.926036 ] +/BS << +/W 0 +>> +/Dest (cb17-2) +>> +endobj +443 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 503.729014 99.933071 484.979014 ] +/BS << +/W 0 +>> +/Dest (cb17-3) +>> +endobj +444 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 465.834971 99.933071 447.084971 ] +/BS << +/W 0 +>> +/Dest (cb17-4) +>> +endobj +445 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 427.940928 99.933071 409.190928 ] +/BS << +/W 0 +>> +/Dest (cb17-5) +>> +endobj +446 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 408.993907 99.933071 390.243907 ] +/BS << +/W 0 +>> +/Dest (cb17-6) +>> +endobj +447 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 390.046885 99.933071 371.296885 ] +/BS << +/W 0 +>> +/Dest (cb17-7) +>> +endobj +448 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 371.099864 99.933071 352.349864 ] +/BS << +/W 0 +>> +/Dest (cb17-8) +>> +endobj +449 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 352.152842 99.933071 333.402842 ] +/BS << +/W 0 +>> +/Dest (cb17-9) +>> +endobj +450 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 333.205821 99.933071 314.455821 ] +/BS << +/W 0 +>> +/Dest (cb17-10) +>> +endobj +451 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 314.258799 99.933071 295.508799 ] +/BS << +/W 0 +>> +/Dest (cb17-11) +>> +endobj +452 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 295.311778 99.933071 276.561778 ] +/BS << +/W 0 +>> +/Dest (cb17-12) +>> +endobj +453 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 276.364756 99.933071 257.614756 ] +/BS << +/W 0 +>> +/Dest (cb17-13) +>> +endobj +454 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 257.417735 99.933071 238.667735 ] +/BS << +/W 0 +>> +/Dest (cb17-14) +>> +endobj +455 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 238.470714 99.933071 219.720714 ] +/BS << +/W 0 +>> +/Dest (cb17-15) +>> +endobj +456 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 219.523692 99.933071 200.773692 ] +/BS << +/W 0 +>> +/Dest (cb17-16) +>> +endobj +457 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 200.576671 99.933071 181.826671 ] +/BS << +/W 0 +>> +/Dest (cb17-17) +>> +endobj +458 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 181.629649 99.933071 162.879649 ] +/BS << +/W 0 +>> +/Dest (cb17-18) +>> +endobj +459 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 162.682628 99.933071 143.932628 ] +/BS << +/W 0 +>> +/Dest (cb17-19) +>> +endobj +460 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 143.735606 99.933071 124.985606 ] +/BS << +/W 0 +>> +/Dest (cb17-20) +>> +endobj +461 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 124.788585 99.933071 106.038585 ] +/BS << +/W 0 +>> +/Dest (cb17-21) +>> +endobj +462 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 105.841563 99.933071 87.091563 ] +/BS << +/W 0 +>> +/Dest (cb17-22) +>> +endobj +463 0 obj +<< +/Filter /FlateDecode +/Length 4905 +>> +stream +xœÍ]]¯$·�}ï_qŸX–DQ€aÀ² x‘‡³FÆ7žÁugöïïau•¤êâíRÕí Úãžé"E‰%‘G¤J¥v/¾qø+gr.)†—×_/¿]¬IlñßTbu1±ÿ„OâgC2ìJÌüò«(™TاøòvÁ_7—}ñ·ËŸwùçZƽxSJôŽ_þõ‹°™”S²¬° +XÖ‘Âb6)yŽ ++:ƒ[,EcA NÁ‡-+A�P2k,¨¼Ï ++C +ÉÑ–U †O.h,¨á +'…å,ôpÞZ•EläžcÑéQãygb.¾¨¼žK^㙘‚c§ñЉ1rÖxºp±Nã1ta‚ÕxÐ%PN/BŠdUtñ9‘ÆKÐÅ£wŠÂËÐÖ•Ut±Ñ:�WÈpÉ!¨¼žÍ)oyÞ²áLd5žs†a›¤òàQ¤˜ž‡.ÑrQyÐ…Éz�GÐ%à�ÆN0¥œoõâÝdÉi<†.Þ§ ò  _C¡‹MQƒx�\Ò0À§dBñAŸÉ„²†>R" |abI�uày§YèÂ!jH@ºx®Êƒ.T‚†ä¡ +hX@]| h`-à6Øâ4, àm°.jX@\¨i5, .å4, @.L©hX@À\vjX@]¸{Ò°€€ºÄÑkX@€] +9jX@À] +ÎjX€»D�TyЬaÐÑ�ˤaAî’³IÂ܅y 0ªv5,€­Ÿ³Õ° w}¶AÂÜõ S€ÊK>Hà®gÜ‚6sw=[¯aAîúࣆ0ü±j4Ü„°@¬†˜ïÁó¤a*3a‰† ÜuÓŸâÓ@+ãr‰0p×e ŸÊ+Æ%ô¸â·èeãb,0piXÀÀ]ÀgÖ°o0£z ¸ë3µÆî:_¬† ÜEÜÀÀŒC aæ7ã,LWåcKÎ0p°ä5,À,ll’¨¼d`HNÀ±±ˆC5,ˆÀ]LïEÂܵL¤aAîÚ€°GåAÊ^ÃÄ5àÁmŸF°j¬Rh<à®ua�ܵ6 "pW¦M b‚Ï@Aƒ(ØkXs0%¥¨aA,<„|*/\³†É‚À€,•]B + °6…JÖ° yèBÞkX�ý7šýôåòÓwÖ†×ï¿qòo‘ÿÿ"ŸïÿòòéÇ;µË솸¸uíR¡¥=aéHk­cd¬|ö*‘!S¨±©Äý2pÁ9Y›ã[_� +8Íæÿ3>ùú�ݵÂ?|ZP1¤-¥LËô öFn4eN¡Æ× $TÈ)ÑNE ´}‡ÙD²Yb§UuÞÌ�bëx�m�û5ÔP¤ùŠ~!Ì}™Í`ÑpÖx±ö�Y ¤•é´Èj’Axç8îYÅ�ÈóÔòVŸBŪºÞ(øç6!Mž©wxDX“#™ˆd5{Êêîwø�Èótx’§,\¬×çì2w“Þ=Y"÷‚y7æº_ôݱjEž—e'°»«Ðý¢�½¬¦0µøX0Óö}Pæùâ@/�d.•@p]ýÑHp+í$6H»ƒGnœŠ-±œÑ@ì-d`‘*ýÕâÉÕi:�ÆE-:Szo$0ê³m G"#‘"+Ü�,Þy;-xÞ÷£1™§ÁdSgŽ1ÓC&Áuu?Í&äçDÌH>‹É-f¶ï{o�“uÿ¬´°¯{?­Vc¼5靿-GÙ¶*ûkì_ß�¾|N²à&‹©bE‰Ân"?&ò4†'[²+”ÞÁí|'lU»L–/rôòlA¶«Ñô8änŸ ʼƒÉwãš�å-üþãßûE×°lEƒz„+¥Èn/Þ}„3(ó|qÍ´·5#`Ô—íÑÔdïþËì±eG|d¢Í~b”ºVï§.u­�nŒd%Ûzå¦åĹþé–rƒÙ‘G�ÛZéËuϽr»ÇýšHÞÕr1‘VÓ’í d¥²éξêxÆ&è#rº]‡½_ôa€e„òŠŒ<4nî…½ƒ2Oè°òöš-ò�æ°ü¹‹^׫>mµg$^7t4ÞJ3¯•ÖG©ë÷-FÕ´º:îRÿ‘˜q[[�«nûm^aw-3ð8º[Áß¶3v€µÕtÀ¦ÉÆQ‹¼ê=R du)7má¼ïc2OzD+{ا÷ ®«›Ì–ÖQÞîìÕ9Á¶¶“;:ØÖy$IS¤çYá�áwìÖ � CìŠCÜ �É—qÇ9Óv{h¦Œàäñ¸#É~æ,¦®i3üSƒeO¬Õóy¶öÏ{1‚X"ÕÚ«6e`áAÞ%ãâ’jéïEÑa¶u¨?îF÷‹>*z@Ôn<| vŠÈÈPHqwoΠÌóEòúQÀ@¹Ç< \Ww~ý­­�mk܇·öt_‘>°z¦H÷!ó`ªs�ëÛãñ¾ê�q+=²^G\Ìt B>Õ~ÛM ÝûÈýO/ ;FT¢µ?¸^×¥\ÛZÆ6Œv0º©áÈz]Œ²¿ +™vDïÈ œîºëê.þŒÉð|V‘Nsü9¼„~Fƒ–�¹{9Ç#„�Y“ŸaKä¼½5“±öóô6G:uïmÙþ�Þ4ø÷Às\ß ¶æCa½¯FÁOì`«zÐøu‘ߦ†CàW0ÇäÅ4ŽðBÄ×{‹ãƒ2O~ÉÊú’G€ß(¶$s]ýc’Ìm�G’LEúƒÛç‘Y‹㘣)D¼;Eމ<�‘ÈkxMëû >l$«ê�o§OÁò™¦%ù±÷ÆDžgXBª”˽Í`£ßB”uµûOÃR”}‡rÈÌxG‰æœ�uuP‹/%ðø‹ûƒ2ÏÓÅ,Øuß9¸©ß#öݼ‰g``gÕ«Ævv?m¤Ý—å3þTÿ„Ýz‚"}à�Ez~,ôÈ­Ñû{ºó�Þ½Ÿ�È9úÅÇ •íØýÝ¢0÷u+EÖ93ô¾Bw‹žRèfcÍŸæcþ’´ÀަãY£íN ¬zíÙÑgMõ˜‘w£›ø}œGc�&K’ƒÃ§=#IŽÄ?ÿŸÿøá÷ÿù_Ý6ýØlL Ž%‹B�9wͨ„æ%2Ë3Ä9V´©ÉÞYüû‹­Û¿¦u»x-¾ÌÛÁÄŽ¥l¼~¦ºæïS=sÝœæö>Ë&9hÁ¡+U?ÏmwúLupw¼ÜCµðeØ~»Äé(W7çmã4ùJNƒ‘írâE–c` >“›:Ö½¼#9ýJÊoµ”ü ’•³Ôåaã4ŒýÅ\þ·i€½È.¦iß<„¯?r`'22¾%¿]äG.‚BÆäÉBœ¿ÚZ—ìL»¡½Â±’)·%‰��¿–Z9ñòÕór7"Ï‹˜>*»ú—+±ùkà +’ÑmÉr÷@Ø™,?’ ÍW±ª‚Œ¯Tb«0ôe[…Mp—,¯¸5"o‰¶k®‘åP°¥¬¯_Ks«ê}×¹nø—²>uÃy�øzA³tK}S©òóKUKïb&[hÔ)U*•—’u@B'…ôzQˆßØ¥jÄM®ò»Q“Cž¯Ä¼R¨åÊRN!½^Ôrsm\G*ÕR¹‰–¥ç›*ÍÔ)׎WhSÍÔ$¿|Ôùˆ¥åëše–±F6ÐìÆoˆ¯ÕùíÂI)Í +,/¦×©«·’³möÒ¨)/]×\hrD®ü}… +®TAžé‹ Õ¤ä˜ëvÕ߬äu'õôXQ'h=àBje»îBÿ¸„—?.g>_çqo+ZøŠ­+r?“É6åA²ü€ÓB¬nÓ}è`¿‘]ney±†:�{ßáuhâ¶ûRÒUu•Û¹õaGöÕt½£®gøñõ¦k óѱiöõ’–›C3$§…/Zᢿ\æÆ£6%¿tUâJж)Üà;A\ô•â²k°4ÍVjŠAö�Ô®ýC?ò<½¿è¹¤Æ mší«^hÓ]tESÑW\ßhYé£(}Ú½><î³Êqñ¡Vh¯Ô·žZoL¨ðt*M—q}YçšÎt\œ·õP­‹:ߣä4×h¡EX]ô6ÚQs› pßhXh«F—‰¢Âhv¡ÕÓ¢SœÅ–n™î8«½”jLѨï{šûQ©�Èý¨ÄMY©w™ñj´D5âÞœS»;ÛJÖX2+´ØKWjh%i¡mÛë¶—Ùö¥»�Љ-2µMŒ7%Oáßß¹Êܬ:h¥V+!.·_IÀD\"OÓ_Ú£“Eg¤ä)äniä°Ìýµ’íŠÈ²VÒ·„á0�È&'?aª«ðFÙgtU-?oª‹É‹±Ê-ëe)¨ÁœÝ¬M¿a‡ÿæ¡z™$U”Ÿ¬$ z³üÒV²N]š–Pxµ|2ýùЏ• +endstream +endobj +464 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 463 0 R +/Resources 4 0 R +/Annots [ 465 0 R 466 0 R 467 0 R 468 0 R 469 0 R 470 0 R 471 0 R 472 0 R 473 0 R 474 0 R 475 0 R 476 0 R 477 0 R 478 0 R 479 0 R 480 0 R 481 0 R 482 0 R 483 0 R 484 0 R 485 0 R 486 0 R 487 0 R 488 0 R 489 0 R 490 0 R 491 0 R 492 0 R 493 0 R 494 0 R 495 0 R 496 0 R 497 0 R 498 0 R 499 0 R 500 0 R 501 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +465 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 799.173057 99.933071 780.423057 ] +/BS << +/W 0 +>> +/Dest (cb17-23) +>> +endobj +466 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 780.226036 99.933071 761.476036 ] +/BS << +/W 0 +>> +/Dest (cb17-24) +>> +endobj +467 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 761.279014 99.933071 742.529014 ] +/BS << +/W 0 +>> +/Dest (cb17-25) +>> +endobj +468 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 742.331993 99.933071 723.581993 ] +/BS << +/W 0 +>> +/Dest (cb17-26) +>> +endobj +469 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 723.384971 99.933071 704.634971 ] +/BS << +/W 0 +>> +/Dest (cb17-27) +>> +endobj +470 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 704.437950 99.933071 685.687950 ] +/BS << +/W 0 +>> +/Dest (cb17-28) +>> +endobj +471 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 685.490928 99.933071 666.740928 ] +/BS << +/W 0 +>> +/Dest (cb17-29) +>> +endobj +472 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 666.543907 99.933071 647.793907 ] +/BS << +/W 0 +>> +/Dest (cb17-30) +>> +endobj +473 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 647.596885 99.933071 628.846885 ] +/BS << +/W 0 +>> +/Dest (cb17-31) +>> +endobj +474 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 628.649864 99.933071 609.899864 ] +/BS << +/W 0 +>> +/Dest (cb17-32) +>> +endobj +475 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 609.702842 99.933071 590.952842 ] +/BS << +/W 0 +>> +/Dest (cb17-33) +>> +endobj +476 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 590.755821 99.933071 572.005821 ] +/BS << +/W 0 +>> +/Dest (cb17-34) +>> +endobj +477 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 571.808799 99.933071 553.058799 ] +/BS << +/W 0 +>> +/Dest (cb17-35) +>> +endobj +478 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 552.861778 99.933071 534.111778 ] +/BS << +/W 0 +>> +/Dest (cb17-36) +>> +endobj +479 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 533.914756 99.933071 515.164756 ] +/BS << +/W 0 +>> +/Dest (cb17-37) +>> +endobj +480 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 514.967735 99.933071 496.217735 ] +/BS << +/W 0 +>> +/Dest (cb17-38) +>> +endobj +481 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 496.020714 99.933071 477.270714 ] +/BS << +/W 0 +>> +/Dest (cb17-39) +>> +endobj +482 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 477.073692 99.933071 458.323692 ] +/BS << +/W 0 +>> +/Dest (cb17-40) +>> +endobj +483 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 458.126671 99.933071 439.376671 ] +/BS << +/W 0 +>> +/Dest (cb17-41) +>> +endobj +484 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 439.179649 99.933071 420.429649 ] +/BS << +/W 0 +>> +/Dest (cb17-42) +>> +endobj +485 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 420.232628 99.933071 401.482628 ] +/BS << +/W 0 +>> +/Dest (cb17-43) +>> +endobj +486 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 401.285606 99.933071 382.535606 ] +/BS << +/W 0 +>> +/Dest (cb17-44) +>> +endobj +487 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 382.338585 99.933071 363.588585 ] +/BS << +/W 0 +>> +/Dest (cb17-45) +>> +endobj +488 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 363.391563 99.933071 344.641563 ] +/BS << +/W 0 +>> +/Dest (cb17-46) +>> +endobj +489 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 344.444542 99.933071 325.694542 ] +/BS << +/W 0 +>> +/Dest (cb17-47) +>> +endobj +490 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 325.497520 99.933071 306.747520 ] +/BS << +/W 0 +>> +/Dest (cb17-48) +>> +endobj +491 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 306.550499 99.933071 287.800499 ] +/BS << +/W 0 +>> +/Dest (cb17-49) +>> +endobj +492 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 287.603477 99.933071 268.853477 ] +/BS << +/W 0 +>> +/Dest (cb17-50) +>> +endobj +493 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 268.656456 99.933071 249.906456 ] +/BS << +/W 0 +>> +/Dest (cb17-51) +>> +endobj +494 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 249.709434 99.933071 230.959434 ] +/BS << +/W 0 +>> +/Dest (cb17-52) +>> +endobj +495 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 211.815391 99.933071 193.065391 ] +/BS << +/W 0 +>> +/Dest (cb17-53) +>> +endobj +496 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 192.868370 99.933071 174.118370 ] +/BS << +/W 0 +>> +/Dest (cb17-54) +>> +endobj +497 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 173.921348 99.933071 155.171348 ] +/BS << +/W 0 +>> +/Dest (cb17-55) +>> +endobj +498 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 154.974327 99.933071 136.224327 ] +/BS << +/W 0 +>> +/Dest (cb17-56) +>> +endobj +499 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 136.027305 99.933071 117.277305 ] +/BS << +/W 0 +>> +/Dest (cb17-57) +>> +endobj +500 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 117.080284 99.933071 98.330284 ] +/BS << +/W 0 +>> +/Dest (cb17-58) +>> +endobj +501 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 98.133262 99.933071 79.383262 ] +/BS << +/W 0 +>> +/Dest (cb17-59) +>> +endobj +502 0 obj +<< +/Filter /FlateDecode +/Length 3167 +>> +stream +xœÍ[Y�Ç ~Ÿ_1ÏT&‹¬ Ø@À� (0‚ òX²¬ÈyÈßÏÇî®cf¨ÝÕa$Zíî4Y›ÇG²º—Ï„¯ŒU9ÔÚJÖóåÝéý‰BI„Ûˆ«‹�ý¾K:3i ‰[®éüÎRBi)–|~8áÇÍå:üáôãW§]Ïás ­åÈéüÛc©„RK¡ä°XÄâ°R +¥Ä”Væ€[lÍcAŒT4ê=«@ m5y,ˆ¡1V‡U!†ha¹g5ˆ «Ç‚ÜRqXL�ƒ#‘˃ ¤*Ñáq +JÏ/rÈµÅæò +x\¢Ç ¹('öx-äœSõx +YR#öx ²$V%�YTjñx²Hry�%Ö"¯@–í4‡W! ¼«º<ÈB™Øã5 ©UU—×À£Zê=/R +©Š�Çc ¾).#åâð"dÉ”šËƒ,I(z<�,Š/�œHRju¢5Zt {¼Yb,êò Œï!@Ì�…Jö  —< ˆ¥mQ=ˆU‚V­ +ÄÚ‚–" Ä–‚æV<bð"{@ Y’f „!‹"r]d‘¦H„,àa�d‰*ÐVá-àV©±‡¼Uâìa�p!&yX @\©Y=,@.\©yX À\vzX ]„{ñ°@€º’rô°@»¢5{X À]Q& ¸+‚™.²À�=,:á*(pW˜Š‡ +ÜEE `Õ?ÌÀWB¬•<,Pàn¬¤(p7¤—WbP<,PànL¸/swc¢èa�w£Æìa%È­€»€�ä—�ëaò=xQ<,Àb!¢,ñ° w¹!ý91 ´ +\[ö° w¹Â|.¯.и·Ðràœ›‡ ¸‹D%$à.à³zXŒȨÑÂÜeA¦öxÀ]Ž�<,HÀ]Ô ÉøC` ¿&¸®Ëk�Z­$à.`)zX€,¨I\^ p$ö°`u¨‡¸‹ôÞ<,ÈÀ]J"dà.)Ê—Y¤F P×€‡°ubÅj ¤ðxÀ]bXØãw‰Jó° w-mzX�‹bõ°TÁÑÂ\5´R²‡¹x(ù\^¸N!²\dÑ¢ °MZõ° DÈ"1zXP"dAÉàa*‚ÐÕ·Û@¸‹Û(dA¥èa�,Ô¦êaAIý´êñr µ®]^�‹‡¥h@*f ÐK…Š ÷°¬\ò°b€ÇêaAi�¡âaRQ¨•¹ÇcÈ‚"ÛÃTºà1{XP#dA5èaA�]f& �¡ÑKBÕOÉúÌêaAÕ¬Tô°a‚NHéò `ÂÃØÇšíäaš4›hs\d‘¤Ô­Ý¬Ô +Y"E à›Öo AT|4ÊÁÊd ãàyXи¢ßŒêaâÒúÍêaAB¿‰ωÛ&ÙúÍâaASÈ’P¢¸<È‚¢©9q LB¿ tòx²Ä¦´œ­ß¬ Ì@¿‰ŠÞ=¨Öo÷¸¸›�ÉãwQ™f p�~•­×Û€7Ôg>³ZÇYÝô&äV÷È€€½ÈVÅ=3 €¯õHî¡ÄDgY³{j€´ +&“{l@À_Ôcz‡ ûéÓzD•á9³»É†°PT÷£ç˜ÃäÃöó±ß~9}ýÉ÷üË¿Oo¿ÚNÊúÃùE³5ÖÉB$6˜p¶åÅ!dMhS6!ß'L1J›"2@ñ8r3‘ˆ‘lÛy|àk�!¯IÌ(e¶ûÒu[ô CIv%ýØ)_HÒ© F̓ðÒUC(¸‘g,©{J}æœ/®Õuß©#OÖ�žóÅeE¯´Rkíz_Wȧ?)�Ø¿óý‡'„”(Ïò©Á_XHéû"9 ¹Ek�6£škÓ +“EÒ�›ñ%,Ž}¬NÍ%-Z^X£#ƒ³­ƒ¿}uÄÛïOÆå"6*M…f#�_½;}ýý�ß|óê¯ØöÕÛÓßÿ@¤õå ¶ßùøýQŠøü�ó«ïYµ-qIÈYWëÛ’$/Ÿ˜lÚ(àÏýä„ÿe—%¥ãw—ñøMißà�¯® TSжŤlÕàV�=jÒgÍø$“þ–lÈp\Pv?jÉ êåø\º%¡«‘m»|ì“Ï+ëVí+Åm‡¿ýé›oÿü—¹º~Ø«ÛÁV7cƒ^�]�—÷1©�‰øFræŸ}›1 +±’÷ð\5ÈVva)i¿NGHêÛínwÍM£=†hvàw³éæ›[{¾t„`´ãs‘íXåѰ}æœÏIø¿GôF”z�D/½~FÂz½[ä6Ê6Z÷]æéµ¿Ù¸±Gœ´çíýòù^'$�yÝð¨r€|ê±´x�¡’ÞV79î=NÑý¥ZøfÃÇÁŽ¬Ô€ßí¨@ºcò…[K»#š“ê›#ÁÐá¤ùpÚ·{5úVÝäý{Àf>Ö9ÖÏëù/G5ToÖOÇÞ‹¶±¸ÅØþ1¦~76?õiv‡8ö+óù}c‡ˆ™™ïÉv÷ø ÛÛ25Èq•‡()w™­ñ ê:v.8'>If¡…˜î‰´l7ÉQ»6–Åœ�/'l+·Ô—jC_ªk7Ò É"TÔÔGƒè°“Cºœâ êK+Œ9ø‹ÕìIÇN¬Ý‘tŒk}œCºœÜqÇjiXªŒQuNm]óS”éêR‡âÚ¦£ƒZìõ¿%F��c·ÃJÎf�nkª‹ßÄ;âå”tDâ$?œRqF§‰”ºë­DYÖäJÓ_& Æ¡*„f§Ù9±ýÜ¡" ª!Ïö�u¸”=ë™Ws‹ÍA¾VÒJÏuÔÓk™cuq)ÃgW}Y—t?Þ@wŒ»¢.*[è¥uñ ¤x\“yxÝ „uý ¬\‰Ô…Àv“œ†+?\‘§œi„j¢±YæÅÝÓXw’óÀ·•\†ÅÙÜ yǺ‹ÏwâeKlzK6ׯ}“IŽ4²ÝÜl!NÁ +“×63aï—ÒoÛˆ=2ëRáb½\ÖÉ“™’ÏË’¸²¡3¥³=X&âb]—ˆmJv%¦9äºÉP½É¯«)ÄöZ.–2Â.eòt¦ÙuéNÛîb‚XÖ‹uaåuÓv%�#ô'‡×gÛý9÷0ê€öA}X©ãÆŒ:ϧÊv™¯/GÎ‘í ¨ïÔÐXK–Ø“QäÌИ¥…^]¬>ºPëœv Hë¦ÚiW›öD1à4ê´±bé2åcZWËvÇÕÕR5Ťþºj:­VJL«UòÝX[·g¼Q-É(€ÒêÎeÞÍ‘£–¬-¯³UçHé´û½õzïžmÏËmè$ÏÊ”æ´t7ò“ðïSbgŸssêà�ê_ÛI×ùªµr‘(Û_PÍ¢ö_Ѻ�|ôœÇÏJîODúYɺÌT„ +Ûßñø"<€Ñžf,Kõ¿ññ§5roéãðÁw.îv´½È½¨mBã²X«h·!VôV{Ý´»GCÛJ¾:>Ù¾þ X9šÛ +endstream +endobj +503 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 502 0 R +/Resources 4 0 R +/Annots [ 504 0 R 505 0 R 506 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +504 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 799.173057 99.933071 780.423057 ] +/BS << +/W 0 +>> +/Dest (cb17-60) +>> +endobj +505 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 780.226036 99.933071 761.476036 ] +/BS << +/W 0 +>> +/Dest (cb17-61) +>> +endobj +506 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 719.279014 101.433071 700.529014 ] +/BS << +/W 0 +>> +/Dest (cb18-1) +>> +endobj +507 0 obj +<< +/Filter /FlateDecode +/Length 4957 +>> +stream +xœí]ÛŠ%»‘}ß_±Ÿ '­ûÌ�c<øÁÐÃa0óе»ËÆT´ýàߟÊ”™yÙUåžm»»¨®Ì]B¡¥¥�ò¦¯ +??hü—œRÊ1¸ëíËåëE Ñ+ü+)f'EýüFÕÊÅÁë’¿~!��CÌÞÄp}¹à¿Å)Oþrùù—ÿ�çÑW3äŒö׿~&•³CL1*/¨2TJ[Aåý£ñAP= ‰9K*˜á£3n­Š0Ãåä%ÌpÆ$A•`†uQÛµ*à µ“T0Cg•V°C¥D QÎY#è´œ$�ÑCHÙdQ¡ÓÑH:k‡�öZÒå!„à“¤s°Åg¥%�‡-^;§$lq6EI`‹ V‰:ØbR´’.ÂïdA—` ЕDlQAiI—íàsrNÔeèTŠi­3Ê>Y«$�Öƒ6­¨ÃˆB'…(è l ÊgQ[¼UFÒYØâð#éÀÞÆ”„Ñjht[eµ¤ó°Å˜èDlAçK `lQ1H€4/I`b\6N"“ìà’K ˜”£•hÀd?¸�£ÄVi茖ˆÀ*Øâ]�˜ÀjØâ0rEl±ÙI\` lA‰ ¬…-ÆY‰ ,ØÖ-XЭSYK\`Á·Né q�áÂL%q�ãڜĔ (e‰ ,8ׂ;%.° ] ÷(q�ëZŒÄ´k] +Xð®uZI\àÀ»Ö"§¨ƒ-°Ä`ÇÁêd%.pà]«U”¸À�w1ŒŒÄèÕ8 +ƒIII\àÀ»&)'q�)@ÔÅcÐJ\àÀ»Æ£ ÒÌ Þ5^‰ x×8$.Pð�£ð.(ÄËálÁJ\€ù:c%.@aƒAX"q�ïêŒéOÓ`«A§$.ðà]�Ð}¢.:Â㸅—B–¸Àƒw1QY‰ p°‘¢Ä`²!eç$.ˆ>`=¯Jº`†A×¢.A§£Ä1ºS±–¸k©!aÐK\‚(\’¸f@§�Ä1à ‰ 0 É 2—t¶ È–¸‘.tZK\� lA4(qA2 «Ì $.À �µ$\-霢uf’¸ ¹0P¨(q† Vš`JQ[@ h±í%.Àâ‹M,sDl±ÞI\�’¡åf’¸ %Øb”‘¸Ø¤õf”¸ +Ø‚ˆO€Â@a²Ä qè”’¸ ë„õ¦q`\Òz3I\�­ÂzKƒ™$x‘i�¸'Xo"²•Öö +Äë#â3Y™hÅ™Äêõ˜[Å-îÅlÅ=ò¥5’¸i3±²LAÜ5À´ +¥Vâ¶�ÿ"s+NwŸøU"æÌ©‘ÃÂ!ºokŽžÌn$÷Çþú§Ë/?bò½þéo—ç_”�²úCØð4HAÓèm“ÑÛ_.p–‡ˆk¿@œ™.Ä4]Ó‚\ÃRXv-ŠðvabDy`Mˆ}™Ë±ªKEΪӈ5§ÔÌ6&½±–0ñË‹¬Hbï[Ú^†^n÷–¼0iot¯ª{Gòïíò3:ú+/£{¤1­QV„»ÀžVÈA]sïj�ÉeÚºD +¡žw5zšúš÷ëd©úæFÞ\æt..ˆeMŒ2„"/(ÁÍÅ´z®iq´Î ÔÅsq9‚Ÿ +–V�¦iS€�’!¤„R/Å>t´´ê¸�C(ˆjÒÞè^U÷ŽäßÛ÷�ûÿ2p)R§×õ�@²Ü;½ _ä¹9ȸ߸￾ïƒïßlðú¯ëƒ;3˜·˜9bŽìïƒïûàû>øî|â »/äÜ�ßÞ÷�÷o6ðî 9±(¬ t¡ÜÒ¾«Í�j(‹Fw5y0ÁІò´ª|Mžý•(m­ïòµÈëRmõPv*ܬ^¯±îUÆÑÖ»ó¼»­Î+ºžDû¨³zE#�Zwªï×Fz«…z]ŽƒWÉš${6Ó;½Þ úõ‡ z´Ü†¿Ù Î¥rýŠn+‰´ýðåòËÿþÍO¿þí¢·><_þø+¥À“ ++]n¿P@þÐßÛxnƒR.)å¡÷¹ÿø?׿»h`Fµ»É~è§ldhŒ]xÆØDÕÏküñý«éØMµ§Qæõô7L«Ü�PZ 4åžF9ú¡œ¯äSZTQ~KºZ¶YÔ…“š<Ímhù«œÕCuÙ÷‘¥Q“ÇtÏSÒÞz¹ÅæÐíåí(¶œ÷u^úÚåÑ.÷<¯ƒÊWOcoóö´¶«îSJïȦÛÔëa2!ðº�xLèZ·�úʪc²åèOër‚¥K%t;κœâ‹êßPÚ±gG4[v¨Þòkõ…¡>m£Û²‚r F¡ì³½Ì9»¯—£Ê‹£ª·•ìq±§-í§zÂd{žþ¹c5Í3¦cŒò–óÏSÿxf“fé¦>Ôf×ïy集!Íl®xˆµÌuýmœµq"ûŠxÃ×~Tc;•�û`ÙͦÀÚVý®»ßkúf\ôÛF?×6¬“÷|fõÊgœGj»ÒÜV­%Nëíî<6úµø¹qW·™øcÎTÇ®½.-ì5S™ÿu ýLJ2KÚwD7Ø\fIºeÊ$m<è EºBdlf½7Ï«b•i" ]ÔG{Q‘¡‹  +³vNÊ-gWíj­£kÚ©¶¾Ù›Ýkjì8ÙþþçŸ~úð_l²%xMÓž»Õég”{˦›±6+ÌaP™n‡YTX)©t÷DëÔÅÊþ¸_¢AˆîN¢P¢>Ê \ÐÝc!ˆöåÆê*ª¤Üe2­«•=ô�)·e;솇Üçù$ïuŒ†ÕÇ{,,ì™òŽä4—¶ÞÙr‡„Õ’¥‡ž§ûáºåvå¦~WXó~žwÉ`”%‡ér›>O½°[¤…¹4þDNrX¸D¬ëuÃ[šœýÓ|�5v+PYt¿m¦;Û•–‘½Az®ÜP[ aÝŸQîçÙ%½“yÞ²šøGpÝ'ºÃ}êc�n¦þ~–G¥Cä¹¾È*FXغ,oœ–ç!~ wO×ÿãyô�¼÷Ð×�§©—…V }| +Nâl¬rö´„›W¸‡<�@zB‘·=í2Ýʱ‹¼“y ypëò?›ÅߨÑQ¥~úK¿±/‰W::¶“îã"ͧéï$7fÒ×ßOÓß¼Nûíæ$<.ꌋrc­{eôP@EŒ:‰²syeÝlzÆhe�O&tÑÜVæ:5ç©2……—?õ^"À4Y†²Ú[iÞ+.Ì{­¤ù¼@B[.ÎyoVŸÙ.{\¢í#³¡M å,·QL?n~x>_Wñ©f~ŽKýRS¸©çò<RÇì"U@ˆ®Tv¡SkÎØåšÛ=3îZôörƒm…ÏòÞæö;*2êÈÒã¨GÒÔ¾Âë��Ûű™òä�‘§{;Z»olõ¶äOÓóm!3èÆ‡C9Â2Oæy8dš]m^\ÎØY{( k¯Ï¸ïãòÝ{ ‹ma·Ñ æuu4o °Ç~Λ1v Äì£ð\ž‡Cá¹xQ\mlqÖÛq©+Œ¤.¹ODÖ²'9—ÞQ_­£„¢Ocþqe2/óúlÚ¶uÆ“Âî–;ˆ!�鹤Tž%ÙGÞ¹<‡¼ƒrÙ“qîéúXÏ®f²�c)úoõ«…ïH3û[ì~Þ�çœYÔ?ñ¡YlƒÿãGízYŒ¨Í�U2‡;<'ó<zãA\¹ØYY®ˆüÇEϲUËßq´|«5r±i+yšbf!¦m‘›Õgû ÷¬ä¶ì­yWu2bc�O#ödž‡Cì~¼ù01à[×¼÷¬Þ¾AtsϨ˜¥wû\íýkø“y¹û1ê¿ÚŽÎ»qö·DwEëáèÛ@s¸Ý2Ïáy?î]Å£„4;7ÄìŒ ¾;T{˜F‹_Ä«KÄ|sþ¬²§µm�#ï+·ßƶ�F“қĔ.oØGã¹<�†Æ´Ç®�Åî¤h({zÛzº]—ÞéÝÝ•Z�‘<¹º²0ÛTâÙ +ý5ÊxfH;±³VÒ½i^’‘™^¯žÌópÈ<ˆWßyÖ~Tݵ÷ø±á£E?¨e{£ôÖ•rïÚjÏåy8Ôì§¾56¼;Þz‡kUn¡[òßZ—KåÒE;Û.Ö+£©þ6:WûÅ}ŵû“y¡û®'¯µÈ`1C.‘Tv‡Ìˆ2ºš¸â—ÚcÑNÍï]¬ó—(nõ,P½¼kcvýè„Í÷¢qy÷�w›/—¶}bù^qµ4õ˜Óe? îtôž}ÔžËóh¨Íqª’ÑÂgB«÷Ó¨ç1v5ô;õŠ û½¼}�Кÿöî‚i»¼fÖW*¶öbÅH€_{úÈotŸ§[Ýùwp…4ëûùòdž‡CÞÁuúÅúv5Ö…ž�]\ήË;RØUCÃ×Ã[»åKÄÞ³»îv�ôO»£¶�`_Æ4hëèžýŸËóp>Ø?}CLy]÷ì[ήoñ=�8·©¡ãÓˆ‚òû†«§íþSâ[âéÛ¢�([Ž’£{E3Û»<»":™çáÐw.Þ<ºÖî¤UÊ2v’vÑï‰ÇX¬øÏÇsoÉ(í±"¡!¢ŽîF9™çÑPJn83Í.;øeÊÅrc í1ZEÕnÆœzqƒÙÓ×Ëm¨ÚÅOkø±îýÃôæÆèá ¯myãnPìE�­O“táúµ‘õ«· Ο)A‘ôÉ›®=•#½åT|ž)ŒÛÉmu…Y¢ŸîY5õ©“rGá4ú ;¨ñÁÒÏÝåüÿò pžö§)mPý�×é¸?ЮÚC°¦<ð®Æ‡|Ùó­üú0+³göàmžæ¡Ò†U·}½„òv^]ÞЮbCŸp¹7Xê ºDoöµN×nÒűúº‘³|øækK5} GÑëñéÕÈã‡rØÉ”þkéà/�Ý@þ/Oß—ïV¨"N¦žtñË…¾[â±sýþ1 §CÕÊrº½ Ên %zAÊ"¥õƒšûkèñ™ñ�býžß×lô>Y§j"[Þ¨:V,‘3赘Z¯=‰éÛ/i°ÓYh¦Ð MØ tdbÓ k´ežñ;ÂÛ‹-�ykßô {<µµqô¶ +z|µ +'¼98M]gû”|eE⌒ö)ZgXFœðBqÊ*Ìݲ™™H^Is=ÙïxWXª‹�°0‚Nm×¹>Íò¢«¬´‚%Alù /Øi^ižÙ#ýêáõæ~ŸLu�´Q{“¾pikIáÉR[NÃü´Í9¶¼è¡Þî¡V–ec϶ §�Z¸Ù Ç(“¦žmJày¥®Êf•Ö‰¢ÑdªÊZ‰±Ú¦lÕ-¥ÅIôRl1E—þ™{Úó^iNô¼WÂ*-•[g¼-ÙyçØ[§zÊK&Axî&u=¥­²uÝn^w�m¯¬®zdªz6¿Jù*þ{ÍØß(¥ª?e'D§þá LÔNGklù–©J!€C}Ž*:ö¾Ãûóìï•lw�ׄ*jú*­l ùXÁŠª_¬•³e%6é>[A�æVonÔ峄eϯlµÓHKEú +©¥ 7ÑÇÓ¢Úx“#m¡ÄÙöIùù??÷"; +endstream +endobj +508 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 507 0 R +/Resources 4 0 R +/Annots [ 509 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +509 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 563.554475 101.433071 544.804475 ] +/BS << +/W 0 +>> +/Dest (cb21-1) +>> +endobj +510 0 obj +<< +/Filter /FlateDecode +/Length 4918 +>> +stream +xœí]]�ì¸q}ï_ÑÏVæ÷XI~0p#0ò0Ó»c#˜ °ÎCþ~N±E²D•Zêž¹w{�ÜÁÜiUñ£X<<,RjJŸ~¾Óø/9=¥”cpçËO§ŸOjŠ^á_I±¸(ê?á7ú³V.N^ç�üù'Ø8ÅìM ç÷þ.yò÷ÓŸsúïe}6SÎÁhþû�¤rvŠ)FåU†Ji+¨¼Ÿb4>ª '41gI3|tÆ­Uf¸œ¼¤‚Θ$¨̰.j»Ve˜a¢v’ +fèì£ Ò +vh£”¨ƒ!Ê9k�öS€Óƒ¤3z +)›,ê"t:Igí¢Ó^Kº<…|’t¶ø¬´¤ó°Åk甤ƒ-Φ(él±Á*Q[LŠVÒEØbà�,èlº’¨ƒ-*(-é²�|NΉº �J1­uFùÉ'k•¤ÓzòÀ¦uQè¤��-Aù,ê`‹·ÊH: [~$xÂÛ˜’0Z �n«¬–t¶�¨ƒ-è|‰L€-*‰0‚&â%‰LŒ“ËÆI$`’�\rIb“òäb´ ˜ì'r”xÀ* �ÑX[¼ X [F®¨ƒ-6;‰ ¬�-H q�µ°Å8+q�Û: Eâ ºu*k‰ ,øÖ)$.° \˜©$.°`\›‚“¸À‚r¥,q�çZp§Ä¤‹á%.°`]냑¸À‚v­KAâ ÞµN+‰ x×Zäu°–¸ì8Y�¬Ä¼kµŠ8ð.†‘‘¸½:‡Aâ`e2))‰ x×$å$.pà]1ˆº8a Z‰ x×x4Aš¹Á»Æ+#q�ïg‚ÄÊþQb4Þ…x9€- X‰ 0ßCg¬Ä(l2K$.ðà]�1ý cl5锃ļ«ºOÔåIGx\·ðò¤CÈxð.&*+q�ï‚>“Äàø 3ª‘¸ÀƒwµÅL-éÀ»Úd%q�ï"nð“F qæ·I+@WÔåIå”$.ðà]Ð’‘¸³ð¤˜DÔÅ @Ò€Œ'…8Tâ‚ÞÅôž%.à]å­•¸ €w•CØ#ê`‹MFâÄ5ÐaØ +cÁê¤ ˜BÒ�w•FK:ð®R1K\À»4mJ\" L’¸Nˆ‚�Ä!¹)Ç$.YA‡�OÔ… ×^₨ ð ,Q[\t °ž²ÍIâ‚h`‹5Fâ‚h` B‰ LY#ú—°p×¶ R”¸L6¥ìœÄѬÇàUIÌ”"èZÔ%èt”¸ F7a*Ö`-5% z‰ @ð…KÀ è´“¸ fØ‚¡"q¦¢)Dæ’NÃÙ Ò…Nk‰ ’�-ˆ%.H&a•”Ę¡±–„«%�S´ÎL$& +%.À0ÁJL)ê` hBâô-¶½ÄXü`±‰eލƒ-Ö;‰ R2´ÜL¤[Œ2›´ÞŒd[ñI\�U˜(L–¸4�Rd�°Þ4NâŒKZo&‰ ²UXob‰'ŒÛl­7£ÄÙÁ�EÔÁMY·à$¬7ÁN’.À“�Ä9Zo&‰ f`½‰ˆ^ÜH´ÞŒâvx×g0“¤ï"2 àëMD¶ÒÚ^�x}D|&+­8“¸c @½s«¸e À½˜­¢¸g @¾´F7 `&V–)ˆ»˜V¡ÔJÜ6Pà_ÄcnÅ ×Ý'¾E‡ˆ93EjdưpˆîÛš£'³É®ûcÿëé·/˜|ÏýŸÓÛoÊNYýÑJj‡ø +ÃÀdt·Gô­Ñ|‹¢Aªü+ÂÀGò�1w#5hqÞt##1ýÑ¿óúÃÂrN¦#7ÖE�ö2…sý`¢RºÃ¢ëCsf7ùî<»&GDùÜ>hÙÖî*^o÷•dëÝy>ËVÛº5SÒR-`ki‚v@Â�Y> +‹ND1il6Äúʈו[$þý—`¶âº·Ü.™ùˆC4Ýøó—ŸN¿ý㟿ÿþË¿ÃO_ÞNù'¥|øÝwšþ¦ë_w™¯ã|=Ëk:C±,ÚhÞð3¼3³<á׆t¯×kIGyŒ›Ëžõö²Ë\î+Ëçz~^âDâøåi_®u`Âîå†Ù–¹œ’eiL‰êí“ÚñŸç/8ýó—%dJ|~ÊŽeùʾ¸°Ø¿®‡;˜uÔ]® @Dþy|¤ƒãui�eåà³5³m—Ðd»ý�'ºßp/žæy6@aÍw Q„ŠGzÖú_7õ|Ìþ TÙF9A/.c{¨:–çéPåñÔ/Å;w÷î§ñÍ<¢è¯¢ß ¤ðˆzÆeZsÜFʱ˜çé�º«¾±cõ¢eœx‡×\¼^óÓ}¢‘ÓZ}C9”Þ°kÁ‰Ã1æ¹µ‡ÚÒòya£mÔ¦¯»B”ëˆgæy6ĺ�xvgôùâ¼�G2O»ZÜ�Z6Ðü@Œ{0ÏÓ¡ùvŒûÑÕ¿Ó9rÖ‘»¶‹YØõ.÷‰øˆ©÷Üùo•Ó=û—ë³ôwÁ�q‰&é|ý‘¼�¾öYæy:ôíÄ©ÿˆ›Ÿ1pl4Œ£¨¯ødôzŸ½c{0ϳ¡×ï<:öÖ°j‘žDW:uﳡbä(þTç°Š6³Q潈߳ýÎ'nD›æà~`#•¡û±ç¼6PúÀsó<Jwž+ØB\Ýᩞ~e÷R$U´d:µz‚ð[ïáþšïx£*7�©Þí!õXž§CêÁ¯ýÿ�ù C¾·ë—>Û—enÝSlrÃíÞ@ë{°ó<ZoÇ®­çÞ–(Y<«©Õr_µÎ€»ì­g†h`D-=W¿xj0-Ó•gWǡ׽-ó¯Ð1£¦ìýnì-Ô‘¥êwîqæ�ÑVlެ�<îŸ5û7¾…Ø“=˜çÙnǯ#�;J‹Ý¤À�T=?ðÈC½Õú©ì$Û3>/ËùŠ£p…(͸�ÙJAËj…´U×<Ì'p«e~m<ÎïË ó‰zÛ@²½Ÿ‹æy:$ߎq­°ž]ÝzÊžî±mqa-kàRËî¼®îË9V‡êbTцñî÷ø]‰£±Ôi×yL#cú�]ÞƒyžÓ¿ùÅž,¨ßõkXçqFeÔ�¾nñˆ¿–IÌ.1åê‹ù7úyë^òÖwV¤»R4†Ç™ÀQñ­ÙhŒg$L·4?,ã¡‚ÕÁ_âŒÂÛ)ã—=«éÀ> ?ïá÷Xž§ÃïÎÞ®€ß…Ÿo|«=é’7°ÂcÓñ›1bÛG¿Q¸µ—âvÛ÷WØ7.å°6Ë·£f¨'Åz¢]²sXè² ­6©ôÄüË÷¿ÿ×cû”´CCkºv¯¥&O˜æáa´6´“w¯i=±ÏkmÙõz%Oƒ‡ýœ¶�Bêíê}ƒõ2úî y½—YÒû«ç;;\õÍþÙ&ÊÛâ=Ëôf™®ï”^*½pÈí�»�<­Êw¢—-jµ©î1ªÉQí—¹¶0WxùIÑiZ–NSžË·sOxâìtõ •§X—,5FÇÙ®Ë)­®Þ Å·ìÀ¤ºa‡êm)=UÛGž7×1+ØFÇåLÈBÙ‘ùš¿ôüÛ\Ö GCDœÓÎ>éh˜Ó +65$é¹ìœÖ7ä½Ìe²@ùªßݬ»îÌTÙM_ú±½Í‡anWµë2÷�ºþ-uÏ~ñžµ!-}ÒÚ=�2±OfØ!ñn)—õér„w?ΉÏÍ¥Ž"æ�Ü?W¬•>Š7}W¾ 3N«.¬o6ÚVý42Çu¯wNê®â<޼ZöeM7�µr÷¥Ž_Íì¨c1ötc™�å#É~Òóý½’V]mW¶¶ë¦ßòÊoC_5Û÷WV¬}3°,ž�woºÝ.Ö¬/1~Ï'1½Q«öz:$ŽÎºõB{|æ™Ó²½ú¦3ÖÆËrÍl+ •ÏÆÈ¯œ hÑÚ\Ž>ùÌóСdŸòùf/�1ê=`.ß%�K>=Ë‚‹k'lV˜Ã¤2í;TX»šoŠtê­êÍ�Í“¸ˆB‰þm/·Kå$ìD{örû0e�>“róy[ kw=dÊ+&œvÃCßêa‡ÝÖ;[N{¥“/ð<�y×…(·s/7õxÀšÏó¼K£,9„.ÛØôyî…›uŒ�¾ÈI‘:àâ blß¾ÀfÉE„i·¢ÆuTF/ÈtL÷XkÛ�öþ4{=rzmËqÅA±S4×í&Ù¡¶êŸõ ‹g=œ½¸t!Ф÷ÝØ„Ñ‹VE:"Vô_˜¿1GXÔum½4w£©þÓ=Jk3ª¿Îøµë‹¿ç¾Ìfù*7-Òf}ÖÑj©oŽ:ËŒÈfåV~�á˜=‹=ÏOw–6¬ºíçS(Gër¼½ +iÒ†ÞsÆr†˜ÏtœrRÖéÚMº8VŸ7r–·ýÜRÑÿ)z·�+]º‘_Ìé.ü[˜xëòª¼ôC1ÆšÅï'zé‹ÄX›ƒbÎU+Ëé¶ä«² &ë8å1%&D5ìëBš%ÕÌøµ5”ß×lt¯S5‘-ÇÑ^+„ÈôZL­W“žÅôâœ4Ùù*4ShÆiÂ^ ãi{�=ã®X[Å„~-T¬º.6®Ú£é õæºÐ…Ítî:ͺ¿¦5‘uç-áå„jí(}¥ôºŽZTõ®QMf™Q¹I}MÙ:ĵ~D—“ üNÕ¢:³éY¯Ñ¡çWaª@r-]®éÑå$¦›Kó­§bK•zÖ\=ßMéP§%û¶ìÂöN"½ Œ�eëÇ¥˜¶Z_«ÄpcVÂËÉ»6»øýä£�Úw®P¾B� -+·‰“êxéR:ðú C³ÊèÈhúÿJ¾I‰yÊí¤èØ÷~Õ+¡±ÙÄK'qyh¬ã$h{Zæ.cÃ,÷—NJHO¤ÛR7�-¤ÌeLs5�Hª‘ÇR¬Ꚙ(¬ú§q%ªjªëbß ü¾w;}ª^µÊ‚fp÷­Ü.�;ß¹8¶×t†³·•Ë0_…—2±¹QLÐOµ’.6ªÍv½2&ì†�º¸Óè{×ÑÚØ©Ù6ìƒLšq/§¿�Ê4g¬7´œ ÛãòÀh}þ_¤ù~ÿëäάg _çq£[˜Æ­ 1ŸÉèfé ˜^hV…mØ0¡qŒö»X§žÖW4´yܯ׮gW�ØkJÝT7-úîC&6 ºF[æCx¼Ø™�öMŸ°¯—¶6Ž–Çtz~µ +¼9¸L]gû”|fE⊒ö)ZgXF\ðBqÉ*Ìݲ…™H^Is=ÙïxWXª‹]°0‚.m×¹>Íò¢«¬´‚%Alù/Øi^i^Ø#ýððúp¿Ï&‡:HÚ¨½Iß¹´5Œ¤�ðd©-—ayÙæ[–uðvµ²,{¶9}hôÐÂ-.8F™4õlsÏ+uU¶¨´N�. SUÖJŒÕ¦0g«n)-N¢—b‹)ºôoÜÓž÷Js¢ç½Vi©Ü:ãµhɶÈs8ÇÞ:ÕS¶X2 ²Às7©ë)m•­ëv˺ël{fÍpÝ�Ð#SÕ³ùUʇøï‘±sÍ3ì:H©êOÙ Ñ©¿5µÓÑ[^«RàGïòŠ.±­‘»óÜÞ+YïˆÔ½^ºcrÖª¨é•¾² ïPä}+ª¾îWΖ•ؤû lušS«� òNÇòDÙj—‘–Šô +WKAo¢7ÏE¥åÛæåpîÅöIùù?Ò)•J +endstream +endobj +511 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 510 0 R +/Resources 4 0 R +/Annots [ 512 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +512 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 123.873057 101.433071 105.123057 ] +/BS << +/W 0 +>> +/Dest (cb24-1) +>> +endobj +513 0 obj +<< +/Filter /FlateDecode +/Length 4711 +>> +stream +xœÝ]ÛŠ$Ç}ï¯èg�Jy¿€H`dô X#ŒñÃl$?ø÷}"»òRYQ—îžÕj‡ÙéŠÈKTæÉ“‘QÙ•ò,ðó¥ÄÁÈ!„è�9_~9ýzƒ·ÿRŠÉERÿ€_oÏR?X]°ç_H ýà£UÞ�_Nø¯»l“¿œ~üâôŸiyVCŒNI{þí#©Œ|ð^XF¡R3*kï•uŒÊÉ·#§‚Öeæ*3L –SÁ £T`Tfh㥞«"ÌP^N3d´žQI;¤‚ÕÁaŒVŒNÚÁ¡Ñ§Srp!ªÈêf´*ÝZhÉé,lQÊV[Ðù([„w` ÄK(ï•áH@=˜`Ç*ÄÁx¯9PÑÆEÏñ€:%9"жXã8&жŒ\V[t4h[�€ã­a‹2šã ¶5@ ÇtkD”hð­Òq\ A¸0Sp\ Á¸:8Ãq�åJ‘ã ÎÕàNŽ 4HÃÝs\ ÁºÚ:Åq�íjǼ«�ð®ÖÈÉê` ÌqØqÐ2hŽ xWKá9.0à] #ÅqzuÇÀÊ Bð® +Âp\`À»Êc +`u~ÀÔ𮲸næï*+Ǽ«Œr(øG°Þxbyw¶€`9.À|�Ò °AÁ-á¸À‚weÄôÇŒi°Õ CtXð® è>VéÑâ̸E+Ò¹Èq�ïb¢ÒXð.è3p\Ž0£*Ž ,xWjÌÔœ¼+UXð.üËqà0H8`~¤tY]D �ã Þ-)Ž 0 "€IX�$ÉqÈxðC9.pà]Lï‘ãÞVkŽ xW¸=¬¶è 8.€_†-3¦á¬B�)8xWHô0§ï +á#ǼKÓ&ÇΓ@Ž `à/Xq\à‚¢÷ŽãtpùX�pm9.ð Êbu°ÅxÃqë!ê8.ð +¶h¥8.ð +¶Àeà¸Á%¼ovy[v}`` ,wÆ¿ôë¯×¬Ž>ëQ÷Ô¥ù0þåJ�úüûaüçiÍÇé¸0^'cGOÇ× Ëùžã\–ìüX4¾+×çºP†õ^AŒØ‰²}y‚²j6\Ý”e¦Êè2#;ZÑ1ãû9;Úµ—0 MºAYî­ž1Ý´×Rš�.댚êSËe'Ý2 Ú$SNǶT^þ\Úáy]©M¦7¾×/ 5ªÛ‘º/ÏÑ�ªÄ*r‘²ã•¬sÎXåšn¾ŸpW×Û¶CÆ 1¶É{™Ú—ìè}yuìHï/ñºk®u÷Y�yâÂÈ“õ>Ê}_£çOUó-!“ž³�(£Ð¶10Àm sgžÃ!S¯rhï©•Ök‘µ†7oõ ÷=�ï^Y²¦/£ALëªh^@aõýŒUƒÀ‚™³ŽÂ}y‡Â}þbéÓ a‰³ÞW]î�5¤öÜÇ"«ïÉ–Ko¨/ב\Ñq�u]™LËïýâ¶>–m�ðdn»Ks>¤jýAz Rèvyûòy>dß“~ÚÒ3ô5=;›É>sÞ©‡Y-Ìx‡›Ù±ûyÝŸ3ª«äC%;¯ä“�Úô6>¢ÄGE×Ñ»/ÏÑЫ7üÊÜ‚ÏÓ¿…WžºžmV-k|×¢å­ÖÈɦ%oäýè33>mñ4ú˜RÏ“{VrKöæ<›«:±ºúŽ»»3Ïá»îoÆ|tÍ{Ëêí ¼›[FÅ$½YçZmn_ÃïÌs8ä®û¨´ˆÎ«qö[¢;£usô- Ùݾîß™çph^÷{gþè†ÁÍÎ1+#£�å¦Ñb;µGÌ›óg–½ŸÛV9ò¶rËh]âÖÆ'¥�ûB¦ ;ëhÜ—çhh4ë~ìÒó–s©gYO«°Ý»«+µì#w<9{²0‰? +6B6Cö2ž¤íˆ¬m=»Ýž—xdš;üÕ�y‡Ì õ•gíWAÕM±Ç×ð �æý, ¶‰�Ò&G¤²[¨Ý—çp¨Ýˆ§>êÞìo½Â³*Óézþ[Bkï±d.íî³D±îô>¸úËèœÅ‹zdzû�y‡Ð�¸ëÎçFÅ3èfÈI):¤®(£§‰3~É=–mÆô}ùBK=ªû]“çG;l¾�k;¹J[ö¶}hòÝñ´ÔTŸÓD;Àï4´éuµûò µvÃOsëY»áV)½ïÄEÑoñÇ_ñóã¹GFòJ«¯Gh„¨­Ý(;ó ¥nÿܻêhŸRv«�Ù a´*ò¢ìÅœøy~Š‚µnzºã²6 +¾µ[ÃÉÛ÷íÌs¸ÞÝéÃ…®UÆjZMàÞ­\�Y(’M+Eº÷×kNGyò +#ë5yç—±Ü÷M>Só·u•oY´iŸ®uЂ¡”ëF[2'PžpE^Zñ¼Æ}ðøjŸ6ïÅ×¾<‡Ã׆‡uo7}uS»+.ˆU^­�÷ÜGgG�¿-TÊ¡ï|©Ñ¶Ëˆé´â]`¬;vGîÌs8Dm<%÷õ,Å7>göyÌþTÅÛW‚;ó U~c×âïÌ;7÷î«ñÍ8¢6üaGÔkgžÃ!eãékWüd¾ñÂí~_Ôž¸,÷ÍΫkŸ%•WSÈ»n¬\°mG\ø¦''9^{ÇÞVonß�½3Ïáкá½áþ“!áÖ½{"s7ìîIñ‰>Ý“˜ï�蟙M"i Hm"[{¿oµ3Ïá�º »;Î(îßMòŠ‘·Ï/j¶€È;vîÌs4D†}ßdyh7ò-OÞr0ßþþ£ 8ÜÝÛ™çpÞðU_i?ýÃï +xåïP-Ú´Ëg< +ÂÐÛlåš²jè�ð{îM�½“íiä²n¿Ôçñ ȽãÙ;ó ¹qßÜ»¿súÖíö“qûÂ^ƒ_ñ·Wã};õi687ÞkÝ™çpÈÝç¿ÞúF‰ Š. š¸'E×'ûç9êöŒ¦ˆ<ÅhŸÅì;\7çowåô‘¤&o¿Ÿÿo½ˆw<çÞ™çpHÝðUŸß1·bó¶²·~c�Úa×Ú÷²ú{è:�+QØBn�ˆÛ™Œ;Åt�p–aÓ•ih¿Še¨imFC™Ç•jøÚÔì¢{N) ƒÊ¢m…¶¶a#VºJê¦eìŠðÒµbqdí›:a_/u¾9T£éÔªl.ÚÛÁe¨:]§äsS$®(i�Ò%½¼Éˆ‹¶P\6ÆjÙÄLd[Iiz²ß´]¡©®æ¢q#èRW�©Ól[t–¥»h’ÀÖíE[°‘m¥qbcôÝÃëá~Mvy�´P{‘¾´Òrc$-„ÇKuºtÓË2çè3]äÁ[[¨”¥›±§‹“S‡Fu-Ìä¢Åh# 5Û˜À¶•š,›Tš'ŠB�‰,+%úl“³åfIwØVòŧ¨ÒŸÛ–¶m¯”F´m¯¸YZ*7ÏxÅ[ÒŲ-œ}½;QS_202׿.RSSê,›×m¦uçÙöÜ܆©†¸ê™ŠšÍÎRÞÅ÷Œ�kž.êÀ¥Ê?)"C=­µ‘^+}ŽäîçÀ!†ÎÐõ&4¡‘›ó¬ÇJæ‘+ikBw Fká%ð¶` q[Ñõ2tÈg‹‚½¥Û€ Uš³HP:K=Å$S@¨\zZ*Ú˜N¼!ЉÏ^ðG¶¥Ê4|’~þ—úìü +endstream +endobj +514 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 513 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +515 0 obj +<< +/Filter /FlateDecode +/Length 4924 +>> +stream +xœå]ÛªäÊ‘}¯¯¨gÑó~�Áp cƒ?z0Ã0»«{Û˜}ŽýàߟR^B©�Jµ{Ÿ¦wÓ]¥ˆ¼DF®\™J©ôUáïÿ%§§”r îzûéòóEMÑ+ü™S¬.fõŸð/ú«V.N^ç�üõ'Ø8ÅìM ×· þ.yò·ËŸuùßu}5SÎÁhýûWR9;Å£ò‚*C¥´TÞO1UК˜³¤‚>:㶪3\N^RÁ gLT fXµÝª2Ì0Q;I3töQPi;´QJÔÁåœ5‚Nû)ÀéAÒ=…”Mu:�¤³v +Ñi¯%]žB>I:[|VZÒyØâµsJÒÁgS”t¶Ø`•¨ƒ-&E+é"l1ðNt ¶]IÔÁ”–tÙN>'çD]†N¥˜¶:£ü䓵JÒi=y`ÓŠ:Œ(tRˆ‚ÎÀ– |u°Å[e$�…-%xÂÛ˜’0Z �n«¬–t¶�¨ƒ-è|‰L€-*‰0‚&â%‰LŒ“ËÆI$`’�\rIb“òäb´ ˜ì'r”xÀ* �ÑX[¼ X [F®¨ƒ-6;‰ ¬�-H q�µ°Å8+q�Û: Eâ ºu*k‰ ,øÖ)$.° \˜©$.°`\›‚“¸À‚r¥,q�çZp§Ä¤‹á%.°`]냑¸À‚v­KAâ ÞµN+‰ x×Zäu°–¸ì8Y�¬Ä¼kµŠ8ð.†‘‘¸½:‡Aâ`e2))‰ x×$å$.pà]1ˆº8a Z‰ x×x4Aš¹Á»Æ+#q�ïg‚ÄÊþQb4Þ…x9€- X‰ 0ßCg¬Ä(l2K$.ðà]�1ý cl5锃ļ«ºOÔåIGx\·ðò¤CÈxð.&*+q�ï‚>“Äàø 3ª‘¸ÀƒwµÅL-éÀ»Úd%q�ï"nð“F qæ·I+@WÔåIå”$.ðà]Ð’‘¸³ð¤˜DÔÅ @Ò€Œ'…8Tâ‚ÞÅôž%.à]å­•¸ €w•CØ#ê`‹MFâÄ5ÐaØ +cÁê¤ ˜BÒ�w•FK:ð®R1K\À»4mJ\" L’¸Nˆ‚�Ä!¹)Ç$.YA‡�OÔ… ×^₨ ð ,Q[\t °ž²ÍIâ‚h`‹5Fâ‚h` B‰ LY#ú—°p×¶ R”¸L6¥ìœÄѬÇàUIÌ”"èZÔ%èt”¸ F7a*Ö`-5% z‰ @ð…KÀ è´“¸ fØ‚¡"q¦¢)Dæ’NÃÙ Ò…Nk‰ ’�-ˆ%.H&a•”Ę¡±–„«%�S´ÎL$& +%.À0ÁJL)ê` hBâô-¶½ÄXü`±‰eލƒ-Ö;‰ R2´ÜL¤[Œ2›´ÞŒd[ñI\�U˜(L–¸4�Rd�°Þ4NâŒKZo&‰ ²UXob‰'ŒÛl­7£ÄÙÁ�EÔÁMY·à$¬7ÁN’.À“�Ä9Zo&‰ f`½‰ˆ^ÜH´ÞŒâvx×g0“¤ï"2 àëMD¶ÒÚ^�x}D|&+­8“¸c @½s«¸e À½˜­¢¸g @¾´F7 `&V–)ˆ»˜V¡ÔJÜ6Pà_Äcnà Ëîߢ +€CÄœ™"52cX8D÷mÍÑ“Ù�dËþØßÿrùõ &ßë_þqyýÕ¼SVÿjsj‡ø +ÃÀdt·Gô­Ñ|°6³i°ì¡ÄTmÌÝ, ",Ûld&<úsÝ~YÙ +SÉXäÆJ(ÐêßS€Q*÷Ì¥;,ƒ±"04Kv[Îs×䈘 _Û-ÛÊ|ÄêeNl}8χÛ@JX4#Ä\×+y/ñÇv~¯A„P¯ÅšÈŒÙس™>ØhÛz4S'ÌJAf>â“4AKS?3ùÁ,h°Âa@› Í  E¬}”[%þí§ È´X±ìÓ·Kf>b:�ÉÑøë§Ÿ.¿þãŸüñÓ�Ÿ^/ÿýoJ¹¯¿ùAãÓ§åÓùòY®}¹öšÉâ�&,Ÿ´ó\¿×O÷Úu÷êB`ã’ÆÝm(o´+oeZeT½Z>±”šë¢­-¯C[TÏ_Ëm¶dfgÚðu¨÷Vä¹—Që«iŒ*>}Ü|û›ÿ¹~úÃåß?­Á9¯ª +8 7.ÓÌzˆçsY¾Ï¿Œsþ—ƒñ”€w³Þ°ï·ž¾ÉG?ðü£Ï>/�ul(ŒC¨Ú¥¬ ]º#U�H7™”ž—‡Ø=™çÙÀ«Í! oz«"+艬g^×½ç^Ö¤µ!¨Ï�dVVÑfvÊ|ñ÷l7ÐÎ2Ü6RºÅp·®”Z÷8JÏåy:”ºcŽÝCœ÷™!¤rCå„I­32a�¶Ãô|Ä—·¡l�M7¢$u´¬Ðö‹LÝ=?í •ªÊMF»äÜ=¤žËótH=j¿uöþÞ¨«ßÛÈQ¨?(`å5[ýÚGb{âºÌ1šiþº íÕ¼ÊÃГ+±“yž­Ç±kë¹×5Jˆ_›Gu÷2ñ�­3 zfàŠ1Qk^¢Y Ú�{cy„¨×uþ : +j¬_Ç¡s»†‘EeÙð؈3ïm³Í‘µ“GBiÝÎf�lÔã{ 'ó<‚Íqü:ò—gÖã&0$UÏ<ò®^ŠŒ?¤Žöø1d|ÅQ¸A”f\Èl¥ e³BÚ««ŒóÜj™_�fi†ùD½î Ù>ÎÅ'ó<’�c\+¬gÿš�ÆxFÂtKóeÍXü%Î(¼�2~{¬ë4ÛÓðó=üžËótø½³·+àwåç‘§Yì:GI­÷W9Vxl:`êLlû¾�&µ»—âvÛ÷WJ9óþ«¸ÖfùvÙz€P¬'Ú%»7k�£CíÚ¤¹'þëw?þö÷ÿÁö)i‡†ÖtíF �ÓX¼`šw‡‘Ú�Nž]ÒzbžÏµUËõFž†� ß}]ôµ®Åû<ëåôÝò:³Á–<¾|ªRf,Ÿ~IGùZ¬gYûL¯k–‡n7zhî�S.ÜåäeE;µCkZmª{ŒjrTû­ÔJ5�—ï�§±ô ¥]Õ®[éµ|Îu¿4„»bóIk÷­”)õIñ�òçÎå²>]�ðîÂ9q¹¹ÕQÄü‘×#ÑÛÒGñÐ7qã›PpZýsc}³Ó¶ê§‘5–}Þ’>ÔÅ2޼Z÷%g“’¶�_Íì¨c1ötc™�á#É~ÒåÞ^c´ÒK»ý–7~úªÙ¶,¹Ü_,ý�ä±áÙx÷¦Û-ábÍúœñ9Û÷|˵i¯GÐa�‡VhïÙYAúÑc]¼.×[ùX¨|6F}žNÚùx =r*ê;™ç]‡”>0ÜóÍ^:eì=`.ß ¥î—{º Ë‚‹¥v+ÌaR™÷Ö®æâ�z›z·Dcóä.¢P¢½—Û¥ùY˜D{îåöaÊ}&åž'˜ñ†’½ë!3?dê|°;ú^î¶ÞÙù¼·Õ’¥w=OO=Áu!Êí¼—›ú <`ÍÇyÞ%ƒQ–B—}lú\zá°Ž1È9)hô€w‚ÖÏ ¤ÏëIr`Ú½ q”ÑÓƒ™žÓ*�Göé§+�ÑR�ž±¦Sñ‡¤w2Ï“,u÷Ñ9ܧ^¶'ÓîÞ<8¢sïÖµz©‹œõ¨íSúv¹»97n�ŒËìpJÏúìã´a0ö€ºZ §™×I ¤ç�ëìSÔC…G�NÁ›·æÜA»“yž £Ñ†#Œ6&¶¢W["´QàË'ý‹Ëµ¨óìØÇË�æKù,rcоþûR>ó6í÷›½>î°Qt±#æäqΓyžeÝì �PöÈa££MY~°h<\´w`Çñ�:áÈÅsRÛJ�waL?nòï"5šÇ‘z.ÏÓ!5òá·Êy÷a£¡·Çã»ÄðcÅ·µ}³ãMòá¨Æj$Õ�׸l·k;|7%OÞyº·£µûÆbŒƒ[F»ÈÌ�éÎÁ€p™çò<2“>äÐ1RkÞãÈ:B‰tü�ç}yB¾ûdéž~sÀêuÁ;ÏeôØÏy3)ï!æøÁŒsyž…çâÅÖ3ìÖÆÞQ�e+pÍGGH¹ODÖÎQ¹éÔ·:†WÖX«[ÄãcÂB6íÛºâIaÌ݉!�O|8™çé�w'†{r<ˆ2¢�õìf&Ûù.Eÿ­aµ°á�£cÄï±ûõ8žsf¨¿À›øåGízYŒ¨Í”U2ôtú1zÏåy:ôÞ‰+ÇchÊȿ =Ë”ðGË÷|”m7ù¬úcãQãÛP?ÊûèJnÏÞšçîªn±=v<�Øsyž ±ù8Þ|šð[×¼�¬Þ¾CtóȨX¥wÇ\›Íãkø“yž¹Ç1êÿ·�ãìï‰îŠÖ»£oÍîñuÿÉ»³vïÞí{ߒ߯žÌólÈÔêNÀúÁÓö‡Àê¡ÍÇ�Ÿ-üi°ýSy7Zôèa¯íüNË Ø«ÖVï&¹Íz4aûꨫ^×µ>½€"éGlº 0Gz� xÆ&,‡\m9„Kój;N_z¾aÞ»^æ£vè’t_{×ÏgÊ!ÐùÀc.LØc«~^§æ{çúÊÁäùÐ$;¸Ùʯ‡ ™=«CŸ¹ÜqŸÛ°é¶Ÿ/a~ÿ¥žß�¬Bš´¡I¸7љᘯôÎͤ¬Óµ›ôìX}ÝÉ9ÿ´ÄÏ-Uùµ E/ ¦—�ÎÝÈ/JúŸçþ颳›Èÿó üùÍðj'S/ºøíB¿ à±sýÿ1 ËWÕÊrº=Pe7�mœò˜ÒúI•¯ýÑ:¨±|5¾¶†òûš�ÞØèTMdçw. Bä z+¦Ö«I1ýºBšl¹ +Í:”Ø„½@ÇÓö{Æ»bmú­P±êºØ¸j�¦·ñ6×….l¦s×iÖý5­‰¬;�„· ªµ£ôM”Ò;ÝkQÕ»F5™eFå&õ5eë×úIÝ.‚ðU‹vè̦g½FoÆ]„©ɵt¹¦D·‹˜®”æ[OÅ–*õ¬¹z¾›Ò¡NOuìËnìñšH?ÃÆˆ²õëZLO�´¾V‰áÆl„·‹wm$vñÛÅG!µï\¡|…ZVn'ÕñÒ¥1UWahV½W”þ_¨Â7)1ÏüE»)z7p¿ê•ÐØlⵓ¸<4Öq’´‹=-s—ޱa–ûK'%¤'Òm©›ÇVRæ2&�¹šG$ÕÈc-Ö uMLVýÓ¸’ U5Õu±oP~[‰»�¾ U¯ZeA3¸ûVn‡Æ�o\[�kzÑs³·•Ë0_…·ybs£˜ Ÿj%]lT›ízeLØ )tq§Ñ·Y\Gkc§ù-'åkdÒŒ{»üõ2OsÆzCO«éw x”¥¯ÿDš?àßß.îúÇú¢Üe7ª±…iܺó™Œ~å&�Ó¯ÞTa6Lh£ý.Ö©§õ m7†ñµëÙU'öšR7ÕMË…¾û�‰Mƒ®Ñ–yÆoƒ[ ó­}Ó'ìåÒÖÆÑôŠåj.xsp™ºÎö)ùÊŠÄ%íS:´Î°Œ¸à…â’U˜»e+3 �¼’æz²ßñ®°T»`a]Ú®s}šåEWÙÜ +–!°å¼`§y¥ye�`ô»‡×7÷{19Ô@ÒFíMúÆ¥­a$m„'Kí|Ö—mαóÃuðvµ²,{¶9}hôЭ.8F™4õl%�畺*[UZ'ŠF�©*k%ÆjS(Ùª[æ'ÑK±Å]úWîiÏ{¥9Ñó^ ›´Tn�ñZ´d[ä9œco�ê)[,™Y๛Ôõ”¶Ê¶u»uÝu¶½²f¸nHè‘©êÙü&廸ï=cgÉ3ì:H©êßy'D§þjyLÔNGkìük�*…qôƒ/Ñ%¶5òpžã½’íŽHÝ+á5¡;&g­Šš~÷Q6á Š|_ÁŠª¿ )gËJlÒc¶‚:Í©ÍNÐüÃ_ó^æ¼!Ô.#-éwþ,½‰~ž(*-¿Ua~haµ}2ÿý?xž[K +endstream +endobj +516 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 515 0 R +/Resources 4 0 R +/Annots [ 517 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +517 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 423.873057 101.433071 405.123057 ] +/BS << +/W 0 +>> +/Dest (cb27-1) +>> +endobj +518 0 obj +<< +/Filter /FlateDecode +/Length 4770 +>> +stream +xœí]]¯ã¸‘}÷¯ðs€Qøý,L€Ýäa€‚ ÈC·§o‚àΓ}Ø¿ŸS´H–è’%ûÞîQ/Òn[Uü(‘‡‡Å%é³Âßwÿ%§§”r î|ùéôóIMÑ+ü+)Eý>ÑŸµrqò:‡äÏ?‘ÀÆ)fob8¿žðßpÈ“¿žþô«Óÿ,óè³™rFûó??“ÊÙ)¦•T*¥­ ò~ŠÑø ¨‚žpŠ9K*˜á£3îVa†ËÉK*˜áŒI‚*Á 뢶·ª 3LÔNRÁ �}TZÁm”u0D9g� Ó~ +hô 錞BÊ&‹º�ŽFÒY;…è´×’.O!Ÿ$�ƒ->+-é'çD]†N¥˜nuFùÉ'k•¤ÓzòÀ¦uQè¤��-Aù,ê`‹·ÊH: [þ$xÂÛ˜’0Z �n«¬–t¶�¨ƒ-è|‰L€-*‰0‚&â%‰LŒ“ËÆI$`’�\rIb“òäb´ ˜ì'r”xÀ* �ÑX[¼ X [F®¨ƒ-6;‰ ¬�-H q�µ°Å8+q�Û: Eâ ºu*k‰ ,øÖ)$.° \˜©$.°`\›‚“¸À‚r¥,q�çZp§Ä¤‹á%.°`]냑¸À‚v­KAâ ÞµN+‰ x×Zäu°–¸ì8Y�¬Ä¼kµŠ8ð.†‘‘¸½:‡Aâ`e2))‰ x×$å$.pà]1ˆº8a Z‰ x×xœ‚4sƒw�WFâÞ5Ή ” ü£Do¼ +ñ²;[@°`¾‡ÎX‰ PØdà–H\àÁ»:cúÆ4ØjÒ)‰ p°ž¢Ä`²)eç$.ˆ>`=†V•tÁL)‚®E]‚NG‰ bt¦b-qÖRS —¸?‘»$qÌ€N;‰ b†-*`*š’�g.é4l�“-q<]è´–¸ ØoPâ‚dV™AI\€kI4µ¤sŠÖ™Iâ‚äÂD®¢Ä&Xi‚)ElMH\€þ¡Å¶—¸‹,6±Ìu°Åz'qAJ†–›Iâ‚”`‹QFâ`“Ö›Q€` <>‰ ² +¹É€Æ¡SJ€Ö›ÆI\€qIëÍ$qA¶ +ëM,ñ„q›m õf”¸ ;Øâᢈ:ا) 㜄õ&ØIÒØb²“¸ ‡@ëÍ$qÜ ¬7áÑ‹!�DëÍ(† À»>ƒ™$xži�¸Xo³•Öö +Äë#ü3Y™hřĈ�õzÌ­bÈ@�{1[E1f @¾´Fƒ0+ËĨ¦U(µÃ +ü ÌÝpÂ5úÄCTpˆ˜3S¤“ÌÞ}[sôdv%Ù5>öÏ¿�~ý“ïùoÿ{zùU‰”Õ? ¡¤vð¯0 LFw{xß§oHªLÌDRd! |&s7Rƒç ‰é�þ�o,,‡á?”êm«>c/Õ;š@݆b!X¾Ž?˜å VXa¶ Hc³!väàW*·HüÛ'u¶âm‡Ì|Ì—X ;Øüá§Ó¯ÿð§ï¿ÿðGÀèÃËé/ÿ¡”¿ùN³o÷rý¦�û<ëÒ¬óó÷| ä(Wó¹Y¦ç­Îšf.߃ZÝeÖ¡N7èê9˜¥½‰}dù^†tó÷xžÕv£zþf[ZÚ³8¿^=ŸÚý|~ó×ó‡ß�þóÃtŽKxp™Øè.N÷ey N¿<±¬½Ï›®E“:��s7Ù¡K_–ÍÞʹ\¡MƒûuéÖ]ÎnN?–_a1À³Õ3@ºuìv±¶mû‘åaËÚ ²½¯D‰Å.|GNÂ]ÌîÌs4Ðbu—T•Œ–ÚSÔ›VßO£^(&Œ´ô™{Å„û½ìÆ^»C~4r +iUBªe}bûqi3¼0¥í@zv‰¦V>¥²Ë(žGnIç–éÆQÕë[Až}œ-wæ9òÜ]¾lÓy\öFëBÏtŒúÚŸ~Ôe¥÷F~©ù*òFÄn¥\ +I•f½Ü=nLC®ʩǬ¼·¹L+fN&Jg a ÁûòÁ÷Ò·8”{Ðu×ée�!ýUqiSCÇ�W”ÏËì®ð»«ò˲,£çrüÌ·ÄÓ—á<7P6Ž’>¬ ¯»Ž»WE;ó}ûüÍ$ 3«“–(£ï$,Yòǘ¯øíñÜ[F²ŒRÓ}E8BS"Dé ”îÌs4”š ÿr廙õƸÚ‘]F«¢8†™»!eðÑ==p¡{DßjïrŒ.Ñ$³Ý»ûò®wwúpihÕ•±ZV87C+†Ðg“®+CºO×cIGyê +£ê-yç—¹ÜO,Ÿëùy]e�L3OûñZ-Z¹a¶¥råIWä•Ï{œ‡Œ¯î-íÇ×¾<‡Ã׆‡õl³¾z¨�ÃÄ*ïÖÇ{Îc°c<.çcY9ømÍlÛeÆtYñ®0Vz‚±öå9¢î{M„Šgz–âß2û¼Í~UV=¾Ü™çh¨²÷½œ_šwîÝwã›yDmøÃö‰¨×Î<‡CÊ}�‰Ç¿˜o<Ä=ÛŠ®úº—õÕÞ—]DÓÆ'óêø…¤¶âb1ÿ±Ëž� ?t夯kïFãVÐÊ|)m¦¬’¡Kú÷Ѻ/Ïáкá}Å5üC‚î¿[j™ïáÈÜp%¡�`†8º:Qc!7é>²tcÜw{7y•E¶¼™”w�Pu©ûò©Ѱ§ãŒ¬‡G­]œÿ‘·o/j&#ÒuÿÎÓ­Np%ÂÖL¿3ÏÑé6|•Y÷‘¨þCW¾æ¯µ}“qß?ÝÛ™çpÞðUßÁ+hyhóÕÊu{ša›¯÷Þç3á+èeWZCFŸc©¶µ&ß™çpèÝð]÷\÷y'„5„vËâ +Ÿˆ;îÌs84nø§£·?^9z©¬©+b$ü’S[}lWcá²a¿Ô·Ã±2r½z<°3ÏÑ�ë÷]Á}öÚúWGè°ŸLÚöüúûnü`l§1Íçú'b­;ó¹ûü×IŠr‹Ž_ è" �Å=)º¾ØÐê‹=Ÿ®ùé:ÑÈi­>a/˜Ùaׂ‡9bÌs/†ÚÒòyaåÜ蜾ì +q±Oø³;ó±oÛ}x“Ý™çp¾ï¿>ò$ ºã£!©¶üÀ#OõRT·»²“lϽ'÷pŠOVŠ·¶’Ór³BZ«kæ¸Õ²vm<Î¯Ë ó‰zYy�–zœ‹wæ9’Ó}× +ëÙ›kB‡ìÙáÛÖ².µìÊëÍu9ÇêØx"“hÃxõ{¼WâÎh,uÚÛ¼ ¦‘1ýD”wgžÃazç�_lgA½×¯a�û•Q7úºù#þZ&1»Ä”7÷æßéçµkÉk÷¬HW¥h �3�¼â{³ÑèÏH˜^<ŽùC«C{‰3 +?O¿lo¬¦Çýk´ó~÷å9~7b»~í|笶Ó%¯`…û¦ã�1;|Û÷~ÒœcØmc`Œ¯°;.åX›åÛƒj©'Åz¢¢ÿ'ë½&C´Õ&•žøó}ÿÛÿþ=‹SR„†ÖtíZ‹ºÞ9l©•[íË‘Ú�N-{Më‰y>Õ³ºßÈÓкŸYËÎe¹—ë7å»îR©-4,óÓì\—¿¶vg„¹ Ýó–´—eÞXÚ[[½{fgºöÄ®¦·¼é©µU¹/š{–¬�Uo¹ÒdÑe®-ÌÕ„Eù1N![zÓ\¾�[ÑoÏ­YZòÇÛr‚¥‡•Ó qnË)g^[7”–ªøûa~*rô(Èk[žf{Èr£±Í$¬uûHæú`ã3ý�´ÔÏ EÒëÐl:Ã5t8=ëEð—[Õ/W:/§œÙ€Èó ¨MJÓ_˜]6Å€÷¹ƒš¾¯Sà äÓÓöÜG]»I—†Õ畜å¥r?·Tó{æ½z†^;p} ;˜Óÿ\:ø'Œ$7…:vÊ;¡T'SºøõDïs‚ع>7Ä$œªV–Óm> +endobj +520 0 obj +<< +/Filter /FlateDecode +/Length 4840 +>> +stream +xœÝ][�ì¸q~ï_ÑÏ–æý ¬�Ø€?8�y˜é³c#˜ °ÎCþ~¾¢Ä‹¨Ò¥{f�{s}Zªâ¥D~üXE©)u•øûNá¿h•ˆ1o¯·Ÿ.?_¤Nâ_N±8Éê¿àÜUI„SÉGwý‰&ˆ�œþú~ÁÃiŸüýò×ß\þ{™G]µHÉkå®ÿø‘TÖˆC�ŽQ%¨¤2ŒÊ9‚vžQy%p‰)q*˜á‚Õv­ +0æè8̰ZGFa†±A™µ*Á ”åT0C%•’°Ci)Y ‘ÖÍè”�î9�VÂǤ« Щ 9�1«œâtIxï]ät¶¸$§s°Å)k%§ƒ-ÖÄÀéõKTp˜3c ‹LÞ}�9Z2³‘lZûÇß.¿}Áä{ýÛÿ\Þ~“WÊÊŸø�õ9°Oû¤ú|%ry&œmMYÉCF„ÔŒT ÅyÑ�ŒÄTŒé6]ë�Zš ‹Éfg&_™]Ô‹PA¡¯Œgm½;Ï§Û + >ƒƒ÷Ö׋ÑÈy”øÐ:Cÿ®ëƒ#)`^×K®œqDq¬±g3}¢Ñk@ÿþËÌ=­ûk‡M˜¡Áà_~ºüößÿðÃïÿø¯è­/o—ÿø­ÐHi£”´ZCߎÒÞð±�ÍÇ1»ÃˆR_¿ÿÏë—?õõÐ"——ˆÓ²*޳Ô]‘TÉr±¯Su9 ª2ô}›õ~6 6¹Ô޳ÎLæØÐÒ’,›îgÓÓüíùË |5Í[³ƒÖos]aÊ›ÏÄ9•í:›T—.N6(½jš® ÒØ4¹µí\T1y.ŠŠuÕ«’ÏÌ—´ÑT€ t¥åt™Ò,›`ì†j“ï.­4»jÍ^ÒWûKWtHÊõ¤®ì¡.2Aɽ&£Ãe›�mQºŽÊÎíò:·]˜aâd²­®k�¸¼F¥vm�DZ´… ëh—Ññ/_2;˜Ê·ðíµÉì@KKð«µÃ”§·c”{ó<ÄÑ3�àŠüàz…IšœExó¥]±Š-µNMSO•qÕ^øªܧe&™?ÿõ‡¾ü[#™ e÷ýwŠºñ6}gB!˜˜ùÜã{ê„Í +áÉDËC……m2 â\O"Ù÷û%j“àá$0%º·£Ü„ ‡ÐÚ³öåF™úŒËm_˜ó•ÌW”[ê Ì|ûÊ:o6ZÈþ8—UZi¨c"˜®¾¾Çü`ÏœwèKÙáÕ#X¢H2{Õ÷·<­§¢é|à¯ó(7õx€<ìÏjy‹HÑ€ÅD¸�M—æ^Ø­R§÷ÍY}ºKÞñì´Nó®{]Î�…ð +aשßÏdöFiÖS<Ý—H´8TšGöéi¸D3�9CLn»¤w2ÏG¼¨_‚ûàûìqŸ|)ÓÝñè³o&B7*_Ûyý6Ë‘Iue| #¶MáËüÓô¸¹µîq´«e>£'Ññs_ãB£,h£E;g °}€žÊò$ølV'»‡Ï»ûÿ¤'W¬…GŽÚÉ·m]ð$³j|HÛûƒô”OÌOfì#ï\žgCž;ð!Çž Ë–^¡¯ëÙÕL¶qÌyÿµ&ZXñ7³Äî·}Îê¡þ™µ¼’_|Ôòèu��¨´H2jzæa½'ó<züÊÒ‚oËïÊ+/CÏvQËßõhùV1r¶iËy�}fƧ­žÆÆšâ]‘Ü–½%ÏaT·�Øæ;žGì¹s¯h¿ßËÛÏ­ùoï)˜Ê±ã={¿¾S±µËzý½§yäætCt9Žª£;¤ÁÜÏ—'ó<òîÓñíj¬3=»¸;8ήã)Ý]CÝÇÃ[«å#bïY]·;HúÕ®¨m ¸ó/CÊØé—»>—çé|°~úŸò ºîY·\Üß:ñ|x~nTÏŸÜ=­ÏŸßO߆ë|ø9÷ ôuk—g#¢“yž }ñœ¿yt¯ÝrQÊè;q«è÷øc�¯øëã¹�Œd¥±ùŠp„D$D=�r2ÏÓ¡ôÀ¿<uôw)‡hcDvFEEAÖg1~^X¢ ­Zw==pY¿ +~ô´F4÷?kt2ÏÓõîI.­º1Vs4�kÓ1ø6³ÐJ6E št¯óïáå)FÑ›—é7ñfÎ[óÙ–¿¯«þÊ¢Oû2ÕAC-×϶N ã:x|õw›Ïâë\ž§Ã×�‡õhw}uWû Ä*ŸÖÇg®c°c®Û®eÈÍõÑ>H”Ÿ¬ÛZ®–_¶lëìYlK—f�._êÛ~¾ø¼°Ê{ÁK¯\ÓËb®Þ +rCºÒÞÃQ«J7©Ü°êº‘3¿bç皊þ‡HÒFü´ sîÆþdNÿsîàŸ.*YAíO 0½!CfqÔ変ß/ô†ˈ­ú¤˜„ó¡¬eYUVÙ DDS'ä|˜já´µÈtˆØÁ·ü®d£}µ¬,‰LÞ»uª˜"§Wk1]½jÓ[f¢0󙯦ÐjUØ +´}ÚV`Ëx(VFvB·Ê®º&Ö¶Ø£hWòÚt¾ «é}Ó©®ûKZºîÜÞ.¨ÖŒÒwVJï¶(E•ÖÕ²ÊLgTªRWRÖ±µŸÑí¿“¥h‹Î¬ú®×h‡ðI �lM—J:Ft»°éæÒ\í©PSÅ–5•–o¦4¨›Xž‘å6š¥�^›Õ�iÊáRL;¦Ö¾–±Ã�^ ogëHlâ÷‹ Lj׸Bº½^hºr«8ʆ—&¥õ‹éC³Èheú¢ +W¥Ä<ù@Ù +)Ú#½�µJhlVñ²‘z¹¯¬c¹P6´´]s©*fûöB Ϥ'Ò­©k‹-¤]“uò�ŠyDR•<–bUQWÅDa¥}*WöBYŒ@uMì*”ßâf§«CÕÉZ™WÜ]-·‰}åÎ÷^j�+Úð¾Ú[Ëí0_„·<±ÙQLÐ�¥’&Ö²Îv­²NØ )4q£Ñ÷,.£µ²½Ä«¶AÆÍ¸·Ëß/yšC¸ iTo½¿¥÷²Ôõ‘æOøü×Å^ÿ\6 Ÿæq-+[èÊ­ q?“ÑÛ¾âI1m±X„uØtBm;Úob[ZWÐPçq­;¾¶-»lÄ^RªÊ ªj{¡km؉u…®V¦k·#¼ ­X™�öM›°§SS.Žö{¥­æ‹U8é/§±éL›’¯]‘8£¤mJ‡Öê.#NúBqÚU˜še 3 �}%µéÉ~Ûw…¡ºº“Î� SÓt¶M³}ÑE–¯¢KØô'}ÁVõ•¦…=ŒÑ¯÷ûl²/#€¤•Ú«ô½—Ö #i%<^jò©_žÖ9Çä­RËàm-TË2ÝØ3ÕÉiC£¹vqÒc´“Æ–mNàúJm‘-*-E¥ Èd‘ÕC±ÉÏÙJ³ä+Žl+…êS4éßû–v}¯ÔFt}¯øUZ*·ÌxÕ[2Õr=œC»:ÙRV_222ßç®RÛRš"[×m—u—ÙöÚ]†m†øæ™Ê–Í­R>Ä�Œö-\ªò—WBTl¯ØÀDmU0Úä·¦Êè=8ÄÒ‹¯‚�ÝÒÈÝyö×JÖ+"e­¤¯IѪš12(zÿ-oÂ;éXÑUÞ�ËgK’½¤û€Y +j4·~çC~b^§Ì Bõ4P¨Hï;5äôFzM[�ü; òÊm±|’ÿþ‡@]š +endstream +endobj +521 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 520 0 R +/Resources 4 0 R +/Annots [ 522 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +522 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 713.673057 101.433071 694.923057 ] +/BS << +/W 0 +>> +/Dest (cb30-1) +>> +endobj +523 0 obj +<< +/Filter /FlateDecode +/Length 4786 +>> +stream +xœí]ÛŽ$9}¯¯¨g¤M|¿Hi‘ ÄÒ „ÓµÓ»B½H ü>'œi;ÒY•]SÃÖ"¦ÕÓ•¾D†�O„�U.}VøùJã¿äô”RŽÁ�/ߟ~8©)z…¥ÄꢨÿˆßèÏZ¹8y�CòçïI`ã³71œßNøo¸äÅßNþÙéë:úl¦œƒÑþüÏO¤rvŠ)FåU†Ji+¨¼Ÿb4>ª 'ÜbÎ’ +føèŒÛª"Ìp9yI3œ1IP%˜a]Ôv«Ê0ÃDí$ÌÐÙGA¥ìÐF)QC”sÖ:í§§IgôR6YÔEèt4’ÎÚ)D§½–ty +!ø$élñYiIça‹×Î)I[œMQÒØbƒU¢¶˜­¤‹°ÅÀ;YÐ%Øt%Q[TPZÒe;ùœœu:•bÚêŒò“OÖ*I§õä�M+ê0£0H! +:[‚òYÔÁo•‘t¶8üH:ð„·1%a¶šÝVY-éœÀR‹óx»dæ#YÒˆ:ÆŸ?|úùþüõ×þ„Áüðzúë/hå—_iüõvþë.ËuX®Órí—¿y+Ózh£êÕükŠ)¿îÓ¢[Ê8¿®ã^‡6âÒÕ C™ËPVå? ú Ùa¶í×¶‹î†�ÍZh§^³öêk?ؤ/­~ù·ó‡ß�~ýa ʲL™AIY;R# +8Wq|¬ÊçàøKÀ7ç/ߨ¼ÖµLëÇ,_–¶ß"Ϭî0]ž Þ2téÏDÚ]úѩp»ë<x±Ì¾ŠÞ›“ÿqÿ¯!ô=³æÚ=ԾþOš. ÷$Ú»ƒFû~&=XçéÐè®s逬ö7É£D\S_�HøñF™õWÛþ¸pÙ¥—'ÙO‡cw�ËS¬T²J†VÈב{¬ÎÓ!÷zûy Ö�€Ð¸.·A¡~ ¿~N²=Æ‹VGˆ/›2·8—§¢„—Í­UØÁ:O‡ÜcùkõXý;ztDø +E ¡s•¹¬(r�[#‚êX I½âuZ²„{ë¿°ÖHãu+‚Å2úà qihÛ½0DŽ~ÞdH2RMÏ;gë<RÍ�\õ£�;V/ZƉïð:G©}™ë[¿å´ÖßЕ7ìZqâ#Æ:î +¶²<.ìÜÝÓ—]!î öŽ|ö`�§Cì�|v/ªóÌSåyŸŸÉ<íjñfÖ²ƒæ;r܃užÍ×sÜÏ]M•Ѩù¦À£mÄÍÐ.çÊ8×G˜âÂjÆüÚá·ÊÁíšV^yþ»âǸFÏt¾üLÞAß»¬ë<únä©ÿ‹<÷ž�ª+èܬ”.¬O'ûâËí=ÈH¶<'=¸â:XçÙ�l?oÏõ'‰äGì0No1@ÏílòðѼþè³—µŽÍ†qõßzY~zô©íÁ:O‡Þë9íf´†UKC�ŒÃJ§î}6TŒõÒyfÅamf§Í÷"þ–íæ÷¹Ì÷ ›© Ýâ ¸Ù×JïxoÁÁ:O‡Òo*ØC\Ýᩞ~a÷R$U´dº9¯ü1Ÿ2ü”ŸX–£*7í’s·�z¬ÎÓ!õz^ûÿ';Ùk¯Ùê×>ï'®ÛÜ{¦Øä†Û-£Õݱ{°Î³¡Õ]Ï]ÛȽ®QRÖàìéæj_µFÀ�]ö62C60¢Ö¼2D³´!÷¢¶;B5¯{]×ß cAMÙûÝÙ[¨3‹Ú²á}3ÎÜ1ÛŠÍ‘Ý'Ï„†çgÍþ°ƒà;ödÖy:_Ï_Gþw”V»I�!©z~à‘»F)2þŸ€Ž;\cÈøŠ£pƒ(͸�ÙJIËf…´××2̸Õ2¿6çÏå†x¢^w�ìïàâcužÉ×s\+¬g7Ï„žrd‡gl{\XÛ¸Ô²'¯›çrŽõ¡‡þ‡U´a|ú=ðùµÙXú´Ûº+¦‘1}Ç.ïÁ:O‡é»¼C<¦˜^üÖyžQõÆX·|ÄÏm³KL9ömœ÷ž%oæÎh ·;o#�²âkÑhÌg$L·2߬ó¡‚ÕÁ_bDá÷)â׳÷Æjú伆Ÿo}¦áX�g￱·+àwåç‘§YîÚÞé’w°ÂsÓSGrÛûvšÔî^ŠcØms`Ü_YÚ)û¯âX‹òí3_4„b#Ñ.Ù¢<�G£­6©ŒÄ_~óõ¯~û{¶OI;4´¦kÏZðËÞ×cš‡‡ÙÚÐNÞ�ËzbŸ—zgóõFžbÞ]Úr¯ó_ª7?U\d—E^máú4ÛRúº,ùåeÑ-¶Ô¾Ëu]mEnÏìåCnMÜ­óóŠÜɧE~a–úK�ï¶u[æÊëÔQ ÝóuDJ™±Ž]~=ÃÝr]ìm^<F/)Ú³æ™ ËñË�±±*csYz K7aÕ¾‹SÈ–wZÚ·Ë�{Š\Ëï~³m'Xúä3�®³mG-Þ˜=U¼uÍŽd÷ìPý^V^¤§5ff.Á6:e)(gBÚ.ó2Ïõ š^—¶>òùÖ`>-¾¨6ù%š§îkºÇ‚„¸´»ø¯£m)+ØßçTŸO>¨âJ[V¶�²óÚWå²�£ýPl\l¨÷Sd’}¾Ûã?.eS×�6ÕQÚáü’ûké¾ÝàkÎÔŽÖýžk5[*õVªïh¾Pt4—Á·+{®úÎŒ¾+3Û¬ÇËÛîÃ]ýZ˼2n7 [¡îÑÃ`y–Uy@3;꜎½Üئ®õnŒ›^ž––²s便;·ñ»ÿ7ÍöÀîkÁÊüÄvßtpÞŒ¸¼‚¯¢ßD˜A÷î8¹Æö�®ú+HXkQ©ú<­ýÓøÇ±×ì+¿Õù³ÎdÈwÐô‡Q›{†IÈ·cL^¸çÇØxÕÏ›¸À³Á^þ)yDëuÝ9&¯¹§Æ¥íGZýlùH8�*vhs°Î]ŸuàÆ7{}ž’÷ ùñ>MãqC/ôeYª<Ân‡9L*Ó‰QC‡B|Ë´¾ñb·Ecóä.¢Ð¢½UÛ¥rÀZ¢=·jû0e�1“jó·¥·e›½é!SN.u>Øý·Þºsóî�-‡Ñ�*wxžŽÒƒëB”ïóVm7ðª5�ó¼K³,9¤ ûØôy…«}ŒËV‘“耟ìÁ;A\¨¶·°$eµP°{Éÿ6¹¦#)3þ6tZföée�å8ùò\ýé¬ó$›7�û²S׸O}ä¡íúì{è)7Þ\¼zè9>`ÜÙRË’id„yù·îg³a(=Œ´ýaAÝl5 :ã·tÒIÆ3Òè@`ãm¾ùQýƒuž�Ýì௡ó�(*Ž3 j„khùvXC5 +ÌsÞZ¨¯¬qúsSÎ>E=ö8ðß—³¤¢GM¯m90(v4UƒÕÍ"7PT}³=謇�ÖîC“tˆ¼MÈ]@ê‘Î]ÃGX>븬-(pµ½Ï%ˆ™ê_½ää/l=ççüº¾âëÀòù<ËMÛ/b¡(¨Í>Jéïã2FµZ¶öëz‰Ù³ZOæå“å6ÃöÃ)”óu93V…4iC‡ÊŸƒ›hû!æ3�Q˜”uº“.ŽÕç�šå(þZ©åt~EöÒa�óÑýìb)ÿCàïO:»‰ü_6 ËIÚªˆ‘iøQüv¢“Ô� v®ï4Þ“py©Z[N·�Ë*»€ã”Ç’‰jyÙw7)NÎ/�¯wCõ}­F'Ü!‚šzE˜Ÿ;„¨ôVLw¯&½ˆé4ú4Ùå*4S(ßnÂÞ ãe{ƒ½âM±¶Š ýV¨Xw]l\µGÓé¥Íu¡ ›éÜuš -k"ÎkÂË ÝÚQú&Jé,³ÚTõ.VñUf™Q¹I}-ÙĵqD—“ üJÕ¦³éÙ¨ÑI¢³0U ¹V.×r‚èrË-­ù6R±•J½j®žï¦t¨ÛÔ/È.ì @¤¯×`sDÙúr-¦�í6Ö*1ܘ�ðrò®ÍÄ.~;ù(”ö�+”¯ÐãBËÚmâ¤:^º4¦ê*LÍ*£séÿ™*|“ó”Ú5HÑYªýªwBs³‰×NâòÐXÇIÐ.ö²Ì]:ƆYî/�”PžH·•n[I™Ë˜<æj‘T#�µX7Ô51QXõOãJ.TÕtמAùm%îvú6U½j�Íàî[»]w¾qql#®é`Üfok—a¾ +/%°¹QLÐOµ“.6ªE»ÞvÃ@ +]Üiô­ˆëlmìT°X^öI&EÜËé»S sÆzC›iÁj:ç�gYúüo”ù~ÿ~rç?ÔƒEç8nTc Ó¸u%摌¾$Ó·„Ta›6Lh£ý.Ö©—õ -ŽÃøÚõêª{-©ƒê¦åBß}ÈĦA×hË<ã¯/ƒ["ó¹cÓö|iëÍÑæ I[­Â¿\¦®³=$ŸY“¸¢¢=¤Cë «ˆ Þ(.Y‡¹[¶2“É;i®'û +Úàâ,� KÛu®‡YÞt••»`E�[~ÁvšwšWöFß=½>{Ü“C�$mÔÞ¤o\ÚnŒ¤�ðd©-—a}ÙbŽ-ûjuòvµ¶,›{¶%9}jôÔ­.8F™4õjKÏ;uU¶ê´ŠF�©*k-ÆjSXªU·”;N¢—bË)ºô;îiÏG¥9ÑóQ ›²Ôn�x-[²-òαß�ê%[.™Y൛Ôõ’¶Ê¶}»uß5ÚžÙm¸nH虩êÕü¦ä]üwÏÜ™ë »R©úSvBtêGq#P;­±åÛÕT +âè 2¢KlkäÝu®ï•lwDê^ ï Ã19kUÔô=y² oPäÛ +ÖTý=¹ZVâ-½ÏÂVP§9µÙ *_”T¶ˆP»Œ´T¤ïE³”ô&ú:—¨´ü¸rÆjû¤üü ·Ì +endstream +endobj +524 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 523 0 R +/Resources 4 0 R +/Annots [ 525 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +525 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 210.123057 101.433071 191.373057 ] +/BS << +/W 0 +>> +/Dest (cb33-1) +>> +endobj +526 0 obj +<< +/Filter /FlateDecode +/Length 4688 +>> +stream +xœÝ][«ä¸~ï_ÑÏ�Õê~�Ø…$�° By8Ó³'K8Øä!?Ÿlëb¹lËÝ='žÌ¡§ÛU’U–>}*•eK\9þ¾øÏkÁ¼Îêëíóå— gÎpüRÌõ�ø8s\;fD°Þ\?G�rÌ#�½¾]ð_sX'»üùW—Îóˆ«d!X)Ìõ_?E•VÌyç¸!T*.¡2†9'�%TV0\b” +f§¥^ªÌÐÁJ3´”žPy˜¡´j© +0C:¡)ÌÁ8B%8ì’sRC¸ÖJ:a˜E¥[J'³>È@êtÂIJ§³N #(]`ÖZã)�†-&pAé l1BkNé`‹VÞQ: [”UœÔÁé�¢t¶HÔN t¶]žÔÁn¹ tA1¼Ö¤.@ǽóK�䆯§tB0l*R‡…F²ŽÐIØb¹ ¤¶Å%¥S°Eã�Ò�'ŒrÞ½UÆÞ­¸”ÎÀ)�&u°�O1€´°…;KQz‹¼Dq€tŽé 5EÒ+¦½ö H˜vNQ4 ƒaÚGñ€â:)("P¶m)&P¶hô\R[TÐ( [�€â¥`‹ÔŠâ¶Õ@ Å +t«y(ð­æÂR\ @¸0“S\ À¸Ê[Mq�åJ�âÎUàNŠ HÝÝQ\ ÀºÊXIq�í*í-Å +¼«´àhð®RÈIê` LqØ‘)áż«whð.º‘¤¸­Ê€CKq°Â¤÷œâ Þ•žkŠ 4xW: ¤Î1ôAEq�ïJƒK Fnð®4\R\ Á»RKKq€ÂÀ?œôÀ» C»°KqÆ{褢¸'cn ż+†?¢Oƒ­˜ðÁR\`À»Â£ùH]`¡Ɖ~‹ZfÂÚ@q�ïb Rð.èÓS\ŽgQ%ż+FjJÞ2pŠ x~ƒ¡¸p`Åߘà€.© Œï).0à]Ð’¤¸£0ãLBê�Å cÆá‡R\`Á»ÞżË�RXð.×p{HlQ^R\¿:t[¢OÃYe\‚)(x— ´0¥ïrMŠ ¬‹é).€� ^°¤¸ÀzÍ‚s–â8tpùH�e868�e‘:Ø¢�¦¸Ž5 *xŠ œ„-JJŠ œ„-p(.€GÀ‚€÷MN` àBÎ4l�§Hq˜Œù 5ÅÎXÌÇP«”ÎJæèšÔyè„£¸À9Í0 Š 0—b�žâ<‹îÅ0:¡).p¶ «P\€¡ˆy ÏœÒ Ø'›âxºÐ Aq�—°Þ Å^zÌ2-§¸#4æ’¨jJ§yœgzŠ ¼¶,ºŠ ›`¦ ¦$u°4AqÚ'N¶ Řü`²‰i©ƒ-ÊhŠ ¼—qºé).ð¶H.).6ã|ÓQ\8l�ÇGqAà–E7™âÐ8tœS\„Ç|SjŠ Ð/ã|ÓS\Ç|S<¢ßeã|ÓQ\4l1pQHl�Óˆ~ NÂ|ìDé,l‘AS\¬�óMOqÜ Ì7áÑ“!盎 €wM3Q:ð.8“a-ÍõÃçË·?üù»ï>ü 0úðzùë¯97æ7߈ø-›o7~Ã¥CwÀÇLßñãÆcR«I÷Ò¤ù4}Or)'}ú|š¾Ã2­þi²Ë�ßz²[OÇ@1zÉ”FMºÛtlçió5‡¥l°‡7çKeºæ¼.•ý›¿]?üáòÛsàÀãÈÀá}XëËòÖž±l5s cúuŽ-ý2Ö¯áÓqªç�U[¥:þTÚ(ÂeÀ’ª0–ÚÊÏÛDÛy› i~jppÃïPÊJvÎÊ“ëçt;¸ÌXÄyÒqu¾ô;×ÃkYC�Šªž]«§q +Oô0P;óœ©r“ )„ѰJÒñ%cl2ÍmŽžs5­md,cª¼·¹}ƒ ©g‰±×‘=iº¾�Õmu¬šßrÊVzž(ב¯ûVì2-{Ê’o™*óaŒÅa–©¹ÝCf_žÓ!Ólrh®Åv¼®‘µ…»¬õ÷½œ�ïž�,QÒçÞÀçe4¯ °x€3b?"f…}yN‡Â>o1·Œ®�°ÆY‹.µÀR[î#‘Õ¶dÍ¥ÊKe ŽèÇ1¿2KŽo½âº<å×m�ñdª»[u;¤¨ýÁ·ôC¬iy}yΆ<¹ãC¶-éæ5½@_Õ²‹‘lå7åûçrˆ¹Â‚w¨‘ý»_·ý9-›ò'>”¢ñJ¾x¯¥Ñ++QH¸—1г‰ÞÎ<§CïŽ_™jðuþ�yå¥iÙjÖ²Åw5ZÞk†<Ø´æ�|œ|f§͞F5ªÏ¢ Gfrkö¦<»³ºÄß±±}yN‡Ømó4>à£sÞ#³·wðnŽôŠYz½Ãµöø¾3Ïé�»í£þ¿EtžÆÙï‰î„ÖÝÞ·‚f|Þß™çlhVÛ~ïÂÝñ ¨Ñ9#f£gÔѡԱ·˜Æ_móîü™d—¶Ži\iÌŰÂ`��yN‡Æm?v�¬TòbË<2Ÿ–~¿u7gjÉGnxrqgaäd„l�þäe¼VH눬 é—V�y‡¿Ú™çtÈÜñWŸêö·žp¯J7º–ÿÖÐÚz,‰K›ëÌQ¬;½ªüÜ;ñâ„Þqë¾3ÏÙªwâ®�÷�²gÐŒ�-’†è�Qï&.ø%µXB´žÒ·çOÈhšËiPݮ٘Ý?ê°ù(Ûµ#µ¿›ë²µíS•¥ºøœ:¿SÇUz›¨íÌs:Ôîø©œFK=*±�†¿Ž¾«ŒŸ©U¤ÝnåõBKþÛZ“9¶½go—w*Öb±¤'Pß{šzî�®™]¶½jï©VÇù²3Ïé�·sŸ¾™ß.ú:Ѳ³»ƒíèÚ®H©îÊz>¼-o{$º®7�ôÕFÔV\ù—Î3¡´³{§Î<§CðNüôŸ²]Gâ–³û[uLÀÍmÊèø4¢`ø�|yúÖ\çÊÚ^²·RTW±ËÞQgž³¡Ïôù›{÷Ú55Ki}'*Š~Ä«|ů�çéÉ4JMñá1µ·¥3ÏéPºã_öÎ:ê»”Íl£Eö€°8+r<¯ÅœùynŽ‚µ®Zºá²: +¾·Zèãk�:óœ®u;}8ßÔêJ_f¸6g ¶Œ,1’g 2ê>ŽÇ”.æI3Œ¤WÑ;¿MçýXåÓ%]V~Æ¢Nû2–' ù¼v²%qBÌãGä 3žg\�¯úns/¾úòœ_;Ö½m\µÕ¡6¶#."«<­�{®£±£=NÏ +åóà·’“m· ÓÃŒw…±îXÙ™çlˆ²;w‰ý}-ã_3ûtç$ÅkïXÛjíñÕØ�yN‡Öÿëçð_ G×ôDæ¬îâmº¾\ÑÞ3›EÒV�ZE¶zŸ·êÌs6¤º�hØÝqF~ÿj’'FÞ¾¾¨�HwÇ +ÀÎ<§Cdß“,­F>rGá={ñô÷ÿ ‚ïˆîuæ9‚w|Õ'­§ø]O~†jÕ¦.Ÿñ,_Aou§µ÷y€Î<§CïŽïú?å÷”^ó®«WÐxGܱ3ÏÙÐèwüÓ•ÕЋ§>Lášý ùäq¿’ñ§4éjb~“²Å=~4O‰Ô°ËÍX0!DN+–âxõœ‰I÷ãõLMG6›bl²ÂrB]§-',wÅBñJh–B^WÄR'{DÜ¿-W�-Âlz]u¢jþ”Vºª9·„· ŠU­ô�”Æ]@Ó©RíJžeª2*d©I)sƒèÜN„èv!„ßðtj�ÆÌúªÕâ^j£Ð' éœ.¤t„èv!ÓMg3¹¥\NåKÖ�j¾˜R ®|®xB6ÔÑ$uqƒñª�p•~ÎÅ6¶@jkî+ÜÈ…ðv1:÷Ä"~»G¤6…+¸IЫ…ª:o{^ðR¤ñ¹ˆñºf’Å�¨âÿ#U˜,�Ì3ü:C*î&WŽJ!±ofñ¼’j¹Í¬£©Ú•´Uu ç2fëúžé#éæÔ¹ÆfÒªÊ*¹ ɼHR™<æb‘Q—Å‘ÂRýd®¬…<�âŠØd(¿ÍÄÅN“»*Àž +³¢‚»Éç-b›¹ó­»Üâ"n ˜íÍç­0Ÿ„·a`Ó­8Bß§BŠXò<Ú•Â*a1 ¤PÄ…Fßqê­™�âvçégédÔˆ{»ü|†9©Œ øa•ˆ;ÝÖ^–¸þiþ€Ï?.úúCÚZmÇ%Ïl!3·ÎÄõH÷E÷�â¸OzænS ¥®h¿ˆ…/iMBCÇ¥¬øZ—ì¼{J)2ƒŠ¬­…¦Ôa%–ºR¨ªf̆ðÖÔbvdm›2`�‡*]ŠQqS¾dêËÁ¡/:U†äkuJŤeH‡VË*#ê“â°*0ËffF@Ö…äª�öëº)T,«:¨Üˆx¨ŠN—a¶>u’ WQ%� ¬êƒúÄZÔ…†™=„Ñww¯‡Û}2Ù¦¥™Ú³ô­–æ ‹ÒLx´T ‡v~˜Çu�©ó–ÊçRUßSÙÉ)]£¸zvPc´’ú’mJ`êBu’Í +ME¦ Èx’å3ºd“�²¥j®Ø“µä²OQ¤?×5mêVÉ•hêV±‹´ñ¼iÄËÞ’Ê�©áìÊÕñ’2û’ž�Ù:w–ê’R%Ù²l=/;�¶×ê2t1ÄÏ”—lf‘ò.þ»§ïŒyš¨•*ý ‘áËf¤¨µpJªkˆîŽ·¢ãáNû*4r8Ïv¬dI±’º$4ÓJq'€·Þ ûŠêToÓ>®t¶ÀÉK:VD(¨Ð_D‚SSìråC§Š& zsïã†öŽ 244ܼӳðÉð÷_–1í< +endstream +endobj +527 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 526 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +528 0 obj +<< +/Filter /FlateDecode +/Length 4917 +>> +stream +xœÝ]]�äºq}ï_ÑÏ®Ìï ¸À5�pà�á‡ÙÞÆÜ×yÈßÏ)J$KTI­ž�»ix³ÓªâG±xxX¤(µ¾*üü ñ_rzJ)Çà®·Ÿ/¿\Խ¿’buQÔÄoôW­\œ¼Î!ùëÏ$°qŠÙ›®oü7\òäo—?ýæòßë<új¦œƒÑþú�¯¤rvŠ)FåU†Ji+¨¼Ÿb4>ª '41gI3|tÆmUf¸œ¼¤‚Θ$¨̰.j»Ue˜a¢v’ +fèì£ Ò +vh£”¨ƒ!Ê9k�öS€Óƒ¤3z +)›,ê"t:Igí¢Ó^Kº<…|’t¶ø¬´¤ó°Åk甤ƒ-Φ(él±Á*Q[LŠVÒEØbà�,èlº’¨ƒ-*(-é²�|NΉº �J1muFùÉ'k•¤ÓzòÀ¦uQè¤��-Aù,ê`‹·ÊH: [~$xÂÛ˜’0Z �n«¬–t¶�¨ƒ-è|‰L€-*‰0‚&â%‰LŒ“ËÆI$`’�\rIb“òäb´ ˜ì'r”xÀ* �ÑX[¼ X [F®¨ƒ-6;‰ ¬�-H q�µ°Å8+q�Û: Eâ ºu*k‰ ,øÖ)$.° \˜©$.°`\›‚“¸À‚r¥,q�çZp§Ä¤‹á%.°`]냑¸À‚v­KAâ ÞµN+‰ x×Zäu°–¸ì8Y�¬Ä¼kµŠ8ð.†‘‘¸½:‡Aâ`e2))‰ x×$å$.pà]1ˆº8a Z‰ x×x4Aš¹Á»Æ+#q�ïg‚ÄÊþQb4Þ…x9€- X‰ 0ßCg¬Ä(l2K$.ðà]�1ý cl5锃ļ«ºOÔåIGx\·ðò¤CÈxð.&*+q�ï‚>“Äàø 3ª‘¸ÀƒwµÅL-éÀ»Úd%q�ï"nð“F qæ·I+@WÔåIå”$.ðà]Ð’‘¸³ð¤˜DÔÅ @Ò€Œ'…8Tâ‚ÞÅôž%.à]å­•¸ €w•CØ#ê`‹MFâÄ5ÐaØ +cÁê¤ ˜BÒ�w•FK:ð®R1K\À»4mJ\" L’¸Nˆ‚�Ä!¹)Ç$.YA‡�OÔ… ×^₨ ð ,Q[\t °ž²ÍIâ‚h`‹5Fâ‚h` B‰ LY#ú—°p×¶ R”¸L6¥ìœÄѬÇàUIÌ”"èZÔ%èt”¸ F7a*Ö`-5% z‰ @ð…KÀ è´“¸ fØ‚¡"q¦¢)Dæ’NÃÙ Ò…Nk‰ ’�-ˆ%.H&a•”Ę¡±–„«%�S´ÎL$& +%.À0ÁJL)ê` hBâô-¶½ÄXü`±‰eލƒ-Ö;‰ R2´ÜL¤[Œ2›´ÞŒd[ñI\�U˜(L–¸4�Rd�°Þ4NâŒKZo&‰ ²UXob‰'ŒÛl­7£ÄÙÁ�EÔÁMY·à$¬7ÁN’.À“�Ä9Zo&‰ f`½‰ˆ^ÜH´ÞŒâvx×g0“¤ï"2 àëMD¶ÒÚ^�x}D|&+­8“¸c @½s«¸e À½˜­¢¸g @¾´F7 `&V–)ˆ»˜V¡ÔJÜ6Pà_Äcnà óîߢ +€CÄœ™"52cX8D÷mÍÑ“Ù�dóþØ?þzùí &ßë_ÿçòú›²SV4„’Ú!¾Â00Ýí}k4ßÙ1Ó`ÙC‰©Ú˜»YD¸l³‘Y˜ðèßuûae+L%c‘+¡@«�SKÅàžRºÃ2+C³d·õဦ^£¦[†$J¼¼f«_ûHlO\—Y}°ñómho±[†*ÝaªÀ£/V«bõdžg+Vù‡hµëhÈ|aÕÝËD6V„«†Þ*FdVâzeˆÎ]Þ�{cy„¨×uþ :ÔXÏìÔK»†‘EeÙð؈3ïmÅæÈÚ™™miÝÎfØA°u�#ø\ž§C°;æÛ�¿ü8õ³7�!©z~à‘wõRdü9 u´§M«_qn¥2[)bñ㔽W×2Ìp«e~m<þ™¥æõºƒdÿ.>—çé�|àZ†´†¢Ûº§ž³gžùäÂZÖÀ¥Ö±4fhŸcuè¡þ!@mˆCÝŸ�ÆR§Ýæ]1�Œéôv>—çé0} �ó1Íéů‘a�Ç•Qïôu‹Gü\&1»Ä”cýGý¼™ÿÇ12bF˜ãi �3�¢â£ÙhŒg$L·4_ÖñPÁêà/qFáíñkz¬ë4݈×ðóüžÌólø5Çñ±„ß•ŸGžf±k‰$ÒGJXá±é€©3±íju5F(;ø/iw6RÃnãæÊR­Ü�ëu›åÛ2õ¡XO´K¶Ûjèx›¶Ú¤Òÿõo?ýîßÿ£÷DÙž¡5ÝbYùœg/˜æÝa¤6¤“gç´ž˜çsmÕ|½‘§Á»_™g—²Üëü—ò•4a¹öKY·%v¼-º¥.J3÷�Ûzݽ漤ó·Ù«§Ü˜¸ÿ\[éç~î\´X«»ÔâRcèøê»,�[§)×vùõ¬¶·‚·¾„¬Ÿ)VY{ åSëôŽê­KÓo³¥Ó�ÙÒIÌ¥Ívé%OóÂÒ[¥§¾lË –nSÒQ¸m9ji×ÜæÒî#;èô¦l‡êmYùƒümf^l£#‘A9 ¡ì‚ü<ç/h|]Êzáˆî>7__T›ü2W¦îkjcéÓ¸”»ø¯ãeI+Øß° —>³syµüRŽ•m£xÀ¼öõîŽÓèƒbßRmK‘I¶yfËË’6uýhSÅõ<&˜Ïrÿ,µÙ ~æLAåhÝÛ\ë«qHÉÏp²f'Ö—nž‡ÌḠÓ~kµ£ŒW³î;o»OwmôsMóʘÔ0œ…ºz�”¶q‚fvÔñ{º±Ìº¸ã³ÁÓ‰>§þóu «¹�Ê®}0öW³?°¶U¿ëî÷övÆ‘Tþz¦’±÷ø,uè;'ú.uÛŠ?V³ØÀ§žù0 ~Y8Hô§e¶~¾Ÿ~l÷N]îvŸ)g߇¾ÛpùßUÞøuúúœ æX ®Ûe–29ŸÕyn\uxã§`Ë W:R|jÕq2Ï»n{àrÃ7{mž’÷ *q¹Q(lÜnÐ ZÜÎ�°[a“Êt\t¨°† ü†Œ+Aô�Ç%ã.¢P¢½—Û¥rº:Ñž{¹}˜²GŸI¹KP;ÞÍ´w=dÊcKλã¡3·êÚ¢È=vt o¼ùp¯õΖ„VK–Þõ<�£‡ëB”Ûy/7õøÙš�ó¼K£,9„´ûØôËÂq‘)rØèïqYYèŸ×�Îjáa÷Û`�žGÉtò{¨´ŒìÒ tÀp&0›= +»Cz'ó<ÉVKã¾`Ô÷©>µ�¾ÍM¾½±7ú†-'ÝÞÛÙŽ‘¶XZ¾5>r7ßö\–e#KÌáÌ�Üò·�ÎãŸNÏàßòEÑ„7üç98(¸ObpcèÞbö)ê¡ÂCìÓÇ3޽5ÀšËæ.öÏåy6ìG¥�°ß0:ÜbYmõј_þÒoœ¯E�gg™^†4_–¿‹Ü,!³®¿_–¿y›öûÍŠïÙÚ”Qé˜vEŒ:‡²“yžeÝlŽPöÈ º£› ü´Üxbnïšã -%z®nýó»�qiµ¹Óõ;Hµñq¤žËótHõ‡|ø­‡ÍÞ}ˆnèm? cƒÏòÞÖö;ÆÃäÕHZÚWx=°k;|6Kž¼3òtoGk÷�Å·Bw‘ÒÓ°ÎÁ€p™çò<2ã!‡Ž‘ZóGÖJ¤c=<ïËòÝG K÷ô›ƒƒ¯ãÞAa�ýœ7“ò.bŽQx.ϳ¡0�‹[ϰ[i{G`æmÌ5!uä>Y;G@ Ò¨ou¼ôóœuôA ˆÖg6íÛºâIaÍ݉!�Oè9™çé�w'†{r<`5¢�õìf&Ûù,Eÿ­aµ°á�£ãñï±ûõ8žsf¨¿>U2lØÿú£v½,F(³J†ž£ZŸ¯A‘ô‚y›®hË‘ÞÉ&ž. tD~ ¯œóɪ?ÈT^ª'pÊÝ•9bjÇÅI÷µ»·œÆYŽõ–ã¾y™«Ûã)ªŸT jóØF©¯<¤æcÀìÈy+¿Ëfö¬ŽeS�¾¶aÓm¿\By— .ï“U!MÚÐ ç¯ÁMôÄCÌWzaRÖéÚMº8V_wr–×ôÿÒR-oîWô2_z‘ãüZv±¤ÿ¥tðÏ�ÝDþ/ÏI•·l«"N¦^tñÛ…Þ²î±sýa«;b.U+ËéöìV•Ý@¬qÊcJë'µ|ìxÑQ¢ù#�xîù}ÍFo¿sª&²åýosÅ‚9ƒÞŠ©õjÒ‹˜ÞTŸ&»\…f +ÇmÂ^ ãi{�=ã]±¶Š ýV¨Xu]l\µGÓ›M›ëB6Ó¹ë4ëþšÖDÖ�GÂÛÕÚQú&Jéýص¨ê]£šÌ2£r“úš²uˆký$ˆnAøƒªE;tfÓ³^£·ŒÎÂT�äZº\Ó ¢ÛEL·”æ[OÅ–*õ¬¹z¾›Ò¡nSs¼ »±‡ #}õ#ÊÖ�k1=G×úZ%†³Þ.Þµ‘ØÅo…Ô¾s…òz\hY¹MœTÇK—ÆT]…¡YeôŽFú¦ +ߤÄ<åƒv RôžÕ~Õ+¡±ÙÄk'qyh¬ã$h{Zæ.cÃ,÷—NJHO¤ÛR7�­¤ÌeLs5�Hª‘ÇZ¬Ꚙ(¬ú§q%ªjªëbß ü¶w;}ª^µÊ‚fp÷­Ü.�;߸8¶×ôÒÜfo+—a¾ +oebs£˜ Ÿj%]lT›ízeLØ )tq§Ñ·"®£µ±SyÿÃò±2iƽ]þv)Óœ±Þг6Ájz<�²ôõ‘æ÷øýûÅ]ÿP_::ÏãF5¶0�[Wb>“Ñ7†¤“bú‘*lÆ �c´ßÅ:õ´¾¢¡ÍãÆ0¾v=»êÄ^SêÆ ºi¹Ðw2±iÐ5Ú2Ïøámðb d¾µoú„=_ÚÚ8zvˆ^W[­Âo.S×Ù>%_Y‘¸¢¤}J‡Ö–¼P\² +s·le&’WÒ\Oö;Þ–êb,Œ KÛu®O³¼è*+­`I[~Á všWšWöF¿{x}s¿/&‡:HÚ¨½I߸´5Œ¤�ðd©-—a}Ùæ[»©ƒ·{¨•eÙØ³-ÈéC£‡nuÁ1ʤ©g[x^©«²U¥u¢ht™ª²Vb¬6…%[uKiq½[LÑ¥ãžö¼Wš=ï•°IKåÖ¯EK¶@žÃ9öÖ©ž²Å’I�ž»I]Oi«l[·[×]gÛ+k†ë†„™ªžÍoR¾‹ÿÞ3væ<ªþ”��úkº1Q;­±å›×T +âèË3¢Klkäá<Ç{%Û‘ºWÂkBwLÎZ5}‡žlÂù¾‚U¿_OΖ•ؤÇ lušS›� ò%Jeß²lµËHKEúÎ4KAo¢¯z‰JËﳡ#Þ~µ}R~þWÃËï +endstream +endobj +529 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 528 0 R +/Resources 4 0 R +/Annots [ 530 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +530 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 450.123057 101.433071 431.373057 ] +/BS << +/W 0 +>> +/Dest (cb36-1) +>> +endobj +531 0 obj +<< +/Filter /FlateDecode +/Length 4900 +>> +stream +xœí]M�丑½ç¯È³�‘ùý, Œ�µ/| Æb±‡®œ)FÍcü÷÷%’!f(¥Ìªng/Ü…êJE�T�ñø )%}VøùNã¿äô”RŽÁ�/?Ÿ~9©)z…¥Äê ¨Àoôg­\œ¼Î!ùóÏ$°qŠÙ›Îo'ü7òâo§?ýêô¿ë:úl¦œƒÑþü·ŸHåìSŒÊ ª •ÒVPy?Åh|TAOèbÎ’ +føèŒ»VE˜árò’ +f8c’ J0ú¨íµ*à µ“T0Cg•V°C¥D QÎY#è´Ÿ=H:£§�²É¢.B§£‘tÖN!:íµ¤ËSÁ'Iç`‹ÏJK:[¼vNI:ØâlŠ’.À¬u°Å¤h%]„-£“]‚-@Wu°E¥%]¶“ÏÉ9Q—¡S)¦k�Q~òÉZ%é´ž<°iEfœ¢ 3°%(ŸElñVIga‹Ã�¤OxSf«¡Ùm•Õ’ÎÃc¢u°ΗÀØ¢b�(3h"^’8ÀÄ8¹lœD&ÙÉ%—$0)O.F+Ñ€É~r!G‰¬ÒÐ-�U°Å» 1�Õ°ÅaæŠ:Øb³“¸ÀØ‚X [Œ³X°­Z$.° [§²–¸À‚o�ÒAâ Â…™Jâ Ƶ)8‰ ,(PÊXp®wJ\`Aº˜îQâ Öµ>‰ ,h׺$.°à]ë´’¸À�w­EMQ[`‰ ÀŽ“ÕÉJ\àÀ»V«(q�ïb‰ àÕ 8 +“III\àÀ»&)'q�%@ÔÅ sÐJ\àÀ»Æ£ ÒÊ Þ5^‰ x×8$.P&ð�£ð.(ÄËálÁJ\€õ:c%.@c“AX"q�ïêŒåO˜Ó`«I§$.ðà]�à>Q—'1â¼Å(O:„,q�ïb¡²xð.è3I\ŽŸ°¢‰ `?†Q•tÁL)‚®E]‚NG‰ bt–b-qöRS¤—¸?Q¸$qÌ€N;‰ b†-˜*`)š’Ad.é4lA�-q"]è´–¸ Ø‚hPâ‚dv™AI\€{I µ¤sŠö™Iâ‚äÂD¡¢Ä˜&Øi‚)ElMH\ÿÐfÛK\€Í6›Øæˆ:Øb½“¸ %CÛÍ$qAJ°Å(#q°IûÍ(qAV°ŸÄY…‰Âd‰ @ãÐ)%qAÖ ûMã$.À¼¤ýf’¸ […ý&¶x¼Í6Ð~3J\�lñQDlAД…y NÂ~ì$él1ÙI\�C ýf’¸aö›ˆèÅ”@¢ýfÓà]ŸÁL’¼‹È4H\€ì7ÙJ{{âõñ™¬L´ãLbÆ@�z=ÖV1e À½X­¢˜3P _Ú#‰I˜‰�e +bÖË*”Z‰iþE<æ®8aÎ>ñU"ÖÌ©“ÓÂ!ºo{Ž^Ìn›ócûóéן±øžÿü÷Óë¯J¦¬þh¥´C|…i`2Üí}ktß�¢¡…™HŠ,„��Ô!#bîFjÐâ’t##±üÑ¿óõ‡•å0ü‡rzÛNŸ±ŠÏ§Ç„Æ3y9aû:Z|g•4˜N‚Õ6 ŒÍ†Ø �C\©Üªðo?�ÔÅŠ9Ú™ùX/±vÆŸ?ý|úõÿôý÷Ÿþ0úôzúïSÊ…ß|§ñ×›å/àà@mî2»Ï˜GhÑÛu9÷ºü­åj;Ð"*x¢GØâü¢O‹>.ÇnþKeJù±ý¥œëúí<µ=¿¶£¶OvÜcséc\·YÏQÏ�ðVaxÊoµß�ýzac9Úö#«­~ó?çO8ýû§5KtZ€è°™ç;"á›Ø=Vå=Øý�ÅV÷d½’¡RÝD®´úvõJ7”¥ßÅ%&Üv±]¶—²¯Ãù>Ïòjkk륦2Üf¬qJÛµ Â~hŸOÑÖe +/Ó¶”sërã”êç“aGYù{9ó`�gvF7‘Öž¿šè‚g :F}õÀO9ꎲ⽑\j½Š¼±{哹Hâ¨4ÛíÝOÃ, ß³¾�íÔcÖ^ã°¶éȹ6l; " Åa aÁÇê<‚ÝM+OÚÁ#JXò kä–æý,ÈCú ›UqmSCÇ�3 +Êï댨-~wU~Y·eôÒŽ_ø–xú2ôseã,éëÀúzé( a’6~}Çê<úŽ›WHVÖ' ˆ¹ãá`ŒŠßϽg&o ´‡Š„¦DˆÒ{(=VçéPº_Ýr0oŒ[�Ùa´%ŠËï°r7¤ 1ÚÊÓ—ºGômy×ðxŒàÉìz÷`�gó®9Ã¥aT7æjÙM o†v ¡¯,&Í;Cº—ùXÒQ�ºÃ¨zKÑùei÷…Õs½>?WÙ$ÓŠÅË~žÏA†ÖnXl©œ@uÒŒ¼²ãùˆ~ÈøêÑÒq|«ótøÚ‰°õ1óÕ]>3.ˆU>ÌÇGú1Ø1—þXÖ>[³ØvY0]v¼Œå`¬cužQ·£&BÅ#ž¥üÆ·Ì>ï³Uéþ�àÁ:O‡ªÛQÎ?›wîöî‡ñÍ2£vâaû@Öë`�gCн1ñ¼â‹�‡¼gÛÑÕX÷²½Ûó²«lÚ¸ãdQ�çå~b}¬v~î²GóÂw]6©ùÚ›Ù¸ ´²XJ›)«dè‚ém´«óth݉¿¾âþ‹!A÷Ïíj]ïîÌÜp%¡Í`†8º:Qs!Wå>³rcÜw{wy•e¶¼™”w�Pu©Çê<Rw²a癇G1NË`æíÛËšm ²Çwž¾H‚P"ì®ôÇê<"wbÂ�U÷ž¬þ]W¾æ ¯µ}“y_Áî�ìÞÁ:φ`·«~‚7Ðr²·®ÛÓ +Ûb½@ð±˜ñY¾�^v¥5dø[µ½=ùÁ:O‡Þ�ØõÈuŸBøWCè=³æVƨD“¦ojíÝ@ãyǃuž�;ñéí�WN/•=uE쀄ž—ÙùØ-�…ˆû¥¾ŽÝ@nº?p°ÎÓ!÷ØÜG¯­u„÷“I÷…}¿¾'Þ¾™?Çi,³Ã¹þ�\ëÁ:φ\,~m™¤(�èˆðŠ.XÞ“²ë�" ÷Œ–Œ<åh_ç,¾yG}~WΘIbu[ÆKZCÆñpº4´Íï—¸çƒ÷Qø®s¬ótH݉U? ±cEË8ñŽQ_Ýsñ2×§ëD#§µó ÷‚™v­8qX#Æ:·r¨­,_6úF}ú²;Ä Ä>Ϭótˆ}ß݇Ïç½?’yÚÝânÔ²�æb܃užÍ·cÜ÷î¦nÝ=}äªíjvÝÃ[ßjYýV9]³ÿ<ß{@ï¾#ò‹Íd}á�<ëÁ:φ¾°§þä¹{2U7ÐyµSº°sÞº‹ý‹ä6�ÌcÒƒ;®ƒužÉï˹~“Hþˆ\ãtþåÔ²»ãðqxýqÌ–{ Ž}3q½,>=zÅö`�§Cïν¡£·†]Ë]ßU­¨9ŠßÂ9¬¢Íl´y/â÷l¿óŽѦe¸ÙLeè~ì>¯ ”>p_ÁÁ:O‡Ò�û +îùvôÎweǽ|A¦S×ßœþÊ9ÜoùÊAd1ªrSyJÀÞ“Öy6¤ÆƒßúוùCžÛõë1û×mn]S¼ç1ñ�ìÁ:O‡ÖÛ±kóÜë%«{5µZçUë +¸‘eož¢�µt_ýê®Á´.Wî]3B5®{]׿BÇ‚š’ûÝÈ-Ô™¥êwî˜qæ�ÙVlެŸ<®Ÿ5û7¾…Èɬót¾¿Þó$ úÆGCRù�GòRT×we'Ùž[�íá(«¯m¥ åj‡´u®e˜àVËÆµñ8¿.7¬'êuÉé.>Vçé�|;ƵÂ~öêšÐSzv¸Æ¶Å…µ­�K-»òzu]αsì<‘I´a¼ú=~WâÆl,ç´×uWL#?fë�,ïÁ:φétð›_ì΂ú]¿†ugTFÝñu‹GüÜ&1»Ä”WßÍ¿áç­kÉ[ßY‘®JÑW?DÅ·V£1ž‘0½z‹‡ +V‡ñWÞO¿ìÞXMS×ç=ü«ótøÝÉí +ø]�ó�ï`µ;]òVxl:~3æ@lûÑOšs »mŒùö�K9ÖVùöPò¡˜'Ú!ü?Yèô˜Ý ­6©xâ¿~÷ýoÿ,OIÚÓµk-ýŠŸi£;ÌÔ†tÙ¹¬'æy©½š�¯äi]cõr}´h¤—¹´YŽÍÚ®9cÅgi?W©çgotƘõ­_‹­¥íÐQà¶„—ŠŽ {Ö|Ø×O¯Y�Nm½Œ¸#©ö ×b=³ªêK™áÛ°%d}™ËðQmåÅ4�’º,= +KWªžž¦lém:KìâqOëBZì §æüxÝN°ô¨iz�Éu;¥ïÕ;¡ôï–)mÙ¡z_ÜeDÉÌ ‚môZ› œ Yh{F~os�äŽ,gâ,³|·Ò‡Å&_¹iþ\ûJö¸ØË–þÓyÂb{^þ¹¡µÌ+›M¦cŠêαÅ?žÙ¤Y¹Å‡5ï(�»¦‡1¯§�H3£+ bmôÚ€6ÝÛ4“K/²JY5wTÙõ ŒŽh6Ö¹:ðºüŠôÚã¤äíÏtÕø‡å¡ËÑcļ¶åaùA±g8·u|·Èβ}ýÄçúÜä3ýŒërw"𤷭ÙtFér¤”Kì_žÕp™ã™ÒõÌV„¼à¼bH/Ø|aCîgW×a¢¿v΂ѼÜû׿9ƒKàL܇¿Ü'˜xŵJûž¹0tW5—çåþ•Ò‡+·ýr +åÁúº¼\E…4iCo_;7Qøó™柰ÒÕMº ¬>oÔ,ï¬û¥•Z^c§èÍ6ôVƒùwì`)ÿKqðÏXN°TÔ¤¼rJq2õ ‹ßNôÊ1'ˆ�ë«ÐŽ˜„ËGÕÚrº-jUvA §<–´¾>œ­|Ö×�Æ×ÞP}_«Ñ£à�ª…lyú|bAˆšA_‹©÷jÒ‹˜^Û–&»…fŠÕf{ƒŽ—í öŠ»bmúk¡b§ëbãª=š^óц.ta3��fî¯eMdî¼%¼œpZ;JßD)½,ª6UGר&³Ì¨Ü¤¾–lqÍO‚èr„ߩڴƒ3›žy�^¹1 S’kår-'ˆ.'±ÜÒšožŠ­TêUsùnJ‡ºMmàÙ…E‡‘ÞCÉæˆ²õãZLIó5–ÜŽs%¼œ¼k3±‹ßN> +¥}ç +å+ô¸Ð²v›8©Ž—.¥',ÍŸ05«Œ^X@ÿÏTá›”˜§|ЮAŠ^:Ò�úIhn6ñz�¸<4ÖqÒh{Y6\:ƆY>^:)¡<‘n+ÝFl%eCÆä1Wóˆ¤y¬Åº¡®‰‰Âêø4®äBU�ÀéºØ7(¿­ÄÝNߦ*À^O4ƒ»oívqhÜùÆÅ±y\Ódš½­]†ù*¼”…Í�b‚~ª'éb£Új×OÆ„Ý0�Bw}+â:[;•GŠ.û$“VÜËé/§²ÌëMƇ`5½�GYúü”ù~ÿzrç?Ö7pÌë¸Q�-LãÖ•˜¯dôúÌtPL¯Ó¬Â6m˜Ð8Fû]¬S/ë+Ú:n ãk׫«N쵤n ª›– }C&6 ºF[62þ†ð2Œb dÞ뛾`χ¶v§±ôî–jxwp˜ºÎö%ùÌšÄíK:´Î°Š8à�â��0wËVf ùIÚГýŽ»ÂÒ¹Ø #èÐv�ëË,oºÊJ/X„À–ð†�æ'Í+{£ž^ïöûbr¨3€¤�Ú›ô�K[ÇHÚO–ÚrÖ‡mͱg:¨“·�Pk˲¹g[�Ó§F-Üê€c”IS¯¶ðü¤®ÊV'­ E£ ÈT•µcµ),Õê°”'q”b‹)ºô/|¤=÷JDϽ®ÊR»uÅkÑ’m�çp޽wª—l±dd�×nR×KÚ*»>·[Ÿ»®¶gÖ × =2U½š¿*ùÿ=2wæ:CÖA*UJ&D§þÎ*,ÔNGkly ¹J!€C½I2ºÄR#w×¹�+¹ÎˆÔ\ ?Ü19kUÔôByÙ„7(ò¾‚5U_6/WËJìÒ} ¤‚:Í©«LPy£p¹ÎSBí0ÒV‘^ n)èMôÞÓ¨´|a€2ya•>)?ÿï£ +endstream +endobj +532 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 531 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +533 0 obj +<< +/Filter /FlateDecode +/Length 4820 +>> +stream +xœÝ][‹ìÈ‘~¯_Qφ‘óyƒe` ¶Á‹ g1‹Ù‡Óu¦m–ÃØþûûEJy‘ºTuŸ³5žž>]ŠÈK(óË/#B*I_~¾Óø'’bLÁÓõöÓåç‹‚Sø/—˜dõŸðÜU+ +ƒÓÉGwý‰6 !9üõ킇}ñ·ËŸuùû¼Ž¾š!%o´»þãGV‘B A9A• RÚ +*熌ó‚Ê맘’¤‚.�¡µ*À JÑI*˜AÆDAa†¥ íZ•`† š$ÌÐÉA¥ìÐF)QC‘5‚N»Ácн¤3zð1™$êt:Igíài§%]¼÷.J:‚-.)-élqšHI:ØB6Iça‹õV‰:Øbb°’.ÀƒÑI‚. +Š:Ø¢¼Ò’.ÙÁ¥H$êt*†¸Öå­U’NëÁ›VÔaEa’|t¶xå’¨ƒ-Î*#é,l!üH:ð„³!Faµ^ÝVY-él1&�¨ƒ-˜|‰Œ‡-*x‰°‚æ%‰L%C ˜hŠ%01 ‚•hÀ$7�OAâ«4tFKD`lqä%&°¶V®¨ƒ-6‘ÄÖÀ�¸ÀZØbÈJ\`Á¶´H\`A·¤’–¸À‚oIi/q�áÂL%q�ãÚèIâ Ê”’ÄœkÁ�X�.–{�¸À‚u­óFâ Úµ½Ä¼kI+‰ ¼k-jŠ:ØK\v¬ŽVâïZ­‚ÄÞÅ22`VàÐK\¬ &F%q�wMT$q�wMÀ ê€5h%. ð®q8içï§ŒÄÞ5d¼ÄÊþQ¢7Þ…8Ù€- X‰ °ßCg¬Ähl0pK$.pà]�°ý kl5蘼ļ«#¦OÔ¥AŒ¸°n1ʃö>I\àÀ»Ø¨¬Ä¼ úŒ€ãì¨FâÞÕ;µ¤ïj“”ļ ¿ÁI\8 €ÄØß­]Q—•b”¸À�wAKFâ샊`QIK\2üP‰ R‡�©©A‹SÒ��ÄVŒí6]ë=7³ÍÎL>3šõ‹PAc®¬m½»Î‡ÛÊy ìÄðÞæýŠF>´Îò×õ‡#V¡_ìÚœ6C'{¶Ò½ôo>]ÀÜcÖØ_;l‚¾ x ôÓO—_ÿ÷ï~øÍïÿ³õéõò—ÿPX„J¹ˆ_E/ø‹øÜ9|¾áï—I¦cÖaeáÅÙ>&ÖEöYql§ònú«F�›Ê87• cÝü9�eéu´#—ó“Î4»–õ³ŒF{XfJŸ'ùml§È³ÎŒz=Õ±ÓùPüþ®Ÿþ°1~©?2n6›êG3¸©lÞK;í<¯mh¸lî>Nò0É]W†Ú©¹d6ÿáß�šº<7—ñ{áá®ÍÇÃLvPé õ—±�ß~ÊKÅVòÁml^*œg�“‰^¯ð.ØXx€Ýòº·ÎC„5­&œ"œï`“aÏ Û!b^E«%F¥×qhê¡¶®Ú GŸ@Få÷Ç?ÿðçÿj+Ž/�ûþ;Í«ï6þÍSÃSd§c�¿ã$lv7A%Ž¡r&@öØObÙ÷û-›à!à -º×£ÚØV8åä½hÏQmUÉaΤÚô™�=�ÉtFy¤ÚÌ×rÈy»1BôãÔV¥Eã"ëúëgÌ/ì™êf>[ÈÏ‘‡UÙżä9¹ˆ¡óA>Ï£Ú@ u¯ÛÜâŒâK&à/îqf"g7u&ã‰ü +[×öžBÒ.¬ˆÐp’>q:lÑi^Ù¤ÇWm&3|¡)€ÆÒé�¬ó—âkpŸá‹Ûܧ0×VOsl¦9ó¹W¯ýv4ÊŒëæÝ_·º.”V<‚õ*d×-mÑëTæót\êÜÚª^–­u̼®úüý(å o¥�aÚÖ]ñN:”®¼%¡„XÊÅ î!Ôj_Ðæ,û;”8NÜEèÉ:φP ®ÝAhåq³øÛ!M£Qí¦¿üÆcQÇŸí¤û¼(óeú;ÉÍäëòûeú›Öe¿ÝÞÕ;œ‹>âÝPúÞ@é†ueçê< ÊšÙÎí¡lÉ'¼Ž®ù‚“^ºÙ*£ü¥Í&£Év(+³ç³B~>k¹Ì� $ÜF_±ôUù¯ïÏl·�uȬhÓB;å¸k¯|®ãðz¾¯<¦Ý~±Ük6‘êýýH=Wçé�wùPBˆ.;¸]èÔš3v¹æ6GÏŒ»³íÈX!Æuuosû²eeéqÕ‰+i:¿Ìë¾;¶‹Ïfª“6VžnçQÏûÖEyKþ4­Þ&2SåC¾�Oü2ÏÕy6d’ÚåÐ:ŠË»GÖJüzÔgÜ÷ù ùî#�¥[ùºÔ¼¯†f…Ô|?rfPŽ<#f…'ë< +Ïù‹uf¨CÂg½t™™iì uÉ}"²–3ÙséýÕˆAð2Ö#“yûK¿¸ïÏÆm[g<)dÁèÀ‡¤Þä›b¾P½�¼sužy>är&Ã|¤Wèëfvµ“m|–¼ÿÚ�-¬xGÚÙßc÷ë¾?GfÑÿćf‘:ÿú«v½��¨Í�T4| x½çê<züÊ“–:â]Ô²Çw=Z¾UŒœmÚòF^&ŸYði«§Ñíê³<Ã=‘Ü–½¥ÎaT·�Øæ;žGì¹:φX·ïo>�øÞ˜÷žèíx7÷¬ŠYyÚçZ§ï�áOÖy:äîû¨ÿn�ãìo‰î‚ÖÃÕ·�fº?î?Yçéмï÷®üÑBÚ�+bvVFŸ*3Ì«Å-üÕ%b¾9ÙËÚ¶Æ‘÷µ[Wë·v>)MQé|{ò>ÏÕy:4îû±+duw\T”½¼/ž®×¯wfw7R+>ò‚'WWfùG%fÈVè/^Æk‡´™µ\î]ûÒ2ðWOÖy6dúõƒwíAÕ]¹Ç�ð ŸÍû‘Që»Ü(¥#ßãv€Ú“užµùÔ÷ú†wû[p­Šº%ÿm¡ué±.]œgÍb=è}Hý×Õ¹Êo ô�k÷'ë<Bò®'¯UÏ`±C.‘”³CfD_M\ñK™±‚hRó{EqþŵŸª—wmÌ®�°ù^4.ïéýÝ:–KÛ¾tõ¸Zê›ÏIÉ ð;‰¿â³�Úsužµ~ª’ÑÒï„ß™÷Ð=BkþÛ» ¦rìòš½__©ØÊÅŠž@íiZ¹¹ÜònÁŪ:ºBêÓ|y®Î³!/\§_Ä·«µ.Ìììêàrw]Þ‘Ò]54}<¼•-_"öžì:í é›Q“:ÿ2ÄA[Ê÷öï"ød�§CðAþô>åtÝ“·œ]ßêsanSEÇ—ù÷WOëý§Ì·ÌÓ·Åy l¹JŽî ]îòlDt²Îӡyt­�¤(eé;IYô{ü±ÎWüåñÜ{VòJ›¯GhˆŒ¨£»QNÖy:”ø—g£Žþ*å"ÚX";#Œ£¢ ê½˜3?/ÌQвÖÝL/¸¬Ï‚Ý­Òý÷�¬ól³Oúpq1ªk5G87Ão; g²9b0¬{�%�õÝwp&½eïü6µûÒÕ£V¿ï«~Ë¢/ûy샆ڮŸl)œÀu∼ñ|ÄyˆøŠýÕæ“ø:Yçéðuàa=:ÇÝ\Ý5Ç~ijʇÍñ™óXر<.ߪíLßR϶Ý&LçˆWf¬øÀÝ‘'ë<¢®ÇÇf–ó¿döyŸý¨ò÷G‚'ë<ªîZüæ�»g÷ÃøfZQþp| ëu²Î³!%\}íòŠ_Í7Þ¸C{y_Ô™¼¬ôÍÉ«ë¯%Õˆ«Ë)”»nÊsYÉ ßuå¤äk¸·5éûïÆ>YçéÐzà}Ãþ«!áÞ{ Îdæî¸»'ç'–å>«õýËkf³LÚR»ÌÖÙï[�¬ótH=Ȇ=œgT�ßMò�™·_^Öl‘Üx²ÎÓ!òÜ7YÞu7ò=W¾å +¾ýýoƒà²{'ë<‚yV¿:„7àr× Xü%ªM›N9�Ïñ +ß?M�, 3í´Í�šöª{jÅìa‘ˆ–‡­Ÿ•yÕ‹G}Οw„&ù]E6^ �˜?ÞW|&—Ÿ"Öò¬Çéî'~Èayž‚)ODÊ1‰¯LåXB�:ü±Á'?É�åóÓ(Ï'ôão}¾—WíÙ”.Sü$2®Ïd÷\ËÚ~y®egÏì¹”iЍó9¬¦íç‹Ï�¥ÖùÕÊÇA~wÑÕÓÀ�{HW~vT–t™&�V_7jæ7>ý\Kñ¿)~/?¦Ú8?Úiüh\9®ïJ5~²©RÈæG � BÔôz-æ³WƒžÄüÒ£8ØéÈWSø!†Uؤ¾lk°U<k«:¡[ U×]*öh~H~:ß„Õô~èt7ý¥¬ Ýtî otk—Ò7QʯZ)M•Ñ5ªÊlgTªRWJÖ ¡:O‚èv„ß©Ò4a2«¾›5~`ý(ŒHTË¥RNÝ.b¹©5Wg*ÔR±UMeä›) ê6Ö�dyŒ&ià·¸ukDÙòq.ö<e®UìpcVÂÛÅQ]‰MüvqA(íWÀ÷Hk¡íÚ­â¨^š”óÇã',Í"ãÇ}ó¿#U¸*eæÉ4UHñ#ûÛQë„×fÏ©—ûÊ:$�€¦ÐÊvÃ¥C¨˜íÇKG%”gÒ­¥ëˆÍ¤Ý�uò�ŠyLR•<æb]QWÅLae|*WöBUŒ@wMì*”ßfâf§«KÕ©Ú™×Ü]m·‰}åη^êŒk~ÿBµ·¶Ûa¾oyc£¥˜¡K'MlTÝíZg�°RhâF£oY\Vke'~§\ùØ™´ãÞ.»äm¡…á'{«ùuB½—¥¯ÿB™?à÷/týcy~ý¸�UÙÂTn�‰û�Œ_>OŠù9ìEX—M'4ÔÑ~ëØÊº‚†º�Óñ5µêª{)©+ƒêªí…®�a'6ºFÛndÜŽð¶ÅêȼwnÚ†=ÚrrüÄe~óA± +ýéà06�m[òµkG\´méÐ’é*â o‡]‡©Y63“ÙwR‡ží§~*,÷ÕtnÚ¦£¶ÍöMY>‹®\`Ûô “î;M3{£^^ïž÷Éd_VK+µWé[/­'ÆÒJx²ÔæC??¬{ŽÍ+.‹·�PmËvkÏV'§-�æZÐì Çh'�­ÚTÀõ�R‘Í:-E¥ ÈT‘ÕC±ÉOÕʰä3Žâ(…êS4éßú‘vý¬ÔAtý¬øUYn·ìxÕ[²Õr=œC;;ÕJV_2 +2ß×®Rj%m‘­û¦yße·½v§AÍß> +endobj +535 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 728.673057 101.433071 709.923057 ] +/BS << +/W 0 +>> +/Dest (cb39-1) +>> +endobj +536 0 obj +<< +/Filter /FlateDecode +/Length 4862 +>> +stream +xœí]ÛŽ$9}¯¯¨g¤M|¿Hi‘ ÄÒ „Ó5Û»B½H ü>'œi;Ò™•ÝÓ³[ ¦ÕÓ•¾„ÃÇÇag¦K_~¾Òø/9=¥”cp×Û÷—.jŠ^á_I±º(ê?â7ú«V.N^ç�üõ{Ø8ÅìM ×— þ.yò—ËŸvùÇ:�¾š)ç`´¿þóR9;Å£ò‚*C¥´TÞO1UК˜³¤‚>:㶪3\N^RÁ gLT fXµÝª2Ì0Q;I3töQPi;´QJÔÁåœ5‚Nû)ÀéAÒ=…”Mu:�¤³v +Ñi¯%]žB>I:[|VZÒyØâµsJÒÁgS”t¶Ø`•¨ƒ-&E+é"l1ðNt ¶]IÔÁ”–tÙN>'çD]†N¥˜¶:£ü䓵JÒi=y`ÓŠ:Œ(tRˆ‚ÎÀ– |u°Å[e$�…-?’<ámLI­†F·UVK:[Œ‰NÔÁt¾Ä&ÀƒDAñ’Ä&ÆÉeã$0ÉN.¹$±€Iyr1Z‰Lö“ 9J<`•†Îh‰¬‚-Þ‰ ¬†-#WÔÁ›�ÄÖÀ$�¸ÀZØbœ•¸À‚mÐ"q�Ý:•µÄ|ë”X.ÌTX0®MÁI\`A¹€R–¸À‚s-¸Sâ ÒÅp�X°®õÁH\`A»Ö¥ q�ïZ§•ļk-rŠ:ØK\vœ¬NVâÞµZE‰ xÃÈH\€^�€Ã q°2™””ļk’r8𮉘D]œ0­Ä¼k<š ÍÜà]ã•‘¸À�w�3Aâeÿ(1ï‚B¼À¬Ä˜ï¡3Vâ6„%xð®Î˜þ„1 ¶štÊAâÞÕ Ý'êò¤#<.Œ[xyÒ!d‰ ">“•‰VœIÜ1P ^�¹UÜ2Pà^ÌVQÜ3P _Z#‰›0+ËÄ]L«Pj%n(ð/â1·á„y÷‰oQÀ!bÎL‘™1,¢û¶æèÉìN²yìŸß^~þ“ïõÛ]žVvÊê�F€PR;ÄW&£»=¢o�æÛ@�1 –½*1Us7Kƒ—m62 ý»n?¬l…©d,rc%hõ�!…Àk®ÜSJwXcE`h–ì¶¾:Ï]“#b‚|m´lk÷¯·;I²õÕyÞÝVL`X¤z„˜ëzE#ï%~ßÎgõbfßÖ‹õ¼ƒ1°cìÉLïl´m#%S'P‡Ò¡•S¨>áSÙ¿f&¿2Ë;¬°€GD�ÆfC3(hkåV‰õá2]¬˜÷éÛ%31�ÆähüõÃ÷—ŸÿáÏ_ýáO@à‡çË_¡”ûæ—_iüõiþëüòw¹ƒ�!—4vÑÝ–ë°Në—¼>oeTNÍßÒ™åï~oK]µÌçu]­<$ò‘ÙöÍ §rô`oÕ©ù/–R%o±é¨ µî°ï“¦ C›D{ù·ë‡ß]~ýa °²2šI† +ˆÆhŽ;Ää¹,ŸƒÉ/Åœ¡8ÀªýMrÕ?�0øéº˜ÕWËþ8§iíÓ³l¾$ç¶=¯ÓP»é&OË×öÝ�aÝ| …rêu+O†-ÝQª ÄôžU2HâödžG.VõGÈ[{ìLOü$�ëtê÷!×{m‘½²q˜,ZarÙ¤¹C¸Ú2ú$¤¸Lë‘cäžËópÈuÇœëÖ«G�Ž_¡è& !t®2·5ErkDP $©g|NKˆðÖüOlD„5ÒxÞŠ`qýá„yi(Û=1DŽ~Þ„G;HíÁçéØàdž‡Cê�@õ£8V/ZƉ¯ð:G©}šó[¿å´VßP¥7'ìZqâ0GŒyܶ´|^Øiµi…àw¾wû†hödž‡Cì�xvoVçË—‡Šó>?’yØ¥âݨEF³yCŒ{2Ï£¡ÙǸŸ»š*½QãM�G[�›¡\·q®÷0Í «ðk‡ß*·kZyåùïŠãM<Òùò#y}öõ\z2ÏáïNœú¿Ès¯Ù¦:@çf¥tcu:Ù_nïaÉ<&=¹â:™çá�üy®ÿ•H~�½ÆémÐs9›8|ôÏ?úìiF­c£aE}Å·ƒ^ŸÒãИHÂ]ôžËópè=Ži7½5¬ZzøÌ8¬têÞgCÅÈQO�gVVÑfvÊ|-âïÙnÞ¡�ËpŸØHeèGÀݺd”ZwžEéÉ<�†R{«î"®îðTO?1„Œ{©’*Z 2ÝWþ”wþ›ïX£*7í’s÷�z.ÏÃ!õ8®ýÿ�ƒ�h€•×lõk‰í‰ë2÷î)6¹ávï õ {°'ó<Z�c×ÖsÏk””58»»¹ÚW­3àÎ.{ë™!Qkž¢Y Ú�{SÛ¡×=¯óoб ¦ìýîì-Ô‘EeÙðºgÞ0ÚŠÍ‘µ“GBÃý³fØAðödOæy8ǯ#�;J«Ý¤À�T=?ðÈ›z)2þ;\c ÈøŠ£pƒ(͸�ÙJAËf…´W×2Ì;p«e~m<ÎïË ó‰z–‘ìÔë¹ødžGC²;Žq­°žÝÜzÈžî±íqa-kàRËî¼nîË9V‡êbTцñî÷ÀçG£±Ôi·yWL#cú »¼'ó<¦ïìòó1Íéů‘a�Ç•Qïôu‹Gü\&1»Ä”cýGý¼w/y3vF[¸Ýy;ø!*>š�ÆxFÂtKói¬þgÞN¿ìYM/˜jøù~Ïåy8üÞÙÛð»òóÈÓ,vmOºä¬ðØtÀÔ™Øöm;Mjw/Å1ì¶10î¯,å”ýWq¬ÍòíÕê B±žh—ì- €Ž_Ð&•žøËo¾þÕoÏö)i‡†Ötí^ ~Ÿº'Lóð0ZÚÉ»sZOìóT[6_oäiô0�³zºî1òö2*—2˵YÛ5ïZñ‘Úë*ùüÜ#�5f}kWœ=|Ê¥–»tÆs/Éþá˜Yj +Ý«VË–*ÚÑ<ÒZª˜ÒœOÝ«ÃbnXÙã²¥B;­¯¶P‹�(GÚ–,½>GG4lË)½Z=JÛì 7„wìP½-äÃuÏãZ°�ŽêÊ™�…²gÔö2×(ì¾&?çÐpE›|å–ùsm+ÙãbO[ÚŸ–þ¾-+šÛr-´£ ±¦yf#Á,uÅ9ï¼£µô�g6i–néúo¸ãw;ú¦aH3›+b-s[©viÓŽ¯ôrª¤Us;•]û`ì‡fS`m«~×Ýï«Ñ¬×}Qý"•?3Í¡Ÿüè§™•zYÅþ]&Rm7of µ½ž3PõKÚç¼µ�E–çÏ3ŸŒL»fY·<=Úù‡sç�.×ú´�â—òѼ÷5ømYûPJãÔòKĺum›q¬ý·5Ç�QY´~ +¶¼hEG‰œŠÊNæyÓënïŽùþjSž’÷ÚòÍJrý¸ÓË�EË&þ¹v+ÌaR™Ž‰*¬´Ì7¬‰zêmäÝ fZp…ýó½Ü.•SUBí¹—Û‡){ô™”›?dÛ‚P{×C¦Wæ|°;ú±D¸ÛzgËÉôõõñþ¶Èz:êÛ jy4ržŠ×£°„ógÊþ(/íDT¥¨�PÕ—©™…� U›�B@”›rö¨l¨ðQ9VtxkÎ=¸v2Ï£!*k}„¨Í£ØÃæka·üÉN_ Û¹‰%>¤{[Ûwú¥Š:’ê¶$ñz`×vøl– ß½²tO¿y\éyÁ;(챟ófRÞBÌ1 +Ïåy4ju.`ürïLoÉO„ÖΓgê?òÛÂ6íÛº"JaÛJ8Õà�ËéaÑ£—¼¶åÔÇ Øad ow“Ü�W]ÄmWºêá@«õ:EÒרt5@QŽtÒž¸w–×ö—M]b«vo™GL] Ö aŠ•êÑßt7–UᲉ^nLäYnÚͶ»u¦Úæsy¹›òßÔjó»•_7¿™=«ÍLMJ6ÝöÃ%”"u9%X…4iC_#p n¢gb¾Ò©”IY§k7éâX}ÝÉY¾|ᇖjù>EG4Óñœ¥ùÅ’þ‡ÒÁß_tvù¿Ü,g§«"N¦^tñË…ÎÎw‚ع~{ñŽ˜„ËGÕÊrºÝ­¬²3NyL‰Õ«Z>ö[š´¤�?_[Cù}ÍFg:UÙrªß\± DΠ·bj½šô"¦ïH“]®B3…6[›°èxÚ^`ÏxW¬­bB¿*V]WíÑt^ms]èÂf:w�fÝ_ӚȺóHx» Z;J_D)�z^‹ªÞ5ªÉ,3*7©¯)[‡¸ÖO‚èv„_©Z´Cg6=ë5:;v¦ +$×ÒåšNÝ.bº¥4ßz*¶T©gÍÕóÝ”u›šãÙ�Ýö�ô…*lŒ([?®ÅtºõµJ 7f#¼]¼k#±‹_.> +©}ç +å+ô¸Ð²r›8©Ž—.�©º +C³ÊèäMú¦ +ߤÄ<åƒv Rtzn¿ê•ÐØlⵓ¸<4Öq’´‹=-s—ޱa–ûK'%¤'Òm©›ÇVRæ2&�¹šG$ÕÈc-Ö uMLVýÓ¸’ U5Õu±oP~Y‰»�¾ U¯ZeA3¸ûVn‡Æ�/\[�k: +¹ÙÛÊe˜¯Â[™ØÜ(&è§ZIÕf»^vÃ@ +]Üiô¥ˆëhmìTÎ Y>öA&͸·Ëw—2Íë ÝI VÓÉþ<ÊÒ×#Íïðû÷‹»þ¡%;ÏãF5¶0�[Wb>“Ñ÷À¤“bú^˜*lÆ �c´ßÅ:õ´¾¢¡ÍãÆ0¾v=»êÄ^SêÆ ºi¹Ðw2±iÐ5Ú2Ïøámðb d>·oú„=_ÚÚ8º3L‡W«pÁ›ƒËÔu¶OÉWV$®(iŸÒ¡u†eÄ/—¬ÂÜ-[™I€ä•4דýŽw…¥ºØ #èÒv�ëÓ,/ºÊJ+X„À–_ð‚�æ•æ•=‚Ño^ŸÝï‹É¡Ž’6joÒ.m #i#QiùinºÕ�VÛ'åç?þ†.þ +endstream +endobj +537 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 536 0 R +/Resources 4 0 R +/Annots [ 538 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +538 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 292.623057 101.433071 273.873057 ] +/BS << +/W 0 +>> +/Dest (cb42-1) +>> +endobj +539 0 obj +<< +/Filter /FlateDecode +/Length 4739 +>> +stream +xœí][‹äÆ~ï_ÑÏ—ë~�`°! 8øÁ°!„�‡Ù¶Ç&Ìì<äïç+µê¢Ò‘TRÏŽ5�z»uN]Žª¾úêÔQIWŽ¿/þóZ0úzûtùõ™3ÿ†“ƒAý>Î\׎¬7×OQ sÁHg¯/ü×ÖÉ_.ûâòïiq•,+…¹þöSTiÅœwŽB âB*c˜sÒXBeÃ)†@©`†qZê¹ÊÁ ¼¡T0CKé •‡J;¡æª3¤šRÁ Œ#T‚Ã!9'u0„k­$¡†Y4º¥tR0ëƒ ¤ÎA'œ¤tJ1ë´0‚Òf­5žÒiØb”ÎÀ#´æ”¶h女°EYÅIl‘Þ)Jç`‹DëBça ÐåIlá– J3ÁkMêtÜ;?×In˜ñJqJ'3À¦"uQè$ë�„-–›@ê`‹Q\R:[4þ(xÂ(ç=1ZeÝŠ+Aé l‘ÒiR[ÐùH [¸³`±ÈKHç˜RS$ ½bÚkO±€ô�içE2¦mp(. “‚"Åa‹Ñ–b%`‹ÆÈ%u°EMq�’° (.P +¶H­(.P`[ ´P\ @·šAq�ßj.,Å +„ 39Å +Œ«¼Õ(P. (.Pà\@�t1ÜÅ +¬«Œ•(ЮÒÞR\ À»J Nq�ï*…œ¤¶À€™^Q\ Á»JpGq�ïbIŠ Ð« 8´+LzÏ).Ðà]鹦¸@ƒw¥Ã@êÃThð®48jæïJÃ%ż+µ´( üÃIo¼ +1´;[@°`¾‡N*Š P“pK(.0à]0ýclÅ„–âÞÝGê-NŒ[´2ÖŠ x•¢¸À€wAŸžâp<ÃŒ*).0à]¡0SS:ð®��S\`À»ð Å€p(.ÀüÆtI]`Š ·,ºÉ€Æ¡ãœâ‚ <Ö›RS\€q×›žâ‚ 8Ö›Xâã6(×›Žâ‚ a‹�‹Bê` œ¦@Œ[pÖ›`'Jga‹ šâ‚`m\ozŠ àf`½ �ž ø¸Þtd¸¼k˜‰Ò�wá™ZŠ p€õ&<[jmÏA¼ÆÁ?£•>®8=1à ^ƒ¹• pp/f+GÆ 8È7®‘È ÌÄÊÒ[2j€iJÁɰÿÂÓ3N¸GŸê•æLïâI ï>¯9J2µ�ìûíçËWO˜|¯?ÿçòüÅ)KÂ�ZÿÂ0�Ýmà} œ¾²èhÁ¡,„�GòD#\(F +Ðât‹Fbú‹ÿ®óËaøCõ*W0‹ß«�X%ö•Çòuˆ VïÌòŠs,Ž0ÛZ¤QAFväàWr=Iüí‡ €:Zq��æÃÊ|Ì—X ki®>]¾úþoß|óᯀчçË?þÀ�¬¯¿ñÛM¿��ýxl§ßX›râ~¼ö›Çc~ÿ´õ™PÕ1Öi’-·i�)UÎ.»ŸqŒBŒlÊóhÙԯƼbz.³ºÐöÆ/ÔŸêøXÕÓžCÓ‚ýÏë‡ï.ü0äà¥Þ‰‰(p¬ÒÔ†û²<‚áÏ],y{ û<ýNÝjžšnu>±ûS~Ãé.‹PÑ?�²TFÓå5L–`›áM@~°I5éÒy2æ6Öe›s¾5uˆµÉ°Kú5;o½doʪúž§i‡a%i¸Æ¨þ^¼væ9`±²ZEìB/ÄË![H˽!ˆräÆòZâK=ÖSW!K™È=#>ÕÏçÈûü$¹oTLÒëu¢…?R¦þˆ¢O¸ŽÜ¾<§C®^çÚͱÿ¾Ðýjœý–èNhÝ} h.Žl lk-4·[hîËs:4¯;½3gtàf猘•‘¡ŸæÞG-¦qV[ļ9&Ùǹm…#÷•›Gë·V.i¼|ÏŶ[Gc_žÓ¡qÝ��!+µp…¬Ø39êã½'”™�ûŒÚv¶Fzé·{wu™–|ä†'3_ÞÄ”»jù ýÉËx®�Fä›ÌAOcº‡æ%™ò€¿Ú™çlÈ”þê+ÏÚ¯‚ª4ûÝø|÷<çÏÇ}óy? ¨-~§Ž—:¤Òl¡¶/ÏéP»î«>ìîö·ªÙzͼM‘A†³ìô;# ­­Ç’¸´9ÏÂ:è}PõçÑÉÛóY@hHí\Muæ9B7‚®³›¬}Îf†l‘4D‡äepÐçü’z,!Z�éÛò2„æzTg¸bÇ›÷¢1ó}{^«¶lmû±Ê×"wâ­, ¶øœ:¿SÇK_ë¨íËs:Ônø©œFK=*±ž†?ß}W?c¯H»Þ˺íµþK~aæ¤TÖÇŠcŸ¦6 ;¿L±‹%=�[AQ¹CºfuÙŽªR�<Å÷óegž³!O­û¡íúv6Ö‰žÐÑêSüÔð£à“õùf´¼Eìžèº^AÒ»�¨- ¸ò/�gBig·"N�yN‡à�øé>eºöÄ-'׷ꘀ›Ú”ÑñãÃç�K§C9fäÛÈÓ·æ<7PÖŽ’2, ¯Š]ö®ˆ:óœ}}þæÖ…vM­RZ߉ТïñÇ*_ñýñÜ##y¥ÅW„#Ä|DÔÖŽ”Î<§Cé†ٻꨯR6«�ÙÂâªÈ�ŸfæÎHi|´IO7\VGÁ·¶jh¾¿Qgž³õ®îôá|Óª cuXMàÜd\1Ø2³ÄHv\1Ȩûx?¦t1OZa$½ŠÞùm,÷c•O—üu]Ã:9ÎXuÚ§{qÁ�˵£-‰bGÞ°ây�ó ñU_mîÅW_žÓákÃÃ:ÚÇU_íêc{ÇEd•Wëãžóhìh�‡óQU9ø­ähÛmÄô°â]`¬;$;óœQW‰ý±ž�ñ�÷Ì>�Ù¿€*¿%Ø™çt¨Úصø;óÎîÞ}5¾GÔ†?lD½:óœ )fãêkWül¾ñÂöìv_TO\vMkWœ•WW_KÊ+®*¦�vݱ`[G\xו“¯=°·Õ¨ý{±;óœ­þ×®á?öî-è‰ÌíØÝ3Ä'ÚtO|¾?¢½f6‰¤- µŠlɸÑ6¢j©}yN‡Ô�hØá8#?¾›ä#oï/j¶€È;;óœ‘}w²<´yÏ…·íµ¶w÷¥lD÷:óœ ÁvÃW}¥ýôZví¿zå{¨mêòÏ‚ðôVWZ{ïèÌs:ônø®ïø.¿W5oºkq�âŽ�yN‡Æ ÿta7ôì®S¸&¯$üž{SÛ]Üq%3pY³_êýpìrÜ�Ý™çtÈí»‚{øžÓ·Fh³ŸŒÚöüúˆ¿½?hÛ©M³Á¹î@¬µ3ÏÙ�ëúü×½�“˜ èF ¡Š{Æèúdÿ<ÅAÍžÑ!"c´Ï|v×îüõ®œ6’Tåm÷óŸá‘îÀuîÎ<§CꆯúDøŽ©UʼnîÕ|èûÖîËjó¬ÅPsÚz^X8·xNŸw…¸€ØþlgžÓ!ö±Ý‡çóó÷dN»Z<øìwÀÇíÌs:4¯û¸�®¦VŸ«R÷øÂUÛÉ,¬K/ÝÕ2ù$y¼fÿtß{¿wïˆül#yá�Wâ¬�yΆ>ÿ¶wdŸ‚çöDªVйú„޵]ìŸ%ö°€äOêÌs:$?s}—H~�XAÅé“§fÜ?¼m‡:Ûfヾ;Ð[ù§½Wl;óœ½ûž ôнª -GÕ»BjKh“ eîEü–í;wÜ�6�#@ÿX�Ô +ÝÇöy- ôÀ¾‚Î<§C鯾‚=wGoÜ+K=IbØÛÙÞ9ýÖOÀxÇWBå£r͆Çl=[ 3ÏÙ�:ïúÿ•z‡aÛ5Ó6"Ïç¡çv- õ@ ¶3Ïéкñ„!5í�ŒÌz¯¦àÓ¸jš7ž:Üz-jã¾úÉ®A?M7ì]m#Bɯ{žæŸ¡cDÍû]ˆ-¤‘ÅÓ=;Fœ<0Ú›]užµ'Ô\?Ëö/Ü…Äd;óœÁëþëž'iÄ;>2’RË7YÉÍm�NËl…´T×8ä+p«ªŸšÎ±¾.×Ì'üyÉþ÷å9’×}\E¬ggׄNÙ³Í5¶%.Le5\ªª+¯³ërºªcã‰L¤ íÕïö^‰•Ñ8Ô©æy'L“0ýÃøfgÐýF¨á�P–W/*É@ÞL²�ÛùkMÒËA®ñ¯¦iá°øJaå¯paupñ-<ˆÿÓ7ßþù/ˆÃ�q·;E~Icâh�294ö<;dpÛbÃDp÷/~ß©-ûN©Ã…Ö˜ÖÞ?CYã&ϱ¾xQ6æ�N�»ë'å›±îÊž¡ S�ƒIçðuÛm¿^ìðö(1¼A�[Ï„Œ¯¾ZÍ"»»p�o¬ò«HÝ$††×…œÃ‹™Í©Æw5óøúÆøê®û‹œ«ƒ1ý¯Cºˆ YlÿH!÷÷ªòAìe:(â—K|¯®&ÄëªNqŽ?y.K‹”0Ën`bÇB›RÆÇŸ!®Lú)M:›˜ß¤lñ}Gš§DjxãϽbBˆœVÌÅñì9£8¾›Ø35ÙlбÉfK�ºN[ +,7ÅBñJhæB^UWÄR'{D|—]n:[„ÙôºéDÕý)­tUw® oT«Zé )�oDME¥Ö•<ËTeTÈR“RæѹŸÑíB¿ä©h�ÎÌúª×â{åîBŸ€¤sº�Ò¢Û…L7–frO¹œÊ—¬!µ|1¥@]ùÜð„lh£QêâËÖ«1ÂUú9ÛØ©¯¹¯p#gÂÛÅè<‹øåb‘Ú®à&A¯ªªÜ,ö¼à¥Hãíì÷_šIßÊÿ¿S…ÉÒÈ<á3¤â›õÊQ©$ŽÍ,ž6R-·™u4ÕB»’¶j.á\ÆlÝ^Âs"}$Ýœ:·ØDZ5Y%w!™I*“ÇT,2ê²8RXjŸÌ•µ�'#P]› å—‰¸ØiòPØSeVTp7¹Ü"¶™;_j±Ë=.âk³½¹Ü +óIx&6ÝŠ#ô}ª¤ˆ%ϳ]©¬Ã@ +E\hôe§ÑšÙixŽýø³ 2jƽ]~¹ ÓœTFü°JÄ·þÖ^–¸þi¾Ãç_}ý>½fî>�KžÙBfn�ˆë™,¾#ÞwŠã;ã“0›J(uEûE,|Ikò<.eÅ׺dç…ØSJ‘Tdm-4¥ +±ÌЕBU-cV„·¦³#óhß” û~¨ÒÉ¡_P˜¬ÂA}:8ôE§Ê”|­ŠÄQLZ¦thµ¬2â .‡U…¡X613²®$7}´_×]¡b]ÕAåFÄCUtºL³uÑI6œE•.°ªꂵ¨+ {£¯‡û}4Ù¦¥™Ú³ô¥–æ‹ÒLx´T ‡vz˜çu�ið–Êe©jì©ì䔡Q\ =9¨1ZI}É6&0u¥:É&•¦‰"Ód<Ér‰.ÙdÇl©Y†3öd+¹ìSé/uK›ºWr#šºWì,m,7ÍxÙ[RÙ25œ]9;^Rf_Ò2[çÎR]Rª$›×­§u§ÙöZ�†.†Øâ™ò’ÍÌRâ¿#cçž§‰:P©Òß ¾¼˜µNIu ÑÝñÖ‚Ct|]ºÓ¾ +�ìγ+™GDR¬¤® ÝÁ´RÜ àmÁ„(¶¢*êe|§-�-pò”ö5 +*4Çg‘ ÅÔèBùÐÅ¥¢ ÃËÍ¹Ç ÂqA†††=—ÓðÉð÷? î, +endstream +endobj +540 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 539 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +541 0 obj +<< +/Filter /FlateDecode +/Length 4922 +>> +stream +xœÝ][�äºq~ï_ÑÏŽÌKñ8’ü``#0ò°Ó»c#˜à8ùûùŠ/¢ª%õÌø �ÌN«Š—"ùñc%±õUáç�ÿ"é)Æ<]o?_~¹¨)8…9Åê"«ÿˆßà®ZQ˜œN>ºëÏ,°a +É™à¯oü7\öÉß.úÍå¿×yôÕL)y£ÝõoßYEv +1åU‚Ji+¨œ›B0Î *¯'41%I3\ C[U€”¢“T0ƒŒ‰‚* KAÛ­*Á 4I*˜¡“ ‚J+Ø¡�R¢†("k�v“G§{Igôäc2IÔèt0’ÎÚÉÒNKº4yï]”t[\RZÒ9Øâ4‘’t°…l ’ÎÃë­u°ÅÄ`%]€-½“]„-@Wu°Ey¥%]²“K‘HÔ%èT q«3ÊM.Z«$�Ö“6­¨ÃŒÂ ù è lñÊ%Q[œUFÒYØBø‘tà gCŒÂl5<»­²ZÒ9ØbL Q[0ø[Tð`MÌK˜&J†$0ÑN)J,`bš(+Ñ€In"Ÿ‚ÄVi茖ˆÀ*ØâÈKL`5l!Ì\Q[l"‰ ¬�-H q�µ°Å�•¸À‚m h‘¸À‚nI%-q�ß’Ò^â Â…™Jâ ƵѓÄ” (%‰ ,8ׂ;%.° ]L÷ q�ëZç�Ä´k)z‰ ,x×’Vx×Zäu°–¸ì8Y­ÄÞµZ‰ ¼‹id$.À¨NÀ¡—¸X™LŒJâHâ%@Ô… sÐJ\@à]ãÐiåï§ŒÄÞ5d¼ÄÊþQ¢7Þ…8Ù€- X‰ °ÞCg¬Ä(l2pK$.pà]�°ü sl5阼ļ«#†OÔ¥Iô¸0oÑË“ö>I\àÀ»X¨¬Ä¼ úŒ€ã'¬¨FâÞÕ+µ¤ïj“”ļ ¿ÁI\8L€ÄXß&­]Q—&•b”¸À�wAKFâ¬Â“Š`Q&IK\2žüP‰ ‚â¿xSz¼«N~]Híàä&âsº×}”yÝa´Ѻbìòo-'®Ì“ÓP–6|]äpë(uvNÿ­›u2ýXàTàAuQ/»U[ÃI‚Ó¦MÌ#ñÿòÓïþõßÚH ØBðŽßŲüù6÷‚©½;LÓ +sîÙ9­cÚy)­š¯7ò8önWV—®õ÷ô2—2óµYÛÅeñ½‚6E[]9Ÿ›G£ÑŬ¯í +sïžêNßwçŒåVeâéñ²Ôä¶ŸL®†f¢b™z™¯ûÞ¨­T]ëã\¦º-ûÅTßÛˆ�N¥åûp‹�Ö;¸ŽÅF”£¿mËñ–ƒT¾²-'�héUŸÛµgVÝ;v¨Öî¿õèÎóY°�oˆyEðà„²gĶ2×lˆà~f®1 Ê�_lr…SæÏ¥­l…–6·?.c}›çwþëåvd–4¯Ý,0K]aΛ¯¿/ãã:›t—nCmvûÝ�}S1¤;› B)s[�¥viÓ�¾bÖpeÕÜNe×}0ŽCµÉwm+ý®[¿¯f²^�Eé©ü™evû)Œý43R++Û—…œVöYÛëzö)ý…¶†9oic–¥ùóÌ%#Ë®v柞{zÞ¹Ã9¯ —swû)mú‰Ë~iíÊm]°­¿I,ÿñ>Í]4ââulÛ^;¬¥¡†ºþº­9qtÝ,ïþØñ ¾S¾ÛÉ<ï +C?ÑksÕ^ÞEFxg”è¶eŠpÛØ‚åÎvNÂ<w+LÁ9ß¼*,4žaS–ÐIJ÷K46MÎã"%º×£Üó½NïE{Žr;?%ÄÁFÊ�ÝŽÒceq·‡=dòCDä¼½ÓCô}pL‡:VΫ•£­MT–¶²ÃÖ“Íûù¼·ùŽžç»Úè:ävåæqOXóy=OÑ`–E‚‹q›.-£°[Ç謋œÄÏ$Þñ¢{n¢í�Ž•#hï9w[牟I|v¨4Ïì;¤G¤ �éšpÃýé�Ìó$kå>rn�ûÔ×㽓õrÔö"8oÆËK7+»� —-æ“Ã>I|·õ>’*J²w®eEÒÆíPDSJ.=T¸‡"‡¡]á¬Á¨Qâ›û›wçò<Šœõ{(ª\k†¿ýæ‡änùË¿a¾uüÙ.º¯CšoËßEn'S—ßoËß´Mûë­/ïÙl¹ƒ2 + 1ê$ÊÎåy”5³½ÞCÙ½­¨Í¶Ó‹ÚÝûdÀd4Ùee´âzTÊõ[bß$ÔpyØæëë3÷ËžCÔ}dV´i¡œa¿7û­~-+6�©+÷©¾¿ÜEj0�#õ\ž§CjÜåC !º¬²vЩ-gìrͰy¼â®a´Ý€Œ b\—÷¶¶/ÛQ�Qf–žg�8“ʶ%óºï®íðÙ,yÒ�™§[;j»o]$¶sgæ.2SåC~Ê®ú{'ó<2½ÞåÐÚ‹ãŠÝ#k%›-ü�û¾>!ß}²tK_gƒZ×5nÏ�(ôÍ÷#g&åÈ3bvQx2ÏÓ¡ðœ¿XG¦»I0Žn•—n÷¤ÜýÜAêÈ}"²Æ‘ì¹ô�úêÝeÁËœu'V ˆÚ¬¨HïÛºâIa§Š|Hßûƒ'38™çé�wàCŽ#Ö=½A_7²›•ìÎgÉû¯õцw¤•ý#v¿îûsd†ú>4zðJþî³öz;Q›)©høùÀ}ôžËótè=ð+K¾®ÿV^ù:Œlµìñ]�–_+FÎ6ÝóF^ŸYði«§!<$ñp$wÏÞ’ç0ª»ƒØæ;žGì¹<φذïo>�øÑ˜÷‘èíWðn™«ô´ÏµÁ<ßÌótÈÝ÷Qÿ¿íè|gÿšè.h=œ}wÐL�Çý'ó<š÷ýÞ�?zàAH«sEÌÎÌèw‡Êólqƒ¿:"æWçÏ"{ÙÚÖ8ò±rël½Ç­�OÊgX(�ß]ÛGã¹¾·[>"ö‘ÝuÚAÒ?쎚ŒàÔù—!NÚ?¿�à“yžÁû§ð)Ï ë‘}ËÕý­~O ¬mªèø6£ ÿ~àîi}þ”ù–yú6´óeã,9zV4u{—g#¢“yž}çüÍ£{í$E)w^³~·?ÖùŠÿx<÷‘™|¥ÍW„#4EFÔÑÓ('ó<Jü˳QG—rˆ6Fdg„qTT}såç…5 +Ú®u7Ò—õ»àGOk¤ôø³F'ó<ÛèjuÒ‰‹C·Þ;œDÍ�ðyù Žeˆy+›Cú—å}pAÇyJˆQôöëüN¸]òÖ|Ôò÷uÕ×,ú´_ç:8b¨åúÅ–B +œ'ÎÐ+¶|¸`\Τ +cá´Íg zÕqUQu˜äDå…¤í¡=W=”´~g Eòaô6^ °’Ÿß&¾ûæ—YæeÙÁÈGT,ÏD›òVS~buY]òê£æ—Œ¿·9�ßpZ^Ï/+§åþ§õª½P¾|nÇD¨ú²µÉÇH¨ù%úîeïZ~yÙ»³gõ²wZ�Ûðã8l¿\|>wPç³g•‡�køpú«§‰q@ê‘Ï,´¤Ë0éܱúz'g>Òÿ—šj9å_ñÁ¿|ècÆþbIÿKàŸ/:ÑÄýŸOÁÈ'r«,ަ\4ñÛ…Od'ALÔŽÒ8³pù¨jY¤ëÉEv-†)�)­›Ôò±ßÁ¯gÍ�+­áü®dã“òH•D6Ÿ7W,‘Óë­˜[¯&½ˆùTû8ÙåÊWSøeá*lRŸ¶Ø2еU�Ðm…ª«®‰ {4Ÿ‚Z»Î7a5½ï:Ý IkB7œ{ÂÛÕÚQú&Jù,íRTé]£ªÌvF¥*u%eªã$ˆnAøƒ*E³ê»QãIga,@¢š.•t‚èvÓ-¥¹:R¡¦Š-k*=ßLiPçSQîËnÝ7�¿¦£›#Ê–�k1ŸºRÇZÅ7f#¼]Õ™ØÄo„Ô®q…rz½ÐvåVqT /MÊ»ó'LÍ"ãóùÿ™*\•2óäš*¤øLÖvÕ*á¹YÅëNêå¾²I= )´´]wé*fûþ‚ ¤gÒ­©k�­¤]—uò�ŠyLR•<Öb]QWÅLa¥*WöBUŒ@uMì*”ßVâf§«SÕ©Z™×Ü]-·‰}åη^êˆóáL¥mðæ‹ð–6Å ýX*ib>©À§VÖ ›a …&n4ú–Åe¶Vvâ/ )Û$“VÜÛ寗¼Ìë Ÿâ­æóâ{/K_ÿi~�ßÿºÐõå€Òy7ª²…©Üº÷+»H<)æo)Â:m:¡¡Žö›XÇ–Ö4ÔuÜ˜Ž¯©eW�ØKJ]TWm/t­;±©Ð5Úv=ãv„·¡«#óѱi ö|iKãød>Ú¶X…‹¾9¸ŒMgÛ’|íŠÄ'mK:´dºŒ¸è ÅeWaj–­Ìd@ö•Ô®gû© +Ëuu�Á—¶é¨-³}ÑE–[Ñ%� lû‹¾`Ò}¥ie�`ô»§×‡Ç}1Ù—ÀÒJíUúÖKkÃXZ O–Ú|é×—uͱùP�2y[Õ²l7÷lurÚÔh®­.zŒvÒØ²- \_)ÙªÒ²PTº€LY-1›ü’­tKnq{)TŸ¢IÿÚ÷´ëG¥v¢ëGÅoÒr¹eūޒ­�ëáZëTKY}É(È|Ÿ»J©¥´E¶­›Öu—ÕöÚ5ƒš!¾y¦ªes›”ïâ¿÷Ì�9Ï°ë ¥*?y'DÇv¤7jÒÁ›¿¥MEïÁ!Ä_´(v[#çÙß+Ù½’¾& ÇDÖª ùûödÞ HÇŠ®¨ò]|r¶¤Ä&=ÖÂVP£9µÙ Ê_¸”wó†P½ *ò÷«Yvz#-LPZ>µ4ß&ZmŸäŸÿ`У +endstream +endobj +542 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 541 0 R +/Resources 4 0 R +/Annots [ 543 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +543 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 573.873057 101.433071 555.123057 ] +/BS << +/W 0 +>> +/Dest (cb45-1) +>> +endobj +544 0 obj +<< +/Filter /FlateDecode +/Length 4929 +>> +stream +xœí]]‹$¹±}¯_QφMëûŒa ¶Á?æb.ÆݵÛ6¦×°¾÷ïßÊ”©Œ¬Êªé™­5ž¦§+#ô +…”YJ}VøùFã¿äô”RŽÁ�/?œ~<©)z…%Åꢨÿ„ßèÏZ¹8y�CòçH`ã³71œßOøo¸äÉßOþÅéŸë<úl¦œƒÑþü¯ïIåìSŒÊ ª •ÒVPy?Åh|TAOhbÎ’ +føèŒÛª"Ìp9yI3œ1IP%˜a]Ôv«Ê0ÃDí$ÌÐÙGA¥ìÐF)QC”sÖ:í§§IgôR6YÔEèt4’ÎÚ)D§½–ty +!ø$élñYiIça‹×Î)I[œMQÒØbƒU¢¶˜­¤‹°ÅÀ;YÐ%Øt%Q[TPZÒe;ùœœu:•bÚêŒò“OÖ*I§õä�M+ê0¢ÐI! +:[‚òYÔÁo•‘t¶8üH:ð„·1%a´ÝVY-érgÞ"²!p )_sÄ5ä í?R×"M�ï<=L‚P"Üšéæy6Dš1áά;Îú­×òVÖ¸Ëy”À[_s|?è/ÿF¶÷¯”æy:߈U?Á;h¹ÙãlÛbÊWë}‚�Ōςðôö8”ºpKµ[kòƒyž½7b×›ãÿãþÕzϨ¹Ö†1*|Òtah“hïØu<˜çéÐx#>£ýa­?öRYSWÄHøéz™ÕWË~Y¸Œík�ìçñ2r­ºà`žgC®½Ç~^Œõ 4®ÓmP¨?†_?'Þ¾º0úiLsƒsí{­ó<r�ům')ʾBÑE@Û÷¤ÝuŽ@‘ƒÜeGžöhßæ]ü%<šÿ•�ˆq'‰åm;^Ò2úà óÒP¶{eˆý¼‰�v�úÀ½îƒyž©7bÕ!v¬^´Œïð:G©}�óÓ}¢‘ÓZ}C9”Þ°kʼnÃ1æ¹¶‡ÚÒòya§mÔ¦/»BÜAìñìÁ?’yÚÕâͨEF³{ Æ=˜çÙÐì®Ç¸Ÿ»šâw:GÎ:r×v5 »ÞÃå>1õž;ÿ­rºgÿ2?{@Wü×hâ‘ΗÉ;è{`Ÿõ`ž§Cß�8õß‘çîÙ©º‚ÎÍJéÂêܹ—öåöv�ÌcÒƒ+®ƒyžÉŸ·çú³DòGì0Nos€žËÙÄá£xþÑgË3Ž�†qõßzY|zôŽíÁÛ×eîÝSlrÃíÞAë#ß7úyîÁúë±kë¹·5JVÏjjµÞW­3àÎ.{ë™!QKÏÕ¯žLëtåÙÕqG¨Æuoëüt,¨){¿;{ ud©ú�ƒ;Fœy`´›#k'�„†ûgÍþ�o¡øödæy:_�_Gþw”V»I�!©z~à‘‡z)ªíSÙI¶g|^–óGáQšq!³•‚–Í +i¯®e˜àVËüÚxœß—æõ ¨û¹ø`žgCr¸ãZa=»¹'ô”=;ÜcÛãÂZÖÀ¥–ÝyÝÜ—s¬=Ô?Ĩ¢ ãÝïñ»WFc©Ónó®˜FÆô»¼ó<¦~ó‹=YP¿ë×°ÎãŒÊ¨7úºÅ#~.“˜]bʱþký¼w/yï;+Ò])ÃãLà‡¨øÚl4Æ3¦[šïÖñPÁêà/qFáí”ñËž�Õt š†Ÿoá÷Xž§Ãï�½]¿+?_ùV{Ò%ï`…Ǧã7cĶ�~£po/Å1ì¶10o\Ê;`m–oG�POŠõD»dçdDHƒ¶Ú¤Òÿó»oóûÿbû”´CCkºv¯¥îÚto˜æåaÄ6Ä“‡ç´žèµ¶n¾ÞÈ—´¤wãQ«/Ò,ºò@³Ç…­œÊ';:‚–zíüy½[òŸr¢åN$¿5Ÿä¹=ÜŽ�K›SEkçâÞæbkèþ©iTù&5�EYÛÕºò¥ºÌHÑaiNXµ#Æ)dKgä.í°KßyòiZ|…rôwÛr‚¥¤è�Òm9Í×n)+\³#i»g‡êmqÖ¾‚…y¤ ¶ÑaµA9²PvÁpžóSûJ©¬ŽÍŽKóýâ‹j“_f¿Ô}Mm,}—rÿUûgF’í¯ØŸgÔÚ÷ë~ï6]õ£Ûê˜}¥Nϰ±Œ…‹­-—µ}}¬-¶æ¥O^–¶ú+í«ißæúõ"·Ì×5J(éYŸo}°ô‹›g s|æÙ8ô‹¥_âUÿùѻ՞Ň­-áx{Ë,bfBÝ«<†­rO§ŽoÍì¨c5ötc™ºæk#ûI/w KZÕ9³cóªï¢ä;ÃK¹‹ãø«uzf ÷‡_Ú:ÞZ0Tæϰ¦¤¹…�‰Ê#êjûò¦}m.áóÈ\n¹c ûï:Jé|phnxÊZE$GÚµ·}nœíõ|\÷;#ݟ檟²ÉƒŸæùj=ž+g�1qö~ +-ÈåàâC1ñÁ<§õ�Á°oö†<%ï1Tå[ÅÔ-ãbX/`YH4wÂn…9L*Ó¡´C…u +ä· ¨‹ëMüÝ ¢p…ýÛ­Ü.•3œCí¹•Û‡){ô™”›?âÜ–ö¦‡Ly9‚óÁîxèk=r³õΖsJéÌÆ ž ®zÚ7%ØL¿Š¢í^d¼�<éØûLL�µ–±ÝiïOË��Ñ#§G�JíÅÎl\w3É j«þÙž xÖé�k¢HzS‹M½hU¤ÃMEÿ…å›#KäH]×V’K7šê?½DN¯,¢ñsÔR»¾ø;ôè€è‰ä¦­&X_µ‰²K}KTZf®È¢0ÅúÓ­íYEŒyyîµ´aÓm?žB9”W—ƒÙUH“6ôæ–spµ1Ÿé बӵ›tq¬>ïä,ï»ù±¥Z^�£èT|:¹t#¿XÒÿX:ø,\ÝêRµ¼®B1ÆšÅï'z]‰ÄÎõõî 1 —�ª•åt[>WÙ“uœò˜¢Z>ö56Í’jaüÚÊïk6:FÖ©šÈ–ƒTçŠ!r½SëÕ¤1½ò%Mv¹ +Íšqš°èxÚ^`ÏxS¬­bB¿*V]WíÑtDxs]èÂf:w�fÝ_ӚȺóšðrBµv”¾‹RzÑD-ªzר&³Ì¨Ü¤¾¦lâZ? ¢ËI~£jÑ�Ùô¬×è¸îY˜*�\K—k:At9‰é–Ò|ë©ØR¥ž5WÏwS:ÔmjŽd¶éVlŒ([?®Å´íÑúZ%†³^NÞµ‘ØÅï'…Ô¾s…òz\hY¹MœTÇK—ÒÉŒó' Í*£ÃŽéÿ™*|“ó”Ú5HÑ�åýªWBc³‰×NâòÐXÇIÐ.ö´Ì]:ƆYî/�”�žH·¥n[I™Ë˜<æj‘T#�µX7Ô51QXõOãJ.TÕTמAù}%îvú6TéÐâE4ƒ»oåvqhÜùÎűõ¸¦Ó盽­\†ù*¼”‰Í�b‚~ª•t±Qm¶ë•1a7 ¤ÐÅ�Fß‹¸ŽÖÆN到åcdÒŒ{9ýýT¦9c½¡åd@Ø×Gëóÿ!Íðû�“;ÿ±žÞ=ÏãF5¶0�[Wb>“Ñ«·ÒA1½Š« +Û°aBãíw±N=­¯hhó¸1Œ¯]Ï®:±×”º1¨nZ.ô݇Llt�¶Ì3þŠð2x±2ŸÛ7}ž/mm-�éÜ÷j.xsp™ºÎö)ùÌŠÄ%íS:´Î°Œ¸à…â’U˜»e+3 �¼’æz²ßñ®°T»`a]Ú®s}šåEWYiK‚Øò ^°Ó¼Ò¼²G0úááõÙý¾˜ê i£ö&}çÒÖ0’6“¥¶\†õe›slYXÖÁÛ=ÔʲlìÙäô¡ÑC ·ºàeÒÔ³- <¯ÔUÙªÒ:Q4º€LUY+1V›Â’­º¥´8‰^Š-¦èÒ¿sO{Þ+͉ž÷Jؤ¥rëŒ×¢%Û Ïá{ëTOÙbÉ$ÈÏݤ®§´U¶­Û­ë®³í™5ÃuCB�LUÏæ7)â¿GÆÎœgØu�RÕŸ²¢Sß&j§£5¶¼ÂT¥À!ŽÞB]b[#wç¹¾W²Ý©{%¼&tÇä¬UQÓËheÞOqžÃ®+XQõEµr¶¬Ä&Ýça+¨ÓœÚì•·–çCʆP»Œ´T¤—�Z +z½3-*-?PPŽ_mŸ”Ÿÿ¾ÏTJ +endstream +endobj +545 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 544 0 R +/Resources 4 0 R +/Annots [ 546 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +546 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 127.623057 101.433071 108.873057 ] +/BS << +/W 0 +>> +/Dest (cb48-1) +>> +endobj +547 0 obj +<< +/Filter /FlateDecode +/Length 4833 +>> +stream +xœÝ]ÛŽä¶}ï¯èg–y¿�H8ðƒ� Œ ÈÃlï®�`ÀÎC~?§(ñ"ªtéžÙµÖ;˜�V/%òð°X¢šò*ðó¥ÄÁÈ!„è�¹Þ~¹üzƒ·ÿRŠÙERÿ€_o¯R?X]°×_H ýà£UÞ]Ÿ/ø¯»l“?_~üâòŸyyUCŒNI{ýí=©Œ|ð^XF¡R3*kï•uŒÊÉ·#§‚Öe–*3L –SÁ £T`Tfhã¥^ª"ÌP^N3d´žQI;¤‚ÕÁaŒVŒNÚÁ¡Ñ§Srp!ªÈêf´*ÝZhÉé,lQÊV[Ðù([„w` ÄK(ï•áH@=˜`Ç*ÄÁx¯9PÑÆEÏñ€:%9"жXã8&жŒ\V[t4h[�€ã­a‹2šã ¶5@ ÇtkD”hð­Òq\ A¸0Sp\ Á¸:8Ãq�åJ‘ã ÎÕàNŽ 4HÃÝs\ ÁºÚ:Åq�íjǼ«�ð®ÖÈÉê` ÌqØqÐ2hŽ xWKá9.0à] #ÅqzuÇÀÊ Bð® +Âp\`À»Êc +`u~ÀÔ𮲸næï*+Ǽ«Œr(øG°Þxbyw¶€`9.À|�Ò °AÁ-á¸À‚weÄôÇŒi°Õ CtXð® è>VéÑâ̸E+Ò¹Èq�ïb¢ÒXð.è3p\Ž0£*Ž ,xWjÌÔœ¼+UXð.üËqà0H8`~¤tY]D �ã Þ-)Ž 0 "€IX�$ÉqÈxðC9.pà]Lï‘ãÞVkŽ xW¸=¬¶è 8.€_†-3¦á¬B�)8xWHô0§ï +á#ǼKÓ&ÇΓ@Ž `à/Xq\à‚¢÷ŽãtpùX�pm9.ð Êbu°ÅxÃqë!ê8.ð +¶h¥8.ð +¶Àeà¸Á%¼ovy[v}`` ¨kv£ìõÍ/—¯¾ÿñ›oÞühóáòÏ?!é\=ùõ—Ÿ�ÿZ1]‡éÚMõ<�qótê>ß&Y¬òœÎÞš<æyŇyþbC¾öã_,þª�a橱ÓÖ²´[Êmlìëmïï)Û¬¦¿¡Ö™mI6ûæ>cc[˜ßg±ßÕÏ¥lÛµksOÊ}ý¯ë›ï.~3%œ® Jò/�àøX–—àøá[¬Æ¤±…ß‚£Üînþ÷¡>òµozœö}•󜪊“ƒ <výÒVøok~§® ÿ»¹¼~ìtmÂÚÚ`Îä{|Û¤Éíñ¾±µiËÒN·¹-3ÛY$Ã]¿ÊóœËj“‹OÓ¯–áþžsY�jÓ¤QMß7XHuÈ®~ß•ÃÙ໺;.ß‹©N½Ì»ààn¾¡9+åõ Öo«XÖ÷ÓòÁ<§Ã²ÝäåvžÜëëܿʎí­Ï“}ßlõóbîïÇH�f~'~ëç�‚íÎG"›û¹¨÷e8L—4ïæ¾PÂj×^ì|Ò�G¿³²Zžæ1\ý]m(d)Ór|ÃÇòœÃÛ¾që·&?"L>$‡•Ö/í0uį%?œ&âæÞ—INÁÓÇ®¿ø™e¡J­è¦æsÔ[ƒ6ŽžûÒce5=¦§vûÇ_¾ùö¯«í6âœÊ&|6§qËãýŒ¾áqL[SýM…X—cEnƒ—]…T‡|ÇûÅèÌʦ +™L¤hÃ&zæ9 zËÂNY¿ÉÀ™ùº™¾ô8zA¢Pi§¿ôëÇkVGŸõ¤{êÒ¼›þNr¥&}þ}7ý�Ë´Ùó°½—2]©dë½�÷1[éõ«B=–5+/×¹2ÃH±‚2ç+bÄA”Ës”U³ƒ:²þ*óËÓØÂ…grK¿Ýžó0 MºAYî­~=äæ½–Ò¼ï�p›ÖzÙGìÖq©>µ^vÒí ³ M2åtó<•·ð×?¯+µ©\÷¡V‘ÕýH=–çlH¥�4[He"³gª;�XrÆ&׬D•2»Þ¶2ˆ±MÞÛܾdG�è¢`³‘4Ý_âu×\ëòÄ•‘'oÈÖöËvmyäkÈÔ²ð!m1ìù™óœ™z“CK+ö3v‹¬-”p±¥6ïÓ ùî5�%kúEìúC?‚WPX}?cÕ ¬q„˜mËs:óKÏ4‘œµHLZ­ä4]´ŠCjÏ},²VžB$¤ßQ_‰*ÞŽùg+pÑ!j1£"}X·uÆ“ý껉Z¬"¯õÆŠæ9òv|Ⱦ'û8_�¾¦g3ÙÊgÎû/õ0«…ïp3ûKìþ°íÏÕÕ?ñ¡’�WòÑGí +zQ⣊6l£÷Xž³¡×ìø•ý�nEdŸºžmV-[|×¢åS­‘“MkÞÈÛÉgf|ÚâipOIï]É­Ù›óì®êxÄšê;FìÁ<§Cì¶¿yð¥kÞ{VoŸÀ»¹gTÌÒ›m®5æþ5üÁ<§Cî¶�úG‹è¼gJtg´î޾4»û×ýóœÍÛ~ïÂÝñ ¸Ù¹ fcd´Ñ¡ÜÃ4Zúçé=b>9fÙÛ¥m•#ï+·ŒÖ5nm|RzÙUÈ´É}�Çòœ �vÛ�] +·pƒ,ê™—¬§ÓÌ�ÞÝ\©=°f-B¶@÷„ühd-¥{ѼÄ#Ó>à¯Ìs:dîø«¯:;úëü¶P)‡ÞùR“m· ÓiÅ»ÂXìŽ<˜çtˆÚyJëYŠo|Îìó2ûWPï_ Ìs6T…�]‹¿3ïÜÝ»¯Æ7ÓˆÚñ‡ÃQ¯ƒyN‡”�§¯M\ñ£ùÆ+;´û}QGâ²Ü›%œW×>K*+®&¦�wÝX¹bÛ�¸ð]ONr¼ö�½­ÁÜ¿û`žÓ¡uÇÿú„kø�†„{÷‰Ìݱ»'Å'útOb¹?¢f6‹¤­}oU�l}ßê`žÓ!u'öpœQ<¾›ä#oŸ_Ôl‘ì<˜çlˆŒÇÞdyÑnä{ž(|ÊÀ¼ýýGAp| ºw0Ïé¼ã«¾Ò~úWÀ+¿CµjÓ!Ÿñ,_Aoó¤õèûóœ½;¾ëgü–ß«ŒšOºkq�Äæ9wüÓ•ÝЋ·>låš²jè�ð{îMíwqÓJ&qY·_êóáØä>ðFöÁ oib3½˜ r%U¬D™íje�°R¨âJ£ÏIœGka':›8¬ƒŒ›qo—Ÿ/išSÚªˆNK:–²õ²äõHó~ÿ}1×ïó9Hã<®Da U¸u&ng2:Ä8Ó¡ÆYX†M#T¦¡ý*–¡¦µ eWªákS³‹Jì9¥, *‹¶ÚÚ†�Xè*©›–±Â[׊őyißÔ {¼ÔùæP�¦´²U¸ho—¡êt�’¯M‘¸¢¤uJ—ôÍÜMF\´…ⲩ0VËff ÛJJÓ“ý¦í +Mu5�A—ºêL�fÛ¢³,ÝE“.°n/Ú‚�l+�3{£^/î÷Éd—GI µés+-7FÒBx¼T§K7¿,sŽNç†åÁ[[¨”¥›±§‹“S‡Fu-Ìì¢Åh# 5Û”À¶•š,›Uš'ŠB�‰,+%úl“›²åfIwØVòŧ¨ÒŸÛ–¶m¯”F´m¯¸EZ*7ÏxÅ[ÒŲ-œ}½;QS_202׿.RSSê,[ÖmæuçÙöÚ܆©†¸ê™ŠšÍ.R>Ä�Œ�1OuàRåŸ ‘¡žˆ‰ÚH¯•¾Frw‚sàCçùzšÐÈÝy¶c%ˈHŽ•´5¡;£µðx[1áЏ¯hŠzž]ä³EÁÞÒ} À„‚*͉E$(�ëžâ™) T.=-mL§ïŠèôi/ø£0Ò–ÃÛ,|’~þ™F  +endstream +endobj +548 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 547 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +549 0 obj +<< +/Filter /FlateDecode +/Length 4894 +>> +stream +xœí]ێ丑}ϯÈg#ó~ c`w/ü` ÆÂ؇®ì)FÍã}Øßß”H†¨�RY]=›°§ Õ•Šà%<< ’’R_~¾Óø/9=¥”cp×Û�—Ÿ.jŠ^á_I±º(ê?â7ú«V.N^ç�üõGØ8ÅìM ×· þ.yò·ËŸ~uùïu}5SÎÁhýû¤rvŠ)FåU†Ji+¨¼Ÿb4>ª '41gI3|tÆmUf¸œ¼¤‚Θ$¨̰.j»Ue˜a¢v’ +fèì£ Ò +vh£”¨ƒ!Ê9k�öS€Óƒ¤3z +)›,ê"t:Igí¢Ó^Kº<…|’t¶ø¬´¤ó°Åk甤ƒ-Φ(él±Á*Q[LŠVÒEØbà�,èlº’¨ƒ-*(-é²�|NΉº �J1muFùÉ'k•¤ÓzòÀ¦uQè¤��-Aù,ê`‹·ÊH: [~$xÂÛ˜’0Z �n«¬–t¶�¨ƒ-è|‰L€-*‰0‚&â%‰LŒ“ËÆI$`’�\rIb“òäb´ ˜ì'r”xÀ* �ÑX[¼ X [F®¨ƒ-6;‰ ¬�-H q�µ°Å8+q�Û: Eâ ºu*k‰ ,øÖ)$.° \˜©$.°`\›‚“¸À‚r¥,q�çZp§Ä¤‹á%.°`]냑¸À‚v­KAâ ÞµN+‰ x×Zäu°–¸ì8Y�¬Ä¼kµŠ8ð.†‘‘¸½:‡Aâ`e2))‰ x×$å$.pà]1ˆº8a Z‰ x×x4Aš¹Á»Æ+#q�ïg‚ÄÊþQb4Þ…x9€- X‰ 0ßCg¬Ä(l2K$.ðà]�1ý cl5锃ļ«ºOÔåIGx\·ðò¤CÈxð.&*+q�ï‚>“Äàø 3ª‘¸ÀƒwµÅL-éÀ»Úd%q�ï"nð“F qæ·I+@WÔåIå”$.ðà]Ð’‘¸³ð¤˜DÔÅ @Ò€Œ'…8Tâ‚ÞÅôž%.à]å­•¸ €w•CØ#ê`‹MFâÄ5ÐaØ +cÁê¤ ˜BÒ�w•FK:ð®R1K\À»4mJ\" L’¸Nˆ‚�Ä!¹)Ç$.YA‡�OÔ… ×^₨ ð ,Q[\t °ž²ÍIâ‚h`‹5Fâ‚h` B‰ LY#ú—°p×¶ R”¸L6¥ìœÄѬÇàUIÌ”"èZÔ%èt”¸ F7a*Ö`-5% z‰ @ð…KÀ è´“¸ fØ‚¡"q¦¢)Dæ’NÃÙ Ò…Nk‰ ’�-ˆ%.H&a•”Ę¡±–„«%�S´ÎL$& +%.À0ÁJL)ê` hBâô-¶½ÄXü`±‰eލƒ-Ö;‰ R2´ÜL¤[Œ2›´ÞŒd[ñI\�U˜(L–¸4�Rd�°Þ4NâŒKZo&‰ ²UXob‰'ŒÛl­7£ÄÙÁ�EÔÁMY·à$¬7ÁN’.À“�Ä9Zo&‰ f`½‰ˆ^ÜH´ÞŒâvx×g0“¤ï"2 àëMD¶ÒÚ^�x}D|&+­8“¸c @½s«¸e À½˜­¢¸g @¾´F7 `&V–)ˆ»˜V¡ÔJÜ6Pà_Äcnà óîߢ +€CÄœ™"52cX8D÷mÍÑ“Ù�dóþØßÿrùõgL¾×¿üÏåõWe§¬þh%µC|…a`2ºÛ#úÖh¾…-ÞÓ`ÙC‰©Ú˜»YD¸l³‘Y˜ðèßuûae+L%c‘+¡@«ÿ`,ƒ{JéË`¬ Í’ÝÖ‡óÜ59"&È×öA˶vñz»“$[Îóá¶F�Í1y½œ!Yy7õÇv¯˜øq[1‚0²hìÉ<l²m#%S'”ŤÎÄDi‚–¦~fñƒY>Ð`ªa@› Í  E¬}”[%þݧ Èt±bÞ§o—Ì|Ät“£ñ×O?^~ý‡?}ÿý§ÿ?½^þüöûíwšþÆõ_ï—ë´\‡õ_0b�Evï•Ó¤3¤×=}K³ÔAºfÇë’y,"õŠÏ i^¾"?å5C;â6¯Wëò±ä*í,mý?û´ã£jçK×mü<´A«ßþ×õÓï/ÿòi ¾²jZÀG‹«TâC¼žËò5xý0Íù¦ŸYw×®¬.´’�¸œCÔ¾Ìù­géÔPßP¥7'ìâ0ra Ó1Oµµ@ÎöÖ´ˆŽÝí¸mÔ¦|÷Êz™‡¯d[«£–͆ð\é”éQ¼žÌól€ÅJÿ±AîÏzØñž|]§§¤£¼–¿öt%`Òý0 g$)N�c9iQy#ÉW›ÎÔUÚS‰Ô®ä÷|‘%"ühÕƒ]ÃWvͶS)ج’¡¥Ò1šÏåy:4»Cþmÿ.=—çéÐw'HýGä¹»œt�#W6[2³Sqµ�­ÞÛ7D2IO®ºNæy:$߉cÿ‘¼‡¦Î9½Íz.g‡�~àùGŸ½Ì¨ul4Œ£¨/÷dôŸÒÍP˜HÂ=ôžÌólè5Ç1í¦·†UKCŸ‡•ÍØœ·6õÒyfÅamf§ÌGÏvóí\F€ûÂF*C·8îÖµƒRwžF鹋Ÿ öö]¹Å·øéuí«5ó->ã¸Vœ½8sÍiWcÌ3Ÿ¦ÁOÜÇ~ÀrõÑ0¼é¾,²¼Ø\mIC_9ÆŠ²ßòè7·ÔSñÅûse—^ÆL­›õugnÎÚc—ÕûÖ½kûfž]óDåš1ª ô”Š-wiӃȧ¢º“yÞu³ü†s¾ÙKO»y�á/vRWŽË9½LZ6±Ï�°[a“Êô�éPa¥n¾áMôT�¡wK46O>à" +%ú×{¹]*Ïd‡ Ús/·Söè3)7¿I·±ö®‡LyÙ‰óÁîxè纑ánë�-ÏÒ3Xïð<=}×…(·ó^nê7Œk>Îó.Œ²äVìcÓç¥ëƒx‘“¢ö@x'ˆa{»ÏŸ«àÏîtÛ€‰Þb‘éyñ¡Ò2²wH/:] Ì;un+ædž'YÊ6î‹ÞqŸúüËÑͼPäßìè¦>w8±ƒ`z€tAãÙÍÄ“yžÁÝìò<ú.‚9ºùÜàôpBÆrÖ�cù\žgÃrR‡lü4ýúÏzp#Ì8»‡òS|úq^>™çé°lyù—ƒ›m4óÍnvð»{8±ó$jãVÓ¤­£5ä½GQOåy: GÇ?ëÁÍg¾‘4è¬Z6«9³¡ |®¨8mG½ ýXàμ2ØdÍܾZ×ûnßÛyî¹G¥&¥)-oØ9FÛ¹Ëy[ÛWì8óì}JKû +±vm‡ÏfÉ“w†žf¡¶ïþkAÆÁr�Aó�ËÖ¢G/zmË›1ƒb/lkx¼›äüj³}ÕU/ýZÇ9(’¾ZÁ¦«Êr¤·Š'$ay³Q=^Îìf§Å�¦FBõ˜™XP©~¬þCww‰Š–£órœŸg¹i·¹¨~ÚT?Ž×ªi—Wà,·$ð£ìV~=Êgö¬nYÈËÜ\Ú°é¶Ÿ.¡¼ES—7)«€U¤¡¯Z¸7ÑæK¤`ŸÞÀi�®Ý¤‹cõu'gù‚ŠŸZªå;+½Æš^aZº‘_,é*üãEg7‘ÿË}Qåýòªˆ“©]üv¡ïp‚ع~sÕ1 —�ª•…•µd7jœò˜Ñ›Z>öº(¤›?_[Cù}ÍFï}tª&²å͇sÅ‚9ƒÞŠ©õjÒ‹˜¾£!Mv¹ +Í:RnÂ^ ãi{�=ã]±¶Š ýV¨Xu]l\µGÓ;}›ëB6Ó¹ë4ëþšÖDÖ�GÂÛÕÚQú&JéÍðµ¨ê]£šÌ2£r“úš²uˆký$ˆnAø�ªE;tfÓ³^£÷ëÎÂT�äZº\Ó ¢ÛEL·”æ[OÅ–*õ¬¹z¾›Ò¡N÷ËíËnì¦ÇH_:ÃÆˆ²õãZL÷ãµ¾V‰áÆl„·‹wm$vñÛÅG!µï\¡|…ZVn'ÕñÒ¥´ß6ÂЬ2z;)ý?S…oRbžòA»)zÃp¿ê•ÐØlⵓ¸<4Öq’´‹=-s—ޱa–ûK'%¤'Òm©›ÇVRæ2&�¹šG$ÕÈc-Ö uMLVýÓ¸’ U5Õu±oP~[‰»�¾ U¯ZeA3¸ûVn‡Æ�o\[�kz]t³·•Ë0_…·2±¹QLÐOµ’.6ªÍv½2&ì†�º¸Óè[×ÑÚØ©¼?eùØ™4ãÞ.½”iÎXoè~±`5}û�²ôõ‘æ÷øýÛÅ]ÿP_·;ÏãF5¶0�[Wb>“Ñw夓búîœ*lÆ �c´ßÅ:õ´¾¢¡ÍãÆ0¾v=»êÄ^SêÆ ºi¹Ðw2±iÐ5Ú2Ïøámðb d¾¶oú„=_ÚÚ8ºÿ�^Ô\­Âo.S×Ù>%_Y‘¸¢¤}J‡Ö–¼P\² +s·le&’WÒ\Oö;Þ–êb,Œ KÛu®O³¼è*+­`I[~Á všWšWöF¿{x}u¿/&‡:HÚ¨½I߸´5Œ¤�ðd©-—a}Ùæ[n«ƒ·{¨•eÙØ³-ÈéC£‡nuÁ1ʤ©g[x^©«²U¥u¢ht™ª²Vb¬6…%[uKiq½[LÑ¥åžö¼Wš=ï•°IKåÖ¯EK¶@žÃ9öÖ©ž²Å’I�ž»I]Oi«l[·[×]gÛ+k†ë†„™ªžÍoR¾‹ÿÞ3væ<ªþ”��ú ê1Q;­±å;U +âèkc¢Klkäá<Ç{%Û‘ºWÂkBwLÎZ5}{¤lÂù¾‚U¿YRΖ•ؤÇ lušS›� òõae¿²lµËHKEú¶@KAo¢/9ŠJËϼÑn›]mŸ”Ÿÿ�r¿ +endstream +endobj +550 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 549 0 R +/Resources 4 0 R +/Annots [ 551 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +551 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 348.873057 101.433071 330.123057 ] +/BS << +/W 0 +>> +/Dest (cb51-1) +>> +endobj +552 0 obj +<< +/Filter /FlateDecode +/Length 4696 +>> +stream +xœí]ÛŽä¶}ï¯èg–y)Þ€À€ $øÁÀAäa¶í±Ì°ó�ßÏ¡$^D•nݳc �ôv«Š¤Jäáa±D‰ò*ð÷¥Äždç}p–®·O—_/¢sFà_ŸbrЫÀÇ™«ä:#ƒõæú) +´ë\0ÊÙëËÿ5‡uò—Ëß¾¸ü{šG^U‚UÒ\û)ªHwÎ;' £ +P ©•1�sÊXFee‡K �SÁ ãHÑ\å`o8Ì ¥<£ò0C““z® +0C9Iœ +fÈ`£’vH%«ƒ!‚H+F'MgQé–Ó)ÙYT`u:é§Óº³Ž¤‘œ.tÖZã9Á„ät¶I$8l!í§³°E[-XlQÞiNç`‹BíFça ÐåYlVHNtg‚'bu:á�Ÿë”0�ñZ N'eg€MÍêУÐHÖ1:[¬0�ÕÁ£…ât¶þ8xÂhç=Ó[UìÝZhÉé lQÊ«ƒ-h|Ž”…-ÂYŽЃºÈK(ç: +Š8P^wäÉs, |èÈ9ÍÑ€ +¦#ÇZHè”äˆ@ ØbÈrL %l!ô\V[t Ž ´‚-HÀq�Ö°E‘æ¸@ƒm há¸@ƒnIÉq�ß’�–ã Â…™‚ã ÆÕÞÇ” (Ž 48Wƒ;9.Ð ]twÇq�ëjcÇ´«É[Ž 4xW“xWkädu°æ¸ìØié5ÇÞÕR8Ž ¼‹n¤8.@«vÀ¡å¸Xé”÷‚ãï*/ˆãï*‡!€Õ¹}Ps\@à]ep ÜÈ ÞUF(Ž ¼«HYŽ ”ü#Xo¼ +1¼;[@°`¼‡NiŽ PX§à–p\`À»2`øcú4ت“>XŽ xWz4« �t¨q¦ß¢–;imà¸À€w1PiŽ xôé9.ÇwQǼ+5FjNÞ•*Ž x~ƒá¸pè$Ž 0¾uRº¬.t"xÏq�ï‚–Ç…;áÁ$¬Îu’ä¸dÜ ø¡Xð.†÷Àq�ï +£5Ǽ+n«ƒ-Ú+Ž à×@‡nËôi8«�P` +NÞ-ÌéÀ»B¸Àq�ïÆa“ãë¢@yŽ ``/Xq\`=uÁ9Ëq� :¸|¬Îv868�e±:ØBŽ8.€cÝ<ÇNÁ­ÇNÁ¸ À#è‚„÷ÍN` àÂζÀSä¸LÖù@Äq�3ó1Ô*§³ªótÍê©Îû„~ˆt1â—ó§òƼ½î§Q7¦!ß³/¿-'Wå¥ß雞«sùª,Û”«ê$•›_£”%=Ñø[LÏw¸¯#)¾þçõÃw—?~˜«÷6`a  ŽœU,îËò?1u]ƒ`ÛÔTÁ iÚÜ$‹.UÿLMS «¶}óçK爰ׇüÚTéD'7?Ÿö˶XUÝäV]‡Kåð°‹QöD&:ýð¬âxµŠ»�yÎ<ÌtÖ�7kI7­éúª–•º�ÀÚïIk5çëI¶EOK:vŽŽ‡ì~P’Ð×¢˜Tsþ‘ •œ^Ëçïµ èÕ™ Ü𠼊®á:z÷å9zi•7s >O¿3¯<5-ë +‚Öø®FËÖ°\£1!e ¹á ê{›–\‘�Ã0[»ùšoÍ9dAÛ¤ç-¸u�Ð’½)OíÖêö·ªÑzͼM‘ÁF´ìô;# ­­Ç’¸´¹ÎźÓûàΟ{ç,^Ì#T×1Ô�³©�yΆP½wÝyÓ({ÍÙ"©�©epÐçü’Z,!šÆômù  BóyTg¸bÇ›�¢1ó}{]«ºlmû±Ê·vCk µÅç¤`:ø�oý¯£v_žÓ¡vÃOMm–v~§b)Ëzõ½§±çöéšÙeÛ«¶n�js_îËs:ämܤoæ·³¾Î´ìäî`;ºþÔðcu×PÕóá¥hy‹Ø#ÑuZAÒ»�¨- ¸ò/�ï¤&g·"N;óœÁñÓ|Ê=è:·œÜߪcnjSFÇ� +úÏwOûrÌÈ·‘§oÍun ¬í%eàÑGUìrïŒhgž³¡�öù›[÷Ú‰›¥´¾E?â�U¾âûã¹GzòJ‹¯G¨óQ[«Qvæ9J7ü˽³Žú.e3Ûh‘Ý#,ÎŠÜøiFÆG›´tÃeu|kµ™ãk�væ9]ëîôá|S« }µŸMàÚTœ1Ø2²ÄHvœ1¨¨û8sº˜'Í0’^Gïü6–û±ÊG%}®~žG¬:íÓpŽ8aÈåÚÑ–Ä 1��×Ïx^ã:x|Õw›÷âk_žÓákÃú·�«¶:ÔÆvÀEd•Wkã=×ÑØÑ÷×£«rð[«Ñ¶Ûˆé~ÆË3–¹cuäÎmµ3ÏÙ�j7¢awÇÅý«I^1òöþ¢f ˆ¼càÎ<§Cä¾'YZ�|äŽÂ[ö€ö^Û»Œû. øŽèÞÎ<§Cð†¯úJëé9´ZõÊÏP-Ú´Ëg< ÂÐ[ÝiÝû<ÀÎ<§Cï†ïúŽŸò{•^ó¦«y4º;âŽ;óœ �nÃ?]X ={êîɳ† ¿çÚÔvwœÉô\Ö¬—z?»€Ü;žÈÞ™çtÈÝw÷îgNß¡Íz2n]Økðë#þöjü ­§6ÍçÞkÝ™çtÈÝç¿}£ÄE7 UÜ3F×'ëç9jÖŒöù£}³g¸ç¯Wå´‘¤*o»žÿ o½pwÜçÞ™çtHÝðUŸß1Õ¢®8ñ�ߨ£vصö\V›g-†zä%]ñš>ï qáåVwø³;óœ ±þ±Õ‡çóó÷dN;[¼óÝþwgžÓ¡yÝÇ}t6µú^•ºÅîÚNFa*-¼ôTËä“äñžýÓ°ö ~^ùÙzòúîÌs:ô½íÙ§à¹#‘ªt®¾¡cmûg‰=, ùŽ7 +íÌs:$?s}—H~�XAÅé“·fÜ?¼­‡:[gãƒ}O&òè •º÷ŽíÎþ5§wCqƒÄ¸9Ö°Uru0¦ÿµoàO¨‹õ cعTôb¯ÒA¿\âεĈ #÷NqŽ?E.‹dJ˜e7ð®ëB›R›NŒ?C.\›ôS™t51¿IÙâŽB$R"Ýï©3œ˜"§•sq¼zÑÉQwÿõ��l6ÅØd3„¥@ªÓ–KÆM±Ô¢š¹PT§+bEÉw‹ËUg‹0›^W�¬š?¥U®jÎ5áí‚ÓêVúÂJ㞣©¨T»Jd™®Œ +YjRÊÜ ”Û‰Ý.ŒðK‘Š&4fÖW­wn„>‰rº�Ò1¢Û…M7–frK¹œÊ—¬!Õ|1¥@]û\ñŒ¬¯£QêâvæU:ýœŠml�ÔÖÂW¸Q3áíb(÷Ä"~¹Ǥ6…+„IЫ…º*7‹½(x)ÒøÀäð ]3Éâ¾Wñÿ�*L–FæéHÊ�Š{ו£r’Ø7³xZIµÜfÖ!®$¹’¶ª.é\Æl]_Ò &}$Ýœ:רDZUY%w!™I*“ÇT,3ê²8RXªŸÌ•µP$#pº"6Ê/q±Óä® +°§“YYÁÝär‹Øfî|©Å.·¸Œf{s¹æ“ðÖlÔŠ#ô}:I+‘G»r²JX )q¡Ñ—^œzkf§þ-ôãÏÒɸ÷vùåÒsJðÃj÷Õ­½,yý/Ò|‡Ï¿.tý>mä6ŒãJd¶P™['âz$‹»°û�â¸+{ænS U´_ÄÒ—´&¡!�ãJU|M%»(ÄžRÊÌ 2kk¡)uX‰U†®’ºª³"¼5µ˜™GÛ¦ ØÃ¡N‡Óè¸`² +õåàÐ�.Còµ*G1iÒ¡%UeÄA](«†bÙÄÌÈú$¹ê£ýT7…Žçª*7"ꢣ2ÌÖE'YU¸Àº>¨ &YŸ4LìaŒ¾»{=Üî£É6õ€(ÍÔž¥/µ4_X”fÂ㥺?´ÓÃ<æèk> +endobj +554 0 obj +<< +/Filter /FlateDecode +/Length 4237 +>> +stream +xœí\ÛŠ$Ç}ï¯èg�Ry‰¼�H`dô XcŒñÃnK#af +?ø÷}"«23ª*º§gv$¯±v˜�®ˆ¼œŒŒ<‘]Uîlñó¹Ã…œ)¥æDçËûÓ‡“59Zük%6Mý~s<;KÙDWS‰ç÷,Ùä}NçÇþÛ]Êâ�§¿|vúç¶Ž;{Skò.žþ�UL.9Û¨¨*TÖE£ÉÙǤ¨’3b­š +0b&OGU ª%j*À ï‹¢*€(»pTUÀðÙ‘¦ WcVT·óÖª:±DÁ+:M‚Ñ“¦óΤR}Uu:—½¦ Á¤L.:MWMJ)MGÀ«uš.KtDVÓ …’5]–�‚UuÀâKš.‹‡uª¢+Àï*ªXl²NÓÕ`b-Dª®BgK.G�·ÑÄ‚ÕtΙß ª+ +“”²¢óÀ’l¬ªXb°^Ó`!üh:ðD ¹eµz^ÝÁ§é"°xŸIÕ &_cŸ€Åæ¤QV�a^Ò8Àçl¨zÒHÀ—`¨PÑXÀ—j(ç Ñ€¯ÑPªYã�`tÞiD,°DJ,„•«ê€%TÒ¸ x`A� BOAã‚¶%x‹ÆtK¶:� ø–¬K.`Z� 7”DP.\©j\À¹Ü©qAéb¹g� X7Ää5. Ý@%i\À»�œÕ¸€À»! ¦ª8°Æ`G\ x78›5. ð.–‘׸³jà‡IãøŠñ¥X� ¼ë‹%� ¼ë3¶U— Ö`и€À»>bÚÎ ÞõÑz� ¼ëÉ'� à(ücÕh¼ +‰z8, X� °ßCçƒÆhÌx„%Dð®«Øþ”5 ¶2®Ô¤qAﺂéSuÕ¸ ‹+ëV6.¥ªqAïb£ +Dð.è³h\Ž7ØQ½Æ¼ëvjMÞu¾Z� "xqCÔ¸î`� °¿gẪ®[KѸ ‚wAK^ãìÂÆ0‰ªËŽä4.‹8Tã‚ÞÅö^5.Hà]Cи �w-!ìQuÀŠ×¸q tX¶ÊšF°j¬Sh:ð®u˜aMÞµ6W� x—·M� Rf�/ Aì5.H…LÍ9i\�ª…!ŸªK×Qã‚l!ˆ ,U,”IãÖ¦†Z4.ÈX‚÷d,4.@D`ªCô­¦ÀwQóDŠ€ÉL©Dä˜��Áªš.yS2èZÕè\Ö¸ g2ØŠ�ÆÈ¥LÁ¢×¸o8\Ò¸0 s¤qA®À‚¥¢q¶"S<"sMç€A¶Æˆt¡sNã‚â�Ñ ÆÅd™Éj\€¹$L­éÈržY4.(” ‡Š`™ ÓSª:`Mh\€ùád;j\€äÉ&ÒU,!’Æ¥xN7‹Æ¥‹·^ãø&ç›Yã‚j�ŸÆÕ&Ãa²Æ qè¬Õ¸ º‚|Ó“ÆX—œo� j°È7‘â)붆ÄùfÖ¸ °D„(ªX4UeÝ‚“�o‚�4]_I゚ç›Eã„È7Ñ«G…óͬ€wc3i:ð."Ó¤q.�o"²Õr{ â�ñ™®,œqõÄÀ‚z#öVõÈÀ‚{±[eõÌÀ‚|9GR ™eIê©¶U(�U� ,øñ8a9}’GT î�±g–̃¬X„è~ä³X¸Rl9ûùÇÓo±ùžü×éá³vRÖ„Vš_aøŠéŽˆ¾†ø|ÌóÆÌ$Åð%uD®¤-®‡n Ûÿ;?l�8CGmäE‰Ï°×" [úµÖ I1òÏ{æ„üì:OBΈêy|p:Öi*Ùï´•†õÙu^ ë´‡$9Fœ÷ÛõÎ:¯nWÙï½v½³Îka c¹T.Ú¦“4ì‚Ì-Å@»[aϬòŠ Ì"™Gt˜P&TÏ»)(y�¥Má¯ßœ@¬+ŠåÌ~\ +øˆï6JÏoÞŸ¾øö/_}õæÏ°Ó›‡Óß~gS|ù¹ã¿~ý—¿Dëß·ø-Ëg�H‰¶ú˜¶íÊåY‡ª(Ûek½o욣ÿÑ~Ññô:tÙáí†$úMG=å#VN×hûZ_n±‡ï¶éíÙ]¹�MT¬Â®ÔÇøN”éöø¡cýòïç7ßœ~ÿfëœ-Ãzž?ßWåcüù—pãZo¹qn6\è²�¦OsZù¤Z¸ûÞm÷Ë ÷½Ê‰2~7>}¸]ÿy׎†!ïú¾l1ÜZŠ­Ïp¬»¡Õ¡ù;«çzô�u>5—vþ&5›õy¸¬vÍÂ×…:}b®ûüú¸´É´®Ñä¾ÿ[ó¼§ëÃÙûLQp×ã60|Ûnëi[ÑèË^÷éQæû©¾º³—º�Èqêþ½’ã£w;?å¿÷Õùäü—nr²æ¿;ïy:Ír-Œ(ø\¯øJTø¼ûÆÃÑöXxßg÷åßCxrÅÿ[Ùî—} oW¹ðݱzß;œžË¯p½[üHy&àVÌĸ‘¿«Ä_L;_ÚLüõ_}ýÇ?Í™p˜:DØÖ­ÈÚgš×l ?¬¼[±ÃãÙÂKÙÈ ô®�n¹>Èײ¬'ðxÔmÝX`à¡t”sûŒczÐÚoX>�|»¶ëú*½ÇˆÞI#²Ý<­í¾cchÞ\&þõ—u¬Ôƒgp†­ ö4íÕíhßñѧÛέ¸ìeñ—Öa¥Íx"Ÿª¾«bOˆ·µŽ }ºï�í¤ÀGŽüµö±�†ûíŠ-NϽ‚£”k8ìò—ýƒíÒ}iñ‰eÅ+Øøö†d y¢Òöâ˳ͭoN¿ä¹åùãùZæaÅ;ë,Ÿ»1ʳló¹²øiÃ^׿IG›û^æaâà[wúÜsÝvýÃ:?Q`r¢Ü:‡Îß²{°{Ût¿lmuÌÝroóØ¿ëõ†ÿê¶b^‰}­XŸÂûy˜’[·»›v—|²D)»y»2Ï Ëß´“ßÛ©µçÖuç|u;lùlÅ }ÖJN’|´”œµ®Ÿa¯¢Ø /íîp«�õ¶…m&_I®ê<õG-ów§Íè×¶› í[ëo‹>r¼ÜÆlóæx‘4oÇëIØÿ²åÑ}LHΚÚaßâqWLxg��½b0^$3%FЇ 6ZÙ'ƒn‘Ç B‚e®vX“±•¿¾ßuØ©¿¹›8{²áËÛ-úPML¸ÈJ‹ñá©ÚX|·KJ*ž§jÇdjÄœiµÙQGú܃°ð¤…|»�”b +W,Ô�âþ˜¢ˆ0—DJwH÷êQöäè)´otùÛ­Xžïk‚éRÖÇùTmž7pBð¯gy*«¬Pª7|3Öunöñ‚'ÉÓðÜŸäk|’§[èSLò^`y‘ä½Àò"É{5Ë‹$ïºoþbI^.ÑT¾wº>/ÉË=TüOòŠ•Ü'y#Äë¡mYÏÓëÞŽ"Q»ç»/ïÚ7?�ðpÝÂZØw3í)M¬+dýÇ¥=Çv6a[ nâ(öŽ�N{Žm7_®"tzXÛz«‡Å´†•#œ!P+{-…Ù…ß­¾Áú<ÉpôišácÌ·lÊwÓoÇÝÆÀý/£¼ 7!· ­/¢ïU6l°â]ÖÝ*ÛÙ¨‡�AضßÒÛúeÒЛ6ò}2éªý/§ 7íF»½rª:|G†ðeç‡}Eؾ§*YØàIQoÚ)ìtg*+Ó7-mi.­²jgšWnÛjðY}¬s²Ù‹îHŸŸÇWO¥PüÉÖ^O¤Pß­ÏBäˆÆ¢ í¶dÅ£#oz²ÈiR�µŽ·‡ŸÝîÆqÇæøÐ$¿%d†jæç†´ð‹³R¦¶�攎�l }§�>5ïÄR‹ t÷ßœr<,ôÁr?¶dA'éHÙ­¿·«ù/Ûéíw7x6K�ûŒ} ‡iûpJíy7מy¶©çù¥(g>àyà[4øY¹@®O“k†uç+5Û«d>ŒRëÛe,?pÎ.¯žkùm‚ߟڭP=îko‚°MŒ¸=îÅ�'~)b„CþN1 ×�v´EnÄ¢]vAâŸMÝ—Drm×�3`åŒ{ùèc ×�½?¡ +÷ýŠ}~éX¢frG1�Þ·Šùm*Å„õ* (œ½ál�dÙÙà¬ø¤Ø+„ñ(´¢»)öÔñ8~úv˜.Má€.MçÄô÷²>‹é¼%¼œøØt/}T¥ü‡ÞT·.¢”. TÒØKŽ ¡1OŠèrR„ŸÛÞ4a2‡^Ì? »Kw$åj/§ˆ.'µÜÚZ3•G©2«Önù eºz(ÃðŠì"’ºÌ¯‡kĆþq+æÜa̵-ÂoüAx9E+qŠO1+¥ãä +N#� Úâb§¿Li.ÝTXš]ÆÏòÿ UÄ!eæi —âg�çÕì„׿o�$åi°ip”gYa.—óðYi/W¬RžIw”ÛH…É„<×�Ij�ÇVì†× 1SX·ÏàJ)´º›â8\ùq#ž8ãXªÑŽÎ’îG»Sœw>Jq3îøÁî�w´+|¾ /mc£½˜]¿ôN¦ØÛ±ÛÍ΄p)Lñ¤ÑÇ&î«u°¿¬ªœ‹LÛq/§ŸNm›ó!z>šNÁñ{Jd”åÎÿF™oðû��¿íÆ.û¸·ƒ-üàÖ�XîdüV«r§˜ßrÕ…cÙ¡'AûSìÊ,»7Œ}Ü{Á×4«ÛI콤 ê†V +ã´¡ûáºÞa™xCxÙYq2;7sÃ^.Cµó#Õ.äppY¦.Ì-ù,šÄ�[:´äEE\ÈFq):¬Ù&;¤ìd˜žñ“œŠÀ}‰ Fðe˜:šÛ¬lºËÚ(D„ÀA^ȆÉÉNë�úÅËë£ç}…œú +`é ö!}”Ò10–ÂÓ¥¡]¦íåØs™/úâ�m±öÂræÒ˜¡m.¤� +i™ÕÖQvJ]¶é´oƒ. ³]6ZÌSZ«u³´ÕJyÄSú“´t”³2Œ嬤CYn·ïx#Z +#ŠÒ�ó��%G,YY’µ‡”fÉÐeǾiÛwßmÏb4�¤™ÚY-J¾ˆÿ^²v–:»S­Tÿi'!®ÌWI`£&—ƒíí ¶¤á£ú˜©ˆ£‘g×¹}Vr<ég%²'L‡¡lvüžWÂ#õi…hª¿V¯V­:¤ç@9 +š4g'AíEí�ºv 4.3§Šü^ÏÀAoáבeëôoærûVNŸ´Ÿÿb��5 +endstream +endobj +555 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 554 0 R +/Resources 4 0 R +/Annots [ 556 0 R 557 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +556 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 536.373057 101.433071 517.623057 ] +/BS << +/W 0 +>> +/Dest (cb54-1) +>> +endobj +557 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 299.626036 101.433071 280.876036 ] +/BS << +/W 0 +>> +/Dest (cb55-1) +>> +endobj +558 0 obj +<< +/Filter /FlateDecode +/Length 4808 +>> +stream +xœÝ][‹ìÈ‘~¯_Qφ‘óy30ï‚?Îb–eN÷™¶1=†ñ>ìßß/$åEY¡KU×ëÌiút)"/¡Ì/¿Œ©$}UøùNã¿Hzˆ1O×ן.?_Ԝ¿±Äâ`Tÿ¿Á]µ¢08�|tןX`Ã’3Á_ß/ø¯;l‹¿_þò›Ë?–uôÕ )y£ÝõŸ?²ŠìbÊ ª•ÒVP97„`œT^8Å”$Ìp� ݪÌ �¤‚dLTfX +ÚÞªÌ0A“¤‚:¹ ¨´‚Ú(%ê`ˆ"²FÐi7x º—tF>&“D]€N#é¬| í´¤Kƒ÷ÞEIG°Å%¥%�ƒ-N)I[ÈÆ é£Äàø;ª‘¸À�wµÅN-éÀ»Ú$%q�ïÂopƒ† qö·A+@WÔ¥A¥%.pà]Ð’‘¸»ð "˜DÔ…@Ò€Œ?TâÞÅöž$.ðà]嬕¸ÀƒwÁíu°ÅF#qüè°l…5 guPL!éÀ»Jc†%xW©�$.ðà]Þ6%.ð�&J\xÁFâiH!x‰ |RÐÁåu~À±“¸ ((KÔÁ +$që!Ù%.¶Xc$.¶Àe�¸Á�4¼o1<€-€‹l�§(q˜lˆ‰Hâ‚à<â1Œª¤ófˆt-ê"t:H\ ØŠµÄˆ¥†ˆE/q~`wIâ˜�&‰ B‚-X*`+¢�g.é4l�“-q<]è´–¸ ØoPâ‚h"¢L¯$.À�XC-éHqœ%.ˆäv%.À2A¤ ¦u°4!q懃m'q‚›sDl±Ž$.ˆÑp¸%.ˆ¶e$.69Þ $[àñI\�”ØM–¸4�R$o’¸ë’ãÍ(qA² +ñ&Bè¥Á°—-ÖpeÆó¢¶[Ä e½hé½Užn©Æ$a†çÖö‹•(Ù¸Wx×:Ëÿ®·vŒD\.ô°Œáˆ#‚�=ZéÉFÛÜ?eÜ=Ç­Ø´Ú]ÁÖÐòŽÚ˜|g•g`@! †‡åQÊ&Ã;h±„¢Eáߺ€œæî§¼w9ÔÖe»±�ÆØ¨ë§Ÿ.¿ýÓ_~øáÓ¢ÛOo—ÿþ¶-£àáÿ�Ægz�þ:=É���=þþÏõÓ7úûªÄ¡É²?î‘€B‹ŠâÜMbÙ÷Û „þû• +· º·½ÊØë8Ž÷^²f¯2;¢=m„Êô½çÑšOg¥�&Çô89oåÑ¡ç¦òu]Œ£GMwídùΜ¹®K·²Ýs‡/ÆŽ*oÚ÷�:gk0nð[uâ)SŽ·ïg�:ÁK„§�ðg“.Í3°ÙÅ>Õ­�W�Ÿ»ò×f7Óœ¸vØÉü¸Ðþëß~øý¿ÿG]h&¢Ån•{À/\wž>‡É +ë¦cÇ:–¿q™yäj§†Sž‰“ ]§ã‚þò}¶yA_pÅ29'U4ìFmRÞÁ:!é_‚ñøÒÊå©ÏÓÜ�«*¬¬&êVâÛúŠÌm8%·UÚÌrÓЬjVô[ÇŸ—”œÛaûGÌvý°l,—Û�Ü.™ `¼g½¬gÍ„Jþüœq[A'¢üi\œÔmt«stV³AKèüU£ê8›Ž—úÖÙ´0e˜˜Ò¹©—›òH3‹ÆÑš[&«%ƒî:ÜbRC©°"Â8ÄÆ‰£ÃM¬¬s¬&5Þnaµø¦ûÛ`D£Qíæ¿ü¦cQÇŸí¬ûÜ•ù2ÿ�åÆÌúüûeþ›š²/_Û¿j’º>{Æ ÛŒhUĨƒ(;Vç$(«fƒ½·ñm‰.š÷¡ÂŒy¤_VüRg‰3¢É6(˳—³B~9kc™;$¼N±Lî«ßëÆþÌzÛ£n™mZh§cÛ1dëw‡·ã}�cÚ0=…^¿‚Ô”îGê±:gCêxsÃR„hÝñJÖ©[ÎØäš×%zÜÕͶë�qƒ×Ô}]Ú7Ú‘‘‘W–žýi%Íç7òºoŽm÷ÙÌuÒÊÊÓõ<Êy¿6>FÏŸ GF¦5…ùò= ð;ÈŸ�ïž�,]Ë—Õ –}U4¯ °ú~äÌ yFÌ6 +�Õ9 +�ù‹ef¨AÂg½T]IHí¹ODV?“-—ÞÑ_îctE_¦úSd²l¿÷‹Ûþl\·uÁ“B’–v|HÛúƒ|«C/Oo#ïX�Ó!oLJìg2,Gú}ÍÌÞìd+Ÿ%ï¿ô#D 7¼#íì±ûmÛŸ#Óõ?ó¡Ñ�Wò‹¯Úô6>¢6Ç2–ëœ ½´ãWæ|[þ-¼ò¹›Ù&jÙâ»-_+FnsS7ÞÈËì3 >mñ4V2•wErköæ:»Q�ŒXª¾ãaĬs:Änû›§ñ?óÞ½}ïæžU±(OÛ\Kt °Îé�»í£þÚ2:Oã쯉îŒÖÝÕ·‚æpܰÎéмí÷Þø£;„´;Äl¬Œ6;”g˜W‹ëüÕ1_�?³ìåÖ¶Ê‘÷µ[Vë·6>)9Qéñ¦äm4«s64ºm?víza˹<3‰§Ë}³»©=x½UÊ�Ý ?{o ÒdÖÆrÚ—ddºüÕƒuN‡ÌõÉ»öSPuWîñ¾áÙ¼ŸÔ6¹Qþ"Çx+æj�Õ9jwò©õ ïö·žp­Š:]Ïkhí=–Ì¥Ýy–,ÖƒÞ‡ÔY�7ùâ„>píþ`�Ó!t'ïzðºQñ º²GÒ˜2Êøjâ ¿äˈ&µ¼•¹‹ó{—~:T÷wm,®°ù^4öw�´þnËÞ¶/M½®–ºêsRrüNâ/öl£öX�³¡Öïø©JFK»Z½]F½M¾«áßyVŒßžåõ{„nùoë.˜Â±ý5{{¥b-+zíµ§yåŽåºè²_U{WH½¹Ÿ/Ö9òv®ÓwñíÍZfvqu°ß]û;R𫆦�‡×²å=bïɮӒ¾ÙŒÚ +‚ÿ2ÄA[â/Ÿì øX�Ó!x'úŸòºîÉ[.®oµ9�°´© ãË„‚ñ÷WOËý§Ì·ÌÓ¯Ýyî ¬_%{÷Šú&wy4":Xçtè;æoî]k')Jé}')‹~�?ÖøŠßÏ}d%¯ ´úŠp„†ÈˆÚ»å`�³¡4ìø—G£Žö*emôÈÆQQPå^Ì…Ÿ–(¨Yëf¦;.k³à{wksÿ½Fëœnvúp±Õ•µ:F87ï; g²9b0¬{™Ž%×ÉFÖ[öÎ_çv_šzTë·}•oY´e?O}pÀPÚõ³-™¸Nœ�7F<Ï8_íÕæ£ø:VçtøÚñ°�ãf®îšc?á‚Yåis|ä<:;úãüm¡ÒÎü}ÅѶ×ÓcÄ»ÂXÜy°Îéµs•8>6³œßø–Ùçcö¯ *Ý ¬s6TÅ�»ÿżs÷ì>�oæµãDz^ëœ);W_…ï#?Ý7^¹C»¿/êH^Vúf‰äÕµ×’JÄÕäò]7N¯Øv /|ו“œ¯}àÞÖH÷ß�}°Îéкã}ÅþC½÷ÉÌÝqwϘŸè˵O&èóàÍ÷¶vyµÉlý¾ÕÁ:§CêN6ìá<£zün’'fÞ¾½¬Ù +"¸ð`�³!2û&ˇîF¾çŠÂ×\·¿-Nd÷Ö9‚w|Õ'ÝOÿág<ù;T«6òÏ‚ðô6WZ�~à`�Ó¡wÇwý†¿å÷”UóUïZ\AãyǃuN‡Æÿtånè›o}¸Ê5%jè�ð¯¼7µ¿‹{|š¤V7÷K};»‚ܾ‘}°ÎÙ�«Õ±K¸éôkC´»¡Lº1ìû‡{3�Ð�S_æ–tÿñMò; +m¼ÂY¦ø±þâÓcýœ³ž¯êçûŸµVå‰J&?qÌJªéÞ”2j|>"ýX§j|>¢ŸÊóóyˆYn¸¬Ÿ~Ë“hýÜN̰šûc–ãúœCšŸd»hßÍ}7öÐü¬Ær.ŸÃÍ´ý|ñãë(ôøJ"åã  ¿³ðêiàÔ}àÇ~ò«,,éòÅ~ÐvÖ©-[¬wÅÚªFèn…ªé®Š e{4¿§ �¯Âbz;tº™þ\Ö„f:·„¯tk{é»(åW¬å¦òèUd¶1*©Ë%Ë„P™'Aôz„ß©Ü4a2‹¾™5~QÍ$ŒHTÊ¥\N½^Ärsk®ÌT(¥b­šòÈWS*Ôm,/ÈÆ1š¥�ßÞÚ¬eóÇ¥Øó ä¹V±Á�¹¾^••XÅï„Ò®r…rz­Ð6íqT/UÊW�§OXšYƯùàÿ'ªpEÊÌ3~ÐT ůê©Gµ^›E¼¤Vî ë�4šB-Û —¡`¶/•PžI·”.#¶�6CÖÈCÊæ1IòXŠuA]3…åñ)\Ù +U6ÝU±+P~_ˆ«�®,U§Jg^7pw¥Ý*ö…;ß[q(3®ù½KÅÞÒnƒù,|76êÅ ý˜;©b£ÊnW;k„Õ0�BW}ÅyµvâwÉæ�u‘I;îëåo—q›CXaøUÞj~�`ëeéëÿ¡Ìñû÷ ]ÿ”ß[3íãF¶0…[âv'ãCǃb~ m–eÓ 5´_Å:Ö².£¡ìãÆ4|MµºªÄžKê ºh[¡«c؈M�®Ñ¶·!|íF±82�›ºaO‡6Ÿ¿„ßx”­ÂA{:8ŒUgë–|mšÄ­[:´dšŠ8hÅaÓaª–-Ìd@¶�”¡gû©� +Ë}5�Á‡¶ê¨n³mÓY6žES.°mÚ†I·�¦…=‚Ñ/¯Ïûl²Ï+€¥…Ú‹ô½•–ci!> +endobj +560 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 797.673057 101.433071 778.923057 ] +/BS << +/W 0 +>> +/Dest (cb56-1) +>> +endobj +561 0 obj +<< +/Filter /FlateDecode +/Length 4950 +>> +stream +xœÝ]]�äºq}ï_ÑÏ®Ìï 0p $øÁÀFäa§÷Ž cn€ë<äïç%’%ª¤VÏÎnÚw³ÓªâG±xxX¤(µ¾*üü ñ_rzJ)Çà®·Ÿ/¿\Խ¿’buQÔÂoôW­\œ¼Î!ùëÏ$°qŠÙ›®oü7\òäo—?ÿæòßë<új¦œƒÑþú÷ŸHåìSŒÊ ª •ÒVPy?Åh|TAOhbÎ’ +føèŒÛª"Ìp9yI3œ1IP%˜a]Ôv«Ê0ÃDí$ÌÐÙGA¥ìÐF)QC”sÖ:í§§IgôR6YÔEèt4’ÎÚ)D§½–ty +!ø$élñYiIça‹×Î)I[œMQÒØbƒU¢¶˜­¤‹°ÅÀ;YÐ%Øt%Q[TPZÒe;ùœœu:•bÚêŒò“OÖ*I§õä�M+ê0¢ÐI! +:[‚òYÔÁo•‘t¶8üH:ð„·1%a´ÝVY-éâõv'I¶>œçÃm� %,šbòzA’‘÷lç÷z†Ã¶^�XÀŒ�,{6ÓmÛHÉÔ ¥C1)€‡31Q𠥩Ÿ™ü`–4˜*AD�ÆfC3(hkåV‰ÿé2]¬˜÷éÛ%31�ÆähüõÓÏ—ßþñÏ?þøéß�ÀO¯—ÿü'öûÝšþÆõ_ï—ë´\‡õ_0b�Evï•Ó¤3¤×=}K³ÔAºfÇë’y,"õŠÏ i^¾"?å5C;â6¯Wëò±ä*í,mý?û´ã£jçK×mü<´A«ßý×õÓ.ÿüi ¾²jZÀG‹«TâC¼žËò5xý0Íù¦ŸYw×®¬.´’�¸œCÔ¾Ìù­géÔPßP¥7'ìâ0ra Ó1Oµµ@ÎöÖ´ˆŽÝí¸mÔ¦|÷Êz™‡¯d[«£–͆ð\é.Ó£x=™çÙ‹•þ!bƒÜ3žõ°ã=ùºNO=H·òZþÚÓ•€I÷Ó€ž‘¤8AŽå ¤Eå�$_m:SWiO%R»F�ßóE–ˆð Uv #\Ù4ÛN¥`³J†–JÇh>—çéÐìù·ñÈQOÖ[d”Þ02g­zÜ år>¬ˆs½‡i^X�˜€_;üV9¸]#½Îóß?Æ5šx˜óíGòúü;¸ô\ž§Cß� õ×Èsw9é:G®l¶df§0âj;[½·oˆd’ž\u�ÌótH¾Çþ‘¼‡¦Î9½Íz.g‡�~àùGŸ½Ì¨ul4Œ£¨/÷dôŸÒa(L$ázOæy6ôšã˜vÓ[ꥡ‡ÏŒÃJ‡flÎ[Žzé<³â°Š6³S棈¿g»ù€v.#À}a#•¡[wëÚA)‹;O£ô\ž§Céq¬º‹¸º½S=ýÂR¹¡r€¤ŠÖ‚L7Ç•«ú�qñ¦Þ%âÚû[ÍÞ=?í •Å¨ÊMF»äÜ=¤žËótH=Žk¿vöþÞ¨k›¦ud�(Ô °òš­~í#±=q]æÍ4݆öê^}ÇìÉÎÅ'ó<’�c\+¬g7÷„ž²g‡{l{\X˸Բۮ›ûrŽÕ¡‡ú‡U´a¼õ=ðùÑh,uÚmÞÓȘ~Ç.ïÉT´ßËgu;—z(ÏmF�KÓo“WtzÜÒÓõM¾¶…êXü†rô—m9ÁÒÑzz|s[Nó»[Ê +‡v`ZÞ±Cõ¶Öö\Ì£^°�ã Ê™�…²g<÷2×øìýA~&F¢Ãqs,6ùÊ<óçÚV²ÇÅž¶´éïÖÿµß…v Ô4 ó.ä’>Ôý®¥<³I³tKÖ]Å¿ûÑ7 Cz�ÙÒžXËÜÖ¯k¾†cÙWz¹KÕÆM£Ìc?4›k[õ»î~çœ2G*C¿íôóÌô‡~Š£Ÿv–¾,~x]ûbÍkKZŽ[ʉóÒœv5†üÀ5£â\®Z0WËðiÍÍïnÉSû—û³¥Yì©\åë¸I‡þÊ›ñ¼áÊ÷ñ¤ÖGõ¬^×õÎ\¹ë•/ÆØ,г&¶¶¦Ç‰OÅf'ó¼ëÈûe¾ÙKϬy�!,ß²$8Œ‹2½Ü^´ljž;a·Â&•éQÑ¡ÂJ¿|Ûšº»ÞLÞ-ÑØ<ù€‹(”è_ïåv©L٣ϤÜü¨m Eí]™òÊçƒÝñÐ÷:Žp·õΖ§éIªwxžž¡‡ëB”Ûy/7õ8Ú�ó¼K£,9„ûØôyé…Ã:ÆP\䤨=ÐÞ bðÝNë³`aÀÙ½ lôл(2=õ=TZFöéE§+�yzÎ÷̡͓yždAÚ¸/zÄ}ê3[ô�‹¼:¢¾Ûí5õð $õ¹NÙëòû´¾]änŽÃ�"ÒÍB¤™QY–$â·tÒ#ž3ÒLJSZž>Fç¹îàZ¢Û+bN>™çIPÖͦ÷d0â׎6øù!µñ ÚÞá/þà™t|ç¹– ³Ã£G§HÙAjŽ�#õ\žgCjÖ‡|øµ¼Þ}pm||rç®xDý¶¶ïô#Eu$-í+¼ص>›%OÞyº·£µ›=A}tûq™ÀTÛ´ ý ÂdžÌótÈ´‡ú5Ír„­n󼟟�ï>Yº§ßÖ{Gð +{ìç¼™”w�sŒÂsyž…çâÅÖ3ì×Þ±“ÇÞ°å>Y;Ç. Ò¿ó£ò6íÛºâIa·Ö݉!3�O¢9™çé�w'†|çû< +§�3ÙÎg)úoõ«… ïI�ݯÇñœ3CýõaŽáœÿ¯w|d#ž}ÌüdžgC¯VwËñLãøžŒÏC×ò§�ÃåùM/åî<»~Y× û§åMeÑ£w½¶å “A±Ÿ5œÞMr–uÓlû"§«^žµÞWC‘ô6] З#½ÕO¼G–7Õ›ÄYõCCKÜnêÎ[½YL]V ¡æÐ?õî(»pËMßrc7ÏrÓ‹¨~¿#¨~Ó¸tíRÝ™¡ü�±›ÿ­üzÜٳºaž—½ Ò†M·ýr åm”º¼‘X…4iC_Yp n¢–‘6—éM–ÖéÚMº8V_wr–/zø¥¥Z¾ûAÑë éU ¥ùÅ’þ—ÒÁ?_tvù¿œJ*ïiWEœL½èâ· ½§ß bçúѦ;b.U+ËévRªÊn Ú8å1¥õ“Z>öãT´…84¾¶†òûš�ÞŸèTMdËçŠ!r½SëÕ¤1}×Ašìrš)tS· {�ާíöŒwÅÚ*&ô[¡bÕu±qÕMïÆm® ]ØLç®Ó¬ûkZYw oTkGé›(¥7¬×¢ªw�j2ËŒÊMêkÊÖ!®õ“ º]áªíЙMÏz�ÞS; S’kérM'ˆn1ÝRšo=[ªÔ³æêùnJ‡:�:Û—ÝØ‘ÃH_ÞÂÆˆ²õãZL§ÚZ_«Äpc6ÂÛÅ»6»øíâ£�Úw®P¾B� -+·‰“êxéÒ˜ª«04«ŒÞòIÿÏTá›”˜§|ЮAŠÞÔÛ¯z%46›xí$.�uœäíbOËÜ¥cl˜åþÒI é‰t[êæ±•”¹ŒÉc®æI5òX‹uC]…Uÿ4®äBU�@u]ì”ßVân§oCÕ«VYРÛÅ¡qçÇÖãš^»Üìmå2ÌWá­LlnôS­¤‹�j³]¯Œ »a ….î4úVÄu´6v*ï!Y>öA&͸·Ë_/eš3Ö:±¬¦oàQ–¾þ/Òü¿»¸ëëkkçyܨƦqëJÌg2úΙtRLßAS…mØ0¡qŒö»X§žÖW4´yܯ׮gW�ØkJÝT7-úîC&6 ºF[æ ¼ ^l�Ì×öMŸ°çK[G'Ðè…ÇÕ*\ðæà2u�íSò•‰+JÚ§th�aqÁ Å%«0wËVf y%Íõd¿ã]a©.vÁº´]çú4Ë‹®²Ò +–!°å¼`§y¥ye�`ô»‡×W÷ûbr¨#€¤�Ú›ô�K[ÃHÚO–ÚrÖ—mαåðV¼ÝC­,ËÆžmAN=´p« ŽQ&M=Û’ÀóJ]•­*­E£ ÈT•µcµ),Ùª[J‹“è¥ØbŠ.ý+÷´ç½Òœèy¯„MZ*·Îx-Z²-òα·Nõ”-–L‚,ðÜMêzJ[eۺݺî:Û^Y3\7$ôÈTõl~“ò]ü÷ž±3çv¤Tõ§ì„èÔ_ôމÚéh�-ßݧRàG_¿]b[#ç9Þ+ÙîˆÔ½^ºcrÖª¨é[eÞ È÷¬¨ú �r¶¬Ä&=æa+¨ÓœÚ앯á*û˜eC¨]FZ*Ò·îY +z}YPTZ~vŒnïÆÕöIùù?‡iEL +endstream +endobj +562 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 561 0 R +/Resources 4 0 R +/Annots [ 563 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +563 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 348.873057 101.433071 330.123057 ] +/BS << +/W 0 +>> +/Dest (cb59-1) +>> +endobj +564 0 obj +<< +/Filter /FlateDecode +/Length 4793 +>> +stream +xœí][¯ä8~ï_ÑÏH|)ß$„´H€âa¥A!ÎôH ü}>§c»â®\ºûÌ!#1G=Ý©ò¥bþ\®8‰>+ü}£ñ_$=Ę‚§óåÇÓO'5§ðoL1;ÕßáÜY+ +ƒÓÉGwþ1 lBr&øóÛ ÿu‡<ùÛéO?;ýsžGŸÍ�’7Ú�ÿõCV‘B A9A• RÚ +*熌ó‚Ê맘’¤‚.�¡[U€”¢“T0ƒŒ‰‚* KAÛ[U‚&h’T0C'•V°C¥D QDÖ:í�F÷’ÎèÁÇd’¨ Ðé`$�µƒ¤�–tiðÞ»(鶸¤´¤s°Åi"%é` Ù$�‡-Ö[%ê`‹‰ÁJº[ Z' º[€®(ê`‹òJKºd—"‘¨KЩâ­Î(7¸h­’tZØ´¢# +�䃠3°Å+—DlqVIga áOÒ�'œ 1 +£ÕäÑm•Õ’ÎÁc‰:؂ΗÀxØ¢‚—(#hȼ$q€ a dH"í@‘¢Ä&¦�B° ˜äò)H<`•†Îh‰¬‚-޼ÄVÃÂÈu°Å&’¸ÀØ‚X [ Y‰ ,Ø–€‰ ,è–TÒXð-)í%.° \˜©$.°`\=I\`A¹€R’¸À‚s-¸Sâ ÒÅpX°®uÞH\`A»–¢—¸À‚w-i%q�w­ENQ[`‰ ÀŽƒÕÑJ\@à]«U�¸€À»FFâôêz‰ €•ÁĨ$. 𮉊$. ð® ˜D]0­ÄÞ5§ ÍÜà]㔑¸€À»†Œ—¸@À?JôÀ» '»°+qæ{茕¸… n‰Ä¼«¦?aLƒ­“—¸À�wuD÷‰º4è€Æ-ZyÐÞ'‰ x••¸À�wAŸQâpü€ÕH\àÀ»Úb¦–tà]m’’¸À�wá78‰ ‡AÃ�¸óÛ  +êÒ RŒ8ð.hÉH\€YxPL"ê i‰ @ƃ‚*q�ïbzOxð®rÖJ\àÁ»Šàöˆ:Øb£‘¸~ t¶Â˜†³:(¦�tà]¥ÑÃ’¼«THxðnž6%.ð! L”¸ð‚�Ä>Ò�Bðø¤ ƒË'êü€c'qAP8P–¨ƒ-Hâ8ÖC²)J\ l±ÆH\ l�Ë q<‚!ixßâò¶.âú€` ‰ ’òCv“%.�C§”ÄIG¬7 I\€q™×›Qâ‚dÖ›Xâ ã6YŸ×›Aâ‚D°ÅÁEu°NSÆ-8 ëM°“¤ó°Å$’¸ yŸ×›Qâ¸Xo£C1¯7ƒ.ïºf’tà]x¦^â`½ ÏVZÛ+¯ ðÏdeÌ+Î(F ¨×anC +Ü‹Ù*ˆ1òÍk$1h3±²Œ^Œ`Z…R+1l À¿ðÇ膮Ñ'¢ò€CÀœC>É„aAðî뚣%³ É®ñ±ýíôóL¾ç¿ýûôú³1RVþ4„15Á¿Â00 Ýíà}kœ¾õ–És&©l! |$O6"¤f¤-NA·l$¦¿üï|ûcf9 ÿn¬ÞÖêfñkõÄIÁð"–¯½ÅwfyGƒG˜m=ÒØd2;rð+ÍÿêÓ @�¬¸Æ@ë!3ó%ÃdÜùÓ�§ŸÿáOß~ûé�€Ñ§×Ó_~¡Å_~£ñíÂõ›üõ;Gèè‡I7¥!7}—<Ó±ÓB9嘕W~—ozÝ_ªëqf’wõh=å·]ýêú ×t,c,§?bõvv×óùÜtD² ¥Ü\uçH—.­neÏÒS‘ýò¯çO¿;ýúÓŒ£‡z£Í8¡”Yj¿û²<ƒß/[,w×`›X“¾Î›Ö¨ R_´K·Wø^ºòz»’ »…v�êæÐ“¡œ£ý0s KR~Ë;ó ÌXq­¡¹Smý×ùw!=÷ÂzÚÎ{¦"fedÐ ûÚh)H¨èêóáäYdŸomky_¹u´.«¶�&óå$¥Çeä:÷å9i•[o�UZ˜!+÷LFŽý|í ënÇ}Em?U#½‰Û½ËQ×÷n©£çÉÊ——Î=ç..¿Aq1^Ò„|³9èeJ÷Ô¼´€Ì|Ö�y‡Ì gõ�gíwAU™ý.lWsÌ�ü´cx4ïgµÍí¤z3Q·…Ú}y‡Úu_õißðn‹ÍÖkþãeŽ É­ºžÿ–ÐÚ{,…K»ó,¶?ê}Hõ×Ñ©úó‘jš/¹{-µ3ÏÑjÖýÏ=³›á>g7CöHÊ\8®ŠrŒ”~)=VMSú¾ü‚Œ¡µžÕ¡Ùq�Í÷¢±ò}^ŸY[ö¶}ÏòõÈ�y+ ¨m>'%7À金]Gí¾<‡C톟ªd´ð™Ðêõ4êõ껚ü™zÅøõ^¦¾×Vø¯ø…•“JYŸǾÌmÖ¨_ÛŽ÷:Ÿ¼–/y—†¢2rÇtÝê²U­¾ä¹ør_žÃ!oÝí×·7c]èÙ½¾ôÀ?j5[Ÿ/ùr%�^ð*ŽåS>ë5- ˜ù—!X¾¿qÚ™çpÞˆŸ>áSîA×=qË’ÖL�:ªÂÜ¦ŠŽï¯(?¯jõ²ùe^–ÑS9nâÛÌÓ—î<7PÖ�’6Èè³,v¹wE´3ÏÑÐg÷ù›7HèfV’V)½ï$EÑïñǘ¯øõñÜ3#y¥ÍW„#4ÄŒ(½…Ò}y‡Ò ÿr廙_¢ìV=²G„åUQ˜>ÝÌ]‘Òùh³žî¸ŒGÁ[}¡w¹?–7ÂE³Ý»ûò®wwúp±kÕ…±:®&pn&¯|›Yr$;¯LÖ}¾Kºœ§¬0ŠÞfïü2•û™å£–Ÿ×5®“óŒÅÓ¾\ëÈ †Z®Ÿl)œ�óÄ+òÆÏ{œ‡Œ/~±y/¾öå9¾6<¬Gû˜õÕ]}쯸Ȭòn}¼ç<:;úãñ|,+¿­™l»L˜W¼2c‘ºŸ±væ9¢hã*q|¬gs|ãkfŸçì_@•½%¸3ÏáPµîåü¯yçîÞ}7¾™FÔ†?LD½væ9R6®¾²¸âó�»¸çÒ¾¨=qÙY4­_q2¯Ž_Kª+.S(»nœ^°mG\ø®+'%^»�[@+ó¥öîØ™çphÝð¿>p ÿÅ�pïÞ‚=‘¹;v÷Œñ‰>Ý‹ºÝÑ_3›EÒd¤:ÙÊ»¿ùŒªõ�Øûò ©n#öpœQ=¾›ä#o__Ôl‘ìÜ™çpˆÜð ßc7ò=W>rô×ھʸîíÌs8oøªï´Ÿ^BË]û¯®Û�{_/ï‡àãí +\CøzÙ•Ö½÷ìÌs8ônø®yÇÈG!ô°»e4úâŽ;ó �~Ã?]Ø }sׇk\SW þ—{Sû]Üy%3rY·_êëáØäÚûc;ó¹û®à>|ÃéG#´ÛO&í {~}Æß^�ôíÔ§ÙâÜb­;ó¹ûü×Iêï“글ï�v?KqÏ]ŸíŸ—8¨Û3:FäsŒöUÝÜÃuw~¾+§�$±¼ý~þ�½q©\çÞ™çpHÝðU_ß±´¢eœøÀ½šOÝa¸Ã®µû²úøì€ð€�»3Ïáмîã>»šZ}¨ +ïñ…«¶³Y˜Z/ÝÕ2ûy¾fÿrÝ{�¿ïÞùÅFòúˆ³îÌs8ô}ìÙ‡à¹{"U+è\}BÇÚ.ö/{X@òÏÚ™çpH~.æúU"ù=bŒÓgO͸~xß<ßfÓƒ}w&.< ‹ù§{¯ØîÌs4ôÆûž ôÔ½ª=Gñ]!œÃ +ÚÌB™÷"~Ëö;w܈6M#€¾g#•¡û±}^ (}`_ÁÎ<‡C鯾‚{îŽÞ¸WVz’ĸ·³¿sú£Ÿ€ñ_9ˆÌGU4Œ� Øz¶ÀÎ<‡Cêλƒþå@ÞaÈc»nÞFâù<õÜ®´>ƒÝ™çphÝxÂ��÷@E&ß«©Õ<®ZfÀ…({í™ÎèQ›÷ÕÏv Æyºqïj*~Ýë<ÿ :&ÔŒ±ß…ØBYªÜspLj3Œ¶ÑæÀΓ{BÝõ³jÿÂ](é�˜ìήÖ³7ׄÙ³Ý5¶%.,eu\jÙ•×›ërÄêØx"“hCõ»¿Wbe4ŽuÚÛ¼3¦‘1ý@”wgžÃazç�_lgA¹×¯b�û…Q7úºú#îZffv‰)oîÍ_éç¥kÉK÷¬HW¥òîg×yÅk³QïÏH˜ž=ŽùC#V»ög~ž2~ÙÞX�_ª¦ÑÎ[øÝ—çpøÝˆí +ø�µóÊ=Xu§KZÀ +÷Mû;cvø¶ïý¤9bØ­c �¯°;.åX�å¿›Þýßi;¾³É+ö*‘ +£Í$¨¹}ñHy}Ç9ÿõ°ð<‰!¿ôׯ3œLJ!¿''ÃàÏ¿ùöW¿ý}ƒÁx«ðå:œr³—ÇSj}½ô˜efªýøiÊ»&7gž.[—åïëÐÌÝqmúqëIN믟±¬é÷XN,ð™êËÛTrþ¼L +Wý¬|7ÕÍìËpì\9‡›nûéäÇ÷;éñÊÇA›üà³§!³wHçüN©ˆé[—nÒcÃêóBÎñÕÉ?ÕTÓÛ”U~Áb~¹ÖõUËì`JÿÓØÁ?žt¢!·À×7ŸªQM9hâ·S~ó- b¢ÁìgáôSÕ²H—„Uv†!õ)­+o¦É|Ø„ÓOãÊÙäü®dËo$"UÙñ�<׊!rz}+Îg¯=‰óÛƒã`§#_Mq¾Ø a+�xÚV`˸)ÖV1¡»*V]*öèü¶¹Út¾ «é¼é4ëþ’ÖÖ�kÂË ÕÚ^ú&Jó;KKQ¥u�ª2ËŒJUêJÊÚ!TûI]N‚ðUŠ&tfÕ³^Ëo~» +cÕt©¤D—“˜n*ÍÕž +5UlYSiùfJƒº�µáÙØF“4äס³1¢lù9ûÜ¥¯Ud¸17ÂËÉQ‰MüvrAHíW(W Ç…–•[ÅQ5¼4i~ÀÇõ†f‘å÷fåÿ¯Táª43ÏøCS…T~÷];j•ä±YÅóFâr_Y‡¤ÐZZÖ\:„ŠYÞ^:*!}&Ýšº¶ØLÊšŒÉC*æe’ªä1늺*ÎVÚ§r%ªbªkbW¡ü67;]ª{©ÌkwWËmb_¹ó�‹Cíq�_dXí­å2ÌáeœØ¨gèÇRIUg»V6Ã@ +MÜhôm—ÑZÙi|ýô³ 2iƽœþ~§9c�Iøá­Îïåå^–>ÿi~‡Ï?NtþCyÜu7ª²…©Ü:ó™,¿Å=îç·ºa6LhˆÑ~ëØÒº‚†:�ÃøšZvÕˆ½¤Ô•AuÕr¡kmÈĦB×hËZÆ­/]+VGæÙ¾iöõЖ“C56¿B°X…~:8ŒMgÛ”|fEâ('mS:´dXFðBqÈ*LͲ™™�¼’ÚôÙ~â]as]쀹ùÐ6µi–]dãY°$p�-?à“敦™=‚ѯ§û}2Ù—�¥•Ú«ô�Kë‰ei%> +endobj +566 0 obj +<< +/Filter /FlateDecode +/Length 5021 +>> +stream +xœÝ]]‹$»‘}¯_Qφ›Ö÷˜ ×°6xñƒa³?L×LÛ,}®÷aÿþžP¦¤HeTfVO{(ïúve„>B¡££�”­ÒW…?hü/9=¥”cp×ÛÏ—_.jŠ^á¿’bõPÔÂOôW­\œ¼Î!ùëÏ$°qŠÙ›®oüoxäÉß.þÕå¿×yôÕL9£ýõ_IåìSŒÊ ª •ÒVPy?Åh|TAOhbÎ’ +føèŒÛª"Ìp9yI3œ1IP%˜a]Ôv«Ê0ÃDí$ÌÐÙGA¥ìÐF)QC”sÖ:í§§IgôR6YÔEèt4’ÎÚ)D§½–ty +!ø$élñYiIça‹×Î)I[œMQÒØbƒU¢¶˜­¤‹°ÅÀ;YÐ%Øt%Q[TPZÒe;ùœœu:•bÚêŒò“OÖ*I§õä�M+ê0¢ÐI! +:[‚òYÔÁo•‘t¶8ü“tà ocJÂh54º­²ZÒyØbLt¢¶ ó%0¶¨$ +Àšˆ—$01N.'‘€IvrÉ%‰LÊ“‹ÑJ4`²Ÿ\ÈQâ«4tFKD`lñ.HL`5lq¹¢¶Øì$.°¶ �ÄÖÂã¬Äl뀉 ,èÖ©¬%.°à[§t�¸À‚pa¦’¸À‚qm +Nâ Ê”²ÄœkÁ�X�.†{”¸À‚u­Fâ Úµ.‰ ,x×:­$.pà]k‘SÔÁXâ°ãdu²8ð®Õ*J\àÀ»FFâôê‰ €•ɤ¤$.pà]“”“¸À�wMÄ êâ„1h%.pà]ãÑiæï¯ŒÄ¼kœ (øG‰Ñxâåp¶€`%.À|�± °É ,‘¸ÀƒwuÆô'Œi°Õ¤Sxð®Nè>Q—'áqaÜÂË“!K\àÁ»˜¨¬Ä¼ úL€ã'̨FâÞÕ3µ¤ïj“•ÁK\8L€Ä˜ß&­]Q—'•S’¸ÀƒwAKFâÌ“J`Q'IK\2žâP‰ xÓ{–¸ €w•·Vâ‚ÞUa�¨ƒ-6‰ ×@‡a+Œi«“2` +IÞU=,éÀ»JÅ,qAïÒ´)qAˆ$0Iâ8! +6„ä¦c�¸ dB>Q&<{‰ ¢‚Àƒ²DlqÑI\€ÀzÊ6'‰ ¢�-Ö‰ ¢�-$.@D0e�è[\ÀÀE\8Ø‚HQâ0Ù”²sD°ƒW%]0SŠ kQ— ÓQâ‚Ý„©XK\€µÔ”0è%.ÁO.I\3 ÓNₘa †ŠÄ˜Š¦d™K: [dK\€H:­%.H¶ ”¸ ™„UfP`†ÆZ®–tNÑ:3I\�\˜(T”¸Ã+M0¥¨ƒ-  ‰ Ð?´Øö`ñƒÅ&–9¢¶Xï$.HÉÐr3I\�l1ÊH\lÒz3J\�lAÄ'qAVa¢0YâÐ8tJI\�uÂzÓ8‰ 0.i½™$.ÈVa½‰%ž0n³ ´ÞŒd[ÜVˆ…=¢7^/"YÑÊÃÔ‡öYúïºýp`&¸Q¨qúä&[{6Ó½…ôo?]Õöƒè� «X¾#ÐÐ&]?ý|ùõþî§ßþþßÑ{Ÿ^/ù Øßá£GûпY>“,S\ +úI³ÜëåwX~W¹WÊ¥9-†‚r/³~*Ïù’–ô E»FîÆÊ]~™Y×]ò…­œÊ';ªÜ½.õÚùsµÕ}^Ê¥|½~úÃ)ÿeî?r™µ¬*TmCoZ1�»æ¶˜wò½Îº’þ¶4�¹¡˜ÏÊ­®T/èÇêˆÌª»½ØByn?Î K o!ËuÚ®m[ºÓ—v,îC9ú˶œ`)>*{p›ršûÝRVص#Ä{v¨Þ–â¯Ú¾êJÑ6Ú‹ Ê�ß„² ¬óœ¿ôÃëRÖgWÕ¸¤]|Rm¢ºKZÁ¦ +qúì"ƒîÒ.ÞO¤›±ÑÓÚÀñ´ÅÒ*Ï +K»~N£/J~*û «/Î}¦Xÿµþ\l)ϵ½LÖü’{}÷Éè7½øÉ2ß½ö²j¿¯©¤û�ÆùÁÜê˜é6¸½ÍÇ{>2jã£ÐÛNþ)¾ÎÝçwû¿¦yíöÒ™QÏ”·<]Æšg¶k–n�”¶�qÍì¨ã5ötc™ºæk<#û‰úÄ×q¦•–víúÍlü6ôU³=°vÕ¾Ñÿ|Šàã§Ù| ÔFÍ0V¦ßý_}°žv–r9Ÿ(>uðic n—ÕW¼¿ü®¯œä+ª¿¶»Ô‘{«ih7›b«}�5=ÃÎÈ1Gü"s qíGûz×OîÞër_ _–â‘�h3•³*Wâ,Û¹½á{ÁÇYî²wÇäž�¬²ƒ�æø`Í�uŽü·O%�µ}q@[%�¥s“´ñˆ~ÒT@¨xðûhžw-(–Xw2´S‡öN6ÚÙÀrUå¤Ü&vµÖÙ5íQ[ßìÅ21 L7ªDÀüóO?}ú—)°F�5²\èÖ²¨tî„»b¯2íqÖ�c.K=%ºþq¿Dc3VðxˆB‰þõ(·KåH(Ñž£Ü>L٣ϤÜ4ð|õX Dí¡‡Ly×Âù`ïxÈ}]¯-ÜPÇL*¬>Þca°gÉ;¤µì°õΖmOÚz‡çéð® QnçQnê7p¦5çy— FYr‡ïcÓ/+¾ý:@ m%JãOæ¤D[§à� ®9 ÛË:¨Z-Zì½…È6ЧCôLÇUC¥edß!=§U%0ïÀ?)•Íï]Ò;™ç[üÿ îs´Y{ŸûúÚêºb¯ËÈ¡ïÃ0â–tnqæµ�FÇF]MWÂÊšçu�—¦Xž¿ÙPŸãü» ¢Ú©—`ݯu*˜àvÇö±MÕæº´N½ÎjK±9®9½Ù–Öílö‡þ¹•]ÇZµ�µÉ„;¶¾¡‘޼N!ø\ž'Ap7Ûå=7$UÏûHïê%¶©2"uì­š§!Õt¤pnU6[[i�§oîÔµŒ€†ÞZÞ8z6{k‚­ umÞ}aiª?¾2[™/›Ÿnk[V¶ËXêq,ŸËótXŽ»lü4ýêö™°–50©å›“†õ=ÃB©CõÇ¡Ɇ8Ô=°ùÞXl‹Á1ÒYx˜qê°,øK#c9½ƒ—Ïåy:,ç]^æ3åQ_×þ5~ö· Jäɱoöúy3û�cdÄŒ0ÃÛ¼�¶‡(É„í\4F3¦[š/ëhh}顊Ѿ“q< +ø]<aØ÷H—^ ÕF“tÃ'ó<†ý~tÌ#×G¤a=ɱÂ#ÓSg"[µ>Ì{C\`—Hý{`bl÷çϯûèUÅ�u_[ÓEÕ6àêFw[÷m6=…5Ÿ›rö)ê¡Â½5ŸÏº³¬Š\¦7#öQ}.Ï“ º­ù‚ò»Ì\qˆírì—ßôçgQGŸí¢û<¤ù²ü^äfÙâÖõçËò;³´/ß{7ˆmg�+ƒ;3OݶQtèˆQçPv2Ï“ ¬›M¯z¯ËÇ|^v™*ÿUO¿ìÏ…eSßuĬ¾ ë^+i¾Hh‡w÷ñúÌý²çõ}d6´i¡œaþ/»Ìcÿz¾®âS}?¶º‹T§Gê¹jňÚLY%Cô°�Þsyž½qåx22¬ˆüç¡gÙªe�ï8Z¾×y~%nHWÛñ²ÄÌBLÛ" éüôÑ•Ü={kžÃUÝÄöØñ[ôsµlo”.1)5r„Úsyž µù`?õ[cÇã­8«zÇûÑ%ß± o¶|uë�чTÿæ�›ƒÑü޳û“yž¡û®'Ï�Zdpâ=¢²*Êóiâ†_†÷Cˉ£ÊÞ—~Ï{O�Øü(Ç·Gx¼{÷=Ó/,ß;NKs�9]öâN—ŽÞÖ;™çéP{§*-|&?œTÜÛ‹#�ñ­ò1 «ËqT��æð¾<—çé�wpN?¾Ÿ~â/{V§ƒãì:¾‘ÂN _ßÛ-ûÈîºÛAÒ¿ìŽÚ³ø2¦I[G-{€àsyž Á�™òßTž�×#—«.¾)×65x|™aP~¾áø´½€J„KD}Úy³ÍŸŠmúÿ´\B=zÊk[.� ŠÝiÖ0w˜äb›ë¢ÚÝWW=\Þµ~Ÿ;Óua‘®56@RŽtaŸøW¼a¾ºÀÖ+1–è®\“Po�ªo|—·y–î,s¨š¯KøÚ]¼ºöæuf ²7DiëÕ©¯“)õÑß.S~Z}³«DZùõºfÏê’¼@ ´aÓm¿\B¹hR—ˆUÀø7ôm×à&ú¡˜¯t¹eRÖéÚMº8V_ïä,ßáðKKµ|­ƒ¢›žé–Ïù;ØÃ’þ—ÒÁ?_tvù¿\YU®`WEœL}èâ· ]Áï±sýÞ«1 —�ª•…xÒ ²H3NyLiý¤–�ý®-zu}þh|m å÷5]�èTMdËå€sÅ‚9ƒÞŠ©õjÒ‹˜¾Æ Mvy +ͺö  {�ާíöŒ‡bmú­P±êºØ¸j�¦ko›ëB6Ó¹ë4ëþšÖDÖ�{ÂÛÕÚQú&JéòôZTõ®QMf™Q¹I}MÙ:ĵ~D·‹ üAÕ¢:³éY¯Ñ´³0U ¹–.×t‚èvÓ-¥ùÖS±¥J=k®žï¦t¨ÛÔ/Ènì>ºHßËÂÆˆ²õãZLw�µ¾V‰áÆl„·‹wm$vñÛÅG!µï\�Ø!o…–•ÛÄIu¼t)EJó' Í*£ <éÿ3Uø&%æ)´k�¢KxûS¯„Æf¯�Ä塱ޓ< ]ìi™»tŒ ³Ü_:)!=‘nKÝ<¶’2—1yÌÕ<"©Fk±n¨kb¢°êŸÆ•\¨ª¨®‹}ƒòÛJÜíôm¨zÕ* šÁÝ·r»84î|ãâØz\Ó�ÊÍÞV.Ã|ÞÊÄæF1A?ÕJºØ¨6Ûõʘ°RèâN£oE\Gkc'ú–˜ú±2iƽ]þ~)Óœ±ÞÐ�FÁjú‚eéëÿ"Íðó_wýc½‘vžÇ�jla·®Ä|&£¯“I'Åôõ2U؆ Çh¿‹uêi}EC›Ç�a|ízvÕ‰½¦Ô�AuÓr¡ï>dbÓ k´ežñ;ÂÛàÅÈ|kßô {~´µqtGÝe\­ÂoS×Ù>%_Y‘x¢¤}J‡Ö–¼P<² +s·le&’WÒ\Oö;Þ–êb,Œ GÛu®O³¼è*+­`I[þÀ všWšWöF¿{x}s¿/&‡:HÚ¨½I߸´5Œ¤�ðd©-�aýØæ[®7ªƒ·{¨•eÙØ³-ÈéC£‡nõÀ1ʤ©g[x^©«²U¥u¢ht™ª²Vb¬6…%[uKiq½[LÑ¥çžö¼Wš=ï•°IKåÖ¯EK¶@žÃ9öÖ©ž²Å’I�ž»I]Oi«l[·[×]gÛ+k†ë†„™ªžÍoR¾‹ÿÞ3vÄKª¥Tõ_Ù Ñ©ßáN»Ã:ZcË×ò©8ÄÑ7«D—ØÖÈÃyö÷J¶;"u¯„ׄµ*jú‚EÙ„7(ò±‚U¿|QΖ•ؤÇ lušÛ^)^¾a«ìI– ¡öi©H_¨g)èMô=@QiùRñ¸Ù>)ÿþ.;B +endstream +endobj +567 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 566 0 R +/Resources 4 0 R +/Annots [ 568 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +568 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 597.273057 101.433071 578.523057 ] +/BS << +/W 0 +>> +/Dest (cb62-1) +>> +endobj +569 0 obj +<< +/Filter /FlateDecode +/Length 4809 +>> +stream +xœí]M�丑½ç¯È³�‘ùüÆÀî6|  Ã0|¨Êé²aÔ,0ÞÃþ}?R"¢B™ª¬êžì…»P]©’ +ƒ!¥¤Ï +?ßiüIO1¦àé|ùéôóIMÁ)ü+%VEý~ƒ;kEar:ùèÎ?e� SHÎ~=á¿á�=ýéW§ÿY×Ñg3¥ä�vç~Î*²Sˆ!('¨TJ[AåÜ‚q^Py=¡‹)I*˜áڪ̠�¤‚dLTfX +ÚnU f˜ IRÁ �\TZÁm”u0DY#è´›<œî%�Ñ“�É$Q ÓÁH:k'H;-éÒä½wQÒlqIiIç`‹ÓDJÒÁ²1H:[¬·JÔÁƒ•t¶x' º[€®(ê`‹òJKºd'—"‘¨KЩâVg”›\´VI:­'lZQ‡…AòAÐØâ•K¢¶8«Œ¤³°…ð#éÀΆ…Ùjòì¶ÊjIç`‹1�DlÁàK `“•1ï8£˜1P ^‡µUL(p/V« æ È7ï‘ĤÌÄÎ2z1k€eJ­Ä´�ÿ"£ 'ÌÙ'ž¢ò€CÀšCîd´ D÷mÏÑ‹Ù�bs~ìŸ;ýú ‹ïùoÿ{zùUÉ”Õ�¡”&ÄW˜&a¸¢o�î[_›õ¹j»µŒ»`î¢�œ%¤±þrî¢û¼>¹�¾h¡�zÌÚ«Ÿë_z9~®ÒçÁ/Z/uìpN5ÿE¸\êiõ›¿ž?ýîôŸŸÖÀ+Ñhž!Ç ,}«Çª¼«_¢ØÚ^�¨ ZÝì†aæCQ]>B­�W^ÁÃòëùp0˜¼ 0áÃ|†÷y ½½¡Í™îe \¼c47Çö`�G\ì6ŽŒn›XŒ5�Âe^ð£FË€˜W&ëžçcI—ë˜e‚V½}‚ì²´ûÌêQ¯ÏÏ…À[Vüò²Oó9¬bíúÅ–J¹Nœ‘§^>¨2¾,½_Çê<¾è*{Ü=Æl¬Þ4Æ~ÆEf•ã#ýì�K,kŸ­Yl»,˜Î¶ÛÆrw0Ö±:‡¨ë!SFÅ=#kÝ·Í>ï³U=`!lAAÁû[¨:VçáPu=Êù¥yçÍ£ûa|³Ì¨Á°áÑOJy~)ë<RÌõˆ©EHú ÆÆv·í\�u/û[=·Ž±Û»Ùn²¨ÎñrŸY«�O]&Ú¶sþÚ/©ï5¾·¶y ZÚæÛÞ—µíóu­,–ÒfJ*šœÀºŽÖcu­7⯯¸�ÿbHÐýs;‡Z×[!r§Ï$�è3Gœ{î‰�M¹'VίÏ×üv9À«,½å̤ùŒªëH=Vçá�z#v�ãüçh"¿ƒ"ÆibùL»}{)³DöøÎåûJø›+ý±:‡È1áΪ;®úmÔ’��:œ„üÊ3àó ÿ&“¾2‚íÙ½ƒu ÁöF¬úÞAË[�=®¶-¦|f±Þ øXÌø(ßAo�Có pDتÝÚ“¬ópè½»¹èóAÿj}ˬ¹Ö‡1*|Òt~è“hïïÈ;¬óph¼ŸŽÑþxåd¥²§®ˆ�ðË�2;_mûiá2–×Ȳo‡cw�ßž8Xçá�{ì +î½Ö¿:BúÜ…úcøõ=ñöÕüÁè§±Ì Î¥;r­ë<réXüÚ2IAöèˆðŠ.XÞ3g×9E¢5"JF>çh_æ,~‰î­ÏoÉ3I¬nËxIkÈèÖ¥¡m~¿ÄÆÏ;®s¬ópH½«> ±cõ¢eœø¯¯î¹xžëçëD#§µó 7‚™v­8qX#Æ:×r¨­,_vú–ûôewˆ;ˆ½#ž=Xçáû¾[/Î{$ó°»Å›QËšïˆqÖy84_�qß»›âW:GÎ:rÕvµ +Sár�ˆÏ˜zÍ�ÿVy¾fÿ4ß{�ÿ¾ùŽÈ/6“eô¹;ò¬ë<úÜ�8õÿ#Ͻ%Su�›�Ò…�óÚ-ì_$÷°ƒd“Üq¬ópH~_Îõ›DòGä +§·5@ÏílâðѼþè³åb³aœE}Ç·ƒ^Ÿ½b{°Îá÷ƽ¡ãh »éN”q§SsŸ #Gñ»B8‡U´™�6ߊø[¶¿ñŽѦeÐ�l¦2tßwŸ×J︯à`�‡Cé�û +öW3<ÕÓÏ !c.u@REkA&©Í„_;‡û-_9ð,FU4�-Ý@êÁ:�†TðÛAÿ¾r ßaÈs»ní#±?aÝæÞ5Å&7Üî´Þ‘ƒ=XçáÐz=vm#÷²FÉê^M­ÖyÕºîdÙÛÈ ÑÀˆÚ|_ýê®Á¸.Wî]3B5®{Y×ß cAMÉýîäêÌRõ;o˜qæŽÙVl¬Ÿ<®Ÿ5ûw¾…âïÈɬóp¾¿Žü5f”VÙ$Ï�T=?ðÈ]£Ôö®ì(Û3Þ/ËùŠ£pƒ(͸�Ùšƒ–Íiï\Ë 0À­–ùµñ8¿.7¬'êeÉñ.>Vçá�|=ƵÂ~vsMè!Gv¸Æ¶Ç…µ­�K-»òº¹.Gìz8ÿ£Š6ŒW¿ÇïJ\™�åœv[wÅ4"¦ÃYÞƒu Óáà7¿Ø�õ»~ ë<ΨŒzc¬[<âæ63³KL¹ùnþ•qÞ»–¼÷�éªTžÃãJà†¨øÚj4Æ3¦[™×ñPÁêà/qEáý”ñËî�Õùá–~¾…ßcu¿7r»~W~¾ò¬v§KÚÁ +�MÇoƈmïýFá^.…vÛó+ì—r¬­òí±Ly$ÅF¢bü'K>?ó8$Ê�~Ö&–‘øó}ÿÛÿþ=ËSæ MÞÓµk-‹l¹êgš‡‡ÙÚО½;—u™}žkÏæã�|)›õ”ã»Üã‹´‚®zßF†üVžÛÏvtô,çµóçõîk©WüyÄ�Qs–ˆbu…vî“]üÐÙlñÍe±9\éë±Ûw_Uªò�j“²¶T÷w®“mR—1Ú/]ó«>¹üÜ:›Ÿ[^ûÔìÏçXü–Ÿ‡óã¶oóCýòƒ£·í4¿ÓÒ–¿jGŒ{v¨Þ—âCâ>œg¼`[~€¸Wd|Ú.xNsýÜ¿ÒÇÜÖÇiǨù¼ø¢Úä–U0v_»åyAËfkfÿÌL²ýuÌ++Ç÷"KKߟ–6çUëŠ?“ÚøS/vmpz £Ý¾>‡£]˜ž÷eðWññâ«|>½”³ÌÏ5R(õÙx¯¹ƒ� Í+…¹Ô¹ÂÆ&õÏÕö¹ïW}fFŸßT{üâŸÔý´;–µÌK·wÎ"/å}ÍWÃU¹®Sç¶fvðñÛiS×z�_d?éåÊa)«wš¾êìø�6~ƪÙîY¿êØ ¸”æB³y =ºÔ£¥ÿ/k¬×™¥]Î#j‹óŠñ:¿§9æ+>^¼ä+gz¿Ë9Òboµ#ýfkjµ¯à±–8é=s¿ÎÕ�óñUÿl¸úÚx”«3ºÿλØwðÜ o¯EZ?,O» ;mËSнbÏlûÍ"7âóí£6ë+Ïùg À»Ñd~Í��gl)…üdX)Ì+e¹Ì— +µú¥…Zf?C®Ma7SL…D�—g4Ÿf¹!6ü±—Ãr¾eY+ÃÂh µ_§³gE!i¹Q­ôa3l?Ÿ|y¢±.OµW˜�Úä×Þœ=My +霟¢•%]‡IÇêóNÍò² Ÿ[©åýA*¿R ?Nz~¹;XÊÿ\ø'D›ˆ$k|YÞõ¡Š8šzÐů§ü®ÄD=H½!ÎÂå£jm‘n1o•]°ã SKZWŸÅÊcëêGãjor}W«ågð’ª…ly +í|bAˆš^oŹ÷jÒ‹8¿/'Nv9òÍç«Íö‰—í öŠ7ÅÚ*&t[¡b§ëbCÕ�Ÿ¯Þ\ç»°™Î]§Ùðײ&°á¼&¼œpZ;J_Ei~KGmªzר&³Ì¨Ô¤®–lBmœÑå$¿SµiÂ`6=µü¬óY+�¨•Kµœ ºœÄrKk®�Th¥b¯šªç»)ê66Ç ² Û<†ü06G”­×â¼?ic�P½ãÆl„—“£6»øõä‚PÚu®P®B� -k·‰£êxéÒü(µù¦f•å'EçÿgªpMš™§|ÐÔ •ŸöÞ�úIòÜlⵓ¸Ü7Ö!ÉšB/ËÜ¥Ch˜åþÒQ å3é¶ÒÍc+)s“‡TÍË$ÕÈc-Ö uMœ)¬ú§q%ªjN×Å®Aùu%îvº6Uöz2¯Ü]k·‹}ãÎW.mÄu~t³·µË0_…—²°Ñ(ÎÐ�õ$]lT[íúɘ°RèâN£¯E\gkc§òT½åcŸdÒŠ{9ýýT–9c�Iøà­Îo¢áQ–>ÿÊü¿ÿ8ÑùõÑçó:nTc Ó¸u%æ+Y~oY<(Îï1«Â6m˜Ð£ý.Ö±—u m7†ñ5õêª{-©ƒê¦åB×}ÈĦA×hË<ã®/ƒ[ óÞ±é ö|hkçp›š_­Âïc×Ù¾$ŸY“8ÊEû’-V¼Q²¦nÙÊÌ H~’æúl?ñ¡°ù\쀅ùÐvõe–7]e¥¬B`ËxäùIÓÊÁè»§×»Ç}1Ù×�¥�Ú›ô•K[Dz´ž,µåЯÛšcÏù NÞî¡Ö–es϶ §O�ZÐê€c”Ic¯¶pü¤Te«“Ö…¢ÑdªÊZ‹¡Úä—jÕ-¥ÇQôRh1E—þ�{ÚñQiNt|Tü¦ln·®x-Z²-rΡ÷Nõ’-–Œ‚ÌóÚMJ½¤­²í¹i}îºÚžY7¨â{dªz5·)yÿÝ3wæ:CÖA*UJ&DÇþ²,Ô¤ƒ5¶¼ÿUEïÁ!”_á(²ÔÈ›ë\Ï•l3"5WÂÏ„á˜ÈZt~“¯lÂ+é¶‚5Ußò+WKJìÒÛ ¤‚:Í©M&¨¼Ê±\Ð- ¡vòV1¿¹Õæ 7æÎ¥å+€ù*ÏÓ*}R~þQy–e +endstream +endobj +570 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 569 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +571 0 obj +<< +/Filter /FlateDecode +/Length 4937 +>> +stream +xœÝ][�ì¸q~ï_ÑÏVæ¥xŒÖ€À� œÀ‚<ÌôÙ±ÌXç!?_±EŠ¢J—î™=Öæ æL«Š—ùñcUI-é«ÂÏwÿEÒCŒ)xºÞ~ºü|QCp +ÿr‰ÙAVÿ¿Á]µ¢08�|tןX`Ã’3Á_ß/ø¯;l‹¿_þò›ËßçuôÕ )y£Ýõ?²ŠìbÊ ª•ÒVP97„`œT^8Å”$Ìp� -UfPŠNRÁ 2& +ª3,m—ª3LÐ$©`†N.*­`‡6J‰:¢ˆ¬tÚ ƒî%�у�É$Q ÓÁH:kH;-éÒà½wQÒlqIiIç`‹ÓDJÒÁ²1H:[¬·JÔÁƒ•t¶ŒNt¶]QÔÁå•–tÉ.E"Q— S1Ä¥Î(7¸h­’tZØ´¢+ +“䃠3°Å+—DlqVIga áGÒ�'œ 1 +«Õðê¶ÊjIç`‹1�DlÁäK `°ÀD‰ `à/ØH\à# )/q�O +:¸|¢Î8v�e‰:ØB�$.€c=$›¢ÄÁÀkŒÄÁÀ¸ À#’†÷-†°pã‚-ð%.“ 1I\œG<†Q•tÞ 1€®E]„N‰ B [±–¸±Ô±è%.Áì.I\3 Ó$qAH°KEâlEC4ðÌ%�†-p²%.€§ �ÖD[à J\MD”é•ÄØ¡Kb¨%)Ž3£Ä‘üÀ®¢ÄX&ˆ4Á”¢¶€&$.Àüp°í$.@ðƒ`aލƒ-Ö‘Ä17£Ä1£ŒÄÀ&Ç›A₤` <>‰ ’ò»É€Æ¡SJ₤#âMC`]r¼%.HV!ÞDˆ'¬Ûd=Ç›Aâ‚D°ÅÁEu°NSÖ-8 ñ&ØIÒyØbI\�¼çx3J\7ñ&/j»Eœ 1QÖ‹–>ZåÓ-Å"€¿à๵ý‹�Ü-½kŸå×å‡3ÁÒBÇà/Nš!†­=Zé�^Âù÷_.àí{ÎØ_h‚¼ XËóËO—ßþÇ¿üðûý7Ì×—·ËþdBJ¹¨eá÷†Ïø«¿~ÿ_×/¼üáK>O[¡9üãÓäî‚È+öhyïn†æÁ*O¡mœ\8œù`“á-<†`EÑbt¨ôz¤z¨­«¸Ã°æÐ¨kä þ(|ZØtiœ…Í>@•¦VÙIsîÙ�u¼LO &÷Ê­røõwŠ¢‘²Ø +ëîÇÎ�TöÆeƱ›:5œ]MœÇè:Í+{…òtH…À¢ TÎQÑ&ç¬ó‘Ýàá>زÁ} +smõ8×ee©nî}·âÆrÔ­8ó6­FjV])çnM�·y]õ6¯_m(Çáþ7£¢Ø©ïX]¬n´cý +ÜVlïÏ©ØlæŒÄ}[²ÍaÎéÕ¶8?Ïj¿Ÿ>×¶ËZ+64çd¼Œ`ƒ`¾ ‘s!G|°ÎI<™Í®#¸"©Œ¼Ÿÿ}j–Â4;=RûÙ*u*RÍ„”… D1zÃÒV«´…�¾ÆPÑ[ÚëWO7&¢­ êê¾ûÚ”)ãñcck3–uœns[f¶ËX6éq,«s:,Ó&Ÿf^�Àþ=–¶:&µÔ”1ÍÜ7XÈ}è®ÿе#Ùº¾;6ßZ‹¹O»¬»`ánÇá]+× Öo«XvOðò±:§Ã²ßäåv§Ü›ë2¿#óx/ód?7[ó¼Øýû5ÒcFØá™ßú} b»ó’Øæ~/ê½ ÓµÌ×¹7”±Ú�—¸ŸôëQÀשּׂ–§e Ož.߃,YÎëmcøX�ÓaxÛ;n=×ìGÄ.žl±Òz¦¦Žx¶ì‰çèëuéËd§àåŸÀ™/ß�ù¬¥­˜¯ÆsáÏ97®í6æËþÄëÅ|.Ëx�†”\ ºëp+Þú™–g”8]¾‰èƒuN‚èïÙ@›¬ìºYîvèœ @£Ú�ù7Ü�E¶£î¥+óuü;Ê�õå÷ëø75e_¿u&èÞÖ¬½Ø­®n¥jµ‚²è&Ĩƒ(;Vç$(›ÌNéHLVyêeÌ0î+#ýº½2`2šlƒ²2[}Œäç³–ËüØ!á6Æ…»Ø.÷gÖÛκdV´i¡�Ž›s†¹÷áߎ÷•ÇT¯ïkH%­FêÁ:gC*™M>”¢Ë.k;�ZrÆ&׬äš22»Ùv+»vßn®{›Û—íè³]nl¶’Æó˼î›cÛ}6c�´²òtãE¸iüê5“ Ïb™¶ò!ßÏHü2�Õ92i“Cë(ö;v‹¬-”Hù¦¶îË ùî3�¥§ò‹Œö[¿‚WP8ù~äÌ yFÌ6 +�Õ9 +�ù‹ufšìÎZ¤‘#˜R¦Ë`IHí¹ODÖʵ‰Œôú«™Áë½þ,jR¢;*ÊÇu[g<)\S¦’Zð`þè`�Ó!oLJìg²�c{ô53»ØÉV>KÞíGˆ¼#íì±ûmÛŸ#Óõ?ò¡Ñ�Wò‹¯Z½®ñµ’Іï„ÛDïÁ:gC¯Ûñ+û«"]Dä^º™m¢–-¾kÑò­bälÓš7ò:úÌ‚O[= éÚ飑ܚ½¥ÎnT·‚ØÉw<ŽØcuN‡Ømó4>àGcÞG¢·oàÝ<²*fåi‡kýã1üÁ:§Cî¶�úÿ-£óiœý-Ñ]к»úVÐ�ûÖ9š·ýÞ…?ºãAH»sEÌÆÊh³Ce†yµô׋zÄ|sþ,²×¥mG>Ön]­+Ü꟔ŸÖ tþ–Ö&Ö9ý¶»@VáY<3‰§ëÝ ³»©=qWÌZ†l�þîªùÑÌZ.÷¡}i™Oø«ëœ™;þê'ïÚŸ‚ª‡r�ŸážÍûYAm“åo¶æoŒì¡öX�Ó¡v'ŸúQßðaë®U=qot®×{,Ý�†µ^Éb=é}Hý/î¶Ù¹"ꟸv°Î麓w=xݨzÒ}em;·1*J÷«‰ ~éî ÍW�Ð~w¯ô3÷Á=bó£hìïiýÝÕ{L¿6õž¸Z&Ÿ“’àwÓyµëœ µaÇOU2ZÚ�pïî¹rç3ß…Zî¼æ»:Ÿ»GhÉ[wÁˆßýPãõùîJÅZ.Vôú;Ê‹ÇÐE—ýªÚ»Bìã|y°Îé�·s�¾¿ÏòÀ·zfWûݵ¿#¥¹jhÚxx-[Þ#ö‘ì:m éW›Q[Apã_†8hKù›²Û>VçtÞÉŸ~À§<‚®Gò–³ë[mN ÌmªèøzGAþýÀÕÓzÿ)ó-óô­;Ï”-¾%¶s�?4¹Ë£ÑÁ:§Cß1sïZ;IQÊÊýöOûc�¯øëã¹�¬d¥qòá ‘µw7ÊÁ:gCiÜñ/�FíUÊ.Úè‘�ÆQQPõ^Ì™Ÿæ(˜²ÖÍLw\ÖfÁ÷îÖˆöñ{�Ö9Ýìôáb7ªkßSS÷ïšòMóq†9“Íߨ¼Þ�%שßíõü=MsÛ}mêÑT¿í«~Ë¢-ûrڮm)œÀuâyå{�>_íÕæ£ø:VçtøÚñ°ž�ãf®šcdzʧÍñ‘óèìè�Ë·…j;ü�/3Úv1�#ÞÆzâîȃuN‡¨�«Äñ¹™åüƯ™}>fÿʰôã‘àÁ:gCUÚ¹kñŸÌ;Ïî§ñ͸¢vüáôDÖë`�Ó!eçêk“WüÅ|ã•;´ûû¢Žäe¥o–H^]{-©F\MN¡ÜuãôŠmòÂ]9)ùÚ'îmM�/uô^�ƒuN‡ÖÿëÆð¿½·àHfî�»{r~¢/÷¢–÷Gô×Ìf™´µGPN™­£ß·:XçtHÝɆ=�gTÏßMò‰™·__Ö¬"òÏッƒÃä9móß½jžC\a¸[duåYËgÖ^u÷ÐÝùã6Ð$¿1ÌÆ+;r)ðC¶Å,úÑaSJåâ»Öª~�×”rä-ñž:ry+Sùáôã´póÃ9ü½> +endobj +573 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 770.673057 101.433071 751.923057 ] +/BS << +/W 0 +>> +/Dest (cb65-1) +>> +endobj +574 0 obj +<< +/Filter /FlateDecode +/Length 4841 +>> +stream +xœí][‹,·~Ÿ_1Ïwt¿@08�ò`8!“‡³s¼apò�¿Ÿ¯Ô-©Z]=Ó;»Ç‡œeÎLWéR]úô©$õhôYáïK�ÿ’ÓSJ9w¾üpúñ¤¦èþ•«‹¢þ¯èÏZ¹8y�CòçH`ã³71œ_Nøo¸äÉ_NùâôÏu}6SÎÁhþ×w¤rvŠ)FåU†Ji+¨¼Ÿb4>ª 'ÜbÎ’ +føèŒÛª"Ìp9yI3œ1IP%˜a]Ôv«Ê0ÃDí$ÌÐÙGA¥ìÐF)QC”sÖ:í§§IgôR6YÔEèt4’ÎÚ)D§½–ty +!ø$élñYiIça‹×Î)I[œMQÒØbƒU¢¶˜­¤‹°ÅÀ;YÐ%Øt%Q[TPZÒe;ùœœu:•bÚêŒò“OÖ*I§õä�M+êУÐH! +:[‚òYÔÁo•‘t¶8üI:ð„·1%¡·êÝVY-éQ—'áq¡ßÂË“!K\àÁ»¨¬Ä¼ úL€ã'Œ¨FâÞÕ#µ¤ïj“•ÁK\8L€Äß&­]Q—'•S’¸ÀƒwAKFâŒÂ“J`Q'IK\2žâP‰ xÃ{–¸ €w•·Vâ‚ÞUa�¨ƒ-6‰ ×@‡n+ôi«“2` +IÞU-,éÀ»JÅ,qAïÒ°)qAˆ$0Iâ8! +6„ä¦c�¸ dB>Q&\{‰ ¢‚Àƒ²DlqÑI\€ÀzÊ6'‰ ¢�-Ö‰ ¢�-$.@D0e�è[œÀÀEœ8Ø‚HQâ0Ù”²sD0ƒW%]0SŠ kQ— ÓQâ‚Ý„¡XK\€¹Ô”Ðé%.ÁO.I\3 ÓNₘa ºŠÄЦd™K: [dK\€H:­%.H¶ ”¸ ™„YfP`„Æ\®–tNÑ<3I\�\˜(T”¸Ý3M0¥¨ƒ-  ‰ Ð>4Ùö`òƒÉ&¦9¢¶Xï$.HÉÐt3I\�l1ÊH\lÒ|3J\�lAÄ'qAVa¢0YâÐ8tJI\�uÂ|Ó8‰ Ð/i¾™$.ÈVa¾‰)žÐo³ 4ߌd[·Z¶µ»Š×Û}%Ùúê<ïn+-½b +�€s]¯hä­ÄïÛø½ÞŒr¶õ"š‡wÐ#dc�fzg£më0™¡4(-s"V&FK´C{e–w4Xa:�ø0 �͆ÆS�$fBÊ­ÿæÃ ÔºX1¯Ú·Kf>"<�¡Òøó‡N¿úÓ_¾þúß�Àϧo­À…_}©ñîíüî.ËuX®Órí—÷¼•i=”Qõj~ÇDF�ËË}·è–4ίó¸ç¡Œ¸ÔAyÃ�æ2¤ÕCúïý£Ùa¶åײ‹î†�ÍZ(§^³òêg?ؤ.­¾úÛùÃN¿ý°e™[Í ¤©â9%¯âøX–·àøsÀ7çÏߨ¼Ö5M«Ç,ïOKYïß"Ï,ïÐ] Þ2ti_j"- b²ëT¸�݃y ¼Ú\'ß›�ÿýþ“!ô5½æÚ=ԺþOš. ÷$Ú»ƒFûz&=˜çáÐè®s逬öžäV"®©ŸG$ü|­Ìê«e\¸ìÒÓ“ì—ñ;Èe�)¦WY%CÓúëÈ=–çá�{=ˆ}[€õ3 4®ÓmP¨ß‡_ßl�ãEË#Œ/›4·8—‡¢„—Í­YØÁ<‡ÜcñkõX}=:"|…¢‹€†Ð¹Ê\Ö9È­Ay,�¤žñ9-Q½ùŸX�k¤ñ¼Áâ2úà ãÒP¶{bˆý¼‰�d¤šwŽæy4¤š±êG!v¬^´Œ_áuŽRû4ç·~Ëi­¾¡JoصâÄaŒó¸+ØÒòqaçÞèž>ï q±wijó<boij{£:ŸÁOÞAß«¬ó<únÄ©ÿ‹<÷š•ª+èÜÌ”.¬N'ûâó­=ÈH¶<&=8ã:˜çÑ�lß¶æú‹Dò{¬0Noc€žËÙÄá£xþÑgO3jë c/ê3¾ô²øôè®íÁ<‡Þë1í¦µ†YKC‡™N]ûl¨9ê©óÌŠÃ*ÚÌN™¯Eü-ÛÍ;ÜçÒÜ'ÖSºÅp³®”ÞñlÁÁ<‡Òì!®®ðTO?1„Œk©’*Z 2ÝWþœ» ¿ä�ËbTå&£]rîR�åy8¤^�kÿ¿s° °òš­~í#ñ~âºÌ½=Å&7Ün­îŽ5؃y ­îzìÚZîy�’2g»›«uÕ:·–¢�µæ™!šÅ  ¹µ]ªqÝó:ÿ jÊÚïÎÚBíYT– ¯ëqæŽÞVlŽì>y$4ìŸ5ûÂïX“=˜çá|=~ùk\QZ­&†¤êù�Gîj¥ÈøsÜW¸Æ�ñGáQšq!³•‚–Í i¯®¥˜wàVËüÚxœïË ã‰zÞA²¿ƒ‹�åy8$_�q­0ŸÝì =dË{l{\X˸Բ�×;œcuè¡þ!Fmw¿>¿ÖK�v›wÅ42¦ïXå=˜çá0}c•w�iL/~� ë<ΨŒz£­[<âç2‰Ù%¦ë¿ÖÎ{{É›¾3ÚÂíÎÛ‘ÀQñµÑhŒg$L·4ŸÖñPÁêà/qDá÷)â׳gc5}Ý_ÃÏ·¾Óp,Ï£á×ßXÛð»òóÈÓ,vmOºä¬ðØtÀÔ‘Øö¾•&µ»–âv[×W–rÊú«¸ÖFùöE5j B±–h—ì[\žÑÑV›TZ⯿ûú7¿ÿ#[§¤šÓµ½–EöÔ½aš—‡ÛOžÓzb §zwóõFž/_¶eS¶u”ô~�ÇÅÚZógzÕô›8Ô.vù¹…:‹,é«‹Ý¥žP{ô!‡'îðo¹ß̺l~¯U¦hM—�Ü,öªû´ø‡ò\fdè°˜¸-�N�Ê–NlZl±Í/T¡v.OÚ–,}�™ŽÌÙ–S쯾 å^®ÙA§<Év¨~/äëväw3÷lÁ6::)(gBÊž1ÛË\c°ã�üL¬CÏÀÍí±Øä+»ÌŸë½’=.ö´åþœÛóòäû(xªižY?0”w^ÓZÚÇ3›4K·´a]9Üñ{}Ó0¤™Í±–¹­¿ö/ßú„ì+½ìD•´j¾Oe×>Û¡ÙؽU¿ëî÷š¾Ù_Û‚aÉ›n�T×Ì9×|Õè3WŸË œ—ö8éͯUÿñÌ_ií­¯ÚJ§µ­l�¹c�ýÚÆx$?[¾âIGŠGæ¹ë‹¶ïˆøfoÌSò�–·éZãDD/[j– s#ìV˜Ã¤2W3TXéˆ/ÕR—«¨»%´¬¸ˆB‰þùVn—ÊéN!ˆöÜÊíÔ=ÚLÊÍ/má—½é!SŽMt>ØýT[ð7ïÞÙr‚ �æp‡çé/¸.Dù>oå¦vXó~žwÉ —%‡¡r›>/­pµŽ1ü9)Ñ)=¼Ä€³=¤ÎÏU@c÷‚”m@çáe:yj¨´ôìÒ£ƒ_³^Ó)Ÿ–Κ¸ñ…ÜCydÖ¸/u�ûÔG‚³‰ÔÐ›Ä îØ3åhßûõ õ±†áÛ0~õ ›¼í}!fÃuÒxÛhœkØn¸�=@¨A[Ãv^ƒçÛIÀµ›rö)ê¡Âk¸Î¢ÏõÖ{pì`žGÃu¦óŽ÷q½yZÀH™âúå�^q¾už=ÄðqHó©?,[¦fÑ××§å=³´O?õˆ÷~�Îdo:b>žx0󠬛Â5”½æÑ™kKŒü1™ñQ™½ÇOVÌ*<@ðX�¶lYýÕo\}$~©1¾©Çò<RóU>üÙ¾ü?~�kgI|Hö²¶ïð—jOZî¯ðz`×vøl–> +endobj +576 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 270.123057 101.433071 251.373057 ] +/BS << +/W 0 +>> +/Dest (cb68-1) +>> +endobj +577 0 obj +<< +/Filter /FlateDecode +/Length 4725 +>> +stream +xœí][‹,¹‘~¯_Qφ‘u Ý`1ŒÁ6xñÃÀYÌbö¡OÍ´ÍÒcûÁ?e¥.©Œ¼UõigÞ¦NUFè)}úŠTfª«Äßw +ÿR"„è]o?_~¹Há­Ä¿!Åä`Pÿ€�·W%É «¢ öús/|´Ú»ëÛÿu‡mò·ËŸuùû4�ºj£ÓÊ^ÿñSR‘>x/-£ŠPIe•µÂ{m£rJàcäT0ÃzÒ4Wy˜A1XN3HëÀ¨Ì0ä•™«"ÌÐ^§‚*ZϨ”„JKÉê`ˆ$2šÑ)+Ýq:­„ QGVç¡S^s:c„ó¤¬âtQ8çlàt[l”ŠÓYØb‘ät°…LðœÎÁãŒdu°Eo8�‡-­]€-@W`u°E:©8]4ÂÆ@Äê"t2ø0×ii… ÆHN§”°À¦auQè$ç�†-NÚÈê`‹5Rs:[œÇÚÁéGA"ñÇÚ{AQG:A�Ç:DAÞŽt´‚\ô© ÓŠ##a‹%Ç1�Q°…0rYl1‘8.0¶ ÇÆÀM†ã¶% …ãº%Ç|KR9Ž fJŽ ×GP. 9.0à\îä¸À€t1Ü=Ǭk¬ÓЮ¡à8.0à]CJr\@à]c�“ÕÁ˜ã°£0*Ž ¼k”ôxÃHs\€^À¡ã¸X:Éq�wu�Äq�wµÇÀê¼À4xW[œ7sƒwµ•šãïjÒŽãE€$ë €wA!–w` –ãÌ÷ÐiÃq +n Ǽ«"¦?fLƒ­„ +Ñq\`Á»* ûX]ʣřq‹VʹÈq�ïb¢2Xð.è3p\Ž˜Q5Ǽ« fjNÞU:JŽ ,x~ƒå¸p +ǘ߄’€.«‹BÆ8.°à]В渳°�LÂê¼�Ç c!á‡r\àÀ»˜Þ#Ǽ+­18ð®$¸=¬¶˜ 9.€_†-3¦á¬ +©Áœ¼+z˜Ó�w¥ô‘ãÞMÓ&ÇÎ'�À@/Xs\à‰è½ã¸ÀE \>VçŽ-Ç^B`AY¬¶�'Ž àX‹hbà¸ÀkØb´æ¸ÀkØ—�ãx"*xßìò¶.ìú€` —ó›ÿ¹~ùãåw_¦`<Ì;ü“Ã…Y-qÅ*þöeyßvX®®ÀnÖ�~ÚÌ3è5ݪR¨±™W~Oºª«ÏF:¾ëN7‡ÆSv¿Þ!’¡×C˜tW¿óªé¹|û!ËC7Eç3áEtš”W±»3ÏÙÀ‹Ò.ô¾N¿ ©¼t=ë+‚ÖÈ®E ý4Êr]¯·hÌHYBnA8ƒúÁ&Ó¥ËçÔØÛX—ëÎùÖÕ¡*Ú&#/ë3ÚܼMhÉÞœ'6õ½NÓ#K/ ÖÐqÄîËs:ÄÒ:ß.ôBº·…´É4Ý—Ó!7•×s_î±=uå²Ä‘™ß â»iýcyòب˜¤§ ®­N§5 )Ójd¹ûòœ¹ëêöØÿ\è~7ÎþHtg´n޾4W6]R!R$Ýš÷å9š×ýÞ™?ºáAp³sAÌÊÈ —¹÷‘F‹íüÕ1ΟYöun[åÈcå–ѺÀ­ºñIÓÆ©†€ñ*wæ9õº;CVnáY©gžYLë°Ý»«+µì#wg7CöH¢CúŽ28ès~É=–Mcú¾üŒŒ¡¥žÕ¾ÚqÄæ£h,|ߟ×צ-{Û~lòõÈ�x+mDmÁ�éƒP†¼ÛŠ8íÌs:oÄOŸð)÷ ëHÜrr}«� ø©M?ÞQ0|ž¸z:”cG¾M<}ëÎseý(©óÀúšØåÞÑÎ<§Cß>sëZ;q«”Þwâ¢èGü±ÆWü|<÷ÌHæQJÕW„#$BBÔÖ^”�yΆRÚð/÷®:Ú«”Ýj£Gö€°´*òã§›¹ R:mÒÓ—µQð­ÝdŽï4Ú™çt½»Ó‡ ]«.ŒÕa5�sÓiÅàêÌ’"ÙiÅ “îëý˜Ó¥ªùÛº†urš±Ú´/÷:Ò‚¡”ëF[2'¤<ᎼaÅóçÁ㫽ڼ_ûòœ_Ö£}ÜôÕ¡>vw\$Vy·>Þs�ýñp>¦)¿�m»�˜V¼ ŒõÀÞÈ�yN‡¨�«ÄᱞMñ�ÏÌ>ÏÙÏ£ÊÊã+Á�yΆ*»±kñßÌ;‡{÷ÝøfQþ°} êµ3Ïé�²qõµ‰+~3ßxa‡v¿/jO\vMëWœ�W×^K*+®&¦�wÝXµ`ÛŽ¸ð¡+'9^ûÀÞVk�ïÆÞ™çthÝð¿>p ÿÍ�ptoÁžÈÜ�Ý=C|¢O÷"çû#úkf“HÚR›ÈÖî{®öå9R7¢aÇåã»IÞ1òöù¢f<"Ý;wæ9"ݾ;YžÚ�|äŠÂGŽ€þZÛ§Œû. ø�èÞÎ<§Cð†¯úNûé9´ÚõÎ÷P-Ú´Ëg< ÂÐÛ\iÝ{?ÀÎ<§Cï†ïú‰ïò{—Qó¡»Ðø@ÜqgžÓ¡qÃ?]Ø =»ëÃV®)«† ÿν©ý.î´’¸¬Û/õy8–G®àŽì�yΆ\¿ï +îÃ÷œ~4B»ýdܾ°÷à×güíÕøAßN}š ÎõÄZwæ9r÷ù¯GŸ(1AÑ�AC÷LÑõÉþyŽƒº=£CD>Åh_åì®ÃùÛ]9}$©ÉÛïç?ÃS/ü×¹wæ9R7|ÕÆwÌ­hNüàÇõèv­Ý—ÕçY‹¡–´í¼°pn霾í +q±ø³;óœ±Ïí><ŸŸ÷¼'sÚÕâƒÏø¸;óœ ÍaÝÇ}v5µú\•¶Ç®ÚNfaª=¼tWËä“åéšýË}ïAú>¼#ò›�äô=gÝ™çtèûØ;²OÁsG"U+è\}BÇÚ.öo{X@òOÚ™çtH~.æú)‘ü±‚†Ó'O͸1~xßmþ¾ÍÆ=ûîL\@oãŸî½b»3ÏéÐ{ì BOÝ«šQÑsT»+¤å°Œ6½PæQÄoÙ~pÇ kÓ8èÇf¤6è~lŸ�ÒøÀ¾‚�yΆҸ±¯àÈÝÑ÷ÊrO’övöwNô0>ñ•ƒØø¨’Ä𘀭g ìÌs:¤î¼;èÿ¯ð; ÛØ®�¶{>O=·k­Ä`wæ9Z7ž0d¦=P�ÙîÕTrWÍ3àÆS‡{o GmÚW?Ù5¦é†½«}D(ûu¯Óü3tŒ¨b¿ ±…òö|ÏÁ�§mƒÍ¾9ÏÖꮟûîB‰Ädwæ9‚×ý×#OÒHw|$å–ïxä¡^òr¾+;ðö¬=¹§E!ûd%?·59-³ÒR]ãÐïÀ­¦}"h>Çöº\7ŸÈׂäÆ÷x‹N·Ê ïmr²y�H�ïf’ ´Î_>’_áqM=݈CçD¤ÿšp…cJѧwå$øý÷ï¿ÿíþ³Âo¸‰èvïºÔùÁUJ݃’I¦‡ Pcó»±™†).Á#5Q�*Ó÷ Jwø ¥RZwÿ e�¿‡rB&š±¾t+åOêïúIùv¬»±g(Ã6ç`ó9̺헋Þñ¤†÷üI„ÒéEÀWG"�¯é½RAR¹›Ôаêº�sx}ò/%ÕøFe™^²˜^°uÝrs0¦ÿeèàŸ/*’H퟈ãþöS9ˆƒÎUüvIo¿%FLðAwŠ“pü)KY¤rÂ"»�½ˆ}Jc…ÆR¸±ù§¶ùlR~›³¥·‘̉Ìð^ž{ÅŒ9�š‹ÓÙK¡Fqzƒpf½½#ÒäŸS±K=�ûZ†7z&¼],•‘XÅoë™Ô¶r…´z­Ð4åq�/Ušný½ÿÂÐ̲ôî¬ôÿ�*l‘&æ~(*�Jï¿«Gµ’46‹xÚH­ÜÖ!®ùš¶i.å}ÁlÛ^*H&}"Ý’º´ØDÚ4Y#÷1›—Hª�ÇT¬ +êŠ8QXnŸÂ•­Pf#P]Ûå·‰¸ÚiËPØseN5p·¥Ü*v…;ßZ±/=®ÒË ‹½¥ÜóYx&6êÅ ú!WRÅZ–Ù®VÖ«a …*®4ú6ˆóh-ì4<�~üY7ãÞ.» Óœ6VGüpF¥wó¶^–ºþ iþˆÏÿ^èú§ü2¸û<®ea ]¸u"ng²ô&÷°SœÞìž…eØ4BM íW± +5­Íh(ó¸Ö _SÍ.+±ç”ª0¨*ÚVhk6b] «•iZÆ®o]+GæÙ¾©öýÐä“C5&½F0[…ƒötpªÎÔ)ùÚ‰£”´NéÐ’n2â -‡M…±Z613²­¤4}²ŸÚ®0©®æ q#Ò¡©:ªÓl[t– gÑ$� lÚƒ¶`Rm¥qbcôÃÃëé~Mvy$i¡ö"}k¥åÄ’´/5á›–9Ç\ÓA¼µ…JY¦{¦89uhTׂ&-Fi¨Ùƶ­”²lRiž( +]@&³¬”è³MnÌ–›e8ãÀ¶’/>E•þ­miÛöJiDÛöŠ›¥M忝xK¦8@¶…³¯g'kÊâKFæÚÜEJ5¥É²yÝ4­;Ï¶×æ4¨âªg*k6;Kùÿ=2vîyº¨—*ÿ ‘êëS1Q“òF›kLîNpB饿žB9œg=V2�ˆäXI[ºC�1Ò+àmÁ„7(â¶¢)êm|ó,Ÿ-Jö”Ž5 +ª4'g‘ #ÌÞBåЧ¥¢�Ã+ÈeÀ �ÊKņ††gâ˜Iødøû?†q… +endstream +endobj +578 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 577 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +579 0 obj +<< +/Filter /FlateDecode +/Length 4962 +>> +stream +xœÝ][�ì¸q~ï_ÑÏVæ¥x‚Ö@À� œÀŒ<œésÆF0`�‡üý|E‰QÕ’zf¼hgf»UÅK‰üø±Š”Øúªðï�ÿEÒSŒ)xºÞ~¾ürQSp +ÿå«‹¬þ#þ‚»jEar:ùè®?³À†)$g‚¿¾]ð¿á²OþvùÓo.ÿ½Î£¯fJÉí®ûÎ*²Sˆ!('¨TJ[AåÜ‚q^Py=áS’T0Ã2´U˜A):I3Ș(¨"̰´ÝªÌ0A“¤‚:¹ ¨´‚Ú(%ê`ˆ"²FÐi7y4º—tFO>&“D]€N#é¬�| í´¤K“÷ÞEIG°Å%¥%�ƒ-N)I[ÈÆ é£Äàø 3ª‘¸À�wµÅL-éÀ»Ú$%q�ïÂop“† qæ·I+@WÔ¥I¥%.pà]Ð’‘¸³ð¤"˜DÔ… @Ò€Œ'?TâÞÅôž$.ðà]嬕¸ÀƒwÁíu°ÅF#qüè0l…1 guRL!éÀ»J£‡%xW©�$.ðà]ž6%.ð�&J\'xÁFâiJ!x‰ |RÐÁåu~µ“¸ ((KÔÁ +$që)Ù%.¶Xc$.¶Àe�¸Á”4¼o1<€-€‹l�§(q˜lЉHâ‚à<â1´ª¤ófŠt-ê"t:H\M˜ŠµÄˆ¥¦ˆA/q~bwIâ˜�&‰ B‚-*`*š¢�g.é4l�“-q<]è´–¸ ØoPâ‚h"¢L¯$.À �XM-éHqœ%.ˆä'v%.À0A¤ ¦u°4!qú‡ƒm'q‚›sDl±Ž$.ˆÑp¸%.ˆ¶e$.69Þ $[àñI\�”ŸØM–¸4�R$o’¸ã’ãÍ(qA² +ñ&B‚ì¿ SÚtm°Ò ·¥QCôÀ%ÝQG—Î5n.ÓøuÇÑØ©':™�nȘ(Ø�:›_ð«u>¶¹ò±-Ô}@×4ßš®uh/ë»�ì{î‚—wª(’æK�v>@ïÉ<Ï_mv YÂïª�G’ö-÷‰‰øžî`Å d^°ñºÅÂh‹‚ _þ«åÄuÿ�yrÚ‚Ër_y‡Ý:J݃�†Óˆ^ÿXU]mî Bu=Q/;O4oÂ711÷ÄüËO¿û×k=¡ÑuðO”^,ËßYv›[ÂÔFkE;·îœÖ1û¼”;›¯7ò8´ðm[6§!¿­ƒÓ;Û·f«#×çæVoÌ0ç«å—´·VW¶¯«··¹Ô“íµeTŸjôØ7:·³za¢³­+?Û¹´W¾w¶á6÷¸öK5¾/ßðþ4‚D…Kùvi#—Û�Ñ8—§¿mËñ–Zx3o[N¾÷Òž>·Íž¼ÿ,Û¡Ú½p{×ûã¶7óˆlãM]¯q‡PöŒÇVæ_ [ÜÎÌ&æVúw±ÉÖ˜¿—{e{(´´ùþ fÛÓòéåûȘ*i^;Œ›†)Λ¯¿/ýã:›t—néCmvÛ=ŽmS1¤;› B)s[¿.ùê¸�ÛŠyÁ•~Tó}*»nƒ±ªM¾»·Ò{I_íC¿ÝéçrëlÇ×½6³jÓf=o”ûŠk[µ–øªÙFËxÛrTã'æðÇžmüÜÈʶ™+ÖX/ãeô+¬w“·9ÜäÍÕS~ÅÉ<ï +ú?Ñ¡pÕÞ�¦ˆ`Ú(Ñ¡ÈУ =Ë�í¦—¹îV˜ü¤oœ úÉ(Î@bÙ�û%ô¬ó¸B‰îõ(7żÏì½hÏQnç§äÐgRîù/Ì×¢Î-HaÝ×!Í·ås‘S«åïÛò™º´/¿öœòžÐÿÊœiˆQ'Qv.Ï“ ¬™íýÊî-ŒlA^Ôîb\v£©!fÕ[qÝ+u%¼_ ù> ¡†vâS_Ÿ¹_öNí#³¢M å �ÙWw^ÏוÛT«»‹»w‘ÂãH=—çé�švùPBˆ.‹GvЩ-gìrͰ”¹â®¡·Ý€Œ b\—÷¶¶/ÛQ�QFÖ²‡%ޤåþ2¯ûîÚßÍ’'ÝyºÝG½ï[}ílÜC¦W•ù©Z"à�y2ϳ!Óë]­­8ÎØ=²öP²YP¸ïëòÝg K·ôu4¨u] ÍwPØ|? Ú3böQx.ÏÓ¡ðœ¿(F÷8ë¥[1öÐ%¤ŽÜ'"kìÉžK¨¯nw2^æü«­A5 j3£"}¼oëŠ'…Õ):ð!}ïžÜî>™çé�wàCŽ=9>}0¢¯ëÙÍLvç»äý×z„haÃ;ÒÌþ»_÷ý92Cý šaÉúï?jï ·óµ™’ІŸÇÜGï¹3Déü®à>Ïåy:4îû±duOBT”½|,ž®ûÊ;½»©½ã¹ü{+dô�§ž]Y+��¾^’‘ßᯞÌólÈŒþê'ÏÚŸ‚ª‡Ö?Ã7|6ïçj»µQ~¿:?{v„Úsyžµë©õ ö·>a¯Šݽw’F´ŽËð®SÍWV±Þé}Hõoù?Ø�ïØ»?™çéz°îzrߨz'^àÈQQšw7ü2¼�–w�P~AÆ€PñeœÝ '�Øü(ǧGzw|dõ¬Ã½·Oì–ÆæsRrüNâ÷í÷Q{.ÏÓ¡öÀOU2Zú™ðèU¸òî%¿ +WÞýäWË>ûõ é)˜Ê±ãž½ßîTÜ[‹=�ñ�Öâ1 Ñå8ªŽvH“zœ/Oæy6䥃}úñíØq¬ =»Úg×ñ‰”n×Ðôñð½Õò±�¬®Ó’þaWÔî ¸ó/Cœ´%~æþÁçò<‚ÖO?àSžA×#ë–«ý­~M ¬mªèø6£ ÿ}`÷´>Ê|Ë<}îóeã(9zV4uk—g#¢“yž}çüÍ£½v’¢”;/ý¾Ûë|Å<žûÈH¾ƒÒæ+~#�uô4ÊÉ,†ß`¶KÞš�Zþ¾®ú¢EŸöë\Ç µ\¿ØRh�óÄ|å ‘ßG�Ø—SÀ‚C_8móé�^u‡ŠUX&9Qy%i{0ÒU‡Q­ßZB‘|ü¿�W¬€±¬“ßxóK‡,#³¬aä#–§¢My¯)?³ºÌ/yþQó+ÂßÛ¨Îï8•׈_ç9-ï€pZ¯ÚëÏË÷vœ�ª¯D›|Ü�š_ùî^¥®å—W›;{V¯a§ù~»í—‹Ï'=ê|Ú¯òðr ÿÀÕÓÄ8  õȧDZÒ¥›tnX}½“3ÿˆÂ/5Õò» +Š�Zæc6s7öKú_rÿ|щ&nÿ|ÞB>]eq4墉ß.ü– b¢vhÃ�˜…ËWUË‚ mÙ ¼¦4¦´®œR×Á/hÍ_�+wÃù]ÉÆg’*‰l>�o®X"§×[1ß½šô"æßˆ“]®|5…_®ÂV õi[�-ã¡X[Õ ÝV¨ºêšØP±Gó¹³µé|VÓû¦Ó]÷—´ˆÏÌ)áí‚jí(}¥|zy)ª´®QUf;£R•º’²vÕ~D·‹ üA•¢ �Yõ]¯ñ°³0 QM—J:At»ˆé–Ò\í©PSÅ–5•–o¦4¨ÛX^�ݺÃTÿ0J7F”-_×b>#¤öµŠnÌFx»8ª#±‰ß..©]ã +å +ôz¡íÊ­â¨^š”׿ošEÆ'hòÿgªpUÊÌ“¿hª�âSpÛU«„Çf¯©—ûÊ:$µ€¦ÐÒvÍ¥C¨˜íÛ þ��žI·¦®-¶’vMÖÉC*æ1IUòX‹uE]3…•ö©\Ù U1Õ5±«P~[‰›�®U§je^wpwµÜ&ö•;ßzq¨=®ùHãjo-·Ã|ÞòÄF£˜¡K%MlT�íZe�°RhâF£oY\Fke'þ™–òµ 2iƽ]þzÉÓœ±ÎðùÞj>¡¿÷²ôõ‘æ÷øû¯ ]ÿPŽ„�çq£*[˜Ê­+q?“ñï¹Ä“bþ}—"¬Ã¦êh¿‰uli]AC�Ç�éøšZvÕˆ½¤Ô•AuÕöB×Ú°› +]£m×2nGxZ±:2í›6aÏ—¶ÜŸg‡ «pÑß.cÓÙ6%_»"qÅIÛ”-™.#.úBqÙU˜še+3�}%µéÙ~ê»Âr]ÝEçFð¥m:jÓl_t‘å»è’À¶ýE_0é¾Ò´²G0úÝÃëÃý¾˜ìË`i¥ö*}ë¥õÆXZ O–Ú|é×—uαù(�2x[ Õ²l7ölurÚÐh®­.zŒvÒØ²- \_)ÙªÒ2QTº€LY-1›ü’­4K¾ã(¶R¨>E“þµoi×÷JmD×÷Šß¤årËŒW½%[ ×Ã9´»S-eõ%£ ó}î*¥–ÒÙ¶nZ×]fÛkwÔ ñÍ3U-›Û¤|ÿ½gìÌy†U)Uù—WBtl‡¨c¢&¬±ùwñTôBüÓ&�b·4òpžýµ’íŠHY+ékBwLd­ +šáP6á Št¬èŠ*¿~(gKJ¼¥Ç@X +j4§6+Aù'®òªc^ª—ü~„á_´³ìôFþ!ž ´|Š&¯ŸÑjù$ÿû?²�2 +endstream +endobj +580 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 579 0 R +/Resources 4 0 R +/Annots [ 581 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +581 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 570.123057 101.433071 551.373057 ] +/BS << +/W 0 +>> +/Dest (cb71-1) +>> +endobj +582 0 obj +<< +/Filter /FlateDecode +/Length 4847 +>> +stream +xœí]ÛŽ$9}¯¯¨g¤M|¿Hi‘ ÄÒ „V›)ç`´?ÿë;R9;Å£ò‚*C¥´TÞO1UК˜³¤‚>:㶪3\N^RÁ gLT fXµÝª2Ì0Q;I3töQPi;´QJÔÁåœ5‚Nû)ÀéAÒ=…”Mu:�¤³v +Ñi¯%]žB>I:[|VZÒyØâµsJÒÁgS”t¶Ø`•¨ƒ-&E+é"l1ðNt ¶]IÔÁ”–tÙN>'çD]†N¥˜¶:£ü䓵JÒi=y`ÓŠ:Œ(tRˆ‚ÎÀ– |u°Å[e$�…-?’<ámLI­†F·UVK:[Œ‰NÔÁt¾Ä&ÀƒDAñ’Ä&ÆÉeã$0ÉN.¹$±€Iyr1Z‰Lö“ 9J<`•†Îh‰¬‚-Þ‰ ¬†-#WÔÁ›�ÄÖÀ$�¸ÀZØbœ•¸À‚mÐ"q�Ý:•µÄ|ë”X.ÌTX0®MÁI\`A¹€R–¸À‚s-¸Sâ ÒÅp�X°®õÁH\`A»Ö¥ q�ïZ§•ļk-rŠ:ØK\vœ¬NVâÞµZE‰ xÃÈH\€^�€Ã q°2™””ļk’r8𮉘D]œ0­Ä¼k<š ÍÜà]ã•‘¸À�w�3Aâeÿ(1ï‚B¼À¬Ä˜ï¡3Vâ6„%xð®Î˜þ„1 ¶štÊAâÞÕ Ý'êò¤#<.Œ[xyÒ!d‰ ">“•‰VœIÜ1P ^�¹UÜ2Pà^ÌVQÜ3P _Z#‰›0+ËÄ]L«Pj%n(ð/â1·á„y÷‰oQÀ!bÎL‘™1,¢û¶æèÉìN²yì_;ýü#&ßóßþ}zýYÙ)«?BIí_a˜Œîöˆ¾5šoQ´)3‘YÉCFÄÜ�Ô ÅeÓ�ŒÄôGÿÎÛ+Ëa8™ŽÜXÚ  a¦–úÁD¥t‡E1Ö†æÌnòÝynš!äsû e[»«x½ÝW’­wçy/[mëÖLIKµH€­i ¤ Ú wfyG (,:Ť±Ùëc(#^Wn•øWN €ÅŠyo¹]2ó‡hºñçߟ~þ‡?ýõ‡?ÁO^OßüB)g~ù•Æ_û²ta]_óÛå¯öÍy3),™ Uבz,ÏÓ!õz\w �ãøçhj=<¢ˆqš˜~DúÈ�y‹È†Àa$T¤|É×�7´ÿH]{ˆ4=¾óô0 B‰pk¦?˜çÙinÄ„;³î8ë·^Ë[Yã.;äQo}ÉðÝ ¿ü!ØÞ¿R>˜çé|#V}ï åd�³m‹)_X¬÷>3> ÂwÐÛãPzèÂ9,Õn­Éæy:ôÞˆ]oŽÿ÷CøCè=£æZƨDðIÓ…¡M¢½;h|`×ñ`ž§Cã�øtŒö‡µþØKeM]; áÇëeV_-ûãÂel_ƒd?Ž•‘kÕý{ó<ríõ8öÓb¬¡q�nƒBý>üú)ñöÕýƒÑOcšœkØk=˜çé�{,~m;IQöèˆðŠ.ؾ'í®sŠäÖˆ(;ò´Gû:ïâ—(áÑü/lDŒ;I,oÛñ’æ�ÑN˜—†²Ý CäèçM„´ƒÔîuÌótH½«~bÇêEË8ñ¯s”Ú—9?Ý'9­Õ7”CéÍ»Vœ8Ìcžk{¨--ŸvÚFmú¼+ÄÄ>ÏÌótˆ½ÏÞØ}¾8ïÓ#™§]-ÞŒZd4»b܃yž ÍîzŒû©«)~§sä¬#wmW³°ë=\îñSï¹óß*§{öçgèïŠãM<Òùü#y}ì³Ìótè»§þ/òÜ=;UWйY)]X�;÷Ò>ßÞÃ’yLzpÅu0ÏÓ!ùÓö\’H~�½ÆémÐs9›8|ôÏ?úlyÆÀ±Ñ0Ž¢¾âÛA/‹O�Þ±=˜çéÐ{ãÙб·†U‹ô$ʸҩ{Ÿ #Gñ§B8‡U´™�2ïEü-Ûï|âF´iî[6Rº{ÎKF©โƒyž ¥þÆs{ˆ«;<ÕÓ/ !ã^ꀤŠÖ‚L§6O~é=ÜŸò�ÏbTå&£A–îR�åy:¤^�kÿç`'`å5[ýÚGb{âºÌ½{ŠMn¸Ý;h}äûF?Í=X=vm=÷ºFÉêYM­ÖûªuÜÙeo=3D#jé¹úÕSƒi�®<»:îÕ¸îu�ƒŽ5eïwgo¡Ž,U¿spLj3Œ¶bsdíä‘Ðpÿ¬Ù¿ó-ÿÀžìÁ!.3 +tXª «ºbœB¶tþíR—]|ç‹? ¡syúÛm9ÁÒáPté¶œÒöêçP|sÅŽ¤ížª·Å]Xû¨OÌ<ŠÛè Ú œ Y({Æf/s�µŽ3ò31Œ¹Ôþ]lò•IæÏµ­d�‹=miÿ‚Íb{^þ¹k5Í+û阢¼óþÕÒ?žÙ¤Yº¥ë.áŽßí蛆!Íl®xˆµÌmýºækãEö•^î:•´jn§²kŒýÐl +¬mÕïºû½¦oö×ñ›z?×r[~†3_«>óŸ öv~âÜ$ñÒš“<ç¥êŸ$´Ù°ÏA­øfij7Ý'åoG™õmõ�îy‰gªoë¾ãå,6S¹Væ‚‘R¿¯cöªãÆ�ƒO´¾–?cå¹Î?óâz\Wnãªlý,,ÎåðÛCqÕÁ<ÉôŽ•oöbA�¼Çp•o7Ò°Tz¹5hÙ”=wÂn…9L*ÓÁ¦C…•jù–3A®ÞÞ-Ñ`ôQ(Ñ¿ÞÊíR98Ñž[¹}˜²GŸI¹ùc²-Œ´7=dÊûλã¡/õ(ÁÍÖ;[κ¤sÿð<�ø ×…(·óVnê7pž5ïçy— FYrö±éóÒ WëÃh™“èlYÞ bàܶg�Á*X³{Ø6À¡“Ó3�QöA&͸—ÓßOeš3ÖZLíq}X®>ÿi~‡ßœÜùõüçy7ª±…iܺó™Œ^Þ”ŠéeNU؆ Çh¿‹uêi}EC›Ç�a|ízvÕ‰½¦Ô�AuÓr¡ï>dbÓ k´ežñW„—Á‹-�ùÔ¾éö|ikãhqL'‡W«pÁ›ƒËÔu¶OÉgV$®(iŸÒ¡u†eÄ/—¬ÂÜ-[™I€ä•4דýŽw…¥ºØ #èÒv�ëÓ,/ºÊJ+X„À–_ð‚�æ•æ•=‚ѯOî÷ÅäPGIµ7é—¶†‘´ž,µå2¬/Ûœc˺²Þî¡V–ec϶ §�Z¸ÕÇ(“¦žmIày¥®ÊV•Ö‰¢ÑdªÊZ‰±Ú–lÕ-¥ÅIôRl1E—þ�{Úó^iNô¼WÂ&-•[g¼-ÙyçØ[§zÊK&Axî&u=¥­²mÝn]w�mϬ®zdªz6¿Iùÿ=2væ<ªþ”��ú0Q;­±å%˜*…qô£èÛ¹;Ïõ½’íŽHÝ+á5¡;&g­Šš^g*›ðvŠóv]ÁŠª¯:•³e%6é>[A�æÔf'¨¼Ï®> +endobj +584 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 142.623057 101.433071 123.873057 ] +/BS << +/W 0 +>> +/Dest (cb74-1) +>> +endobj +585 0 obj +<< +/Filter /FlateDecode +/Length 4736 +>> +stream +xœÝ]ێ丑}ϯÈg#ó~fï6ü0@/Œ…ᇮì)5Æû°¿ï’x’˜™Õeµ»��©R ‘‡‡Á%Ê«Àßwÿ#‡¢wæzûåòëE Þ +üS,Fõ�øx{•ÂøÁÊ肽þBí­òîúvÁÍa�üíòçß\þ¾Ì#¯jˆÑ)i¯ÿø‰TF>x/,£ŠP ©•µƒ÷Ê:Fåä€KŒ‘SÁ ë�2k•‡&Ë©`†Q*0ª3´ñR¯Uf(/ §‚2ZϨ¤€R Áê`ˆ0F+F'íàPéŽÓ)9¸Udu:é§ÓzpÞH+9]œs6p:[l’ÓYØb¥1‚ÓÁ£ƒçt¶h§«ƒ-*xÍé¬uJØÁ­§“r°À¦fuèQh$ç�‚-NØÈê`‹ÕBq: [ þ8xÂjÓ[õn-´ät¶(å «ƒ-h|Ž”ƒ-Â;ŽЃâ%Ž”÷ƒ‰Êp$ ‚L0�câ`¼× ¨hã¢çx@ �’h[¬qh [ z.«ƒ-:Ž ´‚-HÀq�Ö°EÍq�Û …ã º5"JŽ 4øÖé8.Ð \˜)8.Ð`\œá¸@ƒr¥Èq�çjp'Ǥ‹îî9.Ð`]m�â¸@ƒvµ Žã ÞÕF +Ž xWkädu°æ¸ì8h4Ǽ«¥ðð.º‘⸭:‡Žã`eP!Ž xWa8.0à]å1°:? jŽ xWY\7rƒw•ŠãÞUF9Ž ”ü#Xo¼ +±¼;[@°`¼‡NiŽ p²AÁ-á¸À‚weÄðÇôi°Õ CtXð® h>VéQãL¿E-Ò¹Èq�ïb ÒXð.è3p\Ž0¢*Ž ,xWjŒÔœ¼+UXð.üËqà0H8`|¤tY]D �ã Þ-)Ž 0 +"€IX�$ÉqÈxðC9.pà] ï‘ãÞVkŽ xW¸=¬¶è 8.€_º-Ó§á¬B�)8xWH´0§ï +á#ǼKÃ&ÇΓ@Ž `à/Xq\à‚¢÷ŽãtpùX�pl9.ð Êbu°ÅxÃqë!ê8.ð +¶h¥8.ð +¶Àeà¸Á%¼ovz[v~`` ˆ3v›?ýrùíŸþüý÷ŸþXÿôzùË€g‰kýü¡áǹýî; �uÓ÷(ûŒc;›0›9�_ÊS:Ê—u/Uz9餞¾5…,íô[ RÓ'•ŸË›�mSNÒ�yô¬SË4É:ÿÖ5’]9Ÿ¯äš/¯µoÌOùþzýô‡Ëï?•OMåæ6r„�A7ÆÏ0MTŸ@\Ô:ÿóŸßÿð_,­Cµb�•®š,˜J!(kª½H5‹Ïë”ÖŒåW‚ßÀlSSàˆ€/¿Kö.`Ÿ-áÞ‚^1fEbíݮҙ百ò5º�wúHÆ�j¾+ŒÀáÄTkþ6s²:[°/?7i¾Ìß³\©ÒWÆÏ—ù;Vi_fLÿ´ì†é¹ΘnûAÛ‡mäûuê£ù|©Lߜק²7P†¹fFŒèDY_ž“ ¬˜ 7{eæu‰.33¡ Û¾T­•jùKi%̈¦Šask…e«$F5¾BÈO nøKYÉÎEyjûÜ£î™m’9Oöt¾ô;×ÃkYc�VLo|«ß@jT÷#µ/ÏÙ�ªÄ.r‘²á•¤kÎØåšÛ= îjZÛ6ÈØòCƼ·¥}£ •_B½ŽíIóõ%?)ëæ·šóÄ�ž'+?Æ–úË>FËŸªäÛB&ÝãKª‹hOà�Ù™çtÈÔ»Úzj¹öjdí¡Ä­k}Á}ŸOÈwï�,YÒçÞ –e4o °ø~ƪA`²NˆÙGa_žÓ¡°Ï_Ì-c*$lqÖËz^µ‡Ô–ûXdµ-Yséå¥2FWôeÊ?ÍL–çoýâº<¶m]ðdª»[u>¤ªýAºưñ>òúòœy>dÛ’~YÓ+ôU-»É6~sÞ.‡™-¬x‡ÙŸ±ûuߟ3ª)æC%—×òõ{íz+Qâ§Š²ûèíËs6ôê¿2Õàëò;óÊç¦e«YËßÕhù¨9ò"Õz#/³ÏÌø´ÙÓhcJ-OöÌä¶ìMygu;ç½gööÞÍ=½b‘Þìs­6÷Ïá;óœ¹û>ê¿[DçÝ8û#Ñ�ÐzØû6ÐìîŸ÷wæ9š÷ýÞ•?zàAp£sFÌNϨ£C©…©·ØÆ_móáü™d/kÛ +GÞwÞÜ[·¸µòIé¡!ÇÅBûhìËs64š}?vë~a͹Ô2Ï̧U8nÝÝ™Zò‘ž\ÝYXÄ![¡?y¯Ò:"kcº§Æ%™æµ3Ïé�y௾ó¨ý.¨º+öø¾áÙ¼Ÿ ÔV±QZ`Ù³T¥3ÏéP{O}Ö7¼Ûßz‡{U¦Ñµü·…ÖÖcI\Ú\gŽb=è}påçÞ¹Šo ô�{÷�yN‡Ðƒ¸kç}£vuÒŠÃÒynó¬(NwWü’Z,!ÚÌéÛó'dô®¤jVm,îuØ|/ÛÕ#µ¿Û®àZ¬uhWžÝq·ÔŸÓD;Àï4´àvµ}yΆZ{à§ +-õH¨å~ñ:ù®Š>s«(·ßÊÛk„Öü·· +&sl{ÏÞ­ïTlÅbYO ¾÷4÷Ü1]3»l{ÕÑR+ïçËÎ<§CÞÁ}úf~»êëLË.î¶£k»"¥ºk¨êùðV´¼Eì=Ñu³ƒ¤o6¢¶�àÊ¿ôa�ÚxwqêÌs:ÄOŸð){ÐuOÜrq«Ž ø¥M_&ŒŸ'îžæõ§Ä·ÄÓ·æ:PÖö’£µ¢¶Š]öΈ:óœ}}þæÑ½vÃÍR6Ví?ì�U¾â·ÇsÏôä ”_ŽÐQG«Q:óœ ¥îÀ¿ü +ÏoŒcžYÉ~ž_¢ D­«–n¸¬Ž‚­ÖpòþµF�yN׺�>\hju£¯Ž³ \›¢ƒ+# E²iÆ H÷2s:Ê“fI¯É;¿Íç}©ò™’¿.+?eQ§ý<•A†|^7Û’8�ò„ yãŒç=®ƒÇW}·¹_}yN‡¯ëÑ6®Úê®6v.ˆUÞ­�{®£±£=NO åóÌOÌ�¶ÝfL�3Þ Æz`udgžÓ!êà.qx¬e)¾ñ-³Ïsöo *Þ?ìÌs6TùƒU‹ÿbÞ¹»uß�oæuàû¢^�yN‡”ƒ»¯U\ñ«ùÆ+´ÛuQ=qYîÉΫ«ï%åWSH«nòsß­mqá»îœ¤xík[½¹5vgžÓ¡õÀÿúÀ9üWC½k z"sw¬îãmºÏb½>¢½g¶ˆ¤m µŠlõ>oÕ™çtH=ˆ†=g�¯&yÇÈÛ·5Û@ä+;óœ ‘¡ïI–§V#ßsGá#{óô÷¿ ‚ÃѽÎ<§Cð�¯úNëéŸ~WÀ;?CµiS—Ïx„o ·ºÓÚû<@gžÓ¡÷Àwý†Ÿò{—^ó¡«7Ðø@ܱ3ÏéÐxàŸn¬†^=õa ×äYCƒ„åÚÔv÷øN8)V륾ŽÝ@îOdwæ9rcß܇Ÿ9ýh„6ëɸuaïÁ¯ÏøÛ»ñƒ¶žÚ4œˆµvæ9rûü×{ß(±@Ñ�AC÷¤èúbý<ÇAÍšÑ1"O1ÚW±z†ëîüõªœ6’Tåm×óŸá­ñ�ûÜ�yN‡Ô_µz³êŠßª·•}ô{T‡]{Ïeµyöb¨÷¼§‹®éëÎ7û€?Û™çtˆ}nõáùü¼ç=™ÓÎ|w@|ÀÇíÌs64£¶v øÙéÔþËDÅámÛÅ0¼÷*ÊtÓ½þ$ùüÊàqidz¥pº®ž%‘_­+gøý8¿êÞ[´”•zܢĉêÍùs‡I ¶~Ï~zü•þZ •eã”´Ç¥W$EOÛBpïå×LܦuãÂççô¤ùÍŸ*½»{¼{>�ßvd1¾ÇÛüTši|�·›ÒÓ{¼©ÊÇ1˜Òºé3žkþ=ž'$&˜Ë£ñšòÓ½N?éç·sÙ•=f~§x¾›®aÕl¿^ܸ�‰·´. RÑž—WgZbâã•¶P B™šIŽ+¯9Ç�BÍ©æÍCí'F{ÉL;‹Vsú_Çþå"£¨þ©·Oý‰QŒÁ˶ⷠmôh±1ƒê“pþ)ò¹ŒL ³ìv¡]b›RÛAÌ?c>9½„|ú©lºÊoS6ڀÈ”H�[PL3Bätr-¦«ƒœÅ´Yfô|ä²)Ö%›!,'4uÚrÂ’ñP,µ¨„v-UqE¬L²GÒæJ¹ê\fÓ몓Uó§´ÊW͹'¼]P¬n¥o¬”¶èK§Jµ«D–éʨ˜¥6¥Ì br;1¢Û…~'Ò© 3ë«V£�Ž&aH@29]LéÑí¦›ÏfsKùœ*”¬1Õ|1¥@]‡\ñŒl¬£Yêi÷ߪ��~.ÅŽZ µµnÔJx»X“{b¿]¬gRÛÂÂ&èÕB]�7‹ƒ(x)RZé8ýB×L2Ú&†þŸ¨Âf)1ÏøƒvR�éõQ)„úf/+©–»Ì:†«i|I[U—ô>c¶®/“žH7§Î5¶�VUVÉ}LæIeòXŠeF]…¥úÉ\Y E2űÍP~[ˆ‹�6wU€=ædw›Ï[Ä.sç[-ö¹Å%íÛ•íÍç­0Ÿ„·q`3­˜ R!E¬DíJa•°R(âB£o£8õÖÌN´qúY:7âÞ.?_ÆaNi«"~8-iÊÚË’×ÿGš?àó¿sýSÚ÷hÇ•Èl¡2·.ÄõHF›‡N1mbœ„¹ÛTBe*Ú/bJZ›Ð�Çq¥*¾6%»(ÄžRÊÌ 2kk¡-uX‰U†®’ºª»#¼5µ˜™gÛ¦ ØÓ¡N‡b4형¬ÂA}98 E§Ë�|­N‰#JZ†tIo¯2â >)«c±la&².$W=Ùoê¦ÐTVuP¹t¨‹Î”a¶>u’�WQ%� ¬ëƒúÄFÖ…Æ…=ŒÑw¯§Û}6Ù¥@ÒLíYúVKó…‘4/Õã¡[æ1G_é uÞRCù\ºê{:;9¥k×Â,jŒVÒP²Í l]¨I²E¡i Èt™H²|FŸlrs¶T-ã¶–|ö)Šô约mÝ*¹mÝ*n•–ΛF¼ì-éìÙξ\�()³/™«sg©))u’­Ë6˲Óh{­.ÃC\ñLEÉfW)â¿GúΔ§‰:p©Òß ‘¡ìˆ�ÚH¯•¾Frw‚sàCû÷zªÐÈÝyöc%ëˆHŠ•Ô%¡9£µðxÛ0á Šx¬¨Nõ6o²Èg‹‚½¤û*€ š«Hи�û“BùÐÓTÑÆq·]í6í¿eÛø�[„OÆ¿Dq‡ +endstream +endobj +586 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 585 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +587 0 obj +<< +/Filter /FlateDecode +/Length 4893 +>> +stream +xœå]]‹$»‘}¯_Qφ›Ö÷,®awÁƆ1Æ?L×ܶ1}®÷aÿ¾O(SR¤22+«§ïP¬§ééÊ}„BGG!¥2K_~¾Óø/9=¥”cp×ÛO—Ÿ/jŠ^á_I±º(ê?à7ú«V.N^ç�üõ'Ø8ÅìM ×· þ.yò·ËŸ~uùŸu}5SÎÁhýç�¤rvŠ)FåU†Ji+¨¼Ÿb4>ª '41gI3|tÆmUf¸œ¼¤‚Θ$¨̰.j»Ue˜a¢v’ +fèì£ Ò +vh£”¨ƒ!Ê9k�öS€Óƒ¤3z +)›,ê"t:Igí¢Ó^Kº<…|’t¶ø¬´¤ó°Åk甤ƒ-Φ(él±Á*Q[LŠVÒEØbà�,èlº’¨ƒ-*(-é²�|NΉº �J1muFùÉ'k•¤ÓzòÀ¦uQè¤��-Aù,ê`‹·ÊH: [~$xÂÛ˜’0Z �n«¬–t¶�¨ƒ-è|‰L€-*‰0‚&â%‰LŒ“ËÆI$`’�\rIb“òäb´ ˜ì'r”xÀ* �ÑX[¼ X [F®¨ƒ-6;‰ ¬�-H q�µ°Å8+q�Û: Eâ ºu*k‰ ,øÖ)$.° \˜©$.°`\›‚“¸À‚r¥,q�çZp§Ä¤‹á%.°`]냑¸À‚v­KAâ ÞµN+‰ x×Zäu°–¸ì8Y�¬Ä¼kµŠ8ð.†‘‘¸½:‡Aâ`e2))‰ x×$å$.pà]1ˆº8a Z‰ x×x4Aš¹Á»Æ+#q�ïg‚ÄÊþQb4Þ…x9€- X‰ 0ßCg¬Ä(l2K$.ðà]�1ý cl5锃ļ«ºOÔåIGx\·ðò¤CÈxð.&*+q�ï‚>“Äàø 3ª‘¸ÀƒwµÅL-éÀ»Úd%q�ï"nð“F qæ·I+@WÔåIå”$.ðà]Ð’‘¸³ð¤˜DÔÅ @Ò€Œ'…8Tâ‚ÞÅôž%.à]å­•¸ €w•CØ#ê`‹MFâÄ5ÐaØ +cÁê¤ ˜BÒ�w•FK:ð®R1K\À»4mJ\" L’¸Nˆ‚�Ä!¹)Ç$.YA‡�OÔ… ×^₨ ð ,Q[\t °ž²ÍIâ‚h`‹5Fâ‚h` B‰ LY#ú—°p×¶ R”¸L6¥ìœÄѬÇàUIÌ”"èZÔ%èt”¸ F7a*Ö`-5% z‰ @ð…KÀ è´“¸ fØ‚¡"q¦¢)Dæ’NÃÙ Ò…Nk‰ ’�-ˆ%.H&a•”Ę¡±–„«%�S´ÎL$& +%.À0ÁJL)ê` hBâô-¶½ÄXü`±‰eލƒ-Ö;‰ R2´ÜL¤[Œ2›´ÞŒd[ñI\�U˜(L–¸4�Rd�°Þ4NâŒKZo&‰ ²UXob‰'ŒÛl­7£ÄÙÁ�EÔÁMY·à$¬7ÁN’.À“�Ä9Zo&‰ f`½‰ˆ^ÜH´ÞŒâvx×g0“¤ï"2 àëMD¶ÒÚ^�x}D|&+­8“¸c @½s«¸e À½˜­¢¸g @¾´F7 `&V–)ˆ»˜V¡ÔJÜ6Pà_Äcnà óîߢ +€CÄœ™"52cX8D÷mÍÑ“Ù�dóþØ?ÿvùõgL¾×¿ýïåõWe§¬þh%µC|…a`2ºÛ#úÖh¾ X›b,{(1Us7Kƒ—m62 ý»n?¬l…©d,rc%hõO©Z*÷”Ò–ÁXš%»­ç¹krDL�¯íƒ–me>bõ2' ¶>œçÃm ˜Ä°hFˆ¹®W4ò^â�í|V/­ˆ7õÒÞ‚ ;ÆžÌôÁFÛÖ£™:¡t(e˜ùˆOÒ-MýÌä³| Á + xD„il64ƒ‚±öQn•ø7Ÿ. ÓÅŠyŸ¾]2óÓiLŽÆ_?ýtùõïÿôßþ~z½üå?”r?~ÿ�Æ_Ÿæ¿Î/—k¿\{ÍdqHæ¿´ó\?׿îµëîÕ…*ÀÆK»ènCy£]y+Óz(£êÕüK©Rý¶¶¼mQ=-·Ù’™�QhÃ�C½·Ež{µ¾šÆ¨ÅG£�›o¿ÿëõÓo/ÿùi βªZÀI¸q™fÖC<ŸËò5xþ%`œó¿Œ÷ ô¼›¸ð†}¾õôM>ú�ç}ö2CÖ±¡0¡j—²2téŽT"ÝdRº,.±{2ϳ�W›CÞôVEVÐYϼ®{Ï}^“Ö† ^:ɬ¬¢Íì”ù(âïÙn> �Ëp_ØHeèGÀݺvPjÝã(=—çéPêŽ9vqj@Ü CHå†Ê ’*Z 2a�¶Ãô|Ä—·¡l�M7¢$u´¬Ðö‹LÝ=?í •ªÊMF»äÜ=¤žËótH=j¿vöþÖ¨«ŸÛÈQ¨?(`å5[ýÚGb{âºÌ1šiþº íÕ¼ÊÃГ+±“yž­Ç±kë¹×5Jˆ_›Gu÷2ñ�­3 zfàŠ1Qk^¢Y Ú�{cy„¨×uþ :ÔX¿ŽCK»†‘EeÙð؈3ïmÅæÈÚÉ#¡´ng³?È6êñ½„“yž Áæ8~ùË�³?ëq’ªçyW/EÆŸRG{ü2¾â(Ü J3.d¶RвY!íÕµŒóÜj™_�¿°4Ã|¢^w�lçâ“yžÉÇ1®Ö³�žºgžùäÂZÖÀ¥Ö±4fhŸcuè¡þ!FmˆCÝŸ�ÆR§Ýæ]1�ŒéwìôžÌót˜¾³Å;ÌÇ4§¿F†ugTF½Ó×-ñs™ÄìSŽõõófþÇȈaާ1<Î~ˆŠ�f£1ž‘0ÝÒ|YÇC«ƒ¿Ä…·SÆo�u�¦c{~¾‡ßsyž¿wövü®ü<ò4‹]K$‘Ôz•c…Ǧ¦ÎĶïÛiR»{)Ža·��qe)§ì¿Š;`m–o7œ©'Åz¢]²{³Ö9:Ô®M*=ñçÿúá7ÿý;¶OI;4´¦k7ZØg7{Ã4/#¶!ž<<§õÄ@/µuóõFž†!;—ÑÎó.Œ²äB>À¦ÏK/Ö1‘2'eô€w‚6–üe=Y®»”l'}z:-Ós C¥edï�^ {°3�[N3—Ów2Ï“,¥÷Áä#îSŸÕ¹#5xF›âKt¢ŽåÍSðzYRvIO×//aDô…ŽÐ×�gdñ0ª¡�OÁIœ‚Ë~gö)ê¡Â#äÑ* м5çŽg�ÌólÈ‹ôÜÅ>ò?˜«…4-/ýò—~ã|-ê<;,ðyHóeù»È�Yôõ÷Ëò7³´/ßzNú¸#*‘ïˆ9yðdž'A;̪�PöÈ•£­<~e<’²wÌÃñíáFýs!éŸß}H‚)·†w‘êÍãH=—çé�ùðk�r¼ûˆÊÐÛã¡Ï bøaÔÛÚ¾bÇxku¸Á¿IKû +¯vm‡ÏfÉ“wFžîíhí¾±ÕÛÁ�†]dÆÆ‡ôdºs0 ÜCæ¹Î.ϳ¡0�‹ÅÕÆg½°—á&¼„Ô‘ûDdí°*H ¾Õá­—9ÿêÆâx_x®Ä¦}[W<)ìn¹;1dâñàÉÛå'ó<òîÄ�cOŽÇFô±žÝÌd;Ÿ¥è¿Õ#¬6¼støô=v¿ÇsÎ õ×cÛã–÷/>jwÐËbDm¦¬’¹»Ãs2ÏÓ¡÷N\9^VDþóгüòßq´|Ë v£‘Õç�ToCüè£+¹={kž»«ºÄöØñŒ³¿%º+Z4›Ç×ý'ó<š�ãÞM>M�¹”s?Yõ–;x¦žÁ)÷W昩ù%Ý�ݽå<Îrœ·—ÍËlÝŽ™«~R,(v˜_µã¿¦öWó‘[vl¸•_�ñ2{VGŽ©N_Û°é¶Ÿ/¡¼ÙS—·;«�&mèë®ÁMôTUÌWz›hRÖéÚMº8V_wr–/Íø¹¥Z¾GCÑ«µéµª¥ùÅ’þçÒÁ?]tvù¿<[PÞy¯Š8™zÑÅoúÎ'ˆ�ë(Ü“pù¨ZYX`˜Av³Æ)�)é½zËÇþP&š?_[Cù}ÍFï¢tª&²åmŒsÅ‚9ƒÞŠ©õjÒ‹˜¾7"Mv¹ +Í:Û„½@ÇÓö{Æ»bmú­P±êºØ¸j�¦÷ 7×….l¦s×iÖý5-V¯æ”ðvAµv”¾‰Rz[}-ªzר&³Ì¨Ü¤¾¦lâZ? ¢ÛE~§jÑ�Ùô¬×è�¿³0U ¹–.×t‚èvÓ-¥ùÖS±¥J=k®žï¦t¨Óó*û²{p(Òá°1¢lý¸Óó0­¯Ub¸1áíâ]‰]üvñQHí;W(_¡Ç…–•ÛÄIu¼tiLÕUšUFoL¥ÿgªðMJÌS>h× Eo=îW½›M¼v—‡Æ:Nò€v±§eîÒ16Ìr餄ôDº-uóØJÊ\Æä1Wóˆ¤y¬Åº¡®‰‰ÂªWr¡ªF º.ö Êo+q·Ó·¡êU«,hwßÊíâиó�‹cëqM¯°nö¶ræ«ðV&67Š ú©VÒÅFµÙ®WÆ„Ý0�Bw}+â:Z;•÷·,û “fÜÛåï—2Íë =묦odàQ–¾þÒü¿ÿ¸¸ëïë+€çyܨƦqëJÌg2úþžtRLßçS…mØ0¡qŒö»X§žÖW4´yܯ׮gW�ØkJÝT7-úîC&6 ºF[æ ¼ ^l�Ì×öMŸ°çK[GÏîÐË£«U¸àÍÁeê:Û§ä++W”´OéÐ:Ã2₊KVaî–­Ì$@òJšëÉ~Ç»ÂR]ì‚…ti»Îõi–]e¥, B`Ë/xÁNóJóÊÁèw¯¯î÷ÅäPGIµ7é—¶†‘´ž,µå2¬/ÛœcËc/uðvµ²,{¶9}hôЭ.8F™4õlKÏ+uU¶ª´N�. SUÖJŒÕ¦°d«n)-N¢—b‹)ºôïÜÓž÷Js¢ç½6i©Ü:ãµhɶÈs8ÇÞ:ÕS¶X2 ²Às7©ë)m•mëvëºël{eÍpÝ�Ð#SÕ³ùMÊwñß{ÆÎœgØu�RÕŸ²¢Si>&j§£5¶|¢J!€C}•Mt‰m�<œçx¯d»#R÷JxMèŽÉY«¢¦o´”Mxƒ"ßW°¢ê·]ÊÙ²›ô˜„­ Nsj³T¾Ò¬ì[– ¡vIOŽúCKAo¢/^ŠJËï‹ §Æãjû¤üü ´øˆÿ +endstream +endobj +588 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 587 0 R +/Resources 4 0 R +/Annots [ 589 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +589 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 438.873057 101.433071 420.123057 ] +/BS << +/W 0 +>> +/Dest (cb77-1) +>> +endobj +590 0 obj +<< +/Filter /FlateDecode +/Length 4866 +>> +stream +xœí]]‹äÊ‘}¯_Qφ+ç÷,†kX¼øáÂ,fYöaºîmÓwáÚþû{"¥Ì e…JªêžqÍâizº‘¡È“'#C*IŸ~¾Óø/9=¥”cpçËϧ_NjŠ^á_)±:(êðýY+'¯sHþü3 lœbö&†óÛ ÿ ‡¼øÛéO¿:ýﺎ>›)ç`´?ÿí'R9;Å£ò‚*C¥´TÞO1UÐN1gI3|tÆ]«"Ìp9yI3œ1IP%˜a]ÔöZ•a†‰ÚI*˜¡³�‚J+Ø¡�R¢†(ç¬tÚON’Îè)¤l²¨‹Ðéh$�µSˆN{-éòBðIÒ9Øâ³Ò’Îï�S’¶8›¢¤ °Å«Dl1)ZIa‹�w² K°èJ¢¶¨ ´¤Ëvò99'ê2t*Åt­3ÊO>Y«$�Ö“6­¨ÃŒÂ …(è l ÊgQ[¼UFÒYØâð#éÀÞÆ”„Ùjhv[eµ¤ó°Å˜èDlÁàK `lQ1H€4/I`bœ\6N"“ìä’K ˜”'£•hÀd?¹�£ÄVi茖ˆÀ*Øâ]�˜ÀjØâ0sEl±ÙI\` lA‰ ¬…-ÆY‰ ,ØÖ-XЭSYK\`Á·Né q�áÂL%q�ãڜĔ (e‰ ,8ׂ;%.° ]L÷(q�ëZŒÄ´k] +Xð®uZI\àÀ»Ö¢¦¨ƒ-°Ä`ÇÉêd%.pà]«U”¸À�w1�ŒÄÕ 8 +“III\àÀ»&)'q�%@ÔÅ sÐJ\àÀ»Æã¤•¼k¼28ð®q&H\ Là%Fà]Pˆ—ÃØ‚•¸ë=tÆJ\€Æ&ƒ°DâÞÕËŸ0§ÁV“N9H\àÁ»:aøD]žt„Ç…y /O:„,q�ïb¡²xð.è3I\ŽŸ°¢‰ ñU"ÖÌé$3¦…Ctßö½˜Ý(6çÇþöçÓ¯?cñ=ÿùï§×_•LYýÑJi‡ø +ÓÀd ·Gô­qú6€ -ÌDRd! |¤s7Rƒ—¤‰å�þ�¯?¬,‡á?”îmë>cŸ»Ç„Æ3�rÂöu´øÎ*h0u‚Õ6 ŒÍ†Ø �C\©Üªðo?�ÔÅŠ9Ú™ùX/±vÆŸ?ý|úõÿôý÷Ÿþ0úôzúïSÊ…ß|§ñ×›å/àà@mî2»Ï˜GhÑÛu9÷ºü­åj;Ð"*x¢GØâü¢O‹>.ÇnþKeJù±ý¥œëú­ŸÚž_ÛQÛ';î±¹œc\·Yû¨}#¼UpOù­öûñ¼^˜/GÛ~dõâ cþ×ê7ÿsþô‡Ó¿Z±D§ˆ› p¾#¾‰ÝcUÞƒÝ/Yluo@Ö+*u˜h(­¾]F½RÆ eéwn±‡l9.e_‡þ>Ïòjkk륦2Üf¬qJÛµ Â~hŸOÑÖe +/Ó¶”sërã”êýɰ£¬ü½œy°Î³;£›È ë‘¿šèÂÈtŒú:? ä¨;ÊÊè�äRëUä�ˆÝ+¯˜ÌÝ@G¥Ùn·è~fÉHøž�ÛØN=fí5‡µMGúÚD°í4ˆ0‡1„=«ótv7¹s}]yÒ#¢„%ïºFni£ŸY`Ha³*®mjèøqFAù}�µÅï®Ê/ë¶Œ^Úñ ßO_†óÜAÙ8Kú:°�¾@:JB˜¤�ßCß±:O‡¾cÁ憕uÅIbGîx8c�â·Çsï™É(í¡"¡)¢ôJ�Õy:”îÄ—G·l4ƭƈì‚0ÚÅåwX¹R†m5Ò—ºGôm�®áñ%À“Ù݃užmtÍÁ. ^ݘ«e7�s3´c}e1iÞ1Ò½ÌÇ’ŽêÔFÕ[ŠÎ/K»/¬žëõy_e“L+/ûyîƒ6 ­Ý°ØR9�ê¤yeÇóç!ã«GKÇñu¬ÎÓák'ÂztŒÙXÝ5ÆaƱʇ�ñ‘óì�ËùXÖ>[³ØvY0]v¼Œå`¬cužQ·£&BÅ##Kù�o™}ÞgÿªÒý;ÁƒužU·£œ6ïÜ=ºÆ7ˌډ‡íY¯ƒuž )övÄÄóŠ_,6òžmGWcÝËönoÌË®²i㎓Euž—û‰�cµós—=š¾ë²IÍ×ÞÌÆm •ÅRÚLY%CLo£õX�§CëNüõ÷ð_ ºn}¨u½»3sÕ„6ƒâèêDÍ…\•ûÌÊ�ypßíÝåU–ÙòfRÞBÕm¤«ótHÝɆ=œgd#<¢ˆqšXþ3oß^Öl‘=¾óôE„aw¥?Vçé¹n¬º÷dõﺢð5gÀx­í›ÌûÊvd÷Öy6»�Xõ#¼�–{�½uÝžVØë}‚�Ōςð ô²+­!c̱UÛÛ“¬ótè݉]�\÷ù „5„Þ3kn�Õ>iºñ¦6ÑÞ 4>�wXçé�º«~bÇêEË8ñ¯¯î¹x™ëÓu¢‘ÓZ½`æ€]+NÖˆ±Î­j+Ë×…�s£sú²;Ä Ä>Ϭótˆ}ß݇Ïç½?’yÚÝânÔ²�æb܃užÍ·cÜ÷î¦nÝ=}äªíjv}„·¾Õ²ú­rºfÿy¾÷€þÞ}Gä›É2úÂyÖƒuž }a'NýÿÈs÷dªn ój§ta}Þº‹ý‹ä6�ÌcÒƒ;®ƒužÉï˹~“Hþˆ\ãtþåÔ²»ãðѼþè³åƒcßLÜ@/‹O�^±=Xçéлsoè8Zîå®ïªVTŒÅï +áVÑf6Ú¼ñ{¶ßyÇ�hÓ2Ü�l¦2t?vŸ×J¸¯à`�§CéÎ}÷|;z绲ã^¾ Ó©ëoNåî·|å ²U¹©<%`ïÉë<RãÁoýëÊ�|‡!Ïíúµ�Äó‰ë6·®)ÞóŒø@ö`�§CëíØµ�Üë%«{5µZçUë +¸‘eo#3D#jé¾úÕ]ƒi]®Ü»:f„j\÷º®…Ž5%÷»‘[¨3KÕïÜ1ã̳­ØÙyòHh¸~ÖìßøJ| '{°ÎÓ!øvüzÏ“4è IÕó�<4JQ]ß•�d{n=¶‡£P|¬R¼¶•‚–«ÒV_Ë 0À­–ùµñ8¿.7¬'êuÉé.>Vçé�|;ƵÂ~öêšÐSŽìp�m‹ k[—Zvåõ꺜c}ì<‘I´a¼ú=~WâÆl,}Úëº+¦‘³õ@–÷`�gÃt:øÍ/vgAý®_Ã:�3*£îŒu‹GüÜ&1»Ä”WßÍ¿1Î[×’·¾³"]•¢9<®~ˆŠo­Fc<#azõ08¬þW~ž2~Ù½±š¦®áç=ü«ótøÝÉí +ø]ùùÆw°Ú�.y+<6¿s ¶ýè'Í9†Ý6Æü +ûÆ¥œk«|{ (�¡ØH´CŒÿd] wlÐcvƒ¶Ú¤2ÿõ»ïûûÿ`yJÊÐО®]kaŸ}÷ˆižfmC=yy.뉅^êÎÇWò4zš{™<<—Ÿ={íUo{ÛµMUe~.×bî¯Ù¾ØSú½nÏ”)?â⬹‹É«ª|ÿ™G�l,³<Íg«.Koaé&¬Ú÷ôTcKoµYÚ·‹·=ñsZ�‚œZæ•!ÙTäÌuçÌÔ2>žÙ¤Y¹e kþOö»¦‡"¯�Ó@¤™Ñ±6zm@›j þ²³ôrA©”]¦ ²k'ŒÑl +ìäªãuw|-ßì�ÃÀm ôL�X~=<æµ-­Š=K¹­§»Ev–Ïë'/×çŸég\û ¢Izë™MgÄs.GzP¸ÄÂå™ —9®(§ž3ççCzÁæ s¹Ÿ‡ºº‰þÚÅ�£y¹¯Ís—À²»¿Ü¯—xÅõ0”ö=ÂЇª y^î#)çp5l¿œByÀ½./9Q!MÚÐ[ÐÎÁMÆÆ|¦‡ê'ìct&]«Ï5Ë»ã~i¥–×É)zà ½]`~×;XÊÿRøgP=h¼’{yõ“*âdêA¿�èÕ_N;×Wˆ1 —�ªµåt[pªì‚€0Ny,i}}47[•¬¯�¯gCõ}­F�dwª²å¡äsÇ‚5ƒ¾ÓÙ«I/bz}Zšìrš)>T›!ì :^¶7Ø+UL诅Šu×ÅÆU{4½n£¹.ta3�»N³á¯eMdÃyKx9¡[;JßD)½´©6U½kT“YfTnR_K¶qmœÑå$¿Sµi‡Álz6jôê‹Y˜*�\+—k9At9‰å–Ö|©ØJ¥^5WÏwS:ÔmjŽd¹Ez$›#ÊÖ�k1$m¬±ävܘ+áåä]›‰]üvòQ(í;W(_¡Ç…–µÛÄIu¼t)=éhþ„©Yeôâú¦ +ߤÄ<åƒv Rôò�~Ô;¡¹ÙÄk'qyh¬ã$h{Yæ.cÃ,÷—NJ(O¤ÛJ7�­¤ÌeLs5�Hª‘ÇZ¬Ꚙ(¬ú§q%ªjºëbß ü¶w;}›ª{í,hwßÚíâиó�‹cqMoriö¶væ«ðR67Š ú©vÒÅFµÕ®wÆ„Ý0�Bw}+â:[;•G{.û$“VÜËé/§²ÌëMƇ`5½˜ŒGYúü”ù~ÿzrç?Ö7aÌë¸Q�-LãÖ•˜¯dôËtPL¯µ¬Â6m˜Ð8Fû]¬S/ë+Ú:n ãk׫«N쵤n ª›– }÷!›]£-óŒ¿!¼ ^l�Ì{Ǧ/Øó¡­'‡n,½C¥Z…~:8L]gû’|fM∊ö%ZgXEðFqÈ:Ìݲ•™HÞIs=ÙïøPXê‹°0‚m×¹¾Ìò¦«¬œ+‚ØòÞ°Ó¼Ó¼²G0úáéõîq_Lu�´Q{“¾qi;1’6“¥¶†õa[sì™êäíjmY6÷l rúÔè¡…[pŒ2iêÕ–žwêªlÕi](]@¦ª¬µ«Ma©VÝRÎ8‰^Š-¦èÒ¿pO{>*͉ž�J¸*KíÖ¯EK¶@žÃ9ö³S½d‹%“ ¼v“º^ÒVÙußnÝw]mÏì4\7$ôÈTõjþªäCü÷ÈÜ™ë Y©Tý)™�ú»£°P;­±åuà*…qôFÇèK�Ü]çv®ä:#Rs%¼' Çä¬UQÓ‹ÝeÞ Èû +ÖT}é»\-+ñ”îs€� +ê4§®2Aå;åzKIµÃH[Ez‘·¥ 7ÑûG£Òr‚ž²vi•>)?ÿÃfÖm +endstream +endobj +591 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 590 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +592 0 obj +<< +/Filter /FlateDecode +/Length 4800 +>> +stream +xœÝ]ÛŽä8r}ϯÈçFËKð̶�5öa�6†á‡ªì®]5fýàß÷ J¼ˆ))³jÚ9îBu¥"H1DF„””>+üü ñ_$=Ř‚§óåçÓ/'5§ð/—XdõŸñÜY+ +“ÓÉGwþ™6L!9üùý„ÿ†Ã¾øûé/¿;ý׺Ž>›)%o´;ÿý«ÈN!† œ JP)m•sSÆyAåõ„KLIRÁ Èе*À JÑI*˜AÆDAa†¥ íµ*Á 4I*˜¡“ ‚J+Ø¡�R¢†("k�v“G§{Igôäc2IÔèt0’ÎÚÉÒNKº4yï]”t[\RZÒ9Øâ4‘’t°…l ’ÎÃë­u°ÅÄ`%]€-½“]„-@Wu°Ey¥%]²“K‘HÔ%èT ñZg”›\´VI:­'lZQ‡…AòAÐØâ•K¢¶8«Œ¤³°…ð#éÀΆ…Ùjxv[eµ¤s°Å˜@¢¶`ð%0¶¨à% +À š˜—$0!L” I$`¢�(R”XÀÄ4QV¢“ÜD>‰¬ÒÐ-�U°Å‘—˜ÀjØB˜¹¢¶ØDX[P@âka‹!+q�ÛÐ"q�Ý’JZâ ¾%¥½Ä„ 3•ÄŒk£'‰ ,(PJXp®wJ\`Aº˜îAâ ֵΉ ,h×RôXð®%­$. 𮵨)ê` ,qØq²:Z‰ ¼kµ +xÓÈH\€Q�€C/q°2™•ÄÞ5Q‘ÄÞ5K€¨ æ •¸€À»Æá¤•¼kœ2x×�ñ(øG‰Þxâdw¶€`%.Àz�±àd“�["q�ïê„åO˜Ó`«IÇä%.pà]1|¢.M: Ç…y‹^ž´÷IâÞÅBe%.pà]Ðg”¸?aE58ð®¶X©%xW›¤$.pà]ø NâÀaÒp$.Àú6i芺4©£Ä¼ Z2`žT“ˆº0HZâ�ñ¤à‡J\àÁ»Xޓļ«œµxð®"¸=¢¶Øh$.€_¦­0§á¬NÊ€)$xWiŒ°¤ï*’ļË˦Ä>°ÀD‰ `à/ØH\à#M)/q�O +:¸|¢ÎO8v�e‰:ØB�$.€c=%›¢ÄÁÀkŒÄÁÀ¸ À#˜’†÷-†°pã‚-ð%.“M1I\œG<†^•tÞL1€®E]„N‰ B  K±–¸±Ô1é%.ÁOì.I\3 Ó$qAH°SEâ,ES4ðÌ%�†-p²%.€§ �ÖD[à J\MD”é•ÄX¡K¢«%)Ž3£Ä‘üÄ®¢Ä˜&ˆ4Á”¢¶€&$.Àøp°í$.@ðƒ`aލƒ-Ö‘Ä17£Ä1£ŒÄÀ&Ç›A₤` <>‰ ’ò»É€Æ¡SJ₤#âMC`^r¼%.HV!ÞDˆ'ÌÛd=Ç›Aâ‚D°ÅÁEu°NSæ-8 ñ&ØIÒyØbI\�¼çx3J\7ñ&ÝV8Xð¼·u»¢‘{…w­³üï|ýaÇH ºn”Éi3Dq¢±G+}¢Ñ×€þט{Îûs‡MЗc‚~ùùôûû§ŸþðÏÿ‚Ñúòvú÷P˜„J¹ˆ¿0Š.øŒ¿˜<ŠÞð±:½ÌÇpÇç²\î•}ÔNæ–¿\/.eâ,ÏåÂ|.µ”Ï2¿´»´Érrs»\wuþ®Í|¬g{óqšÏ±ª÷2—/6Tùe¶ÃuåÊq®~ü�ó—?ÞèÇÔ÷c¥éo­ ©;³¼ëN¾ô«nqkó³ÙKýÚ�<oí²³éKgýkg[—è¯s®ž‡öÁ!gS9ÇíRv>^Õ3[]ȇ>¤¥�ËÜ/eÈr±kC²Y÷mo¶ —aÝ®‘Î÷u>Ç?~ÉÓÛV„snlžÞœ‚clÖ¬8e,«žî­óÉ. €+Bô‚ë�l2ìía Gœ®èЍ´:wM=ÔÖU{álÈ˨ÌúËO?}ùׯyÜ�?h²Ëü—á˜á`—c�¿ó Ül®�J÷ r¢—vË~Ü>£± ^ ‚pF÷¶W›qá{Ñž½Ú“ØIµóD/=¶\Qî©�sæûOä¼½ÑCôm9W饡�y‚wíõ#æ{–ºód[Ëv¯Ñ‡‚Ù-¾¿ç9!Š®óA¾Î½ÚÆÈŸ¦Õ»…LÒ•ù"àw�y°ÎÓ!Ólrèè©ÕÞ둵…Ýë+î{yB¾û déV¾Îµn«¡ù +›ïGÎLÊ‘gÄl£ðX�§Cá1±Ž uH¸ÅY¯]þ…ö‘:rŸˆ¬q${.½£½ÒFvE_çúsd²>ÿè÷íÙxÛÖO +¹.Úñ!©÷ùqŒ˜o¡o#ïX�§CÞŽ9ŽdX÷ôúº‘½ZÉn|–¼ÿÚŽ-\ñŽ´²Äî·mŽÌÐþ‡F^ɯ>ko ·óµ™’ІoNo£÷X�gC¯Ûñ+K¾­ÿV^yF¶‹Z¶ø®GË÷Š‘û|Ó•7òºøÌ‚O[=�1§4òä‘Hî–½¥ÎnT'#Ö5ßñ0bÖy:Änû›Oã~4æ½'zûÞÍ=³bUž¶¹ÖÙûcøƒuž¹Û>êÿ·ŒÎ§qö÷DwAëîì»�fܰÎÓ¡yÛï½òGw<iu®ˆÙ˜}v¨Œ0Ï7ø«#b¾;Ùëµm�#ï;o�­·¸µóIù ”Jç§·Ñx¬Î³¡Ñoû±·îöœë^?O×»Ô£»©yàÉ«; «ü£3dWè/^Æ[‡´™µ\îCë’ŒLÿ€¿z°ÎÓ!sÇ_ýäUûSPuWîñ3|Ãgó~n ¶Ë�ò—Mò“l{¨=VçéP»“Oý¨ox·¿õ ÷ªhÐ�üw ­£ÇR¸t¸ÎšÅzÐû�Ú¯³ó*_|¡Ü»?Xç麓w=xߨzà +9")g‡–~5 üRF¬ šÔú‰Ð!ÎQ\ÛP=>µ±ºtÀæ{Ñ8>=Òû»µ/GÛ¾võ¸[ê›ÏIÉMð;‰¿|´�Úcuž µaÇOU2Zú•Ðêí2üX<û®†—Q1~{”zvOx +¦rìxÏÞ_ß©¸•‹=�þÞÓ2ss¹!ºgÕÞÒ ïç˃užy;÷釸öj® #»º;8®®ã)Ý]CÓÇ÷²å#bïɮӒ~³µîüË'mi~‚ÁÇê<‚wò§ð)� ëž¼åêþVŸk›*:¾Î(È¿¸{ZŸ?e¾ež¾ ×¹ƒ²q–ì=+ºÜåшè`�§Cß1sï^;IQÊè;IYô{ü±ÎWüíñÜGfò ”6_ŽÐQ{O£¬ól(�;þåѨ£¿K9D#²3Â8* +ª>‹¹òóÂ-kÝ�ôÀe}|ïi�¨ïÖè`�§݃>\zõÆ\ÍÑ®ÍpÄàÛÊ™lŽ ë^çcIÇuJ„Qô–½óËrÞ×®µú}[õ[}Ù—¹ êyýbKá®gäåˆç3®CÆW·ù(¾ŽÕy:|íxX�Žq7Vw�±ŸqÁ¬òic|ä:;Æãòm¡zþΗYl»,˜Îï ÆzàéȃužQ;w‰ãc#Ëù�ß2û|Ìþ¨Š÷G‚ë<ªÒÎS‹ÿǼs÷è~ß,3jÇNd½Öy:¤ìÜ}íòŠ¿šo|ã íñ¹¨#yYé›%’W×ßKªW—S(OÝ8}öyá»îœ”|í϶&{ÿÓØë<Zwü¯ïÃÿjH¸÷Ù‚#™¹;žîÉù‰±Ü‹º~>b¼g¶Ê¤Ý@j—Ù:ú}«ƒuž©;Ù°‡óŒêñ§I>1óöÛËšÝ@äO¬ólˆd(ù*ˇG¾ç–Â÷œÂ׿Ãþó²epm§mÞFØ«nwËŠÛÝ";0-ÛÁ\ïƒxÖÃ6ŽëcpJ~��g4¦À[·Š{ùÅç/Ý-Ï�ð†måé¦ì)“½:5çö³7¦æÍï¾5håýe–Íáò¦vi–çMܼjÇ-Ÿë>„2K{¼cÓ²ß -û(­Î_ö0ììYía˜–˜$_ÃÕ°ýròyËa�·�Wq¥á÷Òœ=Mú„tæmŽ£²¤Ë0éܱú|£f~›Ï/µÿ‘â=ÿy¿ç<ŒýÁRþ—<À?Ÿt¢‰ûŸc~‡ÊâhÊA¿Ÿøe,$ˆ‰&sPÌÂ壪ç"] +VÙĦ4–´nRËÇTOΛãÌÓøVß•j¼©RÈæmbç†!jz}-æ«W“^ÄüB›8ÙåÈWSx³·*l'¤¾l;a«¸+ÖVuBw-T]sMl¨Ø£yôÚu¾ «é}×énøKYºáÜ^NhÖŽÒwQʯÑ(§*½kT•ÙΨT¥®”¬BuœÑå$PåÔ„Á¬únÔx3òY �¨–K¥œ ºœÄrËÙ\©PKÅV5•žo¦4¨ÛX;^�å>Z¤�ßÐÕÍeËǵØó”±V±Ã�¹^NŽêLlâ÷“ Bi׸B¹½^h»óVqT /Mʸù¦f‘ñVÎüÿL®J™yòMR¼{;j�ðܬâu'õr_Y‡¤ÐZÙ®»t³}騄òLºµtí±•´ë²NR1�Iª’ÇZ¬+ꪘ)¬ôOåÊ^¨Šh®‰]…òûJÜìtuª:U󺃻«çmb_¹ó½‡:âš÷Ö¯öÖóv˜/ÂK^Øh3ôci¤‰�ª«]k¬6Ã@ +MÜhô=‹Ël­ìÄï +Û$“VÜËéo§¼Ì!¼0¼“«·š_Ó{Yúü?(óGüþç‰Î*{“Ïë¸Q•-LåÖ•¸_ÉøÅbñ ˜7ƒ,Â:m:¡¡Žö›XÇVÖ4ÔuÜ˜Ž¯©UW�ØKI]TWm/t­;±©Ð5Úv=ã6„—¡«#óѱi ö|hËÅñ묮}± +ýåà06�mKò¹;%ޏh[Ò¡%ÓUÄARv ¦fÙÊLdßHíz¶Ÿú¡°ÜVwй|h›ŽÚ2ÛŸºÈòUtEàÛþ ?1é¾Ñ´²G0úáéõáq_Löe°´R{•¾÷Òza,­„'Km>ôëÃºæØ¼©k™¼­‡ê¹l7÷lurÚÔh®­zŒvÒØª-\ß(٪ѲPTº€LY=c(6ù¥Zé–|ÅQì¥P}Š&ý[ßÓ®•Ú‰®U–Ï[V¼ê-Ùê¹Ρ]�j%«/™ïkW)µ’¶È®Û¦uÛeµ=w—AÍßÉ?ÿ öÅv› +endstream +endobj +593 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 592 0 R +/Resources 4 0 R +/Annots [ 594 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +594 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 713.673057 101.433071 694.923057 ] +/BS << +/W 0 +>> +/Dest (cb80-1) +>> +endobj +595 0 obj +<< +/Filter /FlateDecode +/Length 4861 +>> +stream +xœí]]«$¹‘}¯_QφIëûŒa kƒ?z1‹ñCßê¹6Ë�…ñ>ìßßÊ”©ŒÌÊ[}g¦Æl_ª«2B¡ÐÑQH™¥ÒW…¿o4þKNO)åÜõöý凋š¢WøWR¬.ŠúÏxEÕÊÅÉë’¿~O§˜½‰áúvÁÃ%Oþvù˯.ÿ½Î£¯fÊ9í¯ÿüŽTÎN1Ũ¼ ÊP)m•÷SŒÆAô„&æ,©`†�θ­* —“—T0ÓU‚ÖEm·ª 3LÔNRÁ �}TZÁm”u0D9g� Ó~ +pz�tFO!e“E]„NG#é¬�BtÚkI—§‚O’ÎÁŸ•–t¶x휒t°ÅÙ%]€-6X%ê`‹IÑJº[ ¼“]‚-@Wu°E¥%]¶“ÏÉ9Q—¡S)¦­Î(?ùd­’tZOØ´¢# +�¢ 3°%(ŸElñVIga‹ÃŸ¤OxSF«¡Ñm•Õ’ÎÃc¢u°�/1€ °EÅ QFÐD¼$q€‰qrÙ8‰L²“K.I,`Rž\ŒV¢“ýäBŽX¥¡3Z"«`‹wAb«a‹ÃÈu°Åf'q�5° $.°¶g%.°`[´H\`A·Ne-q�ß:¥ƒÄ„ 3•ÄŒkSpXP. ”%.°à\ À‚t1ܣĬk}0XЮu)H\`Á»Öi%q�ïZ‹œ¢¶À€'«“•¸À�w­VQâÞÅ02 W'à0H\¬L&%%q�œÄ¼k"¦Q'ŒA+q�ï�&H37x×xe$.pà]ãL�¸@™À?JŒÀ» /‡°+qæ{茕¸…Ma‰Ä¼«3¦?aLƒ­&�r�¸ÀƒwuB÷‰º<é� ã^žtYâÞÅDe%.ðà]Ðg’¸?aF5x𮶘©%xW›¬$.ðà]Ä ^âÀaÒ$.Àü6i芺<©œ’ļ Z2`žT“ˆº8HZâ�ñ¤‡J\À»˜Þ³Ä¼«¼µð®r{Dl±ÉH\€¸: [aL#X�”SH:ð®ÒèaIÞU*f‰ x—¦M‰ B$�IÀÀ Q°‘¸ $7åƒÄ!+èò‰º0áÚK\”%ê`‹‹NâÖS¶9I\ l±ÆH\ lAÈ q"‚)kDßâò¶.âúÀÁDЀɦ”�“¸ ú€õ¼*é‚™R]‹º�ŽÄè&LÅZ⬥¦„A/q~¢pIâ˜�vÄ [0T$.ÀT4%ƒÈ\ÒiØ‚ [âDºÐi-qA2°Ñ ÄÉ$¬2ƒ’¸34Ö’pµ¤sŠÖ™Iâ‚äÂD¡¢Ä&Xi‚)ElMH\€þ¡Å¶—¸‹,6±Ìu°Åz'qAJ†–›Iâ‚”`‹QFâ`“Ö›Q€` ">‰ ² +…ɀơSJ€Ö›ÆI\€qIëÍ$qA¶ +ëM,ñ„q›m õf”¸ ;Øâ¢ˆ:Ø‚ ) 㜄õ&ØIÒØb²“¸ ‡@ëÍ$q ¬7Ñ‹[‰Ö›QÜ.ïú f’tà]D¦Aâ\`½‰ÈVZÛ+¯�ˆÏde¢gw ¨×cn· ¸³U÷ È—ÖHâ¦ÌÄÊ2q×Ó*”Z‰Û +ü‹xÌm8aÞ}â[Tpˆ˜3S¤Ff ‡è¾­9z2»“lÞûçß/¿þŒÉ÷ú÷ÿ¹¼þªì”Õ?�¡¤vˆ¯0 LFw{DßÍ·Á¶)¦Á²w%¦jcîfiá²ÍFfa£×퇕­0•ŒEn¬„­þ#KÅàžRºÃ2+C³d·õÝyîšäkû e[»�x½ÝI’­ïÎóá¶"^Å"Õ#Ä\×+y/ñÇv~¯œ"Ô‹©ÞÁ��=›éƒ�¶m¤dê„Ò¡”aæ#>I´4õ3“ß™å VXÀ#" Hc³¡´ˆµ�r«Ä¿ût™.VÌûôí’™�˜Ncr4þúéû˯ÿô—o¿ýô@à§×Ë_£À~¿ýFãÝÛùÝÝ–ë°\§åÚ/ïy+Ë)÷Ý�þ¹Ê®:5¿cISòÒ«¦iõ˜åýe)‹ê¨6½®mmå"‘�wl"yfy_×i ÙcXž¥¼ZwÑ-åú%�ó;¾ÒB9õš•W?û¡}Úüöo×O¼üÛ§5 ËJª’6Q° �Ëp_ØHeèGÀݺvPÊâÎÓ(=—çéPz«î"®îðTO¿0„Œ{©’*Z 2ÝWþœw~Éw,‹Q•›Œvɹ{H=—çé�z×þÿ�ƒ�h€•×lõk‰í‰ë2÷î)6¹ávï õ�=Ø“yž­Ç±kë¹×5JÊœÝÝ\í«Öpg—½õÌ Œ¨5¯ Ñ,mȽ©íŽP�ë^×ù7èXPSö~wöêÈ¢²lx߈3Œ¶bsdíä‘Ðpÿ¬Ùd»ödOæy6»ãøuä¯qGiµ›’ªçy¨—"ãÏñè¸Ã5Æ€Œ¯8 +7ˆÒŒ ™­´lVH{u-#À|·Zæ×Æãü¾Ü0Ÿ¨×$Û÷sñÉû¡ÙXÛªßu÷ûŠôº/ª_¤òg†:ôSý4³Ù“�c±6><óGÚç2;Ç0Ÿ­¸eÝ~™cŽù¥ø³Ž;?ØAíʇ~Ê?Å¥Žú‹4+<îÇþŒË‘]kÞµ]Fª÷‹¼ÊŽô k[¾bH‡èœŠèNæy苞Êùf/�Ôà=†¶|£“ºb\Êé妤eÃÜ »æ0©L¤ VZæ›ÝD=õôn‰Ææ 3³SQ(Ñ¿ÞËíR9O(Ñž{¹}˜²GŸI¹ùº-€µw=dÊA}λ㡟ê!†»­w¶œ™Aç<ày:9 +® Qnç½ÜÔoàk>Îó.Œ²ä2ìcÓç¥ëx‘“’ö@x'ˆ!{{ÌŸ«ÀÎîkÛ`ˆN`ËtÖÑPiÙ;¤GÇs.F§ì•/xÞ»}~2Ï“,c÷¡«¹�M¹ãHÚÃÂÞÒ´�.µY.*¾�ÂKö欗ŽlùñÒIHûlèŠKHÀB̆À¼Lǯ “€>7åìSÔC…GèˀĂ$o͹äNæy6ôÑy1èÛ<ò=lò–žwËünyÅùZÔyö°Æç!ÍÕ +.  tÖ×—å=³´/?õ¼ôq�e�TCÌÉÇ0Oæy”u³ƒ>BÙ{:ÚJå���í=fÿâ#=(ñ\�ðôÏ?¤røèÿR£y?RÏåy:¤¦C>üÙ9¿¨¶s³L|ø¶¶ïô—7êHZÚWx=°k;|6Kž¼3òtoGk7ûºêÑ�ž]dæÆ‡§9™çÙ�©áìéú+¾ŸÈ!¶ºÇó~~BÂûhéž~ó\ zù>`øç夳èÑc^ÛrBePìà´†½»Iî@­†ÒÛƒ ®z8|km£Hú‰›° Â,Ò©€âj/,_Ò^¶ð2í¦Í2šM�Çõ¼,�(Õ·¿ën*±ù²íY¶’ó,7m;ž­ƒb7OTÛ&-_åMóöß^må×mKfÏj»0/biæÛ~¸„rš¥.'«�&mè'®ÁMt‡;b™è$Lëtí&]«¯;9ËEüÐR-¿¡è8i:J´t#¿XÒÿP:øû‹În"ÿ—û>åœwUÄÉÔ‹.~»Ð9ÿN;×oÝ“pù¨ZYXC›AvyÆ)�)±†PËÇ~ÊóGãkk(¿¯ÙèüE§j"[N œ+„ÈôVL­W“^Äô[ i²ËUh¦ÐöXöOÛ ìULè·BŪëbãª=šÎÖm® ]ØLç®Ó¬ûkZYw oTkGé›(¥ÚkQÕ»F5™eFå&õ5eë×úIÝ.‚ðU‹vè̦g½FçÜÎÂT�äZº\Ó ¢ÛEL·”æ[OÅ–*õ¬¹z¾›Ò¡N÷õöe7vS7Ò�¿°1¢lý¸Ó}ÃÖ×*1ܘ�ðvñ®�Ä.~»ø(¤ö�+”¯ÐãBËÊmâ¤:^º4¦ê* Í*£SBéÿ™*|“ó”Ú5HÑI¿ýªWBc³‰×NâòÐXÇIÐ.ö´Ì]:ƆYî/�”�žH·¥n[I™Ë˜<æj‘T#�µX7Ô51QXõOãJ.TÕTמAùm%îvú6T½j•Íàî[¹]w¾qql=®éØæfo+—a¾ +oebs£˜ Ÿj%]lT›ízeLØ )tq§Ñ·"®£µ±S9ÏdùØ™4ãÞ.ÿ¸”iÎXoèÞW°š~…€GYúú¿HóG¼þë⮪ÇÞÎó¸Q�-LãÖ•˜Ïdô›5餘~æ +Û°aBãíw±N=­¯hhó¸1Œ¯]Ï®:±×”º1¨nZ.ô݇Llt�¶Ì3þ@x¼Ø™¯í›>aÏ—¶6ŽîåÑ�ÉÕ*\ðæà2u�íSò•‰+JÚ§th�aqÁ Å%«0wËVf y%Íõd¿ã]a©.vÁº´]çú4Ë‹®²Ò +–!°å¼`§y¥ye�`ôÃÃë«û}19Ô@ÒFíMúÆ¥­a$m„'Km¹ ëË6çØr¬Þî¡V–ec϶ §�Z¸ÕÇ(“¦žmIày¥®ÊV•Ö‰¢ÑdªÊZ‰±Ú–lÕ-¥ÅIôRl1E—þƒ{Úó^iNô¼WÂ&-•[g¼-ÙyçØ[§zÊK&Axî&u=¥­²mÝn]w�m¯¬®zdªz6¿Iùÿ=2væ<ªþ•��úAñ˜¨�ŽÖØòÛ*…qôó-Ñ%¶5òî<Ç{%Û‘ºWÂkBwLÎZ5ýŠ£lÂù¾‚UáQΖ•ؤ÷9@Ø +ê4§6;Aåg¼ÊÞdÙj—‘–Šô«}–‚ÞD?6•–ŸÝ¥§ë>¯¶OÊßÿ{ßRp +endstream +endobj +596 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 595 0 R +/Resources 4 0 R +/Annots [ 597 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +597 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 273.873057 101.433071 255.123057 ] +/BS << +/W 0 +>> +/Dest (cb83-1) +>> +endobj +598 0 obj +<< +/Filter /FlateDecode +/Length 4726 +>> +stream +xœí][‹,¹‘~¯_Qφ‘u Ý`1ŒÁ6xñÃÀYÌbö¡OÍ´ÍÒcûÁ?e¥.©Œ¼UõigÞ¦NUFè)}úŠTfª«Äßw +ÿR"„è]o?_~¹Há­Ä¿!Åä`Pÿ€�·W%É «¢ öús/|´Ú»ëÛÿu‡mò·ËŸuùû4�ºj£ÓÊ^ÿñSR‘>x/-£ŠPIe•µÂ{m£rJàcäT0ÃzÒ4Wy˜A1XN3HëÀ¨Ì0ä•™«"ÌÐ^§‚*ZϨ”„JKÉê`ˆ$2šÑ)+Ýq:­„ QGVç¡S^s:c„ó¤¬âtQ8çlàt[l”ŠÓYØb‘ät°…LðœÎÁãŒdu°Eo8�‡-­]€-@W`u°E:©8]4ÂÆ@Äê"t2ø0×ii… ÆHN§”°À¦auQè$ç�†-NÚÈê`‹5Rs:[œÇÚÁéGA"ñÇÚ{AQG:A�Ç:DAÞŽt´‚\ô© ÓŠ##a‹%Ç1�Q°…0rYl1‘8.0¶ ÇÆÀM†ã¶% …ãº%Ç|KR9Ž fJŽ ×GP. 9.0à\îä¸À€t1Ü=Ǭk¬ÓЮ¡à8.0à]CJr\@à]c�“ÕÁ˜ã°£0*Ž ¼k”ôxÃHs\€^À¡ã¸X:Éq�wu�Äq�wµÇÀê¼À4xW[œ7sƒwµ•šãïjÒŽãE€$ë €wA!–w` –ãÌ÷ÐiÃq +n Ǽ«"¦?fLƒ­„ +Ñq\`Á»* ûX]ʣřq‹VʹÈq�ïb¢2Xð.è3p\Ž˜Q5Ǽ« fjNÞU:JŽ ,x~ƒå¸p +ǘ߄’€.«‹BÆ8.°à]В渳°�LÂê¼�Ç c!á‡r\àÀ»˜Þ#Ǽ+­18ð®$¸=¬¶˜ 9.€_†-3¦á¬ +©Áœ¼+z˜Ó�w¥ô‘ãÞMÓ&ÇÎ'�À@/Xs\à‰è½ã¸ÀE \>VçŽ-Ç^B`AY¬¶�'Ž àX‹hbà¸ÀkØb´æ¸ÀkØ—�ãx"*xßìò¶.ìú€` —ó›ÿ¹~ùãåw_¦`<Ì;ü“Ã…Y-qÅ*þöeyßvX®®ÀnÖ�~ÚÌ3è5ݪR¨±™W~Oºª«ÏF:¾ëN7‡ÆSv¿Þ!’¡×C˜tW¿óªé¹|û!ËC7Eç3áEtš”W±»3ÏÙÀ‹Ò.ô¾N¿ ©¼t=ë+‚ÖÈ®E ý4Êr]¯·hÌHYBnA8ƒúÁ&Ó¥ËçÔØÛX—ëÎùÖÕ¡*Ú&#/ë3ÚܼMhÉÞœ'6õ½NÓ#K/ ÖÐqÄîËs:ÄÒ:ß.ôBº·…´É4Ý—Ó!7•×s_î±=uå²Ä‘™ß â»iýcyòب˜¤§ ®­N§5 )Ójd¹ûòœ¹ëêöØÿ\è~7ÎþHtg´n޾4W6]R!R$Ýš÷å9š×ýÞ™?ºáAp³sAÌÊÈ —¹÷‘F‹íüÕ1ΟYöun[åÈcå–ѺÀ­ºñIÓÆ©†€ñ*wæ9õº;CVnáY©gžYLë°Ý»«+µì#wg7CöH¢CúŽ28ès~É=–Mcú¾üŒŒ¡¥žÕ¾ÚqÄæ£h,|ߟ×צ-{Û~lòõÈ�x+mDmÁ�éƒP†¼ÛŠ8íÌs:oÄOŸð)÷ ëHÜrr}«� ø©M?ÞQ0|ž¸z:”cG¾M<}ëÎseý(©óÀúšØåÞÑÎ<§Cß>sëZ;q«”Þwâ¢èGü±ÆWü|<÷ÌHæQJÕW„#$BBÔÖ^”�yΆRÚð/÷®:Ú«”Ýj£Gö€°´*òã§›¹ R:mÒÓ—µQð­ÝdŽï4Ú™çt½»Ó‡ ]«.ŒÕa5�sÓiÅàêÌ’"ÙiÅ “îëý˜Ó¥ªùÛº†urš±Ú´/÷:Ò‚¡”ëF[2'¤<ᎼaÅóçÁ㫽ڼ_ûòœ_Ö£}ÜôÕ¡>vw\$Vy·>Þs�ýñp>¦)¿�m»�˜V¼ ŒõÀÞÈ�yN‡¨�«ÄᱞMñ�ÏÌ>ÏÙÏ£ÊÊã+Á�yΆ*»±kñßÌ;‡{÷ÝøfQþ°} êµ3Ïé�²qõµ‰+~3ßxa‡v¿/jO\vMëWœ�W×^K*+®&¦�wÝXµ`ÛŽ¸ð¡+'9^ûÀÞVk�ïÆÞ™çthÝð¿>p ÿÍ�ptoÁžÈÜ�Ý=C|¢O÷"çû#úkf“HÚR›ÈÖî{®öå9R7¢aÇåã»IÞ1òöù¢f<"Ý;wæ9"ݾ;YžÚ�|äŠÂGŽ€þZÛ§Œû. ø�èÞÎ<§Cð†¯úNûé9´ÚõÎ÷P-Ú´Ëg< ÂÐÛ\iÝ{?ÀÎ<§Cï†ïú‰ïò{—Qó¡»Ðø@ÜqgžÓ¡qÃ?]Ø =»ëÃV®)«† ÿν©ý.î´’¸¬Û/õy8–G®àŽì�yΆ\¿ï +îÃ÷œ~4B»ýdܾ°÷à×güíÕøAßN}š ÎõÄZwæ9r÷ù¯GŸ(1AÑ�AC÷LÑõÉþyŽƒº=£CD>Åh_åì®ÃùÛ]9}$©ÉÛïç?ÃS/ü×¹wæ9R7|ÕÆwÌ­hNüàÇõèv­Ý—ÕçY‹¡–´í¼°pn霾í +q±ø³;óœ±Ïí><ŸŸ÷¼'sÚÕâƒÏø¸;óœ ÍaÝÇ}v5µú\•¶Ç®ÚNfaª=¼tWËä“åéšýË}ïAú>¼#ò›�äô=gÝ™çtèûØ;²OÁsG"U+è\}BÇÚ.öo{X@òOÚ™çtH~.æú)‘ü±‚†Ó'O͸1~xßmþ¾ÍÆ=ûîL\@oãŸî½b»3ÏéÐ{ì BOÝ«šQÑsT»+¤å°Œ6½PæQÄoÙ~pÇ kÓ8èÇf¤6è~lŸ�ÒøÀ¾‚�yΆҸ±¯àÈÝÑ÷ÊrO’övöwNô0>ñ•ƒØø¨’Ä𘀭g ìÌs:¤î¼;èÿ¯ð; ÛØ®�¶{>O=·k­Ä`wæ9Z7ž0d¦=P�ÙîÕTrWÍ3àÆS‡{o GmÚW?Ù5¦é†½«}D(ûu¯Óü3tŒ¨b¿ ±…òö|ÏÁ�§mƒÍ¾9ÏÖꮟûîB‰Ädwæ9‚×ý×#OÒHw|$å–ïxä¡^òr¾+;ðö¬=¹§E!ûd%?·59-³ÒR]ãÐïÀ­¦}"h>Çöº\7ŸÈׂäÆ÷x‹N·Ê ïmr²y�H�ïf’ ´Î_>’_áqM=݈CçD¤ÿšp…cJѧwå$øý÷ï¿ÿíþ³Âo¸‰èvïºÔùÁUJ݃’I¦‡ Pcó»±™†).Á#5Q�*Ó÷ Jwø ¥RZwÿ e�¿‡rB&š±¾t+åOêïúIùv¬»±g(Ã6ç`ó9̺헋Þñ¤†÷üI„ÒéEÀWG"�¯é½RAR¹›Ôаêº�sx}ò/%ÕøFe™^²˜^°uÝrs0¦ÿeèàŸ/*’H퟈ãþöS9ˆƒÎUüvIo¿%FLðAwŠ“pü)KY¤rÂ"»�½ˆ}Jc…ÆR¸±ù§¶ùlR~›³¥·‘̉Ìð^ž{ÅŒ9�š‹ÓÙK¡Fqzƒpf½½#ÒäŸS±K=�ûZ†7z&¼],•‘XÅoë™Ô¶r…´z­Ð4åq�/Ušný½ÿÂÐ̲ôî¬ôÿ�*l‘&æ~(*�Jï¿«Gµ’46‹xÚH­ÜÖ!®ùš¶i.å}ÁlÛ^*H&}"Ý’º´ØDÚ4Y#÷1›—Hª�ÇT¬ +êŠ8QXnŸÂ•­Pf#P]Ûå·‰¸ÚiËPØseN5p·¥Ü*v…;ßZ±/=®ÒË ‹½¥ÜóYx&6êÅ ú!WRÅZ–Ù®VÖ«a …*®4ú6ˆóh-ì4<�~üY7ãÞ.» Óœ6VGüpF¥wó¶^–ºþ iþˆÏÿ^èú§ü2¸û<®ea ]¸u"ng²ô&÷°SœÞìž…eØ4BM íW± +5­Íh(ó¸Ö _SÍ.+±ç”ª0¨*ÚVhk6b] «•iZÆ®o]+GæÙ¾©öýÐä“C5&½F0[…ƒötpªÎÔ)ùÚ‰£”´NéÐ’n2â -‡M…±Z613²­¤4}²ŸÚ®0©®æ q#Ò¡©:ªÓl[t– gÑ$� lÚƒ¶`Rm¥qbcôÃÃëé~Mvy$i¡ö"}k¥åÄ’´/5á›–9Ç\ÓA¼µ…JY¦{¦89uhTׂ&-Fi¨Ùƶ­”²lRiž( +]@&³¬”è³MnÌ–›e8ãÀ¶’/>E•þ­miÛöJiDÛöŠ›¥M忝xK¦8@¶…³¯g'kÊâKFæÚÜEJ5¥É²yÝ4­;Ï¶×æ4¨âªg*k6;Kùÿ=2vîyº¨—*ÿ ‘êëS1Q“òF›kLîNpB饿žB9œg=V2�ˆäXI[ºC�1Ò+àmÁ„7(â¶¢)êm|ó,Ÿ-Jö”Ž5 +ª4'g‘ #ÌÞBåЧ¥¢�Ã+ÈeÀ �ÊKņ††gâ|�„O†¿ÿ‰î´ +endstream +endobj +599 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 598 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +600 0 obj +<< +/Filter /FlateDecode +/Length 4918 +>> +stream +xœÝ][‹,·~Ÿ_1Ï˺_ lHyœBÈÃÙ9gmÂ:`ç!?_©[—VW_fw}˜Ä‡õLWI­RéÓ§’Ô­QW‰_)ü/Z%bLÁÛëí§ËÏ)‚“ø/§X\dõŸñÜUI„SÉGwý‰&ˆ�œþúrÁÿ†Ë>ùË寿¹ük™G]µHÉk宿|&•5"ĤcT *© £rN„ �gT^ T1%N3\°Ú®Ufا‚VëȨ"Ì06(³V%˜¡ƒ²œ +f¨ä£Rv(-%«ƒ!ÒZ£�rÂÃéžÓi%|L:±º� +šÓ#|°Ê)N—„÷ÞENga‹KRq:[œ²Vr:ØbM œÎÃã�du°EÇ`8]€-ÞIŒ. +²:Ø"½Tœ.áR´–Õ%èd q­ÓÒ �‘œN)á€MÃêУÐH>0: [¼t‰ÕÁg¤æt¶Xüãtà gBŒLoÕÔ»�4ŠÓ9Ø¢u°¬¶ ñ9жÈà9 +@ÄKè„MÚr$ £6Úȱ€ŽIØ G:9a} +© ÓŠ##a‹³žc£`‹EÏeu°Å$Ëq�Ѱ 8.0¶hk8.0`[ ´p\`@·V&Åq�ßZ©<Ç„ 3%ÇŒk¢·P. ”8.0à\îä¸À€tÑÝǬkœ×Ю±Ñs\`À»Æ*Éq�¬¶À€…QÑp\`Á»FÉÀq�ï¢iŽ Ðª8ô+BÇ(9.°à]¥å¸À‚wuÀÀê‚@4Xð®v¨7rƒwµ“šã ÞÕV{Ž þ‘l4Þ…8>€- XŽ 0ÞC§ Ǹ™ÐK8.pà]•0ü1}l%TLžãÞUÍÇê’Pgú-¼,”÷‰ãÞÅ@e8.pà]Ðgä¸/0¢jŽ xWŒÔœ¼«t’8ð.âÇqà Ž 0¾ %]V—„L1r\àÀ» %ÍqFa!#˜„Õ )Ž @ÆB"å¸Àƒw1¼'Ž â;…�R»ë‡Ÿ._ÿé¯ß~ûá/@à‡çËßKñ¾~ó•Âwû<ÞæÏ0Îz–zª³1.Øez'‡t~ùYåºÝÇà>6Îz7>uiæOûyú”Ï´Ä×òÔ2Jú"/÷*eÏrc»4z¨ŸíÊPCùa¸gCʾ-mXù±óC.Ó¬óÖ4$ÿÇõÃ÷—ß}XÂ4ϵîCö¹,oAö¯è”ö]Vá6;5t@ï\Ò5ti\í¦{j¿l8;6ê‰F¶HWdLdìN�ÍÏøå2Ù\;ùè ¹ èšæSÓU þ2¾ëÈ~°g¼´S5CÑ*Z°TðózOæy4ø*½KÈ~~IÚ·tÔ&:â{ÚÀŠcȼ`ãy�…Ñ ;¾ôWï—í?æÉi .K>Îò»µ”²;5¥ÿĽú¦ ª†ÚÔ„ìZ¢^v‘hÞDl¢cn‰¿ýþÛïþðÇÖ +M‡øDªÙ²Å÷0yCW/=¶"ž<<¥uÄ@O¥vÓõJG/÷&ïNé'¯®=êJž'F§ï–zäçÎ&3•‘Ó¹)ocŒÉ†ZŸÙÆ\®/½÷”scïÜ¿÷l—u/uÈõ&Ÿ›vÝÐÑÙì›>_›ùÏuéçk²»øºøV>QÈÒÕ¹³¡úoNO>—· aÊÏÕõ}=5í‡'C{×s=ÍÜæŽFˆ8·µÙ§õ}¼¡…Ú<\ßGÎõšêœë½gíwóvÈV—…?¨MõÄŒm´‰ì¥Å<‡¹÷„ý%&–›¯ÉÏÄ^ú6ëýl“+,ÕÚ6·™ž}>§Íõ�3†ocäOÏ×#c¢¤yîú“n¸£¼ùúóÜ>®³Iuéæ6Tz×ïqôMÅ�êl.xåžëòk¯ý�÷ñ�+í8ó€4KŒíPmò]ÝŠßUó{I_íC»m´óÄW{~2rôÓÄm[¼v–ÓŸÕ¾â:ßD¦¾aºã›ÎLšâ žoö¹&·›�ëçvV§}¦MŸQõf¾Ý³Óߥ š³áÓ7l\G;ïÞäé>mnŸŠëNæyÕ¢Ë;t®Ú‹ It]š èrWgsj’;Ó… S#l˜¼�‰6.‡ g”P!‘ì›ý;j“„ó¸ÌÝóQnó>¿÷¬=G¹�ɡ͸Ü9 )«AË¡‡t~€Î:o6ðõ<ÊMí~0úýA2¢¯kÙÕH¶ñ�‹þk9ÌlaÅ;ÜÈþ»Ÿ÷ã9«‡òg>ÔjY—_¿×n ·‹•IFMÏÔî£÷\žGCo8ˆ+Ççdž‘û8´l7kÙã»-_jŽœmÚŠFžæ˜™‰ik¤ÁZô³�Únm”F¿üüÚá‹8§ò<jÖSßÞo½Ã^•t[ï•�h#–á}µöð}Cëk¢®üÕk;¢ñ{÷'ó<BÖ]OîÕÈàÄK8yV”¦ÝÄ¿ oæGÍÜ¿ c@(ûBU�€î¥¡{l¾�ãÓ#}¼;>›µxÖaëMÒ»¥±Åœ69�¸ÓÒ™ û¨=—çÑP›âTÉ£¥ �^g,ïÏÒëŒåý]z=ð½_ñâž‚©;îÙûõNÅÖZ, Œï%—ˆa˜]޽êh‡4éûùòdž‡CÞÁ>ýø†óØ×™–]쎣ëøDJ·k¨ûùðÖjùˆØ{V×í’þgWÔ6ÜÅ—! +e,=·€àsyÁë§oˆ)Ï ëžuËÅþV¿&–6Ut|šP�ÿÞ°{ZŸ?%¾%ž¾ õ<@ÙØKŽžMÝÚåÙÑÉ<‡¾sñæÑ^»åf)ÏÅ¿:ëbÅÿ=ž{KOÞ@i‹‰Hˆ:zådžGC©’æÙiG¿M9L7FhgˆÑ´(Èú0æ"Ð K´e뮩2ë—Á™Ç5þ<Ÿ³<á”Éç#zÙÛUÛô0ÉA–FÖG]ÕpÜÓò�Ü’Ø7ñªÑR)Йtì;M~z‰ÚÌn+3Ì|(Áü̪.o�ä' +çÞŸÙAN/¨~n.Ïo Ì/õæ¥Ó¼>Mi½l/üÎßÛÁ²¾¬óÁrzñµ{éµÞ¿¼ˆÛÙ³x7ÍãP®ÃªÙ~¾ø|–¢ÊçéJ�DÓ�ûWo�æÐé"�Ãh¬*ͤ²cÕu#gþ™‚Ÿkªù— $fLYæfì/æô?çþ颒äÿ|ÒA>e\fqÔ墉_.t¼„eÄÖ¶ãÄ$œ¿Êz/«êé Ev)‘Ɣƕsàº#èõ™é«v¥6”ß•ltúŸ•%‘ÉçßM3Bäôj-¦ÚK¡f1�Ô…™¯|5…^­ÂvCÛ§m7lÅÊÈNèÖBÙ×ÄÚ{�ìZ]ç›°šÞ»NuÍ_ÒêÐ5çžðvA±f”¾°R:¼ÜªxWË*3�Q©J]IYÄÖvbD· #üJ–[[4fÕw­F§¬NÂX€dkºTÒ1¢Û…M7ßÍÕ– +5UlYSñ|3¥AÝÄêxFvëŽ1 ôÓ#]‘¦|]ŠéTŒÚÖ2v¸Ñ+áíâlí‰Mürq�IíWHW × Mwß*޲á¥Ii¶6}C×,2:£’þ?Q…«RbžüEÙ +):g¶]µB¨oVñÒI½ÜWÖ±œ” -mç.BÅlï/%“žH·¦®[H;—uò�ŠyDR•<–bUQWÅDaÅ?•+{¡,F ¸&vÊ/ q³ÓÕ®êd-Ì«î®Þ·‰}åΗ^j‹+:4¸Ú[ïÛa¾oy`³£˜ K!M¬eíZa�°RhâF£/Y\zke'ú!”òµu2nĽ]~¼äaN§é„o��ßGYêú¤ùÿ¼ØëŸÊ¡«Ó8®ee ]¹u!îG2úÅ”xRL¿ R„µÛtBm;Úob[ZWÐPÇq­;¾¶-»lÄ^RªÊ ªj{¡k>ìĺBW+ÓyÆíoƒk óÖ¶iötiJåèÄ +:®·X…‹¾:¸ŒMgÚ�|ín‰+JÚ†th­î2⢿).»S³la&²/¤ºžì·}S*«»èº4MgÛ0ÛߺÈr-º$�MÑߨª¾Ð´°‡1úÕÝëÍí>›ìK i¥ö*}饵b$­„ÇKM¾ôËË:æ˜|ØCé¼ÍCõ^¦ë{¦9­k´ÐÂ..zŒvÒØ²Í \_¨-²E¡e ¨t™,²zÇPlòs¶â–\ãÈz)Ô˜¢Iì=íúV©Nt}«øUZºoñj´djäz8‡V;ÙRÖX222ßç®RÛRš"[—m—e—ÑöÚUÃ6C|‹LeËæV)_ůé;SžaÕ�KUþå•Û1娭 +F›üËs2z±ôã!ÁÆniäî<ûk%둲VÒ—„æÖý† o éXÑݪü¾ Ÿ-I¶J÷9€Y +j4'W+AùG¤òš_^ª—�¦Šô›q†‚ÞH?u¤âÏ©¤3Ån‹å“ü│¬ûÑ +endstream +endobj +601 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 600 0 R +/Resources 4 0 R +/Annots [ 602 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +602 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 555.123057 101.433071 536.373057 ] +/BS << +/W 0 +>> +/Dest (cb86-1) +>> +endobj +603 0 obj +<< +/Filter /FlateDecode +/Length 4914 +>> +stream +xœí]]‹$»‘}¯_Qφ›Ö÷,†kð.xñƒa³˜}˜®¹mcú®÷aÿþžP¦¤HedUVuÏܺÆ3twe„>B¡££�2K©Ï +ÿ¿Óø•œžRÊ1¸óåÇÓO'5E¯ð¯¤X]õñýY+'¯sHþü# lœbö&†óÛ ¿†Kžüíô§_�þ¾Î£ÏfÊ9íÏÿø�TÎN1Ũ¼ ÊP)m•÷SŒÆAô„&æ,©`†�θ­* —“—T0ÓU‚ÖEm·ª 3LÔNRÁ �}TZÁm”u0D9g� Ó~ +pz�tFO!e“E]„NG#é¬�BtÚkI—§‚O’ÎÁŸ•–t¶x휒t°ÅÙ%]€-6X%ê`‹IÑJº[ ¼“]‚-@Wu°E¥%]¶“ÏÉ9Q—¡S)¦­Î(?ùd­’tZOØ´¢# +�¢ 3°%(ŸElñVIga‹ÃIžð6¦$ŒVC£Û*«%�‡-ÆD'ê` :_b`‹ŠA¢Œ ‰xIâãä²q ˜d'—\’XÀ¤<¹­D&ûÉ…%°JCg´DVÁï‚ÄVÇ‘+ê`‹ÍNâk` H\`-l1ÎJ\`Á¶h‘¸À‚n�ÊZâ ¾uJ‰ ,f*‰ ,צà$.° \@)K\`Á¹Ü)q�éb¸G‰ ,X×ú`$.° ]ëR�¸À‚w­ÓJâÞµ9El€%.;NV'+q�ïZ­¢Ä¼‹ad$.@¯NÀa�¸X™LJJâÞ5I9‰ x×DL¢.NƒVâÞ5M�fnð®ñÊH\àÀ»Æ™ q€2�” €wA!^` VâÌ÷Ð+q +› ‰ â B7þüéÇÓ¯ÿð§ï¿ÿô_ðÓ§×ÓŸÿM)~ó�¦¿iþë.Ëu\®yMg(–EÍ+þb†wf‘'üàÚ�îe¾–t”Ǹ¥ìEo?CvYÊ}aù\ÏÏëB<‚H?<íç¹Lؽܰز”Sò ,�)Q½~P;þçüé÷§ß}ZC¦Äç÷¡ìX–÷ ìk€ ‹ý+àz¸ƒYGÝÕÁa"ò�ëà#íì¯K{,+Ÿ­Yl»,€&ÛíoD8Ñý†{ñt0ϳ +k¾kˆ"T<Ò³Öÿ²©ç}öï Ê6ÊqzqC¸…ªcyžUîOý\¼swï~ß,#Šþ*úÙA +�¨g\¦5Çu¤ËótH¹.µðH÷�¨†Hn¥¼_ëÉÃÞ.:³NSÃ- +¯¨Wz� ÿÒ«5oµa¥«6Äuš¾énŸÒyžîÖÆjçç.mÛ©¿¶Kj»{l­þ»,eg¦{]Û^üdvÐÊB),޲J†å×Ñz,ÏÓ¡õFü•Ö½P=L�5´^®=7 µ!S å *å}-$èþ¹Õ¡ÖùVˆÜi³“êÚÌç_*Ê„tŸYº°®¯ùír›WM�Ñí,xUW‘z0ϳ!Õ\�ën¡qÿM­‡G1NÓ�H¹3oÙ8Œ„Š”o9âò†ö©k‘=¾óô°B‰pk¦?˜çéy#&Ü™uÇY¿õZÞÊwÙ!�xë[Ž€ýåŸÁìðÌót¾«~‚wÐr²ÇÙ¶Å”/,Öû‹Ÿá;èíq(=Ôã–j·Öäó<zoÄ®7ÇÿÇ!ü›!ôžQs­ cT"ø¤éÂÐ&Ñ^�ö�}ǃyž �öF|:Fûãm“¡—Êšº"v@ÂÏ×ˬ¾Zöç…ËØ¾É~9»ƒ\{ÿÀÁ1õž;ÿ©rºgÿy~ö€þ®ø1®ÑÄ#�¯?’wÐ÷À>ëÁð\ÁÁµNO^W—¥¥aibàmKŠNð²t‚óÒ6»ôº§y"-=E½öe[N°t¼¡»-G-íšÛ\Ú}ÍLä;v¨Þ–•?¨wÍÌ‚mt”rP΄,”=£�ÊŽæîkò3q˜¹T-6ùÊU½oKŸ™ÅçKÚÒ~ª',¶çåo�ÛQ0QÓ¼²e*jç¼óÙÒ?žÙ¤Yº¥ë>äŽßý蛆!Íl®xˆµÌmýmÄ·‘'ûJ/÷µJÚ… ”]û`ì‡fS`m«~×Ýï+–Ð뾨~‘ÊŸ몟âè§™Ýö˜m�Õ¶ŒÖƈg>IB;ã\.oŸÌ!×ùC²Á]zyD1fé§2òR¦¿êŸ¼ñÏòäjmSigÅôë¶McñqYû¾sm¿Ñìý"Í>ïë~¿£ž�#·?c�½n¿‘êÿ"¯ìË9ƒµçr”ô¡(ò`ž‡8ûÀðÑ7{é¼RïAòÍUê’qù¨—¡–(s'ìV˜Ã¤26}^zájã¢Aä$�¨ðñq�о[À¢”Uäh÷¢Ám´E/"Ètä÷XkÛ�öþ¸¡=rzmËÑÇA±9×ÝLrƒÚª¶§5žõpŽãÚ…(’Þ�cF/Zé¸YÑaù®Å23Q×µµ×Ò�¦úO/Qß ›qüEÕ®/þ^fÁ2SæYnZÍú"°HA÷™²<‘Ÿ–™ŸÍú­üe0{VQF^ž-mØtÛO§PŽIÖå¨|Ò¤ ½KçŒ%mTÅ|¦£™“²N×nÒűú¼“³¼�è§–Š~C¤è=tFuéF~±¤ÿ©tð�XÀaâU3÷Ï/QEŒ±æGñÛ‰^ ã1Ôæ ˜„ËGÕÊrº-#«ì‚É:NyL‰ Q-ûZ“fIµ0~m å÷5ìëTMdËѶsÅ‚9ƒÞŠ©õjÒ‹˜^“&»\…f +Í8MØ t +©}ç +å+ô¸Ð²r›8©Ž—.¥³ çOšUFÇOÓï™*|“ó”Ú5HÑòýªWBc³‰×NâòÐXÇIÐ.ö´Ì]:ƆYî/�”�žH·¥n[I™Ë˜<æj‘T#�µX7Ô51QXõOãJ.TÕTמAùm%îvú6T½j•Íàî[¹]w¾qql=®é}ÍÞV.Ã|^ÊÄæF1A?ÕJºØ¨6Ûõʘ°RèâN£oE\Gkc§rüÛò±2iƽœþz*Óœ±ÞÐr2 l�ëçõùÿ�æ÷øùÛÉ�ÿPÏSŸçq£[˜Æ­+1ŸÉèehé ˜^ŽV…mØ0¡qŒö»X§žÖW4´yܯ׮gW�ØkJÝT7-úîC&6 ºF[æEx¼Ø™÷öMŸ°çK[GËc:‰¿Z… Þ\¦®³}J>³"qEIû”­3,#.x¡¸dænÙÊL$¯¤¹žìw¼+,ÕÅ.XA—¶ë\ŸfyÑUVZÁ’ ¶ü‚ì4¯4¯ìŒ~xx½»ß“C$mÔÞ¤o\ÚFÒFx²Ô–˰¾lsŽ- Ë:x»‡ZY–�=Û‚œ>4zháV£Lšz¶%�畺*[UZ'ŠF�©*k%ÆjSX²U·”'ÑK±Å]úWîiÏ{¥9Ñó^ ›´Tn�ñZ´d[ä9œco�ê)[,™Y๛Ôõ”¶Ê¶u»uÝu¶=³f¸nHè‘©êÙü&åCü÷ÈØ™ó »Rªú¿ì„èÔß@‚‰Úéh�-/•U)pˆ£÷‚E—ØÖÈÝy®ï•lwDê^ ¯ Ý19kUÔôz`Ù„7(òm+ª¾:XΖ•ؤû lušS›� ò~ÈòDEÙj—‘–Šô:XKAo¢·ØE¥å[ðYñÃö[�ÿ?A¹¤} +endstream +endobj +604 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 603 0 R +/Resources 4 0 R +/Annots [ 605 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +605 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 123.873057 101.433071 105.123057 ] +/BS << +/W 0 +>> +/Dest (cb89-1) +>> +endobj +606 0 obj +<< +/Filter /FlateDecode +/Length 4704 +>> +stream +xœÝ]ÛŽä¶}ï¯èçVx¿AH8ȃ� ‚ ÈÃn¯×F0`ç!¿ŸS’xU’ØÝ³­w0;­*^Jäáa±ÄåUàç+‰ÿ‚‘CÑ;s½ýtùù"oþ�)£ú;üz{•ÂøÁÊ肽þDí­òîúrÁÍe�üåò·ß\þ½Ì#¯jˆÑ)i¯¿|O*£¼–QE¨„ÔŒÊÚÁ{e£rrÀ-ÆÈ©`†õF™µÊà ƒåT0Ã(U€Úx©×ª3”—†SÁ ­gTRÀ©„`u0D££“vphtÇé”\ˆ*²:�ôŠÓi=8o¤•œ.Î98��-6 +Éé,l±ÒÁé`‹ÑÁs:[´Ó‚ÕÁ¼æt¶(´Ndt¶]�ÕÁá„ätQ6cX]„NÖ:%ì`ƒÖ‚ÓI9X`S³:Œ(t’óŒNÁ'ldu°Åj¡8�†-?œÇÊÁáGAñÇÊûÁDe8PA&˜À±€ +q0ÞkŽT´ƒqÑs< …„NIŽ´€-Ö8Ž ´„-#—ÕÁ ÇZÁ$à¸@kØ¢Œæ¸@ƒm ÐÂq�Ý%Ç|k„th.Ìh0®Îp\ A¹€Rä¸@ƒs5¸“ã ÒÅp÷h°®¶Nq\ A»ÚÇq�ïj#Ǽ«5r²:Øs\v´ šãÞÕRxŽ xÃHq\€^€CÇq°2¨Ç¼«‚0ð®ò˜X�05Ǽ«,n�›¹Á»Ê +Åq�ï*£ÇÊþ¬7Þ…XÞ€- XŽ 0ßC§4Ç(lPpK8.°à]1ý1cl5ÈǼ+º�ÕÅAz´83nÑʃt.r\`Á»˜¨4Ǽ ú €ą̃Šã Þ•35§ïJǼ ¿Ár\8 ǘß)]VCà¸À‚wAKŠã̃`VçIr\2üPŽ xÓ{ä¸À�w…ÕšãÞn«ƒ-:(Ž à×@‡aËŒi8«ƒP` +NÞ=ÌéÀ»BøÈq�ïÒ´Éq�ó$P�ã8À V¸`†è½ã¸ÀE\>Vç\[Ž ¼€À‚²Xl1Þp\Çzˆ:Ž ¼‚-Z)Ž ¼‚-p8.€G0D ï›]ÀÀ…]ØO‘ã0Ù¢1xë°C«r:§†àA׬.@'=ÇÞ›S±ä¸k©!`Ðs\‚È]â¸f@' Ç>Â Ž 0 AÁ3çt¶ÀÉæ¸ž.tRr\l�7ÈqAP«L'8.À �µ$ššÓAëÌÀqA0n W‘ã ¬4Á”¬¶€&8.@ÿÐbÛr\€Å›Xæ°:Ø¢­á¸ EËÍÀqA°E Åq°IëMÏqA°ÇQ¸�ÜdŽ @ãÐ ÁqA”ëMe8.À¸¤õfภj�õ&–x̸�ÚÑzÓs\ l±pQXl�Ó™q NÂzìÄélQÑp\�£õfà¸nÖ›ðèÙ�@ õ¦gÃà]ÁLœ¼ ÏÔq\€ ¬7áÙrk{âµþ¯ ´â lÄ@€z-æV6d À½˜­<3 _Z#±A˜‰•eplÔÓ*”R°aþ…?fVœ0EŸê•<æÌàé&#†…�wŸ×%™ÞH6ÅÇ~ùáòÛ÷˜|¯?üçòé7c¤,ýH8cjÿ +Ã@Et·…÷-qûÚa�9ZÃîIK•úXŒ’ Á9ÈFFaº£×õ‡…¥0ô»eµ÷¼®7ÐdNBÃÚÚ›é•�Ö©~¸=JT=Ö˜ P:0°Æ˜•ÉwfyEƒVpp Ò計B1.àü +³HüÍ» FÓlŨ͗RÛd>ˆ+v£ìõÝO—ßþåo_ýî¯Àú»O—ü<‹ôRO¿ð1…¹ýþ+ ¹uÓßQö×vº6aþkæt~)Oé(ŸUkYN‡zmS–ùTå�ËMe�¬Øúû^ß}{ùû2¤¨1ÜÜ +ŽZ«u7F¨°S˜@ tÿÿã×ßüéÏåþ±”„MTÙC¶âWN2�ÂX¯Žd#Ù7¥Á=ŒõW‚AÀ>ISáØÆ³½ `Á+JȲ 0Ì +‘xqŒ�yžAãç!…gwP˜’£–èʽoç¿ôë§kVg ¢åû&ÍÇùï,WjÖ§ß�óßX¥ý0£÷ûÙ®„ÜfT8edèY׌¨v¤ØÈ�*kQ^ªÓ7åúT÷ʰšËˆ�(ëËs”³áÈî ,ñKBñµ° §}¨z+µòÇÒK˜–7so…e¯·ìµ1Í÷ nøK]ÉÎE}j»ìQw€ÌŒ6É”“®«òÒçÜŸúëÛTVíì[ýR£º©}yΆT%vù�Cˆ” ¯$�XsÆ.×Ü–èYpWÓÛ¶AÆÖl?æ½-ííHÈH#KN£ŽIóý�¼îªkÝ|Vsž¸1òd¹�|ß·b—mùS•|[Ȥ§h3Ê(pm pÈìÌs:dê]Í­ØÎØ5²öPâÖ­¾à¾÷'ä»×@–,éóh˺ +š7PX|?cÕÚböQØ—çt(ìóÙÕÄg}X¯^ö�Úr‹¬¶'k.½£¾TÇèŠ~˜òO+“eù­_\קö­ žLmw«îãÀ‡Tµ?HAþ —Í�yN‡¼²íI¿léúªž]ÍdŸ9ï?×ìV¼ÃÍìÏØýiߟ3ª©æC%¯ä³�Ú ôV>¢ÄG…<÷ÑÛ—çlèÕ~eiiWDö}Ó³Õªe�ïj´¼Õy´iËù0ûÌŒO›=�jV_ÄîYÉmÙ›ò®êxÄêâ;v#¶3Ïé»ïožÆ|vÍ{Ïêí ¼›{FÅ"½ÙçZmî_Ãwæ9r÷}Ô_[DçÕ8û-Ñ�Ðz8ú6Ðìî_÷wæ9š÷ýÞ•?zàAp³sFÌÎȨ£C©‡i´ØÆ_móæü™dÖ¶޼¯Ü7ÊžA3C¶H£CjB=M\ñK걄h3§oËOÈhšëiPÝîÚX§‰v€ßihKë>jûòœ µöÀOwìÌs:4ø§»¡Wßú°…kòª¡AÂÿsoj»‹{|óš«ýR_Çn ÷�odwæ9rcß܇¿súÖmö“qûÂ^ƒ_Ÿñ·wãm;µi87>kíÌs:äöù¯÷¾Qb�¢ƒ†*îIÑõÅþyŽƒš=£cDžb´ŸÄê;\wç¯wå´‘¤*o»Ÿÿ o½ˆ<çîÌs:¤øªÕûKWüV½­ì­ßØ£:ìÚû^V›g/†zÏ{ºèž>ï +q±ø³�yN‡ØçvžÏÏ{Þ“9íjñÁwÄ|Üζ]LÃ{¯¢LÝëß$Ÿ_cî0ÉÄÖo²O¯Z¿ÒO‹¡ò¢lI§HêpU@Rôtð÷^îqÏÄmÚw1¾|þžž”"¿ùS¥ww�OϧùÛŽL"Æ÷x›ïK7�ïñvSzz�75ù8SZ7ýŽeÍŸÇrBb‚¹>š¯)?=ëô“~Q¾�ë®ì1ó;Åó=Øt«nûùâÆCäxh”pa�ŠN•¼:3ЯtHIÚÈÔMrlXyÝÈ9žÅùsN5Ï)èÄ.:­e:»³º˜Óÿ8-é ÇÚË’×ÿ"Í·øý×Å\ÿ’Nšæq%2[¨Ì­ q=“ѱÀ¡SLÇ'a6•P™Šö‹X†’Ö&4äy\©Š¯MÉ. +±§”23¨ÌÚZhKVb•¡«¤®ZÆîoM+fGæÙ¾)öt©ÓÍ¡MgR%«pQß.CÑé2%_«"qEIË”.é�àUF\ԅⲪ0Ëf ëJrÓ“ý¦î +MuU•A—ºèL™f뢓l¼‹* \`]_ÔYWö0F?<¼žî÷Ùd—FI3µgéK-Í7FÒLx¼T�—ny™ç}¥‹4xK å²t5ötvrÊÐ(®…Y\Ô­¤¡d›غR“d‹JÓD‘é2‘d¹DŸlrs¶Ô,ã¶•|ö)ŠôǺ¥mÝ+¹mÝ+n•–ÊM3^ö–tv€l g_îN””Ù— ŒÌÕ¹³Ô””:ÉÖu›eÝi¶½V·aŠ!®x¦¢d³«”ñß#cgÊÓD¸TégŒ„ÈPÎâÃDm¤×J_#¹;Á9pˆ¡r½ Uhäî<û±’uD$ÅJêšÐƒÑZx ¼m˜ðEÆ$Ç€P¾ô´T´q<ÏV„@ç9{ÁÙ6FàÌ"|2þü'ÎåB +endstream +endobj +607 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 606 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +608 0 obj +<< +/Filter /FlateDecode +/Length 4908 +>> +stream +xœå][«$·~Ÿ_1Ïwt¿@0Ø�òØBÈÞYŸ˜p°ó�¿Ÿ¯Ô-©Z]ÓÓsv¼ ‰—ã™®Ò¥Túô©¤V÷è³Â¿¯4þ—œžRÊ1¸óåÇÓO'5E¯ð_I±º(ê?á/ú³V.N^ç�üùGØ8ÅìM ç·þ7\òäo§¿üêô¯u}6SÎÁhþù{R9;Å£ò‚*C¥´TÞO1UК˜³¤‚>:㶪3\N^RÁ gLT fXµÝª2Ì0Q;I3töQPi;´QJÔÁåœ5‚Nû)ÀéAÒ=…”Mu:�¤³v +Ñi¯%]žB>I:[|VZÒyØâµsJÒÁgS”t¶Ø`•¨ƒ-&E+é"l1ðNt ¶]IÔÁ”–tÙN>'çD]†N¥˜¶:£ü䓵JÒi=y`ÓŠ:Œ(tRˆ‚ÎÀ– |u°Å[e$�…-ÿ$xÂÛ˜’0Z �n«¬–t¶�¨ƒ-è|‰L€-*‰0‚&â%‰LŒ“ËÆI$`’�\rIb“òäb´ ˜ì'r”xÀ* �ÑX[¼ X [F®¨ƒ-6;‰ ¬�-H q�µ°Å8+q�Û: Eâ ºu*k‰ ,øÖ)$.° \˜©$.°`\›‚“¸À‚r¥,q�çZp§Ä¤‹á%.°`]냑¸À‚v­KAâ ÞµN+‰ x×Zäu°–¸ì8Y�¬Ä¼kµŠ8ð.†‘‘¸½:‡Aâ`e2))‰ x×$å$.pà]1ˆº8a Z‰ x×x4Aš¹Á»Æ+#q�ïg‚ÄÊþQb4Þ…x9€- X‰ 0ßCg¬Ä(l2K$.ðà]�1ý cl5锃ļ«ºOÔåIGx\·ðò¤CÈxð.&*+q�ï‚>“Äàø 3ª‘¸ÀƒwµÅL-éÀ»Úd%q�ï"nð“F qæ·I+@WÔåIå”$.ðà]Ð’‘¸³ð¤˜DÔÅ @Ò€Œ'…8Tâ‚ÞÅôž%.à]å­•¸ €w•CØ#ê`‹MFâÄ5ÐaØ +cÁê¤ ˜BÒ�w•FK:ð®R1K\À»4mJ\" L’¸Nˆ‚�Ä!¹)Ç$.YA‡�OÔ… ×^₨ ð ,Q[\t °ž²ÍIâ‚h`‹5Fâ‚h` B‰ LY#ú—°p×¶ R”¸L6¥ìœÄѬÇàUIÌ”"èZÔ%èt”¸ F7a*Ö`-5% z‰ @ð…KÀ è´“¸ fØ‚¡"q¦¢)Dæ’NÃÙ Ò…Nk‰ ’�-ˆ%.H&a•”Ę¡±–„«%�S´ÎL$& +%.À0ÁJL)ê` hBâô-¶½ÄXü`±‰eލƒ-Ö;‰ R2´ÜL¤[Œ2›´ÞŒd[ñI\�U˜(L–¸4�Rd�°Þ4NâŒKZo&‰ ²UXob‰'ŒÛl­7£ÄÙÁ�EÔÁMY·à$¬7ÁN’.À“�Ä9Zo&‰ f`½‰ˆ^ÜH´ÞŒâvx×g0“¤ï"2 àëMD¶ÒÚ^�x}D|&+­8“¸c @½s«¸e À½˜­¢¸g @¾´F7 `&V–)ˆ»˜V¡ÔJÜ6Pà_Äcnà óîߢ +€CÄœ™"52cX8D÷mÍÑ“Ù+Éæý±ŸÿqúõGL¾çüûôú«²SVÿi%µC|…a`2ºÛ#úÖh¾ X›b,»+1Us7Kƒ—m62 ýwÞ~YÙ +SÉXäÆJ(ÐêŸRµT î)¥;,ƒ±"04Kv[ïÎsÓ䈘 ŸÛ-ÛÊ|ÄêeNl½;ÏÃm ˜Ä°hFˆÉëeHFÞJüØÎïõbÝ#Ô‹0ÞÁÈ¢±G3=ØhÛz4S'”¥  3ñI𠥩Ÿ™|g–¬°€GD�ÆfC3(hkåV‰¿ýp™.VÌûôí’™�˜Ncr4þüáÇÓ¯ÿø—o¾ùðg ðÃëéo¿QÊ}ÿõWŸ>ÍŸÎ/ŸËµ_®½f²8¤ ó'í<×ïõÓ½vÝ­ºPØxIcÝe(o´+oeZeT½š?±”*uÑ_kËëÐÕó×r›-™Ù…6|?Ô{Yä¹—Që«iŒZ|4ú¸ùö뿟?|wúí‡58˪j'áÆešYwñ|,Ëçàù—€qÎÿw0¾¥;àÝìÀ…7ìû¥§oòÑ<ÿè³—²Ž …qU»”•¡Kw¤*é&“Òeq¹‹Ýƒyž ¼Úì’ð¦·*²â€žÈzæuÝ{îãš´6õÒIfE`mæJ™÷"þ–íæí\F€ûÄF*C·8nÖu¥ÖÝ�Òcyž¥nŸc¯!N ˆ{a©ÜP9a@REkA& Òv˜ž÷øò2”- ±éF”¤Ž–Ú~‘©ûÑóÓ¤²@U¹Éh—œ»…Ôcyž©ûAíçÎÞ_uõ{Y# +õƒ¢V^³Õ¯}$¶'®Ë£™æ¯ËÐ^½Ã«< =¸;˜çéк»¶ž{]£„øµyTw/ߨ:º¡g®£�µæ•!šÅ  ¹–g@ˆz]çß cA�õë8´´kYT– ÷�8óŽÑVlެ�<Jëv6ûƒŒ`£îßK8˜çÙlöãב¿ü8û³7�!©z~à‘wõRdü9 u´Ç�1 ã+ŽÂ ¢4ãBf+-›Òµº–`À­–ùµñø K3Ì'êõ +’íý\|0ÏÓ!y?ƵÂz¶ñÏS÷ì³#ÿ�\X˸Ô:–Æ ís¬=Ô?Ĩ¢ q¨{àó½ÑXê´Û¼+¦‘1ýŽ�ÞƒyžÓ7¶x‡ù˜æôâ×ȰÎãŒÊ¨7úºÅ#~.“˜]bʱþ½~ÞÌÿã1#Ìñ4†Ç™ÀQñÞl4Æ3¦[šOëx¨`uð—8£ðvÊøí±®ÓtlOÃÏ·ð{,ÏÓá÷ÆÞ®€ß•ŸGžf±k‰$’Zï¯r¬ðØtÀÔ‘Øö};Mêê^ŠcØmc`Ü_YÊ)û¯âX›åÛ gê B±žh—ìÞ¬u޵k“JOüõwß|ûû?°}JÚ¡¡5]»Ñ¾çÙ¦yy± ñäá9­'z©­›¯7ò4ì-ù=›±Êuc†º¦&Ï“÷ý8.u•zýÜ�%–ÉÌyV÷‰_�ß=ßÄÑ7Ûñº?VÇ6U;—¾jØ^>õ‚“—ò«½dûKoSigÅÈëw®ûOæÌ9ÉË.w˜wèµ½å#�‰~í#Sëdc«ŽÏ1ö�}S°å�=q(ö9˜ç]Guôøf¯wSòCF¾%HCi\ôèåö�eSëÜ W+ÌaR™Ž¸VºãÛÂ3¿Þ/ÑØ<ù€‹(”è_oåv©<‚hÏ­Ü>L٣ϤÜeo«Ø›2åQK烽â¡/u»ÿfë�-§ž­–,½éyzö® Qnç­ÜÔoàkçy— FYr!ï`Ó/´¸_ÇêÊœ”=ÐÞ bpk"å“ó*`²×‚ m�AÏÐezZe¨´Œì+¤èNñL`ÞšcGyæy’_ã>˜¼Ç}ê#Ÿ²†>_…ýò¦Àê\׸€7¹†m[õ±NÉë²ëÔi>-Ÿ‹Ü˜E_ÿ>-Ÿ™¥}ùÒ‘ÍãŽcEo:bx=˜çIPÖÍae÷ÇÚÛ¶æG¯ÆãW׎49¾•)Jy®ãRl¶|ï� Æôãm�«H�ñ~¤ËótHÍ»|ø¹Ç–Þ}kèíñ€ó1üàõemß*.»r˜e5’–ö^ìÚßÍ’'_yº·£µûÂbŒ�›j×�™TãCz ƒs0 ÜzhàXžgCfyxg¦"µæ=ެ=”HDxÞ�OÈw�@–îé7GÐ^Ç|…=ös˜ ±Ê „˜}Ëót(</Þ³Þ›·¼×|´‡Ô‘ûDd]9LX�~G}«ƒŠ/sþÕMôñÁá*›®ÛºâIa�Ô݈!� 9˜çé�w#†{r<ª3¢�õìf&»ò]Šþ[=ÂjaÃ;{­ßc÷ë~<çÌP}Dax°ä—µWÐËbDm¦¬’Q·¶_æy:ôÞˆ+ǃzÊÈz–ï•íðGË—|Øïj4ò¢úƒ(ãaìËPǰÇx×Jîš½5ÏÍU�ŒØÜcÇÈ=˜çÙ›÷ãͧ‰?wÍ{Ïêí D7÷ŒŠUz·ÏµÙÜ¿†?˜çé�»£þ¯íè<Œ³¿$º+Zo޾+hö÷¯ûæy:4ïǽ›xôF!ÍΫ·A\|w¨ö0�–ñHüˆ˜/ΟUö²µ­sä}åö×\A#‹I�>X}0ÏÓ¡q?޽v¿�s®ù¼õt;ݰӻ»+µw=ú©Ä² ú‡ƒÜGwÖê�éG¿SE«w¬G3=6µº²>xâ~°îÚ~|DxølP÷ÇE�öÚ–÷~Å^G×Àz3É hÖà Û×k�õðJ³õùI?aÓÙ�àpëåXa>RMÌ”sYõGêãõ„CÙ½žg¤v4™tß÷®/§–ãÂåHl^¸°=Wý4WPìØ¿jÇ‹My,@ÍGtÙÞV~=NÌìYÿÎË=÷Ò†M·ýt +塺¼'Z…4iC?$qn¢ç³b>Ó{I“²N×nÒűú|%gùù�ŸZªå9½¤›^ÐZº‘_,é*üãIg7‘ÿË3 +åíùªˆ“©]üv¢_Op‚عþ Ã 1 —¯ª•…ňd°mœò˜’Þз|íWÐQ�ù«ñµ5”ß×lôVK§j"[Þë8W,‘3è­˜Z¯&½ˆé(Òd—«ÐL¡#«MØ t +©}ç +å+ô¸Ð²r›8©Ž—.�©º +C³ÊèÝ«ôÿ™*|“ó”/Ú5HÑû“ûU¯„Æf¯�Ä塱ޓ< ]ìi™»tŒ ³Ü_:)!=‘nKÝ<¶’2—1yÌÕ<"©Fk±n¨kb¢°êŸÆ•\¨ª¨®‹}ƒòÛJÜíôm¨zÕ* šÁÝ·r»84î|ãâØz\Ó˰›½­\†ù*¼”‰Í�b‚~ª•t±Qm¶ë•1a7 ¤ÐÅ�Fߊ¸ŽÖÆNåM0Ë×>Ȥ÷rúáT¦9c½¡çQ‚ÕôÛ<ÊÒçÿ ÍwøûçÉ�ÿX_&<ÏãF5¶0�[Wb>“Ñ/¥ƒbúe *lÆ �c´ßÅ:õ´¾¢¡ÍãÆ0¾v=»êÄ^SêÆ ºi¹Ðw2±iÐ5Ú2Ïøáeðb d>·oú„=_ÚÚ8z¾†^C]­Âo.S×Ù>%ŸY‘¸¢¤}J‡Ö–¼P\² +s·le&’WÒ\Oö;Þ–êb,Œ KÛu®O³¼è*+­`I[~Á všWšWöF¿{x}v¿/&‡:HÚ¨½I߸´5Œ¤�ðd©-—a}Ùæ[M©ƒ·{¨•eÙØ³-ÈéC£‡nuÁ1ʤ©g[x^©«²U¥u¢ht™ª²Vb¬6…%[uKiq½[LÑ¥?pO{Þ+͉ž÷Jؤ¥rëŒ×¢%Û Ïá{ëTOÙbÉ$ÈÏݤ®§´U¶­Û­ë®³í™5ÃuCB�LUÏæ7)ßÅï;sža×AJUÿ•��úë÷1Q;­±åU +âèGq¢Klkäî<û{%Û‘ºWÂkBwLÎZ5ý6¦lÂù¶‚U7SΖ•ؤû lušS›� òãhe/³lµKzúÃÐo!Z +zý„STZ~óDÙFYmŸ”ÿCÕ•& +endstream +endobj +609 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 608 0 R +/Resources 4 0 R +/Annots [ 610 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +610 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 438.873057 101.433071 420.123057 ] +/BS << +/W 0 +>> +/Dest (cb92-1) +>> +endobj +611 0 obj +<< +/Filter /FlateDecode +/Length 4773 +>> +stream +xœí]ÛŽä¶}ï¯èg–y¿�H8ðƒ� Œ ÈÃNÛc#°ó�ßÏ)I$KìRKÝ3»Öñb<£*^Šäáa±DIú¬ðïs�ÿ%§‡”r î|ùåôëI Ñ+ü7¦X\ŒêïðýY+¯sHþü lbö&†óË ÿë.yò—Ó÷Ÿ�þµÌ£ÏfÈ9íÏ¿ýH*g‡˜bT^Pe¨”¶‚Êû!Fム +z@s–T0ÃGgܵ* —“—T0ÓU‚ÖEm¯Uf˜¨�¤‚:û(¨´‚Ú(%ê`ˆrÎA§ýÐéAÒ=„”Mu:�¤³vÑi¯%]B>I:[|VZÒyØâµsJÒÁgS”t¶Ø`•¨ƒ-&E+é"l1è�,èlº’¨ƒ-*(-é²|NΉº �J1]ëŒòƒOÖ*I§õà�M+ê0£0H! +:[‚òYÔÁo•‘t¶8ü“tà ocJÂl54»­²ZÒyØbLt¢¶`ð%0¶¨$ +À ˆ—$01.'‘€IvpÉ%‰Lʃ‹ÑJ4`²\ÈQâ«4tFKD`lñ.HL`5lq˜¹¢¶Øì$.°¶ �ÄÖÂã¬Äl뀉 ,èÖ©¬%.°à[§t�¸À‚pa¦’¸À‚qm +Nâ Ê”²ÄœkÁ�X�.¦{”¸À‚u­Fâ Úµ.‰ ,x×:­$.pà]k‘SÔÁXâ°ã`u²8ð®Õ*J\àÀ»˜FFâŒê‰ €•Á¤¤$.pà]“”“¸À�wMÄ êâ€9h%.pà]ãÑiå﯌ļkœ (øG‰Þxâew¶€`%.Àz�± °ÁÀ-‘¸ÀƒwuÆò'Ìi°Õ Sxð®N>Q—Ñã¼E/:„,q�ïb¡²xð.è3I\ް¢‰ c°ïÉÄô2ÿtïÛ�y‡Þ�³¡ýhu»–»žU-¨è9ŠŸ +áVÐfVʼñ[¶ßyâF´ižî6Sº;ç%£4>p®`gž£¡4nœ+¸çéè�ge¥×HŒg;û'§?öë/>á;‘ù¨Ê ãk¶Þ-°3Ïá�ºóé ÿß9�OòØ®_ö‘Øž¸,sížâ=oˆÄ`wæ9Z7^/d—#P‘ÉÏjjµŒ«–p%Ê^G¦ózÔÒ¹úÅ©Á´L7ž]í#Bů{^æ¿BÇŒš1ö»[(3K•gî˜qæ�Ù6ÚY;¹'ÔÝ?«ö¯<…ˆÉîÌs8ßö_ïy“=ñQ‘Tz¾ã‘‡F)ªëSÙI¶çÖ›{8 +Å7+Åk[Éi¹Ú!­Õ5ÏóÜjY¿Vç÷åºõD=¯¼HKÝÏÅ;ó Éé¶�k…ýìÕ=¡CŽlw�m� KY—Zvçõ꾜cul¼‘I´¡¿ûÝ?+qc6ŽuÚë¼ ¦‘1ý@”wgžÃazç“_ìdAyÖ¯b�û…Q7ƺú#~*“˜]bÊ«góoŒóÚ½äµgV¤»R4‡û•Àw^ñ­Õ¨÷g$L/ÞÇü¡«]‰+ +o§Œ_v6VÓëþ5úy ¿ûò¿±]¿‹~¾ñ V=é’W°Â}Óþɘ¾í[¿iÎ1ìÖ9ÐÇWØ—r¬®òõEµ4„b#Q/1þƒu�¾“! Új“Æ‘øÛŸ¾úúÏaqJŠÐО®ÞkaÏwþLíånÆVÄSOi=1ÐSiÝt}%Oj%"4•5íhÔ'Ù4ó5g¤Þ®XFBZUYú9"5Úç§‘jl2ÛQËœz~WW[ÞÕΙWi»–²ž)VÖkÏ07÷–Ÿ©æ^)k¥j½Mé•}™-³ÉaakŒCÈ–¾å4ÛjçQôÔÃiîEêÑ®Ë –^tNÓ¹.glCéÝ0¶¹`÷»ù�ÊÑ£ ¯íø&ü Ø š+n&Ù`¼ë×9——"Ÿé_Oi­m(’>¥fÓn¥Có¬'Îø˜ûeZ +Æ&g6™ò­vn Ï#æ3½©?ÁõÔe˜ôرú¼’sü ݯ5Õü�:EŸ­¡OL°csú_Çþ³Ò ¡ÌÃñ{Rj'S.šøåDßs‚ع6™7Ä$œÿTµ,§+7ÙkxrŸÒúò¾oF Ö—?�/­¡ü¾d£÷¼;UÙñMçSÅ‚9ƒ¾SëÕ g1}“- v¾ +ՊͶOÛ +l7ÅÚ*&ô×BŪkbãŠ=š¾áQ».4a5�w�fÃ_ҚȆó–ðrBµ¶—¾ˆRúT)ªô®QUf™Q¹J}IYÄÕqD—“ ü\•¢³êÙ¨Ñ÷4&a*@r5].éÑå$¦›Kóu¤bM•ZÖ\z¾™Ò nSíxAva‹l¤�L²9¢lùs)4e¬Ub¸1WÂËÉ»:›øåä£�Ú7®P¾@� -+·Š“jxiRz9Íô¦f‘Ñ×èÿUø*%æÿЮBо(Ò®Z%47«xÙI\*ë8©´‹--ë.cÅ,ï/�”�žH·¦®=¶�².cò˜‹yDR•<–b]QWÅDa¥*Wr¡*F º&öÊ/ q³Óש +°—Ê‚fp÷µÜ&•;_¸8Ö×ôy˜jo-—a¾/ãÂæz1A?•JšØ¨ºÚµÊ˜°RhâF£/£¸ÌÖÊNã;Cç?Û$“VÜËéçÓ¸ÌëMÆÁjúÚ÷²ôù?Hó ~þyrçoËç5¦uܨʦrëBÌW2ú6fÚ)¦oea�6Lh£ý&Ö©¥õ u7†ñµkÙU#ö’RWÕUË…¾õ!› +]£-ëCxéz±:2¯›¶`O—¶4ÕXú0K± +¼9¸LMgÛ’|fE⊒¶%ZgXF\ðBqÉ*ÌͲ…™H^Iíz²ßñ¡°T»`n]Ú¦sm™åEÙØ +–.°å¼`§y¥ya�`ôÃÓëÕã>›Ê i¥ö*}áÒÚ0’V“¥v¼ Ë˺æØ3]”ÉÛz¨–eÙܳÕÉiS£¹nqÁ1ʤ©e›x^©+²E¥e¡¨t™*²Zb,6…9[é–±ÅIì¥X}Š&ý™÷´ç£R;ÑóQ Wi©Ü²âUoÉVÈs8ÇÖ:ÕRV_2 ²ÀsW©k)m‘]×í–u—ÕöÌšáš!¡y¦ªeóW)â¿GæÎ”§‹:H©Ê¿1¢Sû j§£5vüƸJ!€C}&2ºÄB#wç¹+¹Žˆ”X ¯ Ã18kUÔôµxÙ„(ò¶‚U¾$/gËJlÒ} „‚Í©«HÐø¹à1D>„êe¤­"}ܒӛ裦Qi9¦:~#o>ÿý¢gé> +endstream +endobj +612 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 611 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +613 0 obj +<< +/Filter /FlateDecode +/Length 4944 +>> +stream +xœÝ]ÛŠ$Ç}ï¯èg�Jy¿€H`dü`X#ŒñÃìì®�$?ø÷}"+o•uéžÙuË;ôvUD^¢2OžŒÈªÎ’W�¿¯%þ FN!DïÌõù§ËÏ1y+ð/¥Xœ$õŸðñö*…ñ“•Ñ{ý‰ÚO>ZåÝõå‚ÿ†Ó>ùËåǯ.ÿZæ‘W5Åè”´×_>’ÊèÉï…eT*!5£²vò^YǨœœp‰1r*˜a½Qf­ò0ÃÄ`9Ì0JF`†6^êµ* å¥áT0CFë•°C*!X ÆhÅè¤�Ýq:%'¢Š¬ÎC'½âtZOÎi%§‹“sÎNg`‹�Br: [¬4Fp:ØbtðœÎÁí´`u°E¯9�‡- +­]€-@W`u°E8!9]Ô“�ÁV¡Á‡µN ;Ù µàtRNØÔ¬# +�ä<£S°Å Yl±Z(N§a‹Á§OXíC`F«¢Ñ­…–œÎÂ¥¼au°�Ï1€r°ExÇQFÐD¼Äq€ò~2QŽTГ &p, BœŒ÷š£íd\ôh!¡S’#-`‹5Žc-a‹ÁÈeu°EGÃq�V° 8.ж(£9.Ð`[´p\ A·FDÉq�ß!Ç„ 3ÇŒ«ƒ3hP. 9.Ðà\ îä¸@ƒt1Ü=Ǭ«­ShЮ6Áq\ Á»ÚHÁq�ïj�œ¬¶À€'-ƒæ¸À€wµžãÞÅ0R W'àÐq\¬L*Áq�ïª Ç¼«<¦Vç'ŒAÍq�ï*‹Kàfnð®²Bq\`À»Ê(Çq€2�ë €wA!–w` –ãÌ÷Ð)Íq +›ÜŽ ,xWFL̘[M2DÇq�ïÊ€îcuq’-ÎŒ[´ò$�‹Xð.&*Íq�ï‚>Çàø 3ªâ¸À‚w¥ÆLÍéÀ»REÁq�ïÂo°“„Àqæ·I +@—ÕÅIÄ8.°à]В⸳ð$˜„Õù @’€Œ'?”ãÞÅô9.pà]aµæ¸À�w…�ÛÃê`‹Šãø5ÐaØ2cÎê$˜‚Ó�w…Ds:ð®>r\àÀ»4mr\à< Tà¸Nð‚Ç.˜)zï8.pQ@—�Õ¹ ç–ã/ ° ,V[Œ7À±ž¢Ž�ã¯`‹VŠã¯` \Ž àLQÂûfÃØ¸°ñ��-ð9.“M!Ãq�·ñZ•Ó95ºfu:é9.ðÞL˜Š%Lj¥¦€AÏq~"w‰ã˜�4ø[0T8.ÀT4ÏœÓIØ'›ãxºÐIÉqAP°Þ ÇAD™Np\€±$ššÓAqfภ7‘«Èq† "M0%«ƒ-  Ž Ð?l[Ž ü ØD˜Ãê`‹¶†ã‚…›�ã‚`‹Šã`“âMÏqA°ÇQ¸‰ÜdŽ @ãÐ ÁqA”ñ¦2`\R¼8.ˆZ ÞDˆÇŒÛ¨Å›žã‚h`‹…‹Âê` œ¦ÈŒ[pâM°§s°EEÃqAtŽâÍÀqÜ Ä›ðèÙ%�@ñ¦g— À»6‚™8xž©ã¸'ˆ7áÙr±½ñZÿŒWŠ8»b @½s+»d À½˜­<»f @¾#±‹0‘ep쪦U(¥`— øþ˜Yq¼úÔ/Q9ÀÁcÎ ž.2bXx÷5æhÉôF²y}ì—¿_¾yÂä{ýû¿/Ÿ¾J+eåOüÚ8 +¬áb¨ˆþ_M©<ƒζ¢ ˆ,„�÷ä!#|lFJÐb^t##1cº�×z —&Ãb²Y™IWfõ"T�è+íX[oÎóö¶Â�ÄL ï­¯£‘5ò ñ¡ušþ]×FÂ=fêu9œqDq¬±g3½¡Ñk@ÿîæžW�ݵÃ&èK�‡1@ßýtùæ/¿ûîûßÿ½õîÓ寿¡!L‚VkèÃQ˜g| dùØ"f·Qò÷»¾û¡¯‡¹œ@Ä—õPÑpœ…ꊤâH–Š}?W—Ò *MßÏYï²I°ÉÆvœtz6Çø––dÉt—M�ùÛñ—AùjšOÍZ¿Muù9o:ÿˆs*Ûv6É.]˜m�jÕ4]ıiRk›\T19EÅÚ�êeɧó%m4 (léE1_¦ÐË&»¡ÚäºK+Í.[³—ôÕ~?tÛF7—k [’O{MF‡C›•:mw]ai«Ì×F_ôYµO�E×–éÜe›B¾VŸõÅÖ®/È%r?ÙÜ?”SžÎ¦ÔF= c×ùÒ7Ï͆Ô^¾r·�ôØN¥� +´m×gcŸ|îv*Cö¨ßÊ�Lõ«9ÍÂÞŒõ­¡k³]‹<©ÍwÛή06b¶´eÌå•~ë1næk.ãWè.Oéë<¦ä~_Âã_Ú£J�…þí»4 é:eÂÁS:ÍB´„‰øMY¸Va"\u3×­yîòòD…+B��ë�tT”ÀÓAæjö2¥Ö¹iê©Ô¶Ú‹XÑ`ŽU"Mfüñ»ïÞý¹Mf‰2í·_KÏówš¸R:Ÿ;|Ï�°Y!ñÔOç;#(�2ã¶GdÕåo«–£yžú»|Ÿ†tù{d�2ÒÉÖ„ÏaÄ7W3Ë}'×Ëk©×6^«\æÓjF S½EWÛ$,óïÙVë0]¾ÒfŸ–Œ4"vÔĈæ¨ç²<N›ÕÚìá´¶¿jíz®_¾=ÏZÚÛ=ÖªŒä³«ÚEu•µ²Ë—Ø*¹ø c™)F¼*Üc,#äÍŒu2σ ¡2ÝeßC‚åY£½…J›¿éãçsVGÇ9è�OCšù;ËUdù|Èß±KûþKû2�Áky¥N?”[ÙweÊ5Ĉ“(;—çAPÖÌ6beãÜdòµ]ö¼<´�ÌŠ6É”3ÌŸ)FrKY±éL]©M»¹ÛøQ¿�T+oGê¹<‡T·Ë‡B¤x¥èÄš3îöú†Þ¶2Vˆ±]Þç¥}ÉŽ‚Œ2²ä<êØ‘”¯/ñºëÎõp¬rž¸1òdç­ÚÖ~ÕkùSµ|›Èô•é™)c`€;Bæ¹<‡Ì¸Ë¡£ï][¯GÖJÆ8BÜ÷ô€|÷È’-} bYWC3�BÛ|?cÕ„ØÃbvQx2Ï£¡ÐžóÙ(l‹³Þw+u%RÛAêÈ},²Æžì¹ô†úJÉ}?çŸ#“eù£_Üקö­ ždVEÍ�i{�ž/ é™ }ä�ËópÈ;ð!ÇžbÕúºž]ÍdÇœ÷_ëa¢…ïì­çÜc÷§}Ψ¡þ̇j¼÷ÙGíz;Qª)Š èi›}ôžËópè=ð+‡ªÕjÝÓг]Ô²Çw=Z¾TŒœlÚòFÞgŸ™ñi«§±±JxS$·eoÉsÕm ¶ùŽç{.ÏÃ!vßß|ðµ1ï-ÑÛðnn‹ôfŸk�¸=†?™çÑ�ëö}Ôÿ·�7ãì/‰î‚ÖÃÑ·�fu{Ü2Ïáyßï]ù£7;WÄ쌌~u¨ôðüˆÕ€®ñžÐ—æÏ"{¿¶­qämåÖѺŭ�OJ¿2ýd�çò<÷ýØ­;À=çRϼ&ž®Ï3ìôîn¤V|ä�'Wwë�‚]![¡¿xŸ:¤�XYKé^5/m óõdž‡Cæ�¿úƳö› ê¦µÇ·ð ÍûáQ뻵Qúõ\zæñµ'ó<jýÁzêk}Ûý­7¸Wõ…žPº×ûàꯣsµ^¼�Ð;îÝŸÌóp=Xw=yߨzà 9")­©et7qÅ/¥Ç +¢�X>;<Äù#Šk=ªÇ§6÷�NØ|+ǧGz·¶åhÛ‡.ßwK}ó9M´üNŽp;™çáP{à§ +-ýL¨å~úQù®Š>¹W”Ûïåíg„Öü·÷LåØñž½[ß©ØZ‹e=�þÞS¹ó+–éÆQut‡Ôû;øò\ž‡CÞÁ}ú!¾]�u¦gwÇÙu|"¥»k¨úxxkµ|Dì-«ëfI¿Ú5Á¡ó/}˜¤6ô[�}ŸÌóh맯ð)Ï ë–uËÅý­~MÀ/mªèø0£ }^q÷´>J|K<ý<\çÊÆQrô¬hèÖ.ÏFD'ó<úÎù›G÷Ú ¥Œ¾·Š~‹?ÖùŠ¿>ž{ÍHÞ@ióáM�uô4ÊÉ<‡ÒÿòlÔÑߥ¢�Ù ayQŸÅ\øy~‰‚¶jÝõôÀeý*øÑÓÁßþ¬ÑÉ<×»'}¸0´êÆXMÑ®MQÄàÚÌB+Ù1(Ò½Ï;10:ÊS"Œ¢×Oón :ç­ùLËß×Ueѧ}šë €¡–ë²-…(O˜‘—"ž·¸_±¿Û|_'ó<¾â�‡uow}uS»Ä*oÖÇg®c°csÕÚĪ +[�¦OÛ +lÅR‹Nh×BÑU×ÄÊ{h¾rkŸÓ6Åô¾éd×ý%­ò]wî Ÿ/¨V�ÒVJo±(E•ÖU¢ÊtgT¬R[RÖ1µŸÑó…~-JÑ�Yõ]¯Ñ^à³0 ™š.–tŒèù¦˥ÙÚS¾¦ +-k,-ßLiPס6<#Km”¥ž^�Õ�¡ËáRL{£Ö¾¡Ã�Z Ÿ/ÖÔ‘ØÄ/ë™Ô¶q…°z½PwåVq /MJñâ|„¡Yd´“2ý?S…­Rbžt M…í†ÞÎZ%46«xÙH½ÜUÖ1\ Hã[Ú®¹¤÷³}{!pbÒéÖÔµÅÒ®É:¹�Å<"©JK±¬¨«b¢°Ò>•+{¡(F º&¶Ê/ q³ÓÖ¡jE­ÌÉî¶–ÛÄ®rçK/öµÇ%mm_í­åv˜/Âç4±™QLÐ¥’&V¢Îv­²NØ )4q£Ñ—$.£µ²½®«¶AÆÍ¸Ï—\Ò4‡0BÑ•NKzSKïeÉë�æ|þy1×?–­Áçy\‰ÊªrëBÜÏdô^¯pRLïù*Â:l:¡2í7± -­-h¨ó¸R_›–]4b/)eePYµ½Ð¶6ìĪBWIݵŒÝ>­X™×öM›°çS].ŽvܤMå‹U8é/§¡ét›’¯]‘8£¤mJ‡Ö¨.#NúBqÚU›e 3 �}%µéÉ~Ów…¦ºº“Î� SÝt¦M³}ÑE–®¢KX÷'}ÁFö•Æ…=ŒÑw¯W÷{6Ù•@ÒJíUúÒKë…‘´/ÕéÔ-O뜣Óf•eð¶ªeénìéêä´¡Ñ\ ³8é1ÚICË–ؾRSd‹JËDQé2QdµD_lr9[i–tÅ�m%_}Š&ýGßÒ¶ï•Úˆ¶ï·JKå–¯zKº:@¶‡³oW'ZÊêKFæúÜUjZJ]dëºÍ²î2Û^»Ë0Í×> +endobj +615 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 683.673057 101.433071 664.923057 ] +/BS << +/W 0 +>> +/Dest (cb95-1) +>> +endobj +616 0 obj +<< +/Filter /FlateDecode +/Length 4791 +>> +stream +xœí]M�$¹q½×¯¨³€Mñû0¬Û€ Œ!‚Ó5ÛŒ^+ü÷ý‚™$#™‘YÙ5=»µ‚§ÑÓ•$3|| FV±ôUáç;�ÿ’ÓSJ9w½ýxù颦èþ•«‹¢þ~£¿jåâäuÉ_$��SÌÞÄp}»à¿á’»üù7—ÿ^×ÑW3åŒö׿ÿ@*g§˜bT^Pe¨”¶‚Êû)Fム +zBs–T0ÃGgÜVa†ËÉK*˜áŒI‚*Á 뢶[U†&j'©`†Î> +*­`‡6J‰:¢œ³FÐi?8=H:£§�²É¢.B§£‘tÖN!:íµ¤ËSÁ'Iç`‹ÏJK:[¼vNI:ØâlŠ’.À¬u°Å¤h%]„-ÞÉ‚.Á +‰:Ø¢‚Ò’.ÛÉç䜨ËЩÓVg”Ÿ|²VI:­'lZQ‡…A +QÐØ”Ï¢¶x«Œ¤³°ÅáGÒ�'¼�) ³ÕÐì¶ÊjIça‹1щ:Ø‚Á—ÀØ¢b�(3h"^’8ÀÄ8¹lœD&ÙÉ%—$0)O.F+Ñ€É~r!G‰¬ÒÐ-�U°Å» 1�Õ°ÅaæŠ:Øb³“¸ÀØ‚X [Œ³X°­Z$.° [§²–¸À‚o�ÒAâ Â…™Jâ Ƶ)8‰ ,(PÊXp®wJ\`Aº˜îQâ Öµ>‰ ,h׺$.°à]ë´’¸À�w­EMQ[`‰ ÀŽ“ÕÉJ\àÀ»V«(q�ïb‰ 0ªp$.V&“’’¸À�wMRNâÞ5K€¨‹æ •¸À�w�G¤•¼k¼28ð®q&H\ Là%Fà]Pˆ—ÃØ‚•¸ë=tÆJ\€Æ&ƒ°DâÞÕËŸ0§ÁV“N9H\àÁ»:aøD]žt„Ç…y /O:„,q�ïb¡²xð.è3I\ŽŸ°¢‰ â;�…Òøë§/¿ý㟿ÿþÓ¿Ÿ^/ù'¥Ü¿ûNã¯Oó_ç—¿õúu}íãü,§\Ê܆²z§|Õûu›­~f¯k7”]Ú0h—²ß£}µ^ÑÝéc³C íÔkÖ^}í‡þŸ¹—V¿ûÏë§?\þùÓde§4Ó %ß±ƒ£uö—çª| .¿s>„cf»†„߃NÞÊ´Ú¨z5ÿÅ®ºÀ±@òç„ÿƒþö�_zÒTÁH_ì.(f;ÄïÉ:Ï`ìö¿9‚wÐòd×2í>fùû²´õA.rNØÃŒy.„ï ×6*¥µsÚ©p½çê<zÝ1ÿÞ�ÿ‡ðŸ ¡ï™5G}CÁ'M†>‰öî Ñ?À¥çê<ï§²Úß$�qM}="á—ev¿Úöç…Ën½<É~=»ƒ\’b»ŸU2”f:Fî¹:O‡Üã8öëb¬_¡q]nƒBý1üú5ñö¸^´:Âú²)s‡s �E ).›{û¯“už ¹æ\üZ=Vÿ޾BÑM@Cè\enkŠäÖˆ :HR¯x�–(áÑú/lF„5ÒxÝŠ`q ýá„uihÛ½0DŽ~ÞDH;Híqçéèàd�§Cê�Xõ³;V/ZƉïð:G©}™ë[¿å´v¿¡*oNصâÄa�ë¸leùº°Ó7êÓ·Ý!î ö�xöd�§Cì�xöNôù⼯�džv·x7jÙAó1îÉ:O‡æã÷kwSe4j¼)ðhq3´Ëù°"Îõ¦ua5c~íð[åàvM;¯<ÿ]ñc\£‰G:ß~&Ëè³äYOÖy6ôÙ;qê?"Ͻ'Su€ÎÍNéÆî¹ó íÛåv�ÌcÒ“;®“užÉ_—sýU"ù#rŒÓÛ çv6qøè^ôÙËŒZÇfÃ8‹úŽo½,>=û¼öd�§CïqL»­a×ÒÐÃWÆa§SsŸ #G½tžYqXE›Ùi󽈿g»ù€~.3À}a3•¡[œw﵃ÒÞUp²ÎÓ¡ôÎû +öW3<ÕÓ/ !c.u@REkA¦›ãÊ_ò)ïùÉ�c1ªr“Ñ.9w©'ë<RÝq\ûÿOv¢Ö^³Õ¯}$ö'®ÛÜ{¦Øä†Û½ƒÖr°'ë<Z�c×6r¯k””=8{º¹Ê«Öp'ËÞFfˆFÔšW†hƒ6äÞÔ6#Tãº×uý :Ô”ÜïNn¡Î,jˆ÷Í8óÀl+6GÖO ÏÏšýaÁädOÖy:ǯ#�¥U6)0$UÏ<òÐ(EÆŸãÐ1Ã5Æ€Œ¯8 +7ˆÒŒ ™­´lvH{÷Zf€ùnµÌ¯�Çùs¹a=Q¯;HNpñ¹:O‡äã× +ûÙÍ3¡§ÙáÛÖ¶.µìÉëæ¹œc÷ÐÃý‡U´a|ú=ðùÑl,÷´Ûº+¦1íÈòž¬ól˜öw²¼ÃzLkzñkdXçqFeÔ;cÝâ?·IÌ.1åxÿ£qÞ{–¼™;£-Üî¼] ü­Fc<#aº•ù²Ž‡ +V‰+ +ï§Œ_öÞXMÇOhøù~ÏÕy:üÞÉí +ø]ùyäi»¶wºä¬ðØtüX̉Øö±L“ÚÍ¥8†Ý6ÆüÊÒNÉ¿Š°¶Ê·NÒHŠ�D»dŸ*ôÙÑáLÚ¤2ÿñ/ßÿþ_ÿ�å))CC{ºö¬…½~é1ÍÓìm¨'/Ïe=±ÐKíá|½‘§½¬ÐÜÖ¼K ‘Ÿeóh,ל•F»bÝW/m­²=4JýÞÅ6?�Tg“¥^koöüWÍ]=ãœE•vèedV°2åÚ.¿žõt¹.½X¼Z{¢(Ì×{9{µ.ïè¾·¥WaéNXõÃÓçÎ-�;¶ôÃ.£ëÉóiöbñô—m;ÁÒ‡òéà§m;jé×ÜçÒï#;RÚ³Cõ¾¬üAþ63¶Ñ`A9²ÐöŒòÞæµÝ×ägâ*zçÜ<¦j—×µ¯d�‹½léZ�|cÈ r? +&ôÎùÉ¥|¨™°e|<³I³rËÖ|£ìw:/d훆!Íl®xˆµÍíýë¬-}¾íûJ/ϯJY5÷SÙµÆqh6Ö·êwÝý¾šíz=|ŽíÏÌtè'³ñÓØ¿C›}5¯]çYËsæªþJ‚â|Ñw–�Ók·³ø‰Ù°‡½yMc÷Úí÷¡ÿÜè¿#ÿŒ}W�oëos<þØ/¯íŸ9xÍ!•‡6mÕj +¶|â›8; ž¬óÐÇî?0 ôÍ^lc’÷ ù!)MÑq¨—š–ó ìÞ0‡Ie:¼j¸a¥už(§!®�¯w[46O>à" +-ú×{µ�k:ë-Ñž{µ}˜²Ç˜Iµù›{[ðkïzÈ”CT�vÇC?× îöÞÙrž�íò€çéT?¸.D¹Ÿ÷jÓ¸�O­ù8Ï»d0Ë’Cȱ�MŸ—Q8¼Çü‹œ”‚zÀ;A ÷ÛGX² + í^°· ¦ètÌLçÐ 7-3{�ôÄ…ÀèMåt9Ýè˜ôÎÕy’-p㾬ü÷©Ï¿®Gâjyè8ëçpbm÷&µ2ÚqÏÙ…#<7¬ÆeqgoÃs^�×ÏÛ ¤|$ûõpÃ#,—c¨f\zkνUïd�§Ã2�j·�å͛χtsá9·¼­Ø-¿q¾už½mäóPæK{rÙŽ-!n{ ó—åofe_~îUîãÞ¬”sìˆ9ù†Ð“užeìä ­�`öžw+euù;“Æw'í½ãÇÝ¡Ïçz7Qýðûe?…Рú§å̶è1ª^ÛrÖfP츆ϻEîÀ±.Ûc¬®z88l½š Iú²›˜#b‰t¾¡…åã�ËF˜fvK�.š©ë�^6–/,áç e…SY{–ÍhÙPæYnZò‹ÅY�mäuOJ”Í¥eSÊ’­ýš`ö¬’yaÀ҇Ͱýt å\N]ÎfV!MÚЗ7\ƒ›èYRÌW: 4)ët&]«¯;5ËW^üÔJ-ß‚¡è`l:µ #¿XÊÿTøÇ‹¦tµš™a>±^1Âh?Šß.ô�N;×Ó³wÄ$\^ªÖ–Ó-Û[e7lœòXk¤Z^ö”0-œóKãko¨¾¯Õè$I§j![ÎRœo,Q3è­˜z¯&½ˆé[Òd—«ÐL¡Ídö/ÛìULè·BÅn×ÅÆU{4�Ü\º°™Î]§Ùðײ&²á<Þ.¸­¥o¢”Κ¯MUïÕd–•›Ô×’m@\'At»ÂïTmÚa0›ž��Ø; S’kår-'ˆn±ÜÒšo#[©Ô«æêùnJ‡ºMÍñ‚ìÆ›Dú6G”­/×bÊÒ·±V‰áÆl„·‹wm&vñÛÅG¡´ï\�­YÞ +-k·‰“êxéÒ˜ª«05«ŒÎ;¥ÿgªðMJÌS^h× Eg÷«~š›M¼v—‡Æ:Nò€v±—eîÒ16Ìr餄òDº­tóØJÊ\Æä1Wóˆ¤y¬Åº¡®‰‰ÂªWr¡ªFàv]ì”ßVân§oSÕ«v³ Ü}k·‹CãÎ7.ŽmÄ5@Ýìmí2ÌWá­,lnôS½IÕV»~3&ì†�º¸Óè[×ÙÚØ©œÎ²¼ì“LZqo—¿]Ê2g¬7”)VÓ÷)ð(K_ÿeþ€ßÿº¸ëë¾ó:nTc Ó¸u%æ+}ûN:)¦oã©Â6m˜Ð8Fû]¬S/ë+Ú:n ãk׫«N쵤n ª›– }÷!›]£-óŒ?Þ/¶@ækǦ/Øó¥­�£Ì7ý\­Âï.S×Ù¾$_Y“¸¢¢}I‡ÖV¼Q\²ænÙÊL$¿Is=ÙïøPPö–_°0‚.m×¹¾Ìò¦«¬ô‚AlùoØi~Ó¼²G0úáéõÕ㾘ê i£ö&}ãÒÖ1’6“¥¶\†õe[slI×ÉÛ=ÔÚ²lîÙäô©ÑC ·ºàeÒÔ«-<¿©«²ÕMëBÑè2Ue­ÅXm +Kµê–Òã$z)¶˜¢KÿÆ=íù¨4'z>*aS–Ú­+^‹–l €<‡sì½S½d‹%“ ¼v“º^ÒVÙöÞn}ïºÚ^Y7\7$ôÈTõj~Sò!þ{dîÌu†¬ƒTªþ”LˆNýÈ{,ÔNGklùC•B‡8ú"šèK�¼»Îq®d›©¹~' Çä¬UQÓ÷QÊ&¼A‘ï+XSõ»*åjY‰]zŸ„TP§9µÉ•/$+ùË’j—‘¶Šôýƒ–‚ÞD_›•–ß%Gi”´JŸ”ŸÿÅž~Ò +endstream +endobj +617 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 616 0 R +/Resources 4 0 R +/Annots [ 618 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +618 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 236.373057 101.433071 217.623057 ] +/BS << +/W 0 +>> +/Dest (cb98-1) +>> +endobj +619 0 obj +<< +/Filter /FlateDecode +/Length 4661 +>> +stream +xœí][‹$¹±~¯_Qφ•u ÝÀÖpl°ñÃÂcŒfj·m½Ö~ðß÷§¬Ô%•‘·ªžÞls¦ééÊEf¤ôéS(R•RW‰Ÿoþ ¤DÑ;ºÞ~¼üt‘Â[‰C‰ÉÁ þ¿Þ^•$/¬Š.Øë�I`¼ðÑjﮯü×¶Å_/þÅåÿ¦6êªEŒN+{ýçIEFøà½´Œ*B%•aTÖ +ïµuŒÊ)�[Œ‘SÁ ëIÓ\åáÅ`9Ü ­£ +pÃ�Wf®ŠpC{Eœ +n¨h=£R~(-%«ƒ#’ÈhF§¬p¨tÇé´.DY�‡NyÍéŒΓ²ŠÓEᜳ�Ó|±Q*Ngá‹UD’ÓÁ2Ás:_Œ3’ÕÁ¼át¾hÔNdt¾]�ÕÁé¤âtÑ«‹ÐÉàÃ\§¥6#9�R›†Õ¡G¡‘œgt¾8i#«ƒ/ÖHÍé |!üp:ð„5>¦·êÔ»�4ŠÓYø¢µ'V_Ðøh_¤w ‰ÄKhïEM è` + èyo8ÐÑ +rÑs<`¤‚N+ŽŒ„/–ÇFÁBÏeuðÅDâ¸Àhø‚_4Ž Ø–€Ž è–dTð-Iå8.0 \¸)9.0`\q\`@¹€Rä¸À€s ¸“ãÒEw÷°®±Ns\`@»†‚ã¸À€w )Éq�w��%«ƒ/0Ç`GaT0x×(é9. ð.º‘渭*€CÇq°"t’ãïê ‰ãïj�!€Õy�>h8. 𮶸näïj+5ÇÞդNJÿH6ï‚B,À,Çï¡Ó†ãœLh„%Xð®Šþ˜> ¶*DÇq�婢æcuQ(�gú-jY(ç"Ǽ‹�Êp\`Á» ÏÀq8^`DÕXð®2©9xWé(9.°à]Ä –ãÀA(`|Jº¬. +Cà¸À‚wAKšãŒÂB0 «ó@R€Œ…DÊq�ïbx�8ð®´Æp\àÀ»’ö°:øb‚æ¸q tè¶LŸF°*¤Sp:ð®ThaNÞ•ÒGŽ x7 ›8Ÿ:p\¢`Íq� $¢÷Žã%tùX�8¶x �e±:øBž8.@`-¢‰�ã¯á‹Ñšã¯á BŽ ˆ¨}³Óø¸°ó‚/ˆ9.“‰‰8.ðÖa>†ZåtN‹àA׬.@§<ÇÞ“ÀP¬8.À\JtzŽ @ð"…KÀ èq\à#|AWá¸C‘‘9§SðA6Ljt¡SŠã‚ á ¢AŽ ‚˜e:ÉqFhÌ%QÕœŽdšgŽ 9‘BEŽ ÐM0ÓS²:øšà¸í“&Û–ãL~0ÙÄ4‡ÕÁc‰ã‚tšnŽ B€/ZjŽ €Í4ßôD _ñq\¥)Læ¸4�”D0ßÔÄqúešoŽ ¢‘˜obŠÇôÛh\šozŽ "Á‹…ÕÁM‘é·à$Ì7ÁNœÎÁ‰ã‚è\šoŽ f`¾‰ˆžM „4ßôlº¼k#˜‰Ó�w™:Ž p€ù&"[nn/A¼Ö#>ã•!Í8›1� ^‹±•MHp/F+Ïæ $È7͑ؤÜÄÌ286k€aJ%Ù´�ÿ"£'ܳOmŠÊcfðé&#º!º/sŽZÌ,»çÇþù÷Ë/?cð½þý_——_ ™²ü£ ¥ ñº�Žhn‹è[áö�CC+1ið>b“œð±:©@‹cÒ-9‰á/ý»Î?L<‡ãß —7åò£øýòèpÀxL­0}rƒ�ÇMÞÐátŒ¶eLÔ‰�9Ä•’&…óé Ž^Üs å°qã%&äíõÓ�—_þñÏß~ûéO€Ñ§—Ë_%%ýðëoTúîí ´¦ÆÏ¦ÓÉû_„y¨~­ëÊØñ/è‘n£®+“ìŠìe,ŸíG¹õüyÛÛÔ¿Á�QO4ê ¤ÏÕ^'Q7ÊÔûC€ +oŽM÷Y�6qzÏÅ'Uï£Ü÷­úUî!û««�’¿þÛõÓï/ÿói +¶!À–&Ÿ«Hº |î3yŸ_–˜Î®À²T¡íª®…ÕDܼʩµý�ßis6äêõu»ï,t¿g¿'º3Z7{ßšÍñYÿN›Ó¡y=î�Å£7:ĬôŒ65”[8õÛÅ«=bÞ�?³ìËÜ·Ê‘ÇÎ[zë·61iZX'Õð@m�ûlN‡Æõ8v†¬\à ²RË<3ŸÖa»uWgj9Fîx²ð%›|”l†l†þe¼4HÛ‘YÊ=5.- ó�xu§Íé�¹¯¾ñ¨ý&¨:”{|‹ØðlÑ�ZÓäFÓ"”¶¨Ýis6Ôš�|ê³±ááxë TQ§ëùo ­}Ä’¹´»Ï’Åz0úà®_zç,_¼€Ð6‡ºs6µÓætÝÈ»î|nT"ƒn„ì‘4d‡ôeéQâŒ_r‹eDÓX¾?FF‡Ðr�Õ¾úqÄç£h,|ßß×—¦.{ß¾oìxTjjÌIÑ +Ä�”¥¬£vŸÍéP»§J-íHhÔzùr�]uú[E»õV¦¾ÕVø/Ç……“ò¹¾4Û?°wó'K¹X6hŸ=�=w(×Í.û^µõ„Ô„ørŸÍé�·ñœ¾›ßÎú:Ó²“§ƒýèÚ/Gižêv>¼”-ï{$»N+Hú°5ÁÔÄ—>eÈ»­ŒÓN›³!˜6ò§OÄ”{Ðu$o9y¾ÕæüÔ§‚Žïï(~Ÿxz:œÇŽ|›xúÖÝçÊú^RÇ�ô5¹Ë½3¢�6§Cß¾xsëY;q³”>vâ²èGâ±&Vüx<÷LO^@i�‰�µµe§ÍéPº_î�u´O)»ÙF�ìaiVäeYˆ9‰óü5kÝ´tÇem|kµ…ãk�vÚœ®uwÆp¡«Õ…¾:Ì&po:Í\YR&;ÍtÒ}¹sºd“gYoRt~Ïû¥±£jß^k˜'§«-ûù~�4a(çu£/™’M¸#o˜ñ¼Å}°ø²íÓæ�øÚis6|Ù�ëÑ6nÚêP»;.«¼Yï¹�Î�þx¸ÓœŸ�}»�˜f¼2û<çÿªìñ™àN›Ó¡jcÕâÏÌ;‡[÷ÍøfìQñ°} ëµÓætHÙxúÚä¿Zl¼°B»_µ'/Ë}³„‹êÚgIeÆÕäòª«|Û‘>ôä$çkXÛêäñÕØ;mΆV·½ãþ«!áèÚ‚=™¹«{†üD_¯�蟙M2i Hm2[{¿oµÓætHÝȆ=œg”�¯&yÃÌÛÇËš- ò�€;mN‡È}ßdyj5ò‘' +ïÙ˜¯~ÿ× ø�ìÞN›Ó!x#V}£õôO¿(à�¿CµèÓ®˜ñ,çÑë›'­{¿°Óælèõ±ëþ–ß›ôšw]µ¸€ÆòŽ;mN‡Æ�øta5ôì[¶rM™5tHø9צö«¸ÓLfà²n½ÔÇáØä>ð�ì�6§Cî¾'¸çô½Ú­'ãÖ…½¿>o¯æúzêËlqî¹Ö�6§Cî¾øõè%&(º1hhòž)»>Y?ÏqP·ftÈȧ틜}‡ë°}»*§Ï$5¶ýzþ3¼õ"<ðœ{§ÍÙ�6bÕÏLì˜k±yUÙ{¿±Gïðkí{Y½ÍZõÈ{ºÒ=}ÝâbˆgwÚœ±Ï­><_œ÷|$sÚÙâƒïĸ;mN‡æõ÷ÙÙÔê{UÚ_xj;…×^C™Ÿ¹·¿YžžÙ¾¯=H¯ˆüj=y}äYwÚœ}ïû�ìSðÜ‘LÕ +:Wßб¶Šý«äx$ÇÞ(´ÓælHŽÏå\?$’ß"WÐpúä­7&ï롵ïël\c°ï›‰ èmâÓ½OlwÚœ½ÇÞ ôÔwU3*zŽjW…´–ѦÎyñ[¾\qÃú4öú¾é© º[çµ€ÒÖì´9J7ÖùvôÆwe¹7IäW�ÿ¬oÀøÀOb£JÃk¶Þ-°ÓætHÝùí ÿr°¼ u÷ÿ²r?O½·« õ»qOoѰV™a/%'›-> +D7‹l r¾!HÞVãš~zȹk†H›ñšpEÀIѧýkÄþòÛoó»?Tˆ ×o÷Å琢óËR”’eï=$=Çêv÷!ØÕš •š³6Oú;,ºO‹ë_î„3$BSYwÿÎ5~Î2”Æë¥¤i²O Ný]?9¿¯Ýø3œÃ6÷`ó=Ìší§‹ö]RÃÞ{Ò¡tÚœ÷êH¤uþ>^Ó^OAR¹™ÔP±êº`9liüS)5îr,ÓÆ‡iÓ«ûÈÍÁXþ§¡�¼¨H"Õ"‡ûޤr�ªøõ’v¤%FLà½�â$?Êr.R¹`‘ÝÀ±^ľ¤±BŽc9¹±ù£¶ùn’½Ífi§ ’¹�öʹ_˜ÂÒ©¹8ݽj§]}ƒ0ã‘+®X—}†°ž�Ú²õ„ÕpS¬Œl„v.”ÍåªXSöG¥]àJÕ¹*,®·U§šæÏeµošsMx»à²¦—¾²Ò´—h>U®]-‹Ì4NÅ"µ¹di*íĈnFø�̧&4fÑ7­–vd» C•r1—cD· [n<›--åK©PMc®ùêJ…º ¥âÙPG£Ô§mÊ›>"Mþ8»Ô¹­ehp£gÂÛÅRé‰Uüz±ž)m+WH›¡× +MsÞ"²â¥JÓ×ÍîŸÐ5³,íg•þ¿S…-ÒÄ<ÃERiOºzT/’úfO+©•»Â:ÄÕ€"_Ë6Õ¥¼/˜mëKÉ”O¤[J—›H›*kä>f÷Iò˜ŠUA]' +ËõS¸²Êì.WŶ@ùu"®~ÚÒUö|1§¸ÛrÞ*v…;_[±/-®ÒƒÅßrÞóYx6êÅ ú!_¤Šµ,£]½X#¬Ž�ª¸Òèë νµ°Óðöùñcíd܈{»üã2 sÚXñÁ•öËm£,uý7Êü¿ÿ{¡ëóm÷q\˺pëDÜŽdiwõ°Sœv[ÏÂÒm¡¦†ö«X…ZÖf4”q\놯©šËJ칤* ªŠ¶ÚZ‡�Xèješš±+Â[W‹%�y¶mê€}?4ùæp“¶öË^á ½†ª3uH¾6§ÄQ*Z‡thI7†8hOŠÃ悱z6q3²½H©úä?µMaÒµšƒ&ŒH‡¦ê¨³í©³l¸‹¦B`Ó´'&Õ^4Nüaœ~¸{=Ýî£Ë.÷€$-Ô^¤¯­´ÜX’Âã¥f8tÓÃ2æ˜k:È�·ÖP9—iúž)ANí5´ ÉA‹ÑFªÙXÀ¶¥,›\4…. “YVÎè³On4ËÕ2Üq`kÉ—˜¢JÿÑÖ´m[¥T¢m[ÅÍʦóæ¯DK¦@¶…³¯w'kÉKFæZë"¥ZÒdÙüÚ4½vm¯ÍmPuÄÕÈTV3;+ùÿ=Òwî6]Ö�+•†Lˆ +uKS Ô¤¼ÑæS¸œ‡PÚhÜShR#‡mÖs%óŒHΕ´WBs2Fz¼-¸ð +EÜV4§zwƒåÍ¢doéX0© Jsr– 2ÂŒ)Ì!!T}š*Ú8l .:yT^*654¬ƒ˜¦O†ŸÿKæýÀ +endstream +endobj +620 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 619 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +621 0 obj +<< +/Filter /FlateDecode +/Length 4980 +>> +stream +xœÝ][‹,·~Ÿ_1Ï·u¿@0Ø�ü`8!“‡Ý9gmÂ:`ç!?_©ukuuOÏìú0ÉYöìt•.¥Ò§O%µºGž~¾”ø/9…½3çË/§_ObòVà_J±¸HêðëíY +ã'+£ öü ´Ÿ|´Ê»óë ÿ —}ò×Óß¾8ýk™GžÕ£SÒžûD*£'¼–QE¨„ÔŒÊÚÉ{e£rrBcäT0Ãz£ÌZåa†‰Ár*˜a” +Œ*À m¼ÔkU„ÊKé`†ŒÖ3*)`‡TB°:"ŒÑŠÑI;98Ýq:%'¢Š¬ÎC'½âtZOÎi%§‹“sÎNg`‹�Br: [¬4Fp:ØbtðœÎÁí´`u°E¯9�‡- +Þ‰Œ.À +°:Ø"œ�œ.êÉÆ` «‹Ð‰àÃZ§„�lÐZp:)' ljV‡…NržÑ)Øâ„�¬¶X-§Ó°Åà‡Ó�'¬ö!0£UÑèÖBKNga‹RÞ°:Ø‚Îç@9Ø"¼ã(#h"^â8@y?™¨ G*èÉ8P!NÆ{ÍÑ€Šv2.zŽ´�Ð)É�°ÅÇ1�–°Å`ä²:Ø¢£á¸@+Ø‚h [”Ñh°­Z8.Р[#¢ä¸@ƒo��Žã Â…™‚ã ÆÕÁŽ 4(PŠhp®wr\ Aºîžã ÖÕÖ)Ž 4hW›à8.Ðà]m¤à¸À€wµFNV[`Ž ÀŽ“–As\`À»Z +Ïq�ïb)Ž Ð«pè8.V&‚à¸À€wU†ãÞUS«óÆ æ¸À€w•E¸™¼«¬Pð®2Êq\ LàÁFà]PˆåÃØ‚å¸ó=tJs\€Â&…°„ã Þ•Ó3¦ÁV“ Ñq\`Á»2 ûX]œ¤‡Ç™q /OÒ¹Èq�ïb¢ÒXð.è3p\ŽŸ0£*Ž ,xWjÌÔœ¼+UXð.âËqà0I`~›¤tY]œD �ã Þ-)Ž 0 O"€IX�Ÿ$ÉqÈxˆC9.pà]Lï‘ãÞVkŽ xW„=¬¶è 8.@\†-3¦¬NB�)8xWHô0§ï +á#ǼKÓ&ÇΓ@Ž `à„(Xq\à‚™¢÷ŽãtùX�›pm9.ð Êbu°ÅxÃqë)ê8.ð +¶h¥8.ð +¶ dà¸Á%¢ovy[v}`` "EŽ ÀdSˆÆp\à­Ãz ^åtNMÁƒ®Y]€NzŽ ¼7¦bÉqÖRSÀ ç¸?Q¸ÄqÌ€NŽ |„-*`*š‚BdÎé$lA�Íq"]è¤ä¸ (Ø‚h�ã‚ V™Np\€kI¸šÓAëÌÀqA0n¢P‘ã ¬4Á”¬¶€&8.@ÿÐbÛr\€Å›Xæ°:Ø¢­á¸ EËÍÀqA°E Åq°IëMÏqA°ÇQ¸‰ÂdŽ @ãÐ ÁqA”ëMe8.À¸¤õfภj�õ&–x̸�ÚÑzÓs\ l±QXlAЙq NÂzìÄélQÑp\�£õfà¸aÖ›ˆèÙ-�@ëMÏn€wm3q:ð."SÇq.°ÞDdË­íˆ×zÄg¼2Њ3°;Ôk1·²[Ü‹Ùʳ{äKk$vÓfbe»k€iJ)ØmþEõ[Tpð˜3ƒ§FF ƒè¾®9Z2½‘lÞûí§ÓWO˜|Ï?ýûôòEÚ)+?BJm_a¨ˆî¶ˆ¾%š¯]Úpé_²Þ“‡Œð±)A‹yÓ�ŒÄôGÿÎë Ëa8™ŽÜX9Ú 0˜®D®L”J7Xc} hÎl&ßœçªÉB<×’·µ¹ª¯·ùгõæ<ïn+°‹%«EÀ¹¬—ÇÀ•ÄïÛù­^G}ºª×`6V#‚7öh¦w6ZWgEê„Ô¡¢a$v ´Ã»1Ë;,°œG|è�FGEó)H+!a‰¿ýpµf+æ]ûzÙ™�ObªTöüá—ÓWßÿí›o>üüðrúñë–¯¿”øk^æ¿6äë'ü^² ¤fÝüYÑ*Aæ4&ëE¾ÎyKÚZvNgÜ2�ziu˜Øä%�½ty^–yÅË2µ¡\ûù¯¶��2·«Øi[YÚ­å6vö�¶�m*6«¥“ï|g³ïÚ;Û²�Õ~÷õ?ξ;ýñÔimuŽ�ey ŽøÆ¸ _?¸Ý�ëº[¹FÅínù÷®.ò­þ¦£=%O…©j0é!¸‚AׯmEäß æ¯Ô•á_¡[ʇÎàÖÖί¦´ñ¹KSüñ©ØÊØîQÝŠãƒy ÈRí±î�VQtYöÔcöl&Ù‘üG",e DªM—F í3]r¨ßåp6ø¡î�Ì÷FcªS¯ó.˜†Ç´¾�›æy8L›]v'cšÐ“_}‡õ>È(Œz¥¯k0bç2‰Ù9¦ëßëçÕä?Ž‘3ÌOcxœ *¶‡ ‰›�Æ`†ÃtMóq %¬þbg”¾�<~[Àk$Ý>’ðó5üËópøÝŽ9ü.ü<òt¸¦H"ä ’ÃJ˜˜:ØÒÔOð¥ßU„²�ÿ”¶à²´á)Ë;ìÖ1Pêì¤E€ùÈp½¬³|Ýø ž D×õ²ÛP�:¬UH=ñ÷?}óíŸÿÒzB¢ë°V2[¶ø|™½¡ª—‡[OžÓZb çÒºùz%ƒ—CÖÓ¨òYæ²Üf]Z2�—[þT~Y2ùe~ÊòËXÞìÝCîÔ½;,­´s7NÊ5�ù.ºÔ]žâ5×±LŸÝõMäpUç’âß°ôEê?ùöW‰•mtˆÍIK­m»6fëêot¨8Ô5Ïq˱]x~ŒÂ�µ“Ói£œ†ŠÂæ¹ëvÅ;†ß¶Úëâ¬Å°eÃï4œÇå·Ìt » oî„Í +£›D¤C?C…}÷÷~B½_"EWÖáÂ3%Ú—k¹MHgäœcí¹–Ûº)Zô—;wÅc%˜ÒW=¤Òásc�ÞðPÙì±ãÆP覫�Y8³»ëãNüµÖ�Î�Ð=ñ; õ\>c[nW`Ð�q¥û…ÆèÖqçà(�§ÀYŠv‰£ ^î�)G«Æ<>´†MTׯÔÁ<�6¦è´íΘªcb¸•±ØR£�&›ÿÒ¯Ÿ¯Y}ÎËWù4¤ù˜ÿf¹RY_~?濱Kûü¹gÛ{¶7PFç +bÄA”Ëó (kfÓ9Üm”mm°®6SŸÅî¦>&¡Iw(û™3Õ§¶Ëž×ûȬh“L9Û¦(~¼!ùr¼®äS)6om"ÕùÛ‘z,ÏÃ!5ìò!‡Y¶‚õ kÎØåš�s3‹Xe¼E¶u‹Ívy/Kû’ã!‹áœÏb$åö%^wݵ>«œ'nŒ<ÙÚQÛ}ébŒ�[Ž›ÈŒ•i1` p×�y,Ï£!qËîL=DjÕ{=²öPŸéó>= ß½²dK¿:�÷2Ž`…¾Å~ƪIXã1»(<˜çáPx,^¬=ÓÝ¢Ú:j2oË.ùh©#÷±ÈÚ8g™�~C}‹3œÏsþÅ1 j5£"}ضuÁ“̾�¹Cú>_"†au9ŽªkwHc¼ƒ/�åy4äÁ û7êÇ'í¼‡cq{pœ^Ç#)ÝmCÕ/ˆ·¶ËGÈÞ²½nv ô?»¥V!üC~èm+uz_¤ÝkÌ*n¯&¹Ór\vý"¦³^~µ™êKÖŠù¡îÁªZ~yø©³gñ ÕiKVÝöëÉ¥wKÊô~aáÂ$}ÁÙ™‰ž#ôñLï³ BYºI&ÇÊóFÎôµ ¿ÖTù›½Ü™^왺±¿ÈéMüËIF3‘ÿÓ“Çé­ë"‰ƒ*Müz¢·îFlL{|ùŠ˜„ù£¨eYŸ†.² ˆ×OqL©my+^÷È4ž?¦gj~[²ÑÛ�(‰tzà\1#DN'×bj½˜dÓ7„Iç+WM¡{ª°hú´­À–ñªXjÑ íZ(ºêšX™b�¤7ÝV×¹&¬¦÷®“]÷—´Êwݹ'¼œP­¥¯¬”Þ—^Š*ÞU¢ÊtgT¬R[RÖ1µŸÑåÄ¿¥hƒÎ¬ú®×è­³³0 ™š.–tŒèrbÓåÒlí)_S…–5Ï7SÔu¨Žgd—¾Š¥#B—�K1=‘^ûZ„7j%¼œ¬©#±‰_OÖ3©mã +a ôz¡îÊ­â ^šÔ‡â* Í"£wvÒÿ3UØ*%æI¤©�¢÷î¶«V �Í*^:©—»Ê:†ó€4¾¥íÜ%½¯˜íý%ƒ`ÒéÖÔÕc iç²Nîc1�Hª’ÇR,+ꪘ(¬ø§re/ÅT×ĶBùu!nvÚ:TéÝ›Yèdw[ËmbW¹óµûÚã’^¢\í­åv˜/ÂKšØÌ(&è‡RI+Qg»VY'l†�š¸Ñèk—ÑZÙ‰¾¦|lƒŒ›q/§ŸOišSÚ*zj×iIß ÐGYòü¤ù¿ÿ<™ó÷å%´ó<®De U¹u!îg2ú™pPLß(S„uØtBe:ÚobZZ[ÐPçq¥:¾6-»hÄ^RÊÊ ²j{¡m>ìĪBWIÝyÆî/ƒk óÖ¾iö|©Kãè)dz}q± +}spšN·)ù܉+JÚ¦th�ê2â¢/—]…±Y¶0“ÙWR]Oö›¾+4ÕÕ]ta]ê¦3mší‹.²ÔŠ. B`Ý_ôÙWö0Fß=¼ÞÜïÙdWFI+µWék/­ #i%<^ªÓ¥[^Ö9G§xËàmªeénìéä´¡ÑB ³¸è1ÚICË–ؾRSd‹JËDQé2QdµD_lr9[qKjq`½äkLѤ?÷ž¶}¯T'Ú¾WÜ*-•[f¼-éÙξµN´”5– ŒÌõ¹«Ô´”ºÈÖu›eÝe¶=wÍ0Í×"SѲÙUÊ»øïž±3çv¸Tå'í„ÈÐ^ÛŽ‰ÚH¯•NßÄ'‚sàC_¦âMè¶Fnγ¿W²Þ){%}MèŽÉh-¼¤ïTäMx…"^WtE•ï[ä³EÁ6é60[A�æÄj'(}©VÚ×LBõÒÓR‘¾COSÐ諼�ü›âhåi±}’~þ úú7e +endstream +endobj +622 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 621 0 R +/Resources 4 0 R +/Annots [ 623 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +623 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 502.623057 101.433071 483.873057 ] +/BS << +/W 0 +>> +/Dest (cb101-1) +>> +endobj +624 0 obj +<< +/Filter /FlateDecode +/Length 4869 +>> +stream +xœí]]�äºq}ï_ÑÏ®Ì�⸒üp� Œ ÈÃL߯Þ×yÈßÏ!%’%ªÔ­î™]÷ÞÁì´ªøQ*KjIŸ~~Ðø/’žbLÁÓùòËéדš‚SøWJ¬Šú'üwÖŠÂätòÑ�ɦ�œ þüå„ÿ†C^üËéO¿9ý÷ºŽ>›)%o´;ÿísV‘�B A9A• RÚ +*禌ó‚Êë §˜’¤‚.�¡­*À JÑI*˜AÆDAa†¥ íV•`† š$ÌÐÉA¥ìÐF)QC‘5‚N»ÉÃé^Ò=ù˜Lu:Œ¤³vò�´Ó’.MÞ{%Á—”–t¶8M¤$l!ƒ¤ó°Åz«Dl11XI`‹�w’ ‹°芢¶(¯´¤Kvr)‰º�Š!nuF¹ÉEk•¤ÓzrÀ¦u˜Q$��-^¹$ê`‹³ÊH: [?’<álˆQ˜­&Ïn«¬–t¶HÔÁ ¾ÄÆÃ¼D˜ASæ%‰L%C ˜h'Š%01M‚•hÀ$7‘OAâ«4tFKD`lqä%&°¶f®¨ƒ-6‘ÄÖÀ�¸ÀZØbÈJ\`Á¶´H\`A·¤’–¸À‚oIi/q�áÂL%q�ãÚèIâ Ê”’ÄœkÁ�X�.¦{�¸À‚u­óFâ Úµ½Ä¼kI+‰ ¼k-jŠ:ØK\vœ¬ŽVâïZ­‚ÄÞÅ42`T'àÐK\¬L&F%q�wMT$q�wMÀ ê„9h%. ð®q8iåï§ŒÄÞ5d¼ÄÊþQb4Þ…89€- X‰ °ÞCg¬Ähl2K$.pà]�°ü sl5阼ļ«#†OÔ¥Ix\˜·ðò¤½O8ð.*+q�ï‚>£Äàø +ª‘¸À�wµÅJ-éÀ»Ú$%q�ï"np“F qÖ·I+@WÔ¥I¥%.pà]Ð’‘¸«ð¤"˜DÔ… @Ò€Œ'…8TâÞÅòž$.ðà]嬕¸Àƒw!ìu°ÅF#qâè0m…9�`uRL!éÀ»Jc„%xW©�$.ðàݼlJ\àC˜(q œ‰ |¤)…à%.ðIA‡�OÔù ÇNâ‚  p ,Q[(�Ĭ§dS”¸ Øb�‘¸ Ø‚�AâDSÒˆ¾Åíl\ÄýÁDЀɦ˜ˆ$.Îc?¯J:o¦@×¢.B§ƒÄ!Є¥XK\€½Ô1é%.ÁO9\’¸f@§Iâ‚�` ¦ŠÄXЦh™K: [dK\€H:­%.ˆ¶ ”¸ šˆ]¦W`…Æ^®–t¤ò>3J\ÉO9T”¸Ó;M0¥¨ƒ-  ‰ 0>y³í$.Àæ›MlsDl±Ž$.ˆÑäíf”¸ FØb”‘¸ØÌûÍ qAR°ŸÄIù)‡É€Æ¡SJ₤#ö›†$.À¼ÌûÍ(qA² +ûMlñ„y›¬ÏûÍ qA"Øâ¢ˆ:Ø‚ ) óœ„ý&ØIÒyØbI\�¼ÏûÍ(q ì7Ñ‹)�˜÷›AL€w]3I:ð."S/q°ßDd+ííˆ×Äg²2æg3 +Ôë°¶Š)îÅjÄœ�ùæ=’˜4€™ØYF/f °¬B©•˜6Pà_Äc´á„9ûÄSTpX3cÈ'™0-Ñ}Ûsôbv§ØœûÛŸO¿}Áâ{þóÿœÞ~S2eõG#@(¥ ñ¦�In‡è[ãô­ÇTæLRÙBøH�lDHÝH Z\’nÙH,ùßyûae9 ÿ©to[÷ «xéžHlÍ‚ÇdŒØ¾ŽßYå VØaµõ(c“ÉìÈ!®T´*üûO'u±bÎ�¶Cf>ÖKl†É¸ó§_N¿ýãŸ~üñÓ¿FŸÞNÿùOJ‘ÿÝ:ÿ¥ù¯Öó_gy\ŽÕü!žbÊoÓ…¥lmk9ÎeœÚqËß$È–²&·ýÚÛmíºœþ¿fù}ƒ:³¶¡öAU~Y·eôÒŽËtŽßü^†óü¼Ô©m¹¡í·áÛùÿî¿ÎŸþpúçOk@•(sTJ>wƒÇª¼ƒ_zز�Þƒ°*JìóW7 s.ZW+óÚáQûjp¨»ÌðË�ÚƒwÑÝ€D;-´S�Y{õs›.oÇû*çüð4–!š3ñ à ‚�˜¥o`ô`�g)vC×P:Xõ´Fš�F#ªma9~ ˯_NCÊÛ€>Ò‘et�èÛ]ÛèÄåm_Œæöè«ót£KW9È £9òÁ8WóÈ!hVË�õ}Y1@;@¯LÖ½ÎÇ’.×1´^’,–sYÚ}eõ¨×ç}aÛ8/W¼ìË܇U¬]¿ØR9!׉3òÔÛ�‡Œ¯2Ç×±:O‡¯áÕ£cÌÆê®1ö3.2«|Ø9�ÁŽñ¸œ�eíà³5‹m—ÓÙv»ÃXñÆ:Vçéu=jʨxdd­û¾Ùç}ö˨2êþÝàÁ:φ*s=Êù{óÎÝ£ûa|³Ì¨ñ°áÑOJ9;t)Çê<R®GL-BÒ_16¶Ã¼îèj¬{ÙßíѸ{ŒÝÞÍŽ“EuŽ—ûÌαÚùÒe¢m;ý»°î-q0ìnó.´´Íw¾C’aޥÅRÚLIE“Ó§×Ñz¬ÎÓ¡õFüõ ÷ð_ ºn}¨u½»Órv}Žm3Ĺמ Ù”{aåüº¿æ·Um©,±å̤ùŒªëH=Vçé�z#öp’‘�ðˆ"Æibù̼}Y3‘¶Çw.ßVŠPÂßZéÖy6DÚ1áΪ{OJÿ®Ë ßr|ôßeÞwÁd÷Öy:߈U?Á;h¹ÙãjÛbÊWë}‚�Ōςðô²Ë­>a̱U»µ'?XçéÐ{#v=rÝçƒþÍzϬ¹vcT"ø¤éüpN¢½;h| ïx°ÎÓ¡ñF|:Fûã•“a”Êžº"v@Âßo”Yµí—…ËX^#˾Ž•‘KêþÀÁ:φ\:v÷Ñkëß¡a]nƒBý1üúžxûjþ`ôÓXæçÒ¹Öƒuž¹Çâ×–I +²GG„¯PtÐÀòž9»Î(r­Q2ò9Gû6gñÝë;êó»rÆL«Û2^Ò2úƒ„uih›ß/±ñóÁû(è�ëÜë<RoĪ/BìX½h'ÞáõÕ=¯sý|�hä´ÖŸp/˜9`׊‡5b¬s-‡ÚÊòuaçÜò9}ÝâbˆgÖy:ľïîÃç‹óÞÉ<ínñfÔ"£Ù=ã¬ólhv×cÜ÷Ý:}äªíj¦>Âå:Ÿ1õš;ÿ­ò|Íþe¾÷ ÿ½ûŽÈ¯6“wÐ÷@žõ`�§Cß�8õÿ#ÏÝ“©º‚ÎÍNéÂú¼vûWÉ=ì ™Ç¤w\ë<’ß—sý.‘ü¹Æém Ðs;›8|ô¯?úl¹Ç€ØlgQßñí —Å§G¯Ø¬ótè½qoè8ZîEºeÜéÔÜgCÅÈQü®Îamf§Í{Ëö;ï¸mZfýÌf*C÷c÷yÉ(õÜWp°Î³¡Ô߸¯`q5ÃS=ýÊ2æR$µ¯óåÑ"µ¹ƒð[çp¿ç+žÅ¨Š&£)ÝBê±:O‡ÔƒßúÇ•ùCžÛuk‰çÖmî]SlrÃíÞAë9؃už­×c×6rok”¬îÕÔj�W­+àN–½�Ì Œ¨Í÷Õ¯îŒëråÞÕ1#T㺷uý :Ô”ÜïNn¡Î,U¿spÇŒ3̶bs`çÉ#¡áúY³ç[(þ�œìÁ:O‡àëñëÈ_cFi•Mò IÕó�<4JAmïÊŽ²=ãý²œ¯8 +7ˆÒŒ ™­9hÙì�öúZf€ùnµÌ¯�Çùu¹a=Qo2’ƒºŸ‹Öy6$‡ë1®ö³›kBO9²Ã5¶=.¬m \jÙ•×Íu9b}è¡ÿ!Fm¯~�ß•¸2KŸv[wÅ42¦Èò¬ót˜>øÍ/vgAý®_Ã:�3*£Þë�¸¹ÍÌìSn¾›eœ÷®%ï}gEº*•çð¸¸!*¾¶�ñŒ„éVæçuÞÈãÚËE÷¦ÖYj?—Ëmg}ÏØÌek¥�ºs +·Ûuv±÷² h±1·7ïÇ—~/}Ÿ{ÈÍ–»¹`|ÏZ7c£ó×Òcõn`‘(¯S=컫wK™±ŽígÛpÄΞŸy wËw¶yÔËê©uùâéË⿸ůüÂä“ÍÏå_üa—spyM‰ËÈä‘ýyÛŽ·ù¡•ùÁèÛvÔr^ó9—ó¾bˆsÏÕÏeå�Œ 3sŠ`[~@¾Wd|Ú.³%Íõ˸¿-m½ðYÐ}n>/¾¨6¹e��Ý×ny"…¥ÝÅ7KYÁþ>Cúìp^­°SÚ²²}ýÙW}lG?êù™`ßêóÐÅq©Ã!õÏZw[kÝ”6دو�Íë�¹ >úªØ+ãÀüél?Ç‚¥:÷½4.W}é6¾xdÎM/íúš=†¥rµ¨ÎgÍì­s3ôrc›ºÖ;0&®Î)5Û~k¬›MžÙë®ú*Œ¾š¯‰.ãâóKýa%Úß½þ®¬8¥<[qʱ0Þ�ïó)W·ŒÙp¥¬¯€l5“}™¤9|k6B›ù¡úÊG…6÷m»î§íʼo b¤Ÿ–§¤£X:?ÝÚ+öÐÕjß,r#²Þ>¢µ>èôœÆÐ¹û Mæ×#Ùx6 SÈO–´ò8•K‡cvM ÚÒB_uÊëeØ^Ùtr³ëªë Ä—¡-®K³Ü´å”Q�ß.3¥¿—….ë©ÖÚ¯0eö¬(4-·˜•sØ Û¯'_ž„­ËÛ€¥I›üº¤³§)ÏÎ�ÎùéÛQYÒu˜tq¬>ïÔ,/™úµ•ZÞ;¥ò«(òcÈç—R±ƒ¥ü¯e€AH“¯1_yGŒ*âhêA9åw‘ &ê�ã q.Uk‹t‹C«ì‚½b˜ÒXÒºú _¬ZW?WÏ&×wµZ~v3©ZÈ–§Ï BÔôz+Îg¯&½ˆó{–âd—#ßLq¾Ú ao�xÙÞ`¯xS¬­bB·*Ö]ªöèü\þæ:ß…Ítî:͆¿–5� ç5áå„ní(ý"JóÛ]jSÕ»F5™eF¥&uµdjã$ˆ.'AøƒªM³éÙ¨ågäÏÂX�D­\ªåÑå$–[Zsm¤B+{ÕT=ßMéP·±9^�]؆.äDZ9¢lý¸縿�µŠ 7f#¼œµ™ØÅ_N.¥]ç +å*ô¸Ð²v›8ªŽ—.ÍA›?ajVY~Âxþ¦ +פ™yÊM Rù-ý¨w’çf¯�Äå¾±IÐzYæ.BÃ,÷—ŽJ(ŸI·•n[I™Ë˜<¤j^&©Fk±n¨kâLaÕ?�+¹PU#Ð]»å/+q·Óµ© +°×μfpw­Ý.ö�;¿pqh#®ó+š½­]†ù*¼”…�Fq†~¬�t±Qmµë�1a7 ¤ÐÅ�F¿q�­��ÊS—�}’I+îåô—SYæŒu&ჷ:¿ÁˆGYúü¿(óüþõDç?ÖGæÏë8ÓÚ¿iܺó•,¿ï.ç÷ßUa›6LhˆÑ~ëØËºŠ†¶ŽÃøšzuÕ‰½–Ô�AuÓr¡ë>dbÓ k´ežqW„—Á‹-�yïØô{>´õäÐ�Í/[¨Vဟc×Ù¾$ŸY“8ÊEû’-V¼Q²S·lef$魯>ÛO|(lî‹°0"Ú®£¾Ìò¦«¬œ+‚ØòÞ0iÞiZÙ#ýðôz÷¸/&û:²´Q{“~áÒvbYÚO–Úrèׇmͱç|P'o÷Pk˲¹g[�Ó§F-huÀ1ʤ±W[ +8Þ)UÙªÓºP4º€LUYk1T›üR­º¥œq½ZLÑ¥ážv|Tš¿)›Û­+^‹–l €‡sèg§zÉKFAæyí&¥^ÒVÙ¶oZ÷]WÛ3; ê†ø™ª^ÍmJ>Ä�Ì�¹Î�u�JÕŸ’ ѱ¿d 5é`�-ï VÑ{påW¿Š,5rw�ë¹’mF¤æJxOމ¬UAç7@Ë&|�"ÝV°¦êÛ¡åjI‰§tŸ„TP§9µÉ•W€–K±%!ÔóûwL~ã¯ÍAoÌ/* JË×îråu•>)?ÿÿ? +& +endstream +endobj +625 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 624 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +626 0 obj +<< +/Filter /FlateDecode +/Length 4751 +>> +stream +xœÝ][‹äÊ‘~¯_Qφ#ç%òæÀ1x¼øÁ0Ƙe¦kNÛ,} Ç~ðßß/RÊ‹¤Ð¥ªûÌÖxšž.Eä%”ùå—!•¤¯ +?ßiüI1¦àézûéòóE Á)üË%fYýGüwÕŠÂàtòÑ]b� CHÎ}»à¿Åa_üíòç_]þ>¯£¯fHÉí®ÿø‘Ud‡CPNP%¨”¶‚ʹ!ã¼ òzÀ)¦$©`† dh­ +0ƒRt’ +f�1QPE˜a)h»V%˜a‚&I3trAPi;´QJÔÁEd� Ónðt/éŒ|L&‰º�FÒY;ø@ÚiI—k’Ž`‹KJK:[œ&R’¶��AÒyØb½U¢¶˜¬¤ °Å`t’ ‹°芢¶(¯´¤Kvp)‰º�Š!®uF¹ÁEk•¤ÓzpÀ¦uXQ˜$��-^¹$ê`‹³ÊH: [?’<álˆQX­†W·UVK:[Œ $ê` &_bãa‹ +^¢¬ �yIâÂ@É�D&Ú�"E‰LL…`%0É äS�xÀ* �ÑX[y‰ ¬†-„•+ê`‹M$q�5°$.°¶²X°--XÐ-©¤%.°à[RÚK\`A¸0SI\`Á¸6z’¸À‚r¥$q�çZp§Ä¤‹å$.°`]뼑¸À‚v-E/q�ïZÒJâïZ‹š¢¶À€«£•¸€À»V« q�w±ŒŒÄ˜Õ8ô+ƒ‰QI\@à]I\@à]°ˆº0` Z‰ ¼kNAÚ¹Á»Æ)#q�w /q€2€”è €wA!Nv` Vâì÷Ð+q ܉ xW'lš[ :&/q�ïêˆéuiÐ#.¬[Œò ½O8ð.6*+q�ï‚>£Äàø;ª‘¸À�wµÅN-éÀ»Ú$%q�ïÂopƒ† qö·A+@WÔ¥A¥%.pà]Ð’‘¸»ð "˜DÔ…@Ò€Œ?TâÞÅöž$.ðà]嬕¸ÀƒwÁíu°ÅF#qüè°l…5 guPL!éÀ»Jc†%xW©�$.ðà]Þ6%.ð�&J\xÁFâiH!x‰ |RÐÁåu~À±“¸ ((KÔÁ +$që!Ù%.¶Xc$.¶Àe�¸Á�4¼o1<€-€‹l�§(q˜lˆ‰Hâ‚à<â1Œª¤ófˆt-ê"t:H\ ØŠµÄˆ¥†ˆE/q~`wIâ˜�&‰ B‚-X*`+¢�g.é4l�“-q<]è´–¸ ØoPâ‚h"¢L¯$.À�XC-éHqœ%.ˆäv%.À2A¤ ¦u°4!q懃m'q‚›sDl±Ž$.ˆÑp¸%.ˆ¶e$.69Þ $[àñI\�”ØM–¸4�R$o’¸ë’ãÍ(qA² +ñ&B†s€òŠ]ZÞ¹»¡¹³ÊCX›'g>ØdxË!TQ´*½ŽƒTµuv6•ëþá‡OjƒÅÙ]rß§Ã5þuz”;;{üÍ÷Ý!Ø]%}r5šT§~˾ßoÑØbÇAZt¯Gµ�TÎx/ÚsT¾0Jm¤Úôý—›Î(�ÔA›9OÎÛ�¢§¶Ê(-úÈ#H]ýŒù…=S]—ֲó‡ÃÇÞpö îyÎ aè|�Ïó¨6Ï›rÙKø¨‘'x£ðhfí`Ó¥ivû}TšÚd'Í™gÖñ2=�šÜ ·Ê=à×�Ee±Ö�ÇÎOTöÊe¦±k�έ&Îb,:Í+{ƒò4¨}"0g™H)±ó´Ëy'ë¼g7øE¸¶ìpŸú<Î}žÿ0Íùë|EåU·µºBW&µÕXÚ(幟Œ­ÅjeYåØ%æ–}êÖ×3X=þ5rΞӪßb[êX&ÌmÈçùã®Û{Î_F¨A¨>¡�Î:^`»=WåIðÙ¬f ·ñy76ÎsT¾¶ÍQ•ÂÈ?Î�½Ì8*#e⦘­Yó!r1èE‡{üd¢»›ŸNÖy’ù¯üdRÚ�ÿÂ3fñ·ã�Fµ›þòo�E¶“îó¢Ì—éï$7fÒ—ß/ÓßÔ•}ùÚžKã¶Ú^é3,Ú­Ü,£ á{CŒ:‡²“užeÍlC{(«»Ã„.šv§¦ã2Ò/Ýl•QþÒf‰“Ñd;”•ÙŠóY©;j¿ƒ +;ËÞ®’û3ÛmgÝ2+Ú´Ð΂msDä¨}=ßWSÝ�ójwÝ@ªu÷#õ\�§C*íò¡è{è¯�ZsÆ.×Üæè™q×b¶Ý+ĸ®îmn_¶£ £¬,=®:q%Mç—yÝwÇvñÙLuÒÆÊÓí<êyß:cÉŸ¦ÕÛD¦¯|ÈW߉`À‘£v²ÎÓ!3ìrèÒS«£×#k%~=ê3îûü„|÷ÈÒ­|] jÞWCó +›ïGÎ Ê‘gÄì£ð\�§Cá9±Î uHØâ¬—./GÇH]rŸˆ¬åLö\zG¥�슾ŒõÇÈdÞþÒ/îû³qÛÖO +9P:ð!©÷ùN…˜¯.ï"ïd�gCø�Ë™ ó‘^¡¯›ÙÕN¶ñYòþk?B´°âig�ݯûþ™Eÿ½ðJ~ñU»�ÞÎGÔfH*¾n»�Þsuž½~eÁ×ùßÊ+Ÿ3ÛE-{|×£åkÅÈRn¯žÇ‹jùºÅŽ^=��|ã]‘ÜA¾ô8ªÛ@lóÏ#ö\�§C쾿ù4>à{cÞ{¢·¯àÝܳ*fåé€kãý1üÉ:O‡Ü}õß-£óaœý5Ñ]Ðz¸úd4;}ܲγ¡Ùíû½+ôÀƒ8¼ò¶±2úìP™a^-ná¯.óÕù³È^Ö¶5޼¯ÝvÕr��OÊß-T:ßS¼�Æsuž�û~ìÖõžsyfÞO×»vfw7R+>ò‚'WWfùG%fÈVè/^Æk‡´™µ£ë×ÇûÒ2ðWOÖy:dø«¼kªîÊ=~„oølÞÏj»Ü(#ßáx„ÚsužµùÔ÷ú†wû[p­Šº%ÿm¡ué±.]œgÍb=è}Hý×Õ¹ÊËõ\»?YçÙêò®'¯UÏ`±C.‘”³CfD_M\ñK™±‚hRó;…qþŵŸª—wmÌ®�°ù^4.ïéýÝ:–KÛ¾tõ¸Zê›ÏIÉ ð;‰¿—³�Úsužµ~ª’ÑÒï„徯­2êuô]�k÷B¿?ËÛ÷­ùoï.˜Ê±Ëkö~}¥b++zýµ§iåRw?æò>Î5²7�çàËsužy×éñíj­ 3;»:¸Ü]—w¤tW MoeË—ˆ½'»N;Húf3jîüËm)³cÁçê<‚ò§ïð)Ï ëž¼åìúVŸs›*:¾Œ(È¿ï¸zZï?e¾ež¾-ÎóeËUrt¯hèr—g#¢“už }᜿yt­�¤(eï[�øc�¯øíñÜ{VòJ›¯GhˆŒ¨£»QNÖy:”ø—g£Žþ*å"ÚX";#Œ£¢ ê½˜3?ïÌ÷‡\ÖgÁ�îÖ½?vò^£“užnvOúpq1ªk5G87Ão; g²9bàoN™—ñXÒq�a½eïü6µûÒÕ£V¿ï«~Ë¢/ûy샆ڮŸl)œÀu∼ñ|ÄyÈøê¯6ŸÅ×¹:O‡¯ëÑ9îæê®9ö#.˜U>lŽÏœÇÂŽåqù¶Pm‡¿óe&Ûn¦sÄ+3V|àîÈ“už Qñà*q|lf9¿ñ-³Ïûìß@•½? ·¢Øâë³ß8YçéÐ{à»~Ãßòû�UóUïZ¬hüãôÐÛà0qNÛü°r¯ºgèV9@\y²Öú‰«W½x`ìüá[h’ßveã•�ÊøÑâãý”>™.0•[ñ´Võá¦<ž+Èj¼Lš‡QåGuÑ�mZò£ºüXžÕÅd“oäç²~ü­�ôS;± õÔ?‘ës83=ªpÖ¾›úîì¡é±aõ\9‡Õ´ý|ñùÁæ:¿ÜBù8hÃo¿ºz8‹Ò•¦•%]¦Iç�Õ×�šù�a?×Rü?DŠß,ÂO•ÏÓØLåÎüÓE'xüyñ�¯üQYM9hâ· ¿ò‰1Ñ`NŠY8}Tµ-Ò¥`•ÝÀ¡aHË’pfÕô1ÕÆÙÃ?WΆë»R�²Iª²ùaÔcÇ‚5½^‹ùìÕ '1¿6+v:òÕ~žj¶©/ÛlÅÚªNèÖBÕu×ĆŠ=š_³P‡Î7a5½:ÝM)kB7�{ÂÛÝÚ¥ôM”òËzJSet�ª2Û•ªÔ•’uB¨Î“ º]áwª4M˜Ìªïf�_y0 +cÕr©”D·‹XnjÍÕ™ +µTlUSùfJƒº�uàY£Iø=€ÝQ¶|œ‹=Ï@™k;ܘ•ðvqTWb¿]\J»ÆÊèõBÛµ[ÅQ5¼4)_Ì?ai?0žÿ©ÂU)3Oþ ©BŠ_úÐŽZ'¼6«x>H½ÜWÖ!i4…V¶.BÅl?^:*¡<“n-]Gl&톬“‡TÌc’ªä1늺*f ++ãS¹²ªbºkbW¡ü67;]]ªNÕμîàîj»Mì+w¾õâPg\ó<ª½µÝóExË-Å ýX:ib£ên×:ë„Í0�B7}Ëâ²Z+;ñ[ ËǶȤ÷vùÛ%osˆ ?,Ý[Í/¤ê½,}ýÊü¿ÿ{¡ëÊÆ}ܨʦrëLÜïdüúÂxR̯3,ºl:¡¡Žö›XÇVÖ4Ô}Ü˜Ž¯©UW�ØKI]TWm/tm ;±©Ð5Úv#ãv„·Å(VGæ½sÓ6ìñЖ“ㇿó»3ŠU8èO‡±élÛ’¯]“8â¢mK‡–LW}£8ì:LͲ™™ Ⱦ“:ôl?õSa¹¯î s#øÐ6µm¶oºÈòYtEàÛþ o˜tßišÙ#ýðòz÷¼O&û²XZ©½Jßzi=1–V“¥6úùaÝsl~nzY¼m„j[¶[{¶:9mi4ׂf=F;ilÕ¦®ï”ŠlÖiÙ(*]@¦Š¬¶ŠM~ªV†%ŸqG)TŸ¢IÿÖ�´ëg¥¢ëgůÊr»eǫޒ­�ëáÚÙ©V²ú’Q�ù¾v•R+i‹lÝ7Íû.»íµ; j†øæ™ªVÍ­J>Ä�¬ñÕ(R©ò“3!:¶wa£&¬±ù5Ð*z!~“_ Ø¥FŸ+YgDJ®¤ï Ó1�µ*h~¡·lÂéXÑ5U^ö-WKJ<¥û@H5š[¿È&¿Ñ5§(sB¨ùΖ�ÞÈï� J~±M¾ÿø6KŸäŸÿ£Þ^ç +endstream +endobj +627 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 626 0 R +/Resources 4 0 R +/Annots [ 628 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +628 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 770.673057 101.433071 751.923057 ] +/BS << +/W 0 +>> +/Dest (cb104-1) +>> +endobj +629 0 obj +<< +/Filter /FlateDecode +/Length 4941 +>> +stream +xœí]]‹$»‘}¯_Qφ›ÖGè Ã5x¼øÁ0‹YŒ¦k¦mL_Ãõ>ìßß#eJŠTFfe×ô½®5ž¦§+#ô +…”™*}UøùNã¿HzŠ1O×Û—/j +Ná_I±º(êßã7¸«V&§“�îúCØ0…äLð×· þ.yò·Ë~qùÛ:�¾š)%o´»þýkV‘�B A9A• RÚ +*禌ó‚Êë MLIRÁ ÈÐV`¥è$Ì c¢ Š0ÃRÐv«J0ÃM’ +fèä‚ Ò +vh£”¨ƒ!ŠÈA§Ýäát/錞|L&‰º�FÒY;ù@ÚiI—&k’Ž`‹KJK:[œ&R’¶��AÒyØb½U¢¶˜¬¤ °ÅÀ;IÐEØtEQ[”WZÒ%;¹‰D]‚NÅ·:£Ü䢵JÒi=9`ÓŠ:Œ(t’‚ÎÀ¯\u°ÅYe$�…-„Ižp6Ä(ŒV“G·UVK:[Œ $ê` :_bãa‹ +^¢Œ )ó’Ä&„‰’!‰L´EŠ ˜˜& +ÁJ4`’›È§ ñ€U:£%"° +¶8òX [#WÔÁ›Hâk` H\`-l1d%.°`[Z$.° [RIK\`Á·¤´—¸À‚pa¦’¸À‚qmô$q�åJIâ εàN‰ ,HÃ=H\`ÁºÖy#q�íZŠ^â Þµ¤•ÄÞµ9El€%.;NVG+q�w­VAâïb‰ Ыpè%.V&£’¸€À»&*’¸€À»&` +ua´x×84Aš¹Á»Æ)#q�w /q€2�” €wA!N` VâÌ÷Ð+q +› ‰ xW'L˜[M:&/q�ïêˆîuiÒÆ-¼b:�ÉѸë§.¿üݾÿþÓ�Ÿ^/ü7¥èö«ï4þ:?ü�ó_Zþ:7ÿ5ª¦¯ë4X¢(0^ù­åŒù]êuÒ�&ç#tÕ³¶Ë!± =_«¯–ýyNÓÚ§gY©c°ÛÝ9·íu�&·;﬷G¤yù†ü/lDø5ÒxÞŠ`qýA¤4”M/ ‘£Ÿ‡6ì"ÕÒ»#„“yž©tȱe +­=>ò›eœø¯s”Ú—9¿u[Nkõ åäôæ„]+Næˆ1p`KËç…�¶å6­¼WÖ 9ÛZâ<²ƒØbÚ“yž±w‚Ù½Y�õðsyßÉ4.µkF8.ü Ðz7jÙAóîÉs'Nýgä¹w¬¤ŽÐ¹Y)ÝX�$ûâ§ÛxØA2�IO®¸Næy:$߉cÿ‘ü{ŒÓÛ çr6qøèžôÙËŒZb£aE}Å·ƒ^ŸæP1‘ø»è=—çéÐ{ÓnzkXµ4ôð™qXéÔ�Ï†Š‘£^:Ϭ8¬¢Íì”ù^Äß³Ý|@;—@_ØHeèGÀݺvPÊâÎÓ(=—çéPz«î"®îðTO¿0„Œ{©’*Z 2iŽ+ÿ‘·þ?ß6°,FU4M‘èROæy6¤Úã¸ö_wv¢V^³Õ­}$¶'¬ËÜ»¡Øä†Û½ƒÖö`Oæy:´Ç®­ç^×()kpvksµ¯ZgÀ�]öÖ3C40¢Ö¼2D³´!÷¦¶;B5®{]çß cAMÙûÝÙ[¨#+—eýûFœy`´›k'�„†ûgÍ~¿ƒàödOæy:ǯ#�;J«Ý$Ï�T=?ðÈC½Žw@Ç®1d|ÅQ¸A”f\ÈlÍAËf…´W×2Ìp«e~m<ÎïË ó‰zÝAr|€‹Ïåy:$ǸVXÏnî =eÏ÷Øö¸°–5p©ew^7÷åˆÕ¡‡ú‡U´a¼û=ðùÑh,uÚmÞÓˆ˜¦vyOæy6LÓ�]Þa>Îszñk`XçqFeÔ;}Ýâ7—™™]bʱþ£~Þ»—¼;£-Üî´� ÜÍFc<#aº¥ù²Ž‡ +V‰3 +o§Œßë’ίôiøù~Ïåy:üÞÙÛð»òóÈÓ,vmOº¤¬ðØtÀÔ™Øö±�&µ»—B »m Œû+K9eÿUÜk³|{=÷¡XO´KöÜ6%Ê/¼kKOü÷¿ÿëÿøO¶O™whòš®ÝkYîÒì Ó<<ŒÖ†öìÝ9­ËìóR[6_oäqðp­Ù£³®Õ˜žøŽÍ’~)§ÔãfowFØ–UÒÞXŒgÙÈ�, -òâï3vš;ø�µívùu¬—ëÒ†Å?µ*ïåò›Å¾¥=,=e[o3"´_Ló+›\~ÇæÓ›ìÒO.3zœ}X|üe[Ž·ùU¥ü:ü¶µ´köSñÕ‘1îÙ¡z[VþÈ}dæ-Ø–�EðŠŒOBÙ¯iÎ_0òº”õ™ã°ûÜ|]|QmrË,»¯s .ÂRî⿎±%­`Ó^úÌÎåq¼•²¬l_žÍÍk_­Ê>öjôC±q±¡¶§ÈûVŸ‡ú+ŽçqÃ|”úg­»­5o�ýK¬�×|Àú�föÏÏ"®|4ÔU±Wú�ùÓÙÞÆ‚¥Ê^ê—C_š�/Ιw†—r}݃<‡¥r¯¦ŽgÍì­c3ôtc™ºæ;Ñ'®Ž)5Û~¯¯›MžÙë}E£¯æ;’KÇ“ø1·™7óöµß×¼îØë(íw‹nÁÛØÇÓûsÔ¹ùɨCÿaµ½öŸYìåã¥ràK­&oË 9ùȉS±äÉ<½õ�A¤köb�ÃP�o±f¨�‹H½ 1Ë•¹v+L~R)'0TX§¾Íž»¸ÞüÞ-ÑØ49�‹ ”è^ïåÆ¸Ê§ox/Ús/·óSrè3)74¸…Îö®‡L9ÖŠœ·;ú¹Ÿ¸Ûz²å óü¶ížÏç¬Àu>Èí¼—;÷xÔš�ó6]Zzá°Žqé rRðèïxq±Ð^0`î*(µ{�æ6�Ëç¥|2ÈPiÙ{¤ .–q®U »G�Ìó$ èÆ}Q¹#îSŸ÷”?~�¥'&;¸®>×åÓzÄÎáØz„n6UFÎc1ŸÂp€Å†³°Lò,àjXLóä\0‹5[Ò”’‹Aá0æ—úgL9kÎ=¤w2ÏÓá0Ÿ²�ÃÍcçÃFsá(Z(¦å7ÌעαF>i¾ô“˲Á,úúûeù›XÚ—Ÿ{†ú¸Ç”b +1'=™çIPÖßÕúeïyLéh;—?’4>–´÷¨ÍHzXã¹#êŸ~Pæðõ©ÀØ»‘z2ÏÓ!Õòá·>ÎóðcJãËr;7ìÄ’okûN¿@RGÒÒ¾Âëž]Ûá³Yò¤�‘§{;Z»Ù+³G7›v‘I�óÉ…D0ÀßCæ¹¾:]Zº‘_,é,üÃEç ÔÌó¹òªˆ£©]üvÉß+@‚˜¨ßú¿#ÎÂå£je‘nOTÙ ¤¦4¦´nRËÇþ¸AÞ�™?W[“ó»š-Ÿ÷Hª&²åÄùbAˆœ^oŹõjÒ‹87Cœìrå›)ùCö‰§íöŒwÅÚ*&t[¡bÕu±¡j�Îgù6×ù.l¦s×iÖý5­ ¬;�„· ªµ£ôM”æákQÕ»F5™eF¥&u5eëjý$ˆnAø�ªE:³éY¯åsuga¬@¢–.Õt‚èvÓ-¥¹ÖS¡¥Š=kªžï¦t¨ÛØ/Èn쑜�¿l†�eëǵ8?5ÒúZE†³Þ.ŽÚHìâ·‹ Bj×¹B¹ +=.´¬Ü&Žªã¥KC¬®ÂЬ²|*iþ¦ +פ™yÊM Rùdá~Õ+Éc³‰×NârßX‡$h +=-s—¡a–ûKG%¤Ï¤ÛR7�­¤ÌeLR5/“T#�µX7Ô5q¦°êŸÆ•\¨ª¨®‹]ƒòÛJÜítm¨:Õ*óšÁݵr»Ø7î|ãâÐz\çc¢›½­\†ù*¼•‰�Fq†~¬•t±Qm¶ë•1a7 ¤ÐÅ�Fߊ¸ŽÖÆNå,”åcdÒŒ{»üåR¦9c�ÉOx«ó·ð(K_ÿi~‹ß¿^èú»zÌî<�ÕØÂ4n]‰ùL–¿#'žçïÌ©Â6l˜Ð£ý.Ö±§u m7†ñ5õìª{M©ƒê¦åB×}ÈĦA×hË<ã„·Á‹-�ùÖ¾éö|ikãòÓù€æj.xsp»Îö)ùÊŠÄUNÚ§thɰŒ¸à…â’U˜ºe+33 y%ÍõÙ~â]as]ì‚…ùÒvõi–]e¥, B`Ë/xÁ¤y¥ie�`ôÃÃë›û}1Ù×�¥�Ú›ô�K[ò´ž,µåÒ¯/Ûœc˃uðvµ²,{¶9}hôЂV£L{¶%�ã•R•­*­E£ ÈT•µCµÉ/Ùª[J‹£è¥ÐbŠ.ý ÷´ã½Òœèx¯øMÚ\n�ñZ´d[ä8œCo�ê)[,™ç¹›”zJ[eÛºi]w�m¯¬Ô ñ=2U=›Û¤|ˆÿ;sža×AJUÊNˆŽý`zLÔ¤ƒ5¶|× ŠÞƒC(]L È¶FÞ�çx¯d»#R÷JxM莉¬UAço�”Mxƒ"ÝW°¢ê7JÊÙ’›ô>[A�æÔf'¨|mXÙÓ,Bí2ä¥bþ–@›ƒÞ˜¿Ü((-¿w‘oaÛÕöIùù?Òùhl +endstream +endobj +630 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 629 0 R +/Resources 4 0 R +/Annots [ 631 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +631 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 311.373057 101.433071 292.623057 ] +/BS << +/W 0 +>> +/Dest (cb107-1) +>> +endobj +632 0 obj +<< +/Filter /FlateDecode +/Length 4702 +>> +stream +xœí][‹,¹‘~¯_Qφ‘u ÝÀ Œamðâ‡�³˜Åø¡OÍ´ÍÒ³0Þ‡ýûû)+uIe䥲ú´³aOÓ§+#t‰”>} +E*Kê*ñó�Â�”!zG×Û/—_/Rx+ñoH1¹Ô?â×Û«’ä…UÑ{ý% Œ>ZíÝõí‚ÿºË6ùÛå/¿¹ü÷4�ºj£ÓÊ^ÿùsR‘>x/-£ŠPIe•µÂ{m£rJàcäT0ÃzÒ4Wy˜A1XN3HëÀ¨Ì0ä•™«"ÌÐ^§‚*ZϨ”„JKÉê`ˆ$2šÑ)+Ýq:­„ QGVç¡S^s:c„ó¤¬âtQ8çlàt[l”ŠÓYØb‘ät°…LðœÎÁãŒdu°Eo8�‡-­]€-@W`u°E:©8]4ÂÆ@Äê"t2ø0×ii… ÆHN§”°À¦auQè$ç�†-NÚÈê`‹5Rs:[?œÇÚÁéGA"ñÇÚ{AQG:A�Ç:DAÞŽt´‚\ô© ÓŠ##a‹%Ç1�Q°…0rYl1‘8.0¶ ÇÆÀM†ã¶% …ãº%Ç|KR9Ž fJŽ ×GP. 9.0à\îä¸À€t1Ü=Ǭk¬ÓЮ¡à8.0à]CJr\@à]c�“ÕÁ˜ã°£0*Ž ¼k”ôxÃHs\€^À¡ã¸X:Éq�wu�Äq�wµÇÀê¼À4xW[Ü7sƒwµ•šãïjÒŽãE€$ë €wA!–w` –ãÌ÷ÐiÃq +n Ǽ«"¦?fLƒ­„ +Ñq\`Á»* ûX]ʣřq‹VʹÈq�ïb¢2Xð.è3p\Ž˜Q5Ǽ« fjNÞU:JŽ ,x~ƒå¸p +ǘ߄’€.«‹BÆ8.°à]В渳°�LÂê¼�Ç c!á‡r\àÀ»˜Þ#Ǽ+­18ð®$¸=¬¶˜ 9.€_†-3¦á¬ +©Áœ¼+z˜Ó�w¥ô‘ãÞMÓ&ÇÎ'�À@/Xs\à‰è½ã¸ÀE \>Vç®-Ç^B`AY¬¶�'Ž àX‹hbà¸ÀkØb´æ¸ÀkØ—�ãx"*xßìò¶.ìú€` æK,†IÛë—_.¿ýó_~øáËF_^/ý�²¾ÿN¥¿¯Ó¿V�_Fyÿúû_ ÄYó[9MgÝý/Ö°’~e¹ ;M›Ê*å˜Qw›–SÊóÚ8— 6™.]¾�¯ø½�u¹îžo]HdÇû„K;äòeý¨+å4mBKöæ<±©ïuš6µ•ÒßÿíúåO—û2áà™>†Û}YžÁí·€+–¹kp]è‚PÞ‚Yé +Å”ÓÁ6•—?Û.{êÊÃ#Ã�ºz”êàžë—sØÙþ>¨©·³»ÜÏ×fÈoC;l“ô”eCö2^¤1ù&sÐ˘î©yi™¼Õ�yN‡Ì õ�gíwAUžýnr¾|{�óçó¾áÙ¼µºú�”‚Å:(m7P»3ÏÙP«×}Õ§}Çý­f¶^óoSdpþhÑõü·„ÖÞcÉ\ÚÝg¶ý¨÷ÁÕ_F§ìïg¡Õ—ܽšÚ™çt]÷?÷Ìnºõ9»²GÒÒw”ÁAŸóKhÓ÷ågdt-õt¨.ðÕŽGl~�…ïûûúÚ´eoÛOM¾¹oeµÕç¤hüNJÖQ»/ÏéP»á§J-íLhÔzùz÷]uú{E»õ^¦¾×Vø/û……“rY_Ž}™Ú¬P¿2ï-bYOàVQ”Gî�®[]ö£ªÖ·€¼p€/÷å9òÖýÐ~};ëLÏèèõ¹~îøQÉÉú|3TÞ#ö‘Ð:­ éÓFÔx›Æ¿ôA(CÞmEœvæ9‚ÍFüô Ÿrº‰[Nnµ1?µ© ã§; +†ßW¹úd€²ü6-K«±;òmâé[wŸ(ëGI�Ð×Ä.÷®ˆvæ9úöù›‹�õ2q«”Þwâ¢è�øc�¯øùx¼€Òê+Â!!Jm¡t_žÓ¡tÿܻêhŸRv«�ÙÂÒªÈ�¿ÝÌ]�Òùh“žî¸¬�‚×(úBï¶þXÚºôvïîËsºÞÝéÃ…®UÆê°šÀ½é´bpufI‘ì´bÐI÷õ~ÍéRž¼ÂÈz“¼óÛXî×&Õüm]Ã:9ÍXmÚ—{iÁPÊu£-™RžpGÞ°ây�û`ñEíÓæ�øÚ™çlø¢ ëh7}õP»;.«¼[ï¹�ÎŽþz¸Ó”ƒÏF�¶ÝFL+^ž±È<ÎX;óœQO‰Ã±žMñ�ÏÌ>ÏÙ¿€*ûøJpgžÓ¡jcË⿘wîÝwã›qDmøÃt êµ3Ïé�²ñôµ‰+~3߸‹{.í‹Ú—�DÓúgãյϒʊ«‰)ä]7V-ض#.üГ“¯=°±ÕÊ;²÷å9Zí†ÿõ�køo†„G÷ì‰Ì=°»gˆOôé^ä|DÿÌlI[@jÙ²ZHK.¡j©ûòœ©ѰÃqFy|7É;FÞ>_Ôl‘vîÌs:Dî{�å©ÝÈ�ÀÎt×âÄwæ97üÓ…Ýг·>låš²jè�ð¯Ü›ÚïâN+™�˺ýRŸ‡c�{à­ì�yN‡Ü}Op¿súÑíö“qûÂÞƒ_Ÿñ·Wã};õi¶8÷@¬ugžÓ!wŸÿZ"Iý{R´û¸ÝÏ\Ü3E×'ûç9êöŒù£}•³w¸ÎßîÊé#IMÞ~?ÿǾ�È#Õxν3ÏÙ�ê7|ÕÆwÌ­hN<ð®æSoî°kí½¬>ÏZ µ¤mç……{K÷ômWˆ ˆ=àÏîÌs:Ä>·ûð|~ÞóžÌiW‹¿;Àðqwæ9š×}ÜgWS«ß«ÒöøÂSÛÉ,Lµ‡—Þj™üfyzfÿrß{�þ>¼#ò›�äôˆ³îÌs:ô}ìÙ§à¹G"U+è\ý†Žµ]ìß$ö°ðEX¾Qhgž³!9<sý”H~�XAÃé“o͸1~xßmþ¾ÍÆ=ûÞL\@oãŸî}b»3ÏéÐûØ7=õ®jFEÏQí®�–Ã2ÚôB™�"~Ëöwܰ6�#€~jFjƒîcû¼Pz`_ÁÎ<§C鯾‚GÞŽÞxW–û&‰aogÿæôGÆ'~rU’¾&`ë»væ9Rw¾ôÿOø†ml×NÛˆ½Ÿ§¾·‹Gk<ƒÝ™çlh�ß0d¦=P�ÙîÕTrWÍ3àÆW÷Þ@�Ú´¯~²k0LÓ {WûˆPöë^§ùgèQ3Ä~b ydÉüÎÁ#NmƒÍ¾¹ÏÖꞟûÞB‰b²;óœÁëþë#ߤ‘Þø(HÊ-ßñÈ¡^òr¾+;ðö¬}sO‹Bö›•üÜÖä´ÌVHKu�#@¿·šöAó=¶ÏåºùD¾. Ùàâ}yN‡äu×0ëÙÙ3¡Söl÷Œm‰ sY—šæÉëì¹5ul|#kCÿô»Wbe4ušyÞ ÓdLÿ8žÍà-ºß*3œ©ãdsÔCòf’ ÜΆÈÇ+\ÓOL7"ÒaéPV®p +(útŽIâþá‡ßÿñß+‡ãnw:Jü’¿ŒM©{ =ÉôÐØ#ðÜ�ÁmK “ÀQÝ¿ô÷Nm ØwJ´¦´îþ;”5~Ê yòëKeSþäø»~R¾ënìʰÍ=Ø|ß÷ÝöëÅ çï¨á 6é‚P:Òzu$»ûxMgþ€UånRCêëBÎáhÛ_Kªñ´[™ÀK‡Ý�Âm.Æô¿üËEE©ý…ÜO¦”ƒ8è|QÅo—t2)1bºj§8 Ç�²”E*',²˜Ø‹Ø§4VÈñc,…›?j›ï&å·9[:1†dNd†3Sî3Bätj.Nw/…Åét× ÌxåŠ)Öe›!¬R›¶X3nŠ•‘�ÐÎ…²©®Š5e{T: ¬4�«ÂbzÛtªéþœVû¦;ׄ· ª5½ô�•¦3%sQ¹uµ,2Ó‹Ô攥C¨ô#º]áw2MèÌ¢oz-�Ìu† $*ébNLjn6ÝXš-=åKªP³ÆÜòÕ” +uJÃ3²¡�F©OÇU7cDšüq*v©r_ËÐàFÏ„·‹¥2«øíb=“ÚV®�6C¯š¦Ü"²â¥JÓëì÷OšY–Î5Jÿß©Âibžáƒ¢©t6Y½ª•¤±YÄÓFjå®°q- È×´Ms)ï fÛöRA2éé–Ô¥Å&Ҧɹ�Ù¼DR…<¦bUPWĉÂrû®l…2�êªØ(¿MÄÕN[†*Àž+sª�»-åV±+ÜùÖŠ}éq•š+ö–rÌgám˜Ø¨'è‡\IkYf»ZY#¬†�ª¸ÒèÛ Î£µ°ÓðmáãÇ:ȸ÷vùÇe˜æ´±:âƒ3*�›ÚzYêú¿Hó'üþ×…®ÎuÝçq- [è­q;“¥S¶ÃNq:u; ˰i„šÚ¯bjZ›ÑPæq­¾¦š]VbÏ)UaPU´­ÐÖ6lĺ@W+Ó´Œ]ÞºV,ŽÌ³}S'ìû¥É7‡jL:â-[…‹övpªÎÔ)ùÚ‰«”´NéÐ’n2â¢-—M…±Z613²­¤4}²ŸÚ®0©®æ¢q#Ò¥©:ªÓl[t– wÑ$� lÚ‹¶`Rm¥qbcôááõt¿�&»<’´P{‘¾µÒrcIZ�—šáÒM/Ëœc®é"ÞÚB¥,ÓŒ=Sœœ:4ªkA“‹£�4ÔlcÛVJY6©4O…. “YVJôÙ&7fËÍ2Üq`[ÉŸ¢JÿѶ´m{¥4¢m{ÅÍÒ¦róŒW¼%S ÛÂÙ×»“5eñ%#smî"¥šÒdÙ¼nšÖ�gÛksT qÕ3•5›�¥<ÄGÆÎ=OuàRåŸ!¢B=Ú5)o´¹ÆäîçÀ!”œöšÐÈÃyÖc%óˆHŽ•´5¡;#½ÞLxƒ"n+š¢ÞÆSAùlQ²·ôX0¡ Jsr 2ÂŒ�Î! T.}Z*Ú8-CHÇ£{©ØÐаג&á“áçÿ¹œþ +endstream +endobj +633 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 632 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +634 0 obj +<< +/Filter /FlateDecode +/Length 4899 +>> +stream +xœÝ][‹äÊ‘~¯_Qφ#ç%òË�cX¼øÁ0‹YÌ>ÌÔLÛ,}Žýà¿¿_¤”¥¢$Uw{(ï4=]ŠÈKdDä—))K_~~Ðø/’žbLÁÓõöóå—‹š‚Sø—K¬.2û�ø Éé䣻þ̦�œ þúzÁÃe_üõò§_]þw]G_Í”’7Ú]ÿö�Yd§CPN`%°”¶˹)ã¼ÀòzÂS’XÃ2´eˆA):‰1Ș(°"İ´Ý²Ä0A“Ä‚:¹ °´‚Ú(%ò ˆ"²Fài7y(ÝK<£'“I"/€§ƒ‘xÖN>�vZâ¥É{ï¢Ä#Èâ’ÒÏA§‰”ă,dc�x²Xo•ȃ,&+ñd1ÐNx²À»¢Èƒ,Ê+-ñ’�\ŠD"/�§bˆ[žQnrÑZ%ñ´ž|ÓŠ<Ì(É�g ‹W.‰<Èâ¬2ÏBÂ�ÄN8bf«áÙm•ÕÏAc‰<ÈãK`\çÃe%Ø)3Ìu¿¢�G…?Öø�ÏÁá·ý2hã1daÏVú`¡mí?±²A9$úÇh'pyáïD~°Ê +¬�¾#ô(c“áõ ˆÌGѪðo>]¥‹ó.}½ìÄGD§±4wýôóå×øÓO?}úOxà§—ËŸÿM)ºýøƒÆ_–¿7TAä�qÍ´ZF·rV/4³”Y躟ÿ"ÁÏmßÊr;µüнîÊfyl×¶[÷Qëø¡­(È�:™_~)§ÖõXæRf£‹¥¬uÛ1×2_¯ŒaÔ—õ­ ùAç_?ýþòïŸÖ.™3©ì’¤yCGCÍ^|®Ê{¼øŸá¼)=ê¼+%¿¬ R¼8¹‰øœî8ŠkFʼla”ÙºbßåßÚN\¬“˧,cø¼Ð;Ç­ ô=Èi¸ü×nBÔÉôcq§ˆ°!àª3D½ìVm� A›61[â¿~ûÓo~÷ÍH¶�¼ãw‘,öíšµaª–‡éZÝ�5<—u ?_Êèæë =ZŽ Ÿ§TXh~®ÏÚ£k·ÕËíºYà –vŠŒK¿\·È›åðM†Z†zÖñ)¥ú^©.cµË¯ë,·\ç1,ú(ãP_ [êÆºzj]žõ¢n³ ¿šEó½LHôJZ¾û¶Èd»8†ð8ë�ÛÓ_·íxË©)ßþض£–qÍzʺړkí9TËJl#3ÏbA6¾ æ!nÚÎþ™æúÙG^–¶>÷~×tn¾-º(2¹eY‹M×<ÆìaiwÑ_󱥬 õ'½ØÌÎíõþ–Û²²|¼|3JÙ}»QYÆE†2žL“äsMÖS.”©øö<—:½¥öY÷f^ë6ÆÒ~ JùâkÜèìGóJanƒnWòìê.ŒºËsÔ¬íålÓaöÕ‚C~ÇîVñ-ý^ùú¤rÙŠº“£ÌéÐÊ�mêRïÀnlWæâ¼Šíé.mt×�´U•ÝwãZ|%ûé¢ó•ŸíÍ›Ñ/ÿÊ´~œAÝ·]ßglmçñ¸æƒî&ÙvOGVKþU׬¢ç¸ÖI™oY�Ú•‡w´Vò˜eÌý\+¸;¬6ªÉÛœöñmÍSëÉ:oJ¾?0VuUÞDSDRk”¬æéå¶Užž¶ ‰f#Üí0ùI%¾e5tX–±ÙìK?‰i?î·hlšœÇEZt/Gµ)æ;¼Þ‹òÕv~J6“jçÀ¬h¬7öPC&?:EÎÛ;¢oC8>ô± +Ù­œcnrÑ´¥Žžl¾‹Á;ºoÐ<ߡê|�ÇyT›í ±æã4OÑ`–EBˆuß7]Z¬°Ûǘ¢ˆ˜D˜|Éw¼˜”äôîËz^Âö^p» ù™˜ÄwŸ‡Nó̾zäu0K+,Ñè�¬ó$yzÅ>~^cûÔç~I’ê2£ú$¸Ð¨áXMâ_Ö>£>—m=Cçtc=#7;5câÞ÷œö{¾gûàxΪï¥e!~Y|oKSJ.=t¸çwŽoZÍ>ä¬��)ñÍ–ýMÎsužÍïß¿ïw�Íð·ß¤á­ ·üåß0_‹<þ¼¤\úóPæëòw¡³ðËï×åoêÊ~ùÞ+Ò[6¥îx™ÍcÔI/;WçI¼¬‰õž—ÝÛ²ÛlÏ}Q»{Äì0Ù›lçe� æ·ÁjÒ"#gîÏÜo{N÷=³z›ÚÐ6Gº~M+2�é+ëT«»÷îzj2�{ê¹:Ïæ©^íâ¡ä!ºluÚ�§¶˜±‹5Ã&û +»k»Á36㺺·µ|YŽâeféyÖ‰3i_Æuß]Ûá³Yê¤;3O·qÔqߺcçÖ=Ïôºâ!? Kü�gž¬ótžiw1tŒÔªözÏÚó’Í­Žû>?!Þ}„géV¾Îµî«yó/l±93)Gž=fß ÏÕy:/</VËt·UFëV«|éö[J¾²ã©#ö‰ž5Z²ÇÒú«wáÙ ¾ÌõWw¬ÕàQ›åã}YW8)ìmÑA éûxðäã'ë<�çÄ�£%ÃZÓïë,»YÉî|–¢ÿÚ��-lpGZÙß#÷Ë~M øÞœ÷‘ìí;D7�Ì +i§÷Öz<‡?Yçé”Îïøí{ã¹:Ïæ�q?޽w¿°Ç\¶Ì{òézWzǺ»™ÚøÀñˆ¿âþ£wÈ6Þ?<8}vg­< üöuIöÌø†xõd�§ó̃xõƒWíñª‡ö?"6|¶èçŽ×v{£ü^t~ríðõŒSužÎköSß>o}À½*x#þÝóÖ1b)X:Œ³îb½1ú�úß¼ŒrpG4¾áÞýÉ:Oç¡û®'ïÕÈàÄ«E9+JóÝÄ ¾‹�&µ~tÈóG/ßë= {ê™õÆñé‘>Þ_SZ=ë0¾RõÀÝÒØbNJnBÜIñèyº“užÍkÓAœªdoéW£74ó‰n~CÓ,V1~ßÊoyqMz +¦bìxÏÞoïTÜÛ‹#�þÞÓ2ss¹!»gÕÑÒ¤ÇË“užÎóîÓùíf® –]ÝW×ñ‰”éóá{»å£Ç>²»~âéÒ½µ;ÜÅ—!NÚ?±àÁçê<�쟾#¦<ã]�ì[®îoõ{a-Sõޝ³äßwÜ=­ÏŸ2Þ2N߆qxÙ8KŽžMÝÞåÙŒèd�§ó¾sñæÑ½v’²”;¯£¿9ëbÅ=œ{ÏL¾ã¥-VD 4Eö¨£§QNÖy6/…N%î‡iG›rH7F×Î.ÆiQPõaÌU Önж­;S`Öoƒ �küq9[)8hÂi›ÏÄóª;ª©Úô°È� Ë #ÛÃg®z8ðgýN šäCÕm¼X*>‡L|›Éϯ+ÛEm%ÃÌG-,ϬšòÖI~¢p™ýÔüÚè·¦òüÊòšk~4-ûÓ\Ö«öÚìòy|m=÷—�NPók¤Ýë°µýòªj'ÏêõÝ´¬Cy ³ýrñùü<�ÏPU1ˆáCÖ¯ž&~û;`ÒE>{Ï’.fÒY±úz§f>šþ—Zj9­^ñ¶|xá|”}w±”ÿ%øç‹N4±þó9ùdi•ÉÑ”‹F~½ðÉâ$�‰Úad&.Um‹t=[¢Ðn¥0¥±¤u“Z>¶(øõ™ù£qe4\ß•j|â©RÈæ3ÏæŽ"jz½%óèÕ¤2ŸÎ'»\ù* +¿þY‰­Aê˶[ÅC²¶ª#º-QuÝ5²¡"�æÓ<«ê|#VÑ{ÕéÎü¥¬ �9÷ˆ· ºµ#õU¤ò™Ð¥©¢]£*ÍvB¥Ju¥d5U; ¤ÛE þ JÓcV~g5>Ys&ÆâHTË¥RN Ý.b¹¥5W-j©Øª¦¢ù&Jsu>çã>íÖÒøë&º9¢lù¸&ó9"ÕÖ*v~c6ÄÛÅQ�‰�üzqA(íV(W\¯'Ú®ÝJŽªùK£r¶6ÂÔ,4>—�ÿŸ¡ÂU*#Oþ ©ºŸ-Ú®Z'<7+y­¤žî+ê�¤M¡•íÔ¥C¨>ÛëKG%”gЭ¥«ÆVÔNe=¤"ƒT�5YW¯«d†°¢ŸŠ•=Q!Ð]#»êʯ+r“ÓÕ©êTíÌëÎÝ]m·‘}ÅÎמªÅùx¡2ˆ¶øÎç ñ–6Éìú±tÒÈ|´OqŸÚYGl‚¹Áèk&—ÙZщ¿ü¢|l“LZqo—¿^ò2g¬3|¶ƒ·šÏ=ï£,}ýÊü¿ÿs¡ëÊA›ó:nTE S±uEîW2þ–Œx’ÌßšQˆuÚtDCì7²Ž­¬+ÞP×qc:¼¦V]5`/%uEP]¹=Ñ5vdS]×hÛiÆíoƒk ó^Û´{¾´ep|VÑZ¤ÂE?\ÆÆ³mI¾vM⊋¶%\2]E\ô�â²ë05ÉVb²Cö�TÕ³üÔ›Âr_ÝEFð¥mÉ?ÿÛe�W +endstream +endobj +635 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 634 0 R +/Resources 4 0 R +/Annots [ 636 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +636 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 558.873057 101.433071 540.123057 ] +/BS << +/W 0 +>> +/Dest (cb110-1) +>> +endobj +637 0 obj +<< +/Filter /FlateDecode +/Length 4913 +>> +stream +xœí]]‹,¹‘}¯_QφIëû–�1x¼øÁp�1fúÖLÛ,=†±ü÷÷„2%E*#«²ªûÞ©1{›¾]¡�Pèè(¤ÌRê³ÂÏ7ÿ%§§”r î|ùñôÓIMÑ+ü+)VEýüFÖÊÅÉë’?ÿH§˜½‰áüvÂÃ%OþvúÓ¯N_çÑg3åŒöçü@*g§˜bT^Pe¨”¶‚Êû)Fム +zBs–T0ÃGgÜVa†ËÉK*˜áŒI‚*Á 뢶[U†&j'©`†Î> +*­`‡6J‰:¢œ³FÐi?8=H:£§�²É¢.B§£‘tÖN!:íµ¤ËSÁ'Iç`‹ÏJK:[¼vNI:ØâlŠ’.À¬u°Å¤h%]„-ÞÉ‚.Á +‰:Ø¢‚Ò’.ÛÉç䜨ËЩÓVg”Ÿ|²VI:­'lZQ‡…N +QÐØ”Ï¢¶x«Œ¤³°ÅáGÒ�'¼�) £ÕÐè¶ÊjIça‹1щ:؂ΗÀØ¢b�(#h"^’8ÀÄ8¹lœD&ÙÉ%—$0)O.F+Ñ€É~r!G‰¬ÒÐ-�U°Å» 1�Õ°ÅaäŠ:Øb³“¸ÀØ‚X [Œ³X°­Z$.° [§²–¸À‚o�ÒAâ Â…™Jâ Ƶ)8‰ ,(PÊXp®wJ\`AºîQâ Öµ>‰ ,h׺$.°à]ë´’¸À�w­ENQ[`‰ ÀŽ“ÕÉJ\àÀ»V«(q�ïb‰ Ыp$.V&“’’¸À�wMRNâÞ5S€¨‹Æ •¸À�w�G¤™¼k¼28ð®q&H\ Là%Fà]Pˆ—ÃØ‚•¸ó=tÆJ\€Â&ƒ°DâÞÕÓŸ0¦ÁV“N9H\àÁ»:¡ûD]žt„Ç…q /O:„,q�ïb¢²xð.è3I\ŽŸ0£‰ ñ-ª8DÌ™)R#3†…CtßÖ=™ÝI6ï�ý㯧_¿`ò=ÿõŸ§×_•�²ú£ ”Ôñ†�Éèn�è[£ùEƒ4TùW,„��ä!#bîFjÐâ²éFFbú£ç퇕å0œLGn¬‹í`D# ›ë•ÒÅXš3»Éwç¹irD„�Ï탖mí®âõv_I¶Þ�ç£lµ­[3%-ÕR ¶¦1�&h$Ü™å� °èD�ÆfC¬�¡Œx]¹Uâß|:�+æ½åvÉÌG¢AèÆŸ?ýxúõïÿôÝwŸþ?}z=ýå?”òáÛo4ýMó_wY®ãr½Èk:C±,Úh^ñ3¼3‹<á׆tŸçkIGyŒ[Ê^ôö²ËRîg–Ïõü¼.Ä#ˆÄñËÓ¾Ìu`Âîå†Å–¥œ’eiL‰êõƒÚñ?çO¿;ýöÓ2%>¿eDz¼e_\Xì_×ÃÌ:ê®3(‘\iÇ`Çx]ÚcY9ølÍbÛe4Ùn¿áD÷îÅÓÁ<Ï(¬ù®!ŠPñHÏZÿ˦ž÷Ù¿ƒ*Û(Ç!èÅe ᪎åy:T¹C<õsñÎݽûa|³Œ(ú«èw)<¢žq™Öבr,ÏÓ!åz¸ÔÂ#ÝC¢"¹!”ò~­'{»èÌ:M ·(¼¢^é=‚üK¯Ö¼Õ†•®Ú×iZø¦»}RHçyºX«�/]&Ú¶Sm—Ôv÷:ØZýwYÊÎL÷º¶½øÉì •…RXe• -ʯ£õXž§Cë�ø+­{¡z˜kh½\{n@kC¦ÊTÊûRHÐýs«C­ó­¹Óf'Õ?´™#ή(Ò½°ta]_óÛå6¯š£9ÚYð.ª®"õ`žgCª¹×ÝBã8þ9šZ�(bœ&¦‘>rgÞ"²!p )_sÄ5ä í?R×."{|çéa%„áÖL0ÏÓ!òFL¸3뎳~ëµ¼•5î²C%ðÖ×? úË¿‚Øá;˜çé|#Výï åd�³m‹)?³Xï|,f|„ï ·Ç¡ôP�sXªÝZ“Ìótè½»Þÿ‡ð¯†Ð{F͵6ŒQ‰à“¦ C›D{e4Úöæy64Úñéí�·M†^*kêŠØ ?_/³újÙ/ —±} ’ýr8v¹öþ=€ƒyž¹×ãØ÷ÅX?Bã:Ý…úcøõ=ñöÕýƒÑOcš[œûÀ^ëÁ/ì´�ÚôeWˆ2bÝñìÁ<φXw#ž½±ú|qÞû#™§]-ÞŒZvÐü@Œ{0ÏÓ¡ùzŒûÞÕ¿Ó9rÖ‘»¶«YØõ.÷‰øˆ©÷Üùo•Ó=û—ùÙú»âǸF�t¾üHÞAßû¬ó<únÄ©ÿް{0ÏÓ¡õzìÚzîu�’Õ³šZ­÷Uë ¸³ËÞzfˆFÔÒsõ«§Ó:]yvuܪqÝë:ÿ jÊÞïÎÞBYª~çàŽgmÅæÈÚÉ#¡áþY³ç[(á�=Ùƒyž Áázü:ò׸£´ÚM + IÕó�<ÔKQmŸÊN²=ã󲜯8 +7ˆÒŒ ™­´lVH{u-#À|·Zæ×Æãü¾Ü0Ÿ¨×$Ûû¹ø`ž§Còõ× +ëÙÍ=¡§ìÙáÛÖ².µìÎëæ¾œcuè¡þ!Fmï~�ß•¸2K�v›wÅ42¦Øå=˜çé0}ð›_ìÉ‚ú]¿†ugTF½Ñ×-ñs™ÄìSn¾˜¥Ÿ÷î%ï}gEº+Ecxœ ü_›�ÆxFÂtKóý:*Xü%Î(¼�2~Ù³±šìÓðó-üËótø½±·+àwåç+ßÁjOºä¬ðØtüfÌ�ØöÑoîí¥8†Ý6Æýö�Ky¬Íòí¨ê B±žh—ì:†,h«M*=ñçÿüî7ÿõßlŸ’vhhM×îµ,wÃì Ó<<ŒÖ†vòîœÖû|®-›¯7ò4x8õ²]˜Ë›Ÿ“Zò]V^hÞ.zÏtyNëâR¦¯w$·ù]Mû2{õ�wã_j ýÜÏ�‹Ö-ª(­_}7‚¥që4åÚ +-]®K /W¯ªò½k¹²|j�ž<¥.‹ÂÒôÀÛœ�ØeéÄæ¥ÍvémO^¥2^çòô÷Ûr‚¥ãÌèÈÜm9ji×ÜæÒîkv`âÞ±Cõ¶¬üQP3ó‚`�”3! eÔç9?µ¯´‘Êzáhî>7?,¾ðyóž_÷µ_F“‹K¹‹ÿ:^–´‚ý zé3[Q½Èš—2Ùˆ¿\ó«Ûn[öGâ¬7;õ—:ëõël‡^Ú`™ßj|PÒ³þ[3ó±›çs©ã‡ù:÷ÏWÅDZ§õµž°ØVm W|>´£°–¹êÏ8ú³a Ô�ÊcX)wtêxÕÌæ:öbO7–©k¾Æ;²¯ôrϰ¤Us;•]û`ì‡fS`öV¿ëîwÌ·×ü”7~ðÝlÞÁÃzö¸�×õŒqk¶�qÝøÊ3Ÿ%ÁËýWËXäÕß._óW9qå¯V.›e7ãîûŸÇWF]m � ¸æ·à—q@åì1‚F8: tärŒö¡ú`ž‡wûÀÐÙ÷S¬Ü”¼ÇЖo,\Æ¥³^(ò mî„Ý +s˜T¦#’‡ +ëÈo.P÷Ö[þ»%›'p…ýë­Ü.•ÅCí¹•Û‡){ô™”›?Ý ö¦‡LyU‡óÁîxèk=4r³õΖSséÑö•-Í7jáÎÚÊïk6:Ø©šÈ–rçŠ!r½SëÕ¤1½Ê'Mv¹ +Íâî&ì:ž¶Ø3Þk«˜Ðo…ŠU×ÅÆU{4ýÞ\º°™Î]§Y÷×´&²î¼&¼œP­¥o¢”^ R‹ªÞ5ªÉ,3*7©¯)[‡¸ÖO‚èr„ߨZ´Cg6=ë5:†}¦ +$×ÒåšN]Nbº¥4ßz*¶T©gÍÕóÝ”uZàïË.l÷'Ò»ÉØQ¶~\‹i¡õµJ 7f#¼œðº�øíä£�Úw®P¾B� -+·‰“êxéR:qþ„¡Yetˆ5ý?S…oRbžòA»):ˆ¾_õJhl6ñÚI\ë8ÉÚÅž–¹KÇØ0Ëý¥“Òé¶ÔÍc+)s“Ç\Í#’jä±놺&& +«þi\É…ª�êºØ7(¿­ÄÝN߆ªW­² Ü}+·‹CãÎ7.Ž­Ç5½U ÙÛÊe˜¯ÂK™ØÜ(&è§ZIÕf»^vÃ@ +]Üiô­ˆëhmìT‘[>öA&͸—ÓßNeš3ÖZ˜Àq}„µ>ÿ i~‡ßÿ=¹óïë©ìóÄ�Œ�9Ï°ë ¥ª?e'D§þLÔNGkly5­J!€C½],ºÄ¶FîÎs}¯d»#R÷JxMèŽÉY«¢¦— Ë&¼A‘o+XQõÄr¶¬Ä&Ýça+¨ÓœÚì•·L–ç2ʆP»Œ´T¤—ÊZ +z½ /*-ß餂 Âjû¤üü\²÷ +endstream +endobj +638 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 637 0 R +/Resources 4 0 R +/Annots [ 639 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +639 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 108.873057 101.433071 90.123057 ] +/BS << +/W 0 +>> +/Dest (cb113-1) +>> +endobj +640 0 obj +<< +/Filter /FlateDecode +/Length 4683 +>> +stream +xœÝ][�ì8~ï_ÑÏH|)ß$„´H€âa¥ƒB<œé³B³H ü}¾JÇ—8•Nº{vÈáŒæL§Ê—Šýùs¹âŽõYáç�ÿ"é!Æ<�/?œ~<©!8…cŠÙŨþ¿Á�µ¢08�|tçX`Ã’3ÁŸßNø¯»l“¿�þô³Ó?çyôÙ )y£Ýù_ß³ŠìbÊ ª•ÒVP97„`œT^¸Å”$Ìp� -UfPŠNRÁ 2& +ª3,m—ª3LÐ$©`†N.*­`‡6J‰:¢ˆ¬tÚ �î%�у�É$Q ÓÁH:kH;-éÒà½wQÒlqIiIç`‹ÓDJÒÁ²1H:[¬·JÔÁƒ•t¶´Nt¶]QÔÁå•–tÉ.E"Q— S1Ä¥Î(7¸h­’tZØ´¢# +�䃠3°Å+—DlqVIga áGÒ�'œ 1 +£Õðè¶ÊjIç`‹1�DlAçK `°ÀD‰ `à/ØH\à# )/q�O +:¸|¢Î¸v�e‰:ØB�$.€c=$›¢ÄÁÀkŒÄÁÀ¸ À#’†÷-.` à"®¶ÀS”¸L6ÄD$qApë1´ª¤ófˆt-ê"t:H\ ˜ŠµÄXK ƒ^âüÀî’Ä0:M„[0T$.ÀT4DÏ\ÒiØ'[âxºÐi-qA4°Þ ÄÑD¬2½’¸34Ö’hjIGŠ×™Qâ‚H~`WQâ ¬4Á”¢¶€&$.@ÿðbÛI\€Å›Xæˆ:ØbI\£áåf”¸ FØb”‘¸Øäõf�¸ )Ø�O₤üÀn²Ä qè”’¸ éˆõ¦!‰ 0.y½%.HVa½‰%ž0n“õ¼Þ $‚-.Ѝƒ-pš’0nÁIXo‚�$�‡-&‘ÄÉ{^oF‰ àf`½ �^ D^o1\Þu Ì$éÀ»ðL½Ä¸Àzž­´¶W ^àŸÉÊÈ+Î(F ¨×anC +Ü‹Ù*ˆ1òå5’4€™XYF/F 0­B©•6Pà_øc´à„kô© QyÀ!`ÎŒ�o2aX¼û²æ¨ÉìJ²k|ì_;ýü3&ßóßþ}zýÙ)Ë?˜š€g “ÐÝÞ·Æí[�æh »'-WR5Jƒ§ …éŽÿ�—f–ÂÐïæÕSB½à…$Úº7Ó;½lö_}:�_®±MÏeciç9œ�AfÀ€Ñ§N?ÿóo¾ýÕo\|z=ýå}TʽàKøL˜.0™\?ö˜8Öp½v¬cù+§ùå_ÏŸ~×Öix™�Ø¡�×ÉÕè/×ä¿þ46�-Ýà%�-gA"X4(Zž¶šÖ¾3Ë3m=51nN î }ä�‘Œ»S´hwÊ•_›¢\jë +FÐ!„nÜØ øÓ·ß~úcíõm¤®¿ù�†ÌiîŽé³›þ^¸«¦Ïáú—.Óµ©ù¸œ’ÎuúTóP.#ÎÓŽvøe¹Ôæý|µ›!Rl˜ò°¬¯¿Ôá»k=ÝKFH÷*¦µ³·@]®€un²¾5ß M`Ž£5K@c'§¬«ð¢5/®øt–‡%žnBzgžÃa¶ÜÀôwfŽ[îø´XÍMù7\¯E¶“îs—æËôw’3éóï—éojÒ¾LØý~²kÂ#uxÇMil7æz,»fŒu²ÑÕ•»qx™·‘V2ÊŒ²1jÊvæ9ʪٰðÊèuŽ.š˜Ô©é:·ôKÓ[¹•¿Ô^bÀŒh² ÊzFνäç½6¦ù¾CÂ¥cË×¹~¬Ï¬—=ê6�YЦ…r:¶åòòçÒ¯ûëÛT7ízý +RM¼©ûò©t“%„hÝñJÖ©%gÜäšË=3îêzÛuÈX ¦õ.sûF;22òÈÒ×Q'ޤéþF^÷͵í>›)OZyOùB+Èt…9rOü2÷å92ýMýOñp|÷ÈÒ5} j^WEó + +«ïGÎ Ê‘gÄÜFá¾<‡Cá>±ô 5HX㬗ªË=p ©=÷‰Èê{²åÒ;êËuŒ®èË5ÿue2/¿÷‹Ûúl\·uÆ“¹í.Í}lø�¶õù)G#Ó7‘·3ÏÑ�g7|Ⱦ'ü¥èkzv1“­|–¼ÿR�°ZXðŽ4³?c÷ëmŽLWÿćFw^ÉO>jWÐÛøˆÚ IEÃ1ßÛèÝ—çpèÝð+s ¾Îÿ^ùÜõl³j¹Åw-Z>j�|3nõ2ùÌ‚O[<�>¦Ôó䞕ܚ½9Ïæªn±ÕwÜ�Ø}y‡ØÛþæa|Àg×¼÷¬Þ>À»¹gTÌÒÓ׆û×ð;ó¹·}Ôÿ·ˆÎ»qöG¢;£usôÉh&uÿºgž£¡™nû½ tÃ�f炘#£�åæÑâ:µĠóg–½,m«y_¹e´®p+5>)/Aéq?Òm4îËs84Þöcמ¶œË=óÌzº<î¾Ñ»7WjÙGîxrñd¡{+EÈèÏ^Ækƒ´‘µ1ÝSóÒ +2ðWwæ927üÕwžµßUwÅßÃ7<š÷³‚Ú&6Ê{8MÔÆm¡v_žÃ¡v#žú¬ox·¿õϪ¨Óõü·†ÖÞcÉ\ÚÝg‰b=è}Hõ—ѹˆËu<»ß™çhuq×�Ï�ŠgÐÍ�=’Æè�¹¢ŒŸ&.ø%÷XF4Méûò32:„–z:T÷»6fÏ�vØ|/ûÝ#­¿[Ú²·íK“ï�§¥®úœ”Ü¿“âÖV½�y‡Ú ?UÉhigB«o§Q¯WßÕðïÔ+Æßîåõ=BKþ»µ ¦plÿÌÞ/ŸT¬ÅbEO }ö4�Ü1]·ºìGÕÖRçàË}y‡¼�çôÝúv1Ö…ž�=ìg×~GJóÔдëáµhy�Ø{¢ëtI_mDmÁ�‰�ÚRð[§�y‡à�øé>åtÝ·œ=ßjcanSAÇ—+ +Æß'žž–ý§Ì·ÌÓ—î>7PÖ�’­½¢¾‰]î]íÌs4ôù}þæÖ³v’V)½ï$EÑïñÇ_ñëã¹gFò +J«¯GhˆŒ¨­Ý(;ó¥þåÞUGû”²[môÈÆ«¢ Ê^Ì™Ÿæ(¨Q릧;.k£à[»5¼»¯ÑÎ<‡ëÝ�>\ìZue¬Ž« ܛჯ3 G²yÅ`X÷r½–tœ'¯0²Þ²w~™Ê}iòQÍßÖU¾eѦý|­ƒ ¥\?Ù’9�óÄ+òÆÏ{܇Œ¯öió^|íËs8|mxX�öqÓWwõ±¿â‚YåÝúxÏ}tvô×ùÛB¥þΗ™l»L˜W¼2c…vGîÌs4D…�§Äñ±žåøÆ×Ì>ÏÙ¿‚*sÿJpgžÃ¡jc×âÿ˜wîîÝwã›iDmøÃá�¨×Î<‡CÊÆÓ×&®ø“ùÆ+;´û}Q{â²Ò7K$¯®}–TV\ML!ïºqzŶqỞœäxí{[C¸7öÎ<‡Cë†ÿõ�køŸ ÷î-Ø™»cwÏŸèÓ}VËýý3³Y$MFjl"[{¿oµ3ÏÑ�7¢aÇÕã»IÞ1òöõEÍVùÀÀ�y‡È}ßdyj7ò=O>rßþþ¿Aðѽ�y‡à _õ�öÓ?ý®€wþÕªM»|Æ£ |½Í“ֽߨ™çpèÝð]¿âoù½Ë¨ùÐ]‹+oD{ î¸3ÏÑИ6üÓ•ÝЋo}¸Ê5eÕÐ!á¹7µßÅÍ+™‘˺ýR_Ç® ÷�odïÌs8äî{‚ûðwN?¡Ý~2i_Ø{ðë3þöÍøAßN}š-Î} Öº3Ïá�»Ï½÷�3]44qOŽ®ÏöÏKÔí#ò£}U‹ïpÝ�¿Ý•ÓG’š¼ý~þ#¼õ"=ðœ{gžÃ!uÃWý,øŽ¹›·•}ô{Ì»n}/«Ïs+†zÏ{ºøž~ÚâÊûPÕíÞLGìVÏm@<ž«÷¼3sØãþ×|7½Ñ<8ô¼Óv<‰Â«æéÄ›I6 »|�z~Iù™Ößø�"ù(CÏÈL�ßþ/¾ðÛO³á´0WJkUÞ¾hòû“Ç'˜WucWªñ]Êô}å’ñ]Êþšžß¥Ìðy�Óúëoyy¸ŸÊ‰¹+¦ú˜39??oš^>>+ßMu7öÐô^çr.ßâÛ~<ùñÔ +=ž\¤Ø2|´áÙÓÀ�ùC:óIQYÒ¹›ôذú¼’s<òÇ’j:#Rñ±Q|dÈõÉæbJÿãØÁ?œt¢�ÛŸÙãzž›ÅÑä‹*~;ñy~$ˆ‰³SÌÂé£*e‘Î ‹ìCêSZ7¨éc*…ó‹ ¯�ËwÃù]ÎÆç,�ʉìxÒÀµbAˆœ^/Å|÷jГ˜ÏDŒƒ�®|1Åùl3„µ@jÓÖkÆM±¶ªº¥P5ÕU±¡l�æ3tJÓù*,¦·M§›îÏiMhºó–ðrBµ¶—¾‰R>‰-•[ר"³�Q©H]NY:„J? ¢ËI~£rÑ„Î,ú¦×ø<›«0f QI—r:At9‰é¦Ò\é©PRÅš5å–¯¦T¨ÛX^��m4IòÚŒ¸1&÷C+öܹ¯UlpcÂËÉQ‰UüvrAHí*W(—¡× +mSnGUñR¥¼Ûìú C3Ëø4þÿJ®H™yÆš +¤øDŸzU+á±YÄóFjå¾°I- )Ô´Msé +fÛöÒQ é™tKêÒb3iÓd�<¤l“T!�¹XÔ1SXnŸÂ•­Pe#P]»å·™¸ÚéÊPØse^7pw¥Ü*ö…;ßZq(=®ùx¦bo)·Á|^Ɖ�z1C?æJªØ¨2ÛÕÊa5 ¤PÅ•FßFq­…�øÈÙü±2iƽœþ~§9c�Iøà­æÓ[/KŸÿƒ4¿Ãï?NtþC>Þæ:�UØÂn�‰Û™ŒÏ¦�;Å|Vm–aÓ 5´_Å:Ö´.£¡ÌãÆ4|M5»ªÄžSê ºh[¡«m؈M�®Ñ¶iwCxéZ±82ÏöM�°¯—6ߪ±|0R¶ +ííà2V�­Sò¹)Wœ´NéÐ’i2â¢-—M…©Z63“ÙVRšží§¶+,×Õ\4n_Úª£:ͶEgÙxM¸À¶½h &ÝVšföF?<¼žî÷ÉdŸGK µé[+-7ÆÒBx²ÔŽ—~~Yæ;ž„”om¡R–mÆž-NNÕµ ÙE‹ÑFk¶)�k+¥,›Uš'ŠB�©,+%†l“Ÿ²åfï8Š­ŠOQ¥o[Úµ½Rѵ½âi¹Ü<ãoÉȵpõîTMY|É(È|›»H©¦´Y¶¬›æuçÙöÜÜUC|õLUÍæ)â¿GÆŽxš˜”*ÿŒ‘ë�p˜¨Ikì9±»½‡Ó(6¡‘»óÜŽ•,#"9VÒÖ„îÈZ4ð¶bÂi[Ñõ6�¥'gKJ¼¥û@Uš[žý6×=Æ8Ç€P¹ ¼Tti> +endobj +642 0 obj +<< +/Filter /FlateDecode +/Length 5002 +>> +stream +xœå][‹%9r~?¿âÓµ‹©1ÌúÁß_(S—TF^ªº¦}ÀÝœª“’2 +}¡Tªô]áÿ?"é)Æ<Ý?ß~¹©)8…¹Äê"³ÿ„Opw­(LN'Ýýg&Ø0…äLð÷×~ —}ñ×ÛŸsû¯u}7SJÞhwÿÇWf‘�B A9�•ÀRÚ +,禌óËë ]LIbA ÈЖ ¥è$Ä c¢ÀŠÃRÐvËJÃM bèä‚ÀÒ +rh£”ȃ ŠÈ�§Ýä¡t/ñŒž|L&‰¼žFâY;ù@Úi‰—&k� ‹KJK<Yœ&R²��AâyÈb½U"²˜¬Ä �Å@;IàEÈëŠ"²(¯´ÄKvr)‰¼žŠ!nyF¹ÉEk•ÄÓzr°M+ò0£0H><Y¼rIäAg•‘x²þK<à„³!Fa¶žÝVY-ñd1&�ȃ,| Œ‡,*x 0ƒ&Æ% L%C˜h'Š%01M‚•`À$7‘OA«4xFK@`dqä%$°²f®Èƒ,6‘„Ö@�°ÀZÈbÈJX`�¶k‘°ÀnI%-a�Þ’Ò^ À…˜J ĵѓ„� SJX`®vJX`º˜îA ԵΠ,`×RôXà®%­$, வ¨)ò X ãdu´p×j$, à.¦‘‘°£:Á½„°•ÉĨ$, உŠ$, à® p"/L˜ƒVÂî‡.Hž¸kœ2p×�ñÀP&à�£à. ÄÉádÀJXž± ±É ,‘°Àwu‚ûæ4ÐjÒ1y pWG ŸÈK“и0o¡åI{Ÿ$,pÀ]8*+a�î>£„Àø ÕHXà€»ÚÂSK<à®6IIXà€»ˆœ„0‡I#�°þmÒ +¦+òÒ¤RŒ8à.`ÉHX/<©$ya‚!i Æ“B*a�î½' 0ÁD à„(ØHXà#M)/a�O +<„|"ÏO¸v‚d‰<ÈB�$,@`=%›¢„Á@kŒ„Á@„  "˜’Fô-¦�æ"æY)JX$›b"’° 8�| Z•xÞL1®E^O B  ®XKX€\jŠ˜ôà'—$,€ài’° $È‚©"a\Ñ "s‰§! ‚l é‚§µ„Ñ@DƒD‘ez%a<4rI¨Zâ‘â<3JXÉO*JX€i‚LH)ò `BÂŒ'ÛNÂ$?H6‘æˆ<ÈbIX£át3JX#d1ÊHXÛä|3HX�dAÄ'aAR~â0YÂÀ8xJIX�tD¾iHÂÌKÎ7£„É*ä›Hñ„y›¬ç|3HX�²8„("² hJ¼&!ß:I<YL" ’÷œoF f ßDD/. DÎ7ƒ¸\Üu È$ñ€»ˆL½„¸@¾‰ÈVÊí€×Äg23rÆÅèuð­â’�öÂ[qÍ@|9G &2ËèÅU¸U0µ— ðñm0a^}ê—¨<Ì!ÀgÆÀ�L˜„è¾æ­˜Ý)6¯�ýão·ß~†ó½ÿí¿o/¿É+eå¿F€�Kâ+L“0ÜÑ·F÷­ç¤5‹ÉÞT˜oRK—e6 �ÿÝ·_V²BTµ‘ yÎþ9TË��=¹uÊa¿c"u¾½Ò©ÐQAº×/Z–¶×R»qS“(íÛ+}”´¶Þ8qÑ|_è.)ä ˜¦q—�T'ë«| 1(¤šˆ]<ÊØdë1�¥+Zþý§¦ý"ż¢\/;ñ}hÀ¸q÷O?ß~ûÇ?ÿøã§‡ž>½ÜþòOpjþ8ÿ»4®)ο�[~ÃiÐcá er=üpf¡�o—vÌÐnèÊ,4¢…"}ní–1„¶Ã§Ð>(¯Óü[Ù®_E¦—¥mßî;öG’�úþ¿¬Ëg¹LW?¬õ¤Íïþzÿô‡Û?ZTŽÙgƒâq£ï¡ ^«ò-6øk˜^JG¦G_µ-ê#·3ZPq†Ó´ïÕ”_ïì^y¨‹ù-&[†ýpj 4­‡6 +_Í¿¯šf�6n�%ur +Ó­ô³Þ÷ñë™1?û¨FɆC‰ã�C;¾XçÙ ùçÿ;KÞ³¦7XxèÕè¹�R¾ÒG=ôõG�}™­–ºÙ0΢"—²;Ök¤òÃ8xj½×ê<�õÒ!oF«XV¬§w‹/ëÑcwÝãÖ£¾4œYaX±6³Óæ[-þLvóý\fýÔÍÔκÅpz¯+í‚ÏËVz­ÎÓYéq ºkqj°¸/�…l(˜0XR±Öl™4•+ýΠxsßÑJb³–•µý*Þû£ýÓŽ¥v!ª¢ÉhŠDg–z­ÎÓYêq\û­Þû{[]ù^gÖh…úƒ¢�®½*«[ëHìOX·9F3U_�¡¿zWM‡^ÌÁ.Öy6k5DZk¹—µ•äüÑYŒoxc‹¤ad¬£�ÑjÍKgÑ] Z-÷ÑÕ,D½¬ëo¬c±ëÔîÂB™YÜ–õo›qæ³-˺~ö‘P\÷³Êïw,ؾ}áb�§³àãøuįq9iµ”ä;K*špä]£:ü,u³¼5Æ€^õV¸±(Ýaa'+-› iï^Ë 0€­¶ÓkÅñ/]™ÁŸ¨—KvïÀâkužÎ’�c\+䳞zdœñÄÂÒÖ€¥–º2fèu÷ÐÃý‡U”! ÷ðüh6æ{ÚmÝÒÈ6ýŽ5Þ‹užÎ¦OVyÌ>=ë5t¶ÞÇQOƺÆ#nn“‘]BÊñþGã¼ñÿãmFðñ<‡GOà†¨øÈ�ñŒdÓµÌOëx(Ûê /Ñ£ôýí×¶X—4ooÔÐó‰ý^¬ólökOÖvû]éyÄé.vÍ‘DTëõÕÞVúØt°©+±íûVšÔîZ +u¶[çÀ¸¾²´“×_Űêåëƒy „êF¢^v�°-¿4 ­61�ÄüË�¿ÿ×ëÖ)y…†sºú¬eyüfM˜ªáa¶VkgíÎe£Ï—Ò³ùZÙ™_ꓟëäÕêRç±êi…Ìw/Íe),mº.f³Ë=;yòµÔÎr�ÛZää:ôÂrÍš¾¤ÚØ«ö/¥wCO¨Hýy«5Z4¤x%·÷×]äëÔ %×)RúE<ßËÅ{®}²ü^Ê"—]îçX¾ÒS´£Ú¶ã-oÚâ¶í”QÉòø¬ý#9ø]YÕú²…l ó|dãD¼"ã“Ðv¶Ö4×çþå>r[Ÿ{ëlÖa¾.ºp�5éå{húÊ––výùgܑ寨Û8Ïö±ÐVv1Zî¡^ãØw³È²?»f¾Ù¹¾g¹~™åÐKÌ£õ§êðÑéf¨Çø\ú:Ç·ËǯgfÑo.çæßµî×YÇå¹¾[¾/픾ÖñrK¹/�îíÓ©Q�£�ÐE½®ÑJF*­eáw�ÓFÕ1¥Å>˽²¾ë{'�4_¿ð¬sBû«gxùµ,#©»ã�Ãó."öâÆ[̽`�RÞ^ç]�Þž¸5r×K£m•w¥�mxâ›äï0G2×Í�Ëž™8¦£Ö‹™‘“{Þ‹æ-J@E>L:Xd5g®®Õù>C´Aº*/·ƒ!RŒ ´<û³Óþùç˜eêáÉŽž‡'ÏöqM©d{Ã�ÜS´èàY\ô”¾º‹7zBð–Rº¾yäb��Ø3ø±)Œy²¨÷ Ä.)ñµI7gW2¤£±” C]j ¶3¦’Cº0»ÎuH?»Èb`]�á±j_·/§ìÚˆÇ>Œ²‹)ºU›MQë`{g™Àmû°Z&èë~\M?„ä'26¿¤Û#NôÏt.Öù¿Æ±&/o¢'k”?΄%³ÖŸw͈†ò¥~¿2(@à7æ½Mê9²üjȱú¯ÔxåG7%6e³ƒ;vÉ/rÁˆ#¿Ã2åNž=u¿VåiøuPÜ6…Cðܬ5‡\FzÙÏð“¬Ø€þ"l ¼ ¿TPölÂ_¬ó<ªµžßfçS(ŽT[>ãRz]j*í�:ß’'+›ÂD�(øÓðä¸èG…'!˜)Ø ƒ¾ž\¬ó|á ¿h˜œ÷јÁ’±í6ç8fWiÕº¹¼–‚¾Â­ä§ªÖœµ $äN -éŸT]=éÝöæ Szì!Ãa¸r°ã*óÇÔbâžñ–ö7aŒº ×wÚý»…�=§üN£åWÇm8}.p±ÎÓ bÔŒâ�2îdÜò°mÊû‡PÃC‚~£]Uóý¼ —üþˆÁWoxW'¦ ôA9U>~�äZ�ç>0%H^E,Oy¥�Wkíòd†Ñ†WqêN%Ó•íèŒ#\Ö|îÊÚòôƨIJ['m½ÄÎèé–ÌÿèE©ïº³[}ØìPÜ{a)NÎÌ'\�õë<�Áyxo+’<ë�ò×ǵ¶n–|t3^­‡@¹�!ùL¶äÌi„t\ô£"¤˜0¨NyŠwâW“#Ÿ(t&Ùµ:Ï!arO^øÈ²£Ì˜–Õ9û•?gq k`Ý|¿â}%JjÓYíD˜‘|FË{îm¦JR Se[{~Ž|Ö‚Q“æcKâ»îoòa˜“RmwVÛòÑm¸Rm~zöõûúæ_ÈQ^‘•-嬿ù¥ê¤ƒl)6/MãsÖ +?@:qÌ¿^5ÇǹèÄQ“âÝn'Á +EøL +‹k>—ájf~±ÎÓx£”W0ÑÉ›RæŒüzJ¶n®÷gýºnöU×agÓæ¹Dìlk» «é6Ÿž¡l¼;ÃÏ ´ógVq©ÊóïwHι�çLo5ŠUs« §öÒ�ÄçYDüîŸ6˜OÝ9Vø¥*Ï£p>ÍEC;[ÃÊ"ÁÎëÑ +NNidž…l'e¿A!ZNB m8à.Ÿ`…D¥¬Rå9-r"FÙíµ=~㮇�õßžý£I>³(M)ð©AÒ0v®Ùñ–%ßÔm +[B/S¶Y,Ͼ3®±ƒ+®¾ªºm®nQX¶ñx2ÝÔ-CªmEòj³•&ßoÙÓ?3_µïTÛZÓ=«¯[DÒr~EîCE¶2l¿Ü|>íJç•�“6|$òÝßñ8¤;Ÿ°•%]†IgÅêûNÍ|�ô/µÿIñq“|ÔXÆþb)ÿKàŸoŒá¬ÿ¼¿,Ÿ«29šrÑȯ7>˜2QÛ¤vBfâòUÕ¶H×�…öÀ„ +SKZ7©åkÛgÛN WzÃõ]©Æç3‘*…l>¡h¾±@DM¯·dî=Ïê™Ìg)ÇÉ.W¾Šâ|‘ÄÖ õe[ƒ­â)™96¢ÛUw»F6TäÑ|ö^U�oÄ*z¯:Ý )kB7œGÄÇ�㳑ú*Rù×ÒTÑ.Ò‰B³�P©R])Y„ê8 ¤ÇM þ JÓðºò»Qãsðfb,†Dµ\*åÒã&–[Zsu¤B-[ÕT4ßDi¦ncU¼@{t›GßÍeË×5™÷6Ö±FßìÆlˆ�RÚ�_o.¥]à +åŠéõDÛµ[ÉQ5{iÔ‹ª05 �OãŸ3T¸JeäÉ_à€K5> °]µ›ðܬ䵒zº¯¨C’4…V¶S’âj³½¾tTByÝZºjlEíTÖÑC*â1HUðX“uµºJf+ú©XÙU·kdWMùuEnrº:U�ª7óº3wWÛmd_±óµ'‡:âš�u¬òÖv;›/ÄGvl4’Ùôc¹I#ó +H1Ÿz³ŽØ(4rƒÑ×L.³µ¢S~³|ùÚ&™äq·¿ß²›3ÖqЈ ^ó)Å}”¥ïÿƒ2Àç?otÿc9oöãFU´0[WäÞ“ñ™öñ"™Ï¸/Ä:m:¢¡öYÇVÖk¨~ܘ¯©UW ØKI]TWnOtM‡ÙTÓåÍ—M3î€ø´X™o›æ°çK[:ÇËW| b‘ +}wpÏ6—|ïšÄm.\2]E\ô�â²»aj’­ÄdƒìoRUÏòS?–ïÕ]ta_ÚÆ£æfû¦ -÷¢+‚Øö}äû›¦•<‚Ðïž^ß<î‹È¾Ì¦Vh¯ÔמZ;ÆÔ +x2ÕæK¿¾¬>ÇæÕÑ2y›†j[¶›{¶9mj´Ð‚V½�vÔØª-\S*´ÕM‹£¨pš*´Úb(2ù¥ZQKîqµjLѨï5íúQ©Jtý¨øMYn·x¼-Ù¹ÞœCë�j%k,šïkW*µ’¶Ð¶÷¦õ½‹·½wÝ &ˆo‘©jÕܦä»ðï=sg®3¬:H¥V+!:¶ƒdá¨IklþÛ@*z !>Þ=Pì–FÞ\çx­d»"RÖJú;a8&²VÍåIáŒtÎèš*J®–”Ø¥·)@X +j0§6+AùÏ|äW=ó‚P½ œ*ò_õ±ôFþcAiùÝ@~!®–OòÿÿÇ+²m +endstream +endobj +643 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 642 0 R +/Resources 4 0 R +/Annots [ 644 0 R 645 0 R 646 0 R 647 0 R 648 0 R 649 0 R 650 0 R 651 0 R 652 0 R 653 0 R 654 0 R 655 0 R 656 0 R 657 0 R 658 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +644 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 416.373057 101.433071 397.623057 ] +/BS << +/W 0 +>> +/Dest (cb116-1) +>> +endobj +645 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 397.426036 99.933071 378.676036 ] +/BS << +/W 0 +>> +/Dest (cb116-2) +>> +endobj +646 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 378.479014 99.933071 359.729014 ] +/BS << +/W 0 +>> +/Dest (cb116-3) +>> +endobj +647 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 340.584971 99.933071 321.834971 ] +/BS << +/W 0 +>> +/Dest (cb116-4) +>> +endobj +648 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 321.637950 99.933071 302.887950 ] +/BS << +/W 0 +>> +/Dest (cb116-5) +>> +endobj +649 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 302.690928 99.933071 283.940928 ] +/BS << +/W 0 +>> +/Dest (cb116-6) +>> +endobj +650 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 283.743907 99.933071 264.993907 ] +/BS << +/W 0 +>> +/Dest (cb116-7) +>> +endobj +651 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 264.796885 99.933071 246.046885 ] +/BS << +/W 0 +>> +/Dest (cb116-8) +>> +endobj +652 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 226.902842 99.933071 208.152842 ] +/BS << +/W 0 +>> +/Dest (cb116-9) +>> +endobj +653 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 189.008799 99.933071 170.258799 ] +/BS << +/W 0 +>> +/Dest (cb116-10) +>> +endobj +654 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 170.061778 99.933071 151.311778 ] +/BS << +/W 0 +>> +/Dest (cb116-11) +>> +endobj +655 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 151.114756 99.933071 132.364756 ] +/BS << +/W 0 +>> +/Dest (cb116-12) +>> +endobj +656 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 132.167735 99.933071 113.417735 ] +/BS << +/W 0 +>> +/Dest (cb116-13) +>> +endobj +657 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 113.220714 99.933071 94.470714 ] +/BS << +/W 0 +>> +/Dest (cb116-14) +>> +endobj +658 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 94.273692 99.933071 75.523692 ] +/BS << +/W 0 +>> +/Dest (cb116-15) +>> +endobj +659 0 obj +<< +/Filter /FlateDecode +/Length 4421 +>> +stream +xœÍ\K�$I ¾×¯¨3ÒaÇKB+íJ€â€4¡‡žbšêEZ8ð÷ù™ñÈ*WeNOô´º§ÒއÃa¶#3Ë�-~¾qø“Ù™œKŠ|¾ütúùdM +ÿj‹ÍEeÿ¿)œ�åd‚+1‡óOB dR >ÅóË ®.çæ/§?ÿâôÏmwö¦”è]8ÿë“°˜LÊ)Ù ° +XÖ‘Â +Á¤äCTXÑ,±�1BbÏ·¬1¸ä ± {ŸV†ÄÉÑ-«@ Ÿk,ˆáJH +ËYÈá¼µ*‚Xfò +Ï¡ô¨ñ¼31_T^Ï%¯ñˆLLì‚ÓxÅÄCÖx YB±NãȳÕx�…)'�! E²*²øœHã%Èâ¡�¢ð2d�ue•Yl´Nã2¡df•WÀ³9å[ž·Á„Ld5žs&À6IåÁ£°I1)<Y¢ EåA–@Ök<‚,Œ�œ”rV¼Õ‹w“%§ñdñ>±Êƒ,Ø| |„,6E àAFpIß’áâYŸÉp次€ÏÅpJ¤Á€/Áp,Iò<ï4 YG ÈA†çª<ÈB…5, YÐ@Ã"Èâ™4,  -ÃZ4, À-Ûâ4, à-[5, .Ä´—rd � S*0—€�@îž4,  .…è5, À.qŽp—ØY ¸K„ž*²À€5,:r™4,`à.9›4,`à.ÜÈkX€]5°Ã¨alÅøœ­† ÜõÙ²† Üõ !@å%$ ¸ë– Enà®ÖkXÀÀ]Ï>jXC1À«fÀ]@HÐÓÈ€Õ°ñ ´2.—¨aAíSyŸ�+~ -cѰ w¨HÂÜ|f €ñÕkX€»Ž©5p×ùb5,À]ä A؃qH4,@|3ÎÂtU^1¶ä¬aAî–¼†ˆÂÆf ‰ÊK†ä4,‹kX ²`¯aAÌlJJQÂX,xHùT^4¸$ Bd©<ȉ5,@bm +•¬aAò�…¼×° yÈ‚”AÃd¦8dßjyY`.j}À�™¢†@2“ ³†)DÔcЪƋÞä¸Vy<—4,H‰ B±Ó°µ”Épz ðFÒ% xŽ5,H²ÀU4,@(2Ù#3×x² ÉÖ°™.xÎiX�=dA6¨aAöUf´ B£–„ª5[©3³†™£‘TQø *M ¥Êƒ,€ °?Rl Pü ØD™£ò Ö° g/åfÖ° gÈâ­×°¶)õfÒ° XÈ‚ŒOÂb£‘4YÃÀ8xÖjXP\F½éYÃø¥Ô›YÂBõ&J<Åo E©7“†…!K@Š¢ò ’¦¢ø-0 õ&ÐIãEÈâ kXPb”z3kX€4õ&2zõH K½™Ôãàn(@&�ÜEf5,ÀêMd¶Zmo¼!!?Ó™Y*άžX@o@lU� ,°Ñ*©gà+5’zh1QY樞 ¬‚é¬zl`�¿ÈÇø–Ó§ùˆ*ÂbfN²È·`d÷½æÍèN³å|ì_?ýò Á÷ü÷ŸžQOÊÚ�ƒñG)¬ƒ¸ˆ/ØnÀ•©Ã1 +a–Gü¡*!|M"•!¤,®‡n"$B1ú”sÿà¶"Cb‘Ù!™©+ãy^T +[EQ—õ³û¼‘¬CG¨ QWÁºYI(êĪ^öys½ÎóNJRdýì>o.+‹e/ùÁf^UȽƻґü;ß~Ø3TŽ ¹×øm…Ö–!Ê:ïQ =ØçÍw}ž÷¨…ìóV²R›Óz +(ÛΆÈsí¸’õM¢~f—·�IÑŠŠ—¬ ¡õ®åMãï?œ@×é—{3ýr’yG1:¹E>Êý>ü^ð ;'ÁYùìGöSÛ‰¬mýÓԦў—y¢Ý‘8Ào�:_»á¡õÊ‘»w9Y­·û´×;&S#¢æ³»;…ŠÞDØk½C³º�“å9=a»äLºž“’5,GÉnb�õy?‹mö@«Ç¡b�Bí’›a˜ÜœãØ€ÝîC�õ&[bQÆÜ‡¹ $o{‡a¨ò”îe'.¢È‘Š=Ç"ç9Ya[Æ¡.ïÇ0’<�Àöok›agçœ6ÝM{²Ÿ›åV½œJדàÇŠ?ÔåÝ(Þˉ3¦-éM’žíp­nªŠV,.“�d¦‡|¬ËûQ°�µœ)ºeoRïµ¾ª6ª«Kîw&F"�ùvÔô°é¨g;K¬•žKN…QñÊR÷$;Öçýx„úb̤oåëbÎWÛ >7ÙWz‡Õÿx•èy5²x,îøœä6ˆ‹R<è�‡º¼ï”̲+”òÃ-½-úÍ ™/®Åó| Îr‹»”Èu†¿üæ»ïûû1ƒgId}]Éšë¬Â‹K›ÐÚø'Üßôm#¹[ëY!I4‚Žw�ò`Ÿÿ÷Æ….o&c³©çÖâDžë�ýñÆG?m‹›‘¤�6=[»L¥fKì/ +|·Ï¯-Kgy¢2þÜÿi¬µ{õÇÌ`y +¢d)¶jì‡}|%U¼ÒZ˜®�»£>rÙÇPtWXM>Ðdöiý¼º…©rV—àçºËzǤü ¦’óÕ¤Õ6î¸ si.àå9B¢ú|ÉC·9ØçKîz| ïÁ~<òût Vy²ÛƒáÕ6*­Ù Oý®b�´ WÉOÍ6Íýíq«“gX]·¨´‚lhIØdu5†®Ö–«·‡Ú¿„Œ¤f;á#‹ƒ¥7ëq>À:R¡‹;Øç½Y\àð¯í+�§jöÊ’4‹Qm¥o'™ûål9ò¤‡õ)%Õr öâw�³~.¹<¬Ù�CŸÍzBÇûÅÒ–5Tì^½e¤úÚVÒ9¨“C¶j¡qð«—ñ¹Žá·rTK^ûJ“jÝŸ¶Nz½y;žÄ¢yþêEA™oõØ#j�nVûë‘cõ²D‡:K“àiÕ"¯‘£iê²D�ª­¸&N´ÕdsZ­ýزi5m%vìJÇ†Ë Ìëà,·Â'У×À‡yœHòÄš¼q;NÝ�§Už0ŽïÈ‘ùžv¬¥ê«­OI2g¬sò¦ûX”±[òz�Ð.V|ß‚E'w­—yWýMYB•½Œ=×ÖQÑ¥µyrÔ ±%×q½þ´îO˜drS»u�¤÷d¯uÓmÈM27{HmÌÛù]ëGëšîèJ(´}´Ë:-mup½]¦)ÛêzwCï­}—?]íÛ�}nk¨¶.r<=Ô™¿ÑY›3LëÊ[Yݺ6ùO~+ïyÕ§6²øÿÔÏ>”…odi~{ÙÚ�`X½eò,Hº_|@pÇ ýãêWti+~ tzZo¹¬ík[^oÓ¬cÖˆ#r7þÓz;Æ®cÄu®ÖNlGúù¸|õ6ЛÉõP¿ñZ¿oµ†ÏÒñ4Ÿ¿ž›Ö~´Üòªs_ÖõÆ…/ò}uýNzø ýÞ`ó�~ã²g.}…5ü�õúE~õ*ýæ|¿¯ß‡ã°½G;ºWCäåΩ¯õµÜóAU°w6|°Ï»9ìÉYÑç‹^y0FUž½Þ!š°gZï×>Rß°ç鎆ÚqZ/¿®æX™íñØõÂõQØ’àli»«gª/»Èƒÿ¯Ð¼¼ò ÕŤ¯s¯·ìòòo§yÎ^–ݷͰc�ç€üq}~>ÌÕ÷ž¢�Ç僧Ûd$ZÉ}ûŒéÙ]ݲٞà`Hùâ Êçú(L’wMÔSøâûZë‰ze¾*Ä·<Þ­¹àÇ)ï K¾Ý”¸T³#gGºo9rËw×Ï=u#–øÑòÄ9wîã·\v’g“w—5&Õ5|{½m?Ÿb}GÊÕ÷dmÌÆyù" TŠFÂ\*gy/+[b×¶ÉUźó�žõëG~î­ä/HV^R–Ôê6ÎkûŸëÿ„²žMl…|ýö[ɰÚpM~9É·G°BF¾í’…¸~´},výp¡Ñ.{É”ë–-vý8N $ÞØ;Ûj¤hÝä�Äj߮Ŀ—‰"zFwK–Õ[ãV²|G6´^Å.Š`w'Žyn;wÉò”Ð †[¢�¦dy°©µõýcé{b}V�›¶¿µõiÚÎGÄË ÓÒ5õE¥ÊÙ{ªi×ÛN£I¨Ò©¡µìÂ}ŸÒ夿±mhÆfvþ´kòöäBÌÍ�¸·+­�BºœÔvëh¡ïTê­òèZšæ‡(ÃÔ)wÅ+´ËtJ—ä+…&±Ô>nÉr(Ô÷ÚæÉnü ñr +Ü=q�_N!)­ÃÀ +šéÍDšÆíäl‡½ ª<…¼|‚k6š¼{&¨�*ÈS?8î&%ï�Ž«1‰øf'o•4ÓcGÖ4à8�¶“º\JÝfg}¡dQÚ èöÖ]cꤲ‰žJO@ªƒÇ–ìºÕu²@XÓOÇÊ™h›˜n�C7å— yȺ«Û'‹n2÷ÐÇ䨱óe&§¾ãN^îòöq'›oÄK l|MÓÏm’A–‡›ùôÉ&â  0ÈF_*¹ykG'ù‚£öq8™q/§O5Ìy +^ +³ˆ8mß�rçÿ Íïðû�ŸÿÐ^¦\⸷-|ÇÖ yŽdòMHù Y¾©»ÛLDÏì²Ë£mhÖÐã¸÷^óèn°·–®#¨ëÜ™†'²ï¦ëMš ˆ—+-öDæK÷fìå’Úâ¤Ð”×p›T¸˜—ƒË> +endobj +661 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 799.173057 99.933071 780.423057 ] +/BS << +/W 0 +>> +/Dest (cb116-16) +>> +endobj +662 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 780.226036 99.933071 761.476036 ] +/BS << +/W 0 +>> +/Dest (cb116-17) +>> +endobj +663 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 761.279014 99.933071 742.529014 ] +/BS << +/W 0 +>> +/Dest (cb116-18) +>> +endobj +664 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 742.331993 99.933071 723.581993 ] +/BS << +/W 0 +>> +/Dest (cb116-19) +>> +endobj +665 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 723.384971 99.933071 704.634971 ] +/BS << +/W 0 +>> +/Dest (cb116-20) +>> +endobj +666 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 704.437950 99.933071 685.687950 ] +/BS << +/W 0 +>> +/Dest (cb116-21) +>> +endobj +667 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 685.490928 99.933071 666.740928 ] +/BS << +/W 0 +>> +/Dest (cb116-22) +>> +endobj +668 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 666.543907 99.933071 647.793907 ] +/BS << +/W 0 +>> +/Dest (cb116-23) +>> +endobj +669 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 647.596885 99.933071 628.846885 ] +/BS << +/W 0 +>> +/Dest (cb116-24) +>> +endobj +670 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 628.649864 99.933071 609.899864 ] +/BS << +/W 0 +>> +/Dest (cb116-25) +>> +endobj +671 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 567.702842 101.433071 548.952842 ] +/BS << +/W 0 +>> +/Dest (cb117-1) +>> +endobj +672 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 194.455821 101.433071 175.705821 ] +/BS << +/W 0 +>> +/Dest (cb120-1) +>> +endobj +673 0 obj +<< +/Filter /FlateDecode +/Length 4933 +>> +stream +xœí][«$I~ï_ÑÏ–y¿À"¬ ‚âƒ0²ˆø0§gŽ"g„Ñÿ¾_då%ª*ººú̸ÓâÙ³=Ý‘—ÈÈ/¿ŒÌºé³Âßwÿ$§§”r î|ùtú|RSô +ÿ•‹ƒ¢þ>ÑŸµrqò:‡äÏŸH`ã³71œ_NøguÈ“¿œ~üÙéË<úl¦œƒÑþüÏ�¤rvŠ)FåU†Ji+¨¼Ÿb4>ª '41gI3|tÆmUf¸œ¼¤‚Θ$¨̰.j»Ue˜a¢v’ +fèì£ Ò +vh£”¨ƒ!Ê9k�öS€Óƒ¤3z +)›,ê"t:Igí¢Ó^Kº<…|’t¶ø¬´¤ó°Åk甤ƒ-Φ(él±Á*Q[LŠVÒEØbà�,èlº’¨ƒ-*(-é²�|NΉº �J1muFùÉ'k•¤ÓzòÀ¦uQè¤��-Aù,ê`‹·ÊH: [þ$xÂÛ˜’0Z �n«¬–t¶�¨ƒ-è|‰L€-*‰0‚&â%‰LŒ“ËÆI$`’�\rIb“òäb´ ˜ì'r”xÀ* �ÑX[¼ X [F®¨ƒ-6;‰ ¬�-H q�µ°Å8+q�Û: Eâ ºu*k‰ ,øÖ)$.° \˜©$.°`\›‚“¸À‚r¥,q�çZp§Ä¤‹á%.°`]냑¸À‚v­KAâ ÞµN+‰ x×Zäu°–¸ì8Y�¬Ä¼kµŠ8ð.†‘‘¸½:‡Aâ`e2))‰ x×$å$.pà]1ˆº8a Z‰ x×x4Aš¹Á»Æ+#q�ïg‚ÄÊþQb4Þ…x9€- X‰ 0ßCg¬Ä(l2K$.ðà]�1ý cl5锃ļ«ºOÔåIGx\·ðò¤CÈxð.&*+q�ï‚>“Äàø 3ª‘¸ÀƒwµÅL-éÀ»Úd%q�ï"nð“F qæ·I+@WÔåIå”$.ðà]Ð’‘¸³ð¤˜DÔÅ @Ò€Œ'…8Tâ‚ÞÅôž%.à]å­•¸ €w•CØ#ê`‹MFâÄ5ÐaØ +cÁê¤ ˜BÒ�w•FK:ð®R1K\À»4mJ\" L’¸Nˆ‚�Ä!¹)Ç$.YA‡�OÔ… Ç^₨ ð ,Q[\t °ž²ÍIâ‚h`‹5Fâ‚h` B‰ LY#ú—°p×¶ R”¸L6¥ìœÄѬÇàUIÌ”"èZÔ%èt”¸ F7a*Ö`-5% z‰ @ð…KÀ è´“¸ fØ‚¡"q¦¢)Dæ’NÃÙ Ò…Nk‰ ’�-ˆ%.H&a•”Ę¡±–„«%�S´ÎL$& +%.À0ÁJL)ê` hBâô-¶½ÄXü`±‰eލƒ-Ö;‰ R2´ÜL¤[Œ2›´ÞŒd[ñI\�U˜(L–¸4�Rd�°Þ4NâŒKZo&‰ ²UXob‰'ŒÛl­7£ÄÙÁ�EÔÁMY·à$¬7ÁN’.À“�Ä9Zo&‰ f`½‰ˆ^ÜH´ÞŒâvx×g0“¤ï"2 àëMD¶ÒÚ^�x}D|&+­8“¸c @½s«¸e À½˜­¢¸g @¾´F7 `&V–)ˆ»˜V¡ÔJÜ6Pà_Äcnà óîߢ +€CÄœ™"52cX8D÷}Í1’Ù+Éæý±þõôó÷˜|Ïý×éùge§¬ý6< RÐ4zÛdôö§‚å!âÚÀÄ/'D¦+±M·´ ×°–]‹"¼œ˜QØAb_–r¬êR‘³ê4bÍššÙƤÖ&~9a±€éJì}O;ªãÂ0ÊâÑ’&�U ïHþ½œ~DGæe o‚T"¦5ÊŠpØÓª`9¨+c]­1¹Ô­K¤ êeW£§©¯y±N–ªanäÍeNçâ‚XÖÄ(C(ò‚"ÜRL«ç–¿6„†x !.GðÓÀÒ«Ó4m +R2„ƒPBêµØ‡�–^rB]:=ªÞ‘ü{y¸ßdàR¤Nÿ�·?’åÞmø$È«ƒŒû�ûþmð½ ¾ÿ³Áè¿xÞþ¸cð1ƒy‹™#–È~|oƒïmðÝ9øÄAv_Èye@¾ ¼·�÷6ðî 9±(œ¬ t¢Ü&Ôægs£šÊ¢Ñ�MžL0´¡\W•¯É³¿¥­uã]>÷òºT[=•� +·¨×k¬{•±A´õî<_ÝVÇhmiuQ¯hä­Ä7­;Ô÷[#çÊÖõ: g¯’5I4öh¦¯hôvƒê—ïNèÑr¾³›œKåü]ViþüîÓéçúõ¿üÍïÐ[ïžOþ^)ð¤‚ÁJÓ†ºUÊàÛ| ”•÷ó±{®Ÿ4Ë(-þWð@IKßî}Óÿâ/çw¿=i`Jõ«Í¾‡lähŒmxÎØDæ­-*ß®Z–~ñ�þžj«ß¡~7¹Ÿk§´d¹{šåÅÂ(ÈkZTQ>EW[G t—QW+ƒô€æœžÊ3U_eÅ�•÷´´­ÙÜå-?y6Þáµ¼öZ±ÐÏt�¨ZkóXõBiYµ¤x% �ô4n™¦ÛúñÃòvLer/p<¡×³'²|jëUu©µé�·c +“ºµÙv¯R³©<ýa[N°t2†.øÙ–£j»æ6—vïÙÍ5;ÔhË—1¦Û诠ÈW({Fþ(s‰äáë¯3n‡/JÞVW¨þI3ºKÛrýr; fZšg6ÚÌÀY)f××yí÷±öµ6—v¤�%æzèÏ2ÒwüI æÔœWÙ¥ŸÖ}ÙË œ•öüdõÚOÅîÚ‡­Ün#ëW>æ×vì3ã+î1"gÃzÜüÊì ·Yæ kü³ë+»ñÕ»ž¦K½u¬”ôO£Ë8©øÐ¾�É}e&µ»¾iå‹™¯—|Ó8ëWïJÜc{$‰(Ãæ÷Ð…YÞhG'DQ¤+‹•îÍóªè³†F“¡Ë4Ð^Tdè´¶B–“rëxI»Vëìš~¨­ï�¨Jtõ°±søôûøáÝYøD.÷uú¼´¥Ò�e�ÊÜ W+ÌaR™.pZUئ€�:�UëÖk%,º|ÀAJôÏ·r»T® A´çVn¬—3¡JÊ]”æ±Ø›2åB{烽â!÷qºU3©/î™Ü[ˆ¶ÉVßi™n&þŽòÚïyXæ¹é9àtB ¼K¯é5º’1b”ˆ}~»nƒ¸«~±Ï_Ùk>`‘„µ‡Z$ŽkŸkîÖòé‹»"Ÿ9º—DÛ¤£¸Ø1•¬y0³@íµ r´ÑÕ×™®s\UZXá +aÒ岕ülÈtå%I÷ ó`ž/Y[þWx3å=ÞTïù´(�°>º.ÛѵÎã"•v5’™nžFYÚVΓ€½ÀtkV¨ù¨ó’j™g£—íÙ”›F»ŠÇqïá¼c8ÎæArÇy®ÁêsÅù6h2ÖM9{Ú:XV¸‡qò¯xõ(K©\¸‹ñƒy ã´Õ·ƒñõŒÒ¿ãÀH Ñ|ý¦ð.ÏQ—ºEšõ»âÑÔðY·Ï‡úíêo7¶|þ—fÎ Ú’îȱԻ.Ókûh;–çAÐ6ÌÎ~7UËžjÞ÷+ֹƶ‹¼—%˵4cQA Ûš/Väµc»úmjž†Üfç ÔIˆ›7JŠ=†µ%.ó΋ûýz:zµPÎÊw%ªKYósÛÈX#4¨Îm7¦vñBæy4„³Ë‡G{¼ôòûc(ynjhŸ·yV±Ë3ãú†|'ÛÒm «úã¶ÍóöÎr”ý$ZÆ{éØÌ|0ÏÃ!Ñírå-žkcÛ(IiéíEÏà,¿B�„ä5"¼宣‹ÜEm)¶¬Ð·ŽFíY�’žwoIËò7|ïñí$³xñè¬0ÏÃ!y?Æìk¨½5Oë%ŽÄu4pY¡I¯ÖGM¯V=}efN#½f§™$.Ü ÷IX}¿µÑWÚñÓDWК^Á»Çò<Z÷cÔŸ.{‹6úË[þîö^�‹d$G—?åˆè4ß@òÁ<�†äx#–}=>ã3®å§Ê£Ü -Ÿù¸ƒÖ5‚j^„Ñ“·2#¥[sª0?\µõÞÈH8G2æ¨+h±§£ûVÁ€ÆßBÛ±<‡¶ñê:îZy~�<ŽÀ¾Cô~g�Þ~»U¯±¸ÛÐê\!²¤g;¥ëý†¡lõ´Š`Öq-C¥_Åí‹Ùz�ø»ãÝ+(q£ yrÙiwkö>˜çáP¸k~+v¤¬zPÚ±ê({Ú"âj¿">;˜çázx?>[_R×½º7ÃÑÅÏu&ªã‘γьcH÷T/`t”Ç4TU½¥HûRË}bùÜÈÏëêÈâißÏu” �Z¹¡ÚRË)yRÝ—|¾¿4³ËöË(K*Ü�²ƒy ei?vú_èÝW£teÇú¸ØeY9t&ÎTÛ.ì\��íWÏWÐôн¼ƒyMû±Ñ×·w"“!ì.d†Í:~mÞ¹‘WPå_ÁQÇò<ªöc�×�טÿ‹È¼{Öq’CìqèÁƒyQû±Õã÷à7˜™o¬½2Û;:ºp0Ï£¡'ߨoºçÌÐ�•ôµ38åV¾öZ_«ä…²Viç8Ãò{s¾€ížJ¶÷[ÉKçCÛÎm·óÂv?/Kßñ=¬×ìçgGÑ3—épëìÓÁ<‡ÊûR´ŸÿMЗé6(Ô;èlûøv¥«{ù_> +¯ ÷1ÞÁ<‡ÞûY_r¥Ôj¿‰Ÿ‘_œÉagp®^=vöÄ®]=µsÞ´£vÍ¡}Àó¥ùûqó<BßΗ.øóΗ޺jw±ëÜbÚ+\‹´ƒ8•›ÊJæÖòçh¦GÃry(䘿({¬Á ‚àž }÷ò½‘gA¯«Íø5Í·ÛÖÓÐN`ð‡úLËèÏt÷�-Ï"Š="³ôf’pÜ>P³=|aóüÅå](’^fcÓÙu9Òó_Å{{B]¿Ö«Ú)6ê�¨³§i÷E�;ÛM“e6UóÍ”G7•{$ê ²å¦Ê<ËË ’A�›gëïq³½ê7Ôšr½ŸšoNe7âöò½7åV{7bçº^.mØtÛçS(Ï-ÖåÙõ*¤Iz¹Í9¸‰–ñ1ŸéYÉIY§[7éâX}¾’³¼èsOUߤèÅôÐèùBì ¦ÿ\:øÓIg7‘ÿËÓ +Ê=T'Ó†øåDotq‚عñȃbÖŸª—åt‚B“]À°ôè˜UJë'UŽÇ,Ð óOã[k(¿oÙèI»NµD¶�ÃøÚ�ìj{K©;ƒê®åB?|ÈĦC×hË<ãw„—•{ ó¥}3&ìùжÆÑSèÑøÍ*ðæà0 �Sò™‰#J:¦th�aqÀ Å!«0Ëf y%Ýõd¿ã]a©.vÀÂ:´CçÆ4Ë‹n²Ò +–!°å¼`§y¥ya�`ô«‡×÷{59´@ÒNí]úÂ¥½a$í„'Km9 ËÃ>çØòЃ6x‡‡zY–�=Ûƒœ14Fhá£LšF¶šÀóJ]“-*mE§ ÈT“õc³)ÔlÍ-¥ÅIôRì1Å�þ�{Úó^éNô¼WÂ&-•Ûf¼-Ùyç8Z§FÊK&Axî.u#¥m²mÝnYw›mϬnFdªF6¿Iù*þ{ÍØŸ’(¥je'D§ñJLÔNGklyË«J!€C½¨+:ö$Èûóìï•\#¯ Ý19kUÔô¾^Ù„(òm+ª½ËWΖ•ؤû l šÛ<ÓR—6–ý˲!Ô#-éý¬–‚ÞD¯•‹êÊ3.i»úýbû¤üý°t\d +endstream +endobj +674 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 673 0 R +/Resources 4 0 R +/Annots [ 675 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +675 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 548.554475 101.433071 529.804475 ] +/BS << +/W 0 +>> +/Dest (cb121-1) +>> +endobj +676 0 obj +<< +/Filter /FlateDecode +/Length 4764 +>> +stream +xœí][‹,¹‘~¯_Qφ‘u¿À20ï‚?Ž1fÙ‡îšÓ6K�aìÿýýB©[*£2³úÏ”aNÓ§+#t‰”>}’2Uê*ñó�ÂÑ*c +Þ^o?\~¼HœÄ¿œbu‘ÕÀopW%mN%Ýõ˜ Br:øëûÿM—cò÷ËŸ~uùÛ:�ºj‘’×Ê]ÿþ™TÖˆC�ŽQ%¨¤2ŒÊ9‚vžQy%p‹)q*˜á‚Õv« +0æè8̰ZGFa†±A™­*Á ”åT0C%•’°Ci)Y ‘ÖÍè”�î9�VÂǤ« Щ 9�1«œâtIxï]ät¶¸$§s°Å)k%§ƒ-ÖÄÀéœç«Û +÷� «C¸¹®—5ò(ñ×íüz(g[¯Ïk�ñÀ{6ÓW6Ú´úuu¨EО‚%Kàb �†ØƒY¾¢Á“yD‡iLÒäMA‘˜I»Jü›Ok±bY³o—ƒùˆï¥v×O?\~ýû?}÷ݧ?�ŸÞ.ÿó³–o¿Qøkãò×¹r}+׺\‡å¯Fé$¥BÄáü"Ã4E*¹üÖòj9-êeÚ·©d´/KÙ9�]§«õTWõÞ~'™:J¹sžzo+ûõVG6Z_¯¿ýßë§ß]~ûi –<ãYÀ­àc¼?À×¹,_‚¯¬RÚ…Umâ×RqêÎס™ß˜ÙfõwÕí©¤qkù �¡R�{º:vh4{kþ—òË@¤B`SvÜÞC-·Á2®ÛbuOsûÄ}¨ÑîNŽÆD s#G]´‹µ“yž l˜aï¢mj±ÖÚ#élZuèm¿þ;÷èˆ�3²íLF#²ªwÈí-- ¤¶C$"‡¶k—C¼•7»à�uÌm÷çÿüî7ÿõß½íò(S4÷*]G¦n÷±¶µµ‹#Û–´ˆå0¢ë=.×yœ�ÅRÆÚIPÛ,k½4)_.×-×͹”Ûl,õæüƒƒêYÛVëÎyÒRÕ?`*·ü©¦ŽcSSëJpœ¶ƒµC�ÙòÒRd•%«n¥6_ªñcùšö^1±ÅŒ§”oJ  BÅrrÏßoËñ†h£j[Nn�ÚÂ>ßýž´·ÊÛ!û½äž¬÷G½¡—ÁØF–^ZÄÔLÙ {™kduTißëÈíì–댦·b_ñ¦¶½*=þ²ÖgdêÒ'¦´‰)÷æË½U´zþ>¢n½þŒ~ÝQHy•Þmë8·‡ý\úÚu›ó}ÄŽ%ç—zÜxŸÕ抗ÐÓÍe.,w®=óHÞiObW± —¼Ò¬ÛiîËVžîÉíµ“‘s;e»KÖr›�C¿ÎŒ0ÚQÛ#�+²÷e+n¸¯±ýË}ólÇ1�œBàÊBñ÷MÏU¬î{á›õx©cnŽ!Œw›<£ 1§•¥…¨ÝâdžMŠ¿bðàš½!‰ˆÉ¦–lð�á?ÏzT>fp|K'Ü­0y!m,MV +ËC*vG'Í·û%jô¬ó¸L‰îí(·�yÖ{Öž£Ü΋äÐg\îì~ç Þ¶�Î8YçÍ�²Ÿ§°gªczéÞS›°ižT¼M¶ºaP牶—·šLy[8¸gãGz�v�F ÛçÇuk��øÿ+öšóJhÌä<�F\»Tzp·Ž9xeùÌÒ^œgy6\¥@À½®�ñ*€2÷‚¢mÐAO½$Ú_ž*ͬp‡0­õ•ü´É»$yWm—0Oæy’IWãM4íoÊynµ¦ï·µ>Ë*F†y.oqËë‘�ã·Óõ{}Nª=ô5d…YcèÕÐ7ºïȺom¬HÉÅ ¦ +÷�ç(h_P„æ€mÞ'Ý_º<—çÙ�Gϵì oæùö7 ‹*vYÊ)ÈMË/« kÝ*Í÷åoA±ÖE_¿/mù\Êüwóg´9Ý�c¨wm¢í»}´�Ëó$hëf{¿Ê;Ë~Órݽ•èUÞº4õðj¹³,ddTºáÚLŸuÉS‘[í<@‡¸Õê|™†,ÓÔéÞêê·>®§¡W1åLm—cm¿–Õv®Óã BCã6òTlÃBÏåy:„¦]><Ûã¹—_Ρ丩¢}Y<(ŸåºžGÿ[;ÜÙÊ6*¹Ùû9Zˆ÷rà½xÎ3ŸÌólHôj—+�xîôb÷ܳ'8ËMèá�|´e“0GÜõ‘]Ëy”´¼{>$®ËßðùCÛNw�<Ä‹g½þÉÛó�u5d�i_–:òã3µ\_l)åä<±¬K¾=~äÙyûï ,„ÇQv.ÏÓ¡l?vúwèÝ£t²c¾Îv™¡Ú‰ÓŶ۰×cûåÛ�ç·?°–w2ϳ¡)îÇF_oÜ>ˆÌa!Ó/h¦}“¯Ë;� òªôãu2ÏÓ¡j?Öùøx}�ø/Dæ£^/ö8É&wîÁ½“yžQû±Õó÷àÏà™æ^qX;:»p2ÏÓ¡ç`½é‘�¡3é{;8ùe�qîõ¿²2ÛÞf ÃLžÛ­+·ÍÎÛ°ú9¿Ï7¬a}d=? q�@Hû£Ý§“yž •é`]ê‰Öó´NÏûmP¨vÐY×ñç7[ËZþ—�Â;èý@Œw2ÏÓ¡÷`=ëKž”šÖ›ÆùÕNΰƒs÷é)¿³&vïé©�}Ó†Ú™C¿g8ô ÷KÓÖãNæy:„þ²_ºâÏ'Ø/=zjwµê\cÚ{\;¬ßI+òDæhös2ÏÓ!ù ~ý¢8ì¹F‹€G¼ùî³{=ÏŠ[§•ø™ã³Mã[-sDs ¿~xkÿl¦gê’ûaí/‡�È/=läåì¨à®ô¶˜Égþy9EÕu˜ä>õe™íq:W5a´~ŸEÒ¡ñ&^5PÞ5Ž—Ë—•‘ò¾EÝí8‚—éúÆ 5©/qXŽÓäòòíçÞEùí›òBo~±6-òüB¬—ýeßò¹ Û À:?I*——s‡‡[ùõ…ßÁžÕ‹ã©¬Ää{ØtÛ�ŸÏTùŒXé£Pš‘¿z+h�(¤+�I¥±ªv“Ê «®wræ£÷l©Êiü’è¥Ãs7Ž%ý�¹ƒ¸¨dµ>É Ÿœ-³8êzÑÅï:LÂ2bkûqb–�²•… …žd70biNi\=Ûl8‚�^Z>‚-}Ïïj6:ÑÎÊšÈä3Ý–Š!rzµÓÝK¡Š˜NŸ�”+ßL¡g›°hÇ´½ÀžñP¬Œ„n+”Cu]¬mµGÑi¥­é|6ÓǦSC÷×´˜­êSÂÛÕšYúÎJéÌëZTm]-›Ì F¥&u5eëÛú‰Ý.ŒðY‹¶è̦z�N]„±ɶt©¦cD· ›®”æZO…–*ö¬©¶|7¥CÝÄÖðŒì6Sèë4†1"Mý¸Óé­¯ep£7ÂÛÅÙ6»øýâ“Úu®�®Boš¡Ü&޲ã¥Kéd¬å†f•ѹ‹ôÿB®I‰yòe¤èìÔ~Õ+¡±ÙÄëFå¾±ŽåZ@ÙÐÓÍ¥Bh˜ÛKEɤ'Òm©[‹­¤C“ ò�ªyDR�<ÖbÕP×ÄDaµ}WŽBY�@u]ì”ßWân§kCÕÉV™WÜ]+·‹}ãÎ÷QZ�+:·ÙÛÊ0_…·ìØì,&èÇZIkÙ¼]¯lvÃ@ +]Üiô=‹ëhmìD_îQ?öAÆyÜÛå¯—ìæ´qšNÅðFѹîc”¥®ÿDšßá÷ÿ.öúûz�èâǵll¡·®Ä£'£o‰'Åô­ UØ†Í Ôv ý.V±§u Í�k=ðµíÙe'öšR5UM; +]oÃA¬tµ2C˸ámjÅÈ|ißt‡½\šzstÊA[­ÂÅx;¸Œ]gºK¾E⊒v—­ÕCF\Œ…âr¨0uËVf ÇJZÓ“ývì +Cu CA—¦ëlw³cÑU–ïbH‚ØŒcÁV�•¦•=ŒÑ^_ÜïÅd_GIµ7éû(m7FÒFx¼ÔäK¿¾l>ÇäC.êàí-ÔÊ2ÃØ3-ÈéC£‡vu1bt�Æž­$pc¥¶ÊV•VGÑè2Ye­ÄPmò%[m–|Ç‘m¥ÐbŠ.ýëØÒnì•Öˆnì¿IKåV�×¢%Ó 7Â9ô»“=e‹%##ócî&µ=¥©²mÝv]wõ¶×á6l7Ä÷ÈTöln“òCü÷‘±³ä™V¸Tõ'¯„¨Ø�Þ†£¶*mò·©Éè=8ÄÒb‡¥‘‡ó쯕lWDêZÉXºCXcdPô½x¼ ïP¤cÅPTýÎ<>[’ì-=ÖÌRP§9¹Y Ê_Œ”×ó‚P»¤§÷5}š¡ 7Ò×·©øS)i#äuµ|’þŽý +endstream +endobj +677 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 676 0 R +/Resources 4 0 R +/Annots [ 678 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +678 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 570.123057 101.433071 551.373057 ] +/BS << +/W 0 +>> +/Dest (cb124-1) +>> +endobj +679 0 obj +<< +/Filter /FlateDecode +/Length 4781 +>> +stream +xœí][‹,¹‘~¯_QφIë~�e` Þ/~0œÅ,Æ}z¦m–ÃxöïïJ]"•QYY}ŽgÊàÓô©Ê]B¡OŸBÊLµ¾*ü|£ñ_rzI)Çய?^~º¨%z…%Åæ¢¨ÿ€ßè¯Z¹¸x�Cò×I`ã³71\ß/øoºäÉß/üÕåoÛ<új–œƒÑþú÷HåìSŒÊ ª •ÒVPy¿Äh|TA/hbÎ’ +føèŒÛ«"Ìp9yI3œ1IP%˜a]Ôv¯Ê0ÃDí$ÌÐÙGA¥ìÐF)QC”sÖ:í—§IgôR6YÔEèt4’ÎÚ%D§½–ty !ø$élñYiIça‹×Î)I[œMQÒØbƒU¢¶˜­¤‹°ÅÀ;YÐ%Øt%Q[TPZÒe»øœœu:•bÚëŒò‹OÖ*I§õâ�M+ê0¢ÐI! +:[‚òYÔÁo•‘t¶8üH:ð„·1%a´ÝVY-éœç®ÉA¾ö/Z¶u¸ˆ×;|$Ùúpž¯n«%¡n˜ÛzE#ï%þº�Ï0‡õ;^Z™€ {6ÓW6Úöú3uu¨ejŒú€é"-ÐÒÄÏL~0ËW4XaùŽx0 �͆æO�"V>ÊmÿæÓTZ­Xwéû%3�ÆÔhüõÓ�—_ÿþ�ß}÷é¿€ÀOo—?ý›Bñí7Ÿî3¾ûú=­Ÿ>0�©ßßêgÍgP"-¥íøUô©Ö_Ÿk¿•;7•W?[=þeý,e4{4³·å©¿ikW©#Ü(;íÛÐÊm>èiêç¦M³R«óÛ?_?ýîòÛO[•uO�A�¨ÕSbî\–/ÁÜ?j9BmrWw5 â^«nçRÖÕaû9w'‡ïþÖ­Û�«fÇÏfû]¨4ô‰ž\‡ùB1×õK6+j!Š´IÅwÿýïßýæ?þsø® 1M1ñø$HšÞ†­�Ý'žìZÓb¶ÅPní[¯wòtêUή©ŽµÉç# ÕQ®ƒÔWõ3¶¾¶ºXËeiJÙTÞ[­»øù”cwìŸZÛýJݵ¯“ü@õ¶¶_ñv3ÿµöõkÏq±ÊhÔ8V'ËçÕè“æõºÒ ÖAkóodù,Ý%«í²Õž|™ª¯È¿ßïË ––�t›b_Niƒ­ö„Òæ#;Zß°C±þ|eí#ŸšuÜ ¶Ñíª â+¡ìó£Ì-†‡¯Muôþ0«OÊoÅ-¥µÍ÷ºbìe«'_”¼­®Pý“*¾©mÿB; –Zš76ÎÌÀåÕæÐ×~ö‡û¡öµ6—v¤�%Öz�Ç4·¡ù¢Œ)²õe'žµ‰û¾¶yË©£¾•KáÑš_7î<ôCÞáEäY‰cÛ\׸¬ÌouY릺V®ÛŽÕ6ÞçÉÒžˆ-˺ã�v´r#�Ìó¡ÅÙWŒŽ|·—öV±è1J �ÊÐóÛ0¤P$u¹eÓðÚ 7+ÌKVº¥1UØè³@ªMM™dß—h,œp…ýÛ½Ü.•;€!ˆöÜËíÃ’±:4Rî2�Ïk{×C¦Òk´L�%bŸß¯Û|Åÿ_±×|ЋÁBH͉ãÚçÚƒ‡uÌá¹Ègtg>{pVr +Büçm ° Þì­€lðÐó™îlN•V¸A˜ÎéF~n"rÓwódž'YUvÞtÞñ¦zFÞ¼ziáüv9S¦pÍFqò޲ÏËÂ5TØŽöO¾ÔðêÆ2rØõ툤û ·ÙÑkˆÀBÁŽÈ̦xyJ7˜Çsö)ê©Â#4z@¤" îZes�'ó<½ Ghœ¹_BVYÌûúIAw^E]Üê6i¾¯Ÿݦ³}/îûúéêw76þ™æ¸Ú\ìȱԻ.Óͤc´�Ëó$hfcÖ;ŠÕ��ÎiÛÆÏ[^~ßË}ëkêáÍoÝ)¨ôìÚNßMÍÓ�Û켃: qŽo¾T{ kKÜæ]—°Çõtôj¡œÉw%þ[Yós[®ï;·!0X"8ØÅ{=—çéšùðl�—^~9‡’gআöu3£~WÛz¹ßÑýÐÊŠû6óHeÞľuïÁgÆ{éäÌ|.ϳ!1èC®¼Çs§·øçž=ÁY~B�„ä{w© +æèâwQ[NÅ¡¼=Ó(éy�æ�´-ÇçÝi“‘X¼xvÖ?™çé�|cö�D»EÃæÞgë%áæÚ|³‹#W+A¯¦ž¿�¾23§‘^³&îÐû™Õ!Ý”»Å‘7ÚñóD7ÐêçÝ“yž­Ç1êÏ‹ý+Úè#,ïù»Û{s.º�d—¿äèèë$ŸËótH¾Ë¾ÜŽÏøŒký~Ý+Ÿùá­3‚j^„Ñ“÷2#¥›9Uzøâ–­�FFÂÝŒ1GÝ@Ûˆ=õÐø{h;—çÙÐïÄ«sÜ5y~FG`ß!z9X£·ïnê56wZ�"KzötؼßÐ"”¢>OÌ×2Tú)nßÌÖ3âŽweÆ7š�—�v÷fï“yž…DZæ/…ÂŽ”©¥«Ž²Ï{DÜìáÄg'ó<]Çgó#cÝ«G3ÚfÞêLTÇ#Ý£Ç�îs}LGÐQÓPUõ–"í×Zîg–Ï�ü¼®Ž,žöe­£<ÎÓÊ Õ–ZNÉ“ê¾äÛãí ™]¶ÿÊ¢yeçò<ÊŽc§†Þý0J';æëb—eåÐ�8Sm{e÷zìj¿z»�¦ìå�ÌólhJDZÑ×·"“!ì!d†ÍtßäëòÎ#ˆ¼ñtºyœ£Næy:TÇ:¯O0#þ‘ù謗Fœä²?÷0ßɾ�tu/ÿËG¡ŒÞü�ïdž§Cï�ý¬/yRjÚoâwä7wrØœ›OO…ƒ=±[OOÜ7í¨�9ô{�CŸð~iþÀ~ÜÉ»7òl¸uÚ‰Ÿ9¾ØÄßt™#š{Q»ozöÎþÉ<φT­ŽƒÚ]ÎÓèÔu¾QÝ|ÄéÖrLüöx�B}hïVØÒI�×qcI%.'¥GË^Ø0ÐúC=Ç(ú+½?fËùsA±c‘:žî&¹ŸöªÌþ —«ž×Ù¾Mƒ"és›®(É‘Îüßî +u_¤¾-A1w?‚¡Fe¦½oC. 5 ++QšZ_±ýatQy÷¦¾Ò[^—Ϋ¼¼"Ôx¸~ǨþJ²)Ï‘ªõ5]ös/¿½‚Ììټƞë>LiîÛ~º„rV�.番�mè@ókp mÅ|¥óñ’²N·nÒűúz#g9þ§žªž ¯è°X:(°t#¿¨é*üãEg·�ÿËyågUÄÉ´‹!~¿Ð)ÞN;7…¸#&aýªzYN÷3&šì„—<§´~Qõë8ˆ‚^Z¿‚-ÃÈï[6:]Í©–È–óÅÖŠ!r½SëÕ¢«˜NBO‹­W¡›B¯Òvá(Ðñ´£À‘ñ®X[Å„~/T¬º!6®Ù£éäÌîº0„Ýtî:ͺ¿¥5‘uç‘ðõ‚jí,}¥tþr+ªyר.³Ì¨Ü¥¾¥ìâz? ¢×‹ üFµ¢:³ëY¯Ñ)–«05 ¹ž.·t‚èõ"¦«¥ùÞS±§J#knž¦ ¨ÓY·e¯ì°–HÚ��eÛ×­˜Îé}­Ã�Ù _/Þõ‘8Äï…Ô~p…ò z\hY¹]œÔÀË�Ò™`ë7 Í&£3éÿ•*|—ó”/ÚuHÑ9žãjTBc³‹·NâòÐYÇIÐ.Ž´Ì]:ÆŽYî/�”�žH·§îÛH™Ë˜<æf‘T'�­XwÔu1QXóOçJ.TÍT7ľCù}#vú>T½ê•Íàî{¹C:w¾sqì=NÇ µFŒy 0Ì7ák™ØÜ,&è§VÉÓñ< >½2&†�†xÐè{·ÑÚÙ‰þÐDû:™4ã¾^þz)Óœ±ÞÐ9Áj:cœGYúúHó;üþÏÅ]ßµ\çq£:[˜Î­1ŸÉè/R¤“bú M؇ Çhˆui}CCŸÇ�a|íFv5ˆ½¥Ô�Au×r¡>dbÓ¡k´ežñÂ×É‹=�ùÒ¾özi[ãèÜ:µY… Þ\¦¡³cJ¾²"qEIÇ”­3,#.x¡¸dæaÙÆL$¯¤»žìw¼+,ÕÅ.XA—vèܘfyÑMVZÁ’ ¶ü‚ì4¯4oìŒþððúâ~¯&‡6HÚ©½Kß¹´7Œ¤�ðd©-—a{Ùç[޽hƒwx¨—eÙØ³=ÈCc„nsÁ1ʤid« <¯Ô5Ù¦Ò6Qtº€L5Y/16›BÍÖÜRZœD/ÅS é_¹§=ï•îDÏ{%ìÒR¹mÆëÑ’í�çpŽ£uj¤ì±dd�çîR7RÚ&Û×í¶u·ÙöÊšá†!aD¦jdó»”â¿�Œ�5Ï´ë ¥j?e'D§q 4&j§£5¶üe/•B‡8úã Ñ%¶5òpžã½’ýŽHÛ+á5¡;g­ŠšþF›lÂ;ù¾‚Õþ~›œ-+±I�9@Ø +4§v;Aå�ô”ýƲ!Ô/#-éorY +zý)‘¨´|'ÝyÝlŸ”Ÿÿè­oö +endstream +endobj +680 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 679 0 R +/Resources 4 0 R +/Annots [ 681 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +681 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 573.873057 101.433071 555.123057 ] +/BS << +/W 0 +>> +/Dest (cb127-1) +>> +endobj +682 0 obj +<< +/Filter /FlateDecode +/Length 4741 +>> +stream +xœí][‹,·~Ÿ_1Ï˺_ÀlH~0œ‚ÉÞ=gmžÀqò÷ó•Z·V×ôôìYÛãà]v§»J—RUéSIêÖ¨³Äïç +ÿ¢U"Ƽ=?~8}áßt;&>ýý³Ó¿×yÔY‹”¼Vîüó{bY#B A:†•À’Ê0,çDÚy†å•@SâXÃ«í– †MÑq,ˆaµŽ +B cƒ2[V‚:(˱ †J.0,%!‡ÒR²<"­5šá)'<”î9žVÂǤË à© 9ž1«œâxIxï]äx²¸$Çs�Å)k%ǃ,ÖÄÀñ€,X 0Þƒ§ ‡(Lh„%8à®Jþ˜> ´*&Ïa�îªó±¼$T€Æ™~ - å}â°Àw1P pð9,Æ Œ¨šÃÜU#5Çî*�$‡¸‹¸ÁqXw +‡ß„’p]–—„L1rXà€»€%ÍaFa!#�„åGRŒ…DÊa�îbxOxà®tÆpXà�»Ò"ìay�ÅDÍaâðÐm™>�`UH ¤àxÀ]©`aŽÜ•2$ ":…¡Q»ó›§/¾ûû×_¿ù<ðÍÓé‡/%¢ˆ¯>Wø´oqíÊu\>�xº\?•Ï’O£6DZR™þ'éS..•4nM·v*¯|ÖzÜÃò™Ë¨ò¨AÞšÿ¡üŵ\¹¡ì¸mC-·ê ¥)Ÿ«6Íú‰µÎ¯þy~óíéOoÖ”ç=Ù�4BhD­Ž,´ësDz|ŠÏý®–Ò®«Mêjª†‹ØÇÂÛ¨t0µ_ÎæÝc4ÿìÖÕì–s«*ÇäžUö«®R  ô¤:ŒrP]»FE… A‘Ò1ëîþú›¿üµë.w1E1qù ‹KêÖ†µœM'ŽäZÒb´EW®í[î7ô8¹ºït*k±év¡-ö)÷ž³Iù ¥¹No©ÞÇ¢_šîÇ6cІ ÐоYi³)Öwd™¸h1[âݶohRIÛrdi×ÒæÜî=9l_�Cö¶¬ôAúÖKOdd£ ,/-".¦ì¥ô2×^Ýu­}¯#ëÙ-÷Ù³žº‡SZSu¯Šw?¬ùÙ¦ºØÄ�˜Ò6_Ú6ö¦�ÙgVÞ]zžî~Fy•ÞÕµ›õA=(ÛÚu™s;b÷%ç—zÜØÎ*sõ—ÐÓÍe.èzLŸ¹×ïè“ÐÌU_�K^iÖzšmÙÊóC›Ü®žÂ¬§,w±a-·É8Øuìó³%oAÈE—UoŸŽŠSÿtƒ.G›»Þ’aÝž]Ý¥�îväÍzä½äçD˺p“®VÛ\Ò¡+£âog“=ýµé£“>ô~~ZKZå_ÆŒ5æUÜœƒOƒøÑ›<á¢M.§•¥Å¥Ýèó`žM{_1îtMÞdEÄtRK6ðÌæÖ^jÈìfœ#\¬0y!mMÖa(»E ѾÚ/Q(×ã&0%º§k¹mÌ{«˜�rò\Ëí¼H6ãrç iž š«Òù¡%ë¼¹ !û~ +™§:Va»î–Ú„Üólôi’Õ ³G¹é—Ah˜=Ny®j~*ÐgãK¬F»Â½„µùõºµÇ%þ¿¢ÕœWBcŠ)çŽ4úµKÅ‚»uÌÏ,:nrÀ,ÏNu(˜so×Õ*6—ÛmàHO²$Ú3ž*ͨp0-ÔQÁB»H�Ÿ\̃yîd¾Þp“ž²ØÁMùÀM�É{Ãå·ÓГSßûIÎUÈÄ£µs™ö­'ÑKXÅ/"lôQå?Þœò{ý ùx(ÁÉÈ·~P“ìÿ‘ ä´±"%x¤š*Üë޶½v^cÞ…Ý_&=–çÞú€£]ôË}`qÚgÖí²¾™?)MËË kÞ*Í»òYüQ—0½­­¾+Ÿ¶\—2o#ëÆÛ|hžcȺ6Ñæà¾·Ës'ÞÖÅŽj7R•V®'Ô™‘o´JË[Ñn²ðjž,|e¯tý™®uÉS=·ÊyÅë8�[!ñC‘Gm ë¼ËÄ~=Í{SΤ»õû5­ê¹.¶l<45lC8"0؆«ÛF‡òÜ›‡z¹‹‡G-ž­üpÌK·/KQåZ®ë¹eÿªéa'VY– Ö½ôÚ^’WîÅc#óÁG\3nçÞ +5Ÿ~¿ã­³•¼Æ3½'mišK7c*·wIÖ[##f¥�Q¼·…{ZzG¨Ýo;˜çî¼íJ¼:Ç]“ægÏ=°­=ìÌÑëµ�¬6ŒÀM†Zçä‘9ýð´ß¼ÞP#”�G½åWm[9ƒWº)n_�Ö³Çßï^ðÂ7jŸ„MVÙk£÷ÁÛó�u5ÏÓ>,u䇱j¹¾ÈRÊÉybY—|º½4²óò_ð²¤o÷²cyîÍËâ~ìô{°î‹½t’c¾Ïr™¡Ú‰ÓE¶Ça¯Ç,ò˧ Ï…¿`-ï`ž»ó¦ýØèõúí�ž9xØMžéoÎ�a¿*îÜâ‘—Þ6¸£æ¹;¯Ú�u^Þ_ï`Dü=óÖQ/ö8É&wìƒyîΣöc«û·ào02_™{Åaíèè +ÀÁ<÷æ=éÊzÓ-;CfÒ—vpòë0ìKåI©i½iÜ‘_íä ;8Ÿžò;kb—žžÚÙ7m^;cè;Cïp¿4½`=î`ž»óÐ?öKWøyû¥×žÚ]­:טöÖëwÒŠ<‘¹6û9˜çÞ<jÙÛO +Äî«+°.pËp¾ûð^ϳ×i)~ù,Óø‚ÍÒlÂïËéAÁ�éÝ"“O}ór8Œ¨ùçÕ$Wܱ¾Ð°=^嬦#mÖï< H:6Üij†×¥@'m±oþø2{-Ï´SdÔ>(c§®oE�:}+óX*—×5ßw3å7$Ê+ŸùUË´Ðóë“^öWDËu?@¶W~u~ÚO.¯k¯¸¶òë붃<«×mS™-ç6lÌöñäó q*Ÿ*}JÓ1âgoMâC:Ó©tQ«ª™TV¬:_È™_ÿØR•óØ%ÑJÇó-‡µ7%ýÇlà'•¬ ýçóòÙÉ2“£®7�ü|¢³³-C¶¶Êp…LÄr)[YVµ3*íDšS'd¹ìAÐëË¥vµ5”ßÕlt¦™•5‘ɧz-3DäôjK¦ÖK¡ +™Î�”;ßD¡×,±hÇ´½Àžñ*Y9Ý–(‡ê:YÛ*�¢ó*›ê|'6ÑGÕ©Áü5­ƒ9÷ˆ�'Tkfê3K¥S�kQU»Z6š„J�êjÊfÛìÄ�O ñsY‹¶0fãV£³#b¬Žd[ºTÓ1¤Ç›®”暥BK{ÖT5ßEé®Nça\¦=‡¥úB…¡�HS/×d:o£ÙZÆÁoô†øxr¶õÄN~>¹À¤v+¤«®7ÍPn#GÙý¥Sé$®å +]³Òèä=ú¿@…kTBž|¡ls):=³ßõJ¨o6òZI#Ý7Ô±œ” =í .BóÙQ_*J&=�nKÝ4¶¢*è!Uñ¤x¬Éªy]#„Uý4¬‰² +�ê:Ù5W~^‘»œ®uU'[e^ îîZ¹�ìv>�äÐ,NÇüÔFôqÀ>_‰�y`³3™\?ÖJ:™ŽÀ©îÓ*ˆ]0€B'w}ÎäÚ[:Ñ×;ÔËÞɸ÷ñôÓ)sÚ8Mg(x£èdï1ÊRçÿ"Í·øû×Éž¿«GI.㸖 -tÃÖyÉè{ âA2}/D%¶n3µ`¿“Uìi]õ†6Žk=àµíÙeöšR5U�;]×á@ÖÍuµ2ƒfÜñqÒb d>Õ6}À^nMm� A‡�V©p36·±óL’ÏC‘¸£¤}H×ê!#nÆBq;T˜ºd+1É!ÇJšêI~;šÂP]ÃÍFЭé<Û‡Ù±èJË­’ 6ãÍX°Uc¥i%#ô‹»×'Û½ˆìk jƒöF}©­aDm€ÇSM¾õëÛ6æ˜|$Bí¼]C­,3ô=Ó‚œÞ5zhaW7£�ÔØ³•n¬ÔVÚªÒ:P4¸MVZ+1T™|ÉVÕ’[Y-…StêO£¦Ýh•¦D7ZÅoÒR¹uÄkÑ’i�Ý9ôÖÉž²Å’‘¡ù1w£ÚžÒTÚ¶n»®»Ž¶ç¡¶ â{d*{6·Iù"ü{IßYòL«\ªú›WBTì‡/c ¶*mò÷iÉè=0ÄÒW"‡¥‘›ó쯕lWDêZÉXÌ!¬12(úf4^„g0ÒuÆPTýÖ4>[’l“nS³ÔaNnV‚òWãäõ˼ ÔnMé›° ½‘¾À#HÅŸID˜ÕòIþýÇÿSñ +endstream +endobj +683 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 682 0 R +/Resources 4 0 R +/Annots [ 684 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +684 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 558.873057 101.433071 540.123057 ] +/BS << +/W 0 +>> +/Dest (cb130-1) +>> +endobj +685 0 obj +<< +/Filter /FlateDecode +/Length 4776 +>> +stream +xœí][‹,¹‘~¯_QφIëº�ƒwÁ‹ g1‹Ù‡>=Ó6K�a¼û÷÷ ¥n©ŒÊÊês)èò‰:¿àÚI\”%ê` ’¸�õ’lŠ[¬1[2H\€ˆ`IÑ·¸<€-€‹¸> Ø‚HQâ0Ù‘ÄÁy¬ÇàUIçÍèZÔEèt�¸ Z0k‰ °–Z"½Ä ø…Ã%‰ `tš$. ¶`¨H\€©h‰‘¹¤Ó°A¶Äˆt¡ÓZâ‚h` ¢A‰ ¢‰Xez%qfh¬%ájIGŠ×™Qâ‚H~áPQâ ¬4Á”¢¶€&$.@ÿðbÛI\€Å›Xæˆ:ØbI\£áåf”¸ FØb”‘¸Øäõf�¸ )Ø‚ˆO₤üÂa²Ä qè”’¸ éˆõ¦!‰ 0.y½%.HVa½‰%ž0n“õ¼Þ $‚-!Ѝƒ-š’0nÁIXo‚�$�‡-&‘ÄÉ{^oF‰ f`½‰ˆ^܈¼Þ âvx×%0“¤ï"2õàëMD¶ÒÚ^�x]@|&+#¯8£¸c @½s«¸e À½˜­‚¸g @¾¼F7 `&V–Ñ‹»˜V¡ÔJÜ6Pà_Äc´ã„u÷iÜ¢ò€CÀœ72aX¢û¶æèÉì�dëþØßÿrùõ &ßë_þ÷òö«¼SV4„œš_a˜„îvˆ¾5šo=šçeæ(6ö} ›R7QƒË–›ˆÉ�ÿ]÷6vÃl6¹±*ò¼`1A¨R=x(—NXcu`xÆì?œç®ÉñAº¶Z¶µ{j¬·»J²õá<_ÝVâ²s7·õŠFÞKüu;€†Æ¾^,¥áŒÙس™¾²Ñ¶ÕŸ¸¸C A{ +Ä–`Š�vbfùŠ+,æz¤±Éðl +ŠÄ:HÑ&ño?]@¬ÅŠuϾ]æ#¾Ó˜(�»~úñòë?üé»ï>ý'øéíòçß(¬Z¾ýFã/Åõ¯såúµ\›rÖ¿¥#�T‡ó« Ë¥Õú[Ë«å´ü©—IoSÈH/kÙ9mÓÕzª�›ú‚l¿SB¥Ü9OmÛÆ~³×±�äëõ·ÿ}ýôûËï>mÁ’W<+X0AkÌ1ÞßÁ×¹,_‚¯¬R:„UuñçRqêÎσ›ß˜Ñ +³ú»éöTÒ¸­|†NƒP©Ç½ ];4š½5ÿKù R!°+;îÛPËm°Œ[_lÚ4û'C�Ow +p æ)¬�wÑ!ÖNæy6°a…}ˆ¶ÉcÍÛ#éì¼:ô¶ßþ�{tDȈ€Ù4“ш¬jÇ r»‹–Š�P²ï‰¨Áwírˆ·òaf`³ïþëß¾ûí¿ÿG÷]eš×^åï€LÓÚ±µµùűmkZÄrѵ�ëõN'Ä»Á×õo¨>^ËÑuRxeŸõ2rn¥Íµê›½ÅÎ;NV/C*òìçSŽ�£cÿ\ÛmËïØ¶r�ÛP|SÛ¡À‚††6„!ŸÚ¦'¶õue¬•WÓüh“áÓY,}±&*6ÙÒG¹PÇêÃìãï÷åxËÛ |”µ/G•v­~ʾ:²ƒO_e;ToËÆÜGf3‚m|¤é!êÊ^±ÚËÜb¯ûÚø^Gö³[¯3® +¶\™Qlõ½^ÿ®³A×ç>5¥Olñ‰-mó¥m·^ngÆ�€m>ίØä¼Úú:Îþ J_»nsnGìXr~­Ç�í¬6W¼„žn.³ŽÑ3þÌcýÀŸÌ;®bA­y•ÝúiîËVžÚäŽüdÕì§lwéà ¯èm¿Ž<1Û±å²ò{’ÃÜÈcµíc¹^'—+ÕO¾§­øqWÓ»µkW{ýfvøšÚÂÛ�Z™?Œ:´‹°­ +gnÇ|å�9Râó_oó¢“�ýœÑÄÛm‡‘ÒÉ<ZúÅÉ5{adÄ’Ú(1DÊCx^ÛéBv˜Þ×N¸Yaò‹J||6UXi8wm [˾=.ÑX8×ã"%º·{¹)æÓf¬˜${îåv~I}&åÎ�żt±w=dòm\ä¼½á!úa +î¦:6¦é=µ ç¥ÓÛd«–:u5L½¼ÍRgÊs×sÀé‚8Šé5>'%bŸß¯Ûx|Äÿ_±×œ×‹ÁjHÍiĵK¥ë˜Ct‘ÏP-�ÎòbPÎÁŒû¼ (6A ½Øí'¾·'ñ)úTif…„I|(±’Ÿ±ù,(ŸæÉ_õjêùèË3sìéoÝoÐ8nFïga}ô›½ý;Ž¼ÑŽŸ'Ú¸�ÖðÞ=—çéÐz£þ|±Ø¿¢�6ÂÒž¿›½7ç¢HâÒ³·_�ÌólHwbÙ—ÛñÙ8ãÚñ9ȽPó™Ð:#¨äµ^=i/3Rº™S¥Û-nÙúhd$œ]ô9JF[è±'ß`È hÜ´�Ìóth»¯Îq×äùy#ÛÑËÁ½~¦©×†¸ÙP뜙ӷ„Íû íNÅQŸ§fŽkTº)nßÌÖ3âŽwo °Ç�Ƨ…iº7{ŸÌót(<Ž5)6¤L=(íX5”}Þ#âf >;™çézø8>›ok^=šáÐ6óVf¢2ùü‹gúÏåæAÇyLEUÑ[Ž´_K¹Ÿ‡|Ôó�u5d�i_Ö:òM@µ\_l©';n]¡ä}É·ÇÛÁ3»lÿ ”¥ð8ÊÎåy6”ÅãØéŸ¡w?ŒÒÉŽù:Ûe‡rø$ÎÛ^‡³»Ú¯Þnܧþ�½¼“yžMDZÑ×·"s@ØCÈô+šùÜäëòÎ#ˆ¼õôÃãu2ÏÓ¡ê8Öùøx}‚ñˆÌGg½Øã$JîÜ­{'ó<¢Žc«çïÁ_`f¾³öŠÃÞÑÙ€“yž =éÎ~Ó#'C'VÒ·NpòcãÚëg~4gwÏÔëPßÁyhݹmv¾»Ÿ7îÝúè~~â(~Ó íï�>�Ìót¨¼³/õDûù¿ZÃ6Ý…ú�u~‚·ìåù(¼�ÞÄx'ó<zïìg}É�RÓ~Óx"¿9ÉNpnÞ=åöÄnÝ=upnÚP;sè÷‡>áyiúÀ~ÜÉqãËêµÜÓΑQ{4¾Ì�¦>Áîôe®Ìs©Záü¡wS~B¢<š™qL«È¤÷õò×KžæŒu†ß]à­æwŒ�Q–¾þÒü¿ÿs¡ëêK-×yܨƦqëF<Îdü�ñ¤˜¿¡¢ +Û°„†Úïb{ZWÑÐæqc¾¦ž]ub¯)ucPÝ´£ÐubÓ k´<ㄯ“[ ó¥}Ó'ìõÒÖÆñ»øu¨Õ*\ŒÍÁeì:Û§äëP$®8iŸÒ¡%3dÄÅX(.‡ +S·lc&r¬¤¹ží§±+,×5\ a_Ú®£>ÍŽEWYnÅ�!°/Æ‚I�•¦�=‚Ñ^_ÜïÅd_GKµ7éû(m ci#> +endobj +687 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 555.123057 101.433071 536.373057 ] +/BS << +/W 0 +>> +/Dest (cb133-1) +>> +endobj +688 0 obj +<< +/Filter /FlateDecode +/Length 4596 +>> +stream +xœí\[‹%·~?¿â<,ëRº�1Ø�ü`Ø`‚ÉÃìxÇ&Œvò÷ó•Z·V×¹ÌîÚLˆg˜9§«t)U•¾*©ÕmοŸüKdTJ9:?þ|úå¤Uô?¥Ä¿Å_ôg£)*orHþü3\T1{Ãùù„Ëå\üùôÝ'§í똳U9küù×wÌ"§bŠQ{�•ÁÒÆ ,ïUŒÖ�ŒÂs–XÃG²tdEˆA9y‰1ÈÚ$°Äp�;²2İÑ�Ä‚&û(°Œ†Æj-ò ˆ&rV௔$ž5*¤l³È‹à™h%žs*D2ÞH¼¬B>I<‚,>k#ñ¢À‹yd‡e\¶M‘XiÚþêÍ ÀZ¥Øöìûå$>ò;ƒ@iýùÍϧϾùîË/ßü øæéôýç«–/>5ø¤´}z_¯ëµ­×qû´h‰¤6È8|ØhX¦h£·¿Ö^k§×Ï£MzZú@EzØÚ.åh_®õÓdÜõeù½ú¨í®uÚØvòÛ#�e¤Ð®¿øÇùÍ×§?½Ù;KYñl΂mcB¸á_÷Uùÿú-Ü*ç«nÕTüvr©´˜óí¤æ'ÁÍhs³ö·3{®eüž¾ºNw¡Ú�˜L�†kty[ý‡ú'¸Hs�CÛé8†ÖnwË´×ÅnL«~ÒuWã»;Õq,jXy6ÑU_»³Îks6¬°¯zÛ¢±®ítZ�¬öŸ«Eg™=`õlZÁhö¬&Çp»é-ÍzBɺC&¢'ÝõË)ß*7»�m*ºûûŸ¿üê/º+³ÌðÚ«~æÍ+mÃ^ήÏrme‘Ça6·ñm×z-ëü¤ß8Ê3ß¾›Æ\Û§§í“˸0Úâþ‹}ëw&:·÷Ø‚Ûkîg›Mw©.ͪû¾�ÎoØÐ5¡kÏfŒŠGÊ=Ï!ÒÏÒOjÚè×~¶üF×ÀJKSŸS½Òÿ¤Eâ¶ë(C^˜Çeù.ÈX9Õq¹ªm$fècÓ:·g~8¶oFð ¯c;ÅÂìõvŒ±Èí¶¿bÍÉ"ÅÊO“Udyù^®,¯c.íÒ°~‘Áˆcà¤Arx¡íÍûG›{o6a�k}t»Ù:žæµ5>¹f#SÇý°çýØj;WíàêØÂožÆY|®•yròá€æs\ר«ºN«>è]õ ?d.ãhmV¿á~ü<Î&só«8Ê­mn¨zŸ>K¬¼¢OF1ß|AouµÛëiµeo/Lcò×ôäôª'o† [»]ÆÉ®ëüŸåèyLÕ[³³Oq{*:Íyn·ùQǨ6þÙN^O¸3ᔩ~õTí2#¥<~+ÍÉ6ï�¨~ Ñ?Í[äl¸Yud^¢Ï«ã¤Ã|t_TùjÆu<1/㱓Ý÷þ?aS[•Á‡=öô¸ã¶qòükÑžÇoÛ|x»Ÿ]ÕéãÖ³\³ÎWLl´¦ÿ6Ƨ!g›‡½½Tíüöª.óªËy¼ÆÜŸi@v¥w™Æ!/{ømó²>S|C„–Ó¶\¹j2Ž>zßS–ó›eH÷ë2ˆº¬95ë±è³.ôßé·È¸('¥?BÆulg‡ú¡èðŠÞÑ%9>8“:¶ýÿ�Iy¿êã�LJÔS\õtO&µáɘ?GÜ›ê6}øc(ås{Ë~Òð�Vïj¶Ö1ó^êdj×tŒ^t¶aÕ~®µùºî&>ïcó1(o ñíÇ«;GwÖy¯[!qËÈwy=ÚóSDÜ2*SgÝë6uê¹)¬mF¸Øa†V2'Z:lðW\¡-æËÖÊ×[´Ê ¸ˆB‹þéVmJåô]¢<·jû ²‡Í¤Ú% ¯[¹î¦†l9ÖN>¸ ¢wËf×ÒÇnÃÍK6ËÖ­ä§EV?Úëwh´·Ûú]êÜÔüTažÒûXÍ—›b&‹6¿Ý· øŠÿÑj>eMŠz�H³_ûºUx½�uËRÆ3>…ë�YAܤä$¿Ýò]òå.%TÇ„…Ï:g>U¸tZPá`Føy>G¦“åóWóÎ:¯d«½ãfä{µ—qS?´tº¥ÒuV¹ ßi«³¥ûÂr¡ùË”j¯[ä[èÝÏò’~€,ÎnÓÛé¡üv7šlqÿyé&WëE\ð8²Í{22l>mpÓáîªòJümH�˜sÅß¶T°-Á&p×õ~¸s?E>õ‹:ÎLÛHëˆ;$”²OÑ,^ád]Ç‚eR*g%¯ß^¾¯Î+ñ‹ŽC 8}Í/–¨/ùHǪÛ(yÜÞ:ðâž·+óÃÀ˜²\­§ýæôõ“ê÷ÚæÿZvs<Ë�ºç8¶.e>Âwã0Ã]u^‰· ±ƒ½ºZÐZ¾õ¿¢ý…Ó(»ºíFðbáÝ‘‡±bõ¼K‘ÍÖ:Ís›œ7¼Nò¸Ý �zgÛðXÆÖNÀØÛýtï5B;‹îÊÊk‰šMÏm£åࡱcïúE`0Å[z_�Wç¡é*Þkñbå‡û¼ä5`Sóömª~×û~^r¨ëáÂY°"ã”s¬G:.žûÊî¥;#ó}u^›'òiýkžxçî>ð²ZöÌò‹÷Hž|ëØVñ€5»¸�]ïsrq�%‡•…CÒ¾ýž¿èè™ìÉyÊï�úwÖyuž|=Ç<œi•΄6+ GÍÖ£_³çîή6¾^,ÁûJdN£ü¥³¸ãVï}+¬�>?ÊÀÈ ãø}²� ÞJ/ÇÝ;ë¼:o½ž£þ~¹ØÙÆþX‰<[.Ç¢ ž<å¥÷>špg�WçÉ7rÙ‡ËùÙq÷GI/`V­·?ZºxëêAµîv8gñ¾|¤Y©ÜŠ©ÒQäK²¾43ººgyÁÛFîIü$/Ðú[Þv_�׿mFßHXßsK·/Ø_²ý<›m +Á]†Öçâ’¥üô¼ÄºáÐãY]êí’¬‰íä–~IÜwázuù'¼Ý ¿­O?Fæ;_®<µôô0e÷½›En¸ÚñÑËö@ØÙ,áíwƒÑ$¿öÌ¥³…GåÈO +‹÷¥øèßã†í A?¸ÕÒ·ýâvÄ’ÍX²3½Ýü7ÔTöŽë¸rP#otÛ÷èÝA‚q°J�ãÖe¤·C#ÓŠÞ~;p0ɳ;@“Ûž�á`¶_N¡<ánÊ[NtHÊX~ Ú9�rl‡|æ§ê“vdš™LQ¬9_¨Y^÷K/Uß'§ù3üz�íesÓE-ÿK1ðÏ'“I±þË)°òî']Èɶ‹A~>ñã$�‰ÆQ²d&Ö¯º·E¦ŸLk´G€gTy-é|{:w:¾ÆßÛWÄñ0êûV�ŸÉ&Ý +¹òTòÖ±@DÍ`Žd½V¦’ùýiI¹zº(| Gƒ4— ŽŠ7ÉÆé‰è�D=u7È–š<†ß·ÑU±‹>«ÎLæoemœÌy�øxB·n¥>‹T~kSkªi×êNs“P¹S}+Ù BÝNéñ$?Õ­i‚1;²¿ûb#¦æHÔËåVN =žÄrµ5ß-{©4ªæ¦ù!Êpu—ºâÚãtÄ3ò !§9¢]ûº'ó)Änk�&¿±âãÉSŸ‰ƒü|òQ(íVhß\o&º©ÝNNzøË ò³�Û7LÍFã7ðÿ *|§2ò”/†ºKñÛ?ÆÕè„çf'ï•4ÓCG’4`(޲“ºLŒÝgg}™¤…ò º½tרŽ:©l¢ÇÜÄc�êà±'›îu�ÌÖôÓ±r&ê&ºdß]ùyGrú>U½î�3¹»ïírèØù<“c·¸áW¹ty{»“Ï7âc l´’ÙõSëd�­îÑnt6‡`…A0ú\Èm¶vtâ×S¶¯c’I÷ñôÓ©„9ë¼å~Á~3Ùœe™óPæküýóDçoÚ«0¶8nuG Û±uGž#¿Ç2ÝIæ÷Z6bŸ6ÑÒûƒlÒ(ë›7ô8ní„×4ªëì­¤éj:w&ú¡Ã‰l»ëZã&Íø+ÄÇE‹=‘ùPÛŒ€½]º68>±È/QiRáb.Ó๒ÏS“¸â¢#¤ƒKvªˆ‹¹Q\Næ!ÙNLvȹ“®z–ŸfS8îkº˜Ò¾tƒG#ÌÎM7ZÅT)°›/æ†ÉÌ�æ�<‚Ðï=½>ØîUäÐfS;´wêóLícj<™êÊeØ_ö˜ãÊ�½6y‡†z[nš{®'9cjŒÔ‚v³�NÔ4ªÕ~î”m×i .@Ó�Ö[ŒM¦P«5µ”'QK±çƒúÓ¬i?[¥+ÑÏV ‡²Ün‹x=[r=ò³;Ç1:=Jö\2 ´0×îT%]£û¦}ß-Úž§aÐ$ŒÌT�jþPò½ðï}æÎVgÙu�Jµß²bÒxy5™è¬+ï×)`ñ+#¥ikäÅu®ï•wDÚ^ÉÜÌ¡È9 ¿Ù]áŒ|›15ÕÞú.WËZÒË l ˜Ó‡� òjß²7Y6„úeä¥"¿ÉÛqÒË�b™¨�ü^Þyó»í“òû_N“*B +endstream +endobj +689 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 688 0 R +/Resources 4 0 R +/Annots [ 690 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +690 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 367.323057 101.433071 348.573057 ] +/BS << +/W 0 +>> +/Dest (cb136-1) +>> +endobj +691 0 obj +<< +/Filter /FlateDecode +/Length 3514 +>> +stream +xœÕ\K�$· ¾÷¯è³ËI½€À€ $ø``#0r˜íxl³Ö9äï瓪ô¨jöcfí¸³ƒÞ.‘z°Dò#©©w´øùÜá¿$Τ”c�ãéÃáãÁšè-þÕ›Fe‡OôGg%ïrHþø¡8š˜=Åp|9à¿]sîþrøþ³Ã¿¶cÜ‘LÎ�œ?þòca ›˜b´^ae°¬c…彉‘|PXÁÜbÎ bø($ç¬1$'¯± †%…• Kt|Îʃ¢�1\öQa9 9Y«ò ˆaRxΛ€M�œ )SVy<Iã1›Åy§ñ² !ø¤ñ²øl�Æó�Å;«ñ ‹pŠ/@lUd¡YãEÈBØ�¬ðd�u%•Yl°Nãe6>'•—Á³)¦sYo|b¶Ï9ãa›¬òàQPRˆ +� K°>«<ÈâÙ’ÆcÈ"øÑxÀ Ï1%Å[©x7[vÏC¢(*²@ùP€,6 àA¦à’†£‘L¢�%6’$i(@)‰‘5 ì�„5`ëÀ#§[Èâ%hHÀ²•—�‹ØqÅo±ËÆ…�5,ðÀ]*Ö°ÀwŸIÃ`¼AD%  îj¼@&EÀµÊK๨aAŒbŠ�†¨¥L‚ÓkX€7%]Ò°b€çD˜! \EÄ"“™¹Æs�I¶†ÈtÁsNÂD�Ù †‰ªÌ`5,@„F-‰­ÖxbK�™4,HLI5,€› ÒRª<Șаú)ŶװÅŠM”9*²° R¢Rn& R‚,dIÃØf©7£†ÙBd|dLI“5,Œƒg­†Ù%Ô›$À/K½™4,ÈlQo¢ÄSü6s(õfÔ° dñHQTdAÒ”¿&¡Þ:i¼Y(‹†9„Ro& �f ÞDF¯ ¤RoFõ¸¸ë3�Iãw‘™ Ð@½‰ÌV«í-€×Gäg:3•Š3©'Ðë[Õ# ìE´Šê™�ø–I=4€˜¨,SPO VÁtV=6°À_äcr† ËéÓ|D`13År“n!Èî{Í1ºñ…nËùØ/?¾xBð=þôïÃógõ¤¬ý8$µ· ¿‚P†º=²o‡ÛgÈ⩊É^Õ¹,óË×c¶"^ùw<¿ØÈ +Q¿«ër_7#n×u é¼dà<�P°ÖÓÀIÔWù¶(‡_úp¦‚G02d’V6�¿~w€i®R,§ž½9‰�‰òWÈß}8|ñí÷_}õî¯0œwχþ`aK_~îÊwÜ~{¿¶ÓÚÛoT£p |<>Oø¸…îøÂu‘«´íòñm½çí¼…'뵜V¯í÷“<¾õÿòïÇwßþøn«´š»-öURÄ‹tKÏ÷ ù=ÿêE!xE½]mi·¥QWoQ+€¥g|#µZé ´©ðÞ/m�WÆP3©•Ï0:­ó¾ŸÆÉ?¯ÕÍjîû´¬Ávš7¬²¬óÔ1˜Ë!Ûç×ßJô òë&VΧ_kcwŽy4#C�pÍÊþ´ûf+ÝɱoW¹xš×L«l§õ~à +†©È~Ášøõˆu瘇³&¹ŠY¿žß¾Ò2' {•e†ÅšQ¡þʸó‹¼`Uþ uߘ‡³ªë‰ÎÛýõ"âoh™¯Žz#M’ìQˆ8)Åßu‹ºoÌÃYÔõÜêñ5ø;DæžâëÖC#ÿ‘rd!ÃzîóhÖC×s¦^ä´ˆv™zQ+€ZÑÓûæ‘ÑË>£÷#£ß^Aï·™k×§e²ã]nïFu¡ÉÞ+�<æÜW#u½wržVú,çó¶O-Ji·²:º`•SU�I—s¢ëVyߘ‡³Êë¹WÛõn…ûc?´|¶Ë»Z²hblÐ4Vµtc­ßÅZã¶ß™º+Ö¹uôãŠÆ³Ë÷§{áë}CŽw瘇³Þ‡Y{LÝ^]ÀȪÑÝaSÕR³HÚ—§ÞÈî +®QûÒ�­còÖ"ú{¯z?YíCÿ¡`hãÑ�y¶ØKÞvæ!n‡µOŸ€¯o8�»sÌÃYèõœñ‘ðµ{K^´{�•Ìdz³¥øÝ±qÇÏçÝ·ây 7^ÖðûIÓpö4�±Ûu6X»ÏšÚw<¿§6ß%¬åéüΊ©…Ì­êçÎ1�fÉ|#ý¤<챊î4W­7.ѺYÓFÛª1Õ#N“Æ×*Så³ÿõW“QýUÙÞ3¬²Æ…ŠJ­&éœWñ6ܰ¬‘;JLƱÄnYÖ}cβ®ç››íÂ/Lçü­[Åli-\?Íçµ�×sÅ}tíò4i[©t6ÑõI·’{Ï'h®šü®�fÍûý¹…c#¤d�Kå½�[Övߘ‡³¶û~—û¿ª…{¿}޸ǣٲšðí¦µ4øn}Ê$zl—w\Ÿ vzh¥+þf—z>Ä¥=6r,?{E†Uƒáˆ)ËëeœŽH•$ÇòDVQÜßþôÕ×þËtPփذ¸BQXu{7Ê@òeV+lTå•�*)Ìp£ò]n˯ž—€RèTú†åSçZ¯ë<©)j]¯¤e|I¢ãÂßÌï×µ'yê~ºßîá˽Ú>B}’ÐÕ§ÉmäSyÝìÄ”óè˜�åéÅdY\S“«ëŽFÖ—ô>ö^ë{{¶<Ê_ã\^ê›kÿ�UÁ.‹)û_\nyÇÆVr¢Öä—CyÇJ² ¿“\ˆë¥ís‰k;íäŠ&ï{²7v½Ì}röíéYã}Vž}Û:q}úkYX!bdpçär÷Í•\ÞSK†×Vè¢øÐdqL(sß1áx“Œ 8ý9ÑNË 2I“Ç•çšûÖ…Aì¢Ï[ç&õ·¾'u^#žX–÷Ô•ZÞŽiSµÝ%Ûi< •;Õ·ž]!Òõ¤�N…ø¹mS ”Ùù“ÖÊ3Æ 15C’Þ/·~ +étPû­³ù®©Ø{¥14·�¢ SçÔ7^¡Õ=Z©±¼x;ùˆåv¹%‡¢�¦k›&»¡3âéà¥{â ¿|Tzû�Ö7Ó›‰<ÍÛÉÉ{Ô’/WpÍF+Oh–ÿ¨ð�Z�§^8é&Už²­±HñÍNÞnÒLuDÛ'qô�¶ËÅØmvÞ/—¬Ò¿€nïÝwlC�¶l¢ÇÜÄ+ ÕÁcKvÝê:¹@XÛŸŽ•3Ñ6!°Ü ûnÊ/ò�ÓwW…±·Å‚›ÌÝ÷y9tì|™É±kÜ•G滼}ÞÉæñT›ìÉÅôS[d�Éöh7›ˆC0€Â }©äæ­�êoÊ×ËádZÄ=~>Ô0Gì)ã"°+o€ÍY–;þ}¾ÁçŸ9~Û9^â8ÙŽÔ±uCž#Yy_8ÝI.ï7bw›‰H2Áþ »4úúf =ŽMx-c¸ÀÞzºŽ ®sg¢{8‘©›.9žvÆ_!žv»Ø™OÕÍØK“ÛÍa.«7©Ð˜oÍ4xYï«È¡y@¡vhïÔ—™Úo¬P;àéT®Í°mö˜ƒ:�æ¼c‡ú\<ù÷$g¸ÆH-dÓ˜mt¢¦1líàçE¥Ñ6‹¶@Ñá4Ûh}ÆØd +ë°¶-õŽ“ºK±çƒúó¼Ó~ÖJßD?k%œõ-ó¶ˆ×³%î �ŸÍ9Ž»³£gÏ%“B óèN•Ñ“í|mٮݢíqº ‚„‘™Ú1ÌŸõ|þ½Åw–1»S­Wû©'!.�—t¨ÅE&®wŦ€!R^��’¦£‘W�¹~Vr~"ÒÎJæ• #Ì6ºòtt^ÀÈ·ÓTí¯ëèòUoéupñm§sF9 ªB¡ Ö¡ÞŒ¥T,1…KқʋÞÑ:õh¨>Û6Ç'õç¿Ø£š. +endstream +endobj +692 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 691 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +693 0 obj +<< +/Filter /FlateDecode +/Length 4509 +>> +stream +xœí][�d7~ï_ÑÏH1¾”oŠ$@ñ€´(Bˆ‡ÝN„f‘øû|åsl×9]}›Ì&ƒ2™ÌvŸ*_ÊåòWUn·Ç-~¾rø§�3¥Ôœèxútø|°&G‹ÿZ‰ÍCcÿ ¿9�¥l¢«©Äã'&„lr�>§ãÓÿìeñ§Ã·¿8ük[ǽ©5y�ÿþžYL.9Û¨°*XÖ…£ÉÙǤ°’3b­ bÄLžÎYbP-QcA ò¾(¬1eÎYbøìHcA WcVXÎBç­Uyįð\4 JOÏ;“JõUåeð\ö/“2¹è4^5)¥X4A–X­Óx²DGd5d¡P²ÆK�%¤`Udñ%�—!‹‡vªÂ+�ÖUTd±É:�Wƒ‰µ©¼ +ž-¹œó¼�&–¬ÆsÎDØfPyXQ˜¤”ž‡,ÉÆªò K Ök¼Y?8C.EY­žWw°Ái¼Y¼Ï¤ò &_CŸ ‹ÍIƒ¬ ø¤a€ÏÙPõ¤�€/ÁP¡¢¡€/ÕPÎAƒ_£¡T³†Á:ð¼Ó€ XÈ)iHd!¬\•YB% ‚‡,( aA�ÅSа m Ö¢aAÜ’­N¼%ë’†€ 1­†ˆJ"  ¦T5,ÀÜìÔ° t±Ü³†¨bòÀn ’4,ÀÝ@ÎjX@ÀÝPSåA°†@G\ p78›5, à.–‘×°³j`‡IÃØŠñ¥X ¸ë‹% ¸ë3\€ÊËk0hX@À]1Ísw}´^ÃîzòIÊþX5îB¢@¬†ð÷àù a3a‰†¸ë*ÜŸ²¦�VÆ•š4,ˆÀ]W0}*¯—¡qeÝBËÆ¥T5,ˆÀ]8ª aAî>‹†Àx�ê5,ˆÀ]à©5p×ùj5,ˆÀ]Ä Q؃q4,€3ÎÂtU^5¶–¢aAî–¼†ðÂÆ ‰Êˆä4,‹8TÂÜ…{¯$à®�!hX�€»–ö¨<Ȋװq xX¶ÊšF°j¬Rh<à®u˜a�ܵ6W p—ݦ†)3Á  Aì5,H…LÍ9iX�ª!ŸÊKÏQÂlAˆ€,•Y(“†¬M µhX�=d ÞkX�=dAÈ a"S¢o5=€,05? È‚HQà ™)•HÂò1hUã%oJ\«¼žËäL®ØiX€\Ê,z ð†Ã% xŽ4,Ȳ`©hXWdŠGd®ñdA�­a"]ðœÓ° xÈ‚hPÂ⠲Ìd5,€‡F. Uk<²œg +%ᢆX&È4�”*²&4,Àüp²5,@òƒdiŽÊƒ,!’†¥xN7‹†¥@o½†°MÎ7³†ÕBD|T› ‡ÉÆÁ³VÂê +òMO`]r¾Y4,¨Á"ßDЧ¬Ûç›YÂJ�%"DQy�ASUÖ-0 ù&ÐIã%Èâ+iXPSâ|³hX€0ù&"zuK p¾™Õíàn¬@&�ÜEdš4,ÀòMD¶Zno¼1#>Ó™…3΢îX@o„oU· ,°Þ*«{àË9’ºi1‘Y–¤îÀ­‚鬺m`�¿ˆÇè –Ý'¹E•`>³ddŲ D÷#ç˜ÅÂ…bËþØ¿ÿ~øå{8ßãßÿsøø‹¶SÖØ6"/RÀ4fÛWÌö§‚ôqmä'� "Ó9¦{Y€kÚÛ®E#ž‚Œ(èàØbŸ¶tdu¥ÑEw±æZZÈ&¨'1A~: Y@Fº#Ç8ÊÎî$1Ív'yŽäIPç gWS;š~O‡o1ÑŸeS›• ·ÆUîÂöœm¶�<•¹Î©vp.ëÖ%J°ºíTc¦y®å ‰IÖºj”ÃJ—äf±bˆY7¡,Ê p[2gϽ,Þ�7&4É[’t?ÝXFwŽÝ¦bBV7!+L¨ ôžÓ´–Ñ�$JJª êôìjjGÓïémáþ$ —#uþïxþFY©�9†Oú‚¼¸È¤Þ¤îßßÛâû™-¾Äÿåãù›ŸXŽX(bkÙo‹ïmñ½-¾ŸºÈ 9/,È·…÷¶ð~f ï‘�I¡ ”øƒòÀû®q7[Ó’F:új|ò¼¡¼f•Ï©s=å­u©Ç=/uÁ™¶SA›~£CÞk}Hª¬×yqY)Zþ<‰÷Q7ýªBÞ*|Sº»æþ\ÈœÖï)o–~Y1§½Õ’ÐÎÒñ½6zg�ŸwÙï½6zg�—�õ|«ï×ïXí<^+¢Ò> ä:™?Í8¾ûtøå_~ûͯ÷´ùîã᯿²ÇBPë2"‡ÿ“µÄ¿ð[ð zä×�ËsŒ_ÿíøî÷‡QÙq&ï«ù(æÎ¡  +w½ï­½ÒÒ«/_åÀ�n}Mëk§Ç¥w. 3€t zoÏgôµ,ºh¿1,mD¿ò+~Oë¨N³_z¿ÔkíÆåyÈ`W t×~[ýUÞ&Gš2HÙzß­N]úàþgù4[÷šµ˜/OBZÑc“|ÕTŸS{Z{Kk7I¶»…+ÁõöÃ:1M{àöÜwçí¤À!ñ1¥óvš6º†Sý59²¿$‡�ci3ÙÇdzáy–TÙø¸Z²„娴½XâlskYÓªn¯‘9N–…z;i{Y럄%&} ÃZN³ýfÙ~Z×mÏ߯rÄ)·1Ê­óçüU�×½^†ý8!s·…ÜÛ<ï¿­¼;tÅHûÚ…wiÜR/ûyr&1Þ>nÎE/?Æ$æg¿j—ö¯é+¸½¾úøÛayßïì>б–­¬Î]B. µ„b|Ø"ÊM™©ìd^°ckû}ýüæ]ósaÄb™L¨ÍÏñ12_œ�€'4I ¨„o|´Î³|ãê�çƒ/:òüÁ°5ÑÖbiï'õ^ÕŒGâ�·>ëÃâ6ÿøí7ß¼û³p›<qîSw^ =áÄ–I¸ØaMÆV>"´ë°Ã‘k&2�– __oÑ#m‰ Yi1~¼UvÁ'êRRå¹Uge«Òj7W‡«[4njÈ·£êS¸ !ú~*Ю�„VZý ´šwõ?îdŒÝmß=…vj$8MÒ›šç³“P]Êú8oÕæyžÿrš§â±Ê +ÁU^¶ÍX×Y¸Úd¬¼þTL"ÊمⲨ²c޶tЄKAÊyÀg�+ŸöÛuÚVöУvȸÂ.>³ÒÎ8]½;ëü�|ëK`Ÿ�½‚}ö}w7Û#ÙeÅô`ú´å7Z·²îÛ[\ðZNÏ÷÷ÿõýÖð¾f}òÖðE†VÃú¤ .ª ö�L­‘“±m‡×,/"ˆî®³Xã1>_·¼;ë¼6˃Z¯Y^G˜‘Øô×<­£¥˜q}å ˜áÞ_àUÁ »2ß­¯+ßûY®ý~·{¿Öûq}R/Xùa±À&fŠ*Œºn9÷Õy%–3ÅæïR]¶œ[3ÒgaX”ëáöÜ`XÒ®­ÕõºK +t½ŸaÁNi§?‹öÆFHÚZÂ=} ˪‹ü-–ü‘,ÓõM’ÓÄéhÏñýªõ–4-‘O~—vZ÷ºõÞWçµY/â•«ÖK[í�YØ[×ÎZšÅÒı>+ ³´÷´M>÷³{&Ç~Öe¶²¯ÛeËS¶¸ǰª²·‘Uí|Àf•ö>EF¶M�oD ²¿ºê/Îø{o¡É ¬ ÀJv²ñ–g¾³Î«³P_‡Å(9q·–Æÿ‰,y`ìnæ›Li's8ǽiá,!<ŽUwÖyu–p#FÛmÝ­^ðr-¬ÂØüÇucu]לïy<{æ}X7f×ñݪV~à5ZÛý êѬ/û–%˾_úà°p´›VYÖvZ�5Ž´gºü¬LÆf÷ZÙ}u^�•]�çþf÷ÙVº“cÿÜä +¢Î=ý*ÛioZñ�·º?^°¦gÄWwÖymÖ”¯ÇW/·n´LaaYfZóÚüÒ¸óˆEêV•Ýãug�WgU×c¢ç¯×Wà¿ e>êõ²ØËÊó…ÝŠ²ï¬óê,êzlõúgðÇöÌúï'(2ò`"tóXL{;n_ú°JûøXJÉ=wZÞ·�ÐÇ'[¾èá•»�§ð—¤§r‡>{õ~Õéšg�½_s·—=ÒR"ñ©7±ßþ¼#-çírô¥Vo ‰û�¾ÜYçÕ}Á$ãs¬>ýHg_v=¾Äá¥ÉGN¿¨ÝüE©þÃÏ¿\ÐÒk<óí‹0ÏѾ8órÚg`®Øè݇`þ´ÞÆ�#º‰.´[t’—; ü¸Yä\ôpøüŒûÙÍÛ3h’¯a ËÁPÍ|s‰z'­±~Gå*¢æU!¾£·›sx¹¸x׮ątOZº§‰þÒ̈vz#ÿ~EòÓÖSŽö»Çòl¼l]s ·É-ú´}>¤vãŽk·®ÙTŒó|-ë1‘á”'×#ßòSl ×§É5źㅚí2ÛÏ£Ôz¿­å+ïøº£åò[ñ°–ÿÜ&ø‚q2©‡ßí.JÛÈ0Û¸'?ø.RRÈD3†¿AfâúÖŽ¶È�” ÓNp€ü¥§]I8»¾�y{»"h ×�½/i²½Ph·¤,+DÔLîœÌ£Gp³’ù>×bÂú”†(Œàƒ8$Yv68+Þ$»`1ž­èn’=uyßÿ5T—&qˆ.UçÄô÷²>‹é¼F<ÐmØSŸT*ß"Ù›êÚõvЂªjì%DŽИ'…Äߊ;#~e{Ó„É|1k|×B,Ý�h”«½œB:ÔrkkqÌT¥Ê¬Z»æ§(ÓÔCŠWh'‘[g¾ Z¬úÛ-™Ó¿1×¶»ñgÄÓ©+�‘Û7!ÏKlj6vÓ“Ä Úäb§½Lj.]UXš�Æ7ñ¿ TÄAeäio “âÛÈæÓì„׿ o•$éi ip”gY¡.—ó°Y©/W¬RžAw”ÛP…Ê=×.ƒÔ�-Ù «d†°®Ÿ�•’h»èn’ã0å§ yÊÇR�vt–œ0÷8Ú�ä4°óI’ó˜qÇWË yG»Âæ;ñÔíÉlú¥w2ÉÞo7;Ä)@a’'Œ>5r_­�øºìþv.2Íãžÿ847çCôœ¢%Áyû}Hwü/Êü¿ÿ<Ðñ�ý+¼‹÷v …غ!KOÆ÷j—;É|Ïv'Že#ˆžìO²+³lìÖ0ü¸÷¯iV·Ø{I7Ô ®$Æ©CAöÃt½ B3ñ +ñ´Óâd~èÜL‡½<†>8N8ùR·.äpðX&/L—|M≋N—.yQ²Q<Šë”l#&¤ìd¨žå'9�û"ŒàÇ0y4ݬlºÓÚ(D„ÀA>ȆÉÉNëFEèg/¯<ï«È©¯¦hÔ'Icê<�ÚcÚ>ŸÚúâ�m±öÂræÒ˜¡m¤� +j™ÕÖQvJ�¶é´;Š ÙN-æ.SZ«uµ´UKyÄ“ú©é(ge(1ÊYIge¹ÝîñF´F¥9ç9:;KŽX²(´$k*Í’¡ÓÎû¦mßÝÛÅ0h +’fdjgµxVòYø÷œµ£~+]+ÕÚNˆ+ó2K8jr9øÐþ>‰-)Cˆ¯˜ÎTÄÖÈÃu®ï•\¾KQö„é0‚ÍŽÿÒŒ.Âõ6C4Õÿ +�^­ZuH�)@Ù +š0wv‡€kj }ÖÝ6„ÆcæT‘ÿ²oϕ¢g{áN�öññfû¤ýüö_Í€ +endstream +endobj +694 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 693 0 R +/Resources 4 0 R +/Annots [ 695 0 R 696 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +695 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 563.554475 101.433071 544.804475 ] +/BS << +/W 0 +>> +/Dest (cb139-1) +>> +endobj +696 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 100.307453 101.433071 81.557453 ] +/BS << +/W 0 +>> +/Dest (cb142-1) +>> +endobj +697 0 obj +<< +/Filter /FlateDecode +/Length 3420 +>> +stream +xœÕœ[‹\ÇÇßçS̳Aíîªêƒ IÀÁL¤‘Ö&¬ròõó¯sN_f¦æ²+Ùl4ì¾Ôé®þUuÏ…½ÇëUÀ¯"Á•Rs’ýáÓîóλ=þ-%Ž.õüä¸^²‹¡¦÷ŸTÀÙå)§ýã¿N.çâ�»Ÿ¾Ùýû¸NØ“«5Qˆûß>ªJØå’³�†ªBåª]Γ¡JÁákµT0#f!9We˜!µDK3„¨ª3XràsU…”ƒX*˜j̆*xØÈ{SC¼“¡ Ñ% z²t\*•ª©ËÐ…L–ŽÙ¥,!KW]J)K'°%V,]„-1ˆxK[„K¶t ¶pboê` •Ì–.ÃÂèTCW` ¼«˜:Øâ“–®²‹µˆ˜º +�/¹œëÈG ³·t!¸ßdS‡…IJÙÐlI>VS["{²t [/KNDÎ¥«•tu³ç`é"l!Êbê` &ß"%Øâs²€ä”K(g'•Ä‚vR¤X R�ą̈F'©f‹ìt,°‡-Q’E°E°rMlá* ˜` +X,`†-$l±€A[�·X,`àV|  ¼’Åpa¦·XÀ .—$ È…+U‹ æ2Øi±€],÷l±€A]މ,0°ËR’ÅwY‚·X à.3jš:ضX::…-¸ËÁg‹îb‘Å̪ƒ&‹ðG¥x‹îRñb±@À]ʦ.;¬A¶X à.EÜ‚¹Á]Šž,¸KBÉbÅ�?ÞÌÀ] $Úél`- ÞCGl±�9BZb± ‚»¡"ük´r¡Ôd± ‚»¡`úL]u!cÄ�u‹Qv!¥j± ‚»Tl± ‚»Àg±XÆ;DT²XÁÝÀˆÔ–Ü T½Å‚î"oˆ à. °X€øæ‚‡ëšºê|-ÅbAw�%²X€(ì|IL]vp¤`±0vy¨Å‚î"¼W‹ Üõ‘ÙbAw½ í1u°… Y,@^–­±¦‘¬:O …¥w}À [:p×û\-$pWæł”U@Åb tÈ‚ÉbA*âjÎÉbAª:¤|¦.9\G‹ÙC�,S[$‹Å$Ö®r- 2Á&²X� ¶ e°X€ŒÀÕ€ìÛÜÀ¸‹¹?Ø‚LÑbHæJ±X�cÂ~ £jé¹’�kSW  ÙbAÎ⊃Åì¥\Á¢·XÀ;M—,À è‚X,ȶ`©X,@(r…�™[º[�d[,@¦ ] +Ádƒ +ì2“·X€�½$†ÚÒ‰×}f±XP$9M-`™`§ Rš:ØLX,Àüèf;Z,Àæ›MlsLlá( J!Ýn‹¥Àòd±¾©ûÍl± zØ‚ŒÏbAõÉišl±‡Î{‹5ì7I,`]ê~³X,¨ì±ßÄÏX·•“î7³Å‚*°%"E1u°IS5Ö-˜„ý&èdél¡* jJºß, �f`¿‰ŒÞ<(ºßÌæq¸+ÈdéÀ]d¦Éb.°ßDfkíí=À3ò3[YtÇYÌôFÄVóÈÀƒ½ˆVÙ<3ð€¯î‘ÌC˜‰�eIæ©Â*”Á›ÇüE>&gLXOŸæ#ªwȈ™%ëMV, Avß÷£_(¶ž�ýöËîÛw¾û_þ³{øf9)k¯€a)-ðg,ª˜îˆì;àö9!‘Ó¸¬ŒRaß3ª¨ ¹ ¸¹©‰~úoþæÈn˜ýæ¸w„0£{¢jÚz³ôW4ó|Ø¿»_ֳͤmck—ô8‹Œ@ ¸ÑÛO»oÿñ—×ßÿõoð‹·»Ÿÿ§/ÞÇ÷øbïáÁd}Ÿ5cÒ³†õ:ªNåZæ»îßþ0÷IºÍ®šÐ÷©Ý„kñ?¿]ÆŒûüfdIë�i㱃ÀÂ-Ú—xb•/ëmˆq HbpØè“B+wçålÜ¥u¾E¿ »s`B€Nq™†zýúíßÇ4øw#T +ê ïÃw¯‚Ž_x/k�9¬²˜Ö¿‹¬l2Ñ)[ß‹lF9LãZކìKlaZÝ¥·ã׉[ßÍÖ îµÕ÷“mùøolõÊñ=ö{½8¶¿©lÞ?J„¼÷–¿ÝWå…øÛ°‹ñŠ¿éø·9o>°ø_÷~¶zm”;�.r( ¢_Q‡L^!ãæ%3ˆªzÊ ²Xs!0¡F$Ò'^£Ò¦ݹ€Ð™Ò ·¸³Î ñ‹Î!¤bWý"óÀò‘Îý‹YïWN˜º:éø¤Ì‡Á•�rËχ“÷[½e½Üìjl;ñWeJ÷Ùö÷ýÐw¾´ë‡ÿŽÓý. »à9ØbµhÄ:SR5 ¼î9÷Õy!ž3ÌFxÅsnÍH›…îQº¶ë ·À Ôô³¾> ù¸î¢»ÑO÷à`´sB3mï4¢4O¸§¯îYuµ‰d�g¶è#zFá¯zoäá‰zÎU–³‰ëÞ{_�ç½é*÷ž›,ûÔ\©ÏÊùìžÙq:ë~*{Z·Ù–‡mñä>ºW•S9�ým¥­ÒÖçœÇm+w)w’cžæ GýÕmüâå|�rg%ƒ•dãÍÈ|_�ç¡õ*_ïLúK=¹3ödæ›Ò‰Í|νáá¶'°:«î¬óÒ<�oähmæÊɨ^ˆrKZ…{#dÍŒ-¼lëZ·þ„kRÝûõÚÒij^µéY×üak÷ýTOFý¹¯îYsÙwkšövÓfËÖÎRgË#ýÃÓïCw¶ý¼lÎÍîõ²ûê¼8/»žÏý?Ìî³½ôÄŽÓëÅ.žÚÙN6ÛÛý¦�‡Em¿àMÏȯî¬óâ¼éz~õõÖí=sò°'yfÚöµùksç)yÁ«ò3u_�çU×s¢ç¯×GÏ|jÔ“é,+ÌìV–}g�—æQr=·zù3øGGæî1o¶�õrÄàÆÀËãÉOŸv7¹Yä†Wœ¦Ø>›ÛëëòÇ^hRŸçç²'L~Íú¸ù©WÚ†1mÇÞuª°%#zÙ¤uƒ•ÖÍJ\6Xëá´| åp:­åõpZ·Â*'Ù>5ÛtíýÒNiÇè[ï¶Cm=ÐÙ>�;j?n}OöÈvPÞï!¶{8›¶Ï»´<º–Ç÷¼†kÒçû÷IœzS®{}\¤x–Ц),öj.ߊøÜKm_”ðúì¤>7³~‹bºØÊ^&øÓ.Tq:þº@ׇšý".Ô.†øq§µ‹!qt§X…Û[ßÛ’Ð +vÙa§ŸžÔÓ’ÛÇΡöÆõd}}K±Ý�Ö�­š>l ¾âåãöµcCˆš)œ‹õî½ ›X¿PoW©›S³ÂÑ ÌeGƒ£âMq`? ã¹ÐOÝ 1I³'èƒd}èÒvÓç¡ Óô·²”§é¼&<ìÐ-ŸJM©>ŽÜšj£K¾Ëx2ªvil%û„HŸ'CtØÂW¾5-˜Ì®ŸfMêZ…¥9’ôrµ•3D‡�Ynk-ö™Ê½TUkùaÊpu.}à Ù2F›4ë7�¦5‚L�Ú<Ìâ¤3ÐæÚ—ÉoèLxØEé+qˆw1¥ã`…�Íõf!OívqñÃ_†™ó6TXšM¦�Äèï±K•<Ë› Ý¥ô±¶q5:ѵÙÅǃ4ËS§ŽX#$�²Óp…œ»ÏÎãŠ7Ê+t{é>bGÒiÈ&y®Í<…T‡Ç±8t¯ëbEXŸÎÊYè›ènˆcwåÇ#ñ°3ö¥ +go�¥0¹{ìíqêì|œÅ¹ÏxÐg»½½ÝÉç›ð°69«ë—ÖÉ“ïÑnt6 ‡a€ÂŒ>.â¶Z;�ô{WííXdVÄ=ì~Ý-aŽ8RÅ›ÄA¹Ÿ³¬°ÿ/Êü€Ÿídÿc{Æk�ãä;-¨³õHRk•j¯å$$”ñT4µ„ÌÄËÝ}I ý®R–2�<¹Îõ³’ó‘vV2÷„épÂìsÐÿ²À6áŠz[15Õþ;»Zõæ-=m.>^n?½|gu9F\„úeÖ­¢~E�5é-úͺìíç—“¹rt|²¼þÆÂ@Ò +endstream +endobj +698 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 697 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +699 0 obj +<< +/Filter /FlateDecode +/Length 4776 +>> +stream +xœí]K‹$¹¾×¯¨³aÓz„^`vÁ6Øø`³ãÃtí´Ócûà¿ï/”))23êÕ3»[x{šž®ŒÐ#Šø¡RfÚ£ÁÏWÿe²SÎ%E:ž>>Ì”‚Á¿ZbuQÙÆo +Gk(MÁ–˜Ãñ#|šR .ÅãËÿm.eñ—Ãw¿:ük]ÇÝTJt6ÿý�Yä§”S2Aa°Œõ ++„)%¢ÂŠvÂKÑX#$r´g%ˆA%�1ȹ¬°2Äð”¬ß³ +ÄpÉ’Æ‚¶„¤°¬�Ö£ò ˆ!òNáÙ0E(=j³†Àø +ªÓ° w­ÇJ­ñ€»Ö£aAî"nÀ&‹@ìo“50]•W&SrÖ° wKNì“É@•—&’Õ°`<Ä¡Dà.–÷¢aAîšà½†¸ka�ʃ,>; ×€·U|Áêd�Bãw�Å k<à®1©hX�»¼ljX\Ö°Nˆ‚�†1ÓTRŠÄbÀCȧòâ„ë aA2 @–ʃ,”HÃÖSñ%kX�dñÎiX�dAÈ a"‚©XDßjzY`.j~@�‘¢†@²)" RˆÈÇ U�Ý”àZåeðlÒ° %š°[ �KMN¯a~âpIÈž% R�,p °MÙ!2×x² ÈÖ°‘.xÖjX�dA4¨aAvYf4`…F. Uk<2œgf 2ʼnCE à&È4�”*²&4,Àüp²4,@òƒdiŽÊƒ,>�†9;N7³†9Cgœ†°MÎ7“†Å@D|'“5,ŒƒgŒ†Åf䛎4,€_r¾™5,(Þ ßDЧømñ‘óͤaA!È¢¨<È‚ ©(~ LB¾ tÒx²¸B”9ßÌ Ì@¾‰ˆ^ÝÈœo&u»¸ +�Iãw™F p�|‘­–ÛoHˆÏtfæŒ3«;а¶ª[Ø‹Õ*©{àË9’ºi1‘Yæ¨î`YÓuÛÀ�ÑæÝ'¹Ea kfN<È· D÷=çÅü™bóþØ¿ÿqøõ{,¾Çüçðü«ºSÖ~Ø6;)`³í +fûã +Azˆ¸6 +ò È‘é†ìÓ­,À5n‰u×¢OAFZ +t°l±/k:²Á\é¢;ĵ­´�MPOb$‚ür@²€ŒtCa”íÝI"�vyŒäEPÇ GWC;š~O‡ï0ÑŸdC›•„e��ñ …ñYS�Ux.Ssm±º,{—(Á†h×s�©æÉ–S$fYëÿEèQŽWh]’«ÉŠ1&݆’l(1­ɜ>·²ø´#®lh�×6$鈚šµôî,¯+Š e݆²°¡ŒÒ[rˆ£lïN¥ EÕ†:u zt5´£é÷ôæ¹?‹çr¨ÎÿŽû +Ê®´ÓÇðQwȳN¶Ò›Ðý›ó½9ß/Ìù"ÿKÇý‡;œO +,F,±²ì7ç{s¾7ç»ÓùT'»/ä<ã�oŽ÷æx¿0Ç»'äDR8yŠüM9ù8å0‹›ÌT“F:º2¹èxGyÉ*_Sçr&Ê{ë.P9öz^j½�êV­ú y¯q>ª²Þ]ç‹Ëlæ/”x#uÕ¯*äµÂW¥»iî!KQú%>ca²wYöÆJ_PèýÕ·ï˜Ñz  MD¹~�ÅçJoÂß}<üú¯¿ûæÛßÿ³õîùð·ßcë¹ c\6¦k(â7Í4¸§ n¾¦üõß�ïþp¦>ÛÑûàf]œ«ÂÎ üžðû×Ü º„âæîN£\£•}æ.A�s·æiúɵ¯Æ¥pBç"Ÿ4p>7)løú+ËѺ¥6Йìò7.=Ì=sÙ*áÓLoïèKYÿV.£är•¶—¯í-24…÷6>,mœ®ÔM«‹ìf©×Æ–ÆøVuòZ¥­V[‹”‡FjËÛžüòËšp‹DËuM³�eDæ ³Cb4IÔ3ëòUc§eq?®äÆC„n“>4›ší�µYgèû};Ñó—7|@hߎYÆ5�Yب*‡wæœfŒe¥áŠl|P,V+m7ªnû¼Œ‘Ûz/-WX‘âöAZp³¼(ꤥýE�Ãê–¶Îøölñ£º†KåÆá/ë™¶ºh2Õ~ÂìMÁ+:¶£Ÿ¦›*óóÐQ›£5\Ñ£ðÙôZ{q¯Ôï9½)ÞχGeŸõúÃb×;Â2þVn±}ë.ê1nõØ}Ï +™›¥Öæ^¬×ÐìÚÌò¿ÛV�½¯(d^–¨°ZŽt›ê¶{nžÝ ¿¸¨‹¼Ó…DÑ6®¼–µêÃÞ¿*Tì½cpæ’ìdãFö[×¶Üðå·ïjHã{�Hh¨Ô�†¸¹l]À²€œ‡ê! {ë¼*°\¢žÉñ Œ9þÊÚ Ä*ÙÐ6²Ôz�UÓ/­]^Në¬w~ŽŒþôÝ7ß¼û‹ˆŒØÔ–‚N-h˜éÁ‹àaž„³–8™Â‡—66¸®S»,y<ÅÆ}¹EçXF\$¥Åð|­6åzÖ/FUžkµQ¥°Uiµ/i¬{ãµÞ_Õžç“tHèâ9íõ¶ÒÒv NR F®ŒÈ#;õ|hYÑUmzž]ª§^¡M2œgçÃO£MÊ^• ¡Ãy[ eÑìÅ>=aÓ1¨Þá³MjîQsާõ¢¸ +ðü¹ mñièÂç7�VMž9>ÞÙ ê0�"ÒE�»±Îç¤z?ÖŸ.a�y/—ªÍœ‡µ‡�¥h)÷¼.o–P³Û¬H :nníjÛ§ýÕ�–æÏ~IlÜb+¹?lÚ8ýIJÞî!åK~Ñm>�`¸rÝ/Ê€TÈf¤tÒ'h*%pV¾îð’O ³höͦ‘Cóá¡‹>qc�Gó‰È§ÔÎûÄõ•eÞTàËŸù0Ûãé /ÏüÆ[•ù~ù»ð�[øí÷ûå/-ŸI´ÅñÈÆ6›ÍÖµb±ù–J÷qÐÚ'.®7·è¢úá«r¥[ˆçY¤â®ZÕmuΆØä/YUÓ`GÕíÌ¥5º�DÝÍÌ]C76¢K³7'�k9h‹vaX®��ìÕãš¶²®+}©cl[Y~Ó§ÙZÞç¯\³¾ÎXpèGSë‰#è+|[�‡³àø*\|Hkº‚[ÕržÛÖš×=°Ñ&.–èì�Öù$Ú$ÝB·cè庼g¬3•û­ó¶:g�å"¾Ê•kgYMÛe¿úUßÏcÅ]Í\^—í×[Ìn}»!Cͨ¶|³‘«•ßXëV¦�\b¬ýó¦¯Ý*/qòyÓï™5¨Gg¬/�øÉ,ßå›íµÕýÆ:�f}érÌØW÷†ÛœÄγz .½~–D|ù3YÊmcRvõ(»DYÄ�ÖMÅdÇÏ3¸l­·Õy8k½«î4¸Å9_­Vþ÷ +V~!Ë¿wÅ|h/�ßšóYFLIXÝšëžæëÆã­\¶ãít,Vî´´÷$ڢѦ죗”eßÏý2¢õvã"CÛ0â:|�‚�¶?ÿòwCûóòœ¸0#Áúú|ÏhÄcçºq]-rÅ”ö©k÷3ïi¶>‰Œ&ù>,¦$~¦¢z>?.˳Ö¨š§À.ªä“ªí¬rÝ+[Vµý›ù&©Ãë¹ååF¨zS™é®ßH¹´µ|ÞÞXXû[n¬7B‰ÁzûíÆ,!Ïê&²%3˜Ç°›¶O‡XŸjëó  "ëø…Çççy(G~þh6žl›&[k�gjÖ×l|꥖7o~7?ˆu~-‡¸Xʪüñ` M¬ÿzWn}J¾©äzhfC~9ð[H!�[{¯�™¸|4½-²ýNáF;ùi ›’>Lfù8n'æC×óGÚh¸~hÕøé•dZ!_Ÿß8w¬Q3Ú=™Go&»�ùMyòËUì¢ð L�8$Yv48*^%[o1ì‰Ft7ÈŽš<–ŸLÜU±‹.UgÅô·².‰é¼D<ЭßR_T*?ß¾5Õ´ëL§y!TéÔÐJö ¡>O +‰×±#~eZÓ„Éì|1kü”à™˜›!Q/WZ9…t:¨å–ÖBŸ©ÔKåQµ4ÍQ†©ûܯÐNâ–ûįÎ>b|û¸&óß}®MvãvÄÓ)íÈõ-ûÒa`… Íô$Ñ‹v;9›a/ƒÊ'HçOpÍFãg¬òÿ3T„Neä©,u“âç$�«Ñ ûf'¯•$é±£i°”FY¡.›R·Y©/D JyÝ^ºklE*t¤/¦7;x¬É¶[]'3„5ýt¬”DÓ„@wƒº)¿¬ÈCÎÐ]5˜ÞY´ÂÜCow�cÇÎIN}Æ-?ôºËÛÛ6߈§º°Ñ–̦Ÿ['ƒìL_íFg‚8( ò€Ñ—JnÞÚщ_äÓ>'ÓVÜÓá‡C]朎ïNŽÞò;d”e�ÿE™?à÷Ÿ:þ©=[h^Ç�éhá:¶®Èr%ã7þäÉü Fìn#ˆŽì²Í£lhÖÐ×qç^Ó¨n°·’¶#¨í\I C‡‚ìºé:ë…fÂâi£ÅÈ|îÜŒ{¾ômp|·5?nºI… 9\æÁócI>Š&qÅEÇ’.9Q²Q\ŠË�l%&¤ì¤«žå'9žû"ŒàK?x4–YÙt£ÕQˆ"�½¼� “•�–•<ŠÐ¯v¯Ïž÷EäØ<€©Ú;õERûÀ˜ÚO§úz×—}ÍñõÆåæ¼CC½-/|Ï÷ g¸Æ-hu!mTP󨶲Sj´U§m¡èpši´Þbj2Å¥ZSKqVµ”zL1¨?HM9+]‰AÎJÜ•åvۊף%ß  Í9�Ñ™Q²Ç’Y¡EY»Si”ô�¶ï›Ö}·Õö(†AC�8"S3ª…]ÉWáßk|G}ð˜VªýÔ�›Çcö±P“MÞùúæD“c†¿ü&‘x¸Úýu.È»ì Ó1‘÷&Y~¦. å:C4ÕÞ�©W+FÒ} +P¶‚ÌígëKÐêÞcÝê—‰SE~ç¡ç 7ó«š’9󨏧ÝöIýùµNlk +endstream +endobj +700 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 699 0 R +/Resources 4 0 R +/Annots [ 701 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +701 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 512.554475 101.433071 493.804475 ] +/BS << +/W 0 +>> +/Dest (cb145-1) +>> +endobj +702 0 obj +<< +/Filter /FlateDecode +/Length 4689 +>> +stream +xœí]ÛŽä¶}ï¯èg¦y)Þ€À€$øÁÀFäag6“ °ó�ßÏ¡Z¼ˆ*µØÝ³k­“ÌN«Š¤JäáaU‰j©³ÄÏ— +ÿR"„è�Ÿ<ýt’Â[‰S‰ÅÁ¤þ¿Þž•$/¬Š.Øó�I`¼ðÑjïί'ü×¶Å_O?|qúײŽ:k£ÓÊžþ[R‘>x/-£ŠPIe•µÂ{m£rJàcäT0ÃzÒ´Vy˜A1XN3HëÀ¨Ì0ä•Y«"ÌÐ^§‚*ZϨ”„JKÉê`ˆ$2šÑ)+:Ýq:­„ QGVç¡S^s:c„ó¤¬âtQ8çlàt[l”ŠÓYØb‘ät°…LðœÎÁãŒdu°Eo8�‡-½]€-@W`u°E:©8]4ÂÆ@Äê"t2ø°Öii… ÆHN§”°À¦au˜Q$ç�†-NÚÈê`‹5Rs:[?œÇÚÁéG˜A"ñÇÚ{AQG:A�Ç:DAÞŽt´‚\ô© ÓŠ##a‹%Ç1�Q°…0sYl1‘8.0¶ ÇÆÀM†ã¶% …ãº%Ç|KR9Ž fJŽ ×GP. 9.0à\îä¸À€t1Ý=Ǭk¬ÓЮ¡à8.0à]CJr\@à]cP“ÕÁ˜ã°£0*Ž ¼k”ôxÓHs\€QÀ¡ã¸X:Éq�wu�Äq�wµÇÀê¼À4xW[\·rƒwµ•šãïjÒŽãE€$ë €wA!–w` –ã¬÷ÐiÃqn Ǽ«"–?fNƒ­„ +Ñq\`Á»*`øX]ʣǙy‹^ʹÈq�ïb¡2Xð.è3p\ŽXQ5Ǽ« VjNÞU:JŽ ,x~ƒå¸p +ÇXß„’€.«‹BÆ8.°à]В渫°�LÂê¼�Ç c!á‡r\àÀ»XÞ#Ǽ+­18ð®$¸=¬¶˜ 9.€_¦-3§á¬ +©Áœ¼+F˜Ó�w¥ô‘ãÞMË&ÇÎ'�À@/Xs\à‰è½ã¸ÀE \>VçŽ-Ç^B`AY¬¶�'Ž àX‹hbà¸ÀkØb´æ¸ÀkØ—�ãx"*xßlx[6> ØO‘ã0™‘ˆãoâ1ô*§sZºfu:å9.ðž–bÅqb)0é9.Á‹ä.q\3 SÄq��°S…ã,E"hxæœNÁ8ÙÀÓ…N)Ž ‚†-ð9.: Êt’ã¬Ðˆ%ÑÕœŽdŠ3Ç�œH®"ǘ&ˆ4Á”¬¶€&8.Àø¤`Ûr\€àÁ&ÂV[Œ%Ž BÐ)Ü „[´Ô›)ÞôD [àñq\¥ÉMæ¸4�”Dojâ¸ó2Å›�ã‚h$âM„x̼�Æ¥xÓs\ ¶X¸(¬¶ÀiŠÌ¼'!Þ;q:[t$Ž ¢s)Þ ÀÍ@¼ �žM „oz6]ÞµÌÄéÀ»ðLÇ8@¼ Ï–‹í%ˆ×zøg¼2¤ˆ3° êµX[Ù”�÷bµòlÎ@‚|SŒÄ& `&"ËàØ¬–U(•dÓü ŒVœpÉ>µ)*8x¬™Á§‹Œ˜ï¾Äµ˜Ù(vÉ�ýü÷ÓWï±øžÿþïÓËS¦,ÿ(8Si‚…i #†ÛÂûV¸|ã0ÐJLBš,„�÷ÔIFøX�T Å9é–ŒÄò—þ�×–Ãðï§Ó›rúˆUürú”4‚ç‘ð¾N¹ÁÆâ«¼¡ÁÁV[‡2&êÄN€üJI‹Â¿}wPg+.9Ðrؘ�õÁ0i{~÷ãé«ï~øæ›wŒÞ½œþòÌ‘')Iý¥JŸiþàW¹*W¿�!P¯eßãe@äE–ê¤ör;˜´Rá ùTÐÚ‹ÜêüMe°&^Η>¿Ÿ??mèæ¿“Îte>Ìg½ÖµÜôû�ÿ<•Ñ_ÿõüîÛÓïÞ-�0y‡ ˜4Fõvƪ<‚��„šW S†Í,‡/%uóÓßæ¿aÖÉZ®~z™�ÝX;ùsn�æzä›2¹>ueæölX^Cö�Õn¾®\ÇÆz® nrnÛm´�Û´Kû.Pݶ{ Æ)ËžA G&JDùfǃuŽdD:×�Ü�ZݾÇÓËù¸E­[Ê2²§QÚ9‡¥–h*ç”WÐs7ZŽÖè5tó +>Xçpè¥ë<¬íFá&ätkŸ?G´ìôÇÆuÞÒOÓuÐR_y|­Õy$ÓÁABÖu´ŽÕ9Z¯;š#«kï f”¿Ï ¢ÞÏu\#£åh$=­�ͬ[̄д延ôÚ†¾­äcª—ëH¤¾�¹}­§ÕÍîskßÂS’ЊÑÂÆêa;~iÏ?=×4#Vz_WÝ4zsÈAO’]]ûsÄíµKËvo +…hþõ—cVg›ðå½…x4éêç‘ §wnMƒuކ&}Ý7\‡qÝ“C>]ÇI![þZ\ËH¤îœ=òÚhåe‰®Â™²CïScOnçCµ£ ¸ ’{ÎÜäõ ¤UŸŒRj^¥íÒÆêi×ý8Î/¡XG¢¬~íhüß7[úf×fÓó²ö" }GŽp°Îá�¹ã³u£m;d¬c›íü›Ö¿+¼3ûq,ÏÌ£?­z®96Ýg=׉W|¹nõNèê³WÜÊ=ÙlººšAÖµ~pëv³û}žÑh ·Ç»ƒu‡ÆëþÝaøî-�¥jùULùÂð[=Ô\ëÖ¬|Zû©×�ÚÏn¶ï6âß-.5�o­°S¨±ƒÞÁ:GC¯ÙÉ5Þ0m�áøÔœVÊt™¤2sÞw¶·Ù¨+|×öǽ™lco¿3XçphÜñ3ß F¾ê«=ÍEã�õ9E.Kt[œ»Ž0V|õÙDuˆ½ãø`�Ã!vÇ}4æ½%¶ýÎV.–õº}�:{ ]ìÝÏ*nÝX=eÒ?±Ñؾ¹’‡;øp¬Îáµãoî<ïÂí˜Õm<¼•-wòþì:]AÒgëS>â5ñ(v�o9º3x°ÎÑPìvüÑtÝ’·\ÜýksýžñŒŽL¿mø>ÊúYÂFm;÷Ú‰óÃ{ï`‡_�¹ý>Ò`�Ã!sì>üMþXã+þoñÜ ~u{®ó§{dO}˜ü~/ËnÃ-_ÓU¿Q¥/ßQÆù]äŽÕ9rÇ|Í‚”þ)Þv¤;.k³à5‹¾Ñãwøbƒu×ã;Ï·tXïù€Û›bpmúeù8Êd§xJûùqýÀë¦Çù³¯•ñOÞùóÜîÈWägPÚ²#_Ð|åÀ¾Åu°øòmn_ƒuކ/¿ã%Ý;Æoñõo5Æ#×ÑÙÑçg©J;ølôlÛóŒé)âåËß‘M¬s8D]÷n*îÙ”ýùœÙç1û7PuÇ�ØÁ:‡CÕÎnÁ_˜wnÝ7ã›yFíÄýþŽ]zƒu‡”�ìUû¬öÇŠ6ö¯÷û¢Fò²Ü“%œW×ÞK*W“SÈ{’¬Ú°m /|Ó}¥œ¯½š�ÛøR¥;¾�f°ÎÑÐîËR}Œþ£!áÖ½#™¹ö>-¾;ªÝCÖï�èï™ |ÓBhžý.�Á:‡CêØËåoÝMò†yÉÏ/k¶�È;žT¬s8D~‚'HîøÎ¤O2˜gã5¾#»7XçpÛÙ÷è~ú‡¿Iá�Ÿ¡Ú´iÈg< +ÂyôÆæÉ1æÕöbòÁ:GCo|ì›ßô‰‘O…ÐÃîZÜ@ãyÇÁ:‡C㎺±zõÔ‡­\³õ�³¿äÞÔ~wŠd&.c¾ïóàØ äÞñ$ô`�Ã!÷ºûð÷,}j„v»í¸}aoÁ¯�øÛWó}?õeö8÷Ž\ë`�Ã!÷¶'SF¿Qb�¢g MÞ3e×ûç9êöŒNù”£}‘«g¸n®ßîÊé3IMÝõ·Ã6kÈG± õûù½ ÞbP­2Óûvœl^Qà¹[d�ë—FäW/œÓO77ãÌÁé…­&œá`Rôé' ^þý7¿ýÛÇïÜ<óÆÑ¼Q_)Y¾úKO<ÎCá.Ýf'rKÝ“H¤Eú;ÝðI7v^.d�ä:•u—ß©­ùóÔNÈð›Ï—–ãT?%;ýE¿hßÎçnì™Ú°Í5Ø| «aûéä¦wó¨éýlÒ¡tz�ëÙ‘H÷˜|<§÷iHåaRSǪóFÍéµ·?•Ró›pez9^z1Òå5¹ÍÁ\þ§i€<©H"õ"†Ë[+å$:Tñë)½µ”1‘Ѓâ$œ?ÊÒ©\°ÈžÁ¯^ľ¤±BÎciÜØüQÛ|5©¾ÍÕÒÛdHæBfzŸÊåÄŒ5�Z‹ÓÕK¡fqzókf>rÅë²ÍÖ©-[¬wÅÊÈFh×BÙœ®Š5e{TzSXé:W…Åô¶ëT3ü¹¬öÍp^>ŸpZÓK_Yizßdn*÷®–Ef£b‘Ú\² •qbDÏ'Fø¥ÌM³è›QKoíºC•r1—cDÏ'¶ÜÜš-#åK©P«ÆÜóÕ” +uJÇ3²©�f©O¯²næˆ4ùãRìÒä±–¡Á�^ ŸO–ÊL¬âדõLi[¹BÚ ½Vhšv‹8ÈŠ—*M[.Ÿ05³,½ó(ý¡ +[¤‰y¦Š +¤Ò{ËêQ=Iš›E¼ì¤Vî +ë׊|-Ût—ò¾`¶í/$S>‘n)]zl!mº¬‘û˜ÍK$UÈc)VuEœ(,÷OáÊV(³8]Ûå×…¸ÚiËTØóÉœjànK»Uì +w¾¶b_F\¥—Ð{K» æ³ðyZب'è‡|’*Ö²¬võd�°R¨âJ£¯“8ÏÖÂNÓ·›Ïë$ãVÜçÓ?NÓ2§�ÕœQé�ª­—¥ÎÿA™oñûÏ�¿Ë/ñº¬ãZ¶Ð…[âv%KoàƒâôFî,,Ó¦jjh¿ŠU¨emFCYǵnøšjuY‰=—T…AUѶB[û°ë]­LÓ3öŠð¹ëÅâÈ<:6uÁ¾š|q8�I¯ËVá ½†ª3uI>7Mâ(­K:´¤›Š8hÅasÂX-[˜™Ùž¤t}²ŸÚ¡0é\ÍAãF¤CSuT—Ù¶é,›®¢)Ø´mäړƅ=ŒÑwO¯‡Ç}6Ùå�¤…Ú‹ôµ•– KÒBx¼ÔL‡nyXÖsNyòÖ*m™fî™âäÔ©Q] Z´m¤¡V› Øö¤”e‹“æ…¢Ðd2ËJ‹>Ûäæj¹[¦+l/ùâSTé?Úž¶í¨”N´í¨¸UÙÔn^ñŠ·dŠd[8ûzu²–,¾d`d®­]¤TKš,[Ÿ›–çÎ«í¹¹ ª†¸ê™ÊZÍ®JÞÅ÷Ì�K�.ëÀ•Ê?S&D…úÚK,Ô¤¼Ñæ“»œ‡Pzµ§Ð¤Fn®s=W²Îˆä\I{& ‡ c¤WÀÛ† ¯PÄ}EÓÔëüÆP¾Z”ì%ÝÖL*¨Òœ\e‚Œ0súrJ•CŸBE§WGËÒ«Ó½TljhÚËû~‘>™~þ }˜ÿ +endstream +endobj +703 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 702 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +704 0 obj +<< +/Filter /FlateDecode +/Length 5035 +>> +stream +xœÝ]]‹$¹±}¯_QφMë#ô—…5\lü`cŒ¹Ó5n›Kï…µü÷}¤LI‘ÊȬ욞½…§ééJ…>"¥£¡P¦J_~¾Óø/’žbLÁÓõöãå§‹š‚SøWr¬.Šøø Éé䣻þ˜l˜Br&øëÛÿ —<ûÛåO¿¸üߺŒ¾š)%o´»þã¯YDv +1åQ‚Hi+ˆœ›B0Î "¯'ÜbJ’j¸@†¶¢5(E'‰ Q„–‚¶[Q‚&h’DPC'‘VÐC¥DQDÖ2í&�N÷’ÌèÉÇd’( �é`$™µ“¤�–diòÞ»(ɺ¸¤´$sÐÅi"%É  Ù$™‡.Ö[%Ê ‹‰ÁJ²] z' ²]€®(Ê ‹òJK²d'—"‘(K�©âVf”›\´VI2­'lZQ†…AòA�èâ•K¢ º8«Œ$³Ð…ð#ÉÀΆ…Ùjòì¶ÊjIæ ‹1�DtÁàK `I\àÀ»0TVâÞ}F‰ Àñ,ª‘¸À�wµ…¥–dà]m’’¸À�wá78‰ ‡IÃ�¸ömÒ +ÐeiR)F‰ x´d$.€žT“ˆ²0HZâ�ñ¤à‡J\àÁ»0ïIâÞUÎZ‰ èOQâ0Ù‘ÄÁy¬ÇЫ’Ì›)е(‹�é qA4Ák‰ °–š"&½Ä ø)»K@ È4I\tÁT‘¸¦hŠž¹$ÓÐN¶Äðt!ÓZâ‚h  ¼A‰ ¢‰Xez%q,4Ö’èjIF*¯3£Ä‘ü”]E‰ 0M°ÒSŠ2èš�¸ã“ÛNâ,~°ØÄ2G”AëHâ‚M^nF‰ b„.F‰ €Í¼Þ $]àñI\�”Ÿ²›,qh2¥$.H:b½iHâÌ˼ތ$«°ÞÄO˜·Éú¼Þ $‚..Š(ƒ.pš’0oÁIXo‚�$™‡.&‘ÄÉû¼ÞŒÀÍÀz½ˆy½Äpx×%0“$ïÂ3õàëMx¶ÒÚ^�x]€& c^qF1b @½¶U (p/¬Uc +ä›×HbÐjbe½5€Y…P+1l À¿ðÇhà sô‰‡¨<à`3cÈ7™0-Þ}[sôlv'ÛûÇß.¿ü ã{ýÛ?/¯¿(‘²ú£á ”Üÿ +ÓÀ$ ·ƒ÷­qûÖgÇ¿¨ÍÞ•97RWKƒ—0[V /ÿ»n?¬t…ªYY”ÆJÈçÕ«¥apO©�° ÆŠÀd+Ùu}w™»*øéÚ>hY×ÞG¼ÝÞI’®ï.óñºæ…¨sp1×íÊJÞÉü±ƒßÛ�`¤m»X4s@Völ¡VÚ¶™’ò ”ÍN,_æ“8AšM?Sù�E>Pa…<|: ãhÜõÓ�—_þþO?üðé�@à§×Ë_þK)ú¬”sß§ñÙ™åo\þÚù/XLÑ ~—t¢åoXþÖüµ?ÿ5y ñ2—ÇŠ½çSC{C=9¿9¡–D%oÑoi“^å2Uל·–ßÔ·ƒnÇ÷–»[îÛÝdÝZµnÝû@«ïÿçúé·—ÿþ´aY=½·çŠ| n¿\S:„«—‡Å±á%>Œ¯ëüyøòI+_‡y©·Èþ:@Çí´©…zê5«¯~v δUî‡Ö°¯÷æöú"mÓ¾ Tõ ×0½••¡œw¢*0á$Mv@±|²Ì³�Y›Còm$r4’uüe4ŒLX«7C½œ +â¨�p6 +«ƒe±¶ÃoM±kä×iþ»"ǰFS›j{??“wÐgßϤ'Ë<úè˜Kÿyî.'�CçÈ•M—Äôf\½ÏÖîí"™;¦9”òªúÉçÊ<’ï8±ÿ‰HÞCÓ;Î9½Ù=׳qÂÇ~àåÇ>{™QKl6Œ³¨êµë0÷4?bCâï¢÷\™§Cï±O»­aÉÒÐÃ-ã°ÌÉ›óÖ†£^:Ϭ8¬¢ÍìÔù^ÄßÓÝ|À}.3€¾°™ÊÐ-΀»mÉ(5Ìï<‹Ò“ež ¥æØWÝEœ÷ÂR¹¡r€¤ŠÖ‚LšýÊ•…~Ð/Þ´;¢D\x+ëýÑöi©ÌGU4M‘èRÏ•y:¤ûµ_k½nÔÕÏmf�(Ôä °úš®nÝGâý„u�£7Óúë6ܯ>àÕâ°'Ë<Z�}×6r¯k””5ø�!†U«¤ad®½�µæ•!šù  ¹7µ�U¿îu]~ƒŽ5%ð»[¨3+×eýûfœy`¶�»Oî Åõ}6ýý‚ˆÈž,ót>ö_Gþ#J«h’gHª=?ðÈC£HÝD¸F�ñGáQšq!Ó5;-›Ò^[Ë 0À­–õkãñ–g°'êUF²Uïçâ“ež ÉöØÇµÂzv³!ô”#;l°íqa­kàRK,ϸ)G¬ =´?ø¨¢ah{àó£ÙXÚ´Û²+¦‘1ý@”÷d™§Ãô�(ï`�³M/ýÖ¹ŸQõÎX7ÄÍuff—˜rlÿhœ÷6’7sgÔ…ë�¶–À ^ñ‘5ý Ó-Ï—µ?T°:ô—hQø}Êø} ¶{²ÌÓá÷NlWÀ犯Gžf¾kñ$¢ZÇW9V¸o:`êŒoûX¤IíÆRˆa·Í�1¾²ÔS⯰Í.¯twKÜXзe?ï¶³µñý1†“ež•wb¶¼ç^–ÝÏ—Þ«å/-=ŠQÒqΓÓ�Yäõ÷‹ü9ç9{£IšYø— q�’Í^Ø^­ÖFß×ne­ÝÍ ‘EÄWO–y6DѱïéöÖ±Ãèn{V­÷wF£ÖÇ.<¹W׈,%ëÒ¸÷Ä +‹£§µ™–8j8UZ�ñ˜@åͱ=ö°Ö#;«Ô=AJnr…´î¡ò\™§Cå×=#p†ÊÔë4�Új”ï”ßCn[ýØmÚJ¿/²´O=†Z8\ÍmnÚ<Σyojy܇3çü¾“ežywü>ÁG¢q-2Ì÷Ò»†YªÊ}õAV#pÚÀ—cd‰? é$òÙ¸îk=6Ñ¢ƒý¥o~Ow,øñnkCq{µ!�~šÊc²uôÛ%{ ÈËÇ'hËèÿù×?üê7¿ãþUm½.¾S›;Ö®¬ÖNÈ+Ü—Êóõ&}cqroåјe­�Àäqn§¥ñè «»øG´èô™[ämÝ%ïm�¦¾µÖ½ô~é÷SmyGÿei¯è×} ò3ý´‘V½s~ÊúÜæÑ×~iÞ¯Ú aòÉæs<–ví26.G +âÜÏ¥¿lëñ6¿ä–RØÖSú¡ö­/ýt G~�wGÕ樓w½¿<fækA·| †ù$Ô=c´×¹Æ\ïë:¦O¡ßSn·]ûå>ã’ïV™b¹ô-u×<¯ ßfÝæ¼ºŒCíWíZgç»—´Ó¿v샆Ít®ãj�Û>ÐË“I¥¬šõWv}oc?¶¶<ÓyYÍžì2‘ÍG½îãq~­Æi雂լÇçŽé×:h}Øonì·}:Ã?]÷ÂŽÏóå~Ü¡>1 ú˜¥^Žå:F¿%ä„ly­'\a¢6NÝñ[N–yèåªtX\Óפ):èÊ!� µ1P­m™¹ša·Áä'•ò¡Cƒ•^øV>•�Â÷Ç5Xçq„Ýë½ÒËÞ‹úÜ+íü”ÆL*}Ôcü½¤æ¢Ø»½gó ð„ý^ïÝXܹ#ÃdóaDÒÝíM›G—Ê[Êô&)š‚�ƺŸ§7)̪H0uûXtKXë¸�ÑE9(Ìbžñ¢SXB¹/k£¸rHìž“±5âù”£”Ï-=¹Gr¼…°œqç‚U'Ë<Éâ¬q]9aaŸëÔçm�æÜÛmj³ù(¾øqðà±ú\Ýåõ`6Ëò}ܸ‘ +ɨ13rŠü¹Ëưi[”èÐÚ`®ô¸©<»ëÅÔù¶åE—8£¢ÓG3ªÍ–°¸Ìl3*Í.F™IÅ•fM)¹ôÐàÑlŠÙ±¯3Þ›M'Ë<ÝlJúh6� +¢Ó²é`U{ÕJßvdQõW±hÈóEµW¶7#hùL¬.Ãf¤_£T �xý‡–ê+7’2 !g7NO–yTuµóI7û¨Ú㑽Mt’8šXÚS=ÍîãÑ—tÆ{|Ï£´òòâ‚Mã8 +qÒ–²ï}ÁçÊ<‚é!^|J4Ý £æU«íµqS¡…·+'Ö×#ô;Ñ)œÕ0"t¼‡qën—_�y?:Ï•y:túC~•š`¬_ÝèäÛüã#ú#_œyXnµ�?>¸2>Ü7 uÔi£Èqç�®�•Ö÷lPùq}ÝÿÃ28Ÿûõ]ë~®ÌÓ¡ïØg<óÒˆ9ÉK��ó/ÿŸ�rî÷¢xÀY<[èÙð¤Õ±»¨_YG¾PšÞà‘á2‹Aj€÷B«þ2Ûòû5†².pò.ÃË–ÊF*�úçw�@ÿ°œFÒi[ÎñôŠ/×@y7ËÖàÁö¸¬«Ž([ÇPeþ"¯H¿Z'Çë0æ6?["iYOjÕ†«ˆòÐÇ•š£y“ª_‰F, eƒdy`ô�@Õc^±�VÕ6xʹR¹|Þ\aC­þº¡ÃôYm*¥^å6ÃöÓÅ—3?u9÷Yyx;&1ÄÕÓ”Ÿ¸éšÏ�Ê’®Ã¤KÇêëNÉòu?µ\Ë7l¨|èv>pµ #¿XòÿTøÇ‹N4åþ/»Âå4|U’‹)’ß.ùÛHH&ê[Ëw’sâòQµºàè›!íV SsZ7©åcßÎΡ”ùc‰¡¶ò®˧T’ª™l9§qnXHDI¯·ÉùîÕ¤—äü�q²Ë•oªä �–Ø+$ž·WØ ÞMÖV±D·MT¬¹žl¨ê£ó Ä­ë|Olªó®Óløk^¬"Í©ÄÛÍÚ1õMLÍçØ×ªjïÕÒ,S*µTWs¶¡6NBÒí"$~§jÕ„Álr6jù4à91V QË—j>!évó-µ¹6R¡åнhª=ßUéP·±u¼�vc�|„ü9lŽ([?®“ó m¬Ud¸1›ÄÛÅQ›‰=ùíâ‚�Ûu®P®B�'ZVoKŽªã¥§æuáü S³¦å³Tóÿ3U¸–š™§|ÐÔ •ÏCîW½‘<7[òº“xºo¬CRh +=/ë.BÃ,ï/,¦„ü™t[îÖc«TÖe,=¤ª^&©FëdÝP×’3…Õþi\ÉUUÍõd× ü¶Jîzº6U�j�yÍàîZ½=Ù7î|ãÉ¡�¸Î‡[7}[½ ó5ñV �Éú±6Ò“�jÖ®7Æ»b …žÜiô­$×ÙÚØ©œì²|ì“L²¸·Ëß/ÅÌëL~ZÁ[�¿«�{Yúú/äù-~ÿ÷B×ß×Ã�g;nTc Ó¸u•Ì-YþfŸx29ÓOMlÓ†%b´ß“uìy]EC³ãÆ0¾¦^\ub¯9ucPݤ<Ñõ>dɦA×hËzÆ$Þ†^lŽÌ׎M7Øó¥­7—Ÿ¾ÈÇJW­pÁo—±Ël7ÉWV%®rÖnÒ!%à +â‚WŠKÖ`êš­ÔÌ€ä�´®Ïú +›ÛbÌ�È—¶Ë¨›Y^uM+wÁ²À¶ü‚WLš7šVúJ?<½¾zÜ•}�9µQ{K}ã©íÆrj#<9Õ–K¿¾l6Ç–êäí=Ôê²lîÙæäô©Ñ] Z]pŒ²ÔØ‹-o”jÚªÑj(] MÕ´Vc¨:ù¥Xí–rÇQì¥Ð|ŠžúwÞÓŽ�JëDÇGÅoòæz«ÅkÞ’m�ãpýîTÏÙ|É(¤y^º¥RÏikÚ¶mZ·]­í•ÝuE|÷LU/æ69â¿GæÎ\fˆ:H¹êO‰„èØ�Ó‡¡&¬±åUôBùKnEyw™ãXÉ6"Rc%¼% ÇDÖª ów]Ê*¼A�î XUõ{0åbI‰·ô¾BA�æÔ&T¾ì¬Ä,K@¨]†¼TÌßmh³ÓóW2¥åçûsdîe>)?ÿ0šŒ¤ +endstream +endobj +705 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 704 0 R +/Resources 4 0 R +/Annots [ 706 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +706 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 307.623057 101.433071 288.873057 ] +/BS << +/W 0 +>> +/Dest (cb148-1) +>> +endobj +707 0 obj +<< +/Filter /FlateDecode +/Length 4670 +>> +stream +xœí]M�丑½ç¯È³�¡ùüfï6| ÆÂð¡*gʃE��ñöïûQ)R!*”RfV7Ôw¡ºR$"#BRÒœ5~¾1ø/‘Q)åè|ùùôËI«è5þ %fƒú{üF6š¢ò&‡äÏ?�‹*foc8¿Ÿð_wÈ‹¿Ÿþü›ÓßçuÌÙªœƒ5þü�‹ŠœŠ)FíU†J'¨¼W1ZU0 +—˜³¤‚>’¥¥* ÊÉK*˜AÖ&A•`†£hÜR•a†�†$Ì0ÙGAe4ì0VkQC4‘³‚ÎxÐéAÒY£BÊ6‹º�‰VÒ9§B$ã�¤Ë*„à“¤#Øâ³6’ÎÃoˆ´¤ƒ-äR”t¶¸à´¨ƒ-6E'é"l±è�,èlº’¨ƒ-:h#é²S>'"Q—¡Ó)¦¥Îj¯|rNK:c”6�¨ÃŒÂ …(è,l ÚgQ[¼ÓVÒ9ØBø‘tà ïbJÂlµev;팤ó°ÅÚH¢¶`ð%°¶è$ +À R…—$°1*Ê–$°É)J”$°)+ŠÑI4`³Wr”xÀi�58 [<‰ œ�-„™+ê`‹Ë$q�³°$.p¶Xr8°--8Ð-él$.pà[Ò&H\à@¸0SK\àÀ¸.’¸À�r¥,q�ç:p§Ä¤‹é%.p`]烕¸À�v¥ q�ï:2Zâï:‡š¢¶À€•3ÉI\@à]gt”¸€À»˜FV〉ƒÄÀв)i‰ ¼k“&‰ ¼k#–Qæ “¸€À»Ö㤕¼k½¶x×’ ( +ü£Eo¼ +ñ²;[@°`½‡Î:‰ И²pK$.ðà]“±ü sl¥LÊAâÞ5 Ã'ê²2=.Ì[ô²2!d‰ Â?“•©DœIÌhP¯ÇÚ*¦ 4¸«Usä[b$1i3Y¦ f °¬Bi´˜6Ðà_øc´à„kö‰§¨à±f¦X.2cZ¼ûsLÅÜJ±k~ì;ýö‹ïùoÿwzûÍ�)«?ÂPšà_aØŒáöð¾ .ß ´Qƒ� aà#uŠ1OFÐâ˜t+Fbù+ÿÎË3Ëaø÷Ãé];}Æ*>œžB!"P8ZO_‡Ü ³øÎ*h°Fp„Õ6 ŒË¶° ¿RÓ¬ðwŸNêhÅ5Ú™ùX/ “õçO?Ÿ~û§?ûí§ÿŒ>½�þòZSúÝ7}¼þ¥pý[2tôã¨Ë�ÿÖ:ã±7B;õ˜µW?׿ô¶ÿ\8E³�h”™±ŽëΩ¯áŽõÊo_¦¿†YûýõEV´O—¹ýµ¼Õ㵬öéïþzþô‡Óï?Í6x�×)Q™ð† gÝÄä¾*Ï`òs@!ì-( n+ÃH æíj�·s]ƒY•_æPµæ3À÷ÇNwù|�-™ú +À8À;+kÞMÌî¬s4Ð"Zú7jj×�ö¹ÈømnK+k:bÞ$ï$;š–÷ŒñGT¶�¼¯Îá�L·ù—æèjz½òD=n=Û�á†(êÚ"6bq>²µÝÊI>³úV@ÓÕr­žaÈx�vƒûÚŒ±Ýµ]XÛ—®îe~þ6{×Ðç'–Ѧl·Öþ�u‡¾ G”æ½>ŒþÊ\n½ÞÍù½Üâ;Y¥Ú^ð‚–†øú×u|ýÃÃï3œZÚñ%Ÿ€_œ×¸�@Ü’C}·Þ,Ö¡ÖG+hen§Aª“-aùm´î«s8´ÞöU=Øóó¯f+ÿ‹À•„ü{WÌCÏ‚ü^x?Ɉ´“OIä”+Y›´�È�uކH»á‡~¸¿ôÁ³£!¾CÞŒÇó ÷ž‡·_}O>·ý㤹û£ô�u‡´Û~b™ã­?ˆO·*Ýšÿ3´t(^]±Ì¯˜ûXb²ÜÜB4mý"÷Õ9"7|Ç;Ñò/é#~Áì��|:òViO!meÑwÖ9òþ�³üèìO³©k_ŒÏW¸Ï=�ÜYçht·ý¾†˜Ôõê +ʆd®Í.L£m~ql‹îõz\uÎ_ËZš#Äa¥²—±½WÖMmòs9Œ—}¹ž·ÐYk7Œ6ÔlQ©ƒ¶ ¸L¿}ûWPö€Ï·³ÎáPvÛçÛ5ºl”îݺ¢Å+O4δÝßȸ¤"É�þÒˆ*Q7þt®+SWÕQoíTnøýAþ<”YYÝ9½�u‡šÛ~Y97ÁY¦¶[M �÷:ô>ØV;{VCê2Æ­L·ÚÖk(#ÿ¹Úm«~�_Y&H\Aû¶Wbù+Zï÷óÜù¾�u‡ä¯ÌÏ{âQˆçÑr´þ�ÑKÌßÛ»zï¬s4ôÒ†�xÃÛ¿ 9‚çÿõ¡e£?> ¹•ƒÔn­îþ˜zg�áuã>ôŽÕµ÷[f£Ï•‘xë&£ùh6$½.ýͪ[Íf÷™Ÿ>~6˶ì³qøùBb>¦&e %¢-„í«s8„mø¥=ÿyÂÅ7;é†Ñ£zÕâêÚŸcq‡p­]š·{W4Dão¼‹:Ï"˜½#ZAËçŤŒ£¶ž›ÙYçphºí.âüìÉ]>]ÇIk÷z"„ûÄÒ}åvÎy’3ž¬Èâ±µð´X³µ{jk�> ÷\½òù㟛”Ñôýï î¬s44† Ÿó™Q}"Ãñ¥9mñ¤ZÕ'w[›<uƒïfÏ =˜Éîþû0;ë�;ßQy"F¾é«½êéÉ©;ž)¼/Î]F ¾új¢ºÄ>p|g�Ã!vÃ}6æ½'¶ý<ùèsæüͯC¡{ÁÌ·4Q $½…à}u‡à�ïº>ðLãÎ:GC\ܸ_Ý­Î 17xƒg‡êßýîÈ—@X•½.m›qäQ äÙ´6Xßù×g"Æôºûïí¬s8ôn<+™¶G÷f[#ˆþm†þ¾K—”ò‡ ôw÷Ë÷æ¿–U;²÷[öf‘vÖ9 +ï|ŸúTÝ™{ü×ó Ÿõ~VPÊž‘Üí¬s8”nä:Ÿð·»“ÇfF˜ÿmÈ_CkïÏU.]y¢÷QïC:›�‹lú>þ¶Ü3蟙êújȬ}UÕ>êÎ:GCnÚðQóõnâ‚_ºoî8Z¡÷»'šŸÖ½Ï³ð�ã4J÷ŒèÝïkßx÷»!­·íVoën©–ûƒs½3·Ë ï•wÄ={+¥|=êÊ3K‰ù›øBÌ!o¡w_�áwãî•Qþ¨g„Çö÷ìÃò>ÎZ.Vôºç:mõºØ»ŸUÒº±xˤcƒÙ¾¶’'ÿî«s8Dmø›ï»HOÌîú>† Ï®Ó $}µ>å3^Ó +Š™o¹÷Éà�u‡â tºîÉ[âÛχo£¬Ÿ%÷|sL›i’¾ò=IkÈÌúþûH;ë ™yß}ø»ü1æ+þºx߇ëüéÙC¿?êö´áš¯™'¿Ñ”m:Œ q¹ûê¹û|͆”þ-^>ÒO|'D~ÀÛYçp=¾ñ~K‡õÏñ�\÷57„x2¾xn/¾öÕ9¾6¼¤GÇø#¾!â£ÆxÏutvôÇõ]ªÖ>;;Úv1=D¼�±¾÷Rˆ�ïAòeœ ÙÖ F›E6P³ÜÈ¡n‡p.?=,ˆ‡€eH•MT]:Ã%¡˾#ÿóŸß~÷_d7ºÂØmcˆVSbÆèö�½n-Ž.CÝ•!ñP½¸Ó²]þCZ†îíê@¹-eÃõwhkü<´“j¢t<ßK¡½ByÅa¾êgíûñÜÌž¡ Ï®Á×kX Û/§0ì—c†=ÓtHÊØ²©ê9�*è‰ù\öèIÚ‘©Ãd†Ž5畚ÃV´¿´Rãî´ºlXW6+ºn]ËÆò¿ üóÉdR¥ÿ˾î$©q²õ`¿ŸÊN¢$ˆ ÜNqŽuk‹L-Ødð`T¹/é¼ÒãÇÜw¾~´¾^M©ïkµ²Ã éZÈ {œ\O,Q3˜¥¸\½Vf—ÝX“rãQh¦øPm†pj�xÙ©Á©â¦Ø8Í„~)Ôìt“ØRµÇ”Ý»Z×…IØLç]gØðײ6²á¼%¼œpZ×KßEiÙ²6U{×ê&s̨ܤ¾–lBmœÑå$¿ÑµiÂ`6=µ²“ÖU˜*�¨•˵œ ºœÄrck¾�Tl¥ÒT5מŸL™ îRëxA6ôÑ(�e{i6G´«çâPF ŽµN 7v!¼œ<µ™8‰ßO> +¥ýÄÚWèq¡cí6qÒ^&iy¼ãú S³ÊÊ>Dåÿ+Uø&-Ì3|0Ô Uö›Ž¦“”¹ÙÄóNâòÐX‡¤0§²¬»LŒ ³¼¿àÅå é¶Ò­ÇfRÖeLs5¯�T#�¹Ø4Ô5q¡°Ú?�+¹PW#pºIì”ßgâÉNߦ*À^O ƒ»oíNâиó�‹cqS6†kö¶væ«ð2,lÔ‹ ôS=É$¶º­vÓɘp2 ¤0‰'}Äu¶6v¾|ü8M2iŽœ~: ËœuÞf|Δ}N¹—eÎÿ�2Àïÿžèü§º±Öu·º±…mÜ:ó•¬ìŠ�vŠË.ÙUئ Zb´?‰MšÊúІ¶Ž[Ëøš¦êz"öZÒ45MË…~êC&¶ ºÖ8Ö3þ†ðÒõbsdž›iÁ¾ºzq8�+[²U«pÀ/‡iÒ¹iI>³&qTŠNK:´dYEðFqÈN˜'Ëff@ò“´®/ö +WÎŘQݤ£i™åMWÙp¬\`ÇxÃdøIóÌÁ臧×Óã>šê (ÒFíMúΥ튴ž,uÃa˜¶5Ç�ËA�¼Sµ¶›{®99ÓÔ˜\ špŒ2išª�> +endobj +709 0 obj +<< +/Filter /FlateDecode +/Length 5052 +>> +stream +xœí][‹ìÈ‘~¯_Qφ‘óyƒe` ¶Á‹ g1‹Ù‡Ó5Ó6K�aìÿýý2¥Ì ¥B%u�ËÔ˜=MŸ.Eä%ùå—‘!•¤¯ +?ßhüIO1¦àézûñòÓEMÁ)ü+%VEý'üwÕŠÂätòÑ]̦�œ þúvÁÃ!/þvùó¯._×ÑW3¥ä�v×ü�Ud§CPNP%¨”¶‚ʹ)ã¼ òzÂ)¦$©`† dh« +0ƒRt’ +f�1QPE˜a)h»U%˜a‚&I3trAPi;´QJÔÁEd� Ónòpº—tFO>&“D]€N#é¬�| í´¤K“÷ÞEIG°Å%¥%�ƒ-N)I[ÈÆ éñ•ÖÌòI&L Btßö½˜Ý)6çÇþñ×˯?bñ½þõŸ—×_•LYýÑJiB|…i`†Û!úÖ8}ëË‚§Ê¿b! |¤N6"¤n¤-.I·l$–¿üïºý°²†gÓQû"ŸsXú†Íýƒ‰Jë„M1ö&¯™Ýäw×949 BH×öA˶vWñ~»¯$[ß]çsÙjÛ°¦\´t› °užq‚v@Â;«|F (l:Åx”±ÉdÖÇTF¼®hUø7. €ÅŠ9·Ü™ùˆC4ݸë‡/¿þ㟿ûîÃÁO^/ù, Å_ŸÂn“ÿbÕ&óí7:laAøÍº—ù¸ê°k,e ÍÇMþ²ÛÒÞ k‹z›¼ÄˆªñËË~œûÅâÛÛõ‹ K;¥ÚÒéç°ÿÛÿ¹~øÃå·Ö@)Qy +aÑàAï°u®Ê§`ëK@ +[ü;�jCˆè]Cëg8 ®þ:C;ô?—ó°¬|¶f±é¶@ØÏeÊtÊUþ•a’¯4BÉC)¯àwqr²Î³;¸»H¹Íup—óËhÅåïrì–cçÖúìag�Y—qaI5�JÔ_FµÖ­6¬tÕ†°.SûÎöÒ`oµ?÷éx¹Ø9V;?v™hÛNÿõ¼¤s§×ÁÖê¿ÛÒvbº×µíÅOf­¶Q”C¨‘T49Ľ�Ösuž­tŸ×âzª‡óEÂ6Êuä´6dj¡�A¥½/…Ý?·>ÔºÞ +‘;çLRÿÃ9sĹ—Š2¡ÜGVίûk~»�àÕ¨‘CœŽ NFÕ}¤ž«ótH½Ô¡qœÿMm„G1NË�H¹3mÙ8Ì„Š”¯9ãò†ó?Ó×."{xçò¥„þp¥?WçéyãªßF-me�»ìPG ¼õ5gÀƒþöïƒ`£Þ¿_>YçÙlbÕÏ�à´¼ÙãjÛbÊë}Ÿ‹Ÿá;èíqh¾DN„­ÚÑŽüd�§CïAìz8ÿ?¿Bß3kî�Õ>i:?œ“hïÈ=ž¬óth<ˆOÇhØë�£TöÔ±~¾QfýÕ¶?.\ÆòYöËáØäÆ÷çNÖy:äÞ�c?-ÆúÖå6(ÔŸ‡_?%Þ¾›?ý4–9à\û@®õd�gC®=¿¶LR�=:"|…¢›€–÷ÌÙuŽ@‘ƒh�ˆ’‘Ï9Ú×9‹_¢„Gë¿°1f’XÝ–ñ’Ö�Ñ$¬KCÛôÂ9úy!í •åLÏF'ë<RbÕ�BìX½h'¾Ãë¥öe®Ÿ¯�œÖúÚÉåÍ »Vœ8¬c�{9ÔV–¯ ;ç–ÏéËîwû@<{²ÎÓ!ö ž=È�>_œ÷é‘ÌÓ4?㞬óth¾ã~ênŠ_é9ëÌUÛÕ*L}„Ëu">cê5wþ[åùšýÇùÞƒüwÅ�a�&é|ù™,£�ȳž¬ól裃8õß‘çÞ“©ºƒÎÍNéÆúܹ–öår;Hæ1éÉ×É:O‡äO˹þ"‘ü9rŒÓÛ çv6qøè^ôÙr�±Ù0΢¾ãÛA/‹OÏ^±=YçéÐ{pcè8ZîEºeÜéÔÜgCÅÈQü®Îamf§Í÷"þÈöwÞq#Ú´ÌúžÍT†îÇîóÚAé÷œ¬ót(=¸¯`q5ÃS=ýÂ2æR$U´d’ÚÜAøµs¸¿ä+ŽÅ¨Š&£C:ºßþ\�gCª»×þÿ•ƒ�h€µ×luk‰çÖmî]SlrÃíÞAë9Ø“už­÷c×6r¯k”¬îÕÔj�W­+àN–½�Ì Œ¨Í÷Õ¯îŒëråÞÕ1#Tãº×uý :Ô”ÜïNn¡Î,U¿sðŽg˜mÅæÀΓGBÃõ³fÿÎWPÜ#ßoúeædÝýøuä¯1£´Ê&y†¤êù�G¥ ¶weGÙžñ~YÎW…DiÆ…ÌÖ´lvH{}-3À|nµÌ¯�Çùu¹a=Q¯;HŽpñ¹:O‡äû1®ö³›kBO9²Ã5¶=.¬m \jÙ•×Íu9b}è¡ÿ!Fm¯~�ß•¸3KŸv[wÅ4"¦ýYÞ“už Óþä7¿Ø�õ»~ ë<ΨŒz0Ö-qs›™Ù%¦û¿7Î{×’÷¾³"]•Êsx\ Üß[�ÆxFÂt+óý:*Xü%®(ü�Û=Yçéð{�Ûð»òó�ï`µ;]ÒVxl:~3æDlûè7 +÷r)Ä°ÛæÀ˜_a߸¼—Û\å5‚ínÉ» ú¶\Ï»íçl½{Žád�§CåAΖ{îe¹úùÒ½ZþÖo+c”Úè!7fÑ×ßïåϹ̩Üë˜MÒl…Ð×(Ù\ ò«ÝÚûÚ­nüÖâÑ7 ýùÕ“užQçîwÝì:vîÃ\�¿¾3®1jýwáõ÷=‡¶Fd)ٖƽ'vX=­Ï´äQãZ.îÀxN òæØ»_ë‘+«¡G‚”Üä +i òd�gCeø´{ÎðO�zœæQ[�òAý=ä¶Ý�ÝÊVöíD‘¥ê9ÔÂájîsÓ—qÞ›‘Çצv�Çc8s.î;Yçé�w÷ 1�{‘a¾ï¶RUî«÷² +߉ß|#fÈ,­ž Ø$òÙ¸ïk;6Ù¢;×—¾ø9¬à÷¯¶6·‡„åÑOS¹S¶Ž~;dOÐ +‰òƒÈµ‰eôÿûwßýæ÷ÿÉã«ÚûC•¸©Í½�•®ìÔ>ȻۗÊóñF>®6< Âò‰s|”½8Ä>´ôù‘¯¶s»ÍÆ¥_º­ëºawÝìóÝ6ns-׎Ý8�·GÍÝž=­Êówä3wª{/[DÙ¢ÛÒ›_ºñ«ö]~¢ÍÏÁ_ڷ˨¸œˆ‹sÔüý¶oóC"óƒÈ·í”3¯^÷ÅS÷ìˆqÏÕÏ…nìüò™™¥Ûòé=È'¡í�½Í5Ú:Òꨒ_|¹œSî·ûå<ãRîVùa9ì-m×2¯ ÙfÝç|t‡êWW³>ÎÎ÷ØHöoR£V4³¹Ž{¨mn} —û‘J]5Û¯ìúÜF?¶¾<³ÙÕ™ÕýÙü^í +}ê8Õv[}†Wï–‰²|%ßñ“ý4³L�g#» 8wÌ/Q8WÃ>û5kŒ8t†á„z¹ŽÞÜ5s߯~ïoç®< ~0K|ÎÔy7FEù‰ŸÞ¢—T0o¢6NDE'ë<ôØÃϹþܱüè`ç0GäŒCÆô˜×ËúoÙŠ8�Ân�ÉO*姇�=V"ã· +PIY|{¿IcÓä<‚Ô¤{=ªN±6G”­×â¼ýkc��OÇ�ÙoGm&vñÛÅ¡´ë\¡\…ZÖnGÕñÒ¥ù±Æó'LÍ*ËvÏÿÏTáš43Où ©A*¿œ¡õNòÜlⵓ¸Ü7Ö!ÉšB/ËÜ¥Ch˜åþÒQ å3é¶ÒÍc+)s“‡TÍË$ÕÈc-Ö uMœ)¬ú§q%ªjºëb× ü¶w;]›ªNµÎ¼fpw­Ý.ö�;߸8´×ùMÍÞÖ.Ã|ÞÊÂF£8C?ÖNºØ¨¶ÚõΘ°RèâN£oE\gkc§ò8ÃåcŸdÒŠ{»üíR–9D¦&oɼÕùÅQ<ÊÒסÌðû¿ºþ±¾©`^Ç�jla·®Ä|%˯Œ'ÅùµƒUئ b´ßÅ:ö²®¢¡­ãÆ0¾¦^]ub¯%ucPÝ´\躙Ø4èm™gÜámðb d>ulú‚=Úzryƒ™ßqQ­Â?Æ®³}I¾²&q”‹ö%Z2¬"x£8d¦nÙÊÌ HÞIs}¶ŸøPØÜ;`aD>´]G}™åMWY9 V!°å¼aÒ¼Ó´²G0úáéõÉ㾘ìë ÈÒFíMúÆ¥íIJ´ž,µåЯÛšc¯ù NÞî¡Ö–es϶ §O�ZÐê€c”Ic¯¶p¼Sª²U§u¡ht™ª²Öb¨6ù¥ZuK9ã(z)´˜¢KÿÆ=íø¨4':>*~S6·[W¼-Ù9çÐÏNõ’-–Œ‚ÌóÚMJ½¤­²mß´î»®¶WvÔ ñ=2U½šÛ”|ˆÿ™;s�!ë •ª?%¢c·jÒÁ[^׬¢÷àÊoÜ YjäÝuîçJ¶‘š+á=a8&²V�_¼-›ðE:V°¦êK¹åjI‰§ô>© Nsj“ *o^-WÙKB¨†¼UÌ/Z¶9è�ùý�Aiùi¾aÏ®Ò'åçÿ_ŸPú +endstream +endobj +710 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 709 0 R +/Resources 4 0 R +/Annots [ 711 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +711 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 101.373057 101.433071 82.623057 ] +/BS << +/W 0 +>> +/Dest (cb151-1) +>> +endobj +712 0 obj +<< +/Filter /FlateDecode +/Length 4651 +>> +stream +xœí]Y�$9~¯_QÏHk|„/i…´H€âa¥A!ºk¶¡^¤…þ>Ÿ3ÓG:#�ªîrv™VMUFøˆ´?ŽpVW‰¿¯þ ¤DÑ;ºÞ~¸üx‘Â[‰CŠÙÁ þo¯J’VEìõ‡$0^øhµw×× þëÛ䯗?ÿâòÏyuÕ"F§•½þ뻤"#|ð^ZF¡’Ê0*k…÷Ú:Få”À)ÆÈ©`†õ¤i©ò0ƒb°œ +f�Ö�Q˜aÈ+³TE˜¡½"N3T´žQ) ;”–’ÕÁId4£SV84ºãtZ ¢Ž¬ÎC§¼ætÆçIYÅé¢pÎÙÀé¶Ø(§³°Å*"Éé` ™à9�ƒ-ÆÉê`‹Þp:[4Z'2º[€®Àê`‹tRqºh„��ˆÕEèdða©ÓÒ +Œ‘œN)a�MÃê0¢ÐIÎ3: [œ´‘ÕÁk¤æt¶þ8xÂ3ZuÝFÅé,lÑÚ«ƒ-è|Ž´ƒ-Ò;Ž0‚Dâ%Ž´÷‚¢&Žt0‚Žtˆ‚¼7 èh¹è90RA§GFÂKŽc£` aä²:Øb"q\`4lAŽ Œ�-š ÇlK@ ÇtK2*Ž ø–¤r.Ì”0® Ž8.0 \@)r\`À¹ÜÉq�éb¸{Ž X×X§9.0 ]CÁq\`À»†”一À»Æ '«ƒ-0Ç`GaT0x×(é9. ð.†‘渽*€CÇq°"t’ãïê ‰ãïj�)€Õy�1h8. ð®¶8næïj+5ÇÞդNJÿHÖï‚B,ïÀ,ǘï¡Ó†ã&4ÜŽ ,xWEL̘[ ¢ã¸À‚wU@÷±º(”G‹3ã­,”s‘ã ÞÅDe8.°à]Ðgà¸/0£jŽ ,xWÌÔœ¼«t”Xð.üËqà Ž 0¿ %]V…Œ!p\`Á» %Íqfa!˜„Õy )Ž @ÆBÂå¸À�w1½GŽ xWZc8.pà]Ip{Xl1As\¿: [fLÃYRƒ)8xW*ô0§ïJé#Ǽ›¦MŽ œO8.€�^°æ¸ÀÑ{Çq�‹:¸|¬Î [Ž ¼„À‚²Xl!OÀ±ÑÄÀq�×°ÅhÍq�×°.ÇðDTð¾Ùð¶.l|@°ž"Ç`2"ÇÞ:ÄchUNç´tÍêtÊs\à= LÅŠãÄR"`Ðs\‚É]â¸f@§ˆãa † +ǘŠDÐðÌ9�‚-p²9.€§ �R [à r\t@”é$ǘ¡K¢©9ÉgŽ 9‘\EŽ 0Li‚)YlMp\€þIÁ¶å¸Á‚M„9¬¶K„ S¸8.¶h©9.6S¼é9.ˆ¶Àã㸠J'’›Ìqh:)9.ˆ* ÞÔÄqÆeŠ7ÇÑHÄ›ñ˜q�Kñ¦ç¸ l±pQXl�Ó™q NB¼ vât¶èHDçR¼8.€›�x=»$R¼éÙåð®�`&NÞ…gê8.ÀâMx¶\l/A¼ÖÃ?ã•!Eœ�]1� ^‹¹•]2�à^ÌVž]3� ß#±‹0‘ep쪦U(•d— $øþ-8a\}j—¨àà1gŸN2bX¼ûsÔdf%Ù¸>ö¯ï/¿|Âä{ýþß——_ +eùOÁARðŒa #ºÛÂûV8}ã`–Á°{Ò¦J}¬F)Ðà´È–ŒÂt—þ]—?f–ÂÐoçÕSL½à„ÄÚz4Ó;½lö_¸€_ƵM—ÊFhçÒr™[F~¸üò/¿ýæ×¿ûpñáåòׯú ¥}ÆKøM˜.0™Œ¿}ò˜ÒZÃxl“.É_Rš_ýíúá÷m�:…Ù19´ó:S5êã˜ü7†¦3¥›=¼¤±å0Ä´¢@hÏ  MÓVÓÚwfyK[OMŒS€ƒóC ¯éc$ãì$-Ú�råcS”CelÁ:D�еºá�þæ›ªÝ ŸÐFrüýê+õujêéÛOßzüNi²Œ^&�¿S9©ËèÖÉ!³ª–‘ór3ÉìTf˜ç-ÇjžÏèé÷eFbD«cGY³5xÊÀðãÀ°v¬e6xbj‘iЄÁšåÀSD 篫pk䨘Lã±7bÂÁ�Ý:óœnìÀ–�±CÎ(÷{ƒøÎ8Y|ÒïäŠ%¼ÞVtaÔgÝ,ÍÇé{Òk=éóçãôMÓojÊÒ͘psÌ&] º;š�•!mÆú­b{�i‹aœò¨ÒÒ„˜Ô‹õªæ9 ªªÙ°pU…µlÇf®ká0oá�»žd±öVîÉœ7�h«÷Ýws;¨g;[‘°(§³}@¢›ËfèÚ©‹=G5å1]�²G^“··ÝßÓ^+Ö…ãt÷Ë;·‡àcyN‡`zˆO‰¦Þ�ó2÷¨�Yž9qB¢Vw¢ó¹)“ºöðü9”tÅÞtZs?:�å9:Ý&¿¶3×Y¹µãröÆ~¨3î¬çÂc“dŽjc}�—ï¥Æ¿ü!åØ9òh2øŠóœ MfÛWL3SiÅç >SËÞÛšµô4´úyš2gÚáó–Y2G7Ÿç%�õ³'‡èÏï7¯ ³ñé\º†€®÷{è<–çtèü ù�oˆ*Ž ó}"�­6]AcõálºûðÈjÍÁ<§CãŽßw6Ä�(ò8„àÞS¹}BÔ6ë…ézõëmÔËs:Ôî¬1þÜP»†´OÅÇ/s[¸kÇø›G2U¿3Ý¥GÇ{/î>˜çlH¦m_uíêLò3õ†ÿ–[|­ä¼ÝêÇÌëcê&òFBãs«á�®\顊’‚ŒgiVÆ•– O‡»#¥ƒyN‡¾_”æ­>ôþÊXüw(édýµÆ³EWgY%¢ÆïTZDtº›f­Çòœ­Û¾ê¢{žkü«ÙÌÿÄpå;!ÿÞóÔ£ ½ ++7Y}ÊÄ/&Ýlöy,Ïé¹ã‡¾»¿ôÎAcGA|‡¼�Ç ÷ÖӖ߯ҿeMÓÊûãôƒyΆ4û¿YÓœ¡¥Cñꌥ~¾Üg›5ÉtO:¢im÷y,Ïé¹ã;Þ‰–Ÿ¤�øWlsÝÙj!-¼¥½ôƒyN‡¼ÿ¯Y¾÷êO±©+Ÿ�Ï׸ï�õǃyN‡À�ëÕ®CEv(3pn(0®övºÝ[ãX'ÝóxœuénÖ”VÓ!3•¾Må=7eQ-³­£Ü+Ù¦}ëMtVÊu“ yµ(åIwQ€Ëä˧°ŸG™{Àç;˜çl(sÛ>ß¡Þmzé®ÞÍ3Út_táLÝ}¯ÝµûTQÅê¦oÙÞsï]»Ýïñ®ÝÔ<°¦w0ÏéP³í—•ž3óœ­Ôv³ÉìN�½¶WΡ{tºã’¦›mó9 Ï |¢rˬŸã×f%ˆ�Aû²Wbù|�ù½~ž{`½ï`žÓ!ù óó>á=Öûh9[{¬ ·}¦åèì},Ïéлã#nxûw!‡ñü¿<´ì´Ç;D8[k�Òðhõòþ˜ú`ž³¡Õï\‡>0»ö>bYÙèW‚ROLO Ô´½Ó­Ö +:�¿Ù>iÈ®f÷+?}ü¬–eé·Æá¬úÆÇ”tì‘ÚƒyN‡°¿´çf�p뉀¡÷¦¨ƒž%;»öu,®®•Kórhúøñ˜ÕÙ&‚y’¢¡4=ð¼ÊÁ<§CÓ¶o¸ˆã²%ùt'­]ë�=ÓɸëÊ¥Îym´Ò?aš9Svè}nìÉå|¬vo<ƒsï•7ïï¿Îq0Ïé�vì^ÃÖ/ù©==úÉ}³­Ñt›·Ï^„X<˜çlÈ ;>Ûžtêý›Ö¿›ÝÇ÷´Â3SﳞkŽM÷[Oyâ†/×ÍÞ ]ýêÕê3‚ÝÛ&оEÖV;¸e¹³Ñý´ý\KÐ÷Ç»óœ�_Ès-ï�,UÓ/bʆßúó!¹¸_f1*™çš·�Ú�î­;?úøw•Kß0Za‡Pc½Çòœ½;k�wôÆìªÞóØ;ã»gæ­ßG íŒjÂzOÎx’y³ÈlÅ»·µ»kk�¾6î¹zå÷ûß7¹‚Fÿ3‚óœ�;>ç[zõ +Ÿ›ÓwªuQ¾s·”Ù®FmðÝì~¡W²£¼ÿ:ÌÁ¿%b\y먔÷_:šéløUrçvɰßÁ›¡l"úúK/Ý$·„¸Ý%ó£K�'ž¸¿�Þ+î-zÌ*3ìádóšò¾Ý$;P[¾Ô<¿*üšþÖß»�"Ó†‚&\5}z?ûÚm7Ý“ìFˆ ÏÁ¥UkUW®u~»ð°®8r…`$‡7 Ów^ۆݘ>½i8ua’ë”Ö�Ÿò +o7•2t¦úžäø†â´9½|V¾�ênì¡é­Çål>‡E·ýxqÃÞjØ?H&oD§ ¯ŽDºÕÛÇkÚ¯"HC*w“V]WrÛ2þXRM;5Ê´ySÚ¸cÜÆ±9˜Òÿ8tðI¤öO£~ÜUMâá5w�øõ’vÕ#FL$ôAqN?e)‹TNXd7°§±Oi¬�ÓÏX +O¯Ij›Ï&å·9[Úí€dNd†÷ý�3Bätj)Ng/…šÄig ÌtäŠ)Öe›!¬R›¶X3‘�Ð.…²©®Š5e{TÚɦ4�«ÂbzÛtªéþœVû¦;·„· ª5½ô••¦ýÐrQ¹uµ,2Ó‹Ô攥C¨ô#º]áW2MèÌ¢oz-í*3 +C•t1§cD· ›n*Í–žò%U¨YcnùjJ…º ¥áÙÐF“Ô§­V›1÷Cç~hÅ.õ@îë´™ÀÔuèVáíb©ŒÄ*~½XϤ¶•+¤ÍÐk…¦)·ˆƒ¬x©Òä1�¿04³,íÉ‘þ©Âibžá‡¢©´¯N=ª•¤±YÄóFjå®°q- È×´Ms)ï fÛöRA2éé–Ô¥ÅfҦɹ�Ù¼DR…<æbUPWĉÂrû®l…2�êªØ(¿ÎÄÕN[†*Àž+sª�»-åV±+ÜùÚŠ}éq•6I*ö–rÌgám˜Ø¨'è‡\IkYf»ZY#¬†�ª¸Òèë Σµ°SÚø5ÿ¬ƒŒ›qo—¿_†iN«#~8£Òž­—¥®ÿAšßãó� ]ÿ˜7™çq- [è­3q;“¥bÃAqÚ16 ˰i„šÚ¯bjZ›ÑPæq­¾¦š]VbÏ)UaPU´­ÐÖ6lĺ@W+Ó´ŒÝÞºV,ŽÌ[û¦NØã¡É'‡jLÚž([…ƒötpªÎÔ)ùÚ‰£”´NéÐ’n2â -‡M…±Z633²­¤4}²ŸÚ®0©®æ q#Ò¡©:ªÓl[t– gÑ$� lÚƒ¶`Rm¥qfcôÃÃëÍý>™ìòHÒBíEúÚJˉ%i!<^j†C7?,sŽö#ʃ·¶P)Ë4cÏ'§�êZÐì Åh# 5Û”À¶•R–Í*ÍE¡ Èd–•}¶ÉMÙr³ gØVòŧ¨Ò¿·-mÛ^)�hÛ^q‹´©Ü<ãoÉȶpöõìdMY|ÉÀÈ\›»H©¦4Y¶¬›æuçÙöÚœUC\õLeÍf)â¿GÆ»§—*ÿ +!*ÔmÙ0Q“òF›kLîNpBi³TO¡Y¹;ÏöZÉrE$¯•´5¡;#½ÞVLx…"î+š¢^§íølQ²§t_0KA•æ–;° ›fk“ÂP9ô)T´qØÚT†�¶öõ’ßT*=ä¡h¶|2üý#yÔ +endstream +endobj +713 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 712 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +714 0 obj +<< +/Filter /FlateDecode +/Length 4919 +>> +stream +xœí][‹,¹‘~¯_QφIë~cÃî‚�Îbã‡Ó5Ó6¦ga¼û÷ýEVJŠTF^ªºÏ8�íÓôéÊ]"¥OŸB‘Ê’¾*ü|£ñ_rzH)Çà®·/?]Խ¿1ÅìbT‡ßè¯Z¹8x�Cò×I`ã³71\ß.ø¯»äÉß.øÅåçyôÕ 9£ýõo?�ÊÙ!¦•T*¥­ ò~ˆÑø ¨‚p‹9K*˜á£3n©Š0Ãåä%ÌpÆ$A•`†uQÛ¥*à µ“T0Cg•V°C¥D QÎY#è´=H:£‡�²É¢.B§£‘tÖ!:íµ¤ËCÁ'Iç`‹ÏJK:[¼vNI:ØâlŠ’.À¬u°Å¤h%]„-­“]‚-@Wu°E¥%]¶ƒÏÉ9Q—¡S)¦¥Î(?ød­’tZØ´¢# +�¢ 3°%(ŸElñVIga‹Ã�¤OxSF«¡Ñm•Õ’ÎÃc¢u°�/1€ °EÅ QFÐ@¼$q€‰qpÙ8‰L²ƒK.I,`R\ŒV¢“ýàBŽX¥¡3Z"«`‹wAb«a‹ÃÈu°Åf'q�5° $.°¶g%.°`[´H\`A·Ne-q�ß:¥ƒÄ„ 3•ÄŒkSpXP. ”%.°à\ À‚t1ܣĬk}0XЮu)H\`Á»Öi%q�ïZ‹œ¢¶À€«“•¸À�w­VQâÞÅ02 Wà0H\¬ &%%q�œÄ¼k"¦QŒA+q�ï�[�fnð®ñÊH\àÀ»Æ™ q€2€”è €wA!^v` VâÌ÷Ð+q + ܉ “Äàø3ª‘¸ÀƒwµÅL-éÀ»Úd%q�ïÂoðƒ† qæ·A+@WÔåAå”$.ðà]Ð’‘¸³ð ˜DÔÅ@Ò€Œ?Tâ‚ÞÅôž%.à]å­•¸ €w•ƒÛ#ê`‹MFâø5ÐaØ +cÎê  ˜BÒ�w•FK:ð®R1K\À»4mJ\" L’¸ð‚�Ä!¹!Ç$.YA—OÔ…×^₨ ð ,Q[\tÀ±²ÍIâ‚h`‹5Fâ‚h` \‰ à YÃû—°p×¶ÀS”¸L6¤ìœÄѬÇЪ’.˜!Eе¨KÐé(qAŒnÀT¬%.ÀZjHô€àr—$.€Ði'qA̰CEâLEC2ðÌ%�†-p²%.€§ �Ö$[à J\�LÂ*3(‰ 0Cc-‰¦–tNÑ:3I\�\ÈU”¸Ã+M0¥¨ƒ-  ‰ Ð?´Øö`ñƒÅ&–9¢¶Xï$.HÉÐr3I\�l1ÊH\lÒz3J\�l�Ç'qAVa 7YâÐ8tJI\�uÂzÓ8‰ 0.i½™$.ÈVa½‰%ž0n³ ´ÞŒd[<\Q[à4eaÜ‚“°Þ;Iº[Lväh½™$.€›�õ&Vïà�aÜ8rÂòµ·øÁ,h°Ââ³m@› ± ¿R¹Yâß|º¨“÷h½dæc¾ÄbØýôãå—¿ÿ÷ß~úoÀèÓëå�¿R@Ö¯¿Ñô7Þÿz5]ߦë0ÿ[åfú øh=}¾µòj9¯÷¿p ’Ž¿.Ìu¥L—Z™~²g–Þ1Yfù^çù ÕcXySY¥œQ÷ä›Ò8ßÙà›-‹rÒ¼M¨¼E;½¯K«_ÿéúé·—ÿø4Þè�Þ‡Š%L¸LŒ´‰ÕcYÞƒÕ/Q,m· Úw�›íºC-¡V»£ïVŸÐwaþ·Â~ ª¯]ºéo�b;Aµä¯¶¥¹=³ûñëõס©„ûéí×Ýú<Ùb;»û!Zʹ´eØR¿‚�[it�7q{0ÏÙ€‹•Ôr epò—äRz¬ ÚM$Ò·~AF‡ÐÚ ª+bë¥GzôQ4V²ïïë…!­·í{–¯G.ŸTTCrßœè­ÞN£^)¶Ž´ô;Õkh eWÐk+…:|„KžCÞCï±<§C¯Ûäݵ^v}¯mðñ +ïÉZÖ ãØÏÝÔ�ÞѶã=;GS-_rn E…ׯtnž®UÒ¼QGC�fÁöµi\û'øðXžÓ!jÇÙì[¯ôÀ?ꆲ±÷V¹’F‡Ž—öÒ Nå?—Cù¯iÅ̵TnWA{+§ƒyN‡âôº6ýÎ^Ò_çÄy�Ut|GÁøû:ù€+³Ÿ+òÛ¼,£§rüÄ·ÄÓ·ní ¬%â’­¿×nîp’Þ{;üj¸ïxp�t0ÏÙ�i¶ýͧü1æ+þkñÜ~5«¯÷§{d�mH~œ~7|MÓüFM�ò´ q¹Çòœ¹Ç|ÍŠ”ÎG›õtÇe„î}«\ñ„/v0ÏéZ|ÛóÖ{>èÇê¸Ö½ZO…6³˜t_Oҽܯ%å)믢·ä�ߦr_X>×òóºÆu2ÍX<íç{´`¨å†É– ”'ÝÇå¸üˆû�ñÅpGñu,Ïéðµã%=ÛǬ¯êãpÇqî‡õñ‘ûèìè¯Çû±¬|¶f²í6az\ñÊŒeŸˆ¦Ìs6DÙmï†PñLÏRôçkfŸ÷Ù¿‚*±ŠiÐÖÅöPu,ÏéPµíyü£yçáÞý0¾™FÔκßúÇWWóœ);Ñ+Wüb+‡.îYWtÅ×½1x'.;‹¦õëqæÕñgIuÅÅb +þs“mEÿ·âÂ=W*ñÚÍhÜ +Z™/¥Í�U2´qd­Çòœ­ÏE©¾Äþ‹!áÑ�G"sÝ“„:‚âèéD‰…,Ò}VËÍý3³Y$MFªk>š£Ý/ÞBÕ&Ræ9RÝNÔê#âŒ�n%ùÀ¸ä×5[Adóï<½PW"ìÍôóœ‘;>áʬûHTÿ‘8äÏ:úgm_eÜwÁOD÷æ9‚�më{‚WÐòP„}å¹=ͰÕ×û][WÐÛüPzñÌ9,ÕöÖäóœ½;¾ë‘ç>„🠡§Ýµ(£Ñ?w<˜çlhô;þéÊVè~g\é¥qM]Û!á¹7µßÂM+™‘˺ýR_Ç® ×>8˜çtÈÝöcßûlýgGh·ÛNÚöüú{3~зSŸf�sŸˆµÌs:ä>öZŠ‹r‹öŸ¡è& �Å=)º>Û?/qP·gtŒÈSŒöõÅ÷/ïÈÏwåô‘$–·ßÏ/½Pëv¼ԕÍ÷K,Úùà> +ÿÄsîƒyN‡Ô_õ³à;–V´ŒhõÙž‹—{~zNÔsZ­o±SîþìjÏ®­—²ú<[1Ôš–Ï +÷F÷ôeWˆ2bÃþìÁÎÅóœÉÛ>®Ö³‹gB§ìÙîÛ–²:.µìÉë⹜cuì|_•hCÿô»Wbc4ŽuÚeÞÓȘ~"Ê{0Ïé0}ðÍ/¶³ ¼ëW±ÎýŒÂ¨;}]ý/“˜]bÊÅ»ùý¼ö,yí�é©�á~&ð�W¼5õþŒ„éÙ÷Á1hÄj×^âŒÂïSÆï3ߟùuÆvÓNlWÀï¬�7ÞÁª;]ò +V¸oÚ¿sÀ·}ö�µXŠcØ­c �¯°7.·"`‹§¼F°ÝOqú®—Ûô<ï¶³ÍêñÃÁRPìØŽ +ÝÝ$;H]òQŽÊ¸ÒOÅ0a0Àqè€]›®pî\Žt& AïþóÛßü×ïôƯ¥¹Ý—n#¹äB̉—……¬ +QqPw5HÐßû2�ºâÞÝã6gJî¿cYÓ籜T–*S}5ÊO!ùx×ÏÊ÷SÝÌž± ÏîÁ—{XtÛO—0ž¥¤ÇóôTHƒ6tàî5¸�"1_éü¦¤¬Ó¥›ôذúº’s<¦ø§šj:¹XÑa†t�ÕýXcv1¥ÿiìà/:»�ÚŸHã~ʨÅÉ”‹&~»Ð)³N;¬8ŠI8}Tµ,§KÂ*»�{ã�û”Ö—S`t®…[_>_î†òû’�Nÿqª$²ãù7÷Š!r½ÓÝ«AOb:©7 vº +ՊͶOÛ +lwÅÚ*&ôK¡bÕ5±qÅM'»Õ¦ MXMçM§Y÷—´&²îÜÞ.¨ÖöÒ7QJ烖¢JëUe–•«Ô—”µC\í'At»ÂoT)Ú¡3«žõ�²v¦$WÓå’NÝ.bº©4_{*ÖT©eÍ¥å›) ê6Õ†dcMÒHG�³1¢lù8ê�Ò×*1ܘ…ðvñ®ŽÄ&~»ø(¤ö�+”/ÐãBËÊ­â¤^š”¾Lîþ C³ÈèŒ*úÿN¾J‰yÆÚUHÑ9síªUBc³Šç�Ä塲ޓZ@»ØÒ²æÒ1VÌòö +LHO¤[S×›IY“1yÌÅ<"©Js±®¨«b¢°Ò>•+¹P#P]û +å·™¸ÙéëPØKeA3¸ûZn‡Ê�o\k�k:4°Ú[Ëe˜/ÂÛ8±¹^LÐO¥’&6ªÎv­2&l†�š¸ÑèÛ(.£µ²Óø-ñÓÇ6Ȥ÷vùËeœæŒõ&ãC°šÎÀå^–¾þ?Òü¿½¸ëïË¡k÷yܨʦrëLÌg2:1=Ó êEX‡ Çh¿‰uji}AC�Ç�a|íZvÕˆ½¤Ô•AuÕr¡omÈĦB×hËZÆoo]+VGæ½}Ó&ìû¥-7‡j,×W¬Â¿\¦¦³mJ¾²"qEIÛ”­3,#.x¡¸dæfÙÌL$¯¤6=ÙïxWXª‹]07‚.mÓ¹6Íò¢‹l¼ –.°å¼`§y¥yf�`ôÓÃëÝý>™Ê i¥ö*}ãÒzc$­„'Kíxæ—uαWº(ƒ·µP-˲±g«“Ó†Fs-Üì‚c”ISË6%ð¼RWd³JËDQé2UdµÄXl +S¶Ò,ã'±•bõ)šô/¼¥=ï•Úˆž÷JX¤¥rËŒW½%[ ÏáÛÝ©–²ú’I�ž»J]Ki‹lY·›×]fÛ+» × Í3U-›_¤|Šÿž;÷<]ÔAJU~ÆHˆNí˜RLÔNGkì5“»“B‡8:<<ºÄB#çÙŽ•,#"%VÂkBw ÎZ5ð¶bÂy_ÁŠz›Nx•³e%ÞÒc „‚Í©E$Èv +mŽ¡zi©èóxÔ·J‰Žº�J‹¡¡ñ)©Ÿ…OÆŸ¿©Qúë +endstream +endobj +715 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 714 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +716 0 obj +<< +/Filter /FlateDecode +/Length 4726 +>> +stream +xœí]Y�äÈ�~Ï_‘ÏFŽƒq‹Æ€w/ü` ÆÂ؇®œ.F��ñ>ìßß�¡¸$1%eõáôÑ…êJ‘q0Œ�dHŠÔW…Ÿï4þ‹¤§Sðt½ýtùù¢¦àþå‹‹Ìþ~ƒ»jEar:ùè®?1Á†)$g‚¿¾]ðßêr,þvùý/.YÖÑW3¥ä�v׿~bÙ)Ä”X ,¥­Àrn +Á8/°¼ž0Ä”$Äp� mYbPŠNbA 2& +¬1,m·¬1LÐ$± †N.,­ ‡6J‰<¢ˆ¬xÚMJ÷ÏèÉÇd’È àé`$žµ“¤�–xiòÞ»(ñ²¸¤´Äs�Åi"%ñ Ù$ž‡,Ö[%ò ‹‰ÁJ¼Y ´“^„,°®(ò ‹òJK¼d'—"‘ÈKà©â–g”›\´VI<­'Û´"+ +“äƒÀ3�Å+—DdqV‰g! áGâ'œ 1 +«Õðê¶Êj‰ç ‹1�DdÁäK` ’ò‡ÉÆÁSJ‚¤#òMC`]r¾%,HV!ßDŠ'¬Ûd=ç›A‚D�Å!Dy�ASÖ-0 ù&ÐIâyÈbIX�¼ç|3JX€0ù&"zqK r¾Äíà®K@&‰ÜEdê%,ÀòMD¶Rn¯¼. >“™‘3Î(î(@¯ƒo· °Þ*ˆ{ +àË9’¸i1‘YF/îÀ­‚©•¸m €¿ˆÇhƒ óîÓ¸Eåa>3d² D÷-çèÅì�bóþØ_ÿxùåG8ßëÿ÷òú‹¼SV4Œß’çÄñýÄÛ.˜oàÕ”Û#d˜¶ ; –¾§ RR˦ W w›®íƒ^Š ‰Yf�`&�Œý"UИ+ëEY®óåeEþ‡�ÑÛ²_Yȃ‡ÒYþwÝ~8’Û~á{'p�ʼnž­ô…Þô¯>\Õvƒ¿ë—ƒ¥"yG˜¡M¼~øéòËÿþ÷~õÿ‰¹ûðzùÿûÝ÷ßiþ‹õƒH‘('Î4§Ë__þVºSŠâ\Ưèe¦C7ùzC/eÑEþE ŸiüËm1�|¿æº™ßD7ü¾ö6rE. +'ÚýT®oR›ßÿÏõÃoNi1�ZüC,+âã U:«Š ]yMøQy¾+¨*.—Yױ嗕cJÛå:¦(¾¶«^0‰4ȆzjY>+ñVá‹ü8t¶{¤ô¼M\Æn˰ÐǬ̖…>n»‰Ú8xÖ8±Bác‡ðêÑ:ï +XK45Þ Âx'› gÎH‡TŠŠ6!Õ^gÕ´Km]“×X$¯Ë"ÇX¿ýý?|ø¯!Æbó,qÝjlU–›b¬yîvˆ4Q%ÞC]uXÝUžÚâòyŠ•ý~¿Ec2D\¡E÷zTi9ßrð^”稶óSr˜3©öžÆ²c«¼àØCíYÞÐG +äïi¯µJÛ58 5;‘…µ|ïTÑ¡6-Ï.åM•wh“MÁFcÝ·Ñ&Eäï!B§û¶èRÑìnŒ–Ûðz1Èæ­8àŒ³Ãàö²t¢‹×Þ Z·A!ß”M|ûcÕiÖä=�Kª–#h&Ƽ™ºrçê|N +ù5°Ž-mëÔÇÑ .ç¼Í}Í9Õ°ÊV¼º +»»*å^—åUqÕÍ®‡Ô©aëÚöÖ}êÞ_ûiþlKgŠ=<¶O+Þí�çüúâ[Ò;ë«­�Ðï@¶õ•æ ©ÝB l,M)¹ôªÃ½µEA·uÂP£t¾1²»¶NÖyºµÝÞÚ:öPÐ"ñž~ù3ïí³ÍÞîðâ̯¼E™ËßÂ7¦ðëï�å/•Ï4´•Ó³ÕÞQ]¦Û|Ý’hã åšØõ[gt1„Ï«‚»­by)™C«:WçI¬ª‰ •íYUÕ`CÞõÌ…%ºÐˆÌ«™;B76¢½Ù›“Õ¥´F;×-aÓÎJöl‰~I[X×A_âëæÞÊ8µ¶¼Ï÷n³¾d v¦a…8iK‰ï[ðÉ:OgÁö]¸ø”Öt€[Ùr^ë¶Æ’×V`¥WL,–hôƒÖù2´I²…®ÇÐÊ5yïX'ùÇ­ó\�§³N¿‹¯£çÚXVÕvÚz¿¼öc÷¸‹™‹Ë²íz�ÙµoÓeÈÑ뚯VrÕò+k]Ë´‘kkû¼êkãåGœ|]õ{Çõ(ûŽõõøI1?´õ‘w?Yçé¬o?flÞ½bÆ:'Ñó¬žÁ¥÷ÏÒ_þ�,åÜïXÓ;bÅ“užÍšü~¬¨_-¾ìà™ÞÎÞž×2Å5k Ë2Íÿ8{Úüû9^²f7¼yÿ²Å±3Ùý·�›eëôCLçù¡4L}8°Î“užÎ:ÿ�âÀÏÈ*¾Å¾Úq¦vÇ{ ÇÉÆ©Ýš“užÎâ¾g³¸'Ê<¾Öîé»­vØ/äÈÏìߟ¬ótV{°ÇøÏfµ÷,íkáñëRéÄ9ü¾cÉ=îä×¾ˆxåÝ'ë<›%‡ýXµíT¬-èeƉ{ñ[»3f+µîj÷c¿­sê!óÈ+aÈñ¥Ýðf¯Ýé¡n%Í2^K;±3®�ú™˜l}Áè‡3¥“užÎúbQZj=Ïþ�µ¼¾×7âß©LdEk¹±ïøLÙÕ³ì…!îÔfJ*~=cßZÏÕy:kÝ�U7\ãÜ_-<ÿG+¿�å?ê1ŸzŒwaÕŽEö˜’ÈN–ßÞ‰Gy®ÎÓYäAúÅã¥/ r4‹_YÞÇÓl �ö3¶¿Þ¥ÿœ=Í�ÏÓOÖy6K‹›=Í…µ¬¬ø®ÇÒÿ¼Ø‡=I~É9?õ{`‘'ë<�EÄŽZË?dŒø wâpßÙ™I9òñhýd�§³¼íY~éÝŸ&Óª}1?¿‡}ïØç¥wì÷�¬ót–üwç}Åg¬�­åÙôqÇzÇwZNzï“užÎzbÄ�hÿ!Ë"ÿ¿?k9ÐÇÈpöö 뛩kM�çÔ'ë<›µjup#ú„{]‰mkc½ÄSQ^Clf3NÏj»&oé¬Îñ•Bq;{½õ³N õ¶-󹉸¹ Ãß•#¼‚Ãl8móÑ‹üFw;¬ÙÕa‘3ª¯LnÏŽºêÕÑWË·*¶øP`kI��»ßYö%[+£ä;Çë’rü^ß»Ì÷ýËtòtñ ÌûÔÕ”ßÁ,]äƒÒLχ5xÕÁ(Ÿ×‡ÍäþÊ¡1ùpˆá@�Ö~=c�gqG¹Ë1�a3m?_|>¦Qç£z•�“6|–ÿÕÓÄIpHW>2*KºN“ΊÕ×;5ó7 üÜJ•/EP|N2Ÿ‘™§q¼(åÎüÓE'šXÿù°§|€¹ÊäüÀŠüváìI õ£ÈL,Uk‹t;€ªÒnÆ0¥uI$(ª|ì§Tñ ¤óGãêh¸¾«Õø`ARµ�ÍGëÍ DÔôzKæÑ«I2 @œl¹òM>Ô¡{ƒ4–í öЇdmÕ@t[¢ºëdCU͇Æ6ÕùNl¢�ªÓÃôײ& Ó¹G¼]Э]SßD*=^›ªÚ5ªÑì TjTWK¶ ¡6Oévˆß©Ú4a2˜5>Àu&ÆjHÔÊ¥ZN Ý.b¹Òšk3Z©Ø«¦ªù.J7u›âÚm8É-ð·š kDÙúqIæSÀÚ\«8Ø�ÙoGm%vòÛÅ¡´ëX¡\5½‘h‡v9ªn/�ÊoÃÍŸ°4+��¿äÿg¨p�ÊÈ“?hj&ÅGØö«Þ ¯ÍF^*i¤û†:$i@SèeuéšÍŽúÒQ åt[馱uPÙ@©ŠÇ ÕÀcIÖÍê™!¬ê§aåHTUt×É®™òÛ‚Üåtm©:Õ:óz0w×Úídß°óm$‡6ãšÏ#iò¶v›¯Ä[vl´&³éÇÚI'Õ¼]ïl vÁ +�Üaô-“ëjmèÄß±R?öE&yÜÛåO—ìæŒu†OlòVóñúc”¥¯ÿ‡2¿ÁïŸ/tým=ÏuöãF5´0 [äÑ“ñ—±Ä“dþr–JlËf `¿“uìe]µ†æÇ�ðšzuÕ�½–Ô AuãŽD×u8�M3]£í ·C¼­´Ø™Ï�›î°çK[Ç'PñIÀU*\ŒÃÁeì<Û]òuhW\´»tpÉ q16ŠË¡ÃÔ%[ˆÉ9vÒTÏòÓ8–û.†0‚/mçQw³cÓ•–G1AlÇ‹±aÒc§i!� ô»—×gÏ{Ù×ÀÔí�ú6RÛÀ˜ÚO¦Ú|é——ÍçØ|˜S]¼]C­-;¬=Û‚œ¾4zhA‹‹ÑFjìÕJ7vJ•¶è´:Š ©Jk-†*“/ÕªZòˆ£¨¥ÐbŠNýÓ¨i7ÎJS¢gÅoÊr»ÕãµhɶÈ�æúèT/ÙbÉ(ÐüX»Q©—´•¶í›–}Wo{†A]ß#SÕ«¹MÉwáß{ÖŽxȳTªþä�û èpÔ¤ƒ56©�ŠÞCˆ¿—$P¶F®³¿W²Ý©{%cO˜Ž‰¬UAó×Ê"¼�‘ŽCSõ« åjI‰CzLÂVP‡¹í‘Üùû©ò¾cÞj—�SEþ::ËAoäoÑ Jˇró­_lŸäŸÿ 3 A +endstream +endobj +717 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 716 0 R +/Resources 4 0 R +/Annots [ 718 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +718 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 612.273057 101.433071 593.523057 ] +/BS << +/W 0 +>> +/Dest (cb154-1) +>> +endobj +719 0 obj +<< +/Filter /FlateDecode +/Length 4676 +>> +stream +xœå]ÛŽä¶}ï¯èg¦y¿�H8ðƒ� ŒÀÈÃL¯ÇF0`�‡ü~%ñ"ª$±»gÆg³Óª"¥yxXU¢šâÌñó¥À^ æ}pVŸ/ŸNŸOœ9Ãño(1;Ô?à×™³àÚ1#‚õæü) +”c.éìùù„ÿšÃºøóéÇ/Nÿž×gÉB°R˜óo?G•VÌyç¸!T*.¡2†9'�%TV0Üb” +f§¥^ªÌÐÁJ3´”žPy˜¡´j© +0C:¡)ÌÁ8B%8ì’sRC¸ÖJ:a˜E£[J'³>È@êtÂIJ§³N #(]`ÖZã)�†-&pAé l1BkNé`‹VÞQ: [”UœÔÁé�¢t¶H´N t¶]žÔÁn¹ tA1¼Ö¤.@ǽóK�䆯§tB0l*R‡…N²ŽÐIØb¹ ¤¶Å%¥S°Eã‡Ò�'ŒrÞ£UÆÑ­¸”ÎÀ)�&u°�O1€´°…;KQF‹¼Dq€tŽé 5EÒ+¦½ö H˜vNQ4 ƒaÚGñ€â:)("P¶m)&P¶hŒ\R[TÐ( [P€â¥`‹ÔŠâ¶Õ@ Å +t«y(ð­æÂR\ @¸0“S\ À¸Ê[Mq�åJ�âÎUàNŠ HÃÝQ\ ÀºÊXIq�í*í-Å +¼«´àhð®R¨Iê` LqØ‘)áż«whð.†‘¤¸½Ê€CKq°Â¤÷œâ Þ•žkŠ 4xW:L¤Î1ŒAEq�ïJƒ[ fnð®4\R\ Á»RKKq€ÂÀ?œôÀ» C»°Kqæ{褢¸'cn ż+¦?bLƒ­˜ðÁR\`À»Â£ûH]`¡ʼnq‹VfÂÚ@q�ïb¢Rð.èÓS\Žg˜Q%ż+fjJÞ2pŠ x~ƒ¡¸p`Řߘà€.© Œï).0à]Ð’¤¸³0ãLBê�Å cÆá‡R\`Á»˜ÞżË�RXð.×p{HlQ^R\¿: [bLÃYe\‚)(x— ô0¥ïrîż§MŠ ¬‹é).€� ^°¤¸ÀzÍ‚s–â8tpùH�e868�e‘:Ø¢�¦¸Ž5 *xŠ œ„-JJŠ œ„-p(.€GÀ‚€÷M†°p!ã [à)R\&c>hMq�3ñZ•ÒYɼ]“:�p8§¦bAqb)æ1è).Á³è.Q\3 šâ` † +Å˜Š˜—ðÌ)�€-p²).€§ �x [à R\à¥G”i9Ř¡K¢©)�æ1ÎôxmYt).À0A¤ ¦$u°4Aqú'Û†â?6æ�:Ø¢Œ¦¸À{ÃMOq�÷°ErIq°ãMGqAà°Å�[ÝdŠ @ãÐqNqAñ¦Ô`\ÆxÓS\G¼‰�·AÙo:Š ‚†-. +©ƒ-pš1nÁIˆ7ÁN”ÎÂ4ÅÁÚozŠ àf Þ„GO¦|Œ7™.ïšf¢tà]x¦–â Þ„gKÅöÄkü3ZécÄéÉŒõÌ­dÊ€ƒ{1[92gÀA¾1F"“0‘¥·dÖÓ*”‚“iþ…?¦œ0fŸê•æLïâM ï>Ç¥˜Z)6æÇ~ûåôÕ&ßó/ÿ9=}1dÊÒ�€ƒ0”Öð¯0 d@wxß·¯,:Z°A¨ aà-u¢.#hqJºE#1ýÅç凙å0ü‡áò*_>`/ò–!4€ì¾¹ÁÊâ+«¼ ÁÁf[‹2*ÈÈN€üJ®g…¿ýpP'+Æh>¬ÌÇ|‰`XKsþðéôÕ÷?~ó͇¿FžN?ý‰sc¾þRà¯öã_ãšcQÉ.“LbT.ðk Œ>óñWÛ©\s ­›k­�WÏϛΓËÉùy†kOu†¿ñ×�Ǥ.~V“î¡)óqú;Ée4H}ýÏó‡ïNþ0Èà5Ñ 9€ØY»ƒ©¾*÷`ê5 „tJ±)‡ß�Óß°lFýóÔe + 4Ø$x¨¶�f‚CXÊf0ÔÍ5[عêÚOshé‡QnxÝÇÊžtž�ÅŽ _UA,ÙÓ5;·Kpf1;ž@�Y¸�ÒìଳÎÑ€†e i E¹%/øJO¤^œõ†\oùA·ƒÌŒ6±A–ÕùÒ猒§þk ˆ +ÝROµ�ÍÈI:¾›£é2oŸrÝdªLg&>ŠÁ��^×62ûê™z“uÓÛ¦AÆ1¦êÑ˼÷†^JÈH¼#FN"yfêýaʳձj>Ë©NXá%±œº#º’][Óö`³jêJY[í`—ç��î‡4¢WÐX9lÝhì«s84n;w‡á»—@–(åóhàókÍø­½]ÝëÚ¨|\:©[HmG7Ùv­­{\Z¹†Á ì‹ñÆzûê½Ûþä5½‘z`ðÒÇÞQf9¶!C=£*¿Þ“3žLȺT½\û�­­n~®ú*Û\½ò™òoóux1²:gvYù�6&îÐÕn��uކF¹ãsÞÓ«OÛþœ–MïL|(ÅÛsZ.ó4ÿ›GÎCc{…ü-¾«Ûcßÿ]Acå3 +É÷2¦·ÑØWçphÜñ3_ FÞôÕ§ˆ¢òÇ2".Í5ªÑuqî2ÂXðÕ»‰êV[ù•*"D¹ç‹vÖ9bw|Ñ{cÞkbÛ·àÉ+FŬ¼®d‡B÷ +‚+ßR86$�ø‚ûêÁÛþè½�ãì·DwB룯׃X›å¯ø/.ÖðÃöMÄuÖ9âÔ¶ÏÙÎÎ1¼Qg‡RG.1�¿Ú"æÍù3É—¶Í8ò†(�òlò9ª¶‹×¾=b\A¯ºþiPg�áwÛG•~¿w7ãØA4<¹xîÒä©üáýÉËxª�Ö‘w|/³¶*>dw©³ÎáP¸ãw¾ª®Ì=þñ|Ã{½Ÿ”?±;:ê¬s8”îä:ïð·n{’W� ;ÿ›‘¿†ÖÖŸK\Ú  g±nô>¨ëçѹȦ÷ñ·¬=ƒfhÛjȬð«¾ÁGí¬s4äê5ŒOü’z,!ZO<Ò¶~BFƒÐÜ ªÛU³çG=z-ÛÕ#µ¿›‘ÖÚö±ª·÷´”ÓíQs½ÛeøÓè»Êø;]WÆeÂ+ –tåo⣵.ذ‡Þ¾:‡Cï¶�úÚk„2ǶÏìíò9ÎZ.–ôêgO¯ åšØ»UÔ¼‘GC‹fÂöµ™\›ø°¯Îáµão¶­—z ]¯S=5”u<¼–-·üöìºÞ@Ò»õ)ïñšVP\ù–½«ƒ;ëÅ;þhº®É[ΞþÕ97ﱌŽ�# +†ß;žžæõ§‘o#O_šQ´ƒ²v”�QÛγvMùá­w°Ã¯†_ÿ©³ÎÑ�iúžÃ_å�U¾âÿÏ]áW×ÏáºEöІÑïw<¯6\ó5MñE|]U(ëv‘ÛWçpÈíó53RmÖÓ —ÕYð’E_iñ|±Î:‡kñ�—[¬·|@­MQ¸7ã)[f–˜ÉŽñ”ŒºÇñ˜ÒÅ:)þJz½óËtÞǪž.õëkåPê²ã5bÀ�Ïk'['Ä:~—C<ø÷Aã«ÎÀõ⫯Îáðµã%ÝÚÇU_]ÕÇvÄEäÜëãžûhìh�Ó‹Tù<ø¬ädÛeÂôñÒŒeoȦuÖ9¢ì¶wQqKÏÆìÏ{fŸûì_AÕ Ob;ëU;«gÞ¹ºw_Œo¦µ÷ÛVéuÖ9Rv²WU^ñÕ"‡•õëíº¨ž¼,õf åÕÕÏ’rÄUåÒš$#VlëÈ _õ\)åk7³q+hõׯ‚î¬s8´Þ–¥z�þÕ�píÚ‚žÌÜkŸ†üD[î�/×G´ÏÌf™4©®zÄHÆ�¶~ïí‘Î:GCªë{cù®<㵫I^0/ùþ²f+ˆ¼áMåÎ:‡Cä¼Arͪà·Ä»ñß�Ýë¬s8÷­ì»w=ýÝߤðÂïP­ÚÔå3á+è­Þ ±}ŽPm/&ï¬s8ôîø®oùÆÈ[!ô°«W¾¸é†¼cg�£¡Ñïø§+«¡o}˜Â59jh�ð{®MmWqÇHfà²f½ÔûáØäÞð&tg�Ã!wÛ�½û{–Þ¡Íj;j]ØKðë=þöfþ m§¶ÌçÞ�kí¬s8ä^÷fJï7JÌPt!ÐPå=cv}¶~žâ fÍè�‘�9Ú'¾x‡ëêúõªœ6“TÕm×ó¿íÛˆ+H½á9wg�Ã!uÇW} |ÇÔŠÕ·•½õ7öÈ»¶ÞËjëlåP¯ù³xO¯!Òˆ 7ø³�uŽ†Ø°ãÏîä@�ççÝïÉ6ZÜõZVÐ|ƒ�ÛYçphî\9x£¯º÷]¢{Omg³ðÖ7Q¦gîõo’Oß<¬M_¶œî«gEä«�äôÝ�gí¬s8ôÝ÷Í=ï’ç®ÉTm só:V×ø¯Dw¯…äÞ²î¬s8$ß—s}—H~‰\AÅé³o͸~xÛuý¶Í¦5}o&fôþ0í7á :Ú5ìdyµ}E†ìn‘„.7»H[FœãO A;aÏÂÑ`q£YåÏpDupqo–¹üå›oÿú·êKPìO¯ï¥×¥…àù ˜åöL°³c³™¡Yc7Çî-ÝÿËîâòº§±i‡P(–µãïp®éópŸ²éz1lŠõã’7êgç7Óµ+{†s˜êLº‡E·}>ÙaO!1ì+Ç­gBÆ�gÏV³¸ÒÏ…sÜÇÈs¥Eê&14¬8¯Ô¶ëýœKM;øò¸©_ÜÐiÜÞ·:˜Ê:øÓIÍbûG²wÛäƒØËtPÄϧ¸Ûª&ÄZ3Ù)ŽÂé#ÏçÒ"̲ 8ױЖT†ñécÈ'W&}”&ÝM¬oRµ¸ Žæ©�ö�/LQÓŠ¥8Þ=gbÇk=Sӑͦ›l†°œP×eË KÅ]±P¼š¥�W—+b©“="îp–›Îa6½n:Qu*+]Õ�[ÂË —U­ô™”Æ}2Ó©RëJžeª2*d©I%s‡èÜO„èr"„_òtj�ÎÌúª×ânc£Ð' é\.¤r„èr"ËMg3¹§\.åKÕ�Z¾˜R ®|nxB6´Ñ$uq îjŒp•>ÎÅ6ö@êkî+ÜÈ…ðr2:�Ä"~>G”6…+¸IЫ…ª:o{^ðR¤qÁùø C3Éâ^Mñÿ‘*L–Fæ>�!÷[+Gå"qlfñ¼‘j¹Í¬£©Ú•²Us ç2fëöžå#éæÒ¹ÅfÒªÉ*¹ ɼHR™<æb‘Q—Å‘ÂRûd®¬…<�˱ÉP~ž‰‹�&U€=]ÌŠ +î&Ÿ·ˆmæÎçZìr�‹¸y^¶7Ÿ·Â|^†‰M·â}Ÿ.RÄ’çÙ®\¬Ã@ +E\hôy§ÑšÙiø÷écdÔŒ{9ýz¦9©Œ ø`•ˆ{ÁÖ^–8ÿe¾Ãï¿Núü}Ú|lœÇ%Ïl!3·ÎÄõLw÷�⸓xæaS ¥®h¿ˆ…/eMBCžÇ¥¬øZ—ê¼{*)2ƒŠ¬­…¦´a%–ºR¨ªĕðÒ´bvdîí›2a�‡*Ý.£â¶uÉ*Ô·ƒC_tªLÉçê”8ŠEË”­–UEÔ'ÅauÁP,›™Y_$7}´_×]¡âµªƒÊ�ˆ‡ªèt™fëS'ÙpU¸Àª>¨O¬E}Ñ0³‡0úæáuw¿O&Û4¢4S{–>×Ò|cQš �–ªáÐÎóœ£Îñ ÞÒBù\ª{*;9eh×BÏjŒVR_ªML}Q�d³‹¦‰"Ód<Éò]²ÉNÕR³ wìÉVrÙ§(Ò_ë–6u¯äF4u¯ØEÙxÞ4ãeoIeÈÔpvåîx)™}IOÈl];Ku)©’lym=¿všmÏÕmèbˆ-ž)/ÕÌ¢äMüwËØë4YªTú2!—í:1Qká”TçÝo-8DÇM´�öUjäê:Û¹’eF$åJê+¡;˜VŠ;¼­˜ð EØWT§zžv:¥«NÞÒu @¤‚ +ÍñE&H15¥4‡„P>t1T4aØòš{·|w\�©¡ø]4ÂÍÒ'ÃÏÿßSÀì +endstream +endobj +720 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 719 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +721 0 obj +<< +/Filter /FlateDecode +/Length 4972 +>> +stream +xœå]ÛŽ$¹q}¯¯¨g›âý ¬Û€ =C0?ÌÔlKz ¬üàß÷ f’ŒdF^º§w]°fÐÝ•¼ÉÃA&3Kßþ§ñ+9=¥”cp÷ÇO·ŸojŠ^á_I±º(ê?â'ú»V.N^ç�üý'Ø8ÅìM ÷×~ —<ùëíO¿¹ý×:�¾›)ç`´¿ÿýGR9;Å£ò‚*C¥´TÞO1UК˜³¤‚>:㶪3\N^RÁ gLT fXµÝª2Ì0Q;I3töQPi;´QJÔÁåœ5‚Nû) Óƒ¤3z +)›,ê"t:Igí¢Ó^Kº<…|’t¶ø¬´¤ó°Åk甤ƒ-Φ(él±Á*Q[LŠVÒEØbÐ;YÐ%Øt%Q[TPZÒe;ùœœu:•bÚêŒò“OÖ*I§õä�M+ê0£0H! +:[‚òYÔÁo•‘t¶8ü—tà ocJÂl54»­²ZÒyØbLt¢¶`ð%0¶¨$ +À šˆ—$01N.'‘€IvrÉ%‰LÊ“‹ÑJ4`²Ÿ\ÈQâ«4tFKD`lñ.HL`5lq˜¹¢¶Øì$.°¶ �ÄÖÂã¬Äl뀉 ,èÖ©¬%.°à[§t�¸À‚pa¦’¸À‚qm +Nâ Ê”²ÄœkÁ�X�.¦{”¸À‚u­Fâ Úµ.‰ ,x×:­$.pà]k‘SÔÁXâ°ãdu²8ð®Õ*J\àÀ»˜FFâŒê‰ €•ɤ¤$.pà]“”“¸À�wM„ uq´8ð®ñh‚ä¹Á»Æ+#q�ïg‚ÄÊþQb4Þ…x9€- X‰ àï¡3Vâ6„%xð®Îpœ[M:å q�ïê„áuyÒ=.Ì[ôò¤CÈxð.••¸ÀƒwAŸIâpü�j$.ðà]má©%xW›¬$.ðà]Ä ^âÀaÒ$.€›´tE]žTNIâÞ-‰ à…'•À$¢.N’–¸d<)Ä¡ð.Ü{–¸ €w•·Vâ‚ÞUa�¨ƒ-6‰ ×@‡i+Ìi«“2` +IÞU#,éÀ»JÅ,qAï’Û”¸ D˜$q œ‰ BrSŽ1H\²‚!Ÿ¨ ®½ÄQAàAY¢¶¸è$.@`=e›“ÄÑÀkŒÄÑÀ„  "˜²Fô-.` à"®lA¤(q˜lJÙ9‰ ¢X�¡W%]0SŠ kQ— ÓQâ‚ÝW¬%.ÀZjJ˜ô€à' +—$.€Ði'qA̰SE⸢)Dæ’NÃÙ Ò…Nk‰ ’�-ˆ%.H&a•”ÄðÐXK¢«%�S´ÎL$& +%.À4ÁJL)ê` hBâŒ-¶½ÄXü`±‰eލƒ-Ö;‰ R2´ÜL¤[Œ2›´ÞŒd[ñI\�U˜(L–¸4�Rd�°Þ4NâÌKZo&‰ ²UXob‰'ÌÛl­7£ÄÙÁ�EÔÁMY˜·à$¬7ÁN’.À“�Ä9Zo&‰ f`½‰ˆ^ÜH´ÞŒâvx×g0“¤ï"2 àëMD¶ÒÚ^�x}D|&+­8“¸c @½¾UÜ2Pà^x«(î(�/­‘ÄM˜‰•e +â®Ü*”Z‰Û +ü‹xÌm8aÞ}â[Tpˆð™)R#3¦…CtßÖ=™ÝI6ï�ýý/·ß~†ó½ÿå¿o/¿);eõ¿F€PR;ÄW˜&c¸=¢o�æ[Ø¢L1 –½)1Us7Kƒ—m62 �þÝ·V¶ÂT2¹± +´ú÷‰¯¹bpO)ÝaŒ�!/Ùm}sžS“#b‚|o´l+ë#Voï$ÉÖ7çùp[rc‘êbòzA’‘g‰?vð{½Œ´­×‹&`dÑØ«™>ØhÛF4Ó ”¥�MDÇÄai‚–\?3ù�Y>Ð`…<"€46ò  E¬}”[%þݧÈt±bÞ§o—Ì|ÄtÎÑøû§Ÿn¿ýß~øáÓ¿�Ÿ^nþ'¸Y5ÿ8÷ýw×>Í]\þ>ùr]Ò¾,2³¤ù<˽]®Ý:�ûAõà—ÏLï—2ÍN™$ÿq°kÉã³çªíæÚ©—Ï_!k½§Lö=}úýÞ?ýþöÏŸÖÀ++¦·aõZ–oÁê/Ñœ� º 75Àí ƒÇ"sË�0ªP-°„=Ú®‡®m…Y…j�ïc([€bÓ�I*+¨ý8Ô÷Xä¼¾—uš:¥Zž¸®óÊôiíÒB9õº•'Ôî,UÐaÑf´KÎ�àôbžg*V÷GHm„Ö#v•È~mÔÕÏmf�(ÔèÔë™Ôtˬ\!+¯Ùê×}$¶'®ËlÄ9öóch¯Þ'Um;EÒ¶ Ö¾´¢8FëµÖë÷¦Êˆ•Þ¿ÒÝNóîþóRCÇÚ+¥iÝ3ŠŽ ­iã¯zÏ–^#«‹Ua1'¬ìðt®ÐÒse‹v1OûiîéÒ‹_·åK‡.éÁžm9¥ µwCé©#;RÚ³Cõ¶”¯í£‘03‹ ¶Ñ^²PöŒÜ^扽¯çQ]{›¨ÞvJÃbc^þÙÞRvMóÂPoÖuÎwH—q¨ýá«·ëãìC��äþõj샆Íl®ãk™Û> ðuÔl¿²ë¶�ýØê +Ìf¿ètïÏÖïÕ.ÖÇÕqœ–¾)X%;>øóÌÞ´¶AëÃ~3c¿½�™®°Ro�Q|Þ_pd[pƒmf)�ãºÎ�1²AŒ?[ŽœÑCU&iãÕ陯KyÞuðïCßÎÒiyïcyÓ€`7neëÅ…[æÐæAØ­0‡Iez`f¨°R ¿ÙïʦÃ÷Ç%›'Œ®SQ(Ñ¿œåv©<_‚hÏYn¦ì1fRî£+îs |ìiïYzz ±rØë½ó-�“Ù'KÊJ-:íMK£ëÊ úwô¦C–h“±þ×éM— fUrp{ûXôËÆ×qc)r~-à™ †�e³÷ËÚA®‚»pl:=�›éY·¡ÒÒ“;$¢®„åéé&• �ê?$¹‹yždùÖ¹.ù#®SŸ¹ëZ�ùx›gµH·ó÷ŽêíÒâi†-y~V}®öz!1»ñañ?Þþ‘Ž–²ÌŒ®6îºqóµ-ílhu°Ð{¼5=‡&ë%ÙÞÖ==ÀWQæ&]6MÏ€y)˓಴¦§ÒŽqy>.ò²Vd¤èõ#5¶‰KèÅÂéÆHyÍ +ÉaX¹·—}Šz¨ðˆ�bŒm�½¶¹~1Ï“Œzc£˜õѨ_ºMá–Û:vÙ +ü\o† º4ë«n•æëòwÑïÞîqËgÇÊ2Œ­Â¥âT�™áÐÓã-›¤LCÈÕ[Óó< ªºÙôë>ªöxd“ü—c²§:fÎÚñ΃ԛ6¾å°òÿ~Ú_;6�ã\L“¶ŽÖ.'¾–çéìÞÅ‹O‰¦³�jñµº�9Þ¶i7*'ÖPôÑù…•9ÞP�rÆ›£»üêÍÛÑy-ÏÓ¡3ò«t,M<">x¿z+™¤‚ùâÊqÄÕA‰ñhÐx|r@ëhÓÆ.~ŒtçÈÜÆË ë¦3Ô×\;èëñŸÅÚÞ(úÔ»_Ëótè;ޝ<–c.òÒûG‰Å—ÿGH¹ÖFMù±âÅ<φ¦|+êÖ‹_øLoGïÈk™Å5´Ž·š«þ:{Úòó-^²®nèvÍ—-�]Ùëùõãæt²˜.Ð;[0ôñ �×ò<:ÿÅ�ß°ªxÓNä7­<Žút�=†»|òbž§CãIÜ÷lˆ{¢•Ç%ÿ"�±ï –í^}Ðæbž§CíÉã?j÷�öKññ‡ÝÚ{�B<鵨Î!ò>[x_ÍôlXÖê8\=ºufB¸Õ©Åº`Ù{r’‡p''¸Ï^XÓ@Át›ç~‡sŰ]9 iÔ,Æÿ¸¼w,zŒ”×¶¼/2(ö³ºÓ$'«7²¶¯eºëáUXë{](’¾pÀ¦»’ÀÝÖË÷Þ±"0�ù�·rg2/÷6ˆ+ê£/õnXŠeåBÝXMýØ»·Ü[1•CNËñlÓø©~?(v„Rµƒ[¦±Tó)và«•_j1{V‡Åò²Ú)mØ ÛÏ·PÞ-©Ëû…UH“6ô÷à&z¾2æ;½Ï2)ët&]:Vßwr–¯mø¹¥Z¾ÉAÑË�éÅžeùÅ’þç2À?Ý4«UólŸßº®Š¸lË â×½uß bçúÒ1 —�ª•…ņd°fœò˜ÒúI-û±Uº­74¾¶†òûš�Þ†èTMdËûçŠ!r½SëÕ¤1}sAšìrš)t8© {�ާíöŒ§bmú­P±êºØ¸j�¦7ݶ® ]ØLç]§Ùð×´XÉšKÂÇ ÕÚQú*Jé}鵨ڻF5™eFå&õ5eׯI=n‚ð;U‹v̦g£Fo��…©ɵt¹¦D�›˜n)Í·‘Š-UêYsíùnJ‡ºM­ãÙƒíŽôU,lŽ([?®Åt¹�µJ 7f#|ܼk3±‹_o> +©}ç +å+ô¸Ð²r›8©Ž—.¥{ó'LÍ*£wvÒï™*|“ó”Ú5HÑ{wûU¯„æf¯;‰ËCc'õ€v±§eÝ¥cl˜åý¥“Òé¶Ô­ÇVRÖeLs5�Hª‘ÇZ¬Ꚙ(¬öOãJ.TÕTמAùu%îvú6U½j•Íàî[¹]w¾rql#®é%ÊÍÞV.Ã|>Šcs£˜ Ÿj%]lTóv½2&ì†�º¸Óèk×ÙÚØ©¼=dùØ'™äq·¿ÞŠ›3Ö:y¬¦ïàQ–¾ÿÒü?»¹ûêKhg?nTc Ó¸u%枌¾A&]Ó7ÊTa›6Lh£ý.Ö©§õ Í�ÃøÚõìª{M©ƒê¦åBßû�‰Mƒ®Ñ–õŒ?>†^l�Ì·ŽMwØó¥­�£“Ôôúâj.xsp™ºÎv—|gE⊒v—­3,#.x¡¸dænÙÊL$¯¤u=ÙïøPXª‹]°0‚.m×¹îfyÑUVZÁ’ ¶ü‚ì4¯4¯ìŒ~÷ôúæq_Lu�´Q{“¾rikIáÉR[.Ãú²ù[%×ÉÛ{¨•eÙܳ-ÈéS£‡nuÁ1ʤ©g[x^©«²U¥ÕQ4º€LUY+1V›Â’­vKiq{)¶˜¢KÿÊ{ÚóQi�èù¨„MZ*·z¼-ÙyçØ[§zÊK&Axî&u=¥­²mÝn]wõ¶wÖ × =2U=›ß¤|ÿ½gîÌy†])Uý_vBtê¯m‡£v:ZcË7ñ©8ÄÑ—©D—ØÖÈ›óï•lwDê^ ¯ Ã19kUÔô�в ¯Päs+ª~ߢœ-+±Ioëa+¨ÓœÚì•/Õ*{’eC¨]FZ*ÒwèY +z}õOTZ~š—¶…Ójû¤üÿ_æf7e +endstream +endobj +722 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 721 0 R +/Resources 4 0 R +/Annots [ 723 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +723 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 401.373057 101.433071 382.623057 ] +/BS << +/W 0 +>> +/Dest (cb157-1) +>> +endobj +724 0 obj +<< +/Filter /FlateDecode +/Length 4691 +>> +stream +xœå]ÛŽä¶}ï¯èg¦y)Þ€À€ $øÁÀAäagÖc#˜ `ç!¿ŸCµxUj]ff£µwÐÛ­*’*‘‡§ª¨›ºJü}©ð_ %BˆÞÑõñãå—‹ÞJüJL6õøx{U’¼°*º`¯“Àxá£ÕÞ]Ÿ/ø¯Ûl‹?_þöÅåßÓ:êªEŒN+{ýõǤ"#|ð^ZF¡’Ê0*k…÷Ú:Få”À!ÆÈ©`†õ¤i®ò0ƒb°œ +f�Ö�Q˜aÈ+3WE˜¡½"N3T´žQ) ;”–’ÕÁId4£SV8tºãtZ ¢Ž¬ÎC§¼ætÆçIYÅé¢pÎÙÀé¶Ø(§³°Å*"Éé` ™à9�ƒ-ÆÉê`‹Þp:[4z'2º[€®Àê`‹tRqºh„��ˆÕEèdða®ÓÒ +Œ‘œN)a�MÃê0£0HÎ3: [œ´‘ÕÁk¤æt¶þ8xÂ3[ušÝFÅé,lÑÚ«ƒ-|Ž´ƒ-Ò;Ž0ƒDâ%Ž´÷‚¢&Žt0‚Žtˆ‚¼7 èh¹è90RA§GFÂKŽc£` aæ²:Øb"q\`4lAŽ Œ�-š ÇlK@ ÇtK2*Ž ø–¤r.Ì”0® Ž8.0 \@)r\`À¹ÜÉq�ébº{Ž X×X§9.0 ]CÁq\`À»†”一À»Æ &«ƒ-0Ç`GaT0x×(é9. ð.¦‘渣*€CÇq°"t’ãïê ‰ãïjÀê¼À4xW[ç¹Á»ÚJÍq�w5iÇq€"À?’�À» ˇ°Ëqü=tÚp\€Æ„FXÂq�ïª÷ÇÌi°•P!:Ž ,xW «‹Byô83oÑËB99.°à]8*Ãq�ï‚>Çàx�ª9.°à]eà©9xWé(9.°à]Ä –ãÀA(À¿ %]V…Œ!p\`Á» %Íq¼°�LÂê¼�Ç c!‡r\àÀ»pï‘ãÞ•ÖŽ xWÂV[LÐ ®�Ó–™ÓV…Ô` +NÞ• +#ÌéÀ»RúÈq�ï&·Éq�óI Ç0P +Ö¸@"zï8.pQB‡��Õ9�mËq�—XP«ƒ-ä‰ãÖ"š8.ð¶­9.ð¶ dà¸�ˆ +Ñ7›ÀÀ…Ͷ Rä¸L&B$â¸À[‡| ½ÊéœÁƒ®Y]€NyŽ ¼'W¬8.@.%&=Ç x‘Â%Ž `tŠ8.ð¶`ªp\W$‚FdÎélA�Íq"]è”⸠hØ‚h�ã‚ ²L'9.€‡F.‰®æt$Sž8.äD +9.À4A¦ ¦du°4ÁqÆ'%Û–ã$?H6‘æ°:Øb,q\‚NéfภØ¢¥æ¸ØLù¦ç¸ JØ‚ˆ�ã‚(�Ha2Ç qè¤ä¸ ª€|Sǘ—)ß D#‘o"Åcæm4.回ã‚H°Å"Dau°ASdæ-8 ù&؉Ó9Ø¢#q\�Kùfà¸aòMDôì’@Hù¦g— À»6‚™8x‘©ã¸È7Ùr¹½ñZ�øŒW†”qvÅ@‚z-|+»d Á½ðVž]3� ß”#±‹0™epìªÜ*”J²Ëü‹xŒfœp[}j—¨ààá3ƒO1-Ñ}É9j1³Pì¶>öëO—¯ÞÃù^úÏåé‹a¥,ÿ)CiB|…i #†Û"úV8|ã0ÐJ B,„�Gê$#|¬F*Ðâ¸è–Œ„ûKÿ®óËaøÃîMÙ}„¿í�i”Ò×am°±xg•W48íÞÖ¡Œ‰:± ‡¸RÒ¤ð·ï.êhÅm ´l6æÃ_"&m¯ï>^¾úþoß|óѻ§Ë?þ �¬¯¿TéÛß¾-h�ÂøÛŽß£ŽÇm7n�å€ D“SY߯P¦“ÑÓ´=ä»’êþÊ·™–SðÑãç r4nõô8Šº³}lK«±›hìW™PÞlMŸRG5¿»¾(ý÷T�“\w|aj¿õK}ôõ?¯ï¾»üñÝ€CTz O”ÈÊÌ +f·Uy fߪHqï@uÖ}Äwg‚Ñ0d¹{ßß¾'CûJ°ï‡ºÀ"TèävN?ÞãóØöÇ´J?‚‹àFLò”a�ëœ �È”î’çÎѧA=ÒZd¤äÑ|‘í»ºáNPÞØQß!oBâñ††½ûiÛ·r>©?–Üå¸�f*�¥S<0έyë�uN‡4ºË}iŽ—^løa†¤v¤óß™ÿ´t(^tWêwÌ}5¤´ €Ô_Û5Dn«s:D®Ž;Ñò› ìŽåq”Çf6t<›Ž!ٵĉJ/ ¯†tdµ�H3Jî#o[�Ó!ï~˜{½x$Ë#jö¨,½Ý ·ã³a”Vö5ñ²‹Þí…(\Bšš–-:ÉDŽo?ͦ­iˆ–M"œÑððy�ëœ �ú~ÜWº^]@YšóǦ�ãêh뀶uÒ=ܶ³ÎØ[YMS„x*ý8¶÷дEµÍvŠFk˾¿í7ÑYi×�6Œí uЖ—ɧ·°eb¾�uN‡²û1ߦÑmFi×èf�æoð¿‡2 ÞQX×ÛXçt¨¹—•‘3Ó<]ö^�7Qm¾×! �ÁÖÚÙâ ‹¥®Lçmó1¤‘«v‹×Ïùk³Äzоí…\þ†Öýqž>°Ú·±Îé�ü™ÅyÅ_‡Ñr¶þàÑkšxo«÷ÞXçlè5+1â�hr˜ÈÿóCËJ¼B†so Rš´šý9õÆ:§CëýXs‹wícIJ²Ñ¯¥‘x?Öq�Œ¦£Y�ô0�7³nq5»_ùéóg5oK¿4?°^hšS’ЊÑ¶Õ9ÂVâÒž˜uÂÙ7]uÃè�Y=HÖ»öû˜�!\j—¦íîʆhüøÛ6«³Mó^nȆÐÔ¬çù ”!ïÜš¶Õ9šîdž³ü0Î{rSL×qÒÒ¹Þ‚æ<1w^¹ì³G^›­Ïsàv%}iλ'·ýC[ãï¡�±m;>.¹k›ê'¸ø›~Ò¾÷ÝØ3´a›c°ùfÃöËÅ ïžQÃûǤC¤Ó J¯ŽDòÒ>^Óûn‚4¤ò0©¡cÕu¡æðZ×_J©ñM¯2½ü-½øçöØfc,ÿË0À/*’HýŸˆáöVF9ˆƒÎUü|Ioå$FL$ôFqŽ?ei‹T.Xd�àW/b_ÒX!ÇŸ±4nlþ©m>šTßæjém)$s!3¼/ä¶cFˆšNÍÅéè¥P£8½Ù43n¹bŠuÙfkƒÔ–­ ÖŠ«bed#´s¡lvWÅš²=*½ «t�«ÂbzÛuªþ\Vûf8ï /Ø­é¥Ï¬4½O17•{WË"3�Q±Hm.Y„Ê81¢Ç #üRæ¦ ƒYôͨ¥·RÝ„!‰J¹˜Ë1¢Ç [nlÍ–‘ò¥T¨UcîùjJ…º ¥ãÙÐG£Ô§W57sDšüs*viòXËÐàFÏ„�Ke&VñóÅz¦´­\!m†^+4M»EdÅK•¦dñö S3ËÒ;}Òÿ7ª°Eš˜gø¡¨@*½—«nÕ�¤¹YÄÓNjå®°q= ÈײMw)ï fÛþBÖÄ”O¤[J—›H›.kä>fóIò˜ŠUA]' +ËýS¸²ÊlvWŶ@ùy"®vÚ2Uö¼3§¸ÛÒn»Â�Ï­Ø—Wé%kÅÞÒnƒù,|õâý�wRÅZoWwÖ«a …*®4ú<ˆól-ì4<Õ{üY'çq/?_7§�Õ?œQé�¡m”¥®ÿE™ïðù×…®ßç—TÝü¸–…-táÖ‰¸õdé Óa£8½q: Ë´i„šÚ¯bjY›ÑPü¸Ö _S­.+±ç’ª0¨*ÚVhk6b] «•izÆÞ>v½X™—ŽMuØ·M“»1éõfÙ*l´‡ƒÍPu¦ºäkÓ$¶RÑêÒ¡%ÝTÄFÛ(6›ÆjÙÄÌÈv'¥ë“ýÔ…Iûj6š0"mšª£êfÛ¦³l8ЦB`Ón´ “jw'ö0Fž^/÷Ñd—g@’j/ÒçVZ,I áñR3lºéfñ9æš6òä­=TÚ2ÍÜ3%È©S£†4Ùh1ÚHC­6°íN)Ë&;ÍŽ¢Ðd2ËJ‹>ÛäÆj¹[†#l/ùSTéÏmOÛvTJ'ÚvTܬlj7{¼-™Ùξ�¬%K,™kk)Õ’&Ëæû¦é¾³·½6‡AÕW#SY«ÙYÉCüwdîÜêt«\©ü7¬„¨P_ëGMÊm®1…;Á9p¥—-{ +ÍÒÈî:÷×Jæ+"y­¤Ý†C�1Ò+àmÁ„g(⺢iêy|#&_-Jö�öu³TiNÎV‚Œ0ãòå° T6}Jm^�,CH¯÷R±KCé:²nùdøû ;\Õ +endstream +endobj +725 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 724 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +726 0 obj +<< +/Filter /FlateDecode +/Length 4926 +>> +stream +xœí]]‹,¹‘}¯_QφIëû–�1x¼øÁp³˜}¸]3m³ôÆû°O(SR¤2²2»nß™³·é[•úˆ …"«Uúªðó�ÆÉé)¥ƒ»Þ~¼ütQSô +ÿJ‰ÕEQÿ ¿Ñ_µrqò:‡ä¯?’ÀÆ)fob¸¾]ðßpÉ‹¿]þü›Ëß×uôÕL9£ýõ?�ÊÙ)¦•T*¥­ ò~ŠÑø ¨‚žp‹9K*˜á£3n«Š0Ãåä%ÌpÆ$A•`†uQÛ­*à µ“T0Cg•V°C¥D QÎY#è´Ÿœ$�ÑSHÙdQ¡ÓÑH:k§�öZÒå)„à“¤s°Åg¥%�‡-^;§$lq6EI`‹ V‰:ØbR´’.ÂïdA—` ЕDlQAiI—íäsrNÔeèTŠi«3ÊO>Y«$�Ö“6­¨ÃŒÂ …(è l ÊgQ[¼UFÒYØâð#éÀÞÆ”„Ùjhv[eµ¤ó°Å˜èDlÁàK `lQ1H€4/I`bœ\6N"“ìä’K ˜”'£•hÀd?¹�£ÄVi茖ˆÀ*Øâ]�˜ÀjØâ0sEl±ÙI\` lA‰ ¬…-ÆY‰ ,ØÖ-XЭSYK\`Á·Né q�áÂL%q�ãڜĔ (e‰ ,8ׂ;%.° ]L÷(q�ëZŒÄ´k] +Xð®uZI\àÀ»Ö¢¦¨ƒ-°Ä`ÇÉêd%.pà]«U”¸À�w1�ŒÄÕ 8 +“III\àÀ»&)'q�%@ÔÅ sÐJ\àÀ»Æã¤•¼k¼28ð®q&H\ Là%Fà]Pˆ—ÃØ‚•¸ë=tÆJ\€Æ&ƒ°DâÞÕËŸ0§ÁV“N9H\àÁ»:aøD]žt„Ç…y /O:„,q�ïb¡²xð.è3I\ŽŸ°¢‰ m6ìeºò�Ãʦ0S©õ4A;Àõ�U>Ð`…�1B­€26ZšÀ7ØT(·*ü»O°ÔbÅœo—Ì|K«Žñ×O?^~ûÇ?÷ݧÿÀ`~z½üå_”r?|û�Æ«Oó«óËk½~]_û8¿‚2” C™ÛPVz¿n³ÕÏì}­ã†²KíR*y´¯Ö+ºƒ{lvh¡�zÍÚ«ïýpÿgúÒêÛÿº~úÃå÷ŸÖ +ÛŽyÎR&Û!Z´îâò\•/Áå×€cÎwáX‡Ù®!á÷ “·2­‡6ª^ͯآ8HþœðÿaÐßþyàK�m*i‰P� »ø=YçÙŒ­óWGðZÞƒìZ¦õc–×—¥­Bp‘sÂfÌs!|½¶Q)å{�ö<¡÷\�§C¯»Ï¿‡óÿãþ³!ô=³æÞ=Œ!‰à“¦ Ã=‰öî Ñ?À¥çê<‚ÓYí5É£D\Sß�HøåF™õWÛþ¼pÙ­—'Ù¯‡cw�ËBRì�³J†r6÷‘{®ÎÓ!÷~ûe1Ö/€Ð¸.·A¡þ~ý’x{\/Za}Ù”9à\ÃcQBŠËæhÿu²Î³!ל‹_«ÇêëèÑá+Ý4„ÎUæ¶F ÈAn�ªc�$õŠ÷i‰­ÿÂfDX#�×­×�ÑNX—†¶Ý CäèçM„´ƒÔwžŽNÖy:¤ĪŸ…رzÑ2N|‡×9JíË\ßú-§µþ†v¨¼9a׊‡5b¬ãîp`+Ë×…�{£{úº;ÄÄ>Ïž¬ótˆ=ˆg Ïç}y$ó´»ÅèeÍĸ'ë<šïǸ_º›*£QãM�GÛˆ›¡]·q®�0­ «ðk‡ß*·kÚyåùuÅ�q�&é|ý™,£Ï>�g=YçÙÐgâÔFž{O¦ê:7;¥ësçAÚ×Ë=ì ™Ç¤'w\'ë<’¿,çú«DòGä +§·5@ÏílâðѼþè³—µŽÍ†qõßzY|zöyíÉ:O‡Þû1íf´†]KC_‡�NÍ}6TŒõÒyfÅamf§Í÷"þÈvó÷¹Ì÷=›© Ýâ 8ìk¥|ªàd�§CéÁç +öW3<ÕÓ/ !c.u@REkA¦›ãÊ_ò)ïùÉ�c1ªr“Ñ.9w€Ô“už ©î~\ûÿOv¢Ö^³Õ¯}$ÞO\·¹÷L±É ·{­ä`OÖy:´Þ�]ÛȽ®QRöàìéæ*¯ZWÀ�,{™!Qk^¢Y Ú�{SÛŒP�ë^×õ7èXPSr¿;¹…:³¨-Þ7ã̳­ØÙ}òHhx~Öì;~ '{²ÎÓ!ø~ü:òטQZe“CRõüÀ#�Rdü9>3\c ÈøŠ£pƒ(͸�ÙJAËf‡´××2Ìp«e~m<ÎŸË ë‰zÝArz€‹ÏÕy:$ß�q­°ŸÝ<zÊ‘ž±íqamkàRËž¼nžË9Ö‡úbTцñé÷Àç÷fcéÓn뮘FÄ´ Ë{²Î³aÚdy‡õ˜Öôâ×ȰÎãŒÊ¨cÝâ?·IÌ.1åØÿ½qÞ{–¼™;£-Üî¼] üß[�ÆxFÂt+óý:*Xü%®(ü>eü>�Û=Yçéð{�Ûð»òóÈÓ,vmŸtÉ;Xá±éøg1'bÛÇ2Mj7—âvÛó+K;%ÿz'¶yÊkÛý’wômyžwÛÏÙzÿþÃÉ:O‡Êƒœ-÷ÜËòôóeñj\^ÝâQŒ’Ns’³èëï÷ò{*s*÷:f“4[á_4¤5J6φ¼ðj·6ƾv«kýnfÈ¢ȯž¬ótˆ:÷y×Í®cçs˜«ÑãÏwÆ5F­_Ç.<¹×Öˆ,%ÛÒ¸÷Ä‹£§õ™—!Frã^d˜ïÅ»†­T•ûêgY�Àiã_Ä ™%þ¹É&‘ÏÆ}w\Û±ÉÝy¾ôÕïé`¿ÿ´µ¡¸�xA£Ÿ§òIÙ:úí’²£S5µIeôÿó_¿ûÝ¿ý;�¯jï,njsog¥+;µ…hwûRyc¾ÞÈ‡ÕÆÛYF¿ÔÖÕóÑêw>ÇLäÙ!r‹Ÿù +¼´©{;¥ìm]×;îfsèöòû(åŠÿÏ8œŽÂêÿK½ÏP²øCÑgvîÛ«îÏâ+²ç6£@‡¥û°ê×Ó1?–Žy]úµË8yʤŇG¿m'X:‰ÎÙܶSüP}ŠŸîÙ‘Òžªß �I»?3ó¶`�·@I! mÏxím®ñ×}]ÇÔ…Å—Ë=Q¿í:0l†ÅƼ¼ÙÞÒv-óʰnÖ}ÎÏD—q¨þðu}ëãìC�–dÿ&5ú aE3›ë¸ÇÚæÖzù„R©«fû•]ßÛèÇÖW`6û:¯º?›ß«]±�C§Ún«Ïpâëçg’l_Ûwüd6~Úå�:÷F¾°ï™¯’pÿ†½k±é ÃŽëýQ=î°»jŒ·}×_Á þ2K|nÕù¹9$«)ØrH�³j’6^� +r®ÎC§ÿ|` åÛy t€ž÷˜Jrª‚ ?&Ðõ8X¶”΃°Ûa“Êt†æÐa¥;þW–ìoï·hlž|ÀEZô¯Gµ]*GΆ ÚsTÛ‡){Œ™TûžÇøŸLµÐÉzÏÒ�®ˆÐÞ÷Ž)wdSœ,��-ÝÑ¡7-�®+‡ê=àM‡*Ñ&cýÏãM— fUrXz÷±è—°ñ~cè*rPvhÏ1XmLÉéU€d÷‚žmPA‡rg:þvè´xr‡ärÔ�°r<—®8YçI6��ë’¿Çuê3_žÖc.~ÀzçÎë0ØDÕ�ýs]By 9ÖmÎKö�V,IZ!ô˜A%<Š{ÜA"hdA�Lë-ÑÑOUy²“—èdÚ} ¾{ «;ÿ´=úöÚ–ã}±jôS'›‹8­ÒÞö°¿«Î*\3#š¤ï‡± ‹0Ø*Ò‘ª"/†å�ÆkÀškÂ�mê+/êeð‚y?oN*£—™°£eS³$ìLÛ2Ž , Ö=È-Z¼û|CÐÚ¯Á4³gLçåáO¹‡oÇaûéÊQÀº¯Bš´¡ï‹¹"Š¥'î1_éøá¤¬Óu˜tq¬¾îÔ,ß²óS+EÿC¤è,~:‡¹ #¿XÊÿTøÇ‹¦D‹šñ;I†*b,¡~¿]èKRœ v®§Ä$\ÞªÖ–Ó-CQe7°@œòX\¯–·=�A ÀüÖøz7Tß×jtx­Sµ�-Ç·Î BÔ z+¦»W“^ÄôE3i²ËUh¦PàØ„½AÇËö{ÅC±¶Š ýV¨Xw]l\µGÓÁäÍu¡ ›éÜuš -k"Î{ÂÛÝÚQú&Jéë-jSÕ»F5™eFå&õµdׯIÝ.‚ðU›v̦g£F‡„ÏÂT�äZ¹\Ë ¢ÛE,·´æÛHÅV*õª¹z¾›Ò¡nSs¼ »±T_¤oÎbsDÙúv-¦LUk•nÌFx»x×fb¿]|JûÎÊWèq¡eí6qR/]Su¦f•ÑËôÿL¾I‰yÊí¤è˜ô~Õ;¡¹ÙÄk'qyh¬ã$h{Yæ.cÃ,÷—NJ(O¤ÛJ7�­¤ÌeLs5�Hª‘ÇZ¬Ꚙ(¬ú§q%ªjºëbß ü¶w;}›ª^µÎ‚fp÷­Ý.�;߸8¶×tæ}³·µË0_…·²°¹QLÐOµ“.6ª­v½3&ì†�º¸Óè[×ÙÚØ©œaµ¼í“LZqo—¿]Ê2‡M²¡¬P°š¾Â…GYúú¿(óüþ÷Å]ÿXÏ Ÿ×q£[˜Æ­+1_Éè ¿ÒI1}X¶iÄÆ1Úïb�zY_ÑÐÖqc_»^]ub¯%ucPÝ´\è»™Ø4èm™güámðb d¾tlú‚=_Úzs”å¢Óæ«U¸à·ƒËÔu¶/ÉWÖ$®¨h_Ò¡u†UÄo—¬ÃÜ-[™I€ä�4דýŽ…¥¾Ø #èÒv�ëË,oºÊÊ]°"�-¿à ;Í;Í+{£ž^_<î‹É¡Î’6joÒ7.m7FÒFx²Ô–˰¾lkŽ- £:y»‡Z[–Í=Û‚œ>5zháV£Lšzµ¥€ç�º*[uZŠF�©*k-ÆjSXªU·”;N¢—b‹)ºôoÜÓž�Js¢ç£6e©ÝºâµhɶÈs8Ç~wª—l±dd�×nR×KÚ*ÛöíÖ}×ÕöÊnÃuCB�LU¯æ7%â¿GæÎ\gÈ:H¥êOÉ„èÔ¿e µÓÑ[¾8U¥À!޾û*ºÄR#ï®s?W²ÍˆÔ\ ï Ã19kUÔô¸² oPäckª~=®\-+ñ–Þç!ÔiNm2Aå;K–­$„Úe¤­"}å©¥ 7Ñ7µE¥åÏwЧ�?¯Ò'åçÿC-då +endstream +endobj +727 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 726 0 R +/Resources 4 0 R +/Annots [ 728 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +728 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 176.373057 101.433071 157.623057 ] +/BS << +/W 0 +>> +/Dest (cb160-1) +>> +endobj +729 0 obj +<< +/Filter /FlateDecode +/Length 4690 +>> +stream +xœí]ێ丑}ϯÈgCó¼†�1°6à…è…±0üPU=ecQ³Àxö÷÷P/¢B·¬ê¶z¼]ÈN)‚—yxAIIu—øûNá¿@J„½£ûËO·ŸoRx+ñoH1;Ô?àãí]Iòª肽ÿ”Æ ­öîþvÃÝi›üíöç_Ýþ{žGݵˆÑieïÿø1©È¼—–QE¨¤2ŒÊZá½¶ŽQ9%p‰1r*˜a=iZª<Ì ,§‚¤u`TfòÊ,Ufh¯ˆSÁ ­gTJÂ¥¥du0DÍè”�î8�VÂ…¨#«óÐ)¯9�1ÂyRVqº(œs6p:‚-6JÅé,l±ŠHr:ØB&xNç`‹qF²:Ø¢ƒ7œÎÃ�Ö‰Œ.À +°:Ø"�Tœ.ac bu:|Xê´´Âc$§SJX`Ó°:Œ(t’óŒNÃ'mdu°Å©9��-„?Nž°Æ‡ÀŒV�F·‘Fq: [´öÄê` :Ÿcí`‹ôŽ£Œ ‘x‰ãí½ ¨‰#Œ @�c¢ ï G:ZA.zŽŒTÐiÅ�‘°Å’ã˜À(ØB¹¬¶˜H [�€ãc`‹&Ãq�ÛÐÂq�Ý’ŒŠã¾%©Ç„ 3%ÇŒk‚#Ž (PŠp®wr\`@ºîžãÖ5ÖiŽ h×Ppð®!%9. ð®1ÈÉê` ÌqØQ ÇÞ5JzŽ ¼‹a¤9.@¯ +àÐq\¬‚一À»:H⸀À»Úc +`u^` Ž ¼«-.�›¹Á»ÚJÍq�w5iÇq€"À?’õÀ» Ë»°Ëqæ{è´á¸… ·„ã ÞUÓ3¦ÁVB…è8.°à]Ð}¬. +åÑâ̸E+ å\ä¸À‚w1QŽ ,xô8.Ç Ì¨šã ÞU35§ï*%Ǽ ¿Ár\8€ãÌoBI@—ÕE!cXð.hIs\€YXÈ&au^HŠã�±�ðC9.pà]Lï‘ãÞ•ÖŽ xWÜV[LÐÀ¯�ÖÓpV…Ô` +NÞ• +=ÌéÀ»RúÈq�ï¦i“ãç“@Ž ` €¬9.p�DôÞq\ࢄ.«sç–ã/!° ,V[ÈÇp¬E41p\à5l1Zs\à5l�ËÀq<¼o6<€-€ l�§Èq˜L„HÄq�·ñZ•Ó9-‚]³º�òxOS±â¸±”ô€àEr—8.€Ð)â¸ÀGØ‚¡Âq¦"4ÆVƒ_q˜ã‚HUa6húd–÷´óÔ¼¸ø¸>ÄÏ:q)¼`I‹6§\ùØåT›­N��Ø�´ºàOþþûOÿQ»Íù�úMê‚ñ›Üô=�§.À´Š‹Å''–~ÂçeEF}ÖÍÒ|ž¾'½Ö“>>Oß4SS–NÝ?Ù:Ùhíø�tô:Étw4}¿6i§|ô2åQ“üH[Èôá1•º:#Ĥ^¤¨÷@u0ÏEPUÍóm *·`î¡EÏåóN­Û÷Ü ‹µ·rOæ¼ D[½7è~œÛQ:;SNgû€D7—ÍеS{�jÊcº:e�¼&oo»?Ó^+¦Âq÷Ó‡wnÁÇò\Áî!^¼$švxk@ÎëhOáÇ~fyæÄ ‰Z�DçsS&ñí¯¡¤+ö® Óëóè<–çrè ›üÚÎ\ dåÖŽËÙoû¡Î¸³ž ó´å¼çì\·nfOÉèegWNß¡µ·iaWs­å¸«k1Ë·<ùÚÕ»2ob }Õÿ3�-€¢vg÷cy®†>½í3–Ù=sÆ�]Kª±W�ðÒã½Ôø—ÿ$¤»FMú_ñ`žË¡iÛWL3SiÅç >SËÞÛšµô4´úyš2gÚáóžY2G7Ÿç%�õ³'‡è¯ï7¯ ³ñé\Z^D×û=tËs9tþ‚üÀwDGÐù1‘ÇV›® ±úp6=˜td±æ`žË¡qÇï»â.yBp塚|AÔ6ë…éV`Ãm­mÔËs5Ôš�5Æ5Ô®!íKññëÜ–Ö·œ‡°Êß<’Mõ;Ó‹VrÞnõcæ¿õ1uy #¡‰ñ¹Õð‚ˆF—Ó•|ªAÆ3ƒ´+ãJˈÄVÐGþt¤t0Ïåзã‹Ò¼Õ‡Þ_Ë¥Õ»18éd%6v�WŠ®®²Jd¿³b”A§íÛh=–çrhÝöU-Øó\ã_Ífþ'†+?ùggÌK�‚ö.¬Ü@dõ)‰Œ0é9Œ°‡Ècy®†HÚñC?Ü_ú`� ±£ ¾CÞŒÇ㈆³õ´å÷«ôïYÓ$}>N?˜çrHûç¬iÎÐÒ¡xuÆRÿºÜGÍšdz\Ñ´¶{ˆ<–çrˆÜñO¢åé#~ÅÕjî;[-¤%öVÐæ¹òþÍò£WŠM]ùl|¾Æ}¬?Ìs5Ú�ûÕ®CEv(3pm(0®ö¶øà\'ÝóxžuéQÖ”VÓ!3•~™Ê{nÊ¢Zf[GyV²Mû4֛謔ë&òjQÊ“ž¢—É×/a?�2û€Ïw0ÏåP¶íóêݦ—NõnžÑ¦‡¢ gêî{í©Ý§Š*V7}Ëöù›³OívÇãS»+¨y`Mï`žË¡fÛ/+=gæ=8[©íf“Ù“zl¯œCÏèt+Æ%M7ÛækH=ÿ¥Ê-³~Ž_›• víË^‰åó3ægý<ûÀzßÁ<—Cò7æç}Ág¬÷ÑrµöXAoûNËÑÙûXž«¡×íøˆÞþ)ä0žÿ·‡–�öø€gk R­NŸ�©æ¹ZwîC˜]{±¬lô+A©'ž¦<®‘Ѽ7 ’ž—þfÖ­®f÷+?}ü¬–eé÷Æá¬ºÆÇ”$´¢@´‡°cy.‡°¿´çf�pë�€¡÷¦¨ƒž%;»öu,KórOEC4}üxÎêlÁ<ÉÑÐ +šx_å`žË¡iÛ7\ćqÙ’‡|ºŽ“ÖîõÎÞ�édÜ}åRg�¼6Zéß0Íœ);ô>7öär>W; +‚7ÞÁ9{çÍÅó÷9æ¹Òü±g [¿ä—ööè÷ͶFÓ˼}ö" ÿÀúàÁ<—CæŽÏöŽ7�zÿ¦õïfÏñ=­ðÌÔûìçšsÓë)OÜðåºÙ;¡«_½Z}GÐty5ƒ¬­vpËrg£ûiû½Oçã݃y.‡Æoä½–�@–ªé1å+Ãoýõ�\ržM)£i;ûüžˆqå7GõùûAó\½;ÏJ†ýÞÝŒcsÑ¿ÍÐßwéÖ¹õÃú»ûåG׿•Y;6ï·]E:˜çr(<ù>õ#¨:¹öøËó ßëý¬ý>óùßG;˜çr(ÝYë|‡¿õØ�¼fd¸ù÷â7{´öþ\÷ �ý½�z\ýk¿;yæ¾Ñâù¤~”ær^6øõõ`ž«!WÉ'5Ž·Óý$ÀpËQ3Íß=Vµî…ž…ìk7�éÒÓ/lo¼ü] ÖÛö¹É·w»TòíÑ’½QÛi†—�ÒKâ¶y-%íxRZúaÚŽÀ[ô´UfØFÆÉfwƒ‚ÙÝ$;]î…0Õž¶pP{ + È´© w $FŸ¶îà¶Þozß ž › ¨T½«­ó¶Ã=Ç©»†î”Ãôcíæa 7¦O[$ÖHr�Òºñ3”5å„ÌLS}Orܺ ù~ÔÏÊ·SÝ�=4m‡P®ÁækXtÛÏ77l9£†mǤC” Ó¾¤wG"½æã=ms¤!•»I «î+9‡Ý\.©¦ ^eÚó-í÷3tc{2¥ÿyèàŸn*’HíŸØbÜŒQâá'p;ñÛ-mÆIŒ˜Hèƒâ$œe)‹TNXd/·ôÃõ±Oi¬�Óa,…§-ÆCmóÕ¤ü6gK›¤�̰̉MÈX1#DN§–âtõR¨Iœ64 ÂLg®˜b]¶ÂZ µik�5ã®XÙíR(›êªXS¶G¥ °JÓ¹*,¦·M§šîÏiµoºsKørCµ¦—¾±Ò´�b.*·®–Ef£b‘Úœ²t•~bD/7Fø�ÌE:³è›^K›Q�Â��D%]ÌéÑË�M7•fKOù’*Ô¬1·|5¥BÝ„ÒðŒlh£IêÓÍÍ‘&ÎÅ.õ@îkÜè…ðåf©ŒÄ*~»YϤ¶•+¤ÍÐk…¦)·ˆƒ¬x©Ò´ž2ahfYÚÊ'ý?R…-ÒÄ<Ã�¢©´W=«•¤±YÄóFjå®°q-�6VP )Êö¾`¶m/$“>‘nI]Zl&mš¬‘û˜ÍK$UÈc.VuEœ(,·OáÊV(³¨®Šm�òÛL\í´e¨ì¹2§¸ÛRn»Â�o­Ø—Wioµbo)·Á|¾ õâý�+©b-ËlW+k„Õ0�BW}Äy´vJûEçÃ:ȸ÷åö÷Û0ÍicuÄ�3*mÚzYêþ¿HóG|þëF÷?彩Æy\˺pëLÜÎdicépPœ6šÎÂ2l¡¦†ö«X…šÖf4”y<ý>ºïd)»¬ÄžSªÂ ªh[¡­m؈u�®V¦i»!|éZ±82ïí›:a�§&_ª1iW³lNÚËÁi¨:S§ä{S$ÎRÒ:¥CKºÉˆ“¶Pœ6ÆjÙÌÌȶ’ÒôÉ~j»Â¤ºš“Æ�H§¦ê¨N³mÑY6\E“.°iOÚ‚Iµ•Æ™=ŒÑ¯w÷ûd²Ë# I µé[+-–¤…ðx©NÝü´Ì9føAÿ> +endobj +731 0 obj +<< +/Filter /FlateDecode +/Length 4759 +>> +stream +xœí]]�ì¸q}ï_ÑÏVæGñ  ¬�$€?,p#0òp§wÇF0`�‡üýJ"Y¢J-uÏÌZ7ÉÌ�V?Jäáa±HµôUáç;�ÿ"é!Æ<]o?_~¹¨!8…cŠÅŨþ¿Á]µ¢08�|tן³À†!$g‚¿¾]ð_wÉ“¿]þô›Ë.óè«RòF»ëß~Ê*²Cˆ!('¨TJ[AåÜ‚q^Py=àS’T0Ã2´V˜A):I3Ș(¨"̰´]«Ì0A“¤‚:¹ ¨´‚Ú(%ê`ˆ"²FÐi7x4º—tF>&“D]€N#é¬| í´¤Kƒ÷ÞEIG°Å%¥%�ƒ-N)I[ÈÆ é“'R3Rƒç [6Ó_þw]XXë·µú„Y|¬ž@˜pɃÀ"–¯½Åfù@ƒG˜m=ÒØd2;rð+-ÿþË@�­˜b õ’™�ù‹a2îúåçËoÿø§ï¿ÿò¯€Ñ—×ËŸÿ¦¦_¢ß}§qíâô—Âü÷6Ëçë1íë,3sš¯“Ü©ùº”õÒ>ç44—mr�˜Å´Í\³ÁÙ9ŸëÊOÍŽRwµKOeç2Çt´Lçü|=×½¨Ï/ï­ÔWê—l×êwÿ~ýò‡Ë?~Y‚dô'XgG +³U总¸:–å=¸ú 8azNÔ7]iþŸ–Ý0v[hp¨òÐå+°óË®ÛM¯˜ŒîÀˆCÒl—;ê~ꆈëîɱ{ëË)׬¼ +?¿´éH]Òýi=ç±]�ª‡¾ á}/€„ck4E¢ Ìs6ctÅÐÕKíý$ÈèÇjƵŽÌ8Ö·™ÅDüâÚdÝËt-érS|­Yo³k~›Ë}aù¨åçuišg,žöëTG^-ÔrýlKᄜ'NãR½~Ð}ˆø2Ìã9НƒyΆ/³ã%=ÛǬ¯êc?á"sî‡õñ‘ûèìè¯Çû±¬|¶f¶í6cz\îÊŒeìãŒu0Ïéu߻ɨx¦g­û¶Ùç}öo Š…­Bàï÷Pu,ÏéPußóø{óÎýûa|3�¨�u¿‰�¯®æ9Rv¢W,¨øi+‡.èYWtÅ×½1x'(»ˆ¦õëqæÕ9žî'v�ÅίM&Úv (Üß{¨­íw›ËÞ�ÆÉhµÌ—ÒfH*š¼5t­óœ ­ö¹(Õg¬á? º}®u¨e¾Gã¾ý6BÁ qyk¢ÄBVé¾²tý�köîñªm>93(G>£ê>R�å9Rw¢VgìQÄ8í³ã’ß^Ôl‘Í¿sùÈ<\ ¿7ÓÌs:Dîø„³î#QýGâ�¿êè÷ھɸˆîÌs:ïøª�à ´<aߨ´Ï3lõõ>ÁÇ|Ƴ \F/5?4-'ÂRmoM~0ÏÙÐK;¾ë‘}ŸBø¯†ÐwìK-î¡÷J„6©:ßÝ“h;Ìs:4îø§½·ßïœt½4®© b;$üýz™ÕWÊþ:sYwXêÛáØ äºÇcóœ¹÷ýØ÷î­ÿêíŽÚIçÂ>‚_ßãoß�ôíÔ§ÙãÜ'b­óœ¹Çü×I +r‹ö_ è& �Å=st�#Pä îÀè‘Ï1Ú×)Šï^Þ‘ŸŸÊé#I,o�xIsHß$ÌK]Ùü¼Äª�ž£pOìsÌs6¤º_õ«à;–V´ŒhõÅ™‹—)Þ'ê9­Ö·:)7í]íÙµàÄnŽèóÜ‹¡Ö´|^ظ·|OŸ»BÜ@ìþìÁ<§CìŽ?»=ŸŸ÷~Oæ´«Å]¯eÍOø¸óœÍO>é«Þ;=}d×v1 Sëá­GZ¿Ež÷ì¿Ngòß?9ùi#y}OÄYæ9úvüÔÿ�<÷H¤ê:W+¥«sóŒÿÆêî“�ì¹OzpÅu0ÏÙ�ìßsý&‘ü±ÆéuÐS9+?¼ož¿o³ùŒÁ±Ç7ÐËüÓ£;¶óœ½;gCûÞêV-=¨ZPÑs?Â9¬ Íl”ù(â÷lðÄ�hÓ<èG6RºŸ;çµ�Ò'ÎÌs:”îœ+xäÑè�geûµüˆLRëǦåî·¼sà™�zô׃yN‡ÔƒOýÿÎ�|Â�Çvݲ�Äû Ë2·ö«Üp»e´†'b°óœ ­á¾ïZ{îu‰’ÅYM­–qÕ2nDÙkÏtÞ@�Ú|®~qj0.Ó�gWûˆPñë^—ùWè˜Q3Æ~7b ed©òÌÁ#Î<1ÚF›»Oî uûgÕþ�§PÂ1ÙƒyN‡àûþë#_2’Ÿø¨H*-ßñÈS½ÔúTv”íéÏËr¾â(\!J3.d¶f§eµBÚªkæ¸Õ²v­<Î÷åºùD½n Ù=ÁÅÇòœÉ÷}\+¬gW{B§ìÙn�m‹ KY—Z¶óºÚ—#V‡îêï|Tц~÷»VâÎhë´ë¼ ¦‘1ýD”÷`žÓaúà“_ìdAyÖ¯b�û…Qwúºú#n*33»Ä”«góïôóÖ^òÖ3+Ò®TÃýLà:¯øÞlÔû3¦kš—þЈծ½Ä…ß§ü¥[OÄvæ9~ãNlWÀï¢�ï<ƒUOº¤ ¬pß´2æ€oûì…[±bØ­c �¯°'.ïEÀV»¼F°ÝÍq—ü]/·y?ï¶³�öñÃÁ<§CåNÌ–·Ü˼ûù2·j˜ÿ–§•ówU•gè!7fÖ—ßåÏ9Í¡ØkMÒl†éЗ(Yí…uqáÅj­÷}íZ×?µ¸÷$a|"¾z0Ïéuì¼ëjÕ±qsÑ{|§ŸcÔòoßÃËç=»²zd)ٖʽVX=µÎ4ÇQãR.®ÀxL ðf_;¯õÌÎjlž %7¸‘´öPy,ÏéPù¾3Gøgì�r�¦^[ôòNþ-äÖÕ�]Ëömx‘cýÔb¨#‡«©ÎU]‚ÇyoDîïMÉÈK܇3Çü¾ƒyΆ¼´ã÷ >õk‘n¼�­kØLU¸¯œež‰_=ÓE–ß Ø$òY¿îK;VÑ¢;ûKŸ~O;3øýÝÖŠâæoÒî´߀àûbî +ÝÝ$;H]�wù2ìkþé¡èg ú+ŠÌ¯Ð³ñ +èQ +ù[ç3ôþ퟾ÿý?ÿKƒÞøµ4·ié6’K*DÁœ¸qYXȪU&ŽÜ™ˆ$òßi˜»bêîñ˜sNë§ß±¬ùóXN,K•¹¾ µœ?‡ää_”ïæº™=cŽÝƒ+÷°ê¶_.~|[‚ߘ£|´É¯Ô»zr¤ ¤k~CCT–té&=6¬¾nä_DøKM5¿›På×åWUL/.dsú_Æþù¢ ¹ý3iLïS£8šrÑÄo—ü9Ä„ÇAqÎU-‹tIXe7poRŸÒºò=ï:Õ­+�+w“ó»’-¿?©’ÈŽßp?U,‘Óëµ8ß½ô,Îï⋃�¯|5Åùb3„­@âi[�-ã®X[Å„n-T¬º&6TìÑùÝ-µé|VÓyÓiÖý%­ ¬;ï oTk{é›(Ío+E•Ö5ªÊ,3*U©+)k‡Pí'At»ÂïT)šÐ™UÏz-¿GeÆ$ªéRI'ˆn1Ý\š«=jªØ²¦ÒòÍ”ukà ²±�fiÈ/ecDÙòq)ö¹J_«ÈpcVÂÛÅQ‰MüvqAHíW(W Ç…–•[ÅQ5¼4iþ2¹é†f‘å·Päÿ'ªpUš™gü ©B*¿I¦]µJòجâe#q¹¯¬CR h +--k.BÅ,o/¬À„ô™tkêÚb )k2&©˜—Iª’ÇR¬+êª8SXiŸÊ•\¨Š¨®‰]…òÛBÜìtu¨ì¥2¯Ü]-·‰}åÎ7.µÇu~-Pµ·–Ë0_„·qb£^œ¡K%MlT�íZeLØ )4q£Ñ·Q\Fke§ñûuç�m�I3îíò×Ë8ÍëLÂou~Ë÷²ôõ¿‘æøý� ]ÿX^«2ÍãFU¶0•[b>“åw¢ÆƒâüŽÔ"¬Ã† 1Úob[ZWÐPçqc_SË®±—”º2¨®Z.t­ ™ØTèmY˸;Â[׊Ցyoß´ {º´åæP�Í/ä)Vá‚ß.cÓÙ6%_Y‘¸ÊIÛ”-–¼P\² +S³laf$¯¤6}¶ŸxWØ\»`nD¾´MGmšåEÙx, \`Ë/xÁ¤y¥ia�`ôÓÃëÝý>›ìËÈÒJíUúÆ¥õƲ´ž,µã¥_^Ö9Ç^óE¼­…jY–�=[�œ64škA‹ ŽQ&�-ÛœÀñJ©È•–‰¢ÒdªÈj‰¡Øäçl¥YÆ;Žb+…êS4é_yK;Þ+µï¿J›Ë-3^õ–lu€‡shw§ZÊêKFAæyî*¥–ÒÙºnZÖ]fÛ+» j†øæ™ª–Í­R>ÅÏŒ�)Ou�R•Ÿ1¢c{&jÒÁ;¾[^EïÁ!”_(²ÐÈÃyîÇJÖ‘+á5¡;²V ¼m˜ðEÚW°¢Þæw¸ÉÙ’oé±BA�æÔ*4¾&z mŽ¡zòR1¿Þf§7æ—Ù¥ÅÐиKz[„OÆŸÿv"O÷ +endstream +endobj +732 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 731 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +733 0 obj +<< +/Filter /FlateDecode +/Length 4737 +>> +stream +xœí]ÛŽ$¹q}¯¯¨gKñ¼Æ+À6 CÆ ÁݵÓŒ^+?ø÷}‚™¼dfTfVÏ̪$y=]ÁKdðð0‚UÉ2W�Ÿï þKdTJ9ºÞ~ºü|Ñ*z�¥Ä⢨�ßè¯FSTÞä�üõ'¸¨bö6†ëûÿ­.Çâï—?üêòßË:æjUÎÁýËgV‘S1Ũ½ ÊPiã•÷*F냠 +Fás–T0ÃG²´UE˜A9yI3ÈÚ$¨Ìp�Ûª2̰Ñ�¤‚&û(¨Œ†Æj-ê`ˆ&rVЯœ$�5*¤l³¨‹Ð™h%�s*D2ÞHº¬B>I:‚->k#é‹:Øâ�¶’ÎÁÂ�¤OxSf«åÙí´3’ÎÃk#‰:Ø‚Á—ÀØ¢c�(3H1/I`cT”-I$`“S”(I,`SV£“hÀf¯(ä(ñ€Ó:k$"p¶x +8[3WÔÁ—Iâga +H\àl±ä$.p`[Z$.p [ÒÙH\àÀ·¤M�¸À�pa¦–¸À�q] +$q�åJYâÎuàN‰ HÓ=J\àÀºÎ+q�í:JAâÞud´ÄÞu5El€%.;*g’“¸€À»Îè(q�w1�¬ÄU‰ €eSÒx×&Mx×F,¢.*ÌA'q�w­Ç-H+7x×zm%. ð®%$.PøG‹Ñxâåp¶€`%.Àz�u 1e–H\àÁ»&cùæ4ØJ™”ƒÄ¼k†OÔee"<.Ì[xY™²Ä¼‹…ÊI\àÁ» Ï$q8^aEµxð®qX©%xר¬%.ðà]Ä ^âÀA`}SFº¢.+�S’¸ÀƒwAKVâ¬ÂJ'0‰¨‹ +@2€Œ•F*qAïbyÏð®öÎI\À»šöˆ:Øâ’•¸q t˜¶ÂœF°ª´SH:ð®6aIÞÕ:f‰ x——M‰ Bd�MÀ@…(ØJ\©c�¸ d B>Q®½ÄQCàAY¢¶P$‰ X«ìr’¸ ZØâ¬•¸ ZØ‚�AâD*Dßbz[1? Ø‚HQâ0™J™Hâ‚èò1xUÒ«R]‹º�‰ÄH +K±‘¸¹”J˜ô€à‡KÀ è I\3lÁT‘¸K‘J‘¹¤3°A¶Äˆt¡3Fâ‚da ¢A‰ ’MÈ2ƒ–¸+4rI¸ZÒ‘æ<3I\�((%.À4A¦ ¦u°4!qƇ“m/q’$›HsDlqž$.HÉrº™$.H ¶Xm%.69ߌd [ñI\�uP&K\‡Nk‰ ²IÈ7-I\€yÉùf’¸ ;�|)ž0o³ œoF‰ 2Á�EÔÁMY˜·à$ä›`'I`‹Í$qA�óÍ$q 䛈èÅ-�Äùf· À»>ƒ™$x‘i�¸È7ÙJ¹½ñúˆøLV&Î8“¸c A½k«¸e Á½X­¢¸g A¾œ#‰›0™e +â®–U(�· 4øñm8aÚ}·¨à±f¦È7™1-Ñ}Ë9z1w§Ø´?ö—?]~ý‚Å÷ú§ÿ¹¼ýªì”Õð; +œXsÊÛ.oð•*í2LÛ– ¶~¤s7Ò€çM76K1–Û|m/ÌÒdXÌ63åÎhÑ/Rƒ±rA´õá:_ÝVÇq«÷ˆÞ–ýŠF>´Îñ¿ëöÅ�‘`8¡_š¦xÉÆž­ô�Þú7Ÿ.Ž­n»ÁßõË©HÞf›®Ÿ~ºüú?þå‡ßüë¿aì>½]þøOà~ÿýw†ÿbþ˜ŽDA8i’y3ÿ óß*÷ZSšÊüš^'9|S®Yί‹~ÕÝ𚺼¶cÃôšÛ.m¢åùoèm·òC£ Þ6Þ&�¿Í6Ýú½,l ݪöç±­ïÿóúé·§¼�Goÿqn´zãúu{­3½¼ÙRç6æžÃØ%ã)7oãÎ}ºy€Pô�×oS{æÇm;ÁqŒSöÑ6í'̓YÚ +»v„xÏÝï¥ (õAö–Á!ÚÆû©A8Jh›msŸ'w–öÌ|¯4Ýogõ¿Ö3xòÔ/—+¾a^F@w IãGq®?û·Þ_±!Ê÷W'¿ní„>™ú˜ïú8­ýP'Å•�W“fìó‘‰V®S÷K¹arùÚnœË»q"MuÎú×�6޶¥‰¨ÊØíÿ¾õöª|Üó¥Õk_ž²ÍÍc?Øêk¿aÇŸk,Ô2o½?~?iì³\žqퟘ¡ÜŒo.뇹Ðìð_Ë­ï‹}êë¼ä6Þvýf7~îkíÃfSì­X0Ý— ¼ sdÄ•ˆŸ:Öó¸¶å‡ûJK*–øÿù¿ƒ½ÅGº�gy½?«w}š]úÌÎóªcµsà?*á†ë¿ùP ޫF¢n=V�¤Êä×cˆòh�}sD¢,ï¦à~•Ë–³O¤:'M›0…j¯“kÚ¥q¾ÅÚ!ô€g‰S~÷‡~øôïCœÂ0ñ5†¨1Å {7¬ãÓ Üí©–μ¹ê°.)ehkl’Yöý~‹ÖedY¸ˆB‹þí¨6R[Þ¶A´ç¨¶*{Œ™T{ÏcôR¢š9ê™uîÐ{Ž7Å‘F„{ÞkmŹíYÅuÜ‘ÃúæøýG鎽éxt©lL|À›¤IE—¬ó¿Œ7 éBމÞÜǢϳgwûa´ü€ç›ÈAŽx; <ÄLÀ2é½.³uð –ÛÀ�ߨÌüªÓâÉ;$‡½– ¤’9 ¹“u¾$ û&\—h�ëô˸$µd™ƒ…ÕLKË™6-W5/d¹ãËü¢®~©yÒ²�i9]ÚA›Ü©Ï‰bÓy\’õ{¸l˜«�å5\fÝÿ‚Ëmm©œ}ŠfÕá&ùÝØ_üFb@ºÌûp»˜Ä‹O‰¦Þ*Èy«iùR×f`•WNœ‘h̓è|Ú$¡ë{håš½wÐiÃãèYçé�¼«¶�Š5‚^'ž¸¿µwbÆl¥Ö]í~,â·uN=de& 9¾´Þ1èÚ;=ÔQÒ�ñ* íÄθ±ú+db2ú¢6gJ'ë<úâA,JK¯—Ñ¿3—×ïõ�üw*YÉZn:Ÿ)»z–]¢8Ä�ƪ¬“åGöÑz®ÎÓ¡u?VÝxpÍsC|µXù_®üJÈtÅ|êY0¾ «wÙcJ"§?9’Žy®ÎÓ!ò ýêñÒWŽ;âWÈ[ðxžÐðh?cûë]ú/ÙÓŒññ<ýd�§CÚ_gOs�–Šï®Xæ—ûÒ°'ÉØ–OË òd�gCd:ˆDËßeŒø îþ¤á}go•öÒÑúÉ:O‡¼ÿß³üÚ»?ͦUûb~~�û>°ÿx²ÎÓ!ðàýêÕsŽ›üp…²²™�{³@� }´ù“Ôü<£eÝët]uüiV.ki‰‡•ÊÞæö^‡¶¨·9öÑ>+9–}™ú-�ÄÕvÃlCÝ-â:ü) +þ\ùÛ·°ÿÊ>ó�¬ót(Û�ùN�î0J�n]ÑêÃR•3íêï½Oí¾tT‰ºù¯?óè§vW¯§OíʨÉØÓ;YçÙP“÷ã²6rn9‚‹�ÚÕj²ø¤À +ëì¨�SŸÑYí·2«Õ¶ÞÙ'†>Ún[õkþ:ì‰+èºí;¹|Ló±8/`¿ïd�§CòßXœ÷ ?c}Œ–góÇôŽÏ´œ\½OÖy:ôĈ;ÑþCÈ"ÿ¿=´øã+d8{{�õ‰Î Zãã9õÉ:O‡Öƒ÷¡O¬®ë±íl¬w‚x$æ'jÆÑYíÖL‡E,ûŸ(w³×;?ëüÙlÛ²_š‡`¿�«5rÓ¤¬¡Dt±³•ž cF„¦k +¶ +÷ +(8'ôªÅvÝÇæMÂ{íҲ݇"šãt-êü�ļè QÔïçãÈ¢‡ç½qåI~²¾�nÖ@tXä2õÜí9XW³:Ækù”næƒÃ"pl�Œùè>ñÙñ0gÿavsžÝ`æ�¾ýúoùÉÌ<Ĥ§C:>÷¡/ÏôΔ6ò$/‡fÝ™_¯à)ýñó\Ÿéií׃A{‡“ÌïšM÷°¶Ÿ/¡9iʱÃ:$e,/Á5�âM•˜¯|ÌeÒŽL&Sk®wj–osø¹•š¿àAó™Ï|ÞgÆñb.ÿsàŸ.&“bÿ—©Êa캈Ë%+ñû…ã'ALÔOµ:³p~©[[dÚ!YUv F•×%�Wz~ÙOÒâ’§—Ö×»áú¾VãC‘`ØzŘŸ:„¨ÌVÌw¯•™Åü…I¹ù*4Søp�&ì ÒX¶7Ø+Š�ÓƒÐo…z讋-U{ €Û\º°™>ºÎ Ã_ËÚ8 çžðvA·n-}¥|Œzmªz×ê&sƒQ¹I}-Ù„Ú8 ¢ÛE~§kÓ„ÁlúaÔø0ÚI˜*�¨•˵œ º]Ärsk¾�Tl¥R¯š«ç»)ê.5Ç ²ÛpÚ\äohæˆvõåRÌ'¦µ±ÖiÀ�ÝoOm&vñûÅG¡´ï\¡}…Þ(tC»MœtÇK—òÓ•Ó+LÍ*ã£<ùÿ‰*|“2󔆤ø8Þ~Õ;á¹ÙÄK'�òÐX‡$нìà.cÃìè/“´PžI·•n[H— ò˜«yLR�<–bÓP×ÄLaÕ?�+G¡®F ».ö Êï q·Ó·©êuë,˜î¾µÛÅ¡qçû(ŽmÄ Ÿ­Üìm혯Â[YØh-fè§ÚI[ÝV»ÞÙ ì†�º¸Óè{×ÙÚØ‰¿/¦¾ì“LZqo—?_Ê2g�·|rVp†¿*`Œ²ÌõQæ·øý¯ ]WϦ�Öq«[ØÆ­ ñ¸’ñˤ“bþ¢™*lÓfZh¿‹Mêe}EC[Ç­øšzu݉½–4�AMÓŽBß}8ˆmƒ®5nðŒßÞV^l�Ì—ŽM_°§KWoŽOãS�«U¸o—©ë\_’¯C“¸â¢}I‡–ìPc£¸:Ìݲ…™ ȱ“æz¶ŸÆ¡pÜ×p1„|麎ú2;6]eå.†"�Ýx16Lfì4/ìŒþðôúâqŸMu°´Q{“¾�Òvc,m„'K]¹ Ë˶æ¸r¨V�¼ÝC­-7Ì=ׂœ>5zhA‹‹£ƒ4õjs?vJU¶è´.�. ÓUÖZŒÕ¦0W«n)wœD/ÅStéŸGOûqTšý8*aS–Û­+^‹–\ €üçØïN÷’-–L‚,Œµ›”zIWeÛ¾iÙw]m¯ÃmP7$ôÈT÷j~SòCü÷‘¹#X-•ª?e'Ĥ~š;j2ÑYW¾ O§À!Äß±) [#×Ùß+ÙîˆÔ½’±' ‡"çt4üU‹² ïPäcÅÐTýF¹ZÖâ-=æa+¨ÓÜöxñò][e�±lµËÈ©"µžã 7ñ7Em䯩¾Õ¿ØB)?ÿO4‡ +endstream +endobj +734 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 733 0 R +/Resources 4 0 R +/Annots [ 735 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +735 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 627.273057 101.433071 608.523057 ] +/BS << +/W 0 +>> +/Dest (cb163-1) +>> +endobj +736 0 obj +<< +/Filter /FlateDecode +/Length 4668 +>> +stream +xœå]ÛŽä¶}ï¯èg¦y¿�H8ðƒ� ‚ ÈÃl¯ÇF0ÀÎC~?‡j‘,Q¥KwÏŽµÎf§UEŠ%òð°ªDµÔYâçK…ÿ¢U"Ƽ=_>ž~9IœÄ¿¡Ää`Pÿ€ßàÎJÚ œJ>ºóÇ,0A„ätðç—þëiñ—Óß¾8ý{ZG�µHÉkåοþ˜UÖˆC�ŽQ%¨¤2ŒÊ9‚vžQy%p‰)q*˜á‚Õv® +0æè8̰ZGFa†±A™¹*Á ”åT0C%•’°Ci)Y ‘ÖÍè”�î9�VÂǤ« Щ 9�1«œâtIxï]ät¶¸$§s°Å)k%§ƒ-ÖÄÀéÇÚÃ4oH4<&cDø:ä‰Å7VyEƒ%‚#¬¶eLÒ™�9ø•ÒN +ûî ŽV\s õ�˜�õÁ°Õîüîãé«ïÿöÍ7ïþ +½{>ýã 03þ~ÿ¦ñ³ÃïSv°¤´?~ý¥BY¯­ÿŽÇ@:–1£î2ûiY7Öui.ËmåsMÎWÚ Ýyiûy”é±ÌÓUîäx\ÎõžØSÎó¡Ù¡sÛ¶õÉÄž8m×ú©]J~ýÏó»ïN|7ÏàQ^Á“¸ +Úmàm_•Gðö)`†ðtfBµ/øœÚ0”!œ …^îöA·Ë +5Åœ§“ó•Ï"ÏûÛà¦Ã\Ïõ�RÝ´):9Ÿ«Sé2íŸÖ.ËœiAæròó=¯“«¸ÜYçhÀD´³ŠÌn´]‡ŒbÑËtô†Q*È(¤£®„Ä’Ì8úˆtàK’cÓ}Öc�´@Jª]GEÅ¥ÙåzòÔ­Þ`³éêjYkýàçç�Ìî§2£ÐhìíhÜWçph´ëúœjÁP‡-4î«s84nøœ�Œêóº?gu7:#jõöœVË›¨n±Ä¯4!6é-_tg�Ã!vÃ}4æ½%¶} ž¼aVLÊ[";ºL|KÄ�?’[ÞWçp^÷GÍè¼g¿%º Zo˜}{=ˆÅU>þË·×ãpKtqûêqë>g¿:WĬðÍ•Î\â:µGÌ›óg‘½ŸÛ6áÈ;¢@γ©ç }—Û¾?bäÑkäí÷„vÖ9zͺ�ªãöè®Æ±%‚èxrvÓ¥Ë?rùÃú‹—ñL�¶#ïø¹¬Ú¦ù�»³H;ë…~çk êÆÜãïÏ7|ÔûY@iówGG;륹Îü­ûîä‘™á§+ò—ÐÚûs…K;Ô,Ö�Þ×~��³lú>þÖÔ3èÖ€¾¯†üÇ¿Þá£î¬s8änø¨éz7qÆ/eÄ +¢íÈ#}ïdt­£Ð¡ºß²1¹´cDoEc¿u„ú»i½mH½­»¥’ïÊõF­—‘ÏWßUçß±]�7v½–ø›Xô½ɧ ôî¬s4ôÚuõSoªÛß³÷óû8K¹XÖ ÷žF^Êu±w?«¸u£Î†ÍŒíK+¹5·óáÎ:‡CÔ†¿Ù÷^�~¿¹k¨i<¼”-÷òþìº]AÒgëS>â5- ˜ø–ÒŠ!ÚŠšvÖ9Š7üÑèº%o9¹ûGsa:b®(~¸{Z7Ÿf¾Í<}éfÑÊúYÂFm÷Ú-ç‡÷ÞÁ¿ÆÛï#í¬s8d?F|Åÿ/ž»Á¯¦÷á:ºGöЇÙï²î6\ò5]óU~ÀP¶�»³ÎÑ�ëöùš)��6éŽËh¼eÑzü_lg�Ãõøº/æ:¬÷|ÀíM1¸6�ã)ßV–œÉÎñ”κ÷×cN—ë”ø«èMöÎ/ãyß“z¶Õ§m qr^±hÙ§k9`¨çõ£-…r�x�—C<ø×Áã‹fàöâk_�ÃákÃKºwŒÉXÝ4ÆþŠ‹Ì¹¯6Æ{®£³£?®Ç�óà³Ñ£m—ÓCÄ»ÀXwdÓvÖ9¢Ö½›ŒŠ{F6g>göyÌ~UþŽ;±;ë U~c·àoÌ;7�î«ñÍ8£6â~Ç.½�u‡”�ìÉ+~²Èaaÿz¿/jO^–{²„óê轤q‘œBÙ“äÔ‚m;òÂ7ÝW*ùÚÕlÜZÝí» wÖ9ZïËR}Šþ“!áÖ½{2s7ì}ò}¹'9ßÑß3›dÒ�JžqZHg}Üzzdg�Ã!ußËåoÝMòŠyÉÏ/kÆ#2Üñ¤òÎ:GCdxƒ'HnÙü–3€y6þwƒà;²{;ëÁûvö=ºŸþáoRxåg¨mÚå3á è%O†ø„1G¨¶“ï¬s8ônø®oùÄÈ[!ô°»ÐxGÞqg�áqÃ?]Ø ={êÃ5®©QC‡„ßroj¿‹;G2—uû¥>Ž]ø"¨;ž„ÞYçhÈ�ë~ìÃß³ôÖívÛqûÂ^ƒ_ñ·Wó}?õe¶¾ÂìŽ\ëÎ:‡CîmO¦ìýF‰ Š. HÞ3g×'ûç9êöŒùœ£}–³g¸n®Owåô™$R·ßÏÿ¶O#. õŽûÜ;멾êã;–^$ßVöÖߨ£wصö\V_g-‡zË·˜åkú´âbïðgwÖ9b7üÙ�èñü¼Ç=™ÃF‹›^ �æt‡�»³ÎÑМvî¼ÓWÝú.Ñ­»¶“Uxí›(Ë=wú[äãWûFŸ:~ܳ#ò“ÍäôÝ‘gÝYçpè{ì›{>Kž»%Sµ‚ÎÕoèXÜã¿Ý}*$ßñ”õÎ:‡Còc9×Ïɯ‘+ œ>ùÖŒ ã‡÷ý@ë÷}6î1Ø÷dâz‰º÷ŽíÎ:‡CïÆÞÐ~´º¨å¦gU *zŽ¢»B(‡´é…sÞŠø-ÛoÜqÃÚ4Îû�ÌT‚îûöyU”þ0¾Ç"8 ¨Sfxÿ�—䵚›E6�8‰FyÅ9ÿôPó#Æ<‘_`kâ¦M!¿ó%CëïúæÛ?ÿ…|U�Ó6ãC¦å¡~¥dýšp=ç#9ú+TÜÐuyø[—æ¿ÃæÐ¼ ôùJCÀžËúëïp®ñópžX†±½ÜçúycT¸ê'çwcÛÄžáŽ\ƒ+×0¶_N~xW‘ÞW'}JçÚž½y?jHçü~¤(�Ue˜Ôбê¼Psx ð/µÔøf`™_˜_u}m09Ëÿ2 ðÇ“JVäþϤp}‹§ÄQ—ƒ&~9å·¸ZFl­Ð;ÅY8~”õ\V•‚Uv·‘ú’Æ 9~Lõ䯕�Ú•«Éõ]©–ß®ce)d†÷Ë\f„¨éÕ\œ¯^ +5Šó›p£0㑯¦8_l†°�ÐҲ턭â¦XI„n.”¤¹&Ö¶Ø£ò›Ój×ù&¬¦Ó®SdøKYÈp® /'4kzé +Íïß,§*½«e•bTªRWJÖ±uœÑåÄ¿”åÔƒYõdÔò[Ì®ÂX€dk¹TÊ1¢Ë‰-7žÍÕ‘ +µTlUSéùfJƒº‰µãÙÐG£4äW{“9"Mù8û<e¬e$¸Ñ3áåäl�‰Mürr�)íWHW G…†œ·Š£lxiÒüXÄõ¦f‘åw@åÿ¯Táª43ÏðAÙ +©ü·vÔÉs³Š§�Då¾²Žåz@ÙÐÊ’îR!TÌÒþRQ2å3éÖÒµÇ&RÒeDR1/“T%�©XUÔUq¦°Ò?•+©P#Ð\» +å—‰¸ÙéêTØKc^¸»zÞ&ö•;_¨8ÔWù¥|ÕÞz^‚ù"¼ ›íÅú±4ÒÄZÖÕ®5F„Í0�B7}Äe¶Vv¾Ý}üØ&·â^N?Ÿ†eN§>x£ò;f©—¥ÎÿE™ïðû¯“=_^jv]ǵ¬l¡+·NÄt%Ëo$�;Åù åEX§ jKh¿‰Ule]AC]ǵ&|m[uÙˆ½”T•AUÕR¡k}HĺBW+CzÆ­/]/VGæÑ±i öõД‹C3&¿¯X…z98ŒMgÚ’|&§ÄQ.Ú–th­&q@OŠCÒ`j–MÌÌ€¤�Ô®Ïö[:&·Eˆ‘MÓÙ¶ÌÒSÙp¤\`C艭¢�¦‰=ŒÑwO¯‡Ç}4Ù—�¥•Ú«ô…Jë…ei%<^j†C?=¬kŽ9çƒ2y[Õs2÷LurÚÔh®…�PŒilÕÆŽ6j‹lÒhY(*]@&‹¬ž1›üX­tËpÅ‘í¥P}Š&ý™ö´££R;ÑÑQñ³²ù¼eūޒ©�£píêd+Y}ÉÈÈ<­]¥¶•4E6oÛNÛ.«í™\†m†øæ™ÊVÍÍJÞÅ÷Ì�k�.ëÀ•*?C&DÅöP,ÔV£Í9ew'z±ùåÜÁF’¹¹Îz®dž)¹Ú†CXcdPÀÛ‚ /P¤m9ÕËøU¾Z’ì%ÝÖL*¨Ñœœe‚Œ0cêrHÕÃ�CE—†WiËó«äƒTlj¨¾]ÎNR(ÃÏÿ‚Õ +endstream +endobj +737 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 736 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +738 0 obj +<< +/Filter /FlateDecode +/Length 3543 +>> +stream +xœÍœß‹$·Çß篘gƒeIUúÁ`Cpðƒaƒ &ç¹[›°8ç!ÿ~¾ÕÝúÑêšÙÙõ™ì-{3]¥ÕRéS%MϺ³ÅÏ—ÿev&ç’"Ÿ/OŸNÖ¤`ño)±»XÔ?à7…³³œLp%æpþ(J&•àS!¨ºd°Icƒ»>à´È îú`½Æw=û¨±ŽbÀ«fà.ôt¶° ï¡ó¤±��´DcAw]AøSÖ4he\.QcAw]Æô©ºb\ˆ+ë£l\ŒEcAw¨HcAw�Ϭ±Œ7ˆ¨^cAw!Rk:p×ùb5pyCÐXw0 €ÆÄ7ã,\WÕcKÎ ¸ ,y�ˆÂÆf�DÕ%Gr cc‘‡j,ˆà.Â{ÑXÁ]ˆ4Dp×2ÒU[({�Èk Ã²UÖ4’Uc=H¡éÀ]ë0Úܵ6�Ü•°©± &ø¬±dÁ^cAÌlJJQcA,:¤|ª.\�ÉB€,U[8±Æ$Ö¦PÉ ’‡-佯‚äa R�ÈLqȾÕíl�»¨û†-È5€d&f�)DìÇ0ªš.z“p­ê2t.i,H‰ B±ÓX€½”ÉXô x#é’Æ˜�c�©À,�E&{dæšÎÁ$Ù �éBçœÆ‚ìa ²A�Ùgì2£ÕX€�½$†ZÓ±•}fÖX�9I5`™`§ Rª:ØLh,ÀüÈf;h,Àæ›MlsTl¡À rö²ÝÌ r†-Þz�ðMÙo&�ÅÂd| Š�FÒd�À8tÖj,(.c¿éYcÖ¥ì7³Æ‚BûMlñ”u[(Ê~3i,( [RU[�4eÝ‚IØo‚Nš.Â_XcA‰Qö›YcÒ ì7‘Ñ«GYö›I=.wC™4¸‹Ì4j,Àö›Èlµ½½xCB~¦+³ì8³zb`�ހتX°Ñ*©gð•=’zh3±³ÌQ=5@X…ÒYõØÀ‚¿ÈÇøÀ„õôi<¢Šp‡„˜™“ÜdÁ²`d÷mÏыѕbëùØo¿œ¾z‡à{þå?§Ç/–“²úã� ,¥ù–�/˜î€ìÛáö)ʦu1 –½¨°t›J7Ë„Û1›˜…€'ÿÎÇ7;[aêK¿Ôú-ˆÛk¿rL„\C<"cúœ¦¾°Êg4Øb;„øQ†ŠÁÉ�IZÞþöá×ܬXO=Ûå`>"$¶¿ìÃùáãé«ïü曇¿ÃqO?ýÉZ~üúK‡×à×W~�¡…`·kÞô?ã}ØË8n¯¶2y{¥õ;V,ü’¤fk»KÛµ^-¿µQ¾Lmoe¤Þ¡ß¸·½õ�Â! õ>Lý]6ùØßã¾Ìb»ê¤}Ÿ‹nºï6>ó}9¥�zÝÚûúŸç‡ïN~Ø;ß’ƒ®Î‡ôÂ;ÎÌÏøë}U~�¿þnŠ í 7­ÃÔ\çñþiø¸\}ß–Õì‚î†kºý2jºmIŽKil¯Ùöc¤ÞOÚ·YÇà0Ηé~»uW•óúêx²}@Ž&‘羚ÞYç­9+öL7½•ö3Ð<óÝ0¢®�²À†Ü\;Í~œ¼böÌ +®ÇÁ£K—7Ͻ u&±�ûúïØ¼†Â`§ÛîkZYÒÅ—­8ÿŠÕ¶Øœ†û,ƒmyŸÍþxщ_îÁ÷ÕysÌ·y;ñ+Ì¡˜qOª#?qäU³”~Nž:ÛÓÂªÂ«Ñ å¶JÆæ�}­¯møÏÀVƵqüç¡ÌOìãO¯`ñ}uÞœ'ßNpið´æE—ýL½Í™Ý8;ófamkb)ñPÆO÷ÇCnêJPUÒÔ÷Äó[«q铎uw¤Ñ}:¿‚Î÷Õys>};žã±Äôe\ÓàëcžQ‰úÌ\·|$¬m +Ù5RÎýßšçCüŸ×Èì3JŒ—5ÝʼßçC‹¯Nã¥F”ñ>Uÿõc®+þÂÅ?wöpg�·æ¿þv~¬ùïnœgN¹ë’Iä-�Ô|eÌM'Ÿº'·Ýí®æ åŠÿ/e¯¤ðà»m ̇+[;²à÷ +ëÝjW«?ÅŒ�ía;t�/8ÙMÆõÕ’ž)xzù Ã�uÞœWÞÎyw#‡ÈìÊúºŒjÜ^yQÌ’Ëk‘{¿éëï{ý½”¹ç¼âp”ä†ÿóä yï%í˜mÎnB÷Ìù8ªå¾tÔµ~+äŠG½âŒõÎ:oΣnçžáÚ>všÝãÈnLóûÙ™cÞ�#Õ#.7Úš=Ëê¶4öޱý§õY¶CÔ<1UÛ��g•›s¡3òöÁì¯ì™ —`­ç¼ò¾:oÎ+ŸÉ?–¨×e�µÝ,?Sÿšç¶Ýe;û®d‘KÿÜÏP†ÛµÏC_JÆykEÞŠÌ·xHcçïËûî¬óÖ<�žÉû”‰ç½È´Þ—ÑõC¤ªì£ºÞ¦M¼œO–ú‡.ºM*Ïæ}wÚÛq8-ºñáÒ~OÏDðº:t�n^üÃöIo +˜ðàhyB'ÚáƒãæºÏyÆS�3×�nÏò3»bÜ|0žÑ¤|Ń2²;Ã%ÉSâzÿøË7ßþõoÝõd[è/ëÖm�K© ’¸e[XaUA%à�éu—�×u(S±N·È½”�ëïÒÖö~i'×­ÊÖŸ¸šÔ—#ù´êw퇭ïÁž¥�0ÜC¨÷p˜¶O§¸<Íã–':mÌÆyùÊÇ9²‘“‚TÎòQ¶Ä®N“[Ö�¯Ô\¾(ó©•Ú¾;cåqZy”jýbÍp±•ÿ´LðÇ“+ldüësîvg_/ºøé$ßs`EÌØqÜ)áöÖ¶¶ØÕ‚Mv{“)sI +ÆnoKkœB}ëC½©j5yþ„m-DËkÇŠ5£;Šåî­q›X¾+’ mW±™bµÂÞ �e{ƒ½â³bGv†£ÐÝu±çj�“g ÛÐÅ.l¦�Cç†é¯e}¦ó–ðrB·4KŸT©<¡^›ª£ëm“Ñ`TiÒPK¶ á6OŠèrR„_ÚÚ4c2›~˜5yÎoæêHÜÊ•ZN]Nj¹­µÐf*µR¹W-uä»)ÝÕ)·�WdËmÒ$_~Öˆ¥úv/Ž2u®müÆ„—Sà¶»øé’R:tVØP]oÒÐngÛý¥KS®C…¥Yeò””ü¿¢"4©�gy㸹”<騝z'²6›x?H£<6ê°6ŽS/; —K©ùì8^Ø�)庭t±�t²AžJ5O Õà±»æuM,«ãÓX9 +m5Ýuqh®ü´w;C[ªpöÚYtƒ»‡ÖnÇÆÎ§QœÚŒ;ylµÙÛÚ|¾ +/K`ãY,®Ÿk']ìm‹v½³AØ º¸côi×ÕÚè´|f°½í‹L‹¸—Ó¯§%Ìy +¾àM$'ß³,wþ/Ê|‡ß�øü}}ìo�ãÞ6ZøÆÖ�xŒdò�½|§X¾ÃW…mÙ BÏö»Øå^6TohqÜû�×Ü«ÛöZÒ5‚º¦…¡�á öÍu½£ad áeÅ–ÈüÞ¹é{½¤zsè†ä�Ñj.ÆÛÁeî:ê!ù<4‰+)ÚC:´ì‡Š¸ÅåÐaé–í̇;iC/öó8$} C!—ÔuÜÃìØt•-w1A +LãÅØ0»±Ó²³G1úÕËëwÏûfr¬+@¤ íMú4JÛ�‰´O—Òr÷—-æÐY.êâí#ÔÚ¢aíQKrúÒè©ï.F¤¹WÛ +„±S®²]§5P4\@f«¬µ˜ªMq«V‡e¹ã¬ŽRj9E—þ:Žtg¥ bg%ÊJ»5âµl‰ZFwNýîl/ÙrɬÈâX»I¹—¤*;öÍû¾k´=·ÁÝ�Ø3SÛ«…CÉWñï5kg­3�:h¥êÏrârP�š]"OËß>°9F0„åëk‰óp4òâ:·ÏJŽ'"õ¬dì Óa˜È&'ÅB7á Šò¼bhªþ… ½Z±ê-½l®~ãà¨�“ åkÌËÑær Ô.“lå¯�$½Y¾l™¬S�†ê#ê.ìŽP–Ÿÿf ´8 +endstream +endobj +739 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 738 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +740 0 obj +<< +/Filter /FlateDecode +/Length 3198 +>> +stream +xœí[M«d·Ý÷¯èµaä’ªôÆCpÈ"0`BÈbÜž± ýã,ò÷sêö•T·»Þ|y‘…ß<úMë”®T*U•tõâ™ðó*âW“ZëµÈùòtz¢P3áßVãPØÄçæs$©!Ç^Z>?)À5ÔžS-çë ¿îŠ¶úõôÃW§Ÿ‰çz/)æó¯oU$j«•²#êQdG”s¨5åâˆJ bïžjä*IEjHoÙA I©9¢5XjäGQ‡©FñDP#ö\Q$è‘+ƒ"$ÂɑŠ+Œ^Ô|jƇjßù¬º³; Z*®Mt zuµ¬ãÙ÷ò¹ÿ—ÈÕT]ÿ�¿8,{°ÎÓ�ÏÙÁnÆö/Á÷|¿³à+ú¯ž¿|FðY…͈­!žý|/Á÷|Ÿ|n�}^ÊùL@¾ÞKàýÎïÓSÎÇýþw¯OÐl»Tƒÿ»‘¶½зôU�4ϯŸN_ÿýOøîÏÁþñõ»Ó?¾ÑÃ0|">¢Çò„Ñå†öžò#>ú=îå >¨/²Ê9Ýäúì†ã»Ôoÿy~ýý3úè[õ©�ªpßåÖdÞ›ÿÉëîÖ|ìp„y7èÕ*b¿XŠ^"H©è»ÜÄmôf|¸ìÝ>ÈmÐß¾ŠßÜzÞWv<ctÇ(Í£­6äÇÛ÷û¶}£îò½ž¶—ËþüÞά³÷±é¾ë:ÛOwcÈK¿©[Yz�çu\óÙüÖ–{k{½l,kdô£þ·ËÅhߦ££Ë®IÙU(‡¾ž’L¿â}´¹ÜüKÛPKÄŸÛ)¬Gßz½â±�ÍZovݲñ?WNôœ´¬¼ÍºFŽnzͦ�¤Ò�¶GÈŽ±MûÆ»ö»™ù¡GÙC|„íe·ÝþßêòÞ^ÚÛ¸ìú[oQùe×åínë|§K3ú�¶Ç¼ìz̨)´¯ÜÛÀRÕͳomÏrºy´~‡)A×To?ô˜¼ÓŽ‘d#f³Ýl²Õ1s:)ÒÚ岨q>#‹Iîu“ú2öÉÃÝløÇ×ûÑàvg’Î9òöþ®�9VÞO?¡Ê‡&�Cè½÷Ç#K,Wf~Ѥ^o$D_¯úÎÄ[­tÊtúxL]7D¾›1åe¾áZÛ4íá+ooõtf6—ØM»™¾ßðmI*Ë�Æ÷ûéÞú{³»� �Cûلع}*çòÃô½?•í]_Üî{Pi!&½z.®Õ÷ìg}¿Øˆ%ŽiŠ›aãù™'·k´ïg­ýf-ée}Ñz»vk +{ý÷Û?a%�P÷o·àhƒ[…_Oz RXd- �Ü¿ÒlKâ\�v9EÖlë®&ç@û×µhq_S£ÑçóxLßN�jÒ(©Ïß:v@> +endobj +742 0 obj +<< +/Filter /FlateDecode +/Length 4962 +>> +stream +xœí]ÛŽäJ±}¯¯¨g¤mòy“Ж6Ò ÄÒ -„ÎÃtÍnê9ÒÀ¿ÏŠ´ób;|©îfN3­š*Gä%œ¹bedÚNë«ÂßwÿEÒCŒ)xºÞ>_¾\Ԝ¿œbv�Õ¿Ç'¸«V§“�îú™6 !9üõå‚ÿ‡}ò—Ë�?»üß<�¾š!%o´»þí'V‘B A9A• RÚ +*熌ó‚Ê맘’¤‚.�¡µ*À JÑI*˜AÆDAa†¥ íZ•`† š$ÌÐÉA¥ìÐF)QC‘5‚N»Á£Ñ½¤3zð1™$êt:Igíài§%]¼÷.J:‚-.)-élqšHI:ØB6Iça‹õV‰:Øbb°’.ÀƒÖI‚. +Š:Ø¢¼Ò’.ÙÁ¥H$êt*†¸Öå­U’NëÁ›VÔÁ£ÐI>:[¼rIÔÁg•‘t¶þ$xÂ٣୆½Û*«%�ƒ-Æu°�/1€ñ°E/Qh%. ð®q8iäï§ŒÄÞ5d¼ÄÊþQb4Þ…89€- X‰ 0ÞCg¬Ä(l0K$.pà]�0ü > ¶tL^âÞÕÝ'êÒ Z\ð[´ò ½O8ð.*+q�ï‚>£Äàø#ª‘¸À�wµÅH-éÀ»Ú$%q�ï"npƒF qÆ·A+@WÔ¥A¥%.pà]Ð’‘¸£ð "˜DÔ…@Ò€Œ…8TâÞÅðž$.ðà]嬕¸Àƒw!ìu°ÅF#qâèà¶‚O#X”SH:ð®ÒèaIÞU*$‰ 7kþýýÿ^?üæ¢�Uï û®vÞ á¯h c#W9¯åûïô/¦ß4ÕG™ÓÓ·Ÿ¾‹–QÓ¹=�r´}>f9MeñIŒOin“ zzniKÙ¦4S9Ž?fÒ=�:‚íî6å½5ûò±oö{òïpGk¥ek©'´Jg%—Z¬*gÓj‚à6Õæ§j|_>°2‡@—òíd±cëãx¦\žþ´.Ç[¾ˆÁ7ʬË)-–íñ¹eöìfËÕÎ%·x9¿ÛˆEÆŸ`ß0å�´„²3²6z§¢@÷ˆØBÃÒ${îÊL“½“/¹bl2.#·wiÿÉ&Ök½×~VÅÅ9ÁîÒNÿó!s”­¬oi°)sß°b¢60D‘”ÙñÚ½y^5RL46¾¤ŠóEE†/A)pfŠŠ–ܦ©Ô:6M=ÔÖU{ùJ�¶ÆŽT÷»øáÃ:ªã®t… +éŒrg;ò;a³Â䕸f„E…v:Ãyª'±ìûý $çq„ÝóQndá{w¼í9Ê�Ø61ª¤Ü<¸Òb…Œìa ™|S,9o7Zˆ~šS<-êÈ-H]}}�ù…=S^—ֲó'›¯OóµºW´<ߥ…¦óA>Ï£ÜÜoà>kÞ¯å)xY$Pâ66]šza·H 2ØÿdNŠi˜Ué †‰íi$âD ýÀe·£5ÙóÝŽ‰ï+ZTš={ƒôòm{#�´ ‚ §ŽHïdž·Ärÿ +î#ð;ܧ>Ž}?ó¬-<,4/¬¼Xƒ¢yZ*ÁÚm*;uºç9¶Ø†1ˆš{ò8ÔÎ=·âqéíz²ïMߓܘI_>Ÿ¦ïÔ¥}úÚ#×küUF™ã” bÔ9”�Ìó (kfp;(+ŒTÙlbE§Ê”rÒ?u½UZùSë%LF“íPVz+Î{¥0$u¬ZPTÓÞö™3×g¶ËκdV´i¡œÛæˆØÏeŦ3uå6Õ];‡¥~©äïGê¹<‡T¿Ë‡BtY ± �ZsÆ.×,Æîw-zÛ-�±BŒëòÞæöe; +2ŠgéÑëDOšÎ/óºïŽíâ·™ò¤ ÏÓ]\âZûÕcÉŸ¦åÛDf¨|ÈÏCÁ„Ìsy™q—C—‘Zm½Y{(ñëVŸqßÇä»÷@–né«7¨y] Í(l±93(p#f…çò< +ý¹x±öL¿¨»ÅYOݺ #uÉ}"²–=Ùséõ•:r(ú4æg&óò—qq_Ÿ�Û¶ÎxRX£ƒÒ÷ñ ?;óýþ»È;™çá�wC.{2Ì[z…¾®gW#ÙÆo)ú¯õ³…ïH#û[ì~Þ�çÈ,êŸøÐèETò/÷Ú ôv1¢6CRÑð�ôûè=—çáÐ{W–|žW^ù¸èÙ~-h‡ïz´|­9òl}j�<©¶&µÑk¤±\SZò䙙ܖ½%Ïá¬n±-v<�Øsy±ûñæÃÄ€o�óÞ3{û +ÑÍ=^1KO\›îŸÃŸÌóhÈ û1êڊλqö×DwAë¡÷ÉhæþyÿÉ<‡æý¸w�DÒè\³ãýêPéaö·ˆW—ˆùêüYdOkÛGÞWnõÖ n ]LÊ»=)�ŸòÞGã¹<‡Æý8vëzaϹÜ3o™O׫×;½»;S+1ò‚'WWfë�J\![¡q=öìÊÚÑ5Úãqi™¯ˆWOæy8dÄ«ïjùûºêS}Ú�cm+°e<k«:¡[ UW]*öhÞ�¾6�oÂjzßtºëþ’Ö„®;÷„· ªµKé‹(åi\)ª´®QUf;£R•º’²vÕ~D¼/ÓJø�*E:³ê»^ãÝàGa,@¢š.•t‚èvÓM¥¹ÚS¡¦Š-k*-ßLiP·±6¼ »u[¿~EZç#Ê–Ÿs1ïhRûZÅ7f%¼]UOlâ¼×:µk\¡\�^/´]¹UUÃK“òúÒø ®Yd¼—6ÿ?R…«RfžüCS…ï‡ßŽZ%ì›U´MGm˜í‹.²|]„À¶?è &ÝWšföF¿Ú½ÞÜï“ɾxK+µWéK/­'ÆÒJx²ÔæC??¬cŽÍØçm-T˲�ïÙä4×h¡ÍzŒvÒØ²M \_)Ù¬Ò2PTº€LY-1›ü”­4K>ã(¶R¨1E“þ¥oi×÷JmD×÷Š_¥årˈW£%[ ×Ã9´³S-e�%£ ó}î*¥–ÒÙºnš×]FÛkwÔ ñ-2U-›[¥|ÿ½ÆwÄ&¥Tå/¯„èØ^§‚�št°Ææ7äªè=8„ø%g�º]4ïϳ¿V²ý6�¾&tÇ@Öª ù]Dz /P¤cEWTy²œ-)ñ”îka)¨ÑÜj?P�_v™×ó‚P= > +endobj +744 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 593.554475 101.433071 574.804475 ] +/BS << +/W 0 +>> +/Dest (cb166-1) +>> +endobj +745 0 obj +<< +/Filter /FlateDecode +/Length 4458 +>> +stream +xœí][�+9~ϯÈ3Ò6¾_$´Ò"ˆ‡•Bñ0“=Bs�<ð÷ùÊݶ«ÝÕIOÎe³+&ÊLºÊ—rùóç²»ãÑg…×7¿’ÓSJ9w¾|8}<©)z…Ÿ’buQÔßãýY+'¯sHþü�6N1{Ãùõ„_Ã%Oþzúó/NÿZçÑg3åŒöç¿'•³SL1*/¨2TJ[Aåý£ñAP=¡‰9K*˜á£3n«Š0Ãåä%ÌpÆ$A•`†uQÛ­*à µ“T0Cg•V°C¥D QÎY#è´Ÿœ$�ÑSHÙdQ¡ÓÑH:k§�öZÒå)„à“¤s°Åg¥%�‡-^;§$lq6EI`‹ V‰:ØbR´’.ÂïdA—` ЕDlQAiI—íäsrNÔeèTŠi«3ÊO>Y«$�Ö“6­¨ÃˆB'…(è l ÊgQ[¼UFÒYØâð’tà ocJÂh54º­²ZÒyØbLt¢¶ ó%0¶¨$ +Àšˆ—$01N.'‘€IvrÉ%‰LÊ“‹ÑJ4`²Ÿ\ÈQâ«4tFKD`lñ.HL`5lq¹¢¶Øì$.°¶ �ÄÖÂã¬Äl뀉 ,èÖ©¬%.°à[§t�¸À‚pa¦’¸À‚qm +Nâ Ê”²ÄœkÁ�X�.†{”¸À‚u­Fâ Úµ.‰ ,x×:­$.pà]k‘SÔÁXâ°ãdu²8ð®Õ*J\àÀ»FFâôê‰ €•ɤ¤$.pà]“”“¸À�wMÄ êâ„1h%.pà]ãÑiæï¯ŒÄ¼kœ (øG‰Ñxâåp¶€`%.À|�± °É ,‘¸ÀƒwuÆô'Œi°Õ¤Sxð®Nè>Q—'áqaÜÂË“!K\àÁ»˜¨¬Ä¼ úL€ã'̨FâÞÕ3µ¤ïj“•ÁK\8L€Ä˜ß&­]Q—'•S’¸ÀƒwAKFâÌ“J`Q'IK\2žâP‰ xÓ{–¸ €w•·Vâ‚ÞUa�¨ƒ-6‰ ×@‡a+Œi«“2` +IÞU=,éÀ»JÅ,qAïÒ´)qAˆ$0Iâ8! +6„ä¦c�¸ dB>Q&\{‰ ¢‚Àƒ²DlqÑI\€ÀzÊ6'‰ ¢�-Ö‰ ¢�-$.@D0e�è[\ÀÀE\8Ø‚HQâ0Ù”²sD°ƒW%]0SŠ kQ— ÓQâ‚Ý„©XK\€µÔ”0è%.ÁO.I\3 ÓNₘa †ŠÄ˜Š¦d™K: [dK\€H:­%.H¶ ”¸ ™„UfP`†ÆZ®–tNÑ:3I\�\˜(T”¸Ã+M0¥¨ƒ-  ‰ Ð?´Øö`ñƒÅ&–9¢¶Xï$.HÉÐr3I\�l1ÊH\lÒz3J\�lAÄ'qAVa¢0YâÐ8tJI\�uÂzÓ8‰ 0.i½™$.ÈVa½‰%ž0n³ ´ÞŒd[.=©æ^é=‚üK¯Ö¼Õ†•®Ú×ijÝd¯ì­öS�ž§{ÏÚXí|ê2Ѷ�úk»¤¶»—ÁÖê¿ËRvfº—µíÅOf­¶Q”GØ›U2Š]Gë±<‡Vw�×Òºª‡éfVëåÚsZ2µP΀ RÞ—B‚îŸ[j�o…È�6;©þ¡Íqþ¹¢LH÷ÄÒ…u}Ío—¼Ú5‡…«B N¨ºŽÔcy©×ƒº[hÇ?GSëáEŒÓÄô#ÒGîÌ[D6#¡"åkޏ†¼¡ýGêÚEdï<Ý¢F(nÎôÇò<"oÄ„;³î8ë·^Ë[Yã.;äQo}Íð~Ð_~>6êíëåƒy ÁæF¬ú9¼ƒ–· {œm[LùÌb½Ï€àc1㣠|½=¥[¹Îa©vkE~0Ïá÷Fìzsü>„5„¾eÔ\kÕ>iº0´I´w�wì=Ìóph¼ŸŽÑþ°Ö{©¬©+b$üx½Ìê«e?-\Æö5HöÓáØ䦷ïÌópȽÇ~ZŒõ# 4®ÓmP¨?¿~J¼}uÿ`ôÓ˜æçÚ;öZæy4äÚcñkÛIвGG„¯PtÐÀö=iw�#Pä ·FDÙ‘§=Ú—y¿D ÷æf#bÜIbyÛŽ—4‡Œþp¼4”íž"G?o"¤¤²=Ó£ÑÁÁ<‡Ô±ê“;V/ZƉoð:G©}žóÓ}¢‘ÓZ}C9”Þ°kʼnÃ1æ¹¶‡ÚÒòya§mÔ¦/»BÜAìñìÁ<‡Øñì�=ÐÇ‹ó>=’yØÕâͨeÍwĸó<š¯Ç¸Ÿºšâw:GÎ:r×v5 »ÞÃå>1õž;W9ݳšŸ= ¿+~Œk4ñHçË�d}îŽ}Öƒy }îFœúsä¹·ìT]Açf¥tauîÜKûr{;Hæ1éÁ×Á<‡äOÛsýI"ùsì0Nos€žËÙÄá£xþÑgË3Ž�†qõßzY|zôŽíÁ<‡Þ†Ž½5¬Z¤'QÆ•NÝûl¨9Š?Â9¬¢Íì”ùVÄß²ý�O܈6-#ÀýÀF*C÷}Ïyí ôŽç +æy8”Þx®`qu‡§zú™!dÜK�TÑZ�éÔæ ¯½‡ûS¾sàYŒªÜd4`èn=o,Ï£!Õ_�kÿç`'`å5[ýÚGb{âºÌ½{ŠMn¸Ý;h½cö`ž‡CëõصõÜË%«g5µZï«Öpg—½õÌ Œ¨¥çêWO ¦uºòìê¸#T㺗uþ :Ô”½ß�½…:²TýÎÁFœ¹c´›#k'�„†ûgÍþ�¯ ø{¾ßôÓÜ“õ×ãב¿Æ¥ÕnR`Hªžxä®^ŠjûTv’ퟗå|ÅQ¸A”f\Èl¥ e³BÚ«kæ3p«e~m<ÎïË ó‰zÙArºƒ‹�åy8$_�q­°žÝÜzÈžî±íqa-kàRËî¼nîË9V‡êbTцñî÷ø]‰+£±Ôi·yWL#b:ܱË{0Ï£a:üæ{² ~ׯa�Ç•Qoôu‹Gü\&1»Ä”cý×úyï^òÞwV¤»R4†Ç™ÀQñµÙhŒg$L·4?¬ã¡‚ÕÁ_âŒÂÛ)ã—=«é˜& ?ßÂï±<‡ß{»~W~¾ò¬ö¤KÞÁ +�MÇoƈmïýFáÞ^ŠcØmc`Ü_a߸”wÀÚ,ß ž ë‰v‰þŸ¬ tz_ÈŽ1Ô&•žøËo¿ûõïþÀö)én­éÚ½–þ™Óæ1½ö.ÉȪZ“ÂÊOç©X:Os±Å.½âKKç2¨…ú‡m9ÁÒa3t á¶œâ¹§Å6ßq¸cGJ{v¨ÅóKOWtÏ›yü +¶ÑÁ–A9²PvAgèù©­¥ìØ}^ìWsšVwì(yÌœ®£wDîjw{ae/ýÒF ¯·ÕuÍÏI�¾(myéeûÑq®‡ÛÂóTŸ�íåvÖ¶Öþ$qqóI쟫ß[]—%Ï’Ww>û~9%z4Ôk[Nµ +Š¶Ò¦Å›Inۣ̂Yê'gz�Ó\÷=Фc‘m:#,s9ÒIB™–£.sxP\�—-p=?JQ [‡Dí‚çÅUË#âªSýµKXååQ:·tsèÝTÞª—]»£«éäbeéó‘æ÷xÿóäάGåÍó¸Q�-LãÖ•˜ÏdtÎ}:(¦sï«° &4ŽÑ~ëÔÓúІ6�ÃøÚõìª{M©ƒê¦åBß}ÈĦA×hË<ã¯/ƒ[ ó©}Ó'ìùÒÖÆ¡K‡,V«pÁ›ƒËÔu¶OÉgV$®(iŸÒ¡u†eÄ/—¬ÂÜ-[™I€ä•4דýŽw…¥ºØ #èÒv�ëÓ,/ºÊJ+X„À–_ð‚�æ•æ•=‚Ñw¯Oî÷ÅäPGIµ7é+—¶†‘´ž,µå2¬/ÛœcÏtQo÷P+˲±g[�Ó‡F-Üê‚c”IS϶$ð¼RWe«JëDÑè2Ue­ÄXm +K¶ê–Òâ$z)¶˜¢KÿÁ=íy¯4'zÞ+a“–Ê­3^‹–l €<‡sì­S=e‹%“ ûò$¤N«-”òúŸŽÄÀ +endstream +endobj +746 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 745 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +747 0 obj +<< +/Filter /FlateDecode +/Length 4211 +>> +stream +xœí\Y�·~Ÿ_1ÏLó(^€aÀ’ü`@�y�Æ’�`@ÎCþ~¾b7ÉêîšÙYI¾âÕj¥é*Å:¾*rºÛ�-~>uø§�3¥Ôœè|y{zw²&G‹?­Å梱¿ÅoŽgg)›èj*ñü– !›\£ÏéüpÂ?»KÙüáôÝ'§oû¸³7µ&ïâù§×Ì¢`rÉÙF…UÁ².(¬MÎ>&…•œÁkÕX#fòtdeˆAµD�1Èû¢° +Ä”]8²*ÄðÙ‘Æ‚®Æ¬°œ…Î[«ò ˆ% +^á¹h”ž4žw&•ê«ÊËà¹ì5^&erÑi¼jRJ±h<‚,±Z§ñ"d‰ŽÈj<ÈB¡d�— KHÁª<ÈâK/CíT…W ¼«¨<Èb“u¯k!Ry<[r9ò¼�&–¬ÆsÎDøfPyˆ()e…ç!K²±ª<ȃõ/@Â�ÆNÄ�KQ¢ÕstœÆ‹�ÅûL*²ÀøøYlN ‚ ã’†>gCÕ“¾C…І¾TC9 |�†RÍëÀóN‚`!K¤¤!Ap�…¹*²„JYÐ@ ‹§ aAÚ¼E¸%[�†xKÖ% bZ 7”D@.\©jX€¹Ø©aAè"ܳ†¨bòÀn ’4,ÀÝ@ÎjX@ÀÝÐSåA8°†@G\ p78›5, à.ÂÈkX«øaÒ°¾b|)VÃîúbIÃîúŒ ò²A  ¸ë#– enà®�ÖkX@À]O>iXG1À«VÀ]@HÔËÈ€Õ°ù<4,À`Æ£,Ѱ w]EúSbhe\©IÂÜuæSyÕ¸ �+q -—RÕ° w‘¨‚†¸ ø,ã 2ª×° w]@¦ÖxÀ]ç«Õ° wQ7D àơаùÍ8 ×UyÕØZІ¸ Xò [€$*/8’Ó°`l,êP pé½jX�€»6† aAîZBÙ£ò K(^ÃÔ5à!l•˜F±j¬Rh<à®u°°ÆîZ›«† ¸ËiS”™à‹†Р +ö¤B¦æœ4,HÕ‚‡’Oå%ƒë¨aA¶ D@–ʃ,”IÃÖ¦†Z4,Ȳï5,Ȳ dа�©Õ·º=€,pu@�•¢†@2S*‘†9&ìÇ U�—¼)p­ò +x.kX�3¤b§aöR¦ è5,À.—4,€à9Ò° WÈ‚PѰ©È�Ê\ã9È‚"[ÃTºà9§aAñ�Õ †Åì2“Õ°{I¨Zã‘å}fѰ P2\*jX€0ÁNH©ò `BÃ؇7ÛQÃl~°ÙÄ6GåA–IÂRÉ#ªwÈÈ™%ó"+‚PÝ�=Çl®4[ÎÇ~úáôÙK$ßóÿ9½ù¤�”õö�ÈA +˜†µ}…µßž lQ×&A~¹ 2Ý‘`º·¸¦=±�Z4âå$ÈØ–{ìÖŽÝ`it1êÚÞZÈ&¨±A~8a³€éŽãl;¦“DšãNò\Ƀ ÎEÏ©¦v4ý^NßÁÐïäS›•Œ´ÆA‡zÐÁùœmÎ�.lË\§­²Ëzv‰ìˆnkk˜š�-M$¬¬Íÿ ô(×+´.ÉÍeųîCY”á¶dÞ>÷¶øt n|h’·>$騚º·ŒéçŇŠîCEøPAë=9¦ÙvL'‰Ò‡’êCƒ:=§šÚÑô{yŽÜ_%r¹Tç?çãe7Úkx«äÕ ÛèMèþ9øžƒï|‰ÿäóñÂO +,V,±ñìçà{¾çà{bð©Aö´’óJ@>ÞsàýÁï)%'6…&PâoÊsâyq³5mÓHíö�RlI}Wù>}nïDùlÝGªçñAß—ºàL;ª Í¼Ñaßk}Hª¬OîóÑe-5ó—à¼1ßÌ« +ùXãG¥»ËöMÈãaÏW/NPN»£ +ÿW2D¥}Ä·hd>Ï>¿x{úìïþò«¿ü ñæô�Ï­u‚ZGü� þ¾´6züFké5~Ëò¹ñÜ£Ìô/þy~ñõ•9ù¶‰1'OãÓ:,† Šß ~yªux(ÐÆ¼Ð{;žÒ÷¶oVQÒ2­«@€qSاóRø·÷‰¿Ä÷¡t)äbå¢}ùâS÷9ϺþŸÖÿ;=.³sÛ&å«…Þ¥>Ð×¶¬À>­cŒ•ô~iöáyb_qãì´ÐúÑÇ®šK[ùmêkkãÒnmR–üMÓ^Ó¼º>3�ìêªý¾j?5Û®í–6$ŠÃî /¯´UCÃgêìc_Á¢$¬'dišê¾VW¶—u¥i]bÚ¬ ˜O„áËaÈ´ø/[…ÇsßÇI�¿Oá{vŽãÈ�êÞÐäîÖ}#<�Vz3CO—7x{M^;×ÜÆUbNYßã•,ùT•±›ÌiÕA×IÞÂF\íØæ¨ÝS·ó[„e�ñ²êŸýkŽÐ•—Wês¡ïå"¢©¯•VÛ\vþä·>×ôzYÆir‹ë%Bnêšöú ÷Ä9-™¶‘·!Ì]n!ËuTqnú[ë÷fó}å_m:�‰Vû¤�m›noê4tJsì�X]¦Õ§»ý6íòqM{oü4®c:¡ï˜ùû‘ø ÊÛ¹'Ntü]柎¨/·²�qú¸¯D. +Ò[æú·yg®§Íq¿Îý^ç ê¬òù™ Ü÷×y?ƒv]å#d�ã8?O!rWäýà rû��A¢Ûëã9ƒ|h‰á Óßa‰9w;ƒ¬’úË¢ém¤¬hõjF‚š ’hÛ\Xíªg•eìÍ®#oQ}Ñêí£îdž áº×ðÍ<ô»ßÉ$¾yû#ä¡ã8ǘ½)G»9ûçÉ/DZ{8Ä¥ÄA�mžîù=î­Ð·›XÄö¡8×-qJbÛa>-¢Ö¹{®Ö0rù|S·e¿þØÇ�8•VºÌµ—;d/+þ¥…ÞÚÜ84Š›C#‘7v¹i +­úB?"·ðœKŒM]Ϙ¼¥›l¾‘í¶¶¸(9QÍg7çá‡6óø^Kt›ŠûÓ‹vˆÆI'ßÞ^ߺƒ7¾RåÛÙŠaÅX+ŸÚç½NG×óF +5c½&TÏ÷]Zm-–ö‡�Žú¬‹jÆ¥ qÈ[¢á�Ãr&ùÍw_~ùâoâL’M;ðwÐ_èb[±˜àêt5[ùþûÝtØi¤�GFóÁò�Íðm´—SΑˆsO%»˜E*±“ß®{‰±B<íÆhz)Ûqú +ïõ6Éޤ;uyg'§ÔõÐù›ûçêrµ�y¹®õ‘>Î^ ˜’b"Gpo{gHÜ×ç׉!/ßužr¬>©!Ã΄»úÎõš¨eÍ^!ìÌöz皯„Ù;ÚïÜtŒµw[Q{Ù2Ûýÿ»±î¢Å;~pš¿úáçzKÊ®”G\ôÎ>¿€×P’×Qûñèþ¸n¼$ãÕí^³ŒoÆxUj~.™†ªÞfõ1¿"}[B¢Hê‡^8 S~ܵòƒe»I[–»RTë»[D›ŒwTˆq¥;û|È�?GP]ºåQœW7Û­^–_¶½l?¶žµ tÌ‚_¬Ù€LÎ~ÁùÂãó�ñÄv°GH� îsËzÅË|žCwzÙ}}~#^6Å&w——í¬p°Tþ…=1ÿž˜ïñÄ+Þþø�ø‘®öàmoº¯ÏoΛÒMÌúhÖ÷á“ç»?O¶g­n$Ê‘ó<]؟ćºž¬§ûÊ7>�©5òÍ"»wYòÛõi¦Ñ3ºÐžBMV<5ÜìÑ&�xÕñQª~kÐáÁ›­ú0$¿Æ(”³‡óÔÌOþ©EFZÎmC?ñ®â\wÝBú®_·=ùg�¯g=ÞtÝO Þ,ÅÓýî½ÞŸz·ùÖñv‘ç‰Ï¿Ÿt y6'=¤bÂz•†(1u™ÏÇ€$ÛÎgÇGÉ.XAŒG¢ÓM²§.�ãçç‡êÒ$Ñ¥êœ0o‹ÒÇßE¼œ0mØST*¿…¥Õµëí !TÔØ[ƒÐ°“Bâ›JÄOmš`ÌÁVãgÙbéŽD£]ííÒ夶[G‹ÃRy´*³k횟¢LWe(^¡]Äw>™_ð&bĆþqK毆­m~ãÄË)ÒˆÄIn7[lj6v×“Ä Æäb§¿Lj.]UÍNã'�ùß*â 2ò´ކKñÓüójN±9È[%Iz¨CšåÙV¨Ëå<|VêË«´gЭ‡Æ6T¡2Aϵ‹Ç 5ÀcKvÃë™!¬ëg`¥$Ú.¦›ä8\ùaCžrƪюɒîǸ“œv>Hrwüj†!ïWø|'^Zb£=™]¿ôI&ÙÛ‘íæd‚8(Lò„чFîÑ:Љ_7×?Î Ó2îåôã©¥9¢çƒ¬¿iHVYîü_´ù¿ÿ:Ñù›~ü’ǽhá¶nÈ2“ñ{éÊ�d~O]'ްDOö'Ù•Ù6voyÜ{�×4»Û ì½¥êWãÔ¡ ûáºÞ¡™xƒxÙiq2j›™°—ËÐÇÛ>~)B— +r9¸,“fJ>‹!qÅMgJ—¼èˆ 9(.Å„uJ¶“RN2TÏò“4Eà¹Ä…(#ø2LÍ4+‡î´¶ +Ñ%p�r`rrÒº‘Gú½Ãëƒí¾Šœz0u@û >HêXSàéÔÐ.ÓöräœÐN_{ðN �±‚ˆ½0Šœ³´ Í…ôQA-³ÛÚ ÊI©Ó6“öD1à4ÛicÄÜeJk·®–¶â¢j)�šbR”šŽÒ*C‰QZ%Úò¸=ã�j)Œ(JwÎsuv¶µdQhIöTš-C§ç¦íÜ=ÛžÅ2h +’fejg·xhù^ø÷>±£>Ó£µê?í$Ä•ù2$jr9øÐÞïkKJÀâW´e*âhäÉ}Þ÷U$r&˜ÃP6;~S³.Âõq†ª¿ÅYïV­º¤§)àê[uÔ'°\{Ug;†lBã2óV‘ß̸è-üBÁl¯<‘EëÉßö¥ýü8w7s +endstream +endobj +748 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 747 0 R +/Resources 4 0 R +/Annots [ 749 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +749 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 265.954475 101.433071 247.204475 ] +/BS << +/W 0 +>> +/Dest (cb169-1) +>> +endobj +750 0 obj +<< +/Filter /FlateDecode +/Length 3991 +>> +stream +xœí\K‹$Ǿ÷¯è³@©ÈÌÈ�¶AFÁc„³í 3kXùà¿ï/²*UÓÝ3;«dí0;]ùˆŒŒüâÑUe�„Ÿ/-þËlMÎ%E>žÞ>Ȥ@øW[l.*ûü¦p´ÄÉ[bÇ÷Bðɤ\ŠÇ‡þÛ]ÎÍûâðïm{t¦”èl8þòNXìMÊ)QPX,²^a…`Rr!*¬h –XŠÆ‚!±ãsV‚\rÐXƒ�Ë ++C ÏÉúsV�.YÖXÖ�–%Èa‘ʃ Äì�³ÁD(=j; ×€‡c«œi«†�BãwÉb‡5p—( "pWܦ†1 Áe  Aì4,ˆ™MI)jX �‡�OåEƒë aA" KåAN¬akS|É$Y¼s$Y2hX€ˆÀ‹è[M ÌEͲ RÔ°HfraÖ° …ˆ| ZÕxÑ™œ×*/ƒg“†)±�+¶ —2‡^ü‘pIÈže R�,8*À™ì™k< YdkX€HÒ:/�§ŽÎµà…g{ˆúä>WENˆʱ°º¬CEó¼CGš¬Oîóâ²2 3”Ræyš�ת͇UK¾Xç½uóoìóâ +�ç½uóoìóâ²"ÆBnQPÜpð¯5~ÙÍ—ÊÂ2/r¬G<+eýß ¦ÄO“¤Oëñ‚â’qUG´ñÅIׂü‘xÓøÛ78¤UŠå»Ž~i}èÆ‘ç;váøæýá«ïÿöÍ7oþŠ­|søñU$\ñòûõ?Žo¾;üñÍ@z™ GÓýr:µÊŽ�u¹Îð÷?}óíŸÿ2Í�`sá<׿IÒ3xáüõ—ü`׿qýÛè�ˆóÒ'ŽøíB—†¤Ð[[¿ô nç-~O �ß�ñyŸãÔv•…¡F¾[ûµëûižÖçn×7¯ó¯ëéò�Ùêx§Á¯cÅ©oZvâ&Õó¬zѶh¤IF{M´¿²#ÿ|œ'ýZs<íÆ4®”¥Û.T JŸÓ*u\Å�9�=‘,BœUN¿j?ˆöó¢ÙE®óq¢—¬¡V¦ÏÆi;^å‰U“äpõË"Uk©;ÝÖ';ådwUÙäŠHìbQÆÙd|YŸô;¬¨[áý:O³¸¸^Ó¤o»êzÝŸÚw]wß?äUçS,¹Í-sjëc^ԭ߯?´1Ö±XúJ�Ã~êׯ§dÏ‹|Uηk›»µOXN7ÏsÙu]ëµ¶7ž_+_iýîGò(ëxlœó¢Áíå)¹?g¨r ð¦ô•hSë;y:—d¶�ª­Y“›âÙÐâ\«eÎ4Š�}üV* -­�Ý=c³È•vš<©È[FŸ—-�…"÷®Ïžöy¥³óqžV:‹.=&�µ<¯tv>öÿWé,ò~ý¿ÉÒ�1µ3¹Ä4•½.ê,îuö«—ÈÝ^Käwò?¥<–\1Ùy¹›ëæòØ�}>w‚6¾¸b6Ĉ@õZÁK—ǶÓ}lyLí÷òØG•Ç’Üš£/t{yìÆ>ŸÛ䇼±/Á„ÓËcSlÌ»-ûœ¥±›Ÿ™X›ç�Ho—CØÁ«Ñdó¿.ÓÄD3¬€ë- ÀY¹õ0]7ÑÛú¼-r\k¹é©)äóáåLÿÙe¶,_oÆb³ÿËlÛI/•Ù²<Š´šËSPLrƒãEÓ»±Ï+)bô¸ §pÉk™íÒ«.Z¹ó?yJô¦¢Åü^°Ø©‘g5þ8[‹ßå3´÷úî×)IšqçyE‡óq+:ÀæXo'Ná(ᚯ��DšîNî vµÉÌ:¿—¹Ý'x´»Û·CÊ{|b¤“Üz¯º,Íaû}\—\”Ã×TºsË‘{}ëÝ8LÕ}Äé ”…í‰Ôk2 °¬óÝ­[w9ëfüV™äÙÔdÎÐÖp¶m±>2bëcƒ$ß:y¯À1²ñ²å(�©dòlÛ6ÙªX{|¤g}ÇÞj}AÉ3›ò¼Îòö†ébmÿ¡nð{œx6±�ñú05Urvíb�ò0=+d$rîF²×�ÔÇbÛq§ÑNðÂÉ”}K¸8Z?p¿·|t¡­Fú‡ÖMrl¹v%6¿L¬Ñ3Ús²¬žŒ]ÉòB‚lüz»(!6™%PíòÜv 8:^%[O1œišn�7y¬<ÀÖU±‹>«ÎNÛßÚº4mç%âé€iýžú Rå1è6TÓ.u£ùI¨Ò©¡µìÂ}ŸÒé ¿¤64c3;Ú5y˜l!æfHÜÛ•ÖN!�j»u´Ðw*õVyt-MóC”aê>wÅ+´ÓäÀ“¼ae:#äÛÇ-YŠÌ}¯)OvãΈ§Cà~ùá’Ò: ¬ ÐLo&úiÜNÎ4ìePSnªÂÑl4yGþ_ "tª Oý`¹›”ÜŽ>®Æ$r6;y«¤™;ê°¦Ëi´�ÔeSê6;ëËfRÚ èöÖ]cꤲ‰.D:vðØ’m·ºNkúéX9© �é9tS~Ø�‡œ¡Õ@}²h's}ÜAŽ;frê;nåÙÈ.ow²ùFbj2ŵ[SK]qVµ”zL1¨?Ïšó®t%†yWâY[·y¼-ù…ÙœÓX�–=–Ì +-ν;•GKßhçsóvîæm�Ó2xGdJ£[8kù,ü{ÎÙYúìªZ«öS+!6�§±á¨Ù&ï|}Áå�!,ïHIœ§ÒÈ“û\®•œWDZ­dž ÛaØ{JV^•¨‹ðF¹Î˜†j¯QÔ»R—ô4<úXû9C*Aõ]YµÈ] Bý2Iª(¯Æóôfy£O"«×by}âònSB©?ÿG^Ÿh +endstream +endobj +751 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 750 0 R +/Resources 4 0 R +/Annots [ 752 0 R 753 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +752 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 606.123057 101.433071 587.373057 ] +/BS << +/W 0 +>> +/Dest (cb172-1) +>> +endobj +753 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 296.981993 101.433071 278.231993 ] +/BS << +/W 0 +>> +/Dest (cb174-1) +>> +endobj +754 0 obj +<< +/Filter /FlateDecode +/Length 4871 +>> +stream +xœÕ]K�$9¾×¯¨3Ò?Â/ ­´H€â€4¡‡žÚiêEZ8ð÷ùÂéWfFUVÕôîÓêêÊ?ÂáðçˆHgŽ9kü|eð‘Ȩ”r t¾|úá¤UôÿJ‰ÕEaÿ ¿ÑŸ�¦¨¼É!ùó÷LpQÅìm ç·>6—sñ·Ó_~qú׺Ž9[•s°ÆŸÿý‰YäTL1j/°2XÚ8�彊Ñú °‚QbÎ bøH–ö¬1('/± Y›V‚Ž¢q{V†6’XÃd–Ñ�ÃX­EÑDÎ +<ãU€ÒƒÄ³F…”my<­ÄsN…HƉ—UÁ'‰G�Ågm$ž‡,Þi‰YÈ¥(ñdqÁi‘YlŠNâEÈb¡�,ðd�u%‘YtÐFâe§|ND"/ƒ§SL{žÕ^ù䜖xÆ(Ût"+ +“¢À³�%hŸEdñN[‰ç áGâ'¼‹) «ÕòêvÚ‰ç!‹µ‘DdÁäK`dÑ1H€¤—$ °1*Ê–$°É)J”$°)+ŠÑI0`³Wr”pÀiž58 Y< œ�,„•+ò ‹Ë$a�³�$,p²Xr8 -ÁZ$,p€[ÒÙHXà€·¤M�°Àp!¦–°Àq] +$a�䔲„˜ë€�8€.–{”°Àu�VÂØu”‚„¸ëÈh ¸ëjŠ<È–°è¨œINÂî:££„ÜÅ2²`Vì0HX[Q6%-awmÒ$awmÄ ò¢Âtp×z AÚ¹�»Ök+aw-Ù a E´è w!^v VÂì÷àY'aSn‰„¸k2¶?aM­”I9HXà�»&aúD^V&B㺅–• !KXà�»Ø¨œ„¸ øLãvT+a�î‡�Zâw�ÍZÂÜ…ßà%,€9(@ÂìoÊh˜®ÈËJç”$,ðÀ]À’•°»°Ò H"ò¢‚! ÆJÕ° w±½g pW{ç$,À]Mp{DdqÉJX¿<,[aMÃYUÚ)$pW̰Äîj³„¸ËÛ¦„!2Á&  ‚l%,‰TŽ1HX².ŸÈ +×^‚¨Að€,‘Y(’„p¬Uv9IX-dqÖJX-d�Ë a<• ¼o1<€,01> ÈOQ ™J™H‚èâ1hUâ«R\‹¼ž‰ÄH +[±‘°±”JXôà»K@ ð IX3dÁR‘°[‘Jž¹Ä3�N¶„ðtÁ3F‚d! ¼A ’Mˆ2ƒ–°;4bI¨Zâ‘æ83IX�((v%,À2A¤ ¤y�0!a懃m/a‚›sDdqž$,HÉr¸™$,H ²Xm%,€mr¼%,ȲÀã“° ë ØM–°0žÖd“oZ’°ë’ãÍ$aAvñ&Bw<´$Jûx¥w’v¨)yÞY3w1© ¡!<"v?%ÕÞYçÝ5;÷;Ûß^և뼻¬ÿ¡Xöb�ÖQáw\Xû�á×Np�–Û/áÕöZ_¦«öcj»6�:­]ÿ±�Õí&õ¼Žéà>Ûu}¥ÙE^óÝžÆåŒ½¥:þºÖ]‘).ýòý)ë±™KéÃLåÒ¢S.[t–1HuËXØ 0Æ–Ï4Iwþ2tD¯7ÇW=Kµ�fZq¬¦ß|((⺣ƒ Ú:Œ{ˆcÅPfç7)îÑæ„<�Öy ++à Q�¢`ºl9Jƒë­3¢î +QëuQM¿4Îwy$0ÒêJüË7ß|øó¥2mþë¯ ›Âeù[¨Lo¥¬Spµ;$:s¶nÓ]æ2ùµ5íZ³ S„÷Ÿ¤Ö^†œlZËò­×©Ê_{jô.Aš®m3½ZwÓFÑKZ·ÓF°˜zåÕ2]‡­ŽºÜµ³‘sÖu×ùëý}5¹ÖKív£¯,‰œåä`l„ÐÕ ú +áhIÜWçç^]^kø^|L€iIÜ4 SÕZª~×›)û´1Ë�Ó”74ߘhokk²a\k šK òówûòÿfʲÉY ‡3ONg´Jô¦ÉÝYçË19N3'¨Ðˆ&÷ã¬ð÷3åÅ—«¦øÒ§±»ÆW=b‹xL'ƒÍAt‰muˆ|sº&g­ù˜Ýmuc-æ·s�ùæxæÛP›NË.wÅpÚ73ržDˆ%y{Óôî¬ó9È�áð�„Èûj_èvó·ZÎârÞ.£[TqYƒÀâþVMVKk‹›�³µ]ÀïÝä{ÀzùÄ ëí–GèÑ\ån½¹†¯Õz“`¹¤röpy6Þ´Üš&x¡„ø—Ž ÷®*_šÝ‚pËn?Û&DkÈÊêI®~9ÙQàC5Ö�h&.¡Œ¡ú·® Û��¯Ú7Û†.ai['#Ä[Ñ[Ȧp­%Z>GÛ­ü´çöºnüŸJi³–…辡x‘A×ú[gà2õ1ë`Y÷(>ÌŠÿ¶éfÖ[º™u6ã‰ÉuŽz&cŒ»\ë�.ZÛ~­‹Ò®zî�<êpÅnôÝÛÖë¹)¸q¹òz�e²Ây‡“H|Ü2zÍÇàöíô9¬™Œñ–¤¯É¡ÇXžKpíÛ¾+ÃUÓ-Å&§,Wé×,žÓ=¯e~f;˜Æ’�é8ãuSwa;>yí,¿³Þøº¥¯Fü»–ƒÕ³U–¶~Mµ‹Æ£ú]ÊÔµ4Ô4þýº¹9ÆÌwa�ÕáVj¦Ìk¨sÒ0Ç]µ_øùìq9ï…ö›Å;¾•ìåPÃ>aOÈ)&ûŒ†=0+lHÒÆ“|‚2x%T˜]Æ• 5AWÔ|DŸsæÀ\Ne¦rúó&NßYççÞ¿‡¼ˆ?°0øq:ñN™^§äûò½l¦ÃŒ¥¼*OmʧnaÀê;Œd´µØ÷�)œE21[©öaßüH”Á4Á¼÷µûò|©£út ¤˜“ ¢QšEcöž-†JÊ�bNRK/?ñ¾-t·KÁ†gf�*IÎä䯌Õš6|Á§œo5±kaüâ¢Ê((~€DÖò‘Ü�Á†ËÇe·Ü8âÉ|ùzß;ðúQ$âóÇù©dDÞGàu_�/¼ø<4?8‘äøïñe AÁÇáÓÉëÆïšf>CªMôÎJµŸ1OºÓ<'?SèùrÅD<æÐÁ¤Ì™ñ‰ôMä¾:_މ0:ú’“M¤Ÿª8šZ¯Up:·iò>ØÌjWûæIŽ£3(ÔΠHRU'ò»{öÖú-Å[�Ú»ö®eóé�]ûq½Ï»öu½¯Ž*µX^;Aü˜Ì3òÀŠ|L:Jµï …Ÿ ¯¶{ùÕ}üþÝ[˜Ë{vpÖ€õ޶KóÛY*®øi¾¼œÑåæt²‡G&î¬óåÀÕòT0�üýàjÕäÃpµ«ýNp%Hµ=°ödí[{/ÈÚµüd=®û²®ëþYÈzBž ²öòÜ:ÑuÐnyï�ñìÔ^·…éækÏ}lsíøÎ&'2n¾~½¾Ék¯Àjr?_ïksÁU^S"­�C› V+­}nާLɾö”—ê·Ž�ðó©ˆÒ•Ê H¾%ÖFõCQíôµp u»9@oü¬?�et¤Ãœú�u~îÍ¡ßkI‘o^[ˆ)çjÌt?%ì�¢ÓªAvC?ò ¦:?Æb4›Ó!Óýœc“ˆ_GdƒÏ?á™»u§·N.e`p35âÚ�Gæyg�Cóü‰Ï.eïoYi ƒë¹uo>:‡Ø»P|ãÒì2cmnÿTŸ’�jðÆ•·¹ÇC·}B‹Ì_³üýSdg³¹}·^h’_�çҹܳ‰üD¹¸4²K¹vÈ"O¸êýÛ–†Ñ«C<ûíÙ ¶g÷à u 1œ”d&MwÒÓøÞ䃥¿—º/º?#³j¿=š5ɳz6)/©½e _o§í‡S(oB0åm8:¤rw'ñËK°ó[Hμ#& שM“)Š5ç+5ËKè¥ø$Þ_<¿†¢Lã|QËÿP&øû{Æ%Ñç¾Ê;Ât!'Û.ùíÄïˆ#�L4ŽŽ�™X¿êÞΆv"!LÛ–Är×õë8®æÆ ßFÃõ}«ÆÏî“n…\yz}éX ¢f0{2�^+SÉüž½¤\½ +]lç¹Gƒ4— ŽŠ‡dãôDô{¢žºdKMÃïeéª ƒØEŸUg¦éoemœ¦óñrB·nK}©üv¯ÖTÓ.|ÊFs“P¹S}+Ù'„ú< ¤ËI ~¥[Ó„ÉìüiÖø) 15C¢^.·rérËÕÖ|Ÿ©ØK¥Q57ÍQ†©»Ô/Ð.Ó‘ÎÈ/�Ößló0“ù$`Ÿk>a_§`,ÝA¼œ<õ•8Èo'…Ò~`…öÍôf¢›Úí䤇½ *?è´|ÃÒl4~Ã.Pá;•‘§|1ÔMŠW£^›�¼VÒLuHÒß´0;*ÚŽ±Ûì¬/~p~_žA·—î[Q'•Mô˜›x R<ÖdÓ­®“š~:VÎDÝ„@wƒì»)¿­ÈCNß—ª×½³`&s÷½ÝA;ßfrì3nø•?]ÞÞîdó�x)mÉlú©u2ÈV÷Ýnt6‡`…A0úVÈmµvtâGõÚױȤ÷rúÇ©lsÖyË!]p†ß`7{Yæü_”ù=~ÿy¢óÛ+S–}ÜꎶcëŠ<ïdü¾Ót'™ßÚˆ}ÙLDKì²I£¬oÖÐ÷qk'¼¦Q]`o%MGPÓ¹3ÑNdÛM·<Ø5ão/-vGæsçflØË¥kƒãÇoùe;M*\ÌÃÁe<7¶äóÔ$®¸èØÒÁ%;UÄÅÜ(.§ó�l%&äÜIW=ËOóT8îkº˜Ü¾tƒGc›�›n´2Š©\`7_Ì “™;Í+y¡Ÿ^^Ÿ=ïUäÐVS;´wêÛLícj<™êÊeX_ö=Ç•œA[¼CC½-7­=×�œ±4†kA«‹ÙF'jÕj?wJ�¶ê´m.@Ó�Ö[ŒM¦P«5µ”'QK±ûƒú�YÓ~ž•®D?ÏJØ•åvێ׽%× ?›s£Ó£d÷%“@ síN¥QÒ5Ú¾oZ÷ÝvÛó4 ‚„á™êQÍïJ>…Ϭñõ/R©öS2!&�—ŒñÃJ&:ëÊ{ãu +BüêÏHiJ�<\çv®dŸi¹’¹'ÃïÐrNGÃÿ€,Âù˜15Õþw¹ZÖâ�S€� +0·YOytIø•„P¿Œ*òß;½‰_Tµüòž’â´ËÇU +¥üüä© “ +endstream +endobj +755 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 754 0 R +/Resources 4 0 R +/Annots [ 756 0 R 757 0 R 758 0 R 759 0 R 760 0 R 761 0 R 762 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +756 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 713.673057 101.433071 694.923057 ] +/BS << +/W 0 +>> +/Dest (cb176-1) +>> +endobj +757 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 373.781993 101.433071 355.031993 ] +/BS << +/W 0 +>> +/Dest (cb179-1) +>> +endobj +758 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 354.834971 99.933071 336.084971 ] +/BS << +/W 0 +>> +/Dest (cb179-2) +>> +endobj +759 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 335.887950 99.933071 317.137950 ] +/BS << +/W 0 +>> +/Dest (cb179-3) +>> +endobj +760 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 279.046885 99.933071 260.296885 ] +/BS << +/W 0 +>> +/Dest (cb179-4) +>> +endobj +761 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 260.099864 99.933071 241.349864 ] +/BS << +/W 0 +>> +/Dest (cb179-5) +>> +endobj +762 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 199.152842 101.433071 180.402842 ] +/BS << +/W 0 +>> +/Dest (cb180-1) +>> +endobj +763 0 obj +<< +/Filter /FlateDecode +/Length 4696 +>> +stream +xœí\K¯%·qÞŸ_qÖDÉâ 0È@À�&0!‹ÑÑÆU9‹üý|Ån>º»ÎsF²’x.îÜî*>ŠÅâWEvuÛ3áç+‹ÿ2[“sI‘Ï—O?�Ȥ@øWKln*û�øMál‰“ ¶ÄÎ? +Á'“Jp)žßOøow;?ýé7§ÿÜÖ±ggJ‰Î†óßÞ„ÅÞ¤œ…UÀ"ëV&%¢ÂŠÖ`ˆ¥h,ˆ;>²Äà’ƒÆ‚ì\VXbxNÖYb¸dYcA [BRX– ‡uD*‚³w +Ï¡ô¨ñœ51WT^Ï&§ñ¼71± Vãc Yã1d …¬Æ �%XfÒx�…}N/B=©<Èârò/Aí…—! ¬+«<ÈB‘¬Æ+Þ„’™U^�rÊGž£`Böž4žµ&À6½ÊÊÂ$Ťðd‰ŠÊƒ,Á“Óx²0~4p"ø”³²Z�¬nOÞj¼YœK¬ò &_C! ¥¨AV�\Ò0À¥d¸8Ö@Àeo8sÖPÀåb8%¯Á€+Áp,IÃOö·?Ÿ¾þç{þó�>ý¦ž”µ ã÷ecí`_rì‚ù^™ÚÌBPØgY©""$|©’ˆ‘ÊÓ×c7ηœû…Ý + ™Ej‹p¦Ž�7c³`1[>êÒ>_é I;Ô${ˆäm‚)MjBà #Î]Síƒu¾¸fç~‡’4YŸ®óÅeEp€ÄŒE°éWò^á»Òyùw>^…<®»ß}8!†wÔ­¿·Ó¤'o Y—Ï~<}ýïÿüíïþå_¡†ŸNßý. +¢Al@Úú÷ûo¾²¿•Àø˜—ë`׿qýÛè�ˆóRöD¼Ö…nêý�¾–eD(ü ¿—…ÖÛO?/í×úR®¬ãh¿·Ç“LSÁMr^¦¶òK­ßÚ™ò7ÿqþðû‡4[fÍ~7wøq«¸>˜µÓ®ʯB\¶Bõ²y«ÌÖG½SŸn(Àþp�'õè{LîNi½ mÌRç²*%®Úˆ³d=0Âø­U>4%K‹b¹ŽíD/¡`=n<´SÇØ&8V�Ü’#¦krÐK�è6>ѹ“yRe“cçH ¸QÚÙ¤ý�—úÃØ'Ã,KûÕ°>­}}\ûEþ8 ¾òhÒ¿]ußç}½¦µÍia„‹Þ믶Õmp-3Ù^m¯ÜÔmÞ�ß—¨@~�‹{�ûÆãõz³èðé‹ÿû­ìÃÖ×ß��ù[cpNžÊë¨�aYC—m}ø¸ÎIzºb¿Žäè‘wPÚoòüÓ¸�ú€1"8‡½_Z‚‡ /!t�µcLw5Ï×yÉ®Æ8ÙÄclÆ'›D²T°‰=¸�°Ç~ë¬ïòn´ñõþôí·þmø�6ÍuYÊõ~Ý0‘½y°{̜ŌÚ¤zyŽ×â5lkأIJ¦±¥À¦æm¤ÓYõÏ×ùeTÏ­×EõýÖúÐå�ù–êIdºÉ4×–¿ÂãмTóf+=�ûPÖUÛÊò¶½«Ó� +vÈÙc€tOû7‹~†Ò7½ yƒmm)å 3Âtp‘íÝMɬó%BÔ/b CpÀ¶(aAóƒ�¸(иL º%‡µå>I<ˆ_iK`r�Ø«Ý tqf�`xÛ]u~2“;í¸zÖ«SÚiާ™$—É \m1Á%ø”y¯ˆ*Ù§{µ±/!}¤Õ¾ßw®{é½R[Â�¶û"ów5ä.‹¸Ð+â·mÜλ>øÓ®ÏÔBÌ;£a‚#úðŠ&Y,ÄÛp0ȇ4 ‡`¬ã´Ú/j’ôPS®iRl­COíÎ0wý®rH½=íî(CŠA;Í^îj8dø„’Sv¯h8³ +À†5m¼¨á('ÔðMIC…9ŒÜ„N3t Ðb“]äI¢<©Éõtý6N?Vçïí¿‡¼,Tï(ªð<"íÝò½ì¦ÃŽ¥¼)Ï­Lõv0àè#™m#öc`Z0 a­Vûnß’rb1MbÞ‡Ú}y®{ñ +‚wÚÃXØ‘Ti�¹G\Œ$}”È©d­¥�¿ð~¼·ÐeÜ>G_™yhŸ±˜s¸2Öð69|%¦î†jhaâޕ;r4ò€^×ò=¹£€= ‹õË�Qv:Eñ\ïû^!IÍ)Xîœ$ëÓÊžâ6x=Vç×^Qr4á윾ï{~Y"B0ˆqäé϶ñ‡¦Ùb3D6ï´Ú¯˜'?hžsœyìùrÅD²<þ,”%Ó‰å‰_‰wMä±:¿)²oÊ’²©šHòroj™è)[¿kò1ØÌêP»M:ï÷Çé¾¹¢1*’‘£Jµ‘?<â[§­Ï±¥tk£ö„×>´lßžðÚÏë}öÚ×õþýìïµXÓúYÒ^‘VR¦¤Õ~d+üêöjï˯úñǽ·2—�xpÑ€ ž÷Kó»Y*®˜"е>¥cIBx®¬ó«�+Ùi:ìøË�ö\m›|®Žµ¿ \iRmÏWž�,¥µ/YÇ–Ÿ�¬t?AÖ Ý¿Y¯È3 K‘'î`†¶…%¯Üµ7lazHI€AŸ—‡1rí>> =#.rû~Õâ>ÇF&(|ÁF¦�Ì s2�è±öD—ê#Á õiË;ÞÊ{4Úsûk�®Ä1…é¹JÈ×uÀ\RÏSÍfp¾fÌÕ ËÛ`þX�¿7˜÷g#�êCæ’³~¶b§çñ¸°;mõùìžôåS�c¶€rh8ËÐ6%ëfÅÚ}™o7¯À˜€‚+ÖÍk5£úô½™Òœà¯=å?>!•—qФ½ï:­ú¾bŠ»¶nVdÈ%YX·MñÁ:wMñFNÎÏb‘ÙݲHšZ�ù«%üp¿ µ\ƒÝ1u}¶n•ò^Ùï‹Ã)•jdÒD—L±‹},IéÒÀ®»ÛmØó¹ Jos4¿Zýú ºÕ›óºîZ¾O{x½Éï¸^f#/Ï€½­sLVZió¸Æ#µGϳâ—Gs4®mò’ú¼+²=›»dË:¯�?%k�<e;ê4{¥ž§ÑQêÒ·ÐÏ�ï¤�¤¿ Å^Ëw:¶SQÕҔϲÊÝò >�qŠÌÕ6ç¤5UÞäì5yiŒùµ¼¨cÛ¿d^”ÌkXõ¾¯{è3Ž1Ö§–¨ë’÷ãmòo'ýµÜ>^í«åCm’'¯ÚÆ¡�áZÐ&ï\sº.cÌ5—ЍçŒik¯f‚”Uþ°F?ÍÖÚýÛÚ·‚‡ÖÝÔY<èìÊ\Ôä�f‡T#§[í–´k×­¹gÍ&ºNÖD¡–OØóÆJ÷íœmæ#Pϯ»voKtTyk^^_û¨{™ç¥­³6o—–¹-ÞÕ5}™ldºo‰®·l9dÍ‡ÐØŽªzÌv¯GÕÇ”�¼ûõuË>ì°ß¶æ_Ç´F¦ù\üÞ:�WÖR+Ó¯ÃÔm׿¦Ü1¢�u纛ƴŸÃf‹=Ÿq�‘—!‹msö€Ç&Ñø�?DLò×ïû�Èé í–½vÿæyË[fþ Ä=Çv~ž¸GÞ6»"ïgÇ=ǶÿoÇ=¥ìÇû¿"îy)‡ü率,Ùƒ2Ÿ ˆ°ÅþãúÒ] +è!X__––Ì•þ_?#¹[äΑHÛÌ_›:Û]¶êö¼ MÊ×¶|>×Å$/¨ª§Mq9äõͧ—És­év. ;šãÚîË߆wé9üm^Êš»³‹ÚõÞÿ×þÖØ`¶áMûÍãLòlü{Y2Y–1¦í§S¬/VÛúq й&3fù‚ñ2å,©r™<Û6M¶*Öž¯Ô¬ß,û©—’ÿA"ù²‰¼Õ^§q¾YËÿT'øÇ“<ŠÍùÕOQ%g×nùý$Ÿœb…Ì<<è²×Kêmaåv´ËÉJ”µ/郡õrxm?^Em4R?´jò*0S+äë˰KÇ +5£=’eôdìJ–Ïv!@Xïb%Ä&3ˆ£AžËŽGÅ»dëi"†#‘¦îÙq“ÇÊgºêâ vÑgÕÙiú[Y—¦é¼E¼œÐ­ßSßUª|,¨5Õ´ë¨Óü$TéÔÐJö á>O +érRˆ_Qkš1™�?Íš|ra!æfHÜË•VN!]Nj¹µµÐg*õRyT-MóC”aê>wÅ+´ËÙ&ùá´FÈ·Ë-Yœ>×”'»qâå$ïÄÈï§�”Òa`…fz3ÑOívr¦a/ƒŠ­Îª*,ÍF“Öåÿ*B§ +òÔ Ëݤä£ãnt"k³“·Jšé±£k�={ ¢í”ºÍÎú’7Å�åt{é®± uRÙDO¥‰' ÕÁcK¶Ýê:Y ¬é§cåL¤&ºäÐMù}Cr†¾Tõ΢�Ì=ôv9vì|ŸÉ©Ï¸•/ˆty{»“Í7â¥:6Þ“Åôsëd�uo7:›ˆC0€Â }¯ä¶Z;:ÉWÛåXdšÇ½œþrªnÎùàä‰hôV>ˆ5GYöüß(ó{üþõÄç?´/0,~ÜQG ×±uCž=™|>1?H–Ï)6b_6Ññûƒló(š5t?îÜ„×<ªÓöVÒvµ�;ÃÐáDvÝtåíÄ¡™pƒxÙi±2Ÿ;7Ãa/·¾ ÝxùvG“ +7ópp›Ï—|žšÄ�.\vSEÜÌ�âvê° É6bŠAÎ�tÕ‹ü0¡vÀÓ©¾ÞÆím÷9¾>†o‹wh¨·å§µç{�3–Æ-xs3ÛèDÍ£ÚZ Ì�r£m:mŽ¢ÃhÔh½ÅÔdŠkµ¦–:â¬j)õ˜bPÿ2k:̳ҕæY‰‡²Ònóx=Zò= +³9§1:%{,™Zœkw*�’¾ÑŽ}ó¶ïæmÏÓ0xGdJ£Z8”| ÿ^Y;ê÷N´Rí§ž„Ø<¾YG-¹’Î×ÏPSŽÂò%ÁÄy:yºÎí³’ã‰H;+™{Âtöž’•Šë"¼ƒQî3¦¦ÚÇÆõj…Ô!=§å(hÀÜñë4õ‹²5‡¦õÛ$[Eù€´— 7Ëw/]Iý¨.$åcs„RþˆSÝX +endstream +endobj +764 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 763 0 R +/Resources 4 0 R +/Annots [ 765 0 R 766 0 R 767 0 R 768 0 R 769 0 R 770 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +765 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 653.523057 101.433071 634.773057 ] +/BS << +/W 0 +>> +/Dest (cb182-1) +>> +endobj +766 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 634.576036 99.933071 615.826036 ] +/BS << +/W 0 +>> +/Dest (cb182-2) +>> +endobj +767 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 615.629014 99.933071 596.879014 ] +/BS << +/W 0 +>> +/Dest (cb182-3) +>> +endobj +768 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 558.787950 99.933071 540.037950 ] +/BS << +/W 0 +>> +/Dest (cb182-4) +>> +endobj +769 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 539.840928 99.933071 521.090928 ] +/BS << +/W 0 +>> +/Dest (cb182-5) +>> +endobj +770 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 478.893907 101.433071 460.143907 ] +/BS << +/W 0 +>> +/Dest (cb183-1) +>> +endobj +771 0 obj +<< +/Filter /FlateDecode +/Length 2686 +>> +stream +xœ¥š]‹d·†ïϯèkƒå’ªô!CpÈE` „à‹M³ccz ë\äïçÕ9GÝýÎz½žafŽª¤£ÒG=ªR�¿¾¿öøUÌ»RjNv¹~Ø>nâr|í5î +»úøÉñâŲ‹¾¦/š@³Ë5†œ.· ¿ŠkõÛöϯ¶ŸïÛøKpµ¦àãå—÷MeêrÉY"QU¨Ä+QÅèr1UòC¬•©`FÌìY•a†Õ™ +fX…¨ +ÌPË^ŸUf„ì�©`†¯1•ØáƒÕÁ1Ó@t>º„IOL¼K¥†Ju:ŸÓ©º”ÍGÏtÕ¥”ba:ƒ-±Šgº[¢7¦ƒ-¦%3]‚-šT¨¶„’•é2l ˜�Jt¶`wªƒ-’Ä3]Uk1£º +�”\žuA¢‹EU˜Î{±7•êàQX¤”‰.À–$±Rl‰*�é¶¾™œˆšK!Þšw«¨gº[BÈFu°‹Ïl‘œàA®q‰1 äì¬cE�+Œ¡Tg9+Ã@¨ÑYª™q@ÅC<� +l‰– ÔÃçRlÑjŒ` *0¨Â–`ÊX  ­a·0(pkR=c�‚·&>1(€ 3…±@A\-É ÈÅVªŒ +æ*ØÉX €.Ü=3(¨«1ÆvÕJb,PpWÍ c��»ªhIu°˜±ttê‹2¸«^2c��»p£ÀX€Uu؇‰±{Å…R„±ÀÀÝPÄ Ü GÕeTÆwCÄØÉ î†(�±ÀÀÝ`!1`£8ðGh4î!‘‡°€e,Ày]PƼ̄%ŒÜõÇñiÐÊùRcAw}ÁòQ]u>cƉßb–�O©2Dp•2Dpø,Œ`¼Ã‰ "¸ë'5Ó�»>Ta,ˆà.â†ÈX€íà<ÆœoÎ ¶.ÕU'µÆ‚îK�±§°“’P]vØHž±0v‚8”± �»8Þ+cAw%ª2$pW aÕÁ-�±q tp[âÓV��‚éÀ]ñXa¦wEre,Hàn;6 Rn‚P ` C R1WsNŒ© +tù¨.9”#cA"�Eu°Å²1 °vUka,ȶhŒ9À„ Œˆ\õˆ¾iz[°]h~`°‘"cHæJ5c,È1!ì2] +®dàšê +t>3älG±g,@.å +œž±€w-\b,€Ðyc,ȶÀU p¹™3�‡-² éBç=cA °Ñ cA YfÆœÐÈ%1ÕLgÒòÌÂXP,¹*2ÀM�i‚”T[€ ƬOK¶#c’$›Hs¨¶h4Æ‚RBK7 cA)°%H`,ÀÞlùff,¨[ñ1TI®…ÉŒÀ8t"ŒÕä›Á à—-ß,ŒUù&R<â·USË73cA5Ø¢PlAÐT‰ß‚IÈ7A'¦K°%Tc,¨)µ|³0 Ì@¾‰ˆž^ ”–ofz]îÆ +21¸‹È41 €|‘-Ëíà�ñW––qzc @oÄÙJ¯ ìÅi•é��¾-G¢—0™eIôÖÇ*”^èµ�€¿ˆÇì‰ ÇíÓzE•°2ÎÌ’Û +ÜÂÝ�œcVÓ7ª÷c¿ü°}ó‡ïå‡ÿn¯_í7eÇ÷³úÛ— ~pÜÁa_Ã5ÔRK»±v5†ûòaûæ_ùÓ·ýìyÝþý,0f¯"±àÏžX{ŽG±B”³ŒL(Âßìzèö¿Mæ�6˜˜½¾µº×ãá·„÷ø)§.m¬÷‡¶×ëѯœýì:;lÚû8e»>åý0_GÚ¾”÷þìü›[Ï1Ø»sÜñ¨··cúã÷——ïÞ˜ÓºÎi›ÆñÊ×ij“Ý™Û^ÿŸEÿþâ9¼Þ¶Õó§ùÁNùë—ãlw½_ν^:—q]º‡©ëmöç¸ô%§­ç´ßÕËŸšºöø0w˘—°ož5b™ö�qž¶øsÉþüG9\Î&H¯tq’,ž×¼NûUÚr�~êœ÷ÎÜOÏÞ^ü'\¯lwä8dq!0mÇÊ[0LíË×N<;¶ˆ¯ç6‰s9Út¶mÖ½c_¶÷G½6s»W¦eËÕC¶D~\꽿wÓ;-Ï-=Þß·âbÏÝR¶>cÃÓ²}ÜÒù=%Fj…±Ý™ƒ—NÛ:ÔK ÁŸ™ïËä÷‰õ—7ZîŸ4|µÎ¤ÝG´Xôødb)œõÒ~Ø<—6ÿ-ä;. +e#Š�âÛÖ.Š�ˆq~„Ï7áù(ã]ÈÛÃìºyìØúXÙ¿œ�u¼\cDâ™fûØ›µ1j襶ç�މ-“·Ñ‹ó§¸]¶§g) S�‘Ô!œ/´µî|álø«b¯²ã³P–î¦8X·Ç·älL]šÂaú:u~Yþ^7äe9?%¼nèV¥7*mW|ýU}vu™.FÕ!�½æXëDD×�¿–þjÃbý²j-Q:„¥o$õj¯GD×�Ö;ßÇJåQ«Ì¦µÏü4enu-câ‰lŸ£SšÛ§‡‹�ˆöÇ{qj+Ð×QëÜ7áIxÝÔÛ“ø¶ÅLjÇÉ +‰}ë­B]Þ;ÄEæ~™R÷çTÁ5»¬…™í÷�Š8¤�<û2îÞ¬¥Š³4;i¾9Ä÷“´ÊӠޱð–gÝeº|ÎcÏ®óå‹�ú º£ö˜±;é2e‹<×n^ƒÔ€Ç½Ø�]7Ä a}~+W¡t#ÐÝDZ•owâig®ŠÍÞ;K~Ùîq¼wŠÓ`çmç±â¾åýÃÞñÞeÏwáu?ØìQܶ~é�Lq�qÚÍÎá4 P˜â‰ÑÛ.îÞ:èÔ>Ëì�ÓÉØ‰{Ý~Üöc.h  I.ÒÕ5Êò—ÿ¡Îwøùi³Ëß{ÞtœãA-Â`ë�x=ÉÚ‡žå3ÅíCÐ.n³ƒ-ØŸb_fÝØwÃ8ÇCXxm³¹L°÷š~Ôí*Œsq[7x]f&~Bx}˜ÅÈüÞµ™öQÔ>8t£-ãîV¡°Å2u:�äËòJ”ZÕy¤CkaiˆÂúR—ë´ìÎ̶!×NÆÔ7ûm] +m}-…%ŒhE�:›Çìúê.ÛG±TA¬ka}±ùµÓzg1ú‹Ýëw¯ûirêФíCz[¥c`M:€Ç¥ºÓ}qœ9zi…î¼s†Æ»tñ=AÎt�ZØ]aÝ£‹´Ìfg…¸vj]v×i?(. “.oÌݦt6ëÓ²�¸ÐYÊ#¦˜Ò×™ŽëªŒIŒëª¤§ºí½ýÄÑ’Ž(®Û9ÏÑɬ9bÉBdim=¤6kj—=÷m÷}÷Óö² æ!iF¦2›Å§š_Ä¿/ñ�£Íí«Õ¿÷›_æM#jóYƒîÿ<&%%0ÄÚçÙÊr5ò›Û|ú®äùF¤ß•¬=a9œ©Jöíß¹ 7(ê¯+–WõäͪÐ!ý¶ xóÊ–_Öîÿ‚¯óBhsKÛ¿}i zKû´: ¿¼Ý¯�Ú�Þ]¡ìßÿ¸™2| +endstream +endobj +772 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 771 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +773 0 obj +<< +/Filter /FlateDecode +/Length 4231 +>> +stream +xœí\K‹$Ǿ÷¯è³@åÈÌÈ� ¶AÆÁaŒ£–ׯÌV>øïû‹¬Ę̂®˜žžÑÈ–Ñî0Û]ùˆŒÇ—9Uå΄ŸÏþ+ì–RjN|¾|8}<Ñ’#á_k±»hìoð›ãÙç%ºšJ<BÈK®Ñçt~<á¿«KÝüñôíg§îû¸³_jMÞÅó‡%—œ)¬ +¹`°b\rö1¬ä,±V‹1bfÏGV†\K´Xƒ½/«@ŒÀÙ…#«B Ÿ[,ˆájÌËäpžÈäAbÞ๸$(=Y<ï–Tª¯&/ƒç²·x!,)³‹ÎâÕ%¥‹ÅcÈ+9‹!KtÌdñ ‡’-^‚,!2y�Å—,^†,Ú©¯@xW1y�…9‹WÃka6y<*¹yžâKdñœ["|3˜b ÖÎ Üõ‘¼… Üõì“…p”øCf6Ü„D;€,X °ßƒçƒ…lñHK,,ˆÀ]W±ý1 ´Z\©É‚Üuæ3yuq7âZ^\JÕ‚ÜÅF,,ˆÀ]Àg±°¿`GõDà® Ø©-p×ùJDà.ò†haÜaqH,,Àþ¶8‚ëš¼ºP-Å‚Ü,y ° /T€$&//p$gaÀx!ä¡$à.¶÷jaAîR Á‚Ü%FÚcò K(ÞÂä5à!l�˜F²º�RX<à.9XØâw‰rµ° weÛ´° e!øba\�{ Rá¥æœ,,H•ÀCÊgòÒ‚ëhaA&" ËäAÎla륆Z,,Ȳï-,Ȳ e°°ÁR²o³<€,p³>`È‚LÑ ÙR*³…9&ÔcЪÅK~)pmò +x.[X�3/ØŠ�…¨¥–‚ ·°¿HºdaÄϱ…¹B„Š…ØŠ–â‘™[<Y�d[X€L<ç,,(² ´° ø‚*3‘…Ø¡QKBÕ�IêÌbaAá´Hªha•&�ÒäAÀ„…°�ÛÑÂ?(6Qæ˜<È"[XPŠ—r³XXP +dñä-,€oJ½™-,¨Y�ñYXP)-’&[X�È‚ê +êMÏ .¥Þ,Ô@¨7Qâq[C’z3[XP²D¤(&² iªFÜ“Po�,^‚,¾²…5%©7‹…H3Po"£7�ŠÔ›Ù<.îÆ +d²xÀ]d¦ÉÂ\ ÞDfkÕöà�ù™Í,RqóÄ€½{«yd@À^ìVÙ<3 €¯ÔHæ¡ÄDeY’yj€mLG汑�ñÖÓ'}D•à{fɲȊ°`d÷£æ˜ÍÂÍÖó±þvúÕ6ßóßþuzÿY;)ë?âQ‚0 kû +k8A!(‘×&E~¹ 3½"Àto pM×Ävjш—“"#Ë:8ñØÇ=U]it5�C®¹µV²)êE­D‘O(P‘^‘cmçtš˜æ¸“%°^±RÄÞ³?ß§àû|/ >3È^–r>�ŸïSàýÂï%)'ŠÂ%p’?”³œ»ÆUÜLK+ùìëâ“—å­ª|MŸÛ•¨­ûÈõ<¾Øu© ni'¼›7:Ô½äC2e}qŸ7’uê(F’¿'É9êÝz½³Ï›ëUÏ{¯^ïìóæ²ÊߪBNì®ìi +ù\ãg¥»+¦ŽÆ—Ó¼Í{¯ñïìóæ +ÕóÞkü;û¼…¬Ç³É_¿;!˜Û €ø¬¼0—ö§K¹£(ËŸ_Îï>œ~õ§ß~õëßýc¾{úóDR@PríÎ"ÿW¢Xˆ×,Ÿï×Ϙ¿üËùÝ×'‡Õиyðóy©læÕŠL¹ŸåËÏÝÛwÞf,+-ºí3mŸ�¾I"máÄß­tè¼]è[ÛÆïcú«9.ø%E/û¹!ÞÚ¿ÓÕøcl‘ëAµ¡MSnöim/sÜ&kšrjù›,÷ë¸^ë˜ë*—XLÏ!ãÓwÐóÕzÆÚiê²Y\dºlÖN›IÏ ¯Ff‚ës‡ÍF1mÞó~Ï}'ù‹˜Üuu§é¢ë7µuÜ’#û§ä ¹ÑÿXŸØÂ‹�LÙäî»DŒ`5Æn¾zYõÜäÜÖÛÆt«/t߸I[»4ei¶»¨1úõÖ‡Þotµ¦½ï+¿¿î;ü«ûßUDÛº­×ë_ãa?ŸÈÞõ*ë±õ¬ãqÒg N]Ž¶ÛØÍŸã\ çãzö~¿¶|¹Û^BßÖÃI­q7÷-]gêjàƒÆ†MöôB›>ãKæàÇnÿtÛ'äÎã>†´•ës—í3«XÊ·ùÎßÔO8èçÆzÄv·Ö#ü.�ì!.lx}=&¯íš|îoMoÛõ°oó|·ñ¶6q¿ËÔx›/sVzÞ|œ¯ír°ëM}Ѿ”žš<WX·OšóiY»Ïw\BH>ÊÞ‹ß÷ëg�>r7:d—í3o<ÚxøðéóÊšì+‚»þa¥5¹ª’ërŒãŸòáè¦.8|ŽŒý{ê\àŠ¦“®¿t…3Ê?âEͧ}­xè±õ¾˜§N^ç7utÀêçâ§­¹NßÞáàæGÍ·º½¾¿½^î×Ó:~e·Ú%^ùr�Ó—Œÿ´^oé‰�8ýjº9—«yüæ‹ç{þñ›w­Š£4ϼ„ÚJHyÚÁåP|9; É- T•ÇKû¼ªòØ +ŽÅË}oX/&òrŸ-‘j!¾®B÷YWÕŒKâ�·yǵ(ù÷_}õî�ª(·ØJ¾ôÔ}Û‚‚JÕW#<9aM U¹côjžι |êá·/† ýúýþî¶É#Ž’Lt`ú…Ü,œ](.›¥˜å$-PŸHŸr ØÎÌZ*�¤Èív°›tgŸŸ�Exyɱúôbâ^ñµŸœØ“ÜXBuÁ~âáH¾ïy½fÝêH¯œæ²wªÆ{�Ã}±_Ǭm»{l}ÄET½;d#5öý΋(‚UStÞvÞm÷ˆ=“RÞÑÝ®�U˜<ÓRåîñ«I›eŸpúÔn l,Ï�Á;ÕgœþÎ>?æ8ì§ðý$÷?íûô°ýåûúüÁ)ŸÉŠö¾ËWg"ãÚݾ;Ž.äq_Sòõ™)uV§œ?ÕyÑš‹ö¼ñxî3t¶å´ñ{ºªw÷rµ\‡&ýP'¼ôüè촂ÿ¬uå÷cß<‹êúîùòƒÒ£:Óêü5ŸÛƘýßöì)G–³k…¯;{:Žó²³'lOÉAs-¯;{:ŽýË:{’öë¿®åFMnÆ!íÎ�zý¡ãO˶µE5¶_kƒ·?G²âŸ^p>tSoáZoÿçH·e|ÝÙÐM�ѝý_�#míßä|覞òµžž;GjçBÛµ‡¬á{z£ó¢WâÁØ�§®<ÿ7õqÀèŸÿÒó1þº³¡[zª,ÿùŸ!=¯Çן UN×~ó‚³!y¬(¸*Ï5Ü}6tgŸŸMi_KjùÿÖÙÐ~Ÿälè›í¹¡!Et¡=ï™H=†4,÷l“g u|h©ßÜpxÆe_ëcHyaP(g-Õ,ÏØ™•~Zó!�Ým¯#lû¡ï±åæ>8rýmìJn9XR1VWºy¸ŠÓD‡\©Í·åQ-Õ>:ÆïجäÙíÁu½b]××fûxJíÙP×Þ@©,ÎË „ÎIŠy.û,Ï£ +캙\S¬;?ѳ½véãhµ½‰‰äå ò`îúš&u±µÿØ üe /©~í­)ÔÈÅ÷‹I~T×®§A J¨:¨±·áa'ƒ$÷oˆŸSšaÌÁWV“§ÆWbéŽÄ£]íí Òåd¶ÛF‹ÃRy´*³k횟¢LWe(Þ ]Ô©N–W©©¡Ð¿îÉr`0lMEù�?/§È#'¹Ý³{l'VPì®§‰A�;È…¦¿Lj.]UÍN“gnåÿ*â  +ò´/އKÉsóójN"±9È{%iz¨Ã–çÙV©Ëå<|VëË2Ú èŽÖCc;ªR™¢çÚÅ�à±'»áuƒ,Öõ3°R© �é&9W~Ü‘§œq„j¤1YrÊÝãw’ÓÀÎGMÎÃâN^‚0äã*ŸïÄKÛØøš,®_ú$“ìiìvs2Eœ‚&yÂèc#÷hè$/vë_g�Y;îåô÷SÛæ|ˆ^’㜼ÓGgYîüo´ù¿ÿ8ñùýfóu÷4ÐÂlÝ‘õN&o€+w’å�p�8ÂF=+ØŸdWfÛØ½aìãÞ+¼æÙ�&°÷–n ¨\MŒS‡Šì‡ëz”fâ âåJ‹#‘ù±¶™özúâ0M�×t©p¡—ƒË2yanÉg5$®¤éÜÒÁe¯:âBŠK5a�’íćԓ Õ‹ü¬Md.u¡Ò¹ “Çs›ÕCwZ[…j‚8è =0;=iÝÉcýêðúÑvßDN=„: }P5u,L¨ðljh—i9öœÐþÚƒwjhŒTì…‘äÌИ©ï.´�*j™Ý¶QOÊ�¶›´o.@£N#æ.SÚºuµ´SKyä“úw­é¨­2”µUÒ¡­ŒÛw¼‘-…‘EíÎy®ŽfË‘Kƒ–tïAåÙ2tÚqnÞÏÝwÛ³ZOAÒÌLiv‹‡–¯Â¿×ÄŽù8‚Õªÿ´“WækW°Q³ËÁ‡ö&]*)CX^†–¹¨£‘÷yí[?ôL0ÇÂ!PvòNd[„G0êó 5T_²Ý­’¹¤—)àÉ÷ט�¸öRÌvÿB;—YJEyn�¤·È«û2=ñ0 ÷ßÝJûùQ–Y +endstream +endobj +774 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 773 0 R +/Resources 4 0 R +/Annots [ 775 0 R 776 0 R 777 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +775 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 488.554475 101.433071 469.804475 ] +/BS << +/W 0 +>> +/Dest (cb185-1) +>> +endobj +776 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 427.607453 101.433071 408.857453 ] +/BS << +/W 0 +>> +/Dest (cb186-1) +>> +endobj +777 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 115.110432 101.433071 96.360432 ] +/BS << +/W 0 +>> +/Dest (cb188-1) +>> +endobj +778 0 obj +<< +/Filter /FlateDecode +/Length 3943 +>> +stream +xœå\[‹,Ç ~Ÿ_1ÏWªJª˜€I !†B0y8{Â:àä!?ŸªëÖÓšÙÙõÚœ$»Ìî´T•JúJÒt�;[ü~îð'³39—ù|ùþôÃÉš,~j‹ÝEe…W +gg9™àJÌáü½(™T‚Oñü|Ÿ«ËµùóéOŸ�þ±ïãÎÞ”½ ç~',&“rJ6(¬–u¤°B0)ùVtK,EcAŒ�Øó‘• —4Ä`ï³Âʃ89:² +ÄðɱƂ®„¤°œ…Î[«ò ˆe&¯ð\0J�Ï;sñEå%ð\ò�ÈÄÄ.8�WLŒ1d�Ç�%ë4^€,Á1[�Y˜rÒx²P$«ò ‹Ï‰4^‚,Ú) +/CXWVy�ÅFë4^!JfVy<›S>ò¼ &d"«ñœ3¶I*…MŠIáyÈm(*²²^ãdaüj<àD ”³â­^¼›,9� ‹÷‰UdÁækà#d±)j2‚Kø” ÏøL†3g |.†S" | †cI�uày§YÈ8jH@²0` ÚÉ ÜõÁz ¸ëÙG `(øcÕh¸  z8Y°à¼Ï“†Ìx„%à®+8þŸZ—KÔ° w]Æö©¼b\‚Æ¿…–�‹±hX€»8¨HÂÜ|f €ñ'ª×° wá¤ÖxÀ]ç‹Õ° w7 `Æ!аç›q¦«òб%g p°ä5,À)ll’¨¼d`HNÀ±±ˆC5,ˆÀ]ïEÂܵ�HÂܵŒ°GåAÊ^ÃÄ5àÁmŸF°j¬Rh<à®uØa�ܵ6 "pWŽM b‚Ï@@ƒ(ØkX3›’RÔ°  B>• ®ƒ†É‚Y*²pb X›B%kX�ï®ÐuÞG÷þÁ>ï$ë¢#€Ѓ,¿B¯�õy½.ó>¬×Çú¼»¬1ɶ”Gœê¥ÆïèTG°ýÕ‡¢Ší�x^¶G«GŒ€ÃãÃ÷§_üù7_þê·¿ÇÂ?<�¾þG[²µ8",_ð>In:‚ÅàñÊsÙxü‘Ë·¿üËùÃïN¿þP×Nô².Äî¥6ט*p%ê\ÔõÊ.oÚÒ¦$,É´b¨x Öp#͆]kŽû¬›Ç¥£0 *eì«·U‘øÓ—_~øãT¤|2Áá—Ÿ»/DYÛQ^¥ÇFçFOø_Õxsb� !!­Šåjb™K6HÆ e³Í]ç{ÚËÁ+ï»Ö>ïyܯŸö×UÖ/öë~®o3ŽÖG Ä5Þe‘Í.cwó&|Ór�TÍ,2ê¦ ³ ßàE"­H·™/7s-QØ®ClfþTW´é~Nê¥.\¤s5iÝÙ&ïRé,ŸÝÀ:�¼½kóöù1Hñ“Ø>d¹cûöc{ÑbûÍV„&v2l&-tÚÛî°¹xuíVŸ¹¶hÔ.ò�ËÅ’òˆrêܯûÚ©½Â²÷íº®�§·Ê¼ö›~M™G?»o_½ûrðâU&)¬í¼XG‚éÝë8‘¤ +!ŸtDZm]›žª®îÈAR8Óå°s-;}\æÁ«È&ŸxFËz”±«½^6;©r¶õÖ1Ýf#}�kÛïš.šLÝ®†-Ü*ïÚŸ] &6û_lV±ãm¿»]v9îê6\¯Ÿ[0³Î·aG›/ÞÒs›}ú8ñÏˤ}tC‚$±YÿÒz®×ÿ´ñnÉSûøe¯ûß�§nžu=;·ÚÈ]ݦkÝÞ´¥n#vñS7Oà.g¥©˜µâUÓ[|¥=½`ÇÞB‹™º-ܱÇït[Šr}W_å ¯¸Å@a‰Jê:S‹Ýnð·íözdï­Ç¹9‡ãfËV“·vuNwôõnƒÝGŸ¸é¾ò?¶6a“éžžØôäš­/gÁµ M<¸±ÿ‹žª<¯p:´ÿvŽÓõ7ÎÅîX�çÃaú§í?I¿ùµkèÛ….}07µØa‹Ï÷g^•uøã]]ðývÌ`м=ž' y’»yŽóU}tÝÅé‹×¶:v-:½eßݯÃz§©§ŸÂÇî•n¯wõ~T×®·ƒF‹PePCo96„Ç>)¤ËI!~nûÐŒÍüe×äAŒ�˜»!ñhWz;…t9©íÚhaìT­òìZºæ§(ÓÔ)Å+´Ë’T'ùv‚ÅG,õ·{²äŠc¯m^ìÆˆ—Sàቓü| +Ii&VØÐMo%Ò2î g;íeRSkvšÜÆ.7¨ƒ*ÈSß8&%�¢Ì«9‰øæ ï•´Òã@Ö4à8Ͷ‹º\JÃfW}¹l•öº£õÐØŽº¨l¡§ÒÅ�à±'»auƒ,Öõ3°r%Ú.¦›ä0LùyGžr†áªÁŽÉ¢[Ì=Œq'9ì|^Éi츓犆¼cÜÅæ;ñR6¾&‹éç>É${;N»9ÙBœ‚&yÂès%woè$ß•ÐßN'ÓNÜËéo§zÌy +^>†ˆää1Ù5Êrç£Íïðúû‰ÏèÏel縷-üÀÖy=ÉäKòƒdù’…Nn³=/°?É.϶¡[Ã8ǽ_ðšgw;�½·tAÝà®Ä0u¸�ý0]ïhÑL¸C¼\iq2?voæ�½]R_¦!y¢§K…‹u9¸Ì“GóH>/CâJšÎ#\öKG\¬ƒâr™°LÉvbŠA®“ Õ‹ü¼nÉ\ËÅFÈ%MÏcvºÓê*–&�i½Xf·NZvò(B¿Ù½~ô¾7‘c÷¡hÔç•:&Ôx:•êeÜ_Ž3‡ê'RÝy§†ÆX´ø� gºÆ -xw±ÚèBͳ[kÖI¹Óv“öƒbÀh¶Óƈ©Ë[·®–ºâ¬j)�˜bRÿ¶j:¬»2”Ö]‰‡¶2n?ñF´D# +«9§¹:;[ŽX2+´¸öTž-©ÓŽsó~î~Úž—eð$ÎÈÔÎnáÐòMø÷ßQˆÑZõßZ qy>Ɉƒš]"OõË©lŽÂòý‰óRyuŸûµ’cE¤×JÖ™°†‰lrò5cºÏ`”—ËPý+ÈônŪKz�n>ª?¾T¿g¦~œ\ Bã2Iª(_+Eôfù6ŒdõÇ™jˆë'©k ¥þþY¨¡· +endstream +endobj +779 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 778 0 R +/Resources 4 0 R +/Annots [ 780 0 R 781 0 R 782 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +780 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 770.673057 101.433071 751.923057 ] +/BS << +/W 0 +>> +/Dest (cb189-1) +>> +endobj +781 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 458.176036 101.433071 439.426036 ] +/BS << +/W 0 +>> +/Dest (cb191-1) +>> +endobj +782 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 397.229014 101.433071 378.479014 ] +/BS << +/W 0 +>> +/Dest (cb192-1) +>> +endobj +783 0 obj +<< +/Filter /FlateDecode +/Length 4574 +>> +stream +xœå\[‹,É�~¯_Qφ ÇEq30ï‚� g1Ëà‡ÓuN�Yz ã}Ø¿ïO‘qËLUVvOϸaOÓ§+¥¸(Ò’2+ÍUãçƒÿ•RŽ�®·/?]´Š^ã_i±º(ì¿à7ú«Ñ•79$ý‘ .ª˜½�áúrÁ›Ë¹ùË寿¹ücÝÇ\­Ê9Xã¯ÿüÊ,r*¦µX,mœÀò^Åh}XÁ(,1g‰1|$K{V„”“—Xƒ¬M+A GѸ=+C  I,ˆa²�ËhÈa¬Ö"‚h"gžñ*@éAâY£BÊ6‹¼ž‰Vâ9§B$ã�ÄË*„à“Ä#Èâ³6ÏCoˆ´Äƒ,äR”x²¸à´Èƒ,6E'ñ"d±ÐNx ²Àº’ȃ,:h#ñ²S>'"‘—ÁÓ)¦=Ïj¯|rNK‘—•‰Ð¸à·Ð²2!d 6%,‘ 6IX¢`+aAH¤rŒA‚�5xùD^P¸öD ‚d‰<ÈB‘$,@`­²ËI‚h!‹³V‚h! B ¨l}‹éd�¹ˆùADŠÉTÊDD��A«/X•"àZä%ðL”° FR8Š�„È¥T‚ÓKX€W.IX1À3$aAÌ�®"aŽ"•,"s‰g ‚l é‚gŒ„ÉBDƒ$›�e-aNhä’PµÄ#Íyf’° QP*JX7A¦ ¤y�0!aö‡“m/a’$›HsDdqž$,HÉrº™$,H ²Xm%,€mr¾%,Ȳ â“° ë 8L–°0žÖd“�oZ’°~Éùf’° ;�|)žà·ÙÎ7£„™ ‹Gˆ"ò ‚¦,ø-0 ù&ÐIâÈb3IX�Cà|3IX€0ù&"z±$�8ߌb¹¸ë3�Iâw™ p�|‘­”Ûk¯�ˆÏdfâŒ3‰ èõ8[Å’�öâ´ŠbÍ@|9G‹™e +bÕÇ*˜F‹e üEX@È÷†.,BÌCDP¬%71Û|íÌZ`ÈË„2e]4O‹<Á`£\%}m—w’t(È`“p +#r;¯Ô“}Þ]«ó¼gÕz²Ï»Ëм +ùSršÖóŠB>jüP:Çÿ®û6ß#¸ uÞÓu®Ïû»Ô4ïiŸ:×çÝ�Š“Œ”tίpª“}Þ]¯ó¼gõz²Ï»ËáÌ8ïyŠi^„ ’��¿¯S�y óšäE¤WNöl§wÚõµ\Ab”äâ?"#Äþ˜^�Ëáÿ$ò+»¼‡ he9 hå²åð1‘ÎH‡V�ÿé‚HªN¿Ü¤ë—ÆùnAtlõõÓ�—ßþù¯ß}÷é¿0í§çË÷¿CŒmµ&ÿí7Ÿé¶üõf¡{W¯þþíúé�ó!TÔ™ë(ëùx +�l#jBHoÃrM_ëЩNÝDh×Ïëk›ø4b(Ö@¨¢„ë|bó\ eÑÿýßýþ?ÿ4m‰gÆè‘Í£/R±tÞ. +`i™GŸ!ý—oÛÜ+“0\ Ïo¹Ö<•éÐŒNöy“ýæÃ7Õ¢‰È©_m?*�¶›xwb‹”?f�CÞLÜ ‰·'OcÖ¹Ë|Ïk9hæ½Åà~·^‡·c}‹yÔ>l"¦òn“lzûÆË%ƒ¼ËÊÆ ÃõOì�,-K·0Uƒf-9¿\ûP ý¹¬hÑý˜Ôò�žÌ%Õͤegï½E–Ý Ø„ŽÁ‡F²ÏÏAû_Âö-²ÆÛן믛l¿Ú +ÓØNºÍĉîÖ¶Ûm.l®ÍºŸ³ËÎòç_mnÑnùèIwýr²b›H®ëeÑŠMdŸÁoóQþœ†œ¶Ë±–¯ù¯¯^ÖÄÖÿÔ°fÀùŠžÆAÄ¿}¼8Æ*}u=ÌäÛºz™ÝÈdÆØÝ oûv¦ŽYŽ›ç¥}‘¡µ×Õ[íf�ÍcO¨®5©ûû¦ ¿¬ �Øf2cõ‹m­gƒxM£a¬xÖrkW4ìÆgýÔÛIÛv’…6ØuÛaÔ¼F²œ6N%ãÜÀ®yœà¸hÊ7æ÷ã,žQå e�GrÄtO=ÖRvœ¦]®�… ? 4!—Æ.Þp[Nœ"g]ïb¥Ëþê*{iûµê¢Yõóz¿èN�SxíºöÑÏ•.K‹w ÏÚõí¶Ñl§Éq¨Û¼]¿G^ºÈ>n…¶óÈ…n7^èvXõ÷ò7ý.ÑGµµ4­Õ®uâýFO´È°øÈ‚x�÷öHWd¶ºê{«'ÿ2#.(ë¾ µu œ˜1¢®?¼ÒØ_·_uy[ä>²£…Õ1¸m‰y­·aÝÿØÿí¡ÞœhcÂXKäx=¼‡Gë1¦Éƒ_ªû®…1iiWæ4{íöe¦} :ÏSå®mü2þÊÍ£¸Ù÷"ß¡®¼¤«-þ¯öÒS‘çó_ýäÃiÒ·ŸÎ¢æX‡Ïú%îµÏËßâ· Aw«cåéÊ«“� Ÿi|1VÛÏ möç"WÅ첆vR7Ÿ-‘á®vØ}»Ftñ¿ÎGǾLµç¢Ó¦ÿ0üyk_þ6�á‡ßJ>Ò°¡­±ó«N�ñžöxÿŽxÒ16ßhþãŸÆ~x7éóËñzû¾4L¬kmüy¯üÆšŸŸÿHo~‡ý÷õÿX�Ç8v(‡§�Rqå^.‰vÊ„RX=]‡;ÙçÃP|F›`æW*À­'ü7Uà@É@¤_´Ç�0‘-uäÓ¸“}>Œ~�p”ýÚ¸õÄÿ�*pÑ~ˆ&æ_³·žô¨‘¿Vö:~)=0ú“}>ZŽq;°}®€™°ÄÕm¯ßRë67Õ*š 5»\bݵ¶JœqcÞm•n_q’+p;›�|yĉ{?XâÅÚg3Gcj¿Ä�•×klã´8wgy!6+²ÚðÕ6<ªýžìóA,oˆÍ_î¹oy; ëµ…ZÞ›­ó}j¶"Òñã�H×Q,Ž\ ç' évõåHåìS4› �P.QjvCòñMƒG¶v²Ï±µŽr)Ø#[+ðmÉd‹ÆÝþzKka^ÏŒo ÙšU1­üÞÆõ¶ �Q®[Æâ7¶-Øj©røú÷©þ �í¶\^™ãŽ%D×Ï.Çš§ÌÏ[¹>ĆØ)ÆzMƒ_êߊ&¶Ö(MûýRÿ†ú9Œ¶o�Ãæ»'4Åý,yw;úY÷ys¶¹©Ít&Ùí˜Ï2­îàÜAÃ6n#ß?;KB¤G½pgy¹ã‰hf�,?({lyçú|4Ë+]ß·¼­54m–là5;aÖý·»±²²f5Û¹Ÿ¦~ÛÌçË&Û9ˆ‚Ú™ÝåŒëu§úœuºC\<²ÎG»ÐO5#Œ³±èå¾Ã›žÏÏÕóñ<ÅôúK5÷­ôaÞ»Å͆y~OßylÚŒ÷ ?È#þòü…§”Ê—wŽ-ò\Ÿg‘Ç1[;é¶šä]_Uiô´£�îþü;ª-¯±„³ëœóœ-¾÷õßÉŒ·Wôâ†å}ÞÞ¹ÙYìˆ)ðW§`� +ˆ'û|8‹=Ž-ûζ]ùºÇ¡¾£nm5½�¿c]aŒ±;Í…ø±ãäÓ>Μ­‰-a[Oé(ÄŒ´Áì>·ðÄÕª=M´¼—yŽ–{Õ÷Σ;V8ÅŒg3œ“}>šý Ðü@ǵhí¸u›9[ùq6·9PÜ–ÿŒp\ÏG~ë—…µo‚^)p5ÏS¿'AG~/G7g»¿­ÕšU’þ—úŵè±ÛÞ¸ò…ã §ïÁu»}Øä�™î¿5מ鿚Í3ôëZ†ä7V¹t-� Fþ’§XÓµþ1=P²m>£k^b[5¬>¡Q¶·œcº?uѶ¿Õ^ú�Öš…Úþ„™÷‚Þ=uSæ«Oäô;þi3~»“?ɳzê#×*AYÃnÛ~º„òådS^P¡CRÆò¬®�—ƒb¾ò¢“vdÚ6™¢Xs½Ó³¼÷ë§Þª¾ +LóÛAø›áË{¦‹Úþ§²Á?^L&Åú/�6–×öèBN¶] òË…ïþ’@&ÏG> 3±~Ô},2ýqËF»]Ê÷ê¶-�Wº~ÏdrYoùÈ7Gߺñ×iI·F®|¡t™X ¢g0{2¯^+SÉüꫤ\½ +]šÌ Žin;’�ÓÑï‰zšn�-5y ¿*¡«. b}V�™¶¿µµqÚÎ#âí‚iÝ–ú"Rù…;m¨¦]«;ÍMBåNõ­eßêû$�n�ø�nC6³ó§]ã×,ÄÔ ‰z»ÜÚ ¤ÛElWGó}§bo•F×Ü4?D¦îRW¼@»MÏ-G~—ßä#Úµ�k2? +Û÷Z§ÉnìŽx»xêž8È/…Ö~`…öÍôf¢›Æí䤇½ jLMUü$A¥ñ—¾ùÿ*|§2ò”†ºIñ‹ÆÕ˜„}³“×Jšé¡£I0GÛI]&Æn³³¾LÒB{ÝÞºklE�T6Ñcnâ1HuðX“M·ºNfkúéX9uÓ ²ï¦ü²"9}wU¯ûdÁLæîû¸ƒ:v¾ÌäØwÜð[8º¼}ÜÉæñV6Ú’ÙôS›d�­î§Ý˜l"Á +ƒ<`ô¥�›·vtâ7 ¶�Ãɤ÷vùû¥sÖyËO¸gø¥Rs”e®ÿ‡6Äïÿ\èúçöƒåGlßæ·[Wäù$ãW¦“d~%a#v·™ˆ–&Ød“F[߬¡ŸãÖNxM£»ÀÞZšŽ ¦sg¢:œÈ¶›®5nÒŒ? Þ6Zì�ÌÏÝ›q`/—®-Ó8~ÿE“ +órp™Ï�#ù: ‰+n:ŽtpÉNq1ŠËiÂ<$[‰É9OÒUÏòÓ¼Žçš.¦0‚/ÝàÑ8fç¡­¬bj‚ØÍóÀdæIóJAè7»×ÏÞ÷*rhÀÔí�ú2Sû˜ÚO¦ºrÖ—ýÌqåa§æ¼CC},7ùžëAÎp�ZÐêb¶Ñ‰šF·ÚÀÏ“R£­&mE‡ Ðt£õc“)ÔnM-eÅIÔRì1Å þ}Ö´Ÿw¥+ÑÏ»vmyÜvâõhÉõÈÏæÇêôhÙcÉ$ÐÂÜ»Si´t�¶Ÿ›Ös·Óö:-ƒ† aD¦ztó»–o¿·øÎÒgSu�ZµŸR 1i¼÷5™è¬+¯rÖ)`ñÛø"¥©4òê>ǵ’}E¤ÕJæ™°ŠœÓÑðK¹e^ÀÈ�ÓPí…Ýr·¬Å%½NB)hÀœÞU‚Ê[YK]³„úeäT‘_Âì8èMüîȨ�üUUj�±¬J(åç_‰X¿ü +endstream +endobj +784 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 783 0 R +/Resources 4 0 R +/Annots [ 785 0 R 786 0 R 787 0 R 788 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +785 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 797.673057 101.433071 778.923057 ] +/BS << +/W 0 +>> +/Dest (cb194-1) +>> +endobj +786 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 736.726036 101.433071 717.976036 ] +/BS << +/W 0 +>> +/Dest (cb195-1) +>> +endobj +787 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 409.229014 101.433071 390.479014 ] +/BS << +/W 0 +>> +/Dest (cb197-1) +>> +endobj +788 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 348.281993 101.433071 329.531993 ] +/BS << +/W 0 +>> +/Dest (cb198-1) +>> +endobj +789 0 obj +<< +/Filter /FlateDecode +/Length 4800 +>> +stream +xœí][‹$Ëq~ï_ÑÏ‚SÊKä ŒàlƒŒk„1~˜m�‘0s G~ðß÷—Yy‰ÊŠ®®ž]Ùmð»Ó‘—¨È/¿ŒÈªÎÕW…Ÿ4þ‰¤—Sðt½ý|ù墖àþ”›‹¢þþwÕŠÂâtòÑ]Ζ�œ þúqÁ?Ó%/þqùã¯.ÿ±­£¯fIÉí®ý)«È.!† œ JP)m•sKÆyAåõ‚[LIRÁ ÈÐ^`¥è$Ì c¢ Š0ÃRÐv¯J0ÃM’ +fèä‚ Ò +vh£”¨ƒ!ŠÈA§Ýâát/éŒ^|L&‰º�FÒY»ø@ÚiI—k’Ž`‹KJK:[œ&R’¶��AÒyØb½U¢¶˜¬¤ °ÅÀ;IÐEØtEQ[”WZÒ%»¸‰D]‚NÅ÷:£Ü⢵JÒi½8`ÓŠ:Ì( ’‚ÎÀ¯\u°ÅYe$�…-„Ižp6Ä(ÌV“g·UVK:[Œ $ê` _bãa‹ +^¢Ì %ó’Ä&„…’!‰L´ EŠ ˜˜ +ÁJ4`’[ȧ ñ€U:£%"° +¶8òX [3WÔÁ›Hâk` +H\`-l1d%.°`[Z$.° [RIK\`Á·¤´—¸À‚pa¦’¸À‚qmô$q�åJIâ εàN‰ ,HÓ=H\`ÁºÖy#q�íZŠ^â Þµ¤•ÄÞµ5El€%.;.VG+q�w­VAâïb‰ 0ª pè%.V£’¸€À»&*’¸€À»&` uaÁ´x×8Ü‚´rƒw�SFâï2^âeÿ(1ï‚BœÀ¬ÄXï¡3Vâ4¶„%8ð®NXþ„9 ¶ZtL^âÞÕÃ'êÒ¢<.Ì[xyÑÞ'‰ x ••¸À�wAŸQâpü‚ÕH\àÀ»Úb¥–tà]m’’¸À�w78‰ ‡E#�¸ëÛ¢ +êÒ¢RŒ8ð.hÉH\€UxQL"ê i‰ @Æ‹B*q�ïbyOxð®rÖJ\àÁ»Šöˆ:Øb£‘¸q t˜¶ÂœF°º(¦�tà]¥1Â’¼«THxðn^6%.ð! L”¸.ˆ‚�Ä>Ò’Bðø¤ CÈ'êü‚k'qAP8P–¨ƒ-HâÖK²)J\ l±ÆH\ lAÈ q"‚%iDßbz[1? Ø‚HQâ0Ù‘ÄÁyäcðª¤óf‰t-ê"t:H\-XеÄÈ¥–ˆI/q~Éá’Ä0:M„[0U$.ÀR´DƒÈ\ÒiØ‚ [âDºÐi-qA4°Ñ ÄÑDd™^I\€¹$\-éHå<3J\É/9T”¸Ó™&˜RÔÁЄÄŸœl;‰ �ü ÙDš#ê`‹u$qAŒ&§›Qâ‚a‹QFâ`3ç›A₤` ">‰ ’òK“%.�C§”ÄIG䛆$.À¼Ìùf”¸ Y…|)ž0o“õ9ß $‚-!Ѝƒ-š’0oÁIÈ7ÁN’ÎÓHâ‚ä}Î7£Ä3�o"¢·bÎ7ƒ¸]Þu Ì$éÀ»ˆL½Ä¸@¾‰ÈVÊíˆ×Äg²2æŒ3Š; +Ôë°¶Š[ +Ü‹Õ*ˆ{ +ä›s$qÓf"³Œ^Ü5À² +¥Vâ¶�ÿ"£'¬»O|‹Êkf ù&¦!ºï9Ç(fï[÷Çþúç˯߰ø^ÿüŸ—÷_•�²ö£ ”Ò„ø +ÓÀ$ ·Cô­qûÖ#Ø6Å4XöTáÜmHÃ, "¬ÛlÙ,,xùÏuÿac+LÍÆ¢62!Ÿ³ÿ¨sàµv î)­Ò`d&¯’ÃÖ§ë<49 &H×þA˶ñ~‡“$[Ÿ®ó�le>ÂäCÒŒó ¿ž«óýýÊú=í×su¾»­@A¢Ñ*Úö+ù¨ð÷�T9m¯“9åûɘ#ä)PvV>hstÂL}²Êw4X-&­el2y‘s#=ƒ¯xáß~¹€ï«룄~ÉÌGØ©±~wýòóå׿ÿã�?~ùg æ—÷Ë¿þ"µþuá7?h\ÓûúÛùõwÖQýL±ê\ýXDtÛ¶Ñʛ܇aõ[_­�¬û©êjrwúÔB;q²ÙŒÏíw³éL_å~”™ïqøâ7ÿvýò»ËßÙ‚¨$h+×!ö6š"ÑÜ�«ò-¸û[À-¥C¸½¯CèLuß4„ÔäJÎV¡ŽÖ[Yw½Z#‰p`âÞêo³…TêRÏn‡·ÿ³I¯�nð-}ÝüÔÿ !ÚÚÏÛÏýñ©×mÖÛ{£©�Þ+’ù¡U˜Í  ”ÇCLž¬ój Ôæ�;qM$È açaµ-Ó=>¡®�2_mï ÕMõͶ~AÁÜ·Û«K MŽÝû¶qÝ' ŽÛÞu‰}Ö[Û�YÕfD±Ûò¶î Ô +ÌOJ•.;$Ç=WçåJ‡¼IIà�0!NZÆÞöåçåÒ”‡x{äÝ«g~z5Ö KyÚËŒTnBÿ&Ôðle3···e6³ÑNegŸÜáÝ»fÁcrÈ…ó*þÁç꼂�ÍÆ7G]Ò8çE6ê4�àûv8¢Ÿuš‚ęˉóÙ=„pTÎ3�ñõmA÷ÜOçþtís—VçâY3ÝGC§¹Ó—‘û:e£�ae6¸‹Ä_Rˆ ÂÍàý#$ž«órH|“>ÅC¾¼3Š?6î !陸ªŒìm;¢}%¥ãÑŸãßM;ÂìÙe„­ÞÛ‡Ný—öÚlþ*´mî pć&£)æ×ƒ!ð\�—CàqL¹Û9qÓïy§ç ž›cK7mzê?Õ<¾¢QÇó±\åiÅGýï°¸+¿ñcyz<êçê¼Ü¨Çj=6Š“W�ò[Ü›y¯yhE…‰k¾i²îëz-érÓætÕ[Ìms«í~eõhÔç}iܤƔӼìÛÚGÞéíújKã(·"Mƒ¿Ôûó÷‘ózÙ~e–ïï�DÙÉ:¯†2{gý_ÝO£t²c¾.vYÖ>[Sm»Õû­{š…ßï É>ÏY'뼚Žc¥ï7oŸD&CØSÈô+šuøÞ¼ó "ï Ê}‚£ÎÕy9TÇ?ŸŸ¯/°"þ ‘ùôª7â¤Ó»´'ë¼¢Žc«×Áÿ…•ùÁÞ}boêd�WC=Ø›b™í&£¾�\m·WÅó¤9ký×5ŠçÏæ¤£ÚfëØ¹ìë8ü¥ÿ´oÇÛü ¶|J¾�rÍ·¾Üó‘6Þ³C�{ɾï÷—Ç¡>Ål˧ex„K> m ßVl;ëý–6ë± ¥ìOÕn`Œ�]Áe{¢˜ª�­�v]ëä,´ÈÙ=mçÄë]ÝŽ“úÙ7;}ëæûók?·Ìf^�û5»ùÄçÒúÌj‹Ûµ¼ÖOø»ùQ1,ëŠc[ýpvíç.Ÿ·Ã¶s>?ôa˜}H0ÑÇÆUö¿­÷w4¶ë“ìj“o+S[•ÆX¹ÊoGúõí�û6j}l£Ö£�ù«C¥‡>¢µÍbŸÞÏ›â·zÝÇ‹ªM_«þ­–qÛ5 èôªkÜßñÁ04æÌ�9Ç|Uúy›¸ÌÕßj´ÃmXñyä§ g?å9góž§«{Ÿïuw)·mÖ£¼·Z~‡ªSU×ö_CÛ�Zׇ̟y÷)ËŠý‰Ù_y´Üëûvžî×à3ëïð™¼ön¹bÝgàK0zû-(eöl’“Tõ–{øÍái=ï—]Ôò¿”þù¢sü¤VدÇoª"Ætu³øã’ÄDcKì�8 ëGÕÛ"ÝwØšìöKšKbjªúqlÃåùº~Ìëé¨ïZµ|,©VÈ–ƒaÖŽ!jz½ç»W‹®â|„m\l½òÝç›Íމ— ŽŠÅÚ*&t{¡bÝ ±¡f�ÎGžu×ù!ì¦s×i6ü­¬ l8�„· ºµ³ôC”æƒ3[SÍ»ˆ°›Ì2£R—ºV²õqD·‹ üAµ¦ ƒÙõlÔòñc«06 Q/—Z9At»ˆåjk®�Tè¥â¨ššç‡)ê9K¾/»±­ê�ÏäfsDÙöq+λ¨}¬Ud¸1;áíâ¨ÏÄ!þ¸¸ ”vƒ+”kÐãBËÚíâ¨^†4Å`ý„©Ùdùð¦üïJ®K3ó”š:¤òlãjt’çfo�Äå¾³IÐFYæ.BÇ,÷—ŽJ(ŸI·—îÛH™Ë˜<¤f^&©N[±î¨ëâLaÍ?�+¹P5#ÐÝ»å��xØéúTuªwæ5ƒ»ëí±ïÜùÁÅ¡�¸Î§éu{{» óMx+ Íâ ýØ:b£új7:cÂaHaˆ�~q›­��ÊwDëÇ1ɤ÷vùË¥,sÆ:““:ou>–GYúú_(ó;üý÷ ]ßN#[×q£:[˜Î­1_ÉòQâñ¤8-Þ„}Ú0¡!FûC¬ã(ëú:n ãkÕÕ öVRwÕ]Ë…nø�‰M‡®Ñ–yÆo“{ ó­c3ìõÒ¶›C76Ÿc׬¿\Æ¡³cI¾²&q•‹Ž%Z2¬".x£¸d¦aÙÆÌ HÞIw}¶ŸøPØÜ»`aD¾´CGc™åM7Y¹ V!°å¼aÒ¼Ó´±G0úÓÓë›Ç½šìÛ ÈÒNí]úÁ¥ýƲ´ž,µåÒo/ûšcK~ß&ïðPo˲¹g{�3¦Æ-hsÁ1ʤqT«lÓi[(:]@¦š¬·šM¾Vkn)wE/…S é_¸§•îDÇGÅïÊævۊף%Û ÇáÆÝ©Q²Ç’Q�y^»Ki”´M¶ï›¶}·ÕöÊnƒ†!~D¦jTs»’Ÿâ¿ÏÌ�µÎ´ë •j?e'DÇq~'jÒÁ[þK½‡P>U;Pd[#O×9Þ+Ù½Þ†c!kUÐù?בMø€"=V°¦Ú¼#WKJ¼¥ç l šS»� ò¿+”͹²!Ô/CNó¦bsÐóðAiù½$ªÃf ¥üü7� +)à +endstream +endobj +790 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 789 0 R +/Resources 4 0 R +/Annots [ 791 0 R 792 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +791 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 228.873057 101.433071 210.123057 ] +/BS << +/W 0 +>> +/Dest (cb201-1) +>> +endobj +792 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 167.926036 101.433071 149.176036 ] +/BS << +/W 0 +>> +/Dest (cb202-1) +>> +endobj +793 0 obj +<< +/Filter /FlateDecode +/Length 4069 +>> +stream +xœÝ\K�$Ém¾×¯¨³€ E/`!`Èdè`` ÁXø0[»#Áè5°òÁß#ã•™¬êêžyåiôt%ƒüHFf–»Zü|ãð_fgr.)òõöóå—‹5)Xü«-v•ý¯øMáê,'\‰9\%“Jð)^_.øïp¹6¹üù7—ÿÚ÷qWoJ‰Þ…ëß~“I9%VË:RX!˜”|ˆ ++:ƒ%–¢± FHìùÌJƒK b°÷YaeˆAœ�YbøäXcA WBRXÎBç­UyÄ2“Wx.˜¥G�ç�‰¹ø¢òx.y�GdbbœÆ+&ƲÆcÈŠu/@–à˜­Æƒ,L9i¼Y(’Uy�ÅçD/Aí…—! ¬+«<Èb£u¯� %3«¼žÍ)ŸyÞ2‘ÕxΙÛ$•�Â&ŤðÃ)‘¾ñ$ È:ð¼Ó€€,d 5$ Yž«ò Ö°€X¯aw=û¨a Ŭš w!AO VÃÄ{ð Š�FÒd ãàY«aAqõ¦g à—Rof +YÔ›(ñ¿-¥ÞL†,)ŠÊƒ,HšŠâ·À$Ô›@'�!‹/¬aA‰QêͬaÒ Ô›ÈèÕ#�,õfR� €»¡™4p™iÔ°¨7‘Ùjµ½ð†„üLgf©8³zb`½±U=2°À^D«¤žX€¯ÔHê¡ÄDe™£zj€° +¦³ê±�þ"ã&l§OëU„9$ÄÌœd‘nÁÈîGÍ1›Ñ�fÛùØßþrùíGßë_þûòé7õ¤¬ÿ8?q”ÂZj-9vÁ~¯L�Qa"Ùö€DBøž>"D*SHXl‡n"$B1Âm¹Žn/2$™’™º2ÞÍ‹RÁa¯(ª²¾¹Ï’uꈑŸ!%Böö¼^ŸìóÅõºÎû¬^ŸìóÅe ÀtF-ky?¯*äk�_•Žäßõüá,äÙç~ÿá‚üÝÛq`ýͼ\6=D$çóõÃÏ—ßþû?}÷ûþ¨áçË÷ß"Ñ[[LQåHKÚòOOh|½÷žÌñiã÷ùkß.CÚúH›Ú?îå¨ã­òÿÇõßÒ[Yõö}_–ˆóq™Þ6ÑÜG–X§mâV5Ä©‚U5Á/mÒ6~»«Ëþ€­àý’{¿®Âª´gûö»m‘±­.®Ëëe$ˆ0m]ºzeŽM•2žûñîøJLJaqîUÕß=Œþ k)Ýžêê„ãuÜfÕ–iÑÓ��×Ëýºãb·ËÕ/\³ËemÕ·xÑ÷“㿦×÷ãÔ#�‘§ƒÎ¶ÜÉîboÏþð¡&ô4«9¹Y«¹¡îe$€.›šصxkŸwU*-÷7^ŽV±^CÅËQ”5Á–Œ²ãXpŸuS͸t†¼òÊokEð§?÷݇[*ÙîV ð­W-ìÐ)“¾;a‰Æ¹)q˜°§cêÊ–Zlæ°¯.† ýúÓþ¡¼É€MÕ‘è@µ ¶rÞˆ½�j¤IuÔ;‰Þ=b9¢+µ"”;×1p=q|h@OöùÕËQ¿KÙÅ7÷:ˆ�›xwb/WlA^¿ŸxR�ç}Ì^ÊúÅhn{£Úò¤wÜ·ûuŒ:l˜Gë#&ÒkÂÛ"›]Æ~ƒñf8“Ël½n¼-*„ž=-ÈÜQ[¯òÎU”<6QäåaÒº³wŒ^îw&†Ð)†øŠÑ?ÙçsNP¾†í8èÛ·Û/-¶¿ž¸ÅfÒB§½í›‹‡k·ï'yµ<çï6·j·Oœ¨Èíôz—¬<õÔókGuúÐQ?Í9{ÞÕ�«FÛ²ä*=�=Ö#ï=;r¹º×>£ò²ªüûÝ®Î儉ì²B·×lÍþ$«{x²}‘ÃÐ/Þw²t§Zz«òF`æ ïFܳÃ]õðPÞîÉk'v¾ïê<öfÁçãï„á¡NóqÝ_þ4BóW{ÂðHWÉuuï$BhÁϽ¨óž�è­(dßqzðp=þ¸ž¯{ÊÐdûÕž<Ô¿¶÷_ö”aÚý¯ÿôà¡ÞN¸úsÊ�å)轭ǶÞ|X[°ãô.Ðâ[m®q"Þñj±M‘YtÕówñ'Ÿû'Ž|iìXïBÔþͶz»ÃÃÊò&Í.ƒRóÔÛß)GÍËN-ycÝÅž-¹ã×¾géhiï緹ߠå|ÔòðÓ2ýv‹ÓMª®¡î¯K¥°[Ý�8ii短mÇ÷5ÌËÊNt[c¦ãÜÏkuëA+_ö^p¡"Ï~vÆ~§£Ýs÷‚K +÷äøìLü<öÓ÷%ÿ_Ü .å¸þ½åncv}�µ„M>â–‰ïõ®‘ÀÝó¢W"Þ.˜–ŽÔ•*¯ ö¡ºv½4Z„*ƒz˱!<öI!Ý. +ñÛ‡flæà/»&/rlÄÜ ‰G»ÒÛ)¤ÛEm×F c§Òh•g×Ò5?E™¦Ny(^¡Ý–Ì5É·,>b©Ü“%!{mób7þD¼]Oœä—KHJë0±Â†nz+‘–q9Ûi/“šrW\³Óä1xùƒŠ0¨‚<õƒãaRò*˼š“ˆoò^I+=ÔaMŽÓl»¨Ë¥4lvÕ—ËVi/ ;Z�í¨‹Êz*]<©{²V7Èa]?+W¢íB`ºIÔ_vä)g®ì˜,ºÅÜÃw’ãÀΗ•œÆŽ;y/iÈ;Æ]l¾o5°ñ‘,¦Ÿû$“ìíˆvs²…8(Lò„Ñ—JîÞ:ÐI¾k¡œN¦EÜÛ寗æ</Ï Dròšíše¹ëÿ ÍñûŸ¾þ©¿×±ÅqoZø�­;òÉäKò“dù’†Nn³=/°?É.϶¡[ÈãÞ/xͳ»�ÀÞ[º� npWb˜:\È~˜®w´h&< ÞZ‰ÌçîÍ ØÛ%õÅa’7‚ºT¸X—ƒË> +endobj +795 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 582.273057 101.433071 563.523057 ] +/BS << +/W 0 +>> +/Dest (cb204-1) +>> +endobj +796 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 521.326036 101.433071 502.576036 ] +/BS << +/W 0 +>> +/Dest (cb205-1) +>> +endobj +797 0 obj +<< +/Filter /FlateDecode +/Length 4092 +>> +stream +xœå\[‹cÇ~ׯгÁíî®êƒ IÀÁ† !˜<¬e�M˜ ¬ó�¿Ÿ¯Z};:%�fvÖY’´Ò©êKuuõW�#w´øûÜá¿ÌÎä\RäãéÝáýÁš,þÕ›‹Êþ¯ŽÎr2Á•˜Ãñ�(™T‚OñøxÀ—kóÇÃ_?;üsÛǽ)%zŽ¿ý,,&“rJ6(¬–u¤°B0)ùVtK,EcAŒ�Øóž• —4Ä`ï³Âʃ89Ú³ +ÄðɱƂ®„¤°œ…Î[«ò ˆe&¯ð\0J�Ï;sñEå%ð\ò�ÈÄÄ.8�WLŒ1d�Ç�%ë4^€,Á1[�Y˜rÒx²P$«ò ‹Ï‰4^‚,Ú) +/CXWVy�ÅFë4^!JfVy<›SÞó¼ &d"«ñœ3¶I*' +›“Âó�%ÚPTd d½Æ#ÈÂøÓxÀ‰@)gå´z9ÝdÉi¼Y¼O¬ò 6_C!‹MQƒœ #¸¤a€OÉpñ¬�€Ïd8sÖPÀçb8%Ò`À—`8–¤áYžw�…,�£†ä ãäª<ÈB…5, YÐ@Ã"Èâ™4,  -ÃZ4, À-Ûâ4, à-[5, .Ä´—rd � S*0—€�@Ç=iX@@] +ÑkX@€]â5, à.±³0p—=Ud�kXt4ä2iXÀÀ]r6iXÀÀ]#¯avÕÀ£†°ãs¶0p×gË0p×'¸•— Î iXÀÀ]°Ísw}°^ÃîzöQÊþX5îB‚@¬†ð÷àyÒ°ƒ�°DÂÜuîO9Ó@+ãr‰à®ËØ>•WŒKиrn¡eãb,à.iX€»€Ï¬a0ÞÀ£z p×<µÆî:_¬†¸‹¸!hXs0€†ðoÆY˜®Ê+Æ–œ5,À]À’×°^ØØ $QyÉÀ�œ†cc‡jX�»pïEÂܵ�HÂܵŒ°GåAÊ^ÃÄ5àáØ*gÁª±H¡ñ€»Öa‡5p×ÚT4,ˆÀ]q›Ä$Ÿ5,€€Q°×° f6%¥¨aA,<„|*/\ ’!²TdáÄ °6…JÖ° yÈBÞkX� Š�FÂd ãàY«aAqù¦g p.%ß̲È7‘â)ç¶P”|3iXP²„(*² h*ʹ&!ß:i¼Y|a JŒ’of f ßDD¯–²ä›I-wC2i<à."Ó¨a.�o"²Õr{ à ñ™ÎÌ’qfµb`½¾U-X`/¼URkà+9’Z4€˜È,sT«p«`:«– ,ðñï0á\}ZKTæ�à3s’E Ft?rŽÙŒ®4;×Ç~ûåðÅ[8ßã/ÿ:<|V+eýÏÁø‰cM¬qîbñû ¼2u¯.+IŽˆ\Öòv^Uȧ?)É¿ãþÛ/\lóÞ»ùwöyu…®óÞ»ùwöyõC•‘HålKyÆ¡º³Ï«ëu�÷^½ÞÙçõeEÒ Ÿ/S<}¨žjüЇjïȾys@Ävþ¶(7ÇÇxÄ_pÌoÞ¾øÛ¿þæOÆÂß<~øÒZþÙÚ�ñð’÷‡ó;,]ðÛ5øQ!Ÿðj4á³´óx1^|AÚ�ÉçvR ®}Ð? O�ÏEòÜy-ŸG™çÇÆÛÚ„óø]¦ÊsgžÌ!ô:·ñSkçºêu:�Íù«¿ß|{EweÕ]U×¢¦*ÎÛ6\Ÿ2´w;§[Eõõez,ƒÀóàyy8¿“ô‘ï� 2�Ú{j<Ûxø@x÷éÌšg)´ãýí™Vå*‹\§¦Ö0·ÙuYºÜMMCmu[n©H>nuN­ßºE±Ñã¢ùÂò¡ñ›^¿É¼ß®¦Çf»Ùî+f[×\¦Iu³ ?Îý«{ÚõôÓíup¿~¸©+ÚÙS[k§1\ØZ?F÷ÉqŸ^_~üo®3æ‹uŠm†fWõ Èø?�ÇøÃ› +£4S$µžj%ß "qÊ9s6"¼µ+ô>·Ï‹üCC\¬È¢)˜T¼dÕH•lÉðô—0Ì}Ö³jÆ¥£0‚D¤h 'ámEåïþúõ×oþ2QY•ÃWŸ;1‘Óù½š…˜µëˆ÷ó&\�)¤-R_½˜Pæ°­±­>vshcç6w—¡_?l¯Cê2`‡OºêŠ<ËWšØû¨ú"ÍHêA½ðÕß^7 Ÿ‚áRƒ0ù.®Å“›tgŸOÇ€k$—²‹Ï6 Ž�Η›xuboɵ-±\L< Éw_ÓÆls×ù¶rðÊ{‰Á}¹]Gðs}góh}ÄD\ã�Ùì2öýÆ —+5O¶^7Þæ=B`dî¨M+wdO;$õò p‘ïZ.&­;{Åè~Ý€å. X§0¼iôwöù�¸õcØ>I•õºíÛ·íE‹í7[™áâÖžÎ1ÜÖv‡ÍÅ‹kw ø�’ØEþq¹X»hœÝ‹jI®ù^×ωëáõ”ÕY¶2ösÔýþŒ�ú™¿Œ©úÚ¦C¨±G‹!ú¸ÎÎø©ÇÝyT8~¸ ½Û¸ééqC�SNK¼ÚNNO'ê¼'¹n§å5Óªæm]“6œÑbh¯Gï]»ikA£O×pœZ‘+}h®vXà²úuå5Ôÿ±;ÅE¿È¸´¯š>ÝŠÊ8±Ô|,ÑñhbÌ:N$ùÖCî¬Ù�³É€b]÷ 9p~®ÉaçZ6úè…Se“;¬"R x§ýØõ´œìL4Ûz{&Æoçþô¬ìVfq™¼ö`¤ò.íëaIh/‚š]F£Øæy¿o$°gº¿8™~3Öͽ K}mæ¼”±g"Qß›ž1]_ö¿�“O˺×1ïÕIžz¹äÕ~=3rÛùI6òµLêÉý˜¶r..ÜÔmÐtÛ÷Œn ž_Ï?¥ƒ�°G=+Þd�K‘fØòr~n¡xÏ4ûš´½YyÝ£›zM;½^;Ó}-vÁË¥(Tçî}T°ú‚îžy®? Rqí Ôè·W—¢\ßÔWÙéëZõ ó®ñÏûõõ|úÃ[zŠ;ßña…ÅÖþ*†“žS5_P¯C«6 ©ï±U [5q_5¼©Ÿ½¯¸³º¸�þî�(½ÝÉ„|Å„ÄH±™nÍ÷¼Hó.YXîŠK¡ ××e¹]YmŸŸU1½¹G{Ÿó?SYmc=»bzS_{_òIWV“�ò>§²*·È¹X¿E»»²zgŸO¦0–8àchßw}üÊêvÂÿRe:7œDú¨•Õ,ÏBøú çÝ•Õ;û|2”}}ŽÉÛß»²º�øÿ¨²šc–»&Sù=+«ÛIoUVå&ËnÀr8»zoäm£¿¯Ï§VY-6ß²ýß­²Úc§fWÔlÍ·Ýþä+¼rÿ©�K{^…·× >vuw­?&»�ƒŸQ§Që¢OÔRGN³Ù³ ÌI÷WzKZÕýÃfG·é£�Ìš{†°ÕÔëV^qø½Ü´€ÍËJ¯Ê@×j¯°ÚïÛ­­)`¤7,�$D»Ü); ëÉ&O Õþ¾Ú~/ÕÑ]ÜeµuRži§|ô¤’ä6pÕ Äs +»ÞØR�Œ�²¤Z­TÓKc³Z ƒê4zJöp6¡û¡Æe¢Ý•�ê|­D´–7ã÷Ôo‘§«±†Ð×°Û¶÷‡X_põ6 å¼<ã~Œl$ƒOòe¬<ú@ìú6¹ªXw¼Ò³þ2ÀûѪýX€•çåÙ‘ó/ ,­ýûºÁïr—E짯>Øk+9û~1É�IX!3Ï#üYˆí£c±ˆÐi'øÞdÊeK86Û>NØowþ(Ñèìz7¹ážmoDõ–óóÄ +=£Û“eõÖ¸F–‡ã³¡v‡(!v™AœòÚv8;>IvdbØí2Ý${îòÈ�Jýc{.·/uÑWÕ¹eû{[³þ.âé€ié’ú¨Rå‘Ü>T×®·ƒF‹PePCo96„Ç>)¤ÓA!~nûÐŒÍüe×äÁ¦31wCâÑ®ôv +étPÛµÑÂØ©4ZåÙµtÍOQ¦©SŠWh§Åµ&ùµ�åŒXê·dù®mì5bÅi7~G<ñŽüxIi&VØÐMo%Ò2î g;íeRSîªÂÑì4y,Dþ?CETAžúÁñ0)y´k^ÍIälòVI+=ÔaMŽÓl»¨Ë¥4lvÕ—ËVi/ ;Z�m¨‹Êz*]<©[²V7Èa]?+W¢íB`ºIÔ7ä)gG5Ø1Yt‹¹‡1î$Ç���+9�wòœÞ�wŒ»Ø|'žªcãK²˜~î“L²·ÃÛÍÉâ  0ÉF+¹ŸÖ�NòÛ#ýãto¦Ã>_R_¦!yB®K…‹u9¸Ì“GÓ%—!q%M§K—ýÒë ¸\&,S²�˜b�ë$Cõ"?¯[A2×r±„rI“ÇÓÍ®CwZ]ÅÒ!0­ëÀìÖIËFEè¯Þ÷&rì'@¨Úõq¥Ž… užN¥z·—ÃçP­ŽõÃ;54Æ¢åìÑræÑ˜¡o.V]¨yvk Â:)wÚfÒî(\€f;mŒ˜ºL±uëj©+Ϊ–Òˆ)&õ×UÓaÝ•¡Ä°îJܵ•q»ÇÑ�(¬æœæêìl9bɬÐâÚ{Py¶¤NÛÏÍÛ¹»·=.Ëà)Hœ‘©�Ý®å‹ðï%gG}JkÕÿj%Äåùd05»Džê�½Ù#0„å÷:ç¥4òì>·k%ûŠH¯•¬3a; ÙäägûtÁ(O3–¡úOúéÝŠU—ô<\}ÄZd­þnS-mׂиL’*ÊÏ´‘½Y~]&Yý¶^9½(¡Ô¿ÿbN +endstream +endobj +798 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 797 0 R +/Resources 4 0 R +/Annots [ 799 0 R 800 0 R 801 0 R 802 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +799 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 698.673057 101.433071 679.923057 ] +/BS << +/W 0 +>> +/Dest (cb207-1) +>> +endobj +800 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 637.726036 101.433071 618.976036 ] +/BS << +/W 0 +>> +/Dest (cb208-1) +>> +endobj +801 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 295.229014 101.433071 276.479014 ] +/BS << +/W 0 +>> +/Dest (cb210-1) +>> +endobj +802 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 234.281993 101.433071 215.531993 ] +/BS << +/W 0 +>> +/Dest (cb211-1) +>> +endobj +803 0 obj +<< +/Filter /FlateDecode +/Length 4914 +>> +stream +xœí][«$¹‘~¯_QφIëºÁ`ƒwÁ‹ ½˜eÙ‡ÓÕ}lÌÃxöïï*ÝR™•çt/[Os¦*#t IŸ>E(3Uúªðï�ÿEÒKŒ)xºÞ~¾ürQKp +ÿå«‹¬þ#þ‚»jEaq:ùè®?³À†%$g‚¿¾]ð¿érLþvùÓ¯.[çÑW³¤ä�v׿eÙ%Ä”T *¥­ rn Á8/¨¼^ÐÄ”$Ìp� mUfPŠNRÁ 2& +ª3,m·ª3LÐ$©`†N.*­`‡6J‰:¢ˆ¬tÚ-�î%�Ñ‹�É$Q ÓÁH:kH;-éÒâ½wQÒlqIiIç`‹ÓDJÒÁ²1H:[¬·JÔÁƒ•t¶ôNt¶]QÔÁå•–tÉ..E"Q— S1Ä­Î(·¸h­’tZ/Ø´¢3 +ƒäƒ 3°Å+—DlqVIga ៤O8bf«áÙm•Õ’ÎÁc‰:Ø‚Á—ÀxØ¢‚—(3ha^’8À„°P2$‘€‰v¡HQbÓB!X‰Lr ù$°JCg´DVÁG^b«a aæŠ:ØbI\` lA‰ ¬…-†¬ÄlK@‹ÄtK*i‰ ,ø–”öX.ÌTX0®�ž$.° \@)I\`Á¹Ü)q�ébº‰ ,X×:o$.° ]KÑK\`Á»–´’¸€À»Ö"§¨ƒ-°Ä`ÇÅêh%. ð®Õ*H\@à]L##qFu½ÄÀÊbbTx×DEx×,¢.,˜ƒVâï‡&H+7x×8e$. ð®!ã%.Pð�½ð.(ÄÉîlÁJ\€õ:c%.@a‹�["q�ïê„åO˜Ó`«EÇä%.pà]1|¢.-: Ç…y‹^^´÷IâÞÅBe%.pà]Ðg”¸¿`E58ð®¶X©%xW›¤$.pà]ø NâÀaÑp$.Àú¶h芺´¨£Ä¼ Z2`^T“ˆº°HZâ�ñ¢à‡J\àÁ»Xޓļ«œµxð®"¸=¢¶Øh$.€_¦­0§á¬.Ê€)$xWiŒ°¤ï*’ļË˦Ä>°ÀD‰ `à/ØH\à#-)/q�O +:¸|¢Î/¸v�e‰:ØB�$.€c½$›¢ÄÁÀkŒÄÁÀ¸ À#X’†÷-†°pã‚-ð%.“-1I\œG<†^•tÞ,1€®E]„N‰ B K±–¸±Ô1é%.Á/ì.I\3 Ó$qAH°SEâ,EK4ðÌ%�†-p²%.€§ �ÖD[à J\MD”é•ÄX¡K¢«%)Ž3£Ä‘ü®¢Ä˜&ˆ4Á”¢¶€&$.Àøp°í$.@ðƒ`aލƒ-Ö‘Ä17£Ä1£ŒÄÀ&Ç›A₤` <>‰ ’ò »É€Æ¡SJ₤#âMC`^r¼%.HV!ÞDˆ'ÌÛd=Ç›Aâ‚D°ÅÁEu°NSæ-8 ñ&ØIÒyØbI\�¼çx3J\7ñ&�[TpX3càF&L ‚wßbŽžÌî$»ï�ýýÏ—_¿`ñ½þù¿/¯¿Ê;eõŸø-y¬ xÚ'“0Þà«%—Gˆ0ál^€ØBø‘ +ÍL¿NË]ª¿ f»Ò�µ)æ.Ë߇ÑÎò44cè¢Üä×Þ ÜÍu(jÓ[™CWµ!Ž;]UlÎm¡bçë04i¨»´Aë£.å¯ë>=¹ +%U�OE¤!í}’û凜[f §É}àß »pw#Ʊ?€-ßÚiãĸ0‡}g7xä~¹•ÏŠ/uo —½§Ïõ´GëãöhÝë@`¦4·E e–©˜ëÔ[Jhx×Ã8P©çsÑ¿ô9Áåßm:ì'·é']æE˜ð1`èh®±yü·7ÿsÛßÉ<iœ?^�ÆnÅS³G͘=ìŸ õ3•[æ1døóõþi¹�½Ë÷æù�¿^œI´H!)”6Þ�A”­R„?;{˜Tk½wM»ÔÖ5{#LƒlTv8ÿð§Ÿ~úôïÝáÌK…ûÍš¡~»fø0Œl¹öø¼Ân…É/*ñÖüTaõkîˆãïßÖ';ˆóº¢ÇØ1 ïd#î\ž'A\7;¸#ÄýÃ#æ< º|cp—Ã…'Ôý�Æ‚›ý �iIÉÅ § +�Kvc³¨m)xÿ�'ó< :ç�ð˜£JŽk�Ûíõ,«. GŽ5Údâ0%:fYþ»õë9 —‘¯[t?1�€Õ¼“áÊççòé3Øí~�u¹Ž$øPGË1zž’yÄL'ó< ºÙQú�µ¿”ÏÂ&¦ìEêú÷¥|–}ÒüY™çƒ>Ú¸‡CƒoØ𵯹•™ÜËÄŠvH3øyf.óUf¸õ>’̆µÜVFZû³Éu×=à òRãÄZKRÑðmácä�ËólÈóê�ƒf4ÔÞÌ‘Â{FB¯óÏ£±BYEÍ\÷ç!ß}ÖàÛ¶®Œ 5Ù9­ÙyR½ 3à õ×¼_…Yòh¦�ˆxŽÐéuã8JnqF?$qˆÎ“yž�ö��ÐùhÚª¦…r&DßïLÜôz¾®æ%¦Ïž@IFªÞGéØxæÍÊyn+ßÌØ8•÷ †ðÝÿrüx_ŒùQµcDžËótˆ<öÙêJ7÷d¾«8îà¨aD«Üuþùÿ؉yζsŒsf~oí§Ïë‰úÅvä}ïõí ¶û‰äùAAÀáÑ>ËÉù¼’ߪ_‡|Ÿ…>r[;šÍºüÚV£÷cô0ø•Æ-)P¾ywˆà“yžÁǾhó§ÂºWG|´Ãøí<ó„3é£ÉÎÊ¿QÑ’™GÑÏɼ�4„L\µºPF´­¤t<ú›;c9ÂìÙD„5ßp?Þ¨mý¹¼ñîÁ\öÎ|êþ¡a4E>»ñOæy:û”›�“i×y³ÓsàÏmžà˜ö=Û³IõŽÝü®Ø™=ÔiÅG}‡wÒîWŸÌót£þà~µ_�TëÕ£ø6ÜßrËqhA…)oòò3ƒæs}›m«³ù�·µïÃÏÚägKÞ–�zþ±®ö4ܘö¥?·ØÊõÅ–ÊQîŽ4ÍϽ¾¿ù >Ñþ”�û{gQv.ÏÓ¡ìØÏúGÝ£t²c¾ÎvÙ¡œòL¶í¦Ú“²ù †ü:ÿšÒ8ë\žgChþøÁèï6qß Íb¿Ã9?ìü]‰ç=�l°úc9f'8Œ€Ó6�æÕpjOÃÒÃ$ ³=ã§žCrÕÓ1*ëwP$Ÿ¯mãÕ!)ð‘TâûZ¾tÁð¦tžQº0A}+:Vñî)´“Ê›ñÕû¨Ïη·hËSĦ¼UÝÞ¤-ߥ·ËMyó<¿à8¼5ßʯoiö¬N™Hj¹ ›aûåâóQj:§©<¸U{ר&³ƒQ©I]MÙ„Ú8 ¢ÛEþ jÑ„ÁlúaÔø�Å»0V QK—j:At»ˆéJi®�Th©bÏšjÏwS:Ôml/Èrià_戲õëŻ#µ±VqÀ�ÙoGm&vñÛÅ!µë\¡\…Þ(´C¹MUÇK—r¬~ÿƯ/QÇÿ¿S…kRfžüESƒ3Ù¯z%<7›xÝI£Ü7Ö!©4…žvè.BÃìØ_:*!=“nKÝzl%ºl�‡TÍc’jä±놺&f +«ýÓ¸rªjªëb× ü¶w;]›ªNµÊ¼àîZ¹]ìw¾�âÐF\ó™¡ÍÞVî€ù*¼å…�f1C?ÖJºØ¨¶ÚõÊa7 ¤ÐÅ�Fß²¸ÎÖÆNü;õkŸdÒŠ{»üå’—9c�áÓ ¼Õ|öèeéëÿ Íïñ÷× ]ÿPÏ\¼¯ãF5¶0�[Wâq%ãLˆ'Åü +UØ¦Í 44Ð~ëØÓºŠ†¶Ž3ð5õìª{M©ƒê¦…®÷á 6 ºFÛ¡gÜ�ð6õbsd¾ulú‚}¿´µq¨Æòi�Õ*\ŒÍÁeì:Û—äëP$®8i_Ò¡%3dÄÅX(.‡ +S·le&r¬¤u=ÛOãPX®k¸Ü¾´]G}™‹®²ÜŠ! \`;^Œ“+M+{£?<½¾y܋ɾΖ6joÒ·QÚÆÒFx²ÔæK¿¾lkŽÍYÔÉÛ{¨•e‡¹g›“Ó§Fw-hu1bt�Æž­$pc¥Te«JëBÑè2Ue­ÄPmò%[í–Üâ(öRh>E—þeìi7ŽJëD7ŽŠß¤årëŠ×¼%Û 7Â9ôÖ©ž²ù’Q�ù1w“ROi«l[7­ë®«íuhuC|÷LUÏæ6)?Ä™;â�¡Rªú/ï„èØO)ÆBM:XcóO©è=8„ø·ÅakäÝyŽ÷J¶;"u¯d¬ ñ�µ*hþ 1Ù„7(ÒcÅPTýy19[Rb“Þ×ÂVP§¹íñ®ù7dò^cÞj—�CEþÉ(ËNoä_ºJ>î5oå#V[(ùßÿÔÆ-‰ +endstream +endobj +804 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 803 0 R +/Resources 4 0 R +/Annots [ 805 0 R 806 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +805 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 638.673057 101.433071 619.923057 ] +/BS << +/W 0 +>> +/Dest (cb213-1) +>> +endobj +806 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 577.726036 101.433071 558.976036 ] +/BS << +/W 0 +>> +/Dest (cb214-1) +>> +endobj +807 0 obj +<< +/Filter /FlateDecode +/Length 4504 +>> +stream +xœí\[‹$Ë�~¯_Qφ“Ž‹â‹áÖ/~0Ìb㇞ò´ÍÒgáØþûû)2.ÊLUv×tÛÙ¦§+¥¸($Å')²2íÕàç;‹ÿ2Ù%ç’"]o?\~¼˜%ƒµÅ梲‡ß®ÖPZ‚-1‡ëLðiI%¸¯/ü·»”Í_.¿ÿÙåÿ¶}ìÕ-¥DgÃõ¯_˜E~I9%VËX¯°BXRr!*¬h,±�1B"GGV‚TrÐXƒœË ++C OÉú#«@ —,i,ˆaKH +ËÈa�1*‚"ïž K„Ò£Æsv‰¹¸¢òx69�çýÙ`5^YbŒ!k<‚,¡«ñd –Èh<ÈB>'�!‹�Þ¨<Èârò/Aí…—! ¼+«<Èb¢±¯ø%”L¤ò +x&§|ä9–�½7ÏÚ%À7½ÊÃŽ‚‘bRx²DŠÊƒ,Á§ñ; �×€‡m«ìi$«‹q@ +�Ü5ÖxÀ]cRѰ w9ljX\Ö°.È‚�†1ÓRRŠÄbÀCʧòâ‚ë aA2 @–ʃ,”HÃ$ÖKñ%kX�dñÎiX�dAÊ a2‚¥XdßjyYà.j}@�™¢†@²%" Rˆ¨Ç U�Ý’àZåeðlÒ° %ZŠ­†¨¥–ŒM¯a~átIÈž% R�,Ø* -Ù!3×x² ÉÖ°™.xÖjX�dA6¨aAvUf4 B£–„ª5®3³†™â©¢†Ø&¨4�”*²&4,€}¸Ø øA±‰2GåAHœ—›Yœ!‹3NÃø&×›IÂb 2> Љ §ÉÆÁ3FÂb3êMG`_r½™5,(Þ ÞD‰§ìÛâ#×›IÂB�% EQy�ISQö-0 õ&ÐIãEÈâ +iXPbäz3kX€4õ&2zõH s½™Ôãàn(@&�ÜEf5,ÀêMd¶Zmo¼!!?Ó™™+άž@o@lU� °Ñ*©gàË5’zh1QY樞 ¬‚i�zl`€¿ÈÇè€ ëé“<¢Šp‡„˜™/²`[²ûQsÌfþN³õ|쯾üü Á÷úç¿]žVOÊú�E‚P[ò+lW`î€ìÛbùž\ ’=Ô˜§MeŠe„í˜�ÅBÀã×ã‡�¬•…EoTB‘«žÍ´‰�=utBŒŠÀq”œ²>ÜçU‘r‚r¬.«Ð‘˜w*I“õá>$ëÔQáÀRÌ·ëõ�}>\¯rÞ·êõ�}>JV?ìY¸i5'§dˆ{Œ&y—¿õÁ.¸Á Êwäƒm|q?Ѝ| mÿòÓPÚ¤XOéÇ¥�Ehtáúé‡ËÏûûï¿ÿôßÐÓ§çËþ(N¿øÎ⯠øEÞ@n½öøìøÏø{�8 ¯mPFÃôÔøqösà9\;æ}^¯5÷és�9Ÿ@»µq?‹~4û˹ªÌ Ù"Ú>­s@Ì9nl²ôµò:p�øî:|¸'ã/þxýô›Ë~Ú:I­mª“JQd Ä!üÔ¯ÞÖå=~õ�p§RNÝé›7߃2R“óóƒ2еqC¤øÕ]‡ïËt€˜“§c§¾óÆ>ßšó 6>ójÚ PWpâ3,L»îôÜþƦq#úw^jÖgË0¿Ì6ô¼íO­Ï´Öùx½}•¯Óoío“výn»5ØužÎïtú²•i´{ÚÒ)LyƘ»1œ?l×s\óõª"˜0zÍCßÖç›óP:Å7é™”¶Z¬Ó-ì§öíóy¿Ž!‡¾vç�Ý«ž·Vìvãvk×¾izRo_e£Òmk›¾ökÉkm?F¦;ž6“-˜‰3ÄW<ím}¾9O;OÌh‡ ÿ~ݦEÝ{,awýº7î0¬ó¥õûÓ{Û4=ObݘãÖx~·Æ°•µzè=�{í÷1Á¿âe3õ +dÞV¼±Ï7çeçùí"Ãðªrô÷ ö9Úvï;óšá¡nëi,ƒ´øÆ“JówŒj5Z:1îídô]Õ=Ö=&ßÀþû�]§®mxí8.bk£66ÂÚãRœÀèü•ërµöÿüêû_þú¿¦µ+º³vÆÞïî´’¯«âÕ°74+ÞV^Hœkô½¾^è¹�ĪÒlÏ|÷Eä a¥Ñs›·‡s,–#™8óô4e¬£œgÕâ›Ô¥ÚþÐWšŸ_i3Û¹*^) ÿªÚ�Ò umŒë 3±•nj !3N¶Z$ûÖVÛò¢\—7|’îù›Tm]¾i;DžcÕ:�gÿt'z¾ÍÀ_e9ŽS-\sš¹Æ*·_«5…Eª•Ÿ…Uty}¾'¯™k®ãÒ´~•Áªkà¯>E$X±(cW™Å˜[ož6¡/MWЧ®öÞyj_wïßiÏ“ÆxÑÇà¶+^u¬š6®ëNç|ëNuöë>[�µçëa~—gäŽF“ÖvU>»öïv¢V÷몣Þ'®º¯ü§Ö&¬ãw™*¯ù%¡gjãïír°ë©¾ÒA_BOUž§6^Ÿ3´¿fÎ'e­¾ÕÖÉÈçC;{ngÜǵã±ÜÎ/ÒzVáJû×=Vé¹µ§µ-ŸIðD•«¹nûý·Úc“Q•©ÿŠ7ýóÌ îèªtõ´Å(¶ãí îE‚{QའW¿k§¯¸n³(°tç“¡c‹ô»;{Ð<Ÿé‰ì^O]¿cšëùh êöf?êû©ï¹ðyúîÀmîó§óõR¿~ncµ5tþÀd3×Ú÷ÏŠ §ú:`õ[åxM¯_�}§ò¢”ÛÊ[}ô¹ùŽ”9¬×?Bßm®:¿ˆiÒ7Y枉Õ=ÿeÅ�Êëvlø7ÖÕæ¢öŒ‘rÉý*ä6¿ û +[„Ó¼„Ê^_ÝßǼ¹aÉçãz‘;ŸŒøNÿÖÔÆÛÅy·‹IUO3�ØW��ï±úzËŠ¿ZÕ¯Dœß;z[Ÿ¯ºÍõ�åbò&þŽO@xWËÅš¶ìKÅVn©‡ž«¡îMì -©˜ËnâžžÙ¾5ú˜a–[½œ‡®’÷e[Òþ ây{Dùw¯Üó<Íò-Ü„lFŒýµ\´qq)dG�p±§³]æ] :Jy±Å(æ^+ØÖй�{…�Æk¥ËHãd¹´+—‡|½lné¢%|‡‰Ý|Oo/ø¢—jî€À†]Á¶v4-y¡�žLè¶ãÀŸ«ýØ/"ðø€öñ}ÞqœM‚ëNäHÖÜ“ãÝ…ÛqìªïÛôŒd{¢MO³ ˜Þ{ßs÷ÅIjñÖž·ŽJá·Ú{_ œêÖt+nxnýnúœïö¿‰ä#ŠÄnõ»³yÃÙ¼µøPïõk÷ùWúñæëÊ›7]÷7\÷7[å�ÖÝMÖÃ�àûòÍ›Ãß–\éMÌçösûÖïáïp|°Î67ø_ÑÙéMýwÊõOÖÕ»üÿuö¯¶Ù?oŸ�âXÚã˜,‚%÷x1bg0ÇC$'âŽÀûÞNÀôp`¯} võâ¼Vý`iw˜3¾ÆaµÕm}ñ­qëT�e¯Çoÿ`ô\Ư;ì<ÓQ>ä*ÿ^£Í¦Üôb>öqFÍ5j[5ß8ÕÕ!¯yó�jËI»Õõ>›Í­ôùõ~\Ÿ§z;äeºîÍzðúSÎöSÎöSÎöSÎöo•³åCÎöñ7lÿ›¿sª§CNö�»as®ÏoãFLqqï7Êáÿ½þÜâ +òªï„±Ég—_9àcŸo怟0 6e>àßÖ‹¯ìCÜÅ~®~7á8Ø7kZåz÷5öê!»ê˜.-Ñf2N=WÇ-¢ßµÇ÷RÀ´ÁúúØu4âiÀá6¯6yÅKŽÏöç›®v÷äÓV’ßÛåóÕÁD%ñ£®ªbû8Û +îÖŒ'\ߨ­x©wíÌÜ༱»…×c{±ÁÛ7úÜ8T Í¡p­ó=ÍäV5cü„<›‚¨´ cgÐfûñë#Ú¶¾¦ÃļXÇïñºFZ8æ¥rådzñd»™lU¬½ÞéYß~öãhÕ^ˆfø)ü|üú¶4qÑÚÿX üÃÅòÍQ³n£õåE¦’³ë“üraÐ!…L4o{¼BfbûhÆXdÇ]”N»÷ÒRö-�-¦}œ·ZpÖ�|×sö½?TL¦7òõ±Úub…ˆžÑɼz³ØFæ€åÅ·«8D ±Ë â�dÛ9àìø*i¦ †#шé&ÙQ—Çò #†êâ$Ñ¥ê¬0oë’0çñvÁ´~O}Q©üÚ¡>T×®3ƒæ…PePCo9 BÃN +évQˆß™>4Á˜ƒ/¬Æ/oX‰¹;�v¥·SH·‹Ú®�†¥Òh•g×Ò5?E™®Î_U¹O»‰Û‘‰ßh(öˆñýã–Ìw¿†­M~ãÄÛ%ÐØ‰“ür Ii&V˜Ð]O½w�³™þ2©)wUakv?úÎÿ¯P•‘§~°4\Š__1¯æ$¼7y«$I�uHÓ€¥4Û +uÙ”†ÏJ}¡&QÚ3èŽÖCcªP™ §ÒÅc�à±%ÛáuƒÌÖõ3°RMÓMr®ü²!O9ÃØªÁŒÉ¢îƸ“v¾Hr·ü.’!ïWø|'Þj`£=™]?÷I&Ù™íæd‚8(Lò„Ñ—Jî»u S}¢}œ›L‹¸·Ë_.5Ì9gæÑ[~µ–̲ìõïhóüþï…®¿íïrXã¸3-ÜÀÖ YF2~c~#™_ÌØ‰cÛ¢#û“lólº7Œ8îœÀkšÝÍöÞÒµƒ+‰aêP�Ýp]g½ÐL8!ÞvZ‰Ì{m3özéûâ0�ç·€t©p!—ƒË*¨yvk ‚œ”:m3i.@3�6FL]¦ØºuµÔgUKiä“ú©é ­2”¤Uâ¡-�Û#ÞÈ–üH€‚tç4WgfË‘Kf…eïA¥ÙÒwÚqnÚÎÝ£íU,ƒ¦ qf¦fv ‡–_…_³wÖ>»S­Uÿ©'!6Ï·!P“MÞùúBk“c†¿“0QG#÷9?+9žˆô³9̱�÷&Y~5¹. åu†ª¿¶\ïVŒº¤Çp÷5RGŸÕwÓÖ§Më�иL\*ò«¨='½™ß ™ŒÕ¿yJí÷óæ¥þü?F ò5 +endstream +endobj +808 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 807 0 R +/Resources 4 0 R +/Annots [ 809 0 R 810 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +809 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 426.873057 101.433071 408.123057 ] +/BS << +/W 0 +>> +/Dest (cb217-1) +>> +endobj +810 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 130.126036 101.433071 111.376036 ] +/BS << +/W 0 +>> +/Dest (cb218-1) +>> +endobj +811 0 obj +<< +/Filter /FlateDecode +/Length 2862 +>> +stream +xœµšM�Ç †ïý+æl@e²Èú 2�pàƒ� Œ ÈA™xm«rùûyÙÓõÑ;”V’ f5MVW±«È§Èšá áõŠñ§*‡Z[Éz¹¾ÛÞoJ"üÛ[œ.võx—taÒ·\Óå� ¤„ÒR,ùò´áϳ˵ùÓöãWÛ¿Ï÷ð%†Örätùõ'S©„RK¡ä¨TÄâ¨R +¥Ä”Uæ€GlÍSÁŒT4꽪À m5y*˜¡1VGUa†ha¹W5˜ «§‚ÜRqTL°ƒ#‘«ƒ!¤*ÑÑq +“ž=]ä�k‹ÍÕè¸DO'rQNìéZÈ9§ê鶤FìélI¬Jž¶¨Ôâé2l‘,äê`K¬E<]�-³Ó]…-ð®êê` ebO×$¤VU]]ƒŽj©÷ºH)¤*BžŽ9$ø¦¸:D)GaK¦Ô\lIBÑÓ lQ¼<8‘¤ÔêDk´èöt ¶ÄXÔÕÁ,¾G€˜a •ì!ŒKb)A[T±JЪգ@¬-h)âa ¶4·âq@ˆ¡‹ì�@¶$Í „a‹"r]l‘¦ $Â4ðX [¢ŠÇmÞâ±@€[¥Æ ¼Uâì±@\˜I Ä•šÕc�¹p¥æ±@À\;= ‹p/ Ô•”£ÇvEköX à®(“ÇwEp§«ƒ-p`� c®â±@Á]a* ÜEE�XÕ?Ì à+!ÖJ Ü�•Ôc�‚»±` pu% Åc�‚»1á¼�Ü�‰¢Çw£Æì±ŽÀr³pI~:[X�Øï¡‹â±�…ˆ´ÄcAw¹aûsb´ +\[öX�À]®X>W×̸·˜åÀ97� ÜÅF% ¸ |V�`|ÀŽ=$p—;µ§w96òX�À]ä ÉcÜ!0�Øß\×Õµ@­V� Ü–¢ÇìÂ�*HâêJ€#±ÇÀ8òP�ÜÅöÞ<dp—’ˆÇ‚ î’"íqu°EjôX€¼:„­ÓHVE�ÂÓ�»ÄXaOî•æ± ƒ»¶mz,Èűz,€�YpôX�«†VJöX�A‡”ÏÕå€ëä±  Èru°E‹z,@bš´ê± DØ"1z,(¶ eðX€Œ 4Föí–°îâÖ +[�)z,ÉBmª JʨÇ0«ž.ÇP píê*t\<”¢[1{,@-*‚Þc,]òX3 cõXPlA¨x,ÀVjDfîé¶ ÉöX€L:f�5Âdƒ j¬¨23y,À�ZSí锬ά ªæ`©¢Ç„ *M�ÒÕÁ`ÂcÖÇŠíä±ÅŠM”9®¶HR�µF+7«Ç‚ZaK¤è±¾iõfñXж ãóXÐ(K“=ãÐy,h\QoFõX€¸´z³z,hB¨7Qâ9qÛ$[½Y<4…- )Š«ƒ-Hšš·`êMÐÉÓeØ›z,h9[½Y= Í@½‰ŒÞ=¨Vo÷¸ÜM dòtà.2Ó챨7‘Ùzµ=¼© ?ó•Õ*ÎêžЛ°·ºGöb·*V#¹‡0•eÍî©¶U(™Üc‘�én§OëU†;왵ØC6„…"»5Çl&hv;ûõçíë·Ø|/?ÿg{üj?)ë/†ó‹f+¬“…HlXnà*ìÝ) +LäÚÑö3ö}Á-fBiÓD�#7316Ûvøl0ì5‹©Ìþ\º‹:�±P’]K?÷–ßÝRÆ"aFæv×µñ¥Æ/Z'öïrÿÁ7Rú¸Ø»Qߨ°V£~ØÑ[´¶9-¦~æ-¿ÇtjK$+­¤Eƒ;"i9é©ñ·âüþv„<.YR·[’bn#]Þm_ÿã›7Á°�Ûß¾Á€]ÓëWŒÏz½ýŸø�çC®‡¼àÿ¿_¾ûð¸(â¡Ôr;�kC!¹Þ»Mméòzîñl†®ºŸŽöõ¬Ó~ýx¾ÞMýæü)ÎÇÓ¶ŒóíøÐ]Ûhé{ì?áýã›oÿôç9á(ÿ)ýo1kÍ:³öø\n³„Ê{¿N¦3ùãþD·©ŸƒF;EjV¯=t_ؾî6ŸÜ»[÷c;é…“²}ü¨ëâ=¿%Xÿžo§Õq}z{¼eqýÃWLf~2|¦,r9ûîð¹üìš×�Á:üplCØÈè’PúZù�iÙÕÆä¿Øä…¹¾ß;/üŒ9gGF—öýX¤z(ú,esÝ®,’�I±lR-�ðn7YìnÌ77Ws{²³É³ > @‡Ûç# ojò¨Gä%$òÑOí“|Œ÷ö—ë-”Lê?c/öì}¤åR†×Ï—íý–÷Rƒ÷ã&B‰‡:•8r‘ ¶íbå jå¾L¼O,_>pçþ-ÞûÑêøb�ì¬Ïê¼Û·~ËÅÑþý¾Àï6Fi`óon;„§]ŒJ#=?mö%Œ:bäfñÅ&<>ÒèK¹7²ë¶oìÏ["4éøØF篷�¶­ÎûS¿Í’cÔ±_™Ïßv„¸3ó½Øžžbû"«9®ò0SÂÙ¡®mg‡óÆÅ,´Ó½�–á¦8j·‡íàcL]žÂaú:u¼,o˲œ^7 +Ï¥O®ÔŽÏ{W}vQ^t™,Fµ!M½åXë䈮›#|E½kÅbý²jvqÖîH:ÚµÞÎ]7·ÝÑ[+UF«:om}æ§)ÓեމwdûÒbßÌ/1BÒ?žÅÙV ¯5*Âé7ñNxÝP0ë�øiKÅi�&+(u×[…²ô;Ä•¦¿L) +çcªš]f%œý½¡" ©‘gÿÀ:\ÊŽaæÕÄbsˆÏ“´Êó Žz3ÀZfÛeº¸”á³ë|q%§½Aw´3v’.S¶ÈKëæ¤<Îb^7ư>?ƒ•«�ºnŠÓpå§“xÚ™F¨&ƒe^Ü=�~§8v>­â2VœíLmØ;ú]|¾ ¯ûƦÏÅæúµ2Å‘Æn7[„Ó0@aŠ'FŸvq�ÖA'û�@ÿ8ƒÌÛq¯Û/Û¾Í!GŽVÛeaûŠhͲøò_´ùïmzù¾ŸIÜöñHƒq°õ$^w2ûAAýD±ýÀ  GØ,¨ ö§˜ël›º7Œ}<Æ…×:o§ öÞ’AyhWašs¸ˆãpÝȲÌLúˆðúlG"ó[×fnØ·Ké‡aÄN³ºU¸X—uêdnÉ—¥K\YÓ¹¥C«q¹k§¸\lÓ²“™æ�ë cêÍ~]—Bl¬åbI#ìR¦Nç6»vÝeûS,M�Ëz±v¬¼ÚNö8Fqxýæu?LÎ=L:Ð>¤O«t<˜Ið|©ì—ù|9öÙëû¼s†F_²ÄžŒ$g†ÆL-ôt±úè"­ó¶£AZÕ.; Ú7Š� ȨËF�¥Û”�Ûú´ìO\ÝY*#§˜Ò_Ö™N몌ILëªä»¶ÖoßñF¶$#J«;—ùt4[Ž\²:²¼Þ=¤:[J—Ý�­ç±ûn{YC§!yf¦4oKw-¿ˆ_;·{ž�:x­úk? á:Oñ±Q+‰²ÿ0“jÎ`ˆÚwëEër4òÙ÷|ü¬äþD¤Ÿ•¬#a9‚ŠPaû‰­oÂíeÅÒUÿù­[#÷‘>o>øuȽÂN‚ößXí‡sû�и,V*ÚO*Å’Þj¿)ÄîÑÐ~ dïëéeýÍwãh +endstream +endobj +812 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 811 0 R +/Resources 4 0 R +/Annots [ 813 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +813 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 797.673057 101.433071 778.923057 ] +/BS << +/W 0 +>> +/Dest (cb219-1) +>> +endobj +814 0 obj +<< +/Filter /FlateDecode +/Length 3998 +>> +stream +xœí\Ý‹$¹ ï¿¢ŸÖçù Žƒ,$� y,!äa¶w÷Ž0ØËCþýüä.Ûª*uO÷Î,y¸™¡gª$•-ËÒO²»ªÜÑâ÷�ßBΔRs¢ãéóáËÁš-~šÄꤱÿ†OŽGg)›èj*ñø™ !›\£ÏéøxÀŸÍ©<üüÝáßëkÜÑ›Z“wñøÛGfQ0¹äl£Âª`YVŒ&g“ÂJÎ`ˆµj,¨3yÚ³2Ô Z¢Æ‚ä}QXjÊ.ìYjøìHcA WcVXÎBç­UyPįð\4 FOÏ;“JõUåeð\ö/“2¹è4^5)¥X4A—X­ÓxºDGd5t¡P²ÆKÐ%¤`Utñ%�—¡‹‡uªÂ+ÐÞUTt±É:�Wƒ‰µ©¼ +ž-¹ìyÞFKVã9g"|3¨Z¯aw=ù¤aŬZ w!Q/  VÃä{ð|а��²DÂÜuéO‰i •q¥& "p×LŸÊ«ÆeX\‰[XÙ¸”ª†¸‹D4,ˆÀ]ÀgѰo�Q½†¸ë2µÆî:_­†¸‹º!jXw0€†ÈoÆY¸®Ê«ÆÖR4,ˆÀ]À’×°YØØ$QyÙÀ‘œ†ccQ‡jX�€»HïUÂܵ1 p×Ê•]Bñ ®a«Ä4ŠUc=�Bãw­Ã k<வ¹jX�€»œ65,H™ ¾hX ª`¯aA*djÎIÂT-x(ùT^28�d Bd©<èB™4,@amj¨EÂì¡Kð^Ã‚ì¡ J P˜êP}«ËèwQ×]P)jX$3¥iX�cÂz VÕxÉ›’×*¯€ç²†9“A*v`-e +‚^üárIèž# r…. �ŠLñ¨Ì5žƒ.(²5,@¥ žs]P jXP|Á*3Y �¡±–„©5Y^g +%Ã¥¢†¬4�”*º&4,Àüðb;jX€Å›Xæ¨<è"iXPŠçåfѰ èâ­×°¾ÉëͬaAµÐŸ†Õ&Ãe²†€qð¬Õ° º‚õ¦' —¼Þ,Ô`±ÞÄO‰Û¯7³†• KD‰¢ò  ЦªÄ-0 ëM “ÆKÐÅWÒ° ¦ÄëÍ¢aÊ ¬7QÑ«[…×›YÝ.îÆ +dÒxÀ]T¦IÜ`½‰ÊV[Û[ǫÏtfágQw , 7"·ª[Ø‹l•Õ= ðå5’ºi5±²,IÝ5@ZÓYuÛÀQ�ÑλOr‹*Á2rfÉ<ÈŠ° T÷cÍ1űóþØo¿¾@ò=þòŸÃ§ïÚNYÿe߈¤€i̶¯˜íÏËCÔµI�A.¨L7ä˜î²×´%¶]‹F<ËR ƒc�}\Ó±,�.ºC]Û¥…n‚z#äÇ X‘nÈ1NÙÑ�$Òlw’çHuzv5­£Ù÷tøýE¶1­ PÉHkt¨œÏÙæ¸„ç2×9×ÙeÙ»„;¢[Ï5¦š'[N‘˜e­ÿGaG9^auIn.+Ƙuʲ¡Ì·&óò¹ËâhG\ùÐ$¯}HÒQ5uoÝ9Î+Š݇Šð¡é-9¦);º“DéCIõ¡A�ƒž]Mëhö=½Fîÿ%r¹TçŸãþ@AÙ•uÆ>ëy1ÈVv¶ ¾×àû�_âŸ|ÜÜ|Ra1biˆ•g¿ßkð½ß�Á§Ù}%ç…€| ¼×Àû�Þí%ç~½ÿöÝšµ›jð¿’!*íëþ–>ó–æñÝçÃ÷ÿÓÞþù/X?¾ûtøÇÖº‚�Çx[ž¿Ð¶Öóç>�i„ãÊ‹ è„ë"äbÅñ ŸFûñŸÇw?]Ѓ¿Mzp×ÜE» Ÿèñ)çn"º‰éÜ”«˜ìqÿÏ›yŠ5± ”øFï_ëCé-»òã÷Ø _xÑ-ÿÓò¿Óãyp,ËšÐû3½!+ôE¶�ä“h§·›§± Fk‡ Éw°áº­]6¨_Úý$Ú>Íöšœ_�¡õ{Zx›þ¹�>qña¡ ÝÏã½ÃÚ´µv·X¤Ù{Ó8®{·ïùŸ°¦[[¾Y#±§E›´¨‘Vý# )‚0ü(ôþÓÙ‡š5Чû°o'ÞâæÛ(öíœ-´è›~WôÞ^ÒÃÎq·ÐX<§ÙÄŸ}\Ñ�o§I–|ªJÛÍsOK›"NZûuÎ~·a³ãÊ+ûo<{Ûô4ŠÝ#§îíøá|m÷|¾fF�û¾tÏ—^?õp×íN[Û0Lu=šgÔ°m¶ºJ[­¢}Ñ[úìúžj³É–MÔu¹“°ãfÌç¨>ÓoÒ]`fk#ïÇpÖÿª-ÓÖ–ª^‹î‹­Ýºèó0ç¸É.ckò=5tÿê²éŒÈ-•<ˆ±É¹èöHËxN‹v½> =¬é>×è_ÞÚ¦Ëo}š–,ÑüØËñ]µcÙÙñ; ½›oýnå"n:Þ4]«°ß±y<®ÙÞØðV¼`šû°ôÿq‰‰ž{ºÝ_}úµ]¿—¶Qø¸œ“Èöö,KüÝïÓ5Mœ5ÁȬ¢¦hÇÝzÖÞÕ+¯sD®k†9Ëâ\ÖIx_^_÷2Yž¸€~�,¿oç¾,]ÒãÙY~ßöK â5Tœ‚~²#3Å YoØ+/>óþ’mQõªmÃvü#ûnü«gÇ6ÞëÈîý­âTr·GeÄ*Ó=•éþˆ•yÏÝÒ½F9l_ÝÏÑ 4PV2Jedö¶ý +˜‹íÞnúµáË Fâ»S_1öí܇©Ý}úmcßö³C¢EG‚Ñ›:d®.íª¾lQY…�®øï:R¯Ú°lÇyOnýlQ삜Vß¶>ÂDš^�÷­Ž[iUÏÓäËù>×·#Pæg'žF ¾Qó�k‰ÓÛWÞ7æåk„œxÿõù¿o羈/6\ÒãÙ¿oû›×Wæôé|¿ÖƒîÊÝWmì·vøV9¾À1êÓV¦7¿ÄŽâX—Ô…^fŽ�Èùû­×ý �]­~›hÜíƒt9?åU [¼æ¼ûx‡…ËÖ—ö,û.ã…V‘8ÔbLøi󹫸Q½7öpcßN÷ý¦O‹�«zÄrI�gãÆ¾í^á]Œmî÷½¨ºg�¤Þã}v³£/puƒ]Ý“d¶lúnVóg,¶«•û6Î[;pÿ=3ónAßéé» +|¤¥±›=ÆqC…p3^n°ì¶q/²è#„óî°:G{M0±yî_µaÝÙPÁÞî—ÃËüGÝ·Õc÷ÉÕúr‡Š[DüzÜíüõ‘GHćº‹»è5äË5;:d��!û º"#! E/Ûvý+´°´Ùœ¼tÐX+ßÜýñÝr'i{ÄÞ£ íq�dÅ]ÈËMª7ˆ\¿�U¹gyé}‡ëÛwÒ¨h’߀âÉPÍ|‹½öå&ãÇEó52øâw>Nótß9eÁˆ¶Ãh—øé{ŸÎfdºx¿ŽóŽãÒçüÃÄé_£ý/B‰�m ±�a7m_©=âÚã�6ã<¿?à˜È°GäzäÇQPW’ëÓäšaÝñÂ•í­ _†Ôò"ËÏfòs9ç·4ˆ“EþK›àÏ( Ȥ^´‡¦m#ßO&ùñÀÍ“B&š•Äd&.‡v´En&�v:¸À_Îo$C4v9œÕKˆýÐÇ>¾>öËøa²](´ÛùÏ+D\™ÜžÌ£·Æ-d~ñ@1a9KC•˜ºÎ ÎIÊÎç…O’]°‚÷D+º›dO]Ǫ Ó¥IªKÓ91ý]Ög1�׈§º [ê£JåÇ�{SݺÞZJÕA�]rL�yRH|÷ÆŽøÆö¦ “9øbÖø¡±3±tG¢!W»œB:T¹¥µ8f*©2/­ÝòS•éê¡ Ã+´“¨ð3¿IEÄ–ª¾Ïƒ$sa:æÚá7~G<"�HœävÇÎ^:N¬°±»ž$Ñî ;ýeRQ(.¦Bhv?rÃÏP•‘§8.Å�ÍÍ³Ù Çæ ¯�$éi ip”§¬0—Ëyø¬´—+V‘gÐÒÃb+ª0™ çÚÕc�à±&»áuƒÌÖí3°RmWÝMr®ü¸"O=ãU8{ï,9áîq´;Éi`ç£$ç1㎟�úŽv…Ïwâ©%6Ú’ÙõKïd’½Ùnv&ˆS1€Â$O}lä­�ø½.ýp™–qO‡_-Íù}å{:ƒãGúe•åŽÿ…ÌOøüë@Ç¿ö{<ÏyÜÛ�~`ëŠ,3¿¦ÜHæÂtâAô$`’]™²±{ÃÈãÞ ¼¦y¹�ÀÞ%Ý@P7¸’§ Ù×õ.ËÄ+ÄÓÆŠ£�yîÜÌ„}> }pè&ðÓ‡]+œÈáà´L^˜)ù(šÄ‹Î”.yq!Nd£8Ö©ÙJMvHÙÉ0=ëOr*÷%NDÁ§aòh¦YÙt§µQ”ÀAžÈ†ÉÉNëJE鯯gÏû¢rêÀÔíƒú(©c`L€§SC;MëÓ‘s‘OzðN �¶‚ˆ½0Šœ³´ Õ‰ôQA-ó²E ÊN©ÓV�öD1à4Ûi£ÅÜuJËeÝ,mÄEµR5Ťþ*-å¬ #F9+i'ËíöŒ7ª¥0 + (Ý9ÏÑÙ)9jɢВ¼zPiJ†NÛ÷Më¾{¶=ŠaÐT$ÍÊÔÎËâNò«ðïkbG½sZ“ê¿m'Ä•ùÔ55¹|h/Ò³%%`ñ»P2±5r÷5_û̯ìÉñ=T!Øìø•ˆº +�`Ô§¢©þºDý²jÕ!Ýg€‹�¯«÷¹»öN¬vƒ|Û§™—Šü +¼ÀEoá7÷d{á¾wZ¶QÂj ¥ýþƒut» +endstream +endobj +815 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 814 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +816 0 obj +<< +/Filter /FlateDecode +/Length 5429 +>> +stream +xœå]K�$¹q¾×¯¨³€¥øˆà0¬Û€ Œ!‚=­n F¯�•þûþ‚•ÉdfFU²jzGexg{¦3È #Éà|¥;[üùÁá¯LÎä\R¤óëO§ŸOÖ$¶ø¯æX=Ôä?à'ñÙYJ†]‰™Ï? !$“ +ûÏ'üµy쳜þø«Ó­yÜÙ›R¢w|þû›$Q0)§dYI*H².(IÌ&%ÏQIŠÎàKÑ’ 'ò´OJƒJf- b�÷YIÊ#PraŸT †OŽ´$ˆá +'%ÉYÈá¼µj±DÁ+iŽMD£G-Í;sñEMKHsÉki!˜˜È±ÓÒŠ‰1rÖÒ²p±NKcÈÂŽÈji�…BNZZ„,!«¦AŸSÐÒdñh�¢¤eÈíÊjd±Ñ:-­Ã%©ii6§¼Oó– 笖æœaèfPÓ0¢ÐI1)i²DËEMƒ,¬×Òd!üÑÒ€RÎÊhõ2ºƒ NKcÈâ}"5 ² ó5ð²Ø5À2‚Kø” Oø eÊ +ø\ ¥4ð… Å’4Ö!Í; ‚…,LQC‚à aäªi�%Ò° xÈ‚ „Y< Ж -À-Ùâ4,À[².jX¸ÓjX€¸!GÒ° r¡JEÃ‚Ì ÀN @Ã=iX€º�£×° vå¨aAîrVÃî†N5 ²@�5,:šàrа€€»ÁÙ¤aw1Œ¼†èU=Œ@WŒÏÙjX@À]Ÿ-iX@À]Ÿ`Ô´d0ƒ†ÜõŒWÐ,7p׳õpד�@Q ðǪÞpº;Y°ÀÞ#Í P˜ñpK4,`à®+0ʘZ—KÔ°€�».£ûÔ´b\B‹+ã­l\ŒEÃîÂP ¸ øÌã ,ª×°€�».ÀRkiÀ]ç‹Õ°€�»ðXèƒqp4,€}3ÎBuÕ´blÉYÃî–¼†°ÂÆf ‰š– ÉiX06~¨†¸ ó^4,ˆÀ]Ë!hX�»–àö¨i�%d¯aü¤aØ*cΪ±H¡¥w­CkiÀ]kSѰ wÅljX“|Ö°xÁ^˜ɔ”¢†±X¤ÁåSÓ¢Á3kX�, ÈRÓ %Ò°Žµ)¡d ’‡,Á{ ’‡,p4,€G`Šƒ÷­†�ê¢ÆYà)jX$3¹iX�8"C«jiÑ›œ×jZFšK¤D¦ØiX€XÊd z ðFÜ% ÒiX� +dÁPѰ¦ÈdÏ\Ks�N¶†ðt‘朆ÙCxƒdŸeF«a,4bI4µ–FVâ̬aA¦hÄU԰Ñ&�RMƒ,€ Ð?l³†~l"ÌQÓ K`Ò° g/áfÖ° gÈâ­×°º)ñfÒ° XÈ�OÂb£7YÃÀ8Ò¬Õ° ¸ŒxÓ“†—of J°ˆ7â)ã¶„(ñfÒ° da¸(jd�ÓT”q LB¼ tÒÒ"dñ…4,(1J¼™5,€›�x½:%�%ÞLêtp— �IKîÂ3�àñ&<[-¶·^NðÏôÄ,gVg , —a[Õ) ì…µJêœ�øJŒ¤N@LD–9ª³0«HtV�6°À_øc´Ã„ËìS?E¡ 63'yÉ‚aAðî[̱d W²]æÇþþ×Ó¯_`|ÏýïÓû¯êLÙüÇAùE ¬nÄâ ºpejqT¹©Já!RY„t€ÅiÒM„„)†¹-çö‹[‹ ‰Efg¦¾õõ"RpèªuYïæù Y÷ÍþÛ/'àËen3ž»„$ÈãíùËO§_ÿÇ¿üøÛý7”ùåýô§‚Ò“µœ-¢ü¼â÷$^þ‡Ù ü0OôpIsùÍŸÏ_~××å­„K@^×%ÅÛpÉþÏ_ÐTuN' +ìYf?.Må�ðäê, d±uεµîÝ,5îÔ¦2áµàÅÙ{Ay ]øç–v Ís­—6h�ö$îºÙÿÇüòïK³KÓÒWüäé÷7ü ‚™`?5»Ÿº%_è4wÕû¥+$�ã…e»üþµko™¯œTS¦QbÂÁ¯Zêáï ³Þ¾½ïfù>íMs­—ön�.p×¥[ nÅ ’†’Fåßüà¤^/ÿ²ÛÐi¢ÇéùZ£Â¿"¸ÜØ5æÍ¬ßЈëZø&tX)ˆáÚ(¸-Ø˧@Ögt÷"7â9ð2¬£ÖÝ­ëòÔ• ÿ^€ëjá,³ZT½ŠUá=Ž]çF b]bñ-vÜÎ.’ø|E™R z%;T¦›Y?K™<¢Ÿc(¶.nØ'æH²AžçS'x¨àæb½×_;TpË“z½¯ÕŒüFíxó¯_?[”k_T M` +´ÉÇ�˜CŠée¡ˆˆ2+Üü¦+c])�ÍÉ|Gß�ñü£ Æ"¯ø´¨Q j0Bÿ3>ú×Åþ©WŽfN&E8è8$©Ø‹Ræq·Ãq"„÷^åæÙ£X«ñ5-_Qhd†ÁEÜ‚(­„ 3·•c„ãyT#Bƒ“bM5¢½Ò,J"JñÂogý,–MÉ%W×a %�‚AžçƒpY9dŽ1Ý#HkèmpŽ=ƒet¯+ó d–ÊÙ\œÆýò ——#Œ(èU8>¨ï%¾Š,4Ë�®ð!ÈdK‘I¶#…¿�õÓžÙäèeF‘€�1òö(ÎäyB…— ›èJˆ¹Q‹¼¨Ø<f•jÀ?©a ge&àë‘ +ù:õ�܈S%x[×Üâ«�Aä^áêËuò‰cPê•¥—�Ó?ÑwÁ×K£X÷BÀ?PJ{‘Y©ÍDKÚ(®]+px«s4—û®Ü�UÜ€ˆ„Ts½»•6ió¼Moåܤ•.¹+o–­ó±y#“Wvs½öï¬Z²Ñ„,óñg +$k?Ü´ƒ´¦,{�83i܇u³c“ 6)ÜCÖ”¡R. vˆjýß×UpÔ‡4GSð,Ké²Ì…˜ŽÜ½AžçÒ²=/øÌ¬[Žú·o]Õ½nßžû·O©û¥{£açO“bŠUb° Ûïñ�´r^¯Ø•ì ц|ö)—åtÍ‘Žñ<�¸[…™¯¬ùÎx_.Í-Þnx»CñVÅ�©N§x{n±oß6Q0O…ÞØ]�JµÛæ›Å^Âý=wU×—¡µ½¬G§FÒ[eIë�ˆÑ^)A²ÑQk.¦ž�ÊÚû¼ ´HH²·+‹ªîKh½õµ·þú€ã)g‹�/ñ ò<Í€d9èÅ +ô©K<ëb?g‰g_æ=K< +÷7.ñà=ÑŽPx”u½˜egÙmíbyå ÙùŒßô+ǪØ^9øëf&DoxN¦¨d£e’cDu;íí†byž†O0ë9Äu39‡FzódüêcööpÉávÖÏZrˆ%ç‚hb<`äy¾%‡èeˆ9Ay­ëV Ã;nÖß»ãfÏ]}—c—¸ó�4 ìj‹Ø1 { 5ED³JiCË)‹k½/á—XNYV¯¼ÿµågÕ¥ŽJŸ4 úg�'²‹v·s"W—1ºwÛ.�\™�©uoüÚf·³ÏÝ»ø#NÎ4ÉÞÓ ö1ËÙMl®ÂXችGL7“ò< ÎG‚YJõ(ý­ùÏœ™½™¡¶ïVì�SðkŠ�Ã&yŒåyº*É^_è¸Þ�2½‰2!°A¬îÆÃûAžçi$KhŒÓ7˜<ê0®‹}ÄŒ.óCû²Ž�Öƒì¹ycbxëŬá]Œš”÷šÚeb@)mÄÔÊâdµ>ßÔÊÁ8é©äkﯚZ‘`v`YÕv:yžf¸%/æÜùæö–�UßvÍÁn©Ý"¢r8 ™¦ž†î²ïŸ\^X¼¨ãµÙzƒ8 +Z´nª6·7æ“lÍ,9§•£ùb�î�èÖKö5¯öÈmMÁ•̪œGÜ ]ô §p�­öÈvÞFµ½ïÝ;»SlÕVhïĨè^ŒúâÏ$§³\>rc<ÏõÂÏV·Ì5ÿ7n)Ym+ÙZÁyˆÿåzÛ-.­{ß®ÃC¿µä{,"×­(×,N´ÆFŽèç »$£•è@�ÆxžG�’œ^AÕWöŒ){tW«¼Ÿ¨ßmÇÑà¶�$W ùà-y¹9ÀÛt¸±v�çyº_®*#@�¾ûè�þeïl´QŽG°Ü0ÁE®_ßõ9Èó4]˜½3±rƒÝÿ•Üê|½á»Î³Z�çõÝ62Ïh1²HnWòäí¶+Æ|´ÅÃÚsû‡²2 +7ÎkÜÇu¬|�£ãî!ÿ°óè´úïõ—yF¥´—É)x¿2ÔËQÞ”Â\’Ãùõn•ÛC}Œçy†:Ë ª ·�¢õAˆ&G\z:‚Ìu8¼K|N]7g5_§ax¸o ×Ískv3G¹«"RÌgöÆEëøèŒØËó¨J’#ma}êÄݺرyÒœ£ ©8ÙÐ2º‹{�çiš[®Ib9é5²ëâÎæïf+×Õh³•«•…áu�}¹÷„Øs_E‘á�S�H´Ì�*ít kf0a‡J÷€Dݪ=·{ŸÆ7P)2¤ {à%ºÆÌ‡ z$»h‚ã�âÎ z‚ò‡ëJ$úHLZ{mìê¦ázlQ·9û�ë6gëm}×êÀ TБœÜ77|js�çy@ÑË)SÒˆ úP\Uss gëûóFŶ§Žb†ác£AfcS¶I“øX|éù®¾£Å—¡!»/5= ýýÀS¤?¡Kõ üw3èz¯\t±Öu V."zµ^ËnoItpV.K,Ð1&hI20»þpì Ïó€�\GçÉÆ+;î>á0캊{OEì¹ï9±ç¾÷0¬Vÿã‡a•Ò^”ñÊêÃ/vö �&—ür9RvepE “Ü=¼-d�çyWŠuƒO¼²�˜—éÙ6)°™cÛuß¶+6k€u®p[æû:oë¾W½Û¼ÞѤB︯^uÌí¯ßØ!Ùþ´ç>„ˆÞOx î.XØ×=~pª;s¡I1|pŠÄO ÙÖʹæçdÈ—Bò½†"wgs8Z¿äyš!$÷/›‡˜º�ú,ïxSÏDz:¬WŠ<–hÙ +¥±ODz¾§ã~xŒ«SÝGÞ¸ó¿ö;ruq¶*ÇÀI®Îk¿RUÃvxðYÆE&]­ÆBþÅÏWŠ88Ìõ‡é–å$—@² õvüh»K›2f9‚*·z_òÙm¬o!F‘òy59¿)SGIn$ÿ¢]B/“62aSÝ™§Ë­¶n˜¾NœOÑËt{®˜0iËz[îÛ‚Åíãé¶Ü:Ñn§ËŽãå§–5ý^ËÉó�˜ê…þWÛná]•ÏSÝ�<µ îÞ�çwØuÛϧXoÒwõk*6fñeoS$#‡ùañäöþla@çnrµaÝù +gýHÝÏ-—ü ’•OÙÈNžÚ�ýÔÿçÚÁ?�Ä¡–öh¾|cÊVröóÃBþ8É7ÆH!Íw!’…8ýj[Ypü†ö +Ó–LÙæ lìôk»ºÞl'��ßFøyf“ûYÉΙꉵ©b…Îèödy{kÜD–ï´aOO±‰"'èq)�ú¼K� ã!ÙÛyO´]u ÙÓ,�“ïz´¦‹ ±‰Þ7�ëºÎëS×�·ˆ¯'T¶Ô•*_‡š‹š[×ÛF �P¥QyÎÙ:„Z?)¤×“BüÁÎEÃar-½ë5ùÆÆ…˜gE¢–¯ÌùÒëIÍ7•Æ­§RË•Ö2·ü"Ê¢ê!·†Whµ�&j’OvcDîõžû¡'Ëõ²­¯mîôÆïˆ¯'XQÚ‘?Nœ”ܼ`…åYõzbèÊmäl}Y¨^~ÃМiò…ùûܨ‚<õGM¥dU{yZ*‘±ÙÈëFê鱡i-à(-y»ær)5�íÛËe«äÐm¹[‹­¨]“ut¹ºx¬É®i]# „ÍíÓ°²'ÚYT·�¹©òÇŠ¼ÈÉm¨Ê‚ôDŒ®Swnå.䨰ó£'§ÖãN>Óämåv:?_«a£-YT?Ï•,d fõi•uÄE0€ÂB^`ô£’çÑÚÐI®R�]™fq_O;U3_ÛKðƒ“/ õ^–;ÿòü?ÿy¢óïçOn\츷 -|ÃÖ¹·dò½Ì> +endobj +818 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 766.923057 101.433071 748.173057 ] +/BS << +/W 0 +>> +/Dest (cb221-1) +>> +endobj +819 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 747.976036 99.933071 729.226036 ] +/BS << +/W 0 +>> +/Dest (cb221-2) +>> +endobj +820 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 729.029014 99.933071 710.279014 ] +/BS << +/W 0 +>> +/Dest (cb221-3) +>> +endobj +821 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 710.081993 99.933071 691.331993 ] +/BS << +/W 0 +>> +/Dest (cb221-4) +>> +endobj +822 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 691.134971 99.933071 672.384971 ] +/BS << +/W 0 +>> +/Dest (cb221-5) +>> +endobj +823 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 672.187950 99.933071 653.437950 ] +/BS << +/W 0 +>> +/Dest (cb221-6) +>> +endobj +824 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 653.240928 99.933071 634.490928 ] +/BS << +/W 0 +>> +/Dest (cb221-7) +>> +endobj +825 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 634.293907 99.933071 615.543907 ] +/BS << +/W 0 +>> +/Dest (cb221-8) +>> +endobj +826 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 615.346885 99.933071 596.596885 ] +/BS << +/W 0 +>> +/Dest (cb221-9) +>> +endobj +827 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 596.399864 99.933071 577.649864 ] +/BS << +/W 0 +>> +/Dest (cb221-10) +>> +endobj +828 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 577.452842 99.933071 558.702842 ] +/BS << +/W 0 +>> +/Dest (cb221-11) +>> +endobj +829 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 482.717735 99.933071 463.967735 ] +/BS << +/W 0 +>> +/Dest (cb221-12) +>> +endobj +830 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 463.770714 99.933071 445.020714 ] +/BS << +/W 0 +>> +/Dest (cb221-13) +>> +endobj +831 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 444.823692 99.933071 426.073692 ] +/BS << +/W 0 +>> +/Dest (cb221-14) +>> +endobj +832 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 425.876671 99.933071 407.126671 ] +/BS << +/W 0 +>> +/Dest (cb221-15) +>> +endobj +833 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 406.929649 99.933071 388.179649 ] +/BS << +/W 0 +>> +/Dest (cb221-16) +>> +endobj +834 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 387.982628 99.933071 369.232628 ] +/BS << +/W 0 +>> +/Dest (cb221-17) +>> +endobj +835 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 350.088585 99.933071 331.338585 ] +/BS << +/W 0 +>> +/Dest (cb221-18) +>> +endobj +836 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 331.141563 99.933071 312.391563 ] +/BS << +/W 0 +>> +/Dest (cb221-19) +>> +endobj +837 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 198.512413 99.933071 179.762413 ] +/BS << +/W 0 +>> +/Dest (cb221-20) +>> +endobj +838 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 179.565391 99.933071 160.815391 ] +/BS << +/W 0 +>> +/Dest (cb221-21) +>> +endobj +839 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 160.618370 99.933071 141.868370 ] +/BS << +/W 0 +>> +/Dest (cb221-22) +>> +endobj +840 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 103.777305 99.933071 85.027305 ] +/BS << +/W 0 +>> +/Dest (cb221-23) +>> +endobj +841 0 obj +<< +/Filter /FlateDecode +/Length 3621 +>> +stream +xœÍ[[‹dÇ ~ï_ÑÏ—U%Õ ‚Á†$ààÆBv;»6a6°ÎCþ~>�®ÛéÖt÷쮓�a¦OIuÑQIŸ¤:§ý‘ðûµÇ¿"Þ•Rs’ãéýáÃ�\Ž„Ÿ­Ç®±±Â_ŽGO’]ô5•x|¯Î.×r:>ðv:üå«Ã¿öcü1¸ZSðñøë[e »\r¦h°*XäÙ`Åèr1¬än±V‹1b– ׬ 1¤–h± †„P V�,Ùó5«BŒ�½X,ˆákÌËäð�ÈäAá`ð|t JO/x—J Õäeð|�Ù¥,>z‹W]J)‹'�%Vò/B–èEÈâAá’-^‚,œ˜Ld %³ÅË�%@;ÕàÈë*&²P"oñ*»X‹ˆÉ«àQÉåš(ºX˜Éâyï"l“M< +›”²Á �%Q¬&²D¦`ñ²~-p"r.ÅðÖ ÞÍÄÞâEÈB“Y°ù„Y(' àANqÉ€�³“Ä�PØI‘b¡@(ÕIÎlÁ@¨ÑIªÙÂ&^ð0A–(ÉBö�Eà¹&²p 8@t°°€²a h+° p+T½… ¼òÉÂàBL²°€�¸\’XXÀ€\˜Rµ°€�¹ ì´°€ºp÷lau9¦`avYJ²°€�»,ž,,à.3Fš<ȶ°èèØ¶°@€»ì)[X À]¸Q°°»ê`‡ÉÂØŠ ¥�…Ü …ÄÂ`ò²ƒ²…Ü ·`Enànˆ,,àn��,,€¡8à™Ùpít²`-,@¼/°…˜Ì¤%Dய†O­œ/5YX�»¾`ûL^u>Cã†ßBËΧT-,ˆÀ]*¶° wŸÅÂ`¼CD Dà®gDj‹Üõ¡’…¸‹¼!ZXsp €…ˆoÎL×äUGµ "p°,,@vT€$&/;’·°`ìy¨… ¸‹ð^-,HÀ]ŠÌ$à. Ò“Y¸ �×€·5|ɪ£¤°xÀ]òØa‹Ü%ÊÕ‚ÜÕ°iaAÊJÅÂè� RWsN¤Jà!å3yÉ¡-,ÈBd™<È"Y,,@bí*×baA�…C°° È‚”ÁÂd®zdßfyY`.f} �™¢…@2Wªˆ…9&ÔcЪÅKÁ• ¸6y<Ÿ-,ÈYB±·°µ”+pz ðNÓ% x^,,ȲÀU,,@(r% 3·x² ɶ°™.xÞ[XPdA6haA Uf" ¡QKBÕOHëÌbaA‘ä4U´°n‚JHiò `ÂÂì�ÛÑÂ?(6Qæ˜<ÈÂQ,,(%h¹Y,,(² +À6µÞÌT‚,Èø,,¨”œ¦ÉÆÁ#²° ú‚z3ˆ…ðK­7‹…• õ&J<Ão+'­7³…U KDŠbò ’¦jø-0 õ&ÐÉâ%ȪXXPSÒz³XX€4õ&2zóH h½™Íãàn¬@&‹ÜEfš,,@õ&2[«¶'oÌÈÏlfÑŠ³˜'è�ˆ­æ‘{­²yf@_­‘ÌCˆ‰Ê²$óÔaLO汑�É&œOŸÖ#ªsȈ™%ëMV¸… »5ÇìÆÏt;Ÿ�ýúóá›×¾ÇŸÿ}x÷ÕvRÖ=ŒŸ%iaÕEBÅv®Ü6�‘ˆ"Aò +Â*!ü˜1*D®SHXl‡n*$B1Âm=Ž ¿«ÌÉÌvg²®‹JÁc«8Ù²¾xÌg’uêˆq™S±Q«’P¤ �ÝÒëƒc>»^×u%²¾xÌç—±Q Ð~][È;�ïJÇús¼¾¸#¤– y¯óg’ûº(pQ^À4Ʋß#"¸š�,¢¾pÈçØs,¤ÙjB/®A£; uÉ®ó÷¯ú¶üùÂh.r#ßè6ÐñÕûÃ7?þå»ï^ý˾zwøÛï´yÉß·?¾úáùUë9(y¿ª.$åÛ¯½~¦öù†(\ß™!™9‘ë)ïËS *8+Yƒ#d@$ÒäywþŒ]¾&/Åó"¿µ7‡� ºÁÔzÒN•îXÐcC>Ê‚~ é«>#×ÿŸÎnÕÕp" FNí:wùÜ R~ªµ"‹W0Ø’Ç›ÛòØ�/f[Pý:Œ�HÃ^¾/÷ö�4°QMõb™m#jÛ[ñÈñ¼«'hYò=D}lÈ—£øˆù„=âwíSqäsÔÌ7í¦èܬ<´Oß¼ÀV|B4-‰+µ„μ•Ÿ·ÿÐ�/GñY?ÅJÁTü ÕU´Ä©„»¸‡×·»~‚zv«èƒÅâòî +t»ëçJ7çrz\š·4·f·¥¶|O‡†|yIRЧ/z\Ylû¸äeñòýe/^O“<•ê­Ñ±EA5øØ>˳©Ë¨ŠU©­”ŽKýjÐç‡E—jà¯øîû?þij ˆÎ¯Î¦A@×>#](-2+/�ûÄÞ'œ�ÑÿÃN¡†�ÜN“ÿ O☷Ú›öà˜ÿ7vÅ!¯šÄ” +›†åýy«ô…’Õ¸® îmûl§±xà]¼à彬Yî0‘wK"µŒÙoëßåô7/0)}|œbØ&ÕL'òb>¹]7óâxnÇfZòn“ùì8sQ…ܦúÇ~ÑMÇÏ™RÍ›ßcc>¥lý-¬P<ß²Bzý˜¼>ïÈHÁ›El´ž¢Ë2Ò~ñ"Ro©ÒCk¿ÀêD†Ÿ·ºaQ¹�UìÃbu›Ç4k+›×‡ô¸ÆCØ/xËâ°F·.�¥j� ùâì­Ê-{»¹ßæNWhYs4׃YÔÔ +*ÉÜw_:¢áOÚgíA¬gŽ{ÛîrÅf3gÞP°Ùø „<Î šMÕsTTëc5ˆní´ ÷åÚ}¾<ûÈÛ6¯7|O.ä ûù6>5Ý^÷ìÍÖQy\U¾íìë'vÚÒùIïšÚN‹V㔚ÞèÇÂóVÓ<•NW^ºÊZ‹ž4.^jÇ–é½ë<‰õ� ¾tv=Ïv_¯¹ý-9ËsrÐD¡ÍräùTjE"¯/BŠNx=÷fIt?æ­‹Eäžo4kêVЬwCÆÓµgK;÷Û®y®¡ú–é'ªÆ¾ßÏx‡ì¼£¡³oH�=¿Yƾ¹©ëx©�M¾Ðm±­“g{»÷%ĵ?]Ëõ©÷µ®1½|¹ßeý‘z§6g<ÛìX§í“÷#úüÔž|e­`#’}c!Ñò mÄœ»]îĘëÇn½ <ú‹nº1¥¾òްJN¢�.â¶ÃI�¶©¦@§ +ÏæÑܪƒäÛs?µà3h·í~w6e¥o•NZ¶µ]w÷\·.¼nÐq𮳛?.n�¦«Å¸ÜCì÷pµmi{»Áoo¸ªIôøc§ñ!×£¾QQˆÅ÷mò›býñ™‘Û>Œ^í»¤¯ê«%ç/,�ÖÿöÁï�ëô8°½÷K¹„ޘ䧃¾÷-Yd“;d%¶Ks‰±©ÓNH𲫗=‘’P»œLó”óeˆýnt|ìÃôTN¨wâí‰ôyaƒˆ‘É_“õîÉùFÖwçQ¸¶V¢ÄÔeqN(kß9áx—ì™b¼&Ò²Ü$ë¡oïÆe{â}U�_¶¿÷ yÙÎ[ÄÓËò%õɤjÑÕ§êÚ 4h¼U5öžcCdì“A: â×Ô§læà/»¦ï=�‰¥’Œ~µ÷3H§ƒÙ¯ÍÇNåѫ̡µk~Š2M�ËP¼A;-I^Ö/->BÜ/÷dÍ7Æ^SYì&\OÄ_¹"?b6zlj»é­D^æäBÓ^&5—®*¸f§é[#úÿ qPy¶ /äôͯٚ‹¨oò^I+= ÔK^ò컨Ëç¨O+uܘRàÙTÞšiß1‡·sôî¼SCc.^|�G’3]c¦²k¬6ºPËÖ:ÄuQé´Ý¢=P ¸�:m̘»L© ëjÙZÊ#§˜Ô_VMÇuW†ãº+骯ÎÛ#ÞÈ–x$@q5ç<ïŽfÏ‘Kƒ–Öу*³'wÚõÚ²_»GÛãr2I33¥9,^õü(üûß9�¹8u°zõßí$Ä—ùâ0µøÌ�·ï‚SIÉë (ɳ”åhäÅcnŸ•\Ÿˆô³’u%l‡fÊ^¿Õo‹ðF½ÏX¦êßø·‡U2oée +xö ìk†žm_ëÜJlB£™µTÔoq³&½E¿|–ÉÛgûÒŽQâîeûý/*2 l +endstream +endobj +842 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 841 0 R +/Resources 4 0 R +/Annots [ 843 0 R 844 0 R 845 0 R 846 0 R 847 0 R 848 0 R 849 0 R 850 0 R 851 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +843 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 799.173057 99.933071 780.423057 ] +/BS << +/W 0 +>> +/Dest (cb221-24) +>> +endobj +844 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 780.226036 99.933071 761.476036 ] +/BS << +/W 0 +>> +/Dest (cb221-25) +>> +endobj +845 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 761.279014 99.933071 742.529014 ] +/BS << +/W 0 +>> +/Dest (cb221-26) +>> +endobj +846 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 742.331993 99.933071 723.581993 ] +/BS << +/W 0 +>> +/Dest (cb221-27) +>> +endobj +847 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 723.384971 99.933071 704.634971 ] +/BS << +/W 0 +>> +/Dest (cb221-28) +>> +endobj +848 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 704.437950 99.933071 685.687950 ] +/BS << +/W 0 +>> +/Dest (cb221-29) +>> +endobj +849 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 685.490928 99.933071 666.740928 ] +/BS << +/W 0 +>> +/Dest (cb221-30) +>> +endobj +850 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 666.543907 99.933071 647.793907 ] +/BS << +/W 0 +>> +/Dest (cb221-31) +>> +endobj +851 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 605.596885 101.433071 586.846885 ] +/BS << +/W 0 +>> +/Dest (cb222-1) +>> +endobj +852 0 obj +<< +/Filter /FlateDecode +/Length 4344 +>> +stream +xœí\K�$· ¾÷¯ès+’H½Ã€ $ä`#rØmïÚflrÈßÏGUéQUœîž¶oâÙÙ™î"õ (ò©R•;[ü|áð'³39—ù|ùxút²&‹µÄ梲ÿ„ßÎÎr2Á•˜Ãù£(™T‚OñütŸÝå\üéôí¯NÿØÖqgoJ‰Þ…ó?ß ‹É¤œ’ +«€e)¬LJ>D…�ÁKÑX#$ö|d%ˆÁ%�1Øû¬°2Ä NŽŽ¬1|r¬± †+!),g!‡óÖª<b™É+<L„Ò£ÆóÎÄ\|Qy <—¼Æ#21± Nãc Yã1d Å:� KpÌVãA¦œ4^„,ɪ<Èâs"�— ‹‡vŠÂË�Ö•Ud±Ñ:�WÈ„’™U^Ïæ”�%Ãų>“áÌYCŸ‹á”Hƒ_‚áX’†dxÞi@@²Ž�ƒ, ÏUy�… +kX@² €†D�Å3iX@@[†µhX@€[¶ÅiX@À[¶.jX@\ˆi5, .åÈ ¦T4, `.;5, €.Ü=iX@@] +ÑkX@€]â5, à.±³0p—5Ud�kXt4ä2iXÀÀ]r6iXÀÀ]¸‘×°³j`‡QÃØŠñ9[ ¸ë³e ¸ë–•— |�4,`ஂ¶rw}°^ÃîzöQÊþX5îB‚@¬†XïÁó¤a3a‰†¸ë +–?ŧ�VÆå5,À]—1}*¯— qÅo¡eãb,à.*Ò° wŸYÃ`¼ÁŠê5,À]GX©5p×ùb5,À]Ä A؃q4,Àúfœ…骼blÉYÂÜ,y ° +›�$*/’Ó°`l,âP "pË{Ѱ wm Ò° w-#ìQy�…²×°q xp[ŧ¬ë�¸kfXãw­MEÂÜ•eS˜„ೆÐ +öÄ̦¤5,ˆÅ‚‡�OåEƒë aA² @–ʃ,œXÃÖ¦PÉ$YÈ{ ’‡,4,@D`ŠCô­¦�æ¢æ Y)jX$3¹0kX�BD>­j¼èMN€k•—ÁsI”Ø`)v —2N¯aÞH¸¤aÄϱ†©@¸Š†XŠLöˆÌ5žƒ,²5,@¤ žsdY jX�}F–­†X¡‘KBÕ�­ä™YÂÌÑH¨¨aÜ™&�RåAÀ„†˜I¶ƒ†H~�l"ÍQy�…kX�³—t3kX�3dñÖkXÛ”|3iXP,dAħaA±ÑH˜¬a`méÈêr¥OÝ9ÄškéI¶‰z™F2‘ŸNH�‘îÈ!ô²£»™G»ƒõë‹*ä­Â7¥»kî�BÊfýÝBÞ*ü +yÜ�úæÍ 3XO}á³°aÎõ~•#I²ç~~óñôë¿üöëo~÷ÌΛ§¿~i­Ëøuø­Ç-ð¿Á[Ëi½ŽøŽ2ŒÏ€Ï€r|Á'øá²«óaáIÙú)åãW;¿ùýÉàJ?iöŸœ¼ÆÁ¯)9OYD]¤ûê ÷e“púÎkÏv¡U‰ÜôÝ®Ÿß-RHY‘˜ß­eVæ­Ž´—� ¿}Vš_ikûµ­•Æe½¦I3eý‡Uso×ÏU£U“»6«l¼Ǫí*Ëý:,{Úw“žxê3šÈj/ëLŵù8· KÆ‚kíRh3¼X†´!ãpßÛ‰$·>äxͱ�ª¿·«l¡ÊwMŽäŸ“Ã=Wýóª×Ëb�Á©²É1«hÙÇ¢´-²ù¸ÎmžÚœì§y€xŠ|6ºè¥~OCO‡�pØÙÅe‘qØêèÇ¿_u&»pë÷ÞþU½•ýتÝûɳWýI»Í÷ú³VY[¹=*¸ÅÞ7cXÛÑÆåZ4P¦Ò^âO�¿ÚàFŸ±ùëäãi謕­üClz½¦Or{}†UŸ]¦Õ¯Z{ÎÝ�„$÷ïCÂ0PésAÇ®#ÁÔWë÷�2®ÉÊZ_ËìíêpóÞh?íµ¯jk½î#�c¤óšÐµÓìj§Õêß™oõÜ$¹ÝÕi³‡‚ϩõ'̪ö~çYîÐÿ8l§é¤aãu¼bŽÏÉñ£qþØöÿÎsÜ�ísÆy)SûŒKÚùÂÛ7èqMŸù ÏkØ®¶äôʦ�Å_‡ Ïþô›75« ‘ŸÉù’ó&�‘ä\�ÖdS�ÒΙÈKë<”Ó­ ˆñrø ã5T¼±&Ø’-ï³Ç­×E5ýÒQèò8¬#OK’òÇo¿þúÍŸG’Âïw!khPÜ µAßzý¡‡ÌÏv^�«9B¸ë¼ÁÁflÛ] l÷4xâ9óbÄßMåú‚(¼¯®K'çµsæ:é‡[µƒòÈ6iµo÷å̰“óFÇÚuD|«9Õ²…®[׃“ݼ5}Û­Ž °X›¾%;Ë3ÅÉ9”ôƉ�GÕmâVíìá'™£¦õ»ô�2ƒËšæ»}õ€ïVkræ˜rôQkíí*åÉk®x•òÛfoïûz}–ß=lP7a‡¯²{°ÝWçç¶!oÎp¦P0 °cÇÕàwë Ä¨5N¥u=ÞOÙúi/ÛˆÆ�:ïrË€Éhnp¨}äp~&Wrx¨ïÛñ�xo÷CBL¦8o#©ýO3j·Úí�Úfaw½ç÷vÜ3ÎZŠ�ån@v˜ºå¬÷ÕùlœUž�³ˆþ™(„uUß43à7ò».î2A'ç�ÍÅ)µo÷�ƒa¤=A«Ý“í±Åø\;Þ"'.¶`uÓ¤XÖ¦C·¤ò$Ï6â"=¢�üMžN < Ø�)�kµÃ»iž[”ÙÖÊí¶KÅÓ ùЈhâ= …Ò¢±c«{Øîp}£Í‚E”ë‰ëôÇb ”=­öÛeœÕö‘oƒ&7àGŒ®‹·zúí ñ\5§Šõ¤vñ° í¶†ÏË\Î ç>1Ô76Žò\e‘'˜v�Öm¹g’¶˜mƒ>yNÙ‰Âò ¸¼³Î�¹‹ôßÈÝ"¬é +j¶[5=ÖŸ¶½ªgís¹ý•·Þ¸¤íÃÞ{ùuKÅÑ ¬(aW¬¨[HÛm;¦[Ѽ�íØhœ-ˆS‚Ü‚ÛvxÍ‚’<^»X ¯#¾a@÷UùÜì'!4¸f?/DÇúüß±ï›å ²Pä qýVé3[ðëFÔëö»Rç�íwy0kLãÛï²ÒÒº­ûóo«çTähÀä÷�m«ÛyÙ¶zqá99ìËcÛêǶÿ¶Õ íÇö¿´­¾÷…Ÿç–i {Þ}ËTo¯¸]{7¶Õÿ´>²• ˆ]åQÛh§'Àúªz³È�U´­<dzE‡Ç‹¶Á š”w5!Ü—]�’äñF5À�ë´¶é*K¨U¤u!ða˜Z…¶wt ïýHL6g}>,ÓQ–+\Å£¹×þÞ®ê¿ ·Ý´Ö¾'yš;ö1„6†Ã´}:ÅúX®«¯f°Hª�—w7�#’y(gy8[bצÉUÅ"÷ÕkÖ7^}ê¥Ö—`Yy/†<]§q¾X˪ü«ò�¶~ÕÖØJFôöä§“õ¬�™Ç"xƒ,Äõ«ím±ëkj£]ÊÉÈ]I±õëXx%[¾úÐF#õC«&’bIöíJl~éX!¢ftG²ŒÞ·’å¥OÙÐz»(!6™å4ho�ç²£ÁQñ&Ù‘�ˆáH´Swƒì¹Éãä%]uq»è³êÜ4ý­¬OÓt^#^Nè–öÔ'•*¯šiM5í"ˆm4š„*�ZÉ>!ÜçI!ÉÑÙñ ÛšfLfçO³&ì/ÄÜ ‰{¹ÒÊ)¤ËI-·¶úL¥^*�ª¥i~ˆ2L�rW¼B»LÁi’·ØM>b©}Ý’%þésmód7þ@¼œwOäz\úX: ¬°¡™ÞL¤©ÝNÎvØË ¦ÜT×l4yÜYþ.P:U�§~qÜMJ^Y0®F'â›�¼UÒL�uXÓ€ã4ÊNêr)u›�õå²UÊ èöÒ]cꤲ‰.uo:vðØ’]·ºNkúéX9mÝ rè¦ü´!9CwÕ`{gÑMæz»ƒ;v>ÍäÔgÜÉû'º¼½ÝÉæñR6Þ“Åôsëd�eg¸™Oïl"Á +ƒ<`ô©’›·vt’w굯ÃÉ´÷rúáT—9OÁË�‚HN^§4GYîüo”ù=~ÿ~âóÛ9ÿe÷¶£…ïØº!Ï+™¼|/ßI–—ñ5bw›‰èy‚ýAvy” Íú:îý„×<ªÛì­¤ëê:w&†¡Ã‰ì»ézG“fÂâe§ÅÈüع örImprAÞüФÂÅ<\æÁ£±$Ÿ§&q%EÇ’.û©".æFq9uX†d1Å çNºêE~ž§‚¤¯éb +#ä’�Ç2;7ÝhuS„À4_Ì ³›;-y¡v¯=ï«È±y€P;´wêÓLíj<�Jõ2n/ûšCuç¿9ïÐPo‹&ߣä סo.f�¨yT[ „¹Sn´M§m¡èpšm´Þbj2ŵZSKqVµ”zL1¨?Ìšó¬t%†yV⡬´ÛV¼-Q€ÂlÎiŒÎŽ’=–Ì +-ε;•GIj´cß¼í»­¶çi<‰#2µ£Z8”|ÿñõ¡ ­Tû©;!.�7Þ`¡f—ÈS}‰±Í1CXÞC—8O[#/®s}¯äù®Ì=a: ÙääuÔºO`”ÛŒ©©öªj½Z±ê�^¦e+hÀÜá.WßGZo»Ô ¡~™$U”ד½YÞš˜ì3�tñº�7[(õç?#®^! +endstream +endobj +853 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 852 0 R +/Resources 4 0 R +/Annots [ 854 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +854 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 432.754475 101.433071 414.004475 ] +/BS << +/W 0 +>> +/Dest (cb225-1) +>> +endobj +855 0 obj +<< +/Filter /FlateDecode +/Length 4378 +>> +stream +xœÝ\[‹,Ç ~Ÿ_1Ï—UUª˜€ IÀ!�L0yØ3>›Ö;ùûùÔÝuéníLÏxm/9Ëž�–ê¢RI_Išî¶gÂÏçÿe¶&ç’"Ÿ/?œ~<‘I�ðoj±º˜ØÁo +gKœL°%æpþA>™T‚Kñür›˱ùËéÛÏNÿ^÷±ggJ‰Î†óOŸ„ÅÞ¤œ…UÀ"ëV&%¢ÂŠÖ`‰¥h,ˆ;Þ³Äà’ƒÆ‚ì\VXbxNÖïYb¸dYcA [BRX– ‡uD*‚³w +Ï¡ô¨ñœ51WT^Ï&§ñ¼71± Vãc Yã1d …¬Æ �%XfÒx�…}N/B=©<Èârò/Aí…—! ¬+«<ÈB‘¬Æ+Þ„’™U^�rÊ{ž£`Böž4žµ&À6½ÊƒGa“bRx²D +EåA–àÉi<Y?8|ÊYñV'ÞíÉ[� ‹s‰UdÁækà"d¡5€Á% \J†‹c \ö†3g \.†Sò ¸ Ç’4ðdÁsVO�%pÔ�À[ÈÂð\•Y|a ¼ƒ,h a�÷�űװÀmÖ¢a�Ü2«a�Þ2Ù¨a�àBLÒ°Àq}ެa�äÂ”Š†˜ë��x€.Ü=iXà�º>D§a�ìzÎQÃÜõlIÃîz�ž*²À€5,:o³×°€�»ÞRÒ°€�»p#§avÕÀ£†°ãr& ¸ë2±† Üu G€ÊK>è5,`à® X‚vrw] §aw»¨a ÅH�€»€� ‡�«aÎ{ðœ×°ƒ‡°DÂܵÇŸâÓ@+cs‰à®ÍØ>•WŒMиâ·Ð²±1 p•×° wŸYÃ`¼Á‰ê4,À]ëqRk<à®u…4,À]Ä A؃±4,Àùf,ÁtU^1TrÖ° wKN܆2�Då%C²Œ !Õ° wq¼ "p—‚÷Dà.1•Y|v ®n«ø4‚UCH¡ñ€»d±Ã¸K”І¸+Ǧ†1 Áe  Aì4,ˆ™MI)jX �‡�OåEƒë aA" KåAN¬akS|É$Y¼s$Y2hX€ˆÀ‹è[M ÌEͲ RÔ°HfraÖ° …ˆ| ZÕxÑ™œ×*/ƒg“†)±ÁQl5,@.e2œ^ü‘pIÈže R�,p p™ì™k< YdkX€HJ¾™4,( YB•Y4Åo�IÈ7�N/BWX£ä›YÄÈ7Ñ«%�,ùfRËÀÝP€L¸‹È4jX€ 䛈lµÜž¼!!>Ó™Y2άV Ðp¶ª%öâ´JjÍ€¾’#©Eˆ‰Ì2Gµj€cLKjÙ€€¿ˆÇx‡ sõi,QE˜C™™“,²À-Ñ}Ë9z3ÿJ³¹>öÓ?N_<áð=ÿã?§çϦJYý±0~ÏQë .â +¶pe¦áx*&!~‡ßˆ€�ï�."B*]D P\Jn""b¶åÜ>صÀ�W$¶e¦uñ8-ò‹�òQ•ôÞ.o.)< y=•RÆy]Qe¼Õø¦t^þ�÷né�òVã·r05 m^æ=lžÇú¼½}ó6Ðc}Þ\Ö(ž�ã/‡›«ñ/e¡ XwXÈ[�ßXHß”ã¤L€$ Ù/ú Ä‘ƒ.ÍÓƒ¨wvy‹='ã$æ�hå‹“ ²[âUã¯?œp\.ÓÏßÄ´KëCSq4 Ý::øáôÅŸ¿ýê«Å´žOß}IÄŸ~÷¹Åß�ç¿–¿õ:.ü´\?ãïßϾ¹27b*’8¯ç–é�§?õáë°B~¡Õ)}çᨤàú5?´[èAùß]NŠ”ˆ $°Þ žouØdäÅÚÊnuŽR&³bï:OËá[H‡¸ö êÕÚe‹.›-«º¦µ~ý'ðè€ä,EtĈ¼î×’lã�ÃéÖp«3R„¯È©ÔY@žácÀiýŠÎÄ®Bµ«[ƒI� a¤‹Ê`O]±Íwž¯û}œëÆm Û¯mðÇYÐßX#T–ï,²L))µc]µ7IJ&.¤” Y¼ +f 6Švl.vÛÅy×Í¿êØüž×é²´©ã†Ž@�mÜc222^æµl[c›d•ß§[Vìäcp1nÔyÈ#6cñ�}ï›` eèìmÉ᡹lÇÏ[C81™¯�^�ØQÚ`gÅÒº ›ë-¿�cuW•À7Å)‚DBk²ÅŽø¾z°ÏûqV©‡f¨Àê‘몾i6fC8�¤ö°šâ� Z©tYÊÅ*½oÏ�ƒab´Þáipûëã8Â^*8Ø4)惩ÁÐ-©œ—oñq‘шã8}'€p¿F`C¦ ƒÓz‡�Ã>×Ȳž”7Æ-0l›ŠóW4ä*@#”‰GBJ Âö£na»Áõ�1 ¬rª-Þ¯?KðÙI…qßûi^çd Ûp·B“tñÔ §U–Äsã"A<Ù÷äSÙ"lŸ|õoøêë?þ©ûªËó^9Œ²È"s.ŸÓ¼>Ì×AxBžäšWß'[Åy†Pc3©Ìc¿.Ïfè“;r¬(,ß‚Ëc}~N†ùK¤kŽÒ5Ô´¼„—uP«°Íß¶T^{ãä=©Û{ko/ówX‘“o_·¢f!i¶œçÓ<++šB�Åzò$ïÞ‚€8%äd7^³ ‡4d±ä^çù†ëòîì'ç«ös'šXÖ÷0Jƒ$ír°�}b²Î²j 6×P ¿aø\-¡Æ—)ŒêŸiùûýl9³OYÑbá‹7ðlU­}\{ÌDk¥ƒÁšÝÓ8qßnš�7²U‹<²EÃüMαïS_ÇXæØõáyŽæG¶!ŒÛðÝ—¯hëãÆb_éœ& «L}e=5’ZÒ¦-/ÚÏcŠ´h.ö¹%•r<Øà …©?oN›ËÆõgx… úÉÔ±b'zùþTîÑÛ�3©yâ´¦+r°Ë¯ÉA}-bm}“EÎ>¨È&÷jFÄžˆ÷cÓ’:†eŽQgÕ&¯’ß8ÿ¥a-ÓçÔõÄu,‘/Ð +£gË=¯Ïã>-:®k0>´ñ¯ê�·k›¼Ø-2 ú›±J×=/²Övµoèò�^7Ÿ}ƒ½oÖeëC$´9F\xèㇵ†§…7øÆ”Ê_–1ž7:��ÔJûHkóªãV‡!v¹:Ò 2Õ3wigíµññfüÙ»M�þµ=‹¡CÃÎË�2‡«ïûüÖÉo;†³ÜpîH¯Tý²e÷õäï­î¾—îžÂ»¶¶ã•÷}ï{Kïºn�ÚûzŠïèm¨¾?¨·¡üþŠÞˆª¿+£½ƒ|ÁđïÀìó[[—¹t¡PÈÝU‚÷vã }G.í>uÐy�åú·ZÏÛ–öa [Ìv³M‡Ü=’ƒ%"XÑzß„šh­™졇ævd(9'Çî÷!¨‘;¤9ä" ¯ÌÿJi_wã 7âé¦yîÁË i·ªMû¼7.ò°@K©fçÆßA�ö‡2öZ¼{ËØûÞ÷”±•¹ï(ì'ÉðÞªø¡Â¾<úe!Tv�hÄÛ``Qàà~�xùž°H* Íýxa_Û*‘SÉW4twa_2âl³Ü»õÁ¾< Tc¯ûõǰ„{í{ÿZ…ýèá±@3¿ba=éµ²¬ï­0S¼†¸ïº°ŸlºfEo_Ø_OxÍ‚»j G ûǺ¼7ûI!]µŸ;Ñägö³Üß�H‹è¾Â~î–ùWܯ2.ËËÓF]‰ó KIðy�i™Cʵ­tYKˆÏ‹‡=Í]Þè c®J¤{½¼m >ËS,+ï}¬¿ç¾|.ñ59¨¯å±ü~ìÿŸ|±Ûµ½ëüÊoh*»ó—®gÝOºŽ¯—í¯êÒouy¬¼¿|~Ó²ýô”ØJ–eû¿,Ï¥€Á‚õÓs£‘†Ç™Úùz³É�ó´žAû»öÏvs—ü:LÁ�òâ!äýSÂ’äY=5Ô�ËM–õ[–2]ÓÑ´®ºŒ]Ìâã÷8–WŽƒI”%uiÐ4@^Ü»Ì4ßÓ¢þKwýÕøa™{�§ºt[C¨kØmÛ�§8=cj§÷ PÌÆ:yÑ9²ñ²å,ϵfòH—m²“bíù•žÓë›~l­ä�H^ò øNÛ8^,íœ6øœŒlb= §·¯ÐDF¶ä—“„÷¬�™û�zƒ,Äå#µ±Ø¶ó¹Ò.‘—n["ü¢åc?Ä%&›?ºPW#ýCí&w&2ÕF~z.pžX!¢g´{²¬žŒ]Èò£lür›(!V™AìòضØ;Þ$[O1ì‰4L×ÉŽ«)¤ËI!~NuhÆf6þ°kòôùLÌÕ�¸µ+µ�BºœÔvËh¡íTj­rïZªæ»(ÝÔ}nŠWh—!ÐMòJ¶ÁGÈ×�k²ÄPm¯)vãvÄËiºueK~9…¤´+(TÓ‰~·‘3u{éÔ”«ªàš•&ÏîÊÿ3T„Fä™>Xn&%Ïß÷«>‰øf#¯•4ÒcCÖ4`9õ¶ƒºlJÍfG}ÙLJ{ÝÖºilET6ÐS©â H5ðX“m³ºF«úiX9© +�é:94S~Y‘»œ¡¹j 6Y´ƒ¹‡6n'dž�/#9µ·ò2…&ow°ùJ¼LoÉbú¹NÒÉrów5Ÿ6Ù@ì‚:¹ÃèËD®ÞÚÐI^W?v'ÓNÜË韧é˜s>8ùº!z+ï£,{þ/Ú|ƒß�øüçú0ú|Ž;jhá¶®ÈãI&o’ËÉòf¹Jln3°ßÉ6÷¶¡ZC;Ç�ðš{wêÀ^[Ú† ¶qGbè:È®™®³~ÐL¸B¼l´Ø™Ÿ»7ýÀž/}]œ|Å"¯1¨Ráb\.sçù~$Ÿ‡!q%Mû‘.wạ#.ÆAq9LXºd+1Å ÇIšêE~·ÂË\ÃÅFÈ¥ï<îÇì8t¥M«š öãÅ80ÛqÒ²’Gúa÷úÙû¾ˆ«µA{£¾ŒÔ¶0¡6ÀÓ©~ºŒëËvæøé;€ê¼]Cm,?øžoANw�Zðêb´Ñ�š{·¥A'åJ[MZŠ Q¥µS•).ݪZ¦gUK©Å�úÏQÓaÜ•¦Ä0îJܵ•që‰×¢%ß 0šsꫣ޲ŒY¡Å±w£roé+m?7¯ç®§íyXwAb�L©w »–áß#¾3÷ÙT´Võgª„ØÜ_ß‚ƒšmòÎOoä¥#0„å¥j‰óP¹»ÏõZɾ"Rk%ãLØÃÞS²òne]„0ÊmÆ0T}ï²Þ­�º¤û ”‚:ÌÑ®4½\súf*µË$©¢¼KWžõÌY^˜ÈêßXðRFI«Êôó?ÊA� +endstream +endobj +856 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 855 0 R +/Resources 4 0 R +/Annots [ 857 0 R 858 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +857 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 797.673057 101.433071 778.923057 ] +/BS << +/W 0 +>> +/Dest (cb228-1) +>> +endobj +858 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 446.531993 101.433071 427.781993 ] +/BS << +/W 0 +>> +/Dest (cb231-1) +>> +endobj +859 0 obj +<< +/Filter /FlateDecode +/Length 4384 +>> +stream +xœå\[‹,Ç ~Ÿ_1Ï—«Jªƒ NÀÁ�LyØ3>kÖ;ùûùTÝuéníÌìž5œ8gÙ³ÓR]T*é“TÝ=îlñó¹Ã™�ɹ¤ÈçËϧ_NÖ¤`ñ¯¶Ø\Tö_ð›ÂÙYN&¸s8ÿ,J&•àSg«aw}¶¬aw}BPyÉÀIÃîú€%h‘¸ëƒõ0p׳�ÀP ðǪÙpôt²`5,@¼Ï“†Ìx¤%à®+ŠO­ŒË%jX€».cûT^1.AãŠßBËÆÅX4,À]*Ò° wŸYÃ`¼ADõà®#Dj�Üu¾X pyCаæ` ߌ³0]•WŒ-9kX€»€%¯a¢°±H¢ò’�!9 ÆÆ"Õ° wÞ‹†¸k‘†¸ki�ʃ,”½†ÈkÀƒÛ*>�dÕX¤ÐxÀ]ë°Ã¸km*D஄M b‚Ï@@ƒ,ØkX3›’RÔ°  R>• ®ƒ†É‚Y*²pb �X›B%kX�`Ârú4QE˜CBÌÌIYàŒì¾×£=Ól9ûõÇÓ¾çÿ}zü¬ž”µã'ŽRXq_°Ý€+S‡ƒUXI.ðÙU !àkúˆ© !`q=t!Šn˹p[‘!±Èì�ÌÔ•ño.«wrVGç‰}Q…¼Õø¦t$ÿÎÇ·„`½[È�ßXHjó"É@!†4õú ˆˆkf®DÑIÔvy‹=·(‚‘UE´¢â% +ZP?XÞ4þúÝ €´N¿œu÷KG¡É�ØÉЭ·çw?Ÿ¾øîû¯¾z÷WLûîñô÷?X˾üÜáoÈË_ëßvW~Z¯ñ÷çwß^™èk‹”&Û¹e:T–ÆðmX¡ZimJ<€‘ ~\óS»•¤}y]89BŒ’Ôå \x¼Õ9HèȨ<´•Ýêå ÂIsè\—÷�H‰Ì +ö êÕ¹u‹.»-kº¶[ýÒðì’³S" +#´½\g(cŒG–¬[íÎHî�  jy¥Î29ŠiÉ3:» +Í®n &GÔ>*ƒ= Åvßy¼îKöýòÛ6noøû~}ƒ¹ùà7ï¶•å\8€‚Y‘®I™¯ÂÚ}]^koˆf]\$aHÛd£g�[ÕwlxXmžÆ~w?)ãóaË&¬òyÚâ8mÅÜ�w¾wÙÉá»óvù­¸ç&øÝÉo/k›Ög«{�„*a ¢”î÷¶;û|:& 'jsª ¼Ú£þG͇Ëqœ=U3’߇›x™�ÄæÀy§æ»à3ê{WlRzߌÁËÇàc|ÕÜ0�œ�½ï‹VéñÞÄö¶Ò}Ów!=³›¼µ:ÙÍÞÆ>‡éX”’JŠLNéS"¾åÒ÷õùt\‰•gòöTof|˶0’Írаò.tAnwq=n8ô¾=w„Α$É¡Ãqî‡ÉñoŒ“ƒaË^)–œ¥Ç‡[Ryo�“£ëü�x_\-k½oÏMrûI›ûýdüaÀe¸­!„'c‘­Ø½áÌò-r"Ë�öi©>$T+ƒã¨ûÀÁïWP¾•²Ç–²¿BËí^ä8ñØûaYgµ†}%”À4ð‘pÑuñг‡~¬#žW ây:˜‘‡>P5¥â«oþí�_}ý§?߬aM´!¡(‹,2çú9-{@a¹Âúc•kYý˜TìѬˆ­n&•yÜzÆã]iP'�ÃÀy‘¾Ü€Ç;û|ÌáÃoQÉûº‚gQÒñš\¶I@«¹Ã¾´ß‡§¼õÆê=iØ{o¿&!Ž^`Eeà+ê’ A,^ÂãlE5ÑY­'Wy�Ħ”ÈÚMxÍ‚0t³†,^†Ï·âë}]>5û!P¯ÙÏ Ñı¾ÿÅÔÔ´IÒ/'k  ÑaC‹j .·D ¿aú\VKh ØE¤š>Ûõï‹å,,ÖÛ,|õ^¬ª·�[�©´žrOÞ°Òx•£Z©ßikµÖŠƒ»1ª,¼“»Yûä­RÂô5òÔ?šx�½<`V²:ÞÇþýÄ›Èûµ}êñ¦ÎÁëº/Ó¤v¯{tËêužöE�KWu÷:Üįçp9�ãÛj?n©µ�>ŒIB÷�ËïKp[ž;äûp{¶ß;v7ùÚNqz�Fý^£÷àò°Ã·® R”‘>£�ã¼ £³<„õaôqìêm¬r‹CMŸU~][Ö�Å’]¾hÈÓqÆÙC>·�#}ìÒüÿªÎý^/{¬�q©å³3µ¼¶åîµÍ¼¾¤¬õZ>Ïc]mïCks™Ú;rãËË0-ËóÄ÷aÚåÿÏ^Š@÷ë:ïu½d9Çõ×óÈIþ–á¼ Êyþ Pî8ÎËP®„øœ�rDZ7'íeÚÃ}¶ÕlwB›}•y—�ìÑÍ û+ªµö}¼Ý;JLUsû=d‹þ¦¾Ó^'¡Í5¡Ø5”s eì&ÛgóË­Û±�=Cåuü<ûð@óồî®èKÕU“­µ{?ªˆ†¬#Â\ÕW9èëJV=#vCgÿ8­g½tÍ~´È8G„–­w½ï«©¸ÕGk¥6ùÚΆž«ÆŽ:½¦7gÝ^q#OÎ’¶‹Ü„ÚC� ꥔â”ÏÓ¯1’‰7•Lû4èåÁc„êoÞ­áÖ¯V�GE¨¾æíôôy¿Õr³É�[+ívÄñà³Û=r»½c…!å{"(Ÿåa”’äÕ +õ®g\Nᨩ»,÷ßæ»¾ù’·{�üa­píj“+nTU–õ.6O¦1e\ûJ¼Î÷0|v®*ûøóéb´‡ +³®!´5¶í—S¬¯¹úZ¨•B×Ë÷Fœ#)JS9ËkHÙ÷'à]U¬;?Ó³~ÛÆ/½•ü’•wrå}¬º�óÅÚþ—ºÁ?#%a[R_–·•Œ,$ìÉO'¹ÓË +™yd27ÈB\?Ú>»ž5Úåä`±eß’‚±ëÇ‘=Éí¹å£m5Ò?´nò< ÛÖˆêkËÄ +=£;’eõÖ¸•,_8‘ ­W±‹"E'Žyn;o’Ù‰ŽD;M7Èž›©Tyͽ Õ´‹”±Ñhªtjh-û†pß'…t9)ÄÏmš±™�?íš¼,¸s3$îíJk§�.'µÝ:Zè;•z«<º–¦ù!Ê0uÊ]ñ +í2UI¾AgòKíã–, qßk›'»ñâå¸{â ?�BRZ‡�64Ó›‰4�ÛÉÙ{Ô”›ªàš�&¯ZÉÿ T„Nä©w“’×%ÇÕ˜D|³“·Jšé±£kpœFÛI].¥n³³¾\¶J{ÝÞºklC�T6ÑSiâ HuðØ’]·ºNkúéX9mÓ rè¦ü´!9CwÕ`ûdÑMæú¸ƒ;v>ÍäÔwÜÉ»¯]Þ>îdó�x©��÷d1ýÜ&do{´“MÄ!@a�Œ>UróÖŽNò}>íãp2-â^N?�j˜ó¼<-ÉÉW9ÌY–;ÿm¾Åï?O|þ®½;¸Äqo;ZøŽ­òÉä‹ò�dù" Fìn3=O°?È.�¶¡YC�ãÞOxÍ£»ÀÞZºŽ ®sgb:œÈ¾›n}‡¯k&\!^vZì‰ÌÇîÍØË%µÅÉó�òÖi“ +órp™�FH>OCâJšŽ�.û©#.æAq9MX†d1Å çIºêE~ž·‚d®ébJ#ä’�G˜�‡n´ºŠ© R`š/æ�ÙÍ“–�<ŠÐ¯v¯�Þ÷UäØ<@¨Ú;õi¦ö… µžN¥z·—=æP}´9ïÐP‹&ߣžä שo.f�¨yt[„yRn´Í¤-Pt¸�çî­�˜šLqíÖÔRWœU-¥žS êO³¦Ã¼+]‰aÞ•xh+㶈׳%ê P˜Í9�ÕÙѲç’Y¡Å¹w§òhI�vœ›·s·h{ž–ÁC�82S;º…CËWáßk|gé³;uÐZµŸzâòxÛ�Z^=ðT¿@Ñæ�!,ß�“8OG#/îsý¬äx"ÒÎJæ™°†‰lròU˜ºO`”ÛŒi¨ö5™z·bÕ%½LÊQЀ9{8 ªß…VŸÅ­Bý2I©(_}H’ôfùƦd�þð*¯Ç(ys„Rþ ÜÁùª +endstream +endobj +860 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 859 0 R +/Resources 4 0 R +/Annots [ 861 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +861 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 797.673057 101.433071 778.923057 ] +/BS << +/W 0 +>> +/Dest (cb234-1) +>> +endobj +862 0 obj +<< +/Filter /FlateDecode +/Length 4884 +>> +stream +xœí][�¹­~ï_ÑϬ•Dê l€$@òÀÁ"XäaÜ;NŒ8yÈß?Õ¥KU±/3gˆ×;ž.RŠ"?R*µìŽÞ9ü•Ù™œKŠ|<}:|>X“‚ŵÄꡲÿ„ŸŽÎr2Á•˜Ãñ“(™T‚OñøtÀ_›Ç¹øÓáÇ_þ¹®ãŽÞ”½ Ç= +‹É¤œ’ +«€e)¬LJ>D…�ÁKÑX#$ö¼g%ˆÁ%�1Øû¬°2Ä NŽö¬1|r¬± †+!),g!‡óÖª<b™É+<L„Ò£ÆóÎÄ\|Qy <—¼Æ#21± Nãc Yã1d Å:� KpÌVãA¦œ4^„,ɪ<Èâs"�— ‹‡vŠÂË�Ö•Ud±Ñ:�WÈ„’™U^Ïæ”÷Ã)‘¾ñ$ È:ð¼Ó€€,d 5$ Yž«ò Ö°€X¯aw=û¨a Ŭš w!AO VÃÄ{ð“«ÉNcLº ¥¹¡$·&Ëò¹•ŧqeCƒ¼¶¡™Ž¬©YKïÎI\Ql(ë6”'Ê(½%‡8ÊöîfâlCQµ¡Nƒ] íhú=}óÜ_Äs%U—ÿŽû +Ê®´ÓÇðIwÈ‹N¶ÒÛ¤ûoÎ÷ÍùþÇœ/Êé¸ÿð 盞F<+beÙßœï›ó}s¾g:ŸêdÏK9/8ä7ÇûæxÿcŽ÷œ”‹BCåMy(Ñøp7YS�|dòòS¨Ë²òE•®¯EewÝ.ÇþA_™:r¦nVðªãà°òµž¢.íó+½†´û½”ß¼? ‹z` ¿ æ\_µÈ ˆ$ÛÅÇ÷Ÿßýåw?üæ÷ÿ‡6ß<üôkk]Æ�“ Gyå�ÿñ™Aƒ¾mxÀ�ÇOíqáÓ™ÆñsÂO\~K�øý_�ïÿpA9©Ðå�®¡5¤»tnÚÇs÷þtnÆ8Q?Wõn¶ýÓòã‡ó¸è1lÆ’§ñÅ«ºÌš-¶ùichm;w”b @º¥Â@ù׈Tmvùã9xÌfo³•�kzmcn·Œ>™(ļÕcC†aõ#Â6ï—HåyÒ]šdµkk¯u®F,–´ù"Ö¾�޼´uÕZƒãKr|qÄÚ·]m²LHÿqiëA÷ÆyZti6· ß%ßæ„µþ2®-*]KUµ45\�×@Û1×úÒÞÏýÎÙØ$k‹ªmÍ'Ùf;œu$úpW3’�ÈXGžºLS!ß%X–˜rœú’c3Þ +ÕYô›šxØyUúÌ*ÿ�‰àÖëy"ú££ÐÅuñÚDXñ7TrÕ7¬?µX¹¡ófÕuI©>b'ËÖʼZô ”¸î%\‘—íQŽ�Qh¸.Ø]U^eçá5¦{Èc=¹âõé æº{ºp±ñ 'ÎYNü¬Ÿ!îrí˜a~)�Wj;;$A‚¦SJ&d—m¸mLW‹¾–1É)ÑÌÇê�,  Ü’ìÎ:oÏœr0 Ãø‡ j–Ñ2Óµ™±ß˜]ØüöëgÉ0{ÖxIL¨ÀI0âFÌ» ÓË—¸˜9¥vxÔ�1yDa+ß—{ÆÜßWç—C^ò!§±I4ÿÜïýëfš�£‡“ÅnL|)[�VïÛ¼=íH©83yµvX>¼6ã-jÚpÁ<!3+¹¸c6±É)ÞëÆqO�·cQ¶°%Õ4¢½ 9OJ^ÎçÞt–«E_ ³%“K¨‡ÁK‘sý>ÞJî¬óö Ñ8ÇJÏÒz;œÓíÌ`x÷º“û29Aîl5ý}퇯\naDÁ¬ºT<©ã’\å¼9@p Ë—®B*)Ý4øëE_Íà*±\ŠÉcY._ªÉÕŽ¯Kv_�7hðQŽÒ[ùj¬š³”�IÜ�þ®~nú»¯}Þnûf#Ž“NnÉs(ºaÆë×%SšäëuÞíÀ™1 „åàVÁµ5Ù9ùð ·ÚµÀ�›·]aãäM3\ï±ÔÔKò¥ñ?lBmÏðKçe*'í‰zëRg“V´ßÂû}6+_íCÍŽ’Љ™(Êkùú¥ê T¸¯Î›IY2„(ìTt0øyRo…{ÜaŽ^«.ªc¼U;Ã\A«}»ïÂXFÈM•ÚuD|¬õ¿˜OX›Ï]@³oí¡nÌ®7–ÒÆpíÚ€é±îIõz;‡HGØÜ�ånŸ±PW%<]p‡€IÁ +!Б`åÄ)†[û@wÖy;î ’Évix�ȶjî§c—3[’¼Ñ­„f6è]‹·Íql+µ*¥ˆ{©IbFq_4¶9nîjÏ/ÌnºüìŠhí¦,õr+'¯>õ¤ßÒ ô� ;c<§¾wèÞ,t�j3L ¹àðÈ„4,wïû›;뼇/òZŒbÔãßKß߬›}�÷7û6ŸóþF©ý…ïoÄËåʆÌ|„�ŽYît¸jwÖy3æQoÅð.¢ÖkÚǦÝÙ@‡MbДÿ§å¶Š$/샣z˦s\~Ñ5~³È WÉÕ/©ì.VEŽ^E^û$¹ÿÎcØ%ÉÍ.Ú÷>䈹/§v€­œ¿&Q¢.¡ÑOG–Û ¨~`r:ä)0ߢµ£×åL¯‡Ö¢íG¦Ûçí�ÀÚŸdQR:ò½j¿ÿžäiÇqûBÃ÷Ûiû|ˆõF"Wo¥³°çåÚÚcdC2å(· e ôlÓäªbÝñBÍzÙïç^JþÉÊ•€rT�Æùa)ÿ¹N𧃤¢1Íó]�¶’³oƒüt�»ZY!#ôw’…¸|´½-Dp¿¡�ò�°MI +Æ.Çñ\çéB�Ô­šxÛVˆê-2çŽ"jF·'Ëè‘Ó/d¹ï6Zžb%Ä&3ˆ£AžËŽGÅ›dGv"†=ÑNÝ ²ç&�“ûѺêâ vÑgÕ¹iú[YŸ¦é¼F<Ð-m©O*UnÙlM5í�&¡J§†V²O÷yRHò¥Áñ�mM3&³ó§Y“»ÊÎÄÜ ‰{¹ÒÊ)¤ÓA-·´úL¥^*�ª¥i~ˆ2L�rW¼B;MGØ“\à=ùˆ¥öqM–S×}®mžìÆïˆ§ƒ¼áÜ‘ëE÷¥ÃÀ + ø{"Mívr¶Ã^5å¦*¸f£ÉMOò÷*B§ +òÔŽ»IÉmmãit"¾ÙÉk%ÍôØQ‡5 8N£ì¤.—R·ÙY_.[¥¼€n/Ý5¶¢N*›è©4ñ¤:x¬É®[]' „5ýt¬œ‰¶ �î9tS~Z‘‡œ¡»j°½³è&s½ÝAŽ;Ÿfrê3îäê½.oow²ùF<ÕÀÆ[²˜~n� ²$ØÍ|zgqPä£O•ܼµ£“{i‡“i÷tøû¡†9OÁKR±tKëo4»ãPæøùÇ��lßp>Çqo;ZøŽ­+òÉäÞñ|'Yî!oÄî6Ñóûƒìò(š5ô8îý„×<ªÛì­¤ëê:w&†¡Ã‰ì»éÊû¡™p…xÚh±'2_:7#`Ÿ© Ý�\zפÂÃ<’3n�G#$§&ñ$EGH—ýTs£xœ:,C²•˜b�s']õ"?ÏS!5æ‡)��G<avnºÑê(¦"H�i~˜f7wZVò(B¿Ø½¾xÞ‘có¡vhïÔ§™Ú&Ôx:•êc\?ö˜CGyhÎ;4ÔÛ¢É÷¨'9Ã5FjÁ«‡ÙF'jÕ–aî”mÕi .@³�Ö[LM¦¸Tkj©#Ϊ–RÏ)õﳦÃ<+]‰až•¸++í¶ˆ×³%ê P˜Í9�ÑÙQ²ç’Y¡Å¹v§ò(I�¶ï›×}·h{œ†ÁC�82S;ª…]ÉáßK|G½TB+ÕþÔ�—ÇeŸÔrîÌSý÷[lŽÂrwâ> +endobj +864 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 393.004475 101.433071 374.254475 ] +/BS << +/W 0 +>> +/Dest (cb237-1) +>> +endobj +865 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 374.057453 99.933071 355.307453 ] +/BS << +/W 0 +>> +/Dest (cb237-2) +>> +endobj +866 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 355.110432 99.933071 336.360432 ] +/BS << +/W 0 +>> +/Dest (cb237-3) +>> +endobj +867 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 336.163410 99.933071 317.413410 ] +/BS << +/W 0 +>> +/Dest (cb237-4) +>> +endobj +868 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 317.216389 99.933071 298.466389 ] +/BS << +/W 0 +>> +/Dest (cb237-5) +>> +endobj +869 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 298.269367 99.933071 279.519367 ] +/BS << +/W 0 +>> +/Dest (cb237-6) +>> +endobj +870 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 279.322346 99.933071 260.572346 ] +/BS << +/W 0 +>> +/Dest (cb237-7) +>> +endobj +871 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 260.375324 99.933071 241.625324 ] +/BS << +/W 0 +>> +/Dest (cb237-8) +>> +endobj +872 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 241.428303 99.933071 222.678303 ] +/BS << +/W 0 +>> +/Dest (cb237-9) +>> +endobj +873 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 222.481281 99.933071 203.731281 ] +/BS << +/W 0 +>> +/Dest (cb237-10) +>> +endobj +874 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 203.534260 99.933071 184.784260 ] +/BS << +/W 0 +>> +/Dest (cb237-11) +>> +endobj +875 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 165.640217 99.933071 146.890217 ] +/BS << +/W 0 +>> +/Dest (cb237-12) +>> +endobj +876 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 127.746174 99.933071 108.996174 ] +/BS << +/W 0 +>> +/Dest (cb237-13) +>> +endobj +877 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 108.799152 99.933071 90.049152 ] +/BS << +/W 0 +>> +/Dest (cb237-14) +>> +endobj +878 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 89.852131 99.933071 71.102131 ] +/BS << +/W 0 +>> +/Dest (cb237-15) +>> +endobj +879 0 obj +<< +/Filter /FlateDecode +/Length 3166 +>> +stream +xœÍ›[«$Ç ÇßçS̳aËRIu³`Cpðƒaƒ &ë¯M8Xç!_?õt]zFç¶»&öñÙ™–ê¢V©~¥ªîÃgÂÏ+Æ?U9ÔÚJÖóÝûÓ‡…’ÿm%›ú{ü–tfÒ·\Óù½ ¤„ÒR,ù|Â?W—kñûÓ_œþ}¬ÃçZË‘Óù·ŸM¥J-…’£jP‹£J)”SvT™n±5O3RѨ·ª3´Õä©`†ÆXU…¢…åVÕ`F,¬ž +fpKÅQ1ÁŽD®†�ªDGÇ)d8={ºÈ!×›«+Ðq‰žN$䢜ØÓµ�sNÕÓ)lI�ØÓ%Ø’X•<lQ©ÅÓeØ"YÈÕÁ–X‹xº["¼Ó]…-ˆ®êê` ebO×$¤VU]]ƒŽj©·ºH)¤*BžŽ9$Ħ¸:Ì( R.Ž.–L©¹:Ø’„¢§Ø¢øñtàD’R«3[£Ín!aO—`KŒE]lÁà{ˆ¶PÉ0ƒ‚qÉc@,%h‹êA V Zµzˆµ-E< Ä–‚æV<1t‘=Á–¤Ù#�0lQÌ\W[¤©Ç‰°<ˆÀ–¨â±@@[E´x,àV©±Ço•8{,f’Çq¥fõX @.B©y,0WÀN�èbº�êJÊÑc�»¢5{,pW”Éc�‚»"¨éê` Øcè„«x,PpW˜ŠÇw1�¢ÇŒj@f�ˆ•k%� +îÆJê±@ÁÝX°¸º0Åc�‚»1ἕÜ�‰¢Çw£Æì±�Àr³pI~:[X�Xï¡‹â±�…ˆ´ÄcAw¹aùsæ4h¸¶ì± �»\1|®®.ð¸3oáåÀ97� ÜÅB% ¸ |V�`|ÀŠ=$p—+µ§w96òX�À]ä ÉcÂ!0�XßB×Õµ@­V� Ü–¢Ç¬Â�*HâêJ@ ±ÇÀ8òP�ÜÅòÞ<dp—’ˆÇ‚ î’"íqu°EjôX€¼:L[gN#Y A +Oîc„=¸KTšÇ‚ îÚ²é± Äê±dÁÑcA®Z)ÙcAnR>W—®“Ç‚B$ ËÕÁ-걉uhҪǂa‹Äè± DØ‚”Ác2‚ÐÙ·»=€-w °™¢Ç�,Ԧ걠¤Œý¼êér µ×®®BÇÅcA)°³Çì¥BŤ÷XÀK—<À èX=”[0U<`) +5"3÷t [�d{,@¦ ³Ç‚a ²A�5Vì23y,À +�½$\íé”lŸY=TÍÁRE�˜&Øi‚”®¶ 0>¶ÙN °ùÁfÛW[$©Ç‚Z£m7«Ç‚ZaK¤è±±iûÍâ± lAÆç± Q–&{,Æ¡#òXиb¿Õcæ¥í7«Ç‚&„ý&¶xμm’m¿Y<4…- )Š«ƒ-Hšš3oÁ$ì7A'O—aKlê± ålûÍê±iö›ÈèÝ#�jûÍ※©�LžÜEfš=àûMd¶ÞÞžÞT�ŸùÊj;ÎêžЛ°¶ºGöbµ*¶Gr `&v–5»§XV¡dr� üE>¦7L¸œ>­GTáP°fÖb7Ù0-ÙýØsÌbò@±ËùØo¿œ¾|‹Å÷üËNï¾ØNÊú#øE³m¬“M‘Ø0ÜÀUØšÓ퀇�ûÂf! ü˜:fDiÓH÷C73K1–Ûv_øh2,6›ÉÌvgºö‹�c¨$û¶¾¸Îg²uúÈÎJ0Ql _œ„¤k� =¿>³Îg÷ëÚït’gë‹ë|~[Ñ!wotì×7ò‰ÂOZ'ößùöËF +œgùTáÏl¤ô~±@`ƒ‹íÅÙÒŽ"Û’]”–œ,–¾¬Æçqôc¹jF)iÑÖv»2ÒCáoÞœ€ù½ûË„q¹˜ ÿ*<éüæýéËï~øúë7C·oÞ�~üʶöûúç7ß>Ò2ä,T�‘CkÖ€"‹Ð»×¯xkâOoŽ>«)(v°ü¹^~V��òòïá܆…‡Òì:W ü‚Ï÷O¬TZòB¹*µßpÒãE?Á;Ç^�´ÙllÛã� lò”aϪòÇ›$áQ%ÒY/¨yÿüiÔ'æ v�Ä%Yvwèà2óžšu¶—`ª�½Ú ÿ÷ðJûg·rÿ¤ôºÚȉÌyï)Ÿ—Õ—·SYÁFróÀßÿüõ7ùëô@TkßBÚ¦»õ}aG„,ýd}šw.eR//!Ïÿ|í¼=4‰uC?6јöØÀòöÌ:ÿo@¤a¯ØÃ‘Ô(º�Å|*{œ¸×MÀý¼î$1ꪤ£nPæ«%DÞ^‘(ùí&9–ÓwûçÝ•=wÇPK»¼ßO÷ò‚Œ¶ù¢¬µú!¸‡Z’%ÜÊþ}GI—ë´‡¢¾Û|p™h³Óh�_št^uº�ÉCáÚê={l ²'=®Ï«ó)IÎ﵂Ay$jéí3àóö2"=RzDl²5ºÔÓcÄY¹tµ~nÉʳú~AÔI’Ç¢nDTÙá–ú [¢Îr Ý£­nvÜFœb×›já«‹8{¶G6×ÏJŸžWåoö¸þáx{t¼»ç¾ß÷ø%¡›Ä²�ÍfZŽ †¿ž,ò„nzòtæ«dåvhÒ^îÁ�D¸¡;sQ|E¬ ’÷‰`GujxÅoÛWÞ˜|Aá–“Ð%-HõçK9¦=Hó´ï.ˇɷU=_~6óÞÎÞöXéßîÁ}·gõªý´÷½Ø£û„÷�ú=¼¾¶§¼�ãòö,��9q´—}ÎYƒØ8´³�WǼ9–ÏÔÜ^‘ú0JíoM‘=HµCôË+UËÅ^þÃ6ÀïOÜ4˜ÿ-T/o8Ð&®±_LñýÉÞpQG¬â3Å&Ü¿ÒhK¹²;LøÚuIL'Ú¿¶Ñ¸Í±ËטúÝXýÔ«YnªÔ Évöv騢fæ[±Ý=ÞÅö–P ²_åaJÊÝfgƒº–� ΊOŠYh¦[!-ÝMqÔnÛS¥áº<…ÃôÕu¼ /Ë2œ� ïNèV®¥÷®Ô†ÞT÷n¤!“Ũ6¤©—¢cœÑÝɾ¢Þ´b0‡~5{ÂsÖH:ʵ^ÎÝ�Ür{kiŒT¥ê¬Úºç§)3Ô¥Ç;²ÍG»´Øk�Ë!é_�âl#ÐÇšê7ñFxwJ:fâߟRqJ§É +J=ôV¡,íq¥/SZjw¦f—Ùù¸ý{AER#Ïö…u„”=ãšW³››C|tÒ*σ:êy€µÌ²‹»¸”³«¿¸’SÞ ;J�¤‹Ë9Ò!Mç�£˜GÔ ±!¬ûg°rR7ÝMq¡|O;Ó˜ª‰Fg™—pO£Ý)΃�÷«¸Œg{`9ìí.1ß…wÛ¦×b ýÚ;™âHcµ›�-Âi 0Å£÷›¸ÏÖA'{ ³�“Ì[qïN¿ž¶e.JжeÏÂöþÍšeñù¿(ó-~ÿuÒówý�Ïe�4h[âu%³·5ë3ÅööfŽi³£.ØŸb®³lêÑ0Öñ^ë¬Nì½$‚òЮÂ4}¸ˆãÝȲx&="¼»òâHd>ulæ‚}¹”~sdG'çPv±Þ.ëÔÉ\’ÏK“¸²¢sI‡VãRk£¸\:lÓ²ƒ™�k'Ãõf¿®C!Ö×r±¤v)S§s™]›î²í.–"H�e½XV^;m{£?zz}ò¸ï&ç>L:Ð>¤÷«tܘIð|©l—ùx9ÖÙ΀úä�mÉ2÷d$9sjÌÔBkŒ.Ò:«íÒÚ©vÙ¡Ó¾P \@F]6Z,ݦ¼WënÙ^*#§˜Ò_WO§uT†Ó:*ù¦¬µÛW¼‘-ÉH€ÒÎeÞÍ’#—¬Ž,¯µ‡TgIé²Û¾õØw_mÏËmè4$ÏÌ”fµtSò£ø÷1sçRçêÔÁ+Õ¶“®ó ,ÔÊE¢lõB5g¶'lØ’­ËÑÈ‹ë<~Vr{"ÒÏJÖž0AE¨°ýý’oÂ=íiÅÒTÿÛ&¿Z#÷–^æ€ß5¹UØIÐöûv ¶�Ëb[Eû{±¤·Úk¶…Ø=ÚŽ�ìåíáeûù™HÍ5 +endstream +endobj +880 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 879 0 R +/Resources 4 0 R +/Annots [ 881 0 R 882 0 R 883 0 R 884 0 R 885 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +881 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 799.173057 99.933071 780.423057 ] +/BS << +/W 0 +>> +/Dest (cb237-16) +>> +endobj +882 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 780.226036 99.933071 761.476036 ] +/BS << +/W 0 +>> +/Dest (cb237-17) +>> +endobj +883 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 761.279014 99.933071 742.529014 ] +/BS << +/W 0 +>> +/Dest (cb237-18) +>> +endobj +884 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 742.331993 99.933071 723.581993 ] +/BS << +/W 0 +>> +/Dest (cb237-19) +>> +endobj +885 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 681.384971 101.433071 662.634971 ] +/BS << +/W 0 +>> +/Dest (cb238-1) +>> +endobj +886 0 obj +<< +/Filter /FlateDecode +/Length 3336 +>> +stream +xœí[K�$· ¾÷¯è³�•%‘z†�H8È!ÀFä°ÛñØz¬sÈßÏGUIbusfgväàÙÙ™.‘zPù‘R©ÃÙãçMÀŸÊÁÕÚJæóåÃéãÉ»’<þõ‡Bgÿ¿%�ƒçâRh¹¦ó!Pq¥¥XòùzŸ›¢®~=ýðÕé_Ç6á]k9†tþåGa1¹RKñÉ`5°| ƒ•’+%¦l°rp˜bk b¤Â‘ïYbp«ÉbA ޱ¬ +1ˆK {Vƒ±¶X#´T Vð�#DïMñÌ ^H.CéÙâÅàrm±™¼^(Ñâ¹\8¤`ñšË9§jñ²¤æƒÅK�%foñ S-/CÊäMd‰µ�Å+�%B;ÍàUÈëª&²øìƒÅkäR«Ì&¯�çk©÷¼è“K•È[¼\‚m’ɃGa‘r1x²dŸšÉƒ,‰|´xY?8‘¨Ôjxkï&OÁâ%Èca“Y°øÄ Y|ÉÀƒœà’…±Ç-²±’ãÊÕB�X›ãRÈ‚�Ø’ãÜŠ…äx1X@@²$ÎP€, Ï5y�…[X@² ‚…D�%2YX@@[†µXX@€[ö-XX@À[ö![X@\ˆé-, .ÕÌ ¦Ô,, `.;-, €.ܽXX@@]J9ZX@€]âš-, à.qð0p—-Md�[Xtt*YXÀÀ] +¾XXÀÀ]¸Q´°«ê`‡ÙÂØŠ‹µz ¸«g ¸ B€É+>H0p7&LÁŠÜÀݘ|´°€�»‘c¶°†â€?ÞÌ€»€�d§�kaâ=x‘,,@g."-±° wCCø3|håBmÙ‚Ü Ëgòš 7üZv!çfaAî"P‘… ¸ ø¬ã"j´° w!R[<ànˆÍ[X�€»È’…0�XX€øæ‚‡éš¼æ|«Õ‚Ü,E …�¯@“W )XX0vy¨…¸‹ðÞ,,ÈÀ]Ÿˆ,,ÈÀ]ÏH{Ld¡-,@^ÜÖði$«ÎG …Åîú€¶xÀ]ïK³° w%lZX�‹bµ°:dÁÑ‚\ÙµR²…¹yð�ò™¼ìPNBd™<ÈÂ…-,@bíµjaA‰�…b´° DÈ‚”ÁÂd®dßæö²À\ÌýCdŠÉ\mÌ””±ƒV-^Ž®ÀµÉ«à…baA)슃…ØK¹ +§·°ï$]²°b€ØÂ‚Ò \Å„"W#2s‹ ’l �é‚‚…5BdƒÔX±ËÌÞÂDhì%¡j‹Ç^ö™Õ‚ÊÙIªhaÜ;M ¥Éƒ,€ °>²ÙN`óƒÍ&¶9&²Pb j�²Ý¬Ô +Y¢�À6e¿Y,,h² ã³° ùì$M¶°0ž÷´P±ßŒlaüRö›Õ‚FûMlñ ¿m”e¿Y,,h YR“Y�45Ão�IØo�,^†,±±…-gÙoV �f`¿‰ŒÞ<¨²ß,æqp75 “Åî"3Í €ý&2[koI ?³™UvœÕ<1ð€Þ„Øjx`/¢U1Ï <ÀWöHæ¡ÄÄβfóÔaÌàÍcüE>Æw˜°�>é#ª s(ˆ™µÈ$Ü‚‘ÝÏ=ǪF�TÛÎÇ~ùéôõ;ßóOÿ>=|ÕOÊÆ�ØF'LcµcÃj8A!Ø"¯ÍŠ|¹"3½!`zÔ¸æ[b?µèÄËI‘±-:±Øë‘ŽÝ`ít5òÚQ[ɦ¨5E¾ž°YÀŽô†œÒª;‡ÓD^ý.òšÉUQפ×PK;–~/§°ÐuK›•‚°&N‡|0Àø‚ïÆ�&²–¥­µˆ.ûÙ%jˆ!†ãZc©e±õ©U¶Æ¿*=êù*­kr7Y5ÇbÛPÑA¸#Y¶Ï£.žîˆZä£ i:²¦a-s¸ qŰ¡jÛPU6TQû–œòª;‡ÓDmCÙ´¡I]“^C-íXú½¼zîÿÅs%U—çûeÚ™sø`;ä£NvЛÒý«ó½:ßoÌù²ü+çû‡8ŸXÍX+â`Ù¯Î÷ê|¯Î÷Bç3�ìe)ç#ùêx¯Ž÷s¼ç§œ÷ûýïÞž Y¿TƒÏÆŽ¹ö×ò–¾È‘æùí‡Ó×ýÃï¾û㟰|ûpúÛ7Þ‡Šß€ß"ÇòøŸ½gП)mÏ ¼”¿ýûùí÷�Œ!oÊçÒ-zòÌh¶O~·wå÷Ï Ýn]††�w|Þ¬"ö½Ž8Ëe€³¼“�TÇ¡~û&|³„O‚–ðÜöÓÆK{;L¨òE¤ÙŸßíuÏVDçI½>C]n[ü°×W¼÷qoåyéXÏ×ßêlÓ¼’ã²�7e<Sw7ŽÞ†w/ûÊ&{¾þ½|ìscÕW]4iç/»ä}*ù08'–e ýˆ®êÖ‡ÈþqßO&9ЖK÷ýôù¼[ó�|OÈAÑ?&Ç®+.K'iNq³tC6¹<“=ÇÜŒ¾ûz_6{êrÒÞWÞ~;OéÝ?ìõ†LïÖuYª²¡½¿Þö²Ùœ%s¯Ÿ·2«>º]Æãx}-‡�< + ËG6›Ý=©s¾Õ‹èº·›²tÿÔØ¶oÞèmèàý�+½æ°Ó†L¿ÚiÔ{®/ ¦=!%Z–O#dZ³áù +ǪMôç÷Kë»×½ùˆ¦ù›%íÏé'~=á€Pü+ È}?/CNü˜_Œ ÷}÷(øXÔ¬,þ9Þ›ž×GÄÛÑæf.³¯¸Ë¦äÓÞ,Þ�.{ÝѾ×{RÏåVáVû‰¤¼t Ã�ÍwÞ°¾ÑÙîåÒF€! „M»Î.ÿ�D~Øuqk'» þþíþJ ß•ö稿·Ï^½NÚß6<£ÊÓ/$Œ—Oûè÷¯*�¦ªuC—rñ˜Ÿ[‘w¥V–*P/[v:ÀS’½i{�Œi©«/ù{¥Záý¸Õ þ&Ó}ØLPè‘ý +²u=[Kßíæ¤ÌæÐRËš�À"c¦1‡»eûxÊýè÷¼|®.D¹~ÎŒ¬Nîלå^AõÄa,SèŠ çGZöëóg­ýF½—KvrÁb»n¯ +{ý�}�? +±Ë#îôÛ¯¾“k…E¾žäö3dæ¼>Aâþèg_f,´Ë)�ì²njRr~\“ÒxŒiÌFÚ§ÑLÞJ#ñˆ£$6¿ lÑ2‡{²ÌÞ»°“åyu´—ò{ô6‰«CÖuW‡«á'É�¼"¦{¢WÃ-rä!O�GSuy§èZuA-ÿ¨‹ZΧˆì(Ç|õjRåÞêèjh¹ó ‘ªMj5ç‚ð\'ƒ$Ûð;â?ºf,æä«U“Û?±CâY¯�zér2ëí½¥¹ReÖª«iš_¢,S§:oÐ.*©,ò•å#žÆã‘,9Ç\k_•ÝÄ;â儜„ïÈýèå¾vZXáÓ0=M$Õï$W¿ìeQKª‚kšÜ��¿T¤Iäé�§IÉý§UZƒˆoNòQIšž'ê°¥�ÀeÕUê +¥L›Õú +Õõtgí©±U©LÑKâ HMð8’ôºIú™X©‰~�á9MS¾ÈKÎ4]Æ>ËA™{šý.ržØyÕä2W<Èe¶)ïìWÙü ^z`ã[²˜~ƒ,rô3Ú­Áq PXä£×NÞ:ÑI¾ 3—“Y÷rúùÔÃ\¤›ÎS�»Ù:Ë +çÿ Î÷øýç‰Ï‡õ[�~¢EœØz ëH&ßä©Ï$Ë7{qº�"FV°¿È¡®ºiXÃŒã1*¼æÕÜ/`5ÃDÐ0¹š˜–9NÓ��”fÒÄË�g"ó¥k³öV¤19 Cr�lH…‚žŠuñh…ä³ê%©ºB:¸UCt§(ªÛ’ì ¦¤dª^äg½$c©‚J#¤H‹Ç+Ìê®­ÏBUA +Lº ;æ my ¡?Û½¾xÝw‘óð¡NhŸÔ«¦Î‰ užM¥^ÌÇâŒ9t–ÂpÞ¥¡Ù)ߣ™ä,×X© +ÚFµ®f{…¤åA; :Å„ Ðü ÍË�)ï͆ZúŒ«©¥2sŠEýYk:éU™JLzUò]]éwD¼™-ÑL€’6ç²fçWÍ™KVƒ–uëIåU“í~l>Ž=¢íYMƒ— ye¦~5Kw5? ÿ>ÇwÌW`V­ñÓOBB]×g¨9ŠÔ¿íkÎÀ–/µ®êhäÅm>÷ò¦ Ëá˜È— ßm·E¸‚Ñ>ÍP]�ï½ÛÍš7§ô2> +endobj +888 0 obj +<< +/Filter /FlateDecode +/Length 3182 +>> +stream +xœí[M«d·Ý÷¯èµadIUúcˆ! 8d0!x1ÓñØ„žÀ8‹üýœR_}ôëóÆžñ" ¿÷x¯ï=¥+•JUG%]u8{ü¾ +øW5¸Z[Éz¾¼?}8yW’ÇO/qwÓÅÃ_Iç൸Z®éüÞ)®´K>_Oø÷äv/~=}÷Åéß÷Ï„st­åÒùçL¤âJ-Å'"jù D”’+%¦LD98t±5&‚©hÔGQ�Újb"¨¡1V"ªPC´y5¨KP&‚¡¥BDÁC�½§2(âU%YH.Ãè™Ébp¹¶Ø¨¬@Jd2—‹†˜¬¹œsªL¦Ð%5˜,A—T=“A•Z˜,CÉâ© ºÄZ„É +t‰°N#² +]à]•Ê ‹Ï>0Y—ZU¥²™¯¥>Ê¢O.UÏd!¸ß*CDa�r!²]²O�Ê K™L ‹â—ÉÀIJ­$Z£E·x L– KŒE© º`ðÄ ]|ÉŒAÎx‰q@,Åi‹ÊH VqZµ2ˆµ9-E Ä–œæVˆ�ÅÀˆ@‚)˜ ¼ëF˜ÉÀ»Þ—Ƹ ƒwmÚd\�‹±2.€‚Ypd\�«ºVJf\�›‡ )•e‡ûĸ x ”EeÐE‹2.@b횴ʸ Dè"12.(º e`\€ŒÀµ€ì›.  Ü…®º Sd\&sµ©2.()c=«2YŽ®Ð5•UÈBa\PŠ:LÅ�qÖR®"è€à�¥KŒ  dA”]*Œ 0¹‘™3Y€.H² Ó…,Æ5BdƒŒ j¬Xefϸ34Ö’05“©·ufe\P5;K L°ÒSRtM0.ÀøØb;1.Àâ‹M,s¨ ºHRƵF[nVƵB—è#ãø¦­7 ã‚æ¡ 2>ÆÍggi2ãÐ8dÞ3.h¡b½•qâÒÖ›•qA�õ&–x$n›d[oÆM¡KBŠBeÐIS#q NÂzìÄdºÄ¦Œ ZζެŒ �f`½‰Œžn T[oº]ÞM ÌÄdà]d¦™qn°ÞDfËÖöÄ› +ò3.¬¶â¬tÇÀƒzæVºeàÁ½˜­ +Ý3ð _[#ÑM¨‰•eÍt×Ó*„ÁÓmþE>¦œpÛ}Ú·¨2Ü¡`άÅ:ÙŠì~®9V1y¦ØmìçO_¾Áä{þñ?§w_ô�²ñk¾‘,HAÓíØ0ÚïO0–‡Èkó_Wd¦O`M�² ×ü컼œ6ËR°C0�½ÞãX ÖŽoÍ!¯¥7Ý6ô²õdƒ¯',°"}§´ÊÎævPW½ ^=¹nèêôjjY‡Ù÷rúýa¯cY¤R0­YÐ! p¾à»sàËÒÖXÌ.ÇÞ%J˜#†û±ÆPÛ`ïC´�2kÿºÙqïïfõî.»õ±p*{EÅî¶åó(‹«ð·|ïC;ެixËl.ؼB|¨rª›U”~ +§¼ÊÎævp÷¡L}h¢«Ó«©efßËKäþ_"×Ruû9?^–½³ÎìÃ{�ÏÙ�Ý6Û¿ßKðý΂/ÛO9?^|Bðí +o=Þ qçÙ/Á÷|/Á÷‰ÁGƒìÓRÎgò%ð^ïwx¿>å|\ïóúÍú¡|6uªµ¿°·ôŶ4ϯߟ¾üûŸþðÍŸÿ‚õãëw§|å}¨ø ·O/ÞG|¦·øÃÚSí²”q}Á_Âß;ÿþþüúÛgÚ³·æ³=k"*Auö¾Üª±êF•)ÞšèMçuoͧt»×w·æBÃÀϳ@¯Ö-ÖÇN4Û¡�³½»�RGë¡~ý*|5:¹]ëÞê Oáö©íèð`Ç3¦�#]ŽÞè­ÌÀE†ÖÇ3mñ¨W·ë¼ž›mäCvÙʽù„ÞëÓÞ3M»–‡†}8/7m>åÍ�×c¸ßšÅûOýᦹ>Œ-éÉëöçˆÕטoº½;,˜nÏù·öñhÍaÁ®žñ—Ãjù0W¾³BY€é£rŒn÷Íz«Ãô ÿ|¬'‹m“ÛQŒÇzúh¾9tK]¿�è!Ñ?§‡?Æ ã£GHn1Ct³#9ÙkÌ�ÔÝ=·�˜:úoúv½­þ·›—ÿpØ"­1°vûuYöêãYŽzû ýG,3ý‡ÿô:Ë¡C^õ÷zä(÷àǵ«>í{š‘¹GåÖþÑn8Æë�¯�-µ~ÖПS�þÞ+ûm;öØ­ûE>¾¡G6o�Ö·ú@ó[ŸQ¥œD¼Gxb+ö®�±¼‘œQ�Ãe&0ìDØŽáN›Yò͆É;ù!o#×Éî0Yw¥vÃ�ê'½×uýÔz{o÷ºn^ŸÔŸž ÏÛ{*è}H£Ãöá”û;²ÐÏIø\]ˆv�òœiï§Ïö^®zÑ0†)tÆó3Oöã§f©ãDª·C*ö‚òv\u»9Êèü ®.Îî§Ç|‡k7 ¾žìô Xuÿ/À—~Ö¥aÎ#»œ‚X–ò¤¤$ç�Ë5ÙH—1�ÞØói€XbèŒÄ÷¥Ëc鴸§áz;([½®~ùËB±t9L…И½{´ÿ7ªH5æéA§KÙù�u·±Øœð½‘v»Û RÞHw–ž»C7“m8–Ó~V�'yÜÃazÝ„�†}&Wî J ¹§éÊ×;xé™f¨ÂÙGc9lîžf½ Γ;¯;\æˆ; 2õ�õn>?ÀKŸØô)l®_G# Ž~Îv«± \Š�¼hôÚá­“�ì€û¸\AÆfÜËé§SŸæ¢¤ØlsK‚�mܳ¬pþ/Ê|‹¿�ôü×±Ùu›Ç£Ÿl'·ÞÁûLf'á믄ídügØl`Ô�öê*›†7Ìy<Æ�¯u=î±�’a2h˜ÒLˆ§ëÆ ›eÒGÀË+ÎDæ·ŽÍš°o·2:‡fÄŽa ­p³w·uÉdMÉç­JÜYÑ5¥Cªq{7{¥¸ÝlK³;5Í!÷F¦éM݇B¬­ífK#ìV–L×4»W=°Þ‹­R`ÙoöŠ5ì�¶;}ˆÒŸ^¿yÜ•óˆC'µOôº£³c†NÂã¨ôÛ|;ç9ÛÍÞe¡Y—l±'3ÉY¡±R ½»Ù}tCëzì(�öFu`w�މbÒ0?°Yc:åã±a–ÞãJ­TfN±ÐŸvK§}T¦Ó>*ù¡¬Õ;f¼™-ÉL€ÒîÎeõί’3—¬ËûÓÕURöض޷=fÛóÖ ]Šä•™úõXz(ùYü÷9±C·�Y©ñÛwBB]ÇÏ0Qk(¥£ÐלÁ!j‡Â‹Ömk䓟ùÜÃO{K§"¾ûn(Wá +AûeÁVÕøÞ(¬yÚ¥O3À³çøè†è_êo +ú†Ð¼-¶T´ïŠ%½Õ¾ÂPü3/ôØF¹Üm¡ôßÿ{rÇ +endstream +endobj +889 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 888 0 R +/Resources 4 0 R +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +890 0 obj +<< +/Filter /FlateDecode +/Length 4326 +>> +stream +xœí\K‹$É ¾×¯¨óÂÄÆûË‚là ‹1>ôÔLïbz ³>øïûST*B™©ª®êéŇíiz:CŠŒP(¤ORTeº£ÅÏ;‡ÿjt¦ÖVr<ž>¾¬)Éâ_ï±jtößð[ÒÑÙXLr-×tüL„PLiÉ—||:à¿MSv:üôÍáßë{Üћֲwéøë'bÅ`J-Å&…ÕÀ².(¬”L)>e…•�Á[ÓX#•èãžU Fl5i,ˆ½¯ +«BŒ‹ {Vƒ¾¸¨± †k©(,g!‡óÖª<bc ^á¹d2”ž5žw&׿›Ê+à¹â5^&—è’ÓxÍäœSÕx²¤f�ÆK�%¹­Æƒ,1Ô¢ñ2d 9X•Y|-AãÈâ¡�¦ð*d�uU•Yl¶Nãµ`R«1ª¼ž­¥îyÞ&“jVã9gl3¨a Zäîúd½†¸ë£ÏÀP ðǪÙp’ôt²`5,@¼Ï 0˜ñHK4,HÀ]×þŸZW[Ö° w]Åö©¼f\�Æ¿…–�˹iX�€»TAÂÜ|V €ñÕkX�€». Rk<à®óÍjX�€»È’†0ã�hX€øfœ…骼fl«UÂÜ,y …�­@•W ÉiX06y¨†¸‹ðÞ4,ÈÀ]›Bа wmDÚ£ò K¨^Ãä5àÁmŸF²j¬Rh<à®uØa�ܵ¶4 2p—¦†¹ÁW  Aì5,È5šVJÖ° 7 R>•— ÚIÂbAH€,•Yb‰ ±6-´ªaAñ�%x¯aAñ�)ƒ†ÈLsȾÕò²À\Ôú BdŠÉLm1jXPRF=­j¼ìM-€k•WÁsEÂR¢A(v –2N¯aÞPº¤aÄÏE Jƒ,p ŠLõÈÌ5žƒ,H²5,@¦ žsTY� jXP}E•™­†ˆÐ¨%¡j�-Õ™U³¡TQø *M ¥Êƒ,€ °?Tl' Pü ØD™£ò KHQÂZ=•›UÂZ!‹·^ÃØ&Õ›EÂf! 2> šÍ†Òd ãàY«aAsõ¦�À/©Þ¬´`Qo¢ÄSü¶…LõfѰ EÈ’�¢¨<È‚¤©)~ LB½ tÒx²ø5,h9S½Y5,@š�z½z$P©Þ,êqp75 “Æî"3Í �z™­VÛ[o*ÈÏtf¥Š³ª'Л[Õ# ìE´*ê™�øR�¤@LT–5«§«`:«Xà/ò±¸Ã„óé“<¢Ê0‡‚˜Y -²Á-"²ûQsÌnáB·óùد?¾}@ð=þüŸÃã7ý¤ŒÈ69)`»ívûó +Ayˆ¼6 òÈ™é†ÓÜàš·Ä~jщ§ƒ #Ë:8²Ø§5U]ít1�C®¹ô² êI¬D�Ÿ(P‘nÈ)�¾s:IÌsÜIž+yÔ¹è9ÕÔŽ¦ßÓá'lô9ÆÔ&@¥ ¬Ñ­Hwa{ÎvÛÀ´•¥Í­v.ËÑ%z�ºõVc§i¯å‰MÖ¦j”ËJ—än±b‰E7¡"*pk2UÏÜW;âÊ„&ymB’Žä‡�eLç(l*&du²Â„*zoÉ)OkÓI¢4¡¬šÐ ÎEÏ©¦v4ýžÞ÷ÿ⸔©Ó¿ãþBY©�¹†ÏºC^t2©7©û7ç{s¾ß™óeúWŽû‹;œO,W,±¶ì7ç{s¾7ç»ÓùT'»/å¼à�oŽ÷æx¿3Ç»=åÜ—û?¼?@²þ�ümÑÄXû§ô!}¡Íãûχoÿþ§?üðç¿ ~|ÿxøÇwÖºŠ_‡ß:•·Öão-¹åoÂ߈ßÇ3?à7ùs;žð›—¿Ô7ÿÏãû®a‡ÆwvÞÍ& +YbîîCC¡8*‰u–äûwî»)Mÿ©ò"I=K“Êùšx]:´éÓx’$¹ó8ý:Ÿ¯©?¯¤ßK¼&ÆH´ª¥ï"ǧ,÷¥ÕJ;�ïí4šãa¹§²g?–È´�/-Úä>·ë²mu9ÆÌB¼že§G;.º“²±^ó~½öý÷ºõ:†µœkÈ‹èYÊìáM1�àXæ0ôCc�Ç �º�ûqr ƒjú2Ä~œ¾¶‡¹g�ïšÅ_’cÑI\ìee;þì!Šlô¥˜l£ÏM»Ûrô¸ŒÅ{BãvY–¾‹NÆ>¹¥¯"ûD÷಴¯øOï·²mÿ—qÙSºªÓ¶]w_Íÿq‘!/þÂ㞦ì‰×² ë¡Ë„ÎN{}ŒµçýXc­uîëVç4žs·£XÞ”çQ,Mïñt'Q JÉ„§…Î}³@ž¼h˜Æž5×û-HÄ<ÚÑnÝ�ÂêrnÇ–2ðÓR—~4ÿ§?œ¿C£i«QÞû.i8ó(ö\àÛÜ÷½f‡XÒ²¶/ÖÆ*† ÿÒwîõ014úôë1q?Î}˜ðº$ÇWcâ~ìžUä­å®­öl‘kl±ÿqÁ…ç6ã”Ä:Æ’aáyÒF\fL}<Û�[æðéÜÞÙI\ï‰}\˯ê8nõ𒵬t"×W¦Îú¸iz8ñxmaÑ5˾ÃˇÙî÷³÷_ÀÑ>V˜úÜέïÙU=å�žnчŒ'Û˜—¹Y?lm^�œð41ƒãJÊs|Î¥ÈXi:ú½&ñûØv‡iLR�¶3¯¥=PÎeÓ¢{5ǪÙY—çÁª9Ű{áçëÈ3uI_ç¨@>ÕÛŸْЭý–õö¾·î…¥d¾³•«¯‰÷«¬ÇêëôìË×t—¬ª;‘W ™/èÇC(c;†t}úó¾RåO¢�ΕWÈ{ãšÅnô—ö>w» ^]óŸ_×V_®—ž+¼Î÷Øû[¬‘÷Žc[QìVÉu»Íž6¶kFËœ@Ô¦—lpë�Ž}ãªß]Õß“wcðÉ@x2j#>LûæÜ¾ßóñº.¸~ˆ7êäe:8Ë~mm=†VîsUg:»‰G—ê¹QËÜ_¯Õ�ë¬Ü^Ïg¾]ÊËf5¡côsu]âÓ¤rMwy�û|Ýnrõ©»a2o¼b{j¾É×\C‹º�mUÚS64ò…‘/koó|«ï ¯£Ì>ã´�÷CÆ�åÜkØLÔë¡Ç¶okÿ!›À4ö©‘ ¦ic=O¶r×9ú-¶ýŒÌ;¬¾f“Ò_eŽÏ¶Áy½–kwú­¹‹›ë ?’ëöð•~—Â\Ç3:ÚçÈYè˜må$Ö’X÷KgE^ÿ +öpËüÃÏ,Ž +öû;çþ¸øñ&–§rû D±Å¸çÏt²@ÎØ–Êñ\Y­ÏcVç;ÂÇéööt�¥ÿ ¬bsæN—O’'zÌ“ŽÕ©µ8¥`¯½(ÇØ=q”ì�§ÔÅoõú:§&%'ã_áÔd?Î}§&ÕºKr,ÞôòS“ýØ÷ž$û‘íUO�/øÆu„¾ªc¿ÕÃi„Ïh™Óõ,Ä®3†mÆ2Õ±¬@™¹Ï–3 +‘½röO¨ÿ¼ì<©º¶¾ÝÉÍUýÅ­þF¥Ì{ÃΦ_épk[ù\µqõnX—§n=B~²¤sÄäÊ_î�¿U'~Ùç£Þ'üµÒóÏÏFƒewƒr2Ëùõ=ŸÅ�-géÿA�볺M¶NùIÃöóÂnÅ·k©Ù­–Û½X­Œ]cŸ¥¿\õûFOõ¿ÆïÇÙŸî]•ƒžÚÿ�0~?6ŸÂq¦¼=Å~(?ºçÓ¼í©ñ…O Õ^q2"ãÎmŸ¶¶]«Œ\QòõJŸÃل̺޷¸{O,\�,ˆ¸¡êÒ­uµÝ©3yŠž®éÊY·UÖ]BݱÁ²\_;QŠôÍÇ ·ƒîß/+ô—¸Øcr¡?P˜­xÎeyâ†.וPžŠYfß?DñÃ{¹’ÞH@óÑÄVè!.íû3ÛØÇU}� +lo7Æ:®ÂFü|<«šè^~úPçõ67ëó-'û}‹„ÏŒñùdRȳŠõ4gâ5ì¶íË!÷‡]Ýæjœ§7Ô V7K;Ò�Õ†èx›\W¬;^¸³¿×çËèµ¼êÇÒÓÿôäçù=@¢±ôÿÒ7ø3BT4™ƒR-‡íäê¹1ÉOz-KTÈ1ÎÈö ™ˆË¥cQnµ¡�.Ð÷¿6=C2v¹œÑ4$¾ô‰WC÷'¾�—‹–;…þÀØyb…ˆ;³Û“iõÖ¸…L¯¶©&,­KvÁ +bÚ­˜n’}dy= +=T—'qˆ.UçÄös_T¡þ&âé€iÖú¤Ré…<k×ÛA B¨6¨‰{Ž ‰cŸ}ApG|gyèˆÍ|±kôXò™XÙ�âè׸ŸB:Ô~ËhiìT½ê¼µ±æ§(ÓÔCŠWh'‘qzW—ðørM¦Djìµ­ÂnüŽx:¤8?â÷_‡xü+?FpŽãÞ´ð[WdÉècõF2½rŒ‰ÃmÑGû“ìêì›ØF÷^àuœ·Û ìÜÓ uƒ+‰iêP�ý0]ï‚ÐLºBIêXQàéÔЛyÝ1'©ÁÎ;54Æ +Â÷ÂHr¦kÌÔ"®ÒFµÎÛ–IN™¶š”Å€ Ð,ÓÆˆ…eÊËm¬–¾âªj©ŒœbR‘šNrW†“Ü•¼ëKãrÄÙR P’æ\æêìì9rɪв¼{Pã옶Ÿ;®çæh{ˈS�<3S;oK»ž/¿—øŽúpŽÖ‹úIˆ«ó½ÔÑ•àCU«­9C"½m«Ä*ŽFî¾ç¥¯•�3a;L ÁG/ÝÕEx£=ÏCñ yõÛšU—tŸ.¾ E}”Êõ·.ög°ú�ÐhÒ§˜ž^²(é­ôn¸b/> +endobj +892 0 obj +<< +/Filter /FlateDecode +/Length 4317 +>> +stream +xœÍ\K�$¹�¾ç¯È³�‘%‘ÔX 0v°áƒ�6 Ãð¡:§ÚÆ¢f�ñöïû£2¤Pd²2¢ºËžššìª õ`PÔÇG(2œ=~¾ ø§pp¥Ôœø|ùéôóÉ»,ÿµ›‹Æþ>YÎÁsvj*rþI ”]®s:¿œðÏÍåÜüåô§_�þwÛ'œ£«5Å ç<+‹Éå’³ƒUÁò� –ˆË9J2X)8Üb­ bHæÈ÷¬ 1¸±Xƒc,«@ âèžU!FÌ�-ÄU²Á +r„è½Éƒ ž™¢Á ┞,^ .•«ÉËà…-‘K™ƒ‹W]JIŠÅcÈ"Õ‹'�E³·x�…©d‹— %ò&²Ä’ÉâeÈ¡�jð +d�u“Y|òÁâUrR ³É«àù’Ë=/zqRˆ¼Å Á l“Lv)eƒ!KòRMdòÑâdaüX<à„P.ÅØ­Qw7y +O KŒ™MdÁâ[dñ9Y€ä—, ˆ9;®‘-ˆ…. +ÄRçL Ä*ŽSÍ�àÅ`yÈ"œ,$ Y;×äAªlaEÈ‚A–ÈdamÖbanÙ×`aoÙ‡dap!¦·°€€¸T[X@€\˜Rµ°€€¹ì´°€ºØîÙÂê’¤hav‰K²°€€»ÄÁ[XÀÀ]"ô4y�laÐÑQ(daw)ølaw±�¢…XU;LÀV\,Å[XÀÀÝX<[XÀÀݘáL^v؃daw£à,Ï Ü�⣅ Ü�“…0üñf4Ü„ˆ@¬…ð÷àE²°ƒ¹ˆ°ÄÂî† +÷gìi • ¥& ¸ +–ÏäU24nì[hÙ…”ª…Ü…£" ¸ ø,ã“—®Å‚ìA@–Ƀ,œÙÂÖ®R-äY(F r„,,,@Dàj@ôm¦�æbæ Y)ZX$s¥2[X�%!ƒV-^Š®dÀµÉ+à…laAÎìàŠƒ…È¥\Á¦·°ï4\²°b€ØÂ‚\! ¶Š…pE®DDæ/@Ù Ò/ J„,ˆ-,(± ËLÞÂxhä’PµÅc¯yf±° pr*ZX€m‚LHiò `¬�&Ûba’$›HsLd!a J‰šn J�,ÑG `›šof ª‡,ˆø,,¨>9 “-,Œƒç½…5䛑-,À¾Ô|³XXPÉ#ßDŠgìÛJIóÍlaAeÈ"QLdAÐT�} LB¾ t²x ²ÄÊÔ”4ß, Ì@¾‰ˆÞ, Í7³Y.îJ2Y<à."Óda.�o"²µr{à•ŒøÌfÍ8‹Y1ð€^�o5KØ o•Íš�øjŽd &2˒̪Ü*˜Á›eüE<Æw˜p­>Í%ªsÈð™%ëMVl Ft?r޵½ÒìZûÇßN¿~‚ó=ÿíÿN_~Õ*eý'Àø‰“&ÖH7R�Ë ¸rm8F0ªA3aÿ4 !à×ôQ!r]… €Å¥è¦BÂÃÝÖóø#lE†Ä*s@0ÓîŒçy‘),%[Ö7÷y'YW%Ѹ(âg%!膯QÇnéõ`Ÿw×ë<ïª$KÖ7÷ywYi!OBX/ÛyM!÷ïJGúßùþ�! ’êÃBî5~G!ï�á7ŸNð€×ê{:O¶ˆ�!–÷ÓO§_ÿù¿~øÍÿ«óéËé/ÿXfï¥x䫸\ðwÖ8ÿ#°a|D:]yáÇïÿzþôÛy®è5¡‡?”í\:¼§kóÿüUµª#ÁYÁÒ´nÙ6s Ú§´p6çÛS�¡Ý7wù*3]tê¢ÆÕ¸1G5jç‚ Òó�¢¥ÏzÕÁ¸ŒÈq·jÿýŸ~øáÓWµ«jù3>eùû Âd$.j�˲”+�ûR}¹.…òCÐ?,¿ùó¤o­¨/¦©…þHhQŽêƆ /NÇœõýæ.ÿ}sŸõªïqH†¸!?R¸×@�ôaË÷ß]„Ëõ·*qCç…ž–ëהР€‘B`¿§Ì‡M¿A‰ÛYc`Áj='M¾H + v¨Ë{€ÿ»,÷*wÊ}ñ›µÜcéʲ”¿¯Àõêà¢uWnqïfðÇ^ï�,Ù‡,ýÞõ~•$–WŒ)·²ŒzÜ]czØô½Œ)"ŸŽ%!¶j�ß|E˜½'ÙÁ>Ïœ�C¡·Tm¸þ<¡BPX^ÌëËÖÌ8Þ˜�ÜüŽÛk�qýeÇ´ ‡ "Ät#æ!ÃŒú(“™‹½åÙ6Æö,>§ÈÖþXŸ_Úa¬òjÖ…ik¶ÍŸã»;ì_fãîd1„�…CÊœ«¯©cî/;'.LÑì-=¢Øšñ-jzyÅ<`‘™uARF¤µ¬ÇÆq¤ÇÇ1�û¥ G,ÓHþµ¤z™9§]Üô½ œ¼8¢rh'*ç˜ö‚ƒ}>„ë³m‘” +ÙAÞBï€sÚ� Öݽ�äXd uÔàK Vï§¡syÚÈŠUE0ɼ/�Uô(„~lƒ'Òr`Õ2ðžÁ?nún/âJŠúÌAôJ)íqÀcÉŽõù€¯•¥‚ì›_I1oÌ¢¬&Ö7CK[5ãÿ¼g*«3ÚNÛfzÞÎ0ò¨Ç'³aŽZîçSÓä§›à¾Óo\Zÿ­< Ãõî[»|#ãäÇ}|¹¿�§ù~\ÝæÐt8 ¢�’¥ãåË^ï .Ãü|6õ³×;꟢Àn¬¦Þï� ‡;¯®O79ö�¾ÅoCznéù¾ìI»%‘lYâ®Þô¡¹–ŽÈÒúþÜœœR¨VïCzKI DUV½>ÿÌ=Ñž’Gµc}>LÈEa‡ÆCÕ³¶íº_Ûõ¸k&¿¶{ÜÛ8÷ÎÓÞVKÓ>¯FÝ�÷€øÜ\ßòÇ8ajs3¦î†ϲ°#†Le»Ñt<Y>{ R÷šÜ…™ ¤îzïCÜR_17L+üºÕûÄ ì9 +zšóÿ¬ÁöÉQÑ'‡ç’\ˤx Žuù0PÀÑ»XL¯Ä5}ƒìÃÆ!_Ý yÈü&¹ïý–‚€1÷Ó3;ãqŒÈ_‚)ÅRZ<O­åcœ‹íw˜ôô¼OØýð$.øÜå<¶µc}>ޱ1¢ÿìõľil—5Tü±.Fñ¢/ïIÛî°.j²ÕCzÜ-0Œ~­7}¯r Hv5±±®rìÔñ.¯(¼P¢ô0h~#N{g;Á[+ßFo¹¯É�üvõµ�Û‘µ½xôqÓoÙwín�ÀJzœ”S ùMG°´ú.Ó!m#½Írö§ǺÕPJX…ÒŽ¢E}/Œ¨�–z¨ªƒ}~i¬'~ôå‘쫾pj–Œ–´º�ìI÷Á× =ß<^©÷�Rï+ªÆ¹^Kš�”ÝŸìÓjiÕ—¨n&mú}Åô2Bß·šÞÁ>»¦÷àå¿Â³ÔGèŸ@ÜÓ’¢\¶Ñh=8á©ßMÌèišcz.qlî7X¬ä‘Õ ‹Ê PI/GNV·blÖVš÷‡”´JÉáfÂGWbê֤͈µô�•‡w¬ËG³·öêÐëööp½»æþ°¼?�õð˜jï}!ç]_GúÚm²£Ÿ;9B´s¸ ‰¶f‡!õ‹C°$Z®Yßµ1¡ð/×ÃÊm#èk@|= –ŠMì†ü8u«%pÕn;eûìG!m|^ Qá]éÍC§ëgÀfZÆ)½ê²Ì÷´÷Å�Ó»›ñe™{’‡— 3îAú=|»l?ŸR{G,´÷„=â3„ªúΛtêY�Oú2…¦Øp~¥gûú•ŸG+ý$¯/ië zmç‹¥ýÏm�:…ÊNõ¯¦zýößÈÈ8å–ürÒoÏ`ƒÌÜÏPï’•¸üéÇXÆ‘ìN»`Ã#˜¿m‰íä—?Çáñ¶Ç®Féw£ý¥wÓs�í„åJmþ:±ADÏîÉz÷Þ……¬ß@R-Wiˆ¢uœA\ä¹í:àÚq—ÈOD¹'úiº•¹Ëô�Õ¡º´‡è³ê´ü½mÌÓr>"^N˜–n©/&U†>T×nôƒF“PuP¥· Âc� Òåd¿ó}h¤Ëað§UÓ·G¯ÄÒ ‰G»ÚÛ¤ËÉl·Œ&c¥òhUÖ®µk~e5u*Cñ­éh¡fýJ¥i�èû}f²KkíËd7ñŽx9 ��¸’_N’�Ö²b…—nz3‘¦q¹øÕ^V*’…EUØš�¦ïÞé¿W¨�AUäi&¥ïÏ®Wë$º7y«¤™žê°¥�Àym;©+ä> +endobj +894 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 766.923057 101.433071 748.173057 ] +/BS << +/W 0 +>> +/Dest (cb241-1) +>> +endobj +895 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 747.976036 99.933071 729.226036 ] +/BS << +/W 0 +>> +/Dest (cb241-2) +>> +endobj +896 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 729.029014 99.933071 710.279014 ] +/BS << +/W 0 +>> +/Dest (cb241-3) +>> +endobj +897 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 710.081993 99.933071 691.331993 ] +/BS << +/W 0 +>> +/Dest (cb241-4) +>> +endobj +898 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 691.134971 99.933071 672.384971 ] +/BS << +/W 0 +>> +/Dest (cb241-5) +>> +endobj +899 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 672.187950 99.933071 653.437950 ] +/BS << +/W 0 +>> +/Dest (cb241-6) +>> +endobj +900 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 653.240928 99.933071 634.490928 ] +/BS << +/W 0 +>> +/Dest (cb241-7) +>> +endobj +901 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 634.293907 99.933071 615.543907 ] +/BS << +/W 0 +>> +/Dest (cb241-8) +>> +endobj +902 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 615.346885 99.933071 596.596885 ] +/BS << +/W 0 +>> +/Dest (cb241-9) +>> +endobj +903 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 596.399864 99.933071 577.649864 ] +/BS << +/W 0 +>> +/Dest (cb241-10) +>> +endobj +904 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 577.452842 99.933071 558.702842 ] +/BS << +/W 0 +>> +/Dest (cb241-11) +>> +endobj +905 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 520.611778 99.933071 501.861778 ] +/BS << +/W 0 +>> +/Dest (cb241-12) +>> +endobj +906 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 501.664756 99.933071 482.914756 ] +/BS << +/W 0 +>> +/Dest (cb241-13) +>> +endobj +907 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 482.717735 99.933071 463.967735 ] +/BS << +/W 0 +>> +/Dest (cb241-14) +>> +endobj +908 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 463.770714 99.933071 445.020714 ] +/BS << +/W 0 +>> +/Dest (cb241-15) +>> +endobj +909 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 444.823692 99.933071 426.073692 ] +/BS << +/W 0 +>> +/Dest (cb241-16) +>> +endobj +910 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 425.876671 99.933071 407.126671 ] +/BS << +/W 0 +>> +/Dest (cb241-17) +>> +endobj +911 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 406.929649 99.933071 388.179649 ] +/BS << +/W 0 +>> +/Dest (cb241-18) +>> +endobj +912 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 345.982628 101.433071 327.232628 ] +/BS << +/W 0 +>> +/Dest (cb242-1) +>> +endobj +913 0 obj +<< +/Title (CIS v1.6 Benchmark - Self-Assessment Guide - Rancher v2.6) +/Dest [ 6 0 R /XYZ 85.009843 502.818898 0 ] +/Count 141 +/First 914 0 R +/Last 1050 0 R +/Parent 1055 0 R +>> +endobj +914 0 obj +<< +/Title (CIS v1.6 Kubernetes Benchmark - Rancher v2.6 with Kubernetes v1.18 to v1.21) +/Dest [ 304 0 R /XYZ 84.259843 784.970079 0 ] +/Count 2 +/First 915 0 R +/Last 916 0 R +/Parent 913 0 R +/Next 917 0 R +>> +endobj +915 0 obj +<< +/Title (Overview) +/Dest [ 304 0 R /XYZ 84.259843 704.822079 0 ] +/Count 0 +/Parent 914 0 R +/Next 916 0 R +>> +endobj +916 0 obj +<< +/Title (Testing controls methodology) +/Dest [ 304 0 R /XYZ 84.259843 166.076079 0 ] +/Count 0 +/Prev 915 0 R +/Parent 914 0 R +>> +endobj +917 0 obj +<< +/Title (Controls) +/Dest [ 309 0 R /XYZ 84.259843 612.381496 0 ] +/Count 0 +/Prev 914 0 R +/Parent 913 0 R +/Next 918 0 R +>> +endobj +918 0 obj +<< +/Title (1.1 Master Node Configuration Files) +/Dest [ 313 0 R /XYZ 41.740157 784.430079 0 ] +/Count 21 +/Prev 917 0 R +/First 919 0 R +/Last 939 0 R +/Parent 913 0 R +/Next 940 0 R +>> +endobj +919 0 obj +<< +/Title (1.1.1 Ensure that the API server pod specification file permissions are set to 644 or more restrictive \(Automated\)) +/Dest [ 313 0 R /XYZ 84.259843 684.651496 0 ] +/Count 0 +/Parent 918 0 R +/Next 920 0 R +>> +endobj +920 0 obj +<< +/Title (1.1.2 Ensure that the API server pod specification file ownership is set to root:root \(Automated\)) +/Dest [ 313 0 R /XYZ 84.259843 553.851496 0 ] +/Count 0 +/Prev 919 0 R +/Parent 918 0 R +/Next 921 0 R +>> +endobj +921 0 obj +<< +/Title (1.1.3 Ensure that the controller manager pod specification file permissions are set to 644 or more restrictive \(Automated\)) +/Dest [ 313 0 R /XYZ 84.259843 423.051496 0 ] +/Count 0 +/Prev 920 0 R +/Parent 918 0 R +/Next 922 0 R +>> +endobj +922 0 obj +<< +/Title (1.1.4 Ensure that the controller manager pod specification file ownership is set to root:root \(Automated\)) +/Dest [ 313 0 R /XYZ 84.259843 277.251496 0 ] +/Count 0 +/Prev 921 0 R +/Parent 918 0 R +/Next 923 0 R +>> +endobj +923 0 obj +<< +/Title (1.1.5 Ensure that the scheduler pod specification file permissions are set to 644 or more restrictive \(Automated\)) +/Dest [ 313 0 R /XYZ 84.259843 146.451496 0 ] +/Count 0 +/Prev 922 0 R +/Parent 918 0 R +/Next 924 0 R +>> +endobj +924 0 obj +<< +/Title (1.1.6 Ensure that the scheduler pod specification file ownership is set to root:root \(Automated\)) +/Dest [ 315 0 R /XYZ 84.259843 739.970079 0 ] +/Count 0 +/Prev 923 0 R +/Parent 918 0 R +/Next 925 0 R +>> +endobj +925 0 obj +<< +/Title (1.1.7 Ensure that the etcd pod specification file permissions are set to 644 or more restrictive \(Automated\)) +/Dest [ 315 0 R /XYZ 84.259843 609.170079 0 ] +/Count 0 +/Prev 924 0 R +/Parent 918 0 R +/Next 926 0 R +>> +endobj +926 0 obj +<< +/Title (1.1.8 Ensure that the etcd pod specification file ownership is set to root:root \(Automated\)) +/Dest [ 315 0 R /XYZ 84.259843 478.370079 0 ] +/Count 0 +/Prev 925 0 R +/Parent 918 0 R +/Next 927 0 R +>> +endobj +927 0 obj +<< +/Title (1.1.9 Ensure that the Container Network Interface file permissions are set to 644 or more restrictive \(Manual\)) +/Dest [ 315 0 R /XYZ 84.259843 347.570079 0 ] +/Count 0 +/Prev 926 0 R +/Parent 918 0 R +/Next 928 0 R +>> +endobj +928 0 obj +<< +/Title (1.1.10 Ensure that the Container Network Interface file ownership is set to root:root \(Manual\)) +/Dest [ 315 0 R /XYZ 84.259843 170.823057 0 ] +/Count 0 +/Prev 927 0 R +/Parent 918 0 R +/Next 929 0 R +>> +endobj +929 0 obj +<< +/Title (1.1.11 Ensure that the etcd data directory permissions are set to 700 or more restrictive \(Automated\)) +/Dest [ 318 0 R /XYZ 84.259843 694.023057 0 ] +/Count 0 +/Prev 928 0 R +/Parent 918 0 R +/Next 930 0 R +>> +endobj +930 0 obj +<< +/Title (1.1.12 Ensure that the etcd data directory ownership is set to etcd:etcd \(Automated\)) +/Dest [ 318 0 R /XYZ 84.259843 365.776036 0 ] +/Count 0 +/Prev 929 0 R +/Parent 918 0 R +/Next 931 0 R +>> +endobj +931 0 obj +<< +/Title (1.1.13 Ensure that the admin.conf file permissions are set to 644 or more restrictive \(Automated\)) +/Dest [ 323 0 R /XYZ 84.259843 702.470079 0 ] +/Count 0 +/Prev 930 0 R +/Parent 918 0 R +/Next 932 0 R +>> +endobj +932 0 obj +<< +/Title (1.1.14 Ensure that the admin.conf file ownership is set to root:root \(Automated\)) +/Dest [ 323 0 R /XYZ 84.259843 586.670079 0 ] +/Count 0 +/Prev 931 0 R +/Parent 918 0 R +/Next 933 0 R +>> +endobj +933 0 obj +<< +/Title (1.1.15 Ensure that the scheduler.conf file permissions are set to 644 or more restrictive \(Automated\)) +/Dest [ 323 0 R /XYZ 84.259843 470.870079 0 ] +/Count 0 +/Prev 932 0 R +/Parent 918 0 R +/Next 934 0 R +>> +endobj +934 0 obj +<< +/Title (1.1.16 Ensure that the scheduler.conf file ownership is set to root:root \(Automated\)) +/Dest [ 323 0 R /XYZ 84.259843 340.070079 0 ] +/Count 0 +/Prev 933 0 R +/Parent 918 0 R +/Next 935 0 R +>> +endobj +935 0 obj +<< +/Title (1.1.17 Ensure that the controller-manager.conf file permissions are set to 644 or more restrictive \(Automated\)) +/Dest [ 323 0 R /XYZ 84.259843 209.270079 0 ] +/Count 0 +/Prev 934 0 R +/Parent 918 0 R +/Next 936 0 R +>> +endobj +936 0 obj +<< +/Title (1.1.18 Ensure that the controller-manager.conf file ownership is set to root:root \(Automated\)) +/Dest [ 325 0 R /XYZ 84.259843 799.370079 0 ] +/Count 0 +/Prev 935 0 R +/Parent 918 0 R +/Next 937 0 R +>> +endobj +937 0 obj +<< +/Title (1.1.19 Ensure that the Kubernetes PKI directory and file ownership is set to root:root \(Automated\)) +/Dest [ 325 0 R /XYZ 84.259843 668.570079 0 ] +/Count 0 +/Prev 936 0 R +/Parent 918 0 R +/Next 938 0 R +>> +endobj +938 0 obj +<< +/Title (1.1.20 Ensure that the Kubernetes PKI certificate file permissions are set to 644 or more restrictive \(Automated\)) +/Dest [ 349 0 R /XYZ 84.259843 184.188585 0 ] +/Count 0 +/Prev 937 0 R +/Parent 918 0 R +/Next 939 0 R +>> +endobj +939 0 obj +<< +/Title (1.1.21 Ensure that the Kubernetes PKI key file permissions are set to 600 \(Automated\)) +/Dest [ 440 0 R /XYZ 84.259843 702.470079 0 ] +/Count 0 +/Prev 938 0 R +/Parent 918 0 R +>> +endobj +940 0 obj +<< +/Title (1.2 API Server) +/Dest [ 508 0 R /XYZ 41.740157 784.430079 0 ] +/Count 35 +/Prev 918 0 R +/First 941 0 R +/Last 975 0 R +/Parent 913 0 R +/Next 976 0 R +>> +endobj +941 0 obj +<< +/Title (1.2.1 Ensure that the --anonymous-auth argument is set to false \(Automated\)) +/Dest [ 508 0 R /XYZ 84.259843 720.651496 0 ] +/Count 0 +/Parent 940 0 R +/Next 942 0 R +>> +endobj +942 0 obj +<< +/Title (1.2.2 Ensure that the --basic-auth-file argument is not set \(Automated\)) +/Dest [ 511 0 R /XYZ 84.259843 295.970079 0 ] +/Count 0 +/Prev 941 0 R +/Parent 940 0 R +/Next 943 0 R +>> +endobj +943 0 obj +<< +/Title (1.2.3 Ensure that the --token-auth-file parameter is not set \(Automated\)) +/Dest [ 516 0 R /XYZ 84.259843 595.970079 0 ] +/Count 0 +/Prev 942 0 R +/Parent 940 0 R +/Next 944 0 R +>> +endobj +944 0 obj +<< +/Title (1.2.4 Ensure that the --kubelet-https argument is set to true \(Automated\)) +/Dest [ 519 0 R /XYZ 84.259843 164.720079 0 ] +/Count 0 +/Prev 943 0 R +/Parent 940 0 R +/Next 945 0 R +>> +endobj +945 0 obj +<< +/Title (1.2.5 Ensure that the --kubelet-client-certificate and --kubelet-client-key arguments are set as appropriate \(Automated\)) +/Dest [ 524 0 R /XYZ 84.259843 427.220079 0 ] +/Count 0 +/Prev 944 0 R +/Parent 940 0 R +/Next 946 0 R +>> +endobj +946 0 obj +<< +/Title (1.2.6 Ensure that the --kubelet-certificate-authority argument is set as appropriate \(Automated\)) +/Dest [ 529 0 R /XYZ 84.259843 652.220079 0 ] +/Count 0 +/Prev 945 0 R +/Parent 940 0 R +/Next 947 0 R +>> +endobj +947 0 obj +<< +/Title (1.2.7 Ensure that the --authorization-mode argument is not set to AlwaysAllow \(Automated\)) +/Dest [ 532 0 R /XYZ 84.259843 183.470079 0 ] +/Count 0 +/Prev 946 0 R +/Parent 940 0 R +/Next 948 0 R +>> +endobj +948 0 obj +<< +/Title (1.2.8 Ensure that the --authorization-mode argument includes Node \(Automated\)) +/Dest [ 537 0 R /XYZ 84.259843 464.720079 0 ] +/Count 0 +/Prev 947 0 R +/Parent 940 0 R +/Next 949 0 R +>> +endobj +949 0 obj +<< +/Title (1.2.9 Ensure that the --authorization-mode argument includes RBAC \(Automated\)) +/Dest [ 542 0 R /XYZ 84.259843 745.970079 0 ] +/Count 0 +/Prev 948 0 R +/Parent 940 0 R +/Next 950 0 R +>> +endobj +950 0 obj +<< +/Title (1.2.10 Ensure that the admission control plugin EventRateLimit is set \(Automated\)) +/Dest [ 545 0 R /XYZ 84.259843 314.720079 0 ] +/Count 0 +/Prev 949 0 R +/Parent 940 0 R +/Next 951 0 R +>> +endobj +951 0 obj +<< +/Title (1.2.11 Ensure that the admission control plugin AlwaysAdmit is not set \(Automated\)) +/Dest [ 550 0 R /XYZ 84.259843 520.970079 0 ] +/Count 0 +/Prev 950 0 R +/Parent 940 0 R +/Next 952 0 R +>> +endobj +952 0 obj +<< +/Title (1.2.12 Ensure that the admission control plugin AlwaysPullImages is set \(Manual\)) +/Dest [ 555 0 R /XYZ 84.259843 708.470079 0 ] +/Count 0 +/Prev 951 0 R +/Parent 940 0 R +/Next 953 0 R +>> +endobj +953 0 obj +<< +/Title (1.2.13 Ensure that the admission control plugin SecurityContextDeny is set if PodSecurityPolicy is not used \(Manual\)) +/Dest [ 555 0 R /XYZ 84.259843 501.723057 0 ] +/Count 0 +/Prev 952 0 R +/Parent 940 0 R +/Next 954 0 R +>> +endobj +954 0 obj +<< +/Title (1.2.14 Ensure that the admission control plugin ServiceAccount is set \(Automated\)) +/Dest [ 555 0 R /XYZ 84.259843 264.976036 0 ] +/Count 0 +/Prev 953 0 R +/Parent 940 0 R +/Next 955 0 R +>> +endobj +955 0 obj +<< +/Title (1.2.15 Ensure that the admission control plugin NamespaceLifecycle is set \(Automated\)) +/Dest [ 562 0 R /XYZ 84.259843 520.970079 0 ] +/Count 0 +/Prev 954 0 R +/Parent 940 0 R +/Next 956 0 R +>> +endobj +956 0 obj +<< +/Title (1.2.16 Ensure that the admission control plugin PodSecurityPolicy is set \(Automated\)) +/Dest [ 567 0 R /XYZ 84.259843 799.370079 0 ] +/Count 0 +/Prev 955 0 R +/Parent 940 0 R +/Next 957 0 R +>> +endobj +957 0 obj +<< +/Title (1.2.17 Ensure that the admission control plugin NodeRestriction is set \(Automated\)) +/Dest [ 570 0 R /XYZ 84.259843 258.470079 0 ] +/Count 0 +/Prev 956 0 R +/Parent 940 0 R +/Next 958 0 R +>> +endobj +958 0 obj +<< +/Title (1.2.18 Ensure that the --insecure-bind-address argument is not set \(Automated\)) +/Dest [ 575 0 R /XYZ 84.259843 427.220079 0 ] +/Count 0 +/Prev 957 0 R +/Parent 940 0 R +/Next 959 0 R +>> +endobj +959 0 obj +<< +/Title (1.2.19 Ensure that the --insecure-port argument is set to 0 \(Automated\)) +/Dest [ 580 0 R /XYZ 84.259843 727.220079 0 ] +/Count 0 +/Prev 958 0 R +/Parent 940 0 R +/Next 960 0 R +>> +endobj +960 0 obj +<< +/Title (1.2.20 Ensure that the --secure-port argument is not set to 0 \(Automated\)) +/Dest [ 583 0 R /XYZ 84.259843 314.720079 0 ] +/Count 0 +/Prev 959 0 R +/Parent 940 0 R +/Next 961 0 R +>> +endobj +961 0 obj +<< +/Title (1.2.21 Ensure that the --profiling argument is set to false \(Automated\)) +/Dest [ 588 0 R /XYZ 84.259843 595.970079 0 ] +/Count 0 +/Prev 960 0 R +/Parent 940 0 R +/Next 962 0 R +>> +endobj +962 0 obj +<< +/Title (1.2.22 Ensure that the --audit-log-path argument is set \(Automated\)) +/Dest [ 591 0 R /XYZ 84.259843 183.470079 0 ] +/Count 0 +/Prev 961 0 R +/Parent 940 0 R +/Next 963 0 R +>> +endobj +963 0 obj +<< +/Title (1.2.23 Ensure that the --audit-log-maxage argument is set to 30 or as appropriate \(Automated\)) +/Dest [ 596 0 R /XYZ 84.259843 445.970079 0 ] +/Count 0 +/Prev 962 0 R +/Parent 940 0 R +/Next 964 0 R +>> +endobj +964 0 obj +<< +/Title (1.2.24 Ensure that the --audit-log-maxbackup argument is set to 10 or as appropriate \(Automated\)) +/Dest [ 601 0 R /XYZ 84.259843 727.220079 0 ] +/Count 0 +/Prev 963 0 R +/Parent 940 0 R +/Next 965 0 R +>> +endobj +965 0 obj +<< +/Title (1.2.25 Ensure that the --audit-log-maxsize argument is set to 100 or as appropriate \(Automated\)) +/Dest [ 604 0 R /XYZ 84.259843 295.970079 0 ] +/Count 0 +/Prev 964 0 R +/Parent 940 0 R +/Next 966 0 R +>> +endobj +966 0 obj +<< +/Title (1.2.26 Ensure that the --request-timeout argument is set as appropriate \(Automated\)) +/Dest [ 609 0 R /XYZ 84.259843 595.970079 0 ] +/Count 0 +/Prev 965 0 R +/Parent 940 0 R +/Next 967 0 R +>> +endobj +967 0 obj +<< +/Title (1.2.27 Ensure that the --service-account-lookup argument is set to true \(Automated\)) +/Dest [ 612 0 R /XYZ 84.259843 164.720079 0 ] +/Count 0 +/Prev 966 0 R +/Parent 940 0 R +/Next 968 0 R +>> +endobj +968 0 obj +<< +/Title (1.2.28 Ensure that the --service-account-key-file argument is set as appropriate \(Automated\)) +/Dest [ 617 0 R /XYZ 84.259843 408.470079 0 ] +/Count 0 +/Prev 967 0 R +/Parent 940 0 R +/Next 969 0 R +>> +endobj +969 0 obj +<< +/Title (1.2.29 Ensure that the --etcd-certfile and --etcd-keyfile arguments are set as appropriate \(Automated\)) +/Dest [ 622 0 R /XYZ 84.259843 689.720079 0 ] +/Count 0 +/Prev 968 0 R +/Parent 940 0 R +/Next 970 0 R +>> +endobj +970 0 obj +<< +/Title (1.2.30 Ensure that the --tls-cert-file and --tls-private-key-file arguments are set as appropriate \(Automated\)) +/Dest [ 625 0 R /XYZ 84.259843 239.720079 0 ] +/Count 0 +/Prev 969 0 R +/Parent 940 0 R +/Next 971 0 R +>> +endobj +971 0 obj +<< +/Title (1.2.31 Ensure that the --client-ca-file argument is set as appropriate \(Automated\)) +/Dest [ 630 0 R /XYZ 84.259843 483.470079 0 ] +/Count 0 +/Prev 970 0 R +/Parent 940 0 R +/Next 972 0 R +>> +endobj +972 0 obj +<< +/Title (1.2.32 Ensure that the --etcd-cafile argument is set as appropriate \(Automated\)) +/Dest [ 635 0 R /XYZ 84.259843 745.970079 0 ] +/Count 0 +/Prev 971 0 R +/Parent 940 0 R +/Next 973 0 R +>> +endobj +973 0 obj +<< +/Title (1.2.33 Ensure that the --encryption-provider-config argument is set as appropriate \(Automated\)) +/Dest [ 638 0 R /XYZ 84.259843 295.970079 0 ] +/Count 0 +/Prev 972 0 R +/Parent 940 0 R +/Next 974 0 R +>> +endobj +974 0 obj +<< +/Title (1.2.34 Ensure that encryption providers are appropriately configured \(Automated\)) +/Dest [ 643 0 R /XYZ 84.259843 577.220079 0 ] +/Count 0 +/Prev 973 0 R +/Parent 940 0 R +/Next 975 0 R +>> +endobj +975 0 obj +<< +/Title (1.2.35 Ensure that the API Server only makes use of Strong Cryptographic Ciphers \(Automated\)) +/Dest [ 660 0 R /XYZ 84.259843 411.552842 0 ] +/Count 0 +/Prev 974 0 R +/Parent 940 0 R +>> +endobj +976 0 obj +<< +/Title (1.3 Controller Manager) +/Dest [ 674 0 R /XYZ 41.740157 784.430079 0 ] +/Count 7 +/Prev 940 0 R +/First 977 0 R +/Last 983 0 R +/Parent 913 0 R +/Next 984 0 R +>> +endobj +977 0 obj +<< +/Title (1.3.1 Ensure that the --terminated-pod-gc-threshold argument is set as appropriate \(Automated\)) +/Dest [ 674 0 R /XYZ 84.259843 720.651496 0 ] +/Count 0 +/Parent 976 0 R +/Next 978 0 R +>> +endobj +978 0 obj +<< +/Title (1.3.2 Ensure that the --profiling argument is set to false \(Automated\)) +/Dest [ 677 0 R /XYZ 84.259843 727.220079 0 ] +/Count 0 +/Prev 977 0 R +/Parent 976 0 R +/Next 979 0 R +>> +endobj +979 0 obj +<< +/Title (1.3.3 Ensure that the --use-service-account-credentials argument is set to true \(Automated\)) +/Dest [ 680 0 R /XYZ 84.259843 745.970079 0 ] +/Count 0 +/Prev 978 0 R +/Parent 976 0 R +/Next 980 0 R +>> +endobj +980 0 obj +<< +/Title (1.3.4 Ensure that the --service-account-private-key-file argument is set as appropriate \(Automated\)) +/Dest [ 683 0 R /XYZ 84.259843 745.970079 0 ] +/Count 0 +/Prev 979 0 R +/Parent 976 0 R +/Next 981 0 R +>> +endobj +981 0 obj +<< +/Title (1.3.5 Ensure that the --root-ca-file argument is set as appropriate \(Automated\)) +/Dest [ 686 0 R /XYZ 84.259843 727.220079 0 ] +/Count 0 +/Prev 980 0 R +/Parent 976 0 R +/Next 982 0 R +>> +endobj +982 0 obj +<< +/Title (1.3.6 Ensure that the RotateKubeletServerCertificate argument is set to true \(Automated\)) +/Dest [ 689 0 R /XYZ 84.259843 727.220079 0 ] +/Count 0 +/Prev 981 0 R +/Parent 976 0 R +/Next 983 0 R +>> +endobj +983 0 obj +<< +/Title (1.3.7 Ensure that the --bind-address argument is set to 127.0.0.1 \(Automated\)) +/Dest [ 689 0 R /XYZ 84.259843 524.420079 0 ] +/Count 0 +/Prev 982 0 R +/Parent 976 0 R +>> +endobj +984 0 obj +<< +/Title (1.4 Scheduler) +/Dest [ 694 0 R /XYZ 41.740157 784.430079 0 ] +/Count 2 +/Prev 976 0 R +/First 985 0 R +/Last 986 0 R +/Parent 913 0 R +/Next 987 0 R +>> +endobj +985 0 obj +<< +/Title (1.4.1 Ensure that the --profiling argument is set to false \(Automated\)) +/Dest [ 694 0 R /XYZ 84.259843 720.651496 0 ] +/Count 0 +/Parent 984 0 R +/Next 986 0 R +>> +endobj +986 0 obj +<< +/Title (1.4.2 Ensure that the --bind-address argument is set to 127.0.0.1 \(Automated\)) +/Dest [ 694 0 R /XYZ 84.259843 257.404475 0 ] +/Count 0 +/Prev 985 0 R +/Parent 984 0 R +>> +endobj +987 0 obj +<< +/Title (2 Etcd Node Configuration Files) +/Dest [ 700 0 R /XYZ 41.740157 784.430079 0 ] +/Count 7 +/Prev 984 0 R +/First 988 0 R +/Last 994 0 R +/Parent 913 0 R +/Next 995 0 R +>> +endobj +988 0 obj +<< +/Title (2.1 Ensure that the --cert-file and --key-file arguments are set as appropriate \(Automated\)) +/Dest [ 700 0 R /XYZ 84.259843 684.651496 0 ] +/Count 0 +/Parent 987 0 R +/Next 989 0 R +>> +endobj +989 0 obj +<< +/Title (2.2 Ensure that the --client-cert-auth argument is set to true \(Automated\)) +/Dest [ 705 0 R /XYZ 84.259843 464.720079 0 ] +/Count 0 +/Prev 988 0 R +/Parent 987 0 R +/Next 990 0 R +>> +endobj +990 0 obj +<< +/Title (2.3 Ensure that the --auto-tls argument is not set to true \(Automated\)) +/Dest [ 710 0 R /XYZ 84.259843 258.470079 0 ] +/Count 0 +/Prev 989 0 R +/Parent 987 0 R +/Next 991 0 R +>> +endobj +991 0 obj +<< +/Title (2.4 Ensure that the --peer-cert-file and --peer-key-file arguments are set as appropriate \(Automated\)) +/Dest [ 717 0 R /XYZ 84.259843 799.370079 0 ] +/Count 0 +/Prev 990 0 R +/Parent 987 0 R +/Next 992 0 R +>> +endobj +992 0 obj +<< +/Title (2.5 Ensure that the --peer-client-cert-auth argument is set to true \(Automated\)) +/Dest [ 722 0 R /XYZ 84.259843 558.470079 0 ] +/Count 0 +/Prev 991 0 R +/Parent 987 0 R +/Next 993 0 R +>> +endobj +993 0 obj +<< +/Title (2.6 Ensure that the --peer-auto-tls argument is not set to true \(Automated\)) +/Dest [ 727 0 R /XYZ 84.259843 333.470079 0 ] +/Count 0 +/Prev 992 0 R +/Parent 987 0 R +/Next 994 0 R +>> +endobj +994 0 obj +<< +/Title (2.7 Ensure that a unique Certificate Authority is used for etcd \(Automated\)) +/Dest [ 734 0 R /XYZ 84.259843 799.370079 0 ] +/Count 0 +/Prev 993 0 R +/Parent 987 0 R +>> +endobj +995 0 obj +<< +/Title (3.1 Authentication and Authorization) +/Dest [ 741 0 R /XYZ 41.740157 784.430079 0 ] +/Count 1 +/Prev 987 0 R +/First 996 0 R +/Last 996 0 R +/Parent 913 0 R +/Next 997 0 R +>> +endobj +996 0 obj +<< +/Title (3.1.1 Client certificate authentication should not be used for users \(Manual\)) +/Dest [ 741 0 R /XYZ 84.259843 684.651496 0 ] +/Count 0 +/Parent 995 0 R +>> +endobj +997 0 obj +<< +/Title (3.2 Logging) +/Dest [ 743 0 R /XYZ 41.740157 784.430079 0 ] +/Count 2 +/Prev 995 0 R +/First 998 0 R +/Last 999 0 R +/Parent 913 0 R +/Next 1000 0 R +>> +endobj +998 0 obj +<< +/Title (3.2.1 Ensure that a minimal audit policy is created \(Automated\)) +/Dest [ 743 0 R /XYZ 84.259843 720.651496 0 ] +/Count 0 +/Parent 997 0 R +/Next 999 0 R +>> +endobj +999 0 obj +<< +/Title (3.2.2 Ensure that the audit policy covers key security concerns \(Manual\)) +/Dest [ 746 0 R /XYZ 84.259843 333.470079 0 ] +/Count 0 +/Prev 998 0 R +/Parent 997 0 R +>> +endobj +1000 0 obj +<< +/Title (4.1 Worker Node Configuration Files) +/Dest [ 748 0 R /XYZ 41.740157 784.430079 0 ] +/Count 10 +/Prev 997 0 R +/First 1001 0 R +/Last 1010 0 R +/Parent 913 0 R +/Next 1011 0 R +>> +endobj +1001 0 obj +<< +/Title (4.1.1 Ensure that the kubelet service file permissions are set to 644 or more restrictive \(Automated\)) +/Dest [ 748 0 R /XYZ 84.259843 684.651496 0 ] +/Count 0 +/Parent 1000 0 R +/Next 1002 0 R +>> +endobj +1002 0 obj +<< +/Title (4.1.2 Ensure that the kubelet service file ownership is set to root:root \(Automated\)) +/Dest [ 748 0 R /XYZ 84.259843 553.851496 0 ] +/Count 0 +/Prev 1001 0 R +/Parent 1000 0 R +/Next 1003 0 R +>> +endobj +1003 0 obj +<< +/Title (4.1.3 If proxy kubeconfig file exists ensure permissions are set to 644 or more restrictive \(Automated\)) +/Dest [ 748 0 R /XYZ 84.259843 423.051496 0 ] +/Count 0 +/Prev 1002 0 R +/Parent 1000 0 R +/Next 1004 0 R +>> +endobj +1004 0 obj +<< +/Title (4.1.4 Ensure that the proxy kubeconfig file ownership is set to root:root \(Automated\)) +/Dest [ 751 0 R /XYZ 84.259843 763.220079 0 ] +/Count 0 +/Prev 1003 0 R +/Parent 1000 0 R +/Next 1005 0 R +>> +endobj +1005 0 obj +<< +/Title (4.1.5 Ensure that the --kubeconfig kubelet.conf file permissions are set to 644 or more restrictive \(Automated\)) +/Dest [ 751 0 R /XYZ 84.259843 454.079014 0 ] +/Count 0 +/Prev 1004 0 R +/Parent 1000 0 R +/Next 1006 0 R +>> +endobj +1006 0 obj +<< +/Title (4.1.6 Ensure that the --kubeconfig kubelet.conf file ownership is set to root:root \(Automated\)) +/Dest [ 751 0 R /XYZ 84.259843 163.687950 0 ] +/Count 0 +/Prev 1005 0 R +/Parent 1000 0 R +/Next 1007 0 R +>> +endobj +1007 0 obj +<< +/Title (4.1.7 Ensure that the certificate authorities file permissions are set to 644 or more restrictive \(Automated\)) +/Dest [ 755 0 R /XYZ 84.259843 519.629014 0 ] +/Count 0 +/Prev 1006 0 R +/Parent 1000 0 R +/Next 1008 0 R +>> +endobj +1008 0 obj +<< +/Title (4.1.8 Ensure that the client certificate authorities file ownership is set to root:root \(Automated\)) +/Dest [ 764 0 R /XYZ 84.259843 799.370079 0 ] +/Count 0 +/Prev 1007 0 R +/Parent 1000 0 R +/Next 1009 0 R +>> +endobj +1009 0 obj +<< +/Title (4.1.9 Ensure that the kubelet --config configuration file has permissions set to 644 or more restrictive \(Automated\)) +/Dest [ 764 0 R /XYZ 84.259843 383.493907 0 ] +/Count 0 +/Prev 1008 0 R +/Parent 1000 0 R +/Next 1010 0 R +>> +endobj +1010 0 obj +<< +/Title (4.1.10 Ensure that the kubelet --config configuration file ownership is set to root:root \(Automated\)) +/Dest [ 764 0 R /XYZ 84.259843 195.693907 0 ] +/Count 0 +/Prev 1009 0 R +/Parent 1000 0 R +>> +endobj +1011 0 obj +<< +/Title (4.2 Kubelet) +/Dest [ 774 0 R /XYZ 41.740157 784.430079 0 ] +/Count 13 +/Prev 1000 0 R +/First 1012 0 R +/Last 1024 0 R +/Parent 913 0 R +/Next 1025 0 R +>> +endobj +1012 0 obj +<< +/Title (4.2.1 Ensure that the anonymous-auth argument is set to false \(Automated\)) +/Dest [ 774 0 R /XYZ 84.259843 720.651496 0 ] +/Count 0 +/Parent 1011 0 R +/Next 1013 0 R +>> +endobj +1013 0 obj +<< +/Title (4.2.2 Ensure that the --authorization-mode argument is not set to AlwaysAllow \(Automated\)) +/Dest [ 774 0 R /XYZ 84.259843 332.207453 0 ] +/Count 0 +/Prev 1012 0 R +/Parent 1011 0 R +/Next 1014 0 R +>> +endobj +1014 0 obj +<< +/Title (4.2.3 Ensure that the --client-ca-file argument is set as appropriate \(Automated\)) +/Dest [ 779 0 R /XYZ 84.259843 675.273057 0 ] +/Count 0 +/Prev 1013 0 R +/Parent 1011 0 R +/Next 1015 0 R +>> +endobj +1015 0 obj +<< +/Title (4.2.4 Ensure that the --read-only-port argument is set to 0 \(Automated\)) +/Dest [ 779 0 R /XYZ 84.259843 301.829014 0 ] +/Count 0 +/Prev 1014 0 R +/Parent 1011 0 R +/Next 1016 0 R +>> +endobj +1016 0 obj +<< +/Title (4.2.5 Ensure that the --streaming-connection-idle-timeout argument is not set to 0 \(Automated\)) +/Dest [ 784 0 R /XYZ 84.259843 641.326036 0 ] +/Count 0 +/Prev 1015 0 R +/Parent 1011 0 R +/Next 1017 0 R +>> +endobj +1017 0 obj +<< +/Title (4.2.6 Ensure that the --protect-kernel-defaults argument is set to true \(Automated\)) +/Dest [ 790 0 R /XYZ 84.259843 445.970079 0 ] +/Count 0 +/Prev 1016 0 R +/Parent 1011 0 R +/Next 1018 0 R +>> +endobj +1018 0 obj +<< +/Title (4.2.7 Ensure that the --make-iptables-util-chains argument is set to true \(Automated\)) +/Dest [ 794 0 R /XYZ 84.259843 799.370079 0 ] +/Count 0 +/Prev 1017 0 R +/Parent 1011 0 R +/Next 1019 0 R +>> +endobj +1019 0 obj +<< +/Title (4.2.8 Ensure that the --hostname-override argument is not set \(Manual\)) +/Dest [ 794 0 R /XYZ 84.259843 425.926036 0 ] +/Count 0 +/Prev 1018 0 R +/Parent 1011 0 R +/Next 1020 0 R +>> +endobj +1020 0 obj +<< +/Title (4.2.9 Ensure that the --event-qps argument is set to 0 or a level which ensures appropriate event capture \(Automated\)) +/Dest [ 794 0 R /XYZ 84.259843 208.126036 0 ] +/Count 0 +/Prev 1019 0 R +/Parent 1011 0 R +/Next 1021 0 R +>> +endobj +1021 0 obj +<< +/Title (4.2.10 Ensure that the --tls-cert-file and --tls-private-key-file arguments are set as appropriate \(Automated\)) +/Dest [ 798 0 R /XYZ 84.259843 542.326036 0 ] +/Count 0 +/Prev 1020 0 R +/Parent 1011 0 R +/Next 1022 0 R +>> +endobj +1022 0 obj +<< +/Title (4.2.11 Ensure that the --rotate-certificates argument is not set to false \(Automated\)) +/Dest [ 798 0 R /XYZ 84.259843 138.881993 0 ] +/Count 0 +/Prev 1021 0 R +/Parent 1011 0 R +/Next 1023 0 R +>> +endobj +1023 0 obj +<< +/Title (4.2.12 Verify that the RotateKubeletServerCertificate argument is set to true \(Automated\)) +/Dest [ 808 0 R /XYZ 84.259843 670.970079 0 ] +/Count 0 +/Prev 1022 0 R +/Parent 1011 0 R +/Next 1024 0 R +>> +endobj +1024 0 obj +<< +/Title (4.2.13 Ensure that the Kubelet only makes use of Strong Cryptographic Ciphers \(Automated\)) +/Dest [ 808 0 R /XYZ 84.259843 392.223057 0 ] +/Count 0 +/Prev 1023 0 R +/Parent 1011 0 R +>> +endobj +1025 0 obj +<< +/Title (5.1 RBAC and Service Accounts) +/Dest [ 815 0 R /XYZ 41.740157 784.430079 0 ] +/Count 6 +/Prev 1011 0 R +/First 1026 0 R +/Last 1031 0 R +/Parent 913 0 R +/Next 1032 0 R +>> +endobj +1026 0 obj +<< +/Title (5.1.1 Ensure that the cluster-admin role is only used where required \(Manual\)) +/Dest [ 815 0 R /XYZ 84.259843 684.651496 0 ] +/Count 0 +/Parent 1025 0 R +/Next 1027 0 R +>> +endobj +1027 0 obj +<< +/Title (5.1.2 Minimize access to secrets \(Manual\)) +/Dest [ 815 0 R /XYZ 84.259843 523.851496 0 ] +/Count 0 +/Prev 1026 0 R +/Parent 1025 0 R +/Next 1028 0 R +>> +endobj +1028 0 obj +<< +/Title (5.1.3 Minimize wildcard use in Roles and ClusterRoles \(Manual\)) +/Dest [ 815 0 R /XYZ 84.259843 423.051496 0 ] +/Count 0 +/Prev 1027 0 R +/Parent 1025 0 R +/Next 1029 0 R +>> +endobj +1029 0 obj +<< +/Title (5.1.4 Minimize access to create pods \(Manual\)) +/Dest [ 815 0 R /XYZ 84.259843 307.251496 0 ] +/Count 0 +/Prev 1028 0 R +/Parent 1025 0 R +/Next 1030 0 R +>> +endobj +1030 0 obj +<< +/Title (5.1.5 Ensure that default service accounts are not actively used. \(Automated\)) +/Dest [ 815 0 R /XYZ 84.259843 206.451496 0 ] +/Count 0 +/Prev 1029 0 R +/Parent 1025 0 R +/Next 1031 0 R +>> +endobj +1031 0 obj +<< +/Title (5.1.6 Ensure that Service Account Tokens are only mounted where necessary \(Manual\)) +/Dest [ 842 0 R /XYZ 84.259843 449.446885 0 ] +/Count 0 +/Prev 1030 0 R +/Parent 1025 0 R +>> +endobj +1032 0 obj +<< +/Title (5.2 Pod Security Policies) +/Dest [ 853 0 R /XYZ 41.740157 784.430079 0 ] +/Count 9 +/Prev 1025 0 R +/First 1033 0 R +/Last 1041 0 R +/Parent 913 0 R +/Next 1042 0 R +>> +endobj +1033 0 obj +<< +/Title (5.2.1 Minimize the admission of privileged containers \(Manual\)) +/Dest [ 853 0 R /XYZ 84.259843 720.651496 0 ] +/Count 0 +/Parent 1032 0 R +/Next 1034 0 R +>> +endobj +1034 0 obj +<< +/Title (5.2.2 Minimize the admission of containers wishing to share the host process ID namespace \(Automated\)) +/Dest [ 853 0 R /XYZ 84.259843 589.851496 0 ] +/Count 0 +/Prev 1033 0 R +/Parent 1032 0 R +/Next 1035 0 R +>> +endobj +1035 0 obj +<< +/Title (5.2.3 Minimize the admission of containers wishing to share the host IPC namespace \(Automated\)) +/Dest [ 853 0 R /XYZ 84.259843 238.710432 0 ] +/Count 0 +/Prev 1034 0 R +/Parent 1032 0 R +/Next 1036 0 R +>> +endobj +1036 0 obj +<< +/Title (5.2.4 Minimize the admission of containers wishing to share the host network namespace \(Automated\)) +/Dest [ 856 0 R /XYZ 84.259843 603.629014 0 ] +/Count 0 +/Prev 1035 0 R +/Parent 1032 0 R +/Next 1037 0 R +>> +endobj +1037 0 obj +<< +/Title (5.2.5 Minimize the admission of containers with allowPrivilegeEscalation \(Automated\)) +/Dest [ 856 0 R /XYZ 84.259843 252.487950 0 ] +/Count 0 +/Prev 1036 0 R +/Parent 1032 0 R +/Next 1038 0 R +>> +endobj +1038 0 obj +<< +/Title (5.2.6 Minimize the admission of root containers \(Manual\)) +/Dest [ 860 0 R /XYZ 84.259843 584.681993 0 ] +/Count 0 +/Prev 1037 0 R +/Parent 1032 0 R +/Next 1039 0 R +>> +endobj +1039 0 obj +<< +/Title (5.2.7 Minimize the admission of containers with the NET_RAW capability \(Manual\)) +/Dest [ 860 0 R /XYZ 84.259843 453.881993 0 ] +/Count 0 +/Prev 1038 0 R +/Parent 1032 0 R +/Next 1040 0 R +>> +endobj +1040 0 obj +<< +/Title (5.2.8 Minimize the admission of containers with added capabilities \(Manual\)) +/Dest [ 860 0 R /XYZ 84.259843 323.081993 0 ] +/Count 0 +/Prev 1039 0 R +/Parent 1032 0 R +/Next 1041 0 R +>> +endobj +1041 0 obj +<< +/Title (5.2.9 Minimize the admission of containers with capabilities assigned \(Manual\)) +/Dest [ 860 0 R /XYZ 84.259843 207.281993 0 ] +/Count 0 +/Prev 1040 0 R +/Parent 1032 0 R +>> +endobj +1042 0 obj +<< +/Title (5.3 Network Policies and CNI) +/Dest [ 863 0 R /XYZ 41.740157 784.430079 0 ] +/Count 2 +/Prev 1032 0 R +/First 1043 0 R +/Last 1044 0 R +/Parent 913 0 R +/Next 1045 0 R +>> +endobj +1043 0 obj +<< +/Title (5.3.1 Ensure that the CNI in use supports Network Policies \(Manual\)) +/Dest [ 863 0 R /XYZ 84.259843 684.651496 0 ] +/Count 0 +/Parent 1042 0 R +/Next 1044 0 R +>> +endobj +1044 0 obj +<< +/Title (5.3.2 Ensure that all Namespaces have Network Policies defined \(Automated\)) +/Dest [ 863 0 R /XYZ 84.259843 538.851496 0 ] +/Count 0 +/Prev 1043 0 R +/Parent 1042 0 R +>> +endobj +1045 0 obj +<< +/Title (5.4 Secrets Management) +/Dest [ 887 0 R /XYZ 41.740157 784.430079 0 ] +/Count 2 +/Prev 1042 0 R +/First 1046 0 R +/Last 1047 0 R +/Parent 913 0 R +/Next 1048 0 R +>> +endobj +1046 0 obj +<< +/Title (5.4.1 Prefer using secrets as files over secrets as environment variables \(Manual\)) +/Dest [ 887 0 R /XYZ 84.259843 684.651496 0 ] +/Count 0 +/Parent 1045 0 R +/Next 1047 0 R +>> +endobj +1047 0 obj +<< +/Title (5.4.2 Consider external secret storage \(Manual\)) +/Dest [ 887 0 R /XYZ 84.259843 568.851496 0 ] +/Count 0 +/Prev 1046 0 R +/Parent 1045 0 R +>> +endobj +1048 0 obj +<< +/Title (5.5 Extensible Admission Control) +/Dest [ 889 0 R /XYZ 41.740157 784.430079 0 ] +/Count 1 +/Prev 1045 0 R +/First 1049 0 R +/Last 1049 0 R +/Parent 913 0 R +/Next 1050 0 R +>> +endobj +1049 0 obj +<< +/Title (5.5.1 Configure Image Provenance using ImagePolicyWebhook admission controller \(Manual\)) +/Dest [ 889 0 R /XYZ 84.259843 684.651496 0 ] +/Count 0 +/Parent 1048 0 R +>> +endobj +1050 0 obj +<< +/Title (5.7 General Policies) +/Dest [ 891 0 R /XYZ 41.740157 784.430079 0 ] +/Count 4 +/Prev 1048 0 R +/First 1051 0 R +/Last 1054 0 R +/Parent 913 0 R +>> +endobj +1051 0 obj +<< +/Title (5.7.1 Create administrative boundaries between resources using namespaces \(Manual\)) +/Dest [ 891 0 R /XYZ 84.259843 720.651496 0 ] +/Count 0 +/Parent 1050 0 R +/Next 1052 0 R +>> +endobj +1052 0 obj +<< +/Title (5.7.2 Ensure that the seccomp profile is set to docker/default in your pod definitions \(Manual\)) +/Dest [ 891 0 R /XYZ 84.259843 604.851496 0 ] +/Count 0 +/Prev 1051 0 R +/Parent 1050 0 R +/Next 1053 0 R +>> +endobj +1053 0 obj +<< +/Title (5.7.3 Apply Security Context to Your Pods and Containers \(Manual\)) +/Dest [ 891 0 R /XYZ 84.259843 324.051496 0 ] +/Count 0 +/Prev 1052 0 R +/Parent 1050 0 R +/Next 1054 0 R +>> +endobj +1054 0 obj +<< +/Title (5.7.4 The default namespace should not be used \(Automated\)) +/Dest [ 891 0 R /XYZ 84.259843 193.251496 0 ] +/Count 0 +/Prev 1053 0 R +/Parent 1050 0 R +>> +endobj +1055 0 obj +<< +/Count 142 +/First 913 0 R +/Last 913 0 R +>> +endobj +1056 0 obj +<< +/Length1 41004 +/Filter /FlateDecode +/Length 7589 +>> +stream +xœí| xU¶ÿ¹uªª«—tº;ÝYH'é,�…-11 ¥E«ÑB²$!`B'AITÈ&d �ˆ0¢ˆÈŒ +8®•8èL@f:cLnþ§ª“xãÿ9ïûÞ÷Þû¾úêÖ½·îrιçž{ª?RÀ ˆR23ÇÜ[1iï&€ Ç©Ö=xà Ìà~Á½¨ü•sgÝ7ºÇÔ;ÞØè@>xô>|- `•áú½w�bìŸök€Í·Sù‡ûF'§NÿÇ+KX-•ÇNž™SˆƒE@Ö7T^7yþ\L‹èð`µáy…Sgξ}þ£÷/¦ç{¦æ‚�6¤²eꌅy3¯¹ à *ÏŸ’“µ}ËÃÔ7ƒ*zåS…õ…°TžKå¸ü™sÛrØ> @°ŒüpFÁäë—ÆEãi¾„Y3s+ ¹,\¤öÏR{Ϭœ™S®Üy `=ÉÏÎÍmý&ÐüëÔç…s¦ö3ü•²£¤|Pu'<\ûæýGÃ Ìø¢PñÉ•M¥êý߯Žï¶ÖK†ÙIEðƒúfòJÏÐó� ÚH�ô[µ&èôÔ*°ÁD—ìC´² +�ˆ�4i#ýwü#ä ê`–QDÿ|7�•7(|à�ù²“;ÙFÃLv)XëÅVõ©xòÚ[ +«á_†p r©ß§íe)¾¤«ªs*—ÿÒñ¤…`“–Ài© +Š:×Ëiþ²ðœþOÇ(§þN(ý¥sv†xе{̦1f‹�0[x’µqpDè'´ç[ýyZÑ#j½ø5Ìn‡Q¹`,ô¦gûÄz¸ó¿Â‹:tèСC‡:tèСC‡:tèСC‡:tèСC‡:tèСC‡:tèСC‡:tèСC‡:tèСC‡:tèСC‡:tüoƒ´’%“ÿ2ÔC²ÿkmÚ×÷Ô¯é9)eÚ]„¥twƒ�j,à�ž� +½à Ca4ä@Lƒ˜ßª~Ï=à6zz·öt=� ù0æ´¶¶^ú9ºõ»~7ã°A–Dt÷ØjïÐÜßýã*Õr<|h¢tø(^*ú­W:4Ñ׊‡|âo½x�ã«Ux€ã~Ž5_á¸/_¶âÞ=^io.îÙí�öxq·wÓ»šp'Ç—8îà¸Ý�Û8¾¸Õ*½˜Š[­¸%«©Iunæ¸é‹´‰ã |þ¹0éù\|n£Mz. 7Úpƒ Ÿå¸¾*@Zϱ*+©Se®{Æ*­KÄg¬øt®­8*­åXQ>Qª8ŠKÅòßx¥ò‰Xîãŧ8®YÝSZÃquO|’Ä|òn,[e–Êœ¸ÊŒ¥TQš‹+IS+½¸ÂŽ¿æ¸|™]ZÎq™Ÿà¸”c G_ëãK–H�s\²çbñ—TìÅEr|ÌŠ ,8ß„ó8Îm¢&œÓ„³›°�cÇYgDãtŽ�ÚH�ŽÆió—àT*äqœÂ1—ãdŽ“8æôÅì&|Ø‚9þŠãŽãÇ™¤ñM8΄‡I¦âXŽÐÌ À1.ÍlÒèPåÄû‡I÷sÌ2ã}GÞk“Fr¼×†#8§'Ã9j“†áЈi¨ ‡à`Ž™U8¨ +r¼Gè!ÝÓ„ŽâÝÃÑDZ?Ç»îtHw9ñÎŒ@éNfô �2|­�Ø/ûrìÃñŽÞNéŽ&ìÝË&õvb¯t³Ôˆéf¼=Ó0õ6³”Êñ63¦$›¥”L6cÏF©§ {±{*vëꕺåb×$‡ÔÕ‹ILLðJ‰wc‚ã½f)>½fŒãË1&£IÎhzr1ª #I„È\Œ@7iÐÍ1¼ » À0*„q ÍÅÒTÇ`ê†.ŽNŽAÔÀÁÑN²Ú m 梕c€%X +àh¡Ö–`4s4ÙÐÈQ¡f +Gƒå\é¡HàBªEN^Ë& =�Ù8²Z–»â)Öíÿàš�ÿ/"X:Ô¢°žg;¨¤~�u6ÕT `Ì£š7ØV&ô ºp ÎQËR8ƒ»E`à �j>–¸ÎÆÀA£s²>Yq¤xP%ÖŠ—ųÐ[,ÏŠÙbKíÒXi]}ðMÁ§! +jÙE(‚#ø-¦a½8P´ÂE<‹»ákšEý¢ì(‡mPL¼8Y”ÅÂ(ª9%�…�Dôü,ÛÄÎwGØr¸Ï¢( �MìÉu~€å8F(¡ã8MÈ#þOÑXg©ÿF(AºÀLÀ…nTGÜÓ\“´4{H4º%4óØ&×ÊNC,Í¢jl{ƒ5ÊÏ@5œÃ‡p6~ÊVˆ±âNq”û5€ÙPNcoTûÈyl!É®R±:º°@Ìf»á[1Û0‰Æ~S•ˆæ<(Œ’ÔïáÖÓµ@¶‘LýØ +,#NÕ§pÖ0LL¦þ4‚a I P€éð(åŠa€Xå4’&¯Ü[ú�z>/~I2—³§„à,„$ȯªß²uÂÍ_ÉýYCW�rà ?±áÿ”Þ<Âô6:FôÕ­„3ð›Ÿ'ñq¢Ó’K*‘ÎHgdƒœLô’ü¦!Þ0ÉðªFV6(C�»tÒI'�tÒI'�tÒI'�tÒI'�tÒI'�tÒI'�tÒI'�tÒI'�tÒI'�tÒ鿟LÌ4Úô´™™³€A.»(”ËÁ~žD¢í³woÛùÆ” hWt®Þòµ°|›ÚöSJöWÛ†å ƒPÑÖÜx$7¦ôNsÅ~zîçÔîKq‚tLàó¹`µ(TKO Ú¨DÉn„(f¶�^8f\5öÝ1¾ñ¤�Ôë�4ëðÑãÆÇ°ƒ�( +{GÛ¥toš�8álßÀ¦¼Ã†5oÛ- ©Òta7 PE³ “®�6ùº„c¨Û.‰`—$q€m‹}]@µs­ÕØL3¹Cl(GØš‡×¸Æ ¯ ó«á5Î1¿"N°õøãOžo<~ÜîèÓÆÍu�ƒMºb�®°·ÍÒ‡xó¥> Ž•Æ‰‹¤ùá¥aÄ0±‹.¹çÂ|y^—¢ð¹îe°2lY—eáËÜ;ag¸}"Lô’é½ w¯^é·ÇÇÆÈ†ô^½ÒRE—S6ÈÀÊ„Í#ŠØSi9÷¾´ò‘s�-:?îæô«0~}÷îÝ ØÚ¾3×]P5àžwoKýæwm/ŒàÊ[/‰U$½â`œ/.H†€•¨–«ÝÁÛmÕ–²˜µî5^KŒÑäÆè¨p/-IÖ@kÜp½¡¹ÁvU%:Åç<gØYá,žµÿõ¸-ò@¤0‘Md1²Ëœ–ª2Î\ñļ€*ïàrB¬ì6ˆN ¶­Ú¼y]Ì8â¹oŸ ìw`ú—Lâ×¾â-ü*Ëbá#žÃ~G¶n9ztËÖ#ÂÂÚ¸xþ7þ݃ùwùÿ3{Š-d“ØöHõoUlR>Y�@6ô;ßÝ`'³”DA]Sf7¡ ì š ´Ð²Zi´£IQ 4T2|Â(ƒ¬ý}‰Q2‘½� Q5£á|# zcQ;nŠ?kóçÇÇðX›èÈ…@C ã`>Â0˜"ÈhƒY˜0–�²,SY¾ð›/,Æ9âÃcJ)[%,µ<+lÀ*1„Vž±h–Æb1c…z~Uðò⯅>¬jydÕÉÚ†ûšº±þí¬ÓdÍ�$¹vðÀ=¾Ø0¨4+O°JÓËQv³"…EI`uKaîžFp;ÄhZÐÔfÚ:d�}4Ó¥åµ]í“r 0†d`öhmáb;2^Z-Õê‚)c£Ù3là‹/¼ð"¯gÝÖ­]»Ž›ñrÓÒÅ•ÛùµŸZ¾N·|^ºzÍ +!�ßU0gváŽãû˶:=gž}ûÚ}E­—¤²¿0èåë°ÅºÏTig[`ŸX²Ö¾¦‹!,Rœ¶.*‹�šÅi¼ýp5å``xT¸@ì©öÔfC½z»d¹Ã ¤„¼ËËZ�_c6Ë.ç=zå×üe¾ˆ­d£W^‘&]xäa~ŠÄ?æ§~äÜ�!l3£u`›·qµš¸Š€>>Há¬Ã+Çû>W¥u­²&R·ýv1-4Ìl‹$ÞššOvpÇÏ_µ÷é“âµG§GÛe±�1¤3§âü�à˜ÇÿTÍ·òyl5{øif((l^ͯò+,ˆ9¦ï¼ÀÖîh)ýÛÀf²YlÃ�Ì?>’ÍÏßçðß{‰KZkö ­5BÏÃðŠÀÜ Šªg²©ž4ϨùVæ H‘|R–”-•K›%ybPš=öô;ïHšº©»…Æ‘ÆÐ8Aä÷ûÒÉòÑ$ÛQDÉ.Š8@Á…¢«Òè¬ xÂ,J2ÚÉn‚­’),L´÷wšÜ1B³¡“ª ÙýF”¡:cG•:ö ]š<à‹Ô6Ç¢ &�Ä$ÚÑ.æ‚1Dô‚—y…xL�ã ñJ¼ÑÙ‹õ2Y¦�/ÍçI ‚VÉ« ÏÊÏ¢ÔÍ‹¤ÛX{¬=Ú£š&³û�M,>uwñ]g?~}ØêÇ>{‡½Í yyKº²òi¡>¸âqžÏJª&µ”I>üè©#Â}-WK—/_¡žU¥ä·’$À㾌‹`5 ‘Q‘ŠQ0˜„¨¨È&sd”èbàÚâ\Zi+a�— 61ÒdŽ +7@Lx˜µ‡!Ì“hûìdcscùGM/ªÏÔ Øö©Â¯«ª•¶)'0‰”s(*)9é¾$ôÛ·æ?CB´ Ÿ�ÜæMâãÓo�KK ‡½ûÈöWìXôÕùçüò£ß--nœór}éÆâ¯Þa!ßOûDÚöfï^KçOžÖíãC‘’üÞ ÌU�ÏZÚãøž·âU[(&¹{ˆÅä7½POça”9Äh…]!r�ÕîYuÄ][k_b� 0*æ(Tœƒâiõß=ߘšj×–þdÃõfÚo©Ç™ƒz2ÌJ‰H‰L‰Jñ¤D§ÄôOðEø"}Q>�/Ú“‘™•åɊΊÉJ(LXQYUê)�^S‘P�p-!²½k{§öÙ‘ÙQÙžìèÂȨBOaôÒÈ¥QK=K£Co:sÒ{ÛcÓÉ/Ä�¦z¥Ew><ƒ…c÷>Q°¡®¶¶ýª½gZ~bÂKë³�™rl¿_ÒòŠ'}|0iDË»órNl}í¸£duÏž»šU™Ýz /“®Â ¿/V²U¢ueÀ*S�]¬ ©U�—#†8‘ójhw^6~ýªíû«)>s`¸-|ixExu¸Ä:-rZ›‹isbxyä Y¯¾õÖ«Y/Œ¼wûÄþ!ëÁä¶Šé{»u»töì¥nÝvÇű»˜•9XßXZAâJœ ;é tþ°.u`uÖIÊk-[O› a°Ýa¤îØë´dª‡h¸~²ÑvòjÊ¡ìÈ¥‘Õ‘¨:ý´6¥ v›ƒÅÚÏob·ÖÖöÝ¿øLkë™Åû[N½ôôÓ;w>ýôKxHxøÇÆ�¹9l Sˆæpי˗ÏÐm|•�¶œ…¾8ÚíÆ•Ê*ɵ‹Iuv4´ÎQkYãw ŠK�á‚#p�[cñ¤O©Êó‡×ý±FRÿˆÂˆêˆ÷"®EHý¡?ë/ôwõ—º’•dcwS°¡ÀUnœ8[Uptp‡n5LчASºA,i>`9{øÑS“&¿7�_ç§XRóWÌP+l_µ±Î*<<áØ©Ûoß×µ;»ƒ™È3ßÃ??¹þà¾Mª$“`ÿ ]ÁxŸ[²1‹²Kf¥°Þ*×›„ Œ’háTݲIuËfÕ-¯±jy5dÌ8Ùœqò¤CÛ8 t Û®¦R!…ò¹²\Õ.Õ¨–á¢à�Ü[lzšjÄÂ?j&ßË’ùûu55û^“�²ò'—7'ãûå#�î!¾ŽP�«ñu»/ �€V&—Zíµ–õ&&(0Rݹ™NÕg_W�ˆŒF2»ƒüÑ�l—väÇÚµ•vQ&Í®í1·vñâʽuu^�wâ-a[ËC¦͛Žmk)•�-›¦ä~§®ñ RÊBYýatóYåcâ~¨$¦ˆ�©Øš3Uskhn$û·}Æ,c¶±ÐHö¯Hvz8QK³ª–�ßB›ÏÓx&òEIŠ]’%ƒ]–%´·GsI@¬‡õFYb¢Lf™fU®ó'íÚ)ÔØÐîeÅNš¨Fh6-B{DLJ°� $IÝ”±Bž0U)HË„2é7Ê3B•´^yQpP<( fŠ1AL”ºÉÝ >K>f[Êp…X&=%—6âzÃn|I:dxÓð¡áïx ÿ.^»Lœ ªx¿1Š b�Ô Þ¿´ì¦_k9U';›§±K-×[ö +±-Ÿ“¼7ôsÖ ª4oH¾[Û!^(]“d¿ÒHa²óÇÆ6]"hÅÀ_¼ì0†‚apYJ#÷ú‹-¥bö¾©“·¯v.ID±àMV[ÿÏ­¶¡Ýjf»þànµ[×b·4±j¶~Ï4�æ5C óÉu¨³Ô:Ö„�÷£Ã5(TsDmœœwlÿ°b(–K %J‰±ÄTb.¶””XKKl%öbGuص0ûÍo= ©ªÏñ{u¡hÝÞ=•ÏìÝûÌ5æàW¯ý•ÇìxñòéÓ—¿yûÔ·Ïó·y#¿Bn¨y'»Ã¯FÚ�^²d3­¤K­µÆzƒIV@ÉtØ(öÒöùËóïªò`VÐæ U'ñ·($‡E íþüKuu}�¬êéÆƒû™c-Hy“%‰f+ síÍ–—ÛbŸÑm¡Ïè¡�we¢s¥«,T=ï¼µ7bŸQáŠÕ 8c%ª\�¿)ö¡ð{õtÜû´‡>� nÉ™n“Ûì¶ô$7ÞÝÜÝÒÏØÏÔÏÜÏbö€‡Å ‰¦Ds× dg²«kpbdbT’'):.a¥i¥y¥ee€CýUBd“lF  цaØÃÑ-F’“ú'=’T’´4©"©:éZR(…�³o ²Ô`áÖ KÕ®¹sBYÙ¤uýOnÿûGÞ˜‘÷Vβ5Söøö<ûÅïóŠý÷%&Žãmíº¡ìùC±±ÇÒÓÇß?<ËW¹lÓÞHÕÊ{“£ü›´‰¬œNg«¤â.z?­WJMfÒ1�Ï6‡Uµrí`Hõ¿�ù÷% ^ñûgõ4 Û"—IQ�z*ØÙVÌW /zíµ [KK¥Müwå-Õe#7nþ@È.gw©ÞyÙù8m9¡ŸÏ}c‡­1±zg­…ö—Ó<’vZ¦K5ø>~‹jHíØf®ãê6 ¢3ÁoØQB<Û§n³—kkïÙ?ïÄÛì숰£%góæcۄ⟪÷æM¾†;Uéï¤=^"fƒ ?ùÚü8$õ†‚ ¹È„×ÉÙÓë·$‚AýµÇÔñN£þà¢þú¢þèÚ�.!þß[:½g(oäêÏ-¿"<* %ÂJa©°VØ&(êDFzWß9º`1âY&‰%ÒY_ì+¦(™�ɆâP1S"û”±0–�Çñb–’ylN§Jùr¶2æ²b,¦·’Eò +XÁʰŒÎƒ•rT±õÂF|V|VZ/ï”^’k”ãÊE¥U¹k¢z 0õ…þÎ7ØÃìá7øCMbvóÜûSµ?¦�vÓC|AñZa‰ ˆTì–h›s„WµŒTÕ6ljä@ï�>»1À¾Ë!t)…Ðõr”£Þ˜œñ§ÔTžq5•‰Ԕ›BˆNa„j>õ�Z�v·ÇÜ …ûj&'ijoŠ/ÚcŒ ‰‰ù“ÕXCPù‡¿.ŠƒGùìᙢ:EEÁ`“<¢Ë ~yùPŸC!ƒ·•ZC�ï·®7B½ÄTn¯ríw¤T + Z)(® àئ…Æÿ‘eâ˜Ñ]æçôåWëTά«S#‡v¿¢2Í|Û§µñØÛ’IñˆÉ¢(6Ña¬òçgO厢µ]F‘B8»±>@PãWLSÝ­�˜0L€:~øF,¦ÆRñMј¦!¹™fO‚t6‡&g†tSºÚÂ]J—®Fˆ’•¸HcLüˆž7u2UM›5u…„GÅSTÙãX×ý6Xlˆ«‹ˆV�ëÔTÚœ�¶ÆTúç_å¶ÕìÝ«w‡ªÚ×¼“%z¤†�êò>èN¹œ–ú^ဪζµGÒ&-»•p%¨ÊlWn»hB»n5éâa¤/813@±‡:›ܲnŒŠ‘ÐI2M0Í BÝž]Ñv¡Ô¿Þeˆ®ìéézÆ”‡^ÛnVÿ-±°ßN;¯E›2ìé¼.kC!LP¿h#I”í7jžA0•üy–Ù–ÇNõb§¼¡ld[^'˃{  +a!Ì�i0òa.x &“ x RˆÒ(7‰Zx`µ™ EtÍ�)�3¡;Õ…YÔ¾'åî†DÕ1V‘VšB÷)Ôg>¥¹ÔÒô fíÕ1ëši>Í¥þÅý,j­ò‘C}þµRîQê7æQ õ«>9ÚhS´9šDe¥…Ôf�;�Úy¨Íž£=»uœÑÚ(EĽÇÁtªUg-Ò¾(4K“¥'é¯÷M½Úû ÿý[?¢•ýç ¡µUk©}cè“Ò‚rí~eSiÇ]}béèa¥Öê—�lƒ1P= #FiY>Ó¾)ÀhݺSšNZfÄÛ@J3i ‡”Ž$ 2xÆ Úô[U�ÃD²d€00sİÎÈ™; BAÔ$P¿œÔžS[²éSæÌ"Þý\3z&hw’F¨Q[ +ïa qÚ¦�s­‡µÌðª…øöLëi­ígЇîŸù/5ÕèpG«ÏÚÓÖU7ñ·÷?ûŸDëË­‡[_¦ûƶò9-Ý֩Ŷ›ïÐIÿ üT´NÿEí~FsmÚ>Ü©¦-ßzâ¿ÄPü¿¶F­KZÞRC¢jµÃ:Îu±õtkο0<#+µÑÎñÒtÕöËÚ'#á~Ú!êþ €žÆQ;/‘@­âi÷©{L¤Öéäo{ÉÔkyð¡DôzHd¤î§5ŠÈL#=@;x"èUÒò}A(´ŸRÕ2-Ueþ¾!meXÀð¹:•°Œ¦Ï¦È÷‚j5ßíe–ß–à™•Æ�ÿ ¬q‚¿­v^´ç;�qSý„Nå97òÂ?©gHFG×D’ÒäDMþ†)>ˆ +endstream +endobj +1057 0 obj +<< +/Length1 7648 +/Filter /FlateDecode +/Length 4712 +>> +stream +xœí9yxSU¾çœ›&-PhZÒHYÓ„(Ýr“tOÓ&ÍžnIé’tI÷�nPËRÊ"ouFD}Èæ*OEÐÏ2Š ~úÍÈÌCGEßÌ8ú†qD�ܼ߹IK‹è|ïÏ÷¾¹§çž{Îù�ó[Îo;)¡h1Ho.)vW;V!4ÿ^]dv•,´(;¡ÿ ôS‹])ªjÁnBØýúÆn_/Ó.A(lôÑÚ5Üò·+Ò<„Dn„f�´5ûšæ¼`€¹ÓPµm0.g¶ÁzØ)Úºoÿ� q4ô#Ä4u­lôåý¶°öÛ cÇ»}·÷b'ê‚ï%”ž_w³\‘É"4÷]{¸wåÀ`à¤úzé<¢¼°Ð¶K\Y7+çˆaþ FÐ�=~’¶Ÿ¬¨J \ä.3'™§ +BX'ˆãö£&�0p…3'ù�&?çø‘sH rº Öa¨ �Æš Ò¾€qá{Qt¶‘J³[\‹T¼´èº�ïÆcu›ŠÑ+hÑ¢9!V’�EýœÎ9Ás&ÀßLZ>=Ô*�œ‡êA9“{�¿�º Êð%”Ë�½àˆe¡wÐr|iÈ Òa=J yˆ%N”FV¡%0f%k¡Æ#B9d5²¢÷ÐòñmÉïQódªÉ~€kFNF€É)ä$9ñwПýãȉ¾…Já*`ü¯˜—¡�†y´³¡­‡1;Ê$óQ<9{ Å2g�”_gA10žŒ¡;x^¡~ücÔŽ1l"T'©ãÛDÒ…±IùïQ¿}¸H˜ -!ÀŽò5¸àð*h§¡Ü…â`ÜBÒÐ F�fà? HÂBû&ZÊã–ó§ü¯çÿÒóXÍÿâûpÐ*u6¼1ß +À7"4EÁÈ Ø3)Ð2°¥\°� +äA5h Z·hN €PhV V“‹ò‘UÁl]p6ðù­Ë§Ç~àk~ü‰�âãKÚŽGoA9‡>CW°³¸·ãCøþI&änòy‡/—‚…ALÓÂÜÉìaŽ1_� ŠR ¸킇'—ÃâÂ'¼8¼7|_øÙˆÈyDcÄÆˆÇ"ž�x7â«i‚is ,þ[T?Rò@‹ä¤#f茎M$W²P‡§çÍø*3ïMx`.'ð8™žP�iS…"‰\“� dcc¥šd¢QkÓ5¬:r”, ãB¡$Z«QÙ•Z“¯õôcŸ ]e(Ëê«Õ–·…ûÂÔ‰®Ln[V†Z÷InNúŽŠ,AiixsÑ2]øU±Â¡/íº\¢:‡<3â±Ü‘�%jña™,WX�œ¦‰ú’F(à­å9àé_;#/’Ò 3]þ%sÍB(HŒNg%B"™-•ÈÏvöµ×õöu¶Öyqüá#8ÑÑÎ�Ûów©#VÊ`eup¥T£�Ö¨‰RÃÆFKfQjkg_o]{_gý‰ˆ÷Ȭl�ðqï9Ì}RKéÉÅmø0ù‰¡#IEJ©<]¤LW¦KA¶x³bû] ÃQöYÃÊíÛ¯‹rˆÉ£ùY™†Ê¬2feªvíB8ÀúГh„ò”ÎÈcžì͵ŽpÇ‘¬7 [ð¯ñpv|Eñ-\EÑj±66‚UÅJf å% +Eܹ|ŽP§ •Âj+ð>È)`_Œåï㾪Æbæ©k‡•Ô§èà¥Ú§£¹E�oŸ Q$$ÈãáM r@7Iø†²BUX häV«Çgm16²æÌ|‡ºÍÚñ³ðJ‘Ûd²65KoóÖêuQnKsktÕ‘aQµŽL�zeKŽÃše/pàl�F¯×‚ü û#•ä4š†"áä4˜³9XJ –-ÁuÝMMÕzŒû +ñ%NQ¼o>Ím¦4[!ïÉ$ïÒH€eí8Ù7ÑKÉËÈtnŸ´ZíjKÒ®,kß4³*Ò­/.))ÒG¯ÀÇÈ– ‹–vçZú ºª3õuEEåìr¼ h£8tä� åÅp°™tBÄ€&A%S�ùÎLJ5PU‰¥�­k5�ŽÖÁdŒz§¹�9R*ËL®'ÙyçnuöhŸ±KïÝ?„Wv”> 7³Žº +[QåJ¯kämš}Rm“idø÷g/ŽãFð‡ä.ÿ Ù\„xïò%É­›  ræhªÅ'{ƒBp2 +*……Bá R·åh;ŽÎt�VgÕ¯r8ôžUb*,q\ŸÖzœÎj¯ßãÎÑV°l…6«BSgÈ÷i4¾|C}ôº caÆ©ÂB}Q‘Þ`æå jУ8ª½ZŠH9AÇ ¹)'Tˆó’Uç*&’†C{κþ»ú’:kZúÃÝgV¸&WYÑ�ºM'±éöÎÍÏylEOùý.³Ý[i±VRËæ-òÚxê;ÀSr(iFçI7AA�Á ’nÿw$*r:Ï:�ÔzAÞd#y ¦!´X&’ǰ1r%Ãà?qg2꯷_«/yäòœß~×s{éŽt¡šŒ®8>G‰[&—ÿâqc‰6ŸÉ[¬m5qׯš›T†tŽ{Ho2ÑïÛãŧx{šóŒÆõn×z£!¯©Û³¿ø§¼ì^¦Aö1Á‰\̆(³xסªªCýçÎýÛ=;¶ŽŒ�±òG;;w»È˜ÿþ7Ýï?O)„]ðëp›#¡æ þG,“æ8<�»‘•²ÿ·�œ°‡`ÏÆþ\(4ø6|–{ûÛo=dÌö÷̹þy•·ˆ©ì‚QHf’�Zñò 5ó{¬ÖUÃ*kË–éÜŸñP¸w§×··¦f¯oå“Jüu®Á°¾¬l�aM›Í´b‡ xo9àéi +ÑNZ#ÐŽ�TÞ¤ÅÃíöxp#pjÆ9ÜëdŒûV…V Ã°‚FO€>ì¡ <Ít//M¸ ñAê†ñ›Üg°Ó¢îuœ‡uÜk°ÕKØÀà Éãßa øy¶ D‡¿áŽzl6 +Î2Qpçš¤Ž‘3t[Œ™(Ï%ýžLo«Çý"ð_'aþkðý:Éç«Îä,“óÄ`1Kú<Üý@K�‡$úß#'üï“e ‰�ïÉ ëYh!Ü–&;¡œ�/7/áÅÚ°×ëÝÛ@e>h³ RÉ‹<¨T=û[[÷{Š�#.÷z^ÝFŒ!=[ÈK&¤GULNÍE"=£jF­ÙêùlõÚ_Z~±u+Þ9À}LÆú«7än žÂuä2PC-.L)œtú¼ÉIQ(ÊŽ“JÖmg5¾qR+�Ïøw�ônÙ>s‚ܦ½ÉOã{FŒ$‡è] +ôΤ7V"—GƒÇÍ¿x°ÇóYq·ÖåzšÛ°Õf³Ú·âùÜçdLëͶôDsçq‹5Wg„ÓÈ Gƒ /§Ǥ• ä3ÁIVM…,…l�Šþb·ûÂÌÆ|ûò‚ŒBWvV»±a}xS˜-7Ó’˜—Y®¹Ã"J«ÈL3ä³KTq³¢ÎüÌÊÔ†Ò%¹Ùš„Ô9Q1‹�luPJq8âý!åG®ÁWOz^›óßGVÚ¨ÎØ�ÊJ€‰¡š  Ãã±D|ÐSZâñ˜†l¶¡BÐasMuu ã,CYYCøØ!äv7ìŠ_lL ¹›û¾�ûÞ÷ÑGA3ñ"|¤“Ì@R͵fD Ã3ö›–ý‡›OùvnÙû¿&ÍÿŸtõ()ö#NXÃç\c(œ®¥fAñh>÷\h>r+⾇KÓ³Ü죘’áõUÐã¤ÓĈFUÉÃØÍéq÷,>Q\l!ñÅ€¼rØLÈaC2¢¾ gÖÕgÚ¯§;õt·€‰„Éib¦aqüq:á`~m§í�­d}àCêø¨³Þÿe‚ÛMgÄ@ý%f&ï9$JÍ¥÷È}Æþâ ~_!$ ¬#~ÂËó›‡ds2™h²Z:â¼Þ¹�fëj#>£*gY·JåfÙrnÛ`Ò¥4ùÏ·¤æY6¹r½i©^]^MZZ MV‘p “ ã¸&'N”i±à&\¯wÚV¡¹s.øŽA@E±•«(ª¯u¦ n×&‹.µ™\à>ìò¦¦Õäê(®¼`ìºBXàkîM±+˜†Üˆ\Æá¢æÍ’†™¥9EõõE9%³b·4 )+ ª¬Î†Æ® µ»Ù4ºbBZ¦HKüÓÒ²é{惴:ÌÖ¡[H+;Çû給ý@\A\ùÀÁmüo"ÙÔ�;î‚’ M5e$ŸálaÍ–ìâ(` ¡h­É¸¶¤èöüÚäâÔBŸWãÈù¥žôäâFÓÆòòÑBã�ÝlWVQ{q-'×ù &hž,Íš$ +È–xÌæºöœ´|ŽSâsv¥·Ü‘¢UòºÃ]æug!J¡1œêÍÔ‚‰ =~¤)³ºÌl)÷xæÖe“dM‡b¡¶¬¢z÷6(ÐåeÉÁ;z�|1yV(· ]«¤°OCè–¶ÜCÖ�_Ôªüç ÜÖHà"wýŠ_)�º2*ˆ”÷hMry\Ô$›.ä 'íãŸa5:(ÈCãYÍ5à…Fó e¤Óh¾á¬Çóû �Ú0—/Åοs_s½‘\˜”\ðσ~0ŠŸ$ÉãÙâd©ÜOðCoÌ¢¦¬êÒB³›�¤<é…qÒŽüIòò¬àÞo‰¢81Y—“¥G'�Ìç~ˆ¿¸n\þ56Ü?IüŠ"^úTãËAŸøl ö§³�¯×›­#EE#VûhQÚ +�Ú�¦r©ÒÊÒ"@¿Ý GËË7šJ’½Þ¤$o�Á›Ä{ î:x ¤[y žÎ›=ЩÎ�Nš:çýÀ}•ô@y)܃̒æî)ˆZÇõ[zVñOø +sç¯7®Ëb¹•gÍKnºþnOÖßì+‚S²ŸÎs%‘ÇÅþJ•þ¶‡€î«êÚƒÜûDÁÇ¿”Àȃ“è�{JFðc �” +èLSS+(ÌPçè ¹Ît•7ÛÓ+ð0yš´,¹&%Û¦Á*OvD¢SµT�,WÈÅQ²|Í2ÓRoI¢zYü\¹$2j¡N•dY +øã€;yj"ÖSr!ÆS·ÃBVþbü2C™Ãa6{v€Çyi‰Ìi*Áû¶m4‡·¾¯® VŽox]š*sÂzâj2ô-Ù jV7QøÏ—.KÕÅùÜ[¥ k8‰J`ÿ?Íǰ�°xξ³gÜø oÐ< £„¯ñ,A>ž%(Ÿ¬Ý²¥öHÍÈÏjîXG1àcœ“(85>ͱø·tÿHx�mÐÓ�)áfǰÒt–‰Á�›Ö×=Úºi]Ý3GOŸÆQxö[oqãþÂÓÄqd1¬ñùK ŸX,枯íú¸ùÈDqýCNpFü"À.˜GvJ^qŽä¶ãiÜw¸Ïn·ã6@6v¢—™¹Ô3HA!^öx:˜;`|~½ºI°"¹§¹^OÆ>§t8°„àu¢[Äõáœü]€¶jú ¶ð¢ýüoÚôC®º?ôMàû™Ð7ƒrÐÉз-@WCßah¾-ô-D p<2 •¨ £~ÔŽZQ„ˆ§B©|]„Ü0Ò m Õ 0=h€ï÷ÃHÌ5ò+òÑ*hÛ`¬ŸŸ_Âï4+PD¨Ø»�‡X… 7kÈn¥c-ð½ +öm‚µÃ06×Ò›úe€³à»�à­@¡ £ì[Ð8’B¨s*5Ð�ñOàoÀN…Kº .øßxÏÑ_|oñÐÿLCóà°ÑäpCþ*àáSæ—>†ŸŸÝÔ¼Z…ÀÛk¦ÂÂó?5ºG" +endstream +endobj +1058 0 obj +<< +/Length1 47128 +/Filter /FlateDecode +/Length 11768 +>> +stream +xœí} xEÖhU�®žîžw23Éä53„IÏH0<–ÑW Þ$0¸¾ðÁ‚‹ Ês1bVAñ…¸à +ºŠˆþ‚ºnDÖ‹.†¤rOõ$XÝÝÿûîÿÝûÝoΡ«»«««N�wU’†PBH + öé3ìúe㫞$äùX›Ò· w_†¯ÞÏÁû‰}‡Üp“?+< ïÿBÔ÷¦›{�~ó•0!/¶Äçço¸©CÎŒ–¶Y„Эx?|ÂŒâò ÿH©'dÈÛx¿vÂms‚¿y©£FÈÈÝ„°a¥å“fŒfÓÎrãD|^5©xv9± ’çá½mÒôy¥…®yOr7Žßæ…É%Ń֭ÂþÛâó¼ÉXáü>iÞË÷[Nž1çö‰ŽÔ"ìo¿=½lBñÛÞBÈ!™¥3Šo/÷¿Ì–cûÅØ 8³xFI[ÛµHïsØåe³ç4œ £p|Ù°|VIù‚â�_2ÔEˆå)"yÅÆî^ºØûÖ8g÷I§‚ðÉwOÞ/ÏŸ Ù¦¡F¤jËU¶ÕL2$à{–"•ílCMÃkÚr³§f¿CÖ`™MÀ¬`ÄE"Øáß±P´eÛK8Ötâ«ñ6-z†�H)‹Ã¬€ª0¦È¶‘f})í=‘Ið"U=ÂC×XfÐ/‹mhh�O•÷HiSKöù—[I5›¯¨JÊÀ ﳤì2�¯ñ؈ÇxŒÁãI<*ïâ1:‘3¿6†Ú‘ªŸìå§H©ºÏsÉÞæÏYmô^í„ϰ�å'²WÝ­ã'Ÿeá³×Ér^AŒ¦>µH³Í» 5¿4®Òxæ¥dßCª”}æy ŸAFÀ|’i^ï Ul©2Û �^kÃÉ6YÏ+£ïÉvð¾ÿ:Îó’ŒÏÖó.$`™Húñ,Àk¿²•ŒùלŽA bƒÄ 1ˆA bƒÄ 1ˆA bƒÄ 1ˆA bƒÄ 1ˆA bƒÄ 1ˆA bƒÄ 1ˆA bƒÄ 1ˆA bƒÄ 1ˆA bƒÄ 1ˆA bƒÿ7@•ßc;KÚà‘©Õà�gýèŸüzžKjž"¿ó—F\Xã A’Eº’Þ¤?L†�aä2’Œ#SÈ©ù-¼ iEÚ‘kñù@|>” 7Ÿ“iòy׿†‰Ï^ý5¿«áE‹Ê`”´ ºªY¸ÿÄêÈ�#‚o� µk{ÕmÐe V“!ÕöyÁÝ CF(É|d5O©†°V­„Ó¿øµ‡_´k;pȈànÚªwAc·½‹ +°ò¦x)ï°ë{˜Ïä¨Õ<ŒÿúU'L>èz0½ëƒ®’®í®½‡-¢D aâÆ²% !×8mIjñ.�ø°lÑX×Âl'¯�Íçò2–id"–©æÓâÇ2¥4ɬñ›e¢Y&˜¥Ï,½ÔƒRâÔkÞÉk ñæuœY:©ƒ,ÄçNóN^µSyëìf��ì' +µQ+JŽ›OËEXg¥ÉÀ:ù°Œ`�¬ª›ojfi!6³”o¨;kϯ�§ª9/n–ŠÙ +Ì1³†š%‰4,„†ß€Pw±-¯p±-Ô +øùB_þóB¸ÐþQ ? øQÀyÿëeøAÀßœð}œð]�Á¿Pc@MDùÛ·ÿ[|kÀ_ká›G|ü_×ÂWµpoÎ8-àKÿ%à Ÿ 8%à³Z8ùi"?9>M„ëÓø‰‰ðÉÇaþI-|†¿¼æ©…�>ôð�|ðáqÿÐÇ]pì+?„¬ðglñçZxû? Gµñ£épäO~$þô^ÿ“Þ‹ƒÃøøp*¼ë�Cï¼Ì xçíBþÎËðÎ"åíHÃ[aþv!¼QÞ +ÛÞ˜—¹øA¯§ÀkØÿjW¾¿^}6™¿Úö½’Ä÷åÀ+{Ýü•$Øû²“ïuÃË{lüe'ì±ÁK8ØKv xÑ /ÄÁì°SÀŽxÞÕ>xûy®¶ãi{-<‹íŸM†*J¶6“Ù×OüuzŽç³|2B™¡ôPv(w);°E…RªÜEª±Ìgï+k•ùÊe>!)£ƒä!é kèÌÖ°5´€úi{� ’þžt íÆßåï’ãä8‚-«È\fзè´Awà[?‘ŸhïrY.=K¿FŠW‘÷a7Ȳó‚U8Ã÷�î3ä2[Á^ÉR~œµáÇÉëä ò‘ù�á©Tf†©ÐŽG¯â­ðž „PR-~E�#vˆ8ÉfË&‡…*±º—ÃUWw0'.?¿#qÕÕdÓPËí×%¤2¯'ñÑêß/_E³-ª?üƒ¾râ=ðãw¢ÛÉ“¢«ìy³ø�]0{N‰ØÉfu“Ãn1Ü*‡ëØÁœš¦nãóâr;³Ì�/Îëa–Í‹hÖªå¿_-~8Kß�,VÑ»ÅBù—3 ½X ?Žmã_dd‰Â…M2ÏΦ�h:s|Vÿ÷“üøÏ3äo£Žoø’wà爕$�ôH¼^å„*ïZçªDâ³%¨¾8O"Ž$Çr�>_ã:›M]é-T·Ë×)'�ºH(HÜf Û§,X0uê‚ùSé]b¿øD|,öÓͤ4Âjhâ™3âqæ›oh¢X"fÐåt6�C—‹r~_¤٠­"^Ø®°í|‰…l×µD5 H"§VäMÍÁèŒsÎ×3§ÍÝaœ»;tŽ›èh:“»XC x£Uû]Ì?aÏ QNáìÉC‘,’ªp%�úS9WÂ<‘8–9­UqkòKôrâÐ|^šì¿ëÓ�Õöa#^"аÿš‘ëŽÕ¸óóÝù—FÇ»ì�7�°¸ß¹ò-.þÝÈ4’ÁZûZ'GOLHHHlAZ$´HÌ%¹ ¹‰½ÈÞ'¡O¢³�RI7ÍËËí,yiqçåu +*^�jaƒÙ#_g¡þ}–TŒúðŽßŠ;¨�fÝyˆ&‹34™~Ñë΂)‹®DûµiWóÁ<�3| áKå,ΰiC¼UñúJãy{•\x>¥*¾:}­º*Ëï÷—ß—áòAÀêiY®ºÓÈÐc5qùî¨mœ>º%,~<ë:›ŸM}>¯G µÈÈtû¤¨%©é¹�Íi†=�=!ªÄžÙ_ß:ýø¤Õ›žÚ´fã#¿{ðÎÂ}cg}>�¦ÓЃÎ<°â³¯Ãaš•×eê„Ò)FÛ:‹&ƒ¯î¿û)ÔÂ1¨�PÚÙu‘ ÙÁNBö0«e;§°D§6ƒ$©šbó Ië~°&ÇÉécÝkм£Q¾k” AÈÝÉ�.ÄÍ~£è–­:~\‰VÀpüTÒ#ÒB±¤®Hª²¸VºWxª,;ìì9²Ä¾* Zšà3Ä•æúywÐu¶Ñ*¾’L§‘i�^Éâõ�+¹‡Lû^©¿­íÈlê¦Ùâ�â“ÊŸçßq¢øá ¾iït~\œùÚfߟÿAœí˜C;ôéó@Åm‹Û´“VZ‰ô¥ó³h¥-I—H žTùÔªÛJû +WU‹µ)«Â6=Éáø$B eXZìi×Ùƒ&yR¨g?”"m¡z=�ÔPw†I’šc’5ã;S‚PZRBo·uHÕ~W¯5£ÏP¿xS\'ÅZA{Oz�}qw#°÷DM»6¯îíØQœÿøœ8E Sè,úTPj&ÚÞYä©JzG¸ŸSü,Ì‘�ÀJ,®O'H!¢×3åÇå·Ã”F¬Hâ� }€Ƈ¼4DC(%õ{Ä,³¾#?þñEEÙƒ¾n!ò'Îôbé¤éi•hˬ"jU©n‡ž¶*;ѫ۠e’³u’7COJ΄$gF¨e6šz7É"Ó¢EÞ¡ \ɱpFFnç–¡¨�F�#Ø2·s^¼ç²€Ù;ÓçÌ™>mÖ,±`ñƒ4 Åì¤I-^õ8:ÃÏ�}=þÄ1£Æ�5f[{ÛÌ™3Ë**³¶U¾òæû*·eµ~eÙg_~ùÙ²WèÍ#‹ŠFŽW$e?çæ@Ù'FeoñWd%]¡T¡.V¹ÖúV…S–¤øÒ"ÉnÊþ`]ÝéèD6™s—¨vQÕô$·s“¼[dÐ&Úq¢ï�Ù:´j¿»`ͨ3âkšO-´%�ˆÅž)ûieI)*EiiˆzÚ ¼sr¨õ“¿Óâ6±JüNŒ °³wßýÛ{îùíÝw#Åg�ìÁJÊÅ‚QÓÁ¶’�ÊV•S¦�xÍU‡ö*]ic¤“x†N�ÉC) Å dØ‹Aˆš‰úcÁ+‰�T•[RU•©šÁU®Ëk–ªÅCKŒTÝP +Ù®)KTfèš…+Œ] !;@ šúÖý´ô|Q�ÓL�³Dÿ™x©FºõE‰Fc¸QjT’JZ©UêsŒ�uÆ«ˆGO®8-EØÂZk=hë¯ôá}µ~ú© ç·¨“aŠRÊ'©E¶9d>½C©àóµ9úÊ}ü>í}µ²’¯ÐÖè/h/éï’7èì]ËkÚ{úÇäCú!ûØr\ûDï` QAéS¿eœXȲè»,K,¬ßJW¦.qޝmÃÂl¨ü›Ý½èM@ÎiÄM‚dH$G^rîS_JZ¢¿”¨ Ä¥Ùœzb²b_šÍçuY|~¡æä“Ñ-AZB4*H)�¯Éώ褅«E‡CZ(´°QgÒÝñM�Ñ%� q£ÇŽ}ü¿æTÌ©ø/ÖoÁbñ©ø°þ.Ö‹v¡ ¥°|Èàëoëg�ŸP\,æ1Ë×–üå?¾÷ÈŒÕè7JQßÇ -ûI·H’Í¥Ø1vm×v}-¬JŠog#j›$fuMi‰8èz#Jsö®Éã’- £ª79µÓÛÉ|OÚ3õ«…â!1ˆî¢ ¿š:íèì?ÕÔüiöÑiC»\C7ÐZJ7\ÓE¼Û¿@\øækq¡ ?j#òTÍ7yš@ÚG¼d¿¾„î÷iÌgÞÎÕžøtˆfJ˜4q.{Ç?º1ênôÙ“ÍUäëñ`ÍϾ«ÿ‘®¤Ãèõs§”–N¹]T#NUvÔÝúí©Ï¾¡éÅsJÄ…§žÿ(™S,s%¤Cùé°’ìˆGÙ¯îcûÉm¿A¹ŽÒ$`3Åxð`“ì²_pÙ‡ØËí¨úMÖ&q¯â¬ŸÅ&Õ¯f›/žÀÐsR|‹Ç¶h¾‰c°fÙöEr€QìóÍ�ÕÎa«]ÃFcbDH䚑є¾àâ>„ƒÙÿ^Ìþ*¥.6ö£ÞjæuwEâ5Î05: £PTMöi�’jFqô ¨fÃ}ܧºlÝ¡›e ´Œ†¼ÐR“¤©“-E¶J¸ÝRi)·Ý«Ü§n³$d²ÖMëÅjÃØH>B§±R>C+g·£¡Ujò%Ú3Z|¡9y´ügÒÈÚÐWë;‚_¤Õo—ôÖŸb¡úugÙ ú]͹ÌIBÄ*9¬PPQéä¬O7¹.Ù•ÉÀ‹ƒ‘uæ{©%6ò§H'ȳh–G™&OÀtC§y†¡‡ ¢!3¬\×€Qn¨£#A=¯‹`”#ñêr\Ô.y&Œ�N3>–êÌ©9õóZZ@÷mXOÖ�ÝÀY·°‘–‘ÆdVf)3V°eÚ2ýiVm©6’ª`Žê£~p9ZÓ0t¥¹p�@_m¸6Râ˜L'A‰6U/rÜ«=¨?¦%¢Š—¼“YkºÉÀoQa‡Ó¿ŠGÅÖób«XÎ�×}�Ú6JAÝ _ÜÛÈCþòB' "©–<ù—`yªE ËÉиJ-¬£bÁYÑYç7Î:¿Y.§˜sµPRél¨ÄêW¯¡}éu8©±N¢“Õ"ëú‚êð³$ËoX'Kœ|Är3e)eS,VSðTJÊ${; Ðbhý&ÅD!H1©3ÿ*¯Ég$žtŒølÛ-Öíd‰o·PÍÕN±j¨°ž¨‹l²ps!²ƒx©D:>%”.j´ö½¬’¦ÒŽâˆøRˆJz×ñò;î(GUûöoõõµÊ>1nÆÄ‰Ó= 1=K +¹?’“œÄRü©¾\¦$$øÂ~Ÿ�K!u»mI‚á‹OWŠ_%Š�=Á¥[|VH�š’…Ž;ª:’²ü¸üüæI>B^&¦H½ $'&û“’’““Rò¼y¾ÞÞÞ¾áÞá¾!i%Þ_Qšó’‹÷³&ŸŽ9OB|Б²Só¦L™·QT²A¸¼‹_ºì†…‘÷Eé ]n =GM*!î?Õ¿Ë�¿ùá£ûÚÅUÞ%FÐÙåCQ#–£go‡ž=“<iMŠ'ÑmXÓŠ—¾®x_OÜîV¶‡×ºWµJ3¬�d Iö;<‹V®Ok«9(#RãJ=þ×™K�*;2¬<‹æ§æ§åòƒÒG…©cÒÆÆG…¦¦”¥–¥•&Ë‚3Cs¬slsì  ‚ B+­�ÙO[X\ÚbÝbÛbß–º-m[`[p[¨U¡tÝ�ÉÊ"º"j‰9½qff4)ÌQ”wç;ùÁ{FVlþùÏâ„øàwâ¿–.¥ÖwÞ7zñŠÏ�Ð u̧ +ß"v¹fÐ�î×%†rïýÇßóriïA×ÜgPZ(ûÏ;N� #—0ïáSͼ§SÄ¡F�Ï5èÚ¯ášëØÀj�°ÃtÂÜtÂæªø|MN6ÝÑ/;yƒ ·¨.éÜ/VvD{63*•Üɹf©”qy"L%*MÅaiž˜_I¿¤`†~l×R ¬1qBóüe�D#m s± «f +š $ÐDHTx@ j}I_Úú)½ùõ:–jî&—BC½›>L¢w×$rÑ‘îPG£GB´åÒ—Ò‘j*úRŽ$£/5ò¬Ò®ç!åÖ<\Wyº�+ – +̆Íq¶°�áF•.V³Y1Œ~1Äj!vÉC}˜äãè�ÕVYØ.‡´ÃM®7ç—=ï/Íû0^œ¹‡»¸ËAĮ膻òž¼“‘�1q,Ë‹�Ýìy£1‰3�¿®s«jó±DHPüÜ«yô$k’-“µ‚L¥Ç”ÒÖÁ‘‡±#GÉáÙj¶%[ËÑ;ãü{:úC¥ï­°Êüp7+7ó¡êPËPm”~³µÐVFÊh› “•É–m²>͘i�b+³Í…¹ÚíúmÖÛm‹-÷jØ^d{àe7^ÛgxI.fºIC=è­è¸ ��£3ÅzQ þ.΋”ÔëJy -»øJ¬¡5÷”éÉVDZ]©_À4¢IÉh¦~©Ì¢tå>ÒÕ¢7ÉÃ.Eá4EaiTì¸ÿLãÂȨlaCXjŸ� z”$ÓÖ�K»B¶qƒQfH6AcàöÐ?`F·Ô¿eFÿæ©[_ÿ«�zGDªBÄ ù�›]„*„u� éc‡³©7”+Ã…8±oúí _*o(óѪÂä‰Hk]%þ€•ü9ሺÎqÔ<x7e]ú!÷*IO€D»n·ö€ÝÓ-C.ÑÐ`sÜÑ0]¢uö§³ù�ÞlP‡ÌÁ¡ž™×¯ C3Ñmݼ3TžùpðáÐÁ'BÏŸ ½|%äÍIË\— Ü”6$0!­(poÚ¢Àò´e��ië;Òª.éÅ.­csÃîP®\š~«Ó›9lcù­£o,yP®ÃúíºkûǸzmñÁ}¿›ýæÍ³¿™C;P;½0h@Áõ�ÌȺ¿þ®-¥…ïn|cwÊÍ7´oOÝ)©ßË¿MGÿ>Võ`nšB®‰$«lG�dƒw•óPò¦Ä£~èI´éö$—²rÎGS)sålö®ÒŠÒdâÞlE +æþ&ñHp¦½�ÙóæÍž=þü»*ŽPCüt¤b×±†–~½uýú­O¯[÷4;>¾P¼(ê_,¿ÉA™JY墬ü¸‚N"‡é1ÅqØ~ÌØàV6$ ˆ’,½ìÄÓíÊ5Åù³®‘¬qÉ•r=q9È5„»ÙêBÉí¿ü†•O=µrØc‘aÏÞ"ÞÛ07ê0⥇ø4'û¹'žx.§£8àêÇ‹Ø% ó�1rU�Ĺ¢¼JØ@Ž:ÜøQm•ãÝ…ØY$©—µ›ä•Ôi +§ÏŸ®q�¾Ì+3³1å)ié”ãƒæÌÛ"·…ì¨8"~¢Æ‘9;7JÞÍš7ö²?×lœ0†ö§€Ø¿°îÉ=yDõšŠü+ødr]$D¼¡úaí_g£%®‹;d[•’ìeš×N +˜ÝÙ-Ťï`³Íɹ³r%–Ú3Ué ù®bZ�ð¨æq£îeûÚ‡oýna%ƪ£â9:�¶ í!–Í-šü[ëTzç�׈šìŽ4—&Ð8ÚU¼¶¼taÅL)ÕL\ì.AÆ“#).NmÚ•®#›êNƒÅ[ˆEçv{o§ÕÝÐmŠ›Vé^º×Ôu?x0ºÈ=�SWã:+F�M#|‘e‘Æ�jÉEo4š¦»ÑTò:Á’7u§9âObÍŽ‡?T=ëR0¸�Ô­‡"J¿øœ)Wч;”y(ÕVd`$#Å Ä{ØwÌ¿..ÍA?dß™¾!îr2lÄîˆxƒ½ÔnYMAÒr:*eñãY™ð ¨[µn\Ïš[7(å„ÜPt÷¦i{šmTÁù{â<µ½W±cªÀ3bÆî]½¹¦lÁí³Ë,Ø7~ ½®ö"½vÌ„-unñƒø2¢ y¹k6ƒºyåšu›W¬ÜŒü­B‡üM ¹‘D»B¨q"î¨÷�k“ƒ2;éë¶Û�.¹è�Zr÷¤[ú´ì]EþEþ¨zæº1MŠZŽÉIiÐ>'VÙ]Þ~íËIÓ½ñ…™¯½Ã¶Õ/£«—ÏLJÏ|vuýǪ§~ëøÂ³æ/“TÈݤ,̈N’�Ê&Æ)äºb7)¢Ñ‹ôr}‘®\΃ªh©C¬QŠ.®W=âÓÆyÍà òpÄc®Kw’MM S;q]¹0=-¦E~ðc„ö«Ý,ý¡¿eª#,ãÌ¥i%ܦܦη,†{•ûùC–u°‚¯T·¼I>æã]µÖ—І³BmF¨>—•³Ûøí~¶˜?¤ýž=Æ×¼W.Q‘jº–®¯?É‹Áb X£zêž§�£SÛH?í¢shäJÚ‹d“d_ú™2‚ñr¾ˆ72Âd‚êù¹FZÍ6\£îBû“)‘¬doœ®XHPµ$:O�¦Ã¡´�)h:ž8›fWûyìqýÉöTWFtý�Ö“*­§®»Üêˆî˜vèÞýôùî§åv¼[.@Іœ�ÌìÌ!™å™‹2—e>—i)¤¦Ü½¦4��»ó%½ðšÏ•=/—8$VQÚgpi«"C'•ãíä^ÏLš³¶LžqöËúᬟ=%iî´­ëê?aýöL{ú‰ú�•¢ÍãŠÊI“Îâì®ÖÙ�¿¬³§ÿ½Îzÿ�Î>þH“Î"Re}h&R!ªÖ.¯nˆ#l‡âV%꽜ƒ —·ÛU?U{¡K|Oßxh«Ñ”›¼%–ìÀÜ… çV,XP� +Ò[¼,N‰ÏÄK´/ÌfÆgäA‰x[Ô ¾M¯¡Äk$%Ub8‹”È8Ó-’z9Îr¬¢ŸÁÎTŒ13Ú4‹Ê®Ó§¯5áK¬hŒÇñÍeq’'ÍBòf ѳ1Ül¬ß¥››dè"ctc¤ƒ´I_i�ÒÖ˜/$¢¸ü;“?s®J5³…æ Í¢`mÍR†æ<‹o ¥Ÿ ±=òf!-ó.…¨_\s›¢^}›KÁ°/ºÄŸjÔ$¨Aι1gð¹ºj!°ßú¨ã�¾Ób¨v¢¹â¤QÄK£ÐÌšžHþ ]‡LäèÕJ”5 +;<¸Br«÷Î…q­[AŸ÷ù?Ô×)E»g–—ãNÅ\e<Ž›I>�Dì6æ°æ¥Ò¸jÑt®y�@Z8ºj6óÏaï±Äune]øÐå•óMÉCqé<¤Åõ­dd9Vsúʵó�2³‰K¸ò‡˜ŽÆÍ*wÆêºnèV«Íj×�<=É–dOr$:ÛjíõöF{k{[{{V0_ë¦w3ºY»ÚºÚêŒÖ¶~ö¹¶¹ö=Ú}�±ÇºÇ¶Çv¨‹CsèÃníbï™5.K—k–fKkåŸ~Ø]Z›N!aö‡ãJ' ,îIã÷‰ ¢¶ì»…Ó¾˜3ejÿ=¿ß¾nÂ'˜g�ËÎî”Û¦½UO_ÿÌÎ]ééÔÕ¹s×üìv-mãvT¥I¾&£<7ó'1[˜IrpÍ Üt§¶�šUg:š€+Î1ÌÓl£s`µ[qfÖà0³†ƒ—³†ƒ5ç»K§'^bOÒ3^~Ú œ.§{C¼E¬¢•�õ³“§˜+“ 7ëDoK3f·xïØó;vð'Åk D„wi Ï£'p±õ¤x=zU)2w“1‘ ¶ž£ «\tgœÊH¼Óîî‹>Í•µ�¨3>�sÙ£%/’™kG™{)gÌXO'3‡Û×}š 7þqÆkïÒ]¬ª|´ø®ýýs“Ó3ªV³¬‹ë7š^�L\¹éQÉWïÀû§®Ø?X÷Ÿí,�߯r™+:¹šÎJÙ"¶Œ­Ç5]÷#EüÜÄsˆ~N0ò��¶OS IÉ -iÈRòHgšùJ¶Ö‡ô¡±•"ívõ~ºîç‹Õ•d%] «•|�º^ /AËËû ½ ÔG'‰¾b®RTW êÅõröý0n¦âìmô·WíGtŽîGt–û�å~Dç_Ý�8õ‹ûrOçÿÄVÄW^#hä²\žmô57ÆÓ�JÃdG4�…ü}ã¨� äß >æÁ•Fw©.ì&N÷>kmÉÚð,µµÖFoi Û:8rI.í̺ñ®jWKí[OG_Ý~è«õ³�„áÊpm´>Ì:Ò6ÎQÊŠ”ñ¼H-²i�"k+WfórµÜR®Í1Ê­(õíý>ëC¶¥ŽGµÇmË[ØÓ°EyšÿA{ZßbÝfC�¨/h/ÙÞ¤á�òŽzœ} )Ÿð3Ú_õ¯¬ßÚF›ÂŠ7ÿÑ@¨³÷Ú�1âc1b +®”z…Õ]\¬N4j¯�ò³Òy‘>Fª•XõTM'òd sWµT‹EUR¥ê¦¢¬äI‘_¾E§$¬£ð…ž2,æåjµ5ÉÎÙè&V{.¯0;xi'ÿ?á'èBtô tÐ;Awý:¤…1úx˜®Ï†;ô»`,Ñ—ê�‘e° S×êëôõðœ^ _Õ%î‡ýpD?¢…£pJ?¥ŸÃ÷ú÷ú?È9ø‡Ú ç b*6 Œx–¢¤hñFÀŽBWÚh- ´ÒMëldÛ Ø@e V`”Ùï#‹ØRåu©¶ÈxŒ¬`k”Õêm¥ñ”ZÍ^U^Õ¤^QŽhû��ÈQvJù‹zJ;j|M>gß+ߨßkŸ?“ŸÔ®ÒRSh¦Ôè[b:�æ:Ï[Žu?‹{Y–.vÑAõ§êÐñâIiw~\Qšܜ4/r�3•8ÑÊlvpÈßâ¹Ú 9±š›3ì0˜‹c�ö ��.§ÃªkÒ#¡—w5 ­™¼Lƒ3” ý'ºÏ8LeMb,5ST›/;,¹ùTÂæ°ûÐe=j:­]ֱ͜F§•¨P8G ³pÍG½Ü«z--yKµ¥EÚØ5�§æYòùÎÞ¤7”Þ¼·:‰•¨÷±ûø}êbûbÇcl%..VÛW;¶²m°MyÚñ´ó�t/ìVªõjãUëKö—o³wíï:Þq~ÈΰüKŽ =¾ù <]ºøÑõÃS*²ú¾òø‘òÑ7% ]ÔkìÂż—Wü­ëÀr} !JäºNˆ$ih ¤Ë c¼Ü ¸&m€¨º÷€êTѽÎq_ú¹ç¿ËA##ÙpËVj™Çn³ÜcYnÑPÉ5EÞ®Z¸ËšYZk¾ÖÓ:@gý�ö¤ö<¼¢¡k¨ÀÚ—P£ù͉xå¡ri¨Þ¯ßÁ×ùØàúw•¢Úú5 ¤–•F÷T¹'�IúDâI²n÷9²=•)ª=Ô;�>¬•\0bòßýðáÃuÝw$wbJpCÈÅÖÙ37y-¡�Ii¸*À4­Ö…Î7[nXäN@nç.y�BMw—~”jî t‰n¤¥Ñ5¥¥Ò8óÒÜ(¥r³+UÏß’S +~ñ–æEtß iïà–¨LmÐCõ2×t~2W ~]±»•V:u{|o¯{XRõHºÉíH¼OgqŽ ì¤Á×)d“ÇØé²Iú±�ë»è–FÄ}.yr5&‹’Ë“‹’#É5 šoq\ÞäøXnxs`W&Äcbšx¬ºZîuˆOiK¹ßq±ÕÏ5î˜T{I$âæD3ÀN+qõèê�锯‘âºFz]ñšâ´nЕud“[ßig&±—v_LJ®ÞwaóÙ[HÉÙAÝ©_|mî½Èµ,ÏúçݤE‹ -­I{2<âwøÛس]¾¶•$ žÊ€joÙ»EưÍøx^îIEð&Ò7´?ÙU¡�½5êBË�‰©!¹º•Ú`ªÃ¿Ó‡ô+UBþBÄ•j1055ÊUh¦ÊÉñ«õ£‰Ï—5ÄÜ»�3”ÜÎ"×GÝö6.G%IÅÙù*ÓT{zïPxXëæ³«©“s‹KJk±!=•cægÊ–Š¢,@�™påtÅ Ó6‹~õ˱2Hã—eŠ*67tÿç& /F�«jŸmXÖ°ì_ôÜ¡Ùÿþ©Mô_oÜ0¸ñ¼ùªúOÿ©\xe ñ¬øª¡Xø•~+ä{b1–WÔ¿óÏ£\¢ùåQj~�'WÒz5å¿âñò¸Ø¼i䦸 ΉsæÕ¹†€<°¯@ƒ]òK\@ùU\1Ê2yHz£T]–"¶Ùpà*š.ɹáÅKsl¢äÙ†Á Ý›k�äP”K�å¿�ׯAÃÉÍ©EÿiOï\.›ƒøôŸÛþ‹^Fþ·Z/ü÷mšµ.ø÷m�¢-»ÐË„Q·2ÑKt@ï’‹Þ¾‹é[º£?‘ÿKÊÍd$zº1¦?Ê—+KôSÊýpŒ_Q°à¡aömàÙjz7ûUc:.]9/]¹®hán<Ç‘x"?I͈[¸pd7"CϘŠ´DTL¯Â‘â<¤  ¢)ÌG +º"ê¦o”Q¢iéƒh#ýíè%!7 :1> žoFt£ÇŽ£Ê/\ÇãœGâØ£½8÷1HCÔ—>IªˆÇô¥wÏ*O–Ïš1“,?«x +Y6¡xæl,'—ÌÂrÞ¬édÙ¤’2¼ž4«dY6¹x&¶™\2k¦Ï,&˦—e‰>ùžÅs&“e3§Éš²IÅ3ȲY3±åœÒ™“°œ,ûÿ¿mÊrú”IÅWøn…D}7EîÈ3Çù{H +iAZal”í ñÕæyPüsÈ×â·c9(þY,ûã”ôÿß©DþY +endstream +endobj +1059 0 obj +<< +/Length1 17264 +/Filter /FlateDecode +/Length 12304 +>> +stream +xœÝ|yxTŶo {êÝs§;Ý™:é„N‚!d" �@š�0 ažÂ<*¢‡C� ˆ&P"ǃ˜ƒÂAŒ<!ˆ=ˆ9\q@#z=€ +�â­Ú݉À»¾÷¾ïýñ¾ïõNí]µ‡ªµV­Zë·ÖÞ€0BÈ;ÅŒôÌ”=/ ”ÿœ�ìÛ»O~{¡ý ´»ô:dxïÇ.FèA´cú8hÆÔ_¡Ý ÚùC†§¤ÏùäƒT„ðnh�œ:oòB|ŠíqS,æj• Ïê"DR§/œ1o,™s ®óû÷̘¼h!’aCùû m˜1wÉô™©é𼩡ôú™Ó&Gîø ôÏÇËš ' >ÚÚpu˜9ï±'3ßÈÈ„¾¡‰Î]0ur÷…6„Œ5p¢qÞä'Šá¯áÚZNÿüÉó¦E^Ï~{E¹Ç.XôØ�ÏÐXÿ~}á£Óv;yèF $G .+2¡þñ¢ +ïDsî ­ þ»ðà ¥üøÅÈÑI±(ᬠME#ƒÿà9y‹‚~Îò&ì1º÷×G;3uC¢Ö&È‚ª¡$ŽÂÖ@ÂYü ¿*fˆÕÐtŽôc4�‡D/é¨""Æûý7tzŸbäC1h¹dgv¼Už‡¿œ„ð¥;—‚´Ìl»“S'œ%Œ4 êJ”8o�óµPÆA{Wà~¼ J1”«pn:”ÕPnBÙe]ð\Eð|”UPVîçÏ¢¢»Êu(P¼¼ÿàý¼�PÚúçíSAZyýc(#ƒ÷.Þ»88&?—eS€~íï?Hû™@ŸxLïÁãjô6:Ž–Áv\+ûÑ!Ô‚jÐ<¨¯C hž�šÑ*hq­òkBa.¢€âQ(vØcí( ~p4iÚ ¡P!�Æ£‰hù�;\ÇP'44n"š|çÎ�/ßî×�7eI(Á¨SŒeñïó=TóîhOr§ûš19fºÏ¸$¦þÎ�¡EB„8zŸ¹�z•}‚7îò]¼œÜiÀТ˜zììÓ;ØmŸI½áäð"¨òœ†ó}zk×ø¨ûD/üNÚ3ufÌÓ–§ãº=m™Ö-ù )ÁŽý›Ç‹½"±U" +û$`;bPÑö6dƒ½U«[´½m…½I«÷ßWìåÅF´Z˜2Šõ(öªÖŸN»K±R,kuI»GÔê‚vžjgˆvûF3Êm]NýŒÞfôV:ýí0ýu9ýåf¹ø £¿nÞ-Þ,§7K„×ãÅ£é Ÿp=žþûçñß·èÏ)ô¿ý‰ÑÓé5;ý¡’¶‰-Œ¶Ôß9ë»#|ß—~wµXü®’^-¦ß2úÍ×â7Œ~A¿bôÊú%£ÿy˜^þW˜xùýW½TI¿`ô"£Ÿæ?gô3½PI?ýÄ!~Êè'ëõâ'úñrúQ7Ú �ænô<£ç>TÅsŒ~¨Ò³Œ~Àè™§­â™HúÏPú>£ïUÒ¦2¯ØÄèiFO-§ï2z’Ñw=±Õ(62zœÑcŒ¾ÍèQèï¨�1ІýÇ[ãŦÿ(Þ:ìßOßò ‡½ô£+i}E/ñMFëàPw‹¾}`ôõbº¿˜þÝD÷Ùè^F_c¾Vú*£{ý›�Ö2úÊn“øJ:Ým¢/ﲊ/'Ò]Vú×—’Å¿.§/%Ó¿0º“Ñ­Ù&ÖÓ/XÄaô }^¥Û݃lct«‘Voé,V3º¥3­‚ñ«*iås‡ÅJFŸÝzî0}®DØüŒWÜ<žnö ›}–Ñ�ÐÞx˜>㥠ŒŠ^tp»ÁN×ëi9œ(/¦e ´2/}ÚJ×1º–ÑRF׬¶Šk]m¥ÿÁè*FŸ²æ‹O §+-y’®øórq£^N—»éŸ]f¢K}‚ÑÇ]ü˜A\l¦‹ë1ò]3ÐÇŽ +‹lt‘Ox”ÑG]Èè‚ùÃÅ•tþ¼Dqþp:/‘ÎetN:�Íè¬t:ó�q˜Ngt£ÅŒN�â§2:YÄ)n:™ÑIŒNdt½8ÁDÇÓqïÒ±Ðk§cô4ºÈNG1:’ч#ÂćÓéF‡3:ŒÑ‡–Ó¡Œ±ÓÁŒÂÉâ F¦iÿB—Ø?›>h ]´_—Ø�ѾÐê[L  Up˜öqÑÞp¢w6}0ß*>h£ÖŸO'ä÷2‹ùVš_O´zùLb/3íU��BË—g}&ê«Ç%ÐÊ3èÄ<Í«Ç>_±Ð“Ñ@B�[4—Ñ£9 àœbÚ5-\ì:€f3š•l³Í@»¤†‹]Ð 8d0š7¦3š—ÓÂij8M�ZŠ‹vÖ…Š�ÓäN!b²�&×>l'‹UìB;qr+…¤¼b£À�xiGÒMìÈh"£ ŒÆ›©74_ôö¡Ì4ŽÑX³YŒeÔ“,z–Ó˜d=€ºad7£QŒF‚l#�€Y‰£áŒ†1êbÔ =8 h¨#Y ͧ»Et$S»…†À}!vjƒçmŒZ�sk>µÀ+µdg6D³™š²3UÑd ¦€ìŒ ;£J� »‚AG \·²=£*p¢2ª ¥Š…ÊŒJеĨh§˜£·À9$‹¤Å@N¦ÈBq=.^½'ýÿóCÿ¯ ø¿ü¬´ÀK-ÞÇ鈟)%+´mõ€,šàÈï«ÇMx>õ]ÈûUèg¬Ò“8j ðl‘à�³h»ödý-¦o¡s€‘>ƒÚ78‡Â³øòàKÐÛºßG¡€cÐqØ/£ ´Gãyè%üô¸ Æ\€V8’aÐóû2z•¶ ½„@�S¶ +迈 2tm!WѨüå‡k +Œ�›ÑMè©–ô Óá¾ÐÛV´¯ô´H@àʺ,6“$èõp€Ð´]l·pyÀ±Yü ® %ÕKv9¸àrÛ…ßÂid0:Ï/C#è8úý ¯â„'èUTA�„f£3b³dGrª�¦ã%Â$m[Æù#O“p-º +}N¡¿BÛ”m×8Fè&sdç¶kûŠÀ^² ÷é-�ûFÂp?¡€æÁ•eÂ@´í„'@2- ™0ú´L\ØP-lÉâzZ ýkÒÀ¤ÚN¦ã2 ö&Hsí�²aŒ(ñZ�ÝH^މÍ>Þõ‹$¹ {ñnò0™K¶�Fj…­3íMGÓEB–0Y8(ºÄ‘âKâ)Yª”~’­rwy²ü”¼K Sþ¢Óë&ê^Ò]TU5M}J}UýDýDŸ§«?lÐúVš�Ý��LѦѦ¯Ì3̵°5™¿±(°EÁö¬å‚Õm�n=d½a+²=ck´Ý YòŠ=Å>ݾÓþ½£‹c™ã§ÐB'‡¾ìè|Û•åZâúÂu#lÒ¢sñ‹EûÌ´TZƒÖ*•1•�j9ŸÛ’ž““†R®ø[Rq†•ÆQk†#ŽMŽMMbsë#lžÖZÏ@«†ÑZ +ú[FQà†ð:úB‘A±œoù¼% Y®C�©Ø§mtÅkg_ƒN@×xÑ´ ï‹ (E£þ¾ÔH§\NQ˜ˆÝ]yˆYo5F»£"#Â]ÎЛÕb6 ªN ðpÉc9ÿž““›{>7ןË÷�é-é0 ÍÉ �VâBâ x2=ZÁq4ƒì™ycVͬëì›·Ø¥™5³nÎÚ1“1Üq»‰SfbåÆˆ›É&ãlòV¶¿šMÁ/ðR�oÅ;ZO²ýÀu;'Œ-‘�¥ b_Ž’ØÉ]‚מbq†`oY‡ щn{YÈ\aò¸-‚ÔAé$"½"&Ƙ@pn§™Ê©–óÎÜgº?·Åâ¿r øy'½ñÚÍk–kïܼfµåXs¬6'”dVVf—ø«$9ì¡ÀV||Bfh¨ÓŸÙ%+;3à œ´††:ì’LÌÿÓÂ/f.žw¾O?5¥¸iê»§Ï)ÆCvŽxøÅ¡ÿüäê[¤7L+?ã,~^X8adñí£à¾:w<Ð3ŸàÓÑu•Ï6}ÿ½è5)E`EÛºõŸ:~‘fnØ= +Gnˆ§rÐH_Š;;*16ÒAuÏšcŸÍÞ”ølç�æMôYWdD̤¤:ôH5xÕ.úh5ÉÐÍÒx¾Åßb¹Æ®åpöøL^¾pnÕ¸Îá<ÛC3Ò9×q±’Ü%+#=Ô©1�°ÓûÇ—Iý¬ÁƒæÌ8xViýߢÎ�Ó•®­cýâ[G¿sÖ�Asç4§´¾Ô·899íКÒzœ7xöœAƒæÎRz0µsÊcy«½‰Ã'á�“¾2 .Ì™=.$'/îµæ`=�2sî|)œûøXŽ×}S¬b3; FƒÉi4’;‘ÎINˆ Ó3ºdf‰iÙNŒQ~¶A'aQ6§](‰ÆÊiU¶X�·Ê]i«–�(Ëõ!;ÉãJŒ0{„%Ñæ‰PŒ–ˆÎ6GWËç-�þFË;qÝÐÄêÁ¥÷Ε›×>ú'\ +è‹Õ™“ +a£l1ýÕöƒø/P‹1W¨„„ ®-θ 䆸*i +Å… Ú’m“5�Yggee“8\“OñKýÔ6~hö'ìë§ËÒSO¾ÚkUA÷å}&/ì–5nì»Û×)"ÎBËZϦUÎŒ)�^üwÑWó +zcã{ë¾+î÷tßÊ×\Î7¼cu_y¦ð/ãªNºœf§ab¡µ¤A³.¶71Z+€]À¨p“Ò¨Ò4%a\Ë~¦‹%¬D°jÒv´Íd”µIÈ¥šà©ô+×. ·jqØmθx’ÙÅ–M¯^µjuMÕæÍU’í +ëþõW¬Û××ðñ]Â�-Ðï8è7¡­_™÷+c½‚\‚Mýú[Òï7#Ôæ°9.Ë–Ù…àqZŸ5лdka¹—.³Ü–oñ;_^Áïð¼Ð.Ò_H½±¢Á¾N£Æ”�C…>/Z Ï«ØTiS *ÕIVˆ  +3 z]˜Q²i&ús(NÍ(pqð3�ü´S±(Ê^�Ž˜àõf‹Ö «WHb[ñô¶oÛ—ƒ§³­9xè"JA)8…¤Ð!EL‘Rä%E—¢¦èóPÎ#y4OÈó¤<9OÉÓå©yú!hB†¨CôÑD<‘LT'êw xÙAw;ÄÒy‡²C·Cݡߋöâ½d/Ý+ì÷J{å½Ê^Ý^u¯þ:‚��#ôˆpD<"‘�(GtGÔ#ú‚?"&8�(L'Jå‰ÊDø�:ê0�ÇÚšXÇ�XbµØ2ÒÁ¯’m§�Á_Êê:tHN׫ח•­ßPV¶áÇ7~üñúur-{èÐ쮃’íìvŠ�fàTœ…³qj {’­dO±'ñZüg¼¯…™» ¢fNEñ>;­H•¸VFU:%NrS˜=La£_›ôôë0 ©^�UÌôfX¹®˜p7özgùß­¬ï«¹–¯œ-ÐkÌm$zÈ×EzEIt……Sg„W’Ä|‹õec•½R@UYT‚U·3ÖB;DYü0ÒÑ£`ƒÃ]/`Å6“èLë…‘3³PvV›?ÉÌy Ü6J^L^ó/>Œ]™Å›Jƾ»pÆÉÉŸaýèâ®Íµµµ'pçžK«†,ß�ÿà{iéWÿ1éèc½x‚­]ÌzQ_ 7¤Ê¡–év«¤è²˜]‘Uq•Rµã•Ž¡!ˆÚÃÜñ7��¶ë¢;½@ðù«¶Ä[@5¹rrHKœû7f�»þ ï‹ËüÝ ¶M•MÛÙ÷7f|4cú;Svíß¿eëÖ²í׌n˜¹ä…°¸ŽF'œ|îŸßÇw8•Ù¥rýSÕ»–Î[´,1ñPLÌgo,{‰û7ˆ‹„0‡,`¾/©QjÌGT/W‰˜®ÕaƒŠÜŠ ™ L¿Ÿ#Í]á5[Ðÿ§@ħ¸»DÆ%X(O&¹Ä:â�=ß�ºuî¡—^:ô÷W_Û-ƒÙä¶TB™¾0ÑK(¡^AòE�')p,Š–�ÒFÍ­¥\oi[$¼ŒŽIÂÀž2º§õ»sDiÍ›GÞZ)&ñ\û*�È`ÍæÆ~ÐçuPU‚TåN®²�ÕMx%Õeèð€ÛÑÁmÖ¹±ÔmöD§Â¤µh³ÆeѦ꼕’¹KÞ6<Â×bPÿ;À™�»Ð™Yºé¹Õk7=ÇN¯ÜøógÞ¸²rcW®°;;•,YZ²bÙ’r¢êé§««Ê×má9°bÿÙ³ûWðxÞÝqúÊ—§jNá)OþùÏO.-YÉupT qÔu÷ņH¨*ôoc™aƒ¥*VªŠ¬Œ­ö†HGÇê܆ø0>ÅWζ´¹пÚ ·ÜPM÷lV޳8Ɉ±ñÙ¬:bå¦M0•¥—ùLŸHá3ýï/°ð3»È¾/ÜL*Û¦±uL5öà°â9X½þ_XÇžf X)[ 4üª� Åd>#Ù‰ö;%G HÑ 7×NÖt´~¿�Àβp·Ðƒæÿ¡!z}! +øö¨T@QX ¸6Ž®pð„”÷¦A#øî* 'ÙY¾’‹Ðza‰ðè�ÇgÞDúšôªŒ J¸Â¥kH¦ŒŽ8p&–ø_£Ãn_<ômv”ïÜ…wòY)“„%tg�CƒP#‘¤ˆ8À`cº†7À™h«J‘àáÝܾD {H~íýÔH" +Qx ¿*K$Q@œšÜ–vjB21'Gë„£o×± »Ø„7q ä:¬& è‡Å¢e¾|=D¦²h�¼aáaT Dô†‡‡åG…‹D�ÂÌ(ÚRf^o¨ +©Œ^ã‘bÂBu"„°1:þ¥c¨ÇÐè8îÏs0¡»-þð�è&»~Íò>¬�68/œ–Äðq°ßç´´…Â!»ƒò~OC�cz¦¬š7xÿ” Gfºøà„¢>ñ'ššðÆ­SÖ ݽ(môü>½ßÊézôÅ�«Æ�ÌÑ#…ý Q>Š`o [ÅE° +º …¾´Ä¤áNj2è"ºÐ½NÝ^ƒ5¡ÃÞ$§{oZRf‚QJ4 )ÉŽÂ�� vO’!¹s&,¯°ÜÆ6¶@´�çù©ÆæFm¡·s›ê3–ˆ%R‰\Rb/qH¯× ,ò�¸L¾jÚâ�Y¤™Ê¬l'\‰ 4lÁT2gÎÊ•sæ””?ã]5ìÅsç^º¦Ã¾�7ÙEÜÛ²ææ¤æ-ëÆ¶±ñøIœ{öñ¬Ü¶måSÛ¶±oäõþù­·~.è‘·½ðÌAö&[jw”†¹ð‡¸¯Áÿd7ÿ2ñÂÌïѼ¢Š¶øz!/@]Pk¯(ÈP$¯( +:/U(Ø«Ry xM¼¦\…÷�ÓAU$-‹¡ST=È(�Æ€Õæ2ÍæÊ�¿»j +Øáý2Åx¼/\EfT›@±žÔ èdIYƒ×e<�©GÆGf6C„ô÷øÔÙù­7æžãZúÚ­$¼š-ã¶{ðóð£@<ÃýYªRuU¶µ¸Jý{´U¢™Ü¡bzdš¹m©¾hƒEó-Bá)Š A¦m¯ç.³íñàG~ÜWùÂî¿vÕÊͬ?>ôÕ¯«Vmz™Ýd¿±rªõâ²õÏ®#ÓYÏ…Ë)ÞõÎë^°‡ž©iâ±@Xä4Xqa¨³/<ìu´?´Š_7ì·Té*iuxHº¥I©áœ´ß-ØáTïïúŒhØ7+[H´s,»ÌŽã<5vç þµ#O46ž(z¥0³cG\‰âù¸ºcÇ3=|yßgÿdøøÚ_”X¢Ï!UéÖ¢*³„Ì:™¦Òd·%ÕdøyÜ]oz–Õ†hñXñ�;§OÝA“ŠñHÜ›½ÅjÙÙ]·q?<àöí'Ķ™•¦~ÆÁèŒ8jzÔÑ*q4�Ö*UÂßU,êÒdBmJÛ'£Ýòr‚>Þ:‚lh}”ñ?Á‘MAmë—¢Ÿ!AÏ:ÔÁìYø;˜T­Û.j Ûwww•.hG¦µnkâýõ«mÍÖâµ/…¡0GQ(×ç G¡4¼*òžyrG„¹ (+$]Êts5ò΃“ÅÎ^ÿ‹³Æez„¡5=ή°FìÃQö }¨vâ‰GÞypZÇOñÖeá*¼€O\fÖ™A…ì LÛ)ÖíÁwqDüöÓ$ q‰REþ. µª¼Ši:.SrÔ\e†@HÂ�%ìãÖ5‘ŽMM­ó\èvR|+‰œlÍáR<½JZ¯à5Umv„*ð¼ÙÔ-£l��g!�òð#½]Œ™°?E{°“8Çç°“ ËÛ+jk…•(Hë)­×*ŸGñêwd/:ŠH(ET‰gC%ü;á–£Sš%i7ŠÀ�Æ@Y �J¼¯d‘ò0¥éŠÉRq‰²Lg"eIDæ7%ˆ�¤$9^éF i_©¯<–Ž‹¤"y”2‡.¥OÊN03 03 eM8OüÐz˜Œ¼Î¶r Í$[Z_ð¯'-/µÖ77‹´ì³ËgÐÔ »iê"Y4Ø”r% k‡çã&rÖ_,6c¾‘ðÜx΀Vû:)[eJ‰Š Ö‚óU™P¤€0ô`VÁ¦Šª$ )ª„R��%Ø&�Æö|˜x*“´Å%ûÍ*Fã}DEÕ9±‹:—.w¤ñJG]ΡYJW�É,æR£C<È€>×Ö¸‘«€ÎæÃìf5»qØVȯ·’Äÿ4äÖ§AÜ] ­°y¾H@=˜@@™ÏÉ>ŠebÒd+JUÛLF€Þœ»¢'�SéÄ|ã�Ä%w$ñrWy)&³åÅd©¬º$ X*À…Ò(<Ï”¸ :AoaW†þõøÄ”ãbóí áý[IÂû·3À’-†õ:®-Wâ ÑU™i•£Ò\íBé†,)Ý–éÒˆjµ©¸-O06ä®:]Wºµº´´zké¹_Z[oþâoý…\Å…8œ} ^´ž}�Ãp![ÊJðŸñZ\ŠKX ŒÎ­ÚbÍŽ† $Ÿ WY˜R›EUˆ€ÄtcW+rë2ì�˜H-U€ïr.� ¢Äß•?¿}=ˆÜ„ݹýÝi1¥õÌæÕ«7íúò³‹ÿÙº›ãÇÅìg�_«WÆ ·Åjލ¢Í4YÝV—Å`F.0ïj3P|F¬Z‚ÕÒ¨ !GKL‹±RÜ]9Ù)ß-R!‡+·~árXWön•¥M:—’ÐÀ–° ¬º_C1ýå^Iñwˆü(�LŠD³}]0PUòR�Š^A ù’€Tª!^«Dk¨N¢*µ¢HUÃÒkš]uR£Æ›‹Îšc f‰s¹m&Úã;SL††:µ÷ +qZŒ®åÚ…M~<XÓ§û-›úv®¹‰¥[?¸¸qCÕ3ämû‚]l&^òâøÖubón>LF·^{jÍÊuA¿Ýdž€þÃ×Ãh &½×íVtDV½ÑÑî|UãuûË®*+~½,Ty+­Õ‰nU!£øˆSš]ΉMM䱩¿å +Y …‹í.þ¿Mus£Gø’Qe$Ã2£2Áµç´�Îÿ9—’�ÀcÍ€1éõq'Tìš÷Üì�²_ý³ÎÏYôþÌêÚÅç~ð6^Ù î|¿{îêG¦ÎŒs¥}øFó¿’“?.ì½nÙÂÇcÂRjÞý¯à=æq'Ì£Œ"}&)`ôº�_í&òwdZú«Ý€ÀS„E,¹‰%�¸ÕÌ#kŒ6�ôzhy�Ž>§™Ú�€uU®j ^ë6»­i,¿»}�‚oá¢�uoçoBùúLÞäI,Îi|ü¦&ƒ9fÉÈQOz̆Ó9ùµ³gÕ>اéA·ø óƇuÏÍí6n.½éŸùÕÛyÝ»uëÞó§�°EË ôuÄ<€¼ [DÀòÍG">@ÝB”GRÄTÞ9i·»ÔMù¡ ⎎õrœŠ3ÈL<ñ,pƒ 8[+&�m~A©­ºìë ÞO§êUGU½ +fT¯‡5!CØåDE‘‰—2`/2ä«à *�WP <4 |¶§—QJð•¡?·ÝÜK5· s/¡p»ëÒq%šM£…h•gb“Tž!cD½SO ^á1QIÒyõñ†LÒ�f +ÝÄîJ7]}–a�Ç�":J)Ž•ÆÊÔQº"ýxà e¦a }\X¢{\ŠiÍ á4ŽÒ¸µçöTœ¸t¤éô°Ù½i¬ÿs¡áV}ÂÏ×” äÒ !ƒw|t^�‡’ÐóCJ€ØÖ«Å%˜ˆü@‰éùgÄú|=àÜ�NÒƒôÛ Ý¥Ô]åâŠÿŠõ> a¹_B÷OáþlÂhW£(è]bN¤Åx}‘þI²D|B¯çozÍŠY±“pÅqR’âÕgö­é§‘EÄÂ�*  HÀßÈOþ”õ—>eϲÅðup«ï“ŒÖ|ÿU²ªu9urÝh‹Ã4Ú×ù~^¤p^•|îfÐPQÀ2rE7Ê•uÚÚ FžÿKå �KÓû1ž‹ç|Ê<ØÌ#›ü§Z§�ÆgØÏô É+Üí3 uÒ›¤½ð™öà) ¿–’ðkI�#Κáðà3x÷O?±"É^ñ›¿âþwXƒEÝ÷Žƒ ÆKm þøKiã2F&m#Ó:ü¦ÈGF=$Â_À7jAP`d«'l&%¬è§Ÿ$û¯_THYûJšñw&æ7P=Iy/øÆ ©pöv +›7t( +f<ã„e<þ@ó}€E �1¸Ì2ªsÉå6OYÌ‘¨ò ¶j—»„0“*zÇ’£ç–ëÜd§Þ”¥€õ_æû¬9Á°?*5:5&Õ“[ƒjp ©Qkô;Ckœ5®š°špÓxÜžÈÎäð¿= �‘WƬièñâ_–ÎÝò>x°ûë%{ïö¿Ák6M8:vúᢲ=âcHÆ# §- +½ûµ>S_ß¹º¸éêw§§me浫W—•­^½–ž%þÖ²~ø(Ü;°g�bú�.|~¾ù³ mô�\@O_öʼn�¯ìÛÎç¬TÈ-u©Y°A©“p9Úf’Ž©$DF:Q2šõvž½Ÿüþ&�§VÓm\r>mŽ >ÈôpÅÎN„W²õ¬'½òºd¯~hÆÔ + +=[1¸þ5M:¬Ÿ` ®×~¾„0ƒ;"AGme!¡ºrwh¹™Âju›�'{ ! I†¾’꾎ܵ18w–+W ÕÒÌcòœûµ;ÄN~ÇM=È]SëÌÌ cJW–n¨X»¢´þÚ7w ŸRóàsk;m™×øÝw�s+SêIΙ�?>sæÓ 좟ù##ê:wÚ¹OY>aî†e¬àn#ÇlDAÙEh²ëäséL”a^nm0lƒèOBý�à¿ +ì|jË0·EC?9Ú÷Rµ4·f„ˆƒ³YYV_Ÿ¶{Ñß^!u­ýI]Õ†7ÿÖZ*Ù[_š4õ2—Ú~¯7Œ§CFÔÙ¦Ô!C£º “H�@ê±$DTÙ“u¥ÅŸxyLƒ·‡ó8ÃñÖÇxž>žÇ.ãèúza’?¥¢‚æ“yŠb#©Æ1BÒÕ%"¬–+¸ŽZMÛè1å¸M¯1 ’ ^ù76UV,°¦D®€ëoÿ´µŠØq|ãõ¿²ïÆÀ’²Ó¯*n—?·}¹ô׫\š-ÀÝ~Ͳ�ðuSœœàœ s‚¿tÊ=‹N €œ€êI†ch[0Ë Ã’Ôõ1€¼[ÒÛ Â•û ü í�p™c§aQ”Pâ]J&é"f)d:YLÁ¸*JX—&…Ë.%‘&ˆ‰rwÚq–ëöF Øg1¶è +¿s´ëh®?H¸Ps¯\×^£ò¸Äëë›*¤Š©Rªœª¤êRÕT}^hž3Ï•–ž‘™•ç.¡%B0y®”èJÔ}Eh…³ÂUV^QYUáŽÃã5—j½{yü¾NÚEòRì¬þ¥ vg í¾;§aÎË/{¦æ œF¯õës–]j}‚¬üaѲ¯ZW�•?-äGaҤܼ‚öÕ +²¸µûïWë•ÿvµ:þ7«U˜´›/V¢½Yï§Y8-s!•ÛP¹�#�ÍÜ›Ú=]š±ÿ=sq×ûÄ»?x 3ËŸy¦|ý3Ϭ¿úËÍï®Þ¼I/]ø¨ù³Ïš?º°�}Èþ4êNÆÑØ�;óµÛÀF +#`\î3|‘í~°ÁT��ÓcQàûjÞð.„ë¶ÝzÛ¹ bƒ{0ÃrWøÍ·§§WãŸJx¡t}ë)I­>Š½Ã¾xpj¾„ œ¢ul˜-<¡! ¨±4˜«#އ‹ÒðJ_@.=÷ÍwSt·/Æ÷rkXºzõºu«W—’ðäêi§®~{@ËÁƒ$‰S¾¸õéá£q6øçPÜmÔðŠßn2� š° +ddEC`fd=EVZejГUIB +Ø´F- +$œ�+zªÏkAl±Æ cME©8Ã’jõ!~Ðâ³ECñPËP«m<Ž¿OSœÂªîK ÷Ô�ÜŽ¬êýx]Òù�OÞk='Lú쉱¸^6ƒ¦H@MZìóiùg0ýàtG»ó£Ü.-á@eø¨`/su•[…roƒµ:1*�‚!™ +eÉÛ'1à"ïIAXØ Ž·‚iÞ•†hKªÜ—p�îN8¤�¶wÛôý!5×/÷fÿuë[>^7{Æ[#–®¹¡ôÙñì…Ócv 9:w~hø€þq¦ðíËwŽ‹kÈÌœ:º$�˜¢7­xq¯8]rWÄ`¦ù\&Q�¨Yñ1¥NUô:Ji±™îE-×sµÏØx�ã«g%ÓñN6aÂâ3—ÏÔr¨!¾ÀŽU´Öüiʦ]MdRîħ„ûV}µŠ�øŠïK_[õ�ìw0CÑ–¢à"h‡†ñÇëç,|êéƒÓ^ydÏn¼›/{¾èÉ’Û;wO.¾Ìç²8œ'LBšæë~‚=g æ&! Cd(ñ˜ï˜ÈßíbQ(D}dím®6ú„yû´ÖÄE +UA$^BÚÃÒ¸â#¸.8Âý<ùºçvM[nh1`«¯�ܦªSyfZ¯Y: Iròä„3�œp’λ’Çþ(9qý�“�¬D[’¢=w]®× úh�£H8�ÂÄH]„®�6Ä£xܑċ¥ŽrœÒÉ�C²Ä)GÎPr }”B]�¾¿a¤R¤¥m˜NfÑéÂ,q¶nšþq²T|Rù“îQ}²Y #<ù&F«ÑjI{’žb®ÚO­Î&³Ä™ê2²‚.VKÅ?©+TÈ­-—�y.£îxÍó;�×±[û^ß¿øÉom ën×�é­[ù¬I®IêÑ+¾~€Ad ˆ ó„íS'ùðoiU§NÅü WA¶:'H6_•,(0ã$X#…ŠÄqJ£¿1ˆS®üŸ§2dMžn@;òtB˜XºÈIùJPœ„£Ê:t �—B‘€ ‘ÔGå5˜h¹ÿ“£ý]N¨#‹vUúÐþÊ(Z¤L£³•Åt©¢Žç$qÐ�=_ÒäÖåd•ÿ0YÕúœ0e·ÿóÊZê*.²ýô:`Þhº/3ÌìÐK^]¸Å¥c<éët¨¿£;é¨ yÃkЩb‡Ð0¥Š!ÄŽbÂz¨fÑû»¹ ä‹‚Ÿª[ü�è¬~ÛgØüBª¨YÏß?ÊÓ�.ðœ;zzÝ÷Û+sÊ{ö\?û•ß|å��¿`ÌÃå Ïl¾øcÕc�VþtqSŨ ¿>¿!,bÃö_+F"Ll,Š4HQÁ/¢ß¸ë‹hÿ{Á/¢÷HQ¿ò­~ß³}ÙÑÞˆPƒY‰Ð;ÂÌ‚CQX]ª‹{'⤹Îú†72,Üaæ_Є;âl +�vô° ½ qžÎó¤¶?æ=øOuæŸ�·I Àp»ââ.ö^?rÌ‚ùcG®ïÝó·ÝsÖû|ëçìþ­gCÑú_·oˆÛðü¯ë‹*6]ü©òъǪ~¼¸™›Y�áÿ’[ÐA½Aû·Ý¼ŽQ ´u|¬Ó»Î wÕEäB_ë`%†D ÐB´=Šf¡h&z îNDS!fŽAéPÊ€Ú¸#åÃ=�¡EPEÓÐd@þ�àl!š÷w†Z/4¶4¬½¯EZk§Á3�þîTQo¨Í†F¢ÅpÇT¸w2ô2C»3ê¼ÿèe>ìÂ=S ßYp_ <¿Æ�¬]»¿ŸáZ/¼‡Ap×|(ùP 9p��¿žZ õ™Td ì{žo{ºíYøÇNw>AcîÿŸ ‚?.qrçŽv§výBé‚ +íü´#¿bhB‚»�pÎ ²Ã@E.ì{"ìóaÃ@Ñ$ØógT˜7½ Ž€q�–;Á~×ùs’v=~ò£“§ Ô©K�‹Rg<:mJ�;yA ß?6æðÞ§µßÿ»W� +endstream +endobj +1060 0 obj +<< +/Type /FontDescriptor +/FontName /SXAKMW+DejaVuSans +/FontFamily (DejaVu Sans) +/Flags 4 +/FontBBox [ 0 -14 557 560 ] +/ItalicAngle 0 +/Ascent 928 +/Descent -235 +/CapHeight 560 +/StemV 80 +/StemH 80 +/FontFile2 1056 0 R +>> +endobj +1061 0 obj +<< +/Type /Font +/Subtype /CIDFontType2 +/BaseFont /SXAKMW+DejaVuSans +/CIDSystemInfo << +/Registry (Adobe) +/Ordering (Identity) +/Supplement 0 +>> +/W [ 3 [ 317 ] 16 [ 360 317 ] 20 [ 636 636 ] 25 [ 636 ] 36 [ 684 686 698 ] 42 [ 774 ] 44 [ 294 ] 53 [ 694 634 ] 68 [ 612 ] 70 [ 549 634 615 352 ] 75 [ 633 277 ] 78 [ 579 277 974 633 611 ] 85 [ 411 520 392 633 591 ] ] +/FontDescriptor 1060 0 R +>> +endobj +1062 0 obj +<< +/Length 744 +>> +stream +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo +<< /Registry (Adobe) +/Ordering (UCS) +/Supplement 0 +>> def +/CMapName /Adobe-Identity-UCS def +/CMapType 2 def +1 begincodespacerange +<0000> +endcodespacerange +30 beginbfchar +<0026> <0043> +<002c> <0049> +<0036> <0053> +<0003> <0020> +<0059> <0076> +<0014> <0031> +<0011> <002e> +<0019> <0036> +<0025> <0042> +<0048> <0065> +<0051> <006e> +<0046> <0063> +<004b> <0068> +<0050> <006d> +<0044> <0061> +<0055> <0072> +<004e> <006b> +<0010> <002d> +<004f> <006c> +<0049> <0066> +<0024> <0041> +<0056> <0073> +<0057> <0074> +<002a> <0047> +<0058> <0075> +<004c> <0069> +<0047> <0064> +<0035> <0052> +<0015> <0032> +<0052> <006f> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +endstream +endobj +1063 0 obj +<< +/Type /Font +/Subtype /Type0 +/BaseFont /SXAKMW+DejaVuSans +/Encoding /Identity-H +/DescendantFonts [ 1061 0 R ] +/ToUnicode 1062 0 R +>> +endobj +1064 0 obj +<< +/Type /FontDescriptor +/FontName /YFABGK+Poppins +/FontFamily (Poppins) +/Flags 4 +/FontBBox [ -27 -132 753 704 ] +/ItalicAngle 0 +/Ascent 1049 +/Descent -349 +/CapHeight 704 +/StemV 80 +/StemH 80 +/FontFile2 1057 0 R +>> +endobj +1065 0 obj +<< +/Type /Font +/Subtype /CIDFontType2 +/BaseFont /YFABGK+Poppins +/CIDSystemInfo << +/Registry (Adobe) +/Ordering (Identity) +/Supplement 0 +>> +/W [ 3 [ 266 ] 5 [ 291 ] 7 [ 621 ] 10 [ 158 453 453 485 ] 15 [ 197 550 209 475 627 319 574 588 628 627 634 545 630 629 212 ] 32 [ 722 ] 36 [ 673 612 771 706 512 503 777 691 245 ] 46 [ 598 431 860 702 785 578 787 607 586 540 674 675 975 ] 60 [ 583 540 422 ] 64 [ 422 ] 66 [ 732 256 675 675 606 675 619 328 675 639 245 247 514 245 1029 639 639 675 675 372 521 363 639 560 819 478 562 454 ] 95 [ 290 ] 204 [ 218 ] ] +/FontDescriptor 1064 0 R +>> +endobj +1066 0 obj +<< +/Length 1430 +>> +stream +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo +<< /Registry (Adobe) +/Ordering (UCS) +/Supplement 0 +>> def +/CMapName /Adobe-Identity-UCS def +/CMapType 2 def +1 begincodespacerange +<0000> +endcodespacerange +79 beginbfchar +<0026> <0043> +<002c> <0049> +<0036> <0053> +<0003> <0020> +<0059> <0076> +<0014> <0031> +<0011> <002e> +<0019> <0036> +<0025> <0042> +<0048> <0065> +<0051> <006e> +<0046> <0063> +<004b> <0068> +<0050> <006d> +<0044> <0061> +<0055> <0072> +<004e> <006b> +<0010> <002d> +<004f> <006c> +<0049> <0066> +<0024> <0041> +<0056> <0073> +<0057> <0074> +<002a> <0047> +<0058> <0075> +<004c> <0069> +<0047> <0064> +<0035> <0052> +<0015> <0032> +<0016> <0033> +<002e> <004b> +<0045> <0062> +<005a> <0077> +<001b> <0038> +<0052> <006f> +<0030> <004d> +<0031> <004e> +<004a> <0067> +<0029> <0046> +<0017> <0034> +<0033> <0050> +<001a> <0037> +<0018> <0035> +<0013> <0030> +<0028> <0045> +<005d> <007a> +<002f> <004c> +<003a> <0057> +<005c> <0079> +<001c> <0039> +<005b> <0078> +<0027> <0044> +<0032> <004f> +<0037> <0054> +<0053> <0070> +<000f> <002c> +<001d> <003a> +<002b> <0048> +<0039> <0056> +<003c> <0059> +<000b> <0028> +<000c> <0029> +<004d> <006a> +<0054> <0071> +<000a> <0027> +<005f> <007c> +<0012> <002f> +<000d> <002a> +<0020> <003d> +<0042> <005f> +<0043> <0060> +<0005> <0022> +<003e> <005b> +<0040> <005d> +<00cc> <2019> +<0007> <0024> +<0038> <0055> +<003d> <005a> +<0034> <0051> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +endstream +endobj +1067 0 obj +<< +/Type /Font +/Subtype /Type0 +/BaseFont /YFABGK+Poppins +/Encoding /Identity-H +/DescendantFonts [ 1065 0 R ] +/ToUnicode 1066 0 R +>> +endobj +1068 0 obj +<< +/Type /FontDescriptor +/FontName /PPVKZX+DejaVuSans +/FontFamily (DejaVu Sans) +/Flags 4 +/FontBBox [ -9 -92 733 729 ] +/ItalicAngle 0 +/Ascent 928 +/Descent -235 +/CapHeight 729 +/StemV 80 +/StemH 80 +/FontFile2 1058 0 R +>> +endobj +1069 0 obj +<< +/Type /Font +/Subtype /CIDFontType2 +/BaseFont /PPVKZX+DejaVuSans +/CIDSystemInfo << +/Registry (Adobe) +/Ordering (Identity) +/Supplement 0 +>> +/W [ 3 [ 348 ] 11 [ 457 457 ] 16 [ 415 379 365 695 695 695 695 695 695 695 695 695 695 399 ] 36 [ 773 762 733 830 683 ] 44 [ 372 ] 46 [ 774 637 995 836 ] 51 [ 732 ] 53 [ 770 720 682 ] 57 [ 773 1103 ] 60 [ 724 ] 66 [ 500 ] 68 [ 674 715 592 715 678 435 715 711 342 ] 78 [ 665 342 1041 711 687 715 715 493 595 478 711 651 923 645 651 582 ] 5038 [ 741 ] ] +/FontDescriptor 1068 0 R +>> +endobj +1070 0 obj +<< +/Length 1182 +>> +stream +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo +<< /Registry (Adobe) +/Ordering (UCS) +/Supplement 0 +>> def +/CMapName /Adobe-Identity-UCS def +/CMapType 2 def +1 begincodespacerange +<0000> +endcodespacerange +61 beginbfchar +<0014> <0031> +<0016> <0033> +<0017> <0034> +<0018> <0035> +<0011> <002e> +<0003> <0020> +<0028> <0045> +<0051> <006e> +<0056> <0073> +<0058> <0075> +<0055> <0072> +<0048> <0065> +<0057> <0074> +<004b> <0068> +<0044> <0061> +<0024> <0041> +<0033> <0050> +<002c> <0049> +<0059> <0076> +<0053> <0070> +<0052> <006f> +<0047> <0064> +<0046> <0063> +<004c> <0069> +<13ae> <00660069> +<004f> <006c> +<0050> <006d> +<0019> <0036> +<000b> <0028> +<000c> <0029> +<0015> <0032> +<005a> <0077> +<001d> <003a> +<004a> <0067> +<001a> <0037> +<001b> <0038> +<001c> <0039> +<0026> <0043> +<0031> <004e> +<004e> <006b> +<0049> <0066> +<0030> <004d> +<0013> <0030> +<005c> <0079> +<0010> <002d> +<002e> <004b> +<0045> <0062> +<005d> <007a> +<0035> <0052> +<0025> <0042> +<002f> <004c> +<0036> <0053> +<005b> <0078> +<0027> <0044> +<0054> <0071> +<0039> <0056> +<0037> <0054> +<0042> <005f> +<003a> <0057> +<0012> <002f> +<003c> <0059> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +endstream +endobj +1071 0 obj +<< +/Type /Font +/Subtype /Type0 +/BaseFont /PPVKZX+DejaVuSans +/Encoding /Identity-H +/DescendantFonts [ 1069 0 R ] +/ToUnicode 1070 0 R +>> +endobj +1072 0 obj +<< +/Type /FontDescriptor +/FontName /MWAATU+DejaVuSansMono +/FontFamily (DejaVu Sans Mono) +/Flags 4 +/FontBBox [ 0 -155 598 728 ] +/ItalicAngle 0 +/Ascent 928 +/Descent -235 +/CapHeight 728 +/StemV 80 +/StemH 80 +/FontFile2 1059 0 R +>> +endobj +1073 0 obj +<< +/Type /Font +/Subtype /CIDFontType2 +/BaseFont /MWAATU+DejaVuSansMono +/CIDSystemInfo << +/Registry (Adobe) +/Ordering (Identity) +/Supplement 0 +>> +/W [ 3 [ 602 602 602 602 602 602 602 602 602 602 602 ] 15 [ 602 602 601 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 602 601 602 602 602 602 602 602 602 602 ] 46 [ 602 602 602 601 602 602 602 602 602 602 602 602 602 602 602 ] 62 [ 602 602 602 ] 66 [ 601 ] 68 [ 601 601 601 601 601 602 602 602 601 602 601 601 601 602 601 601 602 601 601 601 601 602 601 602 602 602 602 602 602 ] ] +/FontDescriptor 1072 0 R +>> +endobj +1074 0 obj +<< +/Length 1570 +>> +stream +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo +<< /Registry (Adobe) +/Ordering (UCS) +/Supplement 0 +>> def +/CMapName /Adobe-Identity-UCS def +/CMapType 2 def +1 begincodespacerange +<0000> +endcodespacerange +89 beginbfchar +<0031> <004e> +<0052> <006f> +<0057> <0074> +<0024> <0041> +<0053> <0070> +<004f> <006c> +<004c> <0069> +<0046> <0063> +<0044> <0061> +<0045> <0062> +<0048> <0065> +<0058> <0075> +<0050> <006d> +<0047> <0064> +<0056> <0073> +<0055> <0072> +<0003> <0020> +<0010> <002d> +<0051> <006e> +<0020> <003d> +<0008> <0025> +<001f> <003c> +<004b> <0068> +<0012> <002f> +<0049> <0066> +<0021> <003e> +<0038> <0055> +<001d> <003a> +<002a> <0047> +<0059> <0076> +<000a> <0027> +<001a> <0037> +<0013> <0030> +<0054> <0071> +<004e> <006b> +<0042> <005f> +<005a> <0077> +<0011> <002e> +<0006> <0023> +<0004> <0021> +<0037> <0054> +<004a> <0067> +<005c> <0079> +<0007> <0024> +<0014> <0031> +<002c> <0049> +<0033> <0050> +<0027> <0044> +<0035> <0052> +<003e> <005b> +<0005> <0022> +<005e> <007b> +<0060> <007d> +<0040> <005d> +<001e> <003b> +<005b> <0078> +<000b> <0028> +<000c> <0029> +<002f> <004c> +<000d> <002a> +<005f> <007c> +<0015> <0032> +<0009> <0026> +<0019> <0036> +<0017> <0034> +<002b> <0048> +<0036> <0053> +<0028> <0045> +<0030> <004d> +<0032> <004f> +<0029> <0046> +<003f> <005c> +<0022> <003f> +<005d> <007a> +<0016> <0033> +<003b> <0058> +<000f> <002c> +<0025> <0042> +<0026> <0043> +<001c> <0039> +<003a> <0057> +<001b> <0038> +<0018> <0035> +<003c> <0059> +<004d> <006a> +<0039> <0056> +<0034> <0051> +<0023> <0040> +<002e> <004b> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +endstream +endobj +1075 0 obj +<< +/Type /Font +/Subtype /Type0 +/BaseFont /MWAATU+DejaVuSansMono +/Encoding /Identity-H +/DescendantFonts [ 1073 0 R ] +/ToUnicode 1074 0 R +>> +endobj +1076 0 obj +<< +/SXAKMW 1063 0 R +/YFABGK 1067 0 R +/PPVKZX 1071 0 R +/MWAATU 1075 0 R +>> +endobj +xref +0 1077 +0000000000 65535 f +0000000015 00000 n +0000001112 00000 n +0000001246 00000 n +0000040647 00000 n +0000040781 00000 n +0000043473 00000 n +0000043672 00000 n +0000047406 00000 n +0000047812 00000 n +0000048013 00000 n +0000048216 00000 n +0000048351 00000 n +0000048487 00000 n +0000048645 00000 n +0000048804 00000 n +0000049037 00000 n +0000049271 00000 n +0000049486 00000 n +0000049702 00000 n +0000049943 00000 n +0000050185 00000 n +0000050408 00000 n +0000050632 00000 n +0000050864 00000 n +0000051097 00000 n +0000051311 00000 n +0000051526 00000 n +0000051753 00000 n +0000051981 00000 n +0000052190 00000 n +0000052400 00000 n +0000052629 00000 n +0000052859 00000 n +0000053070 00000 n +0000053282 00000 n +0000053501 00000 n +0000053720 00000 n +0000057475 00000 n +0000057940 00000 n +0000058141 00000 n +0000058343 00000 n +0000058558 00000 n +0000058774 00000 n +0000058971 00000 n +0000059169 00000 n +0000059388 00000 n +0000059608 00000 n +0000059809 00000 n +0000060011 00000 n +0000060239 00000 n +0000060468 00000 n +0000060678 00000 n +0000060889 00000 n +0000061104 00000 n +0000061320 00000 n +0000061551 00000 n +0000061783 00000 n +0000061986 00000 n +0000062190 00000 n +0000062327 00000 n +0000062465 00000 n +0000062659 00000 n +0000062854 00000 n +0000063044 00000 n +0000063235 00000 n +0000063426 00000 n +0000063618 00000 n +0000063810 00000 n +0000064003 00000 n +0000064242 00000 n +0000064482 00000 n +0000064697 00000 n +0000064913 00000 n +0000065120 00000 n +0000065327 00000 n +0000068893 00000 n +0000069371 00000 n +0000069567 00000 n +0000069764 00000 n +0000069960 00000 n +0000070157 00000 n +0000070356 00000 n +0000070556 00000 n +0000070756 00000 n +0000070957 00000 n +0000071155 00000 n +0000071354 00000 n +0000071588 00000 n +0000071823 00000 n +0000072022 00000 n +0000072222 00000 n +0000072425 00000 n +0000072629 00000 n +0000072831 00000 n +0000073034 00000 n +0000073234 00000 n +0000073435 00000 n +0000073631 00000 n +0000073828 00000 n +0000074017 00000 n +0000074208 00000 n +0000074400 00000 n +0000074593 00000 n +0000074783 00000 n +0000074974 00000 n +0000075160 00000 n +0000075347 00000 n +0000075559 00000 n +0000075772 00000 n +0000075987 00000 n +0000076203 00000 n +0000076416 00000 n +0000076629 00000 n +0000080328 00000 n +0000080831 00000 n +0000081033 00000 n +0000081236 00000 n +0000081438 00000 n +0000081641 00000 n +0000081852 00000 n +0000082064 00000 n +0000082285 00000 n +0000082507 00000 n +0000082736 00000 n +0000082966 00000 n +0000083167 00000 n +0000083369 00000 n +0000083567 00000 n +0000083766 00000 n +0000083979 00000 n +0000084193 00000 n +0000084392 00000 n +0000084592 00000 n +0000084803 00000 n +0000085015 00000 n +0000085161 00000 n +0000085308 00000 n +0000085522 00000 n +0000085737 00000 n +0000085929 00000 n +0000086122 00000 n +0000086333 00000 n +0000086545 00000 n +0000086764 00000 n +0000086984 00000 n +0000087183 00000 n +0000087383 00000 n +0000087591 00000 n +0000087800 00000 n +0000087996 00000 n +0000088192 00000 n +0000092056 00000 n +0000092527 00000 n +0000092664 00000 n +0000092802 00000 n +0000092994 00000 n +0000093187 00000 n +0000093386 00000 n +0000093586 00000 n +0000093743 00000 n +0000093901 00000 n +0000094114 00000 n +0000094328 00000 n +0000094524 00000 n +0000094721 00000 n +0000094913 00000 n +0000095106 00000 n +0000095329 00000 n +0000095553 00000 n +0000095754 00000 n +0000095956 00000 n +0000096153 00000 n +0000096351 00000 n +0000096548 00000 n +0000096746 00000 n +0000096906 00000 n +0000097067 00000 n +0000097264 00000 n +0000097462 00000 n +0000097597 00000 n +0000097733 00000 n +0000097916 00000 n +0000098100 00000 n +0000098292 00000 n +0000098485 00000 n +0000102326 00000 n +0000102813 00000 n +0000102972 00000 n +0000103132 00000 n +0000103353 00000 n +0000103575 00000 n +0000103778 00000 n +0000103982 00000 n +0000104205 00000 n +0000104429 00000 n +0000104633 00000 n +0000104838 00000 n +0000105069 00000 n +0000105301 00000 n +0000105514 00000 n +0000105728 00000 n +0000105957 00000 n +0000106187 00000 n +0000106405 00000 n +0000106624 00000 n +0000106860 00000 n +0000107097 00000 n +0000107315 00000 n +0000107534 00000 n +0000107669 00000 n +0000107805 00000 n +0000107998 00000 n +0000108192 00000 n +0000108403 00000 n +0000108615 00000 n +0000108818 00000 n +0000109022 00000 n +0000109213 00000 n +0000109405 00000 n +0000109619 00000 n +0000109833 00000 n +0000113909 00000 n +0000114396 00000 n +0000114599 00000 n +0000114803 00000 n +0000115008 00000 n +0000115214 00000 n +0000115404 00000 n +0000115595 00000 n +0000115832 00000 n +0000116070 00000 n +0000116301 00000 n +0000116533 00000 n +0000116737 00000 n +0000116942 00000 n +0000117150 00000 n +0000117359 00000 n +0000117567 00000 n +0000117776 00000 n +0000117929 00000 n +0000118083 00000 n +0000118280 00000 n +0000118478 00000 n +0000118639 00000 n +0000118801 00000 n +0000118983 00000 n +0000119166 00000 n +0000119331 00000 n +0000119497 00000 n +0000119694 00000 n +0000119892 00000 n +0000120094 00000 n +0000120297 00000 n +0000120446 00000 n +0000120596 00000 n +0000120778 00000 n +0000120961 00000 n +0000124800 00000 n +0000125271 00000 n +0000125492 00000 n +0000125714 00000 n +0000125928 00000 n +0000126143 00000 n +0000126361 00000 n +0000126580 00000 n +0000126784 00000 n +0000126989 00000 n +0000127165 00000 n +0000127342 00000 n +0000127541 00000 n +0000127741 00000 n +0000127936 00000 n +0000128132 00000 n +0000128330 00000 n +0000128529 00000 n +0000128681 00000 n +0000128834 00000 n +0000129021 00000 n +0000129209 00000 n +0000129403 00000 n +0000129598 00000 n +0000129744 00000 n +0000129891 00000 n +0000130093 00000 n +0000130296 00000 n +0000130463 00000 n +0000130631 00000 n +0000130787 00000 n +0000130944 00000 n +0000131151 00000 n +0000131359 00000 n +0000133666 00000 n +0000133961 00000 n +0000134105 00000 n +0000134250 00000 n +0000134452 00000 n +0000134655 00000 n +0000134869 00000 n +0000135084 00000 n +0000135269 00000 n +0000135455 00000 n +0000135633 00000 n +0000135812 00000 n +0000140610 00000 n +0000140849 00000 n +0000141105 00000 n +0000141312 00000 n +0000141518 00000 n +0000145091 00000 n +0000145322 00000 n +0000145519 00000 n +0000145708 00000 n +0000149393 00000 n +0000149596 00000 n +0000153335 00000 n +0000153558 00000 n +0000153692 00000 n +0000157714 00000 n +0000157953 00000 n +0000158087 00000 n +0000158221 00000 n +0000158355 00000 n +0000161968 00000 n +0000162171 00000 n +0000166877 00000 n +0000167268 00000 n +0000167402 00000 n +0000167534 00000 n +0000167666 00000 n +0000167798 00000 n +0000167930 00000 n +0000168062 00000 n +0000168194 00000 n +0000168326 00000 n +0000168458 00000 n +0000168591 00000 n +0000168724 00000 n +0000168857 00000 n +0000168990 00000 n +0000169123 00000 n +0000169256 00000 n +0000169389 00000 n +0000169522 00000 n +0000169655 00000 n +0000169788 00000 n +0000169921 00000 n +0000170053 00000 n +0000170184 00000 n +0000175185 00000 n +0000175584 00000 n +0000175717 00000 n +0000175850 00000 n +0000175983 00000 n +0000176116 00000 n +0000176249 00000 n +0000176382 00000 n +0000176515 00000 n +0000176648 00000 n +0000176781 00000 n +0000176914 00000 n +0000177047 00000 n +0000177180 00000 n +0000177313 00000 n +0000177446 00000 n +0000177579 00000 n +0000177712 00000 n +0000177845 00000 n +0000177978 00000 n +0000178111 00000 n +0000178244 00000 n +0000178377 00000 n +0000178510 00000 n +0000178645 00000 n +0000183449 00000 n +0000183912 00000 n +0000184047 00000 n +0000184180 00000 n +0000184313 00000 n +0000184446 00000 n +0000184579 00000 n +0000184712 00000 n +0000184845 00000 n +0000184978 00000 n +0000185111 00000 n +0000185245 00000 n +0000185379 00000 n +0000185513 00000 n +0000185647 00000 n +0000185781 00000 n +0000185915 00000 n +0000186049 00000 n +0000186183 00000 n +0000186317 00000 n +0000186451 00000 n +0000186585 00000 n +0000186719 00000 n +0000186853 00000 n +0000186987 00000 n +0000187121 00000 n +0000187255 00000 n +0000187389 00000 n +0000187523 00000 n +0000187657 00000 n +0000187791 00000 n +0000187925 00000 n +0000188058 00000 n +0000193055 00000 n +0000193518 00000 n +0000193652 00000 n +0000193786 00000 n +0000193920 00000 n +0000194054 00000 n +0000194188 00000 n +0000194322 00000 n +0000194456 00000 n +0000194590 00000 n +0000194724 00000 n +0000194858 00000 n +0000194992 00000 n +0000195126 00000 n +0000195260 00000 n +0000195394 00000 n +0000195528 00000 n +0000195662 00000 n +0000195796 00000 n +0000195930 00000 n +0000196064 00000 n +0000196198 00000 n +0000196332 00000 n +0000196466 00000 n +0000196600 00000 n +0000196734 00000 n +0000196868 00000 n +0000197002 00000 n +0000197136 00000 n +0000197270 00000 n +0000197404 00000 n +0000197538 00000 n +0000197673 00000 n +0000202259 00000 n +0000202650 00000 n +0000202785 00000 n +0000202918 00000 n +0000203051 00000 n +0000203184 00000 n +0000203317 00000 n +0000203450 00000 n +0000203583 00000 n +0000203716 00000 n +0000203849 00000 n +0000203983 00000 n +0000204117 00000 n +0000204251 00000 n +0000204385 00000 n +0000204519 00000 n +0000204653 00000 n +0000204787 00000 n +0000204921 00000 n +0000205055 00000 n +0000205189 00000 n +0000205323 00000 n +0000205457 00000 n +0000205590 00000 n +0000210570 00000 n +0000211081 00000 n +0000211215 00000 n +0000211349 00000 n +0000211483 00000 n +0000211617 00000 n +0000211751 00000 n +0000211885 00000 n +0000212019 00000 n +0000212153 00000 n +0000212287 00000 n +0000212421 00000 n +0000212555 00000 n +0000212689 00000 n +0000212823 00000 n +0000212957 00000 n +0000213091 00000 n +0000213225 00000 n +0000213359 00000 n +0000213493 00000 n +0000213627 00000 n +0000213761 00000 n +0000213895 00000 n +0000214029 00000 n +0000214163 00000 n +0000214297 00000 n +0000214431 00000 n +0000214565 00000 n +0000214699 00000 n +0000214833 00000 n +0000214967 00000 n +0000215101 00000 n +0000215235 00000 n +0000215369 00000 n +0000215503 00000 n +0000215637 00000 n +0000215771 00000 n +0000215904 00000 n +0000216036 00000 n +0000219278 00000 n +0000219517 00000 n +0000219651 00000 n +0000219785 00000 n +0000219920 00000 n +0000224952 00000 n +0000225175 00000 n +0000225310 00000 n +0000230303 00000 n +0000230526 00000 n +0000230661 00000 n +0000235447 00000 n +0000235650 00000 n +0000240649 00000 n +0000240872 00000 n +0000241007 00000 n +0000245852 00000 n +0000246055 00000 n +0000250970 00000 n +0000251193 00000 n +0000251328 00000 n +0000256189 00000 n +0000256412 00000 n +0000256547 00000 n +0000261310 00000 n +0000261513 00000 n +0000266505 00000 n +0000266728 00000 n +0000266863 00000 n +0000271838 00000 n +0000272041 00000 n +0000276936 00000 n +0000277159 00000 n +0000277294 00000 n +0000282231 00000 n +0000282454 00000 n +0000282589 00000 n +0000287403 00000 n +0000287606 00000 n +0000292603 00000 n +0000292826 00000 n +0000292961 00000 n +0000297965 00000 n +0000298188 00000 n +0000298323 00000 n +0000303231 00000 n +0000303434 00000 n +0000308403 00000 n +0000308626 00000 n +0000308761 00000 n +0000313532 00000 n +0000313735 00000 n +0000318047 00000 n +0000318278 00000 n +0000318413 00000 n +0000318548 00000 n +0000323431 00000 n +0000323654 00000 n +0000323789 00000 n +0000328814 00000 n +0000329037 00000 n +0000329172 00000 n +0000334040 00000 n +0000334243 00000 n +0000339339 00000 n +0000339562 00000 n +0000339697 00000 n +0000344581 00000 n +0000344784 00000 n +0000349796 00000 n +0000350019 00000 n +0000350154 00000 n +0000355070 00000 n +0000355293 00000 n +0000355428 00000 n +0000360228 00000 n +0000360431 00000 n +0000365468 00000 n +0000365691 00000 n +0000365826 00000 n +0000370748 00000 n +0000370971 00000 n +0000371106 00000 n +0000375917 00000 n +0000376120 00000 n +0000381088 00000 n +0000381311 00000 n +0000381446 00000 n +0000386387 00000 n +0000386590 00000 n +0000391465 00000 n +0000391688 00000 n +0000391823 00000 n +0000396759 00000 n +0000396982 00000 n +0000397117 00000 n +0000401918 00000 n +0000402121 00000 n +0000407114 00000 n +0000407337 00000 n +0000407472 00000 n +0000412461 00000 n +0000412684 00000 n +0000412819 00000 n +0000417598 00000 n +0000417801 00000 n +0000422784 00000 n +0000423007 00000 n +0000423142 00000 n +0000427990 00000 n +0000428193 00000 n +0000433212 00000 n +0000433435 00000 n +0000433570 00000 n +0000438436 00000 n +0000438659 00000 n +0000438794 00000 n +0000443530 00000 n +0000443733 00000 n +0000448788 00000 n +0000449011 00000 n +0000449147 00000 n +0000454091 00000 n +0000454294 00000 n +0000459120 00000 n +0000459343 00000 n +0000459479 00000 n +0000464495 00000 n +0000464718 00000 n +0000464854 00000 n +0000469631 00000 n +0000469834 00000 n +0000474808 00000 n +0000475031 00000 n +0000475167 00000 n +0000480155 00000 n +0000480378 00000 n +0000480513 00000 n +0000485271 00000 n +0000485474 00000 n +0000490551 00000 n +0000490886 00000 n +0000491022 00000 n +0000491156 00000 n +0000491290 00000 n +0000491424 00000 n +0000491558 00000 n +0000491692 00000 n +0000491826 00000 n +0000491960 00000 n +0000492094 00000 n +0000492229 00000 n +0000492364 00000 n +0000492499 00000 n +0000492634 00000 n +0000492768 00000 n +0000492901 00000 n +0000497397 00000 n +0000497708 00000 n +0000497843 00000 n +0000497978 00000 n +0000498113 00000 n +0000498248 00000 n +0000498383 00000 n +0000498518 00000 n +0000498653 00000 n +0000498788 00000 n +0000498923 00000 n +0000499058 00000 n +0000499194 00000 n +0000499330 00000 n +0000504338 00000 n +0000504561 00000 n +0000504697 00000 n +0000509536 00000 n +0000509759 00000 n +0000509895 00000 n +0000514751 00000 n +0000514974 00000 n +0000515110 00000 n +0000519926 00000 n +0000520149 00000 n +0000520285 00000 n +0000525136 00000 n +0000525359 00000 n +0000525495 00000 n +0000530166 00000 n +0000530389 00000 n +0000530525 00000 n +0000534114 00000 n +0000534317 00000 n +0000538901 00000 n +0000539132 00000 n +0000539268 00000 n +0000539403 00000 n +0000542898 00000 n +0000543101 00000 n +0000547952 00000 n +0000548175 00000 n +0000548311 00000 n +0000553075 00000 n +0000553278 00000 n +0000558388 00000 n +0000558611 00000 n +0000558747 00000 n +0000563492 00000 n +0000563695 00000 n +0000568822 00000 n +0000569045 00000 n +0000569180 00000 n +0000573906 00000 n +0000574109 00000 n +0000579103 00000 n +0000579306 00000 n +0000584107 00000 n +0000584330 00000 n +0000584466 00000 n +0000589217 00000 n +0000589420 00000 n +0000594467 00000 n +0000594690 00000 n +0000594826 00000 n +0000599592 00000 n +0000599795 00000 n +0000604796 00000 n +0000605019 00000 n +0000605155 00000 n +0000609920 00000 n +0000610123 00000 n +0000614957 00000 n +0000615160 00000 n +0000619972 00000 n +0000620195 00000 n +0000620331 00000 n +0000625074 00000 n +0000625277 00000 n +0000628895 00000 n +0000629098 00000 n +0000632371 00000 n +0000632574 00000 n +0000637611 00000 n +0000637834 00000 n +0000637970 00000 n +0000642503 00000 n +0000642706 00000 n +0000646992 00000 n +0000647215 00000 n +0000647351 00000 n +0000651417 00000 n +0000651648 00000 n +0000651784 00000 n +0000651920 00000 n +0000656866 00000 n +0000657137 00000 n +0000657273 00000 n +0000657409 00000 n +0000657543 00000 n +0000657677 00000 n +0000657811 00000 n +0000657945 00000 n +0000658081 00000 n +0000662852 00000 n +0000663115 00000 n +0000663251 00000 n +0000663385 00000 n +0000663519 00000 n +0000663653 00000 n +0000663787 00000 n +0000663923 00000 n +0000666684 00000 n +0000666887 00000 n +0000671193 00000 n +0000671432 00000 n +0000671568 00000 n +0000671704 00000 n +0000671839 00000 n +0000675857 00000 n +0000676096 00000 n +0000676232 00000 n +0000676368 00000 n +0000676504 00000 n +0000681153 00000 n +0000681400 00000 n +0000681536 00000 n +0000681672 00000 n +0000681808 00000 n +0000681944 00000 n +0000686819 00000 n +0000687050 00000 n +0000687186 00000 n +0000687322 00000 n +0000691466 00000 n +0000691697 00000 n +0000691833 00000 n +0000691969 00000 n +0000696136 00000 n +0000696383 00000 n +0000696519 00000 n +0000696655 00000 n +0000696791 00000 n +0000696927 00000 n +0000701916 00000 n +0000702147 00000 n +0000702283 00000 n +0000702419 00000 n +0000706998 00000 n +0000707229 00000 n +0000707365 00000 n +0000707501 00000 n +0000710438 00000 n +0000710661 00000 n +0000710797 00000 n +0000714870 00000 n +0000715073 00000 n +0000720577 00000 n +0000720976 00000 n +0000721112 00000 n +0000721246 00000 n +0000721380 00000 n +0000721514 00000 n +0000721648 00000 n +0000721782 00000 n +0000721916 00000 n +0000722050 00000 n +0000722184 00000 n +0000722319 00000 n +0000722454 00000 n +0000722589 00000 n +0000722724 00000 n +0000722859 00000 n +0000722994 00000 n +0000723129 00000 n +0000723264 00000 n +0000723399 00000 n +0000723534 00000 n +0000723669 00000 n +0000723804 00000 n +0000723939 00000 n +0000724073 00000 n +0000727769 00000 n +0000728056 00000 n +0000728191 00000 n +0000728326 00000 n +0000728461 00000 n +0000728596 00000 n +0000728731 00000 n +0000728866 00000 n +0000729001 00000 n +0000729136 00000 n +0000729272 00000 n +0000733691 00000 n +0000733914 00000 n +0000734050 00000 n +0000738503 00000 n +0000738734 00000 n +0000738870 00000 n +0000739006 00000 n +0000743465 00000 n +0000743688 00000 n +0000743824 00000 n +0000748783 00000 n +0000749118 00000 n +0000749254 00000 n +0000749388 00000 n +0000749522 00000 n +0000749656 00000 n +0000749790 00000 n +0000749924 00000 n +0000750058 00000 n +0000750192 00000 n +0000750326 00000 n +0000750461 00000 n +0000750596 00000 n +0000750731 00000 n +0000750866 00000 n +0000751000 00000 n +0000751133 00000 n +0000754374 00000 n +0000754629 00000 n +0000754764 00000 n +0000754899 00000 n +0000755034 00000 n +0000755169 00000 n +0000755305 00000 n +0000758716 00000 n +0000758919 00000 n +0000762176 00000 n +0000762379 00000 n +0000766780 00000 n +0000766983 00000 n +0000771375 00000 n +0000771742 00000 n +0000771878 00000 n +0000772012 00000 n +0000772146 00000 n +0000772280 00000 n +0000772414 00000 n +0000772548 00000 n +0000772682 00000 n +0000772816 00000 n +0000772950 00000 n +0000773085 00000 n +0000773220 00000 n +0000773355 00000 n +0000773490 00000 n +0000773625 00000 n +0000773760 00000 n +0000773895 00000 n +0000774030 00000 n +0000774165 00000 n +0000774301 00000 n +0000774493 00000 n +0000774715 00000 n +0000774841 00000 n +0000774987 00000 n +0000775127 00000 n +0000775324 00000 n +0000775558 00000 n +0000775789 00000 n +0000776045 00000 n +0000776284 00000 n +0000776531 00000 n +0000776761 00000 n +0000777003 00000 n +0000777228 00000 n +0000777472 00000 n +0000777700 00000 n +0000777935 00000 n +0000778153 00000 n +0000778384 00000 n +0000778598 00000 n +0000778833 00000 n +0000779051 00000 n +0000779295 00000 n +0000779522 00000 n +0000779754 00000 n +0000780001 00000 n +0000780206 00000 n +0000780382 00000 n +0000780577 00000 n +0000780782 00000 n +0000780988 00000 n +0000781195 00000 n +0000781449 00000 n +0000781679 00000 n +0000781902 00000 n +0000782113 00000 n +0000782324 00000 n +0000782539 00000 n +0000782755 00000 n +0000782969 00000 n +0000783219 00000 n +0000783434 00000 n +0000783653 00000 n +0000783871 00000 n +0000784087 00000 n +0000784299 00000 n +0000784504 00000 n +0000784711 00000 n +0000784916 00000 n +0000785117 00000 n +0000785344 00000 n +0000785574 00000 n +0000785803 00000 n +0000786020 00000 n +0000786237 00000 n +0000786463 00000 n +0000786699 00000 n +0000786943 00000 n +0000787159 00000 n +0000787372 00000 n +0000787600 00000 n +0000787814 00000 n +0000788026 00000 n +0000788209 00000 n +0000788423 00000 n +0000788627 00000 n +0000788852 00000 n +0000789085 00000 n +0000789298 00000 n +0000789520 00000 n +0000789717 00000 n +0000789891 00000 n +0000790081 00000 n +0000790278 00000 n +0000790470 00000 n +0000790681 00000 n +0000790889 00000 n +0000791093 00000 n +0000791328 00000 n +0000791541 00000 n +0000791750 00000 n +0000791945 00000 n +0000792142 00000 n +0000792325 00000 n +0000792498 00000 n +0000792681 00000 n +0000792873 00000 n +0000793074 00000 n +0000793298 00000 n +0000793520 00000 n +0000793761 00000 n +0000793984 00000 n +0000794233 00000 n +0000794465 00000 n +0000794712 00000 n +0000794949 00000 n +0000795203 00000 n +0000795426 00000 n +0000795604 00000 n +0000795800 00000 n +0000796027 00000 n +0000796246 00000 n +0000796455 00000 n +0000796687 00000 n +0000796908 00000 n +0000797131 00000 n +0000797339 00000 n +0000797594 00000 n +0000797842 00000 n +0000798065 00000 n +0000798292 00000 n +0000798504 00000 n +0000798699 00000 n +0000798899 00000 n +0000799078 00000 n +0000799278 00000 n +0000799461 00000 n +0000799676 00000 n +0000799881 00000 n +0000800072 00000 n +0000800257 00000 n +0000800496 00000 n +0000800728 00000 n +0000800964 00000 n +0000801186 00000 n +0000801380 00000 n +0000801597 00000 n +0000801810 00000 n +0000802011 00000 n +0000802205 00000 n +0000802395 00000 n +0000802592 00000 n +0000802780 00000 n +0000802985 00000 n +0000803155 00000 n +0000803353 00000 n +0000803548 00000 n +0000803719 00000 n +0000803924 00000 n +0000804157 00000 n +0000804360 00000 n +0000804541 00000 n +0000804605 00000 n +0000812285 00000 n +0000817087 00000 n +0000828947 00000 n +0000841343 00000 n +0000841577 00000 n +0000841981 00000 n +0000842779 00000 n +0000842932 00000 n +0000843163 00000 n +0000843760 00000 n +0000845245 00000 n +0000845395 00000 n +0000845630 00000 n +0000846169 00000 n +0000847406 00000 n +0000847559 00000 n +0000847803 00000 n +0000848398 00000 n +0000850023 00000 n +0000850180 00000 n +trailer +<< +/Size 1077 +/Root 3 0 R +/Info 2 0 R +>> +startxref +850272 +%%EOF diff --git a/content/rancher/v2.6/en/security/hardening-guides/1.6-benchmark-2.6/_index.md b/content/rancher/v2.6/en/security/hardening-guides/1.6-benchmark-2.6/_index.md new file mode 100644 index 00000000000..b1eba5740d7 --- /dev/null +++ b/content/rancher/v2.6/en/security/hardening-guides/1.6-benchmark-2.6/_index.md @@ -0,0 +1,3098 @@ +--- +title: CIS v1.6 Benchmark - Self-Assessment Guide - Rancher v2.6 +weight: 101 +--- + +### CIS v1.6 Kubernetes Benchmark - Rancher v2.6 with Kubernetes v1.18 to v1.21 + +[Click here to download a PDF version of this document](https://releases.rancher.com/documents/security/2.6/Rancher_v2-6_CIS_v1-6_Benchmark_Assessment.pdf). + +#### Overview + +This document is a companion to the Rancher v2.6 security hardening guide. The hardening guide provides prescriptive guidance for hardening a production installation of Rancher, and this benchmark guide is meant to help you evaluate the level of security of the hardened cluster against each control in the benchmark. + +This guide corresponds to specific versions of the hardening guide, Rancher, CIS Benchmark and Kubernetes: + +| Hardening Guide Version | Rancher Version | CIS Benchmark Version | Kubernetes Version | +| ----------------------- | --------------- | --------------------- | ------------------- | +| Hardening Guide CIS v1.6 Benchmark | Rancher v2.6.3 | CIS v1.6 | Kubernetes v1.18, v1.19, v1.20 and v1.21 | + +Because Rancher and RKE install Kubernetes services as Docker containers, many of the control verification checks in the CIS Kubernetes Benchmark do not apply and will have a result of `Not Applicable`. This guide will walk through the various controls and provide updated example commands to audit compliance in Rancher created clusters. + +This document is to be used by Rancher operators, security teams, auditors and decision makers. + +For more detail about each audit, including rationales and remediations for failing tests, you can refer to the corresponding section of the CIS Kubernetes Benchmark v1.6. You can download the benchmark, after creating a free account, in [Center for Internet Security (CIS)](https://www.cisecurity.org/benchmark/kubernetes/). + +#### Testing controls methodology + +Rancher and RKE install Kubernetes services via Docker containers. Configuration is defined by arguments passed to the container at the time of initialization, not via configuration files. + +Where control audits differ from the original CIS benchmark, the audit commands specific to Rancher are provided for testing. When performing the tests, you will need access to the Docker command line on the hosts of all three RKE roles. The commands also make use of the [kubectl](https://kubernetes.io/docs/tasks/tools/) (with a valid configuration file) and [jq](https://stedolan.github.io/jq/) tools, which are required in the testing and evaluation of test results. + +> NOTE: Only `automated` tests (previously called `scored`) are covered in this guide. + +### Controls +## 1.1 Master Node Configuration Files +### 1.1.1 Ensure that the API server pod specification file permissions are set to 644 or more restrictive (Automated) + + +**Result:** Not Applicable + +**Remediation:** +Cluster provisioned by RKE doesn't require or maintain a configuration file for kube-apiserver. +All configuration is passed in as arguments at container run time. + +### 1.1.2 Ensure that the API server pod specification file ownership is set to root:root (Automated) + + +**Result:** Not Applicable + +**Remediation:** +Cluster provisioned by RKE doesn't require or maintain a configuration file for kube-apiserver. +All configuration is passed in as arguments at container run time. + +### 1.1.3 Ensure that the controller manager pod specification file permissions are set to 644 or more restrictive (Automated) + + +**Result:** Not Applicable + +**Remediation:** +Cluster provisioned by RKE doesn't require or maintain a configuration file for controller-manager. +All configuration is passed in as arguments at container run time. + +### 1.1.4 Ensure that the controller manager pod specification file ownership is set to root:root (Automated) + + +**Result:** Not Applicable + +**Remediation:** +Cluster provisioned by RKE doesn't require or maintain a configuration file for controller-manager. +All configuration is passed in as arguments at container run time. + +### 1.1.5 Ensure that the scheduler pod specification file permissions are set to 644 or more restrictive (Automated) + + +**Result:** Not Applicable + +**Remediation:** +Cluster provisioned by RKE doesn't require or maintain a configuration file for scheduler. +All configuration is passed in as arguments at container run time. + +### 1.1.6 Ensure that the scheduler pod specification file ownership is set to root:root (Automated) + + +**Result:** Not Applicable + +**Remediation:** +Cluster provisioned by RKE doesn't require or maintain a configuration file for scheduler. +All configuration is passed in as arguments at container run time. + +### 1.1.7 Ensure that the etcd pod specification file permissions are set to 644 or more restrictive (Automated) + + +**Result:** Not Applicable + +**Remediation:** +Cluster provisioned by RKE doesn't require or maintain a configuration file for etcd. +All configuration is passed in as arguments at container run time. + +### 1.1.8 Ensure that the etcd pod specification file ownership is set to root:root (Automated) + + +**Result:** Not Applicable + +**Remediation:** +Cluster provisioned by RKE doesn't require or maintain a configuration file for etcd. +All configuration is passed in as arguments at container run time. + +### 1.1.9 Ensure that the Container Network Interface file permissions are set to 644 or more restrictive (Manual) + + +**Result:** warn + +**Remediation:** +Run the below command (based on the file location on your system) on the master node. +For example, +chmod 644 + +**Audit:** + +```bash +stat -c permissions=%a +``` + +### 1.1.10 Ensure that the Container Network Interface file ownership is set to root:root (Manual) + + +**Result:** warn + +**Remediation:** +Run the below command (based on the file location on your system) on the master node. +For example, +chown root:root + +**Audit:** + +```bash +stat -c %U:%G +``` + +### 1.1.11 Ensure that the etcd data directory permissions are set to 700 or more restrictive (Automated) + + +**Result:** pass + +**Remediation:** +On the etcd server node, get the etcd data directory, passed as an argument --data-dir, +from the below command: +ps -ef | grep etcd Run the below command (based on the etcd data directory found above). For example, +chmod 700 /var/lib/etcd + +**Audit:** + +```bash +stat -c %a /node/var/lib/etcd +``` + +**Expected Result**: + +```console +'700' is equal to '700' +``` + +**Returned Value**: + +```console +700 +``` + +### 1.1.12 Ensure that the etcd data directory ownership is set to etcd:etcd (Automated) + + +**Result:** pass + +**Remediation:** +On the etcd server node, get the etcd data directory, passed as an argument --data-dir, +from the below command: +ps -ef | grep etcd +Run the below command (based on the etcd data directory found above). +For example, chown etcd:etcd /var/lib/etcd + +A system service account is required for etcd data directory ownership. +Refer to Rancher's hardening guide for more details on how to configure this ownership. + +**Audit:** + +```bash +stat -c %U:%G /node/var/lib/etcd +``` + +**Expected Result**: + +```console +'etcd:etcd' is present +``` + +**Returned Value**: + +```console +etcd:etcd +``` + +### 1.1.13 Ensure that the admin.conf file permissions are set to 644 or more restrictive (Automated) + + +**Result:** Not Applicable + +**Remediation:** +Cluster provisioned by RKE does not store the kubernetes default kubeconfig credentials file on the nodes. + +### 1.1.14 Ensure that the admin.conf file ownership is set to root:root (Automated) + + +**Result:** Not Applicable + +**Remediation:** +Cluster provisioned by RKE does not store the kubernetes default kubeconfig credentials file on the nodes. + +### 1.1.15 Ensure that the scheduler.conf file permissions are set to 644 or more restrictive (Automated) + + +**Result:** Not Applicable + +**Remediation:** +Cluster provisioned by RKE doesn't require or maintain a configuration file for scheduler. +All configuration is passed in as arguments at container run time. + +### 1.1.16 Ensure that the scheduler.conf file ownership is set to root:root (Automated) + + +**Result:** Not Applicable + +**Remediation:** +Cluster provisioned by RKE doesn't require or maintain a configuration file for scheduler. +All configuration is passed in as arguments at container run time. + +### 1.1.17 Ensure that the controller-manager.conf file permissions are set to 644 or more restrictive (Automated) + + +**Result:** Not Applicable + +**Remediation:** +Cluster provisioned by RKE doesn't require or maintain a configuration file for controller-manager. +All configuration is passed in as arguments at container run time. + +### 1.1.18 Ensure that the controller-manager.conf file ownership is set to root:root (Automated) + + +**Result:** Not Applicable + +**Remediation:** +Cluster provisioned by RKE doesn't require or maintain a configuration file for controller-manager. +All configuration is passed in as arguments at container run time. + +### 1.1.19 Ensure that the Kubernetes PKI directory and file ownership is set to root:root (Automated) + + +**Result:** pass + +**Remediation:** +Run the below command (based on the file location on your system) on the master node. +For example, +chown -R root:root /etc/kubernetes/pki/ + +**Audit Script:** `check_files_owner_in_dir.sh` + +```bash +#!/usr/bin/env bash + +# This script is used to ensure the owner is set to root:root for +# the given directory and all the files in it +# +# inputs: +# $1 = /full/path/to/directory +# +# outputs: +# true/false + +INPUT_DIR=$1 + +if [[ "${INPUT_DIR}" == "" ]]; then + echo "false" + exit +fi + +if [[ $(stat -c %U:%G ${INPUT_DIR}) != "root:root" ]]; then + echo "false" + exit +fi + +statInfoLines=$(stat -c "%n %U:%G" ${INPUT_DIR}/*) +while read -r statInfoLine; do + f=$(echo ${statInfoLine} | cut -d' ' -f1) + p=$(echo ${statInfoLine} | cut -d' ' -f2) + + if [[ $(basename "$f" .pem) == "kube-etcd-"* ]]; then + if [[ "$p" != "root:root" && "$p" != "etcd:etcd" ]]; then + echo "false" + exit + fi + else + if [[ "$p" != "root:root" ]]; then + echo "false" + exit + fi + fi +done <<< "${statInfoLines}" + + +echo "true" +exit + +``` + +**Audit Execution:** + +```bash +./check_files_owner_in_dir.sh /node/etc/kubernetes/ssl +``` + +**Expected Result**: + +```console +'true' is equal to 'true' +``` + +**Returned Value**: + +```console +true +``` + +### 1.1.20 Ensure that the Kubernetes PKI certificate file permissions are set to 644 or more restrictive (Automated) + + +**Result:** pass + +**Remediation:** +Run the below command (based on the file location on your system) on the master node. +For example, +chmod -R 644 /etc/kubernetes/pki/*.crt + +**Audit Script:** `check_files_permissions.sh` + +```bash +#!/usr/bin/env bash + +# This script is used to ensure the file permissions are set to 644 or +# more restrictive for all files in a given directory or a wildcard +# selection of files +# +# inputs: +# $1 = /full/path/to/directory or /path/to/fileswithpattern +# ex: !(*key).pem +# +# $2 (optional) = permission (ex: 600) +# +# outputs: +# true/false + +# Turn on "extended glob" for use of '!' in wildcard +shopt -s extglob + +# Turn off history to avoid surprises when using '!' +set -H + +USER_INPUT=$1 + +if [[ "${USER_INPUT}" == "" ]]; then + echo "false" + exit +fi + + +if [[ -d ${USER_INPUT} ]]; then + PATTERN="${USER_INPUT}/*" +else + PATTERN="${USER_INPUT}" +fi + +PERMISSION="" +if [[ "$2" != "" ]]; then + PERMISSION=$2 +fi + +FILES_PERMISSIONS=$(stat -c %n\ %a ${PATTERN}) + +while read -r fileInfo; do + p=$(echo ${fileInfo} | cut -d' ' -f2) + + if [[ "${PERMISSION}" != "" ]]; then + if [[ "$p" != "${PERMISSION}" ]]; then + echo "false" + exit + fi + else + if [[ "$p" != "644" && "$p" != "640" && "$p" != "600" ]]; then + echo "false" + exit + fi + fi +done <<< "${FILES_PERMISSIONS}" + + +echo "true" +exit + +``` + +**Audit Execution:** + +```bash +./check_files_permissions.sh /node/etc/kubernetes/ssl/!(*key).pem +``` + +**Expected Result**: + +```console +'true' is equal to 'true' +``` + +**Returned Value**: + +```console +true +``` + +### 1.1.21 Ensure that the Kubernetes PKI key file permissions are set to 600 (Automated) + + +**Result:** pass + +**Remediation:** +Run the below command (based on the file location on your system) on the master node. +For example, +chmod -R 600 /etc/kubernetes/ssl/*key.pem + +**Audit Script:** `check_files_permissions.sh` + +```bash +#!/usr/bin/env bash + +# This script is used to ensure the file permissions are set to 644 or +# more restrictive for all files in a given directory or a wildcard +# selection of files +# +# inputs: +# $1 = /full/path/to/directory or /path/to/fileswithpattern +# ex: !(*key).pem +# +# $2 (optional) = permission (ex: 600) +# +# outputs: +# true/false + +# Turn on "extended glob" for use of '!' in wildcard +shopt -s extglob + +# Turn off history to avoid surprises when using '!' +set -H + +USER_INPUT=$1 + +if [[ "${USER_INPUT}" == "" ]]; then + echo "false" + exit +fi + + +if [[ -d ${USER_INPUT} ]]; then + PATTERN="${USER_INPUT}/*" +else + PATTERN="${USER_INPUT}" +fi + +PERMISSION="" +if [[ "$2" != "" ]]; then + PERMISSION=$2 +fi + +FILES_PERMISSIONS=$(stat -c %n\ %a ${PATTERN}) + +while read -r fileInfo; do + p=$(echo ${fileInfo} | cut -d' ' -f2) + + if [[ "${PERMISSION}" != "" ]]; then + if [[ "$p" != "${PERMISSION}" ]]; then + echo "false" + exit + fi + else + if [[ "$p" != "644" && "$p" != "640" && "$p" != "600" ]]; then + echo "false" + exit + fi + fi +done <<< "${FILES_PERMISSIONS}" + + +echo "true" +exit + +``` + +**Audit Execution:** + +```bash +./check_files_permissions.sh /node/etc/kubernetes/ssl/*key.pem +``` + +**Expected Result**: + +```console +'true' is equal to 'true' +``` + +**Returned Value**: + +```console +true +``` + +## 1.2 API Server +### 1.2.1 Ensure that the --anonymous-auth argument is set to false (Automated) + + +**Result:** pass + +**Remediation:** +Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the below parameter. +--anonymous-auth=false + +**Audit:** + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**Expected Result**: + +```console +'false' is equal to 'false' +``` + +**Returned Value**: + +```console +root 121142 121120 7 12:27 ? 00:06:27 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.2 Ensure that the --basic-auth-file argument is not set (Automated) + + +**Result:** pass + +**Remediation:** +Follow the documentation and configure alternate mechanisms for authentication. Then, +edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and remove the --basic-auth-file= parameter. + +**Audit:** + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**Expected Result**: + +```console +'--basic-auth-file' is not present +``` + +**Returned Value**: + +```console +root 121142 121120 7 12:27 ? 00:06:27 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.3 Ensure that the --token-auth-file parameter is not set (Automated) + + +**Result:** pass + +**Remediation:** +Follow the documentation and configure alternate mechanisms for authentication. Then, +edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and remove the --token-auth-file= parameter. + +**Audit:** + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**Expected Result**: + +```console +'--token-auth-file' is not present +``` + +**Returned Value**: + +```console +root 121142 121120 7 12:27 ? 00:06:27 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.4 Ensure that the --kubelet-https argument is set to true (Automated) + + +**Result:** pass + +**Remediation:** +Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and remove the --kubelet-https parameter. + +**Audit:** + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**Expected Result**: + +```console +'--kubelet-https' is not present OR '--kubelet-https' is not present +``` + +**Returned Value**: + +```console +root 121142 121120 7 12:27 ? 00:06:27 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.5 Ensure that the --kubelet-client-certificate and --kubelet-client-key arguments are set as appropriate (Automated) + + +**Result:** pass + +**Remediation:** +Follow the Kubernetes documentation and set up the TLS connection between the +apiserver and kubelets. Then, edit API server pod specification file +/etc/kubernetes/manifests/kube-apiserver.yaml on the master node and set the +kubelet client certificate and key parameters as below. +--kubelet-client-certificate= +--kubelet-client-key= + +**Audit:** + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**Expected Result**: + +```console +'--kubelet-client-certificate' is present AND '--kubelet-client-key' is present +``` + +**Returned Value**: + +```console +root 121142 121120 7 12:27 ? 00:06:27 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.6 Ensure that the --kubelet-certificate-authority argument is set as appropriate (Automated) + + +**Result:** pass + +**Remediation:** +Follow the Kubernetes documentation and setup the TLS connection between +the apiserver and kubelets. Then, edit the API server pod specification file +/etc/kubernetes/manifests/kube-apiserver.yaml on the master node and set the +--kubelet-certificate-authority parameter to the path to the cert file for the certificate authority. +--kubelet-certificate-authority= + +**Audit:** + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**Expected Result**: + +```console +'--kubelet-certificate-authority' is present +``` + +**Returned Value**: + +```console +root 121142 121120 7 12:27 ? 00:06:27 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.7 Ensure that the --authorization-mode argument is not set to AlwaysAllow (Automated) + + +**Result:** pass + +**Remediation:** +Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the --authorization-mode parameter to values other than AlwaysAllow. +One such example could be as below. +--authorization-mode=RBAC + +**Audit:** + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**Expected Result**: + +```console +'Node,RBAC' not have 'AlwaysAllow' +``` + +**Returned Value**: + +```console +root 121142 121120 7 12:27 ? 00:06:27 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.8 Ensure that the --authorization-mode argument includes Node (Automated) + + +**Result:** pass + +**Remediation:** +Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the --authorization-mode parameter to a value that includes Node. +--authorization-mode=Node,RBAC + +**Audit:** + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**Expected Result**: + +```console +'Node,RBAC' has 'Node' +``` + +**Returned Value**: + +```console +root 121142 121120 7 12:27 ? 00:06:27 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.9 Ensure that the --authorization-mode argument includes RBAC (Automated) + + +**Result:** pass + +**Remediation:** +Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the --authorization-mode parameter to a value that includes RBAC, +for example: +--authorization-mode=Node,RBAC + +**Audit:** + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**Expected Result**: + +```console +'Node,RBAC' has 'RBAC' +``` + +**Returned Value**: + +```console +root 121142 121120 7 12:27 ? 00:06:27 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.10 Ensure that the admission control plugin EventRateLimit is set (Automated) + + +**Result:** pass + +**Remediation:** +Follow the Kubernetes documentation and set the desired limits in a configuration file. +Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +and set the below parameters. +--enable-admission-plugins=...,EventRateLimit,... +--admission-control-config-file= + +**Audit:** + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**Expected Result**: + +```console +'NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit' has 'EventRateLimit' +``` + +**Returned Value**: + +```console +root 121142 121120 7 12:27 ? 00:06:27 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.11 Ensure that the admission control plugin AlwaysAdmit is not set (Automated) + + +**Result:** pass + +**Remediation:** +Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and either remove the --enable-admission-plugins parameter, or set it to a +value that does not include AlwaysAdmit. + +**Audit:** + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**Expected Result**: + +```console +'NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit' not have 'AlwaysAdmit' OR '--enable-admission-plugins' is not present +``` + +**Returned Value**: + +```console +root 121142 121120 7 12:27 ? 00:06:27 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.12 Ensure that the admission control plugin AlwaysPullImages is set (Manual) + + +**Result:** warn + +**Remediation:** +Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the --enable-admission-plugins parameter to include +AlwaysPullImages. +--enable-admission-plugins=...,AlwaysPullImages,... + +**Audit:** + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +### 1.2.13 Ensure that the admission control plugin SecurityContextDeny is set if PodSecurityPolicy is not used (Manual) + + +**Result:** warn + +**Remediation:** +Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the --enable-admission-plugins parameter to include +SecurityContextDeny, unless PodSecurityPolicy is already in place. +--enable-admission-plugins=...,SecurityContextDeny,... + +**Audit:** + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +### 1.2.14 Ensure that the admission control plugin ServiceAccount is set (Automated) + + +**Result:** pass + +**Remediation:** +Follow the documentation and create ServiceAccount objects as per your environment. +Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and ensure that the --disable-admission-plugins parameter is set to a +value that does not include ServiceAccount. + +**Audit:** + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**Expected Result**: + +```console +'--disable-admission-plugins' is not present OR '--disable-admission-plugins' is not present +``` + +**Returned Value**: + +```console +root 121142 121120 7 12:27 ? 00:06:28 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.15 Ensure that the admission control plugin NamespaceLifecycle is set (Automated) + + +**Result:** pass + +**Remediation:** +Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the --disable-admission-plugins parameter to +ensure it does not include NamespaceLifecycle. + +**Audit:** + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**Expected Result**: + +```console +'--disable-admission-plugins' is not present OR '--disable-admission-plugins' is not present +``` + +**Returned Value**: + +```console +root 121142 121120 7 12:27 ? 00:06:28 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.16 Ensure that the admission control plugin PodSecurityPolicy is set (Automated) + + +**Result:** pass + +**Remediation:** +Follow the documentation and create Pod Security Policy objects as per your environment. +Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the --enable-admission-plugins parameter to a +value that includes PodSecurityPolicy: +--enable-admission-plugins=...,PodSecurityPolicy,... +Then restart the API Server. + +**Audit:** + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**Expected Result**: + +```console +'NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit' has 'PodSecurityPolicy' +``` + +**Returned Value**: + +```console +root 121142 121120 7 12:27 ? 00:06:28 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.17 Ensure that the admission control plugin NodeRestriction is set (Automated) + + +**Result:** pass + +**Remediation:** +Follow the Kubernetes documentation and configure NodeRestriction plug-in on kubelets. +Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the --enable-admission-plugins parameter to a +value that includes NodeRestriction. +--enable-admission-plugins=...,NodeRestriction,... + +**Audit:** + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**Expected Result**: + +```console +'NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit' has 'NodeRestriction' +``` + +**Returned Value**: + +```console +root 121142 121120 7 12:27 ? 00:06:28 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.18 Ensure that the --insecure-bind-address argument is not set (Automated) + + +**Result:** pass + +**Remediation:** +Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and remove the --insecure-bind-address parameter. + +**Audit:** + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**Expected Result**: + +```console +'--insecure-bind-address' is not present +``` + +**Returned Value**: + +```console +root 121142 121120 7 12:27 ? 00:06:28 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.19 Ensure that the --insecure-port argument is set to 0 (Automated) + + +**Result:** pass + +**Remediation:** +Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the below parameter. +--insecure-port=0 + +**Audit:** + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**Expected Result**: + +```console +'0' is equal to '0' +``` + +**Returned Value**: + +```console +root 121142 121120 7 12:27 ? 00:06:28 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.20 Ensure that the --secure-port argument is not set to 0 (Automated) + + +**Result:** pass + +**Remediation:** +Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and either remove the --secure-port parameter or +set it to a different (non-zero) desired port. + +**Audit:** + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**Expected Result**: + +```console +6443 is greater than 0 OR '--secure-port' is not present +``` + +**Returned Value**: + +```console +root 121142 121120 7 12:27 ? 00:06:28 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.21 Ensure that the --profiling argument is set to false (Automated) + + +**Result:** pass + +**Remediation:** +Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the below parameter. +--profiling=false + +**Audit:** + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**Expected Result**: + +```console +'false' is equal to 'false' +``` + +**Returned Value**: + +```console +root 121142 121120 7 12:27 ? 00:06:28 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.22 Ensure that the --audit-log-path argument is set (Automated) + + +**Result:** pass + +**Remediation:** +Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the --audit-log-path parameter to a suitable path and +file where you would like audit logs to be written, for example: +--audit-log-path=/var/log/apiserver/audit.log + +**Audit:** + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**Expected Result**: + +```console +'--audit-log-path' is present +``` + +**Returned Value**: + +```console +root 121142 121120 7 12:27 ? 00:06:28 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.23 Ensure that the --audit-log-maxage argument is set to 30 or as appropriate (Automated) + + +**Result:** pass + +**Remediation:** +Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the --audit-log-maxage parameter to 30 or as an appropriate number of days: +--audit-log-maxage=30 + +**Audit:** + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**Expected Result**: + +```console +30 is greater or equal to 30 +``` + +**Returned Value**: + +```console +root 121142 121120 7 12:27 ? 00:06:28 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.24 Ensure that the --audit-log-maxbackup argument is set to 10 or as appropriate (Automated) + + +**Result:** pass + +**Remediation:** +Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the --audit-log-maxbackup parameter to 10 or to an appropriate +value. +--audit-log-maxbackup=10 + +**Audit:** + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**Expected Result**: + +```console +10 is greater or equal to 10 +``` + +**Returned Value**: + +```console +root 121142 121120 7 12:27 ? 00:06:28 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.25 Ensure that the --audit-log-maxsize argument is set to 100 or as appropriate (Automated) + + +**Result:** pass + +**Remediation:** +Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the --audit-log-maxsize parameter to an appropriate size in MB. +For example, to set it as 100 MB: +--audit-log-maxsize=100 + +**Audit:** + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**Expected Result**: + +```console +100 is greater or equal to 100 +``` + +**Returned Value**: + +```console +root 121142 121120 7 12:27 ? 00:06:28 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.26 Ensure that the --request-timeout argument is set as appropriate (Automated) + + +**Result:** pass + +**Remediation:** +Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +and set the below parameter as appropriate and if needed. +For example, +--request-timeout=300s + +**Audit:** + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**Expected Result**: + +```console +'--request-timeout' is not present OR '--request-timeout' is not present +``` + +**Returned Value**: + +```console +root 121142 121120 7 12:27 ? 00:06:28 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.27 Ensure that the --service-account-lookup argument is set to true (Automated) + + +**Result:** pass + +**Remediation:** +Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the below parameter. +--service-account-lookup=true +Alternatively, you can delete the --service-account-lookup parameter from this file so +that the default takes effect. + +**Audit:** + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**Expected Result**: + +```console +'--service-account-lookup' is not present OR 'true' is equal to 'true' +``` + +**Returned Value**: + +```console +root 121142 121120 7 12:27 ? 00:06:28 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.28 Ensure that the --service-account-key-file argument is set as appropriate (Automated) + + +**Result:** pass + +**Remediation:** +Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the --service-account-key-file parameter +to the public key file for service accounts: +--service-account-key-file= + +**Audit:** + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**Expected Result**: + +```console +'--service-account-key-file' is present +``` + +**Returned Value**: + +```console +root 121142 121120 7 12:27 ? 00:06:28 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.29 Ensure that the --etcd-certfile and --etcd-keyfile arguments are set as appropriate (Automated) + + +**Result:** pass + +**Remediation:** +Follow the Kubernetes documentation and set up the TLS connection between the apiserver and etcd. +Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the etcd certificate and key file parameters. +--etcd-certfile= +--etcd-keyfile= + +**Audit:** + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**Expected Result**: + +```console +'--etcd-certfile' is present AND '--etcd-keyfile' is present +``` + +**Returned Value**: + +```console +root 121142 121120 7 12:27 ? 00:06:28 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.30 Ensure that the --tls-cert-file and --tls-private-key-file arguments are set as appropriate (Automated) + + +**Result:** pass + +**Remediation:** +Follow the Kubernetes documentation and set up the TLS connection on the apiserver. +Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the TLS certificate and private key file parameters. +--tls-cert-file= +--tls-private-key-file= + +**Audit:** + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**Expected Result**: + +```console +'--tls-cert-file' is present AND '--tls-private-key-file' is present +``` + +**Returned Value**: + +```console +root 121142 121120 7 12:27 ? 00:06:28 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.31 Ensure that the --client-ca-file argument is set as appropriate (Automated) + + +**Result:** pass + +**Remediation:** +Follow the Kubernetes documentation and set up the TLS connection on the apiserver. +Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the client certificate authority file. +--client-ca-file= + +**Audit:** + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**Expected Result**: + +```console +'--client-ca-file' is present +``` + +**Returned Value**: + +```console +root 121142 121120 7 12:27 ? 00:06:28 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.32 Ensure that the --etcd-cafile argument is set as appropriate (Automated) + + +**Result:** pass + +**Remediation:** +Follow the Kubernetes documentation and set up the TLS connection between the apiserver and etcd. +Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the etcd certificate authority file parameter. +--etcd-cafile= + +**Audit:** + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**Expected Result**: + +```console +'--etcd-cafile' is present +``` + +**Returned Value**: + +```console +root 121142 121120 7 12:27 ? 00:06:28 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.33 Ensure that the --encryption-provider-config argument is set as appropriate (Automated) + + +**Result:** pass + +**Remediation:** +Follow the Kubernetes documentation and configure a EncryptionConfig file. +Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the --encryption-provider-config parameter to the path of that file: --encryption-provider-config= + +**Audit:** + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**Expected Result**: + +```console +'--encryption-provider-config' is present +``` + +**Returned Value**: + +```console +root 121142 121120 7 12:27 ? 00:06:28 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 1.2.34 Ensure that encryption providers are appropriately configured (Automated) + + +**Result:** pass + +**Remediation:** +Follow the Kubernetes documentation and configure a EncryptionConfig file. +In this file, choose aescbc, kms or secretbox as the encryption provider. + +**Audit Script:** `check_encryption_provider_config.sh` + +```bash +#!/usr/bin/env bash + +# This script is used to check the encrption provider config is set to aesbc +# +# outputs: +# true/false + +# TODO: Figure out the file location from the kube-apiserver commandline args +ENCRYPTION_CONFIG_FILE="/node/etc/kubernetes/ssl/encryption.yaml" + +if [[ ! -f "${ENCRYPTION_CONFIG_FILE}" ]]; then + echo "false" + exit +fi + +for provider in "$@" +do + if grep "$provider" "${ENCRYPTION_CONFIG_FILE}"; then + echo "true" + exit + fi +done + +echo "false" +exit + +``` + +**Audit Execution:** + +```bash +./check_encryption_provider_config.sh aescbc +``` + +**Expected Result**: + +```console +'true' is equal to 'true' +``` + +**Returned Value**: + +```console +- aescbc: true +``` + +### 1.2.35 Ensure that the API Server only makes use of Strong Cryptographic Ciphers (Automated) + + +**Result:** warn + +**Remediation:** +Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml +on the master node and set the below parameter. +--tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM +_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM +_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM +_SHA384 + +**Audit:** + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +## 1.3 Controller Manager +### 1.3.1 Ensure that the --terminated-pod-gc-threshold argument is set as appropriate (Automated) + + +**Result:** pass + +**Remediation:** +Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml +on the master node and set the --terminated-pod-gc-threshold to an appropriate threshold, +for example: +--terminated-pod-gc-threshold=10 + +**Audit:** + +```bash +/bin/ps -ef | grep kube-controller-manager | grep -v grep +``` + +**Expected Result**: + +```console +'--terminated-pod-gc-threshold' is present +``` + +**Returned Value**: + +```console +root 121366 121346 1 12:27 ? 00:01:13 kube-controller-manager --cluster-cidr=10.42.0.0/16 --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --allocate-node-cidrs=true --configure-cloud-routes=false --leader-elect=true --pod-eviction-timeout=5m0s --authentication-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --feature-gates=RotateKubeletServerCertificate=true --bind-address=127.0.0.1 --enable-hostpath-provisioner=false --address=127.0.0.1 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 --cloud-provider= --service-account-private-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --service-cluster-ip-range=10.43.0.0/16 --authorization-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --root-ca-file=/etc/kubernetes/ssl/kube-ca.pem --node-monitor-grace-period=40s --profiling=false --terminated-pod-gc-threshold=1000 --v=2 --allow-untagged-cloud=true --use-service-account-credentials=true +``` + +### 1.3.2 Ensure that the --profiling argument is set to false (Automated) + + +**Result:** pass + +**Remediation:** +Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml +on the master node and set the below parameter. +--profiling=false + +**Audit:** + +```bash +/bin/ps -ef | grep kube-controller-manager | grep -v grep +``` + +**Expected Result**: + +```console +'false' is equal to 'false' +``` + +**Returned Value**: + +```console +root 121366 121346 1 12:27 ? 00:01:13 kube-controller-manager --cluster-cidr=10.42.0.0/16 --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --allocate-node-cidrs=true --configure-cloud-routes=false --leader-elect=true --pod-eviction-timeout=5m0s --authentication-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --feature-gates=RotateKubeletServerCertificate=true --bind-address=127.0.0.1 --enable-hostpath-provisioner=false --address=127.0.0.1 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 --cloud-provider= --service-account-private-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --service-cluster-ip-range=10.43.0.0/16 --authorization-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --root-ca-file=/etc/kubernetes/ssl/kube-ca.pem --node-monitor-grace-period=40s --profiling=false --terminated-pod-gc-threshold=1000 --v=2 --allow-untagged-cloud=true --use-service-account-credentials=true +``` + +### 1.3.3 Ensure that the --use-service-account-credentials argument is set to true (Automated) + + +**Result:** pass + +**Remediation:** +Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml +on the master node to set the below parameter. +--use-service-account-credentials=true + +**Audit:** + +```bash +/bin/ps -ef | grep kube-controller-manager | grep -v grep +``` + +**Expected Result**: + +```console +'true' is not equal to 'false' +``` + +**Returned Value**: + +```console +root 121366 121346 1 12:27 ? 00:01:13 kube-controller-manager --cluster-cidr=10.42.0.0/16 --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --allocate-node-cidrs=true --configure-cloud-routes=false --leader-elect=true --pod-eviction-timeout=5m0s --authentication-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --feature-gates=RotateKubeletServerCertificate=true --bind-address=127.0.0.1 --enable-hostpath-provisioner=false --address=127.0.0.1 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 --cloud-provider= --service-account-private-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --service-cluster-ip-range=10.43.0.0/16 --authorization-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --root-ca-file=/etc/kubernetes/ssl/kube-ca.pem --node-monitor-grace-period=40s --profiling=false --terminated-pod-gc-threshold=1000 --v=2 --allow-untagged-cloud=true --use-service-account-credentials=true +``` + +### 1.3.4 Ensure that the --service-account-private-key-file argument is set as appropriate (Automated) + + +**Result:** pass + +**Remediation:** +Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml +on the master node and set the --service-account-private-key-file parameter +to the private key file for service accounts. +--service-account-private-key-file= + +**Audit:** + +```bash +/bin/ps -ef | grep kube-controller-manager | grep -v grep +``` + +**Expected Result**: + +```console +'--service-account-private-key-file' is present +``` + +**Returned Value**: + +```console +root 121366 121346 1 12:27 ? 00:01:13 kube-controller-manager --cluster-cidr=10.42.0.0/16 --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --allocate-node-cidrs=true --configure-cloud-routes=false --leader-elect=true --pod-eviction-timeout=5m0s --authentication-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --feature-gates=RotateKubeletServerCertificate=true --bind-address=127.0.0.1 --enable-hostpath-provisioner=false --address=127.0.0.1 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 --cloud-provider= --service-account-private-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --service-cluster-ip-range=10.43.0.0/16 --authorization-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --root-ca-file=/etc/kubernetes/ssl/kube-ca.pem --node-monitor-grace-period=40s --profiling=false --terminated-pod-gc-threshold=1000 --v=2 --allow-untagged-cloud=true --use-service-account-credentials=true +``` + +### 1.3.5 Ensure that the --root-ca-file argument is set as appropriate (Automated) + + +**Result:** pass + +**Remediation:** +Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml +on the master node and set the --root-ca-file parameter to the certificate bundle file`. +--root-ca-file= + +**Audit:** + +```bash +/bin/ps -ef | grep kube-controller-manager | grep -v grep +``` + +**Expected Result**: + +```console +'--root-ca-file' is present +``` + +**Returned Value**: + +```console +root 121366 121346 1 12:27 ? 00:01:13 kube-controller-manager --cluster-cidr=10.42.0.0/16 --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --allocate-node-cidrs=true --configure-cloud-routes=false --leader-elect=true --pod-eviction-timeout=5m0s --authentication-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --feature-gates=RotateKubeletServerCertificate=true --bind-address=127.0.0.1 --enable-hostpath-provisioner=false --address=127.0.0.1 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 --cloud-provider= --service-account-private-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --service-cluster-ip-range=10.43.0.0/16 --authorization-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --root-ca-file=/etc/kubernetes/ssl/kube-ca.pem --node-monitor-grace-period=40s --profiling=false --terminated-pod-gc-threshold=1000 --v=2 --allow-untagged-cloud=true --use-service-account-credentials=true +``` + +### 1.3.6 Ensure that the RotateKubeletServerCertificate argument is set to true (Automated) + + +**Result:** Not Applicable + +**Remediation:** +Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml +on the master node and set the --feature-gates parameter to include RotateKubeletServerCertificate=true. +--feature-gates=RotateKubeletServerCertificate=true + +Cluster provisioned by RKE handles certificate rotation directly through RKE. + +### 1.3.7 Ensure that the --bind-address argument is set to 127.0.0.1 (Automated) + + +**Result:** pass + +**Remediation:** +Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml +on the master node and ensure the correct value for the --bind-address parameter + +**Audit:** + +```bash +/bin/ps -ef | grep kube-controller-manager | grep -v grep +``` + +**Expected Result**: + +```console +'127.0.0.1' is equal to '127.0.0.1' OR '--bind-address' is not present +``` + +**Returned Value**: + +```console +root 121366 121346 1 12:27 ? 00:01:13 kube-controller-manager --cluster-cidr=10.42.0.0/16 --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --allocate-node-cidrs=true --configure-cloud-routes=false --leader-elect=true --pod-eviction-timeout=5m0s --authentication-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --feature-gates=RotateKubeletServerCertificate=true --bind-address=127.0.0.1 --enable-hostpath-provisioner=false --address=127.0.0.1 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 --cloud-provider= --service-account-private-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --service-cluster-ip-range=10.43.0.0/16 --authorization-kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --root-ca-file=/etc/kubernetes/ssl/kube-ca.pem --node-monitor-grace-period=40s --profiling=false --terminated-pod-gc-threshold=1000 --v=2 --allow-untagged-cloud=true --use-service-account-credentials=true +``` + +## 1.4 Scheduler +### 1.4.1 Ensure that the --profiling argument is set to false (Automated) + + +**Result:** pass + +**Remediation:** +Edit the Scheduler pod specification file /etc/kubernetes/manifests/kube-scheduler.yaml file +on the master node and set the below parameter. +--profiling=false + +**Audit:** + +```bash +/bin/ps -ef | grep kube-scheduler | grep -v grep +``` + +**Expected Result**: + +```console +'false' is equal to 'false' +``` + +**Returned Value**: + +```console +root 121587 121567 0 12:27 ? 00:00:12 kube-scheduler --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-scheduler.yaml --address=127.0.0.1 --leader-elect=true --profiling=false --v=2 --bind-address=127.0.0.1 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 +``` + +### 1.4.2 Ensure that the --bind-address argument is set to 127.0.0.1 (Automated) + + +**Result:** pass + +**Remediation:** +Edit the Scheduler pod specification file /etc/kubernetes/manifests/kube-scheduler.yaml +on the master node and ensure the correct value for the --bind-address parameter + +**Audit:** + +```bash +/bin/ps -ef | grep kube-scheduler | grep -v grep +``` + +**Expected Result**: + +```console +'127.0.0.1' is equal to '127.0.0.1' OR '--bind-address' is not present +``` + +**Returned Value**: + +```console +root 121587 121567 0 12:27 ? 00:00:12 kube-scheduler --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-scheduler.yaml --address=127.0.0.1 --leader-elect=true --profiling=false --v=2 --bind-address=127.0.0.1 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 +``` + +## 2 Etcd Node Configuration Files +### 2.1 Ensure that the --cert-file and --key-file arguments are set as appropriate (Automated) + + +**Result:** pass + +**Remediation:** +Follow the etcd service documentation and configure TLS encryption. +Then, edit the etcd pod specification file /etc/kubernetes/manifests/etcd.yaml +on the master node and set the below parameters. +--cert-file= +--key-file= + +**Audit:** + +```bash +/bin/ps -ef | /bin/grep etcd | /bin/grep -v grep +``` + +**Expected Result**: + +```console +'--cert-file' is present AND '--key-file' is present +``` + +**Returned Value**: + +```console +etcd 120679 120657 1 12:27 ? 00:01:17 /usr/local/bin/etcd --trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --cert-file=/etc/kubernetes/ssl/kube-etcd-.pem --heartbeat-interval=500 --election-timeout=5000 --initial-cluster-token=etcd-cluster-1 --initial-cluster=etcd-=https://:2380 --peer-trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --peer-cert-file=/etc/kubernetes/ssl/kube-etcd-.pem --peer-key-file=/etc/kubernetes/ssl/kube-etcd--key.pem --peer-client-cert-auth=true --data-dir=/var/lib/rancher/etcd/ --initial-advertise-peer-urls=https://:2380 --initial-cluster-state=new --advertise-client-urls=https://:2379 --client-cert-auth=true --enable-v2=true --name=etcd- --listen-client-urls=https://:2379 --listen-peer-urls=https://:2380 --key-file=/etc/kubernetes/ssl/kube-etcd--key.pem --cipher-suites=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 root 120728 120707 0 12:27 ? 00:00:00 /opt/rke-tools/rke-etcd-backup etcd-backup save --cacert /etc/kubernetes/ssl/kube-ca.pem --cert /etc/kubernetes/ssl/kube-node.pem --key /etc/kubernetes/ssl/kube-node-key.pem --name etcd-rolling-snapshots --endpoints=:2379 --retention=72h --creation=12h root 121142 121120 7 12:27 ? 00:06:27 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json root 214939 214868 2 13:56 ? 00:00:00 kube-bench run --targets etcd --scored --nosummary --noremediations --v=5 --config-dir=/etc/kube-bench/cfg --benchmark rke-cis-1.6-hardened --json --log_dir /tmp/results/logs --outputfile /tmp/results/etcd.json +``` + +### 2.2 Ensure that the --client-cert-auth argument is set to true (Automated) + + +**Result:** pass + +**Remediation:** +Edit the etcd pod specification file /etc/kubernetes/manifests/etcd.yaml on the master +node and set the below parameter. +--client-cert-auth="true" + +**Audit:** + +```bash +/bin/ps -ef | /bin/grep etcd | /bin/grep -v grep +``` + +**Expected Result**: + +```console +'--client-cert-auth' is present OR 'true' is equal to 'true' +``` + +**Returned Value**: + +```console +etcd 120679 120657 1 12:27 ? 00:01:17 /usr/local/bin/etcd --trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --cert-file=/etc/kubernetes/ssl/kube-etcd-.pem --heartbeat-interval=500 --election-timeout=5000 --initial-cluster-token=etcd-cluster-1 --initial-cluster=etcd-=https://:2380 --peer-trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --peer-cert-file=/etc/kubernetes/ssl/kube-etcd-.pem --peer-key-file=/etc/kubernetes/ssl/kube-etcd--key.pem --peer-client-cert-auth=true --data-dir=/var/lib/rancher/etcd/ --initial-advertise-peer-urls=https://:2380 --initial-cluster-state=new --advertise-client-urls=https://:2379 --client-cert-auth=true --enable-v2=true --name=etcd- --listen-client-urls=https://:2379 --listen-peer-urls=https://:2380 --key-file=/etc/kubernetes/ssl/kube-etcd--key.pem --cipher-suites=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 root 120728 120707 0 12:27 ? 00:00:00 /opt/rke-tools/rke-etcd-backup etcd-backup save --cacert /etc/kubernetes/ssl/kube-ca.pem --cert /etc/kubernetes/ssl/kube-node.pem --key /etc/kubernetes/ssl/kube-node-key.pem --name etcd-rolling-snapshots --endpoints=:2379 --retention=72h --creation=12h root 121142 121120 7 12:27 ? 00:06:27 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json root 214939 214868 2 13:56 ? 00:00:00 kube-bench run --targets etcd --scored --nosummary --noremediations --v=5 --config-dir=/etc/kube-bench/cfg --benchmark rke-cis-1.6-hardened --json --log_dir /tmp/results/logs --outputfile /tmp/results/etcd.json +``` + +### 2.3 Ensure that the --auto-tls argument is not set to true (Automated) + + +**Result:** pass + +**Remediation:** +Edit the etcd pod specification file /etc/kubernetes/manifests/etcd.yaml on the master +node and either remove the --auto-tls parameter or set it to false. + --auto-tls=false + +**Audit:** + +```bash +/bin/ps -ef | /bin/grep etcd | /bin/grep -v grep +``` + +**Expected Result**: + +```console +'--auto-tls' is not present OR '--auto-tls' is not present +``` + +**Returned Value**: + +```console +etcd 120679 120657 1 12:27 ? 00:01:17 /usr/local/bin/etcd --trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --cert-file=/etc/kubernetes/ssl/kube-etcd-.pem --heartbeat-interval=500 --election-timeout=5000 --initial-cluster-token=etcd-cluster-1 --initial-cluster=etcd-=https://:2380 --peer-trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --peer-cert-file=/etc/kubernetes/ssl/kube-etcd-.pem --peer-key-file=/etc/kubernetes/ssl/kube-etcd--key.pem --peer-client-cert-auth=true --data-dir=/var/lib/rancher/etcd/ --initial-advertise-peer-urls=https://:2380 --initial-cluster-state=new --advertise-client-urls=https://:2379 --client-cert-auth=true --enable-v2=true --name=etcd- --listen-client-urls=https://:2379 --listen-peer-urls=https://:2380 --key-file=/etc/kubernetes/ssl/kube-etcd--key.pem --cipher-suites=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 root 120728 120707 0 12:27 ? 00:00:00 /opt/rke-tools/rke-etcd-backup etcd-backup save --cacert /etc/kubernetes/ssl/kube-ca.pem --cert /etc/kubernetes/ssl/kube-node.pem --key /etc/kubernetes/ssl/kube-node-key.pem --name etcd-rolling-snapshots --endpoints=:2379 --retention=72h --creation=12h root 121142 121120 7 12:27 ? 00:06:27 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json root 214939 214868 1 13:56 ? 00:00:00 kube-bench run --targets etcd --scored --nosummary --noremediations --v=5 --config-dir=/etc/kube-bench/cfg --benchmark rke-cis-1.6-hardened --json --log_dir /tmp/results/logs --outputfile /tmp/results/etcd.json +``` + +### 2.4 Ensure that the --peer-cert-file and --peer-key-file arguments are set as appropriate (Automated) + + +**Result:** pass + +**Remediation:** +Follow the etcd service documentation and configure peer TLS encryption as appropriate +for your etcd cluster. +Then, edit the etcd pod specification file /etc/kubernetes/manifests/etcd.yaml on the +master node and set the below parameters. +--peer-client-file= +--peer-key-file= + +**Audit:** + +```bash +/bin/ps -ef | /bin/grep etcd | /bin/grep -v grep +``` + +**Expected Result**: + +```console +'--peer-cert-file' is present AND '--peer-key-file' is present +``` + +**Returned Value**: + +```console +etcd 120679 120657 1 12:27 ? 00:01:17 /usr/local/bin/etcd --trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --cert-file=/etc/kubernetes/ssl/kube-etcd-.pem --heartbeat-interval=500 --election-timeout=5000 --initial-cluster-token=etcd-cluster-1 --initial-cluster=etcd-=https://:2380 --peer-trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --peer-cert-file=/etc/kubernetes/ssl/kube-etcd-.pem --peer-key-file=/etc/kubernetes/ssl/kube-etcd--key.pem --peer-client-cert-auth=true --data-dir=/var/lib/rancher/etcd/ --initial-advertise-peer-urls=https://:2380 --initial-cluster-state=new --advertise-client-urls=https://:2379 --client-cert-auth=true --enable-v2=true --name=etcd- --listen-client-urls=https://:2379 --listen-peer-urls=https://:2380 --key-file=/etc/kubernetes/ssl/kube-etcd--key.pem --cipher-suites=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 root 120728 120707 0 12:27 ? 00:00:00 /opt/rke-tools/rke-etcd-backup etcd-backup save --cacert /etc/kubernetes/ssl/kube-ca.pem --cert /etc/kubernetes/ssl/kube-node.pem --key /etc/kubernetes/ssl/kube-node-key.pem --name etcd-rolling-snapshots --endpoints=:2379 --retention=72h --creation=12h root 121142 121120 7 12:27 ? 00:06:27 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json root 214939 214868 5 13:56 ? 00:00:00 kube-bench run --targets etcd --scored --nosummary --noremediations --v=5 --config-dir=/etc/kube-bench/cfg --benchmark rke-cis-1.6-hardened --json --log_dir /tmp/results/logs --outputfile /tmp/results/etcd.json +``` + +### 2.5 Ensure that the --peer-client-cert-auth argument is set to true (Automated) + + +**Result:** pass + +**Remediation:** +Edit the etcd pod specification file /etc/kubernetes/manifests/etcd.yaml on the master +node and set the below parameter. +--peer-client-cert-auth=true + +**Audit:** + +```bash +/bin/ps -ef | /bin/grep etcd | /bin/grep -v grep +``` + +**Expected Result**: + +```console +'--peer-client-cert-auth' is present OR 'true' is equal to 'true' +``` + +**Returned Value**: + +```console +etcd 120679 120657 1 12:27 ? 00:01:17 /usr/local/bin/etcd --trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --cert-file=/etc/kubernetes/ssl/kube-etcd-.pem --heartbeat-interval=500 --election-timeout=5000 --initial-cluster-token=etcd-cluster-1 --initial-cluster=etcd-=https://:2380 --peer-trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --peer-cert-file=/etc/kubernetes/ssl/kube-etcd-.pem --peer-key-file=/etc/kubernetes/ssl/kube-etcd--key.pem --peer-client-cert-auth=true --data-dir=/var/lib/rancher/etcd/ --initial-advertise-peer-urls=https://:2380 --initial-cluster-state=new --advertise-client-urls=https://:2379 --client-cert-auth=true --enable-v2=true --name=etcd- --listen-client-urls=https://:2379 --listen-peer-urls=https://:2380 --key-file=/etc/kubernetes/ssl/kube-etcd--key.pem --cipher-suites=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 root 120728 120707 0 12:27 ? 00:00:00 /opt/rke-tools/rke-etcd-backup etcd-backup save --cacert /etc/kubernetes/ssl/kube-ca.pem --cert /etc/kubernetes/ssl/kube-node.pem --key /etc/kubernetes/ssl/kube-node-key.pem --name etcd-rolling-snapshots --endpoints=:2379 --retention=72h --creation=12h root 121142 121120 7 12:27 ? 00:06:27 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json root 214939 214868 4 13:56 ? 00:00:00 kube-bench run --targets etcd --scored --nosummary --noremediations --v=5 --config-dir=/etc/kube-bench/cfg --benchmark rke-cis-1.6-hardened --json --log_dir /tmp/results/logs --outputfile /tmp/results/etcd.json +``` + +### 2.6 Ensure that the --peer-auto-tls argument is not set to true (Automated) + + +**Result:** pass + +**Remediation:** +Edit the etcd pod specification file /etc/kubernetes/manifests/etcd.yaml on the master +node and either remove the --peer-auto-tls parameter or set it to false. +--peer-auto-tls=false + +**Audit:** + +```bash +/bin/ps -ef | /bin/grep etcd | /bin/grep -v grep +``` + +**Expected Result**: + +```console +'--peer-auto-tls' is not present OR '--peer-auto-tls' is present +``` + +**Returned Value**: + +```console +etcd 120679 120657 1 12:27 ? 00:01:17 /usr/local/bin/etcd --trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --cert-file=/etc/kubernetes/ssl/kube-etcd-.pem --heartbeat-interval=500 --election-timeout=5000 --initial-cluster-token=etcd-cluster-1 --initial-cluster=etcd-=https://:2380 --peer-trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --peer-cert-file=/etc/kubernetes/ssl/kube-etcd-.pem --peer-key-file=/etc/kubernetes/ssl/kube-etcd--key.pem --peer-client-cert-auth=true --data-dir=/var/lib/rancher/etcd/ --initial-advertise-peer-urls=https://:2380 --initial-cluster-state=new --advertise-client-urls=https://:2379 --client-cert-auth=true --enable-v2=true --name=etcd- --listen-client-urls=https://:2379 --listen-peer-urls=https://:2380 --key-file=/etc/kubernetes/ssl/kube-etcd--key.pem --cipher-suites=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 root 120728 120707 0 12:27 ? 00:00:00 /opt/rke-tools/rke-etcd-backup etcd-backup save --cacert /etc/kubernetes/ssl/kube-ca.pem --cert /etc/kubernetes/ssl/kube-node.pem --key /etc/kubernetes/ssl/kube-node-key.pem --name etcd-rolling-snapshots --endpoints=:2379 --retention=72h --creation=12h root 121142 121120 7 12:27 ? 00:06:27 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json root 214939 214868 4 13:56 ? 00:00:00 kube-bench run --targets etcd --scored --nosummary --noremediations --v=5 --config-dir=/etc/kube-bench/cfg --benchmark rke-cis-1.6-hardened --json --log_dir /tmp/results/logs --outputfile /tmp/results/etcd.json +``` + +### 2.7 Ensure that a unique Certificate Authority is used for etcd (Automated) + + +**Result:** pass + +**Remediation:** +[Manual test] +Follow the etcd documentation and create a dedicated certificate authority setup for the +etcd service. +Then, edit the etcd pod specification file /etc/kubernetes/manifests/etcd.yaml on the +master node and set the below parameter. +--trusted-ca-file= + +**Audit:** + +```bash +/bin/ps -ef | /bin/grep etcd | /bin/grep -v grep +``` + +**Expected Result**: + +```console +'--trusted-ca-file' is present +``` + +**Returned Value**: + +```console +etcd 120679 120657 1 12:27 ? 00:01:17 /usr/local/bin/etcd --trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --cert-file=/etc/kubernetes/ssl/kube-etcd-.pem --heartbeat-interval=500 --election-timeout=5000 --initial-cluster-token=etcd-cluster-1 --initial-cluster=etcd-=https://:2380 --peer-trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --peer-cert-file=/etc/kubernetes/ssl/kube-etcd-.pem --peer-key-file=/etc/kubernetes/ssl/kube-etcd--key.pem --peer-client-cert-auth=true --data-dir=/var/lib/rancher/etcd/ --initial-advertise-peer-urls=https://:2380 --initial-cluster-state=new --advertise-client-urls=https://:2379 --client-cert-auth=true --enable-v2=true --name=etcd- --listen-client-urls=https://:2379 --listen-peer-urls=https://:2380 --key-file=/etc/kubernetes/ssl/kube-etcd--key.pem --cipher-suites=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 root 120728 120707 0 12:27 ? 00:00:00 /opt/rke-tools/rke-etcd-backup etcd-backup save --cacert /etc/kubernetes/ssl/kube-ca.pem --cert /etc/kubernetes/ssl/kube-node.pem --key /etc/kubernetes/ssl/kube-node-key.pem --name etcd-rolling-snapshots --endpoints=:2379 --retention=72h --creation=12h root 121142 121120 7 12:27 ? 00:06:27 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json root 214939 214868 3 13:56 ? 00:00:00 kube-bench run --targets etcd --scored --nosummary --noremediations --v=5 --config-dir=/etc/kube-bench/cfg --benchmark rke-cis-1.6-hardened --json --log_dir /tmp/results/logs --outputfile /tmp/results/etcd.json +``` + +## 3.1 Authentication and Authorization +### 3.1.1 Client certificate authentication should not be used for users (Manual) + + +**Result:** warn + +**Remediation:** +Alternative mechanisms provided by Kubernetes such as the use of OIDC should be +implemented in place of client certificates. + +## 3.2 Logging +### 3.2.1 Ensure that a minimal audit policy is created (Automated) + + +**Result:** pass + +**Remediation:** +Create an audit policy file for your cluster. + +**Audit:** + +```bash +/bin/ps -ef | grep kube-apiserver | grep -v grep +``` + +**Expected Result**: + +```console +'--audit-policy-file' is present +``` + +**Returned Value**: + +```console +root 121142 121120 7 12:27 ? 00:06:28 kube-apiserver --audit-log-maxsize=100 --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --service-cluster-ip-range=10.43.0.0/16 --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-username-headers=X-Remote-User --bind-address=0.0.0.0 --advertise-address= --requestheader-allowed-names=kube-apiserver-proxy-client --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --allow-privileged=true --requestheader-extra-headers-prefix=X-Remote-Extra- --admission-control-config-file=/etc/kubernetes/admission.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --service-account-lookup=true --runtime-config=policy/v1beta1/podsecuritypolicy=true --authorization-mode=Node,RBAC --audit-log-maxage=30 --profiling=false --storage-backend=etcd3 --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --etcd-servers=https://:2379 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --secure-port=6443 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --insecure-port=0 --api-audiences=unknown --audit-policy-file=/etc/kubernetes/audit-policy.yaml --etcd-prefix=/registry --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --service-account-issuer=rke --service-account-signing-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --requestheader-group-headers=X-Remote-Group --cloud-provider= --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-node-port-range=30000-32767 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --anonymous-auth=false --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --audit-log-format=json +``` + +### 3.2.2 Ensure that the audit policy covers key security concerns (Manual) + + +**Result:** warn + +**Remediation:** +Consider modification of the audit policy in use on the cluster to include these items, at a +minimum. + +## 4.1 Worker Node Configuration Files +### 4.1.1 Ensure that the kubelet service file permissions are set to 644 or more restrictive (Automated) + + +**Result:** Not Applicable + +**Remediation:** +Cluster provisioned by RKE doesn’t require or maintain a configuration file for the kubelet service. +All configuration is passed in as arguments at container run time. + +### 4.1.2 Ensure that the kubelet service file ownership is set to root:root (Automated) + + +**Result:** Not Applicable + +**Remediation:** +Cluster provisioned by RKE doesn’t require or maintain a configuration file for the kubelet service. +All configuration is passed in as arguments at container run time. + +### 4.1.3 If proxy kubeconfig file exists ensure permissions are set to 644 or more restrictive (Automated) + + +**Result:** pass + +**Remediation:** +Run the below command (based on the file location on your system) on the each worker node. +For example, +chmod 644 $proykubeconfig + +**Audit:** + +```bash +/bin/sh -c 'if test -e /node/etc/kubernetes/ssl/kubecfg-kube-proxy.yaml; then stat -c %a /node/etc/kubernetes/ssl/kubecfg-kube-proxy.yaml; fi' +``` + +**Expected Result**: + +```console +'644' is present OR '640' is present OR '600' is equal to '600' OR '444' is present OR '440' is present OR '400' is present OR '000' is present +``` + +**Returned Value**: + +```console +600 +``` + +### 4.1.4 Ensure that the proxy kubeconfig file ownership is set to root:root (Automated) + + +**Result:** pass + +**Remediation:** +Run the below command (based on the file location on your system) on the each worker node. +For example, chown root:root /etc/kubernetes/ssl/kubecfg-kube-proxy.yaml + +**Audit:** + +```bash +/bin/sh -c 'if test -e /etc/kubernetes/ssl/kubecfg-kube-proxy.yaml; then stat -c %U:%G /etc/kubernetes/ssl/kubecfg-kube-proxy.yaml; fi' +``` + +**Expected Result**: + +```console +'root:root' is not present OR '/etc/kubernetes/ssl/kubecfg-kube-proxy.yaml' is not present +``` + +### 4.1.5 Ensure that the --kubeconfig kubelet.conf file permissions are set to 644 or more restrictive (Automated) + + +**Result:** pass + +**Remediation:** +Run the below command (based on the file location on your system) on the each worker node. +For example, +chmod 644 /etc/kubernetes/ssl/kubecfg-kube-node.yaml + +**Audit:** + +```bash +/bin/sh -c 'if test -e /etc/kubernetes/ssl/kubecfg-kube-node.yaml; then stat -c permissions=%a /etc/kubernetes/ssl/kubecfg-kube-node.yaml; fi' +``` + +**Expected Result**: + +```console +'permissions' is not present +``` + +### 4.1.6 Ensure that the --kubeconfig kubelet.conf file ownership is set to root:root (Automated) + + +**Result:** pass + +**Remediation:** +Run the below command (based on the file location on your system) on the each worker node. +For example, +chown root:root /etc/kubernetes/ssl/kubecfg-kube-node.yaml + +**Audit:** + +```bash +/bin/sh -c 'if test -e /node/etc/kubernetes/ssl/kubecfg-kube-node.yaml; then stat -c %U:%G /node/etc/kubernetes/ssl/kubecfg-kube-node.yaml; fi' +``` + +**Expected Result**: + +```console +'root:root' is equal to 'root:root' +``` + +**Returned Value**: + +```console +root:root +``` + +### 4.1.7 Ensure that the certificate authorities file permissions are set to 644 or more restrictive (Automated) + + +**Result:** pass + +**Remediation:** +Run the following command to modify the file permissions of the +--client-ca-file chmod 644 + +**Audit Script:** `check_cafile_permissions.sh` + +```bash +#!/usr/bin/env bash + +CAFILE=$(ps -ef | grep kubelet | grep -v apiserver | grep -- --client-ca-file= | awk -F '--client-ca-file=' '{print $2}' | awk '{print $1}') +if test -z $CAFILE; then CAFILE=$kubeletcafile; fi +if test -e $CAFILE; then stat -c permissions=%a $CAFILE; fi + +``` + +**Audit Execution:** + +```bash +./check_cafile_permissions.sh +``` + +**Expected Result**: + +```console +'permissions' is not present +``` + +### 4.1.8 Ensure that the client certificate authorities file ownership is set to root:root (Automated) + + +**Result:** pass + +**Remediation:** +Run the following command to modify the ownership of the --client-ca-file. +chown root:root + +**Audit Script:** `check_cafile_ownership.sh` + +```bash +#!/usr/bin/env bash + +CAFILE=$(ps -ef | grep kubelet | grep -v apiserver | grep -- --client-ca-file= | awk -F '--client-ca-file=' '{print $2}' | awk '{print $1}') +if test -z $CAFILE; then CAFILE=$kubeletcafile; fi +if test -e $CAFILE; then stat -c %U:%G $CAFILE; fi + +``` + +**Audit Execution:** + +```bash +./check_cafile_ownership.sh +``` + +**Expected Result**: + +```console +'root:root' is not present +``` + +### 4.1.9 Ensure that the kubelet --config configuration file has permissions set to 644 or more restrictive (Automated) + + +**Result:** Not Applicable + +**Remediation:** +Run the following command (using the config file location identified in the Audit step) +chmod 644 /var/lib/kubelet/config.yaml + +Clusters provisioned by RKE doesn’t require or maintain a configuration file for the kubelet. +All configuration is passed in as arguments at container run time. + +### 4.1.10 Ensure that the kubelet --config configuration file ownership is set to root:root (Automated) + + +**Result:** Not Applicable + +**Remediation:** +Run the following command (using the config file location identified in the Audit step) +chown root:root /var/lib/kubelet/config.yaml + +Clusters provisioned by RKE doesn’t require or maintain a configuration file for the kubelet. +All configuration is passed in as arguments at container run time. + +## 4.2 Kubelet +### 4.2.1 Ensure that the anonymous-auth argument is set to false (Automated) + + +**Result:** pass + +**Remediation:** +If using a Kubelet config file, edit the file to set authentication: anonymous: enabled to +false. +If using executable arguments, edit the kubelet service file +/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and +set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable. +--anonymous-auth=false +Based on your system, restart the kubelet service. For example: +systemctl daemon-reload +systemctl restart kubelet.service + +**Audit:** + +```bash +/bin/ps -fC kubelet +``` + +**Audit Config:** + +```bash +/bin/cat /var/lib/kubelet/config.yaml +``` + +**Expected Result**: + +```console +'' is not present +``` + +### 4.2.2 Ensure that the --authorization-mode argument is not set to AlwaysAllow (Automated) + + +**Result:** pass + +**Remediation:** +If using a Kubelet config file, edit the file to set authorization: mode to Webhook. If +using executable arguments, edit the kubelet service file +/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and +set the below parameter in KUBELET_AUTHZ_ARGS variable. +--authorization-mode=Webhook +Based on your system, restart the kubelet service. For example: +systemctl daemon-reload +systemctl restart kubelet.service + +**Audit:** + +```bash +/bin/ps -fC kubelet +``` + +**Audit Config:** + +```bash +/bin/cat /var/lib/kubelet/config.yaml +``` + +**Expected Result**: + +```console +'' is not present +``` + +### 4.2.3 Ensure that the --client-ca-file argument is set as appropriate (Automated) + + +**Result:** pass + +**Remediation:** +If using a Kubelet config file, edit the file to set authentication: x509: clientCAFile to +the location of the client CA file. +If using command line arguments, edit the kubelet service file +/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and +set the below parameter in KUBELET_AUTHZ_ARGS variable. +--client-ca-file= +Based on your system, restart the kubelet service. For example: +systemctl daemon-reload +systemctl restart kubelet.service + +**Audit:** + +```bash +/bin/ps -fC kubelet +``` + +**Audit Config:** + +```bash +/bin/cat /var/lib/kubelet/config.yaml +``` + +**Expected Result**: + +```console +'' is not present +``` + +### 4.2.4 Ensure that the --read-only-port argument is set to 0 (Automated) + + +**Result:** pass + +**Remediation:** +If using a Kubelet config file, edit the file to set readOnlyPort to 0. +If using command line arguments, edit the kubelet service file +/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and +set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable. +--read-only-port=0 +Based on your system, restart the kubelet service. For example: +systemctl daemon-reload +systemctl restart kubelet.service + +**Audit:** + +```bash +/bin/ps -fC kubelet +``` + +**Audit Config:** + +```bash +/bin/cat /var/lib/kubelet/config.yaml +``` + +**Expected Result**: + +```console +'' is not present OR '' is not present +``` + +### 4.2.5 Ensure that the --streaming-connection-idle-timeout argument is not set to 0 (Automated) + + +**Result:** pass + +**Remediation:** +If using a Kubelet config file, edit the file to set streamingConnectionIdleTimeout to a +value other than 0. +If using command line arguments, edit the kubelet service file +/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and +set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable. +--streaming-connection-idle-timeout=5m +Based on your system, restart the kubelet service. For example: +systemctl daemon-reload +systemctl restart kubelet.service + +**Audit:** + +```bash +/bin/ps -fC kubelet +``` + +**Audit Config:** + +```bash +/bin/cat /var/lib/kubelet/config.yaml +``` + +**Expected Result**: + +```console +'30m' is not equal to '0' OR '--streaming-connection-idle-timeout' is not present +``` + +**Returned Value**: + +```console +UID PID PPID C STIME TTY TIME CMD root 121813 121792 4 12:27 ? 00:03:37 kubelet --fail-swap-on=false --resolv-conf=/etc/resolv.conf --authorization-mode=Webhook --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-node.yaml --v=2 --volume-plugin-dir=/var/lib/kubelet/volumeplugins --address=0.0.0.0 --make-iptables-util-chains=true --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --hostname-override= --tls-cert-file=/etc/kubernetes/ssl/kube-kubelet-.pem --network-plugin=cni --streaming-connection-idle-timeout=30m --root-dir=/var/lib/kubelet --event-qps=0 --feature-gates=RotateKubeletServerCertificate=true --protect-kernel-defaults=true --cloud-provider= --tls-private-key-file=/etc/kubernetes/ssl/kube-kubelet--key.pem --cgroups-per-qos=True --cni-bin-dir=/opt/cni/bin --cni-conf-dir=/etc/cni/net.d --pod-infra-container-image=rancher/mirrored-pause:3.5 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 --anonymous-auth=false --authentication-token-webhook=true --node-ip= --cluster-dns=10.43.0.10 --cluster-domain=cluster.local --read-only-port=0 --cgroup-driver=cgroupfs --resolv-conf=/run/systemd/resolve/resolv.conf +``` + +### 4.2.6 Ensure that the --protect-kernel-defaults argument is set to true (Automated) + + +**Result:** pass + +**Remediation:** +If using a Kubelet config file, edit the file to set protectKernelDefaults: true. +If using command line arguments, edit the kubelet service file +/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and +set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable. +--protect-kernel-defaults=true +Based on your system, restart the kubelet service. For example: +systemctl daemon-reload +systemctl restart kubelet.service + +**Audit:** + +```bash +/bin/ps -fC kubelet +``` + +**Audit Config:** + +```bash +/bin/cat /var/lib/kubelet/config.yaml +``` + +**Expected Result**: + +```console +'' is not present +``` + +### 4.2.7 Ensure that the --make-iptables-util-chains argument is set to true (Automated) + + +**Result:** pass + +**Remediation:** +If using a Kubelet config file, edit the file to set makeIPTablesUtilChains: true. +If using command line arguments, edit the kubelet service file +/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and +remove the --make-iptables-util-chains argument from the +KUBELET_SYSTEM_PODS_ARGS variable. +Based on your system, restart the kubelet service. For example: +systemctl daemon-reload +systemctl restart kubelet.service + +**Audit:** + +```bash +/bin/ps -fC kubelet +``` + +**Audit Config:** + +```bash +/bin/cat /var/lib/kubelet/config.yaml +``` + +**Expected Result**: + +```console +'' is not present OR '' is not present +``` + +### 4.2.8 Ensure that the --hostname-override argument is not set (Manual) + + +**Result:** Not Applicable + +**Remediation:** +Edit the kubelet service file /etc/systemd/system/kubelet.service.d/10-kubeadm.conf +on each worker node and remove the --hostname-override argument from the +KUBELET_SYSTEM_PODS_ARGS variable. +Based on your system, restart the kubelet service. For example: +systemctl daemon-reload +systemctl restart kubelet.service + +Clusters provisioned by RKE set the --hostname-override to avoid any hostname configuration errors + +### 4.2.9 Ensure that the --event-qps argument is set to 0 or a level which ensures appropriate event capture (Automated) + + +**Result:** pass + +**Remediation:** +If using a Kubelet config file, edit the file to set eventRecordQPS: to an appropriate level. +If using command line arguments, edit the kubelet service file +/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and +set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable. +Based on your system, restart the kubelet service. For example: +systemctl daemon-reload +systemctl restart kubelet.service + +**Audit:** + +```bash +/bin/ps -fC kubelet +``` + +**Audit Config:** + +```bash +/bin/cat /var/lib/kubelet/config.yaml +``` + +**Expected Result**: + +```console +'' is not present +``` + +### 4.2.10 Ensure that the --tls-cert-file and --tls-private-key-file arguments are set as appropriate (Automated) + + +**Result:** pass + +**Remediation:** +If using a Kubelet config file, edit the file to set tlsCertFile to the location +of the certificate file to use to identify this Kubelet, and tlsPrivateKeyFile +to the location of the corresponding private key file. +If using command line arguments, edit the kubelet service file +/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and +set the below parameters in KUBELET_CERTIFICATE_ARGS variable. +--tls-cert-file= +--tls-private-key-file= +Based on your system, restart the kubelet service. For example: +systemctl daemon-reload +systemctl restart kubelet.service + +**Audit:** + +```bash +/bin/ps -fC kubelet +``` + +**Audit Config:** + +```bash +/bin/cat /var/lib/kubelet/config.yaml +``` + +**Expected Result**: + +```console +'' is not present AND '' is not present +``` + +### 4.2.11 Ensure that the --rotate-certificates argument is not set to false (Automated) + + +**Result:** pass + +**Remediation:** +If using a Kubelet config file, edit the file to add the line rotateCertificates: true or +remove it altogether to use the default value. +If using command line arguments, edit the kubelet service file +/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and +remove --rotate-certificates=false argument from the KUBELET_CERTIFICATE_ARGS +variable. +Based on your system, restart the kubelet service. For example: +systemctl daemon-reload +systemctl restart kubelet.service + +**Audit:** + +```bash +/bin/ps -fC kubelet +``` + +**Audit Config:** + +```bash +/bin/cat /var/lib/kubelet/config.yaml +``` + +**Expected Result**: + +```console +'--rotate-certificates' is not present OR '--rotate-certificates' is not present +``` + +**Returned Value**: + +```console +UID PID PPID C STIME TTY TIME CMD root 121813 121792 4 12:27 ? 00:03:37 kubelet --fail-swap-on=false --resolv-conf=/etc/resolv.conf --authorization-mode=Webhook --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-node.yaml --v=2 --volume-plugin-dir=/var/lib/kubelet/volumeplugins --address=0.0.0.0 --make-iptables-util-chains=true --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --hostname-override= --tls-cert-file=/etc/kubernetes/ssl/kube-kubelet-.pem --network-plugin=cni --streaming-connection-idle-timeout=30m --root-dir=/var/lib/kubelet --event-qps=0 --feature-gates=RotateKubeletServerCertificate=true --protect-kernel-defaults=true --cloud-provider= --tls-private-key-file=/etc/kubernetes/ssl/kube-kubelet--key.pem --cgroups-per-qos=True --cni-bin-dir=/opt/cni/bin --cni-conf-dir=/etc/cni/net.d --pod-infra-container-image=rancher/mirrored-pause:3.5 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 --anonymous-auth=false --authentication-token-webhook=true --node-ip= --cluster-dns=10.43.0.10 --cluster-domain=cluster.local --read-only-port=0 --cgroup-driver=cgroupfs --resolv-conf=/run/systemd/resolve/resolv.conf +``` + +### 4.2.12 Verify that the RotateKubeletServerCertificate argument is set to true (Automated) + + +**Result:** Not Applicable + +**Remediation:** +Edit the kubelet service file /etc/systemd/system/kubelet.service.d/10-kubeadm.conf +on each worker node and set the below parameter in KUBELET_CERTIFICATE_ARGS variable. +--feature-gates=RotateKubeletServerCertificate=true +Based on your system, restart the kubelet service. For example: +systemctl daemon-reload +systemctl restart kubelet.service + +Clusters provisioned by RKE handles certificate rotation directly through RKE. + +**Audit Config:** + +```bash +/bin/cat /var/lib/kubelet/config.yaml +``` + +### 4.2.13 Ensure that the Kubelet only makes use of Strong Cryptographic Ciphers (Automated) + + +**Result:** pass + +**Remediation:** +If using a Kubelet config file, edit the file to set TLSCipherSuites: to +TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 +or to a subset of these values. +If using executable arguments, edit the kubelet service file +/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and +set the --tls-cipher-suites parameter as follows, or to a subset of these values. +--tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 +Based on your system, restart the kubelet service. For example: +systemctl daemon-reload +systemctl restart kubelet.service + +**Audit:** + +```bash +/bin/ps -fC kubelet +``` + +**Audit Config:** + +```bash +/bin/cat /var/lib/kubelet/config.yaml +``` + +**Expected Result**: + +```console +'' is not present +``` + +## 5.1 RBAC and Service Accounts +### 5.1.1 Ensure that the cluster-admin role is only used where required (Manual) + + +**Result:** warn + +**Remediation:** +Identify all clusterrolebindings to the cluster-admin role. Check if they are used and +if they need this role or if they could use a role with fewer privileges. +Where possible, first bind users to a lower privileged role and then remove the +clusterrolebinding to the cluster-admin role : +kubectl delete clusterrolebinding [name] + +### 5.1.2 Minimize access to secrets (Manual) + + +**Result:** warn + +**Remediation:** +Where possible, remove get, list and watch access to secret objects in the cluster. + +### 5.1.3 Minimize wildcard use in Roles and ClusterRoles (Manual) + + +**Result:** warn + +**Remediation:** +Where possible replace any use of wildcards in clusterroles and roles with specific +objects or actions. + +### 5.1.4 Minimize access to create pods (Manual) + + +**Result:** warn + +**Remediation:** +Where possible, remove create access to pod objects in the cluster. + +### 5.1.5 Ensure that default service accounts are not actively used. (Automated) + + +**Result:** pass + +**Remediation:** +Create explicit service accounts wherever a Kubernetes workload requires specific access +to the Kubernetes API server. +Modify the configuration of each default service account to include this value +automountServiceAccountToken: false + +**Audit Script:** `check_for_default_sa.sh` + +```bash +#!/bin/bash + +set -eE + +handle_error() { + echo "false" +} + +trap 'handle_error' ERR + +count_sa=$(kubectl get serviceaccounts --all-namespaces -o json | jq -r '.items[] | select(.metadata.name=="default") | select((.automountServiceAccountToken == null) or (.automountServiceAccountToken == true))' | jq .metadata.namespace | wc -l) +if [[ ${count_sa} -gt 0 ]]; then + echo "false" + exit +fi + +for ns in $(kubectl get ns --no-headers -o custom-columns=":metadata.name") +do + for result in $(kubectl get clusterrolebinding,rolebinding -n $ns -o json | jq -r '.items[] | select((.subjects[].kind=="ServiceAccount" and .subjects[].name=="default") or (.subjects[].kind=="Group" and .subjects[].name=="system:serviceaccounts"))' | jq -r '"\(.roleRef.kind),\(.roleRef.name)"') + do + read kind name <<<$(IFS=","; echo $result) + resource_count=$(kubectl get $kind $name -n $ns -o json | jq -r '.rules[] | select(.resources[] != "podsecuritypolicies")' | wc -l) + if [[ ${resource_count} -gt 0 ]]; then + echo "false" + exit + fi + done +done + + +echo "true" +``` + +**Audit Execution:** + +```bash +./check_for_default_sa.sh +``` + +**Expected Result**: + +```console +'true' is equal to 'true' +``` + +**Returned Value**: + +```console +true +``` + +### 5.1.6 Ensure that Service Account Tokens are only mounted where necessary (Manual) + + +**Result:** warn + +**Remediation:** +Modify the definition of pods and service accounts which do not need to mount service +account tokens to disable it. + +## 5.2 Pod Security Policies +### 5.2.1 Minimize the admission of privileged containers (Manual) + + +**Result:** warn + +**Remediation:** +Create a PSP as described in the Kubernetes documentation, ensuring that +the .spec.privileged field is omitted or set to false. + +### 5.2.2 Minimize the admission of containers wishing to share the host process ID namespace (Automated) + + +**Result:** pass + +**Remediation:** +Create a PSP as described in the Kubernetes documentation, ensuring that the +.spec.hostPID field is omitted or set to false. + +**Audit:** + +```bash +kubectl get psp -o json | jq .items[] | jq -r 'select((.spec.hostPID == null) or (.spec.hostPID == false))' | jq .metadata.name | wc -l | xargs -I {} echo '--count={}' +``` + +**Expected Result**: + +```console +1 is greater than 0 +``` + +**Returned Value**: + +```console +--count=1 +``` + +### 5.2.3 Minimize the admission of containers wishing to share the host IPC namespace (Automated) + + +**Result:** pass + +**Remediation:** +Create a PSP as described in the Kubernetes documentation, ensuring that the +.spec.hostIPC field is omitted or set to false. + +**Audit:** + +```bash +kubectl get psp -o json | jq .items[] | jq -r 'select((.spec.hostIPC == null) or (.spec.hostIPC == false))' | jq .metadata.name | wc -l | xargs -I {} echo '--count={}' +``` + +**Expected Result**: + +```console +1 is greater than 0 +``` + +**Returned Value**: + +```console +--count=1 +``` + +### 5.2.4 Minimize the admission of containers wishing to share the host network namespace (Automated) + + +**Result:** pass + +**Remediation:** +Create a PSP as described in the Kubernetes documentation, ensuring that the +.spec.hostNetwork field is omitted or set to false. + +**Audit:** + +```bash +kubectl get psp -o json | jq .items[] | jq -r 'select((.spec.hostNetwork == null) or (.spec.hostNetwork == false))' | jq .metadata.name | wc -l | xargs -I {} echo '--count={}' +``` + +**Expected Result**: + +```console +1 is greater than 0 +``` + +**Returned Value**: + +```console +--count=1 +``` + +### 5.2.5 Minimize the admission of containers with allowPrivilegeEscalation (Automated) + + +**Result:** pass + +**Remediation:** +Create a PSP as described in the Kubernetes documentation, ensuring that the +.spec.allowPrivilegeEscalation field is omitted or set to false. + +**Audit:** + +```bash +kubectl get psp -o json | jq .items[] | jq -r 'select((.spec.allowPrivilegeEscalation == null) or (.spec.allowPrivilegeEscalation == false))' | jq .metadata.name | wc -l | xargs -I {} echo '--count={}' +``` + +**Expected Result**: + +```console +1 is greater than 0 +``` + +**Returned Value**: + +```console +--count=1 +``` + +### 5.2.6 Minimize the admission of root containers (Manual) + + +**Result:** warn + +**Remediation:** +Create a PSP as described in the Kubernetes documentation, ensuring that the +.spec.runAsUser.rule is set to either MustRunAsNonRoot or MustRunAs with the range of +UIDs not including 0. + +### 5.2.7 Minimize the admission of containers with the NET_RAW capability (Manual) + + +**Result:** warn + +**Remediation:** +Create a PSP as described in the Kubernetes documentation, ensuring that the +.spec.requiredDropCapabilities is set to include either NET_RAW or ALL. + +### 5.2.8 Minimize the admission of containers with added capabilities (Manual) + + +**Result:** warn + +**Remediation:** +Ensure that allowedCapabilities is not present in PSPs for the cluster unless +it is set to an empty array. + +### 5.2.9 Minimize the admission of containers with capabilities assigned (Manual) + + +**Result:** warn + +**Remediation:** +Review the use of capabilites in applications runnning on your cluster. Where a namespace +contains applicaions which do not require any Linux capabities to operate consider adding +a PSP which forbids the admission of containers which do not drop all capabilities. + +## 5.3 Network Policies and CNI +### 5.3.1 Ensure that the CNI in use supports Network Policies (Manual) + + +**Result:** warn + +**Remediation:** +If the CNI plugin in use does not support network policies, consideration should be given to +making use of a different plugin, or finding an alternate mechanism for restricting traffic +in the Kubernetes cluster. + +### 5.3.2 Ensure that all Namespaces have Network Policies defined (Automated) + + +**Result:** pass + +**Remediation:** +Follow the documentation and create NetworkPolicy objects as you need them. + +**Audit Script:** `check_for_network_policies.sh` + +```bash +#!/bin/bash + +set -eE + +handle_error() { + echo "false" +} + +trap 'handle_error' ERR + +for namespace in $(kubectl get namespaces --all-namespaces -o json | jq -r '.items[].metadata.name'); do + policy_count=$(kubectl get networkpolicy -n ${namespace} -o json | jq '.items | length') + if [[ ${policy_count} -eq 0 ]]; then + echo "false" + exit + fi +done + +echo "true" + +``` + +**Audit Execution:** + +```bash +./check_for_network_policies.sh +``` + +**Expected Result**: + +```console +'true' is equal to 'true' +``` + +**Returned Value**: + +```console +true +``` + +## 5.4 Secrets Management +### 5.4.1 Prefer using secrets as files over secrets as environment variables (Manual) + + +**Result:** warn + +**Remediation:** +if possible, rewrite application code to read secrets from mounted secret files, rather than +from environment variables. + +### 5.4.2 Consider external secret storage (Manual) + + +**Result:** warn + +**Remediation:** +Refer to the secrets management options offered by your cloud provider or a third-party +secrets management solution. + +## 5.5 Extensible Admission Control +### 5.5.1 Configure Image Provenance using ImagePolicyWebhook admission controller (Manual) + + +**Result:** warn + +**Remediation:** +Follow the Kubernetes documentation and setup image provenance. + +## 5.7 General Policies +### 5.7.1 Create administrative boundaries between resources using namespaces (Manual) + + +**Result:** warn + +**Remediation:** +Follow the documentation and create namespaces for objects in your deployment as you need +them. + +### 5.7.2 Ensure that the seccomp profile is set to docker/default in your pod definitions (Manual) + + +**Result:** warn + +**Remediation:** +Seccomp is an alpha feature currently. By default, all alpha features are disabled. So, you +would need to enable alpha features in the apiserver by passing "--feature- +gates=AllAlpha=true" argument. +Edit the /etc/kubernetes/apiserver file on the master node and set the KUBE_API_ARGS +parameter to "--feature-gates=AllAlpha=true" +KUBE_API_ARGS="--feature-gates=AllAlpha=true" +Based on your system, restart the kube-apiserver service. For example: +systemctl restart kube-apiserver.service +Use annotations to enable the docker/default seccomp profile in your pod definitions. An +example is as below: +apiVersion: v1 +kind: Pod +metadata: + name: trustworthy-pod + annotations: + seccomp.security.alpha.kubernetes.io/pod: docker/default +spec: + containers: + - name: trustworthy-container + image: sotrustworthy:latest + +### 5.7.3 Apply Security Context to Your Pods and Containers (Manual) + + +**Result:** warn + +**Remediation:** +Follow the Kubernetes documentation and apply security contexts to your pods. For a +suggested list of security contexts, you may refer to the CIS Security Benchmark for Docker +Containers. + +### 5.7.4 The default namespace should not be used (Automated) + + +**Result:** pass + +**Remediation:** +Ensure that namespaces are created to allow for appropriate segregation of Kubernetes +resources and that all new resources are created in a specific namespace. + +**Audit Script:** `check_for_default_ns.sh` + +```bash +#!/bin/bash + +set -eE + +handle_error() { + echo "false" +} + +trap 'handle_error' ERR + +count=$(kubectl get all -n default -o json | jq .items[] | jq -r 'select((.metadata.name!="kubernetes"))' | jq .metadata.name | wc -l) +if [[ ${count} -gt 0 ]]; then + echo "false" + exit +fi + +echo "true" + + +``` + +**Audit Execution:** + +```bash +./check_for_default_ns.sh +``` + +**Expected Result**: + +```console +'true' is equal to 'true' +``` + +**Returned Value**: + +```console +true +``` + diff --git a/content/rancher/v2.6/en/security/hardening-guides/1.6-hardening-2.6/Rancher_v2-6_CIS_v1-6_Hardening_Guide.pdf b/content/rancher/v2.6/en/security/hardening-guides/1.6-hardening-2.6/Rancher_v2-6_CIS_v1-6_Hardening_Guide.pdf new file mode 100644 index 00000000000..c61b5c4abc1 --- /dev/null +++ b/content/rancher/v2.6/en/security/hardening-guides/1.6-hardening-2.6/Rancher_v2-6_CIS_v1-6_Hardening_Guide.pdf @@ -0,0 +1,8259 @@ +%PDF-1.7 +%🖤 +1 0 obj +<< +/Type /Pages +/Kids [ 6 0 R 8 0 R 30 0 R 45 0 R 53 0 R 67 0 R 77 0 R 99 0 R 129 0 R 164 0 R 194 0 R 232 0 R 270 0 R 310 0 R 350 0 R 390 0 R 425 0 R 464 0 R 499 0 R 534 0 R 557 0 R 591 0 R ] +/Count 22 +>> +endobj +2 0 obj +<< +/Title (Hardening Guide with CIS v1.6 Benchmark) +/Creator (pandoc) +/Producer (WeasyPrint 54.2) +>> +endobj +3 0 obj +<< +/Type /Catalog +/Pages 1 0 R +/Outlines 611 0 R +/Names << +/Dests << +/Names [ (TOC) [ 8 0 R /XYZ 77.509843 756.850394 0 ] (cb1) [ 45 0 R /XYZ 84.259843 441.572079 0 ] (cb1-1) [ 45 0 R /XYZ 101.433071 439.875057 0 ] (cb1-2) [ 45 0 R /XYZ 99.933071 420.928036 0 ] (cb1-3) [ 45 0 R /XYZ 99.933071 401.981014 0 ] (cb1-4) [ 45 0 R /XYZ 99.933071 383.033993 0 ] (cb1-5) [ 45 0 R /XYZ 99.933071 364.086971 0 ] (cb10) [ 390 0 R /XYZ 84.259843 416.811778 0 ] (cb10-1) [ 390 0 R /XYZ 101.433071 415.114756 0 ] (cb10-10) [ 390 0 R /XYZ 99.933071 244.591563 0 ] (cb10-100) [ 499 0 R /XYZ 99.933071 590.755821 0 ] (cb10-101) [ 499 0 R /XYZ 99.933071 571.808799 0 ] (cb10-102) [ 499 0 R /XYZ 99.933071 552.861778 0 ] (cb10-103) [ 499 0 R /XYZ 99.933071 533.914756 0 ] (cb10-104) [ 499 0 R /XYZ 99.933071 514.967735 0 ] (cb10-105) [ 499 0 R /XYZ 99.933071 496.020714 0 ] (cb10-106) [ 499 0 R /XYZ 99.933071 477.073692 0 ] (cb10-107) [ 499 0 R /XYZ 99.933071 458.126671 0 ] (cb10-108) [ 499 0 R /XYZ 99.933071 439.179649 0 ] (cb10-109) [ 499 0 R /XYZ 99.933071 420.232628 0 ] (cb10-11) [ 390 0 R /XYZ 99.933071 225.644542 0 ] (cb10-110) [ 499 0 R /XYZ 99.933071 401.285606 0 ] (cb10-111) [ 499 0 R /XYZ 99.933071 382.338585 0 ] (cb10-112) [ 499 0 R /XYZ 99.933071 363.391563 0 ] (cb10-113) [ 499 0 R /XYZ 99.933071 344.444542 0 ] (cb10-114) [ 499 0 R /XYZ 99.933071 325.497520 0 ] (cb10-115) [ 499 0 R /XYZ 99.933071 306.550499 0 ] (cb10-116) [ 499 0 R /XYZ 99.933071 287.603477 0 ] (cb10-117) [ 499 0 R /XYZ 99.933071 173.921348 0 ] (cb10-118) [ 499 0 R /XYZ 99.933071 154.974327 0 ] (cb10-119) [ 499 0 R /XYZ 99.933071 136.027305 0 ] (cb10-12) [ 390 0 R /XYZ 99.933071 206.697520 0 ] (cb10-120) [ 499 0 R /XYZ 99.933071 117.080284 0 ] (cb10-121) [ 499 0 R /XYZ 99.933071 98.133262 0 ] (cb10-122) [ 534 0 R /XYZ 99.933071 799.173057 0 ] (cb10-123) [ 534 0 R /XYZ 99.933071 685.490928 0 ] (cb10-124) [ 534 0 R /XYZ 99.933071 666.543907 0 ] (cb10-125) [ 534 0 R /XYZ 99.933071 647.596885 0 ] (cb10-126) [ 534 0 R /XYZ 99.933071 628.649864 0 ] (cb10-127) [ 534 0 R /XYZ 99.933071 609.702842 0 ] (cb10-128) [ 534 0 R /XYZ 99.933071 590.755821 0 ] (cb10-129) [ 534 0 R /XYZ 99.933071 571.808799 0 ] (cb10-13) [ 390 0 R /XYZ 99.933071 187.750499 0 ] (cb10-14) [ 390 0 R /XYZ 99.933071 168.803477 0 ] (cb10-15) [ 390 0 R /XYZ 99.933071 149.856456 0 ] (cb10-16) [ 390 0 R /XYZ 99.933071 130.909434 0 ] (cb10-17) [ 390 0 R /XYZ 99.933071 111.962413 0 ] (cb10-18) [ 390 0 R /XYZ 99.933071 93.015391 0 ] (cb10-19) [ 425 0 R /XYZ 99.933071 799.173057 0 ] (cb10-2) [ 390 0 R /XYZ 99.933071 396.167735 0 ] (cb10-20) [ 425 0 R /XYZ 99.933071 780.226036 0 ] (cb10-21) [ 425 0 R /XYZ 99.933071 761.279014 0 ] (cb10-22) [ 425 0 R /XYZ 99.933071 742.331993 0 ] (cb10-23) [ 425 0 R /XYZ 99.933071 723.384971 0 ] (cb10-24) [ 425 0 R /XYZ 99.933071 704.437950 0 ] (cb10-25) [ 425 0 R /XYZ 99.933071 685.490928 0 ] (cb10-26) [ 425 0 R /XYZ 99.933071 666.543907 0 ] (cb10-27) [ 425 0 R /XYZ 99.933071 647.596885 0 ] (cb10-28) [ 425 0 R /XYZ 99.933071 628.649864 0 ] (cb10-29) [ 425 0 R /XYZ 99.933071 609.702842 0 ] (cb10-3) [ 390 0 R /XYZ 99.933071 377.220714 0 ] (cb10-30) [ 425 0 R /XYZ 99.933071 571.808799 0 ] (cb10-31) [ 425 0 R /XYZ 99.933071 552.861778 0 ] (cb10-32) [ 425 0 R /XYZ 99.933071 533.914756 0 ] (cb10-33) [ 425 0 R /XYZ 99.933071 514.967735 0 ] (cb10-34) [ 425 0 R /XYZ 99.933071 496.020714 0 ] (cb10-35) [ 425 0 R /XYZ 99.933071 477.073692 0 ] (cb10-36) [ 425 0 R /XYZ 99.933071 458.126671 0 ] (cb10-37) [ 425 0 R /XYZ 99.933071 439.179649 0 ] (cb10-38) [ 425 0 R /XYZ 99.933071 420.232628 0 ] (cb10-39) [ 425 0 R /XYZ 99.933071 401.285606 0 ] (cb10-4) [ 390 0 R /XYZ 99.933071 358.273692 0 ] (cb10-40) [ 425 0 R /XYZ 99.933071 382.338585 0 ] (cb10-41) [ 425 0 R /XYZ 99.933071 363.391563 0 ] (cb10-42) [ 425 0 R /XYZ 99.933071 344.444542 0 ] (cb10-43) [ 425 0 R /XYZ 99.933071 325.497520 0 ] (cb10-44) [ 425 0 R /XYZ 99.933071 306.550499 0 ] (cb10-45) [ 425 0 R /XYZ 99.933071 287.603477 0 ] (cb10-46) [ 425 0 R /XYZ 99.933071 268.656456 0 ] (cb10-47) [ 425 0 R /XYZ 99.933071 249.709434 0 ] (cb10-48) [ 425 0 R /XYZ 99.933071 230.762413 0 ] (cb10-49) [ 425 0 R /XYZ 99.933071 211.815391 0 ] (cb10-5) [ 390 0 R /XYZ 99.933071 339.326671 0 ] (cb10-50) [ 425 0 R /XYZ 99.933071 192.868370 0 ] (cb10-51) [ 425 0 R /XYZ 99.933071 173.921348 0 ] (cb10-52) [ 425 0 R /XYZ 99.933071 154.974327 0 ] (cb10-53) [ 425 0 R /XYZ 99.933071 136.027305 0 ] (cb10-54) [ 425 0 R /XYZ 99.933071 117.080284 0 ] (cb10-55) [ 425 0 R /XYZ 99.933071 98.133262 0 ] (cb10-56) [ 464 0 R /XYZ 99.933071 799.173057 0 ] (cb10-57) [ 464 0 R /XYZ 99.933071 780.226036 0 ] (cb10-58) [ 464 0 R /XYZ 99.933071 761.279014 0 ] (cb10-59) [ 464 0 R /XYZ 99.933071 742.331993 0 ] (cb10-6) [ 390 0 R /XYZ 99.933071 320.379649 0 ] (cb10-60) [ 464 0 R /XYZ 99.933071 723.384971 0 ] (cb10-61) [ 464 0 R /XYZ 99.933071 704.437950 0 ] (cb10-62) [ 464 0 R /XYZ 99.933071 685.490928 0 ] (cb10-63) [ 464 0 R /XYZ 99.933071 666.543907 0 ] (cb10-64) [ 464 0 R /XYZ 99.933071 647.596885 0 ] (cb10-65) [ 464 0 R /XYZ 99.933071 628.649864 0 ] (cb10-66) [ 464 0 R /XYZ 99.933071 609.702842 0 ] (cb10-67) [ 464 0 R /XYZ 99.933071 590.755821 0 ] (cb10-68) [ 464 0 R /XYZ 99.933071 571.808799 0 ] (cb10-69) [ 464 0 R /XYZ 99.933071 552.861778 0 ] (cb10-7) [ 390 0 R /XYZ 99.933071 301.432628 0 ] (cb10-70) [ 464 0 R /XYZ 99.933071 533.914756 0 ] (cb10-71) [ 464 0 R /XYZ 99.933071 514.967735 0 ] (cb10-72) [ 464 0 R /XYZ 99.933071 496.020714 0 ] (cb10-73) [ 464 0 R /XYZ 99.933071 477.073692 0 ] (cb10-74) [ 464 0 R /XYZ 99.933071 458.126671 0 ] (cb10-75) [ 464 0 R /XYZ 99.933071 439.179649 0 ] (cb10-76) [ 464 0 R /XYZ 99.933071 420.232628 0 ] (cb10-77) [ 464 0 R /XYZ 99.933071 401.285606 0 ] (cb10-78) [ 464 0 R /XYZ 99.933071 382.338585 0 ] (cb10-79) [ 464 0 R /XYZ 99.933071 363.391563 0 ] (cb10-8) [ 390 0 R /XYZ 99.933071 282.485606 0 ] (cb10-80) [ 464 0 R /XYZ 99.933071 344.444542 0 ] (cb10-81) [ 464 0 R /XYZ 99.933071 325.497520 0 ] (cb10-82) [ 464 0 R /XYZ 99.933071 306.550499 0 ] (cb10-83) [ 464 0 R /XYZ 99.933071 287.603477 0 ] (cb10-84) [ 464 0 R /XYZ 99.933071 268.656456 0 ] (cb10-85) [ 464 0 R /XYZ 99.933071 249.709434 0 ] (cb10-86) [ 464 0 R /XYZ 99.933071 230.762413 0 ] (cb10-87) [ 464 0 R /XYZ 99.933071 117.080284 0 ] (cb10-88) [ 464 0 R /XYZ 99.933071 98.133262 0 ] (cb10-89) [ 499 0 R /XYZ 99.933071 799.173057 0 ] (cb10-9) [ 390 0 R /XYZ 99.933071 263.538585 0 ] (cb10-90) [ 499 0 R /XYZ 99.933071 780.226036 0 ] (cb10-91) [ 499 0 R /XYZ 99.933071 761.279014 0 ] (cb10-92) [ 499 0 R /XYZ 99.933071 742.331993 0 ] (cb10-93) [ 499 0 R /XYZ 99.933071 723.384971 0 ] (cb10-94) [ 499 0 R /XYZ 99.933071 704.437950 0 ] (cb10-95) [ 499 0 R /XYZ 99.933071 685.490928 0 ] (cb10-96) [ 499 0 R /XYZ 99.933071 666.543907 0 ] (cb10-97) [ 499 0 R /XYZ 99.933071 647.596885 0 ] (cb10-98) [ 499 0 R /XYZ 99.933071 628.649864 0 ] (cb10-99) [ 499 0 R /XYZ 99.933071 609.702842 0 ] (cb11) [ 534 0 R /XYZ 84.259843 331.262799 0 ] (cb11-1) [ 534 0 R /XYZ 101.433071 329.565778 0 ] (cb11-10) [ 534 0 R /XYZ 99.933071 159.042585 0 ] (cb11-11) [ 534 0 R /XYZ 99.933071 140.095563 0 ] (cb11-12) [ 534 0 R /XYZ 99.933071 121.148542 0 ] (cb11-13) [ 534 0 R /XYZ 99.933071 102.201520 0 ] (cb11-14) [ 557 0 R /XYZ 99.933071 799.173057 0 ] (cb11-15) [ 557 0 R /XYZ 99.933071 780.226036 0 ] (cb11-16) [ 557 0 R /XYZ 99.933071 761.279014 0 ] (cb11-17) [ 557 0 R /XYZ 99.933071 742.331993 0 ] (cb11-18) [ 557 0 R /XYZ 99.933071 723.384971 0 ] (cb11-19) [ 557 0 R /XYZ 99.933071 704.437950 0 ] (cb11-2) [ 534 0 R /XYZ 99.933071 310.618756 0 ] (cb11-20) [ 557 0 R /XYZ 99.933071 685.490928 0 ] (cb11-21) [ 557 0 R /XYZ 99.933071 666.543907 0 ] (cb11-22) [ 557 0 R /XYZ 99.933071 647.596885 0 ] (cb11-23) [ 557 0 R /XYZ 99.933071 628.649864 0 ] (cb11-24) [ 557 0 R /XYZ 99.933071 609.702842 0 ] (cb11-25) [ 557 0 R /XYZ 99.933071 590.755821 0 ] (cb11-26) [ 557 0 R /XYZ 99.933071 571.808799 0 ] (cb11-3) [ 534 0 R /XYZ 99.933071 291.671735 0 ] (cb11-4) [ 534 0 R /XYZ 99.933071 272.724714 0 ] (cb11-5) [ 534 0 R /XYZ 99.933071 253.777692 0 ] (cb11-6) [ 534 0 R /XYZ 99.933071 234.830671 0 ] (cb11-7) [ 534 0 R /XYZ 99.933071 215.883649 0 ] (cb11-8) [ 534 0 R /XYZ 99.933071 196.936628 0 ] (cb11-9) [ 534 0 R /XYZ 99.933071 177.989606 0 ] (cb12) [ 557 0 R /XYZ 84.259843 446.115778 0 ] (cb12-1) [ 557 0 R /XYZ 101.433071 444.418756 0 ] (cb12-10) [ 557 0 R /XYZ 99.933071 273.895563 0 ] (cb12-11) [ 557 0 R /XYZ 99.933071 254.948542 0 ] (cb12-12) [ 557 0 R /XYZ 99.933071 236.001520 0 ] (cb12-13) [ 557 0 R /XYZ 99.933071 217.054499 0 ] (cb12-14) [ 557 0 R /XYZ 99.933071 198.107477 0 ] (cb12-15) [ 557 0 R /XYZ 99.933071 179.160456 0 ] (cb12-16) [ 557 0 R /XYZ 99.933071 160.213434 0 ] (cb12-17) [ 557 0 R /XYZ 99.933071 141.266413 0 ] (cb12-18) [ 557 0 R /XYZ 99.933071 122.319391 0 ] (cb12-19) [ 557 0 R /XYZ 99.933071 103.372370 0 ] (cb12-2) [ 557 0 R /XYZ 99.933071 425.471735 0 ] (cb12-20) [ 591 0 R /XYZ 99.933071 780.226036 0 ] (cb12-21) [ 591 0 R /XYZ 99.933071 742.331993 0 ] (cb12-22) [ 591 0 R /XYZ 99.933071 723.384971 0 ] (cb12-23) [ 591 0 R /XYZ 99.933071 704.437950 0 ] (cb12-3) [ 557 0 R /XYZ 99.933071 406.524714 0 ] (cb12-4) [ 557 0 R /XYZ 99.933071 387.577692 0 ] (cb12-5) [ 557 0 R /XYZ 99.933071 368.630671 0 ] (cb12-6) [ 557 0 R /XYZ 99.933071 349.683649 0 ] (cb12-7) [ 557 0 R /XYZ 99.933071 330.736628 0 ] (cb12-8) [ 557 0 R /XYZ 99.933071 311.789606 0 ] (cb12-9) [ 557 0 R /XYZ 99.933071 292.842585 0 ] (cb2) [ 53 0 R /XYZ 84.259843 753.620079 0 ] (cb2-1) [ 53 0 R /XYZ 101.433071 751.923057 0 ] (cb2-2) [ 53 0 R /XYZ 99.933071 732.976036 0 ] (cb3) [ 53 0 R /XYZ 84.259843 654.779014 0 ] (cb3-1) [ 53 0 R /XYZ 101.433071 653.081993 0 ] (cb3-2) [ 53 0 R /XYZ 99.933071 634.134971 0 ] (cb3-3) [ 53 0 R /XYZ 99.933071 615.187950 0 ] (cb3-4) [ 53 0 R /XYZ 99.933071 596.240928 0 ] (cb4) [ 53 0 R /XYZ 84.259843 282.344928 0 ] (cb4-1) [ 53 0 R /XYZ 101.433071 280.647907 0 ] (cb5) [ 53 0 R /XYZ 84.259843 217.647907 0 ] (cb5-1) [ 53 0 R /XYZ 101.433071 215.950885 0 ] (cb5-2) [ 53 0 R /XYZ 99.933071 197.003864 0 ] (cb5-3) [ 53 0 R /XYZ 99.933071 178.056842 0 ] (cb5-4) [ 53 0 R /XYZ 99.933071 159.109821 0 ] (cb5-5) [ 53 0 R /XYZ 99.933071 140.162799 0 ] (cb6) [ 67 0 R /XYZ 84.259843 749.870079 0 ] (cb6-1) [ 67 0 R /XYZ 101.433071 748.173057 0 ] (cb6-2) [ 67 0 R /XYZ 99.933071 729.226036 0 ] (cb6-3) [ 67 0 R /XYZ 99.933071 710.279014 0 ] (cb6-4) [ 67 0 R /XYZ 99.933071 672.384971 0 ] (cb6-5) [ 67 0 R /XYZ 99.933071 634.490928 0 ] (cb7) [ 77 0 R /XYZ 84.259843 716.781496 0 ] (cb7-1) [ 77 0 R /XYZ 101.433071 715.084475 0 ] (cb7-10) [ 77 0 R /XYZ 99.933071 544.561281 0 ] (cb7-11) [ 77 0 R /XYZ 99.933071 525.614260 0 ] (cb7-12) [ 77 0 R /XYZ 99.933071 506.667238 0 ] (cb7-13) [ 77 0 R /XYZ 99.933071 487.720217 0 ] (cb7-14) [ 77 0 R /XYZ 99.933071 468.773195 0 ] (cb7-2) [ 77 0 R /XYZ 99.933071 696.137453 0 ] (cb7-3) [ 77 0 R /XYZ 99.933071 677.190432 0 ] (cb7-4) [ 77 0 R /XYZ 99.933071 658.243410 0 ] (cb7-5) [ 77 0 R /XYZ 99.933071 639.296389 0 ] (cb7-6) [ 77 0 R /XYZ 99.933071 620.349367 0 ] (cb7-7) [ 77 0 R /XYZ 99.933071 601.402346 0 ] (cb7-8) [ 77 0 R /XYZ 99.933071 582.455324 0 ] (cb7-9) [ 77 0 R /XYZ 99.933071 563.508303 0 ] (cb8) [ 77 0 R /XYZ 84.259843 372.023195 0 ] (cb8-1) [ 77 0 R /XYZ 101.433071 370.326174 0 ] (cb8-2) [ 77 0 R /XYZ 99.933071 351.379152 0 ] (cb8-3) [ 77 0 R /XYZ 99.933071 332.432131 0 ] (cb8-4) [ 77 0 R /XYZ 99.933071 294.538088 0 ] (cb8-5) [ 77 0 R /XYZ 99.933071 275.591066 0 ] (cb9) [ 99 0 R /XYZ 84.259843 652.281496 0 ] (cb9-1) [ 99 0 R /XYZ 101.433071 650.584475 0 ] (cb9-10) [ 99 0 R /XYZ 99.933071 423.220217 0 ] (cb9-100) [ 194 0 R /XYZ 99.933071 590.755821 0 ] (cb9-101) [ 194 0 R /XYZ 99.933071 571.808799 0 ] (cb9-102) [ 194 0 R /XYZ 99.933071 552.861778 0 ] (cb9-103) [ 194 0 R /XYZ 99.933071 533.914756 0 ] (cb9-104) [ 194 0 R /XYZ 99.933071 514.967735 0 ] (cb9-105) [ 194 0 R /XYZ 99.933071 496.020714 0 ] (cb9-106) [ 194 0 R /XYZ 99.933071 477.073692 0 ] (cb9-107) [ 194 0 R /XYZ 99.933071 458.126671 0 ] (cb9-108) [ 194 0 R /XYZ 99.933071 439.179649 0 ] (cb9-109) [ 194 0 R /XYZ 99.933071 420.232628 0 ] (cb9-11) [ 99 0 R /XYZ 99.933071 404.273195 0 ] (cb9-110) [ 194 0 R /XYZ 99.933071 401.285606 0 ] (cb9-111) [ 194 0 R /XYZ 99.933071 344.444542 0 ] (cb9-112) [ 194 0 R /XYZ 99.933071 325.497520 0 ] (cb9-113) [ 194 0 R /XYZ 99.933071 306.550499 0 ] (cb9-114) [ 194 0 R /XYZ 99.933071 287.603477 0 ] (cb9-115) [ 194 0 R /XYZ 99.933071 268.656456 0 ] (cb9-116) [ 194 0 R /XYZ 99.933071 249.709434 0 ] (cb9-117) [ 194 0 R /XYZ 99.933071 230.762413 0 ] (cb9-118) [ 194 0 R /XYZ 99.933071 211.815391 0 ] (cb9-119) [ 194 0 R /XYZ 99.933071 192.868370 0 ] (cb9-12) [ 99 0 R /XYZ 99.933071 385.326174 0 ] (cb9-120) [ 194 0 R /XYZ 99.933071 173.921348 0 ] (cb9-121) [ 194 0 R /XYZ 99.933071 154.974327 0 ] (cb9-122) [ 194 0 R /XYZ 99.933071 136.027305 0 ] (cb9-123) [ 194 0 R /XYZ 99.933071 117.080284 0 ] (cb9-124) [ 194 0 R /XYZ 99.933071 98.133262 0 ] (cb9-125) [ 232 0 R /XYZ 99.933071 799.173057 0 ] (cb9-126) [ 232 0 R /XYZ 99.933071 780.226036 0 ] (cb9-127) [ 232 0 R /XYZ 99.933071 761.279014 0 ] (cb9-128) [ 232 0 R /XYZ 99.933071 742.331993 0 ] (cb9-129) [ 232 0 R /XYZ 99.933071 704.437950 0 ] (cb9-13) [ 99 0 R /XYZ 99.933071 366.379152 0 ] (cb9-130) [ 232 0 R /XYZ 99.933071 685.490928 0 ] (cb9-131) [ 232 0 R /XYZ 99.933071 666.543907 0 ] (cb9-132) [ 232 0 R /XYZ 99.933071 647.596885 0 ] (cb9-133) [ 232 0 R /XYZ 99.933071 628.649864 0 ] (cb9-134) [ 232 0 R /XYZ 99.933071 609.702842 0 ] (cb9-135) [ 232 0 R /XYZ 99.933071 590.755821 0 ] (cb9-136) [ 232 0 R /XYZ 99.933071 571.808799 0 ] (cb9-137) [ 232 0 R /XYZ 99.933071 552.861778 0 ] (cb9-138) [ 232 0 R /XYZ 99.933071 533.914756 0 ] (cb9-139) [ 232 0 R /XYZ 99.933071 514.967735 0 ] (cb9-14) [ 99 0 R /XYZ 99.933071 347.432131 0 ] (cb9-140) [ 232 0 R /XYZ 99.933071 477.073692 0 ] (cb9-141) [ 232 0 R /XYZ 99.933071 458.126671 0 ] (cb9-142) [ 232 0 R /XYZ 99.933071 439.179649 0 ] (cb9-143) [ 232 0 R /XYZ 99.933071 420.232628 0 ] (cb9-144) [ 232 0 R /XYZ 99.933071 401.285606 0 ] (cb9-145) [ 232 0 R /XYZ 99.933071 382.338585 0 ] (cb9-146) [ 232 0 R /XYZ 99.933071 363.391563 0 ] (cb9-147) [ 232 0 R /XYZ 99.933071 344.444542 0 ] (cb9-148) [ 232 0 R /XYZ 99.933071 325.497520 0 ] (cb9-149) [ 232 0 R /XYZ 99.933071 306.550499 0 ] (cb9-15) [ 99 0 R /XYZ 99.933071 328.485109 0 ] (cb9-150) [ 232 0 R /XYZ 99.933071 287.603477 0 ] (cb9-151) [ 232 0 R /XYZ 99.933071 268.656456 0 ] (cb9-152) [ 232 0 R /XYZ 99.933071 249.709434 0 ] (cb9-153) [ 232 0 R /XYZ 99.933071 230.762413 0 ] (cb9-154) [ 232 0 R /XYZ 99.933071 211.815391 0 ] (cb9-155) [ 232 0 R /XYZ 99.933071 192.868370 0 ] (cb9-156) [ 232 0 R /XYZ 99.933071 173.921348 0 ] (cb9-157) [ 232 0 R /XYZ 99.933071 154.974327 0 ] (cb9-158) [ 232 0 R /XYZ 99.933071 136.027305 0 ] (cb9-159) [ 232 0 R /XYZ 99.933071 117.080284 0 ] (cb9-16) [ 99 0 R /XYZ 99.933071 309.538088 0 ] (cb9-160) [ 232 0 R /XYZ 99.933071 98.133262 0 ] (cb9-161) [ 270 0 R /XYZ 99.933071 799.173057 0 ] (cb9-162) [ 270 0 R /XYZ 99.933071 780.226036 0 ] (cb9-163) [ 270 0 R /XYZ 99.933071 761.279014 0 ] (cb9-164) [ 270 0 R /XYZ 99.933071 742.331993 0 ] (cb9-165) [ 270 0 R /XYZ 99.933071 723.384971 0 ] (cb9-166) [ 270 0 R /XYZ 99.933071 704.437950 0 ] (cb9-167) [ 270 0 R /XYZ 99.933071 685.490928 0 ] (cb9-168) [ 270 0 R /XYZ 99.933071 666.543907 0 ] (cb9-169) [ 270 0 R /XYZ 99.933071 647.596885 0 ] (cb9-17) [ 99 0 R /XYZ 99.933071 290.591066 0 ] (cb9-170) [ 270 0 R /XYZ 99.933071 628.649864 0 ] (cb9-171) [ 270 0 R /XYZ 99.933071 609.702842 0 ] (cb9-172) [ 270 0 R /XYZ 99.933071 590.755821 0 ] (cb9-173) [ 270 0 R /XYZ 99.933071 571.808799 0 ] (cb9-174) [ 270 0 R /XYZ 99.933071 552.861778 0 ] (cb9-175) [ 270 0 R /XYZ 99.933071 533.914756 0 ] (cb9-176) [ 270 0 R /XYZ 99.933071 514.967735 0 ] (cb9-177) [ 270 0 R /XYZ 99.933071 496.020714 0 ] (cb9-178) [ 270 0 R /XYZ 99.933071 477.073692 0 ] (cb9-179) [ 270 0 R /XYZ 99.933071 458.126671 0 ] (cb9-18) [ 99 0 R /XYZ 99.933071 271.644045 0 ] (cb9-180) [ 270 0 R /XYZ 99.933071 439.179649 0 ] (cb9-181) [ 270 0 R /XYZ 99.933071 420.232628 0 ] (cb9-182) [ 270 0 R /XYZ 99.933071 401.285606 0 ] (cb9-183) [ 270 0 R /XYZ 99.933071 382.338585 0 ] (cb9-184) [ 270 0 R /XYZ 99.933071 363.391563 0 ] (cb9-185) [ 270 0 R /XYZ 99.933071 344.444542 0 ] (cb9-186) [ 270 0 R /XYZ 99.933071 325.497520 0 ] (cb9-187) [ 270 0 R /XYZ 99.933071 306.550499 0 ] (cb9-188) [ 270 0 R /XYZ 99.933071 287.603477 0 ] (cb9-189) [ 270 0 R /XYZ 99.933071 268.656456 0 ] (cb9-19) [ 99 0 R /XYZ 99.933071 252.697023 0 ] (cb9-190) [ 270 0 R /XYZ 99.933071 249.709434 0 ] (cb9-191) [ 270 0 R /XYZ 99.933071 230.762413 0 ] (cb9-192) [ 270 0 R /XYZ 99.933071 211.815391 0 ] (cb9-193) [ 270 0 R /XYZ 99.933071 192.868370 0 ] (cb9-194) [ 270 0 R /XYZ 99.933071 173.921348 0 ] (cb9-195) [ 270 0 R /XYZ 99.933071 154.974327 0 ] (cb9-196) [ 270 0 R /XYZ 99.933071 136.027305 0 ] (cb9-197) [ 270 0 R /XYZ 99.933071 117.080284 0 ] (cb9-198) [ 270 0 R /XYZ 99.933071 98.133262 0 ] (cb9-199) [ 310 0 R /XYZ 99.933071 799.173057 0 ] (cb9-2) [ 99 0 R /XYZ 99.933071 612.690432 0 ] (cb9-20) [ 99 0 R /XYZ 99.933071 233.750002 0 ] (cb9-200) [ 310 0 R /XYZ 99.933071 780.226036 0 ] (cb9-201) [ 310 0 R /XYZ 99.933071 761.279014 0 ] (cb9-202) [ 310 0 R /XYZ 99.933071 742.331993 0 ] (cb9-203) [ 310 0 R /XYZ 99.933071 723.384971 0 ] (cb9-204) [ 310 0 R /XYZ 99.933071 704.437950 0 ] (cb9-205) [ 310 0 R /XYZ 99.933071 685.490928 0 ] (cb9-206) [ 310 0 R /XYZ 99.933071 666.543907 0 ] (cb9-207) [ 310 0 R /XYZ 99.933071 647.596885 0 ] (cb9-208) [ 310 0 R /XYZ 99.933071 628.649864 0 ] (cb9-209) [ 310 0 R /XYZ 99.933071 609.702842 0 ] (cb9-21) [ 99 0 R /XYZ 99.933071 214.802980 0 ] (cb9-210) [ 310 0 R /XYZ 99.933071 590.755821 0 ] (cb9-211) [ 310 0 R /XYZ 99.933071 571.808799 0 ] (cb9-212) [ 310 0 R /XYZ 99.933071 552.861778 0 ] (cb9-213) [ 310 0 R /XYZ 99.933071 533.914756 0 ] (cb9-214) [ 310 0 R /XYZ 99.933071 514.967735 0 ] (cb9-215) [ 310 0 R /XYZ 99.933071 496.020714 0 ] (cb9-216) [ 310 0 R /XYZ 99.933071 477.073692 0 ] (cb9-217) [ 310 0 R /XYZ 99.933071 458.126671 0 ] (cb9-218) [ 310 0 R /XYZ 99.933071 439.179649 0 ] (cb9-219) [ 310 0 R /XYZ 99.933071 420.232628 0 ] (cb9-22) [ 99 0 R /XYZ 99.933071 195.855959 0 ] (cb9-220) [ 310 0 R /XYZ 99.933071 401.285606 0 ] (cb9-221) [ 310 0 R /XYZ 99.933071 382.338585 0 ] (cb9-222) [ 310 0 R /XYZ 99.933071 363.391563 0 ] (cb9-223) [ 310 0 R /XYZ 99.933071 344.444542 0 ] (cb9-224) [ 310 0 R /XYZ 99.933071 325.497520 0 ] (cb9-225) [ 310 0 R /XYZ 99.933071 306.550499 0 ] (cb9-226) [ 310 0 R /XYZ 99.933071 287.603477 0 ] (cb9-227) [ 310 0 R /XYZ 99.933071 268.656456 0 ] (cb9-228) [ 310 0 R /XYZ 99.933071 249.709434 0 ] (cb9-229) [ 310 0 R /XYZ 99.933071 230.762413 0 ] (cb9-23) [ 99 0 R /XYZ 99.933071 176.908937 0 ] (cb9-230) [ 310 0 R /XYZ 99.933071 211.815391 0 ] (cb9-231) [ 310 0 R /XYZ 99.933071 192.868370 0 ] (cb9-232) [ 310 0 R /XYZ 99.933071 173.921348 0 ] (cb9-233) [ 310 0 R /XYZ 99.933071 154.974327 0 ] (cb9-234) [ 310 0 R /XYZ 99.933071 136.027305 0 ] (cb9-235) [ 310 0 R /XYZ 99.933071 117.080284 0 ] (cb9-236) [ 310 0 R /XYZ 99.933071 98.133262 0 ] (cb9-237) [ 350 0 R /XYZ 99.933071 799.173057 0 ] (cb9-238) [ 350 0 R /XYZ 99.933071 780.226036 0 ] (cb9-239) [ 350 0 R /XYZ 99.933071 761.279014 0 ] (cb9-24) [ 99 0 R /XYZ 99.933071 157.961916 0 ] (cb9-240) [ 350 0 R /XYZ 99.933071 742.331993 0 ] (cb9-241) [ 350 0 R /XYZ 99.933071 723.384971 0 ] (cb9-242) [ 350 0 R /XYZ 99.933071 704.437950 0 ] (cb9-243) [ 350 0 R /XYZ 99.933071 685.490928 0 ] (cb9-244) [ 350 0 R /XYZ 99.933071 666.543907 0 ] (cb9-245) [ 350 0 R /XYZ 99.933071 647.596885 0 ] (cb9-246) [ 350 0 R /XYZ 99.933071 628.649864 0 ] (cb9-247) [ 350 0 R /XYZ 99.933071 609.702842 0 ] (cb9-248) [ 350 0 R /XYZ 99.933071 590.755821 0 ] (cb9-249) [ 350 0 R /XYZ 99.933071 571.808799 0 ] (cb9-25) [ 99 0 R /XYZ 99.933071 139.014895 0 ] (cb9-250) [ 350 0 R /XYZ 99.933071 552.861778 0 ] (cb9-251) [ 350 0 R /XYZ 99.933071 533.914756 0 ] (cb9-252) [ 350 0 R /XYZ 99.933071 514.967735 0 ] (cb9-253) [ 350 0 R /XYZ 99.933071 496.020714 0 ] (cb9-254) [ 350 0 R /XYZ 99.933071 477.073692 0 ] (cb9-255) [ 350 0 R /XYZ 99.933071 458.126671 0 ] (cb9-256) [ 350 0 R /XYZ 99.933071 439.179649 0 ] (cb9-257) [ 350 0 R /XYZ 99.933071 420.232628 0 ] (cb9-258) [ 350 0 R /XYZ 99.933071 401.285606 0 ] (cb9-259) [ 350 0 R /XYZ 99.933071 382.338585 0 ] (cb9-26) [ 99 0 R /XYZ 99.933071 120.067873 0 ] (cb9-260) [ 350 0 R /XYZ 99.933071 363.391563 0 ] (cb9-261) [ 350 0 R /XYZ 99.933071 344.444542 0 ] (cb9-262) [ 350 0 R /XYZ 99.933071 325.497520 0 ] (cb9-263) [ 350 0 R /XYZ 99.933071 306.550499 0 ] (cb9-264) [ 350 0 R /XYZ 99.933071 287.603477 0 ] (cb9-265) [ 350 0 R /XYZ 99.933071 268.656456 0 ] (cb9-266) [ 350 0 R /XYZ 99.933071 249.709434 0 ] (cb9-267) [ 350 0 R /XYZ 99.933071 230.762413 0 ] (cb9-268) [ 350 0 R /XYZ 99.933071 211.815391 0 ] (cb9-269) [ 350 0 R /XYZ 99.933071 192.868370 0 ] (cb9-27) [ 99 0 R /XYZ 99.933071 101.120852 0 ] (cb9-270) [ 350 0 R /XYZ 99.933071 173.921348 0 ] (cb9-271) [ 350 0 R /XYZ 99.933071 154.974327 0 ] (cb9-272) [ 350 0 R /XYZ 99.933071 136.027305 0 ] (cb9-273) [ 350 0 R /XYZ 99.933071 117.080284 0 ] (cb9-274) [ 350 0 R /XYZ 99.933071 98.133262 0 ] (cb9-275) [ 390 0 R /XYZ 99.933071 799.173057 0 ] (cb9-276) [ 390 0 R /XYZ 99.933071 780.226036 0 ] (cb9-277) [ 390 0 R /XYZ 99.933071 761.279014 0 ] (cb9-278) [ 390 0 R /XYZ 99.933071 742.331993 0 ] (cb9-279) [ 390 0 R /XYZ 99.933071 723.384971 0 ] (cb9-28) [ 129 0 R /XYZ 99.933071 799.173057 0 ] (cb9-280) [ 390 0 R /XYZ 99.933071 704.437950 0 ] (cb9-281) [ 390 0 R /XYZ 99.933071 685.490928 0 ] (cb9-282) [ 390 0 R /XYZ 99.933071 666.543907 0 ] (cb9-283) [ 390 0 R /XYZ 99.933071 647.596885 0 ] (cb9-284) [ 390 0 R /XYZ 99.933071 628.649864 0 ] (cb9-285) [ 390 0 R /XYZ 99.933071 609.702842 0 ] (cb9-286) [ 390 0 R /XYZ 99.933071 590.755821 0 ] (cb9-287) [ 390 0 R /XYZ 99.933071 571.808799 0 ] (cb9-288) [ 390 0 R /XYZ 99.933071 552.861778 0 ] (cb9-29) [ 129 0 R /XYZ 99.933071 780.226036 0 ] (cb9-3) [ 99 0 R /XYZ 99.933071 574.796389 0 ] (cb9-30) [ 129 0 R /XYZ 99.933071 761.279014 0 ] (cb9-31) [ 129 0 R /XYZ 99.933071 742.331993 0 ] (cb9-32) [ 129 0 R /XYZ 99.933071 723.384971 0 ] (cb9-33) [ 129 0 R /XYZ 99.933071 704.437950 0 ] (cb9-34) [ 129 0 R /XYZ 99.933071 685.490928 0 ] (cb9-35) [ 129 0 R /XYZ 99.933071 666.543907 0 ] (cb9-36) [ 129 0 R /XYZ 99.933071 647.596885 0 ] (cb9-37) [ 129 0 R /XYZ 99.933071 628.649864 0 ] (cb9-38) [ 129 0 R /XYZ 99.933071 609.702842 0 ] (cb9-39) [ 129 0 R /XYZ 99.933071 590.755821 0 ] (cb9-4) [ 99 0 R /XYZ 99.933071 555.849367 0 ] (cb9-40) [ 129 0 R /XYZ 99.933071 571.808799 0 ] (cb9-41) [ 129 0 R /XYZ 99.933071 552.861778 0 ] (cb9-42) [ 129 0 R /XYZ 99.933071 533.914756 0 ] (cb9-43) [ 129 0 R /XYZ 99.933071 514.967735 0 ] (cb9-44) [ 129 0 R /XYZ 99.933071 496.020714 0 ] (cb9-45) [ 129 0 R /XYZ 99.933071 477.073692 0 ] (cb9-46) [ 129 0 R /XYZ 99.933071 458.126671 0 ] (cb9-47) [ 129 0 R /XYZ 99.933071 439.179649 0 ] (cb9-48) [ 129 0 R /XYZ 99.933071 420.232628 0 ] (cb9-49) [ 129 0 R /XYZ 99.933071 401.285606 0 ] (cb9-5) [ 99 0 R /XYZ 99.933071 536.902346 0 ] (cb9-50) [ 129 0 R /XYZ 99.933071 382.338585 0 ] (cb9-51) [ 129 0 R /XYZ 99.933071 363.391563 0 ] (cb9-52) [ 129 0 R /XYZ 99.933071 344.444542 0 ] (cb9-53) [ 129 0 R /XYZ 99.933071 325.497520 0 ] (cb9-54) [ 129 0 R /XYZ 99.933071 306.550499 0 ] (cb9-55) [ 129 0 R /XYZ 99.933071 287.603477 0 ] (cb9-56) [ 129 0 R /XYZ 99.933071 173.921348 0 ] (cb9-57) [ 129 0 R /XYZ 99.933071 154.974327 0 ] (cb9-58) [ 129 0 R /XYZ 99.933071 136.027305 0 ] (cb9-59) [ 129 0 R /XYZ 99.933071 117.080284 0 ] (cb9-6) [ 99 0 R /XYZ 99.933071 499.008303 0 ] (cb9-60) [ 129 0 R /XYZ 99.933071 98.133262 0 ] (cb9-61) [ 164 0 R /XYZ 99.933071 799.173057 0 ] (cb9-62) [ 164 0 R /XYZ 99.933071 780.226036 0 ] (cb9-63) [ 164 0 R /XYZ 99.933071 761.279014 0 ] (cb9-64) [ 164 0 R /XYZ 99.933071 742.331993 0 ] (cb9-65) [ 164 0 R /XYZ 99.933071 723.384971 0 ] (cb9-66) [ 164 0 R /XYZ 99.933071 704.437950 0 ] (cb9-67) [ 164 0 R /XYZ 99.933071 685.490928 0 ] (cb9-68) [ 164 0 R /XYZ 99.933071 571.808799 0 ] (cb9-69) [ 164 0 R /XYZ 99.933071 552.861778 0 ] (cb9-7) [ 99 0 R /XYZ 99.933071 480.061281 0 ] (cb9-70) [ 164 0 R /XYZ 99.933071 533.914756 0 ] (cb9-71) [ 164 0 R /XYZ 99.933071 514.967735 0 ] (cb9-72) [ 164 0 R /XYZ 99.933071 496.020714 0 ] (cb9-73) [ 164 0 R /XYZ 99.933071 477.073692 0 ] (cb9-74) [ 164 0 R /XYZ 99.933071 458.126671 0 ] (cb9-75) [ 164 0 R /XYZ 99.933071 439.179649 0 ] (cb9-76) [ 164 0 R /XYZ 99.933071 420.232628 0 ] (cb9-77) [ 164 0 R /XYZ 99.933071 401.285606 0 ] (cb9-78) [ 164 0 R /XYZ 99.933071 382.338585 0 ] (cb9-79) [ 164 0 R /XYZ 99.933071 363.391563 0 ] (cb9-8) [ 99 0 R /XYZ 99.933071 461.114260 0 ] (cb9-80) [ 164 0 R /XYZ 99.933071 249.709434 0 ] (cb9-81) [ 164 0 R /XYZ 99.933071 230.762413 0 ] (cb9-82) [ 164 0 R /XYZ 99.933071 211.815391 0 ] (cb9-83) [ 164 0 R /XYZ 99.933071 192.868370 0 ] (cb9-84) [ 164 0 R /XYZ 99.933071 173.921348 0 ] (cb9-85) [ 164 0 R /XYZ 99.933071 154.974327 0 ] (cb9-86) [ 164 0 R /XYZ 99.933071 136.027305 0 ] (cb9-87) [ 164 0 R /XYZ 99.933071 117.080284 0 ] (cb9-88) [ 164 0 R /XYZ 99.933071 98.133262 0 ] (cb9-89) [ 194 0 R /XYZ 99.933071 799.173057 0 ] (cb9-9) [ 99 0 R /XYZ 99.933071 442.167238 0 ] (cb9-90) [ 194 0 R /XYZ 99.933071 780.226036 0 ] (cb9-91) [ 194 0 R /XYZ 99.933071 761.279014 0 ] (cb9-92) [ 194 0 R /XYZ 99.933071 742.331993 0 ] (cb9-93) [ 194 0 R /XYZ 99.933071 723.384971 0 ] (cb9-94) [ 194 0 R /XYZ 99.933071 704.437950 0 ] (cb9-95) [ 194 0 R /XYZ 99.933071 685.490928 0 ] (cb9-96) [ 194 0 R /XYZ 99.933071 666.543907 0 ] (cb9-97) [ 194 0 R /XYZ 99.933071 647.596885 0 ] (cb9-98) [ 194 0 R /XYZ 99.933071 628.649864 0 ] (cb9-99) [ 194 0 R /XYZ 99.933071 609.702842 0 ] (configure-default-service-account) [ 53 0 R /XYZ 84.259843 561.590928 0 ] (configure-etcd-user-and-group) [ 45 0 R /XYZ 84.259843 283.686971 0 ] (configure-kernel-runtime-parameters) [ 45 0 R /XYZ 84.259843 539.222079 0 ] (configure-network-policy) [ 67 0 R /XYZ 84.259843 599.840928 0 ] (contentsbox) [ 8 0 R /XYZ 77.509843 756.850394 0 ] (create-etcd-user-and-group) [ 45 0 R /XYZ 84.259843 169.788971 0 ] (ensure-that-all-namespaces-have-network-policies-defined) [ 67 0 R /XYZ 84.259843 564.092928 0 ] (header_bottom_text) [ 6 0 R /XYZ 85.009843 422.718898 0 ] (known-issues) [ 45 0 R /XYZ 84.259843 799.370079 0 ] (overview) [ 30 0 R /XYZ 84.259843 272.631496 0 ] (reference-hardened-cloud-config-configuration) [ 534 0 R /XYZ 84.259843 537.158799 0 ] (reference-hardened-cloud-config-for-red-hat-enterprise-linux-8-rhel-8-and-ubuntu-20.04-lts) [ 557 0 R /XYZ 84.259843 511.863778 0 ] (reference-hardened-cloud-config-for-suse-linux-enterprise-server-15-sles-15-and-opensuse-leap-15) [ 534 0 R /XYZ 84.259843 397.010799 0 ] (reference-hardened-rke-cluster.yml-configuration) [ 77 0 R /XYZ 84.259843 191.441066 0 ] (reference-hardened-rke-template-configuration) [ 390 0 R /XYZ 84.259843 518.211778 0 ] (set-automountserviceaccounttoken-to-false-for-default-service-accounts) [ 53 0 R /XYZ 84.259843 522.092928 0 ] (title-block-header) [ 6 0 R /XYZ 84.259843 502.818898 0 ] ] +>> +>> +>> +endobj +4 0 obj +<< +/ExtGState << +/a1.0 << +/ca 1 +>> +/A1.0 << +/CA 1 +>> +>> +/XObject << +>> +/Pattern << +>> +/Shading << +>> +/Font 632 0 R +>> +endobj +5 0 obj +<< +/Filter /FlateDecode +/Length 2578 +>> +stream +xœµšËŽd· †÷õµ602%R^8 ;0â dad1.ø£'À8‹¼~~�*]ªëŸ‹ÇIº»DêñHÔGRUñ,x½Šøãƒ{«ÅΗ7§·' 5 ~Žw�CýwüÖ|Žb5äØŠçó›.ÐjË©–óó ^4÷îϧ|vú×ý5ñœBk%Å|þíÇ®2 Õk•LT *‰JT9‡ZS.DUbÀ#¶ÆT0#WKö¨ª0Úg¦‚–’•à µõQÕ`FªÑ˜ +fÄ–+QE�1‰P 3MDs(˜ôÂt)†â-5ª«ÐÅš˜N5”j1G¦k¡”’�é ¶ä&‘é2lÉÑL˜¶˜zeº[´¨PlI^•é*lI˜�Ft[à]Nu°EŠD¦krs3ªkЉWÔ%É!»ª0]Œ!Ã7•ê°£°H¥]‚-Er£:Ø’UÓ)l1¼˜œÈZÝÉnM}w«hdº [RªFu°‹Ï� +l‘Z°ƒBçc@ª5XKÆ �\ƒ¹9£@ò¬VeH-+­2¨DèRd P�-Ù +#�FØbعT[´c�&Ø‚Œª°%™2(hkðÆnMZd,PðÖ$Æpa¦0(ˆ«^Œ±@�\¸Rc,P0WÁNÆt±Ý+c�‚ºšKb,P`WÍ c�‚»jQ ÜUÅ•T[àÀŒ cÐèÊX`à®F©Œîb%Ƭj€ÆøJHîÂX`ànr1ÆwSE º°•±ÀÀÝ”ñ,rƒ»)Kb,0p7Y*Œp”þÍÀ] $ót¶°Œˆ÷Ð%e,ÀÍBBZÂX�ÁÝØþÈž­BôV 2¸ËGu-ÄŠ'û³b)�± ƒ»TÊX�Á]àÓ Àø€ˆš 2¸‘šéÀݘš0dpyCf,€;„ˆ€±ñ-D�ëR] ÒÜ 2¸ ,%ÆDá ’P] p¤ÈXAÊXPÀ]„÷ÆXPÀ]ɪŒÜCÚCu°E=1 ¯�Û–ìi$«AHÁtà®D¬0Ó�»"µ1p·‡MÆ‚R» 9c È‚cAq ­ÖÂXPš@‡”�êJ@;3T� YT[¬cëд9cAM°ESb,¨ ¶ e`,@FZDöMËØw¡õ�ÁdŠŒ YðfÆXPsA=†Yeº’‚WàšêºX jµ€P PKǦg,àCO— `tÑ jƒ-Ø*ŒEÁ2s¦‹°I6c2]èbd,ð[� 2xrT™E ¡QKbª™Î¤×™ÎXàVBO °MPi‚”T[€ ƬO/¶3cŠ›(s¨¶h6Æ÷ÔËMg,p‡-Ic|³×›•±  lAÆÇXФ„ž&3ãЉ0´è¨7“1`_özÓ š +êM”xdß6-½Þ¬ŒÍ`KFŠBu°IS#ûLB½ :1]�-©cA+¥×›ÎX€4õ&2zz$à½Þ¬ô¸ÜÍ db:p™ia,@õ&2[VÛ À›+ò3®ô^q:=1 7#¶Ò#{­*=3À·×HôÐf¢²ôBO V¡ŒB� üE>fL¸ž>íGTîP3½ö‡l؆ì~Ö«›¾£Ûõ|ì·ŸOŸ¿Fð=ÿüïÓOŸ'eãáüj¥Ö¥ŸóÀ‰\Îov¹�‚˜à~~†\?$ßîs;Qãeäã‡Ñ†2=c»´Ôb7š� †òî}§á§žß<<øã||ùt²«ôU_-ÔÑຠ©}F8OÈTÏOoNŸýç¿}ýÝ_±bO?�¾ÿÜñÁBŠäüE¬hc9Åm¬€]nÿ_÷œ}ñ?ûU>úuy~}ëÛe?Üú" $È´|ñÏóÓ7ï0Ïf\·'w‚ÁžˆqQƒ_ï•7›ÊuŒ~:qµÿ¼Žñ—'LÍÕ+àW‚*Ø‘½{Æ,'ëеüˆ.ÝÞÚ–KFÁÛ+wÉÛè}'Å—‹*_O„ Àúq0â È‹¬´/ÍÓWß}ûô[šÿDzÜúüo¦ûí©;U›ôIMýX[:hŸ¿vîYR‹czã1!ñüŽ+�Ãð·³×í|\zÉÜÓ¥ëáùÖ¸õ{, 6>"lÆž•\ϲä#`ç—blûÒÏ`Å@\úHqÞÞʼJËôBv9ExZ{ÙªÜÞ¶ysÍã-öIY×çqY�1H£Òhu_½L„¸²ÄGqzAõx÷ó`zk•i +’æ6…놶÷]7\~PU6a~Ê6Ü'öÄ^?Ì©+K8Mß§.nË?ú¦º-çû„—†Õ—Òg*í§PãVcv¥‡L7£Ú”æÑs.ˆÍu"¢Ë‰_ɸµa1§~[µžË_…>Éf¿6úÑåDûÝî–çJÕÙË×¥mÌü2e¹ºúœx";æè&­ý®m�ˆŽ·÷âÒW`¬5«å7éAx9!ï´ñó)WÒ;/VH®· u»ï»,YR䟷©ÂÖ²ž õ¿WTä)íä9Þ (—õjfµÖ }oNñý$íò2©cl¢ÕÕw›®XëôÙ}¾¢ éß¡;{Ï»“nS¶ÉkæuHMxÜ‹ãôº)îó3Y¹ e�á–8OW~¾/;óܪYæ`%nîžç}—¸Lv>ïâ:W<öÒtÚ;ï»ùü^ŽÀf/ÅÝõ} ²ÄIf´[ƒmÂe °Ä £Ï‡xìÖI§þqÛx»6‹¸—Ó/§#Ì%Í©õŒu*ª=;Šçÿ Ï7øýõdçoGj�ãI&-Òdë�x�dýs9ÿHqÿœnç¶Ù„É6ì/qôÕ7o˜q<¥�×¶.—öÑ3N‚Ʃ݅yÍá&NÓuSÔmfò{„—³8™?º6+`_›:Ãh/ +‡Uhì�ƒ¦/�®�|Þn‰VïºB:´–¶ ÑØoŠæ6`[–Ý™ÙrdN}·ßö¥Ð>ÖÖØÒˆÞÔ¥³f÷[Ùñ[¤Àº7ö[Ümwö£?y{ýáu¿™\ÆèÒ‰ö)}Þ¥óÁºt�Kõh–ûæŒ9zî�±y× Í{é¶÷t&9kk¬ÔÂî»�nR_—Ý:ä}P²»AG ˜¸€L†lÞ±›Êí²1-Ç;�¥:sŠ%ýeŸé¼¯ÊœÄ¼¯JyèÛï;"ÞÌ–t&@yw纞NVÏ™K:‘•ýê)µÕS‡ìql»{DÛóö¶ )+3•uY~èùIüû”½ClX¯ñ:N0¢¯Ã0êãÀD�ï7‰—†XÿˆªšoG¿ûš÷Ÿq<ždŒ3Ž}$,G0U©±S�›ð Eû°b»Õø¿¬ }¤ß7ï> +endobj +7 0 obj +<< +/Filter /FlateDecode +/Length 3519 +>> +stream +xœí�Mo$·†ïó+úl`Ûüþ‚òe¬ #6°À‚äÁ®�@ +àÍ!?Åž&ë­iRZ�$äÂ]k=ý»Š¬ª‡d·¦%½(úûNÓ?Éé5¥ƒ[ΧßOj�^ÑŸ­…8ØÞþ™¾ð¯ñnõ&zŸõªbŠN-'­ìj]p>¢~/uź°úÇoNÿ'iz™|2ôÒëU'­•Y|XC6YÛå˧¯h¡µZCù—ã‹/¿ž¾½£¾/¿þçôù›mè!š5+ïµYŒ‰kŒ:x· —¢HA´ õ2ÜÐtkX'óÍêûpù$“Ø žÄ:£€éƒ(ìÍ…Z}GmŽÏ'ÔCX-Û=±öH/÷ÖØ?VÏb<¬—à8JĵNj­Ù£PÚ6Ý ]±öÈ‘êÇ[ö“-òe‚¿Ö±d¨'ÊU‘3ÈèyÕ¦å¡z¤Dõò yÐ2Ú]ëXÒìQ¨"z��yP¦å¡zäHõã}&D³-–ã‹'åÑ< Уˆ:fb":�ˆ½uED±'rô¡3¢‰èDt"úFˆöQ|þFw„îDt":}µ�nŠ}DY—(fÓ_EQ? šì¦á$Ö%¢¬#\™tTÃ!ݿ梖ʷYi­Éµ5ôTQ  DA¸À£P=Ú6Ý ]±F”#Õ�·,iL¶ÈC”y¨À°.J&¯áˆ¨ÌƒäÁ`âQKtòÀªÌëQС¤Á£PEô F="Ê‘êÇûˆÂhèŽQÕ ™˜ˆND'¢Do¼ˆbÏåèCgDщèDô�í£øü�î݉èDt"új]ú«(ëE¯û«(ê׈Za7 '±.ár¹s KD“¯·W$¢ n�°G +¼?–«²4X—ˆ²Ž0&¸•ªGÛ¦`Ôyôè‘#Õ�·ì7&[ä!È£;Bw":�ˆ¾ÚF7„>¢¬K©Ø»«(êD©�î•ëQÖ®�:7‘À±@ÔSüà£á Ã-�æÑ+þà>÷TQ  DA¸À£PÚ6ݣΣGD9RýxË’Æd‹<™‡ + ë¢dÒꎈÊ<˜A@§i䀨W¹›‡<ÈC–yØ�J< +UäAò 1îˆ(Gªï +£y ;FQD21�ˆNDˆÞx-*=£�MD'¢Ñ7B´�âó7º#t'¢щè«mt�ﯢ¬K­ê¯¢¨_#êMè>J º@t„ˤÎM$p, ®ûH·p „=þà>ô/ô?ŽºD4¤Î�!ð(T‡¶M7À¨x0œ=r¤úñ–ýÆd‹£;Bw":�ˆ¾ÚF7ù>¢¬K³ê¯¢¨M��àIIüè)†u„+¥ÎM$p, Ævén�4�Áð÷¹ ŠÒ] +:À…jѶéõ†3¢©~¼eIc²E¼ÌC†uQ2±óH÷UÌ óp|¤;˜ÔÍCä!É<ìÀ€% …*ò y0bç‘nˆT?Þ/@Fó0@wŒ¢ˆ"db":�ˆ½ñZT *z.F:#šˆND'¢o„hÅçotGèND'¢ÑWÛè:×_EY—(ºÜ_EQ¿F48ÏNÄIâGO10¬#\.vn"�c‰h²ÝGºC‚[ ì1ñ÷¡©ÿqtÐ%¢)vn �G¡Z´mº:<Î9RýxË~c²EœÌC†uQ2±óH÷UÌ  ‡Î#Ý!¥nÒ Iæ¡"šàÖ—4{ªÈƒäAcŽ�tC¤úñ~ ¢<š‡ºcE!щèDô€è­×¢ˆ¨è¹}èŒh":�ˆ¾¢}Ÿ¿Ñ¡;�ˆND_´Ñýýtù]«øÖŸ>œtØakX‚7«K:$·¿]OG¯—§o?|÷Ó�¾[èàóéPJ‡?þsùðýé¯Èô×§;£¬_¬Þ44_d<Úr‡åµ�û‚ZÜå×ò �§›ŒG¬5‹»üœå¡ñ|ƒñ Ê–Züåg �ß=߸ k0Qg½„Ë“ÐCãî¶Þ;C'çô6;?–TO_V8èwõý“¯%þ¬uÉnÆßÿùïïú��› ”7ô¥é+*å¿ö;Ðk­ ¢ ¬O@d‹Ñ¼ôûëó~|÷˜a Ðu']µsGÇ»íbSYj÷ üéËk÷ùòžõ{û:P²Q~Es=×Ò—s»=Çïµ ø§b£_ivJá™ýn™U«ÉTJd|µÙh_6%^å¤\Iu)¿Õ~­ô;>Ô™;§’2W½øöãßÿí/ï9-mHÔ5dzE+(Y¤ÆÒàè_wm÷:Ý%„Û°‡KÕ�–áÇýøn¥ÙÛÛÇBê¬+sþÿ9¤²Ç�î²uÇ]ºRªÎ?Þ`ט­·áÚG/¼BÛh +Pýn?^Íý„XÌËÏ¡Íj.'·ŸSÞÿÄD­Ä¢öÕŸë‹÷´Aé¶b þ·¾áØzaÛÎ�<”¼V‰XM9K.;sÕóc‰„½$vBpRÑ%Eu2úüTÉ8×@ý´ùÚg¯džL¥ƒÉpk÷XzäBø¶é¡ÿj;Uf‰½ŒÇî Æ'Öá×ßÁ¯Iä,“aÛñÛêeǸØÐ +Ðã=Ø.?_Tû�tìØ~IÜöíGÝãDOmHä,y‡¶1{ÃòåÓé#]Ó~E“ÒgšWòS,é0«'“/-Ž�Ï»w½”¿ãý™Ü¯*Œ+ Ž´{îa2LÝyÿÿݲ=<[¨ ËÌ·µ-Ú/^s¾ÌØ[›¼ouÙ*îm®Ké—} +¨}ùtØRþ~ò‰Š•6„Uº§qYç�Ytù�'›¾xº¢*$Sã«·ˆèepêùa3\[•I¢ÐjšÚ¶cq°·¿ìoNTÁkØLš.¯H&gþZ¦ËÂ�©G™.ûÌWÊEÜ_ªfËé6CW�®Mm¹¾jiýªêúÞŒÛ6£_GSÎ÷õ4º|¡ôµiß”b½8îˆtfÐG¹Œ¾Ü>¹È”ŸV»…ÖjŸIdƒÛ²A>ñIY[¢?Š +ܱLìäÚÖ´—¹åœÄÖu �†ô×¶&B:Ï'rk¯Õû®jtÓL�®QM³Ð©ÜT_[¶„¸–§ŽTîEÄwªšv”Ìö>dͬiS-$×ÚåÚ®#�OÝv»5ß2[«Ä§æyî +—ºM-ðm‹Ñ®Ò4q‡å‚ÒÔ< Jj®U‚º1ñ|*óÎA¾?ùØiíy®P¾–Šì69)®Vcª¡"4«V®ÁË¿—©Â7µÌ<Û íZIÅ„G줰Ùd$ÔC›u\/ÚEn áÒ1¶šÅxé¤:íˤÛZ·ˆ Bz̵{e’j“‡”u«º&—)¬Æ§Í•(ªÚ rDzo¥|/dî§o¨R±WgAC¹ûf—åÐæÎ{”c˸® ‚×�5_Åó¶°¹k¹”~ªNX6ª­vì DîM +,ó4z¿É•Ö6;éœÛK†¬·âžO¿�¶eÎXorù^†¥š–7Jõò_jó=}ýëä–ë�ÓË:nT›-L›[…Œ+™1¶¦ðIÙ˜ÜĆ ˆÆÁ´Ï²NÜÖ×jhë¸10_;>]ñÄ^[ê6ƒêö.Šžc²i¥k´…ÈøGÄóUÛF楹áûrhëàÈ�ÕK+¨r€Ã¡ÃÄïY^’0IG¥)/éô.]Ðò‰åêŒÒ!8ÌÜ3ÑÍR�褅¾ôßa*lñ°�(‡–ßs¼Ì¢éªm£€&NÃÉN ÃN£Ó,úÓéôÍx½8ï{—C% ¨mjoê=ªm`Em^_µÛa�‡mͱK9¨ðr„š- ìÙ¶Éa4xkáÄÖ(¨‰OÛxtêª&œÖ…¢M¤©ª5‹±ö)ì§Õ°l#NÝ(Ŷ§`õ7Œ´Ç¬´ zÌJ8´-vëŠ×vK¶m€<–säÑ)nÙö’©£<»©Ž[Úª};é»®¶ ÃqGïLŸæ-ošÿna§û}‘^+q C§vëAÑBít´Æ.¹lwR4‡Ð@èªÙ%¸§ñìs¿Éq¼•Qor 'J]´[5ÕÛ  ÷ôF~ú 0µø`pZVÝ!=/�{8<Í¿EfW»»w»“Óc¹Tô99[6½y.ßü|Çìp»êçÿŒ9 +endstream +endobj +8 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 7 0 R +/Resources 4 0 R +/Annots [ 9 0 R 10 0 R 11 0 R 12 0 R 13 0 R 14 0 R 15 0 R 16 0 R 17 0 R 18 0 R 19 0 R 20 0 R 21 0 R 22 0 R 23 0 R 24 0 R 25 0 R 26 0 R 27 0 R 28 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +9 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 76.423228 671.061024 504.679134 638.361024 ] +/BS << +/W 0 +>> +/Dest (overview) +>> +endobj +10 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 489.361263 663.111024 496.429134 648.111024 ] +/BS << +/W 0 +>> +/Dest (overview) +>> +endobj +11 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 76.423228 626.361024 504.679134 593.661024 ] +/BS << +/W 0 +>> +/Dest (configure-kernel-runtime-parameters) +>> +endobj +12 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 488.881526 618.411024 496.429134 603.411024 ] +/BS << +/W 0 +>> +/Dest (configure-kernel-runtime-parameters) +>> +endobj +13 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 76.423228 581.661024 504.679134 548.961024 ] +/BS << +/W 0 +>> +/Dest (configure-etcd-user-and-group) +>> +endobj +14 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 146.805601 573.711024 177.256773 554.961024 ] +/BS << +/W 0 +>> +/Dest (configure-etcd-user-and-group) +>> +endobj +15 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 488.881526 573.711024 496.429134 558.711024 ] +/BS << +/W 0 +>> +/Dest (configure-etcd-user-and-group) +>> +endobj +16 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 76.423228 536.961024 504.679134 504.261024 ] +/BS << +/W 0 +>> +/Dest (configure-default-service-account) +>> +endobj +17 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 146.805601 529.011024 197.845152 510.261024 ] +/BS << +/W 0 +>> +/Dest (configure-default-service-account) +>> +endobj +18 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 488.893245 529.011024 496.429134 514.011024 ] +/BS << +/W 0 +>> +/Dest (configure-default-service-account) +>> +endobj +19 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 76.423228 492.261024 504.679134 459.561024 ] +/BS << +/W 0 +>> +/Dest (configure-network-policy) +>> +endobj +20 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 488.809749 484.311024 496.429134 469.311024 ] +/BS << +/W 0 +>> +/Dest (configure-network-policy) +>> +endobj +21 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 76.423228 447.561024 504.679134 414.861024 ] +/BS << +/W 0 +>> +/Dest (reference-hardened-rke-cluster.yml-configuration) +>> +endobj +22 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 234.738707 439.611024 313.229430 420.861024 ] +/BS << +/W 0 +>> +/Dest (reference-hardened-rke-cluster.yml-configuration) +>> +endobj +23 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 489.877620 439.611024 496.429134 424.611024 ] +/BS << +/W 0 +>> +/Dest (reference-hardened-rke-cluster.yml-configuration) +>> +endobj +24 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 76.423228 402.861024 504.679134 370.161024 ] +/BS << +/W 0 +>> +/Dest (reference-hardened-rke-template-configuration) +>> +endobj +25 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 484.970394 394.911024 496.429134 379.911024 ] +/BS << +/W 0 +>> +/Dest (reference-hardened-rke-template-configuration) +>> +endobj +26 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 76.423228 358.161024 504.679134 325.461024 ] +/BS << +/W 0 +>> +/Dest (reference-hardened-cloud-config-configuration) +>> +endobj +27 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 210.896178 350.211024 288.867613 335.211024 ] +/BS << +/W 0 +>> +/Dest (reference-hardened-cloud-config-configuration) +>> +endobj +28 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 481.993831 350.211024 496.429134 335.211024 ] +/BS << +/W 0 +>> +/Dest (reference-hardened-cloud-config-configuration) +>> +endobj +29 0 obj +<< +/Filter /FlateDecode +/Length 4947 +>> +stream +xœí]K�$¹q¾×¯¨³€Íå#ø6l/¼†�5ÀfJÛŒ#ü÷ýEV’ fFfUu÷¬°wÐ;�Ì`D§a�ìzÊQÃÜõd�†Üõwª<è‚Ö°è8y›½†ÜõÖ$ ¸‹2r ªò0jX€\™\ÎFÃîºlHÃ%@å¥ 5è5, à® 0A[¹�».§aw¹¨aeþµîB‚Þ@¬†XïÁs^Ã›Ú p×,JM­&›KÔ° wmFøT^™l‚Ç•º…—'cѰ w±Py pð™5,ÆOXQ�†¸k=Vj�ܵ® p}Cаé0Y4`}›¬Aꪼ2™’³†¸ Xr`žL’¨¼4!‘¬†ãÉ Õ° w±¼ "p×ï5,ˆÀ]Ch{TtñÙiX€¾<”­RÓhV'〸k,"¬ñ€»Æ¤¢aAîò²©aALLpYÃ(8¡ vÄLSI)jX‹-ŸÊ‹®ƒ†É€Y*ºP" ÐXOÅ—¬aArÐÅ;§aArÐ-ƒ†è¦bÑ}«Ûè‚tQ÷]Ð)jX$›r!Ò° …ˆý¼ªñ¢›r\«¼ žM¤D–b«aöRSFÑkX€Ÿ¸]Ò°j€gIÂT  JEÃ,ESvèÌ5ž….h²5,@§ žµd]Ð jX�]Æ.3 °Bc/ Wk<2¼ÏÌdŠ·Š L°ÓRª<è˜Ð°ñáÍvа›l6±ÍQyÐÅÒ° gÇÛͬaAÎÐŧar“÷›IÂb  :> Љ·ÉÆÁ3FÂb3ö›Ž4,@]ò~3kXP¼Á~[<¥n‹�¼ßL‚.-ŠÊƒ.hšŠR·À$ì7�N/BWHÂ#ï7³†h3°ßDG¯ dÞo&õ¸¸ +�IãwÑ™F p�ý&:[moo¼!¡?Ó™™wœY=10€Þ€µU=20À^¬VI=30_Þ#©‡P;ËÕS,«`Z£à/ú1Ú`ÂíôIQE¤Cš™YP„î¾í9ú0¿3ìv>ö×?�¾ÿ„Å÷ü§¿�^~3Ÿ”Õ? î)ÎkÔ],® Þ_Nh‰&®]o%ýzŠÄ[ÓYÏ:&…êêØËIÐzd`'çíu¤Gô3]ÌH¨£…~‚z‘öútBÓ¹¦£aì£ÛŒÕKÙ�.칎ôf½˜QxJ÷÷åôBÿu�Ô¹¡sti>S³–5š7q|Séñ·Xq–óLŽÿDh¦�²Û_†¤@N|s¡ìäBsÁ˜5«y�:wŸ[ê� v'�Ï8Z.,3r¼´\ˆ;¹Ç\@“·¢[lKÚè6ã@rÁïä‚ 7ëÅŒÂSº¿/ÿ_“¿’šTÁóë‰Ïc)Éæ3ö\U•/'”^#è×�^L§K9’>/º0ëù(ɻȟ� ¼uÑbÔwö†¹ÿúX·¬„vm®Ã²4˜…݇bîu Kõ¥œ�Yº0‹n¿…ànfé¢Å¨GÌZ¯xhãjvöñÑÖÖîë@—vH9ûtaØK¢‘ Sæ‹£^cŸÈ>={ -ý=º�s˜–挶lNGM$Œ¹±Ÿ³G$Á`Ï~>je9зöèª=ºÈWÛ#ô0j|ýºÏ;öèÂ`Cˆx6Öö‰¤âµ__Þ ô­}º°/]ä+ã5èaÔüâ¥çë{tax(ãõV]˜‚ïo�× ‡Þ_ ñÒóõŽ=º°|—ñz7|â5à¾Þ×îÑ·öéÂ|{¼=ôþbˆ—ž¯wìÑ…à»ñ&|ßî5ÿéãÉÆåi¸x%�-*¶Àü¸ÒÇ/§ï?þð¿ûøÃ/§?üÖŸŒ¡Ïø¹øÃ�ßA ã:dü€Lü·ÅOº� ünãB¹ÝÏ÷Íãâ8¦Òfya™ËßdÍ¿—Û˜yîO·9›<ºÍË÷¶1e™7,ן—qAè`Ùö&sGÿð_ç�?îøÉé(ö�´qöI^l¨z»›üYö2W¨|èC/Ëé÷ÌrKÕíö·Ç|îgüT[ãMFÈBv%VóØÐ}TÇó5Õ˜}ZtXb^ç|üy%Ÿ?éÀïÈYcËòw¼ýÍ|7Ë;ô«ÛøÕ-ú¥Å?5N2wR×¥ú¡úŽj¾-¹‚îã–ÏÕ¾´•5û¯ÆøEÌ_ó–z>VZó§ô=-¹—ÆœñÐ7´ö Ç~ž/ô84߬ê«�±›kµÖÂÏ�Û;×T­g£ÇÀÅdž¬kÒÕ˜ +zÓmˆÓ¡âÚ?¾ætŦŠ'l×å6·ù|Ó•uàñæÂùz›ç_“gþì\Af4S�<ëÎŽ×hhãã˜ù(­ñ­æ·ˆ­ÄI¹Tç™ýöi›ƒAóMÖc9ÇÐm1û¦ï6&Â9$�3×s�¥Ì‡#ÜzÙ©Ë%Ží÷U-¶<6fX“ª j]–žë³>+ßm⸉ϡ/âÚ5^2ï[Œ�ÖˆUž<Š"¯[O°Û +xW&² <Ñ ¼5¯¥¬j¿”s»;ëÙsžY;·kÃÍÏŽ6ÇÍq¦Šï¦õJ³íÔç9Zwçû|ÏëùÞº®Õ¼/£¾ÚÚ&{ ¯>‘SóØGÖ–—CŸÅµÏžŽzûÇ­.®?ظÒe_Ö¡¿‘³£�úñÁFŸM¬îúÿPþ[ô$ß·Ín£ç9ôÄœÒÇüÜû{άåè½ì¡óZÆCuQûfªsúxcï3>æá¿?÷úÙð.;<ö‰?ÔqãËumnäîµ°ïUò¿®ƒ³_kï*j\ö2m�H}MŸõYÖøÚ�{+®+Ð\¹�¯»Øúð>¹­Ë_—•ù?8}ÿ�Ën}ðÅü©µ³åüåøËE%˜b$ýÊ_f+%›pþŸÓïØþbèhÍ·J-’›ø{t>ŸaÕºÝÊouÍâëOÇ6K¹®Ûì†.Go�¤?m³�xÙìîí%s_/×õG/}- +r/téñ¯¹Ö0�Dn =È£þŠFø‹ÈOÅ缤¿É_üPòοÅ_Ûâh²É{—9öX`Ù8Iߨòuhø †ó™)nø)¿21"˜ö Ó+n¹÷lTI.P9·_¬òP”Á~€7O¾8~¸ÔL¨ÃlhŠP§¿E¤]òî³ùdÌOÿþã¿þó¿õÀ´„н�½`_ •a&Ïß"aÄ@Tø^r>’¤sTbL%–3ÌÅØÅfغÃo»Èõñ“é§<î8ëDÖy¹dJ9̺g*ˆ¿8ø‹U½‚:ýNyWËXh–<Ý« ‡nùVИMÕ­ZY’m�øðÆjâs½VMÅM¶øà£¤?_M…º˜Ãl“gAÃ-ÏÐi¹Ž¢šî÷-ƒ" y£à +ïdzð™ŠJﲆ{Ñ7Ï=b=“ù¹¯Óí|hñQ¸<\‰I¬Ëž0 ZL$éoòA9DM/Κd�¼þ¼Äí�áˆ3Šñìäaû‹DUô%>S!'é +É�©-ÌÖÐÍßãØBÑó÷üJ°È£o^9^ÍŽ«x[j‹ùò<6 Zˆ•žx“�}‘ô§±‰€kMÌÝ•þníî|F°“�Ãä"ÑãAøÛ1‡ùøD=&„õèüô›Õãr6»ì1çsCù¹bþ&~ Ob�êáLlJ’þ&¿ú_ȯÛë…½ž_^Qˆ_T èOÛ;ˆ9´·Á².³î|$¡zh“®;ê™ø­éM6 bmúu¯Ú€üt…¿ › +½Â¶2Âx»6)ñkq¬Cž¨Ùz|Bò�=8Ëvþ®‚W½ssÿóãoî§m¾„¢Ø>ó}š69úä3:Õ_ï÷¬Žˆ[õË/ð ÎãÏÓú³lü¹ûÜÍó9ñë|žæÈe³^<þÜÍ’So|žfG/*k½Vx:÷±ëç#’ˆ -ù%}J·ÉÜ5Ëgè¡tLžã-íUðfwM’kÀ šçûÔu•ëÃïC_ŵ¯êçNòy€úlAýüaýyñC¹û2Ö¢ì§7x7äêF~aONšþkÝúç ‹îÖ™5«}¹élÍqÏ+tK–›Ò¥/,¼GÎüíyA~ß"B—¥éÛ3*ñŒˆÄ%­_s;ÏÏ4<…ý�~öXŠð�çû +¿ÂHÒŸßç1Çþ±²¿·³~šŸzöüZ•åM�»ÛÆñÓÉ�ø?ÚaË÷áöµ˜ÝiÞïóÅo8±û{ML‡»»o8ññ1ð7œ¸ü�&¾sÈô '>ÞÁ+XÞ ’¤ù˜'ràG¿Ú«FÚùíÝ!wŽk7f¼4Óíêèv4�;Æ›}Ž€K‰ß££‚õƒ›Ô= V7$«…p|(èÑÅpkþç÷6ÙùÝ}†�êøå¾¨Ò‰Ï R9󻢲ñd«{k†ìÜ9çJÏ#sKÃ/Nä—fÍî—Ëø[~}9ÙBS¬%óMÍLή^tòõÄo´%…LÔO[î�™¸üjš,²íð¦Ò.'‹L+ë‘Èt³üÚOx|ÿü0TkøþPoã7 ‘iûó»vn+DÜí–ÌÖ›É.d~+pžür›*!V�AìIŽíû�wÉÖA [¢Óu²£ª�å·È5×ÅNlªK×Yþ:Ö%Î#âå„iýšzU©ü.Ò*ªzke¥y¡TiÔPG¶€P‹“Bºœâw¦Š&³ñEÔø�n7b®‰Dm\©ãÒ夎[¤…©ÔFå~k©žïªôT÷¹9^¡]Ä)hâל‹1¾þ:’#G Æš¿Hµ„ —n'^N�Z%vòõ’2:t¬0¡¦ž$z!·‘³éùÒ©)WW¡4+�?Éæÿß "4*#Ïü /‘¶ +�W}’ËI�G'Izl¨Cš,¥>V¸Ë¦ÔrVúËf£ŒgÐm£›Çªp™ §RÕc�jà1’m˺Ff«þiX)‰¦*ÁïßiäÐRù:�»ž¡•j0m²hEº‡&·“cÃΫ$§qËO75}›\‘ó•x™6Z“9õs�¤“�i«]ŸL»b…Nî0z�ɵZ:ñK×믽ȴ÷rúói^朎?ÚŽÞòûvewd±�3çñóß':ÿ®~]ö¶Ž;ÓÐÂ5lÈr%ã·³çÉü¶öJle#ˆŽìw²Í}l¨ÙÐÖqç^S¿Ýt`¯#mCPÛ¸’ºÙµÔuÖ Ï„âeåÅÖȼ56}Á¾]új¦áwh5­ø«ÊB\æÎó}I> ‘¸â¡}I—œ¸R(.Å„¥k6¨É )'i®gýI†Âó\âB´|é;�ú2+EWÚl…‚ØË )˜¬œ´ ú(J¿º¼Þ÷EåX+€© Úõ*©Í0¦6ÀÓ©~¾Œãe[sü™/jñv5Y^ÔžoMN/�ÞZÐp!sTPs¿mä¤Tiäu¡hpš©´&1U�âr[uËlqV½”ZOÑ©–ž2*͉AF%nƲܺâµnÉ·(ÈtNÝ:ÓG¶^2+´(ïnTê#}¥mç¦qîºÚž…Ô‰½35ý¶°ù*ü{Mí¨G”Ú¨áÃæþJÔÈ_zâG˜æåÆä�!Ä/*O”Å‘ÆÓ÷ŸqlO2ꇜÉòÙ£÷&Yþ÷Št®`”û !ªþ[FúmŨ&=çå§ÃÜöˆjþ+ðßr�Ó.oùß§ñÜôf~­~2;çËqsZõáP‡ +endstream +endobj +30 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 29 0 R +/Resources 4 0 R +/Annots [ 31 0 R 32 0 R 33 0 R 34 0 R 35 0 R 36 0 R 37 0 R 38 0 R 39 0 R 40 0 R 41 0 R 42 0 R 43 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +31 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 84.259843 445.281496 409.271317 430.281496 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (https://releases.rancher.com/documents/security/2.6/Rancher_v2-6_CIS_v1-6_Hardening_Guide.pdf) +>> +>> +endobj +32 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 107.173228 418.281496 162.214732 403.281496 ] +/BS << +/W 0 +>> +/Dest (overview) +>> +endobj +33 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 107.173228 403.281496 332.953990 388.281496 ] +/BS << +/W 0 +>> +/Dest (configure-kernel-runtime-parameters) +>> +endobj +34 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 107.173228 386.659914 295.486949 371.659914 ] +/BS << +/W 0 +>> +/Dest (configure-etcd-user-and-group) +>> +endobj +35 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 169.605601 388.281496 200.056773 369.531496 ] +/BS << +/W 0 +>> +/Dest (configure-etcd-user-and-group) +>> +endobj +36 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 107.173228 367.909914 319.724254 352.909914 ] +/BS << +/W 0 +>> +/Dest (configure-default-service-account) +>> +endobj +37 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 169.605601 369.531496 220.645152 350.781496 ] +/BS << +/W 0 +>> +/Dest (configure-default-service-account) +>> +endobj +38 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 107.173228 350.781496 255.796275 335.781496 ] +/BS << +/W 0 +>> +/Dest (configure-network-policy) +>> +endobj +39 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 107.173228 317.031496 400.593883 302.031496 ] +/BS << +/W 0 +>> +/Dest (reference-hardened-rke-template-configuration) +>> +endobj +40 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 107.173228 302.031496 397.449596 287.031496 ] +/BS << +/W 0 +>> +/Dest (reference-hardened-cloud-config-configuration) +>> +endobj +41 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 233.696178 302.031496 311.667613 287.031496 ] +/BS << +/W 0 +>> +/Dest (reference-hardened-cloud-config-configuration) +>> +endobj +42 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 293.575760 126.231496 442.798661 111.231496 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (file:///doc_tools/%7B%7B%3Cbaseurl%3E%7D%7D/rancher/v2.6/en/security/hardening-guides/1.6-benchmark-2.6/) +>> +>> +endobj +43 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 84.259843 111.231496 285.368241 96.231496 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (file:///doc_tools/%7B%7B%3Cbaseurl%3E%7D%7D/rancher/v2.6/en/security/hardening-guides/1.6-benchmark-2.6/) +>> +>> +endobj +44 0 obj +<< +/Filter /FlateDecode +/Length 5107 +>> +stream +xœÍ\Y¯%7~?¿â<#�㥼I DEbâar’ Bw�€þ>_u{©î®³Ý‰¸Éh2§Ëm»\Uþjiw»³ÅŸwÿ+äL)5':_>�þu²&G‹ÿ–;6Kóïñ7dz³”Mt5•xþÄ„�M®Ñçt~9á»KyûËéÏ?9ýsÛÇ�½©5yÏÿþŽ›(˜\r¶Qiªh².(M1šœ}LJSrK¬Uk1“§cSTKÔšÀy_”¦6eŽMløìHk®Æ¬49 >œ·Vm#–(x¥ÍE“ ô¤µygR©¾ªmm.{­-“2¹è´¶jRJ±hm^bµNk‹à%:"«µ� +%km ¼„¬Ú^|ÉAkËàÅC:Ui+àÖUÔ6ðb“uZ[ &ÖB¤¶U´Ù’˱ÍÛhb ÁjmΙÛ jv””²ÒæÁK²±ªmà%ëµ¶^´6àD ¹e·zÞÝÁ§µEðâ}&µ ¼@ùø^lN`Æ% |Άª' | † + |©†r ø ¥š5Ö¡Í; ‚/‘’†Á�ÂÎUÛÀK¨¤aAðà7hXxñ4,@[‚µhX·d«Ó° oɺ¤aAà‚M«aA→HÂȅ)U 07;5,]l÷¬aAꆘ¼†°¨$ p7�³p7ôTÛÀ X࣠® ¸œÍpÛÈkX­ØaÒ°¶b|)VÃîúbIÃîú  ¶eƒ=4, à®�X‚æ¹�»>Z¯aw=ù¤a Ŭ w!QÀ VÃø{´ù a3a‰†¸ë*ÜŸ²§�VÆ•š4,ˆÀ]W >µ­—!qeßBÊÆ¥T5,ˆÀ]8ª aAî>‹†Àx�ê5,ˆÀ]ੵ6à®óÕjX�»ˆ¢†0ãhXÿfœ…éªmÕØZІ¸ XòÀ [€$j[60$§aÀØXÄ¡$à.Ü{Õ° wm AÂܵ„°Gm/¡x ×  ÛVÙÓV�õ@ +­ ¸k4¬µw­ÍUÂÜe·©aAÊLðEÃ0h{ R!SsN¤jц�OmK×QÂlAˆ€,µ ¼P& X›jѰ {ð¼×° {ð‚�AÃD¦:Dßjz^`.j~@à‘¢†@2S*‘†9&äc�ªÖ–¼)p­¶´¹¬aAÎdàŠ�†È¥LÁ¦×°o8\Ò°l Í‘†¹‚l àŠLñˆÌµ6^dkX€HmÎiXPÀùž¿ÿÏéãO–JYÿã`ü�'Ö!°ÏS…¾�WffK† ]X‡¯êÄlä:ÙtÆVvc6áŒápëyüp[¦Á3síÎ,k£ÍÄH´’Îíó�~n�¢ÿÅûÌ­ØQ·|7/…H9¤�߯õüþÓé‹÷_þîë÷_b†÷Oý)¶Áw‡¿È'ã‡õ7"5ë/ø�Ú_ J…ÿìoç÷_�€lkUk…EqM•Aq�ñD<6’ç:&aú¦�³”4cy¬¹® Õa¬¥_ëÏc1�QŒIùïqÌÊ·ŠUÆä1Yå)`[ZD[Iã)åéÒxûÐÆû¸Ê’>¨òB4`%àò5~jÓElk m¼¼®wð×yž—¤ÎA%šN†®ó±ßR8�ÓÖÖ:x+SŸ¸aYÿ2ž[ùâõ/÷^¦-Ý´ÚÏåÓj¡ë™½)ÆÆþBœÙÆüFÈ!7¸f YØGYù\ø�þAØbãq¬�õw²çñb³¯Ë´½…¿ ÖšDŸØÆëö‘w|mæ¿)›tÐ_Ó;ÛWŸ7öõÇ)wêöØöo¿oáË6>Ü´-j÷¸&���bm�ê¡e!ÇÆs¤&Ï‹  ›–ò[î©MǹÛúVîëznʯp$αž×Õv=�ê æ9Æëtrk�Pï¢N;pWãYî…|�Çu¾_½‡»C¢Œ°mE“š�_Ý]`çì�KqÍßøÕé ù|ŸWyÈæ�çô²1¡z׃يôkï-]ì³®b—!fãw+Í/þüÛ¯~ýËßLw9Ì£›fs=‹øü®—ë4]V”æÑ¶Ç¦�€˜ÑÖÍÀ®÷-÷ˆ-Á÷t³ußµ�`�W=­©¼�·PÆn�û°`n¯�9HÃƒŽšj+?ÂÈŠ4kxºËÛƒC<ÝÙ ù–1H [„…ŽÜSŠGpOØDûùT¥ŒØ@îѸ<º 1%ìø¡SL‰œºGŸîóÆ{”˵QÓëÔ‚ýbE8ÔÝ€�®«Œ<çQÅ•xWe=ê¡p²[÷âDïÜ„Ä á:–ÜtñF(˜3BÙæ’í7««å0lq¹=l�drXž›]™çª‹&¼Jú_ž¾øy39nr°Êì�„~:¤Ñ0¡Z³¤¿ðyŽ +‹Šçÿžþx-_’‘½föºíX=œ¹™Ö||àžô0Bàù*ûchž)%'2ŠŒCºÄ^† ;W;…óù.ÝN�:Ä}¨J_ãß(öb—ÁgòÌÏxÙœ¼Sæ½·¯nùðM¨…Í&ÑŸÚujó´0+f«‡Ð=tiÍMT-Í<¤?2õåßß­tWÚ}ýþŽ%„àCN$dñ–Ý&µ« œ¾%7>JpL•¤��uŠôšnب ×Ç ¸åŸ„¼Ö˜ibóHÙEê>èUà£}^æÒÞü&ånýòäc¦j7år|è¥�Þ¾È?OÙoR©ž~ö¹>ÿ¸+ľ_¾¹nó½5}Þ/…£ï¥–ûéæ&þ ùIdL�)àË÷kÛ¦ŸcýÊ^ìãtØKs#?ñ„Rf’2;`÷ˆÕZ +»Á…?Å4ïYø°s�sO´yë6œ—¢@ŠÊøœ�/ÒsmÞ¹E‹ë¿[ëjmÂ}—v}šåöˆ`ôkícWÚ9N�>«ÈK|çr+J–#sYØïá*p­•,c/gŒ²€L1<Ÿ¸âc2ËA›ÔªÞüXØÄäZ†ñl—7N0|ìn䇀ðýŸ¾þ‹H0Z‚û&dá~¼›çðæKÉõ8¾pÞ6²;PàÕ7sÀ>–Ýn–}­k_{õ¼�[p�µ©8—å¸á…a–¸3LY'Öêdלó²D]Kã!C·ç|}Û »Ýá#_%SÎXe¶ÝÚùPïõüù>o»EÀéàw£ÉÃq^ˆ/­×ú¶YU¹äã¸Ç¡ÝqkeÍIP@âœ3`>±”¢ÓÓ}Þ¸ê$ž�º›èÃn}<•è¡Qµë•ù�wQÉ—Uðø0ï•Dy‘‚†ù’¬5! ç£á>®E½b–xFªäé>ÿ•PŸu•ɸt!~ùl÷ ‡PWÀpݯ÷Øa‰šD¬�ví�×Hi�|q�ŸcÄËðý×¶Xº/~ÇøÛ´�u½·ËËü{;ºb‰OEøñ:ÊüJ eîÁc}ÞÚ&¿¹€IW°k2‚*7Å^¦,JÞ˜’6 䎲¸Š›ˆ€Æ;öRµÏ�� í·¨:tC;(»TÃçòï�`UÉ †Tøµ¤¬«kµEIÓð°ø€ØóœŠçCûl–È"MI|ŠR€ýlŸ·~‚]¿{1=RÉX³Üåñh;ióùéÜ�·D›—·zƒ½g +‡²|¯~��'»ŠÝUnU1ø ‹”qÓ(Þ:]ól92#¤³…ø½ˆW—#§ônZ‹´õGãÒcŸãgÅ"·ÏÄ”þtg—¯íèkRÀBùõ0„û9U¥–-†nž¯JÜË[vøÚû+Ï5§:ø5»Q¶ïuúb7µúGjó‡üàÉnŽ(Ž�*dzäóÐâún8ò+7.ëñ„|¯òûEéûÐó¥ä¨=gTŸ‘Éãx‡ãš7õâëìóÙmxtv–Eis_ +dßÁÕ|_®=Ë=Êß…õ‚SøêrPdö[Ê!F¥ßÑ^Žýù½ h�´yûñDMç–7w*¤ÉñöGœÊóK˜Ú:îØ_ä÷l +Õ®ð¢í³^•åé�-‰>c¯-z¾iStÐÝ®œ,mC=AÀYKƒŽc]+é»ö,m‰í”#ì‘ß!ÏÙjüí÷S¼Sß<ƒ ;™ŠëQ•ÏÛ:ï›ãÀòqA:‘ÏÊ•çŽ\�Ç`ûó¿+Ï[…®ÒA¾7´cзöÿ•G)û§s݉?òÒ¿èEÐ7N\9ñó”³®&§�ãl—œk; ÒªíÌŠ³>nÆ�{¾º>Ïo +bàh÷³èîYw�·Ýß-•ׄ,µ¡ò ]ÉUß…/> ¹Û””9îÀ—��DJHj•¾¯—Ãt§3�9nçGŸnIè‰Iô¹çVXUûºÊ¬�©h[Ç­£O÷úIø–ëØËoûÄͳóƒ–sÍü>fá´Œ¿š„}ƒúÀíÙ.oü¼�_ûlìntq|ÞVZÆÍÉ+âþV„BÈî8¶ò8zƒõŠ/ý/G£¹ÿð t2B'¥ßñOÌÁ”hCÒæ½ÿÄZ×oÄÔ[óÆãF‹QÖ–ñFäJ@à7½ÛÇÃve‹k/ÉDýí¶\ÑÞR¼:ͽ3®òX¡}vâß·;ñ\ì(ÆÅaÅó=ѱ­îÞrg–1^Ð<»ÝË�ÛbȾ>2T3¿­¾åxím±NúÒ\…ÿè˜Úpm{œ³Ý£ÓôQÌÕ�´YÁËw;]óŸ´¼tï–¯Xªç/³�ù0˯žùEÿb‚þ&Þn!Wz.¶2íÈ®æcù«7üŃEüò¢Ý¿Ú×'DdR�p–ÏQÙ…\|¿˜ä—¿²F +¡«�ÌÄöÓŽ±È �ì´ËÉÁÒêþÎ�m?g}%Ìs>±¯†ûÇÞ�_G|ãûÛê:±BDÏäŽd^½5®‘ù“nÅ„v•+1užAœ’¼w8;Þ%óƒµIŒG¢ÓM²§Î�ãO€ Ñ¥I¬KÑ9¡þ~¯ÏB�·ˆ—¦ {ê‹JåIõ¡ºt•vZLÕA�ýΡzRH—“B|gûÐeŽv¡5ßcc*Ý�hÜWû} +érRïk£Å¡©<î*³kí’Ÿ¬LSe^¡]Dõ-ó7*ű¡ÿÜ’ùÕì¡kxúi7þ@¼œ"��8É/§˜•»ãÄ +»éIbãr±Ó^&ñL¶f§ñÇ øÿ+TÄAeäY~°‹t}y5'¹œy+$IOuH“qp*ÆÎyج”":å~Ýq÷�؆*D&èü¢Æ: ðؒݰºAfëòX)‰¶3�é&9S~Ù�'ŸqlÕhÇdÉ s�cÜIN;_$9�;þºÌàwŒ+l¾/‹c£=™M¿ôI&ÙÛáíæd‚8(Lò„Ñ—…Üwë@'þbfÿ97™æq/§¿Ÿ7çCôœr¤àøci2:rçÿ➯ð÷':ݿαúqoZø�­²ôd|¶Çª~¦_½½>[ï�åÔwS´ê‹¤Ž…1užN ËeÚ^Ÿ–óE}óN �±‚Ø{a9skÌЂ6ÒFµÌní†('¥NÛLÚÅ€ Ðl§�sç)µn],ËŠ‹*¥> +endobj +46 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 191.048717 658.622079 244.661998 643.622079 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (file:///doc_tools/%7B%7B%3Cbaseurl%3E%7D%7D/rancher/v2.6/en/admin-settings/pod-security-policies/) +>> +>> +endobj +47 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 439.875057 101.433071 421.125057 ] +/BS << +/W 0 +>> +/Dest (cb1-1) +>> +endobj +48 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 420.928036 99.933071 402.178036 ] +/BS << +/W 0 +>> +/Dest (cb1-2) +>> +endobj +49 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 401.981014 99.933071 383.231014 ] +/BS << +/W 0 +>> +/Dest (cb1-3) +>> +endobj +50 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 383.033993 99.933071 364.283993 ] +/BS << +/W 0 +>> +/Dest (cb1-4) +>> +endobj +51 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 364.086971 99.933071 345.336971 ] +/BS << +/W 0 +>> +/Dest (cb1-5) +>> +endobj +52 0 obj +<< +/Filter /FlateDecode +/Length 4930 +>> +stream +xœå]K�$9n¾ç¯Èó£•Dês0l/<Æ^ á]`àCO¹kF��Yü÷ýQzD33²»ÆÝ€»P•¤ ŠúHJŠhwµøùÎáOfgr.)òõå—˯kR°øWKl.*û�øMáê,'\‰9\%“Jð)^ß.ø³»œ‹¿]þô»Ëm븫7¥DïÂõoŸ„ÅdRNÉ…UÀ²ŽV&%¢ÂŠÎàKÑX#$ö|d%ˆÁ%�1Øû¬°2Ä NŽŽ¬1|r¬± †+!),g!‡óÖª<b™É+<L„Ò£ÆóÎÄ\|Qy <—¼Æ#21± Nãc Yã1d Å:� KpÌVãA¦œ4^„,ɪ<Èâs"�— ‹‡vŠÂË�Ö•Ud±Ñ:�WÈ„’™U^Ïæ”�X¯aw=û¨a Ŭ w!A VÃø{ð• ®ƒ†É‚Y*²pb X›B%kX�ÍKTæ�à3s’›,˜Œè¾ç£Ý(¶¬�ýí/—ß„ó½þå¿/¯¿«+eíÇÁø‰cM¬?Æâ Æxej{\W“Àc∄ðsꈩ !`q]t!áŠán˵q[‘!±ÈìÌÔ;ãM¿HÆŠ¢*ëÓuÞIÖ¡#/yj¶¥”YGÈëµá»S{¶Ò»kvîxhI•öùJï®Û'«IèbRøq š4Õž¬óîš�ûJÒd}ºÎ»ë5Ý€˜ p™Í^ î€SR{¶Ò»kvîx2?MÚç+½‡´GþûÄË^G¼ÎÖé�Gô·òá—Ëï?üá_üð´ùáõòÓßY‹IfÃÏød|"rD²hùu¡#_«×AÊ„õ»Ço\ëáwYËy©�ïáe­W–6k[ Á9-ô¼–Ë£�…÷ý¿_?ü0߃,;E¨3íîAÄ–êK³Çjˆt£ RøPͶ;z�AÝôªüñv�’’c—õ9®½æU«.š~Âʯ´0éþ £E„à"Lã�€–aÞvÉÛä¥É¦.C ÿøAlq9’„vâÄÂâÙd +Ö_$lÝ"Öÿd�Ï2ýÕâ¡X䘸eCÅKLŽ@ËäX‡iZ¯‹vú¥ClºJ»Q&ŇûñÏcR8h d1wÄã7u-õ‰·�o1¡,yehz;ßœ›. �k,áIÖ#¢,µQM§³#Ù¨üé:ÿ7JçÖ뢒~é(tye]þ¶Öe†U˜ñßçê_?ÛTIËuý\&À­N=2ïTl‰e×é2%—vœÝ~N3¼^÷rÝÖë¸~îÊq“·É÷ò —LP'4Åf/yÌýA?Wçkú�7"ãpˆ7¢:è}�ãN‰áéAw˜y¶ÈZè®Ó»ƒ¾öÛ�Î.¿]·ÔÚÎãË5a +‘49ÂC™dÕtRýêËT'ïŒ�'ÞþÞnÝSøþþÁsÀN2Ët:­ÙÖÛ—L©SSTŸZrž!Ö‚d©_eÙèþÔ:WçÛ™Z9Ô =´»åž·î p+÷óhƒ_·Ÿ½îÞ›i†‰×Ú Ãpš©ö2Ítý¶Ÿ~ýqª÷ÀgÏÉ1 ›ÐCuÚ”W/”Ö@9MAZjX® wä?á7«!¦‡;Š1æ]§Õ¶@Ñ-ÑY5õ�K�-�u¦×C›ä­‰TÏcÛ¬26­¬²å>¶Y`ÔÁ‹mÛ¼}ËY ®g tYxMný6r)M?÷bðzöÂcÂÞÐA�xÞ{Àeï异"C^ëGUŽ�Ä yØõ-9¦ ¾Zÿè¡—�/$�Eö@Ä÷Gñà¹*_¾z8èeûœa¼7"ƒ'¼_-{:$Üv\¡òÖ ˆs¤b¯QöŽ(nÜ„SU¾ö q4Ñ«W¡á÷‰°®(ƒ§]£?�Š�o·›ƒaË€"¥Ý[GrÔ Ó=/§ÿ’M–܃‘;Yç›:9:•ÐmwZw†îÉ¡ŒÙ Lám';~""?¶Ó†îÎŒõmÆkŸ‰Ã�“#päµúwƒ#ݤHvl%ô­‰÷9“:WçÛ1)†!''eC“Út2'�ŸaV‡¶ž2«Cí'ÍêØû³ÚÄ£e»XÕ/§è´ÆbÅ›kÑ©�SŠ·ÆÇsôæ”zŠxD’»Ö#âe‰#†xýR¼ðµä¼ïOÿòÃ?ýÃ?OË:i뫹´Lu—'¾N.â)UyL‡6Mâ) +Ú*gWom“?­õ�ºrzSgrü1r–ýëÝ]hCÙîà]ä) +À݇ +œö6–Pþ¹›¬gÂ�|æ&¥·ýžÅ—Y +¦n³ËtÿF×<·ÝpÛÀúzøí™PJÛ’Ùõ¨ŽêÛëÛ&7ì‰À�­9˜C‘‡Öi(™z½«0õé¦,oÍÖúVXXûlríÊTA÷4÷å÷Ø3úŸ§zkV_³ü&¯¶}lߢ«õ^G¹~¿á®y¯C‘¥h�÷¯+ðÒo—§Éœg_´Þ—z©+-y•ïeòeñ}t7먎M\ÛlþÒmu6Pæ¸ÚÓ¶D¥¬»»-â^otC³üͶºïÈòŒ- †“|6[(“mÛ­-Ï÷x°±ÖW³ñ—A«å_wmÝß»úË»ûÒ9´Îukv�8ÝÓ´ú×Ënzžúšu8éd¬„­}¬6XåšæNÛkuö2,vqOÑô§Éù:mGhg—¿9>3ŽÊêj˜æŸ²¢7ëðà?ª=7[Þ¯¬Nzm«¯MÕfß²bàÆ^nøšý|ú"Ýâ5Ý6ïË|WgÑuS¶rÎÇGÚ±”~¥Ýפǻóå®/[{vŠá6’ð}̰›ï 66àl?RÓ1|�<Ù…³_\ǹÑ?Ž o^��Á�ç’¼"ߣ¨m^5÷Þ8J¬¶sfµ>Ê.4‘59vþHL«êaõÝ'Ùã*zÌ&8’ ]®6�ï�_²ûú½ïéÞê÷0ì}»‹3Æc®[íòuàù£MÊNžF=ÊôĘQ”§o)¨í¼ &X»‰ ïÚé~¬ŽíÝñð‡ñ˜Ó©¼ÚÊ�uÝ$�OÛzÆŽl6©Dz´­{²Î×^„ëû" “°,­¨Çdªyl—Ó7§ìö/©ýã=ÿ' –ô­ói·GÓ·do*�$9 Y¸U©…=ÊÉ�:“(�@&'ì?2¹[‡³l„ÇàÒ['ë|3h+±=®°:@*;älóÿeBÆÇ(ç%è’ÇHó®ósÛ²¥”Qj÷“còôßTÄn}R.Æ*¹üÈ…ž¬óµuÈ›äM‰Ò úi¸¶crbßiìam;85pNž^t6§Ôn÷›9gÝr†¶­<›ò¹3&çª|3†P¬ô±v?]ysûsÌTuës;äòø½ %øšGžÊ{NÖùvÌD^ãAAòÿ¿¼'¶¼g«„“yOhyϱö©¼‡[Þs¬:ïùãúp +h�à)]ÈA/ô‡Š»�>,òÀ$[¸{|‚ïêvOËm#b4)¯ÿ“3¢¸û’ä‰yõDE[¡ c•£¦P»ôʯ©Ô~uV;o+§4d·…Úêi Ñ–¸Þ­çR}˜új«Úv’åÓ÷{uÿz‰õ ®¾¥ÇŠR½¼ÆïÙˆU¦r•·BdKÜšuU!îz£f}ù᯽”üÉÊ+’äõUýóÅZþ×:0¿\ã’¹åÝe¶’³oƒüv‘w×±Bfa�…¸~µ½-v=Sk´—‹< Tö%‘ +Øõë8|C=³“åªQ?´jòN¶­Õ§ê—Ž"jFw$ËÝ[ãV²¼ÿ±Õz»(!6™A ò\v48*>$Kì0ˆáH´Swƒì¹Éãä}1]uq»è³êÜ4ü­,¼¦?E|¹ [ÚSßTª¼u¬5Õ´ëm§Ñ$TéÔÐJöá>N +é墿³­iÆ`vþ4j~œsi†Ä½\iåÒËE-×”ô‘J½TUKÓüe˜:å®x…ö2�ºJòBÓiŽXj_·dy²�µ,¸®C0¦î ¾\÷™8Èo—�”Òa`… Íôf"Mívr¶Ã^Ù˪*LÍF“7_Èß*B§ +òÔ/Ž»II,5®F'27;y«¤™;ê°¦Çi”�Ô%K`t £íl•òº½tר†:©l¢§ÒÄ�êà±%»nu�,ÖôÓ±r&Ú&ºäÐMùmCr†>Uƒí�E7™{èírìØù6“Sqy€¹ÝÄðq²ùF|©Ž�÷d1ýÜ:dÉ›ùôÎ&â  0ÈFß*¹ÍÖŽNr’ª}“Ló¸/—¿^ª›ó¼„¼YoŽŽÜõPæüþç…¯?¶W¹,~ÜÛŽ¾cë†<{2yk>I–c±O›‰èy‚ýAvy” ͺ—Uµ´£Iu;€½•tA]çÎÄ0t8‘}7]ïhÒL¸C|Ùi±2_:6Ãa/—ÔnNå%@M*\Ì·ƒËgî¨oÊÑJµŸº‚áòxù™¼2Ä%òTßgosŒÀ–W’&ÎÓ’ÆÓuî¯qW2ÚÇ܆Ã0‘MNþg]„70ÊcÆÔTû_ ôjŪ·ôœ”%œsÇ÷ÕWSãߺ�Ó/“¤Šò&z’ 7Ë t“Õßsäòfé¤þü/Ñ(½f +endstream +endobj +53 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 52 0 R +/Resources 4 0 R +/Annots [ 54 0 R 55 0 R 56 0 R 57 0 R 58 0 R 59 0 R 60 0 R 61 0 R 62 0 R 63 0 R 64 0 R 65 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +54 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 751.923057 101.433071 733.173057 ] +/BS << +/W 0 +>> +/Dest (cb2-1) +>> +endobj +55 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 732.976036 99.933071 714.226036 ] +/BS << +/W 0 +>> +/Dest (cb2-2) +>> +endobj +56 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 653.081993 101.433071 634.331993 ] +/BS << +/W 0 +>> +/Dest (cb3-1) +>> +endobj +57 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 634.134971 99.933071 615.384971 ] +/BS << +/W 0 +>> +/Dest (cb3-2) +>> +endobj +58 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 615.187950 99.933071 596.437950 ] +/BS << +/W 0 +>> +/Dest (cb3-3) +>> +endobj +59 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 596.240928 99.933071 577.490928 ] +/BS << +/W 0 +>> +/Dest (cb3-4) +>> +endobj +60 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 280.647907 101.433071 261.897907 ] +/BS << +/W 0 +>> +/Dest (cb4-1) +>> +endobj +61 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 215.950885 101.433071 197.200885 ] +/BS << +/W 0 +>> +/Dest (cb5-1) +>> +endobj +62 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 197.003864 99.933071 178.253864 ] +/BS << +/W 0 +>> +/Dest (cb5-2) +>> +endobj +63 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 178.056842 99.933071 159.306842 ] +/BS << +/W 0 +>> +/Dest (cb5-3) +>> +endobj +64 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 159.109821 99.933071 140.359821 ] +/BS << +/W 0 +>> +/Dest (cb5-4) +>> +endobj +65 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 140.162799 99.933071 121.412799 ] +/BS << +/W 0 +>> +/Dest (cb5-5) +>> +endobj +66 0 obj +<< +/Filter /FlateDecode +/Length 4895 +>> +stream +xœÍ\[«$¹‘~¯_QφÑèº�1¬Á ֻͮÁøát¹��9cïÃþýýB™’"3£²êœïÌ4Ó]‘R†âòE(ò⮾qø«�3¥ÔœèzûáòãÅš-þkglûø?Ç«³”Mt5•xý� !›\£ÏéúvÁ_»CyúÛå¿uùÇvŒ»zSkò.^ÿù…YL.9Û¨°*XÖ…£ÉÙǤ°’3Xb­ bÄLžŽ¬ 1¨–¨± y_V��² GV…>;ÒXÃÕ˜–³�ÃykU±DÁ+<M‚Ò“ÆóΤR}Uy<—½Æ Á¤L.:�WMJ)�G�%Vë4^„,ÑY�Y(”¬ñd )X•Y|ÉAãeÈâ¡�ªð +d�w•Yl²NãÕ`b-D*¯‚gK.Gž·ÑÄ‚ÕxΙß *#¥¬ð“ʃ,0¾†>A›“ˆ ø¤a€ÏÙPõ¤�€/ÁP¡¢¡€/ÕPÎAƒ_£¡T³†Á:ð¼Ó€ XÈ)iHd!D®Êƒ,¡’†ÁCœ aA�ÅSа m Þ¢aAÜ’­N¼%ë’†€ 1­†ˆJ"  ®T5,ÀÜìÔ° tîYÃ‚Ô 1y `7PIàn g5, àn©ò X࣠® ¸œÍpaä5,€U ü0iX_1¾«aw}±¤aw}F +PyÙ ƒ†ÜõKÐ27p×Gë5, à®'Ÿ4,€£à�U«à. $êådÀjX€|ž`2ãQ–hX�»®"ý)1 ´2®Ô¤aAîºó©¼j\†Æ•¸…–�K©jX�»HTAÂÜ| €ñÕkX�». Sk<à®óÕjX�»¨¢†pãPhX€üfœ…몼jl-EÂÜ,y �…�-@•— ÉiX06u¨† ¸‹ô^5,HÀ]Cа w-¡ìQy�%¯aêð¶JL£X5Ö)4p×:XXãw­ÍUÂÜå´©aAÊLðEÃhP{ R!SsN¤jÁCɧò’ÁqÔ° [" KåAʤa +kSC-dY‚÷dYP2hX€ŠÀT‡ê[Ý@¸‹º? È‚JQà ™)•HÂöcЪÆKÞ” ¸Vy<—5,È™ R±Ó°{)Sôà —K@ ðiX�+dA¨hX€TdŠGe®ñdA‘­a*]ðœÓ° xÈ‚jPÂâ v™ÉjX€ �½$T­ñÈò>³hXP(.5,@˜`§ ¤Ty�0¡aìÛí¨a6?Ølb›£ò Kˆ¤aA)ž·›EÂR ‹·^Ãø&ï7³†ÕBT|T› —ÉÆÁ³VÂê +ö›ž4,@\ò~³hXPƒÅ~[<%nkH¼ßÌT‚,%ŠÊƒ,(šª·À$ì7�N/A_Išï7‹†(3°ßDE¯¶ +ï7³Ú.îÆ +dÒxÀ]T¦IÃ`¿‰ÊVÛÛ[ǫÏtfágQ;Б[Õ–�ö"[eµg`¾¼GR›;Ë’Ô®Ò*˜Îªm üE=FLXºO²E•à9³d^dEXªû±ç˜§…;§-ý±þõòí ’ïõ¯ÿsyýUë”õ?Î(µ�µç8ðö^™6Ü‚Q8ŽT~h‹‘ë“Ç­m7É ·^Ç·2³ÔåL[m.ŒÍ‚ƒµBÒ¥}ÿ ŸBÚ£êûéŒYú›é*”ˆ$H�ÇÛë§.ß~úîß¿ÿôæüôzùÓ¯áøH1ZKÿ~çå7ê³vÜþ�+çÒç…Ö~÷±7ü–±íüºÐèUÌ•–9m¥S;ÿ7¾~úýåwŸ ÌÀ`b±SªWn‘,ºtü3&äñ+êTo[cvèÿÝC>¤ýU騉¢´�–±ý÷œ +ß(â-,ûUƒŒÃ€Rfwo—Oÿõý§]š®ºŽ18B_Ñ­öéÇaÑ¡´›sÝNC¯ÃW¶.‚Y±ûÂ>Ã>pž’Mèã4'_¢‰ iyucÒĵM¦œ³°qëÙÕ4‹¾wÄÏkÐä|—ö�A×àák‰²Ð’×–ß/.±AžóššÞ=äçÕ“·Ö3=Ù/ÐÏç @ÿÚ ðÜ‹-÷bmƒ`8½ŸÎÎæ”q?OülÇeYbÃÀHwc?'.îÒæKë5n«*Ö%:'݈›e=î+!¾ñ“�Žа˜êÒ�Þ=æÿÇ‘¨_u1Õ8t!yQÀœy«ƒœÿÍ7Ž#0®ÿ² +ÝòûÀkfZ7/\ϳ+­à_]á1ÂK±�ô|zêW¨w{TѶ¬ÈŒ¼aÇ®¨<ô€çÆü$ÌOá +SplË16¢`VÁ·.æ‹«¹c\¢æþÔ‘ÛÜÔ¶›©,èNp|*ƺy»qß�¯9›]�ê×Óñ‾½ÓݽžÇÖœ[Ó)Ý“wçøO¬¦7o÷êms2¶}~ E_á9.W¯i‘¾¬«-»ìÇ]y=~}(q€ÕÚmær¦…¡ñ,´ñQËþ.<iÝ9‘Ð_ÄÜ~+C¿ÖXÿgó@ã‰Û>)Æ\5 p>ùÒrÆô‡|Ð`wîÄrw›SZ]ñ?žósg�)/Dó¼M:ltóÚi¦Ú¿´Ä²ü~Ù¹Jž.Dâ·¤wÜs7ž“ÖfAUˆÐ@.&ß.§™üöpô™ãh÷åÑè”MM”«6ú ˆ ™»U…Íxßµ×CwQÏ7S¨öù÷ä˜_Ž‹RÀèX­×‹œð4ž;8J +¶`Ÿ°�ô_„Æü˜´*׈»G9¥øŠ{´eë=†oƒÎ{d-Û°Û£ÿ×>WáY啱ݟϯ(MHÑ•¢é'/XýÑŒ”f +ë ¼9Zwb�±ªðÔŠø¦ÅRƒº¢G@–PÃðMÖzOë�”0 ‘Í»£‡§»0±�¦j ?–Ämp›||#Ï�ùåÀHâ ð³Q÷ÚM³x +B6n +¬„ಛ.­eΕ?²çmOˆžxçeÙé�ò?Ì•P§«.$«�ŽúFÜçÊ7ð¸ +íöY«NÏ}ë©!¿תÔö UÏP›4.‹¹•Þ´g궇T•RÜ­qü`ëÝ®öþz=c¼WíËàÖ® #ïË~¿Èr=/LzëdßÖ.Îê>¾Õ½Cüy(ÅGmž2·¨»ûøÞÚºÓX=¤ÞS½ô!ýÈë<²…VDÿ©ÏUï­~í1V½]qû·ÍûüÊÉïWNkç«Û'®’ô©~Wƒràûœülé:Oˆ¢AèÄ\/ëªó*q]ÿZîMÅ®ÙØ»prµ½Á¸ëÀÙ0�ïv…eZ+ýË"+Å)GØX+-rÄnÕ<Çt¾v§[åŽþê^ýnÏè`¦iýfùº]«¼³ÓhvÕ[œÇcžq·ç}úçç•×½ù‹bß.÷Ÿ5Ö›-ºLQŽ;ÓOtš~ž•»ß2yUC7c9}ñ®>nÂ7nBïëÜc¬ðéykF\ã!Òœê'ô“¦œÃV"ž›lÒ§I¬Iú��q|ÐqÙù ÇÅm¥½¬×[× ×ÓÎOÊ:Ëß®¡Ýâ +B¿;_îz·ÈèTgq¯³øÈ?ÔòJ? !ójã�ÐUÑãΧd|}½ì|ôuÎ{†ƒ'úqÞÊ)u,³X¿æcì�ìßø÷{}Iñ›Ž¥ý¦Ýð9é7Q¬É Ÿ¸sÞ#[÷¸lú꺻Íx’w{t½$[÷9ñ«²ú�¸x¢ÒØÜóÂ'³ÀÆ¡#·ó㯎‹S=ù½ž6zŽÂoË\Ó>æ7OHtªÛõ<¥«W½¢ë²4z¯YÖµö¹»¯�Ç’Oq ¬Ü×(ª>OuHª»Ï䩇îOÒöþóVÆ(걡�›À’]áÿÓ§zL{=>´ûêkÒWè)LÝ®iïÇ +Ó·6¸~Ïw²®7m÷òŒN49OuX¾Ø}¯ +»KlúZßxÝúï7ký_ö³}ªz*/{ ÿ¯;»M¹û^a`ÒiÎȇœ1rfØ"ý«ë–VºxšKÚ¬Ù\bÂË*×mâC“y½ÖŒ»ƒ¼�_¤¨ä\Päõ¢–\|_4b–­è|wùößÖ¦†œË9ãcåçí¸Pp&Äö– ¿ñ‹Á•o£]ÿ÷òŸOjÚ^ЭüròqÎá½F°B'EúÌ©î½&ë=_¤]^“µÒн¬?;NÉ=ãY�E©Á>Tãߙ󙺋N{…úz²®µóv{�M½þLm­õz^Ùí·ÝïW¢výo7½VMO½ +ì¾£«tÐUž²Ë~¦ǹ^ëÖ{•Ièd7æöºÖp¯º¿©ý²OíŸí‘U�®1xèoö/zmšK»>Þ÷”Cžy ?鞢ëSÜÙ×W½>8ì¥ö}gQçoï1ÍõÜík‹z÷ð 8?¿+ßä�e~'�= þܘŸûQp�‚ÛlŠwµ”;·íÝî¬î†{z{ü&\cnî<\†kFœ}”ïΛO—ÄÇtËo;ÔèKÜ]¬¯¿¹`oEïJò£k�– ›kUddoÛwŒø=|‚)k�ôw— ›iNõvVêß/ËÎऽyLÿ�Rл·ÛÞCÆ{nëE ­eó ÿÖ—èr¼ò#vŸX"ß5ïä�ØxʃP?˜t sžo\6ì©o*•?ÚÓ§êÚõvЂªjìgƒÐ°“Bº]â7¶OM0æà «ùþp ¬·:�ój?O!Ý.êyëlqX*�³ÊZ»æ§(ÓÕCŠWh7ñ`Sæô*bĆþsKNl�nk[„ßøñv‰4"q’ß.1+glj(ë‘ļƒ\ìô—IÍ¥« +¡Ùiüâ8ÿ½@ETFžöƒßÞr}y4/±9È[%Iz¨Cšåy®P—Ëyø¬Ô¿±}<ŸAwœ=4¶¡ +• z®]<©[²^7È a]?+%Ñv!p¹IŽÃ•ß6ä)g¡í¸XrÂÝã˜w’ÓÀÎ7IÎÃ⎿ä1äó +ŸïÄ[Kl´'³ë—~‘Iövd»y1Aœ‚&yÂè[#÷hèÄ_'ì?g�i÷vùÛ¥¥9¢çmQ +Ž?L%«#‡"Ù^�ÿÿ~¡ë÷ýKK÷v …غ!ËLÆŸ1,O’ùm†Na#ˆžìO²+óÜØ½aäqï^Ón'°÷3Ý@P7¸’§Ù×õ.ÍÄâm§ÅQÈ|­mfÂ^C_.ø]*Èåà°L^˜)ù*¦ÄŸ:S:?mïÅ@ÈIq(.X§d1Ù!åE†êY~’¦|-q Ê> “G3ÍÊ©;­­Bœ‚8È919yѺ‘GúÃáõÕv_EN=˜: }Pß$u,Œ©ðtjh‡i{8rN¸òAÞ©¡1W±F‘3Cc–´9�>*¨e[Oˆò¢Ôi›‹öD1à4ÛicÆÜeJë°®–¶â¢j)�šbRÿ&5¥U†£´J:œËóöŒ7ª¥0 + (Ý9ÏÕÙyæ¨%‹BKrô Ò<3tÚñÚ´½v϶W± š‚¤Y™Ú9,Îüþ}$vÔ�vVÿÓ:®Ìo!Qó Õ>´ÏAÛ’0„ø‹~™Šhi¼{Ìy�ãØÉè=y%˜ÃP6;þ°·.Âõ1CLÕ?ú­«V]Òû ´p&ÌÛuíË®øomäŒÃÌ[Eþ�sࢷð÷'³uz׳nZ'íÏÿ”ËÆ¤ +endstream +endobj +67 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 66 0 R +/Resources 4 0 R +/Annots [ 68 0 R 69 0 R 70 0 R 71 0 R 72 0 R 73 0 R 74 0 R 75 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +68 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 748.173057 101.433071 729.423057 ] +/BS << +/W 0 +>> +/Dest (cb6-1) +>> +endobj +69 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 729.226036 99.933071 710.476036 ] +/BS << +/W 0 +>> +/Dest (cb6-2) +>> +endobj +70 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 710.279014 99.933071 691.529014 ] +/BS << +/W 0 +>> +/Dest (cb6-3) +>> +endobj +71 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 672.384971 99.933071 653.634971 ] +/BS << +/W 0 +>> +/Dest (cb6-4) +>> +endobj +72 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 634.490928 99.933071 615.740928 ] +/BS << +/W 0 +>> +/Dest (cb6-5) +>> +endobj +73 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 287.395585 321.344928 323.513505 306.344928 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (https://github.com/projectcalico/canal) +>> +>> +endobj +74 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 84.259843 291.344928 111.294999 276.344928 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (https://www.suse.com/c/rancher_blog/comparing-kubernetes-cni-providers-flannel-calico-canal-and-weave/) +>> +>> +endobj +75 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 308.171464 172.723346 401.561844 157.723346 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (https://kubernetes.io/docs/concepts/services-networking/network-policies/) +>> +>> +endobj +76 0 obj +<< +/Filter /FlateDecode +/Length 5546 +>> +stream +xœí]K�9r¾×¯¨ó“C2‚/`0€�ÝxŒ<^Ác@ØC«FÚÅ¢e`Öÿ}ÁL>23ª²Jêu÷Á¤Î &ÉÈx|Œ ™l{6øû�ʼní”RŽ�ϗϧßNfŠÞàOybuSŠÆ¿èÏÖpœ¼Í!ùóg!Pœbö.†óó ÿmnÇÇŸO¿üîô_ë:ö즜ƒ³þü÷�RÄ4Å£ñJQF‘±¤y?Åè|PŠ‚�ðŠ9kE`ÃGv¼/Š`ƒsòZØ`ç’R”Àq´´/Ê`ÃEËZذÙG¥Èða�1j1Ìä”2ë§¡­ÌÙ)¤ì²ZQf£Óʈ¦Ùz«•å)„à“VÆàÅgcµ2^¼e6ZxaJQ+ à…µ ¼¸I+‹àÅA:Y)KàÖ•Ô2ðb‚±ZY¦ÉçĬ–e”™Ó¾Ì?ùDd´2k'Û$µ %…¨”9ðŒÏjxñdœVFà…ñW+NxŠ))ÞêÄ»É�ÕÊ›$ÃÝÅüfâå4�-Ø“}^Ó^Ìô¡;+ÓBí¼ ÔËø*ýtF¼¹¥#VlO÷WÔ0¶ÝèýužGrõ¡¿.$UΗÓ/Ðøo«fZ!ÃUŠNž�Vx)V‚*¢Ô˜»Ò-†™eS”Ž´ây±²ÂÏ+ˆºĵ³!cünÏB’¼%® À^1€�Q†fKw¢$Å:um�>‚º Ý" iO·WÔ•�n�Ü_}è¯ I•óåÿýïuýOÅG8¤íl„Æ¢¸ê‘$:Œˆ´¸ºäU:òc ÁH6Îí +«³ß¢?ävèyÕŸG&Œ+ +:“�Wú"&7(³’NÀ¸Ê)!¥ƒ¬QFx�*Ò{+½·]LcÇ]L*·�Wz n%YÓÿùÝ Áì¼�†^á1Ù€ ‡ ŽÆ2«ýîóéÛw?üÛOï~@ÝwŸNï¿Cö .øþ]Œñ’—Ð÷>¿ûñô‡wòrˆÎñ3E$2·“Øq’{#©Ažœ)+r]�V9’•?çýEó +39Imƒe'©Ìd¤v;ùÚù,§v‹Ä¸r½×»ÿøé?q!ÖâQ�]ÿ„h/fø#Êh¾çO³8âô—&Φ²µ¦dváv´þ@S†F-áúW\§ù^Ø)4Ƶ]®¥ìÃBÉÓÂZZ?Ëqß¶Ð˫ř}ݲdÑ ¦ …a᱈"-¯î–~ÍÂËÒW)¯}æ.ÂÒ/Í×EŒq~?^Þ¯ðçúûÕw—ö¬­V榸‹2Ä‘¤¿H¼M2Å1jðÆj­ò þ€¹ríu~»µä» ù +’ Ìš½Zóý7vûSUÆ`’ñ9úd“¬µÉê¾:¯-¬Æ¯¬`&òÙéÎ]2QY�ºmiwUy;†Ѱu¨ÿ’†¶jô½…ÏÙóbª/›óXG÷õïévõozjÎH0†Æ»cîûª¼%³ÅÃL/é©ëFß�Pÿ^Ú#ö}û×¼”0^vRº»½ô¾*oG�T&„eÃò *pÕèã^º¯ÿ˜—îëßòR$W“l“–}1ÎB%ÑÈ2Ûm-ßWçí¨9°ìKO1¿¤šW�îB·kÓ˪G½£ó{ü¸mûþ¯úq”Ï‚ tÎò±GÈžŽ4|W•·£à$[P¼�/êÇ«F¿À�wõ+î¡Ðk«N/»ÎBYéÃx|W|_•7£N/{WSrѼ :×�>®Î}ý¦Ît§ÛÚÿf¹´¯9{Ÿä‹�¼º +ç°ÊÅËÊÔ°¢V~ú¥,Ìk«eµ*,+Y~‰ûiXµË J�«s¡N³tú¼j6 ɾÃÀ†³gšh^|vYÖø]YŠÙ/Ð>^çÿÆ(¯-ÍRp�ß­jô固ÐéE¤Ë‚áck¶K½¸”¹�*–6E¥ÖV5`bÁ/_<)ï±6±º˜yÅ> •‹Iún6e18u5Ôßc³´ï'vY>Ló\3�Ošle[¬¶¶ÿh�×5Yž¬ü®¤¶7�ÅSËzµëëÓæã¼†ÞÖË߬yaŒ›|ö`dÿ®û}>T“XìÃÚ„öHuË$¤L&¥äÛÚ$×}u¯BÝ‹P×óÓ9}}Æ/ÓéË^„Â˰î?ËD�±¹ A0K˜äè¾0úÎ:¯=,·ÕþP‚Ï«flDÜÜ—gÙï×we<,nèCj›ëO×¢ A4x—|?p´Qàö£_!Þu/ õ€LŒøE¾…A¨�-à¾:/±gëe#4ùb Yù+{òƒ“ÑCœµnúñôw__].Û®�pÏÓîXNò°+ün ÿž)ñdœÙŠ·´)c‡£Iù ˱1;MŠu!½-Åùám•…„¾´vµ?¤S9Á!Ý’ÂÓ~åy·{äÍ å[¸p¼§U”§ìZ kzå¡öÕÞÿƒÔ9�x�/ªr¼¬IÀÏS/«=,mÆÐÿ‚‘gË¢º™ÊÖ¯#ü¸³Îk� �_'#^–�äUبê5]Mš_ËÀ2_?™73t\37i“—ÌA!¥ô1¨|ý:Eå—ÃÚÍeöµíÇ£Ú!N9pÌZí; †¢|–D�ûú<® ê&ŠK“œ#ùœÜOÞY>ÜÂqg�·c¢,çX9£ãåæÖ�þƒÐxX‰Û÷×Ðx•G¬ç%wÁW^Ó_mƒÇwƒ _6.üIçý�q×;¹ôc¹"·8cø—ŽTצݑ»"�áLâÔòmùhõ¶'ÝUåí8RDDzįï…âí~…qOàýfÀ²)P)êfG©ßî„Û“e}6COÉ÷)í8aìOПìC0F€\t)‡‘|[Íê„ÙÃu^{ÂÌ6~·ªÙÀ¢–\dc/^ÏJ” üiO/3—ÍTÈÆ^„kÉ™N�­Ù›'}&¹êl›%¸5S!ŸÑ÷KfòT£BÓçjóÛ‹yb–óž”öŽf2æ}åÛ6�|“Íh'+m®LØEØ�u)Ð99_ÍñöG9�×y]vrúÇÂïJ/ù=Îó$¼u +1³Ý÷­L¤mШºEýˆ¦V‹´AªÓÚ|o^‹£ÝŽœÂ„¸—RÛÿAu1"wÛ?·©aLÇZW§å|wþŽú¦M{J›î£`w›ÔnjWDYv�ô·h·$ûÕýÛÍ[|ûË¿þøÇßÿË8»‰R¶#ý& +ò^�P¼ÚQÕ~Mâã]�c¿6¼jFPÖ„¶ƒè +«*Ÿ[¼êÜ@­ì²85 mçl¯Áh#ŠÈ1DYZGì@ "FrÂåE®óÊ(âRãw%A}úÿ“Y}NWÅX¸û79óÎ&€,ïû¼ý9ßø9[û<Î_‹iFíFè>Í+Û«çyˆ�†Ïë|5Ðú®aÛÏ­�4{ä®Á£÷–N=LYö�ªéØÃU^w +Î4vW¶pç 4Î] gM ¨¾º|¹ámÙ¦,Ù?\ç•—ìG~íÍAûñÁY>];,_—îWP¡"Þ8:¶ã×;*¯z­º¸^=¢¦Û—Ák†í=×\ŽÛöåøä5×óÊši;fF÷ xš\²åŒå} gFNÆOî‡1¶à^ÇÍMO›ÚZ'J ÓTóórUôg™ªH“õÉCÛý`«f»‡�˜ênˆhKƇgH˜£œm+ó’9Ê©mêÔÖµP£ÅÓ2œ?ue¯ŒC™{(aœ|º-Ï–n—�ÄmauÙ¹Òxù¸7p³œhËI±F„êä(ùs&ˆüÊi1Bz¶ˆ×�Øó•šåþßÚSò?HFŽé•#‹øÇ›åù9ø|’Cuúr~¶)dY�ß’ŸOr~:+dæŽd!.—¦µÅ¶Q¥]NðŽ)oŸ$?™å²'æÔ“ _ßFêûZMεcÓ¦æÊÉnsÇ +5ƒÝ“åíÍd²œAŸ&ZîBc¥Œ€•ØäñÙÞ`¯xH¶d¢ßÍÐ]'ËgõY×.sÓ9ˆ�õQtvP}ÖÅA�·ˆ—º¥-õY¥ÊÉ×µ©*] Ö•FS¹Q}}²)„›žÒ夿1µi†2[ù 59?t&¦jHÜžËõ9…t9©Ï-­ù¦©ØžJ½j®’ï¬tS§Ô¯Ð.ÃTJ”p}ð _®êa$Ñ@ÕµIƒÝ¸ñròÜ<±“ŸO>*OûŽÆWÓ‰4´ÛÈÉt{éT9Öd¾‚kVšœ¾(ÿÏPáU�§\Xn&%³«ý®w"¾ÙÈk!�ôÐP‡5 Èw»vGEÛ16›åe“QžÐmO7‰­¨ƒÈ:pÓš <ÖdÛ¬®‘ª|VŽDS™�càÙ7S~^‘;Ÿ¾¹ª7­³`s÷­ÝN ;ŸGrl·rnã·µ;Ø|%^ÊÀÆ[²˜~ª�t²|Vͧu6;c…Nî0ú\ÈÕ[:ɯø¨—ÝÉ´÷rúë© s޼“°>ÈaT´ŠŽ,’nsþÿþvâóOõ8Ñyw¦¡…kغ"�#™ü.�t'Y~7H%6·ˆŽØïd›ú³¾ZCÇå„™¸¡IuÓ�½>i‚ÚV:}—á@vÍt�¥A2þñ²‘b d¾V7}Àžo©¾º!9ˆ¶r%çHÜà6õ2êCòyhwòhÒQÊn¨ˆ›±QÜæÎÙŠM1ȱ“&záŸGU�ô5Ü a„ÜR/ã>ÌŽMWZy‹á„À4ÞŒ ËêEo+¯øQ˜þb÷új½/,‡êBmÐÞ¨Ï#µ½˜PàéT*·a}ÛÆ*GUçíjmÑà{Ô‚œî=´àÕÍh£5õjË~ì”+mÕi(\€f*­µ+Oa©VÅRÞ8©RŠ-¦èÔ¿Ž’ö£Všý¨•°{VÚ­#^‹–¨@~4çØßÎô'[,™Zk7*÷'©Òö}óºï:Úž‡×àÎHè‘©éÕüîÉ/¿/ñuBY{ªþ-36õ¸1PËÖiGåwª™0„å×bDNÔÆÃunÏqìg2êÇØÔ11‘‰V~;žÎÂ3 +òqÁÐTýÍyzµlÔWzLÊN‡¹ýô?µ3BËDN»�’*ÊoC# z“ü—h¬:¥cŸVS'åïÿzB´¸ +endstream +endobj +77 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 76 0 R +/Resources 4 0 R +/Annots [ 78 0 R 79 0 R 80 0 R 81 0 R 82 0 R 83 0 R 84 0 R 85 0 R 86 0 R 87 0 R 88 0 R 89 0 R 90 0 R 91 0 R 92 0 R 93 0 R 94 0 R 95 0 R 96 0 R 97 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +78 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 715.084475 101.433071 696.334475 ] +/BS << +/W 0 +>> +/Dest (cb7-1) +>> +endobj +79 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 696.137453 99.933071 677.387453 ] +/BS << +/W 0 +>> +/Dest (cb7-2) +>> +endobj +80 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 677.190432 99.933071 658.440432 ] +/BS << +/W 0 +>> +/Dest (cb7-3) +>> +endobj +81 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 658.243410 99.933071 639.493410 ] +/BS << +/W 0 +>> +/Dest (cb7-4) +>> +endobj +82 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 639.296389 99.933071 620.546389 ] +/BS << +/W 0 +>> +/Dest (cb7-5) +>> +endobj +83 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 620.349367 99.933071 601.599367 ] +/BS << +/W 0 +>> +/Dest (cb7-6) +>> +endobj +84 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 601.402346 99.933071 582.652346 ] +/BS << +/W 0 +>> +/Dest (cb7-7) +>> +endobj +85 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 582.455324 99.933071 563.705324 ] +/BS << +/W 0 +>> +/Dest (cb7-8) +>> +endobj +86 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 563.508303 99.933071 544.758303 ] +/BS << +/W 0 +>> +/Dest (cb7-9) +>> +endobj +87 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 544.561281 99.933071 525.811281 ] +/BS << +/W 0 +>> +/Dest (cb7-10) +>> +endobj +88 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 525.614260 99.933071 506.864260 ] +/BS << +/W 0 +>> +/Dest (cb7-11) +>> +endobj +89 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 506.667238 99.933071 487.917238 ] +/BS << +/W 0 +>> +/Dest (cb7-12) +>> +endobj +90 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 487.720217 99.933071 468.970217 ] +/BS << +/W 0 +>> +/Dest (cb7-13) +>> +endobj +91 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 468.773195 99.933071 450.023195 ] +/BS << +/W 0 +>> +/Dest (cb7-14) +>> +endobj +92 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 370.326174 101.433071 351.576174 ] +/BS << +/W 0 +>> +/Dest (cb8-1) +>> +endobj +93 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 351.379152 99.933071 332.629152 ] +/BS << +/W 0 +>> +/Dest (cb8-2) +>> +endobj +94 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 332.432131 99.933071 313.682131 ] +/BS << +/W 0 +>> +/Dest (cb8-3) +>> +endobj +95 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 294.538088 99.933071 275.788088 ] +/BS << +/W 0 +>> +/Dest (cb8-4) +>> +endobj +96 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 275.591066 99.933071 256.841066 ] +/BS << +/W 0 +>> +/Dest (cb8-5) +>> +endobj +97 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 298.350419 124.541066 391.740800 109.541066 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (file:///doc_tools/%7B%7B%3Cbaseurl%3E%7D%7D/rke/latest/en/installation/) +>> +>> +endobj +98 0 obj +<< +/Filter /FlateDecode +/Length 5338 +>> +stream +xœí]]‹$;r}¯_QÏ WW¡/0 6˜ |íÁ»0ø¡§vfÓc˜õÃþ}ŸP¦>23²2k¦×ÃN3Ý•!…)�8 +)•*sÕøùÉàW"£RÊ1Ðõöõòí¢UôÿJŽÅEIþ ÿ£¿MQy“Còׯ,pQÅìm ×× ~­.Ç쯗?þîò?Ksµ*ç`�¿þí3'‘S1Ũ½�”‘¤�’¼W1Z„¤`n1g) føH–¶IfPN^J‚dm’Ìp�Û&e˜a£!) f˜ì£�d4ì0Vk1 †h"g…4ãU@£)ÍR¶YL‹H3ÑJiΩÉx#¥eBðIJ#Øâ³6Rš‡-Þi) ¶�KQJ °Å§Å4ØbStRZ„-­“…´[€®$¦Á´‘Ò²S>'"1-#M§˜¶iV{å“sZJ3Fy`Ó‰ið(tRˆBš…-Aû,¦Áï´•Òl!üHià ïbJ‚·Zön§�‘Ò‰OŠä '5ÝßLAˆW�4ƪÙI¿Kéȳ1>c&rm ›:y2êÃįŒ´¨ÏcšŒO.ÈF>®ô]F®xgÛÎÿòá‚hlz®CÛ!$±ˆ­0è~øzùùÃ/ÿöë‡_Pæ‡/—�ÿb€”4&Ãó_3Ënóçžcâ³�®ËçÛ|Íùý$«º>Ϻ¾ëp––޲Í\Ž�S +sY«|hÖéïmY?È}ºžë.ùm½—ßÿ×õÃvÚ"�mQn?ô¢i6�o¹ÞÚ® ·þÙ!ŸýŒÿiN ³^Íë§ÛZ˜>4µv“yý“œu@ÕÖäOs+ù~·ÿú�öõÿåòó?Ϙ‹q˜¤"¼Ê E^µ$LùBįü°0ç„ðûï—ÿ8±±”»3¦É�_�ó +­·3nÈ Þ,«!ÄO¤²ìªë¹� ”>OmZÛºÀÏÌŸ+Äà ž¸ÐÃò÷ÓÐo_æ¾ ƒ×õeÖ�½ªÎãø:Í»Ün#„a"(ÝâµÃ ìj²²º<µm”ó°Êá¸òïºýÐÈQ£548)[ž.b0Ó mâkåSç¶K^úÜëãÿùëŸz—¶Ÿ)…Û×Ì´R\¼ö�Úp„/xN ÂÏ/­÷eοmÄÇuž¢G³“¾×ŠñæÏRõË@ô•Bô@%4µ®~9òV  f‡ÑlmXzkñ˜0ÕWY�ë˜XoÉŒÞw›JÞ<# æÍà¢%o\x¦¡Ó~3öî�W=¨òxðY +Û:V>SGš0aaqnîÙŸÛˆ6@>v]?ûº¯Á›ï#Zó©!Ši¾tëå>4ªÎyJ»¤yä›í"Ž˜]�˜yöãxy•"¢ ÂxOKª ë#°Öù�™À�¢ZëÔÏíÒ8ßì�¼ +‡ ̈�Ò¥ù~ÿ“áà†á”§ÏUhMíü7-Ó§.œÓâ,›óT9ÅU™qYf+k­Ïù²ªÿ¶Ô™ 2ëù•¾lH;6†ýûi2’eužaô,{™óº@÷/19L–x­Q9«]aïñœÎÿ7»½9ªä<ö�xa šåDn•¦…üµ‘¿È¾î4?Òʼ ǃVN©<5ºÛÄ'už¦‰áåüø;Øc_}«á”º?ÐÚÏÃÊÍÒš~YuÇÊç§pIöûZ6­Ê¼×ÝÓgðÝ•}­þùÎi/'yj§-*wöIXç¡Ýö\ñкÎ)ÔÜã çxqÌð¤9ó.Ä�½;Âô)•ç�4a¸E°o¢U.Ö>虢_¶ToÌnszÞžÆÑÆ•øi5¼Ýú£ö<§ó< 1lXÒ+Ž8¢øF\áÒ ‰©�™qZÿ¶E³Äùè÷eÌ4;¾¤{Y»¼„:?/y«•Q9n䉟k:+®iò1ÖYéNÓ×;u +ÜdV¼r˜‰øÙ´Éýz€Ç»Yp�ºÕ³Í)ŒŒ PÊö(`9©ó&ËÓoê2ÄOð(“v‡.㢇¸›´wÃÐ6ÃðAkØÝêJ…Æ®ÊËñ4 Ùë:VC÷Â�×ÃúË0ä­àßòä¹ ¿ ßÅ�gú0ºßôXàÎÐ.ºñÖÈlË–ŠüR¯< öœÎÓð;ñkc¡¿³„°j´�“[§¼Q(¾Ïg´"ï9š&D!Þâí,÷;âœÎótD,{�`ËñÄ;¾oð[So·�}ÄL?ôžµ/ ÷³Nó;ö¬ïé`Ña€´@áÏò|‘øÅ+sŒçç‹'už¢#²‹”d®øG,x'<éum¨ås÷]bs?'‡’_²7¿Îa¯1A¨­;¢Ús*OcoËZ:¿5%ygšpz¾[ï‹5º„®‹Ê> ²¯Í�Á5Y/i÷he_?“Ò™_Aôf¿¤eãgJüWˆç»þ”Êót½çÍq6żó(wÕÕ¾G3´N;†�ÕVŬù¡Ò²â›Nü~aÐÁ]ïŽwÞ=c8§ò<�1ìYï£ìu9ƒt´jp:·*t±B—\üù¼nÊÝí¸§)úTöúiã˜zîœÎÓtFø¦D}ÜuveH¸ýè�]Uò±Ž|zµDwà{Æðë¶Îf¡¼C +¶V+Ã/%AûÄÝX[^ˆ�¡’~Ù3 ƒ(«´3ä§=‹„~ +GSΓ:Ï"ø-Íü{‚hQÉ‚ÆÐ´î$±}Í¡ÌJN�»'•=Z1uŒO  @Ð>°h•s1Ѻ9Ë0ö™cñ€¹ÈKiå5 Þ7&G;§ó<óùÓwe©E%§V§¦ãÂT<M �ÙÔ} ¸0í3€K†IÆjIÿ^PPàW|zí¤ÎóŽãýœ—ŸU¿à•œÜfaî$Ê»õ!µCl`Ä�öˆ ßèß…XŠ*™ìoƒ4¸ƒiÜ}ˆ�Óyˆñkɼ³Ïï<«ˆ-+)CÉ‹ÀYöíÓT^ió˜Álm8^F·™˜­¤}¢ø¨ƒ®Mb ÜL#ÇìÉZ7³“)Úp¼“:ϼr.ˆá3tÞx‹J~x?8ÈPÚØtÄHí3@4^qôNFпǀ|€#Êü2y²åü%ŠG@<§ó<@ôl$Ƈ��oÄE%?ćßam­8æÀ�A7Úgßøý»ÐãQ[ÇPv±œ…Þ9�ç�^D°`ÁÜò®¢7‚Þ¢’½øNܬJÃà +»z¦öå<÷ ÜØò7Úp£€‰×Zøä*t™V(Íå£'o'už€IsÐ�“{Oî[Vòq\2­œ&­�/§«aÛ:Ž�åb¡#í3Àê“AÿÎZ\B¸,§†œÝe}Rçy€eùõëíÎ#Ý·Ö¢’°R ²-óH}Ix«}jQ·- + ú÷€ä2úÊóÑBg·ÝžSyy~¹ÀcVóž0ZTR`´zr_v+�~8º-ïB7Úg 4@p«B�Tà£sá¢s:Ï¢ÈÃDÌæ]¹hQI ðÝj‹Ç§@°)í!Úh?ÈB[ý{J¼Ÿ–�v(ç/G�øç(N:©ó4Êš·Þj>ôöý ´¬¤@hØ{æñrç mY�pÐVû1jç×y�UÝc^÷ µ»ZÃ*¯Lr‘Ïr; «“:Ï+Ë/m ¬“·�¼¬•”áíå» µ)ç!Hm´„Ô¶öÇ!E˜’Q lÏ?£<©ó<�âó¢¿püž�ZT2îp—Æ}™‹÷ÛNä}n¶­ëv}f¶Õ>»þÀi«ßvVÒj¤Æ‹2ô€�¨1¢¦óO+Oê<ô"ê)äwe³E%ëjÔÞkÕë�êë­®ç�´©÷‘ç–[íÇž[ +úw"²\Ž(n\9ÉEgýÑûZ'užl|Ôƒ2™ç~G´­j—¯*Ñ÷C¬3�PÙ#T'¨?ÆuRK”ý6ù¥>‡f2>ytd?O´Aë0Ë’Š�Û7ê¾õ“EvÎã*GyEþJ‹›Ì‘Ë�Ðú46�º¿æµqèÎ{ÂÛÕºµôU”òŽÔ¢jëZÝdn0*7©¯9[‡Pë'At»Ÿt-šÐ™-}è5>¶}¦ +$jùrÍ'ˆn1ß\šo=[®ÔUsmùnJ‡ºK­áYi£Yù»ÌÑ®~\Š÷@ík�ÜØ�ðvÁCñëÅG!·ï\�á(o…n(·‰“îxéÒ˜jSÁ5«Œ½æßUø&eæ) 5HñÁõýªW¾ÙÄËF塱I-ÀQ½ÙHQvŒ ³c{ñÑfÛüLº-wk±…th²AŽ˜R·¢C#�¥Ø4Ô51SXmŸÆ•£PW#ø�Ý&ö ʯ q·Ó7WõºUÌwßÊíâиóuÇÖㆿ… ÙÛÊ0_…·2°ÑZÌÐOµ’.æÕ� +ŸVÙ ì†�º¸ÓèkWomìÄÛ·êÇîdÒˆ{»üõR†9ë¼å¨;8Ã_ª3FGæúwäùþÿ÷…®¿ÖSܧqÜêÆ¶qëB<Ždül餘¿’­ +›Û BKíw±I=¯¯hh㸵_SW×�ØkNÓÔ´ÔQè{bÛ k�ZÆßÞV­Ø™í›>`O—®ÞÏøüÿj.ÆÛÁeêi®ÉסH\qÖ>¤#•ì ˆ‹±P\ænÙÂLäXIkz¶ŸÆ®àG&ãÅFð¥ëiÔ‡Ù±è*+w1dAìÆ‹±`2c¥ya�`ôw»×÷ûlr¨ÀÒFíMú:JÛ�±´ž,uå2,/Û˜ãʤ´:oo¡V–|ϵ §»F-hq1bt�¦®6gðc¥Te‹Jë@Ñè2]e­ÄXm +³Zm–rÇIl¥ØbŠ.ýëØÒ~ì•Öˆ~ì•°ÉËåÖ¯EK®@~„sìw§{ÎK&AFí&¥žÓUÙ¶nZÖ]GÛëpÔ =2Õ]Íor~ÿ}�ïˆgtK¹êOYÁ0©ï j2|6eù*[�B‡Y¤4,i<¬s�c»’Q×8ƚЊœÓÑð—Ë&¼"!' EÕ/,–Õ²oé±–p:ÍmOTwípÛ²�Ó.yòå/¡uô&þwNXÿ´X:)?ÿÊŽ�â +endstream +endobj +99 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 98 0 R +/Resources 4 0 R +/Annots [ 100 0 R 101 0 R 102 0 R 103 0 R 104 0 R 105 0 R 106 0 R 107 0 R 108 0 R 109 0 R 110 0 R 111 0 R 112 0 R 113 0 R 114 0 R 115 0 R 116 0 R 117 0 R 118 0 R 119 0 R 120 0 R 121 0 R 122 0 R 123 0 R 124 0 R 125 0 R 126 0 R 127 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +100 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 289.074296 784.370079 316.109452 769.370079 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (file:///doc_tools/%7B%7B%3Cbaseurl%3E%7D%7D/rke/latest/en/config-options/nodes/) +>> +>> +endobj +101 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 650.584475 101.433071 631.834475 ] +/BS << +/W 0 +>> +/Dest (cb9-1) +>> +endobj +102 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 612.690432 99.933071 593.940432 ] +/BS << +/W 0 +>> +/Dest (cb9-2) +>> +endobj +103 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 574.796389 99.933071 556.046389 ] +/BS << +/W 0 +>> +/Dest (cb9-3) +>> +endobj +104 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 555.849367 99.933071 537.099367 ] +/BS << +/W 0 +>> +/Dest (cb9-4) +>> +endobj +105 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 536.902346 99.933071 518.152346 ] +/BS << +/W 0 +>> +/Dest (cb9-5) +>> +endobj +106 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 499.008303 99.933071 480.258303 ] +/BS << +/W 0 +>> +/Dest (cb9-6) +>> +endobj +107 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 480.061281 99.933071 461.311281 ] +/BS << +/W 0 +>> +/Dest (cb9-7) +>> +endobj +108 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 461.114260 99.933071 442.364260 ] +/BS << +/W 0 +>> +/Dest (cb9-8) +>> +endobj +109 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 442.167238 99.933071 423.417238 ] +/BS << +/W 0 +>> +/Dest (cb9-9) +>> +endobj +110 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 423.220217 99.933071 404.470217 ] +/BS << +/W 0 +>> +/Dest (cb9-10) +>> +endobj +111 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 404.273195 99.933071 385.523195 ] +/BS << +/W 0 +>> +/Dest (cb9-11) +>> +endobj +112 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 385.326174 99.933071 366.576174 ] +/BS << +/W 0 +>> +/Dest (cb9-12) +>> +endobj +113 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 366.379152 99.933071 347.629152 ] +/BS << +/W 0 +>> +/Dest (cb9-13) +>> +endobj +114 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 347.432131 99.933071 328.682131 ] +/BS << +/W 0 +>> +/Dest (cb9-14) +>> +endobj +115 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 328.485109 99.933071 309.735109 ] +/BS << +/W 0 +>> +/Dest (cb9-15) +>> +endobj +116 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 309.538088 99.933071 290.788088 ] +/BS << +/W 0 +>> +/Dest (cb9-16) +>> +endobj +117 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 290.591066 99.933071 271.841066 ] +/BS << +/W 0 +>> +/Dest (cb9-17) +>> +endobj +118 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 271.644045 99.933071 252.894045 ] +/BS << +/W 0 +>> +/Dest (cb9-18) +>> +endobj +119 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 252.697023 99.933071 233.947023 ] +/BS << +/W 0 +>> +/Dest (cb9-19) +>> +endobj +120 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 233.750002 99.933071 215.000002 ] +/BS << +/W 0 +>> +/Dest (cb9-20) +>> +endobj +121 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 214.802980 99.933071 196.052980 ] +/BS << +/W 0 +>> +/Dest (cb9-21) +>> +endobj +122 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 195.855959 99.933071 177.105959 ] +/BS << +/W 0 +>> +/Dest (cb9-22) +>> +endobj +123 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 176.908937 99.933071 158.158937 ] +/BS << +/W 0 +>> +/Dest (cb9-23) +>> +endobj +124 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 157.961916 99.933071 139.211916 ] +/BS << +/W 0 +>> +/Dest (cb9-24) +>> +endobj +125 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 139.014895 99.933071 120.264895 ] +/BS << +/W 0 +>> +/Dest (cb9-25) +>> +endobj +126 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 120.067873 99.933071 101.317873 ] +/BS << +/W 0 +>> +/Dest (cb9-26) +>> +endobj +127 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 101.120852 99.933071 82.370852 ] +/BS << +/W 0 +>> +/Dest (cb9-27) +>> +endobj +128 0 obj +<< +/Filter /FlateDecode +/Length 5039 +>> +stream +xœÍ]]«ä¸}ï_ÑÏ�UôQú‚°�,$0$�!³�™„p7°ÉCþ~N¹-YnU·åžÛ³žaæ^W©¬²ttª$˶9küýÎà¿DF¥”c óå§ÓÏ'­¢×ø3•XLê?á_ôg£)*orHþü \T1{Ãùí„ÿnÛâo§¿üêôïµ�9[•s°ÆŸÿó™UäTL1j/¨2TÚ8A彊Ñú ¨‚Q¸Äœ%Üð‘,õª7('/©àY›U‚Ž¢q½*à  I*¸a²�‚Êhøa¬Ö¢Žh"g�ñ* Ñƒ¤³F…”mu:­¤sN…HÆI—UÁ'IGðÅgm$�‡/ÞiI_È¥(é|qÁiQ_lŠNÒEøbÑ:YÐ%øt%Q_tÐFÒe§|ND¢.C§SL½Îj¯|rNK:c”6�¨ÃˆB'…(è,| ÚgQ_¼ÓVÒ9øBø+éÀÞÅ”„Ñjyt;팤óðÅÚH¢¾ ó%°¾è$ +ÀRÌKØeK Øä%J Ø”Åè$°Ù+ +9J<à´�Ήœ†/ž‚ÄÎÀÂÈuðÅe’¸ÀYø‚8_,9‰ Ø–€‰ è–t68ð-i$.p \¸©%.p`\—I\à@¹€R–¸À�s¸SâÒÅp�8°®óÁJ\à@»ŽR�¸À�w-q�w�ƒ¥¨ƒ/°Ä`GåLrx×%. ð.†‘•¸½ª€Ã q°¢lJZâïÚ¤IâïÚˆ ê¢Âtx×z\‚¹Á»Ök+q�w-Ù q€¢À?ZÌÀ» /§ð+qâ=tÖI\€“)‹´DâÞ5áOÓ`+eRxð®Iè>Q—•‰hqaÜ¢•• !K\àÁ»TNâÞ}&‰ Àñ +ÕJ\àÁ»Æ!RK:ð®±YK\àÁ»È¼Ä€ƒ2H$.@|SFº¢.+�S’¸ÀƒwAKVâDa¥˜DÔE ‰ @ÆJ#•¸ €w޳﫽sð®&¤=¢¾¸d%.@^†­0¦‘¬*mÁ’¼« zXÒ�wµŽYâ‚Þå°)qAˆ,°Iâ8¨�[‰ B"•c „¬¡CÊ'ꂱ—¸ j<(KÔÁŠ$qk•]ND _œµD _�2H\€Œ@eƒì[œÀÀEœ|A¦(q˜L¥L$qAôó1´ª¤ V¥ºu :%.ˆ‘B±‘¸s)•0è%.Á+N—$.€Ð’¸ fø‚¡"qB‘J™¹¤3ðI¶ÄÈt¡3Fâ‚dá ²A‰ ’M˜e-q"4æ’hjIGšç™Iâ‚DAqª(q† fš`JQ_@ x²í%.Àä“MLsD|qž$.HÉòt3I\�|±ÚJ\lò|3J\�5|AÆ'qAÖAqš,qh:­%.È&a¾iIâŒKžo&‰ ²Ó˜obŠ'ŒÛìÏ7£Ä™à‹GŠ"êà ’¦,Œ[pæ›`'Ià‹Í$qA�ç›I⤘o"£—Ï7£¸\ÞõÌ$éÀ»ÈLƒÄ8À|™­4·× ^‘ŸÉÊÄ3Î$®hP¯Gl— 4¸Ñ*ŠkäËs$qÑnbf™‚¸j€° +¥Ñâ²�ÿ"£Ž®«OíU"bfŠ|‘Â�Ý×9ÇRÌÝ)v]ûÏ?N¿þ„à{þÇO_~5­”•¿àwxbíyˆØŒî]©ét„Ž6jÒä!|Ɔ�ˆyqÒ€çE7v¡á6Ÿë/fí2 y›V[�!ØÆH˜cO ˜�«;MÞÃSTĹ@@)—-s'²^M«Â¿ýpÂ0š«¿®ÐÖÃÆoDsBãZ}þðÓé×~ÿáÏ?üÕ~ørúøNï¾ÿÎÜûù·ó‡?<¨9„6уVuðiÉ_OÃE)Ì¿¾þôiþ‰EvÑ{;ÿ4sù<ÿ¼àß§ï;ƒ É1< Þó÷Mãi|bºÜ4„EC)Ž`^.¦\4}i~N§ý݇5Î’W„¤’yÝi¦Û@æ�ÅSÀ|1x�x"AÛÆãþ�§ÈcuÎ�Ö*çc£|N8¼lAAÉðÄ%õ•|Ýö$è É�έÉóHL¢£ÝèËA›Ãô&f:˜ìææ…ô²®äãÌ ¼¦;ñ˧¹_7zÐ^Îu6 çÛ¦ˆ¥ÿ{ëްӄ ŽJö|)þˆ�™rTäÙ&¢%¡ŸBÞјÍq@„‘lÑ3z€žѪ’� øñ/οûTv&˜Û]Œ|?£WmêÚß�"¢äë€afà\LtÛœSú¬uÐw��¥à2·–È&Á[³9À"ßòYÛWlUÉÀJTº4YO)7¸2]ÝÛ€kÓY�nɸz{ÀÑ=À%žÂeÍnSä;÷Fo2Ú˜ÍagyÝÕæøBÀ­+\Ñ—¬4o�„ÂtïS�¾¶mˆ-ŒØ[�@lxoÿbë“á$ “5P•SmÍïmŽ1¦ñ—_ÉiëJ¦PòIà,ûþÁt™’õ>lo™‘õÖ-À·â º6‰-ð ˜Z¾‰xýqtaaÐæ8ÀãûÀ|ã$½x«J¾ +x_d(u>m±Rg=Dãgïdû‡ ¦èn"Ø,ÙiÅ- ŽÙˆI�!¹WqUÉWqwð]2¬Þ‹=‹Z½õ¾U­Þþ!ôRä{ |ÉÆ¤Lâ]¡[г9 ôxW2éó ¡·®äcá«6Ïó £y‰ôF×.­–UǺôZ–\c¾Éî²,ÏW¨�-·¸ÈwÔ7tÛ¼9íÏ2ÞÁz„73)xÍ÷ûË-n*Ë7¸mÈŠ22à´9x-Žd‘s¼¼«JžoåI»Ú«2®¹oà@pCT9PÌI¸†mà6°ï¬G€Û¿·\Ú´Ó®ü¯ŒŽÓf‹ÇÀ³9p=ßäD¢œ_ ÜU%p�BÛºÞÈjÙôÒ$¸õžP3¦²PAÃ`¦ê‚|Þêô$ñΓÞz¨=“Ž’}›þÔ[0uèuÐÅ4ß%¾o¾ºc6Ç�nä‡"2ùWBwUÉ´ DMð/y+-P¬.�”nS–dBºç26‰r–ø%`)ø¸ Õè�õT¨÷-”—V©-6!›h^JùS4=­=†ì˜Ía Kš÷j~îåu�]W"¥ •}¹ØÃ÷vzÕÚU¸»&E¸[Þk;BÆû+¼w¿˜ŒS€¹ã \£wbmŽ*‹”ÃÙäý~Pío‹@�zsSéj¡Ü4£¿,}¹`Üž+/Ëä}]{–É{ë}Ëä½ý¾PÌφ˜´KÓ#c`ÞiKòcŽÙ‚©Cöh�o ÁU¥¥lñfN^ùG¿ç6©eQ§÷hÏjfo½o5³·ß¿S +'Rü¬§£éùÔ¨£v[AxÐæ8`åM½>Yz‚/ǃ𪒒7ú–ÿJÀl¦?5[*Ó˜Mð5,ÙÕx7(ò2¦6ÄÛv†ƒâ˜Ía:Ùkq‹ßžØDõ4#­+}mPìëÚ{ë}A±·ß=ΚAZ–ƃâ Íq È&̪ŸØ‚õ<W•®‚âà w³ÄB’úápØû²'öÖûÂao¿?z$lH–ïýðca×Ç‘ÃtÌæ80õ, νr»éº’ºŒR8CÏ0+P w ·k>ùn�n–¯ûëØ³|Ý[ï[¾îퟀ4¢7¿€Áøñ»Øƒ6Ç�4¿Fg~ÅÆ !½ªdì³pgZº‹"Ü}i®ë°ØN ZÞìüº—ÂO½µfÇ6ÕA›Ã@!h~:zz“η ÂëJ_›öuíÉ{ë}y`o¿/ &`<o ÎmŽAÇ�¹’¢o ÁU¥¿lØû²'ì­÷å�½ýþ ‰ó(‹á¦Íø#ƒ6Ç�©çgÞ¢1[¿†Ÿ"[Ÿt×cdwàºâ—Û»½7Lêýøv°ÞÓ{a3Þ8¯-~ø´A›ã€!q˜‡õ+7c­+ùúgÐúóíy­·Þ÷ š`ÿ`oIÈe§7{€ p6—·Zm¢¨ù™9ëõ+7“®+yí3h}]÷8)‘ÒÁ´?ñ"ˆÆú�î´9N÷ò;ª~âföÓyͺÒÕnƒPšœe•ËܘOò,lßöÞŸ=¹Mo]ZÅ5á­z(xk?ߥ]8œm]hCäÍ|ÇöVßd€«l1<ðKï� +D²ÊÙäx_ÿèT`Ðæ8CÆsS~bËÒóCfUi;G»Ýœs›{Õ=Ë?®QÊù›û­«ÛY;¶2-›‘z_÷ìºë­—–êàx{<¿òìù-b)ÙÍíFƒ6Ç�[â}Úš_¥+ÁÍÁAûeæ X›®cß²üÇëñ­œËÚ9�:0¨½Ìçùq.K×òåœdž!SôŸ®çrz>G˜ë*åxGøH÷�¹rܯ;›ß¦æ]ŒnÆl‡4½•Ññ+³%8|«îÚ§¦>{[·[–M] ›vöá2_Ka¶YÏþ>öU†GB¯(¤qx ÚŽŸUãŒ�çGÜ ­.›Ð*݆c3”wg„§ uÄïLÎ&ì`�A›ãÀÃsðK!ÊÛfžqïl^±÷.)ð+ ß&~‡_âWooÁcÌæ8ðHüÄ–A³Ü.¿x÷|M�»ÓµhûŒ™—§ñ-mÓµYó3M¤Ã·ÜȲ®ôc;½ž:o_>V7×µk?·;Bw½.¡÷eÏëzë}¯Kj/Àp�¹áÛ{Ç$8›¬LˆÓë±GoÚÀŽŸl +1¼r‹Ëº’oû®¢¾î=ï*ê­GV¾—['½ý£gÙ3á6gÚñ®¢A›ãÎsð†»¯|ûÚº’W¿«¨¯mÏ>ƒÞzß>ƒÞþ!ÄøÓCÙ~/ñ車mޱÄO)ñ· ^ ±U%¿Ì»ŠzvßÎzgðí[àÁ»ŠÀP@¼wÎ�¿«hÐæ0À›^½m"%zåZŽñ¶"Á©=w{ó}[Y„ÜÐàŸæ·žc’ÎûV‘8úäùÅ õ%ê‚›E67ù)¾ülnÞÁÍÈ +óu!8ÅŸ;ägÛˆ·\ð®@úã~¿^pª´¹Ÿ¹ÿJ?^©„çlvÚ´4ß’šË±Ü*w$®w0¦²až†¹Lž³i3¯crßÔ®¶eSÂäË箹>…é‹fú*‘Sžy)ž‰Æ|æ¯`$íЋsóš©AÌùŽåô±ÇŸk)þ"ÍŸ„â Só·sùŸ§ŽùédÀ*|�<ª®ßjÓ“˜·ïÞŠßNü­>ÄH»ì ˜…󯺞‹·@ÝÈ.ྨòmI畞ÍõäΗ_­/WÃö¾˜1QðvûrÄX½V,aL/æ«×˜„_ÅüªØ¤Ü|ª+>Ÿ!\NHmÙ儋ᦘwr,Bß uSÝ"æ—²¶þškŸCX]o›Î4Ý_ÊÚØtç#áå„jÝ­ôM”òWÖÊ©JëZ]e®q*W©/%k‡Pí'At9 Âït95Ϫ¾é5þVÍU˜ +�¨–Ë¥œ ºœÄróÙ|í©XK¥Å4—–_\Y îRmxA6µÑ,�ü×fŒhW~]‹yslík�ÜØNx9ñƒ�øíä£PÚ/\¡}�^+tÍy«8é/‹”_Lvý C³ÈøKüÿ•*|•2óL¿ª�â¯õ,GK%<6«xÝH­> +endobj +130 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 799.173057 99.933071 780.423057 ] +/BS << +/W 0 +>> +/Dest (cb9-28) +>> +endobj +131 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 780.226036 99.933071 761.476036 ] +/BS << +/W 0 +>> +/Dest (cb9-29) +>> +endobj +132 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 761.279014 99.933071 742.529014 ] +/BS << +/W 0 +>> +/Dest (cb9-30) +>> +endobj +133 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 742.331993 99.933071 723.581993 ] +/BS << +/W 0 +>> +/Dest (cb9-31) +>> +endobj +134 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 723.384971 99.933071 704.634971 ] +/BS << +/W 0 +>> +/Dest (cb9-32) +>> +endobj +135 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 704.437950 99.933071 685.687950 ] +/BS << +/W 0 +>> +/Dest (cb9-33) +>> +endobj +136 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 685.490928 99.933071 666.740928 ] +/BS << +/W 0 +>> +/Dest (cb9-34) +>> +endobj +137 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 666.543907 99.933071 647.793907 ] +/BS << +/W 0 +>> +/Dest (cb9-35) +>> +endobj +138 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 647.596885 99.933071 628.846885 ] +/BS << +/W 0 +>> +/Dest (cb9-36) +>> +endobj +139 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 628.649864 99.933071 609.899864 ] +/BS << +/W 0 +>> +/Dest (cb9-37) +>> +endobj +140 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 609.702842 99.933071 590.952842 ] +/BS << +/W 0 +>> +/Dest (cb9-38) +>> +endobj +141 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 590.755821 99.933071 572.005821 ] +/BS << +/W 0 +>> +/Dest (cb9-39) +>> +endobj +142 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 571.808799 99.933071 553.058799 ] +/BS << +/W 0 +>> +/Dest (cb9-40) +>> +endobj +143 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 552.861778 99.933071 534.111778 ] +/BS << +/W 0 +>> +/Dest (cb9-41) +>> +endobj +144 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 533.914756 99.933071 515.164756 ] +/BS << +/W 0 +>> +/Dest (cb9-42) +>> +endobj +145 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 514.967735 99.933071 496.217735 ] +/BS << +/W 0 +>> +/Dest (cb9-43) +>> +endobj +146 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 496.020714 99.933071 477.270714 ] +/BS << +/W 0 +>> +/Dest (cb9-44) +>> +endobj +147 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 477.073692 99.933071 458.323692 ] +/BS << +/W 0 +>> +/Dest (cb9-45) +>> +endobj +148 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 458.126671 99.933071 439.376671 ] +/BS << +/W 0 +>> +/Dest (cb9-46) +>> +endobj +149 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 439.179649 99.933071 420.429649 ] +/BS << +/W 0 +>> +/Dest (cb9-47) +>> +endobj +150 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 420.232628 99.933071 401.482628 ] +/BS << +/W 0 +>> +/Dest (cb9-48) +>> +endobj +151 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 401.285606 99.933071 382.535606 ] +/BS << +/W 0 +>> +/Dest (cb9-49) +>> +endobj +152 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 382.338585 99.933071 363.588585 ] +/BS << +/W 0 +>> +/Dest (cb9-50) +>> +endobj +153 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 363.391563 99.933071 344.641563 ] +/BS << +/W 0 +>> +/Dest (cb9-51) +>> +endobj +154 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 344.444542 99.933071 325.694542 ] +/BS << +/W 0 +>> +/Dest (cb9-52) +>> +endobj +155 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 325.497520 99.933071 306.747520 ] +/BS << +/W 0 +>> +/Dest (cb9-53) +>> +endobj +156 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 306.550499 99.933071 287.800499 ] +/BS << +/W 0 +>> +/Dest (cb9-54) +>> +endobj +157 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 287.603477 99.933071 268.853477 ] +/BS << +/W 0 +>> +/Dest (cb9-55) +>> +endobj +158 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 173.921348 99.933071 155.171348 ] +/BS << +/W 0 +>> +/Dest (cb9-56) +>> +endobj +159 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 154.974327 99.933071 136.224327 ] +/BS << +/W 0 +>> +/Dest (cb9-57) +>> +endobj +160 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 136.027305 99.933071 117.277305 ] +/BS << +/W 0 +>> +/Dest (cb9-58) +>> +endobj +161 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 117.080284 99.933071 98.330284 ] +/BS << +/W 0 +>> +/Dest (cb9-59) +>> +endobj +162 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 98.133262 99.933071 79.383262 ] +/BS << +/W 0 +>> +/Dest (cb9-60) +>> +endobj +163 0 obj +<< +/Filter /FlateDecode +/Length 4884 +>> +stream +xœí]]«ä8’}Ï_‘Ï­‘¡/húaahhØ�bf¡Ø‡ª;U3,·º÷aÿþžpZ²œŽÌ”oUV¦»¨êt„ +KGG!9l»³ÅŸïþÉìLÎ%E>¿ü|úådM +ÿM%V“ú/ø›ÂÙYN&¸s8ÿ,J&•àS<¿žðÏÕa_üõô·?œþµ¶qgoJ‰Þ…ó¯ŸDÅdRNÉEU ²ŽU&%¢¢ŠÎàKÑTp#$ö¼U%¸Á%M7Øû¬¨2Ü N޶ª7|r¬©à†+!)*gá‡óÖª:8b™É+:LD£GMç�‰¹ø¢êt.yMGdbbœ¦+&Ʋ¦cøŠuš.À—à˜­¦ƒ/L9iº_(’UuðÅçDš.Á�Ö)Š.à+«:øb£uš®� %3«º�Í)ouÞ2‘ÕtΙl’ªÃˆB'Ťè<|‰6U_Y¯é¾0þh:ðD ”³2Z½Œn²ä4]€/Þ'Vuð�¯1€�ðŦ¨QF�^Ò8À§d¸xÖHÀg2œ9k,às1œi4àK0KÒx€¬ƒÎ;�È—ÀQcrð…1rU|¡Â�‡/( q|ñLØ–�� t˶8� |ËÖE� „ 7­ÆÆ¥YãåJEãç¸Sãéb¸'� ¬K!z� ´Kœ£ÆÞ%vVãïÁRÕÁXã°£!—Iãï’³Iãïby� Ы8Œ+Æçl5.`ð®Ï–5.`ð®O˜T]2ƒ¤qƒw}À%h37x×ë5.`ð®g5.P øÇªÑxôp¾€`5.À|�'� p2ã–h\À»®`úSÆ4ØÊ¸\¢Æ¼ë2ºOÕãZ\·heãb,ð.&*Ò¸ €wAŸYãp¼ÁŒê5.à]G˜©5x×ùb5.à]Ä AãÀÁ8`~3ꪮ[rÖ¸ €wAK^ãÌÂÆf0‰ªK@r€Œ�EªqAïbz/Dð® DDð®e„=ª¾Pö ®�ÃVÓV�õ` +MÞµ=¬éÀ»Ö¦¢qAïÊ´©qAL"ðYã8h{� bfSRŠÄb¡Cȧê¢Áqи Y(KÕÁN¬qkS¨d� ’‡/佯ÉÄ  "0Å!úV—ðpQ× _)j\&3¹0k\�BÄz ­ªé¢79�®U]†Î%� Rbƒ©Øi\€µ”Éô€à�„KÀ èk\� +|ÁPѸS‘É‘¹¦sðA¶Æˆt¡sNã‚ìá ¢A� ²ÏXeF«qfh¬%ÑÔšŽ­¬3³Æ™£‘PQã ¬4Á”ª¾€&4.@ÿÈb;h\€Å›Xæ¨:øB�5.ÈÙËr3k\�3|ñÖk\lÊz3i\P,|AħqA±ÑH˜¬qh:k5.(.c½éYãŒKYof� +Y¬7±ÄSÆm¡(ëͤqAaø¢¨:ø‚ ©(㜄õ&ØIÓEøâ k\Pb”õfÖ¸aÖ›ˆèÕ-�,ëͤn€wC3i:ð."Ó¨q°ÞDd«­í-ˆ7$Ägº2ËŠ3«;Ô0·ª[Ü‹Ù*©{ä+k$uÓnbe™£ºk€iJgÕm þE<ÆN¸ì>õ[TpH˜3s’‹,Œè¾­9–bt£Øeìלþø“ïùÿ{úü‡i§¬þq?q”…u�!â ºte¦Ó1:Ú™IÈ“‡pð-6âD*‹“´8oº‰“˜Š1Ý–sûáÖ.ÃcñÙ!˜™®Œûz±Rpè*Šº¯»m¾–¯TëÅðÃòÁÛø´ûÁ8mÆ{ÚÀì\Ýiò5ýñÝ�ïþúÓ¡ÚwŸOï¿—ðî‡ïÜ­ÿÿ÷ùÝŸïÔ�ºÀ «:ä´áÃå4ü‚ßnþ�Õ6çËïðÓü;@ÎWúÙ&”î;�ÈA1jæ­îï�§q‰eòÖx <vmsú„‹±—úÿôn�¤ #ì„Ëàc„Z \ÿ|c&oß30‡•4‚KaOÄܪ9-ÇgŸgìT,ÍòŠ·†±0c..Xå†ÉGÐÁDL”2óÖ‘Ü5ÐnŒGp·Àvk.;�AÇèÁ¦-¥Àýl:iÒ»À´9 ò°òÂâüáž½u%ï;ŒõØ +eÆÔ•n…¹½X>¥ËïÊ›�_?Ìåï_% uó’o®ã!t/§.H`¾±hEÂb^OúÖþx¡KtP¦hÍ�—ô¼c6Ç/Vúžáæo>+ÎÉfY'¬NºkýÿÇœi È +Ј�¸ÍO; 0Pj®ðÚtnDD˜#x.;nè¸ô°sÇlŽÓ¹InQ�ü3™iUÉû�Ù9Âc¹‘ÈW”ó=žÜ°|s²Å—ë‘Ù­ÐÖþCdY›åÖ²5,[—îˆÆl"/û)¨¶¤'‚h]Éû~ôß +Ûy>þ0³Ëƒ.`~ð¾�J]·8BP™�;ÓÝl"švKïvï Íqº×Ç)0,oàˆ�Ý-+ +ô]pW•¾ï£��Ì…³WG�F>®#•Z®E3¹+Ù<† ºÍ¸~·Š¯�#–)e‰e‹uk½´Ônr'&1#P ²qŸó´ }nc6Ç�›ÜÑ•[ Y…ÁAÿÿ�—Qî3þâ·ùÇËñµ\Êú™là_æó|œËò¥|=§Ã±ÈTý‡Ë¹ÈÎçˆs]µlkûyÜ? +{üºÁ>qZï¹ävÀaÌæ8pÀÊ „3©pøVݵ N]}þºnZÖ[4ÿ&?ûð2_Ke¶Y/þÞ÷õª•:ç³×j¯Àp�»âÛ[Ç|À9›l”íIöK„yè€Çl`¶’)e%Ãÿy»*ëJ†vUîz ò¼3ç Ôý Ë ®­õÐMªv�kkïî(;2X쓤±p’{ÜtÏýàmŽ8�É›|ᙀ[U2¸Ýwß9N©Ý1*µ=†Ø² ¸µ�Xð�ý]ˆ‘dWG+YpÅá +¨Øøbc6Ç�X@Qº÷™[UòE‰;w�—ÉwëÞÉwk½oòUZÀ‹·€q„vÄÓS^…“��7fsàIbÈèœgoUÉï 'ÙJŸïMw@ÚX�уnŠìû» (ã1Ÿß‘7hs ‹ Àã×3SAÖ•üV©o[/öä¾m­÷%¿míïA/àˆõ|ÎÑ¢)yú.òÆLŽy&ðV•#KjëÓžD[ë}YR[û» ¤\»¼¥o4KjÐæ0@,Vž#bŸú®¦U%¿U–ÔÖ‹=YR[ë}YR[û{Ð+®“¼ØËÍïùÝ¢w¡7hsè‘<çS|fRͺ’/zOX…c½KhgXV�CiãÓžÉxk][æ-WVŸÿi6þê\<ët˜2<ô¥p¼mÐæ80 ZÀݧ2䪒–ûU;§(L¯àè®:™¯Î¡½J¬BxðÕa혰P-Š¿�§ñPÌô5›¬X�Lã1Ih*ªý�ܲ"w)>òüþŸˆÝR´9H³<%oÛ&HW•|.uëòÓ{ín½KoôdäYÞ– H*?†érzk=ÓåF´b¦Eú�(Œ/{mÓéUÈ.1Úç™oA[ײʊ›Y±å‚u€k1)Ûå%‹=»ï*ìy)¨b>´—ØŒG p•ð±ÊÆùËü.j¬Õ…s´†ÐíË«­y€»é +Ô75ŸÝÕ›‘_q¾âˆÈÈGè0“LC=É{Û/púÏŸÞý¸¾YÙöL’\¨ôd�/óžì÷ËÖÈ32ær"æ²"û8—�ó­…8—)ó­7ß—2¡«+^lë\;ùòé‡ëæþå§ï¸é[16N‹…’åÓFîb$ êåà—Ú¼njw¾a9}‚ï—VJþ…Èʇz$Yajþþ`.ÿËÔ1?Ÿ¸E®QÆÖå Zv˪öZüz’/¨±"F°çÅ"œÚv.Iíº’½€ +\—¤`ìü³´“S¨?}¨W#ö¡š ]ÈÃõH°z©XÂ2º­X®Þ"�½ˆå+tÙÐ|›+!VŸ!\NÈ}Ùå„‹áC±$¿/°Ú®ºE,¯_­e}ûYZŸCØ\ï›ÎuÝ_ËúÔuç=áË ÕÒµôU•Ê·¯ê©jëzÛdÔ9Uš4Ô’­C¸õ“"z9)Âïl=5Ö(®é»^“/ˆ\„¹‰[¹RË)¢—“Zn>[h=•Z©¼˜–Úò‹+ Ô)·†WdSÍÒ$ŸÕìÆˆ¥ús-ŽÒµ¯mîpã7—“<žBRJ‡…+l¨Ðë…Ô�·‰³]ð²Hå­Ô—_šU&ß_�/TšT˜gúá¸AJ2¤—£¥›M¼n¤^ë°Ör§Ím¤8wJ ³}{¹l•òBº­tk±•´k²NžJuOHª‘ÇZìêšX(¬¶OãÊ^h«¨n‡åוxñ3´¡l«,ºî¡�wÇÆ�¯½8µwòAœæo;o‡ù*|™&6¾ ôs­d{Ûf»¥²N¸8RXÄ �¾Nâ:Z;I´^.ƒL›q_Nÿ> +endobj +165 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 799.173057 99.933071 780.423057 ] +/BS << +/W 0 +>> +/Dest (cb9-61) +>> +endobj +166 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 780.226036 99.933071 761.476036 ] +/BS << +/W 0 +>> +/Dest (cb9-62) +>> +endobj +167 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 761.279014 99.933071 742.529014 ] +/BS << +/W 0 +>> +/Dest (cb9-63) +>> +endobj +168 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 742.331993 99.933071 723.581993 ] +/BS << +/W 0 +>> +/Dest (cb9-64) +>> +endobj +169 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 723.384971 99.933071 704.634971 ] +/BS << +/W 0 +>> +/Dest (cb9-65) +>> +endobj +170 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 704.437950 99.933071 685.687950 ] +/BS << +/W 0 +>> +/Dest (cb9-66) +>> +endobj +171 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 685.490928 99.933071 666.740928 ] +/BS << +/W 0 +>> +/Dest (cb9-67) +>> +endobj +172 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 571.808799 99.933071 553.058799 ] +/BS << +/W 0 +>> +/Dest (cb9-68) +>> +endobj +173 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 552.861778 99.933071 534.111778 ] +/BS << +/W 0 +>> +/Dest (cb9-69) +>> +endobj +174 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 533.914756 99.933071 515.164756 ] +/BS << +/W 0 +>> +/Dest (cb9-70) +>> +endobj +175 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 514.967735 99.933071 496.217735 ] +/BS << +/W 0 +>> +/Dest (cb9-71) +>> +endobj +176 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 496.020714 99.933071 477.270714 ] +/BS << +/W 0 +>> +/Dest (cb9-72) +>> +endobj +177 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 477.073692 99.933071 458.323692 ] +/BS << +/W 0 +>> +/Dest (cb9-73) +>> +endobj +178 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 458.126671 99.933071 439.376671 ] +/BS << +/W 0 +>> +/Dest (cb9-74) +>> +endobj +179 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 439.179649 99.933071 420.429649 ] +/BS << +/W 0 +>> +/Dest (cb9-75) +>> +endobj +180 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 420.232628 99.933071 401.482628 ] +/BS << +/W 0 +>> +/Dest (cb9-76) +>> +endobj +181 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 401.285606 99.933071 382.535606 ] +/BS << +/W 0 +>> +/Dest (cb9-77) +>> +endobj +182 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 382.338585 99.933071 363.588585 ] +/BS << +/W 0 +>> +/Dest (cb9-78) +>> +endobj +183 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 363.391563 99.933071 344.641563 ] +/BS << +/W 0 +>> +/Dest (cb9-79) +>> +endobj +184 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 249.709434 99.933071 230.959434 ] +/BS << +/W 0 +>> +/Dest (cb9-80) +>> +endobj +185 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 230.762413 99.933071 212.012413 ] +/BS << +/W 0 +>> +/Dest (cb9-81) +>> +endobj +186 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 211.815391 99.933071 193.065391 ] +/BS << +/W 0 +>> +/Dest (cb9-82) +>> +endobj +187 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 192.868370 99.933071 174.118370 ] +/BS << +/W 0 +>> +/Dest (cb9-83) +>> +endobj +188 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 173.921348 99.933071 155.171348 ] +/BS << +/W 0 +>> +/Dest (cb9-84) +>> +endobj +189 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 154.974327 99.933071 136.224327 ] +/BS << +/W 0 +>> +/Dest (cb9-85) +>> +endobj +190 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 136.027305 99.933071 117.277305 ] +/BS << +/W 0 +>> +/Dest (cb9-86) +>> +endobj +191 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 117.080284 99.933071 98.330284 ] +/BS << +/W 0 +>> +/Dest (cb9-87) +>> +endobj +192 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 98.133262 99.933071 79.383262 ] +/BS << +/W 0 +>> +/Dest (cb9-88) +>> +endobj +193 0 obj +<< +/Filter /FlateDecode +/Length 5023 +>> +stream +xœÍ]ß‹$¹‘~¯¿¢ž +KŠÐ/XöÁ` †…3 w†Á=íÓkXßÃýû÷EVJ©ÌŒªTõô@ÎÐÝ•!…©}¡TªÜÕâÿ¿2;“sI‘¯¯¿^~»X“‚Å¿©Æêb*þ ~R¸:ËÉWb×_…@ɤ|Š×· ~m.ûêo—ÿùÝåßkwõ¦”è]¸þç)b2)§dƒRTPd)E!˜”|ˆJQt·XŠV1BbÏû¢1¸ä A ö>+Eb'Gû¢1|r¬A WBRŠœ…Î[«–AËL^)sÁD zÔʼ31_Ô²„2—¼VFdbbœVVLŒ1d­Œ!K(Öie²Çlµ2È”“V! E²jdñ9‘V– ‹Çè¥,CXWVË ‹�Öie…L(™Y-+(³9å}™·Á„Ldµ2çL€m’Z†%Ť”yÈm(jd d½VF�…ñ_+NJ9+³ÕËì&KN+ �ÅûÄjd�ò5ð²Ø5À 2‚Kø” ÏøL†3g |.†S" | †cI�u(óN²�%pÔ�€daÌ\µ ²Pa ÈCTа€²x& h˰ p˶8 xËÖE € 1­†Ä¥YÃäÂ”Š†Ì%`§†ÐÅtOP—Bô`—8G ¸K쬆 Ü%§ZY`À ¹L0p—œM0pÓÈkX­ØaÔ°¶b|ÎVÃîúlYÃîú –%ƒ9H0p×Ü‚æ¹�»>X¯aw=û¨a Ŭ w!A VÃø{”yÒ°��°DÂÜuîO™Ó@+ãr‰à®ËPŸZVŒKqeÞb”�‹±hX€»pT¤aAî>³†Àx�ê5,À]GðÔZp×ùb5,À]Ä A؃q4,€3ÎÂtÕ²blÉYÂÜ,y à…�Í@µ,’Ó°`l,âP "pî½hX�»6iX�»–ö¨e�…²×°q Ê0m•9�`ÕX¤ÐÊ€»ÖAÃZp×ÚT4,ˆÀ]q›Ä$Ÿ5,€€Q°×° f6%¥¨aA,eùÔ²hp4,H„ÈRË 'Ö°�µ)T²†ÉCò^Âä! B ˜â}«éd�¹¨ùCDŠÉL.̤‘�aTµ²èMN€kµ,£Ì% RbWì4,@.e2&½†x#á’†eŽ5,H²`ªhXWd²Gd®•9È‚ [ÃDº(sNÂì! ¢A ²ÏÈ2£Õ°¹$†Z+c+yfÖ° s4*jX€i‚LH©–AÀ„†Ð�$ÛAÃ$?H6‘æ¨e�…kX�³—t3kX�3dñÖkXÛ”|3iXP,dAħaA±ÑH˜¬a`eÖjXP\F¾éYÃÌKÉ7³†…,òM¤xʼ-%ßL†,!ŠZY4eÞ“�o�´²Y|a JŒ’of f ßDD¯. dÉ7“º\Ü Ȥ•w™F p�|‘­–Û[oHˆÏôÂ,gVW , 7À·ªKØ o•Ô5 ð•I]4€˜È,sTW àVQ謺l`�¿ˆÇx‡ ·Õ§~‰*Â|fNr“Ó‚Ý·œc©FwªÝÖÇþó�Ëï_à|¯ÿøßË×ßM+eõ¿ƒñGI¬ƒL_ nÀ•™šc(Ú™‰È“„ð=<"D*‹�°8/º‰�pÅp·åÚ>¸µÈ�Xdvf¦;ã¾_d +ª¢¨Ëú4ÏGÉJµ_L?¤Þ�éZ 0ˆ‘‘cO ˜�¨O²|„¤èHb�ˆZT¼`'&¢^Ë«ÊøtÁ4š»¿­Ð¶ËNnxsÆàz{ýôëå÷Ÿþôé¿þ+ºýôõòùG ï~úÁÝûû·ë§??è1„u)V}H³ü‚Ÿ|k*¸ÛßvðM„´¦3²ñ÷uü¿ví¼Üê²V·¶‰ú\ºÏµî¶ßÇ·ÈHí¶a;Œr‹îï?0Ǡ왆—Š ¼¨ß±×[˜n9ooç�ŸÖ–›ƒa„¹0àœ!oÉùccy—±GæŽ`Aß±�Ø4bíH6cÐWmN6ýË<èuÀÃÆþhVˆŸ¯¿àçõ°Kï§PÍ컬6¶Õ(€a£-c**Òót¤ÒAžÓèSi$f½ûŽÀµîäóŒ²Z,uŠhPPy�/J{‡0á&$%Î +÷ÀÝtö£ðË­„;F„˜Wü­ä±ðà =ÅrdDc<ç1"ÌgÍØdx¿­:ùÜC—5VOFåg7n6¹¼#“(Ъ�J_Ç&Ͻ˜9…{ÄÀ�s¥ÌÛáœ<Ñ/ÖF{ÇÀ"⼩Èh9!½>2°1žóX’OQü÷4°U'CV}S7Õzי̮ïcƒë fÇ=bp:@Àa5~‚Áñ=ƒË’+bs’=Î"ÚÏi ÎËŠ +º-é;ܺ“!ƒÛû¡ Çé©PŒJoÇ&¶ âž{ÄÄßó?21ñõÙI�vuP€TG™ã ÏyLÌÇiþ•ï‰iëN&Wò¢`–ÿxgš§Å˜I‘áØð +ÔæRñ÷ÀÈC~Õfu8S/O†³¬l"O(œ|<4¼1žóžžÅ˪՞{hÝ©­[)üÖ�ˆ²qþ¶?dtñr�ç<äq¯ò‘´jôs?ßiýè£ÑÝx4ҙîŸg1÷ÜÏ-b*wù ,&$r”å™ë°Kc9�)%ÙFž©}¤)­�ÙvîäxÍÛÉFgsqJ[‡æâäùB— q�ÜIç¸ö½7þ�±älb°Q–ÊG$yNc.le×—•·>Î\Ö�ö‘HEx˜[]]»Ž›(¦E/ã+Ú{ÉžYžÜs?·<©ŒË¬bx®‚kÙ 3šÂòœÇüäŽ|á#ÍoÕèç.Zš"¨jzüxOÁ6sÚÕ}{^Û©'×3¹Óžû¹ÜI÷Ó:–üÚýÕM’dŸy´²�,0ÙRqG&9Æs“ ð÷%@íªIN¦°É§ø‹’T÷[K´í$Û¸kx{-à£Ü ^ÎÈÛmÄÓyÉ&X⑺ÆxΣ.ÙÆ2æÈG"ȪÑÏ?~<*,ð¾¯�ð¹…¿{îT y½Iã�‹±À‘uŒ¨?GSˆ¦�¬�íiˆå4æ,¨Ç§�m$Ãæ´n´7§É„Ƴ®.Þ·yF/aðž{Äl–„=ÿ£…¸€6Jäé5‡Q·1ÈsÑW°2’Å�ÜT¶ntµæ»ÝUö¥s'5È>^ÒëÒø}_Ϥñ{îçÒxåNŸŽNC¥>f“È ZOGè4Ær# B�D:: C o·YÒûPfÕáÍ(žÆŠ]áëœ@Æ,/P»Û[µÞ:w¸Ô7ÈsÊÙ¶È+òCÏŠâò™ò¼t§Å"¹s(váñ¿<Ø�î?"h×q-Oß—*Gîîb£´n‹ê߸|nýP‡cuæ÷m·kgDEñ^Žå¥’,ï‚ÑÏiŒ(Zy/r:CãY#âþ¡`ê{X™ßnøú·=dèò�­Q¹jHUAwl×ÎÑ–è' ²¶yÏ!¶ëußF“§öÿu-s»'ÏÈ¢‹A­lÌÁàA·\üR òœÇÈDHbv:R9 ‘“wîÒf0Å ÍïR8¾Õ«F1]φˆ0§ñNô0·n?MY¯kÃr_–ö­tP–ö›"sÇS:ZØó»—ù¾J×¾_÷·sª[#ÝÐÿ¦|Gÿ² xÿ´O5~Ý0YN]HѺۆ!�Dþ(ä9�ayÝ$9§o·r=‚|€Ksv�¤ò¹¢bí³*÷~£l0µƒååäL�xˆ,c<çQ`w î±�[Ó ÑMÔÍÔÉ]ô0¿™•-T}�Q”*í\T·zìXc#âÐ m?¤DDÓ‹ú�U8Æs&+@áƒÛòT=¿¶÷­WS ·Ï‰$DÜ=ê_ì¼|Uå®­§ÂHDWÆÆ1ÊEôŠ%Ð�ÇXΣBy¯6£ë�Gs §Íõy +ß_”Nì ùL²QŽHðv:VâñÈŽñœghƒ2’ˆ�‡ðÚP»nH»a_ÚGz­ÍÓÙÕk‰¾kCWh”=srꔼôœwô˜rŒå<ê̲ÛÍʱ}C3¥ ¶ uwVȉ'�’œ¸0ºMv�ç4ا““H޵|׬ ëç—¼w{^+ïfMK¸Ëúú}úÑSç"Ç|¥Rät�pøm�ç<Ê!Ùæ AÙ»”³Z§ê¡©{\:).ìÔ¼Y²Ü)¾¶ÙÇ€›L«)z�ý#Øf4�Çv¼‡ò݃Ëç@7*–³‹‹t%ËÆÇ4Ï󨍯xÎcTAp>CÌwÕJY›5šºîC½?DŸ¿Í0>Q¢ää(¼�'äÃõ£Ažó(?Ë.nGé}ˆžDŸ63¨ác—=öÙ\o ¯keïÖZîxìŒ1.h1ðp‚0Ær+»¨ÙÆw¼ ¯ü­Ñf{4�ýWùѸ¸b\Lr¸¡—(Q†ãÈëòœgˆI6ÇßqjÅÆëú°l µ]ÇìæS›eŸ:·”Û*õ7éwý¶¹tׯðø‚(iü5‘Ažó(;€CÜ÷ͧQ…W‘ÃË‹�üÄ9 ƒ<çê,û`å4Ùï]öåþ³€Õ9R¨GvñAöåŽJŠìî DOœ­2Ès•LÇڹęßqÁ¨NºéпäR1Ib„?tºøË|žÂT{%„Y.ä€Û]Žçk +8¬r0ÞÓ©§Í]Ýæt7×8h„§0òE”¯žå釜=yÆÿúùÓŸ–aôõ’@ºÜ®Äº®®¼ÞLRlÒËFÅ<›é\Oè¡=ëµÓs^;‡Qþõ¶ +;Õ™Ç�»=&›ê„®¯xã­#Íïn‡û·KœÎ:uÓy×6NÑFÉr<1²9gø*ç«fKìêðºi@Üõçô5"¿µZò$+‡�ËÒú4üýÅ\ÿ·I1¿^d‡œÜ£Xîí[ìD–Õ•-ùí"ßÁ +nÉ’…8´­-y·¡½bæ'S¶5);,­q +õ£õn„?T69"Fö=Õ+±Õ[Ç +œÑíÉr÷9È�,” ÍW±‰\*�¸4È}Ý¥Á…ñ�,[bØm×ÝB–¯j]ß>–¦s›èýйNýµ®O�:_/è–¶Ô7•*ç÷צêèzÛhÔ U5ÔšM!Üô¤�^/ +ñ[›–hª•wZ“S�oÄ\ ‰[½Rë)¤×‹Zon-4M¥V+/¬¥Žü"Êbê”ÛÀ+´iŒfj’¯ê戥úqMŽ¢�ªk¤?‹Ýøñõ"Ûvä·KHJí°`… Õôz"uí6r¶‹½,Ô”ëPajVšœ!+¿oPU�gúน”,-WK'27y=H==6Ôamä`$·£¢í”šÍöãå²Uê è¶ÚmÄVÔnÈ:z*U<©k²kV×Èau|VöD[…@w 94S~[‘9C›ªÁ¶Î¢ëÌ=´vrlØùÖ“SÓ¸“C½›¼­ÝÎæ+ñurl¼%‹éçÚÉB–­›Õ|Zgq  °�}›Èu¶6t’ÒêÇe’i÷õòÏËäæ</±i$'ßQÑGGîú¨ógüüëÂןë¡È7?îmC ß°uEî=™|£Q$Ë7Ub›6Ñsû Ùå¥n¨ÖÐü¸÷^óÂn`¯5]CP×J{bXư#ûfºÞQ72áñu3Š-�ùVÝ,ûvIõæäÅ9N»J…‹þvp™—2Z\òµkWRuqé(eß1â¢o—]‡e‘l%¦dßIz‘Ÿ{U�ôÕ]ta„\ÒRÆ‹›í›®´é.º*�©¿èf×wZVò(B¿{z}³Þg‘c�BmÐÞ¨o=µÝ˜PàéTš.ãú²ùšÞ{ª“w¡Öus�Z�³L�%´àÕEo£5/ls…ÐwÊ•¶ê´:Š ÙJk-¦*SœÙê°LwœÕQJ-¦X¨ÿìG:ôZiƒz­Ä]]i·z¼-Q €BoÎi¹;»Ôl±dVh±çnT^jR¥íûæußÕÛ^»ÛàE�¸D¦va »šï¿÷Ì�Ïfµ@«UÿO+./_#GÍ.‘§é›!mŽÂòå>‰s·¤ñ4Ïã5ŽýJF]ãè{‚: Ùää;>uÞPPŽ º¦ê÷êl²Ë_¹¥ç@YÂY`ÎîVp¦/yÿy!§]&Iå;I‚Þ,_E•¬S—tÜz¯aÓøÿs8®1 +endstream +endobj +194 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 193 0 R +/Resources 4 0 R +/Annots [ 195 0 R 196 0 R 197 0 R 198 0 R 199 0 R 200 0 R 201 0 R 202 0 R 203 0 R 204 0 R 205 0 R 206 0 R 207 0 R 208 0 R 209 0 R 210 0 R 211 0 R 212 0 R 213 0 R 214 0 R 215 0 R 216 0 R 217 0 R 218 0 R 219 0 R 220 0 R 221 0 R 222 0 R 223 0 R 224 0 R 225 0 R 226 0 R 227 0 R 228 0 R 229 0 R 230 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +195 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 799.173057 99.933071 780.423057 ] +/BS << +/W 0 +>> +/Dest (cb9-89) +>> +endobj +196 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 780.226036 99.933071 761.476036 ] +/BS << +/W 0 +>> +/Dest (cb9-90) +>> +endobj +197 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 761.279014 99.933071 742.529014 ] +/BS << +/W 0 +>> +/Dest (cb9-91) +>> +endobj +198 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 742.331993 99.933071 723.581993 ] +/BS << +/W 0 +>> +/Dest (cb9-92) +>> +endobj +199 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 723.384971 99.933071 704.634971 ] +/BS << +/W 0 +>> +/Dest (cb9-93) +>> +endobj +200 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 704.437950 99.933071 685.687950 ] +/BS << +/W 0 +>> +/Dest (cb9-94) +>> +endobj +201 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 685.490928 99.933071 666.740928 ] +/BS << +/W 0 +>> +/Dest (cb9-95) +>> +endobj +202 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 666.543907 99.933071 647.793907 ] +/BS << +/W 0 +>> +/Dest (cb9-96) +>> +endobj +203 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 647.596885 99.933071 628.846885 ] +/BS << +/W 0 +>> +/Dest (cb9-97) +>> +endobj +204 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 628.649864 99.933071 609.899864 ] +/BS << +/W 0 +>> +/Dest (cb9-98) +>> +endobj +205 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 609.702842 99.933071 590.952842 ] +/BS << +/W 0 +>> +/Dest (cb9-99) +>> +endobj +206 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 590.755821 99.933071 572.005821 ] +/BS << +/W 0 +>> +/Dest (cb9-100) +>> +endobj +207 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 571.808799 99.933071 553.058799 ] +/BS << +/W 0 +>> +/Dest (cb9-101) +>> +endobj +208 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 552.861778 99.933071 534.111778 ] +/BS << +/W 0 +>> +/Dest (cb9-102) +>> +endobj +209 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 533.914756 99.933071 515.164756 ] +/BS << +/W 0 +>> +/Dest (cb9-103) +>> +endobj +210 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 514.967735 99.933071 496.217735 ] +/BS << +/W 0 +>> +/Dest (cb9-104) +>> +endobj +211 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 496.020714 99.933071 477.270714 ] +/BS << +/W 0 +>> +/Dest (cb9-105) +>> +endobj +212 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 477.073692 99.933071 458.323692 ] +/BS << +/W 0 +>> +/Dest (cb9-106) +>> +endobj +213 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 458.126671 99.933071 439.376671 ] +/BS << +/W 0 +>> +/Dest (cb9-107) +>> +endobj +214 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 439.179649 99.933071 420.429649 ] +/BS << +/W 0 +>> +/Dest (cb9-108) +>> +endobj +215 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 420.232628 99.933071 401.482628 ] +/BS << +/W 0 +>> +/Dest (cb9-109) +>> +endobj +216 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 401.285606 99.933071 382.535606 ] +/BS << +/W 0 +>> +/Dest (cb9-110) +>> +endobj +217 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 344.444542 99.933071 325.694542 ] +/BS << +/W 0 +>> +/Dest (cb9-111) +>> +endobj +218 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 325.497520 99.933071 306.747520 ] +/BS << +/W 0 +>> +/Dest (cb9-112) +>> +endobj +219 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 306.550499 99.933071 287.800499 ] +/BS << +/W 0 +>> +/Dest (cb9-113) +>> +endobj +220 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 287.603477 99.933071 268.853477 ] +/BS << +/W 0 +>> +/Dest (cb9-114) +>> +endobj +221 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 268.656456 99.933071 249.906456 ] +/BS << +/W 0 +>> +/Dest (cb9-115) +>> +endobj +222 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 249.709434 99.933071 230.959434 ] +/BS << +/W 0 +>> +/Dest (cb9-116) +>> +endobj +223 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 230.762413 99.933071 212.012413 ] +/BS << +/W 0 +>> +/Dest (cb9-117) +>> +endobj +224 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 211.815391 99.933071 193.065391 ] +/BS << +/W 0 +>> +/Dest (cb9-118) +>> +endobj +225 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 192.868370 99.933071 174.118370 ] +/BS << +/W 0 +>> +/Dest (cb9-119) +>> +endobj +226 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 173.921348 99.933071 155.171348 ] +/BS << +/W 0 +>> +/Dest (cb9-120) +>> +endobj +227 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 154.974327 99.933071 136.224327 ] +/BS << +/W 0 +>> +/Dest (cb9-121) +>> +endobj +228 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 136.027305 99.933071 117.277305 ] +/BS << +/W 0 +>> +/Dest (cb9-122) +>> +endobj +229 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 117.080284 99.933071 98.330284 ] +/BS << +/W 0 +>> +/Dest (cb9-123) +>> +endobj +230 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 98.133262 99.933071 79.383262 ] +/BS << +/W 0 +>> +/Dest (cb9-124) +>> +endobj +231 0 obj +<< +/Filter /FlateDecode +/Length 4449 +>> +stream +xœå]ß‹$·~Ÿ¿bž–UªÒ/~ƒÁÑBîÖ>›°°ó�?_õ´Ôêžš™Þõ^ÒInÙ›é*I]]%}U%©µtöøù‚ð_r¥ÔœäüôéôóÉ»=þM%Vû;üæx&/ÙEª©Äó'%pv¹Æ�Óùù„ÿ6—cñçÓŸ~súûº�ƒ«5Šç_~P–°Ë%g Vˬ]Î!&ƒ•ÈákµX#f rÍÊCj‰ bHÅ`ˆÁ’‰¯Yb„Lb± Õ˜ yÈAÁ{“A¼ƒGÑ%(=Y¼@.•ªÉËàQ�Ù¥,ÉâU—RŠÅâ d‰Õ“Å‹�%’ˆ·x�E¸d‹— 'ö&²„’ÙâeÈ �jð +dAï*&²øäÉâUv±“WÁó%—k^ðÑÅÂì-‘‹è›lò0¢`¤” ^€,ÉÇjò Kd,CÁ�ÅNDÎ¥£5èèfÏdñ"d !‹Éƒ,0¾…!AŸ“ANqÉ€�³“Ä�PØI‘b¡@(ÕIÎlÁ@¨ÑIªÙÂö^ ØC–(ÉB&È"¹&²p 8@°°€²a h+è-0àV|% x+ž’… À…˜ÞÂârIbarÑ•ª… Ìe`§… ÐÅpÏ0P—c +0`—¥$ ¸ËBÞÂî2£¦Éƒ,èÀSa ¸Ëä³…ÜÅ0 +Àªý0YX€¾âB)ÞÂî†âÅÂî† `ò²Ãd ¸"ÁòÜÀÝ}°°@€»AB²°Å¼ w!Ñ ÖÂø{ð[X€Æ\@XbaAîR…û3Æ4ÐÊQ©É‚Ü¥ó™¼ê(CãÆ¸…–¥T-,ˆÀ]8*¶° wŸÅÂ`¼ƒG Dà.1<µÅîR¨Þ‚ÜEÜ-,@wp„ÀÂø7G]×äUçk)Dà.`)XX/ì|’˜¼ìБÈ€±óˆC-,HÀ]¸÷jaAîúÈlaAîzAØcò —`aâð0l�1�`Õù¤°xÀ]O°°ÅîzŸ«… ¸«nÓ‚”•Š…Ð! +¤"®æœ,,HÕƒ‡�Ïä%‡ëhaAö D@–Ƀ,’ÅÂÖ®r-äY8 r€,,,@Dà*!ú6ÓÈ‚îbæY)ZX$s¥ŠXX�cB>­Z¼\É€k“WÀ£laAÎâàŠÉÂäR®`Ð[X€w.YX1À#±° WÈ‚¡ba\‘+‘¹Å#È‚ ÛÂDºàYXPdA4haA YfòÀC#—„ª-žxÍ3‹…E’ÓPÑ dš@J“YÀ>šlG �ü ÙDšcò G±° ” éf±° È|°°}SóÍlaAõ�Ÿ…Õ'§a²…€qð¼·° RA¾ÄÂŒKÍ7‹…•=òM¤xƸ­œ4ßÌT�,!ŠÉƒ,šª1n�IÈ7�N/A–PÅÂ‚š’æ›Å„È7Ñ›SEóÍlNwc2Y<à."Óda.�o"²µr{à�ñ™Í,šqsÆÀz#|«9eà�½ðVÙœ3ð_Í‘ÌIˆ‰Ì²$sÖnLòæ´�þ"“+L¸Ì>�ST Ý!Ãg–¬Y1,Ñ}Ï9–b|£Øe~ì—O_¾‡ó=ÿø�ÓÇßL3eí‡ÐùY’&ÖQ‡H¨07àÊMÍ Mn"Ê$!|M"×EH,Γn*$\1Üm=÷/´«Ì„`fz2ï‹L�`*N¶¬/®óV²r»/†ÒogÒ®9 rìisõ…UÞBRÜHc�„R\ƒb'¢^/«Â¿{wÂ0šo™¡í—ƒÜðæå~÷éô廯ßýñÛ?ã¶ï>žþò[ ï¾ú‚^ðI~Cïçâ7â7\hò=~Ëü=]>cž¯=·ú_ýõüî›Óïß­µ�ü\šá‘ušÐ#£‰þ��öUy•�>‡]�m"C òùì’6:o¶ˆ ->°†$_+4�ø@ç %?0ÄÎ:‡±¢u$,ˆRè³™¢u÷6Dâûù“Ö×*Üdž¹<’YÏs;á鎙¿(vV�Ðô«L!ó}3í«s3! +ÂÁ¿Íˆñiù®jn£¥¶â—ÑÒÊw4û0›,¯ù}tñ\Æhk23êÊÇuݹ8Íæníå¡è±®Ûi2÷g«ƒ¬l—�Ú¹�ν[Ît®º¼­Ÿ•vGMðý%¡Á3+6 OQxÔQ÷Õ9NGͺ³£nayÛyâÐyzˆ3íéNGÜtÒ÷W»eô8Ô•¡Óù¹³Ð¦ý†UÛÁ‘†6êú[¹[§ºzö�Žˆnv¨¢ AEê ‹³ó@µü°Cí«s˜4‹Æm‘}6µA?¹ãlt¡±�Æ.ç�*‚.!yälvÖ9ŽÊ‘gz&]ðþœaó¿ ˜Õ©4þ4.Ÿ.ü›&Öyè,¢ó({¤�uŽcb]ÏÒ àòùFÕkâ€[&IÈð)†M…ä¶O�L²¯ÎqL’Ì1¥Â¯2‰ª¸GØ›Äd{݉‡Á?Ì&ý~h»£çãúS›¶ÑJÖy·iN5&'ÐKª�Œ¶¯ÎaŒ¦{ +!Ý~Ý8ºg4��{ú“Þ €tWR˜0ödg�ã$ˆK¿ý(rÑ�ßÄ H=)\V AyCõ‘AöÕ9ŽA¢NÎÂ1ÖWd +6À˜±r1’Š¨Æ±= 'v\tž‰¿>©Ôð(dÞYç8*Ϻù.Kzݸ7YÀãô™,¦™b*+Ú‘£õñ¶‰ïz¬¶õ^ñºý«\Êè6�÷~�y�¯Ëq+7¦yûç¶ o&*ž†Ø³éj ŽfÜÎñ¸—¢ORÑxW´s=Ĉ}uÓaÅëj½×]¦oÑaGão•?‚¶F©:Ïpkr€am: õnu”® ¯¸ÖL/Žƒ&`̼³ÎqÌàº8”_ç +60>®ñ¡›êÃmø×ý”ÜÆYjt1�èRó}5ï«s5G¸«1 +Þþó åC𾂾M:>Á_U›é;Ù9ï|uŸ;.%nF¤l§’!ƒå¶¶Sq£z¿”›Ð€/¿anKeªÛóÁpÐN÷ë³N›2ÂìLåÑDÃÎ:Ç錺1#– ö˜o–Q-?ß6>}Z4(0á¦�•¢o†�„ºzag�Ã"z8‹€oo³Ð÷"ûÀ�†Á %nøÉ¨“L› kÕý�!=2ÕÎ:Ç1•n€.È:^·Øw¦3@mÍ´Y+öžË‡÷›Øwl·Å¯7ü-rBBBþsí«ssE¥&æÿÀÈúÑëÍ–¢Óè‹J;ëÇdúN¢¯új×[™lôJf†wk„T}u4ògÖ­;BÓÆÏûêÞWç0êN^w¾OoI¾IDz'B âÐd–8D¢Û� +ÃBoÿ¼éÝ�:wL Ƚ˜$JL2E{·‚í¬sœÎ¡Sj,Bo3-MmWôGH%±Ç(b2R@Ú¨ï¬s3DÝB˜ߟgŒn!ÓÏ�ùacÝø^æß�å†Y’neÀ�OûçLvÖ9ŽYŠB=j¿r�©®½Ð½Xî–‡JHo +4¦»Ù÷Æp;ëFÍÙë~À€$é"†ƒ¯u>Å4étg ·³ÎqL¦;é nýv“Ư�á² IáöÇp;ëGÝQ�3—úF‹Jÿ71\Nº¥AßcßÃí¬sœÎQt„×£@ŽÃMoaFÎúØÞng�Ø¡Los³µóßÃh“(I*ç ïÐÎï‘ÞÙe_�㘅u'šq¯ÞÑ׎¸CìºÀ\Ûsò47à,ÜX—Ž›…š›û0ý[ì})¢§—TJ¬GXIJ¹>z·f_•ã˜=*ˆ4ö-w6�[}ÚªKúâ-i§çé +ºl쾫»}uŽ£¼¢ûΈó¾1#óBœök¾ñ‚Èä16Kõc?^…²,\ ÷Øì Yíiû>¾ß¬iY÷mm¶Ý–üz/Ȧµúõ¶‡+°[Åè{Õ{÷-ï¬s˜nQ½î~Ÿö-�4õ®"Â|múq‹øžWEFx]Á¨i˜JÕ’)(¦êqj©F~`—}UŽcÖr)§}K «•§qÅiø>Òoå]U L¨Uâþ—1vÖ9Žj£7Ä}åbà^ƒÚWÀ7,ä]&‚ÖAÇv$4 {ô~sódÛ]7s-ÛÈz=´à¾�wU9މ‹îãÒÓ¢ö�ž;“K�f*Ðï]�‘9îßq¼³ÎaÔ99AYŠì[QØf—c,ñµïïæ³,ÐÝ<â,øªX"g9£+øa‘ú¼>H£�ôp¦ÍÉ +ª·4+,«�bËHžDgüõÜ—‹šþðí»¯5…¶Õfz%[»˜ŽäæKÛÌʬ¢Òfg.å”ßÏeç=cSÙùÝ^Ns™)œÑ�ç’5Neâp¯4‡X~�å‡+uÿ|JÓ9C4�5çÓ#Ô¢Gƒ9ݲ–ëYÏ6*žõ³ziR�oÔœŽðý¹—šOõõzПNjOê/æò?O†ùt"Œ}Fí™—8ýDž^áÝ�ŸOz«d¸ª°“¬Äù«ïméÔ†ö„‘�]Ý–äèüüµöÆ9¶¯!¶§Ñú±UÓ“qt³F»Ò¾z¹±ADÍD×d}zïh&ë)¶Åñ|•º(15™A\”±ìÒàRñ!™ØÄxMôÃí²žšÐʆþµv›ƒØEUGƒù[Ù�sÞ#>�p[ÞRŸMªž�ÙšjÚ ¾Óxªvjl%»A¤ÛÉ =� â¾5�‹:°šž@v!–Ö‘¤—«­œAz:™åæÖb·Tî¥ÊRµ6Í/¢,]�KW¼A›t4S³Ë=ŒÏíëšœÔÍÖHZ–~®ˆO'ÝAtE~>Ål”Ž VøØºÞHä¡ÝN.~é/ 5—¦* ÍFÓó›ôÿ TÄNU䙾�ô.¥g°-WËMtlvòZI#=uÔK$y);¨‹rî}vÔo”WÐí¥»ÆVÔAe=×&ž‚T�5™z¯ëd…°¦ŸŽ•#Ñ7!p»…{W~^‘9cªÑ÷›%º{ìí.äÔ±óy$çnqÒõº¼½Ý¡Ï7âÓäØdKÖ®_ÚMrðÝÛ-7ˆ‹`……¼ÀèóDn£µ£“®(·¯Ë ³<îÓé§ÓäæÇ ±gbÒóaÇèˆÎÿD™oðû·“œ¿m’]üxð-BÇÖyôdzšxÙIÖÓű›�d€ý…Le)è~<„¯e©î`o%©#(uîHŒ‹rè]7š‰wˆO-ö@æ×ÚfqØ—Kn‡Û°eפÂÅø8¸, �—|šÄ•]\:¸†Š¸ÅåpúH¶S;äx“®z•_FS°Þk¸Â½ä…'‹››n´é)†"�y¼oZWòB¿zxýj»Ï"§6”Ú¡½SŸGj0¥vÀ³©<]¦õe÷9<÷ÐÞc�{�³ �%´�ÕÅØGjYªÍâxSi´ÕM›£èpšo´Þbn2¥¹ZSËôÄÅÔRî1ÅBýiÔt­Ò•G«¤«²Únóx=Zâű;çåéüR²Ç’Å ¥±v§ÊR’íúÞ²¾wó¶çá1d$-‘©_ªÅ«’¯Â¿×Œ�K�Íl�UªýL3T–#<ᨅ2žþ*‹/)CDÖÎR†)�×¹?Çq=“Ñæ8Æ;ÁN˜}&ýû:¶Ï`ÔÇŒ¡©ö·wìjºÿÚx¤—)À˜ÂY`Î_ÍàL`ÿ扜~™5UÔ¿§¢o�–¢ÇÀgOæ”Î4ÕWÓ'ÓÏ¿ê�2¡ +endstream +endobj +232 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 231 0 R +/Resources 4 0 R +/Annots [ 233 0 R 234 0 R 235 0 R 236 0 R 237 0 R 238 0 R 239 0 R 240 0 R 241 0 R 242 0 R 243 0 R 244 0 R 245 0 R 246 0 R 247 0 R 248 0 R 249 0 R 250 0 R 251 0 R 252 0 R 253 0 R 254 0 R 255 0 R 256 0 R 257 0 R 258 0 R 259 0 R 260 0 R 261 0 R 262 0 R 263 0 R 264 0 R 265 0 R 266 0 R 267 0 R 268 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +233 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 799.173057 99.933071 780.423057 ] +/BS << +/W 0 +>> +/Dest (cb9-125) +>> +endobj +234 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 780.226036 99.933071 761.476036 ] +/BS << +/W 0 +>> +/Dest (cb9-126) +>> +endobj +235 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 761.279014 99.933071 742.529014 ] +/BS << +/W 0 +>> +/Dest (cb9-127) +>> +endobj +236 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 742.331993 99.933071 723.581993 ] +/BS << +/W 0 +>> +/Dest (cb9-128) +>> +endobj +237 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 704.437950 99.933071 685.687950 ] +/BS << +/W 0 +>> +/Dest (cb9-129) +>> +endobj +238 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 685.490928 99.933071 666.740928 ] +/BS << +/W 0 +>> +/Dest (cb9-130) +>> +endobj +239 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 666.543907 99.933071 647.793907 ] +/BS << +/W 0 +>> +/Dest (cb9-131) +>> +endobj +240 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 647.596885 99.933071 628.846885 ] +/BS << +/W 0 +>> +/Dest (cb9-132) +>> +endobj +241 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 628.649864 99.933071 609.899864 ] +/BS << +/W 0 +>> +/Dest (cb9-133) +>> +endobj +242 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 609.702842 99.933071 590.952842 ] +/BS << +/W 0 +>> +/Dest (cb9-134) +>> +endobj +243 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 590.755821 99.933071 572.005821 ] +/BS << +/W 0 +>> +/Dest (cb9-135) +>> +endobj +244 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 571.808799 99.933071 553.058799 ] +/BS << +/W 0 +>> +/Dest (cb9-136) +>> +endobj +245 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 552.861778 99.933071 534.111778 ] +/BS << +/W 0 +>> +/Dest (cb9-137) +>> +endobj +246 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 533.914756 99.933071 515.164756 ] +/BS << +/W 0 +>> +/Dest (cb9-138) +>> +endobj +247 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 514.967735 99.933071 496.217735 ] +/BS << +/W 0 +>> +/Dest (cb9-139) +>> +endobj +248 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 477.073692 99.933071 458.323692 ] +/BS << +/W 0 +>> +/Dest (cb9-140) +>> +endobj +249 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 458.126671 99.933071 439.376671 ] +/BS << +/W 0 +>> +/Dest (cb9-141) +>> +endobj +250 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 439.179649 99.933071 420.429649 ] +/BS << +/W 0 +>> +/Dest (cb9-142) +>> +endobj +251 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 420.232628 99.933071 401.482628 ] +/BS << +/W 0 +>> +/Dest (cb9-143) +>> +endobj +252 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 401.285606 99.933071 382.535606 ] +/BS << +/W 0 +>> +/Dest (cb9-144) +>> +endobj +253 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 382.338585 99.933071 363.588585 ] +/BS << +/W 0 +>> +/Dest (cb9-145) +>> +endobj +254 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 363.391563 99.933071 344.641563 ] +/BS << +/W 0 +>> +/Dest (cb9-146) +>> +endobj +255 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 344.444542 99.933071 325.694542 ] +/BS << +/W 0 +>> +/Dest (cb9-147) +>> +endobj +256 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 325.497520 99.933071 306.747520 ] +/BS << +/W 0 +>> +/Dest (cb9-148) +>> +endobj +257 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 306.550499 99.933071 287.800499 ] +/BS << +/W 0 +>> +/Dest (cb9-149) +>> +endobj +258 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 287.603477 99.933071 268.853477 ] +/BS << +/W 0 +>> +/Dest (cb9-150) +>> +endobj +259 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 268.656456 99.933071 249.906456 ] +/BS << +/W 0 +>> +/Dest (cb9-151) +>> +endobj +260 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 249.709434 99.933071 230.959434 ] +/BS << +/W 0 +>> +/Dest (cb9-152) +>> +endobj +261 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 230.762413 99.933071 212.012413 ] +/BS << +/W 0 +>> +/Dest (cb9-153) +>> +endobj +262 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 211.815391 99.933071 193.065391 ] +/BS << +/W 0 +>> +/Dest (cb9-154) +>> +endobj +263 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 192.868370 99.933071 174.118370 ] +/BS << +/W 0 +>> +/Dest (cb9-155) +>> +endobj +264 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 173.921348 99.933071 155.171348 ] +/BS << +/W 0 +>> +/Dest (cb9-156) +>> +endobj +265 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 154.974327 99.933071 136.224327 ] +/BS << +/W 0 +>> +/Dest (cb9-157) +>> +endobj +266 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 136.027305 99.933071 117.277305 ] +/BS << +/W 0 +>> +/Dest (cb9-158) +>> +endobj +267 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 117.080284 99.933071 98.330284 ] +/BS << +/W 0 +>> +/Dest (cb9-159) +>> +endobj +268 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 98.133262 99.933071 79.383262 ] +/BS << +/W 0 +>> +/Dest (cb9-160) +>> +endobj +269 0 obj +<< +/Filter /FlateDecode +/Length 4154 +>> +stream +xœí]ß‹$¹ ~ï¿¢Ÿç³-Ù–!ÜC ä`H!»³»w„ÙÀ^òïçSuÛåêÖL{úæŽ"É 3Ó%ÙU*Éú,ùׄ£Ç÷W¿„ƒ©%óññóáËÁ»’<¾–›‹…ý~J:ÏÅ¥P³¤ãg%Pq¥¦Xòñé€_—cñ§Ã_~wøç¶N8FWkŽ!þ¨,&W¤Ÿ VË2X)¹RbÊ+‡W¬ÕbAŒT8ò5«@ ®’,ÄàÅ` Ä .�®YbÄØbAŒPS1XÁC޽7yÄ3S4x!¹ ¥g‹ƒËRc5y¼P¢Å#r¹pHÁâU—sNbñ²¤êƒÅK�%foñ “‹—! eò&²D)dñ +d‰ÐN5xYкÄäAŸ}°x•\ªÂlò*x^Š\ó¢O. ‘·x!¸„¶I&#åbð"dÉ>U“Yùhñ²0¾-p"Q1¼5ªw“§`ñd‰±°Éƒ,0¾…1C_²𠧸da@,Åq�l�@r,, +D©ŽK! bMŽs-�àÅ`yÈ’8[H@²0<×äAªlaEÈ‚A–Èdam­ÅÂܲ¯ÁÂÞ²ÙÂàBLoaqI2[X@€\4¥jas ØiatáîÅÂêRÊÑÂìK¶°€€»ÄÁ[XÀÀ]"Ô4y� ØÂ ££ daw)øbawáFÑÂXÕ¡f ÐV\ñ0p7Šg ¸ º“W|�,,`ànLx«çîÆä£… Ü�³…h(øãÍh¸ Iv8Y° ¿/’…¸™‹K,,HÀÝPÑý> ´rAj¶° wƒÀ|&¯ºP qÃo¡er®$à.:*²° wŸba0Þ¡G�$àn ôÔ¸bõ$à.â†dašƒ ,,@ÿæ‚GÓ5yÕù*baAî–¢…è…� ‰É+ )XX0vq¨…¸‹î½ZX��»>YX��»žö˜<ÈB-,@\ÜÖði«ÎG …Åîú [<à®÷¥ZX��»ÚmZX�‹¢XX¢àhaAvµ”laA®<„|&/;\' Š!²Ldá °v•ªXXP"d¡-,(² d°°�«Ñ·™@43?`È‚HÑ ™“ÊlaAIù´jñrtR×&OÀ Å‚RØ¡+ —r§·°ï4\²°b€ØÂ‚R! \ÅÂtEN""s‹ ‚l é‚‚…! ¢A $ +²Ìì-,@�\ª¶xì5Ï „³ÓPѸ 2M ¥Éƒ,€ `M¶“…H~�l"Í1y�…[X 5Ý D KôÑ´MÍ7‹…ÕCD|TŸ�†ÉÆÁóÞ‚ùfd à—šoŠ…•<òM¤x†ßVÊšo *C–„ÅäAMÕð[`òM “ÅË�%V¶° æ¬ù¦XX€0ù&"zsH@4ß,æpp7U “Åî"2Íàù&"[+·÷ÞTŸÙLÑŒSÌèMè[Í!ìEoUÌ1ðÕÉ4€˜È,%›£èVÁ Þ6ðÀ_Äc|… §Ñ§qˆ*£9ô™Rô%+Ü‚Ý÷œc-FÏ;��ýüãáëwè|�?þëðéwËHYûhüÄYë¤.+Ì ¸rËí†n!ò"!¼§Ž +Qê*d,žÝTHtÅènë±[‘!±ÊÌ,oÆãs‘)˜Š²-ë«ë¼•¬Ôž ÷Cú€àm…ò˜,/ȱ—ÌAÔWVy Iñ �2JQ�Š�pD½ž7…ÿðp€�¡í—ƒÜèÍÊ�þøðùðõ÷þþ¯xìçÃß~¯áÝ7_…þ¿½f9ýMïñS.háü7Ÿé�ø Þß�ßþø°Õ/2rF0†— hŒ·Íõ†IæªÜe’_ÃÈ/r!4¹Ë) š>k¸kW†2yk:k^åÑa°Ë{„ߘö€3"4ñµÖeDQtÌù†A&ëìÆ"ˆÓ‘ª q†7qÓDeà=®æ¹t.Û{v‡‰kýþ9÷°�‡xF±´ž†î‹G¤no®Î~Œ‡¼(2EÿÛúÓM¿AJ%Sõ˨;-YÝ˪Ÿ«³ÕnOÕÇ·ñZUßü ]¨½ûÍhšÇÁ¿�{}Z;":¥�)m#І™ R-W‰–ÿeNUÙ� £ffx,2º»¼§jTS¤9ïÐI*$æè�HW"pn)v®Ê~‹ À©S¥oâbøƒ­Z;,ÌH>t†©®fë/«vªÊ~T«3:d'SªmªÜüµU—‘=‚³p¤eD;ø›þ>Yg?Ê+À§”³Ð”ò–p‘NxIÎþR€>\t±i½_Ãà0†¤í¾-z¿�y–g|8—-/<·ÝóãùúýFáº^hõu”‰Ÿ+):j¢#b‹WÇB|³YÌÕÙM³Ði Èfç|ª©wQeSk¹6}Ìk÷{ aWycÒÉy£Û>óc²Ÿ·¡½³M v’£XW]Æ�è–nXp®Ê~ �áãSܤ€M‘<(•·ôç:r"æ-³<Ðòp|+ج³Õ&TCïXï‹‘žÉ¼7Iƒ_Љ·Ÿ4’29ÑœƒçªìÇÄEiΓÞóLÑ`6®/‡Á$ârò™NQ�ç°Lu¼¬Ù¹:»Q-u'Å뺹{¼g @⻋–+[�Ù}Àa6ä*®uÂFâ²�oEì“uöÓ" Ÿ¢¤t_#ø­Ã ÛP¤«q²'™ïë&ëìÇP ¸]”ó?Úס pºr˜x:Rœ«²ëq’Ès¾˜.FÜ:°~0Få.Fížë÷XtýyàXçû½É:»Qsò€èˆOs“ +W3lÿõý^Ò…W™—ERäëÃ-8�¬³ŸF  8Áð}“ÓýÞ³ Äö¿Äx͘‘.#Ð ˆîع¥ú¹:ûQ}Rj&ºoRoª'k°÷xq}jøs/w9‡”Î#èãÄ„¬Ïí´çæ¥ÂöyÏOdè]ÝÂÒ<àNÖÙ�Áuw•¯ºIåÿ€k6‚ª[ób þ€;Wg7� {]Y¼ìBÛàæ�b—ê3ÒïDÕtKõ“uö£zÒ¥QÌáΩÄ_pŸó¿«¥JƒßuÐåëûò³ib ½0=ë6We?æMºÌª„07q4?떳ΘûAuÏœîª ·–|MÖÙ�òDaµ'§WÞbÖ-\øD Þ]éØ{÷ë̦å€eqÙ0;Ü5Yg7æ.^§ü"RÀ7�M£;LJ´åY‹a85�…žÔùœ2´9;2We?¦ÒUÈ‚GÏ O¿Õ¼ËQ’xŒº¡$úeÎËš�«³Õ&é"unR垀€/;èzx÷á‹qÂÅlŸ.ÊÄ­G=[Ö6jÖIݧ«ËÄ%Qº™dÍUÙ�IE— x=èàUc‡t=Vø¬gè±DE÷¨è‚š‚ö.·´8Wg7j”e¯)éA wy†±P’ò â‹)É«áÙ¡ŸØ„ ½ÏÞ6‹@›!d΢Ûd€Cº¸íÖÂü¹:û1 éZ. ÓîK/¢'sRãFëÖ“ jÈ„ G·8‰îKzYËSUö£ä¤ˆ'¹Ü7xµ0ò¥6›u[^Ð혳ÑË\•ý(St‘R rg‹•_ØZ¡ƒêY÷2O·Ö©*»QpõºV‰}¾oÿ5­µ†êB.˦ÿÙÝh“uö£NÒeA¹ä;åo¬êoãBð‡ÍN€ÙM•!4ÒLÖc°Èù@Ðí-ÌÕÙ� ’"Ä}›g;=[ázàV�YwãÎF“uö£pѵ:zÊÛ(\îRteWSBt3=>9We7j^¶W‡Â¯›ÿ1(8ïÄFßä�„˜ $IpÝØÝ5v³È ]ooû”�áb_°j"ŸU��¥N�`Ô•E¬#³zjÁéÅÿôý÷ë‹Ç÷ç|XLÑF£ÛÂÕScòtžÓ�3 žË)=½;—-§Áó¥l>y¾fK™eÀOñSÏeÒð¬|žøòƒ,¿¹T÷—C^NÉËII>/}o=ØÆ)¦—zÔ“9ć¦Þ°($Ÿ©¹@ù¥—:ŸIéõ˜*N\Ô?^œËY óùàúŽÚÖNçÇù…¬£�—䧃žÈ]Dœ$+ñüÑ÷{éLÁí®Z\½,IÉùóÇÚoN©}Œ©½�ÖO­šžë ÓûíJÛêéÁ5s¸&ëÛ{Îd=ƒQ�¯r%å&3ˆë y,»Þp­x“¬³“+1]ý𸕬;[ÙØ?Öns»è£êÂ`þV6–Áœ/x,]RŸLªžüÖnÕ´}§Ñ TíÔÔJvƒp·“Az<į|»µF6�?XMÏÏ9¥5$îåj+g�f¹óÝR·Té¥d­Z›æWQÖ¦NÒoÐ�©E•|ÄSû¸%gµ@³5’�µÝÄ+âãAל\‘Ÿ©¥ÓŠ>µ¦7i¸o'‹_ÛËJÕ9§OpÍFÓÓGô÷ *R§*ò,÷&¥'­WëCÔ7;y«¤‘ž;ê°¥�Àe-;¨+”ÒÛ쨯 Þ(¯ ÛKw�m¨ƒÊz©M<©[rè­®“š~:VŽDß„ÀãVrêMùiC^åLÝU“ïËahî©ßw%çŽ�O#¹t‹=ªËÛï;´ùF|\:6¾$kÓ—ö�•}ïíÖ‡ ÄU0€ÂJ^aôi!7oí複C´�«“Y=îãá§ÃÒÍEJQ£ÉLAO7££pü7Ê|‡Ÿøø};NçÔ�GßÑ"vlÝ�ÇžLÏ•I²ž�ÛˆÝmbäöWr�µlj­¡÷ã1xÍku¿{+:‚†Î‰iÕá@޽éÆ@ƒfÒ ÄÇ -ö@æ—Úfí°O—Ô^�!=ˆ©I…‹ñup)+�Ö.ù8ÜWZtíÒÁå8TÄÅxS\¬«d1µAŽéªWùy4鳆‹!ŒÐKZy¼v³ã­my‹¡B`/ÆsZ7òBßí^¿Øîg‘só¥vhïÔ§‘Ú_L©ðl*-—y{ÙûZv¾7ç]5ÔïEƒïQrV×XC Þ\Œmt ÊZí\ �åFÛ<´u.@ó�ÖïXšLù\­©eyc1µTzL±R5�F«t%¦Ñ*ùª¬Þ·õx=Z¢¥±9—õíüZ²Ç’bÐòX»Sy-I�výlÞ>»õ¶Çá5x$¯‘©_«¥«’wáß=¾sªs1Z`•jßËF�õ:tÔ +EZþ§€—œ�!¬Ç–aHãÕu^ã¸Éhcã“`ÇD¾ýï¶O`ÔÛŒáVí?GØÕtu«ñJ¯S€1„³Âœ¿ÁYŽÇ×y §_Mõ¿�½¢‡Ì!�e¨%o†O–ïÿá!Å +endstream +endobj +270 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 269 0 R +/Resources 4 0 R +/Annots [ 271 0 R 272 0 R 273 0 R 274 0 R 275 0 R 276 0 R 277 0 R 278 0 R 279 0 R 280 0 R 281 0 R 282 0 R 283 0 R 284 0 R 285 0 R 286 0 R 287 0 R 288 0 R 289 0 R 290 0 R 291 0 R 292 0 R 293 0 R 294 0 R 295 0 R 296 0 R 297 0 R 298 0 R 299 0 R 300 0 R 301 0 R 302 0 R 303 0 R 304 0 R 305 0 R 306 0 R 307 0 R 308 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +271 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 799.173057 99.933071 780.423057 ] +/BS << +/W 0 +>> +/Dest (cb9-161) +>> +endobj +272 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 780.226036 99.933071 761.476036 ] +/BS << +/W 0 +>> +/Dest (cb9-162) +>> +endobj +273 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 761.279014 99.933071 742.529014 ] +/BS << +/W 0 +>> +/Dest (cb9-163) +>> +endobj +274 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 742.331993 99.933071 723.581993 ] +/BS << +/W 0 +>> +/Dest (cb9-164) +>> +endobj +275 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 723.384971 99.933071 704.634971 ] +/BS << +/W 0 +>> +/Dest (cb9-165) +>> +endobj +276 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 704.437950 99.933071 685.687950 ] +/BS << +/W 0 +>> +/Dest (cb9-166) +>> +endobj +277 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 685.490928 99.933071 666.740928 ] +/BS << +/W 0 +>> +/Dest (cb9-167) +>> +endobj +278 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 666.543907 99.933071 647.793907 ] +/BS << +/W 0 +>> +/Dest (cb9-168) +>> +endobj +279 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 647.596885 99.933071 628.846885 ] +/BS << +/W 0 +>> +/Dest (cb9-169) +>> +endobj +280 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 628.649864 99.933071 609.899864 ] +/BS << +/W 0 +>> +/Dest (cb9-170) +>> +endobj +281 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 609.702842 99.933071 590.952842 ] +/BS << +/W 0 +>> +/Dest (cb9-171) +>> +endobj +282 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 590.755821 99.933071 572.005821 ] +/BS << +/W 0 +>> +/Dest (cb9-172) +>> +endobj +283 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 571.808799 99.933071 553.058799 ] +/BS << +/W 0 +>> +/Dest (cb9-173) +>> +endobj +284 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 552.861778 99.933071 534.111778 ] +/BS << +/W 0 +>> +/Dest (cb9-174) +>> +endobj +285 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 533.914756 99.933071 515.164756 ] +/BS << +/W 0 +>> +/Dest (cb9-175) +>> +endobj +286 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 514.967735 99.933071 496.217735 ] +/BS << +/W 0 +>> +/Dest (cb9-176) +>> +endobj +287 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 496.020714 99.933071 477.270714 ] +/BS << +/W 0 +>> +/Dest (cb9-177) +>> +endobj +288 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 477.073692 99.933071 458.323692 ] +/BS << +/W 0 +>> +/Dest (cb9-178) +>> +endobj +289 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 458.126671 99.933071 439.376671 ] +/BS << +/W 0 +>> +/Dest (cb9-179) +>> +endobj +290 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 439.179649 99.933071 420.429649 ] +/BS << +/W 0 +>> +/Dest (cb9-180) +>> +endobj +291 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 420.232628 99.933071 401.482628 ] +/BS << +/W 0 +>> +/Dest (cb9-181) +>> +endobj +292 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 401.285606 99.933071 382.535606 ] +/BS << +/W 0 +>> +/Dest (cb9-182) +>> +endobj +293 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 382.338585 99.933071 363.588585 ] +/BS << +/W 0 +>> +/Dest (cb9-183) +>> +endobj +294 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 363.391563 99.933071 344.641563 ] +/BS << +/W 0 +>> +/Dest (cb9-184) +>> +endobj +295 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 344.444542 99.933071 325.694542 ] +/BS << +/W 0 +>> +/Dest (cb9-185) +>> +endobj +296 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 325.497520 99.933071 306.747520 ] +/BS << +/W 0 +>> +/Dest (cb9-186) +>> +endobj +297 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 306.550499 99.933071 287.800499 ] +/BS << +/W 0 +>> +/Dest (cb9-187) +>> +endobj +298 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 287.603477 99.933071 268.853477 ] +/BS << +/W 0 +>> +/Dest (cb9-188) +>> +endobj +299 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 268.656456 99.933071 249.906456 ] +/BS << +/W 0 +>> +/Dest (cb9-189) +>> +endobj +300 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 249.709434 99.933071 230.959434 ] +/BS << +/W 0 +>> +/Dest (cb9-190) +>> +endobj +301 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 230.762413 99.933071 212.012413 ] +/BS << +/W 0 +>> +/Dest (cb9-191) +>> +endobj +302 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 211.815391 99.933071 193.065391 ] +/BS << +/W 0 +>> +/Dest (cb9-192) +>> +endobj +303 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 192.868370 99.933071 174.118370 ] +/BS << +/W 0 +>> +/Dest (cb9-193) +>> +endobj +304 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 173.921348 99.933071 155.171348 ] +/BS << +/W 0 +>> +/Dest (cb9-194) +>> +endobj +305 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 154.974327 99.933071 136.224327 ] +/BS << +/W 0 +>> +/Dest (cb9-195) +>> +endobj +306 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 136.027305 99.933071 117.277305 ] +/BS << +/W 0 +>> +/Dest (cb9-196) +>> +endobj +307 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 117.080284 99.933071 98.330284 ] +/BS << +/W 0 +>> +/Dest (cb9-197) +>> +endobj +308 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 98.133262 99.933071 79.383262 ] +/BS << +/W 0 +>> +/Dest (cb9-198) +>> +endobj +309 0 obj +<< +/Filter /FlateDecode +/Length 4927 +>> +stream +xœÍ]߫帑~?ÅyŒ"©ô†<,„@``ÍîB³=73 Ë�Àdöß߯tŽ%Ùªö‘o{ˆûÒÝ×%•T–>}ª’eÙÜ5~¾3ø'9£RÊ1¸ûÛ/·_oZE¯ñ§äX]”ä¿àoôw£]TÞä�üýPT1{Ãýý†6—}ö÷Ûþîö�µŽ¹[•s°Æßÿù'9R1Ũ½�”‘¤ IÞ«­BR0 +·˜³”3|tÖ�If¸œ¼”3œµIHJ0ƒ\44&e˜a£qRÌ0ÙG!ÉhØa¬Öb ÑΑÒŒW�¤4kTHÙf1-"ÍD+¥©�ñFJË*„à“”æ`‹ÏÚHi¶x㜖Ò`‹£¥´[(�Ó`‹M‘¤´[,Z' i ¶]ILƒ-:h#¥eR>'çÄ´Œ4�bÓ¬öÊ'"-¥£<°IbF:)D!Í– }Ó`‹'m¥4‚-?RxÂSLI­–G7i2Rš‡-ÖF'¦Át¾Ä6ÀƒDAŠyIâ£rÙ:‰l"å’K Ø”•‹‘$°Ù+r”x€´Aš5�†-Þ‰ ÈÀ‡‘+¦ÁÊNâ²°$. ‚-֑Ķu@‹Äºu:‰ |ë´ fj‰ ŒK)8‰ ” (e‰ œKàN‰ ¤‹á%. °.ù`%. Ð.¹$. ð.9£%.pà]"hŠi°–¸ì¨È$’¸À�wÉè(q�ïbY‰ Ы +8 +ʦ¤%.pà]›´“¸À�wmÄ ¦E…1H8ð®õ¸iæïZ¯­Ä¼k� ( +ü£Eo¼ +ñ²;[@°`¾Gš%‰ P˜²pK$.ðà]“1ý cl¥LÊAâÞ5 Ý'¦ee"Z\·heeBÈxð.&*’¸ÀƒwAŸIâp¼ÂŒj%.ðà]C˜©¥4ð®±YK\àÁ»ð¼Ä€ƒ2p$.Àü¦ŒtÅ´¬tNIâÞ-Y‰ 0 +�À$bZT’‘¸d¬4üP‰ xÓ{–¸ €wµ'’¸ €wµƒÛ#¦ÁJVâø5HðÆ4œU¥-˜BJïjƒ–ÒÀ»ZÇ,qAïò´)qAˆ,°Iâ¨à[‰ Br*Ç$.Y# .Ÿ˜®½ÄQCàAYblqÑI\ÇZeÊIâ‚ha Y+qA´°.ƒÄðT6ð¾Åð¶.b|à` C«JiÁªA×bZBš‰Äè¦b#qb)•0è%.Á+v—$.€H3Nₘa †ŠÄ˜ŠT²ðÌ¥4[àdK\OiÆH\�,l�7(qA² QfÐ`†F,‰¦–Òœæ83I\�\Pì*J\€a‚HL)¦ÁЄÄè¶½Ä~l"ÌÓ` y'qAJ–ÃÍ$qAJ°Åj+q°Éñf”¸ kØ�O€ƒb7YâÐ8Ò´–¸ ›„xÓ:‰ 0.9ÞLdÒˆ7â ã6Sàx3J\�lñpQÄ4ا) 㜄xì$¥Øb³“¸ ‡Àñf’¸nâMxôâ’@âx3ŠËà]ŸÁLRxži�¸ˆ7áÙJ±½ñúÿLNLq&qÅ@ƒz=æVqÉ@ƒ{1[EqÍ@ƒ|9F `&"ËÄUL«H4Z\6Ðà_øcnà„ÇêS¿D‡ˆ93E¾ÉŒaáàÝט£e£¯d{¬�ýóo·ßÁä{ÿÛÿÞ~þ]Y)[~ ÀO.p`íyˆØŒî]©RœCGU„®X?¢ÃFÄÜŒ4 Å碉©Óm¾×_ÌÚdXÌ683åÎ\_/"ƒ®¢ ÛzXç,[i©Ã᜷² +¥á0{ô|BŒ]0;Sªœa)*b_ eË܉¯W»UæûtÃ0zVÿX¡­—�ݘÍ×êû§_n¿ÿô§OÿñáÚO?ß>Ïîݾ3Ýÿ¬oW»7öüðzȽÇßð̃4oŸróøßüµ•ᙸÝþûþéÏ·?~Z·"ân— ·bf[�:‹†ŸSùPÃÿí�(Ž�¹öþ©kÓg[º8¶)…M_䇎[ú䙆è§Éžÿ×¾Jë>ó\�ØKˆpKtγ&#øºô¢—æT.ÓKðФ )ÌT7ñúamþ؆Šë~ï忝2üGsœVb„ãhIJ߲s:×iZÄ+Ö‘Õs#`hjÓ5i×ìýh¨ÍþLs¹ÓYd?¿D9‚_›øäNü|ûâßîwÆœÎu:#òÂ8ØÂÎÓÿç•>ô *ù-iŠËŽ-O¥ÍMÞH:PT0ôvÈ Hì`f„rrPí^ŽÐ9�Ë€ÂrT†j�\ +bÛ‚ÀlÒnæ®Eþóº3W#¶4üW Ž« b¶acèçï±~]›Ÿò9ç’´ 4^è#Â"ŠÉm›‰õé'Ü�–©�¿%Ã3yZuÔd^gRç:ÀAô ù1°œþm ¿¡ëBë pôp_ºôðº›\(BØÕƒdè"^]�Î!<ÈÍD%nßï¡)•ët?£áEÍôšî÷˜gñ@:!4[ú¹ïȸõñu¹ìΣ÷Ý�å¾Ý&;„^¼X/hÏŒn�à=ë zôË ÷è„B &^,Pðn€¸Wؙӹx"¦1B¢3Á³*´N/Ëô@›écbzèºp(ûõôÆu Þ©¤= «•áIÒßPмWVWg=ÿI�ˈw7$“1{ž u¡ŸûáË<þÇǴ *Χmò2%MO)c�¯�Õ¼–Q{XÍoôw€NQ)ØòH&Ù²“ǽŠb&u®,‹Y8YLÄgkUèç~ë#˜eг‚3üe²þ¼N_9ÒµÌW@J¦¸3z{Ûs0Le©Ùéþf`˜³õ÷`HI[žúZ~ø|¶Ã9�ëÀÐó";|Á|& W…~î‚Û;y–f#Û¬‹Ï¼ë¯æ¢Þ›°âÄ_Bú±ÛÊx„»} ibŸÏ•gz£öD[;v(Yò’þ¤AÉ”øy0GJ +ñ•Ï7©sHGÞ¤]8•YW…Î@º2k¿¼0íÉ�õ½æÉæÇ�ÚS~`Ù@��ô÷@•’ +^(΃jNç2 â—¢æÓç�j]èç¯�fY^pݵ› +ÆZŽ@iÔ>%AJXȸæþ³žß¤Îu „Æ1d“÷gBiUè‡ùéìi²óüF �x~£ö1ÏOÐ߃!ñ^Õ  !±æí0‘Å+Îé\†ÓzöðœÎ„áªÐo…¡Û{tF8.ÁÊt`Âï'tA²‚寽8ã?qFОh7²Ž· &IžŠpÉÈÍO¸“:×�'oýò £ÿLx® +íãã ++–7ÖuhÚ´N»£þ ˜hµq¼„8Íws:—”×p,~›Ø1 ¨u¡Ô¿€ëF«�pݨ}Œëýhz”‘Q-o9%­ïázõ rRç:ÐäWcâì‰í%óÐ\Ú/2×µ¼­g·]ëÛÂmš}ƺ_sñ뜸ˆ‚ö ÷µ¥nA`�iC²z~ãä¤ÎuæYˆNå¾U¡§®òÍCe°á5Ð:  Ú3@kOEý= ¯øÕ[ãç½¶I�ë�OЙ_®>h«B Ðòš±Êä¹°›XmÚkë:âµ�ÚǼ6AP™�§°Öèù篓:—TÐüv]9‰á<@­ ý ¯-lò¼Í³ÏhÅ‘'²£ö±'²‚þÔ‚ W¶©ÏBmRç:P#~Â9s&w­ ]=‘í�øî±Uõ¾ì �mhƒ ‡€6hÚ¨¿4ÇoäÇ€8aþ5–9�ëÍóëú™@[zhÇy¬ù`cÍG|°Qû˜&èïÁ+ð¶fms˜_è˜Ô¹¼OñÐ>sËÒºÐÃk»åzYèè¶6Õ²†Ž©à [æm>²Ì1j[æô÷€™ *¶åMóiÞ›Ó¹ 0£æ·~¬×gòÞºÐ3v ›f¾±î#Ì7jc>A`põ”>0"©¢AÀ²°I�ëŒßÂM¨ú̇ôëBlX,löãcÃÒŠõ¦_ãmšx–ZŸÄŽÚ3ÀkÏbý=à9˜m¥Ì6©sàyvbÊgn9Zº^ÿNa‘~KÈÐ1ÛP÷!f´2Û¨¿°À[ÊùD±ù'“:×XâýÓše<`«Bgv_$g>rɆWïõOê\V©œF|ˆëy°ZzV¿}ˆÐm m}"´cÔž Zˆ!èï2GÆà‚ñu¼ø•7©s@û85� ÈU¡Ó€<ùC[íyÍ‚Í÷µ§¼·êý ú{ s|i6pûæA7§sÐyvÝœ¹Õh]è‡A÷ áB¸Á–C€´nÔß\à%6SÞš™ &u®¸ÄïªЧ²ÜªÐ²ß㈥ÜDõú´pa¬ûH¸0j ý=€Y»rfål¸0©s€eÍo¡9ÎÜP´.t`ß.Œ5 Fícá‚ ¿«l²2!ò1·|2=•“Owa5©sX¿ b8sѺÐ+øh{(Kn.™D'Bˆ’oûfþ÷3['›Ë>Zû:`hÏF홀J& +ZÒ߃¤C6gw`ÃѤÎu éyꇹ§2ݪÐÏßo`óe½«·¾“uh{øXÇ‘�F£ö±�F‚þ�øS"Ù>gtö­¬I�ë)ñ[d|¶û™@ZzH çùŽ»ùWN +›8ª¦sËGÛŽ¼�5j{KÐß`fgÏŸe<ûðjRç2,Gêšz8sÿѦÔ2½j=ì¾-0ìaͼk?}üC‹%sŽ<¹Ô�=º’ +Xãî/Ïs‹­bêE`i|òèÚv rÛË,/°UìOõ½›Í)ºŒ¡ð¼/x¦€sŽü%”âZD>ãû™ÿáÓŸdì�OŸœ{7r�1Y,$ô gË2¥'žùXî—ÓhXöã3oÀ߷DZˆ%O9QžÉÏ<¾«+o+°)¾sDÞ„~ꮺ&æÓr—¼¶þškŸCXMï›Îtݿ䵱ëÎ=áÛ ÕÒVú.Jù;IKQKëÂ\dÔ•«Ô/9k‡¸ÚO‚èí&¿ÓKÑÔô®×økaZ€äj¾¼äDo71ß³4_{*Ö\©©æ¥å›) ê”jà ²ÒFOiäO0vcDÓòëZ¸–¾Ö©Ã�„o7~d¿ß|rûÆÚ/Ðë…Ô•[ÅI7¼4iLKSah.2>«Ÿÿ}P…¯Rfžò‹qRü½�vÕ*á±YÅëFê塲ޓZ€w~›Aвc¬˜íÛË$-ägÒ­¹k‹­¤]“uò˜ó˜¤*y¬Å¦¢®Š™Â–ö©\Ù õbªkb_¡ü¾7;}ª^×Ê‚éàîk¹M*w¾÷âX{ÜðÇSª½µÜó‹ð­Lln+fè§¥’&æ“ øÔÊ:a3 ¤ÐÄ�Fß‹x­•�øéøòkdÒŒûvûû­Ls–¼e?<�áo�õÞ‘¹ÿòüÿçæî?,ŸxÌãVW¶°•[Wâ~&ã/G¦I1IrÖaÓ ­ëh¿‰Mjyý‚†:�[Ûñµkêºû’ÓT55µúÖ†�ØVèZC]ËøáÛ¦«#ó­}Ó&ìÇ%-7Ç+¹üÙ’Å*\ô·ƒËÔÒ¨MÉ÷®H\qÖ6¥#ÕÙN}¡¸ì*ÌͲ•™ Ⱦ’Úôl¿ë»‚¸®î¢s#ø’ZškÓl_ô"+wÑe� LýE_0o+heå•=‚Ñ^ßÜïO“Ã2XZ©½Jß{i½1–V“¥T.Ãú²Î9T,ƒ·µP-‹º±GÕÉiC£¹nuÑc´“¦¦öÌàûJÝ"[UºL•. Ó‹¬–›ÂSmi–rÇIl¥X}Š&ý{ßÒ¾ï•Úˆ¾ï•0äår—¯zKT ßÃ9¶»Ó-gõ%“ ½v•º–“ÙX·[׽̶÷î6\3$4ÏT75?äüÿ}dìׄ‰Ú™H¼òÆîN +âø#ŠÑ¥nIã°ÎþǸ’±¬qô5¡;”#ÒÑð·ÔeÞ‘�_'tE-ßY—Õø=Xá–Ž5€°„ÓhN+8åcºøó\È©—‘CEþv6/P¥ÄŸüŒÚˆK:e©%®–OÊÏÿ� +endstream +endobj +310 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 309 0 R +/Resources 4 0 R +/Annots [ 311 0 R 312 0 R 313 0 R 314 0 R 315 0 R 316 0 R 317 0 R 318 0 R 319 0 R 320 0 R 321 0 R 322 0 R 323 0 R 324 0 R 325 0 R 326 0 R 327 0 R 328 0 R 329 0 R 330 0 R 331 0 R 332 0 R 333 0 R 334 0 R 335 0 R 336 0 R 337 0 R 338 0 R 339 0 R 340 0 R 341 0 R 342 0 R 343 0 R 344 0 R 345 0 R 346 0 R 347 0 R 348 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +311 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 799.173057 99.933071 780.423057 ] +/BS << +/W 0 +>> +/Dest (cb9-199) +>> +endobj +312 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 780.226036 99.933071 761.476036 ] +/BS << +/W 0 +>> +/Dest (cb9-200) +>> +endobj +313 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 761.279014 99.933071 742.529014 ] +/BS << +/W 0 +>> +/Dest (cb9-201) +>> +endobj +314 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 742.331993 99.933071 723.581993 ] +/BS << +/W 0 +>> +/Dest (cb9-202) +>> +endobj +315 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 723.384971 99.933071 704.634971 ] +/BS << +/W 0 +>> +/Dest (cb9-203) +>> +endobj +316 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 704.437950 99.933071 685.687950 ] +/BS << +/W 0 +>> +/Dest (cb9-204) +>> +endobj +317 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 685.490928 99.933071 666.740928 ] +/BS << +/W 0 +>> +/Dest (cb9-205) +>> +endobj +318 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 666.543907 99.933071 647.793907 ] +/BS << +/W 0 +>> +/Dest (cb9-206) +>> +endobj +319 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 647.596885 99.933071 628.846885 ] +/BS << +/W 0 +>> +/Dest (cb9-207) +>> +endobj +320 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 628.649864 99.933071 609.899864 ] +/BS << +/W 0 +>> +/Dest (cb9-208) +>> +endobj +321 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 609.702842 99.933071 590.952842 ] +/BS << +/W 0 +>> +/Dest (cb9-209) +>> +endobj +322 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 590.755821 99.933071 572.005821 ] +/BS << +/W 0 +>> +/Dest (cb9-210) +>> +endobj +323 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 571.808799 99.933071 553.058799 ] +/BS << +/W 0 +>> +/Dest (cb9-211) +>> +endobj +324 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 552.861778 99.933071 534.111778 ] +/BS << +/W 0 +>> +/Dest (cb9-212) +>> +endobj +325 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 533.914756 99.933071 515.164756 ] +/BS << +/W 0 +>> +/Dest (cb9-213) +>> +endobj +326 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 514.967735 99.933071 496.217735 ] +/BS << +/W 0 +>> +/Dest (cb9-214) +>> +endobj +327 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 496.020714 99.933071 477.270714 ] +/BS << +/W 0 +>> +/Dest (cb9-215) +>> +endobj +328 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 477.073692 99.933071 458.323692 ] +/BS << +/W 0 +>> +/Dest (cb9-216) +>> +endobj +329 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 458.126671 99.933071 439.376671 ] +/BS << +/W 0 +>> +/Dest (cb9-217) +>> +endobj +330 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 439.179649 99.933071 420.429649 ] +/BS << +/W 0 +>> +/Dest (cb9-218) +>> +endobj +331 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 420.232628 99.933071 401.482628 ] +/BS << +/W 0 +>> +/Dest (cb9-219) +>> +endobj +332 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 401.285606 99.933071 382.535606 ] +/BS << +/W 0 +>> +/Dest (cb9-220) +>> +endobj +333 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 382.338585 99.933071 363.588585 ] +/BS << +/W 0 +>> +/Dest (cb9-221) +>> +endobj +334 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 363.391563 99.933071 344.641563 ] +/BS << +/W 0 +>> +/Dest (cb9-222) +>> +endobj +335 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 344.444542 99.933071 325.694542 ] +/BS << +/W 0 +>> +/Dest (cb9-223) +>> +endobj +336 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 325.497520 99.933071 306.747520 ] +/BS << +/W 0 +>> +/Dest (cb9-224) +>> +endobj +337 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 306.550499 99.933071 287.800499 ] +/BS << +/W 0 +>> +/Dest (cb9-225) +>> +endobj +338 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 287.603477 99.933071 268.853477 ] +/BS << +/W 0 +>> +/Dest (cb9-226) +>> +endobj +339 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 268.656456 99.933071 249.906456 ] +/BS << +/W 0 +>> +/Dest (cb9-227) +>> +endobj +340 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 249.709434 99.933071 230.959434 ] +/BS << +/W 0 +>> +/Dest (cb9-228) +>> +endobj +341 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 230.762413 99.933071 212.012413 ] +/BS << +/W 0 +>> +/Dest (cb9-229) +>> +endobj +342 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 211.815391 99.933071 193.065391 ] +/BS << +/W 0 +>> +/Dest (cb9-230) +>> +endobj +343 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 192.868370 99.933071 174.118370 ] +/BS << +/W 0 +>> +/Dest (cb9-231) +>> +endobj +344 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 173.921348 99.933071 155.171348 ] +/BS << +/W 0 +>> +/Dest (cb9-232) +>> +endobj +345 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 154.974327 99.933071 136.224327 ] +/BS << +/W 0 +>> +/Dest (cb9-233) +>> +endobj +346 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 136.027305 99.933071 117.277305 ] +/BS << +/W 0 +>> +/Dest (cb9-234) +>> +endobj +347 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 117.080284 99.933071 98.330284 ] +/BS << +/W 0 +>> +/Dest (cb9-235) +>> +endobj +348 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 98.133262 99.933071 79.383262 ] +/BS << +/W 0 +>> +/Dest (cb9-236) +>> +endobj +349 0 obj +<< +/Filter /FlateDecode +/Length 4954 +>> +stream +xœÍ]]«ä6}ï_ÑÏ�(’JŸò°°� » Ã>ÌÜÌ$,w’}Ø¿¿§Ü–,[Õnù¦Î�™¶¤’ÊÒÑ©*I¶ÍUãÏ×%gTJ9w}ùrùí¢UôÿM%VSöOø?ú«Ñ.*orHþú…(ª˜½�áúzÁ_›Ë¶øëå_]þ³–1W«rÖøëïŸ8Ë‘Š)Fí…¬Œ,mHÈò^Åh}²‚Q¸Åœ¥,¨á£³®ÏŠPÃåä¥,¨á¬MBV‚䢡>+C �“² †É> +YFCcµó ˆvެ�g¼ +èô åY£BÊ6‹yy&Z)�H…èŒ7R^V!Ÿ¤<]|ÖFÊóÐÅç´”]¥(åèB�´˜]lŠ$åEèbÑ;YÈKÐèJbtÑA)/“ò99'æeäéSŸgµW>i)Ïå�Mó0£0H! +yºí³˜]€‹� 2&sˆÀpYGV¤¶!ˆlmÌ\ƧMúC¨4ƒ½Rm *ÍPwÒ#PAA“ÛvÌûÆÖN÷þyÓ/©ÔÝ�(À¡K�²ž6 +£ŽšÌ#�ÉœD‘w˜|ÖV‘ „ÆAñ³Còó†W^6NÌ8ˬj¡Ó Oâ˜)Ãa½âW&šÂÕýÑ9ÍàX^f@³9>ÑÉ]W:1…¼Õô¸Nö¶@hû:ÎwÃNeæõiAzd¾³W™uY’ß1 ¼Ÿœ ;YR´íÜ Êœ8¦Œ Ÿkx"pV•¾oÃÚ™ù…j 'zØ%�vÚyl<¬V†×ß“ =&;­õÒ]~Ò:è;`â��èB#ËûÇÆéðLc2ço�òŽB’MÄËÍŸ¨ƒÝš†Ôø›¸¹ºªÛpÆÏ®jÞ¸±áM¦…ŒW¸ñàÌæFÆB_x�ˆ(QR�¡M]hAþm^‰ “£c"¸(£J_#<‚ܘÌy a§}‰dÈÍ�)ž‰óBÔ³]"‰›ëv¹æ9PãÓ3Ñ:hsc–1&f+I�@MóÞ³±ÉJò{1E^DŸ6H†5&s@ñ¥d2â9V¢Æ•ÍW¶á°§}˜Ë‡5ÀJ=+  g­èQàôÒÇ€ÓËŒŸ»cü`%U +–wMCæí‹Ä{»¸9l,Lu²°ÖwM_å™kx¬ÂïaWxÝà^ôC””±·ã£Áé Ìyºßóî¥üD7v]i;û+ÕçyoMÆ£UöÆ í[pb«ÚK�8±ËR® ¿c(�¢Ä|ãÑ Ìy ùÔr„øL(­*ýó"¢¾�#Q/},"îr'"¢”Tð:@Ðð):ÞùI�À4&s0ñŽVŠš�Î?LëJß·`‘ÖfŠG²Yð/qD½Þz'v”Ë–õØ^³Çð[Vc{éø%3EáZ’߃Ÿ!Þ">-2ºk8(søan²ÉûgÂoUéûÖì}Ü8·®Ù$ð³ç3Àg‹yêÛ:²ÕØKÛkìåwE|d9h>Z6 ¨1™óÊØg�Á|& V•¾oøke �µ'&>/†³ò×Ë!€umX'}`½üŽ÷»ªøÑ.:pÎaPæ<ã3|>!Ä}&ÀV•1ÖvË3f®®ÍCÀ꤫“ß Ï¯*hãà@{bƒ2§–×0Ý¿äcoÖºÒ`M@Ú°WÝ6ÕÇÖ‚¿«×ãˆßÕKó»zù=°yÔ‘ƒã'ø¡L"šýï‚mPæ<`ã§—"_ùÀÅÁ¶ªô™`›ÊêÆå¿sàc”Í&J¯ï‘M”^úØ&J/¿ JØ�¬žž>Î.Úðhe{Pæ< ôœˆžÊ€«Jß·à¡&½·J.­ˆKe?Œùu 'uz=fÄem½—aÄeu]賞ZÕsý|o÷ŽŸ,äg¯�_¶”9$ùµ:óÓõO„äªÒ‰'[~Œ <7áD=9¼âÕ·õf‹�ØK�Àlñ…Öé.œ2¿�ÄZà•ãçÂiLæ4p +š®œ^Äñ<8­+݃ӽ(uV 0ú6�½ô±àAhý.¬‚ +QÀ´§ëȶÿáƒ$c2ç�ñ“/ÜþLX­*mMÄöB}l¤=.óé;Ñs;p(¯ðN—#‡p{éc‡pù�Ex–ÊæúÀ¡¼A™óÎóÓ)ºÊ›ÉaíCøíFr·9¥Ì5îÿ8'­”ÚÛp�ÏÎj‹î65ƒ2ç¢Ä¦ÒwŽºm‡hYµ�z=oS¹™Ñ+õv+l–Z==&rš¡ŠšŸÖ°^˳é�®*]Ñ÷øìjÎE÷õ9ÝK;-ÈïP0\¥ƒ<ª£ó{Pæ< áGtš–7në1°2ŸËÍ—ÛjÌÛž ZâŠuóGãŠ^úX\!ÈïÁÁÁ”ÛDÉŽ¯ÊœžÍSLY>">ýkÿ,˜,®×Z­£ë¾½ô±u_A~&�‚ò«¼®n•B4é!LÆdΓħ"5¿ ñÞ3RÕªo�Y4°q?7½oàÔžÒ�g°]·6›a\)}t©¬—>¶T&´~7Øœ^¢ã)òK6Á©} /ŒCd1(k¥öÜÉ„ž5&¸�ƇhPæ•}V•®¶ñº÷D<ú8]­‡€ÓIN/¿Œm†yå’ ®1™Ó@'k~ªÃéðÌc ëJßo Ó¼_r÷u4Æ«oçˆáê¥�.A~LÙde€ÌÑ]‘A™ó€‰ø¹Ž€©úL0­*= ¦oßR7ïê48²ÒKÛ ä÷`æP‡ÍÙ8"0(s˜y¶ÎP÷©œµªtf÷^“4Î<][Gžïê¥�=ß%È‘màWDŽ.å ÊœP‰Ÿáà×r?P«Jߨ7sWÃ>�G–{écË�‚üÔ2S®‡· Œª`CöôiC"§ÚôÖSá¾ÈçV'.ËrÍ‹ÀÚ,,w{6:lVn~šßºŠÐJ_ a�ñÉã®——¸ÖaxXäA·O:Šï$½šÍ;@¹{Ã|Ol�n‰Òu:ù Å·ÞüÛ�ï¾_zÓ~lž3Š<¿¸ÇJÏÝŽjÌ-ËG SÙa½•ãt_Ò�·¹:• øiæ2üBf´aPŸÉsß´æÅ6Ýèò©ëîß.az#¶™¾Š ÃäYf>IáqÿñVùmÚäLé^3uˆ¹Þ‘œ>6õ[-Å#Ió')x›vêþöb.ÿÛ40_.uñ=2€oߊÑS2¿Ün›üzáo9!ž…LæÄù§®uñ)�MÚ æTy[’¼ÒóÏ\+'_~Z_î†å}ãw8ó™ÝrÅX½5,$B2˜>™ï³kNæ7Ð%EóU¨ªÀÏ5q©Ðµe— +Á‡É¼wº$ú>Q7Í-ÉüFÄRÖÖŸ¹Ž9«êm×™føKY›áÜK|¹ YÚ¦¾Š©ü•—RUé]°XI£F©\S})YÄÕq’^.Bâ׺TÍqÍoF�ß•KLH®–Ë¥œ�ôrË͵ù:R±–J‹h.=¿¨²@�Ríx!mê£95òäš9¢©ü\'�2ÖuÜØ.ñå§›»ä׋�Bi¿p…özm"5õÖ䤼,©1•®ÂÔ,iü¦qþûF¾¦2óL?Œ«�â¯,WK#<7kòº“ÚôPYÇI=À¯‹5]*ꎱb¶í/“´PžI·–®=¶Jmº¬I�¹¨Ç$UÉc�l*êj2SXéŸÊ•m¢.J ¹%ÙW(¿®’=}�ª^ׯ‚iàîk½Kr¨ÜùÚ&Ç:â†?ýPõ­õ6˜/‰/“asÛd†~*�,ɼtXàSkÅ@ +KòB£¯Sr™­•�øá�òs™d’Å}¹üz™Ìœ%oÙE døKF­wd®ÿC™ðÿ¿/îúcyuþÍŽ[]ÙÂVn]%·–Œ¿{—“ù;x%±N›&Ѻ†ö—d“–²¾ ¡Úqk¾v‹¸^ˆ½”4•AMÍmýÒ‡M²­Ðµ†šžñ;‰/›^¬ŽÌ›Å`ß.©ÜìüÑ…¢.ÚÛÁeZòh1ÉצJ\qÑŤ#×ÙFm¥¸lÌ‹f+5�m#µëY×q[ÍEãFð%-yn1³mÕ%mº‹¦\`j/ÚŠ�iÍ+}¥ß<½þð¸Ï*‡28µR{M}mSë�qj%<9•¦Ë°¾¬6‡¦õ 2y—ªuQ3÷¨:9ËÔX\ ·ºh1Ú¤¦El.àÛF]I[5Z E¥ ¤é’VkŒE§0‹•n™î8‰½«O±¤þÚö´oG¥v¢oG%te¹Þbñª·DÕò-œãrwz)Y}É$¤…Vº¦º¥$•´¾m·n»XÛksnQ$,ž©^Ä|WòMü÷–¹s“Ù¬H¥ÊŸiäåc30ÔÎD²4}?X§À!Ž?]j–4Ëì¯qô+e�£m á‘ކ¿-«ðŠŒü8£©ª|%ZãǸ„[:ÖÂÎBsº[Á™>Šÿæ…œz9Tä/ÿ;½‰?Xµ—t¦¥–´Z>™þüyPÛ· +endstream +endobj +350 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 349 0 R +/Resources 4 0 R +/Annots [ 351 0 R 352 0 R 353 0 R 354 0 R 355 0 R 356 0 R 357 0 R 358 0 R 359 0 R 360 0 R 361 0 R 362 0 R 363 0 R 364 0 R 365 0 R 366 0 R 367 0 R 368 0 R 369 0 R 370 0 R 371 0 R 372 0 R 373 0 R 374 0 R 375 0 R 376 0 R 377 0 R 378 0 R 379 0 R 380 0 R 381 0 R 382 0 R 383 0 R 384 0 R 385 0 R 386 0 R 387 0 R 388 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +351 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 799.173057 99.933071 780.423057 ] +/BS << +/W 0 +>> +/Dest (cb9-237) +>> +endobj +352 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 780.226036 99.933071 761.476036 ] +/BS << +/W 0 +>> +/Dest (cb9-238) +>> +endobj +353 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 761.279014 99.933071 742.529014 ] +/BS << +/W 0 +>> +/Dest (cb9-239) +>> +endobj +354 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 742.331993 99.933071 723.581993 ] +/BS << +/W 0 +>> +/Dest (cb9-240) +>> +endobj +355 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 723.384971 99.933071 704.634971 ] +/BS << +/W 0 +>> +/Dest (cb9-241) +>> +endobj +356 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 704.437950 99.933071 685.687950 ] +/BS << +/W 0 +>> +/Dest (cb9-242) +>> +endobj +357 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 685.490928 99.933071 666.740928 ] +/BS << +/W 0 +>> +/Dest (cb9-243) +>> +endobj +358 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 666.543907 99.933071 647.793907 ] +/BS << +/W 0 +>> +/Dest (cb9-244) +>> +endobj +359 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 647.596885 99.933071 628.846885 ] +/BS << +/W 0 +>> +/Dest (cb9-245) +>> +endobj +360 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 628.649864 99.933071 609.899864 ] +/BS << +/W 0 +>> +/Dest (cb9-246) +>> +endobj +361 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 609.702842 99.933071 590.952842 ] +/BS << +/W 0 +>> +/Dest (cb9-247) +>> +endobj +362 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 590.755821 99.933071 572.005821 ] +/BS << +/W 0 +>> +/Dest (cb9-248) +>> +endobj +363 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 571.808799 99.933071 553.058799 ] +/BS << +/W 0 +>> +/Dest (cb9-249) +>> +endobj +364 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 552.861778 99.933071 534.111778 ] +/BS << +/W 0 +>> +/Dest (cb9-250) +>> +endobj +365 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 533.914756 99.933071 515.164756 ] +/BS << +/W 0 +>> +/Dest (cb9-251) +>> +endobj +366 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 514.967735 99.933071 496.217735 ] +/BS << +/W 0 +>> +/Dest (cb9-252) +>> +endobj +367 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 496.020714 99.933071 477.270714 ] +/BS << +/W 0 +>> +/Dest (cb9-253) +>> +endobj +368 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 477.073692 99.933071 458.323692 ] +/BS << +/W 0 +>> +/Dest (cb9-254) +>> +endobj +369 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 458.126671 99.933071 439.376671 ] +/BS << +/W 0 +>> +/Dest (cb9-255) +>> +endobj +370 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 439.179649 99.933071 420.429649 ] +/BS << +/W 0 +>> +/Dest (cb9-256) +>> +endobj +371 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 420.232628 99.933071 401.482628 ] +/BS << +/W 0 +>> +/Dest (cb9-257) +>> +endobj +372 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 401.285606 99.933071 382.535606 ] +/BS << +/W 0 +>> +/Dest (cb9-258) +>> +endobj +373 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 382.338585 99.933071 363.588585 ] +/BS << +/W 0 +>> +/Dest (cb9-259) +>> +endobj +374 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 363.391563 99.933071 344.641563 ] +/BS << +/W 0 +>> +/Dest (cb9-260) +>> +endobj +375 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 344.444542 99.933071 325.694542 ] +/BS << +/W 0 +>> +/Dest (cb9-261) +>> +endobj +376 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 325.497520 99.933071 306.747520 ] +/BS << +/W 0 +>> +/Dest (cb9-262) +>> +endobj +377 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 306.550499 99.933071 287.800499 ] +/BS << +/W 0 +>> +/Dest (cb9-263) +>> +endobj +378 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 287.603477 99.933071 268.853477 ] +/BS << +/W 0 +>> +/Dest (cb9-264) +>> +endobj +379 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 268.656456 99.933071 249.906456 ] +/BS << +/W 0 +>> +/Dest (cb9-265) +>> +endobj +380 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 249.709434 99.933071 230.959434 ] +/BS << +/W 0 +>> +/Dest (cb9-266) +>> +endobj +381 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 230.762413 99.933071 212.012413 ] +/BS << +/W 0 +>> +/Dest (cb9-267) +>> +endobj +382 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 211.815391 99.933071 193.065391 ] +/BS << +/W 0 +>> +/Dest (cb9-268) +>> +endobj +383 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 192.868370 99.933071 174.118370 ] +/BS << +/W 0 +>> +/Dest (cb9-269) +>> +endobj +384 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 173.921348 99.933071 155.171348 ] +/BS << +/W 0 +>> +/Dest (cb9-270) +>> +endobj +385 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 154.974327 99.933071 136.224327 ] +/BS << +/W 0 +>> +/Dest (cb9-271) +>> +endobj +386 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 136.027305 99.933071 117.277305 ] +/BS << +/W 0 +>> +/Dest (cb9-272) +>> +endobj +387 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 117.080284 99.933071 98.330284 ] +/BS << +/W 0 +>> +/Dest (cb9-273) +>> +endobj +388 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 98.133262 99.933071 79.383262 ] +/BS << +/W 0 +>> +/Dest (cb9-274) +>> +endobj +389 0 obj +<< +/Filter /FlateDecode +/Length 5112 +>> +stream +xœÍ]]«$9r}¯_QÏ “£��³`Ã2°0àµ{aðÃíÚî]–Û†Y?ìß÷‰¬ÔGfFUªîÔ05wîíÊ�BŠ”ŽŽ"$e–=ü|gñ‡ÉNÌ9E:_¾�~>™)ƒÿæ«‹9ùOøMál ¥)Ø9œ¿‰À§)åàR<¿ŸðgsÙg?ý÷ïNÿ»Ö±g7å� ç|‘$òSâ”LP’2’ŒõJRSJ.D%)Ú ·˜³–3B"Gû¤3(sÐ’`9ÇJà OÉú}R†.YÒ’`†Í!)IÖÀëŒQÓ`ˆ!òNI³aŠhô¨¥9;EÎ.«i i69-Íû)&²ÁjiyŠ1ÖÒ¶„l¬–`K°DFKƒ-ä9ii¶øè�š['¯¥%ØâÐ:YIcØt±š[L4VKË~ +™‰Ô´Œ4É÷i΄)°÷FK³v +À¦WÓ0¢ÐI1)i¶D²š[‚7NKó°…ð£¥�'‚OÌÊhu2º½ñVK °Å¹DjlAçk à"l1)j€4 /iàRš(;ÒHÀ±Ÿˆ‰5pœ'JÉk4àr˜(æ¤ñ€7iÎjDà l 5&ð¶F®š[|&� ¼ƒ-È q�÷°Å‘׸Àƒm hѸÀƒnÉd«q�ß’±QãÂ…™FãÆõIãÊ”²ÆœëÁ�x�.†{Ò¸Àƒu}ˆNãÚõÄQãÞõd�ÆÞõšjl€5.;N޲׸€À»Þš¤q�w1ŒœÆèÕ 8Œ+“c6x×±!� ¼ë¦5-Mƒ^ãﺀ[Ðfnð® Æi\@à]G.j\ Là£zà]PHÐÝØ‚Õ¸ó=Ҝ׸…Mn‰Æ¼k3¦?eLƒ­&Ë9j\À»–Ñ}jZžlB‹+ã­<ٳƼ‹‰Êk\À» OÖ¸?aFuð®õ˜©µ4ð®uÙh\À»ð‚Æ€Ãdáh\€ùm²ÐUÓòd2³Æ¼ Zr`ž ƒIÔ´4HVã�ñdà‡j\Á»˜Þ³Æ¼k‚÷Dð®!¸=jlñì4.€_ƒ4 [eLÃY�ŒShià]cÑÃZxט”5.ˆà]™65.ˆIŽ5.€�¼`§qAdšrJQ゘ Òàò©iqÂuи (KMƒ-”Hã8ÖSö™5.H¶xç4.H¶ÀeиÁ”-¼o5<€-€‹l�§¨q˜lâL¤qA +ñZUK‹nâºVÓi6i\�M˜Š­Æˆ¥&Ơ׸?‰»¤qÌ@š%� R†-*`*šØÁ3×Ò,l�“­q<]¤Y«q;ØoPãvŒ(3� 0C#–DSkid$Îd� ˜â$®¢Æ&ˆ4Á”jlMh\€þ‘`;h\€àÁ&Â5 ¶ø@0; 7YãfØâŒÓ¸Ø”x3i\� l�ǧqA6q7YãÐ8ҌѸ [F¼éHãŒK‰7Yã‚ì âM„xʸÍ>J¼™4.È[\5 ¶ÀiÊʸ'!Þ;ii¶¸Lä%Þd� àf Þ„G¯. °Ä›I].ï† fÒÒÀ»ðL£Æ¸@¼ ÏV‹í ˆ7$øgz"KÄÉêŠ�õÌ­ê’�÷b¶Jêš�ùJŒ¤.ÀLD–ÕUL«H´F]60à_øc´ã„ëêS¿D‡„9““Üdư x÷5æhÙü�l×õ±üõôý&ßó_ÿïôõwóJYù±¿§(�u�!â2ºt5ÍÅÑHÅJ¡ÙBø1"åf¤-.‹nb$¦bL·ù\?صɰXl¶pfæ;£¾^D +]å£nëÃ:O²µo#ádƒ€³o$à +³ÜÒ|£aÇ”~…–m·fR­}\éYÖúR1¨ ¡ãyÕ08�^ô†1VeJ1>Løu×âæEºà7]¯‰yøýýJˆÕŠóÍûJì_•g�µí•nÐyY€ÄERÔeun1þŸÖÈà0\tt�•P qhr`Sù˜~ eÌ 6Áa}"†VeÎ*Ø,Ü\:¹]þ�Ç=i­,‹z—÷Õ  ¨Bp§<‚¢Âý-~1ˆÆu�üàf› Ö³²b�PÌñŒu^Gˆ9v£'í�´.ô§) r¶,DnAQ/ûº¹^Ò + +L¶pˆˆƒbÙ1øà<{Ÿ˜¶�5Š>F�x—¦~ˆ.döÍ×Í�LÉÅx¿1�×�@ãÀ +æ™<¶.tnfnDV¡G©)0¬0 7ò¾Avy¨ûwvƒ�ç Dí®FÀ—Ñõ6e§¶J”Û÷µ”»ƒ$ü@ÇÑg3ïÚŒxËArLçu ™dSî’{&$W…þT`Õò4þ¥1Ý »�¹µM�ûzqÑöÚ�ùhÊ]>1–P=–å[ ÚY"íûRy€9YÝBµ9©[ãæ”·ä9`&Œ7Ù¤ØTÚcÛ⩱'i|Œê¼N¸8“r~æ_úä®ìüç}=�8Ð{íÇ<è½>åÆVe|¯|9f²g•ˆdÍuÔ¹Ôy˜ÉÞ·lñ3a¶*ô§Z¶›6|× Ÿ;¸/Æmò›16WzoÇ#®ô^û1WZÑ¿³àâ\±MöœB¸Èt„µ!•×�ZÂbd¯B­8½Dì6Èá’ÅÿuáC]m#Oþ€wŠöàeËÉÎVÑÜ«pœd'cÞ¥¢$ç>­,ÞGÀ˜ÎË@@N‰±ÅÔ«³Í*zkqͽPüY1P÷k#ïù!çG'›ÆNÎŽY2ñhoPçuºÌaBc‡9í‰ĺйëÍÒ}Ÿ—îeeÂÈ .Ýx’ëpc5FÊyS|™/®/ûùp8ÉföÞòCžñ¸ï�Ø$M{ Ý,Íšþ�)Å{ž¬›Ï«ÈÑM9Üm�ePçuàd îV~&ZÀÔy8ÉXådäÙŽçÁi]èè¦ÉMÈ•ôîzŽ ¹ãÀáµç½mǰl+Ï{푉ÙÈY_ëØÝk™{°¼‰î•^Å,oºjêewPÔ-(áXB¨ÿñÓ­Wý¼P#Ë×Ãr][;^¯ ZÙ}^fÉ“6ùø*“|R¦û‚_.ˆÁÿ%¿)³Qñ½»òã~V£²ÁÿÖõrèt··×ö�K‹ÄUSpœ`G¢PZ|¶ês³ Ül�uK´;\ôî®]0ݱ…E/våtöP\òÛmKh­pÍ7—c—ûàVGéÉ�»ÓNà¬M;Íc0.¶]›sg'-ÿªY×»×{žm§¥½¾.ö¹ë½Îˆør½W*ýZy¡k;k?Ö/¥Ý«ÍEoI{°Ýܶݴ>ŸËÝô×è}V[mמ¥skÛ§5é¿¥üùžb«£âÈ.ëÚrí—¥ŸfÛßtÌÞ¯ónûÑwi©7.}b¦ +vÖøï¼Á++þǧïÿu™Wu%9`/‡Å¿�œ�°cŽ¡—¿Ë½Yv¶Ïÿ<ý§L·…zW3k»•U1ý­ìXwî·¥MK_\W-–ßË~\—qr4†nqÂ7á°:¦K�—3VtO<È2 ®å(.Ü‚ì}8Š(ÇT~kÇ)Tse§Î;Awœâ�†ÉIŽ 9>º%5¨ó[7M;Ì70~£iš_)³�Wol/Qçôz{¯¡Ûv~Ó›?Ê£÷<�y –C¯Óô²­ØÑc¨D¸2É™tNÁÐä,Íg„î7̘Îë4�ì‚8|Ò�‡í"’n+p뛯vž¼ÙG5Ú°¸Ay(Œ¿\_n”©¦XåÝŽ’Êä�ýZ´UЬŀ•Arð 6 8¶ÄÒ¯Lè÷Úe,ßÝZ›;ßÞÉrmÍf]¬[Æ­Ÿû}C}ÈÃÔ‘äá5—€n–×y ƒ1�ײÄ>zý˜möôëù�ÝZø¿[ ¼ êg¨?pºqmæ£[²{í6ÛŸ!_« µ°Î?Þ.76cöp‘�Ü¥™X`pøPÀ˜ÎË@+É–Eïo0¬²>²æýˆ0ëѾ¼¦=‹ oG›2¸=›­�fs{c[:mCh¯=´¥S·„öú;¬’œ—Æ9nPçu€(›S&ËK[~K ÎSñÖIí§ü~¯ñ!Pv°XÝêà>cÝ'Ük�€2"ZŽ”²¦ÿAPRžä= rºO2vf~0û>(Çt^”q~S‹¼%ê \íæõÓ½�ìQßò6`2"8=››ƒŸ#y< 9íøuŒ¼Ó_í‡ò!ìäI,KÙÄñsƒ:¯;Ù�òDö~]Ã¥?¯]áñ 'ã°�(-›ã;È—Îë!Úoú‡+=7­nüÞñœ”³ßºÐ‡Yl`ß®mèîëzä¨ð^û±£Â{ýǘ†åq)2Ý9ú(À˜ÊëÌËt íGö? Û�»\>vj³�ºÜk�À\ž¢MU_¶An,1²<œ„nËnt‰qHãu::Bê\07˜äÆ#Ð;Q Ql]øÔy�¦aL +Œªo¦è¾Û†ÙfÞýüÜïùý3Ž=£qHãeš<[aÉÄùÆq¨hÌ.L9Ë{ÏNÞÚ´¼¹è~ÃŒé¼NÓʳF^Ízóá¬Ξڗµ×W§ô~yåF@²]ÚU=¿·Mµ<¨ó: ‰ Xy7×3�® ­gI + ¶Ëý¯¿t®hòÕÚ�éäÖÀ9 ÖNsíí<Ž^ÛY®½öHôÚbg¥ö²›Á7)��ØWpüÑ�A�×d6ò‚6¨?õu }¡�j\ºa¦x«g™o½Cdx�boÓ-²HšRÊv~t>""2²£vð$ñ ÒËt¼5VæWŽéÆÞußó"¡E›ZVÏ>é ¡î!ò}eÇA+ÅùeÁ2kìÕëžéga ü–m­jÀó§åejP“Fð½ÓÞÍVs˜å»ÃQõuXg»yýÔúØTžãiy=ó¼˜äŃڡ)ýø©YZ›«-$û–ó§âY,ÖÊ‘S™/0å=‹t=øfË!Äí!ÐϦ=Üq]RÝ6÷ϧ8¿èÒÎ/;6Ò¨N¾ ጀIΜ¦|–—k²ñ ÿ¥yíÜ ö|Csþ‰Ÿk.ù ‘‘7MK´87±ä¿ƒûv’Óør�2®¯€7³˜]¹hâ÷“|)b¢vÂø@,Â壩e‘­–‹ì¦JSÞæôa2ËÇvªYŽ\]?ÂÿŽM?5ÕâÓ•+ÁêµbEÍh÷b¹{3ÙE,_£À“_®b54š«°H}ÞV`S<Ëb†½ÐtÕ5±¬•¼®~̵Ï!¬¦÷Mg»î/y]êºóžðrBµ~+}W¥òòöRTi]gªÌwFå* %gíªý¤ˆ.'Eø�)E:³¦w½&¯À½ +¹‰j¾\ò)¢ËIÍ·”jO¥š‹›j.-ßLiP÷\^‘]º“ÿI¾¦#Æ—�kq”(}m¸Ã�Û /§@u$6ñû)$%wh\aB�^/ô]¹U̦á¥IeKùú C³Èä¢ò÷J¡J…yæ–*¤ä%ÀíªU"c³Š×�ÔËceÒZ@Üf»“¢ì”*fûö¼¬äÒ­¹k‹­¤]“uò”‹yBR•<Öb[QWÅBa¥}*WöBSŒ@uM*”ßWâfg¨C5˜ZY´ÜC-·‰cåÎ÷^œj�[y£sµ·–Ûa¾/óÄF[±@ŸK%M,•øÔÊ:a3 ¤ÐÄ�Fßgq­•�$¼/Û ÓfÜËéo§yšs>8q¥£·ò½wdÏÿDž?â÷ï':ÿXÞˆ{�Ç�©lá*·®ÄýL&_gÃbùz›"¬Ã¦:êh¿‰-·¼¡ ¡ÎãÎu|MMÝ4b/9meP[S{ahm؉]…®³¾k™pGxÙ´bud~iß´ ûzéËÍI( ïR.Vᢿ\rKómJ>wEâJ²¶)©ä:E\ô…ⲫ07ËVf + ûJjÓ‹ýÔw…ì½ô�!—¾¥Q›fû¢‹l¾‹. \`ß_ô“í+Í+{£?<¼~q¿/&Ç2DZ©½Jß{i½1‘VÂÓ¥~¾ŒëË:çø9Ò,ƒ·µP-ËwcÏW'§ �æZÐê¢Çh'妶d}¥Td«JËDQé2SdµÄTlŠ‹Zi–ùŽYm¥T}Š&ý[ßÒ¡ï•Úˆ¡ï•¸Ë+å–¯zK¾:@¡‡sjwgZÎêK²"‹½v•RËé‹l_7­ë.³í¹» j†Ä晚¦v9?Ä;ê£TZ®ò3¯`Xnï�ÇD-¯ð‘u[qw8FpÉ7»$ânIãa�ûkû•Œ²ÆÑׄî˜È{“¬|Á£nÂ;òqBWTùòG]M•[z¬”%œFsûßæoøÂËBN½L*ÊúÉÓ[Ìò=DÉXuIg^jÉ«å“ùçÿ‹]@_ +endstream +endobj +390 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 389 0 R +/Resources 4 0 R +/Annots [ 391 0 R 392 0 R 393 0 R 394 0 R 395 0 R 396 0 R 397 0 R 398 0 R 399 0 R 400 0 R 401 0 R 402 0 R 403 0 R 404 0 R 405 0 R 406 0 R 407 0 R 408 0 R 409 0 R 410 0 R 411 0 R 412 0 R 413 0 R 414 0 R 415 0 R 416 0 R 417 0 R 418 0 R 419 0 R 420 0 R 421 0 R 422 0 R 423 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +391 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 799.173057 99.933071 780.423057 ] +/BS << +/W 0 +>> +/Dest (cb9-275) +>> +endobj +392 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 780.226036 99.933071 761.476036 ] +/BS << +/W 0 +>> +/Dest (cb9-276) +>> +endobj +393 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 761.279014 99.933071 742.529014 ] +/BS << +/W 0 +>> +/Dest (cb9-277) +>> +endobj +394 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 742.331993 99.933071 723.581993 ] +/BS << +/W 0 +>> +/Dest (cb9-278) +>> +endobj +395 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 723.384971 99.933071 704.634971 ] +/BS << +/W 0 +>> +/Dest (cb9-279) +>> +endobj +396 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 704.437950 99.933071 685.687950 ] +/BS << +/W 0 +>> +/Dest (cb9-280) +>> +endobj +397 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 685.490928 99.933071 666.740928 ] +/BS << +/W 0 +>> +/Dest (cb9-281) +>> +endobj +398 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 666.543907 99.933071 647.793907 ] +/BS << +/W 0 +>> +/Dest (cb9-282) +>> +endobj +399 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 647.596885 99.933071 628.846885 ] +/BS << +/W 0 +>> +/Dest (cb9-283) +>> +endobj +400 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 628.649864 99.933071 609.899864 ] +/BS << +/W 0 +>> +/Dest (cb9-284) +>> +endobj +401 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 609.702842 99.933071 590.952842 ] +/BS << +/W 0 +>> +/Dest (cb9-285) +>> +endobj +402 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 590.755821 99.933071 572.005821 ] +/BS << +/W 0 +>> +/Dest (cb9-286) +>> +endobj +403 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 571.808799 99.933071 553.058799 ] +/BS << +/W 0 +>> +/Dest (cb9-287) +>> +endobj +404 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 552.861778 99.933071 534.111778 ] +/BS << +/W 0 +>> +/Dest (cb9-288) +>> +endobj +405 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 84.259843 443.811778 177.650223 428.811778 ] +/BS << +/W 0 +>> +/A << +/Type /Action +/S /URI +/URI (file:///doc_tools/%7B%7B%3Cbaseurl%3E%7D%7D/rancher/v2.6/en/installation) +>> +>> +endobj +406 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 415.114756 101.433071 396.364756 ] +/BS << +/W 0 +>> +/Dest (cb10-1) +>> +endobj +407 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 396.167735 99.933071 377.417735 ] +/BS << +/W 0 +>> +/Dest (cb10-2) +>> +endobj +408 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 377.220714 99.933071 358.470714 ] +/BS << +/W 0 +>> +/Dest (cb10-3) +>> +endobj +409 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 358.273692 99.933071 339.523692 ] +/BS << +/W 0 +>> +/Dest (cb10-4) +>> +endobj +410 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 339.326671 99.933071 320.576671 ] +/BS << +/W 0 +>> +/Dest (cb10-5) +>> +endobj +411 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 320.379649 99.933071 301.629649 ] +/BS << +/W 0 +>> +/Dest (cb10-6) +>> +endobj +412 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 301.432628 99.933071 282.682628 ] +/BS << +/W 0 +>> +/Dest (cb10-7) +>> +endobj +413 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 282.485606 99.933071 263.735606 ] +/BS << +/W 0 +>> +/Dest (cb10-8) +>> +endobj +414 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 263.538585 99.933071 244.788585 ] +/BS << +/W 0 +>> +/Dest (cb10-9) +>> +endobj +415 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 244.591563 99.933071 225.841563 ] +/BS << +/W 0 +>> +/Dest (cb10-10) +>> +endobj +416 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 225.644542 99.933071 206.894542 ] +/BS << +/W 0 +>> +/Dest (cb10-11) +>> +endobj +417 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 206.697520 99.933071 187.947520 ] +/BS << +/W 0 +>> +/Dest (cb10-12) +>> +endobj +418 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 187.750499 99.933071 169.000499 ] +/BS << +/W 0 +>> +/Dest (cb10-13) +>> +endobj +419 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 168.803477 99.933071 150.053477 ] +/BS << +/W 0 +>> +/Dest (cb10-14) +>> +endobj +420 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 149.856456 99.933071 131.106456 ] +/BS << +/W 0 +>> +/Dest (cb10-15) +>> +endobj +421 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 130.909434 99.933071 112.159434 ] +/BS << +/W 0 +>> +/Dest (cb10-16) +>> +endobj +422 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 111.962413 99.933071 93.212413 ] +/BS << +/W 0 +>> +/Dest (cb10-17) +>> +endobj +423 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 93.015391 99.933071 74.265391 ] +/BS << +/W 0 +>> +/Dest (cb10-18) +>> +endobj +424 0 obj +<< +/Filter /FlateDecode +/Length 4783 +>> +stream +xœÍ]ß‹ä8’~Ï¿"ŸF+)B¿`™‡ƒeaaàš»ƒæzj§w9jfïáþýûÂiɲ.+««wQ]é…V„>…²ÒÝ-~~pø/³39—ùþòëí·›5)Xü›J¬.&ö_ð›ÂÝYN&¸s¸ÿ*J&•àS¼¿Þðßæ²/þzûÏßÝþ±–qwoJ‰Þ…û?“I9%VË:RX!˜”|ˆ ++:ƒ[,EcA��Øóž• —4Ô`ï³ÂÊPƒ89Ú³ +ÔðɱƂ®„¤°œ…Î[«ò ˆe&¯ð\0�5žw&æâ‹ÊKà¹ä5‘‰‰]p¯˜cÈ�¡K(Öi¼]‚c¶º0å¤ñ"t¡HVåAŸi¼]²Ø`ñƒÅ&–9*ºP` rö²ÜÌä ]¼õÀ7e½™4,(º âÓ° Øh$LÖ°0žµ—±Þô¬aÆ¥¬7³†…,Ö›Xâ)ã¶P”õfÒ° 0t QTtAÐT”q LÂzè¤ñ"tñ…5,(1Êz3kX€0ëMDôjJ Ëz3©éàn(@&�ÜEd5,ÀÖ›ˆlµµ½ð†„øLgfYqf5c`½s«š2°À^ÌVIÍX€¯¬‘Ô¤ÔÄÊ2G5k€iLgÕ´�þ"ã&<²O}Š*ÂæÌœä& †#ºokŽ¥{äÇþù·Ûï¿`ò½ÿío_7eÊê�ƒóGYX"¾ÀÜ€+3UÇ0´3‘' ¡à{dD‰T%`qNº‰’˜Š1Ý–{ûàÖ*CcÑÙ!˜™îŒûv±Rp0E]×§e>JWªíbøaù€à ‘6‚i„GŒŒ%ö”¿ì4}Nâ#ôD; D”¢â91óZ^þ·O7 ¢¹ùG~¶]vjc.gt­·÷O¿Þ~ÿéOŸþã§ÿB³Ÿ¾Þ>ÿA‚»põïß?ýù�:…`IœaªU�R §G5ÁÍãyu2!\-n_�ûë�“ð?­M€5;#\CGH:2YD/îÄjc"ï2Û÷°V Ê¼œ[ëIë!Þ³.àøª�ϽÕüãoµ&çùï× ?Îyæ½Ý4"åiùã¾é#KÙRÐ׉�&L‡'¦”¹Œ­±FÀ2 ½ïž7ö“Æ—Q`ÙË„ºjt»/°,‚Eö³EÓÚ BXv‘Lجñêh­QJ…Ηu$µio•«ü/ó­õÿ¼”ééb­9ûziÖ½êQfÄÙDW!lÚÙÖSëï"»é·C«]Ä6_»†2;çËIòíò,eÜùÆd.ã|²—)»‚EþSÎGiéÜf˜´7Ð[ÑÍ·8N‹Š6¼]¿iwÓþäT_÷NÔøiÓ&=ç°î¯û´pÕIÇ?Ì(&G/�j±˜�7°$¯ßvÁA™ë¸ ÇD–±<àowÁ'‚ëo­�w8DûôÆä&¥û¼­ó$•Òtè]vÃÛÞ[üŸ7<ÝÙ€å{>B4,Qý©³�É\ÇÙ‚km¼>up”C§H†²<�Ï¡Ê\Ç$I¶X¥ÆÿÁßo…å}\s`ŽŒP;ØÈèOÙ4—(ûSsŒÉ\ÆleÇ‘•�òï6ÇwEG£…,I6OŒšgPæ:æñUú»ͳý;å3çà¦Ã3£n ’ݯÑR]ÑI\Ç0[:å©-`ÎÈ»-Ä÷Ít“giþ1‘ëtŒla +Ùó�‡¾+3µ®ôóÓÞyüÉ9yA„|QÚ8y4iû9ñãa›S+ŽÉ\ÆŒÁ=>½ãÑöð>†u#ý6”6tàíÓ´Þú.Ìç7’�Õ]ÎsâݳŽŽÏ<[ÜK?÷lQé¡wåăl”F…^dÅ0*ä³�7ƒ2×qYyá"#þýž[oÖ�|“Ë>±òìµP‰ŸBº.[½¿‡s—ÅL¯±fEzÄ¥c_JE“.WnãcövzýÔJÁž¹ò˜Ìu\95}Wô]5òyN4cÔ¿óÆ"5¡:¼mlßÖù"ˆ”hÒ#ˆä]afÎAký0 "¯CÉ £NÞ`NòRº;͹ Ê\ǽä]v[ä•àïè^«FÞr¯åÞãf�£ìÚE\!×íiX{�ŸÙ޳—nN'oeñüìSj ›kà´³Ë�L‘fí‰zW?¯ïv’Ÿe8/ËÛç)Ê6y)×!*<Û˜3(sç òºB‚®鼫J'Œ³ÊÓÄ=_º^h<�y»V�"1Êf?ëщ^N–€3ÄSÃŽÉ\ǰY&_H<*ÿ˜ÉlÕÈw›Ìv­<5™í¤®Ø=R¶�‹›m×íc÷°EÒ—+@ç§7•t,/¹Ÿ%4e.ãrÉJ¢Ð;€%ïv¹u#Ÿ«ÉúMÒ_|é_I¯.N·oç§ÛK�„æËÂ@iý`’B˜fl –|p1$q§’773š>zÀwÐ-ŒeŽÏ$»„K0r|š;í˜1™ëtM�))åòü£hßmïhpø²™‹·[Ox=Ö·ul…Û]PÌúÝn�9Ú¶âQ/™>ʦ69ÁhxDŒH\ÇìY6ÁY9î©!çaJò>þh4;(s™®ÉÓ¹:$‡~ën€]`ðE‰Tç%ÙáÛÃè)ç"GÉzøéÄ;Ng¯�É\§ËIòI_}Øþ~ݶ£XVOþG€E7ËYnÅEÌ4(s·ÓnÁDò)ÍðŽñԫÛ¤Æ_”£Rœ‘3¼Î”¹Žy³ìŸu”>nüš{óV~›é½fÛÕ%wédôx±,çY NíC—1f±²?wðHø`j/®‡™ªyÙÆŸåP䓎”¹N×�ì�)¦åg>xÂó¯ˆqŸÅžj­¿Ìç|!ü“m-@ú�:d96¬™è´È‰E¦.TOÁº»Í¹SÒóqîòl7rÀ?åûôvu’3ñýï?}úÓÒÑþç. ‘ä†åæk§ÕlÊÉö¤\�G9¡‡ÚÁéñ@h*ÙŠs™ö° ¿e.º¶â¼1Àvºüòã¶»»Åé F7�Ãkã4¯—,Ǧ™“ä%Ü,ç7s÷º©CÜý@rúzƒßZ)ù$+‡ KŠxêþþb.ÿÛd˜_o£NîQ|ûq:¹�ȲÈÜ’_or:=+dL#~�,Äù£muÉã± íØ�LÙ–¤`ìü±´Ê)Ô�>Ô»ùPÅäÔ@Ù:r÷ÿC™?ã÷n|ÿ©Öú˜Ç½mhá¶®ÈýL&ß´’ÉòÍ+•؆MGôÜÁþBvy)ª7´yÜû¯y· °×’®!¨kÜž–>ìȾ¹®wÔõLxƒø²éÅÈ|«m– ûqIõæäÙ²ó[µÂE;¸Ì �–)ùÞU‰+)ºLéà²ïqÑWŠË®Á²h¶RS²o¤u½èϽ)HÚê.º0B.iáñ2ÍöUWÚt]„ÀÔ_ô³ë-+}¥ß=¼¾Ùî³Ê±Ž¡6hoÔמÚnL¨ ðt*M—q}Ùæš¶.ÔÁ»ôP«‹º±G-ÈY†ÆZðê¢÷ÑŽš±¹@èåJ[5Z'Š ÙJk5¦ªSœÅj·LwœÕ^J-¦X¨ï{:ôVi�z«Ä]Y©·Îx-Z¢…Þ�Órwv)ÙbɬÐb/ݨ¼”¤JÛ·Íë¶ël{ïnƒEâ™ÚE,ìJ¾ ÿÞ3v2›l�VªþL ——ãÍ1Q³KäiúÆ:›c†°|éHâÜ¥4ž–y;DZÏdÔGßÌa˜È&'ß=¨«ð +F9gtUÕï%ÔÅd¯½rKÏu€’ÂY`Îî28Ó—OáßœÈi—I–Šò]s$Ao–¯ÈIÖ©)�)Õòe•>™~þŸþA +endstream +endobj +425 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 424 0 R +/Resources 4 0 R +/Annots [ 426 0 R 427 0 R 428 0 R 429 0 R 430 0 R 431 0 R 432 0 R 433 0 R 434 0 R 435 0 R 436 0 R 437 0 R 438 0 R 439 0 R 440 0 R 441 0 R 442 0 R 443 0 R 444 0 R 445 0 R 446 0 R 447 0 R 448 0 R 449 0 R 450 0 R 451 0 R 452 0 R 453 0 R 454 0 R 455 0 R 456 0 R 457 0 R 458 0 R 459 0 R 460 0 R 461 0 R 462 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +426 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 799.173057 99.933071 780.423057 ] +/BS << +/W 0 +>> +/Dest (cb10-19) +>> +endobj +427 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 780.226036 99.933071 761.476036 ] +/BS << +/W 0 +>> +/Dest (cb10-20) +>> +endobj +428 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 761.279014 99.933071 742.529014 ] +/BS << +/W 0 +>> +/Dest (cb10-21) +>> +endobj +429 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 742.331993 99.933071 723.581993 ] +/BS << +/W 0 +>> +/Dest (cb10-22) +>> +endobj +430 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 723.384971 99.933071 704.634971 ] +/BS << +/W 0 +>> +/Dest (cb10-23) +>> +endobj +431 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 704.437950 99.933071 685.687950 ] +/BS << +/W 0 +>> +/Dest (cb10-24) +>> +endobj +432 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 685.490928 99.933071 666.740928 ] +/BS << +/W 0 +>> +/Dest (cb10-25) +>> +endobj +433 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 666.543907 99.933071 647.793907 ] +/BS << +/W 0 +>> +/Dest (cb10-26) +>> +endobj +434 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 647.596885 99.933071 628.846885 ] +/BS << +/W 0 +>> +/Dest (cb10-27) +>> +endobj +435 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 628.649864 99.933071 609.899864 ] +/BS << +/W 0 +>> +/Dest (cb10-28) +>> +endobj +436 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 609.702842 99.933071 590.952842 ] +/BS << +/W 0 +>> +/Dest (cb10-29) +>> +endobj +437 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 571.808799 99.933071 553.058799 ] +/BS << +/W 0 +>> +/Dest (cb10-30) +>> +endobj +438 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 552.861778 99.933071 534.111778 ] +/BS << +/W 0 +>> +/Dest (cb10-31) +>> +endobj +439 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 533.914756 99.933071 515.164756 ] +/BS << +/W 0 +>> +/Dest (cb10-32) +>> +endobj +440 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 514.967735 99.933071 496.217735 ] +/BS << +/W 0 +>> +/Dest (cb10-33) +>> +endobj +441 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 496.020714 99.933071 477.270714 ] +/BS << +/W 0 +>> +/Dest (cb10-34) +>> +endobj +442 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 477.073692 99.933071 458.323692 ] +/BS << +/W 0 +>> +/Dest (cb10-35) +>> +endobj +443 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 458.126671 99.933071 439.376671 ] +/BS << +/W 0 +>> +/Dest (cb10-36) +>> +endobj +444 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 439.179649 99.933071 420.429649 ] +/BS << +/W 0 +>> +/Dest (cb10-37) +>> +endobj +445 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 420.232628 99.933071 401.482628 ] +/BS << +/W 0 +>> +/Dest (cb10-38) +>> +endobj +446 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 401.285606 99.933071 382.535606 ] +/BS << +/W 0 +>> +/Dest (cb10-39) +>> +endobj +447 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 382.338585 99.933071 363.588585 ] +/BS << +/W 0 +>> +/Dest (cb10-40) +>> +endobj +448 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 363.391563 99.933071 344.641563 ] +/BS << +/W 0 +>> +/Dest (cb10-41) +>> +endobj +449 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 344.444542 99.933071 325.694542 ] +/BS << +/W 0 +>> +/Dest (cb10-42) +>> +endobj +450 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 325.497520 99.933071 306.747520 ] +/BS << +/W 0 +>> +/Dest (cb10-43) +>> +endobj +451 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 306.550499 99.933071 287.800499 ] +/BS << +/W 0 +>> +/Dest (cb10-44) +>> +endobj +452 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 287.603477 99.933071 268.853477 ] +/BS << +/W 0 +>> +/Dest (cb10-45) +>> +endobj +453 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 268.656456 99.933071 249.906456 ] +/BS << +/W 0 +>> +/Dest (cb10-46) +>> +endobj +454 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 249.709434 99.933071 230.959434 ] +/BS << +/W 0 +>> +/Dest (cb10-47) +>> +endobj +455 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 230.762413 99.933071 212.012413 ] +/BS << +/W 0 +>> +/Dest (cb10-48) +>> +endobj +456 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 211.815391 99.933071 193.065391 ] +/BS << +/W 0 +>> +/Dest (cb10-49) +>> +endobj +457 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 192.868370 99.933071 174.118370 ] +/BS << +/W 0 +>> +/Dest (cb10-50) +>> +endobj +458 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 173.921348 99.933071 155.171348 ] +/BS << +/W 0 +>> +/Dest (cb10-51) +>> +endobj +459 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 154.974327 99.933071 136.224327 ] +/BS << +/W 0 +>> +/Dest (cb10-52) +>> +endobj +460 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 136.027305 99.933071 117.277305 ] +/BS << +/W 0 +>> +/Dest (cb10-53) +>> +endobj +461 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 117.080284 99.933071 98.330284 ] +/BS << +/W 0 +>> +/Dest (cb10-54) +>> +endobj +462 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 98.133262 99.933071 79.383262 ] +/BS << +/W 0 +>> +/Dest (cb10-55) +>> +endobj +463 0 obj +<< +/Filter /FlateDecode +/Length 4628 +>> +stream +xœí]ß‹$¹ ~ï¿¢ŸÎg[ò/8ò�ƒƒ,I`ÈÃNç6!Ì.yÈ¿ŸOÕe—«Z=å™íÝÔCvØé.É.«,ù“d»<îlñó­Ã¯ÌÎä\Räóå—Ó¯'kR°ø7•X]LìŸð?…³³œLp%æpþE”L*Á§x~9á׿²/þrúÓ7§®ë¸³7¥DïÂù_? ‹É¤œ’ +«€e)¬LJ>D…�Á#–¢± FHìù–• —4Ä`ï³Âʃ89ºeˆá“c�1\ Ia9 9œ·VåAËL^á¹`":=j<ïLÌÅ•—ÀsÉk<"»à4^11Æ�5C–P¬Óx²Çl5daÊIãEÈB‘¬Êƒ,>'Òx ²xôNQx²Àº²Êƒ,6Z§ñ +™P2³Ê+àÙœò-ÏÛ`B&²Ï9`›¤ò0¢ ¤˜ž‡,ц¢ò K ë5AÆ�ÆNJ9+£ÕËè&KNãÈâ}b•Y | |„,6E 0‚Œà’†>%Ãų>“áÌYCŸ‹á”Hƒ_‚áX’†dxÞi@@²Ž�ƒ,Œ‘«ò Ö°€à4Ï ÜõÁz ¸ëÙG `(øcÕh¸  z8Y°À߃çIÃÜÌx„%à®+pʘZ—KÔ° w]†úT^1.¡Ç•q‹^6.Æ¢aAîÂQ‘†¸ øÌã <ª×° wÁSk<à®óÅjX€»ˆ‚†0ãhXÿfœ…骼blÉYÂÜ,y à…�Í@•— ÉiX06q¨†¸ ÷^4,ˆÀ]ˆ4,ˆÀ]Ë{Td¡ì5,@\†­2¦¬ë�¸k4¬ñ€»Ö¦¢aAîŠÛÔ° &!ø¬a4ˆ‚½†1³))E b±à!äSyÑà:hX�,�¥ò 'Ö°�µ)T²†ÉCò^Âä! B ˜â}«éd�¹¨ùCDŠÉL.̤‘�¡W5^ô&'ÀµÊË๤aAJlàŠ�†È¥LÆ ×°o$\Ò°b€çXÂT †Š†pE&{DæÏAÙ ÒÏ9 ²‡,ˆ5,È>#ËŒVÃxhä’èj�ÇVò̬aAæh$T԰Ù&�RåAÀ„†Ð�$ÛAÃ$?H6‘æ¨<ÈB�5,ÈÙKº™5,Ȳxë5,€mJ¾™4,(² âÓ° Øh$LÖ°0žµ—‘ozÖ°ãRòͬaA!‹|)ž2n EÉ7“†…!K@ˆ¢ò ‚¦¢Œ[`òM “Æ‹�ÅÖ° Ä(ùfÖ°aòMDôê”@–|3©ÓÀÝP€L¸‹È4jX€ 䛈lµÜÞxCB|¦3³dœY�1°€ÞߪNX`/¼URç ,ÀWr$uÒb"³ÌQ�5€[ÓYuÚÀ�ñ &\gŸú)ªsHð™9ÉC FtßrŽ¥Ý)v�û×ßNß}„ó=ÿíß§OßL3eõÇÁø‰£$ÖA†ˆ/P7àÊL·c(Ú™‰È“„ð=uDˆT!`qžt!áŠán˹}qk‘!±ÈìÌLOÆ}»ÈTEQ—õÍu%+Õv1ü�> x;ð…ËÄ帮`'ê«�ž¾GQñuô›oÝ÷ãŸ\æÏOó'Ú îú½~rÞ”ñ·¼�æÏ�ó§Ÿ?ѳüsW�®´Æ‡cà þ§ÍýPÆýõ79øáô»kí!ßg„zèB›côe,; +«ò.… =#{E@‡Àçqz¾tºF{×ýíþÚ•Ý蔟Ág]æzl)å �UˆÂž*†jFˆþ‘ÁÜÝUÜéÄ ‚E¦v¤d›�Ž«sœ®A.㙼°Òî;¢¨6ú+-ÌÖ(èÐÐ&ÞZn¸|>zõ#¢•UÐçµÑ²m¿G»Æ‹·2M÷ÚÈ1=óL UÖ��|º�!Ù÷9R±Ããn¤ÆqŒ+É"¼ƒÛ¸ËR$o��ŒÅ˜J~¯cÆê¦k¼äahùÛ{½Ã{¼÷=o,KUHÏ“Dñ‰ RN¤;;]>Xç8]ŽLÅ’“%ÓG9äÝa¿uʯÁ‰®™LÌH`<Þ,�èö3Vç8Š‘u ™øË�‹”vpûýúˆì�¾e¼�Õ9ŽZ 9ĘéajýZ±ÏIfgdæmÐ1Õ8ŒjdÕ;»BéÞˆÓ»à ³ó2Ù w;=$ïôËX•ãtŒtfôÔ;¦·¿©‹îß�u$›mnúô×ýz[â‰9#Š/J[÷ ˆ(ç§U¡aeU9Ž2ƒLÁÁ –}e¾Q¹1#ÄL�ü¦‘I¹¶ShÞ¿Wac‹,w*÷ªÊ»¯zëM*¶ Êmí�'éMç¶õVÿÆx"Ê2³*Sµù#úžõŒÕ9Žù$Ù.†~ Þo>«Fžú±O�¯ºtôšîÆ}åúiQ0£´s2X°•¼, ΋h¯«v¬ÎaTËVVb­ì |³jߨj™´DØܦѧwÎ|HÊA y~^—oõÓR¯¡Ò¥K_ö +0o¦]¯Yy†]„’Ýb%r*Zí–H!†ÏJO¨&ÊÈð ®ea�“l5v»sƒuŽc¢»Ž|á ¢Ïº‘§á‰¬WÇ'ÛI²rï}g¶àÕmí÷çв¿Î¥ha¿Ã9ô`�ã˜K€s-ã×õMŸ¾ß佩SÄ&÷�Pj‹Du~8¬è5'7Ýg‹l—}ÄBÇ8Œöh•gØG¬é� +–= ·µz�Ѓ!e›´ú«tµ´>mÕM8âGÒ¡Ç1_Ù*²ç;hw'!å,oO8Fô*/D$›SîuÌX�ÃtM°p\ßî-^íÇ)a3-2�À:kµåÅ:u¢wy�Mz‘§ u${?)…½•úÁ:ÇérÙ웑¯õŠ|^OWLa‰Ÿ“–pMXFÆvš6/fÞ>àkêÎÐ’s‘c>{y××Ûéýè×_«su“tŒ„ÁŸ¯î·©¿Û:´â©|6KTÛ™­–Ë>o» ¤rW~Tí›O·¤v+ëþ‚Þ²�á¶¶½>e–³lŠ‹trT@Î~wÝx°ÎqÌ/ˆ+Ì1é oòž�ÿ„Ïxõ>ã?¾{¡?_¯·t)ëg”  ƒ¿Ì÷yžËòµ|½çÊÉTþÇë½ÈÎ÷ˆs[µ\–é 0?�Ëûyƒ\wÐ(Ê«åNv6�›ÃX�ã˜C–íºÝ¢šÃ×Rכ̩kÏoÛ®ižÔ�¿“Ÿe¸ÌÏR‘­¦VyOÖ;æýËršÈ¸yŒÕ9Œy+€ÙF}aôý#n6­Î\vM«ªíyÉ–Žï2-Ý<Š+ÆÅ$ ›Ç`�ã˜Éߘ¢¾hûþ÷@góLìÎ¥0:Ô—Âa| g°ÎqÌ#ˆ3„¸:zC=Ÿãäî¨VŽ2->2Bîà�³i:uéuÕŽÕ9Žj³ì®•³å¾bÒºnt2¡Ðe› Ðý›¶)ºOl·S¿ImžŽ‘ öoeÙßíZ N—Š×j�l3´rdŸó2'yÛz5Ì�ë‚m2ùŽ6%¤Mç”A´H¬÷ìw¨ÊaÌw:È%Î|guù!3l›VV³,Õ cg˜Ãé»rãnJå§ù,#¤x²\ȶ�Ô4¸[dGc“ŒêI?g·9YG4çgŠˆŒb.»­YÖfåܯ«"þðã‡ß¯#Ì6ó”¤ÿd ×���¼yž‰žË =Ô­ìé:e1•�³?ˆs™27'.R&tmÅkݺ(8¿¤·íî_Oq:gÎMg�Ú8EÎ%ËÑ�F\O*g9Û.[bW»×MâÎwjNG¸ÿÚJÉo�¬ô*‹zS÷÷sù_'Åür’7ÍäÅ*¯'0Û‰Œœ/lÉ/'9�›2‚?HâüÕ¶{Éf� íèH¦lKR0vþZÚÍ)Ô¯>Ô§‘ú¡V“�&›ë•Øêµa…ˆšÑÝ’åé-¼î•,§˜gCóUl¢„Xeq¹!÷e—.wɲ‹b!†[¢íš[ÈrÊM-ëÛ×Òtb½ï:ש¿–õ©SçkÄË ÍÒ–ú¢Råìäz«Ú»Þ6uB•F µdS7=)¤ËI!~kë­+»Æï´&'P^‰¹·r¥–SH—“Zn¾[hšJ­T^ª–Úó‹(‹©Sn¯Ð¦>š©Iþ,C7F,Õ¯kr T]#cXìÆß/'Ù�{C~9…¤” VØPM¯'RwßFÎv±—…*‡¹]¿ahVšœß'¿¯PU�gú⸙”lg\®–Fdl6òº“zzl¨ÃZÈ"’»¡âÞ)5›íû ©�R^@·•n=¶¢v]ÖÑS©â H5ðX“]³ºF«ýÓ°²'Ú*š[È¡™òËŠ¼ÈÚP ¶5]gî¡Ýw!dž�/=95�;9PµÉÛîÛÙ|%^&ÇÆ[²˜~®�,d ›ªù´Æ:â"@a!/0ú2‘ëhmè$[¡ë×e�i÷rúûirsž‚—è6’“óÁûèÈ�ÿƒ2?àÿ?N|þ±HyõãÞ6´ð [WäÞ“É_“ȃdùë•؆MGôÜÁþBvy)ª54?î}‡×¼T· °×’®!¨kÜž–>ìȾ™®wÔõLx…xÙôb d>W7‹Ã¾^R}84Cr”i• +ýãà2/‹ëjƒöF}é©íÁ„ÚO§Òt×—ÍçÐtìS¼Kµ{Q7ö¨9ËÐXB ^]ô6ÚQóRm.úF¹ÒV�VGÑà4[i펩Êçjµ[¦'Îj/¥S,Ô¿÷=z­´N ½VâMY¹oõx-Z¢…ÞœÓòtv)ÙbɬÐb_»Qy)I•vÛ6¯Û®ÞöÜ=/‚Ä%2µKµpSò]ø÷ž±s­³™-ÐJÕŸiÃååg8jv‰döLÂ�#0„å+$Îݔƛë¼>Çq;“Qç8ú– ÃD69ùûjº/`”}Fw«ú·×ôjò^�òHoëe +g�9{3ƒ3ý�ü›'rÚe’TQþžIЛåÏ€$ëÔ)�iªåy5}2ýü þbª +endstream +endobj +464 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 463 0 R +/Resources 4 0 R +/Annots [ 465 0 R 466 0 R 467 0 R 468 0 R 469 0 R 470 0 R 471 0 R 472 0 R 473 0 R 474 0 R 475 0 R 476 0 R 477 0 R 478 0 R 479 0 R 480 0 R 481 0 R 482 0 R 483 0 R 484 0 R 485 0 R 486 0 R 487 0 R 488 0 R 489 0 R 490 0 R 491 0 R 492 0 R 493 0 R 494 0 R 495 0 R 496 0 R 497 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +465 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 799.173057 99.933071 780.423057 ] +/BS << +/W 0 +>> +/Dest (cb10-56) +>> +endobj +466 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 780.226036 99.933071 761.476036 ] +/BS << +/W 0 +>> +/Dest (cb10-57) +>> +endobj +467 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 761.279014 99.933071 742.529014 ] +/BS << +/W 0 +>> +/Dest (cb10-58) +>> +endobj +468 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 742.331993 99.933071 723.581993 ] +/BS << +/W 0 +>> +/Dest (cb10-59) +>> +endobj +469 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 723.384971 99.933071 704.634971 ] +/BS << +/W 0 +>> +/Dest (cb10-60) +>> +endobj +470 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 704.437950 99.933071 685.687950 ] +/BS << +/W 0 +>> +/Dest (cb10-61) +>> +endobj +471 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 685.490928 99.933071 666.740928 ] +/BS << +/W 0 +>> +/Dest (cb10-62) +>> +endobj +472 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 666.543907 99.933071 647.793907 ] +/BS << +/W 0 +>> +/Dest (cb10-63) +>> +endobj +473 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 647.596885 99.933071 628.846885 ] +/BS << +/W 0 +>> +/Dest (cb10-64) +>> +endobj +474 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 628.649864 99.933071 609.899864 ] +/BS << +/W 0 +>> +/Dest (cb10-65) +>> +endobj +475 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 609.702842 99.933071 590.952842 ] +/BS << +/W 0 +>> +/Dest (cb10-66) +>> +endobj +476 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 590.755821 99.933071 572.005821 ] +/BS << +/W 0 +>> +/Dest (cb10-67) +>> +endobj +477 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 571.808799 99.933071 553.058799 ] +/BS << +/W 0 +>> +/Dest (cb10-68) +>> +endobj +478 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 552.861778 99.933071 534.111778 ] +/BS << +/W 0 +>> +/Dest (cb10-69) +>> +endobj +479 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 533.914756 99.933071 515.164756 ] +/BS << +/W 0 +>> +/Dest (cb10-70) +>> +endobj +480 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 514.967735 99.933071 496.217735 ] +/BS << +/W 0 +>> +/Dest (cb10-71) +>> +endobj +481 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 496.020714 99.933071 477.270714 ] +/BS << +/W 0 +>> +/Dest (cb10-72) +>> +endobj +482 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 477.073692 99.933071 458.323692 ] +/BS << +/W 0 +>> +/Dest (cb10-73) +>> +endobj +483 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 458.126671 99.933071 439.376671 ] +/BS << +/W 0 +>> +/Dest (cb10-74) +>> +endobj +484 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 439.179649 99.933071 420.429649 ] +/BS << +/W 0 +>> +/Dest (cb10-75) +>> +endobj +485 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 420.232628 99.933071 401.482628 ] +/BS << +/W 0 +>> +/Dest (cb10-76) +>> +endobj +486 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 401.285606 99.933071 382.535606 ] +/BS << +/W 0 +>> +/Dest (cb10-77) +>> +endobj +487 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 382.338585 99.933071 363.588585 ] +/BS << +/W 0 +>> +/Dest (cb10-78) +>> +endobj +488 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 363.391563 99.933071 344.641563 ] +/BS << +/W 0 +>> +/Dest (cb10-79) +>> +endobj +489 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 344.444542 99.933071 325.694542 ] +/BS << +/W 0 +>> +/Dest (cb10-80) +>> +endobj +490 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 325.497520 99.933071 306.747520 ] +/BS << +/W 0 +>> +/Dest (cb10-81) +>> +endobj +491 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 306.550499 99.933071 287.800499 ] +/BS << +/W 0 +>> +/Dest (cb10-82) +>> +endobj +492 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 287.603477 99.933071 268.853477 ] +/BS << +/W 0 +>> +/Dest (cb10-83) +>> +endobj +493 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 268.656456 99.933071 249.906456 ] +/BS << +/W 0 +>> +/Dest (cb10-84) +>> +endobj +494 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 249.709434 99.933071 230.959434 ] +/BS << +/W 0 +>> +/Dest (cb10-85) +>> +endobj +495 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 230.762413 99.933071 212.012413 ] +/BS << +/W 0 +>> +/Dest (cb10-86) +>> +endobj +496 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 117.080284 99.933071 98.330284 ] +/BS << +/W 0 +>> +/Dest (cb10-87) +>> +endobj +497 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 98.133262 99.933071 79.383262 ] +/BS << +/W 0 +>> +/Dest (cb10-88) +>> +endobj +498 0 obj +<< +/Filter /FlateDecode +/Length 5118 +>> +stream +xœå]ߋ庑~?Åy\G?JR Â}XX� » Ã>ôœ�IXú.Üä!ÿ~¾ò±dÙ®Ó–{zº ;ÃL·K*«,}úªJ–m{5øû“ÅLv`Î)Òõöëå·‹R0ø3ÖXŒÅÁ¿®ÖP‚Í‘ÃõWø4¤\Š×ç þ[¶ÕŸ/ÿù»Ëÿ-uìÕ 9GgÃõï_¥ˆü�8%”¢Œ"c½RÂ�’ Q)ŠvÀ%æ¬ÁŒ�ÈѶ(Á Ê´"˜AαRÄ0ÃS²~[”a†K–´"˜asHJ‘5°Ã:cÔ2bˆ¼SÊl":=jeΑ³ËjYB™MN+ó~ˆ‰l°ZYbŒ�µ2‚-!«•Ø,‘ÑÊ` yNZY„->z£–ÁÇÉke ¶8ôNVʶ]¬–Á�ÕʲBf"µ,£Ìpâm™3aì½Ñʬ°éÕ2Ì( RLJ™ƒ-Ñ„¬–Á–à�ÓÊ“ÆÞÁTиÀ{ØâÈk\àÁ¶´h\àA·d²Õ¸ÀƒoÉØ¨q�áÂL£q�ãzޤq�åJYãÎõàN� D§q�ízâ¨q�ïz²FãïzMµ ¶À€oÙk\@à]oMÒ¸€À»˜FNãŒêF� €•Á1� ¼ëØ�ÆÞu .@-Kæ ×¸€À».à4Ï ÞuÁ8� ¼ëÈE� ”ücÔh¼ + z8[@°ÀߣÌy� p²Á!,Ѹ €wm†ûSæ4Øj°œ£Æ¼kç–åÁ&ô¸2oÑ˃�1k\À»pT^ã‚Þ}²ÆàøÕi\À»ÖÃSkeà]ë²Ñ¸ €w7� ‡Á"иþm°ÐUËò`2³Æ¼ ZrÀ †Á$jY$«qÈx0ˆC5.ˆà]¸÷¬qAïšà½Æ¼ka�Z[<;� ×  ÓV™ÓVãÀZx×XŒ°VÞ5&e� "xWܦÆ1‰À±Æ0p@ì4.ˆLCN)j\³AB>µ,8$Ae©e°…i\€ÀzÈ>³ÆÉÁïœÆÉÁ„  "²Eô­¦°pQó‚-ˆ5.“ œ‰4.H!"C¯jeÑ œ@×j£Ì&� R¢®Øj\€\j`Lz� @ðƒ„KÀ ”YÒ¸ eØ‚©¢q\ÑÀ‘¹Vfa ‚l� é¢ÌZ� ØÁDƒ°cd™Ñh\�\]­•‘‘<“5.`Šƒ„Š`š ÓSªe°4¡qÆG’í q’$›HsÔ2Øâi\Àì$Ýd� ˜a‹3Nã`SòͤqA6°ŸÆÙÄAÂd� @ã(3Fã‚lù¦#� 0/%ßd� ²7È7‘â)ó6û(ùfÒ¸ l QÔ2Ø‚ )+óœ„|줕EØâ2i\�c”|“5.@˜�|½º$À’o&u¹¼2˜I+ï"2�àù&"[-·7 Þ�Ÿé…,'«+Ôà[Õ%î…·Jêš�ùJޤ.ÀLd–ÕU¸UZ£.ð/â1ÚpÂ}õ©]¢Š€C‚Ïä$™1-Ñ}Í9æjþAµûúØßÿzùýœïõ¯ÿ¸|ûݸRVþZ€ßS”Ä:Èqà ºÆÓÚ£�F aàktĈ”g#-hqZt#áŠánóµþb—&Ãb±Ù"˜¯ŒÚv‘)X •�º­‡uÞÊV_ÚÅôCú€àíŠ)o—0Ý®à” +÷7¦Ty KÑ�ĵ|vÂ�˜ˆz -*ÿÛ§ ¦ÑÔü}…¶6vÛ:×™ë§_/¿ÿôÇOÿñË¡ÙOß.Ÿÿ áÝÏ?ÙÞŸÿ}ýô§ÚDNM†æí¢Mi†Âý4R•âôû×ûÏÀÓO¸,rsypÓO;ÕÏÓÏþ=ýü²1AY„~kŒýŸ»ò¿ZްØ�pÝŒ´l\£´Š>•W�âG`.‚>Gß�…cØ@èb49æ¥ #6x5ÎÔàåÛôsªCi¿)Yæ%"Û¦ÊÈ?V†õ>1ÑV¹ç2ãá5E=¤é2à ùñ²T,‚ +šœóYr»ä‰vÀØ©s4"KB¢ˆq·Ç¥Ÿ'~)X,ƒV1*ƒ—'Œl +g}iøª­wmñ0p*¶ìÖ£;-\e4ŠvGOøñ†� ȶuÔ±A'K4)+cÜëB;uÎPdÞŽ¼3É—K#>OÀª€\t ÜÛÊ‘vضÝ}öä1Î Ñ+Ú=W=;m¥õüˆÑ$GŸ¡�lÚš4®2¼ Ä>�ó1Éí-�ûH .Œ�X"9j¢3žYqBÓ€4®@J÷òà÷Ø®áÊ�5‡¸r£}�+7úõúÏPûç±›gIg³á#,Ú§sð:YB³9} x—F´ñØœk7~(äܶs$æÜj :•Ö'ZßüT¡(ÛØJÈ +z  ÅnŠ�:ç�¢„Åèªü<Ú� /¹¢ð_ãÈG|¥Óܶ¹¨´µ¿¼írÅ÷HPâ\Ý ;¹o•ˆdÝ•’ìÆ²²Pò2xútιÿ-7Œø=Á³ht‘.Y攣ãq�äø©+ýhÙgÓÖ£•G%›``4ËÐØ½áîÓ9Ïp'¸Ù#û�t[ #Úá߬Œ¬cª5‡Èp¥Î÷¹¾&&ÚÚº‘!ʉMÒ´{"²�‡qƒ$k­óÊí½ìþ8ɹûåbF”I–v!ݧsHËî3¶³ý!½4b„ô—• Dà +æ�›,p>´`Ó ¨­�ûpŽiÈ‘RÖ´{àœä.$Ë0+­¯á¬ÂÞ�oÐ÷&�:ç�±CàÀ±Ã;:âe£?zfŽÉ¶íI(¶Ú5¢{z9¢óžëî»xzï†têœHAnš"Íï ¤E£í2J{Dn†Õåƒvq¹#�Ó�m[GÒ�­vÓ7àÛè¿n‘ÄÃ$Ïr_}|fÀ€ƒÙƒbŸÎy ˜äa�Dñ]9mÑèç&òï±v@ ù?1y—•síCÍ™ÁÊf@V´{ æÆMl@ŽÖ:ßù­ºÌ²’ÂŒÞ×Dœ®f}:§�ÙhäY–÷ƒÙ²Ñ‘ž^±íyŽ@l«} bJë‡!FÖDzEKv[DŒ{÷*:uÎ1t™õŽC8±HEÆå§àݪ‘R«Ý$›ÄÁÍŽ•n{°ñò¸’ÒÒ£Ey®Â¦h$íÍ ;uÎ3¸n5„¾ïÉ‹F?¯ã‡§&jº­b +7ERëE“öÖ}Y¡‰—Ú›TÝ‹[�,~lµ�-~(=ôªH þs�§'=õ»ÀN�ó@X¶Évô +~z=„�‡vWSÉSÍ2pSð¿¿ëmÞ·->ä-¹ko,¹ÜŸéuêœfЃ�uøí#·-�ø±[ß¶mY6Øj»¹Õ?¶û-à¬9ÒøMÎò�‹q’�:ç�¤<âÇÈSß`sQ7-]@0¿°zåæ[Lë•®–§ª+½u-T4»9¶v=b«@Ù™~¶êÔ94‚H£÷ÊV #~0[mÚ:ÄVíƒlµÑ?ÈVó‹s°¡?ðïÔ9$å &&Ë‹ Þ‘­�Žã›h¨e§¸‚_YRmnµÑUIj‚àV0¾5ç¸u„â5”ßÚÜ‘Ô@~«Ý“Ì·�”;å,/ñqÎÊCâËòFŸ=(÷éœÊÑÈ3ÈãûjÞÊËF›'×�Un+µù솅½šÿú—7¼Ùc6²(&›¾|P®ð‘ �6Ȳ‰ý.¼Sç< óò¸‘ýÈM�K#~¬ ß¶uÄ…oµ�¹ð­þ1ÞCÞ +N¡¨_iaï;m_„dŸÎy äaµdílhêç½E£ïÕ�Ë]l"·Kž"%i]øb÷H›¸È?µ@xìTÇ7Ù`£r û.=Ó€Vå9ô­v½¯íÍÕ~šUý0ݾ—äŸpl”MâÆ<ýO¸öéœÐ,�´_±�©ûNò‘ž; u[Ò»`¦uܹâàúŸsÝZúÐg;0ÆYžÍïÝ­Û©sp$#Ïš¹`Þ“í–�þØÝºÛ¶ 7‚²ÁÄ1Aš³Ä»Ï’vêœg¸å�Œ¦ßàÆö«ã­¥‹Û0ÊöÅEnºæŽ'}µ­ç¦” ˜¨„èD±gßqÍkr[íÒ+¾a®Å3\+kÝ×îÇ®™nÒõQ šc·.oÒœEê_°Ë�aÞ9F¦suò gÆW'½<…útÎ3…‚¸ÿÄù ¶ ½~ +-ŒX<§µº‹¹v³cž+7÷¿,R7½¯–„7ÛL¯y©gkë‘¥ž­öÜSøEÙh.ï�¼y‹³Û}Þ¢Sç<ðcÙñläUºü< tß&~Àv|ç'ò/÷ãµ\êºÉÑz0ª»Mçù2Õ¥{ýrÎò”“-åO÷sU÷sÄ©­R�ïA¸ùÖoŸpg¿]º¼M-ø”ü8ôéœ<¾•ÑË+³58¼×p‚SÓž[·íçŒÔ7ê&nÓµ¬óAÞ³õÁ{l0ªÖFŠÜ�N�óÀÃK ,ÙŽ +�×ϸ Z \v¡U†íË´õï?€^­ð ygr¶ñ{têœAœǤoòyýŒ{Cgó öÎ…£¼ÒÐÊ«,IÞáÇòêí=xôéœ,O¼“]$Ó¿6Ý©sžáfy‚G¾„ð� kK#>~mzkÏ‘µé­öÿßµiðÞ�C@6Œ’OcÑøšö—§PŸÎi¦Ðø +m›0Ñ?r?ÍÊŠº!QƒÜƒ×²ÔIôu±Ðĉ+V�õ¹›g|ÖO8-vŽuïáR.pwV’< ‰‰½¥Îè‘äM„gA=Áî\øËôît¤ú²ágà oШ¯b¯`·ÊÞGËÕ7‹_íêMÞ‚ë8]iDø3ÈGå)?¡°$ß¸ÃøÏ¿|úãrÙªzÝ$*¨(YÄ�z%ó“$0ðD&S=‘‡§r_ã~d¬§$3Nuò“Ûi5Tꄦ­x×-ÏÄ�¶|ýyÝÝ¿]âø] ;~ÛÈÄ1ìϲ 1¶ô_¾Ê·4Øx�ýÔ½vì{} 9~2ò·ZKþ‡Èȇ¥dÛÁØýíÁTÿ·q`~½Xpš\£0Çý‹ofËvÁµøù"_ü#EŒPÒuŠE8ýjê¹dSØJvó¦!¯kú0˜é×\OîCùÕ…r5¢Šš|‰Ag(G‚Õ{ÊšÑnÅrõ˜s“X¾šÈƒŸŽb5%Äb3„ó ©­;ŸpVÜ[oaØ +MÓÜ,–×—º®þšë˜CXMo»Î6Ã_êºÔ çKÂÛÍúµôY•Ê·ÚÊ©Jï‚ÛŠÌ7Få* ¥fªã¤ˆnEø“)§– ¨–7£&_¼¹ ¹‰j½\ê)¢ÛE­7�-Ô‘JµϪ¹ôülÊ uϵãÙØG“4Ég`›9b|ùu)Ž2e¬ 7¸qáí"}lÄÏ—�”Úaæ + +ôZ¡oÎ[Ålf¼ÌRÙ"ÿ S³Èä{!òÿ�*B• +óŒ¿Xª�’oþÌGs#27«xÙI­àTí­çm0_„·Ñ±ÑZ,ÐçÒÈ,–hµÀ§6ÖgÃ@ +³x¦ÑçQ\fke'y¤²ü:O2ÍãÞ.»Œn¥“Ü z+ß#l£#{ý'êü ÿþ÷B×_Êpî~ܙʮrëBÜz2ùz-wŠåk¶EX§M#tÔÐþ,¶<×  Õ�;×ð5Íêf&öRÓVµµ´†¹±«ÐuÖ7=^ÞV½X™ï›Ùaß}¹8yi†|:©X…ƒörpÈs™Ÿ]òµ9%ޤêìÒQJ®QÄA{R6 æÙ²…™ȶ‘Úõb?µCá¥­æ  #äÐÏe4»ÙöÔE6^ES!°oÚ“mÍ {£_=½¾{Ü'“c™"­Ô^¥Ï­´^˜H+áéR?Æåaõ9~|'K™¼sÕsùfîùäÌSc-hqÐb´‘ò¬6Um£Td‹F‹£¨t™)²zÆTlŠ“Zé–ñŠYí¥TcŠYú·¶§C;*µC;*qSWÎ[<^�–| €B ç4_�™kÖX’Ylµ«”暾ȶmÓ²íâm¯ÍeÐlHœ#S3«…MÍWñßkæÎ]gµZ Õ*Ç Ëó'ãà¨É&/·ä$ÜáÁ!$rMÄÍ’Æa�—×8¶+e�£m Ã1�÷&Yàí� Ï(ÈûÍ©ž§¯íéjò”©rIÇ:@Y™iÎlVpÆzãÏ´�S“¤Š!�Ÿ]5ÌòÙád¬º¤3.µÜË'ãß·év™ +endstream +endobj +499 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 498 0 R +/Resources 4 0 R +/Annots [ 500 0 R 501 0 R 502 0 R 503 0 R 504 0 R 505 0 R 506 0 R 507 0 R 508 0 R 509 0 R 510 0 R 511 0 R 512 0 R 513 0 R 514 0 R 515 0 R 516 0 R 517 0 R 518 0 R 519 0 R 520 0 R 521 0 R 522 0 R 523 0 R 524 0 R 525 0 R 526 0 R 527 0 R 528 0 R 529 0 R 530 0 R 531 0 R 532 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +500 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 799.173057 99.933071 780.423057 ] +/BS << +/W 0 +>> +/Dest (cb10-89) +>> +endobj +501 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 780.226036 99.933071 761.476036 ] +/BS << +/W 0 +>> +/Dest (cb10-90) +>> +endobj +502 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 761.279014 99.933071 742.529014 ] +/BS << +/W 0 +>> +/Dest (cb10-91) +>> +endobj +503 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 742.331993 99.933071 723.581993 ] +/BS << +/W 0 +>> +/Dest (cb10-92) +>> +endobj +504 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 723.384971 99.933071 704.634971 ] +/BS << +/W 0 +>> +/Dest (cb10-93) +>> +endobj +505 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 704.437950 99.933071 685.687950 ] +/BS << +/W 0 +>> +/Dest (cb10-94) +>> +endobj +506 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 685.490928 99.933071 666.740928 ] +/BS << +/W 0 +>> +/Dest (cb10-95) +>> +endobj +507 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 666.543907 99.933071 647.793907 ] +/BS << +/W 0 +>> +/Dest (cb10-96) +>> +endobj +508 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 647.596885 99.933071 628.846885 ] +/BS << +/W 0 +>> +/Dest (cb10-97) +>> +endobj +509 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 628.649864 99.933071 609.899864 ] +/BS << +/W 0 +>> +/Dest (cb10-98) +>> +endobj +510 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 609.702842 99.933071 590.952842 ] +/BS << +/W 0 +>> +/Dest (cb10-99) +>> +endobj +511 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 590.755821 99.933071 572.005821 ] +/BS << +/W 0 +>> +/Dest (cb10-100) +>> +endobj +512 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 571.808799 99.933071 553.058799 ] +/BS << +/W 0 +>> +/Dest (cb10-101) +>> +endobj +513 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 552.861778 99.933071 534.111778 ] +/BS << +/W 0 +>> +/Dest (cb10-102) +>> +endobj +514 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 533.914756 99.933071 515.164756 ] +/BS << +/W 0 +>> +/Dest (cb10-103) +>> +endobj +515 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 514.967735 99.933071 496.217735 ] +/BS << +/W 0 +>> +/Dest (cb10-104) +>> +endobj +516 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 496.020714 99.933071 477.270714 ] +/BS << +/W 0 +>> +/Dest (cb10-105) +>> +endobj +517 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 477.073692 99.933071 458.323692 ] +/BS << +/W 0 +>> +/Dest (cb10-106) +>> +endobj +518 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 458.126671 99.933071 439.376671 ] +/BS << +/W 0 +>> +/Dest (cb10-107) +>> +endobj +519 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 439.179649 99.933071 420.429649 ] +/BS << +/W 0 +>> +/Dest (cb10-108) +>> +endobj +520 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 420.232628 99.933071 401.482628 ] +/BS << +/W 0 +>> +/Dest (cb10-109) +>> +endobj +521 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 401.285606 99.933071 382.535606 ] +/BS << +/W 0 +>> +/Dest (cb10-110) +>> +endobj +522 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 382.338585 99.933071 363.588585 ] +/BS << +/W 0 +>> +/Dest (cb10-111) +>> +endobj +523 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 363.391563 99.933071 344.641563 ] +/BS << +/W 0 +>> +/Dest (cb10-112) +>> +endobj +524 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 344.444542 99.933071 325.694542 ] +/BS << +/W 0 +>> +/Dest (cb10-113) +>> +endobj +525 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 325.497520 99.933071 306.747520 ] +/BS << +/W 0 +>> +/Dest (cb10-114) +>> +endobj +526 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 306.550499 99.933071 287.800499 ] +/BS << +/W 0 +>> +/Dest (cb10-115) +>> +endobj +527 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 287.603477 99.933071 268.853477 ] +/BS << +/W 0 +>> +/Dest (cb10-116) +>> +endobj +528 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 173.921348 99.933071 155.171348 ] +/BS << +/W 0 +>> +/Dest (cb10-117) +>> +endobj +529 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 154.974327 99.933071 136.224327 ] +/BS << +/W 0 +>> +/Dest (cb10-118) +>> +endobj +530 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 136.027305 99.933071 117.277305 ] +/BS << +/W 0 +>> +/Dest (cb10-119) +>> +endobj +531 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 117.080284 99.933071 98.330284 ] +/BS << +/W 0 +>> +/Dest (cb10-120) +>> +endobj +532 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 98.133262 99.933071 79.383262 ] +/BS << +/W 0 +>> +/Dest (cb10-121) +>> +endobj +533 0 obj +<< +/Filter /FlateDecode +/Length 5065 +>> +stream +xœÍ][‹,¹‘~¯_Qφ‘u ÝÀÌÂ1ÖpØ]8ìCŸò´ÍÒcïÃþýýB©[fFUf÷ôxêôéîJ….!Eè‹I©6W�¯ï ~$2*¥]o?]~¾h½Æ¿’cõPÈÁwôW£)*orHþú'¸¨bö6†ëÛ?6�sö·Ëþîò�usµ*ç`�¿þóG&‘S1Ũ½@Ê iã’÷*Fëƒ@ +F¡‹9K$°á#YÚ“"Ø œ¼DdmH l8ŠÆíIlØhH"� “}HFƒcµi`D9+ÐŒWƒ$š5*¤l³H‹ ™h%šs*D2ÞH´¬B>I4/>k#ÑX `×Q +8à®#£%, à®s()ÒÀ X £r&9 ¸ëŒŽpÓÈJX©*èa�°º¢lJZÂîÚ¤IÂîÚ Ò¢Âtp×ztA²ÜÀ]뵕°€€»–l�°Š¢€?Zô€»€/»à+aì=hÖIX€Ê”…["a�îš ó'Ìi •2) ðOQ ™J™H‚èâ1ŒªD V¥¸i 4%,ˆ‘L±‘°±”J˜ôà»K€ Ð IX3xÁT‘°¦H% Ï\¢ð'[Âxº #aA²àÞ „É&D™AKX �XC-ÑHsœ™$,H»Š`š ÒRŠ4ð˜�°òá`ÛKX€àÁ&‘^œ' R²n& R/V[  ›oF ²/ðø$,È:(v“%,Œƒ¦µ„Ù$Ä›–$,À¼äx3IX��F¼‰O˜·ÙŽ7£„™À‹‡‹"ÒÀ œ¦,Ì[`âM “D àÅf’° ‡Àñf’°nâMxôâ’@âx3ŠËÀ]Ÿ�L ¸ Ï4HX€Ä›ðl¥Ø^x}„&GœI\1Ѐ^Û*.h`/¬U× 4À—c$qÑl"²LA\5€YÑhqÙ@á�Ñ–Õ§y‰*@"lfŠÜÉŒiAðî{Ì1²¹;Ù–õ±þíòûßëßþ÷òú»²RÖ¾ ”ßQàÀÚó±â\©R!8ÓÎ<,sá ~¤ 3ó`Òë¢3 S s›¯ýƒY³ Ž™gg¦ôŒæv)ˆÊ™×w—ù$^Ƕc£] ƒS4Ä~V@.—-Û%€ " +M«Ìÿö刪Í/«ßýqâžap­¾~ùéòû/úò?üšýòzùúv�¿ÿÎ|ô÷_¿üù>0Å�C^óÀÍú¸TC¯Ëo–ßF×ôúL7Ðà&Ð7|§š×�|­œOSþVwšò<ã>ÑØü +*ö)Æ%q4šuâ„—‰·©ŽÔã\™§QËK8h6ÇûÆå7Ï/1r²hy7=ö±Êæ¹s®,Î>íÉ2Ï#Z Cæ ŸêøÅñËc?Þ° x³i´¨P® LK�ÑYB^Fž´0ÍVš9Ž—RY�ñÁ íF!6C„&f+•>Ñ{ÞÙ7s²G½ß„l%Ì’Õ“7Š"Q¬!½#ÇëX�Õó\™çQOÞpæšô¯TÏU£E@/S¼k6ñ¯¯*¹‰‹gÕ�óú\ãèVÏË’—¤¼­ÎÛ¤$·)ï¶ÝÇ}$›x»„—Ž÷}<œP(� Q*}b„‰‚²ÚóBò¾|ëEéu:Tý`­M9*•)ÚŽTÿ\™çQý'Á‡�ܱê¨6œÿàtb±¯*ý:/ñ4•ª†³`‘ ö]Ýjž&¬žþíIc‘C¢mÏáp2<µTú̪Ùdvå?ˆÃ)òÆJÙ4ã³ÑÁÛ?RÆsežFùÐZ2bûDe\WúuZg,æýe`+=ÀÖ9DæznïQŒ=_M-·¢‡"ª,ï…;>ë©l�>ýÉ2Ï#z —!Yx ï7Áª’Bà�Ý4RTAWqV<ò[óKÕ”n=F~öëåïYmšé\yŽ[d7Ëçn]ÿÊ80zˆÈ¿Ès&×je,e/•>cr‡ÁÊ¿,á’~¹£Ü.¡ñrˆÇ†¬(“¡£Èöd™çQnÏ[{p‡ó¯©Ü«F~Mån!RWnÆÄ·~åù —=çÇÛ5!ª(f©t¿¥·±LwÔ/8åo¥—ãÛçÔï\™çQ¿ÈïD +2¶öˆwâFÄMäaRWEßT#oU`¢Íþ\X«–Oëºw[‡ªTÞ">Û´îêÉ�¿¾m¸/}&æžyWþ´¯×Ïj°LQ¡žšê�Ó²Ni[Þ³Xdúï?|ùÓ´–ZÆžÛ_~ûúÜå–g^±*‹\TóÄM¾´¤a–Q¸Çš3|f�¥»aíkkíuÒ¦®¼ ¼Ð·–’jK/-ó)sOŸZ.ý{Xû¤ݵ«sa¿êjãa%Š`”Ñ pÛZåe¿>bSGÒÆ &Ù—cÄmdž¹ÆdÔm�áwPT¨›GA®gikßó%_)×ò¾�)yBýüÒ4fÒ4ªù¹?·%_i'ÌÕgð·îÿ~ü¦1O»ñ»�¾õþ„¥OK¸_Ç N}ný©ü÷E?Æ ÑF�£ßå³­åçþ9Æ®<û_&ƒnÈ�ž"æ=o%¯-¨ó`ì¼–t¯´§+ª§ÊGZË©�gç¥Ê“ÓMå•—Í—ƒ•Ÿ»H´F¡{csjÜÒ� /½»ºTo½N}à¼ßŽ�ÝÍçiŒ[ºõ» ½ní÷}{8–´Óµ¦;•/îÕùÙçXÆc;?ÌÐ�¢—·I?ëÜ(ºSǫɂ^Gªz¾­³ÏñŠim\WØ5éu›ã�æKÇÑÎÃqÛÛ”+†ù1s[ŸË<\êEL—&{9çs†Æ+ò¼,ÔZ¹ï7è>ÃÌžøem1¦g±m��û[ãÔÍyɽ³:íÉÜYF‰ó‰Œã3ù𔳼|}0ä'ËüÖC>øµ^¥ “÷rÛ†ïvO2’X½Žwó4ôK¸¶¼Ñ„ê6 =ZÂ�.¨¬Ióë0|èSèðüÆÉ2Ï#>üm�÷')Ÿ^½_Wúu^JØ.;LÛD}ÆMËÛe†ÓË 5•aªl¸¹+ð`ùÝÙèèšùV‡�ýÑÙôsEžGÜ1ð›ô–äÙø9‹šëFÚ&ù¼z>oæœ8$ny­›ß MBÝw…™¸ÛŒÿï×sežFœI³1H™ä£½Ÿ#Îu#_›í;(ϯÂøíË7>¶ –ÝöÞY—Þ�ä/ïÚò>íYŸ,ó<"æ÷‰� N>žÛ×x›*l‡®\‘ÍÖÀ©Ù×mçš™G³/¹È¯]'ËQCVšLy[ó±hΕyÑxË×0 *Esf– ÒÎ.ò‹žëÊN.cO6w_Þ·Àáìñ‹éœÓ¾¶Ã%y“IéÌ7%|¬/ÓKKBy>�i7ªרÑè÷\JÚº–u*˜ÍöI«ÇÔòýH³^£S÷[üfÊm§XÜ´s1è{hÇ7¥’ _db;ÂXL©sežgJñ�KüV´|œøcîèºÒ¯óпlDpÖ½œ•}WûñI¥IÕw¥[Wþ’ݨÒ_ÐeåI‰¥o Os[nô¢£ã('Ë<�òdͦ�ïÚùDåYWÚqu>‰©ÛÐo¶ÛQ'Í-Ÿ…ôðsƒÐö±j�¸g_ú +ó5xD”¼TþeBç¡;" ¤lH6‡óæàd™çYdóÅ÷î|ŽÈú:üMÍ'k¶îÜœ6‰³ˆåîËé9e¾þ²\“töÄðÉ2O#Þ°(÷é�M¦ýòÀÞƒÛ:÷�¤·L”�TþR/]‰þÊ'×’2>yt|ÜáÒEq˜å`äÛ)¢ýµW³¹¦‚Gxì=¢J¾mÙ%8 Šrä Š¤ƒEw7þ6[²¶nÏ—Á™Žðш�t9&Ðè”7îÚ¶k®ƒhê«áœg»ùM�cËùÃípÿ| åB,S.EÔ<¨–oM¾|ø”BÌW¾„‹÷M^SÄ\ï”,wMÿÜsñO$i¾‘’§Lþù¡æÿ¹æ§ »úÜDz?X®ŠÕ%™!p›üvá«‚IH&çÁ’9±~Ô½.2ý$UK»`¢·9�Wº~gÐx lùh}ë —÷­_áDº +—- ‰(Ì>™{¯•©Éq&åêSè¬øÐxFâ¨�æ¼£ÂQð0™÷[F¢ß'꩹‘Ì·#´¼¶Ì]æHì¬ÏCg&ñ·¼p™ì©ÄÛͺmꛘʗ¼¶ªÚèZÝÓÜÄTåì¡.'!év¿Ó­j‚0;}’šíûõ©)õ|¹å’n1_­ÍwIÅž+�¢¹�ü`e:Ó˜úÀ i·éHbäûã§9£d›æäÀh²ÖiÒ»K¼]Ñ.ùíâ£�۬о©Þœè¦z{rÒC_F*œ�:T˜š-�/㟠TøžÊÈS>ê*Å—ާÑÏÍž¼¤9=tÔ!i Å‘w.c×Ùy¼LÒB~Ýž»�Ø*u²)=æÆƒT�u²éZדÂÚøt¬œucÍ�dßUùm•<øô}ªzÝ fRwßëÉ¡cçÛœ»Ä ßüØùíõN:ßoŰÑ6™U?µFF2¯X5õé�M‰ƒ1€ÂH0úV’Ûlíèį[¶�c’I÷vùû¥˜9ë¼e/58ÃÏÞ‘¹þòüßÿs¡ëíæ¼ÅŽ[ÝÑÂvl]%Ï–Œ¯½O'“ùü–ا͔hi‚ý‘lÒÈë›6t;ní„×4Šëì-§éj:uNôc §dÛU×7�Œ�xÛŒbwd~©l†Á^]ëœæCÒ×®Pü0w�iÐÜ0ÉשJˆ~–JØååz›ÅëÞ’ë�ŸÕ9ŽÞ鑳û’IH séžJ#§kiû¶iÝv³¶×©4 Ã3Õ£˜ßåüþ}dî,e6«R®öUV0LwÍÂP“‰Îºòçƒt +B||¤4-i¼»Ìã5ŽýJF[ã˜[‚89§£á?%³ðB>&LUµ?%ËZìÒû@XÂ0§w+8å/�à_]Èé�‘CEþÃ?|¶3%þ{QqI§^W6/Ÿ”¯ÿõ‘§ñ +endstream +endobj +534 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 533 0 R +/Resources 4 0 R +/Annots [ 535 0 R 536 0 R 537 0 R 538 0 R 539 0 R 540 0 R 541 0 R 542 0 R 543 0 R 544 0 R 545 0 R 546 0 R 547 0 R 548 0 R 549 0 R 550 0 R 551 0 R 552 0 R 553 0 R 554 0 R 555 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +535 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 799.173057 99.933071 780.423057 ] +/BS << +/W 0 +>> +/Dest (cb10-122) +>> +endobj +536 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 685.490928 99.933071 666.740928 ] +/BS << +/W 0 +>> +/Dest (cb10-123) +>> +endobj +537 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 666.543907 99.933071 647.793907 ] +/BS << +/W 0 +>> +/Dest (cb10-124) +>> +endobj +538 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 647.596885 99.933071 628.846885 ] +/BS << +/W 0 +>> +/Dest (cb10-125) +>> +endobj +539 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 628.649864 99.933071 609.899864 ] +/BS << +/W 0 +>> +/Dest (cb10-126) +>> +endobj +540 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 609.702842 99.933071 590.952842 ] +/BS << +/W 0 +>> +/Dest (cb10-127) +>> +endobj +541 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 590.755821 99.933071 572.005821 ] +/BS << +/W 0 +>> +/Dest (cb10-128) +>> +endobj +542 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 571.808799 99.933071 553.058799 ] +/BS << +/W 0 +>> +/Dest (cb10-129) +>> +endobj +543 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 329.565778 101.433071 310.815778 ] +/BS << +/W 0 +>> +/Dest (cb11-1) +>> +endobj +544 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 310.618756 99.933071 291.868756 ] +/BS << +/W 0 +>> +/Dest (cb11-2) +>> +endobj +545 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 291.671735 99.933071 272.921735 ] +/BS << +/W 0 +>> +/Dest (cb11-3) +>> +endobj +546 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 272.724714 99.933071 253.974714 ] +/BS << +/W 0 +>> +/Dest (cb11-4) +>> +endobj +547 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 253.777692 99.933071 235.027692 ] +/BS << +/W 0 +>> +/Dest (cb11-5) +>> +endobj +548 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 234.830671 99.933071 216.080671 ] +/BS << +/W 0 +>> +/Dest (cb11-6) +>> +endobj +549 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 215.883649 99.933071 197.133649 ] +/BS << +/W 0 +>> +/Dest (cb11-7) +>> +endobj +550 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 196.936628 99.933071 178.186628 ] +/BS << +/W 0 +>> +/Dest (cb11-8) +>> +endobj +551 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 177.989606 99.933071 159.239606 ] +/BS << +/W 0 +>> +/Dest (cb11-9) +>> +endobj +552 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 159.042585 99.933071 140.292585 ] +/BS << +/W 0 +>> +/Dest (cb11-10) +>> +endobj +553 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 140.095563 99.933071 121.345563 ] +/BS << +/W 0 +>> +/Dest (cb11-11) +>> +endobj +554 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 121.148542 99.933071 102.398542 ] +/BS << +/W 0 +>> +/Dest (cb11-12) +>> +endobj +555 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 102.201520 99.933071 83.451520 ] +/BS << +/W 0 +>> +/Dest (cb11-13) +>> +endobj +556 0 obj +<< +/Filter /FlateDecode +/Length 4901 +>> +stream +xœí]]«$IѾï_Ñצ™‘_°ì… ‚° 0¼¯0xq¦×£ÈYaõ¿ïÕ•UÝU}ö¬ÛŠ3ÌtWD~DeD>ùÙîlñ÷+‡ÿ2;“sI‘Ï—ïO?œ¬IÁâÏ”bñ0±�)œ�åd‚+1‡ó÷B dR >ÅóÛ ÿ­Çäo§ÿÿÅéoË<îìM)Ñ»pþûŸ„ÅdRNÉ…UÀ²ŽV&%¢ÂŠÎàKÑX#$ö¼e%ˆÁ%�1Øû¬°2Ä N޶¬1|r¬± †+!),g!‡óÖª<b™É+<LD£G�ç�‰¹ø¢òx.y�GdbbœÆ+&ƲÆcÈŠu/@–à˜­Æƒ,L9i¼Y(’Uy�ÅçD/A�Ö) +/CXWVy�ÅFë4^!JfVy<›SÞò¼ &d"«ñœ3¶I*= +JŠIáyÈm(*²²^ãdaüÕxÀ‰@)g¥·zéÝdÉi¼Y¼O¬ò ”¯!€��Ŧ¨Az�\Ò0À§d¸xÖ@Àg2œ9k(às1œi0àK0KÒp€¬Ï; ÈB–ÀQCr�…ÑsUd¡Â�‡,H adñLЖa-à–mqð–­‹bZ ˆK9²†È…) ˜KÀN  ‹îž4,  .…è5, À.qŽp—ØY ¸K„œ*²À€5,:r™4,`à.9›4,`à.º‘×°Z5°Ã¨alÅøœ­† ÜõÙ²† Üõ .@å%ƒ>H0p×¼‚æ¹�»>X¯aw=û¨a Ŭ w!A VÃø{ð• žƒ†É‚Y*²pb X›B%kX�c”­†ðÐK¢©5[gf 2G#¡¢†è&i)UdLhXýÈ`;hX€Á›æ¨<ÈB�5,ÈÙËp3kX�3dñÖkXÛ”ñfÒ° XÈ‚ˆOÂb£‘0YÃÀ8xÖjXP\ÆxÓ³†è—2Þ̲obˆ§ôÛBQÆ›IÂÂ�% DQy�ASQú-0 ãM “Æ‹�ÅÖ° Ä(ãͬa Œ7Ñ«SYÆ›I�.î†dÒxÀ]D¦QÃ<`¼‰ÈVÛ[oHˆÏtf–gVg , 7À·ªSØ o•Ô9 ð•1’:i11²ÌQ�5€[ÓYuÚÀ�ñ®³OãU„9$øÌœä% º#ºocŽžŒn$»Î�ýýϧ_¾Àùžÿü�Óë/¦™²ú×Áø‰£ ¬ƒt_ nÀ•™Šãi  …' !à{òˆ©t!`qžt!áŠán˹}qK‘!±ÈìÌLoÆc½)8¨Š¢.ëÃy>HÖ¡�dΪȀsl¤´*ž¨½afúø–*îͤJûx¦�’–jÅ€6 ÍŸ?!*…�dÙ€+~u�õÁ,!)*’8+"/~ `ƒ…åEâ_}:¢æê¯³ßíq�‘£q½=úþôËO¿ùôßþÕ~z=}þZBço¾rw>ùOóg¾~('¸%�_¯Ÿn¦c$bEŽ–î‚qþîA÷s:§Ð|/#ÌyÀóÇó§ßž~ýi©• #Y?ùËl&‚Í/ƒyäUŸþ²§fDÏNfXòJ„cFâ§yèNÉ}ÄHHÖ™ð�”ü\†îñºzÿÛÆÒäHÅJ˜�·ç…ŽeySI²xŠõº© }ª¹—j>vF“ûjqâ—a_2¤ZT6Ŧ᳠µŠÍ²,@†d¼¶ ðÇò·'®§…ËMƒ¤lœŸvoxYðFKÛ=d<˜çy 2ÈšÂÀò¹(l4H™\ÌãŽS€Ãˆn=âZ£Û4•xQÒåy>waÉçzwÈoÇV1vϲ’y†°h{.²T{ߎåy#H²=;qüTZ¶@¥Õ$übtóˆ¬{²�]ê*ÞZ»Jv @AÐ]W6×8ÿ½–ñ–láö{6¤û¨醟³‰ÁÊ¢)Éö°h íÍyÌó4†ÏVö…Y9Ï þG Êe,f¼×nlíš×†T ,l]ps�ÃT‚[O9øe=íùeÈW £íÓ@»zkdZ«¶k¶° .1( :XûÝ·Ÿ~ÓÛ•¦Ž(®÷úæçà¤í®ß-<ƒÿÒã^NCš|}FÛLÞIöõÇà ÉJ¤i^jz•7—V½–èì•>ÑÜ,¡t——�š8FÙIÇ9+5É»HIS©áúÜÚ ­Þ5íÔ46sY×äç +©·ì4ùf­Ž­ûZ5}}Y?º›?í—«”"™”+éÿ2¿Ïí4¿É…¹¼YŽ0×wíI�ÍŸ©ËAIfHõÉ÷0}u$›¹œìߥ˜ö<ðÁ½«Þ¥Ð�ÍÖ;Ñ{4_rÜ[~>˜çiºTòâ€åhó†£ËB?�Mÿ²RÁÑðr0öméû{»©os·©Ñ;û±Ýwwøºñ`LˆR­ªŸnßà´g<Çò<�ñ0\;â|wckÝûŒgQhÃÕq¾ÚÖIŸÞ\¶}üˆ»å8]^£R÷¾iõqÏ6÷î{¶•ü/–>AÛ&joÌs$9{(“bîxœv0ÏóŸœa†ëtúÆ™ÍI޽-jÚBƎ꜓ÛcCÑ¥0ŸgÄ8¢þëm˯7Ô‹¸!ÇìÑ”‡Ï_Ìó4êÍV©¸~×ÁYÓœp«e�i­k\Ÿ»µæ6†öõ0޶Ù-ô¸çîA+¹A„ìtrþ¨;8˜çyTæåÆ4ϱ¹«²�8ggµÜ\Ìñî¥å䦓Dyw üÁ<Ï£ñ®Ž\Ñ—ÿ݇¯ýä®R¢¬oE4ëq€;˜çy”’È)ä¢oNø�?Yš£)ˆYRzàhé±’“«ÎÇèÈ�ÿ‰4¿Å¿¿žøüm½[óêǽmhá¶.È£'“ÆÈÉòC•غÍ@ô<À~'»ÜÓ†j Í�{?à5÷ì¶{M邺Ɖ¡·á@öÍt½£¡eÂâeÕŠ-�ù±ºéûúHõådä/·²V©ð0¾sçQwÉç¡H‡¦‰¥Úy{ µ²hè{Ô‚œÞ5zhÁ‹‡ÑFjîÙæa¬”+mQiu .@³•ÖJLU¦8g«Í2½qV[)µ˜¢Sÿ2¶tµÒ1ŒZ‰›´Rnõx-Z¢…ÑœS;ÛS¶X2+´8ænTî)©Ò¶uó²îêmÏÃkp$öÈÔöla“ò]ø÷ž¾sͳš-ÐRÕ¿Ó †Ëý6j8jv‰> +endobj +558 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 799.173057 99.933071 780.423057 ] +/BS << +/W 0 +>> +/Dest (cb11-14) +>> +endobj +559 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 780.226036 99.933071 761.476036 ] +/BS << +/W 0 +>> +/Dest (cb11-15) +>> +endobj +560 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 761.279014 99.933071 742.529014 ] +/BS << +/W 0 +>> +/Dest (cb11-16) +>> +endobj +561 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 742.331993 99.933071 723.581993 ] +/BS << +/W 0 +>> +/Dest (cb11-17) +>> +endobj +562 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 723.384971 99.933071 704.634971 ] +/BS << +/W 0 +>> +/Dest (cb11-18) +>> +endobj +563 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 704.437950 99.933071 685.687950 ] +/BS << +/W 0 +>> +/Dest (cb11-19) +>> +endobj +564 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 685.490928 99.933071 666.740928 ] +/BS << +/W 0 +>> +/Dest (cb11-20) +>> +endobj +565 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 666.543907 99.933071 647.793907 ] +/BS << +/W 0 +>> +/Dest (cb11-21) +>> +endobj +566 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 647.596885 99.933071 628.846885 ] +/BS << +/W 0 +>> +/Dest (cb11-22) +>> +endobj +567 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 628.649864 99.933071 609.899864 ] +/BS << +/W 0 +>> +/Dest (cb11-23) +>> +endobj +568 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 609.702842 99.933071 590.952842 ] +/BS << +/W 0 +>> +/Dest (cb11-24) +>> +endobj +569 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 590.755821 99.933071 572.005821 ] +/BS << +/W 0 +>> +/Dest (cb11-25) +>> +endobj +570 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 571.808799 99.933071 553.058799 ] +/BS << +/W 0 +>> +/Dest (cb11-26) +>> +endobj +571 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 101.433071 444.418756 101.433071 425.668756 ] +/BS << +/W 0 +>> +/Dest (cb12-1) +>> +endobj +572 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 425.471735 99.933071 406.721735 ] +/BS << +/W 0 +>> +/Dest (cb12-2) +>> +endobj +573 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 406.524714 99.933071 387.774714 ] +/BS << +/W 0 +>> +/Dest (cb12-3) +>> +endobj +574 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 387.577692 99.933071 368.827692 ] +/BS << +/W 0 +>> +/Dest (cb12-4) +>> +endobj +575 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 368.630671 99.933071 349.880671 ] +/BS << +/W 0 +>> +/Dest (cb12-5) +>> +endobj +576 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 349.683649 99.933071 330.933649 ] +/BS << +/W 0 +>> +/Dest (cb12-6) +>> +endobj +577 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 330.736628 99.933071 311.986628 ] +/BS << +/W 0 +>> +/Dest (cb12-7) +>> +endobj +578 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 311.789606 99.933071 293.039606 ] +/BS << +/W 0 +>> +/Dest (cb12-8) +>> +endobj +579 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 292.842585 99.933071 274.092585 ] +/BS << +/W 0 +>> +/Dest (cb12-9) +>> +endobj +580 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 273.895563 99.933071 255.145563 ] +/BS << +/W 0 +>> +/Dest (cb12-10) +>> +endobj +581 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 254.948542 99.933071 236.198542 ] +/BS << +/W 0 +>> +/Dest (cb12-11) +>> +endobj +582 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 236.001520 99.933071 217.251520 ] +/BS << +/W 0 +>> +/Dest (cb12-12) +>> +endobj +583 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 217.054499 99.933071 198.304499 ] +/BS << +/W 0 +>> +/Dest (cb12-13) +>> +endobj +584 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 198.107477 99.933071 179.357477 ] +/BS << +/W 0 +>> +/Dest (cb12-14) +>> +endobj +585 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 179.160456 99.933071 160.410456 ] +/BS << +/W 0 +>> +/Dest (cb12-15) +>> +endobj +586 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 160.213434 99.933071 141.463434 ] +/BS << +/W 0 +>> +/Dest (cb12-16) +>> +endobj +587 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 141.266413 99.933071 122.516413 ] +/BS << +/W 0 +>> +/Dest (cb12-17) +>> +endobj +588 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 122.319391 99.933071 103.569391 ] +/BS << +/W 0 +>> +/Dest (cb12-18) +>> +endobj +589 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 103.372370 99.933071 84.622370 ] +/BS << +/W 0 +>> +/Dest (cb12-19) +>> +endobj +590 0 obj +<< +/Filter /FlateDecode +/Length 3157 +>> +stream +xœÍ›[‹%Ç Çßϧ8Ï—¥’êaÁ`0Ä0$��‡õÄkfvòõóWŸ®K÷ÑÌήװ;Ìžn©.ê*Õ¯¤:=|%ü|Åø¯*‡Z[Éz}|ùåB¡$¿­ÄáfS�ß’®LZBâ–kº¾7�”PZŠ%_Ÿ.øït»ºüí—ÿëð5†ÖrätýõGS©„RK¡ä¨TÄâ¨R +¥Ä”Uæ€GlÍSÁŒT4꽪À m5y*˜¡1VGUa†ha¹W5˜ «§‚ÜRqTL°ƒ#‘«ƒ!¤*ÑÑq +ƒž=]ä�k‹ÍÕè¸DO'rQNìéZÈ9§ê鶤FìélI¬Jž¶¨Ôâé2l‘,äê`K¬E<]�-£Ó]…-ð®êê` ebO×$¤VU]]ƒŽj©÷ºH)¤*BžŽ9$ø¦¸:¬(LR.Ž.–L©¹:Ø’„¢§Ø¢øñtàD’R«³Z£­n!aO—`KŒE]lÁä{ˆ¶Pɰ‚‚qÉc@,%h‹êA V Zµzˆµ-E< Ä–‚æV<1t‘=Á–¤Ù#�0lQ¬\W[¤©Ç‰°<ˆÀ–¨â±@@[…·x,àV©±Ço•8{,f’Çq¥fõX @.\©y,0WÀN�èb¹�êJÊÑc�»¢5{,pW”Éc�‚»"¨éê` Øcè„«x,PpW˜ŠÇw±Œ¢ÇÌj€f�ð•k%� +îÆJê±@ÁÝX°¸º°Åc�‚»1á¼�Ü�‰¢Çw£Æì±ŽÀr£pI~8[X�Øï¡‹â±�…ˆ°ÄcAw¹aûsÖ4h¸¶ì± �»\1}®®.qgÝb”çÜ<$p•x,Hà.ðY=€ñ;jôX�À]ìÔžÜåØÈcAw7$�p‡À<` Lp]W×µZ=$pXŠ ° ª ‰«+ŽÄ ã@ˆC=dpÛ{óX�Á]J" 2¸KаÇÕÁ©Ñcâè°l�5�`5P)<¸KŒötà.Qi 2¸kۦǂ\L«ÇG�¹jh¥d�¹tù\]¸O +A�€,W[´¨ÇÖ¡I« J„-£Ç‚a B�ˆBcDßnz[à.n~ °‘¢Ç�,Ԧ걠¤Œ| £êér µ×®®BÇÅcA)°³ÇäR¡bÑ{,àƒ…K `t¬ Jƒ-X* °…™{:†-²= Ò…ŽÙcA�°Ñ Ç‚+²ÌL °C#—ÄP{:%Ë3«Ç‚ª9X¨è±Ë™&Héê` 0á±ócÉvòX€äÉ&ÒW[$©Ç‚Z£¥›ÕcA­°%RôXß´|³x,h[ñy,h”ƒ…É €qèˆ<4®È7£z,Àº´|³z,hBÈ7‘â9ë¶I¶|³x,h +[BW[45gÝ‚IÈ7A'O—aKlê± ålùfõX€0ù&"z÷H Z¾YÜãp75�ÉÓ�»ˆL³ÇÜ ßDdëåöð¦‚øÌWVË8«{b@@oÂÞê؋ݪ¸gøZŽäÀLd–5»§ØV¡dr� üE<¦wL¸�>­GTîP°gÖbÙ°,ÑýÈ9f1y¦Øí|ìן._¿Åæ{ýé¿—wØNÊúÃùE³%ÖÉ–Hl˜nà*lÍÁ+гÚB5 aà§Ô1#J›F2°¸º™‘ØŠ±Ý¶ë¸à£É°Ølf3Û“éÚ/2ÆTIömýè:ŸËVéýbù!}@ð†LÞvй+rìís1õ#«|Kёť¤Ec'¢^ÒCá?=\°Œöîo'´ãv±»¹bp#]Þ_¾~øæá¯ßýÝ>¼»üã�Dú¿�„�äÍWl÷?àºî×éöɼßçÛgŠû'zâ~�ë;�ÊZ{Zg™^~ës/›z»Ý´£ïöëý“i¿/GF??¯7ÿ¼>|{ùóÃq‘÷+B> e²p {ž‘äʼn]•Ošøßc¾‘Å"°CäÎ÷6ŽÛÈ<ßrHd�¶7Ú²ê$'WX¦¶OÕ(óÜÒñ)sºù_ÓnT�S?îuÖÓÜÛâ7熯péßßE—ç·k9> ‚×;YZž§�sz·_»¦"¤ÖàrÅÎØ¶XóE‡]•/Æá‘laUbªØõø9d>¡Ÿm;ÍN(sЈX]?4B¯«óå RȨés@áØØJ…±JOÞz^='Rô•ct²xZ-åØÖ ÆGö9V~9¶Ã{}>ÙÔWíyS|ŽR½¿g ÓåíÙ›Õ,�®ÑRÎH[šþ²C¾®Î—ã�ž¯I�âçpÈCc‡mêí ³cðû$ÉŽðrt†³C'Ø£¤»rõ„îrÏ9ñÖžïÕòœ† Q‡�½6K–^v‚×Õùbœ Úáºmå38Á±±•N±Âºÿ~”8±‚ýŽöø8ɽJp‡ «�pì›ó�tùtÑ�m|ζôüsÒý‡Õr߾ŮlAçUì€qˆV½èø¯¬óå8~Dø loS¸Žÿ9¨òÂd$'(>³çmø¼ˆÖàu´—¦ãt‡ãÓ¶7‚âw§û·K½îßïÇ"%a(%×À©&Œý¤O«t<˜Ið|©l·ùx;ö¹ÚM_¼s„F[²¬=AÎ\3´ÐÃÍ꣋´Îj{�´vª]vè´o�Q—�K·)ïÕú°lO\ÝQ*#¦˜ÒŸ×‘N묌ALë¬ä»²ÖnßñF´$#J«;—ùt4KŽX²:²¼ÖR�%¥ËîûÖcß}·½.�¡Ó�<#SšÕÒ]ÉOâß§¬�[�Ói�Wªÿl'\çÛ Ø¨•‹DÙþÀ‡jÎ`ˆÚ;šEër¤ñÑu^>ã¸?ÉègkO˜Ž "TØþTË7á ŠöaÅÒTÿ3.¿Z#÷‘>nž}­æ^a'8Û»úø·äŒÛb©¢ýiŽXÐ[í�âBìélgtép|²ýü÷LÿÊ +endstream +endobj +591 0 obj +<< +/Type /Page +/Parent 1 0 R +/MediaBox [ 0 0 595.275591 841.889764 ] +/Contents 590 0 R +/Resources 4 0 R +/Annots [ 592 0 R 593 0 R 594 0 R 595 0 R ] +/TrimBox [ 0 0 595.275591 841.889764 ] +/BleedBox [ 0 0 595.275591 841.889764 ] +>> +endobj +592 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 780.226036 99.933071 761.476036 ] +/BS << +/W 0 +>> +/Dest (cb12-20) +>> +endobj +593 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 742.331993 99.933071 723.581993 ] +/BS << +/W 0 +>> +/Dest (cb12-21) +>> +endobj +594 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 723.384971 99.933071 704.634971 ] +/BS << +/W 0 +>> +/Dest (cb12-22) +>> +endobj +595 0 obj +<< +/Type /Annot +/Subtype /Link +/Rect [ 99.933071 704.437950 99.933071 685.687950 ] +/BS << +/W 0 +>> +/Dest (cb12-23) +>> +endobj +596 0 obj +<< +/Title (Hardening Guide with CIS v1.6 Benchmark) +/Dest [ 6 0 R /XYZ 85.009843 502.818898 0 ] +/Count 14 +/First 597 0 R +/Last 608 0 R +/Parent 611 0 R +>> +endobj +597 0 obj +<< +/Title (Overview) +/Dest [ 30 0 R /XYZ 84.259843 272.631496 0 ] +/Count 1 +/First 598 0 R +/Last 598 0 R +/Parent 596 0 R +/Next 599 0 R +>> +endobj +598 0 obj +<< +/Title (Known Issues) +/Dest [ 45 0 R /XYZ 84.259843 799.370079 0 ] +/Count 0 +/Parent 597 0 R +>> +endobj +599 0 obj +<< +/Title (Configure Kernel Runtime Parameters) +/Dest [ 45 0 R /XYZ 84.259843 539.222079 0 ] +/Count 0 +/Prev 597 0 R +/Parent 596 0 R +/Next 600 0 R +>> +endobj +600 0 obj +<< +/Title (Configure etcd user and group) +/Dest [ 45 0 R /XYZ 84.259843 283.686971 0 ] +/Count 1 +/Prev 599 0 R +/First 601 0 R +/Last 601 0 R +/Parent 596 0 R +/Next 602 0 R +>> +endobj +601 0 obj +<< +/Title (Create etcd user and group) +/Dest [ 45 0 R /XYZ 84.259843 169.788971 0 ] +/Count 0 +/Parent 600 0 R +>> +endobj +602 0 obj +<< +/Title (Configure default Service Account) +/Dest [ 53 0 R /XYZ 84.259843 561.590928 0 ] +/Count 1 +/Prev 600 0 R +/First 603 0 R +/Last 603 0 R +/Parent 596 0 R +/Next 604 0 R +>> +endobj +603 0 obj +<< +/Title (Set automountServiceAccountToken to false for default service accounts) +/Dest [ 53 0 R /XYZ 84.259843 522.092928 0 ] +/Count 0 +/Parent 602 0 R +>> +endobj +604 0 obj +<< +/Title (Configure Network Policy) +/Dest [ 67 0 R /XYZ 84.259843 599.840928 0 ] +/Count 1 +/Prev 602 0 R +/First 605 0 R +/Last 605 0 R +/Parent 596 0 R +/Next 606 0 R +>> +endobj +605 0 obj +<< +/Title (Ensure that all Namespaces have Network Policies defined) +/Dest [ 67 0 R /XYZ 84.259843 564.092928 0 ] +/Count 0 +/Parent 604 0 R +>> +endobj +606 0 obj +<< +/Title (Reference Hardened RKE cluster.yml Configuration) +/Dest [ 77 0 R /XYZ 84.259843 191.441066 0 ] +/Count 0 +/Prev 604 0 R +/Parent 596 0 R +/Next 607 0 R +>> +endobj +607 0 obj +<< +/Title (Reference Hardened RKE Template Configuration) +/Dest [ 390 0 R /XYZ 84.259843 518.211778 0 ] +/Count 0 +/Prev 606 0 R +/Parent 596 0 R +/Next 608 0 R +>> +endobj +608 0 obj +<< +/Title (Reference Hardened cloud-config Configuration) +/Dest [ 534 0 R /XYZ 84.259843 537.158799 0 ] +/Count 2 +/Prev 607 0 R +/First 609 0 R +/Last 610 0 R +/Parent 596 0 R +>> +endobj +609 0 obj +<< +/Title (Reference Hardened cloud-config for SUSE Linux Enterprise Server 15 \(SLES 15\) and openSUSE Leap 15) +/Dest [ 534 0 R /XYZ 84.259843 397.010799 0 ] +/Count 0 +/Parent 608 0 R +/Next 610 0 R +>> +endobj +610 0 obj +<< +/Title (Reference Hardened cloud-config for Red Hat Enterprise Linux 8 \(RHEL 8\) and Ubuntu 20.04 LTS) +/Dest [ 557 0 R /XYZ 84.259843 511.863778 0 ] +/Count 0 +/Prev 609 0 R +/Parent 608 0 R +>> +endobj +611 0 obj +<< +/Count 15 +/First 596 0 R +/Last 596 0 R +>> +endobj +612 0 obj +<< +/Length1 9900 +/Filter /FlateDecode +/Length 6559 +>> +stream +xœÕ:{\UUºßÚß^ûìóàpÎáy?ˆø µ8â«Tt|Œø:�)HZj +>2%S35#sô dy5ÍÔš;êÌØcš’²nh6ך{÷Û0mš{›ùãÞßÝ‹½öz|ë[ß{}ûl€€U2$¤§g>²6gÿ6€ˆ94<4mHºô²´‡ú+©?uhÆ/Æö™@ý/°ÏбãÇîL= à¦ùšGÌfLMZNýCÔÿþc{'Îþ�WŸ`^ê�Ÿ67»gÉ=iíêo˜¶p~8Ì I0EŒÈ/š>w^Ÿ…³ˆÍ]R*‘E}Ëô9‹óý7Dn æGŽgfäeç†�ß¾‹Ö¢ù¾3hÀzRI£þ|êGϘ;ÿ±'Ïû–H„�Í™S8-;ûíÐzÚ¼s³+’WKÐÜ&ê‡dÏÍ‹½~ÿq€0âŸ]**,™ßö!L¢ý=Ú|Qq^Ñ@÷Ԕø Ðd'Mõ¾ßpþÛG}}a*h××·UjÏ?�ŸÐýÄxCˆâ¤® +´_´Î0W„P}úQ¢cºûš¬�L†8@½/� 6�]’;ÙÊÖ':’øfꆶ?ñ�/9h�YATeI’Û÷ûáÊÈ’ ‡EŠS8ÙÃ\v5 XÛ'mÚ¬|ò;!¥UðO]´îÃÎ6€OÌ#óä&˜×�owÀQ)Nèó;à¨ö$�ÕÆåÏÛá´ GP? +1 +úÑܲžû•U0@·MÃNª™þ”¡œžÁ¤o i©Ü}á!c!ò`&̆BXÔ¦i«sv0 Õg§Átš� ÅmmmWÿ^ù[»ç:bP¸Œƒá¶:É=<·Î3zBø;#zöøQ7Üf¯ƒŒ:ŸÅáÞ¶¶Œ rŸXǃëЭÖÉî¨OÿÞä§={ŒÌ˜^×:$­ë�¬4;�šZ�†i|Hš>§mZÇÝô7<«.|ÚŒð§lOE xÊ–7 'x¥rOÛm�ÍNüO7þG"þµ¿·âwo üw7þÅŠßÖàM7~óÔƒü�7jðz 65ã×Íøo¿€_Æk¿HÄÏÇòÏk°‘ÇâÕÏzó«ÍøYoüTàŸ~’ˆrâÇ5ø‘ÀøÁR¼r ÿ(ð÷þû¥xùÒP~y)^ŠÄ/ +ü]þ«Àß +|_à{/Ôàùs¡ü¼Às¡øn"žxz…�ŸÆ·ýñ”À“ÿEà �o |Sàq�olxLàQ;ÖW¸y½@ï‘cÜ+ðÈá)üÈ1È·æâs[lü¹@ÜbÃÍ&Ü$pc�ß(°Æ«iQu nXoåºáz+>ÛŒëÖãë®]3…¯=†kËå5ϸùš)¸Æ#?ãÆ§®^Õ‹¯¸ª>El>õ V­4ó*'®4c% TæbIªÂ�+ì¸\à“ËìüI�Ëìø„Àr�e=m¿^º”ÿZàÒ¥¸$K3]¼Ô�� \,ð1+.²àB.8¿Kš±¸ç5c‘ÀB�çDàl�³ìƒù¬±8SàŒ¥8�:ùóæ +œ&0G`öÌjÆ©œ"p²ÀI'N0ñ‰Í8Á„¿ôä¿LÄñÇÑÎãc¦ Ç2ÛÇ8qô?>Z`†!pÔ#6>Jà#6|XàHš)pÄpá‡ÃC|øpóÁ¡ÓkpH ¦ |HêÉjÆÁÇðÁ‘è˜*ð�ûü'Þ?È—ßïÀA}ø O›/ôÁSöïçäý›±__ïçľÉfÞ׆ÉfìŠI>˜xŸ™' +¼ÏŒ ½Í<Á{›±WO#ïeÞF쑈ñÝÝ<>»Ç9xw7Æ9°[¬›w{cÝã6ó_t›1Z`”ÀH_Œ >#ž‹aÍJ,„æbˆ“ƒ5c×ÁH�@�]r1€$ Пù¢K S Ÿ@8Ú‰Wû`´-Eß\´ +ô±øs�‚¶ø£Y É†F�*�© NTrQ¦I™,À…4Š‚¢–�K=‘Ù2/Ë]ñ4‹ÿÿpÁÿ5ÿíÂ’Á 稜€½°•í¦ž–#Ì£‘Zé ¬€4r’�cUROÛ 7á"AVÂ9Ü+I4 +p…Kp‹eÂ!‘œ,Å@¸$�‘½ò5Ê<úÉ%ò9K.aI¸ƒ�ç»éNÁ·)Ÿ9 aàeŸPp¿Â$l�Ód+|‚p/|N»hYÎ9Ê*vÒií'+„2©TC#gøØB¥�æ/°mì"Qw”= —aÊÒ0ØÆ._çà{x3¥2:Ž“¤|¢ÿ áº@ë·@‰ ü23��âiŒ¨§½rô:{òËz¹ e´s&ìT¼ŠÓE»hÛÍN²&e=ÔÂEüÎÃÙ +9JÞ#ƒ5íÀ,XC¸·hk”|¶˜x×J©†]Z$g±½ð•œeÈ!ÜokÑž‡¤1\ËÑè^¤Øˆ§�lV¥Úl\0Œ�{ÓzÂ`XJ\åÉ0‹Z¥pBO¬�5„IçWéÇ¿§•[åO‰ç5ìié{¸€i”uæË7´|‹ÒÖšŸ™(9õ2òN9üÓ…YÙÄŽ²Ÿ}ÀÄßéñ¿_ÐFe2¾$Û©,�_“¯ÈWøh*ù %U/ nCŽa§šlJ™å¡ìÊ¥ìGàI‰BÙÖÒtônJè—äŠúðâE!ŽrTy¿ &ðx\ƒ±V–jù¨5ªaJ0B3Û.�¬óÍœPOÀžþ›Nµ#I¼Õt©)�r—‰‘ì�/úÊÒ”~vžìN²G¸"!6³¼wÙˆ–�{å’aÞaÍ—÷Rη¦íª\C6c†h˜à‰öSÀ§ÂµþJm°ÿ.[­¥*r]ðj·%ÒêŒaAn"ºéVSã}`k¼ÕØÒh»¡»#%Áã$Ïd¤ xA>ÇÏ)†�¡C¥)l +‹T\Nÿ¤Ä¾É}b˜+&&*R¾}“Á儨p°Û "Ñ_Ú¹rûö•t3ãÃÏ=üÎEß�gʸ¸ù™h7X zø9xtÇ ÇŽ½°ã¨´Ø#þ"¾ùåñÍ×_ˆcO³Å,‡í +Õ²XÊÃå&’¡ +vÊLòDBµÉXíx‚U›^ ³›UÉ/0Œƒ5ØŸ÷2B°CŽ ¶[H„ö€””M Ä¤íFJÂAßHF,Ø#tò£î4ÜD³Ë©ü©–£"Øz–öâóÏ¿(Xü†uë6³$_k._R½KܼÝú¥t¶õãÊU«WHùâ�ÂâyE»ßz­j‡3üܦw> 5–´]層…@èëéêó‚õ€©ÚÎ^ ô¼:`�}uWC $8m]5›t¹ë´}#á�oPX�DäiRí�dß~.E¹#V›mYˆ›ÌÆ`ÙµüY×—‹WÄ㬂�­¸Îs.?:UœWÄ™©�^6ŒmgÓÙ ¶}hU«ˆªHñ„bÕT­:^°pU[ש«C%¶÷‘“ºšm¡D[KcË©;Ô‰K7ì)) n{Dr„]‘;é‘î¦T>)KŽâ‹Z±C,`«ØÔg™¡°¨e•¸!®3?昽ç2[·»µlì8¶™Íeló°ô?<š%Þÿ*~'Þs•¤k>�tm†§Z-½"Ã&Å€Á¼¿‘ƒliWl"©tP#5fø�BýÈ-ìIö(ª£Î¾+ýéÝw[#ßå—[·J¹ÍñÒ™ÖhÇÍÖn„^GàUICG>;²Î¦yèÞ§û/óø$pÏàY| ßÎ ;a%|ÍñžJò²$ÉXøµg��E²š¥Ð°PÕ(LRXXè`“94Lv1p½àÜÐ¥Ú.WÃ7)¾[¨Éd€È @kOC 3²›í£SM-M�ämº‘j¨‚í4™­æü›õ:5;#úƳ‡ÃâzÇý"ÛíD÷Æ€Ýp#"cb“ý;|366&&¹OtR¢¿<¬äü£»^_´ûñÏþ >×f}S^ÚTüJCå–ÒÏÞeßÍü€ï|»_ßò…ÓòÂ㯾òç„Þ¿’¾ò×Kºô|kßéÆí�²”øîIgˆ ÜÐà‰ 3­ðr€Roµ‡W„ ®�òÚWX »øUsªÎ!1¤°ó—šíºžj¼ÕBötZ 2)ö-Î$„$„&„%„'D$D¦ÆzB<¡ž0O¸'™’š–ž‘™[»"¤2´2¬2¼2bEäÚØÚØ›±¡�K;u.È +Í +Ë +ÏŠ( +- ++ +/Š(-+/�èrOKîg�J&ÿŠ$IõMŠÐ"A¤bHÖ™¿tü“ýOn®÷zSVî?×z›I/mÌ:œ™w|Ò¿ß”’òKsJ®Š{¸õ‰½ùÙ'v¼ñ–£lU¯^{cc[4™×v¯‘¬!Õl¥l­ðYiª·Ëõ^-8|`˜s�ÆÎ `·nؾ»‘à1ûقʃÖÕqv—’“:‚AdG0Àk£žÏxýôé×3žõÈ®)­â÷¬'SÆí�“÷ÇÇ_½páj|üÞèhö�6 Š4HTÉ“'Ø ú{»ÖƒÕYÏÕÕV/Ûˆ2¨ÒP»Ã<$„tv‹T¦yCã­SM¶S7g…–‡Ö†¢<“:„&Ùmë< ˆLÜáõxmɹ¶¶sK^k=óÒ³ÏîÙóì³/áaiê6íÉÍfiL¥’–-\ç®];G7tÐUFÒrBy¢ÁÅŒêJîz™ñz ;Ö¥ÞᵬrIªK…‘’ÃwH°Nâ)r�váµ\·ÚO®¸Ô�¢�Ú�ß†Ü á©�ÊR¥TWjïaè­ö6ö0B!+” +]…AÆ)ó4Gøß‘­Ëè,3èB7Èe--ŽÌ:“3í·³Å-q†Åµ|Æ ^i×Ê-õViê¤ãgúô9нëÏLáŸÚxèÀ6�'1^žD<™¡Œ 3ËbtTøù×ûb}L”7¶ÁXïûF×�˜@P-C‡#|Hœ­åT§ØO5¶ ^\Ö8J!éw/ï^Û]“~Ÿ¬!À&Ýåñw«$ ™Ý]ÕvíÚP½Ë+DsöþÑ£·�ùÍ¡”ƒKÞkiyoÉÁ¯tÿ;}ôΙ�>úZ|&¾ + }½G÷7Þœ<-‡ `Èd6 gÚ^Í’�Òé›K6ã}<�h´2¥Òj÷Z6š˜¤Â(ÍÓÓ�ZX¾¥…ÏAMD·ÝAñë`–K?j£ìí$S#É®{–œë]²¤z}ýàל8-ílý•´mû¶ã;[+gë¶¼Üo4ù� Í+ÚïWˆ÷X•ãòkÐ q¦Ê�®ÚZég@#�³Íè1f³ŒEF®´‘+ê„—.9ëv­âüª“�­„ÏD±+Nµs…ìŠÂÑ.sY²s.V¹„Ø� +g²Bf +éf�¯K§ì):g��QY¾n°ñŽ[¾NqÙf!V=�Ê’Iõ—b¥8¯Ž—ò¥éj‰´ˆ/“ªø3êz©†oT_”FnT$3š Ý0VîÆã•xƒÇ2³,U¸B®âO+k [p£a/¾ÄÞ6üÞðW¼‰•oÊ]§Ì�=–Äe.QGë%÷×­¤Ù7[ÏÔ+Ζ™ìjë­ÖýRTëÇíüBÈþ"a’'Fq»ø‚bpY*CÂÑÔh3€ÝWU• »ê›ÜE횥Ÿ­--MºWõ4¨ñÖ SM‰º2=~ ÑÑEÑk£k©¼ýIt[´‘´«ëÓu·ŽP¶«]ÙqCÞZöêñúâkv×/zzw}}jÝâÇ÷aÕ’…ß}¦©þ…­šê¥m;ž{óÅÖJ9ëÀôœ%w,�8ð£<êËkøiËkì´¼CY®÷]Ò�mÏõ?Øm¬™^{4Z {ny®ŸRï€z‹×±º‹Ñá;®!]ôàÓµ)`G¥–B©Rf(SËŒe¦2s©¥Ì§ÌZæ[f+³—:joÚïÍ›cµ8ÓÉ¥’ û÷U¯ß¿ýMæ7n~+¾avüäÚÙ³×¾|çÌW[Å;¢I\§Ð“BÆÉú·KG…v 4]1“&ÍXiõ &E5Ý¡…Ý?(F^:¯ÅC~Ûý4™ÄüH 8"lx�­/Õ×8ºÂ¯W0rØÏo=HâÈŸÆ9íVHgÙÚ-®uä;c;Ò�±?¤;tÆUÉÎ +WUíŒs{ÈwÆ©VƒêŒÒM£êÒ=ùE¸ï´CÏqo¾Ó™î@¬æVsƒMÁæ`K/ +Ý=Ì=,�MÍ-æpgÑR7S7sw¿ÞÎÞ®îþÝB»…Å…ÇEDÇV˜*Ì– +%vL’“bF ú }éM/»bË!ÆØÞq©q�ƕŕǭ�«�»×e +Сð£ÄJK~œXi²ÃU£öLªªÊÙ�zj×_ÿ8éäœüÓÙËVçíóìÛôç÷òÉ©ºuËÌô �°vß\µõpTÔñä䉣Gf¸}£«—mÛªYy? +váÛÈÊéD¶rÕ_;kP+Mf’1�É6‡U³òA§è/±ýe¦Ý/é\8øj{Œ¥wB;Ù…=Êdèt¦ ±ˆ•Š#KÞxãòŽÊJ¾MüËšÖÚªQ[¶ÿNÊZÃÐ"ì²ó º9a 'ø[mb N¯…üËiEž–îÒ >¥Ý¢ï¸Y¡ë-ÍÍü(®·ö�Ì †ÐÜì¯÷¡×œx‡½ÏŽJ»[³·o?¾S*½]»?ÚMÜ£q?ùx™œ +ÜöÄvÄb&qí�’ +³(ƒ%„7)`£Ä¸ í�Ùt'gYçÌYçÊœ¬ ´½Õâ©]F‰¥Åhµãæ«™ç™aÒ,©T*“*¤ri�´SRµ�Œh$+v±®ØUŽ�‡qr¸š Él�ÔtHgÃq¸œÎ‡)u<Œgq¢œ¡æC>›‰3åé|†’¥.€ù¬Kåüqe¬`UXE1½B©�¶QÚ‚›äM|£²‡¿¤Ô©o©Ÿ¨mêS´ Î(¨GÝ’MeSOŠ_5ËY-™¸ÿv-Ih< ™$da_{†óq +7šŒò8“Ç™Ì&i“Ìf“b7¨NÒSUƒ&8 A“à,ƒMt¤)$<³j1›Œjû'Š>í2YgÏœ<²Î¡U~Zen£&W6²ÎB>Ú°íéžh? ~RÀwžíMMÞm\ò—üy¤)Ù4\ÎÓMÓdi2gÊ0H<ß´˜t±˜—ñJi³´‰o05H ü=é ¾ÏC¸dDE6s“j6ÒÃâ’Ñ_îÊƒÔ £Ó첸ÁÍ¢¤XŒ�ÝFcÈPÇ3MãÌÓ —åI³0OžÅg)³ ÆlótK¡u,`‹¥¥ø˜¼”´[¦¿òÅç^ñá•oÿr…l£gi÷íZ¬i™¥ÿJf€IÚ—>ÙHN• ûÓÚ ü©×Þ–@eém¼k\¾«Í¡ ÕÑVÀÉòá!(„"X Å0¦Ã ˜á”ÏNƒ8z&B•$jåD8 &˜ùPBw1äA6Ì…4: +¾µ„9TÂaÌ\%z/�žy´f!Õ¹iú»ö½³k&í´�öÒ~‰, h�ŽlZó�í˜F­Y´n<, ˆi›­cËÓWdë…–ª‹&‡ðÎ$¸pZ_H»gës?Æ3VÇRBÑ;̦Qmׂ-Ô1%ÒÞItܽªsMû÷yhû£ö?yIÚ—ÿ¶6RÿöúAe¡þý»óÿô§6c¹³Â‡ µ/Âv*Lÿe•Ñ;j Õnˆ¡º;錑tûR�F…A: £z-» „êyÅT/.ž˧çR{zqÞlX>#»€`fäåÐÈìì‚lX>'»0\«É÷–ÏÍž?–ÌÖF +§gÏ…åÅ +r~~ÁtªghøïòÏ»e¯Ñõgø’¸dÃÇÚ ´Œ\8 €_nÒÚw_�}6££=îg(ÙJxþ k˜Ô«ÇÀÎö]8îŸtW¿ø‡¶Ôà¶ÝYÚ�¸4Ýáþ ÉPâ +endstream +endobj +613 0 obj +<< +/Length1 6944 +/Filter /FlateDecode +/Length 4153 +>> +stream +xœíYyxSו¿÷>Y2‹/²Àl–%[€ñ¦'É»,[²v¯’WÉ‹¼Ûò¾à˜Å˜¥L¡iI˜&MB)kÀMøJÈÒ/¦„4!MffÆi&I“�6�i:´CÀOsmBÒùs¾oæ=ßwß½÷Ü{ÎùÝsÏ9OF!´�!éLÅEÃûBQ“Ðmr”å­6+¼Ðþ3´“‹IÊjÁ�„°Úõ�]žÞ˜ó²Ý-„öÎÖΑ–¾Æ„D„B'Ûš=MË^6åÀØ(š6è–1{`¾Úò¶®Á‡ý(ä‡ÐGˆiêìiôœùìÕ—`½G ïÅ.ÏC½¸uÂû*O·§«Y&OgZ}Oõö ú^FJ�ï9:ލ.,,ØûxÝâ¬ÿB ó{èAïûé9ZT^éóÝàn2ç˜ãÐ!‚üÌDqGP“@è»�‚™süJ³¯Ë|Ïe¤œ–Â< eB_Ú0ü +‚ÆR }6�k‘’G‹¡~3—Åi,B¿DÑÑ1zÈ@4BOLjœœá5à¿Îš¾}óuÉ𛨊ô^ß›>Ž(Pú Zϯ:ˆ´X‡âHbIJ!Ch ôYÈ&(1HJ†QÙ€,è=?ýƒ.rèšQ#@ñä<* à/¡=Ú/¢t +¥«€þçï¯ÂxŒëíz˜gCéd%Š!G±c(’™D’oÑn†ÿ1Xç̯ãëxÒ‰â±Iø÷1ž¿}é»A¿,!ÐŽñÅ?èðÔóQîDQÐo&)h!£B ñoQaÑÂÿ‰ÿýï¾ðf´J4ÿþcäø&:8vZAa DÀóµõB½-�ž`Xg-J„“dêbT�F¢WFÇø|ˆžQœ–d”‹l¨•"Oô +:â»vÿýñóŸúšù[WZ‡Ìü]ŽjÑ Ü‡Ð)tGàdÜ€÷ãSø6aIΜ»Šøà~>øWp_™sÿvSFÊÐ&fµ�p‘L±iaN³â­·`¤ÓgÄOC¼YŒP$Q«ÂRY±�ˆ#Â$bÙ%o_{]oŸ·µÎ�cÆOâxϼvîòÁýÜï:æÁL)̬öÏ”¨5ajQ¨ÙÈ0q%·zûzëÚû¼õgæuà¨ý±¢}ž‡{ïä8÷Q-º�óõ¡gÑ(•'•‘…?Û›måþ‚CØj6ãÄ��­¿ÿ'‹Öûn£ãh‚¨§ViXe¤8B(+–Ë£–ÉdË„ò¨(9-ôthá¡&ír„¦IcâÔò¸8YŒP(ŽˆŒd•�ZÛûð÷z{¿÷p/> 1é &‰ÄdЛ$dåk¯�<õúë§*F¬Ö‘Šê�VëÆj�!lüSò. ’áj6TwÖMÆS à—1bQ0‰ Ã)DZÀ�rÉ4îB‘T,U?ÿHcŽÑ`c*cÍ­#�£ ¸’[}jÇÞü\[™©wc“ãÀp‘=—ê›â»C–�OP|@ºˆHÌWTË«@ÙÈÔ¬F3ÍO?ÖbhdMé¹vU›¥ã»Á•"§Ñhij–,u׿ë´vQiKqªµÕ!AKjíé.UOK–Ý’a˳ãL­Z§Ó~�Ç�Jr͇�RÕ˜ eÅ2±LŽ¥kp]WSSµ€nÓá|ü;N^tø0¾Àí 2[ ‚§“¥~ KÅši±ï“—Š*% ¸Ã’j•£-AÓSÚ¾}QUˆSWT\\¨. ++Ç/��ף׿we›ûó:«Óuu……eìzüÈFyhɧ€r,ì,&¹1°‰S/‘*#%²E`¼Óüð/ª*±Ä›×ºIíµ·&bÔÐ;ßù‚=©²Ôè(. �ï> Êë3têÜG†qOGÉc2k¯«°VQ­ CÁwÈ;4�ÂX†¥j)¾Ã}æÆQÜ(þ€<<5HvRœåûw’V·|,daÔJïí\䌄*Mªœ¢�P(œuO–Æk·{Sµ­E7d·èÌZ¼¸Ø˜_ìÈÓ;>®uT»møÎ,MËVh2*Äáuú\�ZíÉÕׇ½Ÿ—§M3ä§�ÏÏ×êô&/Q�EQëÕPFŠ{rÌসgBT˜W,ZG7déÛ³6÷?Ü—à­iévN–;íFGiáníö§ØÔ›wÇÏ_=VÞ]¶Ïa²¹+Í–Jzrù“ +Z +E4…'> ’Ždy zæ#+ÉÂÙp™‚að¸É´ú»íwêKGG÷ï'/MÙnàzîÅ20�~ÖˆB2X-£4tרéCæ¯Ä,žÌ‰Õ´¹»·MMJ}*Ç=©3ó~tÃ^¬ÿÉaìQZשËRÈDR±R[›¥VgM}¨KÏÐߢ{ï»M~M^G+é©£øHds\F*/Þ}ÐÓÿŒ¢ke—Ý2˜—7h±Ã«â™~ÏA7>ÔÝÝœc0lq:¶ô9M]®#- ?Õå Ðe> +ŸÑDÊ$eñ'ªªNô_¾üw?Ø»kt”L”ýÄë=à SûönÛ¾oê*•VÁo@¾ ~0\L�%ø•P©xœãð +n7&=°ýÙFÎØ´—€ã<¨�¨ÁgáKÜ;·n¹È„õ�VîMõký[òoésÕc/"sáñ 5+»-–!½~ÈÒ²s÷v?îöª©9äéyV�?ÏÖë·”–nÖol³Ë÷:@÷–£®î¦€ì¤8‚ì$‘BaáIZ\Ü— 7‚¦&œÅ½A&¸ÆÊÀ 43hÄêq%áe¦kiy4‘ó acü÷ ¬=À½�s°–{–z빣ܱ?†9à¿!À��ÿ•;í²Z¡+°b hIeü’8”%}.n¬Øí"ñSï‘3SÉ:ØËxßWäß±Åh5|•ÅÍ>êBïýg`Äkxp¹Ý‡(rƒVë ÅOä:J±qim=â*2Œ:œ[x£5¬e5¯_`@ EF�^,k¡ÆBVoÜåúdæ§Í?ܵ ?>À}H&ú«·æeoó¡Àüµ0ýR‘2�éü™ ÇÓ‡Ÿ=Þíú¤¨Kãpœâ¶î²Z-¶]x%w�LhÜ™æî0î*n±dk €N:h'c=�¿³Üyœ"‘LÛ†ÿ¬P¥%«Å�.-ö™ ¹¶õyiùŽÌŒvCÖঠkvº9>'=Y‡Y”R‘ž¢Ïe×(£‡É rÓ+“JÖdgªã’—- �-Èc«Ó@‚ؤ۠‘ˆZ3ÕG¦Æ·Ï¹^Kžz”ôXéÚ@ÊJ  §öâw«`Óž7ô¸«¤Øå2[­Ãù`¦šêê<Á™+†32†+ð˰B$àö}X!àíÙðpò}î«vî+Ï•+~ã›:Aø¸ ñù˜  „/0ÌÈFÄ1ü1¿n92Þ|ÞóÄxË¡'ù9)Sÿ‚ÁvN“¢©à[–ÚϤ‚$ÀÞÆÜó44£P$½?Q‰7 [ÌQn÷r¯É²Á€'•e,ëT*�,[¦Äm[�Ú¤¦©«-É9æíŽlwJ²[›S“’R£å-x��ëÓ¼fe1=7‚ûx½Ñ™oÝ`†&ïr°üA`E¹•))«ÏµÆ­NÇv³6¹™\ç>èt'§Ôdk)¯¿ÿü2üÞ5×&æxOÃHaóqâ’¬Âúú¬âÅ ‘; G T•† +e†·¡±3Mål6Ž•ßCëú´B¿-«®{% Õa² ?­Ìd3µ¢5åkpùyå‚Kù¯1‘t®ÛŸ>扄¦1R’ËpÖ fsfÑP ¡p“Ѱ©¸ð¡ÜÚÄ¢ä|�Wã�•%®ÔÄ¢Fã¶²²±|ðÍdSTRë¸Ö“»|tô3K#²°‚¶~Àe2Õµg¥ àËœ_¶)Üeö$�‚îg+6]ŸZm~„9G§3–Ù¨ÌÀãÏ�iöÊD7eT—䛜ü�r¥æwDI:rgáå*ç~3]yQ|¢6+C‡îí@¢?§ø:|vó4þ5@6Ò? ~y!�>µø2°'>–E~{,û|‹É2ZX8j±�¦”«UÎ¥C™Rš2ìÛ¹-?¬¬l›±8Ñ�—çNHpçéÝ ¼âî‚Jx�âå¼ß�÷lÒè]ñ5ô§¿ÊIâ~Ĭiîšã�èé¸û@Ïú-¾Âä]ævGušÍò¬9‰MwßÇ퉺û}…ßbªû¼VbYŒö_Vé–> rßVÕç.9-’|_@.–@¿çæÄÏo +Ÿ +ÐdSS+ÈOSeéôÙ©Jw¦«WàbrÔ)2uR¦U�•®ÌyñʵªD™\ºDš«^g\ë.ŽW­‹Y.‡,Y­U&˜×ÿ(ÂF~v/2Rq!"R·ÃBfx6f�¾Ôn7™\{Áã¼²FZ`,ÆzÛž=4�4û¾¯.§§Ïx]Xý–°®¨š4]K&˜šÅIäSWKÖ%�éâ\îí°5œ@XÈÿR,§‘56œ…ˆÉâeÏx.u\jpâIþ@ó4ŒÞ¦cªl:¦*ž­Ý¹³ödÍèwk¾³™rÀ/pDΩàÛ“ÅÿD×§¿øÃÙ »!UÀ×ÃJRY&{·o©;}ºuûæºçN_¸€—àˆ·ßæþ“û#/Ç‘X˜#â£}8åFb¹Ÿ×v~Ø|ò"¿û&«8> –µ_Ä.>êpY*+�2ÚRŸÛ +_¼víµ¿h j¸GÅŠ€F$s5×ë>l®Ï%<Fô.¶à ²jfy­§L&Ve6«Þ…ÊdR±&JkÇf|?Fý dñj|…ëÃ�ðßVÕô@d¬èÿ› }Ç�ó ¼x.ð_¨è\à]€V¡Û�÷ 4/ ¼ Ñ*ƒô¨õ¢Ô�ÚQ+jCƒ •(™/ÑÈ =ÍPóT½@Ó�øv?ôtÀX#?# AÝ}ýüø~¥A˜1€2 v%ÁÚí<Åj@‰0«uA/ík�÷!X· æŽ@ß\^kïk—ÏV ïD ·€„FT„2 ã\JJ¡ÎÉp«@†´¿A?C;—.á>:ÿ¯³pù^¢ÿ÷yоP棰 Ø`´;Q0ðô¾9ãë�Ã�G45oP¢UðôÀœ¹´pý7F—Ðe +endstream +endobj +614 0 obj +<< +/Length1 7204 +/Filter /FlateDecode +/Length 4875 +>> +stream +xœÍ9kXUוkŸuö¹ï÷Áå}.y\¸€¢^ j��  A#�§òˆH-Q¢V�1�iK'!ÄCljhjR�Ô4ôkÓ6µ~ÑIk-�ÓvZ˜~6“8Ì:ç¢1�t:ýúcæì»Ÿkíµ×^{íµÖ`B…ž¥KKVõV>ßQD£‘Ë +—,†…W¨ß@ýµËŠî*.ܱò>꟣¾gYñºÅEY[>¦þ¯¨¿ø®bŸ¿ÑrÁÀ©¿~KcE –Šfl§þ¾-;Ú=§—k6€îqÂÙWÓRÛ¸=;o+Á‰|£¶¢­4” ¢�úÆÚ†Îš‰ß…¶~`¨«®¨ŠºóÉwin*ÁçÔÑ€1€+©_EýøºÆö�]ù¨ËÚš·T,éXþÍ÷ÐÀÙÆŠ�-b"{˜`þ›*«gEÏKû’ÂsKs[ûôe¸‡Ö�Wà-­Õ-+×<™EÂ9NùcPd%Ü;üjèÍfKÁŸ F Ê÷Þý”ú—ëK§ä(ñ‚ÔM¸Z• å£yšF9Šh\PºT2øìW¦Ž”AÒ̬ +€/°ø ñ‚p8Ïâ�Q7:Xã;P#„ЃF‡’(bp½O¿¢š%Uà�4蔲ƒÕ4²÷Ë�]�¾:ÃKüŸx�¥Q~ýïœóWñ‰ŸØ„ŸÛètSÞøwà߬ï�©•ù”7Q>u^ÏL}j¾–òó”+)÷a,nf¬™òå¢ÛæÏƒ ‚"e•L­Eh¡ÚMçŽtîé�‹ 6CÔ@=Áv@ç4i�£)V![² ZÈôûŸ—þ›žÝú^ÑH\D�AªÇ:$x—W Ö”z~¸!6-õ/º«Æ3EC¦NÏðôtQ©Á7 ñÈ!ôj‡DoÜè_ަ¥®(*õ �[R8CuIy!�—RSéÑ0�/)TaÊ¢CÜK¿ååCž-už­Æå?h­ÎOƒaaO ý5ÏœÁïœÁW'ð• |ù¥eüå3øÒ2<íÇo÷á‹~üVõá §ìü…mxÊŽÏÛñ2ž|ÎÄONàs&|ö!>(ãà9ñÙø³á³{ÄÏ$ððD@|&�Ëø´�9ñ©�eü)Ÿž¾˜ž\Ä–á“‹°ÿ ?ï߆Oøñqÿy�Nàc2>‚_÷bŸ¿"ã?ÉøˆŒ½2öT[yO>|ÄÁvᑇ¬üˆ²âášh~Ø�ñÐÁ3ü�Œ”ñƒgðàñÀ—½ü@ˆ_öâþ}¾? ÷Ypo> c7ÑëöãžÝv¾§ +wÛñþ>ìªÂ/ã.¢¸Ë�_$„/ú±Ó�;i`gvȸCÆö6o3aëötÞ*ãötl!hK6»±©ñ o’±±¡Œ7žÁÆ=bC½—7”aC@ܶ ·Rgë¬L{±ŽæÔUa-UµUXC+ÕDcµ«dÜ"c¥Œ]X.ã½U¸éß$ã=ÜèÇ i!|ƒ K]x7„ð»e\ïÇu2–x‰‹ ¸v�‹¯íÃ5EV¾Æ…EV¼KÆÕ«ªøê>\U…+e\!ã�ËíüÎ>\nÇ/Lಠ\Ú…K +í|IÚñ7.2ãB?.°áü3Ÿ/cÁ</0ã<æç…òü>Ì›kày¡˜·GœkÀ¹1wŽ›çæâbnŽs²ÝwÀÅ3 +ÑçÆtJ�Æ´TO Á´a!Љ©)žjÃÔa¨—2ÛÌS,˜2ÌÎQo¶¤ç³Í8{˜í Ü-&¯À$ &®À„x7OˆG/UÞO¢‰wcœgE:ø,?Æz²yìôи'c"<&£©Š–1ŠP¢üéÀˆp;� J¹:1<ÌÆÃíä)Lkáa6 Sxº[t;0tºˆœ«�¹èÈE;yû†øÑfõsÛZ jõ£Å\Ê-]h¦ž¹MDÆ�Fƒ…£Ñ`A=�k5F®µ 6¸C íPcD�²C�(q—ô( ³Ài‘ë�3„‰b¢`âM%2¢Á¢B� ³ªýGXÊÿëþ׎bY,Ž�bGàeòÁ4ÎVÃ&Ø…— ’H9Œ²–<”‘ÅÁ[ bm‚1 Ï, A%ÁdÊ +´ò&%ÑHí>ш£Tï‡ãøîU!×…á-¡È5À1êï%ß÷8�ÂY‚ÌK£o0/Ë„~æ#ª× ÓÇ.1=˃J| Ö·Çà8|Ÿ;Î$h�_‚7`Þ†q~‰? +Ǩ¼Ä¯Ãv¦Ä*QÒ°äÐÄÑΚaÖ³*_‡È–àãì ðšT#ÞËÕ´‹fŒ ›„]ÂQËÙI¸*9h½½pšiW!ðæŠ+ácúóDÚÁIÌáG‚‰øÖÂÛü’0v)\=Xó 3ÎkŽIfæÓìæã4»MqÊð›ÿEèà‚Ô¿’V&�üíÄòÙÆÏMÍ”þÀþ øhço£YM‹(íÆçÅÙbµø´x]¼Î“ù+üC)EºOM?ÆÒØY<.\¥˜Âú‰‡�h½ø“L "ƒÅÚbYšÐ1uH¸*_!\ŠÉÐL§@¸/C‡Àô +òX&øÆ‚¸¯³Uò·Y³ü�¸Š+&®ÂF¡Ä‰3½ZëÅ‚1¿2ëbpžíÓ¹”ÅDù+òK + %·H7Ð÷ó(V¹(pQÃÉ’p‘éÉà€¨×¡^K/ ¦ŽÝ�U:®Ój$5zÑñ½Û`½±bH[¼bH¿fcé«D-0wÃXhñPpmr,$/ƒb�•¿©¡ŸUû¦ÚœéG6Ìb�T‹7 ,CÈÐdh5À,‚ˆz1‡å ùšmû’°‡õ§ÙÁ\e c%¤$Ôf¡ò9VϾ"¿»I¾o£ü®øƒ©'pûD +Û.÷(t»§ßד¶%BK`�Ë)„:!Ñl±ÚB¸ÉNjêµÓ€¨�îŽjŽm ×wëšM-RSxkR¢ÝñV]R¼+4ÆêŠÂYIÖÉ‘±É±k¶�<úè(¯Ý»1fÿhÜ:³Só›Ôœ©hk 9ÙñY~W¨-!!n–ät¸BC].§CŒ�•�hs¹²üsr²™|µŸ‰ï×þ´zóHù¶Öâ}»OŸ”ÿ$ÿ±ùjÝŽ+ �;‹V +=ëÎôÿøw¾tùWw,]_´`MfÆâ÷NüújN6Ë,Y»eÃÕQÊ^)æ;è\UÍ�„±Šž-d¤#“#t*7Æü±3š!LÊïÊûÅ(Êo3A–•ˆUyAÉ—I·,/Ád$Ÿª²¤NÎØñÂ'>ùòk¯)1ô½$Õ² zðÂþ€O'AXL¨Ù( 6TªµÅPYwÈÖºßq‘¡ˆn“ÎeH�A—#9Á:9ö“É1¿Ÿ¤¤èʵAZÇóH¶Á_F -;:#&Ó{ŸÐêlu„ƒì ¾ÛÙí€6 Пpœp8\¡nWSå«H4Çk‹Í‘¤¸Y$ý9±Y$a’½&gΜ,�K8{ü��«Ú÷°8ùJΉªï^’™þǵUõßßVñÃf»"˜KjVn|á Çö©î®;‹~ôÒÈ™ÌeËsò'’~©Hx�öí» Òáa‡¡ÓU‡¦ÃÆNk�Û]FÈ•rÂiƒþ±Û5$ÃK yÀf…ØÛÕ�ØÍ½wž¬”§ä_°†Ÿ-<¶¶çèÑžu_]œ—’Âæ2s²¼Ù©ò�Üy/žÎËWä¿‘ø˜Gö× +‘0'áfîÀð:³£NÛj>ÄÚ1T—à·¹ ÉQÄŒ"lÅ0\S¸™0S”@•“`³†�–2ÇŒBoÊâå_ø¾V}îâ;?ØØ#÷7lÞÜÔ´ys¾.ÿyìDE%ËfnÉ2Êd˱áác”¾6_]¤ˆ€•�8£Óä8 Γ­:Ñô°[S¤ÓÆt³+Â%%Gwct¯‚³þf\ÑU ç�çMçÍç�ç#xÙ-ùeùÁæŒUïN.ªrÔˆ«k.î�+¿Ã¢ÿóÏÌ>¥cG«Ùö±ÐÖR½Ó�;{6ãÂ�ÂßèØ÷@þBVßÞ±k;�'½.U9Ú!;«{˜µÇÜ®c½Üf&;.­^r�e™,ñÕÕ?IRô“P®…S½L9±¤kYYNbGxŸ•ʃòeù:³^ûðßûÄïUŽNvãîÑÕ?z|4ƒ¤D†I<"uƒL0;à4êµ=Ð+ =ú6 ÌÅA¯1+K*k*Ç6æ§sûi†�¢{¨XuÊW„BÖ0)°Fy”Å0¯|Y,ŸìúQ�OÂÌÞNÑÞ ÄjuZ.qzzzµ\@ì…v½¤¥w¨¤c.)rŒÊ9(R±Ýc×f ÚM#M+“É¥ŸÆ{Š\y9Û"—²sòYù­*ù²ä˜<Ϻä{§ Ær¹ä¦%ZJk›Àá e=Ø®íÑk :Ñ%€YµGª0I5myª2Ò¾H³œdÙ^ùaõÚÊßË#^focùè'ßÝ×4ús…òZ¢¼—4l|5�è±P( Q’Æi¬óࡈÞ0«l–Hw~ø|‹6_šoÉ·ÅY/’‡*Y1d(¹‡¼”MõRt†òøOIÑ” ü棂q¿-�XQl9 äzD÷H�GëÑyôƒÏésùB}n_˜/Òå‹öÅ,Ô.Ô-Ô/4,4.´- Yh_èXèŒ(cdfü.›-ΦÞ#çí�,§ +^Œ­¹ó‘æë ~ÒI~ÂõKaM……-x}YáåŠ +Îw•¬ß5•)œßµ¾¤k*S,o_¼j íýyÚ»�ön‡Œ@˜™ÙLª³2öê™à‚\ÅÄæ8ã39¦úàcÊžf|“E‹TFDŸ|eÉê»î‘¯°¸˜¾­OÞ™JN~±þáû§v‹åƒe5o+wº’ît3­j€Pˆ Ø¥:'ÔY9[Ý:WH:ºŒÉnÕÂo°u<ãSKœ�À‚Ö +q³@¨«ß¹³~ëÎ�S½,ìƒq&ÿvüù·xäÕgžyUÉò1faóå7ä)½ÁæÓÚ}òz±ƒÖVì\^ æv;wÈÜÊÁÞ(²q~ÕÚe(–ÎïrrívSç½µç›U ÇÀ²?5Àì;dzãÓûfL«¼iêú§†%ý`E¥üùwò5ùgeìÃ[–ŽQü ânÕÒ%fêôàÀàYÐ1€ÁI:®FcÄÈÅ[Ðäí•tû!„Š»3ºW•NpÛåËÌ›òbGA[6¦¤¦.Z�ÐÐ45)–Ÿ*¯�ŠTNŸÎ!…VL„góMFÁlˆ‰Öê�>:&Ú«Ó‹zCtŒÈœ‡�î:#ß$ÖyÉ'Eë 1Xá2çj\ŽY9ÿc c ùL,3ʼ˜Ë ,�â‹’µÉºd}²!Ù˜lJ6§Ú}Ÿ3Õ•™•�“ìIŠ�Ot–±›n.FP‚Å!ßô$*Á‘"¼ºæ…Òʪ5” |íýkÕ+Þ¼·vëŠ#k�þþâæçOCvNÞÜ"?:žëýæ7ãâäæäÍ-˜’pìà±Ó1$›f:�LÞO7#3àæfz'÷€�õMŽbÅ­!æÏZñ±t>3WÃ9c{”˜AµD‹l·Ü½|ÝèG“/Ê¿¦G{¿ü½Ñ©ñ‹FŸzOGÙZs@�Êÿò6¶êY¯Q¹‰¹t%ÕÛ8Ôÿ§·ÑnS$IÜr Ì[x×]Kóµú�§ÙáÝ©’κ‡îö~2p¢¬æ"­YDûì¦5%¨x%à"gTJdÔ)hFÁËz™Dá<ã�‰> ­ôZŸFãj( ÇéhK%ÆÊ.ä븠Ž(¥�°׉$­o+ѶÝ.vË�Ë_—gÉÿq],ÿd€ÜMn%æÉ¥â£Ä“:‹ô=X$�¹Àb¶€Åd4QËd6Èh0è½&ƒÎ +Þƒ�˜ ½V³É¨×IZ‹hÉ4ø¬Äïˆê†¬7ò¹Œ+YQPÅ=q`\Žä¯öXáóžÙñÇŽ�%).y=*ð'–ÝÙÿÈÕùÍâ"2qïÐÛQC> +�‰Ä&¼¦þMXi3ðP/Ø@ ¿œi#̦i°-ÞÖæàfÖ™¶ , î ]l�Nh…z¨…:h'ŠI°’©öC¥,jU†N;½wÛ »* ‘^®XM„ŸN­EÐ@ÉC>ï&­6µWMu5ÍÙAeaê¡�Z[‰Âz¸�0¶nQ©U1=ÔVè{ˆJ•-„SItë ÏCó›iÝ +ö—tŠU* +…U„ÕDy1åšó·ð<·0׫œ¶ýfuu?ñ›¹Ÿ¡psþÍÙi·fcð¡?ýsõÿ Ÿ÷7u唄éiS…¿w Yý?ÁÍÿ ©µ1Þša b£±(J â)1˜C<1Zw1•…”,¥“`°’ƒÕÄ#ƒu°�ÊM”ØÌjzòKÑÀ +—®,!>D•×é™u‚ðI…'T´VTBÆ–ÎÖȨm­Þ Í¥lo"½øìlõû/3Œ}ø +endstream +endobj +615 0 obj +<< +/Length1 16324 +/Filter /FlateDecode +/Length 11653 +>> +stream +xœÝ{y|TEöo-wëÛ{§;�µ³4�€!d# Kš�° aß¾*‹ÃÃ/$�@D0M%2b†Q1ЀD@‰ Š ê€ý9:Å;u»ƒào|ï�÷Çû|^ßÔ½Uw9uêœSç|OÝ„B6Ø (¶ `Ä §§ì}¡~8Õ·wŸ|ÿŒP^´ ú2¼÷Ò�K = Ú±}‡?–?4cêmh¯†vþ�á)és>ý0!¼Ú#§Î›¼�ô ñÑ~Ð^Ù€�þ¿"©ÓΘ7–̹×ß‚ë{gL^´ɰ¡?@Û0cî²ék.½dDÈôB�þ9sÚäâèÂ� @¿#\Ïš ' ^šíbh·›9oñSGêe  MÜoî‚©“usBá~ã8Ñ8oòS Å�ñ×p­Œó?ò¼iQ-Y0ÞîãàÜâ… -¾÷9 ýȯ/|bÚÂÜ“G�a&Br$â²"ê¿ú1E7ÑÜí&ŠQÿ]øî…R~ürdÑ=„X´pNšMEcƒÿà9y‹:çxö=üë¥�™Œr‘¨µ ² j €ÄQØ !œÃOó«b†X MWàH?AÓ‰ ÐK:ª„�þ~ù �Þ§yQ,Z)Ù™o—çá+“¾tïR�—™mwrî„sD€ž†A�@i€%Î[à|-”qÐÞ ¥ê[ C¹íéPJ Ü‚² Êúà¹Êàùr(k¡¬ +Ü�·û,z�[h{‚ô˃4N@i£ÏÛ§‚÷ñú'PFï]Âï ^« žK�²%Àÿ/ôG|6xÓ6vìD%èt­€í¸Vö£C¨Õ yP_�Ðz<5¡µÐâ7dw]ù_D££Pì°ÇÚQ@“´£Î¨+êŽ +ÑP4 +��V޻ǭ ÎöDаàÙ‰÷îÝ»òëíØ‹ö{S–D�Œ:ÆZöOañ>ï£E±ï�ŽKîø«f¬EŽÝ‡†î3.‹­¿woh‘)ŽÞ'Fí£eŸàq_þ­‹—“;Z[��}zÉö™ÔN/‚*oÁi8ß§·v�÷ºOôÀ_á¤}±SgÆn°lpçn°LËM>HVcÇþ­ãÅžQØ�ª…ýj$`;bPÑö6dƒ½U«[´½m‡½I«÷ÛWìéÁF´ZP#Åz”{U£§ÓîR� ö²V—´{D­.hç©v†hg°w4£ŒÑÖ•ÔÏè]Fï¤ÓŸÓÛ+éO·*ÄŸýé¨pëæhñV½µZ¸Ù’ ÞMoz…–úïSÄß¡?¦ÐÿfôF¿O§7ìô»*Ú ,63Ú\ïœ÷žðm_zýZ±x½Š^+¦ÿbô›¯#Åoý:’~ÅèÕ9ô +£ÿwˆ_0ú¹ƒ^¨¢Ÿ}ê?côÓ�zñSýd%ý8—6A£)—žgô£¿«âGŒþ]¥çý�ѳ¬âÙ(ú·Pú£ïWÑ3åñ £§=µ’¾ÇèIFßeôÄv£ØÈèqF�1ú£G�ÞQ;=b  o}û­ñâÛ‡éÛ«…·{Ä·ÆÓ·¼Âa=ÄèÁ*Z_ÙS|“Ñ:8ÔÝ¡o­Œ¾^L÷Ó¿šè>}�ÑW™·•þ…ѽŒþÙFk}e�I|%�î1Ñ—w[Å—ÛÓÝVú§—’Å?­¤/%Ó?2º‹Ñ­Ù.ÖÓ�/XÄ�áô }^¥;}:yŽÑíFZ½­“XÍè¶NÔýûªhÕ³‡Å*FŸÛzö0}vµ°õi�¸u<Ýê¶0ú £›¡½ù0}ÚC+A•=é&í&;ݨ§p¢¢˜–ƒÐÊ=tƒ•®g´ŒÑRFוXÅuŒ–Xé1º–Ñ?XóÅ? §k]ý]õû•â*F¿’®tÑß1ºÂD—3ú$£K]²Ø .1Ó%õy/‹ tñQa‘�.ò +O0ú8£ ]0¸¸ ŠÎŸ×^œ?œÎkOç2:'�ÎftV:�y‡Î8L§3:�ÑbF§Nq‰S�‚,â�Ìè$F'2:aŒ^œ`¢ã‹é¸÷èXhŒµÓ1z +]d§£Éèc‘áâcét£ÃÆè£+éPF‡Øé`Fádq£ÓíiÿÂ0±6-ìe Ãh¿>ab?FûB«o1-€VÁaÚ'Œö†½³i¯|«ØËF{Õ¯W'ä÷4‹ùVš_O´zzMbO3íY��BË›g½&ê­Ç«¡•gЉyšW�½Þb¡£Ý�…îwh7F»¶§¹Œæ€€sŠi—´±ËšÍhV²]Ìb4síœ!v@3à�Áh:ܘÎh\N‹ ©4j)a´“.Tìt˜&w “í4¹žðn;Z¬bÇÚ‘³[%$=â“}î|ÄC;�\±£íMd4ÁL=¡ù¢§mg¦nFãÍf1žÑ¸Ød1n%�M¦1¨ zv1ÍhÈ6ŠÑHÐJd8�`4œÑ0F�@ÁY@CÉbh>uØ-¢#™Ú-4î ±SõÝÈûµèG¬Ò“8j€u—ÅÁÙJ´C{²’~ƒ–¾þpÓçPûçPx„âð% ¶þ—^(àtö+h-Â1xz ¿ +W@Ÿ Ð*G2 ( ¡©P)l[ÐKhÔ9gk�ÿ‹è*G-h¹†Æ@ýà·8¸¦@¸ ÝJµ¤;™÷�jÛÑv¼PÕ"A(gè²ØD’€êBSбIÜÆåÇ&ñ¸‚P´T/Ùe7Œ‚Ëm7~ §‘Áè#x~AÇÑÇéç¸Dp OÒk¨’ : ÍFgÅ&ÉŽ*e7ª”¦ãeÂ$m[ÁÇGž&áZt hN¡·¡œíÐFŒÐ2L,æÎíÐö•�½dAÐ; ÷Í„á~B̓++„�hÚO&‚dZ@3¡÷h…¸1°¡ZØ’Å�´ +èkÒÀ¤;ÚA¦ãràöHsí�²¡�hñ*Á€o$¯D‹Ä&'ø% ~0zÞC#sÉ6ÒH­´;CÒºS˜"l¾{‹?”’¤ÑÒ19Jî.Ï€­,¸ý ôVÖ+Ç”ïu¡ººgtoëÞVÛ©^µF½¡OÖO‡í}CÃÃ>ÃuãRØÂv¶»Æ»&‹)Ýô²é{s†y…ù¬EµÌ³üÉò™Õn}ÆÚ`ëm[a{3…†žãuï«…ØÌNƒÑ`r�†äޤS’òÈôŒÎ™YbZ¶c”ŸmÐIX”ÍiÆ0”Dãå4Ÿ->ÎãsUÙªe#j�e‰Æ!;).¬}¤9NQÚÛâ"£%²“ÍÑÅòEs£¿Ñòn@DÜ641�ypé½{õÖ��ÿ—öbuæ¤BÚ([LßAõþAüŽ¨ŽŽÇ˜Tbb·§;Q¹!nJšAqa‚5�dÁÚdÍæ@ÖÙYYÙÄ�k(~©ÿ€Ú¦ÁÃÍþ”}½¡<=õä_z®-躲Ïä…¹YãÆ¾÷Ü#ã:Fº-´¼õ\ZÕÌØ9ñÅ}5¯ 76¾¿þzq¿ }«^ s¾™è;¨ëš³…ç;æ4;� ­% šw±½‰Q™~E§Â]J£æPHCЕ „q-û‘.‘l0Á«I;Ðs&£Œ¨MBaª žJo¶rë²p¯&‡Ýæt'�Ìζlº¤díÚ’ßÖ­>Év•uýú+–ûõ |ü—pc3ÐtÛèÊœ®Œõ + +lz ëoNÿ…nF¨Ía'²;Ë–Ù™àqÍ .ÙšY·K—Y·æáw¯\Åïòµ¢Ý¤¿�vcEƒ½-F=Œ)Ãú¼h5<¯bS•M1¨T'Y!ƒ&(Ü,èuáFɦ¹è/ 85§ÀÅÁÏ4òÐNÅ¢({@:b¢Ç“-Z3¬!‰mÇÓsؾEl_žÎ¶çà¡‹ðPáÒ±ãSΰR¼ìÌ”ãǦžÁËXéà¬=.,¶À¼NôÚÑ‹:\#¾(S‰P”¡JÎx*è9PeÄ9â Kp®Vò~›õÚÃzã· ì]Ë+µø-�äv™üˆSÀs„yõô�h—D�$ÐÎù÷ÛDè?�oùOlŸŠSβ5x×m1¾D瑵` Ö:TCŒÀyÿðt�‹‰®õ'²ö%¸÷LʯpÜk©C»t0š-œ¹ñ5¿§±³0Îé÷ò…l;€†]ˆ¸(¿ý¾•e@¬XÖà¿qDlúyÜY³} hM�œÈ�Uoý“Îæs|aU®êvW¤‡"ãÍ®¸˜v0 cgn¹ÚÇó7R½§ œBRhŠ�"¦H)rŠ’¢KQSôy(ç‘<š'ä‰yRžœ§äéòÔ<ý4!CÔ!ú‰h"žH&ªõ;ÑN¼“줱SÜ)í”w*;u;Õ�ú×Ðkø5ò}MxM|MzM~MyM÷šúšþ:‚��#ôˆpD<"‘�(GtGÔ#ú‚ßb&Ø�(L'Jå‰ÊDïø·µ�ÇcÍW¼nH<±Zlé¯I¢¶wkgð•AY]†Éé2 dcyùÆMå图¿yóûï[ZÈ�ì¡C³» Hv°Ù)vš}ˆSqÎÆ©5ì)¶†ý�=…Ëðïñ*\𻑧4§¢¯�úâËdäÓ)nÉEA/zPa£_Szz (!Õg3=ÜL± ç²WñÐÓ8Ëÿ^­°d`}ÿ;Mµ|FnªnÐmzÔÛEyDI � ÎH�$‰ùëËFŸ½J@>‚,*ÁªËo¡í¢-~èéèQðµÁîZÞx\±ÍÕ:ÓGÇ{ çÌ,”�Õ§2³@^÷¹’„—�WýKã°Ìâ‚-«Ç¾·pÆÉÉŸcýèâ.Mµµµ'p§Ë}CVnÊïõ~Zúµ·']Ü“/¦£õ`‹ÙÀo{Ôø ñ9ÔrÝn£OŠ)�ÝåsWIÕŽW:„† jw%X\4>Æ®‹éüÃç›­šëhÓäÆÉ¡¸7Ð ‡Á˜êÎü%¸Þgš*[v°ooÎøxÆôw§ìÞ¿Ûöíå;6¯Ý0sÙÛ…°¸žÆ$ž|öoß&´;•Ù¹jãªw/Ÿ·hEûö‡bc?cÅKõ¯1V}xLˆBDdr…ŠéQi:ä²¥ÆÁ¼LÆmv6k1�'›Á)@Û*ž¸&J\~üû}U/ìùþÛgÖ®ÙÊúãC_Ý^»vËËìû™�S­Wl|f=™Îz,\ùxñîwßXÿ‚=ôlÍ޾Êa¤ÁG�¼ᯣý¡>j|ݰßâÓUÑêˆ�tJ“R#8k¿¸6°üTˆÆîXðdΠ‹ãh#+[H´k,»ÌŽã<=v× þµ#O46ž(z¥0³C\…âù¸ºC‡³Ý½2>`cz»ƒÞ׃Ć%ÖÞë�|º2ä3KȬ“iº!MvYRmÀ†Ÿgñ€™{Ò³¬–„8·5$ÀKœ¸wúÔ=4©�ĽÙ[¬–�Û}÷ÃîÞ}RLa[Ùj@1ÏB?˜¿/�Öó¿ƒ7Tâø•)>á¯*ui2„ž ƒ¦’ÆÆûʸoÁ¼œ K[G�M­O�#þ'y,)¨m½¢a˜¥BPÖ¡vÞ� eá¯0!4²�ÕÙÀ$ê¾F´Ž#ÓZŸ;Ãéõ«mÍÖòa(è(uóÆ…G Pá‹zHO®Èp—e…¤K™..£FN<¨,v>°tñ¿Ñ˜Õ�' }ôÌRv•5b/Žž°w裵Oœ8òn¯i>ÃÛW „}xW\fÖÙA…ì,¨íkŠ‰Ã›ws ãí§I� â#P™*ÁXÅ4ÀùÔ€5çÔí*TRCr÷{÷ú3¤Ã™3­ŸðU­¤øN9ٚåx +¨JUðSª¦Á¾.›ºd”­3ð|2@”¾ôûb„ô'îíÎNâÿqœÃN‚,ﮪ­Ö  ¯§4ª>oœâÑ)0e@KE$”¢ªÄ×µ$ü ã–£WÂS;Í“ÜwŠÀ�Æ@Y �J‚˜ d‘ò¥éŠÉrq™²Bg"veIDæ7%Š¥$9AÉ¥…´¯ÔWKG‰ER‘ÌnU³›‡`Ø +¹}'ILôGCî|D:Ú ›ç�’án>Ÿ³}ŠebÒd+JUÛ\F€ßœðªÀ¹tb®Á' “;�¹‹<Š“Ùò²\VÃ$`X*À…Ò(<Ï”x>Ánaç.Çß>~1叨t7CøàN’ðÁÝ ðdK`¾ŽkËN½!:Ÿ™úUæê0”nÈ’Òm™aSm0"·efB¨Óõ¥Û«KK«·—~ôSkë­Ÿü�\_Ã…8‚}ÍÞdõìkŽ Ùr¶2²2\ŠW³ÕÐ;÷jK4?‚’¼aØg�”¬ÌfQ" 1ÝØÅŠ\º {`F©%gø�à"püW^¯x~ÇF6¸ƒ »w÷úi1¥õìÖ’’-»¯|~ñŸ­{xô¯ä_�@�!�³Íöv�@LUÉC*z�æKrPÁáÓ°/Ó ¢5T'Q•ZQ”‰ªáé‚5Í®º ©Ñ§ÈY²æXƒëhÝ8k|õ±-†ó©g +.™…†:µ•W·–mhÑýA�Ûƒç;óÙþA+¦¾s×ÜÂÒ‹­^ܼÉ÷4yǾ`7›‰—½8¾u½Øôåß·&£[oüaÝšõÁxØt—ˆþËÛÝh &½ÇãRtDV=11®|UãuûËa>+~½,øu¦;,íïo4ý#9ù“ÂÞëW,\žÒPóÞ'ÂØS@�»@�2Šòš¤€3É…x•+ò·Z"ßÍ‚ÀS„E,ù Kïz§‰çméu×2º^§™Ú�€u¾°j .s™]Ö4ÕußöÁgsQ„À|²óµâÀŠf&oòtœ�4!a˃9vÙÈQOÅ™ §s +òkgϪíÕ'—t§Ûü†yãûvëÖ5|Ü\zË?ó«wòºæævíq‚sDئeB½0Ï„�GÄH‚ÈRC”ùHÄ( FŒD’"¦òÌÈX@xÀÜ”ïÚ ãèxÇ8ƒÌÄϱ7Ù€sµb8¦¦àwgÚ<0 ËÞÞUtªNPuTÕ«àžôz˜²"ÜE&J È€=È�¯BàQ¨ÞV1èU�ø°I/£”àK·û~öa†à¨¹[™{_…û³07¢ 14FˆQùšR’Ê—³º¨cÈQïÔ'�G %|Dl¯$é<úC&É¥™B®ØUÉÕuÖgF x )¢£„‘âXi¬ÝˆûL#Æ›óv σYâ‹8|;;,Mgeø©à†[XÁñ-šï}x°ëë«ÿüþÝÿ„×m™ptìôÃEå'º'Ä’ŒÇN[øÑ¡[×ì.žøÎ®ÃÇ¢×-Ëê\Ÿ˜8lXú�Þ�‘‚ž`¤Q(ÕfÐÑ +³®ÂQmnˆ|.Ùl}à ’Q #KO,Ij±×Ê—!Úrwàk«4ÚRiB"7ZUV²nÆu%e­W:>7ýô¿®�)®îT_OR>¾ðyÓù/.�§†þž}ËNŒ¾‘¿¬Æè8ðãɇ£o„¡ÜxÔ‚ÊÃ�†VPK…®�§U6’ +",-�mY•…µðÕ„ÿÒÛä(xú??ŒùÙçØƒ…G·.Ü2þ/‡ï�´­gNRî‚í°uy¤ã;=sÿñáÙË]{p¹¬>lÿS“‹ˆì&{…RmjÀÏQ§¨´¯Õ¦ïÇåÂþ°\8@×4À#¡¾¤cêë;UŸ¹výô´íÌ\VRR^^RRFÏ‘^?7o> +wÅlÅÙ£˜þã _œoúüB?E ðÓÇ›™ VËu¥Ð:,Uñ;á! ÆêhJ¢,ºP FÙ,AÞ¯%¹¨®rS´´ÜÐ’˜7Aù8Ú$ +”F&ù¯yµèè¼YÇDz»ìŽýáãŸê…Íe%{-dÂéÍ÷ºä¼ ÂËÁ!Ø€½ìË»^Ù·ƒëµiØ­YC9ڛīÚ•æ„ȃ³_S^_Ÿ¶gÑŸ_!u­ýI�oÓ›n-•ì­/Mšª}ì¾úë ýé�uò†+uÈШ>‡ŽI¤N õX¢ªle] ¼/ƒ(\غŸ.â ‡ðü'xž>žÇ.ã˜úza’?¥²’æ“^|Ñ b#©ú1"+êâ�V+\G-�¦çè1å¸M¯1 ’ ^66MVë,0§Díåœ] +¬çkŸt±ãøæëb×ÇÀ”²Ó¯*ïVÿhÇJéO׸4›atû5Ïv›«8ÙªSpá„Øé”!;�"8Ý’Øcè¹`«Ã’Ôõ1€¼›ÓÛ²¶«Î‡ƒ(ü mpBËjeŽ!†IDQBI˜¦d’Îb–R@¦“%d©ÎUQÂÁ{„‰áR„¦´§‰b{¹+í*d‹9r¶ÒŸÊ£¥Ñò:K˜%Í’—ѧÄeÒ29êW¹ms¾òÖ³ËlÊúÉî_�ϱ1­$ ˃±×ÀØU)$žY¢j�á­°!I?PÇß'ûß,i)žö…ˆ" 3Y5vô'×þôû _ÂU¿ûýŽóÇèÏOÝyü�̳xôGob˜Í¬d)ÉCE,mˆ<n‘‘Õ¬ ’[™G… ŠèãæA×Aת݈{G»ŒöwóÀ j·«-Ú‹þˆ×Û7UHS¥T9UIÕ¥ª©ú¼Ð8=~™'í"y)~VÿÒ{2 †vݓӿ0çå—ã¦æ œFoôësŽ]j}’¬ùnÑŠ¯ZW‘5?,äGaÒ¤ny÷g+Èâ׳õØž­Wÿãluüf«0iŸ¬D{WÖOópZf,UØP…�#�ÍÜ›Ú=Â4gÿKfüÀ‚_a’™O?]±ñé§7^ûéÖõk·nÑK>núüó¦�/ì`gÿ‹ú'ãìÂ�øÜm`#…Ð/�ƒÞ¨ûq°ÁT��ÓcÑûjÑð„óö~(ôÜe<„žSƒî˜¬JRÀ§5jkmÀÂù÷¹¡§z=dÁk,ŠÅ±ÖT”Š3,©V/òâ^¯u(ЇZ†Zmãq¯,Å)¬íº¼poÈíÈÚÞK³è²N�|ú~ëG¤ϟ\ߎÛeXŠÜ$¢%^¯–‡;ƒi¸òñühW˜–‰;P9>*ØËGÃ*¬B…§Rñè@*>$R2Ê’=¾Oû@ˆ|(·°›o?çz o[\øUâ-=˜x§�¶·Uôƒ!5ÃW®÷fÿõ›ÿ>¼nöŒ·F,_wSé³ó™ §Çìrtêôèðýݦˆ+wv»23§Ž^�FL1[V½øZŒt-È]_€˜æ 3‰ +dÈŠ�)uª¢×0J‹Íô0ÒhnéÖ¨}ðüâã!¯g%Óñ.6aÂ’³—ÏÖr¨!¾ÀŽU¶ÖünÊ–ÝgȤJÜ#ˆO#… ¿šõÕ*>fà3¾?L}mÖVWƒ™z[ªÎEp&¯Ÿ³ðL{åñ½{ð>íù¤'ËîîÚ3¹ø2×e1Œpž0 rñiÞ7 ñsò?ˆa’°!‰çÇ ¸ñÕF¡õ‘¡{gWýFÊ·?‘ðF_0Q¨""ñÂ×µ\Ð]|÷ÁGØßA$A÷Þ­iËÑ�¶zûè!lª:•¯|êU`KÅàhA£„p1J©Fèc (w b©ƒìV:rH–˜#åÈJ7C¥PW ïo©éFéG¦“Ytº0Kœ­›¦_J–‹O)¿Ó=¡O6«á„/„‹1jŒšD’Ĥ‡ØMí§ŽVg“YâLuYE— «„åâïÔUjÈ­-§Ç<§¯;^óü®ãuìξ×÷ï>Iò[èú»5dzëv®Õ� É�¤½âíD–�2?@ +O0u�ÿêNuêTÌzd«s‚dóUYÀ‚'Á)T$ŽSý�Aœr5Ýù5ÿ,AÖäé´#Odzä¥x™,ÉxQj®ÐY#ŒT¡Ž¸µD D˜Ààú&VÏ6áz¶à}Ü' +“ZÿÕZ�ßay¤ csð³|¤3!z¬�‘ÚP�·�Ñi2r³Ñ��#.«ÓxÏi¶ ~°ZŒ&£Ùi2ó-!FdÒUÈÇ­¦c!V‹ÙÈWölŠ­ÐÔ'„'Ø�/?´¹•óÐòæÃ#Õ–5XÖŦ½¡,K-D±*¶pC¸1Á”`îb-´ÚFU¾^(É„¯�ið2›�p}§¾Sã;m·uÞ£ãú²!Çñ@Ü÷8ž¹ä»�;xðö �Â`ÿV:—�ô èÔ"L,]ä�¢|&(NÂQe:ÈK¡HÀ…Hê£r�\hþõGû»(œQGí¢ô¡ý•Q´H™Fg+KèrEÏ?1à Ç]¡É­+ÉZÿa²¶õYaÊÿUµÔ\\dûi `Þvhº73ÜìÐK]„Å­cã(Ò×éP~WwÒQò†Ç SÅv¡á(ZCˆņwWÍ¢çwX; +~Ôjñ²[ðúmlò ©¢æ=ùÌF[¨äp�—¬<ÐÓïϯ̩èÑcãìW~öT<6vþ‚1�U4<½õâ÷¾Å•OTýpqKå¨M·Ÿß¹iÇíÊ‘‹& RtðÛÉ7øvÒÿ~ðÛɽRômþ¿®�{¶7;Æj0+‘zG¸Yc) +¯‹Duîw#Ošë¬ox¢Â#fþ~=Âá¶ ("ÆÑÝ‚ô‚6òt¾^hûí±RÃÀøS�ÁóMÛ$ð} ¸Ý{o9fÁü±#7öîñóž9½Þ�söüÜ£¡hãí›"Ã7={cQå–‹?T=Q¹Ø÷ýÅ­�ïóe4†ÿ7¨ ƒzƒöÿ¡¼ŽQ,´u#ÿ2X§œ¨‹( }¬K€–ê… …hzÍB3ÐL´în�¦BÖ‹Òà”µ)pG,ʇ{£EPž@ÓÐdÀþál!š÷w‚ZO4¶X4ì>­EZk§Á3Ka_ wª¨7Ôf…‘h Ü1î� TfhwÆB�Ó�*óa¿î™tgÁ}±ðüèw²ví×t†kT8…Ap×|(ùP 9p�÷¿žZ ÑL.2PöCÏ·=Ýö, þÞ§h̯ÿ:øã'÷îiwj×/”.¨ÔŽÁÿãÖŽüŠáþ\7.Mo±°oÄ/e¢\Øwƒ £ˆ# @°ÏG“4¼¨ 3xºwÁÀз ñw/H;p½<#i×&?1y +J�ºì‰¹(uÆÓæ Ô¹“Äòýâù ×‡ŸÖ~ÿ ëmZD +endstream +endobj +616 0 obj +<< +/Type /FontDescriptor +/FontName /ICOIPK+DejaVuSans +/FontFamily (DejaVu Sans) +/Flags 4 +/FontBBox [ 0 -14 472 560 ] +/ItalicAngle 0 +/Ascent 928 +/Descent -235 +/CapHeight 560 +/StemV 80 +/StemH 80 +/FontFile2 612 0 R +>> +endobj +617 0 obj +<< +/Type /Font +/Subtype /CIDFontType2 +/BaseFont /ICOIPK+DejaVuSans +/CIDSystemInfo << +/Registry (Adobe) +/Ordering (Identity) +/Supplement 0 +>> +/W [ 3 [ 317 ] 17 [ 317 ] 20 [ 636 ] 25 [ 636 ] 37 [ 686 698 ] 42 [ 774 751 294 ] 54 [ 634 ] 68 [ 612 ] 70 [ 549 634 615 ] 74 [ 634 633 277 ] 78 [ 579 ] 80 [ 974 633 611 ] 85 [ 411 520 392 633 591 817 ] ] +/FontDescriptor 616 0 R +>> +endobj +618 0 obj +<< +/Length 702 +>> +stream +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo +<< /Registry (Adobe) +/Ordering (UCS) +/Supplement 0 +>> def +/CMapName /Adobe-Identity-UCS def +/CMapType 2 def +1 begincodespacerange +<0000> +endcodespacerange +27 beginbfchar +<002b> <0048> +<0044> <0061> +<0055> <0072> +<0047> <0064> +<0048> <0065> +<0051> <006e> +<004c> <0069> +<004a> <0067> +<0003> <0020> +<002a> <0047> +<0058> <0075> +<005a> <0077> +<0057> <0074> +<004b> <0068> +<0026> <0043> +<002c> <0049> +<0036> <0053> +<0059> <0076> +<0014> <0031> +<0011> <002e> +<0019> <0036> +<0025> <0042> +<0046> <0063> +<0050> <006d> +<004e> <006b> +<0052> <006f> +<0056> <0073> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +endstream +endobj +619 0 obj +<< +/Type /Font +/Subtype /Type0 +/BaseFont /ICOIPK+DejaVuSans +/Encoding /Identity-H +/DescendantFonts [ 617 0 R ] +/ToUnicode 618 0 R +>> +endobj +620 0 obj +<< +/Type /FontDescriptor +/FontName /TGPMTG+Poppins +/FontFamily (Poppins) +/Flags 4 +/FontBBox [ -27 -260 122 795 ] +/ItalicAngle 0 +/Ascent 1049 +/Descent -349 +/CapHeight 795 +/StemV 80 +/StemH 80 +/FontFile2 613 0 R +>> +endobj +621 0 obj +<< +/Type /Font +/Subtype /CIDFontType2 +/BaseFont /TGPMTG+Poppins +/CIDSystemInfo << +/Registry (Adobe) +/Ordering (Identity) +/Supplement 0 +>> +/W [ 3 [ 266 ] 10 [ 158 453 453 ] 15 [ 197 550 209 ] 19 [ 627 319 574 588 628 627 634 545 630 629 212 ] 36 [ 673 612 771 706 512 503 777 691 245 ] 46 [ 598 431 ] 49 [ 702 785 578 ] 53 [ 607 586 540 674 675 975 ] 68 [ 675 675 606 675 619 328 675 639 245 247 514 245 1029 639 639 675 675 372 521 363 639 560 819 478 562 ] 206 [ 379 379 ] 209 [ 411 ] ] +/FontDescriptor 620 0 R +>> +endobj +622 0 obj +<< +/Length 1248 +>> +stream +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo +<< /Registry (Adobe) +/Ordering (UCS) +/Supplement 0 +>> def +/CMapName /Adobe-Identity-UCS def +/CMapType 2 def +1 begincodespacerange +<0000> +endcodespacerange +66 beginbfchar +<002b> <0048> +<0044> <0061> +<0055> <0072> +<0047> <0064> +<0048> <0065> +<0051> <006e> +<004c> <0069> +<004a> <0067> +<0003> <0020> +<002a> <0047> +<0058> <0075> +<005a> <0077> +<0057> <0074> +<004b> <0068> +<0026> <0043> +<002c> <0049> +<0036> <0053> +<0059> <0076> +<0014> <0031> +<0011> <002e> +<0019> <0036> +<0025> <0042> +<0046> <0063> +<0050> <006d> +<004e> <006b> +<0016> <0033> +<0017> <0034> +<0018> <0035> +<001a> <0037> +<0015> <0032> +<0013> <0030> +<0032> <004f> +<0052> <006f> +<0049> <0066> +<002e> <004b> +<004f> <006c> +<0035> <0052> +<0033> <0050> +<0056> <0073> +<0053> <0070> +<0024> <0041> +<0031> <004e> +<005c> <0079> +<0028> <0045> +<0037> <0054> +<0010> <002d> +<0045> <0062> +<0054> <0071> +<000b> <0028> +<000c> <0029> +<000f> <002c> +<001d> <003a> +<0039> <0056> +<001b> <0038> +<001c> <0039> +<0027> <0044> +<0029> <0046> +<00d1> <2022> +<005b> <0078> +<003a> <0057> +<0038> <0055> +<00ce> <201c> +<00cf> <201d> +<004d> <006a> +<002f> <004c> +<000a> <0027> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +endstream +endobj +623 0 obj +<< +/Type /Font +/Subtype /Type0 +/BaseFont /TGPMTG+Poppins +/Encoding /Identity-H +/DescendantFonts [ 621 0 R ] +/ToUnicode 622 0 R +>> +endobj +624 0 obj +<< +/Type /FontDescriptor +/FontName /WKJFDI+DejaVuSansMono +/FontFamily (DejaVu Sans Mono) +/Flags 5 +/FontBBox [ 0 -14 584 759 ] +/ItalicAngle 0 +/Ascent 928 +/Descent -235 +/CapHeight 759 +/StemV 80 +/StemH 80 +/FontFile2 614 0 R +>> +endobj +625 0 obj +<< +/Type /Font +/Subtype /CIDFontType2 +/BaseFont /WKJFDI+DejaVuSansMono +/CIDSystemInfo << +/Registry (Adobe) +/Ordering (Identity) +/Supplement 0 +>> +/W [ 16 [ 601 601 ] 29 [ 601 ] 36 [ 601 ] 54 [ 601 601 ] 66 [ 601 ] 68 [ 601 ] 70 [ 601 601 601 601 ] 76 [ 601 ] 78 [ 601 601 601 601 601 601 ] 85 [ 601 601 601 601 601 ] 92 [ 601 ] ] +/FontDescriptor 624 0 R +>> +endobj +626 0 obj +<< +/Length 674 +>> +stream +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo +<< /Registry (Adobe) +/Ordering (UCS) +/Supplement 0 +>> def +/CMapName /Adobe-Identity-UCS def +/CMapType 2 def +1 begincodespacerange +<0000> +endcodespacerange +25 beginbfchar +<0048> <0065> +<0057> <0074> +<0046> <0063> +<0047> <0064> +<0049> <0066> +<0044> <0061> +<0058> <0075> +<004f> <006c> +<0056> <0073> +<0055> <0072> +<0011> <002e> +<005c> <0079> +<0050> <006d> +<0042> <005f> +<0053> <0070> +<0052> <006f> +<004c> <0069> +<001d> <003a> +<0010> <002d> +<0051> <006e> +<0036> <0053> +<0059> <0076> +<0024> <0041> +<0037> <0054> +<004e> <006b> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +endstream +endobj +627 0 obj +<< +/Type /Font +/Subtype /Type0 +/BaseFont /WKJFDI+DejaVuSansMono +/Encoding /Identity-H +/DescendantFonts [ 625 0 R ] +/ToUnicode 626 0 R +>> +endobj +628 0 obj +<< +/Type /FontDescriptor +/FontName /TGTVMX+DejaVuSansMono +/FontFamily (DejaVu Sans Mono) +/Flags 4 +/FontBBox [ 0 -235 585 699 ] +/ItalicAngle 0 +/Ascent 928 +/Descent -235 +/CapHeight 699 +/StemV 80 +/StemH 80 +/FontFile2 615 0 R +>> +endobj +629 0 obj +<< +/Type /Font +/Subtype /CIDFontType2 +/BaseFont /TGTVMX+DejaVuSansMono +/CIDSystemInfo << +/Registry (Adobe) +/Ordering (Identity) +/Supplement 0 +>> +/W [ 3 [ 601 602 602 602 602 602 602 602 602 602 602 601 602 601 601 601 601 602 602 601 601 602 602 602 602 601 602 602 ] 32 [ 602 ] 36 [ 602 602 602 602 602 602 602 602 602 ] 46 [ 602 602 602 601 602 601 ] 53 [ 602 602 602 602 602 602 ] 60 [ 602 ] 62 [ 602 ] 64 [ 602 ] 66 [ 602 602 602 601 601 601 601 601 602 602 602 602 601 601 602 601 601 602 602 602 601 601 601 602 601 602 601 602 602 602 602 ] ] +/FontDescriptor 628 0 R +>> +endobj +630 0 obj +<< +/Length 1500 +>> +stream +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo +<< /Registry (Adobe) +/Ordering (UCS) +/Supplement 0 +>> def +/CMapName /Adobe-Identity-UCS def +/CMapType 2 def +1 begincodespacerange +<0000> +endcodespacerange +84 beginbfchar +<0056> <0073> +<005c> <0079> +<0046> <0063> +<0057> <0074> +<004f> <006c> +<0012> <002f> +<0048> <0065> +<0011> <002e> +<0047> <0064> +<001c> <0039> +<0013> <0030> +<0010> <002d> +<004e> <006b> +<0058> <0075> +<0045> <0062> +<0052> <006f> +<0051> <006e> +<0049> <0066> +<0059> <0076> +<0050> <006d> +<0055> <0072> +<004c> <0069> +<0042> <005f> +<0020> <003d> +<0014> <0031> +<0053> <0070> +<0044> <0061> +<005b> <0078> +<0015> <0032> +<0018> <0035> +<0003> <0020> +<0016> <0033> +<0017> <0034> +<004a> <0067> +<0005> <0022> +<004b> <0068> +<001d> <003a> +<0036> <0053> +<0024> <0041> +<0037> <0054> +<0039> <0056> +<000e> <002b> +<0006> <0023> +<0004> <0021> +<0007> <0024> +<000b> <0028> +<004d> <006a> +<005e> <007b> +<003e> <005b> +<000d> <002a> +<0040> <005d> +<000a> <0027> +<0060> <007d> +<000c> <0029> +<001e> <003b> +<005a> <0077> +<0031> <004e> +<0033> <0050> +<001b> <0038> +<002c> <0049> +<0028> <0045> +<002e> <004b> +<000f> <002c> +<0035> <0052> +<0054> <0071> +<0027> <0044> +<0026> <0043> +<002f> <004c> +<002b> <0048> +<003a> <0057> +<002a> <0047> +<0030> <004d> +<0019> <0036> +<0032> <004f> +<003c> <0059> +<001a> <0037> +<005f> <007c> +<0038> <0055> +<0009> <0026> +<0029> <0046> +<005d> <007a> +<0025> <0042> +<0043> <0060> +<0008> <0025> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +endstream +endobj +631 0 obj +<< +/Type /Font +/Subtype /Type0 +/BaseFont /TGTVMX+DejaVuSansMono +/Encoding /Identity-H +/DescendantFonts [ 629 0 R ] +/ToUnicode 630 0 R +>> +endobj +632 0 obj +<< +/ICOIPK 619 0 R +/TGPMTG 623 0 R +/WKJFDI 627 0 R +/TGTVMX 631 0 R +>> +endobj +xref +0 633 +0000000000 65535 f +0000000015 00000 n +0000000235 00000 n +0000000351 00000 n +0000027525 00000 n +0000027658 00000 n +0000030309 00000 n +0000030508 00000 n +0000034100 00000 n +0000034450 00000 n +0000034584 00000 n +0000034720 00000 n +0000034882 00000 n +0000035045 00000 n +0000035201 00000 n +0000035358 00000 n +0000035515 00000 n +0000035675 00000 n +0000035836 00000 n +0000035997 00000 n +0000036148 00000 n +0000036300 00000 n +0000036475 00000 n +0000036651 00000 n +0000036827 00000 n +0000036999 00000 n +0000037172 00000 n +0000037344 00000 n +0000037517 00000 n +0000037690 00000 n +0000042711 00000 n +0000043015 00000 n +0000043265 00000 n +0000043401 00000 n +0000043564 00000 n +0000043721 00000 n +0000043878 00000 n +0000044039 00000 n +0000044200 00000 n +0000044352 00000 n +0000044525 00000 n +0000044698 00000 n +0000044871 00000 n +0000045133 00000 n +0000045393 00000 n +0000050574 00000 n +0000050829 00000 n +0000051084 00000 n +0000051217 00000 n +0000051348 00000 n +0000051479 00000 n +0000051610 00000 n +0000051741 00000 n +0000056745 00000 n +0000057042 00000 n +0000057175 00000 n +0000057306 00000 n +0000057439 00000 n +0000057570 00000 n +0000057701 00000 n +0000057832 00000 n +0000057965 00000 n +0000058098 00000 n +0000058229 00000 n +0000058360 00000 n +0000058491 00000 n +0000058622 00000 n +0000063591 00000 n +0000063860 00000 n +0000063993 00000 n +0000064124 00000 n +0000064255 00000 n +0000064386 00000 n +0000064517 00000 n +0000064713 00000 n +0000064972 00000 n +0000065203 00000 n +0000070823 00000 n +0000071176 00000 n +0000071309 00000 n +0000071440 00000 n +0000071571 00000 n +0000071702 00000 n +0000071833 00000 n +0000071964 00000 n +0000072095 00000 n +0000072226 00000 n +0000072357 00000 n +0000072489 00000 n +0000072621 00000 n +0000072753 00000 n +0000072885 00000 n +0000073017 00000 n +0000073150 00000 n +0000073281 00000 n +0000073412 00000 n +0000073543 00000 n +0000073674 00000 n +0000073903 00000 n +0000079315 00000 n +0000079752 00000 n +0000079990 00000 n +0000080124 00000 n +0000080256 00000 n +0000080388 00000 n +0000080520 00000 n +0000080652 00000 n +0000080784 00000 n +0000080916 00000 n +0000081048 00000 n +0000081180 00000 n +0000081313 00000 n +0000081446 00000 n +0000081579 00000 n +0000081712 00000 n +0000081845 00000 n +0000081978 00000 n +0000082111 00000 n +0000082244 00000 n +0000082377 00000 n +0000082510 00000 n +0000082643 00000 n +0000082776 00000 n +0000082909 00000 n +0000083042 00000 n +0000083175 00000 n +0000083308 00000 n +0000083441 00000 n +0000083573 00000 n +0000088687 00000 n +0000089166 00000 n +0000089299 00000 n +0000089432 00000 n +0000089565 00000 n +0000089698 00000 n +0000089831 00000 n +0000089964 00000 n +0000090097 00000 n +0000090230 00000 n +0000090363 00000 n +0000090496 00000 n +0000090629 00000 n +0000090762 00000 n +0000090895 00000 n +0000091028 00000 n +0000091161 00000 n +0000091294 00000 n +0000091427 00000 n +0000091560 00000 n +0000091693 00000 n +0000091826 00000 n +0000091959 00000 n +0000092092 00000 n +0000092225 00000 n +0000092358 00000 n +0000092491 00000 n +0000092624 00000 n +0000092757 00000 n +0000092890 00000 n +0000093023 00000 n +0000093156 00000 n +0000093289 00000 n +0000093421 00000 n +0000093552 00000 n +0000098511 00000 n +0000098950 00000 n +0000099083 00000 n +0000099216 00000 n +0000099349 00000 n +0000099482 00000 n +0000099615 00000 n +0000099748 00000 n +0000099881 00000 n +0000100014 00000 n +0000100147 00000 n +0000100280 00000 n +0000100413 00000 n +0000100546 00000 n +0000100679 00000 n +0000100812 00000 n +0000100945 00000 n +0000101078 00000 n +0000101211 00000 n +0000101344 00000 n +0000101477 00000 n +0000101610 00000 n +0000101743 00000 n +0000101876 00000 n +0000102009 00000 n +0000102142 00000 n +0000102275 00000 n +0000102408 00000 n +0000102540 00000 n +0000102671 00000 n +0000107769 00000 n +0000108272 00000 n +0000108405 00000 n +0000108538 00000 n +0000108671 00000 n +0000108804 00000 n +0000108937 00000 n +0000109070 00000 n +0000109203 00000 n +0000109336 00000 n +0000109469 00000 n +0000109602 00000 n +0000109735 00000 n +0000109869 00000 n +0000110003 00000 n +0000110137 00000 n +0000110271 00000 n +0000110405 00000 n +0000110539 00000 n +0000110673 00000 n +0000110807 00000 n +0000110941 00000 n +0000111075 00000 n +0000111209 00000 n +0000111343 00000 n +0000111477 00000 n +0000111611 00000 n +0000111745 00000 n +0000111879 00000 n +0000112013 00000 n +0000112147 00000 n +0000112281 00000 n +0000112415 00000 n +0000112549 00000 n +0000112683 00000 n +0000112817 00000 n +0000112950 00000 n +0000113082 00000 n +0000117606 00000 n +0000118109 00000 n +0000118243 00000 n +0000118377 00000 n +0000118511 00000 n +0000118645 00000 n +0000118779 00000 n +0000118913 00000 n +0000119047 00000 n +0000119181 00000 n +0000119315 00000 n +0000119449 00000 n +0000119583 00000 n +0000119717 00000 n +0000119851 00000 n +0000119985 00000 n +0000120119 00000 n +0000120253 00000 n +0000120387 00000 n +0000120521 00000 n +0000120655 00000 n +0000120789 00000 n +0000120923 00000 n +0000121057 00000 n +0000121191 00000 n +0000121325 00000 n +0000121459 00000 n +0000121593 00000 n +0000121727 00000 n +0000121861 00000 n +0000121995 00000 n +0000122129 00000 n +0000122263 00000 n +0000122397 00000 n +0000122531 00000 n +0000122665 00000 n +0000122798 00000 n +0000122930 00000 n +0000127159 00000 n +0000127678 00000 n +0000127812 00000 n +0000127946 00000 n +0000128080 00000 n +0000128214 00000 n +0000128348 00000 n +0000128482 00000 n +0000128616 00000 n +0000128750 00000 n +0000128884 00000 n +0000129018 00000 n +0000129152 00000 n +0000129286 00000 n +0000129420 00000 n +0000129554 00000 n +0000129688 00000 n +0000129822 00000 n +0000129956 00000 n +0000130090 00000 n +0000130224 00000 n +0000130358 00000 n +0000130492 00000 n +0000130626 00000 n +0000130760 00000 n +0000130894 00000 n +0000131028 00000 n +0000131162 00000 n +0000131296 00000 n +0000131430 00000 n +0000131564 00000 n +0000131698 00000 n +0000131832 00000 n +0000131966 00000 n +0000132100 00000 n +0000132234 00000 n +0000132368 00000 n +0000132502 00000 n +0000132635 00000 n +0000132767 00000 n +0000137769 00000 n +0000138288 00000 n +0000138422 00000 n +0000138556 00000 n +0000138690 00000 n +0000138824 00000 n +0000138958 00000 n +0000139092 00000 n +0000139226 00000 n +0000139360 00000 n +0000139494 00000 n +0000139628 00000 n +0000139762 00000 n +0000139896 00000 n +0000140030 00000 n +0000140164 00000 n +0000140298 00000 n +0000140432 00000 n +0000140566 00000 n +0000140700 00000 n +0000140834 00000 n +0000140968 00000 n +0000141102 00000 n +0000141236 00000 n +0000141370 00000 n +0000141504 00000 n +0000141638 00000 n +0000141772 00000 n +0000141906 00000 n +0000142040 00000 n +0000142174 00000 n +0000142308 00000 n +0000142442 00000 n +0000142576 00000 n +0000142710 00000 n +0000142844 00000 n +0000142978 00000 n +0000143112 00000 n +0000143245 00000 n +0000143377 00000 n +0000148406 00000 n +0000148925 00000 n +0000149059 00000 n +0000149193 00000 n +0000149327 00000 n +0000149461 00000 n +0000149595 00000 n +0000149729 00000 n +0000149863 00000 n +0000149997 00000 n +0000150131 00000 n +0000150265 00000 n +0000150399 00000 n +0000150533 00000 n +0000150667 00000 n +0000150801 00000 n +0000150935 00000 n +0000151069 00000 n +0000151203 00000 n +0000151337 00000 n +0000151471 00000 n +0000151605 00000 n +0000151739 00000 n +0000151873 00000 n +0000152007 00000 n +0000152141 00000 n +0000152275 00000 n +0000152409 00000 n +0000152543 00000 n +0000152677 00000 n +0000152811 00000 n +0000152945 00000 n +0000153079 00000 n +0000153213 00000 n +0000153347 00000 n +0000153481 00000 n +0000153615 00000 n +0000153749 00000 n +0000153882 00000 n +0000154014 00000 n +0000159201 00000 n +0000159680 00000 n +0000159814 00000 n +0000159948 00000 n +0000160082 00000 n +0000160216 00000 n +0000160350 00000 n +0000160484 00000 n +0000160618 00000 n +0000160752 00000 n +0000160886 00000 n +0000161020 00000 n +0000161154 00000 n +0000161288 00000 n +0000161422 00000 n +0000161556 00000 n +0000161786 00000 n +0000161921 00000 n +0000162054 00000 n +0000162187 00000 n +0000162320 00000 n +0000162453 00000 n +0000162586 00000 n +0000162719 00000 n +0000162852 00000 n +0000162985 00000 n +0000163119 00000 n +0000163253 00000 n +0000163387 00000 n +0000163521 00000 n +0000163655 00000 n +0000163789 00000 n +0000163923 00000 n +0000164056 00000 n +0000164188 00000 n +0000169046 00000 n +0000169557 00000 n +0000169691 00000 n +0000169825 00000 n +0000169959 00000 n +0000170093 00000 n +0000170227 00000 n +0000170361 00000 n +0000170495 00000 n +0000170629 00000 n +0000170763 00000 n +0000170897 00000 n +0000171031 00000 n +0000171165 00000 n +0000171299 00000 n +0000171433 00000 n +0000171567 00000 n +0000171701 00000 n +0000171835 00000 n +0000171969 00000 n +0000172103 00000 n +0000172237 00000 n +0000172371 00000 n +0000172505 00000 n +0000172639 00000 n +0000172773 00000 n +0000172907 00000 n +0000173041 00000 n +0000173175 00000 n +0000173309 00000 n +0000173443 00000 n +0000173577 00000 n +0000173711 00000 n +0000173845 00000 n +0000173979 00000 n +0000174113 00000 n +0000174247 00000 n +0000174380 00000 n +0000174512 00000 n +0000179215 00000 n +0000179694 00000 n +0000179828 00000 n +0000179962 00000 n +0000180096 00000 n +0000180230 00000 n +0000180364 00000 n +0000180498 00000 n +0000180632 00000 n +0000180766 00000 n +0000180900 00000 n +0000181034 00000 n +0000181168 00000 n +0000181302 00000 n +0000181436 00000 n +0000181570 00000 n +0000181704 00000 n +0000181838 00000 n +0000181972 00000 n +0000182106 00000 n +0000182240 00000 n +0000182374 00000 n +0000182508 00000 n +0000182642 00000 n +0000182776 00000 n +0000182910 00000 n +0000183044 00000 n +0000183178 00000 n +0000183312 00000 n +0000183446 00000 n +0000183580 00000 n +0000183714 00000 n +0000183848 00000 n +0000183981 00000 n +0000184113 00000 n +0000189306 00000 n +0000189785 00000 n +0000189919 00000 n +0000190053 00000 n +0000190187 00000 n +0000190321 00000 n +0000190455 00000 n +0000190589 00000 n +0000190723 00000 n +0000190857 00000 n +0000190991 00000 n +0000191125 00000 n +0000191259 00000 n +0000191394 00000 n +0000191529 00000 n +0000191664 00000 n +0000191799 00000 n +0000191934 00000 n +0000192069 00000 n +0000192204 00000 n +0000192339 00000 n +0000192474 00000 n +0000192609 00000 n +0000192744 00000 n +0000192879 00000 n +0000193014 00000 n +0000193149 00000 n +0000193284 00000 n +0000193419 00000 n +0000193554 00000 n +0000193689 00000 n +0000193824 00000 n +0000193959 00000 n +0000194093 00000 n +0000194226 00000 n +0000199366 00000 n +0000199749 00000 n +0000199884 00000 n +0000200019 00000 n +0000200154 00000 n +0000200289 00000 n +0000200424 00000 n +0000200559 00000 n +0000200694 00000 n +0000200829 00000 n +0000200964 00000 n +0000201097 00000 n +0000201230 00000 n +0000201363 00000 n +0000201496 00000 n +0000201629 00000 n +0000201762 00000 n +0000201895 00000 n +0000202028 00000 n +0000202162 00000 n +0000202296 00000 n +0000202430 00000 n +0000202563 00000 n +0000207539 00000 n +0000208010 00000 n +0000208144 00000 n +0000208278 00000 n +0000208412 00000 n +0000208546 00000 n +0000208680 00000 n +0000208814 00000 n +0000208948 00000 n +0000209082 00000 n +0000209216 00000 n +0000209350 00000 n +0000209484 00000 n +0000209618 00000 n +0000209752 00000 n +0000209887 00000 n +0000210020 00000 n +0000210153 00000 n +0000210286 00000 n +0000210419 00000 n +0000210552 00000 n +0000210685 00000 n +0000210818 00000 n +0000210951 00000 n +0000211085 00000 n +0000211219 00000 n +0000211353 00000 n +0000211487 00000 n +0000211621 00000 n +0000211755 00000 n +0000211889 00000 n +0000212023 00000 n +0000212157 00000 n +0000212290 00000 n +0000215522 00000 n +0000215769 00000 n +0000215903 00000 n +0000216037 00000 n +0000216171 00000 n +0000216305 00000 n +0000216476 00000 n +0000216630 00000 n +0000216745 00000 n +0000216911 00000 n +0000217100 00000 n +0000217229 00000 n +0000217422 00000 n +0000217595 00000 n +0000217779 00000 n +0000217938 00000 n +0000218117 00000 n +0000218294 00000 n +0000218486 00000 n +0000218704 00000 n +0000218916 00000 n +0000218978 00000 n +0000225626 00000 n +0000229868 00000 n +0000234832 00000 n +0000246576 00000 n +0000246808 00000 n +0000247198 00000 n +0000247953 00000 n +0000248103 00000 n +0000248332 00000 n +0000248864 00000 n +0000250166 00000 n +0000250313 00000 n +0000250554 00000 n +0000250927 00000 n +0000251654 00000 n +0000251808 00000 n +0000252050 00000 n +0000252644 00000 n +0000254198 00000 n +0000254352 00000 n +trailer +<< +/Size 633 +/Root 3 0 R +/Info 2 0 R +>> +startxref +254439 +%%EOF diff --git a/content/rancher/v2.6/en/security/hardening-guides/1.6-hardening-2.6/_index.md b/content/rancher/v2.6/en/security/hardening-guides/1.6-hardening-2.6/_index.md new file mode 100644 index 00000000000..51a6df997f8 --- /dev/null +++ b/content/rancher/v2.6/en/security/hardening-guides/1.6-hardening-2.6/_index.md @@ -0,0 +1,641 @@ +--- +title: Hardening Guide with CIS v1.6 Benchmark +weight: 100 +--- + +This document provides prescriptive guidance for hardening a production installation of a RKE cluster to be used with Rancher v2.6.3. It outlines the configurations and controls required to address Kubernetes benchmark controls from the Center for Information Security (CIS). + +> This hardening guide describes how to secure the nodes in your cluster, and it is recommended to follow this guide before installing Kubernetes. + +This hardening guide is intended to be used for RKE clusters and associated with specific versions of the CIS Kubernetes Benchmark, Kubernetes, and Rancher: + +| Rancher Version | CIS Benchmark Version | Kubernetes Version | +| --- | --- | --- | +| Rancher v2.6.3 | Benchmark v1.6 | Kubernetes v1.18, v1.19, v1.20 and v1.21 | + +[Click here to download a PDF version of this document](https://releases.rancher.com/documents/security/2.6/Rancher_v2-6_CIS_v1-6_Hardening_Guide.pdf). + +- [Overview](#overview) +- [Configure Kernel Runtime Parameters](#configure-kernel-runtime-parameters) +- [Configure `etcd` user and group](#configure-etcd-user-and-group) +- [Configure `default` service account](#configure-default-service-account) +- [Configure Network Policy](#configure-network-policy) +- [Reference Hardened RKE `cluster.yml` Configuration](#reference-hardened-rke-cluster-yml-configuration) +- [Reference Hardened RKE Template Configuration](#reference-hardened-rke-template-configuration) +- [Reference Hardened **cloud-config** Configuration](#reference-hardened-cloud-config-configuration) + +### Overview + +This document provides prescriptive guidance for hardening a RKE cluster to be used for installing Rancher v2.6.3 with Kubernetes v1.18 up to v1.21 or provisioning a RKE cluster with Kubernetes v1.18 up to v.21 to be used within Rancher v2.6.3. It outlines the configurations required to address Kubernetes benchmark controls from the Center for Information Security (CIS). + +For more details about evaluating a hardened cluster against the official CIS benchmark, refer to the [CIS 1.6 Benchmark - Self-Assessment Guide - Rancher v2.6]({{}}/rancher/v2.6/en/security/hardening-guides/1.6-benchmark-2.6/). + +#### Known Issues + +- Rancher **exec shell** and **view logs** for pods are **not** functional in a CIS v1.6 hardened setup when only public IP is provided when registering custom nodes. This functionality requires a private IP to be provided when registering the custom nodes. +- When setting the `default_pod_security_policy_template_id:` to `restricted` or `restricted-noroot`, based on the pod security policies (PSP) [provided]({{}}/rancher/v2.6/en/admin-settings/pod-security-policies/) by Rancher, Rancher creates **RoleBindings** and **ClusterRoleBindings** on the default service accounts. The CIS v1.6 check 5.1.5 requires that the default service accounts have no roles or cluster roles bound to it apart from the defaults. In addition the default service accounts should be configured such that it does not provide a service account token and does not have any explicit rights assignments. + +### Configure Kernel Runtime Parameters + +The following `sysctl` configuration is recommended for all nodes type in the cluster. Set the following parameters in `/etc/sysctl.d/90-kubelet.conf`: + +```ini +vm.overcommit_memory=1 +vm.panic_on_oom=0 +kernel.panic=10 +kernel.panic_on_oops=1 +kernel.keys.root_maxbytes=25000000 +``` + +Run `sysctl -p /etc/sysctl.d/90-kubelet.conf` to enable the settings. + +### Configure `etcd` user and group + +A user account and group for the **etcd** service is required to be setup before installing RKE. The **uid** and **gid** for the **etcd** user will be used in the RKE **config.yml** to set the proper permissions for files and directories during installation time. + +#### Create `etcd` user and group + +To create the **etcd** user and group run the following console commands. The commands below use `52034` for **uid** and **gid** are for example purposes. Any valid unused **uid** or **gid** could also be used in lieu of `52034`. + +```bash +groupadd --gid 52034 etcd +useradd --comment "etcd service account" --uid 52034 --gid 52034 etcd --shell /usr/sbin/nologin +``` + +Update the RKE **config.yml** with the **uid** and **gid** of the **etcd** user: + +```yaml +services: + etcd: + gid: 52034 + uid: 52034 +``` + +### Configure `default` Service Account + +#### Set `automountServiceAccountToken` to `false` for `default` service accounts + +Kubernetes provides a default service account which is used by cluster workloads where no specific service account is assigned to the pod. Where access to the Kubernetes API from a pod is required, a specific service account should be created for that pod, and rights granted to that service account. The default service account should be configured such that it does not provide a service account token and does not have any explicit rights assignments. + +For each namespace including **default** and **kube-system** on a standard RKE install, the **default** service account must include this value: + +```yaml +automountServiceAccountToken: false +``` + +Save the following configuration to a file called `account_update.yaml`. + +```yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: default +automountServiceAccountToken: false +``` + +Create a bash script file called `account_update.sh`. Be sure to `chmod +x account_update.sh` so the script has execute permissions. + +```bash +#!/bin/bash -e + +for namespace in $(kubectl get namespaces -A -o=jsonpath="{.items[*]['metadata.name']}"); do + kubectl patch serviceaccount default -n ${namespace} -p "$(cat account_update.yaml)" +done +``` + +### Configure Network Policy + +#### Ensure that all Namespaces have Network Policies defined + +Running different applications on the same Kubernetes cluster creates a risk of one compromised application attacking a neighboring application. Network segmentation is important to ensure that containers can communicate only with those they are supposed to. A network policy is a specification of how selections of pods are allowed to communicate with each other and other network endpoints. + +Network Policies are namespace scoped. When a network policy is introduced to a given namespace, all traffic not allowed by the policy is denied. However, if there are no network policies in a namespace all traffic will be allowed into and out of the pods in that namespace. To enforce network policies, a CNI (container network interface) plugin must be enabled. This guide uses [Canal](https://github.com/projectcalico/canal) to provide the policy enforcement. Additional information about CNI providers can be found [here](https://www.suse.com/c/rancher_blog/comparing-kubernetes-cni-providers-flannel-calico-canal-and-weave/). + +Once a CNI provider is enabled on a cluster a default network policy can be applied. For reference purposes a **permissive** example is provided below. If you want to allow all traffic to all pods in a namespace (even if policies are added that cause some pods to be treated as “isolatedâ€�), you can create a policy that explicitly allows all traffic in that namespace. Save the following configuration as `default-allow-all.yaml`. Additional [documentation](https://kubernetes.io/docs/concepts/services-networking/network-policies/) about network policies can be found on the Kubernetes site. + +> This `NetworkPolicy` is just an example and is not recommended for production use. + +```yaml +--- +apiVersion: networking.k8s.io/v1 +kind: NetworkPolicy +metadata: + name: default-allow-all +spec: + podSelector: {} + ingress: + - {} + egress: + - {} + policyTypes: + - Ingress + - Egress +``` + +Create a bash script file called `apply_networkPolicy_to_all_ns.sh`. Be sure to `chmod +x apply_networkPolicy_to_all_ns.sh` so the script has execute permissions. + +```bash +#!/bin/bash -e + +for namespace in $(kubectl get namespaces -A -o=jsonpath="{.items[*]['metadata.name']}"); do + kubectl apply -f default-allow-all.yaml -n ${namespace} +done +``` + +Execute this script to apply the `default-allow-all.yaml` configuration with the **permissive** `NetworkPolicy` to all namespaces. + +### Reference Hardened RKE `cluster.yml` Configuration + +The reference `cluster.yml` is used by the RKE CLI that provides the configuration needed to achieve a hardened install of Rancher Kubernetes Engine (RKE). RKE install [documentation]({{}}/rke/latest/en/installation/) is provided with additional details about the configuration items. This reference `cluster.yml` does not include the required **nodes** directive which will vary depending on your environment. Documentation for node configuration in RKE can be found [here]({{}}/rke/latest/en/config-options/nodes/). + +> For a Kubernetes v1.18 cluster, the configuration `spec.volumes: 'ephemeral'` should be removed from the `PodSecurityPolicy`, since it's not supported in this Kubernetes release. + +```yaml +# If you intend to deploy Kubernetes in an air-gapped environment, +# please consult the documentation on how to configure custom RKE images. +# https://rancher.com/docs/rke/latest/en/installation/ . + +# The nodes directive is required and will vary depending on your environment. +# Documentation for node configuration can be found here: +# https://rancher.com/docs/rke/latest/en/config-options/nodes/ +nodes: [] +services: + etcd: + image: "" + extra_args: {} + extra_binds: [] + extra_env: [] + win_extra_args: {} + win_extra_binds: [] + win_extra_env: [] + external_urls: [] + ca_cert: "" + cert: "" + key: "" + path: "" + uid: 52034 + gid: 52034 + snapshot: false + retention: "" + creation: "" + backup_config: null + kube-api: + image: "" + extra_args: {} + extra_binds: [] + extra_env: [] + win_extra_args: {} + win_extra_binds: [] + win_extra_env: [] + service_cluster_ip_range: "" + service_node_port_range: "" + pod_security_policy: true + always_pull_images: false + secrets_encryption_config: + enabled: true + custom_config: null + audit_log: + enabled: true + configuration: null + admission_configuration: null + event_rate_limit: + enabled: true + configuration: null + kube-controller: + image: "" + extra_args: + feature-gates: RotateKubeletServerCertificate=true + tls-cipher-suites: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 + bind-address: 127.0.0.1 + extra_binds: [] + extra_env: [] + win_extra_args: {} + win_extra_binds: [] + win_extra_env: [] + cluster_cidr: "" + service_cluster_ip_range: "" + scheduler: + image: "" + extra_args: + tls-cipher-suites: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 + bind-address: 127.0.0.1 + extra_binds: [] + extra_env: [] + win_extra_args: {} + win_extra_binds: [] + win_extra_env: [] + kubelet: + image: "" + extra_args: + feature-gates: RotateKubeletServerCertificate=true + protect-kernel-defaults: true + tls-cipher-suites: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 + extra_binds: [] + extra_env: [] + win_extra_args: {} + win_extra_binds: [] + win_extra_env: [] + cluster_domain: cluster.local + infra_container_image: "" + cluster_dns_server: "" + fail_swap_on: false + generate_serving_certificate: true + kubeproxy: + image: "" + extra_args: {} + extra_binds: [] + extra_env: [] + win_extra_args: {} + win_extra_binds: [] + win_extra_env: [] +network: + plugin: "" + options: {} + mtu: 0 + node_selector: {} + update_strategy: null +authentication: + strategy: "" + sans: [] + webhook: null +addons: | + # Upstream Kubernetes restricted PSP policy + # https://github.com/kubernetes/website/blob/564baf15c102412522e9c8fc6ef2b5ff5b6e766c/content/en/examples/policy/restricted-psp.yaml + apiVersion: policy/v1beta1 + kind: PodSecurityPolicy + metadata: + name: restricted-noroot + spec: + privileged: false + # Required to prevent escalations to root. + allowPrivilegeEscalation: false + requiredDropCapabilities: + - ALL + # Allow core volume types. + volumes: + - 'configMap' + - 'emptyDir' + - 'projected' + - 'secret' + - 'downwardAPI' + # Assume that ephemeral CSI drivers & persistentVolumes set up by the cluster admin are safe to use. + - 'csi' + - 'persistentVolumeClaim' + - 'ephemeral' + hostNetwork: false + hostIPC: false + hostPID: false + runAsUser: + # Require the container to run without root privileges. + rule: 'MustRunAsNonRoot' + seLinux: + # This policy assumes the nodes are using AppArmor rather than SELinux. + rule: 'RunAsAny' + supplementalGroups: + rule: 'MustRunAs' + ranges: + # Forbid adding the root group. + - min: 1 + max: 65535 + fsGroup: + rule: 'MustRunAs' + ranges: + # Forbid adding the root group. + - min: 1 + max: 65535 + readOnlyRootFilesystem: false + --- + apiVersion: rbac.authorization.k8s.io/v1 + kind: ClusterRole + metadata: + name: psp:restricted-noroot + rules: + - apiGroups: + - extensions + resourceNames: + - restricted-noroot + resources: + - podsecuritypolicies + verbs: + - use + --- + apiVersion: rbac.authorization.k8s.io/v1 + kind: ClusterRoleBinding + metadata: + name: psp:restricted-noroot + roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: psp:restricted-noroot + subjects: + - apiGroup: rbac.authorization.k8s.io + kind: Group + name: system:serviceaccounts + - apiGroup: rbac.authorization.k8s.io + kind: Group + name: system:authenticated + --- + apiVersion: networking.k8s.io/v1 + kind: NetworkPolicy + metadata: + name: default-allow-all + spec: + podSelector: {} + ingress: + - {} + egress: + - {} + policyTypes: + - Ingress + - Egress + --- + apiVersion: v1 + kind: ServiceAccount + metadata: + name: default + automountServiceAccountToken: false +addons_include: [] +system_images: + etcd: "" + alpine: "" + nginx_proxy: "" + cert_downloader: "" + kubernetes_services_sidecar: "" + kubedns: "" + dnsmasq: "" + kubedns_sidecar: "" + kubedns_autoscaler: "" + coredns: "" + coredns_autoscaler: "" + nodelocal: "" + kubernetes: "" + flannel: "" + flannel_cni: "" + calico_node: "" + calico_cni: "" + calico_controllers: "" + calico_ctl: "" + calico_flexvol: "" + canal_node: "" + canal_cni: "" + canal_controllers: "" + canal_flannel: "" + canal_flexvol: "" + weave_node: "" + weave_cni: "" + pod_infra_container: "" + ingress: "" + ingress_backend: "" + metrics_server: "" + windows_pod_infra_container: "" +ssh_key_path: "" +ssh_cert_path: "" +ssh_agent_auth: false +authorization: + mode: "" + options: {} +ignore_docker_version: false +kubernetes_version: "" +private_registries: [] +ingress: + provider: "" + options: {} + node_selector: {} + extra_args: {} + dns_policy: "" + extra_envs: [] + extra_volumes: [] + extra_volume_mounts: [] + update_strategy: null + http_port: 0 + https_port: 0 + network_mode: "" +cluster_name: +cloud_provider: + name: "" +prefix_path: "" +win_prefix_path: "" +addon_job_timeout: 0 +bastion_host: + address: "" + port: "" + user: "" + ssh_key: "" + ssh_key_path: "" + ssh_cert: "" + ssh_cert_path: "" +monitoring: + provider: "" + options: {} + node_selector: {} + update_strategy: null + replicas: null +restore: + restore: false + snapshot_name: "" +dns: null +upgrade_strategy: + max_unavailable_worker: "" + max_unavailable_controlplane: "" + drain: null + node_drain_input: null +``` + +### Reference Hardened RKE Template Configuration + +The reference RKE template provides the configuration needed to achieve a hardened install of Kubernetes. RKE templates are used to provision Kubernetes and define Rancher settings. Follow the Rancher [documentation]({{}}/rancher/v2.6/en/installation) for additional installation and RKE template details. + +```yaml +# +# Cluster Config +# +default_pod_security_policy_template_id: restricted-noroot +docker_root_dir: /var/lib/docker +enable_cluster_alerting: false +enable_cluster_monitoring: false +enable_network_policy: true +local_cluster_auth_endpoint: + enabled: true +name: '' +# +# Rancher Config +# +rancher_kubernetes_engine_config: + addon_job_timeout: 45 + authentication: + strategy: x509 + dns: + nodelocal: + ip_address: '' + node_selector: null + update_strategy: {} + enable_cri_dockerd: false + ignore_docker_version: true +# +# # Currently only nginx ingress provider is supported. +# # To disable ingress controller, set `provider: none` +# # To enable ingress on specific nodes, use the node_selector, eg: +# provider: nginx +# node_selector: +# app: ingress +# + ingress: + default_backend: false + default_ingress_class: true + http_port: 0 + https_port: 0 + provider: nginx + kubernetes_version: v1.21.8-rancher1-1 + monitoring: + provider: metrics-server + replicas: 1 +# +# If you are using calico on AWS +# +# network: +# plugin: calico +# calico_network_provider: +# cloud_provider: aws +# +# # To specify flannel interface +# +# network: +# plugin: flannel +# flannel_network_provider: +# iface: eth1 +# +# # To specify flannel interface for canal plugin +# +# network: +# plugin: canal +# canal_network_provider: +# iface: eth1 +# + network: + mtu: 0 + options: + flannel_backend_type: vxlan + plugin: canal + rotate_encryption_key: false +# +# services: +# kube-api: +# service_cluster_ip_range: 10.43.0.0/16 +# kube-controller: +# cluster_cidr: 10.42.0.0/16 +# service_cluster_ip_range: 10.43.0.0/16 +# kubelet: +# cluster_domain: cluster.local +# cluster_dns_server: 10.43.0.10 +# + services: + scheduler: + extra_args: + tls-cipher-suites: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 + bind-address: 127.0.0.1 + etcd: + backup_config: + enabled: true + interval_hours: 12 + retention: 6 + safe_timestamp: false + timeout: 300 + creation: 12h + extra_args: + election-timeout: 5000 + heartbeat-interval: 500 + retention: 72h + snapshot: false + uid: 52034 + gid: 52034 + kube_api: + always_pull_images: false + audit_log: + enabled: true + event_rate_limit: + enabled: true + pod_security_policy: true + secrets_encryption_config: + enabled: true + service_node_port_range: 30000-32767 + kube-controller: + extra_args: + feature-gates: RotateKubeletServerCertificate=true + tls-cipher-suites: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 + bind-address: 127.0.0.1 + kubelet: + extra_args: + feature-gates: RotateKubeletServerCertificate=true + protect-kernel-defaults: true + tls-cipher-suites: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 + fail_swap_on: false + generate_serving_certificate: true + ssh_agent_auth: false + upgrade_strategy: + max_unavailable_controlplane: '1' + max_unavailable_worker: 10% +windows_prefered_cluster: false +``` + +### Reference Hardened **cloud-config** Configuration + +A **cloud-config** configuration file is generally used in cloud infrastructure environments to allow for configuration management of compute instances. The reference config configures SUSE Linux Enterprise Server (SLES), openSUSE Leap, Red Hat Enterprise Linux (RHEL) and Ubuntu operating system level settings needed before installing Kubernetes. + +#### Reference Hardened **cloud-config** for SUSE Linux Enterprise Server 15 (SLES 15) and openSUSE Leap 15 + +```yaml +#cloud-config +system_info: + default_user: + groups: + - docker +write_files: +- path: "/etc/sysctl.d/90-kubelet.conf" + owner: root:root + permissions: '0644' + content: | + vm.overcommit_memory=1 + vm.panic_on_oom=0 + kernel.panic=10 + kernel.panic_on_oops=1 + kernel.keys.root_maxbytes=25000000 +package_update: true +ssh_pwauth: false +runcmd: +# Docker should already be installed in SLES 15 SP3 +- zypper install docker containerd +- systemctl daemon-reload +- systemctl enable docker.service +- systemctl start --no-block docker.service +- sysctl -p /etc/sysctl.d/90-kubelet.conf +- groupadd --gid 52034 etcd +- useradd --comment "etcd service account" --uid 52034 --gid 52034 etcd --shell /usr/sbin/nologin +``` + +#### Reference Hardened **cloud-config** for Red Hat Enterprise Linux 8 (RHEL 8) and Ubuntu 20.04 LTS + +```yaml +#cloud-config +system_info: + default_user: + groups: + - docker +write_files: +- path: "/etc/sysctl.d/90-kubelet.conf" + owner: root:root + permissions: '0644' + content: | + vm.overcommit_memory=1 + vm.panic_on_oom=0 + kernel.panic=10 + kernel.panic_on_oops=1 + kernel.keys.root_maxbytes=25000000 +package_update: true +ssh_pwauth: false +runcmd: +# Install Docker from Rancher's Docker installation scripts - github.com/rancher/install-docker +- curl https://releases.rancher.com/install-docker/20.10.sh | sh +- sysctl -p /etc/sysctl.d/90-kubelet.conf +- groupadd --gid 52034 etcd +- useradd --comment "etcd service account" --uid 52034 --gid 52034 etcd --shell /usr/sbin/nologin +``` diff --git a/content/rancher/v2.6/en/security/hardening-guides/_index.md b/content/rancher/v2.6/en/security/hardening-guides/_index.md new file mode 100644 index 00000000000..ea4e969f058 --- /dev/null +++ b/content/rancher/v2.6/en/security/hardening-guides/_index.md @@ -0,0 +1,65 @@ +--- +title: Self-Assessment and Hardening Guides for Rancher v2.6 +shortTitle: Rancher v2.6 Hardening Guides +weight: 1 +aliases: + - /rancher/v2.6/en/security/rancher-2.5/ + - /rancher/v2.6/en/security/rancher-2.5/1.5-hardening-2.5/ + - /rancher/v2.6/en/security/rancher-2.5/1.5-benchmark-2.5/ + - /rancher/v2.6/en/security/rancher-2.5/1.6-hardening-2.5/ + - /rancher/v2.6/en/security/rancher-2.5/1.6-benchmark-2.5/ +--- + +Rancher provides specific security hardening guides for each supported Rancher's Kubernetes distributions. + +- [Rancher Kubernetes Distributions](#rancher-kubernetes-distributions) +- [Hardening Guides and Benchmark Versions](#hardening-guides-and-benchmark-versions) + - [RKE Guides](#rke-guides) + - [RKE2 Guides](#rke2-guides) + - [K3s Guides](#k3s) +- [Rancher with SELinux](#rancher-with-selinux) + +# Rancher Kubernetes Distributions + +Rancher uses the following Kubernetes distributions: + +- [**RKE**]({{}}/rke/latest/en/), Rancher Kubernetes Engine, is a CNCF-certified Kubernetes distribution that runs entirely within Docker containers. +- [**RKE2**](https://docs.rke2.io/) is a fully conformant Kubernetes distribution that focuses on security and compliance within the U.S. Federal Government sector. +- [**K3s**]({{}}/k3s/latest/en/) is a fully conformant, lightweight Kubernetes distribution. It is easy to install, with half the memory of upstream Kubernetes, all in a binary of less than 100 MB. + +To harden a Kubernetes cluster outside of Rancher's distributions, refer to your Kubernetes provider docs. + +# Hardening Guides and Benchmark Versions + +These guides have been tested along with the Rancher v2.6 release. Each self-assessment guide is accompanied with a hardening guide and tested on a specific Kubernetes version and CIS benchmark version. If a CIS benchmark has not been validated for your Kubernetes version, you can choose to use the existing guides until a newer version is added. + +### RKE Guides + +| Kubernetes Version | CIS Benchmark Version | Self Assessment Guide | Hardening Guides | +| --- | --- | --- | --- | +| Kubernetes v1.18, v1.19, v1.20 and v1.21 | CIS v1.6 | [Link](./1.6-benchmark-2.6) | [Link](./1.6-hardening-2.6) | + +> **Notes** +> +> - Kubernetes v1.22 is currently in experimental mode in Rancher v2.6.3. +> - CIS v1.20 benchmark version for Kubernetes v1.19 and v1.20 is not yet released as a profile in Rancher's CIS Benchmark chart. + +### RKE2 Guides + +| Kubernetes Version | CIS Benchmark Version | Self Assessment Guide | Hardening Guides | +| --- | --- | --- | --- | +| Kubernetes v1.18 | CIS v1.5 | [Link](https://docs.rke2.io/security/cis_self_assessment15/) | [Link](https://docs.rke2.io/security/hardening_guide/) | +| Kubernetes v1.20 | CIS v1.6 | [Link](https://docs.rke2.io/security/cis_self_assessment16/) | [Link](https://docs.rke2.io/security/hardening_guide/) | + +### K3s Guides + +| Kubernetes Version | CIS Benchmark Version | Self Assessment Guide | Hardening Guide | +| --- | --- | --- | --- | +| Kubernetes v1.17, v1.18, & v1.19 | CIS v1.5 | [Link]({{}}/k3s/latest/en/security/self_assessment/) | [Link]({{}}/k3s/latest/en/security/hardening_guide/) | + + +# Rancher with SELinux + +[Security-Enhanced Linux (SELinux)](https://en.wikipedia.org/wiki/Security-Enhanced_Linux) is a security enhancement to Linux. After being historically used by government agencies, SELinux is now industry standard and is enabled by default on RHEL and CentOS. + +To use Rancher with SELinux, we recommend installing the `rancher-selinux` RPM according to the instructions on [this page.]({{}}/rancher/v2.6/en/security/selinux/#installing-the-rancher-selinux-rpm) diff --git a/content/rancher/v2.6/en/security/rancher-2.5/1.5-benchmark-2.5/_index.md b/content/rancher/v2.6/en/security/rancher-2.5/1.5-benchmark-2.5/_index.md deleted file mode 100644 index 463446b78a0..00000000000 --- a/content/rancher/v2.6/en/security/rancher-2.5/1.5-benchmark-2.5/_index.md +++ /dev/null @@ -1,2265 +0,0 @@ ---- -title: CIS 1.5 Benchmark - Self-Assessment Guide - Rancher v2.5 -weight: 201 ---- - -### CIS v1.5 Kubernetes Benchmark - Rancher v2.5 with Kubernetes v1.15 - -[Click here to download a PDF version of this document](https://releases.rancher.com/documents/security/2.5/Rancher_1.5_Benchmark_Assessment.pdf) - -#### Overview - -This document is a companion to the Rancher v2.5 security hardening guide. The hardening guide provides prescriptive guidance for hardening a production installation of Rancher, and this benchmark guide is meant to help you evaluate the level of security of the hardened cluster against each control in the benchmark. - -This guide corresponds to specific versions of the hardening guide, Rancher, CIS Benchmark, and Kubernetes: - -Hardening Guide Version | Rancher Version | CIS Benchmark Version | Kubernetes Version ----------------------------|----------|---------|------- -Hardening Guide with CIS 1.5 Benchmark | Rancher v2.5 | CIS v1.5| Kubernetes v1.15 - -Because Rancher and RKE install Kubernetes services as Docker containers, many of the control verification checks in the CIS Kubernetes Benchmark don't apply and will have a result of `Not Applicable`. This guide will walk through the various controls and provide updated example commands to audit compliance in Rancher-created clusters. - -This document is to be used by Rancher operators, security teams, auditors and decision makers. - -For more detail about each audit, including rationales and remediations for failing tests, you can refer to the corresponding section of the CIS Kubernetes Benchmark v1.5. You can download the benchmark after logging in to [CISecurity.org]( https://www.cisecurity.org/benchmark/kubernetes/). - -#### Testing controls methodology - -Rancher and RKE install Kubernetes services via Docker containers. Configuration is defined by arguments passed to the container at the time of initialization, not via configuration files. - -Where control audits differ from the original CIS benchmark, the audit commands specific to Rancher Labs are provided for testing. -When performing the tests, you will need access to the Docker command line on the hosts of all three RKE roles. The commands also make use of the the [jq](https://stedolan.github.io/jq/) and [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) (with valid config) tools to and are required in the testing and evaluation of test results. - -> NOTE: only scored tests are covered in this guide. - -### Controls - ---- -## 1 Master Node Security Configuration -### 1.1 Master Node Configuration Files - -#### 1.1.1 Ensure that the API server pod specification file permissions are set to `644` or more restrictive (Scored) - -**Result:** Not Applicable - -**Remediation:** -RKE doesn’t require or maintain a configuration file for the API server. All configuration is passed in as arguments at container run time. - -#### 1.1.2 Ensure that the API server pod specification file ownership is set to `root:root` (Scored) - -**Result:** Not Applicable - -**Remediation:** -RKE doesn’t require or maintain a configuration file for the API server. All configuration is passed in as arguments at container run time. - -#### 1.1.3 Ensure that the controller manager pod specification file permissions are set to `644` or more restrictive (Scored) - -**Result:** Not Applicable - -**Remediation:** -RKE doesn’t require or maintain a configuration file for the controller manager. All configuration is passed in as arguments at container run time. - -#### 1.1.4 Ensure that the controller manager pod specification file ownership is set to `root:root` (Scored) - -**Result:** Not Applicable - -**Remediation:** -RKE doesn’t require or maintain a configuration file for the controller manager. All configuration is passed in as arguments at container run time. - -#### 1.1.5 Ensure that the scheduler pod specification file permissions are set to `644` or more restrictive (Scored) - -**Result:** Not Applicable - -**Remediation:** -RKE doesn’t require or maintain a configuration file for the scheduler. All configuration is passed in as arguments at container run time. - -#### 1.1.6 Ensure that the scheduler pod specification file ownership is set to `root:root` (Scored) - -**Result:** Not Applicable - -**Remediation:** -RKE doesn’t require or maintain a configuration file for the scheduler. All configuration is passed in as arguments at container run time. - -#### 1.1.7 Ensure that the etcd pod specification file permissions are set to `644` or more restrictive (Scored) - -**Result:** Not Applicable - -**Remediation:** -RKE doesn’t require or maintain a configuration file for etcd. All configuration is passed in as arguments at container run time. - -#### 1.1.8 Ensure that the etcd pod specification file ownership is set to `root:root` (Scored) - -**Result:** Not Applicable - -**Remediation:** -RKE doesn’t require or maintain a configuration file for etcd. All configuration is passed in as arguments at container run time. - -#### 1.1.11 Ensure that the etcd data directory permissions are set to `700` or more restrictive (Scored) - -**Result:** PASS - -**Remediation:** -On the etcd server node, get the etcd data directory, passed as an argument `--data-dir`, -from the below command: - -``` bash -ps -ef | grep etcd -``` - -Run the below command (based on the etcd data directory found above). For example, - -``` bash -chmod 700 /var/lib/etcd -``` - -**Audit Script:** 1.1.11.sh - -``` -#!/bin/bash -e - -etcd_bin=${1} - -test_dir=$(ps -ef | grep ${etcd_bin} | grep -- --data-dir | sed 's%.*data-dir[= ]\([^ ]*\).*%\1%') - -docker inspect etcd | jq -r '.[].HostConfig.Binds[]' | grep "${test_dir}" | cut -d ":" -f 1 | xargs stat -c %a -``` - -**Audit Execution:** - -``` -./1.1.11.sh etcd -``` - -**Expected result**: - -``` -'700' is equal to '700' -``` - -#### 1.1.12 Ensure that the etcd data directory ownership is set to `etcd:etcd` (Scored) - -**Result:** PASS - -**Remediation:** -On the etcd server node, get the etcd data directory, passed as an argument `--data-dir`, -from the below command: - -``` bash -ps -ef | grep etcd -``` - -Run the below command (based on the etcd data directory found above). -For example, -``` bash -chown etcd:etcd /var/lib/etcd -``` - -**Audit Script:** 1.1.12.sh - -``` -#!/bin/bash -e - -etcd_bin=${1} - -test_dir=$(ps -ef | grep ${etcd_bin} | grep -- --data-dir | sed 's%.*data-dir[= ]\([^ ]*\).*%\1%') - -docker inspect etcd | jq -r '.[].HostConfig.Binds[]' | grep "${test_dir}" | cut -d ":" -f 1 | xargs stat -c %U:%G -``` - -**Audit Execution:** - -``` -./1.1.12.sh etcd -``` - -**Expected result**: - -``` -'etcd:etcd' is present -``` - -#### 1.1.13 Ensure that the `admin.conf` file permissions are set to `644` or more restrictive (Scored) - -**Result:** Not Applicable - -**Remediation:** -RKE does not store the kubernetes default kubeconfig credentials file on the nodes. It’s presented to user where RKE is run. -We recommend that this `kube_config_cluster.yml` file be kept in secure store. - -#### 1.1.14 Ensure that the admin.conf file ownership is set to `root:root` (Scored) - -**Result:** Not Applicable - -**Remediation:** -RKE does not store the kubernetes default kubeconfig credentials file on the nodes. It’s presented to user where RKE is run. -We recommend that this `kube_config_cluster.yml` file be kept in secure store. - -#### 1.1.15 Ensure that the `scheduler.conf` file permissions are set to `644` or more restrictive (Scored) - -**Result:** Not Applicable - -**Remediation:** -RKE doesn’t require or maintain a configuration file for the scheduler. All configuration is passed in as arguments at container run time. - -#### 1.1.16 Ensure that the `scheduler.conf` file ownership is set to `root:root` (Scored) - -**Result:** Not Applicable - -**Remediation:** -RKE doesn’t require or maintain a configuration file for the scheduler. All configuration is passed in as arguments at container run time. - -#### 1.1.17 Ensure that the `controller-manager.conf` file permissions are set to `644` or more restrictive (Scored) - -**Result:** Not Applicable - -**Remediation:** -RKE doesn’t require or maintain a configuration file for the controller manager. All configuration is passed in as arguments at container run time. - -#### 1.1.18 Ensure that the `controller-manager.conf` file ownership is set to `root:root` (Scored) - -**Result:** Not Applicable - -**Remediation:** -RKE doesn’t require or maintain a configuration file for the controller manager. All configuration is passed in as arguments at container run time. - -#### 1.1.19 Ensure that the Kubernetes PKI directory and file ownership is set to `root:root` (Scored) - -**Result:** PASS - -**Remediation:** -Run the below command (based on the file location on your system) on the master node. -For example, - -``` bash -chown -R root:root /etc/kubernetes/ssl -``` - -**Audit:** - -``` -stat -c %U:%G /etc/kubernetes/ssl -``` - -**Expected result**: - -``` -'root:root' is present -``` - -#### 1.1.20 Ensure that the Kubernetes PKI certificate file permissions are set to `644` or more restrictive (Scored) - -**Result:** PASS - -**Remediation:** -Run the below command (based on the file location on your system) on the master node. -For example, - -``` bash -chmod -R 644 /etc/kubernetes/ssl -``` - -**Audit Script:** check_files_permissions.sh - -``` -#!/usr/bin/env bash - -# This script is used to ensure the file permissions are set to 644 or -# more restrictive for all files in a given directory or a wildcard -# selection of files -# -# inputs: -# $1 = /full/path/to/directory or /path/to/fileswithpattern -# ex: !(*key).pem -# -# $2 (optional) = permission (ex: 600) -# -# outputs: -# true/false - -# Turn on "extended glob" for use of '!' in wildcard -shopt -s extglob - -# Turn off history to avoid surprises when using '!' -set -H - -USER_INPUT=$1 - -if [[ "${USER_INPUT}" == "" ]]; then - echo "false" - exit -fi - - -if [[ -d ${USER_INPUT} ]]; then - PATTERN="${USER_INPUT}/*" -else - PATTERN="${USER_INPUT}" -fi - -PERMISSION="" -if [[ "$2" != "" ]]; then - PERMISSION=$2 -fi - -FILES_PERMISSIONS=$(stat -c %n\ %a ${PATTERN}) - -while read -r fileInfo; do - p=$(echo ${fileInfo} | cut -d' ' -f2) - - if [[ "${PERMISSION}" != "" ]]; then - if [[ "$p" != "${PERMISSION}" ]]; then - echo "false" - exit - fi - else - if [[ "$p" != "644" && "$p" != "640" && "$p" != "600" ]]; then - echo "false" - exit - fi - fi -done <<< "${FILES_PERMISSIONS}" - - -echo "true" -exit -``` - -**Audit Execution:** - -``` -./check_files_permissions.sh '/etc/kubernetes/ssl/*.pem' -``` - -**Expected result**: - -``` -'true' is present -``` - -#### 1.1.21 Ensure that the Kubernetes PKI key file permissions are set to `600` (Scored) - -**Result:** PASS - -**Remediation:** -Run the below command (based on the file location on your system) on the master node. -For example, - -``` bash -chmod -R 600 /etc/kubernetes/ssl/certs/serverca -``` - -**Audit Script:** 1.1.21.sh - -``` -#!/bin/bash -e -check_dir=${1:-/etc/kubernetes/ssl} - -for file in $(find ${check_dir} -name "*key.pem"); do - file_permission=$(stat -c %a ${file}) - if [[ "${file_permission}" == "600" ]]; then - continue - else - echo "FAIL: ${file} ${file_permission}" - exit 1 - fi -done - -echo "pass" -``` - -**Audit Execution:** - -``` -./1.1.21.sh /etc/kubernetes/ssl -``` - -**Expected result**: - -``` -'pass' is present -``` - -### 1.2 API Server - -#### 1.2.2 Ensure that the `--basic-auth-file` argument is not set (Scored) - -**Result:** PASS - -**Remediation:** -Follow the documentation and configure alternate mechanisms for authentication. Then, -edit the API server pod specification file `/etc/kubernetes/manifests/kube-apiserver.yaml` -on the master node and remove the `--basic-auth-file=` parameter. - -**Audit:** - -``` -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected result**: - -``` -'--basic-auth-file' is not present -``` - -#### 1.2.3 Ensure that the `--token-auth-file` parameter is not set (Scored) - -**Result:** PASS - -**Remediation:** -Follow the documentation and configure alternate mechanisms for authentication. Then, -edit the API server pod specification file `/etc/kubernetes/manifests/kube-apiserver.yaml` -on the master node and remove the `--token-auth-file=` parameter. - -**Audit:** - -``` -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected result**: - -``` -'--token-auth-file' is not present -``` - -#### 1.2.4 Ensure that the `--kubelet-https` argument is set to true (Scored) - -**Result:** PASS - -**Remediation:** -Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml -on the master node and remove the `--kubelet-https` parameter. - -**Audit:** - -``` -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected result**: - -``` -'--kubelet-https' is present OR '--kubelet-https' is not present -``` - -#### 1.2.5 Ensure that the `--kubelet-client-certificate` and `--kubelet-client-key` arguments are set as appropriate (Scored) - -**Result:** PASS - -**Remediation:** -Follow the Kubernetes documentation and set up the TLS connection between the -apiserver and kubelets. Then, edit API server pod specification file -`/etc/kubernetes/manifests/kube-apiserver.yaml` on the master node and set the -kubelet client certificate and key parameters as below. - -``` bash ---kubelet-client-certificate= ---kubelet-client-key= -``` - -**Audit:** - -``` -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected result**: - -``` -'--kubelet-client-certificate' is present AND '--kubelet-client-key' is present -``` - -#### 1.2.6 Ensure that the `--kubelet-certificate-authority` argument is set as appropriate (Scored) - -**Result:** PASS - -**Remediation:** -Follow the Kubernetes documentation and setup the TLS connection between -the apiserver and kubelets. Then, edit the API server pod specification file -`/etc/kubernetes/manifests/kube-apiserver.yaml` on the master node and set the -`--kubelet-certificate-authority` parameter to the path to the cert file for the certificate authority. -`--kubelet-certificate-authority=` - -**Audit:** - -``` -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected result**: - -``` -'--kubelet-certificate-authority' is present -``` - -#### 1.2.7 Ensure that the `--authorization-mode` argument is not set to `AlwaysAllow` (Scored) - -**Result:** PASS - -**Remediation:** -Edit the API server pod specification file `/etc/kubernetes/manifests/kube-apiserver.yaml` -on the master node and set the `--authorization-mode` parameter to values other than `AlwaysAllow`. -One such example could be as below. - -``` bash ---authorization-mode=RBAC -``` - -**Audit:** - -``` -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected result**: - -``` -'Node,RBAC' not have 'AlwaysAllow' -``` - -#### 1.2.8 Ensure that the `--authorization-mode` argument includes `Node` (Scored) - -**Result:** PASS - -**Remediation:** -Edit the API server pod specification file `/etc/kubernetes/manifests/kube-apiserver.yaml` -on the master node and set the `--authorization-mode` parameter to a value that includes `Node`. - -``` bash ---authorization-mode=Node,RBAC -``` - -**Audit:** - -``` -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected result**: - -``` -'Node,RBAC' has 'Node' -``` - -#### 1.2.9 Ensure that the `--authorization-mode` argument includes `RBAC` (Scored) - -**Result:** PASS - -**Remediation:** -Edit the API server pod specification file `/etc/kubernetes/manifests/kube-apiserver.yaml` -on the master node and set the `--authorization-mode` parameter to a value that includes RBAC, -for example: - -``` bash ---authorization-mode=Node,RBAC -``` - -**Audit:** - -``` -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected result**: - -``` -'Node,RBAC' has 'RBAC' -``` - -#### 1.2.11 Ensure that the admission control plugin `AlwaysAdmit` is not set (Scored) - -**Result:** PASS - -**Remediation:** -Edit the API server pod specification file `/etc/kubernetes/manifests/kube-apiserver.yaml` -on the master node and either remove the `--enable-admission-plugins` parameter, or set it to a -value that does not include `AlwaysAdmit`. - -**Audit:** - -``` -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected result**: - -``` -'NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit' not have 'AlwaysAdmit' OR '--enable-admission-plugins' is not present -``` - -#### 1.2.14 Ensure that the admission control plugin `ServiceAccount` is set (Scored) - -**Result:** PASS - -**Remediation:** -Follow the documentation and create ServiceAccount objects as per your environment. -Then, edit the API server pod specification file `/etc/kubernetes/manifests/kube-apiserver.yaml` -on the master node and ensure that the `--disable-admission-plugins` parameter is set to a -value that does not include `ServiceAccount`. - -**Audit:** - -``` -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected result**: - -``` -'NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit' has 'ServiceAccount' OR '--enable-admission-plugins' is not present -``` - -#### 1.2.15 Ensure that the admission control plugin `NamespaceLifecycle` is set (Scored) - -**Result:** PASS - -**Remediation:** -Edit the API server pod specification file `/etc/kubernetes/manifests/kube-apiserver.yaml` -on the master node and set the `--disable-admission-plugins` parameter to -ensure it does not include `NamespaceLifecycle`. - -**Audit:** - -``` -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected result**: - -``` -'--disable-admission-plugins' is present OR '--disable-admission-plugins' is not present -``` - -#### 1.2.16 Ensure that the admission control plugin `PodSecurityPolicy` is set (Scored) - -**Result:** PASS - -**Remediation:** -Follow the documentation and create Pod Security Policy objects as per your environment. -Then, edit the API server pod specification file `/etc/kubernetes/manifests/kube-apiserver.yaml` -on the master node and set the `--enable-admission-plugins` parameter to a -value that includes `PodSecurityPolicy`: - -``` bash ---enable-admission-plugins=...,PodSecurityPolicy,... -``` - -Then restart the API Server. - -**Audit:** - -``` -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected result**: - -``` -'NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit' has 'PodSecurityPolicy' -``` - -#### 1.2.17 Ensure that the admission control plugin `NodeRestriction` is set (Scored) - -**Result:** PASS - -**Remediation:** -Follow the Kubernetes documentation and configure `NodeRestriction` plug-in on kubelets. -Then, edit the API server pod specification file `/etc/kubernetes/manifests/kube-apiserver.yaml` -on the master node and set the `--enable-admission-plugins` parameter to a -value that includes `NodeRestriction`. - -``` bash ---enable-admission-plugins=...,NodeRestriction,... -``` - -**Audit:** - -``` -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected result**: - -``` -'NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit' has 'NodeRestriction' -``` - -#### 1.2.18 Ensure that the `--insecure-bind-address` argument is not set (Scored) - -**Result:** PASS - -**Remediation:** -Edit the API server pod specification file `/etc/kubernetes/manifests/kube-apiserver.yaml` -on the master node and remove the `--insecure-bind-address` parameter. - -**Audit:** - -``` -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected result**: - -``` -'--insecure-bind-address' is not present -``` - -#### 1.2.19 Ensure that the `--insecure-port` argument is set to `0` (Scored) - -**Result:** PASS - -**Remediation:** -Edit the API server pod specification file `/etc/kubernetes/manifests/kube-apiserver.yaml` -on the master node and set the below parameter. - -``` bash ---insecure-port=0 -``` - -**Audit:** - -``` -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected result**: - -``` -'0' is equal to '0' -``` - -#### 1.2.20 Ensure that the `--secure-port` argument is not set to `0` (Scored) - -**Result:** PASS - -**Remediation:** -Edit the API server pod specification file `/etc/kubernetes/manifests/kube-apiserver.yaml` -on the master node and either remove the `--secure-port` parameter or -set it to a different **(non-zero)** desired port. - -**Audit:** - -``` -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected result**: - -``` -6443 is greater than 0 OR '--secure-port' is not present -``` - -#### 1.2.21 Ensure that the `--profiling` argument is set to `false` (Scored) - -**Result:** PASS - -**Remediation:** -Edit the API server pod specification file `/etc/kubernetes/manifests/kube-apiserver.yaml` -on the master node and set the below parameter. - -``` bash ---profiling=false -``` - -**Audit:** - -``` -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected result**: - -``` -'false' is equal to 'false' -``` - -#### 1.2.22 Ensure that the `--audit-log-path` argument is set (Scored) - -**Result:** PASS - -**Remediation:** -Edit the API server pod specification file `/etc/kubernetes/manifests/kube-apiserver.yaml` -on the master node and set the `--audit-log-path` parameter to a suitable path and -file where you would like audit logs to be written, for example: - -``` bash ---audit-log-path=/var/log/apiserver/audit.log -``` - -**Audit:** - -``` -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected result**: - -``` -'--audit-log-path' is present -``` - -#### 1.2.23 Ensure that the `--audit-log-maxage` argument is set to `30` or as appropriate (Scored) - -**Result:** PASS - -**Remediation:** -Edit the API server pod specification file `/etc/kubernetes/manifests/kube-apiserver.yaml` -on the master node and set the `--audit-log-maxage` parameter to `30` or as an appropriate number of days: - -``` bash ---audit-log-maxage=30 -``` - -**Audit:** - -``` -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected result**: - -``` -30 is greater or equal to 30 -``` - -#### 1.2.24 Ensure that the `--audit-log-maxbackup` argument is set to `10` or as appropriate (Scored) - -**Result:** PASS - -**Remediation:** -Edit the API server pod specification file `/etc/kubernetes/manifests/kube-apiserver.yaml` -on the master node and set the `--audit-log-maxbackup` parameter to `10` or to an appropriate -value. - -``` bash ---audit-log-maxbackup=10 -``` - -**Audit:** - -``` -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected result**: - -``` -10 is greater or equal to 10 -``` - -#### 1.2.25 Ensure that the `--audit-log-maxsize` argument is set to `100` or as appropriate (Scored) - -**Result:** PASS - -**Remediation:** -Edit the API server pod specification file `/etc/kubernetes/manifests/kube-apiserver.yaml` -on the master node and set the `--audit-log-maxsize` parameter to an appropriate size in **MB**. -For example, to set it as `100` **MB**: - -``` bash ---audit-log-maxsize=100 -``` - -**Audit:** - -``` -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected result**: - -``` -100 is greater or equal to 100 -``` - -#### 1.2.26 Ensure that the `--request-timeout` argument is set as appropriate (Scored) - -**Result:** PASS - -**Remediation:** -Edit the API server pod specification file `/etc/kubernetes/manifests/kube-apiserver.yaml` -and set the below parameter as appropriate and if needed. -For example, - -``` bash ---request-timeout=300s -``` - -**Audit:** - -``` -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected result**: - -``` -'--request-timeout' is not present OR '--request-timeout' is present -``` - -#### 1.2.27 Ensure that the `--service-account-lookup` argument is set to `true` (Scored) - -**Result:** PASS - -**Remediation:** -Edit the API server pod specification file `/etc/kubernetes/manifests/kube-apiserver.yaml` -on the master node and set the below parameter. - -``` bash ---service-account-lookup=true -``` - -Alternatively, you can delete the `--service-account-lookup` parameter from this file so -that the default takes effect. - -**Audit:** - -``` -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected result**: - -``` -'--service-account-lookup' is not present OR 'true' is equal to 'true' -``` - -#### 1.2.28 Ensure that the `--service-account-key-file` argument is set as appropriate (Scored) - -**Result:** PASS - -**Remediation:** -Edit the API server pod specification file `/etc/kubernetes/manifests/kube-apiserver.yaml` -on the master node and set the `--service-account-key-file` parameter -to the public key file for service accounts: - -``` bash ---service-account-key-file= -``` - -**Audit:** - -``` -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected result**: - -``` -'--service-account-key-file' is present -``` - -#### 1.2.29 Ensure that the `--etcd-certfile` and `--etcd-keyfile` arguments are set as appropriate (Scored) - -**Result:** PASS - -**Remediation:** -Follow the Kubernetes documentation and set up the TLS connection between the apiserver and etcd. -Then, edit the API server pod specification file `/etc/kubernetes/manifests/kube-apiserver.yaml` -on the master node and set the **etcd** certificate and **key** file parameters. - -``` bash ---etcd-certfile= ---etcd-keyfile= -``` - -**Audit:** - -``` -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected result**: - -``` -'--etcd-certfile' is present AND '--etcd-keyfile' is present -``` - -#### 1.2.30 Ensure that the `--tls-cert-file` and `--tls-private-key-file` arguments are set as appropriate (Scored) - -**Result:** PASS - -**Remediation:** -Follow the Kubernetes documentation and set up the TLS connection on the apiserver. -Then, edit the API server pod specification file `/etc/kubernetes/manifests/kube-apiserver.yaml` -on the master node and set the TLS certificate and private key file parameters. - -``` bash ---tls-cert-file= ---tls-private-key-file= -``` - -**Audit:** - -``` -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected result**: - -``` -'--tls-cert-file' is present AND '--tls-private-key-file' is present -``` - -#### 1.2.31 Ensure that the `--client-ca-file` argument is set as appropriate (Scored) - -**Result:** PASS - -**Remediation:** -Follow the Kubernetes documentation and set up the TLS connection on the apiserver. -Then, edit the API server pod specification file `/etc/kubernetes/manifests/kube-apiserver.yaml` -on the master node and set the client certificate authority file. - -``` bash ---client-ca-file= -``` - -**Audit:** - -``` -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected result**: - -``` -'--client-ca-file' is present -``` - -#### 1.2.32 Ensure that the `--etcd-cafile` argument is set as appropriate (Scored) - -**Result:** PASS - -**Remediation:** -Follow the Kubernetes documentation and set up the TLS connection between the apiserver and etcd. -Then, edit the API server pod specification file `/etc/kubernetes/manifests/kube-apiserver.yaml` -on the master node and set the etcd certificate authority file parameter. - -``` bash ---etcd-cafile= -``` - -**Audit:** - -``` -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected result**: - -``` -'--etcd-cafile' is present -``` - -#### 1.2.33 Ensure that the `--encryption-provider-config` argument is set as appropriate (Scored) - -**Result:** PASS - -**Remediation:** -Follow the Kubernetes documentation and configure a EncryptionConfig file. -Then, edit the API server pod specification file `/etc/kubernetes/manifests/kube-apiserver.yaml` -on the master node and set the `--encryption-provider-config` parameter to the path of that file: - -``` bash ---encryption-provider-config= -``` - -**Audit:** - -``` -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected result**: - -``` -'--encryption-provider-config' is present -``` - -#### 1.2.34 Ensure that encryption providers are appropriately configured (Scored) - -**Result:** PASS - -**Remediation:** -Follow the Kubernetes documentation and configure a `EncryptionConfig` file. -In this file, choose **aescbc**, **kms** or **secretbox** as the encryption provider. - -**Audit Script:** 1.2.34.sh - -``` -#!/bin/bash -e - -check_file=${1} - -grep -q -E 'aescbc|kms|secretbox' ${check_file} -if [ $? -eq 0 ]; then - echo "--pass" - exit 0 -else - echo "fail: encryption provider found in ${check_file}" - exit 1 -fi -``` - -**Audit Execution:** - -``` -./1.2.34.sh /etc/kubernetes/ssl/encryption.yaml -``` - -**Expected result**: - -``` -'--pass' is present -``` - -### 1.3 Controller Manager - -#### 1.3.1 Ensure that the `--terminated-pod-gc-threshold` argument is set as appropriate (Scored) - -**Result:** PASS - -**Remediation:** -Edit the Controller Manager pod specification file `/etc/kubernetes/manifests/kube-controller-manager.yaml` -on the master node and set the `--terminated-pod-gc-threshold` to an appropriate threshold, -for example: - -``` bash ---terminated-pod-gc-threshold=10 -``` - -**Audit:** - -``` -/bin/ps -ef | grep kube-controller-manager | grep -v grep -``` - -**Expected result**: - -``` -'--terminated-pod-gc-threshold' is present -``` - -#### 1.3.2 Ensure that the `--profiling` argument is set to false (Scored) - -**Result:** PASS - -**Remediation:** -Edit the Controller Manager pod specification file `/etc/kubernetes/manifests/kube-controller-manager.yaml` -on the master node and set the below parameter. - -``` bash ---profiling=false -``` - -**Audit:** - -``` -/bin/ps -ef | grep kube-controller-manager | grep -v grep -``` - -**Expected result**: - -``` -'false' is equal to 'false' -``` - -#### 1.3.3 Ensure that the `--use-service-account-credentials` argument is set to `true` (Scored) - -**Result:** PASS - -**Remediation:** -Edit the Controller Manager pod specification file `/etc/kubernetes/manifests/kube-controller-manager.yaml` -on the master node to set the below parameter. - -``` bash ---use-service-account-credentials=true -``` - -**Audit:** - -``` -/bin/ps -ef | grep kube-controller-manager | grep -v grep -``` - -**Expected result**: - -``` -'true' is not equal to 'false' -``` - -#### 1.3.4 Ensure that the `--service-account-private-key-file` argument is set as appropriate (Scored) - -**Result:** PASS - -**Remediation:** -Edit the Controller Manager pod specification file `/etc/kubernetes/manifests/kube-controller-manager.yaml` -on the master node and set the `--service-account-private-key-file` parameter -to the private key file for service accounts. - -``` bash ---service-account-private-key-file= -``` - -**Audit:** - -``` -/bin/ps -ef | grep kube-controller-manager | grep -v grep -``` - -**Expected result**: - -``` -'--service-account-private-key-file' is present -``` - -#### 1.3.5 Ensure that the `--root-ca-file` argument is set as appropriate (Scored) - -**Result:** PASS - -**Remediation:** -Edit the Controller Manager pod specification file `/etc/kubernetes/manifests/kube-controller-manager.yaml` -on the master node and set the `--root-ca-file` parameter to the certificate bundle file`. - -``` bash ---root-ca-file= -``` - -**Audit:** - -``` -/bin/ps -ef | grep kube-controller-manager | grep -v grep -``` - -**Expected result**: - -``` -'--root-ca-file' is present -``` - -#### 1.3.6 Ensure that the `RotateKubeletServerCertificate` argument is set to `true` (Scored) - -**Result:** PASS - -**Remediation:** -Edit the Controller Manager pod specification file `/etc/kubernetes/manifests/kube-controller-manager.yaml` -on the master node and set the `--feature-gates` parameter to include `RotateKubeletServerCertificate=true`. - -``` bash ---feature-gates=RotateKubeletServerCertificate=true -``` - -**Audit:** - -``` -/bin/ps -ef | grep kube-controller-manager | grep -v grep -``` - -**Expected result**: - -``` -'RotateKubeletServerCertificate=true' is equal to 'RotateKubeletServerCertificate=true' -``` - -#### 1.3.7 Ensure that the `--bind-address argument` is set to `127.0.0.1` (Scored) - -**Result:** PASS - -**Remediation:** -Edit the Controller Manager pod specification file `/etc/kubernetes/manifests/kube-controller-manager.yaml` -on the master node and ensure the correct value for the `--bind-address` parameter. - -**Audit:** - -``` -/bin/ps -ef | grep kube-controller-manager | grep -v grep -``` - -**Expected result**: - -``` -'--bind-address' is present OR '--bind-address' is not present -``` - -### 1.4 Scheduler - -#### 1.4.1 Ensure that the `--profiling` argument is set to `false` (Scored) - -**Result:** PASS - -**Remediation:** -Edit the Scheduler pod specification file `/etc/kubernetes/manifests/kube-scheduler.yaml` file -on the master node and set the below parameter. - -``` bash ---profiling=false -``` - -**Audit:** - -``` -/bin/ps -ef | grep kube-scheduler | grep -v grep -``` - -**Expected result**: - -``` -'false' is equal to 'false' -``` - -#### 1.4.2 Ensure that the `--bind-address` argument is set to `127.0.0.1` (Scored) - -**Result:** PASS - -**Remediation:** -Edit the Scheduler pod specification file `/etc/kubernetes/manifests/kube-scheduler.yaml` -on the master node and ensure the correct value for the `--bind-address` parameter. - -**Audit:** - -``` -/bin/ps -ef | grep kube-scheduler | grep -v grep -``` - -**Expected result**: - -``` -'--bind-address' is present OR '--bind-address' is not present -``` - -## 2 Etcd Node Configuration -### 2 Etcd Node Configuration Files - -#### 2.1 Ensure that the `--cert-file` and `--key-file` arguments are set as appropriate (Scored) - -**Result:** PASS - -**Remediation:** -Follow the etcd service documentation and configure TLS encryption. -Then, edit the etcd pod specification file `/etc/kubernetes/manifests/etcd.yaml` -on the master node and set the below parameters. - -``` bash ---cert-file= ---key-file= -``` - -**Audit:** - -``` -/bin/ps -ef | /bin/grep etcd | /bin/grep -v grep -``` - -**Expected result**: - -``` -'--cert-file' is present AND '--key-file' is present -``` - -#### 2.2 Ensure that the `--client-cert-auth` argument is set to `true` (Scored) - -**Result:** PASS - -**Remediation:** -Edit the etcd pod specification file `/etc/kubernetes/manifests/etcd.yaml` on the master -node and set the below parameter. - -``` bash ---client-cert-auth="true" -``` - -**Audit:** - -``` -/bin/ps -ef | /bin/grep etcd | /bin/grep -v grep -``` - -**Expected result**: - -``` -'true' is equal to 'true' -``` - -#### 2.3 Ensure that the `--auto-tls` argument is not set to `true` (Scored) - -**Result:** PASS - -**Remediation:** -Edit the etcd pod specification file `/etc/kubernetes/manifests/etcd.yaml` on the master -node and either remove the `--auto-tls` parameter or set it to `false`. - -``` bash - --auto-tls=false -``` - -**Audit:** - -``` -/bin/ps -ef | /bin/grep etcd | /bin/grep -v grep -``` - -**Expected result**: - -``` -'--auto-tls' is not present OR '--auto-tls' is not present -``` - -#### 2.4 Ensure that the `--peer-cert-file` and `--peer-key-file` arguments are set as appropriate (Scored) - -**Result:** PASS - -**Remediation:** -Follow the etcd service documentation and configure peer TLS encryption as appropriate -for your etcd cluster. Then, edit the etcd pod specification file `/etc/kubernetes/manifests/etcd.yaml` on the -master node and set the below parameters. - -``` bash ---peer-client-file= ---peer-key-file= -``` - -**Audit:** - -``` -/bin/ps -ef | /bin/grep etcd | /bin/grep -v grep -``` - -**Expected result**: - -``` -'--peer-cert-file' is present AND '--peer-key-file' is present -``` - -#### 2.5 Ensure that the `--peer-client-cert-auth` argument is set to `true` (Scored) - -**Result:** PASS - -**Remediation:** -Edit the etcd pod specification file `/etc/kubernetes/manifests/etcd.yaml` on the master -node and set the below parameter. - -``` bash ---peer-client-cert-auth=true -``` - -**Audit:** - -``` -/bin/ps -ef | /bin/grep etcd | /bin/grep -v grep -``` - -**Expected result**: - -``` -'true' is equal to 'true' -``` - -#### 2.6 Ensure that the `--peer-auto-tls` argument is not set to `true` (Scored) - -**Result:** PASS - -**Remediation:** -Edit the etcd pod specification file `/etc/kubernetes/manifests/etcd.yaml` on the master -node and either remove the `--peer-auto-tls` parameter or set it to `false`. - -``` bash ---peer-auto-tls=false -``` - -**Audit:** - -``` -/bin/ps -ef | /bin/grep etcd | /bin/grep -v grep -``` - -**Expected result**: - -``` -'--peer-auto-tls' is not present OR '--peer-auto-tls' is present -``` - -## 3 Control Plane Configuration -### 3.2 Logging - -#### 3.2.1 Ensure that a minimal audit policy is created (Scored) - -**Result:** PASS - -**Remediation:** -Create an audit policy file for your cluster. - -**Audit Script:** 3.2.1.sh - -``` -#!/bin/bash -e - -api_server_bin=${1} - -/bin/ps -ef | /bin/grep ${api_server_bin} | /bin/grep -v ${0} | /bin/grep -v grep -``` - -**Audit Execution:** - -``` -./3.2.1.sh kube-apiserver -``` - -**Expected result**: - -``` -'--audit-policy-file' is present -``` - -## 4 Worker Node Security Configuration -### 4.1 Worker Node Configuration Files - -#### 4.1.1 Ensure that the kubelet service file permissions are set to `644` or more restrictive (Scored) - -**Result:** Not Applicable - -**Remediation:** -RKE doesn’t require or maintain a configuration file for the kubelet service. All configuration is passed in as arguments at container run time. - -#### 4.1.2 Ensure that the kubelet service file ownership is set to `root:root` (Scored) - -**Result:** Not Applicable - -**Remediation:** -RKE doesn’t require or maintain a configuration file for the kubelet service. All configuration is passed in as arguments at container run time. - -#### 4.1.3 Ensure that the proxy kubeconfig file permissions are set to `644` or more restrictive (Scored) - -**Result:** PASS - -**Remediation:** -Run the below command (based on the file location on your system) on the each worker node. -For example, - -``` bash -chmod 644 /etc/kubernetes/ssl/kubecfg-kube-proxy.yaml -``` - -**Audit:** - -``` -/bin/sh -c 'if test -e /etc/kubernetes/ssl/kubecfg-kube-proxy.yaml; then stat -c %a /etc/kubernetes/ssl/kubecfg-kube-proxy.yaml; fi' -``` - -**Expected result**: - -``` -'644' is present OR '640' is present OR '600' is equal to '600' OR '444' is present OR '440' is present OR '400' is present OR '000' is present -``` - -#### 4.1.4 Ensure that the proxy kubeconfig file ownership is set to `root:root` (Scored) - -**Result:** PASS - -**Remediation:** -Run the below command (based on the file location on your system) on the each worker node. -For example, - -``` bash -chown root:root /etc/kubernetes/ssl/kubecfg-kube-proxy.yaml -``` - -**Audit:** - -``` -/bin/sh -c 'if test -e /etc/kubernetes/ssl/kubecfg-kube-proxy.yaml; then stat -c %U:%G /etc/kubernetes/ssl/kubecfg-kube-proxy.yaml; fi' -``` - -**Expected result**: - -``` -'root:root' is present -``` - -#### 4.1.5 Ensure that the kubelet.conf file permissions are set to `644` or more restrictive (Scored) - -**Result:** PASS - -**Remediation:** -Run the below command (based on the file location on your system) on the each worker node. -For example, - -``` bash -chmod 644 /etc/kubernetes/ssl/kubecfg-kube-node.yaml -``` - -**Audit:** - -``` -/bin/sh -c 'if test -e /etc/kubernetes/ssl/kubecfg-kube-node.yaml; then stat -c %a /etc/kubernetes/ssl/kubecfg-kube-node.yaml; fi' -``` - -**Expected result**: - -``` -'644' is present OR '640' is present OR '600' is equal to '600' OR '444' is present OR '440' is present OR '400' is present OR '000' is present -``` - -#### 4.1.6 Ensure that the kubelet.conf file ownership is set to `root:root` (Scored) - -**Result:** PASS - -**Remediation:** -Run the below command (based on the file location on your system) on the each worker node. -For example, - -``` bash -chown root:root /etc/kubernetes/ssl/kubecfg-kube-node.yaml -``` - -**Audit:** - -``` -/bin/sh -c 'if test -e /etc/kubernetes/ssl/kubecfg-kube-node.yaml; then stat -c %U:%G /etc/kubernetes/ssl/kubecfg-kube-node.yaml; fi' -``` - -**Expected result**: - -``` -'root:root' is equal to 'root:root' -``` - -#### 4.1.7 Ensure that the certificate authorities file permissions are set to `644` or more restrictive (Scored) - -**Result:** PASS - -**Remediation:** -Run the following command to modify the file permissions of the - -``` bash ---client-ca-file chmod 644 -``` - -**Audit:** - -``` -stat -c %a /etc/kubernetes/ssl/kube-ca.pem -``` - -**Expected result**: - -``` -'644' is equal to '644' OR '640' is present OR '600' is present -``` - -#### 4.1.8 Ensure that the client certificate authorities file ownership is set to `root:root` (Scored) - -**Result:** PASS - -**Remediation:** -Run the following command to modify the ownership of the `--client-ca-file`. - -``` bash -chown root:root -``` - -**Audit:** - -``` -/bin/sh -c 'if test -e /etc/kubernetes/ssl/kube-ca.pem; then stat -c %U:%G /etc/kubernetes/ssl/kube-ca.pem; fi' -``` - -**Expected result**: - -``` -'root:root' is equal to 'root:root' -``` - -#### 4.1.9 Ensure that the kubelet configuration file has permissions set to `644` or more restrictive (Scored) - -**Result:** Not Applicable - -**Remediation:** -RKE doesn’t require or maintain a configuration file for the kubelet service. All configuration is passed in as arguments at container run time. - -#### 4.1.10 Ensure that the kubelet configuration file ownership is set to `root:root` (Scored) - -**Result:** Not Applicable - -**Remediation:** -RKE doesn’t require or maintain a configuration file for the kubelet service. All configuration is passed in as arguments at container run time. - -### 4.2 Kubelet - -#### 4.2.1 Ensure that the `--anonymous-auth argument` is set to false (Scored) - -**Result:** PASS - -**Remediation:** -If using a Kubelet config file, edit the file to set authentication: `anonymous`: enabled to -`false`. -If using executable arguments, edit the kubelet service file -`/etc/systemd/system/kubelet.service.d/10-kubeadm.conf` on each worker node and -set the below parameter in `KUBELET_SYSTEM_PODS_ARGS` variable. - -``` bash ---anonymous-auth=false -``` - -Based on your system, restart the kubelet service. For example: - -``` bash -systemctl daemon-reload -systemctl restart kubelet.service -``` - -**Audit:** - -``` -/bin/ps -fC kubelet -``` - -**Audit Config:** - -``` -/bin/cat /var/lib/kubelet/config.yaml -``` - -**Expected result**: - -``` -'false' is equal to 'false' -``` - -#### 4.2.2 Ensure that the `--authorization-mode` argument is not set to `AlwaysAllow` (Scored) - -**Result:** PASS - -**Remediation:** -If using a Kubelet config file, edit the file to set authorization: `mode` to `Webhook`. If -using executable arguments, edit the kubelet service file -`/etc/systemd/system/kubelet.service.d/10-kubeadm.conf` on each worker node and -set the below parameter in `KUBELET_AUTHZ_ARGS` variable. - -``` bash ---authorization-mode=Webhook -``` - -Based on your system, restart the kubelet service. For example: - -``` bash -systemctl daemon-reload -systemctl restart kubelet.service -``` - -**Audit:** - -``` -/bin/ps -fC kubelet -``` - -**Audit Config:** - -``` -/bin/cat /var/lib/kubelet/config.yaml -``` - -**Expected result**: - -``` -'Webhook' not have 'AlwaysAllow' -``` - -#### 4.2.3 Ensure that the `--client-ca-file` argument is set as appropriate (Scored) - -**Result:** PASS - -**Remediation:** -If using a Kubelet config file, edit the file to set authentication: `x509`: `clientCAFile` to -the location of the client CA file. -If using command line arguments, edit the kubelet service file -`/etc/systemd/system/kubelet.service.d/10-kubeadm.conf` on each worker node and -set the below parameter in `KUBELET_AUTHZ_ARGS` variable. - -``` bash ---client-ca-file= -``` - -Based on your system, restart the kubelet service. For example: - -``` bash -systemctl daemon-reload -systemctl restart kubelet.service -``` - -**Audit:** - -``` -/bin/ps -fC kubelet -``` - -**Audit Config:** - -``` -/bin/cat /var/lib/kubelet/config.yaml -``` - -**Expected result**: - -``` -'--client-ca-file' is present -``` - -#### 4.2.4 Ensure that the `--read-only-port` argument is set to `0` (Scored) - -**Result:** PASS - -**Remediation:** -If using a Kubelet config file, edit the file to set `readOnlyPort` to `0`. -If using command line arguments, edit the kubelet service file -`/etc/systemd/system/kubelet.service.d/10-kubeadm.conf` on each worker node and -set the below parameter in `KUBELET_SYSTEM_PODS_ARGS` variable. - -``` bash ---read-only-port=0 -``` - -Based on your system, restart the kubelet service. For example: - -``` bash -systemctl daemon-reload -systemctl restart kubelet.service -``` - -**Audit:** - -``` -/bin/ps -fC kubelet -``` - -**Audit Config:** - -``` -/bin/cat /var/lib/kubelet/config.yaml -``` - -**Expected result**: - -``` -'0' is equal to '0' -``` - -#### 4.2.5 Ensure that the `--streaming-connection-idle-timeout` argument is not set to `0` (Scored) - -**Result:** PASS - -**Remediation:** -If using a Kubelet config file, edit the file to set `streamingConnectionIdleTimeout` to a -value other than `0`. -If using command line arguments, edit the kubelet service file -`/etc/systemd/system/kubelet.service.d/10-kubeadm.conf` on each worker node and -set the below parameter in `KUBELET_SYSTEM_PODS_ARGS` variable. - -``` bash ---streaming-connection-idle-timeout=5m -``` - -Based on your system, restart the kubelet service. For example: - -``` bash -systemctl daemon-reload -systemctl restart kubelet.service -``` - -**Audit:** - -``` -/bin/ps -fC kubelet -``` - -**Audit Config:** - -``` -/bin/cat /var/lib/kubelet/config.yaml -``` - -**Expected result**: - -``` -'30m' is not equal to '0' OR '--streaming-connection-idle-timeout' is not present -``` - -#### 4.2.6 Ensure that the ```--protect-kernel-defaults``` argument is set to `true` (Scored) - -**Result:** PASS - -**Remediation:** -If using a Kubelet config file, edit the file to set `protectKernelDefaults`: `true`. -If using command line arguments, edit the kubelet service file -`/etc/systemd/system/kubelet.service.d/10-kubeadm.conf` on each worker node and -set the below parameter in `KUBELET_SYSTEM_PODS_ARGS` variable. - -``` bash ---protect-kernel-defaults=true -``` - -Based on your system, restart the kubelet service. For example: - -``` bash -systemctl daemon-reload -systemctl restart kubelet.service -``` - -**Audit:** - -``` -/bin/ps -fC kubelet -``` - -**Audit Config:** - -``` -/bin/cat /var/lib/kubelet/config.yaml -``` - -**Expected result**: - -``` -'true' is equal to 'true' -``` - -#### 4.2.7 Ensure that the `--make-iptables-util-chains` argument is set to `true` (Scored) - -**Result:** PASS - -**Remediation:** -If using a Kubelet config file, edit the file to set `makeIPTablesUtilChains`: `true`. -If using command line arguments, edit the kubelet service file -`/etc/systemd/system/kubelet.service.d/10-kubeadm.conf` on each worker node and -remove the `--make-iptables-util-chains` argument from the -`KUBELET_SYSTEM_PODS_ARGS` variable. -Based on your system, restart the kubelet service. For example: - -```bash -systemctl daemon-reload -systemctl restart kubelet.service -``` - -**Audit:** - -``` -/bin/ps -fC kubelet -``` - -**Audit Config:** - -``` -/bin/cat /var/lib/kubelet/config.yaml -``` - -**Expected result**: - -``` -'true' is equal to 'true' OR '--make-iptables-util-chains' is not present -``` - -#### 4.2.10 Ensure that the `--tls-cert-file` and `--tls-private-key-file` arguments are set as appropriate (Scored) - -**Result:** Not Applicable - -**Remediation:** -RKE doesn’t require or maintain a configuration file for the kubelet service. All configuration is passed in as arguments at container run time. - -#### 4.2.11 Ensure that the `--rotate-certificates` argument is not set to `false` (Scored) - -**Result:** PASS - -**Remediation:** -If using a Kubelet config file, edit the file to add the line `rotateCertificates`: `true` or -remove it altogether to use the default value. -If using command line arguments, edit the kubelet service file -`/etc/systemd/system/kubelet.service.d/10-kubeadm.conf` on each worker node and -remove `--rotate-certificates=false` argument from the `KUBELET_CERTIFICATE_ARGS` -variable. -Based on your system, restart the kubelet service. For example: - -``` bash -systemctl daemon-reload -systemctl restart kubelet.service -``` - -**Audit:** - -``` -/bin/ps -fC kubelet -``` - -**Audit Config:** - -``` -/bin/cat /var/lib/kubelet/config.yaml -``` - -**Expected result**: - -``` -'--rotate-certificates' is present OR '--rotate-certificates' is not present -``` - -#### 4.2.12 Ensure that the `RotateKubeletServerCertificate` argument is set to `true` (Scored) - -**Result:** PASS - -**Remediation:** -Edit the kubelet service file `/etc/systemd/system/kubelet.service.d/10-kubeadm.conf` -on each worker node and set the below parameter in `KUBELET_CERTIFICATE_ARGS` variable. - -``` bash ---feature-gates=RotateKubeletServerCertificate=true -``` - -Based on your system, restart the kubelet service. For example: - -``` bash -systemctl daemon-reload -systemctl restart kubelet.service -``` - -**Audit:** - -``` -/bin/ps -fC kubelet -``` - -**Audit Config:** - -``` -/bin/cat /var/lib/kubelet/config.yaml -``` - -**Expected result**: - -``` -'true' is equal to 'true' -``` - -## 5 Kubernetes Policies -### 5.1 RBAC and Service Accounts - -#### 5.1.5 Ensure that default service accounts are not actively used. (Scored) - -**Result:** PASS - -**Remediation:** -Create explicit service accounts wherever a Kubernetes workload requires specific access -to the Kubernetes API server. -Modify the configuration of each default service account to include this value - -``` bash -automountServiceAccountToken: false -``` - -**Audit Script:** 5.1.5.sh - -``` -#!/bin/bash - -export KUBECONFIG=${KUBECONFIG:-/root/.kube/config} - -kubectl version > /dev/null -if [ $? -ne 0 ]; then - echo "fail: kubectl failed" - exit 1 -fi - -accounts="$(kubectl --kubeconfig=${KUBECONFIG} get serviceaccounts -A -o json | jq -r '.items[] | select(.metadata.name=="default") | select((.automountServiceAccountToken == null) or (.automountServiceAccountToken == true)) | "fail \(.metadata.name) \(.metadata.namespace)"')" - -if [[ "${accounts}" != "" ]]; then - echo "fail: automountServiceAccountToken not false for accounts: ${accounts}" - exit 1 -fi - -default_binding="$(kubectl get rolebindings,clusterrolebindings -A -o json | jq -r '.items[] | select(.subjects[].kind=="ServiceAccount" and .subjects[].name=="default" and .metadata.name=="default").metadata.uid' | wc -l)" - -if [[ "${default_binding}" -gt 0 ]]; then - echo "fail: default service accounts have non default bindings" - exit 1 -fi - -echo "--pass" -exit 0 -``` - -**Audit Execution:** - -``` -./5.1.5.sh -``` - -**Expected result**: - -``` -'--pass' is present -``` - -### 5.2 Pod Security Policies - -#### 5.2.2 Minimize the admission of containers wishing to share the host process ID namespace (Scored) - -**Result:** PASS - -**Remediation:** -Create a PSP as described in the Kubernetes documentation, ensuring that the -`.spec.hostPID` field is omitted or set to `false`. - -**Audit:** - -``` -kubectl --kubeconfig=/root/.kube/config get psp -o json | jq .items[] | jq -r 'select((.spec.hostPID == null) or (.spec.hostPID == false))' | jq .metadata.name | wc -l | xargs -I {} echo '--count={}' -``` - -**Expected result**: - -``` -1 is greater than 0 -``` - -#### 5.2.3 Minimize the admission of containers wishing to share the host IPC namespace (Scored) - -**Result:** PASS - -**Remediation:** -Create a PSP as described in the Kubernetes documentation, ensuring that the -`.spec.hostIPC` field is omitted or set to `false`. - -**Audit:** - -``` -kubectl --kubeconfig=/root/.kube/config get psp -o json | jq .items[] | jq -r 'select((.spec.hostIPC == null) or (.spec.hostIPC == false))' | jq .metadata.name | wc -l | xargs -I {} echo '--count={}' -``` - -**Expected result**: - -``` -1 is greater than 0 -``` - -#### 5.2.4 Minimize the admission of containers wishing to share the host network namespace (Scored) - -**Result:** PASS - -**Remediation:** -Create a PSP as described in the Kubernetes documentation, ensuring that the -`.spec.hostNetwork` field is omitted or set to `false`. - -**Audit:** - -``` -kubectl --kubeconfig=/root/.kube/config get psp -o json | jq .items[] | jq -r 'select((.spec.hostNetwork == null) or (.spec.hostNetwork == false))' | jq .metadata.name | wc -l | xargs -I {} echo '--count={}' -``` - -**Expected result**: - -``` -1 is greater than 0 -``` - -#### 5.2.5 Minimize the admission of containers with `allowPrivilegeEscalation` (Scored) - -**Result:** PASS - -**Remediation:** -Create a PSP as described in the Kubernetes documentation, ensuring that the -`.spec.allowPrivilegeEscalation` field is omitted or set to `false`. - -**Audit:** - -``` -kubectl --kubeconfig=/root/.kube/config get psp -o json | jq .items[] | jq -r 'select((.spec.allowPrivilegeEscalation == null) or (.spec.allowPrivilegeEscalation == false))' | jq .metadata.name | wc -l | xargs -I {} echo '--count={}' -``` - -**Expected result**: - -``` -1 is greater than 0 -``` - -### 5.3 Network Policies and CNI - -#### 5.3.2 Ensure that all Namespaces have Network Policies defined (Scored) - -**Result:** PASS - -**Remediation:** -Follow the documentation and create `NetworkPolicy` objects as you need them. - -**Audit Script:** 5.3.2.sh - -``` -#!/bin/bash -e - -export KUBECONFIG=${KUBECONFIG:-"/root/.kube/config"} - -kubectl version > /dev/null -if [ $? -ne 0 ]; then - echo "fail: kubectl failed" - exit 1 -fi - -for namespace in $(kubectl get namespaces -A -o json | jq -r '.items[].metadata.name'); do - policy_count=$(kubectl get networkpolicy -n ${namespace} -o json | jq '.items | length') - if [ ${policy_count} -eq 0 ]; then - echo "fail: ${namespace}" - exit 1 - fi -done - -echo "pass" -``` - -**Audit Execution:** - -``` -./5.3.2.sh -``` - -**Expected result**: - -``` -'pass' is present -``` - -### 5.6 General Policies - -#### 5.6.4 The default namespace should not be used (Scored) - -**Result:** PASS - -**Remediation:** -Ensure that namespaces are created to allow for appropriate segregation of Kubernetes -resources and that all new resources are created in a specific namespace. - -**Audit Script:** 5.6.4.sh - -``` -#!/bin/bash -e - -export KUBECONFIG=${KUBECONFIG:-/root/.kube/config} - -kubectl version > /dev/null -if [[ $? -gt 0 ]]; then - echo "fail: kubectl failed" - exit 1 -fi - -default_resources=$(kubectl get all -o json | jq --compact-output '.items[] | select((.kind == "Service") and (.metadata.name == "kubernetes") and (.metadata.namespace == "default") | not)' | wc -l) - -echo "--count=${default_resources}" -``` - -**Audit Execution:** - -``` -./5.6.4.sh -``` - -**Expected result**: - -``` -'0' is equal to '0' -``` diff --git a/content/rancher/v2.6/en/security/rancher-2.5/1.5-hardening-2.5/_index.md b/content/rancher/v2.6/en/security/rancher-2.5/1.5-hardening-2.5/_index.md deleted file mode 100644 index 7f64bbbc6a9..00000000000 --- a/content/rancher/v2.6/en/security/rancher-2.5/1.5-hardening-2.5/_index.md +++ /dev/null @@ -1,720 +0,0 @@ ---- -title: Hardening Guide with CIS 1.5 Benchmark -weight: 200 ---- - -This document provides prescriptive guidance for hardening a production installation of a RKE cluster to be used with Rancher v2.5. It outlines the configurations and controls required to address Kubernetes benchmark controls from the Center for Information Security (CIS). - -> This hardening guide describes how to secure the nodes in your cluster, and it is recommended to follow this guide before installing Kubernetes. - -This hardening guide is intended to be used for RKE clusters and associated with specific versions of the CIS Kubernetes Benchmark, Kubernetes, and Rancher: - - Rancher Version | CIS Benchmark Version | Kubernetes Version -----------------|-----------------------|------------------ - Rancher v2.5 | Benchmark v1.5 | Kubernetes 1.15 - -[Click here to download a PDF version of this document](https://releases.rancher.com/documents/security/2.5/Rancher_Hardening_Guide_CIS_1.5.pdf) - -### Overview - -This document provides prescriptive guidance for hardening a RKE cluster to be used for installing Rancher v2.5 with Kubernetes v1.15 or provisioning a RKE cluster with Kubernetes 1.15 to be used within Rancher v2.5. It outlines the configurations required to address Kubernetes benchmark controls from the Center for Information Security (CIS). - -For more detail about evaluating a hardened cluster against the official CIS benchmark, refer to the [CIS 1.5 Benchmark - Self-Assessment Guide - Rancher v2.5]({{< baseurl >}}/rancher/v2.6/en/security/rancher-2.5/1.5-benchmark-2.5/). - -#### Known Issues - -- Rancher **exec shell** and **view logs** for pods are **not** functional in a CIS 1.5 hardened setup when only public IP is provided when registering custom nodes. This functionality requires a private IP to be provided when registering the custom nodes. -- When setting the `default_pod_security_policy_template_id:` to `restricted` Rancher creates **RoleBindings** and **ClusterRoleBindings** on the default service accounts. The CIS 1.5 5.1.5 check requires the default service accounts have no roles or cluster roles bound to it apart from the defaults. In addition the default service accounts should be configured such that it does not provide a service account token and does not have any explicit rights assignments. - -### Configure Kernel Runtime Parameters - -The following `sysctl` configuration is recommended for all nodes type in the cluster. Set the following parameters in `/etc/sysctl.d/90-kubelet.conf`: - -``` -vm.overcommit_memory=1 -vm.panic_on_oom=0 -kernel.panic=10 -kernel.panic_on_oops=1 -kernel.keys.root_maxbytes=25000000 -``` - -Run `sysctl -p /etc/sysctl.d/90-kubelet.conf` to enable the settings. - -### Configure `etcd` user and group -A user account and group for the **etcd** service is required to be setup before installing RKE. The **uid** and **gid** for the **etcd** user will be used in the RKE **config.yml** to set the proper permissions for files and directories during installation time. - -#### create `etcd` user and group -To create the **etcd** group run the following console commands. - -The commands below use `52034` for **uid** and **gid** are for example purposes. Any valid unused **uid** or **gid** could also be used in lieu of `52034`. - -``` -groupadd --gid 52034 etcd -useradd --comment "etcd service account" --uid 52034 --gid 52034 etcd -``` - -Update the RKE **config.yml** with the **uid** and **gid** of the **etcd** user: - -``` yaml -services: - etcd: - gid: 52034 - uid: 52034 -``` - -#### Set `automountServiceAccountToken` to `false` for `default` service accounts -Kubernetes provides a default service account which is used by cluster workloads where no specific service account is assigned to the pod. Where access to the Kubernetes API from a pod is required, a specific service account should be created for that pod, and rights granted to that service account. The default service account should be configured such that it does not provide a service account token and does not have any explicit rights assignments. - -For each namespace including **default** and **kube-system** on a standard RKE install the **default** service account must include this value: - -``` -automountServiceAccountToken: false -``` - -Save the following yaml to a file called `account_update.yaml` - -``` yaml -apiVersion: v1 -kind: ServiceAccount -metadata: - name: default -automountServiceAccountToken: false -``` - -Create a bash script file called `account_update.sh`. Be sure to `chmod +x account_update.sh` so the script has execute permissions. - -``` -#!/bin/bash -e - -for namespace in $(kubectl get namespaces -A -o json | jq -r '.items[].metadata.name'); do - kubectl patch serviceaccount default -n ${namespace} -p "$(cat account_update.yaml)" -done -``` - -### Ensure that all Namespaces have Network Policies defined - -Running different applications on the same Kubernetes cluster creates a risk of one -compromised application attacking a neighboring application. Network segmentation is -important to ensure that containers can communicate only with those they are supposed -to. A network policy is a specification of how selections of pods are allowed to -communicate with each other and other network endpoints. - -Network Policies are namespace scoped. When a network policy is introduced to a given -namespace, all traffic not allowed by the policy is denied. However, if there are no network -policies in a namespace all traffic will be allowed into and out of the pods in that -namespace. To enforce network policies, a CNI (container network interface) plugin must be enabled. -This guide uses [canal](https://github.com/projectcalico/canal) to provide the policy enforcement. -Additional information about CNI providers can be found -[here](https://rancher.com/blog/2019/2019-03-21-comparing-kubernetes-cni-providers-flannel-calico-canal-and-weave/) - -Once a CNI provider is enabled on a cluster a default network policy can be applied. For reference purposes a -**permissive** example is provide below. If you want to allow all traffic to all pods in a namespace -(even if policies are added that cause some pods to be treated as “isolatedâ€�), -you can create a policy that explicitly allows all traffic in that namespace. Save the following `yaml` as -`default-allow-all.yaml`. Additional [documentation](https://kubernetes.io/docs/concepts/services-networking/network-policies/) -about network policies can be found on the Kubernetes site. - -> This `NetworkPolicy` is not recommended for production use - -``` yaml ---- -apiVersion: networking.k8s.io/v1 -kind: NetworkPolicy -metadata: - name: default-allow-all -spec: - podSelector: {} - ingress: - - {} - egress: - - {} - policyTypes: - - Ingress - - Egress -``` - -Create a bash script file called `apply_networkPolicy_to_all_ns.sh`. Be sure to -`chmod +x apply_networkPolicy_to_all_ns.sh` so the script has execute permissions. - -``` -#!/bin/bash -e - -for namespace in $(kubectl get namespaces -A -o json | jq -r '.items[].metadata.name'); do - kubectl apply -f default-allow-all.yaml -n ${namespace} -done -``` -Execute this script to apply the `default-allow-all.yaml` the **permissive** `NetworkPolicy` to all namespaces. - -### Reference Hardened RKE `cluster.yml` configuration - -The reference `cluster.yml` is used by the RKE CLI that provides the configuration needed to achieve a hardened install -of Rancher Kubernetes Engine (RKE). Install [documentation](https://rancher.com/docs/rke/latest/en/installation/) is -provided with additional details about the configuration items. This reference `cluster.yml` does not include the required **nodes** directive which will vary depending on your environment. Documentation for node configuration can be found here: https://rancher.com/docs/rke/latest/en/config-options/nodes - - -``` yaml -# If you intend to deploy Kubernetes in an air-gapped environment, -# please consult the documentation on how to configure custom RKE images. -kubernetes_version: "v1.15.9-rancher1-1" -enable_network_policy: true -default_pod_security_policy_template_id: "restricted" -# the nodes directive is required and will vary depending on your environment -# documentation for node configuration can be found here: -# https://rancher.com/docs/rke/latest/en/config-options/nodes -nodes: -services: - etcd: - uid: 52034 - gid: 52034 - kube-api: - pod_security_policy: true - secrets_encryption_config: - enabled: true - audit_log: - enabled: true - admission_configuration: - event_rate_limit: - enabled: true - kube-controller: - extra_args: - feature-gates: "RotateKubeletServerCertificate=true" - scheduler: - image: "" - extra_args: {} - extra_binds: [] - extra_env: [] - kubelet: - generate_serving_certificate: true - extra_args: - feature-gates: "RotateKubeletServerCertificate=true" - protect-kernel-defaults: "true" - tls-cipher-suites: "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256" - extra_binds: [] - extra_env: [] - cluster_domain: "" - infra_container_image: "" - cluster_dns_server: "" - fail_swap_on: false - kubeproxy: - image: "" - extra_args: {} - extra_binds: [] - extra_env: [] -network: - plugin: "" - options: {} - mtu: 0 - node_selector: {} -authentication: - strategy: "" - sans: [] - webhook: null -addons: | - --- - apiVersion: v1 - kind: Namespace - metadata: - name: ingress-nginx - --- - apiVersion: rbac.authorization.k8s.io/v1 - kind: Role - metadata: - name: default-psp-role - namespace: ingress-nginx - rules: - - apiGroups: - - extensions - resourceNames: - - default-psp - resources: - - podsecuritypolicies - verbs: - - use - --- - apiVersion: rbac.authorization.k8s.io/v1 - kind: RoleBinding - metadata: - name: default-psp-rolebinding - namespace: ingress-nginx - roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: default-psp-role - subjects: - - apiGroup: rbac.authorization.k8s.io - kind: Group - name: system:serviceaccounts - - apiGroup: rbac.authorization.k8s.io - kind: Group - name: system:authenticated - --- - apiVersion: v1 - kind: Namespace - metadata: - name: cattle-system - --- - apiVersion: rbac.authorization.k8s.io/v1 - kind: Role - metadata: - name: default-psp-role - namespace: cattle-system - rules: - - apiGroups: - - extensions - resourceNames: - - default-psp - resources: - - podsecuritypolicies - verbs: - - use - --- - apiVersion: rbac.authorization.k8s.io/v1 - kind: RoleBinding - metadata: - name: default-psp-rolebinding - namespace: cattle-system - roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: default-psp-role - subjects: - - apiGroup: rbac.authorization.k8s.io - kind: Group - name: system:serviceaccounts - - apiGroup: rbac.authorization.k8s.io - kind: Group - name: system:authenticated - --- - apiVersion: policy/v1beta1 - kind: PodSecurityPolicy - metadata: - name: restricted - spec: - requiredDropCapabilities: - - NET_RAW - privileged: false - allowPrivilegeEscalation: false - defaultAllowPrivilegeEscalation: false - fsGroup: - rule: RunAsAny - runAsUser: - rule: MustRunAsNonRoot - seLinux: - rule: RunAsAny - supplementalGroups: - rule: RunAsAny - volumes: - - emptyDir - - secret - - persistentVolumeClaim - - downwardAPI - - configMap - - projected - --- - apiVersion: rbac.authorization.k8s.io/v1 - kind: ClusterRole - metadata: - name: psp:restricted - rules: - - apiGroups: - - extensions - resourceNames: - - restricted - resources: - - podsecuritypolicies - verbs: - - use - --- - apiVersion: rbac.authorization.k8s.io/v1 - kind: ClusterRoleBinding - metadata: - name: psp:restricted - roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: psp:restricted - subjects: - - apiGroup: rbac.authorization.k8s.io - kind: Group - name: system:serviceaccounts - - apiGroup: rbac.authorization.k8s.io - kind: Group - name: system:authenticated - --- - apiVersion: v1 - kind: ServiceAccount - metadata: - name: tiller - namespace: kube-system - --- - apiVersion: rbac.authorization.k8s.io/v1 - kind: ClusterRoleBinding - metadata: - name: tiller - roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: cluster-admin - subjects: - - kind: ServiceAccount - name: tiller - namespace: kube-system - -addons_include: [] -system_images: - etcd: "" - alpine: "" - nginx_proxy: "" - cert_downloader: "" - kubernetes_services_sidecar: "" - kubedns: "" - dnsmasq: "" - kubedns_sidecar: "" - kubedns_autoscaler: "" - coredns: "" - coredns_autoscaler: "" - kubernetes: "" - flannel: "" - flannel_cni: "" - calico_node: "" - calico_cni: "" - calico_controllers: "" - calico_ctl: "" - calico_flexvol: "" - canal_node: "" - canal_cni: "" - canal_flannel: "" - canal_flexvol: "" - weave_node: "" - weave_cni: "" - pod_infra_container: "" - ingress: "" - ingress_backend: "" - metrics_server: "" - windows_pod_infra_container: "" -ssh_key_path: "" -ssh_cert_path: "" -ssh_agent_auth: false -authorization: - mode: "" - options: {} -ignore_docker_version: false -private_registries: [] -ingress: - provider: "" - options: {} - node_selector: {} - extra_args: {} - dns_policy: "" - extra_envs: [] - extra_volumes: [] - extra_volume_mounts: [] -cluster_name: "" -prefix_path: "" -addon_job_timeout: 0 -bastion_host: - address: "" - port: "" - user: "" - ssh_key: "" - ssh_key_path: "" - ssh_cert: "" - ssh_cert_path: "" -monitoring: - provider: "" - options: {} - node_selector: {} -restore: - restore: false - snapshot_name: "" -dns: null -``` - -### Reference Hardened RKE Template configuration - -The reference RKE Template provides the configuration needed to achieve a hardened install of Kubenetes. -RKE Templates are used to provision Kubernetes and define Rancher settings. Follow the Rancher -[documentaion](https://rancher.com/docs/rancher/v2.6/en/installation) for additional installation and RKE Template details. - -``` yaml -# -# Cluster Config -# -default_pod_security_policy_template_id: restricted -docker_root_dir: /var/lib/docker -enable_cluster_alerting: false -enable_cluster_monitoring: false -enable_network_policy: true -# -# Rancher Config -# -rancher_kubernetes_engine_config: - addon_job_timeout: 30 - addons: |- - --- - apiVersion: v1 - kind: Namespace - metadata: - name: ingress-nginx - --- - apiVersion: rbac.authorization.k8s.io/v1 - kind: Role - metadata: - name: default-psp-role - namespace: ingress-nginx - rules: - - apiGroups: - - extensions - resourceNames: - - default-psp - resources: - - podsecuritypolicies - verbs: - - use - --- - apiVersion: rbac.authorization.k8s.io/v1 - kind: RoleBinding - metadata: - name: default-psp-rolebinding - namespace: ingress-nginx - roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: default-psp-role - subjects: - - apiGroup: rbac.authorization.k8s.io - kind: Group - name: system:serviceaccounts - - apiGroup: rbac.authorization.k8s.io - kind: Group - name: system:authenticated - --- - apiVersion: v1 - kind: Namespace - metadata: - name: cattle-system - --- - apiVersion: rbac.authorization.k8s.io/v1 - kind: Role - metadata: - name: default-psp-role - namespace: cattle-system - rules: - - apiGroups: - - extensions - resourceNames: - - default-psp - resources: - - podsecuritypolicies - verbs: - - use - --- - apiVersion: rbac.authorization.k8s.io/v1 - kind: RoleBinding - metadata: - name: default-psp-rolebinding - namespace: cattle-system - roleRef: - apiGroup: rbac.authorization.k8s.io - kind: Role - name: default-psp-role - subjects: - - apiGroup: rbac.authorization.k8s.io - kind: Group - name: system:serviceaccounts - - apiGroup: rbac.authorization.k8s.io - kind: Group - name: system:authenticated - --- - apiVersion: policy/v1beta1 - kind: PodSecurityPolicy - metadata: - name: restricted - spec: - requiredDropCapabilities: - - NET_RAW - privileged: false - allowPrivilegeEscalation: false - defaultAllowPrivilegeEscalation: false - fsGroup: - rule: RunAsAny - runAsUser: - rule: MustRunAsNonRoot - seLinux: - rule: RunAsAny - supplementalGroups: - rule: RunAsAny - volumes: - - emptyDir - - secret - - persistentVolumeClaim - - downwardAPI - - configMap - - projected - --- - apiVersion: rbac.authorization.k8s.io/v1 - kind: ClusterRole - metadata: - name: psp:restricted - rules: - - apiGroups: - - extensions - resourceNames: - - restricted - resources: - - podsecuritypolicies - verbs: - - use - --- - apiVersion: rbac.authorization.k8s.io/v1 - kind: ClusterRoleBinding - metadata: - name: psp:restricted - roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: psp:restricted - subjects: - - apiGroup: rbac.authorization.k8s.io - kind: Group - name: system:serviceaccounts - - apiGroup: rbac.authorization.k8s.io - kind: Group - name: system:authenticated - --- - apiVersion: v1 - kind: ServiceAccount - metadata: - name: tiller - namespace: kube-system - --- - apiVersion: rbac.authorization.k8s.io/v1 - kind: ClusterRoleBinding - metadata: - name: tiller - roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: cluster-admin - subjects: - - kind: ServiceAccount - name: tiller - namespace: kube-system - ignore_docker_version: true - kubernetes_version: v1.15.9-rancher1-1 -# -# If you are using calico on AWS -# -# network: -# plugin: calico -# calico_network_provider: -# cloud_provider: aws -# -# # To specify flannel interface -# -# network: -# plugin: flannel -# flannel_network_provider: -# iface: eth1 -# -# # To specify flannel interface for canal plugin -# -# network: -# plugin: canal -# canal_network_provider: -# iface: eth1 -# - network: - mtu: 0 - plugin: canal -# -# services: -# kube-api: -# service_cluster_ip_range: 10.43.0.0/16 -# kube-controller: -# cluster_cidr: 10.42.0.0/16 -# service_cluster_ip_range: 10.43.0.0/16 -# kubelet: -# cluster_domain: cluster.local -# cluster_dns_server: 10.43.0.10 -# - services: - etcd: - backup_config: - enabled: false - interval_hours: 12 - retention: 6 - safe_timestamp: false - creation: 12h - extra_args: - election-timeout: '5000' - heartbeat-interval: '500' - gid: 52034 - retention: 72h - snapshot: false - uid: 52034 - kube_api: - always_pull_images: false - audit_log: - enabled: true - event_rate_limit: - enabled: true - pod_security_policy: true - secrets_encryption_config: - enabled: true - service_node_port_range: 30000-32767 - kube_controller: - extra_args: - address: 127.0.0.1 - feature-gates: RotateKubeletServerCertificate=true - profiling: 'false' - terminated-pod-gc-threshold: '1000' - kubelet: - extra_args: - anonymous-auth: 'false' - event-qps: '0' - feature-gates: RotateKubeletServerCertificate=true - make-iptables-util-chains: 'true' - protect-kernel-defaults: 'true' - streaming-connection-idle-timeout: 1800s - tls-cipher-suites: >- - TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 - fail_swap_on: false - generate_serving_certificate: true - scheduler: - extra_args: - address: 127.0.0.1 - profiling: 'false' - ssh_agent_auth: false -windows_prefered_cluster: false -``` - -### Hardened Reference Ubuntu 18.04 LTS **cloud-config**: - -The reference **cloud-config** is generally used in cloud infrastructure environments to allow for -configuration management of compute instances. The reference config configures Ubuntu operating system level settings -needed before installing kubernetes. - -``` yaml -#cloud-config -packages: - - curl - - jq -runcmd: - - sysctl -w vm.overcommit_memory=1 - - sysctl -w kernel.panic=10 - - sysctl -w kernel.panic_on_oops=1 - - curl https://releases.rancher.com/install-docker/18.09.sh | sh - - usermod -aG docker ubuntu - - return=1; while [ $return != 0 ]; do sleep 2; docker ps; return=$?; done - - addgroup --gid 52034 etcd - - useradd --comment "etcd service account" --uid 52034 --gid 52034 etcd -write_files: - - path: /etc/sysctl.d/kubelet.conf - owner: root:root - permissions: "0644" - content: | - vm.overcommit_memory=1 - kernel.panic=10 - kernel.panic_on_oops=1 -``` diff --git a/content/rancher/v2.6/en/security/rancher-2.5/1.6-benchmark-2.5/_index.md b/content/rancher/v2.6/en/security/rancher-2.5/1.6-benchmark-2.5/_index.md deleted file mode 100644 index d7803779eb6..00000000000 --- a/content/rancher/v2.6/en/security/rancher-2.5/1.6-benchmark-2.5/_index.md +++ /dev/null @@ -1,3317 +0,0 @@ ---- -title: CIS 1.6 Benchmark - Self-Assessment Guide - Rancher v2.5.4 -weight: 101 ---- - -### CIS 1.6 Kubernetes Benchmark - Rancher v2.5.4 with Kubernetes v1.18 - -[Click here to download a PDF version of this document](https://releases.rancher.com/documents/security/2.5/Rancher_1.6_Benchmark_Assessment.pdf) - -#### Overview - -This document is a companion to the Rancher v2.5.4 security hardening guide. The hardening guide provides prescriptive guidance for hardening a production installation of Rancher, and this benchmark guide is meant to help you evaluate the level of security of the hardened cluster against each control in the benchmark. - -This guide corresponds to specific versions of the hardening guide, Rancher, CIS Benchmark, and Kubernetes: - -Hardening Guide Version | Rancher Version | CIS Benchmark Version | Kubernetes Version ----------------------------|----------|---------|------- -Hardening Guide with CIS 1.6 Benchmark | Rancher v2.5.4 | CIS 1.6| Kubernetes v1.18 - -Because Rancher and RKE install Kubernetes services as Docker containers, many of the control verification checks in the CIS Kubernetes Benchmark don't apply and will have a result of `Not Applicable`. This guide will walk through the various controls and provide updated example commands to audit compliance in Rancher-created clusters. - -This document is to be used by Rancher operators, security teams, auditors and decision makers. - -For more detail about each audit, including rationales and remediations for failing tests, you can refer to the corresponding section of the CIS Kubernetes Benchmark 1.6. You can download the benchmark after logging in to [CISecurity.org]( https://www.cisecurity.org/benchmark/kubernetes/). - -#### Testing controls methodology - -Rancher and RKE install Kubernetes services via Docker containers. Configuration is defined by arguments passed to the container at the time of initialization, not via configuration files. - -Where control audits differ from the original CIS benchmark, the audit commands specific to Rancher Labs are provided for testing. -When performing the tests, you will need access to the Docker command line on the hosts of all three RKE roles. The commands also make use of the the [jq](https://stedolan.github.io/jq/) and [kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) (with valid config) tools to and are required in the testing and evaluation of test results. - -### Controls - -## 1.1 Etcd Node Configuration Files -### 1.1.11 Ensure that the etcd data directory permissions are set to 700 or more restrictive (Automated) - -**Result:** pass - -**Remediation:** -On the etcd server node, get the etcd data directory, passed as an argument --data-dir, -from the below command: -ps -ef | grep etcd Run the below command (based on the etcd data directory found above). For example, -chmod 700 /var/lib/etcd - - -**Audit:** - -```bash -stat -c %a /node/var/lib/etcd -``` - -**Expected Result**: - -```console -'700' is equal to '700' -``` - -**Returned Value**: - -```console -700 - -``` -### 1.1.12 Ensure that the etcd data directory ownership is set to etcd:etcd (Automated) - -**Result:** pass - -**Remediation:** -On the etcd server node, get the etcd data directory, passed as an argument --data-dir, -from the below command: -ps -ef | grep etcd -Run the below command (based on the etcd data directory found above). -For example, chown etcd:etcd /var/lib/etcd - -A system service account is required for etcd data directory ownership. -Refer to Rancher's hardening guide for more details on how to configure this ownership. - - -**Audit:** - -```bash -stat -c %U:%G /node/var/lib/etcd -``` - -**Expected Result**: - -```console -'etcd:etcd' is present -``` - -**Returned Value**: - -```console -etcd:etcd - -``` -### 1.1.19 Ensure that the Kubernetes PKI directory and file ownership is set to root:root (Automated) - -**Result:** pass - -**Remediation:** -Run the below command (based on the file location on your system) on the master node. -For example, -chown -R root:root /etc/kubernetes/pki/ - - -**Audit:** - -```bash -check_files_owner_in_dir.sh /node/etc/kubernetes/ssl -``` - -**Expected Result**: - -```console -'true' is equal to 'true' -``` - -**Audit Script:** -```bash -#!/usr/bin/env bash - -# This script is used to ensure the owner is set to root:root for -# the given directory and all the files in it -# -# inputs: -# $1 = /full/path/to/directory -# -# outputs: -# true/false - -INPUT_DIR=$1 - -if [[ "${INPUT_DIR}" == "" ]]; then - echo "false" - exit -fi - -if [[ $(stat -c %U:%G ${INPUT_DIR}) != "root:root" ]]; then - echo "false" - exit -fi - -statInfoLines=$(stat -c "%n %U:%G" ${INPUT_DIR}/*) -while read -r statInfoLine; do - f=$(echo ${statInfoLine} | cut -d' ' -f1) - p=$(echo ${statInfoLine} | cut -d' ' -f2) - - if [[ $(basename "$f" .pem) == "kube-etcd-"* ]]; then - if [[ "$p" != "root:root" && "$p" != "etcd:etcd" ]]; then - echo "false" - exit - fi - else - if [[ "$p" != "root:root" ]]; then - echo "false" - exit - fi - fi -done <<< "${statInfoLines}" - - -echo "true" -exit - -``` -**Returned Value**: - -```console -true - -``` -### 1.1.20 Ensure that the Kubernetes PKI certificate file permissions are set to 644 or more restrictive (Automated) - -**Result:** pass - -**Remediation:** -Run the below command (based on the file location on your system) on the master node. -For example, -chmod -R 644 /etc/kubernetes/pki/*.crt - - -**Audit:** - -```bash -check_files_permissions.sh /node/etc/kubernetes/ssl/!(*key).pem -``` - -**Expected Result**: - -```console -'true' is equal to 'true' -``` - -**Audit Script:** -```bash -#!/usr/bin/env bash - -# This script is used to ensure the file permissions are set to 644 or -# more restrictive for all files in a given directory or a wildcard -# selection of files -# -# inputs: -# $1 = /full/path/to/directory or /path/to/fileswithpattern -# ex: !(*key).pem -# -# $2 (optional) = permission (ex: 600) -# -# outputs: -# true/false - -# Turn on "extended glob" for use of '!' in wildcard -shopt -s extglob - -# Turn off history to avoid surprises when using '!' -set -H - -USER_INPUT=$1 - -if [[ "${USER_INPUT}" == "" ]]; then - echo "false" - exit -fi - - -if [[ -d ${USER_INPUT} ]]; then - PATTERN="${USER_INPUT}/*" -else - PATTERN="${USER_INPUT}" -fi - -PERMISSION="" -if [[ "$2" != "" ]]; then - PERMISSION=$2 -fi - -FILES_PERMISSIONS=$(stat -c %n\ %a ${PATTERN}) - -while read -r fileInfo; do - p=$(echo ${fileInfo} | cut -d' ' -f2) - - if [[ "${PERMISSION}" != "" ]]; then - if [[ "$p" != "${PERMISSION}" ]]; then - echo "false" - exit - fi - else - if [[ "$p" != "644" && "$p" != "640" && "$p" != "600" ]]; then - echo "false" - exit - fi - fi -done <<< "${FILES_PERMISSIONS}" - - -echo "true" -exit - -``` -**Returned Value**: - -```console -true - -``` -### 1.1.21 Ensure that the Kubernetes PKI key file permissions are set to 600 (Automated) - -**Result:** pass - -**Remediation:** -Run the below command (based on the file location on your system) on the master node. -For example, -chmod -R 600 /etc/kubernetes/ssl/*key.pem - - -**Audit:** - -```bash -check_files_permissions.sh /node/etc/kubernetes/ssl/*key.pem 600 -``` - -**Expected Result**: - -```console -'true' is equal to 'true' -``` - -**Audit Script:** -```bash -#!/usr/bin/env bash - -# This script is used to ensure the file permissions are set to 644 or -# more restrictive for all files in a given directory or a wildcard -# selection of files -# -# inputs: -# $1 = /full/path/to/directory or /path/to/fileswithpattern -# ex: !(*key).pem -# -# $2 (optional) = permission (ex: 600) -# -# outputs: -# true/false - -# Turn on "extended glob" for use of '!' in wildcard -shopt -s extglob - -# Turn off history to avoid surprises when using '!' -set -H - -USER_INPUT=$1 - -if [[ "${USER_INPUT}" == "" ]]; then - echo "false" - exit -fi - - -if [[ -d ${USER_INPUT} ]]; then - PATTERN="${USER_INPUT}/*" -else - PATTERN="${USER_INPUT}" -fi - -PERMISSION="" -if [[ "$2" != "" ]]; then - PERMISSION=$2 -fi - -FILES_PERMISSIONS=$(stat -c %n\ %a ${PATTERN}) - -while read -r fileInfo; do - p=$(echo ${fileInfo} | cut -d' ' -f2) - - if [[ "${PERMISSION}" != "" ]]; then - if [[ "$p" != "${PERMISSION}" ]]; then - echo "false" - exit - fi - else - if [[ "$p" != "644" && "$p" != "640" && "$p" != "600" ]]; then - echo "false" - exit - fi - fi -done <<< "${FILES_PERMISSIONS}" - - -echo "true" -exit - -``` -**Returned Value**: - -```console -true - -``` -### 1.1.1 Ensure that the API server pod specification file permissions are set to 644 or more restrictive (Automated) - -**Result:** notApplicable - -**Remediation:** -Cluster provisioned by RKE doesn't require or maintain a configuration file for kube-apiserver. -All configuration is passed in as arguments at container run time. - - -**Audit:** - -```bash -/bin/sh -c 'if test -e /etc/kubernetes/manifests/kube-apiserver.yaml; then stat -c permissions=%a /etc/kubernetes/manifests/kube-apiserver.yaml; fi' -``` - - -### 1.1.2 Ensure that the API server pod specification file ownership is set to root:root (Automated) - -**Result:** notApplicable - -**Remediation:** -Cluster provisioned by RKE doesn't require or maintain a configuration file for kube-apiserver. -All configuration is passed in as arguments at container run time. - - -**Audit:** - -```bash -/bin/sh -c 'if test -e /etc/kubernetes/manifests/kube-apiserver.yaml; then stat -c %U:%G /etc/kubernetes/manifests/kube-apiserver.yaml; fi' -``` - - -### 1.1.3 Ensure that the controller manager pod specification file permissions are set to 644 or more restrictive (Automated) - -**Result:** notApplicable - -**Remediation:** -Cluster provisioned by RKE doesn't require or maintain a configuration file for controller-manager. -All configuration is passed in as arguments at container run time. - - -**Audit:** - -```bash -/bin/sh -c 'if test -e /etc/kubernetes/manifests/kube-controller-manager.yaml; then stat -c permissions=%a /etc/kubernetes/manifests/kube-controller-manager.yaml; fi' -``` - - -### 1.1.4 Ensure that the controller manager pod specification file ownership is set to root:root (Automated) - -**Result:** notApplicable - -**Remediation:** -Cluster provisioned by RKE doesn't require or maintain a configuration file for controller-manager. -All configuration is passed in as arguments at container run time. - - -**Audit:** - -```bash -/bin/sh -c 'if test -e /etc/kubernetes/manifests/kube-controller-manager.yaml; then stat -c %U:%G /etc/kubernetes/manifests/kube-controller-manager.yaml; fi' -``` - - -### 1.1.5 Ensure that the scheduler pod specification file permissions are set to 644 or more restrictive (Automated) - -**Result:** notApplicable - -**Remediation:** -Cluster provisioned by RKE doesn't require or maintain a configuration file for scheduler. -All configuration is passed in as arguments at container run time. - - -**Audit:** - -```bash -/bin/sh -c 'if test -e /etc/kubernetes/manifests/kube-scheduler.yaml; then stat -c permissions=%a /etc/kubernetes/manifests/kube-scheduler.yaml; fi' -``` - - -### 1.1.6 Ensure that the scheduler pod specification file ownership is set to root:root (Automated) - -**Result:** notApplicable - -**Remediation:** -Cluster provisioned by RKE doesn't require or maintain a configuration file for scheduler. -All configuration is passed in as arguments at container run time. - - -**Audit:** - -```bash -/bin/sh -c 'if test -e /etc/kubernetes/manifests/kube-scheduler.yaml; then stat -c %U:%G /etc/kubernetes/manifests/kube-scheduler.yaml; fi' -``` - - -### 1.1.7 Ensure that the etcd pod specification file permissions are set to 644 or more restrictive (Automated) - -**Result:** notApplicable - -**Remediation:** -Cluster provisioned by RKE doesn't require or maintain a configuration file for etcd. -All configuration is passed in as arguments at container run time. - - -**Audit:** - -```bash -/bin/sh -c 'if test -e /etc/kubernetes/manifests/etcd.yaml; then stat -c permissions=%a /etc/kubernetes/manifests/etcd.yaml; fi' -``` - - -### 1.1.8 Ensure that the etcd pod specification file ownership is set to root:root (Automated) - -**Result:** notApplicable - -**Remediation:** -Cluster provisioned by RKE doesn't require or maintain a configuration file for etcd. -All configuration is passed in as arguments at container run time. - - -**Audit:** - -```bash -/bin/sh -c 'if test -e /etc/kubernetes/manifests/etcd.yaml; then stat -c %U:%G /etc/kubernetes/manifests/etcd.yaml; fi' -``` - - -### 1.1.9 Ensure that the Container Network Interface file permissions are set to 644 or more restrictive (Manual) - -**Result:** warn - -**Remediation:** -Run the below command (based on the file location on your system) on the master node. -For example, -chmod 644 - - -**Audit:** - -```bash -stat -c permissions=%a -``` - - -### 1.1.10 Ensure that the Container Network Interface file ownership is set to root:root (Manual) - -**Result:** warn - -**Remediation:** -Run the below command (based on the file location on your system) on the master node. -For example, -chown root:root - - -**Audit:** - -```bash -stat -c %U:%G -``` - - -### 1.1.13 Ensure that the admin.conf file permissions are set to 644 or more restrictive (Automated) - -**Result:** notApplicable - -**Remediation:** -Cluster provisioned by RKE does not store the kubernetes default kubeconfig credentials file on the nodes. - - -**Audit:** - -```bash -/bin/sh -c 'if test -e /etc/kubernetes/admin.conf; then stat -c permissions=%a /etc/kubernetes/admin.conf; fi' -``` - - -### 1.1.14 Ensure that the admin.conf file ownership is set to root:root (Automated) - -**Result:** notApplicable - -**Remediation:** -Cluster provisioned by RKE does not store the kubernetes default kubeconfig credentials file on the nodes. - - -**Audit:** - -```bash -/bin/sh -c 'if test -e /etc/kubernetes/admin.conf; then stat -c %U:%G /etc/kubernetes/admin.conf; fi' -``` - - -### 1.1.15 Ensure that the scheduler.conf file permissions are set to 644 or more restrictive (Automated) - -**Result:** notApplicable - -**Remediation:** -Cluster provisioned by RKE doesn't require or maintain a configuration file for scheduler. -All configuration is passed in as arguments at container run time. - - -**Audit:** - -```bash -/bin/sh -c 'if test -e scheduler; then stat -c permissions=%a scheduler; fi' -``` - - -### 1.1.16 Ensure that the scheduler.conf file ownership is set to root:root (Automated) - -**Result:** notApplicable - -**Remediation:** -Cluster provisioned by RKE doesn't require or maintain a configuration file for scheduler. -All configuration is passed in as arguments at container run time. - - -**Audit:** - -```bash -/bin/sh -c 'if test -e scheduler; then stat -c %U:%G scheduler; fi' -``` - - -### 1.1.17 Ensure that the controller-manager.conf file permissions are set to 644 or more restrictive (Automated) - -**Result:** notApplicable - -**Remediation:** -Cluster provisioned by RKE doesn't require or maintain a configuration file for controller-manager. -All configuration is passed in as arguments at container run time. - - -**Audit:** - -```bash -/bin/sh -c 'if test -e controllermanager; then stat -c permissions=%a controllermanager; fi' -``` - - -### 1.1.18 Ensure that the controller-manager.conf file ownership is set to root:root (Automated) - -**Result:** notApplicable - -**Remediation:** -Cluster provisioned by RKE doesn't require or maintain a configuration file for controller-manager. -All configuration is passed in as arguments at container run time. - - -**Audit:** - -```bash -/bin/sh -c 'if test -e controllermanager; then stat -c %U:%G controllermanager; fi' -``` - - -## 1.2 API Server -### 1.2.1 Ensure that the --anonymous-auth argument is set to false (Automated) - -**Result:** pass - -**Remediation:** -Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml -on the master node and set the below parameter. ---anonymous-auth=false - - -**Audit:** - -```bash -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected Result**: - -```console -'false' is equal to 'false' -``` - -**Returned Value**: - -```console -root 4643 4626 22 16:15 ? 00:00:46 kube-apiserver --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authorization-mode=Node,RBAC --audit-log-maxsize=100 --audit-log-format=json --requestheader-allowed-names=kube-apiserver-proxy-client --cloud-provider= --etcd-prefix=/registry --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --allow-privileged=true --service-account-lookup=true --admission-control-config-file=/etc/kubernetes/admission.yaml --audit-policy-file=/etc/kubernetes/audit-policy.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --storage-backend=etcd3 --anonymous-auth=false --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --advertise-address=192.168.1.225 --audit-log-maxage=30 --etcd-servers=https://192.168.1.225:2379 --runtime-config=policy/v1beta1/podsecuritypolicy=true --bind-address=0.0.0.0 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --insecure-port=0 --requestheader-group-headers=X-Remote-Group --secure-port=6443 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-extra-headers-prefix=X-Remote-Extra- --profiling=false --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User - -``` -### 1.2.2 Ensure that the --basic-auth-file argument is not set (Automated) - -**Result:** pass - -**Remediation:** -Follow the documentation and configure alternate mechanisms for authentication. Then, -edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml -on the master node and remove the --basic-auth-file= parameter. - - -**Audit:** - -```bash -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected Result**: - -```console -'--basic-auth-file' is not present -``` - -**Returned Value**: - -```console -root 4643 4626 22 16:15 ? 00:00:46 kube-apiserver --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authorization-mode=Node,RBAC --audit-log-maxsize=100 --audit-log-format=json --requestheader-allowed-names=kube-apiserver-proxy-client --cloud-provider= --etcd-prefix=/registry --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --allow-privileged=true --service-account-lookup=true --admission-control-config-file=/etc/kubernetes/admission.yaml --audit-policy-file=/etc/kubernetes/audit-policy.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --storage-backend=etcd3 --anonymous-auth=false --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --advertise-address=192.168.1.225 --audit-log-maxage=30 --etcd-servers=https://192.168.1.225:2379 --runtime-config=policy/v1beta1/podsecuritypolicy=true --bind-address=0.0.0.0 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --insecure-port=0 --requestheader-group-headers=X-Remote-Group --secure-port=6443 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-extra-headers-prefix=X-Remote-Extra- --profiling=false --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User - -``` -### 1.2.3 Ensure that the --token-auth-file parameter is not set (Automated) - -**Result:** pass - -**Remediation:** -Follow the documentation and configure alternate mechanisms for authentication. Then, -edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml -on the master node and remove the --token-auth-file= parameter. - - -**Audit:** - -```bash -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected Result**: - -```console -'--token-auth-file' is not present -``` - -**Returned Value**: - -```console -root 4643 4626 22 16:15 ? 00:00:46 kube-apiserver --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authorization-mode=Node,RBAC --audit-log-maxsize=100 --audit-log-format=json --requestheader-allowed-names=kube-apiserver-proxy-client --cloud-provider= --etcd-prefix=/registry --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --allow-privileged=true --service-account-lookup=true --admission-control-config-file=/etc/kubernetes/admission.yaml --audit-policy-file=/etc/kubernetes/audit-policy.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --storage-backend=etcd3 --anonymous-auth=false --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --advertise-address=192.168.1.225 --audit-log-maxage=30 --etcd-servers=https://192.168.1.225:2379 --runtime-config=policy/v1beta1/podsecuritypolicy=true --bind-address=0.0.0.0 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --insecure-port=0 --requestheader-group-headers=X-Remote-Group --secure-port=6443 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-extra-headers-prefix=X-Remote-Extra- --profiling=false --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User - -``` -### 1.2.4 Ensure that the --kubelet-https argument is set to true (Automated) - -**Result:** pass - -**Remediation:** -Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml -on the master node and remove the --kubelet-https parameter. - - -**Audit:** - -```bash -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected Result**: - -```console -'--kubelet-https' is not present OR '--kubelet-https' is not present -``` - -**Returned Value**: - -```console -root 4643 4626 22 16:15 ? 00:00:46 kube-apiserver --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authorization-mode=Node,RBAC --audit-log-maxsize=100 --audit-log-format=json --requestheader-allowed-names=kube-apiserver-proxy-client --cloud-provider= --etcd-prefix=/registry --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --allow-privileged=true --service-account-lookup=true --admission-control-config-file=/etc/kubernetes/admission.yaml --audit-policy-file=/etc/kubernetes/audit-policy.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --storage-backend=etcd3 --anonymous-auth=false --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --advertise-address=192.168.1.225 --audit-log-maxage=30 --etcd-servers=https://192.168.1.225:2379 --runtime-config=policy/v1beta1/podsecuritypolicy=true --bind-address=0.0.0.0 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --insecure-port=0 --requestheader-group-headers=X-Remote-Group --secure-port=6443 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-extra-headers-prefix=X-Remote-Extra- --profiling=false --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User - -``` -### 1.2.5 Ensure that the --kubelet-client-certificate and --kubelet-client-key arguments are set as appropriate (Automated) - -**Result:** pass - -**Remediation:** -Follow the Kubernetes documentation and set up the TLS connection between the -apiserver and kubelets. Then, edit API server pod specification file -/etc/kubernetes/manifests/kube-apiserver.yaml on the master node and set the -kubelet client certificate and key parameters as below. ---kubelet-client-certificate= ---kubelet-client-key= - - -**Audit:** - -```bash -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected Result**: - -```console -'--kubelet-client-certificate' is present AND '--kubelet-client-key' is present -``` - -**Returned Value**: - -```console -root 4643 4626 22 16:15 ? 00:00:46 kube-apiserver --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authorization-mode=Node,RBAC --audit-log-maxsize=100 --audit-log-format=json --requestheader-allowed-names=kube-apiserver-proxy-client --cloud-provider= --etcd-prefix=/registry --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --allow-privileged=true --service-account-lookup=true --admission-control-config-file=/etc/kubernetes/admission.yaml --audit-policy-file=/etc/kubernetes/audit-policy.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --storage-backend=etcd3 --anonymous-auth=false --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --advertise-address=192.168.1.225 --audit-log-maxage=30 --etcd-servers=https://192.168.1.225:2379 --runtime-config=policy/v1beta1/podsecuritypolicy=true --bind-address=0.0.0.0 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --insecure-port=0 --requestheader-group-headers=X-Remote-Group --secure-port=6443 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-extra-headers-prefix=X-Remote-Extra- --profiling=false --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User - -``` -### 1.2.6 Ensure that the --kubelet-certificate-authority argument is set as appropriate (Automated) - -**Result:** pass - -**Remediation:** -Follow the Kubernetes documentation and setup the TLS connection between -the apiserver and kubelets. Then, edit the API server pod specification file -/etc/kubernetes/manifests/kube-apiserver.yaml on the master node and set the ---kubelet-certificate-authority parameter to the path to the cert file for the certificate authority. ---kubelet-certificate-authority= - - -**Audit:** - -```bash -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected Result**: - -```console -'--kubelet-certificate-authority' is present -``` - -**Returned Value**: - -```console -root 4643 4626 22 16:15 ? 00:00:46 kube-apiserver --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authorization-mode=Node,RBAC --audit-log-maxsize=100 --audit-log-format=json --requestheader-allowed-names=kube-apiserver-proxy-client --cloud-provider= --etcd-prefix=/registry --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --allow-privileged=true --service-account-lookup=true --admission-control-config-file=/etc/kubernetes/admission.yaml --audit-policy-file=/etc/kubernetes/audit-policy.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --storage-backend=etcd3 --anonymous-auth=false --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --advertise-address=192.168.1.225 --audit-log-maxage=30 --etcd-servers=https://192.168.1.225:2379 --runtime-config=policy/v1beta1/podsecuritypolicy=true --bind-address=0.0.0.0 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --insecure-port=0 --requestheader-group-headers=X-Remote-Group --secure-port=6443 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-extra-headers-prefix=X-Remote-Extra- --profiling=false --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User - -``` -### 1.2.7 Ensure that the --authorization-mode argument is not set to AlwaysAllow (Automated) - -**Result:** pass - -**Remediation:** -Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml -on the master node and set the --authorization-mode parameter to values other than AlwaysAllow. -One such example could be as below. ---authorization-mode=RBAC - - -**Audit:** - -```bash -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected Result**: - -```console - 'Node,RBAC' not have 'AlwaysAllow' -``` - -**Returned Value**: - -```console -root 4643 4626 22 16:15 ? 00:00:46 kube-apiserver --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authorization-mode=Node,RBAC --audit-log-maxsize=100 --audit-log-format=json --requestheader-allowed-names=kube-apiserver-proxy-client --cloud-provider= --etcd-prefix=/registry --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --allow-privileged=true --service-account-lookup=true --admission-control-config-file=/etc/kubernetes/admission.yaml --audit-policy-file=/etc/kubernetes/audit-policy.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --storage-backend=etcd3 --anonymous-auth=false --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --advertise-address=192.168.1.225 --audit-log-maxage=30 --etcd-servers=https://192.168.1.225:2379 --runtime-config=policy/v1beta1/podsecuritypolicy=true --bind-address=0.0.0.0 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --insecure-port=0 --requestheader-group-headers=X-Remote-Group --secure-port=6443 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-extra-headers-prefix=X-Remote-Extra- --profiling=false --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User - -``` -### 1.2.8 Ensure that the --authorization-mode argument includes Node (Automated) - -**Result:** pass - -**Remediation:** -Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml -on the master node and set the --authorization-mode parameter to a value that includes Node. ---authorization-mode=Node,RBAC - - -**Audit:** - -```bash -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected Result**: - -```console -'Node,RBAC' has 'Node' -``` - -**Returned Value**: - -```console -root 4643 4626 22 16:15 ? 00:00:46 kube-apiserver --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authorization-mode=Node,RBAC --audit-log-maxsize=100 --audit-log-format=json --requestheader-allowed-names=kube-apiserver-proxy-client --cloud-provider= --etcd-prefix=/registry --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --allow-privileged=true --service-account-lookup=true --admission-control-config-file=/etc/kubernetes/admission.yaml --audit-policy-file=/etc/kubernetes/audit-policy.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --storage-backend=etcd3 --anonymous-auth=false --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --advertise-address=192.168.1.225 --audit-log-maxage=30 --etcd-servers=https://192.168.1.225:2379 --runtime-config=policy/v1beta1/podsecuritypolicy=true --bind-address=0.0.0.0 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --insecure-port=0 --requestheader-group-headers=X-Remote-Group --secure-port=6443 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-extra-headers-prefix=X-Remote-Extra- --profiling=false --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User - -``` -### 1.2.9 Ensure that the --authorization-mode argument includes RBAC (Automated) - -**Result:** pass - -**Remediation:** -Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml -on the master node and set the --authorization-mode parameter to a value that includes RBAC, -for example: ---authorization-mode=Node,RBAC - - -**Audit:** - -```bash -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected Result**: - -```console -'Node,RBAC' has 'RBAC' -``` - -**Returned Value**: - -```console -root 4643 4626 22 16:15 ? 00:00:46 kube-apiserver --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authorization-mode=Node,RBAC --audit-log-maxsize=100 --audit-log-format=json --requestheader-allowed-names=kube-apiserver-proxy-client --cloud-provider= --etcd-prefix=/registry --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --allow-privileged=true --service-account-lookup=true --admission-control-config-file=/etc/kubernetes/admission.yaml --audit-policy-file=/etc/kubernetes/audit-policy.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --storage-backend=etcd3 --anonymous-auth=false --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --advertise-address=192.168.1.225 --audit-log-maxage=30 --etcd-servers=https://192.168.1.225:2379 --runtime-config=policy/v1beta1/podsecuritypolicy=true --bind-address=0.0.0.0 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --insecure-port=0 --requestheader-group-headers=X-Remote-Group --secure-port=6443 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-extra-headers-prefix=X-Remote-Extra- --profiling=false --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User - -``` -### 1.2.10 Ensure that the admission control plugin EventRateLimit is set (Automated) - -**Result:** pass - -**Remediation:** -Follow the Kubernetes documentation and set the desired limits in a configuration file. -Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml -and set the below parameters. ---enable-admission-plugins=...,EventRateLimit,... ---admission-control-config-file= - - -**Audit:** - -```bash -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected Result**: - -```console -'NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit' has 'EventRateLimit' -``` - -**Returned Value**: - -```console -root 4643 4626 22 16:15 ? 00:00:46 kube-apiserver --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authorization-mode=Node,RBAC --audit-log-maxsize=100 --audit-log-format=json --requestheader-allowed-names=kube-apiserver-proxy-client --cloud-provider= --etcd-prefix=/registry --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --allow-privileged=true --service-account-lookup=true --admission-control-config-file=/etc/kubernetes/admission.yaml --audit-policy-file=/etc/kubernetes/audit-policy.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --storage-backend=etcd3 --anonymous-auth=false --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --advertise-address=192.168.1.225 --audit-log-maxage=30 --etcd-servers=https://192.168.1.225:2379 --runtime-config=policy/v1beta1/podsecuritypolicy=true --bind-address=0.0.0.0 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --insecure-port=0 --requestheader-group-headers=X-Remote-Group --secure-port=6443 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-extra-headers-prefix=X-Remote-Extra- --profiling=false --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User - -``` -### 1.2.11 Ensure that the admission control plugin AlwaysAdmit is not set (Automated) - -**Result:** pass - -**Remediation:** -Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml -on the master node and either remove the --enable-admission-plugins parameter, or set it to a -value that does not include AlwaysAdmit. - - -**Audit:** - -```bash -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected Result**: - -```console - 'NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit' not have 'AlwaysAdmit' OR '--enable-admission-plugins' is not present -``` - -**Returned Value**: - -```console -root 4643 4626 22 16:15 ? 00:00:46 kube-apiserver --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authorization-mode=Node,RBAC --audit-log-maxsize=100 --audit-log-format=json --requestheader-allowed-names=kube-apiserver-proxy-client --cloud-provider= --etcd-prefix=/registry --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --allow-privileged=true --service-account-lookup=true --admission-control-config-file=/etc/kubernetes/admission.yaml --audit-policy-file=/etc/kubernetes/audit-policy.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --storage-backend=etcd3 --anonymous-auth=false --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --advertise-address=192.168.1.225 --audit-log-maxage=30 --etcd-servers=https://192.168.1.225:2379 --runtime-config=policy/v1beta1/podsecuritypolicy=true --bind-address=0.0.0.0 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --insecure-port=0 --requestheader-group-headers=X-Remote-Group --secure-port=6443 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-extra-headers-prefix=X-Remote-Extra- --profiling=false --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User - -``` -### 1.2.12 Ensure that the admission control plugin AlwaysPullImages is set (Manual) - -**Result:** warn - -**Remediation:** -Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml -on the master node and set the --enable-admission-plugins parameter to include -AlwaysPullImages. ---enable-admission-plugins=...,AlwaysPullImages,... - - -**Audit:** - -```bash -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - - -### 1.2.13 Ensure that the admission control plugin SecurityContextDeny is set if PodSecurityPolicy is not used (Manual) - -**Result:** warn - -**Remediation:** -Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml -on the master node and set the --enable-admission-plugins parameter to include -SecurityContextDeny, unless PodSecurityPolicy is already in place. ---enable-admission-plugins=...,SecurityContextDeny,... - - -**Audit:** - -```bash -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - - -### 1.2.14 Ensure that the admission control plugin ServiceAccount is set (Automated) - -**Result:** pass - -**Remediation:** -Follow the documentation and create ServiceAccount objects as per your environment. -Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml -on the master node and ensure that the --disable-admission-plugins parameter is set to a -value that does not include ServiceAccount. - - -**Audit:** - -```bash -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected Result**: - -```console -'--disable-admission-plugins' is not present OR '--disable-admission-plugins' is not present -``` - -**Returned Value**: - -```console -root 4643 4626 22 16:15 ? 00:00:46 kube-apiserver --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authorization-mode=Node,RBAC --audit-log-maxsize=100 --audit-log-format=json --requestheader-allowed-names=kube-apiserver-proxy-client --cloud-provider= --etcd-prefix=/registry --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --allow-privileged=true --service-account-lookup=true --admission-control-config-file=/etc/kubernetes/admission.yaml --audit-policy-file=/etc/kubernetes/audit-policy.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --storage-backend=etcd3 --anonymous-auth=false --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --advertise-address=192.168.1.225 --audit-log-maxage=30 --etcd-servers=https://192.168.1.225:2379 --runtime-config=policy/v1beta1/podsecuritypolicy=true --bind-address=0.0.0.0 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --insecure-port=0 --requestheader-group-headers=X-Remote-Group --secure-port=6443 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-extra-headers-prefix=X-Remote-Extra- --profiling=false --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User - -``` -### 1.2.15 Ensure that the admission control plugin NamespaceLifecycle is set (Automated) - -**Result:** pass - -**Remediation:** -Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml -on the master node and set the --disable-admission-plugins parameter to -ensure it does not include NamespaceLifecycle. - - -**Audit:** - -```bash -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected Result**: - -```console -'--disable-admission-plugins' is not present OR '--disable-admission-plugins' is not present -``` - -**Returned Value**: - -```console -root 4643 4626 22 16:15 ? 00:00:46 kube-apiserver --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authorization-mode=Node,RBAC --audit-log-maxsize=100 --audit-log-format=json --requestheader-allowed-names=kube-apiserver-proxy-client --cloud-provider= --etcd-prefix=/registry --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --allow-privileged=true --service-account-lookup=true --admission-control-config-file=/etc/kubernetes/admission.yaml --audit-policy-file=/etc/kubernetes/audit-policy.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --storage-backend=etcd3 --anonymous-auth=false --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --advertise-address=192.168.1.225 --audit-log-maxage=30 --etcd-servers=https://192.168.1.225:2379 --runtime-config=policy/v1beta1/podsecuritypolicy=true --bind-address=0.0.0.0 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --insecure-port=0 --requestheader-group-headers=X-Remote-Group --secure-port=6443 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-extra-headers-prefix=X-Remote-Extra- --profiling=false --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User - -``` -### 1.2.16 Ensure that the admission control plugin PodSecurityPolicy is set (Automated) - -**Result:** pass - -**Remediation:** -Follow the documentation and create Pod Security Policy objects as per your environment. -Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml -on the master node and set the --enable-admission-plugins parameter to a -value that includes PodSecurityPolicy: ---enable-admission-plugins=...,PodSecurityPolicy,... -Then restart the API Server. - - -**Audit:** - -```bash -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected Result**: - -```console -'NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit' has 'PodSecurityPolicy' -``` - -**Returned Value**: - -```console -root 4643 4626 22 16:15 ? 00:00:46 kube-apiserver --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authorization-mode=Node,RBAC --audit-log-maxsize=100 --audit-log-format=json --requestheader-allowed-names=kube-apiserver-proxy-client --cloud-provider= --etcd-prefix=/registry --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --allow-privileged=true --service-account-lookup=true --admission-control-config-file=/etc/kubernetes/admission.yaml --audit-policy-file=/etc/kubernetes/audit-policy.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --storage-backend=etcd3 --anonymous-auth=false --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --advertise-address=192.168.1.225 --audit-log-maxage=30 --etcd-servers=https://192.168.1.225:2379 --runtime-config=policy/v1beta1/podsecuritypolicy=true --bind-address=0.0.0.0 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --insecure-port=0 --requestheader-group-headers=X-Remote-Group --secure-port=6443 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-extra-headers-prefix=X-Remote-Extra- --profiling=false --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User - -``` -### 1.2.17 Ensure that the admission control plugin NodeRestriction is set (Automated) - -**Result:** pass - -**Remediation:** -Follow the Kubernetes documentation and configure NodeRestriction plug-in on kubelets. -Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml -on the master node and set the --enable-admission-plugins parameter to a -value that includes NodeRestriction. ---enable-admission-plugins=...,NodeRestriction,... - - -**Audit:** - -```bash -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected Result**: - -```console -'NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit' has 'NodeRestriction' -``` - -**Returned Value**: - -```console -root 4643 4626 22 16:15 ? 00:00:46 kube-apiserver --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authorization-mode=Node,RBAC --audit-log-maxsize=100 --audit-log-format=json --requestheader-allowed-names=kube-apiserver-proxy-client --cloud-provider= --etcd-prefix=/registry --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --allow-privileged=true --service-account-lookup=true --admission-control-config-file=/etc/kubernetes/admission.yaml --audit-policy-file=/etc/kubernetes/audit-policy.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --storage-backend=etcd3 --anonymous-auth=false --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --advertise-address=192.168.1.225 --audit-log-maxage=30 --etcd-servers=https://192.168.1.225:2379 --runtime-config=policy/v1beta1/podsecuritypolicy=true --bind-address=0.0.0.0 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --insecure-port=0 --requestheader-group-headers=X-Remote-Group --secure-port=6443 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-extra-headers-prefix=X-Remote-Extra- --profiling=false --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User - -``` -### 1.2.18 Ensure that the --insecure-bind-address argument is not set (Automated) - -**Result:** pass - -**Remediation:** -Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml -on the master node and remove the --insecure-bind-address parameter. - - -**Audit:** - -```bash -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected Result**: - -```console -'--insecure-bind-address' is not present -``` - -**Returned Value**: - -```console -root 4643 4626 22 16:15 ? 00:00:46 kube-apiserver --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authorization-mode=Node,RBAC --audit-log-maxsize=100 --audit-log-format=json --requestheader-allowed-names=kube-apiserver-proxy-client --cloud-provider= --etcd-prefix=/registry --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --allow-privileged=true --service-account-lookup=true --admission-control-config-file=/etc/kubernetes/admission.yaml --audit-policy-file=/etc/kubernetes/audit-policy.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --storage-backend=etcd3 --anonymous-auth=false --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --advertise-address=192.168.1.225 --audit-log-maxage=30 --etcd-servers=https://192.168.1.225:2379 --runtime-config=policy/v1beta1/podsecuritypolicy=true --bind-address=0.0.0.0 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --insecure-port=0 --requestheader-group-headers=X-Remote-Group --secure-port=6443 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-extra-headers-prefix=X-Remote-Extra- --profiling=false --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User - -``` -### 1.2.19 Ensure that the --insecure-port argument is set to 0 (Automated) - -**Result:** pass - -**Remediation:** -Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml -on the master node and set the below parameter. ---insecure-port=0 - - -**Audit:** - -```bash -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected Result**: - -```console -'0' is equal to '0' -``` - -**Returned Value**: - -```console -root 4643 4626 22 16:15 ? 00:00:46 kube-apiserver --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authorization-mode=Node,RBAC --audit-log-maxsize=100 --audit-log-format=json --requestheader-allowed-names=kube-apiserver-proxy-client --cloud-provider= --etcd-prefix=/registry --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --allow-privileged=true --service-account-lookup=true --admission-control-config-file=/etc/kubernetes/admission.yaml --audit-policy-file=/etc/kubernetes/audit-policy.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --storage-backend=etcd3 --anonymous-auth=false --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --advertise-address=192.168.1.225 --audit-log-maxage=30 --etcd-servers=https://192.168.1.225:2379 --runtime-config=policy/v1beta1/podsecuritypolicy=true --bind-address=0.0.0.0 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --insecure-port=0 --requestheader-group-headers=X-Remote-Group --secure-port=6443 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-extra-headers-prefix=X-Remote-Extra- --profiling=false --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User - -``` -### 1.2.20 Ensure that the --secure-port argument is not set to 0 (Automated) - -**Result:** pass - -**Remediation:** -Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml -on the master node and either remove the --secure-port parameter or -set it to a different (non-zero) desired port. - - -**Audit:** - -```bash -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected Result**: - -```console -6443 is greater than 0 OR '--secure-port' is not present -``` - -**Returned Value**: - -```console -root 4643 4626 22 16:15 ? 00:00:46 kube-apiserver --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authorization-mode=Node,RBAC --audit-log-maxsize=100 --audit-log-format=json --requestheader-allowed-names=kube-apiserver-proxy-client --cloud-provider= --etcd-prefix=/registry --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --allow-privileged=true --service-account-lookup=true --admission-control-config-file=/etc/kubernetes/admission.yaml --audit-policy-file=/etc/kubernetes/audit-policy.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --storage-backend=etcd3 --anonymous-auth=false --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --advertise-address=192.168.1.225 --audit-log-maxage=30 --etcd-servers=https://192.168.1.225:2379 --runtime-config=policy/v1beta1/podsecuritypolicy=true --bind-address=0.0.0.0 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --insecure-port=0 --requestheader-group-headers=X-Remote-Group --secure-port=6443 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-extra-headers-prefix=X-Remote-Extra- --profiling=false --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User - -``` -### 1.2.21 Ensure that the --profiling argument is set to false (Automated) - -**Result:** pass - -**Remediation:** -Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml -on the master node and set the below parameter. ---profiling=false - - -**Audit:** - -```bash -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected Result**: - -```console -'false' is equal to 'false' -``` - -**Returned Value**: - -```console -root 4643 4626 22 16:15 ? 00:00:46 kube-apiserver --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authorization-mode=Node,RBAC --audit-log-maxsize=100 --audit-log-format=json --requestheader-allowed-names=kube-apiserver-proxy-client --cloud-provider= --etcd-prefix=/registry --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --allow-privileged=true --service-account-lookup=true --admission-control-config-file=/etc/kubernetes/admission.yaml --audit-policy-file=/etc/kubernetes/audit-policy.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --storage-backend=etcd3 --anonymous-auth=false --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --advertise-address=192.168.1.225 --audit-log-maxage=30 --etcd-servers=https://192.168.1.225:2379 --runtime-config=policy/v1beta1/podsecuritypolicy=true --bind-address=0.0.0.0 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --insecure-port=0 --requestheader-group-headers=X-Remote-Group --secure-port=6443 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-extra-headers-prefix=X-Remote-Extra- --profiling=false --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User - -``` -### 1.2.22 Ensure that the --audit-log-path argument is set (Automated) - -**Result:** pass - -**Remediation:** -Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml -on the master node and set the --audit-log-path parameter to a suitable path and -file where you would like audit logs to be written, for example: ---audit-log-path=/var/log/apiserver/audit.log - - -**Audit:** - -```bash -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected Result**: - -```console -'--audit-log-path' is present -``` - -**Returned Value**: - -```console -root 4643 4626 22 16:15 ? 00:00:46 kube-apiserver --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authorization-mode=Node,RBAC --audit-log-maxsize=100 --audit-log-format=json --requestheader-allowed-names=kube-apiserver-proxy-client --cloud-provider= --etcd-prefix=/registry --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --allow-privileged=true --service-account-lookup=true --admission-control-config-file=/etc/kubernetes/admission.yaml --audit-policy-file=/etc/kubernetes/audit-policy.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --storage-backend=etcd3 --anonymous-auth=false --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --advertise-address=192.168.1.225 --audit-log-maxage=30 --etcd-servers=https://192.168.1.225:2379 --runtime-config=policy/v1beta1/podsecuritypolicy=true --bind-address=0.0.0.0 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --insecure-port=0 --requestheader-group-headers=X-Remote-Group --secure-port=6443 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-extra-headers-prefix=X-Remote-Extra- --profiling=false --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User - -``` -### 1.2.23 Ensure that the --audit-log-maxage argument is set to 30 or as appropriate (Automated) - -**Result:** pass - -**Remediation:** -Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml -on the master node and set the --audit-log-maxage parameter to 30 or as an appropriate number of days: ---audit-log-maxage=30 - - -**Audit:** - -```bash -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected Result**: - -```console -30 is greater or equal to 30 -``` - -**Returned Value**: - -```console -root 4643 4626 22 16:15 ? 00:00:46 kube-apiserver --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authorization-mode=Node,RBAC --audit-log-maxsize=100 --audit-log-format=json --requestheader-allowed-names=kube-apiserver-proxy-client --cloud-provider= --etcd-prefix=/registry --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --allow-privileged=true --service-account-lookup=true --admission-control-config-file=/etc/kubernetes/admission.yaml --audit-policy-file=/etc/kubernetes/audit-policy.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --storage-backend=etcd3 --anonymous-auth=false --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --advertise-address=192.168.1.225 --audit-log-maxage=30 --etcd-servers=https://192.168.1.225:2379 --runtime-config=policy/v1beta1/podsecuritypolicy=true --bind-address=0.0.0.0 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --insecure-port=0 --requestheader-group-headers=X-Remote-Group --secure-port=6443 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-extra-headers-prefix=X-Remote-Extra- --profiling=false --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User - -``` -### 1.2.24 Ensure that the --audit-log-maxbackup argument is set to 10 or as appropriate (Automated) - -**Result:** pass - -**Remediation:** -Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml -on the master node and set the --audit-log-maxbackup parameter to 10 or to an appropriate -value. ---audit-log-maxbackup=10 - - -**Audit:** - -```bash -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected Result**: - -```console -10 is greater or equal to 10 -``` - -**Returned Value**: - -```console -root 4643 4626 22 16:15 ? 00:00:46 kube-apiserver --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authorization-mode=Node,RBAC --audit-log-maxsize=100 --audit-log-format=json --requestheader-allowed-names=kube-apiserver-proxy-client --cloud-provider= --etcd-prefix=/registry --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --allow-privileged=true --service-account-lookup=true --admission-control-config-file=/etc/kubernetes/admission.yaml --audit-policy-file=/etc/kubernetes/audit-policy.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --storage-backend=etcd3 --anonymous-auth=false --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --advertise-address=192.168.1.225 --audit-log-maxage=30 --etcd-servers=https://192.168.1.225:2379 --runtime-config=policy/v1beta1/podsecuritypolicy=true --bind-address=0.0.0.0 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --insecure-port=0 --requestheader-group-headers=X-Remote-Group --secure-port=6443 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-extra-headers-prefix=X-Remote-Extra- --profiling=false --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User - -``` -### 1.2.25 Ensure that the --audit-log-maxsize argument is set to 100 or as appropriate (Automated) - -**Result:** pass - -**Remediation:** -Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml -on the master node and set the --audit-log-maxsize parameter to an appropriate size in MB. -For example, to set it as 100 MB: ---audit-log-maxsize=100 - - -**Audit:** - -```bash -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected Result**: - -```console -100 is greater or equal to 100 -``` - -**Returned Value**: - -```console -root 4643 4626 22 16:15 ? 00:00:46 kube-apiserver --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authorization-mode=Node,RBAC --audit-log-maxsize=100 --audit-log-format=json --requestheader-allowed-names=kube-apiserver-proxy-client --cloud-provider= --etcd-prefix=/registry --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --allow-privileged=true --service-account-lookup=true --admission-control-config-file=/etc/kubernetes/admission.yaml --audit-policy-file=/etc/kubernetes/audit-policy.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --storage-backend=etcd3 --anonymous-auth=false --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --advertise-address=192.168.1.225 --audit-log-maxage=30 --etcd-servers=https://192.168.1.225:2379 --runtime-config=policy/v1beta1/podsecuritypolicy=true --bind-address=0.0.0.0 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --insecure-port=0 --requestheader-group-headers=X-Remote-Group --secure-port=6443 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-extra-headers-prefix=X-Remote-Extra- --profiling=false --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User - -``` -### 1.2.26 Ensure that the --request-timeout argument is set as appropriate (Automated) - -**Result:** pass - -**Remediation:** -Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml -and set the below parameter as appropriate and if needed. -For example, ---request-timeout=300s - - -**Audit:** - -```bash -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected Result**: - -```console -'--request-timeout' is not present OR '--request-timeout' is not present -``` - -**Returned Value**: - -```console -root 4643 4626 22 16:15 ? 00:00:46 kube-apiserver --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authorization-mode=Node,RBAC --audit-log-maxsize=100 --audit-log-format=json --requestheader-allowed-names=kube-apiserver-proxy-client --cloud-provider= --etcd-prefix=/registry --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --allow-privileged=true --service-account-lookup=true --admission-control-config-file=/etc/kubernetes/admission.yaml --audit-policy-file=/etc/kubernetes/audit-policy.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --storage-backend=etcd3 --anonymous-auth=false --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --advertise-address=192.168.1.225 --audit-log-maxage=30 --etcd-servers=https://192.168.1.225:2379 --runtime-config=policy/v1beta1/podsecuritypolicy=true --bind-address=0.0.0.0 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --insecure-port=0 --requestheader-group-headers=X-Remote-Group --secure-port=6443 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-extra-headers-prefix=X-Remote-Extra- --profiling=false --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User - -``` -### 1.2.27 Ensure that the --service-account-lookup argument is set to true (Automated) - -**Result:** pass - -**Remediation:** -Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml -on the master node and set the below parameter. ---service-account-lookup=true -Alternatively, you can delete the --service-account-lookup parameter from this file so -that the default takes effect. - - -**Audit:** - -```bash -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected Result**: - -```console -'--service-account-lookup' is not present OR 'true' is equal to 'true' -``` - -**Returned Value**: - -```console -root 4643 4626 22 16:15 ? 00:00:46 kube-apiserver --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authorization-mode=Node,RBAC --audit-log-maxsize=100 --audit-log-format=json --requestheader-allowed-names=kube-apiserver-proxy-client --cloud-provider= --etcd-prefix=/registry --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --allow-privileged=true --service-account-lookup=true --admission-control-config-file=/etc/kubernetes/admission.yaml --audit-policy-file=/etc/kubernetes/audit-policy.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --storage-backend=etcd3 --anonymous-auth=false --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --advertise-address=192.168.1.225 --audit-log-maxage=30 --etcd-servers=https://192.168.1.225:2379 --runtime-config=policy/v1beta1/podsecuritypolicy=true --bind-address=0.0.0.0 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --insecure-port=0 --requestheader-group-headers=X-Remote-Group --secure-port=6443 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-extra-headers-prefix=X-Remote-Extra- --profiling=false --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User - -``` -### 1.2.28 Ensure that the --service-account-key-file argument is set as appropriate (Automated) - -**Result:** pass - -**Remediation:** -Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml -on the master node and set the --service-account-key-file parameter -to the public key file for service accounts: ---service-account-key-file= - - -**Audit:** - -```bash -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected Result**: - -```console -'--service-account-key-file' is present -``` - -**Returned Value**: - -```console -root 4643 4626 22 16:15 ? 00:00:46 kube-apiserver --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authorization-mode=Node,RBAC --audit-log-maxsize=100 --audit-log-format=json --requestheader-allowed-names=kube-apiserver-proxy-client --cloud-provider= --etcd-prefix=/registry --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --allow-privileged=true --service-account-lookup=true --admission-control-config-file=/etc/kubernetes/admission.yaml --audit-policy-file=/etc/kubernetes/audit-policy.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --storage-backend=etcd3 --anonymous-auth=false --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --advertise-address=192.168.1.225 --audit-log-maxage=30 --etcd-servers=https://192.168.1.225:2379 --runtime-config=policy/v1beta1/podsecuritypolicy=true --bind-address=0.0.0.0 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --insecure-port=0 --requestheader-group-headers=X-Remote-Group --secure-port=6443 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-extra-headers-prefix=X-Remote-Extra- --profiling=false --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User - -``` -### 1.2.29 Ensure that the --etcd-certfile and --etcd-keyfile arguments are set as appropriate (Automated) - -**Result:** pass - -**Remediation:** -Follow the Kubernetes documentation and set up the TLS connection between the apiserver and etcd. -Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml -on the master node and set the etcd certificate and key file parameters. ---etcd-certfile= ---etcd-keyfile= - - -**Audit:** - -```bash -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected Result**: - -```console -'--etcd-certfile' is present AND '--etcd-keyfile' is present -``` - -**Returned Value**: - -```console -root 4643 4626 22 16:15 ? 00:00:46 kube-apiserver --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authorization-mode=Node,RBAC --audit-log-maxsize=100 --audit-log-format=json --requestheader-allowed-names=kube-apiserver-proxy-client --cloud-provider= --etcd-prefix=/registry --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --allow-privileged=true --service-account-lookup=true --admission-control-config-file=/etc/kubernetes/admission.yaml --audit-policy-file=/etc/kubernetes/audit-policy.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --storage-backend=etcd3 --anonymous-auth=false --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --advertise-address=192.168.1.225 --audit-log-maxage=30 --etcd-servers=https://192.168.1.225:2379 --runtime-config=policy/v1beta1/podsecuritypolicy=true --bind-address=0.0.0.0 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --insecure-port=0 --requestheader-group-headers=X-Remote-Group --secure-port=6443 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-extra-headers-prefix=X-Remote-Extra- --profiling=false --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User - -``` -### 1.2.30 Ensure that the --tls-cert-file and --tls-private-key-file arguments are set as appropriate (Automated) - -**Result:** pass - -**Remediation:** -Follow the Kubernetes documentation and set up the TLS connection on the apiserver. -Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml -on the master node and set the TLS certificate and private key file parameters. ---tls-cert-file= ---tls-private-key-file= - - -**Audit:** - -```bash -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected Result**: - -```console -'--tls-cert-file' is present AND '--tls-private-key-file' is present -``` - -**Returned Value**: - -```console -root 4643 4626 22 16:15 ? 00:00:46 kube-apiserver --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authorization-mode=Node,RBAC --audit-log-maxsize=100 --audit-log-format=json --requestheader-allowed-names=kube-apiserver-proxy-client --cloud-provider= --etcd-prefix=/registry --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --allow-privileged=true --service-account-lookup=true --admission-control-config-file=/etc/kubernetes/admission.yaml --audit-policy-file=/etc/kubernetes/audit-policy.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --storage-backend=etcd3 --anonymous-auth=false --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --advertise-address=192.168.1.225 --audit-log-maxage=30 --etcd-servers=https://192.168.1.225:2379 --runtime-config=policy/v1beta1/podsecuritypolicy=true --bind-address=0.0.0.0 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --insecure-port=0 --requestheader-group-headers=X-Remote-Group --secure-port=6443 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-extra-headers-prefix=X-Remote-Extra- --profiling=false --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User - -``` -### 1.2.31 Ensure that the --client-ca-file argument is set as appropriate (Automated) - -**Result:** pass - -**Remediation:** -Follow the Kubernetes documentation and set up the TLS connection on the apiserver. -Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml -on the master node and set the client certificate authority file. ---client-ca-file= - - -**Audit:** - -```bash -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected Result**: - -```console -'--client-ca-file' is present -``` - -**Returned Value**: - -```console -root 4643 4626 22 16:15 ? 00:00:46 kube-apiserver --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authorization-mode=Node,RBAC --audit-log-maxsize=100 --audit-log-format=json --requestheader-allowed-names=kube-apiserver-proxy-client --cloud-provider= --etcd-prefix=/registry --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --allow-privileged=true --service-account-lookup=true --admission-control-config-file=/etc/kubernetes/admission.yaml --audit-policy-file=/etc/kubernetes/audit-policy.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --storage-backend=etcd3 --anonymous-auth=false --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --advertise-address=192.168.1.225 --audit-log-maxage=30 --etcd-servers=https://192.168.1.225:2379 --runtime-config=policy/v1beta1/podsecuritypolicy=true --bind-address=0.0.0.0 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --insecure-port=0 --requestheader-group-headers=X-Remote-Group --secure-port=6443 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-extra-headers-prefix=X-Remote-Extra- --profiling=false --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User - -``` -### 1.2.32 Ensure that the --etcd-cafile argument is set as appropriate (Automated) - -**Result:** pass - -**Remediation:** -Follow the Kubernetes documentation and set up the TLS connection between the apiserver and etcd. -Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml -on the master node and set the etcd certificate authority file parameter. ---etcd-cafile= - - -**Audit:** - -```bash -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected Result**: - -```console -'--etcd-cafile' is present -``` - -**Returned Value**: - -```console -root 4643 4626 22 16:15 ? 00:00:46 kube-apiserver --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authorization-mode=Node,RBAC --audit-log-maxsize=100 --audit-log-format=json --requestheader-allowed-names=kube-apiserver-proxy-client --cloud-provider= --etcd-prefix=/registry --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --allow-privileged=true --service-account-lookup=true --admission-control-config-file=/etc/kubernetes/admission.yaml --audit-policy-file=/etc/kubernetes/audit-policy.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --storage-backend=etcd3 --anonymous-auth=false --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --advertise-address=192.168.1.225 --audit-log-maxage=30 --etcd-servers=https://192.168.1.225:2379 --runtime-config=policy/v1beta1/podsecuritypolicy=true --bind-address=0.0.0.0 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --insecure-port=0 --requestheader-group-headers=X-Remote-Group --secure-port=6443 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-extra-headers-prefix=X-Remote-Extra- --profiling=false --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User - -``` -### 1.2.33 Ensure that the --encryption-provider-config argument is set as appropriate (Automated) - -**Result:** pass - -**Remediation:** -Follow the Kubernetes documentation and configure a EncryptionConfig file. -Then, edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml -on the master node and set the --encryption-provider-config parameter to the path of that file: --encryption-provider-config= - - -**Audit:** - -```bash -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected Result**: - -```console -'--encryption-provider-config' is present -``` - -**Returned Value**: - -```console -root 4643 4626 22 16:15 ? 00:00:46 kube-apiserver --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authorization-mode=Node,RBAC --audit-log-maxsize=100 --audit-log-format=json --requestheader-allowed-names=kube-apiserver-proxy-client --cloud-provider= --etcd-prefix=/registry --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --allow-privileged=true --service-account-lookup=true --admission-control-config-file=/etc/kubernetes/admission.yaml --audit-policy-file=/etc/kubernetes/audit-policy.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --storage-backend=etcd3 --anonymous-auth=false --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --advertise-address=192.168.1.225 --audit-log-maxage=30 --etcd-servers=https://192.168.1.225:2379 --runtime-config=policy/v1beta1/podsecuritypolicy=true --bind-address=0.0.0.0 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --insecure-port=0 --requestheader-group-headers=X-Remote-Group --secure-port=6443 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-extra-headers-prefix=X-Remote-Extra- --profiling=false --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User - -``` -### 1.2.34 Ensure that encryption providers are appropriately configured (Automated) - -**Result:** pass - -**Remediation:** -Follow the Kubernetes documentation and configure a EncryptionConfig file. -In this file, choose aescbc, kms or secretbox as the encryption provider. - - -**Audit:** - -```bash -check_encryption_provider_config.sh aescbc kms secretbox -``` - -**Expected Result**: - -```console -'true' is equal to 'true' -``` - -**Audit Script:** -```bash -#!/usr/bin/env bash - -# This script is used to check the encrption provider config is set to aesbc -# -# outputs: -# true/false - -# TODO: Figure out the file location from the kube-apiserver commandline args -ENCRYPTION_CONFIG_FILE="/node/etc/kubernetes/ssl/encryption.yaml" - -if [[ ! -f "${ENCRYPTION_CONFIG_FILE}" ]]; then - echo "false" - exit -fi - -for provider in "$@" -do - if grep "$provider" "${ENCRYPTION_CONFIG_FILE}"; then - echo "true" - exit - fi -done - -echo "false" -exit - -``` -**Returned Value**: - -```console - - aescbc: -true - -``` -### 1.2.35 Ensure that the API Server only makes use of Strong Cryptographic Ciphers (Automated) - -**Result:** warn - -**Remediation:** -Edit the API server pod specification file /etc/kubernetes/manifests/kube-apiserver.yaml -on the master node and set the below parameter. ---tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM -_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM -_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM -_SHA384 - - -**Audit:** - -```bash -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - - -## 1.3 Controller Manager -### 1.3.1 Ensure that the --terminated-pod-gc-threshold argument is set as appropriate (Automated) - -**Result:** pass - -**Remediation:** -Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml -on the master node and set the --terminated-pod-gc-threshold to an appropriate threshold, -for example: ---terminated-pod-gc-threshold=10 - - -**Audit:** - -```bash -/bin/ps -ef | grep kube-controller-manager | grep -v grep -``` - -**Expected Result**: - -```console -'--terminated-pod-gc-threshold' is present -``` - -**Returned Value**: - -```console -root 4788 4773 4 16:16 ? 00:00:09 kube-controller-manager --configure-cloud-routes=false --cloud-provider= --service-cluster-ip-range=10.43.0.0/16 --v=2 --pod-eviction-timeout=5m0s --leader-elect=true --cluster-cidr=10.42.0.0/16 --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --profiling=false --node-monitor-grace-period=40s --service-account-private-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --address=0.0.0.0 --allow-untagged-cloud=true --root-ca-file=/etc/kubernetes/ssl/kube-ca.pem --allocate-node-cidrs=true --enable-hostpath-provisioner=false --terminated-pod-gc-threshold=1000 --feature-gates=RotateKubeletServerCertificate=true --use-service-account-credentials=true - -``` -### 1.3.2 Ensure that the --profiling argument is set to false (Automated) - -**Result:** pass - -**Remediation:** -Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml -on the master node and set the below parameter. ---profiling=false - - -**Audit:** - -```bash -/bin/ps -ef | grep kube-controller-manager | grep -v grep -``` - -**Expected Result**: - -```console -'false' is equal to 'false' -``` - -**Returned Value**: - -```console -root 4788 4773 4 16:16 ? 00:00:09 kube-controller-manager --configure-cloud-routes=false --cloud-provider= --service-cluster-ip-range=10.43.0.0/16 --v=2 --pod-eviction-timeout=5m0s --leader-elect=true --cluster-cidr=10.42.0.0/16 --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --profiling=false --node-monitor-grace-period=40s --service-account-private-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --address=0.0.0.0 --allow-untagged-cloud=true --root-ca-file=/etc/kubernetes/ssl/kube-ca.pem --allocate-node-cidrs=true --enable-hostpath-provisioner=false --terminated-pod-gc-threshold=1000 --feature-gates=RotateKubeletServerCertificate=true --use-service-account-credentials=true - -``` -### 1.3.3 Ensure that the --use-service-account-credentials argument is set to true (Automated) - -**Result:** pass - -**Remediation:** -Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml -on the master node to set the below parameter. ---use-service-account-credentials=true - - -**Audit:** - -```bash -/bin/ps -ef | grep kube-controller-manager | grep -v grep -``` - -**Expected Result**: - -```console -'true' is not equal to 'false' -``` - -**Returned Value**: - -```console -root 4788 4773 4 16:16 ? 00:00:09 kube-controller-manager --configure-cloud-routes=false --cloud-provider= --service-cluster-ip-range=10.43.0.0/16 --v=2 --pod-eviction-timeout=5m0s --leader-elect=true --cluster-cidr=10.42.0.0/16 --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --profiling=false --node-monitor-grace-period=40s --service-account-private-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --address=0.0.0.0 --allow-untagged-cloud=true --root-ca-file=/etc/kubernetes/ssl/kube-ca.pem --allocate-node-cidrs=true --enable-hostpath-provisioner=false --terminated-pod-gc-threshold=1000 --feature-gates=RotateKubeletServerCertificate=true --use-service-account-credentials=true - -``` -### 1.3.4 Ensure that the --service-account-private-key-file argument is set as appropriate (Automated) - -**Result:** pass - -**Remediation:** -Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml -on the master node and set the --service-account-private-key-file parameter -to the private key file for service accounts. ---service-account-private-key-file= - - -**Audit:** - -```bash -/bin/ps -ef | grep kube-controller-manager | grep -v grep -``` - -**Expected Result**: - -```console -'--service-account-private-key-file' is present -``` - -**Returned Value**: - -```console -root 4788 4773 4 16:16 ? 00:00:09 kube-controller-manager --configure-cloud-routes=false --cloud-provider= --service-cluster-ip-range=10.43.0.0/16 --v=2 --pod-eviction-timeout=5m0s --leader-elect=true --cluster-cidr=10.42.0.0/16 --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --profiling=false --node-monitor-grace-period=40s --service-account-private-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --address=0.0.0.0 --allow-untagged-cloud=true --root-ca-file=/etc/kubernetes/ssl/kube-ca.pem --allocate-node-cidrs=true --enable-hostpath-provisioner=false --terminated-pod-gc-threshold=1000 --feature-gates=RotateKubeletServerCertificate=true --use-service-account-credentials=true - -``` -### 1.3.5 Ensure that the --root-ca-file argument is set as appropriate (Automated) - -**Result:** pass - -**Remediation:** -Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml -on the master node and set the --root-ca-file parameter to the certificate bundle file`. ---root-ca-file= - - -**Audit:** - -```bash -/bin/ps -ef | grep kube-controller-manager | grep -v grep -``` - -**Expected Result**: - -```console -'--root-ca-file' is present -``` - -**Returned Value**: - -```console -root 4788 4773 4 16:16 ? 00:00:09 kube-controller-manager --configure-cloud-routes=false --cloud-provider= --service-cluster-ip-range=10.43.0.0/16 --v=2 --pod-eviction-timeout=5m0s --leader-elect=true --cluster-cidr=10.42.0.0/16 --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --profiling=false --node-monitor-grace-period=40s --service-account-private-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --address=0.0.0.0 --allow-untagged-cloud=true --root-ca-file=/etc/kubernetes/ssl/kube-ca.pem --allocate-node-cidrs=true --enable-hostpath-provisioner=false --terminated-pod-gc-threshold=1000 --feature-gates=RotateKubeletServerCertificate=true --use-service-account-credentials=true - -``` -### 1.3.6 Ensure that the RotateKubeletServerCertificate argument is set to true (Automated) - -**Result:** notApplicable - -**Remediation:** -Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml -on the master node and set the --feature-gates parameter to include RotateKubeletServerCertificate=true. ---feature-gates=RotateKubeletServerCertificate=true - -Cluster provisioned by RKE handles certificate rotation directly through RKE. - - -**Audit:** - -```bash -/bin/ps -ef | grep kube-controller-manager | grep -v grep -``` - - -### 1.3.7 Ensure that the --bind-address argument is set to 127.0.0.1 (Automated) - -**Result:** pass - -**Remediation:** -Edit the Controller Manager pod specification file /etc/kubernetes/manifests/kube-controller-manager.yaml -on the master node and ensure the correct value for the --bind-address parameter - - -**Audit:** - -```bash -/bin/ps -ef | grep kube-controller-manager | grep -v grep -``` - -**Expected Result**: - -```console -'--bind-address' is not present OR '--bind-address' is not present -``` - -**Returned Value**: - -```console -root 4788 4773 4 16:16 ? 00:00:09 kube-controller-manager --configure-cloud-routes=false --cloud-provider= --service-cluster-ip-range=10.43.0.0/16 --v=2 --pod-eviction-timeout=5m0s --leader-elect=true --cluster-cidr=10.42.0.0/16 --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-controller-manager.yaml --profiling=false --node-monitor-grace-period=40s --service-account-private-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --address=0.0.0.0 --allow-untagged-cloud=true --root-ca-file=/etc/kubernetes/ssl/kube-ca.pem --allocate-node-cidrs=true --enable-hostpath-provisioner=false --terminated-pod-gc-threshold=1000 --feature-gates=RotateKubeletServerCertificate=true --use-service-account-credentials=true - -``` -## 1.4 Scheduler -### 1.4.1 Ensure that the --profiling argument is set to false (Automated) - -**Result:** pass - -**Remediation:** -Edit the Scheduler pod specification file /etc/kubernetes/manifests/kube-scheduler.yaml file -on the master node and set the below parameter. ---profiling=false - - -**Audit:** - -```bash -/bin/ps -ef | grep kube-scheduler | grep -v grep -``` - -**Expected Result**: - -```console -'false' is equal to 'false' -``` - -**Returned Value**: - -```console -root 4947 4930 1 16:16 ? 00:00:02 kube-scheduler --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-scheduler.yaml --leader-elect=true --profiling=false --v=2 --address=0.0.0.0 - -``` -### 1.4.2 Ensure that the --bind-address argument is set to 127.0.0.1 (Automated) - -**Result:** pass - -**Remediation:** -Edit the Scheduler pod specification file /etc/kubernetes/manifests/kube-scheduler.yaml -on the master node and ensure the correct value for the --bind-address parameter - - -**Audit:** - -```bash -/bin/ps -ef | grep kube-scheduler | grep -v grep -``` - -**Expected Result**: - -```console -'--bind-address' is not present OR '--bind-address' is not present -``` - -**Returned Value**: - -```console -root 4947 4930 1 16:16 ? 00:00:02 kube-scheduler --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-scheduler.yaml --leader-elect=true --profiling=false --v=2 --address=0.0.0.0 - -``` -## 2 Etcd Node Configuration Files -### 2.1 Ensure that the --cert-file and --key-file arguments are set as appropriate (Automated) - -**Result:** pass - -**Remediation:** -Follow the etcd service documentation and configure TLS encryption. -Then, edit the etcd pod specification file /etc/kubernetes/manifests/etcd.yaml -on the master node and set the below parameters. ---cert-file= ---key-file= - - -**Audit:** - -```bash -/bin/ps -ef | /bin/grep etcd | /bin/grep -v grep -``` - -**Expected Result**: - -```console -'--cert-file' is present AND '--key-file' is present -``` - -**Returned Value**: - -```console -etcd 4318 4301 6 16:15 ? 00:00:14 /usr/local/bin/etcd --listen-peer-urls=https://0.0.0.0:2380 --cert-file=/etc/kubernetes/ssl/kube-etcd-192-168-1-225.pem --advertise-client-urls=https://192.168.1.225:2379,https://192.168.1.225:4001 --election-timeout=5000 --data-dir=/var/lib/rancher/etcd/ --peer-cert-file=/etc/kubernetes/ssl/kube-etcd-192-168-1-225.pem --enable-v2=true --initial-cluster=etcd-cis-aio-0=https://192.168.1.225:2380 --trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --peer-trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --client-cert-auth=true --heartbeat-interval=500 --initial-cluster-token=etcd-cluster-1 --name=etcd-cis-aio-0 --listen-client-urls=https://0.0.0.0:2379 --peer-key-file=/etc/kubernetes/ssl/kube-etcd-192-168-1-225-key.pem --peer-client-cert-auth=true --initial-advertise-peer-urls=https://192.168.1.225:2380 --initial-cluster-state=new --key-file=/etc/kubernetes/ssl/kube-etcd-192-168-1-225-key.pem -root 4366 4349 0 16:15 ? 00:00:00 /opt/rke-tools/rke-etcd-backup etcd-backup save --cacert /etc/kubernetes/ssl/kube-ca.pem --cert /etc/kubernetes/ssl/kube-node.pem --key /etc/kubernetes/ssl/kube-node-key.pem --name etcd-rolling-snapshots --endpoints=192.168.1.225:2379 --retention=72h --creation=12h -root 4643 4626 23 16:15 ? 00:00:46 kube-apiserver --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authorization-mode=Node,RBAC --audit-log-maxsize=100 --audit-log-format=json --requestheader-allowed-names=kube-apiserver-proxy-client --cloud-provider= --etcd-prefix=/registry --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --allow-privileged=true --service-account-lookup=true --admission-control-config-file=/etc/kubernetes/admission.yaml --audit-policy-file=/etc/kubernetes/audit-policy.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --storage-backend=etcd3 --anonymous-auth=false --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --advertise-address=192.168.1.225 --audit-log-maxage=30 --etcd-servers=https://192.168.1.225:2379 --runtime-config=policy/v1beta1/podsecuritypolicy=true --bind-address=0.0.0.0 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --insecure-port=0 --requestheader-group-headers=X-Remote-Group --secure-port=6443 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-extra-headers-prefix=X-Remote-Extra- --profiling=false --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User -root 14998 14985 0 16:19 ? 00:00:00 kube-bench run --targets etcd --scored --nosummary --noremediations --v=5 --config-dir=/etc/kube-bench/cfg --benchmark rke-cis-1.6-hardened --json --log_dir /tmp/results/logs --outputfile /tmp/results/etcd.json - -``` -### 2.2 Ensure that the --client-cert-auth argument is set to true (Automated) - -**Result:** pass - -**Remediation:** -Edit the etcd pod specification file /etc/kubernetes/manifests/etcd.yaml on the master -node and set the below parameter. ---client-cert-auth="true" - - -**Audit:** - -```bash -/bin/ps -ef | /bin/grep etcd | /bin/grep -v grep -``` - -**Expected Result**: - -```console -'--client-cert-auth' is present OR 'true' is equal to 'true' -``` - -**Returned Value**: - -```console -etcd 4318 4301 6 16:15 ? 00:00:14 /usr/local/bin/etcd --listen-peer-urls=https://0.0.0.0:2380 --cert-file=/etc/kubernetes/ssl/kube-etcd-192-168-1-225.pem --advertise-client-urls=https://192.168.1.225:2379,https://192.168.1.225:4001 --election-timeout=5000 --data-dir=/var/lib/rancher/etcd/ --peer-cert-file=/etc/kubernetes/ssl/kube-etcd-192-168-1-225.pem --enable-v2=true --initial-cluster=etcd-cis-aio-0=https://192.168.1.225:2380 --trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --peer-trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --client-cert-auth=true --heartbeat-interval=500 --initial-cluster-token=etcd-cluster-1 --name=etcd-cis-aio-0 --listen-client-urls=https://0.0.0.0:2379 --peer-key-file=/etc/kubernetes/ssl/kube-etcd-192-168-1-225-key.pem --peer-client-cert-auth=true --initial-advertise-peer-urls=https://192.168.1.225:2380 --initial-cluster-state=new --key-file=/etc/kubernetes/ssl/kube-etcd-192-168-1-225-key.pem -root 4366 4349 0 16:15 ? 00:00:00 /opt/rke-tools/rke-etcd-backup etcd-backup save --cacert /etc/kubernetes/ssl/kube-ca.pem --cert /etc/kubernetes/ssl/kube-node.pem --key /etc/kubernetes/ssl/kube-node-key.pem --name etcd-rolling-snapshots --endpoints=192.168.1.225:2379 --retention=72h --creation=12h -root 4643 4626 23 16:15 ? 00:00:46 kube-apiserver --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authorization-mode=Node,RBAC --audit-log-maxsize=100 --audit-log-format=json --requestheader-allowed-names=kube-apiserver-proxy-client --cloud-provider= --etcd-prefix=/registry --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --allow-privileged=true --service-account-lookup=true --admission-control-config-file=/etc/kubernetes/admission.yaml --audit-policy-file=/etc/kubernetes/audit-policy.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --storage-backend=etcd3 --anonymous-auth=false --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --advertise-address=192.168.1.225 --audit-log-maxage=30 --etcd-servers=https://192.168.1.225:2379 --runtime-config=policy/v1beta1/podsecuritypolicy=true --bind-address=0.0.0.0 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --insecure-port=0 --requestheader-group-headers=X-Remote-Group --secure-port=6443 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-extra-headers-prefix=X-Remote-Extra- --profiling=false --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User -root 14998 14985 0 16:19 ? 00:00:00 kube-bench run --targets etcd --scored --nosummary --noremediations --v=5 --config-dir=/etc/kube-bench/cfg --benchmark rke-cis-1.6-hardened --json --log_dir /tmp/results/logs --outputfile /tmp/results/etcd.json - -``` -### 2.3 Ensure that the --auto-tls argument is not set to true (Automated) - -**Result:** pass - -**Remediation:** -Edit the etcd pod specification file /etc/kubernetes/manifests/etcd.yaml on the master -node and either remove the --auto-tls parameter or set it to false. - --auto-tls=false - - -**Audit:** - -```bash -/bin/ps -ef | /bin/grep etcd | /bin/grep -v grep -``` - -**Expected Result**: - -```console -'--auto-tls' is not present OR '--auto-tls' is not present -``` - -**Returned Value**: - -```console -etcd 4318 4301 6 16:15 ? 00:00:14 /usr/local/bin/etcd --listen-peer-urls=https://0.0.0.0:2380 --cert-file=/etc/kubernetes/ssl/kube-etcd-192-168-1-225.pem --advertise-client-urls=https://192.168.1.225:2379,https://192.168.1.225:4001 --election-timeout=5000 --data-dir=/var/lib/rancher/etcd/ --peer-cert-file=/etc/kubernetes/ssl/kube-etcd-192-168-1-225.pem --enable-v2=true --initial-cluster=etcd-cis-aio-0=https://192.168.1.225:2380 --trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --peer-trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --client-cert-auth=true --heartbeat-interval=500 --initial-cluster-token=etcd-cluster-1 --name=etcd-cis-aio-0 --listen-client-urls=https://0.0.0.0:2379 --peer-key-file=/etc/kubernetes/ssl/kube-etcd-192-168-1-225-key.pem --peer-client-cert-auth=true --initial-advertise-peer-urls=https://192.168.1.225:2380 --initial-cluster-state=new --key-file=/etc/kubernetes/ssl/kube-etcd-192-168-1-225-key.pem -root 4366 4349 0 16:15 ? 00:00:00 /opt/rke-tools/rke-etcd-backup etcd-backup save --cacert /etc/kubernetes/ssl/kube-ca.pem --cert /etc/kubernetes/ssl/kube-node.pem --key /etc/kubernetes/ssl/kube-node-key.pem --name etcd-rolling-snapshots --endpoints=192.168.1.225:2379 --retention=72h --creation=12h -root 4643 4626 23 16:15 ? 00:00:46 kube-apiserver --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authorization-mode=Node,RBAC --audit-log-maxsize=100 --audit-log-format=json --requestheader-allowed-names=kube-apiserver-proxy-client --cloud-provider= --etcd-prefix=/registry --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --allow-privileged=true --service-account-lookup=true --admission-control-config-file=/etc/kubernetes/admission.yaml --audit-policy-file=/etc/kubernetes/audit-policy.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --storage-backend=etcd3 --anonymous-auth=false --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --advertise-address=192.168.1.225 --audit-log-maxage=30 --etcd-servers=https://192.168.1.225:2379 --runtime-config=policy/v1beta1/podsecuritypolicy=true --bind-address=0.0.0.0 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --insecure-port=0 --requestheader-group-headers=X-Remote-Group --secure-port=6443 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-extra-headers-prefix=X-Remote-Extra- --profiling=false --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User -root 14998 14985 0 16:19 ? 00:00:00 kube-bench run --targets etcd --scored --nosummary --noremediations --v=5 --config-dir=/etc/kube-bench/cfg --benchmark rke-cis-1.6-hardened --json --log_dir /tmp/results/logs --outputfile /tmp/results/etcd.json - -``` -### 2.4 Ensure that the --peer-cert-file and --peer-key-file arguments are set as appropriate (Automated) - -**Result:** pass - -**Remediation:** -Follow the etcd service documentation and configure peer TLS encryption as appropriate -for your etcd cluster. -Then, edit the etcd pod specification file /etc/kubernetes/manifests/etcd.yaml on the -master node and set the below parameters. ---peer-client-file= ---peer-key-file= - - -**Audit:** - -```bash -/bin/ps -ef | /bin/grep etcd | /bin/grep -v grep -``` - -**Expected Result**: - -```console -'--peer-cert-file' is present AND '--peer-key-file' is present -``` - -**Returned Value**: - -```console -etcd 4318 4301 6 16:15 ? 00:00:14 /usr/local/bin/etcd --listen-peer-urls=https://0.0.0.0:2380 --cert-file=/etc/kubernetes/ssl/kube-etcd-192-168-1-225.pem --advertise-client-urls=https://192.168.1.225:2379,https://192.168.1.225:4001 --election-timeout=5000 --data-dir=/var/lib/rancher/etcd/ --peer-cert-file=/etc/kubernetes/ssl/kube-etcd-192-168-1-225.pem --enable-v2=true --initial-cluster=etcd-cis-aio-0=https://192.168.1.225:2380 --trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --peer-trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --client-cert-auth=true --heartbeat-interval=500 --initial-cluster-token=etcd-cluster-1 --name=etcd-cis-aio-0 --listen-client-urls=https://0.0.0.0:2379 --peer-key-file=/etc/kubernetes/ssl/kube-etcd-192-168-1-225-key.pem --peer-client-cert-auth=true --initial-advertise-peer-urls=https://192.168.1.225:2380 --initial-cluster-state=new --key-file=/etc/kubernetes/ssl/kube-etcd-192-168-1-225-key.pem -root 4366 4349 0 16:15 ? 00:00:00 /opt/rke-tools/rke-etcd-backup etcd-backup save --cacert /etc/kubernetes/ssl/kube-ca.pem --cert /etc/kubernetes/ssl/kube-node.pem --key /etc/kubernetes/ssl/kube-node-key.pem --name etcd-rolling-snapshots --endpoints=192.168.1.225:2379 --retention=72h --creation=12h -root 4643 4626 23 16:15 ? 00:00:46 kube-apiserver --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authorization-mode=Node,RBAC --audit-log-maxsize=100 --audit-log-format=json --requestheader-allowed-names=kube-apiserver-proxy-client --cloud-provider= --etcd-prefix=/registry --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --allow-privileged=true --service-account-lookup=true --admission-control-config-file=/etc/kubernetes/admission.yaml --audit-policy-file=/etc/kubernetes/audit-policy.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --storage-backend=etcd3 --anonymous-auth=false --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --advertise-address=192.168.1.225 --audit-log-maxage=30 --etcd-servers=https://192.168.1.225:2379 --runtime-config=policy/v1beta1/podsecuritypolicy=true --bind-address=0.0.0.0 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --insecure-port=0 --requestheader-group-headers=X-Remote-Group --secure-port=6443 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-extra-headers-prefix=X-Remote-Extra- --profiling=false --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User -root 14998 14985 0 16:19 ? 00:00:00 kube-bench run --targets etcd --scored --nosummary --noremediations --v=5 --config-dir=/etc/kube-bench/cfg --benchmark rke-cis-1.6-hardened --json --log_dir /tmp/results/logs --outputfile /tmp/results/etcd.json - -``` -### 2.5 Ensure that the --peer-client-cert-auth argument is set to true (Automated) - -**Result:** pass - -**Remediation:** -Edit the etcd pod specification file /etc/kubernetes/manifests/etcd.yaml on the master -node and set the below parameter. ---peer-client-cert-auth=true - - -**Audit:** - -```bash -/bin/ps -ef | /bin/grep etcd | /bin/grep -v grep -``` - -**Expected Result**: - -```console -'--peer-client-cert-auth' is present OR 'true' is equal to 'true' -``` - -**Returned Value**: - -```console -etcd 4318 4301 6 16:15 ? 00:00:14 /usr/local/bin/etcd --listen-peer-urls=https://0.0.0.0:2380 --cert-file=/etc/kubernetes/ssl/kube-etcd-192-168-1-225.pem --advertise-client-urls=https://192.168.1.225:2379,https://192.168.1.225:4001 --election-timeout=5000 --data-dir=/var/lib/rancher/etcd/ --peer-cert-file=/etc/kubernetes/ssl/kube-etcd-192-168-1-225.pem --enable-v2=true --initial-cluster=etcd-cis-aio-0=https://192.168.1.225:2380 --trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --peer-trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --client-cert-auth=true --heartbeat-interval=500 --initial-cluster-token=etcd-cluster-1 --name=etcd-cis-aio-0 --listen-client-urls=https://0.0.0.0:2379 --peer-key-file=/etc/kubernetes/ssl/kube-etcd-192-168-1-225-key.pem --peer-client-cert-auth=true --initial-advertise-peer-urls=https://192.168.1.225:2380 --initial-cluster-state=new --key-file=/etc/kubernetes/ssl/kube-etcd-192-168-1-225-key.pem -root 4366 4349 0 16:15 ? 00:00:00 /opt/rke-tools/rke-etcd-backup etcd-backup save --cacert /etc/kubernetes/ssl/kube-ca.pem --cert /etc/kubernetes/ssl/kube-node.pem --key /etc/kubernetes/ssl/kube-node-key.pem --name etcd-rolling-snapshots --endpoints=192.168.1.225:2379 --retention=72h --creation=12h -root 4643 4626 23 16:15 ? 00:00:46 kube-apiserver --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authorization-mode=Node,RBAC --audit-log-maxsize=100 --audit-log-format=json --requestheader-allowed-names=kube-apiserver-proxy-client --cloud-provider= --etcd-prefix=/registry --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --allow-privileged=true --service-account-lookup=true --admission-control-config-file=/etc/kubernetes/admission.yaml --audit-policy-file=/etc/kubernetes/audit-policy.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --storage-backend=etcd3 --anonymous-auth=false --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --advertise-address=192.168.1.225 --audit-log-maxage=30 --etcd-servers=https://192.168.1.225:2379 --runtime-config=policy/v1beta1/podsecuritypolicy=true --bind-address=0.0.0.0 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --insecure-port=0 --requestheader-group-headers=X-Remote-Group --secure-port=6443 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-extra-headers-prefix=X-Remote-Extra- --profiling=false --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User -root 14998 14985 0 16:19 ? 00:00:00 kube-bench run --targets etcd --scored --nosummary --noremediations --v=5 --config-dir=/etc/kube-bench/cfg --benchmark rke-cis-1.6-hardened --json --log_dir /tmp/results/logs --outputfile /tmp/results/etcd.json - -``` -### 2.6 Ensure that the --peer-auto-tls argument is not set to true (Automated) - -**Result:** pass - -**Remediation:** -Edit the etcd pod specification file /etc/kubernetes/manifests/etcd.yaml on the master -node and either remove the --peer-auto-tls parameter or set it to false. ---peer-auto-tls=false - - -**Audit:** - -```bash -/bin/ps -ef | /bin/grep etcd | /bin/grep -v grep -``` - -**Expected Result**: - -```console -'--peer-auto-tls' is not present OR '--peer-auto-tls' is present -``` - -**Returned Value**: - -```console -etcd 4318 4301 6 16:15 ? 00:00:14 /usr/local/bin/etcd --listen-peer-urls=https://0.0.0.0:2380 --cert-file=/etc/kubernetes/ssl/kube-etcd-192-168-1-225.pem --advertise-client-urls=https://192.168.1.225:2379,https://192.168.1.225:4001 --election-timeout=5000 --data-dir=/var/lib/rancher/etcd/ --peer-cert-file=/etc/kubernetes/ssl/kube-etcd-192-168-1-225.pem --enable-v2=true --initial-cluster=etcd-cis-aio-0=https://192.168.1.225:2380 --trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --peer-trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --client-cert-auth=true --heartbeat-interval=500 --initial-cluster-token=etcd-cluster-1 --name=etcd-cis-aio-0 --listen-client-urls=https://0.0.0.0:2379 --peer-key-file=/etc/kubernetes/ssl/kube-etcd-192-168-1-225-key.pem --peer-client-cert-auth=true --initial-advertise-peer-urls=https://192.168.1.225:2380 --initial-cluster-state=new --key-file=/etc/kubernetes/ssl/kube-etcd-192-168-1-225-key.pem -root 4366 4349 0 16:15 ? 00:00:00 /opt/rke-tools/rke-etcd-backup etcd-backup save --cacert /etc/kubernetes/ssl/kube-ca.pem --cert /etc/kubernetes/ssl/kube-node.pem --key /etc/kubernetes/ssl/kube-node-key.pem --name etcd-rolling-snapshots --endpoints=192.168.1.225:2379 --retention=72h --creation=12h -root 4643 4626 23 16:15 ? 00:00:46 kube-apiserver --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authorization-mode=Node,RBAC --audit-log-maxsize=100 --audit-log-format=json --requestheader-allowed-names=kube-apiserver-proxy-client --cloud-provider= --etcd-prefix=/registry --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --allow-privileged=true --service-account-lookup=true --admission-control-config-file=/etc/kubernetes/admission.yaml --audit-policy-file=/etc/kubernetes/audit-policy.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --storage-backend=etcd3 --anonymous-auth=false --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --advertise-address=192.168.1.225 --audit-log-maxage=30 --etcd-servers=https://192.168.1.225:2379 --runtime-config=policy/v1beta1/podsecuritypolicy=true --bind-address=0.0.0.0 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --insecure-port=0 --requestheader-group-headers=X-Remote-Group --secure-port=6443 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-extra-headers-prefix=X-Remote-Extra- --profiling=false --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User -root 14998 14985 0 16:19 ? 00:00:00 kube-bench run --targets etcd --scored --nosummary --noremediations --v=5 --config-dir=/etc/kube-bench/cfg --benchmark rke-cis-1.6-hardened --json --log_dir /tmp/results/logs --outputfile /tmp/results/etcd.json - -``` -### 2.7 Ensure that a unique Certificate Authority is used for etcd (Automated) - -**Result:** pass - -**Remediation:** -[Manual test] -Follow the etcd documentation and create a dedicated certificate authority setup for the -etcd service. -Then, edit the etcd pod specification file /etc/kubernetes/manifests/etcd.yaml on the -master node and set the below parameter. ---trusted-ca-file= - - -**Audit:** - -```bash -/bin/ps -ef | /bin/grep etcd | /bin/grep -v grep -``` - -**Expected Result**: - -```console -'--trusted-ca-file' is present -``` - -**Returned Value**: - -```console -etcd 4318 4301 6 16:15 ? 00:00:14 /usr/local/bin/etcd --listen-peer-urls=https://0.0.0.0:2380 --cert-file=/etc/kubernetes/ssl/kube-etcd-192-168-1-225.pem --advertise-client-urls=https://192.168.1.225:2379,https://192.168.1.225:4001 --election-timeout=5000 --data-dir=/var/lib/rancher/etcd/ --peer-cert-file=/etc/kubernetes/ssl/kube-etcd-192-168-1-225.pem --enable-v2=true --initial-cluster=etcd-cis-aio-0=https://192.168.1.225:2380 --trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --peer-trusted-ca-file=/etc/kubernetes/ssl/kube-ca.pem --client-cert-auth=true --heartbeat-interval=500 --initial-cluster-token=etcd-cluster-1 --name=etcd-cis-aio-0 --listen-client-urls=https://0.0.0.0:2379 --peer-key-file=/etc/kubernetes/ssl/kube-etcd-192-168-1-225-key.pem --peer-client-cert-auth=true --initial-advertise-peer-urls=https://192.168.1.225:2380 --initial-cluster-state=new --key-file=/etc/kubernetes/ssl/kube-etcd-192-168-1-225-key.pem -root 4366 4349 0 16:15 ? 00:00:00 /opt/rke-tools/rke-etcd-backup etcd-backup save --cacert /etc/kubernetes/ssl/kube-ca.pem --cert /etc/kubernetes/ssl/kube-node.pem --key /etc/kubernetes/ssl/kube-node-key.pem --name etcd-rolling-snapshots --endpoints=192.168.1.225:2379 --retention=72h --creation=12h -root 4643 4626 23 16:15 ? 00:00:46 kube-apiserver --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authorization-mode=Node,RBAC --audit-log-maxsize=100 --audit-log-format=json --requestheader-allowed-names=kube-apiserver-proxy-client --cloud-provider= --etcd-prefix=/registry --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --allow-privileged=true --service-account-lookup=true --admission-control-config-file=/etc/kubernetes/admission.yaml --audit-policy-file=/etc/kubernetes/audit-policy.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --storage-backend=etcd3 --anonymous-auth=false --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --advertise-address=192.168.1.225 --audit-log-maxage=30 --etcd-servers=https://192.168.1.225:2379 --runtime-config=policy/v1beta1/podsecuritypolicy=true --bind-address=0.0.0.0 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --insecure-port=0 --requestheader-group-headers=X-Remote-Group --secure-port=6443 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-extra-headers-prefix=X-Remote-Extra- --profiling=false --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User -root 14998 14985 0 16:19 ? 00:00:00 kube-bench run --targets etcd --scored --nosummary --noremediations --v=5 --config-dir=/etc/kube-bench/cfg --benchmark rke-cis-1.6-hardened --json --log_dir /tmp/results/logs --outputfile /tmp/results/etcd.json - -``` -## 3.1 Authentication and Authorization -### 3.1.1 Client certificate authentication should not be used for users (Manual) - -**Result:** warn - -**Remediation:** -Alternative mechanisms provided by Kubernetes such as the use of OIDC should be -implemented in place of client certificates. - - -**Audit:** - -```bash - -``` - - -## 3.2 Logging -### 3.2.1 Ensure that a minimal audit policy is created (Automated) - -**Result:** pass - -**Remediation:** -Create an audit policy file for your cluster. - - -**Audit:** - -```bash -/bin/ps -ef | grep kube-apiserver | grep -v grep -``` - -**Expected Result**: - -```console -'--audit-policy-file' is present -``` - -**Returned Value**: - -```console -root 4643 4626 22 16:15 ? 00:00:46 kube-apiserver --etcd-keyfile=/etc/kubernetes/ssl/kube-node-key.pem --kubelet-client-certificate=/etc/kubernetes/ssl/kube-apiserver.pem --proxy-client-cert-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client.pem --service-cluster-ip-range=10.43.0.0/16 --tls-cert-file=/etc/kubernetes/ssl/kube-apiserver.pem --authorization-mode=Node,RBAC --audit-log-maxsize=100 --audit-log-format=json --requestheader-allowed-names=kube-apiserver-proxy-client --cloud-provider= --etcd-prefix=/registry --proxy-client-key-file=/etc/kubernetes/ssl/kube-apiserver-proxy-client-key.pem --allow-privileged=true --service-account-lookup=true --admission-control-config-file=/etc/kubernetes/admission.yaml --audit-policy-file=/etc/kubernetes/audit-policy.yaml --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --requestheader-client-ca-file=/etc/kubernetes/ssl/kube-apiserver-requestheader-ca.pem --service-node-port-range=30000-32767 --kubelet-certificate-authority=/etc/kubernetes/ssl/kube-ca.pem --storage-backend=etcd3 --anonymous-auth=false --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname --advertise-address=192.168.1.225 --audit-log-maxage=30 --etcd-servers=https://192.168.1.225:2379 --runtime-config=policy/v1beta1/podsecuritypolicy=true --bind-address=0.0.0.0 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 --audit-log-path=/var/log/kube-audit/audit-log.json --audit-log-maxbackup=10 --etcd-certfile=/etc/kubernetes/ssl/kube-node.pem --service-account-key-file=/etc/kubernetes/ssl/kube-service-account-token-key.pem --insecure-port=0 --requestheader-group-headers=X-Remote-Group --secure-port=6443 --enable-admission-plugins=NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota,NodeRestriction,Priority,TaintNodesByCondition,PersistentVolumeClaimResize,PodSecurityPolicy,EventRateLimit --etcd-cafile=/etc/kubernetes/ssl/kube-ca.pem --tls-private-key-file=/etc/kubernetes/ssl/kube-apiserver-key.pem --encryption-provider-config=/etc/kubernetes/ssl/encryption.yaml --requestheader-extra-headers-prefix=X-Remote-Extra- --profiling=false --kubelet-client-key=/etc/kubernetes/ssl/kube-apiserver-key.pem --requestheader-username-headers=X-Remote-User - -``` -### 3.2.2 Ensure that the audit policy covers key security concerns (Manual) - -**Result:** warn - -**Remediation:** -Consider modification of the audit policy in use on the cluster to include these items, at a -minimum. - - -**Audit:** - -```bash - -``` - - -## 4.1 Worker Node Configuration Files -### 4.1.1 Ensure that the kubelet service file permissions are set to 644 or more restrictive (Automated) - -**Result:** notApplicable - -**Remediation:** -Cluster provisioned by RKE doesn’t require or maintain a configuration file for the kubelet service. -All configuration is passed in as arguments at container run time. - - -**Audit:** - -```bash -/bin/sh -c 'if test -e /etc/systemd/system/kubelet.service.d/10-kubeadm.conf; then stat -c permissions=%a /etc/systemd/system/kubelet.service.d/10-kubeadm.conf; fi' -``` - - -### 4.1.2 Ensure that the kubelet service file ownership is set to root:root (Automated) - -**Result:** notApplicable - -**Remediation:** -Cluster provisioned by RKE doesn’t require or maintain a configuration file for the kubelet service. -All configuration is passed in as arguments at container run time. - - -**Audit:** - -```bash -/bin/sh -c 'if test -e /etc/systemd/system/kubelet.service.d/10-kubeadm.conf; then stat -c %U:%G /etc/systemd/system/kubelet.service.d/10-kubeadm.conf; fi' -``` - - -### 4.1.3 If proxy kubeconfig file exists ensure permissions are set to 644 or more restrictive (Automated) - -**Result:** pass - -**Remediation:** -Run the below command (based on the file location on your system) on the each worker node. -For example, -chmod 644 $proykubeconfig - - -**Audit:** - -```bash -/bin/sh -c 'if test -e /node/etc/kubernetes/ssl/kubecfg-kube-proxy.yaml; then stat -c %a /node/etc/kubernetes/ssl/kubecfg-kube-proxy.yaml; fi' -``` - -**Expected Result**: - -```console -'644' is present OR '640' is present OR '600' is equal to '600' OR '444' is present OR '440' is present OR '400' is present OR '000' is present -``` - -**Returned Value**: - -```console -600 - -``` -### 4.1.4 Ensure that the proxy kubeconfig file ownership is set to root:root (Automated) - -**Result:** pass - -**Remediation:** -Run the below command (based on the file location on your system) on the each worker node. -For example, chown root:root /etc/kubernetes/ssl/kubecfg-kube-proxy.yaml - - -**Audit:** - -```bash -/bin/sh -c 'if test -e /etc/kubernetes/ssl/kubecfg-kube-proxy.yaml; then stat -c %U:%G /etc/kubernetes/ssl/kubecfg-kube-proxy.yaml; fi' -``` - -**Expected Result**: - -```console -'root:root' is not present OR '/etc/kubernetes/ssl/kubecfg-kube-proxy.yaml' is not present -``` - -### 4.1.5 Ensure that the --kubeconfig kubelet.conf file permissions are set to 644 or more restrictive (Automated) - -**Result:** pass - -**Remediation:** -Run the below command (based on the file location on your system) on the each worker node. -For example, -chmod 644 /etc/kubernetes/ssl/kubecfg-kube-node.yaml - - -**Audit:** - -```bash -/bin/sh -c 'if test -e /etc/kubernetes/ssl/kubecfg-kube-node.yaml; then stat -c permissions=%a /etc/kubernetes/ssl/kubecfg-kube-node.yaml; fi' -``` - -**Expected Result**: - -```console -'permissions' is not present -``` - -### 4.1.6 Ensure that the --kubeconfig kubelet.conf file ownership is set to root:root (Automated) - -**Result:** pass - -**Remediation:** -Run the below command (based on the file location on your system) on the each worker node. -For example, -chown root:root /etc/kubernetes/ssl/kubecfg-kube-node.yaml - - -**Audit:** - -```bash -/bin/sh -c 'if test -e /node/etc/kubernetes/ssl/kubecfg-kube-node.yaml; then stat -c %U:%G /node/etc/kubernetes/ssl/kubecfg-kube-node.yaml; fi' -``` - -**Expected Result**: - -```console -'root:root' is equal to 'root:root' -``` - -**Returned Value**: - -```console -root:root - -``` -### 4.1.7 Ensure that the certificate authorities file permissions are set to 644 or more restrictive (Automated) - -**Result:** pass - -**Remediation:** -Run the following command to modify the file permissions of the ---client-ca-file chmod 644 - - -**Audit:** - -```bash -check_cafile_permissions.sh -``` - -**Expected Result**: - -```console -'permissions' is not present -``` - -**Audit Script:** -```bash -#!/usr/bin/env bash - -CAFILE=$(ps -ef | grep kubelet | grep -v apiserver | grep -- --client-ca-file= | awk -F '--client-ca-file=' '{print $2}' | awk '{print $1}') -if test -z $CAFILE; then CAFILE=$kubeletcafile; fi -if test -e $CAFILE; then stat -c permissions=%a $CAFILE; fi - -``` -### 4.1.8 Ensure that the client certificate authorities file ownership is set to root:root (Automated) - -**Result:** pass - -**Remediation:** -Run the following command to modify the ownership of the --client-ca-file. -chown root:root - - -**Audit:** - -```bash -check_cafile_ownership.sh -``` - -**Expected Result**: - -```console -'root:root' is not present -``` - -**Audit Script:** -```bash -#!/usr/bin/env bash - -CAFILE=$(ps -ef | grep kubelet | grep -v apiserver | grep -- --client-ca-file= | awk -F '--client-ca-file=' '{print $2}' | awk '{print $1}') -if test -z $CAFILE; then CAFILE=$kubeletcafile; fi -if test -e $CAFILE; then stat -c %U:%G $CAFILE; fi - -``` -### 4.1.9 Ensure that the kubelet --config configuration file has permissions set to 644 or more restrictive (Automated) - -**Result:** notApplicable - -**Remediation:** -Run the following command (using the config file location identified in the Audit step) -chmod 644 /var/lib/kubelet/config.yaml - -Clusters provisioned by RKE doesn’t require or maintain a configuration file for the kubelet. -All configuration is passed in as arguments at container run time. - - -**Audit:** - -```bash -/bin/sh -c 'if test -e /var/lib/kubelet/config.yaml; then stat -c permissions=%a /var/lib/kubelet/config.yaml; fi' -``` - - -### 4.1.10 Ensure that the kubelet --config configuration file ownership is set to root:root (Automated) - -**Result:** notApplicable - -**Remediation:** -Run the following command (using the config file location identified in the Audit step) -chown root:root /var/lib/kubelet/config.yaml - -Clusters provisioned by RKE doesn’t require or maintain a configuration file for the kubelet. -All configuration is passed in as arguments at container run time. - - -**Audit:** - -```bash -/bin/sh -c 'if test -e /var/lib/kubelet/config.yaml; then stat -c %U:%G /var/lib/kubelet/config.yaml; fi' -``` - - -## 4.2 Kubelet -### 4.2.1 Ensure that the anonymous-auth argument is set to false (Automated) - -**Result:** pass - -**Remediation:** -If using a Kubelet config file, edit the file to set authentication: anonymous: enabled to -false. -If using executable arguments, edit the kubelet service file -/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and -set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable. ---anonymous-auth=false -Based on your system, restart the kubelet service. For example: -systemctl daemon-reload -systemctl restart kubelet.service - - -**Audit:** - -```bash -/bin/ps -fC kubelet -``` - -**Expected Result**: - -```console -'' is not present -``` - -### 4.2.2 Ensure that the --authorization-mode argument is not set to AlwaysAllow (Automated) - -**Result:** pass - -**Remediation:** -If using a Kubelet config file, edit the file to set authorization: mode to Webhook. If -using executable arguments, edit the kubelet service file -/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and -set the below parameter in KUBELET_AUTHZ_ARGS variable. ---authorization-mode=Webhook -Based on your system, restart the kubelet service. For example: -systemctl daemon-reload -systemctl restart kubelet.service - - -**Audit:** - -```bash -/bin/ps -fC kubelet -``` - -**Expected Result**: - -```console -'' is not present -``` - -### 4.2.3 Ensure that the --client-ca-file argument is set as appropriate (Automated) - -**Result:** pass - -**Remediation:** -If using a Kubelet config file, edit the file to set authentication: x509: clientCAFile to -the location of the client CA file. -If using command line arguments, edit the kubelet service file -/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and -set the below parameter in KUBELET_AUTHZ_ARGS variable. ---client-ca-file= -Based on your system, restart the kubelet service. For example: -systemctl daemon-reload -systemctl restart kubelet.service - - -**Audit:** - -```bash -/bin/ps -fC kubelet -``` - -**Expected Result**: - -```console -'' is not present -``` - -### 4.2.4 Ensure that the --read-only-port argument is set to 0 (Automated) - -**Result:** pass - -**Remediation:** -If using a Kubelet config file, edit the file to set readOnlyPort to 0. -If using command line arguments, edit the kubelet service file -/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and -set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable. ---read-only-port=0 -Based on your system, restart the kubelet service. For example: -systemctl daemon-reload -systemctl restart kubelet.service - - -**Audit:** - -```bash -/bin/ps -fC kubelet -``` - -**Expected Result**: - -```console -'' is not present OR '' is not present -``` - -### 4.2.5 Ensure that the --streaming-connection-idle-timeout argument is not set to 0 (Automated) - -**Result:** pass - -**Remediation:** -If using a Kubelet config file, edit the file to set streamingConnectionIdleTimeout to a -value other than 0. -If using command line arguments, edit the kubelet service file -/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and -set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable. ---streaming-connection-idle-timeout=5m -Based on your system, restart the kubelet service. For example: -systemctl daemon-reload -systemctl restart kubelet.service - - -**Audit:** - -```bash -/bin/ps -fC kubelet -``` - -**Expected Result**: - -```console -'30m' is not equal to '0' OR '--streaming-connection-idle-timeout' is not present -``` - -**Returned Value**: - -```console -UID PID PPID C STIME TTY TIME CMD -root 5103 5086 7 16:16 ? 00:00:12 kubelet --resolv-conf=/etc/resolv.conf --read-only-port=0 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 --feature-gates=RotateKubeletServerCertificate=true --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --make-iptables-util-chains=true --streaming-connection-idle-timeout=30m --cluster-dns=10.43.0.10 --tls-private-key-file=/etc/kubernetes/ssl/kube-kubelet-192-168-1-225-key.pem --address=0.0.0.0 --cni-bin-dir=/opt/cni/bin --anonymous-auth=false --protect-kernel-defaults=true --cloud-provider= --hostname-override=cis-aio-0 --fail-swap-on=false --cgroups-per-qos=True --authentication-token-webhook=true --event-qps=0 --v=2 --pod-infra-container-image=rancher/pause:3.1 --authorization-mode=Webhook --network-plugin=cni --cluster-domain=cluster.local --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-node.yaml --volume-plugin-dir=/var/lib/kubelet/volumeplugins --cni-conf-dir=/etc/cni/net.d --root-dir=/var/lib/kubelet --tls-cert-file=/etc/kubernetes/ssl/kube-kubelet-192-168-1-225.pem --cgroup-driver=cgroupfs --resolv-conf=/run/systemd/resolve/resolv.conf - -``` -### 4.2.6 Ensure that the --protect-kernel-defaults argument is set to true (Automated) - -**Result:** pass - -**Remediation:** -If using a Kubelet config file, edit the file to set protectKernelDefaults: true. -If using command line arguments, edit the kubelet service file -/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and -set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable. ---protect-kernel-defaults=true -Based on your system, restart the kubelet service. For example: -systemctl daemon-reload -systemctl restart kubelet.service - - -**Audit:** - -```bash -/bin/ps -fC kubelet -``` - -**Expected Result**: - -```console -'' is not present -``` - -### 4.2.7 Ensure that the --make-iptables-util-chains argument is set to true (Automated) - -**Result:** pass - -**Remediation:** -If using a Kubelet config file, edit the file to set makeIPTablesUtilChains: true. -If using command line arguments, edit the kubelet service file -/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and -remove the --make-iptables-util-chains argument from the -KUBELET_SYSTEM_PODS_ARGS variable. -Based on your system, restart the kubelet service. For example: -systemctl daemon-reload -systemctl restart kubelet.service - - -**Audit:** - -```bash -/bin/ps -fC kubelet -``` - -**Expected Result**: - -```console -'' is not present OR '' is not present -``` - -### 4.2.8 Ensure that the --hostname-override argument is not set (Manual) - -**Result:** notApplicable - -**Remediation:** -Edit the kubelet service file /etc/systemd/system/kubelet.service.d/10-kubeadm.conf -on each worker node and remove the --hostname-override argument from the -KUBELET_SYSTEM_PODS_ARGS variable. -Based on your system, restart the kubelet service. For example: -systemctl daemon-reload -systemctl restart kubelet.service - -Clusters provisioned by RKE set the --hostname-override to avoid any hostname configuration errors - - -**Audit:** - -```bash -/bin/ps -fC kubelet -``` - - -### 4.2.9 Ensure that the --event-qps argument is set to 0 or a level which ensures appropriate event capture (Automated) - -**Result:** pass - -**Remediation:** -If using a Kubelet config file, edit the file to set eventRecordQPS: to an appropriate level. -If using command line arguments, edit the kubelet service file -/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and -set the below parameter in KUBELET_SYSTEM_PODS_ARGS variable. -Based on your system, restart the kubelet service. For example: -systemctl daemon-reload -systemctl restart kubelet.service - - -**Audit:** - -```bash -/bin/ps -fC kubelet -``` - -**Expected Result**: - -```console -'' is not present -``` - -### 4.2.10 Ensure that the --tls-cert-file and --tls-private-key-file arguments are set as appropriate (Automated) - -**Result:** pass - -**Remediation:** -If using a Kubelet config file, edit the file to set tlsCertFile to the location -of the certificate file to use to identify this Kubelet, and tlsPrivateKeyFile -to the location of the corresponding private key file. -If using command line arguments, edit the kubelet service file -/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and -set the below parameters in KUBELET_CERTIFICATE_ARGS variable. ---tls-cert-file= ---tls-private-key-file= -Based on your system, restart the kubelet service. For example: -systemctl daemon-reload -systemctl restart kubelet.service - - -**Audit:** - -```bash -/bin/ps -fC kubelet -``` - -**Expected Result**: - -```console -'' is not present AND '' is not present -``` - -### 4.2.11 Ensure that the --rotate-certificates argument is not set to false (Automated) - -**Result:** pass - -**Remediation:** -If using a Kubelet config file, edit the file to add the line rotateCertificates: true or -remove it altogether to use the default value. -If using command line arguments, edit the kubelet service file -/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and -remove --rotate-certificates=false argument from the KUBELET_CERTIFICATE_ARGS -variable. -Based on your system, restart the kubelet service. For example: -systemctl daemon-reload -systemctl restart kubelet.service - - -**Audit:** - -```bash -/bin/ps -fC kubelet -``` - -**Expected Result**: - -```console -'--rotate-certificates' is not present OR '--rotate-certificates' is not present -``` - -**Returned Value**: - -```console -UID PID PPID C STIME TTY TIME CMD -root 5103 5086 6 16:16 ? 00:00:12 kubelet --resolv-conf=/etc/resolv.conf --read-only-port=0 --tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 --feature-gates=RotateKubeletServerCertificate=true --client-ca-file=/etc/kubernetes/ssl/kube-ca.pem --make-iptables-util-chains=true --streaming-connection-idle-timeout=30m --cluster-dns=10.43.0.10 --tls-private-key-file=/etc/kubernetes/ssl/kube-kubelet-192-168-1-225-key.pem --address=0.0.0.0 --cni-bin-dir=/opt/cni/bin --anonymous-auth=false --protect-kernel-defaults=true --cloud-provider= --hostname-override=cis-aio-0 --fail-swap-on=false --cgroups-per-qos=True --authentication-token-webhook=true --event-qps=0 --v=2 --pod-infra-container-image=rancher/pause:3.1 --authorization-mode=Webhook --network-plugin=cni --cluster-domain=cluster.local --kubeconfig=/etc/kubernetes/ssl/kubecfg-kube-node.yaml --volume-plugin-dir=/var/lib/kubelet/volumeplugins --cni-conf-dir=/etc/cni/net.d --root-dir=/var/lib/kubelet --tls-cert-file=/etc/kubernetes/ssl/kube-kubelet-192-168-1-225.pem --cgroup-driver=cgroupfs --resolv-conf=/run/systemd/resolve/resolv.conf - -``` -### 4.2.12 Verify that the RotateKubeletServerCertificate argument is set to true (Automated) - -**Result:** notApplicable - -**Remediation:** -Edit the kubelet service file /etc/systemd/system/kubelet.service.d/10-kubeadm.conf -on each worker node and set the below parameter in KUBELET_CERTIFICATE_ARGS variable. ---feature-gates=RotateKubeletServerCertificate=true -Based on your system, restart the kubelet service. For example: -systemctl daemon-reload -systemctl restart kubelet.service - -Clusters provisioned by RKE handles certificate rotation directly through RKE. - - -**Audit:** - -```bash -/bin/ps -fC kubelet -``` - - -### 4.2.13 Ensure that the Kubelet only makes use of Strong Cryptographic Ciphers (Automated) - -**Result:** pass - -**Remediation:** -If using a Kubelet config file, edit the file to set TLSCipherSuites: to -TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 -or to a subset of these values. -If using executable arguments, edit the kubelet service file -/etc/systemd/system/kubelet.service.d/10-kubeadm.conf on each worker node and -set the --tls-cipher-suites parameter as follows, or to a subset of these values. ---tls-cipher-suites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 -Based on your system, restart the kubelet service. For example: -systemctl daemon-reload -systemctl restart kubelet.service - - -**Audit:** - -```bash -/bin/ps -fC kubelet -``` - -**Expected Result**: - -```console -'' is not present -``` - -## 5.1 RBAC and Service Accounts -### 5.1.1 Ensure that the cluster-admin role is only used where required (Manual) - -**Result:** warn - -**Remediation:** -Identify all clusterrolebindings to the cluster-admin role. Check if they are used and -if they need this role or if they could use a role with fewer privileges. -Where possible, first bind users to a lower privileged role and then remove the -clusterrolebinding to the cluster-admin role : -kubectl delete clusterrolebinding [name] - - -**Audit:** - -```bash - -``` - - -### 5.1.2 Minimize access to secrets (Manual) - -**Result:** warn - -**Remediation:** -Where possible, remove get, list and watch access to secret objects in the cluster. - - -**Audit:** - -```bash - -``` - - -### 5.1.3 Minimize wildcard use in Roles and ClusterRoles (Manual) - -**Result:** warn - -**Remediation:** -Where possible replace any use of wildcards in clusterroles and roles with specific -objects or actions. - - -**Audit:** - -```bash - -``` - - -### 5.1.4 Minimize access to create pods (Manual) - -**Result:** warn - -**Remediation:** -Where possible, remove create access to pod objects in the cluster. - - -**Audit:** - -```bash - -``` - - -### 5.1.5 Ensure that default service accounts are not actively used. (Automated) - -**Result:** pass - -**Remediation:** -Create explicit service accounts wherever a Kubernetes workload requires specific access -to the Kubernetes API server. -Modify the configuration of each default service account to include this value -automountServiceAccountToken: false - - -**Audit:** - -```bash -check_for_default_sa.sh -``` - -**Expected Result**: - -```console -'true' is equal to 'true' -``` - -**Audit Script:** -```bash -#!/bin/bash - -set -eE - -handle_error() { - echo "false" -} - -trap 'handle_error' ERR - -count_sa=$(kubectl get serviceaccounts --all-namespaces -o json | jq -r '.items[] | select(.metadata.name=="default") | select((.automountServiceAccountToken == null) or (.automountServiceAccountToken == true))' | jq .metadata.namespace | wc -l) -if [[ ${count_sa} -gt 0 ]]; then - echo "false" - exit -fi - -for ns in $(kubectl get ns --no-headers -o custom-columns=":metadata.name") -do - for result in $(kubectl get clusterrolebinding,rolebinding -n $ns -o json | jq -r '.items[] | select((.subjects[].kind=="ServiceAccount" and .subjects[].name=="default") or (.subjects[].kind=="Group" and .subjects[].name=="system:serviceaccounts"))' | jq -r '"\(.roleRef.kind),\(.roleRef.name)"') - do - read kind name <<<$(IFS=","; echo $result) - resource_count=$(kubectl get $kind $name -n $ns -o json | jq -r '.rules[] | select(.resources[] != "podsecuritypolicies")' | wc -l) - if [[ ${resource_count} -gt 0 ]]; then - echo "false" - exit - fi - done -done - - -echo "true" -``` -**Returned Value**: - -```console -true - -``` -### 5.1.6 Ensure that Service Account Tokens are only mounted where necessary (Manual) - -**Result:** warn - -**Remediation:** -Modify the definition of pods and service accounts which do not need to mount service -account tokens to disable it. - - -**Audit:** - -```bash - -``` - - -## 5.2 Pod Security Policies -### 5.2.1 Minimize the admission of privileged containers (Manual) - -**Result:** warn - -**Remediation:** -Create a PSP as described in the Kubernetes documentation, ensuring that -the .spec.privileged field is omitted or set to false. - - -**Audit:** - -```bash - -``` - - -### 5.2.2 Minimize the admission of containers wishing to share the host process ID namespace (Automated) - -**Result:** pass - -**Remediation:** -Create a PSP as described in the Kubernetes documentation, ensuring that the -.spec.hostPID field is omitted or set to false. - - -**Audit:** - -```bash -kubectl get psp -o json | jq .items[] | jq -r 'select((.spec.hostPID == null) or (.spec.hostPID == false))' | jq .metadata.name | wc -l | xargs -I {} echo '--count={}' -``` - -**Expected Result**: - -```console -1 is greater than 0 -``` - -**Returned Value**: - -```console ---count=1 - -``` -### 5.2.3 Minimize the admission of containers wishing to share the host IPC namespace (Automated) - -**Result:** pass - -**Remediation:** -Create a PSP as described in the Kubernetes documentation, ensuring that the -.spec.hostIPC field is omitted or set to false. - - -**Audit:** - -```bash -kubectl get psp -o json | jq .items[] | jq -r 'select((.spec.hostIPC == null) or (.spec.hostIPC == false))' | jq .metadata.name | wc -l | xargs -I {} echo '--count={}' -``` - -**Expected Result**: - -```console -1 is greater than 0 -``` - -**Returned Value**: - -```console ---count=1 - -``` -### 5.2.4 Minimize the admission of containers wishing to share the host network namespace (Automated) - -**Result:** pass - -**Remediation:** -Create a PSP as described in the Kubernetes documentation, ensuring that the -.spec.hostNetwork field is omitted or set to false. - - -**Audit:** - -```bash -kubectl get psp -o json | jq .items[] | jq -r 'select((.spec.hostNetwork == null) or (.spec.hostNetwork == false))' | jq .metadata.name | wc -l | xargs -I {} echo '--count={}' -``` - -**Expected Result**: - -```console -1 is greater than 0 -``` - -**Returned Value**: - -```console ---count=1 - -``` -### 5.2.5 Minimize the admission of containers with allowPrivilegeEscalation (Automated) - -**Result:** pass - -**Remediation:** -Create a PSP as described in the Kubernetes documentation, ensuring that the -.spec.allowPrivilegeEscalation field is omitted or set to false. - - -**Audit:** - -```bash -kubectl get psp -o json | jq .items[] | jq -r 'select((.spec.allowPrivilegeEscalation == null) or (.spec.allowPrivilegeEscalation == false))' | jq .metadata.name | wc -l | xargs -I {} echo '--count={}' -``` - -**Expected Result**: - -```console -1 is greater than 0 -``` - -**Returned Value**: - -```console ---count=1 - -``` -### 5.2.6 Minimize the admission of root containers (Manual) - -**Result:** warn - -**Remediation:** -Create a PSP as described in the Kubernetes documentation, ensuring that the -.spec.runAsUser.rule is set to either MustRunAsNonRoot or MustRunAs with the range of -UIDs not including 0. - - -**Audit:** - -```bash - -``` - - -### 5.2.7 Minimize the admission of containers with the NET_RAW capability (Manual) - -**Result:** warn - -**Remediation:** -Create a PSP as described in the Kubernetes documentation, ensuring that the -.spec.requiredDropCapabilities is set to include either NET_RAW or ALL. - - -**Audit:** - -```bash - -``` - - -### 5.2.8 Minimize the admission of containers with added capabilities (Manual) - -**Result:** warn - -**Remediation:** -Ensure that allowedCapabilities is not present in PSPs for the cluster unless -it is set to an empty array. - - -**Audit:** - -```bash - -``` - - -### 5.2.9 Minimize the admission of containers with capabilities assigned (Manual) - -**Result:** warn - -**Remediation:** -Review the use of capabilites in applications runnning on your cluster. Where a namespace -contains applicaions which do not require any Linux capabities to operate consider adding -a PSP which forbids the admission of containers which do not drop all capabilities. - - -**Audit:** - -```bash - -``` - - -## 5.3 Network Policies and CNI -### 5.3.1 Ensure that the CNI in use supports Network Policies (Manual) - -**Result:** warn - -**Remediation:** -If the CNI plugin in use does not support network policies, consideration should be given to -making use of a different plugin, or finding an alternate mechanism for restricting traffic -in the Kubernetes cluster. - - -**Audit:** - -```bash - -``` - - -### 5.3.2 Ensure that all Namespaces have Network Policies defined (Automated) - -**Result:** pass - -**Remediation:** -Follow the documentation and create NetworkPolicy objects as you need them. - - -**Audit:** - -```bash -check_for_network_policies.sh -``` - -**Expected Result**: - -```console -'true' is equal to 'true' -``` - -**Audit Script:** -```bash -#!/bin/bash - -set -eE - -handle_error() { - echo "false" -} - -trap 'handle_error' ERR - -for namespace in $(kubectl get namespaces --all-namespaces -o json | jq -r '.items[].metadata.name'); do - policy_count=$(kubectl get networkpolicy -n ${namespace} -o json | jq '.items | length') - if [[ ${policy_count} -eq 0 ]]; then - echo "false" - exit - fi -done - -echo "true" - -``` -**Returned Value**: - -```console -true - -``` -## 5.4 Secrets Management -### 5.4.1 Prefer using secrets as files over secrets as environment variables (Manual) - -**Result:** warn - -**Remediation:** -if possible, rewrite application code to read secrets from mounted secret files, rather than -from environment variables. - - -**Audit:** - -```bash - -``` - - -### 5.4.2 Consider external secret storage (Manual) - -**Result:** warn - -**Remediation:** -Refer to the secrets management options offered by your cloud provider or a third-party -secrets management solution. - - -**Audit:** - -```bash - -``` - - -## 5.5 Extensible Admission Control -### 5.5.1 Configure Image Provenance using ImagePolicyWebhook admission controller (Manual) - -**Result:** warn - -**Remediation:** -Follow the Kubernetes documentation and setup image provenance. - - -**Audit:** - -```bash - -``` - - -## 5.7 General Policies -### 5.7.1 Create administrative boundaries between resources using namespaces (Manual) - -**Result:** warn - -**Remediation:** -Follow the documentation and create namespaces for objects in your deployment as you need -them. - - -**Audit:** - -```bash - -``` - - -### 5.7.2 Ensure that the seccomp profile is set to docker/default in your pod definitions (Manual) - -**Result:** warn - -**Remediation:** -Seccomp is an alpha feature currently. By default, all alpha features are disabled. So, you -would need to enable alpha features in the apiserver by passing "--feature- -gates=AllAlpha=true" argument. -Edit the /etc/kubernetes/apiserver file on the master node and set the KUBE_API_ARGS -parameter to "--feature-gates=AllAlpha=true" -KUBE_API_ARGS="--feature-gates=AllAlpha=true" -Based on your system, restart the kube-apiserver service. For example: -systemctl restart kube-apiserver.service -Use annotations to enable the docker/default seccomp profile in your pod definitions. An -example is as below: -apiVersion: v1 -kind: Pod -metadata: - name: trustworthy-pod - annotations: - seccomp.security.alpha.kubernetes.io/pod: docker/default -spec: - containers: - - name: trustworthy-container - image: sotrustworthy:latest - - -**Audit:** - -```bash - -``` - - -### 5.7.3 Apply Security Context to Your Pods and Containers (Manual) - -**Result:** warn - -**Remediation:** -Follow the Kubernetes documentation and apply security contexts to your pods. For a -suggested list of security contexts, you may refer to the CIS Security Benchmark for Docker -Containers. - - -**Audit:** - -```bash - -``` - - -### 5.7.4 The default namespace should not be used (Automated) - -**Result:** pass - -**Remediation:** -Ensure that namespaces are created to allow for appropriate segregation of Kubernetes -resources and that all new resources are created in a specific namespace. - - -**Audit:** - -```bash -check_for_default_ns.sh -``` - -**Expected Result**: - -```console -'true' is equal to 'true' -``` - -**Audit Script:** -```bash -#!/bin/bash - -set -eE - -handle_error() { - echo "false" -} - -trap 'handle_error' ERR - -count=$(kubectl get all -n default -o json | jq .items[] | jq -r 'select((.metadata.name!="kubernetes"))' | jq .metadata.name | wc -l) -if [[ ${count} -gt 0 ]]; then - echo "false" - exit -fi - -echo "true" - - -``` -**Returned Value**: - -```console -true - -``` diff --git a/content/rancher/v2.6/en/security/rancher-2.5/1.6-hardening-2.5/_index.md b/content/rancher/v2.6/en/security/rancher-2.5/1.6-hardening-2.5/_index.md deleted file mode 100644 index 78f2763e57c..00000000000 --- a/content/rancher/v2.6/en/security/rancher-2.5/1.6-hardening-2.5/_index.md +++ /dev/null @@ -1,570 +0,0 @@ ---- -title: Hardening Guide with CIS 1.6 Benchmark -weight: 100 ---- - -This document provides prescriptive guidance for hardening a production installation of a RKE cluster to be used with Rancher v2.5.4. It outlines the configurations and controls required to address Kubernetes benchmark controls from the Center for Information Security (CIS). - -> This hardening guide describes how to secure the nodes in your cluster, and it is recommended to follow this guide before installing Kubernetes. - -This hardening guide is intended to be used for RKE clusters and associated with specific versions of the CIS Kubernetes Benchmark, Kubernetes, and Rancher: - - Rancher Version | CIS Benchmark Version | Kubernetes Version -----------------|-----------------------|------------------ - Rancher v2.5.4 | Benchmark 1.6 | Kubernetes v1.18 - -[Click here to download a PDF version of this document](https://releases.rancher.com/documents/security/2.5/Rancher_Hardening_Guide_CIS_1.6.pdf) - -### Overview - -This document provides prescriptive guidance for hardening a RKE cluster to be used for installing Rancher v2.5.4 with Kubernetes v1.18 or provisioning a RKE cluster with Kubernetes v1.18 to be used within Rancher v2.5.4. It outlines the configurations required to address Kubernetes benchmark controls from the Center for Information Security (CIS). - -For more detail about evaluating a hardened cluster against the official CIS benchmark, refer to the [CIS 1.6 Benchmark - Self-Assessment Guide - Rancher v2.5.4]({{< baseurl >}}/rancher/v2.6/en/security/rancher-2.5/1.6-benchmark-2.5/). - -#### Known Issues - -- Rancher **exec shell** and **view logs** for pods are **not** functional in a CIS 1.6 hardened setup when only public IP is provided when registering custom nodes. This functionality requires a private IP to be provided when registering the custom nodes. -- When setting the `default_pod_security_policy_template_id:` to `restricted` Rancher creates **RoleBindings** and **ClusterRoleBindings** on the default service accounts. The CIS 1.6 5.1.5 check requires the default service accounts have no roles or cluster roles bound to it apart from the defaults. In addition the default service accounts should be configured such that it does not provide a service account token and does not have any explicit rights assignments. - -Migration Rancher from 2.4 to 2.5. Addons were removed in HG 2.5, and therefore namespaces on migration may be not created on the downstream clusters. Pod may fail to run because of missing namesapce like ingress-nginx, cattle-system. - -### Configure Kernel Runtime Parameters - -The following `sysctl` configuration is recommended for all nodes type in the cluster. Set the following parameters in `/etc/sysctl.d/90-kubelet.conf`: - -```ini -vm.overcommit_memory=1 -vm.panic_on_oom=0 -kernel.panic=10 -kernel.panic_on_oops=1 -kernel.keys.root_maxbytes=25000000 -``` - -Run `sysctl -p /etc/sysctl.d/90-kubelet.conf` to enable the settings. - -### Configure `etcd` user and group -A user account and group for the **etcd** service is required to be setup before installing RKE. The **uid** and **gid** for the **etcd** user will be used in the RKE **config.yml** to set the proper permissions for files and directories during installation time. - -#### create `etcd` user and group -To create the **etcd** group run the following console commands. - -The commands below use `52034` for **uid** and **gid** are for example purposes. Any valid unused **uid** or **gid** could also be used in lieu of `52034`. - -```bash -groupadd --gid 52034 etcd -useradd --comment "etcd service account" --uid 52034 --gid 52034 etcd -``` - -Update the RKE **config.yml** with the **uid** and **gid** of the **etcd** user: - -```yaml -services: - etcd: - gid: 52034 - uid: 52034 -``` - -#### Set `automountServiceAccountToken` to `false` for `default` service accounts -Kubernetes provides a default service account which is used by cluster workloads where no specific service account is assigned to the pod. Where access to the Kubernetes API from a pod is required, a specific service account should be created for that pod, and rights granted to that service account. The default service account should be configured such that it does not provide a service account token and does not have any explicit rights assignments. - -For each namespace including **default** and **kube-system** on a standard RKE install the **default** service account must include this value: - -```yaml -automountServiceAccountToken: false -``` - -Save the following yaml to a file called `account_update.yaml` - -```yaml -apiVersion: v1 -kind: ServiceAccount -metadata: - name: default -automountServiceAccountToken: false -``` - -Create a bash script file called `account_update.sh`. Be sure to `chmod +x account_update.sh` so the script has execute permissions. - -```bash -#!/bin/bash -e - -for namespace in $(kubectl get namespaces -A -o json | jq -r '.items[].metadata.name'); do - kubectl patch serviceaccount default -n ${namespace} -p "$(cat account_update.yaml)" -done -``` - -### Ensure that all Namespaces have Network Policies defined - -Running different applications on the same Kubernetes cluster creates a risk of one -compromised application attacking a neighboring application. Network segmentation is -important to ensure that containers can communicate only with those they are supposed -to. A network policy is a specification of how selections of pods are allowed to -communicate with each other and other network endpoints. - -Network Policies are namespace scoped. When a network policy is introduced to a given -namespace, all traffic not allowed by the policy is denied. However, if there are no network -policies in a namespace all traffic will be allowed into and out of the pods in that -namespace. To enforce network policies, a CNI (container network interface) plugin must be enabled. -This guide uses [canal](https://github.com/projectcalico/canal) to provide the policy enforcement. -Additional information about CNI providers can be found -[here](https://rancher.com/blog/2019/2019-03-21-comparing-kubernetes-cni-providers-flannel-calico-canal-and-weave/) - -Once a CNI provider is enabled on a cluster a default network policy can be applied. For reference purposes a -**permissive** example is provide below. If you want to allow all traffic to all pods in a namespace -(even if policies are added that cause some pods to be treated as “isolatedâ€�), -you can create a policy that explicitly allows all traffic in that namespace. Save the following `yaml` as -`default-allow-all.yaml`. Additional [documentation](https://kubernetes.io/docs/concepts/services-networking/network-policies/) -about network policies can be found on the Kubernetes site. - -> This `NetworkPolicy` is not recommended for production use - -```yaml ---- -apiVersion: networking.k8s.io/v1 -kind: NetworkPolicy -metadata: - name: default-allow-all -spec: - podSelector: {} - ingress: - - {} - egress: - - {} - policyTypes: - - Ingress - - Egress -``` - -Create a bash script file called `apply_networkPolicy_to_all_ns.sh`. Be sure to -`chmod +x apply_networkPolicy_to_all_ns.sh` so the script has execute permissions. - -```bash -#!/bin/bash -e - -for namespace in $(kubectl get namespaces -A -o json | jq -r '.items[].metadata.name'); do - kubectl apply -f default-allow-all.yaml -n ${namespace} -done -``` - -Execute this script to apply the `default-allow-all.yaml` the **permissive** `NetworkPolicy` to all namespaces. - -### Reference Hardened RKE `cluster.yml` configuration - -The reference `cluster.yml` is used by the RKE CLI that provides the configuration needed to achieve a hardened install -of Rancher Kubernetes Engine (RKE). Install [documentation](https://rancher.com/docs/rke/latest/en/installation/) is -provided with additional details about the configuration items. This reference `cluster.yml` does not include the required **nodes** directive which will vary depending on your environment. Documentation for node configuration can be found here: https://rancher.com/docs/rke/latest/en/config-options/nodes - - -```yaml -# If you intend to deploy Kubernetes in an air-gapped environment, -# please consult the documentation on how to configure custom RKE images. -# https://rancher.com/docs/rke/latest/en/installation/ - -# the nodes directive is required and will vary depending on your environment -# documentation for node configuration can be found here: -# https://rancher.com/docs/rke/latest/en/config-options/nodes -nodes: [] -services: - etcd: - image: "" - extra_args: {} - extra_binds: [] - extra_env: [] - win_extra_args: {} - win_extra_binds: [] - win_extra_env: [] - external_urls: [] - ca_cert: "" - cert: "" - key: "" - path: "" - uid: 52034 - gid: 52034 - snapshot: false - retention: "" - creation: "" - backup_config: null - kube-api: - image: "" - extra_args: {} - extra_binds: [] - extra_env: [] - win_extra_args: {} - win_extra_binds: [] - win_extra_env: [] - service_cluster_ip_range: "" - service_node_port_range: "" - pod_security_policy: true - always_pull_images: false - secrets_encryption_config: - enabled: true - custom_config: null - audit_log: - enabled: true - configuration: null - admission_configuration: null - event_rate_limit: - enabled: true - configuration: null - kube-controller: - image: "" - extra_args: - feature-gates: RotateKubeletServerCertificate=true - extra_binds: [] - extra_env: [] - win_extra_args: {} - win_extra_binds: [] - win_extra_env: [] - cluster_cidr: "" - service_cluster_ip_range: "" - scheduler: - image: "" - extra_args: {} - extra_binds: [] - extra_env: [] - win_extra_args: {} - win_extra_binds: [] - win_extra_env: [] - kubelet: - image: "" - extra_args: - feature-gates: RotateKubeletServerCertificate=true - protect-kernel-defaults: "true" - tls-cipher-suites: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 - extra_binds: [] - extra_env: [] - win_extra_args: {} - win_extra_binds: [] - win_extra_env: [] - cluster_domain: cluster.local - infra_container_image: "" - cluster_dns_server: "" - fail_swap_on: false - generate_serving_certificate: true - kubeproxy: - image: "" - extra_args: {} - extra_binds: [] - extra_env: [] - win_extra_args: {} - win_extra_binds: [] - win_extra_env: [] -network: - plugin: "" - options: {} - mtu: 0 - node_selector: {} - update_strategy: null -authentication: - strategy: "" - sans: [] - webhook: null -addons: | - apiVersion: policy/v1beta1 - kind: PodSecurityPolicy - metadata: - name: restricted - spec: - requiredDropCapabilities: - - NET_RAW - privileged: false - allowPrivilegeEscalation: false - defaultAllowPrivilegeEscalation: false - fsGroup: - rule: RunAsAny - runAsUser: - rule: MustRunAsNonRoot - seLinux: - rule: RunAsAny - supplementalGroups: - rule: RunAsAny - volumes: - - emptyDir - - secret - - persistentVolumeClaim - - downwardAPI - - configMap - - projected - --- - apiVersion: rbac.authorization.k8s.io/v1 - kind: ClusterRole - metadata: - name: psp:restricted - rules: - - apiGroups: - - extensions - resourceNames: - - restricted - resources: - - podsecuritypolicies - verbs: - - use - --- - apiVersion: rbac.authorization.k8s.io/v1 - kind: ClusterRoleBinding - metadata: - name: psp:restricted - roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: psp:restricted - subjects: - - apiGroup: rbac.authorization.k8s.io - kind: Group - name: system:serviceaccounts - - apiGroup: rbac.authorization.k8s.io - kind: Group - name: system:authenticated - --- - apiVersion: networking.k8s.io/v1 - kind: NetworkPolicy - metadata: - name: default-allow-all - spec: - podSelector: {} - ingress: - - {} - egress: - - {} - policyTypes: - - Ingress - - Egress - --- - apiVersion: v1 - kind: ServiceAccount - metadata: - name: default - automountServiceAccountToken: false -addons_include: [] -system_images: - etcd: "" - alpine: "" - nginx_proxy: "" - cert_downloader: "" - kubernetes_services_sidecar: "" - kubedns: "" - dnsmasq: "" - kubedns_sidecar: "" - kubedns_autoscaler: "" - coredns: "" - coredns_autoscaler: "" - nodelocal: "" - kubernetes: "" - flannel: "" - flannel_cni: "" - calico_node: "" - calico_cni: "" - calico_controllers: "" - calico_ctl: "" - calico_flexvol: "" - canal_node: "" - canal_cni: "" - canal_controllers: "" - canal_flannel: "" - canal_flexvol: "" - weave_node: "" - weave_cni: "" - pod_infra_container: "" - ingress: "" - ingress_backend: "" - metrics_server: "" - windows_pod_infra_container: "" -ssh_key_path: "" -ssh_cert_path: "" -ssh_agent_auth: false -authorization: - mode: "" - options: {} -ignore_docker_version: false -kubernetes_version: v1.18.12-rancher1-1 -private_registries: [] -ingress: - provider: "" - options: {} - node_selector: {} - extra_args: {} - dns_policy: "" - extra_envs: [] - extra_volumes: [] - extra_volume_mounts: [] - update_strategy: null - http_port: 0 - https_port: 0 - network_mode: "" -cluster_name: -cloud_provider: - name: "" -prefix_path: "" -win_prefix_path: "" -addon_job_timeout: 0 -bastion_host: - address: "" - port: "" - user: "" - ssh_key: "" - ssh_key_path: "" - ssh_cert: "" - ssh_cert_path: "" -monitoring: - provider: "" - options: {} - node_selector: {} - update_strategy: null - replicas: null -restore: - restore: false - snapshot_name: "" -dns: null -upgrade_strategy: - max_unavailable_worker: "" - max_unavailable_controlplane: "" - drain: null - node_drain_input: null -``` - -### Reference Hardened RKE Template configuration - -The reference RKE Template provides the configuration needed to achieve a hardened install of Kubenetes. -RKE Templates are used to provision Kubernetes and define Rancher settings. Follow the Rancher -[documentaion](https://rancher.com/docs/rancher/v2.6/en/installation) for additional installation and RKE Template details. - -```yaml -# -# Cluster Config -# -default_pod_security_policy_template_id: restricted -docker_root_dir: /var/lib/docker -enable_cluster_alerting: false -enable_cluster_monitoring: false -enable_network_policy: true -# -# Rancher Config -# -rancher_kubernetes_engine_config: - addon_job_timeout: 45 - ignore_docker_version: true - kubernetes_version: v1.18.12-rancher1-1 -# -# If you are using calico on AWS -# -# network: -# plugin: calico -# calico_network_provider: -# cloud_provider: aws -# -# # To specify flannel interface -# -# network: -# plugin: flannel -# flannel_network_provider: -# iface: eth1 -# -# # To specify flannel interface for canal plugin -# -# network: -# plugin: canal -# canal_network_provider: -# iface: eth1 -# - network: - mtu: 0 - plugin: canal - rotate_encryption_key: false -# -# services: -# kube-api: -# service_cluster_ip_range: 10.43.0.0/16 -# kube-controller: -# cluster_cidr: 10.42.0.0/16 -# service_cluster_ip_range: 10.43.0.0/16 -# kubelet: -# cluster_domain: cluster.local -# cluster_dns_server: 10.43.0.10 -# - services: - etcd: - backup_config: - enabled: false - interval_hours: 12 - retention: 6 - safe_timestamp: false - creation: 12h - extra_args: - election-timeout: '5000' - heartbeat-interval: '500' - gid: 52034 - retention: 72h - snapshot: false - uid: 52034 - kube_api: - always_pull_images: false - audit_log: - enabled: true - event_rate_limit: - enabled: true - pod_security_policy: true - secrets_encryption_config: - enabled: true - service_node_port_range: 30000-32767 - kube_controller: - extra_args: - feature-gates: RotateKubeletServerCertificate=true - kubelet: - extra_args: - feature-gates: RotateKubeletServerCertificate=true - protect-kernel-defaults: 'true' - tls-cipher-suites: >- - TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_256_GCM_SHA384,TLS_RSA_WITH_AES_128_GCM_SHA256 - fail_swap_on: false - generate_serving_certificate: true - ssh_agent_auth: false - upgrade_strategy: - max_unavailable_controlplane: '1' - max_unavailable_worker: 10% -windows_prefered_cluster: false -``` - -### Hardened Reference Ubuntu 20.04 LTS **cloud-config**: - -The reference **cloud-config** is generally used in cloud infrastructure environments to allow for -configuration management of compute instances. The reference config configures Ubuntu operating system level settings -needed before installing kubernetes. - -```yaml -#cloud-config -apt: - sources: - docker.list: - source: deb [arch=amd64] http://download.docker.com/linux/ubuntu $RELEASE stable - keyid: 9DC858229FC7DD38854AE2D88D81803C0EBFCD88 -system_info: - default_user: - groups: - - docker -write_files: -- path: "/etc/apt/preferences.d/docker" - owner: root:root - permissions: '0600' - content: | - Package: docker-ce - Pin: version 5:19* - Pin-Priority: 800 -- path: "/etc/sysctl.d/90-kubelet.conf" - owner: root:root - permissions: '0644' - content: | - vm.overcommit_memory=1 - vm.panic_on_oom=0 - kernel.panic=10 - kernel.panic_on_oops=1 - kernel.keys.root_maxbytes=25000000 -package_update: true -packages: -- docker-ce -- docker-ce-cli -- containerd.io -runcmd: -- sysctl -p /etc/sysctl.d/90-kubelet.conf -- groupadd --gid 52034 etcd -- useradd --comment "etcd service account" --uid 52034 --gid 52034 etcd -``` diff --git a/content/rancher/v2.6/en/security/rancher-2.5/_index.md b/content/rancher/v2.6/en/security/rancher-2.5/_index.md deleted file mode 100644 index 7282a7d813a..00000000000 --- a/content/rancher/v2.6/en/security/rancher-2.5/_index.md +++ /dev/null @@ -1,55 +0,0 @@ ---- -title: Self-Assessment and Hardening Guides for Rancher v2.5 -shortTitle: Rancher v2.5 Guides -weight: 1 ---- - -Rancher v2.5 introduced the capability to deploy Rancher on any Kubernetes cluster. For that reason, we now provide separate security hardening guides for Rancher deployments on each of Rancher's Kubernetes distributions. - -- [Rancher Kubernetes Distributions](#rancher-kubernetes-distributions) -- [Hardening Guides and Benchmark Versions](#hardening-guides-and-benchmark-versions) - - [RKE Guides](#rke-guides) - - [RKE2 Guides](#rke2-guides) - - [K3s Guides](#k3s) -- [Rancher with SELinux](#rancher-with-selinux) - -# Rancher Kubernetes Distributions - -Rancher has the following Kubernetes distributions: - -- [**RKE,**]({{}}/rke/latest/en/) Rancher Kubernetes Engine, is a CNCF-certified Kubernetes distribution that runs entirely within Docker containers. -- [**K3s,**]({{}}/k3s/latest/en/) is a fully conformant, lightweight Kubernetes distribution. It is easy to install, with half the memory of upstream Kubernetes, all in a binary of less than 100 MB. -- [**RKE2**](https://docs.rke2.io/) is a fully conformant Kubernetes distribution that focuses on security and compliance within the U.S. Federal Government sector. - -To harden a Kubernetes cluster outside of Rancher's distributions, refer to your Kubernetes provider docs. - -# Hardening Guides and Benchmark Versions - -These guides have been tested along with the Rancher v2.5 release. Each self-assessment guide is accompanied with a hardening guide and tested on a specific Kubernetes version and CIS benchmark version. If a CIS benchmark has not been validated for your Kubernetes version, you can choose to use the existing guides until a newer version is added. - -### RKE Guides - -Kubernetes Version | CIS Benchmark Version | Self Assessment Guide | Hardening Guides ----|---|---|--- -Kubernetes v1.15+ | CIS v1.5 | [Link](./1.5-benchmark-2.5) | [Link](./1.5-hardening-2.5) -Kubernetes v1.18+ | CIS v1.6 | [Link](./1.6-benchmark-2.5) | [Link](./1.6-hardening-2.5) - -### RKE2 Guides - -Kubernetes Version | CIS Benchmark Version | Self Assessment Guide | Hardening Guides ----|---|---|--- -Kubernetes v1.18 | CIS v1.5 | [Link](https://docs.rke2.io/security/cis_self_assessment15/) | [Link](https://docs.rke2.io/security/hardening_guide/) -Kubernetes v1.20 | CIS v1.6 | [Link](https://docs.rke2.io/security/cis_self_assessment16/) | [Link](https://docs.rke2.io/security/hardening_guide/) - -### K3s Guides - -Kubernetes Version | CIS Benchmark Version | Self Assessment Guide | Hardening Guide ----|---|---|--- -Kubernetes v1.17, v1.18, & v1.19 | CIS v1.5 | [Link]({{}}/k3s/latest/en/security/self_assessment/) | [Link]({{}}/k3s/latest/en/security/hardening_guide/) - - -# Rancher with SELinux - -[Security-Enhanced Linux (SELinux)](https://en.wikipedia.org/wiki/Security-Enhanced_Linux) is a security enhancement to Linux. After being historically used by government agencies, SELinux is now industry standard and is enabled by default on CentOS 7 and 8. - -To use Rancher with SELinux, we recommend installing the `rancher-selinux` RPM according to the instructions on [this page.]({{}}/rancher/v2.6/en/security/selinux/#installing-the-rancher-selinux-rpm) diff --git a/content/rancher/v2.6/en/troubleshooting/dns/_index.md b/content/rancher/v2.6/en/troubleshooting/dns/_index.md index e9a181fc4e8..a1292df3e32 100644 --- a/content/rancher/v2.6/en/troubleshooting/dns/_index.md +++ b/content/rancher/v2.6/en/troubleshooting/dns/_index.md @@ -158,7 +158,7 @@ kubectl run -i --restart=Never --rm test-${RANDOM} --image=ubuntu --overrides='{ Enabling query logging can be done by enabling the [log plugin](https://coredns.io/plugins/log/) in the Corefile configuration in the configmap `coredns`. You can do so by using `kubectl -n kube-system edit configmap coredns` or use the command below to replace the configuration in place: ``` -kubectl get configmap -n kube-system coredns -o json | kubectl get configmap -n kube-system coredns -o json | sed -e 's_loadbalance_log\\n loadbalance_g' | kubectl apply -f - +kubectl get configmap -n kube-system coredns -o json | sed -e 's_loadbalance_log\\n loadbalance_g' | kubectl apply -f - ``` All queries will now be logged and can be checked using the command in [Check CoreDNS logging](#check-coredns-logging). diff --git a/content/rancher/v2.6/en/troubleshooting/expired-webhook-certificates/_index.md b/content/rancher/v2.6/en/troubleshooting/expired-webhook-certificates/_index.md index 99979410992..59a7bfbcc1f 100644 --- a/content/rancher/v2.6/en/troubleshooting/expired-webhook-certificates/_index.md +++ b/content/rancher/v2.6/en/troubleshooting/expired-webhook-certificates/_index.md @@ -10,6 +10,7 @@ Rancher will advise the community once there is a permanent solution in place fo ##### 1. Users with cluster access, run the following commands: ``` kubectl delete secret -n cattle-system cattle-webhook-tls +kubectl delete mutatingwebhookconfigurations.admissionregistration.k8s.io --ignore-not-found=true rancher.cattle.io kubectl delete pod -n cattle-system -l app=rancher-webhook ``` @@ -17,6 +18,8 @@ kubectl delete pod -n cattle-system -l app=rancher-webhook 1. Delete the `cattle-webhook-tls` secret in the `cattle-system` namespace in the local cluster. -1. Delete the `rancher-webhook` pod in the `cattle-system` namespace in the local cluster. +2. Delete the `rancher.cattle.io` mutating webhook -**Note:** The webhook certificate expiration issue is not specific to `cattle-webhook-tls` as listed in the examples. You will fill in your expired certificate secret accordingly. \ No newline at end of file +3. Delete the `rancher-webhook` pod in the `cattle-system` namespace in the local cluster. + +**Note:** The webhook certificate expiration issue is not specific to `cattle-webhook-tls` as listed in the examples. You will fill in your expired certificate secret accordingly. diff --git a/content/rancher/v2.6/en/troubleshooting/kubernetes-components/controlplane/_index.md b/content/rancher/v2.6/en/troubleshooting/kubernetes-components/controlplane/_index.md index 201c6e30aaf..e27339cb8b5 100644 --- a/content/rancher/v2.6/en/troubleshooting/kubernetes-components/controlplane/_index.md +++ b/content/rancher/v2.6/en/troubleshooting/kubernetes-components/controlplane/_index.md @@ -37,4 +37,12 @@ The logging of the containers can contain information on what the problem could docker logs kube-apiserver docker logs kube-controller-manager docker logs kube-scheduler +``` + +# RKE2 Server Logging + +If Rancher provisions an RKE2 cluster that can't communicate with Rancher, you can run this command on a server node in the downstream cluster to get the RKE2 server logs: + +``` +journalctl -u rke2-server -f ``` \ No newline at end of file diff --git a/content/rancher/v2.6/en/virtualization-admin/_index.md b/content/rancher/v2.6/en/virtualization-admin/_index.md index f37ffb8b951..19c517f7c3d 100644 --- a/content/rancher/v2.6/en/virtualization-admin/_index.md +++ b/content/rancher/v2.6/en/virtualization-admin/_index.md @@ -25,6 +25,8 @@ To navigate to the Harvester cluster, click **☰ > Virtualization Management**. The [Harvester node driver](https://docs.harvesterhci.io/v0.3/rancher/node-driver/) is marked as `tech preview` on RKE and RKE2 options in Rancher. This will be the case both on the Create page and once the driver is already enabled. The node driver is available whether or not the Harvester feature flag is enabled. Note that the node driver is off by default. Users may create RKE or RKE2 clusters on Harvester only from the Cluster Management page. +Harvester allows `.ISO` images to be uploaded and displayed through the Harvester UI, but this is not supported in the Rancher UI. This is because `.ISO` images usually require additional setup that interferes with a clean deployment (without requiring user intervention), and they are not typically used in cloud environments. + Click [here]({{}}/rancher/v2.6/en/admin-settings/drivers/#node-drivers) for more information on node drivers in Rancher. ### Limitations diff --git a/content/rke/latest/en/config-options/_index.md b/content/rke/latest/en/config-options/_index.md index 30b0383d445..3fe0a5ab2eb 100644 --- a/content/rke/latest/en/config-options/_index.md +++ b/content/rke/latest/en/config-options/_index.md @@ -50,7 +50,10 @@ cluster_name: mycluster ### Supported Docker Versions -By default, RKE will check the installed Docker version on all hosts and fail with an error if the version is not supported by Kubernetes. The list of [supported Docker versions](https://github.com/rancher/rke/blob/master/docker/docker.go#L37-L41) are set specifically for each Kubernetes version. To override this behavior, set this option to `true`. +By default, RKE will check the installed Docker version on all hosts and fail with an error if the version is not supported by Kubernetes. The list of supported Docker versions is set specifically for each Kubernetes version in kontainer-driver-metadata depending on the RKE version used, as shown below. To override this behavior, set this option to `true`. Refer to the following: + +- For RKE v1.3.x, see this [link](https://github.com/rancher/kontainer-driver-metadata/blob/release-v2.6/rke/k8s_docker_info.go). +- For RKE v1.2.x, see this [link](https://github.com/rancher/kontainer-driver-metadata/blob/release-v2.5/rke/k8s_docker_info.go). The default value is `false`. diff --git a/content/rke/latest/en/config-options/add-ons/_index.md b/content/rke/latest/en/config-options/add-ons/_index.md index 31c819d4b00..e449e079d77 100644 --- a/content/rke/latest/en/config-options/add-ons/_index.md +++ b/content/rke/latest/en/config-options/add-ons/_index.md @@ -27,10 +27,9 @@ There are a few things worth noting: As of version v0.1.7, add-ons are split into two categories: -- **Critical add-ons:** If these add-ons fail to deploy for any reason, RKE will error out. -- **Non-critical add-ons:** If these add-ons fail to deploy, RKE will only log a warning and continue deploying any other add-ons. +- **Critical add-ons:** If these add-ons fail to deploy for any reason, RKE will error out. All system add-ons, such as the [network plug-in]({{}}/rke/latest/en/config-options/add-ons/network-plugins/), KubeDNS, and [ingress controllers]({{}}/rke/latest/en/config-options/add-ons/ingress-controllers/), are considered critical. -Currently, only the [network plug-in]({{}}/rke/latest/en/config-options/add-ons/network-plugins/) is considered critical. KubeDNS, [ingress controllers]({{}}/rke/latest/en/config-options/add-ons/ingress-controllers/) and [user-defined add-ons]({{}}/rke/latest/en/config-options/add-ons/user-defined-add-ons/) are considered non-critical. +- **Non-critical add-ons:** If these add-ons fail to deploy, RKE will only log a warning and continue deploying any other add-ons. [User-defined add-ons]({{}}/rke/latest/en/config-options/add-ons/user-defined-add-ons/) are considered non-critical. # Add-on Deployment Jobs diff --git a/content/rke/latest/en/config-options/cloud-providers/_index.md b/content/rke/latest/en/config-options/cloud-providers/_index.md index 45501bcf784..f9a58253e15 100644 --- a/content/rke/latest/en/config-options/cloud-providers/_index.md +++ b/content/rke/latest/en/config-options/cloud-providers/_index.md @@ -3,7 +3,7 @@ title: Cloud Providers weight: 250 --- -RKE supports the ability to set your specific [cloud provider](https://kubernetes.io/docs/concepts/cluster-administration/cloud-providers/) for your Kubernetes cluster. There are specific cloud configurations for these cloud providers. +RKE supports the ability to set your specific cloud provider for your Kubernetes cluster. There are specific cloud configurations for these cloud providers. To enable a cloud provider its name as well as any required configuration options must be provided under the `cloud_provider` directive in the cluster YML. * [AWS]({{}}/rke/latest/en/config-options/cloud-providers/aws) diff --git a/content/rke/latest/en/config-options/secrets-encryption/_index.md b/content/rke/latest/en/config-options/secrets-encryption/_index.md index 81e24ff9bf9..f2539991d7f 100644 --- a/content/rke/latest/en/config-options/secrets-encryption/_index.md +++ b/content/rke/latest/en/config-options/secrets-encryption/_index.md @@ -106,14 +106,14 @@ OPTIONS: This command will perform the following actions: - Generate a new random 32-byte encryption key -- Generate a new provider configuration with the new key as the first provider and the second key as the second provider. When the secrets are rewritten, the first key will be used to encrypt the data on the write operation, while the second key (the old key) will be used to decrypt the stored data during the the read operation +- Generate a new provider configuration with the new key as the first provider and the old key as the second provider. When the secrets are rewritten, the first key will be used to encrypt the data on the write operation, while the second key (the old key) will be used to decrypt the stored data during the the read operation - Deploy the new provider configuration to all `controlplane` nodes and restart the `kube-apiserver` - Rewrite all secrets. This process will re-encrypt all the secrets with the new key. - Update the configuration to remove the old key and restart the `kube-apiserver` ### Rotating Keys by Disabling and Re-enabling Encryption in cluster.yml -For a cluster with encryption enabled, you can rotate the encryption keys by updating `cluster.yml`. If you enable and re-enable the data encryption in the `cluster.yml`, RKE will not reuse old keys. Instead, it will generate new keys every time, yielding the same result as a key rotation with the RKE CLI. +For a cluster with encryption enabled, you can rotate the encryption keys by updating `cluster.yml`. If you disable and re-enable the data encryption in the `cluster.yml`, RKE will not reuse old keys. Instead, it will generate new keys every time, yielding the same result as a key rotation with the RKE CLI. # Custom At-Rest Data Encryption Configuration With managed configuration, RKE provides the user with a very simple way to enable and disable encryption with minimal interaction and configuration. However, it doesn't allow for any customization to the configuration. @@ -139,7 +139,7 @@ kube-api: secrets_encryption_config: enabled: true custom_config: - api_version: apiserver.config.k8s.io/v1 + apiVersion: apiserver.config.k8s.io/v1 kind: EncryptionConfiguration resources: - Providers: @@ -147,7 +147,7 @@ kube-api: Keys: - Name: key1 Secret: - Resources: + resources: - secrets - identity: {} ``` diff --git a/content/rke/latest/en/config-options/services/_index.md b/content/rke/latest/en/config-options/services/_index.md index 0266731a249..77a3a969195 100644 --- a/content/rke/latest/en/config-options/services/_index.md +++ b/content/rke/latest/en/config-options/services/_index.md @@ -6,7 +6,9 @@ weight: 230 To deploy Kubernetes, RKE deploys several core components or services in Docker containers on the nodes. Based on the roles of the node, the containers deployed may be different. -**All services support additional [custom arguments, Docker mount binds and extra environment variables]({{}}/rke/latest/en/config-options/services/services-extras/).** +>**Note:** All services support additional custom arguments, Docker mount binds, and extra environment variables. +> +>To configure advanced options for Kubernetes services such as `kubelet`, `kube-controller`, and `kube-apiserver` that are not documented below, see the [`extra_args` documentation]({{}}/rke/latest/en/config-options/services/services-extras/) for more details. | Component | Services key name in cluster.yml | |-------------------------|----------------------------------| diff --git a/content/rke/latest/en/config-options/services/services-extras/_index.md b/content/rke/latest/en/config-options/services/services-extras/_index.md index 8c86d64de56..9a6d579854a 100644 --- a/content/rke/latest/en/config-options/services/services-extras/_index.md +++ b/content/rke/latest/en/config-options/services/services-extras/_index.md @@ -34,7 +34,7 @@ Additional volume binds can be added to services using the `extra_binds` argumen services: kubelet: extra_binds: - - "/host/dev:/dev" + - "/dev:/host/dev" - "/usr/libexec/kubernetes/kubelet-plugins:/usr/libexec/kubernetes/kubelet-plugins:z" ``` diff --git a/content/rke/latest/en/os/_index.md b/content/rke/latest/en/os/_index.md index c1e1dc79db8..16d05b3b9c6 100644 --- a/content/rke/latest/en/os/_index.md +++ b/content/rke/latest/en/os/_index.md @@ -148,6 +148,19 @@ https://kubic.opensuse.org/blog/2021-02-08-MicroOS-Kubic-Rancher-RKE/ If using Red Hat Enterprise Linux, Oracle Linux or CentOS, you cannot use the `root` user as [SSH user]({{}}/rke/latest/en/config-options/nodes/#ssh-user) due to [Bugzilla 1527565](https://bugzilla.redhat.com/show_bug.cgi?id=1527565). Please follow the instructions below how to setup Docker correctly, based on the way you installed Docker on the node. +>**Note:** In RHEL 8.4, two extra services are included on the NetworkManager: `nm-cloud-setup.service` and `nm-cloud-setup.timer`. These services add a routing table that interferes with the CNI plugin's configuration. If these services are enabled, you must disable them using the command below, and then reboot the node to restore connectivity: +> +> ``` + systemctl disable nm-cloud-setup.service nm-cloud-setup.timer + reboot + ``` +> +> In addition, the default firewall settings of RHEL 8.4 prevent RKE1 pods from reaching out to Rancher to connect to the cluster agent. To allow Docker containers to reach out to the internet and connect to Rancher, make the following updates to the firewall settings: +> ``` + firewall-cmd --zone=public --add-masquerade --permanent + firewall-cmd --reload + ``` + #### Using upstream Docker If you are using upstream Docker, the package name is `docker-ce` or `docker-ee`. You can check the installed package by executing: diff --git a/layouts/_default/list.html b/layouts/_default/list.html index e370b7cb515..50583bb7514 100644 --- a/layouts/_default/list.html +++ b/layouts/_default/list.html @@ -15,11 +15,11 @@
- +
{{end}} - {{ if in .Dir "/pipelines" }} -
- As of Rancher v2.5, Git-based deployment pipelines are now recommended to be handled with Rancher Continuous Delivery powered by Fleet, available in the Rancher UI by clicking ☰ > Continuous Delivery. -
- {{end}} {{ if in .Dir "/multi-cluster-apps" }}
As of Rancher v2.5, multi-cluster apps are deprecated. We now recommend using Fleet for deploying apps across clusters. It is available in the Rancher UI by clicking ☰ > Continuous Delivery. @@ -42,10 +37,15 @@ {{end}} {{ if in .Dir "os/v1.x" }}
- RancherOS 1.x is currently in a maintain-only-as-essential mode. It is no longer being actively maintained at a code level other than addressing critical or security fixes. For more information about the support status of RancherOS, see this page. + RancherOS 1.x is currently in a maintain-only-as-essential mode. It is no longer being actively maintained at a code level other than addressing critical or security fixes. For more information about the support status of RancherOS, see this page.
{{end}} - + {{ if or (in .Dir "/v2.0-v2.4") (in .Dir "/v2.5") }} +
+ You are viewing the documentation for an older Rancher release. If you're looking for the documentation for the latest Rancher release, go to this page instead. +
+ {{end}} + diff --git a/scripts/converters/css/style-portrait.css b/scripts/converters/css/style-portrait.css index e6bcd2303ef..ab19e788e28 100644 --- a/scripts/converters/css/style-portrait.css +++ b/scripts/converters/css/style-portrait.css @@ -238,7 +238,7 @@ h2 { font-size:1.5em; } -h3 {font-size:1.4em;} +h3 {font-size:1.2em;} h4 {font-size:1.3em; line-height:30px; } @@ -283,7 +283,7 @@ nav ul li a { nav ul li a::after {content: target-counter(attr(href url), page, decimal); float:right;margin-right:10px;} nav ul li ul {list-style-type: none; border-left-style: dashed; border-left-width: 1px; border-color: #000; margin-top:1.5em;} nav ul li ul li {margin-left:-.5em;color:#ff0000;} -nav ul li ul li a {border:none;font-family:PoppinsExtraLight;margin-top:-1.5em;} +nav ul li ul li a {border:none;font-family:PoppinsExtraLight;font-size:.75em;margin-bottom:1.8em;} nav ul li ul li a::after {font-size:.75em;} nav code {background:none;} nav a{text-decoration:none;outline:none;color:#000;} diff --git a/scripts/converters/headers/header-2.6.md b/scripts/converters/headers/header-2.6.md new file mode 100755 index 00000000000..5f930a99fb1 --- /dev/null +++ b/scripts/converters/headers/header-2.6.md @@ -0,0 +1,36 @@ +--- +title: CIS v1.6 Benchmark - Self-Assessment Guide - Rancher v2.6 +weight: 101 +--- + +### CIS v1.6 Kubernetes Benchmark - Rancher v2.6 with Kubernetes v1.18 to v1.21 + +[Click here to download a PDF version of this document](https://releases.rancher.com/documents/security/2.6/Rancher_v2-6_CIS_v1-6_Benchmark_Assessment.pdf). + +#### Overview + +This document is a companion to the [Rancher v2.6 security hardening guide]({{}}/rancher/v2.6/en/security/hardening-guides/). The hardening guide provides prescriptive guidance for hardening a production installation of Rancher, and this benchmark guide is meant to help you evaluate the level of security of the hardened cluster against each control in the benchmark. + +This guide corresponds to specific versions of the hardening guide, Rancher, CIS Benchmark and Kubernetes: + +| Hardening Guide Version | Rancher Version | CIS Benchmark Version | Kubernetes Version | +| ----------------------- | --------------- | --------------------- | ------------------- | +| Hardening Guide CIS v1.6 Benchmark | Rancher v2.6.3 | CIS v1.6 | Kubernetes v1.18, v1.19, v1.20 and v1.21 | + +Because Rancher and RKE install Kubernetes services as Docker containers, many of the control verification checks in the CIS Kubernetes Benchmark do not apply and will have a result of \`Not Applicable\`. This guide will walk through the various controls and provide updated example commands to audit compliance in Rancher created clusters. + +This document is to be used by Rancher operators, security teams, auditors and decision makers. + +For more detail about each audit, including rationales and remediations for failing tests, you can refer to the corresponding section of the CIS Kubernetes Benchmark v1.6. You can download the benchmark, after creating a free account, in [Center for Internet Security (CIS)](https://www.cisecurity.org/benchmark/kubernetes/). + +#### Testing controls methodology + +Rancher and RKE install Kubernetes services via Docker containers. Configuration is defined by arguments passed to the container at the time of initialization, not via configuration files. + +Where control audits differ from the original CIS benchmark, the audit commands specific to Rancher are provided for testing. When performing the tests, you will need access to the Docker command line on the hosts of all three RKE roles. The commands also make use of the [kubectl](https://kubernetes.io/docs/tasks/tools/) (with a valid configuration file) and [jq](https://stedolan.github.io/jq/) tools, which are required in the testing and evaluation of test results. + +> NOTE: Only `automated` tests (previously called `scored`) are covered in this guide. + +### Controls + +--- diff --git a/scripts/converters/headers/header-k3s.md b/scripts/converters/headers/header-k3s.md new file mode 100755 index 00000000000..80461cc9c3f --- /dev/null +++ b/scripts/converters/headers/header-k3s.md @@ -0,0 +1,35 @@ +--- +title: CIS Self Assessment Guide +weight: 90 +--- + +### CIS Kubernetes Benchmark v1.6 - K3s with Kubernetes v1.17 to v1.21 + +#### Overview + +This document is a companion to the [K3s security hardening guide]({{}}/k3s/latest/en/security/hardening_guide/). The hardening guide provides prescriptive guidance for hardening a production installation of K3s, and this benchmark guide is meant to help you evaluate the level of security of the hardened cluster against each control in the CIS Kubernetes Benchmark. It is to be used by K3s operators, security teams, auditors, and decision-makers. + +This guide is specific to the **v1.17**, **v1.18**, **v1.19**, **v1.20** and **v1.21** release line of K3s and the **v1.6** release of the CIS Kubernetes Benchmark. + +For more information about each control, including detailed descriptions and remediations for failing tests, you can refer to the corresponding section of the CIS Kubernetes Benchmark v1.6. You can download the benchmark, after creating a free account, in [Center for Internet Security (CIS)](https://www.cisecurity.org/benchmark/kubernetes/). + +#### Testing controls methodology + +Each control in the CIS Kubernetes Benchmark was evaluated against a K3s cluster that was configured according to the accompanying hardening guide. + +Where control audits differ from the original CIS benchmark, the audit commands specific to K3s are provided for testing. + +These are the possible results for each control: + +- **Pass** - The K3s cluster under test passed the audit outlined in the benchmark. +- **Not Applicable** - The control is not applicable to K3s because of how it is designed to operate. The remediation section will explain why this is so. +- **Warn** - The control is manual in the CIS benchmark and it depends on the cluster's use case or some other factor that must be determined by the cluster operator. These controls have been evaluated to ensure K3s does not prevent their implementation, but no further configuration or auditing of the cluster under test has been performed. + +This guide makes the assumption that K3s is running as a Systemd unit. Your installation may vary and will require you to adjust the "audit" commands to fit your scenario. + +> NOTE: Only `automated` tests (previously called `scored`) are covered in this guide. + +### Controls + +--- + diff --git a/scripts/converters/run_results_to_md.sh b/scripts/converters/run_results_to_md.sh index acca856e0b1..ae3ac700b9d 100755 --- a/scripts/converters/run_results_to_md.sh +++ b/scripts/converters/run_results_to_md.sh @@ -2,8 +2,9 @@ results=${1:?path to kube-bench json results is a required argument} test_helpers=${2:?path to kube-bench test_helpers scripts is a required argument} +header=${3:?path to header file is a required argument} [ -f ${results} ] || (echo "file:'${results}' does not exist"; exit 1) [ -d ${test_helpers} ] || (echo "dir: '${test_helpers}' not a valid directory"; exit 1) -docker run -v${results}:/source/results.json -v ${test_helpers}:/test_helpers -it --rm doc_converters:latest results_to_md +docker run -v ${results}:/source/results.json -v ${test_helpers}:/test_helpers -v ${header}:/headers/header.md -it --rm doc_converters:latest results_to_md diff --git a/scripts/converters/scripts/results_to_md.sh b/scripts/converters/scripts/results_to_md.sh index 453dcbde069..a7d5d473313 100755 --- a/scripts/converters/scripts/results_to_md.sh +++ b/scripts/converters/scripts/results_to_md.sh @@ -1,48 +1,11 @@ #!/bin/bash -#results_file="${1:-/source/results.json}" -results_file="${1:-/home/paraglade/brain/projects/cis_benchmark/clusters/cis/csr.json}" -#test_helpers="${2:-/test_helpers}" -test_helpers="${2:-/home/paraglade/brain/repos/rancher-security-scan/package/helper_scripts}" +results_file="${1:-/source/results.json}" +test_helpers="${2:-/test_helpers}" +header_file="${3:-/headers/header.md}" header() { -cat < NOTE: only scored tests are covered in this guide. - -### Controls -EOF +cat ${header_file} } get_ids() { @@ -56,7 +19,7 @@ get_id_text() { get_section_ids() { id=${1} - jq -r --arg id "${id}" '.[] | select(.id==$id) | .checks[].id' ${results_file} + jq -r --arg id "${id}" '.[] | select(.id==$id) | .checks[].id' ${results_file} | sort -V } get_section_desc() { @@ -90,12 +53,11 @@ for id in $(get_ids); do test_desc=$(echo ${result} | jq -r '.description') audit=$(echo ${result} | jq -r '.audit') audit_config=$(echo ${result} | jq -r '.audit_config') - actual_value=$(echo ${result} | jq -r '.actual_value_per_node."cis-aio-0"') + actual_value=$(echo ${result} | jq -r '.actual_value_per_node[]') type=$(echo ${result} | jq -r '.test_type') status=$(echo ${result} | jq -r '.state') remediation=$(echo ${result} | jq -r '.remediation') expected_result=$(echo ${result} | jq -r '.expected_result') -# echo "#### ${test} ${test_desc}" echo if [ "${type}" = "skip" ]; then echo "**Result:** Not Applicable" @@ -113,7 +75,7 @@ for id in $(get_ids); do if [[ ${audit} =~ ".sh" ]]; then audit_script=$(basename $(echo ${audit} | cut -d ' ' -f1)) test_helper="${test_helpers}/${audit_script}" - echo "**Audit Script:** ${audit_script}" + echo "**Audit Script:** \`${audit_script}\`" echo echo '```bash' cat ${test_helper} @@ -143,6 +105,14 @@ for id in $(get_ids); do echo '```' echo fi + if [ ! -z "${expected_result}" ]; then + echo "**Expected Result**:" + echo + echo '```console' + echo ${expected_result} + echo '```' + echo + fi if [ ! -z "${actual_value}" ] && [ "${status}" != "PASS" ] && [ "${type}" != "skip" ] && [ "${type}" != "manual" ]; then echo "**Returned Value**:" echo @@ -151,14 +121,6 @@ for id in $(get_ids); do echo '```' echo fi - if [ ! -z "${expected_result}" ]; then - echo "**Expected result**:" - echo - echo '```console' - echo ${expected_result} - echo '```' - echo - fi done done done diff --git a/static/img/rancher/cilium-logo.png b/static/img/rancher/cilium-logo.png new file mode 100644 index 00000000000..681a0b3c530 Binary files /dev/null and b/static/img/rancher/cilium-logo.png differ diff --git a/static/img/rancher/neuvector-architecture.png b/static/img/rancher/neuvector-architecture.png new file mode 100644 index 00000000000..d690a1af3b9 Binary files /dev/null and b/static/img/rancher/neuvector-architecture.png differ diff --git a/static/img/rancher/neuvector-security-containers.png b/static/img/rancher/neuvector-security-containers.png new file mode 100644 index 00000000000..1750a2444e6 Binary files /dev/null and b/static/img/rancher/neuvector-security-containers.png differ diff --git a/static/img/rancher/ranchercomponentsdiagram-2.6.svg b/static/img/rancher/ranchercomponentsdiagram-2.6.svg new file mode 100644 index 00000000000..f63b84b3e75 --- /dev/null +++ b/static/img/rancher/ranchercomponentsdiagram-2.6.svg @@ -0,0 +1,2 @@ + +
Rancher 2.x
[Not supported by viewer]
Importing Kubernetes Clusters
<b>Importing Kubernetes Clusters</b>

  • Any Kubernetes cluster                      
[Not supported by viewer]
Provisioning Kubernetes Clusters
<b>Provisioning Kubernetes Clusters</b>
Rancher
<b>Rancher</b>
Rancher Launched Kubernetes
  • Nodes Hosted in an Infrastructure Provider
    • Amazon EC2
    • DigitalOcean
    • Azure
    • vSphere
    • Any (pluggable)
[Not supported by viewer]
Rancher Agents
<b>Rancher Agents</b>
Provisioning
<b>Provisioning</b>
API Framework & Types
[Not supported by viewer]
Utilities
[Not supported by viewer]
Rancher Server
https://github.com/rancher/rancher
Rancher Server<br>https://github.com/rancher/rancher<br>
RKE
https://github.com/rancher/rke
RKE<br>https://github.com/rancher/rke<br>
docker-machine
https://github.com/rancher/machine
docker-machine<br>https://github.com/rancher/machine<br>
Rancher CLI
https://github.com/rancher/cli
Rancher CLI<br>https://github.com/rancher/cli<br>
Norman
https://github.com/rancher/norman
Norman<br>https://github.com/rancher/norman<br>
Types
https://github.com/rancher/types
Types<br>https://github.com/rancher/types<br>
cattle-cluster-agent

cattle-cluster-agent<br><br>
cattle-node-agent
cattle-node-agent<br>
Rancher Launched Kubernetes
  • Creating a Cluster with Custom Nodes
[Not supported by viewer]
Rancher Agents
<b>Rancher Agents</b>
Provisioning
<b>Provisioning</b>
RKE
https://github.com/rancher/rke
RKE<br>https://github.com/rancher/rke<br>
cattle-cluster-agent

cattle-cluster-agent<br><br>
cattle-node-agent
cattle-node-agent<br>
Hosted Kubernetes Providers
  • Google Kubernetes Engine (GKE)
  • Amazon Elastic Container Service for Kubernetes (EKS)
  • Azure Kubernetes Service (AKS)
[Not supported by viewer]
Rancher Agents
<b>Rancher Agents</b>
Provisioning
<b>Provisioning</b>
kontainer-engine
https://github.com/rancher/
kontainer-engine
[Not supported by viewer]
cattle-cluster-agent

cattle-cluster-agent<br><br>
cattle-node-agent
cattle-node-agent<br>
Rancher Agents
<b>Rancher Agents</b>
cattle-cluster-agent

cattle-cluster-agent<br><br>
cattle-node-agent
cattle-node-agent<br>
User Interface
[Not supported by viewer]
Rancher Dashboard UI
https://github.com/rancher/dashboard
Rancher Dashboard UI<br>https://github.com/rancher/dashboard<br>
Rancher API UI
https://github.com/rancher/api-ui
Rancher API UI<br>https://github.com/rancher/api-ui<br>
Catalog Applications
https://github.com/rancher/helm
Catalog Applications<br>https://github.com/rancher/helm<br>
\ No newline at end of file