From 4f957919ca085507ce29fe9dbb0dfb7596496fe9 Mon Sep 17 00:00:00 2001 From: Jusong Yu Date: Tue, 30 May 2023 01:57:17 +0200 Subject: [PATCH 01/25] WORKING VERSION --- Vagrantfile | 21 +++- inventory.yml | 2 +- playbook-qe.yml | 317 ++++++++++++++++++++++++++++++++++++++++++++++++ tox.ini | 8 +- 4 files changed, 342 insertions(+), 6 deletions(-) create mode 100644 playbook-qe.yml diff --git a/Vagrantfile b/Vagrantfile index c417bcf..ddf26a3 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -12,6 +12,14 @@ launch_gui = ENV.has_key?('VAGRANT_NO_GUI') ? false : true # Currently on GitHub Actions it fails if accelerate3d activated on_ci = ENV.has_key?('VAGRANT_ON_GH') ? true : false +$script = <<-SCRIPT +echo "I am provisioningi aiidalab folder creating..." +AIIDALAB_VOL=/var/aiidalab_volume +mkdir -p ${AIIDALAB_VOL} +chown 1000:100 ${AIIDALAB_VOL} +chmod 0775 ${AIIDALAB_VOL} +SCRIPT + Vagrant.configure(2) do |config| ## VIRTUALBOX provider @@ -79,7 +87,7 @@ Vagrant.configure(2) do |config| # Disable the default shared folder of vagrant config.vm.synced_folder ".", "/vagrant", disabled: true - # provisioner: set up VM via ansible. To (re-)run this step: + # provisioner: set up VM with ansible. To (re-)run this step: # vagrant provision --provision-with ansible # Note we use a static inventory, see: https://www.vagrantup.com/docs/provisioning/ansible_intro#static-inventory config.vm.network :private_network, ip: gconfig["ansible_host"] @@ -95,4 +103,15 @@ Vagrant.configure(2) do |config| # Ensure that public key auth is not disabled by the user's config ansible.raw_ssh_args = ['-o PubKeyAuthentication=yes -o DSAAuthentication=yes'] end + # Create a folder for AiiDAlab volume mount. To (re-)run this step: + # vagrant provision --provision-with shell + config.vm.provision "shell", inline: $script + # provisioner: set up VM with docker. To (re-)run this step: + # vagrant provision --provision-with docker + config.vm.provision "docker" do |d| + d.run "ghcr.io/aiidalab/qe:pr-381", + daemonize: true, + restart: "always", + args: "-e JUPYTER_TOKEN='easy' -p 8888:8888 -v /var/aiidalab_volume:/home/jovyan" + end end diff --git a/inventory.yml b/inventory.yml index 5028304..137ea42 100644 --- a/inventory.yml +++ b/inventory.yml @@ -26,7 +26,7 @@ all: vm_cpus: 2 vm_vram: 128 vm_headless: false - vm_browser: chromium-browser # 'chromium-browser' or 'firefox' + vm_browser: firefox # 'chromium-browser' or 'firefox' vm_data_folder: "/usr/local/share" # this is used to put shared data files in # vm_shared_folder: "/shared" # this is currently inactive in Vagrant config vm_timezone: "Europe/Zurich" diff --git a/playbook-qe.yml b/playbook-qe.yml new file mode 100644 index 0000000..4142a38 --- /dev/null +++ b/playbook-qe.yml @@ -0,0 +1,317 @@ +- name: Prepare for VM build + + hosts: "{{ build_hosts | default('vagrant-ssh') }}" + gather_facts: false + + pre_tasks: + + - name: test configuration + tags: [init] + debug: + msg: RUNNING PLAYBOOK FOR '{{ vm_name }}' VERSION '{{ vm_version }}' + + - name: testing ansible environment + tags: [init] + debug: + msg: Connecting to host '{{ inventory_hostname }}' as user '{{ ansible_user }}' + + - name: Install linux-headers-generic for guest-additions + tags: [init] + when: "inventory_hostname.startswith('vagrant')" + become: true + apt: + cache_valid_time: 86400 # One day + name: + - linux-headers-generic + + - name: Make local dist folder + tags: [init] + local_action: + module: file + state: directory + path: "{{ local_dist_folder }}/" + when: release_notes_locally is defined and release_notes_locally + +- name: Build VM + hosts: "{{ build_hosts | default('vagrant-ssh') }}" + + tasks: + + # Generic Tasks + # These tasks are run for any VM build, regardless of the software installed + # They setup the VM user, commandline interface, and (optionally) desktop GUI + + - name: Update system package managers (apt, pip) + tags: [init] + include_tasks: local/tasks/ensure-apt-pip.yml + + - name: "Add QM user '{{ vm_user }}'" + tags: [add_user, ci_test] + import_tasks: local/tasks/add-qm-user.yml + + - name: "Add release notes section for the operating system" + tags: [release_notes] + import_tasks: local/tasks/release-notes-system.yml + + - name: Customise bash terminal for QM + tags: [customise-bash] + become: true + become_user: "{{ vm_user }}" + import_tasks: local/tasks/customise-bash.yml + + - name: Install common text editors + tags: [editors] + import_role: + name: marvel-nccr.editors + vars: + editors_vm_user: "{{ vm_user }}" + + - name: Add desktop GUI + tags: [ubuntu_desktop] + when: not vm_headless + import_role: + name: marvel-nccr.ubuntu_desktop + vars: + ubuntu_desktop_vm_user: "{{ vm_user }}" + ubuntu_desktop_browser: "{{ vm_browser }}" + + - name: Customise GUI for QM + tags: [customise-gui] + when: not vm_headless + become: true + become_user: "{{ vm_user }}" + import_tasks: local/tasks/customise-gui.yml + + - name: Setup QM to run simulations + tags: [simsetup] + import_tasks: local/tasks/simulation-setup.yml + + # Build Specific Tasks + # These tasks can be customised for specific VM builds, + # depending on the software one requires to be installed + + # - name: "Add user README" + # tags: [add_readme] + # become: true + # become_user: "{{ vm_user }}" + # template: + # src: local/tasks/files/README.md.j2 + # dest: "{{ readme_vm_path }}" + # vars: + # software_urls: + # Quantum ESPRESSO: http://www.quantum-espresso.org/ + + # - name: Install plotting tools (via apt) + # # TODO we may want to eventually install these with conda + # # (jmol and gnuplot are already installed via conda-forge) + # tags: [plotting] + # import_tasks: local/tasks/plotting-tools.yml + # vars: + # packages: [grace, xcrysden, default-jre] + + # - name: install SLURM service + # tags: [slurm] + # import_role: + # name: marvel-nccr.slurm + + # # TODO control version + # # could install with conda, but how to set up the systemd service? + # - name: install RabbitMQ server service + # tags: [rabbitmq] + # become: true + # become_user: "{{ root_user }}" + # import_tasks: local/tasks/rabbitmq.yml + + # # TODO control version + # # could install with conda, but how to set up the systemd service? + # - name: install PostrgeSQL server service + # tags: [postgresql] + # become: true + # become_user: "{{ root_user }}" + # import_tasks: local/tasks/postgresql.yml + + # - name: install conda+mamba + # tags: [conda] + # import_role: + # name: chrisjsewell.conda.user_install + # become: true + # become_user: "{{ vm_user }}" + # vars: + # conda_folder: "~/.conda" + # conda_installer_url: https://github.com/conda-forge/miniforge/releases/download/22.11.1-4/Mambaforge-22.11.1-4-Linux-x86_64.sh + # conda_installer_checksum: sha256:16c7d256de783ceeb39970e675efa4a8eb830dcbb83187f1197abfea0bf07d30 + # conda_activate_alias: workon + + # - name: Install code environment + # tags: [code-envs] + # # TODO ideally this would be import_tasks, but then we can't use loop + # include_tasks: local/tasks/conda-env-install.yml + # vars: + # conda_env: "{{ item.name }}" + # code_packages: "{{ item.pkgs }}" + # # TODO allow for `conda env config vars set` to be used, + # # e.g. for export OMP_NUM_THREADS=1 + # loop: + # # note here we specify exact versions of libxc/openmpi/mpich + # # this is because we want conda to re-use as many packages as possible + # # since re-used packages do not incur more disk memory usage + # - {name: qespresso, pkgs: [qe=7.2, libxc=5.2.3, openmpi=4.1.2]} + # - {name: visualise, pkgs: [jmol, gnuplot, cif2cell, python=3.9]} + # loop_control: + # label: "{{ item.name }}" + + # - name: Install AiiDA environment + # tags: [aiida-env] + # become: true + # become_user: "{{ vm_user }}" + # import_tasks: local/tasks/aiida-conda-env.yml + # vars: + # conda_env: "{{ aiida_conda_env }}" + # aiida_packages: + # - python=3.9 + # - pip + # - aiida-core=2 + # - aiida-core.notebook + # - aiida-quantumespresso=4 + # - aiida-pseudo=1 + # - ipykernel + # - jupyterlab + # - jupyterlab-tour + # - jupyterlab-spellchecker + # - mamba_gator # Provides Conda/Mamba management as a standalone application or as extension for JupyterLab. + + # - name: Create an aiida-profile + # tags: [aiida-profile] + # become: true + # become_user: "{{ vm_user }}" + # import_tasks: local/tasks/aiida-profile.yml + # vars: + # name: "{{ aiida_profile }}" + # aiida_run_verdi: "~/.conda/bin/conda run -n {{ aiida_conda_env }} verdi" + # postgres_user: postgres + # parameters: + # first_name: Max + # last_name: Scientist + # email: aiida@localhost + # institution: Quantum Mobile + # db_host: localhost + # db_port: 5432 + # db_name: aiidadb + # db_username: aiida + # db_password: "ne9N_LDK-*JSS" + # daemon_service: true + + # - name: Create AiiDA Jupyter service + # tags: [aiida-jupyter] + # become: true + # become_user: "{{ vm_user }}" + # import_tasks: local/tasks/aiida-jupyter.yml + + # - name: "Create AiiDA computers" + # tags: [aiida-computers] + # become: true + # become_user: "{{ vm_user }}" + # verdi_computer: + # verdi: "~/.conda/bin/conda run -n {{ aiida_conda_env }} verdi" + # profile: "{{ aiida_profile }}" + # label: "{{ item.l }}" + # scheduler: "{{ item.s }}" + # transport: core.local + # hostname: localhost + # work_dir: "~/.aiida_run" + # mpirun_command: "mpirun -np {tot_num_mpiprocs}" + # mpiprocs_per_machine: 2 + # configure: "--safe-interval=0" + # loop: + # - {l: local_direct, s: core.direct} + # - {l: local_slurm, s: core.slurm} + # loop_control: + # label: "{{ item.l }}" + + # - name: "Add AiiDA Codes" + # tags: [aiida-codes] + # become: true + # become_user: "{{ vm_user }}" + # verdi_code: + # verdi: ~/.conda/bin/conda run -n {{ aiida_conda_env }} verdi + # profile: "{{ aiida_profile }}" + # label: "{{ item.label }}" + # description: "Local code for '{{ item.exec }}' in Conda env '{{ item.env }}'" + # computer: local_slurm + # input_plugin: "{{ item.plugin }}" + # remote_abs_path: "/home/max/.conda/envs/{{ item.env }}/bin/{{ item.exec }}" + # prepend_text: | + # ulimit -s unlimited + # eval "$(conda shell.bash hook)" + # conda activate {{ item.env }} + # {{ item.prepend | default('') }} + # loop_control: + # label: "{{ item.label }}" + # loop: + # - {label: qe.pw, plugin: quantumespresso.pw, env: qespresso, exec: pw.x, prepend: export OMP_NUM_THREADS=1} + # - {label: qe.cp, plugin: quantumespresso.cp, env: qespresso, exec: cp.x, prepend: export OMP_NUM_THREADS=1} + # - {label: qe.pp, plugin: quantumespresso.pp, env: qespresso, exec: pp.x, prepend: export OMP_NUM_THREADS=1} + # - {label: qe.ph, plugin: quantumespresso.ph, env: qespresso, exec: ph.x, prepend: export OMP_NUM_THREADS=1} + # - {label: qe.neb, plugin: quantumespresso.neb, env: qespresso, exec: neb.x, prepend: export OMP_NUM_THREADS=1} + # - {label: qe.epw, plugin: quantumespresso.epw, env: qespresso, exec: epw.x, prepend: export OMP_NUM_THREADS=1} + # - {label: qe.projwfc, plugin: quantumespresso.projwfc, env: qespresso, exec: projwfc.x, prepend: export OMP_NUM_THREADS=1} + # - {label: qe.pw2wannier90, plugin: quantumespresso.pw2wannier90, env: qespresso, exec: pw2wannier90.x, prepend: export OMP_NUM_THREADS=1} + # - {label: qe.dos, plugin: quantumespresso.dos, env: qespresso, exec: dos.x, prepend: export OMP_NUM_THREADS=1} + # - {label: qe.q2r, plugin: quantumespresso.q2r, env: qespresso, exec: q2r.x, prepend: export OMP_NUM_THREADS=1} + # - {label: qe.matdyn, plugin: quantumespresso.matdyn, env: qespresso, exec: matdyn.x, prepend: export OMP_NUM_THREADS=1} + # - {label: nwchem.main, plugin: nwchem.nwchem, env: nwchem, exec: nwchem} + # - {label: siesta.main, plugin: siesta.siesta, env: siesta, exec: siesta} + # - {label: cp2k.main, plugin: cp2k, env: cp2k, exec: cp2k.psmp} + # - {label: abinit.main, plugin: abinit, env: abinit, exec: abinit} + + # TODO release notes for aiida computers/codes + + # - name: Download and install SSSP potentials + # tags: [aiida-pseudo] + # import_tasks: local/tasks/aiida-pseudo-sssp.yml + # vars: + # # for quantum mobile + # aiida_pseudo_cmd: "~/.conda/bin/conda run -n {{ aiida_conda_env }} aiida-pseudo" + # aiida_pseudo_base_folder: "{{ vm_data_folder }}" + # aiida_pseudo_functional: PBE + # aiida_pseudo_protocol: efficiency + # aiida_pseudo_version: "1.1" + # aiida_pseudo_profile: "{{ aiida_profile }}" + + # - name: Download and install DOJO potentials + # tags: [aiida-pseudo] + # import_tasks: local/tasks/aiida-pseudo-dojo.yml + # vars: + # # for sisesta + # aiida_pseudo_cmd: "~/.conda/bin/conda run -n {{ aiida_conda_env }} aiida-pseudo" + # aiida_pseudo_base_folder: "{{ vm_data_folder }}" + # aiida_pseudo_functional: PBE + # aiida_pseudo_relativistic: FR + # aiida_pseudo_protocol: standard + # aiida_pseudo_format: psml + # aiida_pseudo_version: "0.4" + # aiida_pseudo_profile: "{{ aiida_profile }}" + + # - name: aiida-example scripts + # tags: [aiida-examples] + # become: true + # become_user: "{{ vm_user }}" + # import_tasks: local/tasks/aiida-examples.yml + # vars: + # aiida_examples_folder: "~/Desktop/aiida-examples" + # aiida_verdi_cmd: "~/.conda/bin/conda run -n {{ aiida_conda_env }} verdi" + + + post_tasks: + + # These break idempotency, + # so only run once all other tasks have completed + + - name: "Clean caches" + tags: [never, cleanup] + import_tasks: local/tasks/clean-caches.yml + + - name: "Remove {{ build_dir }} content" + tags: [never, cleanup] + become: true + command: rm -rf {{ build_dir }}/* diff --git a/tox.ini b/tox.ini index 0a2213f..c908ee1 100644 --- a/tox.ini +++ b/tox.ini @@ -16,7 +16,7 @@ passenv = VAGRANT_NO_GUI VAGRANT_ON_GH BUILD_PLAYBOOK -whitelist_externals = vagrant +allowlist_externals = vagrant commands_pre = ansible-galaxy install -r requirements.yml commands = vagrant {posargs:up} @@ -27,7 +27,7 @@ deps = -rrequirements.txt passenv = HOME BUILD_PLAYBOOK -whitelist_externals = vagrant +allowlist_externals = vagrant commands_pre = ansible-galaxy install -r requirements.yml -vvv ; vagrant ssh-config > vagrant-ssh @@ -48,7 +48,7 @@ commands = ansible-galaxy {posargs:install -r requirements.yml --force} description = Update aspects of vagrant passenv = HOME -whitelist_externals = vagrant +allowlist_externals = vagrant commands = vagrant box update vagrant box prune @@ -72,7 +72,7 @@ description = clean: Build the documentation (remove any existing build) update: Build the documentation (modify any existing build) deps = -rrequirements-docs.txt -whitelist_externals = rm +allowlist_externals = rm commands = clean: rm -rf docs/_build sphinx-build -nW --keep-going -b {posargs:html} docs/ docs/_build/{posargs:html} From 2b95d620512a68478b5527ac8c7bf07eec21ab12 Mon Sep 17 00:00:00 2001 From: Jusong Yu Date: Tue, 30 May 2023 18:11:36 +0200 Subject: [PATCH 02/25] iron-up --- Vagrantfile | 2 +- inventory.yml | 2 +- local/tasks/aiidalab.yml | 19 ++ local/tasks/images/aiidalab-qe-logo.png | Bin 0 -> 32654 bytes playbook-build.yml | 6 + playbook-qe.yml | 317 ------------------------ 6 files changed, 27 insertions(+), 319 deletions(-) create mode 100644 local/tasks/aiidalab.yml create mode 100644 local/tasks/images/aiidalab-qe-logo.png delete mode 100644 playbook-qe.yml diff --git a/Vagrantfile b/Vagrantfile index ddf26a3..cbfa558 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -112,6 +112,6 @@ Vagrant.configure(2) do |config| d.run "ghcr.io/aiidalab/qe:pr-381", daemonize: true, restart: "always", - args: "-e JUPYTER_TOKEN='easy' -p 8888:8888 -v /var/aiidalab_volume:/home/jovyan" + args: "-e JUPYTER_TOKEN='easy' -p 8899:8888 -v /var/aiidalab_volume:/home/jovyan" end end diff --git a/inventory.yml b/inventory.yml index 137ea42..5028304 100644 --- a/inventory.yml +++ b/inventory.yml @@ -26,7 +26,7 @@ all: vm_cpus: 2 vm_vram: 128 vm_headless: false - vm_browser: firefox # 'chromium-browser' or 'firefox' + vm_browser: chromium-browser # 'chromium-browser' or 'firefox' vm_data_folder: "/usr/local/share" # this is used to put shared data files in # vm_shared_folder: "/shared" # this is currently inactive in Vagrant config vm_timezone: "Europe/Zurich" diff --git a/local/tasks/aiidalab.yml b/local/tasks/aiidalab.yml new file mode 100644 index 0000000..fc40817 --- /dev/null +++ b/local/tasks/aiidalab.yml @@ -0,0 +1,19 @@ +- name: Copy AiiDAlab logo + become: true + become_user: "{{ root_user }}" + copy: + src: images/aiidalab-qe-logo.png + dest: /usr/share/icons/ + +- name: create desktop shortcut to Jupyter Lab + copy: + dest: "${HOME}/Desktop/jupyterlab.desktop" + mode: "0753" + content: | + [Desktop Entry] + Encoding=UTF-8 + Name=AiiDAlab QE + Comment=Launch AiiDAlab QE + Exec={{ vm_browser }} "http://localhost:8899/?token=easy" + Icon=/usr/share/icons/aiidalab-qe-logo.png + Type=Application diff --git a/local/tasks/images/aiidalab-qe-logo.png b/local/tasks/images/aiidalab-qe-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..0c09f79a53002924d32fab7dcfc7f965524e0737 GIT binary patch literal 32654 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 literal 0 HcmV?d00001 diff --git a/playbook-build.yml b/playbook-build.yml index 7b113a9..e6e7de7 100644 --- a/playbook-build.yml +++ b/playbook-build.yml @@ -227,6 +227,12 @@ become_user: "{{ vm_user }}" import_tasks: local/tasks/aiida-jupyter.yml + - name: Create AiiDAlab service + tags: [aiidalab] + become: true + become_user: "{{ vm_user }}" + import_tasks: local/tasks/aiidalab.yml + - name: "Create AiiDA computers" tags: [aiida-computers] become: true diff --git a/playbook-qe.yml b/playbook-qe.yml deleted file mode 100644 index 4142a38..0000000 --- a/playbook-qe.yml +++ /dev/null @@ -1,317 +0,0 @@ -- name: Prepare for VM build - - hosts: "{{ build_hosts | default('vagrant-ssh') }}" - gather_facts: false - - pre_tasks: - - - name: test configuration - tags: [init] - debug: - msg: RUNNING PLAYBOOK FOR '{{ vm_name }}' VERSION '{{ vm_version }}' - - - name: testing ansible environment - tags: [init] - debug: - msg: Connecting to host '{{ inventory_hostname }}' as user '{{ ansible_user }}' - - - name: Install linux-headers-generic for guest-additions - tags: [init] - when: "inventory_hostname.startswith('vagrant')" - become: true - apt: - cache_valid_time: 86400 # One day - name: - - linux-headers-generic - - - name: Make local dist folder - tags: [init] - local_action: - module: file - state: directory - path: "{{ local_dist_folder }}/" - when: release_notes_locally is defined and release_notes_locally - -- name: Build VM - hosts: "{{ build_hosts | default('vagrant-ssh') }}" - - tasks: - - # Generic Tasks - # These tasks are run for any VM build, regardless of the software installed - # They setup the VM user, commandline interface, and (optionally) desktop GUI - - - name: Update system package managers (apt, pip) - tags: [init] - include_tasks: local/tasks/ensure-apt-pip.yml - - - name: "Add QM user '{{ vm_user }}'" - tags: [add_user, ci_test] - import_tasks: local/tasks/add-qm-user.yml - - - name: "Add release notes section for the operating system" - tags: [release_notes] - import_tasks: local/tasks/release-notes-system.yml - - - name: Customise bash terminal for QM - tags: [customise-bash] - become: true - become_user: "{{ vm_user }}" - import_tasks: local/tasks/customise-bash.yml - - - name: Install common text editors - tags: [editors] - import_role: - name: marvel-nccr.editors - vars: - editors_vm_user: "{{ vm_user }}" - - - name: Add desktop GUI - tags: [ubuntu_desktop] - when: not vm_headless - import_role: - name: marvel-nccr.ubuntu_desktop - vars: - ubuntu_desktop_vm_user: "{{ vm_user }}" - ubuntu_desktop_browser: "{{ vm_browser }}" - - - name: Customise GUI for QM - tags: [customise-gui] - when: not vm_headless - become: true - become_user: "{{ vm_user }}" - import_tasks: local/tasks/customise-gui.yml - - - name: Setup QM to run simulations - tags: [simsetup] - import_tasks: local/tasks/simulation-setup.yml - - # Build Specific Tasks - # These tasks can be customised for specific VM builds, - # depending on the software one requires to be installed - - # - name: "Add user README" - # tags: [add_readme] - # become: true - # become_user: "{{ vm_user }}" - # template: - # src: local/tasks/files/README.md.j2 - # dest: "{{ readme_vm_path }}" - # vars: - # software_urls: - # Quantum ESPRESSO: http://www.quantum-espresso.org/ - - # - name: Install plotting tools (via apt) - # # TODO we may want to eventually install these with conda - # # (jmol and gnuplot are already installed via conda-forge) - # tags: [plotting] - # import_tasks: local/tasks/plotting-tools.yml - # vars: - # packages: [grace, xcrysden, default-jre] - - # - name: install SLURM service - # tags: [slurm] - # import_role: - # name: marvel-nccr.slurm - - # # TODO control version - # # could install with conda, but how to set up the systemd service? - # - name: install RabbitMQ server service - # tags: [rabbitmq] - # become: true - # become_user: "{{ root_user }}" - # import_tasks: local/tasks/rabbitmq.yml - - # # TODO control version - # # could install with conda, but how to set up the systemd service? - # - name: install PostrgeSQL server service - # tags: [postgresql] - # become: true - # become_user: "{{ root_user }}" - # import_tasks: local/tasks/postgresql.yml - - # - name: install conda+mamba - # tags: [conda] - # import_role: - # name: chrisjsewell.conda.user_install - # become: true - # become_user: "{{ vm_user }}" - # vars: - # conda_folder: "~/.conda" - # conda_installer_url: https://github.com/conda-forge/miniforge/releases/download/22.11.1-4/Mambaforge-22.11.1-4-Linux-x86_64.sh - # conda_installer_checksum: sha256:16c7d256de783ceeb39970e675efa4a8eb830dcbb83187f1197abfea0bf07d30 - # conda_activate_alias: workon - - # - name: Install code environment - # tags: [code-envs] - # # TODO ideally this would be import_tasks, but then we can't use loop - # include_tasks: local/tasks/conda-env-install.yml - # vars: - # conda_env: "{{ item.name }}" - # code_packages: "{{ item.pkgs }}" - # # TODO allow for `conda env config vars set` to be used, - # # e.g. for export OMP_NUM_THREADS=1 - # loop: - # # note here we specify exact versions of libxc/openmpi/mpich - # # this is because we want conda to re-use as many packages as possible - # # since re-used packages do not incur more disk memory usage - # - {name: qespresso, pkgs: [qe=7.2, libxc=5.2.3, openmpi=4.1.2]} - # - {name: visualise, pkgs: [jmol, gnuplot, cif2cell, python=3.9]} - # loop_control: - # label: "{{ item.name }}" - - # - name: Install AiiDA environment - # tags: [aiida-env] - # become: true - # become_user: "{{ vm_user }}" - # import_tasks: local/tasks/aiida-conda-env.yml - # vars: - # conda_env: "{{ aiida_conda_env }}" - # aiida_packages: - # - python=3.9 - # - pip - # - aiida-core=2 - # - aiida-core.notebook - # - aiida-quantumespresso=4 - # - aiida-pseudo=1 - # - ipykernel - # - jupyterlab - # - jupyterlab-tour - # - jupyterlab-spellchecker - # - mamba_gator # Provides Conda/Mamba management as a standalone application or as extension for JupyterLab. - - # - name: Create an aiida-profile - # tags: [aiida-profile] - # become: true - # become_user: "{{ vm_user }}" - # import_tasks: local/tasks/aiida-profile.yml - # vars: - # name: "{{ aiida_profile }}" - # aiida_run_verdi: "~/.conda/bin/conda run -n {{ aiida_conda_env }} verdi" - # postgres_user: postgres - # parameters: - # first_name: Max - # last_name: Scientist - # email: aiida@localhost - # institution: Quantum Mobile - # db_host: localhost - # db_port: 5432 - # db_name: aiidadb - # db_username: aiida - # db_password: "ne9N_LDK-*JSS" - # daemon_service: true - - # - name: Create AiiDA Jupyter service - # tags: [aiida-jupyter] - # become: true - # become_user: "{{ vm_user }}" - # import_tasks: local/tasks/aiida-jupyter.yml - - # - name: "Create AiiDA computers" - # tags: [aiida-computers] - # become: true - # become_user: "{{ vm_user }}" - # verdi_computer: - # verdi: "~/.conda/bin/conda run -n {{ aiida_conda_env }} verdi" - # profile: "{{ aiida_profile }}" - # label: "{{ item.l }}" - # scheduler: "{{ item.s }}" - # transport: core.local - # hostname: localhost - # work_dir: "~/.aiida_run" - # mpirun_command: "mpirun -np {tot_num_mpiprocs}" - # mpiprocs_per_machine: 2 - # configure: "--safe-interval=0" - # loop: - # - {l: local_direct, s: core.direct} - # - {l: local_slurm, s: core.slurm} - # loop_control: - # label: "{{ item.l }}" - - # - name: "Add AiiDA Codes" - # tags: [aiida-codes] - # become: true - # become_user: "{{ vm_user }}" - # verdi_code: - # verdi: ~/.conda/bin/conda run -n {{ aiida_conda_env }} verdi - # profile: "{{ aiida_profile }}" - # label: "{{ item.label }}" - # description: "Local code for '{{ item.exec }}' in Conda env '{{ item.env }}'" - # computer: local_slurm - # input_plugin: "{{ item.plugin }}" - # remote_abs_path: "/home/max/.conda/envs/{{ item.env }}/bin/{{ item.exec }}" - # prepend_text: | - # ulimit -s unlimited - # eval "$(conda shell.bash hook)" - # conda activate {{ item.env }} - # {{ item.prepend | default('') }} - # loop_control: - # label: "{{ item.label }}" - # loop: - # - {label: qe.pw, plugin: quantumespresso.pw, env: qespresso, exec: pw.x, prepend: export OMP_NUM_THREADS=1} - # - {label: qe.cp, plugin: quantumespresso.cp, env: qespresso, exec: cp.x, prepend: export OMP_NUM_THREADS=1} - # - {label: qe.pp, plugin: quantumespresso.pp, env: qespresso, exec: pp.x, prepend: export OMP_NUM_THREADS=1} - # - {label: qe.ph, plugin: quantumespresso.ph, env: qespresso, exec: ph.x, prepend: export OMP_NUM_THREADS=1} - # - {label: qe.neb, plugin: quantumespresso.neb, env: qespresso, exec: neb.x, prepend: export OMP_NUM_THREADS=1} - # - {label: qe.epw, plugin: quantumespresso.epw, env: qespresso, exec: epw.x, prepend: export OMP_NUM_THREADS=1} - # - {label: qe.projwfc, plugin: quantumespresso.projwfc, env: qespresso, exec: projwfc.x, prepend: export OMP_NUM_THREADS=1} - # - {label: qe.pw2wannier90, plugin: quantumespresso.pw2wannier90, env: qespresso, exec: pw2wannier90.x, prepend: export OMP_NUM_THREADS=1} - # - {label: qe.dos, plugin: quantumespresso.dos, env: qespresso, exec: dos.x, prepend: export OMP_NUM_THREADS=1} - # - {label: qe.q2r, plugin: quantumespresso.q2r, env: qespresso, exec: q2r.x, prepend: export OMP_NUM_THREADS=1} - # - {label: qe.matdyn, plugin: quantumespresso.matdyn, env: qespresso, exec: matdyn.x, prepend: export OMP_NUM_THREADS=1} - # - {label: nwchem.main, plugin: nwchem.nwchem, env: nwchem, exec: nwchem} - # - {label: siesta.main, plugin: siesta.siesta, env: siesta, exec: siesta} - # - {label: cp2k.main, plugin: cp2k, env: cp2k, exec: cp2k.psmp} - # - {label: abinit.main, plugin: abinit, env: abinit, exec: abinit} - - # TODO release notes for aiida computers/codes - - # - name: Download and install SSSP potentials - # tags: [aiida-pseudo] - # import_tasks: local/tasks/aiida-pseudo-sssp.yml - # vars: - # # for quantum mobile - # aiida_pseudo_cmd: "~/.conda/bin/conda run -n {{ aiida_conda_env }} aiida-pseudo" - # aiida_pseudo_base_folder: "{{ vm_data_folder }}" - # aiida_pseudo_functional: PBE - # aiida_pseudo_protocol: efficiency - # aiida_pseudo_version: "1.1" - # aiida_pseudo_profile: "{{ aiida_profile }}" - - # - name: Download and install DOJO potentials - # tags: [aiida-pseudo] - # import_tasks: local/tasks/aiida-pseudo-dojo.yml - # vars: - # # for sisesta - # aiida_pseudo_cmd: "~/.conda/bin/conda run -n {{ aiida_conda_env }} aiida-pseudo" - # aiida_pseudo_base_folder: "{{ vm_data_folder }}" - # aiida_pseudo_functional: PBE - # aiida_pseudo_relativistic: FR - # aiida_pseudo_protocol: standard - # aiida_pseudo_format: psml - # aiida_pseudo_version: "0.4" - # aiida_pseudo_profile: "{{ aiida_profile }}" - - # - name: aiida-example scripts - # tags: [aiida-examples] - # become: true - # become_user: "{{ vm_user }}" - # import_tasks: local/tasks/aiida-examples.yml - # vars: - # aiida_examples_folder: "~/Desktop/aiida-examples" - # aiida_verdi_cmd: "~/.conda/bin/conda run -n {{ aiida_conda_env }} verdi" - - - post_tasks: - - # These break idempotency, - # so only run once all other tasks have completed - - - name: "Clean caches" - tags: [never, cleanup] - import_tasks: local/tasks/clean-caches.yml - - - name: "Remove {{ build_dir }} content" - tags: [never, cleanup] - become: true - command: rm -rf {{ build_dir }}/* From 693d22b93ba4ba15ecd4f5acba052de5b5997312 Mon Sep 17 00:00:00 2001 From: Jusong Yu Date: Tue, 30 May 2023 18:43:40 +0200 Subject: [PATCH 03/25] Add shortcut --- Vagrantfile | 2 +- local/tasks/aiidalab.yml | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Vagrantfile b/Vagrantfile index cbfa558..432ded9 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -112,6 +112,6 @@ Vagrant.configure(2) do |config| d.run "ghcr.io/aiidalab/qe:pr-381", daemonize: true, restart: "always", - args: "-e JUPYTER_TOKEN='easy' -p 8899:8888 -v /var/aiidalab_volume:/home/jovyan" + args: "-e JUPYTER_TOKEN='max' -p 8899:8888 -v /var/aiidalab_volume:/home/jovyan" end end diff --git a/local/tasks/aiidalab.yml b/local/tasks/aiidalab.yml index fc40817..e996b8b 100644 --- a/local/tasks/aiidalab.yml +++ b/local/tasks/aiidalab.yml @@ -5,15 +5,15 @@ src: images/aiidalab-qe-logo.png dest: /usr/share/icons/ -- name: create desktop shortcut to Jupyter Lab +- name: create desktop shortcut to AiiDALab copy: - dest: "${HOME}/Desktop/jupyterlab.desktop" + dest: "${HOME}/Desktop/aiidalab.desktop" mode: "0753" content: | [Desktop Entry] - Encoding=UTF-8 Name=AiiDAlab QE Comment=Launch AiiDAlab QE - Exec={{ vm_browser }} "http://localhost:8899/?token=easy" + Exec={{ vm_browser }} "http://localhost:8899/apps/apps/quantum-espresso/qe.ipynb?token=max" + Terminal=false Icon=/usr/share/icons/aiidalab-qe-logo.png Type=Application From a5cc5eb8eb381b3c9daa2c0a98dda56626b56bd8 Mon Sep 17 00:00:00 2001 From: Jusong Yu Date: Fri, 2 Jun 2023 16:31:25 +0200 Subject: [PATCH 04/25] move things out for QeApp only --- inventory.yml | 4 +- playbook-aiidalab-qe.yml | 111 +++++++++++++++++++++++++++++++++++++++ tox.ini | 8 +-- 3 files changed, 117 insertions(+), 6 deletions(-) create mode 100644 playbook-aiidalab-qe.yml diff --git a/inventory.yml b/inventory.yml index 5028304..48b8f53 100644 --- a/inventory.yml +++ b/inventory.yml @@ -22,11 +22,11 @@ all: vm_hostname: "qmobile" vm_user: "max" vm_password: "moritz" - vm_memory: 1536 + vm_memory: 3072 vm_cpus: 2 vm_vram: 128 vm_headless: false - vm_browser: chromium-browser # 'chromium-browser' or 'firefox' + vm_browser: firefox # 'chromium-browser' or 'firefox' vm_data_folder: "/usr/local/share" # this is used to put shared data files in # vm_shared_folder: "/shared" # this is currently inactive in Vagrant config vm_timezone: "Europe/Zurich" diff --git a/playbook-aiidalab-qe.yml b/playbook-aiidalab-qe.yml new file mode 100644 index 0000000..c43b6e9 --- /dev/null +++ b/playbook-aiidalab-qe.yml @@ -0,0 +1,111 @@ +- name: Prepare for VM build + + hosts: "{{ build_hosts | default('vagrant-ssh') }}" + gather_facts: false + + pre_tasks: + + - name: test configuration + tags: [init] + debug: + msg: RUNNING PLAYBOOK FOR '{{ vm_name }}' VERSION '{{ vm_version }}' + + - name: testing ansible environment + tags: [init] + debug: + msg: Connecting to host '{{ inventory_hostname }}' as user '{{ ansible_user }}' + + - name: Install linux-headers-generic for guest-additions + tags: [init] + when: "inventory_hostname.startswith('vagrant')" + become: true + apt: + cache_valid_time: 86400 # One day + name: + - linux-headers-generic + + - name: Make local dist folder + tags: [init] + local_action: + module: file + state: directory + path: "{{ local_dist_folder }}/" + when: release_notes_locally is defined and release_notes_locally + +- name: Build VM + hosts: "{{ build_hosts | default('vagrant-ssh') }}" + + tasks: + + # Generic Tasks + # These tasks are run for any VM build, regardless of the software installed + # They setup the VM user, commandline interface, and (optionally) desktop GUI + + - name: Update system package managers (apt, pip) + tags: [init] + include_tasks: local/tasks/ensure-apt-pip.yml + + - name: "Add QM user '{{ vm_user }}'" + tags: [add_user, ci_test] + import_tasks: local/tasks/add-qm-user.yml + + - name: "Add release notes section for the operating system" + tags: [release_notes] + import_tasks: local/tasks/release-notes-system.yml + + - name: Customise bash terminal for QM + tags: [customise-bash] + become: true + become_user: "{{ vm_user }}" + import_tasks: local/tasks/customise-bash.yml + + - name: Install common text editors + tags: [editors] + import_role: + name: marvel-nccr.editors + vars: + editors_vm_user: "{{ vm_user }}" + + - name: Add desktop GUI + tags: [ubuntu_desktop] + when: not vm_headless + import_role: + name: marvel-nccr.ubuntu_desktop + vars: + ubuntu_desktop_vm_user: "{{ vm_user }}" + ubuntu_desktop_browser: "{{ vm_browser }}" + + - name: Customise GUI for QM + tags: [customise-gui] + when: not vm_headless + become: true + become_user: "{{ vm_user }}" + import_tasks: local/tasks/customise-gui.yml + + - name: Setup QM to run simulations + tags: [simsetup] + import_tasks: local/tasks/simulation-setup.yml + + # Build Specific Tasks + # These tasks can be customised for specific VM builds, + # depending on the software one requires to be installed + + - name: Create AiiDAlab service + tags: [aiidalab] + become: true + become_user: "{{ vm_user }}" + import_tasks: local/tasks/aiidalab.yml + + post_tasks: + + # These break idempotency, + # so only run once all other tasks have completed + + - name: "Clean caches" + tags: [never, cleanup] + import_tasks: local/tasks/clean-caches.yml + + - name: "Remove {{ build_dir }} content" + tags: [never, cleanup] + become: true + command: rm -rf {{ build_dir }}/* diff --git a/tox.ini b/tox.ini index c908ee1..420e248 100644 --- a/tox.ini +++ b/tox.ini @@ -17,8 +17,8 @@ passenv = VAGRANT_ON_GH BUILD_PLAYBOOK allowlist_externals = vagrant -commands_pre = - ansible-galaxy install -r requirements.yml +; commands_pre = +; ansible-galaxy install -r requirements.yml commands = vagrant {posargs:up} [testenv:ansible] @@ -28,8 +28,8 @@ passenv = HOME BUILD_PLAYBOOK allowlist_externals = vagrant -commands_pre = - ansible-galaxy install -r requirements.yml -vvv +; commands_pre = +; ansible-galaxy install -r requirements.yml -vvv ; vagrant ssh-config > vagrant-ssh commands = ansible-playbook {env:BUILD_PLAYBOOK:playbook-build.yml} {posargs} # to run against a specific host: From ef7402506a25c64afa6e5221c6e7cb375eea8503 Mon Sep 17 00:00:00 2001 From: Jusong Yu Date: Tue, 20 Jun 2023 15:53:27 +0200 Subject: [PATCH 05/25] more fix --- Vagrantfile | 22 +++++++++++----------- inventory.yml | 1 + local/tasks/aiidalab.yml | 12 ++++++++++++ local/tasks/docker.yml | 15 +++++++++++++++ playbook-aiidalab-qe.yml | 38 ++++++++++++++++++++++++-------------- requirements.yml | 6 ++++-- tox.ini | 4 ++-- 7 files changed, 69 insertions(+), 29 deletions(-) create mode 100644 local/tasks/docker.yml diff --git a/Vagrantfile b/Vagrantfile index 432ded9..92c4990 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -103,15 +103,15 @@ Vagrant.configure(2) do |config| # Ensure that public key auth is not disabled by the user's config ansible.raw_ssh_args = ['-o PubKeyAuthentication=yes -o DSAAuthentication=yes'] end - # Create a folder for AiiDAlab volume mount. To (re-)run this step: - # vagrant provision --provision-with shell - config.vm.provision "shell", inline: $script - # provisioner: set up VM with docker. To (re-)run this step: - # vagrant provision --provision-with docker - config.vm.provision "docker" do |d| - d.run "ghcr.io/aiidalab/qe:pr-381", - daemonize: true, - restart: "always", - args: "-e JUPYTER_TOKEN='max' -p 8899:8888 -v /var/aiidalab_volume:/home/jovyan" - end + # # Create a folder for AiiDAlab volume mount. To (re-)run this step: + # # vagrant provision --provision-with shell + # config.vm.provision "shell", inline: $script + # # provisioner: set up VM with docker. To (re-)run this step: + # # vagrant provision --provision-with docker + # config.vm.provision "docker" do |d| + # d.run "ghcr.io/aiidalab/qe:pr-381", + # daemonize: true, + # restart: "always", + # args: "-e JUPYTER_TOKEN='max' -p 8899:8888 -v /var/aiidalab_volume:/home/jovyan" + # end end diff --git a/inventory.yml b/inventory.yml index 48b8f53..afb5250 100644 --- a/inventory.yml +++ b/inventory.yml @@ -27,6 +27,7 @@ all: vm_vram: 128 vm_headless: false vm_browser: firefox # 'chromium-browser' or 'firefox' + vm_wm_package: ubuntu-desktop-minimal # 'lxde' or 'ubuntu-desktop-minimal' vm_data_folder: "/usr/local/share" # this is used to put shared data files in # vm_shared_folder: "/shared" # this is currently inactive in Vagrant config vm_timezone: "Europe/Zurich" diff --git a/local/tasks/aiidalab.yml b/local/tasks/aiidalab.yml index e996b8b..986e2a6 100644 --- a/local/tasks/aiidalab.yml +++ b/local/tasks/aiidalab.yml @@ -1,3 +1,15 @@ +- name: debug vm_qeapp_image + debug: + msg: "{{ vm_qeapp_image }}" + +- name: Pull qeapp image + command: "docker pull {{ vm_qeapp_image }}" + +- name: Create qeapp container + become: true + become_user: "{{ vm_user }}" + command: "docker run -d --name qeapp -p 8899:8888 --volume /home/{{ vm_user }}/qeapp-home:/home/jovyan {{ vm_qeapp_image }}" + - name: Copy AiiDAlab logo become: true become_user: "{{ root_user }}" diff --git a/local/tasks/docker.yml b/local/tasks/docker.yml new file mode 100644 index 0000000..aed7bca --- /dev/null +++ b/local/tasks/docker.yml @@ -0,0 +1,15 @@ +- name: Include geerlingguy.docker role + include_role: + name: geerlingguy.docker + vars: + docker_users: "{{ vm_user }}" + docker_compose_version: "{{ vm_docker_compose_version }}" + +- name: install recent docker and docker-compose python libraries + become: True + pip: + name: "{{ item }}" + state: present + with_items: + - docker + - docker-compose \ No newline at end of file diff --git a/playbook-aiidalab-qe.yml b/playbook-aiidalab-qe.yml index c43b6e9..0bd73aa 100644 --- a/playbook-aiidalab-qe.yml +++ b/playbook-aiidalab-qe.yml @@ -15,14 +15,14 @@ debug: msg: Connecting to host '{{ inventory_hostname }}' as user '{{ ansible_user }}' - - name: Install linux-headers-generic for guest-additions - tags: [init] - when: "inventory_hostname.startswith('vagrant')" - become: true - apt: - cache_valid_time: 86400 # One day - name: - - linux-headers-generic + #- name: Install linux-headers-generic for guest-additions + # tags: [init] + # when: "inventory_hostname.startswith('vagrant')" + # become: true + # apt: + # cache_valid_time: 86400 # One day + # name: + # - linux-headers-generic - name: Make local dist folder tags: [init] @@ -59,12 +59,12 @@ become_user: "{{ vm_user }}" import_tasks: local/tasks/customise-bash.yml - - name: Install common text editors - tags: [editors] - import_role: - name: marvel-nccr.editors - vars: - editors_vm_user: "{{ vm_user }}" + # - name: Install common text editors + # tags: [editors] + # import_role: + # name: marvel-nccr.editors + # vars: + # editors_vm_user: "{{ vm_user }}" - name: Add desktop GUI tags: [ubuntu_desktop] @@ -74,6 +74,7 @@ vars: ubuntu_desktop_vm_user: "{{ vm_user }}" ubuntu_desktop_browser: "{{ vm_browser }}" + ubuntu_desktop_wm_package: "{{ vm_wm_package }}" - name: Customise GUI for QM tags: [customise-gui] @@ -89,12 +90,21 @@ # Build Specific Tasks # These tasks can be customised for specific VM builds, # depending on the software one requires to be installed + + - name: Install docker and docker-compose + tags: [docker] + import_tasks: local/tasks/docker.yml + become: true + vars: + vm_docker_compose_version: "1.26.0" - name: Create AiiDAlab service tags: [aiidalab] become: true become_user: "{{ vm_user }}" import_tasks: local/tasks/aiidalab.yml + vars: + vm_qeapp_image: "ghcr.io/aiidalab/qe:sha-649baf7" post_tasks: diff --git a/requirements.yml b/requirements.yml index e8c9f83..a685d1f 100644 --- a/requirements.yml +++ b/requirements.yml @@ -8,9 +8,11 @@ roles: version: v0.1.0 - name: marvel-nccr.add_user version: v0.2.1 -- name: marvel-nccr.ubuntu_desktop - version: v1.1.0 +#- name: marvel-nccr.ubuntu_desktop +# version: v1.1.0 - name: marvel-nccr.editors version: v1.0.2 - name: marvel-nccr.slurm version: v2.0.2 +- name: geerlingguy.docker + version: 6.1.0 diff --git a/tox.ini b/tox.ini index 420e248..627e39a 100644 --- a/tox.ini +++ b/tox.ini @@ -28,8 +28,8 @@ passenv = HOME BUILD_PLAYBOOK allowlist_externals = vagrant -; commands_pre = -; ansible-galaxy install -r requirements.yml -vvv +commands_pre = + ansible-galaxy install -r requirements.yml -vvv ; vagrant ssh-config > vagrant-ssh commands = ansible-playbook {env:BUILD_PLAYBOOK:playbook-build.yml} {posargs} # to run against a specific host: From 6fb1567bec30f73ea7436fb269377035a1272792 Mon Sep 17 00:00:00 2001 From: Jusong Yu Date: Tue, 20 Jun 2023 17:00:21 +0200 Subject: [PATCH 06/25] qeapp image can start --- local/tasks/aiidalab.yml | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/local/tasks/aiidalab.yml b/local/tasks/aiidalab.yml index 986e2a6..1bfaa3a 100644 --- a/local/tasks/aiidalab.yml +++ b/local/tasks/aiidalab.yml @@ -1,14 +1,30 @@ -- name: debug vm_qeapp_image - debug: - msg: "{{ vm_qeapp_image }}" +- name: Create folder for AiiDAlab QE + become: true + become_user: "{{ vm_user }}" + file: + path: /home/{{ vm_user }}/qeapp-home + state: directory + mode: 0775 + +- name: check if qeapp container is running + become: true + become_user: "{{ vm_user }}" + shell: "docker inspect -f '{{ '{{' }} .State.Running {{ '}}' }}' qeapp" + register: qe_container_stat + ignore_errors: true - name: Pull qeapp image command: "docker pull {{ vm_qeapp_image }}" -- name: Create qeapp container +- name: echo qe_container + debug: + var: qe_container + +- name: Create and run qeapp container become: true become_user: "{{ vm_user }}" command: "docker run -d --name qeapp -p 8899:8888 --volume /home/{{ vm_user }}/qeapp-home:/home/jovyan {{ vm_qeapp_image }}" + when: qe_container_stat.stdout == "" - name: Copy AiiDAlab logo become: true From e479bde1d41d4534972bc2e38f44072a4debc761 Mon Sep 17 00:00:00 2001 From: Jusong Yu Date: Tue, 20 Jun 2023 18:17:35 +0200 Subject: [PATCH 07/25] fix shortcut --- local/tasks/aiida-jupyter.yml | 2 +- local/tasks/aiidalab.yml | 7 +++++-- local/tasks/customise-gui.yml | 4 ++-- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/local/tasks/aiida-jupyter.yml b/local/tasks/aiida-jupyter.yml index 8b5dcbd..5b38991 100644 --- a/local/tasks/aiida-jupyter.yml +++ b/local/tasks/aiida-jupyter.yml @@ -54,7 +54,7 @@ - name: create desktop shortcut to Jupyter Lab copy: dest: "${HOME}/Desktop/jupyterlab.desktop" - mode: "0753" + mode: "0644" content: | [Desktop Entry] Encoding=UTF-8 diff --git a/local/tasks/aiidalab.yml b/local/tasks/aiidalab.yml index 1bfaa3a..7c8f4d4 100644 --- a/local/tasks/aiidalab.yml +++ b/local/tasks/aiidalab.yml @@ -23,7 +23,7 @@ - name: Create and run qeapp container become: true become_user: "{{ vm_user }}" - command: "docker run -d --name qeapp -p 8899:8888 --volume /home/{{ vm_user }}/qeapp-home:/home/jovyan {{ vm_qeapp_image }}" + command: "docker run -d --name qeapp -p 8899:8888 --volume /home/{{ vm_user }}/qeapp-home:/home/jovyan -e JUPYTER_TOKEN='max' --restart always {{ vm_qeapp_image }}" when: qe_container_stat.stdout == "" - name: Copy AiiDAlab logo @@ -36,7 +36,7 @@ - name: create desktop shortcut to AiiDALab copy: dest: "${HOME}/Desktop/aiidalab.desktop" - mode: "0753" + mode: "0644" content: | [Desktop Entry] Name=AiiDAlab QE @@ -45,3 +45,6 @@ Terminal=false Icon=/usr/share/icons/aiidalab-qe-logo.png Type=Application + +- name: Make Chrome Launcher Trusted + shell: sudo -u {{ vm_user }} dbus-launch gio set /home/{{ vm_user }}/Desktop/aiidalab.desktop "metadata::trusted" true diff --git a/local/tasks/customise-gui.yml b/local/tasks/customise-gui.yml index de451f5..b7b7591 100644 --- a/local/tasks/customise-gui.yml +++ b/local/tasks/customise-gui.yml @@ -41,7 +41,7 @@ src: "{{ readme_vm_path }}" dest: "${HOME}/Desktop/{{ readme_vm_path | basename }}" state: link - force: true + force: false - name: symlink release notes to Desktop become: true @@ -55,7 +55,7 @@ - name: create desktop shortcut to QM homepage copy: dest: "${HOME}/Desktop/homepage.desktop" - mode: "0753" + mode: "0644" content: | [Desktop Entry] Encoding=UTF-8 From 8c3c6a3f753e9bb0b34e77287570fba01527f4e5 Mon Sep 17 00:00:00 2001 From: Jusong Yu Date: Tue, 20 Jun 2023 19:46:04 +0200 Subject: [PATCH 08/25] add utm --- inventory.yml | 6 ++++++ requirements.yml | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/inventory.yml b/inventory.yml index afb5250..03cc812 100644 --- a/inventory.yml +++ b/inventory.yml @@ -109,3 +109,9 @@ all: ansible_user: max vm_headless: true # add_user_public_key: "{{ lookup('file', './keys/user-key.pub') }}" + utm: + cloud_platform: utm + ansible_host: 127.0.0.1 + ansible_port: 2200 + ansible_user: max + vm_headless: false diff --git a/requirements.yml b/requirements.yml index a685d1f..ca72329 100644 --- a/requirements.yml +++ b/requirements.yml @@ -8,8 +8,8 @@ roles: version: v0.1.0 - name: marvel-nccr.add_user version: v0.2.1 -#- name: marvel-nccr.ubuntu_desktop -# version: v1.1.0 +- name: marvel-nccr.ubuntu_desktop + version: v1.1.1 - name: marvel-nccr.editors version: v1.0.2 - name: marvel-nccr.slurm From 41b5dca69bd3c6e7d6feaa8abf14a6b77cf2a609 Mon Sep 17 00:00:00 2001 From: Jusong Yu Date: Mon, 28 Aug 2023 18:43:10 +0200 Subject: [PATCH 09/25] newly build test --- Vagrantfile | 11 ----------- local/tasks/aiidalab.yml | 2 -- local/tasks/customise-gui.yml | 2 +- tox.ini | 4 ++-- 4 files changed, 3 insertions(+), 16 deletions(-) diff --git a/Vagrantfile b/Vagrantfile index 92c4990..d4473b8 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -103,15 +103,4 @@ Vagrant.configure(2) do |config| # Ensure that public key auth is not disabled by the user's config ansible.raw_ssh_args = ['-o PubKeyAuthentication=yes -o DSAAuthentication=yes'] end - # # Create a folder for AiiDAlab volume mount. To (re-)run this step: - # # vagrant provision --provision-with shell - # config.vm.provision "shell", inline: $script - # # provisioner: set up VM with docker. To (re-)run this step: - # # vagrant provision --provision-with docker - # config.vm.provision "docker" do |d| - # d.run "ghcr.io/aiidalab/qe:pr-381", - # daemonize: true, - # restart: "always", - # args: "-e JUPYTER_TOKEN='max' -p 8899:8888 -v /var/aiidalab_volume:/home/jovyan" - # end end diff --git a/local/tasks/aiidalab.yml b/local/tasks/aiidalab.yml index 7c8f4d4..843470f 100644 --- a/local/tasks/aiidalab.yml +++ b/local/tasks/aiidalab.yml @@ -46,5 +46,3 @@ Icon=/usr/share/icons/aiidalab-qe-logo.png Type=Application -- name: Make Chrome Launcher Trusted - shell: sudo -u {{ vm_user }} dbus-launch gio set /home/{{ vm_user }}/Desktop/aiidalab.desktop "metadata::trusted" true diff --git a/local/tasks/customise-gui.yml b/local/tasks/customise-gui.yml index b7b7591..19f0379 100644 --- a/local/tasks/customise-gui.yml +++ b/local/tasks/customise-gui.yml @@ -41,7 +41,7 @@ src: "{{ readme_vm_path }}" dest: "${HOME}/Desktop/{{ readme_vm_path | basename }}" state: link - force: false + force: true - name: symlink release notes to Desktop become: true diff --git a/tox.ini b/tox.ini index 627e39a..c908ee1 100644 --- a/tox.ini +++ b/tox.ini @@ -17,8 +17,8 @@ passenv = VAGRANT_ON_GH BUILD_PLAYBOOK allowlist_externals = vagrant -; commands_pre = -; ansible-galaxy install -r requirements.yml +commands_pre = + ansible-galaxy install -r requirements.yml commands = vagrant {posargs:up} [testenv:ansible] From e12013bfa8cd82e3cf8b73234fc76ec526173a66 Mon Sep 17 00:00:00 2001 From: Jusong Yu Date: Tue, 29 Aug 2023 12:36:20 +0200 Subject: [PATCH 10/25] qe doc to README --- inventory.yml | 8 ++++---- playbook-aiidalab-qe.yml | 38 ++++++++++++++++++++++---------------- 2 files changed, 26 insertions(+), 20 deletions(-) diff --git a/inventory.yml b/inventory.yml index 03cc812..d18a96f 100644 --- a/inventory.yml +++ b/inventory.yml @@ -11,7 +11,7 @@ all: vars: # VM Metadata vm_name: "Quantum Mobile" - vm_version: "23.04.03" + vm_version: "23.10.0" vm_description: "A Virtual Machine for Computational Materials Science" vm_url: "https://github.com/marvel-nccr/marvel-virtualmachine" vm_author: "MARVEL NCCR and MaX CoE" @@ -22,9 +22,9 @@ all: vm_hostname: "qmobile" vm_user: "max" vm_password: "moritz" - vm_memory: 3072 - vm_cpus: 2 - vm_vram: 128 + vm_memory: 4096 + vm_cpus: 4 + vm_vram: 256 vm_headless: false vm_browser: firefox # 'chromium-browser' or 'firefox' vm_wm_package: ubuntu-desktop-minimal # 'lxde' or 'ubuntu-desktop-minimal' diff --git a/playbook-aiidalab-qe.yml b/playbook-aiidalab-qe.yml index 0bd73aa..f5418c7 100644 --- a/playbook-aiidalab-qe.yml +++ b/playbook-aiidalab-qe.yml @@ -15,14 +15,14 @@ debug: msg: Connecting to host '{{ inventory_hostname }}' as user '{{ ansible_user }}' - #- name: Install linux-headers-generic for guest-additions - # tags: [init] - # when: "inventory_hostname.startswith('vagrant')" - # become: true - # apt: - # cache_valid_time: 86400 # One day - # name: - # - linux-headers-generic + - name: Install linux-headers-generic for guest-additions + tags: [init] + when: "inventory_hostname.startswith('vagrant')" + become: true + apt: + cache_valid_time: 86400 # One day + name: + - linux-headers-generic - name: Make local dist folder tags: [init] @@ -59,13 +59,6 @@ become_user: "{{ vm_user }}" import_tasks: local/tasks/customise-bash.yml - # - name: Install common text editors - # tags: [editors] - # import_role: - # name: marvel-nccr.editors - # vars: - # editors_vm_user: "{{ vm_user }}" - - name: Add desktop GUI tags: [ubuntu_desktop] when: not vm_headless @@ -87,6 +80,19 @@ tags: [simsetup] import_tasks: local/tasks/simulation-setup.yml + - name: "Add user README" + tags: [add_readme] + become: true + become_user: "{{ vm_user }}" + template: + src: local/tasks/files/README.md.j2 + dest: "{{ readme_vm_path }}" + vars: + software_urls: + Quantum ESPRESSO: http://www.quantum-espresso.org/ + Quantum ESPRESSO App: https://aiidalab-qe.readthedocs.io/ + + # Build Specific Tasks # These tasks can be customised for specific VM builds, # depending on the software one requires to be installed @@ -104,7 +110,7 @@ become_user: "{{ vm_user }}" import_tasks: local/tasks/aiidalab.yml vars: - vm_qeapp_image: "ghcr.io/aiidalab/qe:sha-649baf7" + vm_qeapp_image: "ghcr.io/aiidalab/qe:amd64-pr-449" post_tasks: From 30ddfe3ac64eb66d0da8eaaeb2c9874355701dc2 Mon Sep 17 00:00:00 2001 From: Jusong Yu Date: Wed, 30 Aug 2023 09:01:12 +0200 Subject: [PATCH 11/25] update readme for qeapp playbook build --- docs/developers/build-vagrant.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/developers/build-vagrant.md b/docs/developers/build-vagrant.md index 370b214..0d924e6 100644 --- a/docs/developers/build-vagrant.md +++ b/docs/developers/build-vagrant.md @@ -98,6 +98,13 @@ Building the Desktop Edition is tested on GitHub Actions on every commit to the For the tested steps see the `.github/workflows/build.yml` file. ::: +### Build QeApp dedicated VM + +To build a VM dedicated to the QeApp, run: + +```bash +BUILD_PLAYBOOK=playbook-aiidalab-qe.yml tox -e vagrant +``` ### Continuing a failed build From ecfec3afb887ef18c961a54a17ba8d1e503a3edf Mon Sep 17 00:00:00 2001 From: Jusong Yu Date: Wed, 30 Aug 2023 09:21:10 +0200 Subject: [PATCH 12/25] Try new docker role --- local/tasks/aiidalab.yml | 2 +- local/tasks/docker.yml | 36 +++++++++++++++++++++++++----------- 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/local/tasks/aiidalab.yml b/local/tasks/aiidalab.yml index 843470f..3153697 100644 --- a/local/tasks/aiidalab.yml +++ b/local/tasks/aiidalab.yml @@ -23,7 +23,7 @@ - name: Create and run qeapp container become: true become_user: "{{ vm_user }}" - command: "docker run -d --name qeapp -p 8899:8888 --volume /home/{{ vm_user }}/qeapp-home:/home/jovyan -e JUPYTER_TOKEN='max' --restart always {{ vm_qeapp_image }}" + command: "docker run -d --name qeapp -p 8899:8888 --volume /home/{{ vm_user }}/qeapp-home:/home/jovyan -e JUPYTER_TOKEN='max' -e NB_UMASK=002 --restart always {{ vm_qeapp_image }}" when: qe_container_stat.stdout == "" - name: Copy AiiDAlab logo diff --git a/local/tasks/docker.yml b/local/tasks/docker.yml index aed7bca..fd7d1d4 100644 --- a/local/tasks/docker.yml +++ b/local/tasks/docker.yml @@ -1,15 +1,29 @@ -- name: Include geerlingguy.docker role +#- name: Include geerlingguy.docker role +# include_role: +# name: geerlingguy.docker +# vars: +# docker_users: "{{ vm_user }}" +# docker_compose_version: "{{ vm_docker_compose_version }}" +# when: ansible_architecture == 'x86_64' +# +#- name: install recent docker and docker-compose python libraries +# become: True +# pip: +# name: "{{ item }}" +# state: present +# with_items: +# - docker +- name: Install docker include_role: name: geerlingguy.docker vars: - docker_users: "{{ vm_user }}" - docker_compose_version: "{{ vm_docker_compose_version }}" + docker_users: + - "{{ vm_user }}" + when: ansible_architecture == 'x86_64' -- name: install recent docker and docker-compose python libraries - become: True - pip: - name: "{{ item }}" - state: present - with_items: - - docker - - docker-compose \ No newline at end of file +- name: Install docker pip + include_role: + name: geerlingguy.pip + vars: + pip_install_packages: + - docker \ No newline at end of file From d0fbf2ae5a895c4c59dd94624e0c4713080aa20c Mon Sep 17 00:00:00 2001 From: Jusong Yu Date: Wed, 30 Aug 2023 17:12:45 +0200 Subject: [PATCH 13/25] Add arm64 support --- local/tasks/docker.yml | 10 +++++++++- requirements.yml | 4 +++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/local/tasks/docker.yml b/local/tasks/docker.yml index fd7d1d4..2d0f9c8 100644 --- a/local/tasks/docker.yml +++ b/local/tasks/docker.yml @@ -13,7 +13,7 @@ # state: present # with_items: # - docker -- name: Install docker +- name: Install docker (amd64) include_role: name: geerlingguy.docker vars: @@ -21,6 +21,14 @@ - "{{ vm_user }}" when: ansible_architecture == 'x86_64' +- name: Install docker (arm64) + include_role: + name: geerlingguy.docker_arm + vars: + docker_users: + - "{{ vm_user }}" + when: ansible_architecture == 'aarch64' + - name: Install docker pip include_role: name: geerlingguy.pip diff --git a/requirements.yml b/requirements.yml index ca72329..412794e 100644 --- a/requirements.yml +++ b/requirements.yml @@ -15,4 +15,6 @@ roles: - name: marvel-nccr.slurm version: v2.0.2 - name: geerlingguy.docker - version: 6.1.0 + version: 6.2.0 +- name: geerlingguy.pip + version: 2.2.0 From 0116344ffa401fbfbdf4e00512a8ddff5d6e7984 Mon Sep 17 00:00:00 2001 From: Jusong Yu Date: Thu, 30 Nov 2023 22:04:52 +0100 Subject: [PATCH 14/25] Change bg for qeapp image --- local/tasks/customise-gui.yml | 2 +- local/tasks/images/quantum-mobile-logo.png | Bin 9193 -> 9445 bytes .../tasks/images/quantum-mobile-qeapp-bg.svg | 905 ++++++++++++++++++ playbook-aiidalab-qe.yml | 2 + .../quantum-mobile-qeapp-bg.svg | 905 ++++++++++++++++++ resources/logos/quantum-mobile-v4-square.svg | 843 ++++++++++++++++ 6 files changed, 2656 insertions(+), 1 deletion(-) create mode 100644 local/tasks/images/quantum-mobile-qeapp-bg.svg create mode 100644 resources/desktop-background/quantum-mobile-qeapp-bg.svg create mode 100644 resources/logos/quantum-mobile-v4-square.svg diff --git a/local/tasks/customise-gui.yml b/local/tasks/customise-gui.yml index 19f0379..4d9a4dd 100644 --- a/local/tasks/customise-gui.yml +++ b/local/tasks/customise-gui.yml @@ -11,7 +11,7 @@ become: true become_user: "{{ root_user }}" copy: - src: images/quantum-mobile-bg.png + src: "images/{{ bg_image | default('quantum-mobile-bg.png')}}" dest: "{{ vm_data_folder }}/qm-customizations/quantum-mobile-bg.png" mode: 0755 diff --git a/local/tasks/images/quantum-mobile-logo.png b/local/tasks/images/quantum-mobile-logo.png index 884654eaef8d35bf2ef19a9cc4dca2d103327dd5..a32dd0c2c9f8d8424b6d45ad400b7c274e64bc4d 100644 GIT binary patch literal 9445 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 F{|7%_8ngfa literal 9193 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 U7_Sos(3S&|l~j@_7c&g_e~CdwCjbBd diff --git a/local/tasks/images/quantum-mobile-qeapp-bg.svg b/local/tasks/images/quantum-mobile-qeapp-bg.svg new file mode 100644 index 0000000..e8fec95 --- /dev/null +++ b/local/tasks/images/quantum-mobile-qeapp-bg.svg @@ -0,0 +1,905 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + QUANTUMMOBILE + + + + + + + + Open AiiDAlab by double clicking on the desktop icon. + +However, please wait ~2 minutes after starting this virtual machine to let the AiiDAlab server be fully ready. + +If you double click too early and see an error message, just refresh the page after a few seconds. + + + + diff --git a/playbook-aiidalab-qe.yml b/playbook-aiidalab-qe.yml index f5418c7..72d546e 100644 --- a/playbook-aiidalab-qe.yml +++ b/playbook-aiidalab-qe.yml @@ -75,6 +75,8 @@ become: true become_user: "{{ vm_user }}" import_tasks: local/tasks/customise-gui.yml + vars: + bg_image: "quantum-mobile-qeapp-bg.svg" - name: Setup QM to run simulations tags: [simsetup] diff --git a/resources/desktop-background/quantum-mobile-qeapp-bg.svg b/resources/desktop-background/quantum-mobile-qeapp-bg.svg new file mode 100644 index 0000000..e8fec95 --- /dev/null +++ b/resources/desktop-background/quantum-mobile-qeapp-bg.svg @@ -0,0 +1,905 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + QUANTUMMOBILE + + + + + + + + Open AiiDAlab by double clicking on the desktop icon. + +However, please wait ~2 minutes after starting this virtual machine to let the AiiDAlab server be fully ready. + +If you double click too early and see an error message, just refresh the page after a few seconds. + + + + diff --git a/resources/logos/quantum-mobile-v4-square.svg b/resources/logos/quantum-mobile-v4-square.svg new file mode 100644 index 0000000..0e19290 --- /dev/null +++ b/resources/logos/quantum-mobile-v4-square.svg @@ -0,0 +1,843 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + From 12993fde0b0df918948412bf1126c8917607dfa4 Mon Sep 17 00:00:00 2001 From: Jusong Yu Date: Thu, 30 Nov 2023 22:06:32 +0100 Subject: [PATCH 15/25] bump qeapp image to v23.10.0rc0 --- playbook-aiidalab-qe.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/playbook-aiidalab-qe.yml b/playbook-aiidalab-qe.yml index 72d546e..28f5447 100644 --- a/playbook-aiidalab-qe.yml +++ b/playbook-aiidalab-qe.yml @@ -112,7 +112,7 @@ become_user: "{{ vm_user }}" import_tasks: local/tasks/aiidalab.yml vars: - vm_qeapp_image: "ghcr.io/aiidalab/qe:amd64-pr-449" + vm_qeapp_image: "ghcr.io/aiidalab/qe:v23.10.0rc0" post_tasks: From 8d751318991dc3fd246683f697e4a3daf0b4f99a Mon Sep 17 00:00:00 2001 From: Jusong Yu Date: Fri, 1 Dec 2023 17:10:12 +0100 Subject: [PATCH 16/25] Settle umask --- docs/conf.py | 2 +- docs/developers/build-apple-silicon.md | 43 +++++++++++++++++++ docs/developers/images/utm_ports_mapping.png | Bin 0 -> 183036 bytes docs/index.md | 1 + local/tasks/aiidalab.yml | 3 +- local/tasks/customise-bash.yml | 8 ++++ local/tasks/docker.yml | 6 +-- local/tasks/files/README-qeapp.md.j2 | 23 ++++++++++ playbook-aiidalab-qe.yml | 3 +- 9 files changed, 81 insertions(+), 8 deletions(-) create mode 100644 docs/developers/build-apple-silicon.md create mode 100644 docs/developers/images/utm_ports_mapping.png create mode 100644 local/tasks/files/README-qeapp.md.j2 diff --git a/docs/conf.py b/docs/conf.py index 15e6bdf..2fadd2d 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -13,7 +13,7 @@ project = "Quantum Mobile" copyright = "2020, NCCR MARVEL" -author = "Chris Sewell, Giovanni Pizzi, Leopold Talirz" +author = "Jusong Yu, Chris Sewell, Giovanni Pizzi, Leopold Talirz" version = inventory["all"]["vars"]["vm_version"] release = version diff --git a/docs/developers/build-apple-silicon.md b/docs/developers/build-apple-silicon.md new file mode 100644 index 0000000..08d990b --- /dev/null +++ b/docs/developers/build-apple-silicon.md @@ -0,0 +1,43 @@ +# Build for Apple Silicon + +Apple Silicon is the new CPU architecture for Apple Macs. +The new architecture is based on ARM64, which means that software compiled for x86_64 will not run on Apple Silicon without translation. +The VirtualBox software is not yet available for Apple Silicon, so we need to use a different virtualization software which is the [UTM](https://mac.getutm.app/). + +## Install and start the VM +- Download latest version of UTM +- browse gallery to have a image setup, we select ubuntu 20.04 LTS https://docs.getutm.app/guides/ubuntu/ +- The arm64 ISO image can be dowloaded from https://cdimage.ubuntu.com/releases/focal/release/ +- During import and setup from ISO, select settings with all default (64GB disk space, 4096MB RAM, default cores ...) +- Create system user `max` with password `moritz` and enable auto login. This will be used for ansible deployment. +- Create a new network setting with type "Emulated VLAN" and forward port 22 to 2200 of localhost so you can ssh to VM from localhost. + + + +You can config ssh with: +``` +Host qmobile + HostName 127.0.0.1 + User max + Port 2200 +``` +- The default `max` user is granted with the sudo permission and the password is `moritz`. + +- To reboot, remember to unmount the image and boot again. + +## Configure the VM + +In the localhost (control machine) + +Run with ansible playbook +``` +BUILD_PLAYBOOK=playbook-aiidalab-qe.yml tox -e ansible -- --extra-vars "build_hosts=utm" -kK +``` + +It will ask for the password of `max` user, which is `moritz`. + +## troubleshotings + +### import from utm copy + +- If you see "Failed to access data from shortcut", try the methods from https://github.com/utmapp/UTM/discussions/3774 \ No newline at end of file diff --git a/docs/developers/images/utm_ports_mapping.png b/docs/developers/images/utm_ports_mapping.png new file mode 100644 index 0000000000000000000000000000000000000000..700422ddfc4e66421bd12514c41e186a24e468d4 GIT binary patch literal 183036 zcmY&;18^r@^yM#@*tR*bZQHgzv28mO+qP}n=ESy>&G+Bks@=NXRj=Nwe$}tLF3vqC zTwYcT777ar006*BhzlzM0KeP-01zYy;GY@2WiC?y0LI!vNJw5nNQgk*!PeBm+5`X) z5C5wMuC6qOmaUZ#7dI=Ig5-fLYzd$wYy`|l68t8FBuTvrw7z4~-Kn)Dsd8tVcFOu=i1li)7_=kjY)$UwlG zMoCDS#bpD5=K8^T`2nSnC)V!o=L046z3&`u!J5M!mNx{P=iGm*IK2R4!UIS^_Nlw0 z)Bv~kfE#D-@J0kczMw5jn|yw61L5-DegL6vSuclVr;vX`(#wsXj3O}h{sf>@p-tNY z4uJKXo2@W7;m?hgL+FBfFJcH_4i&=bMRs^apfbeQm8Vzmry^_)eL@N|;Py*<#5J4V zd1(lFY1_;stemvsUlbH(l;Cwe`_@SRrup@HCxG86SK2f>V#Y1zvT#4j9FzG4Mx zY02PJ;5z4c3Q{mb*f1Sq_i%;Z845#!E|a;@%GtSLJ6QXm{_Nc9W3i|vQUgfJPbR|22eeu!g!2D!poc7BndY&C4IQH6fsf?qmb#Q4@HM55BgF9 z%zMEI{eb@28T*G5poguuW4G_o9ZF;D0#l9x0q<7M!&HmorXmhl5mA8o@{<7S^PKxY z8i3_NAN4{S$19jd@lt89)Z@Xk1+@YB{JbAD`0Av1cgeun{Lv@)+ii9?`kk+K6i44( zKJxD}0|Dvge?@su;`2DnC16NH5QxJJguyp4;CnxB%-vuE24Kzhc>~?O8pydx8^f#%@3)!)Rg7c$kxX9JsV1%DXm2gx&&D>bRu zS5*$a1$o|Ke7UkHy%?=FPO|2QBii_GRUA+la10YsIKMtGh+?rS-M+|6!~bmPso=%m zF7Rm_MAHYaZCHi8;C8{V0>E5gEQd82ilMlfyYgVJ>I7~hf$fh4a_9TL9F%+g{!Qsv z<$USzS(!GZg=qG})n{9U$Lck( z1I`3O?=!K(-3;z1LGA?Q*~L8(LI?_)Mc_0HN+o6uL*5Uej|Y&Tgo`4@F_R#V2@Hne zq{U2%jK?32Y8o>s23`oI$03ip7vi=>a|^e}v5k_W2$hx6T1Kqr6U&p03l_|hIN_uR z$_hr#xt|y|B2|gH<~^Q3J`j1}Uh?bZcVYA{GI&n{I}WE}U`Gzk*I7$PObw3LLRDf_ z45aTlc1JktZ>@@DhAr5GUBS58fo4bD-$=Yjdm(nC?f9=8l-yLj2z7#gOXeaa z0f*9u#0jNJQ;;enG$X9t^td8yV7t z3o{aN#D7TCkP!QkMv*FKhrx>2lBSqe3`m}7o`M>wj_=uNlDy8=0m*0s`mEwqV`yi z&USI{W{;vb-ABhW_$59?=h7HuR+hluCA7tVO7Kdyi@S^F%$pktG&!r{np0JUxFkIJ z-*W|4?B;gOZ&*w%lr0vmwCCK4B$gZJj4fhTsFy2expUnm8nhxSO)7?#_bsOu%jYfU z+sl?JWLEIXa4U3jyTm<9p4=~wIZ1G}vgC2Qr@6CeILV#y78u%5vt*9vj^|tEQFk^f4h| z(6AOUwHe%O*(d2o<@MD~TSso%_sEGu6iOAc=NJpX3f_lX>k8~UZ;cONhfAV6LQmoD zv4^o$S*^coxyVYx3nT)@m=kHps>r&EO^f%6krr5r$z?jG9;N~&9i~*%aaqn8OESPy zBPZ3;@tJ)4W{qkwUZW(3DMe$0!$pFEHw_y^GDLEUvP|kt!VmE#-c?bkidCAIBrDJ= z@T?rq=av_$tg5b8<7`q{1v8dd&1|+e*4K*Hr(0}lz5ke*kJM2$S2T5)$u+V2l=sE~yb!H07o@cFxB8R-gpu^YT`7ETJO*+szR6F~e z^N7PZ^d&G6N@EBS>wG9Pt8Ris~);cWgX!i z@lJHjeKv(AhV~i-j?l=pADhp-X47Qrb#`_Y>N@M{Y%g!8ZJ&4AGCHT(Pl`-B@`C2* z=VFCq7^4otucJLg9rli!TpD&kxxgla;ludMJekbsD@Io}e zOh8t^oR*2OuD#)=}@1jU){mEZTVxbrG8hXGi3Vl8RPEd!Srm&_w^ii;juG z=`wui!pOj|mlmQ9I~=SI>%uofXQRB5=Vsug?f(5`(LWk=3TcLX8jg(QO4cm}C99d> z#J0w(k-eFapOz4>n0Uv_LgMUhIg*NKWE$0$YMMzVX(dfwR8nXwb&ZS7>9Vvs4Koup zABBBzF)V}W>eG4q@^LFhW-hxc%N{2&Dm}HC_L_!0QFZiWYG1!>@_4h_xzw5RLGUH% zlhUhKt9?Vg!RP7zbdU3$iOQkV&u#6JOWBHX0+!Qbw zKvoySF6U*LzcxsTyg@3PpeQjyvLjJJ_9$LZxM3V-omp8YkM6VBGJbi;H-?Y)3q=Lh zJ2jK>wHM`*a-XtF3Acnc^R1G-@+HOMg?YO%`4ny8SlX98kj3a;+Sqh?GFd~l;b`hC z6PMR>1ZO<6lcVQvYce(6tJR;g%_H~Xd(#=u52Y8mrXsAO`T30d&m&uHKRN^&bFGtZ zyQ%&flaG4n!|FrS!yNQmG@Tdse=~pip6RA_H=75o#zKk)i}s7yl7G=|)M*K2mS7cjQh+ebg97g_PvpjLP3qG~spWsS85pKsS3 z*YwmAnhR}-E<_(<^VuNTv^Q~hIeItQI1i!iC+E}1wG>DPE&M|!8d|G9`=-*NDB z&%IL1&|ASR#HX$hJ1bd!W`@A##9F}G$RNtlO#e)W$8+Fl{Hz_?D<}34OU5a}$#QM{ zR==&=K1ev&B6pDG{*yNA@cb_|aYc40$C3-z`E4_;mWh0(ej1PK*!Swjedk^VJrx~` z)CF9r@e4}&yjLu!pvh%{Rt<78ceU8dsO;#JW&Ep8`czx)cVP(UXWT(}c z>A-Y^=Bw(s<=(cZTgj>9`s%_n$kXJx=}L{8-d+B)W8m78vy(H18^(S0jpBB0Yov38 zE@w2`>nig(>8Wu)?X@BO_|FWyYp}D955tqlvDDZ^_tiY#&jFstzm{rz!9Lg4nTkv9 zn;x9MGem5oxBq-k9MmLlw{C-9Lv25H(Y@tM=jWpya^6{K!e55_J-9-+h9Mvf3 zT|c5fJWI7IUiFp$z`)b9V0$wz0kiXf+=1?BM%6WFIEefUJ#d5Z*@`kIZVt@Ekz=4yd%_eO5l4dSgpwOeEMFYEQuTTWhr;UKMa-V&Utn z=j{8PLPM{<%7uqch#fcC*odlfOCQW@60c^T#)}e20{97F?|@?9suA6 zNC*oky8&Hnf&1x*bn)FdPCQwA6p-aTZzpXdDuXIV;6CzjJw18(P6*|^Rl;|a%GE)O z(?R6}&vS_*3&KM}7TWA|J%4j>?b)?$3|t*;PjN{6IhssMW9qqnotnIU&e)kWjuRqobqb8Os^5E|qeKP0NEglM?O2)N^QF`aw|LSdP_lMl4wRgIOuc z_kiE_3tg&?E{RfO>`~B5!dQde=YRm6`R>)r$f$rBC{6lE|LfuyW10ofn})fJ0X}&3~zU+ z%Oeyv^^`$6ur(hwZE$vWo`kjMQ5RJd5&{r?${>pWm>UDIj*bqMTD3GRES)H6m(>5v z{L*9`v;#z97Q$^5VvZ-6Pj1lqifBs|XM}s0a79 zCkkFX`Wy`wd9ae;5Ga-w7Z;b8895)i89pWc&yH@0KQG%Z`S}m4;35*QnC-t0S`Z4b zr$H4Hg`aLLMDa)QhYa9nG~hj3zW@a?_Zqw5&<3ltgREJ&R@7J3SBId5VLUP=To(@TT0n@EiPIcq^NxCs%zou&0=o=hNDuSca)1&zoh zoLyf}-z4Lgp-)h95RK?%Z$zPCu!xf2=kY99`G{&H;lVXNd@g*G+Og zG+OFf-QHeTIk{^gKcf`pp@trkc9mOB*m*M3N@+AxbzW(97Pc9(E)hFR*&9Xpg8K@X z^MuL)%$=a7B{P#j1o4uh&{)?xYVd47Lnn-k>Ytk7CeFm6wd)eaP1Y7mkuOhN=OFRW zLSQsfyU0{}>}82^`3w6wTDe)7n`5M4$&{w}UF}EGeQoS~xvX21*mT|wn-f!cJ$LLZ zb#(2)+NN?i7N-tHqDQV7M$&A59I?q!?2F05v_kRx+PLRGo#wjs+7BlOG!4LUP3G|N zVZw{*TBaKb66Q|y!@%>t>>kAOef>+616#L~o#gH!D`&I>KhB(;c!f>r?6|0(c-pX~ zlUGd#l^849BVmM%0s%JYWi$=$#ptTrDMIGu#5+H$rxJE8E~eB{!apR&YboyEXF&>H zts!J*cM=P}ntrN&Y8KrfQRklPFevmUl(KvmbX!c34f41%r>|sVVLg?V+Rgx@g7e?5 zuE1z7tL4i2J=}$foXo=7X1%_lyvZg-#k_|go+2yVDwmF=%m9J0-4B6oIhgb{$uz_L zv}z=kOl_cDo0l|I@j0E%X_k9_FW!vois`q-md)v0! z?sO;5cH58Px?*3ymY%5K1#JcXyb0y&JT1;}QVpl+rFQ)&86>A7w6m>tS9hjh7{VaB6(P?vX~d;~ZN9>)vbm#rM|Q7aE=R z<7c8`-tk3sEnJR^{<9zWD99MWM`Io-KUwS9aptO4B)n#i58Y&XI2rn zkWHIyT_7j04c6$a| zb4NBTO0r_O??$&=HmYEVPTl!I11(AgH3FK-)zT?N^t}ZLSePs6^f-$gvk2@)a9uwx z%=no6r4LwAF>|y<*;C#y4s>j)Y`_G6?nrw)+Zr~N%z^;zGPAJ}^92E!c;NLP(VWa=Lp5;8C+CWV=qEs^LpEHD9;UmU z#WqZHp5uSNgktQbwy(MFc(-i);fnowDB-iO+rxIaY+9)o&a~@? z6vK5+LgE(#hAuBQhLlH!VYUXTo23Vd_MbxXc!%w!ADq~p5W}kXkkSr;Y`2j+UdQE1~@>4h^= zp6a@pKz7EqEY~g!67{TwEhn861@*fD zBk5qKD(Lm@N)bsR&vHVV;PSfbB=Arhu{#|{t54g+N)t#f3_u1{1SK=a5z(VT6o!P< z@w3o4c8L;1*;S}ky}i!(`b@E`^adp2iL5NPzdpHVOlRo4nYzXQvK9%p;T zu!`?6p?&Qi_v~KUdblshuocly$i6b53J2=i8n9GjU+>MXFGH>F*76IHUG@$B25`a@ zjT&3X*ubU%Qor9;dbp7wFdTjpvb7#fXGu-hnv()K5b$=YvwIuX=AWz)oy)EQ?EjG?z@4Sc_qInI1ZU~oY|J`K; z0{$ljx(~HZXQj_CHyKwLKP^$s4!&YgqQPXgCpSE}_Yb%J#`!PcxRxcZ;lKQ}()0D0 zhm~sl)_5wg?h}r>;rsphXv_D~2hY55UemK}3forNp3+JTe&0*u#7Kvj<6j@DOS@X! zHHQQg74cjS=+ZZ#Ag*L%#CF~oWYA+Oi<_a=z|Ha=3q;p-oH>h0=TI`6+;JMHYT4G` z0Vy^;FWAZI`p}cx?AcP~^7^-v;q$hToN?`A4u$@lzV0P+UvHN3@fNGL?IbjyrRRFH zttAG_(vYLo=2Wn@u+GJ$&YZ0V>N&2<`@5wV9^XV+(lb1`6tY^q(L7#6u5!#6@@Zer z`%LK*O^b6C^H%~h`)_&`B&8*w&oMC7 zz3Q@`xy|ugKc4(N$PX84tX+c8Zt{n|!dec-{pvMbAV zJ8dRRPY$FI`3T(~a4YrAka&Nt_l@Nt4YLYKRj<1i4^+oK{;QY2wL}}6wskk4w{G{4 z_icTpdwH3#uYs)3EZ`OoLI3f6=X-k_i1m)2T2-QOEa=P!BzKmT0XuN_b_5@vTL2}M zq#CVKFl%Yqg*@luAG!UnQ|)v9Ffo6qR68#Pj1*Y$-3XL&swIz!e=f{E7YmVTu=K9Rj4wMe(fDHtZV;j2jG}Yc+e9(Uui~PfGc`>?=S2G0?d@CHwwVQv4dJ3oZ`j7ZzF)9( zRUtGP7ubH)J@((%tok-k=6tXEyK*CVAB(k2t~-4d9=(y{bw8tqUMuKrxF7CRYpidp zpU`$+-SEh==NG31=b5Mobr1W%Zz=F@JJ+uofQO`U>iNEDlz2+&r;Aju%YTvcD zEd%W3Y^)MvH~G zQ%?r8T&dQ|FT;LPUEr*Qx_LYPUWBKa0F^R^I+UDwJB_hZo1cOk0IC=pk_4*= zDvAko4xkZabx;a{bwFuO>AEl}v_S&2d|$y~TaD~@q|!Uhg)a5_T!b*+wJafj5WsxL zNFn$R?un(!!hqyyS1VNi8A1;=9^iiO_x)V)6_^~t_h*!*`4=ct3Jlly%X*og7hs)Q zfvA7Wuv7r5u}iltwg)8u_kJSAXZgz?Qfq!GNC1_+n>;$6IIsvItO&SItgwszr*L!8 z3<7xQn8Qa9ot%up7^vxaH%$rOWM2X}S~3EPm*fknvc*EQ`T!#0Hbm(U68t^4!`PSL ztiE4fZ`c%qo;aPtW7?*Z>~nF~z7GZX3@G#SLe;HJXolz{1n|1Dq}(cN@^a>-u{AS* zP&Oy7eGo(7@C`eQEG9Z$!Q2N0BvoraW#XY6sAF#6E)oF^f-*S`FVamgbwL^4`?Q%_ z#?=iZ5YUt1>JUzTUi z6{=YdgHiW0U1o|l=T{rT_pGH`9t%R#?H7ITXuOWguWC&#SN903Fqr)RVaMEHZIxw9u#``2M^ud4QPX~>aMHsb= z>eAi>ZAX+ZI3s4DyyYU(!^m(FuWCq;^gM8Qz+e9=4G&SCr`a0c&+}`~op*H|8AMXb zh5w*iZy16&_DtBWBytG^Oo*SsM zJnD9SFgT51r+rm^dJI6-xs&3^#l)kEc%O%Kz6Ov97n_bVTaGh417c;Cz4Exrs|5k= z?<0I)@oBxfsDJt%V_Z7}NzQ7+J+Io1{lW44@KA$|ymo~m(+p7K2(#1ETAKUEahX1h z<$J8rCK;A11uM&g=Xy!@ghJ_`UWVDa4d$Y|;KLJO0)GB7sX8z;DLL8be9K%oVQff| zT+ho8o!z1g+xFnra9jC2RZm1Shp-f2(6)7Qsev(Q7&V*h3dUqPv3nFWNXj?xFX4xx zMe2_q9S^SMF*6);q^Z(G*TmVm%DJkGhQ`_`>-MLQ9+&GM`v7~i5D!7^!EdHBC_#{u^?)?3?vVV0}wy7Y)wmU5j z0p6~OrFds;t&WtuyU!van|7)Nf{r0JeS4N$D9xJ*t|a<-s!7&xRwS%G>+<_^=i34| zjEJd}FLxH36NkaWCo98^1Q{T%>Mt5w2+8vobn=0Oc>()^JtSlnzZ$uHKBX8!nFY8k zFRz?WPxDn$fIwr)=k2rvdx^p#X;semZ2@#peu(~^1e0T9kjvJlU|nnHO|?a|BM1g0 z`!=duOypzxxm)bl+ik3`b)4fz0^w|!d6cqGf)5X5s+Jw$veP*_?{_f4IedRsi+3rIc+cnSYE{1Gx+Fn{7bo+Q#r&65qm1?rQ zs$WfMGP8y_QGN0Lp3oD(vf`%I0Y$lb)e!Lr!_iR8T_0DjJsXWrJKtZfoa9Qf&P}te zGxp`3P2XL(Qj@ZzJktEsb#(lbg`77+6&itN67Z}qu5&<|*&u9COl)zzZuRsI1_~Xk zZt;xo!QM9sBgd4aBu=L|4c_Kmb-|mJ$^smi9h`$ZrSg7wY;1o}aGJFFu{+peG{?G{ zL$+05>gM|TkdwaGi_55>=H#ZkU$1<5cs!Sr7PgzOWufz{mlSwcbQTsHJIUXc+*?o@ zWW+9;9tpWbCI{HI>}U3iZOyG2}nS#6Uc z&BS-@bR|g&#g|KQ| z4JHE1hQN!zFm?>@oHA)3eWQh6EcYFRkX(JV;UV#CO9K5L%Li*r_3*Y4FAR1-%AIn;Elj17mm8d|rfC$VJP zc7cNpUEkeiY>_rr?2|@ga+%ZWik^#WIqsK}f{kgtn_=P-7W8~<{P1k|YWf1!`@5`y zU^%X`{8@FSl04IM2Ob{DGbg8^^O*Fn$%X~m4(Hccy4R5qN8RSj&9`Fd#jPzx)MJOr zp_M-PcDfiEvfmG{C0Q<5@kXhKpe{ub6Ge$;gk3NDk!$gxXaEQ+sRlcP%AC zIP1DO@n%1BFTc<~s75=9mpyo&(XN~gVCk!_XI(Jr7$#*gRhr)4PzMs!HIY<7$P~4W zWB4u0ddkpbAWKXdzyv^6Qc_mXC4_G@n}$#HYi8H|c~7cw{Lp`S3BU|uV7SGYy?6kV z2G|#dASwk32eb;)@y4aM5w|C@=r3gQB zx0-+RG;g#rShlnj2-MQL^qu{75@{N`64V+wGb1~0-@YB*Vq3R6YM{aO?Y^3JSw4En zl)@HJEehizxzF%q|Ngkg%y#0+c^M>sVLbTSja6|D&tt&-~SfrNG%Jsp90jnFY z-u529eicfh*Gdk5Xk5Qhku;i-kaZD3yVzZp^OYnZh?R6+c)F}4`|VcF3&#&Ma5f*= zA)qPXI$+BvjYyMZZ2o@=EdmJTDSj3R*wX?Of9Dtg$Q$-XTI_zFmI1GdEN`CWXR=eJUtvKIc(^Kc*EhEzspO|Bf+|Ug8t}uQgM(p zy+5wc%igXbr!m^5Z_lT9SfLJ8E%QX&p_)FhbuMxJ6Sjx!z+9k(dEqNTWo&6bLL%=8 zfbe3unIKa@{02^IDYI;$=p?%IgFy!8ML1Bf!wyE!CtA|T2xTh?zRLSFM*WJqXl{W1 z4EF~f*b>H zJskB5zx5Tt3h0Y}*R4z}Y0@sZhS;?6g_YNaQE3#llBCkMLF>|chWqj2EIsX>w&$~t z#wFYNVR7k($HgCSpp(e^G|QpL_hFmE749-T;!Kz1$uw!Y_8L(a4-SoFULS#5h;cUNUx6r{1rSz zBGKx&xy$N~tMQUR8WnW42rcmgwK{;)U*0MT{`v7j2xaR3DmFtt8O=INLBC?N6rcY5 zG-Kq#LZHAz21?8^1Y}WHsLLNTp<543`1c@i&Yr+MUb${A1RGJSDxcYS9xRsQEtOzJ z6`9#eMGdgN4plx#hQvA)XwmDVM&KMwBy+mTm}m#e z!0Fm*q=+6rNPVvAh4O12s5Ll|HGnyXq#}YJIBZ?>kK_hWilf}cxd1sy2ry6s5ILIe z=P3^w3f7YV_jTvJwVFWkP#m?%_t*6|9*S+KD*gVbNTx}!{p}!Ry|s!yqdcjRSx{;6 z%k;e1)kB+wH$}A^m z`E@s-+y&{FYtHG5V@xx-%cOrvrpa0lTLFRmQ_e;k<|HGK*a6!W_WTu;xI*w9V z(Py6<0r2w_r`>jHD*4rPc%Faq44Rowq>+SyHv17&)w|4tc;ox}k-UkMFv!oF-ZM;6 zIUIMT#2`l)lO6pmM8%g%hqp2MR({%M#ZUg^1zK0WoWGx}xg8br%sr_6nY_i$)eHRi@sMs?u+@|&>QW|9L zVz6!NN5vs3lVxk>ib{<`$s61DJ0L4NP39}Gtf_0M=UzUsg}22|q@8pOgr@^_!sfA+ zFc@R#D<^K%7Q`->pS$3E=8{J2HS?4@zMqe7@U9%zT4}VH(TFh}^DRa?At8mOH_UBS z5q=C45JhS$oFDz;FQ}HZVCB|*C$J1Ap#97Iz3UF|HZ6`UG(~EXsaB(^o(xltAn~o# zo)&M+nLiAzdi{D@p{rm^psMXqqNL>sY1(9obgjF<*bJ4rP3v$Q|I}hv3Dl|7DN6atbG#V6 zx_|IyJB_E#(iWKe);ei1DbCO-NN6st-Nbr)Af$;h7B*}m+6jTJSX6JRmD*AJI4UQp zEnS6I?IwfxUg+#>p_7HV31w)dJ3G9{44KjVHG}V3y0X$E4fQ{Uy_`;yQD7<(|K+@t zQQdbY1>%o+K$jX*b#m@{$)0!oPWhWBaOvtnrA%cqnqbk0jCwpi3CFK*p>t zW?|>s$cIaCu8`Iin?hVs6F1w$k}!bxBrc?>V%zn=6k8RiizQkD`AnfP;1R+)nxEAlyy~qO_vln zR%_UAAXgL=%hYr{>e;dzKY=MZTvl-98~&AO%hOp6AY^Aspkf9O%+f3P>ykI8Q88pD zGgBZ1|2eZ8B@kg}&03MXot-D(iq7dcP(kQtlYRhWYGrBNpXRUDbk#Re8B~&2UiVtF z@(Hf+=IG*&fNy!C3eDJuY<)sBgn$$V1sM%|ceaU0DdLf($KV~wm}VVDL>g3*fVr*htrUVW z4=_kl3Y2&!jZ8`1CO^?KrZ7q{iMxt8zm`@QTMAyOE+do}8x|~1(IDjY&jA;H)ko26h92Ib--KfR$t1A9Ykv74~prGKQ zsi7QKtq1A|VdeF4rGrXs;d(*Jj1^^g_jMnQ0^?)J@{!N2sph4NlrkM^zD%|2y!Q*;>CuN>JFv6CSHuiq%4%6=!THe z@f_$uvimsN8R52XE;8KM9~FWX*S6rrpV|7N1olpRUhK4T5L~)21wHmx z>oVMj;=d6}ZTd;n(+{1slRUF_Rp(>2tPOT@{H$7AX4m<1pT`!@uZI?`Zx0(6#m^|i zMQfTtN1eGsFC8t{#W_40_qS6W*Nyn5d@^(!W~y`!n zXDj>EzN+i1NU2?d-Ny_?r*(XzOX04+`{H$d5WFLSU!BCp~xy# zdGQu(Kk|Py;jQ2gy%>c)f9gp_0W3<;P_Vq8Z~OJ}y133LIFM@W#YnNfmOX7s?mu)rWElMn3XzhE zv3-0=cS9l+q-DS)I95PH*C%MvXl_er@Iqurg8fg6#GQ%*fV_0jDRap{CmGQAkd?o$ zZNJXqArK*58ewc7$8JY_7Z@c1@*EZ;OvfmNPh=q(N6ECT%m@dv1dF-}JGmRb8~zuK z6Ns>M3d97HQ5RAjg$r?Ktx8%lgS!#OV|~$L{W@-~f=IwzzBRJ^0==u1!b!Mb-qP^$ z=v9WlR!>D=QBy*m9-logk+2uRk5s-72v(upTNIQA!d9Q-$-ENj&JYP^OdRoovURSQ z8!sFZQk@EeU&zA*3mUit5)`(f5e^ln_MFqY=}_u^H<#E~Pp$mIld z=taVm-1=8b%4S<u!^Qkxt?3+AZ;wvoe^GDd z4)>EHGa@~$yI0_7f4E##eQxVdjyA5`?oLN6t$y?#>0Pd?MtwzWVy;_@x4T9&m!0|( z)_KGui23ETH~}{F314XF_WZrv7r_1!z?4`z8v1rf_9&6u=MC{rd;P)CM|86+Lo)0c zr2hI+Os~?DqC(aodr_Om}hv={;g8i+VfAhK)&%T!5a zSr{g1s#X}IY2f=u_h4?Awks<{CiY)j1)l%e(PT8n1F?OL-_fGY?U z$aEdT^D*Cdo5{_8JZdxqD*v!i5BoW~=?pal+v8cv-GF#sd2ka+91L%-{a;xi6=(>P zM`0Ahwd}$B0|;xfd6i^`xQ#gWmvc$9mk~OSzsxgipgZaBirpo`ij%D37E5>L!U$Ek z3b$qy3P|M>(#UUSHiPIRFx2EuBJ8zX<|ZE49!B(N@|U$ie_-oS__A5T;V2`M98kF; zGkgCQ9L}>gb-PiF4o`0*(KAE*M5E)|nWch;a0i~-v(S%vGc~zv=CZPC@|DDjsb=H$ zjOX>=?N@J;#4WUcGC9i%jO=ZikBhagI-aYWr;cTz!d8q1xJew(i8u&dZaRW?Y=BIlumfUe_rt$ZCnDX*)UV49*lcv6zx>2y~A+nto8? zzhaN%XDlUIJF@?fAxvo0d0rq^j!o)G-Iva^(i7VeG!>CGjSzr}1{V@P1R3fFLdcsi zBx2o2Xm1wgaqjXY01#xW2t5Ufd!ipwQo$DDQ^M#EQ~kqLgQS4UM0~+cpfi#HQtw2t5H)|KioFhZ~E+kz*Ou;#w+;MBP0BG46XncNnl3KqWvG1 zq0ThYky)7+*=ED75A$_ z3P+wlb#EcqDb-`eA?;34DBA|33$Gop-Trwq_=hX88urvq6pHTobNqAyTpldUaCss9 zK8dI88Xz{xh};zKG6e>f(|xW@JD?WE|H<@v{u3+s7)TH+frbS0%XeY4!7hPuC#nfB zU{f?a-jCq>cIpuJeEg+ba43QwFzz`uIu2eHpv&%ORQ$b$2m4u^85f`Pqcl0~9n7U4 zN-6C?fPMhx)3y@uk^h$dvwrqn~9=cM*^>0SNN9$y0^u&?cmFj{MWukY95gQ zTvCfIH?uIAm$*3WJ|zZav?}n&DZ`VM-nwD(pL!Sl({)rHCP!#0)j=&x>>2rt6BQa4gP(kgIIe z$mEP1Tg&V@dE}*|h)WusE~@8+<(3e!2L-`Z(GqkIhjTbX_(WY#X5K*~LJMbSjdTzP zW*(qL$k5b63v=yu^Q~^1Y%oS<@hG;-18hx=gcfE5Y0vetWg7d_g8uVdTsE})BS(_-u%S6bg0P~`BiLKMKMe=0n%X))F>@lRDch`b|l{&Z4t(*%W)Y821%V~1su4KgO_eFHGGWJHB@ zf=UX5n%!s^op9JuuLp1_%j5z%!|%loD82nb-GbSn<{86y2?bxcd2`;GkgM;9)(ZrU zbe?jvh&`!4J}yGHze2Y3>a-SdWNK!FeOnu!KCG_vUN;>xY&g$zz4JZDdYVlXio0oZ zmTnCFA{2(v;)cB7Y0{ZQ(j-T>6|z>OE~4#~YgsyHT_3BtdZTIMIuUYeifO5I`;()Y z(Oy~`!w685e2fb%Vp;o*&9@yQX|nPP1S|sA6>MZ|)LWfyhtMW_>vwfF5rywn!LNh-R@4 zCAb@i|B%f52}en|kX*Z`kg9 z{-|upTbPPxX7S2=xpyy01;ZsLReluzFH>|r6$EeK)si7ry2e(7;N+SU@~JFFZxPAU zR@c@X=Fi2aG7Vf>$#PR{yf>3jHfGbC7D`wba&_!h&wke4N>fP^uPSZUu3A!ytGF^_ z;v0@1eGN|>`parPzFS@JoA)!G&74l}rPb9OXZi-CPsX@8m`yG&u4tZT*w}_61&mY! zy?--T9GeWz@VXACdSdcBD0*dmmq*gK_9w1ZCvJ zB#L^rv%@wFyBK`P+l|U0m(6>SwtVVzzdr%l4{SsnPbR%;H`nRBbYgluD}z0-U9 z!b0q_?Y2O!DbsnnN^5G^Ki{X{i0e0^uURao)*(; zoOl|JnWUEewPH3ZwT7~}9LRh0RmDg(^Aus!sW34~&@v)e<*Z0(ts7AE^zXtMpQnbA z?zdH*=k*1iC{TdITIK3H79HZ>C1*$n(tv#xyb`M98u~-H0nmB>(fA3L*#)Rr zc;M2eCKy;|o`?0i{<*+%T(X+MsHFC8FQh^FkPJ1P#|SC9j>R_=6J77er5ewz^OKyv zF!3G^U~pz@$__kKoqy2W`0hrDrD2*qZYw70Sx0K%B;Wfjh*;P*N0)o;a_?`INxFVH z-UZJ7E?Qh_@cGj*)jW*S@oS?A$QRH3U%bCaU7DX%Za)xZl`iX(`RKokc?8s>$yA5$ zgujkQ)?cw1S61$Zr+M$z-Zwx~&P*khS7&1@hpNs_HtaUzxrSNX%So!%MMG16kqWh~hECT;CZD@({MESyDw zHm1g4gY%p<19lGiQxwa6)T0CNe3krGUbUFeDXOtelLoDJ$|uEkroqo@MX9y3zs@t# z@JQT*@$NTTe4ms_%!r;k9H)7X{}Z8uVgK<{cR_pS(mX6=0E=|o>D-IX`?ouXu&tt* z_`g#!!hb25zJAXQ5>zs7xiu;3{@^H^f!<< z!Wx9O@iV|Sbu6AC?6eTp4767gvLxH%Y?H&$Xw4;G+g}c8HUaRqD>`mWfGn|J`0=A1 zk`DpGq#{s7(?e}xsN3S1ek74wIFaSP9n?4Rixm^6u#x|>r@zC?MUCTmQAak;Y+30x z$uMGmz!T#c=LIQcP)w8M@aY%7?Xdmu#>KRtU#^zIU+Y(FharD%~qg3I<#4dR|th{7SkDLXW>zu(MFlAOU>k^>3VH@q6> zl{#w5+G|-=H6tQd9v^aJDfE0_75?l~tFIF^_#7a34YazH25S>@l@XDbW!$h=}ieN8{}_blyJ&<=K7> zGFDz3v_QG#NveEvl%K;2lc=waF$m_9MGmvGwCkYT1mv;a@~ha&;B7y3?`&E4f@O8 zI$|}9&{EAgQMUaqyGRl0e5xgkUS z%l7lQ>U>IIw*#yUKAyI=*x@7xAE+5g#ewLy)rxC1aEzQZB3TLtpaY;`x7`Sx8civX z5+1%&kdz<4cGX%UD1Ojd{mp@lw()R=<_Zc)~L>PGLU{)N8BWU6??tm{2GfNY84~43JQrJx)tMrm*{k+Esn3IdZiSRGS$5lh7!- zSGPp+7nw?j1k)=$DWtVjufyUmC>R0EDM}G$CR_sG=iAw!pae^o;ln*cvim^bY9j4R z2|?vNBk>ID>-(E}sJ<*XZ03zhHJmBS%Bdz=-`A13&F&RFZ-V>GJN)+{IF3b*NsA2T zhGM$6;{=Py71=~{jw-9z46A|+s#e>Ut(`?}yY8#-i>jhwj;ZVFn9T>oxl+;6uDfgd z?3ZnVPZw+Rspepzv1|nXP8Zdrs&roa$MM#=9lIu7wijPe%pG|@kGagvqB8^QZSq1m zFH}sZTmxk8^A12`#oVrk=h;w#-C>p99lUTKXY(3dbRa9yG$Wi0QM$A75)20Y`Vrcm z$~b@s24O*uqB|pewaulsSs@tBXZ^8?1vY+ban&pkS&EHD2<$c;f83DqG~5M9)A+mv z^lJCHR&H2EKZ96d0TPzdQk6~B@<17M5DN&Rl!ZxS&j9`uK=Az>mDhei4IyxyFQ#1j*{m{dE8#dYtC%S21)3$XKM`XLHT=+iLM zuYToars^a?1lx+vf*y9+l7P7PQz#AckK8uGY@8C$Ko5yi$BS@or9OX>U!?99ap2)8 zO{XdteEwmjtD6cDRf4#xHVN{U{f8s=Orm6v!RWns<&bDec`=7zwv9ABmH-cO%?<>3 zw8FxTkgD@0M^i2q?QsWFzveUpYLMwKv z(EZ7_v(_sB(g)~f$yA*)7}se26+{3zwxwj;wPeO5*Fb;8#_pHKlCmhXUj{JTuD;*F zY*b(kxY4TOKcdfiN4zm#A3dWTT3FpqIgoX1OuWa<@{=}gY`ed2|1#~?&KJBz+dGZN zaK4&OTGclmw(D29@oisbWAQCU-On4&)U@sNS~k#U3II)*$C&dZP4g`GBey$>&L`PS zKtB|Z?S?#-yvEzAK$d-@teD3CaskHr3}EV*_roQ#95dd~Gv=VG>`?$1+8Fm97fCdzkrIJzlCWU-AERnw%E?`k?Kn>Cx zRK~169)$*OmYldZK!sfmYtkPuoXix6OXx1J1Pzx>NuY(g`R2tbDXa*Yqk=@fOsD8s zjJJ4N(|=%#fR4_tF4cQEDcNTY90P+1oY#q;0%K25Fm2%iMn+!``dB|kEPiZ*mQ>$2JmQG8+g~7chZwA)m<`}qfGAdE zztl~}$c5M8yl5*IqttVT8K(5wJVQ)@zNOwaSup(rKBns7eW1Z5eyh?r5MeG42(vxN z`vqUm#I5=MU6N=$%8C5#U};3__{#CAadtOjr*c!T$Lk|PSvRI&ysm`$FpC*rtzA1G zmej+Lt?*R*+h8t?LlsGi}v6Y9Bdo{L!ZGIA$0SI!nTO zcnK+wOwm?na(AusIH*Ec*sq^>S&&9&(A=E8J)SjHv~#jGdrb;i!E2R~&o?^^xocBr z$W~gaKXPlr!jW-vTTsiF#XtH1lUp0%BtUtG za(^wEcMo&x%XyULOu3xldGgfxemh1s7i-&a!A{h{4G5l~W*Z`(K{*2C2DZ{&u8{{>1?_)%$pXFH4--dc;YP~LJ! z6-ZHQ1OV8C0penf(CyNiY9r9mL83nX^d3($@K1d}p^a5rS$hSeosyAN7yilW)5SLqy)+gHmY(4FV_x%s`)_@udXp}5zpv$K$_erTY{yM zn8iie4x1MSh*{KZ;GXlT&&iD;R04Wy+;(X8P_BSu$kh^KTYw#L+$pCBf=I}w6J8Z8 zdu<^}3xC87NYjE(ZD(CmdN2)78c-|sNbj|vLD!QGsCo2Qwb(G>v>&a+6)Y=auwAyl zm85Ro_7@yXeH>PVZe5Q~u;&f1iL+#$o|TH_a=N}9#6GM$kM#~=&}r)(d$ghDC|6b5 zTTshou)n=>V=TB-Q@b@zW^8mA^hrLvjE79j0jjLreDMAqRwuf#^x7}$%0rjj=4*5X zmnk_qi$|2{r!}>mnBXr~0llz9g2)b$G(1kE4Gp>7*TD=L$QHpE^owXtPaxDN%pWCrm4C@uh-hIvqf=I@V}wE0d()nOst;?r3+37f7MAh zpp%1zBy@*Fz$g-FSj`}+!0i36N$_U~4_~a8Q>)9>cc+Ez`nuqHjl&x|5inJs#t59B zp2kRIB^NcYMcnqA+MdY%H{4Gt2d@xe$c>dK@^QbW0S9YlK<& z^m>LA*mEiClO|iuti9~Iu4B|u`gmtbK0tmTlO|C9`!^*q(nE;P_L2vIQBWHval!~3 zeKFIz2iQuah?17j$q;pP%{62AXctKH-=lUz6reYlYtWr9A&g$dy6KgLkaxSV4_|+)BH6qIo0?Xrc)1__EMwOFEYr}tMn#9 z(oMiiJWv46h3-x)mePJa|M#1^C1JiHD)*Ys$5|(?kNW?00ra5t!V0!E#YIR04_!8| z*{wRgqftLgjYDMge3L<+%gv1jyg)G-Z>Bc&TOx7WV;SaPiEOW`(rW5AqD#>lEnsCH z{E_3!e)@3J9KBlRxxVab_ovsoV%b9Iaf)AEF)dNPKMRaH;)tkSTAJ;6Yi`m&+_;`1 zaOm3~Cp|OmeD>{{2K#byCduUaH1wAphGd<+r?!Yk?Qi-kj_a+}-yh%CD5f@$QOvBE zL-B9wv6>W}Q73YcZ2wBKx+<~$#E3V_J&!q*vHWZNAgpb-?lRn!X?nrE(md`)qF4g0 zi>)F4dX^;B-832c`QB9HD=S_UY4+m-(0-}lU_l3s^s(HnuLZR!A*N&PQK`Q+hUSwk z{5%=c<6UeKz{^g811~FY44>yN797@SB z0K&Bvn!Qy91qcQJ+eBjDiKG}iP=zAWv@zHOl^vPJFt z%K&<_pdCv4Jh=)ejZ{_4<|h}G z8+V%`7jBzGE~dN@2GCfLGw!g5pe=dk>INbKd}$W6Okp?^XqM}u=5okKOlJTAZGn?w z_55NSD@}CL#&lAu*w8v+%4fmYd~P-#lZ?d}k1GfYvWzaW1Ool>&&`B*p|sLj2h1iR zfnPuHYhgPlGZ?*yWqZF3;x?PVY8`u=S@+D;b$&qmlOn2ZgIwj+TwGpf>8I?n zK2~C)b-4A^KkALqB$t`O{dsLcZ(74WYs#R#qO1{rVlz%pBhuYvvoMgVubz3rdHEpT zpp4p{y13->v?`M}QZe{oETVAd&-yeOJ{xwZflJ&EAT>2X$P|enp^A%x8P3#AYMBkF zBdJLFPKpxmE%CtyX(m*44Q2jVY6QLRAoyx{Gr>DKKyu$6NAMbvnTX>glx?5neL=u1 zf#cgA25#QOxDR7y_y;%+JI#WAPltg3-=#Pwp@<$zLWACtP8R%eIqnPAzHY@__BTM0 zVqHsWPaiY=9s5h-w4_K1!Zm?%N+UUr84}2aC?bL>VT#=vOqF6dsZOu)Q#XmjiKp;~ zW8l{#M)$L5KrJ^c{XYoJ)_V>@cR&IEnad%hmHAh@rRp!K%6_?$6~IEL=8mtn5kHWY z8B}5JmLkgmcxYw^(E>Vb7xcpV%aLwiHou}@Ev+GDCZ%ttqK~Q+c+SEL7sbP*mhIZ= zW$Wuh|E<8bVS?Qw@B2YgCAApKuwwQHGpy|OBuXnr)v(HiW(R9c1FmU(#Li5MaJ1&` zVMc2N{wG=S+XtiffgMm$QWHC2lMLhdVWcXM;CBwZ32(Tx+-Yc9KDL?PF+3s{qUn@%kVYX|5CHQ z=wjtCWKc^xu(6T;DrbZ7plWEc{cPmeySw$Qd?1$hrGFBRrLbI=rYa&$h5x5j6nag> zWY_z@v9Cu49J?H+alO#1^fMdl@(Guz9A@i*+k-zaE0L$Fx`+ZQwk2!F3q()GB1$Moh%_o3 zRc=6?`=WF+*a~Pj%&d3_0z*O>Stf|>%3rCz4jZQI@VG^=`b#(ui{p8srW^R;Z1(2i zZwHb3#!8qNR&-{-zD(z#y&ZgPt}aqzrDtLarV(N>5+HIyYBLt8LWhEqeiB-R70LPn z*8QbEDP0ov6@5SF`SXFJ*{8bzh`%Q8^loop#|M*P90?Fvw5(+7I3%D;vBgwQ#{K(W z(1+jK+7=ggbojq0M6wrvHscTriBE)WH*uZ^^cicz>5dLA`i31^jg;vno}{U_hjcce zS5>NfZTTr*y&R@n5*Q1lg4N*|$@ZnOFBf-fX2sCD=etaT{042hP`11#pjD=4*)*}H zT#EG8zV#W?HfA6-Bg$ujtd($|A2(Z&z*_w>hLUZKd8v zU%-wTy~ZyXv7mjt-F{9~nNs#4#!5jgzN?9=duq_iqth;OXM*H$bJ>PicCiLp_6$HbElg#Q&D~AT%iWYk=OWM2^V!bfm zWkuR%4(mM#O@sBt)k2u|L(l5%0+8~bcI)eIDbyHg2(1<2gwo~qV!*nlFoQPMPbZUY zalqDpAmDera#CgsP=immlvM()fCqft6kKy@s~iT13>=h7uW=xt2ZCd1-@p5Q+HAXo{~Q7A zR7&ug`9BNs0a?g6GKtf{pWYmpcyxrRV)VxONRz#{N-QD?j=d1bjEWhMT%-nb4`%k2 z@`lRW8$WPaB5HSE1uG0R4NM6wXP$a1W3;&%W|yfT5o;glI7K)kV{pm!cKxl}*R7&g0kXD&zg_#P3h0DkF0W)Vrb~c^& zyQqNVy~%J3lYy3@Rt^jl@GjG^47PQ!7FMV{NH($#zSkd6?V{Gg!i;?M`af4qWKCxm$82Mww&~HO7rl;QI zvYPYgzEAFvpI&!;6B7;QQx?aTzQ^}dxPJ|^!7vofT$9csoZuAQb?@g-kEPAmKd+Ug zw?1O}Vm8UB-Nd`wkIVnq17sNo1C({tnH?}c9hbyAjVZf7? zXJ@`tvGtQfzKL*@9M9Ma4=EdlM_>fSKwDr)I} zfX$rmCI4!ntC-Gmr5%m5vYP5)FaO7he2O$9dgh43X=paXc{fQak$^OF1Bjvhw~wR;sH5lUD=_O4Wrwxia)0^~6(%e7iFiqu)&b?Y!=s zT)3|T%wvA4qu)Wo+eJHp?f?bnQ)EWFRsq6_{0^GSKQC z@BG`t1^f07_C(#`BKW%2?KY0i6Ipi5meznfm~^d4o;#UWrlB{10&ag|cDp2R=4`LqL!GfRA0}=VvsN(iJ;2)ExAlX9 z^vv4dEB#PZN$_=ngJU8wDWKQ#W2&h8U66J$>Y<)r(t|<1rd#zJ|R7%o)p zYjq+Am&E2bNmuBfdJFu$RnmmGC&KQlHH#S<^(vl^`#CJ^o&y_2gZia3$KVE2B*V?* z?v@RD3txh_<)QQW?4-hX1setA1a;CtQqy3F*V`Ou66%@24WWPrSoS^@xCgi)Jb&C8 zdnGEn{T0UrRrQ}GGbGK7O!hu|I3pT8Dq-b*YMDv|SrvVy_jfy3E#bpy*8#(%wA;vu z3a4t?@ZKoDJ0yV-!7NorWDGKDb?Bkqsec!fYY_kbvkP4mTmg=pV6|p7IY>ZifAd#b zs=K$k{=dIbAt~jMs2z;h;16q7Z8agQ0FScM58z%?GL>FiLIqx5(}$VFP%Sbv`ZMj2 z%7%iZ@~K$qu_rt5myVD^N_pMY@-0OU-DJN?ktHR#EA0AJVbWnnR#Z%E(m!V>Y^)+! zOllna8o1}kBd^n}t$)bfw~S|MCjIaArBmtr+$?RIX|^_)&8_y{;mqZ7*NeO^HdZKd z&OBWP_R*?>eH<5}4%=R39uK$~I1j>BTN4Xn7J@IURdujb{vuvoX>A|ok(_TVSOno< zC)n@zF@0IG1$qXg@JIo71$n4HTNU4c_zwN|p@~2stR>uce)&#Z-KftQu8~;EEfcg3 zCZzAZCk0Yq5P?9^K% zV!4BY*!3wP)kEtI3C+YrxFVAl6HVeFLlS?~Xf|6u{{Bs~S2XIRvJrjXJDt6Y$ z;#Dyy_d40OO?Kycf8~%ICMnA?!A!&^T}5FTb91`5xlE>W50R|JFbg0y{0(2dxk)RG zt)tN>HzneNkd8I9%_B zq(xv)QUmj@oRU|G{fnPYS|_^2%Q)@#;BKv+FwPenbJ{{>8^ag~UAaJN$`}QVQ3%f` z6}aG}1wiN(AYR`tl)<=#;s6$^RS{hsg8ASm+$as|dlP|N(v4M7AoQJ}{K1dSQ841h>x)x(}v_ z#-ai)&NV3Vq@m^&Rj1h#=>Hl}gsJrAj3|U~7MKqFrAuho9goas{+KnvzGd^Y;fA0> zBMw!^uC;5Uq!>_?j0FWO^CQ>*tTrvMFz^H0tHJyyKBS2U2ddUuD#qE}i*K{ly62xx z^d|9G+8BJVM$?(y;$RzFarva0s#xd?Zd*3*zLQok9MME(MR#izb&DE0H)cxCSz>J? zhA<3sMxMyX&Aio4L4j>CGS7ae^k@~O_8rww`g%Z74R7mFhfS0Cc=rlq#P0^8t5zhV=>d=+8%%BEDMPjv(Zen zrw$Gn7*{(NoX5y`vQ~0RoC#L)s+v6!6giL#gwML$nr({Q@93Hyj|Kf2A-rFb)!qRBWL_G6_Xq{5vVQk6L+^@F-Z@zVo3VlDZW1|tbgseQy2RaFW`xvfSVe3Bi9Ady_*v%+1xfxoslMc2RzfzK z$C#_(V@1%D5{srs#SFx^dhe8f%#T1modd*2W@{C8oh(RGtUu{uK%mUQXBFY=Rn|4S`0)?-~TUEXNR8&J>d+ zh0s7O{9dl7RyDI7qt>PVEjF>v{ujC$0@^6p1k%+pL#W9HbZS*To`FhyzA<*9C((2bg z0+F1&Y1;8b#dtVTvBhqWhy;|dJ4(2K+ZidO)qol}Dgda7s0_MGSThMCF^Z5GE1gWM zO4%jku`=&cq{0MFf-r}6L{(^40I78(kLMmI9SEfUQ z8Ej|cQLYy>=vBdo>-||g5<;rETU18MXj0AkPg*eV9wfRcKYz=s;>R2C14HH&FGYa` zOQ?sZDDISbV0L5b*0E`{$Q|7N0o3r42X3Q_rM^8TG7&LxBw#%?23A=9$KO(_Zfu})dJw1#tytm#9w49 zK6(4jAITwsg(EOfeorPveRn5N1H;1vmR0ik@fbG=XX_?AAE9t?9_Fv5!*HY04b{RX z5MhfuH{q<^QltKja0xeH6k(t%R5F#;JNAFV`eG>jPWyyIvzCfs8H7i5{M>ZF%|KLV zR^*?S$RHKC6tGOy%m;nIS~8HZLW7bq!vMAnX&vXKc~X4DRF{- zQTP9iOAc%Yzx)f_=g=QEre$AUcZ@sQ(?Br97|W}a?g3|D&{VH9yY_uSrGyA=OOo%| zX4|5Gfcr3<_YQnIwGsaW7sk>`qu26JTc}1*&Rwz1-Y(2}oYx2>EXirbxXRe=89u+z zgzFpy&Tasyh<&Ky^!kCUR`9$_fiu39ghu_s8IZo_0l)e3RaVoLdA_uO>d2Vq&pTQq zu>?Ke)E~u{%l^?tHVwoIUpzuqH++o)+&fadpEh@`HEzdn4UjA371R#M0R<|o{k@&i zFLuS}!Ije_;E`S6eQ*?RKYqjW{Z|AB-sa=Zw97P0m;~+y-3>z4_Y;{?s%J?OIa0DZ z@K#N$0~!Z=el(|C(jVv9R_4!X=O}``d`MBiW?GkfKyQQYMta+838nhpd#F+V;8r!| zTsl?r3PEFjc}Y1{Voj{-1LazB)x~K4D-VjG4R;tW8qxx4ed{tm5zfKwijS?d`_pN4 z3>qE{H*>a}jHr5wU|uQ3(%gYXI4l7;lH%YDa@|7U46zZ^@V!ZWCAgh8C)a(DF-NEm z(dSxw)h{^Wy&Oh%vitc%uTz%bRU=gO65iCSVf1z@>=bcVn!=1`nP0;~`}SSj6{T0G%zhAKT63r@t5fEr;XGc*X%=6=KYJB;EKuih9w$GPrl!>QN&?iKo&+5DP<2x zI>3R!DTJz&w@T&GrK+$KD8s{h4et!af8+qfQ2@s0k{tjN+pabe-Nl##Lx2K!0!rlC zGS%$hFMwz?+w(A8E@aK24{j_>bjd@lX3ISuK_$5W2R_^(>j5y7tn;|p^-#2{JHCfg z*8Yr=QjNcg5)%cZA}ybCfF_X3DC%*9-!|Xc5D(of*o>?IQ96!~elJkRPQAW87_%J9 zk&;)pv9>?EJZYX-E0Rp?j~nOpy&a)2b&2!P7wZ2NG=HY6Tq=il7y-NdO((#Y_L%K= z|DFK009Z~{oVtr2=={%(&dIOmmF43Vb_6tREb|BYDLU@e{Ey`X2Jiua+IJO(8Gt+a z^E{Dba?2zn>}<1Gx^O~>0Ohu=a%KIRy%zjO_V3#Y2!J$bwcBi#Hr!Y0DhG#49%RXHZ@G`R=XTc4k+1{`!JqPO8zP(^D(s&Mhs7kU*L0X2;py zp%nfX8F61<^qIV1&7%Qh}xYo8o9a-D_lK~t^S&wx9L^QX&5*b+-ZckF8QlG6sWiiSLW*mV*)}a5UMHF zP3K8vv!H!Y-iGU}1<#myfbeiJ;IGLDa;Ms{sPFnT6hdj4qU79Fi`s3h-#tm^KLDJ@ zt`MZ?=}jq;d5iv`bnF4AG{yUrm6(=FuS>l-=kQq7-#K{I+tT$wM}kTui*SgYjNQ9c zxAJwz{{^t>;?Amc&qt3&zS8}SmO)DMfGm=xAm8MWrPBKKV__Fy#^nbLRrp`R<#Swa zC53m5Dk}2x1?#^DO|TB!7mah3nhmgz!e+QfprpDW-Km#=Vr+#tJ8||p;5q(wL2}z~ zcJMwf_i=VkK6En6^v;C)QFZcv-o(~)y;_yvwyl?B+O+{}$+=FWR1gF{4w@-VU1S+L zfU$%)uH)||B)-MAEUB^M_AS4+i|+`n5ZM&7{ad#T5c%?6_khTAosf>=KtYXEo9B2Q zesdPdO4#wtyK#qyW=vP-omQvT)g8B^-^pM9(06}IB~oMxRt3eG0Ki&K`5dzJa|RtA zX4=!|Ok4sUY+r!*?H%A|>$9EAJz~gx05E&~YTCAB(!?-)Uk+KH;$W*pcU@1NvAhQ- zrMUo=snqu?4d)2}1vjm0I?X1ts3x}2X8!^pk*#m}^S3A$LSEBVKKz{EeH)@wK36U% z6gDTF+x;>K42H1b>+_BK5>@msSc3be=MjVdi?qJZRJdo*dbis>Ghv9C2SA|t0Z6ud zzTURF-40YF=wA)3wa)-VT!?z-sp@xeiS5r#Wm?zAAdY>JrlF;wzQg*aTr2bXF%}mK zTj|$6Lw0M3KmSSIhghn;IkUq#240_Vv9}B+m>4r&&2-cv}=2CkJ()0k% z$Q$4HUa2<^mKHh2D~EQhU8EJUtgjX0Xe=Bmvl$yUx-AOh`Ya%123{j#f?ij>kTm%(7saJ#eRopypL;Pt^#Id!ctB^<=xq~O!J=0L(c<2Bm4kek(sz%B zE`%=JvPXrw5EcYTH)CfT;7%4-fRyL|aIx7Q0|$yfv}XqgE+UgPxZNMgnWbx4Hi9wA zveej)RLMZrd#q1Q_O&4BH7_ugH^A2U3G6cSTk?l#^$1CXZ-U4B%pUSyaTyC! z*f@$Dr=YZ=0o1oJ=*mP)yRVSnm7^Q{7x`^#mr&eKxvHSc*qzu#rzlaT?&b0}QBmr+p)Du`7s(4f5v+N6TwU`v(z~vWX!-bj7>* zvJyu%rmcC!C~PM-*N2B2Da0|#hzGg(bKTsTx0`vYX2)Ts(bN!ud{c{MlSEm7GxoC& zwJi;X{%?S7s_ZpD;8t|0?u~WO@~FN}Xm2QmBfrK3+94M!GHi(aF<;8p1W=1wTc_&# zy#N}|!!Wnsl~Cx~0*OsG@N7RiJIaI-eyz~3xq|ex^r9z#i;^e-{>{-+7Cg{v`Jfm| z8MFfGJ8Y8Gr>Q!VKq8EYUkF0QY^O4d7$lWKlGIZ4`eMX>f$PJ`k2|$vEcBXD?Ttgk zS8Usd-XUbA(Ci?NCl^l7zrH@}G*k=_uNHBGZ7hp567@ojfV56T_pWN6Q~ym1_a@+7f> z7+R!=HI@;feSA#+^LF17QbBNv@9i9pec9kaj)2Dp&AindOB_%}`C-!7;@BJy#> zg88AQ)1AM2F_9m44Rs{+Ea*-E%YDK3A7OhJ3K_dbi)@Q)o3?JH!Qie}OF<|VQ~uX9 z12QnCn2$voQDFhFKX@~2H?eRJNo{D%FpW=Mj}6fnX8?*`{^a8PIY62ZDWf;K=&-11 z4(4#oj*SFU#qSdoSKeGf{iAF;HaH51V;%_iC(!TTS%?h9;(Dj4SQ0;b@eTQ@gr^d> z8R|-ZJV9>nxJr^G3iQlXnGh*$B$OKCO*?yuikpX4RG7$U(YLpmx<1$QIfkjf^uHqF zd>S3NPZY0OfQkx1ULpU2rxuC=?e#M)x(td*{#Wzvq}b__Fi2kG5nlZ^wPXSM71~Br zR`q9^)pzqlp5c9E1tI6tUi)y3qQ#Y#W}mA~onwCbwp|PRtUwZ7y3xh-ZUx{Vkye+j zrrOGmZTecxDJ$)q91Wk$*-escdKA#Aoy(y~X&GNHE3f9OXekz&BaPn(&PX}njc&r? zbVogHZ)nxY*%F*zS=}7)Q`Dbg8R1Ojz;>x@X0G(RjVdE*ui&;C7Jo->=Pt~dTu6Dw zU}3{s>2Sqrr7hk_Pm7PzrMu}u!rS;juJel-5K)7Dw^7` zWCl=5(HJL9_iOsEv#C8oDhkfNG0iAklu+|?WIv)~=p)@v`>L3|b1P5Cka>i~T!I5h zrjf;b{Pa3Vh0=>}b}Yl7y2BAMv0Xik69i;YFV&-Bi2EtFhHW)pNsR%7a+(BW2cfSV zX@!#3_m*Zl|LmrfJcGY9#}VzY#~zW52NzIp8l>w>xY-7*r`WsAf9wU=E{4f{1|s+b z@Yz=~BP)+^a%RvJ_e7Cv zrsll{*xLeGkD^IUw!%#Yn+JFwzti5@2JGBAQ z5;me8fV_=kM)|!sRnN+WH9UK)KZ2ELP&(cid3?V)nXr-qT9AtJx%2Lgje|bnmVt~4 zLf7WSI%IIu(6JG`mvC;~XKun}>7r!|f1w{z2!R@MWuH2R)X1kvA7GycSlm9>>4 zxti&qaWG6LSeErwk}t#%@_1MIwk!Tr&lYUmpQ9lT3gweo%{)s5eUmRFP}g5v;;@`D zDqVcpM*#fMSYM$S09Rt}K;XH=9iq6vMhU(isgaN!QQfQ)2nZ_XOBnMDb;Dl+K0|Y( zaj>i_uGWtMlnad@of)LQhw-8Kt$@>9?#n!&Xti=Bb)nK0SWWC_eu7MEi&*u(&VEa( zpVW5w@T9cWyW>VQJ_$rIL(pC36~zOGp^-ikm_!d2aP7b$H)7zw0Md9I>g5iNuIHs~ zrWjH#0jPVqS1Xz4ua$NLf%XdKnZ36xXYET_5*J9)cznd7sGwjyn=;CvWeaM)HO>gW zp*n6pa6B4nt_Tt}T=B}Xo`8a|Btb86DWL#FAul`LqmC^;nw6jH`y~|XnLe3glU&v{ zuUpnNO*0vcUbktWLwD_21pMX!d^0aXzV9C{baLEgM`ui{fgazJb8>g_hl`J+m@{~J1V%x zMY|zE-KS(G-Sk;}arCy*61&B-ODk+mBb>0dTsslZ8O{BdR(wu>q7f^{;DNk;;Q`P6 zwJ^BjtC75^;;6Krclb3eL?U+N&mX)^Xo$2Of7xb65-Ctt%YVv%D{<{k`dP7C1Ahb@ zU8>f2CF^kBXZe2k7HZuF7vtPZ{Oa`ic*kEXHp8c?Ey(V6W_gQsfvnRXrW zKoZNzOfk1?PczW8sc>|z`rC8<9|VC7?h!-O9Y*)N=*M!rIDWY_N4qy5X`D0~W=)IQ`%cKL= zp$U_I4od}$WFY#+GYJzsf(7?}S zun-tCYJ`+j20n5sdRmOra^>~k`OAa72QSS2JzoR@&|sM{B5@#QFPz_RI8RMj``tA1 z;}Cfi5vnw89BerLeRPtHm4;pYf1TIIcL(h$`IwZL$XEfk5>cek6Z& zlCOguw5Z*Y;a}R*9Eq+;B$p@d$_T@$O(sf~Rg@i7o#gnM(r6NJ818DkUlCm04M0 z+iTGZycoF^8|r+d{)yM|4Ej}_0g?^q=vY;KvDAG=z4*Z9ad3=nb%<>^%~#FGga_Y zW!EfybC`40M}^DbjQue{R+oFfd+=@?%TqF%gQPlrEz_S)xPtXNfo5VUz8{D<9I=(R z2%q4VF?t7}FYf9kCt|ZMaS`OwxOa)lal}Ji5tFxA8T%$zQG87mgh+Slb0w5os~P`A zU!|Yt@Bg{Rj?%7aSJT4%F_Y~FIBdXGb%)^j4J72p@u%C~*5P<|;iB6=1^o($Q#2ve zCSZbD_^QUDh&G9rI&p$R*+UZF3HfgEx?}XBe`S!Z`FPN|b|S?ot}Y1Ybra7mU3O#s z-i+#R>HZy5g9NuAABWB6Y0<=j{Pf0@nn^|R9+=TSc7d21bR{MKYwPhvTE9iNOZC^~IY zXNu)`w=bS1-zV4*?78c%mJ8i-InCw;sM?Qqa`@L7jj#MU3!EdFHZU_1cd1kDO)S$pd zUfOsit&7|0g;xIaM*eVlyg%Vs2ey^u&WEEou%bRGu|^nllo~e^6<$RScGKf9wP1l@ zj7yL6*eHOQd-Gg|dqS6)IhI^Z3K(2j7pBh<550B?7LzBNL9sgqPnmUpv(V!qY?D%^ ziqt@pL5p&GKXGFdB16@Ha>aYKb*9)Wq{am0WuQ(@wCteDXW|ExkW^MoWYAnb@wrsx zz+rlnE)*+_tb6m8ZqcPiFT=W|myRxf6#ozd#pBe?FX{mW#T{tai*nRt3P`q@os<^z zL={F`S7u=~m1~N0MqGx4V$B(tsNGaNn1~8MB8y(J9BFH%J;|QG>3ZspMPFaDCxI4R zqC9g=B>HNd@~*~W8TjhQqbPx@R$R%H@0&7B)jRx1R%bV1EL1@jjAj)R+@&!*WKjPa zu=aF@6ebr9L7I#c9%Xa<0+{g4sRcge6K!gMCYGos!LCPFd6}G>_BWR$XWd3R5@Giy zl0`E^^vIYjkc?#x@c7%G&F6{rF0lraa^EX4TggnS#F#NsV=;b}5S|yvnolSL#wt@8 z1Jr4X>5hTn!9U>yB{EX@v~Db%Wa^pAyfst1Ypik4HZ}Gsk?LvYK=!M0@=|ZK?-1Nb93s(jBVj?H(fQV-#tJ zJdu!p!Q2OQ=;RVgPOWqqDa?q#FMmt7QK1V(yvvZ=v_PjDkI5UwaAm?FCD_{vWr$E) zHSaO*Id2nG63Qd~ib4w?+{(OAh)lGCq*VxHk(Xp(>{`B3!rH;lNlk%4KDJIDPLMo6 znH8TNpIqy`zT#AK2!olsELqgqL<^Rc(BA!hDYujq{BxINxn}k_o0`{rac$uD)O!_l zp5WI9!!*@yY2me*IrbvcItOAQB;Qn;q2eS}P~Ha?M7?c*<2D-Ku<4d^d)9xii0DZl zahU%SZp7vHxMJR3F?FMs(oB3ouB<|La8Sz1>&t~J6f`NGYLPKH$8uItGR*bE1fd-` zjEw3wAe_6;NfQH#?^jI0uifd0ygcA(#j?n*c^G-!tdauZ#rG%-d~J@8G~-x9J`mIy zMUPHasG+`M;vdLm!>-8lFZ+B=71fsaX)}-(5`!eNNm-IhP)V-zQz{RZaOm_NPN&T) z;S4|b<0%e59#7j#C#IG=&tGaaaAGPg@v%H`?90I@ot1 zOP#0uU9YPIS^l#$dVW6aUhOcSk+7P!HH_wCTB}3Rn^s3TR%19@F3Z7No>S`lUpaJa z4NmOtF(1~0%49n3`j0nLAN}+RUq^Hl`2OcbPTeiK^@XrWh8hEyiU*{BG{_(^@>v>|%Bd=k=jV4tn@1jMM!hO5?}& zMVx2fE$aW0Ra+P6afC9t%$mlH%M$VEXr)r-sP$1^A8N1`k!^!kN#xgb>tSu7!kg(c-r50v$3psQ%AC!lxHFN5iVkAc9cqib@ zDV8*>9IDz0NH_^_??N#7I~$N+|5O2Im?24$(-MY3BtZ`1IKd!o0NSQF>7Xp2*g0@J zzu{N{Sgl$4exlRqiDUuJB(iaCd?PcXuZ^!8O4hg1fuBySuwP z1P^Y(-S^;GYrXFyYoF`f#3Q;6|XHa>X!dzA?{NqQhm(?=x1YPQrLt^pQwG6lN2tX)j2@;&uT zwAoK9l;#y*t=e~tW@xVNBDpEP#IkC!2ooG6kwy;PJ8fh<&3x%wO|BJMucgE$=Gzty zOZccnMP<%J?s!@SQX2>+K39++FVi`rL2QfYaIO6{<;sL=?2Cn*V=@vY(pPo7uF*6F zT?j=u&kwK@R|LvBdf*Nw%1>*@}jes9x zf#@-_hnmq*`h~;IUp6^h^GSG=DiMw|7Fw<0hX=WLwqB|^(s?X78dL}gTKB6orc$4j z_${On?%`4ok5D&Q+hnAW-Zum!kjZmsXQCh#zA|IYC7?WNM=(@rz7qWSQVOZ>e;7U} zAUK^p&im>%M!Bk~=ijp-qWF`tMj@}fx=G3Idvh-s5{Dd~9%D+uuN>s;(Kau=bCG|M9UumhwYRKlg{XQR1Qc*ltq>0!DNPGO2 zJtb4ULYm_2Tteg1j?k&y}P$U#ako}sm47`d;YCOUT4Q^KeK+q zASII$qvbk73w2tvT&}UJliv6^K2Vds)|2sRM>)V?`NmM+wfa-|c(~_Od)`TVi&aKm zBqlFIO(M@$cta}VePz)i;&rJ$e+I()Sliz}r@j;&mzyr`(YLzrt2m#g=$sAj8I^_9 zs7F-iJrlSdV#xNQrnS^3hue+JL-1fkb6WA``Wb}snHdu09-V1A!7A)!f_#^|ocd8? zHmhYWBLbqI#3~Y;&Pk6y#=C$AxaJ8g0xzRvK%XJsqc$z>Cf3lm;AP?BlMut#)&!Rw; zlUN?t7GWl#xu?6CD*}%_3k@R38W((vVCEYwj7DaojdL(|SJ=KZB&_ORX^=O8#)wq9 zuPu;kJn7W6Za_ID6CwpM$#@YJXd|(xDYJJlF(Zx5co~#5tvRMHT1ik@ggS^n{@J^e zO!kME4t&hE+TnLFuqbC_4`lc4C&Yr(!DVb>$i6pud(e(*myN!1cPh;9PfkV-qSouoTyJRooqVvP?yJ^(oqD8Tyc~X=L(qVz& z+_!^lpCe1VQ`*HMJ9Y1v194R5Vx1_nV`p5W;|!`q5)_;j&?{mQI^jbp-%FWGK?4!+ zKr3)8O!+0m^;*XmFbGgnt|&;L@a@G92i&}osu*{tk zo##J(Q&8j`t4%a$AxSI>N(yE}jV6^Bw6uwYjT}EI)h&NW8uz%cK&;7Ht-p`0<2)(# z+6gNooNm#fG{3~ckgZWr{*_OND&mvn?lc9bGixS!=h6;UToWvt&h@1a;ydO-8I;N+ zvoYzzg>N@5t~WC_6AKr^P8^M)klkI9iY59Sxdv7AEP-&**?J-(hLkAPciVZ`e5G`} ziZl=}c~hWy=X!J5&j{FreN>-g;YxKirwQ7Q^czY^ACo%jlQ~t1r4%)I)N#g@oWR8- zldf=ML#6bg15`+zGRS^ho+bStLzL_6K1OtTvj2LYX0>8&3_cs^q)&;hoY^j{I)1(!}UK?EUmu)+5YvEV6mfAV@I_5&{<1lo!0 z?Z`V^Y+lCOclox}KFA5O7qJ2llzgx`?@~YeLJ_+uoXy5-%ijaA%kSqr- ze{<_JI?mT*Mj${PBim+}${N_dzj6p)yr@cA)W4nZ{V~_m16P8#1>D;|>tb(P9JdVn zwjD1v=#Iw&EkB}e<_>lp{{Dm9{hTN7d1p_=#PRxre@l()N4G2YSG(=L_hXGOo~Il; zxqDZ2Mh&a>r>69rb^+GxKV0$MN=x)-FK?C|?6`5&8sDY544d`%3Wq@KW*YlYkr)fk%d@RznEODUBbm);j$rXGd)E9(Sc9pi{{b6iRHC@ zs7edl_Q5C1pU43+L0MiX>k^&07p!DB>8;rXiu%<9?F#L)%8skf3xpHA26EWiPtorS z!sNM_a72=Q;b9e@W;;K8WPI@Jj`2Z?(lFm<*p(PKE6%VR>M4}2=Id3==oIC&2ye++ zCGR-d7DVDyqA!k^liU~oDZWS?Bp*REq_u#M5HRSIiDdmFQ?-ggC~UTGzv%IL1^ZS{ z363Ru>C)l?U5)73{aK(~Moa1wDmL4=ehECHsYLMC!7W~s4_QqNbYgBSGdgKZLWu+n zs4y0@;rb+?!A##=z^`6>8F2}UlKH!TZ7@jWoo6!A(Xi(=#{?jl`XdNd^e``QDWIPQ zAh2&cD1JW()E{Jv&a+d{ywvZhnc{|^(8a7d?j~msz1`ixgm8)*Xiv5iB4ScQgsmUW z@SR2<0Tzq8+Qp^y%SDL&{!Q)(N##5nXC{lt(kf+ZY30HFM zreTV9QsgQf2iG-$DAfzo42FY=>Q}M`|8()bgL&}+bnGUSg454&-bM)%_C`ou_>wp&plHFW@dh$qLrOpl?ty#dYBZf+ zRS{oO`Vt6cB3zSDIxd$1>FOQ-QGqaE2qdb#w&@&~K;bmY_dwh_&bwb032yL%dIBAr zDf<+f#p2X{L&CFWvr=$Gr0}mWP4{~uSw3@0gvcobq_Vnus1t^huz};-y4Ut=UQhd5 z+x!!Dy@4SByY!`Ecgvi2Cd}gzQ?>nj*G|YD@7n5u#y4}*#bVo&)}&+ikjIvq!$eJE z!Ynht!@QQYY3+RLLc`_IVKTe!skex1K8!qvowGv34{&SZoY$Ger-)~3-S_ zB9F&%RnQ=`~Nh*M$kv8^Q7=iKEfNdH+bW&1Gj7?BOOiIS3 z$U>}fT2o|D^^5hZX)a}YhDHWwRep2yDxF%)nh$B15M1a@o3FXa7CbTV96ZDB}`0r>k{F-=UaT*RWuesE;LjH4+Ws+8lTUwzSdr2B$<^NenO?-9JBXHGhz zZ?GpSYZy4)JWi}RcDU!6YLaAN86xPzW}c0C1=vu-WGyK}NN!~`wIqSdDnj`&^2;YE zQ6Y9o@hedc=@OOS7PS&#&!)|F7t+8j$E2j8T}y+~2s`mJ+QmEL`_zkIcqQ?d{N1H!|JZIIa*A`&KEDPJ zW=1V+r~Zj>5?h#(Iy$4phw1hmXfbSs71RUT!|otvAUmF_#8Z8sgxB# z6|}12r_`f%#IE^|M_(!j0w4&6^7%@>=ir^>vu18oeazOJoZg49pgzh%djU=WR8Q|# zDB@ne7=XqcS;EZBfe@ZgrQVqkHhISNCg|8Q;4H8#B1I$nrGz7jBon|?2bmPrnaCi^ z^AEpg;Jg(GvgT~QM}?h>sAOLT=WR2f3ha*Rs(b^X;C$Bi)BH>XU8IeX97aar;) zT$9tX`2Ntk5{vnz^t!r70oz;N40kD2(SAN%?Qio7(PK%ufxxA z$sJE|X{CN1<{q=y6;hbg76Lq{2D@Mv^1FfwA+0HqVh2T($lvDQop~5I!j059w2Du?f ziMlVcV;qNl^o{o?P#(aE&l9HI-YrCh&3So!>JZEuWwShk@yJu$UzhRJ`|9)29MQ>D zP~>4v!MWdyp7$+jI}<%;YxC9$I7Iwcd^j5ITf?Ae+t!h%d^mXipJ z1>GfKY9tTDDA3Tjtx{Hesz!a9CZNLei3csHqNQYUl3>lKh?NkL+sddhV23_ivq>Sv zvg>0yXDMLBq~e<5!0*77ivDFrgDx4Cx}y-9Fy==i(K3(ddpx4c=79qqXG4)lbB9JK z$F!`X&gD$hxgPKP8)qLqaFXI&9?sZs|HGWA9eDtP3?1ZMjm-_%CKqYSTEwd&#H}(Kj z>_@DeRSf6&dIe(f8%^iy{2j zi>b+|-J|wjik8TO3XqT#?xg%`9XS0i-j&P{Ry^?|h%pcA^>_N*NOj5fHK9xizi{{r z7!9dO4Cr^JOz&+vKBz5ng{E(Y&P?d~`>+pv5wsk4ByQY+4pE_{w}P-uX{^I{MN=?x zra+I2!10n>aS!9C-`G&lNya(Kqjk-9W;{s96ntlFDTqGh4liqWWGy%CDe=iVJ`D<= zfq{Dp@Dx-Rq&U~75Q%Qb7>SOcD>QV{ag?dv+KnVfKv_>}#jlERZl9ck$Q{qJ?WBAN zBEbi_u+FQh>|V^e{Vua)hIP$*FZgpkqkip*wlJS}- zgZ5OatThw+gs9}*xvKsy;;$*f$AuCq6_r7V4t5r6OuWPJ11tm-KrlM0XF7xcH z)Q#Up}8N=yY)XQ~7?jf#bU|(eG))dXsmbZ=)X~A|_ zTd|_?&Y!>@CGk9)7+npPfD7O(Rb{EtOG7pT@#f_juN@6sSEZ|tYo^f`lNbiBr*+G} zA;4~VQgP*LBd`U(|1L6aSZ{Dz(wF5nzYSWmG2c2#h*q?yRM1_})%eJY@Qn9m!gf!!#!RQFL;Yi60;E|OEg{;yolL|~bLWEC zZyFPROwyK?jQ16KBgBUO0#*%Bz8X4N3(~S6FNn0Fa3nULyu~1)xr7&3#QA%^V~V)W zqz2m@zH)!{flW=9a2D@!Di)S!hKu1~D?uD13N0J{r7*ROBw_IUqGYri>@dajQGC(o zolNp)%G`8*s1e?q^3{!pmd1*IxOOm*_`a7N+F}V@V5-t| zeSNIi;lUcOJt$e8Q2dKOtmxr`^zLVPeQ=V1u70Oq4CCjr#&>s-!s5{LP&i`nL(xpd zD2XvEq@h>R;4@MAa1f3OANozPttldGFG-Zec1X@rr1Kd^uewJjxQ@(T;(c;01!Va) zPYbHqCA&!G9^Eb~W2NDQ#QS7W##Y&}K5}x7n*LTh(T81AlL+{cMRX9^(p;cm{aGRQ z+JhDM>;c#^ITgTAGgKC$o7cV|+{jJ1l%jQtc8zMNPU8}hvxZ}kWt&BnzJ$!MQSuDAK%wMZZW`;C7cytgj7bh^xBDP2Bi0}& z#B%-1yqkditCb+O5Y0%WJFeOq}OHt91Hh` zrztMQcGBFBOT^Sz=`sr5=$sP83rnxhsy^J01jVmk84a{*y2ezFl*yK8*cnoI-$gRW z|2^9mRXAb~M9I;LCC>YuxKENvN`m<^64xEyq0A}@5@%7qzS4^dt07_h>gvzvpB$=4 zMRhIP^Mip~*zB{jXe3AchLd}_gpl|R82C`FV}7~*mrsYIb;zp9N!-vyML*Y~334+U z1On96AEvF%qt)vNWwyX45pzTe5eV-vuvrqgnzSU?lC!gI@>d&(VV%LSUMl*5}fX8wMP-c7%0aHVxUn=c{>jTK0SJpVk^WuEyHg zpDnMcwgN3h9BETqocdShlcvqF%hF7|w?t?3V^2Jt=6{x7#Nsg(2gn~UZd1m5^qeiH zh>%%wK9b+D=z1zxf~*F+O=c?2dkyA&KBspyzFZ!zJI|?T&bys&IVp^7aa=Xj@R6$H z)u@dekIHk`#<-nKEH%AVs=0?tUvUVTw~@W+=B`=jcp4OTzlQVlIBxq?Q?)fP+?KxM z%FaA)){(A}1}R8fmU5QM++!JnhXZ|CJh;)WzX^x9z8tw~~TDwQ>V6I?QYCl=K(FSIb>6a z0D*fQq3ake57TDd-&A;4XG`K}4M~MU<)*TEh9%Ke>#LVPu}EYjoT!zzsD4NjJ3!GI zy>CqkZE*n(+3{m_oB9LBiW_t;WB=%cUMQneqB7c0XsLKJL;Tsc1BvW+SVtbv%W~x~ zTULllKf?PiIpbncX_=Mk1xDwekz{-y8>341MTSAEH`YJzS*%4Gz1zgB2}U1H6urqr z-eBlWR&y=+Mf)5}sTeztWyE@_oOPH8H7FULf5$4WKtef5mY9w+0j|Oy$MmIYZ7npz zri)ti8(a~g0hP*<4i)~>p}k`2ReA>nt)Jwyb>|Mn)52<&S!Ji;NBv^UIUiFt`%Zw+ zT#;%diCON-zU7ch8LlBxe)oLp0U)mNA>@pV`|_D8J>s$lf~_}$-*YNthB8Pyb~L-T z2s5%1!)su9K8-~19&E?tp7up)wYX<&wg5X=+e0yBwF4_H;lvSK3e`rGHZ)}Tl*BQt zT&pU)Q*x}At-S#g{p{0R3fd%WySK2J5KNlnt)>A+TI0dK6kbzI=})LILc?y9$-Q~{ut`vT)&rDAt^k%{Aspf71mCa z7lc*BcS>GqFH6)cl>F;Ebj%0bV;a%GSh)wZ{G{^ zAIC}3DK^RLO`KK`-KVlVno&OLO=OPaYv{6&+zt}&qR5zyWEY_a- zzJ30>LhNW|yMPd7bAMQvBybdUt{DEnd&H-)kpLr%soW1yUbp*mR`|IE|oVR6}e? zUWr6r`e1g^zLkoJs$=vzPF^G4eX+IX^_7{PO_Dbg+b~6$B@F zfIp?-1K-|v;FewEl-@=E1W zQQ1Bffz`m1sbKk|5iS*%cd`LpBa4yJ0VP}yAPqCbyW&@0GX=80U1@R9MWox=O{Jp? zMt?z`Yr;7=oH~QAwv#j3R~r6Q*zm2~yRqoiu_#H|7OSao$w|15uRTwFXqf5#kmSHe z34~h82CL6CLaSZ0_SE(W2_p=Ydg&di}xLE#vvBgVnQNgZP zt9s6HL5scv;%AtFqgy4GBGZ_)IF4e<5lEYyM`411&|{(y%R= zTQL|f8>iBWie#*cb9j2j^i z5KLnU5rv=LGhxgVM9rp4$0~X^6Npe4NJ`-MbK*2n9wZs3ABb!pSP02~iDS7qZdmqs z#H&}eXfl8IOILVBS%(&unPrX&oV81lyScDB zjuw`WF=&KcYnkB#NH|Bn2C-q2NkDb}&N-J$F#jj>_jffJ&oqVz2$`j}y9hhYf&1JpSM4S)!A`P`|oB1t9 ztIxOO>grT64H<5uS&B%D1zawftdk4NQ%miJs;~RgniU5crRgS?2L~laWsAP?76avn z;Tp9qw))4{%jsz^$&{CSGM?L6z$TGNg1BM>BfJGNp5Ru!Gx$>h2yoGg#RRKaM>a-g z+5NT`V+%!g=G|(7w(2tS5B8LAvMvmGA1OeXX|=)@ko>_AhJppGR>S*~aDw(0Hlp_m zO;|+~Xcra99HF$*g%QXu1!&z7E)7BdYqv`3agVvdyYP_z1+%Fis&E;2`m(Tci7;p_@IKt2||25dEc*6v-Nun5(URJO)yX!mKtA)%{lFdvL zvXfNYsL>#;ieIYx%_2DO4l|5KQ{noDcP0GxIypE=amn#4Y;pGDmSNS}JZH&9TE6rj zMhcSLlBqu{C1O0Z;Q6TQ+cKy=Yl{Ea?Zh2xb4yaye$H*k{>o5dL@lobHAhmHkL`KR ze6E_Xxp#3bp_b}5)mdozlTKbRcSo1<>B3KwCk^}Ax4xcn1atqEv+m)Awm<~$&epSS9FZT08#9NR z`VvxQMw^{01r?^}U$futMl@tBr!Zoiwi_-etmEj(jyZE4s~)Y^+JAl+ zAx-#QUJ|MqN_IoOgNY$Wz- zTHIO1`4$QSYZi6B5LSB#hMvDqjAEX&j%C>8zSBI}9;N*|O@`40wva`k?#N?Bt8?ko z;YE?dOpBpd$h|7wv2m)9OWEGleXn4G z15rO*jWcT>k{L@NnQ0R%nKb7nO$gS!E(&G1LaKXt0G)n}rXzAcCtc;2!hxYHyq>L2 zf2voZzR!kiA^thx)feaqE(V1sEXn=)V8a0(PZZ{x!_1(HKf6M8k=tv9o~fiWo1NLz zmqJWmVpYvEIisy}kwn<8^72{I;LClD8`PjbENMjj(1)?uV2QGeA{qfisDXkmJTbG_VcB_-~n zofK%;mZFX)`_rRJ#gGfAx-`|!AE3kd>yw}ou#g%jm@e0hMM@F?-(bUKEI1Qqt7&ONQ6aday-|;l99jqX|`X*yPK*qmMQy^b0D3&Plx2UDZ-J3m0A7%YA0r;kJMG#^}sl)Mmc!|SG+tj zw~_j4eKK8`meo##T1ux(u}?ajoz+H9s$e_ix15Sv>)FZ&=*YaHHk!lTpZd4lztbfZ zE9s;exi5Nc9?_9+>_B-WjIsL(B)w32=WE2_ayWi7LDE92hFn2cXxY#E+1iE+V{?t4 z=+m7cWmRwU7M4(Y93lu^VY20oGUbWYvsV~7+R}k?Mk5VebWM{Eml8b_g-Q5NDnU4}4h{7i*$GP9HWgbTG= z@{HF?T%`y`=F$HcJ=SC?v?@4-Y)JqO?iD7Qnb?D&*w8IX*cdaKx>BSjEXJF%dT?mu zA@V!vYjm~Dq5s$uoyGVZ{w(N18+WNIY|7=aT1#_F5G4_9k?^n&7%g7GZ{o&ihLHi-3<6|u z?@l8z-LubC*hGO;P+kNKrO>&H+KhYV>7y(y0m?}^4E%59M3Kncw}|tM6G7-^4)}Hw zlk&WPE^Nyo*r&C1wIDaepwvG0GMrh+L)z(}Z$G^9fo9u%2#%P{AEdh7bcTR4$eS?g3G^_@}3#}fVVof}NAD!Kn@TTnEF*I3Lu z*I9$~W@i;%GrYF~`~+g8(1H+%kz@48;SXY=d$gh3+sERVC!ZeXHgWjTUkK+-ab%M1h#(F6u+YI zycOl&BBzjf<(gAqLQk@k+AR2Q>Z1jghT!o(i0odd-B$WYlg58P|lPhV~YFjs(*LW5EhB4;#c!lX8$ z|Lgf*Ef)KZaD|b9p)&e`{JceTI1KSOX;OwNX(TYfFvzH_h$l4lgsIDRcv=W&Bc*psrtMnpYrK#eKzjMd-(BB>BpfIA}VQ>&zTECs1wun z$OUbGQ8M2dhHdxnU!TkEQxm`9PdKd8OsnD$wH+QS_Kp2!8}Wux z?7H3NocvMTe^redwwJ+=%4+14u{t12)&>qL9H3vj5LAMWox6y!L_>rA>E-`@V3h>b zo2vY>c2j8gryiz~(n)oU!+N#+qKv64r_5^S3~BhD_YaZyb&d_K+i zSDL7~rlNfMhhV_Vox9SRd3AMl1fAJloM~_q-~Ts_ze=Oa0uu}Q00mAPCn@Y(X+k0A zOZ?x`1I8jT=*Z0v%^VYy&;R`eXwVTf6Y+X@y}nAWyhcZoaAAfZ41D(iphy_4y! zr-lkQ{$Db%CqWMOw+F|X`mfCe?q&Gaum0cX(Ep{0|6kSp|L8WI{$z4GF1ev*bxV-L zRUC40HXH>s+pS&~!3O{AabrMdo0KA6;n&rIDHTfBc~NMKhkKQbL%Q!cN`9Wct8*#u z#wtYoe0z08a~7A3T&Co zeu=SAe>l>fYHx3!pP!GFqzbYfc3(w{K>z0$5kvvzMLC0RUg%O!P@!j%V>W66gBULM z`Go8&HD>Em_ge>h`{UNj@uLo=sIUK+n{|c32mUU`Eq8Z;iuz^a}_7 zz?7Z&;4>H}vVGIeGQ^_#UY@EJri?MBM@5U_887p};iul~UBs)??W&_>tFvUFNVKd* zQB*nIDX&sd^y_d>0nzpCZ3S0UBcQSVI$7rn5uhWaOs|GE!^44=V!T0j(tubrjw{xp z@|nOEwc2+sfVQ6T{M&f_DxYmE>67tjBBL-?LL zrB$^_*mHmPvL>`EEBx1SmpAWcxG-}Y;RXHcj6PhPT72_fUT2N!gN0} zWoW0c0<6fX+#P%{*1uKYf2JhBlmdsYwE(pbqyqQS6aJB%1w?yU8E1@TZWnmfbg7sd ziPL-*C7_R!H1!i!K#rUsl}!0n{QbU9qG=NE?5d`XRF#56oQKVfLiK6oYX~g|CntMz zOUv@|66ui`<%m2xMt_vsXI~2^E=xhEouc^*oE_E6uk%!KT<1zZlx)~BtvNY38qvVb z!qL-YIUpe+6@*wM!t+!&|6*x+0eVP;3ot}N?=-M5u&lr>y7mcNIV-9ygl-fJhh!p~ zuynMmJF}3N6k$m`i%=F~JV`Z(rbqlT)5D4A3H=(d4VV6wUv8J#+v`4wuYT3w?^o%VOusO8~0P8~t(r`7^BTD}BUt9H$S_4c< zw8kKLzYSr6p+oS4t8q_1KjLQk(+S(9T2lbWW@id;%?yJk=jY>9xFHP`+ipG3#0hM z@;%Id=DPdkQ;Yf*zBz71wjX*N2xO4X>-hrU2$N8wKH~>bud#*+R_BO>ZDx#OT8O>H ziF1E_zEzDL!1sJAZ#juR0ANqiCeSxP*pcx>#vU`2BnjQk-k`(iV69X|ZEM88O|7~@ zXlgf1wnD1Ju=wEqNFWkk1`>SH??=8|qGioYvPRnvKrAL&WhmkoSO8nsSEm>nk|aII`I zvnhaU%U3}bIp=x3p9r~2-Q(H=;5=xFk2*jw#T^YSAva)mU+(uC4gQVevi~_8ShxdR zk7R9P%qf9gl1@wh*j>pZG=w^9H>uDS6D-Z{)dDUT=a#UmOBK{OWsztlMc~2>)Uatyxr>rYA@5UY5dqlB}598iqBDDiC z6412Uj;vY~L@Lw2A0(TXvjc#BE$*$*PY$d0s{R-}!~9)@w{N9_6`3P)0TGJ*$H>5H z0u%>>&8b$bTO#UNJWtvC#;a+`8KwXwxtDtVT=zzRlXo9kLJ57Lg;6t%z_!A-@D~5U zWA{_WB7k($$|J6P+K|+FK&5={8)!?E8dtOvfdzez1W`9&N845;T(IyJsGU+oiw(eJY?AUrUja&jp2wsfodH~T_j()_@;{%)cG;|S1Q zf$i?{cN=0qAPLvevechf_IO0;<<$l^3i{+bfSCpBHZ`*G4q zx&*#H`1G*QF+Qr-)eW&V5V4n}1a^f&?=lsVE5b=Y55q*1DNz~iZR1rSxqZK-G@9$7_c(_uhIK*kt9lP68&t`Y z`624MtYK|9nkbH+hLj7Kg&c21A|$Iw&#rpW>qt0G6%vFESAf|MyU31e<;d zzv1~66LOnZ-79`wFMPL6&MQ6@nLQGS2Yw0C4@a4cfhnNwkYxchjDBMQ0R!=7dj>`54(B{cT)T|9ECLfdm<17UrQfvSVhJ$%MJdo? zhyyyQIm`4VYU#+d1uBTd77TlFr%NVm_JazuTCep^oT`M|2#iL)GAckf^E)PS=Mn%Z zB*{&xB@E7`V^wjw+X%RqGlS+^Ah1$E82ozgUDr@|8H+;=sSZ!gzfW){=2h)ekYP4P zj#1I1u^)>mF?7ohr*zz#o}ui+Z3X9nO+Xz~KW8oQtCFts3}XehER1Hyn3ioAId0 z`T6J38w09gl_;+XV1lwMs*R?9di()~Sb3WBO@S%7GF?EdMP>=fTiYjG-yXITc?+Y$ z3E~*$8SV&@3UZn6&MiMVJL+?(u)PZT(Z4)Be;Rk4B4j|H3xnsXUcQ3)>GMOo^9IV- z?AuESYyl~TM}8luUq>7?@6!~La22Hw9vYmdKazv27=Hb>IF77nH4}xm^iOZIub^{~ z%ODpWCADDa9}qLjk)^Ps&Gb8?{ng_-Wv6tHe1YQ~-+{$;eE{6(g!;Rt$=aXxNZ#w1pdd47ur`GL&`Z-UM zl0eX#mO;2epQf+OwF5{qf3-O}#mFPSalRJ??AoKKA8eOG*2^4Bd?q~69ih-`;ymO= zkK#fNcs^-xYXEfeQQXBbAFUAxM#gSJYBAFp6;6c0dwGpgFK4kf-w98Fvu0)}c;EL9cp+ee7)m%ovMxu`NEY zZoAD?+wmyLb39l|wOIbBDb32Om_Bgsz*SQB?PyjZZ-q>Ar}f7*a>pZjEZxDvijE3) ztH!^tfdEzb^`Q4(^Mb^W{2!mC7x=P276)E|GDB}WT-*aR+Uw?pw(*wdH>FcA1DFil zzjc1KL=50Lrn11%;6*3B8_K`~Kj1EcH;9@So#br&ZAkw(YRt2x9}gG=?UwIpy(?F9 z+HlMIbTJ8oE3ZHWY(^FuXx(k5qY)&)cOkEE9J~`b?2GZxj7Af?`nyo!Nma#+Ge&b& zu@C(Otvv$5lH$4Ko-CgC5 zvZ@xT-&@>ZXtf-E!stU5^r|zYznhG?Z<{A#O^Wj4D1tw@c-w5I;WEP2 z_-wpf5fue$3&zvyfh!Kcfs=Y&^(biEdc2zn`?xm)iKm$mBoM4k@l6;ttG{|z`_K`T z709us-vqS+wg>4>2-bq8EdoC0=d&#QsEd^*Ta3^wa6=G3;bCvc-01sx;dCP%$93TN zfW-si`fO#RPlRCQj4ZE~d&YIC@qLnt19N#V<=?$eD6+bitmXLUapADwUI^j@W&V*q z4bNjEA7I&eb*SV<5C41)}c;>&Ztd|V-NLlHF?R}Xk(K!6%wJqz% z?<1#aiTI@vqgqUekdia_0v(0jm;T9kESbgi#v&v2CxC@cK8m~X$QB)9?51B30 zQdq=dBG{s!v(7ymxFe3`Kr)Ii=u5EO^G1*hotOWNosa_{E{yV3>05&e*xPlmDy*4 z5GIHpPX6N({EulYg8a5F%S^!##sdM5PW?vdRZZr_+oamDuTaV3jU@|eY&TizqQ(;? zpy@dD6~POShzxJwVgoLNWQ|Rfo~~>%Nw+6^*w9czZ;(Ho2~{}k_rg2BjA)x& z(A>_k6aFdS0>+Z6IswMa>UEcGOau!mA@Av2=H18 zN&Zdt|J3|EF5t#i`$j>W_4hXUx8^`cn1cMP68RtB#I*?EmN-H%B>D5M!Jm@x%_dy> zpO^piJ2>FHUwhlpY0C=r{lBCw$1H^Ve=o8eb17SFl-%DX{kKrT{w84mk?*g`ce)S* z`uy6T2^IElGtR$#83O;_jQeY8|8ViDeS7nquE~iA{P(o^Bnf~5>$;;9vY@JyA8War zevxP*CT*Oh)+mS#QR+qk|7%%*^?&4Bii8IuODUvY>M95S*GkE2o`fXZFLV z8vDoGN&wB311@0YEOIWon}X?OQ;tEA5dX9j>^gAUi1+~f5Xn9?;+p3`cNIZ z?5C(fRXucx0O=^b*?&y_(%!(xv_NfOq++CjR@;|58XI>1V(1aC2tYKYe z;-Y|t%?@kR#M1IWdxhI0 z8n$_m5dQY&)8Jsq7P$T&jQD>O9P_c&0V2_O3!f zx@bs*K$SUW0{m+VHE{WI6;o7+trn46)yLww^l)o^j)v5S9O`fClgcl@l3HM<^5FBl zL|}d1OGh@Fl(DmM_m(4FMEX>cVSXq!Xk@e}6RbK8*B)k9?QeE`qFu|?!>K!>h zr)fy99jU5nIt~)H;IYSXgQa<)X$eZU+htqRXt&-0R8`{s$3C2FzTSb2Lv7b%VKVxs zg@i4DGCdF2)jI&qeSjWti1|yzaPVQvaGm#BZ}qzaKB=GP6K%dyO95HgrPH1dR|juV zLOb3((W+YZ$`m*%LDZms>kr1MfJo`*8pseo(V=6h@B72F@_t9_=(MjQays7LC_^2t z&aIWMMbjX{w)pfLA=KHFrQ=f7*22$X9@p#dtbTL5?p_n-ZQBkO-LseaX*5tDZk?dz zaU7+HG(HuZ952HxCr_H{b}^)-r9}f_G?qLUT9KExb3TCI0bCwd&4x2U><~E-{pjpF z`U?0D%Sqyi>>V9})r4ohN#ZACM4u3^cCTtGc-BERaU36d#_-02{1gDxAKvwT)A1ke z6aCgcJC;ELVa%XB(0WJ^^AIy1ovV|>PO;|JmY20kRF~D4V@L%q7ql!6)rt{n8_SaVc~90m?p@)Cs?`TdlR|`s-hY|BY{NdhM?{ch<=j6w&>Pfs z?goIMt$-KIlm;B(KP&)@LQFc%&t|iQfX|~jCnx9Z|B&?+KyfYYw!z)q-Q5Z9o&dq! z-QC??f`;G_+=4s7-8HzoyT8r7@4b8fbE=@2DX1A{ckk}6mwZb*A}AN+Rx%evLwe9T z!ZK*|Jbvn6Dqjs-*V3`bRw25^XyD1>u$OiWnI0_RuL6bQIzz)^AfkAHTAGFXKWSt@ zeF5x{>Z`HTql1)P>;fZ|`k&5$aY@>>=T zvlMLZ+gqlb6?0ZfctP=}2PIf&iy<&+-Cp$6_bbcrB)~(ocVFAtsplN=AUb}32`dAF8>VH~nw)6Z zxaum~Dz)bs?-}zgr@dme9~QM{A-@kr4%HQ)PCPWgr`ph02lSo{MN_l5OAP)nL@VS`h8$iEq~V@vI?o_UN7^U z-T!9yAv5UM+zxNuzhB(&$!4hPee)zfB;6#n?UQ!%Hqa+#D^mZzA)=Rw)ccC zZvLh=_}7lFuJ<8w^ht~nTWZ#Olzv{6o+~f>#x%uIkV!C%5EZ^cYdD7VttA9f z>6hH&!+_u$@O25Kb><4^kX5Vfd^GEa1XYF^#i7Ra9@_*?$jM+jLG{=TUI2Rn< zD*$Lriu!E97+i#|fAx{Ju*22)h%odHoc|eSf_Tr{u7SW2gXaq%P$o|SocxOVI<1V%DP%!1@=F~Pl9hH6b-L8&PfY*#LhIIf^Tzmj4`gS6;ihc5{c- zl(0hFb}`XT{VB0deq0#@28nK|HhEZ3Q)v95nRG#i%m|PWk*m5eQm0SP#4kYn6#vsf zKEpTUQ1|zIqSpg}NI0@6%1jx+E&h8PfVv5c%Kis(t`|i-tp_ACk-v;Eb^Z+80OEe~ zxuw=C3Y;H+CZ6{I=KN+v^o+d>Rr3Zs_T2y@%4vH5;woIun)f;JSi>p&>C2PdN3_;R z@9*2seSYU?BcB`tz1KhQ|GWlXATGz+^|U zX^HLKHe@Su!9g1}@Wh&Z$X+pXY1PLMh{@?pfW2qVy<9-unLbLcO=;|7X<3K97$ zzZpT5b@9CqKjBZ1ui4xAEblyy~2TCuL3DYluF?rxj(A%)YAYH zqTecc6zA4{tkW$uJogcp4UC?o_eb?16qP4GAJS+Ew)oORY6L zmJafIBgJO~u1DObW6P%bwgOt$JckXSPBLNa=6a)- zmi8H&ntYa5%Wmf#3w5s_Bechaz7Y-T9i*n%Bq&r@2l}gjk?y!?eC!rQ;_t0p zy!Fqq{oLb}b&bE(Zal*Y3q-KSWe2-jhTAl*rYt+c48tYzfq@H}0U1h|%TS6Z4}*G` ztckb-*V*qc6%BtQi%ihFndKL&9Mp{!lY&K8jK{ma1QGMnQIcD|OZCNU)XSp~st`YuKQcQ3IHy_`2BQb2XG_t->{4(-le(wC* z)Zf*GnW-sV8k1zrdDZc|zZB1tUU7c=&mE2S^P~K(gl^rkR4Grj^Rd=nBOs#fAU=kG2MMH;g$ss}S2fq{$ zY>@4Y^PXG#1QQU2q{-$sf^9zFSX7Zq&K|iHu0{ zopz84dj~RcY&Ls&&ahJ2CSseZ9xHuWPVT zJUug;im#6@ojU?+E)b0O!{}yAoP|#u`vRLn0D#q81|3U3g{1_g_sG4&Cda+ON8*MP zsWLmd6v4m3Lg=|(?1p~~9YFeU%|H@m@$IDJamPQonzS8VzXrw z{qVOh?k1tnZzo6ztM3SLA|eX<2Ix`1Au(09yM}xd~cxZyuj_O()al;6<)C? zVxT{TUOa*^r+E%y8mG^XvKthcgZN)A_$ff}NQRWgBw~{oZ`XI*?jMLU;Lnm-KrIfS z>SzZv8&2!c3biHU+qDJRMgx(g!}}Nby0~ zn}+IZLDA@WU-li+auEc7p?>wgnUeIu3hIf3$!}rKAIf&`rCP zuvvnN&wElGRO^D4S3m&|5Uoh*Y>PqxYq`0xgZIwJrrp6XqeR|$)B7agmGh-DMe_I8 z0QtzX6EE7ZWSX%jcSukSUyK1zf83tn*^7KYZ33=;-ZkS0zg|(d9mFOdnfxK45KRM? z$^9E#N8{TK(F{3~hIL;rJRa^JGf4kh^LoAu(Pv_3-BZYLbVDl-pLSqOiIXua*jX^e z;IdJc-KQ?Us7Sbdec4I%Z5@lPT5-bKa+Z|k$XHK(y~qEyZr5SK2&*BQYj5MiE5%?9E& zQEW3@1QCJ8dKhQeSU_3v1jO$B%EbMz^X$jT_oU5zh$8hNxR&|g=`ous+K z#QoGtkFL#!D31S5od@~|%%Q^bVKPjB+(ctiZ_y*bCh)4j+XAiQB7{kS+8dyDjD>1| zQ=Ihh-FF}=t65%gQb|gWe*N%fOg0iy?@!xNY1!S1lRO=3$Lp!x^2{H?@9;#}9MCxb zMg~5P(V>qBky|nFps)37ck|;A8l1k)&*f+0^}~zh-%3?AmwEqUF_eyZ|GsS}dfrwO z@O#i*Hc3(U-ufxXCr~>-ZOI@`@!lq8gaTp%X3~{+wl>QnBmvq(Fysco z9Q0~}9vriumu3AVDX+NZAl_hGO4(0IND_-PQ*NY-lk9&e$i(Xj zLA|+RhTzY~<+T7LAqER=>xy=0g-)~n?>d7ICJ9zr-#vv%1_N9IG(huR$gad>_9y*w z1!;l`f$*iWFaMN;>ooqzE|R(*Tl(G12asf^l;R0;jhxSllak6 z6H4?yASgEN<2PrXpbyc{>X1eC4=?257`d%8g)$U^nSL{pVhRAfiWm>vJBAh~H1U@= z&;nH06u$4i!Mr7c-(X#xa!M8SlW9?r{(XO>eB2+W6%m0k~-H{2@wCGZWs~^RpqQ>yfHYBd{{_CBqOBvkA4v#;4dlrGFDbM>@ z%%)qrUHn!a!V}oGKFL~Mk|%scmo%rQq`&*B+kfTIc===GaQLo7?#rs8?itMWukt z(X1NB{la>Q(p*oB>pN)zv`2!U5=9Q7#p#_K$qey|H{{J5vccDT&xVCm=iFYfP$OqiGxO~ua zmEoN4!d`D%fBK^>W}a~2c!gnFlpjf&aJ@B28@@c)?y?TI8A}@l9nOU@5?nG*T25Hs z!6Uf{xGW7gDLzv1sL(+inoCKFnz8Os{KvZyqcrJ|#m9y&-(D0rxS@l0dntr4a4*#q zu}oWX3p*67ZjYzHP!T>1fG7%@1}x+hISm`h%g^w%`{iLm{^;T7Kkdl!h2nAUaFcex z7-iO#+2SW;)yRS-2aOOSjsKq?R&W7lwOjKk1WUH0_L7qNC4xf8A_GCp3b*_7V-Pi1 zIo|qtYfGxFPvt>&bk4ASOc#8})&m2S57jFg$d5HNHUD%^dtF z3{H-9B}Z3$edN@*R9<2aF~$rx`+wg5|Gt15H#lqFCL))y#Rb8q0DH`)c><8WAbY3- zp&x1g`s0YMVbXXM1iC2gd0Fs&VSTxCh|b z$Wlx_nHKD|O#k@YU6vAEVMkkJ?q$uH7>e1z{}!k^ObJRC+m*&k)35YhH}o=o=;|L6 ziWntL6I?Pgc_`5-uSXccl=WPe?eP$^te8X6csD{*9;)f(#|J~lTNKuI$Mmw1Mz zvemy5ylUC=^fi2aWdGNzoy9}byHLzpSGB>9;3LG?v$Ny6)NF+os~wfZ=2cxIT8osX z&R*A-(#4O3hhlu96Gsb>Cfx{=aXfTcN~QeKKBn^ChY9veL1ijE{a>H9sfSph8Q!xr zC)BlePARZNRzmRTv2fMW4c03qA?fQOD^=g@Egu1bQkaRQW+Mu8BPe_%T-RA>NED_- zL{StLlWo1GxV2oJ%qmOvJlwHoafRTp_y3;D|2_S1P>Q|4dC+svY9}iV(R(>(vn9@3 zEktTpt?%wQGZ0ccvewo*j(#<|zZgId8{s z0g=ra=Q&kXR|g0;NQ>Yc9%|jj$eEfp-z`{7{%2YEzl+4io&P6XR=&~pE)|77wrJ%| z1eK%S&(2;1P56WM;y13wd*hwr1Sh>ZdbL;vhv(<#d?k!!s=neQv^I&aX26REvN|vN4h3AG1z~w7LQ108!q&5uBPGGHf|0 zh%6A78{Zu3} z7BPR0qh%Y~^fD6)q*K}A?d9>fs$Zs8lF)IAjvW2747Iv4<={PK7Y%x=Fs3pxQ(FOf$jkJS6|D7Y#?_U63=?_ z_+((M!~yCnga2o?BFu@|lz%J>H&u-<_kWL{i^i~VE$UBa zY&kO5_CoZ+14T*c9v`9$H=x3}qwCB@e|Ee*)tZhTtvW1&@KtoK9voZT+}+Asv3D;p zs|X{w&4xqv#yJV6d7h9bL=66CqSGv{0kg^b1}ZCxtF#0*ce#D2;`e@o_+r2y2d`ez;5)q-fecXn(p=aX4YLI3exja7}O84 z7}v4^zlx3oRlC})A^uZ~3Rk_>`;-i<37}!>&#|I0jn2o7)iaL`qw|iD6pREHPEk9* z_eo+^{y=WIjQ-Q=(nD3sw$dN-%C9_Mwye6&UczQX3M{@4{pQ%=ko(ypLc7wPZ!5~* z`71}$>Qq_VRU;{El%Vq5xH>07$E;P%LRHHsPnsS~-GXq^?~(uf)K-un0q{WtOg#gg_HQ2h zdhPb^uXi`MPo_5Q`=5cq-53J;fEa91~ z*H~A6+*ftJn#6fozx_7jd)aKQGBcQIi0X@igbIUve)`cg8p#?vwc4319OLWi#YnRP zg8&y7HQLoBRO3;BOjQT|**GZ2!-1|$fUl6(tz2%BZRGrojoQkD{ugY`1u^|X0EQt@ z;KsdO;q|k`ml;B?4D%uJ(-BY^ij_9uc~yFro$D&lH8Y4Rv6dOy&wu&XzA_i)FN$8N zxAL%Np+@90io~^OydR*EL2t_rwH&qFQ*p=-=EDyr`eo#MH%{p)+E{;bp8G_!)+CN=CAr{`u+5@!KuKSDD+`@*ZnECjA+i#K%2&h}?+-}^={SIsE zF-*}_g&I~z({;X`Q+wY4fLAS(xsUUv`c0b=OMW zg(;|EIQa1mkX;rs`IP)FsO_-?W$X7geh*o4f5b@j+pEoP-ioA?YaXv&0SW!}!qb1U za6~<8sQCN`$@c;Pc{qL*lK=Bg=+YD>){VA_YufAYuUUV349!^e(eLkX93|5H?QU*d z5K?{9`0Nwdy%(9aHyEh(#>@V$clxNtiKRWK&D~hzE^Jlp$PEu4u8NI)aB7Eme;+M( ze!P5;t=8D#b49ejY_rJ@^)q*=p)O(!gYx%urp_iCuE1SQ96(^X6wd;&_ea)|ir0H% zUj1xYHGq0@zM`bFNgiV#p8vy7ko`1Ubk?};Ta@K#Sy$Y)ro9^N>06i@ax5dUA1C+* zgwNep*tz%M2|P{3S?0+K!Gr^`7J(n`0{iD)Dgl;XB|I)W36g8ay7!*jcVAk(4ckz(#Sw%_M}f?L);3K=C-%|hE6O<(1AfR zT2CrhWn}ry+#R!akACm>e&?=@tpNNf=%hnnQ#k&Q0zkhRde(x>tqaFY&uOF^2aL^( z3D>gj`AHLDK;SMK{(jV|9@6tE6PK&)VlT!FvGWom&hw!%<~;LdeZudRYR1flZ5ms> z&c5k$yBm0d<^3I}r(JrZP)<+R&(_zy?lQ&><07b2&CC&Iue)-qeWr`yv4!f$0@Dxz zgz#ZtrrMQx<0H5z+z<)24e*~``a|*M_%d!E5kor9Z&qg1tnjhkeRR-c%YGb1%enx! zP1qf-3hqkN*)vaL@#zQBd!GOWfbK<~=W)e-rCa;R#-?&13`SMcOC*!u;|P-9Lyy|* zRF2*jZ?H0PKS2K2O*N~s-hO4t5l}Y@REk!fqDPgy04~n+DBFZ`2LSP`?lQWu>{bhW ztpvmOTWOmt}JKWmTzJH*JO@`$wFcgtl6?2~kd#_|B=Q z`CLZnful%D*MxZ_eL4mHpRyoYn+p}XM-OyGb!&dkC@4^{Ccv&stkzx*I z>v;Kcu6sLiTi1?pZs)c)C=9#)=P_qq7<_Bar(pHEk?w8gAe(J*=6JXH^dSV&as@qR za^WYZ)%+-4WovmA%RNFB|3$!kiGZF*mrUlX0jtoHwx5`V?%fISWMjl&92h;UJvEp z=c;@|wjF-(0XKR*@jDQO9pwe>Cjh8{Z7i#kH}3Y#)u%kTDM58YHmljBzY4wrfwJxM zgP=u(60;OUjTb1_Oz%LL^d}i_w9+OZGy2>I;0~JrB2c5I(I$$D6d%oqR)a3&EmZ%( z$?gYT{LaTb0fEA=p83j4qw&21GA%8P*b^8>@B7wupAWL!eLH3W7I(?~A4TnC$ft?! z^{Tcu7N4HYz3K@KPOnK1$?Dt4FXo&-oT{2F@48&DunmFD%a5Q%TP2dP(m3nhci*AaUXC3-^62Ho%G1&ni8 z07}{m4a{psKExGuq1xA-Wx(nLn5d>(8s-uf;FMZM#$j+lqu2w47RYuwt?IRJd7QIC zyS)GjyCN0>p-x$`PLq9Z2?eYWcDNjMoYez*)>TpwI@}|%Oow@z_b=T>+v^>UXc`Mg z+onIEFK{2$nqbKU#cy_2qnfZ(Y;w6~hE_w^&afZ{^4i5Q(%8G(IPtsxS-?be;R@w6 z`u!c;+JjDc922fu(~?dzfrSI6p8b zEyRZkmy{d%_y*2@VC#iQP) zA_Zw{DeUi$>Tw3yNO*|8Wwz2a|ZCq5!57TiS!OlL4=#%;n{?^R_wt(4FQqA z*%DLtUMIdOAuwR?!y}dGxEnXYRQ!k1^DXsx79)d!^cy)Tlb6*?G%z1wx|mG5qo3Ar zdWv+uh@G3a0uGXo_)UTP=84b|Ar+J6G=|8czq?BO#siVRzn`o$Lh*{**r0H@#3?Sh`&qbC5`vXL|{8p4@Q>RYP4 zb?s6Nu*cS^ZA_x;7&TCX@seG<+k5r-TMpkr`LIvuJr1kkih*!bo=OT_p_`Do>9xLYTyK90JsuO#fG(y5u=cgdBQ`$>A z`eHs~ngxx+jI@;RBB&k*ACt+7a@%8JD0FxkMnP$h&HPk)_^~Yh>W$L9A*~%mWa55! zEPDe=o`i|K(ZT}=*_Utn-O7U3U$|ChNr+9qI<%A^8oM;($qYy~X8iNC+hr-<)oSi> z*&uEBCPLKoQ-E*FoD;oZwO9oG$u7%F#pzN|@HGMJtOG7_Ep2VtePUqz{mAXB*Y<}J zmCBa2tm^W&nN7X><@ox;WnV4VT1lswY5wZE`CYwMOoyxAx|G*np=FeyB!j?BW1$e$ zdZlRHT=IB4BKtg&$gL0oRMI1HJs6cMby$f=@kM1OWnSGGqX>+Q*9pJ3Yk<&UmjXg1 zn_zG6VPG&+B+DAsJgrnNvRe$i(Wt*W3g6y%1+N`=m-Da&fu!w}>E6;J&>+3CHldy2 zmY!(FNdgnkClEg0=2H1~Gk241oI40hh>n894m?jBbV^biDW7ymy90ie0o?kwtQw`d5#ct5BGs<9B6{)KdORE?Q8LaS6=M`)L6^*DW z3~SW@R&@%b&#W^$imUILQ#PD(^XEMBn_d+R*z`Zlt+FS{&^Vk6XgMGD-uwh{|JKNv z0Mol5@z6hjeUg_+I!EUHaX;Jc${%6|^Iq6LjqH;lJHfLVJHHA)VeUbd$C%Y1x>8RX zOr`$R3Q&Z`!5Fs?vW&*3zpoJSS+STorw~%sgq0XKVPBYqUS@iflJu0O7}3jdw%-k^ z5WNHEj10)py<8=V7SRaX>4}of)aN~}&gQg$>*x0HoLu2Zi=NBNF+1Pya&pnwnN2B? zwmqo*4`z~~EqfSop^wN?tUc8B$HBBV;=lg3PSt$Ib=k#*9_vr4r~LtDs4gNGH>!J= zIzKSV3`QyO2*`d~^cuaVCXmd(vT}Qhp%Ul7m4}1KXyLxjH+HCa`n)&{coj&}9-XJf zm>T?J7q5my4qvc4FXU=mM)JNxa`iZaXeDw@@Vocg>;oQb2I)E;GD2m(%*{Zx+po{s zu20%_-p=?f-TK>|UQffhy00t<+RswFx0JLO&%I4--D$FQCG@fZ-h%mu%snY7K`_ja(6p&;Yh-483kT5^nH+l4&uT1hZEMG zZ#Vmb?Z8Ro!bgTZj#o6X20J!70!zWiy?~VMCj>rbQ=>Zq)wGxK(&t5{Bh-d3-u3Py zdQO1L6HdMwzD(RW4ncT-O9pI2r%#|dk_FTER!Z!XE^KgW`-#a2RE`K8B--m6_{gf2IVnk=O3`Sqx3prE5g z_Wf}alX(SsbhQ_1de$(PfbQ~+l|1kRGK@B0(!)A9jMaAoX24Q z{1L?-{N+>rBXIVb_GW(iu*8uVu|=7~MO}9Slr9FVeqE+fir7wHT3kP!aoXY00y*uU zQIOQf90ekPYc>A)*))8;Iky1309*{}A%=P<1MS(UKHF(H7sFT5+mesBjokT&l^Fu@ zz@pmr46k0h1ol9g>ZEZ``&%bO;x8Wgb>N)IqvvQ4_lIEO!Lyl&cLCDIlr`(z?Mw10 zp@eW(l!jRH1}IKZUfR%$MksuDRwO=33A$u<n6+F@~_*e9Zt9UWh_pb+rmgIb?Z=!&!$L>s1(dQHiD=>CUI@+LN#M@=O;IE zur^fupmfv2p@Rno-odZ8yIhhS@RF8!TSU$eqWg7#@?5Xqv+4VeL)y9TeJeHNQPj^I z1d)7(olYnE>{v3#B-6Ml8 zqL9JCopk))0W*Q5@v_qDzC+Y{;AhOr?`eXnhnL13)h!`|Y}rxcps?s5WWCP8P?Au| z$AKWXbX`Lp@G*x0@_fi`JEx_SdE9_NgXgb2&98fR9o0hIkOa)yFU$|mE=~}MT!D8d z;hbBcqN}f{(vJNOIg4|KOe)qGHGX0BQUdqE<7<9#&ra%TRGz)2aictt8D+i>EzDUI zisSIM!n!auUs;w<(|@A{>xq6!&|3l!1KY&Thdw4bJDhPQ!R$2I1}uV?*&sjX;W+*7 zK}*DEv^7hR$x--MkAH%I^NgUGs|aK2P{-Au)^p2MCA9cwIz78Np!j^Rk%%6TmHd3C zIG6d2BcPutqCC)^%xtdb?B2_(_6_8DoiongH?Fj7e>7hHa&xE#8|R$f4iBZBQb=%r ziyX4X&Bh0(L!0tX*g{fmV{ltQjpN&BA&#FUw|gJ-U$o#8^P?BpN>N>{ z_{~!-q^lDRS|2~S(CS|d-b1dyRJG576AkL2Fj$d4?CCUL3!@F`G-JsA2NHA;dl@}c zBsMhr<%Y_=1jA82S(a6#+-=RnOj%Iih=wN<4V+>|<7*_c=o?2&GDhvK+Un&u^LYY# zET24B(Vo{NHjHb>!}DAz4fQU0RpbVf=CoZK+s8DK5torRpHAbL?gyAl)J>5j3-r z!3cjJkyIe57f={K;nb;WX=BfSSNtMO_aac|QIK-PN+F(XZ-5;25OSp~0Yx#tHC=h4 zc(5VFFQNotORX$&4Ky!dGFIu&!9uXjy?H}w6QunelL>w!zIx;h^8AyBNX{TlA4*0} ze{NgzMoxvYI#4hUBP?7!d2*Dw?6rKCgf%}963zUf(M`h#}9z<9qheH)%wzm#_x_J5~sB)cC`xYVgT7A1@6DJ;u4#+hO^JQ*2z`z01gI`@LV76=8gp5LsCmLIwYax^2pPGG!x zbG_>rlYbtXkiH1K4K{K^kxa#hMnQ+grY zL`@_sM^R@B5G_}VnI&my$hKayeU)0Ps}=*9p^&GZRVn#20f{DNRPPab)$p=}(3M$v zfg62%AtB3g{;rmRZL@P@I&RC!v<_%_GecS@7zX1(8qh0QW7&l;j|{~;+8q7`sjIa9-f+nF1z)ET;P^Cwy`-KE}JcU zYf-RAU(r$F?xE}w9KaEQDtVNa_1h?s6H}_mbir7!;-a_w(DCk-0Wo?s}FXL8m|A< zECDNm*c&p99=yDQ5j>ikiu|$zI30<{g!Oq&R#7eLh4ra$+c%CyYfDl0KS9S2QvOp)82IOkDIUE#+YrTE zEVcFc1Dv#}gG>&azoQgUnD-pd)`8d-NHNX_=XoJ;^ULPjw+qY8f4V)$L}hVL`~ zah0te)d+-za^rMW*Q*bViwfN6PRs!)IbI7M-9$$f{W7K74&%t?g1YM5g)RZd?qvlb z3)2G>!}9wzS#U$K)&lY_CWB44n-JKrBFWn38qmbahA;CW65#ySycy__fV?RE_ zLG{3#_Uvy6b%GF%v6ScM|GgjoYWx5L#YbZPS)zBNx_R-}Gk30uU-{@7=Eh=utoU&i zrS@mslVZuTN!j}Hbj64XQknb&o0WM~kRlSDFOa40JY;l{V#k&+^VLCJW@OaCMXngrJ>S3OK=af0 zN{z+jY0C$ELRgJcbd7=E4?j|NS^BKfh+&?o2g?O@WsP5BF4{BF)kyKFw@FNE>fW=J z1?nZXN%?4ZdpBV3Mg5f&nUUG!I-M{JOA7XT$$gT1K*4(82AS+rXojq!Ry8XRW!7gL zTQb7{29?X!%4OuekY|{og<=|;oyD1 ziY-{8ndT5kk;037WwZ$q3qCQijUu!9a=#_8V48L$GKUg|TBw;7<}v)6FcRy+^TF_{ zriWk?(R$6`y*HKJ&9H7-N=#{5&sANw&zCe^Or-%xc??10st=yL%@N z<=av*y<5gM=LpyIJC)~m3|Dsd$9^v67|+(V+x+jsk)}6e;UP)|m5iZId6=+6ZtWeC z_eb5^yFqHR*@h^Ir~}~YEs|*j1IR^Z%X>CnpoU7RL~M2pNj9nx1e4XL4a=;_*r9PL z>i7NfC%BVtba{)`OC+eJ@o3=iEO2bvL6R{`@gi5o`Vg?*{SlwKn>)Rx-3Us;bxWgg zApHmNK$O2|f4U+A^HyhpKhGQP_mzw2E>)$n?tqi7pA?UU>}BPH#tcxYdlpU2Y`;$m z%Gy%+L?NQQn6DGVT18m7Rnn_prvwSJkTSVl1x9w`bpY_(L|! zJ}~DEM-JnU(rp`HBp1@v6pFpeF8jiIW!z1ts8)aE@q^CK7>Yt|Ah6ewUlOb+j)qH^ z8_a{aI)2Htgb~XNG|!RORH8G9P3QtePRQWx27di%VR&XS&M0ZuZP6EM3IQ@Ota}ce z`P<*VHGY!_#rQ?E?*l3x1rI2FauO#9XykqO_Zu=knR$tcN zU-jzYH9X2I8G|#eXOPKSeKRCfTT9JD{TRWYMY-O!30Tpoh!k zr~gwAG|vaRW~7KsXL1lf-#&q)rd3)-texF-a*ng&5cLKCt2<`rp4PJr0u2CDcMrh*?^fOPr~^b83<*Eq z>vDGiI48LD7q3|Z*LM1ZDN^Ya@Bm{$qrqU0DZP=ndAP5)lE7 zWTv@uM)yLOVC_{b9-%LvzxMKa)HqrL-)-@@{-UBDrdcz||94h}e$(DS8hg7yK1{54 z4Wvk!8C5m^_Bpv`jKb4^*f4UQf@YRX%^cg-Ll6OUDjpt!#18qxtZWsVRx~VpD(GR$ zG)R2WzdDQBreKMIAWj0}L0MD87ZY7lY?#1q*-*!~g%USeCxTHXp~Zm0RmtKlf%CA* zZ@|mns|_O-F1d=ji>jh{5SGt-w|W8d%@8rz|6Dcxk{8G|YY3?-hK&uEpEg&Uj+E3! z^#yHfBvqgy%q}|X)K-N`q%rL)ic8nBCmHe*OlLw>E{eD-3worPbzuowVBmfDqQ7> zxF9%m`&o`_hK^-i-9p;2*WRY^#8}qG+jC@rHGzj{9D=?sR=frg|4P_bCKvu>3v)n7 zGQrQQRFsu4)8$Sh#Xe|yfevz^TfW?t6vj4)N*^~#+pp)=5adB%F<;dkA3IvyUh4pk z?2z2QaHH(Q@+r>{UqB_t;n-lLZtu#O<@g4Db=6_K>ADwf>4QOZJp==ZmXcKcSu=?! zQ^t%xaUot5&6^rzq6RUpx+d&vL&Qkedx_@&?>dSnI_f6@Ab5pWDoGNhsZzTD497=# zP?;E7SE$n4Ixu10#YaOazuK`lSl==C-V?`0o=t%o+5tTAkwD6}(Hk#Ix*7P7*rimaJLQGzp~*C*Yf&Ktj? zHW*|!i__Fkoq}kK-~O~r&&Q@YrEO8e+EI%JbBkf-0Dx+l9`osa*rq=LsYU1Os-1xe zI&`X}Qt}j2=@xB|ks-bQh~yp~LUn1j7<0?ibi!0zbW`(}+G6m|UdvMFuj}-QU22)1 z*1lrzHu!`VhzOEWj8ktOfK)YO308htT{XWDcg(UPn$8(MF= z@zI>|yV4r_g>1ADK`?a4r%jgR1-K=Bfi!H>5)!tj!W1U+cyI`uIC!2eAGBGRDxS&_ z!bhh+H2vKVtPs-A(a>Jxb9ny}+f}O~hu>?7nQ9ybudAMg{zB4SJI{)-Ad7h=TzS}m zLb5{C<85ztHwDDeZOwS{dKWeK0tOjlWyovKrz~iY8ry+HPWunJB)Y68BP@^+*l?n*uR}7ip92|MXSvI~8!#oQ}u^&y5-B)x#7c=<0F9Dqe#OT4!#zefMmnqtq z+mNColv~(LAsYtpouc>BLdQd{1OK)#3(z0d+vfT4fPN#|p5!&Oc1nb>3#a*W-OXfl znW@#Q3)Y|J3+>e8{+0KYeH;7vVkBDMv_$9s^#Y(xH&>)fFqjsGBIxDc48o-hlAvHD zUym+d<{Wx4&cRknM!Bp2Z(CrW!6HDaVP587HJY!$da7ySpujiIQHmEkc{CRRyXH%V z%8b@e2fGs#3WlcAjCYbOeqs$T=_4dst+U9h^cKIK(k>~~SvGs2y-jG8ItU0bB4-N1 zJhi*JE-^KALAG=eiDbEAK@nV&zSF^Am_DpS{GRUX2hP3vqAAaRs@z$Q1>h;0mA^+q zs{*h@&EfZBU2XD_aeI0Odkg{hC92I^l8U;^n{l$PG37r5tm;wF&VBgq+ox@e4p7zywR4C?hH%> zrpm95T_Zg2Dgj5-fl8E9&Lf@S$*8N&$!!>^b)Y^>E|lpt8`kxcmPOpg>51ik41-dP z4-L|*dRagNa9k~)fBRvwVdUY+40eTFc55Tb@3`GQ@v00mA%`|=b|chNYcPNJkNaxqJe^~K zOMlW@Pw)yfY*S=Gh1|l1-U~@9l0q4#oz;ta5M=RAmYz*9{vPsjIY1zvrjjcY#X1?T zg%1-g75h~s>N+#n;yIKWT)8(@y>GMIIy4h7-I0hkM}uL(LnRJHbe)1y`vz>t2Jm%H z_;*FJydV-6hItSY)L%y*V{d9~J0mGe3$9+vk$=OUmd%Hoz z9X7z0@s14iZxCtHP7b!AHv={!%0|%OF)j&EVTl4!_Wfb;Jh)!xm;?aONpb|tP{h`u z!Hy?BK>QN8wR)c6AAB(fSjrubrn*8>1StMT;=Aj(qz1}y1?ZL$##U>?nyb1SO$nWK zx+&pyBSEqVnrK1%Jhq?tL)cH7`N#sckCY<650Xf7^5nB2RpUMW&SYVlU#pbd0zPq_ zC~_SS%u)7`Nj95@LwIDc(ardXNF6eaF%)W;nj&zEdurc40~j`aMyW9Jvc^J2I z=|b^NVYVfCiF{vP<7n}l@Tg!Mhchxb9EEQdb#(dSoY2zDcqY!;Zsz`AopUtSVZO0~w1yLU;v?WSDza4lOCuoBC{N|?wx9u z-MKyETYoCtx%gJHulz`r+1wWt>)j*C)NWer<5T8i)B2i##?(HN73TM>W;5H}>4#X4 zQTA${ zIM1=89#%UcpoLX8!kMU9m#_P)z}$2GL?b?zb2xv}P+&~PTD37z?vvRs$y{)Wl_AHn z^E(yyyPJa&6^%1gF~*yNkfkn;j~)r&0}>h=`-G0x1&Pms8*fPm<&1d3 zAc#NUiiGCW%l6Z4Cg?XVMfzVM;1hbxM)SC zg!(zm``9ITr>j7Zs|b1TZW#`QtdxShc?2#x*L5E^T^P7$0WK*dE?BT=T*<^PoF3eY z_*t?woSeS+h!gv@Kfv-Po*D8fV3J9+HtWfu|F`Rs0y6!q`8RO}509VT6JcjKqR2K3 z_oW#}kn|%Mv7s{S;-uBtXko`;WL@`UqN31gh4f}wy3Er4aj1(jPkGgJhd*ZI37Cg$ zP}tgR(=^4K_2?igb@tP`2Dpc@38XO$nc@ErYi}7<$FpwzA`4i!ySr;}3r>*W?iyBt z2X}XO_uw8RxVt4d!Gc2|XmA4D=6&}$XaBR$9rw!}V|`c|kfyt;tGlY6Ie(K_K83-J zc-JxJy?wNfgfckmS!v;0_D9;YgfF(kT69X1PV9QgZcCqL<>s!&xk$LE#~qj?iY`!bzffldb^iJc9%btI2d!MK=jq4H*V_or%RSiGxivt-&5i{YdxT< za@YE!ITIpn$VIX4Ric;=`yu9yzKF!4*Sq4eSQ*3EYR#%#YY`XDUG z-Bsoi*Az^c)aaUEO$S|r+ zZ!Te`U5zigd|WnH%#i=$7h=#IoXJV3TkkIx6Cz~P6jg=~N7u5mH6>gt9F5bgOa;Po z@OCI*VuEOf!_WT`f9!29ys>9U&q0%gRANEyxj`6uGcO63L16h-V{& zg)MtjO7w`cMWs^_;2;P(_! zZiktWyj6mvwOyf1o+C6Gm6<&@=kkrh^?`pQ*3!0U#4%!;6}{zQHD|+&&7&X1P*=-n zNBQC@nW6lb40?eE#z=*hmF?I2le=W>8vW05RjG^-7g|LEzkHglrUSETmi+Qa2dfJwWEH)*GD-e{b}7y9Hk%Ckt&3E0qDPk{?MX(t@qxf zFD$0>b~@heYTI?)l^6vD;icFyG2V?@*fkt>ts=E;J`&^iDOdQ7tCj0O6qi(|FIIdB z(WrvQg+x4(x#ofs#pFe~TToGT>Lre@Yo_HBG}LtGt8OXxHkv<0zII+p#v;)id~=8; zBf%uGa?Z#wO+_`%>!CfW&QNTH#5XB*M>DOk)$6HH6i0^o*5L5!hUD_AZQIizTX7RCED9^)Ug2Tf}>OXuhL2Q=ONgz($Pz>eu6Mi#D3jBh@9;L?GEOcZ`~?w zo9(W7JXQHTJu6+zk_)QvYYa}cCIFzKJMxWEtyiyK#Y(~XM9bPx20DmLKR6Ym#~sWdFfcZ2T?0CcJr>2arxO61Y-JS71mLE z21QxU@~R^ewxdU+5)A!H->ERnYI5X7qWSPb=|HRSqR=ir^MbClQqq{vl(mI^ny0A( zKvobg%3}?jNW(WPS;T`VtwYUlI6BoR#qbpIxWws2e>ADKpXHT%FoJOsxkm#XRx~@f zZLC2AF+(Vf@RgR2-p=~+g@t+-8Y$s%Nd8JFU|MsnUrZ?Va!89u6@8&^#$c5@XG0EE z?Xd}sS|Fw<~ilfalcJRv3BjhvL{Z`6MO zQ04}$t<8Ec2vV;>;;aUZXpENO;%*BP61QcJto$t~kHkE9|EvA9rh4-Tp+u8B8e?Q5 zkM57X#W$=j?ZphCA4jG?UT?>pifr}0@>}Hp1G{hd@p~U3u`OTYFRx>f`C&SKoXpvW z5_a7>lg+n_HeJ(~53AN%_T9>oynC!=>yefFw2j82^v6dbULJJgCvC7BKNG}U1DJj}pg z7O7s$r1<)7pl*&e(Pib37pQNwDRvt8D!#&zrxa+j6Wb|Ql;Rx0PCD$F$^Ue~xLhb~ zH{6~`$SSh}xq~=1a;ywljMGHX7Bw*<2Gn^^;0;&dhU|4blXOO`noZ4s`YN|oIei;H zMiV)av0^~QrWzM?ska;4O>>zlYR_Kv?H-aCF4iX~K{-Z`M4lLxSDFQB_}X2`{^w&E z3FbVu;-~cF-h5DuRp+09?my;`qPMPOBp(CC+q-#IgATa8Rzx~ua*OJ=~3YNkU3_}rJMARukGJWRJo00=*NrBi7Ll&HZ>=r7qtL%9e@1}%_IX-sg%BU zk#y@t`HbA! zgYpS?uHuNAXr^25U|)XmS=-xjEe++gWyaPR-;jznk*f<&NtX=IJDj~?YtP~=lLqA# z*FxHgeo}2cWi7?OURrkcV0Vw$n|<*g)7IQm?TzPSd?Y+G?Ylh_lln0M@2m%88N-BB z&sgFdZr{x=`?!GpUmdLw=zOh1=hM^A13ew(5m$GMUSj9!Gu*cIJ*2i87#sAfv;_RxIb=Nek{{mfCa;?vvH{wn*A$7#*d%SOK=1hrakslh5uHk=IJ#8kv zIdEYvs>z2Fd(+53{;H^E2LhG#oYTq>`h49`GgW8i)aiD0K}DgSR-UG8>f2GG-3HXt zE_h7-$P;Ja{#}_&5$kEU^H?Lb(_{;AwcjpeChmTE{9~NsH_tvL%cT`5*A_b){w_uN$+&Rm(FQ6FsZX^?niY@YbkcZ;66j4{+I|%Sx^|BBN%TKn6TQ zVm5Q(PlKG+J4YV=NYRY9+l}8nIf6d1BV*K^t*qGDH2RuDWR%2&Fby8Eiig6=& z`4lB8^a|?to5s$YqA2*F8mY`*sPfV}%1Bn0Hf?5q&uK@aCA6E!e5WsMZqd7?Z`Wmd zz7^8>$_iy7-KZLmx7FoV*GQV{ZjEFby9-p*13`SHEp#rB3e@8>%qV6 z#hjRDYDD8ET?CvO(oC0AJLo!ektVl2?JN023VbTJe=Ntp00Ehs=$~4NsT2d;0wm2K zkZ+iYUnUIeOx7o7tuA>UvKscP_`DXfdtLSUB_pDB7Q)+7fM#VRMNJxJqD`aXAbZf8 z9(A*Vn+s#}fR^T7lI&fh=;cy15a}vNgp>%>>+IaXw^2Q7btb)mcfa?AXl7IsM&H;23Fz>& ze?8RPFhES`;x3=f8)|oTxMZ|rLG2zwdk?Xe+I*?-BEdzy%lcN@Zn$?x?KptHHT#v- zb++!2ZbKyuK_=3J4XUdNY@QTi+QAI}-AXhhU091T16+jylZ~ACsG2x2RyHE|*N)E% zb)kv{_=Spv+75IzV`Udb$x2<@dWSj#%{fP|ORaWhEym&^04X&-7SRI&J22m(!39jU zR^RDoK~;Ds|0T?!fw6`OaNv_txTwcDT-NN0ETOs6m4<5Yq~c%%wfVLsRU}FLFK3_# z2V;m9(x%@_U2dfIwbo$!CqzeJ^|RJrTIGKMA{@eG{nH9AP3H|!3O>v$doa*h{=Mb; z--L_>7tqXfUCmejUw;4l!8k&|pNdS8dKESQm-7Oq{5@^4V!8icN3f9U#|g}+__)o&b|M{belrR8lL4reF^M60bx|$c}hKmop#q-~9f`9!9Mkxw_ zPyl{cA^+EN^Ixa*|4TCn5-nU2#y|eOUjEmgD8T@(Qjs#foawKD^{>9rS;TxJ+utS% z`}z6*rKNGGfU9H#z0#~c0ynN4uLyv?@FB~t6j?ZLepEG#U>cwI5W<8s=?x|(Y+~Md z%6V{$m-wqwdbQ^jVms52|8ppx|=k7?*NF( z?46f0g8;r^@z?tL`qR@BfU^ct5N!cc*irQtEyHR-`d>eP5-OwDy9@I3zd_`TQOXlF zd^eg%>(l8|?Hc9#MN(37Ia6%j{cTmrg(m{_S6(?$yCOqcb0V=4o*AT`q6OfM&(xZO ze`wBAEBL#&?y%%3HIZ$bc}~zbIR2(FS;~Wg@UBdVtl2P=-icT#p6hvAn&(iMSS4>{X;3`v)gS)T;kZ@Nf8tJm`vA^a#`}PJ1F#()y0`;`Lh+$!2_-qCv z>}P=c!|CyA(XR)V%wK}f%N~`VC<)^OLkBT+HKtMM_XewWrX9<(_IF>S311NmjpxS` zhWIJj%n*4AE?3m0LSJ<&m|y2aACk#AAfqej)L6v0m^SeSw-M_a2FW-xwFw*XiSR&6 zEa@ydZosHlmg-Wf1IkS8dUicN;#0mq( z?e>56%<9x~_PcJ#`*{dNV}gSrv=bm>mMIU0he%n;>Hja`?rlgrK9S&MYnHq0L6S!JVVV=_>Rf} zVGN31<~M-8+kd^Kz%}p-VGh)J0M&pK5A!~tELK_MbwJ;)s2-3~sJQsz8+!qPjy5=% zQKwZp!9e?DFpbkgX#cv$s<>e~UnJSuZ69AIs|F-5YNvu&IqBYW${M5^Y(>$yqwwA`00wm6?(=5G@b zR-d8w2oSV7yInjyW={*F*tj@-pC5i01158Bhgb8vN7r+|4L!9EQWJUv0K2!*Z6Cf7 z;2(SO5-awV&-}1doX?KWvlPd^Dy=LZ^u+#a<)*_1;~~@kky1WD$^;JMg)vM?09~8J z(Z4&Bo4cO--e*=G*5_FCDFh&etz)7O@^F+S0w#X1yxRf#C%`JW;R0%5Jo%W`{;O-{ zg#7M6)=W-dWa-5t_(D~-WcSL*!O^3P$lbgy9-Jn`RrT2&IDEVKyU4oQAc6qnx&v@} z+yNHpE+FITxN~uRm5s=(KOJdWTf}8ox&C`_*zTX-Uu8?Le55C%Y>Arb!#|}f8bV#) zT=Cfv%c*>MwTe+tVPtecHj2>9$#)oc_=vjFhdgW7WZU2R=VCmhEk1&&#*mjeLFJJh zNIxRsBT)`+C737%U=0iF7`4dmSrR_4%aUxaeXa`=Nj38h|R!EAWZbKU<`MN z4Of*0aA}jTiaLJ{s~FMihn5qqeev%vzm(rTU}5prGLxf0Gv>K!JF8S9%` z$Y4^Bx^Yx6?fg{p`Y+y*HGDwC?NDYtg}xl z;cfHfYP^Z86bFk#S?Or2ukvX{<+lw@ZlxxAVXsg5_K#cla~<=0(giV>8Dy;s8h2Cm z4>tfeHCM@*d&qsPAp(pc$g6{CY}+kAESV6TlH71YPgcNQtC1% ziE5>tzH{^1Z0u&Gx3*6wXpBMz_e0Pzvhuc<#A$2lPRJMkOJaZnK$~U&vr`l+DDNRc z1OrAxD$XX8H#?F)prI=QTrN+}>RVe;?9H#GDYc{QmdVe7(7!bDfgZ=O`Y2{8r&_PI zBfHjJJaO(0lwVa|gbbUUh>h*bk$8qjPWHmy;pIvmEoByE)n0yw)N0&T|D0r)pi*<3 zjLi@=Q)elFPPoAuqM=i!?##U&XLLHf4g_e0~)wCtA^ikI9J|d;V3SI%(iQ&c@hNqs3FCgxv`%6UoWG6|{t8(RX z+yGY99FY>KgEYQN>FSRjy*&56{iu8ngc{JKkB!HV9g-t)9?b+Z~zcdj8Uh95~peH z`2=`dSNU&-E*ce_Ry_~5@e?Q9KY4b1#A&Q)I9e#GiOj?}JOxL*ct#+{FU~>JJI5*$ zL*8lRrVGuznI7I33DrtA<3t*D zq;@XzE%h|SFX32{8~zjE&T`}t^%>2?FMqv830_{KracXi9RmPwlNCID8%l;CEP5UThh8|ca-)ePS>t28dK z@V9tNr!V#^RLZs*9X3M!Hx>iOE2>zH0+|@|r;KhBUjVlmWLbd7U#;b8L0_m3%C3yR zer5~s>>sHd&;$Z*UxK8?8d6R)A(LD!3BNjP|=Vkmv9e2iooU5}O_HZ*JY!2I4PcoMmz zz1%&p^`I$>m~w3zS=v}OfW5F4sdV{mix<~qr(i|Aw;!?ySBNU z3Wf5-zO?5?G$^P+LPo!n=#kMLevK>WehNgX{UTmJ3tg&;m1L5dXkIl_uz8zHJ5TpV z3z_z}3w%2kn(&!e@)bZVz<%?by)O!^BEQG2oH|POOY*KGcgsSiB`(lCMkKjS2MO>W zfyBF@ZXe)rT5=3H(b1LIaEv1q>lPZO1Qndz8Jju?ZiU|wG{%#$q{$^0^-g0xR!lKM zE{6~>b0~U*LF=>M2Yl9!k5nQSmzk*?lu0hYOf53GQ%eFR={d?A$~7CFT+ZM$4Oj! za`vsR4(1p0(uP~tZ&G@3!DI9vT5yOo8^#vjd=(b7re7chL+TS4a+3X3^VBv2$>x1J zoH_i&uK0=B;M-SYANsqoR?!W$G2d!(S{%f|*`CA5Q^9Fp8lsr7=xTLbK4UJ9sD``D znlu?BMovYT@MJ+dK$+8UldVWO0#hdR3W=F3pxbEr)AyA>rNe|&)JYY%xZpNnQG`>g z95AO(Gvr3EQq7A>Az5+3h;3COq2vb>#6dM3oB(l|&%oFfNPa%l?%u-KT-@-6&ZJB3 z$EcQGymMS-n!_hCa;ZE~4b(%;VqJJ~(W>B;y6RZLHKFx^-8p;tD=5we0! z+p$82r0h_HayB7d>9{>{t}ekGv~*C~$wjoI14Swyf7K7qU^Illhjh8V--n~|z)KF^ z1#n2ENz~a)X6a?SqEI2CL}sL%wiD1Nh)PIno3zvT%MgBGYQ}y3k}I)SjnzM#BTi|r zO`uMvqm#1u&&@=DA=#9i%m}Q$wJ@Pkn7ApjdrMR({!iZ;*a^!@9yE4DyKY6^rUYM6 zX1vU>;lL)k792Haa2xh5%z9+0Ad&496@?UvNSYi9$n>paoR@*2q7i@R;mGTz`(1T> zrbr?1D}H|A!8}I|V{Vjfp11Jy!#gQbQHJ~=+~|Jf>U9J&8cvJYXmw=~P3e#XZ#K*? zF9>!r`8m{_`|)=a4mk{}yDvc?CC~eQPo>4sO3crC}B+msxIf!J7N*h?ymOagLv2Xz>0vpqi;BpI#!#_8H0 zfE9gp9OtFgAY{*_rZtVo$amXBsP7Ka0S~L+z1bA!0CujR`k43$cwj$_+;XKC*v%E@ ziM;fBFL8+JAE6(2N<|T)*d+_Z z>wnIDmL({@Le3;|88Or4K^3>xmgP_VMq17C&*TMr2W7MnCDbe;3_Z|9CP(4HC)h7r zqvNXH;q~G0Rf)>IjID&>9w#Fh+uO&5nw)pO{mP(T{Q*B*b$;HoqjR}x`os6OINGjz&Dz+vS2Q;( z_OG*WK+nwD3Q=#0Vz6p>MWNJL7eYN=cwQU`&AM1tDNGY8QEpJ2bc}xYKTD5zKm(#n zsb-aMefG1#k)|o7jf3Y&FA-Wj#M+5y^7-BT&SckhVX9HzWDHkO31G>)uxKr-=CL$4 zSIEV_@mwR5ESWx#2H#gQLyvurbPaq1Lz|s$f}=y_+4mIaz>(*HY#rQCLu+q9hFTx!edM2mNA*x8K`Ra zyeTb}8RItTdC4TDlRiyFVf$|O`vWz6PFJJZmne@KO3mBWiR?fb9eul3|J<&r+ru1r zMYJHi_kAk|BVerc+xar3Krg(uHNE4j`;ey7<|Dg8s26tGR^`^QGM~_ zZ%A9SSLsSyd0QdRW`kSYjFhr`8_E=(kVG@iojiN5XHVeOvAW7!{AlWS5-BGAN03U_VI~ zJgo{cG7=VcgFWqc_gwmgX^Mbx21C&^#b5UvXf1~CE#I$>KsD4RLf_}^dAK{RoBf>; zYfOMBefZ6=T46bwEXrOLGOq!6_6!cyxJB&hI1b~aw^U_FA(Ra14rYU{_LJU^(@&m7 zNfWPvXasE`*;*=Ck9wGVm@r9m3$!w@!dJ05=OZd@^LUFB09fzM3Sl;+huK04!1d5l z{$#3yQLusyHl!ur_Me9(JA;aA)6=c~Ld1ibK3P6DAD>VBTb?Tn6&mHPm0v#g^@+Pv zXpwxWcSparMm7oIYowyN;=ei5fWrvbk^h};73C%Y3dB9q;aHzvmK^V{=Ye{VsI+0O zTk3L{mWVm=>v=LewX8}S)`mY*1}SEy`$xcu^^soSlZBaeM+WXsYj|Br29+TQV!F3) zMMMP92R#)W$!mNu&28wB3zHr_Kp7gr_cs}iY-A_BnpyYQ!z&428X#R6W9kj-aW6o~0b|vc*JMbGoIOlDOE$x_;>>t2~$HGSuoQ zkmEXZcXTAL8^$XK_{C}tgtx&G4_f({)y#;<+o}eH_F5QD<23JN={nF21nh8$j6WHA zgKRs{y+t}$(bD5Nu3P!0cw7VFIQ%Xw<;U6iTrzf=?an?{uJ}vBiy9{Ou?>WR7s4r` zIHHw-T|RVyJ6_Si?KZ=?D;(Y_sG@u`nAXfTEcrYP^O158& zf!$w$ryfc_$R|1~`5&1au3<%H#+gxPUW5Z!%E)#k8V05;U$=+ErCMpEa=jwMhKYQW zlLlUM>VV>kC|erYaXgubez>6q!}1G?W4DO7LBUTh`kP*eLXt&jRW+5TFvT3p2WgHU zfL*_?Ghl^3rVUTR&?75GOb;_wE!~NXcj!E!bGPV8(@0oM(<5C-nc6N9DyPKR_)MN* z73%XO4E98*eA&)gYO!|^26#fa@K|)^cH^OKnXnQ;Mlv zxtU+@7tDmne-8I;%S5fuX+T-y`)b5C$81Xy8vh0qYJ{^&<%gQ@J}lvVihnKHv0j$! za*YkuE?{V3c|B6n>-RF3DD$$PIGKUG=bG>`{<~YVKn&OrcT&%vk=R>3;`m2&(h$L^ zccrj$JF^Awl>WD-4_hqh7VQ_+x1b_9Da2~|2w4l9v49? zjam#xQoEJMd!DtG`KC9DgTKr4XHf*EB&Oyq<4Z_Aa=3|A{Cwe9Dc%mNqki@m9||<< z@cMKfr&O#k@YZk7Ni3Gk(*8bvv$%J0jWQTEB3J|Btb#EsZZeDHH4M71{wQqBualF;|0;Sc#p#vpjbmKiFrladFxy)L-b&6s4E|G)&K zGa|^~iWDr+2&IHw#QL>+jG&IVK&+MAs;I{k*!uQ%-<<4sI>oj5^~s^1ag0ml$8X{Y z^Kjl;{+ukAh>{b=-crKzx>6dY-iqS!uh;E{dx7O+#8ISi9ke+6p(lt)XNzuhS-WEk zmrNBIdd+*ThodTnLgaJskXLTub%yr5=uKLiQON}38N%Un6US;> za4~CZpqb*cgXKHs%i#H(9s53V*m!)jJNQE!3QS~@7{U|vtvH``QA-pF{Pv9mUo z#{CYPQg_FahPlxdDVnj?fqSoFy=)ACa_SYanan3QHY)ubt8go$xSMLK!^3O-Xd;!Q2H0S_m z#-_iXRvG>xl#xV?dq8;8c?179_i{|@4zK#(3#xqCexpUMm+q>d@L$;wPCSN(WLY{b z2S-KGF?TkQli3)T(A^9`0+OPR6bt(?11GMp43I*H9qX;NT%^L zUq}4|uBL@E4^H{P8kAkvW&N$#N77wJOpep7%j za^iEp^gJ*0k6RWYxYa{69d}Iww;#4Qh3a&%dMbA5^5i@L0~Z(qWfIXrd)ZYHXRpv< zKEUNJ)6&faQupA&LI|9-cTy#Lf2PmDU=!caqNS#}22n~z$aU}*8*VcTe+o}QLGdB$ zBSWg7nW9$tjdM#D>?#?}Tdq+qX{F`AIA8URw7SKvW4ih}IR}o#RN3Z(31V2_UgT6_ zL0I>Y1HpGF8nT})8)*kkZ6=H2lpK1WhHtTEgDLRY5T63u5(4GH$Z{K~2`ID^(tQ5O zWZF+eteHc5iHP2taQJv$zhdi(1NE>|L^u){_P3#UY|qVEE?n~EP2c@fD51stGOMXR zE4grigBF&R5Sr$Fc;;kQESH2IeisCnR-xx2YJ!W)J}%@i-l3lzL@>TAZ8L##N1@v5 zE*WIa;WU)2r%637YMRe#!9teuQOb}BDM19Ltf{iEuynl$!u`fDU3Gv;y>Whgw7q&o zE7z4L*!w=NUn1qKFPIPdPKvQetFh9oJnBQJT=b%RxxQWkV#!;t(eZB>%Y~72?+Mn} zn}nHs32|X{1PQhLiwBAl$1s>p3o45kj;0c*2w|cT9~3-vG%Gl&?DT(j1r(7(xGZmB zIt%6LNZ3?oLL?2Va@lXC^sg482o@y?Gu1|vIjycq+Fg+N$;zjM`Wq;=`q`zu2VU@t zWaPs#!S+%9p=huFI80+uS^9bp#Ys|%hyo%+)f6f6w;VIzL&tAEo&h3P7j& zMa$CEmo>IX2|6QBmiZjX+_OStFP&(8NroprgTxRVMCx*=8FscE-2L!)>WybQ(X^{p zZ&7tG^GgikT0Az}GKNzrpOQZoa^;eNLsaOwq&}iQjX`J;S3z-Hyrv>bCta&uN=SZ! zRjE()gBD{5!ZyIvrE3eVd)N%#t3^zeUEBB_jnZXkPdXCv9y>Msdmq$jpuS-jbL})n zr?0E)nxiE;wQxQM-|_@su~yYe zrf`c42GxokmcMD?v}xv;a;aT566o>;F~Jm+mKiRq3=64<<=5rQY90*K9IY5d0)(rY zSXns&>aWTLR}S|rtaK@n2?fGrDT-@w zKN#&}^f)0^_V(B|q``!+QEB8yeEfvG*0)Q?pH`qzZiUoPfj<^T=;GA|qVo{See%3I z*JD(1MtpwlwGVBgtGauNFZ5MW`5jC@3K&aDst}|q7J)=<0*||9sR~MV!MA*7I?R-# zo13Qv2U37pJ``QE3LW3kT2_qH@C5Sv%i69>aj4id4#ty-qS@8E z42=Blnu|SeT+lR1G*-B-o*0Q8%9VbXsLNET(A)al6~Y9?pNH)nT|Qh`{`ovAB-f?Z zEblg!b483+XoG}Ij3&_?Gpm7ly3t3)kkzavSjivS7f~hyk`nu`kBJzFH>?${EF)N2 z41|P;lPNZJTMwh9Zd#eog~c-BMtKmzRYAxd&=B={VUQGy4drrhmIsB(_hdMAhKN>{tFQ|Y zR?XOGFV?B3@lbKFA)aM@>7b;6fDKRt|L4@iKp#^5QnzQ$u&4eB_KCMy?cy z__sz3?*UO!$o7NUmNF~;r)mGYjZydlW)fEW*BUOP{{27w*Y{{4n2+4i?Fto$|2XFV z{c+C$rV7`{w0UhV&@%siR>1cm%mAY0lnGVxSQ-1&BiBRgVAj z0KhRwfFF_|;r?~xmw)EdKx@e?sj3yaDz)HZPlT&#yBRI7e|Gf+6P5qRMfN~2IILGs zzoT3^Gm*xspsbWjaCVOpFe3D$hS~0XSKP2XE8T#Ph-OA_%(sY#rKR)upT7Cm$p%Ec z>G=Z|5E9|&!;X-0b8}NxR;EkhBx%}$giBGKy9=iZF~~|ztJpR5t7IcTp-W(*ilV0c zFBe6T=kI}$O-`AiXtz`sP@6=rYzKij%-~UMbj40e&_$Wk^y8?NYY65HZTH|5CP0h~ zfCHidT`;Los~RE6pX&HuEP(&&q5tm5Xk3^*v!3fADf;+;qWXGF?3`LDP;`o_7BAYK z*{tbK3o#^km~spg@oC?AWO_rTi~@%0KR)yHCPR0bJl5{d#@gE2#>VzOIzCqq#P4Em zF$r2du+OqE@~4x9vi*8-;W^_cPa?&+wXpxAwV*Kxet@!>3o0w4GVYB+mvdU)j){)W za{ys*Q&UP>YD>|p$q0Pnv_T{!d`(yZiJ(8-qXq8J3auAneZF*JYb#F+X=EapxerAQIm0A+G=QZe2eH98gXMre;~8E0Ar zK2|BB#~*RY*nGNsbh^_K#htF{hyQ@EnbAX<>Z|{`i33#WOuk+V>zf56K_${pC<>Zq zi7$_g2|LY14uZY!#W5HLa`#`UG+DBZa#e(8!7$Q?e>Z`WvaL%DJh2I0s1-kO>#~an zh6sbk%b99}T6~;}c3ek06NPSDGPCHY|E-re0ztp7M8BpAn`%9oL^uMLU(Q=H(7q)F zJJlwQIWow0e7c`&XbqKSO?tdR*ZA z{j=rE*5OFR84$oQkM40sE8Aj#U#q{;R;5Q;ocvJ zLg3l|y$QfD!juhKg$+^rV^f5)R!dI4v~jEG!e>2zWNkPx7zm&V0#NJ`M?~#CWb)*m z2L-Tb{7{;Z6YWh5@;PRk*d-uBz5_B%g=E)*gL^5F z1NzFg-%~J4tM6+WZEXGVuDFS0%L4KECgBH@3BgCV72z>uDYKe zy7>Un&CY02t7A*GH6+BzVtXhCAfXPoA__kCYn1H_X$;or%DMsaAOrW!5I{LX8XJ1y zU9nWF@$Zk2r|Uq9h1%z<2|spDuief>Ek3V1euwc?oZDE3j6m9MIR`R?^cfL z>#I>J=83MwS(;3;$K5cL3TfNNJ$et4_m;X$nzKF_x2(S(NknJ>*P$H{6`9PIymgj} zlqI2UX6YMEV_KR!2$Uv&s+?83C_dbUFi6W>QE|M1IoJ71#q(DT;?3~JJ;~H=~D~nvsk$L^DX` z;=ot;CLkWctwN)B!q;Y-tCA9;5De3+%7WU{D+g4c3y0w>aX-*a1$xDFm%u*aDM}Ye zu*1R@70C-16+3?{rPi2m(Uz}r_*3!ka~6z%Op2auw$nR6OdWyfFhppz3ZPQGP}rFa@ZGqg zgXrEHuPMjCJei|I_4bwXDN&0U#+BQ)3+3Y5W6Eo`9l0g4|9*0hXzEJw1?m%n2wKfzS;H zd^% zO8@Ql^9Q5EiiO0b0Sw~C?wfV52LH^`gH!K)p%&PK`m=y+d2eW88XyF396(%lKaMfi z(2#9*KOJ?u>yPdO6@DMV!3TdP1FWNkYA0%0VgaJPiHsm9M~u0ZvpQrweSJs$rJ~PC z96hWxItVS=>v=YZ)0thy`k}Vj9X6~gnD-6HdFQOdgFap zR@U(>a(>EfUhLrYZ-KFZ`NMgNwo&g+E|(=z;+(PHAbm;7pKkTy0C|y-41;&WG`s$uf*?SJjf6bg=X?<1Ba->QNca;3 zKHjXk?d!T7&XqUr77(@j?{V)8lKmueU3HWtOO)#xst58^sQbNS*T0;*9>2UsfXH(B zKU{GK*}IH6`wk206#Wg{DZJ^Jw;EFYU@B+#7z zA~`9eO~t`a^iwdLM1}DW)OMJK=q=@sFJW~Z?wrJOh4E#mbdX%+y}q@0U5sWigV3g8 z0q%6no44L11BpIBjM6TSDUtPJjp1ht#0GPb5df~Q-$znrHGz_=oZW;j@&`i{&2FIO z{Yw<~;q)1hP>0Cg4=9H5I&c9cxF9usPc#@D&dHvY$(*ke_Rn!a4o&8EjG4^l9!{Gb zuy49vj9ERg&79)VK0R2-NtWf&v7eKdvsFwa5BA;*$Uv|+Ql5z%dx-^mqesFGBg}z4 zC&p~lajq1LU_NkWZDLH~b2*(XATu*A<`xMVQC$oJYs5kEx~f`sEbrHn{-C)t!DBNB zM{(sck`Yc0M#M<*hlSav4dsl5??d3YIA^H~gG)R*rcQnfTPn`LwIr=y+atQcDx#MXPjq1+W?|Y?JBkE=Z;x|jK0ZlD>)^p2t zY=5X#%3{{~CEZ~}cRnRr$V)sOKM{*kz|XH)LUBRgU;|mwF?m*%GuE0{?4s2D%}aA! z3#ocjC_X1N53((#xu{q*s6p zIa@nufaf>X)T!Ge{4f8jxsK)?p4>2x8@vvsaa;5EoZUOd{0I3#?)$?RrYvAHysA6n zrwe==P;Q|vL$8ysl{Wp?31OGt;7MjV3mN|G0J2?3okEc^W*HH*BE;D=p!<5++TMGc z*pY3EuBTG%p7i`s+U&c`s>yXIvEhYanu(g$JM(=d!-JjV6|IY@|TD z!1I$JJFPc#JO>%G-Oq8j0RKdb;E!wbS&|oO=c?l{DUkA&ol9;J_) z10QKFzW?H70{9HrCo+oy9T zj|Vq_{JJmuT-N(SJ+E;G!Yh&Ml0Z4M`P9AYw?}AInCfkjO~sXIWwRCHsBEHsrW8wW z3X|utIoz(8+mzby{~s~Ev*amw}f+b>a`hi4+Z}} zY`tYzmEHC|EZvPX(%p@8N{4{7uxXI)?w0Ou6p#k#?nXjVV$;&y_1?Va_kSKe*SRh} z>`&aa)|zvUG3J=~h=bYYLXx`ij7nfZ;maj{UQLFsk0D>w;ep35Y&axqlp^i<%xFV} zW7elZ5BEuUI_MsIjZX#PJdsokFv7R*Dybx=-2S3CMLZ7Dd`F$IH>@ z=q{J2O32nDp6!o&K8i^|8Ahgkczr{ysrc?Q;&5TbS_PnqeM)M1b4&dZ*SzywwixEU z9yGsQa@V{Tk18VakE5Sp!+VlXC*7>{h{eu}Wu1ld$AKd8tsdU5|H(&zAN~eZVBw1M zsxeizoI-7oGgQbcmXk07YAk%M(NR8d8v)w$^^zl+`@+L@gg|nwc|h4G0mbt|ViZYx zzF3m1YZoWcRMu)VffdKkoqAIuxv@K+-W0iWguXE*X9GZwOBJ~$cw}LSQ6n#iP55~r z=!Ku`w0ANE2ES@Vc;TE$F0KMqc0n3CR!02+gaO7(*j3}zGu9+{I_Unm3Aj)G^7Pg^ z8&!$0;2ts0{OWx7N{X~u+TZAsRa=e5E7ZV3(1iIWvy*8q5uHNXHPom^!m*uu zE4wJ7FCpGQ+9k4juTz+Je}-*-0)`(2<-lk_9wB5_#`+q#yT1?Ovn;$qBsX zCS>U(ow2x0u5Hg3SK;*Nx!n@ukaL!2jTgBdpAAQEZbkku3weyeS-k<`Mj;t zvVhn*cQo1KfbT=-;ThmM1x&U+1C3H2-5<0m@e;gy@`FOnWs+Hy9(ZG=k#bHwn$1PH zMXA*=XNyPi^qa5M@EDnk}E;(Vu07?#7O z(w)eC&DNDDM4=Tcr!{jY0X~eleifoxo|MoE*5b%7^Xm#)=^9QTtg(5Yf1Pb`x6)?Q z94qT02R%O?8U_{-atyVE0qMJU_)BnMZ>fF{e3X^48kM0cQtqSS8ciXPqcON<|0FFC z2rE#-O$^x(OC|;7G1$~uc3K2>&3#*efTOzPJomBD?FDFXP$92BSL81U!eHljy22zq zV8Gen9y2fkPovhnRVKAUHi&ND>lE)oP5JKNwM6$fNC>)tKk1Ly`GlICR*iIE|5NPs z)9UlRuN#Eh1QiqCkDf>fd{l?zQ}r0qRX~_Oa+L~RcmldU9#VX7ag()AkVh$aW+Bc} z2?aQSh~MtMP9YC93ysn1M)k%G457EYK!3270m2`1;7s%{P$g%@gIr=c2r)dqjrazB z7l@3*-_PAb6U!aX^Dr*zhlHh?Mqo&S4sH|VYbsCVNzy74)n6JP)p`GY6}*CtnnHlr zz^!etatutL4brv`6rYb8zWP~MZc@W(u$cy*6B(=ObQtNyE^7BVv-zd>&2C}Qtue}h zM1rFW>1Ql%f|5-NWh7`9T63uae>7e7r3UjsCqkdil;xbLbKdJ0Iqv#gXO7(g+j0-h zcMmxu{o0?EV3fzeV~5wONp zEGJqZ0_1BVx!sh4JZ$`#h)z-jJAJTvz@+8MFuV4+z`4AwMI-<1hyrgZb)=ZWGIY_T4_gkPf=LwSlGtSzWM!-ppqQ;rzAW4GZ2IsWq+A zG(P9Oj;u3V>3ED3Zw7szEfbuWYAiGh;(1Z1ozgzk#_c6Rd$tLSY{esQX(6D&M=ph# z>Y2%`>68s26KM&(Nh5y1f0J`NrOUl5DqhP@j*1I)cnEQ5>=Y;osA~dsDB(V)wxqCo zJRIe=nNQ{eBS53RVCe(nS?9%5w=jG4!C(*qkyoq~Y~7^vNs0JhSrDv*-_8)k5XGn} zgB+gQr@9?SL?ZPc_iy7X69lqD9mUYx6t}YsRgJL51AsnjeV}PoK>9p&%#rskvAb0} zU^fqp&19KJlJqQ-yam80b1M(HS$Lb9_ESJS(nIyt44iVx_;(<=-isCH$n}6`jc2P0_jWMlXs#|j_W-qtFcNJj2%REP+Pkj> z_4dFNd|B2$MZ-Ujn)fS=y_%lx_7OFpti0C@678DC}c zlAsKILob{rc-u)T5xN}ymC;)$cdT4vBXEL;KqaLOsZ#(Ksa@y2oIKnvDax6EB{_!H!`@vpa=V2q#Hatsz>$O@lj7qP6?v>=HxTRrW#*dh*{&D^hv2>3Pmga57SIcf?@@-=TR15O4x(Ojqyb3E> zTiAv!NLQEl8}GIL+IYk0;PCi?j{%PE(%X;tXuqD$&C){Li_9ezw$Q#%>$l5LvAg%s zJ}1#4OqHH*V`BBtu?UCcBfg$g#*Uzu1W7}?b^Wjo%YYAkzSb({)Qk?M%jDRl$ODN& zxU%&&`o8CON5tEtl^As;=N-$e@mO5<=pFrv5W1S>y_KNxsQKjH-@#%LC`yxL&S4hh z{RNi@Ix#E;jrjr}~>7AL`zGy($+y{F2$ZAQJDo?ylLxqj#iJ z)b%1Ffhu;iJTMoOjoNP7(}s#mpXJbR`lR87US?NrdOl=ejj@sBlkNISoB+a7QD=0wGe27LkXrM*>gIdHcb;?*#=j%TPQ#IHkj`~M zrPFfY5kSUZ@WZH|A~40@C*qTMcHH@Hj-)VwW(!7SAxoyeEUMa# z-hG+x0<};Snwr4hf5qc7!Kmr47FETf*SdmMk7pC_3v!^ch_KJFRdzqw1!MDJEG_us zAl|d1*x>ohZ6)1*qqqH_S2X@7wUij2Pe*Q!; zx(_}v;**v2e`7<~kc`p&kY<5zQFRUku&s^0F~uxNpk$=@=NgemxbyDx?I^?2N%a7x zXXWsboc=1Xx6(1=4|EgfA7`*T*Cul6aU;ec++=& z=U}AWW|>c@`p4KDDE?_jB+8M*L$Bi~v9dNX63Yd~a!bfU8W9##XR*s6Tqc29AzNUf z-qum|m$j8qQVH}?FE;$s z|Kg|Tykp@YRf(hmf5omao_GK7C)n{}8DG3+pu6Xj8`|WuFE1r{@Pgo*<{7mKq3G0>T>$`Utq$2=zNeo#&0vK{#1fe z*gsjwe@J82egxWlgGhZ+6s7;QR>A@GMx9d~r~3c6F5U+8ra9gQu5=I9ADjLEHom_$ zpjZ%R`p6XZ;eY(!eqKNp(0>Cnb@IPnd@}stq_UiboY7yk{C}?D&!$Mq-9J#Y7B0es zIcQqTePG9{8?iB$`rpqEns~W8PChPde{$%|h`hlj<-zeQAJdvOX>dp4m3DbE*szF?|sJx+CBNmoj9x9PqrQ5NC<^z>*JR?hd;6^Wj1HSh0YIz%wN0^BRR8 z1H{&laZO7tf1I>3H<}ozaT|4iu@zITIZiX`Ui%U<5BoQAsEYr#6(wQs2elDxR8x$j zkGz=0m6tut_$$ze>Mk7XmflCjrKKbM!I3Rt!9|&{|5ZWhV#2o+t=Yd7RFH*!m+JQ@ zx?tw&3f7k{nvRN!()?yxc80iw5`MjwDLId-@k2wS!iS7dW=pSopvM200_(GJcih1Q z5sG&>Ejulun)(mh_m8`1vPP2(hV5jEYqDW|hLh%;Z(`uie;9l11n9p}+xbNKS2e=* z4iLoIvcr1Kcb80Ntb<`gG5eBI8Q`6LX}l`{U$}gWa+uWFMDrVl#7z+GmDw z8jjvc5icl>gvzeZpLGS~Rz@E!vs`8M|5_BFCG?4@aC=8OuDD4W&^E0LwO+_j0u9z6 zh@~xJF|&YGSNi-=xpI9H6iAlVUt(_O0nx1xIwz2* z!OJhSqxbcS%TZ*rT^Jt1xlk2R&n>|jL3Bo?8;T}pm*h^u#On(FoKsEopSgcm64dN~ zvzz>8X=Rf}!Yf!BI069H=dhTfY(?HxOYg(@d2?J{ZWTY<<~v(ixeeytQGg%yB_}xH zVr92lx3q1!57Dv75^}s6O{>iyB+xo~uc1*=BL7(q_I4fV2bE_tE{op771UK!p9e8Y zBjM;Is~!cx!M7&Mf#9BziRtOUoRCIXb(KcBUE?z!gqgPXDeAvIn^CCW^`654vMdFL zzcvLZ4k@y^pde5)BqRhDKwAdE$m46Ns?=HdPL0rt0dl^sBRw&X-Z9>&^PZJ$goGLH z9JW}e)*C84{aRfm(%iK!mwHOVmz!e^E3*p=?my$;RPi_KBB4iUzhVA-)#)>!8ZKWF zuJ$DxgFw&=CAlPz{?iwUzmAMgaW99E+YIM6o2;Mfq6GB!@84P5%_E86b%@&Q4pO}H zT0PFyHK|%Oz%XFzri2}TXs z2DU4gOoxO#U-({q~9M{>N7t%euj#vW|=nfTab)~go zy-=W*ud0=WvEPpaYw(Z|yXgDZdjq5~2<1|7j9 zMN*}ZN=dYIR(hXTx+R*N>Ug6n-;?P7UYQRVv`DtVy?3$t#IP0CB-eyi` zw=PYx38UxBGMKau%l4a;bZrc{q0Odv0%+99Y{IGWjb# zp|ZW+t4pzkntiQ)X1}19+KTRo$7~K+ZGpj~h+{g122-w`|Ful8VS?GH$7$aVJRv+L zmqdUw7L@D+h@VShul|Iw@u*B>8%a15g8gTPExFQE`+5urABppoIn3T9h_&Qe2WDTn z8>1&$fE8}jlGV^naJE9{*H1j%7J)|}efqxycAdP`fGUr-y)k_;46~EAkB>OkLYuc; zk4NOF_r-7OWnz_*@FVBd9x$Kw2$&gZonc*nI%ZXCw0i-xtK0%C%ELkJ55)}b!$VtN z{%*X@-zRlV?KPszgVNMk(f#{9lg+P7XZy$vT+Bx$Ijs~wT1=wgtG_emIJG;$r$v@x zkK-*RcUU~&n4U~KkZB0zSg3fTi!|BX+-dS2H{z}Wan94A3wB7i8Eg4Phv0p^JdlXX zr2QQ*>te%gh4R75q~pa6BQj_QDCT28s695(}WTU6UEL#N4|AU|yyoH)vHUY|*jW4FnY!bjyd;f@I`4=Y`e&=I!Jq zAiwB&DoWs_*TN&GznWzq0J2IU+m%)^q}iXz->&($wpu0ceJ@M(AGcV1n}C#29erNZ zCg4SF07v4*dM3dJ8ao>jN`K*fY&ssVuC83Xh&au9B3>jK8v5Q`^&WaLO_ga@LKXOUPc9PWYcS8yT5s{JN*07kz8IMIzF z#Se0130}=_d@HT!ZVTY(OQuwg5#9or4)4RdxiYdG%0AwQlOC3)O-$nxQB7(^=o41EG}}jYoZ%|Meh~uE2(6+b9Zc-BW zW$?AYaqGGCzzrZ;Ia$g6$Q}58iz$~>!Ki{-99f*N%OOUdFHzCt7r*BszXxA)eAY7E zlk;VvCuUlO@i+doVan;T%j$Bo8DG#TTkTgxy%tjiSI8b=cssCkX!np)a%H$$nD26l z)#p0opG8yD%1;R*P(%#H{CmX(HjQf`fLLn{5GB!xqR8i*0exF1T>y3oNSdm7F}|J; zGgQ7HFD$Jm-N4%Q-la-e0rnRuw04cfga$WBID7VUnBziw$2GBM!rNm>65r#ePbLMi7wlwA-bz_iV8GdmWgh@BUqV z0BTxoKDHy~5^7Fa=&)pxW_KBk1xuU z2W(!~OsuXtdR4qTmb^%Z|H`-76m!KKL6JYida(Q_Y5c6;N}R`UYmPT8IUqqiw1z%| zLxsYaqEh^uPN&}Jc-&p=rcR5Ra29WR3+W-OH2+9tgNh)QQM3lm2S6Q0O7^NXRjNN- zl~$l8O`e;WmvL$+Tf$7|oA<|jYv=2`*IE0?4VCWR8^d$lWggZW-@Y7LCKq`&XY2=D zqM=Mq*h>-Dj2+B64cu9MQl-p<55+tX#6T>%G1fqWB%11K4t*GnYuzns$gk&9r7(sP zhLpkAyy&_@53zrGxRpow@WN9gi5K_6ob2mArxPfnvrSG;il!k)H&T-JtRornY2NsW z?fHxM4xA2<#H2vT#^#+B0EYotD3KTuTsBPmqQCHZw&zio>Ul7Wmp?{8bYQndj-d6` z!2)oCGkJbO<<#wK-rpB}{;N>(50@0dK*8Ggu&nQqdL`$EzD>ol=I%Z|90p7a>lA=# zb$%Y!Xct2f-x?E`#Ow9t;W$>2g4ke>9IJi~oT9LWl^R_@kk#c2?Qr zqmOhtz$W{%!i?OYV|N?m6HbWuGa~aMncoAfe73is9~47r5Hh=Q7o{cC3SvH>gi8a) z8A=}wBEri>g~LJ;X}XKz4FXiGREL$@5br5P>&2AZreUY3xXyP#)CTs0(iAxbqRi*b zL_if9JEL(UbKb2PkN8U#kRJabf&Y~Cl6CsPa6MIvz2ZnU$}J${Awz()BRLtm_d3uU z{g@1ey|?yS&~~x9;%)G0Bw9c#tQ3(w^jE=mTuGYsnUYW;Y}?mD_XkF47)T$Q2ng+{ zv%-u$RyuBiESN+YMH-qA9mLp{U`muJW}4D4YW;Q~in{r)R@Jwh>U=*uZI^LrLKs$r6mIy8g|u##h_Luu5$N+e<^u# z)a0kW&#!3#U0dx_mwF0kQAjWPvD*OugX&}QW77o#en`Xr(p4xDb{-`7D-+#*P_8U+|e)bKL6@kia@F zJI@(#lX#tUZMuTF+A9ZG-~?gTFue-N8T*SPT(^^6KS3)389uu)uDPm2&;YS(AuL52l;^zOWsBZ|2*gO*+*7Oez-IqlAHC^v z5ECbuL4mdP*cbf7G0qz(5(4OiGa}|!*fHx}pA=*Cr3>I$MA?(%S(lg_%_5z8N5h0x3v>Wx|4M_^n$`B9(IDWiFtb-V8FOQD*upuskXTu%F`G zs93#+sV3ZX?X_?KC=wv4?}m_i#f}=rMcoBmN|_1xz?v11B&1dn`RL;frA}C#4pK)j zCW7{*#O zx&{%$lihxjh_Yt7H5OQZbaYhBjTNNscEcmjGj=79LzE)a_g>qwQzCy;5@Sq0lx>WD zsSIv2-i7w~&8CcwTB`sXnzXD=T!z@C(CKypFL3!&^#(UgpZ9!}0|=v=px9k`%3+ld z(nHAj+@3s<#lcnGbHaFjFl!Sa5q4R2)=1~%;c^^aVzz=OXv8EZyE^T)44ZKS*}|GO_&qFByAfgEV%0wWA*`akQV!R zellM668Ylx>O7i;QG?nNVnk=kT7^@)^Foi`?l@-6`oIv z6U`q4f?~*%n*IZ6#kmEP3N$7;G89r#n3=6)RhhuUoII`=xBLt4<*UsbXF&y zLPtz!AWKGtBNXS|^8Vye_u(vu%W~EW5Q4s_%@?57fh?0{vDXXbhw$@5I8AmK3mC9| z%sULwQc{zo3~2G!ip_$!hPXG>ZiG9+Q^aV(K#?4B>H79L7zuYhzSB|_x7=tFni%7q zKY!0LMks20kZ^3_bfw0BLF~B#{!Ed{XZd^#kmSlh#}EvwtDkLJfdKsFF@HPYJmL!| zFin!W08eJiepa(EdoUKoLZsPnYZQ%Z4@HcC!zkMTVALfHB75Zn_bW5MwZ$LzX4aFN zNNai4ePMO1B1|3>qxe2`f$TWz&trdaC=^krRDo5 z7~#W9QFJQ%;+0mfz@{ZAIu99*H>=7TSzf>Rd7ClJ?W7Vdo@}ak(RgUEa}OZ^JJ&dz zkP!n4n5iz`4{KEVp7t0}sXnEC__IL>0G?@;KoOx&|My}f0g((*E9(Gwpm(dvDcp1) zGu7|)ST+(Mt7Qmbj{jM!=l4i$2iItzd|RC$)PIBwoXtxpJWHToY}`CN{1AwP^B8Kd zUsyfGp^*?AvO_NSc?uV3$n`q%7@ACtG^FUiSMx8=ruBMPV16H*YCJVdTmKStz>4<*BnJ`ZhbsIztB#WIfhQrsR0Q!8d2S}s{6y(m~`E* zi4;d(2$$bqABqP;3-2WxdePzo?h_BrbNU0=C$e_ADC{9&O0AeLHtteFXBe%o3iEH) zaXZZUJr-+_E?&XaHR9P#Ote@}`C}%_fz>r@jE814^rM8=e-}if5^Q6B04D);si5?G z8FfWM71m(88=%yCc&YJIO%iie{w~+UM5q9qrZ_0xSR!{AdX!X(?p}e&eiK9ZZZd|} z2+s)0XuU>v9gul11J0@NpXLohiCMqJH3YI(u45n(VU=9a0mA)rCLSXMtb36!#Ph!Z zsEk3qj5SLKIZJ`UVIPV;4}2&{2A^jK8a?NV>LaO)nC1D&#l<6^zQpeQNpAmQR_okw ztbFY*x!(i%X=0kCylr#XQr&t!5p^Ie@b^rnj3gwk1bwDL>|tJI^7HnS2}QMZnD3@J z*thW&9{nwgZO5Yv;Tx>3yptg%Z%qDYKpx@xbi2dBGAl7J+S(7G9rh&3L(l4Ex~D*m z6Yq=_O5^|!%z`II&-Ocq6oxb$h07w%@9ak8+-L%IDA6x;2I#c|E}oMv{gL=^Bo3^5 z0T7bp=s@w=b_xbB83ZESI4YCU!DbkWr5>_+ntglzhsgQQ4>b`|VL=@j1xj*Y*9N`X zX6C16*8UF9Q8&1|B!E5 z*=~`lJ?(h_z583BdK4yLZajfJ69Pmw*_s8v|W8Pb7S&6}5|m`FsdMS4f5kwVOH z^Varqnu|Qujw-u>We=5IP0r|nt}>@}BJ{6TwYgOm%X?@{LVJR6M-ImumAbyu&(^=k z$@IAPE)A)UUKZ)4 zPT9|Z75Y=aIm_>Zz20&W!4mR?qQIm1DkGqbI#_~0KjU8)1yv*Xz!AQs)Tq>Y9CvL` z5J(Jt;0vTk5;^(Pgps`s$vlh6pG$x1a5x{yVVeby5;1&_`1dj4Z!aPO zkWXEbKe79vA*?K-5kn32U`G|X3tyT&ygMP_&^!EwqPilFx!@zNNi*l} zYepTHFj})pPsrSUCJ)l?Ehw`sHsT2DLFJDWffB>iO!9j}{|q#2vB6Nk8Js3>Q0yJ{ zVvl=%`0?C3*|}uferx(E_X0p2@`LKlO(hYCc<*mEV)UIRC2h6_fxb8+0bB_-bk+bo z6#G?OuhTv^{NHm^d=sB3-*&RB7sRnhNSrt`3b?E4?AUEwA7de+>iv!b_?#lTJ=ytk*Bt7JTQ-8cc0Z1U-F zvL_T(PUL_WX#jjcvJ5ftAxfOu^`1uM%|ftR&8L7ML~N^In0mey2-wls8_MwjR_MrE zbISSHcv(s)1Mbw(x4c%L+_B1xhrbRy>oz%1SrEe`F90&|aD~*jj?^CLojhH!x^uJ8 zJE-<3i5S#E-E*qnGkL@k-b;wTSO13nN9B{s3ynR=YF|-j$`=V;_3@O&4w@M%@&GYf zfRIa*2xIS(eKU*xTNx&Pzv?_UA%cUQ7M5Zq3j1dEo} zJe3}gb-SwC>3jL7n%wcb2qp;+NIOq)OOww7>M30+NQTT|@tslVg>lGF2DP?(zdwCS zTVl76_4J&3x^HJ{$RwY4N{EG%6WEPGAIYiYCD0rZL4@kYhusr8sY_xhz<->DF>z#r z&d$~S9rW4@<%WL=MB7-yQt;pR-2sH8-?(vrFpdPWi~mf%YR^9r0(z6en(L91Flt(q zK18<=LhJR4^C17uc=pp>DGPVMR)wE0G_DAGsPctAtL9Zvm2Z;+^8=amFgntgghOk~ zWTs`G$=R2o7HkKqY3R4q3q#}$L530T>ndzW9jxgfq^3{4U0B$g_Jie!bYBQp;k1|z z7=!(zC(r_76Y{Z*Xa1xFp7UOuR_>@6z4|I+<2YZ@-l1tVv6b=DfMS8hNRADE2r z0EZl|aVN?O^^8z$NJfA!m$iU*@c3<~zymGO@&f1Lz64`cZ8c4IG5j3X+v+wgF z|JFf($k73BfN;Act^os@&JjDSk)xxd%l)|@>0C&v2^#CB+`mSw?-}_}YpuK?I&{Ae z`Oyc~A$o_72z1{0k7qlnieDs|5ZW}})=TBwNa;wK@qLtOhE7(1wxq@5wxp$H)c!tZ z({ki7;SXoU@2j1DffB?~RU*l36Of78BoXhujQcQ`Lx;HR-m${M@9&Qz-?S?E9tG-f zB!#AdsvQ|Kpr(nsgqaT4Wo-mE`$N>kn9|X2m10XD4fDg?c2g{cZeX2*q)RwN=Epfpi&ISDD_)RzD^40n3l7c{JtZF+> z>Ez!d*6P-42yJFr$o51WMM{=dVbmT060hYUf`MjnFlnB6Q%_E%sx%aEw<*&ft}^Ma zTWINpCfdE+eV_<=Yz}_^2H7GBC_I(qdzaM2`sKc6&q36V`F~yj@Bg^}pXC1J$4j5= z2?%Q8Bgr8~HOxr4I612l$XUL-mwyaTG58*$z&Bvdn<4!r{LDoQOvzx#=IHRPz`~@|9I?j8ylW*|niVf>jh6e;7v={I4tUD@= zr3~b;>g0BG!TIyf2vaDg?9f~%rWv^*yVFI4gemG1T=t`y^T+Ji@4}$LCO$SZqIrdu z?1cfp;K&;g0!zp(1Btux!$>Pl&}%^)d#~ZI>JJ31Ku;&~sY>+aNm*mt)M7$G?O!FI z2n`xW+Y8iUgm4lrJ&!FvK6E6>;n?bz&2C$oP5cl=u`~l1CU*C;O#o{?;~*U_&{Um? zVuxU!rHv6;{`dYndr5P{Lc;B{xJK4!KpAws`E1?zRU8`S+A}jV!7cvfw2Y?)pspQm zS0|(DvY<)Qw?>1;OC@XcR`s=zNN?xlY~I7%;yB=wTeH5twqZsz#GfB0Q*I0{AS>#4 zmQKa6|PhIzXaa_h;e^h2+&&(AV^i3s3)*`CD&a7ebvq}%>pbrz6qAzi6&3Sf6I z@NDisHC}qEmJH?F8Z@&{1W-&jfJifTcXzvp$$Vf{X0g84TAZFEFPfkv5a@=viDZ(UR6ot~y($=8W-W~s@oc%m;i`?*( z7o$w@FV+e2LXR!T>#x|bBc$&s2W+r#ksA{8AbE&T>i4=3%jSzvV|qeR2*YedurMxR z?&b@~G>bq*w4`8PoME)4ubBn@3r#&SRiIdIMF!T8*4oIl!1^>@4_L&(3-9Cz3-~kf z3u5!%49W7ayCb}7>@bAl`2MY`TU%*$#9{Aq55HSXYmx@yhBM%KeGQPaYI^$_wa(mR z1&{h{?(88{(X{ar%{yr7AHfnS#F*nR5#G&45*mima>t(T?!et+b6+74`qd4Ri^73cI9lW zm^v7Y<=2g3NSxY$zGIp%UMh0_S-B_%;p^hF01MtM_w()Ab5B$H`3~^AK%mRF+Q&n1 zb#byXw={z3y0Dl|*U?rPGA^M5cJp#f(--Y>kX>G(Qa%P=+uj#K> z(wy4*8V*RXzY@BS=Z1ZvgfV$weL*I}KEK!vkFfQiG%5@L)(^(`U9sJaceKCt+)VG!p?oXr zB>RVd5jEtCUg#yQh$e$H1>Hk^%Rfysi@HyLl!W6B>5jW8px2M?+nCJGPSJBuqr&_` ziD0K$1j(F9gka4&hYwO_ zH0IKzsU(cbD7;MKfqBfd%;2!qlXH|a^YqNaEG47p`Ff>L zmif}qT}<|nS5l3E3)K$$6kMyr%a?VQzvz*Ly%`N3OublHL5u#kwz4yoDwhbQz{|p` zpdvm`jagVZ!Od>lW^1Fw*u_Zy>*zK{;F|~VAli5S7L}*VvypagefBJlgF`F&u{T+w z+yfsh)m6=HENrZ7P`%K-?{)8FX?31pN-0HqYPLpnbaaXovP^GDwfIB_p|WAm4WZAv z8diFi5XUb?x{~fC=W9W+m)s5ucq;$kiAN;(s;bD>q?s3@4j0wXjFX9g#`wLsbLR@@!Bz``s~lS@-%MS zysG&64r#*_==bQb8%R)DuC7BYg59&B{i1OB@67*9I_c<|?Cu+w)h6X8ch#m% zS|zu{W|C;0Op2bR6g?l4y9*1z4d5XbrFuw`_h*Y^P!sYQPao%4 z2Di0gf}DzU#m8FeWxk{=mix#dt2a~ZMgtlXu&u2L2?z)S6lmGCkgQK`8;|JUGo&HNfHUAgdE5X5%5fPLTSOy`-(cduVEIaH4=`AIFu_(=MNs0wd;KX|WNU6t zMkQ=peO=A6M$r*JIB77^qC)lG55{`*qU>GLH&m!fhxT%8!)!Ahjj^xorQZ6Qd`W~d z8s|+8w89i>7_F(}<(>0H zB9oPh2=c~|M^Ym(1CP|i=$RU_OJMUqZKx=e0MTchnGmBO<~SHxa=-I=FJ;6v=Q_Ei z^#odgpNKhdxN=7`aY?11k-6^Q}WSe9cr}jEUG03sQ_^OOlaPw?S&TKT5&GSk&V3{afQgG1qYLN`y)4KHR`r3LEgCH@7?JStD-aC(3e#I z$TvF4LNe+7T>oLq9HaO__BLMq%JSi~h<#U$Z%i?HM5AnezCFAZS+z*<(EK=TX3pJ^ zY6VjRY#tU1O@3|JJ2$biQtz}owVj+C{L3mqmh!fVZzHxQXY+^8(9!ilRH3eY?%9^p z?vfoQ@RlB7=?}_B(Rzfp_IZE~P&H{y!$00XJWx3zLoR~S6WRB?KDI|bYg%1W9GinL zojasTc;+9u6GcA2-;59qGhFz7d}8^m9z>|z^PC2|gnXdWWOd7)EDgNIwx*^9WS@J% zi}F;w_yV#yi;0io;>(N9`|9Pol8L@&mz9`Tt!D)s20V)c6e-d2Bbg^sz?Xgh%On zBJy@lhhczvaJ*^#`yX9G5Swo|q^U7`J5@;+-XsHoY%`(eGQwoH<5+TZ?toEAE)Ay` zY3f_>NADHjGelwyJ~Dd@48~9%^HIl#A5|QUk4FQbnfv*69eV%7RQD%>vt_0 zgL=-hrO0qCYKg)RaY17Kfl#-ayo)n4GO}THmb0wft!R^)k*`AC7~fezK|VYz6+O2w zt)`66;y|p`T$p> zXBLb4cirOh;?zHcy`XMPK<^*K+$MORd_0;`?K(nz?1?YmFDR4oN?)}E+a!PNEqu{H zQLHp&LJ1|p17;&3?bm7iClmGqicXpz`&ZC8LxmPc-P;Nr->hC`4tY+vUbYz_WzRTA z5o^-EjNbc@b=i_$3kYoa%*QL zx(#2q0lSV=rsy+6nnJ(^Lof#qW>|IThn}gl>2F~IZJGQrn?rVej&P{{;EpSfejS2{ z0T~KRv${cqy8*AUL8yw#e|HYRMFN`%#^_o0;I^?f zlf~$&bx32~yp!G7gg=KU-053wK|kvZ{2nEj+ljN-Hw zFToy3swEEQWN5D+>EGrTMcnz4u1yJYedD{SyWhDsvwusDNt1POB=hwo%fWNw*}ZeWf6N^&D|CfCIlkZ#=49FLpiM7jjM8ndIZm`2C z291w*Hg%eLYS7pOcdA7UG^7jiSG~CU#eR$mE`LOg*`v%U=BtTbFOrK%A!UW-J=cjvtY^z`vzV z*fBpLsr#4)X-f8ER$a5h=P^WqP>X#M2yGJ+gU@yh&_#C+Y!`x`;7}oJ7Z6tw?(=Sf z%|>GM&7`tBMV19!mXQW5guiv)F`;mrdL_av^H_%y!dfn7nTzzV_;Ms0e z8oz2*a@(x%?8G{g$VF4{M>w!e^JAR7UIzKIzYlfm2Nd-g{@0y{Q4bh1cTZWz*J|18LLluMut z1B)*BLLD@pT>c7l$Sc_v?#0b^{-%aU0qrGT8c&AOcd|mB57@BD+R2&X!QTK5d_rNr zhD{MR^1nu9<^!2xM*8-T3?(oW1LF-xUZ=tjTgz*aRTEOFz>Pn(3CJ&<3gXb37LKcf zEQ|fnfXC(;dn#p-$B*rR{_;^e2C#{_t*w5o>Da+Stq!#k`K}RqPwah1KJjf*a0T?U zXzNMYs`?hN-gy#2JOzL-#AC2q8RX|1bGFsAA19L781i-7w6y}rj86w26XvPZw;QCdupgs_^|$>TcxtWp`U%5@3ysxUnLTy1VjNOciQph4eGM zJm3d%P&@1SXw4$Er)*1(v9$L@gE*(?6f* z!<;hAziAV?|F;)RjvlYH02)`k1FdV@uxgCj&12>fSF=t(mN2Nq++bPY6BhO6kHp;O(A;+FDKwXvsU%B=q!?h0rS$EW?K z?5IeUexkH}rV?s<0A6-1KDoFUYa&4~_AMR(@(r%Fi9U<={9)H-n2pIEQSl!xWgpSI z)^9?L%Jck28^I<^`LbuEcpDHCMPSsm7|RL%=dn`;AR3rZZ;k6EoYPX6jXz6BP@*7u z-7R!PFvdQZo&IyjFs{7oM{K%O=Eieb#)ld)9n)_jBRiX$S2`VPpVW5ffBh$zEs{Vq zhzsO1ZBP)|cwiB={`oo<-+k-q@tQFaLcjv5vh52KEU1d~raC~?vG4CRO@>1^e`Cs`M@q20#3L??eXbri(x*C~A zj2DTzDrgfNOAz?@F6Z>aA=aazSlFv7aexODkO;cn|Fl85JHkuf;2;GHu9qU|e!jr}jKcVUb#kSxFyKN{3M zVqyj;S<5$h*81;I!wJO(`$1tH&`$MX zf@1vGNy>)g5Nf7edYQ1PwqcMN+dXY4m4MG9*&Mx_y66?D{>SaoZxax5cAsCCDKxub zP@^CbM38n?Gr&iG99Dp3dPgH=?7&v^awoB}5qCxRb1Q=)W&twhbGE$rzqr*{2tX`D ziCF(xZrC&2BC6Wlh;{wbpGEMl=E`!0{jm5^BQIBZgR*IHBMiGy3(O>DETc;g;MilCze!@Qw}`^w+xK`sDUfUc&S;deCJ* zk_6&AVPve`bun0r^Y*X4BDVR#GRVhS>lRMsK{fvitbDfxZqk{x8#c``ABx|tTxLE0 z38pQG$Di%ko`}TO2)tX*v)TV`cy#ou^8F=GwCZ)Xv;e!j~j!uYVtL1QGbdZRsH3+BH1-yvV|o>CD)W z)gh7Zk_PLckpDYe2(d1+#qZO|He(&gY?m4H0qZU5X|Nd?w{zd}-S8kI*_}i2!&OlRLXO5NJHV=h*I9Xl%LYorNiSV?^xMyVn?)AXqNs28tbJ!#dwleCU zX&gB7J=^NjdB1U&5ONHmp-Of!v%zy8CyC+qc*O{(6A*|0Wxw~K0a0$TVez=x!^XH0 z#?kZhBbwYV#e4LeO00ZE>eS=o!^4AvY({a{lnA&FFx&RtCB@O!S?#k-TR}zKAs5Ar zaaXQeKSs9rhM{c8uX1*@z=MYMs4sa&Q=3)TWtIi8B-FW+C5g``RM^s~zlPD{l+TM@ z{Uf~gt9%y@GdYU6o|w#K3FNOK2e(aZwUxJCAhj8_8+*v__cJWGKQdi(wXRP_>w{vx zWq!_AXR35OP~=c|8JhhbBz%tJmV&e<_u&s#Uo3(VR$Q5{U@)#EvMur$8EGJ)(UhmO z=~lM-cP+9-Wlqfs(ZaLeJ2c}Er{E-YibBRoZ_o)EwFXk!h9XMCdHKPE=5do7<{jI} zWlQoiK`avt(5pYxNaIJ5zZtQy3%AS2o*`=7N#p|Ng}}M@KYy@b-VX|4%LJp4vzMz+ zvSuw#(zM`8;i9<*j_#{VwVar=c6u$NN>?bLFc5wSTrP^7Xx3&3AzOpWrEZFr^kkil zsh2AdYid72SWs3_2QxBGZ|B_qr&Db{*UMQWO5_eY7Jv1qQ+I}P;Ap7)8y6&DEQK&aL8Q^4%KQXjaG|~& z%#Kv$s_G>_yoP-Gs;>HJE)ypm({Bp`h80G_pwy}(A_jJrjeX40GMex4cnX@pP z3fjYiWaxkCe*E}(c7X&rf{fc^pkjjC>*!+%#oJ?3NXFMD-X%`+!)va_Uud0rXkj+q zf%ouD&CT}?g%R_yShc_Dqdxq$rB5CEEo<4#a>uuJG2c$7TX$D;N6=!~->3E?=UImI zL>qs!EdHVM4)()MyE7^I@9d_rh-@V3zs4}=X}uc`XzA+6+K9sFT^LSnTXv*yl;kVd zH$ZJont4d@%&7?-w$R~ZQ!aFq>@mZ5!X3!ax)Al4U@TZQ-~#Tb3u$LWk)rH8wN4hM zY6T}gle4S%5#lTdHSN^_g=Nd@D&ttY z*q=$73s`4n$yl36m$}JXC?*dJ@y~Ru9k{^kSy!s9k&6EB4Fvdr08H?II6>-{E!DCH z0b)5OQ|MkU;Y9(-#HpW0Gg?*J-46Vb!$iUKe}WY`!i`4a$ws2n<`CDz>zM$M96RSB z(+IoG3MVkz0B|7DSazglbGtNZLG?5a#Ih4wX{P<{{kuR8lM>maI@HKTd;5=!=Owt0 z&qdMv+(=6Oa&Q#lB4e|JUfuLs(!mVZWnm? zGf3&VNXD-u6mwo6V<8){`qUnliN$EFgX)CoS7$oz_9{j<8V zI^qwslhaKq!3wmHs0hW+gX4oS=UXeSrzLOO)rV4_b^XD(i6G3i)^DRUN~R1lA^w4} z$8l2ZQd(%S3e@qDVg}R8JRJPbJtZN84Osm0by>MHU(}R z{D!+DG8D2=B5N_#TR)g;S!c@E8(=}df$F{V6^)RkbC0O0(Q7Y|;PaiGz(SZ=Smn^! zu9kh=5yE}`^+e}n!a_sFym;OHf&UpWv?O%<^W|!HRJ+}qFR>-VDRMArW5_LtNRrrv zy}_s#iS~6YYHW^5iNNc)QdjFaUR}hHIyQ8EKFzbZnFl=@+QGDXL~G*S#&!)+LWCE? z(#EC@aOL;D?j|H}=FYuAJjk$lhVk(^X2OF?em;BiK6_dh`L_CagVAocd{QrPecrwQ zFerw(sTj(^e(BGN7j25hr)k@~`ab#~-FYdt7jy8pQJ()QlU0#e9h%5 z%UhcYL;D&PI?QX7JMd?-wdH&zna+KKKA+G zd9Fp842j zXk>?1C^7Y7eQ7$r8qP!KLv<>AnOM~fy+q}b8wDZ7C>4S|kVep6rj+xyz60bv*vE-7 zK_Z?R+K(?wez*N_*;uAk7hK_&e{P{(2c$`WA$EvZ1V*hK63NxzU9kP~RMjHPxZ2FR zi%fzm@6b1pDZITa=b-FjbXJYqq4HcD)zJG^y|(c9BoJ1XIpeO z+=+b;U3)EVS25;hX3ul=Z4dF8T6mu+Vz`_ywm43z;4}O^08%y}czuBfJeEWF?}=BS zJx*HZ^D_uI#-!rE^4}DVZ@LS9eDl}^6wU63Me|85?ptA$I&QrmfwrGE+1DwL1BPub z$a#(1ajrAe!9$${xQ& zF}sy^=^_zKRuBBMcZl>v&-23-pksf@C49Bp8A=3J45tm@*zPC%sqwC46RxCRN1j3D z{`J9hrQ?sS8*MW7{nMyB^2#F@ahQY)whh2xKIV`OU5|UuedA^fqEgCV@p;pgdpkZD7kG(&H`#w5DNprC z9cE?+r-JOq3l?h^$cB{nl?Wk=W)?rPU$a0)^LDF5;dU-x14RKF=qq=^#?-`e)?Q3iexTxwSUdv#&fe z#j~nKxMeCODkXImmLX+mc$_r!=*C4vpF~uBV+7-pFD}K`9(~4IH+M{gNMOk}T{`;# zd4WgYUB;8=`q{&a_ukPCO_E4;5j7UVQiX$_1SD?Mic|2S7uOF*DLz|{TfI=orSG)+u;QvLg3GyQJ#MkS<*<%tYcR8B=0 zoKUrd4mAqvCl->7qw$QtFA)(84A_4@90?&r&Gz}ntF*;)nDhl8YD-IxLrJ5sI4q3H z#Ba+?rU9;b|7qB}j2`!DSKD(^tkJCz22o=Xo4%x#9i_bJqTpAam_clKI9#)=wQPtk z2*n5W*IWug*>fr)X8kOR!0^~DSz<)}3vPT@Q(%g{R(H!Y@4cN+=GyVP@0y>!SOt5+ zdI{yWL3%X>vgDPkq_VQ=7cQTQ;tf=uO`&3?=_y6+v0^=#q>R)b!j+1d9~?juz*g7O zPH6qTr7*jA1lxl>;FeG=Et z90k^R6LBn*I`)jHCYaG^EorFqQqmu0g{W6J4k`+>|Ma?DM5B}w4FXm9t%#fT(Pq&f z)p2xo9^IP30Ns&5QpFan$1N0?@+pYx05!4gC-;-pzN5o$y-cUodGrS;I8ES)kO@rCY2%ysRHtv%!`m>LPo=pWT(Y)1 z_9kWaP=l@KYva>gF6fj z+WG2tF&ttIRlR|9Yl-dJqU#ux{63qF4D}ORlQvWr zL^LekwK~>@;pZNv1ih9%cQQJdV-!&GMy5^~^-*L=vEE#jt5H#-C5UNeEfuf1LCOoC zgyK;17xC$`JBIV1>5;jF(iH;fxzfhXsByxUhYj>-^Fvo99i4K;Osf3Z-qk=?h1tTU zy9G$9|J^tL**+6&@9SX6TcCRT?ao7{CLi?$Q{Y%z*HumW2nX84)`JA0;Ux9pp;gtV z`EYr*M2_bsA+UQ$H9|D%c)cAMh7_6Ud1%3E>P3z%i)ny!j@^it> z=z201!U64B)9#Ow0(k+5K3s<$f`&KHKLLK=P)*wO5D`_E%+5Z~H#hD1p6=q0%eJjA zPabFDR9R{ev{}-}T^07zkAQ6lKMxJ`I;eQyzHdLMKB@EZf)E%S;(Bn--rgQ?#R~|$ z-fuHW>A_&99su)u&R?I-7*@0-@4>NnZoyL!O0^n2=SHjhB5|~9az(NIk9;1~7G(-^ z*|KUavA@o|{@7*%6|g6^e4eFf{>bV|VFrCTiPgo)Tmz>o=BB}A0gr*FrJP==j^_;B z1u=&CgHpU_^Cqvr)boBbBx|NQ%XgK2(&n0S`FDEq5E2MPjWs3~dtW7PZ z)=wMeJ`f(~1|doyhWnp`?td2S1O-^IWr3|aLRM0saZ>xVR$;&Z@J*^8v0W6tLjNef8N!Y#$vNQhvEed^=6j1T365te0wd&YIB3 z{o&R#qc?k@KL}hhrb!_4p|ppcwQ0Jn6Q1TKihSU?22vUztk!{Uq>h_0y$2Jr)Vp`| zY2q@xP$1mw{n6{RRnI6sDx#dF2;HCJd=Rat8UBHZHwp!}g%}cy-}r3acwlhFpsOO* zoAIPnXhfgvzy)Iqn=P0O<>GSK$!iT^h54}TSA5pJqWNyIP=^O8)4y8;Bm^|%s*z{< z3(}w{IH;p9wruVe=P+k3T8)n%XsUj-w)Z&qgOdQK zN_8V-Sgtu#OT=jALf0Qx)l8S^JZ;6uZ!d=3hB96!3i;=v0@hD(UP3T1nEnmnZY{hM z22|kwM#+`-tB8B}yxK=udFeaoXHiX8k5``Mx{us=bpaGn{e6B}20mCZ&?O<#cq;$3;3NY>s zbw>A|0YC63Kn@=LuKsq|9c#RflSWavkI3jMK#6yj3INf9le}5dQw_F|I_i9iOr>y6 z7NpXf7tBM8=*5ecP*mjY(GoP;(6PuZAe)e|OCWO1gGwJF#_GG>I+@PL|E>a+d=H`j zlXjtLt07)q-{pf(q;C8C1hf!i0rGzL>0^EA4k0dD%~ggNKQBO$r}@Uu;U81>;a_(^Vbt`&Z}6x`TXP z;J+8oR2*2mv1i9yk@cA-gLJWg#=f)l7AH+s)#hqP%3wrYK+YGzz^C>_1GZ#*c-#~= z9Sa)yDI9Jcus#|YAJ1(rL||0MVy=YEer%vdM@Kk+7@`s%=q6a?i%R8k01Umbi1dsn zQ0I*Uqz<*3P3Yo4mj&}(6+fR_hW3Yw3jTpKP~-;&J1G-{23A*B&6jCQgbd=bJAN8N zFMZaORZSjt0xUhO*IKYm5r31=BqS%Jd0wRS@F6tCuj(sSwM!HNhvtE>DCv2gKG)lmb{F#-f+M7WrDhgm?3l0!+bGA+ ziuCVLMK@!G7$d?1f7yY{Z2Lx7zx~_)0&I-R>**FUb<$8AjVrEehyORXhQ-`bth`W` z3e2Z6nNhwG>;y6JB(Y<>?0hY-a{Q9fFSs8>{fXCbbQ2lKf2nceRO;U$i-{8<6^|Z$ zOMV=JrAbRoD%$0<1-TGT=*u_Zk|=p33i>C5cuypnz`#gY9fJyH4*A(%iq=$n#XB$IouoR7ybTym4`9#6bD;bGK5F zllP{v+xY)6H8$>!tdz)NHy}Y4vYE*8>kj##+i+8o z#5(e2alt@+&Yqv`tQj#PCJ6)MbQW8o5PGI^&Z>;1&4laG&5ER-h%$95$I_m0qa~`V zSvsAkn<63FC8aK?m!s{lCMgzEzh67Drd#;1aU->TEC!Rs0}Z4k@DZ+u*u2>M(si4} zJBrWqIbmqSSto+W!_t2FIb+_qVgj^v-R}+d2I5uoY zkx)LNyK3v*3nFde)_=4%WEfdl(IJS&Tm^lMNC$&IKG$Ec1qSMsw&3mfXIOHalF%+m zo#Nh+|3QLQ6I{YfatQG}>4$M=jpGm`mn3*SDFDIFp zaBu{eBfbThB}kQ5;9>K*U*{v@?zLUQr78Ktn!q^MGMK(xggl)t*VvQtQ}mDUijNyZ zU z7URo`%(r!41*7BRCw?u>hPCa(&OUSqkD4kGvC_lq?fy(JxzknNZ_j^0!A$W zWW5Ipy*5U}7#u_d2C7>%qP31aoIuD^$V>#vgEz0Bnpn)-oC*|25829BP$Q%_911k| zJm1yh=2!~Jd`N^DhAE3Z0A}7GQIHX=lvn||BDmt~34K9`>anvLZNAKl%kih6mt3|# zfBqnc$NloqbtA9pD*Qq^JT&wLLvM0{*6w4rpB_XJJ%<_QB~dFm3YWSgI+oMf)imrO&1Vy+nyc) z?s(2`-Y+&y4-~g4M8Oc`Uqlu@CEO>MkE9R(Cg50cCFPs3sL(5wlNnWDM2}3MxPgDx z`jiDl5Ei!>w?4G?LCJzs5Ltobr@P9%q0`c|%c&NJ;j?`%vuvQU*I^s!?}pcIS+N~` z=(Ow}nv(EwE~iU2wLhp{HEO|B3~a^@8rBH4{;A`lb2U&A8nRL-I7l&rq}}NMyD9u^ zq6O1Ytm+915Y9b_1QmSoP6YTXCG!5LRWJ_y{c@4=9zrltn91D+?xZi7*Af#GC% zVDOis45G!pS0cw={DdfE_EvU{+B0Z{uoZ>?KW6b))sXJaO}+vuo!)BjS%%lG01R3x zHa3J;2aG|7FX%o}CcV}`K58SM#|CC>s+fZ_`{eU#>3ZwSt>&Z|0zCXL!iAG}C(^`i zA0b4q%cs)iic&A_u5f1Z+e{@j$tK)zdLuKDqcE++vzvqqp}b0@saKuOEsj4Awf_x$ z!GLLh07b#MU1l*n6J44si*}iY74vWbY=oL8O!WypPB`3}E2NgXVp92#7?C>~voJ~m zzOqLs$RVacO~}`J1@;PKL9EuLz90=rOM`d%?uvIhJHe{{F`VqVw@357DX}EtVMyac`RVAAeolx1(RuN%T53SfZPU z^vP)_SoG~%mnfvcC=Gsf6tX|uXI18TpU*{r!Pc9AS!x1Ai|P0Z;0m29f94JPOoe`A zYMj){INU&9C9ON5rs1-h^CefCa?pp(T6mF^%;6eBk9}xT{)QVxL(p|1i&)pEH4cw< zPzVnkk&(4m84EgoHaNq-5jxs;lpnCtEMd1=khB}sStz4Qr`>44G#)+T<2LRw?P9dZbN6tu1UL=xlJcAL!q{G*Iez4 zQh*NGk~UNQ-_~p5b4%c*;-Sp-idvNr)CeIOR|s;`{t>b_-ZagcBB?gZEF(G!KWdJ z`tPtHA`%vHNr93o(?5d_hyb;RSUdnZ1K0X^uOjOyA%nHhtyun(+?&s@7Q80~kyf7n zMw#7F?_|}Wk}BAWS$|$oFoYC|D^M>I@H;}qmD!;8yMyph{|QuyhJD{Vll*iKb)uoO zL2ovJ>VlBb4nzm_{xk9`BO6`h<@3G(F!E@T4eiE{kCf9m$Y&rX8!#)w7)6OgwS;G8 zyT~EzgjYXVuW@6+m5m9|27iT|&d1X_q`7kE`<~NOd{~1f57hft01^lkp~&^9gox~3 zE&DkU6?MLY(}WSDV-%QfZf^0E^4WXG7M)pkSo-S&tzA90-B+G zODdviyevHJKqM2X(Qk9tRFPYo?M;X}+!%r(!Nc6v6 z014NuC2Se7CcCzbf1*>hIr+u5CIeFy^20bS@&>o$2-O=5Z{)on{#48BoL>L1D#};G zOtEP@TX(iy7wtM>rA%2{0H)is1+xVXiVG%WF-#Sh<}aJTRWAN=hKaYu@EQCkMF17b zDj~|6vupaS+bk*&>54PmH`e_aR}k!KfvyIf%z9avStOsdI7po7sGOSx3={@ZX@Q8h zo12+4^UM*Yus)h&M0$4q$!(MdJ{y0E3eGS*y-#2Iy^caHNjk+786m*W3R|M8BVau zEdq)R6>2J>16Kva#>R1i>eX)lAzX{9tM7{~UZ+#BF?OPgkt5!t{H9UuNZB#Tt zt9gxi%UMOt#a37ArF1(E$#{QnPCNymPU;4?SYTc-LD^7a7U(A)InI{Ep@?4e*I|BW z{%YE*wWC*?$r(H0tvB} z%A?g0s6=VxyM8;jDTLsluhO%mCOmK6e6j?sMn$ja4TT_47Q1T@wHE&^=eLTt(nUhY z9K2S)njoW-^X)N5q_TuqOwWu>Bbc>S)tH1wHZ!m96=m;8bur%E{)Y!nQst& zsw5pcbx85;^5e&oA}qEPD*XgI{_ZsU~5&pCD;m)MZd^ysIXE{p;NV_aQcL zA2#((Z}+<#9UR>e#CmG}8vXe{3AExYhlVdOwLXtPUv3jTo-O^mov z8nOu-+8Et@&I%%{^Ler#^4DHRjGz2aO!S%%lajxR#B9x}&PGKu48CbSSA%pI_|V{z zKNIa~tPa1+oD_ErJqFv*-^H91(Vt{xB_UDJt5 zX(TiCkU>$&&^Wu4FKFywPPrF5s~H@nN{DlMmpSW$0bdk|Q?nSzQ~+)5XkAQcsz5znfbp}s$1Vn za4K12vnyGzWRE0n4J2WB@Q&3Bk{LPkSl@ni_@sUqg{k8@hSHciC(7By0d`idNasXu zU(dai!L#xW_E7#@h2;O>mi_NHO8>@EndNK{h`}Js5ZS!!Y2w6C_R&oGay+gImaUAc zk3XcN>nQo3&!=ry*Lc$wBW7b2 zt4Agq*w76r!y9Pij-fQM8bOocOR;2NYk1+SGPq3abJ!A|(DL=_cZv-%)g(WmB=GHaUsL*70T15Ar|6Xz@H;;9e8d0h0Q zUtc^iey~qk$w^4)_)@bk|287Xg2^Jx!Z({lyyw6|>Y>vwp-M5hC{d4IYGa|62}l)0 zs52w^EL59LzDeSOf7l$bPkqXX+e$X_#XwYCSf9NwGOY_EzIR8F=b&a6*F??hvi$#` zwxaK-?Y(lIyfzZ3uxeLS=#1|s$2XBr=%p9)`#fefPwFv@ORZx`)W@MQXmqvY59x%U zrKp?<@PQP+ihOEBGUNMFQ;Co)S&QkJwIeIVY8oh&eQ%MKnwtt`Dfnz^F%g-F;+I$U zXNL;@{hKkx-ogIIjlAV_Bv4~@A-m6>(O`qs&+PISociVJu zfiREV_eW@BTcqbnl~ZHgUpV#ULse2Y4*o>{ktAq#@~!8nHK zC5K~5;S9$#n&T(q9M0xU>W?rGl*93iu{H;0bR{`6U}KKL#^Pbd{gTaA5z+#8cmX{GhXwbC8Hx~bhH6W z0T_F*2EwP@4JBXnckOb2Y8&t9{a2Jb z(K=9T5TJbABJoy(|Gb93jz}}U_aEe5nwR(g_d9{U*PlFpg*t0MDINzk1e=b450oto#4x zyZCtp`SzGCs7Xrm_zPkRbr`Vs=S<@BXHFlmYL4({mfzs_L*?8A{mLVnfB|hDoulDU zt1b#-y2Ammr~eac{_nB2BPAsO>E{*VYcr`=`IXrF7Qy2PR}MJ%+$-{o&>)_@ed2ll z&l}lye?J&+GE%SAk@ppVCw0(rNC) z?Yk9KJw%0ABJ@iV6%2b?epQ$LKPyZ3eiTR#NP6Rg6(THUep0=_nvK`Iqsj*Q75^_- z{{6u!B$(9rLy!dfzcKMwoc-s2o_nDnM+BcmXqh%Kti>*OY;x<@{jmF?*R#M3wC)P) z@>s-7{qudBP-RC?#cVgcbSZ3vpM>7v)x#+rl-IQ)Tu@(0?fWxs!K zw(hP0g!u&KRj3IggbkBlvaQE^ZAyOjNj{dc6K7btkl`(r7oB=F){HXcm2Te)IJ8?p?P)S6E=3L z4=^R>ou9GYAMLX*|6%dCZb{PmJ81t`qiO`?AcNlUa@$O&;aZM0M*S{`@_8i zdqJlLzg2Hwf*3`%T9AEWxa2I*Y{a6rVHJst*S*;=C|1{d_k)oo~Ng1Ss z=f6;Cc|D-a)Uw}6RHBfNIyS(3B1k|lzXSZDy`E0$^?B5^y=Dn`I);j8gPHZ{X;;1v z`BnnF4IWimT_(37(E;3&&hJQ**^BNIM8~Q;6bN3>Nc*$ZlqC%cRL!GNOk&kL=D%Fd zJX186orA6F=mEUJnYg3nE5MVUX2U{2B4i?AV+*30oqd%}o5TEQeMb`P#%EJ+s&)bO zCZ3COYD`W*6Y$)^PenxqBoJ5!SsKR+UkvIOS29d&W?WK*i~(rXHkeo>_}8z3Eck?^ zB#e(AFLr#L0PTGx`RM*&-mo({k28_NH_}70CA=4jj9gq#Mewd)t2Pq5)1wXF6D7a? z`}i**o#3rLJj{)I^|6J>iG^{56bXht_3`~oA)o5Gi*1U8%a5npy>w7t((ZNUb4I6L zvEfo}^0L|Xgp|r(wxR}g;VVq0Y32B1#CAP!+NK2deLO;&^>Ur++(?e4xXEssZ7bxk zfwlAASk=2d?_*5>9R`hbXRIhhcJ|`f6SXJpA4LQve-&Ne*^}bvY9qWFY&zF+B1NTL z*hfss0rFR{+c)P862O`o3Z^9(XmpPbkIts!E4EPW?C{XgP)~wY)ON09Y4`#{h5_mD zWQcr-)YL_!X7I?49cQoBElYF`(Mq7X&NhX3QBbjTk}nE|9YvKMA3xpfV(TND*uVV? zb}gv5*g_fn+F#we=M%<8?B?B*TS1*IgD}Ryd^=$it}O%u(yb^Kr?Q%w?LvhgZsYL% z?4;E=xzfL1Ce8bWq2_6UzhL?dUt#9DOE_LJHIVZX$+5y|aL?Ev&4?aV(5r{D-5(iZ z#h}sRdis;=eZ*HnTAX>2xlRGR4n9K2Gh4V}#rMHt6K8jEYZ4n4%^_;fAuc~6m@tUr z90_MtPSn}f4^u2tVRZ@`8bRc2%Fw^Sk)ov_Z^3BCw}!M&%KOs5k9_TDRX0m~Qw3v$ zYf1hU9(6u4RHihQLBt8hg5IxMbu2VA&88;oPFvLehFrVrd6jo2Oc;2K4jc5JRUb;Q znGHnAa9|<*olDq+9Qh)ng+`dCl^SVKOO%ZCbYp&3RedwQ(W|{ZjKxQgfbj<9b7=nA z(F0eFgp|@rN$jLN#`pzaIJU6+H#bTY<>&B-BEJBn+_;IR{+&OHLG4iR=xZl>WH>Mo zWCO<4N;$*EbLSSbGp;RbodM9>TSi;u&ew;t5!hXwX=c@nY515J5L$bEKaYRv!L$ko zee1~dpEs2lL|UUFquVvQ)H%^sC_l^}O&jv!-^Dt^xtcz$fCgi$5zg%)EGj(L*AwFF z^C(Im{N4+3De>9jv$#0a>=fS`zK-JKJJ+g(0+|yI4(gno^oj+xne1;~#6J6bdSXpr z{DeS8*DDH~!g*K!I2P{^Hu% z@31$bLjPfMe=Pmi+ufBeK$(3f;_tm}{7edjYU;T-$mtENq{ULO>pLhY2N;D4OPyp1+WwP2ND<4OW%=mnn<{dDEqbdcj zB+?+kduCE1^QoJ#N;yIcEFi}&VXZ$$4e+x%Y(Fg4tpbx7iI^>!e+J0jyugf+M#%U} zrz4J6KtG^SYmtb`IW?u=;O)5PCK7@m?m3yZtpVZRDM9GrIXFeGAUfeopYd&oDr7Xp z&lgNo2PwLs!KlC6$35T71LgJ*Vr_VQSm51Do_jy*cY|~&imB8Q%(=z6e}gvtZWs#M z2x3f0ia8cfULHFGDNx6#w`A6EgRc-d zZ{QozaTM1PN#HqA)P`IMWkP~W_U2i~x_4nTzZotJNs-V;^eY^Anl1do_3r{_pWr<- z_%aNeBf+M90Va9%0HC6gKn((g%GnQ_#_mmAvVfb1dcfmzpP?xq^INm~h$@`Ik+hyn zr@eb496wD>P2HuB2LDugm5iS3S^G=_wrxn%v1Q8IW6^R1Fk@c!+Fv1UC--H^Xm~s} z3*gJ!9uKd^1bjTcpyWZ0U5%T*UG?Z@=z($|U!$$^BO?Hesj1!w{$|VDW51WjYL%X0 z2OR=tqfdDeI}`Gl^ndy`yMt!~6TgU5OOWB59t?WFz1*F9@2~RM9uJ^Q=gVq0IbOVT z-3;zw{Ds_k2_C@(LL~TrRb*(pCqW2jMfaY}5mQ(EPQcQnR<32Z6WHUipB(~o-JyN2 z4AOPTW{CwKyrr5ZYw8GC^3BGPM}!^wGW9l}y?*!>#OUY2t730{bI3NY`)0|UWo_3R zNZ#f;m=l>cx9&8rO$*t*?u(AN75#y?hmwN0lsaCdpC3@SWWHV(0K+4AOZroKl*Z}m zSA=`os-_ex$ccKJoGdXsFE1YUGF?tTj7QEgsLtCW>)}P@@z8+Xs6w@P#hR6IKwg2~ zyS45H(IDTlnQ5x?p69UfAm=AdAL!+aCS)lHKs!2svx-vqbYqd*$ERBB7SR&GL9P%K ztm<#ChKV07soV-#{Lr`v=%^f6_+-NQEcDg|SV=1-Q{hIJc7{cIu`oX z?yW}(O@GyP#AExQAam?&^{MfVAA0%AEBa{A==}GN?a~!h=x6CGU{o&z?F-0 zRgd@PHH)0U?m+Hm>EX4P_2%-nOKP2ch@Ea){~RLN=%L}^JwSmbfG6O+0*HqoiSC01 zTak55#@o_PK=S1?y@3wrMrYe@^DHo&lVyMq5Fwqt(0PDt{udZnlfr3F0)?r}1~>u=%gLm2-@Hr78Y&IF+N#=LUTo3Rt}cHXMsWql zTF6(oT@8Mb%qb!27#3DzBHx(aFW#_gh^-tbErMmmfu}&g!ql7cN62n5w^AM8TkfKW z*bMbs1x*r?{3@O;)GNnGV+uC|vL@OFfjr=P!zJdbOo3=py9~b$C9BKLCnrjT+ygJw z${Yqk{s6Th9-MWMB=;ET2gN}8pqzLd{jb{w0EeL8!J+8A1)E&Gex5n3uxd`XA@tH$ zCK)}c=^fQ4iK?GtaTKts6xrlfRtI-#JAbZchEigP)iHxy_d#(gg!W@o5hHvvJ2oFM zmk(6df4kehdUOhIL@nE9x*b=tc?+<<0tY=;4W9dVJ4TyhPSww9o~=Jq9FC!ZkuB(u zwlEMdoVU++dm@vQ@L4Jvso3m1@YVJ?c-IPks6=9-Vxb3B{z%Z~oQl?*`z56v(1CQo zF*bxX{D&&OxSLHR80iPAdDk$*I2}C|0lzEEYW~;E@}CCkUb=RjkOB{bJNKFK(Hsz` zAMajY?`Sc>kx0pPC{Vkr-yS(Ac9ONf!Rp{n(8;j$MdC)Bo{voXRBKve7nxswU=J#T zI7X7yA4#cvpXWeo;FhY6{{3Y$gzy0%HB-o7xlE6?5B46c?(uAel3re2`8aIbwgIe> zpR{rUFW)0I;W%to{(R%1Z`=2W&6Q9I@ef4@aC>6JY<}PfhotHA6@lI#>_q!Oz4S#` zE!JF%9y-~xEu6pgX~PrrBGghrI|FQShZ&if<+9zi zvLFE|Ww0oFhL@l#;WWQJQ@EVU&Np+=xv;*iVAD#pCTpL3z2=ht*_2Lq_aA zo2xDW5eL63DX+f&7`&RD-{OH+4h<;$j#Wfl*Wrz(cU5;k4Ys|&L>+hKWV@D>PbGQ9^X}eR# z7jAc#+3XhZ?m@yNiJS`PF<8`y!Zt9ybUNFR2IixT`yZbqifS1V;o>shIqikfW~!*^ zRIc&$*2uZMlv*2}*{;Du{6atXN`TE_i>*XQUhxz|t_1f(RCl+CHMyX8$C4K^ZP*2b zTOt~t*Sk9qAk$H0wNl5sBSP`4HfNu-iwir8~^jiT-Ja!3CED` z;UHbF+sz$CN~sBH8S=`OI}3jv2urSu#hZmSUs#F(&b`zx&M2T%j$Q%Z>-yuxx*1<2F2Dh>&WnK;@FzOV4rCB)ysZ zUiQE!*GO}#12p5o0tU{#Dv9UVoB3jlq0~%cRkm9x$Wm+Yhoabgy=spy6*M9|9P=LO_Hq z6ydG)?9J`=i-8!@Q9{A}2dGVYgqVn2(W1EnPY(NCuD_ICMul^x%Ek{{v!A6ji4oo1 zvS_d)98P;1-G^GCMV(BuQP)2XrB{M$M+F@QW66I@Duk`A8K@v?mSZ52iOec=ZU_^R z0_vzQ0-V^F21W8>=q*t@A`FoT{o=?n?Dv=Zjru)^+Gctycd!c-KPY=6oKrziK)rLec>96-68`Nl)4g1?6$q@i~(b%auE@&j2b*5EWJt63{ zXF`Vt`0*Jj9@A;2SWNz`V21Bcdr(mfCVVL7=&gQF@Ypjz`Gp3nfWtMNr+ro4s(Zf8 zp&pV8g$Q6?yDz%-o`CD|(J!@){cDy%7bKz?M$Gj1;Yv+!_r5iq7>Wcy;@8{zLy)K5 zXhf#O;Yr#(1ydl{5X^(va1SurnD#J>CJGIB=odh;bdh3i&5qO*8b#?Rr=V476g+=I zKl)rt^isiyAY~K5vz%{T)pKsmMj|x13I8A@i->>F&)NJ9TK-RL%}cXK?bn5_0FS*m zdDG5tbG<*x0}zZV66l>-r)(d29Fgz9Sp8Nn{K^?A(gF0LNMuo< zypry-W-MQxmN%cp;Qz7vO_?0_HMh+Y+VvBVZaUG7KKX(zs4I_gr2|?dPujYus;P#0 zDEtCat6=hK41XRel7WvSLl7!@L$nzD&JUA>G%!SrL4N>A1@Q~zO`uF}5|qGea0pa1 z8LSVdohKrN_dcqU#}g1jkhVR;DzFyleFp0^UI0Lp`0!Kr zDLj*(4*m7pNJtFQYfdb}A!qoemKE)8))XeK?uoAa0-xt6P+Kq6MsFJJXJ&d3142_V z+Fih|f40mAe7?~!o)UbdDk|lqxg$q9JlaDBk!uYpRzSXvq^!;6dHF+(%{Fvu`UUzV z;`zXD7zY$eszk9*l!Wk_zV5X*@_cjwt?+NrJ<-_`oFalH_Oi~Jp=<2WcPLM1UVVYv zIsznAEM!r6Yq@h{V3C3vbLkiV6d4@hL3$1R^(bqPuGZ9DWO+9k_- zD)r~zHTkIxWTT>p7=DNjC>Bwduyr9gPCGSIJx9DXhK*+bLc}Wa&m&1h_7H41kQX)1rI=%t8vucOR?{0SqPuFwvT-Bl* zL;`aDA$q3KCyr;^+FsTE?sy|XzDLwACu~v}2_K`?yg)sPxzpX+N!E!K-55q+&E;HlVsB?`-c3QN#RM4bHfvw6N+yEz#l0V3}Yq z(B;aW7zUT^$!3mA80R_hVpL;reB!Eye}I1Lz6s%HjX|uiI;s(bsctlO! zBNq5`dCA~d(F6vYX_}~!DZJvQUco;hIPwqC6GLz9^v(8QyT9f+P!+CcLbzBubPTkZ za_9RMlIKcV;I1SRXY1{~lp`Dviy8fHuh@K|5U|_O?YOgWvpaQmeeoW4GE_bg1s^L= zl1slDrRZ%bMY*Ab2_YgjNH#~?fGwItARP*Zk`#cX2veTUdUcZ-wa*T@mm>+eO69W! zdo9&#O_=N@OMhxBMf(NRo60$-RapU)El6$@f_9IHs}vQA4C~DX%a?Er$gY{oWAJ58 z?)|vv*U6m>VsJwpHp}oBn>B$tYffHEIF?)Um{Fd6$}pC6@2Yty$=n=oVo?}Yk3=NN z+cjv939-jP%^wNf7=^hdz(58I8AU@rgLaEdtG?7wO2~fUc>*%(noqg8zbU_AAD)df zoMN{Z^)&k!%^V1WI+@I*RUOfVh!laFh%he0vBa(;TAA016)xIH2sHwNHu9~Ad7#Y- z>8X{($VhETGSZC1sU&S<2aut%-h)k5ia~}q8M4N<;dy>5K@f;9j`ap}9g-jxm`zN? zoh(Wbfg|>AY|IQ<6v+|wuE*m&K}$+XN(65IQA1s;*S#}gcdq|2rZITco}f>-z43o9 z5vH(WrwW*_KvSbW!|uAzR@Y0lPHSNt@M+nqtVB2@<-#rm{ z2p;nTXku%uzPFq4C6MNgXi4Z{8PSL_*gFzs%Vu!rzGT*JNsO1m zq;rw6XLN)DX5o0b+^65k>aa{fmajL2Fn$LPiUsTO;e1L?{fJE9NkM#ZFc*=o$X$%? zLEA6RHvWqaE`=4P1iT0=R?scgsuY!woyFOvK)QHsH*K9F-<3j;-(!UDWy6B?LWckkSd05cfJ!DfL0jD{BCu7iF6nk7tlysL0Xh(( z>ry6HEPjC-v#4XWRcTB2B^l7(r!@ohCct-k<$N?b85${7;H;%Mwh!O|7ZdWLUb)ka zi{5;__@%y6Fo6$1EvBNpd~F;UElvlXwlY+&mwkjBLw#*}?f8Mc8kA<`2I@!$e*1hv zoT8k@(e~VhB+q{e`fbuXh&3?sCCrNp>zKrC151RyQ|IpLFyOLl-pMiyTw}f1LK)5T zkfD!`gM8nYV+ zI$qT)F)xX;JzVRHm;)!G^QCN(X@7EFJw6 zSkna@^%%hgUf2oNiuMj;9R86XVB5!Xd|}>hJ^uc48sG8NS41b! z7eM>?bw#IT8l`AVdE($`3+iys4OyjLgj8UsTyV z=&oF`dS^K=Pv}1zC#2Xi*)S^;&W~qd!)IqD`suYf%c$oY zuz-!ClMU$l@}2#H1XWYB+mKgnnbf#E&EuqhAxD23XFnihZ72U-5<}EO?kKIoN+m+Y zkzPEIRGMd3fS!f4>~}~VH72?!3|}I*ucaLjnsm1h5xwgQ(w4pqjWT~!>EO^%7vl1^ zA9AHP|NAA!PzSw(Ek|qBHlO`T~6(jcYaKKFyr?NgRLW& z@WuX&^rLAt<+F0PQIpw$NQC*@Oe6EmdUsrM05?-qJ7Dm{xj;Ph&H6S6|4}lEFaWlj zTp43&m0=x^9~9iDBm-mn83=^5g|!!P?FQx*#47LeVQ#Wnpl&PA`YIKZW(vIfacji5 z2qjrR4#jqphN7oBx5v8aRKoQ|pBWq}657)n!}>J+H{ke#FJIm$(=4Ct6RC@d`%1~m z=7-JInzCp&pfR98ypG7{ta_5CB2uiy{M}2=W^bADP^E+(Wose1` zyy;JOu|Hs4)2J+CW^hSBZ3QqyC& zscjfvM8Wm7aBmEk^>7tIzjR}36RQxL2=spKsk0p!^xhW&a4cLuW5G&B;upsFn~x^; zC%`Eq(9ku!MfOZ5LKsm%*??K&tNzNMiy-6eoVZf!^9=W>gT_$&GMi?e8smeSnn`>( zU#9gE9PYnmaU^Uw50lqO*u>ff)eorKAMGR^ zlSm(-nr4V~e&7I1fr}#Ut>OE#GM1rh)f+QzTG}#TEw%l)1D8zilq9UUWrpnz5rYYg zskfZz_9r7JPSJ5knVzIVMZIGP|9~cuFh6_*gi*idv4#109Q#?$W8(s!-En7#HWM_e zuZ6l3HFWs>utCeNO1;(Ov&OC5{4fBd98SGxz|`%&AWT-$J~SNzEN^VQ?lWBy36)j> z%*KN5lVu=6e9&}f{1b2=& zl;wBJ9ll@CiMYR<=aXW6#)|g45dAo3ZvaSTvOJ#Lrd2!^nbwrH05C?L zfSInMsZ)7GG1$S_NSN)F^8Os8IPDrLgGtjcRB#ox;m4kRYgA~r1HUFZxaK zyHlR!iPN2LDo@kQti+1KrJ7Jo7H*|Xl9KoR@$T$L3UQ4v7?H!f$ZIQQ|3nmA z*=uN_`l_L)RPZ7d=VKFwSkb($s9-_pimffawP`&mFM?+dM>&s@gHvY=t8hKzQm`nN z6rU!1E@fW1db&Atw?)Ok3nXPE&PaI~4%X3?N|i>-BKZ>hhg`&p(7P3aF3*#u%~%Wn~wnHqVOwXcYS>>>(4foo$DDR z;{x&Z*#yZF^mpO}S=eFo>LBfaOQUeu*8zEmUf6F)FdZoHQEP=^LiKgzj8HQv?D-f+ zx}tG4_r;(aDxXzC;ia^91nCSwcLQUT3?XU?`rkO%%PdNj+p>O?zJG5g?Nbg`;W}6( zF&L}Xa=khg=ZfOJDEV0~fn+ppkS3Bo^s8rW=qz5(GAAW)hhx}Tz&fdD*u6dl^i`n* zI1X(?XK(#64{dWQ@HaK{j_N6)IZ8VmmqV)aq&$v0Y`fwXZc#d`@Zyh)5;-vizW3^> zUq4aHfo#yDC{m#4T;v(bAJWbZ#&Qf9vi~NUIhq6ZO=jBzrr3Cqz_a&w!>KR@l*wwe zj*xRAJFJ^!HocJ+~C${XzoJnq_xhDCmw-xy9!>D%tEfAZg=wXB) zGEG2HK|_IW;Ff)ctyhyG_R`|D=?$71o-JwAe8z5;ru~#Uff_D$FtQzsK(5UX^ezKo z%N*h0LOvHrrU{JvLA?1#czlfRyqO5X!jUlE;I$UCbw?#jzFgj^`(HQ?Y znl4dLo|Yrhuy{wx8d`!fVtJDBg+&`bEa6wpJh^H)Suqr=F*nd}bnx#yOuvDGbBPKR z6|^S==X|CBWOUSoWQ;9|4=Gp5-s?}S@~J~&g2rlPc*+E&oZf|Pb@N~J*GdUG557{d zyqNgHJ4945ton)86>pM%gTBvss(cB-zE0+{aK|I*WQ|H3#9n`ftth*n!-kR;esf^f zIGy&X=2e7_I)j8#y?8e7=c^n;3Qo?5NTYw8XX?S=nXt;sws&of(rPfI&^HXd8ERZu zeo6A>g^OR5&?L~i^i*-i^=nItkrF3=7<|g%=}=>oBZHd_)xmMHr~KsaA^V#|l0_kj zl5Xc`#@?%lP%*d z%X+r#inl22igO5Cy~A2no?Tw&2rG@|;s~He6wr6ycY&KhZvxW09$>;2u<&M2lt{U< z8L{BuZEJoE9}YZ*UE;bbN_P=q+;z+V7!K1t&7*Sy> z+XcL_-f4FlG-{67*{3_Z8o4wqSx#ZrGa z)+F!L*E=`0A_E1QIfXN4>3=zyjvxP+npMg>SM^W1zt__vY_-H%fPLTXsqVV0%{v>~ zALpzq(GiYXJz#+NL*=8IslgDDMvZKtv{~X(>X=LmmvMX}*IvOmA>p@HBWVG}QCcoK zx^jmOiN5$ES)|l9s<5L#7>**Y9`h?Nqj*aE$r8(ol0F5AA)FRZv%%k9_A%PV@y9j4 zjxu7){_d^FaGAsajQj2ueot`mLuHk70J&39jbp&TSXhXHjb(LNf|D9ztK9#hbpu3J zA_}q&_tsU>Bytouk1)vilmW|r+ya8%Tk;$NV*OKS=SZKnH9JJudHe5*jb ztYgJBB#r!BpJ>B4q13Y4Uh%Eirli#5{1jcEa7Pnfm?xd7R-U7tU@92*(oNk(bm49p z1NG;T$ATR8{H(k~+bu675$830yX{#r;_*!-d#m5f&WItS1PoSB$yiLu)4iXz6`Jv0 z!thlZ$xCO@G5r$bvknivz|q&FJexC;w8?A@ez1YEyVu=-}`rd|3eY=ifOK+ zLw2+PG0uMvtB=!MH2I!e)bG7}n>A$HV?Fh15lHJ5oCs;#wr_ni)=40I?Dpc(T+w${ z_RuLM(u!Cz#l%KRkjG15NQ*Gh2D)HUrnoTt*26E#EMu4(Re-5kj&rA{QZpXC1fy{! zqOPp`f#Kg0Qpq2drLs^KGqkzTNP5&9!OtALo`WO$+45FRWzHb3p34VC3{fOXi-Ob}EFRtsf=)sF1}3 zL<}Yz%Qqc;L_|Ai!-h+&(E+&=!(0-g5*7L}>lT$5L$ChP9PD8Ksa?Jy32+nv@2DWx z88I!FynBy2DTXW`h9`y=%4wa(5oGG_T10K{U*^vL z9DxA=^*ZJK6mtB~jXl%WP2?)$^Q>Pl>+wD{?^2c^pQCOzL*T}IX2uy(I8V5r8^q() z+I0l!^m&dRyFuI)VB0#_8mn7X(ptx>`{doINaegtX~-Im3olAoW@a03DpDl7{v+;U zt2%W*i&Bqw`oeAd~%{D**j*wzz+WJGzQ>>W0nZ8vGaF{U3ulN5ns47@EBB z-T(aSe+_c4{v1GqsTBNwKLeG7sHrRJ;#bVA$9i88XURfY*mUj3(<$s#x&!xToqlI`4SEfRb>?s6-;sNO&eHJwfhoQ(j7_C(y z6s;^|9})bR1AVPWa(vR63}z;RNHQH&|7u4+#6K4egTadhx}t=0diY@#J+PK5HE2;k zZ{^`Cx=wTIJs%@4lWuJa`lXf-Khx`xmuZ)@_n*6lfM;ir5B&NM_K&1I{5xSIVLmiT zp;^c95o6fQed}AbJ-~_-NasJOK?FPu9bbY%<<^{Am6epr-&)e{#yg7sbuF;MEBAm3 zqUX9t_UI+(9SD|qa*Xho$qV`b?!E=N&vjGnc@=6em7b4CRV3GI@24|#7E>P0wY0{h z(2{b`o8<5fb9!Z+3~PFsWYNPepfBCsP&mdMN2H_wBYhz@L#|6wBsRMlbOqESQ4mht z1Z~Pp8p2(#qTLinv41Wq2mMbIAyyX@|K~ja_J{)#U~+Yi8TIqVAu{=O z(~5-pQoquJUy>l`|MLw;dr%8X$iW7kOW%?3Ps6d)C5Ol~6yi>Eyv;pFt>fk_sVwKd zZ3-{kKaax`1zeJd5$K<*M>bei!2g<)cig&`@_qdB#Un*_$HDKtNsO0k#5JU(d7Mmt zb*fH52*h9b2tKye=#>IIMb@s?93}hC>hQ$`GdD>K`mMBcYeY1~oDZ;gxqkth;tUE9 z_D||xx2u}5bm565Q8-KNjg@K=$a0lINxUP%L!O*Hc$@O`(02CFS?lv>Dw3EQ8wP4# zDzmjG_vrD;zi;t%)Sve;%JySL_Sc{4{3F2*az(?3S0XP5_0Ve@8j{KD{mUA$KYQyE zja9FqX4miluJA1UlK1(M#C4_!0U;9NjP1dEUznR_gfN=h;Cf)f5%GXcEoM z&DCjDR8=>O!NAon9{3#{+L9rRNd>;%Qg1dId&$01Rr2OKsaA04&1AQQ zvV#fU2OB8y_1-NN8Lq;u5u5!*UYL82KjJl^{Kdi;d}Lay^aQu|4MaExzg&W)ysAWE zU2zIaIdd6_Iw7QH#ArJqEm-iFDN~|ekz$}SnmPl(TA=mdPDWVK;9uqC0FvTySU-cy z{7L_XUafzz@y3yDvWfwGiLZ}mMt-oo(Y0NeOEN?mPC{5LnHpG z9X?o|T6D))#w4jh;}GXNszh&hRi8mOey=W3!yIe*?D;;fJS!?fzB{<3HAJllqds?R zkxGjtVsgDBV=w*F-os_%_mI1l`EXIwvW_9jc~J?i0WICvIxl7VkVu+*uC#0Ob622o z`55oax~~q!eLVKwIEDy4oqB&KroeiE3fKSQw=-bpFL-`!8ao?|NpwWAt5a_=HKXg@ z_wmQNJinmPAUOP##=t1i3PM20cJ3rF4&!ikPp+Z#zpOnn3H$^&vPXV<>}uUp)AHt zVKWuHQE`a`@y67#$;pDbV9Pa7P{#t}2~R#LG~1$7Y=@srYT(n!`tG;z!yd*=OIVZ; zaG(61u|t`n<);CX9R~fimtN#jnWf!d0Iy zS8XXjClEvjlX`FHCp%ZQt^FuLB1J=2&aa+xxzz5E7ew%@41ri%AGL8WH9a;gC{2ue z+x4Jxn3AkJw>lrtx$Tt{ZFO)zSGFDz^1Ge@B^=kE3UgVWXG2BVp7xzN!b0t5MSxc= zoGu;^xf|4uC8$LgyEwelBeI$bi3@=Qq7S zMyWA4aQwGx5zKqKP*Q~4mKMUir!6fT@2fdemu0W(*MN8SMs7&5s@iIXue& z=}7mf)%a&J&|lkZmc6mb20t+p*3%x~Gg6VJ>)3xpqQD5bG!?qnP*cO*Fa8aIv?36b z`rK_O%NrY+5Ig+(HE$be{YJQJ9P%FOUWN_QwuA~1#OzUTGPOvEz~ze6lc3#o+*>nU zkrjQhkAEG4(k5%=EEen9TP>DxV7&0s9lamN+%U7>vwf*>b76WZ>%Gh6-8H9R^Agx^ z{M-1Zu9tDR#3=9fmolI@+MX2$ovkrEJ9qe4`KiWvDt)S~gMinb>R3dU>;&MmQZi8< z4hVg}2)3+Zc(aU!AvwZ-&bSmG!Q56|SLe9svaI-0LwUJh#6~jZ!qxP0ra^z*p60I^ z30U43|KSh(kF_k_d{2|Xn*KU&|0 z<5YD#y%T|N_m}pt)u~nw#T~jc;w1Dt6s=SwH~{+)wJxWL=7KM>y6@({TO)NJYi7rz=mK-CrGQsp$yXu5{{AMe?~D8&iL5jw`#%EyHOY+0X^l z-ed}znpc2Pc1|-;><`1USTBqsX?!u|8_Nu^DQ265Ut3)Na3xl>f80ApM0?F+x7K_3 zwGU9f5tyeLDgDBZ!o$V2p0Bf;uQMMEy1{jd>iWR)_izs^grj^Px-9`=k3`q6i@KR* z&x9#g_0y@DPXb0e(Dy#*UwA16a9}KYguf6m-=9*OezB7f7oV#cAaOXE+%3^Lj$rxD z^W1)YcX{jrxR0xV9&~I_4@fFjH&eD(OxZkVt92jF@bIw|0;u&Ve!~mD+Uj`r4ypna z>j+O?^X5gb1srH-5I+sn`2SLg+3tzK1FDs+3*ilVm@uoP04o;o#NT)JP|`la6wf`lz8Cb>-$Sp?iS23M~d-{=r!n+9H@Xqq(2m@B2!L6VoKRxhaPL9j7 zp()9I-!~RLK8pdt))y)0$?6@NPg7q~wr}V?@!xm)2cr?V1N|7C4qrh@Y3yr_aO|Iw>%s-d*mGJdVZ42_4pH)S8Te`B77121q;@1q5EDBxu>RPg&Rz z@FBJhO$dZz1Wzp%zI`!dkuFvrq*%VCM;ZN>^$Z%0X6 z+m{OFOgZj&3Qc&;g^Xtp25y$ob?0+U#c%Vv!`$%W`E&Z)oRpOCk67CAC)C4h8Fls+ zSEc`;b-)tYMSXRMdur6ZS@L#(TRhsr=jq(oeuj$3S*ZBTtH~LYt*-pw;89u|BP@Y952H} z*N1K$SGyOwb0_5ZG6|uSP{OC%V^e^$Wv=%AwOj@+2l<~|Fk))!mR*`(pa$#3tMQ*K zQ6#e90UjBpK`jOCGE<-aZ>FMz^| z)nZG%?lRmsD7Wb{S&JZLT7x5(BAH3M!T7@};HAf%ljDo!CO{G?h|8oY6LG}rpyTF* zQAiXNM1&F$QYlRAU58nYufDEb>s--Miuk=3*Z0d_F6jjcYM8}E!A4yfnQsTYws^2% z);^mC%KA5>A$lF+x&UAlSq<&A^p}PvzEO6~(T{h>q! zgivon&|mqt!?i#nFYqfdLaR5xLa{=(<0%L)OZVgyZX@Q8qM;nB_E9yraASK@f98(` zJ1|N<0*2l@b7hip&TnPgZnrWP8a}r^`ynA$`&=K)0le+VW>+;6+|*Rr;i}(+_rEzS zV)D$tZveXq1laGS7tU#Ep~xgvL_}Ztj+z1pyn%_GL~#8?mWVr-$)L~oUD$l;SfxqU&4EbxgE|303pKijM;k{)YScoLA+ zFtYp(U{Q-Ej9CstJ3yE&1-etv2<#2()OR5x<#}x#Np^wrVY4U)8{q>dzGy}$mC7%1 zx&ZdC(fy%M)#ireOJLhjpn7}-usTZ6B}?2+R>%W2Tu)X*08hpWzz{iK_(8~H8x~*E z?(un_zKD5_{>Zmg_V{gkDuy5Syb$E&JJ3rq2w5(Ih%{X;0b1^($cuJ7WdpFFe5LM8>%q3MeDtOQ_m+v|JXx*xo;jpMoh;$YED zJiF^#3W-VQHy@YfUe-I9yW?PIx3I8iBOq|Qy>&#|^(EkyAf=|ZcEwvk4f<^Rs-_^J zjTsC+j$!VcLyTD=-Q}8`L{1Am6*0_zPPeSQ-K%98IAniv+0ObI9z41JBCrU=5>{-+ zw3mk(Ni?R;yR>0y4z5Ib&BP6UB<9QW-XFbUhEP8(|w7W8dbeEAq21mxC^qcud_4C~C@mXxt5yjMy&=$TJD*dl_CUeazj!a8l!Sz;P4DwKAPj&rd+w}q4zeE% z7M;tielM``33Edz#I3KN;`urQP#Fq$(c!=B0J zVPv!YiZ*ab1~m^3eMMO1lcQDdGclnhSl@J^r)m5frn>L|1)A+#S2cOS_j>vIMp!-6 zGL&FMIyQG>Ic@llZf9H{wvme>67c&YIT2#Oj`E6DhJPm~pjwwKn1Z;MneRAWH&)2xS85!kq(QSU z7i>H2cvU?bB6<`5C-2)$FljXmK)EWgjBa5hR`(qGn(}l|kigS#F!${%z-{BbsP3_i zsGbf|T^*E{c^L}wOX88kEq;Xtxavu<4&V>mwKVh|h~xZ78msTjvhiB_yhS-G^7{`~BW zjSX@eBG$>YCjar#9PnYFrRy0W^?Cp%pcOVYyY9dMOkR9i+wQ^Jc>}i8(>E3DsTtvF zhe0b?vDkmK=3*#W#5Z;jV!$!G(pGOQ%i~D8V>p%S=Ap^T$X2g#W+7KN1N{;uB{mq5 zw9X&(dd1oB2{MUzgGC5JwR8ix=Z`O8aTW7B5N1#w^1rdyl4RYnGKyAz-6X{nbRCzb zwR4P^$>>+IZ(UgD+uGb#{rGX&aYB|u@Yd*}$qrNKffZL&9Y%izzEv;Js8XZc`PKyr zPmUvV+r;iW`gmV_U=xuPi9#z}ftbL=q$F*h#Y?N={{5M}8b>;jd%&+5Agr^QAj`@! z{gCWge=|5FUZJ6-iHIb;;n~e#>rVQFg^rGXi-2I_^#kIw=CuWLNN z;#jhR{Z7YN`GYU9EL*2_>bK8o)rb}@Gmd$!o3gNtWq~<~JNv=LzSSO&mov|fQ>p~b za{w5zY~$lKeOHQlX7?r!r&!dCCt1tc8Dl{Dx92%ijC@AJwvNZL_rPJ3up*>3;RGvj zLwUfAHQ79mU5fYbhXL~2kc5N=Z}>=Rsfvtf@H~W4nvAB^8r+_Rkhq63Jq27XS5?MM z5JSh6+uoEoe9yQCgbxOhti=UJYfWMMKYot4?*c^K0S^D2Fw5x*VN78Z7G`FRmNnW> zRH4>6NB~WCqdT?6P$=V;07)s!=}Kece$T5(j`35|39vCOE-7h0-O7-NCcFeDrQrwV$M_9Q++cou?^WMxq+k}U96#Tf9l%I32%x<7Br&On0jldt_)?gkYYAslR5rFLp`O@&hs``}b~6 z*V%%|h$GWjQ2uT9CqH24yia;uGa%s?!Igy}N$NEDQP(?cv|G2bhXA$}KL*N+hil#2Y- zaFB_sTQ5Km#`o0wDw*kdcWi)k9r~jOLjVmgtg6uG@vN-M^KvQ$;7g*8k^aWGuh#Eb z;ZdvnBwo=I!{fQq**#ag4KU2$zpynwKiy-JzC(MLUtk0-ebLkJvsz;w^V+T#tJj(= z)<`*lJ;$u|o!E>dR<|Q8QdDwsX#?ErC-KPypQ~E&7kJ-+)%+|wjEJJ*SYBU5w)@%8 z+1Z(446sl)j9E}umhDA7py1KS7d8Hg9*B_m-r9QUR~m=?HwS_dsD4jkeGo&R5Hh7OlnEG4WTc> zXw#1$KY)j@)|c{h-`kN52wZD>0&k5>!FGtbA*SiOEt zcPGf|sJhOO#jGPh;iYw&a-Hpo87SWf%2YD9Z-rJNHA>(*@_IDK=_7J7urW=Ei(# z*Qa|5MvB_M>pK1r+CNh(DD?OI3Lz^s9V30)=9X4yB#dn578MfvO0|O0r*0kUnq}Xi zV`V{PVq?jh;Jx4$z+gw#c@>~ zSMIF%{g&`rD5W6(!~0Q*#4x!`TJMD=IRmGbCGlfx%dpEi)so81-BOcs)3Be*wU7Pr z;+xdW@@=>+BgcnVt$Ud^FgKDo`GH^8$V?(Quu*#Os+IViC84|YO{+Y4KLQ+`;fv+&gk#tAZQii#r$di*xm9PrKslp;M=R`nTq9=>zREr z1aoH0n&tA(Is7>yIWE-+G2etCNEP0Eyrx~ahqJ^P7#VMclR7S8;P=wl+;;>QTL;J$TP4)sKJ)=F4S6h zqc?;iR4u7|E+f5}w5inO9~{v>UOs-6D8$ulubKP@BZ&NAhbdF1ZV^bsAVGmZR8+)PY(m0^ z0`A{n1&&aDn**cLSEM%;@^T+ocN|;kOUsffyJ25p@JXQ8Upkq+F$usH6=%`z@N2?! z_euRi-yp-Jj}?nrh5oLxq!Iw$=7}+dnK+3Z$riCGy2f%uz}h0a59AoTzgDp7>y-4b zirIUx)?^`~5V{=NimGxEh-NWYZ@&h7CaOu`&Yh#I+lHjBf#Zhqj2=?rQ5WmfgdTEQ z7c4?}O^+_LJYtNKpDGSY%#o%m&3X%9H%vbY#dE8ld@l zAXE^9)z%1xv`W-;%K2eDcw=PQuBom%x#l9~wTgXSiIqA#WrVnqQ31x5Va5=_BGw&= z$q8HJGq`o+_91Y9hyl%*@rYAXbiCto+?6X#8yM? zu-kRM5p%`J4CEUe9sS5x-Q_!NQI}LZNk(+FkZ^31AD!b|fkHxXg3LdTi%LgJ z^HcA02&b&u?-D=XrE|xeoE^A5T}l)zh*SMgDIMA&!;*dsUQ++6!WBZI7=OiyDL zM%`kL?^iZc^4$0tZX-^a-;#AlyL`Lzi3)qI`Xm#Rg?2)KbVBpVSY4&I7s@SCGXc7&6MA#vD2YgGL_LA52w_TL65PZKZO@AFYdd3!2Am>8cYd+7C6p7q%wo$bG-SYpnRlgAbb0HBnvPN>aAcJ&{i%{F%qvJT| z0<1s40GXH;sk;V6>EB-i_Vksnw0&#ag~G3pLxZHOyk=iMD&Uw!R6+^0$kq4`-CX7C zmZ@UrU-DKA(~d_Qf1)qU#PWfCMzQ3m*lmbcdp^hS%d0&hCf@fQf2Z!=n0vBf{_SZ6iu zZOBg@4ZmGmUD$Gut_PqA6Rcq-0s0sVT+EUHO69?oT^v{_<>;3C;T?pM`#;!3wKfHr zSda7VyfIY34?@w~yLBo0lYoGrH^I~3$RvStEr>XuTjsgFKaslUejEdp^ zzpw)VZr&frhr2WW4;Ad+@Ba6v|Nj*KX&Im`Dl18U{vTuD1}?Z&YgFjMgZZ~1!ywu; zMDGK}rc-=oq|bb7TjMbpPRd{m-YJNZ@74 z#ESFyza21Z1&ji-RyzfGWYBAHbz_>3WOv+m+IA_%e`?=jY}gnSZz+C|4*3EE zCl|s&90p+v?9ng!nI@GW-6c8OIus_>q9KSyR&E?GoAsR{Lv@75yqmPwjbiRUcm7|e zLIFC=-T1;w4Fo?XVKRKQZjPo!>yRGUna*t*!x=^I5AFwPEmzivJdqdQa@BxV5$FBW zDg?B{bt<3K3o>l@?l!(;)fK?@N?(hd4GzoWB^iD^lY>4?pRTw+-xvK|%x#>@6h(KrIE*_be|t zclY)Ie5oYox|T9#AsIY58($G-Weg{?lNo>8o~K)pthSGw08!0LzfNsx%-bczIlh#X zn46ootue8uM>M(p7vtg<>usTCaFE%>1bKsjn|&rm#=*jdf(VQmlPemq+?!faCXX^+ zWYpAI?QkV$qug*_oVm9(hAzydVAdcIw0h z&=Tmx6*L0%4G!oQ*(+Sn>BP^iYljM0IwMDC?MJ&2>O0czeY2|jeAehyIh-DMB7%oP zu5h+g#l!}|Kh*!dl^sIDYWfx2gIh`V+r@(&5M@deXGYpFYe>VTq#7qS?DS1|ELnL> z)UVl$)3h}m63S8m8LU|%BHwC5#5D9WQ6qNCg-z_;^bFG0OdDaJYTZS%s=c50iBIw? zJs5SyO1(P}dG}TSd6fWhyajB8q`0t8fglTE@jh-i{`Nbf3r!#5DODbHN+$gdHbGJu z?ko}K5U2Jv(c<1Zx(etiH-az~94B5qp|1E|;&^^@uQR8gPF|iPWQp0Rc(5?K1TPh=t+UlXxcM%{?OS#VB4{3dMsP6OTo0kh zCtgcgI7#uJl_AhB;%)aqeWpCqJ{q&jMCiKXe@Qtg?~y1&muY9QPnH;8=;h$zY7>k? zdwu3r&#;op%XV;$1^8MUHAsnLVZuP7eOwh3m`H988)NAq(sp z`a^PW8yF*PB?u-v6UHwVlIq9BN?AB|A#)mEu*x!0&rzLiA%g2jf#P80-p9%@O{D@u zTF!Yp#4n%ba_C2@|JjQ~3?zWw_u?LU0xB#x*AhY~r%@ol+tp@M6o<7uCSn!W} zf=HITyE_12oyFoLmbs10RW}`FKH%h?Uh-z=H{09mdKh4if=4L$$cMy>3%eqSd@G=t z#;yO!STA|Kt=|hmKI*eC(FRFu&~Tbd?Do( zG##5$ZQez5H1~F!{)jE0loK!;JS<2Ans(&x7#Z|h>;ZMCvDlQYzWqi7k$XO3GQvH} zMgb*pOKE*YRHpj8dQ}RdgOq|jwjL%<+TlI_C+$ZFKI1Ry>Yv}ujK!QP7fIKZ9NHv< zq)WN>H2&FTNgv-ffXB^gjnAl5*iH9a1R36~ZZ z=Q#}?!4SDBxv4k#nOb+5f5;IrU?VX)Uq34MvPpGn*V{AOJ2Yu!-`&G`!1ui*qE$Q6 zuhCk{{Ap!pCvRjlz4pz;zUw6ph;!Us{v*I|Hj?P(c4vF9Et|BE`RzRVli_h;X(!Ma z98F{1w8-lOAaSP-wzoV2`}XwOO0xM-aXnj3HQJrWO#o8#YUuIc_1r_Pko@?t-t4o}QGjWb9lfWu7;rR@xk7-Mz6L8Q*y8twA<@&erjgSVt*qwmhH4 zTA0U`=>oZ=EOAc5UT@1tfF7c^(1V4kr}EwCVp@%E9UCUxCAy&fz+n#?ZjRH5R-N5?r#d7IvS~Hv+#&$i#hA}1G?9uoQs5)Bhu{WKyy?F9*r=E+<`Ix>sO?z=;$eog zf!{(N+Y-Tp47UnH7 z_}(qp@H&(rQE~m;7WYLy-pI)E!RfnpcBs<J8OHo>O=sw+z-zBY;Q5_1Tqg$#IHqn?%6;jt0Q1Dbz5dbMmSVVp}k3c(YYmO41SVcXVJLJ(~^px?r5T(qX=I? zQkVH$AeX85d0b3Kh+y#SF?FNdo)9yiI8%j{b_++Y^+^drFXvmldE9wUVg|48(xqV; z)E`)5qMs7o11AbsUqopQzo;e{1iV0WK-R3Dj1NytSXn)89Nbh&Lp{de*Q4O~S~vAs zUzhmQ@snahnx%iK#R@SNDJ>PiKpoAWnPEGGe$Ku02&gxP+cmYoa4W8_aDE9x0(63o z;KR#s>e^qc%d2Y~@>OAxpUj-xwIq%5d!%i*E9xLspQTNc9r3P!a>}2J(A?SwmQ2 zkX0P>BbIqGY7sXOnF}!9u*k`Zyu~FY-uH_QoBn@Z3|_B+W!`9~47P!(6J>02LsL~& zL0QyKwtv5_GMKVe-H4PC|GO5HU2Kj84jGwK(bUI$sK@FZvl#Qo!w~%X(FuEYNEm&S zRvAdus8rQ~j;Zu?tZK92xuQvXYbY(k2nN(*fxK?YF{Sa=CEW?<}^5O7B4oVRFLwaG`c{ zW)L@+G}LY8^iLENTGNqxiHkYP5lMlR?CKdrSoO{D?gViP6U8V%9P z!@4fhskwMCnRZFpIfRJ^C;KznzQk zH|Lc#orB0Ud@Q;HOzr31J&y;fISDR@@5|&ewDcRR0HU7v{#b_EuK#HjvB$eV{K!Ov zoTnuxH99dAE$iQbft29mF2-z$;God)%dbsE)=HJw1ykb!D~a^tef4cm7r^$f)kne0p&UghIH zh|^e1&|8+uy#wHawUsP;v?%4Qs)!0xO_nua6mO1Rm#9Iika1v5`R44<`n% z&VZU8|9p=aDq>c$VYtD3JX5_=W7Bg7>Bc{OvfC@9n~vDSPVeQ0S>Vr;+ z^eSkF|MO>cVs7prFBGWY;q^Dk*N*EbBI($e$VgLa8i=wNjY$Z`FZJ(gb;Hiry(cMI z_q!Ol+0#Bm+=0vZMLP9ER%I8f*r0F1P`fBFod(v+)H=JE8{PVvec5qky^*KNE0tq0 z?W-#opX#nM3O)(o-la1o99`f+Q(cx$r+R=^0*TR@%H1K?X=|dHv*rXC8SbA%`!kNa z($oHzJ?99pSpk1h+F9#P z9LM#B&xM#EphQLh)LfS#a2O8lXIyIM3}0J~H#!^u$=lz73a{aBjqv;s~+pUxi-SWS5V)b9kK2)%9OSOQICc>)-p zuoTSVVy`8deXu|g)RU`WWPZdy=j{%?TtnXua>74>WH3oVVq|jkxn55hfPBblrMy(0 z*E(u*6PTS^WEVZ=S>(|%(LK-CC=88(gA->w!G3?ruJYRW)@7oLfWzedGY|%l1zsIe z#EVTOyyA&4nor1Z;WO@WNo1n90xZFe;&B9ipx}XxO^)&XrfKS5u7a61-eK}_6qOs&^;qwbB zVvq}l<$-vBC@F3ZW?2pQFzjpqGlJ>e3ZNO7Uz>?wR%V%*i0>BIZt58@r9KYP`uJa# zu~nM4rgYwg;Cb2fhbfo2)S`92KV9e2lRfC*O(7!SrpMN{sr7w7QfXW06lew!Y!)2? z%tY9Q4^A7dB+9HVjVwDi{eB~n2tm{vJ}L^=NydBhAJ@BC%W^TE0WTL3r!!?HoX@vp z8u_qb%??jAZ{#$#$~Xz7;0StYh$eI=RMvDXns9a)=2U{Sw2a}q<~&# z@N8j4ALe-yqN%%aKoIbEZBik%iv7J)X>JH_vgTsL9wi@cbhBHuKv^eB! z#zPO&@-$yob8kw#A~1I(1iB=^^gK`SoFT@{I6Ryn0g%YMhbs(^JRYa}Y(S=;x%03S zAN-?d52PA>Gr^DI;I1Tw0y>@)&QsUWmVsb{aO5EcD+P>8Z4pU*VJO_-i4t9+BK$He zC>fWvp155i@6m$3)Yn^g2SAw1mL{si^zvc&;Mqpg_C1}djdiG}%Fw@y$O&0L+ZBON zhf0TN`a*Pki(LluNhb7buWGQjk{(O(BUe6Ru@$&1;a+b~Vr7^lWXqFH&#CPHa(6pt z%T|8{PUlTyUqVW+8ubwY^|>XcCB8Y)FvN`IzArR+t8y!E6nev-?6o!a2_BPA>QGTI zShQTGhxu1KL#e6NI`yWBH~l*>h{G1`SW;jEx!rd~QgQUen&~^^W5U<($M7uW`K9yE zT-1o+5w)?gF#xt8nQfCenJd}IVKh@~ar9~SX=Y|c2K#IHS@-UT-++fbOZ1qn#?-^CqIKh3*Dl#6lgw)w}I)Vy@ za!qwTrHPsCdVr8{ULkCD45>DkW4FW*>b-Cf z*&7}IQBhv4-+DMiCLRt%zzFfklM4E8G~PyH(4c$zPxpoby$f3y94sVD+v|q#=atGD zqdn1v$7QW@lcDqG(TO`h|NQdh%I?vR$u*MeeCZHhE&cx&Mw*n9Zrh*KD7UcYuE8hMzXIL@$hNf#w%q? z$$VwUCKzQTgbNEcn)6yCOg~7ccf_YUkZ>%MV42!_533>5Swjqc)}WQAoMlNZIUuQK z#Hb?;p_7jb*_Rl&JWRic7-|f&hAdf!H@W~T4>V5P$Zl(OdYyox^pB*_7tmTBxr7** z%r)%SV0_$%GGVNeo{p*=^@A>YxK>*hqUUmPhJ184t7Ilt2HC$I%mAPzp4{+7a!ERz z)c6-Agk`l1QnwTz`s4bApY)oKCwQZ7F@B>SQ|UqdD6=?2wBNNFY0;SANg(LMu?J!?04PGq#<=d)j%+us7@!8fpr zi%)j>FAA4m+I_xl>R*7zfefW&cUe95RCXsN>X)1;>&7aXSIyn ztQ9xgsjd;L@mx1m3b-TH!XS=3)C6ybR5NvL$+{=8^;5#(mZY4Lix_U=@oNq_GP zBys>ra{HEjfcTr(=adz|!8R~xRCUJ$;RY_z$*tk>8C(36B&hoJ2*>NRv=xr=y!~|Y zb=807JK#D5^5$tJ-Phedvao7FpX5`nm!btgcJo9mN8rht6kP!2w|0v?k(DO2Ij6Wu zkQNNADwt%G^&LH10U103LWYAin~Rb}Rdlgrzp6%pcEOUoWt~;&*Ja^LJp35zoY{zXln(P4N;OM|6A{+dtz799u^}|QdAfQR1 zVI!w`tk$ec%7>1PMH)n|Zm%yS=bUf&>N<`Ry)T}Y|E_>y%Pu$foRfeou!T3X3qG6# znUAnJf$_aUuwsU7dRo1dAU`@WD;PpE1ur+&jr@ zYr0{RsYh4+e4dnhpZWTD5}3DsOKH82v!pnE&$Xh#mdmBqM7 z4A1h3bpJ9R?s6a>tRMU)_xpPj{61H+3RNQHUTrj?LUoRqxJsY2Z9ln9fT+K#LCoe5tD>V;d^rA$B@;Ye|ah-Pebs(gI z-)Sradm?FUOv2C>X=O#}k5ungECEA8f~t!aU!GZYiFQqxe2(ZFFH=*I@WaEut~FJ^@&$V2k=asuJWTs z;LT_glbrj}!bzMjdvIk)FD-!DKbv)@52ci%dk%(VAIouXcbCxlkj&@w+t4G9Zmstn z{qwthzZ-dVbt;O^;}PL{(R=P=22$NacY@B1RDr%rO^-aDU z7sVDtYe};GS38ClsMl_%aTaxq`OoOneOcZsai3P|0Ox*4a4emTDSvH#Nkx%ar4c#G znYs6vp;LfeMXpLBE>;(C!nIzRuoNSMGV_U51dkfJa%DNku!FdY`&tD@un5<~lmPny z_F4O)P`_@+pH~xs0xzmG;9$VDf`JVzBs1tEhxB3B8DB8_->z60cz9WM(y zED%0tor^oFB#i5|x%t0JxWT0b)_g8H^ZZ};SfxpZnCy+nV5Gim?FByAP8JFk^r6tv zX8=K$={^Vh*sZ#RYgWwf-T~2GxcHbGNWV|Nd9X01*hNzab(ITR4tsijI+P@Qt;#ebHbUWPzVQk7kA2 zw!*rYG;3k?TyGCqqg=b!iWtfBBUP@c3Y#{+55!B1It*yWQzf!VF*f>9Fa>`e*a05} zHFY&srOaxos?KWik5CS^PF>I$%5i9jRIY>Hbd{70Ufj4Oz`N1q2PG{Lg{X#pAq|85 z0y&3kxBVJ$fijxRak_y_;cm#K5{k`|lW%ITfNYk2oB+`XITV6!eEK~W6eELsKU*tkqQ8-UfAX03Zt_3UQVSZVt7$P(f}u;wftMY>MSyWq@PT6zw~|H#yxMRuxVC7_+;33gW0?dio!d$ zCUJsco(WLj9w&u;MqIhO>uxWZlQRh9^}CLAK(`;OO@6T;QU!$vF1TwA=I z!9XY|S4e`1#z=B_BeD1h(*fz3AMs$!X(I8OXohTkyMf3ouWDt}cYss!bE>F=QwWG5 zah20%q4xVNRG``XSX~aVkPbA46`RIoKFa+j92R?se+wP$34*FZP8HX;&t1%#pznhX z0xOgIs0oc9UKbP-{Mttq)g)!Jx3`xqKdP>-Rc!g)kW^SWj}xL=B#Q&;gXr%nUGguO zn7iUeYU&@apb8OLv6;8yL+DW8IQ9E>MPolAr8?j@rB|5&_J+Tej#I*@Kyvfz6|s*k z=JT~ho*<(jl3+))6nh=v@Yoj-Rar1M9GDAP|35zWOI^8wzbk-7%Tsz0oJ736_$??U z7SLU1#y-_YIalQCjR6fmqu+B;BO`k58(5!m*#K7!+jlGsYPqq=@tUfyAzHZX?x#Va z2$$ZTmMbPELveVlz97L~d&|VBW7ZG(P4Pmnu%UULzom&jVWxm5Qm`N#&>e_M*d_wa z7Gl2#G$6f*D(STO#9o@n?KYd&WyAMIevA+>FK{~bf~sbXqySC*a)lW`PAqa045Lk6 z=dX;$Kd%i3W8bgB2qFpVX5;t^oqD7%VO60T>Dr_iZd%uljt~-y)5xh+l5fqq{k&03|kp+Ywy2VSj33YX(%%Qn(s$h8#By&KdR4G@9uN-@8refw7)MQBzf0q#dSIlC~@Z*P8 zlG~lz(pgdVEEPVK%saT~I1>{{5*QE{+YcI2$^x{dB>~GnFJIfPE5b?q(lMx}e(F;O4bg{01NnOJt{ygSEG z6mVJ;KJQJ2=)2o4+y;yT+5Q`kcXvnJ?>+09?cXBI%mI0sM%gYj|sU+p(42=Xu<~#AoWCvJQ zU}%*OjrLCOglZV}&O+!ZX)^sguzL*w8`^1lRXbBGS_w0$+qRO|krWeVaX>N)3_8P! zf7o01Qw)KiFa+n_4QJ_YSx#lrW3yeljET92#O%f0$coiQKl8~?9b-zu!#m1$y#!jq zq8z%e(~^hBhq$!78ZFlD{D4j6HC_riUBGL2N)&d`#2#iBYwT&;rK;M-#%4-iNe>$N z9nV_~gT@#!>m3aUvLBoaN(r(|1QH(Fu#3gG-%$^G2!;domQW7S++VQ0urO*+QSgjI zjan~25zKT4)4&OWL+P}(57{Icn|HqGeLD>J1`LnAV>6T!YMjs$kGl<>(szLUf6+CW zfhiIr{S*?p19Wwciqn8FCcx@MvvVEbE+O|iR+asDw?ISFIqF3<5}&dSH`*ms04;^WxP%Y zIdG3tKWUWAe6s(@pTpgp8z$nSHGGi8J!y!Ru8VTmHVr>-#%_onpICGLT43|oZr|mi zx9y!y5y-^?$&>_#5l#RV15uN%$l+)%1U1(9wd^~H=ZGx-U8L&=p>eKixD|_xbVaw{ z3lOZcjUy5R<$)995F7)##RlKA$Hvm(Ds&jM6<-cH^m(AeL?}u^<_18JLE>q2hBCMg|%fP?s-k4TaiiSAk&nO2EYwCJ3BvCf1Rf+9gj2P(f~IHM_=O1 z*K3HB@$`00+~3D;_FZP1H=Aly!%IVu=N~_-;EHRT%E%Th_dl6Mi=BeVMRG(Pmj~A) zBI2j%Tg8P{AsydAmgvPI;I2=TMTJo)2_WhDv~D?4&>=pfk_92!mft?I!lx)BV{R=o zjNKC*7;B(#D{(;c-ONPR#ZC{hy`h$}+R;kXuKD>{7y3POE%fpco~RCp^*J_HeTOq< z8qns&FF~ei)9_erx!FF|1hc*|3suVBh z?pUBe9>%yB-`{A+ot$tX?vqco!jk>uyLnu*`G zWtG#b)vh6EJmRNg3S{IV3IeMU7vcoH?Yv zNQzO4a&6zE;U`PaZ5Lm<0y(so$lgD9tvJ*?q<)UcEbJe-~i@iU;RSnI5g_&lE3%;uIhW3153J5kbsYA;kYU zvfnz+FOnvDw6{$OYP3AXUrL}^gVg4;E8Mz_Fm8pe<&Ecyed@nL+ErTGbMA#wBGpDy z8ENSo@UP&DXJn!=EpVWqQ7iy69xlHRIJ=dMw|)n$D#BV_S@a{>h$l9jHAm^Od_;FG zL9|J#;V9SDIpQ=TqU=S9#&iZbhaRMBea2E4!4DB1PzO$QY?M^PZ2#FIB#W#Yhlf^9 zC?kdeQ|+1zS5YO$DxC}U5rsNv@S7);n|!RAq~|NGftoJjMSvT0Kb$BYB1BLGGVUP3 zm-jmH>rdQhoyaL|^Cg()bRdpv?+KkWsS`q%vR_HV1RQ%GvXfXUZC^k|T(5K1n@^px z@qgDQun>ZwfG9*T)YRW{=rYDJ|2rxta{tP6fih1j{Q zF%T_jicpV7*Z!I3furMtEe8&K*;b3k0z!Ge+OmE6(66$Xw#|DS{K~711V)9dFrUQv zK^pDc^W({<7vom+bxhuMJ4SPg^|6?6cS1QXtl5IBPFbgax8(1EZyK5%K|4;m>Zr={ zV~=A&eZNv;RtFzb9jq7nHC8Y(a;s1Q^HRawaybG%{Y=cm^u5?#V4h9#assl>&}a39xoh;`b9bs z6Ray%W+PRK)mG}%gyC%OCE|9OX1yeBa~l)Fo|V%S$IQ3o9d|RvQD0?PWdADj#Gi{ z>!dUi$PE{Bjk7Q1q^~HRo}g->CNf7eVNbexhr?A=Zm$;DJNu3}5AaAp^3c)$brupy zB14s)ea}WG`KCZRL<8OO;$*InQd*pH#e(H!wp#r@_3mmrDeWw+KlTHzWV37xImOD| z_R_z4s=G+)$j6oU#UqDmGbKIJWJX=KpS4FG?stB*VfE~1!fUyI|H;ue3H<2g$zs#a z%fdza<}#12_{{Wo(l~VED=P>7d&NrbbtPvdN8q=HY#Hv73S3 z=Od=+so4je;@Gt2VFzB-lBP!ehH7r7+NRV=Tlm{Ml!||QRscm8 z?DQ0jeo_Q2tSuP?s8_;lzA^`c8$G%s|LOESu3Z79S_^I6y5+k#F@mDd!+VSxf}(F_ zRltQM(aG?QFiK#tp%L3Vewg#^{D)a24Id(ETp(`PjLEu&#N zBvLJT?-^zBVjSLiWGURUyk?!F+J8`mq!tzFl_5-*cbu~s^M%*E8FwFx(xbv9H!x#$$6cb?(gGAd89QXulj| z71v*qub%=Fj0?G01ESEUW26K;<-dk+pCH}_?)^5$(qh`5Q3c=Sm@G4#AEpsYXVi(z z)OGCjxF?*RM`EpNI>i=bx;qTD_c6p~@)G6VkI3KJp5{JhZ!9r>Yy0ijKL1dHAYHS7 z>o8?WE%l?!cNBlqby4NNW;Dzcs4wl`nB%2PasHu@|ApqZdlS^HV)`BF{_{-!j}^t> z?Pu@WD2J3GDlrFgtjE|HBR+UG;u!Taw24A)#|t*!7!02L}OOmGxMXy4X+G zE#Q{xS;9o1n5~;GsA@M$zN@VByL8_R?v1CJof$<8T$31&M4qr8Ix2ZHg?k7sL=(rb z{DtD`hhUX$zS}(-$sW7p|5%cB!bBjtNL#8P|8Zjd<6>Gxd7ESlUuaAH{civDkz2mE z)+t~AOyJ*@%l~XIwJ)TktoY4&9yz`gXQh7YKVTZ)Q^ML3LrlxLx=!pjy=(gW-2jwv z>=4(Lb;4bGcv=6;7k&oR$3_g0OzZzzIR0M&@PhaDgxsutuKQm;po0e(dTKv|r=9=j z(uZ20-gR4rhdp};>Vdys7$7JoGT?dpl-f|`f4R4)plu33C+2Ir8~K0!*zRVLZu_)9 z4lCHLvj5s2Q6a8PzJ>>+n1cdAs1XvqTS~NnK`IicOT=i7eA$RPnqg;G>!a!abNzgO zGT?`MTKt_dP00#Ti};KJzJ*VyP}*l7kIiMPx|VmBD5z0)7?spOL}3^^jT+A%_i->Y z4>sg#Me)ly^$5#6MIx*&WTX-g;(B+|vILRWzt*ONls6@ON{wX5u?MUO6D`%qo-=RG zmLm@?qBDu0%*de}y3s3!Bm+LhkE56Xb%J+;` z`qWv7+l$s7HBXxM&od@sAo=E!c-l{rvX4$mPLOlLEC@Ni?-bM6geeu*D=RJ~9?Xo3RTx^^(CfmztOc>`7R;KmSSx8r+KH+V z+BHjt8D0+@&VLEgVUn*143l%j>Dj0srK401k}=#BW$bA|+N zoKEW!#`W3Hhv0k6$G=vPK)+yM;d$9t9})RKk1-7_rTNONA~Zwa|Ex~HnEB6}lJSpE zsUR=;8FMv?S){q)li0O9}e_dApDQ@N-Do)(V@lheA}l)=j^|eLG1ox z&wR$BOayxh_p`RfANe*PfM?e~2j1wd2#($(Qp=5rOdM=bdc95V|1tj@B1XqUJ})|uU{v2u1w9$zOA3%HoD4BUJa+j@=iV#e)%d( zfwvK}maY3rJ65=(EbkV}q-exO*Jo!gMZHPi_+cl-$S%`P8>92e%-GK0zh-+nNZ@eL z-{$krA&Jm-5$8Kg+V~g+*Z0&kz(ANk7lqTxD~levp9o+Oal0vyZ6wyuuL3!_IK5^& zIikhHx(*p~+LQ#|Q*Jx+(*{_F9QV?U$eEa!SX)=D?rhO9I=&~q!m$e6A;x4zJ+fbG zS6E-^4wq_7l@trFI?;W94i!i#A~NZoDrIg?EzKL!E7~OvK%|(KSF*`pit~vVf%D< z*KtXETt@yMy{NyDGTI7+6hZ|75VC4R`vBlBnoczMbH3i*Hey=9!%M}NUF{pPb?B!f z+fTbJ*>T>Cha^WhC9-H^@TmmX7;W{2o~9zxTQDSV9Lv3vMZjb6Yu#cKLy_<5 zp!AuLA4ZMm&a~$IBprLzQOz*trvlWB2Y`chK+YXn!jIS0?@^ zO;%gYuB|J7VE_VDV@u2ER$3B=FZk2}j6U|4OjzufTAe5iNHfjyjpgO%5dfU7-Ad8P z!q+_lli?|{uID}GNxl=?L(vAU|7Mp7gR;3dJWc)(sMp62*E`_UY1yyro;NmFY$QeC zuK1~|n<*$DAB*ZB=}=CTTRYW{d$XdSS_?f5Q^X6uJ}B^?sp;y*IB|v&PAsG@6;rZ3 zhvMk-c${bV1OuWOoX}buCFSkUt^%>s#^F`+*tLKI^0P>L3AtakoThuJd> z)*P`G?$?IPBmigS|MYY_Ae;I|+HL@16r(4F4LUrpfIw6PXv};eGJjQ<Qq zY+gTAidfn$WnG^ZznkA>0<<}K?n4VA26y^RzvyR?@MTFB)Na1c7t!z(I+5_TIBtMQ zxUj^rzc7Q1%4a^*DcgL%1CM_oYB1E$SDQZMEmT_a<@>`X&g7&2ABXb}2h9qgrziaM z=KzQ+1-SL~Rjr{R2%&&fU1VuIoA(Bg3uRt);rUj|@m+TJ210ga{2u@9(An^{>K15h zFA_~Td$+aJR~&l)z8zrTEUqrcdt6pnSXg8J>HhWhsK?N8<~8}DA2%wgZDh~C^>i~{ z7#Zh-$If7U7Q4lHl~&#hkTp9*=u*YhEyjhAOwCR~(f2Sh{kZ;#vuz$ZFT%J=Nk>b| z%4kdECSw*EabyAl{B~YaTX@E8y!UD0=?BG0^_TzIl7YYsd$fqkPj)R4wg-?Nd^wsj z4UFG>AD#U|T?k;gcKoNL$V15ZbeV>p?#$%nU-$Q=-03J1HR5eXKx%W)O@La&h@slA zzeU}4V17vg$v6P%bAWg75hoLhUsqnQCY2#|w_iE?yc@uzd#73Zvju4JI}H)(064w5 zxm~#<)G1{zFWipc$qN9BI`J;inNs-%J8G(JP5ul#>NQ`Z- z7(5v+ceLTEE8NK8>7TH3#nW^Lk+jpJ@bkT?`QaLylq+#N5w7l*V;M`$&-Eh`fyZ4{ zNy$*|byw9Q5>rAY=oFOI=6=pTYe6IVp{yAArE}fLMk~9Tnic>@Nq+Rov9TbTmYl=y zu+d@j^?Mj9QW}uZNmrV!rm3l>rF^vs=vRTb#5O?9hb(Z}z3#pmn=#6!+hV^y&b_Ik ztb7HaQ;)g3crAdr1|@diD)9OOBG2#lD>lE+S~j)1grYA%8nh>ed4HaVo=Nsq_xE+| z@r3<+X>on`<{=$AwrZ4;P3z4Uzv>|sXz1!*$NR6{0mIK^uW3mfBJZVw9>YTbkl690 z_|gA%`WApKodMru0qEolhz!xZKKQbixqT68jlpFl((om}P#*ca#2|&GM1WX-3C(%u z98K660yY=aWR{KD>eesZ1TIO`B=S*I)`PDASJ&2!J_&*Wb`3jb)E1+OP#W5ou#o~1 z$`G7|TO_=PozTRgLX^8oQcJ7T8-Tm1-EwoGy9ef|G@zkZnDvo~;Vc2li&FV4cR(H5 z1?b}QJg*}Gob~A?1#)Q`Alml<6koVPq)>B^ffQE?($HMQXaMBeSfpS$$PsklLdg0+ z5?_nQIwZMOQXOw$VN&*Z?@X z!#p5+^@Osui`8UE-}#8jlW!@g2bin@wzDdV{j0ZSY5cTiC4uFWRoLgLY7A)r=8!4 zm5^dRVGkq_=0#M+RBb2qHr}T6b_6D1#>RdhlXG|t(2ZYbbzM>d72)=f!aKVlKqCfN z9`;Y92Y(JBt(`}Mt;DJzuLzM{tgeI7Mi$x?c^40RH7udmV18Gd)B{X($qau0VxLjx zfc-u-7#--+Rd%myaQ)Ly_%A(%h65v5a@TMe)Q(J&US4zUp5o@_it@;yyJEAG*N34| z_6GI>w2xJqA3iK~RwF06(*D)a0bm#>un{K`HR5Y6d?ND}!pQ-bb>cMiP*NEJmZ{)o z>wJ8TacKtLM@8|%y=AO~pgiAL#CLBL)MO!R;-2N;EYPw%X=gsIi$bad2fuxJ~e@TgdV z=|9u@hxp_sKwhxaY7Y;@iM{sd^CxFbX7VbeyOWTbJ0k=hGNY2tT%uMU~ za`%yx?rZBd3I?@;?_)8J#bkzja=hFpKr);pxUpR*$|0HZ3OtiV74>13Uj7e#fG>5= zRNE}M@r|&cWYYut-SLKz+rZ<+ZOl$LiiNdX3D&x1VH0d8pa>!bZ-7N~`yOC#zv<(7 zOVCe<_eyqMRS>r0u}0VckMZDcI44$QEAYb_A%s)ca#6?7(8HgkXwqN0QVk5WpLPD~ zaQIHg!2Cvpb1dj(4APcxO!w{HRcH7(%_gD0r0MF({^Iad3aBKL)Ela)BX9qf9f~-- zokATb)`nK3=fiD&KEKbdTfX$zLEa+&>T4|vRxPoNa>+BFTtNqo>FKN_o8l&-vCwti z{$~KkV0TV72AUQc>Jq@!z0vDbONCU_G-2Zt(((Wc@guMh3;DmIEHCrY3bzsiqSA=7 z**)Qx+ux&pd5O7kE4>PIT*$Z46%F=!boj_^sJGzp?<~npPy>0W<3Y$Imn3v_BWA%c zAp7BwF)S`IH8hZ7X$^&7s{mp>vw|gF9 z6tQ&tyZQVviQmK4c*}-vy(b(g2r`PJysWCKy!^-5SP9<<76%L_^eLn)taX@hwC&jk zr*g|7F%=yIa1C(wRNf1jkDHfc>W7d6O?wAB4FSQBF75}B{5KJ16He7iw))Kal04w$ zJGMW1Y%PwGih=nu_B}!Z`~y!n=G1=6=BE=G`O(SI*=7ljle-FWO#nL=j)=#1aZ*E< zoSL-q(;dx(>Zij<2y0`zma2Oi|J2-A9VVmvxQSG3m?bHTL?!|Snb=1uj_PIN;sQ>! zV77v!f19)U%s_Ki+`!kSla{@$(_ZhwNJCu%tsN|?XLDCNV;_wVu?N!)pEFocMQD03 z4=_0Zf$piXN^7+!yt}CAK;X&xtfFvi+cf|%-UA#WeRaKA=Q+G4gBI)-3PL{vMwz>8 zcZZd6DLP&NJ-yIFH;_~>ru)=~%y;>f|3ZQS5EwAP@pu6Adce)~fd!NI8}I3myUKnO za=d;B%i(*FQgS!J9u`aTG6ySAdO7Ia`bcHomqmf(SKtOb39~M{35e+6t_g{8~R4%eVoaHlfRI zNKhLEr9?gzEdCzW=k$CEXeq+Z2jeeRqNJ>#+qM84OU4Z@1~P<8vw%CDI@cepG}#ds zkjV?S=-vuP&xy68dm7Vn*1 z0`lHY&xxvc1HQiiqNc+4zn_sjop$nL*CB`!AR_}tzy|^*M3AXi@jQXdp@>m1=F3$V zzZ05mG1b|`a3W=0wdVujKN)2X{Tae{DF(J>Uv(SIk?4mKrHOg{oN>ltYlw z?kZ`(ws3)yem@9$3zIgC(#js^QxDq|8k|c=0`c7ZYDKFFPmZ+%CjXfdOH%GOoP;fp z{8&0K27Ev_(vlu(U>=WqsH7zKy6>!?&-sy!eGeL>KT`axpxbdDbH^ow1SCGDu}gsy z+RSyTj{UM*%Q`+UTHldvSxtEQ@Z`uWnah#xu8m&SN3siClX+j8WZHcBm zE^vNcspQ8OCDC#%dm>i+{RgVMzV6%*?=m~{X?QODylXQ#b#S?kkWpDrRs7wD+-+1* zO$0XbXhDNvIw};7`9Lu`OpGVn06Xd!>vosLKBgsAB!NY)%X<7 zEZ~xVgOo%_r1M`snv;-3L~OFd<{zAdDIreDO|{ioiU_ih3(*$_`eK66%k~a8*3fmG zrnd(OqdtJ7w}~F`U$UnISnrSBY=D`+pwTu+4jstqdf#sAV~ip1IRI!?VpX}@bNVHQ zM@IyXLUvAG!V3ncC^F%^+ndw7Hv;2^=MIh~hl1w{pI%}mzGZcJl0{+YA6yc(`gh$Q z+cY(C`dl;thpaO!cxjn$3)TF|Ksc(qx0&v_u<&Kng)$++fJG^wr$&X z(%5X!pt0>VXpF{aZ0p@UzwKY?;YiqhB#e>7l>?^uWQ8|V^x*?R!8CD$#L)0& zFNaHs;;msYcCc4HS8UXAOpHx_y6o!^2!Oij6VO=%IT#s`)NI|a%6li<`)^&V;&cLm z;b#$&@S1Lwp)=S+yI)iJQNGW$mG!I?JQdzPEnKqZLN1opl;ekc@BwvN(ol#QSG#KX z^A!z))V)oC%$%k@gj<241J0h(GFK0HFyoeuKsNqw85^i61prLDK*ebr7%ZgZyiIV2 zz6S-+lDh8G4{fL4Xxd`yW98UHL8gzF;+osM zQoB5Z&7M_`)2hIa7YP8wxCO)zeZ+9~9|)_^bGQ z1m4=}(xLXQg)I^7*4e~UZ`M@c+^e$^o%;uPtb4QUcigRAJZ01jZ20rBQmV&EC6Vhr zK1IPp?QFVqdVU`rB!3Hr-HzzCiwa(q|HSsIM#S0J%#5AwDV1J_)pIA7>QojlOq!BV zJ!?-YNKw%h-4(@wmG$0<#W5o@sEq0$pAq%KI=Fi3f{LmrJ%JsT)(Ac@;UegZ=R~rOw3^N(MNIde8}zl8Q48-h zPaCb*ED_=A1e+0+!?PBCU;D9YDC0t_^@tAdUW!VpPd2(x?be)-UdTM_ft$_CyoKmk zvFmnD&lLMJ-%4T;wSzX=j?~0d3^aSqQdnBz@1o@gVz3BHHYv*1@L7DAJSF>s+%W>% z-$<|$Q!&;&nME5)>_ZCnHjq1 zlNN7T8ONIQcD1hyb+kY8AQK7mVs@2^8?_ZUOEHiu*prWurE32;zSHwu+EvqWArpr? zkFL}cCEqJ2ofE3Z=mb&mpR@lUz>te6&A^E24Ze}xZ#g+OS;{D69ESXU)45dfTS+I9 z8I3x^JrrSWAg43d)B8@``ycuVHgvp2@Bh~bzlH%usD*sQzn~1R63_*z12!_fIW1cc zE~ctF0T2)`|7J zZy!mBiN22#2q~m(t#BX&0k8QvP!SYHQI!p&e|<4o&~`#h$2oTIpq?soXphF*>4!x> zLE0xk@_Bi*GUS*_zI1_u*!%vJ!Wa)sDh1mF59|BH;4l%S*biLprZH^h_1}TeiO|ym z*sAcFfgos1EG(hDgY$}V3lm!-vw(wo@Bc^Z!~(*YqfDWzGY2~-23XJQU`3QvOBbr| zxo?W!e~wb-x!}+27qSxc19EJ?^E^%>6tK=!MTl7wQVgSmfhepx>`3|EuLg7*qL@8- zAWpVb0ABibgd(Ru1(XyNY`L&ts`M}p8I9OP%BK9<6b!U}xmrw2LpWc!<>Oo*@vrE^ z^21NXR<(IVF|Bhr)|=jP-o4m#+TlC&rOGZnd07+RE*&vG7;>N1uAKhTv1|vOrFo5h zOF%`yE1;yETAL;PB>Ph6C83fXuOLJug)&703AG8xdUf2)cNLo%zaHt`>Dc##RAN*{ z)<|#IYs{0X1U9M;e;)xT&KchBhXhipG@TxHQ`a4yP83}#Rfk27gEr=_o6`>anGEK< zUv^XPMQW2N#m_?kjv|Q?c|=w=hqSR@N`)=Og&nucUc>Rk5Pm*SUz>^uqoXgV8Z^Aj?l<2mWp)le8|9rabQR5~0>=P;zJsFkG!333v zLV4MtZo8VQ0-4IcGad+n)Ma|0E#fR9VXQ69e5XH#*3NSq+x9rw2WkS{@@#Fq8)8KTNu?^19K2*f>Dh*_*lKh$D)_{QMu2TDg-wLDQXh4Hxl zC{j)FG)RZdLP`_qXSfDr8@I7hqXzFS?AO0Bt%N6v28wRC-ET2$uGZZJK0p)LZ}8o% z_3={du-aPZfIP3QKds%dv$1_klhx8%;mUoSz3Y1OAxM})ecgQjYOoy|qekDENTx%A zPG0j%b}Sf{r|C?e4==c#!RJ6Gm+NeG#m{L4|8^;rv9=k~XZMH9S<615DRH*%;DM}_ zW{c@387KG*!tWcUnh{^-Oi@ul|M>*8LwsP}8DREhVUmG?ikssb_IlfiNJ0Ut5y83Y zr#1V@BmO3El|G4528e3Cx&m3yJD=-mmtqeLwSr|v<{=kva4Fc{Iv4Z*s`foBf-P+gigU{}X}pln~ApB|HpDrFa0!`S_1w8C#t|A;<0jX!XpY z6PzrD@R4vS5s#GB3U~@|@n#dr8A*O*o}DRR7Q}TVk&I*2-sfqLE{xEXGIU-9neTeB zFV3D$T~suCv9W<~ejzSEH2a=2%?}2dT()ys<4f4IzBWa(an&6l;KX&h2;@_4dKr-+ z;(}q7SBDia(U_n#F*<-OEl>&SE!V5{9smfS#8p1^_o@i?3Ciiv(R7kzp&A&BFr+>| zEERvTtIg?*^EnOb#)-fhoVVf4+I{A80En6dTR z&-Pm5=z5SVACMg5JAm0q=9Vj*y(FF5QTpmwRP9!D#DJ-qbL+mT9peUK3zJX+Q_*Vu zb9thA90rQG4xNI?cdwZOr5WNR+HZ9ZK918c7xD?EIyliC1a&9)J=?9o<8teQo*f_n ztRjgtm}<6HsUbVGvG91F`zlI4A(Eu2^>z`>q7IW}!tn62b=N-_7br&my8UhJ)?*uA zeI#&Bo|7tr$aDSTJ$J%P!7s7ztt|&OC=M(-l2rc~7GPlk(nNXrMFyv2ZsrqmZKW6c zyh-VBw316Zrpy{s(@Wv7`dta{-!qc;k1O>*EYuoTdzA1&S$)YY7)>oLK%Md)Xr-M;Q1#Mhp(63$=LI42<2b?ifwqI&m*w>~ zSk3d_Tr10#ZOjg%>};^SOXT9Nr0#GN7ZU15>ubZ0imH>y&{P!30osp%kWhjz*Lfbe0_SP-!u;2L>SvZ#*y^4U1aDSO zBQFUF1vd`nFs*TgmH9_KC$y!|T}5K5y0Lu~PGfNsIhw_eBf3{Sw`yN($BTW(IO^ny z8A4m)Q`czk9OPiplkG;93N^G02*mDZ`bQ1lV)9`#uP4X@e%mQ zTkm9+e{412&pWK3?-sFZFD%Us*g>}hA$gJ|JL5-<{?|9-YZ z{ewddPA#n+yTmz8%n~Wh@`%EoBMoUv*+d%}8gX#2G0o&rWDrjFW7LY#vaZcWpakr)00fI6*XImGF)0b< zp=7t_85;V5gL$0#RYY1f4xH>kbSYN#%7jNDZ%YsZo*F5E-LY$Ic*=d8(P1$bq4q5P z${fq0tI`OK@}^38RI=vQzfR*m{t!oe}|M$oZ00^f;MroXNIi0#-IYI zBe;pZXEyHnsKx1yA6ad4?g_`%cK--Jx3PDoi@%B&Y97~N(UNq+^h}bNi9Le~zqC&2 zuOB8T*c+KCYh2?-8qm0~XPv zmQoo)RPeta>RA60c@^!{80#RLyygWSxg9ZYtZ^7KPGbbSp#qb0zm-NLI2=D~2CzVz znfcqVw%a&DY>jYzU&;`Tf?{qyxLL0oT=BAy_nB{^xEk!|;VItV+~8A+u<%x&)hC#) zh_t0CBrKXd3s-72S2Gt)q+cuqXOs56Q%iy?it7-Cb%xf8y(++)g4!XOJaouAX>q24wIHs45y=ty;k-elVpsmPbl`(|a}Y&Z!SCzu0{ z3XUL0blsBlGeTEUZej30;Tmv1gVVK$G)X| zQ;{-)H`r%<>-Al}ZEjdf6vqo^(jifgQWlEeRMlo=#yidpgcxA_7QLB_XTb)A6LZb) z69mUYb0&&m#qW?4st+z4MA7vDW_v^Di&qY+%z}I2Qfydwwqzo=-e|I{&*Z9=lhas{ zjG8aCTfLwAe|&rc^kvgfOVW2fg<=S^jii;__jp^vRVW*+CyI{#4^VwfkllCMHLap0 z+&#GU5r18lDipwFIk!~Z=Jsik7zZ1Nc>2pl?1WYXBI*zkzZWVzqlL9pY;W=M^2u$t zyIk)heDlo)q5&Hu2867$s|lXiL9MFmW>L4_q8JSN9xHjWj%!6cF$!m*XMjWdFk8p! zRVFOz;DjRq>+?_c8JoDSF*!xhXMR<(!^6ioOf&K`Gc(Dfe`@`XcP|m`}yoRyOYc)CD&XO0c8eEZUl7A)BenmDSetz7WH00!Cc;i%vWIE;wAFEJ1DQ=pFQkHvrRusK$Adehk_6b%8 z7S42y@|}CwF}R5+x~^|gh(2ph4X^6OcQ~y+QEXRxA>-{hFO&Uo!6b~rK)@W0qW*~nYzabpCYBAX&Q+@kCez}DJP{J=osk=2 zd$J8@d(hy+$@j{^)cb~6ETpy2Eh`$uI4j=$d>!wX0e#A;P(viS6si_JRiTZU4y})F zMy-6O@6?;Q4lZqR)vTP3ENSiX_o6^`7_l$r?pI4dEbVh1U-O+F=-^m+#B8{|;mvNr>|EvpfrFmlN4P z5a_*DreG=o!<2+DoF#cI@&~cirrG+#)gj+6iIIy1TVFbfRmKgHM_|Rd!Uf|?rR`L> zIDH14@nL4@3@mEWLNe2n8okm{?Km%SqlQkd@1Gg7btUJ|LI#HQIIoOHE_J=AOP(e5 z&LkJkoQ0I0qpafCep1N73>A=XMf?o+67F5IE1d5N5rtR*;fMX2f&WG}x5IQVleC!F z|53o#H19rL!-hIJ_meCDRQ$*7=N-aIntyqupNC9A1qC}MGhz*{3ldsZ)$|MNrIUw4 z^bO#i6aWrZlD+dgyIeK~r%23koN~S;=vbGBgwC~usxFnB;)Wq8CYMR3`Ip_sfubW3 z)1TV357A2^OT~aN+Wfu^>cwlK+}=MV+3@r@wv7f4?)5|31gCuGuPoJ^DY( z1^mz8(8FUjozH)n=|BE88WwP_Mu9pMnE%f+{tkH$KL96%`{|R~-!}74{9+^wxVJR@ z1*yNE^1ln0$NhVQCVb~U{q4yATXpD8Ly4baBwuv-_}9w)^Vh$~gQ4M-|NnbU!Dem- z88tRt*x6Z}6Kj1UCS6dK9hVi|m8)3gGd1J8is`?X?vsR|u*jUt0cR)Cu`CS}!Uw3u zL8gev7U$NoP+NG&N^yOGyPBJP{qR@h`B`^2p}@=lI2VDPVz}q_hr)CXbb=>#j8@&d zMk$EIOA|&^gq?dZ&BR7;E=4+Lu~F=Q-UlUMnix0|&YVZIg+fHAaTI8SI56Kr9AyKh z%>yTtm;*$4QR4={1DY4C@)P4Gc|nS)u!dIg^Tcg1g}SMQc4;|OAjH`|{@K>iNMJX= z9U`%r#=$^{I}QRvLPk!yX)H^EeH}| zX3e!R_+x5HQBN;Ul#-#S_5?orFUtx|_#OTRmz59t3;sB39gL1Jk_B*3nq8<>7YAn4 zN~#dO4Gk|Z(_gh#zyofnk|?yoFxv6Gcf;rRFfmpQ>_@MM9((f@)!gm?w(=Uy7pqym zjl$tf9H*C%19?6^zG?MJCc@Hf;r#fO8;_Mr*}u+Oz$FE6uAiSI=?J1hOkoF&Z8%qd z{_Jo8sC6PO^*qplV&+hP1o|{yG;&~_wIuNvdd!F?jlISf1cJ4tB@H#Jy$SOQA}|Qm z9z?3;^|(<+o8@{q%a#o4Kg&s?814_Yhe=ZS97*gy>pxoKGZg#!>e~yKF>QaQH=ym0 zcZjOr2yY0QtY7YgWtF)`ZukVIA+%*qtx?YwXtB2v|%7vN3%tb#Y{IEqo# zy(&5V<(XIkOOf6#{$U~sf)1${n$6?Jyu^dCHe&+sx((*A?e_D@tq|&+A#8FvoBJ!R zxRw4OM1e?A85LgC@)D~_AjWi*VyelHv`agvNCOQQy$5t<_&=tc#|vwIDC%(=rTGaA zv~tFrHSixQ{zR}-|+Hljw9p8Ig32v)b(dzz-EChRB<0_oRpzI6G#K+}j;(N+a>#>2tyS4a;QkC(wr=*0qT3;DxwR7}sdLtJZ6BaM3sI(~Ovu z;pG~JwI(IaGAbC4EJQCF%E;CX zZBdQx(E<6vEgN(5etA>UR3flibA*xZ6xKwMX}X<)W`gmvGUd_&Jw`@dThq;&!aYx> zcTa@_6FD`mJS9BT;P#x2l`2s8{aZ}zRbw!4McYhhd#(nbChgOBLI>4+ny~zGQK~_S zC_@L{7bO1edQ2n*2@y>esVqNQK%`~Gy@Yz4rI&#ZXk8X(m)Kh%h=rCqaDRyrnB`3qo!;c^7BC#2h`kDj~nRZw&ee+qbIeUFNnfwgZ`{^kYQkE#(NIKAk z60UDzQ6vt(v9|dWF7xf@A#72~$E?OFm3l^2O04A#np))AFB(RmToH7Pj8I@29w?*c zA)nLj6%Fw)#$t?*XR!aal~H2F2635P=K#&tQiz(FaTo_i^U(UCVNM~F=DW@(K>3yn z;e)uzi%bSzn@tzT>0L@wJJ}BmAqPhG;u+xz(Pl0J^U&Rx_agBTpvtAP9aphD3?0{r zECRQ+47%51jwfrvA43qK{f`Z!Z%0>o8z>R&GbYbDdG0uPWTo{y6Fj5#U0*KRB}N{J6e~R}lp$ z2m)2SVnFiXYnpwJe!Ln8Y*W|b9etSvv7lX>*poM%`LTI0^| z%`B=-`+5%^9a=h64cQvgLn+^*VuKBCuW^c=Lkf6@zJRl-*g*~AzHxNkt$l!3ux9G| z1&WS5y=d`v=l6E^<69~c-_8`kU6WpRHY-I5erZu;XOq}nEWp@(9ar<+E#_8<{e1kO zxwU}fUJ*-M>^&16MerVS)u{OP`id43P^U|J1M43}LrkD+RnDR5^og z2-G6S0s(srs3P2jxFM@8HgE%FoU6=0y6<#dZ!c%>J+75vxdEk#w$`@ua>mkYc}saK z>lp~sQYPhX*jEW1@HGr%t;%tM7JC1n0s>oqZPk+PK+tpkyH!2@w+DFk%60n2j)egOJDF85*bPT)GMv9aU8q0TsT-&X&T)4W7eG4Uyq&m4;q>3K*v zhx}Jri`MuI{ywC@aq1FdYP0dBzC^4VU0fx!!9mlXAldGv1OhTbbIF>E08#3@d zUGv*vB(@&fxX#!A`*uOjsJn z_t$mZ4K6;bt-Y+QzaA*~JpyDS*DZce1nBtBgNBOV(|M2$z@nJYA~rPqNjo^a1dK~G z_3=E>ncBO&MNsr}B!@9#J?oKlBP8^Lc&O{vcJ{bD@t6W}_IeeMUE0v8N zSNjqfnH^vw=g{g-PWuy^?cs=P^|6bw?|4vX%^CMjhXtw2Rq;ZeSV3U`Cbh5DNHY!o}TV`0T;1F=nemvmiYmr z+{)UVD7RxCv50r`!ijP+wCsOkW-?SDK}Dm-q?Z6wzc*T=J@y-{VuD&~v|hS=JgPQ& zK(7X!sj```9HVcuR@<*C&GCG6>uU3wW{SF9GJCIQp10fde2hi#zJ{8rOaHa=%;(ID ziJ{4EeL}4rvwbn3GSx!+mk6x*nFcs>tX6+UgH?KEt;IIEC3$im0M+)p=UE>)_!6)D zc7g1d7y6k-jag&+H{Ri)By+y=7LQFKlYPMKhGoC~spCRUg1`epTEfeVCrsTcSD~v0 zjSRJ>JgI}_ApG>S3g{{UsKjzLwT1c2Qu=gY7hYEP`P~3wy?oGV2aJ;K<|ti{hdFFr z_kh=dL-PIa02v{0C~hU4KFq#9JvnIscrKOl(n5{q`5K&PILQe-0Wf65t6v(bvGQHs|Lfg*HT*km&k6mj9y&!0bO2^|i|QhyhVtG{~RY)TMv zZ-u*cJ&)1=?Wl->$4P;=X950m5Cb$Y)?7Tp2-0=8S%3#2Lc*(mo(QDk2?RO_s9 zdwg_LQ_#@?CIz=;nKBx`oDJ)HKP@F1&_*84efuHWjA_+TgR0%XGd~g&lOSlVzdOoS zy9hGR-y1(21Qm$SVXfPI&Id4A!zi0hl^zqsd--}zZqZ=dX?Mj=y$dkUvS1YTydO84 zd`tCvz;+G;kW()Jd~Uto<`)6iJ)=jkz@Sex-mh>S3UmIZ(} z835`lu#_5Jnaav-J=M~0vn^=fguQk6JszjOxxPLqm&o>%Z9X2^dEe)U(ciB^Mpd`M zIZfAHYdlT$TlF6|IlP{y-Cuj;>NeTFFulL;h8A!qX*>eD81^&BzW&Yr1rC6Ui<_&f zuFIUE_K6(;lPLu#ultd6z2`N|>{gpMja6t)4C1ieP7GRYuuxS zuWh%jR%gvGNFNeq7+#R!P#}r$q6`!+?8Y&(q}$_8L<#v}V*=xGaa|i}$=aD0x6P?n)G=V{_R` zQ!`_d=Z^Prw-;c0z80V#_yj5jJBiIrNr=osw-q43@1JoFxL~~W2=EB-$A)Sj8?&dz zy0=~Q-whSkkQKYOm(KN{FLMCOW+KZ2evg5X#iX?$CPwaaxSGwM$OIIX(h1m!(e|L( z_5v7vl$DF~Z+J^32lE^KO#auP(1iEb+i?aPHf!}B6RTWJYppvaxzEPSl?QrV&yM75 z`X0>vK)}LJYxL0l_VaC+6dCC6OcR(GCy#F`hki?kcIbs2Qg$4S*64rW`PB_xDwlnG z0>o7*xod%$FKb?t=>m4XKqDInPW;Z6Tbw4cTHf;??5L?#iw<|M=Zv?Vwp-omdcEv7 zyAvC;u zZA*^g_&rfw-p-)~v}?T~tC)WB{T!mzygsq>^BS9{0|cdg7TVUtotwVds%4VNS3CW@(RZizMSafGDUpbASkr$o@q_{^~RFU-=vn zn3t%aQ_USrE)qR77}>*OoMVs!efOXUyt$>dVI;qq87sb1g2OS;GLQaD1xUl+`#qQX z6@Y~D@xxcD2mC^@tu*WGz@)McqEaA`%zWJj_simK!K4UjdUxKKlSA0c0U%nhw%@KzEF|a96TyPE3j9~S_Fn~)eisEDw`-Z#dO5m} zdh2bQTMXWt;P3B2(9KkVrdR1=6+j_WOiBN`HQ>&X_Ec1Xe+SV@MHqudl6;Qq(%_O% zLSDdlyxjP*_H-)3UT_vZ>`y!390`u(zViHV#R=iEUG4XDw1Vt4G$e2VdrdAs`U8`5 zHp^vRxj( zI?wMZa+$XtefY1hcU?wNuJv}Lnjc~>7E>g_cNo2LaZzON?MhPiObuT>t{Bw6cLNR* z(Hj`#p^(kEKCGYtRPAG{CgeZBg2|)F#pB|t=hLXtHWjYAZ)d8*nzSPo>?*(JEszO9j{{*&V@H|4&d8pb??0N_ox5;BuOiah{>F9X>wjU=FWOSfS!ffAXPcIyB zygVo6IT)R8F1w0W-F|K8riL9LV52g83H=4@Z%}~>0Z_`rTrjb;CqwP#@0WO&>!yvy z$Y8;JwU1jZF4ye`s@xUy&9k@$C|22&I$d_lUTWN3N-6(=Dq$nM6WiJ=f;6eKhz(5Pu^ z7ngiRAiEU%O+*MB3)R7TLd3L3+9WQ!HE*wmL5%U}>25ewAZRg(i8x>>adW$4atQ>l zWnAG|zK9n9oEYwm_yQvnR8Wuq-9nKhv~0f+!5)?O@_`wF#}2Aawoa!6c!j=v4liyP zd_SsbVV>*;WDoH-vAgreOeQBNeo|STfaerC&V1*Z^AAT7-ut6xvgzD6tya}!TTnlc zh0$oFQM%B(LXBcI>eqekM2#|7%zP!ho(8aebHJSGw=lAKoCXn88Cy;>tn4k*W(hn1 zQ47_t?z{DIuSuvWkB>k$VxO0{g2cJeEfy6^JWL5n6pj!%1NS%^d%~km>2f$r1w-KF zuEVYUC$j?*6S&_|ba?coSRMoz#M`76ULSJOxBS}8!-}fGS!Gr$!0fCe zwc{G?;u+A;u$J}XaS0S7D{YX^uR1l)z42r;nvM{q#At-vn@C4LIm>0W0NR-9iKnv> zkWTwszBNWe@(2sgM#98KKDU|3%n?G1>=iL4Px1F77K0pdvAB(WYs~3E=nFn062P+Z=rD`e=0;*YELD(kBX*Hrv1Sv=F zT^5H}Sj7G9_8NXKp$%X85iSjwxK%iXJ-t3uZ_#|jqDy^I33)Hf6%bTiCFMRtv?bj8 zoq0^6=Jn@PT_V+LUIY{{l>I|7tknMi8`<>E}Q)A%Ly=KaID1OVG7A`u!)|A>kN zUGVbm9S`1Nt(g`l!CPn_fbsZ2k^4J4!J_x(aA8rI@X(@=>)d?APhj8sp6hohMZsik z3xQK zyKMWem%KU*)?e`OGR~Ft`H`4N?=l4LI=#-GfGDcLeiL#BKOgH#Zjj-(nB&C7=fe$Ij9QsLOdtf@meQz#@MC{sneSjdti0Xs!Oi53{q@ zqbjEft}u0K=`qc#usvI6I3@Vtd`D*x3rrWzoFv@30dwlKTuef2$6+j9ij_r4GD zXu*kldwe51v%c{sk>DLMMXmI&-_^igl7^d`w=01+k^W#np^xZ+l`WkSPVZq<&G)(R z{gCHlEYB^cJgPmkXo-a8*Fm`aQRP@Xu zld607^Qh|e){h?`t#ziav#4*}wY{!HLj7wKC`0{u@gnn!n1T8&=yB_s4vz-UdExt) zFX@$2>ys$XdU^_#L(S|2F9CPJAi!=VTeHmy`y~_n{$#G-%^Wb}JkA1yi>TfkOvJb) zrqLN7F%(&jXr~Av@(~}qr|#I+HKGYG>T+KQ9{hzaZ{_f(F&JsrA13;m8tn#V2;V}) zhG-vm6ZNWe>TcVwCPWmQH$(BU=se%gAIH48Yzw?@3%u-cH1S=YlLki$ngausHy5w3 z$hn@>`(g%y-Y^gsg_N@pyU5}o=}>xT)?NiV){D&vVkGMNffEG`z-;N$cZe`^gyH^U zW4`Hah1V&Ls(UC71R7}qr|~EC`Q%@D&zXE}F}fu*^863UdOtlYF3f7aB}pNo_-_MY zEYBT6tw1J)y!S%edWfe`h-l!4QBrwC*-rP9h6P{0Grm;a$M@mr?&5jksJjN5S}VJH zUEZhd9`|eru87MN{~Nsu0>w?j?wNd&coKj6?#kd+$zUpkj*dZG&@eEdnuBCa_zDcJ z4?l)Pv$J64>MY(O$hf((REnJ|4aI*-3y!r?6db^cjrC-G4sfqR4V5kp`ua zD=O#kv%!H`MP?+OW(G8}LJIpIZ}1nY*Sm2Z-gqwguzfb+pH8~oPrtU`P(`;2fxuKs zLxk*(rEDH_e?Z#eVNUTKCJsY!J8xU>I0ewzMz{Q=n{}oWog0Dhu>za!^TYiG4f~(` zp~muO6~I{SVW`0;;2~za=XTfMUe@==vqdB-bzi6>kxyYIxe_F2u<6^+uUX_NE_;E_ z(80TFB2#tkmV4=xT=f>mPckxBZk-+OuYr&-h;j)qKQ}D|$?;(72<_v0sPOm6vjKQ3P7bOo zU(`ni#s6v8it5{gu_44F>I!?wkZfE!&)AYh%RcHQ5gua5*&Kh{-1>-Xdc9II5{Hb# z5(L0V_a|6lFUshY&?VI}Mt7>IbWSqUmvWZJ6`$3uISY&q4Ad{BDxvT{2IzaGIl;im zmX{hVX8F$4;Jnl~)fiu{jHl1wteP5zq+7&Q2P{R;MP5wW2!gS&VZdok2UM>#p6T-o zpp#`};(lApsvO94+AMYOIG-_x^9A@-BG4~B8*#<7w6(tt*UH~yIkS2^fW zI5nRL%?OPW4}u!qN1s0}u%r!cKyCBOFt`9{*}OOrvRR2&}QMNH!KN6T&bQV z@{Id4GZPpMQXgbR92t2n-{NpTzXMyz>WmTFSFNU4??U?EUUxx#2xA@!W$d5C}rbBq4+daBH$ z)lOp5yBWm~^dE@50=a_{Lyu5bGsA{$P5UIDfb+|iMqGW?8SWKU^e7KOm+pH)JxAm^ zcB9)bRX8G6M$kY@#cbIZ+#EowK@aCDx5*Z=!}18EbNOZ*GDOOd(W~@?h7E;(Kq?Ncm+$3KjzWlzXO(*;aIrCC3#(C>V zCaK;`4k0NkK}W*OGd*iLqW-cL?}=d{Uk@#=5cF^;uI>4(;n|4&c8(Onqo~i58|?j& zcF`@Cb~w2-V7~M}m?mozQC@lxu#tIASV@rF28trkZ3G-gY;omzW3E1fiXOj? zLDz5Smo{_Wa!a+4Buofe=+xgxO3I9WX>EG|EH3Y)#0_df6R}l@`$CI6$`U;)4UNz} z=f9!C@J2;lu43lgeC9>TOztSNkAc`@OavV=kP{~Q`Jr7yt2#@-t0kbiaA=8sSXig1jbF{$@!adXsd2}!q$0OJcKnX-;w9J&vNv=Z~|t+Dw+W$*2~4Aet5~vh|ROxP)PC zTj)*L9=DDi6lYNs*b!eaN@czQnMqa*521G&_8ctoU)OLJy08?>FHxOuz;1=Rba)}E zqPi2D)1D^6uF(0@WK|r1xJ0N>y_h@vQ62{Zg>QA;BJ@;ohBq{aIsF+i25~@}StpJH zq;Q>5PILrED>cOsPy35(m6Dvit!aK=1y!zZf9}9I*JZYA`N8GixIRW(7)f&+4jr8i z?9m-Cqil9oW&-M`qJpRNyihU=aZa|WZHR*n%5{mn0@&!u!IfOPI?1WDaoJh|hMbEC zF}1%i7oTMWl_{v3&So7&fDXPDIyl>p+1U{|c)r?xkbK1Ne(bG1>PDjx{hafN)VWtP zLhP?Fs8~2X613(P76#O!33S(D#fqG)KuvymSu@4!`1I7)(y{>R6z(cL(nHBOyBKR5 zO`2PD)E0}rf@)EZM%gqT{;PZP|3Ik(A*iE(#?t5^Lj$`2Xf!(cq0vn~CkkHtR{>O$ zLmpS_SMX#lLWs%_!TsIO*lkr5T*d4$zU1zf%0;jP0gCT<+)j(2lHvK4vhSl~7GXTf zgo6wTOkLi z$|2<((zsrOqeQenCSI@T8+@$_v}Ke21CbA_R!7tPi)zQdf=5ZuG!3S1l}7J=YbVXutHt&UP{p>lcC6^^<3= zxUrj^D|9K81sF}^-B%LR24SZXTYQUMEQ;t^Q8lmjs||sRp7drF+H$r(xz0w3ne-C; zb6^xr0GFYn5q9W!i5`EGm@9+1n^LZvAnCBVEyMooQZxdvOQe0D8vbwVlA!}sqM=^ibUd!ZH2=Ng z7?EIp4OH}UbK%I+zmV9N5lNG;1b_((fsF?0xo0(neayI&rVRX);X_3 zL`j59ZJOD!qM(BEgAFquoRe`lAnKntn-2~Hu{96*P~a}kMJ@Hg#5C0@vK^f^s+Tz5 z=e9ibWb7!tK9)7w_uN|i^{nB7MDe~CXfe{n{-Y>JVFlCb#jNW8LHPyLlIVkn+}_*?inba-eDu7pw}%`rDO2T1mcKxX1>(l`9I*t6x+%7&JI_oMZ*&}xu>bar-z4nkprKFlxm zm}+)G{qXJeS~~Cmsr<>Jxxe7?rw^~s z`y1Vi+A-0bbyrP}+dxbJ*C3x!Z?G+n)w(m6UK2k8)~GI~orFjAJNxQW==Q-Ox6%XX zzv?Y!coT>f#zT^?_3!qn7@uuaV*VJG;>mB*R!6>)kFG?i`WnN^;dZ(#c60$3JCr7p zFZZ7%CCU^e$ysc1GBYwF)kWYHNI+jj+o@^clK#8(ddvk_k=KO1ij{sV(*%4a+w|(H zik@DZ$yiB%VD#O-l1;EY`R_-=6zq2AuwGw_-Bv4V8JS2CRJGribJq*XkDn%5q~6Gw z75%dXUm$+Fw)|AbWyvqjd-#*-JZ9fB<~sN~#*1pi+Bdnyk7vJf4JQLu%194u4Pde^ zcc@%kT(mn@aR+zl@}mCjWZ{5=eUlslY4wsO@JIq3J@(JIvJg()wbiv~BPCQ|mB>h~ zR_}Q{?+?8uVQY4w`Oj6kod9yATF}JK&h}Neqt&E0Sn>lJ5`_3)mMM+wSLbTK^ ze!nJ;00g;wR`co2!qej;9zI??TDVEl?gR*2edqM$TUltb@5%fVmGzNjPSb)F$dT_5VOP@>*eog*O|l7OVjsb^xz- z&xYd$MHss$l=0lf`=rP=fsnJU4zPZuV38Dh|53>%%mD=*9UWa=exu1$z-(#iPc3vf zG>XLWofQwtUkpk@pfohiq`@8`P*;{`Y`r-?ar`mn%(JS>1^FLkvroA`b;*!&(DAp( zt`b~0SnQNYB*yvRe8VFf6{f^s6&B$Q!0I+aw9x;)+)&A+1k}0wL#5Cu=I7^_v;v{< zOnNd|6R_~CQ_{H%$W@xLH&29;7^#D}*d@$sFk8d!4=T%_z5jv->9+%=WX3?gQ)%#1 zi&bv`qaw(Q+SGPDR?pYJhqDgR4`Ww%_Kp4IjEsc<$<58}Y`MW|rbLbs-p0m;5(y|5 zs**FZBnJ_{)`bljWzkqnu1FsrIO-*zz_*u%ohlW@e_tw+||Le%Zd63N4-40}i=E`*T1Tj`GOyV6Cd* zFeYAff48c-NgfoETlJy>_UIk_|77XGKrD)SY`);{rm(%2O3kVm$G3`!H+;<)Rem(K#f%weeaGP?j;XpKf#BP5*w zx|OrB_-8!01e}lNHDC~tm3-9IJm76`uy7%lHa3rc-Q)j(48q(t&`>s)QYHU?ZJmod z6Z#*=PjzyR+v%pV>5xl8GIkgZTXB*dY|1rrH?(M&m~2gma%YISgpiX<6g6^-+$NVY zjDkN#c25zl_1QMN?%7?g zVcM9K0}`?#DLQh%n@09AU_Z;ok?b1m3f=wF%>4vGTGgXT6vbECs3xs}GRf;G0~q6! zV6fqJFRztz&S!-s`h^M@kwOYWdN1GYUw9@9`XPMt(=D})d)va3&l7#pp0veG3GC*S zX@3utZz(f%^{NuQB>g*NKL6o}xq64lysIOoOvr_GZBbWa;7;fG5+3vfVlNecSI*4L z4^>=osrAui+F@Fq*+_lOCZxUPvdInP3A&|q537rF@n`Wf3Qas~YDsXCb0JvMNK4{~~N^63|eZD49 z;m&J&1p5jwlRflRu5dGzyVdOlk!jG~rzVDr2=Ar%7KXW+t~F0H^~og&2@9`Rb!gGI z-UWmyM5=XV+3PY5ZV(}X_`K^1`ymNSd(b7%)MqDA3rF=g`*3HemtGM^<$p7&A#w_t zcHo4Y>(!S$9^lufOln_Xr03Xv30Bx-Ky<(C+`jHN8oj{t)cvb}Q^VgT5a(~@Jn{!i<=XDr z7qrdtfvT+K#HQhj?x=QG!M}Z@pNHNy`;hG3hZ6Xq&ck}XXXvLA=kgM3;kre>n-dzA z;CYZ`(G9CDU?uwM2GN6$t1*~WSyU}%xo2b^%duC)Ap@2t=G@g(uI+%7sex*Ju%yyX zXZhhsLl-BN0FlSZ#==*xhut>dP*Z&po)HnVPc^fiTK>ON{4)iAsV`{0`}rC@?`WMI z7t053+lWD48+8ry&!S+rA)d3$~^|T^i^>eb$<_~{O z!zjGG8JYISho$rt`p|fMlTUYQtb8_StZOkgyC*Frrq%+6;`i*4?<0Qz?GW+1HXHm& zEfy?^f|3Qbh^pB-ZbXQIKmVdQaK!XnPg~eTDCQwz>hWl`&?mZXG^uhKslr;Fc;1VE zG4EBxT=@?{{I>@~DCJu&3flmV8mW#4WNEuOfpYz>I??^sx5~6ZvyRwIH^U2xvnPV^ z;oZGacRVV8gZ-MXZhn0;HX7WZ(;S+d)3rLx#`q7-aSY9}J9O0MP2R~#KH4b_=a9{4 z?Mw&zZKk|Pp;d@17~(`yNj-qlY@E~UHs&Ug918<;h0=L@6Qqci#oodpi=lW=r9IT> z@95V>kOU%?fEfMQA}Zsf8xlqR@yB!dy)v7jn(;L+4t3EAI5g6*{O1P7aA`2_P3{_u3=UjT>D z3k>;y{2d*~_T&;%qc2u%@3-q<5(R z|JyFKM6y~}B<1n_%Jwq2vSxL_V3oz#5Y_TlR+b)uMqaPOy{C*UohaSAGgCS?6wmUrOOg;kYs^95 zCO|C`Flg48Bz6_9PRD$8_3n`su{9o(0Pv16T z$;Kqtu2?Vpal~|&^TGCveh^dzE|0=3KW&9gm$saDseFq@wLe$^4d|&4QHOaXc&J#6 z%0y02uZ_V!s`U3<$!~0%r#b8%RQm!co~6?i^3Z79MEIo^+h%^i*`G(sG;UDh_GFQ% zC`Y6Y=2&%Xs~df3Oy)t+a^o?rqs<@(Z@IG=1@H6Gqx-TU)w;=x^!prVFB96(*&I#F zXf>ItP<3t!!ON`ZUO9gb%1rq}@Z74#c-xVRBT!rGF%wIKn^zQ8@j>KgIONGm+T3wd zp~xy}lr=P0>8;72CfkX8xsfcL5Lliwnf6S0ay$25wVWXE)(tw~-9zlZ>>vISSYYaT~1>}HoS z_`%^E^oz9ot=p&X*4=F>`eQ?2(HNM%y>THb4o zHeUhQ1HTiTuW<)EY)|-U#}CMcAM}k2q}k^2V!@^gfe>C0Gv9cme5Xj9@%j)s-fR%c ztIAoPpNY`bX0UWI&G4nfQ-tz6Banf+9lp2Fd^ya8Q@$+B=+!-^uQ zd1R5nN{q6oVNd$?&}Tt#50(V newh$L=u_MOB~0!KVP44B;ys68R{YyP2o~ZZ^7p3(&S8H6vS69* literal 0 HcmV?d00001 diff --git a/docs/index.md b/docs/index.md index 9a3d3be..fca1347 100644 --- a/docs/index.md +++ b/docs/index.md @@ -170,6 +170,7 @@ users/troubleshoot.md developers/customize.md developers/build-vagrant.md developers/build-cloud.md +developers/build-apple-silicon.md developers/roles.md ``` diff --git a/local/tasks/aiidalab.yml b/local/tasks/aiidalab.yml index 3153697..10c1ae4 100644 --- a/local/tasks/aiidalab.yml +++ b/local/tasks/aiidalab.yml @@ -24,7 +24,7 @@ become: true become_user: "{{ vm_user }}" command: "docker run -d --name qeapp -p 8899:8888 --volume /home/{{ vm_user }}/qeapp-home:/home/jovyan -e JUPYTER_TOKEN='max' -e NB_UMASK=002 --restart always {{ vm_qeapp_image }}" - when: qe_container_stat.stdout == "" + when: qe_container_stat.stdout == "" - name: Copy AiiDAlab logo become: true @@ -45,4 +45,3 @@ Terminal=false Icon=/usr/share/icons/aiidalab-qe-logo.png Type=Application - diff --git a/local/tasks/customise-bash.yml b/local/tasks/customise-bash.yml index 6b0dd55..7bb3fdc 100644 --- a/local/tasks/customise-bash.yml +++ b/local/tasks/customise-bash.yml @@ -33,6 +33,14 @@ - regexp: HISTFILESIZE= line: HISTFILESIZE=100000 +- name: Set umask to 002 + blockinfile: + path: "${HOME}/.bashrc" + marker: "# {mark} ANSIBLE MANAGED BLOCK (umask)" + block: | + # Set umask to 002 + umask 002 + - name: hide possible sudo message file: path: ~/.sudo_as_admin_successful diff --git a/local/tasks/docker.yml b/local/tasks/docker.yml index 2d0f9c8..9a868eb 100644 --- a/local/tasks/docker.yml +++ b/local/tasks/docker.yml @@ -18,7 +18,7 @@ name: geerlingguy.docker vars: docker_users: - - "{{ vm_user }}" + - "{{ vm_user }}" when: ansible_architecture == 'x86_64' - name: Install docker (arm64) @@ -26,7 +26,7 @@ name: geerlingguy.docker_arm vars: docker_users: - - "{{ vm_user }}" + - "{{ vm_user }}" when: ansible_architecture == 'aarch64' - name: Install docker pip @@ -34,4 +34,4 @@ name: geerlingguy.pip vars: pip_install_packages: - - docker \ No newline at end of file + - docker diff --git a/local/tasks/files/README-qeapp.md.j2 b/local/tasks/files/README-qeapp.md.j2 new file mode 100644 index 0000000..bf840bb --- /dev/null +++ b/local/tasks/files/README-qeapp.md.j2 @@ -0,0 +1,23 @@ +# Welcome to {{ vm_name }} version {{ vm_version }} + +*Quantum Mobile* is a Virtual Machine for computational materials science, distributed by the {{ vm_author }}. + +It comes with a collection of software packages for quantum mechanical calculations, including: + +{% for name, url in software_urls.items() %} +* [{{ name }}]({{ url }}) +{% endfor %} + +all of which are set up and ready to be used on their own or through [AiiDA](http://www.aiida.net). + +# Getting started + +* Start the Quantum ESPRESSO app by double-clicking on the icon on the desktop. + +* If the virtual machine is just started, you may need to wait a few minutes for the server to be fully ready. If you see an error message, try again after a few minutes. + +* The data you create over the app can be accessed from the `~/qeapp-home` folder. Vise versa, you can copy files into this folder to make them available in the app. + +* For more information on how to use the app, see the [Quantum ESPRESSO app documentation](https://aiidalab-quantumespresso.readthedocs.io/en/latest/). + +For troubleshooting and other information, see: {{ qm_homepage }}. diff --git a/playbook-aiidalab-qe.yml b/playbook-aiidalab-qe.yml index 28f5447..08d33c7 100644 --- a/playbook-aiidalab-qe.yml +++ b/playbook-aiidalab-qe.yml @@ -87,7 +87,7 @@ become: true become_user: "{{ vm_user }}" template: - src: local/tasks/files/README.md.j2 + src: local/tasks/files/README-qeapp.md.j2 dest: "{{ readme_vm_path }}" vars: software_urls: @@ -98,7 +98,6 @@ # Build Specific Tasks # These tasks can be customised for specific VM builds, # depending on the software one requires to be installed - - name: Install docker and docker-compose tags: [docker] import_tasks: local/tasks/docker.yml From 18c0b3e26ab8e426d41fdde875ae75aac02a539f Mon Sep 17 00:00:00 2001 From: Jusong Yu Date: Mon, 4 Dec 2023 10:53:57 +0100 Subject: [PATCH 17/25] ci remove pre-commit --- .github/workflows/ci.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5e4320b..ad7780d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -9,16 +9,16 @@ on: jobs: - pre-commit: - runs-on: ubuntu-latest + #pre-commit: + # runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - name: Set up Python - uses: actions/setup-python@v4 - with: - python-version: 3.8 - - uses: pre-commit/action@v3.0.0 + # steps: + # - uses: actions/checkout@v3 + # - name: Set up Python + # uses: actions/setup-python@v4 + # with: + # python-version: 3.8 + # - uses: pre-commit/action@v3.0.0 # docs: # runs-on: ubuntu-latest From 01d0bacf3df24c5bcd657983af4e69b1cf599a46 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 4 Dec 2023 09:54:21 +0000 Subject: [PATCH 18/25] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- .ansible-lint | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.ansible-lint b/.ansible-lint index 50d5e83..c113d97 100644 --- a/.ansible-lint +++ b/.ansible-lint @@ -1,6 +1,6 @@ warn_list: # or 'skip_list' to silence them completely - - '208' # File permissions unset or incorrect - - '301' # Commands should not change things if nothing needs doing - - '305' # Use shell only when shell functionality is required - - '504' # Do not use 'local_action', use 'delegate_to: localhost' - - syntax-check +- '208' # File permissions unset or incorrect +- '301' # Commands should not change things if nothing needs doing +- '305' # Use shell only when shell functionality is required +- '504' # Do not use 'local_action', use 'delegate_to: localhost' +- syntax-check From 66ef818ab4a4512f442624edc8e442d04c88c75a Mon Sep 17 00:00:00 2001 From: Jusong Yu Date: Mon, 4 Dec 2023 14:09:22 +0100 Subject: [PATCH 19/25] exclude ansible lints checks --- .ansible-lint | 1 - .github/workflows/ci.yml | 18 +++++++++--------- .gitignore | 2 ++ .pre-commit-config.yaml | 27 +++++++++++++++++---------- 4 files changed, 28 insertions(+), 20 deletions(-) diff --git a/.ansible-lint b/.ansible-lint index c113d97..264e00f 100644 --- a/.ansible-lint +++ b/.ansible-lint @@ -3,4 +3,3 @@ warn_list: # or 'skip_list' to silence them completely - '301' # Commands should not change things if nothing needs doing - '305' # Use shell only when shell functionality is required - '504' # Do not use 'local_action', use 'delegate_to: localhost' -- syntax-check diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ad7780d..c5d6281 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -9,16 +9,16 @@ on: jobs: - #pre-commit: - # runs-on: ubuntu-latest + pre-commit: + runs-on: ubuntu-latest - # steps: - # - uses: actions/checkout@v3 - # - name: Set up Python - # uses: actions/setup-python@v4 - # with: - # python-version: 3.8 - # - uses: pre-commit/action@v3.0.0 + steps: + - uses: actions/checkout@v3 + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: "3.10" + - uses: pre-commit/action@v3.0.0 # docs: # runs-on: ubuntu-latest diff --git a/.gitignore b/.gitignore index e45a172..29d75b3 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,5 @@ submodules/roles/marvel-nccr* submodules/roles/gantsign* submodules/roles/geerlingguy* submodules/ansible_collections/ + +local/modules/__pycache__/*.pyc diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index a4375cd..ee94cb5 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -2,24 +2,31 @@ # See usage instructions at https://pre-commit.com repos: -- repo: https://github.com/macisamuele/language-formatters-pre-commit-hooks - rev: v2.3.0 - hooks: - - id: pretty-format-yaml - args: [--autofix, --indent, "2", --preserve-quotes] - - repo: https://github.com/adrienverge/yamllint - rev: v1.26.3 + rev: v1.33.0 hooks: - id: yamllint - repo: https://github.com/ansible/ansible-lint - rev: v6.3.0 + rev: v6.22.1 hooks: - id: ansible-lint - args: [--exclude, roles/] + # these should bring back after fixing the ansible-lint issues + # we exclude most of the roles and tasks, as they are not update to the new ansible version + args: [ + --exclude, + roles/, + submodules/roles/, + playbook-aiidalab-qe.yml, + playbook-build.yml, + playbook-package.yml, + .pre-commit-config.yaml, + local/tasks/, + .github/workflows/ci.yml, + submodules/ansible_collections/, + ] - repo: https://github.com/psf/black - rev: 23.1.0 + rev: 23.11.0 hooks: - id: black From 59d7f3dd6f435e94832cc30bc977c32c394232f0 Mon Sep 17 00:00:00 2001 From: Jusong Yu Date: Wed, 20 Dec 2023 08:08:12 +0100 Subject: [PATCH 20/25] make qeapp image an option in inventory --- inventory.yml | 3 +++ local/tasks/aiidalab.yml | 4 ++-- playbook-aiidalab-qe.yml | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/inventory.yml b/inventory.yml index d18a96f..8dcd711 100644 --- a/inventory.yml +++ b/inventory.yml @@ -40,6 +40,9 @@ all: build_dir: "/tmp" run_tests: true + # AiiDAlab options + vm_qeapp_image: "ghcr.io/aiidalab/qe:v23.10.0" + # Readme and Release Notes (populated by roles during build) qm_homepage: "https://quantum-mobile.readthedocs.io" readme_vm_path: "/home/{{ vm_user }}/README.md" diff --git a/local/tasks/aiidalab.yml b/local/tasks/aiidalab.yml index 10c1ae4..0d3a0e7 100644 --- a/local/tasks/aiidalab.yml +++ b/local/tasks/aiidalab.yml @@ -14,7 +14,7 @@ ignore_errors: true - name: Pull qeapp image - command: "docker pull {{ vm_qeapp_image }}" + command: "docker pull {{ qeapp_image }}" - name: echo qe_container debug: @@ -23,7 +23,7 @@ - name: Create and run qeapp container become: true become_user: "{{ vm_user }}" - command: "docker run -d --name qeapp -p 8899:8888 --volume /home/{{ vm_user }}/qeapp-home:/home/jovyan -e JUPYTER_TOKEN='max' -e NB_UMASK=002 --restart always {{ vm_qeapp_image }}" + command: "docker run -d --name qeapp -p 8899:8888 --volume /home/{{ vm_user }}/qeapp-home:/home/jovyan -e JUPYTER_TOKEN='max' -e NB_UMASK=002 --restart always {{ qeapp_image }}" when: qe_container_stat.stdout == "" - name: Copy AiiDAlab logo diff --git a/playbook-aiidalab-qe.yml b/playbook-aiidalab-qe.yml index 08d33c7..8209205 100644 --- a/playbook-aiidalab-qe.yml +++ b/playbook-aiidalab-qe.yml @@ -111,7 +111,7 @@ become_user: "{{ vm_user }}" import_tasks: local/tasks/aiidalab.yml vars: - vm_qeapp_image: "ghcr.io/aiidalab/qe:v23.10.0rc0" + qeapp_image: "{{ vm_qeapp_image }}" post_tasks: From 88b3b1ca13aa9c662db406b53881a1a0ac9f29f3 Mon Sep 17 00:00:00 2001 From: Jusong Yu Date: Fri, 1 Dec 2023 19:01:24 +0100 Subject: [PATCH 21/25] more about utm dev --- docs/developers/build-apple-silicon.md | 11 +++++++---- tox.ini | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/docs/developers/build-apple-silicon.md b/docs/developers/build-apple-silicon.md index 08d990b..b54d789 100644 --- a/docs/developers/build-apple-silicon.md +++ b/docs/developers/build-apple-silicon.md @@ -8,26 +8,29 @@ The VirtualBox software is not yet available for Apple Silicon, so we need to us - Download latest version of UTM - browse gallery to have a image setup, we select ubuntu 20.04 LTS https://docs.getutm.app/guides/ubuntu/ - The arm64 ISO image can be dowloaded from https://cdimage.ubuntu.com/releases/focal/release/ -- During import and setup from ISO, select settings with all default (64GB disk space, 4096MB RAM, default cores ...) +- During import and setup from ISO, select settings with: 64GB disk space (default), 4096MB RAM (default), 4 (works for 2020 macbook air so should be good for other later model) cores. +- Remember to install OpenSSH server during setup, so we can ssh to the VM for ansible deployment. - Create system user `max` with password `moritz` and enable auto login. This will be used for ansible deployment. - Create a new network setting with type "Emulated VLAN" and forward port 22 to 2200 of localhost so you can ssh to VM from localhost. -You can config ssh with: +You can config ssh with setting in `~/.ssh/config`: + ``` Host qmobile HostName 127.0.0.1 User max Port 2200 ``` -- The default `max` user is granted with the sudo permission and the password is `moritz`. +- The default `max` user is granted with the sudo permission and the password is `moritz`. - To reboot, remember to unmount the image and boot again. ## Configure the VM -In the localhost (control machine) +In the localhost (control machine), prepare the python environment and tox. +Check the [prerequisites section](../build-vagrant.md#prerequisites-installation) for detailes Run with ansible playbook ``` diff --git a/tox.ini b/tox.ini index c908ee1..449276f 100644 --- a/tox.ini +++ b/tox.ini @@ -4,7 +4,7 @@ envlist = vagrant [testenv] -basepython = python3 +basepython = python3.9 skip_install = true [testenv:vagrant] From 1a8a6195a0a3e6bb50cbba5c4f9afc667f5d3cb7 Mon Sep 17 00:00:00 2001 From: Jusong Yu Date: Sat, 2 Dec 2023 00:11:07 +0100 Subject: [PATCH 22/25] geerlingguy.docker_arm is deprecated just use geerlingguy.docker --- docs/developers/build-apple-silicon.md | 2 +- local/tasks/docker.yml | 28 ++------------------------ 2 files changed, 3 insertions(+), 27 deletions(-) diff --git a/docs/developers/build-apple-silicon.md b/docs/developers/build-apple-silicon.md index b54d789..1ab7c23 100644 --- a/docs/developers/build-apple-silicon.md +++ b/docs/developers/build-apple-silicon.md @@ -11,7 +11,7 @@ The VirtualBox software is not yet available for Apple Silicon, so we need to us - During import and setup from ISO, select settings with: 64GB disk space (default), 4096MB RAM (default), 4 (works for 2020 macbook air so should be good for other later model) cores. - Remember to install OpenSSH server during setup, so we can ssh to the VM for ansible deployment. - Create system user `max` with password `moritz` and enable auto login. This will be used for ansible deployment. -- Create a new network setting with type "Emulated VLAN" and forward port 22 to 2200 of localhost so you can ssh to VM from localhost. +- Create (be careful not delete the existing one, it is used for connecting the internet) a new network setting with type "Emulated VLAN" and forward port 22 to 2200 of localhost so you can ssh to VM from localhost. diff --git a/local/tasks/docker.yml b/local/tasks/docker.yml index 9a868eb..cd9f997 100644 --- a/local/tasks/docker.yml +++ b/local/tasks/docker.yml @@ -1,33 +1,9 @@ -#- name: Include geerlingguy.docker role -# include_role: -# name: geerlingguy.docker -# vars: -# docker_users: "{{ vm_user }}" -# docker_compose_version: "{{ vm_docker_compose_version }}" -# when: ansible_architecture == 'x86_64' -# -#- name: install recent docker and docker-compose python libraries -# become: True -# pip: -# name: "{{ item }}" -# state: present -# with_items: -# - docker -- name: Install docker (amd64) +- name: Install docker include_role: name: geerlingguy.docker vars: docker_users: - - "{{ vm_user }}" - when: ansible_architecture == 'x86_64' - -- name: Install docker (arm64) - include_role: - name: geerlingguy.docker_arm - vars: - docker_users: - - "{{ vm_user }}" - when: ansible_architecture == 'aarch64' + - "{{ vm_user }}" - name: Install docker pip include_role: From 34a9903352edbab9fa024fff89ea42d302f14375 Mon Sep 17 00:00:00 2001 From: Jusong Yu Date: Wed, 20 Dec 2023 19:48:31 +0100 Subject: [PATCH 23/25] Update Vagrantfile --- Vagrantfile | 8 -------- 1 file changed, 8 deletions(-) diff --git a/Vagrantfile b/Vagrantfile index d4473b8..f082a1d 100644 --- a/Vagrantfile +++ b/Vagrantfile @@ -12,14 +12,6 @@ launch_gui = ENV.has_key?('VAGRANT_NO_GUI') ? false : true # Currently on GitHub Actions it fails if accelerate3d activated on_ci = ENV.has_key?('VAGRANT_ON_GH') ? true : false -$script = <<-SCRIPT -echo "I am provisioningi aiidalab folder creating..." -AIIDALAB_VOL=/var/aiidalab_volume -mkdir -p ${AIIDALAB_VOL} -chown 1000:100 ${AIIDALAB_VOL} -chmod 0775 ${AIIDALAB_VOL} -SCRIPT - Vagrant.configure(2) do |config| ## VIRTUALBOX provider From 0c61192b6f48cd691d238f9cc25b09619af2a118 Mon Sep 17 00:00:00 2001 From: Jusong Yu Date: Wed, 20 Dec 2023 20:43:19 +0100 Subject: [PATCH 24/25] Update docs/developers/build-apple-silicon.md --- docs/developers/build-apple-silicon.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/developers/build-apple-silicon.md b/docs/developers/build-apple-silicon.md index 1ab7c23..a56a148 100644 --- a/docs/developers/build-apple-silicon.md +++ b/docs/developers/build-apple-silicon.md @@ -9,7 +9,7 @@ The VirtualBox software is not yet available for Apple Silicon, so we need to us - browse gallery to have a image setup, we select ubuntu 20.04 LTS https://docs.getutm.app/guides/ubuntu/ - The arm64 ISO image can be dowloaded from https://cdimage.ubuntu.com/releases/focal/release/ - During import and setup from ISO, select settings with: 64GB disk space (default), 4096MB RAM (default), 4 (works for 2020 macbook air so should be good for other later model) cores. -- Remember to install OpenSSH server during setup, so we can ssh to the VM for ansible deployment. +- Remember to install OpenSSH server during setup, so we can ssh to the VM for ansible deployment. Check [here](https://github.com/utmapp/UTM/discussions/2465#discussioncomment-6931047) for a detail setup so host can ssh to the virtual machine. - Create system user `max` with password `moritz` and enable auto login. This will be used for ansible deployment. - Create (be careful not delete the existing one, it is used for connecting the internet) a new network setting with type "Emulated VLAN" and forward port 22 to 2200 of localhost so you can ssh to VM from localhost. From fb8a522ebdc6b9a8041f85f0895431964641edba Mon Sep 17 00:00:00 2001 From: Marnik Bercx Date: Tue, 19 Mar 2024 15:41:21 +0100 Subject: [PATCH 25/25] =?UTF-8?q?=F0=9F=93=9A=20Update=20Apple=20silicon?= =?UTF-8?q?=20UTM=20build=20instructions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/developers/build-apple-silicon.md | 94 ++++++++++++++++++++------ 1 file changed, 72 insertions(+), 22 deletions(-) diff --git a/docs/developers/build-apple-silicon.md b/docs/developers/build-apple-silicon.md index a56a148..315cfc7 100644 --- a/docs/developers/build-apple-silicon.md +++ b/docs/developers/build-apple-silicon.md @@ -2,20 +2,62 @@ Apple Silicon is the new CPU architecture for Apple Macs. The new architecture is based on ARM64, which means that software compiled for x86_64 will not run on Apple Silicon without translation. -The VirtualBox software is not yet available for Apple Silicon, so we need to use a different virtualization software which is the [UTM](https://mac.getutm.app/). +VirtualBox does not yet support Apple Silicon, so instead we use a different virtualization software called [UTM](https://mac.getutm.app/). -## Install and start the VM -- Download latest version of UTM -- browse gallery to have a image setup, we select ubuntu 20.04 LTS https://docs.getutm.app/guides/ubuntu/ -- The arm64 ISO image can be dowloaded from https://cdimage.ubuntu.com/releases/focal/release/ -- During import and setup from ISO, select settings with: 64GB disk space (default), 4096MB RAM (default), 4 (works for 2020 macbook air so should be good for other later model) cores. -- Remember to install OpenSSH server during setup, so we can ssh to the VM for ansible deployment. Check [here](https://github.com/utmapp/UTM/discussions/2465#discussioncomment-6931047) for a detail setup so host can ssh to the virtual machine. -- Create system user `max` with password `moritz` and enable auto login. This will be used for ansible deployment. -- Create (be careful not delete the existing one, it is used for connecting the internet) a new network setting with type "Emulated VLAN" and forward port 22 to 2200 of localhost so you can ssh to VM from localhost. +## Prerequisites + +To build the UTM image, first: + +- install the latest version of UTM [from the Apple store](https://apps.apple.com/us/app/utm-virtual-machines/id1538878817). +- download the "64-bit ARM (ARMv8/AArch64) server install image" from https://cdimage.ubuntu.com/releases/focal/release/. + + +Then, clone the `quantum-mobile` repository: + +```console +git clone https://github.com/marvel-nccr/quantum-mobile.git +cd quantum-mobile +``` + +Create a fresh Python environment with a manager of your choosing and simply install `tox`: + +``` +pip install tox +``` + +Finally, we need the `sshpass` tool to have password access to the VM when running the Ansible playbook: + +```console +brew install hudochenkov/sshpass/sshpass +``` + +## Install and start the VM + +Create a new virtual machine from the downloaded Ubuntu server ISO using "File -> New". +Select the following: + +- Virtualize +- Operating system: Select Custom -> Other, then use "Browse" to find the ISO image and continue. +- select the following hardware/storage settings: 4096MB RAM (default), 4 CPU cores and 64GB disk space (default). + +Next, **create** (be careful not delete the existing one, it is used for connecting the internet) a new network setting with type "Emulated VLAN" and forward port 22 to 2200 of localhost so you can ssh to VM from localhost. +Check [here](https://github.com/utmapp/UTM/discussions/2465#discussioncomment-6931047) for detailed instructions. -You can config ssh with setting in `~/.ssh/config`: +Finally. run the VM and follow the installation instructions. +In most steps you can take the default option, keeping in mind the following exceptions: + +- Remember to install OpenSSH server during setup, so we can ssh to the VM during the Ansible deployment. +- Create system user `max` with password `moritz` and enable auto login. + +**Important**: Once the installation is complete, select reboot and then _shut down the VM_. +Rebooting with the ISO image still selected for the CD/DVD input will result in the installation process starting again. +Hence, unselect the image before booting the machine after the installation. + +## Configure the VM with Ansible + +Set the following SSH configuration in the `~/.ssh/config`: ``` Host qmobile @@ -24,23 +66,31 @@ Host qmobile Port 2200 ``` -- The default `max` user is granted with the sudo permission and the password is `moritz`. -- To reboot, remember to unmount the image and boot again. - -## Configure the VM +In the localhost (control machine), activate the Python environment and run the Ansible playbook in the root directory of the repository: -In the localhost (control machine), prepare the python environment and tox. -Check the [prerequisites section](../build-vagrant.md#prerequisites-installation) for detailes - -Run with ansible playbook ``` BUILD_PLAYBOOK=playbook-aiidalab-qe.yml tox -e ansible -- --extra-vars "build_hosts=utm" -kK ``` -It will ask for the password of `max` user, which is `moritz`. +It will ask for the password of the `max` user, which should be `moritz`. + +## Troubleshooting -## troubleshotings +### Import from UTM copy -### import from utm copy +- If you see "Failed to access data from shortcut", try the methods from https://github.com/utmapp/UTM/discussions/3774 -- If you see "Failed to access data from shortcut", try the methods from https://github.com/utmapp/UTM/discussions/3774 \ No newline at end of file +### Failing to connect via SSH using password + +In case you run into the following error: + +``` +fatal: [utm]: FAILED! => + msg: to use the 'ssh' connection type with passwords, you must install the sshpass program +``` + +It means that the `sshpass` tool has not been installed correctly using: + +``` +brew install hudochenkov/sshpass/sshpass +``` \ No newline at end of file