From 9ba2ab86c7654299b93e5020408ea96d3de6d2b6 Mon Sep 17 00:00:00 2001 From: terraHDB Date: Wed, 5 Oct 2022 09:33:58 -0500 Subject: [PATCH 01/22] testing variable syntax --- docs/book.json | 6 ++++++ docs/getting-started/getting-started.md | 2 ++ 2 files changed, 8 insertions(+) create mode 100644 docs/book.json diff --git a/docs/book.json b/docs/book.json new file mode 100644 index 00000000..7789ee19 --- /dev/null +++ b/docs/book.json @@ -0,0 +1,6 @@ +{ + "root": "./docs", + "variables": { + "node_version": "16.17.1" + } +} \ No newline at end of file diff --git a/docs/getting-started/getting-started.md b/docs/getting-started/getting-started.md index e4d75c4e..3191994d 100644 --- a/docs/getting-started/getting-started.md +++ b/docs/getting-started/getting-started.md @@ -1,3 +1,5 @@ +{{node_version}} {{ node_version }} + # Getting Started HarperDB was built by developers for developers, which means getting started should be simple. From 143bf62a1b3c25fc4f3a06d07b704ae566686634 Mon Sep 17 00:00:00 2001 From: terraHDB Date: Wed, 5 Oct 2022 10:02:34 -0500 Subject: [PATCH 02/22] testing variable syntax --- docs/book.json | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/book.json b/docs/book.json index 7789ee19..86276ea7 100644 --- a/docs/book.json +++ b/docs/book.json @@ -1,5 +1,4 @@ { - "root": "./docs", "variables": { "node_version": "16.17.1" } From 3c119d916636de2c8fa1b449ea2ff6c9fc754a2f Mon Sep 17 00:00:00 2001 From: terraHDB Date: Wed, 5 Oct 2022 10:03:47 -0500 Subject: [PATCH 03/22] testing variable syntax --- docs/getting-started/getting-started.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/getting-started/getting-started.md b/docs/getting-started/getting-started.md index 3191994d..8ad30989 100644 --- a/docs/getting-started/getting-started.md +++ b/docs/getting-started/getting-started.md @@ -1,4 +1,5 @@ {{node_version}} {{ node_version }} +book.[node_version] # Getting Started From 2aec8f98deb6a4ae89aa827c0b22472f3b61b3ab Mon Sep 17 00:00:00 2001 From: terraHDB Date: Wed, 5 Oct 2022 10:17:50 -0500 Subject: [PATCH 04/22] testing variable syntax --- book.json | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 book.json diff --git a/book.json b/book.json new file mode 100644 index 00000000..86276ea7 --- /dev/null +++ b/book.json @@ -0,0 +1,5 @@ +{ + "variables": { + "node_version": "16.17.1" + } +} \ No newline at end of file From 1f3b4f03ecea01e612c711ed4daccc54c7b92454 Mon Sep 17 00:00:00 2001 From: terraHDB Date: Wed, 5 Oct 2022 11:00:46 -0500 Subject: [PATCH 05/22] testing variable syntax --- book.json | 1 + 1 file changed, 1 insertion(+) diff --git a/book.json b/book.json index 86276ea7..0c177971 100644 --- a/book.json +++ b/book.json @@ -1,4 +1,5 @@ { + "root": "/docs", "variables": { "node_version": "16.17.1" } From d2603a7adf7c84f055b7cd82767a9c79a8e28142 Mon Sep 17 00:00:00 2001 From: terraHDB Date: Wed, 5 Oct 2022 12:13:02 -0500 Subject: [PATCH 06/22] testing variable syntax --- book.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book.json b/book.json index 0c177971..fbe8eeba 100644 --- a/book.json +++ b/book.json @@ -1,5 +1,5 @@ { - "root": "/docs", + "root": "docs", "variables": { "node_version": "16.17.1" } From 81f4d2ae77bafffe70e9daf8e8cf39709166022d Mon Sep 17 00:00:00 2001 From: terraHDB Date: Wed, 5 Oct 2022 12:14:41 -0500 Subject: [PATCH 07/22] testing variable syntax --- book.json | 1 - docs/book.json | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/book.json b/book.json index fbe8eeba..86276ea7 100644 --- a/book.json +++ b/book.json @@ -1,5 +1,4 @@ { - "root": "docs", "variables": { "node_version": "16.17.1" } diff --git a/docs/book.json b/docs/book.json index 86276ea7..0fd0e93c 100644 --- a/docs/book.json +++ b/docs/book.json @@ -1,4 +1,5 @@ { + "root": "../docs", "variables": { "node_version": "16.17.1" } From 79d2562bd695a65627180cf9d7cbc6906d447f88 Mon Sep 17 00:00:00 2001 From: terraHDB Date: Wed, 5 Oct 2022 12:26:02 -0500 Subject: [PATCH 08/22] testing variable syntax --- docs/book.json | 3 +-- docs/getting-started/getting-started.md | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/docs/book.json b/docs/book.json index 0fd0e93c..6e486d47 100644 --- a/docs/book.json +++ b/docs/book.json @@ -1,6 +1,5 @@ { - "root": "../docs", "variables": { - "node_version": "16.17.1" + "nodeVersion": "16.17.1" } } \ No newline at end of file diff --git a/docs/getting-started/getting-started.md b/docs/getting-started/getting-started.md index 8ad30989..220f2459 100644 --- a/docs/getting-started/getting-started.md +++ b/docs/getting-started/getting-started.md @@ -1,4 +1,4 @@ -{{node_version}} {{ node_version }} +{{nodeVersion}} {{ nodeVersion }} book.[node_version] # Getting Started From 9cc4e3fa32be583c33ecdfb2d7ee86dfe14940a0 Mon Sep 17 00:00:00 2001 From: terraHDB Date: Wed, 5 Oct 2022 13:04:31 -0500 Subject: [PATCH 09/22] testing variable syntax --- book.json | 1 + docs/book.json | 1 + docs/getting-started/getting-started.md | 5 +++-- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/book.json b/book.json index 86276ea7..fbe8eeba 100644 --- a/book.json +++ b/book.json @@ -1,4 +1,5 @@ { + "root": "docs", "variables": { "node_version": "16.17.1" } diff --git a/docs/book.json b/docs/book.json index 6e486d47..5e9a7443 100644 --- a/docs/book.json +++ b/docs/book.json @@ -1,4 +1,5 @@ { + "root": "../docs", "variables": { "nodeVersion": "16.17.1" } diff --git a/docs/getting-started/getting-started.md b/docs/getting-started/getting-started.md index 220f2459..1b072240 100644 --- a/docs/getting-started/getting-started.md +++ b/docs/getting-started/getting-started.md @@ -1,5 +1,6 @@ -{{nodeVersion}} {{ nodeVersion }} -book.[node_version] +{% set node_version = "16.17.1" %} + +{{node_version}} {{ node_version }} # Getting Started From 018a08871bb86e189ddb214f23a27fcb0239f1de Mon Sep 17 00:00:00 2001 From: terraHDB Date: Wed, 5 Oct 2022 13:06:29 -0500 Subject: [PATCH 10/22] testing variable syntax --- docs/book.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/book.json b/docs/book.json index 5e9a7443..7789ee19 100644 --- a/docs/book.json +++ b/docs/book.json @@ -1,6 +1,6 @@ { - "root": "../docs", + "root": "./docs", "variables": { - "nodeVersion": "16.17.1" + "node_version": "16.17.1" } } \ No newline at end of file From 3375c62115abf2f43188b2ac632cf8f72fb5aadc Mon Sep 17 00:00:00 2001 From: terraHDB Date: Wed, 5 Oct 2022 13:09:27 -0500 Subject: [PATCH 11/22] testing variable syntax --- docs/getting-started/getting-started.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/getting-started/getting-started.md b/docs/getting-started/getting-started.md index 1b072240..da6a5d24 100644 --- a/docs/getting-started/getting-started.md +++ b/docs/getting-started/getting-started.md @@ -1,6 +1,6 @@ -{% set node_version = "16.17.1" %} +{% set nodeVersion = "16.17.1" %} -{{node_version}} {{ node_version }} +{{nodeVersion}} {{ nodeVersion }} # Getting Started From 8abcd22d890131fc24cc99305f06ac53d156824b Mon Sep 17 00:00:00 2001 From: terraHDB Date: Wed, 5 Oct 2022 13:12:42 -0500 Subject: [PATCH 12/22] testing variable syntax --- docs/getting-started/getting-started.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/getting-started/getting-started.md b/docs/getting-started/getting-started.md index da6a5d24..af6d5506 100644 --- a/docs/getting-started/getting-started.md +++ b/docs/getting-started/getting-started.md @@ -2,6 +2,9 @@ {{nodeVersion}} {{ nodeVersion }} +gitbook.time +gitbook.version + # Getting Started HarperDB was built by developers for developers, which means getting started should be simple. From 7abd4367d678a1c9b6e09101ede5719f79580ee6 Mon Sep 17 00:00:00 2001 From: terraHDB Date: Thu, 6 Oct 2022 10:20:19 -0500 Subject: [PATCH 13/22] testing variable syntax --- .gitbook.yaml | 4 ++++ book.json | 6 ------ docs/.gitbook.yaml | 4 ++++ docs/book.json | 6 ------ docs/getting-started/getting-started.md | 7 ++++--- 5 files changed, 12 insertions(+), 15 deletions(-) create mode 100644 .gitbook.yaml delete mode 100644 book.json create mode 100644 docs/.gitbook.yaml delete mode 100644 docs/book.json diff --git a/.gitbook.yaml b/.gitbook.yaml new file mode 100644 index 00000000..68abcbf7 --- /dev/null +++ b/.gitbook.yaml @@ -0,0 +1,4 @@ +root: docs, +variables: + nodeVersion: 16.17.1 + diff --git a/book.json b/book.json deleted file mode 100644 index fbe8eeba..00000000 --- a/book.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "root": "docs", - "variables": { - "node_version": "16.17.1" - } -} \ No newline at end of file diff --git a/docs/.gitbook.yaml b/docs/.gitbook.yaml new file mode 100644 index 00000000..5a0ec332 --- /dev/null +++ b/docs/.gitbook.yaml @@ -0,0 +1,4 @@ +root: ./docs, +variables: { + nodeVersion: 16.17.1 + } diff --git a/docs/book.json b/docs/book.json deleted file mode 100644 index 7789ee19..00000000 --- a/docs/book.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "root": "./docs", - "variables": { - "node_version": "16.17.1" - } -} \ No newline at end of file diff --git a/docs/getting-started/getting-started.md b/docs/getting-started/getting-started.md index af6d5506..bb1f1b49 100644 --- a/docs/getting-started/getting-started.md +++ b/docs/getting-started/getting-started.md @@ -1,9 +1,10 @@ -{% set nodeVersion = "16.17.1" %} +[//]: # ({% set nodeVersion = "16.17.1" %}) {{nodeVersion}} {{ nodeVersion }} -gitbook.time -gitbook.version +[//]: # (gitbook.time) + +[//]: # (gitbook.version) # Getting Started From 1415f76564d9066dc06b7822720ea5ff95d5ac67 Mon Sep 17 00:00:00 2001 From: terraHDB Date: Thu, 6 Oct 2022 10:24:40 -0500 Subject: [PATCH 14/22] testing variable syntax --- .gitbook.yaml | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 .gitbook.yaml diff --git a/.gitbook.yaml b/.gitbook.yaml deleted file mode 100644 index 68abcbf7..00000000 --- a/.gitbook.yaml +++ /dev/null @@ -1,4 +0,0 @@ -root: docs, -variables: - nodeVersion: 16.17.1 - From d2dd1fe55f7f24c49f15f8a67c845899a3d5cb53 Mon Sep 17 00:00:00 2001 From: terraHDB Date: Thu, 6 Oct 2022 10:26:25 -0500 Subject: [PATCH 15/22] testing variable syntax --- docs/.gitbook.yaml | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 docs/.gitbook.yaml diff --git a/docs/.gitbook.yaml b/docs/.gitbook.yaml deleted file mode 100644 index 5a0ec332..00000000 --- a/docs/.gitbook.yaml +++ /dev/null @@ -1,4 +0,0 @@ -root: ./docs, -variables: { - nodeVersion: 16.17.1 - } From 3f7618efcfc04649e018ee768578f3910828efc0 Mon Sep 17 00:00:00 2001 From: terraHDB Date: Thu, 6 Oct 2022 10:29:57 -0500 Subject: [PATCH 16/22] testing variable syntax --- docs/book.json | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 docs/book.json diff --git a/docs/book.json b/docs/book.json new file mode 100644 index 00000000..7d5e4a87 --- /dev/null +++ b/docs/book.json @@ -0,0 +1,6 @@ +{ + "root": "./docs", + "variables": { + "nodeVersion": "16.17.1" + } +} \ No newline at end of file From 501405bd6c035ffd7baae78bb1a9d0b0a3d55607 Mon Sep 17 00:00:00 2001 From: terraHDB Date: Thu, 6 Oct 2022 13:42:37 -0500 Subject: [PATCH 17/22] reverted changes from variable testing --- docs/book.json | 6 ------ docs/getting-started/getting-started.md | 8 -------- 2 files changed, 14 deletions(-) delete mode 100644 docs/book.json diff --git a/docs/book.json b/docs/book.json deleted file mode 100644 index 7d5e4a87..00000000 --- a/docs/book.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "root": "./docs", - "variables": { - "nodeVersion": "16.17.1" - } -} \ No newline at end of file diff --git a/docs/getting-started/getting-started.md b/docs/getting-started/getting-started.md index bb1f1b49..e4d75c4e 100644 --- a/docs/getting-started/getting-started.md +++ b/docs/getting-started/getting-started.md @@ -1,11 +1,3 @@ -[//]: # ({% set nodeVersion = "16.17.1" %}) - -{{nodeVersion}} {{ nodeVersion }} - -[//]: # (gitbook.time) - -[//]: # (gitbook.version) - # Getting Started HarperDB was built by developers for developers, which means getting started should be simple. From 92539664df455090a492a53c064661e1e3afc9cd Mon Sep 17 00:00:00 2001 From: terraHDB Date: Mon, 14 Nov 2022 15:17:04 -0600 Subject: [PATCH 18/22] added diagrams and clustering docs --- docs/clustering/how-to-cluster.md | 449 ++++++++++++++++++++++++++++++ docs/clustering/index.md | 2 + images/clustering/figure1.png | Bin 0 -> 22220 bytes images/clustering/figure2.png | Bin 0 -> 54709 bytes images/clustering/figure3.png | Bin 0 -> 54638 bytes images/clustering/figure4.png | Bin 0 -> 62599 bytes images/clustering/figure5.png | Bin 0 -> 67327 bytes images/clustering/figure6.png | Bin 0 -> 185705 bytes 8 files changed, 451 insertions(+) create mode 100644 docs/clustering/how-to-cluster.md create mode 100644 images/clustering/figure1.png create mode 100644 images/clustering/figure2.png create mode 100644 images/clustering/figure3.png create mode 100644 images/clustering/figure4.png create mode 100644 images/clustering/figure5.png create mode 100644 images/clustering/figure6.png diff --git a/docs/clustering/how-to-cluster.md b/docs/clustering/how-to-cluster.md new file mode 100644 index 00000000..ac987065 --- /dev/null +++ b/docs/clustering/how-to-cluster.md @@ -0,0 +1,449 @@ +# How to Cluster + +To create a cluster you must have two or more nodes* (aka instances) of HarperDB running. + +**A node is a single instance/installation of HarperDB constitutes a node. A node of HarperDB can operate independently with clustering on or off.* + + +Below are the steps, in order, that should be taken to set up a HarperDB cluster. + +### Creating a Cluster User + +Inter-node authentication takes place via HarperDB users. There is a special role type called `cluster_user` that exists by default and limits the user to only clustering functionality. + +A `cluster_user` must be created and added to the `harperdb-config.yaml` file for clustering to be enabled. + +All nodes that are intended to be clustered together need to share the same `cluster_user` credentials (i.e. username and password). + +There are multiple ways a `cluster_user` can be created, they are: + +1) Through the operations API by calling `add_user` + +```json +{ + "operation": "add_user", + "role": "cluster_user", + "username": "cluster_account", + "password": "letsCluster123!", + "active": true +} +``` + + +When using the API to create a cluster user the `harperdb-config.yaml` file must be updated with the username of the new cluster user. + +This can be done through the API by calling `set_configuration` or by editing the `harperdb-config.yaml` file. + +```json +{ + "operation": "set_configuration", + "clustering_user": "cluster_account" +} +``` + + +In the `harperdb-config.yaml` file under the top-level `clustering` element there will be a user element. Set this to the name of the cluster user. + +```yaml +clustering: + user: cluster_account +``` + + +_Note: When making any changes to the `harperdb-config.yaml` file, HarperDB must be restarted for the changes to take effect._ + +2) Upon installation using **command line variables**. This will automatically set the user in the `harperdb-config.yaml` file. + +_Note: Using command line or environment variables for setting the cluster user only works on install._ + +``` +harperdb install --CLUSTERING_USER cluster_account --CLUSTERING_PASSWORD letsCluster123! +``` + +3) Upon installation using **environment variables**. This will automatically set the user in the `harperdb-config.yaml` file. + +``` +CLUSTERING_USER=cluster_account CLUSTERING_PASSWORD=letsCluster123 +``` + +### Naming a Node +Node name is the name given to a node. It is how nodes are identified within the cluster and must be unique to the cluster. + +The name cannot contain any of the following characters: `.,*>` . Dot, comma, asterisk, greater than, or whitespace. + +The name is set in the `harperdb-config.yaml` file using the `clustering.nodeName` configuration element. + +_Note: If you want to change the node name make sure there are no subscriptions in place before doing so. After the name has been changed a full restart is required._ + +There are multiple ways to update this element, they are: + +1) Directly editing the `harperdb-config.yaml` file. + +```yaml +clustering: + nodeName: Node1 +``` + +_Note: When making any changes to the `harperdb-config.yaml` file HarperDB must be restarted for the changes to take effect._ + +2) Calling `set_configuration` through the operations API + +```json +{ + "operation": "set_configuration", + "clustering_nodeName":"Node1" +} +``` + +3) Using command line variables. + +``` +harperdb --CLUSTERING_NODENAME Node1 +``` + +4) Using environment variables. + +``` +CLUSTERING_NODENAME=Node1 +``` + + + +### Enabling Clustering + +Clustering does not run by default, so it needs to be enabled. + +To enable clustering the `clustering.enabled` configuration element in the `harperdb-config.yaml` file must be set to `true`. + +There are multiple ways to update this element, they are: + +1) Directly editing the `harperdb-config.yaml` file and setting enabled to `true` +```yaml +clustering: + enabled: true +``` + +_Note: when making any changes to the `harperdb-config.yaml` file HarperDB must be restarted for the changes to take effect._ + +2) Calling `set_configuration` through the operations API + +```json +{ + "operation": "set_configuration", + "clustering_enabled":"test_server" +} +``` + +_Note: When making any changes to HarperDB configuration HarperDB must be restarted for the changes to take effect._ + + +3) Using **command line variables**. + +``` +harperdb --CLUSTERING_ENABLED true +``` + +4) Using **environment variables**. + +``` +CLUSTERING_ENABLED=true +``` + +An efficient way to **install HarperDB**, **create the cluster user**, **set the node name** and **enable clustering** in one operation is to combine the steps using command line and/or environment variables. Here is an example using command line variables. + +``` +harperdb install --CLUSTERING_ENABLED true --CLUSTERING_NODENAME Node1 --CLUSTERING_USER cluster_account --CLUSTERING_PASSWORD letsCluster123! +``` + +### Understanding Routes + +A route is a connection between two nodes. It is how the clustering network is established. + +Routes do not need to cross connect all nodes in the cluster. You can select a leader node or a few leaders and all nodes connect to them, you can chain, etc… As long as there is one route connecting a node to the cluster all other nodes should be able to reach that node. + +Using routes the clustering servers will create a mesh network between nodes. This mesh network ensures that if a node drops out all other nodes can still communicate with each other. That being said, we recommend designing your routing with failover in mind, this means not storing all your routes on one node but dispersing them throughout the network. + +A simple route example is a two node topology, if Node1 adds a route to connect it to Node2, Node2 does not need to add a route to Node1. That one route configuration is all that’s needed to establish a bidirectional connection between the nodes. + +A route consists of a `port` and a `host`. + +`port` - the clustering port of the remote instance you are creating the connection with. This is going to be the `clustering.hubServer.cluster.network.port` in the HarperDB configuration on the node you are connecting with. + +`host` - the host of the remote instance you are creating the connection with.This can be an IP address or a URL. + +Routes are set in the `harperdb-config.yaml` file using the `clustering.hubServer.cluster.network.routes` element, which expects an object array, where each object has two properties, `port` and `host`. + +```yaml +clustering: + hubServer: + cluster: + network: + routes: + - host: 3.62.184.22 + port: 9932 + - host: 3.735.184.8 + port: 9932 +``` + +![figure 1](/Users/terraroush/documentation/docs/images/clustering/figure1.png "diagram displaying a three node cluster") + +This diagram shows one way of using routes to connect a network of nodes. Node2 and Node3 do not reference any routes in their config. Node1 contains routes for Node2 and Node3, which is enough to establish a network between all three nodes. + +There are multiple ways to set routes, they are: + +1) Directly editing the `harperdb-config.yaml` file (refer to code snippet above). +2) Calling cluster_set_routes through the API. + +```json +{ +"operation": "cluster_set_routes", +"server": "hub", +"routes":[ {"host": "3.735.184.8", "port": 9932} ] +} +``` + +Note: When making any changes to HarperDB configuration HarperDB must be restarted for the changes to take effect. + +From the command line. +--CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES "[{\"host\": \"3.735.184.8\", \"port\": 9932}]" + + +Using environment variables. +CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES=[{"host": "3.735.184.8", "port": 9932}] + + +The API also has cluster_get_routes for getting all routes in the config and cluster_delete_routes for deleting routes. +{ +"operation": "cluster_delete_routes", +"routes":[ {"host": "3.735.184.8", "port": 9932} ] +} + + + +Subscriptions + +A subscription defines how data should move between two nodes. They are exclusively table level and operate independently. They connect a table on one node to a table on another node, the subscription will apply to a matching schema name and table name on both nodes. + +Note: ‘local’ and ‘remote’ will often be referred to. In the context of these docs ‘local’ is the node that is receiving the API request to create/update a subscription and remote is the other node that is referred to in the request, the node on the other end of the subscription. + +A subscription consists of: + +schema - the name of the schema that the table you are creating the subscription for belongs to. +table - the name of the table the subscription will apply to. +publish - a boolean which determines if transactions on the local table should be replicated on the remote table. +subscribe - a boolean which determines if transactions on the remote table should be replicated on the local table. + +Publish subscription + +![figure 2](/Users/terraroush/documentation/images/clustering/figure2.png "diagram example of a publish subscription from the perspective of Node1") + +This diagram is an example of a publish subscription from the perspective of Node1. + +The record with id 2 has been inserted in the dog table on Node1, after it has completed that insert it is sent to Node 2 and inserted in the dog table there. + +Subscribe subscription + +![figure 3](/Users/terraroush/documentation/images/clustering/figure3.png "diagram example of a subscribe subscription from the perspective of Node1") + +This diagram is an example of a subscribe subscription from the perspective of Node1. + +The record with id 3 has been inserted in the dog table on Node2, after it has completed that insert it is sent to Node1 and inserted there. + +Subscribe and publish + +![figure 4](/Users/terraroush/documentation/images/clustering/figure4.png "diagram shows both subscribe and publish but publish is set to false") + +This diagram shows both subscribe and publish but publish is set to false. You can see that because subscribe is true the insert on Node2 is being replicated on Node1 but because publish is set to false the insert on Node1 is not being replicated on Node2. + +![figure 5](/Users/terraroush/documentation/images/clustering/figure5.png "shows both subscribe and publish set to true") + +This shows both subscribe and publish set to true. The insert on Node1 is replicated on Node2 and the update on Node2 is replicated on Node1. + +Creating subscriptions + +Subscriptions can be added, updated, or removed through the API. + +Note: The schema and tables in the subscription must exist on the local node (the node that is receiving the API request), but do not need to exist on the remote node. Any schema and tables that do not exist on the remote node will be automatically created. + +To add a single node and create one or more subscriptions use add_node + +{ +"operation": "add_node", +"node_name": "Node2", +"subscriptions": [ +{ +"schema": "dev", +"table": "dog", +"publish": false, +"subscribe": true +}, +{ +"schema": "dev", +"table": "chicken", +"publish": true, +"subscribe": true +} +] +} + + +This is an example of adding Node2 to your local node. Subscriptions are created for two tables, dog and chicken. + +To update one or more subscriptions with a single node use update_node + +{ +"operation": "update_node", +"node_name": "Node2", +"subscriptions": [ +{ +"schema": "dev", +"table": "dog", +"publish": true, +"subscribe": true +} +] +} + + +This call will update the subscription with the dog table. Any other subscriptions with Node2 will not change. + +To add or update subscriptions with one or more nodes in one API call use configure_cluster + + + +{ +"operation": "configure_cluster", +"connections": [ +{ +"node_name": "Node2", +"subscriptions": [ +{ +"schema": "dev", +"table": "chicken", +"publish": false, +"subscribe": true +}, +{ +"schema": "prod", +"table": "dog", +"publish": true, +"subscribe": true +} +] +}, +{ +"node_name": "Node3", +"subscriptions": [ +{ +"schema": "dev", +"table": "chicken", +"publish": true, +"subscribe": false +} +] +} +] +} + + +Note: configure_cluster will override any and all existing subscriptions defined on the local node. This means that before going through the connections in the request and adding the subscriptions, it will first go through all existing subscriptions the local node has and remove them. To get all existing subscriptions use cluster_status. + +Start time + +There is an optional property called start_time that can be passed in the subscription. This property accepts an ISO formatted UTC date. + +start_time can be used to set from what time you would like to source transactions from a table when creating or updating a subscription. +{ +"operation": "add_node", +"node_name": "Node2", +"subscriptions": [ +{ +"schema": "dev", +"table": "dog", +"publish": false, +"subscribe": true, +"start_time": "2022-09-02T20:06:35.993Z" +} +] +} + + +This example will get all transactions on Node2’s dog table starting from 2022-09-02T20:06:35.993Z and replicate them locally on the dog table. + +If no start time is passed it defaults to the current time. + +Note: start time utilizes clustering to back source transactions. For this reason it can only source transactions that occurred when clustering was enabled. + +Remove node + +To remove a node and all its subscriptions use remove_node + +{ +"operation":"remove_node", +"node_name":"Node2" +} + + +Cluster status + +To get the status of all connected nodes and see their subscriptions use cluster_status + +{ +"node_name": "Node1", +"is_enabled": true, +"connections": [ +{ +"node_name": "Node2", +"status": "open", +"ports": { +"clustering": 9932, +"operations_api": 9925 +}, +"latency_ms": 65, +"uptime": "11m 19s", +"subscriptions": [ +{ +"schema": "dev", +"table": "dog", +"publish": true, +"subscribe": true +} +], +"system_info": { +"hdb_version": "4.0.0", +"node_version": "16.17.1", +"platform": "linux" +} +} +] +} + + +Transactions + +Transactions that are replicated across the cluster are: +Insert +Update +Upsert +Delete +Bulk loads +CSV data load +CSV file load +CSV URL load +Import from S3 + +When adding or updating a node any schemas and tables in the subscription that don’t exist on the remote node will be automatically created. + +Destructive schema operations do not replicate across a cluster. Those operations include drop_schema, drop_table, and drop_attribute. If the desired outcome is to drop schema information from any nodes then the operation(s) will need to be run on each node independently. + +Users and roles are not replicated across the cluster. + +Queueing + +HarperDB has built-in resiliency for when network connectivity is lost within a subscription. When connections are reestablished, a catchup routine is executed to ensure data that was missed, specific to the subscription, is sent/received as defined. + +Topologies + +HarperDB clustering creates a mesh network between nodes giving end users the ability to create an infinite number of topologies. subscription topologies can be simple or as complex as needed. + +![figure 6](/Users/terraroush/documentation/images/clustering/figure6.png "example topology of mesh network") diff --git a/docs/clustering/index.md b/docs/clustering/index.md index b6ea4d87..b14d77f2 100644 --- a/docs/clustering/index.md +++ b/docs/clustering/index.md @@ -1 +1,3 @@ # Clustering + +HarperDB clustering is the process of connecting multiple HarperDB databases together to create a database mesh network that enables users to define data replication patterns. \ No newline at end of file diff --git a/images/clustering/figure1.png b/images/clustering/figure1.png new file mode 100644 index 0000000000000000000000000000000000000000..00c64580c90c670295d842ffda6c5dee22afe82f GIT binary patch literal 22220 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 X{cN1x6AJkGZuoxh`*VNx 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 AKmY&$ literal 0 HcmV?d00001 From b99cc9867e5fad5d48b723f335751a618741dedd Mon Sep 17 00:00:00 2001 From: terraHDB Date: Tue, 22 Nov 2022 10:53:47 -0600 Subject: [PATCH 22/22] added more context to clustering intro page; adjusted subscription behavior description --- docs/clustering/how-to-cluster.md | 4 ++-- docs/clustering/index.md | 35 ++++++++++++++++++++++++++++++- 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/docs/clustering/how-to-cluster.md b/docs/clustering/how-to-cluster.md index 75912e07..f3b6041c 100644 --- a/docs/clustering/how-to-cluster.md +++ b/docs/clustering/how-to-cluster.md @@ -2,7 +2,7 @@ To create a cluster you must have two or more nodes* (aka instances) of HarperDB running. -**A node is a single instance/installation of HarperDB constitutes a node. A node of HarperDB can operate independently with clustering on or off.* +**A node is a single instance/installation of HarperDB. A node of HarperDB can operate independently with clustering on or off.* Below are the steps, in order, that should be taken to set up a HarperDB cluster. @@ -274,7 +274,7 @@ This shows both subscribe and publish set to true. The insert on Node1 is replic Subscriptions can be added, updated, or removed through the API. -_Note: The schema and tables in the subscription must exist on the local node (the node that is receiving the API request), but do not need to exist on the remote node. Any schema and tables that do not exist on the remote node will be automatically created._ +_Note: The schema and tables in the subscription must exist on either the local or the remote node. Any schema and tables that do not exist on one particular node, for example, the local node, will be automatically created on the local node._ To add a single node and create one or more subscriptions use `add_node`. diff --git a/docs/clustering/index.md b/docs/clustering/index.md index b14d77f2..84246211 100644 --- a/docs/clustering/index.md +++ b/docs/clustering/index.md @@ -1,3 +1,36 @@ # Clustering -HarperDB clustering is the process of connecting multiple HarperDB databases together to create a database mesh network that enables users to define data replication patterns. \ No newline at end of file +HarperDB clustering is the process of connecting multiple HarperDB databases together to create a database mesh network that enables users to define data replication patterns. + +HarperDB’s clustering engine replicates data between instances of HarperDB using a highly performant, bi-directional pub/sub model on a per-table basis. Data replicates asynchronously with eventual consistency across the cluster following the defined pub/sub configuration. Individual transactions are sent in the order in which they were transacted, once received by the destination instance, they are processed in an ACID-compliant manor. Conflict resolution follows a last writer wins model based on recorded transaction time on the transaction and the timestamp on the record on the node. + +--- +### Common Use Case + +A common use case is an edge application collecting and analyzing sensor data that creates an alert if a sensor value exceeds a given threshold: + +* The edge application should not be making outbound http requests for security purposes. + +* There may not be a reliable network connection. + +* Not all sensor data will be sent to the cloud--either because of the unreliable network connection, or maybe it’s just a pain to store it. + +* The edge node should be inaccessible from outside the firewall. + +* The edge node will send alerts to the cloud with a snippet of sensor data containing the offending sensor readings. + + +HarperDB simplifies the architecture of such an application with its bi-directional, table-level replication: + +* The edge instance subscribes to a “thresholds” table on the cloud instance, so the application only makes localhost calls to get the thresholds. + +* The application continually pushes sensor data into a “sensor_data” table via the localhost API, comparing it to the threshold values as it does so. + +* When a threshold violation occurs, the application adds a record to the “alerts” table. + +* The application appends to that record array “sensor_data” entries for the 60 seconds (or minutes, or days) leading up to the threshold violation. + +* The edge instance publishes the “alerts” table up to the cloud instance. + + +By letting HarperDB focus on the fault-tolerant logistics of transporting your data, you get to write less code. By moving data only when and where it’s needed, you lower storage and bandwidth costs. And by restricting your app to only making local calls to HarperDB, you reduce the overall exposure of your application to outside forces. \ No newline at end of file

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 HB{Ts5QmqYu literal 0 HcmV?d00001 diff --git a/images/clustering/figure4.png b/images/clustering/figure4.png new file mode 100644 index 0000000000000000000000000000000000000000..f578f6325081d288ee5053a12384c66a93fb83fc GIT binary patch literal 62599 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 literal 0 HcmV?d00001 diff --git a/images/clustering/figure5.png b/images/clustering/figure5.png new file mode 100644 index 0000000000000000000000000000000000000000..f19e4de08f22f1a2de33387e033b50e9e91954b7 GIT binary patch literal 67327 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 literal 0 HcmV?d00001 diff --git a/images/clustering/figure6.png b/images/clustering/figure6.png new file mode 100644 index 0000000000000000000000000000000000000000..eff93613c711c8d54cf425d571215c92a0e89613 GIT binary patch literal 185705 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%0AN@_zl(On8a2m0Effogv&XLxjLr` zWKqy}nO8(duF0mNi1I)^Q&NF=AKblWz7#Kmu>YJZ)LLilz3^#FeZzf~lu5yABYdjl zt|fCl-;Ee+Q)tZ^2*$}~zo z*PH=ezcTPyjB`utylN@0mnFJmbc!NoXe|d$G)I?n=TTBs&U?AKDW|4isSwS-0XhSF z?x%Y%74Us1)R47DaV|J?#lUp;0uTzP*LToA&y_c$#;oF}*>E-D?HHSdoT%l*?M@$B z2*s)5$Ga{gJ4)oZ!G)VfK$vEawoX(*6XZV><~^9^>Cw~6c`@Ok=-|*T>wZj)vCr!q z53>@KDxE(f7Ku}SqE_N-zeh90*HQ+4Qi(QwGc?tn00cd^Z;M1!t)0#(6nxpWsIwYi z6=c1iRnDZh5&(L>Xby7%Iw1|`4nDq5kMi|hlBvah-l6D|UcDg`i+@t?j6V{&=j?;B zm?QU-^c=chdU@?i#7p+3u}%$YJ>kj#oJI(%lah)0W=t2&s0P~9*FyQPM2|b9`lX)7 z@g*>1E&P0W0dfF^j!GL#USGegM89?Spt4b$>(Rb~_jW^la$$E1qT33OD>*~}GRJA= z^$v1>@&h%N?jE@hG>2+y89OWBqe27(T86}wja>T2M^0$$9x1X(ecdm( z6>$+!f6D#!R69>H5^An?$UfV*6#)4s+Ipc#&&Rg+ot`DZQE5Pu;E>W~6=u}=+k>i$ zP?q*`RwnU5*BF;~;O8u>lh$9Idw#*cy|}*-_2fy@=~6zZKlY^;V@IO(Y6~%YSXNUg zqo%}u!9QO=CciD3UjUJK8|29Uc8o0`$7$bxdApKh=geI+wPPE>W_})H_F?^v&P~zs zzI~NmtPF>bRZrLsXO=V74z~NvhBEVT2QKys4pFIud81)wo>J-Z z;rrStvhH$`ByB5~P)}3+SOTA&*zQlMnK|%J`HPujb|K@M`?qh?E+$p$jAN*yH{PPqK1HO;Np?=0ZghMak>x zqDexBdG*3*kqU$DzpZ)3xWrqpqufJu9`6C?-Rdt^HmD$W-izWR zg1vRU|72Y5STPUQg+5Rqqe^5i(aKLcXcx`+DN5D3;AT}-IJ5pUl~-K4W~pA@JB{o~ z>tj32gmw4svtR@I{-8BR$24nZ#)1Dp_MQ#rZUKDy4fAeX#DY?+W9u||e{=(;!3wSNGN_T zoq4c;RtvYD=ryK17c22k}RRh_iwV(}%kD!qy%_*Fl4vNL)m;kWpTBQ~K4@xwym z<=?n5!3^-UW}*5W%LJTtibSlvm5h5slgQ2x9{S%LwON0WU8J0zQI@oZyK*k zS2BLGVKCl#6QX-5CEI(yy+$~iX5%$o$zsV~XxHmmdsXik z0&bt%AV>%;`K=>o7TvRx%?|-ESr)|Ngg8-wCj7%XEIsrF0iCDkhW0O#vyT<3T)Fs- zHE(3#thW$g6CqB{=kgP(HZ}dR^~k!vu<)SNL^OL5WSKCxyBAfouT$gwL^l9s z<*}Ya^*1~0!|%DRL+D-wb1ieqMi@Rmim#(%YH(;S-BjTC(w3*|yOtPfGZg1z&fdm# zT;zM$BQQFtr1(@;)0WJfYj@mhzFCyaHY)3S$_WL%zLaPMHKMh&du_j5*)k8W2*1Ae zTd}*g13;HaK#wdg3WdNvTV$5pG7h!Ahg%onHQeyHJdsWj!$~`%8FJQ`!}f*MWoJN0 zPY)>1(*p!w2%9He@r3%Flq}sZ&d=L~{rJzOSFYb(Q)&vFOc>n6rJ2!;@H;^1^qaK@ zB1KqD3TYNIkoe|XgDUq!od`=#l;3Vej*IW+)442Lguw*HtW`LCd>6O476m&t3;5;y%Py*u}~XH7wDB^o-t01wVq+@klkU4Su zYP^H9wLQ=TL%#Th)KE=I=Q^e$3K#Y`_~KGh_LRn^po~WEAiO8IVwNpMn8Ir}RU%)}GOTfVqGUSaNU1K`Ezp@GY8$hmVOobIjBI7=x7!BWY z-Eg7}o`6;O_W+Nkq;psQN2eR(7b^d4I`P-D8&pKU;X9qaDOV!?diKY%5C9!ja^FPY z|9SSubkqo907xo>ubjqLp{~(i&u);DJtI$*e76u^p9N2Rt4&-22q_d;z`x4kznQ{u!2TP z^ZyUBP_1HDOH5)LmIZHUSp=xqBAu7mVgL9Wlo-6Pe1JiDoafn8vt`uLZ=gq;tK>!| z{1-Y843Sv72R_l>bTUxXqXYu_PYm%hTt@eMl(*(xjg`sB6(BF!Eu{wynd{)q{eLl= zVGH~~Odb6=4}IfFWKqWnzqx5m01%gL@aBN~w^D~;rkTQ8u}HkfqPDz`sH*BtE*HHa z1JmaUvAQ-CgfkzZyB^BA22G%JD-6z?FZq8%C;^hVaEfuCt>ab)6a~G!xe9}3cT!VG z+c)Hpz_I}fsilJwvoG5-{TC_x*v&uzZJ?xIS_&P=o??8v7RN*{X{qEND7dyhV3CENPPrz2Bzo4@%JHANa?$5b_1rp|?q% zhQ$QWL6mlbqyNe~?TF<5d#N$HzivEsz?>0OHV>&#Va73z?PqR`mH& ze5=@#Z%l+sLb{7>LR z^*TSJ93Vgoot1p{&C0Yr zt*BXLIwQ2@*Qq!!l_YyFpl*u})=dJ0?!TBGVZd5Gd7|&spR&vPoo3>LP{ZCoXnfb2 zM7W&g21Ey7ME4~>BoZ`^6x9-rnhV@VT_4rHV_9YE@A`PIU?KGqmmU2VN2d`E3}(kt z?##mh-?E?Sr?467-Z!%5hI{3Cc=(0*f7^(`*9r%O4iNJPlx3UurC6MpT;7A71@!Vb zAyz1(DDa9twzLJk`5XF3>L7j}yNcMYB~vkCBZ2KO6r+hg9rFgFjIK}W$Lje5;;wCI z^?-M@?Q|NJrPH~sQ>}ZHevMK`d6&1|Chu<*u=kC#mV5Rs*9>4uk1av^6ZNJxPV_~& zQg#H}?x|g`MYAXi8sg=(BQZ$nw@n)w)U)Tp%cX0e+vq35v!}0+Th|F}t@sshYz zJ&th(2=V0GBMd6~F8E{L!Viguf5ZDLhJ$fZsK&;6+|C@>_{G}5^gvUR?J>|KHF+cW zEU=d!ZQ$M!Q02WV<7;yOt!fRcNop(gqS~@hd7_z2qZ4v#qQ&*^sZE;t8m9JLjcH6l zo6~+x1gx)14o(|!o}MF|Oa`ag*$eV-hcueJ0MOf9Gxzy)x zr(jKGohlC;lzd_7%-`t|j4;93B}j0kEXmM%dQRk}4QU=@A4r%v=z~!kwv+C@$`9cDk9e0qZa`E2#-=ZxgM`sOfR(M$Gzg6g*FPWjc8wq=DwNo+Ep1f3 zUQ4_?6uoWZuUSCC($$;_s|(I>VSOgaqyDJo%+3=2Ntb4j-8=f~&%A~Ue?tysDFQzv zwFYP{C&HkuhOMTz_CGJkF0}?xoZ&6Rru7T{2m4bo@e)(S`)j|VYUDW&r)dRDuWWKkB|XVV~HK!>3?j-zdNVuo6R z*3V+oAdhr%#>UD9K(!^>1dXG?>C5v!dPB`<6iEB3Z9VkRa#y1r&S)y}4O@!+{^`1o zr(sNz=j~!HHOLM(jRSINE_FH)O>|q7{$_`k`0=FB5HZi~2pq!$`Cjv~7bCct+fdnK zyjcPR>#A5uQL1VPW&V$7~B%nQ@>49IV5R_#jJVgFU31D_zG;;SJ; z!?@<-Q!x)8{z8;qeFAi`ARg;;D>@uB{5TfRan@fu9V+xF^NH~YHej;rYn7hjS7k}J zWDEfbeJ8KlQqy3YyK>9NUX5Z}qko*#zoiu*5~66(XduFmfzZq_$|`)T*S5B9f25ZV z!piXqQiWAaYJzOHfJbmyc&`^89p0q5q|DjKkfolc7_9jeoF7g(st z`g$gg&7tzZ3LHh~}Sa=cyfus@)F;h@##o$rqL%+koydi4)#0Luhqw9f?nOl_hL z8{kbM!6{ka5r=3G3AesIsoz)=SvnEyxox62`;G(oSw*7T*bN}kxX_B2Xws6IsMMIA zRDb%FX4<_AwRg-#m$_={u&!{DV~(p!d85lF;K9YhoG(&qBI;=kb_|6%#)V8>_B8kl z3A}+{#(p6+vpdBGD3Ny@bi2id3{>_kC9S2WuCv1C8HSm~o)aX_ltJLDV$B;3a7hfLdI#a`Vw^%BZdkUV#^5acbjdKd>rW;($=(`EAD2~CH??RPRwM;R~PokO^~`Y9RnS=I{7)Kavg3WMYXL} zX|dKb9Y{C0Rc0YAJ&;zK%4SIguC?iM@<{8nca3%00W&Y^v|)E12=Q#qr$16b8PsAZQromN!p+11_!FXnI4TSwu3BBqcqjy3e; zMKMHSp4j=pN4>3|zUWBH%tsrf>4C-J!)d^G-A zPJx*6Bf^zer9vslVmogNXM}qxAZKpP7nFun%JedGC3nIZp_v91BU*k8tHb-%wU6ixAzH1$Bu5e0%u3zwmS>BtxLY;6&CBw~<6qAE$lZ8-dPZ%5Holz%Zb`uL0W-uGBrT5R@mOOV_T=^H-NP zLW@10>^sZ_9l7mTfYi*CT)cCsKNF+!Moe3_T~5VaOldujda3Z?HJ9ijO(lC(dpkK_ z$R!C%Q`1_sMb5Jc4=;&FO<9Lm$7!k>Ds=cvWv`BN^oGZcn?Ws0wt_z5Hjun$l%o!1 zepo)`74JU6GY>T0ICCmO=@!tmaSJS*wqa}lUYS`k-M)$G@@uK4Ea%ODix-Qv!;|08 zWmmqAl6^C3Euq` z1AlM4K5mLyj^wV6pihla#y_j0b{VYB(z*D>YVu6RAv&fOBVM+LeF{W`Hjr;m5DjuC zp3k-cdEYtM;xxSEzC|d`_BAuxrJ>27GcmJJi58ZE35-68oC;V41U+CwJVl2Q6uZ(L zfzECf@K^OTjCKs zARL{~a)Z10zksknpZ4d_ZRkH+%`_Z5)AF^dPl5JO73T6Z@t&sA=Qr`UCEtnqyi8Si zGXr~u7+$;npyNot;LyQl@6`LraF2yd2@roKU<|$9#ldn(5T{`~L#zhR4M?(^Jwul}7LWwOE~iw0lC}6)g%M9#GFOKrUiMo-f1~@Lkho zz#a{+UXKLAP_xOR1C`CB9mL=;gt>EW;ZoRGs^SzWB~hzia~?=?-Ls79NDFAEClT;B2j8 zFY1ybZW8FI7g14+c@oEMQETmh@*&FLi1ZM+l7OUbBgKGRk+5poGAjVJIO1Y|#nCNm zDr5`th&{AYW@v6Tt8`z_*yNqNref($cbUG6dV@u2O$^bnI#SXE(}nlV!KURcPes!g zl-^*GVpW91S}LmZ zFuvxJd(-3o;VW)UR*CXNUCAqBV<#*aSHr?O!PN~1l|s$KlE7au4tB8Iq1EgmJsUAS9Q_4#);){jt@Iax_TX0-mYIG_5iWnoGFHf2W>&koh9hCpklRPHSR zwm#5!VO>0F6=cyrBDX`1O|;6jp6Xqb%Uc?N{QmacgGo_NAEeGe>(`s}P;b+Faaa6i zRuNQ)8HyOX80kJN=ketSU_&MBN%Q}eMyrC(OHw>*Ny36k2wdH%w%ANaE-zwoD)rb88v zruYZ>r3eGyxr!@7(->{ouQe#4H;VRsN^S}F3oT5X0q04qux~yG#OR)2Bc+n+_LOlw zJqT1p64&YwjpRy}1vy0|+gs&2rT8G~g$>6AO`+=2^8Wb{ulu zMa-8#HecX!-~dJU@;X^p%(sx6C{cE4p%xU@M@bx?qjl))Gnhj*-)o~^i0#^le%SnN+ zS!52&H}FoKl?=O)v~I7(xW zvyPyj0aSfY0B(j?58sf5QoRMhgD@aZ0F4x_z2M%QJa?7&(|+Kl4rSGy+akN9!hk+W z8Z`Bd2qrHs(D%bf3D*c-9^p6*X)TEltW$qmx!ve0$g(Y0Dgrt9t7xV=%YYW^3)bgS1!Lcj zpHO~hdhq7hV$$z!t4nP@@aYhJw6u>KxSz%zT*tz?j(W8rZMPG~ z|B2{|gmFyRH78&FSfC(2&-tlsRpLcC{jl`0nQ(>LnU~y~Y_O?0k)SC)I(n8i{>C~| zDE;qAHF!QSd;~hUc5q+2vt;c-S;vLCr35o2c>>+;MZns*>b-jz0RMcsBkW6*x8kSx ziQY1HL`<)Q7;;cjp_X{8Vx+=KHOc;%r1NDOeW{cjh`L1V>1Wg1&= z2B~H-L5d6_-UI*L_)U^KM>W>EqPawNLcAnbvNGBBd?F<%uYG;6N;AeyI@88z+KeLp zi?{t0&#!=vckZn))p1wiI|iZMd}QlygU%m{<90(OXwS^!Z zt58$Au6B;A2jfcih9CLuI&quZUIx?%Hp!c`?_JJH^14=-j`E57=>$*;@I|`3*>^0 zkHAH+{M1?YG z5e|Jz98f+Q-OF~~k9Moiv`L-DGl4oqGJHJX;F{$>`OE3-Cp>CSi@K3167l0xlfWhtG~UE2(#5mVn7ggN`XP zJA%vITNm3e($mtAq}uFU>?>@#8z-Y3xBHVrZ_v+6D-@vE0hd46a+?uMw6agd6t=1O zH*w3HxqY`dI<}x{;a2SbO#dyGMxhO8Ogr0F%Bk9Qd89q@77@?^H#i7dX|vB@2qYWq zHL-FPJX5K*d#9YFt}-`r3A<=8>iv0 z)+TW83%uACW}HK{R=BXRw-VEmnRQ0r?m44LmXo+gS zobekh;^I>`M>t4uzMbwdEKSTztV%~mwWF)JZ&XEt6#4-;hn4w(xe`~SiE@8Ns9?SJ zx>vznWUU*{5C7s|-F&}!Q5|MfYwV0jYE#(ljzu{QkM(tjo#w)v!@x=Xn5i2s ziN&6ZxRCvIgGGTKOg+vbx3s8kMJVSTXyKqEz*f%Vd#PJl+Lss9sFd{wsmSmXSk zI_3X=k{=F-P)#|JGXo)w?ZBCsXleOV=7ur;zLXJb7ni2x`1c1af7u(ABq4p|)z90W zzJ7hP>BMu*N#ReIakm>F*E>GNn|ylMv2`jbky1dp-S)x0`%-pZ)hr9OjMBz4Q%5py zPr>-e0W(QI|8(ePFnL_I$+JYGiPrF(E4szT^DZ2^0jbzOrm-4IO}ZOOg?QWqU9JD` zU&@bCYu=ob#5+N9eYl-J4^2u_O0fZMKsdk-8S5D>W;0> zGxoJnyDL>seRxKN6mtjm-edBi*7*bYf<`}++817sqBnPF^0{$!DaY)l0GQb@ivKfK8cZE5HSu5FOUtjI3H)}8YH~P5+ zZnVI;8Tl45(3c})uDf@7iA%Xf@5Ec4ceROKRh-{9h8_W%MZW>z9eqMg3Yc(#ScU0W zOY*xYoibx3DodTaGpmVT$|-o&?&M3k#j}$QusmH=#|yPX&|dSa3V@HZQ@2URXK99b#6OpRSdTWlOX{`SuyLFZj@$ z;Fp5QK43rtK~&+VLSTn1?3+BjDS8r$H!QdDXzuhgH!+FMAJ(TyaDVyZ(EDSlHKm?K zN3(m|Uhj*C**W}<8sN0=0uf23pMjPUAR*JLm6_##N)Mm8!xNQLAB`(Hr4 zIqR&@`Z660EB@oPYfsNnYnWSk&6;z_yK;T_ zF1;jwx8b+%&Ia&mw)1js;fV`!5!TzgC*r8ufx53BWr}UDVEujuv~`T` zoo(*Q_Xo47IqMb#%lK0|mN{mAjahoI0 zg4uFC$Mfx;6KUACqvCm;0Xa*+V|)`1?i>QvgiDe{bHdFun6GW))uqa?j5E)|eY00z z??6vZo`EB~<#Y1F*jS%=zK!;HXOEw#rNzi(^3*WOK3onOJ+ED2!)rlf9;wiDW?5=b zd%Vzo_fqmnm*l78dDIeuzCS=b8Yy`g|8pgOYwsc! z_p|I*v&0eSoDzLa5Lli@`x@07p^%HRtbw=#xl*W?ycT*Wnc6=a6WxnFtbKA+trjNv#Ers{n@(Jglwng zLGR6rE2aAuLHJg#XqX&*%C&J*VB;#lTP3M2Z~BiN`EOB~ts*WZ(K0PtT2uXVYpa9q%iO*``4%E^9Jy<741c9r0@&HyxoINh z-n!teKZR6%UR;bzmdQ>{mQWi(o2MYs%v3QIMy)bO0)wl>+K)p)GGYh*?oT$Ox$X<& z!(X}SKk1GyM3?@;v&2v;v$a=kUo$x^Fne~@CV%>+U1=UvhhQd!f4n{th-EjzCgFrM z+RMF^4rdzvG|y0HnpaI9ZE1Va@Mp}X^@;vG32z%DPPEN!u&f#iZv8g11h@1fFUFyO z>wLEFhkOrY6UL@jq&ke37nF%h3vM~?Q>l?-Z-4(pDUv#muemauGE-Cy`e&@lZDwLB6{t*uy@@OBjELfKP-RgpWT{L{Db@3=A}e;dj4j>7gM$J1Z$l zrmX`Xt~+9J6wl6V)iNce^zZEsn;A^y)6I#VUB5ELu3@lKK(Y>O=BJ;8T|_G%{XreR z2C~!Y+EDUm{fh%KQVPV$k4Mc#`Q(l-o?+^WfArR!$ks(AL%_l%{G*|2&2N5$QDoY zx|-7Kq`zy0zYpPSL41Ak32j0(bLH`;I{dO56~hjw`m|q@A}8${jgOoGmqFec@BFm- zJapP69~aRgm5B)3tyX8S7@HC}ofx~^Vo$bBl2x0%D!R5>yG(a8Y`^sd)xmSa;B@J5 zb?w>x@@-K!#t^8~4R`e27`(ExJHl}qNSgfg;^&&f<~|zb_aGb)=>aR&1-@!aN`X01 zdG5GaB`c?vrPbT8kIHt{ycZ~42eg#VO&%vmx)u@-GqlZSpnKsCGNw0lU>JBzHxD3r^Sj@kYZyJJEr1utVsZ^C_b zhsEOwA!bme6Ath=J1f8OXE1B;X}YNCp&_-6szrIrF?5!IktFUyxJB$Z!dHg8Pv2*g zWZzOLb?KwwO!*c#XH0vsZ>YLPs|U2jo-M4=A^BsgLT9k1MnuX8t}rXCQcPFroQbBm zo~3P^xYZx)@}gVW6&PyB!PQx<>WS{--Vs)x=CpsW%X9rx-s^F1zi;!9*c?@~F$XA!aMo2~A~dRI`Q>S`>H7u8ybbK^{PUd`*0_UdX~ z(WN9W_7fN-eXuFT?~A9;hKmw223L1Ko0@!toZk{{pjVWfBx1~i=>M=jb->nUNM7rO z%~9zxqCaaT%hwkkxSnnIW=Z}4psiDUH+|0NR;uAI=}hZqJzPNSx`ya9sH5Dbbvb@0 zxoBNm<$tKo7nxJDa)FUN4(>!W&>6Z$9?7vkuvUHR&I}2k`Qi_hPa4X;pLpfZkV$dz z1MT&o05|z})zpZ9@bzoIc4;nC6KI}f(EZ%ILMkRFO>*+@&^m&2b|wo#Q4fldhxy@r*+TFT~A+)4YX^b{qY0pP^jBPyFVh1$n~Xu zj;VeD?x1qzIoX$R&8E6$``96U%0?Qx4NS9Znd7- zwm$dlrtneXMjh?+1WyD*WIMu&QM){`YYWZw)*1sfV?9*MVlNeXV1CLZwT>cjf3Oxo;)OM#c)qVE-^wn+MM$S{ba0*;A|>J?59>wLG(Z8?>8x;p(e&jD1wA~gPmiOYm)Yx&&5l8KK< zzV6yw9)|hZjlim{!xg1X_xHUJ{Y+Bu_m7NZzm9^pkCMD z9-%mO72_w2&&FFmfA6c;Kr)@3KGpC^BQvxEq)wySCL^lVjCcOz8`l;>vlQ^1iX~MP zM>YI}&Pqm~&>D_b%dBIWSQOhXAwkQjNIUy+iPREfWyYo# zzy-B(wkgt5OaJrXA7j+RgZTQ8q^NNuapifh261FcEZ|@;mXXGp!e(3bzH2iovS^#= zpYRVm6+B)#djvpDTny|#;Le>_O*CY8vDbS1(0G^YVoi1Db{~B@v)&Ft_BXqR8D75r zEWgUD8fW`*VOG2v@nR#SN@$7-N!pd2o-NU0=;GMCIhOJ=NK7H}9>|cydv54rW=~U| zlUDT0Yy(}>lDtvnjI3u@!}>ww;pc)`^JyZ3RS z3J5qr^-cG}4L!{<*q8SHo@tCJYVN`66tgG9>FX&GmlgQ5?PLUsMm}S1oWU;KIO!+u zt-hi6vI90EqJ+u|PK`d2{lp|=`D1$lV?R8s#?|e{`3mEE(4e~krA^ge${eG2O-{px zqXwY1N)G?yhgn}Jfs3<`=;?tgtG;zi9?bQvhkUrTJQdVo(}{Uu$w^10QWE4{Qeux= z5icDw)v-T(4iMY{UQ2~#{~vqr9o1ykwGX3?IyM-^5fuRy6_KW(ARR{#6#*5cNE;MH zq)81)2+>glMM0!VjYv~z(p!oR=|sA;L}~~vkOV>kNxpLf&N$BV{JwXsZ>{%zf8ToY zm*u`s*=L`FnbwVEpfqVJ=*hg`eBWnW9CZB*{r>4-Pnd5Vq3^}t0 zfZDnp45G{2KMp6+;svRaQm#=zeD+Nb&y|h57Nft#80=Tgwuy^pSLg0-CjLQQAi0%M zLlg7qAebvTe)3bp+3-GL4u9caF7}2lFgni9+G2JYjRp~`9UW@RoIOEa`0QW`@g`3H zkFk_@N2ZD?Dm7jJB7jgj(t+YwR}-RyRbSVC(i^#h%$Z_!++NHp%N> za-2f6FCm#LKt(VHa!c&Ae`YH=Z#9CK=+k3~Fr z;B^tJqPz=-!L;an`kwW@{G`gOU}~Uu#;cifuhD>6V-^F#l`u`~J!f9ckY0v-X$hks z#u9ry$8eRN?}pT|DkWoZ_A}uKhmZHNJv0^UHH@?V5%;_7BsO@TlhBm20QhvYH}KY{ zT3PV528}Xz)GHT+dr4&UG}|v=$i0dDhLv#>1Q(sSJJf^}~)5#2X)D|6$Do>?nTL2b@zH*Nk4cYYdb*Qsr1Tdb6IkaDc&C97JM* zFU>r#LS4I)g*|AtO|CAoGo%?u4DSfH;)8GXv~Jj|$tSshJ^fvlAqJc{Y+hj=^!0*C z1nz=0F^JjFzTr2DKG3^$+%jJTC6IH&Q&S-;%PmHJ-gv`)nT)1+7y687?cnTZ3~iyV zq%NP~X+P;iRh03zIex@DRD1U0)*Z+8cOvuS@$9z?6&n!$62k9&M8T!q%?r?qCq+FE z!?YZ+P!J#KU8iJZ$e6rh>uFRBJ3_tRy?zKnB~UPhcBG-PRWg#9Cw8v+dgM0nySBWf zxBwvz_lDY|F&6w&r-diIf3l)#=IZBrov#!RcwbdjW0G@hzUI$dt-f=0$xbdQ;-SsZ zq#2T$#%gY!%`vb{02d-ZJ6jVougjliki4@gmd+$HbGFN`6K4Xa^F0{i2$9lUEf8kj)pc^T-LdvnTf4#ZPZy z#Hb+Pbi?w${R3SBVsJ5?3NXcAIlKRY4F80e z|0O|uOYi*m4_Uq$5@jPJti{KKI+Co9qCUqAXKng1hwrCE~K zyx>7IbGRIDb*pn$9Lm)`e)i_F4Wg*a|JCeG_G(pGinVpSgxhxrqd zP_Hhg)772}9D}>P23gED${8Ol`vd(Sn8B^Aq8jwnF{vr$$w<`G4A8uQjXSP>nS?;b zurE%uy>h%hJGax``1`0>?n;uh1j^KzSIrtr6q>E>X@T$Eu{tHC$}POb%sv)maH(TG z3p?!rNBcuATO_wZ3EeZ_2IWLa-Exu#JSp<4Q_?c?_wUEO^M5sI2JmtM*3U95_r&b? z99`SE-VXZpd+ukmU*3#}5}{PT@z5j)HtA$Y)cMSFD~Id630>VRh_IdkgZ*c}8)6*e zv?pz#{1Mwx5#()K^ozBpZoFz$@qVVz!sTd`*`yOGS98JU_$$+U%){ul1`80slC(B! zp=dvhl52q2i#u)$^;>Cbdi#7QoMMpT^3>^L)j9tV>nVUnCTkz-p1hW!F>Mw2=-IQ@ zfw5mU*>i5x5R2Pm6`E{Zf5y21s+&6PQw?aszp{}#wd^uMe3VyM=o_m&%dM?Ax zf|~BCrc~8e`F)-10h4;vHfcUhLiLRrGp?XZM_#G)mHOS6`R~O`@`f-FjwFgLV?gO>sQ%y#$A-!&{#V@ z?GwzY0O`oV^7sv@rAPBa_T98JO<}2q4tMOW_&#!U`?PQrK9L(vcvYU0bCT!XVWeuO z*0Ju!*OoC88fq*1_7yX-G|0b`2F9MCe%Ln|T0T9I`=n(b`ag1U8I3d}zYdRR{K_CY zech=QkePt8%SlZ=_DrE>RWq?@Kxqe*uK&~isH42+dp3)SN82S zZw3xX)o{Zi;}oh^HFu0Y{akjBT~v+#$DAv8?TN!-+}oo&)j&Eib7-)#r^$ee5v0_a zQL3dZM^kava@n5am!0%7L29ajazyQyzmm7FjHxY^S__5kpfdaX?CgQEg)p|_&6^j) za`m^4c^`*ZtfR;DXE)otPAf97AzzYANuS#3v*!n9xs~#%;dFTFB{YoL-Uh1<$u+IP zR(8*A^d2o?uB-v^lwOb*_ltnGxPR8APYr`!6IQ{037|FOlu^$i6%yX0R;IgNg1=&D zd_?@SzS46OZRG&d*FCJ$4~{DP#45a7)n(DskK5e6fUtM`VSm3OQs+>OaaK;V(}Hek zt2kpIe^eXdg$t1z?%4k@{fyVeA&%vS{jQdGbJZK$+FKE^CHGW(OQGVEVppJ}H@AWNyN|x!j&p7ZawP8_{Tl zb|1OnPJ0UFcy}<^d`tNsiKG{2X}=uzI8pAObjcC_li*ondys7#oOY~r=%b$_bsC~3 zL0&eW^Kb&(MN*N5e@9MSeU@B5Jz_FMvQ`-GIDq`FY(}qb#Hj`Zg?e}ia?X{L{B8WX zf-4pkIk&4yO)fQDc_t4&#c@d8;7V#8Iil+%pM~6yb}Yy$-xnjb=Qt=>`ddxSLp3oR zv3$3sCj%5NoX~|dH-+dtbidoTwh(S*l~UbOv3^@Zlr)G+CpBlAXxF+v*aYCN0Jrva z)2>i3%WtJ056fRAd#R$XF_XFk8ELCGr-*sE1)EdN^hPCpgLJpH^v(w?d&MMIwf3k+XAZk`wEXEXUI=D&CZuElE0Lo zF(pMlXKtRln}x=n8%~IB8W*?*zY;M@4lDF zk5x`boCj00!IuZ&q?9l7ud{Im^bPStu_7|yzTtdTcv^013Olvz70G11)|`D<9Uz9c0hU%w9L3r{QqarHNimp(uxbQo(%o>azPklTdX_4)G2YeD|yX{K)FUKuL> zu>_(0zG`t}Gk-YRypDX7wZ_Sn!G1K0I(p2fmb1x0(M~y6$?PBFoA^?5#Y17DA zg+iA)w@9g^%qI?+UiMpa)9x85yf;jU*sIcGdJs5qnW0~K+6GO`$snXXKoy=n_V>M@ z2ESpgN?C5n{28_91PkG|+c`|7Rx;l&tjAA3{9IpAhdPlfZ%hty<}7QfN5H;Pj!^_!Kg)8UQ;7pUK`y%bU8EE>+hw&(^GI@Lte> z()1Igt89A%>vN~P(mt^Jz4Glp>Wa5bdj5q$GM=Tc;`FpA4YD6!zG&G|LewFffmHYi z`>mvLbX|R*lOkX;$PqoR%vO5~pBi8Ibkw1mTBoPc(Icn4+IDevmXJ*LUAum(w|3@7 zOHN3IJ;ziWFw^2;8~vS_4+3Vb-!*P?XJWbdy)*{xewgE&cTu=-Np1cH&%r>m*ZcNo z+q}McRVl8d*cUEhHH;~H+^4bPJC|0eA@+IZ@f#s6(`_7Rx{L~*5loc8 zZsn+OA$R*y+RE$JF%-A{8Rh`Ep?V+4S6I^5$EDy~tf*rz%ge1nVl%8y)vHgkW@dWM8DBea#xwC-uke<~F z@ka&}6c*~To>if!t1E(3B5NLGqyw0tiAH-W{Dmq_2**6!UR%LY_;K0L$rRjdn&eHp z3nBh$f3Zz$PE6;%)s=@SoC9A4paLTZck?A`2 zaWxexEXr5)R*aABJ=k`nRHiaA@`^%?b-aSGV+Q?H$WH(XeRJroxnd$}#+JS(im{A$ zNuS|XOqfuRPoT}U3f~fg_SsY52K`=eCYDX=tzC#G=NLT;mjwykY4N&T_tbWkQy=L* zTV|*3d&Z)#r^6E8FNjz7{zFkRMC6U0CCNJ4K9h0BA>2?VPeIOF*IEH5qZx+!tDN{ubKbH55H&ty2M@!CRvCvZF@$7f{L=~t=tM^D?>6ariZ$qP2Q2O2t@3ND0pvZta0TeFEWV_J=olF=7GrrFBBBpHr&j=h=Jo{mIJ} zrK{SfTOuHXIW%Kei zcBIII3S5L_`Mk5nWloXkPIX*GGi>Y8I(x8;%q3uRn|We%a}{5DL)5K6q5jcR_^qW*JwQo;d>b({<to)h1E^i|0t>fJ7N@t@Rhmsa0eM@$4;t_vF@0(JhcOVicurQ9L0o$(T!3^3pIbaD z-)Yj_m-u-sg;YXOsbh#{Voz9WqYc;cHVc>eZJE5MARlbyHzZgFLp^{cJ2`rUz|7!2 zhVdZc^AkC<_F_>$4qNHh{2LbOk2H^TR)kb8;H8g1j&yOJ9Zafyfk---=b@($KbLjt zJQ}g%1jEE&&c9K9br{Mfu^$Iq=WxTK5wK4f|5Nu>HhLvBB?=C4hN-~K4#vfUe1jtj zaT|XEhkbF(JD^uh0v>W~TcQ)4H@%pVeO~6^IT27mxD<_BZEls=>A;PzV9 zDw>MAK4&eotqvsqqp=IurDfbBYDax(j8!vDL5O5&8{Y}H7zhtQJms?;(pL2^#37kO z#pvsGQ_}a<0Y3njEKdrn3?U_wwyTkwq@1Xt**=#Pq+MsUGPoe)1l7h3K8lJ}L?u<6 zoETJnMS}OSV_d;kJgQ?re*Vd$tWz}F31Y;IVLgJBWef|+h-9v@C@7vc@*>R{&4>K3 zOIIHfYpNoio0ZoEbyjIGMe(1kt$S0-N#W07ug3y+iG|A?>IO&T&w%4+S3r4dgtPmh zCmV9V>@hHNsC&R@!G&x}$@ppDC#?lIgQMAC6DcpF&=_uz(-_e`Dfbk@O)PEF02j{e zKY!V?y_O$sEhf?$iz$L&Pv^T2}y#VIRX zmba-mx!zYfULm{G$+=smp&^k3e=0b}3I81t@Pcx|9sNc>Y2LtLWa0G}q)Ta%NaLo& zf)RGib>5DFDAuPL3uzL|`;)4L=R1*sxdCD{60q|xeE{pMnw(AuVftg)jtP3up^{*w5= zL^jdR5L9qqQ($2#$6#kc**grTcfKePPspzEfkGsl{!ilSa2bq~(OSsBLTNyg-3*eI zri@-A{-Bu+*ZDDf%Z9C*m}bTyO+vHRZ*u-dF9V4+uU~gVwFv}IQZb+%EGpy)RjM|& z%@wm4KYYK8t+tG}IA;jnCqlUwr}8KWZ>$;C#<1Y>?$Xn#+*esH5mia@F)gO{HBj1X zZZ0Wz$6lo$Lf)+-%$)x4h^N>M2kPXj!&Q_!{O;yvGZQ(83wpFc!3+^;=1K$E<`A*@ zfQj8g{o$YQ*lJs%K+2LP?}hXGbi*hd#C=Pv{dqBqn-sSXBr{?_0oT`FF;^w-TqcUx zjaBcmyy|81k`luio*nl}b+e&_&MJSa_@WlY>3ni#pSK*XV1!d)(MkcnXIe{j2rc#pim zlZOZplJM|xsZ<`|DE@ZlMm09cdrVK5tAS-{bq%2I_t;cu^SZBaI&#pg3SWr!xKuYP zQ-XvAJ=0ctVGbRcfOd0DnfE<0B}og@tVU4JbXguA*g%4>qXbSTqbE3prG>7WJV6a3 zsbwYe!L?!Hv#$ zL5+9gnSel=$DY@IIu`i&vS&9=k91zkNziy_%2!Ab-=C}**$vU{=|qEwz&gdDd}qes zEHY#eKvnP=y@SBSRs*Vo=HWfFNsLsvH9M`yq^oPjEimV;)%m6niC)+mZ^8;4h1>V^ zr^`8$+IM*twK84064@EBjXmBJBh~r$yJC@7%31I`RgWl2)I|b#G0E9=>#OCSLY4KAZ`TY&C9}@jtr(BRu+LmzGrPAHQMtweu=jsqQPMPEDs15`}Ma zC{1B~2x`$y3%+g{>w;AVs1=p=GI1D8O%+G0=$-&ar2e*(E^MWWb);nMtBH)b=FClZTx18bp;_Vv>lQ6LhB)OWf0qEhP9rLuT0CP z^YoEe8ub+@moJ`wh@-*4X_MHp-PQ*h&qNKR-`aDp=Ud%~uwK)Vf#T{^RcR7Dne-r= zVqr!$-%Z4~qKxK1m9?#^RBOFgNiVXif*gs%c;QZGX7}<{?PjzH?wsN^ouJN#h0>(k zmsw4NIALDXfvOyf@O;fGo6@j&Wc8z?Y!XPvu$6sJ<+DP$s212X21fO@0BpII4=AOu zpMCKt*T10#u#xwukNP4@zoDNOD_lO_lhbTm=a>|C0B|)_j~q${RP+DHq!~~50c8Dj zQu_4(AzkRW+~4BZy?Z?szu8hi8St4not)E zJ$2VTfT6ws`}rfF>^5&!-SIEGd#i=suI$^;SM{i3P-l}SV!Rn6;rWqOZ@Xdlp+^*5 z-9h^w(B*^R>KZ7x+@Y?oKh9nR1Nsa@>HWG+wi|J?@Q zr?YAP+~2vqC3q$K&nkqP%CozRw-c8Q%lC)SgqQ6c6jlD)U9f}%m#yRX=c>QiJO~f} zTZ6L*>;BXA@~OZ7%LV>BMq*(^A^`pw@M&m%BMhG_BD>-vD0=y(3g4XtU(%En1cvQ0eb1@!+)MnUwY^5TM$KqI|Trv zV)M6QKnY~%ou%P}%Mt_xaKA&;sfm`3CFTt(& z>@l5@jF%V{y$d8209`9#=%>-4@*uE^aq>5@Mj(#U-XhlCO@n(*-e16+=pA5}tX+iq zyOvjbn>cZ%=_E(!9e@2X7tn=c{8AU{G%SPp#_mIasG2;Fcmhm-05qciY?!-R(pZEk z^MMS1^UaY@k43eQhJ^_T?0b65x&7QuMf+;Pz0eS}_Q;|V{k(E%wM|>pH!>vxI6`mv zVxt|&JS6C-t^uPYAn;%i$08wb&Q0}k+!OelN0E2SwMXx%Z@eAw9?T^wl)^c11Xb`1 z?=((6$%SIKCnNHN1^T*^_cyXBVDkFl`F`Epw3Pz4cOPE5D5D6a-93rkG|F?S(B3Gf z=KYH8wMJlfIF`?wHxAvUdJ$9oLc;Zhu@ktULd&zKP}t`9qpDGexMp8xedz`iZIsdytOc0#rOPd zCP4($3sV?qR}OP-8}GCN_naB(P$$|AtiR^+`j@!%j)2t}F|lAe+51O|2nd|Gx}<(L z5#js%gYE=OmId4=D)6Wn9(ANG(@a5=lHk>7gZF2@Rw8OJ7Sar2a%}SLYXXzy_rCa| z>_~bcrZg=3kZjIHg9Q6b_CU)T}B3yD?G3 z=FL6EZ@|cAY?%4t+iu~QNVr=0&}-((NT7&KDf6LBj=3MBL50Yja7WKGa#0h`oKK3V zyF1)pg5@|}|4t3MjirR9w*@6NL=Y6$m=hs$Ct+w10s2#>&g-M+yUF6>H+5fzCx`BT z@x^zk_cM38AUAlYnJqDQrYp054@;gfKGuix~#YFf9VPVOk%>zRvstWt|?k#D)7AM{v zx=w72XPFx~daQ|tq9F+j?}P%T&;;I0E)FmbC+xNicp6Ixt}jH+Xrc$?$9O3mpg9O5bf^>v1mmVsx@R7@scl)< z7m2qRvOUT5KhN^G7#5QtvSo9)K_GG6Ocw=xpA&YXw?mh&8YxK8-r34MV#9GipLA-C zfXZF{UGC^^^O6SiC!pKr4ZLf;4-#2xdS`W1CNn1y|dBECF zr(@u`)*ZdD5Kg+H*yiJqR7F~@#fuLx%`@D0wKQ3g&thYip%z_0 zDINO&{KyFh!FF(^&g52Z)pJs#Fy8zH|8(mSYlXNQ93lO^4?PHK<5RHuaBK;FZsV}H z?cHFG)!g=ss*0(~&6;Uw`f3=FQ<7 zRtN}mFRkt>9dB@p0ov>1Gg~2Xjb{;R0?WTArAy*ov0DxDg3G_nO9NeddjxX4%Rk-f zU0L9e_AY@JkkelN{j$gF4Fs_TpbG47|EP2Ce@ml`x(|Zr+3L*$hXmW*1+{sLP-JPC zyOU!V6(5L(H$)bU<%XOL%F!~{=Cje&RRfV`!B=4L$~Qb zkGz-`;?K3bN=_GhDZwAiNFlK9N}%gNB7gCB`tWy8dJInGS?fREF12NlfoQHG46=1&Klt1{{;ucdC(4_zi zgRj~3^K6HE=yt}~ySqEUicA7%uqf6)S7349+}4HiDA4bA@Sj=*t>6O)nDDfbtQBth z7GH&qf1P}7$;<5S@qtBEuHRez;-_DpK3{oe_jll0!;m4^<# z-2L^Bs3#;O4X1+Vvk&y#VkCM>sg|jF5m96cTXW}eCCA1d;o$&AJbMl3xTpDj`RPcC zz|4iDRi8Vh7uBa)PA)4%7cO{SVn|gWF_8`_%KwEAy5?0zqa!5I)(;1EgBj>J#%ycX zd!e!RW!U131O#?x6uyz)GNh`50s>h4sip<`gdZfX7)@DTuxjb=L;*dbW8`FKy|32m zHU~Vm_>Sk<4P$$O^jh`dON;r$2|_*LSB4lF!FzVD4o~m6A4X4 zmbv7@sBBm_GE;6@2s)0@%Y!2l_#JD>MQuUa)9$Vgbz!LS+;W#>^(9qS%UcrO;(P=I z;`Np$Eg5SW=8bkihoYK&RsZ%m8% z-b53=M^z$U%Nnw2w~Y=g30**-^;*Xyu6?{c1@3lF2slDsXTPSs++4dA>G z&{Oa$TV6eZ+lZyb`KHLAp_7Y?qvN);dSEc(ON-dEes|K_30u)|oW!Cp%=GlJ$MW9dfV+WK^Q)_Hpfj7 zha1kuNk*c_m6l!d#j{SXd1%G+6qCPA__>xucki@rgaK2T1UgM2dNs>@oZH6y-{!>^06HShi-vBgEM=Iifd_w~h1Z@I= z{{^;%oy$T^Jr#0iJkal|o!2h?fOgLdTsFERAD4~c;$Q__wtd@?i+@)R`L>f5|N6aE zLGrvZ!wRF&NSZ01kptt-+osj61W$dgNnJA9VB337w2$=xLlKZ_>I{_ip~trV2R7vBt5-!Bfi#q>Ku0i(3y zFIN|B$S)-RJ2Bo+N;j=pQxjha#6@{~aZOvTd@mCJrX_==b=11Ju+f?~K+p!~_qotg z-MIM8FS=Bm>rG9z^b!A#@@2_ znRh2xGEP%aG56!zW)`Hy&(C~w#Ed+#a{Ln`L(4^@1X&reHg(t}M+h_CqGGIhvk{sI zL!&Sc(fA3(I3u3G26wWbCPQPnec+of1(@Tu(SSQIz0Rn@e^@kapsSgAyyP8~gd9~? z_tq?_v*r76V`<@{_0Je;V4UxYs`NF4?ZtA^B3~a zaip77Omb$8XGV@`YBsvwC?3lrhPZbJ%oEOZ2!W?{B9=WJgi~}f=*1;IolYf0O$)W+ z>~mp0qEFb}0as%zD_qJP%6*}6#94m_W7OgkeJAr^)Gx({HQR@bST-k%dnY3*(#IAZ zyYT7n2U0LmtjTlhm=xvrFmftb2%oWRZFZwK4rC#kR~q@#RSnI_%hgXOU|kbDZ#eYWH-NLG2-nqV<*dAlA!%X- zD~UNR=G(1cEe@Xg6D=*F^-ksPab`}lhuaxMj{*HuM=xu#WTst0$w3`F`!@)DyU{IX za$W-?&Uz}_*=K^mD_BGL^|sN$?;vlYbw}^4mZIilcFZI$!-X)AflRA|aPQ}J-*)IC zB$%((_g$!J&U5oXj3bpiYG+qiy3RBajAIr>F8tk&6tFHI?@FO~QS)dGvh0tI$ewuo z(mW1**RMCV*@tDLpH_vJ?L``s12WujEgeu>pZ~NBpx@i_*2TPPBbuBTEn2FIpi(}W zN37=aFkxIT&f*%Xz4~r1eNL;}X6ceQl%t8@?NQ~)k@K8OBr-!pa7 zjSBIgp{=&dK=y{B+|ax3v+T@^yz)o_T*+M|d=`?#bSTTcXu`K*b_8cn(VUH)!tmL5 zSWqK|anS>o8ts)I2W&KW(#>GK59TcU<Q-ii1U z+(a&^rKp>vut1aV#hm6R2D{J;caeGcx~>6hjmgRZTMfZa19lqnK$tpt%Uj^~fz2EK z@awRa-E{TAR9G6eA`&eo)ljG87Fwm1Jwi>DRR zIHsto%nutp2ZJ7HNe}{`lR)ouYH`> zbE#HEHx=bYO^YG<*SV4rgQ6uQ-YpJI*FHi@yu1I1y!coS!G6L+L7b2G?SCLO$w^{i zrEJb^+u&_d3bgS2u4T~j{BB5~j_jI#F<+1M-ROyy3}Qz!8GgILu|d?`e#K78P>e0F zdA8e~pKIN&C2D;KY%m><)Vp7xcu_#i3OlBu)qRX)%_62Pm|?U~ImT$pirbBYosJky zShs5l$~~sYq_nEj;v5-z^T?lXnqxyIU9HEybukox}VEkGf5Du{jD2I5kIk+)aUUBZZJXqYtra;^S6lj`NnQ5O>M z21TlzkwA&Lw`+^##YD($4ihPc=X!tWT6RVMr9zLhUB?~f=MC6?VAzwVmxi4jBwp?} zmR-U-Pc5A@PFrvlSquvF!UeBFbb^5Q?|DDnfRosS=qeK+Ldak?p-mvm9fyw(WCVV21(&31mWf<^~#-i()bR*-j= zCJuNALvxk+Yp%5n^hkcOMp#QrKtAY`Y_v35h$88SIxefAB4seax%IW@Y19(+DJR>;x zv~b$c+_o^E>1QHgsO&ms|Jk*9i@Xf6%6EkG-c1t`RGdE`uUTS}^x;5<{198u?6IKc z?3k!lFXI>>s2h^}R&*qi6C=fwl!GBybx@pgWj(|E;DU8b(X~pn?2vUDcD`XD0_rMt zsB~MH$F#Xf7<~GRNZ6fe^Eor?hZ<|nE%ym<+0L_Yc`#>4SzX>l_iK<)B4Nn9b8|8B z&Q%X+azok%?A(hyOI_X62V25ir?-nN4?XW(*nR|76j!<$v9xB8qyBup)(b35Ie<66 z-z}7H9QZPYF@V#8H%p!}jyvk~8jMM*Hc~|i-um)_LT|wQ1a0hM>q^ZfZH4gXje|pF z!NEr%1$%R%zrcE+^sqSXs)so3?fl#R%8;1UDt&Yp{n1T(~&k5oG)9uEqBrIIgt+elc7#{xUkx1OH znenGpN|(97lP9H#db+7pK$qR_S+o|ukBM*;T3SLTEfd-fE{zGQk~vs3vvRn>l3 zvZgBGZnu`Xv!MGIlR|<|x99=gFH5`j{jZVpH^%J7OQ!Avx|Oc3nm-W16HAR^94-<)p6^>b8y1=GC5-{>!{^wBxMR+P zt3|ASQUA(k4d>;X54`if`;D_a8VS80ClA!GT2AZ3j93~rGm1pY++?8*YatVdP#{r`IQR{g5c(e#C0V4-7*i0XWAX&fL%yss-=uiricz7q$} z0EXuc( z3oL6Hep#22C}~T)5tEryB?uBr_L?51sSDLU#{1+#r{H>J`JDTVaKg)7bzf9 z=7WghbBIpGW>xUjCls3KZkZ_~TAI+=?jgpA&AaGSMDyed#f#({dA zkl{LpNY+`j?AS-Tg7pDoL2ak=bBwVK&20|p4d$Cc3EVn|y3-T`*@!T8*VCL|YaE8N ze(i%1Fd|9**RPjOwomtEX-U3Mt`gb^85qPkVOnn{daX(z0IULMbWdD@$AoTdF(5Y~ zvTeAho~gO&&CR$|?zy92SC6xvhWEV@UK5BD4A2~JszWm#ZUtL?5K`?!krW?bi=mKc zQ<{eR`-8-^@K+fcx%R{3QGHa(^*{rHmf9{jz3TWkQ+E2b7R;O?rYc*;W}1>3axp53kQBb(~nD-+?M)*QIF0oJ!ZMV{BU$B)i^> zd{llMHh9|#mh2u%*ND^bftOAfPume!EwFN%{@n^ZqFe2ZEv{u8b0+;9B9be(VO!1> z1(4=9vc1yM?BM+VZkXYwwPG#4cSu0BZZ&bbFG|Bp+~;2I?@KT^73q4{g#--R?igPg zVvK^V@PTtzwtaeJc?f9ulXD4JjVvH@L~yO)-&g%xpKyj*AZEekR4G6F)!5K0+xqo) zgX9E1=*zDgkdl|dxjC2?c0B!cB+Lkmz_LQeJyQccqTf7nrTk-A`;gjnX}}#r%plUrO*;Cu5eI;ZE*6#3VlJyDV}aT?ruICT=Y0iBlqqS z4G)YeTsS=?iqgxP5S{HIxSRS;c$pKXI#<~WAzKgrrs8n5uPcQ~nr3%St6OH?Zit_p z&jweXc6MkQU?@s!bGVFjbJ&=7H>=2JKD(ojTfl#e4xLv*O{6zYrhP<3<80|LTsGaG z`6aD$x3aZkT|QExSwX!C!Qw`oB;48XVZ2!f=JR+9irRdvk0)`iA^nzdN5@mJB6Eob zF=rxNyOX*3KHT9-RqCO3Mzf5U3WpZ!68BB$YXxn#&NAjfO84mDwPKpP>k}?>t#mAZ z(B7>$4KmJ*{07>+)3&>|H1bA+Z`E|13d+op5CwOU`K$yJK5UX~4PC*YxOw~1kN{yo8c+T*AkN5n&aYu2M?E)jvEL2b`@z_yyi&z$}e@sv{ z;P+0)N2-NPqUCzJp9=W=n&8j28t&$$v(e3zayysO!MLWrQl@X*lZ@=RI9t2(Iqi;zK41{Y*xddQQhiQ}Ti(qPC99B?b7J9;XkU z=qvQPAE?c;-fo)x8ns6!Bu_Z{K0{vAVn&{N)C0j(n%^j-&1OG(V}EAoDn4#*<8)oF zXhal_im;R-9Ro!=4aOqGh3TTzoxPOl0^W2H+s+}7*qJm0KbPA)TS;qt6x+5IH?2yw zEx)B(NvleiCk|9@q}V7bS~sYre3IQHVgt;-{r`EYmFyJbb3%+^Gjfi`B>eZY4eGDD z4}mhOu8~_ahSxqkO^Y%Z*(6OwbNhR4v3;(6$VA6sDvrBv-oRuih;|Maj$+hb+A3>u z-dr$fzC5_iV8}fH`P&!%%TaCCl_9n>SLAw2KA$O~^r6`yie-t6p&S9qCnE0Webc=3 zhEI8|58j8CI+Nb(UIPu^o2L?kr?p|*-R+bE(d7v)c*t0YEP_YZNXn+v@34UM6*#Z# zuB{M^tX+291Mkuqmo+G+b@Pm=r>RVeh=NVxuU&0tDOZNz3A5^M`dDOn9GFMdBircS zPTZ|&O9!`wT}qC*8)Zx{$;VoXs@qu{XWqNhS%7OHZWhjvA<*yV*-byKb(kJ)bHB$< zL+xa7KT6kqNWJ)aqNK(oCdiT&_r#Exgf~71EaXL}&M~~IJQ8zLSsyMgjFGe%qp*Sq z^|mzjm|SP;5SwBwo?w0Hd`;Xj_j_dQQ7NXH{{SzkCLM}gJufWc%2RNX&UbG1*^4O3 z^bX2&XJ^~Tm7HlzqMVj@AYKB+(v$>ZFQq-0mVUog&<`#DVem}ZX$@#ECT7Nrj%g!q{3l9_^cCM9Uc ztIDhWII34ypjxHxez;c?MKsHiM%{Z55gka23TXF0TQeT#b&8D==09LxYtPR;VtdK& zu<*FT0Mcc~1Z-%RnI5QI(c&m81YB^f7J2v(5joCB__Ej!qoN3+Esi2Ag`-N0fk zxQU(L>4&+<3Gip#kp_O@0nN*R>UhyfyKWeQ3I9eIz^8OiCT-8D@L51G)UUaK;b zf0`LZ$-9MRkj`ADC54*2vh}{qP8@Vh(3agOmUq0OqWozD;b`GiRf|jjRxUf?Ow#3q z2)v1eTfl$iQ}F{zl>>b3g^wr3+G8?6BpuBEI_=a~t+4S5&Fdre0}cMWr}FtsQ*e1{ zVc}Je3d)MyAeukglSB8pDlHMhYMc|pTb7AwK7VLlWwF1(yn zqI|XW>C|A0QhqZJACz$~0~7x%a90b6?k1Zdc>Uv&Fyi&iFAo?sU;mO21tltW;Qj8C zMf3&WD(*W59Fsw@)r=SXPtC@8mpwB-t?-)eKUSA3W@1`eH7HHIwnzJB{nJ|?TnF;i zAGG)s8d(mpo70@%D-j#k>nAOk_L0=`wui0u%BFZ@+DDC8(c`ez+b)M@&u){m5fevx zBIfGv3}Lj>fg61!Vu#o==mZIQtf%)}{fa2EdOEI-VSZ0Y z41e5uLd}ePT-n>0H{SyAm~?$&iK50#ef_O2)gf);&V_$EEsQH{1Tg^eGyK=t<5RCt z#TP;BoBj%~CO9->a$To&Z#IMB=oo0rL--zN^@m?3$i&#H9H@V00e`~yDwJ`Z z_>*x=jY$$Q!Mdy66n3`btmP1#eZL;82cKR*69KOuku|p_wg9sWWdG`5LK*mE~=Tp@rVY| zP8c&;!mti66O?%P&G`GDoX-8jr3i>U1CYLDb1kEtU4JLnk+{~_YuxGXhq(t)#11*@ za<%cx2*dIm2pMLLJG+Tn7F!jy0;Si&_j8Vv)i%%7kDqOMSu#>gv&?;5=`PzXV^Qv6 z=rFapeP&v8}=!NclG-5xi2#`D*&i5imrOI8Z#Q0qNX8sQOTnX$O8pi z3eDi8tDW>?odsXfvvsk3bZ7mbRbicTM5*`#|JXpc1T=fxy z_c01PFBG3kv%1B8c^HIK-oK79wHC68TMP)VT4aPKO|!2cGrSTGU`=^6Ax5Urul!NW zaF9ZRrZ;W^TC5@W>p|SGTC<;3%7H23(wdMTY8f8F(bvh3uRO?oAY$8^kC^Gg7$-c` zZcKRMR`Hi-EVS&;x``C)Q5g3+jsH09UmkjDpUtC0w|FlrF{LGNv%EZ}aB$h z|2}}28JX6U_swW@vjZ?zxmde%5YRp5MeWcJ8gmm9ndHA~9jASs0w|&_tKe4C=u}EZ zdJs3Xo^KstD7qBcx;KA3LhNvt=T35}TOYn+s(XUe44kFD!J~r7wY4c>7s0*23jle#g7qATNa- z7PE+LBs6IVSg&U<%`+e$FSWV`B;-)-+Ulm`v;i@%sseU zn|_)YAxzx0lOuE`GDqG72-VEBimqs+r$zXbI4F7(NYYL+CbC$HUy}e7riIv8JL^z> zE^U`z>+Qo1qjaDyE{${zo6=h(2g#0ZJlH9s?h=^9UrsNHF#!1d*Q81bgE21!Ykol` za4_iExBeKp1Ee-_+IyPU(95Y1TjKh<7_)$AZlqIP0XLeoS|MI)N#{was-uzb`V_d^ z(zT;~0%q$h9O?!e63OwGW?0i^XRoand2;p~@#K6UCgxMU=(Xln2fOimX?-ko5=OIl zJP05}l^$jJ1i$ttkMYL`ZZ~hA43{uACf`iSGM@&-1PVT)a>LFK;PAdhpwfF(d6(z- z+s_Six#uq=sXPIGedH~m4xWK&p;YMm+WVw7tw#r-PL!9QE23+Vrhmbl(DeJ#?@~Km zEPK!umatcS8+IB_kuf!uKalcRniwQ#YgK$M`{*^emQ!v1xY1~PcZVrFpy_goCqL1R zNY~I3(lUBrGf{Cgm8q#dR5#R;=3Yz3?ng3hkQeD?6iRBQC8a~5v2%presLN6W6wYo zL`D)F`;@9=X79ieHYV0zKOQ`0OfE20c7WTQ@ptLU4N#W?x69vqLtNt)UkKiWAgF-a zVJPxGIK-Yzv+}zvi*Yt|#~sq(Hz(X8u8R0DL5|&y52!1hYLn4-fSsyxd_jDzXz1TM zLSJCV4Bx+IRL5Fin&6Mh0w;xf8(pFiCL+9XSN_2s)>P!afI-<4P%6gR;|i;+(~dZTYu0tSfGz{>!v^9EBAUjNUx}hXqdXB1zZ0%+^{+tP2(1P9&u87 zzio3BYO{4s@@o$m5WCEQ3|a$Y;bka+TdOXQ_T+-Lxsb-n(q)7>`0$j~mx0NHFTt*i1vI|pc>iGd22BUdBF~e+wbgiRVNaKE!uJRU0t*7 zF%jF;5GFvdA{J5TzD2M{TWH_H}fl-FV=#{-C1$_%-mDc|0VdZv$G0g&%IH~rDR)uM3wIZ_Sx>+VLYj5MCvZD(wb znY5V_r;`%r<T&0yRSq`ZbzdQ!qO4C)HU>6L z;-k4yfAZIfi>#^|*V!lr>A_oO_BR1jWiX6qjN!?xrb{)fxhcT}b(}ZrDbs|q1QTcx zOv!n+$*RUNrf+;IlZt8Om3S$ls-({J;I5}iN$^MMbKoDAYdB49e1I5m^GQnkrc~b->c16PCE#LS%K>VM@X&Se0yC3mf z8E!$sTCs<+rDQ#+sxzU_Oc9mgQoE7%VYgXXd`XH#+^2Rk=LC647`n86v1rxjLpO#p|r*QP90>J(B%or`qhu6MS* zYTg8AQLGK!p|-BKZ|ED0N&lL8OMlKod2(jsuuEoUCPj)(*j83DMB4MI8dbaGPAgDk z3MS=jV)*N96@^XZhE;hTIz4*_Q|oO|@mewT$V-*$UQJT|+q9aKqQZ$y%i###)+uR& z%gp?yw%$hT6|o_IqN=OB^c{HI8|4la4L9Dphio9e>BwVd_QByVj-vNw4TpT-al2@= zVFLYnwc8WX>0m~ftRoZN2fIJ5t-8O0>TYZHa+n0Xy?u()$8Q&H22W(pRWog43 zV1;N{CGuAVni~sW}lh&eR1B;wxQ(R*dwFDjYzL%s9mVd$_-@yn)qVe z%W2$7%k!c-b$Z%O03V}EZPt)%UFlp%T|3Qc2`LbA>hhM3J0qnztM`(+kN-W-0?kgI zpzQcVmlTErU$49l*MNX#@mS%3A)XlJ&Z<3P7^1EmZdtag$SInd5 zvlh3iJ->u2IKXntQcg>Mz9@vHtoRw0Wq7MKJR^-CnWMM$&{dN>YRIfws@M6or8)9o ze|_KcAbk0W$P7NZ;Yo46)%b}IHDVoji+)XCZUk$jWJ9&f3`}Ib*3NOa4Qc8pT~m6w zs=-G!4Bgg5Z$*{77HjRcsMuM$cvEr$QA}saexB?Q^HQN!SR9Pffz{`8Ib574Qbn7{ zv(m{Co^@^Mp}*QQwdtY85w#Z9?j@UJqH3e<(Ixy*p$vV^w}ughN%VX*riyu0WwSCp z1*gK(v=aapObQL0JyMJfTab&4jgBrXxL_+;8_clP9Guwi(zF&NVA6E!akYYY7;}q? zo`&#wtJ5g6?bYbfk(HTj+1OCC@pdE5lkLsK*M58_ozS^i;@u%LKFNYmsCzEzm3{MG z!?@R`X4#Z?QHx1h$}Q8zMfOp5=_wnQjH{G+d{IM4pR`>KY6e~VQLx)e8%2GdXZTIa z@l%27X3oJgyVx*Kju>7>s@56TpnO4#pv@z%S)yFM!DjG2f{!zi|34-PMA>s^KtKS@ zM**wtpjG8pqLbUB-Vc4V?U)$gyL+8CZ^5fSJDhpnWCs)BWOD8#xNQl4goMuozM^4C zj)?~RANp8hVal8G>8AV0$NZ1YZSNE1i9E`xakX}k0tcYL*MH=46KX+c&|Rp$KCx9J zm*y=3NtD|6?OU0BLxZfjSygPuozfZP_Mv4s4a3l}8Ecs7^PwS~2RTa)AaX04pv18$ zP1)O4Kw}Hy%+I4N?B-loDodpfOyUW>D9NHcjTwEW`+ofGrA0%E2YF|1bHXgNMoU{4 zerjqW7C}02w-u6(`!3eP2p4sNVrjzevE+uOVNJf|QRcuvkTW~cwH}Z+SHPL>e?Ocx zE;KQlWRMbrM(%sKYN;7%F|_c->Iragm%u3KJri~>A?&^JKklD5ace=}=$RGW$<_>Q zU+)P|gQnSJnow;eE7S!|e9eq!lK0mD=Uzpoj7b;NryQOz1_{keMI~-fcrHHQXIfXt zrzJexJ9u_Z-gtQXI#4~g9Fnw@_QOhqG@`ddan&yYzoy0~fY6Z!K@|y}B6lB(EV?n4 z9mshnT~U_>xKs%w%)2zJA$>U(#7x~RTuwcM-%#gLeoLgIL*g@SW|Wf?P@_X^YEote zhMGeR6O`0hrBxtbAFn9C5S?`MD)l75c>~?JN} z4b`g5!I9xQV|4}Qd7FA0?q}x9>azF6QkAsfc3ck9hHf3@di^4$>To+tEE+aiV(f?! z_+^#iIh0g8@UlL)c|AAPC1;Ft)_1!b6J+dx@WS&>Hq1b0i*EtwM1_4?B2t&QV;Z5s z`19EA4bedl-6I}Mvr~@4zBjW3*Mk{U?Q%q?YPZG#^Lc3iDAnwg76i7I?x2no0)q&` zG1bP*{}+Noio8~z{V`h<;Ikx@TJ+KZf-N;wTBAR$IeAmq6WOH=ufw%KwZ%lNAIzgGhYRhev+T7kF6&!m zVaq8qNG>UQyWWpDZlcHoNX6D9&5*K6T&;?N_!B5Owr}UAlz)C-)J}9EXlU-ZYf`%Q zi2FF3#A1~n%1O1HS|e_M0AQ{+Ld`-2UMymk4(|JzOVjaaQxoHQ`I#PjbBp7yU(cns zPo=V#02aO;NU_DfTONN0*aC&8n^00dIGaABKR?UCbE4s4siblU!n<-)n@+S6Cly?= zxnf)xUzv3x(5y@6^wHx6S_CNnpVFkJPAb*RnnlMKX_zA8RZwi{Koa2pE1ZG9WlOWD zq8%TnRtpi-pA^UD?E>;_P})fq<;et@B~R70SAL>?((A=vh4@3>0-*cvDh(gSzo;D@ zTq}W}NVdGuJ)1o2z`O&wnYJJo^ZE2V)N9?ndX_YyAZzO8jXsw$?~NUPh!$5pMKk7L zSs9$i!hG~ZHkqeHXNLJNk*IAsT~2<9dr+1ge6E|)pR%z&e9&z}1*)=6IoVj}$(bxE zxEehx7SdPy8-Shez@tdD&6D+MTTNB&;ga6=qTd$(nEnO?Q6N=ED7`U|OZvLnBAr-Z z@O4t0x}v3erK`CYksn3JwE-L`ddGVn3GKiS%{X<>3gjVgc!$l_iC$yUy+of(8azD> z$Ef6K543zF1+7eRCF`QU^wsWCC7WpVb<6OTn(c*x(cQ(?NE-jwVayklN$vR?`yEb& z-cRL{N^)Ar^Tb@R&`s~kw*+^%HEJV5CudXJ7rG29v_W~)THprSDbOJ4jIRytEu=)y zW{oHBhcUkGI)93CvgyWV_MY+*y0*;0sNsiL_=~3j+BAb-oN@X_-W_|DrD;+Yz$rT; z7YV{XrYJVzcUgr)DNwT~Lm_7{08oQ9dySOo(IW@3jmnVGzM-eyq@%olWu!>(tZGj` zm&t9+oO*VHQRNh`rHkf$UZC0kDedm1Bf8abzrn!2Skj#T8I%Pv1fz~CRD)U}?VmGk z#noQ#^bA|& z%wD)COOEgwY=6B86Ioz1`>)59!hfQ#))BbVh6<#Gy0C1eR zeu4EnK952^NNv@j7(PYq9I@l>O%^gMgm_Ka`za2 zWzKL8M_vd=_7a^?M@F4CX7rc+V-5Oi2HT=e$U%Z7Zwd^xiMtYK5zHZo0 zEZr}}JOHqGcq^y8oOQ-c&^vr6kP|lJmi1&tE;D90*{!YB-qd1zCa?sI;0qqiL;O`Q zp55OL{~wYGs%Od|D;n)^Tr<}^ByIjy#>pGH92{Xbh8}4+cOHWg=9Y&`w{Jn)@mimo zZuEMxOd$kKxeR4js0wq`!XbIoPJ{Ai2us+kue%88b-1zugFdIh1C|!!+}L2ZTFP#Q zK$gL0s#VkQA#Eo|_~hQiS5hI?D6MKJ1!kc3+LqT+c8f@GVc%Va4A(g z)zy?Ljs2Dlfyv5ZCM~gD{B>oX8mMyOyL7r60&^eycq^t`dS7n7USNvkHJ>Q(HVv38 zEfyuSovKTP(ND4=$aLj86TQ*fx%3@-fD$G1RVr5}?)4$U4ea9G(KrQ!221cm219|$ zE{C=y^ht!MlXg<25Asuaw;Eg}z7#UC(S@yO9$eFgx9H(R9hSI;<3%mBHDbzqynz(v zz$(3&nmH;nWX1nCKgxh=Nqjelk^ZHl(;p~nW8TkoM;GWPrHY$kbkC!|9qzgd<$J=$ zr~?mvbn9obNhtwXtb=E0$1R(nib(LLj;6Q(_QQp)y@R(}3| zgl)D)U4&BE6rluE=XVBk6XKmBzoa<72b|#N;rHD4cJTFGsDx7<=n2_A@(&s7=b^=_ ztwrXs_OPnW30sAEF>A|qr-)0yDt7Mt;fX^d(^I3+0L9&IdB@!qVR+#zHK9rnju$=Q z<@H>nGLNdZ`m-cn+D5%t%h7qiSZR1PYaNvvPSZlll zT~RkjuY!X|ub3<3QqeU%O@bG8CfvEo1pjYK`>N1K2*Xm`@0lF|oWWWaC&F856K)7b zbe;fyeCHX=H)VR-aZz3mArOvejz%-;OlWWeL)wcCvK1U}f@O56L`pIzZv(E%Qy0q1^ceE0RwI0ENzX0wwgGm!?M`ssCH3u! zth9*vy%DTJN4hfAM*?XxSG2qCUdIY;VO6J9AW_7}4z`y#I%+)FXA|4S@GrMDcpw0$ z_sRIDg_kG@{w{yrZGNxmoDYoAoGJ0~llr=HV2wguY^At7XGu7d&UaMbj z8ub-c(&C4NOCcC18M4G@V-PrCfZ33ifGv5x300mdI={y+pOU$?U7`-ByG}}$TJ^na zl9H`6Rs}(51T>ExFaSB9(c56L95h}y$Lj=+1HG+w`hDLH0hkPiTb?!6dkOYHG3tnk z?V|txEx0ssKBv$Gx6lnDIz?z}E#NXKJoGi`7gtz&_S4j7ENCdxi z;&xYiGbxPe)VjC3d}XV6D7YH^CJ?`PLM;Q&g}q22IJEYU`Mu8t3Wa#S6lsf|hvNYhtfqLw-q3Ka;$m70afGi|!Me#Eb@)McU6~R7l_t&R0A-O+5ewQm0A@SEJFI zdLkT*(&}eYl55RE4{m)krt#%W$ukh8TBK_J;h@(zqsqME1zVDDUGo%n6~bP9IfSTN zZY~%VnBiWMHdhrbppQX&t`CdsXWDIfmv2MSP8~7978qRhP%@go_9MjZ>AylnzY_Bx zMr+pxLI$t}&7%4Qq51heY6xhUzoe2V z6l3L_rqb9Nfb_u;o>I=E=Rg|SGJri}Oqs3+UQqv=3``_PEeCRisz0rT*P$rWB}dd# zTv)o2Y6_QSj(}l@(H-M=Fs-y?@$k}FM{*?!{}66|#?u&1N2LEu$pCrdDO{SQ7mcgl zL>jQ>=UWyqrcjtO_z)&e(P)t=DJgCuw|2oZCHG|pf%|1sgUFYSC?z}ckgs#E3n7+V zo3u4}dWE-$qDpEgLL&2Y&ZB^u6VxABrVQYkzp*monJ`g{$J=A&Dzi@W(w^T|jKZIL z25SK~0HwUabVq{)Z~3=O+Sx zP(^UG^q=|rU(c9MQka*!ojYCxrVbbz4kO3oSm#d8ziGMp&N*TWvbWh;ct+GzEfyVX zD3NXnW$8*T<4Ph8PLH}~bTqF8hZ8Re_*hhGaZL4+BU8Fs8u7AKDBek7h1eDBR45x&;zL^CL)JO8_^t|huA|&)yw>0Q z7-9OPr8h=iPA373P4z;!o2>%V2vHW?g~5mW*37Bxo#)GJtu?oUbdxt@nG>Z?90PR9 zIH4*W@_LXVDYBcXatgm{f|vRCmi(2S2bfSPq8%SxCtR8H#ijtb?cXy8Q?i@L^?PAQ z9INjWa%lbhBaAH>(7hl}!w@EEV?R`L1r8!Qq{lfL{rD2 zEbeLUj-@Q5@f(`q2Ii+%%0jq3k#STSyFbm3&z^E1)ps~G0ExG2inG>`$5lFVt${q9 z=%#X9A?9fLd>WJva_GmsJ!*#K&^cw#Mq7JJ>wg1|vN>Ubf!*J{jX|z>NN9 z)bc-TnN@o%Mn`5b3+%M74d>rb?S$R!9S(nBOEG|xA-aTS@NJ_%m{Pb6+FrfMuAfy= zqH9S38-LxoV_+n)2x3@)%SE2gSSMqVX1>|BOjHrqdAB#RzhTiK8Y3G1>;?~U2!=4Ve}AXgucIl-H?&FyXN`x@|7vMX%%k<-*epDc9=pCBxmSm z(b+b*C7W{lI*3+*bwQn-AqN*RK=wL23wKng1cl{1pAK`ay~ft)AD>9SLOuUFIRj#h z0J1%r--FXsv-pK-CDj%yIf#GPyD?HX#q^x|M}m+_c57~kZrbl14cSG_4>eN7M%-(MYB5K{TTBil-ID91F}80S-4}~hE`eEn%~=u=dM3d z7Rp~0T>FGtH2k~Zz=4B})Uf{8Ph0W7^pqAaU``md^)0)lWIS__av=oS5AO_}?=XY8 zJczrMjq@xue*l6cGr$%KoSp!4H{QnD(8@u-V3)N1I|DON9 z&fI_?l%NbZ(il!?>de{CeR{9#e8)7FKGvjZZ{2Px!W*E62D+3uxTJ9^Zsvzep1rt@7>X&qWZ-G1?~k;Iwe45?Y^f4bSQ63RzmjLK=m5swV56-Y zvBM0$a%wSeE(&P+z6sVaIpXZ)3aw5QC4XlVdccb=L_cWRnsO)Z_Q1Y2}*-__H@rI&4Ndrd&Ip;gbr@gspuY}fe_8B#_P#C0p63iF;KW=ZSEJUcg6r% zb-T@F9M4m{?dy^_9;1^K=dIpsuePVqrTbN35}Cju3-`rZ!!1X_^O0EFH6+aFv1k!;!+xEet${(I zqp=SXQ^MP1vcE4$ms=fr%X7WX2+fV7val3P2;Sdc0+Y)zU$*z(-h=^T+d&1gpu%NVW^CX<4S{`iDp zYYO^rv-YZ3;T4dgKKox=aPZtuTJz5k^6$f5fO<0hq@MpcPVoCY8c3zSV*~$9*u{VE zT_>oghudXlE?8tjyC=#BIuSJjDbdu+YEE?L$)qL9- zpLFq^K#?hinVsIW1UkRv;5az5yEf%6`*Fermc`@w#d`{B7{pU6u*8ZG*r^na_b}Pq zCjA+I>BAZ--{HdyLm$@j&gzXb)E8eJzYCESyo_b)g`Yw4`hwS(eY@1?bU@(>ob8g} z7w|U4q*Hve>9XygMpbW{spjx#o#8LbeH3$!F0Bp5stmqC)D6DigM7ze*bx!RdcKvI za@LZ3&ftn_f%dDvh727NtmoQk5eu!UVVIqlE&cNg^KFikxyQzc zw_J66Ly}IVhZYXkxdlwh&44#ly|@B?_vke^+nCx+#hX)L8TDSfpZxnqqtm7i>E6AP zrNKdSE1{-}pgEhD5MA0iLvO>Yus7VGwZ)xi#VBkf$xS*Ql@c`*Nz$>A|5h$kS^#uoL$Jz{}0@?m}qt&(4T>ys`XL z9ArUnD$_2cFjFE_pQ4w{j<9KsM%GSo!2Hx7*&5W4pZe)P*6X`Its0Hn6B&O#sSCx; z(Q1$VNjjo%rkLi;05MnkWPm>V|NcwckH(Gn2B5u#yWJ0L{=${m%~|&6+J%0Os=tcn zhyRU!sxG2n{^_sfCLC_1Vr*=AnUn%m3K169hb5ho{Kwz!uHjSGom#F@Aul!4(G~-H zlNc}}c@3`nC;0s@Lg40N?m=2uQVsKG>&;C+@#rPIml@YYbw={n^2U_=T4rWj^`@lv z91#>Mlh=Dz;#HUVV5lyVKO2sG*W?Di(o)fTMl>d3X;CZ?EYktM%W$@<&%&eKZLd)4 zXIM0q^1g|I?u0>&L^z|zl7lBG{)rPM`eESZ*b&0GiqcYT zn9e1>2Qcv?wr_RSY+`eGUwfm)()4zA)_OVJy?>)1EoMYO;A+mKoM_ zi!;e*aebo5u&!o%q=>k0dvNi}DP*tfNmd39d|r68KU^_ZM0lZtE>WJ{f2-X_R!uG2 zb;4&aRd33x?2bmBd@T5xGkv|hzc=WEMi%a$1#sYR;{dcdEvdz~J*q+#*F(RATkzb& z5o2zTYD`?t%_S7ktv+&c$}T-gLL_#~=lX65@HM6{%ItZtOF z3n3P)VJGH6Db3;Sf=av}-x9x_Etn&6F=7!f1AP z^i@?X^+k<;|2ZRe_3E}(Ao~2h@9%wMybo!yO$}PmoV>t^ux*Vr^x==(e|6O6tfSjU zbKTSjP3mnb;Epp4Z6ifcZLykDt%Fx5BeRR1H{G{z#N(c87xKt0@B~FK;f)1bl!FI` za4cdUlnZLJGeHt%hsfobCm}MMoQHi5}(3Y*~$HF<2;e}yCXle0*47* zvPZmj4rNli+-*D7oDq<04oJ+z|< z+v>)P*;~hjfOgN(71qacLCeeRBP5?oAMSAleEB_&liF!-VF$-_*7QR!U1UwsVq^7s za$R9vzK`Wu4@TPKe}>6_E}UxxSArqbJE`=jJLoP0LoSn>-?p}R&qO}XRZ=Cdj#*b= zdYvnl_=K7~l0uyHo}OT3NMB3wNx`OM!BCb1q~g6>g^LS^*Sw!vy{p^0`%?Ixes1QJ zy7_6zOdZ`>eP&so?f38gYw_{9;F8R3xHiD^Nh@r}vvn~h>Xh7}V9_#TgsBeA^!8V2 z$HGVf?-V$F+j{=)R&x`xw*I_*pg!kK!FYx@Y%LdJlZ;E?iwmmD`6ySP$~FH+)9HDA z=c9{bZBie19{oRh)qxkGSK!96qSn@N6V(vyT4LsdDtikHY$pU|N!TdFag1(y#^?CV z!wS6Qs)g6egDmd9mRM)>cvy0>y3#1?8DT9fxTlS}WzG`nbwIQvkBhA{B+&J1ote#yncNA62 zccUM?PYa5$-B&xpagz5~;mij?n=$fYxh3g?Gp&+R?zK!Bvi&(VC~OEYM`#z(_WM6-9ioAXynd!jS;Nm@xSy)a9zmi*xX3ye?Awp>yb z6j@9JeZ9mgjjQybX5aP^i_^C;1W_B;7bh_DRt4jeQJR8n3(_4X(_P2Td_i7A{MW}R z8!l@3tQ@lY!0+0%!E*0n=yU66NS&~*Z8i86y^Farw@E9h-cMCMCpI5dEH}GDzZE#| zE%=|g!Rv-BtSW83#Lw^cIp#|(hOZx=2LI^mYnigPTg&P8|ijV!`f=9w)lZ3j)ijbTf0 zw3kXT{!i9Yp75roZSNuS<)JI2gW7nVunFR$1mU9biItga&nop&0H8=ccJC`jJ zxA7^iCOW)48!Nc1LYr}&$MUU<9lC9+jH7j4AT`coTw#-yp6iO*Rq(|#E$Bwu@zFCn zS6po4zP`_?mXjiyCi>d5m9;4Rx~l?uS>@xgZBFW!RidJ^`{tv!pl8mFpHHNZw7Mo% zqEYCy%+6V6Ks#tDcT1vwjO&T|WR5=nxwFELVrD%RkU9OP@6;kl;koB<+cZaT1GL)I zat>P|U%1%y*`@g9PXO_KQ>KnTo!$qCwK&*TQ?=J?jZw^TFw{n+isY*;7R?~X=1D_es<81>X-?vTA$O^Vl#Ju!AD<&|ryCD=Kx?t*$ykFx_ z*OcaI`%LPkCmR!nzrwHlLJ6B(gJz9O_|$ngjoLiGDeUzQ@T^lwiJFKmczXI1I|uUZ zhLy)1#e)OF3UU^ya|^>|O2=3Yd0An#O6xEled@qHJsZExoE!NQ2 z1i$|4%2s=`v~x^(Ln8d)oo_KdT+va*I=r~7k?g#?$L7~%mHt4mXz=k`4GifZJM$tj zFurI`O*65)9eSo=L&%p9ea?SkwZ(T_&eA0u3YK~o9N=&D*ucs}-_pF<#CXZcd_#lR z18H!9JHpniUb@Al-ZwtN5$$~g;P@tL&wDd|so14$ z&31U)MZXesM-j+~&pX1r+H{R=-u!@IY~EHrUW=wRDUfd#@I@Xpar18`Mo=1vsx{ zK7<8byca5}x{{fF8G(`-)BMGR%su@>X(Oqq1`M5ReGXHZcNBOqQ-Z>!@+Rs<*4!3R zt&8$d6Yo6gB$tRG%myz8{RYgV=o92GoR>e@yTMlk2%VCiTgy^)Ne4WRf(I#o?$Y4d zl^aXlM>;-5UD9@i1)VPsh*`{9z8hwN|2U5}R7fl6-Jb|nSMRzFb$#l;_R;(Is+9@? zoX}Y%r95QUIh@Da(VqCJwDgU|h)sZwh`tg&kH!5_M^3b+$XpxPCB;?{l7p<^FNmGz z&<%ZEw{zln#H5)0qn?Tyz)jWxL{^557C!>;xVE@B4i;sYE95rs;-HB1vsIV${Sb57 z9qOG|>i0ogm}D?ylt^tyKX^#0&C?=frMPqKDs^$}Z5Bdf$IUIBD+Go=^+>Av7fv}S z4i>0erDa=5xO76lu_XVdESKSjwEn^}DXlORs@qnx^=97L19;#z)HbU01j+UEq|vvL z$Iy+y<89nG-Cj;iOmJzU&JG)SnydW!VdFAQZ*Y28rf|QYM9;90l4filWEG>aB5&TQkjy&-1eSf&n8ZC7v}^tQSklMCPzHyE%`P zKVJLrO+RypW*DYlrP&!eMHX)#CnxgI?b}Hkcyg3be)qP|aO(2}t zF5;8*#B8FEKQsFeRU`Grpi)TUy8LbCZguMv(O_D=Rq?_5m$=?DBvd~(DCEg(DDCn2 z1zTEd(+J0O(jx+WUK;>C`;@%{(hPq=OFSf1n4r1$oT$aw%%*7JEEsASt7uOT{o z5FSiX6{e_98A+H+|Ied;EHlB42#rL*uJ@+M$GrFOw$P3||2D-SlD%vq@>-;sEOeen zohvUqndOEPLsNSL&>*T(&dSSs*p#_{zWZhq0P~9FhgZd2`Tp}#92Z_)kb5Ld-h^5| zE7`tQ>mw1MKfl;EJysm3q}05={<%(M2A6+w{I2J3NWiNugKu+6oh#!tA*i*ce%{D_ zSdxt-w{Ldp?Cl0$1qI}%n8?Z&tNdq~byT_jQ?(8iK$UEDBY1$M(Vs_Rr0n>(ZiW0| zdClX2bDEx$TD7b4iM8jjUJ3Sp>j$z8Sr(JF)dF&`a<`yMYsC6&v6&Vnn&OeBFuXA0 z%gB+UO6v1*8BN)V9V~lLqnyX$3Y`@ap4^^pN};_MjTO~ z2YB@GhY6*VtgIYG=bO!~vSC~L1#=R4UkAkJEo&Twzx!HETEX!emh#1WwbbCqJ zHPJk)hJbnfPk)VAIupFZ)7yX$@TvThDrf=EDmi7-HJ=K%b=b|dF9uGJ5%2`kJxs(e znFRElVu$5S2Ih$j5S85?bwj=088t(BSAPCPkL=9{1aWTg1eDM)d83Or7q?Kg7b4zb zI}1=~aiUPw{mDikY^`r>ne+dy!&pF6;yTMY9wr)$(|<-{x!N@}MHCF~)_4((GkIV) z)tiw41E#9|7&_M)HcsD;YJgd~c5v)$*~(m8i6y-=@C(s-Ebsu$j#gfUzL@!$m&Y(s z|GL_R7hl=@4j;AKz9{UGjAZ{xPhj$xYa?#2PlD^-8FxcY)$B|(2=FGmhxw_CFiR0D zwP58EGPxHsY@dQUFpmak^^t2>0kO`KOO`a8TJyViv1oQ3Ok-*E*{@I}Sav`7UuuQ>G)5|GC^V$Iz%4AvqhH;Bnbc*{X|-Q~Ylo zD1pzDA!5o} ze25iz)E`);6B6_7=6eD;_ox@H6d`GLTCLQ0M|HAT0V(K8(Nw~ShNKvk#{41*9#4gA zc6eG`jI=&^$|h#3HbtvB~O|L}MKsQ#OLKt!S=LWM`oUJfmrF?Vq+LuK_ZrYEC5t-dLREcY_FFu~D zb#>Vk4xmkG31IhI4CPBox;Dq}6hBGDR@c_baCC<(gTi3_RT!x)Py37cwPUWmk?Ho& zW>#f;H+Vl!X8e+g)q^z1wzZ#P5_8)VBgxJ?El{V~wLsj~PSd+&UH<6kE?dS>c(N`h z7#To`n`Sm(@J#>5sCpkd*@S1_!qWLDyxBZ-&>wtr6R`&rdpHe_}@L4x{PJ z-pNwJE)8M_%P5&md2#wRo#^6Q9~vh2jjzNtGtuwc%X9|ntQS4uF8j>i=CaN_kTl1{ z10G(6j~o8NT8pkNqG3dW8?FR7kk`{kr5QZO+JwMPgaQ%M{9^lcCj=OoH?_C#1W~6x zj+XIL=4eSk-q2mtuF=boWaT@UrQdz&;q2a#+Pje_#pm+-PeRI(nH>AWK1AmCKA9DY z7}7Roylq?3r0&p3$RqvoN=3{Ram&>jGoozJpaw6dkZCIS;g}+1ZOuu@;#)R}(b^11 z6V`)fd8gsx_GsD8A2ed!HOdCYv2cNncbQTzue1@IP`*m{58n4-@oHPNLN2ko2O6^~ zOD?{bqQR7*?p9Uysz78L5(3feX`#5zVC@;!dgzOxY}FBynol^WFlW9f}lgCBJr!ibu6U!}-j zt;C_B`ivL$U(V|B_oWb(buc3fbg#W-4c)fIe8@CAVyh?`X2%gDA_n$ts&bMYo@&(9 z=+q=49o5>XJ+XLag<0~3;#K3U;v1}?cOYeTzh*+OO=-9&BGYCl<)mNFkRZY;qA}`{ zjf7g@LOH$q1H(!lZ2%1NB+D^8gF;=nX|p$ud&duYsQiYQqQvU2T;Ma=XDE8E0kB8A zOX%ZL8kB@?`{j!y!#+FIYmLpiR?KOVlxRa>MiKzScUm=*tNmm*kNw#uw&F#Z-69&r z7>7x3^#uDLl}<&~(&Vx%IxRgQ`G__Ya3QtahIwFI4_GfW9zs#Ve3b&{0{qh ziMX5htf7-6%r~$2vrJLm-aolQtb40Wef*(lZ7~9XmdC`}yLc zCsG{!@s{^ViD%!w`ZKxi*AlliSPurG%N4qsoto@)+fCM89GFYrjHq|(T;MJ^HrQuv zKTz??-4^z{&vg*Ok41a3%0Cj9Da&4Flr`@Z*IzID~UyuzF8D;0YUPLEVtMCrx&V*Kf;T zeNxE~%&QOlViuuZIk!@S@!HeWRF5octn`F2L;!93kGo`0`W5p6Ao1Y-BjIL01+0!DiSSk5x*CI z%7>h*XewH3P^VAz5`UP7-N!hSU1#1aJoH**yzpfB*0LBsHp$)g9wH1KHk`*K==`)3 z%5Z|THy}Vncz*jJTWfm-o~mp%TX7YzCk@FI_E~a6z`@OG`tb&6#h!iMzj}1>{nz*B zv1S5FD#KHKS8*+d=N!9~a%{rj4xIykLV;G>)+Hjs_NvlHk0c)!a)Fh~76EDd?nT(s zac)ZR{@v4~pg!lKdx!J;a}LE;w__8G71iV+1 zZE(=cm9%|oa%oX+8rO)APmewOXXxjFn5#W@bib{~_4`LQgZVFJK72pye1@R-eY^B9 z&On13o}pfR>tZ;;LMB^)*8*-1z)~0;2kMl?9m1z-h@!5f3;r1r)p71&$xD_H&8R5h z_Hov;t({iS8dFLddqR(j`YZrQpX7y;iHMT8rA`d{=PY)X7m_T!G-|c&RCc}_aV^Ps z_=2FA9$YJ#eYB$akjH)F>>L=U;X|e8n^2XvKY`(n;VUTw&;HwBhVj(?c+>rd)}mV>P8g{z6#6KW=W3hmzMY%;;gR9#ub!un z4kDFoaPDPBow=$Md8(Xw+wq>e|L|QwE1;WFXRP%JL{B%r=9Pbr=qO9EytrLUk`am> zW^K|a=329?g9Y?Aon`a!j%1#8ec?gLyFZ1Q31qKqN+q%_BZYYcgF^4`d{lUt%XsD# zuB5@POT3ley$h`96NVRjPVIF>{$9|LeQtmIsF2r(c`dM?jf&4Wfunm{$5q3=7*Rg{dTl#>_4Y5d_Im|S$gx68j@vk<6aSb1hZNc2Eko(N$ocYTl8F& zBdmG$;KL<8q;#Z~odaEY`31eQ7;%$2jp6R?qld!8m(Rwc@UQ8l91--&;wy(q+mef4 zj8%4bJ`hOueo|o6py$+(;#HBuBWZ{Hk0-9sUwAhrcUpH1q(3kgxDFW*iB=yWXE7ps3kZ;tU4ZtZf4LWCt!c}CW?XGi~u zq|%wC1)e0zbY7RX=886&V7(K}EObi`G&u|R&Ao-X_W3Nv_{z!kpQ!P`f%Pxu5V!qg zMbwM8c1MX}UdxSYWbfHPPKswM`1Y4IM;rz?`X^S}-18n=soR}EM8%?7qh%E6pEtT+ z6({Fb?s*V{&W`TheR&NyziN>Mi7eg!8bigjF^vjOEJMj}F;OxKv+?9hyqaBJ?_>6Z z!UVRz$-3Is@EFFA0ks3L%%A?PTYk2C-m8jmSWgwhiDMqSzCLE1lGC61)o)5at~{NX5_f)v?Fjtt8u1z!e_iiPfunur+%!MHERc!v$@F9CCLk2eDogvDRFg2+Smr=%x8(H-Z>hIg#~AnD)d3V38aElw?zcPe%!aixZ-zJlB_oh}+;Y`7G6U;37vplA(T;-3S?d`vc_?d_|p#8*JfX*f`i0qtB`XXYybfMvi8+W=BdNYZUT>#MO}s z9#DO|DK8O29Bp#l<6gC=6W66lI$RhZJ*rO~19C(XtDIvUUqG)~%eqj30XEw%{;Ey8 zkDH|PhwJ=yQ9DvMqPP*^gG0Fj2mf`wfQ4|g$g{zX%Ty)vy<-F2$<57P7lp1=H@Nml z{k}?SaDvJwr74wKuQ>fX8nso&%(0(GxXM(jm{Xpzp~z3KBI=U)6)?*094J>ljW-== zLHctq$aF~3rL}|Xf=U0v?FOUq<8n8IaGeP}7crtD15p&qE}4JvQNi4JcXHHhQ8{51 zfjau}T$U4-EE}pauKXPn{j5A-=K|KyjDIg@!w{d!;b)cFgCZ8UZj8B`eg+EBJpzcE z%r{WDqpH?bdWSj|IFxo&->jUTZFoLZuLWIfJHA(kC~ZT)q7*zdk_F56KKv!4EfeXr z>>jGCdCdxKNc1^{tdadiM9p;o%kRJhnT(78sqap4{oBmbI2>aIq2D><`}qD5SNf4w z(E`A!kN?_JjxK6ptHer^v)+zXo+rhYzlqU^7}yl&?aaDEY+UB4*p4}TQ9|;`{woO| zl|?bq{ZjETXt6N&mjo9v+!h@>&dmJH+=2vb+R`__RUW!Osu+J;B&*?UM57bXuzn^x z563NHL9eCw+n~_fs#i+z7Z6vfDJfE z@bcz9(Hgki>!4n^v~%0$T4B&qa7=TDN&i&|Uv+0Cp*~oB=XGsI&5t?SvD~PAt*dnu z?L205q2o@jQLR9s# zWVXF+$F7WGN2IBMNLPxq018Sk(xt2PCelj?v4TpIE+9drcj<%{5u`&z2pyud&;x`J z2#|a`I_Dca&iRf1%yluBO0wU**Iw&+?zLWL?pR=^g_n(>V}XNe_3evyoQRZ4(EZAT zh0>-T%m9Al1fjpx0&U$A;6*4QPKZ$r&w-+fCj97O+R0_TW8>o`HwX!MjhLlSy1VdQ z$%a2KY`=Hj+H|kBlOfj@xLrRsyS95^6ZD&4j-Z2sKQ!2fSOo-I5P3e~Y3A-V{;=tu2VKhT@T+Y8t9 z)K)jo55;r?tww2CYC#o~Rz_VcI={YNCbTYGtPL$c3#>CB!xWR!G4XZD;W+Ut&hVRO zRbx0ALnr5t{dA;kMtx}ctUqUEUFi|&`O}T)w*a@3Bz_S49-F@7nLlW)0HQ9$xlH<9 z_ED^6^~+54OlxatAmN2cq{ZKsK<~^M!<2y!EC`>6KBShJs&oZADGngd6lrGd2k}O-Ky|Y z0rhPtUOx9wQj~Tw3_dejSep0gi&70c@eu#OMG_`-t7bLkNvZ8ZJrMo3?;=`RM-=5{ z)tG%ReO)s%CP=5Z=7vUx>#q-lc0uduq=dQp&CfYlOyq57mpEa%&MUVt0;ad&AhwO^9)Xgo1bb9nst4>JV8V*H#6K|DP=sRhujjy%w~Hu zVJI0}Joo342GH^G*7I*4EU4M}MEY&$JRc(6ieKGv^|NJfPbwDz3hv4ulxb&iM}yl_ zBVXl^t0cE?!qV@KK29%wN^sIZWFP#VHGSt5f8Y~`2K7J%j`0xzrRtS4rXjENwfg2H zt%g}dKN{y&F9c7VR3GRiadbQGvhR6_>#=V20Pw*$QcK9s@71640BU6o}rhL6sMrI-b{Ar>_9efv-YB3t^I&8IrXi z(DmZ6gUFQ<6#$XsK&8y@RdX3q+&qGVJzvZEU+57QJOA@96-Dp@rG0!ONp+$yGaSe# zQ#msagK2_x8djxbU%Tnk?{dc9q?}@%5hL15SA9_Wi_0HUm;%{eKINBO`Zg*cAo(-A zNl4yV;=4mmT^8QDY#HaT7hHP5^ua#3=g+r?SH0T}dHJBy`fdPZxO*SEUPJ?Q2Jz}K zD>;($L$3S2R}0WCK1G0g$0pg@vejk>GrEU|L;@Pn2tYhWfh z4Y*WHrg_IfxKtE050h*!VYNn)e-lvZvw7Zmwsv;W;K2J368(^lJUF^|gW=<^JgtiT z)}0DYR2)&3di={*_H6XdGsq3e?Ga1xwTd$FQhfwjmy6k4bI3g9^xc8Sj8M~=8}CdH zH@kk?v~_Y{-{0usN{X6O;P`2CEd=8ZmYgu~P%o+_~-1)X&Sj!hVe%TQ{3ri;XMoj7<8V1*3fEQ;J7L}u6feIN|fWKE2 z${5s8YU=ObpU)hh#I)k!F|7oLq6t96Sk|g9(SrD@f9AfU0bz7qBZ@@-8SL0XTBn8b z_wW6mSbzw{&5MYZr~v+CbHyPJ;P0B(Nq6-`P@tURxX`Pl=TTH#4i8w>_+B^sbaPAd zBk*b-ItuES^WIg&-!s{B_vDN8j*ysa=ipc?`jjTHKI1gXhge1T;x+2X?BNq9#cUgi z1m~cMb%VkQ6!7gnaxMw^XbeWpUW=@=0$}F+*8cmOm8FE0=Rf5;rP-kFYj4lh*6HE{ z2}`I$fo@~TbLo8H&Z=vX?6lOvXfr3*DO?|YSOmZ0m(4|t@vafZG})gF#awha86FsN zs7t{#J3-8Tydpkt^My~R5CP!P3q8A$_;3-Qspo&TqnYuIAe$^ph|(Sl=bk)xkcqM+ zndGO%fzE9osbLcvj!T)x7O!`@0$#!irFYt(D~I0APjCjCOQy^*H+g}Af7>1a`7_(C z=nKYjyhF#NF}7pmfK$yKxskmiEzy|<3YX7R@5{=&0j{NF=^<17&Wj--_r!fDigKG zi_%yfX8QSn0;6W=MuF?}+D#wQm|WRz_oo9IZbi0QqUS5LV`N|PSfnd@_GuQ!>P#xM zj-jpW>7Qg<%ywkd! z7aVowHhWKYWjn;vZrp+51)i5PB*x10$jR%?$!JRzzq=(OBHq?Uo*o_204FkzSFfH- zB!L7%`R9zW-mSRur|r=b=RHCxVP{V29HACBv4^`Wo@c>fA8V$xf~JlEM-!=qU7pqR z^fxmY`)HgrCf}0g&r;qaqa_-$$6b*%iUB~D zCTi#ca3U2|i!$6YigT1fX92!1_Wj|Fe(-xLf5P7m{rVV(PlE4_3W+;)F5kJ0R{qk6 zEa#77w6N0)JRBWC%VyD_F)M(39*AeogCQKlX8bGHSgUH^UZVz$+lwH_q_yaoGe}D6 zLGUgX<>fCGChNp7SMKRY;S;`R5{yz)a~ytl3~4I3km#x?sw(JlE=X(nk z+{0dh@u&Q{@K(#y27@4g8M-!BH@gx?z2hd0f7!Sys~?lnEEJkY&jpJWCTHW)+$w<8u%*;{3u^EZ>*R9nw*3KSS2 z-2Lb)jk^4P=Yy8=j;@DhiI!rf7Q#?{7bJX$1LPk2#974k8&;9m8}(ZAjaw3hAX(b> z4wclpJ=Qmc4+G#?<(_}F9}!jnn#r_wHo8M(+f@F2`wirQYcp$px8{M^3Hr1aunL^K ziceS4SQ)-lGm7#|d%MHZvmgEUJyKc;m;}9i(FNI~u7qLbWin{QYV2`UR>=*o`nWeU6I{(k z6`UC)nfy1`w7)oTUZ^p;QWYymYqbEZw>`b=R9G?>=f5wIlUFFtH!zGYa@s(#^+jOU zIFNfHWaW7|1l}4YoUh8M3J;%VeUo}4C9A@4`QQxaIiv!Rp1)@y7MC2fa#kfk(^iG{ zZ$$b5Zp17m%{z&OlhzFw+cVLkiHcFar5jz()uW{EnHUu#rlLxBZTKQ!^aobfkn6;V zm%8lVI`x)Y*(M5?l6N9W;UaM^9>J?S9#h0`f$p|{4YKphXenVp!L_;0;Y>-XO{)22 zdx-qTyc~RmD#rkXErz;QdXj0wAIf9@q~^uA&pL4cdhDceYRD*cA^n&k>asZv8qTW{ z(2z@0a9`nIYP*CUa{|GLEKIlTbo-mvWqJjB+>c-)>|iqoRUxg7asBE(xmxmR2YZ) zDZY@{IJ&zW-mc}lSKdRVekX`ede=x{NRptYy#ibBn+~U?i-zwxt`R0HBdq|eHmFy- zRSk56SvD2VS+T^;{yaZVr&U?A**ws^@a;?K*3GOf9kZFIcV2lfnEqV%01yJe5ZjCM zdP1H-b)dY|x|@jLZ)_S6Lu`KI_=785>UXYH5H}2e<8*-g7%18QdUenesF>gR&Thp; zzwsczVkQ2%r9p}bNWz%QLwt4jF8q`;{m(zIj*4wwS-;Fu3g9@3g&Ze)Yu^@-CI4n` z(*EaPUCdBHu1-FoDZ(vZo4-XwTg*|wbJ}JE{PWrX@(DDof{K3R4%0Jzq`P6nw;=1^ z`;`F!r+n~{atGpC4ha{Vp}yuW52HB;eC&Rrh5qL!cDn(HE4~``f;ynY4giRqL#oUS z{$k-r_WoBl(f|6}4Fn)60oU#!Xb8)hDgziuDB^?wtq0A6*r4#2Qu-fN`k$Y+C=>eR zjZcRPXV%pYFt@HhFwKw8+bTKaqpj7SA}i{3;5XK;14t>UP;$x8MLxguf-d^kA> z{=nav{y#rOpq$-+$p<+e$bC8MtbX=QvZ5243u4kz++e$-FTxMfcR*nMSHz!Hff$I0 z6f1$kF30<#Iw;F$-@~pOuw0f=Ll`G;0w_o$&~49etVbUB6soG(wC*HYn!C&x&SJK! z(=fd~EQZz`oob~%;4^vfH`WAr|7AK_ouD7ngvWqClmT_5zuJW~WbayIV{|S8fU&{n+ z=$l;*fZKZP9BZQIW}jVn^KH@D1p z?RbD_ycWnTd4KV9CtTcrp9yr}>)Uj^O9LZaKiXOCcbPR84xv&lrj5sgToVBoTe#;7aJ4|V>C`cf%9uKpSH*sP2Eg3mgqVx!1jaY$o3NxoSoXAXl4G$Lb{K7*_c(?Ij0< z*{z7#p!>p*x5R^=H30#$0gL1ea>Z&W+h@R{erq(HgHE$N-V``QJhVUWCVLx8>CB@8 zz_0qyI>mt~%l20kk<2+WDl17GRaMAg@&2|Sl^iCcw{_2T&!|NF{|Icy(PPK5C-U!G zz;56Mb9y zyQd!l6}HkCf`#HopsRS<(f2_x1vS=jF|t(BgO~Q$4=?uy@+a;-1}w=3v4uh2dGyov z*L~-2Q{VIfObNNUNvH6-vkc$d@x&c`N?;0_my0}{y)vi&>(vZI9|r6RnjW&;rfR6I zZ9muWLaV!bm?!4~M{iRk+NQ;-tDM`$0299o=zm&kH3x6HMm%$4$){b(ZRUna>BCj+ zO+ud3SlUOv0l{M&!m2m7p!BT1nbfaulMOcZ+9tPRGHQqS5?E*mt2h1LF;I=Y9GP2V z>AF-eIMrAyuh=2e;M}(aW%hdAi8TO>0L}GXjAZ1ieLAdw0&O;+U7R8^45m!{2Vnfs z@=f#XshhKRzjtfa8c)PbC=V#PYravqz#FM;KVD!Xd;oFf=9c5D%8U9vPEC<>L*)6! z&&S8ddz!ykDGNC|4x*D+)GSDVSzPU%@m?4^4*9@!zq`7|>8(ls^mhfD_JK8k{H}*` zD8@?3JiL~)_UECB9B1qprk!F+J0rj^=aF%B-ccD;*Z8yog`?ddO4Al7Vz_4Cw%mUK`EFE2Dcr2z@D zj`waP?y_GYLqmJD9n$HC@4$h$Z2@2kY0{8RW}m~?tEgnZfRLI&u1n%&k#9ODSpCO4 z$GnCN4Ek)6U>h@Kc)PGEXd4G0R9i=&c(+&n8;Dgf^`lx2#n$mT+aP~yWpK4vk%f?t z1jx{-MpQ^OagbE3$OiqW2mZ$%KoreiZcHq{33%X9Kv1QvE-aowESJNH#_zEE3{H=- z>88UEY5Hy+NFU0g{f{}ZEEVb*)7&vH?Kt%NH$(<{#s#;&J1~;hX2M*mzt{W@(BkEA z0g;~CYoF9gBj!KyPAayR$wvS43IfYoMf4!7^NTml*-JnS>LiDFrGPONV19%eE9`Rd@Kf74XZV~KD!AOH?`XI%dxJb$TyT`L9 z0)ULq{f)RmbMK@X(JZ#qx>^~VM3(z&FW=S%`33B8B8p0|RHkzxsKB0hT~C0&!`A%u zQ#JWdx{j44dNa|*kDWMHzr~{)QvNk_sYYa0u!}Q++kKP1bNQ06QLf}Z{H21CzW~|o zj#9-LVE$>jO&p(&h%n;~2{Aq1IhdJe7h`@U)=tdt)G)K)achNUrN&Q-?+fl2tvQ9w zkYNodJ$#sNQn!n4*GS0gBNu3jthyIx%PcsZkP2;TDfEN~g=T~)=;uPn?g6{i7dESO zz~NUcYXsW`lF@4hoi79b!NVuxVpmw^gn2BLt}b%bJRFdmWZ8Mc>!mkEtlrJ-7@GPV z?2?%8KcOW!E^+uZeeUd~7k6Hp-pAU9ds)3YFnhaE_7=crzBodtpc0#}xJGl$SC-?# zmlqVDlDpghiVOM+eu5&r00H!vOR))zol&yZNIb=BY_wuLeTHU*aG9U7`$i-iA0I#1 zNMaoC6FZ3s45RNlUvO}CcuT=2-9`td=v)j4WIXxG0GAj-S6MbkSDS)*zztbe-&Hne(&xmhpoi=h=51&p8IZGeg z8ESE5^2L6}*)t*t7L*X{Fa-u${r27KTDZQjs?ELg)(ug}%CH}PyTO=` zgF|+XSvC0%8}?h*-ouB>v0P^_YO*m^0E-cI4v`S)P0?Hdr~dm-UeyfrET!LyyEX)8 zs)V7uA>s3X~Ih;OG()ll8$tpU0Jh4FrY+LPcM=ZHN^jGgw|QA8h*+BZFwcg zFe1u`7xcOhkTJsmeKDf-{reExAwI4iF+;wZg&@T;qqyk>Um^R9=3GQN8W~#xMDosn z(d>LykeBE?<9y0iU*bG_9kEn1eT3r6vr>i+dNFFBpH7wD%g}gL@+<&rSZZo#2nKlNsDLj z&sV_ZdL}TJ-1He#l)oJKs#d4d$ByWFE^)@5I>bDODnWl!6wJxX%h?DDVq@O$GvfaIbzQo^y3p{K^~agZgE6jP41xRCVMZ`vX@~OlYr3E1 ztPS#l77o7~%^HuDZ4to&(hC9OHb$65ruu-cAlLc!11ztBgr9J1I72w^Ip~*5eX$-U zlTffl1Q5!5n7OX^!r|n`kawY#XRPw>bvX4Ky$yL}K)+)O&6rG!1O{VBIrTyR1>~;1 ziN2FQ$M>3utgO=sFdmiQID2tW?9%m5D-9a&=NW2uZl3Av5-W)k51NL0{erAeV|Rv2JNOt_GtoJ+nar9>-Nt@RwN%TuhEO@}Ujxn8nH>y;|6s_^=$wn&XxNR=* zfcULaeOu}4Bw-(YHT1*N8p;MydS-tk{p&iGO4y@1H`48Px1pzb^=`!bj<UFKh)*z1t$L?i z=r&tSoTP$z4kj{P)yZI@*GRJB=sGKOj)1}@oJmiT`TEjL@U-vrgP<*hwCrv7a)9c- zsM`s4s6dFG6gaBC#OSiVxwT>4$xCA&KfEa?1njQqrJhG2ZIYzc>USL$x5Y~j?0j(W z51#!XpMD9x&(n$*ycg|1TaRn^`jF?@C9{os9NN0?8!p|?8fOq^Q~SY${^afIHxO77 zMYvR0Z$;+;qCg?Vnb)ouqdUGRHuJ}`ccThUTXiUAT+fU_(S&Soy{*pNbXcVn&1VEf z1GRP?hxb_6BTuF;Z?d60pc7mlXcWBo1@r?BmpSQH$XLGm0vh7S&nKy}cT_G$+!SVY zo%;3%dD#8b$s}4XLTg7U_m_Qbm0!IoLkrN*sXL0HU+{s#bN$)9HDo8~KphxBl0*9= zXpk1E(*DR=xT1L;mfqmAGq$UOP#gXS!`eN7lSi&flgk;&u=`IbyI}skr~oeMnW-_G zSyJsuGClKh5Jl7z_u(4l02#YW;}(96B?>pj#_U!5^@I8@f#quF4^QO-SX{q-3Is2A z3!?^}U^pbMy+vNoCzD9vmYIr!^Tj{KI!$AJUqDj$hq1FXU{4{ z3+#OK;MRMw`p_4qe9sQ9=Dj(8erE*8n5#*f6w+%)lh?anHCH!V3gI^(cmfQ~5kBfYauI?J;obM=-z=;?H ztT=!zn87d_^}*q>^_s(H7&(sHD7LVWxSA*F2^<%5OwL>IaPlWB;IrHPrxOFoei$6{ zaf8&@yYNQBI+k*^P|f@Z#;&y>A=-O^wNf1-wkS&_%+^ux`P3OgS&=~1C>ynAYPx7M z0PfX!mijqpb5mGw0G$J>!W|Ew;#VQg%NeTzVG_=tpC#I?kf5`88*}erbE?Y%VZ8G4F54E(qUE>8#0YkB|NDpWYDdTD)hx9MclRimiG}aqTe>T?dIU5qP z+ao)Ja~X4NuHb;)v14WevJ~A5`Bic3ypSY9O8?POhQ4b5!$;7=7G5DZ)K@Q*)QXo) z;#MFkX&p~T@n7``LT{38;8&O~jc!mL?;PF07a2&>YIy0>qdwI*)V{c_ePpWp!qdmH zTN{Qr=@n8@2TLcZ4W8)U)XcRpgHih>|Yprdj7jq>l&L?ZESky<@i<^R#`4xy(olkHR)1=J{s{$@Olesb}8z zzCL3Qg=|u{u>I*2tSp*|T1F7?pK(MTH8&M$g5&qZ279kXQMZf*$58Y;c1VY@hs}7b z-tea!W%%<2 z<%@CiDtfHAr*&mdrz@46`xtZ2dS}(iU%upEX1H7$A`E*H{U>T(g6*7m8V#@Q1aEKdX0%x)&oWYHs8oul zK58sfsxyJp=Z_s9&TTG$HQJh$rJlS$BikV}|FTOH|AIORHeI3VNwl#R{qntjeGV__ zSA0dMZb+>f?as}t84E`wo$Jkg7L5r@Z5sLPYBw{A8+eZE0P+RpW|TNbYf6Y(7pre!q339|nEe8HDPv$OIF~ZCt|oH&URfRaEcEk=I3|n=?hpeo^*Faw1fPi1e>azMe#7!jHEM;DlBVW!~T& zvz*yfVw^`d&Dp`jp5qoemuR8kjRWm*<$|rF4yDn?2Ehwt$mmxw!y#xk5N%58aCB?^}B2M-VK zFQXn6NRo`KiU1Q6pI{AwyZHi~p-j%hBl)_5K~qD!ge$&|+jYM1R`sKpiW(t=n5W>r zu!9jxU3FH?{7b$;@9AaQNhbMvs`8JWt>enR^!4$@^_MI+Oqy)H*=YCTJVTBC$Imn6 z{_}?bt$$Dh`o;2@8jkhVjl0~ugn7OdeV*(yoRBQJ5r07gR(~P&m?2Q<=N*VuZQNa? z=qq;r>eZLQry1Ur$?1@S5#Co!Wj6WDBeb(qYevdytD>`J6xQz;WI`5iz4&uOb2k^F z63`mkqb?XCQ~@H%kNJ0dmYDem!@WnyHuBHaKwtqilQqY0W*ohb#TWIA6nciQdMhXq`H%wdmc%U70br4U#(b zgxM`?mv4dKXX!H_EO4bJGTSCbu~ARO=LU`sjb&|bKW{Y=vfRFU*Jp7_mr+_Gr(L2< zvv^}zSg;OBgSd5zHmaKiO;tZKIF#R6Uc8p z-f=TNY!+!xnimTeDjHZaR=G(gz2@J1@WKoVts!0^P^~faTk#yMZKUhlR`1f5j+v+`%72oVPv2wrqHCZusHu#a=`Dzlk9=upW7$XohpMysOFIN9<6Un2b7@DlrfXwPUfM9R znX0YEz^3|s(5Ke3F&loxo*>)Q)%pfMq{FkMtfy^qccBvR*nN7F zTzMY!y|`EFR>ise&SxEDT&mJL*$K9M-q?H^{W1qnskZ&>TwJH$*>0h4&32e$Ck;5U z)LZ8VJx{b&vQ4ytq-z3PNAB)03Wg84^^jw}Me4X^$Ea;w%~_S~7%79^R)xUOgE6WD z>n4ZCFQM_(4PzI%yv-~IO8E2Bb)gT+5Mf4XW{Js?1|B1Lc!VI4m|mSMhqpb1 z%)DvD9Y46PfmjRTt1Ea?F=mpKtI&8hwNWH6Cby@hz%Wf$g?Rnw5YYL4uO3B{JesC% z#}!;M(w9Z>Fkzd+7c*YmlVD=;)6`Wj}^A}W8hX>o&LEQXb%>ow#(dt3YLz7?*eiTjLCi&VQK<5NuxCvsAU-#&fy zgvSS02k~(9HLe3?kAJZ9D4p+&a2Zm^pG z155F*H$oyPIlJRr z_Pu7OmyNr?i&yH#J~TRaI|C+282ydi18=i8aVv`4>wCZn`n1%sJ6_EC#d z2SJED@3U0m=<{_+7fBr9Ff10*NHb;Pq!liUyz-Wxn-*Y#&%74^fqLb~?Bsoa`LCug7YeZuO0p7 zv+IGdtV=acirU!EG=jZQDnm_%Ty@pVpWPUE+UoZzWtC$_jtSBk)Hko}(Gv1kc(Pk< zKSsC(Q@5`Hoe!Yuf4z50(;Er9B*ZT%LD%bV9(a9%ClaU7(!CyDxY!^ry$jm!wB))0 zQ}&%C7tIP!M2GbIV)6XgQ_Y&^tOlB19po0cOj`F*wY6MF=V$wYTpy-E%P==s)jM$& zGb0=@3SCTD+gX&aMhfDF%ohU5tMAnjm@_WIQ-&`6cP_p5rOn%i_uKXxz?w47F0rw_ z+vWZ>_ler;lbMMSE^TZ67cn6JrhMGfYGKu%<&B(JxZawz<^(}#KV9tU)ypE- zd4NOYzq(`a=B$j2;yIi|VM-js>n8^^@CbJ{N-nUDItzcHq1C1i2UJ;CDaz{GJz)Ri7k1!8^mdCh z2jyFpNbG%QDqtLacKzw(z2&3m#2-_uXlL%9mlPBpCuvn~`Sfn3V(h~|pjOUGNRca7 zm;&u8kNn18KZ90PnVooU(`EHQ*5Z$Oo#7l~Z;KpDT)c51aDHj^6j<)>*Wy1ugC3Cg z&w(TcBx7X~r|udsigT+y`q+k+1WeGse)f4Kh=Jdta?Ngy@difE>c_ht18AF&npM#$ z&PTt0X=wdBk@P*01^mjdyM7>)hG<>znV)y0)vy9~xbkO--(GfJTW;!_*1l=G&@fW- zJ0HUqVgTl-H-p)zO%uoEkv@+S^A4tmK@uk#K2OUIis>cYH``V|9dOag^G_()%g>% zsnav&A3!u7$a{v%t>@C8UKI7R3pSC_;>V4w`n|^uo@vLt*p04wJ>3Osr{DcA|0-n} zj!Wt$jmr}8u(<>9S&`WAu&H#Kkac&eMd<7XE*VN( zZ@&|miEWpp!9YN35WJWb+Z}ucystxul6+X}<}KPw4bGCJBi@lJSucmeI-&9Q9)A$4 z&5AA=E%;nC9059r5Uf1i$3#22yE~oAx%kD~TSy#z(jczBOHg{Xye55h21Du%WS!~4cG9ju-lfe1AZy~~n+vyS z!`2-xQ7rQNn2ZF_)e&GSYT`v5oMQ7LFY=WK5EcercGkLL+V&f|C_aKz%IJXleA;`S zH!C|~JpHRH@{V4W<;1I?rT_k{f|dN&_U^t9K$tKwtUAOi^8f1rf|nWyFybcOWozG` z@Z}-80JPM%dYyeNSX|2S!_!@j45*x=Kq%H9T~9YZ^@3V{gr!WZCX$^oP83Kkj+?zz z?+UZDN`YR8Gi#30BVCy8tq6WOGOt%_^0YnXHsWHKY@|SvGk?_3W~lk+g|MM2FxMl} zFHW3S8(XZZEbIl?r0qclC~75pjvG7Q@pAdvbQTnz5iYM5K$F+snyz2%Lr^=cGM!k| zpVthM43e##+o>j_y|3TO|@a+5C|E=MYjN{og(hEp5vRG5Dc zYJW*Ii+fm}<75@xWvQc-$BKUL*Ql)v^U&pK9Wugu02?MtN+!^D=VFs%&% zO+bJ1ruaM@fe-YmBAM(Q?R)Z*ty572+={Hmv3Vr%1Q*ld;ANBRmo;F?@!!}kozqP- zXG$fVGAQud3iz&AE34#P@#jyJyQWp`SDAck;Z`EwA7kRH+EG3t8>`uV`hJhbmXIwhZ~oK9Kt4HI+kKCZbw);-dQSc8sz zlak9HX*?v%iaKuU?UxjZ`IObm?6U%1mg7Cc)>uk7lQ=PC5hiOme0%i;mio5WnT*(M ztes~@6`8nyR8G&lKPQTkU7nK7Ea>fUVE$Z$W^;FjqaOTeak|Xb4K7RFr0i0tBH{`A zhTXqpQo-4Zq^y;J`D3j2AZY4UfT)qrBX}`6;{`y+B3fh?Iw=-_QLU$`-szp6Kl3pf ziWY7)9;21Q)#hZ-9NF?N+Jz>!!5%v+oozkHs^l@&3ir!E==s;>9zdW4)$vy4ONl1y z3xRj53$GfyyEge_t8F4Ipe*>ZBJFw=N+b^7HOSO|qhoQu z5?9d)NMsQ1zNf7ZoFyprI$Ihwea`*s{*+pV^*tiR$M>lZI^PDvd!)ub9tY3=C}p!( zI7tjFBfk`(>JR!e=(p^zSJP36UCuW@Fw9per1!yZUY*2JMHel{d~T)Uo8b!{6i$jm zNF)9_FM1k2eQV6e{mF67tu7_B4eJ1HF)5EX*`=vvZEGm#9eJ>pQ^B~Hy1a4yr?KEYQ-U{ArZK)J^hYuPMl!jEumEPlxXlEO5 zCW{pk+oq-TxtbqM6bRK4YB2u8j}NInAh}~U^uql{bN0toawx=LSp^-Wu^2+Wb+a*k zqS*j@O4(5^RoC;2%<8^mpo)eiaDk>dZntE$t+sPN=^EL9z5(K5HMV%^)-%($Mji_x z?Gj{3^iRtv{ubTL_1cwee(Loge2N6tv%B>8PH@|EA&lR1fq0xt^b@Py5@220jH90M z?rKh__EYY5m)C1!OmOl@ONVA()W7XM;uP+Z@vpN=gi<3x9tZb`ce4%3W4(a>h8jPav-vg|_ zZS}R{C{oU8R>WN-+wV?qR%xhCc6+8%P0lulV=X|KI_z8v+%Spx>!`y&zBDLdL+)~lGeLc6eeH9N>97s6cH+2V=3&i;5}H|&Q~dzGh9)j4Bn%p z8en$qYGa;DU*8e%Qm?4P&io30+dkf!Nyjy(p=Q)tbMx^Dp?L+`d`h|sZUo-J1@*8F zB|#VpN|GfC!j1huK2Hy(4C5(Z6(NnQb8|Gww_4iQ_0^EC^Shc`Tg`-c{aAw{rjvbo zb9x2(?Pl15Y~31a!6!`=511>};XDS?a)7i=>Oq5*mlFB(>pIC>t00cl_Q@E2rO4F+@hsS=5$`5 zLFGSJ^#^E&IPTG`z%l`Sk893{lQzlnT3Lge69|tpbbAjEx-|6T@~4J3p6nQvD768w zEKE;06UQGC-iXlXx+8u$)#yy+H%IqH7M=wgYfOs`u)1jV-jce@sH{vqm+I*8?OQKL zY{^7RtN-GxnDy+*qToh_m8X<3xp5bCiRE3_#yWrj(ejM%>d<0n4Oe2Cb)qw}sj;X7 zyi#Bkxo4OWy>HJriRsd29sG3{o+6XJW!H1Lk;q6%z%pNc=^Z+6rwDP@d)fugNb~aG zF)(FW*s`_kMnr-+Z@c>n>qFnO=Xulh@%fZF-Z*K9EL7+)%Upfk=1wN=2x}#7INDIXHxCi7_>9)h--6-2332(dM|HpHucL;jgd{zFb zG;gzhEE+!8ze}LH2yaM5xXNL5IyUM$t2HIY-`DjKnCUYTm;B84?b}N`&64kB*5v}K z2wI4gG_SQ9*1jhPCnb;`%NVg6%WbW3zUHgS2t4r%ucXZoO)K1XH!y(OE^lA=DN}k# zJkKuJ=4ZYNbnU}yu3PF$g)p1v-978pgJRnrxD>@@bq~)=PnApGKWJaqm`@3=a{b%K zAjKhgLtLzh8`!)nvK8p()rTdPm58d?d}-F{0z7yZ9^}C=CjvkF6}b7<_OFKC^O&*v z^QeyiNwfCbNzg`N3*nsF+l>)Zc6Us5^p(|Q1>bMR=2J>P&nvHXMBq=Ga~4e9v$a3g z+?E&J&NkV+;*f0lfWFjT&MQ+tlW7d;3Ei4^d>))Ba`GEVxK;bM8FqL7L~? zq~2p_(9Ayfe5vX!DhaNJQr+y`BFsJP3dOrEe`;ibe_4XB)fLPzRO{>R1_};$B^V`Z zAZmQ>{@n~SGJbUc(NjGj1Ku%xH0H=n?Tu03OaMcMIgwBOu1Yq#qL&G@E^X>2|j zS@%is{VZJJr!bl$IOfCa;h|m#b&i9q`&HoLL#sb`zLrR?A^#{W4`7g)tMi%wY90bVa|NN70Iw6C^Rc8$a;CYsR+GQy(B92aT>mkJ2JK; z)gGkKCN2wRt=EW_ywV((%pG zTH@5EFjaI77~50(VVaP6IC>V|pWP! zMt&_m-Z!QJ*=k~kA8jK&1&+Y{0(gLeOXA&b=cMl_JfSJDG)F2dPqj<0Mk?v~w7G&l-J?vrg zgh6><;&LoK9#xUxQcu910c%f`R{ zXyE2*-|>nyVOh%kF+2AsSjy@%bK(N*qjN~3>?<3D)CUyG{OW6$xr73+tFBRN+09UI zuvS4~(lz)+i?CTJSxb?{!un5I#YIDN^osQ~Q^VrU2+;KZ!og86B}RK3Ni zi-{pq_TJRwI-jO3vtD==0Ts@KU$~K$X5QrK90oKasjPU## z?g%MXrHF49m1qynf$SHPGx3DVM9zqak#B68Y2Rz_AEtFxog+lHEQyLbEH(FjfxyPK zgN?>7F%Mt`&-RF~(pyrmQP_w~-u*8|8WZnlHlmneD@#0&j30u>?BNO#%X+u)ruDH^ z{n|}NF?JJcffq5HW%aF2B+l03=oF|xL=gZO=s0BxR9aeLsLh0~XX+VIKzW(1ZecS^ zxKK8n#K9{KM`IrEAIm?$KwUal3R*^iZ?#P`o(H#}3Jg}1V$;(S<8;H7B+u>o=>#BW zvVkU|1unnq+QO2X7R^H2a$2ufAvoL$(~{<>#ENBG1Hu3C&QcPah~KBn{_?w^EN+`v zC{ad#YiBQ*@NGMQIDsbNK0G*!baZ?+A_aSd+v+f5<_|Jx0568)oY|_t)C@CSnV3r5 z{kX1$c+6!cEwqa^EM_s|;QC#Mw^i%+@^WAT@(XYdJrv$5`D_ zlM;^ud-rd5tRIlKx!pc_W!)aVKoXmXixswNsk+E0{w1!L-L^g3TA^tSoz_ZUsY-l& z!am`B-ji*2+hH)*pKjj^9D*wSj>=hwCzE{Y6iG6rXhTJkWNGiYYUsu&eisdi4Dhaz z-M2d6{u{;B6YOr`}GgtLUI`5F$x8XmJe6t~8t!1HiBLbB!N z%6=d;mg~|V$*@|$Y+Ug_MHA$=soe%-b?TTZo{a8RRr8AmFX((bhmm^$Lzm{^29bRg>&+}8q_lV6UZAx+wi?%a>k2HH>PB*X ze>f<(PURy7j85@|MbGMQeu?26i{#6;4qysPeGP-Hpz|}UTz$)B*e0wj9us}CP|4E# zp)|*K+ZF|KH%7j~UR1EeH8zZ#p4LFv05fQE%?>$^Ng-(tDC6bOrAb{(j6F^5p%osQ z=O%pZJc%qD_H7xnm5G(AmbHbakx=!*B{uvvLF9uJa8vj*yhqT^^*x|qG6zD~=L6s% zjw0dWSzcInf9&j{JpFtzlnBZO{-r8{V_ZM0W&gEJ=^~E*7BafP@7_VJcAY4`?=!mY z{#}dWHS6r=(AMg_$QW00?2OhqXUC54r(zAw_w#O4Rs#wpU$gp(3IfKd<9|>fa=hD~ zo7-v8FTF-(l0V~eI_vva;=*#yvYrIf=M8Wx)OS_;hXFJKUKworO%N_YEg#bqpP*6} z1Cuo+N1w672XBmlx1#)mX`H>Zd5jt(>lKG1-|vVx-PIeVZ+B?g9=@`c!n3|uwA0W9 z`e?+{;pz?&*PMRH;}6Pj3&$tD!8|pS0|YPxvOS~6rLwcJ)Lw*;s7w`E zrYJ98gos9%-^?ee81$Cd!{?dwKee9J`Dpo7X~En(oBStuUtm}3q%2V`V6IP($BwZ? zGA6r!Vn%Apv0G+3$%#8Elkjf5umBZ2nY+!dqdl$npalB|^9ptpj2VI(KqJvcC-{^6 z^=vnj6JLZ*M~7(NG7*$OmiV3m?_D|3G}EYKH4(Sedy>@6t|gxEk>M3hM%C0P$0t+@#C)gD z0B^V)oMfes9HyF`kX^kSD@VuVtiUdoK5p7>R+{J{TMmfzzBC^f$K z5&zfLrqQ-~*V#Z-2i}kK(#EXgbJ6Qcb`N6v08pTF2P#c7<=m9*9)lJh+I72JYqMT> z$1QY-aI+AMjE?YJQeSe7#*uy7#uv>q^4{k9o5gDGcW`5#@Zh~WFF)@|t!qmU-9YKNg_>(wpnhlh!iw(zTkae88(J zQ@Q@mpdaaCH|wmrdi$5fBdWHxdUP%&I4AAAa2&>9peV1G?2_$yk}?PiF_XK1L85}=GYurd7@!fKjjVr zMFlTYRy{f3^#RS>F5%-oPEkIx>W zwtmkW_WM?P$)M~#ijfu(6`M8Oz+lwLMchO`15!->3Mg3URis2fdWS%4 zh)PqC4hg7$NE4CX6ogQO&^ts37u6uuLUDnc-WF_Z&%I^EK z_X%zW)UiI=z|7u~M`ieXdZ-dd^Wv5sYUGwXUwmoXoDwk@SGfR{ZPe$J6mxkp9<_BN zsE2){|NYT{S4xHg@Pqn!rg?TxLcA$ofZ_jkW;vi^5Pd~Z@SwFwNE5*CO~wX9c^V-I z(eMZ1`B4D>*hGvsyeLWu_PVThIUi=1%`h(}7PhOUqV(`*d@X9`~#ofqQD&7!-M5p`@)4QNzll)FINx#m(+SBXADT4$pnqegX58OL}|x?y!hrhfl*h- z%IVNgx1X-dBLq@}nfUm(|BU=#MhgY}kG8IP5#lf>tId*=C;S6?wxwpv=eVd@?=cQu}rC~+tQ|MTx5Hg8oT zX1qSUwT>jHEL>exE+%w@2n+_&hkk8W2LUHxP>>Vq@-X@uo3xBjwt+x^i1{xfuFLEd zZ6}ealVZ-=k3JmpXelaj?@N3lk3RMF8tlKp6nqIAkwApeT?#X;Fpdi0_ckI^B6pv_ zFw2YhRpiV7=I!lTk>Kw|3`$~={jZ*LyYv+;{T(aczc4qROV^op5OV8 zhxN@`Gx2V3+;8mfQE6jqn$(fBg1QNbO1j?v;N|u5@zq}+L=^6A+XE0Ry`Oxi&i^A( zf3u2Jo^SssS%nlQk$T5%E^8G5jIz3j+3vKsn+gJ49lYrC+oF3SGqvDRBv%1GgFILc zZ{!1@TK)k*vIsoqo4Md_D)pDV`}>ZC#il-T$MqpDK72R};5|#W3sKykwO_%`+?N9H z_~dG_P9~e`E_lV z?*{Px*c9&98h(?*gG%LSM9{ezfeI*=@;po&LVzaXG4gRe<)ZmnKZYygDZNj_)% zmB_%s;=UqrB@hb=OPlI+)2I7WqVXH?m*J!fkIyG?WyK*Bszp}+S*CxVdY*~Yf2VuO(Wxv5doIZUutb!SB146XRRG)OK3Htls$t!1%Y# zv(8jnd3d#qo}pN!>!q3CLrvv90`k-&C)1fVG49mOn*L>Ln@(RknBkI%AbGkwInf5hRgy}a|5R=-V`V8q&shgANfBAtT}kHi-C6W>}8DEewBq zRmDc{5z;ECFVP0HeS=eonKH~M>-xGKu5U(8$*%}>+(}@2W}Nmm_|NTT;w6vRf4bMe zWy#h2@se4R6?yS>!2xE46>~zsmh1q^9o*RYC2RFfK56R}2Dy~VSwQHoFK!QQ6(_>> z#8@t~%}!=Mavyk|d(OgNO&i;PN!v?SY($`E*ED_iDciB|f~5&Ip4VQc1#=`g6uAAD zEeRF21LX9K3{56{hY92ca2ex_k@P<&*k-;6PzGu< zuJL7jHU!Af#LmB)XNz88JKA#h0f4bOcwlT#ip)@Hj2$MerFq}Vg_M+lX5g0xuWwtP zHF)1VxqE8{B?J9lU-MQ|;LfT8%&xLnkojRRuTMdJy4v}VZ*B|Q@}>`%?h`|V(C|8snj0eqhd^WPVqh11D-if5 zbl;rWqi_~f9F&2YC(yY09Q>45-02kqz4MYsoF0M9H-M@?8VP8bSk4Xh?_CP_5ovq_ z@?L8(2mFgGiNhl=Yw*-WP$?6e`!G%v>9lQ9h5SUz)wk?Wy54Na?()R25BvN!K&dPJ zlkc`APM^9-1eS2UQp}!q*=?Ounl-apgDY@ z&EnxaNoFC}XMp!NjX&t%cp6ouXcCflcjBo1^||u<)shZ8l-srbniujPPnBwI+b-T$ z*bQCFIROd|)SasoG?}1svCQDvf#tY2%R$Ktivo=F+Ntp`$g>v%D z(ku4|5AvfXy7z4;$t5IR?>xc`Nq`$Q8^>eZ0B-vH)?KX~U$!5ZqjQgN8E2;)MGE!w z<(h?b)0u!5n96mVN5`s!E!>wsu<8}rP?v^`URQ~p`wD#d7HSx&?Y$3iw0bklxc(5> zZQABs;*>zCmyU@mK_dX7!>l2`Bpt)7jt)?7nT(cXn@Hbb{MybbvAWbi+GlC_FsL6r z!IsSZQnEXo(8Iy{>s*iQbdQp`n&>GIQ|`f2K{@Bruvo%UPsy3}jk_9pQweJ`ff=^l z=Yp(Kx_w7$2Gy%oevdOshq1p{hGi%TfExq9SdIM$dbXRpRKJKe^5l*< zMFjU7zYNLgxihx2eXY#-E@(?Gw|+7xEEmOu1Nffsv@yoO zxzSTjuIK`|&HG~+_Z7D)16KUnbB6~HvY$-#Yk@w-?I%sLR=1edNSj)~)n;LaBXNg8 z^#pm)bU`yp)Ut7{zM!Y`er|qln~+S#Wb*j#?3FoxuWE;_WhT|tdDThXMDG_bu0J9m zjy+~_I#1u3*^p!1bu0}9cS`fW!L|$P+DhfMqN1|HEjKnXQz;dKTFxHFPFrRRyg`;p znLzoRZM`byhD|n3K!?~@*#9achi16Aj~N03&`;ZXa!j=AkbL!Jg8qV@!))SnP@98Z zHSkd7`gHVKKz8{yeZ9+!Q0r`-WgQXWTn*^2uU2|}L6PGr^u?l6x7?EV7mI#VT63@N zsP@q?l~0b;3-4&iXWV?D=m)fi!2NoiDjTfoD=Y7+pA zT4eTj;p|Ql9|#U0NI%U zY{Q6hkn_N%Ak?#CHbL+R76G3*VgzqM)g^I7w-P+@G=$xlndUvl0w)(tN!RotAip;u0tRunxuY@1TEaMG2rRsY5g&FYs4E!5D z&bmyV11Tpr-&0&&-G`#0O+^WTQIaM3I-S_a@*{2o{lCZBpmn0ZncwU0t*q~;)e!KS zUg0FytXMauEC!hx5~QcWT4+I6Zix2M@u1CY@xdb!S#b><3-iSw{S2-h8B-GI%T&AY zm%W*L{F3N1&>tHQaWl9ZF`Zu(lS{_kX*)AQ)6&X{;)IAj0;z^5kV;#zxbFZ}mrJ_4 zfqNzPeQzLL2>5-F^ft;r-m`PxzC>Y3&{+iJg`uvFs*v$&j;e#FB?~Q#^dw0neqN7< z03w!9aa?2T?`;9kzfmdLlI}*g#7slSX?G||C+{G98m)%&e_fOYH59=PJPLcdx@8E4 zIy>UF02o#4pdMv$8Lp|5Eze=~>V&3!)eWriL1qOSn@d=P*VFDEN%DDex{Tm`{P~@W~hCn$}PXf1y6R+pp z56gQ3(kM3j#h#LkzOi|P<;D!iYC&lT4wd*2T4cH9HWmn|G|cn-*jS}J2i9tYxi26q zZ1zd~!DCZ`c6WdqVTXA1DNMa0Ez10)?Q4LM^jph1o=_!af|)bqJY=RUVuV0C2>Rn- z;nzXn=xgx^{$*vZ?m! zPa3yto0(;Pcb5geX~EBd*87Z0;-Y!u`THsy7%NuRw@Jrl996lx6-FQLkA$R1FiUE+ zYvN)QxI+RXQ=dM)#4NgIrc8EY>>9UYsK|o-%u9p%IC%gl?TmYop;Ak}wNLCfD)fF> zr&<%5<@nHF@|W^cnA2pwXQ?kNnDBL%rut@sh0FCA&?!LE*jPQp@VL~jU6&-f^1`o0 zdT@Q!a$l;F#!u=!HVPpK*%R4wg%B6P5i1>CXWRMV95b&rOm%$-${Z6%XHDlx znR614t3V#*teck(3T}KDSOVSn0MHyj#@6`>=#Q3$EA_WjjtCgd^aqVm|9H%oa`?Ll zJ>DZ%FFPw+#W9t8T<(FMo_sTa)Rj#lPj66>M7aW(qSV#=V@3kmHNdLSu)nd=%6*v_ z2w149mAkKO0oyF`Iv(XD2p|&RoS{9~4}vwWY1xw=AWt`hr}kdx$;) ztH**R$6IF>fA|ASCYfUFu^w{OobQp}J&`%R9yv6P_gbY%ZIxPg*b0EC54<{ZHlr=F zGi`Kja7tD5L)arOiH9VM3?p+`d`QXbHFH zuw!$BrWwzCV816_6y{V*I10qxH0!k9T=RUSe+!JiBeP zUi29BT$|pt+ieq^D80Pt%bxg&b9xmxW9 zR1|7(2fElD&i4QyA*k6mL+mbW9r>9j?)T%qi>~4qwKL-}1<(#zEjEBqdNh`E9h0-fgqfF4?^HH}lC@$_pEjIf6;|ezyE`+J z1llp_^!n#*?jPa<(7r#rY6u;?7WrLt56+}NyTgRj90DpIRPv~JDUnwj+j3(#p)GMB zXw*ncmzJ?}FI|h|d<;0&3$Fhd#WTYw@|q^S0~`ASPj+Gu(_{ed@;pd?Ghs%6i=#nK zhtWSJb+ipX*#~ZRpKN^bfHwS&q4i_=-@${cir;j)b;;su>32(St+S$@To&IGbM&cC zhu(_!{Ri0qt^BEJH^!#12sAf&Z@g2+?%~6kG)78RUThHOR2f;dJK&0JQ%`_C=dNGR zUw<%R*c#R?+uWy`a1@-b7}IBq%-063DxV{=}o|C6>*h;GW)hTUG^A|gl87UGV4VJ_Zj(XSJDIhaVko{R?ZW2n37=L<>9T9 z!mM}D2!I6OsHboIGe>@YZDtKJ?Y6&KU1>!pz{#f}iPiHVy9U;D@>HiO z{41bP!e+o}+w1FRk|XB8{mu^hHw0zn%rwmTR||7H0{e{!`shJ&zt)~QQ%eNE0|)Aa z0-ewzequzajYXYJu1pTs9yN4XXX`y(NsgOi?Yj>gO9{LV&6A@yfkch3K(QRv?AEKGa&i9 z#_Rx9{Y^~Qb0m~!scvD{1KpQVAUd3tJ6|2}T%FC!tJR-#`S}wEa3jqla04^5co?)T z9o9aD{qCXD=$vOaW~VIB9FTZ~;!Hf&CzBz+X$6$X{It_*4FHQOV`X=DxJbm9Ae47I zXM17r8LtQ|xk9wPzdt8#Q1?PU5v~yPdU6Ofr%3PwVZk@-0`-tj{Yu|$L0EF&SRVl3 zH@;KN#NI~;c=ub4;GsG!YMaNEe&WBEZn=Yncf-tKUe5#x`p6zMi;eikn<|kS4P~b)I~03M5W{3g-MIbj{Nq zP7A5w+&}{paP#eP3fwV`89r@{*V5F?j;$T{SCieRtYIB}?u_j-8=GD&y&LIs+a#hT zt0kV`dtuG5^@%dx4yEkl0y_uy|HTXcaV^gr`62SBGd_ey#egsYC>NZ_22ssEUE5uJ z77`t9;sKe4ddIb7FKlqV*qA8va3n>oIcQKozXWFVh{>ry+~tr{1%qtwgTf(LM1Rls z?feq?{7KS|Ln64j4g&e~2)JS^?4&+y+hcL;9wvItmOL7pFauJv{?p{_eQN>QIURi_65KQ_%s^GC+$wx2L4!azjxGc^^gc7lh+%VX z%((gKmr}_|i^RdF>9GO!S+*t)vD&uwCU&;=p_ewYYZ4O@7? zC?i&`YprIV-X;E~13M%Y|UrE}`v znW~#;}dk*$bF1(72)YO1`Hc`Daz2y8GmiK|*OjxUiB+4MQqqO3Hp(rEG ze3eA3ycdRNp>Si;GQ#jt&pT~ZS#O^I{K`%>{{T+u1f;>^#SvWDp)5}x%%=UjnXlgP zU>qBLIUYq4`5c;kB{YwkH+Zl#zGuF2`oBm0KevI)bWYNUA9_>W>OxM>y}4?QD}{Yx zX`wtAVa@aw-~c6XGhelSr9y+5s^*7PhUS6kZ4M?*MdN(&sj7cVIV=~^|MxlIp#Q0T zI04DdDPE@M+%GwBYn2t$D64)-+y(wJr6%^x?ExeqE0m{U?=oARs*vBr-j_3^NKi#WcDTtx^(Txp5_ z-Qut`n7aIbOnrz;yB7K@Hm1187?wiHUBjxLz!<-BwGvMCcCMH&E-dN47V3H?wy4X% z*t7E2oByGxKP7hgXXeHfUm6Tp9rnO%&Z}OZVaqEWe;6uxA#mQ&lKQEh%MxCHhRfV@ zGMLN4H|DwX{16^aq@hsM^ktX%k9~){E=^0%n~s&n3ScET(Pb?X6?3zO7JifUeP$l5 zTNFlpaRX=hy}Cbo^_lzNR!U3l2Ae}8;#e*MI{*0`%+><-jFMH&%GGGruF-P6M%FDC zf%)e@R>w>Nk$yiLofKQ7L7McbK{T9v`o*X za*Vote5J19*!nIYr>A@FuHe+xT*>&mg_ybludynOg65E_cxB&gNN4ed+2~^R!HB5x ze2XdrzHXnsDrA39+yTx8<}}#QZx-PYK5Xs9#djI8xKTTM0wBSiz1JO-W`~7`HXRoF zk%V;#`i7SFMRL6hBgSGmWp-{H=PyFW2!@K;5|x>b+}mrR+p!(pG6HwGF4jI;M7|+w z%~Ts0Sp}1w%BKyeJGhmv(IqP8WpOD4IOgM;^&v0&vHoJeD=lske1uvzNj^rcn=2_J zR`8fduM&%Gj}wkky3HeMw@#p{(#OV*s6#!^brDuKmTE&?8bV%t2*WFJV>aE4y3XHT zcky?LOT2BTEGx1m1@DjDSlO|6kH!|wk&7N4%MB{4yzXwk6;Yei@70vIa%|{?LNzYO z_4u2yp-ZK>@8ZlA7lLt?zEdy7l` zpU>Q7A4ohDwq;DF$V%}yh9bMQzv5=eKiba6b?=Zx)8w7>2 zS{&5!g00OIdxNv{@8T>J>A|?G1s2?!ZszqleUX@cK=H7oK2J;<73egK>K@5`)hR#3 zG3fTOeJ9)AaJ(ktU7d(a*<^%iF~dmH9E?=N@o8+0l_eZVM;3iMmYZ zh;>+i+Mqm4LYB`|y$P%t(FubZT#f_ZJ9mK%4MV}C!g{)tK&$~&09H9rLFRtN4XHHEG!d1kKR1`$N`>}JB0C%g) zbSYWBiFscF_Jt2TT#CI?Y+l`dbLTzq!0R@$b|2zh*QYZH@dCU1EIf1A(I3X|3%WiA zV}scgj6W13&nWn!9?XXJcAr)&aRb02-M2G}=SI3^*l$Gb&GUStJ&0tg z=YbCivS^gwrv$6b7LFYSuZ{B2?>S4)fg@pgyEN71gAr%t;Fr$7lU7-`&M83bj~!aU z9;+5)VKLIN`prnmsr5~GSMfQvd>>AE<|f&-Cd$z(m)nLU)I{jco8s;quo&&v=FSg zV~{QCP)usGTP{hFE5c8*aOp(1N!=L7AB1pKGcr~;ntCqouWut8_p1tGMlz|{eKe-(L@inB*+ zM(N##2t+uIadSm@u?oT$51i$5dtZ$fM9`3#Dc*yrS9I09hFTS{@QpL*#>F6f!*UMT zV9Je=OsqM7*yj1cG{!5Z#H6H9ubaQzoP4vvQQ-`6ZM@$%jx&et;8wlS%?f#C?F-cc zo%*+1{r;QivAeRfwdWS|GGaHWCEpUTpe`i!LY+U#(+D#-0$hfdT)Y4G zHV9#)dubGJb?i4-YKV4e$j-o)H=M_d*tc6<#F|7s-}OfX5Y2ld+{TQ!G?p20#co$x z3Z(dU*A+e#s`JwlN{U#+wR-)yb4BpbM z;@NcJMxH4>2+$LPE*P?)s7XVRorAQ2n4i3+I3wSz~(gNTN7MAucwX>3G#n$DAG;MQ9zJ2~Q zv1;E}61%>{8(8*fqUL=z-o8Ch2dhVy**d*-t`it`&z@I^BmjOa*PKn=uX#D)r7rQR z`Jpe75nwl_tk2WaS4vk+;K`<+?uEs#f!l(R+*l~cGO`GBedUwSyJ!?JPcoRPm&mmXw#@wY#cMwf{BVAqec1o)qp_}W>)|E&t0h(pI3qR?2z>$O zm$i=lNM;3f66)2-0$mp2k!~#`k9J~$t|p~Gc>eCIuNKM)Q&r2UoD7eveP*w#id?5x zQ8`7u#<%Hdjo3G5& zlq@U>^>@6Oq96E>o7<(*3k<=}tp z*~_sJ;?y-fTzLu}@Of!B@9q4NP)y6nM+wdC8e(~G+&$o?%&+V_|05YX16F6l;VjG; z2ZS1&iss*57$5ote5?KHx1(dqOHW`@fIpegA9%EbX(|D`>nDi-V_H5e`wM?$k(9sC z!v78UUC#aQ*~1$}tr8*gs@K=>Dvlc?kV^XY)>dNcrqqSMoH7QmVokI1Y>fx0&BUs1 zM^ci3D@gfG0;&DO!2_NR`T5jYP6(*%;9h;eXTS2vm$y?p{}=sqf61QC zMA=_I&#b-w8;gB57=gQSPT4VpURP}I?98DKTpI9q!ukib`1zB@!+&bv&mZi6_9L^6 zXo-^?wYN7n_d>wDzRiJ0@{>6xZ<$B4RIc@A#()&QiFDxQTm3s*|EwBVSp4RWyY`Fv>^n}oqU|_zvW~;jI>g){)CGhW zSWet|@J%cGI`y-9`b^s_|1YsNiqol&i~!#Bss@ZSU`xnN zN=h=k&x{#>zjmpAV0J*upTDp}{J-%v^D8&Qz76qNgI4+HmfGDjaB*Jf;rlzIlUK@S zt#+-Hs}Iq5-_6uX#Wnix#KHfFa*hV~y@42}5ZIuA`V!Wg{y&)wep$h?W~Pp@-D*z2 zkscwQxS0Ft)2E*CA?;@KAsqk3%|B6GoYqj9YVt_=_)`Ou?&hfS>Rjqdg{Z)9FMEJh zWB?D)EOSt6C=yt%CFakka;&iYWMXRzvHzNT$B%orfu^aPc=BYq|KPq*lPj0|ioH-l zh)~ws4j`siBUD}Wd@_#&oMMkLU#^INDiEmaGCk{=n)H)$wAh|o=f}-n>-+oG;G(Wx z?V#HR?Eoa19 zk5(j_Xpl%rCK@ZQBITR-{crxHk-a3@f3Z^Jgbf52E{v9q`p-J~tc`^rB<5G%NIp+_ z?EUF!TU2+^d^MTAd;C_aiQvZ6m}QuYquz{{G7SN{iI*qXfCixTTQw)%k!M zU^tfW2`qz7&K1%K>p!X{kvG!qzUt>2x;r)Ln@9^fSpwXDuUt~p{8*rQoiToF!?J`h zR6=+_B*+4XnpME}BR*ihsIT{exQqR+y!P?V`S$Q{E2&8}J=CyVzPIfu8>}l>ySPSW zezW}s^Xcwio?cB|pw=%`5JpASB&vm+NFs60ArTyFj2sjPhW9NCT4zf9~ny5(il5bQ%yX_2I!C8~iU*{d{XBCPn zu@rCnJ5=ys|1S?l1}sn}^C}j~t-)^(gScHxlF8`8uTxvUafxNS_%58^$aWZ}C<4#> z+zGi?LRaNEcsME&f!YM}IDzDmntjKwx9d#1x#2``N}kLd9{5YBmz>%Q+SNIO7_QlE z`N~K~UuYlsd2mbD!f1&LR(2cLMoHa{ zQ(8IpKlgce_@e4%5XsrX(w+46Kynv3)xm_ASw=OG`w#9`K71Ev`6BL+rf?p~7j_Xy zrr*DwJToJK5bzT&Teydh63a_Cta&+-oI5Kb>_ZFk|B@4(GFI8ax0;Z$bqCb%vxR%f zap6^q1JUW0M4xhe$N{VRH!)m$B7)QO4{08~l#4Fu#hLq7z41D)@O1NuOW!t|nS}^d z$q;7clT#kRy$uo8oFT3%+vqI?ONK{s>b8IwpPJ*mmx5VtVXu)(oql4kF`6yDy{Z;l z05Tf*hhzOEAjIj>;Cjp~;Lq3__27ddv~M`Q#-#3j|>nvM>QP0W6vmgfzbZ8c&_c}YDC5eBV97kKE$HRKX{XxsvtYm zW-H4dXTCC6EHm%f4A}kE`9Y+YK!o2|*mCRH2tGeuIQ-X}8cTNsX;-gP8i|ap^{x-Q-g(p7Rm`vCJ`qSH?qu25)K^0% zf#!fD2WoPA`p~A-!{eKMm?Gha8Jl1UsvrwjYD1-VdUJ!HLdQQpI8>tiIu<;*N(G3- z=whvCFw2KR5LXbmtaSeKOb+p3nIrI#i_g!hfN4{|OnVsvW!wb6b{gznDi+Bl1aPqY zaq_Q=mSMxN)fsz^DVBH-irAZ`lX#hr|2jaM3gIntfLH;pK1crmRZg@HOKR_5=l{rf z)>lB{%#bn?u|Kzl$aho2r%egZ*PU&c-Ct7sp;L> zNKFo?){iRm!lFOQDv!j%1?42M)z+o=Yo*`J&5R zP+ns;M1+MlgKuLR0TZsF)P=2Jrmr-)0btu)(A&EC1%$E6!UQ@RL38x3fR^y@f#&t1 zdk0r|mZPB9jZ^NEMHms(I<4O(a`Q42;uQ!M+{olIkQ3aL`u6)iS3VD%cGMNt)rG6k zos8#bD}A^j8*%m|en0Ec+6lv&q|pUjPdvZt#FR~^hX)QS(lVD@5;alOw^y%WMz#(0 zXwGA5X@k%V0Cz~*ELIZjgEIAnv+WgW!VuyOl+@Mel`lVo;{Nv8JQ)4iatGDOs>RNv zrVAxHxx6%dzu$6=P*KB|Arjs(N`aY4qa? zWD{}q?Bfaw0R_9tWB=~JWRcmuUh+suqjq{=y?V>F(ImELC{|5ufPDX~GJm@YFD6?J zSsWbMG#+D!7lpz7;1%dpWUDU+3C4_>f%MtqW4S*%(eBg5MEJsRa8q(07m&Nr7P^t@ z#;6uU5E}W4|K!qVLuc5RGF%0>@JV)9pJ9NCV-+(O8ISSI>Sqbe3*?hK(g zNUD!K61qqjm>19;HYZobfAAk`ohVXbQ|4bsp&%|1J2}ygBJTm05wAm;B#cEDrb#lOAo~YjFI-K(~ zemhD<^~D0@b}9xmh3&jx}Kf&y`{}O1h%->C``PPf^f`SCza9{V+J!Dxnmo+h$fBqa~b^2_y zIus(J^zlVU6OvUec~1W6MxdTpSYutM=s6+CVD+Nk5aeDUC*qJ2y)aTVGerSHnXtEx zjuc>E0mlhi(4?*SMyZc3%`b?)A*VfyEv=EFaq2<|mqd%V~K z^rWEHNWF%YHEEbQ`=_zxdxVz9p%6@yC3hTrwtUOVO%veYv1pz?si)ag#-(OVA&3Sp z5GQUvJ1ZKH9;q_>NMJz$K0@r{9u(bxj|B{_;y4tS9#2G1J)!~ zUh8I}+`_&o!He$SWurysLsewREz;X(XAK)>9wU%3AN&H3Wd4zfL@Fv!769(o8oFWh z8h`ScOiIb1O(&E7vI9o#`1W)nTcpq6lTQhhxhP;bc1)+=-oupd^IBeWsIcBvQ>#R^q; zHEKjU*ImO~ZfsXVbY}Hq+Tp-q(dXFE5zZ-^M=+JXl&)Ju-KSndn_p=@Apnt}y?UpR zhm2RHzfYb3xmpNmJ*^}E&{@P%M?JYuALn(vHsjr$Pd?gJMKX?l}V6AwO8cNH|^w|#^txU;iD1-;xJ(uMZvP(bQf z_!g`WjCN&Uv?Xfnu7yCacJSjU7SoId{oSKn8-u(^$A4e3n<{4=C9ZniCNmDZ@WH7D ziRANK>9o8H8Dqnv<$a+1%=GZT>c{ zW4>a3lo(2kY`P_Ux>Z6f3I@>H78Sl|gd57jgKpa!0Bzd(8N|s{!NOdErA%iTn99Pr*Kw3h zXTx=zsjY9;L_&kD$P590r7~jdk!kAynX*r;(MRuiai^&)fvPM~l-leA4oM8Z$)Il# z25RBp(@PmH6W{E~jf}HZb#YwaWfOzhLf24n(L-H?IuybG01x$jax>1T^a=k)uO-Bi zClQx_;13CXI+@i%YcxmZeu$vdT9+kEUm`t7eZ7i0qkz((r$BlQE#}v#^0p3&LmOEf zH7?q`m^+M!z}zMJa&9f>w#wDP+s%YazL6y4KCs?>$pOUZrb<74gl;XT1suP=N{}1f zgY#2#gwom@Zk>(HGRuR)IhA(>SuU(o*;1;jZk8+jSBa*~i*Z?NdNT1u7A zgHtP!6WtgdJ3pzyfZ5sJq*I}mS_=VJy=}Rjs`8Hkppmv9d}?xHWw}9;=r!lp{$iqe zRzzQeCuBahGGE#Ms0FEO_w#r?J)=LF8lIluR7g_|P^D+oK z#ws^XfWdGS9~a-e5frHulcFX;`Q(GV5Jb-8(MMR;5|*Pel}J9n@g+py46w5=BEUac zChqYFh(MfZ`oX{jOikeEX;^k$_4Li3bI^dUJ1iy0jtXQC?RDmoK#V-*MJNjokQagG z7I^~TQ5&Q!O)eTbmg6_3BW8d=fC)nB?;V@`xS#_I#c3m)zKWDyuie=}{3m?{32Py& zwLHCJGSfX0mQZ?@QWGS^o91(4iq4rH2|G1;d7+@`3ih1DdPCQ|Gl(9dR42nHSQT`2 zIF!6Sd&s(+UU=W2Zp}!8AlKAHl_2P|r9hW}q_&3Tyx-g2B0T4^W3ZSt>1@30e`S?( zILiG$Tm+&VG!*?1xf5xHY|y&VP@3d2Ip(6A@I(!)=mp z0lo`V5S#Z55LM;{RGgXL{CjVha*5O0Sq*)Oe2Z4WE=!f1R^y?xJCXd+=k1p*W(uNp z1cw%u--yGp2x_WlS_xa}!xu!RHq-wyGiP%z~ZIWjaj%N=xFqo2qT1 z7KV3Xi#yC%yv12E`_Z~VudR8Zan^%N1eOd<8wm_%^7BT|^1Snv-1Kn#a%Vmz0;`*^ zN?-GKgPBP|cvOOP;9Q|8{tLUc;j|0Tq{PZ~6SOro{;XwI7-MX1#UZ$Gsm7ZkOS~Y~ zpt|ZX*@<_8T7s>}&X+hRQ8km`O(?L)HHpC2P;nn@2vZ@Ona48fFQ$p~b=O&%#bVA? zyVBR1t-}OM{N?|vx6=Kwj)h9M-N2?<)Vjv-RT;vgwz?vsU0C3#8Rd9yCa%YIOz zL+!u-aU%pQOjoH8M>Zn701F#qUnQ6^%qoUFySJeNR4JGj5t1hblSz}?wAs55)UzbA z3Q8UqJ`tgkDO$qF^RMAi5~B2}^FtRhQGseo%eRFQi>ZY~+G9qwNm*DB%}YN!7Dt)) zX*+jsq2>m`k3O!wEJo1A8W&o?3uT@d?hbM?SjUfNmZ+hEbmCm|L6qW~{qx-Uh$?yn zcQXQERQ>GUTpxuqgM9i<7n&bhoJQrs71$3j%eMX^J`gwN9An(P{a(sz!FT{|Awu3! zMW;a+k~W)e)9}HMIC3m{k{?rO@mlT88*ow41CMA)#Ktt!NqD9MKTg5lDa2J69i#nz zvh+#dEILHH%qMOUG9PCt>-GTMH{cu8S0yQehPzM4WxALG9tq)B5TO9dYw#)Smkd(N z9dQEtNm$zmn|SCb>OJVCplV1N9wVGm?5a#$yu*p8V5HmB2npDejk;x-P9!K3vjZx0 zUKSRnUF}bi<@a7V!w-#X?gW;09&OPDj!Ki2h<`-q?bna*ULp`(>kG5&XYHbeJbU=_ddd_R{#c-tV2s3K)6FUIP?8}E|Ed6@TubfPeKzSZ>Qssm?1@)uR zhx&jG0Tjo2YI#nqkE)=z(JC|vsMoqlOm-E)e|T}lgFXpvzpF6H5k)UAR+T9$TUP^; zC_%&<`(4^kFMrtsu8Dq-8Iilbu`RB%hJpt+dPX5p6|%dg@Sfo6xydbcivjBmyll9N z?BC)>81xI#DuD=pFWv970YV`yYCR~#UA!$34HKuS_|{(GX9TF4Da}18jD>3-m9q=r zTXeO(YawtYv+A*`{6f*hLQPFPjTT|w)C2XEpfDpTkktfqR3L|Wb((Ue#7+yg>Fr}7 z>6to7ajL-l5Hk#Y9fdVAX)~yFS9_8R96#V)GCM=8EK=hPQlxA!^q_1In$jra z9Bj1v;CFFQ`5Z(-T9(4_{0R^bi=`4oW&E&f%aaMF)5FR~YTV@#*lTRAg!Hj#UUt#5 zAeXN3>WZ=gx9sYrzw(k;r>{WJlCs%SMWSoQ;+iP_5Mr$*r#Zb4u@suclq2!*`G>G5 z!sw!zOfm21a%FbI@?yV^n&=Rl`WSVQOtpMSxK;pc^SaQji1pc=iAaQTb&!g?hI@yt zwuLj3AkIQlOv?T+XUd3*hUKy8-Pl=|L_X}uwP%8Xa+JA&d4z7cqbesqd@g=%VJ};a zAxcG*8c?4-`==7pP9&NY9%eP2pj=h-TOd1xAI*T@d zhSJ}7#KCV(w?SLaeKPQqoR|8Y5Ig1}p-qxP3i@_WH4kj*xeL7mt=OR0TxTUn_l@8v z6Im|reT<2Nz(Wx)QNu3C&(Qz63SgdLVrqxX)MVWjc2&`|NF~m*=hmz?Oc8RqU7M-^ z|C{ZR3_9jEM!2xHY5EwQx|ZG41S{QcocmWRQLNcF=wrvTXqD_rK~LXn{^*php%kal zV#&byrirX{v+BxT9EG;UMHo@-XfSzf5vb^~%PX>W-f-`w?&;;IXdTm~s;+$CdiRJ< zjs?6vW~mxKA1 z4uJ??EZ|${N~2g)`gA@D(R4+7WuBm`Pc z4`m8d1&sqwfWj`6vXeyxdKWpS1(~N>y=bE0OBd|62EHu?R)T(qc#y^DTbzdXde^LDix$_^L-VYaEZVWd9i~ZLYM;)&gDqi zXe(gIZ~TUVks%Xf6H~g7M8Fm>5cjmwm~^nz=Iy9+WF3>cw~LRnP%t(M!ZBe{mq`IO-GX*2*v_!s*DTkzbdj<67l_V^W7fE zb4(`%UMRfs-dCW_m)<0q(cn|ipPes$E{Hg5AH!ulK2+@8Y>bOtFET@PO?a1Z>b|P8 z9jy(G;4fRfhaU_C@n0_O>WvM2l*&T#2T0%%_X-67=UOJAwahr~cc1E@-a zm!@l`F;&-3RZzDBW#j_xc;rC}-KDY_3OH`~)A4!6F(sqh8I;u(rR6<+=g&ik1L!y^ z>t+zM>vyw`0ybGzvqz~V-P?b%ngJ)XHJOvE9}QD76Ji*2+zJJ|Wf~1X6lfu!v9K1T zd=!qY8w2w*sui`EjS{RzC@|*TgR=Cr{Bm!jgT-^7gO$RPG-2aDF$~DrH*>D#XfJ(^QhZ*vI2cldOYL=~nbmi=&%{z$Tfd3-|XA9y^=h+yDp1Un+ zA*e&Z2b4+1q!!=P*QfDw|TW20g4d(B&3z2D#c{LkaTd#^a> z`Fx(|IWN$RxgK14pAGwDnRa<(d$Hyu_R`JWr}8|p`N<^DdgJC6ebQBdYtGJF+e`b8 zoXnDz8VVz)I5Yj;kH5dUTjRGW8G`MGl`ZF)%5D1`T{@0YU)A&SgzPurlCw_?*h-AT zO(KJ;w?I!~24LyogI@c}jZuW0>Qfz7+pjzti>1BuXBiH^0TgvPMRU{tS)2H(iAjXI zpRbYAsF}Jh?7r97e&NP2*6F_OV{@$ByxhEvyt+#03&gPWYrp>Zz>w+bg*`_9rw)R; z!(IZX3KSGB{QT*cr7HPfp3;FPybGr;_~&m7do5KB=WV=I=0jwcmlDgHT0D_~T$s(8 zyzJcUD5ANPM_c1kQS$6TLfeapDVHYg2kRQleqfZ)FqkZTN+^&Z)swekl=}X#4I*KO z@L_3}5whk+P?+}PxjG{lu7icI%01W-v$fz?yxz<;;}Mzn9EKQDlG(7`INQYbBJX0C zy|pYZ@#7P0W>-*VT4?|zHe18Z>WiDNHg>cv$u_z!V_9^6)~lmGOATQcF2Tm@%-p_~ zG!avAY@&IIG41B^fJ|$5FW#*!x65ZNlaqv?cEOw#zPOAwGj)4fDeuEt_2Ral+(;(U zZ^mtCh_r-4CBH$69!|E-9rL(XwF1M^t?k-hSc#+96TR$@ir%!zp}&(o?S6;;&q5=M}H_V=nGeqGmc zxzujN7cVF^vHJRiakzRmU2NVlOFi?*y!59&!4R0KV0)lsY#@??^{ zWiF1p+|b}T=JbWYJ@S<+vx0OX+vVlG88sg1TCrzpp+2%9rD2+=lt?r@>!M*kA^51>1_?%5x3q_9a zHs?3$?%jZuooXNK6c|Z*B-|AnAoDqExCg~G) zCBLG$;}YR=Nj#F0Pn-x;&jc^GbgyN@E_iItbOxqk>7evb`CE^`M4me=mru>4g!sb1 zh&p=5R*|Y8=`$uQ*!qLy`H}rHonAYZJ+-~ju`RtWx;}!-OGT((`|!D>^Z&R}!7E0Y z=-y;UMn3^LKU}Z%NtwHZ(J?fV*80R^=)317k?wno^2O!@Zsetor=$zzzHYu6nejf> zZ#Pm1&zM|I6SL+M6J$QS7EQb50|*(5N1b+l>%R9ni&MXHZ z;0XDiV}r-Odkq{>U>wU3RFmirzr)o`{iW~g#N%bLb$`6-DXir2mBGyN%g8y!y~iRm z#8#S7Hleeve1uGTdl(lFI8`RiTjD_GI?{ zvU=5h^Wo6Qw+2i8{ko@niG@_HH6^cpM_rJ$sqAF1v=se8+bNGDuUstu?#k7HNzSjfcFi4 zEmKQcZ8<5_vwlxmR_p~~GJ0q#!<>bIEsg)3kNAMsP2tybt?e=hiRlJ2$;=Sv&$s34 ze-qos^;h{ybUlQ7&R**euUHn{l6y%|(pE)5R_{;1>t4Jh%x*9APkBSm zNbe4w7j)SH7tluvQ6Sw}d_?ky-*na)p`l8$-v1Ffv@@wjd@f*<(&U3eZu$|PFbdhC zrRpX9BfSuI-d7%;#=6v0=KGY|+UKYKmQSxKTrL2MwNoowz!mj~kXI#?RctFJ9;*}; z6;sE#ke&Iq-rOk!PqQsDB{QR94Hx+xoR93w*1%bcQ|PxBJ<9Z^PCBj}=aQo=;bwic zQRy7pzRQ5B%ogyBl#BS0X!g^pD-M3>yA9dMvI`<$s|@&qTf?zku$x8~O9!I`nnleU z3aA+hNWGx)U|mQyIUL+po)n>$Xj>g3ejkEs$RPyL*FQom91{3X{Yrz{e zsyHg@E#a2Ma~+f(HH zd0hRASof1(B=<;uTWtF{hrL!ma`is8dK+Io`S9|GzB^#6WNP71m{MjU>x)K9+s`qzzP7PX-`MpC+mqvD@21H<_|ToCWmR_8=B--F>ewu#l%9Ynb|%R0L-+ zP6%6B={1MNXrBlA*F+NB^9co>CdDkPYaXlKI`V-5GSZRKkp``vW9vJ5E;1SVY*J?! z!xnDk5R^PqOOPYam=Hra(JSgzdgg6i3pl2$NaI(?4c}FdJhbAM=R^Hd&tH-^&L%AJ zY#NONVFR&X{WkH8IWNZ9kC7iaCuO@dH`-0|h32bTFa-)PRQrM!Tir+bbba_>S{@+Q z9QZ)!J7Oma4kjs?(gPDgL>a&%7>c%pz`8ew&#!zg(~s!`izo7gH*sQQcV%Gxm@K`5@mci~YwWX~x6 zMe4`m&o14ld`EM8lXeHUK6$|eci&O6ZJTgciO=d?#BTiHRWmxtsmCE|$(i)|&cYu< z3`w6b)sGMrmsHmWk@mv@7(ep7v+8C{$xn?u^MdRwQajnOVR0RkjPb4@z7FI&)Gs#G zWc@=!@A#T?AJ|KCMrcu?JeK!T!U&FIRO(R;d2aL#!J>q?AZbs>dP`xNY*C$`rArks z-f5b{!11WY4o$>j`+G&ZC>~6Dt*4I&;i9#*_ZPPjH&kHer`)1_C^^P ze5zR<*?)A@>xql-N@b4qy+yAg*(sC~6LHY9a(wIKk(Vv26;edq?~Q3fbEkh9W(1R>5ICN7SAztwa5`vXA6N*t?CQiu6}PG zyqYqP@VB=VfGAoEC;J%Ka}2v#e7ro{TFpp`_#=UURnK~(zt0pG#e+2Ho@cJAI}kFCxPr=iEDLeV}PQkzBV5gjX|Mr=3f zdm8MzhNUimOdsGq^|=;~U{HzecsXUHicPE&LeBC2B$H=Y?bMa7)fH+1Sz3^^h;j0o zh}YC-x+!0ZGpz6XI&k%yyw2=+9#IFEb^bbn_|G3eQaEg1R?NOwYd08UR{iP?YAGrH z4t~$WrOZ8F%g#Cqmsq$^{~TWCjxkdQCe|mah)C0e);EQflEu568nJWKec_nT8B@N6 zQzc}^lB3F+?3gJ&H~Oc8XCX!q+{|9AP0KGH2!}c?2pjW>d9C6q;*ff7TyA?)VAdZY!0oS^evx<7mvmu7?h1ly! z5?m39BMd~yEI8Ruhya#f3=NvNw^I2wt(lj_T)Ixj!m6udGQ6Q-F-(!Z76x^bTu%|9PyPQEyJ{YAAlW^&C_m>`_bIGTcH;O}(xhbp;T96Sn-aYn z-pAQ!xxmS4@myovnd4Yc#T}#}3qR5iu!9yOW^zI|05bsHn@vTGCM%C`$*9YPG%}(y z`8GEQXzt}LXBV0QY4i5*S?XXP@HmcSTC}!gC(Ec9<`?h7g)uNjw}6*~?F7cbg$=q! zy?WA2Z^Ae@Gc4Ns7EW{TGSW)pHKt_V?CYj4q$c+UWQwSaGVUC+abAdN2?`@@&ax`n2U*K-DxLnYtRbS$mQWYb;^F zAoy4!X?xhdk7a8^i{&n=EBA<>@6t!_9r?N_g={eTzxrX)u-aq0m z_LJaebtHbBmYnh&pa8HmlhKmqRZHRSb3=zT?=kxdZ{Axm!sdbN)~jMIdF|TEhrXx5 zPy>6vd$en-)>7unXg%&RPb^!EIG6{aj7A8_m0JickR>(3NDLh zG{jwH3n6}3pDCXJ({f#^qr>Y+r6D~}A?8=e=dnQtlZPVKW@2r?L9WbnyEla@UnK-M zLB`RCHJ~(7otV{Dnqa5N`ITV8?KLlG$#ogEU1qU%seJ>qQN^#OOLX$TPk{X2- z53yK%p7QEh*MfbC9Cs=B)nzrA<$qX5yBCC@-V8-6IjhW70HZOGhRm*M~N+&!Ot)`FMSSJgTgO(V%5#yR(k7vh}sCJDbj zC1+%aDXPQ|+PuE)D?E@~3NUzGyYv~ufTV5XOwG~}yn7vd?c)bGL)@vo9VI2(NEgG@ zWFl+*@8fU(KVc213nV62g6yuxUHL@oz9M7!o&(#PaI-(Y$luGq*wy`JCI?63k>uWf zn(A9}uJxCtQFB3=7R7jJ^DEp-F;8gDKC7&I7Rf}X6Eh2^5f-wDjs(&L||a|?>REM7R}IQI3W zFoOG+p$NpuO1ySr%I_Sn&CXX)QH~mG4j^PP)Dg!lNa+t*Q~T1Ix)W zUOT_VKPQhRtqEKwnuv za2wfO8}eiITCL_{2X`EA?tQ(x-XT6;Txo0ISn!mrtgP|Z=OO|be`ouCQ)*dBIz)@7|%>Z*`k!q!apd#0uKH3v{XZ0O;!r%Y#BO zM&)+phc^&Aq_h(LU5iY7;Xd+l7_PhzkdxS#*{n0u%wg*xBpscNxV~y2O{v7Y%&eDl zBdzC+3#6b(X`_p^>Cny*>6@lEb=QaVPpxqJ15u^iuF_Y&amH504nK~KY3lB8F`z&G zH3ofqJ}#vQ{NpUx;}dxf-5vFVd29tA6H4Ez4efB)Bh8$n#Rc5?yqrBJBvazpGVbw3 z((()IOAO|Ae*u>+r)stEu+`6gTMA}18=XCpSJ>E4Ledu1it=zm%M;?-Gb<)`s7aw*D$9{qstHzh&xb3Q@FNiD@W-m!0RIkL=lm z(=iFnOP{=r;~4R6-ohap0QWxpNRRa>;{#f)flq3NY^wuXjl@r*$9CSZPhlr?gjmYS z;h0a}EpXlNh)G3^g&LsoV*ogz1`ugj@TV4==qcbj9{o@YZp)vG1pM)IS;rAT|@IK5EVG1Cy) zg`X@x^x0UV<2MR#>Fn%f>v=?QNIDL=CX^}DYttCj{Hapzo&b}fJ)f5MU==6S%9%80!i80d!VPB&&MC{ktbhNKkl9w$@T!)(z|}hD z=yZ6=(nIlz!xJRb97RA7NDjXuu|ZHYFb{Z9*ijjh@&;Y%)?Nt{PJKNDnisUP=gNsd zcO-VuyA(LsdNw31$cVvKAZ51Y_Om7AUBg0~fp}YtfESa)@A3H?p(7+P5Ca~c{301h zIB@+5_+F71SLc&YMMSHGCJ3q8xZd8ZrUk-%mt#bba-Kpsr%S5PL~!MbifQ87--a8F zr|zK!ST=>ABZisW)eq~^L#rN|rwn?&z176y)ne`9LX(iJTTy0rLNW)TQ(9@s5f2RM@EwCdcN#*G5r$4nuBpL`Av%+r5d{- zl^tEa4Wk|P+Fx*4&3O7H&?b0t+hBV{J=r#zrF5b(O1~qo0;=z`M=G|pT8u$>qE&T zy-R%J^>x;kSdW~}z$yOk1>--i``>aS0&}Idrp=+vAcB!d>d4jrwFUPbF>Nx5`>2fk zK%@UY#!PF6$yEaDpX=cInsMs zKd)cMXMdd(T9ZSS+*P;GPn_qWn{pA3nDd;fuLio3F;DChf2`9Qwf@vj0h>frVeIpL zI|8pV{OqpF{Y~w{$UDgTEG-KO{N9^Nr?`a{0(Nd z|0B@5(~ODTYPo;}xS-2DBoI7_@=x~u-MWd5T|0w4UB&%9iTLyK|50oB215S!Eg}k> zR{lm1|AzPd104e*+l6hS6QVV1%9TZ%!wQT_zf=~+q&MwqThbd<@0~svT+X5|8Bg#~G~ek~?4p$^Ve1e87r*id7}I6`Pr&_cvJ+n}u(U8!x|3o= z*H@Z(NbSR!n2e@R#WS3Gs1YO|(?L6s{Ja1nmssS9;xfJx85?q+G1L!#Aro5yyH@&I ztGxX1e6@J$*q~VW^E!+&i~wk)(|p&!ar{aR$;^BQXh;HvRQPOsm8WtHFD&^YN#~G^ z*GnT2E=B%i)@_Cho_GJ2!2i#+ZEilOhKzqSw$gH$+k9f3sLD{VmBCD#NW*+JDgb#k z8l=Z48tI&9=?H`LvLgH*&lhe3gPqGFg-~Dd9u839VHaS|58Gkmi5WUVG;KyQ>sN>< z$Ji;vit%Vp4jgK9nzUglX5H?;Sg!crU-Qb#g=1^=ZX>|t3Aueq-1zm$raiA?6Cb&h zCt5eMCllEiIV4b@hik`Q4s62|8y`igS7*ms!1!ZjXy}_&OD7vM5d8%&rC97mG=eW}^wtLJ6LPJP)UhCwGZNrfA~Y3pt@} z#+1ygEcG_d(s;{JHa|?up!4glUesU`cVTR1W4BnNdA8S%*R7;q{`&-W;9%EfZq^+UjT5PVFi(MBHBmRj))n(0tEO4=5_%WrO3f3)$+#BwjPV+v z!Ys4az<-Oo4UuQA(-t*t3P{E^+WQqf-E8Vmf=8B+&&$55`koVZ=vu{9nfpfY8YJ=q zp|1&Qe&6HS?y7a6aPew08orJ^Mtj@bF4KEOwF1?WlKJY254nxxNjGXu!x640Pu7t~?Jh{>e14@;z4ZQ} zkP9Y1G2c1^Kf*Wm=-XZS6J~syg^>3%O_D1vY1<7(vTr~%IqU(=%VJpQ9FpPNVC)f* zbQ&XYdQ3$h>vyxj@Q%bi$Z#vIhRbGtdo};W&fn~`JocugXNrnp94~Gpif=>GfOpBy z$fTEVY36d=&QA!# zN?f1`Ca!Hz*I~i+2(5k_8Tx6nuQ1(Qa`}xnscJT?J_~^6ie<)GH|ZNq_I@RCwhDl2 zRz6lMv@PfKHXaf4B0=T-_Qklb&P0@kYBx*L&^H#SGB{20%B7Ak|JMTRW_5VCy%ZL6 zuzyqOlPlLLga_)%hvBM+O1c}b&&Ikc%DD#YuFD7QF2f_4_cLxwiNOSx{4{w`mHON? z5RFST<?SSJ6e$qZI0fx@ z8alWa{ITIbe~Wuy9K3ya?G8eY})hIhP|&7`)sW(#|q!Y>xtcL~(S6BaxPpBVv# zQ9_UJ-RVb5tLuz}ag%h@8(ly^naxcL+n7AG_WTfn(QiBDtbWlA=nWfe#84@ru`2Xj z^YH+l7V4iEaq3An5#Zu;^Do>GJymlic-xP&lu{Zs#o2nuI-dZ=jSpU@us=OKyuy6? zw9gMo@>Le29eu81?2%;N>sqgLdsMuIarcJ%y1C-TSe%GB&aLGxaj|XRV(=s(dcHdI zL(K$GS0-lBijL^1lHopw)=E2T z#3w1lC`$S?ivW1k?N5C82VDGzFfUdo8{B?WS!;5A=h$S<5>s0K8|?72y6C1^)-5vj zoKV7UgG3LpT`S%EXVObm2F|m_QcpyR1K>_~QnpUItdaqFZ5Be^k4rom;)lE7$5Eo> zq8fVQgi1@otR!OxT%sjv%d_xvG%MoJfqI?)xSKaet&)20`OJ5Tb8|11xFHT7i5#j9KBy8X9^M5sAB) z4Cx~e-a9tsa*z;%o^JjSvL>1t+$C>|@!OP0z`H0o_XbsdF*1>J?B0JZ zc)ry;qj#LDFppGCaA+2WOuL;oPAD0eSG;%^Dy79~Xx|pC->en?a)@d+YL)`Ng1ww3 z8tI!R`nZZCbo~rMfdDd*Mc+)p6zT6R=hqono*^S~ z-0BeHbMA=lFr2&}P>BA{wK5cHfa6mDu}I6bW5BuaXcG1`b9Q_6euxscEBm-=Sm~(!-e~gPfG_WXSI5T0 zQm9afSer3YIa8r&SBQ<+s=|B7rs)fB?@BeyX2$T~w9lAnt|3th^^Flpb@Jt$Wz8AE)i=t0&+^iLeGNlp2IU>eRwhGq>Hf` zj<=1e?p$`SRcWi}r~udHz=3a4a{YDP%sR|Q$3r2+wqAR$)CKANUK_c1`{8KY#VIK|gzpT^_3tq)=ruB&?S`fjrMiSF=yjDdYP6xVHT}z{X{LA#-*N_D2-{gvF*0$;` z`~7k0y`GUhK6;*?>dt{5I~k>~81arnn?mscSe?MsD@{DXT20Q;QWM9qs>J3cKF;UX zVf?81nCt{rhVwTq_C=P@sdp1gmNsu01N)k8r8M%P1@|4P-`^B^B z;#T<<_r+wU6#Vz5fe@3~?tVq$2inV;unya$Ga;5s)1q8AflG;(f)=uJby-Sb41Fj{ z%AkM|U=HDcLQ{jLSrAmfFGF20yM5wddFY?A8S}V-WN6P!kK15^^`)&HHr(O1yNQ#f zV22`l`8^IH%xB&qhdU4f?krWO(b*Zgok9{5p=mmBDu4bi*Uh}EV(xz7xqyCv(9Dn( zlK=I!`ETl}Vj=OmZQ^WgJXgKuhd!QWVWDy&-j8JVEK>k_{57{-JnGp>mRc8Tr{+yS zP-|^&$17RfZ@wVC2t_>oZBhLz4+KSr`ZA5!^NCfw+9mUC;Q`6~(IAFKYGoR7Tu)bZ zIxgONmXIoj4HP|0#ing-SRJL~oOrpEV%($Xa1@naVo@NX*s!4N#?$N3-*d*07oIV@gF~3N_A=%4-@iCL z?F%%G0|!ot)WBEsbXydn#Qez)Ah}XNzIl@i^`s}Oh8CV@Nb)K1{nQ|uB+3)3?W}C> z8gO(r*$*l}Bc*W(6t|_5OTuP`9mjsy=TseBMz09A>8c!S8xWr+7HF(YhkAL@o~%36 zCsFxceyzKv@Rhq8h^ZJ~uhN$<+wy<%AXQn#S3yK3MB4FR?*u3>g&{`zot?YP!QZnG$NMlb2@Qa)ANi3r-h3n?XtK@vpPz_Nx+PrSk(EkExdLoHI$T5S zda3X7^L6bolE(RQjhJcrKhKpsR?Kohzt9yO0^3`xmuqa3tcH15#FF4Y1@Zwmby`-s z@yq7&Nf1LTU5lDpuDOcfq8v{AuvP3jnXSWa*ZgFyYv^KK6N8vRp;^zGv0epw=azgD zWb00UV9e>wHI*P<{bW{R<=@3Ld8~U+l4-w(b-wq$R%-mg$`XvOrxzkQ^05TNiQS5h zfnI_1$su#k4c$Yi8F(_7ul^aw!diB?x@R-vpo}hD8GArJH;-PF^ zJ$=SPCaXC!c*5Kj<>07*V?r!>zH8tuPTzS_6?#GL$9vu6k^GOL|> z6;_{Z=t?khXVJFs^_og|Dr8ymz0V^}9lso1Ko_k&`1 znZCN_O?s25q;e(CemZhkY9lybt@Tl?z2BoKAiy+zR*!ASCwmn580Wv}7gvIfm+*6^ z!-NF39(zi8*S;dbq)c|(g1J=pH*gxL6W$r+&&%vS7d_(^wC>-s?K*(MR{$}_W(X)d zH0K($1Y#Nif}a4wO+-wOUG-XA*YNcVJt9@aT2bnP@fai0@cc&T`LAK=A3?YwZzt(c zR_9B*ez-iV+w<|KIqdDp-tSdr8Mo($1TU4B45zr{`YgKqbuV;pS}SHlHmsh-gZGr? zLPQVSi!Dp# zCnR!E3R&^~OD5|DB!8dJ>%9FXT=GcI_eN5ixoQPY2)=L;*45P$N-|p2Nvd|#-lBtV zLr1@+rf+#WJ2BHZReI%-)nY9DN!^4rbIz30$AjR;X&i0+xT04lNaKsyzw}Zq&AS|O73{|g0XeU zr>N$Y@X{hf6ubjr9&)sJt;%T^?};XiUebq~#KeEvEeFb1PZBA$VO%6a!bS57TrjnV zDml^D7p|KDii`ck_O5h)Z0T()E3bu6-@*1d8gUbU%wmMgjCTM<7&&m@+Z7EN^0m$< zyU5GpF5=xRZa2U$s1PQgSg`GlOC@myg0ZwZF&+yYgwi=cYb2=0*6WbP)?Q&Q(J zP78UpXD@U^_$8#QKt1>eu%>_KUPF?<$VYZ((e<-?%uY+1J_?&Z9U4}Tx zLblNJJZouNiL}A%`HbgS$OWFtIt}pGZeLdyRHK=>YHYpW>95~v9j>!nb_65`PPGA$ zLt`g3gSmlwa7m4mn}<|JvPkMD7tb|$BzN?DrP|IMGwo`nntj?PvEne==|;0tZR+=V zuH!wxhQIm^J?JQIb%h6rmMb7aR>lQp=b<8(=1R_BtG=cLN-(;aKl=#yEwq*4%GFhg zuNa|(^4Dd`tbQ1kbExJp#jY2VFs*6<#OYsG%AGy-ijRSAfRgGdjnvasKq*Bg`&r*e^{YQd{RRPjLL9YlDOj&lDXc3Ymrp}oShia$ z3R;T;dP{s6DkKTJS5^a%yrYMMZvK#F#BU4$I|SCgJUE;%&AOH{z*YZ(umb4MUs^`} zpkmh0~lJ<-lc43Ps|1hV>?L-{;q41-?{S^Wy z`lU;|kHGf{-PxuHI2pa#UlDs;G8PE8UOh{6HCKLUl~|P{_tbsS7JT8KjW0LNXQS|p zZ9z)q^UzPHpZJqA3*omSx&}-?ujhv0K5pJe2@JZ!^LO_wa*9f*f8Im9-$i6uAoVw^=#FZv7f*Dr*Equ%U&d;1d&6c^z$%XN(S%|9eY`>@>_C^ z7>C>_;Iba8{ep$Ex9sg#MU{+SExL{DwqF5a_v;;vAC9&j*NRa`WS3WWZ%CIg`64L%JD(d+UPuh16>RO=XS@8bgP6#`x7GM<95Vh)_V zYT@G}Hx!^g$tOa7JzGA!xj)Y{2_(*g8R0&JkzEBAxj6aX}Yut^g#fi1dD= zG7HMgP`F+oVfb4?EY)e9cwflLjlf>KXx5^9iJ_Q z^rGSoe8q=%!Z$V=K{c_ggR#E*X>FF%taBmy1N% zo{c6UR8%vl1Uc!)5$-Z8XSRv4wH3;rZ~Oiz1r8NR$VX`6=TUxoAcaj*sC2fNN@TFf zQre8gWV9$xdPzQRc*o_a)OHAMK1%cB*_EfoQcn5SYL2IV`Nb#KUYN`R|Cw2D=Y5aOEKTk!vjuLF z^{22^eBZ<<7BBrTZc9FHlZk8ThM-ut!#>~|pp{a+|r|z(-rlt@p?YA=a5 z1=;d;6`3D$BkiQw#@w@is>+kxCe;*BprMy<1L^g~k7t!7$elIq9mpe|1+wSz6}dFW z0s+_Scy(h06iRkM<-aN@_}D+MX{rg%t~J6KE4#nrrUkDa+|YY(BpK@vLW^qCTp#8t z?!>vZ4U2s4>=(Jh=A*$Ct2*x8KKH$hBVQk42GKPz+-Zd`0!NBDuiEvl{eIMo^KDu1 z2-D9YycGR8)p9chv{HN<6sHv=Exf+GIAi(fl^x&A-X5GdTrVQ%i^WA>Vyz$mEXw&0B%Lc8xC_sy3gc#2L8AySbf^QmdY=2A zIY?ff9|(HJ$$@*7%V=GmiSk29_y_X{afwDFc;IuO5qPXU(gtv)^k4QD3--5kBZ(uk zxS3KqtV77Iy1Riwb8ervZ`xL9wXm`-Zc~nQ;rsuXkGZJjyC+h<)|QyKV@BXZzY>?% zb@%wPySR8HXnshTSNsmS*`DbRlB()!gTS}F6wdRqHKYrk1qo3DoRo?$OX-x-r_THF z!iYEqn%O8%&#oF!dnNY4)2B?`D&-UK-`^p$i+z5YxvZ$?#ssPr)M(`ZimkgNi8ZRc zF*K~oPQ|1SFUIE^WwD08y;z_{p4%CHm}+{qwukn9jnQ4q+*N%of4}dk|KphlNKetSv;~%6l`;*OtCEsug?_U)Z)4+< z@S8Qz&}53okS;=T*9uD+hO!o!nA}X8fzP@D&vw5#xiN2D7h=W8xI^iQop?SZ#`$z^ z?+oAfXGZ)5fz4Nk2d-Pd_FAHn_si~wz4PFYmVP7ya~w#lL4p-4d=lsgj`sQ9yS05G zS59_z30-06XPMeEh8SHGWowBAbthA$JDLsaCiC4)Oy&a0BBJ7ys#GQELGW&P_f^1M z*LB6MoRbx>Hn9X)UfAV1p_aR6h7ON;>;gLRCy0}m2cMSNCfxk8HP<6#(V=s-(5Y(= z;w2jV%gW%+zr-dEWKJy5@G0d6s?gX5dkcd!6XwU3r>eq8lcm&7n+sRbJEISUSlmJ7 z1)gG4&BiRfCV}H#p`Zw=jdM*w@>g4^Pi8T&IN8~7T`YS#n*iI|B#8sOqz&h<@_+2k zD*X)t=?GUFL%02$E{#3$VES-oi&B)mnyj0u%tfS^@sAq`Y}cjI) zaq5$HT2MR>IEjSEg7sq6?2?0Rw zQPOo=6(!PQtA0ee^We0#TNAjNfj$Bvbg`!9u&uQB;M@F}a3KrB$u5DpNs33K!$OII zoeP}c&y9ox^f{j$%|D+Fb8pue3c{r~hZs6d?$rlP7MEUCP3rv(3IrZ9d7P>F3Gj|J zEcul*Q3Bd5pFZap9?ul@!;+4B=-(}!KbZtqMK&(=o|kYDLywQhxkZrr$Fbs;&EfxMACeybRY(YwCeVj)`X*i}5si zs{{W}!y?rdaarrK`P6ST(s@9gwu>lgIhmC;hj^#QnpS0U%XdHZE=3;cJ%ZsGQuD%t zthNH|C4Z3{mKk9rkMxnYQecRo@!+p{L3~eW0+6VESR?>21D_w^NxdNQNKc@Y*Vb0x z9$;OXpo`kahnDH#lWBuNpvG&S?RyUF;*%9@Os!Ye+@x-@_0UM&yFxJ&P^t;QbJP0E zcH`0Eley*Rc0t|29J*=7B&6a{xwd%FW9*rr*fuQqD0n0~Nv#@*z+ZG(tLkJ*U6P-f zhOo6Jdt+2?*ffV+O*nG-yMr>JFox#Gxl9aQE%c5ddk2o^wR!3q;;ffqK7+`L`H=vR zpT<5p%)U*rAUDfjz06&#T3()F9BKn$V1`s@l&Hxg0l*tuco7*)1b2@!-+I+=5|qzD z35envpirRPkr*>MYYOvEpE z@1g~PnU>_ZOG3@I1|Q5+6IBLr7UYQpjV)Tq1jw0kSUGHdb6YkQvMl=|cVvHK%t^O?l4*zm-L6-r24*mTbOHDVlp89P;pLC0?_6v-P zJ2S2jn^?JdXKrZ4CsQXq+TXJXiXYeoUB|)YbqRIrL6T=ScZdyz=}!B!m)VJ+W9SZ& zREU}tsLYUCiL4e$1a7-Cpmy5g+S{{HYxC5vX!;kos`iySuO27-n}hlVQYH-|tpSmL z+>m>~!GbiDWzE0}%6LAhgK^-O3bxnSVU#KpsBkGNsQX_8?cC zBIv3Gy*7D}xL=9j5-Qc{zbV)p{A_fBg+lf7<3LVvevf)bs)e26xLM)O|xW%&_Q%oa~q zooN>5D`}Krm`(m6j*KEDzx_Vwk$*k(dZo4C6OQxYT9hLWfn-j~w?P9j#bZU`*{*xG zenP@d-9#JQK}}9ApmN_a53=VSKVKna42+eQy`s!>-2JKHzaNSN2Pg%v5av1e{GyUI zaA7M3cN82|+GyJoX9uQ47aPMVA-8;6ih+5&aT;*m@7q7c#Cuy;2G@xUF9i7M}{p!d656mE{$&A$z*jSH&JufI-(-x7q2PxOH#`C#BZzxV-duEy*G2| z?sgKuU}hvFt$!|8EmFi#&_Q%jxbRB>9ZHe ze`L8Jn%XG6RR9AW{SSJtjsTMgU`H`@iGpV9PAu9;US0QJfxYxAAUkk?QkW8VsvP$? z1+6GAs+4e0>ov9WM%E~-mT9M=+a6^ICCw<1+S>dbgQsr)`!?FIK#~~!DKhk&)7+J{ zbS5Fw@erGSPk0D06y9TXPmw)Yt$jJ!2Pyy%QTml-Sk)`FVr1e7ccxltT-olRHJ#H^ zDuHTiO?0vWv`DmAybh;m@Pa@#u@EpijUAV#fG$cWWk)z@>UlD)uu6Q%3N*)93AU>d z)&zLoMOZh92=ylwPzHnG&aV!-TuSjcHHO~!p}r9k9N^BXh~U2`pKVNc(;wGCv9KUR z=a>XlejR=%sa&$qDl+HIcJuy~P-$IG0oMF$zAG+OK+|hJB%=0lQaRz` zyH}+@yq~uI$rZ9^6W@>`0t5RQ~MHywN) zi!rd4PlAE!kRP?W*87S+3vweG)XE?y1Hq#eIVmylZ&@kT8Vd#Z^4}=M$tc$cYC{T62 zWTl*Y=E~}Z!CN-=Lgih+-_w%&2>2r-ACK`{KALAL)R>}A#a%y_uO=iKHm7OY@$Zla zxC#pXd07EylClGawiaUqKj4Zny}iCW^77B7HZgnf&NJ@A1LZJ9HT%dTRH!PDWaC|$ zeQC}!iNNNF7CTGaVN2>a6kTjXg+(?L-LPNEa?M}{y_dZX?&O46(b!R~KrlZF1DBDh zv423fKT?c5BUT%V-JbPOED&4v8UUovoO*WUmVD`)_*}3m8MHiegCy^+D!epK+crTq{Rk7ea+)|pI{oEb^7+U_-pGsq zyHdXYb#>Um>Tq|v3@lM*iddV}zl0NNp8gs<%lJ%WdSjhB!B!mHlFEI>yupn}??I9c z;Wa|o$zkPb?S|%~K5PhEcqCB3cPQ6#rkU7Fu;#V!)rqA*h}Xd*MweP27cDY z-VX#+SD^$t%io>V_(zU@2HVm6dzb@7Dnc`AZl6-AIyt%TwpEl{z3;a_xinvY@B_f& z06htTPd+d1Vg9A~sIIV1|N?U;X=8$uM9+wl68nO{ssn@?{;rgjEH2q&d^Lx4H9! z7us8HdM8+J%)|Rf`A-=lFQEK8sv4FV-!$e_kA1UC;K?BDlJ|FyuQ2~=a}j(h7nn1X z`+T+5x@&Tr(x3;ww!D25$_8PtfMRyC9A)>M%Js9Yy%sXpARieHPz+KDtH6@N94tt~ z^rZ*AWWP6K=r2p@bfTF zq4ZcBVY?DVsVzBvffQrjf0e}VFNq&ytV8a7AY`ZRi$vi>Ru$!RDk|N}?ttNL(NE7C za{+SjKQ7y`fnls%jui3Y}ys(NEgx4U^ zDyu?KQPFPA@r8LrVz?68Q9WOU38=^N{~101I$mk9;AI39h$}gE4N>?do+wd38zzcw zfRc1LFm-3;Ek%Qxpykr9QRVp;M~1~NtOfgUM(EyOQ+VJQo3x2m1P0m55_YYTTREL( zPLC_9?f>`vtF9$E%!&_Eda;1Lj0k-G#BIEGMBIS+Lq~vxqjc95RBch+qO0*Pl_L3G zK9XyoSGe#-ci*q)Q-D`nuZ1{%1t` zeVCY-xFGA82M49(nIWJQ4hWDLe%MIN;q5J$N1;+kr6J!;`~oGhdOSmL7UVD{i`>cS zDX!`q==J+pvhE9jUy*dd^*1?Q%Mmy$n?)fM+u%7Ukn7Y_%j^oby9880He~cz2SPI3 z3u9C*VF(n`Xl|+Pz5D<3f;G5@5IWv=#c=VeMe8eTwmL6^Sy>Dl%nh-h?X{uza7L72 z6M}^jDMDN=$#<87>}Lf$^6HU1kv?wcjQV2kT6eats~X15H~v5N-ZCue?EM3F*Huh*yVnn(b8ipE}VP>8)>aM%1{?<3o zi|2a&Z^diAbg=y33r!9FFbQY5}fbz{dCjdD1aNcHUC?M!JzOtk$orD0X2oo zmXFi;joU3#CroF6D|9;0A$17)FG@I#K?6s#?%r^-(pxiQ&o!fQ zRQnt96{Gna&MK#D<}Z^-gWEFz2J(eV80^?b80y zu~pOtp5w9ec6PBja&)Zr!>_<@l}0ga{LtMVup5^?*h#L=&4p`ToFMNUFuXfC?uCA# zx&EGVw=3Xxd*-Ae5<4sn+|iGK8z-1GDXsG);?b7}pW9y^b2iBUB>!L+Is}#ZjGfbv z56?)*qt#cHj_VVd+E`9c<7X&WK%l$^{@6D!fs+rsySv2=8@Ij`7}z(n(!MPeVx*vh3_11e(UWGL{mw>YM^_M2YXMFo)gR>1NW(qUV zhUyxF>~40Qu2(Y%p3m?zjkjUO5$EJX`xU*sVtn=g`mJUMUx??11Hq?*0kvU5^x4cw z1|#XVnYQ5M`+Od{hsc3)&%z(|_Dd(R`Cv%tI3oXvdq~qZds4aEeFa7RG}{`Mh(AL1 z-*FQqPTwoNB;+=i`HK6?+Y2QwLx{`JJw7Nlkm%HnA@o8g;WB@;fcN&}7wSccpt4I* z^;gP?iC<|s`_dHdDW1U5&S9dpC7$r*m-p?v2jpQt{;tb*lDZ{NssJCYPzE~oum~~8 zh4o_$Ol-NruUcc8t+A)NfRKvxKKJdb00`Ircu=+^ZgGj~R~02lF?kDKg(WohS*^=b z$IVJ&x1oZnP2`6%ReYb|Q+InXJr>OQ=?D15^+~Zo5HfFmDW9e9d4UPDrQi=A>zX#~ ztrrJprVu%1%Nh48A7A$Ox!3YhQvkDY&10hUBqxtOQmxcjMzZ{~YRu*t>Mq!FcA#nF z`CR14GgZ`rF+%#_54Nu+D^t@;dt=#ZHU_T7R*I%HdolaQEHpJUP?)v%XD+TgbL_V1*O7sZ_Pjc%W9i8E+^qEUj)N@m+G8FcweA4lwg@fyO%57gSct zK%&ka{JGo2Qz5FYtmY$Y9-ih%&Bed>pUcuZ;WZ(oFm`R@X%iuEcH}r>`Ll!+fL^p9 zY{s)Ck$q|Vy2ephI9P<@u%2C zhNJnC{rH`n*Y#f&T8*cAi2U3etO`bzx-72)RqTzfYs>z|dQ{;F!xjLiJgHYEEGwrx z%N~?WFCeTq%dZk?r#1u35D}5lr3waFnh+{a6;@-nr0u%6~V8*iU)*-VWq34&!lyyf8h*GxE}cIVQ5SwRKK>pp4rDY=nE!m=B>; z%lDQ#&Q#jilzDsP$pt9tCzA1>>+GH?1rsN$7B_UkyZ*Y6UnxkAVLbhn6X^P1{I~d06&zaW!7IS&t)8>ZWm3wlt$MA0o){zD+uhCPvc;eQ;v0wQ z!gP1yt^g|M+CyO8Kax!6W-rFjfh^h+DqTK#*k#_tF*!T?Xe&7^x+Sl1V&jf?WX+aw zB>^h-C6s>I`f&{#7)W+_tkOx(nuC+KvdaF5FTbP?Q9&F+5Bq+z>GBjLbsuQq8HBjK zvG0EKu(hm1S_! z6pB*t)_7FR>Sg3p{dkatsiWH89~N`8+_Gh+mw5l!al|7)PJaDLsG0JX^|e(qtj*bD zPZu667$KE_O$wgvTg?2e>rSiDN8^mX+e6fczqAm^B{vi5t*puzsk}Ex(0X84$)(rSF@9C_WJnw> z3wbn08$NWl?JWg&dR9fJhx?Vr^|Bi=n+|*s6(5=E8l0b#Ud_4I0lslt?r&Zkx9T;d z7=^$h?2+j6V~0$b?0wG~K%@|07|pj|)YfFmquiPkb7%shEBJ2Xu)!vL6qYqWk#Co% zdP7&KHuojr!vm*ER0_Rb5!ZZ8b8x0vL*!k{^&!d4E59Pu5Gu!-*jaT>Em*>{;#nYJ(wf zEOKj^9G;KcJ%3v`G5`WT%RJeC#WIVrhR_(QZ@1T#lfqI zT|Ci36I0c;J-cZhU`E;Bzi}|?u*=A6W^bd$)qc@4Im<%k{8xfWh}AS9O-d z@}qCS!MLE-wu{v#dQGwhdaa@MR3DJGhg|CA4{WEd$zrOZS7VSB7y$N)W zOf#BAmEO)Lcjo4d=Y`+`W)!-D^WOaq0*cUCTrJ1IF^-xK$ANFX7-BK~NMHr-vV z8`ANy1D!z5p&f#N8}eYJBU$2C5w2QZ`DzBo$LibJWogE)_n63t**HENcK2!$S;dS` zd5qDw7e=_Kp6L%QH{jRQ9OC1zGd{Nw!$x~xLl7h=z<&JUvu8i|qHBzTjvKX6F4LSr zz!C{~lX)ohK9IxdgO@;2!Z>yOHK`6@{i!>9ca~1t=mD~c|Als#9UUo9XlxRO)rKwy$wj_^~ z>jf3;+0B*jfko^sFa+FU0<$r$JOU-xwonpxpY_c}`>y9o9C8?UpN2Y7R&Rz2VtWp1 zcNArk-&KNA|I_f*e-!?%uP1k7Rg;)FKz$n)(e0vP(9f4|mx-A_0??TjUUm8JebB{H zci)V(jK-FpQqCd~Z^8_9ndt2g{`1U=*jrBG(QZH@U9F|#$I4Zvx&md@oi$DrJ^OY~ z`QL9Glw;g|Tv}?9nr95Q?C862Z~Y)p#%nsQ$0gdmIrsg%7c;dRn{!^m zRQ=(wuSpsG&P$EMfd=WR0@K5hpd1U@krmqWzmcU$OFNie#m+iIW#`0|q3XKC7bz6q zW7cq%Sbh0lZ=(n@=^^5AfVarnCoU+SYH?3G6E2ckBoW6CB3QDwIz#ustmW13y$%~C zNl1LeyXG|e&6+)nY*tngAg|A*bkm;J7EBuu8KEyVsf-&j(PjwmDH29mVt2!6J??oW z@fgHU<{cbQ$AhtV|5}P*p6+ZeWoglRlUD2nzu37Q4(&@!f-E`(`cXU%OnLVTWO0<= z+X6S^rz%&{BT~&<+gL6A%lo%uNcnwwrd;%wo1GeNsh-Yc#eMZ9dhw@D zm5LT$JqFcgQIj?}zi6)#6B|fr_R-y8>?5E*J_P|VLgL_2P@sx|T^!G1(l0L9&CwM+ z<+iae*SDNWLQto`IAYSUH=FnE!C$|7PmsoqVzK+)k;?FM#vjI_nK9A{EDkjW?1ku~ z;ZeOjmAky*CLg)dXY4dUHTm@EG0Q{lknsj|#xYAhudVURj#lx-4&JWz#by>F?J*|( zEgSqXEesUXE#XnE0=HH3Hi~K}>J#?>hHOg_eGuD*&Tv>k`Qf|VVH=MIAv~m%GxVCHHXs!E| zrb=a!7^gz|z1JEVz45F-Ya(R@e(gNIzsr7W^T{Yh7QQ)EY z=aK+bVHNh6l}%vBR%lg|dcUDT*-TqFm4bk;Yr>J_<0Df$@9mL7FZAPl2tC&ZyrI$b zQpQtxzf&KodY5^}=Miq7+V@s2U7tI_D5thxP9-?Zzj(@QMccoN;B6z4-p-3LYu(Ny zH$wzAhH#B0JjhXjM~u; z(9F+C`!$6Kde04{4LlPOv5H*H+jm?Hd>Bx5>*6$^z9mf_FGa(LZVL&ywAeVrw063g zx7DQkcZH8GV8A)v-N&k7nczH^dyG0`wXlx^>^$LF_X>0(hA^Jl1bNis?}g%M_fbd= z+k2$!$m0P=xtxL1SeuE;KXX}yKMKwyo-qw4hBEgP8r2Bv7;5~qC2_4bkZ-by?eZ9@ z8D&R%w}XPz-Xd@5qtV$|vCfm$p@x@rA73>BRrGl;V;-l}#fLKr0`}2~2FeFIm70>m zyL(N|wxbSp)ol;C&b0ey=>t)E2hWBem?shWc>17TDRZZXTKRXIiZ5u!rz`}g6VIrW z=Yf<56UA*e;~~49MB3emWc;20C2=wnLX07L0Q^N_Lfk@7=rPBs~uY?()~H`9ZUpbWJM8A2N9pA%tlZG#ie%Oe?KRz#V|>JfPJ)C%1#z z6vX=+p+BL6FTW(d)bP6a9pAC)1vEo-_`<@%7IP2CJVa|+1hNik&7BntP67lVMS2GN zscyZwk&;puMJMYtNsLC}@O{e+9=#}@hFYhcrZ+GZR zGlE{1bfZAmKmkm+ybbUk?UtJDr&=Dw2t`gFtEi9=Lg3s;)^ktE9M$bQ4KVyDlBM5H zG2%&oPVBs+z#YYsBQ!%B&Z)5r4<0LV$hJNnC?s`Qc{h`}%Ew~Zs*|{#Ce5up;t8dj zFSb$>nnFCXmNr?shY?TXeXjPoD&x&_)bBo;KNz#OLgq|r@W2cUcKqvboLF{&U5sYo775B&ZwZmC#1m}wYA*t` zHe$A^H7omK*J=dz;*?b)+eZ$$)*W!qAmHkqCe(V>&njC+6E|R|NWuTQdh45pb^EI+ zstO3(aFH=i@Yw8$8xMZ}E^6=@lDr2X$&an8PmSv2Dcr)M-B$n`Lj*J4hk~^vS6w?c z&v@LotSe^nR9DEofArQhNW|ot7n8I;FMqB2xuImPd+!Ka7p^mFPKN9&a7Kq6!5uSQyjXtaMY@3mtZ?kC50F;A=ImJvkBEI#KmFVXttfZPcKB4 zbg+x<+oujntR9u7|=2;KViij~`D;jmm0FR(d@{;XylY zC(=VIr>AfPdFPpkdZg+#%&*qj=ogOT7{=Wz7%ml(C$)UJ{jXX& z8vVhIJ`^;tI)~N;*T>RU?OnaOz2IBZfrB1 zkD=^#0nAh?@x{RdrIOVF+hn7#=Zp3I_6yE)$;-Ci#jt^i87k>2M?r3S z`>NM;33q>{SV6@_m04buNKm8DBYEtp@?4MzMPB~`qH-7NHCkQDSUx*iOLw&wpQHp+ z+6DA#orKbg$Ij+O`!VftdQ7_ma59i_Pw!;wTO!u5PmkeQydDPRJl}BE<^IjEoO5J1 z4~v-g{;#JpCT!~x*V{o~M43)jb6w$Yo7D|0D3HM`Cq5kE2>12LQC(OV+KRzQwps;; zC}an(qfy#jJXSLjWbNkt#ZRP$(aH}bE2PxQ?44K3j1GYN-<@1!TklF)cNpE!QXUa$ z)&xak*MniRx=@gVx`Hr>5UqAnT5fGKqZw`A2>6dhw7rfe=c^dkt(RBcD`z$}-Wz#c zDC^m>nA_ltIgY@A`fhOLa^r?QKaH0n=!;qpy(5EUk5v1o? zvLaA1iP8v^IrQKCF7fc0ks!6}uV1V}iC$wwKj_X|6Cxf$oLuz_*2g>j{W z-!={0%Ic@{N3Ad?VSvM+WaL2zz!PRV_>)hw*a&B|I`dPt%O@urf2hq5e!jx7upq%I zTxdM%1;1KmkBE@v4mVu2TmcG;@6ZijH~r2Z6fJ=5Z< z;CoOvKnXVZ3hcWl5W)u2UVorGAsLH1k_BffokaM0cdKohE|Nph5y`}=W?aRl2vHi_ zI%X`ut{ytu;4B&Qhzfzw>Xc6Ml&t}s_|qki!t3A&07Z?S_*Zpr>(WQAyh;^d1pvTP zSby6z8hq!O;A{a4xga!Q)t>cxs4qZrRxiu@`D6@ ztn4!&F2JBJ-A||q7gDEMp*!87UiesFvN3V*8|HnQg!IBGAH>7T?Ti%A!Zo}$x@{jtujlX$dirtw5 zXR<-J^d%vhLM%QY!UJSZZ^ie5JSkuLN#{jYG#t#%HrK)4N{Rk};JzEi(rh!6zkjC4 z)a}9Weff-zO0Fw%$}|-lGXKtr|IUM72o`>DG~NVdn%UqxcfC?+l@;hET@uu=?FTyq zkUs?lylAL}C)!h%Eqi>0t zzg0zFpntmnR8@VGd@G;`i|*S64EsXMB+H85#3m9($*7zJGK|}}24B@CzO=u3es80# z%`Te7BsodD4)^4o#~fNx&&}p(he6zVQ;Vi!);#^+B_zHsEifX2MEtz!L>ubLj;QzE zF#}LD3GcVB<{vr)mq_M~EFa~K35CGIKR!N~op)G4UjB8Or|!-aYPMYT%I-KBRhJBz z+6rf6{zP&=30-t zWjhd!^2W5kgPS4@6V9e(Hn*)Ea`h=!{Evw81)|4FB_*p-A?1}rqO-{-6aT1@+{4Yb zZCQZ{uwqVQES2ly+mfK}y*hwaPN^w^YmJI&P3+7R(kdw0-PdxgDiU}_%)&l-H~GO~ zRCl-AQhSWP*O{NXJ)&BTX>ot(j94?QZb+N1CqZu-2>o9$EP5MnU4B3)ey#m;w|7u1 z2@0S@35NbC>q8s!fhXx<73>NHwaiGz#^7uK%02~^0m>j}AI!qdVMzN{9@Y!H$k{&< zPUysOp^OuEIxhw%(r~k6CP?c*8qupi`GG(IsM+XNYFUwOSY848@oyQzzm+%t#r}Pb z;{U~ne(j>bl$QTVv3;|me@JEizjC91I|J~NfX@k$_V)&#E2J;fO8Dm{;M?v1s0#Qw z?IN@ndp-Aj8s4shBR^aY__NBXEy!6IB$}cL9en?0JYG-2zwy<9@K$~ zu2Q<^0WyiT`q>`=A_UN*tbgz_monb(_%gAS^=;*?m4zNekMqxw(jDI@3K<*@(BIPBATbX>+3}yB z5t#Z02gO0Pt}S5Ah5GGSUVomFi@iITC_D-dIr$kjyw)FenCd-*kN~s|nTJuCcRZRQ5gWK{~7tibs&GZGetLD6>KHo zqjBj0lMm0?^z9%z9IkWAZ0& z49E)Nfi{5z!^FC|qz1(`CCy#YIj{uS?u5I9fiObo&ngroZh)Uk*gHM2aira04L{_x+&<%#y`HAh-KOeSXg*Y zzxVR0@MsukaWrd7R(6LRCQYU}H+^8r4BcktVJ4r{z$QGGc@>tOZxho5XcDOOH~e}2 z(E4Y1()dF&RN;KBRe|$lEAK+2jmAOXBm< z4S+%-d7NGLo38X+t3+>u8G5xvYhqK9NPov zG|Zb)dj)&6gOH(gwdnypTrUuybjuaVXpN{QXXPzcAO_%+HJ$w$*e|tYR0|}s5yw1X zhD3M*pa}jZ7EzhpCG4LOSU%jfe={UvwqfB%%sq&?l&A(VsC?%U_;MW&NfGe0sipJ0 zbVSqIqOW6#9OGyhM?b(ZoC{PV0sJ`=?kEM>f2@YuulBx1iE@IMr^5DDxn*0($bs;< z(JW}xi7TDL{G2us7yusR>Tp0eE+6=e@O`OeRVFJvpKId@FgVaV0M5;*VtAbP!S@i} zGQgN-PtJf{0sP?YtQ>om`F3Fg9vFGwU~X z1~^;9n3P{sS@98-Hy$$K+C9MALp31#d)<>k_HncOiNp9?A%@b+L&Rgih5Qf2LvGYd z;gML*m^CjU&&#E>13RWtu-#bXQqp+Xr_`{3E&jshn`@G zUiMbYk$DLgmhpe=Dp4Y;ydnR7dy~O#?PiBjzk0rz2f@@Yf8@I~6+q?+w3OV{UNCTD zq!K_skQW7FD4`!0H5sn6yH?CKPz$@hG90(e!(0%3GNJCmXl$ai_tpEMrcIFStCgO= z-|^nTCBh{YbnLE2#IJNj@`7!K#HTv}ATrJX>t_ByP`z7HqFnD-jmZSh0JKhz_uusW zf~P~TkzQAu7S@LOSmXk&&dB}?-~G_SfEFEMHdPZ7eB%a)DRsxK{fyn!>cwMeQ;Rdp zk7kOT)lzIdF7^Ar%@ujoI!OiEiKKvqLILlqeR`IHIBlvF{&;#`5TV4zBCvXfP^G8C zt|n!YJMKwKM~QB}n~VCKybclDzudfXIkU7>Q@}ZHW(31+hF_);a9Vd83j*#I&{O}} z_*elB8m#+*n@Q7#`xjt-qQ`T1M`&p!HZ?bDzKiV32_(7Y+Q00mTeyD>LRBZq3$vwr zJ~NDv2YSa-r%PM>=fp``Gs!K(6kFiLk7sI;t_{U*Wf$F*EmE#NHySGoi{{Z4a3c)0|#U+16LN$QMc>%-v zoP-d-9Qw!J_4f6ZDS28%u%-*Q>2g@ljFUxmDO=6d^(!XKOt?vI*daCMFpzMYR|MKN zpdx8qT#fYI@P+PV_2`{8VNlYsFD^MU?mO+1URtNOZ22dxSL>rLxCelw z?5|{fFFI7$s{>ZS3?B2;$dut+;6H-Fl8vNp7R}r$ea>?mAWVCW218QAoExUkRC?Kj zu)eyq%}LVMen$dB1|%@^YlqZHoCW~7LuxkVvb{GwqRddjO6U8UxlPa9>r)XFs^0_c ze$nE28h<^D!H?_0|b%5+BkecL#e*U4N9FBXw~)5uydCa%ylC$4m>Uc`IrSGYTI8^9=s} z7Jx=d&aQI{5Hgn4d_sXYp(fWxn4x=#!~yC+Fz8ZNT!O```@7Wf;*5KN*L=g>STF6= zJh+q$<3Jd{S3N3yP)&llQavX}2Ebj9&jW=nOS82(@qyDoG3@4w#|8Ol?QyjfTr*|3BD2l=E1cs4+7w;W3WkCTmR3cRH8TrN>8nqN|h;PhCD5 z!4{~)Dpojb)6Vyg?^Fbt@(=;?g!S#WPL<09TN|^F0sU0Z@G#_) zD)&3u0ieYws9IwLnV!U1AnAIiNt_r!brWb7R_jbo)V;|G18F@w-#pqAXd4?EL_{GG zx?@}sBstLXL^3iTVTv5xP02Rw*qXogu+_sqT8OB^B%|cx6_G!+Aqj zI@~O@SG~42dsh8IKU`PzjF_e_+a5aUxF1aM_S<;*Ci{gasbKJ!8ga55t6)H!5>*-< z0|}NC)lTy$g`+fZ8vo5j69wF@TD%nq?GQt?P}!1fRm zF44eg8XMnh4n*d$UM{K1Nlg4PYQbT*r|>SCfN%MmW|AGfmm5(EYTP-)zs+qBtp;t>q|I4C{YErX9b*{^?Sl(Bt4nt9^lCQkR9~~xTIbuaWiRt#- zIYR>Dfy^NsN!MdGoOjCzifv_{7#rc}42*~e@={$)j2OlBto(X$@v2Q&U4LX`S(}X7 zbnBkEKb9%+`;sI;wr1I%&U%rbT9*A)knv|}1vJ>}Hw&B-1#vmoJSJm*ZRNh}*cE&| z#Uia=j-bGd1>)hU(Qi0f#~sh59Fg^&C?C-pwF3!DsP)^=`RgW9OB_U5ohkp z-ki2z=Cf0yT|6kS7TQhR`M#9<8@$j8ob8?Hj(sq8QSgqr-HzK5Alc+?X;uW)Rq6`r zj5K=U5{}~rhs>R(Ky~QhOYil{>rG&NNWw{8UBd`gj8r%`DT~3>l8(*d9i`7Jwi}o? zul%Z4BQP)!pu#}*b9g?`Bu7~{=I<&+OcR>d6KdZh*B9|m4j1W(bvm7^QUx;~G=O;R zzD2rP0-cgF(^@R&fJ6vMjYH*g4F2OKsqBCB0koqaDK)g?4C(_81` z@Lw$97c3S4JtM}#V)`IL^HgJ~l&tjPi}yUCspovmU9JO>)3latt@n;qRB_Or3((L3 zu7gJS!59vg6E`3QR0kwJp?ox+&C7%{45r$rXzN`&JzXl=zDV(#f9p{vR5U%Xgj{(V zwCs`a-LCvAfA|Gi1SwiK=cBm2PM#p0H}UPdZ?eBPd&-R%EuAL`vGZt!qg_jzB7k?O zX6gt_?@w>(JAm#Yd?bkokZx}CukOZ{vR<*T5UTh1eKLYSXGTjoku^gY9B`0Z{FrbV z$R5s904kANm%aTp+7g0_{K=aFngJc&8EK%u1dOrKsI*o$OsO(C6bLpsIqjlA>CMp~ z*PNJ?LfC6>blNbAEpnF)SB_=ksBb1)q`kuHCH*-=vAapV;015F6@*e!hdo^)*V^e2 z7B{$k1veVrqbk4A$Q^DD>LE)97rbBs=g+Mo76wGMwvw%y@p1lK;f!_(zqa%;*ISl+ z$-zLX-iLI%ej7cXl@$JAZfSra{{2}X`Q=hu!9j3SKRSVz96Ccw0f_`SiMo! zWf*8jqmdKIwfgIO*{HzjViut;lorLwR~DDV!fIaSsaP)@Bzmc5tzMPg0GzBjDDN$W zYX}2f>_2zAB%}*87@(ANLN1sM5boE3=4g(8@et^(UX>LX0RsmpLbQ7X<5_vr6v8#= z636qr@reQ?1gbc%GOo7HRkLaeC@%zn3{*LR0mG|3=S=sYnn6q~qj~W>4D@R}{$uzg z3?y!`!PiBSiK!sEq5<+0z1iEGzs;tboK{lPxoh}HC}Pk1lCVn)wF$B%(V)ou%FagY zwG9Bve#dF{P52l92%ACa-gXv{fJnwKoIxV|WGlUW5 zVi9ZNs1hC&PeT{BDEM=v(lI#_x*^Oc#5Sn6?!BCG$pgPE0G533*lC{h%5=>-X>AS) z=_C%_0@Y{*=c$B^%<|$6#7`~+GC@$(vrUX4yKQEMmZ(P6rFVWHu2wGUfhG4DPFelALF@1KB%o=mU%@?;N z0sfbGN!WGH?>ENF%eM)mI4Y;!#8{H_2mmx6^y1*~hr6*LcYf>C{Hk*K(;gFu-c#28 zgMrakjY=Vt=NXXZ_e@vD1hO$#UWtqIpMP}4#qPQ^wnmYph>p%vc3q(g0=5#s;mY1u za25HRM8|cD=Kc#75|+1SFQfX(`S4&M7o? z21T9F)Zz(^W;Q*Dp#_tEe}h%i=b$W<>K~qTb0}i;$XDkiq@&KgaRb3Jw zmQ6MN=&=Hai*p+`1ZMM7SV}CS=~hC34H-xV)z~_O8K6-@zl$cfN<((M_cmV5(dbFVye?~t3J^GgeLs^3iInj2ppGd~wA@K3PyE>635v%k zTPT;w%3w~kAvoy*WZa#{kS25?6k9n5;WzjXQO2Ke#EnT0hZ?gbPE<{D*;(TPINL~U zO1`(JLzwrPRn%0oUoIPf&8n(ijRh;&?#%i`g)X%aXI}sl-Te^fy``I|iGBFuo$s^1 z1;7~>s2m4^02ns>x9;FNsqV6H35}zj+H*7I!k7#Lnc=q#hr4EYMaO8 z>3NVn4{;O~p{Ra`b4f#h2>mZ|Yr9qI3AW!yhl@+5X!pSqBb3SUHNBve+$gbOq@F22 zwx1p2ezfFk6YxXQbqN@77ELgEB;~Bzu_%dRpRNAO^hZ#}QD^1r3cA&h#XY0lY~(P7 z1vKql(pb{}a<_t(YZHb`AnC@hZA-~hh?*%!0+GaJuH37Dfz&w}PG{DX`j`>+X#1;= z?1$ED20<3NtII}MU0#OT?UEVYT(LQO8_Yx%`s?yjzMTjh-6_~?3*6N+U+NwU& z*x#s>OkqL6uzvWubE-u$!Z`dR$$!`e1SIA-%@xZ;H&@qI2Cy7^6o#jZKM(Q!U&h;y z+^d6=_G8YnB;PkywlrwwAtl+B(uKEG20d&S)72qD2n9!lT%Max$yjzZ6=+{@E&<`g*tgg=mg8edq;Ir6!%#CLr+wf9-F0+!8gthWBLk& zeo5os@G`YJolDvxR{>v&Uxa|One2)dE3d{Do;T*BXJ(OB5!+t(L0XYir9LG@tY z80@TOh@#2}Rd@kv`)0ssUYFDE97aIMe{qvDS`*n?zOVO#*z~}$QE!85gxuL%u?5S2z zUrqGiIW4~3MbapZ0)GJhYFMQ13p=)#cUR}a)#|dM#dO&>-R(+r|NAPIASr}(kG!I9j_xoJ?(wM*%BHQo!H5Lh0`ie0eIb}Kuv_IX&% z|8k^XJeL#C3~-zCLN3eL?D4}w0pRc+%{= z-~)B%>Ao|T(K{g{Pr{$u)|KzZ0tBRm1f`wVkz7mv?<=H+B%Njftx)uW^l$fNJ!G!~ z?c%!u3Ljt<5b*x>gj7pT>?~KD2`POKYo13d_yo=d1T9&RT>LbGkLZ|vKObZFzw|6} z!=PaWB}PDcUMfb($}KH=N*XADCD(2i@YF=l3_r>Um?g2#aluxkMQrJ?e*JkEl9eO^ zXUVuHz55f9g+JtwNsu%_`GFa#syb!e=+Y%{@;oS#w=>sgsz49;E&(V)qX*`EwR!tt zI`kDbN@Yu4rPqL-aZ@u@_wisgE6~CVk0f%k975H7c2)ncC)$o@sUIT(sVQjIYJEL7 z9&xJ9u!)lw8apT%)kM(qV1H3Q!Th;EpXoJb;tov6(3VS zF#SSKXZZO-g9jep4gDHO0MR(;s?ey22jN!fJLQQfTpSc2Jk`>&AfW5#SYyj5s#ImQ zuODN|cZ_}ppYKuzJ>^>u2>#6bp^$hg?)G|Ai%cjAoZcLxpkbXx(8k0LKRi8v(f8kY z-3aQ_&|mPMkKHA?+?}?XE-5HGmZ$f`uST~<9!MaYW5|4pkS|XF=9&``dSY+EXbX_j zq`!_-__&&LQ_Svm4atmhs5OitEg+%hv}MM6G5=}sK4w}-RupUNBZ56rSy)w4Sv%98 z*_Ng@EAe&@bi0>C+~!PdlGWSsOcHwBZuYIN=W2a<<{Z9er$EsBhQVyMV0(GqE;Tx{ z{7N9TK6^Crd~IuPy_AzA)2S0zADR++&-d?J6TOv_Sqg)T865-UQ@XhwmXq=#kQ@Sf z!`cJ1EhL^E;IOj|`WEyQN!FqDmAV{lPbCDVV{4zRuP|{X%U4?N?Uh8{yW#M_WFex>dH_Kp6~ zqkrRzHS!lWu|wvdL{N2I<+fluzxkLF)kIQ%`UWILwdFjQBq(1A?Y~_8DGlw=|7EA1 zdYNT$j^8Na9Abq#e5c{5ZzwQ$(5zbf-=pf)ey`pBG#8JxFo`-Jqc-Ec92^rA7!Fi3 z-2fm+s6{0Mo$07&xiYD>0E}FEL5fTjwme1xFl3+Ha=_!?ny`jx?Ku54`Q_OBv8+Z_ zVGQ($#if%?TE6nlSF{tM5|~p9nJBT=E}Q5@;q)zchLUfZ&0{$+YJp)W|-(L9=XcvWRZ~N zcOoP)F9KjCR(1>@S6>4zu})Hln*tKXAE?XPzILcvDunLQ*PY`!!aE-x4wMATsA+sC zcOo)-v;PYHd1S3$k&~N2OEwe^e$IvQRKE$?@;3=RX>EP}A}~^3;%H(A#!Q2|xAxnL zSSz3>dvs7|LO|Oj1Iz|M7*VuZdJ+td2pM)acnWZ7g^Z3+FsCJL<_;4d9aJeZoio9SS=lZ;C-It&g8pHmYdJQ<6^}jfC6XLqP{ewlv#gXc+47g83%`z_ zNOCHn?ADw?XRaq^){qHyCHcplNCv*iY#J330WS^FSYFD_x5$O>cxFp(x+mGzK@4;p zu1DnRWVQ_FQYPZdkeUm|{#9I?xijm?iz;!{9ON*SaIpBz0qadttrmf)Egq;FPe|5A z>Ae!gy1g8^JCk&*EV%=*DPyA-_u0UzFOM|bpb*NU`n6939iw{7e4k|XU%BvR>DB%Z z%N`o)R6TI4vxZ?07x7pvXTEU%ld< zJ*4>r0LNbS$&sM4sZ6a~urM`vRy2ilzLWH$by6`p zRIs;(YQr}jjTcOKQ@&XhDP6gTJq6sF+vUc%!Zj}!c)12cpm+vW;(^UXYV zPA;pcxGGnCn#a@aZNAnv`(wntw&`tL@h6Ffc+%Yv)L%(!TXF0CYpcjMep^SKPz?ij z@KmH47P>Lwl(yX1C$mRljg>f@I_Js$9V_Roka^1_UoEgQ4eT1Gkk|;NKwO|Ptovl$ zEm+nO1xKqP5eqXRl3ACs2$$*^T=Ov6q1M$S9jABJ_}WOx4KEgHtXW;2elk1BF7>={ z_|0XvKl56%aW>=KT0omRGu*j)MLn1Dy*%anLZ(D|0tN*{?OiSvhXyJ;i`)+scl~*e z^w&8Z`D>FG)w?<#bL(b`wx@x`;}3+>v{F*XT#p}i5fhwB9@d;&Dwket`;F#eBc0M% z+Fx}!D8C);6DZFQU9}jJq&i*R*6tA5Qo=o%$eXd*FS`_ItyIb%ill{jn`l#pgHY;z zcS!yl&%QWv)RQDOQi>Y$bcilSRSX6iE-M{#?HL$gGhxgPW2h!Kn_{3L0c#tte-r6` z&HweOa~ba&JIdq~`$Tbq5iCwScY{f)G@0fT+=Z(-$m5LAoXg>wbcu_~l=?&Bi7h!R zB6G07?Jp-;eH{mq3jn9#Pe9qQw_CJiW#;7&dRUl6eP;XZae!~RY~O;;`Ad>4J+bAN z{BMPv_^UG8ZUut^+I>Q&#c{Fmfc*}S+?4aM)s@D*G)*=Hd>Y9>wI1;Neyoc#M@gpT zB{7P5XO)F76VtwC`8hi6>r7HCa=<2k-o{=r0uFPg-NMai(g#Q)NeO$o^C=UQAXlXs!)O<@t6~%0M8e0W6!`Rejzr17& z7-`W0ny>3X84o7iuUx?v1qka^bB*Ig?)l9QYg3e=oJw6@G zL?}o;R`5HRfCYQ04H7md2t5m6a+PHcaQmanj)<+h1cQMAK`~aVa)~es$vA+EZQLqn z`uE%s)3Y_AOX*x02>%E%T{e=Kiey=v_8&Rmv{rvuq20De?e>M2h1o!xLN|lNo3Fnq zldQDYj3bS50W*T`Tf96Hf0?KG!C$*t?wZSpkh!nnPSr~->qRf>_f)*RiQ%!mOOnqd zZVThorpmRuy+`tCoOW_)KaHE(9+d?H)n)uhID(uCTLMn|Q_J+X5Oz?9>OL~b6HGK{ z1%BqDrK(c{z$FU|2ONMNchEAd1p|@hGhN3)nhgUJR>Nz-JfIN+XR{e>Z;GK*4X6LT@>< z?!HPuUM;7Q@K`c0NjTf<6*ygs;hqLl6hdSh^RZCIM-Kxg=k-*&F8ZLggEx-mL8g1yAP};PmUS3v*4uRD8!>J$( z3=!`Leya8^?{_%!Q>3=L(w;I>Fqt&gTA|e)Q6`cQZ!|YKqb9Xs(b)v2*(E=G?5YG? z$b?L&W+;Qxbl<%<6+;G0n%*^@dslS!+%b%TgA-_Q#^ROO1R@ax9bgu#J_E<`e?yAyxUw)q^G3R=iLjX*` zgxa(J$m6$fn;~)Xj-sIs2-i7v^!$N3%yMK9YTu2D&3mW@_tBe8&e@%f4n0#hYOTCh zAQ$%*U-;)^$f0>hDaPYx$$nj!CjIAlv>}VWcX)rwYV1j0Zy;qmQ(Y0igB};CesH8#s^77vNM3+ChrZ5N<{_31y(*DbKP0qpYj<5GHkL<}UlLX7R>W~J5#S}&K)?yoI}W#rg%R(pEIW@uYCIKQz+dy{8J05VnLs{b zpFHEWTQ5Q0-gE4&fqVE_NRs{WF5ORpqiF+-T2=}V=l};4m(n1RWs_4#3SUg*S}oIP zxva^Px@^%m1qP5aIt8@9lb_Bf*Cl#eiB2VmP2~HjZs%-rWJ$@5(T=)o_I>F6#lFhi z{AOJ$ByWY`_r-n(`mnc>0mR@9{sg9NADo@B-RRpNJ!fgDsM*Ta2mgs$4#e-pD~835 zqrKQr|9V^R-*yH|AKgYSJou2?GlhEvT?^8?z4=i=4tc^F(M?$oJ_D^Zc3y0P17bjX zdaSliC>mxUa^~Pcxs?s6B@PH2LVw9uam&%2yI2(g9`T71g_~*+D%e~yhLtK70Mpij zNsEW(RgnEQxEi}Vi|Q*Ir#DL(Yo&YiO|fs9K5+N;Zy$a7BoO;9)VGS&d#TvDe#bQP ziBFSz2_`Ln>pEe-1G#)H)N^N2ch=8jtVA+TPvST>2R^oQep@s;v@f?^Q-okID~f$Q z&)8i6D60LJCwl4=DW^P4X%K7*vZU`Y7=-e?8pwh*#*NW-Nm{DjypO3WJDRV)=g_EI z*Q}d~!8q6k*A~y_9U9wxTRWkd4Ck)FRY>U9-`hLW8(K{nD6@NID&uhk;srw&+}(I* z1{PCF==y-6z~dWJyjhc3UyH$OJYv5Nx_emI74CE*N$uHBtaflJ`? z4%0o|*zFuzKHNjwy;|$wgH_A1o7|+6-%7cSPqDAG)7~M3u8=2-L5)QTeKZpct4Sxf zxi$;O9dZffUgNjR%aab@8;zNLVpC8J;n5o;j*m62jj2gMyC*_-NAkJrFLJ0l)Mk2O ziH}bG=tZ;@jBHo4?KLa()^`k`rMi=M!nP5WK7$KufhHqNbsmkAYyODNqfEGt;d?t? znNP|?;kDY{Ggz6U_|(hQgPU*$lURJ2n~J@UGKcqFxt+Pp*^(wSlSwh_-ck$($h0Ia z>(vhLOdyrs-ELMUuMQT7TU4|B!DfhZnF^_8G2DV<$`~manP5q{=Y-4#qESb}2%WDl zzK9Hm7E-E5@h4DsNn;9{M|AlOPWi4Er&HiIR*lvhY6GB3XMFPrHM>3&sWAQ{Wb~(@ zG!tP&)mM<{AAJCpLDU~Z@8+4388Q${M{RHiWuU}y%5}nEP|c1CM^ zf8C+%!GqxZLT}{4(Ft7n=a~HrBRio4QA1Qf%J4HstU6 z=5y=Uspzh*#y$98TGwjey+^=q(HX$^UfX&=ceYg84OZXQ5pO=KEHnJk9mU2 zu0u97o!^y;@Q`D8^~Pv>`_J?iA8%eK5K;>F2)bZR!>b9$zsSWFlOE^BdxF%_n+ML}q%=zP=Cq60ed)tdxGVFtoiLm7yC~%Ac4* zL|MEi!gnXIbTNLrL#E2=Q8*qS zu$IqF?MGe*>W`fXz1zcuz3=8^*!`sByf&-iqJFR&V;JSp+Wl$AlKN<4rdZk`_po_u z6KcaWb)EyMYo+bfPhiCU)C(R93w|yj@B0av>Nr%`j1FFKxH4wScWk`ZQfdzoTu)f; zWyG!$Cb77B^D(_)Yz1G1*%i^Pv|SjkNP-&^jlv(_V=od z|NGP5Yp?%%8~^t<{%;fg)r$OoZac`?O2XH@FptaW1vr<)usRCigQKIS>`y5Yq`9Tk zLIcqBe;m90XB+TmHEh$+v=MJ_d_vmoZOy$8nX`)FecRIL|EIlc4N5wT;(y24rI*(B zA`7*W)}|({%pw)d%qgs7dnmPvts~l~S!il6A3S8!5S!XE ziCjf9pi;3k#s{b(-+i&|}XJ?jA3~=x7o_o&u&H0_V+<&vMrb0r&(s&N@K-pnm zGf^^6NaE)w*&R?rJg7iC(sZHYwaBNMY$J4(^|xRTfgs5W_k!j6Ett>(pEQ~Euir0t zV%0gTF7C6Phsx~!ZK&d%vc3+o4ZA}ZSG5(3eR8U+!w&LzaJMOpu5b~)y%m=UEWY(o z;!K!zn$RhAHK^eXl9x%yZwh|*TrThXvA=Hyl>JK3T_QZ(gr|%aYF(%H{tEI?%rqDSN9G* zy?D6hvv6O6j^*S0LxJ0m3IYk#8$@0JA$Ov)>G7TxAgeCK+j%LA6a1< zU4}ib-J>abjJ{>hB;tUhN7(13Q(h5AYEhKI|o(2OOO2~7<%1J!VrPTY{wV!`?nO{}ePK69;dn3oEQx_4I(;7eLS6PIQ3c zrvb7uQxCNEl11x-EB|xB6A{Mg;{yf^94`d_G#zJ~#SxYs6gaL2Eqw5SoS5mBHj(+H zTom%3Oc*WK87~L9mb6rBbDVeld@N#k)CY>^$^$)P9$9OK;sjdY97J5rvu@}L^cn51AX6xk;v-RB?R+zP4sElvbHL9V_9Z`cU&r&w)A|RM7HcoB z4zD3L_L{76&nLZda%`3eg(C$Dd=eQpVU20xI(kKu;_!Ivw~PI$gQ zPaqT$c7rrbun|i!N#9PNJjNM^zM-X>WAnGPsdHktNlY+i;17e%k-f^cHv9HQq<8i* z?*b`UW7VJ5s1t{1BBD(EBb{ixX64)R9I(uRF1-nAz&r-YAr=aSIfOQ8A;kt=uxzZx zZZfJNKwv<%L^2>^J(~PIR+kBJ$1cJ&WJ& zsPt$KCzey{ovi!)W&|Nwd%dtH&Zv`dJcc{-WC-f3b1(;nK}B@*VHode>e%!XNX$;x z7k3hsXHn{t)*KJ*wF-MmD=81_(Urd;hg4@r&!+cO5nH1Rv%`$}&gkfF7tT=_)0m%{ z0NQJ2e?-+<069*+Nf+DB@WX=d?o^P2N=sU99xmiJZR76Uq`N9rmiqx3RtAejS|XnZ z9#6LA5}@|h*XQ1WP>3%B{ZLCR5xa7(j^nBPC7;Zqc z0T78kz2pjE@tIzdgQFrA1!IO5OxW;EIx1JDPhdOI5H{+>Sp>F&tbZS3E)uh%Ks7R- zh!;_H@OrgPdPT!u0a2taoIGE|OqMJjfW#PHNR@EnVkqPGM~gf*Bj$irBgDb26kRsVnaAKQd+#{sHLHNj3k9j=W^3T`xihVc*FQnL9#${)G9 BgG2xT literal 0 HcmV?d00001 From 271118a247f17b11e996d52bd9a9e9a1617f190d Mon Sep 17 00:00:00 2001 From: terraHDB Date: Tue, 15 Nov 2022 11:46:19 -0600 Subject: [PATCH 19/22] more formatting --- docs/clustering/how-to-cluster.md | 129 ++++++++++++++++-------------- 1 file changed, 71 insertions(+), 58 deletions(-) diff --git a/docs/clustering/how-to-cluster.md b/docs/clustering/how-to-cluster.md index ac987065..ef702e56 100644 --- a/docs/clustering/how-to-cluster.md +++ b/docs/clustering/how-to-cluster.md @@ -7,6 +7,8 @@ To create a cluster you must have two or more nodes* (aka instances) of HarperDB Below are the steps, in order, that should be taken to set up a HarperDB cluster. +--- + ### Creating a Cluster User Inter-node authentication takes place via HarperDB users. There is a special role type called `cluster_user` that exists by default and limits the user to only clustering functionality. @@ -66,6 +68,8 @@ harperdb install --CLUSTERING_USER cluster_account --CLUSTERING_PASSWORD letsClu CLUSTERING_USER=cluster_account CLUSTERING_PASSWORD=letsCluster123 ``` +--- + ### Naming a Node Node name is the name given to a node. It is how nodes are identified within the cluster and must be unique to the cluster. @@ -107,7 +111,7 @@ harperdb --CLUSTERING_NODENAME Node1 CLUSTERING_NODENAME=Node1 ``` - +--- ### Enabling Clustering @@ -155,6 +159,8 @@ An efficient way to **install HarperDB**, **create the cluster user**, **set the harperdb install --CLUSTERING_ENABLED true --CLUSTERING_NODENAME Node1 --CLUSTERING_USER cluster_account --CLUSTERING_PASSWORD letsCluster123! ``` +--- + ### Understanding Routes A route is a connection between two nodes. It is how the clustering network is established. @@ -185,125 +191,132 @@ clustering: port: 9932 ``` -![figure 1](/Users/terraroush/documentation/docs/images/clustering/figure1.png "diagram displaying a three node cluster") +![figure 1](/Users/terraroush/documentation/images/clustering/figure1.png "diagram displaying a three node cluster") This diagram shows one way of using routes to connect a network of nodes. Node2 and Node3 do not reference any routes in their config. Node1 contains routes for Node2 and Node3, which is enough to establish a network between all three nodes. There are multiple ways to set routes, they are: 1) Directly editing the `harperdb-config.yaml` file (refer to code snippet above). -2) Calling cluster_set_routes through the API. +2) Calling `cluster_set_routes` through the API. ```json { -"operation": "cluster_set_routes", -"server": "hub", -"routes":[ {"host": "3.735.184.8", "port": 9932} ] + "operation": "cluster_set_routes", + "server": "hub", + "routes":[ {"host": "3.735.184.8", "port": 9932} ] } ``` -Note: When making any changes to HarperDB configuration HarperDB must be restarted for the changes to take effect. +_Note: When making any changes to HarperDB configuration HarperDB must be restarted for the changes to take effect._ -From the command line. +3) From the command line. +```bash --CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES "[{\"host\": \"3.735.184.8\", \"port\": 9932}]" +``` +4) Using environment variables. -Using environment variables. +```bash CLUSTERING_HUBSERVER_CLUSTER_NETWORK_ROUTES=[{"host": "3.735.184.8", "port": 9932}] +``` - -The API also has cluster_get_routes for getting all routes in the config and cluster_delete_routes for deleting routes. +The API also has `cluster_get_routes` for getting all routes in the config and `cluster_delete_routes` for deleting routes. +```json { -"operation": "cluster_delete_routes", -"routes":[ {"host": "3.735.184.8", "port": 9932} ] + "operation": "cluster_delete_routes", + "routes":[ {"host": "3.735.184.8", "port": 9932} ] } +``` +--- - -Subscriptions +### Subscriptions A subscription defines how data should move between two nodes. They are exclusively table level and operate independently. They connect a table on one node to a table on another node, the subscription will apply to a matching schema name and table name on both nodes. -Note: ‘local’ and ‘remote’ will often be referred to. In the context of these docs ‘local’ is the node that is receiving the API request to create/update a subscription and remote is the other node that is referred to in the request, the node on the other end of the subscription. +_Note: ‘local’ and ‘remote’ will often be referred to. In the context of these docs ‘local’ is the node that is receiving the API request to create/update a subscription and remote is the other node that is referred to in the request, the node on the other end of the subscription._ A subscription consists of: -schema - the name of the schema that the table you are creating the subscription for belongs to. -table - the name of the table the subscription will apply to. -publish - a boolean which determines if transactions on the local table should be replicated on the remote table. -subscribe - a boolean which determines if transactions on the remote table should be replicated on the local table. +`schema` - the name of the schema that the table you are creating the subscription for belongs to. +`table` - the name of the table the subscription will apply to. +`publish` - a boolean which determines if transactions on the local table should be replicated on the remote table. +`subscribe` - a boolean which determines if transactions on the remote table should be replicated on the local table. -Publish subscription +#### Publish subscription ![figure 2](/Users/terraroush/documentation/images/clustering/figure2.png "diagram example of a publish subscription from the perspective of Node1") -This diagram is an example of a publish subscription from the perspective of Node1. +This diagram is an example of a `publish` subscription from the perspective of Node1. The record with id 2 has been inserted in the dog table on Node1, after it has completed that insert it is sent to Node 2 and inserted in the dog table there. -Subscribe subscription +#### Subscribe subscription ![figure 3](/Users/terraroush/documentation/images/clustering/figure3.png "diagram example of a subscribe subscription from the perspective of Node1") -This diagram is an example of a subscribe subscription from the perspective of Node1. +This diagram is an example of a `subscribe` subscription from the perspective of Node1. The record with id 3 has been inserted in the dog table on Node2, after it has completed that insert it is sent to Node1 and inserted there. -Subscribe and publish +#### Subscribe and Publish ![figure 4](/Users/terraroush/documentation/images/clustering/figure4.png "diagram shows both subscribe and publish but publish is set to false") -This diagram shows both subscribe and publish but publish is set to false. You can see that because subscribe is true the insert on Node2 is being replicated on Node1 but because publish is set to false the insert on Node1 is not being replicated on Node2. +This diagram shows both subscribe and publish but publish is set to false. You can see that because subscribe is true the insert on Node2 is being replicated on Node1 but because publish is set to false the insert on Node1 is **_not_** being replicated on Node2. ![figure 5](/Users/terraroush/documentation/images/clustering/figure5.png "shows both subscribe and publish set to true") This shows both subscribe and publish set to true. The insert on Node1 is replicated on Node2 and the update on Node2 is replicated on Node1. -Creating subscriptions +### Creating subscriptions Subscriptions can be added, updated, or removed through the API. -Note: The schema and tables in the subscription must exist on the local node (the node that is receiving the API request), but do not need to exist on the remote node. Any schema and tables that do not exist on the remote node will be automatically created. +_Note: The schema and tables in the subscription must exist on the local node (the node that is receiving the API request), but do not need to exist on the remote node. Any schema and tables that do not exist on the remote node will be automatically created._ -To add a single node and create one or more subscriptions use add_node +To add a single node and create one or more subscriptions use `add_node`. +```json { -"operation": "add_node", -"node_name": "Node2", -"subscriptions": [ -{ -"schema": "dev", -"table": "dog", -"publish": false, -"subscribe": true -}, -{ -"schema": "dev", -"table": "chicken", -"publish": true, -"subscribe": true + "operation": "add_node", + "node_name": "Node2", + "subscriptions": [ + { + "schema": "dev", + "table": "dog", + "publish": false, + "subscribe": true + }, + { + "schema": "dev", + "table": "chicken", + "publish": true, + "subscribe": true + } + ] } -] -} - +``` This is an example of adding Node2 to your local node. Subscriptions are created for two tables, dog and chicken. -To update one or more subscriptions with a single node use update_node +To update one or more subscriptions with a single node use `update_node`. +```json { -"operation": "update_node", -"node_name": "Node2", -"subscriptions": [ -{ -"schema": "dev", -"table": "dog", -"publish": true, -"subscribe": true -} -] + "operation": "update_node", + "node_name": "Node2", + "subscriptions": [ + { + "schema": "dev", + "table": "dog", + "publish": true, + "subscribe": true + } + ] } - +``` This call will update the subscription with the dog table. Any other subscriptions with Node2 will not change. From df22a188d4e6f9e51a18e1aee5de61db9f02557f Mon Sep 17 00:00:00 2001 From: terraHDB Date: Tue, 15 Nov 2022 13:12:31 -0600 Subject: [PATCH 20/22] formatted the rest of clustering docs --- docs/clustering/how-to-cluster.md | 209 ++++++++++++++++-------------- 1 file changed, 110 insertions(+), 99 deletions(-) diff --git a/docs/clustering/how-to-cluster.md b/docs/clustering/how-to-cluster.md index ef702e56..75912e07 100644 --- a/docs/clustering/how-to-cluster.md +++ b/docs/clustering/how-to-cluster.md @@ -320,142 +320,153 @@ To update one or more subscriptions with a single node use `update_node`. This call will update the subscription with the dog table. Any other subscriptions with Node2 will not change. -To add or update subscriptions with one or more nodes in one API call use configure_cluster +To add or update subscriptions with one or more nodes in one API call use `configure_cluster`. - -{ -"operation": "configure_cluster", -"connections": [ -{ -"node_name": "Node2", -"subscriptions": [ -{ -"schema": "dev", -"table": "chicken", -"publish": false, -"subscribe": true -}, -{ -"schema": "prod", -"table": "dog", -"publish": true, -"subscribe": true -} -] -}, -{ -"node_name": "Node3", -"subscriptions": [ +```json { -"schema": "dev", -"table": "chicken", -"publish": true, -"subscribe": false -} -] -} -] + "operation": "configure_cluster", + "connections": [ + { + "node_name": "Node2", + "subscriptions": [ + { + "schema": "dev", + "table": "chicken", + "publish": false, + "subscribe": true + }, + { + "schema": "prod", + "table": "dog", + "publish": true, + "subscribe": true + } + ] + }, + { + "node_name": "Node3", + "subscriptions": [ + { + "schema": "dev", + "table": "chicken", + "publish": true, + "subscribe": false + } + ] + } + ] } +``` +_Note: `configure_cluster` will override **any and all** existing subscriptions defined on the local node. This means that before going through the connections in the request and adding the subscriptions, it will first go through **all existing subscriptions the local node has** and remove them. To get all existing subscriptions use `cluster_status`._ -Note: configure_cluster will override any and all existing subscriptions defined on the local node. This means that before going through the connections in the request and adding the subscriptions, it will first go through all existing subscriptions the local node has and remove them. To get all existing subscriptions use cluster_status. +#### Start time -Start time +There is an optional property called `start_time` that can be passed in the subscription. This property accepts an ISO formatted UTC date. -There is an optional property called start_time that can be passed in the subscription. This property accepts an ISO formatted UTC date. +`start_time` can be used to set from what time you would like to source transactions from a table when creating or updating a subscription. -start_time can be used to set from what time you would like to source transactions from a table when creating or updating a subscription. -{ -"operation": "add_node", -"node_name": "Node2", -"subscriptions": [ +```json { -"schema": "dev", -"table": "dog", -"publish": false, -"subscribe": true, -"start_time": "2022-09-02T20:06:35.993Z" -} -] + "operation": "add_node", + "node_name": "Node2", + "subscriptions": [ + { + "schema": "dev", + "table": "dog", + "publish": false, + "subscribe": true, + "start_time": "2022-09-02T20:06:35.993Z" + } + ] } +``` - -This example will get all transactions on Node2’s dog table starting from 2022-09-02T20:06:35.993Z and replicate them locally on the dog table. +This example will get all transactions on Node2’s dog table starting from `2022-09-02T20:06:35.993Z` and replicate them locally on the dog table. If no start time is passed it defaults to the current time. -Note: start time utilizes clustering to back source transactions. For this reason it can only source transactions that occurred when clustering was enabled. +_Note: start time utilizes clustering to back source transactions. For this reason it can only source transactions that occurred when clustering was enabled._ -Remove node +#### Remove node -To remove a node and all its subscriptions use remove_node +To remove a node and all its subscriptions use `remove_node`. +```json { -"operation":"remove_node", -"node_name":"Node2" + "operation":"remove_node", + "node_name":"Node2" } +``` +#### Cluster status -Cluster status - -To get the status of all connected nodes and see their subscriptions use cluster_status +To get the status of all connected nodes and see their subscriptions use `cluster_status`. +```json { -"node_name": "Node1", -"is_enabled": true, -"connections": [ -{ -"node_name": "Node2", -"status": "open", -"ports": { -"clustering": 9932, -"operations_api": 9925 -}, -"latency_ms": 65, -"uptime": "11m 19s", -"subscriptions": [ -{ -"schema": "dev", -"table": "dog", -"publish": true, -"subscribe": true -} -], -"system_info": { -"hdb_version": "4.0.0", -"node_version": "16.17.1", -"platform": "linux" -} -} -] + "node_name": "Node1", + "is_enabled": true, + "connections": [ + { + "node_name": "Node2", + "status": "open", + "ports": { + "clustering": 9932, + "operations_api": 9925 + }, + "latency_ms": 65, + "uptime": "11m 19s", + "subscriptions": [ + { + "schema": "dev", + "table": "dog", + "publish": true, + "subscribe": true + } + ], + "system_info": { + "hdb_version": "4.0.0", + "node_version": "16.17.1", + "platform": "linux" + } + } + ] } +``` - -Transactions +#### Transactions Transactions that are replicated across the cluster are: -Insert -Update -Upsert -Delete -Bulk loads -CSV data load -CSV file load -CSV URL load -Import from S3 +* Insert +* Update +* Upsert +* Delete +* Bulk loads + * CSV data load + + * CSV file load + + * CSV URL load + + * Import from S3 When adding or updating a node any schemas and tables in the subscription that don’t exist on the remote node will be automatically created. -Destructive schema operations do not replicate across a cluster. Those operations include drop_schema, drop_table, and drop_attribute. If the desired outcome is to drop schema information from any nodes then the operation(s) will need to be run on each node independently. +**Destructive schema operations do not replicate across a cluster**. Those operations include `drop_schema`, `drop_table`, and `drop_attribute`. If the desired outcome is to drop schema information from any nodes then the operation(s) will need to be run on each node independently. Users and roles are not replicated across the cluster. -Queueing +--- + +### Queueing HarperDB has built-in resiliency for when network connectivity is lost within a subscription. When connections are reestablished, a catchup routine is executed to ensure data that was missed, specific to the subscription, is sent/received as defined. -Topologies +--- + +### Topologies HarperDB clustering creates a mesh network between nodes giving end users the ability to create an infinite number of topologies. subscription topologies can be simple or as complex as needed. From 81c76304560200e7476a4d445ad868b75716e7a7 Mon Sep 17 00:00:00 2001 From: terraHDB <93155880+terraHDB@users.noreply.github.com> Date: Tue, 15 Nov 2022 14:20:38 -0600 Subject: [PATCH 21/22] Core 1828 Docs Migration- Security: Topic and Subtopics (#4) * doc migration epic branch * 3/4 progress of security * finished configuration.md, began users and roles * users and roles migrated; still needs updates * updated user and roles operations * corrections to security docs * CORE-1825 Add/Update "install harpedb" subtopics (#1) * added mac, added/updated windows, added/updated node version requirements, and added offline docs * go requirements * docs adjustments * testing variable usage * testing variable usage * Update other.md Update installation for other operating systems. * added link to download * node version * exact replica download button * functional download link * deleted old link * node version Co-authored-by: Kris Zyp * Core 1826 add/update harperdb studio topic and subtopics (#2) * added mac, added/updated windows, added/updated node version requirements, and added offline docs * 1/3 through studio subtopics * 2/3 through studio subtopics * 3/3 through studio subtopics * corrected harperdb operations api * removed icon descriptions and fixed typos * removed icon descriptions * primary key vs hash_attribute change * primary key vs hash attribute qualifier * minor change to example function Co-authored-by: Kris Zyp --- docs/harperdb-cloud/index.md | 1 + docs/harperdb-studio/create-account.md | 22 ++ docs/harperdb-studio/enable-mixed-content.md | 7 + docs/harperdb-studio/index.md | 10 + .../harperdb-studio/instance-configuration.md | 115 ++++++++ docs/harperdb-studio/instance-example-code.md | 58 ++++ docs/harperdb-studio/instance-metrics.md | 15 + docs/harperdb-studio/instances.md | 137 +++++++++ docs/harperdb-studio/login-password-reset.md | 38 +++ docs/harperdb-studio/manage-charts.md | 75 +++++ docs/harperdb-studio/manage-clustering.md | 90 ++++++ docs/harperdb-studio/manage-functions.md | 167 +++++++++++ docs/harperdb-studio/manage-instance-roles.md | 72 +++++ docs/harperdb-studio/manage-instance-users.md | 59 ++++ .../manage-schemas-browse-data.md | 128 ++++++++ docs/harperdb-studio/organizations.md | 101 +++++++ docs/harperdb-studio/query-instance-data.md | 49 +++ docs/harperdb-studio/resources.md | 39 +++ docs/install-harperdb/index.md | 7 +- docs/install-harperdb/mac.md | 17 ++ docs/install-harperdb/node-ver-requirement.md | 7 + docs/install-harperdb/offline.md | 14 + docs/install-harperdb/other.md | 9 + docs/install-harperdb/windows.md | 13 + docs/security/basic-auth.md | 64 ++++ docs/security/configuration.md | 57 ++++ docs/security/index.md | 8 + docs/security/jwt-auth.md | 93 ++++++ docs/security/users-and-roles.md | 278 ++++++++++++++++++ images/ave-age-per-owner-ex.png | Bin 0 -> 38173 bytes images/xcode.png | Bin 0 -> 50262 bytes 31 files changed, 1747 insertions(+), 3 deletions(-) create mode 100644 docs/harperdb-studio/create-account.md create mode 100644 docs/harperdb-studio/enable-mixed-content.md create mode 100644 docs/harperdb-studio/instance-configuration.md create mode 100644 docs/harperdb-studio/instance-example-code.md create mode 100644 docs/harperdb-studio/instance-metrics.md create mode 100644 docs/harperdb-studio/instances.md create mode 100644 docs/harperdb-studio/login-password-reset.md create mode 100644 docs/harperdb-studio/manage-charts.md create mode 100644 docs/harperdb-studio/manage-clustering.md create mode 100644 docs/harperdb-studio/manage-functions.md create mode 100644 docs/harperdb-studio/manage-instance-roles.md create mode 100644 docs/harperdb-studio/manage-instance-users.md create mode 100644 docs/harperdb-studio/manage-schemas-browse-data.md create mode 100644 docs/harperdb-studio/organizations.md create mode 100644 docs/harperdb-studio/query-instance-data.md create mode 100644 docs/harperdb-studio/resources.md create mode 100644 docs/install-harperdb/mac.md create mode 100644 docs/install-harperdb/node-ver-requirement.md create mode 100644 docs/install-harperdb/offline.md create mode 100644 docs/install-harperdb/other.md create mode 100644 docs/install-harperdb/windows.md create mode 100644 docs/security/basic-auth.md create mode 100644 docs/security/configuration.md create mode 100644 docs/security/jwt-auth.md create mode 100644 docs/security/users-and-roles.md create mode 100644 images/ave-age-per-owner-ex.png create mode 100644 images/xcode.png diff --git a/docs/harperdb-cloud/index.md b/docs/harperdb-cloud/index.md index 8f125a56..cfa4d3ca 100644 --- a/docs/harperdb-cloud/index.md +++ b/docs/harperdb-cloud/index.md @@ -1 +1,2 @@ # HarperDB Cloud + diff --git a/docs/harperdb-studio/create-account.md b/docs/harperdb-studio/create-account.md new file mode 100644 index 00000000..b39a2a03 --- /dev/null +++ b/docs/harperdb-studio/create-account.md @@ -0,0 +1,22 @@ +# Create a Studio Account +Start at the [HarperDB Studio sign up page](https://studio.harperdb.io/sign-up). + +1) Provide the following information: + * First Name + * Last Name + * Email Address + * Subdomain + + *Part of the URL that will be used to identify your HarperDB Cloud Instances. For example, with subdomain “demo” and instance name “c1” the instance URL would be: https://c1-demo.harperdbcloud.com.* + * Coupon Code (optional) +2) Review the Privacy Policy and Terms of Service. +3) Click the sign up for free button. +4) You will be taken to a new screen to add an account password. Enter your password. + *Passwords must be a minimum of 8 characters with at least 1 lower case character, 1 upper case character, 1 number, and 1 special character.* +5) Click the add account password button. + +You will receive a Studio welcome email confirming your registration. + + + +Note: Your email address will be used as your username and cannot be changed. \ No newline at end of file diff --git a/docs/harperdb-studio/enable-mixed-content.md b/docs/harperdb-studio/enable-mixed-content.md new file mode 100644 index 00000000..1c2e9674 --- /dev/null +++ b/docs/harperdb-studio/enable-mixed-content.md @@ -0,0 +1,7 @@ +# Enable Mixed Content + +Enabling mixed content is required in cases where you would like to connect the HarperDB Studio to HarperDB Instances via HTTP. This should not be used for production systems, but may be convenient for development and testing purposes. Doing so will allow your browser to reach HTTP traffic, which is considered insecure, through an HTTPS site like the Studio. + + + +A comprehensive guide is provided by Adobe here: https://experienceleague.adobe.com/docs/target/using/experiences/vec/troubleshoot-composer/mixed-content.html. \ No newline at end of file diff --git a/docs/harperdb-studio/index.md b/docs/harperdb-studio/index.md index a90590dc..6db82fe6 100644 --- a/docs/harperdb-studio/index.md +++ b/docs/harperdb-studio/index.md @@ -1 +1,11 @@ # HarperDB Studio +HarperDB Studio is the web-based GUI for HarperDB. Studio enables you to administer, navigate, and monitor all of your HarperDB instances in a simple, user friendly interface without any knowledge of the underlying HarperDB API. It’s free to sign up, get started today! + +[Sign up for free!](https://studio.harperdb.io/sign-up) + +--- +## How does Studio Work? +While HarperDB Studio is web based and hosted by us, all database interactions are performed locally. The HarperDB Studio loads in your browser, at which point you login to your HarperDB instances. Credentials are stored in your browser cache and are not transmitted back to HarperDB. All database interactions are made via the HarperDB Operations API directly from your browser to your instance. + +## What type of instances can I manage? +HarperDB Studio enables users to manage both HarperDB Cloud instances and privately hosted instances all from a single UI. All HarperDB instances feature identical behavior whether they are hosted by us or by you. \ No newline at end of file diff --git a/docs/harperdb-studio/instance-configuration.md b/docs/harperdb-studio/instance-configuration.md new file mode 100644 index 00000000..de88c7f0 --- /dev/null +++ b/docs/harperdb-studio/instance-configuration.md @@ -0,0 +1,115 @@ +# Instance Configuration + +HarperDB instance configuration can be viewed and managed directly through the HarperDB Studio. HarperDB Cloud instances can be resized in two different ways via this page, either by modifying machine RAM or by increasing drive storage. User-installed instances can have their licenses modified by modifying licensed RAM. + + + +All instance configuration is handled through the **config** page of the HarperDB Studio, accessed with the following instructions: + +1) Navigate to the [HarperDB Studio Organizations](https://studio.harperdb.io/organizations) page. + +2) Click the appropriate organization that the instance belongs to. + +3) Select your desired instance. + +4) Click config in the instance control bar. + +*Note, the **config** page will only be available to super users and certain items are restricted to Studio organization owners.* + +## Instance Overview + +The **instance overview** panel displays the following instance specifications: + +* Instance URL + +* Instance Node Name (for clustering) + +* Instance API Auth Header (this user) + + *The Basic authentication header used for the logged in HarperDB database user* + +* Created Date (HarperDB Cloud only) + +* Region (HarperDB Cloud only) + + *The geographic region where the instance is hosted.* + +* Total Price + +* RAM + +* Storage (HarperDB Cloud only) + +* Disk IOPS (HarperDB Cloud only) + +## Update Instance RAM + +HarperDB Cloud instance size and user-installed instance licenses can be modified with the following instructions. This option is only available to Studio organization owners. + + + +Note: For HarperDB Cloud instances, upgrading RAM may add additional CPUs to your instance as well. Click here to see how many CPUs are provisioned for each instance size. + +1) In the **update ram** panel at the bottom left: + + * Select the new instance size. + + * If you do not have a credit card associated with your account, an **Add Credit Card To Account** button will appear. Click that to be taken to the billing screen where you can enter your credit card information before returning to the **config** tab to proceed with the upgrade. + + * If you do have a credit card associated, you will be presented with the updated billing information. + + * Click **Upgrade**. + +2) The instance will shut down and begin reprovisioning/relicensing itself. The instance will not be available during this time. You will be returned to the instance dashboard and the instance status will show UPDATING INSTANCE. + +3) Once your instance upgrade is complete, it will appear on the instance dashboard as status OK with your newly selected instance size. + +*Note, if HarperDB Cloud instance reprovisioning takes longer than 20 minutes, please submit a support ticket here: https://harperdbhelp.zendesk.com/hc/en-us/requests/new.* + +## Update Instance Storage + +The HarperDB Cloud instance storage size can be increased with the following instructions. This option is only available to Studio organization owners. + +Note: Instance storage can only be upgraded once every 6 hours. + +1) In the **update storage** panel at the bottom left: + + * Select the new instance storage size. + + * If you do not have a credit card associated with your account, an **Add Credit Card To Account** button will appear. Click that to be taken to the billing screen where you can enter your credit card information before returning to the **config** tab to proceed with the upgrade. + + * If you do have a credit card associated, you will be presented with the updated billing information. + + * Click **Upgrade**. + +2) The instance will shut down and begin reprovisioning itself. The instance will not be available during this time. You will be returned to the instance dashboard and the instance status will show UPDATING INSTANCE. + +3) Once your instance upgrade is complete, it will appear on the instance dashboard as status OK with your newly selected instance size. + +*Note, if this process takes longer than 20 minutes, please submit a support ticket here: https://harperdbhelp.zendesk.com/hc/en-us/requests/new.* + +## Remove Instance + +The HarperDB instance can be deleted/removed from the Studio with the following instructions. Once this operation is started it cannot be undone. This option is only available to Studio organization owners. + +1) In the **remove instance** panel at the bottom left: + * Enter the instance name in the text box. + + * The Studio will present you with a warning. + + * Click **Remove**. + +2) The instance will begin deleting immediately. + +## Restart Instance + +The HarperDB Cloud instance can be restarted with the following instructions. + +1) In the **restart instance** panel at the bottom right: + * Enter the instance name in the text box. + + * The Studio will present you with a warning. + + * Click **Restart**. + +2) The instance will begin restarting immediately. \ No newline at end of file diff --git a/docs/harperdb-studio/instance-example-code.md b/docs/harperdb-studio/instance-example-code.md new file mode 100644 index 00000000..e942f07f --- /dev/null +++ b/docs/harperdb-studio/instance-example-code.md @@ -0,0 +1,58 @@ +# Instance Example Code + +Example code prepopulated with the instance URL and authorization token for the logged in database user can be found on the **example code** page of the HarperDB Studio. Code samples are generated based on the HarperDB API Documentation Postman collection. Code samples accessed with the following instructions: + +1) Navigate to the [HarperDB Studio Organizations](https://studio.harperdb.io/organizations) page. + +2) Click the appropriate organization that the instance belongs to. + +3) Select your desired instance. + +4) Click **example code** in the instance control bar. + +5) Select the appropriate **category** from the left navigation. + +6) Select the appropriate **operation** from the left navigation. + +7) Select your desired language/variant from the **Choose Programming Language** dropdown. + +8) Copy code from the sample code panel using the copy icon. + +## Supported Languages + +Sample code uses two identifiers: **language** and **variant**. + +* **language** is the programming language that the sample code is generated in. + +* **variant** is the methodology or library used by the language to send HarperDB requests. + +The list of available language/variants are as follows: + +| Language | Variant | +|--------------|---------------| +| C# | RestSharp | +| cURL | cURL | +| Go | Native | +| HTTP | HTTP | +| Java | OkHttp | +| Java | Unirest | +| JavaScript | Fetch | +| JavaScript | jQuery | +| JavaScript | XHR | +| NodeJs | Axios | +| NodeJs | Native | +| NodeJs | Request | +| NodeJs | Unirest | +| Objective-C | NSURLSession | +| OCaml | Cohttp | +| PHP | cURL | +| PHP | HTTP_Request2 | +| PowerShell | RestMethod | +| Python | http.client | +| Python | Requests | +| Ruby | Net:HTTP | +| Shell | Httpie | +| Shell | wget | +| Swift | URLSession | + + diff --git a/docs/harperdb-studio/instance-metrics.md b/docs/harperdb-studio/instance-metrics.md new file mode 100644 index 00000000..2dcd80c7 --- /dev/null +++ b/docs/harperdb-studio/instance-metrics.md @@ -0,0 +1,15 @@ +# Instance Metrics + +The HarperDB Studio display instance status and metrics on the instance status page, which can be accessed with the following instructions: + +1) Navigate to the [HarperDB Studio Organizations](https://studio.harperdb.io/organizations) page. + +2) Click the appropriate organization that the instance belongs to. + +3) Select your desired instance. + +4) Click **status** in the instance control bar. + +Once on the instance browse page you can view host system information, [HarperDB logs](https://harperdb.io/docs/reference/logging/), [HarperDB jobs](https://harperdb.io/docs/reference/job-logs/), and [HarperDB Cloud alarms](https://harperdb.io/docs/harperdb-cloud/alarms/) (if it is a cloud instance). + +*Note, the **status** page will only be available to super users.* \ No newline at end of file diff --git a/docs/harperdb-studio/instances.md b/docs/harperdb-studio/instances.md new file mode 100644 index 00000000..a5180e69 --- /dev/null +++ b/docs/harperdb-studio/instances.md @@ -0,0 +1,137 @@ +# Instances + +The HarperDB Studio allows you to administer all of your HarperDB instances in one place. HarperDB currently offers the following instance types: + +* **HarperDB Cloud Instance** +Managed installations of HarperDB, what we call [HarperDB Cloud](https://harperdb.io/docs/harperdb-cloud/). +* **5G Wavelength Instance** +Managed installations of HarperDB running on the Verizon network through AWS Wavelength, what we call [5G Wavelength Instances](https://harperdb.io/docs/harperdb-cloud/verizon-5g-wavelength/). *Note, these instances are only accessible via the Verizon network.* +* **User-Installed Instance** +Any HarperDB installation that is managed by you. These include instances hosted within your cloud provider accounts (for example, from the AWS or Digital Ocean Marketplaces), privately hosted instances, or instances installed locally. + +All interactions between the Studio and your instances take place directly from your browser. HarperDB stores metadata about your instances, which enables the Studio to display these instances when you login. Beyond that, all traffic is routed from your browser to the HarperDB instances using the standard [HarperDB API](https://harperdb.io/docs/harperdb-api/). + +## Organization Instance List +A summary view of all instances within an organization can be viewed by clicking on the appropriate organization from the [HarperDB Studio Organizations](https://studio.harperdb.io/organizations) page. Each instance gets their own card. HarperDB Cloud and user-installed instances are listed together. + +## Create a New Instance +A new instance can be created as follows: + +1) Navigate to the [HarperDB Studio Organizations](https://studio.harperdb.io/organizations) page. +2) Click the appropriate organization for the instance to be created under. +3) Click the **Create New HarperDB Cloud Instance + Register User-Installed Instance** card. +4) Select your desired Instance Type. +5) For a HarperDB Cloud Instance or a HarperDB 5G Wavelength Instance, click **Create HarperDB Cloud Instance**. + + 1) Fill out Instance Info. + 1) Enter Instance Name + + *This will be used to build your instance URL. For example, with subdomain “demo” and instance name “c1” the instance URL would be: https://c1-demo.harperdbcloud.com. The Instance URL will be previewed below.* + + 2) Enter Instance Username + + *This is the username of the initial HarperDB instance super user.* + + 3) Enter Instance Password + + *This is the password of the initial HarperDB instance super user.* + + 2) Click **Instance Details** to move to the next page. + 3) Select Instance Specs + + 1) Select Instance RAM + + *HarperDB Cloud Instances are billed based on Instance RAM, this will select the size of your provisioned instance. [More on instance specs](https://harperdb.io/docs/harperdb-cloud/instance-size-hardware-specs/).* + + 2) Select Storage Size + + *Each instance has a mounted storage volume where your HarperDB data will reside. Storage is provisioned based on space and IOPS. [More on IOPS Impact on Performance](https://harperdb.io/docs/harperdb-cloud/iops-impact-on-performance/).* + + 3) Select Instance Region + + *The geographic area where your instance will be provisioned.* + + 4) Click **Confirm Instance Details** to move to the next page. + 5) Review your Instance Details, if there is an error, use the back button to correct it. + 6) Review the [Privacy Policy](https://harperdb.io/legal/privacy-policy/) and [Terms of Service](https://harperdb.io/legal/harperdb-cloud-terms-of-service/), if you agree, click the **I agree** radio button to confirm. + 7) Click **Add Instance**. + 8) Your HarperDB Cloud instance will be provisioned in the background. Provisioning typically takes 5-15 minutes. You will receive an email notification when your instance is ready. + +6) For a user-installed instance, click **Register User-Installed Instance**. + + 1) Fill out Instance Info. + + 1) Enter Instance Name + + *This is used for descriptive purposes only.* + 2) Enter Instance Username + + *The username of a HarperDB super user that is already configured in your HarperDB installation.* + 3) Enter Instance Password + + *The password of a HarperDB super user that is already configured in your HarperDB installation.* + 4) Enter Host + + *The host to access the HarperDB instance. For example, `harperdb.myhost.com` or `localhost`.* + 5) Enter Port + + *The port to access the HarperDB instance. HarperDB defaults `9925` for HTTP and `31283` for HTTPS.* + 6) Select SSL + + *If your instance is running over SSL, select the SSL checkbox. If not, you will need to enable mixed content in your browser to allow the HTTPS Studio to access the HTTP instance. If there are issues connecting to the instance, the Studio will display a red error message.* + + 2) Click **Instance Details** to move to the next page. + 3) Select Instance Specs + 1) Select Instance RAM + + *HarperDB instances are billed based on Instance RAM. Selecting additional RAM will enable the ability for faster and more complex queries.* + 4) Click **Confirm Instance Details** to move to the next page. + 5) Review your Instance Details, if there is an error, use the back button to correct it. + 6) Review the [Privacy Policy](https://harperdb.io/legal/privacy-policy/) and [Terms of Service](https://harperdb.io/legal/harperdb-cloud-terms-of-service/), if you agree, click the **I agree** radio button to confirm. + 7) Click **Add Instance**. + 8) The HarperDB Studio will register your instance and restart it for the registration to take effect. Your instance will be immediately available after this is complete. + +## Delete an Instance + +Instance deletion has two different behaviors depending on the instance type. + +* **HarperDB Cloud Instance** +This instance will be permanently deleted, including all data. This process is irreversible and cannot be undone. +* **User-Installed Instance** +The instance will be removed from the HarperDB Studio only. This does not uninstall HarperDB from your system and your data will remain intact. + +An instance can be deleted as follows: + +1) Navigate to the [HarperDB Studio Organizations](https://studio.harperdb.io/organizations) page. +2) Click the appropriate organization that the instance belongs to. +3) Identify the proper instance card and click the trash can icon. +4) Enter the instance name into the text box. + + *This is done for confirmation purposes to ensure you do not accidentally delete an instance.* +5) Click the **Do It** button. + +## Upgrade an Instance + +HarperDB instances can be resized on the [Instance Configuration](https://harperdb.io/docs/harperdb-studio/instance-config/) page. + +## Instance Log In/Log Out + +The Studio enables users to log in and out of different database users from the instance control panel. To log out of an instance: + +1) Navigate to the [HarperDB Studio Organizations](https://studio.harperdb.io/organizations) page. +2) Click the appropriate organization that the instance belongs to. +3) Identify the proper instance card and click the lock icon. +4) You will immediately be logged out of the instance. + +To log in to an instance: + +1) Navigate to the [HarperDB Studio Organizations](https://studio.harperdb.io/organizations) page. +2) Click the appropriate organization that the instance belongs to. +3) Identify the proper instance card, it will have an unlocked icon and a status reading PLEASE LOG IN, and click the center of the card. +4) Enter the database username. + + *The username of a HarperDB user that is already configured in your HarperDB instance.* +5) Enter the database password. + + *The password of a HarperDB user that is already configured in your HarperDB instance.* +6) Click **Log In**. \ No newline at end of file diff --git a/docs/harperdb-studio/login-password-reset.md b/docs/harperdb-studio/login-password-reset.md new file mode 100644 index 00000000..99cca0a6 --- /dev/null +++ b/docs/harperdb-studio/login-password-reset.md @@ -0,0 +1,38 @@ +# Login and Password Reset + +## Log In to Your HarperDB Studio Account + +To log into your existing HarperDB Studio account: + +1) Navigate to the [HarperDB Studio](https://studio.harperdb.io/). +2) Enter your email address. +3) Enter your password. +4) Click **sign in**. + +## Reset a Forgotten Password + +To reset a forgotten password: + +1) Navigate to the HarperDB Studio password reset page. +2) Enter your email address. +3) Click **send password reset email**. +4) If the account exists, you will receive an email with a temporary password. +5) Navigate back to the HarperDB Studio login page. +6) Enter your email address. +7) Enter your temporary password. +8) Click **sign in**. +9) You will be taken to a new screen to reset your account password. Enter your new password. +*Passwords must be a minimum of 8 characters with at least 1 lower case character, 1 upper case character, 1 number, and 1 special character.* +10) Click the **add account password** button. + +## Change Your Password + +If you are already logged into the Studio, you can change your password though the user interface. + +1) Navigate to the HarperDB Studio profile page. +2) In the **password** section, enter: + + * Current password. + * New password. + * New password again *(for verification)*. +4) Click the **Update Password** button. \ No newline at end of file diff --git a/docs/harperdb-studio/manage-charts.md b/docs/harperdb-studio/manage-charts.md new file mode 100644 index 00000000..5f45ac9a --- /dev/null +++ b/docs/harperdb-studio/manage-charts.md @@ -0,0 +1,75 @@ +# Charts + +The HarperDB Studio includes a charting feature within an instance. They are generated in real time based on your existing data and automatically refreshed every 15 seconds. Instance charts can be accessed with the following instructions: + +1) Navigate to the [HarperDB Studio Organizations](https://studio.harperdb.io/organizations) page. +2) Click the appropriate organization that the instance belongs to. +3) Select your desired instance. +4) Click **charts** in the instance control bar. + +## Creating a New Chart + +Charts are generated based on SQL queries, therefore to build a new chart you first need to build a query. Instructions as follows (starting on the charts page described above): + +1) Click **query** in the instance control bar. +2) Enter the SQL query you would like to generate a chart from. + + *For example, using the dog demo data from the API Docs, we can get the average dog age per owner with the following query: `SELECT AVG(age) as avg_age, owner_name FROM dev.dog GROUP BY owner_name`.* + +3) Click **Execute**. + +4) Click **create chart** at the top right of the results table. + +5) Configure your chart. + + 1) Choose chart type. + + *HarperDB Studio offers many standard charting options like line, bar, etc.* + + 2) Choose a data column. + + *This column will be used to plot the data point. Typically, this is the values being calculated in the `SELECT` statement. Depending on the chart type, you can select multiple data columns to display on a single chart.* + 3) Depending on the chart type, you will need to select a grouping. + + *This could be labeled as x-axis, label, etc. This will be used to group the data, typically this is what you used in your **GROUP BY** clause.* + + 4) Enter a chart name. + + *Used for identification purposes and will be displayed at the top of the chart.* + + 5) Choose visible to all org users toggle. + + *Leaving this option off will limit chart visibility to just your HarperDB Studio user. Toggling it on will enable all users with this Organization to view this chart.* + + 6) Click **Add Chart**. + + 7) The chart will now be visible on the **charts** page. + +The example query above, configured as a bar chart, results in the following chart: + +![Average Age per Owner Example](../../images/ave-age-per-owner-ex.png) + + +## Downloading Charts +HarperDB Studio charts can be downloaded in SVG, PNG, and CSV format. Instructions as follows (starting on the charts page described above): + +1) Identify the chart you would like to export. +2) Click the three bars icon. + +3) Select the appropriate download option. + +4) The Studio will generate the export and begin downloading immediately. + +## Delete a Chart + +Delete a chart as follows (starting on the charts page described above): + +1) Identify the chart you would like to delete. + +2) Click the X icon. + +3) Click the **confirm delete chart** button. + +4) The chart will be deleted. + +Deleting a chart that is visible to all Organization users will delete it for all users. \ No newline at end of file diff --git a/docs/harperdb-studio/manage-clustering.md b/docs/harperdb-studio/manage-clustering.md new file mode 100644 index 00000000..a3c70ba9 --- /dev/null +++ b/docs/harperdb-studio/manage-clustering.md @@ -0,0 +1,90 @@ +# Manage Clustering + +HarperDB instance clustering and replication can be configured directly through the HarperDB Studio. It is recommended to read through the clustering documentation first to gain a strong understanding of HarperDB clustering behavior. + + + +All clustering configuration is handled through the **cluster** page of the HarperDB Studio, accessed with the following instructions: + +1) Navigate to the [HarperDB Studio Organizations](https://studio.harperdb.io/organizations) page. + +2) Click the appropriate organization that the instance belongs to. + +3) Select your desired instance. + +4) Click **cluster** in the instance control bar. + +Note, the **cluster** page will only be available to super users. + +--- +## Initial Configuration + +HarperDB instances do not have clustering configured by default. The HarperDB Studio will walk you through the initial configuration. Upon entering the **cluster** screen for the first time you will need to complete the following configuration. Configurations are set in the **enable clustering** panel on the left while actions are described in the middle of the screen. + +1) Create a cluster user, read more about this here: Clustering Users and Roles. + * Enter username. + + * Enter password. + + * Click **Create Cluster User**. + +2) Click **Set Cluster Node Name**. +3) Click **Enable Instance Clustering**. + +At this point the Studio will restart your HarperDB Instance, required for the configuration changes to take effect. + +--- + +## Manage Clustering +Once initial clustering configuration is completed you a presented with a clustering management screen with the following properties: + +* **connected instances** + + Displays all instances within the Studio Organization that this instance manages a connection with. + +* **unconnected instances** + + Displays all instances within the Studio Organization that this instance does not manage a connection with. + +* **unregistered instances** + + Displays all instances outside of the Studio Organization that this instance manages a connection with. + +* **manage clustering** + + Once instances are connected, this will display clustering management options for all connected instances and all schemas and tables. +--- + +## Connect an Instance + +HarperDB Instances can be clustered together with the following instructions. + +1) Ensure clustering has been configured on both instances and a cluster user with identical credentials exists on both. + +2) Identify the instance you would like to connect from the **unconnected instances** panel. + +3) Click the plus icon next the appropriate instance. + +4) If configurations are correct, all schemas will sync across the cluster, then appear in the **manage clustering** panel. If there is a configuration issue, a red exclamation icon will appear, click it to learn more about what could be causing the issue. + +--- + +## Disconnect an Instance + +HarperDB Instances can be disconnected with the following instructions. + +1) Identify the instance you would like to disconnect from the **connected instances** panel. + +2) Click the minus icon next the appropriate instance. + +--- + +## Manage Replication + +Subscriptions must be configured in order to move data between connected instances. Read more about subscriptions here: Creating A Subscription. The **manage clustering** panel displays a table with each row representing an channel per instance. Cells are bolded to indicate a change in the column. Publish and subscribe replication can be configured per table with the following instructions: + +1) Identify the instance, schema, and table for replication to be configured. + +2) For publish, click the toggle switch in the **publish** column. + +3) For subscribe, click the toggle switch in the **subscribe** column. \ No newline at end of file diff --git a/docs/harperdb-studio/manage-functions.md b/docs/harperdb-studio/manage-functions.md new file mode 100644 index 00000000..499337f0 --- /dev/null +++ b/docs/harperdb-studio/manage-functions.md @@ -0,0 +1,167 @@ +# Manage Functions + +HarperDB Custom Functions can be configured directly through the HarperDB Studio. It is recommended to read through the Custom Functions documentation first to gain a strong understanding of HarperDB Custom Functions behavior. + + + +All Custom Functions configuration is handled through the **functions** page of the HarperDB Studio, accessed with the following instructions: + +1) Navigate to the HarperDB Studio Organizations page. + +2) Click the appropriate organization that the instance belongs to. + +3) Select your desired instance. + +4) Click **functions** in the instance control bar. + +*Note, the **functions** page will only be available to super users.* + +## Initial Configuration + +HarperDB instances do not have Custom Functions configured by default. The HarperDB Studio will walk you through the initial configuration. Upon entering the **functions** screen for the first time you will need to complete the following configuration. Configurations are set in the **enable custom functions** panel on the left while actions are described in the middle of the screen. + +1) Click **Enable Custom Functions**. + +At this point the Studio will restart your HarperDB Instance, required for the configuration changes to take effect. + +## Manage Projects + +Once initial Custom Functions configuration is completed you a presented with a functions management screen with the following properties: + +* **projects** + + Displays a list of Custom Functions projects residing on this instance. +* **/project_name/routes** + + Only displayed if there is an existing project. Displays the routes files contained within the selected project. +* **/project_name/helpers** + + Only displayed if there is an existing project. Displays the helper files contained within the selected project. +* **/project_name/static** + + Only displayed if there is an existing project. Displays the static file count and a link to the static files contained within the selected project. Note, static files cannot currently be deployed through the Studio and must be deployed via the [HarperDB API](https://harperdb.io/docs/harperdb-api/) or manually to the server (not applicable with HarperDB Cloud). +* **Root File Directory** + + Displays the root file directory where the Custom Functions projects reside on this instance. +* **Custom Functions Server URL** + + Displays the base URL in which all Custom Functions are accessed for this instance. + + +## Create a Project + +HarperDB Custom Functions Projects can be initialized with the following instructions. + +1) If this is your first project, skip this step. Click the plus icon next to the **projects** heading. + +2) Enter the project name in the text box located under the **projects** heading. + +3) Click the check mark icon next the appropriate instance. + +4) The Studio will take a few moments to provision a new project based on the [Custom Functions template](https://github.com/HarperDB/harperdb-custom-functions-template). + +5) The Custom Functions project is now created and ready to modify. + +## Modify a Project + +Custom Functions routes and helper functions can be modified directly through the Studio. From the **functions** page: + +1) Select the appropriate **project**. + +2) Select the appropriate **route** or **helper**. + +3) Modify the code with your desired changes. + +4) Click the save icon at the bottom right of the screen. + + *Note, saving modifications will restart the Custom Functions server on your HarperDB instance and may result in up to 60 seconds of downtime for all Custom Functions.* + +## Create Additional Routes/Helpers + +To create an additional **route** to your Custom Functions project. From the **functions** page: + +1) Select the appropriate Custom Functions **project**. + +2) Click the plus icon to the right of the **routes** header. + +3) Enter the name of the new route in the textbox that appears. + +4) Click the check icon to create the new route. + + *Note, adding a route will restart the Custom Functions server on your HarperDB instance and may result in up to 60 seconds of downtime for all Custom Functions.* + +To create an additional **helper** to your Custom Functions project. From the **functions** page: + +1) Select the appropriate Custom Functions **project**. + +2) Click the plus icon to the right of the **helpers** header. + +3) Enter the name of the new helper in the textbox that appears. + +4) Click the check icon to create the new helper. + + *Note, adding a helper will restart the Custom Functions server on your HarperDB instance and may result in up to 60 seconds of downtime for all Custom Functions.* + +## Delete a Project/Route/Helper + +To delete a Custom Functions project from the **functions** page: + +1) Click the minus icon to the right of the **projects** header. + +2) Click the red minus icon to the right of the Custom Functions project you would like to delete. + +3) Confirm deletion by clicking the red check icon. + + *Note, deleting a project will restart the Custom Functions server on your HarperDB instance and may result in up to 60 seconds of downtime for all Custom Functions.* + +To delete a Custom Functions _project route_ from the **functions** page: + +1) Select the appropriate Custom Functions **project**. + +2) Click the minus icon to the right of the **routes** header. + +3) Click the red minus icon to the right of the Custom Functions route you would like to delete. + +4) Confirm deletion by clicking the red check icon. + + *Note, deleting a route will restart the Custom Functions server on your HarperDB instance and may result in up to 60 seconds of downtime for all Custom Functions.* + +To delete a Custom Functions _project helper_ from the **functions** page: + +1) Select the appropriate Custom Functions **project**. + +2) Click the minus icon to the right of the **helper** header. + +3) Click the red minus icon to the right of the Custom Functions header you would like to delete. + +4) Confirm deletion by clicking the red check icon. + + *Note, deleting a header will restart the Custom Functions server on your HarperDB instance and may result in up to 60 seconds of downtime for all Custom Functions.* + +## Deploy Custom Functions Project to Other Instances + +The HarperDB Studio provides the ability to deploy Custom Functions projects to additional HarperDB instances within the same Studio Organization. To deploy Custom Functions projects to additional instances, starting from the **functions** page: + +1) Select the **project** you would like to deploy. + +2) Click the **deploy** button at the top right. + +3) A list of instances (excluding the current instance) within the organization will be displayed in tabular with the following information: + + * **Instance Name**: The name used to describe the instance. + + * **Instance URL**: The URL used to access the instance. + + * **CF Capable**: Describes if the instance version supports Custom Functions (yes/no). + + * **CF Enabled**: Describes if Custom Functions are configured and enabled on the instance (yes/no). + + * **Has Project**: Describes if the selected Custom Functions project has been previously deployed to the instance (yes/no). + + * **Deploy**: Button used to deploy the project to the instance. + + * **Remote**: Button used to remove the project from the instance. *Note, this will only be visible if the project has been previously deployed to the instance.* + +4) In the appropriate instance row, click the **deploy** button. + + *Note, deploying a project will restart the Custom Functions server on the HarperDB instance receiving the deployment and may result in up to 60 seconds of downtime for all Custom Functions.* \ No newline at end of file diff --git a/docs/harperdb-studio/manage-instance-roles.md b/docs/harperdb-studio/manage-instance-roles.md new file mode 100644 index 00000000..967489b7 --- /dev/null +++ b/docs/harperdb-studio/manage-instance-roles.md @@ -0,0 +1,72 @@ +# Manage Instance Roles + +HarperDB users can be managed directly through the HarperDB Studio. It is recommended to read through the users & roles documentation to gain a strong understanding of how they operate. + + + +Instance role configuration is handled through the roles page of the HarperDB Studio, accessed with the following instructions: + +1) Navigate to the HarperDB Studio Organizations page. + +2) Click the appropriate organization that the instance belongs to. + +3) Select your desired instance. + +4) Click **rules** in the instance control bar. + +*Note, the **roles** page will only be available to super users.* + + + +The *roles management* screen consists of the following panels: + +* **super users** + + Displays all super user roles for this instance. +* **cluster users** + + Displays all cluster user roles for this instance. +* **standard roles** + + Displays all standard roles for this instance. +* **role permission editing** + + Once a role is selected for editing, permissions will be displayed here in JSON format. + +*Note, when new tables are added that are not configured, the Studio will generate configuration values with permissions defaulting to `false`.* + +## Role Management + +#### Create a Role + +1) Click the plus icon at the top right of the appropriate role section. + +2) Enter the role name. + +3) Click the green check mark. + +4) Configure the role permissions in the role permission editing panel. + + *Note, to have the Studio generate attribute permissions JSON, toggle **show all attributes** at the top right of the role permission editing panel.* + +5) Click **Update Role Permissions**. + +#### Modify a Role + +1) Click the appropriate role from the appropriate role section. + +2) Modify the role permissions in the role permission editing panel. + + *Note, to have the Studio generate attribute permissions JSON, toggle **show all attributes** at the top right of the role permission editing panel.* + +3) Click **Update Role Permissions**. + +#### Delete a Role + +Deleting a role is permanent and irreversible. A role cannot be remove if users are associated with it. + +1) Click the minus icon at the top right of the schemas section. + +2) Identify the appropriate role to delete and click the red minus sign in the same row. + +3) Click the red check mark to confirm deletion. \ No newline at end of file diff --git a/docs/harperdb-studio/manage-instance-users.md b/docs/harperdb-studio/manage-instance-users.md new file mode 100644 index 00000000..1b638d69 --- /dev/null +++ b/docs/harperdb-studio/manage-instance-users.md @@ -0,0 +1,59 @@ +# Manage Instance Users + +HarperDB instance clustering and replication can be configured directly through the HarperDB Studio. It is recommended to read through the clustering documentation first to gain a strong understanding of HarperDB clustering behavior. + + + +Instance user configuration is handled through the **users** page of the HarperDB Studio, accessed with the following instructions: + +1) Navigate to the [HarperDB Studio Organizations](https://studio.harperdb.io/organizations) page. + +2) Click the appropriate organization that the instance belongs to. + +3) Select your desired instance. + +4) Click **users** in the instance control bar. + +*Note, the **users** page will only be available to super users.* + +## Add a User + +HarperDB instance users can be added with the following instructions. + +1) In the **add user** panel on the left enter: + + * New user username. + + * New user password. + + * Select a role. + + *Learn more about role management here: [Manage Instance Roles](https://harperdb.io/docs/harperdb-studio/manage-instance-roles/).* + +2) Click **Add User**. + +## Edit a User + +HarperDB instance users can be modified with the following instructions. + +1) In the **existing users** panel, click the row of the user you would like to edit. + +2) To change a user’s password: + + 1) In the **Change user password** section, enter the new password. + + 2) Click **Update Password**. + +3) To change a user’s role: + + 1) In the **Change user role** section, select the new role. + + 2) Click **Update Role**. + +4) To delete a user: + + 1) In the **Delete User** section, type the username into the textbox. + + *This is done for confirmation purposes.* + + 2) Click **Delete User**. \ No newline at end of file diff --git a/docs/harperdb-studio/manage-schemas-browse-data.md b/docs/harperdb-studio/manage-schemas-browse-data.md new file mode 100644 index 00000000..0f5f3d9b --- /dev/null +++ b/docs/harperdb-studio/manage-schemas-browse-data.md @@ -0,0 +1,128 @@ +# Manage Schemas / Browse Data + +Manage instance schemas/tables and browse data in tabular format with the following instructions: + +1) Navigate to the HarperDB Studio Organizations page. +2) Click the appropriate organization that the instance belongs to. +3) Select your desired instance. +4) Click **browse** in the instance control bar. + +Once on the instance browse page you can view data, manage schemas and tables, add new data, and more. + +## Manage Schemas and Tables + +#### Create a Schema + +1) Click the plus icon at the top right of the schemas section. +2) Enter the schema name. +3) Click the green check mark. + + +#### Delete a Schema + +Deleting a schema is permanent and irreversible. Deleting a schema removes all tables and data within it. + +1) Click the minus icon at the top right of the schemas section. +2) Identify the appropriate schema to delete and click the red minus sign in the same row. +3) Click the red check mark to confirm deletion. + + +#### Create a Table + +1) Select the desired schema from the schemas section. +2) Click the plus icon at the top right of the tables section. +3) Enter the table name. +4) Enter the primary key. + + *The primary key is also often referred to as the hash attribute in the studio, and it defines the unique identifier for each row in your table.* +5) Click the green check mark. + + +#### Delete a Table +Deleting a table is permanent and irreversible. Deleting a table removes all data within it. + +1) Select the desired schema from the schemas section. +2) Click the minus icon at the top right of the tables section. +3) Identify the appropriate table to delete and click the red minus sign in the same row. +4) Click the red check mark to confirm deletion. + +## Manage Table Data + +The following section assumes you have selected the appropriate table from the schema/table browser. + + + +#### Filter Table Data + +1) Click the magnifying glass icon at the top right of the table browser. +2) This expands the search filters. +3) The results will be filtered appropriately. + + +#### Load CSV Data + +1) Click the data icon at the top right of the table browser. You will be directed to the CSV upload page where you can choose to import a CSV by URL or upload a CSV file. +2) To import a CSV by URL: + 1) Enter the URL in the **CSV file URL** textbox. + 2) Click **Import From URL**. + 3) The CSV will load and you will be redirected back to browse table data. +3) To upload a CSV file: + 1) Click **Click or Drag to select a .csv file** (or drag your CSV file from your file browser). + 2) Navigate to your desired CSV file and select it. + 3) Click **Insert X Records**, where X is the number of records in your CSV. + 4) The CSV will load, and you will be redirected back to browse table data. + + +#### Add a Record + +1) Click the plus icon at the top right of the table browser. +2) The Studio will pre-populate existing table attributes in JSON format. + + *The primary key is not included, but you can add it in and set it to your desired value. Auto-maintained fields are not included and cannot be manually set. You may enter a JSON array to insert multiple records in a single transaction.* +3) Enter values to be added to the record. + + *You may add new attributes to the JSON; they will be reflexively added to the table.* +4) Click the **Add New** button. + + +#### Edit a Record + +1) Click the record/row you would like to edit. +2) Modify the desired values. + + *You may add new attributes to the JSON; they will be reflexively added to the table.* + +3) Click the **save icon**. + + +#### Delete a Record + +Deleting a record is permanent and irreversible. If transaction logging is turned on, the delete transaction will be recorded as well as the data that was deleted. + +1) Click the record/row you would like to delete. +2) Click the **delete icon**. +3) Confirm deletion by clicking the **check icon**. + +## Browse Table Data + +The following section assumes you have selected the appropriate table from the schema/table browser. + +#### Browse Table Data + +The first page of table data is automatically loaded on table selection. Paging controls are at the bottom of the table. Here you can: + +* Page left and right using the arrows. +* Type in the desired page. +* Change the page size (the amount of records displayed in the table). + + +#### Refresh Table Data + +Click the refresh icon at the top right of the table browser. + + + +#### Automatically Refresh Table Data + +Toggle the auto switch at the top right of the table browser. The table data will now automatically refresh every 15 seconds. Filters and pages will remain set for refreshed data. + diff --git a/docs/harperdb-studio/organizations.md b/docs/harperdb-studio/organizations.md new file mode 100644 index 00000000..8206601f --- /dev/null +++ b/docs/harperdb-studio/organizations.md @@ -0,0 +1,101 @@ +# Organizations +HarperDB Studio organizations provide the ability to group HarperDB Cloud Instances. Organization behavior is as follows: + +* Billing occurs at the organization level to a single credit card. +* Organizations retain their own unique HarperDB Cloud subdomain. +* Cloud instances reside within an organization. +* Studio users can be invited to organizations to share instances. + + +An organization is automatically created for you when you sign up for HarperDB Studio. If you only have one organization, the Studio will automatically bring you to your organization’s page. + +--- + +## List Organizations +A summary view of all organizations your user belongs to can be viewed on the [HarperDB Studio Organizations](https://studio.harperdb.io/?redirect=/organizations) page. You can navigate to this page at any time by clicking the **all organizations** link at the top of the HarperDB Studio. + +## Create a New Organization +A new organization can be created as follows: + +1) Navigate to the [HarperDB Studio Organizations](https://studio.harperdb.io/?redirect=/organizations) page. +2) Click the **Create a New Organization** card. +3) Fill out new organization details + * Enter Organization Name + *This is used for descriptive purposes only.* + * Enter Organization Subdomain + *Part of the URL that will be used to identify your HarperDB Cloud Instances. For example, with subdomain “demo” and instance name “c1” the instance URL would be: https://c1-demo.harperdbcloud.com.* +4) Click Create Organization. + +## Delete an Organization +An organization cannot be deleted until all instances have been removed. An organization can be deleted as follows: + +1) Navigate to the HarperDB Studio Organizations page. +2) Identify the proper organization card and click the trash can icon. +3) Enter the organization name into the text box. + + *This is done for confirmation purposes to ensure you do not accidentally delete an organization.* +4) Click the **Do It** button. + +## Manage Users +HarperDB Studio organization owners can manage users including inviting new users, removing users, and toggling ownership. + + + +#### Inviting a User +A new user can be invited to an organization as follows: + +1) Navigate to the [HarperDB Studio Organizations](https://studio.harperdb.io/?redirect=/organizations) page. +2) Click the appropriate organization card. +3) Click **users** at the top of the screen. +4) In the **add user** box, enter the new user’s email address. +5) Click **Add User**. + +Users may or may not already be HarperDB Studio users when adding them to an organization. If the HarperDB Studio account already exists, the user will receive an email notification alerting them to the organization invitation. If the user does not have a HarperDB Studio account, they will receive an email welcoming them to HarperDB Studio. + +--- + +#### Toggle a User’s Organization Owner Status +Organization owners have full access to the organization including the ability to manage organization users, create, modify, and delete instances, and delete the organization. Users must have accepted their invitation prior to being promoted to an owner. A user’s organization owner status can be toggled owner as follows: + +1) Navigate to the HarperDB Studio Organizations page. +2) Click the appropriate organization card. +3) Click **users** at the top of the screen. +4) Click the appropriate user from the **existing users** section. +5) Toggle the **Is Owner** switch to the desired status. +--- + +#### Remove a User from an Organization +Users may be removed from an organization at any time. Removing a user from an organization will not delete their HarperDB Studio account, it will only remove their access to the specified organization. A user can be removed from an organization as follows: + +1) Navigate to the [HarperDB Studio Organizations](https://studio.harperdb.io/?redirect=/organizations) page. +2) Click the appropriate organization card. +3) Click **users** at the top of the screen. +4) Click the appropriate user from the **existing users** section. +5) Type **DELETE** in the text box in the **Delete User** row. + + *This is done for confirmation purposes to ensure you do not accidentally delete a user.* +6) Click **Delete User**. + +## Manage Billing + +Billing is configured per organization and will be billed to the stored credit card at appropriate intervals (monthly or annually depending on the registered instance). Billing settings can be configured as follows: + +1) Navigate to the [HarperDB Studio Organizations](https://studio.harperdb.io/?redirect=/organizations) page. +2) Click the appropriate organization card. +3) Click **billing** at the top of the screen. + +Here organization owners can view invoices, manage coupons, and manage the associated credit card. + + + +*HarperDB billing and payments are managed via Stripe.* + + + +### Add a Coupon + +Coupons are applicable towards any paid tier or user-installed instance and you can change your subscription at any time. Coupons can be added to your Organization as follows: + +1) In the coupons panel of the **billing** page, enter your coupon code. +2) Click **Add Coupon**. +3) The coupon will then be available and displayed in the coupons panel. \ No newline at end of file diff --git a/docs/harperdb-studio/query-instance-data.md b/docs/harperdb-studio/query-instance-data.md new file mode 100644 index 00000000..04f178b8 --- /dev/null +++ b/docs/harperdb-studio/query-instance-data.md @@ -0,0 +1,49 @@ +# Query Instance Data + +SQL queries can be executed directly through the HarperDB Studio with the following instructions: + +1) Navigate to the [HarperDB Studio Organizations](https://studio.harperdb.io/organizations) page. +2) Click the appropriate organization that the instance belongs to. +3) Select your desired instance. +4) Click **query** in the instance control bar. +5) Enter your SQL query in the SQL query window. +6) Click **Execute**. + +*Please note, the Studio will execute the query exactly as entered. For example, if you attempt to `SELECT *` from a table with millions of rows, you will most likely crash your browser.* + +## Browse Query Results Set + +#### Browse Results Set Data + +The first page of results set data is automatically loaded on query execution. Paging controls are at the bottom of the table. Here you can: + +* Page left and right using the arrows. +* Type in the desired page. +* Change the page size (the amount of records displayed in the table). + +#### Refresh Results Set + +Click the refresh icon at the top right of the results set table. + +#### Automatically Refresh Results Set + +Toggle the auto switch at the top right of the results set table. The results set will now automatically refresh every 15 seconds. Filters and pages will remain set for refreshed data. + +## Query History + +Query history is stored in your local browser cache. Executed queries are listed with the most recent at the top in the **query history** section. + + +#### Rerun Previous Query + +* Identify the query from the **query history** list. +* Click the appropriate query. It will be loaded into the **sql query** input box. +* Click **Execute**. + +#### Clear Query History + +Click the trash can icon at the top right of the **query history** section. + +## Create Charts + +The HarperDB Studio includes a charting feature where you can build charts based on your specified queries. Visit the Charts documentation for more information. \ No newline at end of file diff --git a/docs/harperdb-studio/resources.md b/docs/harperdb-studio/resources.md new file mode 100644 index 00000000..7269e57f --- /dev/null +++ b/docs/harperdb-studio/resources.md @@ -0,0 +1,39 @@ +# Resources (Marketplace, Drivers, Tutorials, & Example Code) + +HarperDB Studio resources are available regardless of whether or not you are logged in. + +# HarperDB Marketplace + +The [HarperDB Marketplace](https://studio.harperdb.io/resources/marketplace/active) is a collection of SDKs and connectors that enable developers to expand upon HarperDB for quick and easy solution development. Extensions are built and supported by the HarperDB Community. Each extension is hosted on the appropriate package manager or host. + + + +To download a Marketplace extension: + +1) Navigate to the [HarperDB Marketplace](https://studio.harperdb.io/resources/marketplace/active) page. +2) Identity the extension you would like to use. +3) Either click the link to the package. +4) Follow the extension’s instructions to proceed. + +You can submit your rating for each extension by clicking on the stars. + +## HarperDB Drivers + +HarperDB offers standard drivers to connect real-time HarperDB data with BI, analytics, reporting and data visualization technologies. Drivers are built and maintained by [CData Software](https://www.cdata.com/drivers/harperdb/). + + + +To download a driver: + +1) Navigate to the [HarperDB Drivers](https://studio.harperdb.io/resources/marketplace/active) page. +2) Identity the driver you would like to use. +3) Click the download link. +4) For additional instructions, visit the support link on the driver card. + +## Video Tutorials + +HarperDB offers video tutorials available in the Studio on the [HarperDB Tutorials](https://studio.harperdb.io/resources/tutorials/UExsZ1RNVEtzeXBTNUdJbjRZaTNOeEM0aW5YX3RBNU85SS4yODlGNEE0NkRGMEEzMEQy) page as well as our [YouTube channel](https://www.youtube.com/playlist?list=PLlgTMTKsypS5GIn4Yi3NxC4inX_tA5O9I). The HarperDB Studio is changing all the time, as a result these, the videos may not include all of the current Studio features. + +## Example Code + +The [code examples](https://studio.harperdb.io/resources/examples/QuickStart%20Examples/Create%20dev%20Schema) page offers example code for many different programming languages. These samples will include a placeholder for your authorization token. Full code examples with the authorization token prepopulated are available within individual instance pages. \ No newline at end of file diff --git a/docs/install-harperdb/index.md b/docs/install-harperdb/index.md index 1c8841fc..84de45de 100644 --- a/docs/install-harperdb/index.md +++ b/docs/install-harperdb/index.md @@ -6,6 +6,7 @@ This section contains technical details and reference materials for installing H * [Linux](linux.md) * [Docker](docker.md) -* Mac -* Windows (WSL2) -* Offline +* [Mac](mac.md) +* [Windows](windows.md) +* [Offline](offline.md) +* [Other](other.md) \ No newline at end of file diff --git a/docs/install-harperdb/mac.md b/docs/install-harperdb/mac.md new file mode 100644 index 00000000..e4f97bea --- /dev/null +++ b/docs/install-harperdb/mac.md @@ -0,0 +1,17 @@ +# Mac Development Requirements + +MacOS is not recommended as a production operating system, but it is great for development. For more information on standard HarperDB installation visit the HarperDB Command Line Interface guide. This page details the unique cases you may run into when installing on Mac. + + + +Please note, HarperDB suggests Node.js v18.12.0 as a prerequisite to installation, but we allow Node.js versions 14.0.0 & higher. [Learn more here](https://harperdb.io/docs/install-harperdb/node-version/). + +--- + +To install HarperDB please visit the npm install guide: https://www.npmjs.com/package/harperdb. + +or from the command line: +```bash +npm install -g harperdb +harperdb +``` diff --git a/docs/install-harperdb/node-ver-requirement.md b/docs/install-harperdb/node-ver-requirement.md new file mode 100644 index 00000000..ae4e6e0b --- /dev/null +++ b/docs/install-harperdb/node-ver-requirement.md @@ -0,0 +1,7 @@ +# Node Version Requirement + +HarperDB installations suggest Node.js v18.12.0, but we allow Node.js versions 14.0.0 & higher, in order to be installed. We recommend using Node Version Manager (nvm) to manage your Node.js installations, an example of how to install HarperDB using nvm can be found on our Linux Install doc. + + + +HarperDB 4.0.0, our current release, suggests Node.js v18.12.0. \ No newline at end of file diff --git a/docs/install-harperdb/offline.md b/docs/install-harperdb/offline.md new file mode 100644 index 00000000..b1ff72de --- /dev/null +++ b/docs/install-harperdb/offline.md @@ -0,0 +1,14 @@ +# Offline Install + +If you need to install HarperDB on a device that doesn't have an Internet connection, you can download the npm package and install it directly (you’ll still need Node.js and NPM): + +Download Install Package + + +Once you’ve downloaded the .tgz file, run the following command from the directory where you’ve placed it: + +```bash +npm install -g harperdb-X.X.X.tgz harperdb install +``` + +For more information visit the [HarperDB Command Line Interface](https://harperdb.io/docs/administration/harperdb-cli/) guide. \ No newline at end of file diff --git a/docs/install-harperdb/other.md b/docs/install-harperdb/other.md new file mode 100644 index 00000000..9fc7a500 --- /dev/null +++ b/docs/install-harperdb/other.md @@ -0,0 +1,9 @@ +# Other Install Information + + +If you are installing on a platform other than linux-amd64, linux-arm64, darwin-amd64, darwin-arm64, windows-amd64, you will need to ensure that you have installed: +* [Go](https://go.dev/dl/): version 1.19.1 +* GCC +* Make +* Python v3.7, v3.8, v3.9, or v3.10 + diff --git a/docs/install-harperdb/windows.md b/docs/install-harperdb/windows.md new file mode 100644 index 00000000..d9713b1e --- /dev/null +++ b/docs/install-harperdb/windows.md @@ -0,0 +1,13 @@ +# Install HarperDB on Windows + +Running HarperDB on Windows 10 or 11 is a great way to test and develop with HarperDB. We do not, though, recommend HarperDB on Windows for production workloads. + +--- + +Install HarperDB on Windows + +```bash +npm install -g harperdb +harperdb +```` +HarperDB will automatically start after installation. For more information visit the [HarperDB Command Line Interface guide](https://harperdb.io/docs/administration/harperdb-cli/). diff --git a/docs/security/basic-auth.md b/docs/security/basic-auth.md new file mode 100644 index 00000000..9cf0678b --- /dev/null +++ b/docs/security/basic-auth.md @@ -0,0 +1,64 @@ +# Authentication + +HarperDB uses Basic Auth and JSON Web Tokens (JWTs) to secure our HTTP requests. In the context of an HTTP transaction, **basic access authentication** is a method for an HTTP user agent to provide a user name and password when making a request. + + + +** ***You do not need to log in separately. Basic Auth is added to each HTTP request like create_schema, create_table, insert etc… via headers.*** ** + + + +A header is added to each HTTP request. The header key is **“Authorization”** the header value is **“Basic <>”** + + + + + +## Authentication in HarperDB Studio + +Below is a code sample from HarperDB Studio. On Line 14 you will see where we are adding the authorization header to each request. This needs to be added for each and every HTTP request for HarperDB. + +```javascript +function callHarperDB(call_object, operation, callback){ + + const options = { + "method": "POST", + "hostname": call_object.endpoint_url, + "port": call_object.endpoint_port, + "path": "/", + "headers": { + "content-type": "application/json", + "authorization": "Basic " + btoa(call_object.username + ':' + call_object.password), + "cache-control": "no-cache" + + } + }; + + const http_req = http.request(options, function (hdb_res) { + let chunks = []; + + hdb_res.on("data", function (chunk) { + chunks.push(chunk); + }); + + hdb_res.on("end", function () { + const body = Buffer.concat(chunks); + if (isJson(body)) { + return callback(null, JSON.parse(body)); + } else { + return callback(body, null); + + } + + }); + }); + + http_req.on("error", function (chunk) { + return callback("Failed to connect", null); + }); + + http_req.write(JSON.stringify(operation)); + http_req.end(); + +} +``` \ No newline at end of file diff --git a/docs/security/configuration.md b/docs/security/configuration.md new file mode 100644 index 00000000..708cd573 --- /dev/null +++ b/docs/security/configuration.md @@ -0,0 +1,57 @@ +# Configuration + +HarperDB was set up to require very minimal configuration to work out of the box. There are, however, some best practices we encourage for anyone building an app with HarperDB. + + + +## CORS + +HarperDB allows for managing [cross-origin HTTP requests](https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS). By default, HarperDB enables CORS for all domains if you need to disable CORS completely or set up an access list of domains you can do the following: + +1) Open the harperdb-config.yaml file this can be found in /, the location you specified during install. + +2) In harperdb-config.yaml there should be 2 entries under `operationsApi.network`: cors and corsAccessList. + * `cors` + + 1) To turn off, change to: `cors: false` + + 2) To turn on, change to: `cors: true` + + * `corsAccessList` + + 1) The `corsAccessList` will only be recognized by the system when `cors` is `true` + + 2) To create an access list you set `corsAccessList` to a comma-separated list of domains. + + i.e. `corsAccessList` is `http://harperdb.io,http://products.harperdb.io` + + 3) To clear out the access list and allow all domains: `corsAccessList` is `[null]` + + +## SSL + +HarperDB provides the option to use an HTTP or HTTPS interface. The default port for the server is 9925. + + + +These default ports can be changed by updating the `operationsApi.network.port` value in `/harperdb-config.yaml` + + + +By default, HTTPS is turned off and HTTP is turned on. It is recommended that you never directly expose HarperDB's HTTP interface through a publicly available port. HTTP is intended for local or private network use. + + + +You can toggle HTTPS and HTTP in the settings file. By setting `operationsApi.network.https` to true/false. When `https` is set to `false`, the server will use HTTP. + + + +HarperDB automatically generates a certificate and a privateKey file which live at `/keys/`. + + + +You can replace these with your own certificate and key. + + + +**If any of these settings are changed please make sure to run `harperdb restart` as they will not take effect until a restart.** \ No newline at end of file diff --git a/docs/security/index.md b/docs/security/index.md index 8dbb2f9b..9bba60da 100644 --- a/docs/security/index.md +++ b/docs/security/index.md @@ -1 +1,9 @@ # Security + +HarperDB uses role-based, attribute-level security to ensure that users can only gain access to the data they’re supposed to be able to access. Our granular permissions allow for unparalleled flexibility and control, and can actually lower the total cost of ownership compared to other database solutions, since you no longer have to replicate subsets of your data to isolate use cases. + +* [JWT Authentication](https://harperdb.io/docs/security/jwt-authentication/) +* [Basic Authentication](https://harperdb.io/docs/security/authentication/) +* [Configuration](https://harperdb.io/docs/security/configuration/) +* [Users and Roles](https://harperdb.io/docs/security/users-roles/) + diff --git a/docs/security/jwt-auth.md b/docs/security/jwt-auth.md new file mode 100644 index 00000000..a7ff19ea --- /dev/null +++ b/docs/security/jwt-auth.md @@ -0,0 +1,93 @@ +# JWT Authentication +HarperDB uses token based authentication with JSON Web Tokens, JWTs. + +This consists of two primary operations `create_authentication_tokens` and `refresh_operation_token`. These generate two types of tokens, as follows: + +* The `operation_token` which is used to authenticate all HarperDB operations in the Bearer Token Authorization Header. The default expiry is one day. + +* The `refresh_token` which is used to generate a new `operation_token` upon expiry. This token is used in the Bearer Token Authorization Header for the `refresh_operation_token` operation only. The default expiry is thirty days. + +The `create_authentication_tokens` operation can be used at any time to refresh both tokens in the event that both have expired or been lost. + +## Create Authentication Tokens + +Users must initially create tokens using their HarperDB credentials. The following POST body is sent to HarperDB. No headers are required for this POST operation. + +```json +{ + "operation": "create_authentication_tokens", + "username": "username", + "password": "password" +} +``` + +A full cURL example can be seen here: + +```bash +curl --location --request POST 'http://localhost:9925' \ +--header 'Content-Type: application/json' \ +--data-raw '{ + "operation": "create_authentication_tokens", + "username": "username", + "password": "password" +}' +``` + +An example expected return object is: + +```json +{ + "operation_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6InVzZXJuYW1lIiwiaWF0IjoxNjA0OTc4MjAwLCJleHAiOjE2MDUwNjQ2MDAsInN1YiI6Im9wZXJhdGlvbiJ9.MpQA-9CMjA-mn-7mHyUXSuSC_-kqMqJXp_NDiKLFtbtMRbodCuY3DzH401rvy_4vb0yCELf0B5EapLVY1545sv80nxSl6FoZFxQaDWYXycoia6zHpiveR8hKlmA6_XTWHJbY2FM1HAFrdtt3yUTiF-ylkdNbPG7u7fRjTmHfsZ78gd2MNWIDkHoqWuFxIyqk8XydQpsjULf2Uacirt9FmHfkMZ-Jr_rRpcIEW0FZyLInbm6uxLfseFt87wA0TbZ0ofImjAuaW_3mYs-3H48CxP152UJ0jByPb0kHsk1QKP7YHWx1-Wce9NgNADfG5rfgMHANL85zvkv8sJmIGZIoSpMuU3CIqD2rgYnMY-L5dQN1fgfROrPMuAtlYCRK7r-IpjvMDQtRmCiNG45nGsM4DTzsa5GyDrkGssd5OBhl9gr9z9Bb5HQVYhSKIOiy72dK5dQNBklD4eGLMmo-u322zBITmE0lKaBcwYGJw2mmkYcrjDOmsDseU6Bf_zVUd9WF3FqwNkhg4D7nrfNSC_flalkxPHckU5EC_79cqoUIX2ogufBW5XgYbU4WfLloKcIpb51YTZlZfwBHlHPSyaq_guaXFaeCUXKq39_i1n0HRF_mRaxNru0cNDFT9Fm3eD7V8axFijSVAMDyQs_JR7SY483YDKUfN4l-vw-EVynImr4", + "refresh_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6InVzZXJuYW1lIiwiaWF0IjoxNjA0OTc4MjAwLCJleHAiOjE2MDc1NzAyMDAsInN1YiI6InJlZnJlc2gifQ.acaCsk-CJWIMLGDZdGnsthyZsJfQ8ihXLyE8mTji8PgGkpbwhs7e1O0uitMgP_pGjHq2tey1BHSwoeCL49b18WyMIB10hK-q2BXGKQkykltjTrQbg7VsdFi0h57mGfO0IqAwYd55_hzHZNnyJMh4b0iPQFDwU7iTD7x9doHhZAvzElpkWbc_NKVw5_Mw3znjntSzbuPN105zlp4Niurin-_5BnukwvoJWLEJ-ZlF6hE4wKhaMB1pWTJjMvJQJE8khTTvlUN8tGxmzoaDYoe1aCGNxmDEQnx8Y5gKzVd89sylhqi54d2nQrJ2-ElfEDsMoXpR01Ps6fNDFtLTuPTp7ixj8LvgL2nCjAg996Ga3PtdvXJAZPDYCqqvaBkZZcsiqOgqLV0vGo3VVlfrcgJXQImMYRr_Inu0FCe47A93IAWuQTs-KplM1KdGJsHSnNBV6oe6QEkROJT5qZME-8xhvBYvOXqp9Znwg39bmiBCMxk26Ce66_vw06MNgoa3D5AlXPWemfdVKPZDnj_aLVjZSs0gAfFElcVn7l9yjWJOaT2Muk26U8bJl-2BEq_DSclqKHODuYM5kkPKIdE4NFrsqsDYuGxcA25rlNETFyl0q-UXj1aoz_joy5Hdnr4mFELmjnoo4jYQuakufP9xeGPsj1skaodKl0mmoGcCD6v1F60" +} +``` + +## Using JWT Authentication Tokens + +The `operation_token` value is used to authenticate all operations in place of our standard Basic auth. In order to pass the token you will need to create an Bearer Token Authorization Header like the following request: + +```bash +curl --location --request POST 'http://localhost:9925' \ +--header 'Content-Type: application/json' \ +--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6InVzZXJuYW1lIiwiaWF0IjoxNjA0OTc4MjAwLCJleHAiOjE2MDUwNjQ2MDAsInN1YiI6Im9wZXJhdGlvbiJ9.MpQA-9CMjA-mn-7mHyUXSuSC_-kqMqJXp_NDiKLFtbtMRbodCuY3DzH401rvy_4vb0yCELf0B5EapLVY1545sv80nxSl6FoZFxQaDWYXycoia6zHpiveR8hKlmA6_XTWHJbY2FM1HAFrdtt3yUTiF-ylkdNbPG7u7fRjTmHfsZ78gd2MNWIDkHoqWuFxIyqk8XydQpsjULf2Uacirt9FmHfkMZ-Jr_rRpcIEW0FZyLInbm6uxLfseFt87wA0TbZ0ofImjAuaW_3mYs-3H48CxP152UJ0jByPb0kHsk1QKP7YHWx1-Wce9NgNADfG5rfgMHANL85zvkv8sJmIGZIoSpMuU3CIqD2rgYnMY-L5dQN1fgfROrPMuAtlYCRK7r-IpjvMDQtRmCiNG45nGsM4DTzsa5GyDrkGssd5OBhl9gr9z9Bb5HQVYhSKIOiy72dK5dQNBklD4eGLMmo-u322zBITmE0lKaBcwYGJw2mmkYcrjDOmsDseU6Bf_zVUd9WF3FqwNkhg4D7nrfNSC_flalkxPHckU5EC_79cqoUIX2ogufBW5XgYbU4WfLloKcIpb51YTZlZfwBHlHPSyaq_guaXFaeCUXKq39_i1n0HRF_mRaxNru0cNDFT9Fm3eD7V8axFijSVAMDyQs_JR7SY483YDKUfN4l-vw-EVynImr4' \ +--data-raw '{ + "operation":"search_by_hash", + "schema":"dev", + "table":"dog", + "hash_values":[1], + "get_attributes": ["*"] +}' +``` + +## Token Expiration + +`operation_token` expires at a set interval. Once it expires it will no longer be accepted by HarperDB. This duration defaults to one day, and is configurable in [harperdb-config.yaml](https://harperdb.io/docs/reference/configuration-file/). To generate a new `operation_token`, the `refresh_operation_token` operation is used, passing the `refresh_token` in the Bearer Token Authorization Header. A full cURL example can be seen here: + +```bash +curl --location --request POST 'http://localhost:9925' \ +--header 'Content-Type: application/json' \ +--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6InVzZXJuYW1lIiwiaWF0IjoxNjA0OTc4MjAwLCJleHAiOjE2MDc1NzAyMDAsInN1YiI6InJlZnJlc2gifQ.acaCsk-CJWIMLGDZdGnsthyZsJfQ8ihXLyE8mTji8PgGkpbwhs7e1O0uitMgP_pGjHq2tey1BHSwoeCL49b18WyMIB10hK-q2BXGKQkykltjTrQbg7VsdFi0h57mGfO0IqAwYd55_hzHZNnyJMh4b0iPQFDwU7iTD7x9doHhZAvzElpkWbc_NKVw5_Mw3znjntSzbuPN105zlp4Niurin-_5BnukwvoJWLEJ-ZlF6hE4wKhaMB1pWTJjMvJQJE8khTTvlUN8tGxmzoaDYoe1aCGNxmDEQnx8Y5gKzVd89sylhqi54d2nQrJ2-ElfEDsMoXpR01Ps6fNDFtLTuPTp7ixj8LvgL2nCjAg996Ga3PtdvXJAZPDYCqqvaBkZZcsiqOgqLV0vGo3VVlfrcgJXQImMYRr_Inu0FCe47A93IAWuQTs-KplM1KdGJsHSnNBV6oe6QEkROJT5qZME-8xhvBYvOXqp9Znwg39bmiBCMxk26Ce66_vw06MNgoa3D5AlXPWemfdVKPZDnj_aLVjZSs0gAfFElcVn7l9yjWJOaT2Muk26U8bJl-2BEq_DSclqKHODuYM5kkPKIdE4NFrsqsDYuGxcA25rlNETFyl0q-UXj1aoz_joy5Hdnr4mFELmjnoo4jYQuakufP9xeGPsj1skaodKl0mmoGcCD6v1F60' \ +--data-raw '{ + "operation":"refresh_operation_token" +}' +``` + +This will return a new `operation_token`. An example expected return object is: + +```bash +{ + "operation_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6eyJfX2NyZWF0ZWR0aW1lX18iOjE2MDQ5NzgxODkxNTEsIl9fdXBkYXRlZHRpbWVfXyI6MTYwNDk3ODE4OTE1MSwiYWN0aXZlIjp0cnVlLCJyb2xlIjp7Il9fY3JlYXRlZHRpbWVfXyI6MTYwNDk0NDE1MTM0NywiX191cGRhdGVkdGltZV9fIjoxNjA0OTQ0MTUxMzQ3LCJpZCI6IjdiNDNlNzM1LTkzYzctNDQzYi05NGY3LWQwMzY3Njg5NDc4YSIsInBlcm1pc3Npb24iOnsic3VwZXJfdXNlciI6dHJ1ZSwic3lzdGVtIjp7InRhYmxlcyI6eyJoZGJfdGFibGUiOnsicmVhZCI6dHJ1ZSwiaW5zZXJ0IjpmYWxzZSwidXBkYXRlIjpmYWxzZSwiZGVsZXRlIjpmYWxzZSwiYXR0cmlidXRlX3Blcm1pc3Npb25zIjpbXX0sImhkYl9hdHRyaWJ1dGUiOnsicmVhZCI6dHJ1ZSwiaW5zZXJ0IjpmYWxzZSwidXBkYXRlIjpmYWxzZSwiZGVsZXRlIjpmYWxzZSwiYXR0cmlidXRlX3Blcm1pc3Npb25zIjpbXX0sImhkYl9zY2hlbWEiOnsicmVhZCI6dHJ1ZSwiaW5zZXJ0IjpmYWxzZSwidXBkYXRlIjpmYWxzZSwiZGVsZXRlIjpmYWxzZSwiYXR0cmlidXRlX3Blcm1pc3Npb25zIjpbXX0sImhkYl91c2VyIjp7InJlYWQiOnRydWUsImluc2VydCI6ZmFsc2UsInVwZGF0ZSI6ZmFsc2UsImRlbGV0ZSI6ZmFsc2UsImF0dHJpYnV0ZV9wZXJtaXNzaW9ucyI6W119LCJoZGJfcm9sZSI6eyJyZWFkIjp0cnVlLCJpbnNlcnQiOmZhbHNlLCJ1cGRhdGUiOmZhbHNlLCJkZWxldGUiOmZhbHNlLCJhdHRyaWJ1dGVfcGVybWlzc2lvbnMiOltdfSwiaGRiX2pvYiI6eyJyZWFkIjp0cnVlLCJpbnNlcnQiOmZhbHNlLCJ1cGRhdGUiOmZhbHNlLCJkZWxldGUiOmZhbHNlLCJhdHRyaWJ1dGVfcGVybWlzc2lvbnMiOltdfSwiaGRiX2xpY2Vuc2UiOnsicmVhZCI6dHJ1ZSwiaW5zZXJ0IjpmYWxzZSwidXBkYXRlIjpmYWxzZSwiZGVsZXRlIjpmYWxzZSwiYXR0cmlidXRlX3Blcm1pc3Npb25zIjpbXX0sImhkYl9pbmZvIjp7InJlYWQiOnRydWUsImluc2VydCI6ZmFsc2UsInVwZGF0ZSI6ZmFsc2UsImRlbGV0ZSI6ZmFsc2UsImF0dHJpYnV0ZV9wZXJtaXNzaW9ucyI6W119LCJoZGJfbm9kZXMiOnsicmVhZCI6dHJ1ZSwiaW5zZXJ0IjpmYWxzZSwidXBkYXRlIjpmYWxzZSwiZGVsZXRlIjpmYWxzZSwiYXR0cmlidXRlX3Blcm1pc3Npb25zIjpbXX0sImhkYl90ZW1wIjp7InJlYWQiOnRydWUsImluc2VydCI6ZmFsc2UsInVwZGF0ZSI6ZmFsc2UsImRlbGV0ZSI6ZmFsc2UsImF0dHJpYnV0ZV9wZXJtaXNzaW9ucyI6W119fX19LCJyb2xlIjoic3VwZXJfdXNlciJ9LCJ1c2VybmFtZSI6InVzZXJuYW1lIn0sImlhdCI6MTYwNDk3ODcxMywiZXhwIjoxNjA1MDY1MTEzLCJzdWIiOiJvcGVyYXRpb24ifQ.qB4FS7fzryCO5epQlFCQe4mQcUEhzXjfsXRFPgauXrGZwSeSr2o2a1tE1xjiI3qjK0r3f2bdi2xpFlDR1thdY-m0mOpHTICNOae4KdKzp7cyzRaOFurQnVYmkWjuV_Ww4PJgr6P3XDgXs5_B2d7ZVBR-BaAimYhVRIIShfpWk-4iN1XDk96TwloCkYx01BuN87o-VOvAnOG-K_EISA9RuEBpSkfUEuvHx8IU4VgfywdbhNMh6WXM0VP7ZzSpshgsS07MGjysGtZHNTVExEvFh14lyfjfqKjDoIJbo2msQwD2FvrTTb0iaQry1-Wwz9QJjVAUtid7tJuP8aBeNqvKyMIXRVnl5viFUr-Gs-Zl_WtyVvKlYWw0_rUn3ucmurK8tTy6iHyJ6XdUf4pYQebpEkIvi2rd__e_Z60V84MPvIYs6F_8CAy78aaYmUg5pihUEehIvGRj1RUZgdfaXElw90-m-M5hMOTI04LrzzVnBu7DcMYg4UC1W-WDrrj4zUq7y8_LczDA-yBC2-bkvWwLVtHLgV5yIEuIx2zAN74RQ4eCy1ffWDrVxYJBau4yiIyCc68dsatwHHH6bMK0uI9ib6Y9lsxCYjh-7MFcbP-4UBhgoDDXN9xoUToDLRqR9FTHqAHrGHp7BCdF5d6TQTVL5fmmg61MrLucOo-LZBXs1NY" +} +``` + +The `refresh_token` also expires at a set interval, but a longer interval. Once it expires it will no longer be accepted by HarperDB. This duration defaults to thirty days, and is configurable in [harperdb-config.yaml](https://harperdb.io/docs/reference/configuration-file/). To generate a new `operation_token` and a new `refresh_token` the `create_authentication_tokensoperation` is called. + +## Configuration + +Token timeouts are configurable in [harperdb-config.yaml](https://harperdb.io/docs/reference/configuration-file/) with the following parameters: + +* `operationsApi.authentication.operationTokenTimeout`: Defines the length of time until the operation_token expires (default 1d). + +* `operationsApi.authentication.refreshTokenTimeout`: Defines the length of time until the refresh_token expires (default 30d). + +A full list of valid values for both parameters can be found here: https://github.com/vercel/ms \ No newline at end of file diff --git a/docs/security/users-and-roles.md b/docs/security/users-and-roles.md new file mode 100644 index 00000000..68ec76c7 --- /dev/null +++ b/docs/security/users-and-roles.md @@ -0,0 +1,278 @@ +# Users & Roles + +HarperDB utilizes a Role-Based Access Control (RBAC) framework to manage access to HarperDB instances. A user is assigned a role that determines the user’s permissions to access database resources and run core operations. + +## Roles in HarperDB + +Role permissions in HarperDB are broken into two categories – permissions around database manipulation and permissions around database definition. + + + +**Database Manipulation**: A role defines CRUD (create, read, update, delete) permissions against database resources (i.e. data) in a HarperDB instance. + +1) At the table-level access, permissions must be explicitly defined when adding or altering a role – *i.e. HarperDB will assume CRUD access to be FALSE if not explicitly provided in the permissions JSON passed to the `add_role` and/or `alter_role` API operations.* + +2) At the attribute-level, permissions for attributes in all tables included in the permissions set will be assigned based on either the specific attribute-level permissions defined in the table’s permission set or, if there are no attribute-level permissions defined, permissions will be based on the table’s CRUD set. + + +**Database Definition**: Permissions related to managing schemas, tables, roles, users, and other system settings and operations are restricted to the built-in `super_user` role. + + + +**Built-In Roles** +There are two built-in roles within HarperDB. See full breakdown of operations restricted to only super_user roles [here](https://harperdb.io/docs/security/users-roles/). + +* `super_user` – this role provides full access to all operations and methods within a HarperDB instance, this can be considered the admin role. + + * This role provides full access to all Database Definition operations and the ability to run Database Manipulation operations across the entire database schema with no restrictions. +* `cluster_user` – this role is an internal system role type that is managed internally to allow clustered instances to communicate with one another. + + * This role is an internally managed role to facilitate communication between clustered instances. + + +**User-Defined Roles** +In addition to built-in roles, admins (i.e. users assigned to the super_user role) can create customized roles for other users to interact with and manipulate the data within explicitly defined tables and attributes. + +* Unless the user-defined role is given `super_user` permissions, permissions must be defined explicitly within the request body JSON. + +* Describe operations will return metadata for all schemas, tables, and attributes that a user-defined role has CRUD permissions for. + + +**Role Permissions** + +When creating a new, user-defined role in a HarperDB instance, you must provide a role name and the permissions to assign to that role. *Reminder, only super users can create and manage roles.* + +* `role` name used to easily identify the role assigned to individual users. + + *Roles can be altered/dropped based on the role name used in and returned from a successful `add_role` , `alter_role`, or `list_roles` operation.* + +* `permissions` used to explicitly defined CRUD access to existing table data. + + +Example JSON for `add_role` request + +```json +{ + "operation":"add_role", + "role":"software_developer", + "permission":{ + "super_user":false, + "schema_name":{ + "tables": { + "table_name1": { + "read":true, + "insert":true, + "update":true, + "delete":false, + "attribute_permissions":[ + { + "attribute_name":"attribute1", + "read":true, + "insert":true, + "update":true + } + ] + }, + "table_name2": { + "read":true, + "insert":true, + "update":true, + "delete":false, + "attribute_permissions":[] + } + } + } + } +} +``` + +**Setting Role Permissions** + +There are two parts to a permissions set: + +* `super_user` – boolean value indicating if role should be provided super_user access. + + *If `super_user` is set to true, there should be no additional schema-specific permissions values included since the role will have access to the entire database schema. If permissions are included in the body of the operation, they will stored within HarperDB, but ignored, as super_users have full access to the database.* + +* `permissions`: Schema tables that a role should have specific CRUD access to should be included in the final, schema-specific `permissions` JSON. + + *For user-defined roles (i.e. non-super_user roles, blank permissions will result in the user being restricted from accessing any of the database schema.* + + +**Table Permissions JSON** + +Each table that a role should be given some level of CRUD permissions to must be included in the `tables` array for its schema in the roles permissions JSON passed to the API (*see example above*). + +```json +{ + "table_name": { // the name of the table to define CRUD perms for + "read": boolean, // access to read from this table + "insert": boolean, // access to insert data to table + "update": boolean, // access to update data in table + "delete": boolean, // access to delete row data in table + "attribute_permissions": [ // permissions for specific table attributes + { + "attribute_name": "attribute_name", // attribute to assign permissions to + "read": boolean, // access to read this attribute from table + "insert": boolean, // access to insert this attribute into the table + "update": boolean // access to update this attribute in the table + } + ] +} +``` + + +**Important Notes About Table Permissions** + +1) If a schema and/or any of its tables are not included in the permissions JSON, the role will not have any CRUD access to the schema and/or tables. + +2) If a table-level CRUD permission is set to false, any attribute-level with that same CRUD permission set to true will return an error. + + +**Important Notes About Attribute Permissions** + +1) If there are attribute-specific CRUD permissions that need to be enforced on a table, those need to be explicitly described in the `attribute_permissions` array. + +2) If a non-hash attribute is given some level of CRUD access, that same access will be assigned to the table’s `hash_attribute`, even if it is not explicitly defined in the permissions JSON. + + *See table_name1’s permission set for an example of this – even though the table’s hash attribute is not specifically defined in the attribute_permissions array, because the role has CRUD access to ‘attribute1’, the role will have the same access to the table’s hash attribute.* + +3) If attribute-level permissions are set – *i.e. attribute_permissions.length > 0* – any table attribute not explicitly included will be assumed to have not CRUD access (with the exception of the `hash_attribute` described in #2). + + *See table_name1’s permission set for an example of this – in this scenario, the role will have the ability to create, insert and update ‘attribute1’ and the table’s hash attribute but no other attributes on that table.* + +4) If an `attribute_permissions` array is empty, the role’s access to a table’s attributes will be based on the table-level CRUD permissions. + + *See table_name2’s permission set for an example of this.* + +5) The `__createdtime__` and `__updatedtime__` attributes that HarperDB manages internally can have read perms set but, if set, all other attribute-level permissions will be ignored. + +6) Please note that DELETE permissions are not included as a part of an individual attribute-level permission set. That is because it is not possible to delete individual attributes from a row, rows must be deleted in full. + + * If a role needs the ability to delete rows from a table, that permission should be set on the table-level. + + * The practical approach to deleting an individual attribute of a row would be to set that attribute to null via an update statement. + +## Role-Based Operation Restrictions + +The table below includes all API operations available in HarperDB and indicates whether or not the operation is restricted to super_user roles. + +*Keep in mind that non-super_user roles will also be restricted within the operations they do have access to by the schema-level CRUD permissions set for the roles.* + +| Schemas and Tables | Restricted to Super_Users | +|--------------------|:---------------------------:| +| describe_all | | +| describe_schema | | +| describe_table | | +| create_schema | X | +| drop_schema | X | +| create_table | X | +| drop_table | X | +| create_attribute | | +| drop_attribute | X | + + +| NoSQL Operations | Restricted to Super_Users | +|----------------------|:---------------------------:| +| insert | | +| update | | +| upsert | | +| delete | | +| search_by_hash | | +| search_by_value | | +| search_by_conditions | | + +| SQL Operations | Restricted to Super_Users | +|-----------------|:---------------------------:| +| select | | +| insert | | +| update | | +| delete | | + +| Bulk Operations | Restricted to Super_Users | +|------------------|:---------------------------:| +| csv_data_load | | +| csv_file_load | | +| csv_url_load | | +| import_from_s3 | | + +| Users and Roles | Restricted to Super_Users | +|-----------------|:---------------------------:| +| list_roles | X | +| add_role | X | +| alter_role | X | +| drop_role | X | +| list_users | X | +| user_info | | +| add_user | X | +| alter_user | X | +| drop_user | X | + +| Clustering | Restricted to Super_Users | +|-----------------------|:---------------------------:| +| cluster_set_routes | X | +| cluster_get_routes | X | +| cluster_delete_routes | X | +| add_node | X | +| update_node | X | +| cluster_status | X | +| remove_node | X | +| configure_cluster | X | + + +| Custom Functions | Restricted to Super_Users | +|----------------------------------|:---------------------------:| +| custom_functions_status | X | +| get_custom_functions | X | +| get_custom_function | X | +| set_custom_function | X | +| drop_custom_function | X | +| add_custom_function_project | X | +| drop_custom_function_project | X | +| package_custom_function_project | X | +| deploy_custom_function_project | X | + +| Registration | Restricted to Super_Users | +|-------------------|:---------------------------:| +| registration_info | | +| get_fingerprint | X | +| set_license | X | + +| Jobs | Restricted to Super_Users | +|----------------------------|:---------------------------:| +| get_job | | +| search_jobs_by_start_date | X | + +| Logs | Restricted to Super_Users | +|--------------------------------|:---------------------------:| +| read_log | X | +| read_transaction_log | X | +| delete_transaction_logs_before | X | +| read_audit_log | X | +| delete_audit_logs_before | X | + +| Utilities | Restricted to Super_Users | +|-----------------------|:---------------------------:| +| delete_records_before | X | +| export_local | | +| export_to_s3 | | +| system_information | X | +| restart | X | +| restart_service | X | +| get_configuration | X | +| configure_cluster | X | + +| Token Authentication | Restricted to Super_Users | +|------------------------------|:---------------------------:| +| create_authentication_tokens | | +| refresh_operation_token | | + +## Error: Must execute as User + +**You may have gotten an error like,** `Error: Must execute as <>`. + +This means that you installed HarperDB as <>. Because HarperDB stores files natively on the operating system, we only allow the HarperDB executable to be run by a single user. This prevents permissions issues on files. + + + +For example if you installed as user_a, but later wanted to run as user_b. User_b may not have access to the hdb files HarperDB needs. This also keeps HarperDB more secure as it allows you to lock files down to a specific user and prevents other users from accessing your files. \ No newline at end of file diff --git a/images/ave-age-per-owner-ex.png b/images/ave-age-per-owner-ex.png new file mode 100644 index 0000000000000000000000000000000000000000..8e39d22c360f412c803f819545e1f3955fc32d11 GIT binary patch literal 38173 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 literal 0 HcmV?d00001 diff --git a/images/xcode.png b/images/xcode.png new file mode 100644 index 0000000000000000000000000000000000000000..eaaa35263f17de94917add46ca1294a216edecc3 GIT binary patch literal 50262 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