From 36df370fb1042ff5ba79cce6513984cec98403e9 Mon Sep 17 00:00:00 2001 From: bhlohumi Date: Fri, 20 Dec 2024 14:43:33 +0530 Subject: [PATCH 01/15] updated README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 46220512f..33c743ec9 100755 --- a/README.md +++ b/README.md @@ -81,7 +81,7 @@ Additionally, the toolkit also supports seamless resource management using OCI D 📝 Creating Terraform Code for each module/resource can be cumbersome and requires Terraform expertise. -🔁 Manually created infrastrucutre is hard to rebuild for different environments or regions. +🔁 Manually created infrastructure is hard to rebuild for different environments or regions.
From 8524ef51a290be269d6b330175ee18b1b7963913 Mon Sep 17 00:00:00 2001 From: bhlohumi Date: Fri, 20 Dec 2024 16:47:16 +0530 Subject: [PATCH 02/15] updated dockerfile --- Dockerfile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index fb1cd5aa0..6e54cace1 100755 --- a/Dockerfile +++ b/Dockerfile @@ -60,7 +60,8 @@ sudo wget https://releases.hashicorp.com/terraform-provider-null/${TF_NULL_PROVI sudo mkdir -p /cd3user/.terraform.d/plugins/registry.terraform.io/hashicorp/null/${TF_NULL_PROVIDER}/linux_amd64 && \ sudo unzip terraform-provider-null_${TF_NULL_PROVIDER}_linux_amd64.zip -d /cd3user/.terraform.d/plugins/registry.terraform.io/hashicorp/null/${TF_NULL_PROVIDER}/linux_amd64 && \ sudo cp -r /cd3user/.terraform.d/plugins/registry.terraform.io /cd3user/.terraform.d/plugins/registry.opentofu.org && \ -sudo chown -R cd3user:cd3user /cd3user/ ;\ +sudo chown -R cd3user:cd3user /cd3user/ && \ +sudo rm -rf terraform-provider-null_${TF_NULL_PROVIDER}_linux_amd64.zip terraform-provider-oci_${TF_OCI_PROVIDER}_linux_amd64.zip ;\ fi ##################################### START INSTALLING JENKINS ################################### From a95fcbb733c37fe74a3da9cc915cb21df23c527e Mon Sep 17 00:00:00 2001 From: xs2suruchi Date: Thu, 26 Dec 2024 12:15:09 +0530 Subject: [PATCH 03/15] Automation Toolkit Release v2024.4.3 --- Dockerfile | 1 + .../user-scripts/createTenancyConfig.py | 13 +++++++------ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/Dockerfile b/Dockerfile index 6e54cace1..8e69185ef 100755 --- a/Dockerfile +++ b/Dockerfile @@ -62,6 +62,7 @@ sudo unzip terraform-provider-null_${TF_NULL_PROVIDER}_linux_amd64.zip -d /cd3us sudo cp -r /cd3user/.terraform.d/plugins/registry.terraform.io /cd3user/.terraform.d/plugins/registry.opentofu.org && \ sudo chown -R cd3user:cd3user /cd3user/ && \ sudo rm -rf terraform-provider-null_${TF_NULL_PROVIDER}_linux_amd64.zip terraform-provider-oci_${TF_OCI_PROVIDER}_linux_amd64.zip ;\ + fi ##################################### START INSTALLING JENKINS ################################### diff --git a/cd3_automation_toolkit/user-scripts/createTenancyConfig.py b/cd3_automation_toolkit/user-scripts/createTenancyConfig.py index b96b19527..85e6cd9a7 100644 --- a/cd3_automation_toolkit/user-scripts/createTenancyConfig.py +++ b/cd3_automation_toolkit/user-scripts/createTenancyConfig.py @@ -15,7 +15,6 @@ import configparser import oci from oci.object_storage import ObjectStorageClient -import git import glob import subprocess sys.path.append(os.getcwd()+"/..") @@ -474,12 +473,14 @@ def create_bucket(config, signer): devops_user_key = config.get('Default', 'oci_devops_git_key').strip() # Check if Jenkins was installed during image build - if environ.get('USE_DEVOPS') is not None: - use_devops_docker = os.environ['USE_DEVOPS'] - use_devops_docker=use_devops_docker.lower() + use_devops_docker = os.environ['USE_DEVOPS'] + use_devops_docker=use_devops_docker.lower() - if use_devops_docker != use_devops: - use_devops = "no" + if use_devops_docker != use_devops: + use_devops = "no" + + if use_devops == 'yes': + import git if use_devops == 'yes' or remote_state == 'yes': #Use remote state if using devops From 869936b62a5b2c51b7336551926aae5feddd2736 Mon Sep 17 00:00:00 2001 From: xs2suruchi Date: Wed, 12 Mar 2025 13:53:13 +0530 Subject: [PATCH 04/15] Automation Toolkit Release v2025.1.0 --- .../export_dedicatedvmhosts_nonGreenField.py | 24 +- .../Compute/export_instances_nonGreenField.py | 31 +- .../Budget/export_budgets_nonGreenField.py | 19 +- cd3_automation_toolkit/Database/__init__.py | 5 +- .../Database/export_adb_nonGreenField.py | 20 +- .../export_dbsystems_vm_bm_nonGreenField.py | 19 +- .../export_exa_infra_nonGreenField.py | 18 +- .../export_exa_vmclusters_nonGreenField.py | 30 +- .../Database/templates/adb-template | 2 +- .../templates/dbsystems-vm-bm-template | 2 +- .../OKE/export_oke_nonGreenField.py | 38 +- .../OKE/templates/nodepool-template | 2 +- cd3_automation_toolkit/Excel_Columns | 44 ++- .../Quota/export_quotas_nonGreenField.py | 19 +- .../Groups/create_terraform_groups.py | 2 +- .../Policies/create_terraform_policies.py | 17 +- .../Users/export_users_nonGreenField.py | 2 +- .../Identity/export_identity_nonGreenField.py | 2 +- ...port_events_notifications_nonGreenField.py | 70 +++- .../Monitoring/export_alarms_nonGreenField.py | 17 +- .../export_sch_nonGreenField.py | 23 +- .../Network/BaseNetwork/exportNSG.py | 33 +- .../Network/BaseNetwork/exportRoutetable.py | 258 +++++++++++- .../Network/BaseNetwork/exportSeclist.py | 47 ++- .../export_network_nonGreenField.py | 370 ++++++++++++++++-- .../BaseNetwork/modify_routerules_tf.py | 2 +- .../Network/DNS/export_dns_resolvers.py | 19 +- .../DNS/export_dns_views_zones_records.py | 40 +- .../LoadBalancers/export_lbr_nonGreenField.py | 145 ++++++- .../LoadBalancers/export_nlb_nonGreenField.py | 65 ++- cd3_automation_toolkit/OCI_Regions | 8 + cd3_automation_toolkit/Release-Notes | 13 + .../SDDC/export_sddc_nonGreenField.py | 18 +- .../Security/Firewall/__init__.py | 3 +- .../Firewall/export_firewall_nonGreenField.py | 23 +- .../export_firewallpolicy_nonGreenField.py | 299 ++++++++++++-- .../Firewall/fwpolicy_create_decryptrules.py | 2 +- .../Firewall/fwpolicy_create_secrules.py | 2 +- .../templates/policy-decryptrules-template | 2 +- .../templates/policy-secrules-template | 2 +- .../export_keyvaults_nonGreenField.py | 35 +- .../export_blockvolumes_nonGreenField.py | 22 +- .../FileSystem/export_fss_nonGreenField.py | 2 +- .../ObjectStorage/export_terraform_oss.py | 17 +- .../cd3FirewallValidator.py | 98 ++++- cd3_automation_toolkit/cd3Validator.py | 15 + cd3_automation_toolkit/commonTools.py | 3 + .../example/CD3-Blank-template.xlsx | Bin 206411 -> 206404 bytes .../example/CD3-CIS-template.xlsx | Bin 267056 -> 338745 bytes .../example/CD3-Firewall-template.xlsx | Bin 98319 -> 115806 bytes cd3_automation_toolkit/setUpOCI.py | 321 +++++++++------ cd3_automation_toolkit/shell_script.sh | 4 +- .../user-scripts/createTenancyConfig.py | 14 +- .../outdir_structure_file.properties | 1 + .../user-scripts/terraform/firewall.tf | 16 +- .../user-scripts/terraform/provider.tf | 2 +- .../terraform/variables_example.tf | 16 + .../scripts/AdditionalFilters.groovy | 18 +- .../scriptler/scripts/SubChildOptions.groovy | 2 +- jenkins_install/setUpOCI.groovy | 40 +- 60 files changed, 2094 insertions(+), 289 deletions(-) diff --git a/cd3_automation_toolkit/Compute/export_dedicatedvmhosts_nonGreenField.py b/cd3_automation_toolkit/Compute/export_dedicatedvmhosts_nonGreenField.py index 7464ee5e6..aa930d506 100644 --- a/cd3_automation_toolkit/Compute/export_dedicatedvmhosts_nonGreenField.py +++ b/cd3_automation_toolkit/Compute/export_dedicatedvmhosts_nonGreenField.py @@ -19,7 +19,24 @@ oci_obj_names = {} -def print_dedicatedvmhosts(region, dedicatedvmhost, values_for_column, ntk_compartment_name,state): +def print_dedicatedvmhosts(region, dedicatedvmhost, values_for_column, ntk_compartment_name,export_tags, state): + + # Tags filter + defined_tags = dedicatedvmhost.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + return + dedicatedvmhost_tf_name = commonTools.check_tf_variable(dedicatedvmhost.display_name) tf_resource = f'module.dedicated-hosts[\\"{dedicatedvmhost_tf_name}\\"].oci_core_dedicated_vm_host.dedicated_vm_host' if tf_resource not in state["resources"]: @@ -47,7 +64,7 @@ def print_dedicatedvmhosts(region, dedicatedvmhost, values_for_column, ntk_compa values_for_column = commonTools.export_extra_columns(oci_objs, col_header, sheet_dict, values_for_column) # Execution of the code begins here -def export_dedicatedvmhosts(inputfile, outdir, service_dir, config, signer, ct, export_compartments=[], export_regions=[]): +def export_dedicatedvmhosts(inputfile, outdir, service_dir, config, signer, ct, export_compartments=[], export_regions=[],export_tags=[]): global tf_import_cmd global sheet_dict global importCommands @@ -102,11 +119,12 @@ def export_dedicatedvmhosts(inputfile, outdir, service_dir, config, signer, ct, compute_client = oci.core.ComputeClient(config=config,retry_strategy=oci.retry.DEFAULT_RETRY_STRATEGY, signer=signer) for ntk_compartment_name in export_compartments: + dedicatedvmhosts = oci.pagination.list_call_get_all_results(compute_client.list_dedicated_vm_hosts,compartment_id=ct.ntk_compartment_ids[ntk_compartment_name], lifecycle_state="ACTIVE") for dedicatedvmhost in dedicatedvmhosts.data: dedicatedvmhost=compute_client.get_dedicated_vm_host(dedicatedvmhost.id).data - print_dedicatedvmhosts(region, dedicatedvmhost,values_for_column, ntk_compartment_name,state) + print_dedicatedvmhosts(region, dedicatedvmhost,values_for_column, ntk_compartment_name,export_tags,state) # writing data for reg in export_regions: diff --git a/cd3_automation_toolkit/Compute/export_instances_nonGreenField.py b/cd3_automation_toolkit/Compute/export_instances_nonGreenField.py index 70b4b2905..321545184 100644 --- a/cd3_automation_toolkit/Compute/export_instances_nonGreenField.py +++ b/cd3_automation_toolkit/Compute/export_instances_nonGreenField.py @@ -33,6 +33,11 @@ def adding_columns_values(region, ad, fd, vs, publicip, privateip, os_dname, sha values_for_column_instances[col_header].append(os_dname) elif (col_header == "Shape"): values_for_column_instances[col_header].append(shape) + elif (col_header == "Boot Volume Size In GBs"): + size = bdet.size_in_gbs + if size < 50: + size="" + values_for_column_instances[col_header].append(size) elif (col_header == "SSH Key Var Name"): values_for_column_instances[col_header].append(key_name) elif (col_header == "Compartment Name"): @@ -81,7 +86,7 @@ def find_vnic(ins_id, compartment_id): return net -def __get_instances_info(compartment_name, compartment_id, reg_name, display_names, ad_names, ct,state): +def __get_instances_info(compartment_name, compartment_id, reg_name, display_names, ad_names, export_tags, ct,state): config.__setitem__("region", ct.region_dict[reg_name]) compute = oci.core.ComputeClient(config=config, retry_strategy=oci.retry.DEFAULT_RETRY_STRATEGY,signer=signer) network = oci.core.VirtualNetworkClient(config=config, retry_strategy=oci.retry.DEFAULT_RETRY_STRATEGY,signer=signer) @@ -102,18 +107,34 @@ def __get_instances_info(compartment_name, compartment_id, reg_name, display_nam if (not any(e in AD_name for e in ad_names)): continue - # Continue to next one if display names donot match the filter + # Continue to next one if display names do not match the filter if (display_names is not None): if (not any(e in ins_dname for e in display_names)): continue + # Tags filter + ins_defined_tags = ins.defined_tags + tags_list=[] + for tkey,tval in ins_defined_tags.items(): + for kk,vv in tval.items(): + tag = tkey+"."+kk+"="+vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + #None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + # Continue to next one if it's an OKE instance if 'oke-' in ins_dname: ins_defined_tags = ins.defined_tags if 'Oracle-Tags' in ins_defined_tags.keys(): if 'CreatedBy' in ins_defined_tags['Oracle-Tags'].keys(): created_by = ins_defined_tags['Oracle-Tags']['CreatedBy'] - if created_by == 'oke': + if ".nodepool." in created_by or created_by == 'oke': continue ins_fd = ins.fault_domain # FD @@ -279,7 +300,7 @@ def __get_instances_info(compartment_name, compartment_id, reg_name, display_nam # Execution of the code begins here -def export_instances(inputfile, outdir, service_dir,config1, signer1, ct, export_compartments=[], export_regions=[],display_names=[],ad_names=[]): +def export_instances(inputfile, outdir, service_dir,config1, signer1, ct, export_compartments=[], export_regions=[],export_tags=[],display_names=[],ad_names=[]): cd3file = inputfile if ('.xls' not in cd3file): @@ -330,7 +351,7 @@ def export_instances(inputfile, outdir, service_dir,config1, signer1, ct, export except Exception as e: pass for ntk_compartment_name in export_compartments: - __get_instances_info(ntk_compartment_name, ct.ntk_compartment_ids[ntk_compartment_name], reg, display_names, ad_names,ct,state) + __get_instances_info(ntk_compartment_name, ct.ntk_compartment_ids[ntk_compartment_name], reg, display_names, ad_names,export_tags,ct,state) # writing image ocids and SSH keys into variables file var_data = {} diff --git a/cd3_automation_toolkit/CostManagement/Budget/export_budgets_nonGreenField.py b/cd3_automation_toolkit/CostManagement/Budget/export_budgets_nonGreenField.py index 8ab459e2c..028c7163e 100644 --- a/cd3_automation_toolkit/CostManagement/Budget/export_budgets_nonGreenField.py +++ b/cd3_automation_toolkit/CostManagement/Budget/export_budgets_nonGreenField.py @@ -104,7 +104,7 @@ def print_budgets(values_for_columns, region, budget,budget_name,budget_alert_ru # Execution of the code begins here -def export_budgets_nongreenfield(inputfile, outdir, service_dir, config, signer, ct,export_regions=[]): +def export_budgets_nongreenfield(inputfile, outdir, service_dir, config, signer, ct,export_regions=[],export_tags=[]): global importCommands global values_for_column_budgets global sheet_dict_budgets,tf_or_tofu @@ -155,6 +155,23 @@ def export_budgets_nongreenfield(inputfile, outdir, service_dir, config, signer, budgets_list = oci.pagination.list_call_get_all_results(budgets_client.list_budgets,compartment_id=tenancy_id,lifecycle_state="ACTIVE",target_type="ALL") if budgets_list.data != []: for budget in budgets_list.data: + + # Tags filter + defined_tags = budget.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + budget_name = str(budget.display_name) budget_id = str(budget.id) budget_tf_name = commonTools.check_tf_variable(budget_name) diff --git a/cd3_automation_toolkit/Database/__init__.py b/cd3_automation_toolkit/Database/__init__.py index 918d43209..18f5cc277 100644 --- a/cd3_automation_toolkit/Database/__init__.py +++ b/cd3_automation_toolkit/Database/__init__.py @@ -8,4 +8,7 @@ from .export_exa_vmclusters_nonGreenField import export_exa_vmclusters from .export_exa_infra_nonGreenField import export_exa_infra from .export_adb_nonGreenField import export_adbs - +from .create_terraform_mysql import create_terraform_mysql +from .create_terraform_mysql_configuration import create_terraform_mysql_configuration +from .export_mysql_nonGreenField import export_mysql, export_mysqls +from .export_mysql_configuration_nonGreenField import export_mysql_configuration, export_mysql_configurations diff --git a/cd3_automation_toolkit/Database/export_adb_nonGreenField.py b/cd3_automation_toolkit/Database/export_adb_nonGreenField.py index f1ec973db..66cda2e6c 100644 --- a/cd3_automation_toolkit/Database/export_adb_nonGreenField.py +++ b/cd3_automation_toolkit/Database/export_adb_nonGreenField.py @@ -117,7 +117,7 @@ def print_adbs(region, vnc_client, adb, values_for_column, ntk_compartment_name, values_for_column = commonTools.export_extra_columns(oci_objs, col_header, sheet_dict, values_for_column) # Execution of the code begins here -def export_adbs(inputfile, outdir, service_dir, config, signer, ct, export_compartments=[],export_regions=[]): +def export_adbs(inputfile, outdir, service_dir, config, signer, ct, export_compartments=[],export_regions=[],export_tags=[]): global tf_import_cmd global sheet_dict global importCommands @@ -176,6 +176,24 @@ def export_adbs(inputfile, outdir, service_dir, config, signer, ct, export_compa adbs = oci.pagination.list_call_get_all_results(adb_client.list_autonomous_databases,compartment_id=ct.ntk_compartment_ids[ntk_compartment_name],lifecycle_state="AVAILABLE") for adb in adbs.data: adb = adb_client.get_autonomous_database(adb.id).data + + # Tags filter + defined_tags = adb.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags==[]: + check=True + else: + check = any(e in tags_list for e in export_tags ) + + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + print_adbs(region, vnc_client, adb, values_for_column, ntk_compartment_name,state,ct) diff --git a/cd3_automation_toolkit/Database/export_dbsystems_vm_bm_nonGreenField.py b/cd3_automation_toolkit/Database/export_dbsystems_vm_bm_nonGreenField.py index 7c19ee9af..ca6162578 100644 --- a/cd3_automation_toolkit/Database/export_dbsystems_vm_bm_nonGreenField.py +++ b/cd3_automation_toolkit/Database/export_dbsystems_vm_bm_nonGreenField.py @@ -105,7 +105,7 @@ def print_dbsystem_vm_bm(region, db_system_vm_bm, count,db_home, database ,vnc_c # Execution of the code begins here -def export_dbsystems_vm_bm(inputfile, outdir, service_dir, config, signer, ct, export_compartments=[], export_regions=[]): +def export_dbsystems_vm_bm(inputfile, outdir, service_dir, config, signer, ct, export_compartments=[], export_regions=[],export_tags=[]): global tf_import_cmd global sheet_dict global importCommands @@ -172,6 +172,23 @@ def export_dbsystems_vm_bm(inputfile, outdir, service_dir, config, signer, ct, e for ntk_compartment_name in export_compartments: db_systems = oci.pagination.list_call_get_all_results(db_client.list_db_systems,compartment_id=ct.ntk_compartment_ids[ntk_compartment_name], lifecycle_state="AVAILABLE") for db_system in db_systems.data: + + # Tags filter + defined_tags = db_system.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + # Get ssh keys for db system key_name = commonTools.check_tf_variable(db_system.display_name+"_"+db_system.hostname) db_ssh_keys= db_system.ssh_public_keys diff --git a/cd3_automation_toolkit/Database/export_exa_infra_nonGreenField.py b/cd3_automation_toolkit/Database/export_exa_infra_nonGreenField.py index 5aaad0873..e0d1a48f2 100644 --- a/cd3_automation_toolkit/Database/export_exa_infra_nonGreenField.py +++ b/cd3_automation_toolkit/Database/export_exa_infra_nonGreenField.py @@ -48,7 +48,7 @@ def print_exa_infra(region, exa_infra, values_for_column, ntk_compartment_name,s # Execution of the code begins here -def export_exa_infra(inputfile, outdir, service_dir, config, signer, ct, export_compartments=[], export_regions=[]): +def export_exa_infra(inputfile, outdir, service_dir, config, signer, ct, export_compartments=[], export_regions=[],export_tags=[]): global tf_import_cmd global sheet_dict global importCommands @@ -105,6 +105,22 @@ def export_exa_infra(inputfile, outdir, service_dir, config, signer, ct, export_ for ntk_compartment_name in export_compartments: exa_infras = oci.pagination.list_call_get_all_results(db_client.list_cloud_exadata_infrastructures,compartment_id=ct.ntk_compartment_ids[ntk_compartment_name], lifecycle_state="AVAILABLE") for exa_infra in exa_infras.data: + # Tags filter + defined_tags = exa_infra.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + print_exa_infra(region, exa_infra,values_for_column, ntk_compartment_name,state) diff --git a/cd3_automation_toolkit/Database/export_exa_vmclusters_nonGreenField.py b/cd3_automation_toolkit/Database/export_exa_vmclusters_nonGreenField.py index bc7d19678..97d7cc96b 100644 --- a/cd3_automation_toolkit/Database/export_exa_vmclusters_nonGreenField.py +++ b/cd3_automation_toolkit/Database/export_exa_vmclusters_nonGreenField.py @@ -98,7 +98,7 @@ def print_exa_vmcluster(region, vnc_client,exa_infra, exa_vmcluster, key_name,va # Execution of the code begins here -def export_exa_vmclusters(inputfile, outdir, service_dir, config, signer, ct, export_compartments=[],export_regions=[]): +def export_exa_vmclusters(inputfile, outdir, service_dir, config, signer, ct, export_compartments=[],export_regions=[],export_tags=[]): global tf_import_cmd global sheet_dict global importCommands @@ -166,9 +166,37 @@ def export_exa_vmclusters(inputfile, outdir, service_dir, config, signer, ct, ex for ntk_compartment_name in export_compartments: exa_infras = oci.pagination.list_call_get_all_results(db_client.list_cloud_exadata_infrastructures,compartment_id=ct.ntk_compartment_ids[ntk_compartment_name], lifecycle_state="AVAILABLE") for exa_infra in exa_infras.data: + # Tags filter + defined_tags = exa_infra.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue for ntk_compartment_name_again in export_compartments: exa_vmclusters = oci.pagination.list_call_get_all_results(db_client.list_cloud_vm_clusters,compartment_id=ct.ntk_compartment_ids[ntk_compartment_name_again], cloud_exadata_infrastructure_id=exa_infra.id, lifecycle_state="AVAILABLE") for exa_vmcluster in exa_vmclusters.data: + # Tags filter + defined_tags = exa_vmcluster.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + # Get ssh keys for exa vm cluster key_name = commonTools.check_tf_variable(exa_vmcluster.display_name + "_" + exa_vmcluster.hostname) db_ssh_keys = exa_vmcluster.ssh_public_keys diff --git a/cd3_automation_toolkit/Database/templates/adb-template b/cd3_automation_toolkit/Database/templates/adb-template index 73b159bb0..18c55e8a2 100644 --- a/cd3_automation_toolkit/Database/templates/adb-template +++ b/cd3_automation_toolkit/Database/templates/adb-template @@ -43,7 +43,7 @@ adb = { database_edition = "{{ database_edition }}" #Only for BYOL license model {% endif %} - {% if data_storage_size_in_tb == "" %} + {% if data_storage_size_in_tb != "" and data_storage_size_in_tb != "nan" %} data_storage_size_in_tbs = {{ data_storage_size_in_tb }} {% endif %} db_version = "19c" diff --git a/cd3_automation_toolkit/Database/templates/dbsystems-vm-bm-template b/cd3_automation_toolkit/Database/templates/dbsystems-vm-bm-template index a48c6d79e..0268d531f 100644 --- a/cd3_automation_toolkit/Database/templates/dbsystems-vm-bm-template +++ b/cd3_automation_toolkit/Database/templates/dbsystems-vm-bm-template @@ -106,7 +106,7 @@ dbsystems_vm_bm = { {% if nsgs %} nsg_ids = [{{ nsgs }}] {%else%} - nsg_ids = null + nsg_ids = [] {% endif %} {% if db_system_display_name %} diff --git a/cd3_automation_toolkit/DeveloperServices/OKE/export_oke_nonGreenField.py b/cd3_automation_toolkit/DeveloperServices/OKE/export_oke_nonGreenField.py index e4dcc5ac4..77430e50e 100644 --- a/cd3_automation_toolkit/DeveloperServices/OKE/export_oke_nonGreenField.py +++ b/cd3_automation_toolkit/DeveloperServices/OKE/export_oke_nonGreenField.py @@ -434,7 +434,7 @@ def print_oke(values_for_column_oke, reg, compartment_name, compartment_name_nod values_for_column_oke = commonTools.export_extra_columns(oci_objs, col_header, sheet_dict_oke,values_for_column_oke) # Execution of the code begins here -def export_oke(inputfile, outdir,service_dir, config, signer, ct, export_compartments=[], export_regions=[]): +def export_oke(inputfile, outdir,service_dir, config, signer, ct, export_compartments=[], export_regions=[],export_tags=[]): global importCommands global tf_import_cmd global values_for_column_oke @@ -495,13 +495,30 @@ def export_oke(inputfile, outdir,service_dir, config, signer, ct, export_compart compartment_name], lifecycle_state=["ACTIVE"],sort_by="TIME_CREATED") clusterList.extend(clusterResponse.data) - total_resources +=len(clusterList) + #total_resources +=len(clusterList) for cluster_info in clusterList: empty_cluter = True nodepool_count = 0 nodepool_info = None nodepool_type="" + # Tags filter + defined_tags = cluster_info.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + + total_resources = total_resources + 1 cluster_display_name = cluster_info.name cluster_tf_name = commonTools.check_tf_variable(cluster_display_name) tf_resource = f'module.clusters[\\"{str(cluster_tf_name)}\\"].oci_containerengine_cluster.cluster' @@ -526,6 +543,22 @@ def export_oke(inputfile, outdir,service_dir, config, signer, ct, export_compart if nodepool_info.lifecycle_state!="ACTIVE": continue + # Tags filter + defined_tags = nodepool_info.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + empty_cluter = False nodepool_count=nodepool_count+1 @@ -558,6 +591,7 @@ def export_oke(inputfile, outdir,service_dir, config, signer, ct, export_compart print_oke(values_for_column_oke,reg, compartment_name, compartment_name_nodepool,nodepool_count,nodepool_info,cluster_info,network,nodepool_type,ct) + if(empty_cluter==True): print_oke(values_for_column_oke, reg, compartment_name, compartment_name_nodepool,nodepool_count, nodepool_info,cluster_info,network,nodepool_type,ct) diff --git a/cd3_automation_toolkit/DeveloperServices/OKE/templates/nodepool-template b/cd3_automation_toolkit/DeveloperServices/OKE/templates/nodepool-template index 2360774cf..2a73c27e6 100644 --- a/cd3_automation_toolkit/DeveloperServices/OKE/templates/nodepool-template +++ b/cd3_automation_toolkit/DeveloperServices/OKE/templates/nodepool-template @@ -70,7 +70,7 @@ nodepools = { pod_nsg_ids = [{{ pod_nsgs }}] {% endif %} {% if pod_communication_subnet %} - pod_subnet_id = "{{ pod_communication_subnet}}" + pod_subnet_ids = "{{ pod_communication_subnet}}" {% else %} pod_subnet_ids = "" {% endif %} diff --git a/cd3_automation_toolkit/Excel_Columns b/cd3_automation_toolkit/Excel_Columns index 104fd22f1..119d6495d 100644 --- a/cd3_automation_toolkit/Excel_Columns +++ b/cd3_automation_toolkit/Excel_Columns @@ -276,6 +276,48 @@ "DNS-Resolvers" : {}, "KMS" :{}, "Quotas" : {}, - "Budgets" : {} + "Budgets" : {}, + "mysql-dbsystem" : + { + "Region" : "region", + "Compartment Name" : "compartment_id", + "Display Name" : "display_name", + "Description" : "description", + "Hostname Label" : "hostname_label", + "HA" : "is_highly_available", + "Availability Domain(AD1|AD2|AD3)" : "availability_domain", + "Fault Domain" : "fault_domain", + "Network Details" : "subnet_id", + "Shape" : "shape_name", + "Username" : "admin_username", + "Password" : "password", + "IP Address" : "ip_address", + "Back up policy is enabled" : "backup_policy.is_enabled", + "Backup policy pitr policy is enabled" : "backup_policy.pitr_policy.is_enabled", + "Backup policy Retention in days" : "backup_policy.retention_in_days", + "Backup policy window start time" : "backup_policy.window_start_time", + "Crash Recovery is Enabled" : "crash_recovery", + "Data Storage (in Gbs)" : "data_storage_size_in_gbs", + "Database Management is Enabled" : "database_management_status", + "Deletion policy automatic backup retention" : "deletion_policy.automatic_backup_retention", + "Deletion policy final backup" : "deletion_policy.final_backup", + "Deletion policy is deleted protected" : "deletion_policy.is_delete_protected", + "Maintenance window start time" : "maintenance.window_start_time", + "Port" : "port", + "Port_x" : "port_x", + "Source Type" : "source.source_type", + "Configuration Id" : "configuration_id", + "Defined Tags" : "defined_tags" + }, + "mysql-configuration" : + { + "Region" : "region", + "Compartment Name" : "compartment_id", + "Display Name" : "display_name", + "Description" : "description", + "Shape Name" : "shape", + "users_variable_name" : "users_variable_name", + "users_variable_value" : "users_variable_value" + } } diff --git a/cd3_automation_toolkit/Governance/Quota/export_quotas_nonGreenField.py b/cd3_automation_toolkit/Governance/Quota/export_quotas_nonGreenField.py index b324502c5..cf5c83d67 100644 --- a/cd3_automation_toolkit/Governance/Quota/export_quotas_nonGreenField.py +++ b/cd3_automation_toolkit/Governance/Quota/export_quotas_nonGreenField.py @@ -32,7 +32,7 @@ def print_quotas(values_for_columns,region, quota,quota_policy): values_for_columns = commonTools.export_tags(quota, col_header, values_for_columns) # Execution of the code begins here -def export_quotas_nongreenfield(inputfile, outdir, service_dir, config, signer, ct): +def export_quotas_nongreenfield(inputfile, outdir, service_dir, config, signer, ct,export_tags): global tf_import_cmd global values_for_column_quotas global sheet_dict_quotas @@ -81,6 +81,23 @@ def export_quotas_nongreenfield(inputfile, outdir, service_dir, config, signer, for quota_info in quotas_list.data: quota_policy = "" quota = quotas_client.get_quota(quota_id=quota_info.id).data + + # Tags filter + defined_tags = quota.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + for statement in quota.statements: quota_policy +="\n"+str(statement) diff --git a/cd3_automation_toolkit/Identity/Groups/create_terraform_groups.py b/cd3_automation_toolkit/Identity/Groups/create_terraform_groups.py index 783411275..cc8e0f3a0 100644 --- a/cd3_automation_toolkit/Identity/Groups/create_terraform_groups.py +++ b/cd3_automation_toolkit/Identity/Groups/create_terraform_groups.py @@ -108,7 +108,7 @@ def create_terraform_groups(inputfile, outdir, service_dir, prefix, ct): for columnname in dfcolumns: # Column value - if 'Description' in columnname.lower(): + if 'description' in columnname.lower(): columnvalue = str(df[columnname][i]) tempdict = {'description': columnvalue} else: diff --git a/cd3_automation_toolkit/Identity/Policies/create_terraform_policies.py b/cd3_automation_toolkit/Identity/Policies/create_terraform_policies.py index 44acdaae9..c3326539b 100644 --- a/cd3_automation_toolkit/Identity/Policies/create_terraform_policies.py +++ b/cd3_automation_toolkit/Identity/Policies/create_terraform_policies.py @@ -207,11 +207,12 @@ def create_terraform_policies(inputfile, outdir, service_dir, prefix, ct): outfile[reg] = reg_out_dir + "/" + prefix + auto_tfvars_filename #If the excel sheet has in first row; exit; no rows to process - if str(regions[0]) in commonTools.endNames: - print("No Data to write to the outfile..Exiting!") - exit(1) - tempStr = "".join([s for s in tempStr.strip().splitlines(True) if s.strip("\r\n").strip()]) - oname[reg] = open(outfile[reg], 'w') - oname[reg].write(tempStr) - oname[reg].close() - print(outfile[reg] + " for Policies has been created for region " + reg) + if regions.empty or str(regions[0]) in commonTools.endNames: + tempStr = "" + + if tempStr!="": + tempStr = "".join([s for s in tempStr.strip().splitlines(True) if s.strip("\r\n").strip()]) + oname[reg] = open(outfile[reg], 'w') + oname[reg].write(tempStr) + oname[reg].close() + print(outfile[reg] + " for Policies has been created for region " + reg) diff --git a/cd3_automation_toolkit/Identity/Users/export_users_nonGreenField.py b/cd3_automation_toolkit/Identity/Users/export_users_nonGreenField.py index 2ed55133f..32569d651 100644 --- a/cd3_automation_toolkit/Identity/Users/export_users_nonGreenField.py +++ b/cd3_automation_toolkit/Identity/Users/export_users_nonGreenField.py @@ -110,7 +110,7 @@ def export_users(inputfile, outdir, service_dir, config, signer, ct,export_domai if ct.identity_domain_enabled: for domain_key, idcs_endpoint in export_domains.items(): domain_name = domain_key.split("@")[1] - domain_client = oci.identity_domains.IdentityDomainsClient(config=config, signer=signer, + domain_client = oci.identity_domains.IdentityDomainsClient(config=config, signer=signer,retry_strategy=oci.retry.DEFAULT_RETRY_STRATEGY, service_endpoint=idcs_endpoint) list_users_response = domain_client.list_users() # change this to pagination once api supports users = list_users_response.data.resources diff --git a/cd3_automation_toolkit/Identity/export_identity_nonGreenField.py b/cd3_automation_toolkit/Identity/export_identity_nonGreenField.py index d0a22e6e8..182275cd5 100644 --- a/cd3_automation_toolkit/Identity/export_identity_nonGreenField.py +++ b/cd3_automation_toolkit/Identity/export_identity_nonGreenField.py @@ -357,7 +357,7 @@ def process_group(grp_info, members_list,membership_id_list, domain_name, is_dyn if ct.identity_domain_enabled: for domain_key, idcs_endpoint in export_domains.items(): domain_name = domain_key.split("@")[1] - domain_client = oci.identity_domains.IdentityDomainsClient(config=config, signer=signer, + domain_client = oci.identity_domains.IdentityDomainsClient(config=config, signer=signer,retry_strategy=oci.retry.DEFAULT_RETRY_STRATEGY, service_endpoint=idcs_endpoint) list_groups_response = domain_client.list_groups(attributes=['members'], attribute_sets=['all']) groups = list_groups_response.data.resources diff --git a/cd3_automation_toolkit/ManagementServices/EventsAndNotifications/export_events_notifications_nonGreenField.py b/cd3_automation_toolkit/ManagementServices/EventsAndNotifications/export_events_notifications_nonGreenField.py index 171884d33..5e6cf2933 100644 --- a/cd3_automation_toolkit/ManagementServices/EventsAndNotifications/export_events_notifications_nonGreenField.py +++ b/cd3_automation_toolkit/ManagementServices/EventsAndNotifications/export_events_notifications_nonGreenField.py @@ -169,7 +169,7 @@ def events_rows(values_for_column_events, region, ntk_compartment_name, event_na values_for_column_events = commonTools.export_extra_columns(oci_objs, col_header, sheet_dict_events,values_for_column_events) # Execution for Events export starts here -def export_events(inputfile, outdir, service_dir, config, signer, ct,export_compartments=[], export_regions=[]): +def export_events(inputfile, outdir, service_dir, config, signer, ct,export_compartments=[], export_regions=[],export_tags=[]): global rows global tf_import_cmd global values_for_column_events @@ -230,6 +230,23 @@ def export_events(inputfile, outdir, service_dir, config, signer, ct,export_comp for event in evts.data: event_info = evt.get_rule(event.id).data + + # Tags filter + defined_tags = event_info.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + print_events(values_for_column_events, region, ntk_compartment_name, event, event_info, ncpc, fun,state) ievts = oci.pagination.list_call_get_all_results(evt.list_rules, compartment_id=ct.ntk_compartment_ids[ @@ -237,6 +254,23 @@ def export_events(inputfile, outdir, service_dir, config, signer, ct,export_comp for event in ievts.data: event_info = evt.get_rule(event.id).data + + # Tags filter + defined_tags = event_info.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + print_events(values_for_column_events, region, ntk_compartment_name, event, event_info, ncpc, fun,state) commonTools.write_to_cd3(values_for_column_events, cd3file, sheetName) @@ -252,7 +286,7 @@ def export_events(inputfile, outdir, service_dir, config, signer, ct,export_comp importCommandsfile.write(init_commands + importCommands[reg]) # Execution for Notifications export starts here -def export_notifications(inputfile, outdir, service_dir, config, signer, ct, export_compartments=[], export_regions=[]): +def export_notifications(inputfile, outdir, service_dir, config, signer, ct, export_compartments=[], export_regions=[],export_tags=[]): global rows global tf_import_cmd global values_for_column_events @@ -311,12 +345,44 @@ def export_notifications(inputfile, outdir, service_dir, config, signer, ct, exp #sbpns = oci.pagination.list_call_get_all_results(ndpc.list_subscriptions,compartment_id=ct.ntk_compartment_ids[ntk_compartment_name]) for topic in topics.data: + + # Tags filter + defined_tags = topic.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + total_resources+=1 #subscriptions get created in same comp as topic sbpns = oci.pagination.list_call_get_all_results(ndpc.list_subscriptions,compartment_id=ct.ntk_compartment_ids[ntk_compartment_name],topic_id = topic.topic_id) i=0 sbpn = None for sbpn in sbpns.data: + # Tags filter + defined_tags = sbpn.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue i=i+1 print_notifications(values_for_column_notifications, region, ntk_compartment_name, sbpn,topic, i, fun,state) # Empty Topic - No Subscription in the same compartment as Topic's diff --git a/cd3_automation_toolkit/ManagementServices/Monitoring/export_alarms_nonGreenField.py b/cd3_automation_toolkit/ManagementServices/Monitoring/export_alarms_nonGreenField.py index 3d8922064..924225b69 100644 --- a/cd3_automation_toolkit/ManagementServices/Monitoring/export_alarms_nonGreenField.py +++ b/cd3_automation_toolkit/ManagementServices/Monitoring/export_alarms_nonGreenField.py @@ -71,7 +71,7 @@ def print_alarms(region, alarm, ncpclient,values_for_column, ntk_compartment_nam importCommands[region.lower()] += f'\n{tf_or_tofu} import "{tf_resource}" {alarm.id}' # Execution of the code begins here -def export_alarms(inputfile, outdir, service_dir, config, signer, ct, export_compartments=[],export_regions=[]): +def export_alarms(inputfile, outdir, service_dir, config, signer, ct, export_compartments=[],export_regions=[],export_tags=[]): global tf_import_cmd global sheet_dict global importCommands @@ -131,6 +131,21 @@ def export_alarms(inputfile, outdir, service_dir, config, signer, ct, export_com for alarmSummary in alarms.data: alarm=mclient.get_alarm(alarmSummary.id).data + # Tags filter + defined_tags = alarm.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue print_alarms(region, alarm,ncpclient,values_for_column, ntk_compartment_name,ct,state) commonTools.write_to_cd3(values_for_column, cd3file, sheetName) diff --git a/cd3_automation_toolkit/ManagementServices/ServiceConnectorHub/export_sch_nonGreenField.py b/cd3_automation_toolkit/ManagementServices/ServiceConnectorHub/export_sch_nonGreenField.py index 124b0a188..f15287d3d 100755 --- a/cd3_automation_toolkit/ManagementServices/ServiceConnectorHub/export_sch_nonGreenField.py +++ b/cd3_automation_toolkit/ManagementServices/ServiceConnectorHub/export_sch_nonGreenField.py @@ -18,7 +18,7 @@ def get_service_connectors(config, region, SCH_LIST, sch_client, log_client, la_client, stream_client, - notification_client, func_client, ct, values_for_column, ntk_compartment_name,state): + notification_client, func_client, ct, values_for_column, ntk_compartment_name,export_tags,state): volume_comp = "" log_source_list = [] target_la_string = "" @@ -39,6 +39,23 @@ def get_comp_details(comp_data): for schs in SCH_LIST.data: sch_details = sch_client.get_service_connector(service_connector_id=schs.id) + + # Tags filter + defined_tags = sch_details.data.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + sch_id = schs.id sch_compartment_id = schs.compartment_id @@ -298,7 +315,7 @@ def get_comp_details(comp_data): # Execution of the code begins here def export_service_connectors(inputfile, outdir, service_dir, config, signer, ct, export_compartments=[], - export_regions=[]): + export_regions=[],export_tags=[]): global tf_import_cmd global sheet_dict global importCommands @@ -368,7 +385,7 @@ def export_service_connectors(inputfile, outdir, service_dir, config, signer, ct sort_by="timeCreated") get_service_connectors(config, region, SCH_LIST, sch_client, log_client, la_client, stream_client, notification_client, func_client, ct, values_for_column, - ntk_compartment_name,state) + ntk_compartment_name,export_tags, state) commonTools.write_to_cd3(values_for_column, cd3file, sheetName) print("{0} Service Connectors exported into CD3.\n".format(len(values_for_column["Region"]))) diff --git a/cd3_automation_toolkit/Network/BaseNetwork/exportNSG.py b/cd3_automation_toolkit/Network/BaseNetwork/exportNSG.py index 434da8d0f..bec066766 100644 --- a/cd3_automation_toolkit/Network/BaseNetwork/exportNSG.py +++ b/cd3_automation_toolkit/Network/BaseNetwork/exportNSG.py @@ -161,7 +161,7 @@ def print_nsg(values_for_column_nsgs,region, comp_name, vcn_name, nsg,state): importCommands[region.lower()] += f'\n{tf_or_tofu} import "{tf_resource}" {str(nsg.id)}' # Execution of the code begins here -def export_nsg(inputfile, outdir, service_dir,config,signer, ct, export_compartments,export_regions,_tf_import_cmd): +def export_nsg(inputfile, outdir, service_dir,config,signer, ct, export_compartments,export_regions,export_tags,_tf_import_cmd): global tf_import_cmd global values_for_column_nsgs global sheet_dict_nsgs @@ -215,6 +215,22 @@ def export_nsg(inputfile, outdir, service_dir,config,signer, ct, export_compartm lifecycle_state="AVAILABLE") for vcn in vcns.data: + # Tags filter + defined_tags = vcn.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + vcn_info = vnc.get_vcn(vcn.id).data for ntk_compartment_name_again in export_compartments: NSGs = oci.pagination.list_call_get_all_results(vnc.list_network_security_groups, @@ -223,6 +239,21 @@ def export_nsg(inputfile, outdir, service_dir,config,signer, ct, export_compartm lifecycle_state="AVAILABLE") for nsg in NSGs.data: + # Tags filter + defined_tags = nsg.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue NSGSLs = oci.pagination.list_call_get_all_results(vnc.list_network_security_group_security_rules, network_security_group_id= nsg.id, sort_by="TIMECREATED") i = 1 for nsgsl in NSGSLs.data: diff --git a/cd3_automation_toolkit/Network/BaseNetwork/exportRoutetable.py b/cd3_automation_toolkit/Network/BaseNetwork/exportRoutetable.py index 686866c3c..24940c820 100644 --- a/cd3_automation_toolkit/Network/BaseNetwork/exportRoutetable.py +++ b/cd3_automation_toolkit/Network/BaseNetwork/exportRoutetable.py @@ -8,47 +8,138 @@ sys.path.append(os.getcwd()+"/../../..") from commonTools import * -def get_network_entity_name(config,signer,network_identity_id): +def get_network_entity_name(config,signer,network_identity_id,export_tags): vcn1 = VirtualNetworkClient(config=config, retry_strategy=oci.retry.DEFAULT_RETRY_STRATEGY,signer=signer) if('internetgateway' in network_identity_id): igw=vcn1.get_internet_gateway(network_identity_id) network_entity_comp_id=igw.data.compartment_id + + # Tags filter for DRG attachment + defined_tags = igw.data.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + + # None of Tags from export_tags exist on this instance or not in the compartment specified for export; Dont export this instance + if check == False or network_entity_comp_id not in export_compartment_ids: + network_identity_name = "igw:" + igw.data.id + else: + network_identity_name = "igw:" + igw.data.display_name + ''' if network_entity_comp_id in export_compartment_ids: network_identity_name = "igw:"+igw.data.display_name else: network_identity_name = "igw:" + igw.data.id + ''' + return network_identity_name elif ('servicegateway' in network_identity_id): sgw = vcn1.get_service_gateway(network_identity_id) network_entity_comp_id = sgw.data.compartment_id + + # Tags filter for DRG attachment + defined_tags = sgw.data.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + + # None of Tags from export_tags exist on this instance or not in the compartment specified for export; Dont export this instance + if check == False or network_entity_comp_id not in export_compartment_ids: + network_identity_name = "sgw:" + sgw.data.id + else: + network_identity_name = "sgw:" + sgw.data.display_name + + ''' if network_entity_comp_id in export_compartment_ids: network_identity_name = "sgw:" + sgw.data.display_name else: network_identity_name = "sgw:"+sgw.data.id + ''' return network_identity_name elif ('natgateway' in network_identity_id): ngw = vcn1.get_nat_gateway(network_identity_id) network_entity_comp_id = ngw.data.compartment_id + + # Tags filter for DRG attachment + defined_tags = ngw.data.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + + # None of Tags from export_tags exist on this instance or not in the compartment specified for export; Dont export this instance + if check == False or network_entity_comp_id not in export_compartment_ids: + network_identity_name = "ngw:" + ngw.data.id + else: + network_identity_name = "ngw:" + ngw.data.display_name + ''' if network_entity_comp_id in export_compartment_ids: network_identity_name = "ngw:" + ngw.data.display_name else: network_identity_name = "ngw:"+ngw.data.id + ''' + return network_identity_name elif ('localpeeringgateway' in network_identity_id): lpg = vcn1.get_local_peering_gateway(network_identity_id) network_entity_comp_id = lpg.data.compartment_id + + # Tags filter for DRG attachment + defined_tags = lpg.data.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + + # None of Tags from export_tags exist on this instance or not in the compartment specified for export; Dont export this instance + if check == False or network_entity_comp_id not in export_compartment_ids: + network_identity_name = "lpg:" + lpg.data.id + else: + network_identity_name = "lpg:" + lpg.data.display_name + + ''' if network_entity_comp_id in export_compartment_ids: network_identity_name = "lpg:" + lpg.data.display_name else: network_identity_name = "lpg:"+lpg.data.id + ''' + return network_identity_name elif ('drgattachment' in network_identity_id): drg_attach = vcn1.get_drg_attachment(network_identity_id) + + if (drg_attach.data.network_details is not None): drg_attach_type = drg_attach.data.network_details.type #DRG v1 @@ -63,22 +154,44 @@ def get_network_entity_name(config,signer,network_identity_id): elif ('drg' in network_identity_id): drg = vcn1.get_drg(network_identity_id) network_entity_comp_id = drg.data.compartment_id + + # Tags filter for DRG attachment + defined_tags = drg.data.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + + # None of Tags from export_tags exist on this instance or not in the compartment specified for export; Dont export this instance + if check == False or network_entity_comp_id not in export_compartment_ids: + network_identity_name = "drg:" + drg.data.id + else: + network_identity_name = "drg:" + drg.data.display_name + + ''' if network_entity_comp_id in export_compartment_ids: network_identity_name = "drg:" + drg.data.display_name else: network_identity_name = "drg:"+drg.data.id + ''' return network_identity_name - """ - elif ('privateip' in network_identity_id): - privateip = vcn1.get_private_ip(network_identity_id) - network_identity_name = "privateip:"+privateip.data.ip_address - return network_identity_name - """ + ''' + elif ('privateip' in network_identity_id): + privateip = vcn1.get_private_ip(network_identity_id) + network_identity_name = "privateip:"+privateip.data.ip_address + return network_identity_name + ''' else: return network_identity_id -def insert_values(routetable,values_for_column,region,comp_name,name,routerule): +def insert_values(routetable,values_for_column,region,comp_name,name,routerule,export_tags): for col_header in values_for_column.keys(): if (col_header == "Region"): values_for_column[col_header].append(region) @@ -91,7 +204,7 @@ def insert_values(routetable,values_for_column,region,comp_name,name,routerule): elif (routerule != None and col_header == 'Route Destination Object'): network_entity_id = routerule.network_entity_id - network_entity_name = get_network_entity_name(config, signer, network_entity_id) + network_entity_name = get_network_entity_name(config, signer, network_entity_id,export_tags) values_for_column[col_header].append(network_entity_name) if ('internetgateway' in network_entity_id): if (routerule.destination not in values_for_vcninfo['igw_destinations']): @@ -107,7 +220,7 @@ def insert_values(routetable,values_for_column,region,comp_name,name,routerule): values_for_column = commonTools.export_extra_columns(oci_objs, col_header, sheet_dict,values_for_column) -def insert_values_drg(routetable,import_drg_route_distribution_name,values_for_column_drg,region,comp_name,name,routerule): +def insert_values_drg(routetable,import_drg_route_distribution_name,values_for_column_drg,region,comp_name,name,routerule,export_tags): for col_header in values_for_column_drg.keys(): if (col_header == "Region"): values_for_column_drg[col_header].append(region) @@ -122,7 +235,7 @@ def insert_values_drg(routetable,import_drg_route_distribution_name,values_for_c elif (routerule != None and col_header == 'Next Hop Attachment'): next_hop_attachment_id=routerule.next_hop_drg_attachment_id - network_entity_name = get_network_entity_name(config, signer, next_hop_attachment_id) + network_entity_name = get_network_entity_name(config, signer, next_hop_attachment_id,export_tags) values_for_column_drg[col_header].append(network_entity_name) else: @@ -131,16 +244,16 @@ def insert_values_drg(routetable,import_drg_route_distribution_name,values_for_c -def print_drg_routerules(drg_rt_info,drg_display_name,drg_route_table_name,import_drg_route_distribution_name,drg_rules,region,comp_name,state): +def print_drg_routerules(drg_rt_info,drg_display_name,drg_route_table_name,import_drg_route_distribution_name,drg_rules,region,comp_name,export_tags,state): drg_rt_name = drg_display_name + "_" + drg_route_table_name drg_rt_tf_name = commonTools.check_tf_variable(drg_rt_name) if (not drg_rules.data): - insert_values_drg(drg_rt_info, import_drg_route_distribution_name,values_for_column_drg, region, comp_name, drg_display_name, None) + insert_values_drg(drg_rt_info, import_drg_route_distribution_name,values_for_column_drg, region, comp_name, drg_display_name, None,export_tags) if not tf_import_cmd_drg: print(drg_route_table_name) i=1 for rule in drg_rules.data: - insert_values_drg(drg_rt_info, import_drg_route_distribution_name,values_for_column_drg, region, comp_name, drg_display_name, rule) + insert_values_drg(drg_rt_info, import_drg_route_distribution_name,values_for_column_drg, region, comp_name, drg_display_name, rule,export_tags) if not tf_import_cmd_drg: print(drg_route_table_name) else: @@ -150,8 +263,24 @@ def print_drg_routerules(drg_rt_info,drg_display_name,drg_route_table_name,impor importCommands_drg[region.lower()] += f'\n{tf_or_tofu} import "{tf_resource}" drgRouteTables/{str(drg_rt_info.id)}/routeRules/{str(rule.id)}' i=i+1 -def print_routetables(routetables,region,vcn_name,comp_name,gw_route_table_ids,state): +def print_routetables(routetables,region,vcn_name,comp_name,export_tags,gw_route_table_ids,state): for routetable in routetables.data: + # Tags filter + defined_tags = routetable.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + rules = routetable.route_rules display_name = routetable.display_name dn=display_name @@ -174,12 +303,12 @@ def print_routetables(routetables,region,vcn_name,comp_name,gw_route_table_ids,s importCommands[region.lower()] += f'\n{tf_or_tofu} import "{tf_resource}" {str(routetable.id)}' if(not rules): - insert_values(routetable, values_for_column, region, comp_name, vcn_name,None) + insert_values(routetable, values_for_column, region, comp_name, vcn_name,None,export_tags) if not tf_import_cmd: print(dn) for rule in rules: - insert_values(routetable, values_for_column, region, comp_name, vcn_name,rule) + insert_values(routetable, values_for_column, region, comp_name, vcn_name,rule,export_tags) desc = str(rule.description) if (desc == "None"): desc = "" @@ -187,7 +316,7 @@ def print_routetables(routetables,region,vcn_name,comp_name,gw_route_table_ids,s print(dn + "," +str(rule.destination)+","+desc) # Execution of the code begins here for drg route table -def export_drg_routetable(inputfile, outdir, service_dir,config1,signer1, ct, export_compartments,export_regions,_tf_import_cmd): +def export_drg_routetable(inputfile, outdir, service_dir,config1,signer1, ct, export_compartments,export_regions,export_tags,_tf_import_cmd): # Read the arguments global tf_import_cmd_drg global values_for_column_drg @@ -226,6 +355,8 @@ def export_drg_routetable(inputfile, outdir, service_dir,config1,signer1, ct, ex commonTools.backup_file(outdir + "/" + reg+ "/" + service_dir, "import_network", "import_commands_network_drg_routerules.sh") importCommands_drg[reg] = "" + else: + drgv2=parseDRGs(cd3file) for reg in export_regions: config.__setitem__("region", commonTools().region_dict[reg]) @@ -245,21 +376,82 @@ def export_drg_routetable(inputfile, outdir, service_dir,config1,signer1, ct, ex drgs = oci.pagination.list_call_get_all_results(vcn.list_drgs, compartment_id=ct.ntk_compartment_ids[ntk_compartment_name]) for drg in drgs.data: + + # Tags filter + defined_tags = drg.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + #DRG v1 + DRG_Name = drg.display_name if drg.default_drg_route_tables is None: continue + if not tf_import_cmd_drg: + try: + if (DRG_Name not in drgv2.drg_names[reg]): + print(f'skipping DRG route table as its DRG {DRG_Name} is not part of DRGs tab in cd3') + continue + except KeyError: + print("skipping DRG route table as no DRG is declared for region " + reg ) + continue # Get DRG RT Tables for the DRG - They are in same compartment s DRG by default DRG_RTs = oci.pagination.list_call_get_all_results(vcn.list_drg_route_tables, drg_id=drg.id) for drg_route_table_info in DRG_RTs.data: + # Tags filter + defined_tags = drg_route_table_info.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + drg_info = drg drg_route_table_id = drg_route_table_info.id drg_route_table_name = drg_route_table_info.display_name drg_display_name = drg_info.display_name import_drg_route_distribution_name = '' import_drg_route_distribution_id = drg_route_table_info.import_drg_route_distribution_id + if (import_drg_route_distribution_id != None): import_drg_route_distribution_info = vcn.get_drg_route_distribution(import_drg_route_distribution_id).data + + # Tags filter + defined_tags = import_drg_route_distribution_info.defined_tags + if defined_tags != {}: + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + import_drg_route_distribution_id = None + import_drg_route_distribution_name=import_drg_route_distribution_info.display_name drg_rt_name = drg_display_name + "_" + drg_route_table_name @@ -274,7 +466,7 @@ def export_drg_routetable(inputfile, outdir, service_dir,config1,signer1, ct, ex drg_rt_rules = oci.pagination.list_call_get_all_results(vcn.list_drg_route_rules, drg_route_table_id,route_type="STATIC") #drg_rt_rules = None print_drg_routerules(drg_route_table_info, drg_display_name,drg_route_table_name, import_drg_route_distribution_name, - drg_rt_rules, region, ntk_compartment_name,state) + drg_rt_rules, region, ntk_compartment_name,export_tags,state) commonTools.write_to_cd3(values_for_column_drg, cd3file, "DRGRouteRulesinOCI") print("DRG RouteRules exported to CD3\n") @@ -291,7 +483,7 @@ def export_drg_routetable(inputfile, outdir, service_dir,config1,signer1, ct, ex # Execution of the code begins here for route table export -def export_routetable(inputfile, outdir, service_dir,config1,signer1, ct, export_compartments,export_regions,_tf_import_cmd): +def export_routetable(inputfile, outdir, service_dir,config1,signer1, ct, export_compartments,export_regions,export_tags,_tf_import_cmd): # Read the arguments global tf_import_cmd global values_for_column @@ -336,6 +528,8 @@ def export_routetable(inputfile, outdir, service_dir,config1,signer1, ct, export commonTools.backup_file(outdir + "/" + reg+ "/" + service_dir, "import_network", "import_commands_network_routerules.sh") importCommands[reg] = '' + else: + vcns_check = parseVCNs(cd3file) export_compartment_ids = [] for comp in export_compartments: @@ -359,8 +553,30 @@ def export_routetable(inputfile, outdir, service_dir,config1,signer1, ct, export gw_route_table_ids = [] vcns = oci.pagination.list_call_get_all_results(vcn.list_vcns,compartment_id=ct.ntk_compartment_ids[ntk_compartment_name],lifecycle_state="AVAILABLE") for v in vcns.data: + # Tags filter + defined_tags = v.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue vcn_id = v.id vcn_name=v.display_name + if not tf_import_cmd: + # Process only those VCNs which are present in cd3(and have been created via TF) + check = vcn_name, reg + # rtname = str(df.loc[i, 'Route Table Name']).strip() + if (check not in vcns_check.vcn_names): + print(f'skipping route table for vcn {vcn_name} in region {reg}') + continue IGWs = oci.pagination.list_call_get_all_results(vcn.list_internet_gateways, compartment_id=ct.ntk_compartment_ids[ ntk_compartment_name], @@ -385,7 +601,7 @@ def export_routetable(inputfile, outdir, service_dir,config1,signer1, ct, export for ntk_compartment_name_again in export_compartments: routetables = oci.pagination.list_call_get_all_results(vcn.list_route_tables, compartment_id=ct.ntk_compartment_ids[ntk_compartment_name_again], vcn_id=vcn_id, lifecycle_state='AVAILABLE') - print_routetables(routetables,region,vcn_name,ntk_compartment_name_again,gw_route_table_ids,state) + print_routetables(routetables,region,vcn_name,ntk_compartment_name_again,export_tags,gw_route_table_ids,state) commonTools.write_to_cd3(values_for_column,cd3file,"RouteRulesinOCI") print("RouteRules exported to CD3\n") diff --git a/cd3_automation_toolkit/Network/BaseNetwork/exportSeclist.py b/cd3_automation_toolkit/Network/BaseNetwork/exportSeclist.py index 2c56d935a..44ff4f3df 100644 --- a/cd3_automation_toolkit/Network/BaseNetwork/exportSeclist.py +++ b/cd3_automation_toolkit/Network/BaseNetwork/exportSeclist.py @@ -45,8 +45,24 @@ def insert_values(values_for_column,oci_objs, region, comp_name, vcn_name, rulet values_for_column = commonTools.export_extra_columns(oci_objs, col_header, sheet_dict,values_for_column) -def print_secrules(seclists,region,vcn_name,comp_name,state): +def print_secrules(seclists,region,vcn_name,comp_name,export_tags,state): for seclist in seclists.data: + # Tags filter + defined_tags = seclist.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + isec_rules = seclist.ingress_security_rules esec_rules = seclist.egress_security_rules display_name = seclist.display_name @@ -210,7 +226,7 @@ def print_secrules(seclists,region,vcn_name,comp_name,state): print(printstr) # Execution of the code begins here -def export_seclist(inputfile, outdir, service_dir,config,signer, ct, export_compartments,export_regions,_tf_import_cmd): +def export_seclist(inputfile, outdir, service_dir,config,signer, ct, export_compartments,export_regions,export_tags,_tf_import_cmd): global tf_import_cmd global values_for_column global sheet_dict @@ -245,6 +261,8 @@ def export_seclist(inputfile, outdir, service_dir,config,signer, ct, export_comp "import_commands_network_secrules.sh") importCommands[reg] = '' + else: + vcns_check = parseVCNs(cd3file) for reg in export_regions: config.__setitem__("region", commonTools().region_dict[reg]) @@ -262,11 +280,34 @@ def export_seclist(inputfile, outdir, service_dir,config,signer, ct, export_comp for ntk_compartment_name in export_compartments: vcns = oci.pagination.list_call_get_all_results(vcn.list_vcns,compartment_id=ct.ntk_compartment_ids[ntk_compartment_name],lifecycle_state="AVAILABLE") for v in vcns.data: + # Tags filter + defined_tags = v.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + vcn_id = v.id vcn_name=v.display_name + if not tf_import_cmd: + # Process only those VCNs which are present in cd3(and have been created via TF) + check = vcn_name, reg + #rtname = str(df.loc[i, 'Route Table Name']).strip() + if (check not in vcns_check.vcn_names): + print(f'skipping sec list as its vcn {vcn_name} is not in VCNs tab') + continue for ntk_compartment_name_again in export_compartments: seclists = oci.pagination.list_call_get_all_results(vcn.list_security_lists,compartment_id=ct.ntk_compartment_ids[ntk_compartment_name_again], vcn_id=vcn_id, lifecycle_state='AVAILABLE',sort_by='DISPLAYNAME') - print_secrules(seclists,region,vcn_name,ntk_compartment_name_again,state) + print_secrules(seclists,region,vcn_name,ntk_compartment_name_again,export_tags,state) commonTools.write_to_cd3(values_for_column,cd3file,"SecRulesinOCI") print("SecRules exported to CD3\n") diff --git a/cd3_automation_toolkit/Network/BaseNetwork/export_network_nonGreenField.py b/cd3_automation_toolkit/Network/BaseNetwork/export_network_nonGreenField.py index de900ce8d..a9c9749b4 100644 --- a/cd3_automation_toolkit/Network/BaseNetwork/export_network_nonGreenField.py +++ b/cd3_automation_toolkit/Network/BaseNetwork/export_network_nonGreenField.py @@ -100,9 +100,8 @@ def print_drgv2(values_for_column_drgv2, region, comp_name, vcn_info, drg_info, values_for_column_drgv2) -def print_vcns(values_for_column_vcns, region, comp_name, vnc,vcn_info, drg_attachment_info, igw_info, ngw_info, sgw_info, +def print_vcns(values_for_column_vcns, region, comp_name, vnc,vcn_info, drg_attachment_info, drg_info, igw_info, ngw_info, sgw_info, lpg_display_names,state,write_drg_ocids): - drg_info=None for col_header in values_for_column_vcns.keys(): if (col_header == "Region"): @@ -111,8 +110,6 @@ def print_vcns(values_for_column_vcns, region, comp_name, vnc,vcn_info, drg_atta values_for_column_vcns[col_header].append(comp_name) elif (col_header == "DRG Required"): if drg_attachment_info!=None: - drg_id = drg_attachment_info.drg_id - drg_info = vnc.get_drg(drg_id).data if (drg_info == None): values_for_column_vcns[col_header].append("n") else: @@ -570,7 +567,7 @@ def get_comp_details(comp_data): # Close the safe_file post updates rpc_safe_file["global"].close() -def export_major_objects(inputfile, outdir, service_dir, config, signer, ct, export_compartments=[], export_regions=[]): +def export_major_objects(inputfile, outdir, service_dir, config, signer, ct, export_compartments=[], export_regions=[],export_tags=[]): global sheet_dict_vcns global sheet_dict_drgv2,tf_or_tofu tf_or_tofu = ct.tf_or_tofu @@ -663,10 +660,45 @@ def export_major_objects(inputfile, outdir, service_dir, config, signer, ct, exp for drg_attachment_info in DRG_Attachments.data: if (drg_attachment_info.lifecycle_state != "ATTACHED"): continue + + # Tags filter for DRG attachment + defined_tags = drg_attachment_info.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + drg_attachment_name = drg_attachment_info.display_name drg_id = drg_attachment_info.drg_id drg_info = vnc.get_drg(drg_id).data + # Tags filter for DRG + defined_tags = drg_info.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + # Attachment Data drg_display_name = drg_info.display_name drg_comp_id = drg_info.compartment_id @@ -708,7 +740,6 @@ def export_major_objects(inputfile, outdir, service_dir, config, signer, ct, exp vcn_drgattach_route_table_id = drg_attachment_info.route_table_id vcn_info = vnc.get_vcn(attach_id).data - # tf_name = vcn_info.display_name + "_" + drg_attachment_name tf_name = commonTools.check_tf_variable(drg_attachment_name) tf_resource = f'module.drg-attachments[\\"{tf_name}\\"].oci_core_drg_attachment.drg_attachment' if tf_resource not in state["resources"]: @@ -883,6 +914,23 @@ def export_major_objects(inputfile, outdir, service_dir, config, signer, ct, exp lifecycle_state="AVAILABLE") for vcn in vcns.data: vcn_info = vcn + + # Tags filter + defined_tags = vcn_info.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + # Fetch VCN components assuming components are in same comp as VCN # DRG attachment is in same compartment as VCN by default @@ -895,7 +943,23 @@ def export_major_objects(inputfile, outdir, service_dir, config, signer, ct, exp drg_attachment_info = None for drg_attachment_info in DRG_Attachments.data: - if (drg_attachment_info.lifecycle_state != "ATTACHED"): + + # Tags filter + defined_tags = drg_attachment_info.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + + # Either DRG Attachment is not in 'ATTACHED' state or does not have required tags + if (drg_attachment_info.lifecycle_state != "ATTACHED") or check==False: + drg_attachment_info=None continue write_drg_ocids=False @@ -903,7 +967,23 @@ def export_major_objects(inputfile, outdir, service_dir, config, signer, ct, exp drg_id = drg_attachment_info.drg_id drg_info = vnc.get_drg(drg_id).data drg_comp_id=drg_info.compartment_id - if drg_comp_id not in export_compartment_ids: + + # Tags filter + defined_tags = drg_info.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + + # DRG is in different compartment or DRG doesnot have required tags + if drg_comp_id not in export_compartment_ids or check==False: + drg_info=None write_drg_ocids= True # igw_display_name = "n" @@ -912,6 +992,23 @@ def export_major_objects(inputfile, outdir, service_dir, config, signer, ct, exp ntk_compartment_name], vcn_id=vcn.id, lifecycle_state="AVAILABLE") for igw in IGWs.data: + + # Tags filter + defined_tags = igw.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + igw_info = igw igw_display_name = igw_info.display_name tf_name = vcn_info.display_name + "_" + igw_display_name @@ -926,6 +1023,23 @@ def export_major_objects(inputfile, outdir, service_dir, config, signer, ct, exp ntk_compartment_name], vcn_id=vcn.id, lifecycle_state="AVAILABLE") for ngw in NGWs.data: + + # Tags filter + defined_tags = ngw.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + ngw_info = ngw ngw_display_name = ngw_info.display_name tf_name = vcn_info.display_name + "_" + ngw_display_name @@ -940,6 +1054,23 @@ def export_major_objects(inputfile, outdir, service_dir, config, signer, ct, exp ntk_compartment_name], vcn_id=vcn.id, lifecycle_state="AVAILABLE") for sgw in SGWs.data: + + # Tags filter + defined_tags = sgw.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + sgw_info = sgw sgw_display_name = sgw_info.display_name tf_name = vcn_info.display_name + "_" + sgw_display_name @@ -956,6 +1087,23 @@ def export_major_objects(inputfile, outdir, service_dir, config, signer, ct, exp for lpg in LPGs.data: if (lpg.lifecycle_state != "AVAILABLE"): continue + + # Tags filter + defined_tags = lpg.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + lpg_info = lpg lpg_display_names = lpg_info.display_name + "," + lpg_display_names @@ -977,7 +1125,7 @@ def export_major_objects(inputfile, outdir, service_dir, config, signer, ct, exp lpg_display_names = lpg_display_names[:-1] # Fill VCNs Tab - print_vcns(values_for_column_vcns, region, ntk_compartment_name, vnc,vcn_info, drg_attachment_info, igw_info, ngw_info, + print_vcns(values_for_column_vcns, region, ntk_compartment_name, vnc,vcn_info, drg_attachment_info, drg_info, igw_info, ngw_info, sgw_info, lpg_display_names,state,write_drg_ocids) commonTools.write_to_cd3(values_for_column_vcns, cd3file, "VCNs") @@ -989,7 +1137,7 @@ def export_major_objects(inputfile, outdir, service_dir, config, signer, ct, exp oci_obj_names[reg].close() -def export_dhcp(inputfile, outdir, service_dir, config, signer, ct, export_compartments=[], export_regions=[]): +def export_dhcp(inputfile, outdir, service_dir, config, signer, ct, export_compartments=[], export_regions=[],export_tags=[]): global sheet_dict_dhcp,tf_or_tofu tf_or_tofu = ct.tf_or_tofu @@ -1038,14 +1186,46 @@ def export_dhcp(inputfile, outdir, service_dir, config, signer, ct, export_compa compartment_id=ct.ntk_compartment_ids[ntk_compartment_name], lifecycle_state="AVAILABLE") for vcn in vcns.data: + # Tags filter + defined_tags = vcn.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + vcn_info = vnc.get_vcn(vcn.id).data - # comp_ocid_done_again = [] + for ntk_compartment_name_again in export_compartments: DHCPs = oci.pagination.list_call_get_all_results(vnc.list_dhcp_options, compartment_id=ct.ntk_compartment_ids[ ntk_compartment_name_again], vcn_id=vcn.id, lifecycle_state="AVAILABLE") for dhcp in DHCPs.data: + # Tags filter + defined_tags = dhcp.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + dhcp_info = dhcp print_dhcp(values_for_column_dhcp, region, ntk_compartment_name_again, vcn_info.display_name, dhcp_info,state) @@ -1057,7 +1237,7 @@ def export_dhcp(inputfile, outdir, service_dir, config, signer, ct, export_compa importCommands_dhcp[reg].close() -def export_subnets_vlans(inputfile, outdir, service_dir, config, signer, ct, export_compartments=[], export_regions=[]): +def export_subnets_vlans(inputfile, outdir, service_dir, config, signer, ct, export_compartments=[], export_regions=[],export_tags=[]): global sheet_dict_subnets_vlans,tf_or_tofu tf_or_tofu = ct.tf_or_tofu tf_state_list = [tf_or_tofu, "state", "list"] @@ -1132,7 +1312,24 @@ def export_subnets_vlans(inputfile, outdir, service_dir, config, signer, ct, exp compartment_id=ct.ntk_compartment_ids[ntk_compartment_name], lifecycle_state="AVAILABLE") for vcn in vcns.data: + # Tags filter + defined_tags = vcn.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + vcn_info = vnc.get_vcn(vcn.id).data + for ntk_compartment_name_again in export_compartments: # Subnet Data @@ -1142,14 +1339,67 @@ def export_subnets_vlans(inputfile, outdir, service_dir, config, signer, ct, exp ntk_compartment_name_again], vcn_id=vcn.id, lifecycle_state="AVAILABLE") for subnet in Subnets.data: + + # Tags filter + defined_tags = subnet.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + subnet_info = subnet dhcp_id = subnet_info.dhcp_options_id - dhcp_name = vnc.get_dhcp_options(dhcp_id).data.display_name + + # Tags filter + defined_tags = vnc.get_dhcp_options(dhcp_id).data.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + + if check == False: + dhcp_name = dhcp_id + else: + dhcp_name = vnc.get_dhcp_options(dhcp_id).data.display_name + if ("Default DHCP Options for " in dhcp_name): dhcp_name = "" rt_id = subnet_info.route_table_id - rt_name = vnc.get_route_table(rt_id).data.display_name + + # Tags filter + defined_tags = vnc.get_route_table(rt_id).data.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + rt_name = rt_id + else: + rt_name = vnc.get_route_table(rt_id).data.display_name + if ("Default Route Table for " in rt_name): rt_name = "n" @@ -1157,7 +1407,24 @@ def export_subnets_vlans(inputfile, outdir, service_dir, config, signer, ct, exp sl_names = "" add_def_seclist = 'n' for sl_id in sl_ids: - sl_name = vnc.get_security_list(sl_id).data.display_name + # Tags filter + defined_tags = vnc.get_security_list(sl_id).data.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + sl_name=sl_id + else: + sl_name = vnc.get_security_list(sl_id).data.display_name + if ("Default Security List for " in sl_name): add_def_seclist = 'y' continue @@ -1189,19 +1456,72 @@ def export_subnets_vlans(inputfile, outdir, service_dir, config, signer, ct, exp ntk_compartment_name_again], vcn_id=vcn.id, lifecycle_state="AVAILABLE") for vlan in VLANs.data: + + # Tags filter + defined_tags = vlan.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + vlan_info = vlan dhcp_name = "" rt_id = vlan_info.route_table_id - rt_name = vnc.get_route_table(rt_id).data.display_name + # Tags filter + defined_tags = vnc.get_route_table(rt_id).data.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + rt_name=rt_id + else: + rt_name = vnc.get_route_table(rt_id).data.display_name + if ("Default Route Table for " in rt_name): rt_name = "n" nsg_ids = vlan_info.nsg_ids nsg_names = "" for nsg_id in nsg_ids: - nsg_name = vnc.get_network_security_group(nsg_id).data.display_name + # Tags filter + defined_tags = vnc.get_network_security_group(nsg_id).data.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + nsg_name=nsg_id + else: + nsg_name = vnc.get_network_security_group(nsg_id).data.display_name + nsg_names = nsg_name + "," + nsg_names + if (nsg_names != "" and nsg_names[-1] == ','): nsg_names = nsg_names[:-1] @@ -1224,7 +1544,7 @@ def export_subnets_vlans(inputfile, outdir, service_dir, config, signer, ct, exp importCommands_vlan[reg].close() # Execution of the code begins here -def export_networking(inputfile, outdir, service_dir, config, signer, ct, export_compartments=[], export_regions=[]): +def export_networking(inputfile, outdir, service_dir, config, signer, ct, export_compartments=[], export_regions=[],export_tags=[]): print("\nCD3 excel file should not be opened during export process!!!\n") @@ -1236,20 +1556,20 @@ def export_networking(inputfile, outdir, service_dir, config, signer, ct, export service_dir_nsg = "" # Fetch Major Objects - export_major_objects(inputfile, outdir, service_dir_network, config=config, signer=signer, ct=ct, export_compartments=export_compartments, export_regions=export_regions) + export_major_objects(inputfile, outdir, service_dir_network, config=config, signer=signer, ct=ct, export_compartments=export_compartments, export_regions=export_regions,export_tags=export_tags) # Fetch DHCP - export_dhcp(inputfile, outdir, service_dir_network, config=config, signer=signer, ct=ct, export_compartments=export_compartments, export_regions=export_regions) + export_dhcp(inputfile, outdir, service_dir_network, config=config, signer=signer, ct=ct, export_compartments=export_compartments, export_regions=export_regions,export_tags=export_tags) # Fetch Subnets and VLANs - export_subnets_vlans(inputfile, outdir, service_dir, config=config, signer=signer, ct=ct, export_compartments=export_compartments, export_regions=export_regions) + export_subnets_vlans(inputfile, outdir, service_dir, config=config, signer=signer, ct=ct, export_compartments=export_compartments, export_regions=export_regions,export_tags=export_tags) # Fetch RouteRules and SecRules - export_seclist(inputfile, outdir, service_dir_network, config=config, signer=signer, ct=ct, export_compartments=export_compartments, export_regions=export_regions,_tf_import_cmd=True) + export_seclist(inputfile, outdir, service_dir_network, config=config, signer=signer, ct=ct, export_compartments=export_compartments, export_regions=export_regions,export_tags=export_tags,_tf_import_cmd=True) - export_routetable(inputfile, outdir, service_dir_network, config1=config, signer1=signer, ct=ct, export_compartments=export_compartments, export_regions=export_regions, _tf_import_cmd=True) + export_routetable(inputfile, outdir, service_dir_network, config1=config, signer1=signer, ct=ct, export_compartments=export_compartments, export_regions=export_regions,export_tags=export_tags, _tf_import_cmd=True) - export_drg_routetable(inputfile, outdir, service_dir_network, config1=config, signer1=signer, ct=ct, export_compartments=export_compartments, export_regions=export_regions, _tf_import_cmd=True) + export_drg_routetable(inputfile, outdir, service_dir_network, config1=config, signer1=signer, ct=ct, export_compartments=export_compartments, export_regions=export_regions, export_tags=export_tags,_tf_import_cmd=True) # Fetch NSGs - export_nsg(inputfile, outdir, service_dir_nsg, config=config, signer=signer, ct=ct, export_compartments=export_compartments, export_regions=export_regions, _tf_import_cmd=True) \ No newline at end of file + export_nsg(inputfile, outdir, service_dir_nsg, config=config, signer=signer, ct=ct, export_compartments=export_compartments, export_regions=export_regions, export_tags=export_tags,_tf_import_cmd=True) \ No newline at end of file diff --git a/cd3_automation_toolkit/Network/BaseNetwork/modify_routerules_tf.py b/cd3_automation_toolkit/Network/BaseNetwork/modify_routerules_tf.py index 5d89ec0aa..5b92a9e00 100644 --- a/cd3_automation_toolkit/Network/BaseNetwork/modify_routerules_tf.py +++ b/cd3_automation_toolkit/Network/BaseNetwork/modify_routerules_tf.py @@ -98,7 +98,7 @@ def modify_terraform_drg_routerules(inputfile, outdir, service_dir,prefix, ct, n # Process RTs only for those DRG which are present in cd3(and have been created via TF) try: if (DRG_Name not in drgv2.drg_names[region]): - print("skipping DRG route table: " + str(df.loc[i, 'DRG RT Name']) + " as its DRG is not part of DRGv2 tab in cd3") + print("skipping DRG route table: " + str(df.loc[i, 'DRG RT Name']) + " as its DRG is not part of DRGs tab in cd3") continue except KeyError: print("skipping DRG route table: " + str(df.loc[i, 'DRG RT Name']) + " as no DRG is declared for region "+region) diff --git a/cd3_automation_toolkit/Network/DNS/export_dns_resolvers.py b/cd3_automation_toolkit/Network/DNS/export_dns_resolvers.py index c3add289f..cc1661657 100644 --- a/cd3_automation_toolkit/Network/DNS/export_dns_resolvers.py +++ b/cd3_automation_toolkit/Network/DNS/export_dns_resolvers.py @@ -137,7 +137,7 @@ def print_resolvers(resolver_tf_name, resolver, values_for_column,state, **value values_for_column = commonTools.export_tags(resolver, col_header, values_for_column) # Execution of the code begins here -def export_dns_resolvers(inputfile, outdir, service_dir, config, signer, ct, export_compartments=[], export_regions=[]): +def export_dns_resolvers(inputfile, outdir, service_dir, config, signer, ct, export_compartments=[], export_regions=[],export_tags=[]): global tf_import_cmd global sheet_dict global importCommands @@ -199,6 +199,23 @@ def export_dns_resolvers(inputfile, outdir, service_dir, config, signer, ct, exp for vcn in vcns.data: resolver_id = vnc_client.get_vcn_dns_resolver_association(vcn.id).data.dns_resolver_id resolver = dns_client.get_resolver(resolver_id).data + + # Tags filter + defined_tags = resolver.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + endpoint_map = get_e_map(region, dns_client, vnc_client, ct, resolver, ntk_compartment_name) vcn_name = vnc_client.get_vcn(resolver.attached_vcn_id).data.display_name resolver_tf_name = vcn_name diff --git a/cd3_automation_toolkit/Network/DNS/export_dns_views_zones_records.py b/cd3_automation_toolkit/Network/DNS/export_dns_views_zones_records.py index 11ba5a798..6926bfb93 100644 --- a/cd3_automation_toolkit/Network/DNS/export_dns_views_zones_records.py +++ b/cd3_automation_toolkit/Network/DNS/export_dns_views_zones_records.py @@ -98,7 +98,7 @@ def print_empty_view(region, ntk_compartment_name, view_data, values_for_column) values_for_column = commonTools.export_tags(view_data, col_header, values_for_column) # Execution of the code begins here -def export_dns_views_zones_rrsets(inputfile, outdir, service_dir, config, signer, ct, dns_filter, export_compartments=[], export_regions=[]): +def export_dns_views_zones_rrsets(inputfile, outdir, service_dir, config, signer, ct, dns_filter, export_compartments=[], export_regions=[],export_tags=[]): global tf_import_cmd global sheet_dict global importCommands @@ -161,6 +161,22 @@ def export_dns_views_zones_rrsets(inputfile, outdir, service_dir, config, signer if view_default == 'n' and view_data.is_protected == True: continue + # Tags filter + defined_tags = view_data.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + #view_data = dns_client.get_view(view.id).data view_tf_name = str(view_data.display_name) zones = oci.pagination.list_call_get_all_results(dns_client.list_zones, @@ -169,9 +185,28 @@ def export_dns_views_zones_rrsets(inputfile, outdir, service_dir, config, signer scope="PRIVATE", view_id=view_data.id).data if zones: ## Add if empty view + print_zone=False for zone_data in zones: if zone_default == 'n' and zone_data.is_protected == True: continue + + # Tags filter + defined_tags = zone_data.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + + print_zone=True zone_tf_name = view_tf_name + "_" + str(zone_data.name).replace(".", "_") rrsets = get_rrset(zone_data, dns_client, record_default) if rrsets: @@ -185,6 +220,9 @@ def export_dns_views_zones_rrsets(inputfile, outdir, service_dir, config, signer print_empty_view(region, ntk_compartment_name, view_data, values_for_column) else: print_empty_view(region, ntk_compartment_name, view_data, values_for_column) + if print_zone==False: + print_empty_view(region, ntk_compartment_name, view_data, values_for_column) + tf_resource = f'module.dns-views[\\"{view_tf_name}\\"].oci_dns_view.view' if tf_resource not in state["resources"]: importCommands[region.lower()] += f'\n{tf_or_tofu} import "{tf_resource}" {str(view_data.id)}' diff --git a/cd3_automation_toolkit/Network/LoadBalancers/export_lbr_nonGreenField.py b/cd3_automation_toolkit/Network/LoadBalancers/export_lbr_nonGreenField.py index 2e3cfbb85..c4a5b246e 100644 --- a/cd3_automation_toolkit/Network/LoadBalancers/export_lbr_nonGreenField.py +++ b/cd3_automation_toolkit/Network/LoadBalancers/export_lbr_nonGreenField.py @@ -141,13 +141,29 @@ def insert_values(values_for_column, oci_objs, sheet_dict, region, comp_name, di values_for_column = commonTools.export_extra_columns(oci_objs, col_header, sheet_dict, values_for_column) -def print_lbr_hostname_certs(region, ct, outdir, values_for_column_lhc, lbr, LBRs, lbr_compartment_name, network, +def print_lbr_hostname_certs(region, ct, outdir, values_for_column_lhc, lbr, LBRs, lbr_compartment_name, export_tags, network, service_dir): for eachlbr in LBRs.data: # Fetch LBR Name display_name = eachlbr.display_name + # Tags filter + defined_tags = eachlbr.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + # Filter out the LBs provisioned by oke eachlbr_defined_tags = eachlbr.defined_tags if 'Oracle-Tags' in eachlbr_defined_tags.keys(): @@ -411,11 +427,27 @@ def print_lbr_hostname_certs(region, ct, outdir, values_for_column_lhc, lbr, LBR return values_for_column_lhc -def print_backendset_backendserver(region, ct, values_for_column_bss, lbr, LBRs, lbr_compartment_name): +def print_backendset_backendserver(region, ct, values_for_column_bss, lbr, LBRs, lbr_compartment_name,export_tags): certs = CertificatesClient(config=config, retry_strategy=oci.retry.DEFAULT_RETRY_STRATEGY, signer=signer) for eachlbr in LBRs.data: + # Tags filter + defined_tags = eachlbr.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + # Filter out the LBs provisioned by oke eachlbr_defined_tags = eachlbr.defined_tags if 'Oracle-Tags' in eachlbr_defined_tags.keys(): @@ -574,10 +606,26 @@ def print_backendset_backendserver(region, ct, values_for_column_bss, lbr, LBRs, return values_for_column_bss -def print_listener(region, ct, values_for_column_lis, LBRs, lbr_compartment_name): +def print_listener(region, ct, values_for_column_lis, LBRs, lbr_compartment_name,export_tags): for eachlbr in LBRs.data: sslcerts = None + # Tags filter + defined_tags = eachlbr.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + # Filter out the LBs provisioned by oke eachlbr_defined_tags = eachlbr.defined_tags if 'Oracle-Tags' in eachlbr_defined_tags.keys(): @@ -692,9 +740,25 @@ def print_listener(region, ct, values_for_column_lis, LBRs, lbr_compartment_name return values_for_column_lis -def print_rule(region, ct, values_for_column_rule, LBRs, lbr_compartment_name): +def print_rule(region, ct, values_for_column_rule, LBRs, lbr_compartment_name,export_tags): for eachlbr in LBRs.data: + # Tags filter + defined_tags = eachlbr.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + # Filter out the LBs provisioned by oke eachlbr_defined_tags = eachlbr.defined_tags if 'Oracle-Tags' in eachlbr_defined_tags.keys(): @@ -808,9 +872,25 @@ def print_rule(region, ct, values_for_column_rule, LBRs, lbr_compartment_name): return values_for_column_rule -def print_prs(region, ct, values_for_column_prs, LBRs, lbr_compartment_name): +def print_prs(region, ct, values_for_column_prs, LBRs, lbr_compartment_name,export_tags): for eachlbr in LBRs.data: + # Tags filter + defined_tags = eachlbr.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + # Filter out the LBs provisioned by oke eachlbr_defined_tags = eachlbr.defined_tags if 'Oracle-Tags' in eachlbr_defined_tags.keys(): @@ -854,10 +934,24 @@ def print_prs(region, ct, values_for_column_prs, LBRs, lbr_compartment_name): return values_for_column_prs -def print_routing_policies(region, ct, values_for_column_rp, LBRs, lbr_compartment_name): +def print_routing_policies(region, ct, values_for_column_rp, LBRs, lbr_compartment_name,export_tags): for eachlbr in LBRs.data: - # Retrieve the routing policies for the load balancer - routing_policies = eachlbr.routing_policies + + # Tags filter + defined_tags = eachlbr.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue # Filter out the LBs provisioned by OKE eachlbr_defined_tags = eachlbr.defined_tags @@ -867,6 +961,9 @@ def print_routing_policies(region, ct, values_for_column_rp, LBRs, lbr_compartme if 'ocid1.cluster' in created_by: continue + # Retrieve the routing policies for the load balancer + routing_policies = eachlbr.routing_policies + # Fetch the compartment name lbr_comp_id = eachlbr.compartment_id comp_done_ids = [] @@ -920,7 +1017,7 @@ def print_routing_policies(region, ct, values_for_column_rp, LBRs, lbr_compartme # Execution of the code begins here -def export_lbr(inputfile, outdir, service_dir, config1, signer1, ct, export_compartments, export_regions): +def export_lbr(inputfile, outdir, service_dir, config1, signer1, ct, export_compartments, export_regions,export_tags): global tf_import_cmd global sheet_dict global importCommands @@ -1007,17 +1104,33 @@ def export_lbr(inputfile, outdir, service_dir, config1, signer1, ct, export_comp compartment_id=ct.ntk_compartment_ids[compartment_name], lifecycle_state="ACTIVE") values_for_column_lhc = print_lbr_hostname_certs(region, ct, outdir, values_for_column_lhc, lbr, LBRs, - compartment_name, network, service_dir) - values_for_column_lis = print_listener(region, ct, values_for_column_lis, LBRs, compartment_name) + compartment_name, export_tags, network, service_dir) + values_for_column_lis = print_listener(region, ct, values_for_column_lis, LBRs, compartment_name,export_tags) values_for_column_bss = print_backendset_backendserver(region, ct, values_for_column_bss, lbr, LBRs, - compartment_name) - values_for_column_rule = print_rule(region, ct, values_for_column_rule, LBRs, compartment_name) - values_for_column_prs = print_prs(region, ct, values_for_column_prs, LBRs, compartment_name) - values_for_column_rp = print_routing_policies(region, ct, values_for_column_rp, LBRs, compartment_name) + compartment_name,export_tags) + values_for_column_rule = print_rule(region, ct, values_for_column_rule, LBRs, compartment_name,export_tags) + values_for_column_prs = print_prs(region, ct, values_for_column_prs, LBRs, compartment_name,export_tags) + values_for_column_rp = print_routing_policies(region, ct, values_for_column_rp, LBRs, compartment_name,export_tags) for eachlbr in LBRs.data: - total_resources+=1 + # Tags filter + defined_tags = eachlbr.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + + total_resources += 1 # Filter out the LBs provisioned by oke eachlbr_defined_tags = eachlbr.defined_tags diff --git a/cd3_automation_toolkit/Network/LoadBalancers/export_nlb_nonGreenField.py b/cd3_automation_toolkit/Network/LoadBalancers/export_nlb_nonGreenField.py index 90a907b1b..9ec4f4718 100644 --- a/cd3_automation_toolkit/Network/LoadBalancers/export_nlb_nonGreenField.py +++ b/cd3_automation_toolkit/Network/LoadBalancers/export_nlb_nonGreenField.py @@ -21,13 +21,29 @@ importCommands = {} oci_obj_names = {} -def print_nlb_backendset_backendserver(region, ct, values_for_column_bss,NLBs, nlb_compartment_name,cmpt,vcn,nlb,state): +def print_nlb_backendset_backendserver(region, values_for_column_bss,NLBs, nlb_compartment_name,cmpt,vcn,nlb,export_tags, state, ct): for eachnlb in NLBs.data: cnt_bss = 0 nlb_display_name = eachnlb.display_name tf_name = commonTools.check_tf_variable(nlb_display_name) + # Tags filter + defined_tags = eachnlb.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + # Filter out the NLBs provisioned by oke eachnlb_defined_tags = eachnlb.defined_tags if 'Oracle-Tags' in eachnlb_defined_tags.keys(): @@ -144,9 +160,27 @@ def print_nlb_backendset_backendserver(region, ct, values_for_column_bss,NLBs, n return values_for_column_bss -def print_nlb_listener(region, outdir, values_for_column_lis, NLBs, nlb_compartment_name,vcn,ct,state): +def print_nlb_listener(region, outdir, values_for_column_lis, NLBs, nlb_compartment_name,vcn,export_tags,ct,state): + for eachnlb in NLBs.data: + # Tags filter + defined_tags = eachnlb.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + + # Filter out the NLBs provisioned by oke eachnlb_defined_tags = eachnlb.defined_tags if 'Oracle-Tags' in eachnlb_defined_tags.keys(): @@ -283,7 +317,7 @@ def print_nlb_listener(region, outdir, values_for_column_lis, NLBs, nlb_compartm return values_for_column_lis # Execution of the code begins here -def export_nlb(inputfile, outdir, service_dir, config,signer, ct, export_compartments, export_regions): +def export_nlb(inputfile, outdir, service_dir, config,signer, ct, export_compartments, export_regions,export_tags): global tf_import_cmd global sheet_dict global importCommands @@ -297,6 +331,7 @@ def export_nlb(inputfile, outdir, service_dir, config,signer, ct, export_compart global listener_to_cd3,tf_or_tofu tf_or_tofu = ct.tf_or_tofu tf_state_list = [tf_or_tofu, "state", "list"] + total_resources = 0 cd3file = inputfile if ('.xls' not in cd3file): @@ -320,7 +355,6 @@ def export_nlb(inputfile, outdir, service_dir, config,signer, ct, export_compart file_name = 'import_commands_nlb.sh' resource = 'import_nlb' - total_resources = 0 for reg in export_regions: script_file = f'{outdir}/{reg}/{service_dir}/' + file_name @@ -350,10 +384,27 @@ def export_nlb(inputfile, outdir, service_dir, config,signer, ct, export_compart NLBs = oci.pagination.list_call_get_all_results(nlb.list_network_load_balancers,compartment_id=ct.ntk_compartment_ids[compartment_name], lifecycle_state="ACTIVE") if NLBs.data != [] and importCommands[reg] == '': - total_resources += len(NLBs.data) + for eachnlb in NLBs.data: + + # Tags filter + defined_tags = eachnlb.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + total_resources +=1 - values_for_column_lis = print_nlb_listener(region, outdir, values_for_column_lis,NLBs,compartment_name,vcn,ct,state) - values_for_column_bss = print_nlb_backendset_backendserver(region, ct, values_for_column_bss,NLBs,compartment_name,cmpt,vcn,nlb,state) + values_for_column_lis = print_nlb_listener(region, outdir, values_for_column_lis,NLBs,compartment_name,vcn,export_tags,ct,state) + values_for_column_bss = print_nlb_backendset_backendserver(region, values_for_column_bss,NLBs,compartment_name,cmpt,vcn,nlb,export_tags, state,ct) commonTools.write_to_cd3(values_for_column_lis, cd3file, "NLB-Listeners") commonTools.write_to_cd3(values_for_column_bss, cd3file, "NLB-BackendSets-BackendServers") diff --git a/cd3_automation_toolkit/OCI_Regions b/cd3_automation_toolkit/OCI_Regions index 5f0fe2f79..824428a7a 100644 --- a/cd3_automation_toolkit/OCI_Regions +++ b/cd3_automation_toolkit/OCI_Regions @@ -1,20 +1,27 @@ #Region:Region_Key +abilene:us-abilene-1 +saltlake:us-saltlake-2 amsterdam:eu-amsterdam-1 stockholm:eu-stockholm-1 abudhabi:me-abudhabi-1 +saltlake:us-saltlake-1 bogota:sa-bogota-1 mumbai:ap-mumbai-1 paris:eu-paris-1 cardiff:uk-cardiff-1 +dallas:us-dallas-1 dubai:me-dubai-1 +tukwila:us-tukwila-4 frankfurt:eu-frankfurt-1 saopaulo:sa-saopaulo-1 +batam:ap-batam-1 hyderabad:ap-hyderabad-1 ashburn:us-ashburn-1 seoul:ap-seoul-1 jeddah:me-jeddah-1 johannesburg:af-johannesburg-1 osaka:ap-osaka-1 +kragujevac:eu-kragujevac-1 london:uk-london-1 milan:eu-milan-1 madrid:eu-madrid-1 @@ -23,6 +30,7 @@ marseille:eu-marseille-1 monterrey:mx-monterrey-1 jerusalem:il-jerusalem-1 tokyo:ap-tokyo-1 +neom:me-neom-1 chicago:us-chicago-1 phoenix:us-phoenix-1 queretaro:mx-queretaro-1 diff --git a/cd3_automation_toolkit/Release-Notes b/cd3_automation_toolkit/Release-Notes index f40f2fee1..a632b2541 100644 --- a/cd3_automation_toolkit/Release-Notes +++ b/cd3_automation_toolkit/Release-Notes @@ -1,3 +1,16 @@ +------------------------------------- +CD3 Automation Toolkit Tag v2025.1.0 +Apr 4th, 2024 +------------------------------------- +1. Introduced new service support - MySQL Database. +2. Included Tunnel Inspection for OCI Network Firewall. +3. Introduced filter for tags while export of resources. +4. Moved compartment filter before showing xport options to make it common for all services. +5. Running Create/Modify Network through Jenkins will automatically call export of rules after successful terraform apply. + This was a manua process earlier. + + + ------------------------------------- CD3 Automation Toolkit Tag v2024.4.3 Dec 27th, 2024 diff --git a/cd3_automation_toolkit/SDDC/export_sddc_nonGreenField.py b/cd3_automation_toolkit/SDDC/export_sddc_nonGreenField.py index 3af083e0c..f117c7712 100644 --- a/cd3_automation_toolkit/SDDC/export_sddc_nonGreenField.py +++ b/cd3_automation_toolkit/SDDC/export_sddc_nonGreenField.py @@ -23,7 +23,7 @@ def get_volume_data(bvol, volume_id, ct): return vol_comp+'@'+vol_name ### Execution start here - SDDC Data -def export_sddc(inputfile, outdir, service_dir,config,signer, ct, export_compartments=[], export_regions=[]): +def export_sddc(inputfile, outdir, service_dir,config,signer, ct, export_compartments=[], export_regions=[],export_tags=[]): cd3file = inputfile if ('.xls' not in cd3file): print("\nAcceptable cd3 format: .xlsx") @@ -97,6 +97,22 @@ def export_sddc(inputfile, outdir, service_dir,config,signer, ct, export_compart if sddc_cluster.lifecycle_state=='DELETED': continue + # Tags filter + defined_tags = sddc_cluster.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + # Process management and workload cluster data if sddc_cluster.vsphere_type in ["MANAGEMENT", "WORKLOAD"]: sddc = sddc_client.get_sddc(sddc_id=sddc_cluster.sddc_id).data diff --git a/cd3_automation_toolkit/Security/Firewall/__init__.py b/cd3_automation_toolkit/Security/Firewall/__init__.py index ed65688b8..8c79bf942 100644 --- a/cd3_automation_toolkit/Security/Firewall/__init__.py +++ b/cd3_automation_toolkit/Security/Firewall/__init__.py @@ -14,4 +14,5 @@ from .export_firewall_nonGreenField import export_firewall from .clone_firewallpolicy import clone_firewallpolicy from .cloneexport_firewallpolicy_nonGreenField import cloneexport_firewallpolicy -from .delete_firewallpolicy import delete_firewallpolicy \ No newline at end of file +from .delete_firewallpolicy import delete_firewallpolicy +from .fwpolicy_create_tunnelinspection import fwpolicy_create_tunnelinspect diff --git a/cd3_automation_toolkit/Security/Firewall/export_firewall_nonGreenField.py b/cd3_automation_toolkit/Security/Firewall/export_firewall_nonGreenField.py index e830e4641..cc40abb32 100644 --- a/cd3_automation_toolkit/Security/Firewall/export_firewall_nonGreenField.py +++ b/cd3_automation_toolkit/Security/Firewall/export_firewall_nonGreenField.py @@ -22,8 +22,25 @@ oci_obj_names = {} AD = lambda ad: "AD1" if ("AD-1" in ad or "ad-1" in ad) else ("AD2" if ("AD-2" in ad or "ad-2" in ad) else ("AD3" if ("AD-3" in ad or "ad-3" in ad) else " NULL")) -def print_firewall(region, ct, values_for_column_fw, fws, fw_compartment_name, vcn, fw,state): +def print_firewall(region, export_tags, ct, values_for_column_fw, fws, fw_compartment_name, vcn, fw,state): for eachfw in fws.data: + + # Tags filter + defined_tags = eachfw.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + fw_display_name = eachfw.display_name tf_name = commonTools.check_tf_variable(fw_display_name) tf_resource = f'module.firewalls[\\"{str(tf_name)}\\"].oci_network_firewall_network_firewall.network_firewall' @@ -102,7 +119,7 @@ def print_firewall(region, ct, values_for_column_fw, fws, fw_compartment_name, v # Execution of the code begins here -def export_firewall(inputfile, _outdir, service_dir, config, signer, ct, export_compartments, export_regions): +def export_firewall(inputfile, _outdir, service_dir, config, signer, ct, export_compartments, export_regions, export_tags): global tf_import_cmd global sheet_dict global importCommands @@ -165,7 +182,7 @@ def export_firewall(inputfile, _outdir, service_dir, config, signer, ct, export_ fws = oci.pagination.list_call_get_all_results(fw.list_network_firewalls, compartment_id=ct.ntk_compartment_ids[compartment_name], lifecycle_state="ACTIVE") # fwpolicies = oci.pagination.list_call_get_all_results(fwpolicy.list_network_firewall_policies,compartment_id=ct.ntk_compartment_ids[compartment_name],lifecycle_state = "ACTIVE") - values_for_column_fw = print_firewall(region, ct, values_for_column_fw, fws, compartment_name, vcn, fw,state) + values_for_column_fw = print_firewall(region, export_tags, ct, values_for_column_fw, fws, compartment_name, vcn, fw,state) # writing data init_commands = f'\n######### Writing import for Network Firewall Objects #########\n\n#!/bin/bash\n{tf_or_tofu} init' diff --git a/cd3_automation_toolkit/Security/Firewall/export_firewallpolicy_nonGreenField.py b/cd3_automation_toolkit/Security/Firewall/export_firewallpolicy_nonGreenField.py index 3fbcbfc1c..91de3645f 100644 --- a/cd3_automation_toolkit/Security/Firewall/export_firewallpolicy_nonGreenField.py +++ b/cd3_automation_toolkit/Security/Firewall/export_firewallpolicy_nonGreenField.py @@ -22,14 +22,30 @@ sys.path.append(os.getcwd() + "/..") from commonTools import * -importCommands,importCommands_nfp,importCommands_nfao,importCommands_ulo,importCommands_slo,importCommands_alo,importCommands_sro,importCommands_mso,importCommands_dpo,importCommands_dro,importCommands_fpo = {},{},{},{},{},{},{},{},{},{},{} +importCommands,importCommands_nfp,importCommands_nfao,importCommands_ulo,importCommands_slo,importCommands_alo,importCommands_sro,importCommands_mso,importCommands_dpo,importCommands_dro,importCommands_fpo,importCommands_tio = {},{},{},{},{},{},{},{},{},{},{},{} oci_obj_names = {} -def print_firewall_policy(region, ct, values_for_column_fwpolicy, fwpolicies, fwpolicy_compartment_name,state): +def print_firewall_policy(region, ct, values_for_column_fwpolicy, fwpolicies, fwpolicy_compartment_name,export_tags,state): if not clone: print("Exporting Policy details for " + region) for eachfwpolicy in fwpolicies: + # Tags filter + defined_tags = eachfwpolicy.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + fwpolicy_display_name = eachfwpolicy.display_name if clone : fwpolicy_display_name = target_pol[src_pol.index(fwpolicy_display_name)] @@ -53,10 +69,26 @@ def print_firewall_policy(region, ct, values_for_column_fwpolicy, fwpolicies, fw return values_for_column_fwpolicy -def print_firewall_address(region, ct, values_for_column_fwaddress, fwpolicies, fwclient,state): +def print_firewall_address(region, ct, values_for_column_fwaddress, fwpolicies, fwclient,export_tags,state): if not clone: print("Exporting Address-list details " + region) for policy in fwpolicies: + # Tags filter + defined_tags = policy.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + policy_id = policy.id addpolicy_display_name = policy.display_name if clone: @@ -97,10 +129,25 @@ def print_firewall_address(region, ct, values_for_column_fwaddress, fwpolicies, return values_for_column_fwaddress -def print_firewall_urllist(region, ct, values_for_column_fwurllist, fwpolicies, fwclient,state): +def print_firewall_urllist(region, ct, values_for_column_fwurllist, fwpolicies, fwclient,export_tags,state): if not clone: print("Exporting Url-list details " + region) for urlpolicy in fwpolicies: + # Tags filter + defined_tags = urlpolicy.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue urlpolicy_id = urlpolicy.id urlpolicy_display_name = urlpolicy.display_name if clone: @@ -137,11 +184,27 @@ def print_firewall_urllist(region, ct, values_for_column_fwurllist, fwpolicies, return values_for_column_fwurllist -def print_firewall_servicelist(region, ct, values_for_column_fwservicelist, fwpolicies, fwclient,state): +def print_firewall_servicelist(region, ct, values_for_column_fwservicelist, fwpolicies, fwclient,export_tags,state): if not clone: print("Exporting Service and Service-list details " + region) for servicelistpolicy in fwpolicies: + # Tags filter + defined_tags = servicelistpolicy.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + servicelistpolicy_id = servicelistpolicy.id servicelistpolicy_display_name = servicelistpolicy.display_name if clone: @@ -237,10 +300,27 @@ def print_firewall_servicelist(region, ct, values_for_column_fwservicelist, fwpo return values_for_column_fwservicelist -def print_firewall_applist(region, ct, values_for_column_fwapplist, fwpolicies, fwclient,state): +def print_firewall_applist(region, ct, values_for_column_fwapplist, fwpolicies, fwclient,export_tags,state): if not clone: print("Exporting Application and Application-list details " + region) for applistpolicy in fwpolicies: + + # Tags filter + defined_tags = applistpolicy.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + applistpolicy_id = applistpolicy.id applistpolicy_display_name = applistpolicy.display_name if clone: @@ -332,10 +412,26 @@ def print_firewall_applist(region, ct, values_for_column_fwapplist, fwpolicies, return values_for_column_fwapplist -def print_firewall_secrules(region, ct, values_for_column_fwsecrules, fwpolicies, fwclient,state): +def print_firewall_secrules(region, ct, values_for_column_fwsecrules, fwpolicies, fwclient,export_tags,state): if not clone: print("Exporting Security rules details " + region) for secrulespolicy in fwpolicies: + # Tags filter + defined_tags = secrulespolicy.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + secrulespolicy_id = secrulespolicy.id secrulespolicy_display_name = secrulespolicy.display_name if clone: @@ -424,10 +520,26 @@ def print_firewall_secrules(region, ct, values_for_column_fwsecrules, fwpolicies values_for_column_fwsecrules = commonTools.export_tags(secrulespolicy, col_header,values_for_column_fwsecrules) return values_for_column_fwsecrules -def print_firewall_secret(region, ct, values_for_column_fwsecret, fwpolicies, fwclient, vault, compartment, kmsvault,state): +def print_firewall_secret(region, ct, values_for_column_fwsecret, fwpolicies, fwclient, vault, compartment, export_tags,kmsvault,state): if not clone: print("Exporting Mapped secret details " + region) for secretpolicy in fwpolicies: + # Tags filter + defined_tags = secretpolicy.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + secretpolicy_id = secretpolicy.id secretpolicy_display_name = secretpolicy.display_name if clone: @@ -470,10 +582,26 @@ def print_firewall_secret(region, ct, values_for_column_fwsecret, fwpolicies, fw return values_for_column_fwsecret -def print_firewall_decryptprofile(region, ct, values_for_column_fwdecryptprofile, fwpolicies, fwclient,state): +def print_firewall_decryptprofile(region, ct, values_for_column_fwdecryptprofile, fwpolicies, fwclient,export_tags,state): if not clone: print("Exporting Decryption Profile details " + region) for decryptionprofile in fwpolicies: + # Tags filter + defined_tags = decryptionprofile.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + decryptionprofile_id = decryptionprofile.id decryptionprofile_display_name = decryptionprofile.display_name if clone: @@ -536,10 +664,27 @@ def print_firewall_decryptprofile(region, ct, values_for_column_fwdecryptprofile values_for_column_fwdecryptprofile = commonTools.export_tags(decryptionprofile, col_header,values_for_column_fwdecryptprofile) return values_for_column_fwdecryptprofile -def print_firewall_decryptrule(region, ct, values_for_column_fwdecryptrule, fwpolicies, fwclient,state): +def print_firewall_decryptrule(region, ct, values_for_column_fwdecryptrule, fwpolicies, fwclient,export_tags,state): if not clone: print("Exporting Decryption rules details " + region) for decryptrulepolicy in fwpolicies: + # Tags filter + defined_tags = decryptrulepolicy.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + + decryptrulepolicy_id = decryptrulepolicy.id decryptrulepolicy_display_name = decryptrulepolicy.display_name if clone: @@ -599,11 +744,90 @@ def print_firewall_decryptrule(region, ct, values_for_column_fwdecryptrule, fwpo values_for_column_fwdecryptrule = commonTools.export_tags(decryptrulepolicy, col_header,values_for_column_fwdecryptrule) return values_for_column_fwdecryptrule +def print_firewall_tunnelinspect(region, ct, values_for_column_fwtunnelinspect, fwpolicies, fwclient,export_tags,state): + if not clone: + print("Exporting Tunnel inspections rules details " + region) + for tunnelinspectrulepolicy in fwpolicies: + + # Tags filter + defined_tags = tunnelinspectrulepolicy.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + + + tunnelinspectrulepolicy_id = tunnelinspectrulepolicy.id + tunnelinspectrulepolicy_display_name = tunnelinspectrulepolicy.display_name + if clone: + tunnelinspectrulepolicy_display_name = target_pol[src_pol.index(tunnelinspectrulepolicy_display_name)] + tunnelinspectrulepolicy_tf_name = commonTools.check_tf_variable(tunnelinspectrulepolicy_display_name) + fwtunnelinspectrules = oci.pagination.list_call_get_all_results(fwclient.list_tunnel_inspection_rules, tunnelinspectrulepolicy_id) + tunnelinspectrule_info = fwtunnelinspectrules.data + for tirules in tunnelinspectrule_info: + tirule_info = fwclient.get_tunnel_inspection_rule(tirules.parent_resource_id, tirules.name).data + tirules_display_name = tirules.name + tirules_tf_name = commonTools.check_tf_variable(tirules_display_name) + tf_resource = f'module.tunnelinspect_rules[\\"{str(tunnelinspectrulepolicy_tf_name)}_{str(tirules_tf_name)}\\"].oci_network_firewall_network_firewall_policy_tunnel_inspection_rule.network_firewall_policy_tunnel_inspection_rule' + if not clone and tf_resource not in state["resources"]: + importCommands_tio[reg] += f'\n{tf_or_tofu} import "{tf_resource}" networkFirewallPolicies/{tunnelinspectrulepolicy_id}/tunnelInspectionRules/{tirules_display_name}' + + rsrc_detail = "" + rdst_detail = "" + if tirule_info.condition.source_address != None: + for rsrc in tirule_info.condition.source_address: + rsrc_detail = rsrc_detail + "," + rsrc + if (rsrc_detail != ""): + rsrc_detail = rsrc_detail[1:] + if tirule_info.condition.destination_address != None: + for rdst in tirule_info.condition.destination_address: + rdst_detail = rdst_detail + "," + rdst + if (rdst_detail != ""): + rdst_detail = rdst_detail[1:] + if tirule_info.position.after_rule == None and tirule_info.position.before_rule == None: + dposition = None + elif tirule_info.position.after_rule == None: + dposition = None + elif tirule_info.position.before_rule == None: + dposition = "after_rule::" + tirule_info.position.after_rule + else: + dposition = "after_rule::" + tirule_info.position.after_rule + + for col_header in values_for_column_fwtunnelinspect: + if col_header == 'Region': + values_for_column_fwtunnelinspect[col_header].append(region) + elif col_header == 'Firewall Policy': + values_for_column_fwtunnelinspect[col_header].append(tunnelinspectrulepolicy_display_name) + elif col_header == 'Rule Name': + values_for_column_fwtunnelinspect[col_header].append(tirules_display_name) + elif col_header == 'Source Address': + values_for_column_fwtunnelinspect[col_header].append(rsrc_detail) + elif col_header == 'Destination Address': + values_for_column_fwtunnelinspect[col_header].append(rdst_detail) + elif col_header == 'Action': + values_for_column_fwtunnelinspect[col_header].append(tirule_info.action) + elif col_header == 'Position': + values_for_column_fwtunnelinspect[col_header].append(dposition) + elif col_header.lower() in commonTools.tagColumns: + values_for_column_fwtunnelinspect = commonTools.export_tags(tunnelinspectrulepolicy, col_header,values_for_column_fwtunnelinspect) + return values_for_column_fwtunnelinspect + + + # Execution of the code begins here -def export_firewallpolicy(inputfile, _outdir, service_dir, config, signer, ct, export_compartments, export_regions, export_policies,target_policies=[],attached_policy_only="",clone_policy=False): +def export_firewallpolicy(inputfile, _outdir, service_dir, config, signer, ct, export_compartments, export_regions, export_tags, export_policies,target_policies=[],attached_policy_only="",clone_policy=False): global tf_import_cmd global sheet_dict - global importCommands,importCommands_nfp,importCommands_nfao,importCommands_ulo,importCommands_slo,importCommands_alo,importCommands_sro,importCommands_mso,importCommands_dpo,importCommands_dro,importCommands_fpo + global importCommands,importCommands_nfp,importCommands_nfao,importCommands_ulo,importCommands_slo,importCommands_alo,importCommands_sro,importCommands_mso,importCommands_dpo,importCommands_dro,importCommands_fpo,importCommands_tio global values_for_vcninfo global cd3file global reg @@ -617,7 +841,7 @@ def export_firewallpolicy(inputfile, _outdir, service_dir, config, signer, ct, e global values_for_column_fwsecret global values_for_column_fwdecryptprofile global values_for_column_fwdecryptrule - + global values_for_column_fwtunnelinspect global sheet_dict_fwpolicy global sheet_dict_fwaddress global sheet_dict_fwurllist @@ -655,7 +879,7 @@ def export_firewallpolicy(inputfile, _outdir, service_dir, config, signer, ct, e df, values_for_column_fwsecret = commonTools.read_cd3(cd3file, "Firewall-Policy-Secret") df, values_for_column_fwdecryptprofile = commonTools.read_cd3(cd3file, "Firewall-Policy-DecryptProfile") df, values_for_column_fwdecryptrule = commonTools.read_cd3(cd3file, "Firewall-Policy-DecryptRule") - + df, values_for_column_fwtunnelinspect = commonTools.read_cd3(cd3file, "Firewall-Policy-TunnelInspect") # Get dict for columns from Excel_Columns #sheet_dict_fwpolicy = ct.sheet_dict[sheetname] #sheet_dict_fwaddress = ct.sheet_dict["Firewall-Policy-Address"] @@ -673,7 +897,7 @@ def export_firewallpolicy(inputfile, _outdir, service_dir, config, signer, ct, e importCommands[reg], importCommands_nfp[reg], importCommands_nfao[reg], importCommands_ulo[reg], \ importCommands_slo[reg], importCommands_alo[reg], importCommands_sro[reg], importCommands_mso[reg], \ importCommands_dpo[reg], importCommands_dro[reg], importCommands_fpo[ - reg] = "", "", "", "", "", "", "", "", "", "", "" + reg], importCommands_tio[reg]= "", "", "", "", "", "", "", "", "", "", "", "" # Fetch Network firewall Policy Details @@ -702,6 +926,23 @@ def export_firewallpolicy(inputfile, _outdir, service_dir, config, signer, ct, e for eachfwpolicy in fw_data: if export_policies is not None: eachfwpolicy1 = fwclient.get_network_firewall_policy(network_firewall_policy_id=eachfwpolicy.id).data + + # Tags filter + defined_tags = eachfwpolicy1.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + fwpolicy_display_name1 = eachfwpolicy1.display_name if (fwpolicy_display_name1 in export_policies): if clone: @@ -718,16 +959,16 @@ def export_firewallpolicy(inputfile, _outdir, service_dir, config, signer, ct, e fwpolicies.append(eachfwpolicy) #fwpolicies.append(data) - values_for_column_fwpolicy = print_firewall_policy(region, ct, values_for_column_fwpolicy, fwpolicies,compartment_name,state) - values_for_column_fwaddress = print_firewall_address(region, ct, values_for_column_fwaddress, fwpolicies, fwclient,state) - values_for_column_fwurllist = print_firewall_urllist(region, ct, values_for_column_fwurllist, fwpolicies, fwclient,state) - values_for_column_fwservicelist = print_firewall_servicelist(region, ct, values_for_column_fwservicelist, fwpolicies, fwclient,state) - values_for_column_fwapplist = print_firewall_applist(region, ct, values_for_column_fwapplist, fwpolicies, fwclient,state) - values_for_column_fwsecrules = print_firewall_secrules(region, ct, values_for_column_fwsecrules,fwpolicies, fwclient,state) - values_for_column_fwsecret = print_firewall_secret(region, ct, values_for_column_fwsecret, fwpolicies,fwclient, vault, compartment, kmsvault,state) - values_for_column_fwdecryptprofile = print_firewall_decryptprofile(region, ct,values_for_column_fwdecryptprofile,fwpolicies, fwclient,state) - values_for_column_fwdecryptrule = print_firewall_decryptrule(region, ct, values_for_column_fwdecryptrule,fwpolicies, fwclient,state) - print(importCommands_nfp[reg]) + values_for_column_fwpolicy = print_firewall_policy(region, ct, values_for_column_fwpolicy, fwpolicies,compartment_name,export_tags,state) + values_for_column_fwaddress = print_firewall_address(region, ct, values_for_column_fwaddress, fwpolicies, fwclient,export_tags,state) + values_for_column_fwurllist = print_firewall_urllist(region, ct, values_for_column_fwurllist, fwpolicies, fwclient,export_tags,state) + values_for_column_fwservicelist = print_firewall_servicelist(region, ct, values_for_column_fwservicelist, fwpolicies, fwclient,export_tags,state) + values_for_column_fwapplist = print_firewall_applist(region, ct, values_for_column_fwapplist, fwpolicies, fwclient,export_tags,state) + values_for_column_fwsecrules = print_firewall_secrules(region, ct, values_for_column_fwsecrules,fwpolicies, fwclient,export_tags,state) + values_for_column_fwsecret = print_firewall_secret(region, ct, values_for_column_fwsecret, fwpolicies,fwclient, vault, compartment, export_tags,kmsvault,state) + values_for_column_fwdecryptprofile = print_firewall_decryptprofile(region, ct,values_for_column_fwdecryptprofile,fwpolicies, fwclient,export_tags,state) + values_for_column_fwdecryptrule = print_firewall_decryptrule(region, ct, values_for_column_fwdecryptrule,fwpolicies, fwclient,export_tags,state) + values_for_column_fwtunnelinspect = print_firewall_tunnelinspect(region, ct, values_for_column_fwtunnelinspect,fwpolicies,fwclient,export_tags,state) if clone: commonTools.write_to_cd3(values_for_column_fwpolicy, cd3file, "Firewall-Policy",append=True) commonTools.write_to_cd3(values_for_column_fwaddress, cd3file, "Firewall-Policy-AddressList",append=True) @@ -738,6 +979,7 @@ def export_firewallpolicy(inputfile, _outdir, service_dir, config, signer, ct, e commonTools.write_to_cd3(values_for_column_fwsecret, cd3file, "Firewall-Policy-Secret",append=True) commonTools.write_to_cd3(values_for_column_fwdecryptprofile, cd3file, "Firewall-Policy-DecryptProfile",append=True) commonTools.write_to_cd3(values_for_column_fwdecryptrule, cd3file, "Firewall-Policy-DecryptRule",append=True) + commonTools.write_to_cd3(values_for_column_fwtunnelinspect, cd3file, "Firewall-Policy-TunnelInspect", append=True) else: commonTools.write_to_cd3(values_for_column_fwpolicy, cd3file, "Firewall-Policy") commonTools.write_to_cd3(values_for_column_fwaddress, cd3file, "Firewall-Policy-AddressList") @@ -748,18 +990,17 @@ def export_firewallpolicy(inputfile, _outdir, service_dir, config, signer, ct, e commonTools.write_to_cd3(values_for_column_fwsecret, cd3file, "Firewall-Policy-Secret") commonTools.write_to_cd3(values_for_column_fwdecryptprofile, cd3file, "Firewall-Policy-DecryptProfile") commonTools.write_to_cd3(values_for_column_fwdecryptrule, cd3file, "Firewall-Policy-DecryptRule") - + commonTools.write_to_cd3(values_for_column_fwtunnelinspect, cd3file, "Firewall-Policy-TunnelInspect") print("Firewall Policies exported to CD3\n") # writing data init_commands = f'\n######### Writing import for Network firewall policy Objects #########\n\n#!/bin/bash\n{tf_or_tofu} init' - importCommands_message = ["Policy","Address Objects","url list Objects","service list Objects","application list Objects","Security Rules Objects","Mapped Secret Objects","Decrypt profile Objects","decryption Rules Objects","policy Objects"] + importCommands_message = ["Policy","Address Objects","url list Objects","service list Objects","application list Objects","Security Rules Objects","Mapped Secret Objects","Decrypt profile Objects","decryption Rules Objects","policy Objects","Tunnel Inspect Objects"] for reg in export_regions: count = 0 all_importCommands = [importCommands_nfp[reg], importCommands_nfao[reg], importCommands_ulo[reg], importCommands_slo[reg], importCommands_alo[reg], importCommands_sro[reg], importCommands_mso[reg], importCommands_dpo[reg], - importCommands_dro[reg], importCommands_fpo[reg]] - print(importCommands_nfp[reg]) + importCommands_dro[reg], importCommands_fpo[reg], importCommands_tio[reg]] for item in all_importCommands: if item != "": importCommands[reg] += f'\n\n######### Writing import for Network firewall {importCommands_message[count]} #########\n\n' diff --git a/cd3_automation_toolkit/Security/Firewall/fwpolicy_create_decryptrules.py b/cd3_automation_toolkit/Security/Firewall/fwpolicy_create_decryptrules.py index 20991bd9f..cb5e22e1f 100644 --- a/cd3_automation_toolkit/Security/Firewall/fwpolicy_create_decryptrules.py +++ b/cd3_automation_toolkit/Security/Firewall/fwpolicy_create_decryptrules.py @@ -178,4 +178,4 @@ def fwpolicy_create_decryptrules(inputfile, outdir, service_dir, prefix, ct): oname[reg] = open(outfile[reg], 'a') oname[reg].write(decryptrules_str[reg]) oname[reg].close() - print(outfile[reg] + " containing TF for Firewall Policy security rules has been updated for region " + reg) + print(outfile[reg] + " containing TF for Firewall Policy Decryption Rules has been updated for region " + reg) diff --git a/cd3_automation_toolkit/Security/Firewall/fwpolicy_create_secrules.py b/cd3_automation_toolkit/Security/Firewall/fwpolicy_create_secrules.py index 33fe4a81a..da479500d 100644 --- a/cd3_automation_toolkit/Security/Firewall/fwpolicy_create_secrules.py +++ b/cd3_automation_toolkit/Security/Firewall/fwpolicy_create_secrules.py @@ -265,4 +265,4 @@ def fwpolicy_create_secrules(inputfile, outdir, service_dir, prefix, ct): oname[reg] = open(outfile[reg], 'a') oname[reg].write(secrules_str[reg]) oname[reg].close() - print(outfile[reg] + " containing TF for Firewall Policy security rules has been updated for region " + reg) + print(outfile[reg] + " containing TF for Firewall Policy Security Rules has been updated for region " + reg) diff --git a/cd3_automation_toolkit/Security/Firewall/templates/policy-decryptrules-template b/cd3_automation_toolkit/Security/Firewall/templates/policy-decryptrules-template index 2745102d0..ffdf17331 100644 --- a/cd3_automation_toolkit/Security/Firewall/templates/policy-decryptrules-template +++ b/cd3_automation_toolkit/Security/Firewall/templates/policy-decryptrules-template @@ -8,7 +8,7 @@ # network_firewall_policy_id can be the ocid or the name of the firewall Policy that needs to be attached to the Firewall # action can be NO_DECRYPT or DECRYPT # Sample import command for Firewall Policy Decryption Rules: -# terraform import "module.decryption_rules[\"<>\"].oci_network_firewall_network_firewall_policy_decryption_rule.network_firewall_policy_decryption_rule\" networkFirewallPolicies/<>/decryptionRules/<> +# terraform import "module.decryption_rules[\"<>\"].oci_network_firewall_network_firewall_policy_decryption_rule.network_firewall_policy_decryption_rule\" networkFirewallPolicies/<>/decryptionRules/<> ############################ decryption_rules = { diff --git a/cd3_automation_toolkit/Security/Firewall/templates/policy-secrules-template b/cd3_automation_toolkit/Security/Firewall/templates/policy-secrules-template index ad99cfed8..e9af9b785 100644 --- a/cd3_automation_toolkit/Security/Firewall/templates/policy-secrules-template +++ b/cd3_automation_toolkit/Security/Firewall/templates/policy-secrules-template @@ -9,7 +9,7 @@ # action can be ALLOW, DROP, REJECT, INSPECT # inspection can be INTRUSION_DETECTION, INTRUSION_PREVENTION # Sample import command for Firewall Policy Security Rule: -# terraform import "module.security_rules[\"<>\"].oci_network_firewall_network_firewall_policy_security_rule.network_firewall_policy_security_rule\" networkFirewallPolicies/<>/securityRules/<> +# terraform import "module.security_rules[\"<>\"].oci_network_firewall_network_firewall_policy_security_rule.network_firewall_policy_security_rule\" networkFirewallPolicies/<>/securityRules/<> ############################ security_rules = { diff --git a/cd3_automation_toolkit/Security/KeyVault/export_keyvaults_nonGreenField.py b/cd3_automation_toolkit/Security/KeyVault/export_keyvaults_nonGreenField.py index ae49ee252..9519b0daf 100644 --- a/cd3_automation_toolkit/Security/KeyVault/export_keyvaults_nonGreenField.py +++ b/cd3_automation_toolkit/Security/KeyVault/export_keyvaults_nonGreenField.py @@ -17,7 +17,7 @@ from oci.exceptions import TransientServiceError # Execution of the code begins here -def export_keyvaults(inputfile, outdir, service_dir, config, signer, ct, export_regions=[], export_compartments=[]): +def export_keyvaults(inputfile, outdir, service_dir, config, signer, ct, export_regions=[], export_compartments=[],export_tags=[]): global values_for_column_kms global cd3file,tf_or_tofu tf_or_tofu = ct.tf_or_tofu @@ -75,6 +75,22 @@ def export_keyvaults(inputfile, outdir, service_dir, config, signer, ct, export_ get_vault_data = kms_vault_client.get_vault(vault_id=vault.id).data key_count = 0 if vault.lifecycle_state not in ["DELETED", "PENDING_DELETION", "SCHEDULING_DELETION"]: + # Tags filter + defined_tags = get_vault_data.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + try: replicas = kms_vault_client.list_vault_replicas(vault_id=vault.id).data for replica in replicas: @@ -97,6 +113,23 @@ def export_keyvaults(inputfile, outdir, service_dir, config, signer, ct, export_ for key in keys.data: first_key = False if key.lifecycle_state not in ["DELETED", "PENDING_DELETION", "SCHEDULING_DELETION"]: + + # Tags filter + defined_tags = key.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + key_count += 1 total_keys += 1 key_tf_name = commonTools.check_tf_variable(key.display_name) diff --git a/cd3_automation_toolkit/Storage/BlockVolume/export_blockvolumes_nonGreenField.py b/cd3_automation_toolkit/Storage/BlockVolume/export_blockvolumes_nonGreenField.py index 3364325ff..5db65a51d 100644 --- a/cd3_automation_toolkit/Storage/BlockVolume/export_blockvolumes_nonGreenField.py +++ b/cd3_automation_toolkit/Storage/BlockVolume/export_blockvolumes_nonGreenField.py @@ -62,9 +62,25 @@ def volume_attachment_info(compute,ct,volume_id,export_compartments): return attachments,attachment_id, instance_name, attachment_type -def print_blockvolumes(region, BVOLS, bvol, compute, ct, values_for_column, ntk_compartment_name, display_names, ad_names,export_compartments,state): +def print_blockvolumes(region, BVOLS, bvol, compute, ct, values_for_column, ntk_compartment_name, display_names, ad_names,export_compartments,export_tags, state): volume_comp = '' for blockvols in BVOLS.data: + # Tags filter + defined_tags = blockvols.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + volume_id = blockvols.id volume_compartment_id = blockvols.compartment_id AD_name = blockvols.availability_domain @@ -198,7 +214,7 @@ def print_blockvolumes(region, BVOLS, bvol, compute, ct, values_for_column, ntk_ values_for_column = commonTools.export_extra_columns(oci_objs, col_header, sheet_dict, values_for_column) # Execution of the code begins here -def export_blockvolumes(inputfile, outdir, service_dir, config, signer, ct, export_compartments=[], export_regions=[], display_names = [], ad_names = []): +def export_blockvolumes(inputfile, outdir, service_dir, config, signer, ct, export_compartments=[], export_regions=[], export_tags=[],display_names = [], ad_names = []): global tf_import_cmd global sheet_dict global importCommands @@ -252,7 +268,7 @@ def export_blockvolumes(inputfile, outdir, service_dir, config, signer, ct, expo for ntk_compartment_name in export_compartments: BVOLS = oci.pagination.list_call_get_all_results(bvol.list_volumes,compartment_id=ct.ntk_compartment_ids[ntk_compartment_name],lifecycle_state="AVAILABLE") - print_blockvolumes(region, BVOLS, bvol, compute, ct, values_for_column, ntk_compartment_name, display_names, ad_names, export_compartments,state) + print_blockvolumes(region, BVOLS, bvol, compute, ct, values_for_column, ntk_compartment_name, display_names, ad_names, export_compartments,export_tags, state) # writing volume source into variables file var_data = {} diff --git a/cd3_automation_toolkit/Storage/FileSystem/export_fss_nonGreenField.py b/cd3_automation_toolkit/Storage/FileSystem/export_fss_nonGreenField.py index aa1994faa..640b28d6f 100644 --- a/cd3_automation_toolkit/Storage/FileSystem/export_fss_nonGreenField.py +++ b/cd3_automation_toolkit/Storage/FileSystem/export_fss_nonGreenField.py @@ -359,7 +359,7 @@ def __get_mount_info(cname, ntk_compartment_ids, compartment_id, reg, availabili # Execution of the code begins here -def export_fss(inputfile, outdir, service_dir, config1, signer1, ct, export_compartments=[], export_regions=[]): +def export_fss(inputfile, outdir, service_dir, config1, signer1, ct, export_compartments=[], export_regions=[],export_tags=[]): global tf_or_tofu tf_or_tofu = ct.tf_or_tofu tf_state_list = [tf_or_tofu, "state", "list"] diff --git a/cd3_automation_toolkit/Storage/ObjectStorage/export_terraform_oss.py b/cd3_automation_toolkit/Storage/ObjectStorage/export_terraform_oss.py index 11e9e15f4..0018fa6c6 100644 --- a/cd3_automation_toolkit/Storage/ObjectStorage/export_terraform_oss.py +++ b/cd3_automation_toolkit/Storage/ObjectStorage/export_terraform_oss.py @@ -154,7 +154,7 @@ def print_buckets(region, outdir, service_dir,state, bucket_data, values_for_col # Required Inputs- CD3 excel file, Config file, prefix AND outdir ###### # Execution of the code begins here -def export_buckets(inputfile, outdir, service_dir, config, signer, ct, export_compartments=[],export_regions=[]): +def export_buckets(inputfile, outdir, service_dir, config, signer, ct, export_compartments=[],export_regions=[],export_tags=[]): global tf_import_cmd global sheet_dict global importCommands @@ -219,6 +219,21 @@ def export_buckets(inputfile, outdir, service_dir, config, signer, ct, export_co ##buckets info## try: bucket_data = buckets_client.get_bucket(namespace_name, bucket_name, fields=['autoTiering']).data + # Tags filter + defined_tags = bucket_data.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue except Exception as e: print("Skipping Bucket "+bucket_name +" because of some issue. Check OCI console for details") bucket_data=None diff --git a/cd3_automation_toolkit/cd3FirewallValidator.py b/cd3_automation_toolkit/cd3FirewallValidator.py index 69a6f3eff..c98100a6c 100644 --- a/cd3_automation_toolkit/cd3FirewallValidator.py +++ b/cd3_automation_toolkit/cd3FirewallValidator.py @@ -869,6 +869,99 @@ def validate_FirewallPolicyDecryptionRule(filename, fwpolicy_list, fulladdreslis return False +def validate_FirewallPolicyTunnelInspectRule(filename, fwpolicy_list, fulladdreslist, ct): + fwpolicytunnelinspectrule_empty_check = False + fwpolicytunnelinspectrule_invalid_check = False + fwpolicytunnelinspectrule_check = [] + fwpolicytunnelinspectrule_nameg_length = False + fwpolicytunnelinspectrulesa_check = [] + fwpolicytunnelinspectruleda_check = [] + fwpolicytunnelinspectrulepost_check = [] + + dffwpolicytunnelinspectrule = data_frame(filename, 'Firewall-Policy-TunnelInspect') + dfcolumns = dffwpolicytunnelinspectrule.columns.values.tolist() + + dffwtunnleinspectrule = data_frame(filename, 'Firewall-Policy-TunnelInspect') + dffwtunnleinspectrule_list = dffwtunnleinspectrule['Rule Name'].astype(str) + dffwtunnleinspectrulepolicy_list = dffwtunnleinspectrule['Firewall Policy'].astype(str) + fulltunnelinspectrulelist = dffwtunnleinspectrulepolicy_list + '::' + dffwtunnleinspectrule_list + + for i in dffwpolicytunnelinspectrule.index: + region = str(dffwpolicytunnelinspectrule.loc[i, 'Region']).strip().lower() + # Encountered + if (region in commonTools.endNames): + break + if region == 'nan': + log(f'ROW {i + 3} : Empty value at column "Region".') + fwpolicytunnelinspectrule_empty_check = True + elif region not in ct.all_regions: + log(f'ROW {i + 3} : "Region" {region} is not subscribed for tenancy.') + fwpolicytunnelinspectrule_invalid_check = True + for columnname in dfcolumns: + # Column value + columnvalue = str(dffwpolicytunnelinspectrule.loc[i, columnname]).strip() + if (columnname == 'Firewall Policy'): + if columnvalue.lower() == 'nan': + log(f'ROW {i + 3} : Empty value at column Policy Name.') + fwpolicytunnelinspectrule_empty_check = True + else: + # Cross check the Policy names in Firewall Policy sheet with OCI. + fwpolicytunnelinspectrule_check.append( + compare_values(fwpolicy_list.tolist(), columnvalue, [i, 'Policy Name', 'Firewall-Policy'])) + if (columnname == 'Rule Name'): + if columnvalue.lower() == 'nan': + log(f'ROW {i + 3} : Empty value at column Rule Name.') + fwpolicytunnelinspectrule_empty_check = True + if columnvalue.lower() != 'nan': + if (len(columnvalue) > 63) or (len(columnvalue) < 2): + log(f'ROW {i + 3} : Tunnel inspection rule Name "{columnvalue}" has more alphanumeric characters than the allowed maximum limit of 63.') + fwpolicytunnelinspectrule_nameg_length = True + if (validate_names(columnvalue) == True): + log(f'ROW {i + 3} : Only alphabets, digits, - and _ are allowed in the Tunnel inspection Rule Name') + fwpolicytunnelinspectrule_invalid_check == True + if (columnname == 'Source Address'): + if columnvalue.lower() != 'nan': + sa_list = columnvalue.split(",") + for eachsa in sa_list: + fwpolicyname = str(dffwpolicytunnelinspectrule.loc[i, 'Firewall Policy']).strip() + finalsalist = fwpolicyname + '::' + eachsa + fwpolicytunnelinspectrulesa_check.append(compare_values(fulladdreslist.tolist(), finalsalist,[i, 'Source Address','Firewall-Policy-Address','Address list'])) + if (columnname == 'Destination Address'): + if columnvalue.lower() != 'nan': + da_list = columnvalue.split(",") + for eachda in da_list: + fwpolicyname = str(dffwpolicytunnelinspectrule.loc[i, 'Firewall Policy']).strip() + finaldalist = fwpolicyname + '::' + eachda + fwpolicytunnelinspectruleda_check.append(compare_values(fulladdreslist.tolist(), finaldalist,[i, 'Destination Address','Firewall-Policy-Address','Address list'])) + if (columnname == 'Action'): + if (columnvalue not in ['INSPECT', 'INSPECT_AND_CAPTURE_LOG', 'Inspect', 'Inspect_And_Capture_Log', 'inspect', 'inspect_and_capture_log','Inspect_and_capture_log']): + log(f'ROW {i + 3} : Action "{columnvalue}" is not a valid option, it should be either INSPECT/INSPECT_AND_CAPTURE_LOG.') + fwpolicytunnelinspectrule_invalid_check = True + + if (columnname == 'Position'): + if columnvalue.lower() != 'nan': + post = columnvalue.split('::') + if len(post) != 2: + log(f'ROW {i + 3} : Position value in "{post}" does not have all/correct required details') + fwpolicytunnelinspectrule_invalid_check = True + else: + if (post[0] not in ['before_rule', 'after_rule']): + log(f'ROW {i + 3} : Position condition in "{post[0]}" is not a valid option, it should be either before_rule/after_rule') + if post[1].lower() != 'nan': + fwpolicyname = str(dffwpolicytunnelinspectrule.loc[i, 'Firewall Policy']).strip() + finalrulepost = fwpolicyname + '::' + post[1] + fwpolicytunnelinspectrulepost_check.append( + compare_values(fulltunnelinspectrulelist.tolist(), finalrulepost,[i, 'Position', 'Firewall-Policy-TunnelInspect', 'Rule name'])) + + if any([fwpolicytunnelinspectrule_empty_check, fwpolicytunnelinspectrule_invalid_check, + fwpolicytunnelinspectrule_nameg_length]) or any(fwpolicytunnelinspectrule_check) or any( + fwpolicytunnelinspectrulesa_check) or any(fwpolicytunnelinspectruleda_check) or any( + fwpolicytunnelinspectrulepost_check): + print("Null or Wrong value Check failed!!") + return True + else: + return False + def validate_FirewallPolicySecurityRule(filename, fwpolicy_list, fulladdreslist, fullservicelist, fullappslist, fullurlslist,ct): fwpolicysecurityrule_empty_check = False fwpolicysecurityrule_invalid_check = False @@ -1140,9 +1233,10 @@ def validate_firewall_cd3(filename, var_file, prefix, outdir, config,signer,ct): log("\n============================= Verifying Firewall-Policy-SecRule Tab ==========================================\n") print("\nProcessing Firewall-Policy-Secrules Tab..") fw_policysecurityrule_check = validate_FirewallPolicySecurityRule(filename, fwpolicy_list, fulladdreslist, fullservicelist, fullappslist, fullurlslist,ct) - + print("\nProcessing Firewall-Policy-TunnelInspect Tab..") + fw_policytunnelinspect_check = validate_FirewallPolicyTunnelInspectRule(filename, fwpolicy_list, fulladdreslist, ct) # Prints the final result; once the validation is complete - if any([Firewall_check, fw_policy_check, fw_policyapp_check, fw_policyurl_check, fw_policyservice_check, fw_policyaddress_check, fw_policysecrets_check, fw_policydecryption_check, fw_policydecryptionrule_check, fw_policysecurityrule_check]): + if any([Firewall_check, fw_policy_check, fw_policyapp_check, fw_policyurl_check, fw_policyservice_check, fw_policyaddress_check, fw_policysecrets_check, fw_policydecryption_check, fw_policydecryptionrule_check, fw_policysecurityrule_check, fw_policytunnelinspect_check]): log("=======") log("Summary:") log("=======") diff --git a/cd3_automation_toolkit/cd3Validator.py b/cd3_automation_toolkit/cd3Validator.py index f8e83aada..d175429fb 100644 --- a/cd3_automation_toolkit/cd3Validator.py +++ b/cd3_automation_toolkit/cd3Validator.py @@ -239,6 +239,7 @@ def validate_subnets(filename, comp_ids, vcnobj): pass else: try: + comp_name = commonTools.check_tf_variable(comp_name) comp_id = comp_ids[comp_name] except KeyError: log(f'ROW {i+3} : Compartment {comp_name} does not exist in OCI.') @@ -416,6 +417,7 @@ def validate_vcns(filename, comp_ids, vcnobj):# config): # ,vcn_cidrs,vcn_compa pass else: try: + comp_name = commonTools.check_tf_variable(comp_name) comp_id = comp_ids[comp_name] except KeyError: log(f'ROW {i+3} : Compartment {comp_name} does not exist in OCI.') @@ -570,6 +572,7 @@ def validate_dhcp(filename, comp_ids, vcnobj): pass else: try: + comp_name = commonTools.check_tf_variable(comp_name) comp_id = comp_ids[comp_name] except KeyError: log(f'ROW {i+3} : Compartment {comp_name} does not exist in OCI.') @@ -639,6 +642,7 @@ def validate_drgv2(filename, comp_ids, vcnobj): drgv2_empty_check = True else: try: + comp_name = commonTools.check_tf_variable(comp_name) comp_id = comp_ids[comp_name] except KeyError: log(f'ROW {i+3} : Compartment {comp_name} does not exist in OCI.') @@ -734,6 +738,7 @@ def validate_dns(filename,comp_ids): mandat_val_check = True else: try: + comp_name = commonTools.check_tf_variable(comp_name) comp_id = comp_ids[comp_name] except KeyError: log(f'ROW {i + 3} : Compartment {comp_name} does not exist in OCI.') @@ -783,6 +788,7 @@ def validate_dns(filename,comp_ids): mandat_val_check = True else: try: + comp_name = commonTools.check_tf_variable(comp_name) comp_id = comp_ids[comp_name] except KeyError: log(f'ROW {i + 3} : Compartment {comp_name} doesnot exist in OCI.') @@ -813,6 +819,7 @@ def validate_dns(filename,comp_ids): log(f'ROW {i+3} : Incorrect format for Associated Private Views') mandat_val_check = True try: + v_comp = commonTools.check_tf_variable(v_comp) comp_id = comp_ids[v_comp] except KeyError: log(f'ROW {i + 3} : Compartment {v_comp} does not exist in OCI.') @@ -857,6 +864,7 @@ def validate_instances(filename,comp_ids,subnetobj,vcn_subnet_list,vcn_nsg_list) inst_empty_check = True else: try: + comp_name=commonTools.check_tf_variable(comp_name) comp_id = comp_ids[comp_name] except KeyError: log(f'ROW {i+3} : Compartment {comp_name} does not exist in OCI.') @@ -975,6 +983,7 @@ def validate_blockvols(filename,comp_ids): bvs_empty_check = True else: try: + comp_name = commonTools.check_tf_variable(comp_name) comp_id = comp_ids[comp_name] except KeyError: log(f'ROW {i+3} : Compartment {comp_name} doesnot exist in OCI.') @@ -1130,6 +1139,7 @@ def validate_fss(filename,comp_ids,subnetobj,vcn_subnet_list,vcn_nsg_list): # Check for invalid Compartment Name if comp_name.lower()!='nan': try: + comp_name = commonTools.check_tf_variable(comp_name) comp_id = comp_ids[comp_name] except KeyError: log(f'ROW {i+3} : Compartment {comp_name} doesnot exist in OCI.') @@ -1244,6 +1254,7 @@ def validate_policies(filename,comp_ids): pass else: try: + comp_name = commonTools.check_tf_variable(comp_name) comp_id = comp_ids[comp_name] except KeyError: log(f'ROW {i+3} : Compartment {comp_name} doesnot exist in OCI.') @@ -1342,6 +1353,7 @@ def validate_tags(filename,comp_ids): tag_empty_check = True else: try: + comp_name = commonTools.check_tf_variable(comp_name) comp_id = comp_ids[comp_name] except KeyError: log(f'ROW {i + 3} : Compartment {comp_name} doesnot exist in OCI.') @@ -1500,6 +1512,7 @@ def validate_buckets(filename, comp_ids): buckets_empty_check = True else: try: + comp_name = commonTools.check_tf_variable(comp_name) comp_id = comp_ids[comp_name] except KeyError: log(f'ROW {i + 3} : Compartment {comp_name} does not exist in OCI.') @@ -1766,6 +1779,7 @@ def validate_kms(filename,comp_ids): pass else: try: + vault_comp_name = commonTools.check_tf_variable(vault_comp_name) comp_id = comp_ids[vault_compartment_name] except KeyError: log(f'ROW {i+3} : Compartment {vault_compartment_name} does not exist in OCI.') @@ -1806,6 +1820,7 @@ def validate_kms(filename,comp_ids): # Check Key Compartment name if key_compartment_name != 'nan' or key_compartment_name != '': try: + key_compartment_name = commonTools.check_tf_variable(key_compartment_name) comp_id = comp_ids[key_compartment_name] except KeyError: log(f'ROW {i + 3} : Compartment {key_compartment_name} does not exist in OCI.') diff --git a/cd3_automation_toolkit/commonTools.py b/cd3_automation_toolkit/commonTools.py index 340298371..c48263f7a 100644 --- a/cd3_automation_toolkit/commonTools.py +++ b/cd3_automation_toolkit/commonTools.py @@ -67,6 +67,7 @@ def __init__(self): self.identity_domain_enabled = False self.reg_filter = None self.comp_filter = None + self.tag_filter = None self.vizoci_comp_filter = None self.default_dns = None self.generate_graphs = None @@ -148,6 +149,8 @@ def get_export_filters(self,export_filters): if 'comp_filter' in i: self.comp_filter = (i.split("=")[1])[2:][:-2] self.comp_filter = self.comp_filter if self.comp_filter else "null" + if 'tag_filter' in i: + self.tag_filter = (i.split("=",1)[1])[2:][:-2] if 'vizoci_comp_filter' in i: self.vizoci_comp_filter = (i.split("=")[1])[2:][:-2] diff --git a/cd3_automation_toolkit/example/CD3-Blank-template.xlsx b/cd3_automation_toolkit/example/CD3-Blank-template.xlsx index f8d1120e5cf42bb75981d24ecb7eae3b3f72a8cd..0c86f6f2c5254c43118855ea74f679ab25658852 100644 GIT binary patch delta 5785 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 H8pVGAmTj&d delta 5762 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

=cD($a}Ndp++Kr|!`#ijp6 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

}DU$RI1nzMODc$Y6aAwl$<3sgFdCs|*LTI)yW| zl*IS%EeJSkWl{w6(O;r8iR0Oh(X%mOyALI(D5Rg2DJQiqNO;!eI?cZ6#m*3IWmA{s zXHimf4a^V|#Y-(HOC}(T^wDQyvYMMv84)bY(s^xMxER17l;ZEr&Zjks%u(KwRrAKz zMO%$trcK6I=BEs@OsLE=nL!yavrMs!walIjv5ZsT8k|17K3pqGJ#szV#S=>mOB72S z1$zbWinbv34n0R6A+9mm)sLQWodzh&?ZCe^k{un-7v*A43BC*!he?cj#-+VW9-v}_ za<7nR&Au*ndygMoBCnuNA2q{7&o3KZy1p`pHHFu}{a-Vpqx#oe(EVZT4P-Y^Ic_@;v1eu1&IVjZo#0WAy4Y zr+Z4*1{Unk$bwKx2|sWvR!QL|`zt!#wL*-~RFZ#bt|LInZxWKZD1>E_&<5&D?hA|nLr5NMs|r>ePfuTNY$ zD9Z+(aa;=|I}^CT!;jap?&O`@F6n(OENSDP-tBHM(Z4*%$GB-x`H`nVLbyqbprNq& zRlZ(4grTqf)pm30$0YpK!N<&gQ{XlE+hypD`z+@pP7${2J;pebR97n+6e)2VcIw83O?>687yB@L@W{bl?I3@tZMs z%#*S=+Z;k)SaM^Muapwmi(&T;9kM>3Bx92umA-NnX*d=YwX`J(G_O8*OqwAs0 zB(=%HaH3|`y+CSRJljz+Yo2AX^W&24b-QTyL(~yX?AdhFZ?TJ4>(URG$HnD2$u9o; zD;0|KKmF~a=fD~vja=7i1wU3tT}#~fd=0st>F^kuS`|<`;@*YBD;O%!<)doBIx_tz za745lj;`RRfTEzJP!#yAJhm;Jd-esJ(~0GAzF1jrE`=zwu_fcnm-UB?vu5PM_ICc0 z)-Ui0c=JcnL>%?wdB;MchFu57Unyp);8vvJ`6wj1fZN@NPqmxK@vJIA=GA^f5z2aQ zx(eAcJrR4>t&$uUFQ9>V5K*+*cp}l_m&=gg(Jt(w@71xNMUdIgd1nh--W7h5QZ+2q zDz%?+EoSn~xVE%24adoNGEA(D$_T$tDu5P8sEllh!ib{%WEny9GkUDdC>>v0F*o+X ziiexuBG@3ONKz{hYRsTyHK80#3t4r^Cv&|Zi)VQL8G)-!!5o9}8^l*EX!T{>B_Y{v z*W0(1KAPsW>hBAU_@3Y7)EP3kzeU*)jr$---{&^P4asamSj3NwNmLi0F){6BIOa}w zbMrS&#CzfSn=Z}V%a7ME=k|?>c`eX9wh++XJAea&W$0;P$3rUwc_sSAfet)zkXTW#dyX*)^2zqRd1ols16)0$~XOpn*Gh6kMQjlwU9D_ z8#%4uxV!OB2?;730#aj}9gk5nB?ep?@NL^J2XKpQB!s;Hz8mqP7qel^Su(RXXB;To zul;i9=rqPhXX3dWsTB6Fyd|=?fB9@4cS!uP?eO5T5>)U0KfJwXSX4`tE^Ld62~ZG_ z43Y#9RC1OKN>D&Wq6i8Il5^T30+JgO|<`U}jC|$oehz zvp3n6;#i>gBkBC4%mRwsw-@UtMxT$cy)kFFyV!8!=I!Uq8otESKQzO-Ms2BX`ze~Z zgs6)iV}I6g)9X{gQ?z~Pxv#cw>77op|A}9YIXpa4Xt`*<`dji>&87E`Xzh#j*zUM6 z6O&L7Q=FwBQFy8NQqi~mWxX%QOAg;pFTr25zclkrl(vVYuU&A8K2J4y;&Z#roJEpM zblRUOjyu}~jRtzRw8@Jau7^s#KXS!5#7BI{&m@(IJrF3Z`p-bmuUR*s5IG-NCq{aExr0R!}r1D34X~( z_*uD0x7k8yLIUJn@w$#Z$XFhpPfOm;T=84dE$LXei{kN_%I~BCe=*69L4^Qo?iPoLrk)G#PX5I zJcs_O;MdU(p~<@my={Y*0c$ne7o6QT{**Slfj4IcZ`&A&_4+rj#RQGM zqTbZq%oZ+l?WZnt6J_Y%yu4gi3T=_l6|K&jzGt2kPx$p-Aqm}<4lzoXHukR%Z-}^m8$U0&&iCJxi#pO zWN6xBrpxk)-mhP{S*Ey=n)DOlD{wWrk)FoLkfT^3Zola7JA-*^i#@S#vbqu^eE1XI zqvbEj5?6fYQpU*C%d3*G4KgV->enSjwswAzQ8nbz80%7_Ku2{SQVM;le;aOSghiUoNsU zZI?e}I@{`iCmR}Zj$@Ds%O08)B7eUlO1iPZ+r?a|F5><~*SKJ0thR<0r~P%>tPEAi za-u;;s6RALtHNOBS^M<}2Enz4@zu2fu0#2c&!bchpR{ihz-WTk39>@S>xBGHN|eK4 zNR>+N%(KCJam$BfizVr`uiwcTTbej=JZ?z)n=-`^lSQn~3Hy}Ixm&7fpRhfm5von~ zL7F|Ku1@am1ax|IbhBm9=G4&UcAb_^$=1U9$|Kj6&SD)MS0@_1r#0j%P+5ulrl{M_ zOb6a)&YjgX+E}sOMV0lf#pNx#(^}BtJ&4FbrR}1)Qe}W|Wbfp|tyoM8B%=MfwD<=d zkpo7>;`Zj+`|h8AsE#J0&xJfxmAs)q!3HIKT+lOG&9`2y(rULCZYpEClNiyC)>M_7 zRHzizQCTXYo)RMO;P)%;bt~$O(dsjKmsw&uwsikv7p+va7dQ00uNrgJ<7$9I0vV)W zd@MEO0=F?^KltGLG{ajDk3D^K>&Y>lAMff<7llX^Qsk&zYB;U>BQxi@{Rj5f6p3OB zU8hxJ9c@l`)n1Ng>5E`Y&9Z%rX1{51EH&%2EV^7>#>^`)lhkz%GV?NdxA}9lOO(C+ z?i;C5H9}&^3-YHG=-HS&N6?2=CE4W(O!(<9CweZUD@bqWUAmJ;L?@{>zx_lw&2Qth z>ZQjPFU-uD^y~%Nm@GvgfATgt z<7JOT^yyHklkz80>3I`9a?pgWQpfH|TbVbqHJ;<}$2&pKz!Xt+Ij9J{c>Z5+{jp_2 z*yv<JbM1iN#m4p0Kg&ak6+xF1r42>C%JUkyzA)&6Q6~lPpV2$%AcB`7ljNhWz@~F zs?N?6ge_V2iOt5Nc ze^pjzmHqy$PFX$JuPaD3MWb>M>h>b^Y1bs^xthdE@O)(GjWa5RE68B%ItSsc0gta< zV%pU50fKiWZ_Es43XBe76xL1c$o^25Wq7Z3Oop+&)#&t{97vtH$U*2TFca#iO~Gi%f75aofNrMfYu`KC3)~r@rFDb8{?nE=jvT*cYL&=s&7c%8;?W98Jwh@xx~mzD50!AvZCo{narEYg1(n9b?vLRZC zk^*Te3vXh0dx&!@y}Wvj_{W=eFT-`%RWs1pm9BOkCq7@aNNG|PzOk$NU4aRh`p-(? zE1#h7u%_^HZ1i4<#&N;!8HNuf;r7Hzni#4c@?@Xl=Y|!HPe?Xo6J&N}JV>((Z+{N? z;Om6Vf{A# z8@40K=@qw&ds}b&8Laks3|LPJ8kON&(lgVF+s6?Yz9$I+b%Za zgHNa`?W!fem#ikx1#My-yZ9?>rw3S1-)pg*Ds*xANx8M{@1s=gwsBXd-yXmD`RfNx zU6Ye4MIyIue-$Z!+C1GGE3YT+2&!za-XJB(eY|srT}Po%_0NqJrl+=->9i?7e$5l2 z-K7h+rO3#+FK`kad+P8EPfVe7%+2_KGjTfdXU_yTx3QlbI{x8%jm)Uk-Gm2+!nv*Z zA2d8xcr?XSN(#Y zIo3aYf8i1{pSs$uEBCUxP+Sw03nunvHDOAF7n2e$CU6`Rk(En3F8`8uQAVO7FtdHi zB=f^;(4R-ICF-j&31PBtb&h9BoFzt6G2BrY;zz$Qmp(qVsQ)oy`%(M}X%=IRn}>-V zP1z0)ozRsxWcCeZjdMC?r_It8E1ti`hT=MWQhP0utrdJ_$>USF5Z&NF(H(|bfz3mO9p5Woa1uW1^C_yySUvGW^2s`{5RyBQ~;-xqUlD##H_MOJ*&aQ^f2lEk8$^GO>Ao1H@TN;XaUp-X0CIh_b#Y7uGrH2igf6xAYx#- z`S6-YEw4w{kr&agB3n$JJYlZ$p}Mj3bmZjEHL|{7r;sZi93(9Cit^6QCO5o~-+)N6 zCdS+k=bLh&zMzgOQf7#(=U=&s3O&;YwxW4 z$G+`F`h9-vh0amQIx%GvJvC0p;z=Q8RWG{_MTG&`MXmWim7)?)DRd|V-M9W=s;%~u zNg)qy`#R_CCEXUjvI~0hA0j^rq;k!C;q07^gVybe9g{NG?Y?`dcqNW%-t{X=RVbPm z9~NZwNj?$0(#7-Lo%&bUN=y9(c7NOZ(ne>OC{sIp`W~OfxYZeji20wsZ&-hUgt6tA zcQ&W+`YMB?E#nwbuerT`iyfmw_sF2oxzLE@8!=xbTgwzQZ<2<7aE=u7xc#e%%g7=N z&B+1TzSRw7`}9gXS4XX{=-Z>SdY?G%zvp6M#&5oLql+a_I89;6qVZ3ajP*msk}vO3 z_6m3}s9Z=1zx@&T6-%oB*awpwY57VdwbHy$Wr!)qXWv{X6Mt1!a8R zaUVllPHIzsb|$)~{!W>gJjd=nDKeAnmvt9($Xf1yGdvq9qfNG8dc?Dv&rQ=`VWLe_ zzKeHaZXklEKg@RMjiXbGQlaaZlAtp;XNTT9&kRy_eb#nK#vDo3<*&K|$K?i>zrL@# za=J|Z<4Vw7C+0gRwc?2FB`@o1rPesGI(cHbQA9x11ZsnKJ(bndeGrOfBT z8kNWLGCW0lD)B_Vwha}GFIUZW`-N|;-}2ScsG#|zkEiv!f_8QgMLTF>rEQDdS$HbL zU(hy`M|`Qklh^FQDdFFhq9R`yMJ@;VEB8~BeICE;N0vXB&SlY5^dC2uEf`;G{9Y3~ zK?9b&{?EHFyQF*>mYKVqQ$S#l&|_ldQ{YWtrjPGZ;Dhh@BBjczh4pO~d%%6nEA6M~Dh@X0;XsG`>*SNro zw5NiSFT;ywdXScO;A{+8jZCcJg^yQ5FlewpW`G}M%HXxz8P-NcLNRo5_TT$p;+y`6 zKiNg)`v{AUKCU*Y4c?BQ6P?z)PVy!2== z@k-T;`dinjW%F2>3YWj0KmA&gCOV{&ed3C#Rg&fl)ziGKRzj>wx!01cJ}a9=+vbum zwBF&mp30&$lXQb6(kJL{#SJS>PN@Fp$AME7>;WkVU^$TGk z_4MOAOGQjRypl9Cwc+_Fq4ewI=b)ow3X(Pqd6?lhi#hbV?_3Ogf9^K+}S4`wFA~y6j;C((4b;2&E@w-lU z-MJI@$S=;_l1-@5&5AX^|00f(IefB?xWeQU{-HzT#wFzSfyYg?UJA-Xyfsb!b#x^bdA z%_LZrJ4TUgz2Vj$r;Ci_en;CzxS~fe&mx0npef9kj>wOBWhS(3>BgS$TS#sP+sR!5Dlfb(=lAbF)Jfu(z#e%!^U+!gOVL;L zB=q}ArNIw(r8Uydd^krEdWGymSU@PRc*M*hHku?aMZ2!TD(M8vgTg$JS9&oWL0JraMY2wF<{5c;6y*~ce1CLTy-|?(AxaqHq{6z$s*phKSYF? zF<~alXHT5!eKN2K#YC_^Y?mXu+zyobE6JTL2w+Fy{jn?}yVJhRd5EE~e=Xfy|5 z^0`5tb@7~-!oG&PgO2a!Uz*`$TlRvG1`hFO?O80>9!>xjg z@-ofw@{{i6Wi31gxkPz<(rFHBbNR*A0^9_KK~^ywo<6+3G17Ltgr~OGXXY&WN?cYa zdp`!#?rzlVy3UWi`Zzf0nZLU-8Ec`kyQ2SAWjBS+dAr}De|sT#4B7(UX)uTN=x^Fp z>((2!U-1C%dym}R3U*(HCOvm)s_&(XZ*A_1x-6}(L_#sOQ{`b`=W?;&-Q_L3M#!NM zJFv`Zp;EKE(sHY7e!Zn!%z0~kg4Aq*@#Th{=KM{me(+E(zFfJ}91LwriO&#imxwR_*lAARlq#Pg z5_Qw_Sio)-yV9G;a~n>*nCCtw?wDaRRuQ8eI8_?2W1;yNJwd$joBqe+H%1S= zH^ogZ+LcjHkldcZ>c;Tp-W)I7w2Cwx_R{al`M%vM87UvDX9S15pFilknWTI`;hqLIKd6BhlX1iJ^?R5PHmuR8pY|~S_-<%q!c?cuFj~d|RHmoct zDhfw`g-Tai3f@|XpUsVl?{CQeam?8rFS^guB2JUf;vAQGTp4k3RGV(!&fuo$pc?;Z zmfMel^VvBK!CS8UljP>@`b*|3NnU*7*h_f1c1yC$xiltAlWsP6y}L5)k8IfcyD*MR z!)4jc$=Ca}jF-Y!D~~SoUyk8|9*IX-{c7-Eeg(a;FBi=w-6Ym~7^C81_oF)6Bb!ql*Slp!iZ@I! z9Twf{LnOB`9doNQn;QhSPTS^be&qSh8~hm)KYsX&_iW9IeP{S>DC>4GG!lPr1H>(t^YcaUY&j7Op;j~?mt)5#?8)v?BcMht;n05lHE5q z$g(h56b~V`eo3$sK!;g0Ibm;GTlxPk+pX(edR>u;KFU8r;v{zG%2=~b(%l6#er+qQrC-)PS$jFd(K!Oy*h{} zAvcm@bSv4?^?a$<8~sKv5wUI4XAK#-v5z)SSm{Rkt5HZa|?+3!3e6c@U=F zXML{^FClSuwY#z?lrSKarN1p@a`^L9#>}Y+bA{f|iN!Sb_t_`ReP%8u7LNsItP&)J z&f5Qe%+UKewfMDdekI?jiP;UYU`VI7L`%(~iFkNEpi|#PHnEu3Zq1f|+cBK5n1gXo z-(Yf9zNlM2(#zIC5$YA~&BjYNk8qG{?IrByzR*hp)UhL$4#H;H=-HS%0i~2p$|IJr zeju=8f3CH6sfH5*JCC`zxr3+hqHcMxSdSctqrI}Yjq{UM%o%%UGJaeO0WgCki-eO_ zW~KLx-sp{nHQ?=MpoG#O7T7XJVzF9;1M6SW2#CcT+-q@(5ZqX@wCY9+W(HVQgsQ10c+Q*bPJ1AD1UJiXO&PnLfuN@6c z&7bbWjpMHr{tyx-B({{|vBXog1U7iY9UhI6`qvOZFlv+Tx72`K8tP>F=<1?UWTk z!mhe4zX;?zd=afoDs&df%+fnCIa7XH5{E6jAUD||^OvKL`8eOKW6W{9ISnsE>V`mX%!9+e_OFxv#zP}jl~bCri!njDvA`2VRfgKX193BX)*2&bl08E zOq4KSOHe07Tk?E*TWQ47$Crc=Gh05$$j8?H!!D5K)Fo6>HfkX?AApDnm_(wTKaET1XG`+xo-6 zrwEv~y^XiM%@>2le8IzxxAD%g#2py;niBxtRgRhv2P%^`JkRh{p8+%NW5y`_M3l^? z$TZ!Lnw4X!9#Xa*c%dHgGft3Qr9**F3qGOzalch3U{I(6r67Sb$R$93^R1i_>O>~g@|kfU#456 zmMDB2AAI1QPrCm&{;5Sz5M3x_qtG^Tyhg$;$UVb$*kNl$!99as{9;!u`Pnc9-l7Ji)#!8mE$ZnG+A}%0mkQr7;sj=r=d6D_}mMJg!?T}LSjU+ zNE8t5_zs0At zBlxDvo}@?$O#;9FN-6l*S55#Vj0Dm(hJC&Owj9+bTB%oAF$`X*Z(5Od&k&n8RB4CC zw#-z(PVPmlE+t0pWk&q&a^mFeTQ88oYF3w8BlkMiMNeL_v21t~UGiF@U+bTm{8r&a zxfMISBxVY7ev@STfeeV1I2Vt&oVZ2^Trux9K<>a8aLyw0O`gA+tacyBY{CUMzVyHq zI%$l1c;B?3@b0e*r0Xw zmaf45L8m=@fM&RRz!U%%salAFkhG8mong~TKDK5YUk(;U5}OQ`JsI~R8H`)D>QuWW zA}cO{#7M&3GQizZ8rcU+y*=MhGO6$$Bc7Zgu4A|T=1}NQ#XGF3I*+4D_g5e?CA{7sFdUlWK16=KZ3%O<2+enk$ z2a60M9>4_}R13j{^_v_uYH`?5@93NIQ)f0Ru0mAwn?hgk%ZSdb2tthXn>W5FZ}yW< z+U(rDK7wDfRr+k&AGO4fcR^gBdhQrC93wp=Fi`+mN+bC&va@u4jVQ=?7uSu3cPh@# zAgyJVMBlImn@bmj|?a0|}GD0J1k&YPKVH9G?nF3Tr4qM*KJK zz}cj_jIDsz#rpK5n_}c2!D+YcNpMi{umso0{xYOS5QYC%g3FO?`+?Mcj{Og$2G6Yr z;2dJWyf#EJU_Ke52%)OKNP5J7H}AkF8R(n;orqwar87hL0Ig%E!h64q{1uCpmWR=s zcKbfTuD1~J?FB0DfG54(!oNf{?XUhX{Qkf6787EKVwQpn&)rfIF!h5Q7pq@QYRjG^ zNUXBlW8&$eaIsohI=4OW0*RF?Z4_=8?mz-EmT_rpBV0&mgBSyKb8eC;)IuiPVb5Bk3#fTBBq-UI#h zX!Eb5aPh-<;ZjjKwD8eiTt%st*+}A^$I|4g| z`Jjtp!MN+9j!Dc`&%IAa4gdj%u3+wGb1QEExkw8@Z#IEAaN}xi*9iny7A^y+S#f}{ z5s5_YHe&CIC^xKrRR z9a-+Wm=pt)(P=;uJPEr+iRpicVmbo5g?ac8m3^alLAa<~74DQhPvhxevwUKsMPPKn`-B^)PUH?jQM>xQC!$8$U#`5smwc1o!Rij5ZV-rT3L$^B+7$MIJe- zdf84bHqR8L06wWTlsaEuM$apk=z)0x6e|LQoD#g|`5p`F7Y}(xzw1`dLU1@W4 zT&clKL1q~7*Vy^VVR3P2V-woinMmIigTO#}{%~at6uUD6^|@iU7TWsLMuubSz;1LF z!&@7C%_~i_9TI7~V@oSzyUxX;c{`&k<$YyN+Y6UgF}szVMCs)_;~0#%^V*`^oZilO z2Syw_^CuX5@~2#SI%eB;=Fgv8x{h@RuBBBYcX#6s%-94wU98T~VH5ES5l=QA9VkE&Fb`>UFPOLoA-?9n)=Ei2mg@Ce22&G(*0b=K5Q?3x~zxaHHKfX zwJr|1V71I+XSeSQ$Lx%(T*eMQDt6Z>i#3?NGq@dC>RyJOq1n_&n@%VbSsP$HZLih_ z>JVB-Ur=T(%={t2`4CN2Ol?@KOrMgV=qOsB4IP;+lh7J%s}jx;jZ~Q0Jh2H#;E#y00Y)2rylT2l7j;%J(<&TiHw*Hu2p&AWpnl@EOKEttiw zp3W<9HC@;huYZ9_SK9bB1Sb4{Wc}ebdaQnb zmlzE`)D#(9p)%Lh&Zw%&fgHd7;3+m)c+pY$hHUQlP;ZXo*D0RlD&agw@cX}cp+J*` zpvz^P6iv{1mJ($H&5~hl*UhiC*aX2rJIb~pnz5lupz(vpXKxES0dl(JDiYn4tCz(r zIm_Is1b4kv9HXmq*1r_4U)kGn=H{xigv%Q;700*G=xP;q+33mFDSbu%ON~|ebI-=w z9{7KRwTnCS2reEbRh!lJ=U31X*(v8=c(g}}{-i&hI6BRSuTRfwq#}A8FBN*6z0{pt zBfK5=Xeys=hTPfB^&kwJ>oii!w7qRRUzJZ*l1z}s8;Npyp~rJ6HzWmzbM_yrZ!*Qc80ZC-|Q1#AlEDLIuII;T(MPwX`6 zQKo0VX7Bk;YTmXRt@3TkEa?>gs#mw|voVsv=ny5g%I2wjJ%!4^&x3qQ0~0q5EDG4H zV13@m-ofM%eE{t)<1|tJ#F3`*-#unYXZY=3b}v64BeBYUE!*>((Hy$Lz3e%LKjgxAgVlVRB!A*~6YG$m7F$(d^bnuu;D&V1w8_aPqHhk{VH!QZIn3M0 zVpQMy{kt!_rkf6ngY zGrz&_t;?$V)yiNPDp2xwEJ9CH=TDpkTifKd22r`xJT3aRA-!=aTmcLDS4J6#G5xG5DMzFRSU0dJjMPmq$ zGF`K=*T=t~d`Dz=b@)l*MSKcM&W4_qOVjlJ*66qn$QR6PQ)YT{)JcG-j8Yj6mUEmQYlrwK`#Md=^C*=;x>#p3q{;eqo7WO%6%hD}j2r?+*0O8|(BcLD<{&0N!&ooN%GjV=C zUfQYNSAkB=S>dSv&{@)y2?FXIy=RV73FOKiFpx_BnTB?uNCz<-@JCM^*9?$wt2T_% z?77Gr>42znk<7rs^=OYXXw&$5J-Jg@xK;LWQbJO$=2n%h~(Q6X3 zZR|1I_}4&nTBC*MJWFBe3G@dM;C(xVhFi!bfB2s*w-mBizL$H=+bP@ zp4XnI;V6tW5?bGbb5XV7@t(O#8Qpd(<&H?~aftDW1Acs;;8{D(swLlf zhi!W}!^BPNBxd*Bfn$z?8j-!>+U}-V)n*}%W5Ch`v>`%k2!O*mx<`z>o2Mau;m2WB zkP|Bep(={KKgB>*f#DG~HHTax#Ff!kh`7%X>`td1ynrK+6mUi>2UjldNRtSeL@G9)~Hz@zSDa*IFBN-oxp-sxC?!t?<^r&ytN4; zNy3Kjl;J6Y^a^#r87-Wasw9{zZm4q@PIr(y=_G~t+-!ZsU_bvQu49+omUT{9#*{jsoh=}VbIQL-= zar7X&2txnoD*sP4puMpCM_m8+M$~}s*KUJisRjha?!c5x+fJ36MS| zT_?eZ6VbJwWGRJflaa)^%ZL$kMNuAuqu2Qx!{CZKkCApoo%{b~;0$CBP;!yjfqyHn zSGU{RqjAUCn}|ljEaWt!P;2XyfLBRf7^VluUD{q^R~Kf19$Q~;R9RzL>kNgMuc0*v@4nE z-g!9+b`bLCg%ka+$ny_*Uqp_f=ve&DeV|Tg9nrmmYD~g@MFbN7ftNctSYQC*26QG` z!+TA*l16esr+lBnx5e(!G=>O_YYy8&|CvK@-E`Pv9x2T|#E%ak;39ye$bK*&xHges z{f|}tw;F^DW(e6hCb&0x=E4$zb%rPPUSU{gV6J8-t1h7&=}u4RKW6n6yA8WGu} zk&_kX30{h8b%LPeksH+md|1St95{brp8lx;{hzDsX*hw4wEgRvcwrkj3~84 zr;G0{OtfJf=*nCjH_H#@vv{ID96srNLY%Mo>Y+o~7|enK_#2jGFVuBBNGqEu-|EHg zNdxGaW04CsnVzD8bZ+e<$HY@5ZVqvIYfF<(>{^Tj%I?dtxb< z8mG#4wwBWAO0X+GUFNnHgLmDgFb;Z(Tz%lped#+p*q!wLrkd?twz$}xv6b}Q^=`S{ z^*@+2IixN9TiCv_`PEumAl-N;9>?$R8mJ-75P-2130wp%VE3eIB zyIki2R3yFQ>bv!a*s0td+ndy%9-HIUSEeEn>$7A>YrZydoONhshtA!mOO$hU)_+D! z$L*JB5*t2~R@hbr)0)DD>uWoecp~(;{CBY<-)B`Sh?m@6+{u5BJ^%jK)8KfOf#x=~ zHMW9QYo->XiyFOGt88NvLd2sdI9)yNOlayoyhHixp2q9h@ea%R3Dy4Vx4|DYT(?aQ zf$(|qO#<^LT}WoO+eOr}=$<_mZTq&F>4)tsjAHAi8yic(Zp1>)J7cl2yBiqHQGe7R zsuwfnkGc=7RbkgnNlUkiTp$5KX3r(ahrZepRsdh6P1{t8w?h3FDZ zc>o1hLA`-@kY4pDcR>J;6Dyw!s|l8jcPlZ5b$)eolNqv^R5ClP(!}jJz;1R-rAZC` zd9tZVZN1?h+e2Hu(J=}UOHw|Mv9S~IPiPDp+YknV+t}Cy{L^J@tP}p}G&c4f{2VRK zzUJV6-o3T1XQecJx(s;=d~|!%{A}gNi#87WHV%lK`Jd#qozKbJ6pl+hmmdm{J(}gL zcOZW>OLmpo|C$5&XfZ!5Q~pqTTMWsZPLHqerCREZge?Whye;M*Enc%|9L`RAIj9j< z=weXjq6XUoHr5ul$v8FWT-xn!ua2fl@+vz?;1M`w4=B>36y??YGI?+Da-J9~OxgDo;HJen1ArYZnG`tozW z-vOYqS7y`ddoOse$-IS%g(Hi7VAlix+}fjc?Sai2BEv2}F!h#80S>AoSVVvKi0ytM&9_1$$%eV;jrv4Ks%^Q(qlWbq}{(OCuIb9FtC zsFT0s+mbdCEnY>Hx@BJ8BL22l*F2O0(-Ra2Cw%kRV!{+eNO@_4uLY*CcD;90Wm!~j zcN9_mIOMy^9+UW3=JxP{{EQ!~P;7Bb_x0{!erNMm*HNYXv?;!8v|V;nUFM7(aZ662 zqc*oIn?B~WeuDU~(SpT|-L-aaxK)y%NIo&}oI9#@dw7$vVXXC&XGaL7CCSVeCDl`n zz*49cU=3q~QCC7_ zB1?4Yf+G`@>{g`kr2Q>rkld4>N;&uVU+;9!+ej4Ky=qV6=1se~Xw;P%nHaveR;O6u zN%vdIU^z|kwniPNQbR}ons!SO)g|-z-r`i-5$`dEnSLczyr%X7P5_h0g59lfq3Cx| z4^!@fV&GKhC^s}SqNIAM2{_v7n%rBW@MH`zJ+73K!2g=FcYaLS#raixJ8U|lDJPv@ zAy8BeFg``l)g5`G+MKXIjbwClv#D-C{% zHRXs4+}xG`SS~I(C2v>UpCpO^TRPLcSj9Jj7mLt7DmUMs2uiWt@{T>#MHiK{gJ9l( zw2OS#h3cFQ_Ll_9-M6S;ZYbH?2t2?R(vh&ZNCcP1rIg0sL-Mk1XW&z5vfQR;_G&!s z3{hj(M`y6qlxwO5o=B_d?|6mvI=G!K%H#mi zD7V{`1t(4UU{mxS8f^?u?BDr+gTN9Z;BX+YwEHe@aJ!KM7a_z)up`~Rzd&aFhs=e@ z-oqh)OE><1Oo&?o2>P)pdjxhcfBvr^{72GCCHl`t-K?>2q-{k=gOorSZvAByROx}A zTW`z63*_q!y#lamD-qVvE*HJ z+KEVhg>968pk4q$MckkB!GEmTE!=yIHLmB-qKr)@@o{i)`7LejrykLcEXjB6z3b;6<)DZsWj6YRIDyHmfptB zq|(fOS6Sl#QCm4C-mfM+@G5rxzL5Lyu>RIkJk8>Fl?^bruyCc!959{i-GphU(>BIf zg@O0+g^IUvi^E>-^Z;_;>1sQ+O{!BfM4T`!px;53aoZI#xYEOl$!~i4+a7rj_k=mm z<#Ww4&R~_JNS%AHB$$B{iZ&R@7sL`A+5N4ME_kq0MANcibCT`#EpNBiz-=78IqslR z_e_DV`ww>i(hj#G95$pCAv8gIGz~f??hF7NYji~Cg1Y_%rFz&YrfG=^>Utb!^pZ1a z*hoy=nr5}^=eAtymRPX1k2`qVBcLc_?Q?jVxWF}9tXswuQQ3kJ*POV+-POS0S)W6u z<7G|1+-av1Sh6*?C@Rx}1wxxvQ;YjAY(bW(bF_W=hl*a@x%ZH5a0%~PXtVD5;1i}C zOw$J7`4vxSb05dw=TKv&IGVG>B)>G|f7hr=4uW5$Q%n(5z2GGyUd;@f-?&*R@3nfS zX7BlyW7iyMR~zl#@~>m*42+}^m%kk>pMwVFC6|KVWK>Ij6(fVzvP^r*1P4FUZgsIP zYhbQat9~6L;guuSjUK)0{B5pmJes9iRkF&&JeQREQi)LDRN625U5~1Tas@6WxAf5s zhnwQd8U;!1Cg#0AQW*1>Cwc6>TyLhf^%QX~%YXgY_M6mNa*`)MO-D3z9-fOrLqZLo zZ9m|5;H@=*5!zF+40aJ(9f#;rk$G+SX~He|o}(RQv7~Zsbh2qGk-A3k2tlxn|4Kg3 zw;|8|l|DJ*!zroT>jOLt;lwwT)ikja6&9Jd7<7Qywr6teC21zpCnvZ+=|CTa?!5nG zV!o0)uuh@d!IOrk+Xa=1i>NYKM%11D)`S*T!Y2-3I-;zmCl+*~u+7$jDHwiYd+`QL z`LN)ojF7200c5Js8=k@!KF#!rOUmbd*TZd_^A8s?$KSsUdGW=Bo$W09>CCWO))81| zyH966nM4qZ`1HE`W+VlGr)55&(@h{DdIKf~jkb17fq`UM@t-|rB5 z3+Lg7GBR2c>y(K;Qabo)kpY>aq(G*OaZ_T*6fr9@B}E~xaW!n7I!|Mchk=Z4E9f4w z_8Ldr*E2UyFsGzGxcTXffKnSOg-sFqF<+EJeC6t(UF_&D+lz5I$*J!Z6_5YoQSu>X z-{i^P#9vvz9QkIxNM%?k>{e$=VK281iSC+-Hf|bA27UTFcPEOKrDV3PfRI^z70|5x z45x?AzR)9Z%P;0TGWNWDbi;zF_%xO?fm8$>9_eA#{f4Bp~7BPp=o3 ze+etStimr(n3E-jKqjza@l#G9Y2r6gbrObKlmz@<68r0SMfrhG>XKLf`t4Kw*YCHL z2W#46xq=bDVYiabBWv)9?F)v#cIkYFev`VsR!2ivJD8i?Qd z>edlAG^-DM+DVi;aF)H80`UpS?Ckl!&hi)^teI?5{&t|en1rmsJ0X0=ZlEGv-0&>% zUUEWPK^io0CaZp`0FYqzc6elw^o-MD7gT!m;ID&3ZN7h_HD?yccE&n&zC%W)va6fYoS z>XsLrbH2D#fbqoWo;&c?`l4zC&t)<(slGp)?Q@n61XsT1lbt%@geevlFd1l4yFGRg zze8ZphjEg#JiWIS8A+dWIuuGi&yeI0^#R*+M-Fiu1*kf-prRWA8L7iYH#tBzt2S!T}m;DwG4dsx)5D_<`?cwxXH6!`6U zdf@iV-KVst^23Cc9C&^|bHbB#d9ltk3#Y?cvU2vR^T z^U#8?AfIjfFUQk8@YDP+HXctWW;C1B9$e{u1;SRBp8_`APDH^$lr&Lla~wc} z+#c|5<9HpFyzu3}uoQL+vW}?6^8tx^m_G_Mm;)UHN#C=&Fy(zF0*obajM{9DpV#m3 zsEHTeGXG+7h_U1tZGjMh(TjVq!)a#(fY>oBP#SV_N;4^z#{=J-bdgsn4!j}Mav$)}g5U&g@r7IA z5!wP~U>ULB&PNyFso{XnU5FFj~ozZ@?n6j>)` zEa6+tPlo|Xok((nT>?RhWq?^R{O-{NChWaNctAjlW8YILfD;C$$QnwSX#7A88o<5@ zInWdjr+{BW-2|t-@U}IRz8(6?&5C?h5N)qf8hfyDH|b*HpmJMuiXeP)1Fy8|I(UG6 zkRt}$5#HQik&?Ji1@aa@D!I9&GL`}Hz5~wbT;U~~0q!F(H%gR^$D#DzVEiC(%9A(_ z+=X2{*8(3*hlzTK!I2w81^1>sXp&1oDwG2->=PRi$--Z36D2c}_kcE+41+Tr_aM8M zy$)b|BthX2+S6D@%%XoHJeUr6OkMsHFt2IcHwgWc7y~Ui_5&oq+`R+av-H11KxctN zgbT{SLmSOy;XN8&^q8D%5Z1+U0v?!frR>0-Bte5ue?5f6_q#l#7Y}YxEIEO%O z8i(H~Wkq6c4theMwa|PiZU=CWk`I_ad0szw1x^N}THu5)CUo@%@r2yxaX=6pyVaVSmF0+q@dm}>KN zs{1%dU{YB}a2C{jy__`C#{#HpB-N$Rhx>5MV|ZNBtKEcef?8h<^i~~nF#fu)?HF*; z>*Pd!iW085F7l*Fk+Lgiqd-=|#{fuBSag$YJZ=HEE!&%*y$C^;H;d^u-InyWz)?bb zinKNVEFaQP=Ig*c>dt%HLVmb=sLPj&KE*Y=*F82gA8rkr@ZrWgcp`0sGE!~4I{NmS z;NC_SD*F?h`BT@u_RV`mo$X@+Ej3jVj=`OC2Nr6hLE`4yKeo(2gK3RN@j_$AEnvFk z!Gw?;LWd-{p@y6vgbg4)=oRQetSNB6eFg^^#{d%VV~u;74`1+G1_8qU62QRVK&b7HTv; zfrA02<5N1C`)ee8?g@gvri0G{P9y~Dd$jPr2w*2~US0N3z(W9E4QC0=QNe3G+joeO z+JNo<~sw?3}r9>&o%t<9vhEUg#lnhC^6qzX! zLNd>8rp#n^aozvk_nPWU)c5`V&+|R|J00hqv)5Yhde^)5K9{EhT{Mr#PlV!g^5Mt! zv{f_ggtlJ27lPa=l3fA*K_`7x+-Ndp179ft*1x{TOgbTOudUnnlOT=RbRaEhu!KSw zlfr9#_`NJB31pN}o8H0iBF~s_$(Y#qhI$f67;drYfE$niM)ULK`~P|Unp@W)rNKCT zq#ULL&rAY(b7*S%4QM*x*hR2t9R@`J!oB|jrZgCQfh0DBVkJf*gn~hof8)*rlP0|C zeV0N?UMQh&l08!hSp!0x#2TcT1!7WzDR#;|0wqrFfH{nL*c}j{ayu$Cc_JiQfl_@D z{OHwt`@*I`5&+1U6er{^Mm&Uq2LYl$nN>d!ND08sXMxFRxcx9ze`mwrBSc#*zoB4C+ei`cCjP~Grr{Q zu&e=Apdzz^%A3Q$yCCVrU4imA)T0m2Lsl>)Cohy=FOIaybioXI?je~kL?RJHJ5445 zWc5pZQ*!oN_-R45*s@$Y>V}>s)fQ0UQ+nUk#__oiGA+BZQv*1!hm?c|%gHmr6&dv8 zK%sZ)sq|pMJEtA+#=~@tD2?{ zL3su!gOi|xC8lN4Ph_$pPm@#|pkM&EN8F-Y#fo;#+$MlK8Ja!GM(bDB82Q6GM#^oH zX#!36zQd@glmRj`1s<$gy$n1Bh?>*rNmnK8iQ>+ioGHUC8&L0iAeJ7j>ZHED-<%Yd zJ7)qx4kUd*Ac~eqrB8lx*TxE1;7IqUfpy^fhC}3tg8n$Zex!U4pxmFFO$THLNd4iD z6GMpLyIlZ~flo`UE_E6mq<%zt26#llv9Ca4k>a>(lVY*&1B%1}&q zI0XmdO;V(9j_ckb1rnjBl-NM3A5$R#b!fKV$ExK^!^i_t?R^MNQ=x znO`Qo4*7+IIWm#V@(46+D^IY>^@EdoLP+PH{icr_13>7JDcW$DMH>&;>M0>kD1_82I$9q*V0L0Cx-V=5A#de}N0OhyESkPMk1{`qsTnnPk9__+=UdpJoICfIU4 z-($a87FLuan5{1YmcLP{`_8?FOo{b;o;6odTJl@{KH)OVB4CxA=p4eMKhc%6hK z)Ul*PNStjO$l*9m7Wu%Jb)a+7gjJseO4u$9h)>mMEq+eI#g0)T>#Po0N}7Y6ee z1)Bqqr)!aV2AIH1)7QiMJl}I(`8vE0S>2Ov3DtcdL=RcrUp)+P0cZ%|!bF)o1$z`J ztwM%P$RAA%oty%!>!fspGz?d-AHn;O7dIr2*aK4d=>t>coBUu?n%el4Si&x^m-2G!*MJ5XUsTxUHdMyht+e9U#%k*}@Kse2BRpO>vlK!B--)uDm09 z`;|_c`Q)Ck)5 zZrd*0QH4s&mYyV=Nymra`iwY9l|s{B5|>X}cisNU@P~CIa0CF!UH@^-v(sC;s40Pk zEugFD zk@DeM@;Zt&knH3oGm;S_%SplrI-jhlMhrWRdO)Wgsgi+APLXc~EU+XLLCrmBDaks! ztUbDSNX7-i#3EsroW<}E<`~H~*cGW>b(>V;B(DaNx-Qw75+4XSG61Y>khln1){l_M zNKNtp`Bv{%WGMoIhmixn#qI}qNjps1|8!5P>f|+m?`$AVkskqyGZ|x(W|ESC)C5j~ z5C`QOIpCxc9C(ujwv6Vrt8K>y(Z~e8e5E#Fv^|AL6?Zs>!jN+5?VZ;)?TAZ`qxcB_ z2#-JfBRorc7roC7a8y5Zua{88$H^#8xF5g$N>!@O1rbcAuhYvR4oPb((~4b5h8k(d zOE(D!W$u&-v^~{Ab-MB-;hA|vTbuT#w}Zw{!_J&L-CQtgY#D&UrHOl9CY-cAT89w4 zPTV+^vU*42^{#6gmoNt|@1+F4dEMwz5e~`PLY-1#!4alXsjJEsY8du_SMyW6So5*Z zA?q;TG&Qd3=Y%j}$~3F4>gR^AVTLp%ueMbvUP;qNODYP`i%0ha(**?Ej$A9x8aJ^O zG%>)kxz!|X9w}$VI4a zQL|Ib|M2?BP=X2$d2ey_5=WmkRDZ~Lts zJqibXZ*=XW)-d^A5@kp^Aqj}Y4Li!%V$4fq-RyjH? zI_g(%n0JoWSo8t^W&sSpW4}`9lhFjF-O0>Fh{o;{hbw8;#J7ik<5(Tq0UD@}$(NfXUD_^HcJa74SfGT_Uj&$|7uM16PO*Pz(x%PgZE zF;@*;*{{dOyuKsKTG78HF;%ZQ_E8w7-{HD14gaHWD16nI*4@j}EmA)#tfCFGG>B}$ zC=>b>QI4a6gx8iMy?hb=FKk1q2myTG^h5Tt-=IBe%eBF>=m^0^2sytdw0lhYMg;rm z0rk!H)tHB-{BI5mBzaed#A;PlguK$KstifdlB@`MrX{&<6DCnQrt0jgP&a&gL@^%U zcg!^4%6gTwuXGr4RsT389*@=(BxEOLrUtZj^X?3o~?raG! zW9p^6F?UzJ(Wl(FqgU{bF8H>F6!j+Fm;*=hENyRkhQic6vazf;==QiemM=rR z?~{626%$c7lK)Ubn;-o%ExS4nMjbiB!i~;5JaR^d;|(4A7C(IO{-w`R0VRtyD9<08$i;4ZeH;O1I+8#bL?w(e4Q`McMK#-H_gy&;3qY`I#Eh|;yJ zZJBJhy>$iRS~oYX#h=kS)s*)6FyWY$`#NczVvT`2#~Yh@*52JGCH7W*G)Tnt^y${^ z8@#HX-d6}~ANC3o31?$fG+`UDr9WnMDP}lM*Z5|9BU>*+9L+}xPs*j6DD=%X$34lR zSVf6QnT+^o^;qYnKe3i&S8bb!;aE|pjl|a7wOgUl>`pk`rY%!t`^8dr#qB5@orXhT zbKBt9_(+!l)2`0AuFjS2=!xL0zN^;Pd@ZPN7k)i*0)PC$wc`@B8r=a!%{|-(mU>@o zIaX9rxw{sq^IaUf81(G;0X4RK6YsW*k9!WL4Yd@}p0mggh>kPqSf*le_(N zmS=Q9&ypD>+r!tpSss#P&DgAY^wT16zvVdBC-Kj~tuEMTwHl%$J%fCyIcn8Y5Jm*G zZ70hq^GFf9m>Wxs(?rkk1m8Kdro`>xv1h%c`}R%;~YiPQL8JSMx)gFE17hQHpo@)OzdUVqtq; z^F#Dc)@q_HU+5eNa5P{LRydTo({M>9i^GaaJ5JM4)xK#xd zUDUK2Di4XBUA1VD&qXhhOY7n|D=2Ql-*me^i^;wob+ng)>+_-~!QL-lL=`BT42y1d z-tu{0r+3KCoN6jgKc16Bwkj{F@|F~bcYc%!n-6lN5k>|(%*OCzEvg&{9*;J%#nzJ#s`DTS7Iuz=U;d_%(67*&V?n?u5~< z-10yb(=ms^Z^c={Ezic=tbK}0EP4l!)PV7F)!h2-?#61goQ?HZhrTK*L`D)c4%E- zL#iY(jw;|#KX#|)COp5hluQNqFJt`7-pDL`$tnYjQO};{!$Nx_Z`ekiK&$(!2nx65 zo{#s}yqnt=kT$wur!e8_o21l}cNvU{(tYF9H`N_)n;*QXaPU@>%hrx0|1cJ0;O0~A z;H$56pKH0?u}Tc+tsvxIEjYY4J}KhO@CZ+8;BvvZ9*2(FywI}qKCk=3>m#ogsHx)d zxIxzR@z#ud#ul}V2La#IG8nkgp`XJ>#|io}%X^wAdYY*Dg|o~plbH5)X*4AVUb)xR zLP#DkuM13Vkoh3L^~3J*H_6f)hLPN>%hJzXJcX&h#td%NxHUiQ?g52VC7FP*+Oc|~ zoRa%%`hpMKbyqBQb@wM^97$r{Wfpb;H+0=hdog$rsOlGZ&jU~ab8yu$0h z4X1VNvv0$!7k;`kkX6_XUt-RH4t*@-cAib>gG0+R>43&(8-@!ofy#qYXV)E|mz=0M zcI}I)ps{cA7$W4=?^)NdiZXf?Rc}FGm7wf8znX^r@ZPN|VP(C{X-YDm^{JZ5T+?>n)h%iTh}^Is=ib*m2l|5Lor4uV z1&FC7mvKwvo_k~bl14wY5qns>VBnbDCN+;!@?;3#_db~5rRU6I+N9@ec+yRLW4=k} z1onb+omE;?lh@Xq`_lX#T>STq`SQIl2l}6XeQHo0rAd3!m6+CS2oe`z3z3EYm>7_>IyIfh<1{J;}0~a?yPviE>0% zgFMD_yP9EMktg-(b$0%gp%paf0`K!zb=LFDa)lqi|N3d$&e~YXs3Ajd?K54^DY`W& z+A%6Rc}wYsn!h@5M1yBb4=2pksZS}7*!kv8>X#+ zf&=5!Kp{_s@9CwN>-WMK;V3rHen#S~^1K5(8oe<_4HOnsHzrt^KDO{!?2{p7hJ$7?aa=Nf)9Po-U^JP)QEJ@}jwnt?f7Prz2e(CHxJjK6pSXdKd*WCyec~^!{w51q_*uNAFTynpsR}y3Y9OX+S zR2QG=w5p0qJQMQL;u}Z&kdcwBtxs35Wud`mS1S70&*QNo{`za%5$k+`P|AdQ@#Is7 zPKZ#VOShD)&pcJ=_+oqTQL*I$yqAcr+fE3v8z(UCLOk$q8)A3)ZPwmSN$7~JxM&h# z%#!3Bj_K0#$h}0#Om~#_`b8xh?5D7T2#qaoH|uoED5`gNF^wM``Jf(ZVS6%sO@gO} zkn*C>_0cW;y?pgN=PX(f6WKJc6^eT@(e}0P>YP)tn>3O^nOd zT-0FI=*AJ1z^2EWj5jvB*z_)cz_qO~xhdg%#@SWc_(z!Y-w{+P3(%A?}0LY4>HE1#wl`w5KoHAD}VR;I?!0tXGs` z@s8T-x`t~DAK#~?<=+%5CJ^B=RSg!$*6sA!+nny2iVJx=#3@@iZr-5fd!ynIXAn>9 zn#=S<@3gO&lsIo38q{R9?}*Z8)D;LW(N9+txKlyfnDc-}Q2W4Q&i6Zn3-(D~^X9OHX{;lFDcr)(_=+dygM1pmn_!FC`h7d4Gdd)YSuL5;U6+u14BKf}-dn zjhh??I1B5gLgim()1abmM_%UC3=YdRZQ2}`?W=rs#Q~$hTU^#Vc5~?NzIr)0Db13x z-h6O4JYwYgRWH@uF$508Z3pDJ) z2W;3Ow-=#Uw1`Mt1c#Tk)rgyB`Hh}>)asE%BK{XxAKGoX#71Xpd_kT78}kGn+&Sr0Slj|!yV`#x0S zTDy{j#fT4Vts?03`CkRc#@v5fq*8U5s%>*X@Ea5S16kSBHEFqRh~igeKD!M~NpWe* zwoSyz5j$2QE4~)KN0L-+a?O)Rhp~03wu4#|y@3pQ$awD{hwU(j#Y(vejZe7!ee`Mf ztS=r|mKl+3Lx^T$W!`I4b^oYH-@wG)7W=zSUCbreDI$CaE9~${pm8sQ6ggkE776enf6dndXB2${8@q$0{;b;i> zhfPT>5)oqisyqJ}$Jt@M@UZw(&ztZe6MRzWM=iT$hN^|b6HfKne3bj@|1c|JJitF> zE&r8=m)bKrKC@V=tH|6){qhV1#GbvpC&DWBc-lKKu{`tG688>m!DdEOE+$+UMfdte z8g;;)(xg>0OsGf79Se&xZ%=M&lZfNS9hAm ziuP!n%Buv8*8yWxnu6{qycBT3F-^hJ5{EFA!x@*HjWkl*LOwQEkJjLo#lvlFYW+ie zdiBC_$6L(aCqHf<7gD$O9W{Q#88P}m(gK^-<`RWRLc=cupPXtRF2%2i#iApu-gsjN zL;I=nd;PULjsplvv?M%kSGbN3#g@myxi>Q;XteW3GHy3;TYBqdyYQYCPmS_|4%^~B zWwmO6s#t(3BeG{yZ=~si*x_Q1gHIewJ3j3HaP)Z+E~W$v=Kbkx({$X%`2yolwfjvt zARM2l4iIk|X|QAa%&t7t4URwcB7CJ$B2o6Z^0hbK!lkt@+&bdGr(d8E^spYk9{5U8 z)(xYF#?JoDxg{9?rKd{Kce>Za*=i5#;inuF4p5>BE&`K#119GWtkVP5fqxvR1^z2< zuiM%zVhny%v-No2_^}DEx~(^q({2=vcO0?3^fckrL^;QC^W{WiJ8S%|rRQ!gzrT9> ze%@?^(RbtZb9P(rGriuwBb&K$qgB(*4fnyzg+kd(2^-Ct@TV;A`<=bK*z(g#K5MJp zX-aW4ij?}BU4x^=?uQmB`5pch>)nqmQcgTvP+*_JSjKMdU*34YD0O081d+fOJ~4V* z68~s4E-?7kGSx3fSP{ju`drE(zG4{WqGKA02KwBWLjqzj^hHM{6)&`LX@&TkU_4o< z@Z-nSt-fB?b`Ojn8A_fQ>R*R$S-Rr!lc!>yABzjTY9^X#SP$;i=Wz`|oWvgJ6=`Z5JgmRz zRfucM1JfdH$%6;lcmhIPOdeb*(mJG_>8?L%#@Z1i)u))!3eW2x%C4OT=UR@#Prb4(if^{lU|k!LO55!aF_ zIs7Nj9ZHQFdRLvyE>!`X<=U0YFkLdYl% zFJ->(z-pf!lep3qvf$tvcF`HEOwNxeFPm^ZZKcn-BILf)Y~n$bJPYVnBl7_`c-Y>fFFs zvr7x2c2babTzpA_{;R))eg{N8LSo@RgZ^IzChk{IK;|NDa&G5zXaN`s7k4c~87QJ$>$}6oFTA@K0k(p$ZiW@4DUm$p1Oq3f= zbM3rF{>DaRp@no7*9QD0;Ktq0nx(}K8)aXcK{@g}1@i;U|Kh2AmN)|gV(#zi81j?W zc^pV*#XnVyhW`=;DGPTH@PJ2js@{632TTxk88*u(f=PBIFEhE z9J+lL-TXTP=dll&YBFZP_7?{7V%>qv0?pZiW6_3Bh{6CBijZU|vGwl~U+ynUvHLXE zkOlNmvtsdV!3O>yv*)%C`BlR=D;EFSz^Ehb&8G7?ex3$uC(h}cJLc&RJ@ErEOcDbAKJg7 zJ1IhRn==W@dxe-WMCl32)x2dQRwXZ2aIL)4;$GNcPxDhR51t z`g?RNxUT=gTgWfY{d}r(b)e742Nl|Y5lfqr?*ml@thBidzB3d5*)6|~h5N{d4}7M_ zT0fL`+;$8rM{L&|RezkV`A0FFexTI{K3>^quRVOJ+8k=qDMQzt)B6;@{Q(+2ATyw; z;FcBXbqZjV>>V6k)z}srsLS|}Z#!n8z?z;E$uaD`PEM+w!CyWOm-H~Wp+8CmUcGpm z@3MNu^Qdb&Ug@Fs`LzBlZ#Nqvrz&1V-O%w*e{0`GTg_s+xl_F&JnFg*COy)=mNtpy z;fVCt77Q%}tku>KBEdn9FiwaF!=))E5b*=u4jc%vfG9rR*1~~|7Q+U2|Vp*5d4#yq#MR8Uo+s&^4D_9npRlwJmk}zdjh`z z1~PpPpj`dIcgLQN92IN#5EJ*2ig{f3d+Gt%d?KAY70V~}Th}2AU%Zu6m?yVC+sKruQ@7hN`cM>zQ|KG1ROGj?&k8lm5+KkoGk5+bxD#6`@g= zb&}GD?Ad6gm`%5IYF30q8R*2NcLPwb+!=V45fUNptQw(90=J&I`Uj983$GjycqEW` z_+xzmge&9#gfmUq|5X@}83+?=xMhEu-Cs;@3c-Zy?j!1kzfXREVB|N+Hys85;h_SM z{n7tb_RqKu`A@R{?_GyXa@h~rzd+yp7p_|v{-(3vu+ggexAkNJ<-|Ju=ozS4+?5C8 zaEP_hsrgYdkEMIAr0PKu{);fo(m&Jr^@k9iXL3^{{A&bH*1u^go2gd6I5i!H|0?@W zZbGIC*kAbWur*QH*QTT9HQNP78=l@ZF;0ux&3i6?ym`~Om+SQ`7TQ{6c|6pcg@d1$-Zdu=Zt>VfWgVh4EFGr#pGMrcb!2z%A zH36N5q*Un!|FM48k)4JTPO*;D&zb)KnVuCxVElt^y;^AY-h2Xnzx9T<{vR|x{Lx${ zFLqL`Ipi}EDa`S4ILr#Y(-yI{uK&VL2$j+9%+Xb4v3gt4pQ*id$T%A1lA?`t=Ia`< zSjAP0Wy)?Hx)!bKVx!%etBYnCds{J_X}fjkdUQiSRX1JMtpl_NtgnYp3?iv=|IS@c zkyI*S_mOWC*4(o6NVT%ApzgF27Jg9if$z#DCF^nwm=%(`n!}-sH<~&652NS25)qI! zY+#66!<*WX%bl7ahjVn#F!fS*A;Dz+@cl5~9lcJcX&7*W&8u-Wfkq#)bdnTb?wbcv z$S>jMKl0(#9jBhrK1ZYO0*Qvks9K&fu1W0v(WGX8J_pW`g(Cjn0)5(3KjIwuZ-Cx1 zFVN?}Ir3YeU;kIU@B`52!1+x6Pdn(RgZ~KVbKo5L{{s3PI7j}!fIbJ#k$;f={|M-F z;2c>9W6ff8%-;fi4xA$-Mo+u?KL`3xsGfoyLN3UV)c&_XpL*cT^GIiq-_q&dF!~%o zp9ALzP$R#c!q2QfFQd-^^f_>j{JnIUp7@W9J_pd}z&Y}R=9&fc^8XmG44xA%D<9m9Z|1r?#z&Y|K z+4paNJ_pW`;kf?^&=)Gvk$-j={~MssA<=)#|2atFe<;zB1!(jc4w&Vv|45<({rCR^ z^f_?;YyI~>0Q&IoFL92{Zbs+O=yOOHGNb=ni9Wj-okOF~MdZ^=`varT0rVg8e+K72 z^?(2Gz3BY?-+u)3IdBg8?*&)j>FoOtB|7q7FS>jf&XTJcP45kCS($cq>(IsMEEkzm zoo%`W%vPxtE}7awLzkk|M@gHwC6` z%*?y@_)<4)7rM(FX4tyx?C2zyaZB6x% z(7j8rA9uYOy!5K+Sf$F*B?4z3v1k?LROIWt^3L`8LdQ(E>HQbU%7R6U8kCk{>_#Zo zA)^2I@^UKp^75+1T(2ZoY4p6%=P3Uuaz@X#Ln?98k7;SlQi$A>i> zg^R<0#(h1rzD^;Pjw0oo>JUAu`xjaZwrFfEZa%l2wwQ-a`Poi(WmIG4X19~7H27Oy z=6fcB94v(7b)+7IjqvVOHGiw_v3cM7jO4dpRNuQNGFX+}H{eHixmGxEXkX}->O`yMvRPJwRqb_#Id%b5EbhHzO@|cCw#8=aFZUD!_v=(K1&Q7@fp%- z4_i&ct@JTJ*QjsgflJqCd0OdLY@)dZha=aiuN@t5>axpO48OF@IJEf|Wm~wmJI0bh z?$Q^7$oxa(Z)#?N(Yo6X1j(S@gCtLW<5WCjH z_zBk;oFA1z^@%qjGL7oF+L}w>i$Cx<>6%*d(PLHoi?0!>j2Gl;deLb*(W3qB{SEFZP*jwF_{)n#G7TS}A^B9N%a+qU~9{&g@P%&bVR8+uhfj#(Jpv zwzg6Gn|Ax9j)f$gk)*|~ciHKB`AhfcD&m^3*cGf+CXqF%+O?;6*=iefuJ4bGT%lR} zG(jcvxs@hW;NS=TOO&Y5G|b5(#9QN(Gv8MZsPq)5e4vTgpXA`|b9;$g;?_4cJ(KLy zQt!IIu*9-8^xnRsMY!Cft~+;1J#5K1-+X#Fi1J{%%vlkS)$zy(9!DH4NA69GyUP*V zRwBe|B0e8S9LaFtu(RO6KC2hPKL5RpR@W(tcX%k@;JrmVg91{Z$Y0{5Fq#y4O$D)yuE{1*Xvd2qS zyE=YUUKKyj80%JDDn21yL5>Z&fhiOr<@nsYVJKD+l9ogzxKR#xLZz zgWrEs%V9gFN?4Ax4G-LF<$HM_yQ|3e0)8L~*YYL%j_kMW3I$nf!T^65uk7Hiuu$2- zO<{W7d_?_K?VU&(?}O1}5+j)t6WZ(rLE5QeMu~M!@5k7M2Ai|$-Fwt-x3HETM>yA2 zXA#7FvOW-lZ}%Z#vV)CJRs@dnhkYw3>7ediagO5kl2djsckkdl?ZKAK-n7Vg$u7G` zyM;JW9_zE&f*FHsm9fLICQ5@+`o{=ISWB=$y9rBJ#Ttv>)TEozbqIFGMSV@bOD7=I z86VY@{*cZ#-G<(gt zrLUJ&-Zb28%4y|6nZ3GciSe?8o0_|?aGH4>b3|@E$EJzw!661LvQcPx1C~%dg{^Vc zXPpO`hfb?s)yc4DVlmZJH`d9u7iSsLR5#Hnwm-pQs-SWrpu{_kQFxJVpmtkSnsxZ+hwbx=n9%{ib!1+ESUN+)^ z|FbayR*d4BcrzCi8DPiRYOPCBmHRlJq}|r~$&kB&TB9Z3-yD`68&_may17;UA*XHA};IAxulyWoZKEF*}vpLPsfLKwPj%GG;o? z|Fi{JurV))%2x`sd~|1EH)Zob5{RuDu+!vVcFxzA4)Ch|- zlD3I&@>?B^)bzRXmz}OK(s^&cg5{)U#WkHAdqI{m&5G+fh4#uUC$%bW=v3NI0cjLB zR3`MCdlWYed=X7bn_o_SI?bUiQf~pigkl3a`*x!|8dnPAuo(1X-ZA^<+^nk+S0`R! zZywR{#)hd1R zTjsoOw}`-Iy=9r5oO$%=a0p^YHfjh)KYO0#cv6Y?g6S$fDxC!nUwqk2^r*Dzb`O;{ z-i@dym=SMbCpuCEYs2~z3G~m$7Kw4OGAL_r#$Pf|cn6FdTx@M;;jV#}K`K}@w#D*j ztbXOR15r2~#8&vYRo;Y0a&>@{kOC@bePO`C)O0KL^eD-DO#-rSRk-oa3E>v5zB-|% zc;|u(&KRtZXlX7g&$q8x;F}VmkLkMJA~-CD!xA_w>tizRWAd%Ev(D6%*~5btLAkHa z0Uuz?{&_%tb#mrhb`I*C1yv;~qxvRC+}H$Ns%2eI)hO)`#!;jL2M!RE&$mN=Bw7v3Io{36lkR5qp#h9vVPeH#ysDl8@8E`+R*TD zY3sQ2t~V3`XpsvipY#iS%cE}+Xfmn#(E25``_aM%#Qu@>zK3QW zHiPl8R_3;Y1k5KJ^SX_7z{aze6vTM_l8^M2e)qg9p_^gAIs(8Mo0_iNLl^o`K_E!H z@b1OKG2B%QY>sXUd_kgx_N|9ZxDy$2P~WQQmPce9Ol>&ZA?Ato@%JnDS*LdigB`IB zHHQ|wD91Bh548q|$c1)zthY!qP4}~sJhXH*v{aNb0KJh9ecxV3kE)M}!@!gie2hFi zDWLQfmHN_R2g20aFAqF1V8MA^k7`ufW7iu>8}@8qy6nnxpF8CPskUD*1()CV!e+y( z&iLo1TGlL^pbw;y?cp`DSz2O)EMi>^Q?O*Tz2iHV6EHJ^XVT0See;?*w(6H==CN?E z)dPQ}9n3qCWT_1_dX!`+1vJ!XO7aS&8hx{&z>zPUB zZAZU8!+tuhP}=m8F$t#+@Gq8TDD}g*B*J9ug2^}mk}+>_6Bw4kfff!BqfG+afr-uu zmW~%EPM(MC0&rf?DW9tQdBdV6gnSk0(m998d%Va$kCy4Sw53AJ7(KoMqc<5mZ-qM@ zg6;ibYa`>{xr_9mpA0f}Q=z9QW)6ngj;lPQ&Ia=D0lsQke?_8elR$s|if_??WIkD2 z+|~)Tz&pE(*Fw{VAkPpXu~5K)5)Mn@08E+T83n*I65{Rw>tHB)@p%-`M3SAq8IaUH zDydweQXbeUO~9k{ZD!v~`}cPM4ymPjvbxacV&5J`h4{K4S;V>Cl5Tu$|HM)abbVd# zQnkZDOoe_I_r`3hTHWPDuW%rUq0qN=kIAOQ)wNE*6v0(@OLchAzQVV*xxcE0sd!=1 zHnuynY(xIcIB}^jgUpa%BIC{g+saRG0}0k4=mYX`kQwHqB^`*ONy<{-o5Z?X0Nh$e z?;#c0KZ=aw%$3Rp`FEW_4`?*8mPDh-WRY;9E64@M}Gor}a(S$=;?qB9&? zZq*vmL%iTAD{Zt6@{5Q#sRll0D(txiGBAgffjQ(1)cOuG5cxfi`fr)cz>_*41MdUF zu<6oeB|>Ol?8|L=V#2`UP%B_aaVp@6HZ%a-R){)7IJ}(1-xR=nA{-n+Qigtu7R?}W zW?;dFMaX>IIh$(9d1%94@y!z}o7fXK!ZMMNnN{2bj+%WL+8y^RoDIsM+q8NGHqM-T zM{?aQ;cY!f8wG-v7JAOrBO?lCLC2QUfiP;IeKiC2dqq@Vv^mc%C7M^Fo$C9DKh@`( zOL(eJw+nxo&yY)an$LvGI(ZSg&3cP74WIa|W_)u?SMSKAngNogeRa?^FIWaYcx&B- z|GzWOfXuq)f+>(Rt+)`I_9o2dH&}Kv7Oqc z$D_#knA$O4J|;VC`ems=U`Yf4R7(K?mCY+LM0vtapumlMdy0)tDpzCG4vDq*SeIkkvrs`g~q9u=&UouoR+Mv^{2 z5C8=*OYGQv2Bk;p3seu27XvPBA?r1FDJR@}RKa@B(`bqt9CnkyL<76NM`JV6(7j8) z$y~Crw~9tslzykQJ+a@}KcUXuSPLhnPa=4%2*9QgAb6!-XqhFn3}#Qn?}!pwe_BNfKM~4lnAo(ZWMFXXHrX zTi}3@OXw+57okFe@P_EB(*#0nTCAtAa-tu?=*rkfFzREa5kTQU>IDu(2-1>1Oi#X@Q@VD zL6U+&mXP(Qx3zfuccan$hJPNy*%1V@hkeBL1#=2Q)}2$N0(%ldmn!hn-=|)Zi$kiV zHQUEw!u59?ffD?2sf*iv=CTqIs4-g@Qva2ib6Sb~8GDiyjMg|*Fu^rY!B9_kxmW9P zC7G$#8*EdS1|oIOPNL$wEZ>*RS@}RG*hbrfJT=*O((JxTrl!{ZBBtv%s1yMxt3p5+ zd%-_LE!!Zwm_T+(gzN$aB{{4523*z{z$g6xqx576SI$uzz0m9M39tcC8+`=LCjtNm$S8YLUIit zUGWBHsfj6Uhd+bc16O$zS26**DJta~?qbFvME$SAs$OZex8Q0FX)(q`JX!KfmM!b3 z^ZfGVC-u@H;N{P{<4?2;@}qbeWRh~WyayDJ@t>^3fSxL#ayO7K&1~mDhr~TG7`V*V zvd*pMk@o5v3gi}015FT1mi+Eo@x5I>^Y}?IB>&3)C225>bwCfwXX(sFTwI2AX5;g znE{zOocjps7INmDmL4e062{piWH!=KQK2~wl6PhRGSgYL*+=#pnp<$9&w%7ppEvnv z=z5;s*@u92m^)w{X8#)Isb!co%z*`r!aA@@M1d-CSUt~obkkN)BzVBE1P;`2SkAMx ziDxV5ZE0K*EbkmlClv|s0V$6^84!;s53i`~KKj>D>=Hn4rlD;t>z=*L{YLD~;;@~l zS4Boz0>Qq9So}6&!_Hjy+qvVCL_@h1y3bIZamZ)}+O~gKZerVz@V4=TSNlG?OC?)3 zx>kHG(0e0cTk{^lTW}ZzIG#?LvtA;k1w~JWUiME;=WZO&*D*~GV9LL7S(^96Pq ze0@OZ7;^zC+I1gL(W7iYMJne26@fts4)@@YC$FNQqQV1=XYh?U;Mt_`t^FD|_`n;= zc?RUCYgX^tbsq>Fsorap{Zc!7EjUcZo^l@7VB0=XLm1H3RzLM<9ZaLj-?<2p)u*fC8=((!gOg9M)x{;4&a=_OB08!wM<0A1J}e z)u@?usrioJauz8;ubhMepvM9V0K{hTbZH#tI}D^ZF=x$WekKk7o>xJ7?!`O5q=)OH zl3@8_idRX7EzmCHKQ-(O$*|ibWiz*32D9u!epN933&R#@7cy&M@gD)4iP#zT(e?&UDy*J>dG zmkSSxYz2!GP<7m3eT7xJa;YM3o0=6~&p32M*H1WfR5wvLbX>PeICMgHR9J6O=GG@Z zG>mWTboU?0qjmP(Eh0tz=Jqx?JU`%AhU(nhE)q2OAjfy!#TT&lg3K(?fXyVJVlbq= z2zz{aAlk;Zj;8hzdRoGGV(*rp2AQU9^q$3M`1v5ym2T~M7J290MnWLr{|Ea>Gh0T# zI-1%>a+mTUElWIw%MyWbSptCzW^i3%X2A?J@6~_W68-h|7&6cP*srXaIX7)rk_$o@ zWDfjCw>KMyKyl&*f39fAkFCQ0BlDAqANdFAlM4GZ^LGo`I`l`hD1U<6DFu_;DH>=S zHf^I`pf*#MLbVB~qi3F0?;q4Lx#x$#&5)ngB>rGY0thakTK-^wf*goVxVV{i8~a!S zA+_hSl#~5kYWg7aAYN^G`RT7&KEuLa{^tvTi0^;0j5K={iM+5$Ue~-Zy{`F>Jrweq zE%Liflw^mgGW|cR(#Q|p&@Zd@O!qT;-C_CM8z+CVpo08Qch_f_;#WtIJrKCN?w;fV zY0=*s(xUrVVqe+^^1jLDUu+BgiFNZEhy06o2YzMK%()-9ak$pjmb_pzwW}@=gln{P z8AUw#?{)}&_sSn*xoBfQ7Wv;RtltZ)f2luQ#%x_yjvnkCOLcFnIsS-i^&c{lyN+RvmSy_Bl?6f%dVcB>5xIS4q~HEuxtu z{m~BhN$@~VhT4LC0a3U|DGK)}Md2Q$D11L)dW&)+T!+qrI|*?2=Z^-k2>m+wHh4pz zHWR)fKrU&B@boJJKZ&dEr1{0wX7qiy$t;5Uhh0!sEyOHja_jZKw(AG8Mk>ndaoEY% zI&8{kzt(~L>h%@#mCXXL;mb$g+W+zT3W&&`@6~~*!%gsC49KrelF!ZTDkqJwSq~;F zCcp+}>C`r4>DTnMaCgGa_^oF@lI8FpM@*A#58@T^O5#7<&-$bO1#D*_W~BWrFVcP% z-Q<2&8A^^`=adA|(X0-_eN7p^se)=cDgZ;T;e?f7@EjFsXhz|yUj)Cvw%+9zOWG-WwP)2^(*!pAspL=6#fg%!_+}Hw(yI|oQzG4RV zS%-_`win=fH*d7x3dKB416uPy)U&xH%>Lf{*t7 z6C!@v*HEPwEi<*4p0+WW8F#|rI~)e!Fan2hFmTCRW(I8b&_=HDtqBGbUe?BB+Q#H- z?g2iIU8RhTk0^HxMb(rN2PIM(RHP4L;~7>K33PwBJ>V?W%Q@$%sKeN7jg?i}55io+ zQbr{nr&&q|OLsGU>7@Je=;H2}4M&P2a$FGse;a((K>6wKgJ7ema3{*VbJRCt)~lY{ zj@r|&d%D6GJ`Y8HU&o6&SL(uxsyQL*r+Ez}bI~|6V1pGLtl?k-2U|EGV4(KUyv9e% z1MFIo!(VExO<2kVhLwHgb})7w z^1#sX8=PhhyC)<)fW6=v5Y06DCKc&yG?gw!^FF-lU2kOm35)m<2IE2V{T7b|o>a0t z*;RP!;;tvWsCb#E)QN3lT@p2y?E)Lx2!mM(>1yQ#nzP>J8Q3#$$OM^up~ncm(sR_< zzF=DdSA@1$LPMlqVUu&xgXAm?A82N|*KO6vc&}%0$bds57#Ju#1-cdNnw+KXb0##X zh#icKIvkn(;Wqf7r5$jPR*C|+6PR-?Gc?N-LehwY&gnzs*Qcp+m`w4e`^qf8G_^+% zOkL2|_l~2-x|oqvrLk&3M?Hn>;H4I0dF9AZGpfad3?*jsQ?93*0#=de1R*I8BUh~->4h`=QLeGWQNfqZS)4e}LcCm%aZ*SSyGYgxju z4ZV;)Jx-HiDIG*gKY{7=Ypb>6$OBR9Tk*KAFdl`Nx6hY**zfB?QRhzF19Wg=fmSWt zDCCc=lI|*%`^0t^=@nkWQLwq?EuKgyS0(lr_YlX^a0q_1qv>PvL_~h7bzsdmiQ>v~ z4zDDEZyB9(2(bkrWPw z&U&-=A1L1BJhGf&-|Ha~cLoXPd z7CCX51<40x2ORX+Y|O{X<6N=H`CP;9pln1d#Z&BPQ>3|4~2OFKW&(YUL%7qj!pIutoM8=F*m%G7PP`A>Y}OMPD~#X3yuZYp;@ zcGe~}T_GYcwNst48tzrMG0A2OIKOl*9B@v0vAf;+| z@6GFvN6Ejz%1^QmHk5cShw4q6+^O`*@_4Q156ffip}MnzN^Ua9|HiC&tXk9$t=cdE z^6$516?XrnSqrub`J-qp*sKLxg@7+U%r9o9qP1YN7HkzVH=9mlFs3gC)r@5%HpsBK zJ3P)xS?p)C)Q>^X@ge0UOK}@s{O!sCut!AZQ}ep9d8Evbbc!sfN-UgD|CCOVbW)X| zk%1y@vPyi3N1=ID*JEXU>TSU**Qz~;agBg<%{;6af*M&~Ebw{@i8NTDg5m09uS6m_)%IG3=?^$h1dhszH_4+i;X;9UBCOm-lb{^CRtu=$GFzy=#Q z*unt;12rUiT9`OXAouUKgqnjF>XK3c1yC~D#e=~4g(((f>M|JmSoWBdE$-WpJy>?t zJ?>UZ#m1J2@qw>`QI-53dv5|4^Y{IaYhR4gHYT(ZrD+*av?nQ|>?T?#Er^tmwwub( zrqD*xF4>y0722ChNm5j{v?-*8wAcLa9s64$^7%ggkH_!v_&m;M=FIE$a?d^Yoclb_ zb6>r?x4UFhVa6ZE(t&2XfN;CV%kAGB{+|}N>GKN!F0)Wi?}4-%8Ezs1@o*?VF$(+> zt9~%ba2hg-Tj~d+z;{-ixiv9X{k~CP9KIUGD%$X%OqQDPTH#(!+ro$R5)WmMq~0xV z@{!N&bAMUAg1FJk*MFDszfbt!TS)yS<2!ZDb^B7f&iIU-rJvfbG0Q&rDJj~^w+sBe zzra6?tx^2-!zu)9RX*&!TdJzn6?BA_#8dc>l9OQJA*B2mQhhOr+$L<+XUccQwwM_5NEQNYhx zlz+Yq!6cze(gVl-y^%Tb=-%o$%8VTma3WAx#^pn+yA_T17lXE{|_c1UI=`OuKSCY)=j8kziAhMll=qh^^@}YE715-gnz2IyIYSF-zfTG`;hc zK>0|MfG>o~=(I_MFPlP_`A0&*WT+Qt4E92{GQQ(`req|}-s*}REn;M^s2S~*P~e_J zMZd}*O)!I0Prd*U*A;!q8Zllj@{cbyyEoUIpyQ4|W%U}g;GNEh07QJBFJ!V{h>fWN z7Ld$?xFcg8H{7Bx3ztgm%-1Q1b9bbP^DHzW zNGzS+Qu(|^U!YsnIn0T6vgnz;oZKe=WjwwoJiw2P$HsTUJ1h`!Zf3}(4w>$wNN{PO zPe?E$E}R8&;Y+=`{ZuMMGxKCK#p&euYXO9NKTLQ)76E}lBXb+9EyA-8lm80K+ZY{opKB{E*5;8ZPdxQ<#Grh1e3W85>>z7 z#Lwn~j2Q z$^&UQ>+@0j>9VO9YILRWAfAEtM&xaQx2hWz^>OM^R)nA77H}9ft=@H_{4bn^+93I8 zKRD2bqLbU~Bi8^9^liVr!lWtqW!t!ePLKEk>@%M5OA3o-|~7H2y0_b|ZW^43ji=%ZuXGm*3t-W^R%a9cCDmvth) zqp4eE@rc2_Y(55MLJS{^vO^3XhjMBR-xTGpm}%TDNDR0f#I^X@R8<50f<=%~nauZ5 zPyg{(!hDYK-2!jO4@X{jXWLarbNSHN<@2ufjldVv?mX=7(Tp7KdD6XWa@Gi>zFRoU zjYr)G0D4L5BlUd;Qs0-Mfv|C=v84>k&)`1;G2e3$^NmD35?xUEPJ+-PP7^{4J%l!< z&)!rcftYX9chf|8##9`3D(4D!BNbelqoNVC|9yi{5E_AshtAb6=?$C=)WEq1sX4Y! zJKTv2uz{mKc+j-I$k~N<0v0vNoW zuP?64rMr%ZTn9xx5?xUEPU65q*LhK+fL^dU@*S~8f(U)*MekbV(z_N=FFYGw%LcDS zzd$>GuG+_eMg5qI?{;_9Wk(GcH44%<1>-MW{pZ4cxppqDqIEAIMs}rRWbnT!v&XEm z;r{=bCV=LC&y9SdMm{pCu*}Y{XwI(+zx+jxq+3|?=5u;whe0y!#;Kt?>mBab>@^Itz_40odEu&p_-8-%#=onFP8}(iUp4!}+J&o{ zF3+o4a16G_br)K6+ceiyE=4rusbWY|BH@7qfPy`Ejw7TgeIZS`4R+tOP8~5hr3YzB zUx=rdS1xUTy*GZFII6$lwa(~T^ph_ey!Iz5Quv(Xuv}P$=Y}*TpGdh@Pq?O3^Qqh4`1}_O5_bFLGsQ2EP>=IG>Q;O@t1&(l3O>TnFB|=z zqELpH2!$?gMJQCm^Gl=SzgGPaW&oZ+`7X{T#;o7A3P5cB>;~s?Zz7m zI#S$o2WTmkBfL{A6fE{wOtvWH*^#!;eL;Wxv!;`jYqyKmS;aeYxMHvKTo<^`cYWHv zsr&eQ#M?I1EUz)D(W%)`6G@4r+@f4osF^V{M6mj9nD>IlGqsLZyFsT#chRaN?c9Tn zXP4R-IL*t>oWLX zFwclMNUbU2m<>)av>7c8+Bxm0-jUe;U3iV}gr9?Jy{1mXf#f2#R09G=Tt z$AW^xU=QXt$Pv3);9qb_^z=y$-@W>*jA*#`f}IQ*D;YTUxX)T3wt^vJfdmp#NXQ^T zKw=>hi;+-6LTd#>DxPKb0&VzZ=H+?t0W&X4LrGVB6afA9&G#|BqQ{)Z&6hGi&^f4( z#iTAQYR}0YCc=Wh?A1(S#jcay!C926IZhO7n^tC z@YB7iB#IsedpI{vo`_-f&oS?sh93Z4R8tC!iyHk!l4#Ltoq~aS*3%~=i|5qTL{H;W zyh!jPfkgs`#B?NPA|Z@~Xrd=EjFI=082rMuDHKI|HIj72F9bk0eYplb#sG5?=A;!P zf-G*T$Di|0#cOa9jaf>m82s6din1>@J?CgtdCuXDGSOA_zsW@NS!Un;00Qs(NU}6N z2tgtNiK|EyAW?-x6B6A>FiWu%r11ye$4J2}mVO@Pvh>SPK0u1`2=tWQq~Zk6=K5|> zF8QKStoN*^dHn=40*PiRz+w*s=QGHFpri&-12kr5wRv zgL2~tL_Dj1fw=9BVm`SV@V-3a;fWZr;5CKB0NH36zOQF&=@QQeP0f zoT0R_J$g+}k>&eU47u;(J*gWg#&>f_+pShH9GDvbI-KWXP_pf!{huTuxc^Mhroz@r zPqtk@B-?iexVkO_+-+T_LOK2;|9{Ru53rrn2BYM&Umo+z?o+WCaf`as;Ug9~yhL%@ z^{Llqrk?do=d*SWvOcV0(RW4lVJ~i^y7Mr_#$txW77G;%R|_@^T?@H9(?d}{QHM-? zOb%so+yWf8ChIfQX$-Bo5ch)xEFsM$&uw?!_t9f$UbxDae|6X#9ZpI8 zN^zEuMBihKB@e3f7_7EACU~YTP+O~MbV^i8G+Zi1Q(-o|5w2NINdyt#UDkT=E~HHq zJPz-|EQfcI(Ouf;E-|SXJSYqP=DMc&Ec}ZITi52iV;-)f+3z+%JBT9){v`NeiL4hT@Y75YmU8k96T*toZ$XZR=RlZ30A>j{25Nlb$(8dM* zjW3sZNT0%&9fedZw|B)euf6ylS3HawfwN7xX^ze zN&o(04`~1&8w?*StIyC?m-#s_aSWiew0!7GT3XNIpB%c7r65XPq;2q3wi^*}@_K*&^HOy>Q5e+}9+s}nkQx+4+h*Qs& zjDCSTO%MDje{bS2{Ou>%2|bH`$0;%NENeaVEO>P(;_F5k>O|iU8OmYqT{e}c z9Qkm!p#@#rQ(N&txxDcb^G#3D1c_R%28^Dc&1=mly)s5>CFVHh_$@=Vyzfz_n~_bC`7c=M)a*_iN_%kU9t=sR8;UQikg@0q{#vkHu&gDRO#n)!#t zf*9LbhPUu{e&D6ei@}NLU^Y<~S(73Lj+(Gk8RiW|MS1WRnlVLvn889Z!knb;Ho}Bb z<&7}MsGUSiAQb{-U+Qim<`5O)jf2$AO&E77Ws@Dtf&$b0_`4>WazP9BGl0wlPx4cx zd|qT&2(m&7S>X={$%_oDLaN0`6@*kClSlluTvNc4(zA?Ij3<|p z&f&>-NJsGGB9bkhOeN{z$@wHnJUN%djwff6TBXUEB&aNl^F0UG{UhTOj{I=oV*R zpP=ErE$t((y7(0Oz{Qk<_XYwPYw+Z|q;x#FgcN}%7n7Xv(XSb)Ih#7J2S10qx7aGF}&g3Gm@4F6@}r87*A* z#NoM1Z=bKA+oNhto8e^)c35p|f-zRxim(!^y_KMf)wTo#JXV`Tn2FW4AYicC=7b>u zZ8Jifz!runsnwm5d#2qlomGa`syJF_VrU`y!i9JoE!V4PZ4!_w5UJ2|?M5oCkMV0M?A|)$JLK)73Et z_;<^-Mza_%)96+k+p8VI8U*k1ajaS}>auNK(*)g%JZdF{R_9u@_^@#CNfbg=GEzAr zl`v8jbDnGFv?ZbidgcP%&`oIh%ND|ED-Cw%Mys_01!<4kkE<7av!cH-v@XswCA@DF z1GP_*ls>PJz?WaOzir-&MjO?|_L;6j1sL@=J9c+=|3%`-RP{r75%?gFNgyZsK_@;y zel0+%g-CT2sgPfpjTo*OGfbf;&pjKEdF}N0q^6H2K0g|mF}bg6#;`#|_OMz|9pJF+ zd8KO|%`&)wQeFpBkBCNNzfQYHSE`3ZfJVutj*-?iLvPIMmZLB_9FW0?14E1Uu*ioM1xtIT;>Fm_ z@%kK$xYFZZlM2(Wib55E-5lWcry!j-)O91B7JE!Mv%I2G!qvbX`7)DNHOHu3qNd+^uylw&Vnval?)o z_I^N6oDfP$fS!{W&xx>HdR7iDM|*dL=U5M`GmN%Zj*xTQD&8o=Lw7ZN1PqNobq~T*GqeLu?l69%=>Iypn}BJlY!x zmrvr(XIXa4?Tr2q9|LTXL|8sl=hzG{VQ|9cj}Cukga5*xEsRqtP~x475^t2I-0~PP zwtLV_M(EBkewPl}`l8)3q! ztBo)xs8fwFLDc(1j6XG)h&fDMO~iOprxG!MdVdqfmAX+=yKSLr2~0ij^x)>A4>)a$ z-4*_BWBH2ae&Ikm3`BWMgsjS$&em1sWrKEzaYTR$>gP_t$4j zPSU3augB<8SFgutQ>U)SXi)F3!>CY$*I|^XtJh%^s8iQrixUo-Qi`W@%gT$jrp$7ZM8%D!+515!zHLCFRiwvrX4UMU9>X|n~qdPPz7Ego!3RX z&6n-SR>dVRn=`QcYj3OeHpoUor~|JMOoJDY(M@9Trk|*`WuythOcSz`yRk0LE`_aU zQ*FVQ?PEQ`;3V#hUu?1m!=x}jv1Hs)zu0p)vL6sThx71@O~UQ-6HCJF@{2u-v-T4^ zi!=3$O~h^VyJSZuZgXCrUiz~6SUnt(?%`W-AXDK$5)0timZQOMMq|SvRUuT}K`Ixd z5|xe&la7RFF73d9%TyCZx$;c(oD5utOlk0N+gX~kU|KYI2Axt{z6%1pHX9|lIMt=J zH!9M)=5Mun50_@`ZHR3Z;c^XKRT^4`P^+D5=LpuyRqb?k$(*mC)z6`%pmRND)dz~m z_`C+bcN-j~{*ll!SZBb0K7k1Tc^UZ6>jxl}B~&#bl^Rlg91*NDptGuxvsz4%`;7z8 z1c?ovDT75u-4*D$Hdi!$_wvy_3DVNO`mHwFYEXi<;yn{sSXz|A)-{R)9g4fn$7$kE zEd+mT;?Ec3*Ch+rKz)9&Zf%d|uuMshORGods(>JI@&(dN1;R=J&=}%dpNu=alDjK) zJ!Uy|_j-&DRen82i`uykqei8y!z`xmUWZvom0yP;P&?ORWT=$2c2)`nEAr#>ptpiB zC|Z=^)ThBH^o<{M*8}9i0;F1qR7a5td63zt_Ns9$2Ck^G(mgWm04~mU`r@R* z#W~(!%P8&P{%~Qvhk>w0r|WeDXv`8xU-68$J5O7wxml)V(X$k9cfPhK=5;KCdnpji z?4-a?>NOqSU|6h1#Cuq(Cfa*=Y8yl|9Ls7w2H1v7w?GWDKD`7BhKhHG%7p12zF-G2 zjN}%GVM?$N!=zEuuEszW0jZ`Sl{Zv%BbAn9WO#@SgfO)v7{q1VHDdjEwZ!(M10ncLCaGd%KDA z$O)uH^T=@|+&pp&sZWZ0hEyX(K21uOBA+5fNRcB*&Qjzs5>e`Unjk5$ehodJ05Xgh zVWD=IG?t*G@v~g{vsBqaLQCM=gnr(cG)f5=)`Jt=L!(Rb$Uhb2Sv zBEK?D^9rT-^4Af#PMT6IlX1uW>d)c){4CDly!`5ua4vopNjOKp`m?z0eimnOB)|GZ z+-5(E#F`T8BcWv7Lny!m;b;yxp$x}?_U9ES)cDbs4G=EzMY`=sHxua)F5&pNFVQha z%VxB*J*6AxkBs|aa~@0ebrtTTufl>KRw1A-Lze%uRR}&|l0RLATSETMS71EO`Uk!O zbZ|xY->;qZ4}1mw06$KoufV?wtl#t%_?y6T41e45K}D~}=>-#Dga2jUGesSugu(7v zSIWJH=hd|2X0i8JQBt0#HnvyiW^wfFq;z-giVErA(0sZhUHoiL~KSN0*6$r zP<02XT#!mMq)fjAOTon2r9xypZwnsce)xzzgv$`1AT3@SVwTdWP&eNPjH3IfGF^M! z^HWAt>NBBffXu0Y=BlWm?zitFBlfAJfr!{k=#O`208N`H&_CAh4Abd%McfxeoHi(f zP?gyCkoYqqmaF+6AYuUbvHw8gze2>Y{FJ+ekkqt>(UH`DdBNnrh^ui*OoUzM7p`U)V-{&V}j@B`xttl#t% z_)J($bYT5vT!Gr2v_YfmLB)-Svus>5r;ftv!0K{Z+n-gJzb-Dp7bfn{s>@MJ6+|%5 zE9dZM_G_+JPwu*4_XESYXsb)^(L@r^n@5f(NzNn3lGx{wqe-n&lWw-%WV8b1? zcl#tC|7mIYTa_i+erg`+F(B7ob1~f)`vxnL=hKqtgj~T7hjFwLu3XkquXvUqJ;_2HZ zKwZ5y07OcVgGt7Cf)jtE>8n`f`F{0rxOsjSaX4|m`dHj_KZ{r#uU~x(j?>Q~2FK`E zAB`LEwTQ;O^OZ3t7u!IJjtNoYToI5OS22gw_~ZykjWZ%@+!K~Ic&Nf5RUuT}K`Ixd z5}h0oHaP-P8zjlYJZML|4^bZttY60wsWNKnb2s!g#Sli0>(ln%xwsmNHif}B5h6wCOHV0 zFd|^$34w{IIRqx`L52-!jb3Irxl zYsJps4`4$k2R3A;exv(NbyuGe0h3wgt~|pXG_JPr6t=1kz-C>zsfz1AxkK1_{Ob|? zuM+(j>k*(tFRYFhWJkj2$wNr#AFf9*>aP6v>k)3s_3u&cFc=tpQ+D|1D=_M={0|cS z71=qvEA0_!*93XENv{OGKI;43h8Y4Sfwf?({@fe1sl!75EH2zT%9&A%rtT%sLY4Xk2##QqBpj@N>9QFm-K! zzXbUx{9AUJjmwr1jQO>72rK!uml9O@wY3R&e(fcMnf%&X1Ps5nCSizATZ7QXr>&mK za(8M!CWsT(wW{+`N!Yp@&Nwd#ZaX1FSoi@c2@EZ zUGA(Obneat3)V?-mfmDhtu`QLRd_QYDY~5X_Bw%5Rqyrv8^m=~!-S_qluGC^6{a!p z$!brRrx&1m;L#o-_>uIKVNV8TTaGdPm(pO?yUp_xKB~ZHU656A5mdhKFeWcB$Ip;Q zXO?mXI{O1XGoLRvWAJYFr$};?mU-#u5oNJ>$GIU4bne=0c=8id6AX#k?(tsA!&NrN{IV9x+fcm!*>h@TeL57%m3wM!z@;KJd&y zV;@6>D`j2TC*Q_~DoQF5epT++u<*D>@2i;{vV;>zI z;z}Q#r9@R99c?1sM`sCfrjL#m5#ytyNgVRl(IB>Y>!=f%<^;Iq#pl5()+NKSz+)3| z>|$u_zHscvkvUh9IRvB%L@H!XH&SU$mk*l~v0D(pQNu1FS48O^IW#ZR8sW#^v4?&Y z@-{kLeUUr5j=knhRJVXUF^k>*IOQpx=;PB&%8i?a@AcdN^cW9zn#CF(ET07r50=}a zVk&mB#j&YaHj6c2DwfHDXDXIvUcrqWG(X1u$dhAMG&~E!c9%};!1f?CPyYxU{90sB z0vfywvL^tkkUdRErG`|&tN~U`bLdVezXo{|I{zVCPK6)Gau4{?WvO;KKCto0@Fu@S ziLu9Jt~(1ROfD~OHeP8mR?H%UNNHs+&1?|bztxATLtO7eT}oW)L)9iO@S!dt&i0{d z5&31}}vM?+@+aMfOx7 z)ncRyLaGD?%UVwk`Z|N><)Djt>E0s1k3WumEY+9+1tvVA#urdv!Xs*Y0R<*JqQ)0c z;6Gmc`-mD}K!FL5s2>;Q&jJcectnjapupcnl!`fR@VR|MU-eK|rePYIqj7@afH3+w6k(K%cD#cxf_ZVbNPj>nfg zCLni!@3-UeC65Wn9pL-zcznrY0&)lVemfpt@|b|!0e%IbewI8YAa{W8x8w08kH5Ub;0Uq#gT0t)=HV&tl!xpzReV+Ue8(&T8OgWD-7Y=e#Fb(o&F=5@n|g>Ko!CncM#5afN+L{9^=dT3^R7q zVMGQNfs3d92&tgv%2)L84bB(~X2AI4qoCJZ7#|&mX9o<;X%h}Heu^-_KPdR!;9GQI zVpDLyhG`CJq!UHdvw0}hDzBu?DQ-Mi35yIP3Oh$B)k{a02-*cY(r3-W%jU(27USJaI8RS6-Ybo;6Qg6hD$1CxY+E6&Jb4z_&~tzPba8^jWAdMu#3`!>2+H zB5^4!a+g;?NU#}k5ICe-232>E$_1%Jryvd@9q};m6cVgJGp6l_{0IGbz!yH|GaUmf z&(9Ri_bOD3esY)n$My;iZ|0-3oVW{%Uy|pTYF@z;=1Ns*FJ|}mr<`N=_oWfg^`aLqiC#mHI;2@Bq^NEZKKiZPz(A1ph8~y1YdbA3QDw z>vc%G?ST*;j-3OIeFYjjKXQ)_Q~_V4+m3WIkxmy~_P`UN9y(73-$sS*a;3Wq9!~jw z@MDo`^s6AfL+@L<_YE!k*xbu~r$Y?!X|~Q4pN*e387pLwvFSEwJQ_erXZQD`M6mlG zp*XYqlPN@Ye;>*sc7HDlj@{pr(#PiSL8)Q$ccZYb#P$22vnjIhwLi$D2_X(*2^u>u zau2d+8#0H4RMU|Pnez&%ygrh8Xid=%+@RMr;YV3e2v_lUjNs2qMD)(DB5HgA1tvVA z#urfFBfT?$5jDPm0uvrl;|nM-;Sn{yfcnBekD2hk2HEdL)c67lOn5|%FQ5QDq8wS; z{AmZ?K$Jo2AC6qaI_OAAVI6d#XmItEnb&dkJOedrx(9PTaBYU(!v`qYn4aofkC|;r zxgNr8kknADN%03_*#p)`{qu|-1xi}hAnWPLNcB%B?^+P3X&2Fl9~&W zB&bPN)FhBdO=_klNfaho6(%JXCN&o(Nfaen6(uDWB{df%NfalczCe?u;JZ{z|Dx)K z_nv{EA!v`BI(NwJHw(Nb!Oe+Q3|j z+(-)~Hm*eHz_efc$9viMBJX41feGBp#us@X0}o8lUIx9W0~p^2$teu*MU*x#1B`nz z+FA|aJ|Hs8LB|r7wb5u#8(~IVd^Fn0)bCN#Vf`&)HZ}(SPcLFD8r%OE1XTV(f56Ox zv8nm5rHf%HB)~>LHl=+#33}!vI$yx?%K|*LNEnptJj(C^8+s6COrjPSNSN$?&0y+vAU(TG!lnLl4WPCYuB0&iFH?aP< zK?wNd#R-P>znu!fzk&5%BJ)?M9{d|v|Jxu0(9fKY6+WW`*)Jn%d;tai4Xpp|fC9+G zkFXw|>)`Gfo^uqGiDdg~_cTvS`zs8>O93<{5EdN762u7!3K5O@h~kJxY=`j@#A$>e zP6I5blN#cP)L4etk3htJ%tY*m8e%`ZX444@dTRt$%`A54ZCZF8{9_*QmY?=c{=OD*iq0N4n+?WyT;n$) zYJ33&5LNPn%f`aF|L^?M|2zK#YmonU{s|Q#kX0OK;izJ6cDpxn(a1tDG>5A;+^jfj zI%s>7JF=)o$=h9}W(1M~drKcr#WPS~Neb#{z%{q91V#Yf7#5|j;2mZ+p zLJjPy?4i`L>F10La}OCUQOCkR)d7!Ez`qm*@j(z5L>rDA2v)46!wMY)EBq0xz#&+% z5WxyZ1VFkW00E91$2~Jv=CIO_TtI3RHDh`kIBSTImxoUqMhh`|3r&-L4Y0>8l#j!hB%S3FuWd$k_hS{$C}e=$|m%oT+AvSyt(n?4;V>DkUb z7Za!vrXPeLiYNyiMbL?jj?Jebh`BXwuDNBuY~c@QL&wA+^h2cb;T$!dBHHTc7(I=~ z-PWPekwEL^UKu8r_U-!t;8!mQjK0Gq?}q30?jZ3BiqRVD-#U2|AK$_%nakE?ro;1Z z&^Fkr9@je$9+-ag&I90~MDKqv_s3Hm-)5MfCm8VcRL8n{NXnl;q7sRZ?+1*h;M^~> zE5|s?)d9|mNx+QXW9R|>GDN@);ofn;lPWZEbLc5U`pYSQ&2}W^!I_<#4@D9Zqnzmg zzc|#r&t!xMH{xi=kVVN%S6rjHt70n5!HX4Hj z7nfo>BZ7=p^PSZ+(&QvFVk0@9Gs9Wf9Nqs`uktMgM>Xb6=k^2KEz)l_udQZmnZD3*>YRMxdzDIl{A~)x>35?1TcZ2+EA{Vr`M!6-ft&H< zk+{>KR_;W@oQ|FBYwk5~D@$HvT|?EQMVStoY?7UKJE42^wUzVs*Xv%8*ECaey0Ow@ zWqY~Rd``LCw5tOp+E#A^Yw}yyNH9II>I24)_BOGl@`YWVe%EzoT z{rtg*V^g(M?qAu@AQWJ?wVJSp<;F$#P&4TpD|grOI=7u-Z7)Qm+3^&C2r1!V@46TCr_GWrh9_0 zT`*j@mx96Wx?B9 z9d^e(t2h!vJrz>V)IIALwi(#Xf2}t!ydXg-k#R7;o!(p ztK(`qU2f|ey6i#{m#d$W5q`gB02kK0PS~d2t!vsdLuoF)>m~>ME^#i%KOwj1?&{qd zd$|Vg)M}YsQrl6S7_#M77shvqx$Q=U?U(9#*yZf*y}qd#9ji3_WQ_$!PRv}>6cym| z3O}^rfPP%9@uO^KE5+TLUYuWVr_*ySL-pkExp+FCd`=Zq3OS&(fA^-j)P0?gPq(?Y_S87o&mcOz>wKG^9|hXt z8kgF4inOb4ohBoi^}cb$@u{%Zi(UB|Uqkz}@mt3y%P?*NLBcUFyZTN72i0{(YaMja7~{Tdbl^m-d@8%PQz4KB#ZW;{8?`h z+x~P{+F?^4aH{Nyjbt>=ih+Zzj z?GDl-M>^F_M*3@dhVzHZi@@Q*Y5}M9ntLl9?pHE8>hK(T?dKJ5pj_fmWz?T@S#ohJ z?~+xtXIHCbV$`=uc5D~kaes|~t~=K`spN{ec`_rh@h`C1=UzvWLBo|ZvgK>y$&Nci zD1*sMuPdLd@>g~!3sgS2e4T~BI+L9@o(lxWG{sjLhIbucd03?{ge~f+?t7_K7XEh6%Y8n12afue ztKeBAM%Htv_-)ARwmQ2hZ{_h&&#=^(n(#K2s~DE5#ZDLjA9AeMefjlMXLqhk&rIi4 zJ{%fD_F6)_?G?7-9EJCK_Oj3yAZALIU9`d`#;4_bp87w}HPe;I+9AHfCRF~}P8W&0 zv)6EN4RoZ(I7@^OIXKVd&r#bMGq~46`N9H8s(;Ls(ok8&7~ZTiHa)}PtL+=7D=6Mf zF6+VJGx+AIWhii*c%y$VsL`vz)K9TL!7HZSaE7h^q#_HEooO!88+UBG=v`Ld{_ z&Mc#y25HvE^}-H^Es{OA$mmI^q>-@Q>)Ez8p{&g=JXf_6wK9%Mv(MYnF>j;M39W=p zk5(SP<29i1@!Ca3iv&0x8zt7W&jz;ME11>^Z<@OPk%u(isFF)u%}8PSoXIx6ECO?P z+)A5Ux<3N1r6PTmtGXE)Ja5V-9|7h&^XHYWicILX1jbvl%KQD$&n*3FIgjpr^`?Ev8o zPTH;}vmNgH-siT|)Oys@r@F&vP%UX!-*%$gQRx7yRZl`6-j_w!hR0oeNUF|0#O?ns zhL1YOsBZe(JIzL=k7tw>$v(Kh{pp+(`LKmMb=PQTpPt=y+sy9@>qGZrXe4`s7^pjB z9w&5Nw0b-1^z~z%r0H8M@H-x}#*o1>mE{darZ~=52NUkQG)=qcFzr7w``ebp%oGjKG zx%{pVCa(zSuX(Fr=EuA9^mZSHZSU7tZoZz$y~~0<+=>+N$@JGnTDHn{Q~zsxLWvbb-Vv|_@Hfe_Z_9KuYMrtv9^8k z2B^r$oi%)nRQjAyc*RkP#xHT|kWyHBbB+?e~^Xk2><{`-~`q3h!%#n7%dIHcHU zfLTp3#@WC{e|cEZ#>X?C#KOCq3Tk4@<<=&s%t)1=t9FlW&&Q{8NHiFoS1xj~oOdow zHH^4~!^KWh%OF62g8pd^iAC^cNy1sLd8L-V5+P_Hl7y#O_vpXTrv-B(~6 zm#%=%k8zNwP>>lBUlLaI=&_Mj5S*x(g3cOc^dv_#ZJ)oftZ;FwbwF#+*)EDc#rG|d z6NI;*+414+uJL4)AQwHNTZfF(^sP_b8&<@tFNrKix1IRrHX!_D>$mqQez`CGcf# z^*dkO^Z6TxL@PkEiwWBKaa!PXqUSvM@|=~+D`#X@T7MoPTq?WjzI@|1(CEsJ;ML#=FpsbI^oM%mkfMmv@O`|kZBO7)kDnG5ajD`&Q?a|zB7Px~;k zcLjIPW^TC9-XP7AD+H?#QfhkUJhc(0210~qQ;yhmn@2zJW-cs#^vW20z#a>%jWK+s z#pqvLcyHH8eP@qPgLRUv8ZPtDy*h)_KyRot_LWUhp04y8nQZaIDMGP2%L3G$^mSIu zlC|Y|GE}R%Li$0_UMqu(;cxsytet$YH!tlM^bgqwKcxnGIO(j=mbDGo8P%LFo+vTx z>XDt9Y{m%-5@%gK5@>QDn|5ImjVZjPi{UoI!W#+i7#^^&98TW1a(B3EAA<;k;*H2Y zh6pxry?qX8dqFx$P%3|0i{eJ|vB&f9C$2u-E_BDyl@NJxbJ&(UkN2#WxfH5%8`8yKX70+G8lM}fP;B4!aAE(F}58mdNF{#gwezz*!EMvj)fE+)w zYu$DI8y8LIx=i|PPxq)C zTbrD)*U3#ubw=IZ_PzHG+q4L|M!n2zjSZ`Wv%JOS`?%ip zTE4pyKQX#C*w?t%c;_h|o=cS!L*Y=NJ+>dt z1TBuZV|sLP1Ss=>vf{So(K-*>T$Sc?kHe!JTbnzRk_t=k4`cTA7Sm12lLu4Dn4$@)QtxZO{eVghRlcfwU@ z#!|PeWajQ1lS79daB=wX**y_EsGe@W=y(y+_DnU!mX1_yuU@c>n}c+);V`oxfv9hJ z-%(FAK-kxW1dpf-+@=OSZb-C!Mbc$@s=fJSO~oW2yZKUH z{6U@@I&TD2roSj}o_6uIt!H)fH0k%eUTpKP8weeBme?1|3CdafF4I&vx2DIpT<>lw zD`$Oi&He5J0(Wqf#_*XCt=qL(Maw;IC!c>Yxc{EZ`O}Xh=RaO2=XAa|NhL`wmsR6f z?_E}rBirr5gA0kThxePv)OcJ-=`FcY_xQ*Yk1M8o+D9a7Jfx$tvP@UMSa*F`-S&wG z=141D<#=3}7P?E= z{pP)$c;}4W`<|+YDfiqt6MB0MFU_huIO=VkW`E)d=Y{wBZ^T^V1lJzyi_7ypyL0Y& zrLa3HYcjcaKJ`_+efj88E2m;lQWOvKrCE<_uiEJx($ah8x5Tne$IIdFJuSucFRS(z z3?6wTMKfN!k(_Fu+Duu3j}RD5PQ}ZXowDHpWaF0CY%Yoe@sIOzwkuy(SU)Iy_VP44QdPNNi4p;NsDJ{>dNKy%&H3V; z1|Ap84BJKGdZI|^pt6g(>5@Zb z9%oaQy9&GCy*xa5|GxT*>EPMq5ABcJ6GvvGR(M9ee};V1_pDTE%kVC(9Rk}E-L6RIA7d5@c2Btn!&U4p3(b{jqG;L(X-M%wB1!e{%RR}#G_g& zSzN(6aE9MNMbQ(C#x;YKExxzA?q`I0E)&`kcivut5@K@x%^;bW?Pb3V$W=TN@UxbT z<4}CcbGp-v^8s^-Dc0dp_T{@*!gV@@q||+)O{9lf9u8(~qz$v@oWWnuHt}71FJf5& z?sY$}LRN8(q|0)FT9oZY$(F)4nkFgZI+$b z_AG0oii!fQr=xesJNx{hJqMp{D|)VA+}ewoHl)TB`P?Ryqrs`C=s@=?@zc+nU*-uq zo-;7HMSi_vEv;+jlhsc>^LS_95H(u7d;pWYcWKSTcM6N@+r&W1B;gbV)ki?t{n&x$ zZh|ANm(*#1Tllrv#`TATt}E=+Tg$Xt^8KXay1{k|q@=z37+#%pSn1u3(Wv7bZW}s> zx3_g#qP*aB&Dym>4^l%+!rufRO_W{ZbV&TvdI91SVdb;Q3%2eoex~()_AE!eytNOV zw;IG>z;Cqg6dUp}s#gL#JS&s>%hrN`Sr-<9Vl>~rIpSyx%96sO+Ga{5wL$>J?D z98Q;!_QDME!fyC|^t@^vf{jSHV~+!)jZNR8SJg#M_Y691PSpoJ+GgI;IDg-x*J@W3 z6ly1{C`1lZ6ckRC-ZRV|F66p(0ejENCTV9&tC55lzx9cB)y+mqocZhIVxI4KoeUQ8 zpY^2-_!di*d$Bc#i)OIgDOt`u8$Yvdr%ly%t`h+rk{s0;ohqHXqv~THz4CWEB)qIV zf$1F!cZX)0*z!QP*t<-6!dhu%N1`6pvh-UQ5(3>6hTNpPubgmuPhK*&e@XmNnHyDi zrs$6M^lpmwu9sKqfhQ2xt`whT=CO6Ff zCkAySFZsZ&XJDm{BMfb>p4_)#?zLvYU3;S&1$S)$ss<+=E}0(=Y^r&!y2@}z_huUIU0+0$6ik{Ddb_mJ9C;ZsId%8X z$UHB&a{kR*uLM+$ZJf{T9f;c$d-z#5r||QGTeXi*&s=hnEm+lSYb1}#r7M$N$^tB> zXIl65Z)~-hoB49eAp@5~Fch~ZS4xM0o0`W=l;3pwC0<^=K)XT}b0BnOTL`$bvQm7I zafZjfEw!Aj0y_#g90L@ZBFINioAw8&XC>*{90s?QVgCD>?Fj;*UPNSY0rY^|nx3c-N(h z4j{NYqs){&e8yWghm42w3#sLpa~XTYsxPRNNbp$5x*912Rfm^k^yMt@{et{7f&lz zRle>$&);`e-Q1e(DzWKZGY%chI(emU7KRnsI)psw3X%XCR zXTXY^}08%J-qd!-$B?54W@eCH!`+ zx%y6=gKu&Xkmh?cdEJTk&yp9*9Q560@VQK)iP;gMrU7 zhl_Pfz(gJ+Nb~3*?R!}hH|9r^|`^+orx zf)c}Azlax=3zFUjtmWgG_I!of{Q-AA!j)QX9))-{9>SGVD+@wMFWXkqN^hB|cSa^B zM_n;We?7o3d6Rf)-q6dJ&WCug?auEGDK$yen51sgv3E+I&H}EeswrKM9MrM(joZS1 z>9*dI+y_rgw;We!%~-YIC7&cN@5VicO34q)a!;)n=C zD9-g;wrwu|=@}JEIk{3YR&B=Ay`Hq(?d{nYaIRM6!ntCBbJd}l3+L(z1IwqmvJ*a5 zdvgB&$Jtv(Rr!5UqjZW$r*w1Z?ry0=cXvuEb)=MrLpRbKx;q4FBQ-~ES5kS7Qq{hfwzg6H*e1Mt3WcOOGS&?TVon5Jz@q6l z$~?q7nR2h+aQ;lVQQ4_oK{Wq?8)|k!rwa) z{!+!IxGira6zG?}Q=g@7-?P%A1cNNpj2O3cgzW9@hDiaMc>=jM9keYpAI?0cyi6M0 zVC`Cp71YLvBVcH4T&a3$2&z5&a(R=wJ0bJ$YHCK4b2*$xo0`mksXT#WUIHAF@~JW@Zrmyg?n&D4@=*C6<$GY-vA9M&U1 zoONpO%}^lBk=7&r8waGyxUfJ?Dc3%^mT*n1H165m)+A@5=8q2$wrqx7Rd0WpqhFWj zu*=Tio}8W~ef`_I8^vac-a$>U|jpYfT=Hb+)o5hi|LTpj1+Uu-l z@lSR1r1oGf4yR6GrGH6vrJWKSP|lwrv9MN=c8Ws%mxiSNkA`qOYe*`qJa#|s%P8mm zQPS5dQK0ewKl$0%k5gF4BjD1JK#F ziI3K`S)J?1YnO*Q3?J03EcGrY9BVxevH{E>Fs)L+Z+y?}4}k8$hGTQj+5)x@qmDlB zV5<7;KF@aTB22O@8odW2079wj@c=T{C=fk*SU~srpDxQ+o!FZ8Q-uCs)vx8%rf02#{;8_8JKg+V2eMfaMz+A`z1 zCQC%BT6*4@N((^EDHIgZ4O~-GdzpNa4G*9E5K#_m7#!zj$=Gg~e>qrtlMF~|Wr788 zJ!C?=1k$%Wbm@Q9JKRXmQZ15DGixNY-T~fjX80gYB3tMVT(1{3_}%uC=3?;fpbV?lB?9^=Q1=A#7Z7wKFW4 zrA!9m!mKzeXK9?FDMSUya*d{0u-YW{LL?2Cgy=Qaz}e0FdO8bx)Xp0|2TF zIZO1p$1uQ;baE#Acv{h6A zsP-lz+iVz5L?A$=9_V7p*xFCgS8NxfD*Mc+sy(8U^$4=RjKUN7!>H)qe;D;lC=AU1 zB9vyKyc&XCWcnIN%#md_4={!JoQCX z-5ptOEP#;*ttlfZ;fiURfM9DkwqPurQes*k;TPsR|R0h>2a+atmr)o8E|7My@a*{KL-oeq~wxxo= zaya02TS)5K2C76j_f7FuXP|AN-oz1aw}(tyXe2-nZ;1%iY0@01uhPRe?&MnT-WFQ6 z7PD+g81cTzA0DhF{^2O{J9l@ay$~Fsxn>*kP&fz!IW(OFbfWbNh0cs79K) zi9!G0N>ND74GW+o{M#I%DZ^?Ar2Qik5|bh+a>Q_ypl|PSb@N66{V-6OtB8QrHUH}) z|4$+K`cDJI)75V6GljUnND3|-(X{NW-SR$t;ZH@~q3?HFpmv~>)xURHM(!yVaCfo4 zFXlUuT?%`9G<{FrwIVdH*a53^wgO#r+w-C?j*HiKg+Pqnr&~AN6}JdtYmDu_HqF6p z-hW$!_vz37v9&AF{`Buk{R8+y?+S>ojsz`pi~qctCMJ-_R5_U)4_QZagc2;T?%6{EO~Y3>2~{232(SiO{SQaBEfD!|15eBe-L ztv$cJg-4d<-Gh1Z5^5*^ZR(*I}@3iFSh*B~Z*b6QbF%W+NJ z@a-cMrhdgN-wsk{#$eyjBltol}50!uy5JL8F~UTEKfxlpzHANvAF-J|Ukie*~BVQs> zr)4!^q)gJlF@qcw#%ubtB8UOrSYTyn^J$wqCoq;79(y*YjixKHrU=dsx#pBnpGm+1 z8r>+#b<`!eva%h^bLQpEOZu`8jrhN9V54jcJMs6`&zx9>CB1>iQ1Jcl)1H2D_Z2Js zVkD4lZxte-1czb;^dj3o8!aiLU@Vr>VxAwU=O8t!f8ZCVp0akz$6E218Cz7Q-rM1BdPweWPAC;ZcZ)2dp z-H&kSsGUU)x@zd={r_kMQCrYfAnR5c`VBVzW)XuL+WSakspch3BV)%9Ub17i;8W!} z*v!9@RrAK5Y{0Q{g$5Ad!3{SrsaEsq`9kT^=r`$TvUe@`<^>5bDZMC#lttIv5Bew? z;Q|6S;4fk9yBFQ?~ONr3+)YK(z*wefK-Etm2g+`Y`0~w39%aO4~N1S^jZ%fsO)g>d;e~iOr@dQrJ)oi zYB(~`JJo#n8MY`(s52xC9M4ygRpSjGWTmRLgYJW%E2xHg3GY9ysLV9PWS+0F&IW~A z_gJ~$xqF)yOtFX(O}@7nF$>|G$Bz10h9G+~0iCso(K!^n0sW6r2X*U@8_tRfXo0pfQ{0mLZ=pfY-g_e){8>e(wJNMCww#9|H%}VSy^LGSiKgGDFRTrDy4xI zjtxZr7jE{~_X3U0f<)bJ1Xv4DUe!6EP}{oTPiFmb8Yr?9_riGSW(Z}`qiLJ}g!&OH z%b}iBmSKsp8)ZUN%ng(b1-ikBISSV%hrG}-XX4B~FUcnuOZ{pUH-~ko*pU#DF8UW| z8^AT558-o3v(9)DLTj3y`e!;4=P%aD!9UJC@V_Drs`;~7|4&6Tf&Kz(P3QVfIe5DW z%Sfp0BYRM5UD(N=&S_(6=^DWf)WYgP(e}lGP;uHZ5kfp7&7_Nq0iUoG;}qC?xRPU+ zb7RrfC7T9^ntYN`L4P?U%s@4A0lH znh>(Z3A=a0g#YdnU&5-j49uh#OQD<~a+*&er-tJJrC#2W8W?6pnYKiRITC{x7I;Fi z>iHt~#{YO34^FuG;%D|&FJ{Q&ffY2mxAdzl(_b@o>*}*g zR?I9>8D(zyB*t$E4ooPlL3aa03P1Pb{f0k+OZVXkA=3D=@60Vtaz9}~U9XhUCoC;c z=~ep2g^vFm7)7D@x-dtD0lP}G(_yIN5Iz4IU)cg@IzKMBKl?m2kJvn9T#AYX>2C-qR@V)Cj1c&mOGhzhjeZ+sohPy9Og*O7jsRRp9x%YQ)| z1#Lr-<6I8N=kDSO`Tl4^^!LN@>QnZ{r*#_=9pjbXjZFs_&^2=!&FFsKTm0DilKN|_ zH3At~&kzbtpkW@^fb99)=f7LSzns1-r;y9ipJHVKrSe=sa|D(Awy?n>=r+|zicrG$ z4~^=$tZt@PahjhZHKhocr$|(-8XU*DYd7rqZcpRd})y z3Hvd?`2C$f_1PW9@Y*awHDybKH%e2vYDVO5fx?zmeangZ0Cpfb5R5881~$0JuET4m zNYlfar~IacLjplv{ayxEa;WBGdQmA=2v+&kU#rXh-!oSPf#I`*Jhz?z&^m#hoDedq zbPFmfbf<6bN;5-SU!F$@qo`55>H<65f`*OdWDkmJ_rX89R&vOmr#NehU_32;@P(GR z<@vOghMmfBR+|vqXrDq%4JQanb-4JyVeuL-Psxxwg6`+?p+P?>GU5MEc`2D~eNMqG z?~hRG_W7bweJ6%)3XP>fo*cK>R13fLJPN8?`%4oSF0w$sR+=0)v#(`s30Tj?#i*-p z5ts)>gg7d0ujC1R4b=TJL<-d&`od3SUJ?Q7XX(XOC$&7^ni9{pT!aIQdPpjq?CphMJFc8T52EPYp32hYTb`wOLC|rO zYWw+U;`KrqQS)w`COk}dYFqdq70y;lJOkVtP<5=bcH_Y0QhLEeL3F(BQ;xE>FWb|v zi$fRCn$Qy0Z&DM(^5Qkn?^)ezepmpFrJ~X9jb)+_b@1rwte;`c*x3-nv1QiyCEMGq zaRne#*6Y^!{n3~O=&N-a8e|wNO1cg5mkH75;=7YfqP2Y553Ff6n-`#D08qplBFr!j z>W2Vm0Kmj=QJtkq>BRJc{2eU7yipHmVu4FmY`{2qcUk;ns=m6ncW94Ph_b7Dz%iYI z3dh(47GO`Z?aHL0L7ux@+c-3g%SL&ttI9?hChFWxZ9#KZQ!G1}NWPRn%4I(1{&;SWIYUn}iVr95LUQ?}zN+SiTL7t~Xe4}(v z&=#<$FgCBD-dihDt~VqrHsLaiIe1U8C$r!8udYZCWmkOcqWK%?ges#I%G4$;`{nUyO)hxEVMuB6?L@&3@ltUBHMo;2ofJjPkF}07cvh_gliu-Nnl%*D?p8#-!L>A*;q%3f3Qhr{RbPP(ngA! z^R6T()P*1#$M88sg+**s^mwIM>IF&#kiY#BJigL&DGft;D>3}@vSMcb z1d*}M!i!Bl$+zz`-XkXTnI6L5g1&O`ylxg#TBSwR@Tq5&?@LR63FPGYdsfFHpI1)% zSAx)ivlrb#n&C&!H{7B<1|i6{d7R`1do7 z>{eH`jiJx6d@r8K0#<^;(KS9+xfFJKvAs!qUFU0dK<_XS_|)Nl+auj|Qw+_|F-KCE zw_?x5%L;Ujw{zK0!u)f{fu6t+Eb~u(G%uq}%}S-c%r^9V{XzrG{*qM3`zH?TP~qpe zhnP3tu`AHy>uIs^3tpuB1i+Poyq=nBStx~CaT=u$gJ_(>Ll7CM)%*1q+w=(vpmp9z z0gV{%KCzWz`!1y!`p=#Afx~ss9}X1+)OwR5EeLTE6ewA2FLf;Ijg+&2(;*my0&CHxB|jaCX!zzw=qt^C<$82dF| zs~)+GOF33DX7KLOidsuls+O?3D$-1n_`%!G+l#ZcDig@>>2i0%2j@zzm=okT$$rvA zKa{PCi2TIL0gL><$klWE;bdIuOXe^avehnIO5=lWTFAdjJOt&u_voMScgZ0Td)WD1 zjlFPl=JK>Z!DFlk`n(s7Kf5vTO16*f9^G>3_a6GO{BQJ5#gnL_>mpqCq;a!P;@iYg3MwuW3u#H?@rJ{Vc-H$jzLVJ8|z?GziknxB#ey(FIm@E!$F zr~*`E3QGk_5BNyp@xG4wA&`8}(VGIiQxr<->bv540!BQMeti*DvH-Y0T0#n2#gK+8 zfUOF6_@+XO_tIJ;OXIrCjdKkrG$gptKOyUc^@JqodpV{CjKwZe-K$PmzBl#doYefPCl?HZyJh^DZ2+a?Q;H(#4;bgNf1-3{TG`_|st`Oj36P zBnpw?!y)y{`M(cgR7eQ?{_3123;Q!`{L{tLfXg*&Y|I2JGIdJg{PIY#vHj!bgh{}| z&&vllfhYTb+u8Gl$+I;i(Cxf+N|#udkEmZu)3sY?d#Y$a;S;DcTjiv4@&4%=6!7l% z_W5JR*{^euNY^{#LKZF`sk_J46ebcjC6~+C2q-5rFQo z3*a;rrz|P(DXY6{;!Xe*>YqfNDs(=8OF`ysAi zC@-r(K;a(kk>)j}9g}u-1W)`$cvyk*evsA+g>=9o%-i@YygL{f`Sb`pgc5Lpsx*z$ zbEf~lj4A%PQ3iVBF7jYmn?kxYuXtv`v(Y*GXn6}u1rJuZ)0Cbn@{o8AhzfBpF`>Td z+a(1q1STn-nmvsj&TBgSZwiquPNP^yKN&ozb4qFo+|T0U{5Zbts<{-_YSL z(MvUOgx`}{C~bb#8GKxKXINv|2JJL%0KB*PRqn>J)=R@SmrHA%9m;nlGQ)e-b7 zo8NjXcg+>U{nExn_eblbQ1|~c!^NK&KpQU8RT?05Y=Pm*{dp=pie?|(Fx*U|GI^Qt zx{7Mc3!ZFS%qtlRV>~t@|92%$&$F1dYuhTH>W-J^A#;L`OGC%QakHHbGFX9` z!wyMvRCoeE8WEMKX5aOTd?(0#uhmWid^ZZcUH+|bm6m>_=2poPJ|J8Zv}ty2N+IQ; z(M|z0UYpRMaRWeJJCJz)UeUXuy-0S!1&@48!WA8T5`VBu1F~i{4KUio0TYQ+mak8V3ei@i zjI7&#s&aXIYoED7hN*w=`HG~4y}bmEyU#~)e(RSG`D~UKuk@$bv>zvYmjtmdFbgq0%%P11(h!kn2o;}NH8MNogBQ>KYA*Koi=|uh% zDboCK6n2Q$4o z!^DmS$RS%CL<_dJzQ~Q5R6dKBmm$n@Y?X)of4}knT&Yp9ZXO^9RS)4!&u38lwSQ6T z`i-wOlq#_K`BQmU6udr(#g#VtzHtRo!zOa@{<2PwUc zzbX`M=}WI6{Pr*W)@>H7FDCZ8;o;4Oh%7+_D&Nz5NG@yq7N6B3` z0sqeI=Xf09ue%mnqsLi+6o>|&B{NOZ9ZAxiypaa^QPz%3ia_6$iZO>2)2fg^Xy!_# z!RI6Hg3$Y%VBF_X0-)pR79Ll@M#r?A)2U{ejXby`;aWhxd)3a^gYw^Ziqv;#RAf`| zEKLY+TRq=dJ!#O*X;9qGE-~zDIyBv1T)y|`!EfK?WX-^Pk)G$dtC%fFDBk)9)2W^Y z#!qqHQKwCUZ0@a8j=NlhDe^6-Gc*ACzGl`ceMFDBRu}prT*dOT*P;WNK~bV?t)q-r z_aAje<0823q(=TcdT4KTmjaQ<|2Ztq*8e|40c$CgLU8z?NY(;f+3N@*;9J?M&U@?3 zRyTa3=Y>a|_`d|kP3}TLfkxK%0>YoK^Ql(cUV8KTH)7&(+~oZOz?fHFLYBUEZ`F2z zhx~nMG^-TT_+Dh))o>a&CyilHeUz$Eas3Cyno@D5v`O`AdvB9N_Y_PKI1G?U zL}5rDjxVh$W1epEWH@8vQK_zltMOzwppkD;L7`Q*HE*Evdo79u8(7iWqrO9Q>6P^_ z1Utv7>WaNLBumV6C!M;a2Bn;rcPqsu7WduGi7Fe$V4;uPgdtc5u0UKn|N9+p4riN1sVnQ~V51 z_>cOd2n`FE0*db>j9xLUb}F}mcs3r&9{NRA7dx3$6Rk&;&%>X=VDpJq`A!WLCQ-Th zsA3uQ>{?-&%;JuT8Wkuv7pJW#Mg(cYRT&}Q{q(sn?aH$GmBd~4>#i3R0-rou_8#ye zQPn`ceP0E)S8DxpcEnjU#C=Xrqyiz}MJ~a2YAJu}BSo{s4_cZ=3AxFP^c@Njnfa%p znwxIM#bH>UM1wxpg*Vp~T@4u~&a6 z@sOb>^5-j996$s@QB$ygMhygoZAXD6f+6XdusVg$gWvX?{&{k2=&JvsK&$zi!UB2O zwJb%hlx#en)g)U^X9kk^4CprG>TMu2EhU;F@`V$V9mtA`zGOykOMuY1 zPVu$wo5dq6Jv_?D3Z{1VR^h1&TQno7G^`3hVag5H0`c^g9#oppT$O9Y1Cs)-`&4H0 z6toO3rDf%)5B>nA>)EpRCi_jrA~Rj*y?Kj0M1S(o1~tMsX`In5=2^)QaLK?m<-n>G5QDvv#d>%BFS$KF}k!d z?{uQ|;RR8at?sizc*tHWO(uS}^62YR)Jb_O4u=c!e5OWbxeU1W4-Wd;e{o1`fZ{;3 z;`{koO(L@XV1HfrH!=AQmlR3ke=yS1kIb{PDhMlvLZs~hE#}$Q7nVbN@#RUY{xua1 zwyks8BH+o%hPxwwFW_fKBUV8!!Gy-Ei15=+-6j3f>I=}FcMg?vp*s}%Q}^d}Y*jcd z??$oi8$1`24^IkOK|E0wgW*32^+6HR2-W}N?o8B~PZ8VTmsY*-n7x&f#?ZKQzYBH5 zUk70wI+OJL^8VC;gLQf(Tin%F>wWii6&=6LTd83jtsulEj)Ae(+wJUF7tice`bE3b z@=xWmht6(=KHuWf96XRb>I8*4(DHN(X;}hl52X7HQX`uPjFnt6H6LC8FTX(_@f+uJ z!QkqUR`YW^4NGWZXLMm3jYG?kC{?<+ybfwOAn-;AnVAZBNKt_jW!#s3YA-tR_IhmF zJE>M+wvD!JG@S$&*z+4z4S3U;#T!zSw`8h%e`ajvf9H?ScE4YB`a5;#`qagw>*?lk zB$ln~2|Xo260R1OuSr%4?iwAIH>LU*jxa@A749fSL=_Gvg_cQC$_mGSIWfPV@et zeh;)3n`o&~R1!>ORZL{MF^GM8*2V_*79)oFikC z?2}gj(i;i|;I@uTe#(dn==^=%brOHk>uu6lnZd*^oeGcxEpe}`l-k!Wwgx6FOAGOZ zxbUiz@-sdVb(IaVdS!VAk)ip`eydL-<~QaamTkt+c0xkUytxnHGnVNdSLooIxSqlk zo|8w_ZZcWxW$;?{gSq^iF|H`ESNC1*#;oI(L1VB+rfR zgvZ`(T3Mq7F^Q3qSME_?J~`vvs+Sjt3yHt(#1;(9SUKCfSv5GyUE)<)za?L=f;alI zHGYaNEH2twLM6`WdUCq@%?Qu^{f|YF=EH5qb-oJF$hO*0Zw1Hu?ViDRh?NS1UKOGW%SqgTl;wG)bo30 z@tZG9TR^vla$@J9o^-;G+#b{fnK#B%xbkpS=Uh9%~!2G2*@`7!E8 zR`<@XzT!<9Zu%As^F=Gb-_9jMft<7HY%U+^<@x-hE2N;dr5>waYB|u|BeO?}I3;pk;&S214xzJ=SneDW3gk zGnQ8=pp&9AjlwpQEGJz4j>pJODR;zkQm<;kMN^EgoXpr?@s@@Ve#K;;l23o8$XH0a z7m_C|b|zi?*$@v3c>FHW$rZBf)!*_{Yjfqa<~)~#-zGN?LQF1CwPrxguu47zVBT7c zy`^~^wdv*$7&#TQR z_ocy$3lXJ!s3)BWCd`_Zof0{8U6Q|Ag`bc($nd+<{oALTC|YGwOcFVcT4xHG##H5< zbb+){YjmeOVY09;dA&;4Bbr*Bm_>T@N2wB)ojlxflnyZFUG+OZzy9HpB}ZMoz>fiu z8_SkLF`{VD#@18pBVzE>ffr26hvwPGg$>ruM%AdD5w3o$_mYg`alw&p zT675ncp;qnm2iomS~74|=!A9L#M-!M^e>Poa>EdD+%>N*+^;!0X7SafIk*dp2Ymh7 z)X(v7Ip|omc9UUws$X^b^x?dZkAqnQGOs%H00#6cf{oS|H|_=t}-w;ttQJj-pbc!>~_Io@a}kD@W)azQ`OT zg0PK(NXzgo`kSJ>Xd!=F*6*_=(Rc0^B;KeS`#)!qNy#&xo;G|>&DQgFNIsyf{qiL( zJYnkdkK|V#K!Dw05&!UM32r=~^rdT}!9mlDqyi;b+92^e$8i~|?P|LMygW~yz*toq zCHj)UMbum&cIud4az{tTEAVQlyHzv2pdulm+{!-EImgBzf}e3KX>}||OAJ>}2-@m2vOw8~C3zp~2e1Lx%Lbl7};ZV3yBp!I3_2Z-;x}40nGp2gWIX1j*=! z21#UHLz*O+kRP&Te{>0cNU|jH{c$}%c%{GZ7epXlpt7ihoiS(8UKnrFEu7HPB`I!A zxA;wx9CZN>M`uNcsmh7_fFF%DzuunBMHu}~W-q%zML zHEU7MIb=jDm9>4{jpLWDFa!W9^Z-bGdtc&q(j*|uS^;V3ajq+vQ*rt&^Xk$vIo-*{ zL$LU%wQxzHpOGkNL~?NB80i(VRR~?qjH#6Zl9W?ZCT^}IYcFa$W4$U&MaX)af~r=n zjY6fa6Epo&c@q(V4&<|uYVt|ly-{zn8L_`yrEA77tWas^Jd30NhZJNG22(6LWciHl z1F;{5fUwkT>V4sUZlSW}V@j21s6A#YPkg zdF4Gne}DGO=vaz1X?{iTM0Q2)*BjYX_Z)G`4r_bgYc3T!k-y{+EcqNZM0%+@Ij&QM z)Fvk9p34brJA{0Qt1iL?sg^w;%9Td2E?tx|CMQqo6TSmFa>7>aS>b$2x(Y_0*_QSc zM=3Vqumzqs%o2ZO#u@|CR4??sXDplhh!QT5`lbFvV4Xoj6Z+}II8>p@2o`+rXgonp zS0y<4PnUi#;ft?(kVjys=7!PtZ)4XXb~|K{-mFJE?zFng9Hf z`<8)#m_JQ*EpsNizAr3*Ir5iU8mD$>(PGF#h+5Z%g-j2BlF!_p*Y^|S^dYobJ5VQ0 z=7y^cw!aGP@|onfmSXE5rixpG;6b6J(mZ=QoHa>pE+XB|Kz+sSi=#_F#-MjRjWil^ zMesj*PWSLDQm9zW$3VU(A z?fE4Cwi`djk+$67g?z|Q57|h6r%-E*sfmz_k=&e#y&PI?tnA=E(fE?GTzX-`U8NM~ z=bW>|^k)Q0gV>?0plyHOE?gw9Q8APSh4o)6AGJh^Z6rL`PNS`5VP+T3r=S1rsHEL9E4?k(o8Wj2!k)n}@`d@d>n@ab4)}CiPPv3;R5` zXARCOqj#K4$(f)ZF^2aFf+x`}0%gd!(3!!OMV6kqHhk4Kh^#fo-#)uWj4Px>`qtr* zpuFoPL-%+;qgDt(Bs1wMIvJpP-C#17^iF-H$1Nsw+ThS|ZCFn_;kS0NaO7y(Jo(fR z=^R%455d8=zM`=S)ZK+dqe|;zSjPQU>;7h+UsPQ9uNDY^V(SGHHut^uOqg<$eaHio z()J;y8SBin6|C{Lc=MZ<9N`?l3o$t zw`RBLH$hAxDANDCe#1Ky+ALK}mYdKQZ26f`*@_ zFOHVF%K9HMj>k@LwBulCmh^X;b;SqnTo;weKpBEAosrjRVpJ$M9>>m^9XXw3U4}6# zIiSAcS1>!gKk1Zr1AZxR?l7ll$u;kq@ffUwn7;Y+#EHKsXAK06+vz;v3zmefvxNoQo%w7Dj z6Xqc&&(3yK;;J9$f(;BLr)xr9F^p-nYi-lg@>pEF-Kk#l+httd_6GmD$#vX;-En zna}IdgAC@C;Z1nB$ABz6u0LzE*$16AdX3)3ERbrj6+4Vzogs_D2>FU3exWmKib}h( zDs`~%&D*zd-vRWy1}%Cxs(NnPS&Is*9y7w;Ct`XTX?Q*&JY4Wz!V%oGnMMV@9xVHU z_0wjIY9(d^*q?^i~`!>B32BjBd2D!`(m{Q%gjOa#HeAQ`1(I>NESS<KdwE?2*Lbwm-~pu0SYy8pB$KL!Y2pZ7pY3LY}%Kc#J&z+K;@+`gS}k^LR8kU{>t zR*sRW!AdpLQhyc|iOXA%5BKyt*FZ*Ogjm{Q9rUf-^kPq^XAeddT92oPw{4c%Hd{j3 z_q1uGWp7ejr_TmX){S-DeNWUPVaxc`#WTkrKz$cy<_@xN)$NGxfe@XxJmD*3KF6un z;=DsY<7O_K)X}n>fHz|f6+?A%TRejM$5||_*X0n<=8-3)QSOLwA?&?flTFuZ7(aqJ^F8$J!G~#r^RYOJ=+_%7))J5lK={&2rw{ zfu!hD+p?9pM^U=lIwN=KeOW(+IiJ#VEnlu_O)$NlOkV1j7fR;prKI$^*09+%U*~xU z6gi0^kXXqO;+jYk)5Pyy&e7};Px4E1Tyr~GFr_IKJ@##k+#1M>@YKqoM}Hv~Y&VzW zwBR_4qfFm*iR|pWt{Oj7q)s!E=(nUSAy=G*dmigC1N##U^YkTwyWGXmNKFFgc5qFkRB{ZSEK=bQHO(w$Uyf{xVM_^KNT>I< zF`IQvoB>#W>5S}Q1jHZwo;;GLt||-JSNH^3*T8!nq5M-)2~x|X6~;B@YP#F6YS25$ zmd1J5Tyz0Mp~JGT)zY3WKa9$uUdu>cpR=gSpepYrAZBaf&%>&zp2y9 zPQZy-FWM?A9CN&*x!R`Rig_tGqfe9JgyoiFE*;BtmZ%k;^h)aOB(6=sml!-lf+3#= ziMZEot3i`z3j6JoBic)2z>XxV9K`ODs>;Nt=-!)%Bo_=WViu)JuQ(whA(MzcouL>7 zvPnPsmfs%ID>%hg0n}r=ydW|dsmXKopzIfZQYn^1eKO766t3i7!k3y(96PHAN_+;x zIKVkab_uI!BEDY7CBAM(0UdR$DRZM-?er>ukiOA6?dCszJo3G${o$b2%eg}zl6C6Y*-q3_#gg`*P9F>TC`!| z_H}GBebm)AuDxo`izSq~(9JrSHDw*u#i;L}BHpe92OR|Nl`MgZ<(R1^-ZfHPc*5@`HWoyAeqTky#LyF?DTGp#pEkxuxFRCRh_TE5PT#`+_VICt7StVc z0sT4L<9+TN_s;JL``1+Wfc53a>FWt+{uwxohM(Wn(ED@K8%b9bWB3qyT||$2{5+jN$K3X`W%E__1{L~+ zIxbCsOw8R1`>rL{c>~N#mEYx-SsYAg%mVI5(62lt5(p;w2HDv28u#fKm#Uh2zo^6S z^nEt()2ph-_9c1zvYV&q$WQ3wZ-j%+9PJXxlkR&?0r$G z@-_D5XXF6{Tpc6}fj(|N3cCWz%={{C0|K|?%2pCdCTUce&ZoH=1&3}wzgI0fUJEZ%4@^S?Q<*5}d+5IkxvN#E-<(9=`IU>tOi$zKQiTlxk() zK`At&$u@7l66X!2l^X@#b}X^OThHwPtfv>qAEd;N5jYFwJz^jx{L%}Uae9>QJm4-S z3RokAe(P5491xgBrNX#rWiN#(Dc$OFqQd8}UKRbj%bbtRG1KN=S%Ykaj*`mP_hsrX z{-%&D`yoyI0V<1jrsHv!qLuGr@bo$snC`A-$FW1dwC~#uAeV19l1pb<`x5{#Wbl5| z-2o@AYhU>MNn70IB7%HgRo69CY8@Jp{v5hcfq3`Fya2s-O0P^_ECv?NyCnPIU8$G5 z_fga76!0*f>@Pi-Xpm<7X6w-M;`C^3NVqGeuOC4vxPl-nbWnvmAG_@G7<$?(+z}M^ z3*;m0j*#lucv&uMrI#<^F)zWFwUsfZ2k@P^0rDZ+TVIaN^n+LQ>-^Py6<@zfxNTBV z?6P>Q76dh~tLKB6Ak^_YX`8mygFUsnE>G7y#) z{r2M{E~^~2{#yE)dnKj0)Sc|5_`8a0<@r|gz`L(-w8%Q8?Aq;ywf4=@4toBy^kN)F z>35)>;JtvcLLGrJEzy~@A{Dx(i3R_nHIAVjRflq#tiU1jXkbhKN9zp?;$yT;g7k(H z#x}Kda#xEvwgZuVGHx+VMGQj~+WyxR#bZ8`58q~W_*r``yE4c{8{5dsRUkb=A4q8Q z+E>7sBFW2$WpE!qn4Ii$FaWB8)*;5D5O1(7mhV`bvKL}R zmnCqv#k2n@@dY13r>jk;4JXO1BfS{ZO;MKRcs3s(P1pFlXp<(5O-%eixYkFeY7+wW zr!#1YO*vG24Mi+8^=L`0Q6eX=X8r&Ik#}N3_S(gx8kFSQx~o}y;puKWpk(>e>5{DMn=>X;E-^IfI-n7&dfotv2Y_h z6bp5aJoLoa(m5Ik2q4_#-`;ATSr7{_zP{hQXj?i8F zWsn1}%{eU2NuI7-Oye? zod=B`;SW1^YNU1q`c36zv+NIn%&9?1eeTXGd4lf#`YM zvXgBgO4Bsfim#JIcU8e%tk*H1w`VqiV%=hhxCHDT6E;6dqGr^nbwg0YjYvV@ylHAVJ(M!~|R3Dwh9M zWFhwUZ2}MFSHs&y~M&&Nf4*)Wqn>)kE4~InxHG&sv|g zw?zlM+0WH)`Yz>i3AXR~IF$#!lP$@JQ;whqZ# zAQe`Q4MuwP9Z7?P!$Jy&l8rht7C#P%@fp$$>7=(b<&dyGxgs!2772XU$xTLXV?B3| zowV4qyWpOFnU`TUeIgq(XY7dn8zDkppq9^F++}U7zkG!(Y6r%gwnedx!&!Jig;>>E z9-E>e;uXRT8QF?7_6Pxz+bn)clbx+r8b>=82*#q(zpNJIm*M>JcRXfsg>RN~HxjSO z>gS!~^zs)A2~%`hb5dfMLX0u^B&*t!0?id}IXST+3@l$wW`$0xIDU8_Skxi{-GfIT z&E?k{;|N5VlEdzB!)zIP;i469iX}`p|4-S029;mcGSpvvTGKU05j> zsmWz=i-->P2VZlwez#lR}DqON%qi12!R< zkhpVU2PxJPKZ<`nGSOA&IJn{;yFJ8~VjHtDMP+7%yCI9U-N+Dbmpr`iE8YXULNY$m zSZ2jvdCOE{E0?aa6!@uwU0OeFouKPD6RCoJ?ooiOW(b~5`{-|%%}2z~N|C=Zu_1N9 z#+1;RN3EH*XaYBP>>p>O-|LnU(^6);;Y0d3RMG!@1d)Ff6w_hGRUl)SWzGtCz>>6L zxX`d{C!u21nR1Laokx(O61_?TW~mieLQ9)akR;YEtcM8zuL;BD(57hll|rJ`uz_)) zX`|&nth)yi_;xBWpp#vYp6q`&z#o?a*WQB-@?Zftz2sN$H-gtPrK{mntpo z`nhxZ0%m{7{*0wdfNGdwOE?La&}*fqD3vA~aoDFmCx6u|3H6=pGXA6OEigXU zc#4sGWL8`8Cl*iF!TPgGa!>5g>PM_cfhJ?j;d+V+>*4F&Jx%U<@yl= zECnbmYODyfpO&8G5LB`Oe3Av0viw;AD&yB=CECd@&36s`95RP6{mo&QZGQr(e?!JU zAV5S48eRzcYx<#J7mv&&w57!*%vw4=BP_n2y zxkAXA`=$(6&UO|I-i?z52Lza^f8@6a>SBU!r4dZ7C(I3&(s8vUYmv#oz%`{)HHO1Y z*OZon%2KjqeK?Y-g4E+Uto=#lsIA8eg2wxLS^Ku6LBl@jmwLTY<*W$=h<@+4POVs! ztID;|y;85v9QOf`?@ksIm^paEJ9h|SIlWJSz$b2 ziTec>ncdJWGdVtrMnew-%!Db6+)I<`mh|CIq?*Nt@(j_2$vbH3<@0CpfHgWP9;Zep z#lzF+BtuM%9o3Zp)tZ7~m~xjPFig2CfiFx2Sh$O2A&o!VC}%^TTy!frchXN9KCKj} zMPVUufKx+Mla!(|j!8;he>`LiA*buPG63`PI3#LNtY{Q1VaIB)Oq_r+tOVu3olruS zzzP_%!Vm>wktR$v#W7PDzhami0@=VJ$a=IAC159nAz;PA3_%#4I}%(U79kv!E{2ZJ zdL`lGlc^yBd@_9%2Rbd+1n`_JyNbh{%w?|OtlJY{`OStl11%-MfAeHv84!Tg(BPzzm2Y7%%cz`&DT zY%V5-j<*B*h6$xCf2ed_``TwK<@gI$uXR84IN*HGzqx1M_k1kMoF!kl9s*IYdhk`D};JM zf*_q4`^0QaxIstg3}P{?An9R(H!;5{CM-J8SAYr5NYwhwe=ZqIjGe2wa3<6F{q{|$ zin+BZIyKK@NW3sI0fVGO)Gq=&4}ln~`YRb#Nx~$kBm&0nV}$U7Feaq(OyM_flL9R( zdLyV_A>|kkNe4^JH9maf#w7 z=AgUh&vZP_Fl^8BXR**%>AYqY;ipV3TX)d7PHl7V9_&8|Pud7&l3PU)a^d z1rT=(s;CA69#YtYCI-Ve5X{3zs0GIGI!Lx&^JFBE(gMLQfuA~%&IN{et;B*0sE)c0 z4jL)ee?nJX4hmZPVoQ{xx_33R*G_vheF`d#No1m#laV@Ewr(i*>8P0;6G*0lP@ZI1 zw{G3rpik_Z(-|Ue$nIhfECzE5Fqr}+M%Y0V6b%7{Wwc3oyoMtNwATy^5P0@982LOf zuJL24Z!9Q=i($@b7yT|(-|_>dj~SpYY;Z2Fe~sEm&Z1c@Dt9(upFp7|;UfY%2zon9 zoHIE+5{4$CE;sp)5N zh$d3EawfffynaZx@d|b0kP0B5aE`0Fo)XERm@4 zAftPi>aEpWYA*C4MxGL6R(*~E<_?u_I54Aqw5fcjwU-RWxGzL>BFnY-wZ4V|qe|z9a zz|J5zxc=#u-<~iwCuR!lPDkwg_RxBuBQRfi2zmKL=S-kozCAj8bGZNJ@Kxcp z#IgJyaF;E-ur?w`IfiSomPBbLV{1TT2=>d8Pc#a0v%5u7rqCCAbMg+RPuMCq(``c@ zl;I3FA_az`c~eA^A|cHv-RPz~e{Q#pG+x}lAhp3tpswwb#nz-BpM)==7w-$wYP`^1 zej<#*_4^QEe*k{-4kP=G!$%xzporhwvp*I&T4HrUxHX(3P@MW&G7*gCO3+{7{-j+3i#mx5S{^5A3bd)H1tp_AaLY{e-y674oUPG z+7(cOpaSW}jE6-MU^>T7n9U;AbJ&Q@pLi;Ad~wT8yy$R~n}^gR^*Hzd~u_K`BaNve^Wsjk=;3!fX4Ld*vA}R9U4Kc)70qGCvlZdw??SZ=f zS5Ul^QUu{ImR(ozFyu!he`%2)kuum+bh{oPSOS=|L4~$59sxDs$S3bKQLk>*J(i8F zkDO}g&eskgn(mkk@X-+`#3YJo0>$|;6NBuWS33`|ReZqz_vrs6@19kS&N2rN)MSWBT(%5}sG7}Ug9lwi zjd>pBxNMmcHSC^pu-rMRBj9=Oywj*X^v=4q=;x1ZmCDU#*(|S{*=6;~Vf4Zlk{Nr8 z*_a26TJ|kbe#4=Sf4Hf4*#^yVLr%Hqj1*|mS>kWWDbWO$OxCsqW@i`&)}*A#SH7|_ zojO=u*o^|L`SKsm0GI00DHMuFD8vzxp8SB4jU^p&R~=cIrk>0v$hBG4AGb>kzvKR! z${OK!nF_4T0QcV1_6?B(ENfE_iX0*658Y~^&u|ge7ye=>e@++nY`7~f7Gns8?Mrt| z_lAWRhbOJ6fO6Ni^i@cv1gr_=xJ+m55t#!UhCo$>d2jyW;gsHwsx%yAIjv8^ISqfmLAgwM_^lGYW_Rd_2tBwXH&qe2gHEnz&e` zF^p7^MK!{55PT^;b1s1+;E<2*oxhX?{qe$Lu~YVk_b=lS24P({0gf_z9c|3GzSwS7 zpoK5$fB$DMn&ub4J65h(9Ktdxi(?}UB>(qS*#`^>V8U zE|}V6h&PyP`_dHp1%VuAOA==T>`_P=}{nZ;?G9E$3^iZ8iYmq za#F+PSAwD!MQyI0g(15{tfYBXHvA;~4V?MQe+bu-u5$%z85*$5Xo1lOp$$6fsvGK( z%k)yv+Rg;Yr4=-$?a64Q3kRP+e-<8qbisVkx75(Rk`YwrDx@I}Gg8xdl0C<%ru9i0 z_WMsr1T3XZEi$#4G$@q-Dy$_dLATP!Dt%6upv^v68z%&9DNTxb)OosZZJg z3RrzzJB-7LI!912hA`n#KH_Yz%?Fr?f8lf8b;~-#Y=#}DWr=#7Y(T&qnRCPx_cIWy z)yU=L_2_{-y&iLS)Ogm_BJDfk%kjO2wYsb(@>$odZnYDe>m-r<-rB6cH6W~8sn9sg z?=@XdSv}sRlo?xB8FqNqwTb_qkqKgez}#77a=1*=@KfwvuBcJ_TeN&_*-h?If8_f? zwTYc}%X%sGkPFX+kA;k2Ya;vQ#7V)!3C;*YB@0<95wD&QBTB88YN8Am;Rl@;C{k>8M5TPf%G)cHp+SwNiJ6Z z8dx-4Rals8Il$U*TsknqCZr}x9*nv3W0-DeIm*HaW|$;U(v)j68IAb_~VIwl?cuA zR4^>X*Y{MeE-+S&h^cEif1a9lQIB+6`bk3qqm^3M$pOChx`^+vw8p-1QVO|3j-g;) zG;=_e1a`n|n5!M+2uQD3WcqUhA09!z0(Uo?_Amj!z&cO+k0W;u-GVeHg6kP@>7av! z*d=*V(26j`gq{&Gfi&c)pa%BvGG930{%@sThlj$Wb58OhTyq~^f1smeXQRyg>%9WY z)lu*|_Si3tIigcqdTg0e7wI;iD;(ySp$D|GeQdlwP`Ti}3geVyhrtvPCIVaZu?>s% z_a1;FSeB7$Sj*I*LXJ7OFYC>}1K~tU5B$ukz+@H<0S#=F=OOcLnyl}nQEIhnjeh&0 z)@_uS{f8biYfoZ+f5gFCl9NRRrX;3ZSE&7=CK@z*jFLP4ka#AR4s1%G=?`HE1Q{u{ zk=m~5>lP5o@EwHg^eMLz3;Xn+4qE^qSB0=) zD+X+24*h({FFUcKGwBUoj()~xkAweCr~+bp#z$qUwOR)QA@F}{Zy z-*5>|f2G;b+}~g(N7r)hExUeO{%pc=Dq~&G^RDMH9JI&ks#+EsrDBA0XZH9CUmdZt zr`!ck(gbySwaS}3 z(EEPAPkbMsPh7WDu2-6+3Zt5p#bP9bDap%MSsJm? zYUOhW2V8558L^t}qjh7)OeX841|{Q|)*!5ko!p^`IO zf5;W~+45s;o7TsAD_?lEzG|+z&cDrp+g(pmI4llO%Gm6=WtFOL_=>Kc8OdIy5D@wz z#V4r*L~99_#n_cr>7?E}E4|6HeY-Nd1x`U|R?=f6urB&_(^p8^(qF{U{{Hx9of^pDJ=neuVT+ z6Z17GCP$wZ`f&7ZXK1aO1;h)sA>xz9KB}E zRBDZ7Cpf#i%w$bfWL~`ssUB;sarB{GKkBBWpBvI~wpD)X)*HCh*bJhja3=V*e^ZOP z&#tOk?TD(a@vBy4blZ5Dms-YbePZy-q(<}jinrA`s@5uOlPu?ttsy2Jy+atB+6Uf) z<%rpe;X5;-$&8~{e2VCUqt|a)=QM%6EwDDu&W}pvW;+4!Ha|vsK~&;W9K>YFfC`ba<}%8f6WVJ>Xl*ih`dfE|7xF2^slA->)JV68=c&%H>zxt zQ=au}owXmPr+#$NWZ!&f=U;!YDz9F1VVBP06i*p)pl=V^vNcLHd9U9duz@0{Q?d}i zu*;z6!^6aI4C$kUdv~cLhMftG3!3MAo;Ob!M-8^?@j=(><@XQw-?Htbmu-{+B7Zfz zHmqeEYed;f9m>`8&PIwn8WCHDbL)+< z{d3xkxS$v_+lty?oAIJ`bkSnt|5!7Pgi=`y79>VjT(aSK9$S}KCffnX!<=>7c=jE! zDWgn1WsIbe*Q#_6-@ajVNI7^@T7SJ7^HW3?&9mtfN@sJX%D*<1S6xod!{5)W{OihT zxo`k@QTCb4JuQFWU-j~@%k@(>bALZWMx|0^2cFERmf6`L)6Z~3vAL8v>Kx+ZN9IAn zaIVU9tKBixc2MZy8J`>qnT{Lda;Z2jgf@Bs!7?LUq!o)`y-o7#JQ(*^Mt^OTsj6Fu z*0>-YiTwFXYRvr{1mJs|S*B|GTyfEbqXA%wYhNH)opX^~wOTQbUV}lORoEL0Nx*nh z5Yr~%>qYaU4cugS4_^T^GaW&>gNPO6`xSl0AG5l{6T zY7XxvZ={|?p~Ct?7dRMFOQdGrHep=}yGkR;S*2D=#&iUst}%}m-c(uFiJ4r&;MG(H zz`VCEN%LsM$tu=VNUnG&+mi}~UWH~>+aGg6N zotuIXSAl=-GD&pTM1tLFiC_1<9t-RP-xP>ZB~~ox{+58lsY?bb(~6jNI@Cy8qmL+) z@**ljy)G^_t(>gaXnqRCVzu-eJ2F$yPeY}0vWcFpyF=j%%DzHl6lrd z!@Y6__XI4jMfawKitiqC6lVhD7d;mk`yNx{gvj`mot$?ya3j^PnHL3+9V!bAP1Yvx z*3hMDw{RC>M0|mru6(>1BOHYcARH|A;c~)y_Usy`1gsQ9Nq>55Bx_=Gn?jV!auRvV z9H~GR!aCKykd~NE%?=_OLUEeXMHH=jUsF`xG<@LtOh^tAhX93SU}`$!Rzr$BZG zMrBtvqGBLNMSl;u%rZH8G6Vp_1Nr9jXW`FWeqU*on(PTpW?K1p_tWY=VBLVW84L%4 zj`aclAeG|DZ>9ALa12rlAe0JKfxScXONM6$IsW<_zyt%qOK))vaMY1_COhQ*iRsUq zLX=WQ!IUwSH(EZI`lTvRc&vb`!Ptb>$Nz6=bocyOn12$pB;vamW+=oHXvfl}N(^=a zuo59wffxd|4GCnzoR{uE{vBYSQ{2UMoLw0{Ma3{v15E`+`@_1D6>-0C2~VZ{FlDS; z#NVO#K=YA37oOw5_(Wm$h2fm(yj7uG!Qql8u#8r^M^B5iXhntyMp*%;P8odQ5+B~| z%J>9mRe!d9=OT(LdHw~2oh5rHea_J%^i(ytbSji#Wu0LT&e6tLNygU0DR|+@xNRPy zA*ey&K7nhZ+;=N|!boM0J44gsZG^30Gu=?6nlt_ZYSjj+C zp(8C0NrVW(mxPi+6fYe^WppV@ftx8ja_QIi^na^#Ag14hfPIt$(jd2Na1koN+v7{y zB(@$mne;?Q%>qy|_ILs7APrin@V&|76t_2C7y$tqzXMHT5Y{eD0HjwBpGj#lYCIaG%div%j{0`amo3aM`%AFh#2 zA%E?sb*S#S6dqm2cbB}FlpP>C@~)t8%(P_?gLyZK)GeiK<3?8qKpVFW6x8&%fd1&G^NK2$AdP@jxWn6 z!!-k?hW6Rqy>;N>P53;qG2{p~4yad%n16==8Q9&*8ByUcAl5{LlogIqZPaLRK~cnm zTdRrGapG_%sToDcG1QL$^&z+bx)|V4xKw}u^7sz+NVFimx@{q6oz4gZ35QfeUODlL zkm?1B4RLgUJeh*yqtjzC#nj82DLPk--s!*kx3-5rgCtwia_&s%U&~h)W9gz7W`ETg zW35e3=weZu$gO?Wc6)uINbuQsU)%TmZPqyt1WpP=^f{V0`C4Qjb>X;=mkR_#5O}d% zYn*FwD>k_p;@opT^Ki(rB~zA);)I<6;wo9EEMKFq#`L*FQxd09>llcLaZ%)^vZ1%JK#ZoByS(ap-Y%p;;I61+%!d`KKJe{e9KKa=R{YcIzC zMA6j~ZX)>Zt+|4JUIberkbNRmYtMt2)N=FDdj4Qm>MuV?5b_RtLC1O^Ymp5>8vELS zVQa#ff>DeDUkEiZSx$u;1Hjc95aOi4FG9j9r4|rmK+u^L@Y$U0P=6ljD>&GhDTmb8zZ}u%# ztNr_);%2h?ilaScXYgz4yXcOe@N)XYtPD~-KX@6iKN7`xpx>Qhqo%HM9PgxuWm?D)_{+<4<@Sc7REwi@e9!}X- z8`oDKn-$X=6<~;JTeR9eF#zxfOwgqQENjmsezn{P8q#}D{a-3M0q{T&>`;M_A~hoA zCp@rzAb;AU{skikHla$htYVOeYRiIBIPk{=7C`|nLM!XY%zubf#3c1gYJD~pGx|8* zktlv3dbw?)uuR+pon~u`c;9%}Wbgs9CDWlx$k2imjD#>BMLF5J$xU+z*sf6Kuw;du zSCOwgopO)7zrUB@@0d&g$V#>!3v)xa_y0y2w2ipBc4IFy5!tIzx7CX*fOW}C`hS2d zJ?9R-K`@e0+<%EQOBp!h@y`DtR7C(>$vF%mr%GQU%@j68zQ>Up3HL|&u~C1IX=6w) zq9KKt)=n$X`b@_*CKLpK*DZW}D3S$Pwk8Z)BWtDTQ_MYdNBZi3h6(N_1UBy|3mEx| zrgeaMyML#RNo+yJg)l>mKEu7T`K2*>_-sQ=W?C|Jf`4rG0MQe)Jz9%hDNcfc>S8=3 z-KddMJzI{$%-!r$wBD$gC`hS*KF6sWu&I=C-Vy|M}HO%dMNL% zVrA@-HGd0CdSfbydS@$n-WhpzO8)8VdEOnRxFuD_($Lo@Lm^`1mN!-eTpPUHa=pYh zX^#GkHWOQRPdwtx#(KM@CLCX(B{B1L8w?}*SNTtxJSJqri2d4=?u@a6X1iphMiT#% zi^-1>oFT3lU)uOPUk1)}E;1)F#I16E&qxLMs(*o~!D4ia-bp{r-`Gj|?{ap2KNC)~ z2KxtUXMWn!eXT9s_w;Q3X;FRR!fnxlgvJ{$5_x8{}i6b8m$!IsTDG zgiOcE#WR~z${6*oBot9dTziBBrhQwt$Mhi+0heVq^MX9KMxm4%(Rks@OG+zJoLont z8Gp8DwrCAErr4*(mF8J_;z~#nILx~+%p3|*1#Z_Plx}T_3$(ErBhYxEpof&d{f(1p7|Iv}_O^1)l`ptp}C zWiXoIQ%wthps&$Su^CSK&6>CU+lkG-$$#56#2whUa7;?bdeU)s0`x3WSxaF&1@wYB z1i^zy!MwUoq!2|OInZ!VE?p0lZmvyMKr| z{DTNEOrpEsMv?5zz0ieUgceP@4ss`v{weA!f_+(jL%$V^(uRwWt6{Y*@xu^uj{xc< zSPwyd5v&Wz;6k&$?a~o8^>&aZT)2cK=#~mMF0qNE$!c!vWZoIFo0Z`zw+rQhLTpNT ztVWv)M8XPnK3jNXr6ujV@~_Cy8Gm-aJ9i_;Q;35SQto9A0EA0SIIIhx0C%Oau!JKZ z8w!FXkdWS*L_u+iszGc``v&y4!0{BHD57MdLRjd z0uVIA@=|r^4bEE2KZD$1#h& zSB3}rX{P%9hJ?VlF~&mx4uAOLDt+Me??5UdKM3M9;erN zGKb2=32QA(8+X(2y_}A;JKROxd79sUsQFzlfZc&<8<~A}8F}t58A-fJi_^~-m~j{R zPbhU>gFC01c-c?3?4uygBiX^XZ#E=*4??WfG<0%~xyfW(qpMzA*?+K(kx3dRsYV0l z_Hgzfc&e{KQ@z89Um(P3zK#=(K4Cn-5*>IExi{fvK#NrhBr}rw8PQ3C1fGauaLWM# zo68O?)1fi*<(jCkaNaR$E>rcCw5a1Jn)#MU%lHxq(b-oLTm)PKTh7WvsR-`%{GlA` zu?qyBA3~=JdD_UzK!2*Ql<8X7VH7pq{5l{jbcb)WShwqx+o~|S?OwdOAYekSU4uNXhT-ro|ZP#b%8(P41e&)cOujd^4>+El-x(` zDtbf6@CFt6aBMcl)_ellE&3g--uP|tT@t5O{}Z74J}sj-%)qXfxH4?QEMD}w3;bG0 zmk5PtQ>F;#Yi>rY;yZYM=ls|;_0uqz*|x%g}V!3I13P6;Q-`_dc{ zbUXOHm1p@`Oi*FLy}awUi8>1L8tmw<(QC}$vq8wP@)B1b;Fhtiv1B5d+f2Pr<)ilf zyw4cl!Y59UukSwbWIn#eJisI&{e|bhnTSx7#hLMCIDei`w2Y1;UL72ymsE0B*2P&g=el`@BkfVQ2_T%UdAHFRo$6X2mHDrH^+2EOFG zYgU!?PxO&(8Ux5n;Xf3gQrr$O)}Rvmz+;1qUb2z--S(MnZmbAo*!%{CZ{z>wq5+7h zMc+{bSAX6tjNB12T^!`7ORK?`#wZUN3z?1bY(XXSw3FoRr7A?qi)Qpz)tPZeZ;Y<) zseFN!C~55aUC)KVr?UH%nu}a76n_bk)*o;5N43|3j@3UQD*nSf0bV1FD&$cOGMm+IN|d*WMmd=oRP-R}fJ z27kkkb|mxPJ0Xbur6&Z*y{zs0z!&1|d>jI!jKBQZe!jl&+(dbETBs=%DFgo8+vUQ- z-_aM9)OS`>vM~Tg4krWk`b(xsUf-c8DYea6iYIsLc0@91u95fKPvK17yOJY+zIE8X zy?$3X#?JwMD0K8_G|Wrj3gNxsRRNBz$$#u!p#+V0Xyg3&BUI8Wl^@@{eX*s6Zb#;7 zR=;dFMVR~0(<#UGTCII&LB;$_tv0>;QX1H|a)`V_F(31H8_wPJ+@9b7eEB}=d-k+n zvS-07Lt{{iy21jQg@%&NM%XCcl3{+%UE%|P8wb($kny&}DvIb}QzO9plOC;5gnt14 z{yXj$0*22F`_`QGWU?V$lX!9UF*@4)5(usK2{?`;k_L?{#ZLqlS<9NxyEK^BP?R@; z7OtusMq&=i5>a|GCZ10cLsPP8m~Ebt8R?=)C9`}%oE8R>MOrbU{X2pY`^E`>eFY)& z!24)w4=n<;NHuVG>GTPL!=XtCMa*`I95L@?1a&MNZ}y?te6M)9q(< zwJOIfreA(u+e~BG9oSbd8PWcT*YR7P_F!}S+||LU@3j&!5EK%*UpTIam#C+IONdU zM{6_(U@}_GY=hXH0hn>)k%`u7oCX_fr4pOM5 zZn!4gv}4-j+7CVWwY*TO7R5mS9vag2XnqTK%E$SL1TL?KBZB^Q=s@o>k?Qe}7vS6# zREd(ZvJ`TTcJl30lb%HjI_Hog(COPl&dtbITH8JXG`eNqN@up`*MErC38iI{MwVuW z#xMLoq%l5GnK*_bB`XVkv~?k>3Id`bs#Ez?B*3LH|5e!ojj} zpp+>Z1eM?Cjsa)IngDrJ4$9d6$_LLYZ;Jf;3;z9ymK1DE>9VDsxa`8Ah-7C^_yzxV z94jDZ1Z{u=b7=@%@PEDEQ@wmG%7-r)Pmu>UBPmSjG{YCUmHCc7hz?V_+g0htUphKU@?$!$>_lQ2^S z%r%_1O*wl|U`uNJq2UbsB^i4vN#sayl;x+i9;Qf20>v ziJ7pU9vcJ0O^8+_A`1gS1d0rB*6-Blv$wfSpFqa*7oV!9C+R8H)AZbRST8COA*ZbG z8!;DaQmaf?WsSUQipJzHoLj)u=WE?9i9!<=62SaKdL#FyjD+JA;0cBSryeo`5Gf^L zWy#rIwYZ1pXF0~6l~qsGxf+*DtO6K+=^=5KKnYUPT?Xrt0g%KZf1O(hO++7%E^MPeG8+?P^f1Fwk&6az zA-~Uu9xg51;-WdS=7V7Qt^wGFL#MYQZ_Y*Y2C%{qJYj|u29&83=@%5N6wj>==yL{0 zWcvO)b+xLmR&llU1%aiRdSSgF*S#}k+Cd5|2iwv)I%<}G5Gy-toHyRLD8v{n5r3t7 zdDRM*ZXA7VoHtuX!OwpzABg#s^O`~tn-3RPm!TPXRz}#K6Tn`SU%w1q9^Z~b{Uslz zgf5GF$mZ!)r`x&=Pq<$%E`K?_XoOn*8Bwy(@KxSc%azw}@DH4m)lk#i%WoqucluU% z6uOMj2sK-O4R)xHIaM@N8i)=+AdJw{AI=8=fFSfHuZQP{Dgc>Md_8=*F)~px=W~Zz zA}@iSdCJ;a(bvy_eMR^%G{oGl(91tSBvD*PUu#~RwHue+sA<|k-1@ZDyXu6dB;vj= zDgJv9x|P0C30;w05?X6~Z4;r3-9`v|barvx{SfMZlqLntYqcNY?EbglMO*h}&m1FP zq4F~#uULS}@T?UB*Q&m2!D?uA5QzIm_51O~WvkifP^ca)SkizO@i&RKvwk;iIFs~x zDgME0t7(?3{&Ze~SSQfXo@4O)?;?xiA+m3Sxi=1$3wxU^CQ#EFpwrV{jq0{_zHw6|_I)I_Nqgy#vt*k^OF zdy}?Za14WO`wL)HLHgX6!!uMr5TQod(EK^dON zG7x!Xe4GJ&P zP1|xDw3kTpb+d_TBG^tvpi9pXdU6BlzgXrzn8s*!*Ss^4d<=)`%t91%|3kOi{!0Jq zeC;;dU$2hZUtyLj=5%jV0O}xk9KDgDJD&$|5sW0sUN(zek0NO`HIK=lMcabFWC2NH3FL$?njT5;oc&T!8u3XUl?V z#+N7Q?Hmxqh#5w6X2c9wFCjS+QQr^+pbMzt%t}{pfEz4h*$d*?m~oj(t$VLXXhFgAlwmq{w~LOA#)DVU`agdK}{c7nFPK;H= zCGPAfd6opoI27u{9UsZhf$-9QcIJY|0YYtg8vMGz;Fl;hg|%aV51`-SdGqGPGf~{? zB-nd^bj^)#(EU`v-is**UMnl`%;D8zJM)00aQYLS2icq4etwz^JQ>cd31J6mHK1NW z#^yQ;!0JcI6_b?1hs^q=g`gJU%fKpN5D0R}<5{;=5Go47dZnHr?K#^7+*d=`$LrQ)~tRJa;SDD#uP`XSxku3 z&q@c*6U#;xYlK^t0mTT?!gC!;X&c@uSx?W++F`LWq3<1ZwSp)6$h`kq0-9;@?ZAeoxz}g-vSSY!`{n(*>p#Z#U|^5>cYXE7D2bIUbecv zsa`Mhb=F$oE%0R_Ux0>|XS!2vTF$J=nsnuG2>Bx`tp(ZLgDZtBl|+FdOGF_wbbwAq zP-1FM0KfpyDVDW=kIE#qj$&j$s8HaID6>MV>*$sU3GPAxu~Tz$3l=`wgW*{Weyur2 zny)ws0W2uCiTMZChKOzCQhkm};gSL@hH58P++gkeObPw+p>q~`j#enIxz#-CG=k;s zY0$#~N@ddqO9PM+E=wPV5ColzK8Fz!ZS_E^hLawvQ<2Lo;DnQDLMNIxheB0aleo_yfK<1rH!UvzV?`ce37cJ zUKff&{ehQ%+4}>pSf09m0Optp>&Iigr#E>dmvP0qF10?*{=hM43^Gj3h(;h4c>mD* zL`Hb(lDMF$>*>kUyyfMZ<$uFo!fX?O3V|&nlaO8=O#ig0=j-hi2*HFg@Yw~7U>ixY zb7A=Hq@o{<>-BNk?!UfB? z91hxljmJhJh##iN1h|pzJxb@*`UOb3$4dKo!cG-FZ~N#vBNM;q40RSt>!DANJ7K)C z-A1>NF*+x;?%$Dwu<8Y$x%tXe)Z~q#ml0&^8J2t)cMC8i3=rhesSKCss*62 zAL3ZuMn(b7+9h#gj2sf2I^%o}NhK>z+A_>PGXNUY@m+N&XT>UFwpwT}YPd9IlgYwZ zB&Glr2@dr*f$s5LWQr81LdNDEH);>FSN*9v1Jy|nl%K$sUKWR(<;-adjDq*-p@My3 z{8QoT@Jsa>*ht91P5(ly@vOUl)~z5+E-FHmeW8oE@9$aHL8&U&an{9k#u$zq%lpzx z{iTYm@@3wLF|vUZ$#sdi9u}q%g>@0|rKB3_^)mZ_Xsl82c!*)?Jb+YY%$G5?0!0#> z8MiLY$iK?;Ck`F*7d|%rE0>720v~@J=CZ+g(4-PWPHLGljGcaJBkz^;mPk(K^PPn) zL&-@hIYE#wLp2k6f*P^N92}G}iwj4|A=uwQOK5-3pvGw4 zmPO?a34VeB0DO24jAC@ui^(2zOgvw9b&iH9lx|;mUI=8^XEuP;uQKWV73k2H^>3b6 zACHqDv(6;Ei%ijeu2bqg)Jyjcs}R;66_ynL_T2kKE}c|1cP515dT2O>b}*|J~sQYbd$ zJ^t3-hs(WZwc23^@-E)ptI#Qdvt#k@R0|~L?)1%`8`I(Q`^t0JOoMrU<|N$~5M2|1 zya#nta|Gy~Z4uLP#NA(jb|cjOs5@IWb%&}Up)b=s%)shHl>`~ad(R^JW33uW(5dnI z6c4q$OGB-QeyW8@)C+8Y?RLz>xH}HxkZF?Ps?@dIaER-7U04H#zRUZrrpIgF@ETcuI-9UA;}-oiAlNgMOmV? zAXplg6GUq@B!3OS2yIQATJ2hw5V-;tfBgWY`DdhHuK!<)3dpk4pD_s0h+8Q4DjspqE1j*+MtRvgFLK0gF$KmX$g6 zfwqy?A{(2#&XmBCV!h<^c9t}7|7Vq3SJKIKGRH|iwfkY-jx^AI=4o?hOfiQXfAP^H z7A&`3l#fT|7b<|YK?Pig2t7m=laEWpWR8?rEHuH*KQnvCXlZ{0bggecunZBDpGDU; zhy`7%N@s;a%o&s}Kbs0L3K({h6Pih(NK?9)%o$sjG-X`OHhHeFK8=j|q<=?tr$LJn z_7kb1;ql{V26)ODL=ii2W?jLdf9d?pv$6`^v+h*B-bU`J9JzOxGQwk@&Xn^1im7T- zt?c=kYjF0gw5+kkJb|$bv0Pf#yanylG?1Bv?Mw22FIoR`=fzwQY{-@RO5UAuo;8jD zw;+6IQNnvkkb^SmeVI54D`Sp_ghm2TXa6UlU$D@z7{zEf9sUQRR;f0{mdRcu&? z)-IJx?a?&l3x_yu&8Nyymg1oJXe|k>C`e+MfKWh+WHHo-&V^{Hbk%8&x@!xC6yt0v z;s!;Uq~@v#C=t8>D$ILhky;uSx|(=TftjyRs~tgS7QYR((+Z z%V2iyvgDgb8>B$AAjs;Ye|(vW^q5}rzErPJgGQ=7d?Fg8+q<{YmFJ!JPL>@;3h9cNa zraJi_Gz6S^ka(?zmmj^_Z6uH{Qo3l*S^6|`+Ha1K6@9-|@5esvUKFX}G!_|9AQl)3ZTYpIpgFH#|#sr>l z2dhS1CO#0}juu&7D`^exB0<@=7LTZbW4D2t|Ib@$A;zjFw_LslY;Lf+IxG0jhFFCn za*1-m$kZeO3Ph5Wq(Cu5Zi94}d*Ff$MCXSy@Y+~F2~CPJ$-tLIviONqF{Q-{Lc2&d zpe3Lv+7y8&LJ9DUNq-PSmGd=vShOBs55#n(9G4Svp`KEX%CI&r-b^UjQ z|0R)zkLX)&EJ3Poe;!5dfZ2bNc-a!~2WR3v+R~aKgf2k%7f$@kv}1DQC)X!Vq|+T~ z--b-06OLwTBy*N&+OUl2GBS%)D&@^50P|o6v4?E4iyO!3$$vU}B=f_<&ibm;BXdsb z8j-7t`j>zk zJA;+`9mitfP<;g`*({1qdn2z=S}T9$<5hf{vI>-1Z$8kFrEgC&?e2i8M+71Ln|;_@ z@gi@aE}MEv7}<+n=prcWpGdY5&PTgunFK%m$>09oBVZBx8)TkiyGp#K?JM%}T4&}o z%XnfCXr`1zZ87ExkKjDvNyXtqfoC>&9z|V_4y$B`dKC&0G8L+mma}76)khM2lJvPd z8kLrjXmv?xa<&K5cg+HL{U&)+HMU34FJ2nWMo>p5TIB2l^Ad&QQNhM!hZ+u-5K(4E zGhi6(&Aec3DH#7w{shHDZDJ9;p5ey_;>7R0_D0V6@>plTXt*6J7Rm?CLV(SFH5*aX zGT|6o#md7WH3av03Lw~z+b62yP2(AEJu~mBGu|ZH_nO#tEztvzZQ$zO6?xc^;p-R5 zjAO|K-ti?(iTWtK-WjTtEr%q^rL&Wsj9w?iG8$rf`!l3ucdp>IU=kDlJf|bo8m-|Y z(BEvU^%J*(X2(x1P;eOP$Mg18o51{?Mg<0pGB%KSBKR6JedxUIXGqj&#u-C%q&(IQ zX8asBw+)J zWzXZ*!x0dVX^}x2iLxhNCQc7jKTSK&cmub}(UIaZbh4c-V4CEgPm3Rix<~B%=`Ka@hX-@EsulOnsQ2Dq0Ss+r ziNC7%uHc$1$Z@=0;=7{aZ_Y}WD)(N@lqkF1ZaACdZIv2rH{}|Y81Lm4Z`Ul^Xx(9G z(_02NDw4AsH2{A|?-PAgE={Rgo`n~0BLbu6WCwJM{Ucm`X_Jy1r$?2>73A}YA= z5;q-@W$65HXFUkDDxC7Ua;KrNCU||#Up_PIUP4+?k+|xr%R5mm-=xOzQ@QN!nQ<)XL8u%Hu3Ix6&&wz~zKu`h?|VJP?`jN3Q< zhq1u8^4eXiBHS0`Bsk$_dFqj zotnhM@3d>n$UrGqeNnJl+YBfCKKXTA?mg1I>DY!r3ZK(oTNs%iLviF3$9#KLV8?7A zpR`@o_ZA>GE(mXU=WXRb>ast6-=UvVn?dR<%UN4{y2%D!lJH$|Q6`)^iSI(}vE?k6 zL!O^9V(m(i69II4QL?2p;$o{IGB4OmX34T4sykSn`#eeZRjpcVQQVK78ZpZjZaPhn zbTy*x!DG#9T>QA0#CAqAVOCo1ti?Lg07kYRJ|^0z2C4jwTn`z*4w5=DnYNDioG!Vu zFz}O(Gsqxooa8_-z6U7s?v$^t*NG2EKMsvm^^24^eF6J<=8?s&q9?e>^sFu*K>9}R z6!SsV4E#fMm;l@(rb3(B#kDqNT9X%=0#x{pu4K>5OJl6F5 z!0AVCMk0ehD+%is6%^O4UEz+pa|q@XtN&nG`TOMT@u`mdyIf&ad*VeCxE2g$ctmob z@zL1gI)ID_L_+^W049k;82NZap5kr$x;a9zCFji-aqbrzy_hi(2R+#h89~6lvEBKD znBy{=y2b8?2L!m8LrVX|?Rpq_UWQ{sd}GoIR)Yagbtmb(zblp`Qtn)SB2GxB3+-9* z^q{TDPoWmlMfK4wBS)(k8%>GhOH=G6V3_-vRRH?z8n_JP-16{^&><`G0~xyYIhRws zSU#hGEu}`TFRBx}pcWF$Ye_tv-FEn5VM4=b))5P$3C%UMjvo0w_W_)qDIwv*46dJ? zB#l)^YOjHvDw{^beajfzFV_vcSQIydh`2h$b_mRaNtzU(ZQTG2as`9?nBR)^aZ2T~ z>wwAOY}w($9FG3#C`81Zbc@ZLfqNv-j9jfQ$}WX6O55vrhsDGLs>T>0PgXY3yw`WE z*WYqX-3Cv6`r!md60@w#3$p}!90R;?Q@m1PBT)NUD zjI~86^3_T+NWxbnKw@_VZSx!29>?ET8|(#pkx=ZQA?)E}Wekz7Qa?CC9@U70j{%vQ zC~9Ngj&iWVGNks6pqr*&$;5n%O-~>Jjj#0IW-zVdzJK_joJ6o1E%|qI&>;e$XeDrb z@sJrUpqZl*J8lzj7_xY{o|mI&y$RvheGm&?q`DAeX<`}-4gGS1y3*>Op1a-nE@7{+ z&geI5wmAeGpVg4<<3I2_z$URY8vy(}1a)~uYS44#CGn>O6-LXbQ7&8`gtQVs>n(W? zX_>-RcO)`}`r3hEuogXYWMTxt7Tt!CVHzp%B<2)ab~-hm0Z^?scFx~cFSMo0(wx

1IOyu4ZtsRee<2uJ9`oZ-vhuy`w5FLh$Bm;B&P4Gr`khq(-_fE5G zy|F{tWBOYt#LwO!OLXwTzAa%GLhAS6B#vpD4{DOmWhP4r){an%2eE8Z4t%>7)hO?dRtFU+I>?U?mvZYGCU|12z~GH@Rb0)_yq^1a~# zYFVEG=gJJ@0(EXz^@KRW4>1HxNU(KxE<2xaDQs!$rVA&M*pN!AC!mc{{=nYCy~Qv6 zX(R$_YTG*Rh)x<$j%Kck2~lv3u+d`973s~g)(l*8$3VTrin>vxJAg3~EN+lX)LH)g z5_t(tPSr<0f-0WhGTKTp-#cPM1>o5acaT2-HcEbBu|hXD-jl$+2*vxy$uWBtrqD3- z=GjbJqlxJCJQICjyhFM}l!tm+N#o+e| zs(@UgTtf6h5ZW1+pS8b@{t?NN1Xqbhu1clk;8+nRHhaH?-Ks5!=1VsmeFZ3v3>{VweRP&^W{mt*+uW(y?$}d*js6Pm4$*lrM zt>eU#jYTndbZdU)r{|H!ydAbqmLoBO;!B1d4bipjS9Q>6&!K$BpLx!xf!)p`lY43e zUN!A0zj+$IO8}UZ7q={)z~3|;YyvTJE7N$`^~s{1!zXje9iRb5XT<4er1JGmd}FfA>pRxXe?*9TVblA-0c z%awUXzgBU-t1L89xsJ9jGBD(%E=#MwC})^&)-LiYPypEQQMRGg@P<=abt($HaBu4T z8Yb62Xj0u8X)Dt9S(B|&9B$UW;xSK54{I#ncQ#~xr5KC?rlkfg<-+%W!_VIOdWFYc z#VAqT2IsY62DDl{MQfB)*}z~Ajuxe$adosDKN4Ghs_qh_ek;q`&%)*0?Op>K(l?3_ z+}sx5ivS1cnk9{-8ZG*oF|sn6ol~}1HfL7m0n@a9rrJAg_HH|u&X;#AKdQX#S1z0t zP~n>MmN;x1xCm(5Zsz;HithHNJ|Z?3TRV<6IkllK*epG5*#?|`Pr;(ntySG#{e5ux z1qQTj;-(p2>>?ooT+?aWQ7^Hl2XE#9C5CAnYXfLfcSwTuQid6NYy%0wVD$LS-gj-# zSQV8uiS_bMcB^AuVYs239rZEi#5}B1*LgV;j+qgKvEoU3ooOVgo@L{5z1-(+@Il{v3%dCy9Z9c0R05`$b*$$e8fn?IPU zD|05IQmf7t4wGffXt8N}5+xw%Ku;VB@%{jcXSA~&o2BW5RfZi)NL54~%fIGB54cKz zIkM)drJeM}O}|D0VFlDU5o7tX?m}1Xk33iKhZ5)lH=WT3a3{~FqeZK%8@ELA zO4f8u8~^)jcE*`O_XH`4EEgM=IQX5Yip@VN?(_MU*OAYtD2}zz#ugB3gbhMAw}e_T znLko8Ve@(jT%i;481Vf4)>eL5&}ji$z|_*(M!-`^(JcBxVAg%3diz$W^M)!Yt;=u! zFtG9T`PrM0qqnB-Cb5Rmg=?ZKBDGP9P&&6OIk(1qyUkzuBWFs=YqmO9XCoN%3YGA^K(7=|2#EH;rm&cjCwRVTA{^(-`7hLHYu~pu5lxrhK*~_dw zi3AJ>32(KulL0Az@{MrRuSNbMtQTJU?zU#?vH#mX+g8HOvS3pj*1qT}iu*^a!5agS zUE-(2ms4KB@?|8#lhvaSaX2af?RKSQE>S<{J19m3_j2i~5yiHLGTnEeI5}&B9*cr( zwOx~q+{u%^-#9Eji1x%=>l4HgjEugu@|p#G`e({5)TB-FOep;ZI1|BDK|_7xrsr-& zkUE33Lm5Gt`8cgUV03L=7lYS*54J=ys7wlxOj;CjsPiL}pq#UC8-#@bG_Hy!#D(xG zPdjbmuH=hsJGm1)Zbr>NPRfPNe20nm?+WAwRYM>&mmK>}%PSyCsp8;s9FYa(*B7Fe z%JtEf^yPR&&Dl~6fuQ7L6=L-5WHvm_;`zF=DUwIa1#{!vo=PTZma>0A_Xt;-#Re7F zpS)b9ZZF*%$=aSenu=}#%kFFl7_wlcG*Tcu5h@M{bPGLey-s&eL<=C(41}K?Ojcm- zV~p)_@g!JRqt#?y6W8n{9WXz2ofxJi(#|I$&oQ(3+aYy+?+C?sEFu5WJe3J)n;F#` z^R^2f`S#V$d%x?isoe$M+jn9bs;Y7 zp;`ensLxQ;M%n@6dG{N|Ogh2F@)R4(;k*_c*go+oxb$`gE!sb6v-tOL8rXY$Te(Be z`zg{?Q9&-YYUYV00NZ{l#n+d=t>X$gE2~N59uus`v1GLY(#e5^`a-;w^+k(z6*V>9zebacx)O>PZlGc(9H zbi2sb9)NiDelm|;&f{nzLiL{HXm?RulEs8m=l<1#;J#5sfi_+h{=|650)$y z6XH<(+W@&v(yx^^lVZOJVh6C7${{=nQ^*BL8_sZsQrxm?o^neW6P0$R^fF+)Vl98K z*SCsiPNVmTpX<19XMr+ivt8JA<6aqB6m?Hy{li?8V_xuP<+2Hhu< zjv-!}ZyGGOrxe|3_$w&$_BiCgqOwPeqh|&h&F=ZdI6t&0yjc@F$9U)v-YODW0xjk@ zK{>!ROXWJ>f62MNFcAa1agF)Wir5SD7oaD!XS34$WoW`WsFlj1rAtiBBd$P_dg2G# zn~+m*9+o_Ct!KTP6Ys6EvVTt&qHo!nfBZO(SrE4PdA29tZb87Zi+Lx<=!ZlTUu0c- zOSYFaFq;girD4n>(darlabXAVa_>>6l4P!es%?)-O%1RdBi{hjC>X30IB2gFKBYa?C9(^RXD#P zdMCsTV9wGtmJS0LuclBC*l(X^ktQS+u2gwlS)mG~A`XH<)#%XWy{V--BbYHJ0 z*@pAll#sF)Ylf>1IVw_?Ci$9P&!L`J0tssbI;bombJr5Eo=iS~jSX+PNf~MPd%URA zP00J2+8a9{%O$UVHYt<0TU6n({7EefNPm%wun$%C1kd}m=`5CHv*?@#CWVim7-pr6 z*;c|trVV=*^%a2g<=}(yG<2+;r$EVF{pGoZEii-9>THNYFiY{sz}#mPSImH|vnKSa z^dsygL-`fZb29I0#1V?2&g%V~c|{+Ao`UujHQ4bf`01pQ4$GoigL>T+XOtdV=?WQD7gG29$wfwW{)l+S@v=OcMj}U9#MuZbJx#>p z;f2r@eko83FoVO-rnw*n@Y68cEww!CZTiF%YJdV1Dm|xP6fa3sbDZg@UD~RW7qvgT zFgJ>8+V)PFI4|7zgRnX3Vmk{^W%n7e<)(hXLu11R!yRtmqz^rZ?q}(n%_#-cg*YngJs5zr?dd=+a zf$0Ot#fmGwjf*nFnhSEYixzRK7AvT#Z;7SH*0%sDi`;*N+Sf~J(hH`jp}IA`J!J-? zoLkrQh!0;d(3kR#Fv0hi$q);(A44 z%ymroM2-XL-vWpsmq_rbi~k7*H#iW1DhW>beKD>yaS)qBT zD($&kKPTzaR(0}89qgz!1T9>^n#osN#h$ae#E58D1g{d(lOLz z*efevvXlalVDk*!7O8w!{JE zN%;7T-8_?e%F><@Wh#q>V8;%xfprD|UPtZ~P53nM#H72uXHRD*7^zm~@O0Zi4qle> zW`4rt8PPx!YJ-m>r*F~;x*R|nBRrpLD^=74qc2|DWtiIYJMa*prNo>zagagu@4G_4 z{(X(uR5fuld&lWhaqymRu7MotK-xk^EiDM`ua|&qC!;btxIdok%y6OVP~n>Z5&c=$ z@{d`>9BLi=q586~1nx^(-ZO$^NAj!NgggRX6RW}U?8Oa5#BT7aQEx<%l~<6Q@d3;q ze0*ubfK4m#-=CbBV0@f#fcvH3&=$|NCUE&20&P+6wr6?_jXToZI2o}pGt<*Q>to-3 z-Dgt;C?4U*WtWgCP(p_U%{vJJj2`{@?Ryi?!lPu@gZjM#t0J{LnfXK@z(uSkZvj|+ zIeQE>TNu&7@LChE^gwjaUa;ebL*Be%PElvDSy;0%>g<7fS6)! zK5FsA_vrohCbwJrFXbh2%Xu7IWJsKN>RxjK2Luy;yfNUO`=V?<1n=tr7L#YASg_S| zcA~4op3o~(s`Hs}H}+mt?aee3wkFTHWf=k%^-Toqji&S(6sgI@_QhqI2hHmn_gn=4<0 z?%zw?g%{i;=H^P-4Bbsg9V8y?pQ+!!WCv4cv}6^Nbi?RLTBnl&oVxu!!dkHy&Www- zI{nDsXyfi`;r`aB*6i#TEpfhoC>5zG|0^%Md(?%m||6 zQNG`ucsMs;Th>hF_GEYc_VkjE5e@0gT9uggbVam=<$!=}fr9+Tc&k#u5^cd!HH5ov|BU{1Ag;I<+GM+=s;iQ1IP838{xz3xt#@*; zrfYji{ioQPBicuUWlY^8qX4cyVst4Y1E=Ngq_pobpjvUKthL@3Y}{hHRJWAGj+RhJ z&28HxIJSo$dzKL+1tXKbE)0lqB`*WoJSEkEHJfsxsdoknAj77E0#0o@#`-5c%mdvZ z+W~3~SM!=90WA_UhX~H6@fJ`IDu9Rq^{jwcPrpsZw{}e&?5mAUWwbqPEqMTkO@4Ca zY){XwRKIY(4V5cz_;awm4;2_~zKadU88x9@H<*jmD#O85tA_kY* zwjIapcb~;z5Gvso9OePLR932E?a$2VQ<0 z0FtR?Y*c**@bwkmaS1<&~uuZ^DUO+!%lNbuO!)~Bd3d&X*36$aOGRUyM zD_&WWGmRT*(M})Gi&Oy33bo@9N|lWh1LHmVwARw8>(f)uGqT3S+>QhN=5W_43JRQH zowo|m_hwmynDY)Qr##%mIYRwMJ?n{yu%N;LVzNt1+r~vJ2}zhb6X>5sB3^wn0DBr6 zpWUA4$hFADUlwwBT&~9pqfA&W>eJS4)zLr1m<=_5rK?Q|%9oAq8wwG*^@#YNCSc5zsR1MX(yH5RCfz7~_saiA)4+zQay&Q>4UYcN6OdQh!g zoQ~W>fvc;Uw{$apV8FzjINKZamcdM-7D@aPj2Q^bvLD>SQ|cyySiHI-xOG1N{unko zX>FWxk@jO51@53K@!O5JHh~vMM*hnL22wC>zP^07F*PC2yo)nd?vPU zx+jvC2l6m&F*5OQd@e)|Gn#M6PPdP`t!ru_Z^2`nZmZSSJPs0g9iiYWapLQkxM9S_ zN^|2cj@$5$^DsE5a7+ne0_qOshe5#v3fQju`N5G)*#UbYyt2&RGx4*mVlT$xSS1+P7$;K|AnBCA}V|7}hgfQFr zal}1^Z8JWkrUd1}Q|vR!orH@`zz7&k`f3WSwfgw8k;~?V1bBG%0)XjZ(FtX{QmK9l z9b<94K5B2yNg~#u>BfNd;VJS z;}Qy*YX!uiH(QY9C;+v57p}Y2Ze^T>3nZG13#)uGE{Ayf+Qv!z0{L&0zFCh0CQf>e zV?X?66FvT+Yi}4+NyG@^5--#Dn-Dx`XA@Nu(2?7uTy?-ZFd;Ac!xz0VEW})ek6AyIr)xXMKH#g)Q34W^v^t%`^yg~r z%A*;im0tmc?sbYh5Ar2C%%5LNOKz3^csBdLT>7Z0y2ud}5&J1HA2e#P!>MpikER!`u&q}fTqzM@mtCM2V5 zmZqo~G{03mc0Ycl%oJ7c*LYi?Mk6q{2;i9oIgtIPgQ@;j{9QD%LP0JYj}N1nb^-xf zvS9#)enECIVE_bHsgLEn=UhrFKioIMceR)^k)|S9>;f*Iz2*4MoA&1XRA`OfgBJNZ zdq5fbaT} z)-VaoV|-4lZ4CGGdM%M{2Z`)waI)%I2~3K;DkUkWqrO7-AtT{;ki*1A04fO6E~!zv z4o#=o?gvzM3hWUCXE%uIOdDa6aqq@A=1KZP6SZng;pjW`mSI*WBYVLK)D7tE-MOLv zf~wKM^bc23t-KjM+58p7R_@<$#z3lHjOrW~x`xRNC7N*7ADEXe~ajr8g(Nu*nedre4hVw&6zVQR6wnl{R&%a@inqDQ#92mEnmE25kn=h&zb#{;uVU*-r@zqxM% zk^!8wTtUAGa-^_1yo?d*mZ3*i4Ao}yalBku3qC$oxU##JlJYwdNSll^q$%}9T-%LR zl*>L)y8In@kuX}!TLXJ-J38`0?Ia21dd28~-^qHGx#x5)Nt$O(za^^s9BY1FK;3KP zs4JGy?=G0=ysM+hGRu~s(aL+|Kn3tdo z89{k=7-0s5%Ts10%AkhF3r0axu_%m8ktr7Jkyt}soO^*zl&#~N(S($ zCQmsXPF?Zp(uuJ(eGqilxl#MPbUcXuJb)!pEro?G&=^sTAnSCBpB@^O;3CAaK@D0i zMvl~5ekq`e=BKRA!M$+#3VHIYL%0#ajfMkNeLPVCJ$hh`hT+n-eatbvyMKNj!JKCT zW!80(@Fs`J&>p;-ur+Nu``NMhW&&tme9?R4>`qN#?=fu@nB?xZXxtr4nEP!1+RtCF zwjdVKN`5}-BAj>w;F`U~6>Ue}N&>p`y#S}_qUYxyu?)Ey*|*^AV}toR>>QugUkGIA zPIEPM85f7f(pc`24xNrG)-2$YGHbYAr>qmNA|MaHWg?TTT;pL%iiR~WSpXVvgs0{A z>myikiLv)VH zEg!KrROqE2WZJjR5wI^_DFF2@yk_^iBFHFgOLtwsMn=Xj@ruo5qm_-*@mv(AQeR!l z7t7a>Mga9QZ^miMNtL4lPN=#p8V4Jj+8ZRUdr6*n^OFFbs*UPJcOka7tmNg@PSJ~r zfxK2Lc%|M@-orUwUd^pTXp}CS(wlOcwm6mV!(sDA7aYPPM2OlTOTZZAP*ZY_qeM=^ z**TlXq(;RH&LZ~KYerYEyeDHj!^JR1$EWoBsXSs~8kY(x!=R+jj;_(k;5qOUVV_lc zAEF}VTGa#iarVo!kC?u&NZ}Ub7#-n)7J`j#6PLzd$ZpRfu6aYzqxzKrC!+@9OcZ~kpx~m5V4Fr-f^Iy3|60$M0)JFE@h}53VL&>RPCzzNrbsz)n?DzU z7-fvf6V0?#Km1U_wG1GfF1(Vr2-y@)qgR+s)7>`1AQ)WahXT-})}@A@r>XmZgIJWM z^99Srlvccu`jF!)U20;Y4Mc-TXudcsvX`NczlO=nV56C{{=io9(hix5I!WkLUctxG z5+*WEGH+qtjn|<@O$Z);m$?js%!GONG0yBsy%#F$0hRCuDk6^YWT2y__!&eT=mgDd z+ZU%|noP;kpbPjDG9u0H7s&!8xWDt{W>W`-x@wj{*t#(76)DY`V}~vMB4sV*XVa;c zRA(P~Vf=mY~6Ea*jVr>4ltK%J(R4WVYdk8+(`Ox9*U zQFQQ>_}g4sPtFVFu$A2uQOQOroPvvR?7H<}CN3i)H^-@sNUaDqqRm{sh0Zh5M9j6R z&XxG7!JH1gUWAxLk8hWh5lg~Dtbo(T+LAU*W$tkA1!N1Hu8twu3fji3$!T$OMiF5l z66OtfgSDiFBkKE#ekrzD9FJZ39X-C$OKl6rA0IK1e*ouQwCxwwyK&=`W=` zijx@A1l?{QEi=D|u2u(%OJc&hY|m+2SRs+;h1UJU77#bt5VPD`MiqR;5K0uZBshh? z<6r@z!HOWLJf1(}`Vq7pZxV!7@GE}|A}YeS=DG-qgGm0=E@Cf5l}JIPXEizcr8jBj z8zB*I=cT1RaYiO1ohWaQ=$J)!>-IIzrbOQ78Gb36-x+HUFM!$s)Ykx%>0dw+@QI6; zgQ^P?+!a;wc@!(G3rxkbLhb?-Qw1DodtnO56^}CQiT|N2968HT(9Deg0#V7Q4kOhB zESn#~IA#@^_ENi12}*6;N{Em=D!FuODgtgnG!KRPFgvA<$exwn>qioqDtEa={&(&G zvyxxtI0=#?-r}0v&V@jsWNOSp9Z_*7l#m_ zXUVs{sHNI#%}}!R19$XiXsxi1Yd%V$RA?YCL@5yPTR6KPF-)ZtdmBk0u-|8U^f>LA znwX3(*PTQuH^bKoOvJ{I5lw4ua(qI~xX4)0R~}djwq0FlSG6%nopGW;D+tG@3sHffa0L zej};N_!El+K=0s_2a<=FXyL}u7n+JENlmvOu-_V$5S&6wf%Kx{x8t(+br(bGuqT~~ z=Pqz!yHy0)ah*G3b7;-BfPcBvAL@e3!kfYRt}h~@QfMB9_l-$N{w)2Qf$cO2kW_xVA03-h|UHfp0&*Ad$!_9gSx)2sU`~K(qVC%^q55G zk-!DvtB+2b#Q`CMRFBugY72K%CiOfe7o;cnYpVPM@-xjP5FC*WZ>V_xaCi1HE~PB= ztf0E`BoMNut50?ev=cAjeEiJ`Fit<6t^(SW-jpds@zZ}o;wR#cJVH2KlIFQ89l7=% zPWt*O*+}M0#qsK58+tw$EU0uvB530nlKPs5K4i1N0(P?Z7!4sQ$F_Yle&PP|$VgmG z*}>m9wHkg{;$NzVeEvI}Pto1T*B!FpC+1J^xytR<+GlG`e@#CkAtxXt0qYq&ZW?JN zCGi}HkDYFE_vh!I&WP+-cict{f|$LrFh{;elawpUhD+T!e#RKJ#`SDFaZ~2rX5_u8 zB)F(|{#Xt(P`qN0~L$NK%A7VGH8*H3#x?&3xO8?OTg4bn-B4VR^JwMJrf7P$WkrWHFKx9qhe#Q< zpH0t?qxrmAZ6Ae5C9hn*pLuwCU+QjU%Qm+kj(!@x+ji;rcy*`LZ4eO29!+n3Hl>`s z+=A4-E5-rv5KP-&Fxt7Osg;`owzTp-eNaV`2p+G7`#;Z(ViKfGJyk8{6f%+ccP1q5 z*cfXMm;0?&Rwk*6^a4W>u_ph3>ZJxZTjDlCg1G}+y6WIVg`pnvts)ZZL6>P%r^lXZ z83$L&QVFSr!HzH3L50y^H(9E{q9D`AQ^64-i$pD3c8=k=B=y)SVD(8FVMbH?^j8F5 zq@(o*3Zsum3WX!SS7Eq!|3QA1{-=$1i(uV$lR-M7xF4LCa76wXk#L?#Z0A&dJB5sa zNq~`>&WnJIE&QED3~m?5A2ZKqxCA@$$XO2RiO2Ay!g`on{yGP6F-iIN-ubTS9R5U= z!ofQ}t5(Z@)ZP0FNXLZHk+I0X$p+`5%X@T=a`;4M+9mbazp3(I^!q{VFf-o7G+Q=| z$bbcjVZ6eSh{b^p7Ce#w2NFfDNrZlYn(x?oI6tFveLI>&?6!=_KqX07x|Yq*c#rGH zN@9~=%TV_blXeMbGEHT+B^J^VBPm3deF^Y*i+^Hu|>fa+LC}9y8hMJVa#Z}7o!5Uy$6m;s|0qpr zTOkMKBs2(q*o8KQ7Z4V+z|kfbT-VPCq7M8lMzcBcmlHsRS{!BnEB#BTd{iu7ltCC~ zk2+Msh6jd^oW@8X(p&?u!)rQ?YLgl(5+v)!Smr!GMh|lv2U$y`foUoL>wc#G3}rzC zW8gmz-FYns9<^DJc5K>s-)>0Kp|jnLw-kwQX-o3~#P+sNX3b;#mF z1=HoA?g_tN`@-RKzjBR>`KO6jtdFL{9nR@|(sDa^vm?0I&&Uoyh=nT-4iVq$_fc-* zXaft68UQ-D&CkFt2Md25(oxk)2@Vn7>t|q>i;4Ra9OC5(G+BJz|X`! z0}Ia_06Mw-our3_hYbMj-`4xw8yfa3(6`gW#Ki=M`0nRl$z@q{&1u=e?OX#pIfl!C z@LqxMw9r3*y%ZBy2^QW09D*evAiY;$ay!?=PL7Ga6bpCZe`bTmG4UgE1c1dc$$kI* zh-1=2d_l*4yvw=!0&Zq~1R(}Zf%y2|ZX(V=u$uo|fNTRdtG$2>A*7rDgCQmjf}%HL zpnzI|K)Zbh2{s1@0`frn*B&GQ1xoV02iausfA2v*Zh(S~(RGQf%7Dwe!1GH-V+NA! z;~y`$V2t!lWmB%l&E6Rf?GEc`UrYY9t4?;dqBft2IdKhBMZa!MT28AXaOmb3O4~1V zJv^O_Kb>6^wIWO;yokr-Y`q_61K{%5UkjY(dEehPoxRsO8Iv#To)sF%U)T}=S+=Bj zV(-$^H%}3gPv&tQy5WUcHN#lnab8YBsQ8q)@&d`!wbLqoJtqe93@6g!EASHWC;rL@ z6F($I;~x>R2+VYV;lN%gEpi<~l;(1=Z@8);Ph+OexvIyXR>f>~dnYIY;h_Y<8me#Ky!*-hiOVpHQY(EM%g9J@b^o7FCNzn2dmy}ZOEM|`Gy94f|)Hdta`u4uS zaKS%mObh&5xsRw1!ayMqcE_M2aGO2UNcF_WUrGtdAV`Y`gvp=09GPBlz|KkUjSB$CE{M%{w|r5GWDMl}bZ zfo_37qu?V%i^2i{DeL@eF$7_Px`P11ynthGHh&T(HSV$IGgI*ZQ3;xRK4sNn&_A}9 zF1X>L@w`jD;6ilQ;cfAB0=(YypL8#`*1bRPmnM&vBJ}O=?uS2yOKw!FANQ(t>Hby> zPWI=>>hgMD%jWQ{130q3o%foye>`$s;RC)d#3M4gLmoc*D|EkRhf6|+WA*^GYZ&8$ z8SNn_yWLW%1Yg@0oh?{^BlG)e+u%u)7SET5$&K+4?#IWq+KXM|_}D}vQi>lZ8*Ho6 zU&AST);AyE>e*X_!%1ft8DH&QZ4+mMr!K7Tj|R^6`!(uW1o68wHR~5svgY;{?mh!D zVnfy2F?0hC&3t_O2YLN3dF%i@Y?VFh=RJ-7%iW0AKhIoM@EKQ2ob9v2?d$J4ZXL73 z8Si{on)5kWwmSq*Y0Zd!KL-fm!xGNH*ENT@SU-2CTbiX(IJQ8LLIq)WW7#EYjXQd| zn*Mv%_c2Twtz*{@V#FZK0V4Z&gYiG6<4$RJG=P6^5LL4{Bz2{K((%igheu(u`-uod zK2!h~nS!zj*W;h|zS{V~@(}~rNo5qQu!bPYqvcwRLZRkW48p}NH0Yd@DJ;a1i5)z^*@3^3h0B+17 zUB0(19`ybmBSOkiahdQ!i+OI`KPv+cn5pojWLTpTaZ1+d5Cbe3YKWjH{)MC@9F+0l z(&O%8TD2!`S$EO@YRo}_R5{}i&wi5JWdND--*h~NRrPX|Kr*IuVAgY$L{;v9g?aSA6~WN z4fT!F2@`VmKck2E&+rvTr)Il#dmU!r^(v-p;elcSDt6JrcgezcS;BWk!grO!ca6hy zx?~tSL6&Ym2BO(@UU%QZs+F%3|26ze->j(oS5}57e%;uDaru}0BeegF{QpMr-zxkk zSZlrkxqvi$rqv-hp2C3-ikl*e4~i%T$B}XcuP1h$`0vx}JkaJgEOe6`vde=on1LVe z%7bd_`F!$*|5qB%zGG^z8_A3J-x+vtwm1!C;qoUXP2t7|#rmg31i-)WzfG{!Dzo#z z4JXD`w84MrAsA2KKjg`I;Qtw%7K;u1H*qPKmd2~q|8J1xzv2HA43}Oj{vPt9-K^1b z$n2D50#Lz}3j$CSK&lVe#VrNna~rtq{}fzBMKP-tBvPXPJJ4YMPZ>${QtNXWp$pi5 zY9KOYNS5>F1BtunUy}YW)(!tFZ~q1X|15<6bMgP%(s1dwe?4{w$$zZ#;^^i2{{;d6 z2=0Hv|G&Y(Vj)E_+-iX1jXCCjh}b_e4*y?Q!T+}q@Sk>q|I|~hd5bl4*nAKzUsyP$ zd?pTG1oY7mLV}fjZgZ|@p1yx=T=^Uoly*<^hA3#7~UqJu-L@G2t6N6%*rsQ~l!X|@( zfu&?Ifs!}%@JS}~F9E?|dy}Z9Q=KwxlFKu4NKQ=0+b@@JC_oj8fZZ0qTx1Io= zZJrMoF)_M;_veG9>YS~OkF6tHSHK70Q}^qjU6!ERi}U0D=BT>*9A3A(v;FNPhR^5i zX{ox~`}O3Gj-dPFU}=jN(D?QKRNeh`dxP+H_XOzpd|bQA;ro2PD4EXrdOjFGd-(jk zd7yI%Xus-yyFYz$bv-)Rxm=vSx~v?gV@+&ddhj?|T1z6(0h@P-<*xeb5YPa4t`VFj z**9BX2v+mH+H3+w=&G`;JgnF_lT^Jc$U-iAt1A@LXvaNI<4jE9r86xwh7*5gzFQJipFja7lU)R zIc-dTaLkN#EdbnB_!~U|BMg8B-lUMDDZe0_s_wniEx@tt%4Jtkk8cwh=FXj(QiyXe zi;^m7rQ^6?Uia6`)utGxR8JFFO!pp9&KZ+|gJXlunKQGQ$+tb7BfZ$P;c1L04$T8! z5}B$Kf#Q-Byvo`eLc=wUn&}nacGnf(Ow-bcltaraaY`e&B;X6UsT)9ZgW`~!G3f9Y zMEhzoaH!AgGREirRcl~6Z#wkdh|;xiw&H9mH&g?@zwzQ;bjq(8ToF^KhQXc5F^YMsI04Nl)oIAH26P zZL9V9vKVuD(`f!55QOXXCN3)^tG?{Dy2DbCnEQ@M0B$yS`dt$wM|qb3$GPs(O^gr$ zFi}p1>ye`{O*$QC)ABH1`s9@%cRwGTc8n#!=H)B!xW;nr%@<(Nlmy{m1>yf-78z*E zq7lZs8Oob2Okn#zT08S_sNVnKk2y0EvX6b=vlC@4W#6|HvQu{1*O*FF_N`9VvP5M6 zP}Z^(LYC}Xl4J>ytw?_NFu&*f$@ibROsHdtSc##}nBg8uH3|0~Un>zM$u_L4vZ3TFp8_=IJ_|FNXbe zZZ4f)@?o7;cC%Gs)60(I>ubBx*XAWEYf4i|dv&VQBQn(1Sk3KhIvI`cQ}E zxeivgqAH$=W%D@ml?Im5>UMVPC3eJVsTDOp2Hzvq zNfb31-5HWN<|5?fjg9}(YPjrlQTnBNfP}Zh`OL++^8w=Tco@h!SgJg3Q8|1wAM3(gF$t;$-E$S374pC__7V4gA&PG_$ zxcBit=O+S|CXSDO$S#PyKgT=r!?_tbTS=6b6;xk)LqKxWImUSIYZW`Wa@WUE?d!tbXn+{^I1ejMC8t zydO?mULg@x)95@+mRL6+?e`tt$r`IR4spdk4{euoH|A^9*u=K9iby&Wweq}hk@bDa zILm2gQXkSE&35woRP|DBYu07}>&H;$Yh))2U6MJXvxa}J<^Tw+vcse#Ub=-Q>3H$l-CebiNm zf^#(0LIxi>my^a~uiB}aPp77=Ouc0_T!P<}7%n||L^qo9MqM>E zO;^71xcYN%6?b_*^2adwf7Njf%dan+53Bi^(f6r))yLtXwZmx}hanpWKU)V{JBJr` zb2Y8qOYge1!)^5Vb>tJVnt_Bjfh`jMK*`iOS1dl~ijsNSyVqWI+A5wThc9Uhu zJl3c%^Tes7-!)jP>x}}wMS2a-ehHP-FA>*wX|=6%M6EH)2}$*~D(-Bajo0Mz*D^n8 zJZ$+jJa^3d1aENd*g3IOCBGVEkS-kYT=NMG?pSqXjT`NB;|MuTNXt zF1(U8&aEOgcw&zm?JFv^d0ONAwASR6pn}xEbdmFO#hNaOoZgEGt=#AaQN^vA<*@t+ zW`&d?;47R2IkN}x_0`ahV=BJgHQy$Q#@DJPMkBJeH1LB) zctyAJU2c`hVbX(bZ$M)9ic3(37G;rekC;ZESNo9PMRBRzm2ZLFILaPJQI{{<51-+- zhf_Up`3A9zgGmImP&njocm<= z0k+8ETi?y=CZ`tqd15n*EY@14)-{Jpq9cY=8#02v%zqn=ggIS?Q%llvrGqGy6RQMm z7uN-DJ5wq}#itZmyc?^^3;8|I@Swzgxue>L$K|qWo{Pe4W>D_RyRioc zyWm8193F;C5X&%BV((UX(&fy+#U744E$x}X3pX_)@5{GV-7nIKcA+*+qaWt2IGunK zH|59TGK+NV-8gaj_OUnBhkAQATXP^P5B)EQBa+(p6RR}rZ@wGj_G+|uqcXLwI4w?| zeguO*=|F_YH`Q>t4kUv*EpD6+_vt|N$ZIjMB6x)xb)e(e_x5hQE~jS3w1=*>R;3gj zil%AraEgl4N&k;3T8EO)y$_1se;&bYKH)a=U~>@jAPDyVM-))N|9!^CDza?D?{-$8U{9o+u9y)LaK|4!@soj7*xabG3}M36LRsiik(w5Nfm|U?KTr(%6cW zr0p$2Ttf>9Dw-0!BUZfBSdNUw=ocYu(WHWkCIn5yh)a#7$Qzj6=Lk#ml7Ql6f*RsR zR(ocN}3<8!1rrneA*y@W0jP&6heAXYSPEI?{w^a~M&=x71O ziv(H32;;_lq&%j#0HKR^6;L!HNFi>#*a*HL4x?Xy&_rtsC>jzZ5Z}Dmn1f`-^gctV zqJ;z$4G8WND_%5_wufWyruZG#O%GS%MfbcyDD(QtM^X@p&Fg zxsfukCfzIIxk0p}9hsxn>tG0$v)1OU51}^V(r)mxU@te05wr4rAJN#%%|;>Siu26m z105H%Usx^tVm;om)p7?cR(yivF#xPpBFH(wqYgnhky3Ous59BSr`b$LenLrawn6rmib=4;yBsS%<=qn{>t$W zTZV}XTb02Tl?_rh&gyl1x~9_h=MYa;GzPZ99H+Qa#w-QJ!SZ!)aElc&6>oiYTHmRZ z{}H3%_8pg9^!Px0EuYo+clW%A0R_s=W{xP#UK`PxIA7D>!4|aEv`*r*#XB=v zGE@8RzEfwh2m7N9jxx~(IIQ5n?4io1`2$92F|+9EbUdy#Rlqk}oadl~{ehy#W&m`_ zMZMGJQ%7@Fb2CTXo4x}ET#ZaYtuF0{;?y7u_SQ96Iw+!CaK?m|3>S*@DlU|hO!PHV zEa)fl%aLF!2eHY>YaOQJHEag)D-Q@e$(n;xHO-ZIv>V3vDu6B!*HtPHf%Y*r+ktJa zwG2peg5Ou~K8|3DHsG;4xQaUX zpByBs3W`knEV8V>;mvg2C(|n5$CGV6kqupCqdQz`5Y`{CHb3$C%d0<9lZ!M{g|FA0 zUk$p|bGiPx+d!1vfOS~x<=k=n=2V}cgEiaw`N?5hqhdkaU37hq51IcBUaMFLyD*_P zb}i$zkl@4uZNV08h>LranR(84r_9#fdNRfvrpM?9WKxH&Y!uXt2Q>Mwa$K61XB?0k zaI>G^b1P{(dwQFpdQ`qGZ6el%x2(!~r~4M6=*)6^8)m(kVjlbZ%ULgf6HQT(o2v9F zzoh5~219h*PtQ3nPqyy*l9zB+#A{V1mn5i)^d-u~`G>I4nTly-WvKD`o`_jRU$cE^ zS^vUBqDd&Dt#dQ(Aw}g#c3?yGbye001M7=(j(rnuaDL}eq+F~*`9O%Zr!>yN65!+yZF0ayM#tt(%QceR>4pRdW> z3F{=ewRDzFPPEhU;+*vrPp0pm<+oUVt!>% zHZ~5WWG_g^^_*c%W-1U+HvQsXVi0xZQ&wrh1(81MmyY36oZ;qNlOLOxLo1uP%(qHw zT1Jl*HYi`LSKhiohGi4|n5``Lj>vSnl5oedbb3~mJ2lt4Ys*oTl}g5I;)-PPFcBZz zE(@(>=8SAIMhGRSRfpdr+3<{1^otqsAZd9jMjP|T^ZpBd*khg5w3(LtOyr}_^nw*V z@r={wZoj(T7o<=p8mFgxR;|$adyA?%i!HBYVWYfgLR#$`5kqX7J?xlRGTk5E=R$uQ zwO<_(yrDju-$+_w5GFh(mBG1Nt$hBc%-HV?&UlOF2b9|1Xx(jE6fSJU8PO+)dxk!8 zB~E^&G9GV~TcAaeKE*jz6JGaLeJ;Pm8T1*J0K2FAvlf=qj-F?{#q<$^tb1lxDt@nBl`FJ(-f@9EE;wd^K&B-+vk0Qzj4hS zOEA}b8V9~_eyH?!>UgVOGnuU4Q-5q9xKdYg zvU_~gitWU+&iOlw3$bdxx)+$IYQgC?^4P=K6rKHe65%kt8fWcrv)>BZmo4OjTByU;@0+E+8wK3YFZu709d`TZ30+-7UA+i%wy zW0O~3L3B?RNWvrv&qPaZX3)4THNI1_%d&WuRx_sWT7qf-RZS!wi zleH2q{~QpZ8&cDZlPm=1f-Q=#6P;gOqa{N7A8?hsZ-d|6=d zF=b1w1V5&~#rRWfZf#OF(jq4KjL6y8=aNj_5#x#?VNoOIeJmcYJur5kf*KO;^G!>t z64nXcj`qjAx1e-N_8L?QX{8_XPN+%VEW4Hv*7THmj~2>{GKu7LV*l)(cgCI6^KFFs z+n7g}{kul!2$rTfT@#tINpAVrP<$e`s7tZ+`?#;5F0n6My~3ouFwys9bE`$2=w;>d zxBvXBW~u6ye?idp6y1JC|CEV!Krr8 zSb1J)MPV*8GdOY7*6P7KI_c8r%p})0>PR#Cf{kmsnU}X0FdFh+!huebT^dlPP~`eQ zDP=WcWSQyZpY(6(-A>%9Df6ySsg!wY>6-O9l!jjRrpt^#Y?cp`bIs2$Oi%1u^RSi3 zFNs|F#n#TjDqiu)*>I)YWmSTc{K@*aRQ3KbP{mdgmHfbxDSx?RdeYT(WWjp-;+06U zrP1KhAX|&!oFFPU)ILK<$PJTLW22|zMW}dNUX@s4E&gj8bM(5Q+kXgKx}s<35$-g zK?UPG#>h#xDvtLN$#RnBzK3W=*<`zlia_*4`_Y-`qx6!uboPf=o20Z zr(`92dI<9fByF5@FDtEwuD##sl)S?&$%D=jlk{irDqVSul|I$2`AOoK4Lb^>bSkN$ zzQQfRzKr)X>025et=3`X&wN&+t~FiMt5{RR;#-=#{nj2%ElH@<3(gOOpNz6wx_#M4 z>zHQ$yzf{pm{9gDx}&0WU^8yM`_gb&BU+vf}i}t~1#WQjUTE5&xCO z^6hgOVjSpzfbcr*a70_^q=)-W{_Xeb-QnL{zYG#my{qQ9I3r>(-U)z+S2l1u%E)pR9-d8uy?MMhtNPv`?& zEjTMWp2u<&H~V)N8j9A^J=!-LIN2`Tie)4B=W&9wc>0EBPNSf}orQN;Xg)=n5zpI-mwv>OWJ?Tlaru&m_ z@+Zp4Y(llo&L^c*!1DDi1vL2ny6Z+uGc6A*gqQEX%1Uf$Y-du#7%AV!Xm=T$qg5E) zP!(=cEos=MF`AYU)YDVFAJj2(kH%QD4yY)6U8KC_~SPLlX;P4`;-rM zSR;}0qf7q&=s7mh)Vu4yc&_i(?hmc=EkMXYBhw=0+@AR`qg7?w1j_WlvtF7C1C28j zbJWWU-`|ms+P#I|DkntL?ER2;F(3pfOrmtKv;QQb@dj7Irbq8lV$~dLpm6r z=0qSE!Oa5y`5}efzd^!GA?QELcEkvT##sb{{6C{$ZytW}4U$I&(838A@Btv{5`?_|c6*3=;PNGi z7TK?IVEYkgn2<_n~D-Z_h>wBQ?!WnBdvaltC zn>t3wjv7;>A5hfa0cCg=hEo9*@n6(<7LH2#m_-O%e+QL|eJ#2{1(GSCJnF9~|9~vb zCxr8Hq``dMZ?#5MtjR{di|R18zBgW5xRae7)<0SL_I+i531fOF;=aPfER zY=sW7J2*_6u}uCaIC1w*9>rY54>3J)0yNya4yFX3hWHsTka!jKQ8rcXki97fSh@|s zc2G4r6@g~W(;a1%E*!F^pkvI^QtgkI*%63c1%e}4@@gJpPjHx_u&>c$uvD>Pj$)cF zI7|>7as1rrI+$P+w1GY1&{6~l%wf`=Jf}f@jVwp=psGH^d;x}*x>LrY0mtFYu}z2i zdYm~Afs;Q!IIFlNkDBkl!(kZs)jI-0m}m=>%si?oX-5H07{{Zm<;Wq+J_1-h99uG= z*(@%PK!_ueN9z7Lf5^sfL9{G9O}(eWU z!5LV56{3NIamsZI2o^U)G9o2U!%u#J`!?U>v_CBmwXnP%k_2wp1`k89{RH|wE4=>F zPe=+v+8jtcaKSGC$QmIjPW)#nX0$yRWP*2pLXyxOJG|6=5lMW=j~F8<;K^->7^=3% z4?g|{(1xoJymlGM1h3(w=4%HM53I8T2|#TQ5FE4vakJc%3P8?)yUjn`Lm>VY6omJ6 zhv2#$h?Qkp$XU1NHUdFt0U^Mu^{<~WaM{grMPgu*UEuT1AACIUU>PxNfm7Yz$E%+1 zf)uh5DA-^Di7!)a@vk!T2~daGYWxQ1I1(?V;iOLx>Y%sq(r<_feelE@T($>cpji|u zi6ET@o&W;wQ4>a}m<*4e-2;s+C&x?idk_;0o;~?@V_#6<2l@X1w3ZSt1^odLA!-y{ z{s+>9j?v)N%={{>0Ru_^qNWE!1Sq-(7AR3Dml0o# z2Lv65({NA3XrQ2fr;^Wf=;^@@N)jqyKCl(SJte~k-C#fT1hXJf7?%G$DRcC~PR0dV zF@}NT2v9UExF;JB;BuS@u7rQTODH~x>lg+e1Q;xV1OaA*@ByxY0O*6K58#_%7itzo z;buMqEVT+UZo;u={XQL1?%eg`$AnjsfRhx_CX~G2m{?00nCw19@Hd3rAIi)(iShR;3O-1yrg^_NDkNVd8Xi`MW+La|1iSI zn|~djH5U}jPK@G!6-hwkJvY4J5HSh^2T}nQ$^#@r30k536~dpE2dJDU9u*`3F)n!H zrJFcO!xt~@M}fk|NWiqw_s6RQNCD6vgirS-DM|zyy8)&oDM}V94n@I=4?uqpjtj>L z5I*JBfr=HjqC%k$^$*his(>;aPZXU1o--m)uvi9g!TSRo+PnFGp-=)I)g}XITN++U z$4R44@zN4bx>AOhAD*kAFCI{!6_z%3KKmjDbb-eTlCsl9YrH(0ZT=ytIrfZvc zl`bU!c(?IV0ZzL4^FT6zKK{b1SHA$eUEH!hfSV_>yI?7xLJ7imNl;|CX-^7&iUF(J n4hf1FYWj271Ew<~wodN)T4?YF1A({?ey8{m2xTNVnGyd3B|o6L delta 131780 zcmZs?byyW$)ILmiNvCvor+|Pc-QCjNB{6hJN{6I$!vPVbkuK?O>F$Q#!Fb;H`o8y{ zxz5b2z1F?%y<*QkGYwPNRRtLMiZakJ*bs0K2oMkuYm9-(ENMKB*+0nAxVV2JEi)bESLJjg- zgP`L#uu-Ssw(Tpa4X#m09^1INYCxAVvuNJ>Niba*qG1P}3;WvaFSyO!YP8X5?#KJJ zU$4{o8hslo;?ufIY_0W*{3N^j6M*o@eeVinI@^;O!|fmSXsSDmem^Iq_P7`t1rZ>z z&Z=ihcd{=#C3v-{`D%DK85eKSQ*I%HaWeU78Hs`Q39L;A(d>9(rYiPJWFV`4oLZv3 zKRBzTJ)Lo?&ZEZe#_)iH|E0-x^HJ98F*@6?yqjUZKsDY&G8NC*#x(rPZA#NMO5-(3 z^R;zKEK)pKZ}0bO>v7>RBeLGT?0A&AVGIpqYEDKazo69mf=l9%)v56+q*)9Tb$ipC z$gTU$%KL-M=<#X_exC!@|NG3kJGhJhug1(qAKHQZ-w9aG@!!cN_{5pqdN{a@Kb^M> zeDcIv19b?)|7G`Rj;VR(Rc>b8_i6I&}{oSSjh@u;X` zKGLqie#XC7&=_Ls85wclknJRgfFOiGfK1+pf+Yk=ARs^jO=*iC=h-lV zkC1)fzuZZV#(=(?W;9#SGu84QTtWtw|DgG5LshrfVV5tZDVpV4MtZM!GUhe*@5T$=>&p;EzjdE~0pSSFwY~gmzq|m{HHYuW zQ`)+z~wm z?;opQe8f@cp>Mu@iir8Hr!gO6{9s(g^0-cNKfR5fQ^!;ACTe+Jv-(VRrI1#vJkG4! z;8XnCYsM|yzE4E&`JDoP6$!rQ-$j#rtN8Y9+qT8-wguH&nfLtKV*CIv|HjOgMKkBa z)-VZ6gK!qAw{XB%zeJa}RI93Xc&>U9e}2~wTQ9_E%U*@7V?*=B21X1Y==e;5tsFhY zGc8eJ87pC#Uh~&O=8!Sfd7GdhZ}kapb&P&WlZ+-hTlsWx4RS2p@+<_o#S~z8M9i4MN4GrUhXHP2{v^z9AumG^Q+; z6BCP%ouDDlk)pGTSNutZT_;7?ODwmjJz7H zYLm4}JLk?XLZ@5~#kS6{Z3L9?2r-u>i-{NskCdj;Ja%vTj7jC@c2;?)#i{UM-G?-7MTiHQH*t=d0zoO5yO z{QTV)`_?jCyA4`Iv7W0rwVP7aa*UBv+a51l4Z!Oq0`H_Werl#|W6RsQNpwtgVCVjV zb$RJw#di139tYyM!_D<2@Ma*1E@bL6)8KJwE7ePH&a=Q^g7*0pHI!sX_5%m`ceM_0 z-oz2Eb+|O`66W9}v>%&u_E0q1cOkF6v5xioW(L!VzBSCTkjq@g;egEP5s@6Q!I}iY z?y5_B`%bhpF?g~OxVUfo+{kv2s9RYEbv^C(R0G4>KZWU?$X@4A2DG6+Xr1F^cU@$2 zo+VQ&C8@Azn))cBNnt^sj<@3k{q)MMY*BQSV16J{}t=ScfID2`bWW800M-xX3FZOd##>?v(w1n=H}vy z#BegkLwUO5VJ~VO1NiZk;G_=@&O~MUFX+Vo)EdRk_iy%R(&MG@hbOsf!Gq-Gb#6`w zMRWrWq4yXmPnTy95h9WJ;Lk!e#;sDvkNYAw6ZstG)lTX$h$%uG5un`UPIkVC@CJ6N ztUQHkD$zk@ZJnrA8L3yaVl(S-5AvP9{?bN5dFpdD6fRN20pQ6bhhcXOm1WA4HCW~( zOE`>wVAyL#*Ms9k($=96dGi|fv1OW+EXDYYHV7BN#6AItsa8Q9LDH@{3C%MYsBfIW zfeQ>_dH1TEoC`jx(ZPBAo8={Sexcpc zX9;~B-SUib1vm;!K5z%tg4jjmiBDf1-UQn-mM)WwTrSV6LDIp1Zf9CF)L@rdXqO)k zXGWX!)Y1rfv;eoapQrgzv|7}uuh}>XDI15skH^QCJF!-N-x&zfezN9L=g>)MBS8;hSh+AfQY2vXJ zO25=cPhdXdcw|(Ul9VcIt<`t@W$Sio{)c-`-j`6i@ikQr34+KT7vYleK5Fq;($=N1 z$ZX0|6a15(SPo+;PeHr})gzf)l?f;+*;r#Q2FLVsOuv})Li$uWy~B3+`ROt?EeDp9Oo@@SI#FKZ1ZQQlO|FI5}Of#`|T;H^Tq^qSwE`MJfU4KXyIzy}$CTje zx(K|BVi8Z!NBJzjBl-mq>Z0%UlD;Swgs? z{tyIT3TuLs`g}%6RXt!GD*^MBTkEL3d-xr&81z`6Htce{?iVzZ7pSg(cF# zjz!8My9iBA)M>{iuvUiF;E|`1#Jd55pybnV#QhPIhpnGD>BNK#>N`Wx8wuztV0Nde zD9ch57J81B(62H3Oj+c;-&;TOFTl%h0WJ2&gq~X)w>EUhEb!&iH7;;`6`$uw;_fPF zWO#$m&B#HC&M_-j$^M*bosgf)@n5dU);U0!GX%dCO_g4S99HeuTIor2LQ1IE?W?OB zPRv|FYdbAXes_C`J(0Aa$8XeL0$eB&Jf!LB3SzH-x_U-nR00-ctAcyMKcc}u-t>*Y zSie~Bq5CR2k_9VXumQOm(zRo1bbzborV}5*I1lChwf{QRup}}a@&EcU%-gQ0<=H0q z%|`*sc>g|zc;2JhtvDT3`Ab#6VEfx(y>{S{(b*F|$%y5etdeoY*9TYFY7fcHAS(pD zgP|U|-;qOl3yDWFvJ_S5KC*6|HeGZ_w|T)K1NIC_)-tQDTw<-AdwAPeO1>CI#z2pb zt4%+zWnJL9S%O{1Ca^*J1k|oyz&B@Dp>l6ig~#B_Zf-w$J!{CShBsqark4LA)C@2g zigG+(HA`anhTffUR%vHzS#J{;Cb6w%N4vuNbDz7sG#8a~eY~l>2HevUWqDku zU1ee1Qw9}zT`J2ePY++!-I4@i5)i{E)5@Qr^H<5LB4E0i!(ARdx`u1LN ze{o#udU{Vfy6*!$Q1Eqp+1cJKq!H@c6b(zZ$N0$7E2jkHJtLz0Ut%E5KM1f6Es|8T zI)DhH_op7wDuZ`OMz&ki+og1BhEPw|ye1n~_CG{m34=D*0!J#o^R04PvkC*(`?uh0 zXB6b5-fkprG{RqS8KZaz2&J6*iCK&mwB?6;5(Jt$Bv@K8s>r1)p}fM3ub{p+r_Ghs zTOI4fe^i0?%kYjg^~o*LVPw%h8=Xxx$BK(UWm7??h2CH29Dv}wao}hh7H&de8-KoZ z?_2>X3B`aKI^yxI#WKqY@N{)PEW4hQWZ~0M`h1)k0LC_jMeAMg`FaI3`2#VFo<{iE zhB+gABo-4oN;nHC)Ns|L6gKAdTIDaL$^xeHEE2yn5V}zU@n&!#Dv8HnnMUi5l$FYh zT7Mx7t_FIhTUZld;$@WYbRjB_*6D+_@f5h z3Jdh%u8m7vE9;x!RnO{zU{OgvF_N%@jyl!Ub`?l!5|A*sE|q{X~q#GOO;Z7(*rX=Yb=tcNnfmQe5epLgi~VYK}FE5TMew zbP?d`VZOe#u@dlkxY!bTy3Qhfyx)+y*a$s(y0|!6zA$(?&3$^@ka4~~?X-V-c&HS4 zynO7*0`6|7CpNFno`@%|Pl2b%<;OD-n)8j&r}DJQ)`x-CCxfelJNxCw3Nr$ypKe$lV+=~yt8Z@#f&1Gtg;u@vX67N^#@wVL%H8m#aJXFd>?|(4 zdcOnKO+e+<~ti;mmMfJ))Sq zWgdy!Tnjf#ria*#GW%S%^4CH)X+rTQUyE04TD&!I`w{-E4 zkDr+Rgl1VG_ht8ZBJZZ9E)DM%f+LAaRv$F}E2Afs#{ThblYcE4$vc3uYskk#dU}=Q z0WP+h>U9l^gFfq|N;6>8{u#azWXK|yd12r1sx(bt(WRUq6uFzrYPYuJ!}vR78lR=R z@=4ovzes9CP~nzLX7lYu&+Y2>10i``HZtaS@MFvGG}&%agM6WTHRH%`JZby39CJ-# zar2;e?5W<#qtCjZ6Nz@m!Sroa9;`9m-^(t#B(fSjeJEIZiA)CkQ4ssNg?nk#9)dsy zldAQQ>PASussFET`UYu(+oNsXXZvxCKCOpNsfGTz7QYF{!w#Yau7)$ANAVRWGIe)1 zsrB`|4H~+`wR5A33>1H65_b!Fp-C8vDtU3_&DR5_~2io~)PRYbiTb_)x8FuPN|CCUYdT}M=3FDH1Q|EBfr#ET1Lq&d)r@rb_# z3Y``2*P}NhtuaqiLF^w&{r(zE9U}N+uaMm$s^wgGN{Ux~H2Q_B#6v*9@P6-%GZ`WD zM}aFRQyg0YB^j_r;8`X2UzN)PnQG_e5`XcHyo`GF8=VhpmilPXi#iDsrPgd^uZ$tW z-!@)*H76US!+rGqAJCP5K_6{QTitU1rKr}twfhf4cK36y_t#OyKY-GfBEj*BhwTEG z+5f%Skjz`UGZglZx#qu)-03fs74TA8g$v~RzJBd>X|~Ug5e50?pgZ06G=Iys=)8yb zwe;B{&J*CVf+x-%o+DYS_iwcqj4Q(Vl?!@X5d z3SS7nK7F`6e{MF;x9Vp9hY9n)Omtb>G|l>CoEvR9UwDM;{E53%AN;>zaAI`jI_6CB z&0g|%_y~Zu-v17tU9QZ%7Wvy!0D6SwpF)j4Kr*@w7N@0HU03|6e+TOJp#H}{f#4jG zEbvq2Um%#rH)H<^1anZAj9kW;HT{<3+F8;c$ILI4|EZH%)T>AJ!TL+D0LcC?goT>I zN#G~tUwzq}UR0OFVc=me&{ zTKU;)SKnU9-w>ISY`*@@uc+C^%6PNV)oz?;OGOi&gJu!G(Py7o3{L4~s1#nu{*6xH zwKJ+M@5ZkX?7ztWsw)~#DZdl2{2I-r^E)@QIn$Z{P&nL-h8)9X z_+Ki+MgC3Y%FYf--r|4sMe_njC!e6GE0A!XU+e3HUck z4s`A(KRtf@FZ2!mhQ8g2#@k!QKdG;}D`X0E{m%WLo^xxJ1@b$zoC|~ROMe%~)CU|d zG~l^7Zs7v1xvl?9m|y-2M6ikQ|JwxZKNHw4W`8YASl&-ACKoC2vewrt@_u*WG~glJ zH{zdf*L{=*!)u0MpoJ$oTcuB{l3U?R|KqvNKhOE;gch47;jbDk$D61aM;kv4mfLlI z@RgJK?ry9Ws^VrT1KN-e)gTrxi@1{(8xB7G0CF7d^Bar)(ndcyt=U>gum@W8go-p0*>eHn+$a1f~(faH@Ewi`W zx=UxVPGEy%X{oLRZDjVCdC0C_;Mw`==B48g1&CBu;lOhhGO9Dd>ituqTc&B|Z<=VI zj!BD5e@|1+13hb<`@dM=nH@IOtZ^e0`ue9$(RsJY@u2a5`_xfg-=*yMf3@{~@^4ps zR>&De_9yunYBdyY_A>v(;v#;#Tq_{vx!Fzhukx-!9RH2Rdd)_2ZGpcXBy;B`M)fZ} zXRIxxzLdZ&HVMh!QPZ4)8P=fPof~z2(-jNwEEQF|ur|_?GKOC`oq6mnZOzfNOvD1x z;0f9G(JfVpFC}hJKNY?~f5@L50`9=wq>FxGZ|D)v?)+~la>)86@;LjuSAtuE59_(l ze~GmG^e0&lylz_XZiRmXG|$`7EqVDeQwcKMzTUA4Tu^*im#@T@|Bw-xd)X9!`j3s| zBd?sJKe;a{<@NXonE&bK%L7*#t;TW7w7>IAQcAFe@n2%r+d#DZT>lMCpV?6p`oBB6$2=E7u%XMQzp#gqmP)k2mf0f zyRJ1?o|<=qZw9E>+z@K!~X-w#q2MjpT*@1 zsNbEE^&7UCno}$bYd{u-jUbJriChfoyOL9;Zk3(cIO=vC-(OmqTs@%o-iblgCflVNa^-kB;r&!D$Z_7OkaoA|NV!`GLs;_uxB`q6HD0?|^QVqjrTy zYw6Na|J4W+k|deT2GaF+q({<(TuI z7_6SY8Lrpre)84GUryYqcfCzVk{`g?bx*vVmbuWVP=9(jGEzx-;!rNrG)tjy9n4H( z9$r>;&@K>YB~Yjq*z?j>xw#FktSas{NClkkL!_!^$J4atApB0)sBeZmFq>KmxhJa? z0_xx|J$ADD6Q@U7i9ZwNU+s^LYih}CZXtP(4)a)}@$ZlOT1=|WP;e!J|MyE-ZXI{2 zI7*SrKRI*RWjt74AynCE<;Z_T9l!O5S4Ef%4%SLCtROvCL%~S_hwvja&t&H^C16s? zLH&d}KIaENL6xG%rE}R@Y-lF82ykZ782RAYGDK!o-rj8A4V&_A4y)c)$`%8iF0=OQ zIF-}fI16RPm-gN9YZtb)#l(;6dkZOoDod>#7Z0fMEAt-thBQ+SLgmi)I#eD$M7AaV zts?@wAtMtvm9jZNCl_M~%=5zLFOujGeD+c|Ax&xiVc)f-;ffT5{0=JVwV6dVZyW@k{{SN%N${_jFR zn(o#+WGY?4Ec+kQ-TGf}g^Z}*+gs5f=2qsy43Tes7=5B|^vOC`RJnWtI6gQv7aX@* z7IJl^TOwa^>sA&&*mtXBuQeim{X0tk&j>jW-h$)`%`i!WF@|9bQfN&-sl^;L zGB-TY&yqeAv3ZaieflUHU{qRr9_0!Oe){x@xxKsb(@sgH4zI>NU>sI7o5cAEqGUD| zU5g8`yKz?4uOP&gvl_w-0K4Aknr^itVq>D2U{GDW2{91_o#LjwIn}TsR@Aub4LQVy zsPAs4qVxbxmn}0fDAmGtT_a}*D`zM|lj)Qb7XzZLuP<@3msL*~5A686WGe5;IN`Ht zSlZ4falWz~KqQ-CLJxX0cI>g(GJvv3P0~O;zT6tseyvk{`zb)C&8EZz6(aUQ{}JeZ zx^apRfVE07GhF;C2YXFwux^$$41=UfqtwQxcRKI!n$0F15r=JE>i9OiXaMJ1YqwmL z=$k3R0t6G|d7E#d&VII>J5XjqU1XI<<8stDq>nW`h|qJmt2(GO#%;AK+n_oN_yXZ| zPV74yd5P&jxL<(hpo-17a7F}5oA6?t(p=#HP7BLZ$qs!3lOsrBOBi!cY}|5a3G&W` zW+;36`~G}gKy5_$r|EGae}??{TD z(xQUpFlU#aQAI5XQ{Kk={m~GkV$&uZZ#e8J$0hcrK#FbNmxm6A1-sugf``b3vn-Vtc%vhi!DtyxIc&ie~MrVuk7B< zVue$#DuBQ~lF3(4))EH&PPUt{NsUIYoehy^tDVO%#}X{i5kR02FkKH-s2R`$o6dVA zJ1A!Ago`qc^HsjeAB#%~*-QvgU!)qyI7NJkhq6_`hytEQMjPF%C|wJu(G>S_cQ)C8 zX}x7^>0@xUJC^MgGgbaQ91T5HxS$e-D75}%ouZr+jMQ<%=Fgr`5RK+4hw|wKjdnY@ zVSewLZX0qGLgZ<6)Ev<$D!BHix_)HOkW%>;nE;#4ER0p8c+Q+P_U;B?&mwQ{ZYU3B zP*vF!T{`j| z0FaDGu&A1p8)X1SKJ5Vy{US-cKJcC0y}1u*9Y`-*I%vFdI98FtmATr02WY>)F@?e( z1Q%wz)`AHzokVx0%J>XeorWnDRdoh$@onON7=pX9>m7F&o)F8-3@cWTVyX~aC)G8N zzK2D-Vfs5b&PwAYWuFnfs^T}I1|tJnquFL?6xzK*U@Eh!KXi+6cVU9f z+r*`&1P^St`+zU=^x2GwIR~}#JkPh@s%s&4J`z}jkGTMU`y~&2i3!lyF=a`<*#~a< zkt4AyV1X{=-vU_4im6R7om4Xd~9tqLUH4w=ll-)URZKj!UT^)k}D0)TuX?L=Ha0;T}Z~|6@xR z^!r70`PZAg+C=4be6SdU0-{wQWb<;54v3bNs_G0PI&lxZ*_ z{Ss{W1%-J&$VWk~P_jsY&l&h?4O^vZM2)v)RDxZVCZe59F5oKa-j0iPEmbJwngHli zOIcR1(Y@`KN&6hq55tXLAa$&d2{5OWfn!F!qcPdV5p|xX-Gon-=0|(ga8--phC32P zuk3Pr6?@G$%z~f*Jv;br(k3-vYny8-cl=`k5!DN`u=0X0k4Xb;gdX594`-)5!ff7wa+=1_W!l zM$QnAZj?gP{t_VE%D8tQ*BF5@#+w$WD4`dB)&So}L%Vhw-bb5~7nZB%LDR-wQ%Td_ z)Ki~{t0ZTH1a{9cl7qtYD%R&Dl zWGB6in1z)IAw-Z%>cw-_cMnxb=vWVk!r~gm022E`*krF7T?1Gh0%%@#JeNp$hkn%= z^Hd^Q3nxkjEaGRJ0_}JsD*kSIes%U5t@ID@a{ z5O9&uT-75DF7>qjt>@eaT!=0Ku*mVT8QD9fQY)-Jlrr%Smv3X1p6aAh0XA6;l0(G+ z&rIDaGQRJ^O14G3oZtd|BJyf6)ZE)u>=?SXYhujHY}0vp!TZVy=5 zACome+YGsiB=A%*U2=GP z{Kve5U1NtKrVYugwVMgJaXQ=Lk=jRsD|$x|pGPtY zCd;S4DNlqI|8Ns*N8CCEhN!TviVR;q!iRc>ulyn*TmU>?pY3Xzg_3&RNSOwlXh!v| zZr%ao9Q0U!3O$Z8jW8>?(8qHq{ibN^h;DagJ+#jwjKIxoQse5c$R7zU@Z*-uvIBZ2_!RMs0JG^siFRm0_{j5&@)lGx}FPXu74iDu4>M18w9v8K>XvH|wT{&+zH%xP{L>}+wH6C1Z z54S{=59NX?5?l@WIkuKJ-ENEhmhR*=R`y@Vxwq)>e%E)xNg^1i>=}s?qi<1RNysTR z(Zw-{sUMPWKngDS@qsI7cVRALSmksc9e6x_6LB@?Zq%4WEu*4w7~*qFl%kKAyyb{j(RrtAO)T;n-sTe`~RKpK?AH!|=X%^ZK`v;~^E;_G4q< zKOy@$)bv2SfR$2sq=0rR@OD7?mDpOue@L=gUB)h#v8hg0D_3^;J;~`>e1M@C#l;_n z$|y8lyvEop?2)*4((K^J!MHbFECg$hkISE%6p?7Gt!sv>9=p%08Xn42CYzlOUVxXD zHjzw-EOLqJ9l#ck&{je)*|n8PKlhLuW~3XYH|OiuY_d52ZKZ6koIGBQeJ;X)F+f$r z_`Tm^GlV~;2hPYpnl2+U2l z6>Jg=QRzkaQ9i#gIUSFF#6jMS2Q$%;L)mKGjK;^PX(T54C6`ma9$J|8ZtLm{7@|tk zb&_cACNLRQC))nh?deTZpOY}a*Sp*>ZJMUyS}smjcdDM7L zlbHjNM}44xpZLY-`&(%+Q2#gWEJLd;lWF6a{fx3xQzjWk4^eMQgTrwDlE|aJ_e{>S z{?cdtWl3_*d=$A|;NUQ>gOUm0ZC>ZzA^=0PdWKeNdWIYQ&g4I0jOzg5lV+|^JeaOy zA?@*Q>ra+)I+d<%qm*~j)z9F&x~+ZIXhK>&OSg^##&qL$Fw$;lc@1{Ph87HC)-Q-sOa(l5JnD>9R31S5 zWLhU&02u6yd;pkuBZRjwc`0CSo~H#o<_|TmY|3y`pWz3hN5g9}gSV)DI~O&1`$K#{ zvz%X(OsICS0(Ty~;&rdX@OHAU2Uj4XQXEa}eKE8GgCd`%7+zZB1nac2@;>mgl_)|V znV$A{w*s`3!PDUCYrY-5mfn7|Qe-uZ^V8ULHls9ijI=QgmotUGw5A$EPFPGPzmr45Ci(P(SGA2CZg&FyQeD4fv0i$uJYA=&8G4`y|jrWl{hL#QZ z>uygncG08=0a5nGf`~1iwKoh>RTs8luNvwYvj7C}dUN$+y;tr8;euEM119|y$5-&~ ziLWO4%;6{UwIALU6;&s;{`ribz2`Hw+J-2Z>pebvIw;QsA@+xgq$UtSzrD1Zlgeke z_NPv?Gq#cO)o=cV;eAfU6&h8jTdayMHa_?Y;lN_&r?`9gt5peE+0hCQw58i6tGO;W zO93DX#|BMgH%&L*4YsKl@h}E`D9#&#|PyErXhdF(D}_3 zH#>goab}nTeu!~mKT9;bvW0ZVzKBj3IPN+&lg%@9XOX%ltt|ozUdq;yrrr|;vkD1y6*==!KF;bL0ls#nJ zDQx+)8-l>+$6T=GqG!u)jSCty@VPYO#MzabZJAvZquu9|#D+pculvS`@#kHIKLf{^ zY0e1JI%42dNrPPP>|K&GDCYJu^{1{gtF(#G26^(pVUG_)UPhZwHw&&sc^su`>^aU2`lHBj*f8La41hbXn+?DzWBIHH@b-cDQQ*Rz_7J1!f0((`& zTvp4| zWYJ}fvCU+)r8u)`0uZ3jlDmH_Pg$n1n%nPf?0e+!XfPm~C;yy6$MLn;3hlS1t8XZg zp-V-l$#G?%t!`EB7uGZoS0YLy;8jJl8 zY)*+TUQvp?NT(~Cc*$0QoI12LoU$AX8S(0bB%X5H61)WG7IKW-{4yF(w4aNL@bx z?0}L47-dT&RqCS3#od5|w{M}Lx&3RM7Fm#t8T_n`ZT6#CAP+dP-jIbEz(C!+$;QC- z7pwZ50K@SH!V^f$_ISY(X6bfE(9Q3nX?wQvzEosK#o|m>)t}542LXF^9veovI0W77 zt;(vltV+IOnY3aP3T}fP=z@)+alvM0W`k7QcTNav7!k9l>a`7Gkf2;U=Elr5%txo0 z8EL50?$D5On64Fg#c zrgqsV%F-w&3(p56KH#MxF%!Z8}Q@{%|}u+dU6QWFT4w(H4i^wagTIm5gTLEo$W@w!b=|& z&!IqJAEX18*>X~h(omv_sMAwswT!BZsoXlNNPZH$49Q#dI`l4S{TWF_^DOySFviE` zw403yG4Y2T{#R&$P8+oFdDy&jFBY$oR@o>S+DM?oIMpR+fQy7R@WH01$i$)kz%GZn z@VJPXzC~HEo1T`nJW+7?-G;*%v4PYQony1=QKJFJM>_NMn|{PZi^?JT;7}p{N+LZw zPX3K^>2N(^=cf;M=paX#dMMZs_{7>i5VJfuaUcf#a#O@=81XAdCnO(o@cSD-cp2d2 zm;W%}sx%0_GLuYcp3&_z@T&i?egC8{ ze!5GN)J?s8ol!1d+s;0bM>;FJD?TVuY<5oMD_;>dj-zq5fpqST?6C~}x83Sx$o1yh zTeE}`h2l%9Xo(}us@?9}-LV=60#@Q=N5hk@Uv`*TT2bubBdT9qe`1oBdPTn9a<>#d z9~$_0*r-JsNUnNKI48`YxhYRWJb)l35kYprmk8gGrTP)o8J8TnQRPaty9$0J%zI`= z5M-#-4+*PoUto9$VpW-g0(P9{*sz1aZw5lc3?R$ErO@lQ4+yd)Sl&|R1X|9u_*B}+ zd^-G;ej0JSvn?&`&OYnHnmq98)uO`pp@Um%xA_kp>8>L3_9PD%Ocb{@7r8&vGXS@% zJ!{|Q=FG$9?OIAm(B#h0wiKC1ZF&f7yQah0iF&2p;X?(0Rk4AxBA1i{-N8J(mkj@9&@a0kHn!fSRoRi z#r+1={K9p)RTW;`_{sjRpH7FBOU^iXS&&LhqKpf({-c`Yu6lJxFL8-OAKG9>&U%IRDk;M#x;+*XO?s0jxj%} zKGf4-gSZ$?6^+ya!xUw)PFD$&bIFv@&Y@;m3{p8^+%QO(X`pPt)$LQDw%$$}A4SOm zp3!vqWOrTkPGMUYFxh(3{%%JS&0->X=dcSuywanSUB3DDI7(&U|r z5{YQ0Xg9E>-+&LQsnBt|adN5M1dL`X1thGi#~B?Whu;@W?$D?p>X;7Q0|x;Sf*b$o z7XipwR}Bi-vr8An2sY@NgGX3GZjqQ#Hg40s#|+CY5W&>wmYb^|DQmKsNqs@1_N3KA z8hXP29a;W%tKxgXP~9wT^4Z;54VE&~t-+8rde+N)%!sW$c{&ho#HBm%sug>21pMjA zehin~-Svb0+=cBG(%k9maGx>lWcw*NI#j$4-dEdzy%+s-Db;dT-yu&k44 z5~T(a_%x0>I-mskAwjkZGuySMhf0;V;miIT!5kx_Yt;OF2@*kzCX`yqpZ@-XaNG$T zv0@SA>ycdjEaqhNycPwN?t(wCIa8eARH|D^7t1bxIaSs1u|yY7nnFHPO)MmjgkH+{M7{SR+G%xV0%`Q%&%1!e&(5?-y~)5 zi0Op5k7+S02uGJA)(Wzqai9K*y*^uz?3efELHF80r56HMm2VEO;O6C0>~mj50n&tO zTqTwhDRge?FQ~%5e{}0OELD{M6-c-TuWBfQStDY*omL*(E-UFL%Z3nFXCBKJz93AE zEQMEs0)x(vO8ZVMxnx$o8kw7yF2cNg%_JCxvlWka`ve=h&t~@*3MAaeP>c$^kZfy1 zgwk1Q)38j>p4XVKz2H7l+w=K~%XxQ+HrY0Tm!gt*e5T;Q}}E#~Q=%VC+?*ioQ; zW~wT*xCUSUV1ribBu>bE(9-H9G#mJNPN+N;Cy^S|7|48ijFV%HyXc7F*dsbY0-wJ< zqmEm1IK#0Yolr-mM3Zy4f-TZ?XUAJ%A`O(j}bSrhBpb0J?Xs0{qkBlEZ_ zKTYPojc~y9etDFNUP}2>9*vZEToP43)w$(3@R>so^i72?Y#$pgS1{PW1ERHtQM_Gq z%ig#)$EpR-mvct{N(*f7>_@}ds`JsRm&`QTmutSAO%(R>l zq82=DZ(}d59I*H=P?z~9D5NuKSGRs>2ncC}--X803I+;Dh#P%=J3hpq>jWa#F9~hd zs^Wq$QqwJmhrP7^DAufB7sNQbdglEE`HjBT&Use4J^l8On*iyPc|{FJl{8`*=MTEm ziJ@9o&!TkYul5Cg3Ya%kxBDa)8#WQgPn0Ig`Gw{cQDZn0P+4T{iMFkv2mjok*ls8j zf-m58q6O94s|kx9MA-w_63FLLM$FQF-RmL%L8k8tNm1k?DB6BEuSM( z<6onAK7D9d7`R+|c{YEc;Ub7YpZjQjx0J3hk{YIev?+c{m3#Q5)nGYoAm%9MokVNC z-S;hfpkHQLZwVFr2IX3c``6xx^7p<)31Nf0&3z(3j55u4p+})jN8a~^h!H(SD@uJ| zKECCS85Xh%pyPSs_JfyodHCxv_4M;nNt>I%882Z>ia;y{awP|` zI11{w2`Hti&=gol$`d>$R*I6ry#!yX_WvkC#Up(-{bF*Fu%6bw8e_OG0;%we&&U*7Yb;6EpOmY- zl1qpDk*=pQjCJk#Dj0Z`cCflUA!ol=;O;tZyXd09+gzD0JRx`GI^LPLV+pu7hej-= zMJ(ynf4-c)JH29ky3sUicjI8<73o*WIe)r0amMHiPKB-Ova&j<`D!6cyHzKpowDaz zT_?3T_>yMBEVa;BFQ7WDxNmYQkAI&wwfF&P#w75Dd$%X@0`9`trs9*FV3#-O?qD&P z81PD)YkKp5pYGn<9dwL4%LEh}FOm~E&n{CEIm?NVrH}7uUbPjl^PrOnTXF_u=E)|% zj2D<4I+{rQXdBK&AKw^lS98c&R42Vhg;Wxub-b@SzI-At8W1T_aGu!g$ zQGAJ#3M|b~x|(J?NHVL{5KL!L43w*If_>9ASj>A|pNi<+%(=Te!w1ZD4>qN@TNunN z2at}%pH3>u??jlM$Vj9>J&k2$6wmCce6=T) z<<&6UJjTU&Wft`zdF1f&3(rN-_leJu{VG_xF$~ZfI!kFM$Y3tW z`O$P}nkE<9e1Onjbj{!T{3A<#J^K&wWuu!VJyyw;7a>v|`MX2FtJGhjJUsl05H?Pt zqL*e4<}NA3rNMdvsFLDNel4ZHQjDAhJ2&mDoEwf0Fy1FbBhxaHOf!s z*sxA}IuI^IGYGb{jK`Q)l$nTVEZBiFDa(_5_}=?{I(YBfoO~(6aXf4S%UMhB*Pn5D z4o^^VG`a3&&(#jD?P1eFwe)MPI)#R52xBWQ=QnowLNbz96w_f#1OBpZyYsEfLzob? zg~KwPMrq-sK4Za_4(!?JT|A1W5b)_>3rd5`Ggh4&`vE!%F&<%EC+#+aVL3&CWPGMp zmV`5l8i!M_@m6fkyBw*Iab&uMprUUJ3jbisPo#V+ZDQu*Z(gjb9A&jJ$J{udSboB& zeYTvR=|%f0B);J6^ZBDpx8Vmv@ruL2}lJy52I{;uI|se>dZP&4$Fu}0z@`B&P^T%MWu8HZ{!6-iQss(Y@vw6XBTiK=MmleDj7tXA!F_Ok* zL~m2+6B3WQeKGjc8RD98yQL~vPgTdmfSqM!>e4U})3+po+rgh0;9#}gp~%W(dCia(r)J~MG2B{DJ9lA>ftyO} z(aYcSQ>hFgFU-;zOs{^iYF?A;REt{{?I@J*)FS}?j-Vut^{%66M4CD?AH z6%!lZQCR6YvfdQB)O&-+ALy=AJ}c*}mg%FNwXe;s8@$D87LNCr+S&?FFxKjg?gMR9 z^^-)EzCVy?*(UF(Y`_sZ)^RrRrpyls$p>|gle`I(R97LX{yE(B64B6f>{qmgcYlV@ z)cWtrBth{n2mup?^up+IZAyzM#9^V8VL`i-Si@uP;;M4k9N zNKzdhwWJS4Oym%yjL7~Hrbu-01kbQ!3Qj+QPrpbbB*6`eF@TPtZ)-^*;`A41D-Ht4;5&ZbP;ICx}I4*JZi7tkMTOVj_`Vt-il+I7lx z#ih=kFEbVQ#=T+lzb)~wbLYs(wq*yixnVYvwy!^Xu)%WY;6s=9eKH=+_&7lhjwmYh z>~^ndvI>!Ps5wwl>Am+t(-r-G>tK-VptLm!KeA6ZtZbi2?ClFN#4;~r zo`!fdPeS~~ucE${Z+k~rTdPfIKkhKtB;rMn=0SHHT+B*puqge3BCbB?2 zb=!N3Xera+mtpjT4{=tA%#_O_xJhBwt?f;(xllC}2dR!a2dOp_L)YFruF?0f(^&=q zoki)_CB;@7;+bw6nygh)urLU~1_*Q1YlAX#rYD=w5*r--vnCAv%Yykam~`jv+by2} zdP32DPt#KIx#-)r74waRm-7WSBwn8-1gX6{9iuCLpp9E_DcZqy3wgHq3m2!a?7h~k zdl_x+=Cn2~Qbispdn#})B+w=KVPwc)IzXr;(eu2l!%60-~c-C|C1$Acgvfn6pn5Zdu@Vw<(XULgD6suJ- zw394%>K!x4CfB4cj*UP;OE@ zSF-9vCf}vJ1m-sLGeZ>wXgSYmuO+uxLdFA;cMH2AcN9;u1CfR&!T1k^sis>^gprQW zWxp@A;OEwa71P>s6B}r-$+bUPm|hM)^&(!*WF8wTB1YFVuUyYVgPrSQ>LJqm*b*GU zhoOhy`T>o(VVw3r#DN&+hPQcIwo|x!tQj9u*)wXTL;71+Ve-wr^{I&-LLo$Pw)kCz z5<&w+oKJa(p&dH;orE5KkD}MBHw2bC28^iP0!Ey&OJTZPm5+D7s~-BG&EB4V5F;mz zXmKMBxaj!IqS{qBdwYLNH^Ud#;AQZw!2|BlXZFB{ZO#Gi=Z`v#pAjv=3?A0mkZW9e zU0(kPozs9)ii2awrmJh|%&k%7Ix=ATT(-pEHblQp6D+>$*CSVcCD*X(jNt$OB7|%< zYv{DI?5OH*qrs+V{M58+-~A&T+zYysHP?G}sviE20{H)M4RVPm+PVVpnt8?>z{&FB zL&fYLq2qIDYunnV%7zm}aSF+nTleRZXgOa|ujW zVa-T-Eo%4+SF&c#M(sC^qW@~_1`#7NN7>FM+F~#tI1tU1_Hp;>rC%-keV?4)NvuT; zeF4PH*~nYC<>#ORplY1)rnOb%ssGIFo4=7Rh5!YIK&CX~H3nF$Sj{fG$l}M)(`gr0 z{|hp384xfqgd`BAUfI(S2ltW{|K9}g@;XnYSuXC~>f5sGXoP^GnLD#wJfHpm(W#*i zb;^ewn_W4UNuAmyg=;78#_KoM7^e?@dazpP+}q>5g5n`TNtc9Lc@fg<%?|0Jm7`t4 z`5m}Si0Q&2l9-S8etL?LlX>r`H~!`O#i{cuytVdUCVlJut8W7|BzcZSnZXv1Mdonn z-{4IH@j2sAhjcxAOW;UvIq!89l1c_`lqEw!3MK)klQL{p(*Yw~fW|Na$f9faUg6P= zd)t2qqM@%0X|C@nfy=&meb11U_-`G;5Y4w4f9~?Hv0<2h!)4H-UcIv zgI^91;a5W)(|+kdz}lL#93YCFjpInq8i;2akcXhLLpX;nZlS_0P4N=PI|{WKp)F@) zk!;ZBiy$P*W@h}i<9mxa!qLD~?SU3oBsO9l|Ky_g!1pOJNhGO+}&6g|9>jEY-8U52bjrJ|E^ItP!fr zEiaLhB8ue`N#=x2?gYyvVR9aK<%C7{%nV@=no_|lm{2im1&`BFvRP12I>vDXO7cdE zViSZ7CzEpy8KR^QNb4P-JOZ(ZT2V}T zxp52IknublWtSl=PMsz4db*c5rM0k8vu=n?L-3#qM$!BR;wM!`x$&(As1%91R+?I< zIUexW5@4)E&}+S&r?DFH^fZ|1H2EMP(ruU`5mp>w=p>?sf6(@qwC0BlOktRu10WBY zw5bfU`Jz6?3J`)$%#7ZO{iQ=GXGHn{yxuKJK19(xIgh3e>VkF7}+&PK1HiS zBj>DO22<%{=B!`>!)z9;0zfc9E2omM;LDJsJuSigJ>Cqzf$n8!-cE2tA~08?c^WSL zLvY)CrcY>;Gl~ML<+%`5@b}XvT^y)d94=4WFVv%qRvU}H*2#v`0GcKPs?#Ri-^I-F zfK+LAB9MfD8OaC&hG%v+Q^8*FJxqZplF4ShWHyup@*zw|g__|-VtMM*6d2aRLR5X8 zRISsVY;Fxc*@U)uvI)-nW3=Fp(SScj)1Nd8hMqKy{%E!WiUaUVoBC&C;}@5cj#kQQTQ1&N71rfGhcDQQ(>6vyber?FfA zZu&9G%7<@YR6=L>;L*ta4&F*8LTh?~#5l!64wrkx{;G?eJ%ZLoi%--Ri3Vhx2SDM9 zoOV*+ej@i2e(83)4Pq2KRzMM(>M+*=2H`do6M*So@j0X7 z7W3AH-Xa4=M03K@eKmUj zn`?ndQ|pPIfV)=zu@PV*?rVCIJesy`WNREQNUj0|oP`igLcwkLk8~5``24vdxNi)fH+oHl9tJz?0MeL!Tth@5t6qJTzt!O#siq>-COIikQFvjsQgVD;c!={UQSrf2h}9 zGPoW>dB2hnyWj3W<6Z)V3i^tZD~Erdpfn+lPhEVj9{Q6ndl}RgryWq5%0L1sg*THB zLa4f7o~>IM@)X~P-!0o-7Klu(+!(?S%T9uvkZN*rI|gQ&6MuqL7;5G3R)+Dv8!yJ0 zG+#rqb(#w@?w?+NOZrb99_Iez>(;+~&HAVD;Gf31e;Ui5;se}wVgL_bJQV;5L6_l~ z5k$f(G8?jk+`qjBq=yr82v~U}t=nthr%(=ZZ#Um98X{MQ00rQ^s*4_aJHL37PS#2h zKz{e&N`C2+JYkk59e;5bpUq5hm(iRRAozt99*Y3@mF&C>w1ezCZ1shTGu{I@9*;&)dIN;U+D#-=Ao&DHI082?_o_y(?%tPE4ia ziA&3@dL!{BsFPTA{WLFKeD%q8E6)C;PZ_ z7RC;Vc@|qeD=3wdec$)ugZ#0z!wUnKAN>{@?kCS0An9j?F-s$u5*8zxWhbFz4D9RUR zp?QPJ6#c`3k$S1*61eU_ezQ77KQ}~F>0faoehvS^3{hop#YvwVkV5lDGFs^=I{_}18Z35x`Kp;tydWfM6IL61j=g|AAUNlb*Y4ugY|VQ@5?JbU?d|Cm6I>El zu7HFL0riy6aht2-6Qr#HXd`R^=IY?Er(qg`5`Fi^>l*Ai17nAEu7n@4jKK3*PXkRG z(N^~MeeXsgFRQt&voONkfwsFOlbSXz-aI%sBIp>+;r}`(49{YIy?Er53~Nt#xtsll6hSaQT}gY`#-G=J^zT-{}Rgqu_M~> zdk?L?9&L2ji7N^e?Wbb<5SKz4fS5-i||%KOv>l+_&mrwgT$o>cTxmc-LmQa!lkR{5o-P!c`oS2d*oFn3fQUj?Y%la`eOr9pclpE3H&P z)E8c6lhH7s-(D*@B*_g{6{DqJ`akE8n6PAU9{tNgXU9h({nxMn8BcDP{x;kB)16?SK#=eu0U7v10V4t|-Oy}F$Uh8*%)&t{_9OFaJs)1? zPl=)YGtreVB_TAfck^rR z{U6*{FXM*H45-9o}xq# z@-h!^nqN!UdO8JeU=W$p!z&6XZCebJKM}Gy+7Z%f(9h~XA;-Jugcx0i14Apc|3|lU z^LuRx)6XNB3b^kAK<4r*B}L%r!}aUq^Bf7NGwZnE61f|G=S&^~MO6B4GNS-DiMYXM zEbi`!+QbEydiXrHEL3Oq?#2!(!2=)$W&!zwqnTks(@?$o4J@9w$Lpq1>=Jkl+mI}# z6W_|iP5Ha-h5yop+C}WeG1X45!%>%uNsNU@UVrd=v!(w>d6cyk& z)7Txu%5`lpFbB!zQgqRO=D=#W?jH;Pcak-tif$H|*p?Ue#ar>v#nT^%y-zG#JpIp&YLxr&W?#A8iuSTk$f3?m*NXAcL3k&2INb3&X<4MB@*sVy=)}L~bCC2uON^I}f9Jt5b>d%0;WX7&Sj4@m6(Ru8>6? z+@W@>x+zz|;+iZ$p2kJu*Fzcq5%Do&+$IqV38@N-jg}ZT%!Wz|1NZsMSIW{0$}J)e zrwydIA>3-@iiS2ETvl5msAh@tl1z)2tHFG*@q@FCT>M&+_6?rr{WN1BR@&5`=@DDU zB*w8WIYfSmF8=ha7C%L{k?)t&k?FA&3A4D&KJq9Bh~{E@MTn3)M=#ymoqD6Vc-wZ= zeaWVWhOMk!si`~4wS)#J>d%TJ(InRTOwN5%sz`Dz1 zT4K5E5HoWd`K8`lxRl%_)w5igEnoc>|jWZ412 z)RsEwf!tuH-Uv6X5vU)8^onFx#eYS8B!<1x`M3PjXmn4wnl?)1|`^2hb zxc}zPR-hTmuWP4cr;L$XU?sG=OM{$EgQ%#OO3U%8HQtU6L4S}N$3XKmO04`4FW)Fb zxNg3Ke>c*4Y8&$dR2@ZODl}Z$=lEspy3S&AXz-^*KK!Cs9+eYa7Qbn;<9?T#lBJa@ z2}*uJ+6PLd?9Yj3jTTK!jr4~_%;)W_MiW9goZUuF%4@Sp znNDV7e#{hg-ZE8iTz=O+$2t?s;5HdA@{pq+y$e6PQyrjF(a}R@`lj#wlhaX3JW@7N z5+5AJmi|u7kh9k!c!DS&PEsyX1HXc8@m)Qf^tBfWaj&S9Qn|%;ruk!ds6SqHoQQEK zDnVePL}(yArC3-lJ5A#EZ}NzR2yb4Ac?Jz7D*MM|Vag)E*$F&_PlC%eQPwu1MlEWi zNPO37ErwLoMt+I)*~0rxV&|_I@A6tZk0xVyy4JNm(r0z_<%`hBi>1^{2e`oRv!p(K ze~qRx1RCrFl-?lw-u&mGBj_rs{U`F+gN=00;6;{w`!6`};|j3bfagA_OXTeI{(s{{CT|;iy=``vLbRZJa5WU#tqL zo%}p`Trig@7eNd+H(gnLk2p73S*nD#o|4mK{OsPH-=|CN*8erf+V;G~qyF(Dhffkq z_tiBx$jQ}5WML~Y8)S-UVi)AxFywk1iEVSC!;_J7*2g2dTXErn_rXQVb@@~T!q{(Z7b5UZ#Z$DjvkBT~DW+>jH2oqT1N((=?Y)7VP#+@|7 z)^jkIP4PQlvUfhJeyTteb-K6|uP&kQ=jb;}TZoM_xNMPjaEYn|0Z3&vX zC9Wb~Oq?!t;&tm7gWsCDIkKELiG$2WET~ddq&f3rEhOLg6I9RuZ&){b(!L=Ara)kh zgZXYwZP7OPN%_$9ldTy%E8^Hy*n^eaQc{AABnbAA~TN};w2bKS7=k0UUtNp+29N?Jg{d|#5ODfzaS=Yyb6-i4) zs3Z;M%%bn|(7*=X;oEP>_rcW8gm1J?_qh>AAsi7(bCBns%pO*gfZcDLp0}e(+ZV0| zHVmPS1dCJEt$wKZ&B@TCVlf*n=}#Oa!H;ZNhqQM1kzPL-{jgyMmLD0(O)ZzTe?@o2 z@uKOY^jhTovjS*U7)u(H`b}3Y;|_k$h9IyGLcv^DAi~$b-AugVG$Z=YpyeZjIILFu z>OV>+5csKySOMVgDg6EmGI(cP_`i_%I8*ySo0y2iwq&P_MV3Y_0H?)HM3&FEE)%4; ztcumZOfLCuNd2*c(lY;31N_K-QZw`EJ`wJbAOfBfkGMofi@{3&S5D2lZi)2dh``3T z8hWe;7&S%(?-fd9Vp#~yE1MF3AYSOO;YHiXp*%QwOro#$K z>ZJ_-vN%Tztd^Tst*4y!9ywVLMh!t3668Bh77ml@v}qgjoYp!osqV?|#)?VD6SQ)j z$nVaRqE$Vm%Q;Fd=mnt*T2Xo79Js1JYKSM~Oyp;5M}V*EIixJ;7cmc9-wpqoYcl>y z9^e!c&A+3xp)yPwJINRcib0mMyGX|T&bI8OH@3E{u%x>%xd6X3%hL2`NXhz z=Tw0oH|MT48Fma-ISrUbJtvk=vH9k-Tq>)3TGI6cZ9Ch7EKlCryH2!p=Q*ptf|t?2 z!^>AN`VGx4=evQeSmi^+h{_QX*^lzjiRSskkb6r7kI0CTuLrE<@%{4~CLW1HfAL7T zkY+WPP&`s|;6U+c0fYcw_l|xRq4!J~0avU}DLp*f(*o?bZu7NtZ&dJzbJJwsn=jS( zV1m-ZXF*apCa-i8bk0otrEND_%VcyqjDVy(lya%Y8@hit(W}jGH=OrFO#56+#m!JB z!lq;7; z^mv@H>B|RJIDmp+YPJVcNS1_HSve+)N2o@CO;xN68FxDSutId8#X|53@n$KBho&hS zPS7O8`X8iqsAG|3+&cnH`WouwD)i?>ouPQ-q-UOm*Hf|G+b9_ zEf=8`hx#jnN&q%XUoHIw*AdL(^7my9m~eRp_YydqUEX@STrI#D5aGe4Pj&Z4tBG6? zQjq0D?kl(uEAYvBu3ZM7JX-J02apD&3a(An`TAeExGdGgtP16fD5PGvKY67*Ogrjq zp<-6UIK&u9jn;tbGn$*O-IJiM^Wx_jby|>ISFVl#QF!$x`5>6X_Q@#=ml7hXRLXjs zBg6~thY^MM`4JG@^a-6KPF~yZT;WF4f91HD2s~lX+Dk z0A=eMy6iJeZnTZ`n{QBwrJH7NV2I;6w}WIup@~#UljGnJHZFRa#!i0{i9PQoPgnl< zT};xz>K!t=R1qkG&>AM93=dr0bI@I2sZ(u1p@2tSuU_hrDI(*co^b%7hLjT+7h}T_ zI@~SLtBUuSwq_kDDN@-71H)x>St@vfIxbti^*#BZlgL?6Ofr$DjOt*%z^M`O29IC- zo=VBwr(BuwJr!O>)<0#qedikb1%#>I(@y!$(WX)M(>Ql~2{n5YdGiBaI5Bv=k~)Hd zI#@5MOSe==JWtRzi@=}J+3Y-P`_q*Za*Sy{mbr+@O++hKajgZKUPME{QYf34(C(Di zz#)zjoQwyTe0NxX(@asRWheySR4j%3bky1f_F?Fv;>g)E3u>4aII#5Lz{+ItQ<&vRl0)n#asJ?$FJtsqAut+1SO#S@}7tR z)wc?FlLrcdw(c}^;ld_tdEPH+Z9Vt!=U#)d@~PfhTAV4t2w_BV+CXsyGyGK)V)IXjHGtX zpdoVz4HjT?n{M61nAlh@^28)kjaTL>{bW4WrOp0z_xmb*V~flT*o0XdJeHfVF#l7< z_ThC?1Uv3j9%W=NuXw|C+Y(S(EkRN??O&TKPdCJK=BSdZQq3x_7Kdv#VXY&W%`|yq zDt0>E^@>!F6vX(U!ZLs>r7xUJgqnT zKD$rR=dLC=w6lOaF0B}aVE&Mhl0yei`qws$ERYfv_+!3*D$+3Jj(LCH4@3P#L3}wg zDLLppsS%P5K7ci(aJE@GBO^=^#buk9R`wFq}uP%OdwTP zO6QXG=RjVLp*{{Lz8sO|(t}Gu^|cLOvFk(}wP*kyDHyL$`h;uJmV#P%qh9)nH{)!= zX8meZ&+{z+{!R499nCuomtf61azBD z44AsF|CBE2C_J;dSP*Y_E1eW;^0(MLSCAC4oY_Dgk?3JJc2rUj!6Z8dm40cbiF5%D zt~R7H^cM{$Ti>AU|Zo*Scku#V#ACSs?1T>yu4rpo{l?Y@qI9+j%!3~MgXY7n&9d&2*$K^YY0@lj7(zRu4efe&LqsW6THTrW;r_h!qu{5SZ#h7OgD ziBDDAp`fNYc=}*n`iO0{HVMamL9+Xe8-)V6$>vX?$f4xe`U5^NQN06CN+D*+KXV@%AI60F>Ms*5B2D0)Ks0xSj^n^dH*ZoAiQKLwIwv0qE z0#BJq$yA!=Zla>VU*;5Sdea<-Lb4%O*wsAvT-=_lnQ-ys_DadiIUnb`Gw>jJ=_)L(x5w0N#m0W z>PT43|vdr~X~nSPcJ?;rl{ zCctBzXxA@jWMMo6r99wtiEmU-HyYG>EFe$hE{b3Tuj`6-_=?c6K1Q#lxvYG|YwqIrG8cI0 zr)|1bvH`EjV>??!M%%^Rm6_n$g{i?!?Y1k|&r)jbcuG%IGLS0agg|zW1JT7b4-K|^ z!_~})_G%E~aCn9zXgGXk<)XQ-W0o_b4qay@Oj41lmDv5%DlS!7IYMJoQH4P#>^f{c zeTIH{Z~3f(w=?*+UWRFl-^2cI$0hK}@N2twbCjJd-~$J!6eBY6L5JUDm+Id(T*Qe7 z6QJqiCx0VEN0aR)t@W5XUmX85oTJGW`>^JK9L2Ulbdz`1w#1oNqRy8FqGZmRDeozC zvYJuV!>`hqIrTqKKMh7xUkNB_(HoBb}Sshl_QQQ+g-PClVXfLq5@PR6jT@8pWRaiml_Cm zgX%G!J7ST zsCO38G+`_?Z#*rWDpjGFtW%9Tn8&lTE{hhS0p3I=dP~L+N2WA3{!R=$Tu;zAFlCF- z@af-1VV<4aUt0*-{(*!3U+f6f;3@XMOwM{EplmJjuaQrBTDgd0solM%!4v z@3EYVl0p~%FHZz&Z7+)2HOR&Vt|_bKl}QUk{41) zD|pl)L!No2QqKYIphxS5yc?s7x{E}WZ?paiQuWEQ9iX3k;GGmffS+$yRX$=)AN`@YGpfy%c2K+wA znkFDk*v~jx^xfuQ_qb%E1nzO743Z=~Lz}Xsh)Rzw9WA+`I2@A9%U3eM4R(;2BEn1o zO!rA?u0UvI;U}I#?BZw{{TpH7tjh`^TyRf$#4}v*m#(yK=MH;k)1saJ|9$vjCI|Sa zNQ|D0k*XJdkO~uRCp7GO6*ZTI~ruKVPq5`3^h+IXz_98vG#zNn|a{qHS|YX+cRJ9Q3WhCz<+V<_Sf}vtHi1 z?-@v^x;rhRu{=$Tj;*-EufJ*McSp*CIm*73aOX=#5bYJqiskyqG?)99GZP;gey*33 z(w>R=@#~ibm{-_zd1c03#T{DI3mJOdu4If}6S4Kx6eeGJ9==lcn>UeF9H?Etu5-u~ z*sgoLsRECLKdFvFC3RJT7x{tHIoV^B(LdO&a73o-j(Nzr*C0sBWI#Zl3nagcLRi7*r;eN+K^{GxQaPwkJO zy8HEe;HRP=AAy_ckB{|6@K<+ zfy}YF!4oec)VEoWE^mXAja`{Lqm^D<%zZr6`51CI?i8?^k~PD7-=UXHYQCE-EUS$9 z$oFvKa&^D9^`7@*HjWwCv0~!8+QEA!a1hQgdPVe&lgjnsfTOtixDPREYjHZaokiSC zMXooJ0u_#&#j9Kiu{y$o1-{MC!JogB%ruSYyg+4|j*~;GpsG(+ew8aP))L5#wJ2K> zJFY0^jYLeicO=j{gtJI6gc8g#y?^s|GkpJSc(cX{WEq`x>-jbDMtrzV*Zdg*E4Y%r zOwzWr!&CAq5X=8tpvmcvFF4_8vDQvSft$@FbktP(`0277$xQ6L&Uu?lLLQ0K0a?1W zw)NgcDBfbQ<$W^GleXo2h3$|fy zZxB)SGl3qIX~EoD1ilkM(11G`B;p3W@O*1r5@qa_H(}QOuOsF75RKdIXM$YdO8f)A zJOfk(c^G+&P|Q^1I9PfP*d0X1S0Wec2_9jIxX{+Hs<7;^PO#h*KQ+kU;EyooDIF{# z@DWM~l~IT-OZ{5QkHZ_T;=4YT>oxp?V1zUWK$uOX+s{q z99NBDwOnUhFFxN7WBB{>mdpO!w^aayE`faKkeVd=TE|ye0KuS99zoX^3C>}QjdJ~h zt3t*M{rZ=c3<~`!OnRQT@7C4H@AeYu+_<$qevO3H4|?6f6_HifV%mpQUYJ4$nN0M_?KWg#KkH zFKtvdN94dMu!k)k#;^0HK3~R*cZOjSRmxg5za48phwRC+O@xC{T|3?=?l6l5zQs?8 z`L|>t+(yl6f*e9WC)wZZ1b$MHGqFOiu=8|v)?f#A24;ito6wk++ht1d;SgQ(xUjW8)_LD9*kn8>ab~kRC+wyK zyJVSMW0eKPCq-9TMuZeZAfF_r>SQw$EQ+B?|OR(VB_g zr1`5Unc#g_qYmsr!Ppm&`3zOd%q*a>Psf%3W=1#K@j6%?SRH?_KK$b73TEXQT=Qp4 zv+`hiixC)^r2L(jQZUgP`LuMB+D@I;n~Mg~eZoAK%LBHYZ)^syuA>GXLrf{5+d29J zjnbsZep3SD+XktoKgX6~?}+GHD69>rlUpUQxiv|A|4@TMl)geAPu*k{E*&f#JpdO6 z9fy^aCsvRZ?`A4AvPiHiYOtCN9F9=84}yVf`0(1}b>01sC1~)H-6l5<2;4i4Fg@Gb zg4g|h1dPBG1A@L zmD{DYx+~h@Mzbd2u{HaRxflI4W(LANEOQNJDV=tt_G{gTq@8PVT(|v~qbV$%_lE}d zDTnUlx_28|V{PCFm*47(1HsnTG!M?$cl~uo9+!3xo1U*b&udde8*6q1y+B)($QVb! zFy(N<~XLzuXsvJ$v?gen0g#IX#A=@HT; zdZBa{EwP&Jh`kR-_esDgdpOg}8CG;7vMn~>V!5??rwyV#+ZvRqabITpN(E0kYjTgwOU zV{eq0FfvJP{q3zb>Tmw)9T#=eZ!1jnX9Ii_rs}}?(8?kxz=2xqv#a4ap8hqaB2Hv* zu~^b@1;JP^$(T4SSB>=EHK2s+-qJFPOm34589Ev8QLvZHz8t?6@z08+9Tc=c6A{}x zL`+BIWCKq0Dtq5&v$<_9(J0Ox6p0(>%^p(woQxXsktB>I#CdA59~8pmn3EtS2_>2^ z@Utj%s=Yxf%pBflNc`+FYnYsv7Di-9v1-2sWML_5iJee}v@m($x0T(X3Sd>CN)3VI z$=qb?B|_WbvDR%-ZWC=x=8O5l46}{izsok_Y*xBxC%B|HExe>B%PsRBCu)Hva#9S> z(f&I|p>VM%f>>v7UdVV{8`&{_F zz({Fz`AXn;5PvR0jo5;G>13nw@*-1Dib?BrcJi;w@9*RnIiHI6S z8ODs3W?iSu#m2P1OHa{^q8+xmh$U{nXCe`oZnpDT^(P=5MGVFxg`n9 z>r)o_>R`bm9`>eh;X#Nnz^tI7 z>GNlmes>+FQhPZLyQ~h97^RQ*QxC1buYVPvdf=AiINh{7ITB?KjWBw!@OB`76~C9oylNN`9vM-cYb+cVQudOuGN zgKKN3JspJ0qt4@(V34quxC-SCZ47k_t!Ij8mN!@;bVy@@PFZ*byuhR^@BuHdDGRc| zOAtpnp&Sml12Kr@^q{e5Pf*~)+O81q5;fQ2RSPxx2V9Ar-`$K{>o^oLJ~A27wemgt z7;&l%t)ykcVuh#%)AqblGZ6VhX<)D>9t?^6eGS1|X1(v8XUs-j1Np72x2hK7*;ewU0VHq<24B-|v-Bm(<0c35_3 zc6fFuFgqMO3_F4o%og4N^Z?cXaV%~uSFAVLOEO(Deli`(Zv7cswe=3Gwi-(nw8i63 z0Y7H>297HNe(VTQR+Sm6&Zum*H-!icsmG>z;`S2LPcZA4t9;cea`DBADprutrih#* zr*ICy(65tIXD=rqR?f`wQ99qhdqvKSVN=hF4fYGRSB?6-Er3p|n8K!@dwzq28)ln^ zrShtZlOx^z6}SCE5pE~F+L*n`#_AW<=-yY%pAq9yFXDp+0{4!4F&G+YPET8Qyy>kj zvP!lvTh+GnOz6Fj#NY8LqG9X zgXPk)pt4~poZ~!CU_>6q%N0s7aP1#O_{@z6Q)XOP(yPe?J<8Bco|zz;z?z_#K${?& zNYYewtJ&;*PE9)t>sc=D3F-_@dZ~fGpNx{&Ym^!ELUi?OG9xVh>~nI#PJcM9y3(LD z7g~Z==E|^_9nut&c2bsXo3LCs$(EXeUf?4fKw!AO8b2+3K9(obUJxpK+#goSsJ;nS|bE)UVJV?^;U_%&DV)>UlSmEb^=^ ziX4E8#paW5id61wx0~Oz;I~)c<(JLPYT8ccqf(Hn_*z8JN#Kw}%CV{hK^}1)k&2&1 z%%1OFXbI=I^o+`jDbsLzby2%=lb0ZMRjvT$tyHx*m7=2B{lxw1mx0!NLNCnZ`Dor1 z45msf*2c3=1x0Q(8=2`~nj>MoGNX#&K>|1Nhx}kRt;3`@E(~iqCT55$+xjGtCDJA9 z%(0S{B=ClhH9j@LjITD{Sn?IWOv&n;0{!PhO4ew<1CLZo)n%c{MIJfb5|t9?Nyj2w z!4WU^29_QK+Gn+JSkPf)PAH1dkW)7op3dF86hW)*ri^uxjx3WYvYHw^Qnv;kL^%qx z!q?|=Qk#vWfZcCKr5%x`%8nzFAru&&ETnD}>CP%C=4cj#<5h}_JN9<(Pe-5*9!H8z zl%pAZ;Bd1xIX)(HLo0X(6KB|Bo+6>R0-t^CI<3E)Ry> zi+C8fhy_Gg`K<@2+j7hi+@lD_Au0|(93~_6Hiam8wCvcmeiQ{r&9_RAj>y0oG~HCr09h z$yrgC@ZzuQ_(#!gZ+9=Yl{Oo!>C08_76o72Oy%3^Miu8j6o{4AJn9n}e4q&-U0aKr zxh`K`0lx6ux%aGLkjTgmk*!dXSyr~JW8am%M{=?wBb8B< zO-MA%L-tno-sA9l-RGe9=ll8mzTfZv|M>qOkN4ZT&TCxbc|EV|b<=(Bb8{Nmbk9<} z^GQZ)x`E1j@-BjN@OCf|IXXRw%cwe1-<>DIqls=JlZzjKkm4Lr+He|@lz?&$~B4nDr- zr-zOO*Ihok&ABNs`^>G;5n~l9=;*g6lSxtkKBe zCOuI}!?mcxuTS4@Wfzb+`~If<#^s)Iu8H<6y~AQxy8^XH?zL(~za&t-m{n#o7?~8r zo+nAmuBo&e%WZn;PF4Q}#ZEf1iK&SoW7SWaKUp)M8rOU`ev0uM(^l$wXk;L!FmuNm zQc4t@cDLa=J3YGk$CA$fhQZYk_xc7Kt?zT^M=81`A`y|V&wlhNInm5Q7My-x!XrDB z?c3^S#V_hFylz!5-&K$G>ZqMUl-GvT>n0Gz7_lhMw-@oV3HS1QUex@=qH`wn-l?t= z-vX_szQ`x;NTm1VGDsY8`|MfyX|BeS%unK9w?@2p-90ycmp6J2x%Y)*9n2*9g6r3k z!u~v?-{>DQLwRgem{)p=vkYu;FYnmxuAjFlmD#cazt$~N=gTntR$}_frTKmBr%>XM zZSc(yvnu(X2UPTzel40Fr7n;@&8m1JJ>VC(HsiZ4oXVYg_*UR+=>i!|Rtx&mFBUs# z6*A;R%IKg^@}Be>Y#O>cuTEy2cy)|j&%9Q_2+cx`pwuX7jeCCfZg&E^iQwk1SFC4E z64>NR5>$j9VXPk!EeA}iSIxAxg=*+Wsrcz+DZC7FwGv=y4SRMrD#w(KTRzS2xsRt^ zre}k)o!n1JA_bl%PfBvMKQ-b!gpIYH`&}$4X!7xfH@U6ct&@>=LfEQx3=%E{zW~oI zRj*cvN~noe5=zN`5}a25Ft71rCioq)5D~}LQ~d${L+*paL5;Lcg4cR$qK6fLnn9D!X*iLbpK9SPS< z4=tKqvp*LW*V=;oK?47dS5FRZJUv5UcId^K%>~-kMTqdwtJeX`yFroHuMd#XC|IcH z`8*qcEB{^Ytcjijg|HCaY_R}`rD?k5t1&At`}@|#oh+{P)r#1vbRpD)hmxPo(eRH1 z;Ko|N(O#jdnYk+PWM=SJ@xnYBgwo+7nm&f9g}bx}^kK-RNAASqp}V}xhu+I8yr<|S zym+a}Y>`;E52o&hhlB(JR%`L}N?%V%mv#te2IsWpYG z8TjX|5J8X=v~@LX5p(rtL{YJ}9@(xd<8~d^d8SW)x2Uq*%Og~zOm^mONABqedJZ<( zv=`A4>gubCJs)3S&kJvD3s@8;ni@nXs>{AnAj@KRO4|u_9x2Q5FHx;s2_2qYWwLQb z$DrsRUYJ|NYQODHlJ@hx(mv3$&Ufyz--1os*+-^O1T6=@x8UOMvsWH+dOx`G@Vqz0 zmGM`{6&qgCor#W>a{t)+lldb(Dd)r7H|lXxlMJ~(nODL(GG8|2byCsks+95GP&YAe zV7?vGcwF6NB9s}*3F;)FGvZwD-|ZwBxrTb%Q1^T5<)`Y?e2Mlah=^HEviY$^oQ{&R zmq&20P^LkC{1H^GQk&@kAFOY8^?M!*twO!+%e$Dt{^rils$*TfuU~#Xwzz6hD0)SH zX0_Qv_@j9$$GCOzmxv=#(tPsd9L(%#Pun60Tct}BRMCiXS2S_zpBjvUu0ntI293wN zjh=Ya<0HWEd2O-E)yewM2r3y0d6I9;!fB7ABS_RC8CrSL31+PN^+$dVbKAoqRUfWK z92#aGVhbMjP!BITX3op@BrW22lnjYHaTc>c+LM9^@>U+%(`H4U$p#6$T2w?7*XY?2 zjJ4^VY6Jd@^1r%Q(WlLh$J9Q-dqQ0{_w8g9!QB=R;HCL3*;F%f|$ zInJ@K&QE@i?!Gl?8rOAe(jv}*;%FAz?X)*tf zZ2TB6Fc-(hJimipJQ~al|<} zd^yN{SMU|T?Nt9<`JKE#7R$#~&Nu0Oyzi;meu#WJ(a6Ioa+(NvI-*xO_=DRd7kMmA zg$kz;7ehG1_Z9EjR0)MUyb z^1K`@>1iR+&q&D}DrY~%sjgxn&z;4(vRbw?qI24I+9tsOy5o3*ybkeYEcfxK>Ae_Ar228D zNAGZDj*m-BzU#@b793YvSQ}}Sj)T?H1OplVTjcok2xvBK;nR~A9UW<}eqXh{!ytVx zr0(3;Nf?Gx?ouD#8TpTHe@Lydr-866J@*jbBBj-@2PqJ9Kxn!=PK} zNgD1_%{0S|TJoj#qhGae_3J06J4f$iL_G@tyZ(I>*OV+bM>02u`ZfDByNtDpJmUw- zit-#BtiRKqYDQh$kNl}|)g_Bl8*;B?cT+zHf$BE=C2uIZQBhJQ%K5z$JZ`Q`eDz{C z*Miu#juQVK-0BK%aCybWpI-Tzcr>5*I*EMP>Bi+*{aVhi^ql`;p$O%)+fM9c<)K1L zRs;*d(X`w@?pcMA=MdbWa7(DTtccdDWhgIRER^qs~mc(z=^(e7j5kcg4u2ic{Tl{!x+v6(3^L+ANd zZG5!0;)S-ka^98DquWC9Xxlz#7578jx+F1~p^qTG)oZebWGE4+xv7{$mNsFD|6xv> za~cJeZhAGkfaiIIW@zhom!lD_a+Ef0L+iT%##YR&ZZQ|GyI!gnyMn&pAk}#+MVD3O znwYd2Cr1G5>$6PMU3J2~PZ2MgzVs2&2^zId@VxPpwQ>-bbyu9=XxDwz_?Gc%?)@uN zQo_?>s<&xOot2pRq@bHp*QCF^_B`^%XjYniBD(0NtklrxXf%O-t7KtQo{aFq}}J@A%SBJP5rff6WVgX;t9B zHHwm!>d_~!{jesf#MjR~)FM4h;bLiic$ipUKJD4{#PccUyL#tD4!@8nl)8xEIZU#W zBXF$o$e}}~r0^|S=pB-ygoUwO2wME-|G+ID@aO+@K0hQ0Y(*AIS+IH?^BcBYQ)Q*v zk`M8E-kTKLE6Px0^PE=piXbJ^rVd|pz{~5&@v1c)A~Fi1F|QwM=r4CBJ5Rb?Cb@=+ z60k3aj-{thUQ?nzeOotLCRId8A*VT%PGd~(>XRQf75Hy_DG3{h@$9#TO5gFgJ14LUw8%BzYpa-;^PUE zosJ-o^|%;z-bD&xhP)4W>0mz zpaF$k#O3=(p8E9DUr%`8oR;h3a%87C`A}go58^Z8=%hz1!)BouFCzRf!VXQ&kD!72 zudeocw$CQs4!@Vr?Xk4Hv#_AuCpj?C=drWg(KXhi@=@4*b7W^kqq)?gRM>sjqcm$R zKHpz5IZ4tpFT8SB@P_oSf%es%p}ySR*L9ixb>S?|3mWCcrLHfiH(d4EjRny0`SUz# zEIYq#26P7!pyEj~5{X<3s87pSI6!Akw0=eS)uwKT9F|J>_ z!y$C+{*{qT&ej1uAyyHGPd~v zKO}zV%O}hFaq*c(21Y(4sL@6w1&z%^qHtJ_l1P?E;TR;2C z(2=$wG`2W=R+#skzG2&;(lkVMXgLYd@M2A-r00%Z<@S6-C8XlQA1?T{tP>KHW8tt3 zk#4O}y{AkWC2ho3cbD3PJ2bMFs63;r@21B3%~ln`tq4xNWx?W86A^--K)Q-Zp%w_Q!PEx!yU&6 z3#~T`sGhZEevBxvY#pc)Ft6a4_`N$3ZsRH8xMBPC_a>?1iBHn((?0he`rH}! z(eETB8oH36PjmZ>UlkLStL`^N@W(2J!daS|Uz*cVnrGVA+wQa~Psp3&1pVQ6H~91` z%iQUGvTqWLrclwQP>Q5buU1Q4CCT*Y&aGDa7LGo1M_Y}&$d|IWidHbsmtlH{k#X>3 z64i~uPjLfY>w+5}YnIl382hHyT5DmgublqZWe`=JY$lKMz}&{ zo{_6mr~u2(&s5HN{_ZZ1Z@Ao}r^aSGEH0S2`2*|hckGD%ZB|laa3OW=!o6O<_qS#X ziez+a2tVa{i}%(Lh*e{Ti^iWRYg2yZ`uFJSWRs1@-&}S=^Ikw+euTAj+m&Z?-J0cUpV#Mpw+y+#JLhh<%v*|- zmlupIy}J8&^A%>qZf(R?ShZ%IdSKvM>pI)0>xh21&>lMy*M1MauR7~ z;hqw6Q9?=d(sSK6MVby-L+U@$!<5`Ft>}s{bNDUzo~iEaJnoQRpRZFlPMZDP_gVGn zQ+zUrM>JiDk)z$DMwc~7oE+uI-=@{Pt9@>9Qjxb!zHTCczx{jk*N-Caom$)VedOL`QK@YFK3OE1So*@|rY7 zCvo^&9wj5sp^sr9v)!HfIKp)A?eQSLGGmUwnmdo*v5S5@#cZZPuXyt8lzQMzIX>@~ z{!LR+^uLZd6|m~`6OMm4tao#pGT}UNgKwvPSkKh0lZl^+2#B(TM@&hyNukoFcON6( z*k-RFu^smi!@o!(t{5vQp1e0)n8Q{dr6};U;vM^sUjhD+P>l8Cryr#jepx*Dmb4%~ zR2(eL)Lm4pGkVr|VfFE*zl2^{*_Rj&(Tr%R;!WPj)&zwJ_OSM2Q4Z(YT13vHtT{E< zboE}A$(#vgbZ=o?kgJb%eD`SS*o6xEps{49-NNJ75VD6!2$6GaZ;1{a8mER2;X+4g zgwa25xqQmo6u>Mn6ibwM6#qRl@I9AtQ76Q%SfuZyJR7O17-5k@J?xQqvn6u8F%vmc zW}IN&r{g(2ig_xkEV{h-jrYZ`G8A?~z|tTII)RZWzAY4-nfrPsZuNq|NR{#Z=Hs^+ z{rT)u>|)PB6Ks_}y^hn@ph}-7{kk99RhC|O$y$b-4S5hk5uzT#7h)eGNMp_0eZQa% zcjJh9#HDy%r!QNrCdshrBUg91c)Pv=SKj9>-3jZGW}uN&m%f!*h~Cv*wE^i&uI0nu$(BdnrV#9 zlcAtY^}^M2#*cXCzbUkQuwtv=`+n}KURaFviLNN#CxM-j6anUH3g=#HMo`c^rI`5; z_iVvpd<~kgJyhr?hsYryEs^6H>tjB2XiFUa?h2a1yNZanhoLIuWul{}AFD@%ysUkD zy>HI#mHAf-CM)Xz-MQHTThwnmQ`-8pM@d{A30Vq`=ieac4`T=W=4=Nlpv6t>)D7g$ z_6Q`gu{2aZ)PH_%XKF=qAaQ33^C4kJjmd3kV6K06A>0hw-U#oQ+xk2=wtHsEAjWO( z6n4J0XLmbX!VQ{xw#$&wVJm^%+7)-*nr-NTlIq`9M!SbImI*iQu5S}HR=US+Ek8qL zEowl) zHU0zJe0M7)cTHws+P|U?=~>9M=_R>b<27D~ZC2ZYQj*tXDyRLu`jA+#-9zJvvzP5$ zau5nr@xgYW!0TaWhSwOAM}hg+H^%<>?!;6*>wBgV8x$KqnWs$S&Oh)gh0HIE*b8Gc zZmmqJCW&+?jmK^|#Cwhu-=8e|hOL&4m*?Rw(3jinm7by4ly3I8M{ct^Sz@K1c^CW& zp6>)1l%UNy(9kUB6-<%M%UlM>k6k6U)5;^iled0JW7wAyeFf*{)>hd&w~Lv$3N{=h zXovSQK8-Ht`|5K`BL|#W!c6lmKf zLqQgq$BZJ0-Zc0*=>SFYJx94jr=35(zZ6x_F{o!(2I$zn@ zu=%|~#7ZK&qM-SY8f5aaTaf9xK~Jn;Zog1RbDz)yU7`5JY|lU;XjYWenq;}$SCGkE zQui8!sapE2v-&DF(^@|*`Ab{r%$XmiC!w7#>G;}3G~Me$v#lqF887@Al-7I5mQ##y z0d+!ZTZ6R|-%_w^+e*keJsa>8Yf8uW&*s()2(0NAMmKZyW-FaE0y9%Dtqsi7t>s&e z+wb;GQ#RSYToTQj_z@h;WYb@YcHW%H@esz^+^yJH@E4kU9`97hsq?UulkPS2X+|ok zF91xFd3xOabj2EFLW=+YH);LcchjW49IihD)8DDOXTJ+Y^gVAly`{H7Skm`=j$Cj0 zd!|fYu-=9dQvYlN(Fej*`bR*pP~Ox&>{w>^OH;3>1<{TvoD}-`K2O;dC&J(HyeZ8G8;mXF zl4_%xa;lr8OGGoAP;7lOdG31WTKmX*wB=Em1+%JYr3|0`RaB#1_b@ou3V}6TX{8#I zv)ak@I|Xxj4bmm%HS*X#xFL6%> zqMkfTbov7@!0-u7UcwK+>wqY}+w-C(*#Z{`+9ff>5v71zZ&et86M>fL5AXK2=46$^ zuE3TBoYtnL$WeIM;z~+kPyuXu7~UGi5~$}sIz1AMG)kBBwDQ(yOEGw5;ynB0__G;! z0~`ORSTHLHBLZCH<|I+?ADUDy<*%X4%6%w_B-2(nUk7bBwdn<5o}@@gPgCqdweNQkuaNZt}9{qc52JxMkzz= zd5c2CN-<`~NzRio)n)3^%xho9M|w|?^*%nG@GzMuyGgHW z!?k&{H$5?#Xrf2>M7gDUf=F-V3NgQj!<%w& zbSH>%#}8HtF<0#kdJsf;q*^nkZTO9E_|49eLvz$E%VhE^fvY{fVacy%=ptrM%`ClK zs(QHXXR{Di*|@NNMxm1BUS&#r8L+)##q8? z!({(=|GgMbv{6NYHJtc5H}7>4YbfP)vtZ!T2MM&zDJ+~AWQ@&rSS2L!4M{ahB)c_p zcFG~pE00<7LiZR8PRyfQUSx2arYcwMnRzNS!9JkZY3S6Q>=zU+N;L#pMIe?2m0oQQPM8<&MT_ccW!FMoqE{1DbTWhB&v z2pX8!uo(T?;(|25I|yR;0-vjB7l-K<7 zwU+rgRlL=^T64jK>nkb6j-RjH5(K_>~gKd&wi^kJDioWcN4!cUvGh`S%XOYhEeY zN33lRC{M0j(jI+PjZIgX%Q^g{6{*ir)y?E_Lr2NDHGDF#TkS#=Vm<5E)qh*T0e zu|$I%ghiM@M$oc1D=tAFB*I&eVK@NlH^t;6ubu@=0C?Jk07$Ptvg_xDo5rkQOOs4k za@{!54aeO*6=jg!b-=AAnO|ePcvBKcZQK&zK#y2GGHhQloJRUcCYaeE%Pwv&CAA@; zRQymOX*S>_?7%12P8snf4e>4`@g)cGNG5v8MPs$Lv2820QKGtSN3~U#rfm;3$KAmf z$@78R;O7GF=i)cUr8D@*N)4DLukM8acRDY;gK%Ray78~5+{Tq2enErx_TWA?pq%$( znRM942+(PFFkluRK;0Hj7cRhsovM?4aOLb7Lx<=fgrSio={itj`gf_}fa}cs!p3*t zbWb{X*o?y&fN94oA-cT$F@1Df9BcDlltgf;E7k`7_%1+OWv3Mq>G9|#`QiOzB3sQAI^RoD5pa(3S z#t!=IdC9R^MGQCu`@Zab%B|uxuHp4dx@@LCvZH6m1>QuR*t{eQCLv;L z-lDe#Ac!s+WO0qn<%2#6sm>U(y6Dz_HtD%rr-BQ{ZrSh~AVyW=3^9V{z&8@%V zO9jnk=*r%trwYuft)svd;5?4)_E^^-uRX6o+uuiGicVvhbbpDbQ4spD0m1`X$3E2n zz=ned58x0hBuzvDcEMbmU4q~mDL8}2H$K3vrnu+2Bw$40b;%<96-vhxxU|448Qol> zzz*&o35q$9hF1-N3 z;RU!WzSc$o%FQx4$s$}SvUutP9eWj=+k(si zF@rpz156R;(DNn;QuJ#Rge$ty1VN6DH$|K}iaQ0+hNcMWYaQ@u(Ln*97O42~F_w<0 zU*kk~aY%t6X~Bor_S&()X4PJi?EE#{k&HfRf}lfp86)mPAcc*9EPH$Ke8oE`1*Z`9 z3S5*g0Or9h23)DaDTLLdGvU70B(rT8?3L#)C0Ml}1rK`8 zfpqFW459;d5ggDskq+QQQ|X@m9@(6ZkNBA23oV^xZ!#Q@N-Ds`GaMe=dJclN#~whj zAIkqjw;?#H|GVG+!EJneaIgFXdL=G-co$&?<6s}dB^Mw2xQE>w(Ol&gcBW@dO}`St zj_)G=egYb8UHH=!5pv|{lueCYQlXwDe4k)T6n)`+@DY%YOoo@5LkZ<%-+!m#m=MxB z&bcTv9jzexZNQ8Wt!d^*!IS5kk=%ad$Y|IbX*_O_j_ zK~m;h506KIq@ylj+Z1WyUP6jfJkU#2@T0H6l~dRtj;7rY2Gq(^JpJf_m}VD=);WWe zkTH zh+dIQouelB=;hiHlS^Q|M4+3z+cc206VsFF?%ooXDe3ANoK$Yrf&8)N@U#44S>^kV zrn{BpMoompF|*6eLe9eVPWB?=^`Uy?_K9azk@iMtZ{08OxO}lHbLJ~$7xACL28U4t zFQYab7s#JeFHKcVaVd1*pNwFLxD^6)P3b( zA*%&bFyKUs879*yi=|R?N&H&iQbT2c4jGd?eo8-+m%GA~``#}3fO7EpGF78{Wkb4U z@nBi3sSr@=MuQn<7#r?`wee@viZ<4E*s_jI3E>p}W1^6!YYJIo11v!%aXr*in9A96 zWsF}7iiUJOw#Z#1$UYUpwmolU)RO6dJEd@@dh=>=ZUV)7gUSvsz$)<&^Mxne5__vW z27`t#16M>s%@<}en0n(cb4%pacC74f1U{&q3g&~~`I|5Jpv_Cb&km)U7gPhYY}I7U znBg#oM{p3Esmj5?^Zg(a=ibLsp>(NHm|@~vp6>-kBPA}d*;vzkXIg_?AZ zlZ#M&!;b2B;^m8LAxRdi44G?*ZKBTt;<1UpM6aCiTH?gC|4x3Fa3&yL+`4b$N#~5` z`L#y2VN>e%X@y+Ui6aAP_nF(LIgWG?aD2Plxk#D5AuV%Oz)X$%7(te>dyo{3d_$K8 zS@kuG#w7a_gz65fZQhq7ECfX>`NaDtklZ?zP-=m}_)0p*!rjj8=jKbQ2DGJ>siOuD zi}>5ERv}s9&&?6?0`UxnwNE@o*LOlaJ& ztDNRqowPCLht&*d-D^_6+{gLq>@WMR2KbsS*U1z!aipoTv)3y91gYp3zH+b^$R|nN zzocG&FuqbMI5Rk*WQ5krU=ou&0S(aI5_zAe#)UbVr1r((lX{SE;)B?vd5^O;tNgxW zM8l;86f;55bbeS^C#$Y{ z_Puhli^R#ME=5VI)o>G$+ND4j0lw_vjVE@EIhcz{3>TKcv&)`)A15P--RgSIV0@dL zkDrat!P$gJ8y*e(nV{Dt^~;>HsS;a6oAq7F&rj(J3VTts{tdnHxKpY*rCO!jH1k{g z2#}c#LTy*u`?n!jg*sin3v?f^Z7rV@xBj7gT3iG9hmue~lrwEfw%;>-gScL+fVYv8 zpXfe#zq6@f5v`y6L=TG?oXF7Mg?deIT%NzwY%M-o?tfdjzIjUeB9V5N)SchVfB^z# z`QGnfr>=u+?|IxtngEPkBsxP&ktK|7aRt)K<#vvMRRC@z?k|aTXT?Xo zED~uSu@8Xy0CVPhpC_96|E-~fhAk>M@{Yi0?|1tkfJ%U|*^3qD29#yG@8+8>{JQ^X zOP1+U|JQvrTXY9j%IetNslw zTu!62hWf%`AmBPgUBg4!ZqISqKL-Vj|WWlL`n*?qeWE3EYH>{aImjF$YUn_Sw{Kh__ zC-KV7K9<*Os#3QbDjdk)h#p&MRCo;tzN6wk#-)j(nS>HCH#2XGB_G?BZTmxhz1-pK zWI@o_siDf19uP?R&N~jG;{BlDyyKm;X#BHus}N>677s&BdKL`13e3do-=%E!!C4`T z0^o!xk%77ul9%9h(%6Ct3Wn8G`r0Jwn;{r%HC3F9+gXO(5AM$?P1uAQ3==>Jm=KQN zLptpjAPgRUIKTgn(H++P`F1Pkh*y(P#&hhdJ{@=_fz`(uDOWN;ByYZzT zza}+n!2}oLA1konttV(vP^5+6oOf?K$OoK**=c4Jj+QWXTLnR8m2EzL*WnudJ6w7I zDeU&t_1UTrRMO9J#s-(Mt`MLCmDD)S*yJ*|5%Q)BmDD`W*y1vFCKNZ(I?jl3850f# zG)$7470YT7*L)M1++G9&gFShR+9PEQ}GkXsj=9?}Ls;QjD z2Y|3J-Qh(1*U(`O{kRVQyc|(H)zK*>hy%;PHtoH)6>j~X90MbwE?gt{saN@x{KI|? zeZV`4@7XqMg;z;I6_Z2<}rfC7A771P8`=T z8~%(*Ij@M}+mf>vBOV&{gJD2kcUmQy`rehPeFQ;8c1hvAaOlYW4-o$Ga^44CGap^` z7;y&A=0x-(AfxLZ@6-G508(rekZ_r=1*YP0<6m8Xpm$Efr`N5u-gI_N3IQ$n3m)VVmbozsDwfya*l@>$Pe~ zB#iG<*n>#miwSrso^AUzK##uv1i^~@PlFJCkOx+Ot^`JdkZ)?5RJ1-AcSvZP8FWhN zN*_NAH>puyhEZ9#`TUbSlfX9=L(89NBeS3GY~guwD|gyK2PP<$+uXJ2oJ>3I5ImtymIo&n!TV zE44bS2H><`OUP+vqYZ$oD@l287A!xl?#PzJ5b-l||keB8ho1$NH{Bw!QA!M;rIko`?ODl1kL7p2x5TO2|xvab#?1 z(uZzOD5Hi*-zj!%QoL==tEhhCc%#zKTMfNQ7}WZ_;%MrX&~4F|#VVF%w+G@M&Sn0I zjlv${pNc)#AAY;7sqwdR*Ur__6!4JTWXNl0%phrZqXTUgj2J>RpcO(8+EAu_q(4ol zafzD$Ldt1@vY$rU!n!S*9ffGMhi=;+=_^C9*5zK!m>R`89;2_MmzG|njG*6d9KXb> z(jVB+uMk%uOD35$MqGy7@%lE9;C3qhGiK>HV-ZPw6=vx){93)VblPj_b`VV;dc&0v zsq3pUxZ!#jyfzGMxb8sYU;qf4;I*ND!*vyY4_+6+tLxmmpM7Wjk_-4yp1JI$xOZ|! z+R?>2U*<1<@73$<)q`a_u78uup||D`VZRtEm?lg%wv=?K5B!upUYGi_&v#>11;`;^ z?KS?`oUDP~UT|3Z>amsqTQa)!XEt6MjzF@< zbAeZ(4SldzI1fX!&j^~#Qt{FU^P!lsNz2+_{+;Jk|1@PHFp4mUEtj9}*k6QIYeg5k z^9_i@IKa8_Y!+Ux01J#A)^Ll1z;r9QFCR*+KlLVbZf^O@9Wu-_K2Md<*@opbWkZdT zsS6q|ZmHHm=S?WoWJBv-DUVD93SLZ#4iuvlU<_}2}|-NZkab;H5DduR$QD43adVuLP) zih3}7OIDg9H@LBA)*T+N7;e2@{F0$q!Qxvi?JstL-{-oY$17%97hUQ`$ESTw$aXA_n<{M*a!*9ej6-WvxkcnuFEXXfGv8&_fvJ}iL#2CLNnfmau-!633ck(U}Pqb&aOBqD$ryn2LTjfmP+uI@WBVhqksCu_X&z%9TjPnexEZ zwT#w$IwoXKcDy3^7cmh>=+*L!U#?84$FsISR|K|umF8?b#K5TI+}B*0HK8=qf$OE7 z8WV#6{8`&*h_QbiB00B| zGCRQbaTn)DvN@4m)V;?z0O$%xuPRtyg8`i)>n2V}yYn(@$R*8m@OtSJjfr`(CYf$z zLYm)8I1z5%t4GdfaXbWoo0m&%K~FU%Rze5NCY#hP?NZCDvX-~L*2#3xrH=@CG5l$A zm{fSy0cVpoaGvLs=h6HX_(nG$e| zU81oi`x94_S{LZNEaoEx6HFa?F~FA-xjDd)uqEt%pK!Ebca*oh^H<{-XONBE!EObTS1ofVTXqKDmA|_IPn0l125OVY#_dq? zndjo0js38fWMe69ObO-(=C}8)-oV4)o!`d94;Ww2{}NlJJ&BA1JiTYzj1Q5lj&+5| z>>#YP4dsEcc%?d97Y12i5Z;)hgiekEe=q~g-SoZ!98-syL2v{tNQKc*tX$NN13j@JN66&H6J3eH%P_TF;I!hsfI}IS-trE149LV!02%K!f3i9H+H>#+ znO2WKW^NY#Zi^b?={tkfO)G8WtJ|T^#M3u^Hm$aiuZ?E9$AHASc_+_hG0cBcTjye^ zTv)igE*~umev-^>`*U_yDSCW~E$=wGgcUaB6l5gb5 zR3dSRb#C2J>R_TjgTzX7t`H5lB%;@nMLD;=-dK})EZ{g`W+{nWz4c6+YbWG>#|`># zW?OB2wkN%c+EB{LiC>-WT9)p99$p_vLuXXnUD_^9XL94}RiET9oc)c7)Nym7EtRfF zZ!@>iqjqB(YB!%I5oU3U)9J`zRB(akROJ)@+!1N_o_exn1_r`?n<7LSvMnEnYvQJJ z;CIVVMIC3ENT?pm`B7EO$2Ovi?`|ym)uq;M>d-z|sG4(|VY)4cz%)?$ph^qLzgurhg1JZEfVvOTl5N>WG z0-hrZ#myP;hPQOJC+A z2F2IYnBLjg9OB$9{v6!Aj%TpsoxgJz8&93mUo+SBr?|MqU+8w}8h)RACqkM4>4oJO zjL55X%OrlkK8Rv#!2xuMMD^4Ij+9aUmHI_37CT_JP_sKT%Sv4tcJQY3H}gprh=>Hpm8v9k&5!v;Y@Sjw0+!W>9@aYUfw=fGnva<=kwV-j+||}Ir|AwWvUL#{ooZ~ z67Ys5Hxf)u7B5tpOLMVDCuCF`z6Uu|@wdqW?q~+S0JOlQ0JtE{GOlw+R56YhU_TRr z4kk1Wx&Mye%`w95rchMXI9YVCrfr}x4A7IGLB3PU34q``DP2u9m3Z#Uu=hX<3dh`2 zSZ|CEjwQ9r4}4*7`_w_)u1tF&K_KoygM*kZve5jETV~{M+&}LhteI>=nT^$6KL}Qnmj7VQirM)G2Y_s};?_LzVF(bJAM9ZIaEy4LoHyQu!6fJS zHOS8rgEK_SieqOp_w$4dzC2zQ2&M&`eE*3rxMbpj`uI0+@Ue!2@tfu5O{KNfMpf== zB+XlkcaYnGlrT#)LGFA{HR9xmo6KWRZqGF%et6s#VWVs=d*5ptbQuVK!m zT*p%Z_D2ok2|9>Y_%w$~92IFY%bY#+B&w*CkY-3H*w?4*M;}81|NL0iYlnjb9s)|= z-(*3>&0ffeB#}aw>as{_vBV_F0R6Elk79sVB~#pb>~fuL3s;u4P)bHznnli;*UC3y z;zZ6*4~VT#WP>|_79ydko4!GqcaKl5YQ4@wC2NBIYl-cP-2t2A=SUOga7T9WAP%8-)Hl~LJ4psg%Xh$p1!Iw=%)dIrA5+HfClmF zGg+q3cktA2m%#|Yw!d?SGl_fclrQjBa~k@H|7uciJeEtr3Rz9^DMxz|$vms(@k#TX<8x9Lt3fpW{z}PU^!+nh-t`k~j6)sD;5xXpsN$NqqvO zZld3nYFxl~k0k)n5|z*|@9UJ^suuT|ppaxEF5_n9t1W&w7^-t*eVN*GZ&wTT!_U9V zp|}V*pVRFu*lNTgOa=m?BBflkRqKm{Sd)jGl1;69?c_U4)!y8+r~M2a%jE`_1GA@2 zDTd6$DO@2IW-U_;$;-kx9HY74fykT)W2av~4pKnKSR~<}a8jSNL3CRS;E;1dXzc-) zr(bIv;pJ+}!6!Pt;OH_?rYlZwm)azfod3)X^K<+Q+zAgOdx4Q>aL#bS^-|bpa`4Zs zr$GqSQ!axs;Lt%?jMQ^ylT%2@Z>PpbqR6G&21 z1dPgu(a&aJqEy!>EZruNek=)j=c9$sW~%*D~WexfVTvy z8V~!2noi)NpMpuxg2!qDqbLk0@4SeF(g~G1U z?fI7CT6dnz4tCqeLj}WND5B1yg|2!DF1T6u2rCK{;wTBScC3{AstT%p5{`UGVE*$; zjJ=!-H~-xHKaqH!%?diwo^7C?^8g6ciD`MzO5mj6(%^FNW+E(x0Ux)H^en&cABJ2A zhXVX=uX@Wdc5*JyY3^&B&qM&uJ_eBtkbC&yIcv*-M-l?>KXI~Uf<$&RycSglXY5`^ zDt`(`9jN?%vYhAc=VR_%KhMmv0%f>tq?AJDq3+HBFQa2{n+o@Bb3Yt1PwO(cs&zB7iw$nB zRcl&nXTE9`rN_gq>3kVqbxvu2Yc?p&XJ6ZdhgPhQ0LGHAmVxeXG!&z5Z~F`&H%5{R zkh|$iqLvSjr$|ro$2*4QWjXkETq*?PigV@!AVO*1D}(?PG7sy=H5~=e zbe>`02KyP#F&+V2x(UW`N??_AS8sG0fkf@c9}yuM`sJ8yD0ZenbpG?FtU(ce^E6wv z$1pndMvpY49{32^h2_;%bN^PwV7=Bqt214$2EiI}-2o>79Rwc*ck9m#slW$a0%&A8 z1kV69gkVx?*2AX}PGkcO152~{ISm0jJVc}POs+c}PdM2Rvwh>r5!IR|yey24N=ID15`7{8)GIEAUoM0F zxatKL&7jD@)-dpOj-YG69LIGHoNG;JiFEME2*wNq^2WRaK0H-$!X^J7%HBFIsy1pD zb|j<`q@<-wQltc=OFAT^qy#DH9;8d8heqk{?(Pr}kS+n~?)vr&`aC}8yuWkK_m2*< z@4fDo*Sgj%?oC+_%>ZR#AY7Zx-Yh`+EPr%`VGNY2-@9{U>Zs&zZ^;2z42zne2!t*J zL&}jUc=azYW7jG11v`+lZ+uSNC6kkCqrv|{2AX}jlURRhH@-iMA9F;9EEVW zK!cxiTG*M6?7BdK<038qoaYD?L6!dgP7|y3iqoF}&%+gWdH{nTJJ~WBAS3`RS;<4m zoc0b0w1ja-IANjzlGnr!g%3B^DG;R;6qmF|x1eb72A~<8cPIhvn^2V4{Tn4tOz)J3 z71*5;07L+o0$m*jnau(T5y3D4y8U06aHrNxOg8W<2Ugi2G%!&6yU-Ms1O{cm^Yi-v zPk{sKZK)Rs5KQo05&zx;8gHm~#%X_s?7_SP5Kkz{2`5;*GtK6ok5Hfr*~5V1DA07$ zZGSrp0JfyNPyr|e2KohzH30Iv)a{@k_m3C=5Mb880BZNsgPkf_XlsL&3RLPbF3_`~ zp`(2d;9DJrD&01cx2?}9Kx_(Fe*5dqlOI^CcbX0&w+H|Xz!92Ia!3w7085hz0RzDi zE|v!>;VzZDNc4Z-nfP!E+Vi0DvwWbP!3l%eX9=>BV`n=IfUR|D{6 z6W#(bkd;FU8~mInTmVn`vxN!0H9)gq!AyL}4LQpJJ$g&~?`3R&``GKn0I3EuaY%o` zFAa+Ke}V+y>0hCM?(~2R3Lr<10T%sZ9w6+0Y)sB*Hsyxe2sIJ1m;)jMOGEkJM-5FD(fg(QWM8)tv z9u8Kkzh(V_6JIQWI|gAN4->;!@8N1glB=NagZXdE!-RIs3m>4#z}8sO15MX{ff*WB z*k&l}@qaeE<1v(OK-&f|sx}j*IIvk2Ed(bY#LNyH=D?5#dLK07&!9?Xp#YTuOwFxG zWU#>#7BARG$?gfr#{!_bgY!Y0gqx3k-|&ZO0tI=e0OT?sBu$M6&{v>xp@#lnmV*DY z6w#7<2MOr9Fj+p=%paub++FXlLA8N)^C>Ju=ry3rBWJkB1H-878s%OyB6SyVj{3F?u#7+_s@I{<^+pN|0VAK__z z0PQGu&Ia~v7zIWsUZ7B6wk1DD6w{7~oa0;5wQ6p3J235-jBb^wq_7VzAFQXoJV z_CSL`6k`?M!ZJEP1?C@oXsBYKMcX{}$24D{JRx00z^}9c$%G1aO98+MRs>WqG60Lg z?_!0O67qWJ9z77KP|U`zS|2vN{Ou@c!TG!fq`uDLf#M3!BJ`vrN?{U90E+$AGC8A( zcl|ILfZ*Ie-zxy;)XLBzW`xcQK(U7GA%me+jPlQVs2r8ArI|cXId^;?CKAf`<)JC{ zhwlT)0+@AIdw0Bn5ms9xuDo}*YX4CI+T5WvmvUEgg{E>)Ie!i~tP zfoK3n9{}3?pH_nZ=asE-E#t*@B-YTr`v``1z&Pu(`|GRtojw3M4BlDwJD-rDPQKgJ z{Dt+z3XC`aVV8&TAebd4K%?;0lZfSL&4SV`L4PQd2H*Wa4LhWPQd6k>aj@TSooj@@ zxh{pkk^^Ydq1Fb0!%w3fd_a_LUbeubae_&GXJjkz&jA11ZkN!blH=V!as6FR&=Z*7 z;Up*j21?mGDC65tn@iSQZ0jK?cJ_4mqC=+sb#v%Z)`@7RLm~C!;|9Dy$ zHp;s_KdEvAX7bli%z$R~U?d{6_rh`uO2>cOe`hk-06-|1&GJCa!O{RI-aj9qSUSwvLojT=%L$nAL!CD#&;uD5Zb4JyH*V1<0Z;*zwBWa#4!|BXo|}Rq zce^p%&6mJ5|J#0rC-YF`hXoz^T;QLy>pq2iDglv0%*sKiq_FmT7uxzAq^9c&E5X~V z%?Cvu?#FY$n;6Q=LFRBM@GgXsEXeonHIqP}9SGS)10LWjRSinL4_*fzvW(-a>$`W) zS3gTAl3^)SCdE@p=`yVXtFFP_1gFGyhcok90)xzi*>;FYsv#%WU2`kgvUJ*mur8GT zRhkDQ@SapV#%dxZRD$I_( z;_h@LKNB=J$g~$9=z!n4+daxNFV^u!s5IqNN|C0IMpWs|ewIEGAZ@@PoBb?fBt+Vl zVMRq#!Bi>(H+q~_s{GI%91-=lho&;g?n`7TnU39tLFH@%PHsgPhX0`KuiJ_)Gtba< zza~v{5%6QGZ{Y&o?H}_*=;4qTxp_Icm4v%f%tY`FR@sve?2EupwD7(QEENdPn)Pdl z6=TzEIfd^$Gy1CTZ!D`AT6wgERKJSPYTZ}!MC9F}m#>e`M1=1bUq+1kX`F4<`!(Px z3hQ+W>ju=|m+-Hja~jdWvEWM+u>{C|7J32t_=_X#6^C(h7C9GOvR5g4vKKd|GfFPm zK2H1l{sCMS&c!5h@W;^@-oz&ghp!s>$yh18q!QcS$2Pn<^s~Y@cV;#O=O|+Odt-#* zTKSY%()pYJWG|Wu&u2f|MPn>ud~EzMULO&=)psTF0O!@wmkc?GX9%6hcu$M@0giEG z0$e{$TQ&Dgxv$DI_p|fI=Yc$mHUl8I?jce`ryNDMdp*^g;zVEdBNK=kZndWg#w7gf zMC)*d#7L_QHr+MARl<-l&}Cy38Z`XY9qsdmv|JnfLiW@Ct+{;1|yuqNrz|% zi&1bsF~pqrq%*txmWi@{a!L|&pL9Oc`Bwrb@Tv{#deIdF#l+>UMA@{_{We}%9~`yw z_=c!wwb9ANq(hGu&s%%vdk^=WRbTL{;HC;>B&<}O>V8mM?LZw9=L(G#cgD4Oo$+ub z)K^SiI=4wa1MM2z?U5qxF!#0$?@*%EQpUCnCn3XEL%M%tgsGr^WQxh6e`K6#yMJVk ziKIM2R(nTtyI4)R>&@}#`cEg9!Fag|^ekQLl4aE&qS^Xw68Y2jkliyx4iO_FGG}jj zBoKJg&08=jEC_#uf;dUCmc zSenQKq>|7qbkV-h@yJy|=ZvSDy|}0N6F3=f>*si%Gqpz|syJ4kLg1@k{>99~&=TN|(%K zp;KoVI7x(FrGOn(37q+&f?OxaLEABKyEvQQh~cG1`9!7K>OwDgTCuN49nq9$*j|0; zA~)jpqu(LOtTu>U3e^wdL!|Fevz$`sW;kP>88w?FAj&2iN`jY2eUs$o3v_<#69g`ZVkM-QLMX-tluZ^KT5` zEnVr;iL~tp1#6?MNS6&??9Vikb()4g&o`=tw|Ptt-t3*N$h$CMcHu+f{8(w|!Z;QLepmH6r(xOAh zd8dB8%S%fNwIRXfb>Wpr+Nhr@G_s$c5z2!!4uIalk$zl&Fb;wQ!8LfCmVN@=)kjer z=|YbmzU!d>F%hr4hdYn7aoF{V+I@DUfQWmTL>D9UNm0(>!0Ts^7PD;?=X-9K->Lrc zOM@Q{#g^ogeqtB(vVFKNJA^qP^g!uXc9tdg2L1Xwv@~lmdbscL%B*f&UQ3~XsKjIY zuVwBv(m}=)ZgvK$XJ99LoY$<}_!>@yY#+<*;ca#wvtla=QzM&6$N;}PgC9MNpvb3# zQgQfw#lmSlve-jVC&#cL;*)e`?tvT|Ob(iL(}VA#rJ;>x!pC0|XdX%?yd;1B*7^l? z)bo!qN;ETKMs`BaK0<^ay`X-efL6%DKUSP3*Ip5bPm%GKnDDvRQk$PSht$H`*&OXv z2Kx9Of79(gt5M+L{NN$bHWI?YC^7Z>st-Rv$@jq)Hbh;xzKaFf)t&(y_vm`4^BA^v zX=+{3gHnSIDII#15)Ds50W^W5R{r}xQ#SV-L>BtdJVjb>&bG6PbepD!<^{nQXPYdy zZikznx%vhYtiZQdhgGA3*Tuw^b5}>#UBH7Go170<$mSbw530_Ni@-dirdzswH-`|i zn=7!@$C2l#QE|$YgW$e&g#JWyc^%SRZ2|TY~5!o@a56|HblVT zmi?qM@`*+SrLz)whuq~Thl{h`rb`wk(+7@7Qb`G=C#p)1TwHmHhO!Kk5+e?m=N-fc zC3up;F<%c|I&c$3h8vyl>14f1(UiyUlJNrf`D5}Ln>^66@+VtgRSqWY8_IIv#bs8$ z+%&1quX0Tag5;cLRTmB3ZtHX39;R@=p+2V%;^Y5e9WB@oJWs(TQ69Y{CX4J`$Kxma zPtCOlTE`ld>)#I|8sGS3X+17N>sya&y5P0ex!5;$bT2@o{dwd3^PKwL+b0-HPe9mD zz{n9SrTM#-$)w-l{6fQ8D}uf{JjLEwcbFsHaW+MAbhJMq)eYRG73tf)Ty)_o%dvl) zx#eb7%{X)TUD@Ntk>8J1@WPs-^@ww6 z?68_gfBg$Cxd%&02jjp^&>&koI5B$^GCT`<0_L|B;7rc$`#u`T8&brDc_{I$K9<%SUjmr9ma9FAu)bfoU9n|Q9Z!hNzzkP((7k%H?0a9$rIoAxFXw{ zRBbB`G6A1Q<0*Q=n0mrr(1%gbhuhEwMjA*c#hI&xay}V2dUH_(o<6wPRbg(T;Ev8& z0}r{QcK^M40O#{@_W=83KJk0u`1P~RhzX7c6}=uDL%c9*o(Nh5B`RvAo%Fb+k0do3 zGzrlLvXUGmb+?;wsi$)+Oy^WGHdOK`>5|gvGg2Hz(`&}R_qEHvDl!R@b8hlP>xm%l ziM&rAflco?@@f*C{;!zLqs_Qdi4^d1fz^$lp;YKksgF2Pfl+*>nNIlMEuvGwDST=(`Sa7e4e>D7?Q3%+lA5Ubb+WEpak3yy%fNGj=$1glkd8%= zE*;hAbtdUCcfs!E|E_^isRqxu&$CfkezPH{jbw0T65)_x;9k%Pgctbv!6CSd&ux_! zVz~r*15sQCkwMIsK;$S%x1Uj#U2(dtdm&_tAUsIeG6)F?+~zLe8MYV&shtNAf*wHf z0B<3Db6Xc3g zYj|<80v5g|yH}O80y2d|8QnY0%>jm$93Ci>06$}AcCs)}jMBE6V#V>>rQH@3Z3OBl zj5?q^_1n9K*k`hr)z3pg!Q94`^j}PG8@gzaB?}ZZk-2HcFB5IubWB{pI2EV;QLCl& z4^KpXmiYAsac$nezR(C||7j``AN0LcAAy(c)6T8{IG!|pY6IP%6HYh{wVchE3;Dh* z7li!ez5=Km^5Nt@8#uX!WB~!!J)i2uj>a$o9{6F*39IWHv(h!yk2hjQ5&Yu&ZYoRr z=200^0`X5t4-_vR#;h2Snk>5Qlg-L9VmzwUb`B~)dDa$b#oe!9&1H{qF)%5lTfqOm zJ0nV~ZXZ5SSnr)0hgrcQ7SfRU;709BOvU?|H=D%{=-ppTbc(=y9_z2Jw4G&AC*O>N zos6DaYb}(jn2ViM)V%1wVhU{~kXZIO^nc-I&2Ts59c3Z^e0z740uXKs9TEZ<7WEgVV(3+o_F;y zT>W!x%!e$ab==E-?7OQNI~(agFmw_k-5<@8^6gl_1@;5U zM$=Sost9dNgp6d#x#bK&e!OXN2fMqIrOc;T6@hP#hdPE5y!qbLUteD>KfT%QJ#Xtc zJx%Z~!opHn+5_TXoI)M)#(+ zq0x;eI27!ay)8^%t0h*L%bus8nqd~DTBsu1iYlTCNgef9y>eu9o#q&8NIxii+F-0P z7M1IdscQax>r;LZxSK((L!#tJ`*q{KlqIun?#-**z8@BBB$bH))V_(}Ea#d{3AaxjTjHLdb@m6U+Te&b8efCC1LgQ-kiWi~D-mtD&DM#;?VZSX zDO0B#-@`Ofl$n7~Mw%{iUePcmtvY4;RYK+5`)Hu<=p^;C0oUZE6LPD->OxU&>ZRMl z0&404_i1W?0ZS0~Nos(7|Fy*NfdEG6Y00||rL#pQ&CBXV_xkJj;}Qepo9YIWbpy4O ztVDM3?nsdsS(gir`_+1EW58D{5`&fM+}_3l=XsRW=8uG2ip1{k)Z*G%W8TmrB}~vh zA!9NdUyv93JWlT&v>N0+a!@d^WWdquCFtD`WG? zKgZS>LBMYgunKI8{9y9SXer3{cyqZ^bVJd(ap-IdTa&(V*_?-|ANdgPjM&br7_5P& z+$oKZzje7OZ}!g9Z)JaWS45pU zC70U>`Dit2pLoj=ofTrtFl=c;u{;5H-$#0*KH~*Gzo7)78HRH6L4jI}@H$zKnbofF(Xbm$l0OyFdLAE2z?~uCd|7hEr@z4T zAoGf`tfhR%Zlrazt#^Tm@kyH*KXmng0naZjUtZa!12ar(^=qqPRU zJYyy0TEmQ;a>W+~`mL&o*8*)04kH_1lq*S@pJF<2%RI8m5{faNBN-e4CyvuI#`6xC z>heVrOlic?Y&?_Qveq#Pv>6R^U#1rvOAmMSFFWE%SEef*)vIjNAPg`4>~0h{dRE+~ z;Z?6pm;cC@FOeF_6`_?^sJcyKO8f}LyTVrp`!K(+Q72~GT)#MmU<()VJ*qdAA3GzO z3-C9hiLa2AepvfLB26#&KsnyGWo6oB1~tm=6vcb4l{~OTW3tiduXQs#msFaSWxg#L zAHODfw|=Q&m3&KA#*TR>Ya6c6SBPc6TS&jS1a_fS&j2bspY?}20TmlJBieI3L@BgE z6z@-fTHa-?3pR~5I_w_&TH&#LnBd+Q|6Mj^VvXwk=@}-*-FlHYTtuxqU0TLry6G2J z0NYrr5tu(kiy%n+@8!6|FcNRb8V(+!mOd#l!!~?-s~+Rl1OKi11}4A&H9hNW9GE;m z2Q`8%CbS4JR07}c4F-R2Ppz79dRsX(RW9tyFOA2n*B-o-xtVp=m027Ie`1hI?4ZigXRsuYz7ZHDp z*1K~q0iawg&l*=y?<0FuZ=o}0UPF9JX_LE;-%(~;09%~--cK-k!Mx7i_WS;wyZgWK z-vtM3hj|yBS#Q`n;nV+Ie~&NDgoc6bt)p*U449&`x@9Bj+|$vzK)(He$hQT$$=7}q z@4kYg+4)9Ew85#KWg8jyD$ZF`|F~jBI=g6uHdXYMapoKqyoV$?Em}{2w@?#JiE`5t z6K<0V8GRgn7Eah(@a-1^YG@u|eMQ~9Xaq?Kvz??_Kl)uYl}t)kCGRSitUkMUx>CBP znsO^f7m<;-py)}sdJsod3t zL!ks7g6+Ii(|RvD(ZD48vTwzMEi#^--1w)=^Se9Wwp|ZwEw8b-SCOipesOBcT&Q|H zXGYRPaDCpk#v)HP*Rb0sOPI}BHrRBSHKglt(@o&?BJ>!2?qjEeqe6<&1Cd71h;=>} z!LgD*W#d|@wPy5%iTOT}mJZqm-$I?V7ls;{pzxOrJ~~eBr6I6f@COAH;&d?{CU_zh zO}sWG{}*WG)+E~#_=WB|K{17Ui}L3*GevLWsl@d-rxZzECir(NDt-nF)}!_Wq~ z!#SH*Wv6<#x3pN`*RQ5%A2p3%-fO=t(e@YJwl11lY$Q@wWg6;Cz%cY(LkU&H!D*8T z`oSi>xgYp^DOCQ95$RN-Wj|2jcxm~OeW#Lx8@m~w!1?xQ7a7GG?PCG?i({T7{e-LF zItNhU`F8%4`_(>g;q!rjfN|3ww4ZxJdCFaex`_J?S%5#l#)80~@8;OLteS2klWbJB z`{a0zY|chUvrYxK_&K^#A!%iOlvVXFF0aa5(rP4V&2G@%M>!&~Z)`qHH>Nv(*j}T{ zH&fEpIJ9=rZE)jOTr_Atw*Hi)$woL<_4%)F-ivK72Z)J z7ot2BdlHJlHfp8j~!aw(YR4`1?fU&JefAU}ic9S_yRPV(b0^6@MGE!AP|@}hmm9+hklY3qKp zSqZd#{&tb{e&o#`pNCK0qE`;QV=bWMos@n-*==4AuH?9XBmSaox=PrJZwTq2)AVP^ z7ms3IQVC7h;-Pt&lrHI(K95iCPVCL|xmp{!DQJ5ZU&ZqG3_Y73G==bwVI`u8rl8C% zNm%SFmD`o1fp(r0yxMx_DTrU7wm94zFr9iFM1sDzc7Up8|EziQAUN6?xdraARu+at zJ$9XfFW3amZQ_;$fqiD!R?FpJ)dX&DO2BwM_CfbxiidnJ`JDOuGL_(*it64qp9#OJ z+_voF?HqjGvCGk<(PTaElx|mJZ%k3nN*PH5rsJEsLOk=Pu?g3eX)B9%izbaC9!D^a zc~i8Ut}YAR9{scjS-C|M@Oa5@#c)H`t|LX$>tN3xKi{S~;xCX8HGPU74XJ*YfdnlS(3?+TpA8Z&(Q_mvb%H-o>+ak8j-3eT)Wcx zrs)gTH04uV6dkR6G)C0-Gbww{|M`w6ko#JVqZ&k zDO$LV*T{(&Y&Uq9+(kE|z=gz&ZMvcoy~LrhUoFIy-z90AvvVY5SVZ=$MnaJzNk><7 z4ZUShmgcCj#E3_*>l0_$!bx~jS9!gHaygj%VPp6z3l@vP>Y~LVt^h;9{jD)}FtaAc z4{`KLKj6Rbw|*=QC!$3JXkm1!uL0O-+lVtBZn2d#@Dr*6JgEwAfdQe zWl#SL&j@Eiv3La0sOV@ZX5Q0dIDVpQMGJjBPLk=zx$cqnA;ZPyZ;=pt3KkI4d174sVtr!8uJD}=%f=*vQ|EIQ#R60D7v*wo zoh!xW%c*0obJeVo4d!oR2RxoL12x>al0{o-krU75IK5P!&?uy4n{)9!sgYleWeM?S z+2DqX zG2+0|s*!1Nno6VA!$b-Gj7VC<@nRg%Rn>EG5o8| zt+yiKkLx?p#jbxXTll4DW=#}`&N=;>k$#yL`c!eO3R}IGdFSQ0qStt%!>rf%?&EdxNo4i{Ocs+T%>G?uYdXra_ zN@&M!fsf}M`F%W|DvqLf>bR#WV;oHdz`5YH+MY^)zFqDr1q-6QU_iJ?!V2-1JBeLNeZ`mYf0Y_R- zxutGiQc@iF^3?UFMR%;Vrg^8_VD~Zek*go-P4Y+CT_EE>@Ln#zxUj>L+qJP>MB`D( zD%2LSr_Q-`3LUWL`ce$v^HfqzE}( zC2#0<-rN5If;+aDw*87I;`=?~-WQ%fv8bj)ewZd{zjQGs9wp~*8>$i(u@Dkn_^#8VqfgnGE+7-e3Y)=kablA)^`tsM z6mG5CtE^so#s0~zj70au=E=tbau>&JNo9|&;*8JI>^BzN z>JM2hJsh=aDrwuv^|hUxG@a&gQIkUQolNKZtTz6sb?-ZB_G!F}85rHylp^1Q!lt)u zLFk-X(o(3@1{;Ko+T}R?xFWudYMD>E)t>nZKR3f-^%!yN0LZY^zmVdj!b zl)7|>_aY?1%sJj>**gd|#(j82Igchdk8-_5HDCYrn^fbsY=ge1_6HqG_;jVgCbIk3 zGJua(zj?Z~g(dJ<;8ZJUP z4pSVhY5e%U$C#9bv!B-Nnv>u3IN4`q;~9oi(%_w%%QR12dz#tgv*YwAU3u&?&bBV8 zCV|W%E99G399P4<=vOXEokf}rCLTsKu8XgY%g8*8#BI-yA9#R|v^cGq8+k4Ki=ut@ zqD^c=0q+!DeZ^PU<~$xHY#0~xdm&(K(#xgbfgGU~mY*p4vZ!@U>q~iqYIS3d#U8D;Posc^ls5Fyag-Ji`>xp?<`-qRT#7-rd;jmolqXdEcdj@Pile zG8#|jSIVr{0%@Oj*RiG+D>Ctl^Q2J~1`DSG_*_@k2M1?$5%zNJF1#j2m7MrxJtxq} zXs<6~8|$ghI0p74Hi7PE`ncZgIC(KTZVN#tZop$9`mrq7Z(<6QW^ix|ys(C<%D2Xz zKk9&{B^97QsTJ#7UW(L~$$xp@tSM7ROJtIqi(#nE7H$PXUW3rnD+N!-NW5u5m$%B% zqrNMyv1gsM_;q|8)yS9BA&tq&=|Kd#lo=hW5$VeVqzDV~t@1%;h36chrgRC5Yg%7Z zlIRk+aCjBLc!c)mk26C{)i>^oIXo#yV~VL29!3*;2E1{7B?SRU4FQtXjCZ+c3V83^ zk!?aae#ZKRA{i0APT%L}7pENTRDnw;$quPmdG$WuDccAj43~na*=mf(z7^irN`y1T1qJnPd#N5{+^S*D@#;yECz2bV@}?~h!;h;J;*@LN~JFNNM%R)l=m=YTWY zdDDHo5o#kP8r!Ec-oJdDVZ-cU?TKk^;cETKuA+PGoO_`uO5_uDkfmbz0R?DBn%49A z+}NX}clUqM=-AmNEoUljpt^KeIvB9jI{T-7!X4|zm*M~N3rlP|k&ZA!d%?;Bd-$su}>lK`Tf`EJ9X-1;~bM>>4{o)n^eT~j=13i6zqI`eq_YW z_Hd}<(qj{-6@5p!Lsr{9gnQQM;|T#w?4Luozx2Lc>OMuToRXunyb{;{VztV2BiW+9 zuh5UtJ#?Kyt&pFb&qb$(j~ufyNra~KrMh-iMH?IyyR#W4 z<6t`ib+prQ$ndkW#n`^LY;ITIVNmK~q9}`GGI%RV)Z#+L#&(-}8Xx5QDnuSXPJAq5 zUVRWFmx-pch}0ZCNpj|BrS0WBo0?qvP9}RKm^4W@-hzRxnd!;fMUsye6ULZ9y8~)? z*r9>msMB_8K0DLzXnDCCuu2Y;iz#T%o(-7trF|D|_pMUGEccif?KeLWY43k0FWR3^ z^N1}YmWOZj_FxBsd1Y*7wq}l3SnJW;8r@yW+El}%qwnL(m+ZEP?u_E_+FWy(NIO@& z1& zhyjjLW^G>s;gTtq4+N$vP9Y<#i9ZYXYI|=PiPu)e`x0BXjvneOW!58*SPLCTAD;qi zjP0iR%a-51N{}#g$VBTo3z!F!*vaNTIao>)U47+SuRa(`j&;!an%*9hVbTg-M**!V z=-cU7)N)~+de;JT(@&N8F+!RzzdD-_rx1!d;_whVP7@hWk*k54PPY<7kkS2<0vgCVjFjaNlt6-!|bVsp?vm9q8kYmfCeQ1Js4%bX{ zZJhNlRLePiIIH~Z(7G>YoVs6v#5gi2ls4Ky+^0l z3xC;s#YxHJu`r2>x31d5Zf?P_1pRz|*)p3n1J_MfAqbu+xUhV_!)t$=AwpeR-M4#^ z7OD#O6CtS3;xrFj@MVkFnqR;ex&PmCx?k8jJbh8&Wp_m5nOE1``@E00OE&F0QMIw0 zlEqs2!Yax0z0RPG1(YDn?6ZJW3pt!mBXZ50T&aNz8(vhP*MK7sCjdvF7Xpr`1_Pe> zey?U5fGwTYHHE-k5 zU(weWWJC)F7x@qY54OcSF!4)yM3Ojnrff$k8}u7dt~8t=(|QjeH6IeLfd`%x+Ae>d z>PR`haRy6S#0|u%o??WmFoqkw^0c>ccU(JhHLLP#D|3q9ui@D2?oKWU=(?*4XlHAHAGiO}Ym%jt1T! z84s4pd(3u{AelvU$^tzNH_l1&70Xg$L0Zimu40_o)QF|gXI->u-{E6?CqmI3tak~j zCNb4_ey+0JWV09Ncj`Y^=d}krfi(h|)DKYGvJc_?A$mWj97=fAbCqsRimu^etXC0L z|5$EFPn=p{NKcZAY=~TSoe#r=aHG{%-^FA8SZ??q%e&bD%MAg`pU41~)ARwB%fBWZa^<6LaKPN)kzgIt+8HgsctM zi$ud_4Op#%{Fu&V-`osEkcqBO|i4?pnEPQJ!*dlGL$`C1Nm z!M)NW4LqG*&L1rWZ)S`I4QnD@YtGVoyGu7xCJooW^J}PyQOLwx-8|iR0n+dae?Q%^ zVJM}0FK+T^@19QZ=*v9t5OS(kdEEg8vO0>yJ4W@O9W13Xx%=u~Yn#MepOmch=Zcc2IQzS%alJDd zzkVTRn&p3h$aIdY0auOqWTjilsYZM=+-U!)27|roeRbnAp5c~t^ekiKhdmkT(o|R{JM^5xch04nhq6^ zGe{N)GV4gP_hgVd@2XebSWeV}_Mcel{U?^q&{*mLu>|e}suvndbZ9Kqp;>JGHgIJo zmmpD{^4~NDf=O9y=xUA-qgwGq9fo89ui`hfovNZK;e6o1FJr7fbzm3Fq`q4b!!E_a z7*;Ed!Wf1x_0jt)vm6YOf1|2g%-^W$!vvtJWDK(;^v)2=(tcu+Swm#^mkp>AaT=c% zyRrLfjM%tK+ihNl^ZpY8L*$7og_1BPSW$t2suGKdwq(=T5Zzialv)A9NUO}X$_&%SMHvyR@vKhLhNk^@G<()(O{PD{_Uu z7C$pk_L&hIM`kFW8Up2{aq!*=C?`W?@j?syyvPg&Rld@nO>;tj2ph6GIxLr@CEndv zZ`CG*+%UjB2RqI8^Hf&z0&3%9#cAQf6^qX11?(_U0Id>r{2GaAk&u)D&x=~1S2jJU zJ3XhlbmS?bOp<8>F%$g+-$&|8*{kz!*BbX@TH9}+aBw=vy0Vk>4;*NR{R;<7=AHbp_GJ*?z zn0(>V5|}t7B)Bw$*AyjU=s5D&h&A5wR52kMf&*6yDeU_xN}WY3^=3bJV>8cxefvb? zPwE6QG0wg%{XRL-*Arn={Yc}W&(UvZ2uJ{$6D#VzCEzD|$nH;|T%;SqGk)!OL3^IS z;|!Worg}G%YVSVB>H&{#8(PTjoB*i9LV^X-CLl-39s z9>_p)y4{R=cIO^nh>E*ZoE=Dg{a(cTX?XLs;D*Q5(fa5p_#~NM74BdXII;Dpb1aN@ zfh%0913cmg^~n0Pe9Mrd(#~AZzNzLRvPYw`)9Ik~1IJw;eLYv?cIJTeh3hkebTPpZ zvw-nEdMnqtvP(pV{~*Py?DgCj=NJ%FMmSC|lQrNjCP&;H z1HAA7%2I?)5BL}$zi?4ou*s;|O>*ab4S4vxf?AYJG+7?V^d8I6#$4?reZ4IE*{&4( zqv^Q4^lT?dzjv08$3w1M$?D$I+B)*zW72wi>E2G#A_k!4^Gi@)(o91enJQw;7z!WwcjcF3D)X0-=0s=X=djTft*CyE-KC7f-oim$N6s^~PG!{Hfy zm&CA)ChB{N{v^iU1a=byXr@-MN}S_k-4nA)Xb z{i_(eZxTx-B%1fsg-1;Z@f3wo;%XIYIG~E@wN^>#*(zZ7z;C1%5MyJZgOiNta< zF_pfnPy|z4RpRM>l~;rVpd@>fE>(KWhOAU~X!c9zAEU&5zy(t%lp|`go>brzTVrk{5ggv3)cZ8pQo?WQ%vhtczIojEcAXV<1y`bRW;1(ndj7k6qvsyk!Y z`BeR0yAikHlBE-VlWd=n6~&8t*5v??I~pMO>y6tpb{j{nU-C8LS3#J!Cdi+ToQ^xP z&w?$CQwWItV0eFipKS|A%% z6D?ikIT#x8gf%2RvG5U*Lyoqx^d_bE)+45viNtfm;8~TR(aVE(^CcB;?uOb)pqODM z$Y8U)Yx>WyeV?*b&4T|i7PZW4eol}$xz*VnzX*|>eZ>utVuK?EBkY>md0zO2LsUw3NJ7 z<~$(^tD0U|9?{L+K-;5ieb!OHs^k{kOt-@D5!UvqBC!-{R&i38d$P<4a^eL%!=(-N zeX>%(r?@TzAj*m7-|zGfdHbJ8QJ9aZ5rkKo-4A)0yM6}}1U*~z7POQwp8G!rCLp*F zUfc&R?a~ky7^F-C!7jYlw3O;Q6co?|bU@dK-yWc-Jq$2!sRfg@AQ`4)y?qj*R}s!* zOZ?j?)>PY1F>OdjeAEPslWP({b0fgYthDeAU)nlMi`qK814mYh-noROQR?$3bV}9H z2X`R}S!oo;qy*@mUo8e@uFAF{yw2!L@i}V38raan`j<&S`+~?lhkFLT^Lsx$Mv-ap z%(K+@CKC_E6&&$~lVEfMEd)&tOFWlBn4rbX3O0lwPy%!*V_=Rr6C zWa2)P3R?Q<+y>`#)CSI>DUS-i6NLm|H)fvMNeLLWNsb+XLR2VFDPQze6n$$$BB-hS zTG$rAph|MdgD(Hrn@|RrRG=J?0ISlBF+@@enlfqI5NA$+5tRv~0H_p+#pH+;E=$SI zSLes-bz+P)d&dyu#1}4bfZRq>bG_@B1UYuW`l4CSnEbJ%b0t|@Bj0RBzbd1oCXne9 z%Z_%@N)L{F^I0k44Gfp$Tev8Zp|~{3s>JDjk21Qu6-hp1i}8r{J`8GEQ>B^4bVgb0 z{_TYyvGjK>e6bWaUXLk1(t|JkQV1J@S^~Zg_*g**+2I(#Ew5VEek=h1IrDEePbG-i ztzk`i**9$%{)89QE67CxviVbg+y*ClOc`Z1fw-MnJy4GDuJDvE*babXwqd8}ul?b| zu9QgN92G&p(=`;Rwt-$N8c40|R!fy)ho7E49yM@rC@-HfcdM6jJ-L?BG&?=7e8ut1tdKp!TFO%sdW2iAUwH0%bge(E1Znk- zaW5jVSZypswEeMEb5914+?r8x;2`gQ!cL%?1Bz9(^hKv~!N{!lThyT~z{NYfe{dS{ z|Dgnl#MuFU8KPG>Y-|1j;eW0`GIx&F(y(0JQ597mRJs$y>b6&j?=t4}M597k?|QX3x$8yk z5pUgl2`9f-*fBXA@TU7^+|7VwkUZq4GINNNy(7CYw5kvo&6pJI06%(TVUvu37x@U1 zizi-kW!L=XZ=Tquo0ac{0(Ux6$G82k|C|j=w_7@Z`MfOWzP|e}dDVU?1sn~3p@JO^ z4kN}WjoxaMN*>2%9DLy>0%w(m6-z1#b6n&yo0>tJcBNz>`)CG$ zNfwX>Ng;}X#~S6qI76N5j7PyZ1kPzPoVwwarTlW0lE_-A_7aR1frBL5ywKB=X^QB{ zx+%Pz5T8)3^?({rv2+lV&9%&%beo9R((cFj`B6ct~0H0s}v)I{~-Q}wQjf_KB5 z#XI3nO?tejUd@i3V4Q#9rc48LA~%8!^cF(cMzk_OT}&~%3grqb-G2GRG=&goVt9mm zfq)!RKb&D!M{}Y&(|f`_=|yE8IF2ASg^i3FArluP5HvnAr}~r>{gH$5u9;RCyW3Qd zyR>!~R43pEcYuMp3W0mKVrNm61U1ev>;#ey5CYjRzInBm9mGkeH}OwMH^_eP04^z& z9<1Dr2aAec(7ZbFQaKLM6Ur5J5L(hWck}fSx=(4Po}DL;>`$A&R$$IH*-EwLT!0!$ zXA-+%gp3*~lR~W#n=VjLB)~-NhvHG17xx;oUSuU?2Gp8SJ3H^mq!;NFUJ1E=Lm)$Kj@`^yw3=FrTNxwd7J-6#7EFk^vPlCxzolO2*(_ zvuS#xvvSy?e(6-zRnu=*tWoSR}6v*LlD3a6yALBZP`QG-AYn#Uj~i z$6SD_^dY9uJBmsBuG^wU&=~+ni2wK|OC@j%aHQQi%C#4~_}nk03WUI<+X8c$ZagY| znQ~^ykr+w!us2{A;vNjC4drPJ`ZC9gr;?8aEHWr*&b5^a!GWksennOpjer($BxOMK zXBa&o>9$N!ERsKg%}3E+l58s(8D?aG;5wp!O&DE3>Xmb z(xnaYfg5^W|H7wYJ@Au8D2n=idQ;451g47AkkU%G*N>=_Y;BEN9M#-Xo^Fkr?3=>N zL`$iBo1)|>U2{Xt{OWOIWAw#T1FMlk|Bi1?NCToMHbq+? zPs&OCz%D?ID5u88qarlKhRpK8<$}+upHSwsOHci|l8%-#{x)UGK{Bo(&jJXRDdP#f zz0m&{xm|9wQb$8(Nl0gJm1|8|%xgz_Qb|LTr^!noPCPo7G_eYeU=r+4MUrAGuEocp zTvUwOzc9VYsPn2TpZ-rl4Yml8_D&ar>lh z-z0ghe9_lOh`QhG5r^G-qwqzq5;uymC*`^Yvr+{g2(=I8WUFvWs4`ngsU#b9^ZbrBDM^YphBz~QQ4K`C;rm5bO4HTZ;^z5^&DGe|LEc(f+Hw>6%|Q|HQWmhs zvD=xA)$WR$Gn@OB^!2S9f6|P5#p(6#?bY5*-`XYD^2*w+i^qPww3hLa-_fN#i|TWo z`ufN7vc|gG*ZX~={!N6giZY|w)U=#2C%W}cUz686@~k|5P9T#mdU%Rf#+`fI1Ij~b zV5WwQb#V+~sFR3vVfa?xGcRURBcO`)B^(9_oeQ}uHR%(*HmlU~pdUm=2yXnz`XjlK z?2?y2Na>|u{-bhN5+Bi-eL#1X?|=K&CKMtp495#Uh)in=(HDk$1V%uTif5XVijOQW z`X)bu6_NQCAy1uBDkVU2DvDXXBP_iq75yQtsqR-y1)uaBbsdtNfVq=*oBdRg0+cX>}0&%%@Yk0f2kFvy+=F!+YwLq8Ft z)5aZ==!kC&4v(HB{}3Pgi;05$I1sWgmJ#^lwQ|Ibc4F8q~G)ZJ7DIp_KN3Lxl) zWedQzxPWc3U$s7w(?l0YY&3E7J{;xY8-6BHl)*yPbc(e}HSqsO*;_^B6)fArxD%4# z?(PuWLU4C?_;7b;;RJVg5AG1$Ex5b8yGwqu_xaDbW8A0vT&ucj&XRuU)m`c=&p2}R zurDN^tHP2a_<3g=|5;(uEvsjLCV^dP)R!p0iEjLmlYGd95#*XGWH6~^_ZlQEW5Y7+ zR{Y6hEqHebPQxeLXmr0)^X@mY>lAQiEznem&^XLmBPI!#UR8TC#Sphp>wc!Lx;UVY zYZeF3&!5iou(=_cj{(xAO7sN_hJILy5)NUlp)rP{5qO~t6-Ca1VXdhhzo7kbDhR{Q zq!T73H@X!h&i8!N%tpZW28)Q2ES2lW$_ym;E@i=uOo*6*4T?Cw`@r{KA&nxlD5Zf! zK^nFbH`ZshdulRs8Yx5HT8@-E{1m(LATm@Lm=Son#vhvCfJ@KPjmqlf=h_onGN z1kFV9>pSV0SN!t~;RAZ=6fBDekC2dSH8NBRPmisFjw&WjLRo!T98#qq^PVC!7KL9!Ifv_!~+W^ zoL|Cf&jC}*u(q%%ArgrrBTj|ro|4Y!DU##Ph4pSls&o5WYCNQi);Vz&H;ZaKWLD;m zf7}X5E1uyH@3#J$|ALmNs`cjsI+_H-?)8_}&B+#d@DD++TTS_pRTmGkWOYW~P@a^^ zif05XJh4pH<%B&uN8)T3nWDAr@zhzreS}HTmv~}7!n4TpB>DF2$HGUeI{y*(HdmbC zd)Xp4i2@Q&%73x-r2H4Yns!ulx=`ht4?`R$FgvG=6R z6xQw`^MAmdn!;S-Nfo=a^%t#n&4akR6@^SVno`qX{67})rm1x$N&g$&k$WhKi24Xg1l^sD+eo^5*_^-$TM4i_ z+eK$B*lw5+vp!QUGZl|*h=1S`|BsZoe_mFXS%^lL$9r~Ow!tG9O@qfhI{>Xbb6*fs z@qZPCw0P!@;T7xNMwN8gKQ!TS+tKOj-2Wh=7PP@8@t(aVV7IGI#E{T_x~Ply=n69; zaEhX);}NIsw4K}qj`-viHAMk3)@Q5Eh?2L5NLY}Q704*e*okp8qJ%SFpguyk%ya;4 z_;CFIODSgRKrorP-)G}83|rA&6fpbm(%5S+cm+iH69Ehb>Y@+-FCyT7)D|yr|3Mu; zM4``LIL1~a%lG_13c7Wl3_=?@{I5twWg|jK?LKeK3XtIHpZBhNyFRsSc8l?kh>AR2 z8f0m~G!gH|ZVyX=RwTvg{L7e=@Zt5jKf#9yR1K%@T2i@&^$)5eIzGnKL{N*!j);HZ z0j!tq>Rp--nj}MW8aXuYF(VRo(+h`ZJoSeiYbJF`*jVn{nS&6POqWDHKKqW~|E6W@ zM3OjuSYy&im$f8S5Qm+aVzNR#`c{HDbSTWef}1JcP$#wO?L);~R3E|bT*)!`;YF+R zJXTkVzbJc=x@huf&FgtMtH)fWZuS&VJaR`t9XI9bUCs=qI5{L<6LB7t%8YJ$d#r#i z9%<$k|4*BA9t(`x4D>;6azVA1^an^B6==m_Z>QO|<%o{X04R$^U4s>|!Kf%xJr6=} z)KQ!5OGC%xS^nHNx{+PhR482|$FhV(i#m7y zV8>!DoDpNJq={2~JO2j@yYSN=o}^EuvNx(puX@*THYyt*-?hpq3{EpcuWX1~Y>2^n zT2)oY8@?RIeNT!maU*PRQTi9Jjr1u6c*_FKZ0{_Opa@ysTA+RE=v=DvkF%Xj-JBrk`p`tuB!;)3~2d%_-pd;`iK7?PG0y|a2!aHbw9sB5D; zcr?!({LsF!0E%?^ofqahy0H8IVQW!|C~@?#&rZ{&zvLrSpHCyvR>YFO6=x`COtDRw zrzTCM8-<v=sc&~f3)9D4`q8t6c2EfE)Kk}wfGb?WQ*S}QKnaRiKkCrrb`oNB>_z(N=p>*8x1i-*5 z_aVJ0zz|80l!%S!DEl8FmHdBr^F+BlpShnxH=-dIVR=56ZW#G^;vhd?;*MyJ#$@0h zDUKEjvn2^=OJW;)B_Fl(5j^Emf`aLn!*xh}rRA5yFrmaa5^V3LU(0(R&l*fkRd~cm zUgUeCL?rAh(uV=kiLoT?bL$7WovDiUAXcpMrLB|2;R(bFJm zjvXdbc~dnT)TBq1YP1`aD-Q44p+u@A2S1EI@WWEOEd)`iuDEAE@RASH{3l&}6#SGO z2s3}Gh9@Kc%O}eQj^&3b@)a6N^v)ASk$i{}V3(hpxe|jB_h0)sviPX_xp4-^hkvyv z_Mh6z)209Dw}PUS_jBuq!ljuy!5^T@T9t_sy%wM&OWE@;E?QpUu`|uoJ@ZjZoJ1dl zrV?_Do%;Jfxc(@3+%jg)1L|!fdUX?bNtW7c_kV$mZ=h0Cl?(&j>Wlyu$%r2z6Vo^m zq{*CWhyB-1Di<}V|1}GNG988(5^Vg63fO-O6JSw~O>3gb(2|PqR*=63w?Io5%8i_`?D^H< z=A$4lJD(XAm*?&-{J-#72QT76np-{%PT&%XSyI5i8jUaRSbFt-JLzO zm%oM26AJu&yV_aU*Z{o$LOkOp`zb)yg0nS!Q-pj#OlH!9L`~+`g}er5X=2ucR73%? z22}f}k-)(GLcqX~KknhXSur{~xmy`K{(FRB6@SGhf9U#6{DAPYoF@TZ*8pZ7XW1}x zW~_@EEjekXn&A!>GA80>d0pAtgVLJs+HZ3P84eeAQW-oXojK>K~EJ>DyQV*kn~>y8-HK)TqT~jS{bz#WYDol zq?3->Wn7!mlFA!xHpw`q#*w$uWzb+{5rBaU&DwAs)6AR@2tC}BXK6${M&-IMHUTQ> zf)JGN9UGCV3e}E^7h^Z=w~*0=G~LJdC!SdSi(~ac9kCH5MbT1@0(}{zshX$nm!Dr|Us`3*ib89{ z?hRU$i(&M`%8L-3K{E;F%O za)f_%k1FWi#mhpzdRb9yIAebQG90?ocN_1u*A+pz1n?~s`hl>p!kP|+C(Mt z#f&#`@a?N-)CMnA+%%t%qT^C(spK*77|sz#k+BA%qs_6SBX^d;d?*m7UqyhJ+p+{^ zNh3mF=1KY`ino=-Vi$);T5=Uj*oL2Da>C0XlUhyyag7R^vN`!D^mNxrPeB0RZ#td8 z7t1shlDos1$vZ;~y|6iwS3Bo#fjWiP^tVLdc8Pj=%dLhi!K2=7cfW*uf#%8ck@ULz zgaaWQoq#5e!>EDkA3GmtUPWjZj+i8#o!n<1{RUc?P#e{m?#85M!OhOZ_r zt3aichaR<%NWd+nwnaMe`)$P`lTEYoc5Id3b%d{Xi=RfDdT<#qw*+HJl%y4#Q@JQd zA@6$Y^;aDRdTq3FbwjY5(|KnyxGM4W=49~GaVGI>BkOQb70!iEbS8>Xge3+J#N6Ze zuTSeZ23POmsv5b#yiYkLwkb1W(Uq3Z-x@{k-fiP)2UuaqyF>HV`xm(6o{7WFv3obe%M@8FqnCM&UxLFSi660R-$hPP0P)< zL2h2kq$ebOg7E{dvo~28EX8~ zwZA=CmV6Yzdb^pYn0T}+f}Sg#RQ7!@+e&O#Yl{``dT(W^SYiDjhs_=GdL2gY`}*=O z^pNL@hp&(SMvo*07!B8DGaPX`W+d6Ou!G7dx!uA#|KV2-HeSIKsa{BQ&6!JKwY4L& zk`sKM=&!EG3Qu?pLQ6L}*oK#hCohat>hBx-SU=N&uIFA+_y<4y0=--g#A}?{5f!gM zMWJ`*@a8%JFtih5^(c9HKZrHBioji^u)38e!p^e*4vt3qWFnZ5D*nya&D#ge4NnwE zOtuX$(Z{5X9V%xv>T|6=V{Qrru%_?e1UBKEFD2Z43f3hX-@e5$Vkg7FVAoM&h9~qE z#j5=T7Uq!n`7>oQH(@L&1JAo6xc(5<)Ok9ibdhU!PJc>2-wtfSaMWfs3!>X3ZbdZJ zT5VD|eS^=7(j-wMGPju@9%6+i0=Xkd`^SEdZS5+I<&Kd*rE-HJlsZ<130>y3nTJf71KpsEp?jTz~KFZPu@yzo3H)Tu_9Zi=r zLG#z2OCa?;6)db-_iPVZkOR@Vx$=9Nkh(-;4W$wxt- zDc%?yQBj((eFJN*ERUbWvpx`oftq6ja-e4)5v*T(=&M!dh5Db-CdLuEkx&$Ros)() zl{9=Hg_F7!m|a}y!fAc#pQF~R2Ij6bzofDnUQt+^@3Ez*AabqO0;xgOif4TwUkhwg z^hSuf)9L0#Cd)_dYp9Hh`i|bQZDsY55#9r?pYnXUMp13g>*Kz@&%@!foUomMmCp)h z3w&Xv;o4X3hUjUy%LL!a>Y}f5WzW!JC1JXaM-4^lX`+_Ko76SK!fkoUGI%P> zC=8QHsAZ5p$j-tP;x(%(8kw|%%#w)x#u&zvYc0Hg#^42pN}pswMj3}4lZ!JL_Q=*7 zVurWwBjBsrNg;?A-+6%pkfygiAtPWk^E3!YPf=nr@p0c@L<9MLtu?wN{;EpG{3Mmr zPI_Erc-UoN|LZdjS?a`k#%N^y@J}Dw@G$vQZdH+@W&fo>rp|3gkshu@kNHEF#dC$U zVaeJfw~m60Z8Oua-m>J&SB8_##U}o$nm0`_3Qjb0!gFA#8$VPb0VLjy@AQQZ9`_y{ zXo77xTGJ)@lYS0cu1?|eQn3Uz`|Ya{lx~az)1Gi`*e5 zdOZig=Rw+{Oj9XE$5KrBgQ`z#6{44w-2w8PbSmaGAz$%6jyr#=7VWz647MeXDD2~h zCU;yj$-nh7Eej?=RpcX7CGA3HJG3*3*Ve2(cu`dX0aTDl!0wNCA6PGULEKo3g})`QZ(Fa%qXYN~Ux zK>}TOPFNIvtLs8lStzfrQ5QQya`e8E42McF+PM+O!^HG@|tuV>9n2wI1IUZo%gck}N3X{;RK++NJ1{d%nt4!tJEKO-TSsaodYVFvqQ}ze5~6$lU}7QKXYyimzmE~53D-uZ^OEF zQ!-x^O5cglknM%y2e{P>>s3zu78a0qXs3IeEZp7P)yl-#YEWG*5eF zbNYpTiF$aL`Ju>w`10|z>?cDWT`s^gI%|6`oxGt4iw*@|sbAzcYHj~k;yiHFC;pcE z{S_kCiZWpbCQhV(zr4ojDd5fL)2u9)4fLn)Lta1Wbb1Qp zp`p|$19I7Qt(WjJv`z?kU?|&s{GUJ7KocUl^41Qs)S|9SB_E)^EH#!uQaP{r{9&-{ z^VI~0YTS7z_nV2@Y^sgsBRae3UG?y29Lx`Tuf|G6b>*%tLXpcad3wCO1!+C21FyJn zSdRt{o=l^KEiyA}6-8SC7I}b5W9WJBc6~MfSs*jtF9>0YY+#J%{A1?HTpB? zz(Pg}=y|iFcTXi!*mxQmFI~pnt-mjO5WJ1=x$owv za7C%)$)3G=usisdFRQbxq4cjeACNqH9N{(S*hv;|lnAfn%Kg5GzlvySGl6fxtba#= z@N*^==uF|)wHl*hprJR?qq(zCOBj6L43^P+P8NJuc;htYhBFDKeWHpI*zlYB@Wd)qYO|_rnE%fRlgo$&zqy#OJn?RyUv81Bai7_dYDW zI)8QU%BR0rH(N*48*#DXea&+faCTvU(d{K%+!=TKGTYwFdXw=aWc+3HO=1pFc{q9a zo_;V3Sv2o>ro*&V+=s4IUG2`jw#)8Yiiyrr(wHjWl+(2qu(=QOPL^tgBT_4UH19G9 z+!yk=96Yp~@Dy6S=PJ{0PIL!wC!I3mR%8?(jkfnU0x1j(_HflKIsmh)@I(h55493M zRx2myNZkM=kMl`nuDKR-hpR{$0~CMksdj#6xDVHiUebVn(cSqP!kY3>qt5!W>|Q;% zH>?Dx#GjL4&5*9g(AT0pqbj05D!`GmrF{7KMyNHIt*Gh+=3@M zTr?4it4C#=OIp)ZLzyBgGX>w)ay0g@$00_>>10z0Begw8@nUzhA*$-GL1h9Q8ejXZ zx;#vsUzgg3qY)Er>P9%(39U#JOH2Pa>8i9(pQa3m9-#w6Ez7mCk?Fs~Xr1*9MQ4BR z`K6uG-h)_<`Uqgl$NWBC;X-5xp4o8!c@^&ga{R#+OBwle+hN91TdA9|SG~B2W7_-U z+?jZ(IGjSNC-sjMK3P0>xRf7IXKRv^>p@9hY)xKPQ_gzT-HeHOKldlY4{#{YywBU%8i)@VVCiJPA~lfz@lqE(}`srIyv2-^qyntSj= zU#M{^wx=h*p)$D~^Nybm&Za+dpKOzA>HSK@fGx^(arBx;)c}mQW)(#l|AE9^>7Ba) zENRV*MUw?eq3BNTip>MSnVpN}IaTw0qON%{bpm6&7d?}z+^TM{kwxJMZ{Z7199?)K z{pmr^-}_HkSM*{T<>8gKZ+a}WX-q;dE zb~}BmdxFky6{9TN!h?~sENATO+-TcnT#Q}Uf6C*_+;<$u^kl*3p%}*#8sD!gsyvT; z4XrzngZ1n-YaD_Zf26Ui;xkQQ%?LaSg7x~EWX%HMcIP=*hx@7FyAVAu`>enHuOfP} zrnnvC?#pz!Rwg|iK#M0*bNKj<_Dr=*^=NK|9`T^py=?iSapZ1ZsC`C&R>L$RtVePj z&y$x>MRa@<#;KIEC9_Vq>SnUcDeE3x7T2ZWkhsrM;DSA_pQZ!Y+1~PJMUB?y)xy~e z**iR^oX9O zEI9T=zYWL#dA*IOkagfUTaP#QbREa4LZjsHm!?l$qDn9RhWNvDko`H%7}Uufm9Q+S zG+>iN?{hgrOB!h=C3^q+8^MdKK1JHN*DeZIo#2u_t4%jMl87-BgCUq86vHB$lvF&` zcQ+w87CJjzfTxnu=1)XSSHbA2lt+5HnR%*Z!e-yPVo&GS=jA~m5B{6Myzo%*aS-k{ zF>aN8<8E#KDK}KM1S5j|dc}xmuDI*-vf|c0eVSRz36zp}DxSE=Q~rRawobENpg=G9 z=A;~tpEUK?OrvAWPYU;tAk`slncXS`@$Z;^HK~mSZ%iwcF4xj0n&b&FXoLUoH`O_s#|njx$z$<~{6bB_CouHm`GUOa8} z7o*y?IsOY(3-65Ig%%CrS7eC3gJ2s@)!Cj6wwvkvQLD|QB7%Hyi%XgdrFRUU9zh<( zvphy(KyVwojGEM$QpxlQhg3Vl3)Ot{_Lq3t=`^&5TkH2K>Zq~5$?G&c*xYN&5^po8 z%f?WOFS7v!y0OAd_f0oAmD~+vZ{dnN84CV4#!+RgJS^ulGV^C)iD!OuYjbEaow%-C zNmH{94x9H(72P%!OC7)X3P1fEe$}EZ+^F$U2k^Boe@%%e&VJ!d-IJAbiTg!NZ`+V= znLha@U1sjwtZJdzs%w5%QK|07h}{`j-a#CRi1oc&ax%rki0zDvY)N!D`G_jsi)sb6 zZ}?t@rzU_~UCbE2mU9Je{z>8(xKdA)R3!AWfZDimKobo-qr(`1`q-g0*=RE^E&y8ZJWVnTcM{IlNkdJJM?ev`Pv z*SrXFl!$B1@f` z@7{)faRIa{ShTtf8f@Bm4doqi@!2U1GJyA%pi}4mbXmq64dJo05@r0#!72aDMGEMq zm`ycqybDw#TB2IHviKphGo=@|*bt^Nzp>C5@1#5Qd@n>&~Z`8IyK1 zpTlEXykvvgjWHC$l{FOAV&yITF6216_4A<+0;zL<6>y<0Mps9}mF-jErg6>)8=%$E zP(PJhoMT}`twD=*O0H?%+*Jd!T(e|EZ1MzWf4?nJRCE&#nbwPetB38xPT@q;?MJb- zf0lQ}t&>u^6yM&b!U*Ryj8bq13>RVfXB=o5Xhrm?-jf3ugxXz*tx5Zkq9*7p>zH+M zXvgbxV^f1p;(0W(V2gcwYpV+9b$||oHO4DY=DU}f97`*<_*d59{b{F`V-=91@61oy z>H@pP@T2j&;CK9V!Tg`?`)d@f5dC^ACC97WMu226E`;81)(zIwNUz3tLRr)In7IjV zZRdca#SRYIs6YD$2X_9R6_BxOnF2;K38jQb4XWEc{)$X3+M|nw(I|`PU4TH;`a<7V z@)1uNl)Xq{iUUnV$$Zkv{7ep&8Sj>o#g#XFuw*s37=s zWP?BB`{Fx(wX3XFYOHz?)&Yc!iH)QN$fmT*ty+XOa`}YRY8_7hIEq^mElphNWz+Z) zCfwi)8~gm(r$B|q3M7?ICy3wk%CCz;-*1Hebn``B!ua;m%;32FnW*6+7~E8Fr#eOw zyF4$MQW_umDRuxED)|(}VmR+(fVE)F?r4y-6%I0bc(9;ZSS+r84J=@qeHk>2Rpxjf z`kZQ0lsHkND~^~`&jX8Y(OP9y{X3BB>kF^Vfg$JPo#`;1xvKv-Rs|RT%1H-JfmdN< z|0oPe_E|#_<;;?ucRcJs)OOw7TvP|BeKT!r$*U`{l`1KN^nfL&Dt`E;yDP!#IC`l9 zx~{66<%I^slh3F=3<8XE^1mgrz){oF-m4I*ogwq^7;U5>N}s>%j9{l@C61P+Kk>KX zvr00+pTnY{zpimzFcZK@28s9fOi;N>Ql>QcB2AXh#X~Q;<|fI9+hCh2VPO6_OtxMr zO}+Wok; zP^i0v>grV$hnPSVxrv_$rn;7`u$^@}`1)G{Lt*l6H5_#T8-bjisv(@0 zj-m+%w2fTTePhpeX^<+qJ$CzrVO?v@x*wC9tyu-fe7;0|8*XZmkyZ2=2~kY+?74}s zDsSnOXA_VrVYzLO!UdTL0im5Y%Pp5Mud!Kz&k6DmZgmx2q}W4(xXtR7_a?W1Q2 zR8+$?YAH6Hh+~OnB7Fw$40}2uqs$)%DcstJmnYYW>}~>gj9u~U2OmGehvwLZ>(dHu zM=*aToh%;k1ksvBrY8rzAJkr3(U^9t-!LZ$fp54~&O7h?fEH(6Af<`+;2r6`6(ITq zWgRb`;$*fmKr0db3;9aCAWhw!vKs|iY%j?HZiS3}18>4R!+kUx-oH%D+l;-IHhKeI zYGb=mgX<=Mp*$gccDMGoh%oF+KvlD5=L)^8!}==R%zMcjhw)urmXlox-x3JGRU z_%iY9!hY<1@bnmI@zv()05r=`LZF`@^^nF1Px~r*jlfWEvA3j1_ak6 zMWFkLe&MG>j7?}xSGQf&W=vC)D5a)>@H*SgP?6mzJL#Mesw^n*K=oaf6>6f$`?hIh zpLE-_a7Zt8F@{^;Nb+zre_mSan_oK5eKhOzh4aWybLzUaOJZ-l(nEmX9}q_fJ7U_Q ziD4dPF@@&Um(XO^HdAkmm#;aN<`PXGClyx+)hz_Cn?<0@EtH`W|9XNk-wWlt5V+-F zrd0nbNjzn-*u^63R`5PpEUb-+)#MeiNC5J3LV$or_MqZ1;lC4*9V_I}`U}zeu9E%W#vT6i zEKrkAyHP!E(Kk%T+dss|QdaSZ8eV*&|E59SOzC2FM>?PXJ)U{rj!z`$?(*(Di^7%9 zo!HbCcJyR{G{fF8i5dcfO%-ZcPHMsdj%Epre;7halr9{zctwBQ>swP z`@TxDWfWuypcVmq_x*|Xt?l#e!mUJ;sVIM@H2lv-Nd-!@7%m;yz-F;)ekGo}2E78Y z1+#7=EGBm)mLgFxnN4Jz;0>^-s6ygM9azP5N4nZ+&4>H)58E14@ZMc+(pWv8OfMMG&v;9zOlB6lxaw)iUg*z4! z^Ca~OJwfEK%0m0tWjCUS| ze>70xKEJKoW@^?@sU=$GdKT(ta-BmGZDi6>FgacZyPkjUaq!3n^HV$h+|jf<3EAU> zQm{l8032H^>vbHxpgthdv9#uDnK*c%MFtbVrNAp;G$&Kc&>!_?i?fBJ>|y62$Gc9> zjvP#EgIhW&^2$cahJ_SQNd%|h@RZVmm$E_kGVL)4>8CiTLFlC*RNG;W{J;Sk6~=@4 zn-5hT&I_`?d1+G1hxh#01S<~yML{iMj2EBK2DlAj{g7R7GzQz>vlpMuQJ^zD=ZDT@5=4y9Mq_>UpY8`IjSdoi_MK$UAf=KJ)FbGb=980VCHy9rh6{QKSL%p%uSOGP*L6CwHH@aD zFK{s2!$JgBmfNkc5?4Kc`e-)@_EWa#E4vR1viQ7JAE{j#X~+&~68L)`_zj$gfJXmR z2R5@dsSRbg8fJ3i2!#=oK~+V3>e-q${iD{&DM8FY%tf{LWf?2pGM%&_ z&;_38#yPS}Ltj72)eK2I00~ z4Wz~QQhRJyDWEk~Z$;(XfBa!4i2Ib3VoN0gNAl%G57%ktb}4Rycmy9FU2ay2_=IE@ zm$}b9!r@$dgyrx`?pOPnWaf7Tap3vp>kXsyUobVXB?txN7N6QL5G%ASeWt`|RF{}& z^0J^P(uw@sXg9B@$F|F>%E(Ln;O*-y;Rn=orZc6qLRA%1vZ~9={iNCw@qnm6FuC)@n`u zd`5wliy}rEI+u62+Gee#NichnqnK5AHD;}!KpklxO`iq&V@_uP6%`Hy+=yBHwHvY+ zl35it2GQlIIn%YfzV^BYfVI3#5YW{B*jA?H)D_BjamBME0$uc60$RdnsX>f6n zt(hs?dGrDBtco)e+n;4-(HNqI4N32%e?lM8SLZlgea@!yx4k9zUAdq4@_e+Y>f%?; zbXQI&4!=4`7U^loYy%=Z?sD?=_zr(5pllgk67%{szaoDj@P#vpDpi9qqEGnylN)uc zpGsYo_ZBl3YzIeXb4HRhyz}s9UqN9PIu}xvLA$n7w#BO&u`}xL#48A9VTyGI0{4CK znD4@i7}j89N=_Oi3VVX04-CUK%)ebBipL4o9iE1zLsLKuI^vB^w_^VLrvZibQ6wWw3 z)BGv6K#Vl_Hb^HLp`vUt!r#x-2KMb)-=)ehWXBBxryaA4Nu)+HB7i&Ff6KmOf27I` zsYqV`HjZPNK-vws?~3)!6tuH@o1yRIGq92!MO(~_T6{Xoz56a^vHiL(`>^);`Z{zx z^?R$A=k4)W*&9cdF6JllsJ#c@R;#U`hA&)yn6<+j$Rt^@wIFeXs`Zk*@)Tmy*XZL| zf;tw{<6W7&dsLfKZE&x1kW7Dnp=LrGODBm#gEtpF66M$f>|3o1uD0KyOORC|oUN1T z8Y$i$$-Lm(-SlEqcY^M(Q4P>4H$vcEATQHhv6gJ{__x&|MPApl-fD)XzLp{O%zd%r zB=ZSOuqOKew4D6k`U5zm{Ltn~c~g)Yuv!b=wiHpAu9V}((Z)hlZC-lr716Rzd5EfSKx z%1gK0ll@*TW#6{U0FLOs8*_?axKI<&UfJUkh7Yb10?AQN>xq;JEf%|Mwg}GhSt9nY z%}?TS1aUw-TeuD19A);d(|@}#fdmeyIc*6GAr>G3B*I^RCUh6&t=xfif9)zjrm0W7 zg8Kz8#_wJn>fu~=USnnDy{jzb+Tj8=t z;$9uI)k0R_$Q6e%{$(~faS9>)0gg7+ii#j9;<}DGyB(xaI6s&-F?vHaXgree%itj)U~gOkAAG{|AXD@#*LA)^L;$cVQ?_9r zF>zlTWhj&Tl#kgMGrFiXI>4(xTWcG7jr++O=#yz5VK+#T^ zZ+9Sm!OF4P_uo2(kN6K8%JXoYBg*>5Fuxy)8f|~#>1(8W$nU}l0*9)I-ofG39haCw zfPG7~X|Ilb4VDm-m0pWc3kO{rC$G5-bV6%mVbu>7a($T(eAm{*M$V&E921`|?Auxb z%C*yXg&{xdz0x{J$GgZ}^dshwni)ZB^oOtg5?=L3WhbJNqL3?HLa#DyQ5Xt4hUTer zCal6(UvN76(;E_Sv63GnS<8W{jrwuC%5Vb`7Uj18A)Wn+^TvcQGaRO`LKqwhn#c)- z4O-HnC*jwj0nKLnZE!RrEG61bi-5g@(BBe>5G2&-V3`L>d%?(UpEl3fPo7N_B+C0}t_Xx_B+5JB-G}2+yn)XalgL zncz-Z;O!EYPRxu3?)qKoAn3gmfWHEsQ{Otl)@vO4w?8K-XyD-*5IsFG&h+rS!yRg! zWw;>98krwTV~nwPl_hJb*mciR2(@)s0MXw`PMNgo zBa^;5qKFavaMqIwYHRYz+C|C!^DY$P3>7)d)^ehxI-HNMPj#1I1&I3r9fiT?i4i&6 zYQ)I)DY0n-@uys}Y!!0T)f>PMlAPwA$S4t?FEERVX%amNKs&9RkMv!{Ddq51XmvZ^ zt9YzcA&%10^?>10o4kPyaO41w?CHlYybhz3Y`D~=p#UA0@EOIdze57x6&sCQJu}RdB8#kAlLVS}3^0$(T z1Cr-3Y`q9}+tW&xh5Y8QRQh+$XH1_ckMRV%v3dfRfQ*Grn_6Ry48FF<#u#SfF?ZL@9oPLpYiy4sWqY^vcz^ zHs^_+*-l+I7;`j>0kIdba}+Mi^e2V0LJYi^{1`0$6``lesFctsl$@k+iFBZkCkQ-# zL{K&8)}DO{z|?RZ>I*NlIv9K?%l%5qHZW3{K|e5{>e`T-B&PMU98a}A&k=W{L`iK7 zqdLrG?A-Z|^caTF89G0P`f|5RFuwepe}tkreqsNeFR}DvV3H4BcjwM4i{7*Ar+^pu z7vrJ02bk%Z?<-U%3S`adZQez4k|4aOp8=RPIds?WQRtwc%yqGb8aX=0r6-Tczu>(P(F{dPmJB zm`$JhqvDH_Wjw6T<46)p9Qs7~~1> znLyMkmlNW223)0SS7E>>48!DI2|?PP&!`@veNfXe#r`;py(3;*zAv4L9{2S=E_ga3Op|DNmEEy%N zUWN3r);Q@aLC64bQba@IC6Ti(GI~wE^1&BGpkle^MD@i36hyQDCK!jrZ)D-J_!y48 zB`BfQHTmCs$;lwS2<1Kh-3WQ)a+rzKk3})!!vDi{v?Ki?B=Af zL;#2d2nfB@r=dorcA}p1>kmEU@TJ-{xS{7un637A+VgarVvNN5(GQ)G#T`4jnI@nl zzX*}M&cQOYA3!CCFF8AerQLtlr{qPSmyNlv!xoW-TaijCnpF9T!@aZU+W3GXpr5GD zbXRSF(a%!(wo;BCF)23>V~jkyQ&fI5 zGFz}gDXr+HM~((h2|( zrXQpBY+?R#@?z=Xuj=S@kDlD$L}HFs9W?#b*6wJ=_wH!!cpv@rIdo&>{BN!AITh0) zn16Rp7mO%Wz8pF67b(t^=d>zA4%}}N!%<+rf6t#eov2pmmCbwJxs*lgC$4GM&0oy6 zP@dV;&6bies@G}2>k{=nc1%A8OW6T5W5N6HFsxiHNshKlcPrPXs8LGTCmva@e9>Du ze5z`5wTo2fq!~PQgKCe*KQsCE802qWIvXZh-|h!hJ3r2KG% zHBX|6uu#Pak3}jXW7IP??-MOcoWRGktDraOvuKQ-kHlw9El$ShRMtyU-mPmK$z+|aBreh0A^fO|vr)oO z2D^&X@-Z6k#Xv0YcVJZ`cWU#%O&ClnAc9S83GXj%+P^QK4yij&_f`VD2k?Cvj^);w z7%^|;2?injftwO zxYlY~@2VIu`Ai?g+Fb=?YR-DQsLWZ2DO*SCHPGa*42-nRvY4Ep2Ix_+r425$RSYOJ zs2Ze$xBx3;=Bq>ep3PbQO9DEvQB|akRCpN^y!L%1VM09o4&%%jsQbpQWzLV;ABpK_ zP+cppSVxJ`&g_pKh~fGy#Oq`P(f6L(bq^g`W1-*)P50fdkNEj{Fnp#S!^1D|e4M zmUq`LRredUX9dZY`5(6~V{~xmYmpmyJWPf2e#>(C5tXSmNfwPwo}|gb6)5T)tf4rc zL`;3!v+yt_6(NZHN#EOiH?a85Wi6^LACYP;VqHDvHpSgyR&xcEr;7e4p@TvEnorBH zWXBs_Aw?H|2DWQ3-eS%B61AA1P?W_YIz42m(o(hFVc;ar<))+wwBy_;31f`a9id8^ zIu`vQO#4&DKzXorVXFFG?V!nk2d10gP2ngvLiniG{%X+d^T*`;!gT1Da_MPTJoX$5 z4=(5#JBo@unMEv9$m?~8mkMiKCDo>Zr)c>T0w3>Ayb$q>y^%Hp`e4wcC?k=&Nnm)r z;g|9z37<^Zo%iKmKqQNbGvX8uW&vre03Z?BoE-q>70o)LER#*k&|>!uOxpeok*v&- zA+Ai7c3{eq>97vLGk_Q#%ND_Knau0sl)Ta#{m5b26^7S;^s) zD56=m{r?X}K)Jus!ka4VIx&+=7`&Rw0GRjIC21b5I9bJ-3dt1@WqVSgkX(e4A%an< zntv!&3;1*JFoC;@n=OAOfh_087p`+>q;pdc;wtdZT_%a{nnF%~-QN;$ICaTDWm*xlPKO$4YxEIiQeH%5sMp1%rj?WR8qH6kSge+QV@GBR`e~?C zPBzhVco;MsoaVaa3Q~;W>|#nH-k?}4U8Z_cvlEiq!WT-HP%MAaujR$y#+kDNHa8tI z4M4tF{H<2%vH@$G7F67=oEg-qN;1!yXt-C-;GTfxwdmfoQ1RVkj^a#!{G#UqW8Y(H zoDdnGvXk?!25zMKHS?kXvO{H|p~>0=-Ws}8?H2ALjEFC=)0K}mV}zrS0fd9aK3q;% z&z@c5lz^3jC`o^hjbu%1Zc~VISxzEvnIjdbLRhET7t#{bso6n9LnuyDx`?86?`w+6 zn}!cup9#r9;t-&a3`|XDoIG`EVZVf)Jvo>&ki#Sev)m0658|oBz(}!mVgLCv_I)9> zXbb*b#bVQ*!_5@Nv{5w&s74}_>lDcDz^LrXMpO*ssOWzyF0)LIo(uuN@Ib!#{8{)j zm)}=fr6zkqlbKdN-u<+?4_G&#Z3e@EpksZ2KS-r`@>^-W0vv zL5{yZ2Qa}v@X}jc0~~cEp2-fme`5OcrVyo+Q7~l;<&BolrGBXj6do&}YA`mT_3{53 z8r?mA7N&p1EQ$Coh8YU+1lqB5sS<;o0IWoaRUn3dZ9@W?Fz2N^kbei*=M;Bw9cNdD zPf;<<)Id{#(f+WmWJTOBT*6anKTH|x7V&o|KG1w*&xPkWFg{V3ePK9fI&W1dS8%xG z2`rBn$sZ$0YxWtDyyD~ljT9too-?@n5N}hiKVQ0x6N}qG|2t8E| zE}aTxSXpP7gLAYoR+6#xa0*^{GH#oPXb5UhxKH4kDEHk;pD~ILlPl^@Fk(75XDQ!P#Il{Qs8C^k6ilo zJ^gu9Hi@mrO(s3jQL_M)j6Gh!I!J?7DtvG9IK}Oa z7e+vU25?`cs9Wz|GEjpjkP};tjblTmz(Yd?NtZkvyk#&7a&FBLP*FwtOuygHzat4p zkfT+4PY%_g#3F$TyFk3GjY8_1$A@cVQ%HaNX&tJ2E`>+e@!cgaCS?bRj=U=<95Zbh z#9-cyqP0+hwAXed6E90k0M*2C7aqf8(F*5jfNtQN#A66cM^GFp7922@{4nZp6p(p0 zmM9}a%h>bO?y|593r*?q!ttQZvg6D0$#Bg;siA!~cW)hdcoRNPYz#SqjRWcxBIbV~ zKn8ZVaz<463y3ulA!UVQR2wxKTu>D8;MQs)b(}cdNoqzBat!q&Kz#@?_~`UlOfmKHW{S=gqj&nR z{;lod&mhUxw46H=`q%Q+#aO!Ng;{@f##n396S`Q`CUR?^wcTEyC=z@&-q-d$f17pA z1A&vm5Pgp3O}-Y{M_oAXnUJAg(&Hnsq) z6=;a!mB|30%PqeZm{cIv|AfG^vB}?L0NQliuPBD=W{|zi9s7YS`sO)wun)7Z;m|jV zCZEEcZ{IWG_*)(f5khi$XfS_@N2uf>iZi|=@E{5c@P$|+T+33wM0Ybv-WGCTlEFcR6&0)zuPW8esr_) zE%S(|iUcnbA0HBj%pV+#=g%a%`r3=}KT&k`gqsMyduy(spBKTF2xOl~)!OqQCbisr zw4OhhmHNvM5`?_NUeK`~$XaAWkjB0?VAz^)reGAKz!ySIOqNsO#sF}&281|i@QaYJ zN~r||84z@41$;JVJCuJ%`uKji(XM=WxhnuODHB^YM2_fw=v%eQdAHvCt$*5WpLd`r zk@8T9!zasGweAHx{ra&=HW$G9=bL?t)oTB~r?{D{zT#+4*%|zr`YyWTC%l~gFe`(T znd6WOnDnv16N0b)VI7Hc|5stB@M4Dg=SnL3DJ~0iXe;_^bQ*sc$dPs$zb+NjUnl+g z_fr;!0j5YLm4ByyE4-&)L(8mfxrbA>)yDPJ$7aR!MgY{_)! z5;C+P1tTHMM^R3;ZgSHc0=6rZIV@RW=T+n@Pp8}?@9*y=_&X*O0J4(p$HLsu?ft(| z25lp*uHD$nOhoo-)NS=53t(L`ll~tdOV7E3ZxD=R6nB3j%~A%=c)as}2vrdPS8@(R z$f?qoNHc{^k?(QjM#BA3er(j=W7-(fi)ct8rnS=wv_8|ZjR^$-;B^ZhABto_maPfH z*2r2Z`V?~y-I2aJpkac$34zT!$^u5dqG=sq-tOONV-j1CaUskQqt9@!Y<_8s9zNR; zlbM!GogjakJwWsXZI9MsSBjHhpt=|jNjGYwp&xa;F1;1DNUa0Tb)%D_;?zdoPe1sq z%LzE_Y13wDM-SG<1HcZwYUxlytQu{mO`PrKPoO10<&VA;vfIVjZ4rx1YqH|YL2?kf z{on~k)-~HTaT%$p`^o$Q%h8|3gC5Get5_MkWX*p9lirw0qTbm`o_9u`osxh0dY*Sj zDQ-!Xu{8Ac$xw(Gx#f)&0oMjEw_Go=O`4-Wqs_#Y-4l;Ev$5W8sR_qdXi3a`-3G&m z{#E{yCXWf(Fk-*P^#=Kv=-gZ3N{)Y|5h2sDa`DXOlrl!WD+xsu64xFffob2??J<4G zM8IX4&AcFwtx+hYMl@dd@{-bu6erhFXoi0+nk`zxjVbo2aiw`yp12ZH1P=2q3^Rv< zRDs*|2&G$F;sR}K#t1ZCDCi;OZ@=Rbs+M%ZC#WKs_;TxJO@jVyY|=s{s6@)sm=I+9 z5NV9b@L`qqBy`~}kPZlLfqd|mI_T{qNg0f0_*B!vALwiJQ*4HlezWFn|8`=tZ}NY( z4RHrHE*z5*vYvF@od7+HRMt`$PXWDP4ngoBQZTQs6DdTIM-DXHlS|iwYp?G;f2IU& z@^9_f0`dMZw7USxlm}rOA;nw?g#wDI5&8=%a6}F-S%I!kApb(o<9;?yj0+FynozE5?S!qf8uKa5Jvq}d@dlF?rq8M$FE+Bs!?j8xfrcIy4@c*;-waaZIS(d-IBI+G-Su-PfgQP{t zcDqz#Mo|=PYfGZoBBh$znGFU+LK4~}!6r!AtaeB2YwYXolkB-SGXW4^1V2Q;RdTmo z5|K+aNhu&D&++v0F2lY5+vG>aGKtIn^zu%A$7i>s5{T|`wun0 zs|Bz-Fl{5V&n_d+-6bQ5H)(PD83HrzBL4}c&TDY{ToW(*$(DT-#Caq;`1Z|)WbZ+U zwVH-b&M`NcY-@DYiz|N{)-f_k!z9&cz-(eo=YpsD8Z^~AocIMooaXB|QR@-L11!;j z7m<4tZU(eir9d(xsh<&@BuLf@GheQW`U>YAqvkSIPf3e9exjLg ziL{I_fe@X2CBa3&C9vhJOq7b?Ue6!Op&GkD@cAKhs*tCRtPFpo>Pnfeg&jsw%%FH|>^fYwDpiO)(`%Uf!Y7stXesYM&I z>h`p>nXU``31@$RKfV*8c98cj3Z>*eVOP-`LWVb}$gQDS8``rGWVh&NuzKUC#dk@Z z+r3YK>ie{e;xGfdUgFBI3A1?7t1j?sAzdOAo=uq|oUgeVv5N2D{f+0!Orac;Fkz1c zB41*Pxvgnrl%mdnX0^BG!pls&`d9Dk#6Jrv@kt+EhsJ-GV{v*~y0|F)hCf2=D|&hk zamZDMw?WvIb9*K}8$htZ&VNwC3G%))M+DstesASjei0K?Sa2`z`fZ|)Lc9h$x@+_r zQ}}EUGOWD9l{wrp6MHC`NM;kJ-ly_W`+nYMjBnu+XUNxgpLjGI-eMkLl92ww%il~y zD9Yl(_+ozzXCp162k9l1+?93lRwlHRa4Q5(Nv4tQGS)B5&WwulgTlJFj*9*m8LZtQ3 z$OH3;uz7v&n^VIYz?Bq9bF+ZR+I3$7n2{jbipiKsXGiZsgkO&T^@qUB4&3Wyd!$v)cX65M+Na{Afoq|Gg7}*k5`=klf4K&JTPc&d$dn zFv|GLpY7-C3(rlIH>ZV~Qjs#?FTGtZEc_jPQAvGgH6?3(VB~NzP_Msan&kBzijq>> zoTYejw{Axylja(Ezx@=>&cp3&GQt7)>O<7`CgWadG7Vm_jD9KV3JYi!YDzX6VWW6UhWR;n zi4Op797Nj|<86sm6w$%DMu7K5U0Q#k2m${6cib-o44)d4dvn^A$%b@I;>Fd+=xFy# zAhg;i;5d#*8Z@pHKM`1DEo(yW(qP^~QQibv_)z6A5_3?Nh|;qm@qCgPnvzY!Z1a@N zNEb~indJ-Ov@nn?(uxu7JrIo8H%|END+rnU-bdq!WfP!9s)4&pr%$krb$Wl-CQHTA zxyp?9uS07}bX86Dy61s$^EiswZC6B+we$01{HeIx7v^-g*6GyhA1@lsPPg-0t8skH z@BCqMnX?vzNxGfuX0w4RmlVEgTwHb<-BzP_0HKPmX;;oyg9q-T-VN_ zZgN$>KIkq^h<|>jB?TK(x@@UuF1v6jBH7s!e!;&T#|nrUK^x$}T(W7=PkQifN`!_gT6)b!COQTdDAXguzd2)4hDne-i8X_(YDt;vb;w*el_oe4( zg52WK6fHcNvOEauzTa#$Wkg368^P;@bBo7hq47cLOaAGnJo0`^f2S;NoJJ`#hGCWF z$AKt*wE&kvx&tGBbx@CBy%{+c4d{y{VUb;%R;19&C(BHQXsbjk5}FX%QUc{?ezN{9 znfb(G<4vWdNi9z|m%vxxXVc2jtL)`J(u=9YOxRD4je+4NM5_^zg@GUfMFu$QcWm_7 z+gzqkAmjOqPu0_t^c3r9dhR-`7nO*RQ`Yy5n2R;3Ri>+dMqV{VV{#apHZb-1T6asL zP=|#CFh7yr$h|2e;dljjf?>d^hs*#(N=aB*a<*43?&0}ajGy?)qb;eE7C}82p-F6CmWu=ZhstbyuoHe$~BN zTqqp6&-n>|ahE^|Qqo-p>yiPG#3Fy4*$7QUACN95MsHx&M#f-1#Zi%q25%w1&xal^ zE!^UwKCox~VEK*#*oH%=w<2%OMe`1@!Vo-RiWCNvsTAo46s#1Rb{q6LeIzn{|DC#e zsIMO4YU2w6OH=j2dO@y7XUw#N6j%JqjJzl#Y|jZ`N98xKf|rN)!%%<8M=7Dp;vTYo ze%ab7^4wt zwi@hzP#<%uXs9$09e_X>p{GBY^#K4u=uKV^&kt1qGNt%>_;PJvqGHbH4z)yH0zLDX zwY8$JUjX}x@L_0(xm}@`zmG_wxQ)J6zr1MGt~ycEw2ip+d82#X4oykKeP2=h_aJmD zeWen*BD*BC*7({cLKi!=5ccTevf23<>XbTv1Kgal7+Iy_NteeEX#I1n5fqxnC7 z80zgz%MxcL-if`LQ!*qjtyBSVVq}4_1ihiaKeajSt=ly%E^iTV1r{4N{ zecJj8vs^K!d!qtS2f^d$jSStn8Nfv_l5m$;0@*wH@;H99k@c;HjncGbujNR8@W5~X zc&s!f*p<)v!zgmsyMUK)f?aj%UJe;cs6ESrc&$PD-v1|vs2VUc6XSs z-Q($Bm#aN1BdZFM;r#UOa=LmsC-Y^J%DfN`zDWvZsRZGOM)7^|L-8Yj!gpD8adrN6 z^p&E7?grsy4q0Wh>Wn{lvx`Y#B6>*6>J4&7< z0WuDSI&sHG@^c`(w4J$s;BkOZTb>8MDlqsZN=;$y7~liwXL#PcIq^aiw>k;-=8&$r z^9{P63fOxw<-luY1)e#)dTeJNuoO;jr1K!Vqx;X#lYu8g(;g9akX8fg6=ZC#vjD7q zlw2`MIef^hUfBq05xxwp0tSH~EhYzJ+6~O=mpGuj!~x|c4k%iGY2MSV!IZx>2_-Ap zy^t`w&STGI>YBeLvlI8W>e zvREVBvJ5CjkQScnP)eJ1uVg(vH*1^4%7ngm(A5f_>{IjcX9;Mg#lNe-rd>XG#1tp^ zD5bq67k2vnUU%ewd@&I>BW1PGr%Lw`@>;=4!{rW_mV2C<!SMwidSBu%0)dU>ARgTKLQKu6$dn^XojHh)+oL&xnD~j2#zM`F#SYFsI}d5} z1&S&&zkOy}rQ8ChhEx6w&Jq`hL-eNP&XF>2E*ux_CBl4v)0~2rm*~3KRm7EO2neBe zy<$bG0!|UnTSBU_6D*lbzX)6l*Cqjm1k9#8YAiNc7gQGx_OuAPZS}I%^-cA9nXj|f z0&jsY3;7Z>v^>+Da@}^Ob=IUSheOCWth5$ncMq-49&B4r`tMu8^W4@$cBXKd9)_enK9^sDB>{!&_VYO zfpD(Ek122a`Y?cwh+mga*w7*eD=iUOz35e$c44UG_&iWbfGuhQbCEJol(Dt z`4XO~Q>HKC#gwh$+4HpF@Jq?rPsmM~jfwk(#Nmy>3@L3i{qnWP6y%F^`1(zuDAX@_ znY~|s@QUTB>-%7i8L@sm)_Z!B2XYx#tm{(i)9m#fgT^4k)Qo5ZQi1mmy-#F>r!I+0 zn!28zJk48Pu37#!>?O=L0jLnzGBOG2Rl)R6n|i+9UV#uy7z3YOzzDXHBs&*|-%cv} z(FhFR&ussFmbtC|`xIJ8+EP6WSgQGgXYo3Jg}qa9$_cd)2xU9UHA}H+FBs-pM59cE zbjSwvj*prhF0%>v=Ad-+=JoS5#59cABKf%aGI&JFm;LulSnBswhhC;_=QXB9cQqvb z^%x4?5iXK<2bG_$0mgR9E5GsUaen%q0oiT7oaO#5dIV6>=IBUr;|I`3zP{()Gp_~<~h}mkPy{O^JluafJW09BwR3tdm z;{>|LcabSlpb8n9d)%l!%wF}Y>I_sTJy3oETY6a>a+WivEiek+tA`5q@wdWW)!~Q3 z7hoeH2RHqLSmQ-!|Dsbtm|RqZDtn}hxbN>p$3dw>uH&ME>x?lRIJWntSNcm8S>>y| z5o2TnCz9(DaXl7Tyk&B#B? z^eYY>@&`UP{xg?_#RDII73Q+RdC;U1Lr!X$GK`&mJVD+o=`E3*%;yIiTZWR8RC0nK zUxsQX^aM3xkvTZb$^ZL5|JM+L>3p0k`~zCKub7(nL>@xyf2H&TN3;P z0|5B&=8R%=)Qia;bWA*7c6E-1DU@zscv%Q!*k?9?)UPt>{Wa*&m-TO+S09g)AhXUS zyo*fHeyLOHJ=9C*0jm(!9u<}p|N7GVL@u3FHg_h3;(Bli9SX;p7^5*1PAwh}!#c#~_O3uXAQ2rFs#qnT8G*OK2%It@b|b|k&FYp}Y%y=ZlsIr6 z!LZ3{Q0%o)Ob^>bPNIyXf}e#;{k-m@MHhy zzC~0Xpces!&1ky!;(rVC?}9!Y+7Op8_mE4o@V(h&P(}@Zllgz{0Z5_PkoWjodmpd% zUK}5vv?1@}-Te?cC2)2u-koZJ#N30v*-K+=y?m^^gw52S^`=hJZ2{3W0mz%Ho0o=|tF8WQ?4&BOHV9#lz?VZ8SuqCeKEp#+^8uTSw%%eyqx zis+|Wm_*%w0N8HFOpLqZFbEt?@<0PNj{V;Dw8fZWB zw0SUp#+XBnxbcVu%Z;P*`+@m|3Seze0apv5hsa{`afz7BkrIoAI=K0#W)~SPts6ks zdXqWJ5JCA_bS4I|plem>tWbzKgVN<^QvpT+!%lKSQz;Z_N*9wkWy_MLjEmVO&lT3E zfiWBP9?0%AXi>s`B2_dze*DY;PdS4qVkgdjtSdM)ou7GDR-t>=oyynS$UT)K_YPA= zcXFm@r9OUs(Kpq-lrGPAIKNgnVe>tF7?mFiK~^8-%T%Pt^qTjidW9M^QtjarQ9s?@y_K$P zwm&#ob{H`jj3sO0&>#ns@?2=`QM8Zg14t`No)>UvPaF_t|K{Q&663S%dby_XDNf2p`Bh7Q7Q2sE z8(;s)vz)}2_Vp8q$Dw$@GwrN5W0Erx6|A#d#9ixB0&Zz8s#G+b`1+Q^3_Y|i>_w|@ z?}@P#=a!sQST8)2QeRs(1ZA$R!%VdT%E>-));UrK+Z#=KMwf$3!P z1}1yW5%7j0*iEK7`5!a{oOzI!8Os9;e>!_ZO#7s>Kc2p)|&V1^Vx&?4LPU5(XZw;cc#Xp@2O|frDCiEGFszOCMNf{?+WkV z*AM8=mZ%1!*N$dNk*jUIIm=WnpUzBaVY7t)4)1~u!y4boj6feSJaowugowXuN`8Wm-dfiH_>@e`?H zN{bbQc9CpAOF&VyC<0G}65tt=e?Uao2Ja`PNi1ia>EU-ZWW~#h5Qoc;frkglH^oCS zG3Y_;+rJ_FFNrjKMBj2_2~vIg^C)r$%>I+a%a(XQI1}&5mevd*bOFM@aN=L49g`zJ zxju0so$gfoHe?c=a5PgRnX^pOhGk5bky)ftDQ`9cmoY_nR8Othzz#!^iJF%AeJ|@Sb(N7tJOGic=Wg^PlN2kI-pcnEo7^Lj7tBFhHwP3kA;;W zkb{FXVb2?w_W)6j7WZe;3lFWmN@VqQVMU&4I)>jFLklEbI7q!K9MT7rVT28nKNwmg zdqN++WJ-h>CYA8idDa_8#+U5EI#`8nC)Sp_IuYCVGjMo~lQyxNe;*(J-B4IOIfFb> zX&->EQ?JXy<4J#o(gY2Zh_}VMb8$4z4-`R@eQWxM3=u&wPIisEB>hbCslPw3HJgp| z?&VG6>b&+_MwAG7zv&*@1hv!@3{IST~~#U{Fl#0fL7H@&M5B2!`*I`25%Rwexl(Z)`dw8qog8;Heu!p5ijg zQP$1~-5?n=@Vg)UAde&uk^RZ+I?h8^^OY_04k71b3couAe=F(c_?j=(gDdd}BXwF% zpCX+9rF1s(lhU6bvr5H2q=eGQAxTe$pM;bd!{`%?x%BK!AHc;B0YPDZA>m4_-fVz* z>&6Bmu_@qqSdL1`84q{#0b(&@EM=+?1WYIsQ>F{)Up||+aR-it)S~e$wwzZf|J08y z7}#k-Sjhs41p?=f*Ir*!)*$UW~Xu0x;kq&x{cGb&e>(N+xU;pRpX-3 zZ8feyA#qV_)*BIfbf(nc-+%Xn5DK!X`w*qU`I(1BK!t(B5IChyoATMH=9lkVCt_sb^5pc zvSonC7uf2Rnx+!@3sP_XIY|xb560-;6!q3Mmom@;FMl=-bbgMOlpBvN11LA645+JF ze)ZOu4q|w$$;hTTEK0(^16nLm?yLLFzs_)gG$)nv+gD4!eRxP;M?v5BKN^F(O1bhT z{@!4#X0pLoujtz-8NZHt&3Zo@3@YWLqc^dQdaJ5^`EdO|zu1kId7fsya z?o~_AdVg51B=nSiR_@cPR|D?SHl4tF<5Mn zzlFS7^0N{a7n+#LqEyVZ5(tL3l7lzE^)R6ygMaSm6XfI~C6|7EN568iBTG>GwV!m> zcCvvfcAn|`&6u>$2d8Aj%Oa)Zw|8)Qy1bP9O>vKpa=qi(v|2|p0i2~v{NgIlJf-)X zgwsnPN3`dJYn4uP2h>?5z7WN{MfF3I631uInocNT`e*qgfgg`alqBeRR|4_C1f8k8 z+kfM?%0lq)K&sGbvt5$aRZ6XgFCS;OC|j%?lq;1=`LO&d;+yWp*YVZr8&{4iT-zb) zIz0X{rlq>{A(d7Q)1Muw8c5Kk^6C|Si>c&qv*Eb(I6OXdt5BaD;-fHPX?G`Y1VxvR zVPRQH8SzZ8d;aMS3zs+7B^_qwz`oF-H3v;(R~En7GnZo011^69t8aonK94=jYgUfB zRnxhAvXGVAR}^Pz22;=;lUAWd@;zzQ!ZI7@FlI6j#pM^*Kt}j;rryw)d?F8^WIH?o`8XpxFR{x|RvAW!(gB08U;U{xbs^5!S^aDvlEyspViRlFs^l7Vw38LGqn> z@=rUa?u~Xt<_UjKx$owXc+(W!8AYrcB7+K%>-u#Hzm=n(Qi;nb6G(9l=Wc=)d@nbz zSY*>sj#6fCx|9j`%mSLBi!dGt$AGTA?_ZaImBImnzr+bv^d*YYMHS7PC$WGOe~8{K zJdc1H^MgI16!){!r4&fJw46)6@zF`Di4Wj*ca9YKe#(Cx@FjW!*$&M6`|mW!0~}UT z{Zc0U8UrEIU6>I;>`zQO58)_o_Fr(4@n=Zd;uAmhmG2AAe(h9~6ZBs2Rs!@J0e=_Y zS9&#pczcBX4t8DD0$I=gm3a?#7BmDeY^b)@#Cjw`_ko}Hos>y+IwbLf@taR^I_!7Hy#o$%fW`IQOWw~4&-`&x`t>iFKWh%c>1 zdIQKbSi8WTnWOMz&V_8;`L-k8%s;X>JwLN93NcKe+MW8%068TuC(gGydL7%)=mm#n z6SRcDwhjrv0$}+_R9=bR13YCtM1gtPRahyN4j_MdXljG;gHdWi0%n4p06-X7-pO>~ ztM!rb3&tPE`3$L>eD$_&m5W*akx>cSPWLhp{zQ>A6^CL5_s*mTKt~b3fdAC{ zg*Pc<0BuHWzK102$itC_XVo2IINJyor>gQdN29B|Me#$Cw(e54+Zu2!q$n;L5|*7S zS95=dga{;sr3Wok<`7AsBS)R=gOlGb&*6UV0YXTxT;Cj&h2+4L#Fu;wl9$1;*Bi`W z-(;zY_v-@~pvhehGs|-)nuKo7(Mr}*W@pff^}P0yObgy+C`Euui&AbJ_S(6uTRs=R znV}5fl2m6Uf0NCzJ-Tfrp}U`HT>C80Lu-FqL~k27AxL8%#}Ap?NYs~Dw6X8dNgj#H z1ihtbfdW#{;Rta>Ea;y~zQBPiR+CQBCU>6KK$x|_D|msKkn@x`fSrMW)Rs8_p_E$K zcrk;;;I3}8Xz6j4Z&vQQJ0K_U%oZbMA$AWi%9~p*0l>coFHEGw=pUD+W+SOopSXXU zk3FA`Nk4OjUkf21J~bVCzY^0&3~YjO`NsH4w=F`Pl{)8OpGl!%-_-f2Q6YoMet9!J1Ro>Fw}!o+EFzK@Om z!^w+Wnen6?Yk>(^fYVK|upDFj9dUmN3qE%t1;w}N8ijeX926;DR()1QcE}L%BdPf3 zvSj)w4frxA)C)JY|=9&fu>RjT>3)h>n!Bb98-3TpCO5|Lqc3Yd7IK%94f0a zIuXS}T^~@)P7;6=7kU$=)wN${x8?*V6dW-Dr*IJG0O>Rq@wVBUacGYvVu*jvxiNyJ z+%x;dK;%RcS3BT+_HQZjQ*C=MFj%V(b4Tx-iv;NEvp`prQM(2t{&{ggnBa=E0oWlS zqozR9NXaWdxe?RZvxAS_=+Xz`!0iVyn$P450on3EJ2n;wTIicOdyoH{_s5+9K4Trm z8x}k#Xb!)ZM4V*52QNW$W+HzYpzsgb&{8Y~Y1Ly%^^a9DY>Gy^oqiBkBmi#Q(fUkI zqDJ$S6KPl%VI+eZuyo1MhoRbU8$+VjrQ}H32^X9ftp8v_ZaiGw3mlOPDt433YoL@u zSSVy$N+H$#4@lt~3&|%;?MF7J)-#a1LHbGb6b+0+#$iWrdJ~H^l~aGCJD;QnaVnJZ z5B!>*oz~l83h9hd4|6WBeaEsFI&zrd?4$XwDd++37)=SW)R(OT85{zK_dGpa^mZ_$ zv8Qs__k;+3pTPBtgCQVp;>A!Fy}`&_rguG-QeCRqb!FRJLUlRhwTs-3xLRB3P04V$ zgJBeKX-pV)vly$w`C@-$iy?0Zi{yWd%E7KjZhW2@Ieoz{jHy%uznTr0K{nO#<4Kk$ zztK9>&6=QDJa<`>ks$r2a|{Fm?z|m1KSd^urZ(Glx)I1jRRdpSp)+|pFUam8B2CuLaDdf8CM(9D{{!Qu zPI9_%3X%P!b3s9&i>SB9$8ys=s{_+Ig9hDbI+&M5{q%^i;jpmyt5e+P6K>-kZKOJf zE4}FmR}2+=L6?8OH1Jj^fjz0_i{paQMeG>^lFCf6M?6`Mb$wvZfF>E?f!cgFSZ3;M zL+OxoPQSn-2b^(_?q340?NlM3WFtrq$!B+h2Mn${ROREE1iFZ&pU=vYdP1n5@JuHnbuvu z64x}=r?ttZ^M*DNg)0O&vC=f;ij%Lj){eIl%2jK>20la5EN(xTgTV{nwy5y{EcOw< zz?p+xWfa%IFL_JMR#8R^TB5Or%A)l14zs8LR;BH`YmKGc8}Bn(0S?O0N!XM1B$S?( z;g+<+d6$1Qzu@phGlKG+%gzIznjD%vLhqCWNG{KfA*cM5=lCz@pvsx1OQkU0Wk1vg z4k$gxaNrR}ouFqDMaU%d*xIppj7TCCKdMd_yhBsjDT}fR_%J{_QWn=;WViQ$M7#*c^YP^Xo=o>L`*!_}Jj}mG*~zT2!BAZc_gz>#SLj5FQJTeUwT(jF!cC4l7XyhOMu=W5*<)e54!>$ z$c2AX&|;P&^CiN3&0NZ@x+)CCGoJ!jlpJ;RzCC%d5{C9Qfgr=@II(|X_vbIZMTx#; z<4P|MQG!6}osW_djwDlXsx40KlOPt5s*=iM5(+@}_ntlnaYmn(b#aOOYPP$BWi z`+y&J_6^K~yq&P3Wng~z;kqq=^ruMv4?lkdQ3yZ$K(Jcm&RNDF>gx3`;)DGdd8HkF z1>~K;au}9l2k&)a-`i6o_~`|XxF&pj3P|d4*j-t3qyG>rE<^r^sg7-BHgkqK(PGfC z46t2LgFhnmd`uL4IJOO79!rxH8Dy;g?PuDOe01q<@@Sc#`5rKF(PU&*!VyU_Q1E|! z!KhiWrG&Yl#Jy0HPSu4K>pMdv7u~|!BiG4hz6|HASe42wqGyAj&fi@MI=Nzfjt2eF z!60fBG%9e#dMO0UV$2+UHwMcddm&CJgIXY5B=0ANk2Kuyv~oiDA3E5ma4mN*aOq6D zb_EM_L63h@8+^F|@(77TrZ@O{(!+oL#`}Q8O6f57y%)#AZF7-a;}T{00k6tuV_psF1*)Q;eE_p9+OPBOSq2x;ZPMKd& z=^_e@TLU6_AfdqT92iK`6t_CvA-=Xe8X(e0^+0-X!cP=z1B=5d)JJVJf*5~O4^f}d z^vX1Ft&*BK+pZcjecM&aH!9`!lj7--1Wg$1t#>K} z@`l@M<M^-8NYu~tR(iTL9`D9Z+^*k#Zf3@s>y!jbsj z--*4O%kyg}sh!m7zg)Mvr;YPQr?FSWVw6;RS+SGL%T714=6@zGYSHhwefu}~88>{+ z%ai}vsCSk=;K_CUmxfzxoz{|rbHld2KRa)9+rPCtjfb1*Rj1odQ8e6!Zo64)wLe~V;-`oIOU?J~$D{6bQ{HoLovxf9xo~@Lw>=q_oGA#g zw_D}k?Az^D2*3KBbzhREc1dBTvAu7+vq|G%1|p9Vjxfp~-E0@;Dw!rgEg0MD3O7Um zEIBP!+uGRKoRQC8BCLPkwmQ~b<=NOTjR!OACEM!`tslJEc#%Danm{5yFv+^vTCc(u zo`8scTSgeqt4EmwT+&Pw(Ur%X8Iz10>IHR7NO=NXR-103J`$7|fg2kAHQV}#wB&8n zrEF#u$SYanZ8eaNP$l;WwWU6lN2p+BacB7yMy>mXa&#c{?CXEjEa#~cXV0%wB~4Bp zPYtYj8$A1x)pYG=Pd1s?uGRn!Z)6YcnN!l|v=3oo3w5 zAdDhia_f8@u33NW9a#H8B%!Nbh1Y3C;Ha_5aDe8Ctj^hleR*p?Q^G#DPV2P4sAN1M zkx`~A&N-zsg%c_`ag2cFyJCaZbcF?5A)U%8{b<22KQ8Pv>-6Z%fq7cGo%QcGnEkR6 zT23bGze2SBmK@{Ge^^fOM0!h+-o>J_sMK%L+oyifJA;4vRfSPJujG0Iy1o1JYPQaJ zJV_H)8_g{@L3(%`8R%k`ITr9sy9@#D-}lBvPLuD&o`(b6F{MyHs_#j~8=C*{)D$BtB@`(z0&KwfCpf zCp)_qC(5d;kcx52sLVZNgApty+DD4}tYn`>S47QOcN5n&+75jDx>2jzdyA`f{ImJ} zAZgA3;d<38x`lHC!6M(99~&wHvhx|@FhUOSofrZX5&!2|S0oh9$|I8^bW z?N*KuY(#WuqxQx`h&JzoBnRR~wI>EUbj{1dI@=F-#Lm7Y;jN8&BQeC4zBlp|he?HoH$O@?fKClbwL;RlPJ=wL!Is0jrIA zVu^p7b%Qpi3omWd_DP+_8EP3QcMs=~J$ ztyRrBuED5wgxq?PkPQx)D6byD?3TFo+#-p7JzXlDV~I31B6ux@4?XH#ORQ|EI~`i=XZbT7eB@MB2=q->9%$pin~ESjO5&)xf{df;+h%lLEoUIG5+%nYK%{Q z*`(4~X!nMdMtS-+tTLsaZ=Jg=^_i_*X`;t$gAQ2|JJ@7N;FRwe(4eaK+sc2AiF@f2 zBSxv8bo&9Lxb`N*Ia0UwPZ#Eh>&zuCkPTj-rFjx-FDB_+*&8%H$~nAFb<14C8#FP| zF}!xqF5(0IzWX#t?9d$B5Q@I$oL#%A>n99^TB?x7N$H?znpw92<|2J;#>2RnFoIx8 zyj{vOR6;!(%9*mJMc^J8=BfczmyO{AaDNrMDWyQIk%bpuJ5%3mx6XK%%0_*>j9O)* z%0C;%CP|YCqbCI*OTXKrPNZCq`XmucflQ~H@Uy3c0kjqo5YrxVzyx%#ji zok+f3)eA|DrNrF-joQBSIKENs(T?Mds*G_RuUF@?llTT>x3$dPb! z&K>gk$JeTnS3mj9^vIr=j@vK^FnT(#PF@$&y3G?c-6-ff>9e8iRqlCt*k7H*B~+XC z9>_7+LWSz(UxB*IpAqTfCitfx5bZSZDWuZ!SY&t0rrRYEvd@Q~T zR02y9@7hXSZq#4vakNGE-BQxCb$Tu}lUjVgrS%t}KT;E^p{$Qb?YebZi(||~$pl8U zNS3z6%9o6H5=UDiaA}p*B-P#}Gq=Mz*wO3BT2-c5QN6tdR8(!-Hasv4DBay5Eh*9= zlG5Fclr$neiqg`;NGsiqNJ$A&l7e)1N;iCafaiJc`+nZ_t@r=`wfW_eta1oiLc66sQ9uP z+8ADC8S9|K9I+QROXt*;5{&f4ta(Cn zWTL3{{jb&}T!oA^WI1S}vq`NIj}GNx<#L3o&VE>5SqnCHCE|8hLW_GHoMzWk8Diry z_>4O@o)=Atp7$$!+aFY$*)HoN{`u@fiv#oj&J;v^ooVzbr7YHSrZH-Q=K)4ac+!mGHB)K$9H9)fa9IIejJ39~#z0 zv>3&84l#o{+tj^e(!MbcL({aNQMNhl6i83MH)3RqJxa{Eb{7L4!kE_)88C~L=k7m3 znWu)CS#d;^sYa3KGs!5T9BiaS&BjM#!-bQ-4RO;zWAFN$EJ=$79n0f&r05WRrcIal zO_-r*Wk@Xzu5+P~<)M<`Qn;6!weqW2BwIce={v==dL7q6b z;?og3iHsLUfrZ8EhSfn|^?f%NdvKV}j{2Jdo!CbDPbXw82GhbQNx$lAG-y0?%b3_1 zxcGoIGfX?+&2g%}4W-*@&Dr>v-#tT=F`+Tt@?MGktY$_!VzUYV!+eN=G?=tQ#k0M@ zR-vihTV_b7i`LwVh0?LLvz^G`T%wZnCv<8B zaH4S1p=9p{=VwEK2hZi~#VAjiT^}wfod=!QHA5^GSz>X(p{ZQkX+dM zD2e7c3{vAg7i+*qRueoKKpyFD>5}m-Vr8J*m$ZIePSoY#WBU2b+&ND!IEC9X>6fWO zLM;5^so=>G=Aqa18F-5lZN8x}J%yJm {9Iv}<5g>2AeUjlu)tlrmzZSC#Bp4_V| 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 diff --git a/cd3_automation_toolkit/example/CD3-Firewall-template.xlsx b/cd3_automation_toolkit/example/CD3-Firewall-template.xlsx index 8f85ae5f2c50498e4d740deb1ae4adc44a49ed28..7ae69ab13ff2f457b907eafa4a7cc2cff6a0ccb6 100644 GIT binary patch literal 115806 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

izmm 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%0A?GVRrRsnRZ7M%zquY$NlC=P?psfe!JR#c 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%0DN9>dN=Eyfcu+CqwO?b#`&gQDFp z`PcbyuAhy~5r~W`#l)L&^Xql7xK&a<+u11+bZMo7jO{etq|~dEB6F^EAz2aL2QQ9x z9}>M+V#^QAW358V%WOA7>@IQ;XyI9Uk}iutbdqbq>~PtUX+R0Bjy6Uw>x@2Tt=1ut z+&&qWqB9Qf`^}Mga*OY&5RJlHE`OdYj;8Vv>A`srPNA~($lGJ^Zra~164RZdVGFEs z{eQ05+dQ#Gz#`_f zA=^@%(2oI0Rbx(sisH@BgcPjn?Z41P3=Fvq(PKm`(vq|E- zyM|+~CjUlbG!Q2vyW3X8(aV&jvYiLl*1+S{vX=_E`b6z@?(S`&OC1BtCH2}e zG-VkTogJ%G7fbc5mLL>3I;1c4`Bz})g1@VczhOVS2>hQ#u-gIIL$AU=UyQ#K>ncxM z;xPj}N`HV;*JNlqO1<(`&4DnfP_k2Cdmj}uN!SuPE?S+vvdgU%3-FD|X_{o=Tjpfx zPMVvn$1;GOvZiE75uuk9Nc^~Dn>aj=#vjQQkJE3^=^q(F=2&>DhHDVjST<9p=^ZbYV=c+-HxF0@ zP4hDo!*XAZA{m|gBUxsqs>c5?WY3g%KPjS9v6&|`W)}0bbbq+4M(~?dad^rU0(6%t z*DB@Kx(iD4Nip9o+DvE?<43 z%r7H8kVVw8#r)o6#`6U+S%RUU&yPCsG2-0ypqLlYAn}fST1g<^p^MV&r}qJu@AsYt z0ipV$osd=!9Fs3!c|ZnTkrz7m(!E~Zq&57KX1jr^zae8q^7@=rxlN@7o((A(X~_AC zcajXoFS~-LDRt>Pb_qJV1T>8+0ZZ#A(KMK#ev}Yrxp-L{*a>XPdR&vS6>5Vo8LZMT zlFtLi9-;LrS2Q4{&s1GV&BS6wN&(tr;5f+Ha=T1Fms~7w7QQWE*L<(=Jxt|VYirCB zyc>sE=f$? z4li8Fny7X^bW9KzIgY50^H{al=uK_!*09HHPfbH!+O&9LlzE{|a6?|2v_!5tH?Hy_ zuolh$Rw+6-5o2V9isAs<6dl}%=yF0|M*w!G1YSFUf)7rs%Fn;OSkxL>qg~37!~AiX zDFM1$c!GqY2S=`jg8-X11S!O@1Bhz?{DROy`+XD+{N*2)y0Dd{y`iPO_G=ewLp#lz z?Rj~r{{(of)no_-2ABsA8E{ItKQ4F}2#DXb;r5MkUvN3VVj>JI=n6hd56%wt$HfJ9 ztppR0-?C0twq|-(R%SQ%eh?>tjxV_u?86oWZX&o5e_XKOB{eY4p9uFKg5xc-cLNCo z#32miZJLui>0f}qgzerM8rs`2-u}5A@b^(tKl0#|f*T*L@;g7n9m+KGgDAJj6z`*? zbqA`4fP00K^FB%o?}I3}iL>sbfc&8~mB9=pHSIo%m*|5i><{(oniJKC4p^asSoigU zr1l^R$3rOHsXqXvm{y;Ci?6czm-3NzC~ zFySFgjA~#-Qc^?RgCYL#Fw8B(y|3RN-R%_OLJ$yFIQL=7)*gnrrFr*Z`i>c2u$dh{t6;;U-bStdO z-uuw^XMuOnd{zGl`fg5mANu}0=ngum`X52x&5G_r-=8boK@ZeC0R87U`PX|G7R+33 S<{4xVkzkjw`g$-Sg7`0r!Xs<| delta 75338 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 r|F5E>P5{2 0 ? each.value.network_firewall_policy_id : merge(module.policies.*...)[each.value.network_firewall_policy_id]["policy_tf_id"] + source_address = each.value.condition[0].source_address != null ? each.value.condition[0].source_address : [] + destination_address = each.value.condition[0].destination_address != null ? each.value.condition[0].destination_address : [] + after_rule = each.value.after_rule + before_rule = each.value.before_rule + protocol = each.value.protocol +} + ############################# # Module Block - Network Firewall Logging @@ -223,4 +237,4 @@ module "fw-logs" { output "vcn_logs_id" { value = [ for k,v in merge(module.vcn-logs.*...) : v.log_tf_id] } -*/ +*/ \ No newline at end of file diff --git a/cd3_automation_toolkit/user-scripts/terraform/provider.tf b/cd3_automation_toolkit/user-scripts/terraform/provider.tf index 99c8b0959..acc0e95fb 100644 --- a/cd3_automation_toolkit/user-scripts/terraform/provider.tf +++ b/cd3_automation_toolkit/user-scripts/terraform/provider.tf @@ -19,7 +19,7 @@ terraform { required_providers { oci = { source = "oracle/oci" - version = "6.15.0" + version = "6.30.0" } } } diff --git a/cd3_automation_toolkit/user-scripts/terraform/variables_example.tf b/cd3_automation_toolkit/user-scripts/terraform/variables_example.tf index 4c754b842..a43208680 100644 --- a/cd3_automation_toolkit/user-scripts/terraform/variables_example.tf +++ b/cd3_automation_toolkit/user-scripts/terraform/variables_example.tf @@ -986,6 +986,7 @@ variable "mysql_db_system" { type = map(object({ compartment_id = string network_compartment_id = string + configuration_compartment_id = string mysql_db_system_display_name = string configuration_id = string mysql_shape_name = string @@ -2228,6 +2229,21 @@ variable "decryption_rules" { default = {} } +variable "tunnelinspect_rules" { + type = map(object({ + action = string + rule_name = string + network_firewall_policy_id = string + condition = optional(list(object({ + destination_address = optional(list(string)) + source_address = optional(list(string)) + }))) + protocol = optional(string) + after_rule = optional(string) + before_rule = optional(string) + })) + default = {} +} ######################### ####### Firewall Logs ######## ######################### diff --git a/jenkins_install/scriptler/scripts/AdditionalFilters.groovy b/jenkins_install/scriptler/scripts/AdditionalFilters.groovy index 83a0d6789..dde616e17 100644 --- a/jenkins_install/scriptler/scripts/AdditionalFilters.groovy +++ b/jenkins_install/scriptler/scripts/AdditionalFilters.groovy @@ -30,11 +30,19 @@ compartment_filter_option = """ """ +tag_filter_option = """ + + +

+ (Leave empty to export all resources)

+ + + """ List default_params_set = [] for (item in MainOptions.split(",")) { if (item != "Export Identity") { - html_to_be_rendered = "${html_to_be_rendered} ${region_filter_option} ${compartment_filter_option}" - default_params_set = ["region","compartment"] + html_to_be_rendered = "${html_to_be_rendered} ${region_filter_option} ${compartment_filter_option} ${tag_filter_option}" + default_params_set = ["region","compartment","tag"] break; } } @@ -240,6 +248,12 @@ for (item in SubChildOptions.split(",")) { + + + + + + """ export_network_rules = "set" diff --git a/jenkins_install/scriptler/scripts/SubChildOptions.groovy b/jenkins_install/scriptler/scripts/SubChildOptions.groovy index 283ff7a35..81efe5005 100644 --- a/jenkins_install/scriptler/scripts/SubChildOptions.groovy +++ b/jenkins_install/scriptler/scripts/SubChildOptions.groovy @@ -1,6 +1,6 @@ List sec_rules = ["SECURITY RULES:disabled","Export Security Rules (From OCI into SecRulesinOCI sheet)", "Add/Modify/Delete Security Rules (Reads SecRulesinOCI sheet)"] List route_rules = ["ROUTE RULES:disabled","Export Route Rules (From OCI into RouteRulesinOCI sheet)", "Add/Modify/Delete Route Rules (Reads RouteRulesinOCI sheet)"] -List firewall_policy = ["FIREWALL POLICY:disabled","Add/Modify/Delete Policy", "Add/Modify/Delete Service","Add/Modify/Delete Service-list","Add/Modify/Delete Application","Add/Modify/Delete Application-list","Add/Modify/Delete Address-list","Add/Modify/Delete Url-list","Add/Modify/Delete Security rules","Add/Modify/Delete Mapped Secrets","Add/Modify/Delete Decryption Rules","Add/Modify/Delete Decryption Profile"] +List firewall_policy = ["FIREWALL POLICY:disabled","Add/Modify/Delete Policy", "Add/Modify/Delete Service","Add/Modify/Delete Service-list","Add/Modify/Delete Application","Add/Modify/Delete Application-list","Add/Modify/Delete Address-list","Add/Modify/Delete Url-list","Add/Modify/Delete Security rules","Add/Modify/Delete Mapped Secrets","Add/Modify/Delete Decryption Rules","Add/Modify/Delete Decryption Profile","Add/Modify/Delete Tunnel Inspection Rules"] List drg_route_rules = ["DRG ROUTE RULES:disabled","Export DRG Route Rules (From OCI into DRGRouteRulesinOCI sheet)", "Add/Modify/Delete DRG Route Rules (Reads DRGRouteRulesinOCI sheet)"] List nsg = ["NSGs:disabled","Export NSGs (From OCI into NSGs sheet)", "Add/Modify/Delete NSGs (Reads NSGs sheet)"] List cis = ["CIS:disabled","Download latest compliance checking script", "Execute compliance checking script"] diff --git a/jenkins_install/setUpOCI.groovy b/jenkins_install/setUpOCI.groovy index 8a64a1eb5..d1c69def5 100644 --- a/jenkins_install/setUpOCI.groovy +++ b/jenkins_install/setUpOCI.groovy @@ -1,6 +1,26 @@ def buildstatus = "" def git_status = 0 def prefix = "${env.JOB_NAME}".split('/')[0] +def exportNetworkRules(stage_name) { + return { + stage("${stage_name}") { + catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') { + sh """ + cd /cd3user/oci_tools/cd3_automation_toolkit + python setUpOCI.py --devops True --main_options "Network" --sub_options "Security Rules,Route Rules,DRG Route Rules" --sub_child_options "Export Security Rules (From OCI into SecRulesinOCI sheet),Add/Modify/Delete Security Rules (Reads SecRulesinOCI sheet),Export Route Rules (From OCI into RouteRulesinOCI sheet),Add/Modify/Delete Route Rules (Reads RouteRulesinOCI sheet),Export DRG Route Rules (From OCI into DRGRouteRulesinOCI sheet),Add/Modify/Delete DRG Route Rules (Reads DRGRouteRulesinOCI sheet)" --add_filter "comp_filter=,[],@," ${env.prop_file} + """ + file_path = sh(script: "grep '^cd3file' ${env.prop_file}| cut -d'=' -f2", returnStdout: true).trim() + file_name = sh(script:"echo '${file_path}'| rev|cut -d '/' -f1 | rev", returnStdout: true).trim() + sh """ + set +x + cp '${file_path}' '${WORKSPACE}/${file_name}' + """ + archiveArtifacts "${file_name}" + + } + } + } +} def generateStage(job) { return { stage("Stage: ${job}") { @@ -13,8 +33,22 @@ def generateStage(job) { region = values[0] job_name = "./terraform_files/${region}/apply".replace("//","/") } - build job: "${job_name}" - } + //build job: "${job_name}" + def job_exec_details = build job: "${job_name}", propagate: false, wait: true // Here wait: true means current running job will wait for build_job to finish. + + //println(job_exec_details.getResult()) + //println(job_exec_details.getFullProjectName()) + //println((job_exec_details.getFullProjectName()).split("/")[3]) + if (!["ABORTED","FAILURE"].contains(job_exec_details.getResult()) && ["apply","network"].contains((job_exec_details.getFullProjectName()).split("/")[3])) { + println("first condition passed") + if ( SubOptions.contains('Create Network') || SubOptions.contains('Modify Network') ) { + println("Calling export rules") + def stage_name = "Export Network Rules" + parallel([stage_name : exportNetworkRules(stage_name)]) + } + + } + } } } properties([ @@ -83,7 +117,7 @@ properties([ parameters: [ [name:'MainOptions',value:'${MainOptions}'], [name:'SubOptions', value: '${SubOptions}'], - [name:'SubChildOptions', value: '${SubChildOptions}'], + [name:'SubChildOptions', value: '${SubChildOptions}'], [name:'Workflow', value: '${Workflow}'], [name:'Prefix', value: "${prefix}"] ] From 7c0567743cc9b02f2ae52e36c85793974d42aa08 Mon Sep 17 00:00:00 2001 From: Suruchi Date: Wed, 12 Mar 2025 23:45:47 +0530 Subject: [PATCH 05/15] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b0ade75e1..3363a722d 100755 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ Additionally, the toolkit also supports seamless resource management using OCI D 🚀 Click the below button to quickly launch CD3 toolkit container in Oracle Cloud and start managing your Infra as Code.
-[![Deploy_To_OCI](https://oci-resourcemanager-plugin.plugins.oci.oraclecloud.com/latest/deploy-to-oracle-cloud.svg)](https://cloud.oracle.com/resourcemanager/stacks/create?zipUrl=https://github.com/oracle-devrel/cd3-automation-toolkit/archive/refs/heads/main.zip) +[![Deploy_To_OCI](https://oci-resourcemanager-plugin.plugins.oci.oraclecloud.com/latest/deploy-to-oracle-cloud.svg)](https://cloud.oracle.com/resourcemanager/stacks/create?zipUrl=https://github.com/oracle-devrel/cd3-automation-toolkit/archive/refs/heads/develop.zip)
From f70ede61b422663482c0418352c06bf322553de1 Mon Sep 17 00:00:00 2001 From: Suruchi Date: Wed, 12 Mar 2025 23:46:26 +0530 Subject: [PATCH 06/15] Update installToolkit.sh --- OCIWorkVMStack/scripts/installToolkit.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/OCIWorkVMStack/scripts/installToolkit.sh b/OCIWorkVMStack/scripts/installToolkit.sh index 8a9e3889d..74911ec4e 100644 --- a/OCIWorkVMStack/scripts/installToolkit.sh +++ b/OCIWorkVMStack/scripts/installToolkit.sh @@ -66,7 +66,7 @@ fi sudo podman --version >> $logfile 2>&1 echo "***Download Toolkit***" >> $logfile 2>&1 -sudo git clone https://github.com/oracle-devrel/cd3-automation-toolkit.git $toolkit_dir >> $logfile 2>&1 +sudo git clone https://github.com/oracle-devrel/cd3-automation-toolkit.git -b develop $toolkit_dir >> $logfile 2>&1 stop_exec curl -H "Authorization: Bearer Oracle" -L http://169.254.169.254/opc/v2/instance/ -o /tmp/metadata.json From 53d928087d390fcf254b7f8c46f892f6f3bd65f5 Mon Sep 17 00:00:00 2001 From: xs2suruchi Date: Mon, 17 Mar 2025 13:31:40 +0530 Subject: [PATCH 07/15] Automation Toolkit Release v2025.1.0 --- cd3_automation_toolkit/Database/__init__.py | 4 +- .../create_terraform_mysql_configuration.py | 171 ++++++++ .../Database/create_terraform_mysql_db.py | 303 +++++++++++++ .../export_exa_vmclusters_nonGreenField.py | 6 +- ...xport_mysql_configuration_nonGreenField.py | 289 +++++++++++++ .../Database/export_mysql_db_nonGreenField.py | 287 +++++++++++++ .../templates/mysql-configuration-template | 69 +++ .../Database/templates/mysql-template | 82 ++++ cd3_automation_toolkit/Excel_Columns | 4 +- .../export_network_nonGreenField.py | 291 +++++++------ .../fwpolicy_create_tunnelinspection.py | 178 ++++++++ .../templates/policy-tunnelinspect-template | 37 ++ cd3_automation_toolkit/setUpOCI.py | 48 +-- .../.outdir_structure_file.properties | 36 ++ .../database/mysql-configuration/data.tf | 14 + .../database/mysql-configuration/main.tf | 101 +++++ .../oracle_provider_req.tf | 10 + .../database/mysql-configuration/outputs.tf | 17 + .../database/mysql-configuration/variables.tf | 405 ++++++++++++++++++ .../modules/database/mysql-dbsystem/data.tf | 14 + .../modules/database/mysql-dbsystem/main.tf | 64 +++ .../mysql-dbsystem/oracle_provider_req.tf | 10 + .../database/mysql-dbsystem/outputs.tf | 17 + .../database/mysql-dbsystem/variables.tf | 178 ++++++++ .../security/firewall/tunnel-inspect/data.tf | 11 + .../security/firewall/tunnel-inspect/main.tf | 20 + .../tunnel-inspect/oracle_provider_req.tf | 10 + .../firewall/tunnel-inspect/output.tf | 6 + .../firewall/tunnel-inspect/variable.tf | 145 +++++++ .../user-scripts/terraform/mysql-dbsystem.tf | 169 ++++++++ .../scriptler/scripts/SubOptions.groovy | 4 +- 31 files changed, 2846 insertions(+), 154 deletions(-) create mode 100644 cd3_automation_toolkit/Database/create_terraform_mysql_configuration.py create mode 100644 cd3_automation_toolkit/Database/create_terraform_mysql_db.py create mode 100644 cd3_automation_toolkit/Database/export_mysql_configuration_nonGreenField.py create mode 100644 cd3_automation_toolkit/Database/export_mysql_db_nonGreenField.py create mode 100644 cd3_automation_toolkit/Database/templates/mysql-configuration-template create mode 100644 cd3_automation_toolkit/Database/templates/mysql-template create mode 100644 cd3_automation_toolkit/Security/Firewall/fwpolicy_create_tunnelinspection.py create mode 100644 cd3_automation_toolkit/Security/Firewall/templates/policy-tunnelinspect-template create mode 100644 cd3_automation_toolkit/user-scripts/.outdir_structure_file.properties create mode 100755 cd3_automation_toolkit/user-scripts/terraform/modules/database/mysql-configuration/data.tf create mode 100755 cd3_automation_toolkit/user-scripts/terraform/modules/database/mysql-configuration/main.tf create mode 100644 cd3_automation_toolkit/user-scripts/terraform/modules/database/mysql-configuration/oracle_provider_req.tf create mode 100755 cd3_automation_toolkit/user-scripts/terraform/modules/database/mysql-configuration/outputs.tf create mode 100755 cd3_automation_toolkit/user-scripts/terraform/modules/database/mysql-configuration/variables.tf create mode 100755 cd3_automation_toolkit/user-scripts/terraform/modules/database/mysql-dbsystem/data.tf create mode 100755 cd3_automation_toolkit/user-scripts/terraform/modules/database/mysql-dbsystem/main.tf create mode 100644 cd3_automation_toolkit/user-scripts/terraform/modules/database/mysql-dbsystem/oracle_provider_req.tf create mode 100755 cd3_automation_toolkit/user-scripts/terraform/modules/database/mysql-dbsystem/outputs.tf create mode 100755 cd3_automation_toolkit/user-scripts/terraform/modules/database/mysql-dbsystem/variables.tf create mode 100644 cd3_automation_toolkit/user-scripts/terraform/modules/security/firewall/tunnel-inspect/data.tf create mode 100644 cd3_automation_toolkit/user-scripts/terraform/modules/security/firewall/tunnel-inspect/main.tf create mode 100644 cd3_automation_toolkit/user-scripts/terraform/modules/security/firewall/tunnel-inspect/oracle_provider_req.tf create mode 100644 cd3_automation_toolkit/user-scripts/terraform/modules/security/firewall/tunnel-inspect/output.tf create mode 100644 cd3_automation_toolkit/user-scripts/terraform/modules/security/firewall/tunnel-inspect/variable.tf create mode 100644 cd3_automation_toolkit/user-scripts/terraform/mysql-dbsystem.tf diff --git a/cd3_automation_toolkit/Database/__init__.py b/cd3_automation_toolkit/Database/__init__.py index 18f5cc277..1f7855dc6 100644 --- a/cd3_automation_toolkit/Database/__init__.py +++ b/cd3_automation_toolkit/Database/__init__.py @@ -8,7 +8,7 @@ from .export_exa_vmclusters_nonGreenField import export_exa_vmclusters from .export_exa_infra_nonGreenField import export_exa_infra from .export_adb_nonGreenField import export_adbs -from .create_terraform_mysql import create_terraform_mysql +from .create_terraform_mysql_db import create_terraform_mysql_db from .create_terraform_mysql_configuration import create_terraform_mysql_configuration -from .export_mysql_nonGreenField import export_mysql, export_mysqls +from .export_mysql_db_nonGreenField import export_mysql_db from .export_mysql_configuration_nonGreenField import export_mysql_configuration, export_mysql_configurations diff --git a/cd3_automation_toolkit/Database/create_terraform_mysql_configuration.py b/cd3_automation_toolkit/Database/create_terraform_mysql_configuration.py new file mode 100644 index 000000000..6489c9cef --- /dev/null +++ b/cd3_automation_toolkit/Database/create_terraform_mysql_configuration.py @@ -0,0 +1,171 @@ +#!/usr/bin/python3 +# Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved. +# +# This script will produce a Terraform file that will be used to set up OCI Database +# MySQL Configuration +# +# Author: Generated by Cascade +# Oracle Consulting +# + +import os +import re +from jinja2 import Environment, FileSystemLoader +from oci.config import DEFAULT_LOCATION +from pathlib import Path +from commonTools import * + +def create_terraform_mysql_configuration(inputfile, outdir, service_dir, prefix, ct): + filename = inputfile + sheetName = "MySQL-Configurations" + auto_tfvars_filename = prefix + '_' + sheetName.lower() + '.auto.tfvars' + + # Initialize tracking variables + prev_values = { + 'region': '', + 'compartment_name': '', + 'display_name': '', + 'description': '', + 'shape_name': '' + } + + tfStr = {} + mysql_config_vars = {} + + # Load the template file + file_loader = FileSystemLoader(f'{Path(__file__).parent}/templates') + env = Environment(loader=file_loader, keep_trailing_newline=True, trim_blocks=True, lstrip_blocks=True) + template = env.get_template('mysql-configuration-template') + + # Add custom functions to template environment + def make_config_keys(config): + return lambda: config.keys() + def make_config_value(config): + return lambda key: config.get(key, '') + env.globals['config_keys'] = None + env.globals['config_value'] = None + + # Read cd3 using pandas dataframe + df, col_headers = commonTools.read_cd3(filename, sheetName) + df = df.dropna(how='all') + df = df.reset_index(drop=True) + + # List of column headers + dfcolumns = df.columns.values.tolist() + + # Initialize empty TF string for each region + for reg in ct.all_regions: + tfStr[reg] = '' + srcdir = outdir + "/" + reg + "/" + service_dir + "/" + resource = sheetName.lower() + commonTools.backup_file(srcdir, resource, auto_tfvars_filename) + mysql_config_vars[reg] = {} + + # Process each row + for i in df.index: + # Get values from row + region = str(df.loc[i, 'Region']).strip() + compartment_name = str(df.loc[i, 'Compartment Name']).strip() + display_name = str(df.loc[i, 'Display Name']).strip() + description = str(df.loc[i, 'Description']).strip() + shape_name = str(df.loc[i, 'Shape Name']).strip() + + # Handle empty values using previous values + if region.lower() == 'nan' or region == '': + region = prev_values['region'] + if compartment_name.lower() == 'nan' or compartment_name == '': + compartment_name = prev_values['compartment_name'] + if display_name.lower() == 'nan' or display_name == '': + display_name = prev_values['display_name'] + if description.lower() == 'nan' or description == '': + description = prev_values['description'] + if shape_name.lower() == 'nan' or shape_name == '': + shape_name = prev_values['shape_name'] + + # Update previous values + prev_values.update({ + 'region': region, + 'compartment_name': compartment_name, + 'display_name': display_name, + 'description': description, + 'shape_name': shape_name + }) + + # Skip if essential values are missing + if region.lower() == 'nan' or display_name.lower() == 'nan': + continue + + # Initialize region if needed + region = region.strip().lower() + if region not in ct.all_regions: + print("\nERROR!!! Invalid Region; It should be one of the regions tenancy is subscribed to..Exiting!") + exit(1) + + # Check for variable row + user_var_name = str(df.loc[i, 'users_variable_name']).strip() + user_var_value = str(df.loc[i, 'users_variable_value']).strip() + + # Initialize config if needed + config_tf_name = commonTools.check_tf_variable(display_name) + if config_tf_name not in mysql_config_vars[region]: + mysql_config_vars[region][config_tf_name] = { + 'config_display_tf_name': config_tf_name, + 'compartment_tf_name': commonTools.check_tf_variable(compartment_name), + 'display_name': display_name, + 'description': description, + 'shape_name': shape_name + } + + # Only process variable if both name and value are present and not empty + if (user_var_name.lower() != 'nan' and user_var_name != '' and + user_var_value.lower() != 'nan' and user_var_value != ''): + # Add variable with mysql_configuration_ prefix + var_name = f"mysql_configuration_variables_{user_var_name}" + # Handle boolean values + if user_var_value.lower() in ['true', 'false']: + mysql_config_vars[region][config_tf_name][var_name] = user_var_value.capitalize() + else: + mysql_config_vars[region][config_tf_name][var_name] = user_var_value + + # Generate terraform configuration for each region + for region in mysql_config_vars: + if not mysql_config_vars[region]: + continue + + # Start with count = 0 to generate opening + env.globals['count'] = 0 + tfStr[region] = template.render() + + configs = list(mysql_config_vars[region].items()) + for i, (config_name, config) in enumerate(configs): + # Update template functions for this config + env.globals['config_keys'] = make_config_keys(config) + env.globals['config_value'] = make_config_value(config) + config['loop'] = {'last': i == len(configs) - 1} + env.globals['count'] = 1 + + # Render configuration + rendered_config = template.render(**config) + tfStr[region] += rendered_config + + # Add closing brace + env.globals['count'] = 2 + tfStr[region] += template.render() + + # Write files + for region in tfStr: + if tfStr[region] != '': + srcdir = outdir + "/" + region + "/" + service_dir + "/" + os.makedirs(srcdir, exist_ok=True) + + outfile = srcdir + "/" + auto_tfvars_filename + # Clean up the output + tfStr[region] = tfStr[region].strip() + # Fix any potential formatting issues + tfStr[region] = re.sub(r'\s+mysql_configuration_variables_', '\n mysql_configuration_variables_', tfStr[region]) + tfStr[region] = re.sub(r'}\s*,\s*', '},\n', tfStr[region]) + tfStr[region] = re.sub(r'\n\s*\n\s*\n', '\n\n', tfStr[region]) + + with open(outfile, 'w') as f: + f.write(tfStr[region]) + print(f"Created MySQL configuration for region {region} in {outfile}") \ No newline at end of file diff --git a/cd3_automation_toolkit/Database/create_terraform_mysql_db.py b/cd3_automation_toolkit/Database/create_terraform_mysql_db.py new file mode 100644 index 000000000..c2b8ca072 --- /dev/null +++ b/cd3_automation_toolkit/Database/create_terraform_mysql_db.py @@ -0,0 +1,303 @@ +#!/usr/bin/python3 +# Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved. +# +# This script will produce a Terraform file that will be used to set up OCI Database +# MySQL Database System +# +# Author: Mukund Murali +# Oracle Consulting +# + +import os +import sys +from jinja2 import Environment, FileSystemLoader +from oci.config import DEFAULT_LOCATION +from pathlib import Path +from commonTools import * + +def create_terraform_mysql_db(inputfile, outdir, service_dir, prefix, ct): + ADS = ["AD1", "AD2", "AD3"] + filename = inputfile + sheetName = "MySQL-DBSystems" + auto_tfvars_filename = '_' + sheetName.lower() + '.auto.tfvars' + + outfile = {} + oname = {} + tfStr = {} + + # Load the template file + file_loader = FileSystemLoader(f'{Path(__file__).parent}/templates') + env = Environment(loader=file_loader, keep_trailing_newline=True, trim_blocks=True, lstrip_blocks=True) + template = env.get_template('mysql-template') + + # Read cd3 using pandas dataframe + df, col_headers = commonTools.read_cd3(filename, sheetName) + + # Remove empty rows + df = df.dropna(how='all') + df = df.reset_index(drop=True) + + # List of the column headers + dfcolumns = df.columns.values.tolist() + #print("\nAvailable columns in Excel:", dfcolumns) + + # Initialize empty TF string for each region + for reg in ct.all_regions: + tfStr[reg] = '' + srcdir = outdir + "/" + reg + "/" + service_dir + "/" + resource = sheetName.lower() + commonTools.backup_file(srcdir, resource, auto_tfvars_filename) + + # Iterate over rows + for i in df.index: + region = str(df.loc[i, 'Region']).strip().lower() + + # Skip if region is not in regions + if region not in [x.lower() for x in ct.all_regions]: + print(f"\nERROR!!! Invalid Region {str(df.loc[i, 'Region']).strip()} in MySQL DB System sheet. Skipping row!", file=sys.stderr) + continue + + # Get the actual region name with correct case from ct.all_regions + region = next(x for x in ct.all_regions if x.lower() == region) + + # Print row data for debugging + #print(f"\nProcessing row {i}:") + #for col in dfcolumns: + #print(f"{col}: {str(df.loc[i, col]).strip()}") + + # Initialize the template dictionary + tempdict = { + 'display_tf_name': commonTools.check_tf_variable(str(df.loc[i, 'Display Name']).strip()), + 'compartment_name': str(df.loc[i, 'Compartment Name']).strip(), + 'display_name': str(df.loc[i, 'Display Name']).strip(), + 'description': str(df.loc[i, 'Description']).strip(), + 'hostname_label': str(df.loc[i, 'Hostname Label']).strip(), + 'is_highly_available': str(df.loc[i, 'HA']).strip().lower() == 'true', + 'shape': str(df.loc[i, 'Shape']).strip() or 'MySQL.VM.Standard.E3.1.8GB', + 'admin_username': str(df.loc[i, 'Username']).strip(), + 'admin_password': str(df.loc[i, 'Password']).strip(), + 'ip_address': str(df.loc[i, 'IP Address']).strip(), + 'port': int(str(df.loc[i, 'Port']).strip() or '3306'), + 'port_x': int(str(df.loc[i, 'Port_x']).strip() or '33060'), + 'data_storage_size_in_gb': int(str(df.loc[i, 'Data Storage (in Gbs)']).strip() or '50'), + 'backup_policy_is_enabled': str(df.loc[i, 'Backup policy is enabled']).strip().lower() == 'true', + 'backup_policy_window_start_time': str(df.loc[i, 'Backup policy window start time']).strip() or '06:26', + 'backup_policy_retention_in_days': int(str(df.loc[i, 'Backup policy Retention in days']).strip() or '7'), + 'backup_policy_pitr_policy_is_enabled': str(df.loc[i, 'Backup policy pitr policy is enabled']).strip().lower() == 'true', + 'deletion_policy_is_delete_protected': str(df.loc[i, 'Deletion policy is deleted protected']).strip().lower() == 'true', + 'deletion_policy_final_backup': str(df.loc[i, 'Deletion policy final backup']).strip() or 'RETAIN', + 'deletion_policy_automatic_backup_retention': str(df.loc[i, 'Deletion policy automatic backup retention']).strip() or 'RETAIN', + 'crash_recovery': str(df.loc[i, 'Crash Recovery is Enabled']).strip() or 'ENABLED', + 'database_management': str(df.loc[i, 'Database Management is Enabled']).strip() or 'ENABLED', + 'source': str(df.loc[i, 'Source Type']).strip() or 'NONE', + 'configuration_id': '', + 'configurations_compartment_id': '', + 'fault_domain': str(df.loc[i, 'Fault Domain']).strip() or 'FAULT-DOMAIN-1', + } + + # Process configuration ID to get compartment@name format + config_id = str(df.loc[i, 'Configuration id']).strip() + if config_id and config_id.lower() != 'nan': + if '@' in config_id: + # Split into compartment and name + config_parts = config_id.split('@') + if len(config_parts) == 2: + config_compartment_name = config_parts[0].strip() + config_name = config_parts[1].strip() + + # Set both the configuration_id and configuration_compartment_id + tempdict['configuration_compartment_id'] = config_compartment_name + tempdict['configuration_id'] = config_name + else: + print(f"\nWARNING: Invalid configuration_id format: {config_id}. Expected format: compartment@name", file=sys.stderr) + tempdict['configuration_id'] = config_id + tempdict['configuration_compartment_id'] = tempdict['compartment_name'] # Use MySQL compartment as default + else: + # If it's not in compartment@name format, use it directly (assuming it's an OCID) + tempdict['configuration_id'] = config_id + tempdict['configuration_compartment_id'] = tempdict['compartment_name'] # Use MySQL compartment as default + else: + tempdict['configuration_id'] = '' + tempdict['configuration_compartment_id'] = tempdict['compartment_name'] # Use MySQL compartment as default + + # Process Availability Domain + ad = str(df.loc[i, 'Availability Domain(AD1|AD2|AD3)']).strip() + if ad and ad.lower() != 'nan': + # Convert AD name to index (AD1->0, AD2->1, AD3->2) + ad_num = ad.replace('AD', '') + try: + ad_index = str(int(ad_num) - 1) # Convert to 0-based index + tempdict['availability_domain'] = ad_index + except ValueError: + print(f"\nWARNING: Invalid AD format {ad}, using default", file=sys.stderr) + tempdict['availability_domain'] = "0" + else: + tempdict['availability_domain'] = "0" + + # Process Subnet Name to get network compartment, vcn and subnet + subnet_name = str(df.loc[i, 'Network Details']).strip() + if subnet_name and subnet_name.lower() != 'nan': + subnet_parts = subnet_name.split('@') + if len(subnet_parts) == 2: + network_compartment = subnet_parts[0].strip() + vcn_subnet = subnet_parts[1].strip() + vcn_subnet_parts = vcn_subnet.split('::') + if len(vcn_subnet_parts) == 2: + # Ensure network_compartment is never empty + if network_compartment: + tempdict['network_compartment_id'] = network_compartment + else: + tempdict['network_compartment_id'] = tempdict['compartment_name'] + + tempdict['vcn_names'] = vcn_subnet_parts[0].strip() + tempdict['subnet_id'] = vcn_subnet_parts[1].strip() + else: + print(f"\nERROR!!! Invalid VCN/Subnet format in {subnet_name}. Expected format: network_compartment@vcn_subnet", file=sys.stderr) + continue + else: + print(f"\nERROR!!! Invalid Subnet Name format {subnet_name}. Expected format: network_compartment@vcn_subnet", file=sys.stderr) + continue + else: + # If subnet name is missing/nan, use the same compartment as the MySQL instance + tempdict['network_compartment_id'] = tempdict['compartment_name'] + tempdict['vcn_names'] = '' + tempdict['subnet_id'] = '' + + # Handle backup policy settings + backup_window = str(df.loc[i, 'Backup policy window start time']).strip() + if backup_window and backup_window.lower() != 'nan': + # Preserve the existing backup window time format + if ':' in backup_window: + # If it's already in HH:MM:SS or HH:MM format, use it as is + tempdict['backup_policy_window_start_time'] = backup_window + else: + # Default to a standard time if not in correct format + print(f"\nWARNING: Invalid backup window time format {backup_window}, using default", file=sys.stderr) + tempdict['backup_policy_window_start_time'] = "00:00:00" + else: + tempdict['backup_policy_window_start_time'] = "00:00:00" + + # Handle other backup policy settings + backup_enabled = str(df.loc[i, 'Backup policy is enabled']).strip() + tempdict['backup_policy_is_enabled'] = backup_enabled.lower() == 'true' if backup_enabled.lower() != 'nan' else True + + pitr_enabled = str(df.loc[i, 'Backup policy pitr policy is enabled']).strip() + tempdict['backup_policy_pitr_policy_is_enabled'] = pitr_enabled.lower() == 'true' if pitr_enabled.lower() != 'nan' else True + + retention_days = str(df.loc[i, 'Backup policy Retention in days']).strip() + tempdict['backup_policy_retention_in_days'] = int(retention_days) if retention_days.lower() != 'nan' else 7 + + # Format maintenance window time + maintenance_time = str(df.loc[i, 'Maintenance window start time']).strip() + if maintenance_time and maintenance_time.lower() != 'nan': + # Check if it's already in the format "DAY HH:MM" + if any(day in maintenance_time.upper() for day in ['MONDAY', 'TUESDAY', 'WEDNESDAY', 'THURSDAY', 'FRIDAY', 'SATURDAY', 'SUNDAY']): + # Split into day and time parts + day_part = next(day for day in ['MONDAY', 'TUESDAY', 'WEDNESDAY', 'THURSDAY', 'FRIDAY', 'SATURDAY', 'SUNDAY'] + if day in maintenance_time.upper()) + time_part = maintenance_time.upper().replace(day_part, '').strip() + + # Keep HH:MM format, don't add seconds + if ':' in time_part: + if time_part.count(':') == 2: # HH:MM:SS format + time_part = ':'.join(time_part.split(':')[:2]) # Keep only HH:MM + tempdict['maintenance_window_start_time'] = f"{day_part} {time_part}" + else: + tempdict['maintenance_window_start_time'] = "TUESDAY 12:50" + else: + # If only time is provided, default to TUESDAY + if ':' in maintenance_time: + # Keep HH:MM format, don't add seconds + if maintenance_time.count(':') == 2: # HH:MM:SS format + maintenance_time = ':'.join(maintenance_time.split(':')[:2]) # Keep only HH:MM + tempdict['maintenance_window_start_time'] = f"TUESDAY {maintenance_time}" + else: + tempdict['maintenance_window_start_time'] = "TUESDAY 12:50" + else: + tempdict['maintenance_window_start_time'] = "TUESDAY 12:50" + + # Ensure deletion policy values are in correct case + final_backup = str(df.loc[i, 'Deletion policy final backup']).strip().upper() + if final_backup == 'REQUIRE_FINAL_BACKUP': + tempdict['deletion_policy_final_backup'] = 'REQUIRE_FINAL_BACKUP' + elif final_backup == 'SKIP_FINAL_BACKUP': + tempdict['deletion_policy_final_backup'] = 'SKIP_FINAL_BACKUP' + else: + tempdict['deletion_policy_final_backup'] = 'SKIP_FINAL_BACKUP' + + retention = str(df.loc[i, 'Deletion policy automatic backup retention']).strip().upper() + if retention == 'RETAIN': + tempdict['deletion_policy_automatic_backup_retention'] = 'RETAIN' + elif retention == 'DELETE': + tempdict['deletion_policy_automatic_backup_retention'] = 'DELETE' + else: + tempdict['deletion_policy_automatic_backup_retention'] = 'DELETE' + + # Handle database management setting + db_mgmt = str(df.loc[i, 'Database Management is Enabled']).strip() + if db_mgmt and db_mgmt.lower() != 'nan': + tempdict['database_management'] = db_mgmt + else: + tempdict['database_management'] = "DISABLED" # Default to DISABLED to match existing instances + + # Handle nan values and set defaults + if str(df.loc[i, 'Source Type']).strip().lower() == 'nan': + tempdict['source'] = {'source_type': 'NONE'} + else: + tempdict['source'] = {'source_type': str(df.loc[i, 'Source Type']).strip()} + + if str(df.loc[i, 'Username']).strip().lower() == 'nan': + tempdict['admin_username'] = '' + else: + tempdict['admin_username'] = str(df.loc[i, 'Username']).strip() + + if str(df.loc[i, 'Password']).strip().lower() == 'nan': + tempdict['admin_password'] = '' + else: + tempdict['admin_password'] = str(df.loc[i, 'Password']).strip() + + # Add data storage details + storage_size = str(df.loc[i, 'Data Storage (in Gbs)']).strip() + tempdict['data_storage'] = { + 'data_storage_size_in_gb': int(storage_size if storage_size.lower() != 'nan' else '50'), + 'is_auto_expand_storage_enabled': False + } + + # Add secure connections + tempdict['secure_connections'] = { + 'certificate_generation_type': 'SYSTEM', + 'is_ssl_enabled': True + } + + # Handle empty description + if str(df.loc[i, 'Description']).strip().lower() == 'nan': + tempdict['description'] = '' + else: + tempdict['description'] = str(df.loc[i, 'Description']).strip() + + # Remove any remaining nan values + for key in tempdict: + if isinstance(tempdict[key], str) and tempdict[key].lower() == 'nan': + tempdict[key] = '' + + # Add to terraform string + if region in tfStr: + tfStr[region] += template.render(count=1, **tempdict) + + # Write TF string to the file in respective region directory + for reg in ct.all_regions: + reg_out_dir = outdir + "/" + reg + "/" + service_dir + if not os.path.exists(reg_out_dir): + os.makedirs(reg_out_dir) + outfile[reg] = reg_out_dir + "/" + prefix + auto_tfvars_filename + + if tfStr[reg] != '': + src = "##Add New MySQL Database System for " + reg.lower() + " here##" + # Remove any trailing commas from the last entry + tfStr[reg] = tfStr[reg].rstrip(',\n') + "\n" + tfStr[reg] = template.render(count=0, region=reg).replace(src, tfStr[reg] + src) + tfStr[reg] = "".join([s for s in tfStr[reg].strip().splitlines(True) if s.strip("\r\n").strip()]) + + with open(outfile[reg], 'w') as f: + f.write(tfStr[reg]) + print(f"Created MySQL DBsystem for region {reg} in {outfile[reg]}") \ No newline at end of file diff --git a/cd3_automation_toolkit/Database/export_exa_vmclusters_nonGreenField.py b/cd3_automation_toolkit/Database/export_exa_vmclusters_nonGreenField.py index 97d7cc96b..0af227145 100644 --- a/cd3_automation_toolkit/Database/export_exa_vmclusters_nonGreenField.py +++ b/cd3_automation_toolkit/Database/export_exa_vmclusters_nonGreenField.py @@ -174,10 +174,14 @@ def export_exa_vmclusters(inputfile, outdir, service_dir, config, signer, ct, ex tag = tkey + "." + kk + "=" + vv tags_list.append(tag) - check = any(e in tags_list for e in export_tags) + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) # None of Tags from export_tags exist on this instance; Dont export this instance if check == False: continue + for ntk_compartment_name_again in export_compartments: exa_vmclusters = oci.pagination.list_call_get_all_results(db_client.list_cloud_vm_clusters,compartment_id=ct.ntk_compartment_ids[ntk_compartment_name_again], cloud_exadata_infrastructure_id=exa_infra.id, lifecycle_state="AVAILABLE") for exa_vmcluster in exa_vmclusters.data: diff --git a/cd3_automation_toolkit/Database/export_mysql_configuration_nonGreenField.py b/cd3_automation_toolkit/Database/export_mysql_configuration_nonGreenField.py new file mode 100644 index 000000000..a332b664e --- /dev/null +++ b/cd3_automation_toolkit/Database/export_mysql_configuration_nonGreenField.py @@ -0,0 +1,289 @@ +#!/usr/bin/python3 +# Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved. +# +# This script will export MySQL Configuration from OCI +# +# Author: Mukund Murali +# Oracle Consulting +# + +import oci +import os +from commonTools import * +from oci.exceptions import ServiceError + +def export_mysql_configurations(inputfile, outdir, service_dir, config, signer, ct, export_regions=[], export_compartments=[]): + # Get list of compartments + print("Getting list of all compartments...") + all_compartments = ct.get_compartment_map(export_compartments) + + # Create output directory + if not os.path.exists(outdir): + os.makedirs(outdir) + + # Export MySQL Configurations + print("\nExporting MySQL Configurations...") + export_mysql_configuration(inputfile, outdir, service_dir, config, signer, ct, export_regions, export_compartments) + print("Export completed!") + +def export_mysql_configuration(inputfile, outdir, service_dir, config, signer, ct, export_regions=[], export_compartments=[],export_tags=[]): + global tf_import_cmd + global sheet_dict + global importCommands + global cd3file + global reg + global values_for_column + global tf_or_tofu + + tf_or_tofu = ct.tf_or_tofu + tf_state_list = [tf_or_tofu, "state", "list"] + + cd3file = inputfile + if '.xls' not in cd3file: + print("\nAcceptable cd3 format: .xlsx") + exit() + + sheetName = "MySQL-Configurations" + + # Read CD3 + df, values_for_column = commonTools.read_cd3(cd3file, sheetName) + + # Initialize all columns + values_for_column = { + 'Region': [], 'Compartment Name': [], 'Display Name': [], 'Description': [], + 'Shape Name': [], 'Configuration Type': [], 'Parent Configuration Id': [], + 'Configuration id': [], 'users_variable_name': [], 'users_variable_value': [], + 'Defined Tags': [], 'Freeform Tags': [] # Adding tag columns + } + + # Get dict for columns from Excel_Columns + sheet_dict = ct.sheet_dict[sheetName] + + print("\nCD3 excel file should not be opened during export process!!!") + print("Tab- MySQL-Configurations will be overwritten during export process!!!\n") + + # Create backups and initialize importCommands + resource = 'import_' + sheetName.lower() + file_name = 'import_commands_' + sheetName.lower() + '.sh' + + importCommands = {} + for reg in export_regions: + script_file = f'{outdir}/{reg}/{service_dir}/' + file_name + importCommands[reg] = '' + + # Create directories if they don't exist + os.makedirs(os.path.dirname(script_file), exist_ok=True) + + # Backup existing files + if os.path.exists(script_file): + commonTools.backup_file(outdir + "/" + reg + "/" + service_dir, resource, file_name) + + total_configs = 0 + processed_configs = set() + + print("\nFetching MySQL Configurations...") + + for reg in export_regions: + region = reg.lower() + script_file = f'{outdir}/{reg}/{service_dir}/{file_name}' + + config["region"] = ct.region_dict[reg] + state = {'path': f'{outdir}/{reg}/{service_dir}', 'resources': []} + + try: + byteOutput = sp.check_output(tf_state_list, cwd=state["path"], stderr=sp.DEVNULL) + output = byteOutput.decode('UTF-8').rstrip() + for item in output.split('\n'): + state["resources"].append(item.replace("\"", "\\\"")) + except Exception as e: + pass + + # Use MysqlaasClient for MySQL configurations + try: + mysql_client = oci.mysql.MysqlaasClient(config=config, retry_strategy=oci.retry.DEFAULT_RETRY_STRATEGY, signer=signer) + except Exception as e: + print(f"\nError: Could not create MySQL configuration client: {str(e)}") + continue + + for ntk_compartment_name in export_compartments: + try: + configs = oci.pagination.list_call_get_all_results( + mysql_client.list_configurations, + compartment_id=ct.ntk_compartment_ids[ntk_compartment_name] + ) + + for config_obj in configs.data: + if config_obj.lifecycle_state not in ["DELETED", "PENDING_DELETION", "SCHEDULING_DELETION"] and config_obj.compartment_id: + config_id = config_obj.id + + # Skip if we've already processed this configuration + if config_id in processed_configs: + continue + + # Tags filter + defined_tags = config_obj.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + + processed_configs.add(config_id) + total_configs += 1 + config_tf_name = commonTools.check_tf_variable(config_obj.display_name) + + # Check if resource exists in terraform state + tf_resource = f'module.mysql_configuration[\\"{config_tf_name}\\"].oci_mysql_mysql_configuration.mysql_configuration' + if tf_resource not in state["resources"]: + importCommands[reg] += f'\n{tf_or_tofu} import "{tf_resource}" {config_obj.id}' + + # Initialize all values for this row + row_values = { + 'Region': region, + 'Compartment Name': ntk_compartment_name, + 'Display Name': config_obj.display_name, + 'Description': config_obj.description if hasattr(config_obj, 'description') else "", + 'Shape Name': config_obj.shape_name if hasattr(config_obj, 'shape_name') else "", + 'Configuration Type': config_obj.type if hasattr(config_obj, 'type') else "", + 'Parent Configuration Id': "", + 'Configuration id': f"{ntk_compartment_name}@{config_obj.display_name}" if hasattr(config_obj, 'display_name') and config_obj.display_name else config_id, + 'users_variable_name': "", + 'users_variable_value': "", + 'Defined Tags': str(config_obj.defined_tags) if hasattr(config_obj, 'defined_tags') and config_obj.defined_tags else "", + 'Freeform Tags': str(config_obj.freeform_tags) if hasattr(config_obj, 'freeform_tags') and config_obj.freeform_tags else "" + } + + # Add all values to their respective lists at once + for key, value in row_values.items(): + values_for_column[key].append(value) + + # Get detailed configuration + try: + # Extract region from config_id + config_region = None + if '.phx.' in config_id: + config_region = 'us-phoenix-1' + elif '.iad.' in config_id: + config_region = 'us-ashburn-1' + else: + config_region = region # Use current region as fallback + + + # Create MySQL client with the correct region + config_copy = config.copy() + config_copy["region"] = config_region + mysql_client = oci.mysql.MysqlaasClient(config=config_copy, retry_strategy=oci.retry.DEFAULT_RETRY_STRATEGY, signer=signer) + + # Get the configuration details + config_obj = mysql_client.get_configuration(config_id).data + + # Get configuration compartment name and format Configuration id + config_compartment_name = ntk_compartment_name # Default to network compartment name + if hasattr(config_obj, 'compartment_id') and config_obj.compartment_id: + for comp_name, comp_id in ct.ntk_compartment_ids.items(): + if comp_id == config_obj.compartment_id: + config_compartment_name = comp_name + break + + # Format Configuration id as compartmentname@config_name + if hasattr(config_obj, 'display_name') and config_obj.display_name: + formatted_id = f"{config_compartment_name}@{config_obj.display_name}" + values_for_column['Configuration id'][-1] = formatted_id + else: + values_for_column['Configuration id'][-1] = config_id + + # Add other configuration details + values_for_column['Display Name'][-1] = config_obj.display_name + values_for_column['Description'][-1] = config_obj.description if hasattr(config_obj, 'description') else "" + values_for_column['Shape Name'][-1] = config_obj.shape_name if hasattr(config_obj, 'shape_name') else "" + values_for_column['Configuration Type'][-1] = config_obj.type if hasattr(config_obj, 'type') else "" + values_for_column['Parent Configuration Id'][-1] = "" + + except Exception as e: + print(f"\nWarning: Could not fetch configuration details for {config_id}: {str(e)}") + values_for_column['Configuration id'][-1] = config_id + values_for_column['Display Name'][-1] = "" + values_for_column['Description'][-1] = "" + values_for_column['Shape Name'][-1] = "" + values_for_column['Configuration Type'][-1] = "" + values_for_column['Parent Configuration Id'][-1] = "" + + # Handle variables as key-value pairs + if hasattr(config_obj, 'variables'): + vars_obj = config_obj.variables + variables = {} + for attr_name in dir(vars_obj): + if not attr_name.startswith('_') and attr_name not in ['attribute_map', 'swagger_types']: + attr_value = getattr(vars_obj, attr_name) + if attr_value is not None: + variables[attr_name] = str(attr_value) + + # Add first variable in the main row + if variables: + first_var = next(iter(variables.items())) + values_for_column['users_variable_name'][-1] = first_var[0] + values_for_column['users_variable_value'][-1] = first_var[1] + + # Add additional rows for remaining variables + remaining_vars = list(variables.items())[1:] + for var_name, var_value in remaining_vars: + values_for_column['Region'].append("") + values_for_column['Compartment Name'].append("") + values_for_column['Display Name'].append("") + values_for_column['Description'].append("") + values_for_column['Shape Name'].append("") + values_for_column['Configuration Type'].append("") + values_for_column['Parent Configuration Id'].append("") + values_for_column['Configuration id'].append("") + values_for_column['users_variable_name'].append(var_name) + values_for_column['users_variable_value'].append(var_value) + values_for_column['Defined Tags'].append("") + values_for_column['Freeform Tags'].append("") + else: + values_for_column['users_variable_name'][-1] = "" + values_for_column['users_variable_value'][-1] = "" + + except ServiceError as e: + print(f"Error fetching MySQL configurations in {reg} region, compartment {ntk_compartment_name}: {str(e)}") + continue + + # Validate list lengths before writing to CD3 + def validate_list_lengths(): + # Get the length of the first list + first_key = next(iter(values_for_column)) + expected_length = len(values_for_column[first_key]) + + # Check all lists have the same length + for key, value_list in values_for_column.items(): + if len(value_list) != expected_length: + print(f"Warning: List length mismatch for {key}: {len(value_list)} != {expected_length}") + # Pad shorter lists with empty strings + while len(value_list) < expected_length: + value_list.append("") + + validate_list_lengths() + + # Write to CD3 + commonTools.write_to_cd3(values_for_column, cd3file, sheetName) + print(f"Processed {total_configs} MySQL configurations.") + + # Write import commands + for reg in export_regions: + script_file = f'{outdir}/{reg}/{service_dir}/{file_name}' + if importCommands[reg]: + init_commands = f'#!/bin/bash\n\n######### Writing import for MySQL configurations #########\n\n{tf_or_tofu} init' + importCommands[reg] += f'\n{tf_or_tofu} plan\n' + + # Write to file in append mode + with open(script_file, 'a') as importCommandsfile: + importCommandsfile.write(init_commands + importCommands[reg]) + os.chmod(script_file, 0o755) # Make the script executable diff --git a/cd3_automation_toolkit/Database/export_mysql_db_nonGreenField.py b/cd3_automation_toolkit/Database/export_mysql_db_nonGreenField.py new file mode 100644 index 000000000..2bb133d0a --- /dev/null +++ b/cd3_automation_toolkit/Database/export_mysql_db_nonGreenField.py @@ -0,0 +1,287 @@ +#!/usr/bin/python3 +# Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved. +# +# This script will produce a Terraform file that will be used to export MySQL Database Systems +# +# Author: Generated by Cascade +# Oracle Consulting +# +import oci +import os +import subprocess as sp +from commonTools import * +from oci.config import DEFAULT_LOCATION + +importCommands = {} +oci_obj_names = {} + +region_mapping = { + 'phoenix': 'us-phoenix-1', + 'ashburn': 'us-ashburn-1', + 'frankfurt': 'eu-frankfurt-1', + 'london': 'uk-london-1', + 'mumbai': 'ap-mumbai-1', + 'seoul': 'ap-seoul-1', + 'tokyo': 'ap-tokyo-1', + 'toronto': 'ca-toronto-1', + 'sydney': 'ap-sydney-1', + 'sanjose': 'us-sanjose-1', + 'singapore': 'ap-singapore-1', + 'amsterdam': 'eu-amsterdam-1', + 'chuncheon': 'ap-chuncheon-1', + 'melbourne': 'ap-melbourne-1', + 'montreal': 'ca-montreal-1', + 'hyderabad': 'ap-hyderabad-1', + 'jeddah': 'me-jeddah-1', + 'dubai': 'me-dubai-1', + 'milan': 'eu-milan-1', + 'santiago': 'sa-santiago-1', + 'marseille': 'eu-marseille-1', + 'paris': 'eu-paris-1', + 'zurich': 'eu-zurich-1' +} + +def print_mysql(region, vnc_client, mysql_db, values_for_column, ntk_compartment_name, state, ct, row): + mysql_tf_name = commonTools.check_tf_variable(mysql_db.display_name) + mysql_subnet_id = mysql_db.subnet_id + + if mysql_subnet_id is not None: + mysql_subnet_info = vnc_client.get_subnet(mysql_subnet_id) + mysql_subnet_name = mysql_subnet_info.data.display_name + mysql_vcn_name = vnc_client.get_vcn(mysql_subnet_info.data.vcn_id).data.display_name + + ntk_compartment_id = vnc_client.get_vcn(mysql_subnet_info.data.vcn_id).data.compartment_id + network_compartment_name = ntk_compartment_name + for comp_name, comp_id in ct.ntk_compartment_ids.items(): + if comp_id == ntk_compartment_id: + network_compartment_name = comp_name + + subnet_name = network_compartment_name + "@" + mysql_vcn_name + "::" + mysql_subnet_name + + # Get configuration details if present + config_name = "" + config_compartment_name = "" + config_id = "" + + if hasattr(mysql_db, 'configuration_id') and mysql_db.configuration_id: + config_id = mysql_db.configuration_id + try: + # Create MySQL client with the same config as the parent client + config_copy = dict(vnc_client.base_client.config) + # Create a copy of the config and set the region from Excel row + config_copy = config_copy.copy() + excel_region = row['Region'].lower().strip() + config_copy['region'] = region_mapping.get(excel_region, excel_region) + + # Try with both client types + try: + mysql_client = oci.mysql.MysqlaasClient(config=config_copy, retry_strategy=oci.retry.DEFAULT_RETRY_STRATEGY, signer=vnc_client.base_client.signer) + config_obj = mysql_client.get_configuration(mysql_db.configuration_id).data + except Exception as e1: + try: + mysql_client = oci.mysql.MysqlaasClient(config=config_copy, retry_strategy=oci.retry.DEFAULT_RETRY_STRATEGY, signer=vnc_client.base_client.signer) + config_obj = mysql_client.get_configuration(mysql_db.configuration_id).data + except Exception as e2: + print(f"\nWarning2: Could not fetch configuration details for {mysql_db.display_name}: {str(e2)}") + config_obj = None + + if hasattr(config_obj, 'display_name'): + config_name = config_obj.display_name + + # Get configuration compartment name + for comp_name, comp_id in ct.ntk_compartment_ids.items(): + if comp_id == config_obj.compartment_id: + config_compartment_name = comp_name + break + + # Format configuration name similar to subnet_name + if config_compartment_name and config_name: + config_id = config_compartment_name +'@' + config_name + + except Exception as e: + print(f"\nWarning1: Could not fetch configuration details for {mysql_db.display_name}: {str(e)}") + + # Check if resource exists in terraform state + tf_resource = f'module.mysql_db_system[\\"{mysql_tf_name}\\"].oci_mysql_mysql_db_system.db_system' + if tf_resource not in state["resources"]: + importCommands[region.lower()] += f'\n{ct.tf_or_tofu} import "{tf_resource}" {str(mysql_db.id)}' + + for col_header in values_for_column: + if col_header == 'Region': + values_for_column[col_header].append(region) + elif col_header == 'Compartment Name': + values_for_column[col_header].append(ntk_compartment_name) + elif col_header == 'Display Name': + values_for_column[col_header].append(mysql_db.display_name) + elif col_header == 'Description': + values_for_column[col_header].append(mysql_db.description if mysql_db.description else "") + elif col_header == 'Configuration id': + values_for_column[col_header].append(config_id) # Use config_id directly + elif col_header == 'Configuration Name': + if config_name and config_compartment_name: + config_value = f"{config_compartment_name}@{config_name}" + values_for_column[col_header].append(config_value) + elif config_name: + values_for_column[col_header].append(config_name) + else: + values_for_column[col_header].append("") + elif col_header == 'Hostname Label': + hostname = mysql_db.hostname_label if mysql_db.hostname_label else mysql_db.display_name.lower().replace("-", "") + values_for_column[col_header].append(hostname) + elif col_header == 'Shape': + values_for_column[col_header].append(mysql_db.shape_name) + elif col_header == 'Network Details': + if mysql_subnet_id is not None: + values_for_column[col_header].append(subnet_name) + else: + values_for_column[col_header].append("") + elif col_header == 'Username': + values_for_column[col_header].append("") + elif col_header == 'Password': + values_for_column[col_header].append("") # For security, don't export passwords + elif col_header == 'HA': + values_for_column[col_header].append(str(mysql_db.is_highly_available).lower()) + elif col_header == 'Availability Domain(AD1|AD2|AD3)': + ad_value = mysql_db.availability_domain + ad = "" + if "AD-1" in ad_value.upper() or "-1" in ad_value: + ad = "AD1" + elif "AD-2" in ad_value.upper() or "-2" in ad_value: + ad = "AD2" + elif "AD-3" in ad_value.upper() or "-3" in ad_value: + ad = "AD3" + values_for_column[col_header].append(ad) + elif col_header == 'Fault Domain': + values_for_column[col_header].append(mysql_db.fault_domain if mysql_db.fault_domain else "") + elif col_header == 'IP Address': + values_for_column[col_header].append(mysql_db.ip_address if mysql_db.ip_address else "") + elif col_header == 'Port': + values_for_column[col_header].append(str(mysql_db.port) if mysql_db.port else "") + elif col_header == 'Port_x': + values_for_column[col_header].append(str(mysql_db.port_x) if mysql_db.port_x else "") + elif col_header == 'Data Storage (in Gbs)': + values_for_column[col_header].append(str(mysql_db.data_storage_size_in_gbs)) + elif col_header == 'Backup policy is enabled': + values_for_column[col_header].append(str(mysql_db.backup_policy.is_enabled).lower() if mysql_db.backup_policy else "") + elif col_header == 'Backup policy pitr policy is enabled': + values_for_column[col_header].append(str(mysql_db.backup_policy.pitr_policy.is_enabled).lower() if mysql_db.backup_policy and mysql_db.backup_policy.pitr_policy else "") + elif col_header == 'Backup policy Retention in days': + values_for_column[col_header].append(str(mysql_db.backup_policy.retention_in_days) if mysql_db.backup_policy else "") + elif col_header == 'Backup policy window start time': + values_for_column[col_header].append(mysql_db.backup_policy.window_start_time if mysql_db.backup_policy and mysql_db.backup_policy.window_start_time else "") + elif col_header == 'Deletion policy final backup': + values_for_column[col_header].append(str(mysql_db.deletion_policy.final_backup).lower() if mysql_db.deletion_policy else "") + elif col_header == 'Deletion policy is deleted protected': + values_for_column[col_header].append(str(mysql_db.deletion_policy.is_delete_protected).lower() if mysql_db.deletion_policy else "") + elif col_header == 'Maintenance window start time': + values_for_column[col_header].append(mysql_db.maintenance.window_start_time if mysql_db.maintenance else "") + elif col_header == 'Database Management is Enabled': + values_for_column[col_header].append(mysql_db.database_management if mysql_db.database_management else "DISABLED") + elif col_header.lower() in commonTools.tagColumns: + values_for_column = commonTools.export_tags(mysql_db, col_header, values_for_column) + else: + oci_objs = [mysql_db] + values_for_column = commonTools.export_extra_columns(oci_objs, col_header, sheet_dict, values_for_column) + +def export_mysql_db(inputfile, outdir, service_dir, config, signer, ct, export_compartments=[], export_regions=[],export_tags=[]): + global tf_import_cmd + global sheet_dict + global importCommands + global cd3file + global reg + global values_for_column + global tf_or_tofu + + tf_or_tofu = ct.tf_or_tofu + tf_state_list = [tf_or_tofu, "state", "list"] + + cd3file = inputfile + if '.xls' not in cd3file: + print("\nAcceptable cd3 format: .xlsx") + exit() + + sheetName = "MySQL-DBSystems" + + # Read CD3 + df, values_for_column = commonTools.read_cd3(cd3file, sheetName) + + # Get dict for columns from Excel_Columns + sheet_dict = ct.sheet_dict[sheetName] + + print("\nCD3 excel file should not be opened during export process!!!") + print("Tab- MySQL-DBSystems will be overwritten during export process!!!\n") + + # Create backups and initialize importCommands + resource = 'import_' + sheetName.lower() + file_name = 'import_commands_' + sheetName.lower() + '.sh' + + importCommands = {} + for reg in export_regions: + script_file = f'{outdir}/{reg}/{service_dir}/' + file_name + importCommands[reg] = '' + + # Create directories if they don't exist + os.makedirs(os.path.dirname(script_file), exist_ok=True) + + # Backup existing files + if os.path.exists(script_file): + commonTools.backup_file(outdir + "/" + reg + "/" + service_dir, resource, file_name) + #os.remove(script_file) # Remove the old file after backup + + print("\nFetching MySQL DB Systems...") + + for reg in export_regions: + config.__setitem__("region", ct.region_dict[reg]) + state = {'path': f'{outdir}/{reg}/{service_dir}', 'resources': []} + try: + byteOutput = sp.check_output(tf_state_list, cwd=state["path"], stderr=sp.DEVNULL) + output = byteOutput.decode('UTF-8').rstrip() + for item in output.split('\n'): + if item: # Only add non-empty lines + state["resources"].append(item.replace("\"", "\\\"")) + except Exception as e: + pass + + region = reg.capitalize() + vnc_client = oci.core.VirtualNetworkClient(config=config, retry_strategy=oci.retry.DEFAULT_RETRY_STRATEGY, signer=signer) + + for ntk_compartment_name in export_compartments: + mysql_dbs = oci.pagination.list_call_get_all_results(oci.mysql.DbSystemClient(config=config, retry_strategy=oci.retry.DEFAULT_RETRY_STRATEGY, signer=signer).list_db_systems, + compartment_id=ct.ntk_compartment_ids[ntk_compartment_name], + lifecycle_state="ACTIVE") + for mysql_db in mysql_dbs.data: + + mysql_db = oci.mysql.DbSystemClient(config=config, retry_strategy=oci.retry.DEFAULT_RETRY_STRATEGY, signer=signer).get_db_system(mysql_db.id).data + # Tags filter + defined_tags = mysql_db.defined_tags + tags_list = [] + for tkey, tval in defined_tags.items(): + for kk, vv in tval.items(): + tag = tkey + "." + kk + "=" + vv + tags_list.append(tag) + + if export_tags == []: + check = True + else: + check = any(e in tags_list for e in export_tags) + # None of Tags from export_tags exist on this instance; Dont export this instance + if check == False: + continue + + print_mysql(region, vnc_client, mysql_db, values_for_column, ntk_compartment_name, state, ct, df.iloc[0]) + + commonTools.write_to_cd3(values_for_column, cd3file, sheetName) + print("{0} MySQL Database Systems exported into CD3.\n".format(len(values_for_column["Region"]))) + + # Writing import commands + for reg in export_regions: + script_file = f'{outdir}/{reg}/{service_dir}/' + file_name + if importCommands[reg]: + init_commands = f'#!/bin/bash\n\n######### Writing import for MySQL Database Systems #########\n\n{tf_or_tofu} init' + importCommands[reg] += f'\n{tf_or_tofu} plan\n' + + # Write to file in append mode + with open(script_file, 'a') as importCommandsfile: + importCommandsfile.write(init_commands + importCommands[reg]) + os.chmod(script_file, 0o755) # Make the script executable + diff --git a/cd3_automation_toolkit/Database/templates/mysql-configuration-template b/cd3_automation_toolkit/Database/templates/mysql-configuration-template new file mode 100644 index 000000000..faef2d8a7 --- /dev/null +++ b/cd3_automation_toolkit/Database/templates/mysql-configuration-template @@ -0,0 +1,69 @@ +{% if count == 0 %} +# Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. + +############################ +# Database +# Create MySQL Configuration +# Allowed Values: +# compartment_id can be the ocid or the name of the compartment hierarchy delimited by double hiphens "--" +# Example : compartment_id = "ocid1.compartment.oc1..aaaaaaaahwwiefb56epvdlzfic6ah6jy3xf3c" +# Sample import command: +# terraform import "module.mysql_configurations[\"<>\"].oci_mysql_mysql_configuration.configuration" +############################ + +mysql_configuration = { +{% elif count == 2 %} +} +{% else %} + {{ config_display_tf_name }} = { + compartment_id = "{{ compartment_tf_name }}" + mysql_configuration_shape_name = "{{ shape_name }}" + mysql_configuration_display_name = "{{ display_name }}" +{%- if description and description != "nan" and description != "" %} + mysql_configuration_description = "{{ description }}" +{%- endif %} +{%- for key in config_keys() %} +{%- if key.startswith('mysql_configuration_variables_') %} +{%- set value = config_value(key) %} +{%- if value.lower() in ['true', 'false'] %} + {{ key }} = {{ value.lower() }} +{%- else %} + {{ key }} = "{{ value }}" +{%- endif %} +{%- endif %} +{%- endfor %} + }{% if not loop.last %},{% endif %} + {# ##Do not modify below this line## #} + {# #} + {# ###Section for adding Defined and Freeform Tags### #} + {% if defined_tags and defined_tags != 'nan' and defined_tags != '' and defined_tags != [['nan']] %} + {% if defined_tags[0] %} + defined_tags = { + {% for tags in defined_tags %} + {% if not loop.last %} + "{{ tags[0] }}"= "{{ tags[1] }}" , + {% else %} + "{{ tags[0] }}"= "{{ tags[1] }}" + {% endif %} + {% endfor %} + } + {% endif %} + {% endif %} + {% if freeform_tags and freeform_tags != 'nan' and freeform_tags != '' and freeform_tags != [['nan']] %} + {% if freeform_tags[0] %} + freeform_tags = { + {% for tags in freeform_tags %} + {% if not loop.last %} + "{{ tags[0] }}"="{{ tags[1] }}", + {% else %} + "{{ tags[0] }}"="{{ tags[1] }}" + {% endif %} + {% endfor %} + } + {% endif %} + {% endif %} + {# ###Section for adding Defined and Freeform Tags ends here### #} + + +{% endif %} diff --git a/cd3_automation_toolkit/Database/templates/mysql-template b/cd3_automation_toolkit/Database/templates/mysql-template new file mode 100644 index 000000000..a5cc872ad --- /dev/null +++ b/cd3_automation_toolkit/Database/templates/mysql-template @@ -0,0 +1,82 @@ +{% if count == 0 %} +# Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. +# +############################ +# MySQL Database System +# MySQL Database System - tfvars +# Allowed Values: +# compartment_id and network_compartment_id can be the ocid or the name of the compartment hierarchy delimited by double hiphens "--" +# Example : compartment_id = "ocid1.compartment.oc1..aaaaaaaahwwiefb56epvdlzfic6ah6jy3xf3c" or compartment_id = "Database--Prod" where "Database" is the parent of "Prod" compartment +# configuration_id can be specified either as an OCID or in the format "compartment@name" +############################ +mysql_db_system = { + ##Add New MySQL Database System for {{ region|lower }} here## +} +{% else %} + "{{ display_name }}" = { + compartment_id = "{{ compartment_name }}" + network_compartment_id = "{{ network_compartment_id }}" + mysql_db_system_display_name = "{{ display_name }}" + mysql_db_system_description = "{{ description }}" + mysql_db_system_hostname_label = "{{ hostname_label }}" + mysql_db_system_is_highly_available = {{ is_highly_available|lower }} + mysql_db_system_availability_domain = "{{ availability_domain }}" + mysql_db_system_fault_domain = "{{ fault_domain }}" + configuration_compartment_id = "{{ configuration_compartment_id }}" + configuration_id = "{{ configuration_id }}" + mysql_shape_name = "{{ shape }}" + vcn_names = "{{ vcn_names }}" + subnet_id = "{{ subnet_id }}" + mysql_db_system_admin_username = "{{ admin_username }}" + mysql_db_system_admin_password = "{{ admin_password }}" + mysql_db_system_ip_address = "{{ ip_address }}" + mysql_db_system_backup_policy_is_enabled = {{ backup_policy_is_enabled|lower }} + mysql_db_system_backup_policy_pitr_policy_is_enabled = {{ backup_policy_pitr_policy_is_enabled|lower }} + mysql_db_system_backup_policy_retention_in_days = {{ backup_policy_retention_in_days }} + mysql_db_system_backup_policy_window_start_time = "{{ backup_policy_window_start_time }}" + mysql_db_system_crash_recovery = "{{ crash_recovery }}" + mysql_db_system_data_storage_size_in_gb = {{ data_storage.data_storage_size_in_gb }} + mysql_db_system_database_management = "{{ database_management }}" + mysql_db_system_deletion_policy_automatic_backup_retention = "{{ deletion_policy_automatic_backup_retention }}" + mysql_db_system_deletion_policy_final_backup = "{{ deletion_policy_final_backup }}" + mysql_db_system_deletion_policy_is_delete_protected = {{ deletion_policy_is_delete_protected|lower }} + mysql_db_system_maintenance_window_start_time = "{{ maintenance_window_start_time }}" + mysql_db_system_port = {{ port }} + mysql_db_system_port_x = {{ port_x }} + mysql_db_system_source_type = "{{ source.source_type }}" + mysql_db_system_data_storage_is_auto_expand_enabled = {{ data_storage.is_auto_expand_storage_enabled|lower }} + mysql_db_system_secure_connections_certificate_type = "{{ secure_connections.certificate_generation_type }}" + mysql_db_system_secure_connections_is_ssl_enabled = {{ secure_connections.is_ssl_enabled|lower }} + {# ##Do not modify below this line## #} + {# #} + {# ###Section for adding Defined and Freeform Tags### #} + {% if defined_tags and defined_tags != 'nan' and defined_tags != '' and defined_tags != [['nan']] %} + {% if defined_tags[0] %} + defined_tags = { + {% for tags in defined_tags %} + {% if not loop.last %} + "{{ tags[0] }}"= "{{ tags[1] }}" , + {% else %} + "{{ tags[0] }}"= "{{ tags[1] }}" + {% endif %} + {% endfor %} + } + {% endif %} + {% endif %} + {% if freeform_tags and freeform_tags != 'nan' and freeform_tags != '' and freeform_tags != [['nan']] %} + {% if freeform_tags[0] %} + freeform_tags = { + {% for tags in freeform_tags %} + {% if not loop.last %} + "{{ tags[0] }}"="{{ tags[1] }}", + {% else %} + "{{ tags[0] }}"="{{ tags[1] }}" + {% endif %} + {% endfor %} + } + {% endif %} + {% endif %} + {# ###Section for adding Defined and Freeform Tags ends here### #} + }, +{% endif %} \ No newline at end of file diff --git a/cd3_automation_toolkit/Excel_Columns b/cd3_automation_toolkit/Excel_Columns index 119d6495d..cc3aa3179 100644 --- a/cd3_automation_toolkit/Excel_Columns +++ b/cd3_automation_toolkit/Excel_Columns @@ -277,7 +277,7 @@ "KMS" :{}, "Quotas" : {}, "Budgets" : {}, - "mysql-dbsystem" : + "MySQL-DBSystems" : { "Region" : "region", "Compartment Name" : "compartment_id", @@ -309,7 +309,7 @@ "Configuration Id" : "configuration_id", "Defined Tags" : "defined_tags" }, - "mysql-configuration" : + "MySQL-Configurations" : { "Region" : "region", "Compartment Name" : "compartment_id", diff --git a/cd3_automation_toolkit/Network/BaseNetwork/export_network_nonGreenField.py b/cd3_automation_toolkit/Network/BaseNetwork/export_network_nonGreenField.py index a9c9749b4..554ad54bc 100644 --- a/cd3_automation_toolkit/Network/BaseNetwork/export_network_nonGreenField.py +++ b/cd3_automation_toolkit/Network/BaseNetwork/export_network_nonGreenField.py @@ -22,7 +22,7 @@ def print_drgv2(values_for_column_drgv2, region, comp_name, vcn_info, drg_info, drg_attachment_info, drg_rt_info, - import_drg_route_distribution_info, drg_route_distribution_statements,write_drg_ocids): + import_drg_route_distribution_info, drg_route_distribution_statements, write_drg_ocids): for col_header in values_for_column_drgv2.keys(): if (col_header == "Region"): values_for_column_drgv2[col_header].append(region) @@ -47,7 +47,7 @@ def print_drgv2(values_for_column_drgv2, region, comp_name, vcn_info, drg_info, attach_id = drg_attachment_info.vcn_id if (attach_type.upper() == "VCN"): - columnval = attach_type + "::" + vcn_info.display_name+"::"+drg_attachment_info.display_name + columnval = attach_type + "::" + vcn_info.display_name + "::" + drg_attachment_info.display_name values_for_column_drgv2[col_header].append(columnval) else: columnval = attach_type + "::" + attach_id @@ -57,7 +57,7 @@ def print_drgv2(values_for_column_drgv2, region, comp_name, vcn_info, drg_info, if (drg_rt_info == None): values_for_column_drgv2[col_header].append("") else: - if write_drg_ocids==True: + if write_drg_ocids == True: values_for_column_drgv2[col_header].append(drg_rt_info.id) else: values_for_column_drgv2[col_header].append(drg_rt_info.display_name) @@ -100,8 +100,9 @@ def print_drgv2(values_for_column_drgv2, region, comp_name, vcn_info, drg_info, values_for_column_drgv2) -def print_vcns(values_for_column_vcns, region, comp_name, vnc,vcn_info, drg_attachment_info, drg_info, igw_info, ngw_info, sgw_info, - lpg_display_names,state,write_drg_ocids): +def print_vcns(values_for_column_vcns, region, comp_name, vnc, vcn_info, drg_attachment_info, drg_info, igw_info, + ngw_info, sgw_info, + lpg_display_names, state, write_drg_ocids): for col_header in values_for_column_vcns.keys(): if (col_header == "Region"): @@ -109,7 +110,7 @@ def print_vcns(values_for_column_vcns, region, comp_name, vnc,vcn_info, drg_atta elif (col_header == "Compartment Name"): values_for_column_vcns[col_header].append(comp_name) elif (col_header == "DRG Required"): - if drg_attachment_info!=None: + if drg_attachment_info != None: if (drg_info == None): values_for_column_vcns[col_header].append("n") else: @@ -136,9 +137,9 @@ def print_vcns(values_for_column_vcns, region, comp_name, vnc,vcn_info, drg_atta else: route_table_id = igw_info.route_table_id if (route_table_id is not None): - val=igw_info.display_name+"::"+vnc.get_route_table(route_table_id).data.display_name + val = igw_info.display_name + "::" + vnc.get_route_table(route_table_id).data.display_name else: - val=igw_info.display_name + val = igw_info.display_name values_for_column_vcns[col_header].append(val) elif (col_header == "NGW Required"): @@ -184,7 +185,7 @@ def print_vcns(values_for_column_vcns, region, comp_name, vnc,vcn_info, drg_atta importCommands[region.lower()].write(f'\n{tf_or_tofu} import "{tf_resource}" {str(vcn_info.id)}') -def print_dhcp(values_for_column_dhcp, region, comp_name, vcn_name, dhcp_info,state): +def print_dhcp(values_for_column_dhcp, region, comp_name, vcn_name, dhcp_info, state): tf_name = vcn_name + "_" + str(dhcp_info.display_name) tf_name = commonTools.check_tf_variable(tf_name) @@ -233,18 +234,20 @@ def print_dhcp(values_for_column_dhcp, region, comp_name, vcn_name, dhcp_info,st def print_subnets_vlans(values_for_column_subnets_vlans, region, comp_name, vcn_name, subnet_vlan_info, dhcp_name, - rt_name, sl_nsg_names, add_def_seclist, subnet_vlan_in_excel,state): + rt_name, sl_nsg_names, add_def_seclist, subnet_vlan_in_excel, state): tf_name = vcn_name + "_" + str(subnet_vlan_info.display_name) tf_name = commonTools.check_tf_variable(tf_name) if subnet_vlan_in_excel == 'Subnet': tf_resource = f'module.subnets[\\"{tf_name}\\"].oci_core_subnet.subnet' if tf_resource not in state["resources"]: - importCommands_subnet[region.lower()].write(f'\n{tf_or_tofu} import "{tf_resource}" {str(subnet_vlan_info.id)}') + importCommands_subnet[region.lower()].write( + f'\n{tf_or_tofu} import "{tf_resource}" {str(subnet_vlan_info.id)}') elif subnet_vlan_in_excel == 'VLAN': tf_resource = f'module.vlans[\\"{tf_name}\\"].oci_core_vlan.vlan' if tf_resource not in state["resources"]: - importCommands_vlan[region.lower()].write(f'\n{tf_or_tofu} import "{tf_resource}" {str(subnet_vlan_info.id)}') + importCommands_vlan[region.lower()].write( + f'\n{tf_or_tofu} import "{tf_resource}" {str(subnet_vlan_info.id)}') for col_header in values_for_column_subnets_vlans.keys(): if (col_header == "Region"): @@ -329,18 +332,22 @@ def print_subnets_vlans(values_for_column_subnets_vlans, region, comp_name, vcn_ values_for_column_subnets_vlans) -def get_drg_rt_name(drg_rpc_attachment_list, source_rpc_id, rpc_source_client): +def get_drg_rt_name(drg_rpc_attachment_list, source_rpc_id, rpc_source_client, drg_id): for item in drg_rpc_attachment_list.data: - if source_rpc_id == item.network_details.id: + if hasattr(item, "network_details") and item.network_details.id == source_rpc_id: source_drg_rt_id = item.drg_route_table_id - src_drg_rt_name = getattr( - rpc_source_client.get_drg_route_table(drg_route_table_id=source_drg_rt_id).data, - 'display_name') - return src_drg_rt_name, source_drg_rt_id + if not source_drg_rt_id and drg_id: + drg = rpc_source_client.get_drg(drg_id).data + source_drg_rt_id = drg.default_drg_route_tables["defaultRouteTable"] + if source_drg_rt_id: # Only fetch if RT ID exists + rt = rpc_source_client.get_drg_route_table(source_drg_rt_id).data + return rt.display_name, source_drg_rt_id + return None, None + return None, None def get_rpc_resources(source_region, SOURCE_RPC_LIST, dest_rpc_dict, rpc_source_client, ct, values_for_column, - ntk_compartment_name, outdir,drg_info, drg_attachment_info,state_rpc): + ntk_compartment_name, outdir, drg_info, drg_attachment_info, state_rpc): # Variables dest_rpc_drg_name = "" src_drg_rt_name = "" @@ -394,15 +401,20 @@ def get_comp_details(comp_data): # Fetch source DRG RT name src_drg_rt_name, source_drg_rt_id = get_drg_rt_name(drg_rpc_attachment_list, source_rpc_id, - rpc_source_client) - # Fetch source DRG import route distribution id, name - src_drg_rt_dist = rpc_source_client.get_drg_route_table(drg_route_table_id=source_drg_rt_id) - src_drg_rt_import_dist_id = getattr(src_drg_rt_dist.data, 'import_drg_route_distribution_id') - if (src_drg_rt_import_dist_id!=None): - import_rt_info = rpc_source_client.get_drg_route_distribution(drg_route_distribution_id=src_drg_rt_import_dist_id) - src_drg_rt_dist_info = import_rt_info - drg_rt_import_dist_name = getattr(import_rt_info.data, "display_name") - import_rt_statements = rpc_source_client.list_drg_route_distribution_statements(drg_route_distribution_id=src_drg_rt_import_dist_id) + rpc_source_client, + new_rpc.drg_id) + + if src_drg_rt_name is not None: + # Fetch source DRG import route distribution id, name + src_drg_rt_dist = rpc_source_client.get_drg_route_table(drg_route_table_id=source_drg_rt_id) + src_drg_rt_import_dist_id = getattr(src_drg_rt_dist.data, 'import_drg_route_distribution_id') + if src_drg_rt_import_dist_id is not None: + import_rt_info = rpc_source_client.get_drg_route_distribution( + drg_route_distribution_id=src_drg_rt_import_dist_id) + src_drg_rt_dist_info = import_rt_info + drg_rt_import_dist_name = getattr(import_rt_info.data, "display_name") + import_rt_statements = rpc_source_client.list_drg_route_distribution_statements( + drg_route_distribution_id=src_drg_rt_import_dist_id) # Check for duplicate rpc entry in safe file first fo = open(f'{rpc_file}').read() @@ -416,7 +428,9 @@ def get_comp_details(comp_data): f"{source_region.lower()},{region.lower()},{source_rpc_display_name},{source_rpc_peer_id} \n") # get RPC data to get dest comp name - dest_rpc_comp_id = getattr(client.get_remote_peering_connection(remote_peering_connection_id=dest_rpc_id).data, "compartment_id") + dest_rpc_comp_id = getattr( + client.get_remote_peering_connection(remote_peering_connection_id=dest_rpc_id).data, + "compartment_id") # Fetch destination region data new_client = oci.pagination.list_call_get_all_results(client.list_remote_peering_connections, compartment_id=dest_rpc_comp_id) @@ -426,9 +440,10 @@ def get_comp_details(comp_data): dest_rpc_details = client.get_remote_peering_connection( remote_peering_connection_id=source_rpc_peer_id) dest_rpc_drg_id = dest_rpc.drg_id - dest_drg_info=client.get_drg(drg_id=dest_rpc_drg_id).data + dest_drg_info = client.get_drg(drg_id=dest_rpc_drg_id).data dest_rpc_drg_name = getattr(client.get_drg(drg_id=dest_rpc_drg_id).data, 'display_name') - dest_drg_comp_name = get_comp_details(getattr(client.get_drg(drg_id=dest_rpc_drg_id).data, 'compartment_id')) + dest_drg_comp_name = get_comp_details( + getattr(client.get_drg(drg_id=dest_rpc_drg_id).data, 'compartment_id')) dest_rpc_display_name = dest_rpc.display_name dest_drg_rpc_attachment_list = client.list_drg_attachments( compartment_id=dest_rpc_comp_id, attachment_type="REMOTE_PEERING_CONNECTION", @@ -441,24 +456,29 @@ def get_comp_details(comp_data): # Fetch Dest DRG RT name, id if dest_drg_rpc_attachment_list.data: dest_drg_rt_name, dest_drg_rt_id = get_drg_rt_name(dest_drg_rpc_attachment_list, - dest_rpc_id, client) - - # Fetch source DRG import route distribution id, name - dest_drg_rt_dist = client.get_drg_route_table(drg_route_table_id=dest_drg_rt_id) - dest_drg_rt_import_dist_id = getattr(dest_drg_rt_dist.data, - 'import_drg_route_distribution_id') - if dest_drg_rt_import_dist_id!=None: - dest_import_rt_info = client.get_drg_route_distribution(drg_route_distribution_id=dest_drg_rt_import_dist_id) - dest_drg_rt_dist_info=dest_import_rt_info - dest_drg_rt_import_dist_name = getattr(dest_import_rt_info.data, "display_name") - dest_import_rt_statements = client.list_drg_route_distribution_statements(drg_route_distribution_id=dest_drg_rt_import_dist_id) + dest_rpc_id, client,dest_rpc.drg_id) + + if dest_drg_rt_name is not None: + # Fetch source DRG import route distribution id, name + dest_drg_rt_dist = client.get_drg_route_table(drg_route_table_id=dest_drg_rt_id) + dest_drg_rt_import_dist_id = getattr(dest_drg_rt_dist.data, + 'import_drg_route_distribution_id') + if dest_drg_rt_import_dist_id is not None: + dest_import_rt_info = client.get_drg_route_distribution( + drg_route_distribution_id=dest_drg_rt_import_dist_id) + dest_drg_rt_dist_info = dest_import_rt_info + dest_drg_rt_import_dist_name = getattr(dest_import_rt_info.data, "display_name") + dest_import_rt_statements = client.list_drg_route_distribution_statements( + drg_route_distribution_id=dest_drg_rt_import_dist_id) tf_resource = f'module.rpcs[\\"{rpc_tf_name}\\"].oci_core_remote_peering_connection.{source_region.lower()}_{region.lower()}_requester_rpc[\\"region\\"]' if tf_resource not in state_rpc["resources"]: - importCommands_rpc["global"].write(f'\n{tf_or_tofu} import "{tf_resource}" {str(source_rpc_id)}') + importCommands_rpc["global"].write( + f'\n{tf_or_tofu} import "{tf_resource}" {str(source_rpc_id)}') tf_resource = f'module.rpcs[\\"{rpc_tf_name}\\"].oci_core_remote_peering_connection.{source_region.lower()}_{region.lower()}_accepter_rpc[\\"region\\"]' if tf_resource not in state_rpc["resources"]: - importCommands_rpc["global"].write(f'\n{tf_or_tofu} import "{tf_resource}" {str(dest_rpc_id)}') + importCommands_rpc["global"].write( + f'\n{tf_or_tofu} import "{tf_resource}" {str(dest_rpc_id)}') importCommands_rpc["global"].write(f'\n{tf_or_tofu} plan') for col_header in values_for_column: @@ -553,7 +573,8 @@ def get_comp_details(comp_data): values_for_column[col_header].append(statement_val) elif col_header.lower() in commonTools.tagColumns: - values_for_column = commonTools.export_tags(dest_drg_info, col_header, values_for_column) + values_for_column = commonTools.export_tags(dest_drg_info, col_header, + values_for_column) else: oci_objs = [new_rpc, dest_drg_info, dest_drg_rt_dist, dest_drg_rt_dist_info] @@ -567,9 +588,11 @@ def get_comp_details(comp_data): # Close the safe_file post updates rpc_safe_file["global"].close() -def export_major_objects(inputfile, outdir, service_dir, config, signer, ct, export_compartments=[], export_regions=[],export_tags=[]): + +def export_major_objects(inputfile, outdir, service_dir, config, signer, ct, export_compartments=[], export_regions=[], + export_tags=[]): global sheet_dict_vcns - global sheet_dict_drgv2,tf_or_tofu + global sheet_dict_drgv2, tf_or_tofu tf_or_tofu = ct.tf_or_tofu tf_state_list = [tf_or_tofu, "state", "list"] @@ -600,7 +623,7 @@ def export_major_objects(inputfile, outdir, service_dir, config, signer, ct, exp importCommands_rpc["global"].write("\n\n######### Writing import for RPC #########\n\n") state_rpc = {'path': f'{outdir}/global/rpc/', 'resources': []} try: - byteOutput = sp.check_output(tf_state_list, cwd=state_rpc["path"],stderr=sp.DEVNULL) + byteOutput = sp.check_output(tf_state_list, cwd=state_rpc["path"], stderr=sp.DEVNULL) output = byteOutput.decode('UTF-8').rstrip() for item in output.split('\n'): state_rpc["resources"].append(item.replace("\"", "\\\"")) @@ -615,14 +638,14 @@ def export_major_objects(inputfile, outdir, service_dir, config, signer, ct, exp # Create backups for reg in export_regions: file_name = "import_commands_network_major-objects.sh" - if (os.path.exists(outdir + "/" + reg + "/" + service_dir +"/"+ file_name)): - commonTools.backup_file(outdir + "/" + reg + "/" + service_dir, "import_network",file_name) + if (os.path.exists(outdir + "/" + reg + "/" + service_dir + "/" + file_name)): + commonTools.backup_file(outdir + "/" + reg + "/" + service_dir, "import_network", file_name) if (os.path.exists(outdir + "/" + reg + "/" + service_dir + "/obj_names.safe")): commonTools.backup_file(outdir + "/" + reg + "/" + service_dir, "obj_names", "obj_names.safe") - importCommands[reg] = open(outdir + "/" + reg + "/" + service_dir +"/"+ file_name, "w") + importCommands[reg] = open(outdir + "/" + reg + "/" + service_dir + "/" + file_name, "w") state = {'path': f'{outdir}/{reg}/{service_dir}', 'resources': []} try: - byteOutput = sp.check_output(tf_state_list, cwd=state["path"],stderr=sp.DEVNULL) + byteOutput = sp.check_output(tf_state_list, cwd=state["path"], stderr=sp.DEVNULL) output = byteOutput.decode('UTF-8').rstrip() for item in output.split('\n'): state["resources"].append(item.replace("\"", "\\\"")) @@ -644,7 +667,7 @@ def export_major_objects(inputfile, outdir, service_dir, config, signer, ct, exp current_region = reg importCommands[reg].write("\n######### Writing import for DRGs #########\n") config.__setitem__("region", ct.region_dict[reg]) - vnc = VirtualNetworkClient(config=config, retry_strategy=oci.retry.DEFAULT_RETRY_STRATEGY,signer=signer) + vnc = VirtualNetworkClient(config=config, retry_strategy=oci.retry.DEFAULT_RETRY_STRATEGY, signer=signer) region = reg.capitalize() drg_ocid = [] drg_rt_ocid = [] @@ -656,7 +679,7 @@ def export_major_objects(inputfile, outdir, service_dir, config, signer, ct, exp ntk_compartment_name], attachment_type="ALL") # ,lifecycle_state ="ATTACHED")#,attachment_type="ALL") rpc_execution = True - write_drg_ocids=False + write_drg_ocids = False for drg_attachment_info in DRG_Attachments.data: if (drg_attachment_info.lifecycle_state != "ATTACHED"): continue @@ -704,8 +727,8 @@ def export_major_objects(inputfile, outdir, service_dir, config, signer, ct, exp drg_comp_id = drg_info.compartment_id if drg_comp_id not in export_compartment_ids: - drg_display_name=drg_id - write_drg_ocids=True + drg_display_name = drg_id + write_drg_ocids = True for key, val in ct.ntk_compartment_ids.items(): if val == drg_comp_id: @@ -721,7 +744,7 @@ def export_major_objects(inputfile, outdir, service_dir, config, signer, ct, exp oci_obj_names[reg].write("\nDRG Version::::" + drg_display_name + "::::" + drg_version) tf_resource = f'module.drgs[\\"{tf_name}\\"].oci_core_drg.drg' if tf_resource not in state["resources"] and write_drg_ocids == False: - importCommands[reg].write( f'\n{tf_or_tofu} import "{tf_resource}" {str(drg_info.id)}') + importCommands[reg].write(f'\n{tf_or_tofu} import "{tf_resource}" {str(drg_info.id)}') drg_ocid.append(drg_id) # Get Attachment Details @@ -743,9 +766,10 @@ def export_major_objects(inputfile, outdir, service_dir, config, signer, ct, exp tf_name = commonTools.check_tf_variable(drg_attachment_name) tf_resource = f'module.drg-attachments[\\"{tf_name}\\"].oci_core_drg_attachment.drg_attachment' if tf_resource not in state["resources"]: - importCommands[reg].write(f'\n{tf_or_tofu} import "{tf_resource}" {str(drg_attachment_info.id)}') - #oci_obj_names[reg].write( - #"\ndrgattachinfo::::" + vcn_info.display_name + "::::" + drg_display_name + "::::" + drg_attachment_name) + importCommands[reg].write( + f'\n{tf_or_tofu} import "{tf_resource}" {str(drg_attachment_info.id)}') + # oci_obj_names[reg].write( + # "\ndrgattachinfo::::" + vcn_info.display_name + "::::" + drg_display_name + "::::" + drg_attachment_name) drg_route_table_id = drg_attachment_info.drg_route_table_id @@ -769,30 +793,33 @@ def export_major_objects(inputfile, outdir, service_dir, config, signer, ct, exp tf_name = commonTools.check_tf_variable( drg_display_name + "_" + import_drg_route_distribution_info.display_name) - if (import_drg_route_distribution_info.display_name not in commonTools.drg_auto_RDs and "ocid1.drg.oc" not in drg_display_name): + if ( + import_drg_route_distribution_info.display_name not in commonTools.drg_auto_RDs and "ocid1.drg.oc" not in drg_display_name): tf_resource = f'module.drg-route-distributions[\\"{tf_name}\\"].oci_core_drg_route_distribution.drg_route_distribution' if tf_resource not in state["resources"]: - importCommands[reg].write(f'\n{tf_or_tofu} import "{tf_resource}" {str(import_drg_route_distribution_info.id)}') + importCommands[reg].write( + f'\n{tf_or_tofu} import "{tf_resource}" {str(import_drg_route_distribution_info.id)}') k = 1 for stmt in drg_route_distribution_statements.data: tf_resource = f'module.drg-route-distribution-statements[\\"{tf_name}_statement{str(k)}\\"].oci_core_drg_route_distribution_statement.drg_route_distribution_statement' if tf_resource not in state["resources"]: - importCommands[reg].write( f'\n{tf_or_tofu} import "{tf_resource}" drgRouteDistributions/{str(import_drg_route_distribution_info.id)}/statements/{stmt.id}') + importCommands[reg].write( + f'\n{tf_or_tofu} import "{tf_resource}" drgRouteDistributions/{str(import_drg_route_distribution_info.id)}/statements/{stmt.id}') k = k + 1 print_drgv2(values_for_column_drgv2, region, drg_comp_name, vcn_info, drg_info, drg_attachment_info, drg_route_table_info, import_drg_route_distribution_info, - drg_route_distribution_statements,write_drg_ocids) + drg_route_distribution_statements, write_drg_ocids) # RPC elif attach_type.upper() == "REMOTE_PEERING_CONNECTION" and rpc_execution: - #Skip RPCs to other tenancies + # Skip RPCs to other tenancies rpc = vnc.get_remote_peering_connection(attach_id).data if (rpc.lifecycle_state != 'AVAILABLE' or rpc.is_cross_tenancy_peering != False): continue - # Fetch RPC Details + # Fetch RPC Details drg_route_table_id = drg_attachment_info.drg_route_table_id if (drg_route_table_id is not None): @@ -808,15 +835,18 @@ def export_major_objects(inputfile, outdir, service_dir, config, signer, ct, exp tf_name = commonTools.check_tf_variable( drg_display_name + "_" + import_drg_route_distribution_info.display_name) - if (import_drg_route_distribution_info.display_name not in commonTools.drg_auto_RDs and write_drg_ocids == False): + if ( + import_drg_route_distribution_info.display_name not in commonTools.drg_auto_RDs and write_drg_ocids == False): tf_resource = f'module.drg-route-distributions[\\"{tf_name}\\"].oci_core_drg_route_distribution.drg_route_distribution' if tf_resource not in state["resources"]: - importCommands[reg].write(f'\n{tf_or_tofu} import "{tf_resource}" {str(import_drg_route_distribution_info.id)}') + importCommands[reg].write( + f'\n{tf_or_tofu} import "{tf_resource}" {str(import_drg_route_distribution_info.id)}') k = 1 for stmt in drg_route_distribution_statements.data: tf_resource = f'module.drg-route-distribution-statements[\\"{tf_name}_statement{str(k)}\\"].oci_core_drg_route_distribution_statement.drg_route_distribution_statement' if tf_resource not in state["resources"]: - importCommands[reg].write(f'\n{tf_or_tofu} import "{tf_resource}" drgRouteDistributions/{str(import_drg_route_distribution_info.id)}/statements/{stmt.id}') + importCommands[reg].write( + f'\n{tf_or_tofu} import "{tf_resource}" drgRouteDistributions/{str(import_drg_route_distribution_info.id)}/statements/{stmt.id}') k = k + 1 dest_rpc_dict = {} @@ -827,14 +857,16 @@ def export_major_objects(inputfile, outdir, service_dir, config, signer, ct, exp for new_reg in subs_region_list: config.__setitem__("region", ct.region_dict[new_reg]) dest_rpc_dict[new_reg] = oci.core.VirtualNetworkClient(config=config, - retry_strategy=oci.retry.DEFAULT_RETRY_STRATEGY,signer=signer) + retry_strategy=oci.retry.DEFAULT_RETRY_STRATEGY, + signer=signer) SOURCE_RPC_LIST = oci.pagination.list_call_get_all_results( vnc.list_remote_peering_connections, compartment_id=ct.ntk_compartment_ids[ ntk_compartment_name]) get_rpc_resources(region, SOURCE_RPC_LIST, dest_rpc_dict, vnc, - ct, values_for_column_drgv2, ntk_compartment_name, outdir,drg_info, drg_attachment_info,state_rpc) + ct, values_for_column_drgv2, ntk_compartment_name, outdir, drg_info, + drg_attachment_info, state_rpc) rpc_execution = False # Get All Other RTs for this DRG only if it is DRGv2 @@ -845,12 +877,12 @@ def export_major_objects(inputfile, outdir, service_dir, config, signer, ct, exp drg_info = vnc.get_drg(drg_id).data drg_display_name = drg_info.display_name - #Do not process if DRG (and its RTs/RDs are in different compartment than the export_compartments list - drg_comp_id=drg_info.compartment_id + # Do not process if DRG (and its RTs/RDs are in different compartment than the export_compartments list + drg_comp_id = drg_info.compartment_id if drg_comp_id not in export_compartment_ids: continue - write_drg_ocids=False + write_drg_ocids = False if drg_info.default_drg_route_tables is not None: DRG_RTs = oci.pagination.list_call_get_all_results(vnc.list_drg_route_tables, @@ -877,18 +909,20 @@ def export_major_objects(inputfile, outdir, service_dir, config, signer, ct, exp if (import_drg_route_distribution_info.display_name not in commonTools.drg_auto_RDs): tf_resource = f'module.drg-route-distributions[\\"{tf_name}\\"].oci_core_drg_route_distribution.drg_route_distribution' if tf_resource not in state["resources"]: - importCommands[reg].write(f'\n{tf_or_tofu} import "{tf_resource}" {str(import_drg_route_distribution_info.id)}') + importCommands[reg].write( + f'\n{tf_or_tofu} import "{tf_resource}" {str(import_drg_route_distribution_info.id)}') k = 1 for stmt in drg_route_distribution_statements.data: tf_resource = f'module.drg-route-distribution-statements[\\"{tf_name}_statement{str(k)}\\"].oci_core_drg_route_distribution_statement.drg_route_distribution_statement' if tf_resource not in state["resources"]: - importCommands[reg].write(f'\n{tf_or_tofu} import "{tf_resource}" drgRouteDistributions/{str(import_drg_route_distribution_info.id)}/statements/{stmt.id}') + importCommands[reg].write( + f'\n{tf_or_tofu} import "{tf_resource}" drgRouteDistributions/{str(import_drg_route_distribution_info.id)}/statements/{stmt.id}') k = k + 1 print_drgv2(values_for_column_drgv2, region, drg_comp_name, vcn_info, drg_info, drg_attachment_info, drg_route_table_info, import_drg_route_distribution_info, - drg_route_distribution_statements,write_drg_ocids) + drg_route_distribution_statements, write_drg_ocids) commonTools.write_to_cd3(values_for_column_drgv2, cd3file, "DRGs") print("RPCs exported to CD3\n") @@ -898,7 +932,7 @@ def export_major_objects(inputfile, outdir, service_dir, config, signer, ct, exp for reg in export_regions: state = {'path': f'{outdir}/{reg}/{service_dir}', 'resources': []} try: - byteOutput = sp.check_output(tf_state_list, cwd=state["path"],stderr=sp.DEVNULL) + byteOutput = sp.check_output(tf_state_list, cwd=state["path"], stderr=sp.DEVNULL) output = byteOutput.decode('UTF-8').rstrip() for item in output.split('\n'): state["resources"].append(item.replace("\"", "\\\"")) @@ -906,7 +940,7 @@ def export_major_objects(inputfile, outdir, service_dir, config, signer, ct, exp pass importCommands[reg].write("\n######### Writing import for VCNs #########\n") config.__setitem__("region", ct.region_dict[reg]) - vnc = VirtualNetworkClient(config=config, retry_strategy=oci.retry.DEFAULT_RETRY_STRATEGY,signer=signer) + vnc = VirtualNetworkClient(config=config, retry_strategy=oci.retry.DEFAULT_RETRY_STRATEGY, signer=signer) region = reg.capitalize() for ntk_compartment_name in export_compartments: vcns = oci.pagination.list_call_get_all_results(vnc.list_vcns, @@ -958,15 +992,15 @@ def export_major_objects(inputfile, outdir, service_dir, config, signer, ct, exp check = any(e in tags_list for e in export_tags) # Either DRG Attachment is not in 'ATTACHED' state or does not have required tags - if (drg_attachment_info.lifecycle_state != "ATTACHED") or check==False: - drg_attachment_info=None + if (drg_attachment_info.lifecycle_state != "ATTACHED") or check == False: + drg_attachment_info = None continue - write_drg_ocids=False + write_drg_ocids = False if drg_attachment_info != None: drg_id = drg_attachment_info.drg_id drg_info = vnc.get_drg(drg_id).data - drg_comp_id=drg_info.compartment_id + drg_comp_id = drg_info.compartment_id # Tags filter defined_tags = drg_info.defined_tags @@ -982,9 +1016,9 @@ def export_major_objects(inputfile, outdir, service_dir, config, signer, ct, exp check = any(e in tags_list for e in export_tags) # DRG is in different compartment or DRG doesnot have required tags - if drg_comp_id not in export_compartment_ids or check==False: - drg_info=None - write_drg_ocids= True + if drg_comp_id not in export_compartment_ids or check == False: + drg_info = None + write_drg_ocids = True # igw_display_name = "n" IGWs = oci.pagination.list_call_get_all_results(vnc.list_internet_gateways, @@ -1125,8 +1159,9 @@ def export_major_objects(inputfile, outdir, service_dir, config, signer, ct, exp lpg_display_names = lpg_display_names[:-1] # Fill VCNs Tab - print_vcns(values_for_column_vcns, region, ntk_compartment_name, vnc,vcn_info, drg_attachment_info, drg_info, igw_info, ngw_info, - sgw_info, lpg_display_names,state,write_drg_ocids) + print_vcns(values_for_column_vcns, region, ntk_compartment_name, vnc, vcn_info, drg_attachment_info, + drg_info, igw_info, ngw_info, + sgw_info, lpg_display_names, state, write_drg_ocids) commonTools.write_to_cd3(values_for_column_vcns, cd3file, "VCNs") print("VCNs exported to CD3\n") @@ -1137,8 +1172,9 @@ def export_major_objects(inputfile, outdir, service_dir, config, signer, ct, exp oci_obj_names[reg].close() -def export_dhcp(inputfile, outdir, service_dir, config, signer, ct, export_compartments=[], export_regions=[],export_tags=[]): - global sheet_dict_dhcp,tf_or_tofu +def export_dhcp(inputfile, outdir, service_dir, config, signer, ct, export_compartments=[], export_regions=[], + export_tags=[]): + global sheet_dict_dhcp, tf_or_tofu tf_or_tofu = ct.tf_or_tofu tf_state_list = [tf_or_tofu, "state", "list"] @@ -1159,9 +1195,9 @@ def export_dhcp(inputfile, outdir, service_dir, config, signer, ct, export_compa # Create backups for reg in export_regions: dhcp_file_name = "import_commands_network_dhcp.sh" - if (os.path.exists(outdir + "/" + reg + "/" + service_dir + "/"+dhcp_file_name)): - commonTools.backup_file(outdir + "/" + reg + "/" + service_dir, "import_network",dhcp_file_name) - importCommands_dhcp[reg] = open(outdir + "/" + reg + "/" + service_dir + "/"+dhcp_file_name,"w") + if (os.path.exists(outdir + "/" + reg + "/" + service_dir + "/" + dhcp_file_name)): + commonTools.backup_file(outdir + "/" + reg + "/" + service_dir, "import_network", dhcp_file_name) + importCommands_dhcp[reg] = open(outdir + "/" + reg + "/" + service_dir + "/" + dhcp_file_name, "w") importCommands_dhcp[reg].write("#!/bin/bash") importCommands_dhcp[reg].write("\n") importCommands_dhcp[reg].write(f'{tf_or_tofu} init') @@ -1172,13 +1208,13 @@ def export_dhcp(inputfile, outdir, service_dir, config, signer, ct, export_compa config.__setitem__("region", ct.region_dict[reg]) state = {'path': f'{outdir}/{reg}/{service_dir}', 'resources': []} try: - byteOutput = sp.check_output(tf_state_list, cwd=state["path"],stderr=sp.DEVNULL) + byteOutput = sp.check_output(tf_state_list, cwd=state["path"], stderr=sp.DEVNULL) output = byteOutput.decode('UTF-8').rstrip() for item in output.split('\n'): state["resources"].append(item.replace("\"", "\\\"")) except Exception as e: pass - vnc = VirtualNetworkClient(config=config, retry_strategy=oci.retry.DEFAULT_RETRY_STRATEGY,signer=signer) + vnc = VirtualNetworkClient(config=config, retry_strategy=oci.retry.DEFAULT_RETRY_STRATEGY, signer=signer) region = reg.capitalize() # comp_ocid_done = [] for ntk_compartment_name in export_compartments: @@ -1228,7 +1264,7 @@ def export_dhcp(inputfile, outdir, service_dir, config, signer, ct, export_compa dhcp_info = dhcp print_dhcp(values_for_column_dhcp, region, ntk_compartment_name_again, vcn_info.display_name, - dhcp_info,state) + dhcp_info, state) commonTools.write_to_cd3(values_for_column_dhcp, cd3file, "DHCP") print("DHCP exported to CD3\n") @@ -1237,8 +1273,9 @@ def export_dhcp(inputfile, outdir, service_dir, config, signer, ct, export_compa importCommands_dhcp[reg].close() -def export_subnets_vlans(inputfile, outdir, service_dir, config, signer, ct, export_compartments=[], export_regions=[],export_tags=[]): - global sheet_dict_subnets_vlans,tf_or_tofu +def export_subnets_vlans(inputfile, outdir, service_dir, config, signer, ct, export_compartments=[], export_regions=[], + export_tags=[]): + global sheet_dict_subnets_vlans, tf_or_tofu tf_or_tofu = ct.tf_or_tofu tf_state_list = [tf_or_tofu, "state", "list"] skip_vlans = {} @@ -1265,17 +1302,17 @@ def export_subnets_vlans(inputfile, outdir, service_dir, config, signer, ct, exp # Create backups for subnets/vlans tf import shell script files for reg in export_regions: subnet_file_name = "import_commands_network_subnets.sh" - if (os.path.exists(outdir + "/" + reg + "/" + service_dir_network + "/"+subnet_file_name)): - commonTools.backup_file(outdir + "/" + reg + "/" + service_dir_network, "import_network",subnet_file_name) - importCommands_subnet[reg] = open(outdir + "/" + reg + "/" + service_dir_network + "/"+subnet_file_name, "w") + if (os.path.exists(outdir + "/" + reg + "/" + service_dir_network + "/" + subnet_file_name)): + commonTools.backup_file(outdir + "/" + reg + "/" + service_dir_network, "import_network", subnet_file_name) + importCommands_subnet[reg] = open(outdir + "/" + reg + "/" + service_dir_network + "/" + subnet_file_name, "w") importCommands_subnet[reg].write("#!/bin/bash") importCommands_subnet[reg].write("\n") importCommands_subnet[reg].write(f'{tf_or_tofu} init') vlan_file_name = "import_commands_network_vlans.sh" - if (os.path.exists(outdir + "/" + reg + "/" + service_dir_vlan + "/"+vlan_file_name)): - commonTools.backup_file(outdir + "/" + reg + "/" + service_dir_vlan, "import_network",vlan_file_name) + if (os.path.exists(outdir + "/" + reg + "/" + service_dir_vlan + "/" + vlan_file_name)): + commonTools.backup_file(outdir + "/" + reg + "/" + service_dir_vlan, "import_network", vlan_file_name) importCommands_vlan[reg] = open(outdir + "/" + reg + "/" + service_dir_vlan + "/" + vlan_file_name, "w") importCommands_vlan[reg].write("\n#!/bin/bash") importCommands_vlan[reg].write("\n") @@ -1289,13 +1326,13 @@ def export_subnets_vlans(inputfile, outdir, service_dir, config, signer, ct, exp # check resources in subnet state state = {'path': f'{outdir}/{reg}/{service_dir_network}', 'resources': []} try: - byteOutput = sp.check_output(tf_state_list, cwd=state["path"],stderr=sp.DEVNULL) + byteOutput = sp.check_output(tf_state_list, cwd=state["path"], stderr=sp.DEVNULL) output = byteOutput.decode('UTF-8').rstrip() for item in output.split('\n'): state["resources"].append(item.replace("\"", "\\\"")) except Exception as e: pass - vnc = VirtualNetworkClient(config=config, retry_strategy=oci.retry.DEFAULT_RETRY_STRATEGY,signer=signer) + vnc = VirtualNetworkClient(config=config, retry_strategy=oci.retry.DEFAULT_RETRY_STRATEGY, signer=signer) region = reg.capitalize() skip_vlans['reg'] = 0 @@ -1421,7 +1458,7 @@ def export_subnets_vlans(inputfile, outdir, service_dir, config, signer, ct, exp check = any(e in tags_list for e in export_tags) # None of Tags from export_tags exist on this instance; Dont export this instance if check == False: - sl_name=sl_id + sl_name = sl_id else: sl_name = vnc.get_security_list(sl_id).data.display_name @@ -1436,7 +1473,7 @@ def export_subnets_vlans(inputfile, outdir, service_dir, config, signer, ct, exp # Fill Subnets tab print_subnets_vlans(values_for_column_subnets_vlans, region, ntk_compartment_name_again, vcn_info.display_name, subnet_info, dhcp_name, - rt_name, sl_names, add_def_seclist, subnet_vlan_in_excel,state) + rt_name, sl_names, add_def_seclist, subnet_vlan_in_excel, state) # VLAN Data if skip_vlans['reg'] == 1: @@ -1444,7 +1481,7 @@ def export_subnets_vlans(inputfile, outdir, service_dir, config, signer, ct, exp # check resources in vlan state state_vlan = {'path': f'{outdir}/{reg}/{service_dir_vlan}', 'resources': []} try: - byteOutput = sp.check_output(tf_state_list, cwd=state_vlan["path"],stderr=sp.DEVNULL) + byteOutput = sp.check_output(tf_state_list, cwd=state_vlan["path"], stderr=sp.DEVNULL) output = byteOutput.decode('UTF-8').rstrip() for item in output.split('\n'): state_vlan["resources"].append(item.replace("\"", "\\\"")) @@ -1492,7 +1529,7 @@ def export_subnets_vlans(inputfile, outdir, service_dir, config, signer, ct, exp # None of Tags from export_tags exist on this instance; Dont export this instance if check == False: - rt_name=rt_id + rt_name = rt_id else: rt_name = vnc.get_route_table(rt_id).data.display_name @@ -1516,7 +1553,7 @@ def export_subnets_vlans(inputfile, outdir, service_dir, config, signer, ct, exp check = any(e in tags_list for e in export_tags) # None of Tags from export_tags exist on this instance; Dont export this instance if check == False: - nsg_name=nsg_id + nsg_name = nsg_id else: nsg_name = vnc.get_network_security_group(nsg_id).data.display_name @@ -1530,7 +1567,7 @@ def export_subnets_vlans(inputfile, outdir, service_dir, config, signer, ct, exp # Fill Subnets tab print_subnets_vlans(values_for_column_subnets_vlans, region, ntk_compartment_name_again, vcn_info.display_name, vlan_info, dhcp_name, - rt_name, nsg_names, add_def_seclist, subnet_vlan_in_excel,state_vlan) + rt_name, nsg_names, add_def_seclist, subnet_vlan_in_excel, state_vlan) commonTools.write_to_cd3(values_for_column_subnets_vlans, cd3file, "SubnetsVLANs") print("SubnetsVLANs exported to CD3\n") @@ -1543,9 +1580,10 @@ def export_subnets_vlans(inputfile, outdir, service_dir, config, signer, ct, exp importCommands_vlan[reg].write(f'\n\n{tf_or_tofu} plan\n') importCommands_vlan[reg].close() -# Execution of the code begins here -def export_networking(inputfile, outdir, service_dir, config, signer, ct, export_compartments=[], export_regions=[],export_tags=[]): +# Execution of the code begins here +def export_networking(inputfile, outdir, service_dir, config, signer, ct, export_compartments=[], export_regions=[], + export_tags=[]): print("\nCD3 excel file should not be opened during export process!!!\n") if len(service_dir) != 0: @@ -1556,20 +1594,33 @@ def export_networking(inputfile, outdir, service_dir, config, signer, ct, export service_dir_nsg = "" # Fetch Major Objects - export_major_objects(inputfile, outdir, service_dir_network, config=config, signer=signer, ct=ct, export_compartments=export_compartments, export_regions=export_regions,export_tags=export_tags) + export_major_objects(inputfile, outdir, service_dir_network, config=config, signer=signer, ct=ct, + export_compartments=export_compartments, export_regions=export_regions, + export_tags=export_tags) # Fetch DHCP - export_dhcp(inputfile, outdir, service_dir_network, config=config, signer=signer, ct=ct, export_compartments=export_compartments, export_regions=export_regions,export_tags=export_tags) + export_dhcp(inputfile, outdir, service_dir_network, config=config, signer=signer, ct=ct, + export_compartments=export_compartments, export_regions=export_regions, export_tags=export_tags) # Fetch Subnets and VLANs - export_subnets_vlans(inputfile, outdir, service_dir, config=config, signer=signer, ct=ct, export_compartments=export_compartments, export_regions=export_regions,export_tags=export_tags) + export_subnets_vlans(inputfile, outdir, service_dir, config=config, signer=signer, ct=ct, + export_compartments=export_compartments, export_regions=export_regions, + export_tags=export_tags) # Fetch RouteRules and SecRules - export_seclist(inputfile, outdir, service_dir_network, config=config, signer=signer, ct=ct, export_compartments=export_compartments, export_regions=export_regions,export_tags=export_tags,_tf_import_cmd=True) + export_seclist(inputfile, outdir, service_dir_network, config=config, signer=signer, ct=ct, + export_compartments=export_compartments, export_regions=export_regions, export_tags=export_tags, + _tf_import_cmd=True) - export_routetable(inputfile, outdir, service_dir_network, config1=config, signer1=signer, ct=ct, export_compartments=export_compartments, export_regions=export_regions,export_tags=export_tags, _tf_import_cmd=True) + export_routetable(inputfile, outdir, service_dir_network, config1=config, signer1=signer, ct=ct, + export_compartments=export_compartments, export_regions=export_regions, export_tags=export_tags, + _tf_import_cmd=True) - export_drg_routetable(inputfile, outdir, service_dir_network, config1=config, signer1=signer, ct=ct, export_compartments=export_compartments, export_regions=export_regions, export_tags=export_tags,_tf_import_cmd=True) + export_drg_routetable(inputfile, outdir, service_dir_network, config1=config, signer1=signer, ct=ct, + export_compartments=export_compartments, export_regions=export_regions, + export_tags=export_tags, _tf_import_cmd=True) # Fetch NSGs - export_nsg(inputfile, outdir, service_dir_nsg, config=config, signer=signer, ct=ct, export_compartments=export_compartments, export_regions=export_regions, export_tags=export_tags,_tf_import_cmd=True) \ No newline at end of file + export_nsg(inputfile, outdir, service_dir_nsg, config=config, signer=signer, ct=ct, + export_compartments=export_compartments, export_regions=export_regions, export_tags=export_tags, + _tf_import_cmd=True) diff --git a/cd3_automation_toolkit/Security/Firewall/fwpolicy_create_tunnelinspection.py b/cd3_automation_toolkit/Security/Firewall/fwpolicy_create_tunnelinspection.py new file mode 100644 index 000000000..aa9689dd6 --- /dev/null +++ b/cd3_automation_toolkit/Security/Firewall/fwpolicy_create_tunnelinspection.py @@ -0,0 +1,178 @@ +#!/usr/bin/python3 +# Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved. +# +# This script will produce a Terraform file that will be used to set up OCI core components +# firewall, Listeners +# +# Author: Suruchi Singla +# Oracle Consulting +# +from oci.config import DEFAULT_LOCATION +from pathlib import Path +from commonTools import * +from jinja2 import Environment, FileSystemLoader +import os + +###### +# Required Inputs-CD3 excel file, Config file AND outdir +###### + +# Execution of the code begins here +def fwpolicy_create_tunnelinspect(inputfile, outdir, service_dir, prefix, ct): + # Load the template file + file_loader = FileSystemLoader(f'{Path(__file__).parent}/templates') + env = Environment(loader=file_loader, keep_trailing_newline=True) + tunnelinspect = env.get_template('policy-tunnelinspect-template') + + + sheetName = "Firewall-Policy-TunnelInspect" + tunnelinspect_auto_tfvars_filename = prefix + "_"+sheetName.lower()+".auto.tfvars" + + filename = inputfile + + outfile = {} + oname = {} + tunnelinspect_str = {} + tunnelinspect_names = {} + + + # Read cd3 using pandas dataframe + df, col_headers = commonTools.read_cd3(filename, sheetName) + + df = df.dropna(how='all') + df = df.reset_index(drop=True) + + + for reg in ct.all_regions: + tunnelinspect_str[reg] = '' + tunnelinspect_names[reg] = [] + reg_out_dir = outdir + "/" + reg + "/" + service_dir + resource = sheetName.lower() + commonTools.backup_file(reg_out_dir, resource, tunnelinspect_auto_tfvars_filename) + + + # List of the column headers + dfcolumns = df.columns.values.tolist() + + region_seen_so_far = [] + region_list = [] + + for i in df.index: + region = str(df.loc[i, 'Region']) + region = region.strip().lower() + if region.lower() != 'nan' and region in ct.all_regions: + region = region.strip().lower() + if region not in region_seen_so_far: + region_list.append(region) + region_seen_so_far.append(region) + if region in commonTools.endNames: + break + if region != 'nan' and region not in ct.all_regions: + print("\nInvalid Region; It should be one of the regions tenancy is subscribed to...Exiting!!") + exit() + + + + + # temporary dictionaries + tempStr= {} + tempdict= {} + dst_id = '' + src_id = '' + + + + # Fetch data; loop through columns + for columnname in dfcolumns: + + # Column value + columnvalue = str(df[columnname][i]).strip() + + # Check for boolean/null in column values + columnvalue = commonTools.check_columnvalue(columnvalue) + + # Check for multivalued columns + tempdict = commonTools.check_multivalues_columnvalue(columnvalue,columnname,tempdict) + + + if columnname == "Firewall Policy": + policy_tf_name = commonTools.check_tf_variable(columnvalue) + tempdict = {'policy_tf_name': policy_tf_name} + + if columnname == "Rule Name": + rule_tf_name = commonTools.check_tf_variable(columnvalue) + tempdict = {'rule_tf_name': rule_tf_name,'rule_name':columnvalue} + + if columnname == "Source Address": + if columnvalue != '': + srcaddrs = str(columnvalue).strip().split(",") + if len(srcaddrs) == 1: + for src in srcaddrs: + src_id = "\"" + src.strip() + "\"" + + elif len(srcaddrs) >= 2: + c = 1 + for src in srcaddrs: + data = "\"" + src.strip() + "\"" + + if c == len(srcaddrs): + src_id = src_id + data + else: + src_id = src_id + data + "," + c += 1 + columnvalue = src_id + tempdict = {'src_address': src_id} + + if columnname == "Destination Address": + if columnvalue != '': + dstaddrs = str(columnvalue).strip().split(",") + if len(dstaddrs) == 1: + for dst in dstaddrs: + dst_id = "\"" + dst.strip() + "\"" + + elif len(dstaddrs) >= 2: + c = 1 + for dst in dstaddrs: + data = "\"" + dst.strip() + "\"" + + if c == len(dstaddrs): + dst_id = dst_id + data + else: + dst_id = dst_id + data + "," + c += 1 + columnvalue = dst_id + tempdict = {'dst_address': dst_id} + + + if columnname == "Action": + tempdict = {'action': columnvalue} + + if columnname == "Position": + if columnvalue != '': + position = str(columnvalue).strip().split("::") + placement = position[0] + rule_place = position[1] + tempdict = {'placement': placement, 'rule_place': rule_place} + + columnname = commonTools.check_column_headers(columnname) + tempStr[columnname] = str(columnvalue).strip() + tempStr.update(tempdict) + + + tunnelinspect_str[region] = tunnelinspect_str[region] + tunnelinspect.render(tempStr) + + for reg in region_list: + reg_out_dir = outdir + "/" + reg + "/" + service_dir + if not os.path.exists(reg_out_dir): + os.makedirs(reg_out_dir) + outfile[reg] = reg_out_dir + "/" + tunnelinspect_auto_tfvars_filename + if tunnelinspect_str[reg] != '': + # Generate Final String + src = "##Add New Tunnel inspection rules for " + reg.lower() + " here##" + tunnelinspect_str[reg] = tunnelinspect.render(count=0, region=reg).replace(src, tunnelinspect_str[reg] + "\n" + src) + tunnelinspect_str[reg] = "".join([s for s in tunnelinspect_str[reg].strip().splitlines(True) if s.strip("\r\n").strip()]) + tunnelinspect_str[reg] = "\n\n" + tunnelinspect_str[reg] + oname[reg] = open(outfile[reg], 'a') + oname[reg].write(tunnelinspect_str[reg]) + oname[reg].close() + print(outfile[reg] + " containing TF for Firewall Policy tunnel inspection rules has been updated for region " + reg) diff --git a/cd3_automation_toolkit/Security/Firewall/templates/policy-tunnelinspect-template b/cd3_automation_toolkit/Security/Firewall/templates/policy-tunnelinspect-template new file mode 100644 index 000000000..c6d4b5879 --- /dev/null +++ b/cd3_automation_toolkit/Security/Firewall/templates/policy-tunnelinspect-template @@ -0,0 +1,37 @@ +{% if count == 0 %} +# Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. +############################# +# Firewall Policy Tunnel inspection Rules +# Firewall Policy Tunnel inspection Rule - tfvars +# Allowed Values: +# network_firewall_policy_id can be the ocid or the name of the firewall Policy that needs to be attached to the Firewall +# action can be INSPECT_AND_CAPTURE_LOG or INSPECT +# Sample import command for Firewall Policy Tunnel inspection Rules: +# terraform import "module.decryption_rules[\"<>\"].oci_network_firewall_network_firewall_policy_tunnel_inspection_rule.network_firewall_policy_tunnel_inspection_rule\" networkFirewallPolicies/<>/tunnelInspectionRules/<> +############################ + +tunnelinspect_rules = { + ##Add New Tunnel inspection rules for {{ region|lower }} here## +} +{% else %} + {% if rule_name != "" and rule_name != "nan" and rule_name != null %} + {{ policy_tf_name }}_{{rule_tf_name}} = { + rule_name = "{{ rule_name }}" + action = "{{ action }}" + network_firewall_policy_id = "{{ policy_tf_name }}" + condition = [{ + {% if source_address != '' %} + source_address = [{{ src_address }}] + {% endif %} + {% if destination_address != '' %} + destination_address = [{{ dst_address }}] + {% endif %} + }] + protocol = "VXLAN" + {% if position != '' %} + {{placement}} = "{{ rule_place }}" + {% endif %} + }, + {% endif %} +{% endif %} diff --git a/cd3_automation_toolkit/setUpOCI.py b/cd3_automation_toolkit/setUpOCI.py index c9fb8e961..8a4e8696f 100644 --- a/cd3_automation_toolkit/setUpOCI.py +++ b/cd3_automation_toolkit/setUpOCI.py @@ -362,7 +362,7 @@ def export_all(prim_options=[]): export_dns_management(prim_options=["Export DNS Views/Zones/Records","Export DNS Resolvers"],export_all=True) export_compute(prim_options=["Export Dedicated VM Hosts","Export Instances (excludes instances launched by OKE)"],export_all=True) export_storage(prim_options=["Export Block Volumes/Block Backup Policy","Export File Systems","Export Object Storage Buckets"],export_all=True) - export_databases(prim_options=["Export Virtual Machine or Bare Metal DB Systems","Export EXA Infra and EXA VMClusters",'Export ADBs']) + export_databases(prim_options=["Export Virtual Machine or Bare Metal DB Systems","Export EXA Infra and EXA VMClusters",'Export ADBs','Export MySQL DBs']) export_loadbalancer(prim_options=["Export Load Balancers","Export Network Load Balancers"]) export_developer_services(prim_options=["Export OKE cluster and Nodepools"]) export_security(prim_options=["Export KMS (Keys/Vaults)"]) @@ -560,6 +560,12 @@ def export_major_objects(inputfile, outdir, config, signer, ct, export_regions,e ] execute_options(options, inputfile, outdir, service_dir_network, prefix, ct, non_gf_tenancy,network_connectivity_in_setupoci='', modify_network=False) + options = [ + Option(None, Network.modify_terraform_drg_routerules, 'Processing DRGRouteRulesinOCI Tab'), + ] + execute_options(options, inputfile, outdir, service_dir_network, prefix, ct, non_gf_tenancy) + + print("\n\nExecute import_commands_network_major-objects.sh and import_commands_network_drg_routerules.sh scripts created under each region directory to synch TF with OCI Network objects\n") def export_dhcp(inputfile, outdir,config,signer,ct,export_regions,export_tags_list): @@ -806,8 +812,8 @@ def export_kms(inputfile, outdir, config, signer, ct, export_regions,export_tags def export_databases(prim_options=[]): options = [Option("Export Virtual Machine or Bare Metal DB Systems",export_dbsystems_vm_bm,'Exporting VM and BM DB Systems'), Option("Export EXA Infra and EXA VMClusters", export_exa_infra_vmclusters, 'Exporting EXA Infra and EXA VMClusters'), - Option('Export ADBs', export_adbs, 'Exporting Autonomous Databases'), - Option('Export MysqlDBs', export_mysqlDBs, 'Exporting MySql Databases')] + Option('Export ADBs', export_adbs, 'Exporting Autonomous Databases'), + Option('Export MySQL DBs', export_mysql, 'Exporting MySQL Databases and Configurations')] if prim_options: options = match_options(options, prim_options) else: @@ -844,30 +850,18 @@ def export_adbs(inputfile, outdir,config, signer, ct, export_regions,export_tags # Update modified path list update_path_list(regions_path=export_regions, service_dirs=[service_dir_adb]) -def export_mysql(inputfile, outdir, config, signer, ct, export_regions): - compartments = ct.get_compartment_map(var_file, 'mysql-dbsystem') # Keep using var_file like ADB - Database.export_mysql(inputfile, outdir, service_dir_mysql_dbsystem, config,signer,ct, export_compartments=compartments, export_regions= export_regions) - print("\n\nExecute import_commands_mysql-dbsystem.sh script created under each region directory to synch TF with OCI MySQLs\n") - # Update modified path list - update_path_list(regions_path=export_regions, service_dirs=[service_dir_mysql_dbsystem]) -def export_mysql_configuration(inputfile, outdir, config, signer, ct, export_regions): - compartments = ct.get_compartment_map(var_file, 'mysql-configuration') # Keep using var_file like ADB - Database.export_mysql_configuration(inputfile, outdir, service_dir_mysql_dbsystem, config,signer,ct, export_compartments=compartments, export_regions= export_regions) - options = [Option(None, Database.create_terraform_mysql_configuration, 'Processing MySQL configuration Tab')] - execute_options(options, inputfile, outdir, service_dir_mysql_dbsystem, setUpOCI_props.get('Default', 'prefix').strip(), ct) - print("\n\nExecute import_commands_mysql_configuration.sh script created under each region directory to synch TF with OCI MySQL Configurations\n") - # Update modified path list +def export_mysql(inputfile, outdir,config,signer, ct,export_regions,export_tags_list): + #compartments = ct.get_compartment_map(var_file, 'MySQL DB Systems and Configurations') + Database.export_mysql_db(inputfile, outdir, service_dir_mysql_dbsystem, config, signer, ct, + export_compartments=compartments, export_regions=export_regions, export_tags=export_tags_list) + Database.export_mysql_configuration(inputfile, outdir, service_dir_mysql_dbsystem, config, signer, ct, + export_compartments=compartments, export_regions=export_regions, export_tags=export_tags_list) + options = [Option(None, create_mysql, '')] + execute_options(options,execute_all=True) + print("\n\nExecute import_commands_mysql-dbsystems.sh and import_commands_mysql-configurations.sh scripts created under each region directory to synch TF with OCI MySQLs\n") update_path_list(regions_path=export_regions, service_dirs=[service_dir_mysql_dbsystem]) -def export_mysqlDBs(inputfile=None, outdir=None, config=None, signer=None, ct=None, export_regions=None, prim_options=[]): - options = [Option("Export Mysql DB system", export_mysql,'Exporting Mysql DB system'), - Option("Export Mysql Configuration", export_mysql_configuration, 'Exporting Mysql Configuration')] - if prim_options: - options = match_options(options, prim_options) - else: - options = show_options(options, quit=True, menu=True, index=1) - execute_options(options, inputfile, outdir, config, signer, ct, export_regions) def export_management_services(prim_options=[]): options = [Option("Export Notifications",export_notifications,'Exporting Notifications'), @@ -1410,7 +1404,7 @@ def create_databases(execute_all=False,prim_options=[]): Option('Add/Modify/Delete Virtual Machine or Bare Metal DB Systems', create_dbsystems_vm_bm, 'Processing DBSystems-VM-BM Tab'), Option('Add/Modify/Delete EXA Infra and EXA VM Clusters', create_exa_infra_vmclusters, ''), Option('Add/Modify/Delete ADBs', create_adb, 'Processing ADB Tab'), - Option('Add/Modify/Delete MysqlDBs', create_mysql,'Processing Mysql Tab'), + Option('Add/Modify/Delete MySQL DBs', create_mysql,''), ] if prim_options: options = match_options(options, prim_options) @@ -1440,8 +1434,8 @@ def create_adb(): def create_mysql(execute_all=False,prim_options=[]): options = [ - Option('Add/Modify/Delete MysqlDBs', Database.create_terraform_mysql, 'Processing MysqlDBs'), - Option('Add/Modify/Delete Mysql Configuration', Database.create_terraform_mysql_configuration, 'Processing Mysql Configuration'), + Option('Add/Modify/Delete MySQL DB Systems', Database.create_terraform_mysql_db, 'Processing MySQL-DBSystems Tab'), + Option('Add/Modify/Delete MySQL Configurations', Database.create_terraform_mysql_configuration, 'Processing MySQL-Configurations Tab'), ] if prim_options: options = match_options(options, prim_options) diff --git a/cd3_automation_toolkit/user-scripts/.outdir_structure_file.properties b/cd3_automation_toolkit/user-scripts/.outdir_structure_file.properties new file mode 100644 index 000000000..ca979e620 --- /dev/null +++ b/cd3_automation_toolkit/user-scripts/.outdir_structure_file.properties @@ -0,0 +1,36 @@ +[Default] +# Format +# OCI_Service_Name=Directory_Name +# Do not Modify the OCI Service Names specified on Left Hand Side +# Modify the directory name specified on Right Hand Side +# Directory will be created for that service under directory. Do not provide absolute path. +# Below data shows the segregation of services as per best practices. Please change as per your requirements. +# You will have to run createTenancy.py from scratch if you want to make any changes to the directory structure later. +# It is mandatory to specify the directory name for each service. + +identity=identity +tagging=tagging +network=network +quota=quota +loadbalancer=loadbalancer +networkloadbalancer=loadbalancer +vlan=vlan +nsg=nsg +# Same Directory must be specified for Instances and Block Volumes. +instance=compute +block-volume = compute +dedicated-vm-host=compute +adb=database +mysql-dbsystem=database +dbsystem-vm-bm=database +database-exacs=database +fss=fss +oke=oke +sddc=ocvs +cloud-guard=security +managementservices=managementservices +budget=budget +kms=kms +object-storage=oss +dns=dns +firewall=firewall \ No newline at end of file diff --git a/cd3_automation_toolkit/user-scripts/terraform/modules/database/mysql-configuration/data.tf b/cd3_automation_toolkit/user-scripts/terraform/modules/database/mysql-configuration/data.tf new file mode 100755 index 000000000..cb4adedf4 --- /dev/null +++ b/cd3_automation_toolkit/user-scripts/terraform/modules/database/mysql-configuration/data.tf @@ -0,0 +1,14 @@ +############################ +# Data Block - Database +# Create MySQL Configurations +############################ + +data "oci_mysql_shapes" "mysql_config_shapes" { + #Required + compartment_id = var.compartment_id +} +data "oci_core_shapes" "present_ad" { + compartment_id = var.compartment_id + +} + diff --git a/cd3_automation_toolkit/user-scripts/terraform/modules/database/mysql-configuration/main.tf b/cd3_automation_toolkit/user-scripts/terraform/modules/database/mysql-configuration/main.tf new file mode 100755 index 000000000..0fa486d3a --- /dev/null +++ b/cd3_automation_toolkit/user-scripts/terraform/modules/database/mysql-configuration/main.tf @@ -0,0 +1,101 @@ +# Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. +# +############################ +# Resource Block - Database +# Create MySQL Configurations +############################ + +resource "oci_mysql_mysql_configuration" "mysql_configuration" { + #Required + compartment_id = var.compartment_id + shape_name = var.mysql_configuration_shape_name + + #Optional + defined_tags = var.defined_tags + description = var.mysql_configuration_description + display_name = var.mysql_configuration_display_name + freeform_tags = var.freeform_tags + init_variables { + + #Optional + lower_case_table_names = var.mysql_configuration_init_variables_lower_case_table_names + } + + variables { + + #Optional + autocommit = var.mysql_configuration_variables_autocommit + big_tables = var.mysql_configuration_variables_big_tables + binlog_expire_logs_seconds = var.mysql_configuration_variables_binlog_expire_logs_seconds + binlog_row_metadata = var.mysql_configuration_variables_binlog_row_metadata + binlog_row_value_options = var.mysql_configuration_variables_binlog_row_value_options + binlog_transaction_compression = var.mysql_configuration_variables_binlog_transaction_compression + completion_type = var.mysql_configuration_variables_completion_type + connect_timeout = var.mysql_configuration_variables_connect_timeout + connection_memory_chunk_size = var.mysql_configuration_variables_connection_memory_chunk_size + connection_memory_limit = var.mysql_configuration_variables_connection_memory_limit + cte_max_recursion_depth = var.mysql_configuration_variables_cte_max_recursion_depth + default_authentication_plugin = var.mysql_configuration_variables_default_authentication_plugin + foreign_key_checks = var.mysql_configuration_variables_foreign_key_checks + global_connection_memory_limit = var.mysql_configuration_variables_global_connection_memory_limit + global_connection_memory_tracking = var.mysql_configuration_variables_global_connection_memory_tracking + group_replication_consistency = var.mysql_configuration_variables_group_replication_consistency + information_schema_stats_expiry = var.mysql_configuration_variables_information_schema_stats_expiry + innodb_buffer_pool_dump_pct = var.mysql_configuration_variables_innodb_buffer_pool_dump_pct + innodb_buffer_pool_instances = var.mysql_configuration_variables_innodb_buffer_pool_instances + innodb_buffer_pool_size = var.mysql_configuration_variables_innodb_buffer_pool_size + innodb_ddl_buffer_size = var.mysql_configuration_variables_innodb_ddl_buffer_size + innodb_ddl_threads = var.mysql_configuration_variables_innodb_ddl_threads + innodb_ft_enable_stopword = var.mysql_configuration_variables_innodb_ft_enable_stopword + innodb_ft_max_token_size = var.mysql_configuration_variables_innodb_ft_max_token_size + innodb_ft_min_token_size = var.mysql_configuration_variables_innodb_ft_min_token_size + innodb_ft_num_word_optimize = var.mysql_configuration_variables_innodb_ft_num_word_optimize + innodb_ft_result_cache_limit = var.mysql_configuration_variables_innodb_ft_result_cache_limit + innodb_ft_server_stopword_table = var.mysql_configuration_variables_innodb_ft_server_stopword_table + innodb_lock_wait_timeout = var.mysql_configuration_variables_innodb_lock_wait_timeout + innodb_log_writer_threads = var.mysql_configuration_variables_innodb_log_writer_threads + innodb_max_purge_lag = var.mysql_configuration_variables_innodb_max_purge_lag + innodb_max_purge_lag_delay = var.mysql_configuration_variables_innodb_max_purge_lag_delay + innodb_stats_persistent_sample_pages = var.mysql_configuration_variables_innodb_stats_persistent_sample_pages + innodb_stats_transient_sample_pages = var.mysql_configuration_variables_innodb_stats_transient_sample_pages + interactive_timeout = var.mysql_configuration_variables_interactive_timeout + local_infile = var.mysql_configuration_variables_local_infile + mandatory_roles = var.mysql_configuration_variables_mandatory_roles + max_allowed_packet = var.mysql_configuration_variables_max_allowed_packet + max_binlog_cache_size = var.mysql_configuration_variables_max_binlog_cache_size + max_connect_errors = var.mysql_configuration_variables_max_connect_errors + max_connections = var.mysql_configuration_variables_max_connections + max_execution_time = var.mysql_configuration_variables_max_execution_time + max_heap_table_size = var.mysql_configuration_variables_max_heap_table_size + max_prepared_stmt_count = var.mysql_configuration_variables_max_prepared_stmt_count + mysql_firewall_mode = var.mysql_configuration_variables_mysql_firewall_mode + mysqlx_connect_timeout = var.mysql_configuration_variables_mysqlx_connect_timeout + mysqlx_deflate_default_compression_level = var.mysql_configuration_variables_mysqlx_deflate_default_compression_level + mysqlx_deflate_max_client_compression_level = var.mysql_configuration_variables_mysqlx_deflate_max_client_compression_level + mysqlx_enable_hello_notice = var.mysql_configuration_variables_mysqlx_enable_hello_notice + mysqlx_interactive_timeout = var.mysql_configuration_variables_mysqlx_interactive_timeout + mysqlx_lz4default_compression_level = var.mysql_configuration_variables_mysqlx_lz4default_compression_level + mysqlx_lz4max_client_compression_level = var.mysql_configuration_variables_mysqlx_lz4max_client_compression_level + mysqlx_max_allowed_packet = var.mysql_configuration_variables_mysqlx_max_allowed_packet + mysqlx_read_timeout = var.mysql_configuration_variables_mysqlx_read_timeout + mysqlx_wait_timeout = var.mysql_configuration_variables_mysqlx_wait_timeout + mysqlx_write_timeout = var.mysql_configuration_variables_mysqlx_write_timeout + mysqlx_zstd_default_compression_level = var.mysql_configuration_variables_mysqlx_zstd_default_compression_level + mysqlx_zstd_max_client_compression_level = var.mysql_configuration_variables_mysqlx_zstd_max_client_compression_level + net_read_timeout = var.mysql_configuration_variables_net_read_timeout + net_write_timeout = var.mysql_configuration_variables_net_write_timeout + parser_max_mem_size = var.mysql_configuration_variables_parser_max_mem_size + regexp_time_limit = var.mysql_configuration_variables_regexp_time_limit + sort_buffer_size = var.mysql_configuration_variables_sort_buffer_size + sql_mode = var.mysql_configuration_variables_sql_mode + sql_require_primary_key = var.mysql_configuration_variables_sql_require_primary_key + sql_warnings = var.mysql_configuration_variables_sql_warnings + thread_pool_dedicated_listeners = var.mysql_configuration_variables_thread_pool_dedicated_listeners + thread_pool_max_transactions_limit = var.mysql_configuration_variables_thread_pool_max_transactions_limit + time_zone = var.mysql_configuration_variables_time_zone + tmp_table_size = var.mysql_configuration_variables_tmp_table_size + transaction_isolation = var.mysql_configuration_variables_transaction_isolation + wait_timeout = var.mysql_configuration_variables_wait_timeout + } +} \ No newline at end of file diff --git a/cd3_automation_toolkit/user-scripts/terraform/modules/database/mysql-configuration/oracle_provider_req.tf b/cd3_automation_toolkit/user-scripts/terraform/modules/database/mysql-configuration/oracle_provider_req.tf new file mode 100644 index 000000000..f1f97aaeb --- /dev/null +++ b/cd3_automation_toolkit/user-scripts/terraform/modules/database/mysql-configuration/oracle_provider_req.tf @@ -0,0 +1,10 @@ +# Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. +# +terraform { + required_providers { + oci = { + source = "oracle/oci" + } + } +} \ No newline at end of file diff --git a/cd3_automation_toolkit/user-scripts/terraform/modules/database/mysql-configuration/outputs.tf b/cd3_automation_toolkit/user-scripts/terraform/modules/database/mysql-configuration/outputs.tf new file mode 100755 index 000000000..c07292b0b --- /dev/null +++ b/cd3_automation_toolkit/user-scripts/terraform/modules/database/mysql-configuration/outputs.tf @@ -0,0 +1,17 @@ +# Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. +# +############################ +# Output Block - Database +# Create MySQL Configurations +############################ + +output "db_system_configuration_id" { + description = "The OCID of the MySQL DB configuration." + value = oci_mysql_mysql_configuration.mysql_configuration.id +} + +output "db_system_configuration" { + description = "The display name of the MySQL configuration." + value = oci_mysql_mysql_configuration.mysql_configuration.display_name +} diff --git a/cd3_automation_toolkit/user-scripts/terraform/modules/database/mysql-configuration/variables.tf b/cd3_automation_toolkit/user-scripts/terraform/modules/database/mysql-configuration/variables.tf new file mode 100755 index 000000000..b3e505198 --- /dev/null +++ b/cd3_automation_toolkit/user-scripts/terraform/modules/database/mysql-configuration/variables.tf @@ -0,0 +1,405 @@ +# Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. +# +############################ +# Variables Block - Database +# Create MySQL Configurations +############################ + +variable "defined_tags" { + type = map(any) + default = null +} + +variable "freeform_tags" { + type = map(any) + default = null +} + +variable "mysql_configuration_description" { + type = string + + default = null +} + +variable "compartment_id" { + type = string + default = null +} + +variable "mysql_configuration_shape_name" { + type = string + default = null + +} +variable "mysql_configuration_display_name" { + type = string + default = null + +} +variable "mysql_configuration_init_variables_lower_case_table_names" { + type = string + default = null + + +} +variable "mysql_configuration_variables_autocommit" { + type = string +default = null + +} +variable "mysql_configuration_variables_big_tables" { + type = string +default = null + +} +variable "mysql_configuration_variables_binlog_expire_logs_seconds" { + type = string +default = null + +} +variable "mysql_configuration_variables_binlog_row_metadata" { + type = string +default = null + +} +variable "mysql_configuration_variables_binlog_row_value_options" { + type = string +default = null + +} +variable "mysql_configuration_variables_binlog_transaction_compression" { + type = string +default = null + +} +variable "mysql_configuration_variables_completion_type" { + type = string +default = null + +} +variable "mysql_configuration_variables_connect_timeout" { + type = string +default = null + +} +variable "mysql_configuration_variables_connection_memory_chunk_size" { + type = string +default = null + +} +variable "mysql_configuration_variables_connection_memory_limit" { + type = string +default = null + +} +variable "mysql_configuration_variables_cte_max_recursion_depth" { + type = string +default = null + +} +variable "mysql_configuration_variables_default_authentication_plugin" { + type = string +default = null + +} +variable "mysql_configuration_variables_foreign_key_checks" { + type = string +default = null + +} +variable "mysql_configuration_variables_global_connection_memory_limit" { + type = string +default = null + +} +variable "mysql_configuration_variables_global_connection_memory_tracking" { + type = string +default = null + +} +variable "mysql_configuration_variables_group_replication_consistency" { + type = string +default = null + +} +variable "mysql_configuration_variables_information_schema_stats_expiry" { + type = string +default = null + +} +variable "mysql_configuration_variables_innodb_buffer_pool_dump_pct" { + type = string +default = null + +} +variable "mysql_configuration_variables_innodb_buffer_pool_instances" { + type = string +default = null + +} +variable "mysql_configuration_variables_innodb_buffer_pool_size" { + type = string +default = null + +} +variable "mysql_configuration_variables_innodb_ddl_buffer_size" { + type = string +default = null + +} +variable "mysql_configuration_variables_innodb_ddl_threads" { + type = string +default = null + +} +variable "mysql_configuration_variables_innodb_ft_enable_stopword" { + type = string +default = null + +} +variable "mysql_configuration_variables_innodb_ft_max_token_size" { + type = string +default = null + +} +variable "mysql_configuration_variables_innodb_ft_min_token_size" { + type = string +default = null + +} +variable "mysql_configuration_variables_innodb_ft_num_word_optimize" { + type = string +default = null + +} +variable "mysql_configuration_variables_innodb_ft_result_cache_limit" { + type = string +default = null + +} +variable "mysql_configuration_variables_innodb_ft_server_stopword_table" { + type = string +default = null + +} +variable "mysql_configuration_variables_innodb_lock_wait_timeout" { + type = string +default = null + +} +variable "mysql_configuration_variables_innodb_log_writer_threads" { + type = string +default = null + +} +variable "mysql_configuration_variables_innodb_max_purge_lag" { + type = string +default = null + +} +variable "mysql_configuration_variables_innodb_max_purge_lag_delay" { + type = string +default = null + +} +variable "mysql_configuration_variables_innodb_stats_persistent_sample_pages" { + type = string +default = null + +} +variable "mysql_configuration_variables_innodb_stats_transient_sample_pages" { + type = string +default = null + +} +variable "mysql_configuration_variables_interactive_timeout" { + type = string +default = null + +} +variable "mysql_configuration_variables_local_infile" { + type = string +default = null + +} +variable "mysql_configuration_variables_mandatory_roles" { + type = string +default = null + +} +variable "mysql_configuration_variables_max_allowed_packet" { + type = string +default = null + +} +variable "mysql_configuration_variables_max_binlog_cache_size" { + type = string +default = null + +} +variable "mysql_configuration_variables_max_connect_errors" { + type = string +default = null + +} +variable "mysql_configuration_variables_max_connections" { + type = string +default = null + +} +variable "mysql_configuration_variables_max_execution_time" { + type = string +default = null + +} +variable "mysql_configuration_variables_max_heap_table_size" { + type = string +default = null + +} +variable "mysql_configuration_variables_max_prepared_stmt_count" { + type = string +default = null + +} +variable "mysql_configuration_variables_mysql_firewall_mode" { + type = string +default = null + +} +variable "mysql_configuration_variables_mysqlx_connect_timeout" { + type = string +default = null + +} +variable "mysql_configuration_variables_mysqlx_deflate_default_compression_level" { + type = string +default = null + +} +variable "mysql_configuration_variables_mysqlx_deflate_max_client_compression_level" { + type = string +default = null + +} +variable "mysql_configuration_variables_mysqlx_enable_hello_notice" { + type = string +default = null + +} +variable "mysql_configuration_variables_mysqlx_interactive_timeout" { + type = string +default = null + +} +variable "mysql_configuration_variables_mysqlx_lz4default_compression_level" { + type = string +default = null + +} +variable "mysql_configuration_variables_mysqlx_lz4max_client_compression_level" { + type = string +default = null + +} +variable "mysql_configuration_variables_mysqlx_max_allowed_packet" { + type = string +default = null + +} +variable "mysql_configuration_variables_mysqlx_read_timeout" { + type = string +default = null + +} +variable "mysql_configuration_variables_mysqlx_wait_timeout" { + type = string +default = null + +} +variable "mysql_configuration_variables_mysqlx_write_timeout" { + type = string +default = null + +} +variable "mysql_configuration_variables_mysqlx_zstd_default_compression_level" { + type = string +default = null + +} +variable "mysql_configuration_variables_mysqlx_zstd_max_client_compression_level" { + type = string +default = null + +} +variable "mysql_configuration_variables_net_read_timeout" { + type = string +default = null + +} +variable "mysql_configuration_variables_net_write_timeout" { + type = string +default = null + +} +variable "mysql_configuration_variables_parser_max_mem_size" { + type = string +default = null + +} +variable "mysql_configuration_variables_regexp_time_limit" { + type = string +default = null + +} +variable "mysql_configuration_variables_sort_buffer_size" { + type = string +default = null + +} +variable "mysql_configuration_variables_sql_mode" { + type = string +default = null + +} +variable "mysql_configuration_variables_sql_require_primary_key" { + type = string +default = null + +} +variable "mysql_configuration_variables_sql_warnings" { + type = string +default = null + +} +variable "mysql_configuration_variables_thread_pool_dedicated_listeners" { + type = string +default = null + +} +variable "mysql_configuration_variables_thread_pool_max_transactions_limit" { + type = string +default = null + +} +variable "mysql_configuration_variables_time_zone" { + type = string +default = null + +} +variable "mysql_configuration_variables_tmp_table_size" { + type = string +default = null + +} +variable "mysql_configuration_variables_transaction_isolation" { + type = string +default = null + +} +variable "mysql_configuration_variables_wait_timeout" { + type = string + default = null + +} diff --git a/cd3_automation_toolkit/user-scripts/terraform/modules/database/mysql-dbsystem/data.tf b/cd3_automation_toolkit/user-scripts/terraform/modules/database/mysql-dbsystem/data.tf new file mode 100755 index 000000000..b568645d8 --- /dev/null +++ b/cd3_automation_toolkit/user-scripts/terraform/modules/database/mysql-dbsystem/data.tf @@ -0,0 +1,14 @@ +# Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. +# +############################ +# Data Block - Database +# Create MySQL DB Systems +############################ + + +data "oci_core_vcns" "oci_vcns_instances" { + for_each = { for vcn in var.vcn_names : vcn => vcn } + compartment_id = var.network_compartment_id != null ? var.network_compartment_id : var.compartment_id + display_name = each.value +} diff --git a/cd3_automation_toolkit/user-scripts/terraform/modules/database/mysql-dbsystem/main.tf b/cd3_automation_toolkit/user-scripts/terraform/modules/database/mysql-dbsystem/main.tf new file mode 100755 index 000000000..99a7cd8d2 --- /dev/null +++ b/cd3_automation_toolkit/user-scripts/terraform/modules/database/mysql-dbsystem/main.tf @@ -0,0 +1,64 @@ +# Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. +# +############################ +# Resource Block - Database +# Create MySQL DB Systems +############################ + +resource "oci_mysql_mysql_db_system" "db_system" { + availability_domain = var.availability_domain + compartment_id = var.compartment_id + shape_name = var.shape_name + subnet_id = var.subnet_id + + admin_password = var.admin_password + admin_username = var.admin_username + + backup_policy { + is_enabled = var.backup_policy_is_enabled + pitr_policy { + is_enabled = var.pitr_policy_is_enabled + } + retention_in_days = var.backup_policy_retention_in_days + window_start_time = var.backup_policy_window_start_time + } + + configuration_id = var.configuration_id + crash_recovery = var.crash_recovery + data_storage_size_in_gb = var.data_storage_size_in_gb + database_management = var.database_management + + defined_tags = var.defined_tags + + deletion_policy { + automatic_backup_retention = var.deletion_policy_automatic_backup_retention + final_backup = var.deletion_policy_final_backup + is_delete_protected = var.deletion_policy_is_delete_protected + } + + description = var.description + display_name = var.display_name + fault_domain = var.fault_domain + freeform_tags = var.freeform_tags + hostname_label = var.hostname_label + ip_address = var.ip_address + is_highly_available = var.is_highly_available + + maintenance { + window_start_time = var.maintenance_window_start_time + } + + port = var.port + port_x = var.port_x +/* + source { + source_type = var.source_type + backup_id = var.backup_id + } + + */ +} + + + diff --git a/cd3_automation_toolkit/user-scripts/terraform/modules/database/mysql-dbsystem/oracle_provider_req.tf b/cd3_automation_toolkit/user-scripts/terraform/modules/database/mysql-dbsystem/oracle_provider_req.tf new file mode 100644 index 000000000..f1f97aaeb --- /dev/null +++ b/cd3_automation_toolkit/user-scripts/terraform/modules/database/mysql-dbsystem/oracle_provider_req.tf @@ -0,0 +1,10 @@ +# Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. +# +terraform { + required_providers { + oci = { + source = "oracle/oci" + } + } +} \ No newline at end of file diff --git a/cd3_automation_toolkit/user-scripts/terraform/modules/database/mysql-dbsystem/outputs.tf b/cd3_automation_toolkit/user-scripts/terraform/modules/database/mysql-dbsystem/outputs.tf new file mode 100755 index 000000000..2d9e24013 --- /dev/null +++ b/cd3_automation_toolkit/user-scripts/terraform/modules/database/mysql-dbsystem/outputs.tf @@ -0,0 +1,17 @@ +# Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. +# +############################ +# Output Block - Database +# Create MySQL DB Systems +############################ + +output "db_system_id" { + description = "The OCID of the MySQL DB system." + value = oci_mysql_mysql_db_system.db_system.id +} + +output "db_system_hostname" { + description = "The hostname of the MySQL DB system." + value = oci_mysql_mysql_db_system.db_system.hostname_label +} diff --git a/cd3_automation_toolkit/user-scripts/terraform/modules/database/mysql-dbsystem/variables.tf b/cd3_automation_toolkit/user-scripts/terraform/modules/database/mysql-dbsystem/variables.tf new file mode 100755 index 000000000..b0203fee7 --- /dev/null +++ b/cd3_automation_toolkit/user-scripts/terraform/modules/database/mysql-dbsystem/variables.tf @@ -0,0 +1,178 @@ +# Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. +# +############################ +# Variables Block - Database +# Create MySQL DB Systems +############################ + +variable "compartment_id" { + description = "The OCID of the compartment where the MySQL DB system will be created." + type = string +} + +variable "display_name" { + description = "The display name of the MySQL DB system." + type = string +} + +variable "configuration_compartment_id" { + description = "The OCID of the compartment where the MySQL configuration is located." + type = string +} + +variable "configuration_id" { + description = "The OCID or name of the MySQL configuration." + type = string +} + +variable "shape_name" { + description = "The shape of the MySQL DB system." + type = string +} + +variable "admin_username" { + description = "The admin username for the MySQL DB system." + type = string +} + +variable "admin_password" { + description = "The admin password for the MySQL DB system." + type = string + sensitive = true +} + +variable "availability_domain" { + description = "The availability domain where the MySQL DB system will be created." + type = string +} + +variable "subnet_id" { + description = "The OCID of the subnet where the MySQL DB system will be created." + type = string +} + +variable "hostname_label" { + description = "The hostname label of the MySQL DB system." + type = string +} + +variable "data_storage_size_in_gb" { + description = "value to be used for data_storage_size_in_gbs" +} + +variable "source_type" { + description = "Source type" + type = string +} + +variable "is_highly_available" { + description = "Is highly available" + type = bool +} + +variable "maintenance_window_start_time" { + description = "Maintenance window start time" + type = string +} + +variable "port" { + description = "Port" + type = number +} + +variable "port_x" { + description = "X protocol port" + type = number +} + +variable "backup_id" { + description = "Backup ID for the MySQL DB System" + type = string +} + +variable "database_management" { + description = "Database management" + type = string +} + +variable "deletion_policy_automatic_backup_retention" { + description = "Automatic backup retention on deletion" + type = string +} + +variable "deletion_policy_final_backup" { + description = "Final backup on deletion" + type = string +} + +variable "deletion_policy_is_delete_protected" { + description = "Is delete protected" + type = bool +} + +variable "description" { + description = "Description for the MySQL DB System" + type = string +} + +variable "fault_domain" { + description = "Fault domain" + type = string +} + +variable "ip_address" { + description = "IP address" + type = string +} + +variable "backup_policy_is_enabled" { + description = "Is backup policy enabled" + type = bool +} + +variable "pitr_policy_is_enabled" { + description = "Is point-in-time recovery enabled" + type = bool +} + +variable "backup_policy_retention_in_days" { + description = "Backup retention in days" + type = number +} + +variable "backup_policy_window_start_time" { + description = "Backup window start time" + type = string +} + +variable "vcn_names" { + type = list(any) + default = [] +} + +variable "crash_recovery" { + description = "Crash recovery" + type = string +} + +variable "network_compartment_id" { + description = "Network compartment OCID to fetch NSG/Subnet details" + type = string + default = null +} + +variable "compartment_ocids" { + type = string + default = null +} + +variable "defined_tags" { + type = map(any) + default = null +} + +variable "freeform_tags" { + type = map(any) + default = null +} \ No newline at end of file diff --git a/cd3_automation_toolkit/user-scripts/terraform/modules/security/firewall/tunnel-inspect/data.tf b/cd3_automation_toolkit/user-scripts/terraform/modules/security/firewall/tunnel-inspect/data.tf new file mode 100644 index 000000000..84adb07b0 --- /dev/null +++ b/cd3_automation_toolkit/user-scripts/terraform/modules/security/firewall/tunnel-inspect/data.tf @@ -0,0 +1,11 @@ +# Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. +# +/*locals { + policy_ocid = data.oci_network_firewall_network_firewall_policies.fw-policy.network_firewall_policy_summary_collection[*].id + +} +data "oci_network_firewall_network_firewall_policies" "fw-policy" { + compartment_id = var.compartment_id != null ? (length(regexall("ocid1.compartment.oc*", var.compartment_id)) > 0 ? var.compartment_id : var.compartment_ocids[var.compartment_id]) : var.compartment_ocids[var.compartment_id] + display_name = var.network_firewall_policy_id +*/ \ No newline at end of file diff --git a/cd3_automation_toolkit/user-scripts/terraform/modules/security/firewall/tunnel-inspect/main.tf b/cd3_automation_toolkit/user-scripts/terraform/modules/security/firewall/tunnel-inspect/main.tf new file mode 100644 index 000000000..ec0f09e4f --- /dev/null +++ b/cd3_automation_toolkit/user-scripts/terraform/modules/security/firewall/tunnel-inspect/main.tf @@ -0,0 +1,20 @@ +# Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. +# +resource "oci_network_firewall_network_firewall_policy_tunnel_inspection_rule" "network_firewall_policy_tunnel_inspection_rule" { + lifecycle { + ignore_changes = [position] + } + name = var.rule_name + action = var.action + network_firewall_policy_id = var.network_firewall_policy_id + condition { + destination_address = var.destination_address + source_address = var.source_address + } + protocol = var.protocol + position { + after_rule = var.after_rule + before_rule = var.before_rule + } +} diff --git a/cd3_automation_toolkit/user-scripts/terraform/modules/security/firewall/tunnel-inspect/oracle_provider_req.tf b/cd3_automation_toolkit/user-scripts/terraform/modules/security/firewall/tunnel-inspect/oracle_provider_req.tf new file mode 100644 index 000000000..f1f97aaeb --- /dev/null +++ b/cd3_automation_toolkit/user-scripts/terraform/modules/security/firewall/tunnel-inspect/oracle_provider_req.tf @@ -0,0 +1,10 @@ +# Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. +# +terraform { + required_providers { + oci = { + source = "oracle/oci" + } + } +} \ No newline at end of file diff --git a/cd3_automation_toolkit/user-scripts/terraform/modules/security/firewall/tunnel-inspect/output.tf b/cd3_automation_toolkit/user-scripts/terraform/modules/security/firewall/tunnel-inspect/output.tf new file mode 100644 index 000000000..03196a7d3 --- /dev/null +++ b/cd3_automation_toolkit/user-scripts/terraform/modules/security/firewall/tunnel-inspect/output.tf @@ -0,0 +1,6 @@ +# Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. +# +output "tunnel_inspect_rules_tf_id" { + value = oci_network_firewall_network_firewall_policy_tunnel_inspection_rule.network_firewall_policy_tunnel_inspection_rule.id +} \ No newline at end of file diff --git a/cd3_automation_toolkit/user-scripts/terraform/modules/security/firewall/tunnel-inspect/variable.tf b/cd3_automation_toolkit/user-scripts/terraform/modules/security/firewall/tunnel-inspect/variable.tf new file mode 100644 index 000000000..80b16596f --- /dev/null +++ b/cd3_automation_toolkit/user-scripts/terraform/modules/security/firewall/tunnel-inspect/variable.tf @@ -0,0 +1,145 @@ +# Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. +# +variable "compartment_id" { + type = string + default = null +} +variable "subnet_name" { + type = string + default = null +} + +variable "vcn_name" { + type = string + default = null +} +variable "network_firewall_policy_id" { + type = string + default = null +} + +variable "display_name" { + type = string + default = null +} + +variable "ipv4address" { + type = string + default = null +} + +variable "icmp_type" { + type = number + default = null + +} + +variable "icmp_code" { + type = number + default = null +} +variable "minimum_port" { + type = number + default = null +} + +variable "maximum_port" { + type = number + default = null +} + +variable "service_name" { + type = string + default = null +} + +variable "service_type" { + type = string + default = null +} + +variable "region" { + type = string + default = "us-ashburn-1" +} + +variable "type" { + type = string + default = null +} + +variable "name" { + type = string + default = null +} + +variable "policy" { + type = map(any) + default = {} +} + +variable "service_port_ranges" { + type = map(any) + default = {} +} + +variable "key_name" { + type = string + default = null +} + +variable "rule_condition" { + type = map(any) + default = {} +} +variable "rule_position" { + type = map(any) + default = {} +} +variable "key_name1" { + type = string + default = null +} + +variable "key_name2" { + type = string + default = null +} + +variable "rule_name" { + type = string + default = null +} + +variable "action" { + type = string + default = null +} + +variable "destination_address" { + type = list(string) + default = [] +} +variable "source_address" { + type = list(string) + default = [] +} + + +variable "after_rule" { + type = string + default = null +} +variable "before_rule" { + type = string + default = null +} + +variable "protocol" { + type = string + default = null +} + + + diff --git a/cd3_automation_toolkit/user-scripts/terraform/mysql-dbsystem.tf b/cd3_automation_toolkit/user-scripts/terraform/mysql-dbsystem.tf new file mode 100644 index 000000000..b8dcba931 --- /dev/null +++ b/cd3_automation_toolkit/user-scripts/terraform/mysql-dbsystem.tf @@ -0,0 +1,169 @@ +# Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. +# Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. +# +############################################ +# Module Block - MySQL Database +# Create MySQL DB Systems +############################################ + +data "oci_mysql_mysql_configurations" "mysql_configurations" { + # depends_on = [module.mysql-configuration] + for_each = var.mysql_db_system != null ? var.mysql_db_system : {} + compartment_id = each.value.configuration_compartment_id != null ? (length(regexall("ocid1.compartment.oc*", each.value.configuration_compartment_id)) > 0 ? each.value.configuration_compartment_id : var.compartment_ocids[each.value.configuration_compartment_id]) : var.compartment_ocids[each.value.configurations_compartment_id] + display_name = each.value.configuration_id + state = "ACTIVE" +} + +data "oci_core_subnets" "oci_mysql_subnets" { + # depends_on = [module.subnets] # Uncomment to create Network and MySQL together + for_each = var.mysql_db_system != null ? var.mysql_db_system : {} + compartment_id = each.value.network_compartment_id != null ? (length(regexall("ocid1.compartment.oc*", each.value.network_compartment_id)) > 0 ? each.value.network_compartment_id : var.compartment_ocids[each.value.network_compartment_id]) : var.compartment_ocids[each.value.network_compartment_id] + display_name = each.value.subnet_id + vcn_id = data.oci_core_vcns.oci_mysql_vcns[each.key].virtual_networks.*.id[0] +} + +data "oci_core_vcns" "oci_mysql_vcns" { + # depends_on = [module.vcns] # Uncomment to create Network and MySQL together + for_each = var.mysql_db_system != null ? var.mysql_db_system : {} + compartment_id = each.value.network_compartment_id != null ? (length(regexall("ocid1.compartment.oc*", each.value.network_compartment_id)) > 0 ? each.value.network_compartment_id : var.compartment_ocids[each.value.network_compartment_id]) : var.compartment_ocids[each.value.network_compartment_id] + display_name = each.value.vcn_names +} + + +module "mysql_db_system" { + + source = "./modules/database/mysql-dbsystem" + for_each = var.mysql_db_system != null ? var.mysql_db_system : {} + + compartment_id = each.value.compartment_id != null ? (length(regexall("ocid1.compartment.oc*", each.value.compartment_id)) > 0 ? each.value.compartment_id : var.compartment_ocids[each.value.compartment_id]) : null + network_compartment_id = each.value.network_compartment_id != null ? (length(regexall("ocid1.compartment.oc*", each.value.network_compartment_id)) > 0 ? each.value.network_compartment_id : var.compartment_ocids[each.value.network_compartment_id]) : null + configuration_compartment_id = each.value.configuration_compartment_id != null ? (length(regexall("ocid1.compartment.oc*", each.value.configuration_compartment_id)) > 0 ? each.value.configuration_compartment_id : var.compartment_ocids[each.value.configuration_compartment_id]) : var.compartment_ocids[each.value.compartment_id] + configuration_id = length(regexall("ocid1.mysqlconfiguration.*", each.value.configuration_id)) > 0 ? each.value.configuration_id : data.oci_mysql_mysql_configurations.mysql_configurations[each.key].configurations[0].id + display_name = each.value.mysql_db_system_display_name + shape_name = each.value.mysql_shape_name + admin_username = each.value.mysql_db_system_admin_username + admin_password = each.value.mysql_db_system_admin_password + availability_domain = each.value.mysql_db_system_availability_domain != "" && each.value.mysql_db_system_availability_domain != null ? data.oci_identity_availability_domains.availability_domains.availability_domains[each.value.mysql_db_system_availability_domain].name : "" + vcn_names = [each.value.vcn_names] + subnet_id = each.value.subnet_id != "" ? (length(regexall("ocid1.subnet.oc*", each.value.subnet_id)) > 0 ? each.value.subnet_id : data.oci_core_subnets.oci_mysql_subnets[each.key].subnets.*.id[0]) : null + hostname_label = each.value.mysql_db_system_hostname_label + backup_id = each.value.backup_id + backup_policy_is_enabled = each.value.mysql_db_system_backup_policy_is_enabled + backup_policy_retention_in_days = each.value.mysql_db_system_backup_policy_retention_in_days + backup_policy_window_start_time = each.value.mysql_db_system_backup_policy_window_start_time + crash_recovery = each.value.mysql_db_system_crash_recovery + data_storage_size_in_gb = each.value.mysql_db_system_data_storage_size_in_gb + database_management = each.value.mysql_db_system_database_management + deletion_policy_automatic_backup_retention = each.value.mysql_db_system_deletion_policy_automatic_backup_retention + deletion_policy_final_backup = each.value.mysql_db_system_deletion_policy_final_backup + deletion_policy_is_delete_protected = each.value.mysql_db_system_deletion_policy_is_delete_protected + description = each.value.mysql_db_system_description + fault_domain = each.value.mysql_db_system_fault_domain + ip_address = each.value.mysql_db_system_ip_address + is_highly_available = each.value.mysql_db_system_is_highly_available + maintenance_window_start_time = each.value.mysql_db_system_maintenance_window_start_time + pitr_policy_is_enabled = each.value.mysql_db_system_backup_policy_pitr_policy_is_enabled + port = each.value.mysql_db_system_port + port_x = each.value.mysql_db_system_port_x + source_type = each.value.mysql_db_system_source_source_type != null ? each.value.mysql_db_system_source_source_type : null + defined_tags = each.value.defined_tags != null ? each.value.defined_tags : null + freeform_tags = each.value.freeform_tags != null ? each.value.freeform_tags : null +} + +############################################ +# Module Block - MySQL Database +# Create MySQL Configurations +############################################ + +data "oci_mysql_shapes" "mysql_shapes" { + for_each = var.mysql_configuration != null ? var.mysql_configuration : {} + compartment_id = each.value.compartment_id != null ? (length(regexall("ocid1.compartment.oc*", each.value.compartment_id)) > 0 ? each.value.compartment_id : var.compartment_ocids[each.value.compartment_id]) : var.compartment_ocids[each.value.compartment_id] + name = each.value.mysql_configuration_shape_name +} + +module "mysql_configuration" { + + source = "./modules/database/mysql-configuration" + for_each = var.mysql_configuration != null ? var.mysql_configuration : {} + + compartment_id = each.value.compartment_id != null ? (length(regexall("ocid1.compartment.oc*", each.value.compartment_id)) > 0 ? each.value.compartment_id : var.compartment_ocids[each.value.compartment_id]) : null + mysql_configuration_shape_name = each.value.mysql_configuration_shape_name != null ? (length(regexall("(VM\\.Standard\\.(E[234]\\.[12468]|E[34]\\.(16|24|32|48|64))|MySQL\\.(VM\\.Standard\\.(E[34]\\.[12468]|E[34]\\.(16|24|32|48|64)\\.(8|16|32|64|128|256|384|512|768|1024)GB)|HeatWave\\.(BM\\.Standard(\\.E3)?|VM\\.Standard(\\.E3)?)|VM\\.Optimized3\\.[12468]\\.((8|16|32|64|128|256|384|512|768|1024)GB)|[12468]|16|32|48|64|256))", each.value.mysql_configuration_shape_name)) > 0 ? each.value.mysql_configuration_shape_name : data.oci_mysql_shapes.mysql_shapes[each.key].shapes.*.name[0]) : null + defined_tags = each.value.defined_tags + mysql_configuration_description = each.value.mysql_configuration_description + mysql_configuration_display_name = each.value.mysql_configuration_display_name + freeform_tags = each.value.freeform_tags + mysql_configuration_init_variables_lower_case_table_names = each.value.mysql_configuration_init_variables_lower_case_table_names + mysql_configuration_variables_autocommit = each.value.mysql_configuration_variables_autocommit + mysql_configuration_variables_big_tables = each.value.mysql_configuration_variables_big_tables + mysql_configuration_variables_binlog_expire_logs_seconds = each.value.mysql_configuration_variables_binlog_expire_logs_seconds + mysql_configuration_variables_binlog_row_metadata = each.value.mysql_configuration_variables_binlog_row_metadata + mysql_configuration_variables_binlog_row_value_options = each.value.mysql_configuration_variables_binlog_row_value_options + mysql_configuration_variables_binlog_transaction_compression = each.value.mysql_configuration_variables_binlog_transaction_compression + mysql_configuration_variables_completion_type = each.value.mysql_configuration_variables_completion_type + mysql_configuration_variables_connect_timeout = each.value.mysql_configuration_variables_connect_timeout + mysql_configuration_variables_connection_memory_chunk_size = each.value.mysql_configuration_variables_connection_memory_chunk_size + mysql_configuration_variables_connection_memory_limit = each.value.mysql_configuration_variables_connection_memory_limit + mysql_configuration_variables_cte_max_recursion_depth = each.value.mysql_configuration_variables_cte_max_recursion_depth + mysql_configuration_variables_default_authentication_plugin = each.value.mysql_configuration_variables_default_authentication_plugin + mysql_configuration_variables_foreign_key_checks = each.value.mysql_configuration_variables_foreign_key_checks + mysql_configuration_variables_global_connection_memory_limit = each.value.mysql_configuration_variables_global_connection_memory_limit + mysql_configuration_variables_global_connection_memory_tracking = each.value.mysql_configuration_variables_global_connection_memory_tracking + mysql_configuration_variables_group_replication_consistency = each.value.mysql_configuration_variables_group_replication_consistency + mysql_configuration_variables_information_schema_stats_expiry = each.value.mysql_configuration_variables_information_schema_stats_expiry + mysql_configuration_variables_innodb_buffer_pool_dump_pct = each.value.mysql_configuration_variables_innodb_buffer_pool_dump_pct + mysql_configuration_variables_innodb_buffer_pool_instances = each.value.mysql_configuration_variables_innodb_buffer_pool_instances + mysql_configuration_variables_innodb_buffer_pool_size = each.value.mysql_configuration_variables_innodb_buffer_pool_size + mysql_configuration_variables_innodb_ddl_buffer_size = each.value.mysql_configuration_variables_innodb_ddl_buffer_size + mysql_configuration_variables_innodb_ddl_threads = each.value.mysql_configuration_variables_innodb_ddl_threads + mysql_configuration_variables_innodb_ft_enable_stopword = each.value.mysql_configuration_variables_innodb_ft_enable_stopword + mysql_configuration_variables_innodb_ft_max_token_size = each.value.mysql_configuration_variables_innodb_ft_max_token_size + mysql_configuration_variables_innodb_ft_min_token_size = each.value.mysql_configuration_variables_innodb_ft_min_token_size + mysql_configuration_variables_innodb_ft_num_word_optimize = each.value.mysql_configuration_variables_innodb_ft_num_word_optimize + mysql_configuration_variables_innodb_ft_result_cache_limit = each.value.mysql_configuration_variables_innodb_ft_result_cache_limit + mysql_configuration_variables_innodb_ft_server_stopword_table = each.value.mysql_configuration_variables_innodb_ft_server_stopword_table + mysql_configuration_variables_innodb_lock_wait_timeout = each.value.mysql_configuration_variables_innodb_lock_wait_timeout + mysql_configuration_variables_innodb_log_writer_threads = each.value.mysql_configuration_variables_innodb_log_writer_threads + mysql_configuration_variables_innodb_max_purge_lag = each.value.mysql_configuration_variables_innodb_max_purge_lag + mysql_configuration_variables_innodb_max_purge_lag_delay = each.value.mysql_configuration_variables_innodb_max_purge_lag_delay + mysql_configuration_variables_innodb_stats_persistent_sample_pages = each.value.mysql_configuration_variables_innodb_stats_persistent_sample_pages + mysql_configuration_variables_innodb_stats_transient_sample_pages = each.value.mysql_configuration_variables_innodb_stats_transient_sample_pages + mysql_configuration_variables_interactive_timeout = each.value.mysql_configuration_variables_interactive_timeout + mysql_configuration_variables_local_infile = each.value.mysql_configuration_variables_local_infile + mysql_configuration_variables_mandatory_roles = each.value.mysql_configuration_variables_mandatory_roles + mysql_configuration_variables_max_allowed_packet = each.value.mysql_configuration_variables_max_allowed_packet + mysql_configuration_variables_max_binlog_cache_size = each.value.mysql_configuration_variables_max_binlog_cache_size + mysql_configuration_variables_max_connect_errors = each.value.mysql_configuration_variables_max_connect_errors + mysql_configuration_variables_max_connections = each.value.mysql_configuration_variables_max_connections + mysql_configuration_variables_max_execution_time = each.value.mysql_configuration_variables_max_execution_time + mysql_configuration_variables_max_heap_table_size = each.value.mysql_configuration_variables_max_heap_table_size + mysql_configuration_variables_max_prepared_stmt_count = each.value.mysql_configuration_variables_max_prepared_stmt_count + mysql_configuration_variables_mysql_firewall_mode = each.value.mysql_configuration_variables_mysql_firewall_mode + mysql_configuration_variables_mysqlx_connect_timeout = each.value.mysql_configuration_variables_mysqlx_connect_timeout + mysql_configuration_variables_mysqlx_deflate_default_compression_level = each.value.mysql_configuration_variables_mysqlx_deflate_default_compression_level + mysql_configuration_variables_mysqlx_deflate_max_client_compression_level = each.value.mysql_configuration_variables_mysqlx_deflate_max_client_compression_level + mysql_configuration_variables_mysqlx_enable_hello_notice = each.value.mysql_configuration_variables_mysqlx_enable_hello_notice + mysql_configuration_variables_mysqlx_interactive_timeout = each.value.mysql_configuration_variables_mysqlx_interactive_timeout + mysql_configuration_variables_mysqlx_lz4default_compression_level = each.value.mysql_configuration_variables_mysqlx_lz4default_compression_level + mysql_configuration_variables_mysqlx_lz4max_client_compression_level = each.value.mysql_configuration_variables_mysqlx_lz4max_client_compression_level + mysql_configuration_variables_mysqlx_max_allowed_packet = each.value.mysql_configuration_variables_mysqlx_max_allowed_packet + mysql_configuration_variables_mysqlx_read_timeout = each.value.mysql_configuration_variables_mysqlx_read_timeout + mysql_configuration_variables_mysqlx_wait_timeout = each.value.mysql_configuration_variables_mysqlx_wait_timeout + mysql_configuration_variables_mysqlx_write_timeout = each.value.mysql_configuration_variables_mysqlx_write_timeout + mysql_configuration_variables_mysqlx_zstd_default_compression_level = each.value.mysql_configuration_variables_mysqlx_zstd_default_compression_level + mysql_configuration_variables_mysqlx_zstd_max_client_compression_level = each.value.mysql_configuration_variables_mysqlx_zstd_max_client_compression_level + mysql_configuration_variables_net_read_timeout = each.value.mysql_configuration_variables_net_read_timeout + mysql_configuration_variables_net_write_timeout = each.value.mysql_configuration_variables_net_write_timeout + mysql_configuration_variables_parser_max_mem_size = each.value.mysql_configuration_variables_parser_max_mem_size + mysql_configuration_variables_regexp_time_limit = each.value.mysql_configuration_variables_regexp_time_limit + mysql_configuration_variables_sort_buffer_size = each.value.mysql_configuration_variables_sort_buffer_size + mysql_configuration_variables_sql_mode = each.value.mysql_configuration_variables_sql_mode + mysql_configuration_variables_sql_require_primary_key = each.value.mysql_configuration_variables_sql_require_primary_key + mysql_configuration_variables_sql_warnings = each.value.mysql_configuration_variables_sql_warnings + mysql_configuration_variables_thread_pool_dedicated_listeners = each.value.mysql_configuration_variables_thread_pool_dedicated_listeners + mysql_configuration_variables_thread_pool_max_transactions_limit = each.value.mysql_configuration_variables_thread_pool_max_transactions_limit + mysql_configuration_variables_time_zone = each.value.mysql_configuration_variables_time_zone + mysql_configuration_variables_tmp_table_size = each.value.mysql_configuration_variables_tmp_table_size + mysql_configuration_variables_transaction_isolation = each.value.mysql_configuration_variables_transaction_isolation + mysql_configuration_variables_wait_timeout = each.value.mysql_configuration_variables_wait_timeout + +} \ No newline at end of file diff --git a/jenkins_install/scriptler/scripts/SubOptions.groovy b/jenkins_install/scriptler/scripts/SubOptions.groovy index 1dabea598..8a1e0a24f 100644 --- a/jenkins_install/scriptler/scripts/SubOptions.groovy +++ b/jenkins_install/scriptler/scripts/SubOptions.groovy @@ -7,7 +7,7 @@ List oci_firewall = ["OCI FIREWALL:disabled","Validate Firewall CD3 Exce List dns_management = ["DNS:disabled","Add/Modify/Delete DNS Views/Zones/Records", "Add/Modify/Delete DNS Resolvers"] List compute = ["COMPUTE:disabled","Add/Modify/Delete Dedicated VM Hosts", "Add/Modify/Delete Instances/Boot Backup Policy"] List storage = ["STORAGE:disabled","Add/Modify/Delete Block Volumes/Block Backup Policy", "Add/Modify/Delete File Systems", "Add/Modify/Delete Object Storage Buckets"] -List database = ["DATABASE:disabled","Add/Modify/Delete Virtual Machine or Bare Metal DB Systems", "Add/Modify/Delete EXA Infra and EXA VM Clusters", "Add/Modify/Delete ADBs"] +List database = ["DATABASE:disabled","Add/Modify/Delete Virtual Machine or Bare Metal DB Systems", "Add/Modify/Delete EXA Infra and EXA VM Clusters", "Add/Modify/Delete ADBs", "Add/Modify/Delete MySQL DBs"] List load_balancers = ["LOAD BALANCERS:disabled","Add/Modify/Delete Load Balancers", "Add/Modify/Delete Network Load Balancers"] List management_services = ["MANAGEMENT SERVICES:disabled","Add/Modify/Delete Notifications", "Add/Modify/Delete Events", "Add/Modify/Delete Alarms", "Add/Modify/Delete ServiceConnectors"] List developer_services = ["DEVELOPER SERVICES:disabled","Add/Modify/Delete OKE Cluster and Nodepools"] @@ -24,7 +24,7 @@ List ex_firewall = ["OCI FIREWALL:disabled","Export Firewall Policy", "Ex List ex_dns = ["DNS:disabled","Export DNS Views/Zones/Records", "Export DNS Resolvers"] List ex_compute = ["COMPUTE:disabled","Export Dedicated VM Hosts", "Export Instances (excludes instances launched by OKE)"] List ex_storage = ["STORAGE:disabled","Export Block Volumes/Block Backup Policy", "Export File Systems", "Export Object Storage Buckets"] -List ex_databases = ["DATABASE:disabled","Export Virtual Machine or Bare Metal DB Systems", "Export EXA Infra and EXA VMClusters", "Export ADBs"] +List ex_databases = ["DATABASE:disabled","Export Virtual Machine or Bare Metal DB Systems", "Export EXA Infra and EXA VMClusters", "Export ADBs", "Export MySQL DBs"] List ex_lb = ["LOAD BALANCERS:disabled","Export Load Balancers", "Export Network Load Balancers"] List ex_management = ["MANAGEMENT SERVICES:disabled","Export Notifications", "Export Events", "Export Alarms", "Export Service Connectors"] List ex_developer = ["DEVELOPER SERVICES:disabled","Export OKE cluster and Nodepools"] From b54b9443744ee661999d5a90d26209ae097bfcba Mon Sep 17 00:00:00 2001 From: xs2suruchi Date: Fri, 21 Mar 2025 20:30:12 +0530 Subject: [PATCH 08/15] Automation Toolkit Release v2025.1.0 --- Dockerfile | 4 +-- .../export_exa_vmclusters_nonGreenField.py | 2 +- .../Users/export_users_nonGreenField.py | 12 ++++---- .../Identity/export_identity_nonGreenField.py | 4 ++- cd3_automation_toolkit/Release-Notes | 8 ++--- .../export_blockvolumes_nonGreenField.py | 2 +- .../user-scripts/tenancyconfig.properties | 1 + .../scriptler/scripts/ValidateParams.groovy | 4 +-- jenkins_install/setUpOCI.groovy | 29 +++++++++++++++---- 9 files changed, 43 insertions(+), 23 deletions(-) diff --git a/Dockerfile b/Dockerfile index 8e69185ef..e90348416 100755 --- a/Dockerfile +++ b/Dockerfile @@ -16,8 +16,8 @@ ARG USER_GID=$USER_UID # Whether to download Provider as part of image creation ARG DOWNLOAD_PROVIDER=YES # TF Provider version -ARG TF_OCI_PROVIDER=6.15.0 -ARG TF_NULL_PROVIDER=3.2.1 +ARG TF_OCI_PROVIDER=6.30.0 +ARG TF_NULL_PROVIDER=3.2.3 RUN microdnf install -y sudo && \ groupadd --gid $USER_GID $USERNAME && \ diff --git a/cd3_automation_toolkit/Database/export_exa_vmclusters_nonGreenField.py b/cd3_automation_toolkit/Database/export_exa_vmclusters_nonGreenField.py index 0af227145..cdbace15c 100644 --- a/cd3_automation_toolkit/Database/export_exa_vmclusters_nonGreenField.py +++ b/cd3_automation_toolkit/Database/export_exa_vmclusters_nonGreenField.py @@ -81,7 +81,7 @@ def print_exa_vmcluster(region, vnc_client,exa_infra, exa_vmcluster, key_name,va values_for_column[col_header].append(key_name) elif col_header == 'Client Network Details': values_for_column[col_header].append(client_network) - elif col_header == 'Backup Network Detailse': + elif col_header == 'Backup Network Details': values_for_column[col_header].append(backup_network) elif (col_header == "NSGs"): values_for_column[col_header].append(nsg_names) diff --git a/cd3_automation_toolkit/Identity/Users/export_users_nonGreenField.py b/cd3_automation_toolkit/Identity/Users/export_users_nonGreenField.py index 32569d651..22062a0ac 100644 --- a/cd3_automation_toolkit/Identity/Users/export_users_nonGreenField.py +++ b/cd3_automation_toolkit/Identity/Users/export_users_nonGreenField.py @@ -143,12 +143,12 @@ def export_users(inputfile, outdir, service_dir, config, signer, ct,export_domai display_name = user_info.display_name email = None recovery_email = None - - for email_info in user_info.emails: - if email_info.primary: - email = email_info.value - elif email_info.type == "recovery": - recovery_email = email_info.value + if hasattr(user_info.emails, "email_info"): + for email_info in user_info.emails: + if email_info.primary: + email = email_info.value + elif email_info.type == "recovery": + recovery_email = email_info.value tf_name = commonTools.check_tf_variable(username) diff --git a/cd3_automation_toolkit/Identity/export_identity_nonGreenField.py b/cd3_automation_toolkit/Identity/export_identity_nonGreenField.py index 182275cd5..39a49d4ff 100644 --- a/cd3_automation_toolkit/Identity/export_identity_nonGreenField.py +++ b/cd3_automation_toolkit/Identity/export_identity_nonGreenField.py @@ -361,7 +361,9 @@ def process_group(grp_info, members_list,membership_id_list, domain_name, is_dyn service_endpoint=idcs_endpoint) list_groups_response = domain_client.list_groups(attributes=['members'], attribute_sets=['all']) groups = list_groups_response.data.resources - while list_groups_response.has_next_page: + page_done = [] + while list_groups_response.has_next_page and list_groups_response.next_page not in page_done: + page_done.append(list_groups_response.next_page) list_groups_response = domain_client.list_groups(attributes=['members'], attribute_sets=['all'],page=list_groups_response.next_page) groups.extend(list_groups_response.data.resources) diff --git a/cd3_automation_toolkit/Release-Notes b/cd3_automation_toolkit/Release-Notes index a632b2541..b3c125353 100644 --- a/cd3_automation_toolkit/Release-Notes +++ b/cd3_automation_toolkit/Release-Notes @@ -2,12 +2,12 @@ CD3 Automation Toolkit Tag v2025.1.0 Apr 4th, 2024 ------------------------------------- -1. Introduced new service support - MySQL Database. +1. Introduced new service - MySQL Database. 2. Included Tunnel Inspection for OCI Network Firewall. -3. Introduced filter for tags while export of resources. -4. Moved compartment filter before showing xport options to make it common for all services. +3. Introduced filtering of resources using tags during export workflow. +4. Moved compartment filter before showing export options to make it common for all services when using toolkit with CLI. 5. Running Create/Modify Network through Jenkins will automatically call export of rules after successful terraform apply. - This was a manua process earlier. + This was a manual process earlier. diff --git a/cd3_automation_toolkit/Storage/BlockVolume/export_blockvolumes_nonGreenField.py b/cd3_automation_toolkit/Storage/BlockVolume/export_blockvolumes_nonGreenField.py index 5db65a51d..e23924995 100644 --- a/cd3_automation_toolkit/Storage/BlockVolume/export_blockvolumes_nonGreenField.py +++ b/cd3_automation_toolkit/Storage/BlockVolume/export_blockvolumes_nonGreenField.py @@ -139,7 +139,7 @@ def print_blockvolumes(region, BVOLS, bvol, compute, ct, values_for_column, ntk_ source_ocids[commonTools.check_tf_variable(blockvols.display_name.strip())] = tmp_key autotune_type = '' max_vpus_per_gb = '' - if len(blockvols.autotune_policies) == 0: + if blockvols.autotune_policies == None: autotune_type = '' max_vpus_per_gb = '' elif len(blockvols.autotune_policies) == 1: diff --git a/cd3_automation_toolkit/user-scripts/tenancyconfig.properties b/cd3_automation_toolkit/user-scripts/tenancyconfig.properties index 4c2ca9854..2ae1c7df9 100644 --- a/cd3_automation_toolkit/user-scripts/tenancyconfig.properties +++ b/cd3_automation_toolkit/user-scripts/tenancyconfig.properties @@ -85,6 +85,7 @@ oci_devops_git_repo_name= # Customer Secret Key will be created for this user for S3 credentials of the bucket. # When left empty, it will be fetched from $(user_ocid) for $(auth_mechanism) as api_key. # Format: /@ eg oracleidentitycloudservice/devopsuser@oracle.com@ocitenant +# Users in Custom Domain are not supported as of now. oci_devops_git_user= # When left empty, same key file from $(key_path) used for $(auth_mechanism) as api_key will be copied to diff --git a/jenkins_install/scriptler/scripts/ValidateParams.groovy b/jenkins_install/scriptler/scripts/ValidateParams.groovy index 3aadab931..b9a8d0cd7 100644 --- a/jenkins_install/scriptler/scripts/ValidateParams.groovy +++ b/jenkins_install/scriptler/scripts/ValidateParams.groovy @@ -10,7 +10,7 @@ def validate_params(Workflow,MainOptions,SubOptions,SubChildOptions,AdditionalFi "DNS Management":["Add/Modify/Delete DNS Views/Zones/Records", "Add/Modify/Delete DNS Resolvers"], "Compute":["Add/Modify/Delete Dedicated VM Hosts", "Add/Modify/Delete Instances/Boot Backup Policy"], "Storage":["Add/Modify/Delete Block Volumes/Block Backup Policy", "Add/Modify/Delete File Systems", "Add/Modify/Delete Object Storage Buckets"], - "Database":["Add/Modify/Delete Virtual Machine or Bare Metal DB Systems", "Add/Modify/Delete EXA Infra and EXA VM Clusters", "Add/Modify/Delete ADBs"], + "Database":["Add/Modify/Delete Virtual Machine or Bare Metal DB Systems", "Add/Modify/Delete EXA Infra and EXA VM Clusters", "Add/Modify/Delete ADBs", "Add/Modify/Delete MySQL DBs"], "Load Balancers":["Add/Modify/Delete Load Balancers", "Add/Modify/Delete Network Load Balancers"], "Management Services":["Add/Modify/Delete Notifications", "Add/Modify/Delete Events", "Add/Modify/Delete Alarms", "Add/Modify/Delete ServiceConnectors"], "Developer Services":["Upload current terraform files/state to Resource Manager", "Add/Modify/Delete OKE Cluster and Nodepools"], @@ -28,7 +28,7 @@ def validate_params(Workflow,MainOptions,SubOptions,SubChildOptions,AdditionalFi "Export DNS Management":["Export DNS Views/Zones/Records", "Export DNS Resolvers"], "Export Compute":["Export Dedicated VM Hosts", "Export Instances (excludes instances launched by OKE)"], "Export Storage":["Export Block Volumes/Block Backup Policy", "Export File Systems", "Export Object Storage Buckets"], - "Export Databases":["Export Virtual Machine or Bare Metal DB Systems", "Export EXA Infra and EXA VMClusters", "Export ADBs"], + "Export Databases":["Export Virtual Machine or Bare Metal DB Systems", "Export EXA Infra and EXA VMClusters", "Export ADBs", "Export MySQL DBs"], "Export Load Balancers":["Export Load Balancers", "Export Network Load Balancers"], "Export Management Services":["Export Notifications", "Export Events", "Export Alarms", "Export Service Connectors"], "Export Developer Services":["Export OKE cluster and Nodepools"], diff --git a/jenkins_install/setUpOCI.groovy b/jenkins_install/setUpOCI.groovy index d1c69def5..1ea6c2ce1 100644 --- a/jenkins_install/setUpOCI.groovy +++ b/jenkins_install/setUpOCI.groovy @@ -5,12 +5,31 @@ def exportNetworkRules(stage_name) { return { stage("${stage_name}") { catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') { - sh """ + labelledShell( label: 'Executing setUpOCI python script', script: """ cd /cd3user/oci_tools/cd3_automation_toolkit python setUpOCI.py --devops True --main_options "Network" --sub_options "Security Rules,Route Rules,DRG Route Rules" --sub_child_options "Export Security Rules (From OCI into SecRulesinOCI sheet),Add/Modify/Delete Security Rules (Reads SecRulesinOCI sheet),Export Route Rules (From OCI into RouteRulesinOCI sheet),Add/Modify/Delete Route Rules (Reads RouteRulesinOCI sheet),Export DRG Route Rules (From OCI into DRGRouteRulesinOCI sheet),Add/Modify/Delete DRG Route Rules (Reads DRGRouteRulesinOCI sheet)" --add_filter "comp_filter=,[],@," ${env.prop_file} - """ - file_path = sh(script: "grep '^cd3file' ${env.prop_file}| cut -d'=' -f2", returnStdout: true).trim() - file_name = sh(script:"echo '${file_path}'| rev|cut -d '/' -f1 | rev", returnStdout: true).trim() + """) + script { + git_status = labelledShell( label: 'Check git status', script: 'cd ${prefix_dir}/terraform_files; git status --porcelain | wc -l', returnStdout: true).trim() + // Check if anything to commit + if ("${git_status}" > 0) { + labelledShell( label: 'Performing git commit to develop', script: ''' + set +x + cd ${prefix_dir}/terraform_files + echo "-----start timestamp-----" + time_stamp="$(date +%m-%d-%Y-%H-%M-%S)" + commit_msg="commit for setUpOCI build ${BUILD_NUMBER}" + git add -A . + git commit -m "${commit_msg}" + git push origin develop + ''') + }else { + echo 'Nothing to commit. Skipping further stages.' + } + } + + file_path = sh(script: "set +x; grep '^cd3file' ${env.prop_file}| cut -d'=' -f2", returnStdout: true).trim() + file_name = sh(script:"set +x; echo '${file_path}'| rev|cut -d '/' -f1 | rev", returnStdout: true).trim() sh """ set +x cp '${file_path}' '${WORKSPACE}/${file_name}' @@ -40,9 +59,7 @@ def generateStage(job) { //println(job_exec_details.getFullProjectName()) //println((job_exec_details.getFullProjectName()).split("/")[3]) if (!["ABORTED","FAILURE"].contains(job_exec_details.getResult()) && ["apply","network"].contains((job_exec_details.getFullProjectName()).split("/")[3])) { - println("first condition passed") if ( SubOptions.contains('Create Network') || SubOptions.contains('Modify Network') ) { - println("Calling export rules") def stage_name = "Export Network Rules" parallel([stage_name : exportNetworkRules(stage_name)]) } From d8044c380b43a80cd978162cefcd7b5659a3a2df Mon Sep 17 00:00:00 2001 From: xs2suruchi Date: Thu, 27 Mar 2025 15:24:14 +0530 Subject: [PATCH 09/15] Automation Toolkit Release v2025.1.0 --- .../Database/create_terraform_mysql_db.py | 37 +++++++++--- .../Database/export_mysql_db_nonGreenField.py | 59 +++++++------------ .../Database/templates/mysql-template | 11 ++++ cd3_automation_toolkit/Excel_Columns | 3 +- .../export_network_nonGreenField.py | 1 + cd3_automation_toolkit/setUpOCI.py | 5 -- 6 files changed, 63 insertions(+), 53 deletions(-) diff --git a/cd3_automation_toolkit/Database/create_terraform_mysql_db.py b/cd3_automation_toolkit/Database/create_terraform_mysql_db.py index c2b8ca072..08117989e 100644 --- a/cd3_automation_toolkit/Database/create_terraform_mysql_db.py +++ b/cd3_automation_toolkit/Database/create_terraform_mysql_db.py @@ -52,6 +52,10 @@ def create_terraform_mysql_db(inputfile, outdir, service_dir, prefix, ct): for i in df.index: region = str(df.loc[i, 'Region']).strip().lower() + if (region in commonTools.endNames): + break + region=region.strip().lower() + # Skip if region is not in regions if region not in [x.lower() for x in ct.all_regions]: print(f"\nERROR!!! Invalid Region {str(df.loc[i, 'Region']).strip()} in MySQL DB System sheet. Skipping row!", file=sys.stderr) @@ -68,7 +72,8 @@ def create_terraform_mysql_db(inputfile, outdir, service_dir, prefix, ct): # Initialize the template dictionary tempdict = { 'display_tf_name': commonTools.check_tf_variable(str(df.loc[i, 'Display Name']).strip()), - 'compartment_name': str(df.loc[i, 'Compartment Name']).strip(), + #'compartment_name': str(df.loc[i, 'Compartment Name']).strip(), + 'compartment_name': commonTools.check_tf_variable(str(df.loc[i, 'Compartment Name']).strip()), 'display_name': str(df.loc[i, 'Display Name']).strip(), 'description': str(df.loc[i, 'Description']).strip(), 'hostname_label': str(df.loc[i, 'Hostname Label']).strip(), @@ -102,23 +107,39 @@ def create_terraform_mysql_db(inputfile, outdir, service_dir, prefix, ct): # Split into compartment and name config_parts = config_id.split('@') if len(config_parts) == 2: - config_compartment_name = config_parts[0].strip() + config_compartment_name = commonTools.check_tf_variable(config_parts[0].strip()) config_name = config_parts[1].strip() # Set both the configuration_id and configuration_compartment_id tempdict['configuration_compartment_id'] = config_compartment_name tempdict['configuration_id'] = config_name + # Add depends_on attribute to ensure MySQL configuration is created first + tempdict['depends_on_mysql_configuration'] = True else: - print(f"\nWARNING: Invalid configuration_id format: {config_id}. Expected format: compartment@name", file=sys.stderr) + print(f"\nWARNING: Invalid configuration_id format: {config_id}. Expected format: compartment@name", + file=sys.stderr) tempdict['configuration_id'] = config_id - tempdict['configuration_compartment_id'] = tempdict['compartment_name'] # Use MySQL compartment as default + tempdict['configuration_compartment_id'] = tempdict[ + 'compartment_name'] # Use MySQL compartment as default + tempdict['depends_on_mysql_configuration'] = False else: - # If it's not in compartment@name format, use it directly (assuming it's an OCID) - tempdict['configuration_id'] = config_id - tempdict['configuration_compartment_id'] = tempdict['compartment_name'] # Use MySQL compartment as default + # If it's not in compartment@name format, check if it's an OCID or just a name + if config_id.startswith('ocid1.'): + # It's an OCID, no dependency needed + tempdict['configuration_id'] = config_id + tempdict['configuration_compartment_id'] = tempdict[ + 'compartment_name'] # Use MySQL compartment as default + tempdict['depends_on_mysql_configuration'] = False + else: + # It's just a name, we need to add dependency + tempdict['configuration_id'] = config_id + tempdict['configuration_compartment_id'] = tempdict[ + 'compartment_name'] # Use MySQL compartment as default + tempdict['depends_on_mysql_configuration'] = True else: tempdict['configuration_id'] = '' tempdict['configuration_compartment_id'] = tempdict['compartment_name'] # Use MySQL compartment as default + tempdict['depends_on_mysql_configuration'] = False # Process Availability Domain ad = str(df.loc[i, 'Availability Domain(AD1|AD2|AD3)']).strip() @@ -139,7 +160,7 @@ def create_terraform_mysql_db(inputfile, outdir, service_dir, prefix, ct): if subnet_name and subnet_name.lower() != 'nan': subnet_parts = subnet_name.split('@') if len(subnet_parts) == 2: - network_compartment = subnet_parts[0].strip() + network_compartment = commonTools.check_tf_variable(subnet_parts[0].strip()) vcn_subnet = subnet_parts[1].strip() vcn_subnet_parts = vcn_subnet.split('::') if len(vcn_subnet_parts) == 2: diff --git a/cd3_automation_toolkit/Database/export_mysql_db_nonGreenField.py b/cd3_automation_toolkit/Database/export_mysql_db_nonGreenField.py index 2bb133d0a..ad96ffb28 100644 --- a/cd3_automation_toolkit/Database/export_mysql_db_nonGreenField.py +++ b/cd3_automation_toolkit/Database/export_mysql_db_nonGreenField.py @@ -41,7 +41,7 @@ 'zurich': 'eu-zurich-1' } -def print_mysql(region, vnc_client, mysql_db, values_for_column, ntk_compartment_name, state, ct, row): +def print_mysql(region, vnc_client, mysql_db, values_for_column, ntk_compartment_name, state, ct, mysql_aas_client): mysql_tf_name = commonTools.check_tf_variable(mysql_db.display_name) mysql_subnet_id = mysql_db.subnet_id @@ -66,40 +66,24 @@ def print_mysql(region, vnc_client, mysql_db, values_for_column, ntk_compartment if hasattr(mysql_db, 'configuration_id') and mysql_db.configuration_id: config_id = mysql_db.configuration_id try: - # Create MySQL client with the same config as the parent client - config_copy = dict(vnc_client.base_client.config) - # Create a copy of the config and set the region from Excel row - config_copy = config_copy.copy() - excel_region = row['Region'].lower().strip() - config_copy['region'] = region_mapping.get(excel_region, excel_region) + config_obj = mysql_aas_client.get_configuration(mysql_db.configuration_id).data + except Exception as e2: + print(f"\nWarning2: Could not fetch configuration details for {mysql_db.display_name}: {str(e2)}") + config_obj = None - # Try with both client types - try: - mysql_client = oci.mysql.MysqlaasClient(config=config_copy, retry_strategy=oci.retry.DEFAULT_RETRY_STRATEGY, signer=vnc_client.base_client.signer) - config_obj = mysql_client.get_configuration(mysql_db.configuration_id).data - except Exception as e1: - try: - mysql_client = oci.mysql.MysqlaasClient(config=config_copy, retry_strategy=oci.retry.DEFAULT_RETRY_STRATEGY, signer=vnc_client.base_client.signer) - config_obj = mysql_client.get_configuration(mysql_db.configuration_id).data - except Exception as e2: - print(f"\nWarning2: Could not fetch configuration details for {mysql_db.display_name}: {str(e2)}") - config_obj = None - - if hasattr(config_obj, 'display_name'): - config_name = config_obj.display_name + if hasattr(config_obj, 'display_name'): + config_name = config_obj.display_name - # Get configuration compartment name - for comp_name, comp_id in ct.ntk_compartment_ids.items(): - if comp_id == config_obj.compartment_id: - config_compartment_name = comp_name - break + # Get configuration compartment name + for comp_name, comp_id in ct.ntk_compartment_ids.items(): + if comp_id == config_obj.compartment_id: + config_compartment_name = comp_name + break - # Format configuration name similar to subnet_name - if config_compartment_name and config_name: - config_id = config_compartment_name +'@' + config_name + # Format configuration name similar to subnet_name + if config_compartment_name and config_name: + config_id = config_compartment_name +'@' + config_name - except Exception as e: - print(f"\nWarning1: Could not fetch configuration details for {mysql_db.display_name}: {str(e)}") # Check if resource exists in terraform state tf_resource = f'module.mysql_db_system[\\"{mysql_tf_name}\\"].oci_mysql_mysql_db_system.db_system' @@ -125,9 +109,6 @@ def print_mysql(region, vnc_client, mysql_db, values_for_column, ntk_compartment values_for_column[col_header].append(config_name) else: values_for_column[col_header].append("") - elif col_header == 'Hostname Label': - hostname = mysql_db.hostname_label if mysql_db.hostname_label else mysql_db.display_name.lower().replace("-", "") - values_for_column[col_header].append(hostname) elif col_header == 'Shape': values_for_column[col_header].append(mysql_db.shape_name) elif col_header == 'Network Details': @@ -244,14 +225,14 @@ def export_mysql_db(inputfile, outdir, service_dir, config, signer, ct, export_c region = reg.capitalize() vnc_client = oci.core.VirtualNetworkClient(config=config, retry_strategy=oci.retry.DEFAULT_RETRY_STRATEGY, signer=signer) + mysql_client = oci.mysql.DbSystemClient(config=config, retry_strategy=oci.retry.DEFAULT_RETRY_STRATEGY, signer=signer) + mysql_aas_client = oci.mysql.MysqlaasClient(config=config, retry_strategy=oci.retry.DEFAULT_RETRY_STRATEGY, signer=signer) for ntk_compartment_name in export_compartments: - mysql_dbs = oci.pagination.list_call_get_all_results(oci.mysql.DbSystemClient(config=config, retry_strategy=oci.retry.DEFAULT_RETRY_STRATEGY, signer=signer).list_db_systems, - compartment_id=ct.ntk_compartment_ids[ntk_compartment_name], - lifecycle_state="ACTIVE") + mysql_dbs = oci.pagination.list_call_get_all_results(mysql_client.list_db_systems,compartment_id=ct.ntk_compartment_ids[ntk_compartment_name],lifecycle_state="ACTIVE") for mysql_db in mysql_dbs.data: - mysql_db = oci.mysql.DbSystemClient(config=config, retry_strategy=oci.retry.DEFAULT_RETRY_STRATEGY, signer=signer).get_db_system(mysql_db.id).data + mysql_db = mysql_client.get_db_system(mysql_db.id).data # Tags filter defined_tags = mysql_db.defined_tags tags_list = [] @@ -268,7 +249,7 @@ def export_mysql_db(inputfile, outdir, service_dir, config, signer, ct, export_c if check == False: continue - print_mysql(region, vnc_client, mysql_db, values_for_column, ntk_compartment_name, state, ct, df.iloc[0]) + print_mysql(region, vnc_client, mysql_db, values_for_column, ntk_compartment_name, state, ct, mysql_aas_client) commonTools.write_to_cd3(values_for_column, cd3file, sheetName) print("{0} MySQL Database Systems exported into CD3.\n".format(len(values_for_column["Region"]))) diff --git a/cd3_automation_toolkit/Database/templates/mysql-template b/cd3_automation_toolkit/Database/templates/mysql-template index a5cc872ad..446bbd1dc 100644 --- a/cd3_automation_toolkit/Database/templates/mysql-template +++ b/cd3_automation_toolkit/Database/templates/mysql-template @@ -24,7 +24,18 @@ mysql_db_system = { mysql_db_system_availability_domain = "{{ availability_domain }}" mysql_db_system_fault_domain = "{{ fault_domain }}" configuration_compartment_id = "{{ configuration_compartment_id }}" + {% if depends_on_mysql_configuration %} + # Skip data source lookup for configurations created in the same Terraform run + skip_datasource_lookup = true + # Use the configuration name directly + configuration_name = "{{ configuration_id }}" + # Set an empty configuration_id to force the module to use the name + configuration_id = "" + # Add explicit depends_on to ensure configuration is created first + depends_on = ["module.mysql_configurations[\"{{ configuration_id }}\"]"] + {% else %} configuration_id = "{{ configuration_id }}" + {% endif %} mysql_shape_name = "{{ shape }}" vcn_names = "{{ vcn_names }}" subnet_id = "{{ subnet_id }}" diff --git a/cd3_automation_toolkit/Excel_Columns b/cd3_automation_toolkit/Excel_Columns index cc3aa3179..cc0d110d8 100644 --- a/cd3_automation_toolkit/Excel_Columns +++ b/cd3_automation_toolkit/Excel_Columns @@ -11,7 +11,8 @@ "Users" : { "Family Name" : "family_name", - "User Name" : "name" + "User Name" : "name", + "MFA Status" : "urn_ietf_params_scim_schemas_oracle_idcs_extension_mfa_user.mfa_status" }, "Policies" : { diff --git a/cd3_automation_toolkit/Network/BaseNetwork/export_network_nonGreenField.py b/cd3_automation_toolkit/Network/BaseNetwork/export_network_nonGreenField.py index 554ad54bc..a39642f0e 100644 --- a/cd3_automation_toolkit/Network/BaseNetwork/export_network_nonGreenField.py +++ b/cd3_automation_toolkit/Network/BaseNetwork/export_network_nonGreenField.py @@ -974,6 +974,7 @@ def export_major_objects(inputfile, outdir, service_dir, config, signer, ct, exp igw_info = None ngw_info = None sgw_info = None + drg_info = None drg_attachment_info = None for drg_attachment_info in DRG_Attachments.data: diff --git a/cd3_automation_toolkit/setUpOCI.py b/cd3_automation_toolkit/setUpOCI.py index 8a4e8696f..5d7862bca 100644 --- a/cd3_automation_toolkit/setUpOCI.py +++ b/cd3_automation_toolkit/setUpOCI.py @@ -1437,11 +1437,6 @@ def create_mysql(execute_all=False,prim_options=[]): Option('Add/Modify/Delete MySQL DB Systems', Database.create_terraform_mysql_db, 'Processing MySQL-DBSystems Tab'), Option('Add/Modify/Delete MySQL Configurations', Database.create_terraform_mysql_configuration, 'Processing MySQL-Configurations Tab'), ] - if prim_options: - options = match_options(options, prim_options) - else: - if not execute_all: - options = show_options(options, quit=True, menu=True, index=1) execute_options(options, inputfile, outdir, service_dir_mysql_dbsystem, prefix, ct) # Update modified path list update_path_list(regions_path=subscribed_regions, service_dirs=[service_dir_mysql_dbsystem]) From 6d6c3da13e245f13140ad75cad74bf2e8999f0f1 Mon Sep 17 00:00:00 2001 From: xs2suruchi Date: Thu, 27 Mar 2025 15:47:47 +0530 Subject: [PATCH 10/15] Automation Toolkit Release v2025.1.0 --- cd3_automation_toolkit/commonTools.py | 1 + cd3_automation_toolkit/setUpOCI.py | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/cd3_automation_toolkit/commonTools.py b/cd3_automation_toolkit/commonTools.py index c48263f7a..4ec533098 100644 --- a/cd3_automation_toolkit/commonTools.py +++ b/cd3_automation_toolkit/commonTools.py @@ -375,6 +375,7 @@ def get_compartment_map(self, var_file, resource_name): if resource_name in ntk_only_resources: pass else: + print("\n") if resource_name in ["Compartments","IAM Policies","IAM Groups","IAM Users","Network Sources","Tagging Objects"]: input_compartment_names = None elif resource_name == "Clone Firewall Policy": diff --git a/cd3_automation_toolkit/setUpOCI.py b/cd3_automation_toolkit/setUpOCI.py index 5d7862bca..0d8fce912 100644 --- a/cd3_automation_toolkit/setUpOCI.py +++ b/cd3_automation_toolkit/setUpOCI.py @@ -2252,8 +2252,9 @@ def create_firewall(inputfile, outdir, service_dir, prefix, ct,sub_options=[]): print("\nworkflow_type set to export_resources. Export existing OCI objects and Synch with TF state") print("We recommend to not have any existing tfvars/tfstate files for export out directory") export_regions = get_region_list(rm=False,vizoci=False) - export_tags_list = get_tags_list() compartments = ct.get_compartment_map(var_file, "OCI Resources") + export_tags_list = get_tags_list() + inputs = [ Option("Export All OCI Resources", export_all, "OCI Resources"), Option('Export Identity', export_identityOptions, 'Identity'), From b0a48d469656633883a6dbcd0a017ad76047646d Mon Sep 17 00:00:00 2001 From: xs2suruchi Date: Thu, 27 Mar 2025 21:33:36 +0530 Subject: [PATCH 11/15] Automation Toolkit Release v2025.1.0 --- .../example/CD3-CIS-template.xlsx | Bin 338745 -> 297102 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/cd3_automation_toolkit/example/CD3-CIS-template.xlsx b/cd3_automation_toolkit/example/CD3-CIS-template.xlsx index 4aa0f76ff195c59b74525e722f3692dcb3149c45..85de326b3ebed4eaa05be87dba9d82cfaf106a37 100644 GIT binary patch delta 168890 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⁡ez<2&%f571~gVf5o?5=hfwC`Nq5o6h&| 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"NNP)lkfM7I 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

;Z*Oeb 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%0A^#_-~<)% zqr$=AiNV2P{YJsTfq?bIz#0$_2WOin4h}ZZ00b~zTrdIlZ`v%O_K0A1vMo)Pm=oa2 zfdN1d(H}Y}h~r}1@Z(H~!O%5KFg6(nD{;{=100+q4*XxF5(SKe;)1~VWJ?WI<(9y$ z7Tl@+*5@O8P3gfXAqD~*CNLbF1>n%1R*6-vsdq4H%9bxr8CcQMNB%eEsd-JU!YJAj zeIZid+D30eI5^@zN^oujPy|p`;5T+MQ?Fhr7Jw@JFG~68HRS@M3NG5dF#yq!1g!q4 ztJLKH1?;iC{KVQg(}?vqWYM6 zd;L2Qi9w(O|D;~LyVey2(?yIF$@2@K{Qir|%D$#1VAKqa?FScNbVyRXpYm_)2-+ z?-@9OHe~)^?QxCt2E)dKzXRn!1p@NYJKUre=qaMYf2&lYy=i>Y+2|A zlSKot93)@UKEQGz-rty=%ncR+!(26TaPI)2nFqT3pGF-OZ?G{KR$AVtBtQ)Z_e1RO zj#H$0gOQ>GSo1E1@jamK@d^IM$lPzRCoqhqEqW7^8xAf%@o&sC<_61yVFnuv39&%0 zuc7$cx6iFN*d7csw}WTS1d34hUyUxfABM4zVK&l0Vld(081MhB$YcUW;6pikfQk)5 z0BXVK>C27JKy5`?{mnA0-mp=V0NaBBu&CgyE^!fH`2F#BIYCIkvZm20Xm>7!o7!e!liw8zUEGoOr z_ZS<@i&$O`q|6XWp+csBmU?V3Gh$E0tq61%0C=meQ}>{c?*jWQt8e%1nco_P_CEbb zvt13a^AgZ?dKXLreTD-jL3I9z01dtazz)eSu3olJ zU9Jzv<&jH2nwoD z30$x$qAIY0^xBnTT%ZhA>NlwbJRo7Oal30C9)t=t!~;r|sd+2Pf&sZ&K*|h}1o{gP zObP{Vlyn=oLhW051U{IQ{Eu5F{pKMYT&WHslndyuP=q^RJm?2}APl{aZ?n$hgYP2_ znck+hu|a515dy%2u_w2pKmx!6a`W4i5H8^291Ng-dMgsc14JBzfQatdt;n4a%!|Na z0ZqpO17CF!0=3Oe1Q=zuM1*n@fykgXu$vbw5(1)6*4J4`p~OT01>Dqt1hD~FMcYgQ zqJ!4MC~{&z)NFg5kr1jz43we|M#Vec+L|K;%wrIPvC02)-vc-}pws{MN^rW#56=&E zBmv`*|8X_=ZyX$4iz^~@7z9LV0kA~=$2E0-a2-B?lfaQ2$^htt0@sXT|JH`|A-C?9 zQh~tGcYtrO>&ZwEw*n9o*nr}@0vDH&|8X(dAG&*A0!1SMKS0cmxz%$?0`xP-c%T+# zK(x?xQs4jqEMg`>^h~%G(LuYJ0at)^%)fham4pa&Bm+}J-@#C=)LT@O6hMK+&Dg+{ z=%1I-Tg2ZNBJ)AZ=m0349!!jgoqlUoyc2W>DhOLTjYR?IBg(v%GeNZ|{t=~S-m3J#*BnL{6Rfq`HCkG27@|53->tW)WDn#fGO#Hm&R;)?^h+)gGf%4Kp zb6_d-&$p>}PXOhBQD#Jp##>RkIUv%Z1Vs4F*CJYIE+vpBvF$c>P6-qTShP)o_^tz} zH!83gtPto>R2ncQ;zZ{yMZp3_g6aT;gFdDPR2xVLq53zPx?!X-R(kq)ek z@Eje=bq{#|MgR@C2j*q|djtCW0{uN`00o#18cGl5L?~js zNzBs&bD8T!u|QiI{BX0N{Xgoen4xzWz%*pnUvdB^Nvps~5^%ix?ZqJjRbc>&BCNh8IX|a z{U)J21;(Unt5&2yeouX95Gj}jdKYLz%r1t11epuA=wDR<3>>)O;39y3Crof~5M$uX H2JZg@K7hf? delta 209911 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

vk& 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

D%Kq%R9SBA;1RK`* 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 delta 23046 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 GuKy3w|C1B| diff --git a/cd3_automation_toolkit/setUpOCI.py b/cd3_automation_toolkit/setUpOCI.py index 0d8fce912..759064487 100644 --- a/cd3_automation_toolkit/setUpOCI.py +++ b/cd3_automation_toolkit/setUpOCI.py @@ -163,6 +163,10 @@ def get_tags_list(resource_name=[]): input_tags_list = input(tags_list_str.format(resource_name)) input_tags_list = list(map(lambda x: x.strip(), input_tags_list.split(','))) if input_tags_list else [] + if input_tags_list ==[]: + print("\nFetching OCI resources with all Tags...") + else: + print("\nFetching OCI Resources with Tags... " + str(input_tags_list)) return input_tags_list From 27cb01e3d7988bc57b12a686375352206ff7503d Mon Sep 17 00:00:00 2001 From: xs2suruchi Date: Tue, 1 Apr 2025 10:56:10 +0530 Subject: [PATCH 14/15] Automation Toolkit Release v2025.1.0 --- .../Database/templates/mysql-configuration-template | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cd3_automation_toolkit/Database/templates/mysql-configuration-template b/cd3_automation_toolkit/Database/templates/mysql-configuration-template index faef2d8a7..9361c7873 100644 --- a/cd3_automation_toolkit/Database/templates/mysql-configuration-template +++ b/cd3_automation_toolkit/Database/templates/mysql-configuration-template @@ -20,9 +20,9 @@ mysql_configuration = { compartment_id = "{{ compartment_tf_name }}" mysql_configuration_shape_name = "{{ shape_name }}" mysql_configuration_display_name = "{{ display_name }}" -{%- if description and description != "nan" and description != "" %} +{% if description and description != "nan" and description != "" %} mysql_configuration_description = "{{ description }}" -{%- endif %} +{% endif %} {%- for key in config_keys() %} {%- if key.startswith('mysql_configuration_variables_') %} {%- set value = config_value(key) %} From 03a539979abcfdc1183b0cfc3c8a8312a8b92c12 Mon Sep 17 00:00:00 2001 From: xs2suruchi Date: Wed, 2 Apr 2025 18:25:38 +0530 Subject: [PATCH 15/15] Automation Toolkit Release v2025.1.0 --- Dockerfile | 3 +-- cd3_automation_toolkit/cd3Validator.py | 28 +++++++++++++------------- cd3_automation_toolkit/commonTools.py | 5 ++++- cd3_automation_toolkit/setUpOCI.py | 2 +- 4 files changed, 20 insertions(+), 18 deletions(-) diff --git a/Dockerfile b/Dockerfile index fa0782d61..e90348416 100755 --- a/Dockerfile +++ b/Dockerfile @@ -19,8 +19,7 @@ ARG DOWNLOAD_PROVIDER=YES ARG TF_OCI_PROVIDER=6.30.0 ARG TF_NULL_PROVIDER=3.2.3 -RUN microdnf update -y && \ - microdnf install -y sudo && \ +RUN microdnf install -y sudo && \ groupadd --gid $USER_GID $USERNAME && \ useradd --uid $USER_UID --gid $USER_GID -d /$USERNAME -m $USERNAME && \ echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME && \ diff --git a/cd3_automation_toolkit/cd3Validator.py b/cd3_automation_toolkit/cd3Validator.py index d175429fb..9b4a8eedf 100644 --- a/cd3_automation_toolkit/cd3Validator.py +++ b/cd3_automation_toolkit/cd3Validator.py @@ -1945,7 +1945,7 @@ def validate_cd3(choices, filename, var_file, prefix, outdir, ct1): #config1, si #ct.get_network_compartment_ids(config['tenancy'], "root", configFileName) #print("Getting Compartments OCIDs...") - ct.get_compartment_map(var_file,'Validator') + all_comp_ocids = ct.get_compartment_map(var_file,'Validator') vcnobj = parseVCNs(filename) subnetobj = parseSubnets(filename) @@ -1971,25 +1971,25 @@ def validate_cd3(choices, filename, var_file, prefix, outdir, ct1): #config1, si if ('Validate Policies' in options[0]): log("\n============================= Verifying Policies Tab ==========================================\n") print("\nValidating Policies Tab..") - policies_check = validate_policies(filename,ct.ntk_compartment_ids) + policies_check = validate_policies(filename,all_comp_ocids) errors = policies_check if ('Validate Tags' in options[0]): log("\n============================= Verifying Tags Tab ==========================================\n") print("\nValidating Tags Tab..") - tags_check = validate_tags(filename,ct.ntk_compartment_ids) + tags_check = validate_tags(filename,all_comp_ocids) errors = tags_check if ('Validate Budgets' in options[0]): log("\n============================= Verifying Budgets Tab ==========================================\n") print("\nValidating Budgets Tab..") - budgets_check = validate_budgets(filename,ct.ntk_compartment_ids) + budgets_check = validate_budgets(filename,all_comp_ocids) errors = budgets_check final_check.append(budgets_check) if ('Validate KMS' in options[0]): log("\n============================= Verifying KMS Tab ==========================================\n") print("\nValidating KMS Tab..") - kms_check = validate_kms(filename,ct.ntk_compartment_ids) + kms_check = validate_kms(filename,all_comp_ocids) errors = kms_check @@ -2001,19 +2001,19 @@ def validate_cd3(choices, filename, var_file, prefix, outdir, ct1): #config1, si log("\n====================== Note: LPGs will not be verified ====================================\n") print("\nValidating VCNs Tab..") print("NOTE: LPGs will not be verified") - vcn_check, vcn_cidr_check, vcn_peer_check = validate_vcns(filename, ct.ntk_compartment_ids, vcnobj) #, config) + vcn_check, vcn_cidr_check, vcn_peer_check = validate_vcns(filename, all_comp_ocids, vcnobj) #, config) log("============================= Verifying SubnetsVLANs Tab ==========================================\n") print("\nValidating SubnetsVLANs Tab..") - subnet_check, subnet_cidr_check = validate_subnets(filename, ct.ntk_compartment_ids, vcnobj) + subnet_check, subnet_cidr_check = validate_subnets(filename, all_comp_ocids, vcnobj) log("============================= Verifying DHCP Tab ==========================================\n") print("\nValidating DHCP Tab..") - dhcp_check = validate_dhcp(filename, ct.ntk_compartment_ids, vcnobj) + dhcp_check = validate_dhcp(filename, all_comp_ocids, vcnobj) log("============================= Verifying DRGs Tab ==========================================\n") print("\nValidating DRGs Tab..") - drgv2_check = validate_drgv2(filename, ct.ntk_compartment_ids, vcnobj) + drgv2_check = validate_drgv2(filename, all_comp_ocids, vcnobj) if any([vcn_check, vcn_cidr_check, vcn_peer_check, subnet_check, subnet_cidr_check, dhcp_check, drgv2_check]): errors = True @@ -2021,31 +2021,31 @@ def validate_cd3(choices, filename, var_file, prefix, outdir, ct1): #config1, si if ('Validate DNS' in options[0]): log("\n============================= Verifying DNS Tabs ==========================================\n") print("\nValidating DNS Tab..") - dns_check = validate_dns(filename,ct.ntk_compartment_ids) + dns_check = validate_dns(filename,all_comp_ocids) errors = dns_check if ('Validate Instances' in options[0]): log("\n============================= Verifying Instances Tab ==========================================\n") print("\nValidating Instances Tab..") - instances_check = validate_instances(filename,ct.ntk_compartment_ids,subnetobj,vcn_subnet_list,vcn_nsg_list) + instances_check = validate_instances(filename,all_comp_ocids,subnetobj,vcn_subnet_list,vcn_nsg_list) errors = instances_check if ('Validate Block Volumes' in options[0]): log("\n============================= Verifying BlockVolumes Tab ==========================================\n") print("\nValidating BlockVolumes Tab..") - bvs_check = validate_blockvols(filename,ct.ntk_compartment_ids) + bvs_check = validate_blockvols(filename,all_comp_ocids) errors = bvs_check if ('Validate FSS' in options[0]): log("\n============================= Verifying FSS Tab ==========================================\n") print("\nValidating FSS Tab..") - fss_check = validate_fss(filename,ct.ntk_compartment_ids,subnetobj,vcn_subnet_list,vcn_nsg_list) + fss_check = validate_fss(filename,all_comp_ocids,subnetobj,vcn_subnet_list,vcn_nsg_list) errors = fss_check if ('Validate Buckets' in options[0]): log("\n============================= Verifying Buckets Tab ==========================================\n") print("\nValidating Buckets Tab..") - buckets_check = validate_buckets(filename,ct.ntk_compartment_ids) + buckets_check = validate_buckets(filename,all_comp_ocids) errors = buckets_check # Prints the final result; once the validation is complete diff --git a/cd3_automation_toolkit/commonTools.py b/cd3_automation_toolkit/commonTools.py index 4ec533098..6b9fb0329 100644 --- a/cd3_automation_toolkit/commonTools.py +++ b/cd3_automation_toolkit/commonTools.py @@ -373,7 +373,10 @@ def get_compartment_map(self, var_file, resource_name): #print("Please fetch compartments first from CD3 Services option from main menu") exit(1) if resource_name in ntk_only_resources: - pass + if resource_name == "Validator": + return var_ocids + else: + pass else: print("\n") if resource_name in ["Compartments","IAM Policies","IAM Groups","IAM Users","Network Sources","Tagging Objects"]: diff --git a/cd3_automation_toolkit/setUpOCI.py b/cd3_automation_toolkit/setUpOCI.py index 759064487..3dd24429e 100644 --- a/cd3_automation_toolkit/setUpOCI.py +++ b/cd3_automation_toolkit/setUpOCI.py @@ -882,7 +882,7 @@ def export_management_services(prim_options=[]): def export_notifications(inputfile, outdir, service_dir, config, signer, ct, export_regions, export_tags_list): - compartments = ct.get_compartment_map(var_file,'Notifications') + #compartments = ct.get_compartment_map(var_file,'Notifications') ManagementServices.export_notifications(inputfile, outdir, service_dir, config,signer,ct, export_compartments=compartments, export_regions=export_regions,export_tags=export_tags_list) create_management_services(prim_options=['Add/Modify/Delete Notifications']) print("\n\nExecute import_commands_notifications.sh script created under each region directory to synch TF with OCI Notifications\n")

X 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 From ee6e8ebf1279cf5db1c26520bae3711e0306cfe7 Mon Sep 17 00:00:00 2001 From: xs2suruchi Date: Fri, 28 Mar 2025 07:40:08 +0530 Subject: [PATCH 12/15] Automation Toolkit Release v2025.1.0 --- cd3_automation_toolkit/Database/templates/mysql-template | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cd3_automation_toolkit/Database/templates/mysql-template b/cd3_automation_toolkit/Database/templates/mysql-template index 446bbd1dc..61f843e28 100644 --- a/cd3_automation_toolkit/Database/templates/mysql-template +++ b/cd3_automation_toolkit/Database/templates/mysql-template @@ -14,7 +14,7 @@ mysql_db_system = { ##Add New MySQL Database System for {{ region|lower }} here## } {% else %} - "{{ display_name }}" = { + "{{ display_tf_name }}" = { compartment_id = "{{ compartment_name }}" network_compartment_id = "{{ network_compartment_id }}" mysql_db_system_display_name = "{{ display_name }}" From d1aca3503ef7d80e58679a2bf3ec035d331e7647 Mon Sep 17 00:00:00 2001 From: xs2suruchi Date: Fri, 28 Mar 2025 15:59:55 +0530 Subject: [PATCH 13/15] Automation Toolkit Release v2025.1.0 --- Dockerfile | 3 ++- .../Database/templates/mysql-template | 9 +-------- cd3_automation_toolkit/Release-Notes | 2 +- .../example/CD3-CIS-template.xlsx | Bin 297102 -> 297331 bytes cd3_automation_toolkit/setUpOCI.py | 4 ++++ 5 files changed, 8 insertions(+), 10 deletions(-) diff --git a/Dockerfile b/Dockerfile index e90348416..fa0782d61 100755 --- a/Dockerfile +++ b/Dockerfile @@ -19,7 +19,8 @@ ARG DOWNLOAD_PROVIDER=YES ARG TF_OCI_PROVIDER=6.30.0 ARG TF_NULL_PROVIDER=3.2.3 -RUN microdnf install -y sudo && \ +RUN microdnf update -y && \ + microdnf install -y sudo && \ groupadd --gid $USER_GID $USERNAME && \ useradd --uid $USER_UID --gid $USER_GID -d /$USERNAME -m $USERNAME && \ echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME && \ diff --git a/cd3_automation_toolkit/Database/templates/mysql-template b/cd3_automation_toolkit/Database/templates/mysql-template index 61f843e28..4c8b1128b 100644 --- a/cd3_automation_toolkit/Database/templates/mysql-template +++ b/cd3_automation_toolkit/Database/templates/mysql-template @@ -24,17 +24,10 @@ mysql_db_system = { mysql_db_system_availability_domain = "{{ availability_domain }}" mysql_db_system_fault_domain = "{{ fault_domain }}" configuration_compartment_id = "{{ configuration_compartment_id }}" + configuration_id = "{{ configuration_id }}" {% if depends_on_mysql_configuration %} - # Skip data source lookup for configurations created in the same Terraform run - skip_datasource_lookup = true - # Use the configuration name directly - configuration_name = "{{ configuration_id }}" - # Set an empty configuration_id to force the module to use the name - configuration_id = "" # Add explicit depends_on to ensure configuration is created first depends_on = ["module.mysql_configurations[\"{{ configuration_id }}\"]"] - {% else %} - configuration_id = "{{ configuration_id }}" {% endif %} mysql_shape_name = "{{ shape }}" vcn_names = "{{ vcn_names }}" diff --git a/cd3_automation_toolkit/Release-Notes b/cd3_automation_toolkit/Release-Notes index b3c125353..05560e73c 100644 --- a/cd3_automation_toolkit/Release-Notes +++ b/cd3_automation_toolkit/Release-Notes @@ -8,7 +8,7 @@ Apr 4th, 2024 4. Moved compartment filter before showing export options to make it common for all services when using toolkit with CLI. 5. Running Create/Modify Network through Jenkins will automatically call export of rules after successful terraform apply. This was a manual process earlier. - +6. Small bug fixes wrt RPC, Block Volumes ------------------------------------- diff --git a/cd3_automation_toolkit/example/CD3-CIS-template.xlsx b/cd3_automation_toolkit/example/CD3-CIS-template.xlsx index 85de326b3ebed4eaa05be87dba9d82cfaf106a37..2acff59ecd6d62fe84ce1e7d5f4b403c340470bf 100644 GIT binary patch delta 23458 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