From dac7a768210ff28a36073627b865cc17446fbcc6 Mon Sep 17 00:00:00 2001 From: zxysbsbzxy Date: Mon, 22 Jan 2024 18:40:11 +0800 Subject: [PATCH 001/117] add torch backend support --- source/api_cc/include/DeepPotPT.h | 329 ++++++++++++++++++++++++++++++ source/api_cc/include/commonPT.h | 26 +++ source/api_cc/src/DeepPot.cc | 3 +- source/api_cc/src/DeepPotPT.cc | 246 ++++++++++++++++++++++ source/api_cc/src/commonPT.cc | 20 ++ 5 files changed, 623 insertions(+), 1 deletion(-) create mode 100644 source/api_cc/include/DeepPotPT.h create mode 100644 source/api_cc/include/commonPT.h create mode 100644 source/api_cc/src/DeepPotPT.cc create mode 100644 source/api_cc/src/commonPT.cc diff --git a/source/api_cc/include/DeepPotPT.h b/source/api_cc/include/DeepPotPT.h new file mode 100644 index 0000000000..62035d9010 --- /dev/null +++ b/source/api_cc/include/DeepPotPT.h @@ -0,0 +1,329 @@ +// SPDX-License-Identifier: LGPL-3.0-or-later +#pragma once + +#include "DeepPot.h" +#include "commonPT.h" +#include + +namespace deepmd { +/** + * @brief PyTorch implementation for Deep Potential. + **/ +class DeepPotPT : public DeepPotBase { + public: + /** + * @brief DP constructor without initialization. + **/ + DeepPotPT(); + ~DeepPotPT(); + /** + * @brief DP constructor with initialization. + * @param[in] model The name of the frozen model file. + * @param[in] gpu_rank The GPU rank. Default is 0. + * @param[in] file_content The content of the model file. If it is not empty, + *DP will read from the string instead of the file. + **/ + DeepPotPT(const std::string& model, + const int& gpu_rank = 0, + const std::string& file_content = ""); + /** + * @brief Initialize the DP. + * @param[in] model The name of the frozen model file. + * @param[in] gpu_rank The GPU rank. Default is 0. + * @param[in] file_content The content of the model file. If it is not empty, + *DP will read from the string instead of the file. + **/ + void init(const std::string& model, + const int& gpu_rank = 0); + + private: + /** + * @brief Evaluate the energy, force, virial, atomic energy, and atomic virial + *by using this DP. + * @param[out] ener The system energy. + * @param[out] force The force on each atom. + * @param[out] virial The virial. + * @param[out] atom_energy The atomic energy. + * @param[out] atom_virial The atomic virial. + * @param[in] coord The coordinates of atoms. The array should be of size + *nframes x natoms x 3. + * @param[in] atype The atom types. The list should contain natoms ints. + * @param[in] box The cell of the region. The array should be of size nframes + *x 9. + * @param[in] fparam The frame parameter. The array can be of size : + * nframes x dim_fparam. + * dim_fparam. Then all frames are assumed to be provided with the same + *fparam. + * @param[in] aparam The atomic parameter The array can be of size : + * nframes x natoms x dim_aparam. + * natoms x dim_aparam. Then all frames are assumed to be provided with the + *same aparam. + **/ + template + void compute(ENERGYVTYPE& ener, + std::vector& force, + std::vector& virial, + // std::vector& atom_energy, + // std::vector& atom_virial, + const std::vector& coord, + const std::vector& atype, + const std::vector& box); + // const std::vector& fparam = std::vector(), + // const std::vector& aparam = std::vector()); + /** + * @brief Evaluate the energy, force, virial, atomic energy, and atomic virial + *by using this DP. + * @param[out] ener The system energy. + * @param[out] force The force on each atom. + * @param[out] virial The virial. + * @param[out] atom_energy The atomic energy. + * @param[out] atom_virial The atomic virial. + * @param[in] coord The coordinates of atoms. The array should be of size + *nframes x natoms x 3. + * @param[in] atype The atom types. The list should contain natoms ints. + * @param[in] box The cell of the region. The array should be of size nframes + *x 9. + * @param[in] nghost The number of ghost atoms. + * @param[in] lmp_list The input neighbour list. + * @param[in] ago Update the internal neighbour list if ago is 0. + * @param[in] fparam The frame parameter. The array can be of size : + * nframes x dim_fparam. + * dim_fparam. Then all frames are assumed to be provided with the same + *fparam. + * @param[in] aparam The atomic parameter The array can be of size : + * nframes x natoms x dim_aparam. + * natoms x dim_aparam. Then all frames are assumed to be provided with the + *same aparam. + **/ + template + void compute(ENERGYVTYPE& ener, + std::vector& force, + std::vector& virial, + // std::vector& atom_energy, + // std::vector& atom_virial, + const std::vector& coord, + const std::vector& atype, + const std::vector& box, + // const int nghost, + const InputNlist& lmp_list, + const int& ago); + // const std::vector& fparam = std::vector(), + // const std::vector& aparam = std::vector()); + /** + * @brief Evaluate the energy, force, and virial with the mixed type + *by using this DP. + * @param[out] ener The system energy. + * @param[out] force The force on each atom. + * @param[out] virial The virial. + * @param[in] nframes The number of frames. + * @param[in] coord The coordinates of atoms. The array should be of size + *nframes x natoms x 3. + * @param[in] atype The atom types. The array should be of size nframes x + *natoms. + * @param[in] box The cell of the region. The array should be of size nframes + *x 9. + * @param[in] fparam The frame parameter. The array can be of size : + * nframes x dim_fparam. + * dim_fparam. Then all frames are assumed to be provided with the same + *fparam. + * @param[in] aparam The atomic parameter The array can be of size : + * nframes x natoms x dim_aparam. + * natoms x dim_aparam. Then all frames are assumed to be provided with the + *same aparam. + **/ + template + void compute_mixed_type( + ENERGYVTYPE& ener, + std::vector& force, + std::vector& virial, + const int& nframes, + const std::vector& coord, + const std::vector& atype, + const std::vector& box, + const std::vector& fparam = std::vector(), + const std::vector& aparam = std::vector()); + /** + * @brief Evaluate the energy, force, and virial with the mixed type + *by using this DP. + * @param[out] ener The system energy. + * @param[out] force The force on each atom. + * @param[out] virial The virial. + * @param[out] atom_energy The atomic energy. + * @param[out] atom_virial The atomic virial. + * @param[in] nframes The number of frames. + * @param[in] coord The coordinates of atoms. The array should be of size + *nframes x natoms x 3. + * @param[in] atype The atom types. The array should be of size nframes x + *natoms. + * @param[in] box The cell of the region. The array should be of size nframes + *x 9. + * @param[in] fparam The frame parameter. The array can be of size : + * nframes x dim_fparam. + * dim_fparam. Then all frames are assumed to be provided with the same + *fparam. + * @param[in] aparam The atomic parameter The array can be of size : + * nframes x natoms x dim_aparam. + * natoms x dim_aparam. Then all frames are assumed to be provided with the + *same aparam. + **/ + template + void compute_mixed_type( + ENERGYVTYPE& ener, + std::vector& force, + std::vector& virial, + std::vector& atom_energy, + std::vector& atom_virial, + const int& nframes, + const std::vector& coord, + const std::vector& atype, + const std::vector& box, + const std::vector& fparam = std::vector(), + const std::vector& aparam = std::vector()); + + public: + /** + * @brief Get the cutoff radius. + * @return The cutoff radius. + **/ + double cutoff() const { + assert(inited); + return rcut; + }; + /** + * @brief Get the number of types. + * @return The number of types. + **/ + int numb_types() const { + assert(inited); + return ntypes; + }; + /** + * @brief Get the number of types with spin. + * @return The number of types with spin. + **/ + int numb_types_spin() const { + assert(inited); + return ntypes_spin; + }; + /** + * @brief Get the dimension of the frame parameter. + * @return The dimension of the frame parameter. + **/ + int dim_fparam() const { + assert(inited); + return dfparam; + }; + /** + * @brief Get the dimension of the atomic parameter. + * @return The dimension of the atomic parameter. + **/ + int dim_aparam() const { + assert(inited); + return daparam; + }; + /** + * @brief Get the type map (element name of the atom types) of this model. + * @param[out] type_map The type map of this model. + **/ + void get_type_map(std::string& type_map); + + /** + * @brief Get whether the atom dimension of aparam is nall instead of fparam. + * @param[out] aparam_nall whether the atom dimension of aparam is nall + *instead of fparam. + **/ + bool is_aparam_nall() const { + assert(inited); + return aparam_nall; + }; + + // forward to template class + void computew(std::vector& ener, + std::vector& force, + std::vector& virial, + std::vector& atom_energy, + std::vector& atom_virial, + const std::vector& coord, + const std::vector& atype, + const std::vector& box, + const std::vector& fparam = std::vector(), + const std::vector& aparam = std::vector()); + void computew(std::vector& ener, + std::vector& force, + std::vector& virial, + std::vector& atom_energy, + std::vector& atom_virial, + const std::vector& coord, + const std::vector& atype, + const std::vector& box, + const std::vector& fparam = std::vector(), + const std::vector& aparam = std::vector()); + void computew(std::vector& ener, + std::vector& force, + std::vector& virial, + std::vector& atom_energy, + std::vector& atom_virial, + const std::vector& coord, + const std::vector& atype, + const std::vector& box, + const int nghost, + const InputNlist& inlist, + const int& ago, + const std::vector& fparam = std::vector(), + const std::vector& aparam = std::vector()); + void computew(std::vector& ener, + std::vector& force, + std::vector& virial, + std::vector& atom_energy, + std::vector& atom_virial, + const std::vector& coord, + const std::vector& atype, + const std::vector& box, + const int nghost, + const InputNlist& inlist, + const int& ago, + const std::vector& fparam = std::vector(), + const std::vector& aparam = std::vector()); + void computew_mixed_type( + std::vector& ener, + std::vector& force, + std::vector& virial, + std::vector& atom_energy, + std::vector& atom_virial, + const int& nframes, + const std::vector& coord, + const std::vector& atype, + const std::vector& box, + const std::vector& fparam = std::vector(), + const std::vector& aparam = std::vector()); + void computew_mixed_type( + std::vector& ener, + std::vector& force, + std::vector& virial, + std::vector& atom_energy, + std::vector& atom_virial, + const int& nframes, + const std::vector& coord, + const std::vector& atype, + const std::vector& box, + const std::vector& fparam = std::vector(), + const std::vector& aparam = std::vector()); + + private: + + bool inited; + int ntypes; + int ntypes_spin; + int dfparam; + int daparam; + // copy neighbor list info from host + torch::jit::script::Module module; + double rcut; + NeighborListData nlist_data; + //InputNlist nlist; + int max_num_neighbors; + int gpu_id; + at::Tensor firstneigh_tensor; +}; + +} // namespace deepmd diff --git a/source/api_cc/include/commonPT.h b/source/api_cc/include/commonPT.h new file mode 100644 index 0000000000..6e7b957aeb --- /dev/null +++ b/source/api_cc/include/commonPT.h @@ -0,0 +1,26 @@ +#include +#ifndef COMMON_H +#define COMMON_H +#include +#include +#include +#include +#include "neighbor_list.h" + + +struct NeighborListData { + /// Array stores the core region atom's index + std::vector ilist; + /// Array stores the core region atom's neighbor index + //std::vector> jlist; + int *jlist; + /// Array stores the number of neighbors of core region atoms + std::vector numneigh; + /// Array stores the the location of the first neighbor of core region atoms + std::vector firstneigh; + + public: + void copy_from_nlist(const InputNlist& inlist, int& max_num_neighbors,int nnei); + //void make_inlist(InputNlist& inlist); +}; +#endif \ No newline at end of file diff --git a/source/api_cc/src/DeepPot.cc b/source/api_cc/src/DeepPot.cc index 083e9b091f..15030b8841 100644 --- a/source/api_cc/src/DeepPot.cc +++ b/source/api_cc/src/DeepPot.cc @@ -38,7 +38,8 @@ void DeepPot::init(const std::string& model, // TODO: throw errors if TF backend is not built, without mentioning TF dp = std::make_shared(model, gpu_rank, file_content); } else if (deepmd::DPBackend::PyTorch == backend) { - throw deepmd::deepmd_exception("PyTorch backend is not supported yet"); + //throw deepmd::deepmd_exception("PyTorch backend is not supported yet"); + dp = std::make_shared(model, gpu_rank, file_content); } else if (deepmd::DPBackend::Paddle == backend) { throw deepmd::deepmd_exception("PaddlePaddle backend is not supported yet"); } else { diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc new file mode 100644 index 0000000000..956d6084bd --- /dev/null +++ b/source/api_cc/src/DeepPotPT.cc @@ -0,0 +1,246 @@ +#include "DeepPotPT.h" + +using namespace deepmd; +DeepPotPT::DeepPotPT() +: inited(false) { } +DeepPotPT::DeepPotPT(const std::string& model, + const int& gpu_rank, + const std::string& file_content) + : inited(false){ + try { + init(model, gpu_rank); + } catch (...) { + // Clean up and rethrow, as the destructor will not be called + throw; + } +} +void DeepPotPT::init(const std::string& model, const int& gpu_rank) { + if (inited) { + std::cerr << "WARNING: deepmd-kit should not be initialized twice, do " + "nothing at the second call of initializer" + << std::endl; + return; + } + std::cout << "load model from: " <(rcut_); + inited = true; +} +DeepPotPT::~DeepPotPT() { } + + + +template +void DeepPotPT::compute(ENERGYVTYPE& ener, + std::vector& force, + std::vector& virial, + const std::vector& coord, + const std::vector& atype, + const std::vector& box, + const InputNlist& lmp_list, + const int& ago) +{ + torch::Device device(torch::kCUDA, gpu_id); + std::vector coord_wrapped = coord; + int natoms = atype.size(); + auto options = torch::TensorOptions().dtype(torch::kFloat64); + auto int_options = torch::TensorOptions().dtype(torch::kInt64); + auto int32_options = torch::TensorOptions().dtype(torch::kInt32); + std::vector inputs; + at::Tensor coord_wrapped_Tensor = torch::from_blob(coord_wrapped.data(), {1,natoms, 3}, options).to(device); + inputs.push_back(coord_wrapped_Tensor); + std::vector atype_64(atype.begin(), atype.end()); + at::Tensor atype_Tensor = torch::from_blob(atype_64.data(), {1,natoms}, int_options).to(device); + inputs.push_back(atype_Tensor); + if(ago == 0) + { + int64_t nnei = module.run_method("get_nnei").toInt(); + nlist_data.copy_from_nlist(lmp_list,max_num_neighbors,nnei); + if(max_num_neighbors > nnei) + { + at::Tensor firstneigh = torch::from_blob(nlist_data.jlist, {lmp_list.inum,max_num_neighbors}, int32_options); + at::Tensor nlist= firstneigh.to(torch::kInt64).to(device); + firstneigh_tensor = module.run_method("sort_neighbor_list",coord_wrapped_Tensor,nlist).toTensor(); + } + else + { + at::Tensor firstneigh = torch::from_blob(nlist_data.jlist, {1,lmp_list.inum,max_num_neighbors}, int32_options); + firstneigh_tensor = firstneigh.to(torch::kInt64).to(device); + } + } + inputs.push_back(firstneigh_tensor); + c10::Dict outputs = module.forward(inputs).toGenericDict(); + c10::IValue energy_ = outputs.at("energy"); + c10::IValue force_ = outputs.at("extended_force"); + c10::IValue virial_ = outputs.at("extended_virial"); + ener = energy_.toTensor().item(); + + torch::Tensor flat_force_ = force_.toTensor().view({-1}); + torch::Tensor cpu_force_ = flat_force_.to(torch::kCPU); + force.assign(cpu_force_.data_ptr(), cpu_force_.data_ptr() + cpu_force_.numel()); + + torch::Tensor flat_virial_ = virial_.toTensor().view({-1}); + torch::Tensor cpu_virial_ = flat_virial_.to(torch::kCPU); + virial.assign(cpu_virial_.data_ptr(), cpu_virial_.data_ptr() + cpu_virial_.numel()); + +} +template void DeepPotPT::compute(double& ener, + std::vector& force, + std::vector& virial, + const std::vector& coord, + const std::vector& atype, + const std::vector& box, + const InputNlist& lmp_list, + const int& ago); + + +template +void DeepPotPT::compute(ENERGYVTYPE& ener, + std::vector& force, + std::vector& virial, + const std::vector& coord, + const std::vector& atype, + const std::vector& box) +{ + auto device = torch::kCUDA; + module.to(device); + std::vector coord_wrapped = coord; + int natoms = atype.size(); + auto options = torch::TensorOptions().dtype(torch::kFloat64); + auto int_options = torch::TensorOptions().dtype(torch::kInt64); + std::vector inputs; + at::Tensor coord_wrapped_Tensor = torch::from_blob(coord_wrapped.data(), {1, natoms, 3}, options).to(device); + inputs.push_back(coord_wrapped_Tensor); + std::vector atype_64(atype.begin(), atype.end()); + at::Tensor atype_Tensor = torch::from_blob(atype_64.data(), {1, natoms}, int_options).to(device); + inputs.push_back(atype_Tensor); + at::Tensor box_Tensor = torch::from_blob(const_cast(box.data()), {1, 9}, options).to(device); + inputs.push_back(box_Tensor); + c10::Dict outputs = module.forward(inputs).toGenericDict(); + + + c10::IValue energy_ = outputs.at("energy"); + c10::IValue force_ = outputs.at("force"); + c10::IValue virial_ = outputs.at("virial"); + ener = energy_.toTensor().item(); + + torch::Tensor flat_force_ = force_.toTensor().view({-1}); + torch::Tensor cpu_force_ = flat_force_.to(torch::kCPU); + force.assign(cpu_force_.data_ptr(), cpu_force_.data_ptr() + cpu_force_.numel()); + + torch::Tensor flat_virial_ = virial_.toTensor().view({-1}); + torch::Tensor cpu_virial_ = flat_virial_.to(torch::kCPU); + virial.assign(cpu_virial_.data_ptr(), cpu_virial_.data_ptr() + cpu_virial_.numel()); + +} +template void DeepPotPT::compute(double& ener, + std::vector& force, + std::vector& virial, + const std::vector& coord, + const std::vector& atype, + const std::vector& box); + +void DeepPotPT::get_type_map(std::string& type_map) { + auto ret = module.run_method("get_type_map").toList(); + for (const torch::IValue& element : ret) { + type_map += torch::str(element); // Convert each element to a string + type_map += " "; // Add a space between elements + } +} + +// forward to template method +void DeepPotPT::computew(std::vector& ener, + std::vector& force, + std::vector& virial, + std::vector& atom_energy, + std::vector& atom_virial, + const std::vector& coord, + const std::vector& atype, + const std::vector& box, + const std::vector& fparam, + const std::vector& aparam) { + //TODO: atomic compute unsupported + compute(ener, force, virial, coord, atype, box); +} +void DeepPotPT::computew(std::vector& ener, + std::vector& force, + std::vector& virial, + std::vector& atom_energy, + std::vector& atom_virial, + const std::vector& coord, + const std::vector& atype, + const std::vector& box, + const std::vector& fparam, + const std::vector& aparam) { + //TODO: atomic compute unsupported + compute(ener, force, virial, coord, atype, box); +} +void DeepPotPT::computew(std::vector& ener, + std::vector& force, + std::vector& virial, + std::vector& atom_energy, + std::vector& atom_virial, + const std::vector& coord, + const std::vector& atype, + const std::vector& box, + const int nghost, + const InputNlist& inlist, + const int& ago, + const std::vector& fparam, + const std::vector& aparam) { + //TODO: atomic compute unsupported + compute(ener, force, virial, coord, atype, box, inlist,ago); +} +void DeepPotPT::computew(std::vector& ener, + std::vector& force, + std::vector& virial, + std::vector& atom_energy, + std::vector& atom_virial, + const std::vector& coord, + const std::vector& atype, + const std::vector& box, + const int nghost, + const InputNlist& inlist, + const int& ago, + const std::vector& fparam, + const std::vector& aparam) { + //TODO: atomic compute unsupported + compute(ener, force, virial, coord, atype, box, inlist,ago); +} +void DeepPotPT::computew_mixed_type(std::vector& ener, + std::vector& force, + std::vector& virial, + std::vector& atom_energy, + std::vector& atom_virial, + const int& nframes, + const std::vector& coord, + const std::vector& atype, + const std::vector& box, + const std::vector& fparam, + const std::vector& aparam) { + throw; + +} +void DeepPotPT::computew_mixed_type(std::vector& ener, + std::vector& force, + std::vector& virial, + std::vector& atom_energy, + std::vector& atom_virial, + const int& nframes, + const std::vector& coord, + const std::vector& atype, + const std::vector& box, + const std::vector& fparam, + const std::vector& aparam) { + throw; +} diff --git a/source/api_cc/src/commonPT.cc b/source/api_cc/src/commonPT.cc new file mode 100644 index 0000000000..d4b3236064 --- /dev/null +++ b/source/api_cc/src/commonPT.cc @@ -0,0 +1,20 @@ +#include "commonPT.h" + +void NeighborListData::copy_from_nlist(const InputNlist& inlist, int& max_num_neighbors, int nnei) +{ + int inum = inlist.inum; + ilist.resize(inum); + numneigh.resize(inum); + memcpy(&ilist[0], inlist.ilist, inum * sizeof(int)); + int* max_element = std::max_element(inlist.numneigh, inlist.numneigh + inum); + max_num_neighbors = *max_element; + if (max_num_neighbors < nnei) + max_num_neighbors = nnei; + jlist = (int*)malloc(inum * max_num_neighbors * sizeof(int)); + memset(jlist, -1 , inum * max_num_neighbors * sizeof(int)); + for (int ii = 0; ii < inum; ++ii) { + int jnum = inlist.numneigh[ii]; + numneigh[ii] = inlist.numneigh[ii]; + memcpy(&jlist[ii * max_num_neighbors], inlist.firstneigh[ii], jnum * sizeof(int)); + } +} \ No newline at end of file From d3befece4465d7f15cf4c69cc666567cfafdd60f Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 22 Jan 2024 10:43:35 +0000 Subject: [PATCH 002/117] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- source/api_cc/include/DeepPotPT.h | 29 ++-- source/api_cc/include/commonPT.h | 19 ++- source/api_cc/src/DeepPot.cc | 2 +- source/api_cc/src/DeepPotPT.cc | 275 +++++++++++++++--------------- source/api_cc/src/commonPT.cc | 16 +- 5 files changed, 178 insertions(+), 163 deletions(-) diff --git a/source/api_cc/include/DeepPotPT.h b/source/api_cc/include/DeepPotPT.h index 62035d9010..efe453ae8e 100644 --- a/source/api_cc/include/DeepPotPT.h +++ b/source/api_cc/include/DeepPotPT.h @@ -1,9 +1,10 @@ // SPDX-License-Identifier: LGPL-3.0-or-later #pragma once +#include + #include "DeepPot.h" #include "commonPT.h" -#include namespace deepmd { /** @@ -33,8 +34,7 @@ class DeepPotPT : public DeepPotBase { * @param[in] file_content The content of the model file. If it is not empty, *DP will read from the string instead of the file. **/ - void init(const std::string& model, - const int& gpu_rank = 0); + void init(const std::string& model, const int& gpu_rank = 0); private: /** @@ -63,13 +63,13 @@ class DeepPotPT : public DeepPotBase { void compute(ENERGYVTYPE& ener, std::vector& force, std::vector& virial, - // std::vector& atom_energy, - // std::vector& atom_virial, + // std::vector& atom_energy, + // std::vector& atom_virial, const std::vector& coord, const std::vector& atype, const std::vector& box); - // const std::vector& fparam = std::vector(), - // const std::vector& aparam = std::vector()); + // const std::vector& fparam = std::vector(), + // const std::vector& aparam = std::vector()); /** * @brief Evaluate the energy, force, virial, atomic energy, and atomic virial *by using this DP. @@ -99,16 +99,16 @@ class DeepPotPT : public DeepPotBase { void compute(ENERGYVTYPE& ener, std::vector& force, std::vector& virial, - // std::vector& atom_energy, - // std::vector& atom_virial, + // std::vector& atom_energy, + // std::vector& atom_virial, const std::vector& coord, const std::vector& atype, const std::vector& box, - // const int nghost, + // const int nghost, const InputNlist& lmp_list, const int& ago); - // const std::vector& fparam = std::vector(), - // const std::vector& aparam = std::vector()); + // const std::vector& fparam = std::vector(), + // const std::vector& aparam = std::vector()); /** * @brief Evaluate the energy, force, and virial with the mixed type *by using this DP. @@ -310,7 +310,6 @@ class DeepPotPT : public DeepPotBase { const std::vector& aparam = std::vector()); private: - bool inited; int ntypes; int ntypes_spin; @@ -320,10 +319,10 @@ class DeepPotPT : public DeepPotBase { torch::jit::script::Module module; double rcut; NeighborListData nlist_data; - //InputNlist nlist; + // InputNlist nlist; int max_num_neighbors; int gpu_id; - at::Tensor firstneigh_tensor; + at::Tensor firstneigh_tensor; }; } // namespace deepmd diff --git a/source/api_cc/include/commonPT.h b/source/api_cc/include/commonPT.h index 6e7b957aeb..d2d2e106c7 100644 --- a/source/api_cc/include/commonPT.h +++ b/source/api_cc/include/commonPT.h @@ -1,26 +1,29 @@ +// SPDX-License-Identifier: LGPL-3.0-or-later #include #ifndef COMMON_H #define COMMON_H -#include -#include #include +#include +#include #include -#include "neighbor_list.h" +#include "neighbor_list.h" struct NeighborListData { /// Array stores the core region atom's index std::vector ilist; /// Array stores the core region atom's neighbor index - //std::vector> jlist; - int *jlist; + // std::vector> jlist; + int* jlist; /// Array stores the number of neighbors of core region atoms std::vector numneigh; /// Array stores the the location of the first neighbor of core region atoms std::vector firstneigh; public: - void copy_from_nlist(const InputNlist& inlist, int& max_num_neighbors,int nnei); - //void make_inlist(InputNlist& inlist); + void copy_from_nlist(const InputNlist& inlist, + int& max_num_neighbors, + int nnei); + // void make_inlist(InputNlist& inlist); }; -#endif \ No newline at end of file +#endif diff --git a/source/api_cc/src/DeepPot.cc b/source/api_cc/src/DeepPot.cc index 15030b8841..e3640517cf 100644 --- a/source/api_cc/src/DeepPot.cc +++ b/source/api_cc/src/DeepPot.cc @@ -38,7 +38,7 @@ void DeepPot::init(const std::string& model, // TODO: throw errors if TF backend is not built, without mentioning TF dp = std::make_shared(model, gpu_rank, file_content); } else if (deepmd::DPBackend::PyTorch == backend) { - //throw deepmd::deepmd_exception("PyTorch backend is not supported yet"); + // throw deepmd::deepmd_exception("PyTorch backend is not supported yet"); dp = std::make_shared(model, gpu_rank, file_content); } else if (deepmd::DPBackend::Paddle == backend) { throw deepmd::deepmd_exception("PaddlePaddle backend is not supported yet"); diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index 956d6084bd..9f3cb998bf 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -1,12 +1,12 @@ +// SPDX-License-Identifier: LGPL-3.0-or-later #include "DeepPotPT.h" using namespace deepmd; -DeepPotPT::DeepPotPT() -: inited(false) { } +DeepPotPT::DeepPotPT() : inited(false) {} DeepPotPT::DeepPotPT(const std::string& model, const int& gpu_rank, const std::string& file_content) - : inited(false){ + : inited(false) { try { init(model, gpu_rank); } catch (...) { @@ -15,146 +15,156 @@ DeepPotPT::DeepPotPT(const std::string& model, } } void DeepPotPT::init(const std::string& model, const int& gpu_rank) { - if (inited) { + if (inited) { std::cerr << "WARNING: deepmd-kit should not be initialized twice, do " "nothing at the second call of initializer" << std::endl; return; - } - std::cout << "load model from: " <(rcut_); - inited = true; + } + std::cout << "load model from: " << model << " to gpu " << gpu_rank + << std::endl; + gpu_id = gpu_rank; + torch::Device device(torch::kCUDA, gpu_rank); + + module = torch::jit::load(model, device); + torch::jit::FusionStrategy strategy; + strategy = {{torch::jit::FusionBehavior::DYNAMIC, 10}}; + torch::jit::setFusionStrategy(strategy); + + // at::globalContext().setAllowTF32CuBLAS(true); + // at::globalContext().setAllowTF32CuDNN(true); + auto rcut_ = module.run_method("get_rcut").toDouble(); + rcut = static_cast(rcut_); + inited = true; } -DeepPotPT::~DeepPotPT() { } - - +DeepPotPT::~DeepPotPT() {} template void DeepPotPT::compute(ENERGYVTYPE& ener, - std::vector& force, - std::vector& virial, - const std::vector& coord, - const std::vector& atype, - const std::vector& box, - const InputNlist& lmp_list, - const int& ago) -{ - torch::Device device(torch::kCUDA, gpu_id); - std::vector coord_wrapped = coord; - int natoms = atype.size(); - auto options = torch::TensorOptions().dtype(torch::kFloat64); - auto int_options = torch::TensorOptions().dtype(torch::kInt64); - auto int32_options = torch::TensorOptions().dtype(torch::kInt32); - std::vector inputs; - at::Tensor coord_wrapped_Tensor = torch::from_blob(coord_wrapped.data(), {1,natoms, 3}, options).to(device); - inputs.push_back(coord_wrapped_Tensor); - std::vector atype_64(atype.begin(), atype.end()); - at::Tensor atype_Tensor = torch::from_blob(atype_64.data(), {1,natoms}, int_options).to(device); - inputs.push_back(atype_Tensor); - if(ago == 0) - { - int64_t nnei = module.run_method("get_nnei").toInt(); - nlist_data.copy_from_nlist(lmp_list,max_num_neighbors,nnei); - if(max_num_neighbors > nnei) - { - at::Tensor firstneigh = torch::from_blob(nlist_data.jlist, {lmp_list.inum,max_num_neighbors}, int32_options); - at::Tensor nlist= firstneigh.to(torch::kInt64).to(device); - firstneigh_tensor = module.run_method("sort_neighbor_list",coord_wrapped_Tensor,nlist).toTensor(); - } - else - { - at::Tensor firstneigh = torch::from_blob(nlist_data.jlist, {1,lmp_list.inum,max_num_neighbors}, int32_options); - firstneigh_tensor = firstneigh.to(torch::kInt64).to(device); - } + std::vector& force, + std::vector& virial, + const std::vector& coord, + const std::vector& atype, + const std::vector& box, + const InputNlist& lmp_list, + const int& ago) { + torch::Device device(torch::kCUDA, gpu_id); + std::vector coord_wrapped = coord; + int natoms = atype.size(); + auto options = torch::TensorOptions().dtype(torch::kFloat64); + auto int_options = torch::TensorOptions().dtype(torch::kInt64); + auto int32_options = torch::TensorOptions().dtype(torch::kInt32); + std::vector inputs; + at::Tensor coord_wrapped_Tensor = + torch::from_blob(coord_wrapped.data(), {1, natoms, 3}, options) + .to(device); + inputs.push_back(coord_wrapped_Tensor); + std::vector atype_64(atype.begin(), atype.end()); + at::Tensor atype_Tensor = + torch::from_blob(atype_64.data(), {1, natoms}, int_options).to(device); + inputs.push_back(atype_Tensor); + if (ago == 0) { + int64_t nnei = module.run_method("get_nnei").toInt(); + nlist_data.copy_from_nlist(lmp_list, max_num_neighbors, nnei); + if (max_num_neighbors > nnei) { + at::Tensor firstneigh = torch::from_blob( + nlist_data.jlist, {lmp_list.inum, max_num_neighbors}, int32_options); + at::Tensor nlist = firstneigh.to(torch::kInt64).to(device); + firstneigh_tensor = + module.run_method("sort_neighbor_list", coord_wrapped_Tensor, nlist) + .toTensor(); + } else { + at::Tensor firstneigh = torch::from_blob( + nlist_data.jlist, {1, lmp_list.inum, max_num_neighbors}, + int32_options); + firstneigh_tensor = firstneigh.to(torch::kInt64).to(device); } - inputs.push_back(firstneigh_tensor); - c10::Dict outputs = module.forward(inputs).toGenericDict(); - c10::IValue energy_ = outputs.at("energy"); - c10::IValue force_ = outputs.at("extended_force"); - c10::IValue virial_ = outputs.at("extended_virial"); - ener = energy_.toTensor().item(); - - torch::Tensor flat_force_ = force_.toTensor().view({-1}); - torch::Tensor cpu_force_ = flat_force_.to(torch::kCPU); - force.assign(cpu_force_.data_ptr(), cpu_force_.data_ptr() + cpu_force_.numel()); - - torch::Tensor flat_virial_ = virial_.toTensor().view({-1}); - torch::Tensor cpu_virial_ = flat_virial_.to(torch::kCPU); - virial.assign(cpu_virial_.data_ptr(), cpu_virial_.data_ptr() + cpu_virial_.numel()); - + } + inputs.push_back(firstneigh_tensor); + c10::Dict outputs = + module.forward(inputs).toGenericDict(); + c10::IValue energy_ = outputs.at("energy"); + c10::IValue force_ = outputs.at("extended_force"); + c10::IValue virial_ = outputs.at("extended_virial"); + ener = energy_.toTensor().item(); + + torch::Tensor flat_force_ = force_.toTensor().view({-1}); + torch::Tensor cpu_force_ = flat_force_.to(torch::kCPU); + force.assign(cpu_force_.data_ptr(), + cpu_force_.data_ptr() + cpu_force_.numel()); + + torch::Tensor flat_virial_ = virial_.toTensor().view({-1}); + torch::Tensor cpu_virial_ = flat_virial_.to(torch::kCPU); + virial.assign(cpu_virial_.data_ptr(), + cpu_virial_.data_ptr() + cpu_virial_.numel()); } -template void DeepPotPT::compute(double& ener, - std::vector& force, - std::vector& virial, - const std::vector& coord, - const std::vector& atype, - const std::vector& box, - const InputNlist& lmp_list, - const int& ago); - +template void DeepPotPT::compute( + double& ener, + std::vector& force, + std::vector& virial, + const std::vector& coord, + const std::vector& atype, + const std::vector& box, + const InputNlist& lmp_list, + const int& ago); template void DeepPotPT::compute(ENERGYVTYPE& ener, - std::vector& force, - std::vector& virial, - const std::vector& coord, - const std::vector& atype, - const std::vector& box) -{ - auto device = torch::kCUDA; - module.to(device); - std::vector coord_wrapped = coord; - int natoms = atype.size(); - auto options = torch::TensorOptions().dtype(torch::kFloat64); - auto int_options = torch::TensorOptions().dtype(torch::kInt64); - std::vector inputs; - at::Tensor coord_wrapped_Tensor = torch::from_blob(coord_wrapped.data(), {1, natoms, 3}, options).to(device); - inputs.push_back(coord_wrapped_Tensor); - std::vector atype_64(atype.begin(), atype.end()); - at::Tensor atype_Tensor = torch::from_blob(atype_64.data(), {1, natoms}, int_options).to(device); - inputs.push_back(atype_Tensor); - at::Tensor box_Tensor = torch::from_blob(const_cast(box.data()), {1, 9}, options).to(device); - inputs.push_back(box_Tensor); - c10::Dict outputs = module.forward(inputs).toGenericDict(); - - - c10::IValue energy_ = outputs.at("energy"); - c10::IValue force_ = outputs.at("force"); - c10::IValue virial_ = outputs.at("virial"); - ener = energy_.toTensor().item(); - - torch::Tensor flat_force_ = force_.toTensor().view({-1}); - torch::Tensor cpu_force_ = flat_force_.to(torch::kCPU); - force.assign(cpu_force_.data_ptr(), cpu_force_.data_ptr() + cpu_force_.numel()); - - torch::Tensor flat_virial_ = virial_.toTensor().view({-1}); - torch::Tensor cpu_virial_ = flat_virial_.to(torch::kCPU); - virial.assign(cpu_virial_.data_ptr(), cpu_virial_.data_ptr() + cpu_virial_.numel()); - + std::vector& force, + std::vector& virial, + const std::vector& coord, + const std::vector& atype, + const std::vector& box) { + auto device = torch::kCUDA; + module.to(device); + std::vector coord_wrapped = coord; + int natoms = atype.size(); + auto options = torch::TensorOptions().dtype(torch::kFloat64); + auto int_options = torch::TensorOptions().dtype(torch::kInt64); + std::vector inputs; + at::Tensor coord_wrapped_Tensor = + torch::from_blob(coord_wrapped.data(), {1, natoms, 3}, options) + .to(device); + inputs.push_back(coord_wrapped_Tensor); + std::vector atype_64(atype.begin(), atype.end()); + at::Tensor atype_Tensor = + torch::from_blob(atype_64.data(), {1, natoms}, int_options).to(device); + inputs.push_back(atype_Tensor); + at::Tensor box_Tensor = + torch::from_blob(const_cast(box.data()), {1, 9}, options) + .to(device); + inputs.push_back(box_Tensor); + c10::Dict outputs = + module.forward(inputs).toGenericDict(); + + c10::IValue energy_ = outputs.at("energy"); + c10::IValue force_ = outputs.at("force"); + c10::IValue virial_ = outputs.at("virial"); + ener = energy_.toTensor().item(); + + torch::Tensor flat_force_ = force_.toTensor().view({-1}); + torch::Tensor cpu_force_ = flat_force_.to(torch::kCPU); + force.assign(cpu_force_.data_ptr(), + cpu_force_.data_ptr() + cpu_force_.numel()); + + torch::Tensor flat_virial_ = virial_.toTensor().view({-1}); + torch::Tensor cpu_virial_ = flat_virial_.to(torch::kCPU); + virial.assign(cpu_virial_.data_ptr(), + cpu_virial_.data_ptr() + cpu_virial_.numel()); } -template void DeepPotPT::compute(double& ener, - std::vector& force, - std::vector& virial, - const std::vector& coord, - const std::vector& atype, - const std::vector& box); +template void DeepPotPT::compute( + double& ener, + std::vector& force, + std::vector& virial, + const std::vector& coord, + const std::vector& atype, + const std::vector& box); void DeepPotPT::get_type_map(std::string& type_map) { auto ret = module.run_method("get_type_map").toList(); for (const torch::IValue& element : ret) { - type_map += torch::str(element); // Convert each element to a string - type_map += " "; // Add a space between elements + type_map += torch::str(element); // Convert each element to a string + type_map += " "; // Add a space between elements } } @@ -169,7 +179,7 @@ void DeepPotPT::computew(std::vector& ener, const std::vector& box, const std::vector& fparam, const std::vector& aparam) { - //TODO: atomic compute unsupported + // TODO: atomic compute unsupported compute(ener, force, virial, coord, atype, box); } void DeepPotPT::computew(std::vector& ener, @@ -182,7 +192,7 @@ void DeepPotPT::computew(std::vector& ener, const std::vector& box, const std::vector& fparam, const std::vector& aparam) { - //TODO: atomic compute unsupported + // TODO: atomic compute unsupported compute(ener, force, virial, coord, atype, box); } void DeepPotPT::computew(std::vector& ener, @@ -198,8 +208,8 @@ void DeepPotPT::computew(std::vector& ener, const int& ago, const std::vector& fparam, const std::vector& aparam) { - //TODO: atomic compute unsupported - compute(ener, force, virial, coord, atype, box, inlist,ago); + // TODO: atomic compute unsupported + compute(ener, force, virial, coord, atype, box, inlist, ago); } void DeepPotPT::computew(std::vector& ener, std::vector& force, @@ -214,8 +224,8 @@ void DeepPotPT::computew(std::vector& ener, const int& ago, const std::vector& fparam, const std::vector& aparam) { - //TODO: atomic compute unsupported - compute(ener, force, virial, coord, atype, box, inlist,ago); + // TODO: atomic compute unsupported + compute(ener, force, virial, coord, atype, box, inlist, ago); } void DeepPotPT::computew_mixed_type(std::vector& ener, std::vector& force, @@ -228,8 +238,7 @@ void DeepPotPT::computew_mixed_type(std::vector& ener, const std::vector& box, const std::vector& fparam, const std::vector& aparam) { - throw; - + throw; } void DeepPotPT::computew_mixed_type(std::vector& ener, std::vector& force, diff --git a/source/api_cc/src/commonPT.cc b/source/api_cc/src/commonPT.cc index d4b3236064..aaa19b64f2 100644 --- a/source/api_cc/src/commonPT.cc +++ b/source/api_cc/src/commonPT.cc @@ -1,20 +1,24 @@ +// SPDX-License-Identifier: LGPL-3.0-or-later #include "commonPT.h" -void NeighborListData::copy_from_nlist(const InputNlist& inlist, int& max_num_neighbors, int nnei) -{ +void NeighborListData::copy_from_nlist(const InputNlist& inlist, + int& max_num_neighbors, + int nnei) { int inum = inlist.inum; ilist.resize(inum); numneigh.resize(inum); memcpy(&ilist[0], inlist.ilist, inum * sizeof(int)); int* max_element = std::max_element(inlist.numneigh, inlist.numneigh + inum); max_num_neighbors = *max_element; - if (max_num_neighbors < nnei) + if (max_num_neighbors < nnei) { max_num_neighbors = nnei; + } jlist = (int*)malloc(inum * max_num_neighbors * sizeof(int)); - memset(jlist, -1 , inum * max_num_neighbors * sizeof(int)); + memset(jlist, -1, inum * max_num_neighbors * sizeof(int)); for (int ii = 0; ii < inum; ++ii) { int jnum = inlist.numneigh[ii]; numneigh[ii] = inlist.numneigh[ii]; - memcpy(&jlist[ii * max_num_neighbors], inlist.firstneigh[ii], jnum * sizeof(int)); + memcpy(&jlist[ii * max_num_neighbors], inlist.firstneigh[ii], + jnum * sizeof(int)); } -} \ No newline at end of file +} From 051211829ebbd4f5a420e6c3046d17a02a92a1ef Mon Sep 17 00:00:00 2001 From: zxysbsbzxy Date: Thu, 25 Jan 2024 19:37:10 +0800 Subject: [PATCH 003/117] fix some bugs and add atomic output --- source/api_cc/include/DeepPotPT.h | 2 ++ source/api_cc/src/DeepPotPT.cc | 43 ++++++++++++++++++++++++++----- 2 files changed, 39 insertions(+), 6 deletions(-) diff --git a/source/api_cc/include/DeepPotPT.h b/source/api_cc/include/DeepPotPT.h index efe453ae8e..cccab63ae2 100644 --- a/source/api_cc/include/DeepPotPT.h +++ b/source/api_cc/include/DeepPotPT.h @@ -310,11 +310,13 @@ class DeepPotPT : public DeepPotBase { const std::vector& aparam = std::vector()); private: + int num_intra_nthreads, num_inter_nthreads; bool inited; int ntypes; int ntypes_spin; int dfparam; int daparam; + bool aparam_nall; // copy neighbor list info from host torch::jit::script::Module module; double rcut; diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index 9f3cb998bf..278b517b62 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -1,6 +1,6 @@ // SPDX-License-Identifier: LGPL-3.0-or-later #include "DeepPotPT.h" - +#include "common.h" using namespace deepmd; DeepPotPT::DeepPotPT() : inited(false) {} DeepPotPT::DeepPotPT(const std::string& model, @@ -25,16 +25,30 @@ void DeepPotPT::init(const std::string& model, const int& gpu_rank) { << std::endl; gpu_id = gpu_rank; torch::Device device(torch::kCUDA, gpu_rank); - - module = torch::jit::load(model, device); + //This may be implemented as something like DPErrcheck(DPSetDevice(gpu_rank % gpu_num)); + try { + module = torch::jit::load(model, device); + } + catch (const c10::Error& e) { + std::cerr << "Error loading the model, maybe GPU is not available\n"; + } torch::jit::FusionStrategy strategy; strategy = {{torch::jit::FusionBehavior::DYNAMIC, 10}}; torch::jit::setFusionStrategy(strategy); // at::globalContext().setAllowTF32CuBLAS(true); // at::globalContext().setAllowTF32CuDNN(true); + get_env_nthreads(num_intra_nthreads, num_inter_nthreads);//need to be fixed as DP_INTRA_OP_PARALLELISM_THREADS + at::set_num_interop_threads(num_inter_nthreads); + at::set_num_threads(num_intra_nthreads); + auto rcut_ = module.run_method("get_rcut").toDouble(); rcut = static_cast(rcut_); + ntypes = 0; + ntypes_spin = 0; + dfparam = 0; + daparam = 0; + aparam_nall = false; inited = true; } DeepPotPT::~DeepPotPT() {} @@ -43,6 +57,8 @@ template void DeepPotPT::compute(ENERGYVTYPE& ener, std::vector& force, std::vector& virial, + std::vector& atom_energy, + std::vector& atom_virial, const std::vector& coord, const std::vector& atype, const std::vector& box, @@ -81,13 +97,21 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, } } inputs.push_back(firstneigh_tensor); + at::Tensor box_Tensor = + torch::from_blob(const_cast(box.data()), {1, 9}, options) + .to(device); + inputs.push_back(box_Tensor); + at::Tensor do_atom_virial_tensor = torch.tensor(True); + inputs.push_back(do_atom_virial_tensor); c10::Dict outputs = module.forward(inputs).toGenericDict(); c10::IValue energy_ = outputs.at("energy"); c10::IValue force_ = outputs.at("extended_force"); c10::IValue virial_ = outputs.at("extended_virial"); + c10::IValue atom_virial_ = outputs.at("atomic_virial"); + c10::IValue atom_energy_ = outputs.at("atom_energy"); ener = energy_.toTensor().item(); - + atom_energy = atom_energy_.toTensor().item(); torch::Tensor flat_force_ = force_.toTensor().view({-1}); torch::Tensor cpu_force_ = flat_force_.to(torch::kCPU); force.assign(cpu_force_.data_ptr(), @@ -97,6 +121,11 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, torch::Tensor cpu_virial_ = flat_virial_.to(torch::kCPU); virial.assign(cpu_virial_.data_ptr(), cpu_virial_.data_ptr() + cpu_virial_.numel()); + + torch::Tensor flat_atom_virial_ = atom_virial_.toTensor().view({-1}); + torch::Tensor cpu_atom_virial_ = flat_atom_virial_.to(torch::kCPU); + atom_virial.assign(cpu_atom_virial_.data_ptr(), + cpu_atom_virial_.data_ptr() + cpu_atom_virial_.numel()); } template void DeepPotPT::compute( double& ener, @@ -238,7 +267,8 @@ void DeepPotPT::computew_mixed_type(std::vector& ener, const std::vector& box, const std::vector& fparam, const std::vector& aparam) { - throw; + throw deepmd::deepmd_exception( + "computew_mixed_type is not implemented"); } void DeepPotPT::computew_mixed_type(std::vector& ener, std::vector& force, @@ -251,5 +281,6 @@ void DeepPotPT::computew_mixed_type(std::vector& ener, const std::vector& box, const std::vector& fparam, const std::vector& aparam) { - throw; + throw deepmd::deepmd_exception( + "computew_mixed_type is not implemented"); } From 018a0353ffcec86d2d5f4ff414050ea207a8aa1d Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 25 Jan 2024 11:41:57 +0000 Subject: [PATCH 004/117] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- source/api_cc/src/DeepPotPT.cc | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index 278b517b62..6aa92fafcd 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -1,5 +1,6 @@ // SPDX-License-Identifier: LGPL-3.0-or-later #include "DeepPotPT.h" + #include "common.h" using namespace deepmd; DeepPotPT::DeepPotPT() : inited(false) {} @@ -25,12 +26,12 @@ void DeepPotPT::init(const std::string& model, const int& gpu_rank) { << std::endl; gpu_id = gpu_rank; torch::Device device(torch::kCUDA, gpu_rank); - //This may be implemented as something like DPErrcheck(DPSetDevice(gpu_rank % gpu_num)); + // This may be implemented as something like DPErrcheck(DPSetDevice(gpu_rank % + // gpu_num)); try { module = torch::jit::load(model, device); - } - catch (const c10::Error& e) { - std::cerr << "Error loading the model, maybe GPU is not available\n"; + } catch (const c10::Error& e) { + std::cerr << "Error loading the model, maybe GPU is not available\n"; } torch::jit::FusionStrategy strategy; strategy = {{torch::jit::FusionBehavior::DYNAMIC, 10}}; @@ -38,7 +39,9 @@ void DeepPotPT::init(const std::string& model, const int& gpu_rank) { // at::globalContext().setAllowTF32CuBLAS(true); // at::globalContext().setAllowTF32CuDNN(true); - get_env_nthreads(num_intra_nthreads, num_inter_nthreads);//need to be fixed as DP_INTRA_OP_PARALLELISM_THREADS + get_env_nthreads(num_intra_nthreads, + num_inter_nthreads); // need to be fixed as + // DP_INTRA_OP_PARALLELISM_THREADS at::set_num_interop_threads(num_inter_nthreads); at::set_num_threads(num_intra_nthreads); @@ -124,8 +127,9 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, torch::Tensor flat_atom_virial_ = atom_virial_.toTensor().view({-1}); torch::Tensor cpu_atom_virial_ = flat_atom_virial_.to(torch::kCPU); - atom_virial.assign(cpu_atom_virial_.data_ptr(), - cpu_atom_virial_.data_ptr() + cpu_atom_virial_.numel()); + atom_virial.assign( + cpu_atom_virial_.data_ptr(), + cpu_atom_virial_.data_ptr() + cpu_atom_virial_.numel()); } template void DeepPotPT::compute( double& ener, @@ -267,8 +271,7 @@ void DeepPotPT::computew_mixed_type(std::vector& ener, const std::vector& box, const std::vector& fparam, const std::vector& aparam) { - throw deepmd::deepmd_exception( - "computew_mixed_type is not implemented"); + throw deepmd::deepmd_exception("computew_mixed_type is not implemented"); } void DeepPotPT::computew_mixed_type(std::vector& ener, std::vector& force, @@ -281,6 +284,5 @@ void DeepPotPT::computew_mixed_type(std::vector& ener, const std::vector& box, const std::vector& fparam, const std::vector& aparam) { - throw deepmd::deepmd_exception( - "computew_mixed_type is not implemented"); + throw deepmd::deepmd_exception("computew_mixed_type is not implemented"); } From 5ebb9bf68ec7107decf3178f1763ea328caa9c22 Mon Sep 17 00:00:00 2001 From: zxysbsbzxy Date: Thu, 25 Jan 2024 20:25:26 +0800 Subject: [PATCH 005/117] fix atom compute bugs --- source/api_cc/include/DeepPotPT.h | 8 ++++---- source/api_cc/src/DeepPotPT.cc | 27 ++++++++++++++++++--------- 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/source/api_cc/include/DeepPotPT.h b/source/api_cc/include/DeepPotPT.h index cccab63ae2..4a6c8166f9 100644 --- a/source/api_cc/include/DeepPotPT.h +++ b/source/api_cc/include/DeepPotPT.h @@ -63,8 +63,8 @@ class DeepPotPT : public DeepPotBase { void compute(ENERGYVTYPE& ener, std::vector& force, std::vector& virial, - // std::vector& atom_energy, - // std::vector& atom_virial, + std::vector& atom_energy, + std::vector& atom_virial, const std::vector& coord, const std::vector& atype, const std::vector& box); @@ -99,8 +99,8 @@ class DeepPotPT : public DeepPotBase { void compute(ENERGYVTYPE& ener, std::vector& force, std::vector& virial, - // std::vector& atom_energy, - // std::vector& atom_virial, + std::vector& atom_energy, + std::vector& atom_virial, const std::vector& coord, const std::vector& atype, const std::vector& box, diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index 6aa92fafcd..12f1ab9dc1 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -46,7 +46,7 @@ void DeepPotPT::init(const std::string& model, const int& gpu_rank) { at::set_num_threads(num_intra_nthreads); auto rcut_ = module.run_method("get_rcut").toDouble(); - rcut = static_cast(rcut_); + rcut = static_cast(rcut_); ntypes = 0; ntypes_spin = 0; dfparam = 0; @@ -99,13 +99,13 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, firstneigh_tensor = firstneigh.to(torch::kInt64).to(device); } } - inputs.push_back(firstneigh_tensor); at::Tensor box_Tensor = torch::from_blob(const_cast(box.data()), {1, 9}, options) .to(device); inputs.push_back(box_Tensor); - at::Tensor do_atom_virial_tensor = torch.tensor(True); + at::Tensor do_atom_virial_tensor = torch::tensor(true); inputs.push_back(do_atom_virial_tensor); + inputs.push_back(firstneigh_tensor); c10::Dict outputs = module.forward(inputs).toGenericDict(); c10::IValue energy_ = outputs.at("energy"); @@ -114,7 +114,9 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, c10::IValue atom_virial_ = outputs.at("atomic_virial"); c10::IValue atom_energy_ = outputs.at("atom_energy"); ener = energy_.toTensor().item(); - atom_energy = atom_energy_.toTensor().item(); + torch::Tensor flat_atom_energy_ = atom_energy_.toTensor().view({-1}); + torch::Tensor cpu_atom_energy_ = flat_atom_energy_.to(torch::kCPU); + force.assign(cpu_atom_energy_.data_ptr(), cpu_atom_energy_.data_ptr() + cpu_atom_energy_.numel()); torch::Tensor flat_force_ = force_.toTensor().view({-1}); torch::Tensor cpu_force_ = flat_force_.to(torch::kCPU); force.assign(cpu_force_.data_ptr(), @@ -135,6 +137,8 @@ template void DeepPotPT::compute( double& ener, std::vector& force, std::vector& virial, + std::vector& atom_energy, + std::vector& atom_virial, const std::vector& coord, const std::vector& atype, const std::vector& box, @@ -145,6 +149,8 @@ template void DeepPotPT::compute(ENERGYVTYPE& ener, std::vector& force, std::vector& virial, + std::vector& atom_energy, + std::vector& atom_virial, const std::vector& coord, const std::vector& atype, const std::vector& box) { @@ -189,6 +195,8 @@ template void DeepPotPT::compute( double& ener, std::vector& force, std::vector& virial, + std::vector& atom_energy, + std::vector& atom_virial, const std::vector& coord, const std::vector& atype, const std::vector& box); @@ -212,8 +220,7 @@ void DeepPotPT::computew(std::vector& ener, const std::vector& box, const std::vector& fparam, const std::vector& aparam) { - // TODO: atomic compute unsupported - compute(ener, force, virial, coord, atype, box); + compute(ener, force, virial, atom_energy,atom_virial, atype, box); } void DeepPotPT::computew(std::vector& ener, std::vector& force, @@ -226,7 +233,8 @@ void DeepPotPT::computew(std::vector& ener, const std::vector& fparam, const std::vector& aparam) { // TODO: atomic compute unsupported - compute(ener, force, virial, coord, atype, box); + //compute(ener, force, virial, atom_energy,atom_virial, atype, box); + throw deepmd::deepmd_exception("unsupported float type"); } void DeepPotPT::computew(std::vector& ener, std::vector& force, @@ -242,7 +250,7 @@ void DeepPotPT::computew(std::vector& ener, const std::vector& fparam, const std::vector& aparam) { // TODO: atomic compute unsupported - compute(ener, force, virial, coord, atype, box, inlist, ago); + compute(ener, force, virial, atom_energy,atom_virial, coord, atype, box, inlist, ago); } void DeepPotPT::computew(std::vector& ener, std::vector& force, @@ -258,7 +266,8 @@ void DeepPotPT::computew(std::vector& ener, const std::vector& fparam, const std::vector& aparam) { // TODO: atomic compute unsupported - compute(ener, force, virial, coord, atype, box, inlist, ago); + //compute(ener, force, virial, coord, atype, box, inlist, ago); + throw deepmd::deepmd_exception("unsupported float type"); } void DeepPotPT::computew_mixed_type(std::vector& ener, std::vector& force, From 6924e060a8b9dc520bb7d376077baa565aa2d68d Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 25 Jan 2024 12:25:52 +0000 Subject: [PATCH 006/117] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- source/api_cc/src/DeepPotPT.cc | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index 12f1ab9dc1..c3beba8207 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -115,8 +115,9 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, c10::IValue atom_energy_ = outputs.at("atom_energy"); ener = energy_.toTensor().item(); torch::Tensor flat_atom_energy_ = atom_energy_.toTensor().view({-1}); - torch::Tensor cpu_atom_energy_ = flat_atom_energy_.to(torch::kCPU); - force.assign(cpu_atom_energy_.data_ptr(), cpu_atom_energy_.data_ptr() + cpu_atom_energy_.numel()); + torch::Tensor cpu_atom_energy_ = flat_atom_energy_.to(torch::kCPU); + force.assign(cpu_atom_energy_.data_ptr(), + cpu_atom_energy_.data_ptr() + cpu_atom_energy_.numel()); torch::Tensor flat_force_ = force_.toTensor().view({-1}); torch::Tensor cpu_force_ = flat_force_.to(torch::kCPU); force.assign(cpu_force_.data_ptr(), @@ -220,7 +221,7 @@ void DeepPotPT::computew(std::vector& ener, const std::vector& box, const std::vector& fparam, const std::vector& aparam) { - compute(ener, force, virial, atom_energy,atom_virial, atype, box); + compute(ener, force, virial, atom_energy, atom_virial, atype, box); } void DeepPotPT::computew(std::vector& ener, std::vector& force, @@ -233,7 +234,7 @@ void DeepPotPT::computew(std::vector& ener, const std::vector& fparam, const std::vector& aparam) { // TODO: atomic compute unsupported - //compute(ener, force, virial, atom_energy,atom_virial, atype, box); + // compute(ener, force, virial, atom_energy,atom_virial, atype, box); throw deepmd::deepmd_exception("unsupported float type"); } void DeepPotPT::computew(std::vector& ener, @@ -250,7 +251,8 @@ void DeepPotPT::computew(std::vector& ener, const std::vector& fparam, const std::vector& aparam) { // TODO: atomic compute unsupported - compute(ener, force, virial, atom_energy,atom_virial, coord, atype, box, inlist, ago); + compute(ener, force, virial, atom_energy, atom_virial, coord, atype, box, + inlist, ago); } void DeepPotPT::computew(std::vector& ener, std::vector& force, @@ -266,7 +268,7 @@ void DeepPotPT::computew(std::vector& ener, const std::vector& fparam, const std::vector& aparam) { // TODO: atomic compute unsupported - //compute(ener, force, virial, coord, atype, box, inlist, ago); + // compute(ener, force, virial, coord, atype, box, inlist, ago); throw deepmd::deepmd_exception("unsupported float type"); } void DeepPotPT::computew_mixed_type(std::vector& ener, From 26217bf06435033230e69ba7fabf74296ea6bf35 Mon Sep 17 00:00:00 2001 From: zxysbsbzxy Date: Thu, 25 Jan 2024 20:42:52 +0800 Subject: [PATCH 007/117] fix bugs --- source/api_cc/src/DeepPotPT.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index 12f1ab9dc1..2ff36eb16d 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -103,7 +103,7 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, torch::from_blob(const_cast(box.data()), {1, 9}, options) .to(device); inputs.push_back(box_Tensor); - at::Tensor do_atom_virial_tensor = torch::tensor(true); + bool do_atom_virial_tensor = true; inputs.push_back(do_atom_virial_tensor); inputs.push_back(firstneigh_tensor); c10::Dict outputs = From c9bbd83cf0aabfb8e0e8b0a413aac29a2d963a9e Mon Sep 17 00:00:00 2001 From: zxysbsbzxy Date: Thu, 25 Jan 2024 20:47:42 +0800 Subject: [PATCH 008/117] include deeppotpt.h --- source/api_cc/src/DeepPot.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/api_cc/src/DeepPot.cc b/source/api_cc/src/DeepPot.cc index a5a558e484..4d023f927d 100644 --- a/source/api_cc/src/DeepPot.cc +++ b/source/api_cc/src/DeepPot.cc @@ -10,6 +10,9 @@ #ifdef BUILD_TENSORFLOW #include "DeepPotTF.h" #endif +#ifdef BUILD_PYTORCH +#include "DeepPotPT.h" +#endif #include "device.h" using namespace deepmd; From 54e81662438b756149e80d6b507887f852fd6172 Mon Sep 17 00:00:00 2001 From: zxysbsbzxy Date: Thu, 25 Jan 2024 21:11:24 +0800 Subject: [PATCH 009/117] add float and vector energytype implement --- source/api_cc/include/commonPT.h | 2 - source/api_cc/src/DeepPotPT.cc | 102 +++++++++++++++++++++++++------ 2 files changed, 82 insertions(+), 22 deletions(-) diff --git a/source/api_cc/include/commonPT.h b/source/api_cc/include/commonPT.h index d2d2e106c7..16c08c11b5 100644 --- a/source/api_cc/include/commonPT.h +++ b/source/api_cc/include/commonPT.h @@ -1,7 +1,5 @@ // SPDX-License-Identifier: LGPL-3.0-or-later #include -#ifndef COMMON_H -#define COMMON_H #include #include #include diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index 23ec06170e..f6798c6da4 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -113,29 +113,33 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, c10::IValue virial_ = outputs.at("extended_virial"); c10::IValue atom_virial_ = outputs.at("atomic_virial"); c10::IValue atom_energy_ = outputs.at("atom_energy"); - ener = energy_.toTensor().item(); + + torch::Tensor flat_energy_ = energy_.toTensor().view({-1}); + torch::Tensor cpu_energy_ = flat_energy_.to(torch::kCPU); + energy.assign(cpu_energy_.data_ptr(), + cpu_energy_.data_ptr() + cpu_energy_.numel()); torch::Tensor flat_atom_energy_ = atom_energy_.toTensor().view({-1}); torch::Tensor cpu_atom_energy_ = flat_atom_energy_.to(torch::kCPU); - force.assign(cpu_atom_energy_.data_ptr(), - cpu_atom_energy_.data_ptr() + cpu_atom_energy_.numel()); + atom_energy.assign(cpu_atom_energy_.data_ptr(), + cpu_atom_energy_.data_ptr() + cpu_atom_energy_.numel()); torch::Tensor flat_force_ = force_.toTensor().view({-1}); torch::Tensor cpu_force_ = flat_force_.to(torch::kCPU); - force.assign(cpu_force_.data_ptr(), - cpu_force_.data_ptr() + cpu_force_.numel()); + force.assign(cpu_force_.data_ptr(), + cpu_force_.data_ptr() + cpu_force_.numel()); torch::Tensor flat_virial_ = virial_.toTensor().view({-1}); torch::Tensor cpu_virial_ = flat_virial_.to(torch::kCPU); - virial.assign(cpu_virial_.data_ptr(), - cpu_virial_.data_ptr() + cpu_virial_.numel()); + virial.assign(cpu_virial_.data_ptr(), + cpu_virial_.data_ptr() + cpu_virial_.numel()); torch::Tensor flat_atom_virial_ = atom_virial_.toTensor().view({-1}); torch::Tensor cpu_atom_virial_ = flat_atom_virial_.to(torch::kCPU); atom_virial.assign( - cpu_atom_virial_.data_ptr(), - cpu_atom_virial_.data_ptr() + cpu_atom_virial_.numel()); + cpu_atom_virial_.data_ptr(), + cpu_atom_virial_.data_ptr() + cpu_atom_virial_.numel()); } -template void DeepPotPT::compute( - double& ener, +template void DeepPotPT::compute( + ENERGYTYPE& ener, std::vector& force, std::vector& virial, std::vector& atom_energy, @@ -145,7 +149,39 @@ template void DeepPotPT::compute( const std::vector& box, const InputNlist& lmp_list, const int& ago); - +template void DeepPotPT::compute( + ENERGYTYPE& ener, + std::vector& force, + std::vector& virial, + std::vector& atom_energy, + std::vector& atom_virial, + const std::vector& coord, + const std::vector& atype, + const std::vector& box, + const InputNlist& lmp_list, + const int& ago); + template void DeepPotPT::compute>( + std::vector& ener, + std::vector& force, + std::vector& virial, + std::vector& atom_energy, + std::vector& atom_virial, + const std::vector& coord, + const std::vector& atype, + const std::vector& box, + const InputNlist& lmp_list, + const int& ago); + template void DeepPotPT::compute>( + std::vector& ener, + std::vector& force, + std::vector& virial, + std::vector& atom_energy, + std::vector& atom_virial, + const std::vector& coord, + const std::vector& atype, + const std::vector& box, + const InputNlist& lmp_list, + const int& ago); template void DeepPotPT::compute(ENERGYVTYPE& ener, std::vector& force, @@ -180,20 +216,20 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, c10::IValue energy_ = outputs.at("energy"); c10::IValue force_ = outputs.at("force"); c10::IValue virial_ = outputs.at("virial"); - ener = energy_.toTensor().item(); + ener = energy_.toTensor().item(); torch::Tensor flat_force_ = force_.toTensor().view({-1}); torch::Tensor cpu_force_ = flat_force_.to(torch::kCPU); - force.assign(cpu_force_.data_ptr(), - cpu_force_.data_ptr() + cpu_force_.numel()); + force.assign(cpu_force_.data_ptr(), + cpu_force_.data_ptr() + cpu_force_.numel()); torch::Tensor flat_virial_ = virial_.toTensor().view({-1}); torch::Tensor cpu_virial_ = flat_virial_.to(torch::kCPU); - virial.assign(cpu_virial_.data_ptr(), - cpu_virial_.data_ptr() + cpu_virial_.numel()); + virial.assign(cpu_virial_.data_ptr(), + cpu_virial_.data_ptr() + cpu_virial_.numel()); } -template void DeepPotPT::compute( - double& ener, +template void DeepPotPT::compute( + ENERGYTYPE& ener, std::vector& force, std::vector& virial, std::vector& atom_energy, @@ -201,7 +237,33 @@ template void DeepPotPT::compute( const std::vector& coord, const std::vector& atype, const std::vector& box); - +template void DeepPotPT::compute( + ENERGYTYPE& ener, + std::vector& force, + std::vector& virial, + std::vector& atom_energy, + std::vector& atom_virial, + const std::vector& coord, + const std::vector& atype, + const std::vector& box); + template void DeepPotPT::compute>( + std::vector& ener, + std::vector& force, + std::vector& virial, + std::vector& atom_energy, + std::vector& atom_virial, + const std::vector& coord, + const std::vector& atype, + const std::vector& box); + template void DeepPotPT::compute>( + std::vector& ener, + std::vector& force, + std::vector& virial, + std::vector& atom_energy, + std::vector& atom_virial, + const std::vector& coord, + const std::vector& atype, + const std::vector& box); void DeepPotPT::get_type_map(std::string& type_map) { auto ret = module.run_method("get_type_map").toList(); for (const torch::IValue& element : ret) { From 8f0219bf80ea6501c5344935e70dff5ded3eb8e0 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 25 Jan 2024 13:11:50 +0000 Subject: [PATCH 010/117] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- source/api_cc/include/commonPT.h | 1 + source/api_cc/src/DeepPotPT.cc | 15 ++++++++------- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/source/api_cc/include/commonPT.h b/source/api_cc/include/commonPT.h index 16c08c11b5..0220e7b790 100644 --- a/source/api_cc/include/commonPT.h +++ b/source/api_cc/include/commonPT.h @@ -1,5 +1,6 @@ // SPDX-License-Identifier: LGPL-3.0-or-later #include + #include #include #include diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index f6798c6da4..bfb979e6a4 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -117,11 +117,12 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, torch::Tensor flat_energy_ = energy_.toTensor().view({-1}); torch::Tensor cpu_energy_ = flat_energy_.to(torch::kCPU); energy.assign(cpu_energy_.data_ptr(), - cpu_energy_.data_ptr() + cpu_energy_.numel()); + cpu_energy_.data_ptr() + cpu_energy_.numel()); torch::Tensor flat_atom_energy_ = atom_energy_.toTensor().view({-1}); torch::Tensor cpu_atom_energy_ = flat_atom_energy_.to(torch::kCPU); - atom_energy.assign(cpu_atom_energy_.data_ptr(), - cpu_atom_energy_.data_ptr() + cpu_atom_energy_.numel()); + atom_energy.assign( + cpu_atom_energy_.data_ptr(), + cpu_atom_energy_.data_ptr() + cpu_atom_energy_.numel()); torch::Tensor flat_force_ = force_.toTensor().view({-1}); torch::Tensor cpu_force_ = flat_force_.to(torch::kCPU); force.assign(cpu_force_.data_ptr(), @@ -160,7 +161,7 @@ template void DeepPotPT::compute( const std::vector& box, const InputNlist& lmp_list, const int& ago); - template void DeepPotPT::compute>( +template void DeepPotPT::compute>( std::vector& ener, std::vector& force, std::vector& virial, @@ -171,7 +172,7 @@ template void DeepPotPT::compute( const std::vector& box, const InputNlist& lmp_list, const int& ago); - template void DeepPotPT::compute>( +template void DeepPotPT::compute>( std::vector& ener, std::vector& force, std::vector& virial, @@ -246,7 +247,7 @@ template void DeepPotPT::compute( const std::vector& coord, const std::vector& atype, const std::vector& box); - template void DeepPotPT::compute>( +template void DeepPotPT::compute>( std::vector& ener, std::vector& force, std::vector& virial, @@ -255,7 +256,7 @@ template void DeepPotPT::compute( const std::vector& coord, const std::vector& atype, const std::vector& box); - template void DeepPotPT::compute>( +template void DeepPotPT::compute>( std::vector& ener, std::vector& force, std::vector& virial, From 0a8e19e7f06a1b7393ccc41a916eb0e5928b506e Mon Sep 17 00:00:00 2001 From: zxysbsbzxy Date: Thu, 25 Jan 2024 21:12:57 +0800 Subject: [PATCH 011/117] modify pt nlistdata name --- source/api_cc/include/DeepPotPT.h | 2 +- source/api_cc/include/commonPT.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/source/api_cc/include/DeepPotPT.h b/source/api_cc/include/DeepPotPT.h index 4a6c8166f9..4cd39cdc9c 100644 --- a/source/api_cc/include/DeepPotPT.h +++ b/source/api_cc/include/DeepPotPT.h @@ -320,7 +320,7 @@ class DeepPotPT : public DeepPotBase { // copy neighbor list info from host torch::jit::script::Module module; double rcut; - NeighborListData nlist_data; + NeighborListDataPT nlist_data; // InputNlist nlist; int max_num_neighbors; int gpu_id; diff --git a/source/api_cc/include/commonPT.h b/source/api_cc/include/commonPT.h index 16c08c11b5..396c69ff15 100644 --- a/source/api_cc/include/commonPT.h +++ b/source/api_cc/include/commonPT.h @@ -7,7 +7,7 @@ #include "neighbor_list.h" -struct NeighborListData { +struct NeighborListDataPT { /// Array stores the core region atom's index std::vector ilist; /// Array stores the core region atom's neighbor index From 02cf214533fee5e5d80f03f67e826f8564c19e8e Mon Sep 17 00:00:00 2001 From: zxysbsbzxy Date: Thu, 25 Jan 2024 21:17:27 +0800 Subject: [PATCH 012/117] fix some bugs --- source/api_cc/src/DeepPotPT.cc | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index bfb979e6a4..901deb33ae 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -116,7 +116,7 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, torch::Tensor flat_energy_ = energy_.toTensor().view({-1}); torch::Tensor cpu_energy_ = flat_energy_.to(torch::kCPU); - energy.assign(cpu_energy_.data_ptr(), + ener.assign(cpu_energy_.data_ptr(), cpu_energy_.data_ptr() + cpu_energy_.numel()); torch::Tensor flat_atom_energy_ = atom_energy_.toTensor().view({-1}); torch::Tensor cpu_atom_energy_ = flat_atom_energy_.to(torch::kCPU); @@ -211,13 +211,25 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, torch::from_blob(const_cast(box.data()), {1, 9}, options) .to(device); inputs.push_back(box_Tensor); + bool do_atom_virial_tensor = true; + inputs.push_back(do_atom_virial_tensor); c10::Dict outputs = module.forward(inputs).toGenericDict(); c10::IValue energy_ = outputs.at("energy"); c10::IValue force_ = outputs.at("force"); c10::IValue virial_ = outputs.at("virial"); - ener = energy_.toTensor().item(); + c10::IValue atom_virial_ = outputs.at("atomic_virial"); + c10::IValue atom_energy_ = outputs.at("atom_energy"); + torch::Tensor flat_energy_ = energy_.toTensor().view({-1}); + torch::Tensor cpu_energy_ = flat_energy_.to(torch::kCPU); + ener.assign(cpu_energy_.data_ptr(), + cpu_energy_.data_ptr() + cpu_energy_.numel()); + torch::Tensor flat_atom_energy_ = atom_energy_.toTensor().view({-1}); + torch::Tensor cpu_atom_energy_ = flat_atom_energy_.to(torch::kCPU); + atom_energy.assign( + cpu_atom_energy_.data_ptr(), + cpu_atom_energy_.data_ptr() + cpu_atom_energy_.numel()); torch::Tensor flat_force_ = force_.toTensor().view({-1}); torch::Tensor cpu_force_ = flat_force_.to(torch::kCPU); @@ -228,6 +240,12 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, torch::Tensor cpu_virial_ = flat_virial_.to(torch::kCPU); virial.assign(cpu_virial_.data_ptr(), cpu_virial_.data_ptr() + cpu_virial_.numel()); + + torch::Tensor flat_atom_virial_ = atom_virial_.toTensor().view({-1}); + torch::Tensor cpu_atom_virial_ = flat_atom_virial_.to(torch::kCPU); + atom_virial.assign( + cpu_atom_virial_.data_ptr(), + cpu_atom_virial_.data_ptr() + cpu_atom_virial_.numel()); } template void DeepPotPT::compute( ENERGYTYPE& ener, From 1d5fb1caf62f0ea7bdf9aaaa681cf6ec29034955 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 25 Jan 2024 13:18:17 +0000 Subject: [PATCH 013/117] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- source/api_cc/src/DeepPotPT.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index 901deb33ae..a9c4ebb3d8 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -117,7 +117,7 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, torch::Tensor flat_energy_ = energy_.toTensor().view({-1}); torch::Tensor cpu_energy_ = flat_energy_.to(torch::kCPU); ener.assign(cpu_energy_.data_ptr(), - cpu_energy_.data_ptr() + cpu_energy_.numel()); + cpu_energy_.data_ptr() + cpu_energy_.numel()); torch::Tensor flat_atom_energy_ = atom_energy_.toTensor().view({-1}); torch::Tensor cpu_atom_energy_ = flat_atom_energy_.to(torch::kCPU); atom_energy.assign( @@ -224,7 +224,7 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, torch::Tensor flat_energy_ = energy_.toTensor().view({-1}); torch::Tensor cpu_energy_ = flat_energy_.to(torch::kCPU); ener.assign(cpu_energy_.data_ptr(), - cpu_energy_.data_ptr() + cpu_energy_.numel()); + cpu_energy_.data_ptr() + cpu_energy_.numel()); torch::Tensor flat_atom_energy_ = atom_energy_.toTensor().view({-1}); torch::Tensor cpu_atom_energy_ = flat_atom_energy_.to(torch::kCPU); atom_energy.assign( From f8dab4de3b1096014ef63ef64da464f24c3732bd Mon Sep 17 00:00:00 2001 From: zxysbsbzxy Date: Thu, 25 Jan 2024 23:41:29 +0800 Subject: [PATCH 014/117] fix bug --- source/api_cc/include/commonPT.h | 1 - 1 file changed, 1 deletion(-) diff --git a/source/api_cc/include/commonPT.h b/source/api_cc/include/commonPT.h index 8d9cd90532..0f753a365f 100644 --- a/source/api_cc/include/commonPT.h +++ b/source/api_cc/include/commonPT.h @@ -25,4 +25,3 @@ struct NeighborListDataPT { int nnei); // void make_inlist(InputNlist& inlist); }; -#endif From 795058ce9922dc56924005a49e5c42c33c7e7c3b Mon Sep 17 00:00:00 2001 From: zxysbsbzxy Date: Thu, 25 Jan 2024 23:42:30 +0800 Subject: [PATCH 015/117] fix bug --- source/api_cc/include/commonPT.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/api_cc/include/commonPT.h b/source/api_cc/include/commonPT.h index 0f753a365f..d5b3f15155 100644 --- a/source/api_cc/include/commonPT.h +++ b/source/api_cc/include/commonPT.h @@ -7,7 +7,7 @@ #include #include "neighbor_list.h" - +namespace deepmd { struct NeighborListDataPT { /// Array stores the core region atom's index std::vector ilist; @@ -25,3 +25,4 @@ struct NeighborListDataPT { int nnei); // void make_inlist(InputNlist& inlist); }; +} From a3cd2ef585059d1553e06395f950c742d1782e49 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 25 Jan 2024 15:43:59 +0000 Subject: [PATCH 016/117] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- source/api_cc/include/commonPT.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/api_cc/include/commonPT.h b/source/api_cc/include/commonPT.h index d5b3f15155..d357b76085 100644 --- a/source/api_cc/include/commonPT.h +++ b/source/api_cc/include/commonPT.h @@ -25,4 +25,4 @@ struct NeighborListDataPT { int nnei); // void make_inlist(InputNlist& inlist); }; -} +} // namespace deepmd From f4c69013c17a3e852e78cf7de1104e17080e5c46 Mon Sep 17 00:00:00 2001 From: zxysbsbzxy Date: Thu, 25 Jan 2024 23:47:10 +0800 Subject: [PATCH 017/117] fix compute api --- source/api_cc/src/DeepPotPT.cc | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index a9c4ebb3d8..e8961d08c7 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -302,7 +302,7 @@ void DeepPotPT::computew(std::vector& ener, const std::vector& box, const std::vector& fparam, const std::vector& aparam) { - compute(ener, force, virial, atom_energy, atom_virial, atype, box); + compute(ener, force, virial, atom_energy, atom_virial,coord, atype, box); } void DeepPotPT::computew(std::vector& ener, std::vector& force, @@ -314,9 +314,7 @@ void DeepPotPT::computew(std::vector& ener, const std::vector& box, const std::vector& fparam, const std::vector& aparam) { - // TODO: atomic compute unsupported - // compute(ener, force, virial, atom_energy,atom_virial, atype, box); - throw deepmd::deepmd_exception("unsupported float type"); + compute(ener, force, virial, atom_energy, atom_virial,coord, atype, box); } void DeepPotPT::computew(std::vector& ener, std::vector& force, @@ -348,9 +346,8 @@ void DeepPotPT::computew(std::vector& ener, const int& ago, const std::vector& fparam, const std::vector& aparam) { - // TODO: atomic compute unsupported - // compute(ener, force, virial, coord, atype, box, inlist, ago); - throw deepmd::deepmd_exception("unsupported float type"); + compute(ener, force, virial, atom_energy, atom_virial, coord, atype, box, + inlist, ago); } void DeepPotPT::computew_mixed_type(std::vector& ener, std::vector& force, From 08ea8dfde5181cd7574ee49913f1a7563ad5e3a4 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 25 Jan 2024 15:47:37 +0000 Subject: [PATCH 018/117] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- source/api_cc/src/DeepPotPT.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index e8961d08c7..07b46bcbf3 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -302,7 +302,7 @@ void DeepPotPT::computew(std::vector& ener, const std::vector& box, const std::vector& fparam, const std::vector& aparam) { - compute(ener, force, virial, atom_energy, atom_virial,coord, atype, box); + compute(ener, force, virial, atom_energy, atom_virial, coord, atype, box); } void DeepPotPT::computew(std::vector& ener, std::vector& force, @@ -314,7 +314,7 @@ void DeepPotPT::computew(std::vector& ener, const std::vector& box, const std::vector& fparam, const std::vector& aparam) { - compute(ener, force, virial, atom_energy, atom_virial,coord, atype, box); + compute(ener, force, virial, atom_energy, atom_virial, coord, atype, box); } void DeepPotPT::computew(std::vector& ener, std::vector& force, From ca70171386c13ec14b0662a269d6146ded80a02f Mon Sep 17 00:00:00 2001 From: zxysbsbzxy Date: Thu, 25 Jan 2024 23:53:43 +0800 Subject: [PATCH 019/117] Deprecated valuetype --- source/api_cc/src/DeepPotPT.cc | 80 +++++++++++++++++----------------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index 07b46bcbf3..743b7da90d 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -139,28 +139,28 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, cpu_atom_virial_.data_ptr(), cpu_atom_virial_.data_ptr() + cpu_atom_virial_.numel()); } -template void DeepPotPT::compute( - ENERGYTYPE& ener, - std::vector& force, - std::vector& virial, - std::vector& atom_energy, - std::vector& atom_virial, - const std::vector& coord, - const std::vector& atype, - const std::vector& box, - const InputNlist& lmp_list, - const int& ago); -template void DeepPotPT::compute( - ENERGYTYPE& ener, - std::vector& force, - std::vector& virial, - std::vector& atom_energy, - std::vector& atom_virial, - const std::vector& coord, - const std::vector& atype, - const std::vector& box, - const InputNlist& lmp_list, - const int& ago); +// template void DeepPotPT::compute( +// ENERGYTYPE& ener, +// std::vector& force, +// std::vector& virial, +// std::vector& atom_energy, +// std::vector& atom_virial, +// const std::vector& coord, +// const std::vector& atype, +// const std::vector& box, +// const InputNlist& lmp_list, +// const int& ago); +// template void DeepPotPT::compute( +// ENERGYTYPE& ener, +// std::vector& force, +// std::vector& virial, +// std::vector& atom_energy, +// std::vector& atom_virial, +// const std::vector& coord, +// const std::vector& atype, +// const std::vector& box, +// const InputNlist& lmp_list, +// const int& ago); template void DeepPotPT::compute>( std::vector& ener, std::vector& force, @@ -247,24 +247,24 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, cpu_atom_virial_.data_ptr(), cpu_atom_virial_.data_ptr() + cpu_atom_virial_.numel()); } -template void DeepPotPT::compute( - ENERGYTYPE& ener, - std::vector& force, - std::vector& virial, - std::vector& atom_energy, - std::vector& atom_virial, - const std::vector& coord, - const std::vector& atype, - const std::vector& box); -template void DeepPotPT::compute( - ENERGYTYPE& ener, - std::vector& force, - std::vector& virial, - std::vector& atom_energy, - std::vector& atom_virial, - const std::vector& coord, - const std::vector& atype, - const std::vector& box); +// template void DeepPotPT::compute( +// ENERGYTYPE& ener, +// std::vector& force, +// std::vector& virial, +// std::vector& atom_energy, +// std::vector& atom_virial, +// const std::vector& coord, +// const std::vector& atype, +// const std::vector& box); +// template void DeepPotPT::compute( +// ENERGYTYPE& ener, +// std::vector& force, +// std::vector& virial, +// std::vector& atom_energy, +// std::vector& atom_virial, +// const std::vector& coord, +// const std::vector& atype, +// const std::vector& box); template void DeepPotPT::compute>( std::vector& ener, std::vector& force, From 7c66cf792c95da4d900afe14328b2d85ea55d1de Mon Sep 17 00:00:00 2001 From: zxysbsbzxy Date: Thu, 25 Jan 2024 23:55:06 +0800 Subject: [PATCH 020/117] Deprecated valuetype --- source/api_cc/src/DeepPotPT.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index 743b7da90d..d1ce395d85 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -57,7 +57,7 @@ void DeepPotPT::init(const std::string& model, const int& gpu_rank) { DeepPotPT::~DeepPotPT() {} template -void DeepPotPT::compute(ENERGYVTYPE& ener, +void DeepPotPT::compute(std::vector& ener, std::vector& force, std::vector& virial, std::vector& atom_energy, @@ -184,7 +184,7 @@ template void DeepPotPT::compute>( const InputNlist& lmp_list, const int& ago); template -void DeepPotPT::compute(ENERGYVTYPE& ener, +void DeepPotPT::compute(std::vector& ener, std::vector& force, std::vector& virial, std::vector& atom_energy, From b9c74dbc97b40d25be0dafb02171d438cb24901c Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 25 Jan 2024 15:55:54 +0000 Subject: [PATCH 021/117] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- source/api_cc/src/DeepPotPT.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index d1ce395d85..8e0dd84c7f 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -57,7 +57,7 @@ void DeepPotPT::init(const std::string& model, const int& gpu_rank) { DeepPotPT::~DeepPotPT() {} template -void DeepPotPT::compute(std::vector& ener, +void DeepPotPT::compute(std::vector& ener, std::vector& force, std::vector& virial, std::vector& atom_energy, From 295751caba080bf958d1f9c1d71b716cbb5aeaec Mon Sep 17 00:00:00 2001 From: zxysbsbzxy Date: Fri, 26 Jan 2024 09:49:54 +0800 Subject: [PATCH 022/117] fix compute definition --- source/api_cc/include/DeepPotPT.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/api_cc/include/DeepPotPT.h b/source/api_cc/include/DeepPotPT.h index 4cd39cdc9c..bb2072b587 100644 --- a/source/api_cc/include/DeepPotPT.h +++ b/source/api_cc/include/DeepPotPT.h @@ -60,7 +60,7 @@ class DeepPotPT : public DeepPotBase { *same aparam. **/ template - void compute(ENERGYVTYPE& ener, + void compute(std::vector& ener, std::vector& force, std::vector& virial, std::vector& atom_energy, @@ -96,7 +96,7 @@ class DeepPotPT : public DeepPotBase { *same aparam. **/ template - void compute(ENERGYVTYPE& ener, + void compute(std::vector& ener, std::vector& force, std::vector& virial, std::vector& atom_energy, From fc3040bc965a66893eb60df17e26ea82dc3dc192 Mon Sep 17 00:00:00 2001 From: zxysbsbzxy Date: Fri, 26 Jan 2024 10:15:28 +0800 Subject: [PATCH 023/117] implement virtual function --- source/api_cc/include/DeepPotPT.h | 2 +- source/api_cc/src/DeepPotPT.cc | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/source/api_cc/include/DeepPotPT.h b/source/api_cc/include/DeepPotPT.h index bb2072b587..4c9c81f8f9 100644 --- a/source/api_cc/include/DeepPotPT.h +++ b/source/api_cc/include/DeepPotPT.h @@ -34,7 +34,7 @@ class DeepPotPT : public DeepPotBase { * @param[in] file_content The content of the model file. If it is not empty, *DP will read from the string instead of the file. **/ - void init(const std::string& model, const int& gpu_rank = 0); + void init(const std::string& model, const int& gpu_rank = 0, const std::string& file_content = ""); private: /** diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index 8e0dd84c7f..7a1306bece 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -9,13 +9,13 @@ DeepPotPT::DeepPotPT(const std::string& model, const std::string& file_content) : inited(false) { try { - init(model, gpu_rank); + init(model, gpu_rank,file_content); } catch (...) { // Clean up and rethrow, as the destructor will not be called throw; } } -void DeepPotPT::init(const std::string& model, const int& gpu_rank) { +void DeepPotPT::init(const std::string& model, const int& gpu_rank, const std::string& file_content = "") { if (inited) { std::cerr << "WARNING: deepmd-kit should not be initialized twice, do " "nothing at the second call of initializer" From 3e70a287ab073dabe068eb54de093368fc223c92 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 26 Jan 2024 02:16:06 +0000 Subject: [PATCH 024/117] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- source/api_cc/include/DeepPotPT.h | 4 +++- source/api_cc/src/DeepPotPT.cc | 6 ++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/source/api_cc/include/DeepPotPT.h b/source/api_cc/include/DeepPotPT.h index 4c9c81f8f9..c9da731cd4 100644 --- a/source/api_cc/include/DeepPotPT.h +++ b/source/api_cc/include/DeepPotPT.h @@ -34,7 +34,9 @@ class DeepPotPT : public DeepPotBase { * @param[in] file_content The content of the model file. If it is not empty, *DP will read from the string instead of the file. **/ - void init(const std::string& model, const int& gpu_rank = 0, const std::string& file_content = ""); + void init(const std::string& model, + const int& gpu_rank = 0, + const std::string& file_content = ""); private: /** diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index 7a1306bece..1aefc1b8d5 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -9,13 +9,15 @@ DeepPotPT::DeepPotPT(const std::string& model, const std::string& file_content) : inited(false) { try { - init(model, gpu_rank,file_content); + init(model, gpu_rank, file_content); } catch (...) { // Clean up and rethrow, as the destructor will not be called throw; } } -void DeepPotPT::init(const std::string& model, const int& gpu_rank, const std::string& file_content = "") { +void DeepPotPT::init(const std::string& model, + const int& gpu_rank, + const std::string& file_content = "") { if (inited) { std::cerr << "WARNING: deepmd-kit should not be initialized twice, do " "nothing at the second call of initializer" From 1576fbbf944fa929409c7ae61bba889c4448f12d Mon Sep 17 00:00:00 2001 From: zxysbsbzxy Date: Fri, 26 Jan 2024 10:28:01 +0800 Subject: [PATCH 025/117] fix bug --- source/api_cc/include/DeepPotPT.h | 4 ++-- source/api_cc/src/DeepPotPT.cc | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/source/api_cc/include/DeepPotPT.h b/source/api_cc/include/DeepPotPT.h index c9da731cd4..2935d5387b 100644 --- a/source/api_cc/include/DeepPotPT.h +++ b/source/api_cc/include/DeepPotPT.h @@ -62,7 +62,7 @@ class DeepPotPT : public DeepPotBase { *same aparam. **/ template - void compute(std::vector& ener, + void compute(ENERGYTYPE& ener, std::vector& force, std::vector& virial, std::vector& atom_energy, @@ -98,7 +98,7 @@ class DeepPotPT : public DeepPotBase { *same aparam. **/ template - void compute(std::vector& ener, + void compute(ENERGYTYPE& ener, std::vector& force, std::vector& virial, std::vector& atom_energy, diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index 1aefc1b8d5..816571297a 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -17,7 +17,7 @@ DeepPotPT::DeepPotPT(const std::string& model, } void DeepPotPT::init(const std::string& model, const int& gpu_rank, - const std::string& file_content = "") { + const std::string& file_content) { if (inited) { std::cerr << "WARNING: deepmd-kit should not be initialized twice, do " "nothing at the second call of initializer" @@ -59,7 +59,7 @@ void DeepPotPT::init(const std::string& model, DeepPotPT::~DeepPotPT() {} template -void DeepPotPT::compute(std::vector& ener, +void DeepPotPT::compute(ENERGYTYPE& ener, std::vector& force, std::vector& virial, std::vector& atom_energy, @@ -186,7 +186,7 @@ template void DeepPotPT::compute>( const InputNlist& lmp_list, const int& ago); template -void DeepPotPT::compute(std::vector& ener, +void DeepPotPT::compute(ENERGYTYPE& ener, std::vector& force, std::vector& virial, std::vector& atom_energy, From af415f402c08e446898eb8bcf055d2a3e6792307 Mon Sep 17 00:00:00 2001 From: zxysbsbzxy Date: Fri, 26 Jan 2024 10:41:21 +0800 Subject: [PATCH 026/117] try direct = --- source/api_cc/src/DeepPotPT.cc | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index 816571297a..a10c45b7c3 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -115,11 +115,11 @@ void DeepPotPT::compute(ENERGYTYPE& ener, c10::IValue virial_ = outputs.at("extended_virial"); c10::IValue atom_virial_ = outputs.at("atomic_virial"); c10::IValue atom_energy_ = outputs.at("atom_energy"); - - torch::Tensor flat_energy_ = energy_.toTensor().view({-1}); - torch::Tensor cpu_energy_ = flat_energy_.to(torch::kCPU); - ener.assign(cpu_energy_.data_ptr(), - cpu_energy_.data_ptr() + cpu_energy_.numel()); + ener = energy_.toTensor().item(); + // torch::Tensor flat_energy_ = energy_.toTensor().view({-1}); + // torch::Tensor cpu_energy_ = flat_energy_.to(torch::kCPU); + // ener.assign(cpu_energy_.data_ptr(), + // cpu_energy_.data_ptr() + cpu_energy_.numel()); torch::Tensor flat_atom_energy_ = atom_energy_.toTensor().view({-1}); torch::Tensor cpu_atom_energy_ = flat_atom_energy_.to(torch::kCPU); atom_energy.assign( @@ -223,10 +223,7 @@ void DeepPotPT::compute(ENERGYTYPE& ener, c10::IValue virial_ = outputs.at("virial"); c10::IValue atom_virial_ = outputs.at("atomic_virial"); c10::IValue atom_energy_ = outputs.at("atom_energy"); - torch::Tensor flat_energy_ = energy_.toTensor().view({-1}); - torch::Tensor cpu_energy_ = flat_energy_.to(torch::kCPU); - ener.assign(cpu_energy_.data_ptr(), - cpu_energy_.data_ptr() + cpu_energy_.numel()); + ener = energy_.toTensor().item(); torch::Tensor flat_atom_energy_ = atom_energy_.toTensor().view({-1}); torch::Tensor cpu_atom_energy_ = flat_atom_energy_.to(torch::kCPU); atom_energy.assign( From 306f7d90c8920c89a292dba4c4a9403a2c3fc38f Mon Sep 17 00:00:00 2001 From: zxysbsbzxy Date: Fri, 26 Jan 2024 10:47:10 +0800 Subject: [PATCH 027/117] fix vtype and type bug --- source/api_cc/include/DeepPotPT.h | 4 ++-- source/api_cc/src/DeepPotPT.cc | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/source/api_cc/include/DeepPotPT.h b/source/api_cc/include/DeepPotPT.h index 2935d5387b..2c71982545 100644 --- a/source/api_cc/include/DeepPotPT.h +++ b/source/api_cc/include/DeepPotPT.h @@ -62,7 +62,7 @@ class DeepPotPT : public DeepPotBase { *same aparam. **/ template - void compute(ENERGYTYPE& ener, + void compute(ENERGYVTYPE& ener, std::vector& force, std::vector& virial, std::vector& atom_energy, @@ -98,7 +98,7 @@ class DeepPotPT : public DeepPotBase { *same aparam. **/ template - void compute(ENERGYTYPE& ener, + void compute(ENERGYVTYPE& ener, std::vector& force, std::vector& virial, std::vector& atom_energy, diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index a10c45b7c3..3539c8160d 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -59,7 +59,7 @@ void DeepPotPT::init(const std::string& model, DeepPotPT::~DeepPotPT() {} template -void DeepPotPT::compute(ENERGYTYPE& ener, +void DeepPotPT::compute(ENERGYVTYPE& ener, std::vector& force, std::vector& virial, std::vector& atom_energy, @@ -186,7 +186,7 @@ template void DeepPotPT::compute>( const InputNlist& lmp_list, const int& ago); template -void DeepPotPT::compute(ENERGYTYPE& ener, +void DeepPotPT::compute(ENERGYVTYPE& ener, std::vector& force, std::vector& virial, std::vector& atom_energy, From 39a8de44b3c8896731066dba9d0cfd42a085f4b7 Mon Sep 17 00:00:00 2001 From: zxysbsbzxy Date: Fri, 26 Jan 2024 14:08:50 +0800 Subject: [PATCH 028/117] fix energy to vector --- source/api_cc/src/DeepPotPT.cc | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index 3539c8160d..9cb5849437 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -115,11 +115,11 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, c10::IValue virial_ = outputs.at("extended_virial"); c10::IValue atom_virial_ = outputs.at("atomic_virial"); c10::IValue atom_energy_ = outputs.at("atom_energy"); - ener = energy_.toTensor().item(); - // torch::Tensor flat_energy_ = energy_.toTensor().view({-1}); - // torch::Tensor cpu_energy_ = flat_energy_.to(torch::kCPU); - // ener.assign(cpu_energy_.data_ptr(), - // cpu_energy_.data_ptr() + cpu_energy_.numel()); + //ener = energy_.toTensor().item(); + torch::Tensor flat_energy_ = energy_.toTensor().view({-1}); + torch::Tensor cpu_energy_ = flat_energy_.to(torch::kCPU); + ener.assign(cpu_energy_.data_ptr(), + cpu_energy_.data_ptr() + cpu_energy_.numel()); torch::Tensor flat_atom_energy_ = atom_energy_.toTensor().view({-1}); torch::Tensor cpu_atom_energy_ = flat_atom_energy_.to(torch::kCPU); atom_energy.assign( @@ -223,7 +223,11 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, c10::IValue virial_ = outputs.at("virial"); c10::IValue atom_virial_ = outputs.at("atomic_virial"); c10::IValue atom_energy_ = outputs.at("atom_energy"); - ener = energy_.toTensor().item(); + //ener = energy_.toTensor().item(); + torch::Tensor flat_energy_ = energy_.toTensor().view({-1}); + torch::Tensor cpu_energy_ = flat_energy_.to(torch::kCPU); + ener.assign(cpu_energy_.data_ptr(), + cpu_energy_.data_ptr() + cpu_energy_.numel()); torch::Tensor flat_atom_energy_ = atom_energy_.toTensor().view({-1}); torch::Tensor cpu_atom_energy_ = flat_atom_energy_.to(torch::kCPU); atom_energy.assign( From c86c14e8d47b8d73c3d37247f18e8e9abf9dae8a Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 26 Jan 2024 06:09:16 +0000 Subject: [PATCH 029/117] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- source/api_cc/src/DeepPotPT.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index 9cb5849437..255a0d6dd1 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -115,7 +115,7 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, c10::IValue virial_ = outputs.at("extended_virial"); c10::IValue atom_virial_ = outputs.at("atomic_virial"); c10::IValue atom_energy_ = outputs.at("atom_energy"); - //ener = energy_.toTensor().item(); + // ener = energy_.toTensor().item(); torch::Tensor flat_energy_ = energy_.toTensor().view({-1}); torch::Tensor cpu_energy_ = flat_energy_.to(torch::kCPU); ener.assign(cpu_energy_.data_ptr(), @@ -223,7 +223,7 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, c10::IValue virial_ = outputs.at("virial"); c10::IValue atom_virial_ = outputs.at("atomic_virial"); c10::IValue atom_energy_ = outputs.at("atom_energy"); - //ener = energy_.toTensor().item(); + // ener = energy_.toTensor().item(); torch::Tensor flat_energy_ = energy_.toTensor().view({-1}); torch::Tensor cpu_energy_ = flat_energy_.to(torch::kCPU); ener.assign(cpu_energy_.data_ptr(), From a2e214433d123632a2367a818880af6a07058833 Mon Sep 17 00:00:00 2001 From: zxysbsbzxy Date: Fri, 26 Jan 2024 14:47:31 +0800 Subject: [PATCH 030/117] using namespace deepmd --- source/api_cc/src/commonPT.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/api_cc/src/commonPT.cc b/source/api_cc/src/commonPT.cc index aaa19b64f2..dc2696f274 100644 --- a/source/api_cc/src/commonPT.cc +++ b/source/api_cc/src/commonPT.cc @@ -1,6 +1,6 @@ // SPDX-License-Identifier: LGPL-3.0-or-later #include "commonPT.h" - +using namespace deepmd; void NeighborListData::copy_from_nlist(const InputNlist& inlist, int& max_num_neighbors, int nnei) { From e9b10787586d2622b55201ceaba1ebd98da9ec8a Mon Sep 17 00:00:00 2001 From: zxysbsbzxy Date: Fri, 26 Jan 2024 14:57:44 +0800 Subject: [PATCH 031/117] fix bug --- source/api_cc/src/commonPT.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/api_cc/src/commonPT.cc b/source/api_cc/src/commonPT.cc index dc2696f274..eac31b03e9 100644 --- a/source/api_cc/src/commonPT.cc +++ b/source/api_cc/src/commonPT.cc @@ -1,7 +1,7 @@ // SPDX-License-Identifier: LGPL-3.0-or-later #include "commonPT.h" using namespace deepmd; -void NeighborListData::copy_from_nlist(const InputNlist& inlist, +void NeighborListDataPT::copy_from_nlist(const InputNlist& inlist, int& max_num_neighbors, int nnei) { int inum = inlist.inum; From 18c8cd34578cb3c155db152005b5a54f508b5d35 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 26 Jan 2024 06:58:52 +0000 Subject: [PATCH 032/117] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- source/api_cc/src/commonPT.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/api_cc/src/commonPT.cc b/source/api_cc/src/commonPT.cc index eac31b03e9..c4e8315192 100644 --- a/source/api_cc/src/commonPT.cc +++ b/source/api_cc/src/commonPT.cc @@ -2,8 +2,8 @@ #include "commonPT.h" using namespace deepmd; void NeighborListDataPT::copy_from_nlist(const InputNlist& inlist, - int& max_num_neighbors, - int nnei) { + int& max_num_neighbors, + int nnei) { int inum = inlist.inum; ilist.resize(inum); numneigh.resize(inum); From 6b27552a03ac5d805a773c9da40a681e86ecd346 Mon Sep 17 00:00:00 2001 From: zxysbsbzxy Date: Fri, 26 Jan 2024 15:23:17 +0800 Subject: [PATCH 033/117] pass no backend test --- source/api_cc/src/DeepPot.cc | 4 ++++ source/api_cc/src/DeepPotPT.cc | 2 ++ 2 files changed, 6 insertions(+) diff --git a/source/api_cc/src/DeepPot.cc b/source/api_cc/src/DeepPot.cc index 4d023f927d..d985eb4951 100644 --- a/source/api_cc/src/DeepPot.cc +++ b/source/api_cc/src/DeepPot.cc @@ -47,7 +47,11 @@ void DeepPot::init(const std::string& model, #endif } else if (deepmd::DPBackend::PyTorch == backend) { // throw deepmd::deepmd_exception("PyTorch backend is not supported yet"); +#ifdef BUILD_PYTORCH dp = std::make_shared(model, gpu_rank, file_content); +#else + throw deepmd::deepmd_exception("PyTorch backend is not built"); +#endif } else if (deepmd::DPBackend::Paddle == backend) { throw deepmd::deepmd_exception("PaddlePaddle backend is not supported yet"); } else { diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index 255a0d6dd1..8e093b7a3d 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -1,4 +1,5 @@ // SPDX-License-Identifier: LGPL-3.0-or-later +#ifdef BUILD_PYTORCH #include "DeepPotPT.h" #include "common.h" @@ -378,3 +379,4 @@ void DeepPotPT::computew_mixed_type(std::vector& ener, const std::vector& aparam) { throw deepmd::deepmd_exception("computew_mixed_type is not implemented"); } +#endif \ No newline at end of file From 0d494b46f335b37c6df2f96397e1726ac064b744 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 26 Jan 2024 07:23:42 +0000 Subject: [PATCH 034/117] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- source/api_cc/src/DeepPotPT.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index 8e093b7a3d..3ddfc011ae 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -379,4 +379,4 @@ void DeepPotPT::computew_mixed_type(std::vector& ener, const std::vector& aparam) { throw deepmd::deepmd_exception("computew_mixed_type is not implemented"); } -#endif \ No newline at end of file +#endif From b1cc7545770470191c1fa765a2497d89ec58026f Mon Sep 17 00:00:00 2001 From: zxysbsbzxy Date: Fri, 26 Jan 2024 15:35:33 +0800 Subject: [PATCH 035/117] implement detect backend --- source/api_cc/src/DeepPot.cc | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/source/api_cc/src/DeepPot.cc b/source/api_cc/src/DeepPot.cc index d985eb4951..d0430d39d0 100644 --- a/source/api_cc/src/DeepPot.cc +++ b/source/api_cc/src/DeepPot.cc @@ -37,8 +37,13 @@ void DeepPot::init(const std::string& model, << std::endl; return; } - // TODO: To implement detect_backend - DPBackend backend = deepmd::DPBackend::TensorFlow; + if (model.length() >= 4 && model.substr(model.length() - 4) == ".pth") { + DPBackend backend = deepmd::DPBackend::PyTorch; + } else if (model.length() >= 3 && model.substr(model.length() - 3) == ".pb") { + DPBackend backend = deepmd::DPBackend::TensorFlow; + else { + throw deepmd::deepmd_exception("Unsupported model file format"); + } if (deepmd::DPBackend::TensorFlow == backend) { #ifdef BUILD_TENSORFLOW dp = std::make_shared(model, gpu_rank, file_content); From cedcdc7b5364f06de606d9e182571ef1db81e60f Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 26 Jan 2024 07:36:06 +0000 Subject: [PATCH 036/117] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- source/api_cc/src/DeepPot.cc | 1395 +++++++++++++++------------------- 1 file changed, 607 insertions(+), 788 deletions(-) diff --git a/source/api_cc/src/DeepPot.cc b/source/api_cc/src/DeepPot.cc index d0430d39d0..273344ffb6 100644 --- a/source/api_cc/src/DeepPot.cc +++ b/source/api_cc/src/DeepPot.cc @@ -38,850 +38,669 @@ void DeepPot::init(const std::string& model, return; } if (model.length() >= 4 && model.substr(model.length() - 4) == ".pth") { - DPBackend backend = deepmd::DPBackend::PyTorch; - } else if (model.length() >= 3 && model.substr(model.length() - 3) == ".pb") { - DPBackend backend = deepmd::DPBackend::TensorFlow; + DPBackend backend = deepmd::DPBackend::PyTorch; + } else if (model.length() >= 3 && model.substr(model.length() - 3) == ".pb") { + DPBackend backend = deepmd::DPBackend::TensorFlow; else { - throw deepmd::deepmd_exception("Unsupported model file format"); + throw deepmd::deepmd_exception("Unsupported model file format"); } - if (deepmd::DPBackend::TensorFlow == backend) { + if (deepmd::DPBackend::TensorFlow == backend) { #ifdef BUILD_TENSORFLOW - dp = std::make_shared(model, gpu_rank, file_content); + dp = std::make_shared(model, gpu_rank, file_content); #else - throw deepmd::deepmd_exception("TensorFlow backend is not built"); + throw deepmd::deepmd_exception("TensorFlow backend is not built"); #endif - } else if (deepmd::DPBackend::PyTorch == backend) { - // throw deepmd::deepmd_exception("PyTorch backend is not supported yet"); + } else if (deepmd::DPBackend::PyTorch == backend) { + // throw deepmd::deepmd_exception("PyTorch backend is not supported yet"); #ifdef BUILD_PYTORCH - dp = std::make_shared(model, gpu_rank, file_content); + dp = std::make_shared(model, gpu_rank, file_content); #else - throw deepmd::deepmd_exception("PyTorch backend is not built"); + throw deepmd::deepmd_exception("PyTorch backend is not built"); #endif - } else if (deepmd::DPBackend::Paddle == backend) { - throw deepmd::deepmd_exception("PaddlePaddle backend is not supported yet"); - } else { - throw deepmd::deepmd_exception("Unknown file type"); + } else if (deepmd::DPBackend::Paddle == backend) { + throw deepmd::deepmd_exception( + "PaddlePaddle backend is not supported yet"); + } else { + throw deepmd::deepmd_exception("Unknown file type"); + } + inited = true; } - inited = true; -} -void DeepPot::print_summary(const std::string& pre) const { - deepmd::print_summary(pre); -} + void DeepPot::print_summary(const std::string& pre) const { + deepmd::print_summary(pre); + } -template -void DeepPot::compute(ENERGYTYPE& dener, - std::vector& dforce_, - std::vector& dvirial, - const std::vector& dcoord_, - const std::vector& datype_, - const std::vector& dbox, - const std::vector& fparam_, - const std::vector& aparam_) { - std::vector dener_; - std::vector datom_energy_, datom_virial_; - dp->computew(dener_, dforce_, dvirial, datom_energy_, datom_virial_, dcoord_, - datype_, dbox, fparam_, aparam_); - dener = dener_[0]; -} + template + void DeepPot::compute( + ENERGYTYPE & dener, std::vector & dforce_, + std::vector & dvirial, const std::vector& dcoord_, + const std::vector& datype_, const std::vector& dbox, + const std::vector& fparam_, + const std::vector& aparam_) { + std::vector dener_; + std::vector datom_energy_, datom_virial_; + dp->computew(dener_, dforce_, dvirial, datom_energy_, datom_virial_, + dcoord_, datype_, dbox, fparam_, aparam_); + dener = dener_[0]; + } -template -void DeepPot::compute(std::vector& dener, - std::vector& dforce_, - std::vector& dvirial, - const std::vector& dcoord_, - const std::vector& datype_, - const std::vector& dbox, - const std::vector& fparam_, - const std::vector& aparam_) { - std::vector datom_energy_, datom_virial_; - dp->computew(dener, dforce_, dvirial, datom_energy_, datom_virial_, dcoord_, - datype_, dbox, fparam_, aparam_); -} + template + void DeepPot::compute( + std::vector & dener, std::vector & dforce_, + std::vector & dvirial, const std::vector& dcoord_, + const std::vector& datype_, const std::vector& dbox, + const std::vector& fparam_, + const std::vector& aparam_) { + std::vector datom_energy_, datom_virial_; + dp->computew(dener, dforce_, dvirial, datom_energy_, datom_virial_, dcoord_, + datype_, dbox, fparam_, aparam_); + } -template void DeepPot::compute(ENERGYTYPE& dener, - std::vector& dforce_, - std::vector& dvirial, - const std::vector& dcoord_, - const std::vector& datype_, - const std::vector& dbox, - const std::vector& fparam, - const std::vector& aparam); - -template void DeepPot::compute(ENERGYTYPE& dener, - std::vector& dforce_, - std::vector& dvirial, - const std::vector& dcoord_, - const std::vector& datype_, - const std::vector& dbox, - const std::vector& fparam, - const std::vector& aparam); - -template void DeepPot::compute(std::vector& dener, - std::vector& dforce_, - std::vector& dvirial, - const std::vector& dcoord_, - const std::vector& datype_, - const std::vector& dbox, - const std::vector& fparam, - const std::vector& aparam); - -template void DeepPot::compute(std::vector& dener, - std::vector& dforce_, - std::vector& dvirial, - const std::vector& dcoord_, - const std::vector& datype_, - const std::vector& dbox, - const std::vector& fparam, - const std::vector& aparam); - -template -void DeepPot::compute(ENERGYTYPE& dener, - std::vector& dforce_, - std::vector& dvirial, - const std::vector& dcoord_, - const std::vector& datype_, - const std::vector& dbox, - const int nghost, - const InputNlist& lmp_list, - const int& ago, - const std::vector& fparam_, - const std::vector& aparam__) { - std::vector dener_; - std::vector datom_energy_, datom_virial_; - dp->computew(dener_, dforce_, dvirial, datom_energy_, datom_virial_, dcoord_, - datype_, dbox, nghost, lmp_list, ago, fparam_, aparam__); - dener = dener_[0]; -} + template void DeepPot::compute( + ENERGYTYPE & dener, std::vector & dforce_, + std::vector & dvirial, const std::vector& dcoord_, + const std::vector& datype_, const std::vector& dbox, + const std::vector& fparam, const std::vector& aparam); + + template void DeepPot::compute( + ENERGYTYPE & dener, std::vector & dforce_, + std::vector & dvirial, const std::vector& dcoord_, + const std::vector& datype_, const std::vector& dbox, + const std::vector& fparam, const std::vector& aparam); + + template void DeepPot::compute( + std::vector & dener, std::vector & dforce_, + std::vector & dvirial, const std::vector& dcoord_, + const std::vector& datype_, const std::vector& dbox, + const std::vector& fparam, const std::vector& aparam); + + template void DeepPot::compute( + std::vector & dener, std::vector & dforce_, + std::vector & dvirial, const std::vector& dcoord_, + const std::vector& datype_, const std::vector& dbox, + const std::vector& fparam, const std::vector& aparam); + + template + void DeepPot::compute( + ENERGYTYPE & dener, std::vector & dforce_, + std::vector & dvirial, const std::vector& dcoord_, + const std::vector& datype_, const std::vector& dbox, + const int nghost, const InputNlist& lmp_list, const int& ago, + const std::vector& fparam_, + const std::vector& aparam__) { + std::vector dener_; + std::vector datom_energy_, datom_virial_; + dp->computew(dener_, dforce_, dvirial, datom_energy_, datom_virial_, + dcoord_, datype_, dbox, nghost, lmp_list, ago, fparam_, + aparam__); + dener = dener_[0]; + } -template -void DeepPot::compute(std::vector& dener, - std::vector& dforce_, - std::vector& dvirial, - const std::vector& dcoord_, - const std::vector& datype_, - const std::vector& dbox, - const int nghost, - const InputNlist& lmp_list, - const int& ago, - const std::vector& fparam_, - const std::vector& aparam__) { - std::vector datom_energy_, datom_virial_; - dp->computew(dener, dforce_, dvirial, datom_energy_, datom_virial_, dcoord_, - datype_, dbox, nghost, lmp_list, ago, fparam_, aparam__); -} + template + void DeepPot::compute( + std::vector & dener, std::vector & dforce_, + std::vector & dvirial, const std::vector& dcoord_, + const std::vector& datype_, const std::vector& dbox, + const int nghost, const InputNlist& lmp_list, const int& ago, + const std::vector& fparam_, + const std::vector& aparam__) { + std::vector datom_energy_, datom_virial_; + dp->computew(dener, dforce_, dvirial, datom_energy_, datom_virial_, dcoord_, + datype_, dbox, nghost, lmp_list, ago, fparam_, aparam__); + } -template void DeepPot::compute(ENERGYTYPE& dener, - std::vector& dforce_, - std::vector& dvirial, - const std::vector& dcoord_, - const std::vector& datype_, - const std::vector& dbox, - const int nghost, - const InputNlist& lmp_list, - const int& ago, - const std::vector& fparam, - const std::vector& aparam_); - -template void DeepPot::compute(ENERGYTYPE& dener, - std::vector& dforce_, - std::vector& dvirial, - const std::vector& dcoord_, - const std::vector& datype_, - const std::vector& dbox, - const int nghost, - const InputNlist& lmp_list, - const int& ago, - const std::vector& fparam, - const std::vector& aparam_); - -template void DeepPot::compute(std::vector& dener, - std::vector& dforce_, - std::vector& dvirial, - const std::vector& dcoord_, - const std::vector& datype_, - const std::vector& dbox, - const int nghost, - const InputNlist& lmp_list, - const int& ago, - const std::vector& fparam, - const std::vector& aparam_); - -template void DeepPot::compute(std::vector& dener, - std::vector& dforce_, - std::vector& dvirial, - const std::vector& dcoord_, - const std::vector& datype_, - const std::vector& dbox, - const int nghost, - const InputNlist& lmp_list, - const int& ago, - const std::vector& fparam, - const std::vector& aparam_); - -template -void DeepPot::compute(ENERGYTYPE& dener, - std::vector& dforce_, - std::vector& dvirial, - std::vector& datom_energy_, - std::vector& datom_virial_, - const std::vector& dcoord_, - const std::vector& datype_, - const std::vector& dbox, - const std::vector& fparam_, - const std::vector& aparam_) { - std::vector dener_; - dp->computew(dener_, dforce_, dvirial, datom_energy_, datom_virial_, dcoord_, - datype_, dbox, fparam_, aparam_); - dener = dener_[0]; -} -template -void DeepPot::compute(std::vector& dener, - std::vector& dforce_, - std::vector& dvirial, - std::vector& datom_energy_, - std::vector& datom_virial_, - const std::vector& dcoord_, - const std::vector& datype_, - const std::vector& dbox, - const std::vector& fparam_, - const std::vector& aparam_) { - dp->computew(dener, dforce_, dvirial, datom_energy_, datom_virial_, dcoord_, - datype_, dbox, fparam_, aparam_); -} + template void DeepPot::compute( + ENERGYTYPE & dener, std::vector & dforce_, + std::vector & dvirial, const std::vector& dcoord_, + const std::vector& datype_, const std::vector& dbox, + const int nghost, const InputNlist& lmp_list, const int& ago, + const std::vector& fparam, const std::vector& aparam_); + + template void DeepPot::compute( + ENERGYTYPE & dener, std::vector & dforce_, + std::vector & dvirial, const std::vector& dcoord_, + const std::vector& datype_, const std::vector& dbox, + const int nghost, const InputNlist& lmp_list, const int& ago, + const std::vector& fparam, const std::vector& aparam_); + + template void DeepPot::compute( + std::vector & dener, std::vector & dforce_, + std::vector & dvirial, const std::vector& dcoord_, + const std::vector& datype_, const std::vector& dbox, + const int nghost, const InputNlist& lmp_list, const int& ago, + const std::vector& fparam, const std::vector& aparam_); + + template void DeepPot::compute( + std::vector & dener, std::vector & dforce_, + std::vector & dvirial, const std::vector& dcoord_, + const std::vector& datype_, const std::vector& dbox, + const int nghost, const InputNlist& lmp_list, const int& ago, + const std::vector& fparam, const std::vector& aparam_); + + template + void DeepPot::compute( + ENERGYTYPE & dener, std::vector & dforce_, + std::vector & dvirial, std::vector & datom_energy_, + std::vector & datom_virial_, + const std::vector& dcoord_, const std::vector& datype_, + const std::vector& dbox, const std::vector& fparam_, + const std::vector& aparam_) { + std::vector dener_; + dp->computew(dener_, dforce_, dvirial, datom_energy_, datom_virial_, + dcoord_, datype_, dbox, fparam_, aparam_); + dener = dener_[0]; + } + template + void DeepPot::compute( + std::vector & dener, std::vector & dforce_, + std::vector & dvirial, std::vector & datom_energy_, + std::vector & datom_virial_, + const std::vector& dcoord_, const std::vector& datype_, + const std::vector& dbox, const std::vector& fparam_, + const std::vector& aparam_) { + dp->computew(dener, dforce_, dvirial, datom_energy_, datom_virial_, dcoord_, + datype_, dbox, fparam_, aparam_); + } -template void DeepPot::compute(ENERGYTYPE& dener, - std::vector& dforce_, - std::vector& dvirial, - std::vector& datom_energy_, - std::vector& datom_virial_, - const std::vector& dcoord_, - const std::vector& datype_, - const std::vector& dbox, - const std::vector& fparam, - const std::vector& aparam); - -template void DeepPot::compute(ENERGYTYPE& dener, - std::vector& dforce_, - std::vector& dvirial, - std::vector& datom_energy_, - std::vector& datom_virial_, - const std::vector& dcoord_, - const std::vector& datype_, - const std::vector& dbox, - const std::vector& fparam, - const std::vector& aparam); - -template void DeepPot::compute(std::vector& dener, - std::vector& dforce_, - std::vector& dvirial, - std::vector& datom_energy_, - std::vector& datom_virial_, - const std::vector& dcoord_, - const std::vector& datype_, - const std::vector& dbox, - const std::vector& fparam, - const std::vector& aparam); - -template void DeepPot::compute(std::vector& dener, - std::vector& dforce_, - std::vector& dvirial, - std::vector& datom_energy_, - std::vector& datom_virial_, - const std::vector& dcoord_, - const std::vector& datype_, - const std::vector& dbox, - const std::vector& fparam, - const std::vector& aparam); - -template -void DeepPot::compute(ENERGYTYPE& dener, - std::vector& dforce_, - std::vector& dvirial, - std::vector& datom_energy_, - std::vector& datom_virial_, - const std::vector& dcoord_, - const std::vector& datype_, - const std::vector& dbox, - const int nghost, - const InputNlist& lmp_list, - const int& ago, - const std::vector& fparam_, - const std::vector& aparam__) { - std::vector dener_; - dp->computew(dener_, dforce_, dvirial, datom_energy_, datom_virial_, dcoord_, - datype_, dbox, nghost, lmp_list, ago, fparam_, aparam__); - dener = dener_[0]; -} -template -void DeepPot::compute(std::vector& dener, - std::vector& dforce_, - std::vector& dvirial, - std::vector& datom_energy_, - std::vector& datom_virial_, - const std::vector& dcoord_, - const std::vector& datype_, - const std::vector& dbox, - const int nghost, - const InputNlist& lmp_list, - const int& ago, - const std::vector& fparam_, - const std::vector& aparam__) { - dp->computew(dener, dforce_, dvirial, datom_energy_, datom_virial_, dcoord_, - datype_, dbox, nghost, lmp_list, ago, fparam_, aparam__); -} + template void DeepPot::compute( + ENERGYTYPE & dener, std::vector & dforce_, + std::vector & dvirial, std::vector & datom_energy_, + std::vector & datom_virial_, const std::vector& dcoord_, + const std::vector& datype_, const std::vector& dbox, + const std::vector& fparam, const std::vector& aparam); + + template void DeepPot::compute( + ENERGYTYPE & dener, std::vector & dforce_, + std::vector & dvirial, std::vector & datom_energy_, + std::vector & datom_virial_, const std::vector& dcoord_, + const std::vector& datype_, const std::vector& dbox, + const std::vector& fparam, const std::vector& aparam); + + template void DeepPot::compute( + std::vector & dener, std::vector & dforce_, + std::vector & dvirial, std::vector & datom_energy_, + std::vector & datom_virial_, const std::vector& dcoord_, + const std::vector& datype_, const std::vector& dbox, + const std::vector& fparam, const std::vector& aparam); + + template void DeepPot::compute( + std::vector & dener, std::vector & dforce_, + std::vector & dvirial, std::vector & datom_energy_, + std::vector & datom_virial_, const std::vector& dcoord_, + const std::vector& datype_, const std::vector& dbox, + const std::vector& fparam, const std::vector& aparam); + + template + void DeepPot::compute( + ENERGYTYPE & dener, std::vector & dforce_, + std::vector & dvirial, std::vector & datom_energy_, + std::vector & datom_virial_, + const std::vector& dcoord_, const std::vector& datype_, + const std::vector& dbox, const int nghost, + const InputNlist& lmp_list, const int& ago, + const std::vector& fparam_, + const std::vector& aparam__) { + std::vector dener_; + dp->computew(dener_, dforce_, dvirial, datom_energy_, datom_virial_, + dcoord_, datype_, dbox, nghost, lmp_list, ago, fparam_, + aparam__); + dener = dener_[0]; + } + template + void DeepPot::compute( + std::vector & dener, std::vector & dforce_, + std::vector & dvirial, std::vector & datom_energy_, + std::vector & datom_virial_, + const std::vector& dcoord_, const std::vector& datype_, + const std::vector& dbox, const int nghost, + const InputNlist& lmp_list, const int& ago, + const std::vector& fparam_, + const std::vector& aparam__) { + dp->computew(dener, dforce_, dvirial, datom_energy_, datom_virial_, dcoord_, + datype_, dbox, nghost, lmp_list, ago, fparam_, aparam__); + } -template void DeepPot::compute(ENERGYTYPE& dener, - std::vector& dforce_, - std::vector& dvirial, - std::vector& datom_energy_, - std::vector& datom_virial_, - const std::vector& dcoord_, - const std::vector& datype_, - const std::vector& dbox, - const int nghost, - const InputNlist& lmp_list, - const int& ago, - const std::vector& fparam, - const std::vector& aparam_); - -template void DeepPot::compute(ENERGYTYPE& dener, - std::vector& dforce_, - std::vector& dvirial, - std::vector& datom_energy_, - std::vector& datom_virial_, - const std::vector& dcoord_, - const std::vector& datype_, - const std::vector& dbox, - const int nghost, - const InputNlist& lmp_list, - const int& ago, - const std::vector& fparam, - const std::vector& aparam_); - -template void DeepPot::compute(std::vector& dener, - std::vector& dforce_, - std::vector& dvirial, - std::vector& datom_energy_, - std::vector& datom_virial_, - const std::vector& dcoord_, - const std::vector& datype_, - const std::vector& dbox, - const int nghost, - const InputNlist& lmp_list, - const int& ago, - const std::vector& fparam, - const std::vector& aparam_); - -template void DeepPot::compute(std::vector& dener, - std::vector& dforce_, - std::vector& dvirial, - std::vector& datom_energy_, - std::vector& datom_virial_, - const std::vector& dcoord_, - const std::vector& datype_, - const std::vector& dbox, - const int nghost, - const InputNlist& lmp_list, - const int& ago, - const std::vector& fparam, - const std::vector& aparam_); - -// mixed type -template -void DeepPot::compute_mixed_type(ENERGYTYPE& dener, - std::vector& dforce_, - std::vector& dvirial, - const int& nframes, - const std::vector& dcoord_, - const std::vector& datype_, - const std::vector& dbox, - const std::vector& fparam_, - const std::vector& aparam_) { - std::vector dener_; - std::vector datom_energy_, datom_virial_; - dp->computew_mixed_type(dener_, dforce_, dvirial, datom_energy_, - datom_virial_, nframes, dcoord_, datype_, dbox, - fparam_, aparam_); - dener = dener_[0]; -} -template -void DeepPot::compute_mixed_type(std::vector& dener, - std::vector& dforce_, - std::vector& dvirial, - const int& nframes, - const std::vector& dcoord_, - const std::vector& datype_, - const std::vector& dbox, - const std::vector& fparam_, - const std::vector& aparam_) { - std::vector datom_energy_, datom_virial_; - dp->computew_mixed_type(dener, dforce_, dvirial, datom_energy_, datom_virial_, - nframes, dcoord_, datype_, dbox, fparam_, aparam_); -} + template void DeepPot::compute( + ENERGYTYPE & dener, std::vector & dforce_, + std::vector & dvirial, std::vector & datom_energy_, + std::vector & datom_virial_, const std::vector& dcoord_, + const std::vector& datype_, const std::vector& dbox, + const int nghost, const InputNlist& lmp_list, const int& ago, + const std::vector& fparam, const std::vector& aparam_); + + template void DeepPot::compute( + ENERGYTYPE & dener, std::vector & dforce_, + std::vector & dvirial, std::vector & datom_energy_, + std::vector & datom_virial_, const std::vector& dcoord_, + const std::vector& datype_, const std::vector& dbox, + const int nghost, const InputNlist& lmp_list, const int& ago, + const std::vector& fparam, const std::vector& aparam_); + + template void DeepPot::compute( + std::vector & dener, std::vector & dforce_, + std::vector & dvirial, std::vector & datom_energy_, + std::vector & datom_virial_, const std::vector& dcoord_, + const std::vector& datype_, const std::vector& dbox, + const int nghost, const InputNlist& lmp_list, const int& ago, + const std::vector& fparam, const std::vector& aparam_); + + template void DeepPot::compute( + std::vector & dener, std::vector & dforce_, + std::vector & dvirial, std::vector & datom_energy_, + std::vector & datom_virial_, const std::vector& dcoord_, + const std::vector& datype_, const std::vector& dbox, + const int nghost, const InputNlist& lmp_list, const int& ago, + const std::vector& fparam, const std::vector& aparam_); + + // mixed type + template + void DeepPot::compute_mixed_type( + ENERGYTYPE & dener, std::vector & dforce_, + std::vector & dvirial, const int& nframes, + const std::vector& dcoord_, const std::vector& datype_, + const std::vector& dbox, const std::vector& fparam_, + const std::vector& aparam_) { + std::vector dener_; + std::vector datom_energy_, datom_virial_; + dp->computew_mixed_type(dener_, dforce_, dvirial, datom_energy_, + datom_virial_, nframes, dcoord_, datype_, dbox, + fparam_, aparam_); + dener = dener_[0]; + } + template + void DeepPot::compute_mixed_type( + std::vector & dener, std::vector & dforce_, + std::vector & dvirial, const int& nframes, + const std::vector& dcoord_, const std::vector& datype_, + const std::vector& dbox, const std::vector& fparam_, + const std::vector& aparam_) { + std::vector datom_energy_, datom_virial_; + dp->computew_mixed_type(dener, dforce_, dvirial, datom_energy_, + datom_virial_, nframes, dcoord_, datype_, dbox, + fparam_, aparam_); + } -template void DeepPot::compute_mixed_type( - ENERGYTYPE& dener, - std::vector& dforce_, - std::vector& dvirial, - const int& nframes, - const std::vector& dcoord_, - const std::vector& datype_, - const std::vector& dbox, - const std::vector& fparam, - const std::vector& aparam); - -template void DeepPot::compute_mixed_type( - ENERGYTYPE& dener, - std::vector& dforce_, - std::vector& dvirial, - const int& nframes, - const std::vector& dcoord_, - const std::vector& datype_, - const std::vector& dbox, - const std::vector& fparam, - const std::vector& aparam); - -template void DeepPot::compute_mixed_type( - std::vector& dener, - std::vector& dforce_, - std::vector& dvirial, - const int& nframes, - const std::vector& dcoord_, - const std::vector& datype_, - const std::vector& dbox, - const std::vector& fparam, - const std::vector& aparam); - -template void DeepPot::compute_mixed_type( - std::vector& dener, - std::vector& dforce_, - std::vector& dvirial, - const int& nframes, - const std::vector& dcoord_, - const std::vector& datype_, - const std::vector& dbox, - const std::vector& fparam, - const std::vector& aparam); - -template -void DeepPot::compute_mixed_type(ENERGYTYPE& dener, - std::vector& dforce_, - std::vector& dvirial, - std::vector& datom_energy_, - std::vector& datom_virial_, - const int& nframes, - const std::vector& dcoord_, - const std::vector& datype_, - const std::vector& dbox, - const std::vector& fparam_, - const std::vector& aparam_) { - std::vector dener_; - dp->computew_mixed_type(dener_, dforce_, dvirial, datom_energy_, - datom_virial_, nframes, dcoord_, datype_, dbox, - fparam_, aparam_); - dener = dener_[0]; -} -template -void DeepPot::compute_mixed_type(std::vector& dener, - std::vector& dforce_, - std::vector& dvirial, - std::vector& datom_energy_, - std::vector& datom_virial_, - const int& nframes, - const std::vector& dcoord_, - const std::vector& datype_, - const std::vector& dbox, - const std::vector& fparam_, - const std::vector& aparam_) { - dp->computew_mixed_type(dener, dforce_, dvirial, datom_energy_, datom_virial_, - nframes, dcoord_, datype_, dbox, fparam_, aparam_); -} + template void DeepPot::compute_mixed_type( + ENERGYTYPE & dener, std::vector & dforce_, + std::vector & dvirial, const int& nframes, + const std::vector& dcoord_, const std::vector& datype_, + const std::vector& dbox, const std::vector& fparam, + const std::vector& aparam); + + template void DeepPot::compute_mixed_type( + ENERGYTYPE & dener, std::vector & dforce_, + std::vector & dvirial, const int& nframes, + const std::vector& dcoord_, const std::vector& datype_, + const std::vector& dbox, const std::vector& fparam, + const std::vector& aparam); + + template void DeepPot::compute_mixed_type( + std::vector & dener, std::vector & dforce_, + std::vector & dvirial, const int& nframes, + const std::vector& dcoord_, const std::vector& datype_, + const std::vector& dbox, const std::vector& fparam, + const std::vector& aparam); + + template void DeepPot::compute_mixed_type( + std::vector & dener, std::vector & dforce_, + std::vector & dvirial, const int& nframes, + const std::vector& dcoord_, const std::vector& datype_, + const std::vector& dbox, const std::vector& fparam, + const std::vector& aparam); + + template + void DeepPot::compute_mixed_type( + ENERGYTYPE & dener, std::vector & dforce_, + std::vector & dvirial, std::vector & datom_energy_, + std::vector & datom_virial_, const int& nframes, + const std::vector& dcoord_, const std::vector& datype_, + const std::vector& dbox, const std::vector& fparam_, + const std::vector& aparam_) { + std::vector dener_; + dp->computew_mixed_type(dener_, dforce_, dvirial, datom_energy_, + datom_virial_, nframes, dcoord_, datype_, dbox, + fparam_, aparam_); + dener = dener_[0]; + } + template + void DeepPot::compute_mixed_type( + std::vector & dener, std::vector & dforce_, + std::vector & dvirial, std::vector & datom_energy_, + std::vector & datom_virial_, const int& nframes, + const std::vector& dcoord_, const std::vector& datype_, + const std::vector& dbox, const std::vector& fparam_, + const std::vector& aparam_) { + dp->computew_mixed_type(dener, dforce_, dvirial, datom_energy_, + datom_virial_, nframes, dcoord_, datype_, dbox, + fparam_, aparam_); + } -template void DeepPot::compute_mixed_type( - ENERGYTYPE& dener, - std::vector& dforce_, - std::vector& dvirial, - std::vector& datom_energy_, - std::vector& datom_virial_, - const int& nframes, - const std::vector& dcoord_, - const std::vector& datype_, - const std::vector& dbox, - const std::vector& fparam, - const std::vector& aparam); - -template void DeepPot::compute_mixed_type( - ENERGYTYPE& dener, - std::vector& dforce_, - std::vector& dvirial, - std::vector& datom_energy_, - std::vector& datom_virial_, - const int& nframes, - const std::vector& dcoord_, - const std::vector& datype_, - const std::vector& dbox, - const std::vector& fparam, - const std::vector& aparam); - -template void DeepPot::compute_mixed_type( - std::vector& dener, - std::vector& dforce_, - std::vector& dvirial, - std::vector& datom_energy_, - std::vector& datom_virial_, - const int& nframes, - const std::vector& dcoord_, - const std::vector& datype_, - const std::vector& dbox, - const std::vector& fparam, - const std::vector& aparam); - -template void DeepPot::compute_mixed_type( - std::vector& dener, - std::vector& dforce_, - std::vector& dvirial, - std::vector& datom_energy_, - std::vector& datom_virial_, - const int& nframes, - const std::vector& dcoord_, - const std::vector& datype_, - const std::vector& dbox, - const std::vector& fparam, - const std::vector& aparam); - -double DeepPot::cutoff() const { return dp->cutoff(); } - -int DeepPot::numb_types() const { return dp->numb_types(); } - -int DeepPot::numb_types_spin() const { return dp->numb_types_spin(); } - -int DeepPot::dim_fparam() const { return dp->dim_fparam(); } - -int DeepPot::dim_aparam() const { return dp->dim_aparam(); } - -void DeepPot::get_type_map(std::string& type_map) { - dp->get_type_map(type_map); -} + template void DeepPot::compute_mixed_type( + ENERGYTYPE & dener, std::vector & dforce_, + std::vector & dvirial, std::vector & datom_energy_, + std::vector & datom_virial_, const int& nframes, + const std::vector& dcoord_, const std::vector& datype_, + const std::vector& dbox, const std::vector& fparam, + const std::vector& aparam); + + template void DeepPot::compute_mixed_type( + ENERGYTYPE & dener, std::vector & dforce_, + std::vector & dvirial, std::vector & datom_energy_, + std::vector & datom_virial_, const int& nframes, + const std::vector& dcoord_, const std::vector& datype_, + const std::vector& dbox, const std::vector& fparam, + const std::vector& aparam); + + template void DeepPot::compute_mixed_type( + std::vector & dener, std::vector & dforce_, + std::vector & dvirial, std::vector & datom_energy_, + std::vector & datom_virial_, const int& nframes, + const std::vector& dcoord_, const std::vector& datype_, + const std::vector& dbox, const std::vector& fparam, + const std::vector& aparam); + + template void DeepPot::compute_mixed_type( + std::vector & dener, std::vector & dforce_, + std::vector & dvirial, std::vector & datom_energy_, + std::vector & datom_virial_, const int& nframes, + const std::vector& dcoord_, const std::vector& datype_, + const std::vector& dbox, const std::vector& fparam, + const std::vector& aparam); + + double DeepPot::cutoff() const { return dp->cutoff(); } + + int DeepPot::numb_types() const { return dp->numb_types(); } + + int DeepPot::numb_types_spin() const { return dp->numb_types_spin(); } + + int DeepPot::dim_fparam() const { return dp->dim_fparam(); } + + int DeepPot::dim_aparam() const { return dp->dim_aparam(); } + + void DeepPot::get_type_map(std::string & type_map) { + dp->get_type_map(type_map); + } -bool DeepPot::is_aparam_nall() const { return dp->is_aparam_nall(); } + bool DeepPot::is_aparam_nall() const { return dp->is_aparam_nall(); } -DeepPotModelDevi::DeepPotModelDevi() : inited(false), numb_models(0) {} + DeepPotModelDevi::DeepPotModelDevi() : inited(false), numb_models(0) {} -DeepPotModelDevi::DeepPotModelDevi( - const std::vector& models, - const int& gpu_rank, - const std::vector& file_contents) - : inited(false), numb_models(0) { - init(models, gpu_rank, file_contents); -} + DeepPotModelDevi::DeepPotModelDevi( + const std::vector& models, const int& gpu_rank, + const std::vector& file_contents) + : inited(false), numb_models(0) { + init(models, gpu_rank, file_contents); + } -DeepPotModelDevi::~DeepPotModelDevi() {} + DeepPotModelDevi::~DeepPotModelDevi() {} -void DeepPotModelDevi::init(const std::vector& models, - const int& gpu_rank, - const std::vector& file_contents) { - if (inited) { - std::cerr << "WARNING: deepmd-kit should not be initialized twice, do " - "nothing at the second call of initializer" - << std::endl; - return; - } - numb_models = models.size(); - if (numb_models == 0) { - throw deepmd::deepmd_exception("no model is specified"); - } - dps.resize(numb_models); - for (unsigned int ii = 0; ii < numb_models; ++ii) { - dps[ii].init(models[ii], gpu_rank, - file_contents.size() > ii ? file_contents[ii] : ""); + void DeepPotModelDevi::init(const std::vector& models, + const int& gpu_rank, + const std::vector& file_contents) { + if (inited) { + std::cerr << "WARNING: deepmd-kit should not be initialized twice, do " + "nothing at the second call of initializer" + << std::endl; + return; + } + numb_models = models.size(); + if (numb_models == 0) { + throw deepmd::deepmd_exception("no model is specified"); + } + dps.resize(numb_models); + for (unsigned int ii = 0; ii < numb_models; ++ii) { + dps[ii].init(models[ii], gpu_rank, + file_contents.size() > ii ? file_contents[ii] : ""); + } + inited = true; } - inited = true; -} -template -void DeepPotModelDevi::compute(std::vector& all_energy, - std::vector>& all_force, - std::vector>& all_virial, - const std::vector& dcoord_, - const std::vector& datype_, - const std::vector& dbox, - const int nghost, - const InputNlist& lmp_list, - const int& ago, - const std::vector& fparam, - const std::vector& aparam_) { - if (numb_models == 0) { - return; - } - all_energy.resize(numb_models); - all_force.resize(numb_models); - all_virial.resize(numb_models); - for (unsigned ii = 0; ii < numb_models; ++ii) { - dps[ii].compute(all_energy[ii], all_force[ii], all_virial[ii], dcoord_, - datype_, dbox, nghost, lmp_list, ago, fparam, aparam_); + template + void DeepPotModelDevi::compute( + std::vector & all_energy, + std::vector> & all_force, + std::vector> & all_virial, + const std::vector& dcoord_, const std::vector& datype_, + const std::vector& dbox, const int nghost, + const InputNlist& lmp_list, const int& ago, + const std::vector& fparam, + const std::vector& aparam_) { + if (numb_models == 0) { + return; + } + all_energy.resize(numb_models); + all_force.resize(numb_models); + all_virial.resize(numb_models); + for (unsigned ii = 0; ii < numb_models; ++ii) { + dps[ii].compute(all_energy[ii], all_force[ii], all_virial[ii], dcoord_, + datype_, dbox, nghost, lmp_list, ago, fparam, aparam_); + } } -} -template void DeepPotModelDevi::compute( - std::vector& all_energy, - std::vector>& all_force, - std::vector>& all_virial, - const std::vector& dcoord_, - const std::vector& datype_, - const std::vector& dbox, - const int nghost, - const InputNlist& lmp_list, - const int& ago, - const std::vector& fparam, - const std::vector& aparam); - -template void DeepPotModelDevi::compute( - std::vector& all_energy, - std::vector>& all_force, - std::vector>& all_virial, - const std::vector& dcoord_, - const std::vector& datype_, - const std::vector& dbox, - const int nghost, - const InputNlist& lmp_list, - const int& ago, - const std::vector& fparam, - const std::vector& aparam); - -template -void DeepPotModelDevi::compute( - std::vector& all_energy, - std::vector>& all_force, - std::vector>& all_virial, - std::vector>& all_atom_energy, - std::vector>& all_atom_virial, - const std::vector& dcoord_, - const std::vector& datype_, - const std::vector& dbox, - const int nghost, - const InputNlist& lmp_list, - const int& ago, - const std::vector& fparam, - const std::vector& aparam_) { - if (numb_models == 0) { - return; - } - all_energy.resize(numb_models); - all_force.resize(numb_models); - all_virial.resize(numb_models); - all_atom_energy.resize(numb_models); - all_atom_virial.resize(numb_models); - for (unsigned ii = 0; ii < numb_models; ++ii) { - dps[ii].compute(all_energy[ii], all_force[ii], all_virial[ii], - all_atom_energy[ii], all_atom_virial[ii], dcoord_, datype_, - dbox, nghost, lmp_list, ago, fparam, aparam_); + template void DeepPotModelDevi::compute( + std::vector & all_energy, + std::vector> & all_force, + std::vector> & all_virial, + const std::vector& dcoord_, const std::vector& datype_, + const std::vector& dbox, const int nghost, + const InputNlist& lmp_list, const int& ago, + const std::vector& fparam, const std::vector& aparam); + + template void DeepPotModelDevi::compute( + std::vector & all_energy, + std::vector> & all_force, + std::vector> & all_virial, + const std::vector& dcoord_, const std::vector& datype_, + const std::vector& dbox, const int nghost, + const InputNlist& lmp_list, const int& ago, + const std::vector& fparam, const std::vector& aparam); + + template + void DeepPotModelDevi::compute( + std::vector & all_energy, + std::vector> & all_force, + std::vector> & all_virial, + std::vector> & all_atom_energy, + std::vector> & all_atom_virial, + const std::vector& dcoord_, const std::vector& datype_, + const std::vector& dbox, const int nghost, + const InputNlist& lmp_list, const int& ago, + const std::vector& fparam, + const std::vector& aparam_) { + if (numb_models == 0) { + return; + } + all_energy.resize(numb_models); + all_force.resize(numb_models); + all_virial.resize(numb_models); + all_atom_energy.resize(numb_models); + all_atom_virial.resize(numb_models); + for (unsigned ii = 0; ii < numb_models; ++ii) { + dps[ii].compute(all_energy[ii], all_force[ii], all_virial[ii], + all_atom_energy[ii], all_atom_virial[ii], dcoord_, + datype_, dbox, nghost, lmp_list, ago, fparam, aparam_); + } } -} -template void DeepPotModelDevi::compute( - std::vector& all_energy, - std::vector>& all_force, - std::vector>& all_virial, - std::vector>& all_atom_energy, - std::vector>& all_atom_virial, - const std::vector& dcoord_, - const std::vector& datype_, - const std::vector& dbox, - const int nghost, - const InputNlist& lmp_list, - const int& ago, - const std::vector& fparam, - const std::vector& aparam); - -template void DeepPotModelDevi::compute( - std::vector& all_energy, - std::vector>& all_force, - std::vector>& all_virial, - std::vector>& all_atom_energy, - std::vector>& all_atom_virial, - const std::vector& dcoord_, - const std::vector& datype_, - const std::vector& dbox, - const int nghost, - const InputNlist& lmp_list, - const int& ago, - const std::vector& fparam, - const std::vector& aparam); - -template -void DeepPotModelDevi::compute_avg(VALUETYPE& dener, - const std::vector& all_energy) { - assert(all_energy.size() == numb_models); - if (numb_models == 0) { - return; - } + template void DeepPotModelDevi::compute( + std::vector & all_energy, + std::vector> & all_force, + std::vector> & all_virial, + std::vector> & all_atom_energy, + std::vector> & all_atom_virial, + const std::vector& dcoord_, const std::vector& datype_, + const std::vector& dbox, const int nghost, + const InputNlist& lmp_list, const int& ago, + const std::vector& fparam, const std::vector& aparam); + + template void DeepPotModelDevi::compute( + std::vector & all_energy, + std::vector> & all_force, + std::vector> & all_virial, + std::vector> & all_atom_energy, + std::vector> & all_atom_virial, + const std::vector& dcoord_, const std::vector& datype_, + const std::vector& dbox, const int nghost, + const InputNlist& lmp_list, const int& ago, + const std::vector& fparam, const std::vector& aparam); + + template + void DeepPotModelDevi::compute_avg(VALUETYPE & dener, + const std::vector& all_energy) { + assert(all_energy.size() == numb_models); + if (numb_models == 0) { + return; + } - dener = 0; - for (unsigned ii = 0; ii < numb_models; ++ii) { - dener += all_energy[ii]; + dener = 0; + for (unsigned ii = 0; ii < numb_models; ++ii) { + dener += all_energy[ii]; + } + dener /= (VALUETYPE)(numb_models); } - dener /= (VALUETYPE)(numb_models); -} -template void DeepPotModelDevi::compute_avg( - double& dener, const std::vector& all_energy); + template void DeepPotModelDevi::compute_avg( + double& dener, const std::vector& all_energy); -template void DeepPotModelDevi::compute_avg( - float& dener, const std::vector& all_energy); + template void DeepPotModelDevi::compute_avg( + float& dener, const std::vector& all_energy); -template -void DeepPotModelDevi::compute_avg( - std::vector& avg, - const std::vector>& xx) { - assert(xx.size() == numb_models); - if (numb_models == 0) { - return; - } + template + void DeepPotModelDevi::compute_avg( + std::vector & avg, + const std::vector>& xx) { + assert(xx.size() == numb_models); + if (numb_models == 0) { + return; + } - avg.resize(xx[0].size()); - fill(avg.begin(), avg.end(), VALUETYPE(0.)); + avg.resize(xx[0].size()); + fill(avg.begin(), avg.end(), VALUETYPE(0.)); + + for (unsigned ii = 0; ii < numb_models; ++ii) { + for (unsigned jj = 0; jj < avg.size(); ++jj) { + avg[jj] += xx[ii][jj]; + } + } - for (unsigned ii = 0; ii < numb_models; ++ii) { for (unsigned jj = 0; jj < avg.size(); ++jj) { - avg[jj] += xx[ii][jj]; + avg[jj] /= VALUETYPE(numb_models); } } - for (unsigned jj = 0; jj < avg.size(); ++jj) { - avg[jj] /= VALUETYPE(numb_models); + template void DeepPotModelDevi::compute_avg( + std::vector & avg, const std::vector>& xx); + + template void DeepPotModelDevi::compute_avg( + std::vector & avg, const std::vector>& xx); + + template + void DeepPotModelDevi::compute_std( + std::vector & std, const std::vector& avg, + const std::vector>& xx, const int& stride) { + assert(xx.size() == numb_models); + if (numb_models == 0) { + return; + } + + unsigned ndof = avg.size(); + unsigned nloc = ndof / stride; + assert(nloc * stride == ndof); + + std.resize(nloc); + fill(std.begin(), std.end(), VALUETYPE(0.)); + + for (unsigned ii = 0; ii < numb_models; ++ii) { + for (unsigned jj = 0; jj < nloc; ++jj) { + const VALUETYPE* tmp_f = &(xx[ii][static_cast(jj) * stride]); + const VALUETYPE* tmp_avg = &(avg[static_cast(jj) * stride]); + for (unsigned dd = 0; dd < stride; ++dd) { + VALUETYPE vdiff = tmp_f[dd] - tmp_avg[dd]; + std[jj] += vdiff * vdiff; + } + } + } + + for (unsigned jj = 0; jj < nloc; ++jj) { + std[jj] = sqrt(std[jj] / VALUETYPE(numb_models)); + } } -} -template void DeepPotModelDevi::compute_avg( - std::vector& avg, const std::vector>& xx); + template void DeepPotModelDevi::compute_std( + std::vector & std, const std::vector& avg, + const std::vector>& xx, const int& stride); -template void DeepPotModelDevi::compute_avg( - std::vector& avg, const std::vector>& xx); + template void DeepPotModelDevi::compute_std( + std::vector & std, const std::vector& avg, + const std::vector>& xx, const int& stride); -template -void DeepPotModelDevi::compute_std( - std::vector& std, - const std::vector& avg, - const std::vector>& xx, - const int& stride) { - assert(xx.size() == numb_models); - if (numb_models == 0) { - return; + template + void DeepPotModelDevi::compute_std_e( + std::vector & std, const std::vector& avg, + const std::vector>& xx) { + compute_std(std, avg, xx, 1); } - unsigned ndof = avg.size(); - unsigned nloc = ndof / stride; - assert(nloc * stride == ndof); + template void DeepPotModelDevi::compute_std_e( + std::vector & std, const std::vector& avg, + const std::vector>& xx); - std.resize(nloc); - fill(std.begin(), std.end(), VALUETYPE(0.)); + template void DeepPotModelDevi::compute_std_e( + std::vector & std, const std::vector& avg, + const std::vector>& xx); - for (unsigned ii = 0; ii < numb_models; ++ii) { - for (unsigned jj = 0; jj < nloc; ++jj) { - const VALUETYPE* tmp_f = &(xx[ii][static_cast(jj) * stride]); - const VALUETYPE* tmp_avg = &(avg[static_cast(jj) * stride]); + template + void DeepPotModelDevi::compute_std_f( + std::vector & std, const std::vector& avg, + const std::vector>& xx) { + compute_std(std, avg, xx, 3); + } + + template void DeepPotModelDevi::compute_std_f( + std::vector & std, const std::vector& avg, + const std::vector>& xx); + + template void DeepPotModelDevi::compute_std_f( + std::vector & std, const std::vector& avg, + const std::vector>& xx); + + template + void DeepPotModelDevi::compute_relative_std( + std::vector & std, const std::vector& avg, + const VALUETYPE eps, const int& stride) { + unsigned ndof = avg.size(); + unsigned nloc = std.size(); + assert(nloc * stride == ndof); + + for (unsigned ii = 0; ii < nloc; ++ii) { + const VALUETYPE* tmp_avg = &(avg[static_cast(ii) * stride]); + VALUETYPE f_norm = 0.0; for (unsigned dd = 0; dd < stride; ++dd) { - VALUETYPE vdiff = tmp_f[dd] - tmp_avg[dd]; - std[jj] += vdiff * vdiff; + f_norm += tmp_avg[dd] * tmp_avg[dd]; } + f_norm = sqrt(f_norm); + std[ii] /= f_norm + eps; } } - for (unsigned jj = 0; jj < nloc; ++jj) { - std[jj] = sqrt(std[jj] / VALUETYPE(numb_models)); - } -} - -template void DeepPotModelDevi::compute_std( - std::vector& std, - const std::vector& avg, - const std::vector>& xx, - const int& stride); - -template void DeepPotModelDevi::compute_std( - std::vector& std, - const std::vector& avg, - const std::vector>& xx, - const int& stride); - -template -void DeepPotModelDevi::compute_std_e( - std::vector& std, - const std::vector& avg, - const std::vector>& xx) { - compute_std(std, avg, xx, 1); -} + template void DeepPotModelDevi::compute_relative_std( + std::vector & std, const std::vector& avg, + const double eps, const int& stride); -template void DeepPotModelDevi::compute_std_e( - std::vector& std, - const std::vector& avg, - const std::vector>& xx); - -template void DeepPotModelDevi::compute_std_e( - std::vector& std, - const std::vector& avg, - const std::vector>& xx); - -template -void DeepPotModelDevi::compute_std_f( - std::vector& std, - const std::vector& avg, - const std::vector>& xx) { - compute_std(std, avg, xx, 3); -} + template void DeepPotModelDevi::compute_relative_std( + std::vector & std, const std::vector& avg, const float eps, + const int& stride); -template void DeepPotModelDevi::compute_std_f( - std::vector& std, - const std::vector& avg, - const std::vector>& xx); - -template void DeepPotModelDevi::compute_std_f( - std::vector& std, - const std::vector& avg, - const std::vector>& xx); - -template -void DeepPotModelDevi::compute_relative_std(std::vector& std, - const std::vector& avg, - const VALUETYPE eps, - const int& stride) { - unsigned ndof = avg.size(); - unsigned nloc = std.size(); - assert(nloc * stride == ndof); - - for (unsigned ii = 0; ii < nloc; ++ii) { - const VALUETYPE* tmp_avg = &(avg[static_cast(ii) * stride]); - VALUETYPE f_norm = 0.0; - for (unsigned dd = 0; dd < stride; ++dd) { - f_norm += tmp_avg[dd] * tmp_avg[dd]; - } - f_norm = sqrt(f_norm); - std[ii] /= f_norm + eps; + template + void DeepPotModelDevi::compute_relative_std_f( + std::vector & std, const std::vector& avg, + const VALUETYPE eps) { + compute_relative_std(std, avg, eps, 3); } -} - -template void DeepPotModelDevi::compute_relative_std( - std::vector& std, - const std::vector& avg, - const double eps, - const int& stride); - -template void DeepPotModelDevi::compute_relative_std( - std::vector& std, - const std::vector& avg, - const float eps, - const int& stride); - -template -void DeepPotModelDevi::compute_relative_std_f(std::vector& std, - const std::vector& avg, - const VALUETYPE eps) { - compute_relative_std(std, avg, eps, 3); -} -template void DeepPotModelDevi::compute_relative_std_f( - std::vector& std, const std::vector& avg, const double eps); + template void DeepPotModelDevi::compute_relative_std_f( + std::vector & std, const std::vector& avg, + const double eps); -template void DeepPotModelDevi::compute_relative_std_f( - std::vector& std, const std::vector& avg, const float eps); + template void DeepPotModelDevi::compute_relative_std_f( + std::vector & std, const std::vector& avg, const float eps); From d157a4fcf614c46ab254618e32f1838d86d9fb5d Mon Sep 17 00:00:00 2001 From: Jinzhe Zeng Date: Fri, 26 Jan 2024 12:56:43 -0500 Subject: [PATCH 037/117] fix compilation error --- source/api_cc/src/DeepPot.cc | 5 +++-- source/api_cc/src/commonPT.cc | 2 ++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/source/api_cc/src/DeepPot.cc b/source/api_cc/src/DeepPot.cc index 273344ffb6..f025f6edc6 100644 --- a/source/api_cc/src/DeepPot.cc +++ b/source/api_cc/src/DeepPot.cc @@ -37,10 +37,11 @@ void DeepPot::init(const std::string& model, << std::endl; return; } + DPBackend backend; if (model.length() >= 4 && model.substr(model.length() - 4) == ".pth") { - DPBackend backend = deepmd::DPBackend::PyTorch; + backend = deepmd::DPBackend::PyTorch; } else if (model.length() >= 3 && model.substr(model.length() - 3) == ".pb") { - DPBackend backend = deepmd::DPBackend::TensorFlow; + backend = deepmd::DPBackend::TensorFlow; else { throw deepmd::deepmd_exception("Unsupported model file format"); } diff --git a/source/api_cc/src/commonPT.cc b/source/api_cc/src/commonPT.cc index c4e8315192..528ac22c46 100644 --- a/source/api_cc/src/commonPT.cc +++ b/source/api_cc/src/commonPT.cc @@ -1,4 +1,5 @@ // SPDX-License-Identifier: LGPL-3.0-or-later +#ifdef BUILD_PYTORCH #include "commonPT.h" using namespace deepmd; void NeighborListDataPT::copy_from_nlist(const InputNlist& inlist, @@ -22,3 +23,4 @@ void NeighborListDataPT::copy_from_nlist(const InputNlist& inlist, jnum * sizeof(int)); } } +#endif From 522b7c89c7ad9077145afe59c80feeb9e9783139 Mon Sep 17 00:00:00 2001 From: Jinzhe Zeng Date: Fri, 26 Jan 2024 13:01:10 -0500 Subject: [PATCH 038/117] a backet is missing... --- source/api_cc/src/DeepPot.cc | 1 + 1 file changed, 1 insertion(+) diff --git a/source/api_cc/src/DeepPot.cc b/source/api_cc/src/DeepPot.cc index f025f6edc6..efe78417d3 100644 --- a/source/api_cc/src/DeepPot.cc +++ b/source/api_cc/src/DeepPot.cc @@ -42,6 +42,7 @@ void DeepPot::init(const std::string& model, backend = deepmd::DPBackend::PyTorch; } else if (model.length() >= 3 && model.substr(model.length() - 3) == ".pb") { backend = deepmd::DPBackend::TensorFlow; + } else { throw deepmd::deepmd_exception("Unsupported model file format"); } From f75dab6c71c11a603b4d6da1df1de1fdf2a788d5 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 26 Jan 2024 18:01:32 +0000 Subject: [PATCH 039/117] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- source/api_cc/src/DeepPot.cc | 1392 +++++++++++++++++++--------------- 1 file changed, 786 insertions(+), 606 deletions(-) diff --git a/source/api_cc/src/DeepPot.cc b/source/api_cc/src/DeepPot.cc index efe78417d3..e7e89b5cd5 100644 --- a/source/api_cc/src/DeepPot.cc +++ b/source/api_cc/src/DeepPot.cc @@ -42,667 +42,847 @@ void DeepPot::init(const std::string& model, backend = deepmd::DPBackend::PyTorch; } else if (model.length() >= 3 && model.substr(model.length() - 3) == ".pb") { backend = deepmd::DPBackend::TensorFlow; + } else { + throw deepmd::deepmd_exception("Unsupported model file format"); } - else { - throw deepmd::deepmd_exception("Unsupported model file format"); - } - if (deepmd::DPBackend::TensorFlow == backend) { + if (deepmd::DPBackend::TensorFlow == backend) { #ifdef BUILD_TENSORFLOW - dp = std::make_shared(model, gpu_rank, file_content); + dp = std::make_shared(model, gpu_rank, file_content); #else - throw deepmd::deepmd_exception("TensorFlow backend is not built"); + throw deepmd::deepmd_exception("TensorFlow backend is not built"); #endif - } else if (deepmd::DPBackend::PyTorch == backend) { - // throw deepmd::deepmd_exception("PyTorch backend is not supported yet"); + } else if (deepmd::DPBackend::PyTorch == backend) { + // throw deepmd::deepmd_exception("PyTorch backend is not supported yet"); #ifdef BUILD_PYTORCH - dp = std::make_shared(model, gpu_rank, file_content); + dp = std::make_shared(model, gpu_rank, file_content); #else - throw deepmd::deepmd_exception("PyTorch backend is not built"); + throw deepmd::deepmd_exception("PyTorch backend is not built"); #endif - } else if (deepmd::DPBackend::Paddle == backend) { - throw deepmd::deepmd_exception( - "PaddlePaddle backend is not supported yet"); - } else { - throw deepmd::deepmd_exception("Unknown file type"); - } - inited = true; + } else if (deepmd::DPBackend::Paddle == backend) { + throw deepmd::deepmd_exception("PaddlePaddle backend is not supported yet"); + } else { + throw deepmd::deepmd_exception("Unknown file type"); } + inited = true; +} - void DeepPot::print_summary(const std::string& pre) const { - deepmd::print_summary(pre); - } +void DeepPot::print_summary(const std::string& pre) const { + deepmd::print_summary(pre); +} - template - void DeepPot::compute( - ENERGYTYPE & dener, std::vector & dforce_, - std::vector & dvirial, const std::vector& dcoord_, - const std::vector& datype_, const std::vector& dbox, - const std::vector& fparam_, - const std::vector& aparam_) { - std::vector dener_; - std::vector datom_energy_, datom_virial_; - dp->computew(dener_, dforce_, dvirial, datom_energy_, datom_virial_, - dcoord_, datype_, dbox, fparam_, aparam_); - dener = dener_[0]; - } +template +void DeepPot::compute(ENERGYTYPE& dener, + std::vector& dforce_, + std::vector& dvirial, + const std::vector& dcoord_, + const std::vector& datype_, + const std::vector& dbox, + const std::vector& fparam_, + const std::vector& aparam_) { + std::vector dener_; + std::vector datom_energy_, datom_virial_; + dp->computew(dener_, dforce_, dvirial, datom_energy_, datom_virial_, dcoord_, + datype_, dbox, fparam_, aparam_); + dener = dener_[0]; +} - template - void DeepPot::compute( - std::vector & dener, std::vector & dforce_, - std::vector & dvirial, const std::vector& dcoord_, - const std::vector& datype_, const std::vector& dbox, - const std::vector& fparam_, - const std::vector& aparam_) { - std::vector datom_energy_, datom_virial_; - dp->computew(dener, dforce_, dvirial, datom_energy_, datom_virial_, dcoord_, - datype_, dbox, fparam_, aparam_); - } +template +void DeepPot::compute(std::vector& dener, + std::vector& dforce_, + std::vector& dvirial, + const std::vector& dcoord_, + const std::vector& datype_, + const std::vector& dbox, + const std::vector& fparam_, + const std::vector& aparam_) { + std::vector datom_energy_, datom_virial_; + dp->computew(dener, dforce_, dvirial, datom_energy_, datom_virial_, dcoord_, + datype_, dbox, fparam_, aparam_); +} - template void DeepPot::compute( - ENERGYTYPE & dener, std::vector & dforce_, - std::vector & dvirial, const std::vector& dcoord_, - const std::vector& datype_, const std::vector& dbox, - const std::vector& fparam, const std::vector& aparam); - - template void DeepPot::compute( - ENERGYTYPE & dener, std::vector & dforce_, - std::vector & dvirial, const std::vector& dcoord_, - const std::vector& datype_, const std::vector& dbox, - const std::vector& fparam, const std::vector& aparam); - - template void DeepPot::compute( - std::vector & dener, std::vector & dforce_, - std::vector & dvirial, const std::vector& dcoord_, - const std::vector& datype_, const std::vector& dbox, - const std::vector& fparam, const std::vector& aparam); - - template void DeepPot::compute( - std::vector & dener, std::vector & dforce_, - std::vector & dvirial, const std::vector& dcoord_, - const std::vector& datype_, const std::vector& dbox, - const std::vector& fparam, const std::vector& aparam); - - template - void DeepPot::compute( - ENERGYTYPE & dener, std::vector & dforce_, - std::vector & dvirial, const std::vector& dcoord_, - const std::vector& datype_, const std::vector& dbox, - const int nghost, const InputNlist& lmp_list, const int& ago, - const std::vector& fparam_, - const std::vector& aparam__) { - std::vector dener_; - std::vector datom_energy_, datom_virial_; - dp->computew(dener_, dforce_, dvirial, datom_energy_, datom_virial_, - dcoord_, datype_, dbox, nghost, lmp_list, ago, fparam_, - aparam__); - dener = dener_[0]; - } +template void DeepPot::compute(ENERGYTYPE& dener, + std::vector& dforce_, + std::vector& dvirial, + const std::vector& dcoord_, + const std::vector& datype_, + const std::vector& dbox, + const std::vector& fparam, + const std::vector& aparam); + +template void DeepPot::compute(ENERGYTYPE& dener, + std::vector& dforce_, + std::vector& dvirial, + const std::vector& dcoord_, + const std::vector& datype_, + const std::vector& dbox, + const std::vector& fparam, + const std::vector& aparam); + +template void DeepPot::compute(std::vector& dener, + std::vector& dforce_, + std::vector& dvirial, + const std::vector& dcoord_, + const std::vector& datype_, + const std::vector& dbox, + const std::vector& fparam, + const std::vector& aparam); + +template void DeepPot::compute(std::vector& dener, + std::vector& dforce_, + std::vector& dvirial, + const std::vector& dcoord_, + const std::vector& datype_, + const std::vector& dbox, + const std::vector& fparam, + const std::vector& aparam); + +template +void DeepPot::compute(ENERGYTYPE& dener, + std::vector& dforce_, + std::vector& dvirial, + const std::vector& dcoord_, + const std::vector& datype_, + const std::vector& dbox, + const int nghost, + const InputNlist& lmp_list, + const int& ago, + const std::vector& fparam_, + const std::vector& aparam__) { + std::vector dener_; + std::vector datom_energy_, datom_virial_; + dp->computew(dener_, dforce_, dvirial, datom_energy_, datom_virial_, dcoord_, + datype_, dbox, nghost, lmp_list, ago, fparam_, aparam__); + dener = dener_[0]; +} - template - void DeepPot::compute( - std::vector & dener, std::vector & dforce_, - std::vector & dvirial, const std::vector& dcoord_, - const std::vector& datype_, const std::vector& dbox, - const int nghost, const InputNlist& lmp_list, const int& ago, - const std::vector& fparam_, - const std::vector& aparam__) { - std::vector datom_energy_, datom_virial_; - dp->computew(dener, dforce_, dvirial, datom_energy_, datom_virial_, dcoord_, - datype_, dbox, nghost, lmp_list, ago, fparam_, aparam__); - } +template +void DeepPot::compute(std::vector& dener, + std::vector& dforce_, + std::vector& dvirial, + const std::vector& dcoord_, + const std::vector& datype_, + const std::vector& dbox, + const int nghost, + const InputNlist& lmp_list, + const int& ago, + const std::vector& fparam_, + const std::vector& aparam__) { + std::vector datom_energy_, datom_virial_; + dp->computew(dener, dforce_, dvirial, datom_energy_, datom_virial_, dcoord_, + datype_, dbox, nghost, lmp_list, ago, fparam_, aparam__); +} - template void DeepPot::compute( - ENERGYTYPE & dener, std::vector & dforce_, - std::vector & dvirial, const std::vector& dcoord_, - const std::vector& datype_, const std::vector& dbox, - const int nghost, const InputNlist& lmp_list, const int& ago, - const std::vector& fparam, const std::vector& aparam_); - - template void DeepPot::compute( - ENERGYTYPE & dener, std::vector & dforce_, - std::vector & dvirial, const std::vector& dcoord_, - const std::vector& datype_, const std::vector& dbox, - const int nghost, const InputNlist& lmp_list, const int& ago, - const std::vector& fparam, const std::vector& aparam_); - - template void DeepPot::compute( - std::vector & dener, std::vector & dforce_, - std::vector & dvirial, const std::vector& dcoord_, - const std::vector& datype_, const std::vector& dbox, - const int nghost, const InputNlist& lmp_list, const int& ago, - const std::vector& fparam, const std::vector& aparam_); - - template void DeepPot::compute( - std::vector & dener, std::vector & dforce_, - std::vector & dvirial, const std::vector& dcoord_, - const std::vector& datype_, const std::vector& dbox, - const int nghost, const InputNlist& lmp_list, const int& ago, - const std::vector& fparam, const std::vector& aparam_); - - template - void DeepPot::compute( - ENERGYTYPE & dener, std::vector & dforce_, - std::vector & dvirial, std::vector & datom_energy_, - std::vector & datom_virial_, - const std::vector& dcoord_, const std::vector& datype_, - const std::vector& dbox, const std::vector& fparam_, - const std::vector& aparam_) { - std::vector dener_; - dp->computew(dener_, dforce_, dvirial, datom_energy_, datom_virial_, - dcoord_, datype_, dbox, fparam_, aparam_); - dener = dener_[0]; - } - template - void DeepPot::compute( - std::vector & dener, std::vector & dforce_, - std::vector & dvirial, std::vector & datom_energy_, - std::vector & datom_virial_, - const std::vector& dcoord_, const std::vector& datype_, - const std::vector& dbox, const std::vector& fparam_, - const std::vector& aparam_) { - dp->computew(dener, dforce_, dvirial, datom_energy_, datom_virial_, dcoord_, - datype_, dbox, fparam_, aparam_); - } +template void DeepPot::compute(ENERGYTYPE& dener, + std::vector& dforce_, + std::vector& dvirial, + const std::vector& dcoord_, + const std::vector& datype_, + const std::vector& dbox, + const int nghost, + const InputNlist& lmp_list, + const int& ago, + const std::vector& fparam, + const std::vector& aparam_); + +template void DeepPot::compute(ENERGYTYPE& dener, + std::vector& dforce_, + std::vector& dvirial, + const std::vector& dcoord_, + const std::vector& datype_, + const std::vector& dbox, + const int nghost, + const InputNlist& lmp_list, + const int& ago, + const std::vector& fparam, + const std::vector& aparam_); + +template void DeepPot::compute(std::vector& dener, + std::vector& dforce_, + std::vector& dvirial, + const std::vector& dcoord_, + const std::vector& datype_, + const std::vector& dbox, + const int nghost, + const InputNlist& lmp_list, + const int& ago, + const std::vector& fparam, + const std::vector& aparam_); + +template void DeepPot::compute(std::vector& dener, + std::vector& dforce_, + std::vector& dvirial, + const std::vector& dcoord_, + const std::vector& datype_, + const std::vector& dbox, + const int nghost, + const InputNlist& lmp_list, + const int& ago, + const std::vector& fparam, + const std::vector& aparam_); + +template +void DeepPot::compute(ENERGYTYPE& dener, + std::vector& dforce_, + std::vector& dvirial, + std::vector& datom_energy_, + std::vector& datom_virial_, + const std::vector& dcoord_, + const std::vector& datype_, + const std::vector& dbox, + const std::vector& fparam_, + const std::vector& aparam_) { + std::vector dener_; + dp->computew(dener_, dforce_, dvirial, datom_energy_, datom_virial_, dcoord_, + datype_, dbox, fparam_, aparam_); + dener = dener_[0]; +} +template +void DeepPot::compute(std::vector& dener, + std::vector& dforce_, + std::vector& dvirial, + std::vector& datom_energy_, + std::vector& datom_virial_, + const std::vector& dcoord_, + const std::vector& datype_, + const std::vector& dbox, + const std::vector& fparam_, + const std::vector& aparam_) { + dp->computew(dener, dforce_, dvirial, datom_energy_, datom_virial_, dcoord_, + datype_, dbox, fparam_, aparam_); +} - template void DeepPot::compute( - ENERGYTYPE & dener, std::vector & dforce_, - std::vector & dvirial, std::vector & datom_energy_, - std::vector & datom_virial_, const std::vector& dcoord_, - const std::vector& datype_, const std::vector& dbox, - const std::vector& fparam, const std::vector& aparam); - - template void DeepPot::compute( - ENERGYTYPE & dener, std::vector & dforce_, - std::vector & dvirial, std::vector & datom_energy_, - std::vector & datom_virial_, const std::vector& dcoord_, - const std::vector& datype_, const std::vector& dbox, - const std::vector& fparam, const std::vector& aparam); - - template void DeepPot::compute( - std::vector & dener, std::vector & dforce_, - std::vector & dvirial, std::vector & datom_energy_, - std::vector & datom_virial_, const std::vector& dcoord_, - const std::vector& datype_, const std::vector& dbox, - const std::vector& fparam, const std::vector& aparam); - - template void DeepPot::compute( - std::vector & dener, std::vector & dforce_, - std::vector & dvirial, std::vector & datom_energy_, - std::vector & datom_virial_, const std::vector& dcoord_, - const std::vector& datype_, const std::vector& dbox, - const std::vector& fparam, const std::vector& aparam); - - template - void DeepPot::compute( - ENERGYTYPE & dener, std::vector & dforce_, - std::vector & dvirial, std::vector & datom_energy_, - std::vector & datom_virial_, - const std::vector& dcoord_, const std::vector& datype_, - const std::vector& dbox, const int nghost, - const InputNlist& lmp_list, const int& ago, - const std::vector& fparam_, - const std::vector& aparam__) { - std::vector dener_; - dp->computew(dener_, dforce_, dvirial, datom_energy_, datom_virial_, - dcoord_, datype_, dbox, nghost, lmp_list, ago, fparam_, - aparam__); - dener = dener_[0]; - } - template - void DeepPot::compute( - std::vector & dener, std::vector & dforce_, - std::vector & dvirial, std::vector & datom_energy_, - std::vector & datom_virial_, - const std::vector& dcoord_, const std::vector& datype_, - const std::vector& dbox, const int nghost, - const InputNlist& lmp_list, const int& ago, - const std::vector& fparam_, - const std::vector& aparam__) { - dp->computew(dener, dforce_, dvirial, datom_energy_, datom_virial_, dcoord_, - datype_, dbox, nghost, lmp_list, ago, fparam_, aparam__); - } +template void DeepPot::compute(ENERGYTYPE& dener, + std::vector& dforce_, + std::vector& dvirial, + std::vector& datom_energy_, + std::vector& datom_virial_, + const std::vector& dcoord_, + const std::vector& datype_, + const std::vector& dbox, + const std::vector& fparam, + const std::vector& aparam); + +template void DeepPot::compute(ENERGYTYPE& dener, + std::vector& dforce_, + std::vector& dvirial, + std::vector& datom_energy_, + std::vector& datom_virial_, + const std::vector& dcoord_, + const std::vector& datype_, + const std::vector& dbox, + const std::vector& fparam, + const std::vector& aparam); + +template void DeepPot::compute(std::vector& dener, + std::vector& dforce_, + std::vector& dvirial, + std::vector& datom_energy_, + std::vector& datom_virial_, + const std::vector& dcoord_, + const std::vector& datype_, + const std::vector& dbox, + const std::vector& fparam, + const std::vector& aparam); + +template void DeepPot::compute(std::vector& dener, + std::vector& dforce_, + std::vector& dvirial, + std::vector& datom_energy_, + std::vector& datom_virial_, + const std::vector& dcoord_, + const std::vector& datype_, + const std::vector& dbox, + const std::vector& fparam, + const std::vector& aparam); + +template +void DeepPot::compute(ENERGYTYPE& dener, + std::vector& dforce_, + std::vector& dvirial, + std::vector& datom_energy_, + std::vector& datom_virial_, + const std::vector& dcoord_, + const std::vector& datype_, + const std::vector& dbox, + const int nghost, + const InputNlist& lmp_list, + const int& ago, + const std::vector& fparam_, + const std::vector& aparam__) { + std::vector dener_; + dp->computew(dener_, dforce_, dvirial, datom_energy_, datom_virial_, dcoord_, + datype_, dbox, nghost, lmp_list, ago, fparam_, aparam__); + dener = dener_[0]; +} +template +void DeepPot::compute(std::vector& dener, + std::vector& dforce_, + std::vector& dvirial, + std::vector& datom_energy_, + std::vector& datom_virial_, + const std::vector& dcoord_, + const std::vector& datype_, + const std::vector& dbox, + const int nghost, + const InputNlist& lmp_list, + const int& ago, + const std::vector& fparam_, + const std::vector& aparam__) { + dp->computew(dener, dforce_, dvirial, datom_energy_, datom_virial_, dcoord_, + datype_, dbox, nghost, lmp_list, ago, fparam_, aparam__); +} - template void DeepPot::compute( - ENERGYTYPE & dener, std::vector & dforce_, - std::vector & dvirial, std::vector & datom_energy_, - std::vector & datom_virial_, const std::vector& dcoord_, - const std::vector& datype_, const std::vector& dbox, - const int nghost, const InputNlist& lmp_list, const int& ago, - const std::vector& fparam, const std::vector& aparam_); - - template void DeepPot::compute( - ENERGYTYPE & dener, std::vector & dforce_, - std::vector & dvirial, std::vector & datom_energy_, - std::vector & datom_virial_, const std::vector& dcoord_, - const std::vector& datype_, const std::vector& dbox, - const int nghost, const InputNlist& lmp_list, const int& ago, - const std::vector& fparam, const std::vector& aparam_); - - template void DeepPot::compute( - std::vector & dener, std::vector & dforce_, - std::vector & dvirial, std::vector & datom_energy_, - std::vector & datom_virial_, const std::vector& dcoord_, - const std::vector& datype_, const std::vector& dbox, - const int nghost, const InputNlist& lmp_list, const int& ago, - const std::vector& fparam, const std::vector& aparam_); - - template void DeepPot::compute( - std::vector & dener, std::vector & dforce_, - std::vector & dvirial, std::vector & datom_energy_, - std::vector & datom_virial_, const std::vector& dcoord_, - const std::vector& datype_, const std::vector& dbox, - const int nghost, const InputNlist& lmp_list, const int& ago, - const std::vector& fparam, const std::vector& aparam_); - - // mixed type - template - void DeepPot::compute_mixed_type( - ENERGYTYPE & dener, std::vector & dforce_, - std::vector & dvirial, const int& nframes, - const std::vector& dcoord_, const std::vector& datype_, - const std::vector& dbox, const std::vector& fparam_, - const std::vector& aparam_) { - std::vector dener_; - std::vector datom_energy_, datom_virial_; - dp->computew_mixed_type(dener_, dforce_, dvirial, datom_energy_, - datom_virial_, nframes, dcoord_, datype_, dbox, - fparam_, aparam_); - dener = dener_[0]; - } - template - void DeepPot::compute_mixed_type( - std::vector & dener, std::vector & dforce_, - std::vector & dvirial, const int& nframes, - const std::vector& dcoord_, const std::vector& datype_, - const std::vector& dbox, const std::vector& fparam_, - const std::vector& aparam_) { - std::vector datom_energy_, datom_virial_; - dp->computew_mixed_type(dener, dforce_, dvirial, datom_energy_, - datom_virial_, nframes, dcoord_, datype_, dbox, - fparam_, aparam_); - } +template void DeepPot::compute(ENERGYTYPE& dener, + std::vector& dforce_, + std::vector& dvirial, + std::vector& datom_energy_, + std::vector& datom_virial_, + const std::vector& dcoord_, + const std::vector& datype_, + const std::vector& dbox, + const int nghost, + const InputNlist& lmp_list, + const int& ago, + const std::vector& fparam, + const std::vector& aparam_); + +template void DeepPot::compute(ENERGYTYPE& dener, + std::vector& dforce_, + std::vector& dvirial, + std::vector& datom_energy_, + std::vector& datom_virial_, + const std::vector& dcoord_, + const std::vector& datype_, + const std::vector& dbox, + const int nghost, + const InputNlist& lmp_list, + const int& ago, + const std::vector& fparam, + const std::vector& aparam_); + +template void DeepPot::compute(std::vector& dener, + std::vector& dforce_, + std::vector& dvirial, + std::vector& datom_energy_, + std::vector& datom_virial_, + const std::vector& dcoord_, + const std::vector& datype_, + const std::vector& dbox, + const int nghost, + const InputNlist& lmp_list, + const int& ago, + const std::vector& fparam, + const std::vector& aparam_); + +template void DeepPot::compute(std::vector& dener, + std::vector& dforce_, + std::vector& dvirial, + std::vector& datom_energy_, + std::vector& datom_virial_, + const std::vector& dcoord_, + const std::vector& datype_, + const std::vector& dbox, + const int nghost, + const InputNlist& lmp_list, + const int& ago, + const std::vector& fparam, + const std::vector& aparam_); + +// mixed type +template +void DeepPot::compute_mixed_type(ENERGYTYPE& dener, + std::vector& dforce_, + std::vector& dvirial, + const int& nframes, + const std::vector& dcoord_, + const std::vector& datype_, + const std::vector& dbox, + const std::vector& fparam_, + const std::vector& aparam_) { + std::vector dener_; + std::vector datom_energy_, datom_virial_; + dp->computew_mixed_type(dener_, dforce_, dvirial, datom_energy_, + datom_virial_, nframes, dcoord_, datype_, dbox, + fparam_, aparam_); + dener = dener_[0]; +} +template +void DeepPot::compute_mixed_type(std::vector& dener, + std::vector& dforce_, + std::vector& dvirial, + const int& nframes, + const std::vector& dcoord_, + const std::vector& datype_, + const std::vector& dbox, + const std::vector& fparam_, + const std::vector& aparam_) { + std::vector datom_energy_, datom_virial_; + dp->computew_mixed_type(dener, dforce_, dvirial, datom_energy_, datom_virial_, + nframes, dcoord_, datype_, dbox, fparam_, aparam_); +} - template void DeepPot::compute_mixed_type( - ENERGYTYPE & dener, std::vector & dforce_, - std::vector & dvirial, const int& nframes, - const std::vector& dcoord_, const std::vector& datype_, - const std::vector& dbox, const std::vector& fparam, - const std::vector& aparam); - - template void DeepPot::compute_mixed_type( - ENERGYTYPE & dener, std::vector & dforce_, - std::vector & dvirial, const int& nframes, - const std::vector& dcoord_, const std::vector& datype_, - const std::vector& dbox, const std::vector& fparam, - const std::vector& aparam); - - template void DeepPot::compute_mixed_type( - std::vector & dener, std::vector & dforce_, - std::vector & dvirial, const int& nframes, - const std::vector& dcoord_, const std::vector& datype_, - const std::vector& dbox, const std::vector& fparam, - const std::vector& aparam); - - template void DeepPot::compute_mixed_type( - std::vector & dener, std::vector & dforce_, - std::vector & dvirial, const int& nframes, - const std::vector& dcoord_, const std::vector& datype_, - const std::vector& dbox, const std::vector& fparam, - const std::vector& aparam); - - template - void DeepPot::compute_mixed_type( - ENERGYTYPE & dener, std::vector & dforce_, - std::vector & dvirial, std::vector & datom_energy_, - std::vector & datom_virial_, const int& nframes, - const std::vector& dcoord_, const std::vector& datype_, - const std::vector& dbox, const std::vector& fparam_, - const std::vector& aparam_) { - std::vector dener_; - dp->computew_mixed_type(dener_, dforce_, dvirial, datom_energy_, - datom_virial_, nframes, dcoord_, datype_, dbox, - fparam_, aparam_); - dener = dener_[0]; - } - template - void DeepPot::compute_mixed_type( - std::vector & dener, std::vector & dforce_, - std::vector & dvirial, std::vector & datom_energy_, - std::vector & datom_virial_, const int& nframes, - const std::vector& dcoord_, const std::vector& datype_, - const std::vector& dbox, const std::vector& fparam_, - const std::vector& aparam_) { - dp->computew_mixed_type(dener, dforce_, dvirial, datom_energy_, - datom_virial_, nframes, dcoord_, datype_, dbox, - fparam_, aparam_); - } +template void DeepPot::compute_mixed_type( + ENERGYTYPE& dener, + std::vector& dforce_, + std::vector& dvirial, + const int& nframes, + const std::vector& dcoord_, + const std::vector& datype_, + const std::vector& dbox, + const std::vector& fparam, + const std::vector& aparam); + +template void DeepPot::compute_mixed_type( + ENERGYTYPE& dener, + std::vector& dforce_, + std::vector& dvirial, + const int& nframes, + const std::vector& dcoord_, + const std::vector& datype_, + const std::vector& dbox, + const std::vector& fparam, + const std::vector& aparam); + +template void DeepPot::compute_mixed_type( + std::vector& dener, + std::vector& dforce_, + std::vector& dvirial, + const int& nframes, + const std::vector& dcoord_, + const std::vector& datype_, + const std::vector& dbox, + const std::vector& fparam, + const std::vector& aparam); + +template void DeepPot::compute_mixed_type( + std::vector& dener, + std::vector& dforce_, + std::vector& dvirial, + const int& nframes, + const std::vector& dcoord_, + const std::vector& datype_, + const std::vector& dbox, + const std::vector& fparam, + const std::vector& aparam); + +template +void DeepPot::compute_mixed_type(ENERGYTYPE& dener, + std::vector& dforce_, + std::vector& dvirial, + std::vector& datom_energy_, + std::vector& datom_virial_, + const int& nframes, + const std::vector& dcoord_, + const std::vector& datype_, + const std::vector& dbox, + const std::vector& fparam_, + const std::vector& aparam_) { + std::vector dener_; + dp->computew_mixed_type(dener_, dforce_, dvirial, datom_energy_, + datom_virial_, nframes, dcoord_, datype_, dbox, + fparam_, aparam_); + dener = dener_[0]; +} +template +void DeepPot::compute_mixed_type(std::vector& dener, + std::vector& dforce_, + std::vector& dvirial, + std::vector& datom_energy_, + std::vector& datom_virial_, + const int& nframes, + const std::vector& dcoord_, + const std::vector& datype_, + const std::vector& dbox, + const std::vector& fparam_, + const std::vector& aparam_) { + dp->computew_mixed_type(dener, dforce_, dvirial, datom_energy_, datom_virial_, + nframes, dcoord_, datype_, dbox, fparam_, aparam_); +} - template void DeepPot::compute_mixed_type( - ENERGYTYPE & dener, std::vector & dforce_, - std::vector & dvirial, std::vector & datom_energy_, - std::vector & datom_virial_, const int& nframes, - const std::vector& dcoord_, const std::vector& datype_, - const std::vector& dbox, const std::vector& fparam, - const std::vector& aparam); - - template void DeepPot::compute_mixed_type( - ENERGYTYPE & dener, std::vector & dforce_, - std::vector & dvirial, std::vector & datom_energy_, - std::vector & datom_virial_, const int& nframes, - const std::vector& dcoord_, const std::vector& datype_, - const std::vector& dbox, const std::vector& fparam, - const std::vector& aparam); - - template void DeepPot::compute_mixed_type( - std::vector & dener, std::vector & dforce_, - std::vector & dvirial, std::vector & datom_energy_, - std::vector & datom_virial_, const int& nframes, - const std::vector& dcoord_, const std::vector& datype_, - const std::vector& dbox, const std::vector& fparam, - const std::vector& aparam); - - template void DeepPot::compute_mixed_type( - std::vector & dener, std::vector & dforce_, - std::vector & dvirial, std::vector & datom_energy_, - std::vector & datom_virial_, const int& nframes, - const std::vector& dcoord_, const std::vector& datype_, - const std::vector& dbox, const std::vector& fparam, - const std::vector& aparam); - - double DeepPot::cutoff() const { return dp->cutoff(); } - - int DeepPot::numb_types() const { return dp->numb_types(); } - - int DeepPot::numb_types_spin() const { return dp->numb_types_spin(); } - - int DeepPot::dim_fparam() const { return dp->dim_fparam(); } - - int DeepPot::dim_aparam() const { return dp->dim_aparam(); } - - void DeepPot::get_type_map(std::string & type_map) { - dp->get_type_map(type_map); - } +template void DeepPot::compute_mixed_type( + ENERGYTYPE& dener, + std::vector& dforce_, + std::vector& dvirial, + std::vector& datom_energy_, + std::vector& datom_virial_, + const int& nframes, + const std::vector& dcoord_, + const std::vector& datype_, + const std::vector& dbox, + const std::vector& fparam, + const std::vector& aparam); + +template void DeepPot::compute_mixed_type( + ENERGYTYPE& dener, + std::vector& dforce_, + std::vector& dvirial, + std::vector& datom_energy_, + std::vector& datom_virial_, + const int& nframes, + const std::vector& dcoord_, + const std::vector& datype_, + const std::vector& dbox, + const std::vector& fparam, + const std::vector& aparam); + +template void DeepPot::compute_mixed_type( + std::vector& dener, + std::vector& dforce_, + std::vector& dvirial, + std::vector& datom_energy_, + std::vector& datom_virial_, + const int& nframes, + const std::vector& dcoord_, + const std::vector& datype_, + const std::vector& dbox, + const std::vector& fparam, + const std::vector& aparam); + +template void DeepPot::compute_mixed_type( + std::vector& dener, + std::vector& dforce_, + std::vector& dvirial, + std::vector& datom_energy_, + std::vector& datom_virial_, + const int& nframes, + const std::vector& dcoord_, + const std::vector& datype_, + const std::vector& dbox, + const std::vector& fparam, + const std::vector& aparam); + +double DeepPot::cutoff() const { return dp->cutoff(); } + +int DeepPot::numb_types() const { return dp->numb_types(); } + +int DeepPot::numb_types_spin() const { return dp->numb_types_spin(); } + +int DeepPot::dim_fparam() const { return dp->dim_fparam(); } + +int DeepPot::dim_aparam() const { return dp->dim_aparam(); } + +void DeepPot::get_type_map(std::string& type_map) { + dp->get_type_map(type_map); +} - bool DeepPot::is_aparam_nall() const { return dp->is_aparam_nall(); } +bool DeepPot::is_aparam_nall() const { return dp->is_aparam_nall(); } - DeepPotModelDevi::DeepPotModelDevi() : inited(false), numb_models(0) {} +DeepPotModelDevi::DeepPotModelDevi() : inited(false), numb_models(0) {} - DeepPotModelDevi::DeepPotModelDevi( - const std::vector& models, const int& gpu_rank, - const std::vector& file_contents) - : inited(false), numb_models(0) { - init(models, gpu_rank, file_contents); - } +DeepPotModelDevi::DeepPotModelDevi( + const std::vector& models, + const int& gpu_rank, + const std::vector& file_contents) + : inited(false), numb_models(0) { + init(models, gpu_rank, file_contents); +} - DeepPotModelDevi::~DeepPotModelDevi() {} +DeepPotModelDevi::~DeepPotModelDevi() {} - void DeepPotModelDevi::init(const std::vector& models, - const int& gpu_rank, - const std::vector& file_contents) { - if (inited) { - std::cerr << "WARNING: deepmd-kit should not be initialized twice, do " - "nothing at the second call of initializer" - << std::endl; - return; - } - numb_models = models.size(); - if (numb_models == 0) { - throw deepmd::deepmd_exception("no model is specified"); - } - dps.resize(numb_models); - for (unsigned int ii = 0; ii < numb_models; ++ii) { - dps[ii].init(models[ii], gpu_rank, - file_contents.size() > ii ? file_contents[ii] : ""); - } - inited = true; +void DeepPotModelDevi::init(const std::vector& models, + const int& gpu_rank, + const std::vector& file_contents) { + if (inited) { + std::cerr << "WARNING: deepmd-kit should not be initialized twice, do " + "nothing at the second call of initializer" + << std::endl; + return; } - - template - void DeepPotModelDevi::compute( - std::vector & all_energy, - std::vector> & all_force, - std::vector> & all_virial, - const std::vector& dcoord_, const std::vector& datype_, - const std::vector& dbox, const int nghost, - const InputNlist& lmp_list, const int& ago, - const std::vector& fparam, - const std::vector& aparam_) { - if (numb_models == 0) { - return; - } - all_energy.resize(numb_models); - all_force.resize(numb_models); - all_virial.resize(numb_models); - for (unsigned ii = 0; ii < numb_models; ++ii) { - dps[ii].compute(all_energy[ii], all_force[ii], all_virial[ii], dcoord_, - datype_, dbox, nghost, lmp_list, ago, fparam, aparam_); - } + numb_models = models.size(); + if (numb_models == 0) { + throw deepmd::deepmd_exception("no model is specified"); } + dps.resize(numb_models); + for (unsigned int ii = 0; ii < numb_models; ++ii) { + dps[ii].init(models[ii], gpu_rank, + file_contents.size() > ii ? file_contents[ii] : ""); + } + inited = true; +} - template void DeepPotModelDevi::compute( - std::vector & all_energy, - std::vector> & all_force, - std::vector> & all_virial, - const std::vector& dcoord_, const std::vector& datype_, - const std::vector& dbox, const int nghost, - const InputNlist& lmp_list, const int& ago, - const std::vector& fparam, const std::vector& aparam); - - template void DeepPotModelDevi::compute( - std::vector & all_energy, - std::vector> & all_force, - std::vector> & all_virial, - const std::vector& dcoord_, const std::vector& datype_, - const std::vector& dbox, const int nghost, - const InputNlist& lmp_list, const int& ago, - const std::vector& fparam, const std::vector& aparam); - - template - void DeepPotModelDevi::compute( - std::vector & all_energy, - std::vector> & all_force, - std::vector> & all_virial, - std::vector> & all_atom_energy, - std::vector> & all_atom_virial, - const std::vector& dcoord_, const std::vector& datype_, - const std::vector& dbox, const int nghost, - const InputNlist& lmp_list, const int& ago, - const std::vector& fparam, - const std::vector& aparam_) { - if (numb_models == 0) { - return; - } - all_energy.resize(numb_models); - all_force.resize(numb_models); - all_virial.resize(numb_models); - all_atom_energy.resize(numb_models); - all_atom_virial.resize(numb_models); - for (unsigned ii = 0; ii < numb_models; ++ii) { - dps[ii].compute(all_energy[ii], all_force[ii], all_virial[ii], - all_atom_energy[ii], all_atom_virial[ii], dcoord_, - datype_, dbox, nghost, lmp_list, ago, fparam, aparam_); - } +template +void DeepPotModelDevi::compute(std::vector& all_energy, + std::vector>& all_force, + std::vector>& all_virial, + const std::vector& dcoord_, + const std::vector& datype_, + const std::vector& dbox, + const int nghost, + const InputNlist& lmp_list, + const int& ago, + const std::vector& fparam, + const std::vector& aparam_) { + if (numb_models == 0) { + return; + } + all_energy.resize(numb_models); + all_force.resize(numb_models); + all_virial.resize(numb_models); + for (unsigned ii = 0; ii < numb_models; ++ii) { + dps[ii].compute(all_energy[ii], all_force[ii], all_virial[ii], dcoord_, + datype_, dbox, nghost, lmp_list, ago, fparam, aparam_); } +} - template void DeepPotModelDevi::compute( - std::vector & all_energy, - std::vector> & all_force, - std::vector> & all_virial, - std::vector> & all_atom_energy, - std::vector> & all_atom_virial, - const std::vector& dcoord_, const std::vector& datype_, - const std::vector& dbox, const int nghost, - const InputNlist& lmp_list, const int& ago, - const std::vector& fparam, const std::vector& aparam); - - template void DeepPotModelDevi::compute( - std::vector & all_energy, - std::vector> & all_force, - std::vector> & all_virial, - std::vector> & all_atom_energy, - std::vector> & all_atom_virial, - const std::vector& dcoord_, const std::vector& datype_, - const std::vector& dbox, const int nghost, - const InputNlist& lmp_list, const int& ago, - const std::vector& fparam, const std::vector& aparam); - - template - void DeepPotModelDevi::compute_avg(VALUETYPE & dener, - const std::vector& all_energy) { - assert(all_energy.size() == numb_models); - if (numb_models == 0) { - return; - } +template void DeepPotModelDevi::compute( + std::vector& all_energy, + std::vector>& all_force, + std::vector>& all_virial, + const std::vector& dcoord_, + const std::vector& datype_, + const std::vector& dbox, + const int nghost, + const InputNlist& lmp_list, + const int& ago, + const std::vector& fparam, + const std::vector& aparam); + +template void DeepPotModelDevi::compute( + std::vector& all_energy, + std::vector>& all_force, + std::vector>& all_virial, + const std::vector& dcoord_, + const std::vector& datype_, + const std::vector& dbox, + const int nghost, + const InputNlist& lmp_list, + const int& ago, + const std::vector& fparam, + const std::vector& aparam); + +template +void DeepPotModelDevi::compute( + std::vector& all_energy, + std::vector>& all_force, + std::vector>& all_virial, + std::vector>& all_atom_energy, + std::vector>& all_atom_virial, + const std::vector& dcoord_, + const std::vector& datype_, + const std::vector& dbox, + const int nghost, + const InputNlist& lmp_list, + const int& ago, + const std::vector& fparam, + const std::vector& aparam_) { + if (numb_models == 0) { + return; + } + all_energy.resize(numb_models); + all_force.resize(numb_models); + all_virial.resize(numb_models); + all_atom_energy.resize(numb_models); + all_atom_virial.resize(numb_models); + for (unsigned ii = 0; ii < numb_models; ++ii) { + dps[ii].compute(all_energy[ii], all_force[ii], all_virial[ii], + all_atom_energy[ii], all_atom_virial[ii], dcoord_, datype_, + dbox, nghost, lmp_list, ago, fparam, aparam_); + } +} - dener = 0; - for (unsigned ii = 0; ii < numb_models; ++ii) { - dener += all_energy[ii]; - } - dener /= (VALUETYPE)(numb_models); +template void DeepPotModelDevi::compute( + std::vector& all_energy, + std::vector>& all_force, + std::vector>& all_virial, + std::vector>& all_atom_energy, + std::vector>& all_atom_virial, + const std::vector& dcoord_, + const std::vector& datype_, + const std::vector& dbox, + const int nghost, + const InputNlist& lmp_list, + const int& ago, + const std::vector& fparam, + const std::vector& aparam); + +template void DeepPotModelDevi::compute( + std::vector& all_energy, + std::vector>& all_force, + std::vector>& all_virial, + std::vector>& all_atom_energy, + std::vector>& all_atom_virial, + const std::vector& dcoord_, + const std::vector& datype_, + const std::vector& dbox, + const int nghost, + const InputNlist& lmp_list, + const int& ago, + const std::vector& fparam, + const std::vector& aparam); + +template +void DeepPotModelDevi::compute_avg(VALUETYPE& dener, + const std::vector& all_energy) { + assert(all_energy.size() == numb_models); + if (numb_models == 0) { + return; } - template void DeepPotModelDevi::compute_avg( - double& dener, const std::vector& all_energy); + dener = 0; + for (unsigned ii = 0; ii < numb_models; ++ii) { + dener += all_energy[ii]; + } + dener /= (VALUETYPE)(numb_models); +} - template void DeepPotModelDevi::compute_avg( - float& dener, const std::vector& all_energy); +template void DeepPotModelDevi::compute_avg( + double& dener, const std::vector& all_energy); - template - void DeepPotModelDevi::compute_avg( - std::vector & avg, - const std::vector>& xx) { - assert(xx.size() == numb_models); - if (numb_models == 0) { - return; - } +template void DeepPotModelDevi::compute_avg( + float& dener, const std::vector& all_energy); - avg.resize(xx[0].size()); - fill(avg.begin(), avg.end(), VALUETYPE(0.)); +template +void DeepPotModelDevi::compute_avg( + std::vector& avg, + const std::vector>& xx) { + assert(xx.size() == numb_models); + if (numb_models == 0) { + return; + } - for (unsigned ii = 0; ii < numb_models; ++ii) { - for (unsigned jj = 0; jj < avg.size(); ++jj) { - avg[jj] += xx[ii][jj]; - } - } + avg.resize(xx[0].size()); + fill(avg.begin(), avg.end(), VALUETYPE(0.)); + for (unsigned ii = 0; ii < numb_models; ++ii) { for (unsigned jj = 0; jj < avg.size(); ++jj) { - avg[jj] /= VALUETYPE(numb_models); + avg[jj] += xx[ii][jj]; } } - template void DeepPotModelDevi::compute_avg( - std::vector & avg, const std::vector>& xx); - - template void DeepPotModelDevi::compute_avg( - std::vector & avg, const std::vector>& xx); - - template - void DeepPotModelDevi::compute_std( - std::vector & std, const std::vector& avg, - const std::vector>& xx, const int& stride) { - assert(xx.size() == numb_models); - if (numb_models == 0) { - return; - } - - unsigned ndof = avg.size(); - unsigned nloc = ndof / stride; - assert(nloc * stride == ndof); - - std.resize(nloc); - fill(std.begin(), std.end(), VALUETYPE(0.)); - - for (unsigned ii = 0; ii < numb_models; ++ii) { - for (unsigned jj = 0; jj < nloc; ++jj) { - const VALUETYPE* tmp_f = &(xx[ii][static_cast(jj) * stride]); - const VALUETYPE* tmp_avg = &(avg[static_cast(jj) * stride]); - for (unsigned dd = 0; dd < stride; ++dd) { - VALUETYPE vdiff = tmp_f[dd] - tmp_avg[dd]; - std[jj] += vdiff * vdiff; - } - } - } - - for (unsigned jj = 0; jj < nloc; ++jj) { - std[jj] = sqrt(std[jj] / VALUETYPE(numb_models)); - } + for (unsigned jj = 0; jj < avg.size(); ++jj) { + avg[jj] /= VALUETYPE(numb_models); } +} - template void DeepPotModelDevi::compute_std( - std::vector & std, const std::vector& avg, - const std::vector>& xx, const int& stride); +template void DeepPotModelDevi::compute_avg( + std::vector& avg, const std::vector>& xx); - template void DeepPotModelDevi::compute_std( - std::vector & std, const std::vector& avg, - const std::vector>& xx, const int& stride); +template void DeepPotModelDevi::compute_avg( + std::vector& avg, const std::vector>& xx); - template - void DeepPotModelDevi::compute_std_e( - std::vector & std, const std::vector& avg, - const std::vector>& xx) { - compute_std(std, avg, xx, 1); +template +void DeepPotModelDevi::compute_std( + std::vector& std, + const std::vector& avg, + const std::vector>& xx, + const int& stride) { + assert(xx.size() == numb_models); + if (numb_models == 0) { + return; } - template void DeepPotModelDevi::compute_std_e( - std::vector & std, const std::vector& avg, - const std::vector>& xx); - - template void DeepPotModelDevi::compute_std_e( - std::vector & std, const std::vector& avg, - const std::vector>& xx); + unsigned ndof = avg.size(); + unsigned nloc = ndof / stride; + assert(nloc * stride == ndof); - template - void DeepPotModelDevi::compute_std_f( - std::vector & std, const std::vector& avg, - const std::vector>& xx) { - compute_std(std, avg, xx, 3); - } + std.resize(nloc); + fill(std.begin(), std.end(), VALUETYPE(0.)); - template void DeepPotModelDevi::compute_std_f( - std::vector & std, const std::vector& avg, - const std::vector>& xx); - - template void DeepPotModelDevi::compute_std_f( - std::vector & std, const std::vector& avg, - const std::vector>& xx); - - template - void DeepPotModelDevi::compute_relative_std( - std::vector & std, const std::vector& avg, - const VALUETYPE eps, const int& stride) { - unsigned ndof = avg.size(); - unsigned nloc = std.size(); - assert(nloc * stride == ndof); - - for (unsigned ii = 0; ii < nloc; ++ii) { - const VALUETYPE* tmp_avg = &(avg[static_cast(ii) * stride]); - VALUETYPE f_norm = 0.0; + for (unsigned ii = 0; ii < numb_models; ++ii) { + for (unsigned jj = 0; jj < nloc; ++jj) { + const VALUETYPE* tmp_f = &(xx[ii][static_cast(jj) * stride]); + const VALUETYPE* tmp_avg = &(avg[static_cast(jj) * stride]); for (unsigned dd = 0; dd < stride; ++dd) { - f_norm += tmp_avg[dd] * tmp_avg[dd]; + VALUETYPE vdiff = tmp_f[dd] - tmp_avg[dd]; + std[jj] += vdiff * vdiff; } - f_norm = sqrt(f_norm); - std[ii] /= f_norm + eps; } } - template void DeepPotModelDevi::compute_relative_std( - std::vector & std, const std::vector& avg, - const double eps, const int& stride); + for (unsigned jj = 0; jj < nloc; ++jj) { + std[jj] = sqrt(std[jj] / VALUETYPE(numb_models)); + } +} - template void DeepPotModelDevi::compute_relative_std( - std::vector & std, const std::vector& avg, const float eps, - const int& stride); +template void DeepPotModelDevi::compute_std( + std::vector& std, + const std::vector& avg, + const std::vector>& xx, + const int& stride); + +template void DeepPotModelDevi::compute_std( + std::vector& std, + const std::vector& avg, + const std::vector>& xx, + const int& stride); + +template +void DeepPotModelDevi::compute_std_e( + std::vector& std, + const std::vector& avg, + const std::vector>& xx) { + compute_std(std, avg, xx, 1); +} - template - void DeepPotModelDevi::compute_relative_std_f( - std::vector & std, const std::vector& avg, - const VALUETYPE eps) { - compute_relative_std(std, avg, eps, 3); +template void DeepPotModelDevi::compute_std_e( + std::vector& std, + const std::vector& avg, + const std::vector>& xx); + +template void DeepPotModelDevi::compute_std_e( + std::vector& std, + const std::vector& avg, + const std::vector>& xx); + +template +void DeepPotModelDevi::compute_std_f( + std::vector& std, + const std::vector& avg, + const std::vector>& xx) { + compute_std(std, avg, xx, 3); +} + +template void DeepPotModelDevi::compute_std_f( + std::vector& std, + const std::vector& avg, + const std::vector>& xx); + +template void DeepPotModelDevi::compute_std_f( + std::vector& std, + const std::vector& avg, + const std::vector>& xx); + +template +void DeepPotModelDevi::compute_relative_std(std::vector& std, + const std::vector& avg, + const VALUETYPE eps, + const int& stride) { + unsigned ndof = avg.size(); + unsigned nloc = std.size(); + assert(nloc * stride == ndof); + + for (unsigned ii = 0; ii < nloc; ++ii) { + const VALUETYPE* tmp_avg = &(avg[static_cast(ii) * stride]); + VALUETYPE f_norm = 0.0; + for (unsigned dd = 0; dd < stride; ++dd) { + f_norm += tmp_avg[dd] * tmp_avg[dd]; + } + f_norm = sqrt(f_norm); + std[ii] /= f_norm + eps; } +} + +template void DeepPotModelDevi::compute_relative_std( + std::vector& std, + const std::vector& avg, + const double eps, + const int& stride); + +template void DeepPotModelDevi::compute_relative_std( + std::vector& std, + const std::vector& avg, + const float eps, + const int& stride); + +template +void DeepPotModelDevi::compute_relative_std_f(std::vector& std, + const std::vector& avg, + const VALUETYPE eps) { + compute_relative_std(std, avg, eps, 3); +} - template void DeepPotModelDevi::compute_relative_std_f( - std::vector & std, const std::vector& avg, - const double eps); +template void DeepPotModelDevi::compute_relative_std_f( + std::vector& std, const std::vector& avg, const double eps); - template void DeepPotModelDevi::compute_relative_std_f( - std::vector & std, const std::vector& avg, const float eps); +template void DeepPotModelDevi::compute_relative_std_f( + std::vector& std, const std::vector& avg, const float eps); From 675031203510a036a8eb2bef7fe6f36a2f97c269 Mon Sep 17 00:00:00 2001 From: zxysbsbzxy Date: Sat, 3 Feb 2024 11:07:26 +0800 Subject: [PATCH 040/117] fix model inference interface and add cpu --- deepmd/pt/model/model/dp_atomic_model.py | 5 +++ deepmd/pt/model/model/ener.py | 3 ++ source/api_cc/include/DeepPotPT.h | 2 +- source/api_cc/src/DeepPotPT.cc | 42 ++++++++++++------------ 4 files changed, 30 insertions(+), 22 deletions(-) diff --git a/deepmd/pt/model/model/dp_atomic_model.py b/deepmd/pt/model/model/dp_atomic_model.py index b2ae48628b..7190723eb0 100644 --- a/deepmd/pt/model/model/dp_atomic_model.py +++ b/deepmd/pt/model/model/dp_atomic_model.py @@ -71,6 +71,7 @@ def __init__( self.descriptor = descriptor self.rcut = self.descriptor.get_rcut() self.sel = self.descriptor.get_sel() + self.nnei = self.descriptor.get_nsel() self.fitting_net = fitting # Statistics fitting_net = None # TODO: hack!!! not sure if it is correct. @@ -99,6 +100,10 @@ def get_rcut(self) -> float: def get_sel(self) -> List[int]: """Get the neighbor selection.""" return self.sel + + def get_nnei(self) -> List[int]: + """Get the the number of selected atoms in the cut-off radius.""" + return self.nnei def distinguish_types(self) -> bool: """If distinguish different types by sorting.""" diff --git a/deepmd/pt/model/model/ener.py b/deepmd/pt/model/model/ener.py index a408689d8d..8e90872bd2 100644 --- a/deepmd/pt/model/model/ener.py +++ b/deepmd/pt/model/model/ener.py @@ -81,6 +81,9 @@ def forward_lower( model_predict["extended_virial"] = model_ret[ "energy_derv_c" ].squeeze(-3) + model_predict["ruduced_virial"] = model_ret[ + "energy_derv_c_redu" + ].squeeze(-3) else: assert model_ret["dforce"] is not None model_predict["dforce"] = model_ret["dforce"] diff --git a/source/api_cc/include/DeepPotPT.h b/source/api_cc/include/DeepPotPT.h index 2c71982545..a3ca9d69cb 100644 --- a/source/api_cc/include/DeepPotPT.h +++ b/source/api_cc/include/DeepPotPT.h @@ -323,9 +323,9 @@ class DeepPotPT : public DeepPotBase { torch::jit::script::Module module; double rcut; NeighborListDataPT nlist_data; - // InputNlist nlist; int max_num_neighbors; int gpu_id; + bool cpu_enabled; at::Tensor firstneigh_tensor; }; diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index 3ddfc011ae..959ebe4695 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -29,19 +29,20 @@ void DeepPotPT::init(const std::string& model, << std::endl; gpu_id = gpu_rank; torch::Device device(torch::kCUDA, gpu_rank); + cpu_enabled = false; // This may be implemented as something like DPErrcheck(DPSetDevice(gpu_rank % // gpu_num)); try { module = torch::jit::load(model, device); } catch (const c10::Error& e) { - std::cerr << "Error loading the model, maybe GPU is not available\n"; + torch::Device device(torch::kCPU); + module = torch::jit::load(model, device); + cpu_enabled = true; } torch::jit::FusionStrategy strategy; strategy = {{torch::jit::FusionBehavior::DYNAMIC, 10}}; torch::jit::setFusionStrategy(strategy); - // at::globalContext().setAllowTF32CuBLAS(true); - // at::globalContext().setAllowTF32CuDNN(true); get_env_nthreads(num_intra_nthreads, num_inter_nthreads); // need to be fixed as // DP_INTRA_OP_PARALLELISM_THREADS @@ -70,21 +71,21 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, const std::vector& box, const InputNlist& lmp_list, const int& ago) { - torch::Device device(torch::kCUDA, gpu_id); + if(cpu_enabled) + torch::Device device(torch::kCPU); + else + torch::Device device(torch::kCUDA, gpu_id); std::vector coord_wrapped = coord; int natoms = atype.size(); auto options = torch::TensorOptions().dtype(torch::kFloat64); auto int_options = torch::TensorOptions().dtype(torch::kInt64); auto int32_options = torch::TensorOptions().dtype(torch::kInt32); - std::vector inputs; at::Tensor coord_wrapped_Tensor = torch::from_blob(coord_wrapped.data(), {1, natoms, 3}, options) .to(device); - inputs.push_back(coord_wrapped_Tensor); std::vector atype_64(atype.begin(), atype.end()); at::Tensor atype_Tensor = torch::from_blob(atype_64.data(), {1, natoms}, int_options).to(device); - inputs.push_back(atype_Tensor); if (ago == 0) { int64_t nnei = module.run_method("get_nnei").toInt(); nlist_data.copy_from_nlist(lmp_list, max_num_neighbors, nnei); @@ -93,7 +94,7 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, nlist_data.jlist, {lmp_list.inum, max_num_neighbors}, int32_options); at::Tensor nlist = firstneigh.to(torch::kInt64).to(device); firstneigh_tensor = - module.run_method("sort_neighbor_list", coord_wrapped_Tensor, nlist) + module.run_method("format_nlist", coord_wrapped_Tensor,atype_Tensor,nlist) .toTensor(); } else { at::Tensor firstneigh = torch::from_blob( @@ -102,21 +103,15 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, firstneigh_tensor = firstneigh.to(torch::kInt64).to(device); } } - at::Tensor box_Tensor = - torch::from_blob(const_cast(box.data()), {1, 9}, options) - .to(device); - inputs.push_back(box_Tensor); bool do_atom_virial_tensor = true; - inputs.push_back(do_atom_virial_tensor); - inputs.push_back(firstneigh_tensor); + torch::Tensor mapping_tensor = torch::Tensor(nullptr); c10::Dict outputs = - module.forward(inputs).toGenericDict(); + module.run_method("forward_lower",coord_wrapped_Tensor,atype_Tensor,firstneigh_tensor,mapping_tensor, do_atom_virial_tensor).toGenericDict(); c10::IValue energy_ = outputs.at("energy"); c10::IValue force_ = outputs.at("extended_force"); - c10::IValue virial_ = outputs.at("extended_virial"); - c10::IValue atom_virial_ = outputs.at("atomic_virial"); + c10::IValue virial_ = outputs.at("reduced_virial"); + c10::IValue atom_virial_ = outputs.at("extended_virial"); c10::IValue atom_energy_ = outputs.at("atom_energy"); - // ener = energy_.toTensor().item(); torch::Tensor flat_energy_ = energy_.toTensor().view({-1}); torch::Tensor cpu_energy_ = flat_energy_.to(torch::kCPU); ener.assign(cpu_energy_.data_ptr(), @@ -195,8 +190,10 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, const std::vector& coord, const std::vector& atype, const std::vector& box) { - auto device = torch::kCUDA; - module.to(device); + if(cpu_enabled) + torch::Device device(torch::kCPU); + else + torch::Device device(torch::kCUDA, gpu_id); std::vector coord_wrapped = coord; int natoms = atype.size(); auto options = torch::TensorOptions().dtype(torch::kFloat64); @@ -214,6 +211,10 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, torch::from_blob(const_cast(box.data()), {1, 9}, options) .to(device); inputs.push_back(box_Tensor); + torch::Tensor fparam_tensor = torch::Tensor(nullptr); + inputs.push_back(fparam_tensor); + torch::Tensor aparam_tensor = torch::Tensor(nullptr); + inputs.push_back(aparam_tensor); bool do_atom_virial_tensor = true; inputs.push_back(do_atom_virial_tensor); c10::Dict outputs = @@ -224,7 +225,6 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, c10::IValue virial_ = outputs.at("virial"); c10::IValue atom_virial_ = outputs.at("atomic_virial"); c10::IValue atom_energy_ = outputs.at("atom_energy"); - // ener = energy_.toTensor().item(); torch::Tensor flat_energy_ = energy_.toTensor().view({-1}); torch::Tensor cpu_energy_ = flat_energy_.to(torch::kCPU); ener.assign(cpu_energy_.data_ptr(), From 0a3e2086e262b166eefa3b6762be4b4928c509f8 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sat, 3 Feb 2024 03:07:52 +0000 Subject: [PATCH 041/117] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- deepmd/pt/model/model/dp_atomic_model.py | 2 +- source/api_cc/src/DeepPotPT.cc | 22 ++++++++++++++-------- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/deepmd/pt/model/model/dp_atomic_model.py b/deepmd/pt/model/model/dp_atomic_model.py index 7190723eb0..f9c47105cf 100644 --- a/deepmd/pt/model/model/dp_atomic_model.py +++ b/deepmd/pt/model/model/dp_atomic_model.py @@ -100,7 +100,7 @@ def get_rcut(self) -> float: def get_sel(self) -> List[int]: """Get the neighbor selection.""" return self.sel - + def get_nnei(self) -> List[int]: """Get the the number of selected atoms in the cut-off radius.""" return self.nnei diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index 959ebe4695..3cb8e32046 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -71,10 +71,11 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, const std::vector& box, const InputNlist& lmp_list, const int& ago) { - if(cpu_enabled) + if (cpu_enabled) { torch::Device device(torch::kCPU); - else + } else { torch::Device device(torch::kCUDA, gpu_id); + } std::vector coord_wrapped = coord; int natoms = atype.size(); auto options = torch::TensorOptions().dtype(torch::kFloat64); @@ -93,9 +94,10 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, at::Tensor firstneigh = torch::from_blob( nlist_data.jlist, {lmp_list.inum, max_num_neighbors}, int32_options); at::Tensor nlist = firstneigh.to(torch::kInt64).to(device); - firstneigh_tensor = - module.run_method("format_nlist", coord_wrapped_Tensor,atype_Tensor,nlist) - .toTensor(); + firstneigh_tensor = module + .run_method("format_nlist", coord_wrapped_Tensor, + atype_Tensor, nlist) + .toTensor(); } else { at::Tensor firstneigh = torch::from_blob( nlist_data.jlist, {1, lmp_list.inum, max_num_neighbors}, @@ -106,7 +108,10 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, bool do_atom_virial_tensor = true; torch::Tensor mapping_tensor = torch::Tensor(nullptr); c10::Dict outputs = - module.run_method("forward_lower",coord_wrapped_Tensor,atype_Tensor,firstneigh_tensor,mapping_tensor, do_atom_virial_tensor).toGenericDict(); + module + .run_method("forward_lower", coord_wrapped_Tensor, atype_Tensor, + firstneigh_tensor, mapping_tensor, do_atom_virial_tensor) + .toGenericDict(); c10::IValue energy_ = outputs.at("energy"); c10::IValue force_ = outputs.at("extended_force"); c10::IValue virial_ = outputs.at("reduced_virial"); @@ -190,10 +195,11 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, const std::vector& coord, const std::vector& atype, const std::vector& box) { - if(cpu_enabled) + if (cpu_enabled) { torch::Device device(torch::kCPU); - else + } else { torch::Device device(torch::kCUDA, gpu_id); + } std::vector coord_wrapped = coord; int natoms = atype.size(); auto options = torch::TensorOptions().dtype(torch::kFloat64); From 3de36b035fa68b9af3dc7eae2321b310633d7424 Mon Sep 17 00:00:00 2001 From: zxysbsbzxy Date: Sat, 3 Feb 2024 12:17:57 +0800 Subject: [PATCH 042/117] fix bug: device init --- source/api_cc/src/DeepPotPT.cc | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index 959ebe4695..d59b5562a9 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -71,10 +71,11 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, const std::vector& box, const InputNlist& lmp_list, const int& ago) { + torch::Device device; if(cpu_enabled) - torch::Device device(torch::kCPU); + device = torch::Device(torch::kCPU); else - torch::Device device(torch::kCUDA, gpu_id); + device = torch::Device(torch::kCUDA, gpu_id); std::vector coord_wrapped = coord; int natoms = atype.size(); auto options = torch::TensorOptions().dtype(torch::kFloat64); @@ -190,10 +191,11 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, const std::vector& coord, const std::vector& atype, const std::vector& box) { + torch::Device device; if(cpu_enabled) - torch::Device device(torch::kCPU); + device = torch::Device(torch::kCPU); else - torch::Device device(torch::kCUDA, gpu_id); + device = torch::Device(torch::kCUDA, gpu_id); std::vector coord_wrapped = coord; int natoms = atype.size(); auto options = torch::TensorOptions().dtype(torch::kFloat64); From e5d1533c5f43a284bcff24effe59dfbdfaf9207f Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sat, 3 Feb 2024 04:20:00 +0000 Subject: [PATCH 043/117] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- source/api_cc/src/DeepPotPT.cc | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index 651a12eb97..3939efedb9 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -72,10 +72,11 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, const InputNlist& lmp_list, const int& ago) { torch::Device device; - if(cpu_enabled) + if (cpu_enabled) { device = torch::Device(torch::kCPU); - else + } else { device = torch::Device(torch::kCUDA, gpu_id); + } std::vector coord_wrapped = coord; int natoms = atype.size(); auto options = torch::TensorOptions().dtype(torch::kFloat64); @@ -196,10 +197,11 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, const std::vector& atype, const std::vector& box) { torch::Device device; - if(cpu_enabled) + if (cpu_enabled) { device = torch::Device(torch::kCPU); - else + } else { device = torch::Device(torch::kCUDA, gpu_id); + } std::vector coord_wrapped = coord; int natoms = atype.size(); auto options = torch::TensorOptions().dtype(torch::kFloat64); From e61a50983f3436a21f30d9faa916dbb0d1dafe6d Mon Sep 17 00:00:00 2001 From: zxysbsbzxy Date: Sat, 3 Feb 2024 12:44:04 +0800 Subject: [PATCH 044/117] fix bug: device constructor --- source/api_cc/src/DeepPotPT.cc | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index 651a12eb97..9b642eac8b 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -71,11 +71,9 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, const std::vector& box, const InputNlist& lmp_list, const int& ago) { - torch::Device device; + torch::Device device(torch::kCUDA, gpu_id); if(cpu_enabled) device = torch::Device(torch::kCPU); - else - device = torch::Device(torch::kCUDA, gpu_id); std::vector coord_wrapped = coord; int natoms = atype.size(); auto options = torch::TensorOptions().dtype(torch::kFloat64); From 6c4a641855f5e0b8b98b8be4cd61e08faf262383 Mon Sep 17 00:00:00 2001 From: zxysbsbzxy Date: Sat, 3 Feb 2024 12:44:34 +0800 Subject: [PATCH 045/117] fix bug:device constructor --- source/api_cc/src/DeepPotPT.cc | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index 9b642eac8b..624c6299f8 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -193,11 +193,9 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, const std::vector& coord, const std::vector& atype, const std::vector& box) { - torch::Device device; + torch::Device device(torch::kCUDA, gpu_id); if(cpu_enabled) device = torch::Device(torch::kCPU); - else - device = torch::Device(torch::kCUDA, gpu_id); std::vector coord_wrapped = coord; int natoms = atype.size(); auto options = torch::TensorOptions().dtype(torch::kFloat64); From 22d1a7e2ebab97ea466569963556338d1d1c89e5 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sat, 3 Feb 2024 04:48:42 +0000 Subject: [PATCH 046/117] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- source/api_cc/src/DeepPotPT.cc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index 624c6299f8..de2611d3e9 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -72,8 +72,9 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, const InputNlist& lmp_list, const int& ago) { torch::Device device(torch::kCUDA, gpu_id); - if(cpu_enabled) + if (cpu_enabled) { device = torch::Device(torch::kCPU); + } std::vector coord_wrapped = coord; int natoms = atype.size(); auto options = torch::TensorOptions().dtype(torch::kFloat64); @@ -194,8 +195,9 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, const std::vector& atype, const std::vector& box) { torch::Device device(torch::kCUDA, gpu_id); - if(cpu_enabled) + if (cpu_enabled) { device = torch::Device(torch::kCPU); + } std::vector coord_wrapped = coord; int natoms = atype.size(); auto options = torch::TensorOptions().dtype(torch::kFloat64); From a68742d8384a1e5cedce7bb210ce85773bd94085 Mon Sep 17 00:00:00 2001 From: Jinzhe Zeng Date: Sat, 3 Feb 2024 04:29:24 -0500 Subject: [PATCH 047/117] add tests, although not passed Signed-off-by: Jinzhe Zeng --- source/api_cc/src/DeepPotPT.cc | 8 +- source/api_cc/tests/test_deeppot_pt.cc | 619 +++++++++++++++++++++++++ source/install/test_cc_local.sh | 10 +- source/tests/infer/deeppot_sea.pth | Bin 0 -> 193994 bytes 4 files changed, 634 insertions(+), 3 deletions(-) create mode 100644 source/api_cc/tests/test_deeppot_pt.cc create mode 100644 source/tests/infer/deeppot_sea.pth diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index de2611d3e9..655061aced 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -46,8 +46,12 @@ void DeepPotPT::init(const std::string& model, get_env_nthreads(num_intra_nthreads, num_inter_nthreads); // need to be fixed as // DP_INTRA_OP_PARALLELISM_THREADS - at::set_num_interop_threads(num_inter_nthreads); - at::set_num_threads(num_intra_nthreads); + if (num_inter_nthreads) { + at::set_num_interop_threads(num_inter_nthreads); + } + if (num_intra_nthreads) { + at::set_num_threads(num_intra_nthreads); + } auto rcut_ = module.run_method("get_rcut").toDouble(); rcut = static_cast(rcut_); diff --git a/source/api_cc/tests/test_deeppot_pt.cc b/source/api_cc/tests/test_deeppot_pt.cc new file mode 100644 index 0000000000..e27401bb3c --- /dev/null +++ b/source/api_cc/tests/test_deeppot_pt.cc @@ -0,0 +1,619 @@ +// SPDX-License-Identifier: LGPL-3.0-or-later +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "DeepPot.h" +#include "neighbor_list.h" +#include "test_utils.h" + +template +class TestInferDeepPotAPt : public ::testing::Test { + protected: + std::vector coord = {12.83, 2.56, 2.18, 12.09, 2.87, 2.74, + 00.25, 3.32, 1.68, 3.36, 3.00, 1.81, + 3.51, 2.51, 2.60, 4.27, 3.22, 1.56}; + std::vector atype = {0, 1, 1, 0, 1, 1}; + std::vector box = {13., 0., 0., 0., 13., 0., 0., 0., 13.}; + std::vector expected_e = {-53.7147059, -49.94367351, + -49.9434903, -53.71488615, + -49.9438445, -49.94379288}; + std::vector expected_f = { + -0.00120548, 0.00809608, -0.00064437, 0.00641376, -0.00109731, + -0.00529648, -0.00551271, -0.0070066, 0.00597296, 0.00397807, + -0.00078519, 0.00165795, 0.0003451, 0.00228841, -0.0036, + -0.00401874, -0.00149539, 0.00190994}; + std::vector expected_v = { + -3.72974819e-03, -9.98227220e-04, 3.37664388e-03, -1.10154761e-03, + -4.68713907e-03, 1.84604369e-03, 3.41017698e-03, 1.81164563e-03, + -3.22243690e-03, -1.99493894e-03, 5.97534768e-05, 1.80584573e-03, + -2.62579356e-04, -1.12440024e-04, 2.42097709e-04, 1.89528468e-03, + -3.24777812e-05, -1.60401783e-03, -8.97106345e-04, -1.15497829e-03, + 1.17916578e-03, -7.55372233e-04, -8.56277743e-04, 7.92455483e-04, + 1.07793900e-03, 1.10623290e-03, -1.12596261e-03, -2.90655831e-03, + -3.70173918e-04, 2.98300648e-04, -3.95329633e-04, -7.64980354e-04, + 1.16308129e-03, 3.15914358e-04, 1.15922497e-03, -1.79216186e-03, + 3.24153403e-04, -3.17404215e-04, 4.23089883e-04, -1.83222341e-04, + -4.67327552e-04, 7.21883299e-04, 2.39115354e-04, 7.09732333e-04, + -1.09491651e-03, -3.87972886e-04, -3.39632835e-04, 4.29685964e-04, + -4.22611827e-04, -2.23877230e-04, 3.02037131e-04, 5.74301510e-04, + 3.13240553e-04, -4.22617216e-04}; + int natoms; + double expected_tot_e; + std::vector expected_tot_v; + + deepmd::DeepPot dp; + + void SetUp() override { + std::string file_name = "../../tests/infer/deeppot_sea.pth"; + + dp.init(file_name); + + natoms = expected_e.size(); + EXPECT_EQ(natoms * 3, expected_f.size()); + EXPECT_EQ(natoms * 9, expected_v.size()); + expected_tot_e = 0.; + expected_tot_v.resize(9); + std::fill(expected_tot_v.begin(), expected_tot_v.end(), 0.); + for (int ii = 0; ii < natoms; ++ii) { + expected_tot_e += expected_e[ii]; + } + for (int ii = 0; ii < natoms; ++ii) { + for (int dd = 0; dd < 9; ++dd) { + expected_tot_v[dd] += expected_v[ii * 9 + dd]; + } + } + }; + + void TearDown() override { remove("deeppot.pb"); }; +}; + +TYPED_TEST_SUITE(TestInferDeepPotAPt, ValueTypes); + +TYPED_TEST(TestInferDeepPotAPt, cpu_build_nlist) { + using VALUETYPE = TypeParam; + std::vector& coord = this->coord; + std::vector& atype = this->atype; + std::vector& box = this->box; + std::vector& expected_e = this->expected_e; + std::vector& expected_f = this->expected_f; + std::vector& expected_v = this->expected_v; + int& natoms = this->natoms; + double& expected_tot_e = this->expected_tot_e; + std::vector& expected_tot_v = this->expected_tot_v; + deepmd::DeepPot& dp = this->dp; + double ener; + std::vector force, virial; + dp.compute(ener, force, virial, coord, atype, box); + + EXPECT_EQ(force.size(), natoms * 3); + EXPECT_EQ(virial.size(), 9); + + EXPECT_LT(fabs(ener - expected_tot_e), EPSILON); + for (int ii = 0; ii < natoms * 3; ++ii) { + EXPECT_LT(fabs(force[ii] - expected_f[ii]), EPSILON); + } + for (int ii = 0; ii < 3 * 3; ++ii) { + EXPECT_LT(fabs(virial[ii] - expected_tot_v[ii]), EPSILON); + } +} + +TYPED_TEST(TestInferDeepPotAPt, cpu_build_nlist_numfv) { + using VALUETYPE = TypeParam; + std::vector& coord = this->coord; + std::vector& atype = this->atype; + std::vector& box = this->box; + std::vector& expected_e = this->expected_e; + std::vector& expected_f = this->expected_f; + std::vector& expected_v = this->expected_v; + int& natoms = this->natoms; + double& expected_tot_e = this->expected_tot_e; + std::vector& expected_tot_v = this->expected_tot_v; + deepmd::DeepPot& dp = this->dp; + class MyModel : public EnergyModelTest { + deepmd::DeepPot& mydp; + const std::vector atype; + + public: + MyModel(deepmd::DeepPot& dp_, const std::vector& atype_) + : mydp(dp_), atype(atype_){}; + virtual void compute(double& ener, + std::vector& force, + std::vector& virial, + const std::vector& coord, + const std::vector& box) { + mydp.compute(ener, force, virial, coord, atype, box); + } + }; + MyModel model(dp, atype); + model.test_f(coord, box); + model.test_v(coord, box); + std::vector box_(box); + box_[1] -= 0.4; + model.test_f(coord, box_); + model.test_v(coord, box_); + box_[2] += 0.5; + model.test_f(coord, box_); + model.test_v(coord, box_); + box_[4] += 0.2; + model.test_f(coord, box_); + model.test_v(coord, box_); + box_[3] -= 0.3; + model.test_f(coord, box_); + model.test_v(coord, box_); + box_[6] -= 0.7; + model.test_f(coord, box_); + model.test_v(coord, box_); + box_[7] += 0.6; + model.test_f(coord, box_); + model.test_v(coord, box_); +} + +TYPED_TEST(TestInferDeepPotAPt, cpu_build_nlist_atomic) { + using VALUETYPE = TypeParam; + std::vector& coord = this->coord; + std::vector& atype = this->atype; + std::vector& box = this->box; + std::vector& expected_e = this->expected_e; + std::vector& expected_f = this->expected_f; + std::vector& expected_v = this->expected_v; + int& natoms = this->natoms; + double& expected_tot_e = this->expected_tot_e; + std::vector& expected_tot_v = this->expected_tot_v; + deepmd::DeepPot& dp = this->dp; + double ener; + std::vector force, virial, atom_ener, atom_vir; + dp.compute(ener, force, virial, atom_ener, atom_vir, coord, atype, box); + + EXPECT_EQ(force.size(), natoms * 3); + EXPECT_EQ(virial.size(), 9); + EXPECT_EQ(atom_ener.size(), natoms); + EXPECT_EQ(atom_vir.size(), natoms * 9); + + EXPECT_LT(fabs(ener - expected_tot_e), EPSILON); + for (int ii = 0; ii < natoms * 3; ++ii) { + EXPECT_LT(fabs(force[ii] - expected_f[ii]), EPSILON); + } + for (int ii = 0; ii < 3 * 3; ++ii) { + EXPECT_LT(fabs(virial[ii] - expected_tot_v[ii]), EPSILON); + } + for (int ii = 0; ii < natoms; ++ii) { + EXPECT_LT(fabs(atom_ener[ii] - expected_e[ii]), EPSILON); + } + for (int ii = 0; ii < natoms * 9; ++ii) { + EXPECT_LT(fabs(atom_vir[ii] - expected_v[ii]), EPSILON); + } +} + +TYPED_TEST(TestInferDeepPotAPt, cpu_lmp_nlist) { + using VALUETYPE = TypeParam; + std::vector& coord = this->coord; + std::vector& atype = this->atype; + std::vector& box = this->box; + std::vector& expected_e = this->expected_e; + std::vector& expected_f = this->expected_f; + std::vector& expected_v = this->expected_v; + int& natoms = this->natoms; + double& expected_tot_e = this->expected_tot_e; + std::vector& expected_tot_v = this->expected_tot_v; + deepmd::DeepPot& dp = this->dp; + float rc = dp.cutoff(); + int nloc = coord.size() / 3; + std::vector coord_cpy; + std::vector atype_cpy, mapping; + std::vector > nlist_data; + _build_nlist(nlist_data, coord_cpy, atype_cpy, mapping, coord, + atype, box, rc); + int nall = coord_cpy.size() / 3; + std::vector ilist(nloc), numneigh(nloc); + std::vector firstneigh(nloc); + deepmd::InputNlist inlist(nloc, &ilist[0], &numneigh[0], &firstneigh[0]); + convert_nlist(inlist, nlist_data); + + double ener; + std::vector force_, virial; + dp.compute(ener, force_, virial, coord_cpy, atype_cpy, box, nall - nloc, + inlist, 0); + std::vector force; + _fold_back(force, force_, mapping, nloc, nall, 3); + + EXPECT_EQ(force.size(), natoms * 3); + EXPECT_EQ(virial.size(), 9); + + EXPECT_LT(fabs(ener - expected_tot_e), EPSILON); + for (int ii = 0; ii < natoms * 3; ++ii) { + EXPECT_LT(fabs(force[ii] - expected_f[ii]), EPSILON); + } + for (int ii = 0; ii < 3 * 3; ++ii) { + EXPECT_LT(fabs(virial[ii] - expected_tot_v[ii]), EPSILON); + } + + ener = 0.; + std::fill(force_.begin(), force_.end(), 0.0); + std::fill(virial.begin(), virial.end(), 0.0); + dp.compute(ener, force_, virial, coord_cpy, atype_cpy, box, nall - nloc, + inlist, 1); + _fold_back(force, force_, mapping, nloc, nall, 3); + + EXPECT_EQ(force.size(), natoms * 3); + EXPECT_EQ(virial.size(), 9); + + EXPECT_LT(fabs(ener - expected_tot_e), EPSILON); + for (int ii = 0; ii < natoms * 3; ++ii) { + EXPECT_LT(fabs(force[ii] - expected_f[ii]), EPSILON); + } + for (int ii = 0; ii < 3 * 3; ++ii) { + EXPECT_LT(fabs(virial[ii] - expected_tot_v[ii]), EPSILON); + } +} + +TYPED_TEST(TestInferDeepPotAPt, cpu_lmp_nlist_atomic) { + using VALUETYPE = TypeParam; + std::vector& coord = this->coord; + std::vector& atype = this->atype; + std::vector& box = this->box; + std::vector& expected_e = this->expected_e; + std::vector& expected_f = this->expected_f; + std::vector& expected_v = this->expected_v; + int& natoms = this->natoms; + double& expected_tot_e = this->expected_tot_e; + std::vector& expected_tot_v = this->expected_tot_v; + deepmd::DeepPot& dp = this->dp; + float rc = dp.cutoff(); + int nloc = coord.size() / 3; + std::vector coord_cpy; + std::vector atype_cpy, mapping; + std::vector > nlist_data; + _build_nlist(nlist_data, coord_cpy, atype_cpy, mapping, coord, + atype, box, rc); + int nall = coord_cpy.size() / 3; + std::vector ilist(nloc), numneigh(nloc); + std::vector firstneigh(nloc); + deepmd::InputNlist inlist(nloc, &ilist[0], &numneigh[0], &firstneigh[0]); + convert_nlist(inlist, nlist_data); + + double ener; + std::vector force_, atom_ener_, atom_vir_, virial; + std::vector force, atom_ener, atom_vir; + dp.compute(ener, force_, virial, atom_ener_, atom_vir_, coord_cpy, atype_cpy, + box, nall - nloc, inlist, 0); + _fold_back(force, force_, mapping, nloc, nall, 3); + _fold_back(atom_ener, atom_ener_, mapping, nloc, nall, 1); + _fold_back(atom_vir, atom_vir_, mapping, nloc, nall, 9); + + EXPECT_EQ(force.size(), natoms * 3); + EXPECT_EQ(virial.size(), 9); + EXPECT_EQ(atom_ener.size(), natoms); + EXPECT_EQ(atom_vir.size(), natoms * 9); + + EXPECT_LT(fabs(ener - expected_tot_e), EPSILON); + for (int ii = 0; ii < natoms * 3; ++ii) { + EXPECT_LT(fabs(force[ii] - expected_f[ii]), EPSILON); + } + for (int ii = 0; ii < 3 * 3; ++ii) { + EXPECT_LT(fabs(virial[ii] - expected_tot_v[ii]), EPSILON); + } + for (int ii = 0; ii < natoms; ++ii) { + EXPECT_LT(fabs(atom_ener[ii] - expected_e[ii]), EPSILON); + } + for (int ii = 0; ii < natoms * 9; ++ii) { + EXPECT_LT(fabs(atom_vir[ii] - expected_v[ii]), EPSILON); + } + + ener = 0.; + std::fill(force_.begin(), force_.end(), 0.0); + std::fill(virial.begin(), virial.end(), 0.0); + std::fill(atom_ener_.begin(), atom_ener_.end(), 0.0); + std::fill(atom_vir_.begin(), atom_vir_.end(), 0.0); + dp.compute(ener, force_, virial, atom_ener_, atom_vir_, coord_cpy, atype_cpy, + box, nall - nloc, inlist, 1); + _fold_back(force, force_, mapping, nloc, nall, 3); + _fold_back(atom_ener, atom_ener_, mapping, nloc, nall, 1); + _fold_back(atom_vir, atom_vir_, mapping, nloc, nall, 9); + + EXPECT_EQ(force.size(), natoms * 3); + EXPECT_EQ(virial.size(), 9); + EXPECT_EQ(atom_ener.size(), natoms); + EXPECT_EQ(atom_vir.size(), natoms * 9); + + EXPECT_LT(fabs(ener - expected_tot_e), EPSILON); + for (int ii = 0; ii < natoms * 3; ++ii) { + EXPECT_LT(fabs(force[ii] - expected_f[ii]), EPSILON); + } + for (int ii = 0; ii < 3 * 3; ++ii) { + EXPECT_LT(fabs(virial[ii] - expected_tot_v[ii]), EPSILON); + } + for (int ii = 0; ii < natoms; ++ii) { + EXPECT_LT(fabs(atom_ener[ii] - expected_e[ii]), EPSILON); + } + for (int ii = 0; ii < natoms * 9; ++ii) { + EXPECT_LT(fabs(atom_vir[ii] - expected_v[ii]), EPSILON); + } +} + +TYPED_TEST(TestInferDeepPotAPt, cpu_lmp_nlist_2rc) { + using VALUETYPE = TypeParam; + std::vector& coord = this->coord; + std::vector& atype = this->atype; + std::vector& box = this->box; + std::vector& expected_e = this->expected_e; + std::vector& expected_f = this->expected_f; + std::vector& expected_v = this->expected_v; + int& natoms = this->natoms; + double& expected_tot_e = this->expected_tot_e; + std::vector& expected_tot_v = this->expected_tot_v; + deepmd::DeepPot& dp = this->dp; + float rc = dp.cutoff(); + int nloc = coord.size() / 3; + std::vector coord_cpy; + std::vector atype_cpy, mapping; + std::vector > nlist_data; + _build_nlist(nlist_data, coord_cpy, atype_cpy, mapping, coord, + atype, box, rc * 2); + int nall = coord_cpy.size() / 3; + std::vector ilist(nloc), numneigh(nloc); + std::vector firstneigh(nloc); + deepmd::InputNlist inlist(nloc, &ilist[0], &numneigh[0], &firstneigh[0]); + convert_nlist(inlist, nlist_data); + + double ener; + std::vector force_(nall * 3, 0.0), virial(9, 0.0); + dp.compute(ener, force_, virial, coord_cpy, atype_cpy, box, nall - nloc, + inlist, 0); + std::vector force; + _fold_back(force, force_, mapping, nloc, nall, 3); + + EXPECT_EQ(force.size(), natoms * 3); + EXPECT_EQ(virial.size(), 9); + + EXPECT_LT(fabs(ener - expected_tot_e), EPSILON); + for (int ii = 0; ii < natoms * 3; ++ii) { + EXPECT_LT(fabs(force[ii] - expected_f[ii]), EPSILON); + } + for (int ii = 0; ii < 3 * 3; ++ii) { + EXPECT_LT(fabs(virial[ii] - expected_tot_v[ii]), EPSILON); + } + + ener = 0.; + std::fill(force_.begin(), force_.end(), 0.0); + std::fill(virial.begin(), virial.end(), 0.0); + dp.compute(ener, force_, virial, coord_cpy, atype_cpy, box, nall - nloc, + inlist, 1); + _fold_back(force, force_, mapping, nloc, nall, 3); + + EXPECT_EQ(force.size(), natoms * 3); + EXPECT_EQ(virial.size(), 9); + + EXPECT_LT(fabs(ener - expected_tot_e), EPSILON); + for (int ii = 0; ii < natoms * 3; ++ii) { + EXPECT_LT(fabs(force[ii] - expected_f[ii]), EPSILON); + } + for (int ii = 0; ii < 3 * 3; ++ii) { + EXPECT_LT(fabs(virial[ii] - expected_tot_v[ii]), EPSILON); + } +} + +TYPED_TEST(TestInferDeepPotAPt, cpu_lmp_nlist_type_sel) { + using VALUETYPE = TypeParam; + std::vector& coord = this->coord; + std::vector& atype = this->atype; + std::vector& box = this->box; + std::vector& expected_e = this->expected_e; + std::vector& expected_f = this->expected_f; + std::vector& expected_v = this->expected_v; + int& natoms = this->natoms; + double& expected_tot_e = this->expected_tot_e; + std::vector& expected_tot_v = this->expected_tot_v; + deepmd::DeepPot& dp = this->dp; + float rc = dp.cutoff(); + + // add vir atoms + int nvir = 2; + std::vector coord_vir(nvir * 3); + std::vector atype_vir(nvir, 2); + for (int ii = 0; ii < nvir; ++ii) { + coord_vir[ii] = coord[ii]; + } + coord.insert(coord.begin(), coord_vir.begin(), coord_vir.end()); + atype.insert(atype.begin(), atype_vir.begin(), atype_vir.end()); + natoms += nvir; + std::vector expected_f_vir(nvir * 3, 0.0); + expected_f.insert(expected_f.begin(), expected_f_vir.begin(), + expected_f_vir.end()); + + // build nlist + int nloc = coord.size() / 3; + std::vector coord_cpy; + std::vector atype_cpy, mapping; + std::vector > nlist_data; + _build_nlist(nlist_data, coord_cpy, atype_cpy, mapping, coord, + atype, box, rc); + int nall = coord_cpy.size() / 3; + std::vector ilist(nloc), numneigh(nloc); + std::vector firstneigh(nloc); + deepmd::InputNlist inlist(nloc, &ilist[0], &numneigh[0], &firstneigh[0]); + convert_nlist(inlist, nlist_data); + + // dp compute + double ener; + std::vector force_(nall * 3, 0.0), virial(9, 0.0); + dp.compute(ener, force_, virial, coord_cpy, atype_cpy, box, nall - nloc, + inlist, 0); + // fold back + std::vector force; + _fold_back(force, force_, mapping, nloc, nall, 3); + + EXPECT_EQ(force.size(), natoms * 3); + EXPECT_EQ(virial.size(), 9); + + EXPECT_LT(fabs(ener - expected_tot_e), EPSILON); + for (int ii = 0; ii < natoms * 3; ++ii) { + EXPECT_LT(fabs(force[ii] - expected_f[ii]), EPSILON); + } + for (int ii = 0; ii < 3 * 3; ++ii) { + EXPECT_LT(fabs(virial[ii] - expected_tot_v[ii]), EPSILON); + } +} + +TYPED_TEST(TestInferDeepPotAPt, cpu_lmp_nlist_type_sel_atomic) { + using VALUETYPE = TypeParam; + std::vector& coord = this->coord; + std::vector& atype = this->atype; + std::vector& box = this->box; + std::vector& expected_e = this->expected_e; + std::vector& expected_f = this->expected_f; + std::vector& expected_v = this->expected_v; + int& natoms = this->natoms; + double& expected_tot_e = this->expected_tot_e; + std::vector& expected_tot_v = this->expected_tot_v; + deepmd::DeepPot& dp = this->dp; + float rc = dp.cutoff(); + + // add vir atoms + int nvir = 2; + std::vector coord_vir(nvir * 3); + std::vector atype_vir(nvir, 2); + for (int ii = 0; ii < nvir; ++ii) { + coord_vir[ii] = coord[ii]; + } + coord.insert(coord.begin(), coord_vir.begin(), coord_vir.end()); + atype.insert(atype.begin(), atype_vir.begin(), atype_vir.end()); + natoms += nvir; + std::vector expected_f_vir(nvir * 3, 0.0); + expected_f.insert(expected_f.begin(), expected_f_vir.begin(), + expected_f_vir.end()); + + // build nlist + int nloc = coord.size() / 3; + std::vector coord_cpy; + std::vector atype_cpy, mapping; + std::vector > nlist_data; + _build_nlist(nlist_data, coord_cpy, atype_cpy, mapping, coord, + atype, box, rc); + int nall = coord_cpy.size() / 3; + std::vector ilist(nloc), numneigh(nloc); + std::vector firstneigh(nloc); + deepmd::InputNlist inlist(nloc, &ilist[0], &numneigh[0], &firstneigh[0]); + convert_nlist(inlist, nlist_data); + + // dp compute + double ener; + std::vector force_(nall * 3, 0.0), virial(9, 0.0), atomic_energy, + atomic_virial; + dp.compute(ener, force_, virial, atomic_energy, atomic_virial, coord_cpy, + atype_cpy, box, nall - nloc, inlist, 0); + // fold back + std::vector force; + _fold_back(force, force_, mapping, nloc, nall, 3); + + EXPECT_EQ(force.size(), natoms * 3); + EXPECT_EQ(virial.size(), 9); + + EXPECT_LT(fabs(ener - expected_tot_e), EPSILON); + for (int ii = 0; ii < natoms * 3; ++ii) { + EXPECT_LT(fabs(force[ii] - expected_f[ii]), EPSILON); + } + for (int ii = 0; ii < 3 * 3; ++ii) { + EXPECT_LT(fabs(virial[ii] - expected_tot_v[ii]), EPSILON); + } +} + +TYPED_TEST(TestInferDeepPotAPt, print_summary) { + deepmd::DeepPot& dp = this->dp; + dp.print_summary(""); +} + +template +class TestInferDeepPotAPtNoPbc : public ::testing::Test { + protected: + std::vector coord = {12.83, 2.56, 2.18, 12.09, 2.87, 2.74, + 00.25, 3.32, 1.68, 3.36, 3.00, 1.81, + 3.51, 2.51, 2.60, 4.27, 3.22, 1.56}; + std::vector atype = {0, 1, 1, 0, 1, 1}; + std::vector box = {}; + std::vector expected_e = {-53.70576165, -49.9427077, -49.68506898, + -53.71490191, -49.94386836, -49.9438074}; + std::vector expected_f = { + -0.05793241, 0.02426898, 0.04384074, 0.05793241, -0.02426898, + -0.04384074, 0.0061137, -0.00121445, -0.00052675, -0.04546273, + 0.00444365, -0.00071007, 0.01261648, -0.00107514, 0.00036128, + 0.02673255, -0.00215406, 0.00087553}; + std::vector expected_v = { + -9.02965689e-03, 3.78269410e-03, 6.83325386e-03, 3.78269410e-03, + -1.58464212e-03, -2.86257932e-03, 6.83325386e-03, -2.86257932e-03, + -5.17111103e-03, -3.38403230e-02, 1.41763515e-02, 2.56088931e-02, + 1.41763515e-02, -5.93874186e-03, -1.07280498e-02, 2.56088931e-02, + -1.07280498e-02, -1.93797029e-02, 2.16816985e-04, -1.26051843e-05, + 4.08880185e-06, -8.85403363e-06, 4.69563180e-08, 4.27221711e-07, + -5.68134313e-06, 1.25803648e-06, -1.28751543e-06, -1.55377477e-01, + 1.53205867e-02, -6.03170230e-03, 1.53638777e-02, -2.28187375e-03, + 1.66104531e-03, -6.12092196e-03, 1.66503657e-03, -1.81384836e-03, + 4.03275109e-02, -1.02905681e-02, 1.17738547e-02, -1.01342635e-02, + 2.05898924e-03, -2.16858200e-03, 1.15576484e-02, -2.17555574e-03, + 2.21173836e-03, 1.22038623e-01, -3.36194524e-03, -3.25713729e-03, + -3.56529198e-03, -1.12860297e-04, 3.54141978e-04, -2.94194119e-03, + 3.56293646e-04, -2.61599053e-04}; + int natoms; + double expected_tot_e; + std::vector expected_tot_v; + + deepmd::DeepPot dp; + + void SetUp() override { + std::string file_name = "../../tests/infer/deeppot_sea.pth"; + dp.init(file_name); + + natoms = expected_e.size(); + EXPECT_EQ(natoms * 3, expected_f.size()); + EXPECT_EQ(natoms * 9, expected_v.size()); + expected_tot_e = 0.; + expected_tot_v.resize(9); + std::fill(expected_tot_v.begin(), expected_tot_v.end(), 0.); + for (int ii = 0; ii < natoms; ++ii) { + expected_tot_e += expected_e[ii]; + } + for (int ii = 0; ii < natoms; ++ii) { + for (int dd = 0; dd < 9; ++dd) { + expected_tot_v[dd] += expected_v[ii * 9 + dd]; + } + } + }; + + void TearDown() override { remove("deeppot.pb"); }; +}; + +TYPED_TEST_SUITE(TestInferDeepPotAPtNoPbc, ValueTypes); + +TYPED_TEST(TestInferDeepPotAPtNoPbc, cpu_build_nlist) { + using VALUETYPE = TypeParam; + std::vector& coord = this->coord; + std::vector& atype = this->atype; + std::vector& box = this->box; + std::vector& expected_e = this->expected_e; + std::vector& expected_f = this->expected_f; + std::vector& expected_v = this->expected_v; + int& natoms = this->natoms; + double& expected_tot_e = this->expected_tot_e; + std::vector& expected_tot_v = this->expected_tot_v; + deepmd::DeepPot& dp = this->dp; + double ener; + std::vector force, virial; + dp.compute(ener, force, virial, coord, atype, box); + + EXPECT_EQ(force.size(), natoms * 3); + EXPECT_EQ(virial.size(), 9); + + EXPECT_LT(fabs(ener - expected_tot_e), EPSILON); + for (int ii = 0; ii < natoms * 3; ++ii) { + EXPECT_LT(fabs(force[ii] - expected_f[ii]), EPSILON); + } + for (int ii = 0; ii < 3 * 3; ++ii) { + EXPECT_LT(fabs(virial[ii] - expected_tot_v[ii]), EPSILON); + } +} diff --git a/source/install/test_cc_local.sh b/source/install/test_cc_local.sh index 22d22a27f6..73aa74ed90 100755 --- a/source/install/test_cc_local.sh +++ b/source/install/test_cc_local.sh @@ -18,7 +18,15 @@ INSTALL_PREFIX=${SCRIPT_PATH}/../../dp_test BUILD_TMP_DIR=${SCRIPT_PATH}/../build_tests mkdir -p ${BUILD_TMP_DIR} cd ${BUILD_TMP_DIR} -cmake -DINSTALL_TENSORFLOW=FALSE -DUSE_TF_PYTHON_LIBS=TRUE -DCMAKE_INSTALL_PREFIX=${INSTALL_PREFIX} -DBUILD_TESTING:BOOL=TRUE -DLAMMPS_VERSION=stable_2Aug2023_update2 ${CUDA_ARGS} .. +cmake \ + -D ENABLE_TENSORFLOW=TRUE \ + -D ENABLE_PYTORCH=TRUE \ + -D INSTALL_TENSORFLOW=FALSE \ + -D USE_TF_PYTHON_LIBS=TRUE \ + -D CMAKE_INSTALL_PREFIX=${INSTALL_PREFIX} \ + -D BUILD_TESTING:BOOL=TRUE \ + -D LAMMPS_VERSION=stable_2Aug2023_update2 \ + ${CUDA_ARGS} .. cmake --build . -j${NPROC} cmake --install . ctest --output-on-failure diff --git a/source/tests/infer/deeppot_sea.pth b/source/tests/infer/deeppot_sea.pth new file mode 100644 index 0000000000000000000000000000000000000000..d8deb94c93de05df446e61228341d07e6fdb2f97 GIT binary patch literal 193994 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

qILC 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

~S7}=G36|&x7p5#O+oq~sG_crLHtKWsS17{!Q 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

+f0TG{?d-0_iRS>_ zi$IM_VH6>Z?dL`KaX(&m+PV?99s_@v7K_%SO}Yz30MR~x2ngV4$%5mzi1yZ2fg|2s z2M{p;w3uy81Lw~v_qHn*WoI8~!2Y)488lrW5bcTIpxIkjS!_G?9H2=LxD$mj2z5^W zoN&7h-7?o-U$IEK9PAT*7ci78a1Ua(X0Lhv8^hjelvyVFCV>Y8abS6!IEI>DfnVj? zazR&f7dv3%GuD9ck=zX0NDKn09|Hj+Oz7#9*nel)TU8514)HO-KHwueRmGn9CBDD! ztF1G}fdg}`u-J)Iom|_95Cn1tddZlo_*MQp%igN2KgrT30hK2Oc%M3YC4x@q{t};) zE8mu_&|<)@rc(GHrP~iA*|TNRR{+M%d;x>msk=b@nSm*{IF$m~9%WmTX zKP_1PM~c1mpuc|`GkQ|n|2r~Ads~;y6E=1}3!uMz0yBDMy8JhWz15%}DvjB#q7MF5 zt}WmE5kq&s++wFZ^s`H}Fszjv`G+X?){A~Fgd7HWUh2OiM|;lNJ}hOYR`k7)n9bhD zj6XoPQ|ETPL*HX4h@n%v=;y@$#G38>SXg`%edE_D41DKT{{?@ilI`GyzI_7IVy8-f zg=t&Hu2{Lbt!$^o(5D$OEq1Bu576zc6MbF{^JycgfJ?%HdC-w@NFFQF?md!h@ChX(*Qeh&Lx1&7& zjOXvfKp*;M#lVQ#iGh7UUR#ZTfcwXVNAY<6fsp?3)8F6u>9#%)?*~RsfCO9z#5oYi ZW?}39KwJer!zbAMOd9yN`S)9Y`#*n|2ebeH literal 0 HcmV?d00001 From ba510e8b15973005a0ec8b2a5fa8a711533f2f34 Mon Sep 17 00:00:00 2001 From: CaRoLZhangxy Date: Fri, 23 Feb 2024 04:44:22 +0000 Subject: [PATCH 048/117] fix memory leak and nlist dim --- deepmd/pt/model/model/ener_model.py | 2 +- deepmd/pt/model/model/make_model.py | 2 +- source/api_cc/include/DeepPotPT.h | 2 +- source/api_cc/include/commonPT.h | 2 +- source/api_cc/src/DeepPotPT.cc | 19 +++++++------------ source/api_cc/src/commonPT.cc | 1 + 6 files changed, 12 insertions(+), 16 deletions(-) diff --git a/deepmd/pt/model/model/ener_model.py b/deepmd/pt/model/model/ener_model.py index 2afeb2762b..d9920cae0e 100644 --- a/deepmd/pt/model/model/ener_model.py +++ b/deepmd/pt/model/model/ener_model.py @@ -55,7 +55,7 @@ def forward( model_predict = model_ret model_predict["updated_coord"] += coord return model_predict - + @torch.jit.export def forward_lower( self, extended_coord, diff --git a/deepmd/pt/model/model/make_model.py b/deepmd/pt/model/model/make_model.py index 19bc514a2d..75ef8c5769 100644 --- a/deepmd/pt/model/model/make_model.py +++ b/deepmd/pt/model/model/make_model.py @@ -179,7 +179,7 @@ def forward_common_lower( do_atomic_virial=do_atomic_virial, ) return model_predict - + @torch.jit.export def format_nlist( self, extended_coord: torch.Tensor, diff --git a/source/api_cc/include/DeepPotPT.h b/source/api_cc/include/DeepPotPT.h index a3ca9d69cb..1b757069c3 100644 --- a/source/api_cc/include/DeepPotPT.h +++ b/source/api_cc/include/DeepPotPT.h @@ -325,7 +325,7 @@ class DeepPotPT : public DeepPotBase { NeighborListDataPT nlist_data; int max_num_neighbors; int gpu_id; - bool cpu_enabled; + bool gpu_enabled; at::Tensor firstneigh_tensor; }; diff --git a/source/api_cc/include/commonPT.h b/source/api_cc/include/commonPT.h index d357b76085..58eccb3488 100644 --- a/source/api_cc/include/commonPT.h +++ b/source/api_cc/include/commonPT.h @@ -20,9 +20,9 @@ struct NeighborListDataPT { std::vector firstneigh; public: + ~NeighborListDataPT(); void copy_from_nlist(const InputNlist& inlist, int& max_num_neighbors, int nnei); - // void make_inlist(InputNlist& inlist); }; } // namespace deepmd diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index 655061aced..e30a55dd06 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -29,16 +29,11 @@ void DeepPotPT::init(const std::string& model, << std::endl; gpu_id = gpu_rank; torch::Device device(torch::kCUDA, gpu_rank); - cpu_enabled = false; - // This may be implemented as something like DPErrcheck(DPSetDevice(gpu_rank % - // gpu_num)); - try { - module = torch::jit::load(model, device); - } catch (const c10::Error& e) { - torch::Device device(torch::kCPU); - module = torch::jit::load(model, device); - cpu_enabled = true; + gpu_enabled = torch::cuda::is_available(); + if (!gpu_enabled) { + device = torch::Device(torch::kCPU); } + module = torch::jit::load(model, device); torch::jit::FusionStrategy strategy; strategy = {{torch::jit::FusionBehavior::DYNAMIC, 10}}; torch::jit::setFusionStrategy(strategy); @@ -76,7 +71,7 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, const InputNlist& lmp_list, const int& ago) { torch::Device device(torch::kCUDA, gpu_id); - if (cpu_enabled) { + if (!gpu_enabled) { device = torch::Device(torch::kCPU); } std::vector coord_wrapped = coord; @@ -95,7 +90,7 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, nlist_data.copy_from_nlist(lmp_list, max_num_neighbors, nnei); if (max_num_neighbors > nnei) { at::Tensor firstneigh = torch::from_blob( - nlist_data.jlist, {lmp_list.inum, max_num_neighbors}, int32_options); + nlist_data.jlist, {1, lmp_list.inum, max_num_neighbors}, int32_options); at::Tensor nlist = firstneigh.to(torch::kInt64).to(device); firstneigh_tensor = module .run_method("format_nlist", coord_wrapped_Tensor, @@ -199,7 +194,7 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, const std::vector& atype, const std::vector& box) { torch::Device device(torch::kCUDA, gpu_id); - if (cpu_enabled) { + if (!gpu_enabled) { device = torch::Device(torch::kCPU); } std::vector coord_wrapped = coord; diff --git a/source/api_cc/src/commonPT.cc b/source/api_cc/src/commonPT.cc index 528ac22c46..c04e7065f3 100644 --- a/source/api_cc/src/commonPT.cc +++ b/source/api_cc/src/commonPT.cc @@ -2,6 +2,7 @@ #ifdef BUILD_PYTORCH #include "commonPT.h" using namespace deepmd; +NeighborListDataPT::~NeighborListDataPT() {free(jlist);} void NeighborListDataPT::copy_from_nlist(const InputNlist& inlist, int& max_num_neighbors, int nnei) { From 936b29a4c31cfca5ce021176529a275ee96dc5de Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 23 Feb 2024 04:45:10 +0000 Subject: [PATCH 049/117] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- deepmd/pt/model/model/ener_model.py | 1 + deepmd/pt/model/model/make_model.py | 1 + source/api_cc/src/DeepPotPT.cc | 3 ++- source/api_cc/src/commonPT.cc | 2 +- 4 files changed, 5 insertions(+), 2 deletions(-) diff --git a/deepmd/pt/model/model/ener_model.py b/deepmd/pt/model/model/ener_model.py index d9920cae0e..6488559bc8 100644 --- a/deepmd/pt/model/model/ener_model.py +++ b/deepmd/pt/model/model/ener_model.py @@ -55,6 +55,7 @@ def forward( model_predict = model_ret model_predict["updated_coord"] += coord return model_predict + @torch.jit.export def forward_lower( self, diff --git a/deepmd/pt/model/model/make_model.py b/deepmd/pt/model/model/make_model.py index 75ef8c5769..0d5cc48983 100644 --- a/deepmd/pt/model/model/make_model.py +++ b/deepmd/pt/model/model/make_model.py @@ -179,6 +179,7 @@ def forward_common_lower( do_atomic_virial=do_atomic_virial, ) return model_predict + @torch.jit.export def format_nlist( self, diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index e30a55dd06..081c91ed5c 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -90,7 +90,8 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, nlist_data.copy_from_nlist(lmp_list, max_num_neighbors, nnei); if (max_num_neighbors > nnei) { at::Tensor firstneigh = torch::from_blob( - nlist_data.jlist, {1, lmp_list.inum, max_num_neighbors}, int32_options); + nlist_data.jlist, {1, lmp_list.inum, max_num_neighbors}, + int32_options); at::Tensor nlist = firstneigh.to(torch::kInt64).to(device); firstneigh_tensor = module .run_method("format_nlist", coord_wrapped_Tensor, diff --git a/source/api_cc/src/commonPT.cc b/source/api_cc/src/commonPT.cc index c04e7065f3..6ded23ef96 100644 --- a/source/api_cc/src/commonPT.cc +++ b/source/api_cc/src/commonPT.cc @@ -2,7 +2,7 @@ #ifdef BUILD_PYTORCH #include "commonPT.h" using namespace deepmd; -NeighborListDataPT::~NeighborListDataPT() {free(jlist);} +NeighborListDataPT::~NeighborListDataPT() { free(jlist); } void NeighborListDataPT::copy_from_nlist(const InputNlist& inlist, int& max_num_neighbors, int nnei) { From 16a3e6bc5fc6cf7eadd623b54b3f3658665f0558 Mon Sep 17 00:00:00 2001 From: CaRoLZhangxy Date: Fri, 23 Feb 2024 05:33:53 +0000 Subject: [PATCH 050/117] get cublasCreate(handle) error local --- source/api_cc/src/DeepPotPT.cc | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index 081c91ed5c..f0b7c392a7 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -42,10 +42,16 @@ void DeepPotPT::init(const std::string& model, num_inter_nthreads); // need to be fixed as // DP_INTRA_OP_PARALLELISM_THREADS if (num_inter_nthreads) { - at::set_num_interop_threads(num_inter_nthreads); + try{ + at::set_num_interop_threads(num_inter_nthreads); + } + catch (...) {} } if (num_intra_nthreads) { + try{ at::set_num_threads(num_intra_nthreads); + } + catch (...) {} } auto rcut_ = module.run_method("get_rcut").toDouble(); @@ -105,11 +111,12 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, } } bool do_atom_virial_tensor = true; - torch::Tensor mapping_tensor = torch::Tensor(nullptr); + //torch::Tensor mapping_tensor = torch::Tensor(nullptr); + c10::optional optional_tensor; c10::Dict outputs = module .run_method("forward_lower", coord_wrapped_Tensor, atype_Tensor, - firstneigh_tensor, mapping_tensor, do_atom_virial_tensor) + firstneigh_tensor,optional_tensor,optional_tensor,optional_tensor,do_atom_virial_tensor) .toGenericDict(); c10::IValue energy_ = outputs.at("energy"); c10::IValue force_ = outputs.at("extended_force"); From 72454704d132de55c56755d7333cd18c26ab29f2 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 23 Feb 2024 05:40:31 +0000 Subject: [PATCH 051/117] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- source/api_cc/src/DeepPotPT.cc | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index f0b7c392a7..0383631135 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -42,16 +42,16 @@ void DeepPotPT::init(const std::string& model, num_inter_nthreads); // need to be fixed as // DP_INTRA_OP_PARALLELISM_THREADS if (num_inter_nthreads) { - try{ + try { at::set_num_interop_threads(num_inter_nthreads); + } catch (...) { } - catch (...) {} } if (num_intra_nthreads) { - try{ - at::set_num_threads(num_intra_nthreads); + try { + at::set_num_threads(num_intra_nthreads); + } catch (...) { } - catch (...) {} } auto rcut_ = module.run_method("get_rcut").toDouble(); @@ -111,12 +111,13 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, } } bool do_atom_virial_tensor = true; - //torch::Tensor mapping_tensor = torch::Tensor(nullptr); + // torch::Tensor mapping_tensor = torch::Tensor(nullptr); c10::optional optional_tensor; c10::Dict outputs = module .run_method("forward_lower", coord_wrapped_Tensor, atype_Tensor, - firstneigh_tensor,optional_tensor,optional_tensor,optional_tensor,do_atom_virial_tensor) + firstneigh_tensor, optional_tensor, optional_tensor, + optional_tensor, do_atom_virial_tensor) .toGenericDict(); c10::IValue energy_ = outputs.at("energy"); c10::IValue force_ = outputs.at("extended_force"); From 7b9239134e3597e71a47908c195a7e7a8e5eaf51 Mon Sep 17 00:00:00 2001 From: CaRoLZhangxy Date: Fri, 23 Feb 2024 05:49:49 +0000 Subject: [PATCH 052/117] fix error in no nlist impl --- source/api_cc/src/DeepPotPT.cc | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index f0b7c392a7..6004a320d0 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -111,7 +111,6 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, } } bool do_atom_virial_tensor = true; - //torch::Tensor mapping_tensor = torch::Tensor(nullptr); c10::optional optional_tensor; c10::Dict outputs = module @@ -222,9 +221,9 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, torch::from_blob(const_cast(box.data()), {1, 9}, options) .to(device); inputs.push_back(box_Tensor); - torch::Tensor fparam_tensor = torch::Tensor(nullptr); + c10::optional fparam_tensor; inputs.push_back(fparam_tensor); - torch::Tensor aparam_tensor = torch::Tensor(nullptr); + c10::optional aparam_tensor; inputs.push_back(aparam_tensor); bool do_atom_virial_tensor = true; inputs.push_back(do_atom_virial_tensor); From fc084db916ea0021f3230d5152ea6a3bf9e92fda Mon Sep 17 00:00:00 2001 From: CaRoLZhangxy Date: Fri, 23 Feb 2024 06:31:13 +0000 Subject: [PATCH 053/117] fix loading info --- source/api_cc/src/DeepPotPT.cc | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index 04e0fba548..265ec48af7 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -25,15 +25,20 @@ void DeepPotPT::init(const std::string& model, << std::endl; return; } - std::cout << "load model from: " << model << " to gpu " << gpu_rank - << std::endl; gpu_id = gpu_rank; torch::Device device(torch::kCUDA, gpu_rank); gpu_enabled = torch::cuda::is_available(); if (!gpu_enabled) { device = torch::Device(torch::kCPU); + std::cout << "load model from: " << model << " to cpu " << gpu_rank + << std::endl; + } + else{ + std::cout << "load model from: " << model << " to gpu " << gpu_rank + << std::endl; } module = torch::jit::load(model, device); + torch::jit::FusionStrategy strategy; strategy = {{torch::jit::FusionBehavior::DYNAMIC, 10}}; torch::jit::setFusionStrategy(strategy); From 93dacb6683a680dc21c9ca9548be980b37640858 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 23 Feb 2024 06:31:40 +0000 Subject: [PATCH 054/117] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- source/api_cc/src/DeepPotPT.cc | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index 265ec48af7..34f54fa8be 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -31,11 +31,10 @@ void DeepPotPT::init(const std::string& model, if (!gpu_enabled) { device = torch::Device(torch::kCPU); std::cout << "load model from: " << model << " to cpu " << gpu_rank - << std::endl; - } - else{ - std::cout << "load model from: " << model << " to gpu " << gpu_rank - << std::endl; + << std::endl; + } else { + std::cout << "load model from: " << model << " to gpu " << gpu_rank + << std::endl; } module = torch::jit::load(model, device); From 8b49cf1c8839b4f894f329f98fcb83edca9c30dd Mon Sep 17 00:00:00 2001 From: CaRoLZhangxy Date: Mon, 26 Feb 2024 02:35:01 +0000 Subject: [PATCH 055/117] pass cpu test --- source/api_cc/src/DeepPotPT.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index 34f54fa8be..89226ff4ee 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -124,7 +124,7 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, .toGenericDict(); c10::IValue energy_ = outputs.at("energy"); c10::IValue force_ = outputs.at("extended_force"); - c10::IValue virial_ = outputs.at("reduced_virial"); + c10::IValue virial_ = outputs.at("virial"); c10::IValue atom_virial_ = outputs.at("extended_virial"); c10::IValue atom_energy_ = outputs.at("atom_energy"); torch::Tensor flat_energy_ = energy_.toTensor().view({-1}); @@ -238,7 +238,7 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, c10::IValue energy_ = outputs.at("energy"); c10::IValue force_ = outputs.at("force"); c10::IValue virial_ = outputs.at("virial"); - c10::IValue atom_virial_ = outputs.at("atomic_virial"); + c10::IValue atom_virial_ = outputs.at("atom_virial"); c10::IValue atom_energy_ = outputs.at("atom_energy"); torch::Tensor flat_energy_ = energy_.toTensor().view({-1}); torch::Tensor cpu_energy_ = flat_energy_.to(torch::kCPU); From 12c279677d56894044b928586d3c1a34d47d2cff Mon Sep 17 00:00:00 2001 From: Jinzhe Zeng Date: Sun, 25 Feb 2024 21:50:00 -0500 Subject: [PATCH 056/117] download libtorch in test_cuda action --- .github/workflows/test_cuda.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test_cuda.yml b/.github/workflows/test_cuda.yml index 0d934e6d77..8e925e4a13 100644 --- a/.github/workflows/test_cuda.yml +++ b/.github/workflows/test_cuda.yml @@ -53,7 +53,13 @@ jobs: DP_ENABLE_NATIVE_OPTIMIZATION: 1 - run: dp --version - run: python -m pytest source/tests --durations=0 - - run: source/install/test_cc_local.sh + - name: Download libtorch + run: | + wget https://download.pytorch.org/libtorch/cu121/libtorch-cxx11-abi-shared-with-deps-2.2.1%2Bcu121.zip -O libtorch.zip + unzip libtorch.zip + - run: | + export CMAKE_PREFIX_PATH=$GITHUB_WORKSPACE/libtorch + source/install/test_cc_local.sh env: OMP_NUM_THREADS: 1 TF_INTRA_OP_PARALLELISM_THREADS: 1 From b390e6a372e2f30e7f4e788459ef30a7bd9d1f1f Mon Sep 17 00:00:00 2001 From: Jinzhe Zeng Date: Sun, 25 Feb 2024 22:24:49 -0500 Subject: [PATCH 057/117] install wget... --- .github/workflows/test_cuda.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/test_cuda.yml b/.github/workflows/test_cuda.yml index 8e925e4a13..b821572a5a 100644 --- a/.github/workflows/test_cuda.yml +++ b/.github/workflows/test_cuda.yml @@ -38,6 +38,8 @@ jobs: with: useLocalCache: true useCloudCache: false + - name: Install wget + run: apt-get update && apt-get install -y wget - run: | wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.0-1_all.deb \ && sudo dpkg -i cuda-keyring_1.0-1_all.deb \ From 48c1759883dee1e783d46cbfc243c14feef5a6e4 Mon Sep 17 00:00:00 2001 From: Jinzhe Zeng Date: Sun, 25 Feb 2024 23:30:32 -0500 Subject: [PATCH 058/117] install unzip --- .github/workflows/test_cuda.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test_cuda.yml b/.github/workflows/test_cuda.yml index b821572a5a..9fb11c467b 100644 --- a/.github/workflows/test_cuda.yml +++ b/.github/workflows/test_cuda.yml @@ -38,8 +38,8 @@ jobs: with: useLocalCache: true useCloudCache: false - - name: Install wget - run: apt-get update && apt-get install -y wget + - name: Install wget and unzip + run: apt-get update && apt-get install -y wget unzip - run: | wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.0-1_all.deb \ && sudo dpkg -i cuda-keyring_1.0-1_all.deb \ From 768dd93fb56580b671f4cb2e1f989385f5df0c94 Mon Sep 17 00:00:00 2001 From: Jinzhe Zeng Date: Mon, 26 Feb 2024 01:32:23 -0500 Subject: [PATCH 059/117] update the frozen model --- source/tests/infer/deeppot_sea.pth | Bin 193994 -> 125020 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/source/tests/infer/deeppot_sea.pth b/source/tests/infer/deeppot_sea.pth index d8deb94c93de05df446e61228341d07e6fdb2f97..6d4b0e2fac7dc9e0a771a3f52bc7c78ae3b10362 100644 GIT binary patch literal 125020 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 literal 193994 zcmeFYc{G*rw?9rQN-||CBr=sy5mIf@ppul7G^mszDUqqtEJaj8GL<4_O3095o9E#i z$8j9zIFnh5N=k-)&*!`DXMKOadq2Os?z;D{yOy)ovz~Jt&pFR~pS@rEwfBC#t@a4a z<>M0);`}Z%V6Ud6nRvjS=R0_HU59=S^lrG z<-hjq_NE%em3?LKsQyUc`d=Ua!+G}oS^LcT$83De;=?RH&gO^N{P^#2V3r@u@`G7^ zFv}1AJudw7^(;Qj;=?RH%;Lj8@!;Q||F`2qc{(+5M=nCrC?`=oG5bH9XWyT-&#ZsU z#>Xr^%;Mv0ewfXV{~iZs`N1qdnB@nv{NUf?!arZn;=?RH%;Li=KKv68{{8uXJ3jnF z|H5}&BJ01ae_8iG)W7^wSEv1NPlEpK{Ez$UVFezNC0_sI_|J4X>ii%cB1Zs-K=JxTw;n9s0=YLu>~ z*^6GfL&C6~474tTE&C;k;8~J+1Ya8kudG;Q-!{?>y=C5#`ZD!Ux5q4l)Rm2Mv{ohT zA^$+*b;f(rpLJt)zqhw>)KB=wI+J!-%iko{_>bd1Tj#&hAL;!M?O&g)a(tN(7rVWp z>zpNe@sUsM&{88h`ZtyR)t2Tf{r*IFTVCVb(x;XBx#=rtc*kJZi~QU+kQ>?ex54ER zKIw5zQ~UD^wrlTpOLm$BNu#N-fc_qw5*8A%Pa>h7LP*@#ydRkF=)~?mcNfg4uB%f^ zyKzoq%{LtQ`+wH|yiw!me|P=*|HJiLUU2LTlBR=zOZ@d-|6a)WU};GE-GXUboL2c$ z+rf)Gu5#`24|p=|?eKZ33^!{(Rog4qf%I!}Prdz~;-!tw?#j0YQ2geOogoH;czJH# z?u{8dAnT4Rn{OO~l)1O>*1HVhao!ca`w!VzoaYhfBR_)M6VpZ`e)jyI_1nquOZ|7( zzu|wlej7QL4X<6kqrZL2k=DUs6d3;Cq>?ko#N~KuVu8*Nr0`Mgde<-^#ih+{>hTO1 zH4l~jRT+lxXuc$;R{qkqGn?ZgRJu{}oQP!j+fk5E8WAtI_=mOdFx8kq0qqa)-slfUu^7H-APH+<6WAkKH6Mk8mvi`#DBG|BoL;hw{g+dI$ z-@W2p@NVq&k==eYFy7erh$+_w+rJM6ojq5EmzX~5MwOeuXTqKxlt4$hUt0GfKCtZ%+5KL25i|qndoy%AKE!`lf^KkdZ1#Gx=LG7TdF&DoUom=6zmJ1OgCY}za zTqt5+`7?Tqiz*|^@6SKx;%CRd)6Y2^d{wTgIHBAP3%%Yc7&dXC^SRFwA3qLEywbLE z+|I?V(~s3FE_Z_Jz?YHD%Qz@6T=hWXCj)Nd&NW|p2z!#-`+b%-;I(z%y~`ewF~;cH zAi1+0l#L6|WvGx*f|U{XS(OURuxC$`>zg3>Ci95?DH<;2c_!$+Y{Zkd=e{srLB#?| zi(MPN+VR%P+$qIfROqug+ZOw(5)B1U##*#~)L+H&HCr6a&=yovJ-s?CMtiE4a?DwP}^yo_*7G9&kpT4mT2XnYk zLU!Wcf4>6_Cs|*%$khOoh>?;|;$W82o51T0op5=<`vo%ZY0wdEt$O`? zJA|xR#;hG_1DZkV--&Py3r~&c3Oy!<6<+zx+#dEBQh}+3S(Nl~jc(Fj1+2%~b+d>u9<<)f%z1%kI z6uk-7CGYjD_aI?Ve)|Mw=cBOyp(f+~4aooJ@A#XzHuNj`xyr(z3XGezTxTY0a2c&P zXis<}hD;5oKM1IUu*KnvEeo2#a=x*v+BY&>@%q{MWugo{6F`2CT^r7Cx^akfJ|8)} zx237A4ZuI=>!Q%3WE?4v*!CAP|^3XRIHtH z9gbwL?fIBP#&h=;6g?29!)f2C9WVFO@vDQaifsrN^OBC(s)p5qb6e8EneRpTv3Jw@ z?Q_YXvUthjU8X#Irev~r?-&;)1qDx7#?kPq<#1fuX)>5Hdd=ceshF_h0;jZ|2lwjQ zKG}OSu`^RsYq=|6!CEg67 zO1n6;{3__zAK7Djq80_Ook~{lxrEzXoSHe@H0)O#JrX`riMIo5+lP`HA(bV0=4e`k6o+Ea=iAN+GF zUD7aR=LL_oUDIGI~%N*I8A%p{D57n4(Bk<`Y}7&$vG>7jGs#1 zazqo_@zsI>zY-xb$VU&af4{FClP3=A->Yqdr6LRdTpetMQ*^rcMGqQwY#=Gc2DPHx zV|L=!;wDT`d?Z|M+>YJhb-h!C?Qrs;(rxeXS`@qRJgIK90b2yuRJ$Ff!2TuYKGAM= z!P)`UlfArF7>UWP_R?s<4p}Qsbvy?nQi_irP_M+xl3(TKpC!RWd$5N=8VTcqU0UXB zq`{u=FDeb|TJU1lhx~}ZUNo$psSLHFpza6FBPA*O)XNtKr4LI3O znio5$7$$yVrs!T5#+?+I)^zQFn;Gt^>Qfz1qocWGcTESlM!Eh7*~P>LhWGBoCtQp_ z{`lh89tv_#EqJRN-3d#AA1RQeJJ9x?ai*nY2i$7b5;)q}hGLdF{2R9SLqVPT;zAh~ zQ1{P$w=jYO*3TMWyL|0J>p$+=3)geOuTWaXx|)l_YGvQ+lv$Xqu;1A9G#A(j#Shl( z!x+82h|_TPO6- z>3AA-j)tr6+nhbHx)ZlMna1`_Gr(NPe$Lv%43O{`D|r5a4)>J$j*n>5;JPuMHI~I!4F6!9naNy?~y3?y^ zEI7qa__T{{3!` zN1Blrsm99cq+`^0!_1aO8gBFXa^!6t9U{89ku~WgoO3wsPy3ZttWH^HCWSP3^3*2( zz%n){FHvs1cA5fylkZau{n~J;1Un@184JHP(7uLoT5zD-XHl~l3+y*FW$qSe#h`*` zYwP)F&_(YX$bwD`TIgL8!|FqGFWdPqdI&yZ^iWLwAP0XxvW<#yU;*81wb5k?9owBm z?&ylM;qU7i#sd{DIB(pp;hx0AH5+6Mh32qOE##{21;b8kI?)kTxt@s>;qnW*AG_h( z+?uR6@+=%0o)cOl(1U|>S{N#pENGKE$EBAuz|->rOXm#>mO4+^J*(njA1`Cr-l7+G ziRHItD6-J+`RA^;p)4p43E127s0#;0_Wy3FXToyMmCAXeJhYzUCNAPLh+?AOf_D(V zw~p}I?#}y6JQS{dC_%Fmj24VlZ`<6C@eUG}C9++hF)t-U@+cjiyf7>ueA9`=S2wX< zIJaX_XXaJs?JQhc{7b_kn2xd+f_{hXVS|*%Jg4lJ?Ra{^^Z3T_4*Y8*Ww9fj0o5y3 z9xrelXAZuqpnuFJF9hL<^%Z-fj&AOn{l&#{(|u5-<4?{`#mwhn3=OsNN#ye>Z>kzSbapw zLbV&@S8kbHA=C~(60EBt)^jmsQ~awxePzDRigDh8U8vaGDEI^o8-Z|c$TO2vm|)<(xl;j4 zw{T#tVIlR0K^NXWcT8gbT?Rhd6s{$g+6625zkKXlz=hT4`)&y}GU3us%U=rdU7+fp zmm7bHjTQsv_Z>b&T>tHw)9E)%=ya5}@+)GYer4_)0R|Vv_v#M1&*?_(3x+1uWH$6% zNN=%r?uB%#7s&@5yI{x7MQ@I)vvE1eyKq$nQJ17OTzIjchtu*4=uW3NV6#pScaQdh z$aL(HZ@b9go2vLw9UFm9xh#kJy9muzxKHNPWI*!QwQF#9C2krKtT8>4jdJ!cpODK7X|qf)+{tElI4vs_3vw`@V(YyEFG%N34CD^cE+P+X>05+D$|NS%B476ZAr?!(!cu;vEwyvQI z_uaP*7R?|-@lS<3F>yNfX9jFbYv{zk5{r`q=h1*Q7;rs$T^l^UVKH`q$fI4U$!FFj zG9XleZ5pny( zPCASniRMeq;()@IzjI1vh`!3IEX#X}9Vq`sh1s;A6QawS>P@5Dk?vYaG5@4d4n*EnvJ%D&FfUotm*~V=*`ijaxShF5WUxUi;Xf!*u+bTW+%4ZrGKu_PR{7`#*{lcO zSL$Bb4hNyk7}K_T$GM}vclw853DcIe$GDBgQW_(V|qs2po?+-#b3i<_+@VL!G>mV-1~-; zqm+lizi4N^yv@VJmcqNbBkwUb@dtCsn`~%1^1|KoWgZ;6bDqS%DHl)W`c}j5_b?dY zAEUme7`Thn1NG*Ip~hwVozwDZ(A#6i{jOh+%^Gi1YFhI#BL0(&&7%%HvHYu5iD3}B z%OxC@xO@_#=5KYW{h0)$r(}N{#dut9t*#mr^cMD;s~kIJaUIU9D#bn#YXRTU)nXUj zTCjg(g;M8nGE7}Lm!f9dg)%FaxI-@mYmHRgMP7D+-mX=p-^bfAZ1iV}>{%`1Y9j*@#6Z~rZ=W!QW7f|bbe^C+lllV8xOwk@wy1OAN3h z+4!Pa@z@{DBFG?pHA<-N0*NPmm&jLHkP_^=EzXJPQyE=dC^|~?pCnh6x%+U?bo+;q zVS+b_1ea6=x^uwlk=rYYtz1|UYDNpyWyAHZms|MvGeNo|^~MneE>0IOXipRFf*Ttc zHY1{JkR6-UDJAYJ`kKSSU%Oi|<6s>3>`Ny8VctnRtk4Y>sb-5ZhuE;lv_{+C4qV>jKKyz7&TKJS;q@Y1JIc#nx>ydOF1f zJ_fdJDP;5D=GGKddzD@=A6uQN*+<~S2HA)OC%Cxq_Xg)^g+xG1Xn{LmhsZcI~tI^US^+v}Z5#k;StVe_No;nG4ZbZC2{ zv+y3_KYMsDE|Iy=^1wFk;PGCtkPmJ04(kD(c@`8;qCc5ODXk(G_2Kg0Ys`8-GBLSh z-krq?Js>$5cubk7KfU9%{GVUuK;u+e-qoipT;k0+K53PMb1L1H4oI?bU!9<)$|oA8 z^P4E#4(Gyfni>-bzS8=5_*z>E2YR=44Syi`S}b>i{pJ)l8m-h)+(m&5X{^=wSM$PuV zI!b&Vb@XU(pcoG`uBC8a40G_c#CUJ#E20lG;or7ke-{oc=3lgjh<~BbJfHhB#Ja?P zYsM4xB5k+ZSVS@#(qH8zol-4Z9@w+y#ugQE(P+`PoQ}6y==}W3!6P?1;E4cZ?($bH zz;cT+y0?*r%6E3l+&jvHGoqoEu_ZLz=jX2ah)qS~xTK=IHSV|qI#GZ-=UXVVA&2FyQGx+L>=eYULj|7 zl?f(cE#)#gBvc$OYYpR(FkLalaEQMR*GkUclXSlwel7nfz9q934_?~*Zf|QlxZB>_ zd?>#aE`(BF{w4a1mJy#f(dad}SM-_fck4FXHZ{%;bEM(AqfL9tJgE?sFlL+L(S{vK zLEa(yR8%xiec=161u8!Luy21vhL%y`MlqolxcTmD$JIs(n$0f>`AliY^^0UfV@*j| zabCV%h0+EmwMpvkyejzx=$tA}~Ft1DYnYv88v{G}J1U*q=iuUicr^596efbRAs zB=l^jx}5o13_G92zq;|d8_5%4_s_O8;!mL^e>J=7G5SOIn>+Fq0B|QFv9}cW={;Q? zqud5}Z3+rqr5;24POXwpsuiev+NH>IWg~L8*iALc)nZN|iL;i`irbjMYZe-|0#{r3h9Z^t+ z9&U5uAIxt>y}Jui%?~$0?2>KtNRu|?r>>cLb*~cM{3*TsEsg}fp@$=bUbW)AxI9+{ z^A_YcaC9+rr();@yR7*{KR5c`)+2e^WN176D^cEsf-SMCUyg1jK1YW?C;VqM#1}1Z z=(yJe?>{swvbS!7y1=j(M^@1=F_5=Zhp2~1kDmqF$Pw28w@=8u6WHmSCAdo{xGKg| zQfg;8vDBigRHH3;pZR(J-sxgGV!% zExcW&kY0|Le$!g*r0ek5J3-&$n=U!^Bwy zGEU@Q8Cg483~cZ9!Iw=+!9dgC3df0z9!_hIE-a;>f6;k`sIVH8PQ8-nA(agrl)G4J z&ql%8#yKXh zmwcU#dSPjrvaTew_M7inrd17zzs2OZ=gTp3Jcz&WQW^N}IBzAtFB8~lcQ^Eow4l6x zx$IT9Vw~QmWmdbr0#D{F;#+&53iSjA1Culh!1L_E%+Wg~=qC2;{POc~&e6d# z7`bCEmq6g$SHId*R~1_z`z}L2V15&x0`Zm$#P`1)K5$e)A`>&t#wSsA%HZ9Hzj=rC z8ZbMxoZIq>0?HaGt8yBX@v;oR{212Y@m7rpiJoSV$xY?Ve_sbb=i4kae?h{T7kjFx zOY5Oy*;_r^QzZO0Z56|ZA}Kr7SW z(O4)2^<6#Y?n!BYJi&vvbe}cC&Og-n07HO!U9Q7RC%eC+s^v|8wsb3LI0ou6B1j881zhEwMb@4z1=3z0Iw9 zaj%rR#e1!GtV|jn@W^gMBjxuBQgXGheO=O)q1P?=sVh|N5HY{_o|OMMcAUO9NF0+2q)j^(fOFd~OMW`yM>g zsw)pjFcTntXrp91I9W!&Q&Oe^X~nxw2jp6DSl!(HRWE_}D!=~RR&Ph<%jvZ>hbZu^ z&-9D62pKzd2W+guI*Gb?nZ~|3ZCHDo&o_+3!zWJK+Il@iKmGQuka=4>Q0IVCzWV_h zq+S>8chV){v+Qdzu0{3WysDt$ct|67b=p#5YufPox=i8y4kV=d8mm9FCSl#c?RonT zkkLi@`dz8Vl^`X5*@kwx5qp(ypT7OM1|wp%e3zYXg_IlN1JQ_bX*9LK}dbS{!v{<~{yeC;=&A#ZY)4C*=GygvjuP z+K-Nuqt(~X@`lY}IM>tm+9^F^KAF8lt3I+E8>E+CSg43VRV~X3(8_~ao6nDI?4r;` z;Ddjc0inw=n|Fv4K?RM=Cw?n^%Yd`fe#3dG&vBc=?qz%t_2}hieR2IfUx?jqY{IH9 zf}P=)uZ))EBDLaCE~hXIO&e3>GxDEd+QH`w4bSxeh~3y#a4rYF^|VnQPL;r_F$tlW zksK^q;d$JQ9RWqJ=1){}N-;!_wKe17ef%hreqyYx66znvKK66Y1Up7=A_>aivYMS~ zI5`CZ*$ho)I?<=GDm%$KmV<$cZtLx6#c2Gv?8~37a{LQ^6OyY*sLT!+Kc!QEZ{_s2 z{_sym*?521YhTKMfAniOz33B;F38*ZYWOXlpGo>|H~9v(R4wodoi0P?>3!=WRu*8< zueXxEW&I!*EPV9To@U^C`6`A>*yV`1NYIrX%{b2_LMrrrB_upHpBBw+#A>nl8-+wZ z3u>1(-_l%o`U(Hx^z&yYkZ|DI z@(t?RRq$}`Hi-f83M>|<4+^eqffC5e+SNp)|kAHGmJ-#&?7*8Pl@{dVxa<&Z}rp-$N&t|oP z$%Q-fXWU3gnd5T$tSbc-t=6~~3D==}rrXZKT~$z!F~)nETZ@bLKjYv3^(okH7^?Fg zb|vh+>FBU<4~i~}Z0~zgf>rPQwC3uz;_cr~H@w`NA+pgt+x=NN?jMv}eC10O>`ke@ zGV-vFnD0dPJeVS31L=iSZCMpMJ-l7Kw6GP~Bn{K3oJLGJb#h!|KM91M#;;M=uS3Z< zOO8tGl;Rl=f5rY`Vh-pc@Li&p3<($Bn@LkzA@l)dr(5MGELBgp_#sk)8$O*oC2d=Z zMOf!Kq(R^7HIys7q6&a?inknMd|bq``t*z zAG?3P_aSi2VNIOr%am5^L3hzlj&1P1b5e?(P2AV5z}(JQJp%tmL~bJ;dCwK0WAsn^FZfTz)WK@}&shlUS}XAp{$~r6~ ze;zD+OhdIEj-cvwfG!ky$K2}Bjd6~oA>s^LeDT$sz^7$LIk5h?x~@WV zC)V)R%sC~}j$6Hs|9!x2hnPo|a-tsX@YMYd=XwGKJYQ&8E^DGde1xdzRu?AjlRDmO zN6fKplga~Q#~4s`|H3Hg77c4O`6Poy*m#XkM>FUV4WIt;c23q~z@BeK{*iHPIFQ^^ zew5q*!jt>VZj^Ab-N?FOLtqEEa~{+=7PsT=B8df>$-3e`pg$h6=W8jQ#IcAPL*e$vR0vzBgu%20qoH z+TM}3WoxMz-#_%}fCdR88Nn~orD!mJK;uJgT@4yPI38RjNyBpS&N-f5b+9PIw0=QY z2lQ(83_TESf!O0!+Bx!VsON4m96#NPNk83X_Vkc(I#o!mJctJOHwpi^snCeqJX;?; zd*1@gsULb~qb*n?csIo7Cl@VY{mAd`dJskpcCg~)e8e=`v^q@8@Y z6TIr0L;w73ffaXe%>QmqhO4ySm5c1DsB|U2@#wiWh(5@cNPA3$f{>J@ch1xCjB5D3 zVJR-Y^7_@)d5DZ$#%>1hGYKe(ypic8ogm8}n@Texf##1PlOIYXT&{mz`GY(eo@^G+ zu^p?&yx)TAh8({j?(20blB7I%4Ybrsp z_lI|*?OUvo{v{`nUWK>Djty>m-vnOiOasP>fP7b_GiKahsKmF!oC+-n}#zVAa4C@ov>0f z8_)JUGx~X`1T=5!n8evVML~z>VFKA@_~2(>O4*!7_z>fCgHInJOwi?qo_IWjNAf#l zov*=O8JTVNgpNtF;o=R(<2d}L;UzP7cQxF}u(ezJoQ%E)hHCn@k#QY!Wr+BL3_KC^ z#-xWAg&O%W9}nz%1rr5B20EEdSa95As^b%3zwvzYCw>JeF!!XU%pWo+-TAohH9H1_ z>N;9d87y$q@xS-Bn1nA~kCHDLaZo?uQn-S585TQuOeYb24x!cC-<{B^fSMp9TUSav zj_eZ~JHI0xG;24wCAXBp!tqlc$6Y?4w*dP`PG2!@yx}mZ82brxw+$#cLlUNbbWCZV z%!DtWZ^>{esVEt0W&J$$Bl6^>9CHajmbbLs6118QKaEQLc1G93YB70bGP?{6k|0?+ zx(q4SCj6J$&fth_)8^Wd9B6+dDR=#T70#X5rJpQPhHYmF`OTXwc2^TX(P;Bi;P{pA$sEg#t^T1Q68%5&KoTgmXMF2I_vt^%xMHU{tcNyO3d z)Q0i#3gjQ36CsjIL6?|-J=fIgQ7+v_&fmTnRL?7ama449hw%z078CWR@6RWi2iB3` zoyJi+r7#xcZ64o#){f9sq?3A7wQA9L{lZlNrDRlnkTd-`vl`oOCAl@I4BGau$rt%=E#7 z(}J&Sx~Smxm~;3|5Cim*&P=X}Ci)l~j(U&iQ6aawV@brzZZxoZWzr|bK)aJ#ziWxP zwO!>zM_oQKN1YdaUw4E7PnM=RU6g4B!;2w`73*29~K%Yr;qR~StWQXalC@-MmuY;*SeZ^>KWa_h&#G>LCrLp|Iabz%m z`e^FrrEb`0xZ_y!(ngrpD{85KO-IGRBh<%x8IU2`C7L7MjLzb!nli~WsG1fM)@bQP z`y;A zo%raITIjE{WK=)#F>x8uZ>Wmiym+-h2Oeqt^L03*9rzM+H8xQxNV`zgyn#zWqo(gY zcbB$8+o)@*j zZ&!(uJr6rkQSn2&>&{MCkmuYzG=~ZI0v|m%?!d%ElUD0r)l?MIDAIeS+lW;@>5C*} zyKvK~%mYVgoiG!BhOd!F#f&Q&bR_DLL+D7vBzs&eT70k2*jh<;xlq z8XE(@M3KMTXX9hxp>daOo!H&gQheqX8={UI@?{)pN43!x23F}UFjr0c@Kd!mbWtt7 z;C-_nMS09vd&5>dyEvf9#J>Zdui!gMBGp2PRE|Rtp_f_Pca$6ajS5x=)8E*pJ6oyXnwOrwk?3dp(Fz-qiSMs{ zo7?R2mjVx1d~?C94HTJ6=U=jBf|qfc&(1U|HWYYllqPh)EFsC^keehdTbwK#HBAHQ zK^41*(``6V_~2OP0tz@vlr0XEq@c|GfkWLvgRtyDeck6DBp5$tCf}$^%uR)yZvRxS zL8{KHvPm@(=#3vXxpb0-0uNh@S7wt@FT`)zutO_6sy=5_u)i5H92u@^6u#- zZ`we6PvpT3eH5JAwW}_20}0GwD(;0!BYeKOW1-R-20p)^mPT^z#6)4WL;JT-alMwn z+YeD~;HXzKbb`TvBZoiUV;^XMbI->3m2Wa|$5R=HzRfLQ?tJ{qCn*ZPKNh^gR-znM zwTX^9ar)udtw%*cYl->A>BPX~JR+}HYub}0J1|iHK?yGI0w<5qF>NXfog8Wue_Z5Z z;701L)@~NaAHE3;I-%2_d^}-rq8%Qb&$>xn#DGQxzT;!{40P5!oNKwE4II?%LQYDu z;lorcNj#2<kg@wl_siNwz=}?-qNClgejMhwE$#sm@%8tQ z6MbpBjE_n6J}h{?^txGDP9HWum4Cl6i-nfeq}I}%T=*Fzk#%w&52(qzZ)o1(0@;tW z(u>7~{f)kfUoY|SBZ+@q!cI2Wg{W|pGr3@I%nFDk=6LG{<2@XBTrB%Q$*g$QgBu6D znqRCWbSH8C7r0mZAZo~a_4^tQoLqcI%;a@1s$aR(dCiyy-+AsYckSh1Fb_DPX)$#g?lMOai!s$=UUyd)y7)RgDI22Qi z*X$PCu?QYt@TK_f%~J$V+c8rpKUfda0<_UbPOb1Qq|!ieK_w1+-TkWN&?ktyZohk@ zODP0ctrZmB(u8J4Cdyj+op^Rcy(aE%CI&3q)(e96kT4h#{3o&*{Pu0T zcEzs-Cw|MEtqiS$wW52qg4-+6$ZEf%zEcd8z3j1E)H4W1J~xdAIvU~et$p3J6r#?X z2@qaL%rMrGK(BO~r=3T-H9SHa0qaEkB;iaD8#SfRZf|}o((t(vESe6mFY$=Hh ziMleW3y(B`jdZV8jYS6rEnoUNozM?`j0+!7*iM2Qx$Yoh#l(7z_hJo%e*SMb@A9*+ zZD{y0nif({gN?N(E1IoY5a^BtJ;eNBm8R_Sa5fA7gv}vU5`EowK|Q+ar-(Rj$qEd1 zYJr?92RF9cRKr>R9TPV7U9ie`GCir717CLj8qFW(VcEew&;Imx!+|PV*{%#OzR6UO zI1|^2myRl}VodSCcg1HV3qsF1dU;1eOf&~b#f_B*HuHe??A;%gdmMBeRlHjn-35ws z3MRwWa-g8TdGxw7p}Q@QliEeh=NE|b2iczD;f=XBM+b?ysKo{r$6vM=J_pRaUiPdL z3jJvp0wTD`+j2W3S*aW9G=AS*d7Xx08HfEYJ!HUZTi7&sY5-1`da}J6TDA?9mj(`@D7>&E_(FJgI0nLYu0)!h{=o&P{p8iMipX#`bs7 z49F>1e_lX<2GbswG)9u>cznAr|NaG3*xON8ITB3ZU?4AZ|7`{`r#lu&>2%}8caoze zYnVvYXpePQq(HE;iIg_64`%h2`emP7+QBWyoAY3>0|!k(*+i$ zOD)EEG+0zD_M+?o4J~^^R_p4}agEa9=bF#ySWxt11u-?oU3TYt^u5@S>d`B!+)GB$ z8r?VC;4YMoS4`Vb#RSpTsFQlVJTUW9Z!qlU!Ry)%hhcRNIv1R$>`ClLH!@{zU=tnJ zN=pR`2y?-=b|kp_2L}@qegDYa?FKKEwi{joOkBIqH~NxK4{+|P=6={vg(gaYXg@#( z2TzFYT}teGabEw2|#yFWB&P>#PF%Wb}8CF0$VTDdd*1$f{3Ky+ko7Hq1x8}ivL0=2xjx!3w5fY$%F zODdrO<5~58oQ5e7)lLsw<=TY-9oLON5Wi2lKnnfB3L>5kRfws(5_*REjICd`5p$6_ zkFPxEaAi zrR7%}t`j=lnJG%O_wNo^a_*o=D7^||jyme>FYY4tb2^Nqn6vTTdin~=C>wo}ni={c^eI82yRzG6`ep`+Kk+4WS*j0-U@;n!;==hCbzYBl;)~+d z3$h5_G?8h4f;B|wc3z%(70%^AKOgC<;7&UJ*bpY;bcTrsCC(J#Iu1;~(f56QsRypy z^JVO9W&oe{AMvQwT-?dI^-TX$4^|qRe39POj&C=Z_5A81bOyS?_k7K|FmyBfuZma) z9Ef{+Eo^ZIR`dpR(N&Yt$5B$9wx5Wb@!Q$M13WnO+1ARfn2V+zQ(sozVt~$qzemh& z@zBl3PPCax=p2MjDp}0sz&EAQjgwn@;Y6T&{Ad6V5)NL>+xC?XE_)}|T?%5O7(aft zrgCAIkEuRyj0XkkdF_(|46K)vIj#DGjv?Iw!Ao9qu&?Q*+<#;K7ZEFAa4D1kc!!cfCZ3(1$Us zT(#o4P`~j9bAbhc&+n2&?`ra(OX}5<*KgU_wnwp1@-Yhs1{V4KD&hgWI;dV|MTUB% z5NeSm@%hcS-m^ckVL_0g*<(T{{AYRA!E*%flb)k#G#A`$_0F>E!Q6=v*4Ty zY`8Y`+4&lwpIIimalWa0Cl3G8G?I3w<4bW*qpg$<96F~xrN-*Sx3#z4R&HX!s)xsx zFDI^-Iv5}$bf1DVe$MlsEa-rT0hX6P?I8LHgL>u1VtAmTCAIHtcPFm*8+o+5wFh6% zuh-e5O~c_!r#4@ohaAH~x5XF4a(O(|?NYyxSKAE@Ena>;iwQrRc$~PTpNVRI0--|=Jg_}jN3z!G zg1VWO3Df&M5T2xUPTYrw!NK$TZfo&SNJ3`jttAiNn_cbc;q`%5v(1w5Ej@V2=|G6G zO&{=Y9#^bT<>6t$nO#wxgzi{2=biMoF04Bnx_HQz(2XhbOKMDTVd<0h(ONw&?rYz= z!+JFb4t*N;c#_VA2|;a1XzWJouf@=_}e3YEf-yXSS5YC-Gy&7raHpDb;3o4 zx5U-&3~Ui8SF^U`VgPxWjWwGKr4Qwc3qyGjtR8%t^q33GfRjB=I&7?HI9mN8tOrXT zJ^Ep>n}N!U4#&*g<3hJbHLoOtjjQHweHcGN1Ea9N1>gHvm^a}uaPUtpKFRc5`zVy? z6PC`qU;noQ_?=ZoREd1icW$EmWLqah1g=__^0fm`dw9M5QpUs3iJ{7f)mw#;# zC+r--S*hwtgG4)O;lyzw4%V#MH2)nB<5O;h=L8V@e}s0V=Vo!hx$el^H{UpTFMrR+ zLH`1@KP>h|V-**hzZiZlI>Uh*+5_LyuJ%Gw(^AJ>`7Cf+uHN~ijgGu@m+o&NTnPVa zxrSuGKzpC()>30!@RktjaF8xVNvT#nTZuxvKlSurY%WpXhrAV^AoexpZt2#hZzN;- z<$|BbM+rTLX1i>}*AmcP@h4kiZ#~xirmH$x=V9ClK12JnRXB5ETJXT3EZmY-@tF6% z8j|KMe%EMPgD+!VcK&@{gs0B=PikGS1NUn;sD6LiAhu=>U)1?(n0}>l=FYcr{4u9b zbWDeWQ;9EFL1T58ekM_FEW7~{FP6TxiD<;DN2euL{z}3K+0Mb`CJopSGv6>q`!gJS zxb3C#Vq*W%RS}_O+nFG5<*AuyNJABa?iu*Zg0xn%wOIuncvwpQj`jm$Uq!PBd%q2# z%M5cWbIhTFZ^`AoGOZo(X!=iYkpmMlfAMH>r#f-Tt&>|85d5{rzH_EjgAChCF2&6h zccI*H)Wt^scC>tORgFsQCtY=GkL7h@e}dD6lAckbt}ysU{&~#53$9di2eQOEu#um9 z`r`9WPzv(>ThvJG;|W>aocFW?{!$#?lwWJabtUpC+|dfWq=yGrH|61(t)@qB0MX|h zT$#H?A_di;C?Vau5ja^V3i{N_A-#L+rzF8TT(vG<#sI3ZH&uTwd@4czH342Cb2HI5 zRZ#8mE(+A_`042{QHo9^_rEs8yxZW$c=oEhHNb1Q>U@FN$7BF^L(Xmd0KyK6Pdpu; zqrKx|>Zc?!#y_>cG**{~YE5ZrJ@c|bYIwv!AiEMvf3Ia4c(=jKf}-`_dn-{%%pzL+ z7Zp{%8=K+QRy^cgs390h#@h!jHQXUp!qaatyFcx(!t#6>K3}J1crx*AMMfG40!%G8 zpC|TPS^Oq@>Ao(+bakbGLgF=@eOuz{U<(>Ah|f!JE`x@XMmnb!w4%dme@~;xN<5ci zr1}3)bl!nfzh4};k|I5iD$(B25S7*CP!qMkCt)xBZ@n4;6ZD$Iq@O^-Xxl0)dgxb{wD1{PO8; zCrl?jU75Lq2Ax)uA^{|?$)_Y};VQ)dRq&W=y2`-g7gvfu_G|+a&Xx1Krm0|hrR`=b z$ysGzTW~Zql7%;Jy-^&Ar66UYSNR(9_c(LTx7hCy2igpzeRS7#L$u)5z4iA=|H~^8 zI5E`&Kdlw7+8DQDhefjarWq<+oXx%WsQ44^_8O@_?^c3`UtZlQY}JA3b(unYC)#0o z+v0kyjl@5;(){9oPntkF>xorKPbEaWe(>R$Vhdhv{ov~SrUu_Tw;vBA`LxXjZWg+w z%{Y6>WOkH=fJHO9J1VbFQ4l8Q|na@0GbRQc;r ztN(MjE%6UTFJBSN`WgvO?iS_cUC#&3&7-sr8Y%EE&uuk#=?ln%M^gR&6#!S{3g&svNRIDN0;^CyUijv`nDCDqSod(pJb4n zl-us!mF++o4{o-OA^KonT->FP9pLD{ld5{A2}0DCe2H^wNB^>A`?u6oq3{kf6RB^+ zw>PK9x6Gsy<)-*?& zG9Prk+blkv(1o(5S87~%Sg6#z#NYv!_*)cp?bm!~fak5cnH|J0aq!POzE$t@p+=Zx zFPK-3IuEjsIdTT^(6?6ID|5s*;Ck-P<6Ig(eEr{UpTi9Jb5DY998SgT8!b@+0z^-b z9)G@nD-||u-}Yr!dk5w;7e-E!ob5$Qs2j(<}5NT?!>}Mi;v%?7|0(k85Vnw zhAlzs59qU+z*qL_f#NlEbW^ymKliZ(_LMGbvFUBX??GC#Ill(*#NQ)X%ktZhVzy3h z;jeDwk>tzynZX1_H^xt;ifVktH1mJ@?oT6gxPv}%hVsv< zV6Ih8czGiQ!~V#ry&D~d_ri-_c}3O3pw1hk1XVT|yr5gg?&`!q?}>$ikEw9tUiq%s z+z#9v{%xPMCYlFzNo!#zL4CLA_{+dVb#p)2tr93H}__8l*d1rMeJY)a!np-$VxD*+SHm{+A z-C2d#;tzV@SeE{$MAAoI+1IX{cc}wj)|8ug{9)sTicL>HQHWom%{Bh-c{=Fd$vRFW zKi9#R0l6}#x}n&GUY|gG0Cj_B{l76faJkH@eB(0|c$3obcylE2xy8^|eI8}tt{p4G zr&GJ|SzJwfa770m<{fJA$mj&t7puAH&R$Rr6OeChpuvx|7Vk$lanQW}MbPK_4Di`~ zET-yc4T^kH6Mz1y9fH2?&Ac`?fZi&r@9%!tf~)>?dv=J^P}qd_rk2bvCJpWNkI%PY zZd8@nSt=D?AM{N$R3LNjAKFQB&Fz>cdHC&|2n~0bEM@Ij-+{ZrV*Wc{KtbQE>FrbP zonW+MCZmRz%-8iV)vYIb{Vm`4Kc3xG*zUupuFGJ-2mW`w5BsUWXWV>7`2d^Q{XG_h?B?D{^4Ed$T3SnTbNS zU0XZTNxu1eggMQdIQey|MK4co)8JY;THars8I{ zpVL#4dy(MH=3}utuy<~IS%NJcrA57JlXzK>Fz=YVn&jJqZcpN@ZzmiH96b7IEel_( z-D1vU-djnlCO|MO`zCp(n>yr;M1sSlpagD1$L>ErUx92d39@91T=(C<5 z6H*%YZ~P=rl(R=vs*527OywUdY|UfB3QOBsk<~Pej`!7}pCkSJ_n!4awcT*)(YvKK z2U_v;BcW--Y7Rcytl&bIqv05RdH&<(F4%RX-FBAS4=c_^bI%XA!=wsrG?=#)Q;Q}d zexxx#%3jLD-=_^#e?MK8y{ZGYm}@XCU#DQ)v0#l3;xAn^L2KD!S&92@nU2RiYX;d} zRc+E!o%oyFXCCBSiOk&hD6*pyhBug~AMLBdi5oSp9$(4lbpZ5s+#vNAKlf2VO%uwF z&Hm-c&>(P$u9a15H~P409Eu}zhri|rOBCel!Etx87I*LgsJ?b@EflH*%DuvSkCoXd z9TNZ4n#IOX<)R|bd%JMW!I(ZD2^x%k5?=HBR|{I0yl6Zi#fCAXGPt;x%%AwPz4aXj zaKZLHlS!q$ctA;>za_5^XWxgMJVnk?iSqjG_SO5w zmy?{JK+??zM7J_c-WxwZ#YKyk&)0<;^`J6$lJb0MKa^e*@!l21Mi=8^z4MbCs&V2{QNNXnZd<~tmol_6$7|3m`TqoX5&rP4UTyD5bPA6 z`kKCM0NwAOpBvr4f^V%kn&Kok{59^$vP`{99IhAhUzSh{?dvRW9w7Q+Jn!s@mzwP; zs<8Ug>(vc#DcM9qY-cNWyId~PQEkMVmzV7ci6H#9D_&lF0*xSd==$`kmrXEKQzTfl zsSVs(ZKQ*uTJiT&Ju5H!I{4WlA-BJ#1+qlDO=Y(nm0*d9+t##63hegk zv_HN-14~~zTE=C3#3Pdb+0P%Nj+EG~yH z>iv4@`861~?saTrT^l~>S@V8VZx#9o3XQM=Utr~4y862nSzs{r(GxQAu=8F=#MMX& zX8+5Wh};kjr$U2 z#l^&z!^f0;+km_Ubwi)`upy)ULiw%Jt@!TR#K-(!ME{Ldf(}tSe!HbER>AH=+s=BG zl4J_ppO09q{=OTJ2qzsZisBHx^St`rA6;;NgM`@yeC5`xa#W<@8PM2Dq~z_3v7f!EP>iZ_&sVjqQQK zkl?%@FGwC?_xpNHdn_JvTXM9#6heG{8a%J9fS>LT!M{(JqkO*%|2kF{{B%0! z$eK?B>oEWAl(R)Bc4bU`Z$TsSc)SfQ&??9N1zL=4xhcSV+n;^$VjXOCR@N@gO@^a~26|U*-(BlT!+$P+VxBnC;HZ`Ry(dfR zVP*X7Dn;QQJgBFmE@a&Unxet0_i8gyb$-M`>Tox1yRoGFNE#iadn#^B>UYEQ*c08K z{0WbuuzM(HmI+o(2ag0i>cmmC*etVRGQU^0%1nK$acRj{!`Z@-<4S`TPDaE-oL4dH)Y zHSC`114U*fyU+!f(8)z403ZS#C_7a6I>Mg;cU;nV(?zq{Q9&g7bwqG#rit6Lx{=p zBUefN_BJv0O{QZTb}+UZt?ulEw;9~iytNJZ_=)SgGB(MLR+gndo^FM}@^)u^B~s6~ zxj3d6w!uAL(e_o#=#X@cq7iRSL-bs~j(V{g#CRTBA9HR3GvU4(BjT^x)OfVTrnm>U zs6E-|dZ!!rx%(`#C7hVgUaTQaa_;V3we(^U;f}3;>86oO<|pMN9ek;Stxza5D8F|< z@q75C^*o(v1_hy8{@#i#2y0joH?+JNE_?S{PakA~PDpa~muqy?NZr?^5?&7pZw|=) z2Tbhxm@A&-+=2f*w#w3EAa8&paTyiT0#2DXG+x?y1pPH(zk zzUOBp1f!pWuw)~=Gj&Q4IM9yL_B}p>JY7f|^7I?^X~#7QCToEB1ifrh&D^JYq2m#Q z%_~m<=>*rO{PIk+6H%QAd_;$0#a)WN+TAFdS)*d1*aW?=77qLt9m0|u``?8}^y8_3 zD@Wgj^kT5OT~yL>!WX!9%=Go$UKIGeU-Z^TqAO-g?c2`m1%bc6eQb_#k*7cW=~3xH zTs$8wl;z)#F_+{s7p>|;2K|w?gLXfh%!A`HUj~Uk(Al{?dH@UE9t(bE^}z|L6TRW` zeQ-~2uk|C6t95$QeYZGr5EqrJ-&i3vgl+dLD{9sbkhx1WUE$9Nj6Ab5zOcOy4cmnZ zk}~_@xZ-UiW=%gn&ZNEzebS2_UveK$<`TY5uCGTF(KR2;+!cGJ!i4tQvj2{^b)#?@ zV|(B_8brs}dw%mE^OfH4pZR7KoLrXd-ngq7_tbbE5SON6U7&@T!xARq;WMen@_S&R zf{(#oH+pOmjoz~1HtFpSb9j8l{D?JsbLQ!&mA20d(PswE&RVwW`{9ebQYkwE;S6(}? zh(mnv9k%(Nmnl%7A#|lwp#yTB^IzXsLczU(g<8dJjc{Kl#xhX12pWSdzQ`)K;=e0F zm#vkE?t6WGR)<^*I-9316?CHk?b*)Y=O5T0G^H3Q{DT53ZS^i6C-wI$-j_c|ZZcsH zE$6~lS`TVp`|18{R}+ZdH@~T!)DN6RXAhb($-P#*BJR9&KX~5xa87(N2Q8xclN%Qd zK*=%1a2rNH1_U(a4H@?1(~5s?cAwc$AbU$$Ke!)y<#ayB?I!+=4KKxhb+BLyX1Kd? z`p^sFmw%n_gIn9S@5y-72O65GXGchVCYV~kK<#`V%4EmHRNU>u3yv`rpRW%8u9+Z-KRu1JJA+(ppT8u z#5Uf#uJ;AI4{@%^#I&J%_+zOxzw2O|E!BzA8Hd(yviy{2IlvRX^fn2xY^_dD@0CK+#X5AA2%!~z8~%b8T*ty3uQ83!bVSj*QrM6^SQ?Nt2Yv3 zMV{{3)Z`6Rme_w@8{^P_!`5DZ-%>DN#G95ElM3>uX+94LD6;bD!cW2{f??Ic-UBtf z6(E@$J98_f7zr7>RB?o=2_(oTp%!HB!Qim39`-E9nKRj9KR|jztiaJI@?Z~K$ zy=?qs0JjP^&-XM};EDF=>+K&qutf30$3yDXK&e4$-31DszCz#lAMs}~BRTgfS9XBB z(^C~!(M~KMij|il=S=QqgL_JA+fm8!hfy|vC%*BIV76tFIYDk)oQ`}uuHBNxANQaY z4kS zZHKTsC-2G{kaMcq&nT;^4F(S$<4qQ7MIqlg?=#w5?A_^DzjkXms%#KZc$U?M*PXA& z2`OZQIbYJO`OgRxj$|~8ABcy|TS^ydzAXi7k+LV!8yfJ@K|$M=iCD}`nR;aLrWpAw z`ivjbvaoK>D>6ke7b1pV511|aTbv;`ZMDZe2t@Y&hz+}23VRNIU9jOU1rjeCW*x!; zcry}NxhVQAwrN}rmYw>7E8{$zOm^ksJokLiqtlttRi1EeAS>o3HPZ$ z>nBQsV~!PMet73~*YA8Rtf-JVCI1O%%eVb#@u6a|-V6N@Lvp?*`(E}fX+hUCGm%ev z-Ix*c<%=%69awz5mWfXYZztgk|5n1)4UOKn)9Y~uA{~?};zzmb2%a;i(>6pllSd;XxC6)Mw3mTadiu)~TF$@}3#*P%80r%Y@2q z<#pXVI#B5=)mHmE;f&fgObL26zUexxK(y|`QdG3?&6#36w^73ACC0SnW!bf&vmLBcAu)ie7&l;`&};~=*zoD#phzd zP}51^*JTU*miPI|hKGq5{Ozjo{R7!}XT5Ltu|K)+-F|{{Z$ln#T_zeV8eN4sPyIFv z20n)p;oZrjDV1>WZsIAuj#e<^T;9!8jfb{<8&3BYwn2zBEq1@F19aTD?mx7@82)pP zRWiSrk8&5jGcOHgLs#j;tD|1&_&aEk4mC3odBp|dTKqp_XwehfU!8Su=45)<3kn-I zaqn$jvg`#gjs4h%{$*po&H9l{(L5B~lN9&Vvm8{nm%d-qnG9v$78!fl*W+?!Si`?J z7qq2E%w!*uTpizqOLe+&pglQyFgCXgS^{qN^?puA8OhwbPnxZ;-R^<6M0phyKCUv> z=fuE6TJYv&C#xZ&;AxFjK^}&!f2jFfVwD??VWT0M52 zW*FQKDursJe|-km5f}1?)5q85qk_q>{>7|1a&b=$ zyt@(RCqyg7w_0n@$v#K}(Neq7)t7V7zFtz-%cBZoL$-YSq)f*@m)K1jfmN9J^L#eX z`E1-6LOt~7avJ!CE=}@s$p&`x+KH>YrMU1n>$kXfF8mQ|OnO0b9hQ2AYuv>N|82)v zjkN`A*!np+!ixAH8rrwmUCc&MAA8^Ll=lfzEZdfiO|;^+bG2vPbP7SN#{6;1)@pE0 zqg0*y{TOw3??{oQHlXgCSZDgL7dUVz?ET3146MG=Dsy$Z1d_vAq+YzK#t+|g$M;>Y zN71xp`R8`s1Rm3*FRmol<3c$|i?k_&c6;d+MoQKAaz&`a+oH$lcVF_sXiynuJBy?| zBHwq>(ue0R>D`9d6@9$2>LHkXLPDg4RYLv2)r}&4HMm=D z*NJJf8k8B$$Y<0yL%17turaX;AD{3J@m_#?x9TPjRub;eojikW^>CN;CSkjyt8sSD9vUWuHRGxX&yaqs~kzLYYT|I-TxVez5c%Q)Q!OpscNc> z+x1|HMrAJsxOiUX=NXgC9H_K7%9hc>w{siti+EH}vCRpPVa8jfo0dV`)*w=j|&-vQsGOzA!REkNJvWq9Y z0MC12TFbL=+STE^&0G|29!%bO5-V^bVYka&LprRO)i?zE2Jq+3%PEve!n1G?h&QON zK)bW8&#S+cpwZ)r1a(FYIEJP^S4g-6*SvmH-n7*r&87Ng)2VdWtsYg{g>CRm*xuJM zGXlS-eF(ize~*8ieyErQhTvxn+q#E@2lKDG@Gxw;Ma}5}FVCBOT+H@5dk`T1WWE zcqy7T{qnjN)`*6|aig#EVsYa>opb*(iO+rcssXv4Z{?Wg zFu1gSHPJ1)8*VbcQb1)Ut8sp?iExn8#vbOhLFO%6lg(ZAaL3nS($1nC$3CtV{G`#2 z%e|vj9(JzzAHUHX$JtMkqBdvDnmD7aNEM&K0-TF%S_55`F*&3pgE9$MC%VHr|Hl@zr>BX%A zo7px*j}jUa%w4gL0rPzMX8DAtc#M0=SCGnv!>6`PjS}A)(|mSLjQF3sy2Q?(X)495 zA+gVr547Ng1#hkLum)7)z0T5?lKP+UYRU))Se}!}ZC2VY> z!(+vRFaIoUh00vxP3(zU%{vngs-HZrjgh+bxb&8TOI9|3r0%j8dSnjgwfJ7) zapLO{9nA8QNT|c}%nPHZ*9>E9W$w}^3tDk!wA}YAWG}(M-x>QJQqKu*7n`sQZo+Y2 z^}tJw&9KF1$xQ9ZdhkqAkTFkd#ux0&Z3`Nk(V+0p2OFLi%+fwnvYc?0sNG>%Z>?J3 z+p-sPH`dpXIicO(T8l&+oRhndmRtpA7M^u(en$go!L`h%FH7LEQTlhk|Mx*PqxUb7 ze3(YQ-t@A{a{SmFO`X}&29|;{Z#GxgV33vbmS_LUA(3_H@|xA<=$QJKLm|1_obOll zGv9ThgZm#^kef*(Yx{DV-Mpn!V@Te=6$qxq7yC&`MzCf)J@D< z67@Pq+c89ZN&9YII{ADi_ue9TvtOTI*XXzDyn;T|)Tv z&X%-k=KQ-hG!p*@Nv-o*L(fDzgjVDm7mes_Ac0bW$g;i zUOL_pi+Jpi(*lz4h4X};jx$s0E5vPw@YMI8KK6cd@yrT8ZuNguFL-C5l8Z|8${IP?(+tnrfo9EP)nOUcBTizd$#P zjQ2lWYu5%x+pQltALxX`!8$xodQX^a=_u zx^7$=6a#(|_4@RUDJUPgfH!4F1qupl{}a>kg;X<^#`C%y*lHUhM=MN1PqT<@`T9)! z{$YcA!KGI)ETpQ=vMq&!pY6TJURHpM-TObord6QO^3JNclm?r|b;@K8q~ooT)l-=f zF~Ios#&OyA5-7=Dl5Vm76<*_eU!j;=f~!-xa>e^T;zQd#Z@D6Ms5XCOpNKHY>ufzS zqqL0h0mG!?wD;A(;-38egav8viT97g(P1juhYjyuce?{b_eZh?{1_*HbD&cY>nam|GobKb4qQg=16-o_F&|Xw%kHjym ziY}d+f+%~#qUZSXqdz2;G$ypl9`c_H47r61#+q{Yee8y_Wl&8Z9M*~(4cCz$wGBmaZZi*^k6;;Hzm!NAY! ze?6Q3PPoOBjd3S+`r*XNz?{2&9k4)k%X%GhuIU+GQYs0c!w%ku%k^sOF~mS}>HfG@ zsK3Kq?DeV>f*jopZYVOag4u1CLa9aHirkZ#gFK)6doYmatRS_b3)Mv;{Txln9s~6| zTU#PH@Zv!RpP?Vw1Mx}xy4c$uh`KICkNHeT@FDiTHfSE@}#PBa-utJsdzs<+cf1z z5578+fAW_|3!Zp&b8gabLVGIuaalV|jr-3O*)p;A zl;CAM{tgtqt!wC7(+Mv_y)pv`M}>Q-^i@Vo7dX^B`Y%j?3C+i@`1{Tge`{i6(3wMJ z;CqEPm1Eul{#CogSpQKm#`e0kv2>_A_I<+UF9){&xM!!h zvkBO9kE)F`$UUq(XCm^g6=W#e)=RjMbF+|7VyP1a`qoE$()aGfth~sp%T&nUDcoHA z0}mZ?xeEf^3rP+I(iz(qv7tt+)hUwXN3=eDIU7ly>xRyw4~2GfpgK`3D2;Hn9j~2{ zy&2sHO^h>}(wQ7st}c1^@7F&3>%Ck>Vkgu|l@cY-`35s+X{|pTb&WhB1t7?aE2Rph)U=NO}w@mtqabWB070sd? zHqir$6pw%6pwG&9D}NRnSj%>on3Hpvwb>)Q{bVOJ$=?&-Z%BiSylyUMrMmIqx<;MB zO*Bwj!Lm(nqr+{t;9WrSd-tQK_MMV0!nb$2eY64yN7hJwbjP+HC^TtoF`*IOXVPQE zN+kwBp8lZ5adIyTE&q7Vo(&NJyH9T{Z%2cH()(Jn99aDzv2*YQ2b8w|yW>UnzH~;G zTyT^|cvldgY#G-MkP=p3e{N$l zYJ6#=SQ1{&bp2hf!*(XV4!bCPk?3AjK7rZ=RWuCi^65^w(g?DZ-*x$pwc{2?8)u8e zZt!@|SmsQ4r(Rum_tG?mQ01|@IZcO(B_Z4I1ubUarcf$vZy*&6YCDp5xX|$Jw0*=`-$qxb8>gvMr#TM)|4=q6i+Q~- zCHWmw*COxoDUyF)LSJRQU>Fx|5;1OmpMW#wa=vTD>j>}jLsl6%SC^h$q8m(n&u2^| zJSb$2={YVRSE5n{lAeEi3+t*dh2|V%zB>okcCE<}p*G@<_uMz$S8~yE?<$U_a}B)u zDSeFr%D9e3CoYW*FWeydz`3@DKaRd)QR_bK_5P@AA2M z1|$?(amC)>f%(oPSDfbl*50NAo;?f?{v}3ysjsb~69(uIQ_%RNj?`nYN@#4&-&Uk0 z^C>>^BL5E7O&D|%o#?N4-lZ)RWX7p$#u`(hqhYCrl6Wm96*QR~BXydDtekn70NFpo zpQsi1j|mrtxSoO99WeGuvqU?ht?SLxn{L2O9HsYAOwN zHyv^2_iux>40^D@J_?#BE>b?Sa0t>%qo%e_c7odC#p>muoscB&QReuFiEa0$t4cmL z!Ka83*}$u9_@`X<;t=5_<@INu+27m-%TAb#M-cwN4WIg1jw1!mY=dz-F&gMl0#9Eh z&r^Tz_ljj-@&WbM4H8%%gzUY*wt;V3S8{rSvm4Mb2 z`kx;pH=kNp^pvAY^h;kOEA_X9AR)Qu+qLDTm>+WK_G$|8Q*HCgYA$MmT@o!nC3`la ztaW6F<7^ECD2J6dCe~olS=mhz8>(Pu)BGpPZeMIDxcWdot_-dgFg2?0e!;#Y@zO8( zGhmP2s?v>rZQ=Mv6|yg(m2mA^vK8asVW`yIzB_SkWS*SF9ag2ogH7LNw*6w`UYpmG z9C11%OlfDnB6|!GZv0sBy93vTP34TgVZ*6GJ_m{Z78sei^0#1X7c8bPJ`z$y_C%!g zZrSQVe6B*-btiY$!_OMM@rOoKnE9t&*u13^)!M7hm6H7O6jdm4NgxaDg{rSR2a&w4 zo`r&$Pe1%})VpN7v<{|NbRF(O;yacRwpmXj^SbmwlMTN0_*{8-Z-hI^{Y3w(Xdhz1 z?&^#axqNM)xsG)`FoyxzF?CmY;%FFSl;&0Nl?rusaq9vYEbK^nY!aVH!)NZ})7Lt? zV39@Lp|MyLT|KA)7H!&IQ=KU-zKC!<2Cdubn zZL&B%qRc{@CB3>U{d%EM;6Li|#Z1`ey8CA69GO?e{TpR&>cSlPl@c-7};+of8t{EDh`%=@2B(db-|tZ-2+OinD}$gJfGV(HrS0Z9+{B7;Dq1% zwSrq&_;kzt*wa@jm@mV1j3e*6!p|qKCdnL6xnk!=fgNn%q2|@Bo1&nL-Xf`@9y+#; zq#eGqjSGt}nhfdhAbuDgm@k~_fK$aPC5MFBc=T%j2NMd}PoTj2)$$a%Uv97S7$?5* z$^YD!9_pjvWQyLoV8T%=$-MdAZdoVpFAhv=B;1zuHx91#j%LhVWw*6mlsPjS6aU?HjBCrn!sTFnVBLgV8JQCb@W){adUPPW6=grfAL zb8W!eTJGrN(S=KQJzBK4y&lr!dv;T+DUdnPdGnz^9kVQzvIJY%SeZMR;$%zmS_NVw z3kVPB+aBHO^f$d=%5u0?tU~&m|>vI(oCHb=%fiM=k4R$P! zD%-i80XwvZUs_*hf*|nxx%r+2+$1xtD?)6fhdJ_0$#Y?CNM!iI6I{Z{-MIbd00T|9 zVOH~kWDkaD&`dPhV^LgcQP67A1qObvU(AxvcW8&xQw^nl{K+dhrqIF$*c96%>&J%G zZ=JVt^Eude{uZNqS1+z;ax=Qy%R$AS{8ZuO0Z9BdJJaYn2ptbTynp<+8>E~y#CJON zqo$OTT6cUOaPP!2tYYZ6@ovK{S>lf^_4JmUVAVo-W6gpaF=QXlTG4H730%mE`mX7b z!@}hbW4_-zI)OKKXzJRrUc5i!lYGan3-A3X&Q>CO5Y~q6821)rLEhlwrX5>35UbI; zf&GGT#e}rHwWPantsx~b=OY8OPS{0hy=8+qa~K-_^kVpE$cIP&vGB#HrEcFkCPrya z6bLP0!j-Il2XlnEuzw-XH)rD0^@_i3=XInL*Pk3+ayp3QfV~q^e>hMu>eny7^&1!v zB_02xEbTL#C^&Wp`MEf!m$}t)GY6}4Tg|PP6W+&SkMH9B99*}ee6Pg{4j2SQ)rO`J zzgp7s*NtUo-j4~&RpKizs2x-1S0%aWQ;8WS zQQctTR0vH~9L#q3H&J8P1D<2e0W0-Lem>%_Ui+B=cs8u6c%_UD|HkE`*Vy!dsFG;2 zO(x;m&2&01yVe7e&x^&VasAlczl|2B#YJ_6J@eM2ue@;7VC_P}E3hgu52Sl_!>uOP z?OmGWIo|$V?dAb4P8~GuMi;_0(a&A^yr1-uYm#|F@<@H=?!kX>jEPs(IirQ-9FylU z?TU>dzR%M~%8#Du1sf^Jm0ax}pgI<>{d2Gvsq%90+Mo|!=_MIR5l)v((v8~B;vDFE z&gcRDTwv2&`d*UrJkTP?=};KiJ2U-YEaxZ(L$$LUZAyFK@A8z%ebF5BoSj)SQ^dmg z%7B#@xipZw9yP7Z;lSVp&Ia)x9k8tMr)yC`7tAkh6;;^Mjn)UQZ&1wQfa3!dQ(0vu zOfA}%u%w_JJDlGoz9)Q}p+~8GIst6lu+ek&>TZ(Hyr(rdD9{IYTz|9PtYpDe>$6L& z&h_Ekq?p!6fAYC&?#r1Z^Vw#H66G!%;_I$O?i)!C>^F2dSGq9`Jx#i$Z;mAcD}jA; z>Q@4O6F7Qg+N=r=%<>!;IURxq1)Rk{OylrS_}OLqi^}1=#eizty^k31boSeyiVpQZ4VcI9%w}P`fgt5!);ei8q*+ zdjO$_XQt8KIG7_v{N(6mIoQ{n2!P*i_E^jTXMr^=@^)W`oOeB7mSJNZ||Axf*nRzq{m5pf8c#OhWWHI@r}I&oO@ZpA{iZtzmr}K#f8~}Mtf3j8$Ia-#hCGY_Ep03*~!9U(rBUx3Xz-N;jSx ziJL6jK*4=k4=gXFQQ?7NzLe*Zb{HKvv>?=+><3xjwm~I;fq~qFkZf9f{QNc!Yuy>Ux1C8I*-F&M?BXydfo@C)5u9sFmEO4bCEzkM~ zX^3%Ac0p5uGpTnjy_oTTavKOI~pMpl7sF`8we*%LXSq>IL`$c zAq$r37#pgx&RWdE5Pla|ubg)nz>I|XsAWgVo*_f#&7`a$z%&t40pfRksUb0$B{=}Q zHEI}-Y-FD9z#jzhbq)(G8O!NB;3M#eB zt*x@bnSEU_&NCL@tXpo;bG#Vtm*3oV)lY<@`)|2v?_c(m8J z(+XhOM^*ifk0ehVpH$iw(SxS9Wm?~dc46<05`(x2Qh#3v9N0P41)7KdTT}S33&ZFy zf1KRX2aBvY)QH7Y%r^*Ky_x6{GAc=L4dpoa-t0A9q?e1=Oulrq$8&&lO7OjSd@nwl z*ekVv8S%X@`M1$ii0s3aI=W_!8yBChQJHzC$;GDsw!9jB%)vA6{4O(TzX;JAZx)>1$=>9KYWRr-J&G zzFH$^Hr&{{S&}K)1D|MCu8m*2A=q#qpZ+cumI(y=8)k6e4gYXK9hE%ysir*K?<|tb zk4=>(IZso;H6EIT^Y!70KyK2%9&miglM%qjfs_w*OlAIV;6D>k=S=3)f={g)UE_Pe zU3Ic5afpQ{WmFUGRx;tT#9JRD-41eI85rF<$ASE1w7a8E*>FkC&f7nYi~C*o)OPX_ zZdcE#kD{9fu;uB$KL$tH*thCf1p8Aj{3Aq#Ui@wA*f(Tm?ICr@hAnXuts{0tI~U@x=G`~K-(@Ts#7+WnFP6+vzLGrzD< z_Nl5_>BSyAX6Rl&_nz#nYRwW4uOQERy`sa9KC(Yq%;llk$%9?GM$;w z3)i)-nfBX}^ZY;Tcq-QqAxYA8?ZX^&k3UasqW0sBKZ13;t+=ST_Pp0Cl>r#q{9(Ua z4XL{#y}WtHm|(YL&QO8mMEKU}Z_`?pgXuoQ8Jam%G`#!sUHdXNHofXRH9CykhJ7mTXiV7eSwCX zr9(ITPCEOS>)DOpzXu4W$x`v~x}9nFrrM!bFtKN(hvc_sR`l7|wShW)f!soNHzrm%7>CWaDV*0rC%sykL4uaHs*y+6!h5cF1TqBR&@?Zgw50N7e!J}AmS|S zTD-@#YNiK0eRR61aU|z%{%~cfU;F<^d-G_j`|#c0RFPyVNl_?@B4vo=CJjWID1}Of zCM7Z@6)H5DqELpEsU&Hj$ZgJ$dD!+~kEV>3qD-Cl^ZWC+&N+X4PitAN*0Y}Iv-kdd z-uHE1*Xx2=NwJruzsYrr(7UymMi%{llUYPrTQzVBaO&UCOHLs6#{-e<44&K!}1R?w(03F9rmie7vM0hV1p~zjd06 zFyRcVg;-gcICl9qt^EN9*Dg0tvks%6O?1Y2IWm`xD>jV`CsXnKaLDf!M|;3Mk)@k= ziHnv&W(lVx8!;#{H{}^$JJ@>f-BbSQzueN$shP$W^mtSG&lLz?o}%N}Ax56Ru2a9Q z0$Xw0?CYyNq?hKavv5>~P9r1^75e)T?r#o#!jXBV4Wwm6=dbOcqu5rTLKlM$q9+`E z{NAP$PI1B)+z4$$lL`s@pHa0~`$Vkg-}(j|{MzuKj`WFjn)b}UQ`-)jN%CG2VWfX^ zp_8ccu1A z-|jj_D&6e{4W@F6)0UGtvw@yrQFWva5+55-n9<~1vGriR7U5>qW|>`ED@;fFNXx>O zEi`QMxSngXl?e)7^$JTvyJ4=^Z)vr|El}EclxO{&fmfpTFWVQ<0gJpn?gt2Q2){RT zv{sLEwsn(!!&$z?2Ss@x^)R!WGs3}a_XdaD39`5G{VKnyfr|<> zg)bMsa4W_6JE89jbp##Uv(0GLcrXv&>dgr2P?uD?ep&7-d~xBjItD6n{$B?pEuCuUUpM}3esDgx`yZZPpVx@j@|I{=5I>K= z1*xk1w`Dls|L{Hko;Vo&>#@@kFu8t@NC& z&w=_Qa=B-yZ{TpOy2qL19(ZuACSpjS32YRkq=L5)f0B%%gi&cHJ}7(fabSKUyizdC z3H{!MpL0CvIj)5J`~5=VSHin~qcL*u&hG{=qP`8B-bD23i`iR!mAc@}$*a*BcS!%8 zNo(qknpz+o-MRDi$o*{nisC_%pX&dnsefZ94fhT0OKlZmVAz!gwUKQUFx~5FYS7*V z2YWAYcRg$)d(cCdw~cjR_zL&FehHE<;+HsGU)X{Mno2D}U#W2J^uk?kYssE&b{1nV zbphwKo>ImL4-&o<%H1s_dXxyKL9>qrb=tR=j;-OKM8Yip-zQw0%y@OykH>?%mVXBM zUeICT_A?ggvn=Qne96+XU;twj_h@eC;rPt5X+N(nxN&f;-fI&MEM%tcct-YA`7dd~ z(ylyIep%8hN%&?vb1cjzduWi6|FTPOFX;=6&z|phxf7Q8p3<6IOZH*uq0bA5zPR{q zMXt`?PK;~+yt{KD3liS`nPI%?2O-x_hPv-bzH%U2>Vys*F8&QrW4X8EA-nOgttBmR zMOM}18sP;$sZO)3RiI#0nGrRUF_D=qhscK28NeL(RPHh!S>bPw;w$^z`)K$DfxOE4z3Z9 zR6E^@!Adi&mHu?pzuqO3bg&uM&yCM=Bs_-P@8h;{8ZBse?)%EPf?BjR;@5LqO$FZK z%+52Ldthx$el7bT9WGex&P(xP;}?hcrz@&iq)kUPpMOPF~EQU?6yEB_T@qmj{4sf19-@eER*WL2QF*Td-rPwJp) zj;eOPTpJ#*$gA>{r{nj5wAG1|q|a5Zc6Ow=14U1Js~GR3!S3_bA>xdqG9q-^r}b= zDrhHL-@U3@2Ir1_`h3Km1}X{n6Hi>|#M8}PbG)hf%OXOQ@p;m*Wk@tF^OIymrZdJ%s^3m1=0FWi>r-i>36 z6el0h2?z0(xyMCiCLF!WUt3Lde4%pX$cPhc@b0_*Z)hFiY4m6bzaqMUyw0!g*_#}= zDg0q|(|$JE6-ph8lp%rBe^tYa0IW&p5b{0SjXK7bR_C!Re|e z`K8Kq@V(Wy{L{uxT>9)^;7|89*lu{*+l%xH(bSy6?8KrXW@BCCj;) z^o)62%}yk_;-sp(T*cdM7<}frfxiI-<3Nt?Vi5-LDKtrY8Lul~S0H*^u1=M>En&X8l~gecH$GZFai@gn#3!vc8z112`K~5YqG=I%?ks(8xj>rm$Ys{>V(xKq z*??+Fi~$!j?&{7{3+KS9CCP;rWZt^iw)T<_;h@~EoA>3O7zen)>4r=}(x2|D`?>fh z8?pq9Y(LE>{k^`I+_u&BqD}wbR}*<`bW#k>?Re7zOFqrH#|!Jm^6JFTx^i8xo*TC( z;s+aLj3l=GZT^CH`<`n(7a;Sl-11CkF%IgwjZ!X&_rQ7aBQM3aa`Eq5z6lYl~rW02!e7Znd+REk7 z4;H+Oq<96?aM4R7|Mv2F!lPb_(6B-< zl?CP(jXSqL>VhMI%)g>GTy)zgzG7Dn2jJ4H-~0S|u+;N*fu{i*pH|r`EaDi%BXxRL`u6Wo^^A-VpZlsOEc0S3@_`yU$%<>Ke7ukB2a5&rMPiLxa;qT5}p z3K!7qh9d?-yMGe@MoEv%FAtRlbdy=9D{!Q+r%)={KwtN^WVI{dVEXM{WU;RmKiQhUUOA72YrT`I z9^Yw4y#>XrH8sTN)@Zo-5Bs)uDV;63t^FKG{R3a&?I1XkAZtP%pBhkEZE3_du?wn?U`cZpUSY@SaLrb zIk`(rdy<0-!> z1*Pr8)4J%VIiOnJgO~Zs&pTug!Zoxx z%Df85AGyYtP5e82j16gDbX#%V@e2;!8!FLO^;atIa6QiNY|2a%uf~_|{_muZHUfQT z&Rb4?F%B2+bGYU74%1@iic5d!0IBGSy`Oa{aCG`Xp}RyYSbS{HACf~{P`_pCKP4)z zSeqLCKBfSzKFnqw(60cG#WDAT&z9i0amC5LM|qH8ll45KsRS)Mt||L}>%*Pejh5`a zZCJ85N$n5OKdw<)yR^-kA?H|x)7YwJl=@OYZY!`!m4q8T8bkZo*Ie&P$53=%$)S)XLQ(@uUvO(;u^U>M9=y!C-bSrVoCSR z9~^j{z43Sp=@m)rteAYI(upq3ODDFkrvOcU@%OaWZpfvJ88-IQ;p1PS%`UrGcu?k) zh2qm5tkYdKw&-g+e)wE|Vf9VY3vQ9Z-l9cv1(%qq2g&Q_`p#D|gK!GCy>+=sRgg;qn0TyoiL)jB z6XecfaSnm;{r<0;YiE}I2J zEM}0rlBPypCWY|M^t5arTD0S9pGdo?v|dQfmtR>P)e3v%UWXS%(Lu{3VC7YkCmR0N zC@7xY0gX*(`Tu59&}Vaz+r=Y<3)tQHT0fx@HWUbk`S&(JMO>11ZCfiutmeB~NTon_ z@e6S?^8IZmSGp|ls069au5Md5H9^vD5k6iC1rrB~BI$<+=i4wq#_A2(GYft~_%D|@GhyIkExNKhruAU-FZn+=9d$aA=m@6eP^ikwPYHtes zY#&=LW19<#gID^yj;9kI+Jxn?u4dqb_1jj^wP)*O)sZI9li6WOZ6`56q_$}zzW=TpDV~gzswxJR^mSk+#9QOZdp5= z%=U~fdqTyT>^SZagYd$=!~I;$$^N6>J^H;A;Z#jJm^K~ffo#$B4QlHRhwbM`3$+=;Ra?CSHSvLHljCsoB_kiI;iD7x-M<|)@ z@Hrt#&acNdlCrZt94V?TE+M=T;n9%rtW{i)8&Ec|9Ph!PpG<$65e>ZFDgPa9X5;k( ziOpzIhaw?I^7B&~@kNHOEq@vdqih5F4$KfAKv`bK2HO@ixqG}w+ky=v(Y!!sa-GU~ zp#*BeLjHGm_NNez#Bk}}*P3KbV?LuSDUD;H%JhRwadMyWyJVjIC8rhh4f8HOxk*K% z&b?YQ#JBz~Yva4~tC;X_VpSu3BjGja@TUAOG0?>!*IQ{04|gf=E2XWcAnjaZ5NU^daHyJZR)(e#`5?SG!e;dLw9{c7PuDh;T%$L%h4%L%ZO*goWs3 zRy(-XKWg0{Kt++YXEH3pt6|%IQ7y)(ks|B#5XOK zr^T5N_C%#*g3}F|RlK(}MWRD$h?J-hu9C|712W7KI<)?xmCE_L1#)2dBN4d7-;11eHls_vurWxq zWLeH8F63AYD{iY#*2j@vUP@c^eM8{4DxRRJEt--?WxGynWo%rsrNSLRRKOc73 z+#bhcVq~_Twxm1zvW8Ve^b4my-xIyv=up@D zNxt?pnJ+aCT@be9Av-w!^TI%KJ(S9<7QNtrHSKVh?id|8pQ2|dw;5!92w|Tl^CfkE z_TZ8DGQ3hYa3Gu9PkLwkF53n&@R()mDoH;!Xc3~5k39>&8{FF{M)bpa?J{X|;;XQ> z5iXA>`P+%ofrUG7vQSFupIJ*87hjEs=_m0_u}Ec4PvFMG`TpkBig-(!@?WQ@}D(D zc;w&te$E$77Op!}&h-1kg-bVwf2>%;#LnP5%E8O}ux35qvKFO}_@kdPb(e7T=ROok zQ#5P>OM?Tb%O$)`Uzs?=g_Y2tvpL!7GwFx!kP*mU(Uk(z+5g{+>MOyT1+B?2eFcj{SlfZrrQ3|EfWUO0}V!_<}*X3H~0xs$pcbE9shF zKDy|A$+`8qAA3(75Z`Uuf*SP?BTkVXp{CxDp$8i~V1eTL(<7f+FjjP%%s@5`=8iq+ z3o@sY`@fF=zdi~k_{h2~nQX(=t{!BTN*m}i*`jYD4m|z!2%ct!Ay#x9!OOEPpKRtUM1ndm8yaMfYKB zSwH_vG9RzygySO8-+bwu-d54LZkY1iBF16#!nq}(Yb88+cxFNWg}n}3Odbh4SoE+L zZy#WfUYXO4nx!pThU9+qcx2jN^nNcY8{aS-*hlmQMdg~fT|5}i@}IizM)p3M1x(BJ z-DLm&=!NtRqSJ&O?GJG4Lk9^@7$!cUy7h0{$4>NuRpSfuyS>DZxkPeaG09`uZ(Tau z%u< zrPe$@2An-n)uST9#+-#RcREYj@m@wk^_IF${LGoFSV`_Zz2U}!Pe=baNe+=* z)93B}rDR`wuak(L?{o9LiNEyyx(4kl65Y7BLD5%<=!FtjtHN`H z=y>L9%eI40xiC^VxN{3R-&kZ%ZFDC-*_f?W=RSYxK)E{t&eT)=P?}@cK2Nd-x=%rQ z&}JS4*6rMSmH728h07*eJR$rbmL zzSR5CT?1_B8Jh8oEbm6&*`Rp}DOH3c?K_|~OZw%GG*q0DaK(O;y@S$Tm7rO2?Fx_Y zGfG-i$9IGlBm8Vy=xUe>^}4o7-M)ncFR}X& zw7Uitr~i%KcC7<`e%tk;tt1tCE*}qx`9_21j+v;InTO}{3r4bIOMsW^^&~|*7#=w7 zd6K%I6|B_r12^9)g+%hEWcVe)jJ(u#8KKYUCAs3-LmeuJ>a(xOZEnE$gn8xHnn~_Z zK2Lv1d?)A)56$~W@@9wgFWSEIVS(JoCdZ*QY;<3ozWEB#ITsy|Ienk_stqeX&ARUA z0j1n!bmb%$JmN{uI`NGNq^Y@W3+CdTsfkTDh;O4}OSx`<6c7e2J`C8fBDGk?lrqR=DQ6G3#WAFFCspP=pPkG z0X8a%s-KY!Cg(au<8=)z(yOshbCLOiE|`16^jeAy7lJb9GDoWkZ~xZnq;%4ox9#@w zABso2@zV0AuFR!uyjuU(`CAhY7M%V#=SLXnbLwd97u?E#U-9EDUnSY_(6;rkcLw1- zxV+K2Tgd{C+!}_m5EX0}Upqg4J_Gj~TN#MI;Nhv8lzL+=Ca$opZ#zQXf1}UyM#s+f z!UgAFgR6R2u*YlPgmDZxcOAXP-<8AxCEkUh`J+VF7WTbeG)RX@vn4^y{`as*N2-L+ zhl;{$LqBdm)sD$slO^;ydRS)J4iU(&sfEK_^vP@SlhYiwI>5N7%mMEA--vW?DkFCCtBc0 zlR#)_I0N4MNVPX;w}Pk6-^U_EC-bZQv-xTV3qQ?|u;mvfT&0au!v)(IAf|t|%q4({ zy84?qIzJ?E&u#P9H zpYBHbQMp{}htl1!@69%WrR08ic1A$0oZMGd9eerhW;WpwPxTK<+~+{}Pg$L+7A8uv zM59`>xrDb?DrEYGgX%8?e=A})T)FEW6Cl_PKfR6?9^OQQ(oaom{*~}B{hx^VEwes2 z^!YC3ss^M+&_>WX3@h6EMsS7=%-;G%x*dlv$ zd2ow$Uhz;!4?f+KEZ}HL{7JV4Xvb4{utsz3Utx0n3f5em{YCt4$K_TjZF3;GI^T-h z>uzn3sU+#`4TyBKeTR^v#SX9 z9us`0wu1>qhe~Gw0y(BZ8hqm;gn-VU)aNk9{u=4^3Tqa#p_{i&cq770j6MFIHt+*kr zdM<=$Y<*~!P5j=Qo~$~S<O|3ZV(#c4)T0bUeqFfz8I_9+$`nt>(8Wc0iE@^m`k? zPn5jg0nyigMzTq-UcUN&Ip?mmX^Pe4{k}`o>gfyOSIyqP;Pv=UCRX&B-z*}$5t%DV z)t~Nl0r%}$Me3JsWH&uOxq9t2 ze9(1AOcy3R6OevT%*Nc<-9gE4eCu8=N)%t;cjI_J z+Ipp}vCVHr&9|jlB^B@ac2ObL|68W_d>U|7EzV!| zB7Jw0cbE&GGw@Mk!t;4b9XMTkwSSiy(Ix#C9b;^!fsVR8v(&K@hhMgB8EEQ4W0eJ5 znp6w4uYdfdLyirz-#)CBE2hAf_~2U4J5~i&GZjj2wsYY_ z{c>uXST`2-ZQCWs?1oCwXXVPv=ulHHD0WzjgVUDjVX1NC`rg@M{()Tg3oB9=O`Rov z>lXc!vFCW8ZL&Z{<^uzlv}Oq8^0V=Q%=(l=Hsl;Nw0KV;$<1&dW=f?JU!{Yx+{^=K zCdP#ivqq_0T)fcPKjSe6`=jrKCF?Tb_^|>xrvWl|_eCwcLH2NU3jcImGTE3K9Ti)3 zwi`WZYwT1LzF^icjn9w2ft&+H&Y8?<0+x}4qdL^%Rr>O zv9<+0mvz%SHZk7U*DvwaN5vLkvKhoiLo{Rw-)ISK z&p#pEcQ|k?>Jrex%?!j`!o8eAIL(7jJ#U3)G099YPKXq+smA06WXoEU+^Q>R%((hLIb*WwtCPK2pxyzb_fB@I2^~v%4qhSLzAbm=x0i zE1LNJDHHC}FLQ)|L&-$P{3oG z^uu8RHnce0`6ez&dOB{N9Z@BmqKKQ)TaGSc;bb#|J4O8AYH>#@dQNmhk>E5}bxRlU z+4Tf%CFk9zk}j>u`#4aXB6{~7*~3qJ2wxWuWP|LtWo2^@b>ps-;KjF0tDrJQKgiy< z5@LU-sSqf&qhq=fcCDLg={h@35IF@HE)m zTVC}J(sMi$c7_FlXzU8pafci{v{a+RFQyb$FO{8ieOCikGOE`P>?D6LdyC5tl4Eps zva>ubmH}B>1_KSo)nJi(^e4|IQ5T-@gncn+KQHW6N@@_td7LCx;pBP2B zKJtuJW>zyWpFfugq;+D0|H#*xe{@Lm7;2c|HiF#B=iU|aO!T*@i`UE{yp@gjx$=ac z)AxK#R)f-oHZ#A(IO=SmKGFPkB8=qVy8nK8Ncb-Im$*{(=rr*E+t|S`!$ep2w7@Yh z!j1TvF_ld8+E532juSr%zfnII<#c~Sm0Jr%*8gCk=c;vQ+sWs7KHn5a{5i>gO?X&c zdEN;p8%h+^$T@Qsmi3)6A^Gco@3O}-=_s3UA9B4}uug5pb}r$ytQ*dV%RS13-u}@O z;Rm}R=t0R=o<9p4&7O)Uc7M*w3v4t=Z~sao{%EBqR_&IGOn9Vye(LppI?VPu zi_6^Mz~x`wMUI7CP)jhDRKka{cD2eGH>AMo&maH(CV9T_-!!WnXBr+m!I9V8M*LzY zd)vP&_TbQLt9ESy>EnKIwyn^)2L#m>UiwwELuK>gyOOS?N8Bq#Mbw`Qq1FOV)*NZY zL+Yxt+GNk*uyW3eu1l$KV@H&a-1|iEtto~ zPls$Yr-j%!qw0SCqk2zAg%9rT%l>G-*>^j7Tk^uW9 z0^$td&-x*9xSHe+T1#xDN&Z*ebZY%sMK0FQ_Y7%xL&pMJ#mriJF8uf~QXLaX_WhYJ z!atYLAl^D-mDznZI=DR!*Bz;X&uP6olni+A)%fDAg^IoKUNk{4Q=El;COw91I~LTf z90*eh<>22|B%zBo;C>yypLS`~Ou z^!t)rSRxZ-6IMJ)BXdHI>$)Ao?OfPU``D_ktR16wc+8X$U3+Rsvm(*q6Re76tUOQl z#7S9FKhChoIeyw(W{l_?A=7_kWL&wh_t(DT`)Mq+wjK@csqev2KB=uvWL~(jKxd5f zBf+YSS7rf8Jy5WFxLl9)SqUw4)8OCTjYVGjHyk4WJ%TglFwo0^sYNFeb~^L$&G8Gf z?bd8mP}Nr-L>GAOno#aWo(J-BgTI2hLAWzm z|L6wd9R1^mn4|8RVds#5F zO|DzbhJzE=sxC>2qiB>YR;0I7hV43NB^QManH z8=`D(jEny3hV3~ge1ggOTb=z#=fp748LfwXwTXYt5;X&l~AS<654)P={ zALQKa#-WgkIf|8Zyw@m|5=e4QT=yMsoo|yp#QL&($2V|rPF|m>#Z9tTk4}Fo??&dN z4|UEhuS%i0bBTz>B9f1(eXG;EgpC<~cFiXqad6qnrGNh1=i;{?wNrWb7@&9AbgC$Y zi_y0ttYviBkZ>#DyH7vq#f!Vy=%v^X_u=QD_Bi2t1|B_QPIzglf$IZQ@>>xeW*lFmK8d3T-KWk z*+aB={WGMGKL4w<%yQy0sy|*)LGG_IvE0=8WG~%y<=)pk(mVL((VO_{=Up(IS7N+F zmyK3?1A@wvnlb(0>EvbC>1bhfC)_mE!qHQ2Uqv;+<(q8uRqi?`OIJ1sJj|6v`hw|KAa=G_D$@8o`@EUiOznS!rAO?BA1L*UX$!o@6(5ZnfD zN$=7^@4(9^I>BL)x!8$c^^m{iG72ti#5qyZfEkQQG0M>FB=2$z|xKW)gk!An6N^m(G~IBDFDIhTj!Q{_uQnN-DYxlOnc z3L+nl%2To9n5O>z3gWwI@7JU}Bl~5`^A@7J2sbjsQzUgU*^f`w$=1p>K@|7?9fkc( z*!^1kWLk6!=x!IhYrLWs*^fWC9iDE5#tVr%&3j1?!Q>h~^G`&7o?7y1%&-|`P3+e? zE3$D;x{sOx$?MHEP(LyzLtf_+ZY3kH3nv60Dh&qn;E9A=xfO*2aebZpO^Cn2NTWd7 zHH8KHSL{3Vfb0$9w`XKHs&XOvvzRe`lISz@RyLaSQIRKbIL5WS7|Ziu$GN9G-2Z2B zobYKjwC>hrT7iwy|uP_n4Sj{I0~~J?RhT zJ)Lruq`~h38>4IXt-wfq|G`0!Jg4e5y%bRBfag{9*oeNW#7yT$Ey7eS6vg zUJA`;M9&faW8R~kf&L6E%&9r>i1_;*{x)t>nkJmK#V2#3aQptw(8xQGdCA5m$>2p4VTs#K=Pd9XtDht&?E7i{&9 z%u?mDF?kQ2=|c7-E(KHjF4K5~voN>l>l(6;%lqtkZVs92giTYMZ*akm-bs)8&Vgp< zC;hFz2sb1wYs~$359%4Fr}XrZd28C6vFIwvSNo$nsmU39X%qC>vyk~IGDe85FQYH314ESP_ z)PR4?Y02E}h_PBXWsXHOVdHSvYr}8PP~K_iTK5 zbLAuKzqrR*g+}_|oR@Fq=aqoWVwJgVi^%-D_SLo$We!k}d1x=X*^X|9)ta|doq)mN z{F%*}G#K-^6s$n_&QE_emT2(WpyKNJp~J*S9rWIwe`1>K3vFyY=UnMPkuE+pIl_^8 zC+_4;*K5Ul*_`+}`ZTyx7%_W;a3tSUJnv~$qG6-r)w~F?X1MUo*KqhE;*Ids$pvdj zf5f=OH7%QV90B=%%g&Mc-C0~tFp`2}?*b;-ifzEs{5JK(rVSV0jQkb5oCV67L!t|w zvQeTZ>D;gA0+`z9xYtjbaDtjAP4^~~p1tXjwP&_;gRca=Q1J*G?SG3nUOq+MKkfPn ziE9}kWwW)KJ)h{Rf==>UcUf4k(*Grv9?SBPc27?O1QjPC#3mu>wy-N zBdk@`fl^7u4;-i3U?f}F>g&Z;Jdr)}>xmiJ*U2ndsI#pJtcKIH>xmCwMDVk71-buu zX$Q(af(E!7IB$vf6a`xc%D%__YlgOB_sgq#zrZnZ=eV~E8c@WNO1IZvStEanT2-CENDG49s3OM0ltWlZ!umZJkdSKofA1P|xDdA^V_ z_7yHUW~obTYC_?$^v!&h92hTrc|-366ZB;?#(4L*xOT18w~s^JAZ{)r?t7{WH^@-x zm+5fv;={-1{*-rv!PThNj9-L*W;g!87}zl2Q2eKAZx^U2&DXw`K)6tK`upviNS?T8 zgZmP74z#wEf`KC8LQrI9N|!fcLw%z+a~BgA@SF^CHhWswB zYVl`=i=JSp7u`m36q-R^1D`nn$Im@MRe8Y+jp-76oB5YG4Iw$H~X7m4oZ zd95Rs^gFZIbuS(Ix#&K&@4Le;Ht|1vOj}CM*L7mrA(P0%$yZLaS;8y4O_{^AcO-d@ zii7)ikvx~Mi_yE5cPvm>*{R)7$i!=f`g5!8Sa{S}H*Eh-HZ=F0&%Pu?@~xNhkDTl$ zJh^?VuxT|HB}2{(FDLp!n)!@!LnsSdE}r~kol4Hd+&Kfo{v6yoVZQj^5gP2-xp`D@ zE(3dGE}Yo3iVB+}cfTr|B0l+(%EeZvn{auR%Qq)G3Zy^0e)ifh1D)&!)b6X%z?v_t zGn1U-56nI6E>HB}Sky8-_N zvY&i%{D#)P&umolKO;4g)CE;L=8TV)TebLuX>_-$cKU7?F`S3s<pxR~Xr4;v0j-TNs_^u9ykDbHMmxp2Wq z%Ii`S2S=4O?F1D%&@#dORd`1SSQ)%qIvwW&GWSB&>*N@CFXo~A_N5FsW{_y=lE*+u zIVA969uv>n+Gji>dB+Pfg6=Qgc7f?%@s7WwZ&Wnd^(22p6D*ny4_iZY83T$#{?fZt zm{-0daOeULxe4y3FAVT7Hy1Q> zBz{TS3+>ZtR4i}m|8vy21AY&#%irZfaxb{OSMqOPUY(Ts__WT`n9y@9ym4rs?eH<*2E@bK4faqyO_?YO6MR*_<7RP2D}I zd(?YC10_{pNtEGsnM<6pC~$>+OHPFgWjAU zE8H{xg3oNHr!@6B&{MA6cTcT_U(H(&ZXYT|EhVE(E|~(x2NKft)+_KE_qj%IFMZm9 zyvWT~m797|WNZgbKcDowo6yp;pI5=QghHNW^)J*_sad%Bl%R1#LbFl0R1OHP5PtTR z_5r>(?Oi>jK7gVUcWYndjs1Vu@8qJ3!zJWu{rB~MzJ81NjQ%&*Piw=@Z3h1j7f?gP zP*-Vs78#x=>x|wDmK<7LGT^JmUs4&-#c|Z)H`e!G^1a5MzXUd4jlXNfZ_NKAm7-Sn z56m1E3Llx_E2+HF_I^$BKb#5iy5f6SsKmzLkVs%<||QD zixp1aIExeZ2VCswg2pN{B0qgz@ELczx)jQRfbn^QwY#55@Rzvc3{ZkcXL0^D`E3HK z|L}0wpi$lzKI1+9E4&wt@t26cj&3*XpM`~|UZwDC{^5V`zn7YQZ~w>FPwW5f`hEF& zVEOkg0ww?b9Ll08GylEu|NHvCy^gy7yVr5!&TSk22d|?rCF`US(fcZ=dJpTXw&ST% zzUEAeCYV|3eSG>g$(g-p#gGOKuw|TqGbycjd83D_R(ByT)3>dh)hma~9#iYeNj~Cr z@5gP4o^)VzR#W^JbYf??-XcTNi!t-;T$aBK(JyzN`eu8e2`kEGvcw~sL36D!#^pqM=i)*n+pw-cyPJ^eP@ zM4o~Iy3chkFV6*UX1bUxhny!>m1Y0gHe=gcUc`sYHkgd`(+$#~V8BMdQ=>P?`D16v z%`4-COXT+BI&+$dSH3HsJn@d~3wPB%T}Gkx=`9q-59J$hlN6Zg*BG#Fdb0ckUV2QS1E9s0+KXR3r>IyH5n zIcHrL5MHyY>E0$RxaxBL5j276p1+kY*>sXWnJ0AgSu<|@khY-dbqh#T7j%{oe*LFa zkbGrn6V8s8IcEgc;g$B&3FVm$U?Hr`Uq+#V5zIG8nQp?j><=X+;s|Prs{^J(Da390 z!B&sIgY=Os68KI0b^}}29=P|FjgvG_Hw9}NiUhe}?sOZ-oQ)`OAUw-g?tj9W7a6c^ zQBv6M$ab`@QP}e|um=rmlJC7g+zxjZh1wbxb>i}t+Ooco78scSJ=^ekC!XEvGd}lm zCu~pEE6VHXfYUZUj^7CXqP*_*z^HqSby&7dJ@d=NMM$1z>KwasXo3tVEfy_C(mhqa3mY?T4W!DYkXmYROX>lBE4QQ;zkBnKUAJ1D-c4b4OPD?@BsaY;_DM(^7eSZN^MclBp8T=i9b zvW4gzv`_WFU*93UI0o|w@TwKJCnl}_L3;7_?R@+x@)!lzad!5b_O_CqDiPP}B(l$a zxK{Q|MjNQF?HpFnYJyRFn~#0tUs2g}#QoKZb`bMXH5JXt@+UiiRju3eK97m9z1k{WTc~7Cr7WFus~NV3l6&M>u;uNCe4C5QWl$?JCRtY6f+PBiL?`RE5?QrSXOBu zaDmr?qD`AdOz=;#xDfdaa|p zF`{C^p=IbfRl^MO<|5r{d5SdTQaeW_TjvyKC)5!Xs|C?yrp@oSaQ6wChLOpkLzS;Ka>F z)J|D&@ks~`%H}&hRQ_Kaorfcq@7u;HkwU4IQDhVqEh3>)ij1giDJ|_%q(mj8P$`v4 zvl`F_{O8u--d-=Iu+pHBy` zde8e>ivw4`_})D!gpaX>O(q33n452~rQo~(wuQV-eI;T-TZls73LDA;*!%^<<=Ald zrMRrNEC-DC9^9~>_z)wBJnJ$I9!`x=H}{BPqhhRa!?nYdZ;W}|ombef_`c`c;e(af zDws2RGmr~*k_Vz*$BW1pJ0&FYI2Zn`;f0;eVPT0E$L}AL9cDxK$%)(Cn)s-guhpA*w+>ACW=nFm z*JFID)$?nn3~XFipLxTH=9n7GH*(wA=&Rq+dqj~!#; zi{L#{2E4=8@})(%6O zyFNC0`fDrYTo}qF$4==N!nqGY`dz6!9B4WA#_=)f4d?Fpv?PWN6&)88J1O_Nt;~ZP zL;Zy|b5HwPV>UQ3dh)jJCsuyc37gB$cz9ah>*7DM1hrQMRh*>rh9|an{+aGlJmj%q z`d%*<_+E0FF7_Yg@F>Nt)O*K*b+K#M6D7(aDxyHROq~bo^&)Ft*Ksh){OX}AE_L{` z{8^CJZ2{gNS}Qd=n+KDv*Cd>=eFF!tcvgfCmm|MWt9$K3J_w3Z*HkJ)+bsfHD{hkP7VtI_0?zf^pF286CT@T^Xgbh6m{(YH~6tX00s7x&lV`B!@r z|0J@Y=Eqp-_(0-e9o1hRy_n`RhB=9kCWz4RPmg3~F&`sxD}POxAcA?v?!+g~Mo1O5 z&b>Km5_h=6w zXMAsNI|CQ*bj=GnL_WwVb+1YkS-4-TIp^Ol9$cNOYLWYk3*LTPlkfG>xn|ptu*Rwg z8o%wyDkPmIQ^jcdlR`Eg+2gTL;RpwBdpXXJi=pRCzP9P-Mml%m=Qin*4&17|$1#y| zWnw+?*VuI~S`D{K^+oXEL~8qr%$iIHnz45BoJ{h6FET!6(ji^Uw+ct2DWFF&aaCp#P# z3w_jpId>zPtVs{mWRoAny;lRau2TcEyIF8YxbpF)d0YtWfAMG;l8)u2l274+E*)xT>*>c(HK)NT@8ucFblrq7rT5R5S z+W$|t7dyVhm<305SUab^*W8Q^WYuL6Cil~ z59Y34#3kz#jMGq{In(G7*UA7cByW9fc>5=d7O%UhQil8E;O$U8~HD#7M2Ii*s(6D61uJ>>&r|l#gQBHo}K#r z81%+kHi&7kz(jLWig`mN?rZ30$>+1-5hvWsMaadM-TD_QGPsb{)v|{Diw$Dh3x7W) z-A4V-?a}WukoH|(Gggw0>)7DdeNCh*Hwe}+<9hOND?dIUi00z8qW()O){0<=Tah-G z=8cPIF0s9LiUBJ&rH_0X;(*et?~li`1t2XOEz|P036dCNeg={?Aj(*s5b=bGJ~Qj* z?c83C4f|u3`VhCEce~uqE7WJK+9cy%M|uGFb9Esv3+VIuBoug4o%jBoglhB=7JALR zwrl-EF64}T(CH}Uq45vby#+2z#8=-w=e(kv%`{)7*~D*)IyoZ?7t87I3}-c zxYLG%HMb}CejRLr#>qQJZ8os*hw5PQOj#cMr?Z1`F_iLxOrWhIq8^flw)~m3w;u8| ztJhXNA>ZVow6pR1`H&H>v|)4I>VNiGa9(NX8mRUVIGQ@z4!CB|D-nBr{E43pDbnjj|e)xt2^>O2)%`C-= znfSRPR@^flyqglX{L1%t@O)f@dq{j8x2ZnqoRnE#^O8O0lrLT6gsGq8?7WzsCGtsmy@MiL*+C05o1MTuZr`t!#h%7qwp z;pie&mqyHJJr+Lz)iB}P=)Pl0d@S`lnyb%hf^^RP$3In@aK)n$-TLeni0FvY`awD| z4_g)OG`;{I9Iaj{VakUd$A^mCAAAU}xFQuNRt}f%2dHkiNVg@})R*^1x-pAI8uP-=|>F4l0Te|`I&%ag`tC0Tm-2}m| zRMHVxR-0I_u7Cu8gIC25>mj^A_jXuzJz7fcHHvut6Hi3iyFQfX!<81v@T%F3_)X=% z1Do%2z{_v4BiosDpJ zPKUXeIs+bAE{je=7TTwHoZq9!!xyX@{y)jzzo<;C>3|{m<`e4=m-=_W&r=CHWj)j{ zc0a5%+ClS^scZaVd>i4r#LnB22TFjOsWqH7hk;&iel78zSc<)s0)ejy3k!DjUwj!@ zLHdeSC9M2X(7CKWaYs`dew(~+skIaXLVZjQyZ$S}HRlaVtap{b)|&9k4g3nUSM;~J z(o>K2r&K@lH0kqb2`_76C2kWoF%@Ts@cv!Th;!b=;j}DKGA}8ExvM>bq;62(|9!Ub zHsy|jx6oyVLV1>@mOm#w&8<4wFb*8jYV0|>hW4I= z3*m$~7ZTPswQ9w)(csC^2~T>N@crMokit})Z2XoddsMs(k&JsQ5a7RLWEOSHEk zuE4e>k_Y3O;YjQw+b8tiN%mfvHAwp3+;ngLx!Vk2nLig#m92vEm%rw@AFG3{l2K;K z#ziQ4(vrUS!f|}bJv%olj|*{^-d&kcQi7LG-k+fESPZKkowl;}W#H|r1~oJ9GoW67 zdsjtc8JI0hHL+zvWd!yqlzGp;{Y`W2t`4S1tpQ^S%BndepZR_-U(3(m7^(u;9`e4#cV0f2?xO zgpJ>C1coalVN0^);5kFet??<6HVP_4%fGF0^W+O*XY_;to7L1$Tz68AIN5~rmx{y0 zn5z&esc_2wb2&av=5^*QK?n}CQ{Slb7CX$%_)Z;&`%=}TE_8l`{Dq6V2NSP?lzW|6 zET4gw^kfftY7nn>%A`P-CFO8?(d9qEGb-Rae@PPW7h)DT^2;x^LnB`~dg-$){I{*= zv5DSos9ceL)sS>xmgg!1SGaRvV?&LX zlplGHa<*mW96ObjpMd_XSrUG9E^aSR(V2F>4$Kbi{Er{O!osf5og3-BTNwB|y>Dp= zDm=dFdVG039?5tFEv7Z_FJ$c_ud+JizkV%0^`#IkowN3f>x)oEw!+QckpK_g?+51i2F4hwn)Wamm~+!J{P{9M^exbsVb>?v8x@ z=0LjNuhaHv_^)H4%3kBqH_i3P5FF=azNH-3{3D0fk5obNlvXk4TM@`_^Nfj_!lwK; z)BW?8F@V!Nx^BTq2A27|nR-60hKI}p3&PU5I9E+R{(*Wu+8S#gA4@9)ePPf#(TjRa z84VRHo+QKo)#;(@c91URowOKRuNcJ2#Z@_mxIaJ=>UxupEcO(o19M~N$9XXBO-y~CU zlRKr9XSyVLGhC+B zL!rTKlW%c+C@cN>aElug|NHV}g=|DUD)y>hf4`aXwddw<$T`M>YRp?u{DT3?4O;tr zJZL`Vvucq7&3kKGo4zCESt=%TN3(yh;MiQ>U|A9IdejP@yo%+a^d_TQ4WmpjRV!#J znoRe(Z@-*4)vK1VNh5x@bxpwp!r=$euAqT6jiav_c@t?*;W<~OfmzMRIaR42jHsUR*UnyWllh=lK3r7VqayX_ zWF=IEu84YCSql1#x!oo6vq3&>qHa%4Er#1(O|?&B;G}m3>2Eew!ulPX%VxYN#=w_< z&F)3eepq_TqjT^0AQR@MR=BDNzRg}S{A>Xq42!IHF#gm6Tiol|BsnHZ^V)`cZ`9%P z^Dcplsh>XsyR&DC(;QViW}aVW7ce8O#_V@;G2o}MGUHMsxc?sI9?j+B6Nc&E-82Uo zGaBBvD7X@DH|Q)2xXi^dx~?FGLY zYaq}$W*$401!hY{1`Au6ctKzixW%Cql-^I!8P~(bx2GSkiFiiu?KhRUpEGFx(K?64 z3?#nxMGx~EI|Z;Tf!`>Wz{SJvxnCc25O?%~XW`IvEL^=I!tGGe2S(7!9N7Z(d)gDz{@)3O&#_>{Bt$Ei6&Tq*T+S1Qf3 zYkQZvysB+IypGzO^b)XNvNFjT=7os7bsmg=0&+6!wxI)uy~%^|l8SPkqWX?V;}_Bz9SRyS4y33;S*d zk?v-(Qh;UW7!Tjgx9_MLW)UZ18|UXmHY`)?%8uzGuH38SN)0_Gx`!mIdL3qChWhoL zG>8Dzz7wZRiF0);EWmXGar^!i&s3VdllV+Aj+at4b1-yW?w_Ck@iE|r>-A6GJY0D8 z#rbx5;^TVXtX#j3k6ETZ{%;d$jw@RH_uFp)%)MKmnzWe-G0HE$vYm;KR;RrC(Mc{& zJZM!n!;uYF+t>WtIh}`39bVN2l1?dRyv=j5Bq9E*YgHa2eZ%0c1+UlMp#IVGWb=#1 zOx)zZf4*@C7yi|H#Hk(;f$m?i(vIUyxKiXfCnTND&w~s@D_xrRy0m89i)KQ+t51hj zdKvk6dd2*y53~{A^Xs>d5DYJW$oHiA`$*iKD$gz+C@Fl<>UF2STXJb{n|w7s7CHX+ zy@!oB>zG>9bS5?@-toAZz=K1D!u`}H_gnaP7PM{oq^UhZd)Pg? zCR>7t_v4dY*&8FkH>a-+NX9a8`pIiAHo8zAWv`Rnql-<5o@U_I%PcJ5TsHFYd-nKFHH)>JO+Yxe*6l=7u#UCvvSpiJ-MpGdCHQU-L)bQu5cDAlJ@ z*WWFmT$?qk=1L5cUuc2h_Exo39Dus+Es|}uxQ?TD#D?_NXBrpimn`LgqOa?!jpQSI z``YnWbV@N;8u=u6hjU=xy-~08$Ay@E!`pjFq7WZU+hkE{#lsbIr`Si$W5dJNc#m0G z94IQgH)H(Ddfa7YBJbzLg$JwMD;~8AP&j3v5Mt{Q;tCL3*D*X zmDwP>==z<6eOzpAQG57vJ#oCRiS3D6!Ng_D6{Kx>q+5R$6e`(N4U;?$JTK_5 zHy_O^fwHUnP8?rL9I<#A#S=GqxNNK6v!|4+yLh*?$5%E3hGu2x%eJs#p>edT_ZJoh zs6RS#FPVX-%H~)+z0F4Dho;I8G-#jm_F#lJ^}}VScA9)hXQ0`z-p9-QfLTkU?9 zgL}vIy*pN20c~&XoSj59*gMvIb*(lV_5XA^JSPtLLFLI-b>#E89Fj9DhMv!0;nC-= znXeHYFFadSR|?JNHz<_NCC+loc>f2g99(X)R5zo)0&@G6{gef4l;|qo{~z5Sp9Ynp zU-?&}n_Io4+;iHCToLO_CI4W`it#f*EWJGNyb>d8DJ8_D5AMUPFmSDs3eT7HOpU|AiCI7$J2AU6d%@}_;pMeUtuil$9)?zU8>a?)^ z4A4^=NiC)KIsc`0c-Mc#5iD)GbL=hU_>J7X^F*Nmjc47TxQONtS(7!rPZ+WB3m!5W zljFmIHNB^Y)41q*$RgQl1AQ+eb?~T(4Y&I~G#(d_FL;ykuW#NQurR#JROqOJT^_=- z2fh}A*{Yk3%Cuj4aYJ0r%8rSRSHe~pef*`fL`$A`P>&M+SyjC4;?8smXg?NX;V)7sH4_RWRlx<+hzpCnhN zO+Ko}W6gR;D2HrDt$TDD`Se<~cfDS~NA8*=Zq4i-JiaC}W8)#4<$QSBreitPu?bD|KE*6&Hh|fjX~pYLHc-Dd z$h?%+4k}SEuC5@zj_1}x6~?3=dV>#M9UdkwOr~bWH7@bN=loJlcWr|imu}UMlKy*< z=DHPiyIR2S+!tvtk9x4}Pq5h^PzJ}NS3Ce-E$$pKSUZ}*#5B3YA*XlbgZkd{=gZAH zklHk1F|V~7j=p=Kqx^?~C-t7~d9#KGeNx8`Z>0R_JqG-p-CIRnvJ8K%t8N_eF2kqm zcjYh8V!{WX`m^?aSr8?Z`Bwcf3;KN&4F7G+L7nFs2R7DsBP%9S$8P}_F1oK-=|en| zSNk&D*X~S*;HD9oqRBNl#3;CZBC{4eZU(42$W;LL)yMM6vax#ji+s!hE=VVccgejk z0mE?pjG|T{j3%4jTd&cg59ywu3m>9^^3S&4#Lm7R5uE3@qQ{ajkx-079)_ zuhH5qgeZ$WM$AkhK6BfVwVOw}@9GE-KUK=N7R^Z>WOPy}8%8KY@*Z?kgN|;}_#3 zD6X7k9)fjk@s4*5YT?}1C%4=yDDQefkIw$HA23k2Mf>i_Vf+}o{k$XTnIlCT`gv`1 z4-f5`9R8&Qyq&u~=4w^p38nd^Im0w3?X~)w`{g6FOeouJV3mc*<_1lYTS>p9Wjea4 zg68;gZ)HwTXTXVKU5!!kbo{VrTJhTFJbV?tQoU3q1Ik^hg3|0o=wxVr*NM(`rNDQ) zU*9c)HV=oiui2t!t(Va7{>VQX1)>Uqr1>iXCjjj!u=(GI;^M(+)|KNfzKF3VHl|pNox3cehFG z;o+?C*RN;p;DU$SiqYR~Y{)zP%D6d>2hNS@M(MZMSn2O~E5fh~wa)q3kJ|AetZIcb zyQc~3hPT`tUDN=bN4eYGk%RHqMR)erP;TPe zv_k_Gu(4ay?3P&tqzu3MyF8kO3Jvg4}vK$xA?`sR%BF3S9iF1;5pcVeb zrC7B7Z=aFdd0+>Rd~sjW_g*Vy;p7ecGl_~qY%FY0e)zK%TDl%is9nT`4aX0MUZFih z!JWz1Z~1f3@{q+_z|S~shPb-&o(9e)j&n}2hxRTu=#6T>^uSaLl%XYoM%AM#0Q;m5n=Gg>MY}N9`z*^R|5@q z)!>g?C+ur1^C9Bf&F@mRA5k#M)5|5E?8wNXi!YZ~LTSJ5`4dX@5MPt#*Gl}!g}WDo zSmYA7t@icE7yC|pUeQ|dFtQZ`hb*?<^zTF`ho$;1P*y{aJ~`Q+GAX8sT-}%VyPgw*ts#(I#*FF0vWEwCedJ8294S zF7@<(#J9YDb0#Oujr_T3dOaITyFgCn$nR|86%?&9I9nV<99_3gLzYSdc+6sd-}|@^ zH-D7>wDMgee%{t(sAfgnm8Se@&6kC!FAFLFob`QzvD}eLnBS3D%D>D*De1^W z%;Ca~sllhZ=2b(KUrS$lFb^l{TPIpQ;XugJ(=R&)>YzkZ!lFFaNm*A8 z2|@h*^v#n~nrZL2EbTe%ANTC;tK7Y%9wH z;_@BSavV^*aIiJH41CjzB_5K_!DYVP;jgQ^P^~=!m1Z|V(BHwAZN{~@vi-G_+3^Cf zR{PObb?zu;XC2)cQWEo4<|sY8WLRn0G~n^5aHKGGrdtG^YVS@96(5+eD(A16Ad^WetM9c7CtSEI#g zu|>+k2CVb>`RUu-TK7}iglp-F~qpngN19(26f(X zuEW0E1AE=SmEgs|re;+^HNZFi;={E6S9n>tWHS&KX?DS{NXq-2`DpU2XQM)79mFz7v)Pdhn;jF|80p7~5d^N{Vh_YX=f4woAg-6t? z&v`s$Ky01NyiuxS$K;Zwnz9ft?bc~<-Nu0v+|x5!=zRK78z%PAn(~(m2lOJ=a8YM= zYI@k|dc42dqC0j`4o-fvC|qH7F?@DPSvpO#04hAaf7e~+fG}RY;7Bj^Hy8Jw{!0Az zcICP6E=ZD&;ogO&rEQSSH#tPD|We_!*HquBw z>7s8#*XyS;VS%g9`gP~n&@$xs&tPXAtm)AoGcaS~oAeiIEy^{R%{#Z}L~0dq>K>b8#q)IL2 zXEN`Z)lt50PF#}wL{%OhPb$s7PrCBFHkXzAg9LEIR@r(Y=^q1({F&SPc$m0*om~&{ zJ1^&Qj(RPl^K3AiW#!IB$+*(xvH$8IA^gEt%@WF4d~W|~X$R%3+&(gaO`Ppr>w3a9 zd{`Ll=;kpoi1Hho$0s^IW`QWcw0zc*KG1tI{*`tv4>|7|7B4sAVpLl7^es!NzKia? zSN^saVs;@FzL({4xG9uI}jB51tKT?*l6cZ{SI%H$D!a32)tRMJNYK{ z!Ko5wrcv$+Gy6|$Yn%X^LKQT#klwSwf*>U&%8}c;?3H{`BlgIg^G@4M92>h*wOtRH zc=YS{aQ{9PMAi_X*em6^|L zviN9MZ5=G9N?fuveXo8iHDcsDy{8!gq|4nYCaF&Q#&2shL;H*cFgUmLbG4HIwTA;@ zFZ6#w4gZ+?yHnmbFskDDc<%3QuODvo_m^S^NNl9K z-O<4OX>Tts7|=aYc4+{9M;=kTagGV=Dy9xwNHu~|faI}=*`374nXq>w`T2LB{CMDx zK^xd8aYv?xkPalW9!Bo9!Gxx7JAO%t@bkj3_zAIJ(Cqz~Z=v2Ww8<5_>y~%nSm+%c z2J!t2uJS&eS8GNEZ~xgZDG$p#ap1pcdok z%pLNN2Eh9J^=!%mKXrK?rrXKH9adZGzx!`txUc zi?FcUjm_))hL=n%owYMtz(YlPOK?jE)@7d3unTDf992|T9B9Bl;43%5neyT1Rp0BV z5KuilJrlATP;F1{LWQSY;56w|vAUTEO1WNb+hkTWd>-3ic>=LhOoX4&BXN~XX+ecd<*my88M}~L*@|;qnzT%+Dd%4N)h<8U`>!xG%92TJMyn^&-Sk(t!i!9am+$+#(0}C9fDV11 zTR&$!NY-jagPg7}e`t>1w&-i$`QCQWT-)|R-;ey48%}MPc4~wNqb9#h4Lk7go+)Da zuNtr|^qk4W-Hj+3;PBR77vbIXUF_?bRCgFSKYrBO4BAdAXU}#BpuiNLj3?iKZ>+p4h=md)AEV zNfw6EXZUdSzxSozR`QVcX&K^cIw9dhpo&vAapp}pUnc3bKz*>>_6t7EsK!_)fBS0_ znl2hQz-zC97ZEq3VpcW6P?%Z#MFtl}F23bv5`X2}rjAIRv5~fBW;6cMLMLiQX{A*d|cAxe(*SF?|nSE{t@75uC z`2{quv*F3SBfUsOGR5JoC7p6`iP0u!5w6*_^Ya!a<-78Nw@pOK^Irco)H$LLPINsC zZTrlJjqD3YwcMC+;F^TQ{6 zR^J_GBZ4WWyPPJC^h3|Yq=;?AA-Yl6J^jtT7TCT?Vsu$L54USO7F{5&+ZNxS`?6Hq z(AP>PTU)jT6S!BZ_EP?MXxxlcF|T&KYx!-3lWvZt6A>u@9DIJ=W-Vc-ht;||U{mA8(<0ijZji|S4PNLho4jc@NQ}!d@a8u)w zQ~mRVIQzrH*{%aZu#~<1#i6AY4lJC?J=oj=>yNO;y_iRQe2&CJ)hq2NVQ@#qemA|Z zb8-)N>bIfQ=~P}EzXh_n!R*zSoQ|WEs^0NrzU|FP3eB=lNT|2tp}$E7x|JT08CcW;|W0H?I-?X+2GvdXI7~n$=~$ zQO=qt-{OuO?W0{(N;Y1Tr#|lJ3e&x3Te0HfDl4z;O=!O7$cc*Q4KVrq9lQVJiN8@0 zcB{*x1@e>xjpM3`$FsZW@2cAA6d~ zht1q@@;&8=z1X~~o#u}>-s;{y=Jvn$d$a5b;yp*sPW}6W&NullAua|PsP0Jv(B}_Te}Q3 zxq>DL@JYSUM0%pg8GSY9=2qgks;*UfJSMt*bp5q@Tr-YWvz>9=nG5T;?S0yOx)bIv zzBSf)qa8gwI}O9nF<@7TAo)rW2iGR4&FP*^^~bFP#`8TXmnG^z@6w6HL%yYP@rEJg ze$LkLe`3~xyxB`!e|r&6O8v$)t!BzMJS(05;}s9SL`8f#{Z|BER^`r_u#)z08(tMh zUFd*HTk9oe@{~vP(gV+YC!dp2URAde<+u7C>Tp$Uf?I9&rgyC9`TSJ=k~`3d9h$XU zS__1@!p$RE&!!!hKXv(Pez_6099;KCoA_y3cMe`Ix=w!giFa%`YZ{o3EftQJ9QC1Y?Fhui_$L+ zmVKP=xsJZS>XXxsW|I#t``Y1q<6Q-KecAGLz7=e+%}qM8m^eyWI?3-YFK@te-&0+^ zMnyRM*P-EBJNd;s2MUfKXaKQK>Qfg}=8^4{l%6G0ji|cA*=)yLy4Sla6h5l80%zyJ z*Awn_foO7WDW6YuOz-gIjRU0P6|-(u{M3evwqHGwLHE{alUBKfbRWLtKFCq+Yrv+h zP2mFyJW!B5WL%iijB!K$ZkMfFaPbu3$5*3`D87{~;u!Klc~(N@nZ{ z;zG8GxgWj9-*237y~~F@JIR`jvx-DIYPLK{??u_x3*h%)td4clz;SXwQGid&=3x<#^R+*5u_EIdEC_b^Sm& z?dfMPt`rZcMh839r&swx7;nRMY4>FjA7Q8E1lI<*_0K+J2k_7)(kme)Ux#> zzv{i6&yr=EgxGJecIl6mq>qq*b;jhcshV!r`?;eYe3qYT-YCt+t3gMT;@tRnYUWvG z=W;G6XccZ^W-{T#o5yV>mV5}Xl)f*@WMO*9w~9&En(#!N+Crl*eDLF`Gnxx2zfbM) z;=ig4nzx*km>SH*H8VnX+;`-{I@_BC^OS0!%8$q5y)MJ8Ljh8|XiwafH_tw`QV4p% z|BSS6Qm%{YerLaOF3#W5t2=cwJr^g0wP_xvkT0J(ME7FF zrob&W4~1ZM@$3q3-Ew%i$kH-=X+7+I-j#hbi}X$D-ptA!Y@A-*s5I+g9qD()rc7T{ z4dG1LgO$bYuwJTR+uIP@XF2@5CM4g;?yj3FvS|L&a4=16w{<=I{N{J%`d`Ycn72wy zh30#I-{d~ie8T|$K;yFZ+y+e1dOhXICnokETpL_;h=&dF4Z+iD>S4)>sFCBw4ER!< z#=Vuxz(A`HfBY|wm=v<3wp_Q1d zSD{+1_7eWt`P9sPjPTy|#U~w;O2Aor$0NTC+jz4RuSN~y*<_P14956ev#@7eBKOL;fe=RdhzX~kHJzxER490)o+R`=CY2tE1NWnFetPS?a8 zMMY=$xYxnX>iXqR_vT)(x0-^A#|MgIM+X|xyAlZsl|Pxk<4`QJUEcWCan z&JvjJL%o|yA3>#^r;(yB*$ zIB58EihlSqHdyEOcJrN?@Jgw!zqgtVM&*7gHRUXn`tdnXJV1c;JGsC26_Z|+HDl8P zVBp_zC#2h6R8gI~QRdl~dMr@56QfA}Yf<<$1HpD7bVS|1q|d0w6(wu01@5Ey!!&;f z%jRO}DMpLDU3D;L=Es4|F$PZGW9*&vgO4E_PJJlyD2Kxa^Y*=$-P;9a%;fnc0fmJRvm6T&T*JKfr+cX9{Trd4X$UKsRA@@rtJwiT||DGll?W;RS;%>UjJ?>6OSydSi&l6N0B)9?EmxZ+k#82 z2I_I4;>O?rlWdq|>JZtS$HXTKQzkB$}-jQz5kDW^=kRBlTW1N4{v zmfv@-0&I^eHD(o3zH-E#jVrFQY2K}M*2$ECL#pBaqqL8*Xr4bI<61jj+PZB04Otd^ zKK?V_>|qrY*0jhArFk%T@6M)I&iSZ*Pbn{6P=#IZ^_i=-#O(LJAN~8XVi%m zx8D}QxKMxp<2wqWcpA59_(utz?sIx@n&urpeDQ2TB*Lxz>0)bMlAlHG)2Bxg?{RAH zCkbEkLVR*w*?MtPK5(C&ijLN7!u-MIj4AhpaN+n7-rg3{UDZB*5tCU8XUoOvpW6{% zVuO{Ytv~>Rg=)n|j)-vX$frq?CIa-;8MszJ^PD8tQ~b{cO;EAp+L5cZogm76zdP+b zA6>oozCAXs6?O#dzx2SM5l7-gCX*F~Fy-P(|02rFbx(~O@?vRjyz0GN z^x77DB&G1BP_7X@4|ko)8^^_Ssmg-#W&wnW_Ag)gR0OA=F4L`I@^MpR^*^OewCB>6 z=sQ@{h9BPA9c3Wp(5mI{ksRNMT7Ai#_rGuvt+qzY@1#9!;IF@@4>I8S9Il;bDjUXy ztY2V9_u2C8Hv(5H(R&#l@ZXy4EbPD4bMufY<#tQDRaKIXAn?0o&7*fh$j=wqS#=0; zwM>tqn>Z6LNn4+-QlZaduybCWPd$G4d{H*zH4lES9t?WkQw62`XBK0n4d8yy>pYk4 z-4jYqPYSuDb6S#BG+CMhR-bIw>{%{E-!IKWru{rvo_;0C(5?=~SM|iaH)K#=!;6O+ z%{)~8s=nxx71jUBC!WQnieTlQ9FcPv8wS*utG!4SLWKWYOD!)UHfx7;p5yXSPqf7I zeLm^se#H1j5%*1BZMZ9^jQqJvVy>>BTnENHl`^|-s-Ku$gHmUBFh1bP`tV=%=saLC z{mf;`>ndEKFnE>vlZ+_}4t6y#!%OVeN8;<*De8>*OENM2#oc4fIMRjBi&$a4o`Fqr z&vSGBFkpwwed)bA^L4;xNZxoc4nfI zv(R|8fQ#k#KSwu43BXTjWJw_9Q7UCT2uQ1_N3(;e@-yxVAceC%|3Vk>GJa|v-eJgu zJ%*t^v&NI3X69qp8!PKD>;0)eW#p$gb?HjmccBow-<^FKPxHCKLx1MGmgQoRdTXw! z1m&0-c8^yNW)W}X&Ct;>CQ3-@^lX?~16S{!uX^-AK)UAhh9m!YD1S$$%U-7%H?SR~ zd!o5ul3fxrc{S-yGg|jXXz=mz=u+Wa>Jxl-4jmm+s6~za)h%0xn2=Um!MpmUp8CY| zR@dbzhkW0EjXc9bxUcj>e8)8|R>rSg`8I?4prbG3qcjCLC$&5!e~A#E^s^4hp5(%= z?p_@_n=vdoE6L*pn|#HTv`jiti_cqjhXyb}IDq}9qv)Ldw_OxYzM~YUZ${3o#8t1f zye#vcfye74{D0W9aa}MRPMlVbo#h>W?@zA-epFd*Y6KVVaWBZPe#^vM_54X&n8elm zc4}ic-KWoIn#mNLBp$^cO2(Z|`|nBrmYC4J-ko|#+peh=WHu^>U!i)W;cr+vgYJnE zS5?#VIwHL6-NpA@D8kc8T#{R|A!1^j;+rZChQLRMj(H5MXH1Mr(BR^u{*;I`CYMM; zmAaJ!)nL$}Zfm8?#?NDd2NTum!P80N_N*iI7;~^Z)qI4Ha@Sfcbm{ZoI>`$D9Fd2y zVzyrnOVkplV#3{?hh<>xlC-L92Q{0MMlWsC0s09 z`eez}`;=S2+iNw=kOND`tVgA5AHji}j`0s@ui|+B*c2Cc(tDg2T0A;0Ail5JroUn2 z|Cu5-uzQe+6B{3>iDq+A>`o1fFD-y$j@-HFm-x7#fvxz9^vB~Bw_ovm%%uFkBBQvE zT=K;#F7;kg4}2w!)pxZRm?Yky(@i>%o0Ehsm)Nyf@}n$kF8RR&jd(Zpmy%!D-+h7a zO6r#lHgp&g4<<|dQt>+CE<7)bOL20l$C-W2L4&fiPZ}xASVw-{YVmn34IZiRAlq}v zG2%Vi)!p2>GPw>8u2orYzl)F4mIcoDZ(xGUaNk{vRWyI!Qo#GXm-Lsf7pPdq^C0#5 zz?6J(77hv(yXuH@akB1q|G*{EJE#tKcx+?A$2XZ;2mFPw^<__N!Xg&__jU4-r~@L{ z$Mlv}Ur&Di)q4V1g+g?>YTIaimy6DY1m0yYER5uXyqWBU5Px zj6ZXRQITM&Jt{ptEc>Ri-uS~0kocv8e32L z?{>R8XWjEf(53a0B_LnTw5PFC@c;``?oY|cJuZX*m#&#Qp$teGrxhRex(eI|YyQ}f zF55=Qx2k*v1Lq99%P*SCg%G!WKLQl1F;Ra}>Bt8roP4N16x}3(_2m<#8o!r;T#Ha| z-|-eOkv|!}GnNa#g!0DcyZG2#b>W))0@9ytidj=YzB2#v+kao15bxcX(oEiTf^9o{ zW0Gqd?mi|qZcu}`**9Km2KR|@^zP|~>78s4-2JuX6Ztd@F5+i9CN&74Uc?1 z&DjgTwqVwj#cyh95Ao!*y`fh&)rSr>RU?Ta*l*LdbRzLO{ckMuSwQ!5gXqliU=0DN zJ9C@7##*qFH)+=+9_`WHTVLOKLX`U85cXxyx-ES|U$UEG& z70$i(87_(;E|R*QbE$JHW;)wk^G+kb@`X|0!EP>d*AVe>N8a4| zRx_CcD*`3Mx2tgB!?%;VwVvqMsp0o@;O_xr9BJH|wruX^J>6&Ud2?@in2J}!7= z6fhmgC;I)t1-_{U`Bn_H*p2$om3zydiPtM52+;BS0lsrVcLuA927|3B4hxcZ3RWS6HbxE}fP|2R7DKrG+4jT#A9@I8j<{9%Gtkv&!ttChWSsk?rJjwn7e#Nwis$Ialh&nj@aV&*`bj$dYSIz;?X-T>A@@g9XYFPOCng$&c zmy;^Z(wLY{FZq}|Mng(Y8*L7HH>1Thrj&OZNSNUBu18V}<{5(p@-`0m{W>3Kko4gk zuUvK^2K8ev_H7lJu|8aFBK0_{oPn~h>wNII&cJ;ZZd?Zw8Tenni$5>$H^`=%B}P#k zbTZpHe<6X0*eaFIF`vk|rb19S9dZonM1^pQ83o5^KdmnBmoeGLDLAb$%l@ei z3q=@y7~E4!M&H(k?rUYx@Y~|+9~=F;aaP-@D!Ju)ysOTe`x8I#bMAltwDZt+BqzS| z-pC%f7po2~S69OOu5*)c^J7YDx5gAuIa z)=~;iz9525o5MV&xb@m5$d`Mp1T2qAQ}M<+lN%zKjn3Y;&!}}Kp}LaII#qrc`ERm* z_S2P)AE*6$*#CxskBgdSb5}CaI{s~gVN#vgu14I|eFqD@;7bV5fpfk@y3T)G56=5l zJKm=50AAadXxd44Dtf+plSJGy37=Riz4R4&dwBi)M~2|{9ey_2yhEFf8V1fJg^+S_ z?WVvzr##WYJ2pkL6efKv8z4*wv@XeQosCcX7MP;4s zeaP&Vc1xjLHy&4cZ&0(7gsTb?cm*L>;UO^Sixj(w8?*2wr(0!uIWVuq4`{xKqakjO!?j~-z4+AV z5OI$W0mbJec``Y0Pq4?=7m}#B-Rnz`Gw6wbQ^e&gB#78?{ld6|9puEH6sLI}Xu{iQ z8*QCb$&g!5D@_@KId`1ZXe>v?stO?yui-vk=sd^!!np(YoEn|e35VXjx@m*B4jQg% zlvZ%c@4@a%n~K&!PA&VfL`fLtVF%zBw7*;mFo5Tv>O|8~UD(U1YzfNU z(B6&)ep}o)9^Hh9PbdFwz65z==J#Sk*?k>S*B0X>eKebue z%)ks4-(KG2RR!;bcl)dPIZ0o-lL@HwQp~1EDH6)p zk2Z{)V_?C5Je8ze;E*h4FG%bMpW!R9N(b;ytl~L^J(Z*p*s)XF)F&ZP)Sd+fc%fY+reML@SOiF|GIu% zF+P1~*32%DfcR1!mcj%{@SZbmbpW54d3V{m%n}B^nUdBR`4s$(zMQQ&3v_hy%9S&- zYnZrAA%ZK>h>oh%%0lfG7${u2=KU1#sy3yc$ZazRE>K~AVg=miORE{9d1h=>r`zV; zugSzorJ-h@b%`iwELl8zI~_fGb8u?tCe9HFl+ZM zuG_M}zgEg^kM9QkHSa--Obr1k?Jv)Hzq1%UEL=rzXZ7N|cXN9lDN>OcE9)x$+=A`T zyuG_fAs|V6k*R}qRJ=yJZ-kr;eg=D$zL8@TBt53T^b&NGi~UjN8b(ccdU4?BLzzL` zA|S8t?9qzMAN^h0b)AAJMY#;CZs6YkD#ev&IcS}+kWeCUj=IGh%&v0C*hheQ_{n4& zRwsVjQZ7Nq=siEX3G#0mGRH#KG*A$Y#PLt1DXZ9c&zcSP-6S+8uu1wzdQ1qt2-sL&}(PTE7sEH5vo@b#zFYe3T zPHe2&JMqESosAN`h_Y9M=%|tBVac)LCd6B%^pV?vjl(V|y?UlXi5n2KMNGjy1ce^ke^_ZS|CtZmtzzRN?+&P58tO-5ON-5A+-#)q*L(j* z@C}Wx^B8lRr{mzHCbR4k0XxxCpLD5dme&sAWJa@;=+#6scX}3RnWnT6pMZufr za)FPdXx8I)5jctR$Cq7$78z)P>&ilgW)HSCR_dJo4gaq(uOoBi4D9;R;SAp_2aN?Q z%dsoYAy;~O6*Ww`vAfIC4};5qzS{2V6|`r+_2C<8yeAfM|F9loGPe6Z40MZFWiOT4S#^b>TGJf3d^$`F>C92d99 zBcKV@5lu=31#-cE^DYyqD0jj%Yr`Qbl8xMcHoT}8o9p@CZd^BjPLp!QC(1~uMu2l{q_`w_dBke3q9b$@ZP6FYVco!#9FJ)98=?~Uq6$To_* zP0ojoNS0@bTKfm^=ZGf`7O)41_+gj&335D9`vaZ-Z350*!`G9muh3ER&V-r6znC~X zdY@7c*9>mxJmR642m4MpTX8e!N8RkwCZ{aOLO<&*flusAkiybO=;Ku15vj2n{tW5u-~Cn? z{6A?qM{ZnT;D)$kp+5pfP~oyG6NuXAB8RYRp9ohBn};jp@&8HxFZhKUaD<{s6o~$w%*v7gLBxFY?;e&5a%C zm}tWJ;4u#BaZu{LzrI@Lt>c8b2h0-!QYPTkK&; zEjqa`JZ|6^ftKt>8P#oLLHQ zZ)Bj5oW8dXdIa=&c(mh>BMFBEzxVps#6q-e%VBOI$lqA4_>hzP(Dwep9pPQQn538e zrEYK6FQDw zvZeF8{@y1EXO>_TfSk;htr!S@lby&uSaInP0#_nr;cWMH*k{7#Sq2qs5Z+}{_f#0}M zb7nu8hO!#NPsxDaYG_bl`Y`CqNU^)P80P1sEOx%eB_g^%W*)N$_oP&{4H8cIWc<75 z#$@0nItode4=c8$;h&QGw7)E~5WmqXl94C_9Z`QGFC$4nVLj$Ew|Z!3cgrP7Yxwv7 z{AF^#QzqgY;oCB||AF)MP2chEa2B2$uNF;OBB5uF?Lh_gLnx={^{aR9>3Dd}cvcYb zgXp%*Z*xh|yTRrD(uD(Dj+v+?ZFLgX7;x`gg6H|o#phL0xm~EVM1wi{8FHlV%RhyI zGx7Y{wS9AaE%@+aSmr4q7J54QSpNjfpO5`)4$wsCcsWm--^#QNy*~Lg&h8w{oARGB zLgHAskR(O@0DIRj&27Z=XKh&UhtAB&F&2*BCx3Pkbo?g)f8HJtq9fvIvz;Ty>FE2> zH*x4Q@TDD>zfeaBIENlik%8wR*EYQ3;8w^R+xn&MJkLO(W4nEhhxFp7KUQgcT2Dv# zRPv-859r=Z#@1|jUL03zy_W?2Q2akTgIgJNR3Wzc;{VoDHd2Be*k-dPt$ z$E4Xtnjy@Y2B|-puDi%M-f-`cck@KVZ_vHYH5-24**Q9;WpwNiy-+=U7;?~xjKg08 zDZszYE6Tc7kJ|itd9$Cu^Yas!Y$~#n11^PDU-FGR&{IY>a%FF3;_mVtQhRo{<1?Q$yT0)E;-4#T zBKos>QMBWexmw6c_kY@Op4-0_&&c##90x9?-S)}Sxd{rUW$oRmN71Kn~yds8Bl0*-pytPxxdA*zuo@UEp&n+Ipqonj84y z$_^bZ9CC?$Sj3k36{` z1fREn!Aq_{x4d5-PA=)2XKP5;j^LH@brj?~A-of-?s}D94!pZo2 zeah}_8^O2O_@HdchlR@iOE=Zdg`T{MWpWJ{4OecoR#QI(Jx1e;re<#-r=Uqo8Fz#G zfaSLPnP=FzQ~GgbVPGsg)?MXgt4GN%pszu0d%BJc^%K3zT}89>3t@t>C}Aoo@g6niF! zNWz6NBRiMiy!<(Yt5e+CagnoGxyKn2YEMg6d)L#ATFcwI0x5<8CEvYv7DXVe^S74aWPii(j(Q4oK%u}94a_A4#>pFraio^^64 zFRdftx?UY0@+}Hd_B1B%DFTkI&qufYu=gRh%)V%Zy{4{NUS!FOMI8RRBJS2x=xb}{ ze)esJiSG&zOn1S1%`@lh#wRfMKAlo%Y0w4n9x` zfeX65KWL~x^MXj07I04*eqTQR67;lKx2AdxHqIZ(sIhrZK=}!RNrS-2;4?A$ygwcK z;a_yFyROPccB&ogzuy4f?B@EN9f~c;R;KUlS}Ewq>+~$QI!(mCrHEbC;KMYfoSHTm zq~W?kwfX6)zy8px7CibZ+T_6tGRlof z9BKnT#ij8+^Go21G8^UP?kXpsjEB7QSU$GSYZ=xW-el0VRZr_pE_E)m0AzA3V0@78z07;p(Co@ zMw#w5=&zITY&p9gdbKZZzwoX3CzfeD6S)!Q#hrn&f=zcu@a}aX8e28!NWJXzxUn7h zp{!hgO|!|!n9JhhX&VMA9FSc8wx5ju+-mhMHG!Vf=nvhKurE3cTcx67HRSol-!bMW5@sjoYewk@NAuC@wuV`e5@u z_+VlamfiQ{&a_4ywpZo;_yB(1g0mkMzshx@bKNbo?QKoS$?^0*pP3FEEOSZRQSU1z z^Ixt%ZO1~*=_ZTx&ooR@33EN{+>FHaBJP{`)nhKzXDg}+4e04H8aXey9>qBA6#6>Y zg%iw`8VV-iK1O@7^(o}V3FSuU|#@(91#nyAK&?la2CG z?SH_lu1uG706qrpo4?IYZ$;I-9de3Yt>|%1n9hFCcjT`d7=Gmd7uRV%dk}mOuF67Q z?U^)OSfN|0W<|#-Z<1f=!}CUtJLTyK+ky*n zXYnfwri!n1FS5{x|2dJ&!CFd&lcus1R9xV)do}2Ih4vbRF32%^*bHp6@8%%=?G0;d zrKmVQ$m4w$%vCir_94N=1SDTNEJAlDqYs>x_#Mhj+$>A{#dVs7i&RgC+*^eEyzpVJ zwNjv??@>y-ybtC#@AIkipszM<`{p^xB%puQEBo#WHee^p&aXF5z<#hv>WIYI9^`d` zFX~`hH`;K}&QarME7~*B?3>Y5f$Kl7%H8oj1iydgH2oHG!uJGs5$^?c<8Q$S`@>Jy zA!)q#H$UjHMSNX~=Xtu&-lnu51JDnKQwj|}9VK9YJo zZb2Kp`vzO*S}@^bP?4HRDK19QT46UJZ^_r@F&NYeg@cohLj#TIu4nL;GZIb6^z;Ij zv#v+?_uH~~a(dCesi3gF9yU5Rmv&8)#Ka+T;nYVz`!L@y=K~+;d2{bFSKNOR(Bd_d z7SZ2xXhXythuuoTmTfHeAw>?-dcNnyxIS>Hv@W&SUSy-Y5BT>aUIq@(^S`1AIdtqP z>bLzh@cAZXJw^ZQ;Nbhp9l3UJZuc5grU*3>u%h&$>djY7R8w0!dLH~6xe~hbM?Sj0bfaZgG3RYY{a%RguHf}s#{-W~% zaB?4_e>_iU$T@nY)W3m+ytGqa8<;Y&r_28S46|?e*(srnllmki+Mndr&J8)QVRgB4 zA;4>yyC=8kPsfgff9rKyI4GOPYt6ciz~^zCU6uEOfpzPUn7j!aQD@sy-c1vbXFIv! zNmD24a_5m$o+aTP#rLaY4|n1R)Pw8uKnIyTfBBdyGuYK@xQK&q zZQ0wfN@^ZE2Oh1iXoB~p@lorxRZQ%q$bRqgijFp|w)j5N1@}Gj?Hzug+nP*x!y?&*+i7Wv@Bhm+Sa8q4Q!yyt4X4SJj?OBw&+?;(=$m>q0H}3h0c@ z#h?FN*-gOChYU$92{OtTvz`ou^T*XJ-|+2f78Vpt)7@wRzNe1~x#Keo9JO>HK0b?v z98-AJ6uy5$(zBC}g!dGzJu9L4d4>b$gXYwe+bmqvps}yQ6Xxl^lv!8kSAQTS(B3}> z{!r!2H6i{4l>BAV`GLw1-bSwcUC{yaZ(mu*?XPfdE$+UbmqI|{T}vh=Ni-Bc^EzqT z4SrwiTIVh)0SBYM@yTYtKKyb?u|C6yh8ur64Th)n;?FB+up2dMvEPTd4m@>@Ez&xFDS2qSjZs_b##W}d&`PE<0ZGpVD z-=+V^mn6x!P+(i=m?0V6Hm)3d40~hJNw*0e@OiBMZ@0LJ2pMgttd(d9@5f^4T9c*( z63%#ZR!jO74L8uQ`o{ihz#4guUp>-V@at1adfr=`Q6$$G&DXdYHT^4*8}@8Mr#@3> zMw7a5AjPLIcoz5x9`4^`pF+P?kFv;i(5XIz&9>F?k&y3Z@y#at33%;^9fLj}dyvT7 z2EURBIFHQP#}0Nj;h+jlxsTRV)IHEIdRwL)ZT6rZedEBmcq=jb-z z;nZcn(^i$}vBZvS0qOvrSqRsbgM263CI5xIQa3uE;U)B>vlWRKP6}_<1ieDEMIcca ze1N0--}HvI;6=%BsS!m6UU4_65Cc8FPYRWp-l3pl8XoTt5450jq|Vy$r5>Dh?4`qy z02K`jw-#1xg?s1K4j$DDpjYU*`?LW6kk7`(*&cKSb&HLaWk(6<)58bLMK1mLX_Dln zC!km59azu4c)1mCA@1)KJxN1TaldYwn1GMwfVB9#UsT+t^{m)>=o9*Qt2{*mbhdc6 z!wk(aD&FmRNXt8qglCnBHP#7a6w(lO>3V7>($Ls~2+;(baj$MX6?oM%MCmivqw3*( z>v`FB7g4Vo$UUs?l8tXA z;F`B-m%kop#LFVQ1Pkz+rmd>^p_tYUycOZ5^g{$J=3=%ZlR1hvbe!R1ohG9K$%q&E z>j)_Et$R+JVJp^jGRtLL8bQhZn9=tddVl)V%goQUW3935uZKP{u*mKiuWhebI5j=^ zC%ce{FK;<;@v1sJ|3CKiuM4Ch{M}$!@i^pANuIhv&|4qWu>Pu#+5qOhn`C8ZLqg1> zUaQ!D>DX`Od#nQRIV&C=n|E6vVELU_0|v6GNW|Pf^3yRIa@m(Lc6%Cp*_kdY95dhr z2Zp=3c7P98U-*H+?>bb_O-Fo{-S~_8YlYBpHr{Hp=j|(ap4s=wM{ak3>=+`0iV%mpe)e3(2gYn$wPmf?zQ?aybo#&U2-&cSbKHG{}5 zZF`+d*(gf6Z;U+i265!B+Ry+;@aG(jyDuF41)C&rN2Df>;lFk5$7PDguoiJdg^)gi zVmIF}F9f}7dLgn@Jh~rK?h9D2af0_#m7aP5^m6qJt|{C#+lSVFY(1gEO6s3RX5%X#2Cs(F7UCR zg_e{zyKl&0qg@un>4=RiyxMj1z~uol(sFU;Itbi@$CHb`5d#C*Kh2BB@c{*IbAND- z;oFV7-l(z*K=+TYvA^eK0y)wvS=;Vq0}rH8?ADQ-6tSl|u`ggh~8>Bhnt z`jxKM3}n^1M6id?fA^!wY5kK;C|O(W^j>oY7Jkw}yahfumBC}agU6}p?Sr|Ho71gW z{lBkcWGfb0aIbyr5lu&0&?;~Lh>oVVYKu&rrlZH7&LqdXK);y9YHeE?D&#T6lGUKM zt?1^>RI73ho-wi?8Ok6d#xsiFR^V;KoT)K+9!!Mi)+a~m2JG*$wGJo9_Tu+nSk?yK zRCL3qEj}Oo6^HaE?WXrIu^I8Hb&@fBKRVl;^WQ=qla!~o$DV{M{}p|gJ645POgl8=_r{7X-|1lg{>{EW@SRmu&=e(`Mrc_%5(*)!yUr z*RzmPu2JEWI|JBiji|t7n3Gqf2fd%N0AF@!YHM>C3#%JO{XJ^J#5)f^bURIf{GGbh z)9sHT$IF_MrY`oOj!)g+oh5;nGTR*77tO*NpXH~`4iJ$+X>Vl&`0P?nZU3PQdYtD* z+|r~=-7)YLfzB*r5H$% z$2X{JQ!fs)y-2bigZpl&`>%JEu$P$Q&NyudT=MkiH~L?&kXwr&>ts|meL9Z@%33AZ;^{*6z$Kib2wUxC^0rH!7Dqb+XVE^!!7pvE^ky`)GVGHQv zD1V#Fl6%yNXA3@BALD?(>C$`$51Wk#12|)=_i<2>k>w7q0N?_ym9`IG=3wSXTuJwD z*yC@%|G57g15Y}N5A&^qxk||LOjJt)cF+7hc<(M1aqkHFs%H&;W9uvO=VX~Ufcs{* z<2MT0X;hsy#m&O6y~Nf!nR4*gXJ4<20{1-f++L2YL@$bX@#e{FES%pbBx;u)0S9u` z@yND17IvA^Dmestph3v>Em!&a&}08e^Rv;QyQ{in(&KvY*>KYvN+AqHX>}*tGhpvm zT*AG^n1NDf#pUt==oK-%@OIjZh2qZ?8s$T-XM^gUZXF5%D{RYu`2BP{ z?vIffu;~DPh3Sf~B<#7rf3=)&%tQ|xYZP$kzfUhzf7JlyL z2JrjrxZnRGtpk117!M4Ad!VBC=DUx;C-k5VQ1sk| z#UUdyekeQQR;5fs3%_^#`bUL+rq6HB)PDS6irmw$N z>Ou1l#mSWx&{J8w<8vBtfff$yH^~Ok5IQu#R8sE2!K+$Uc!W6U*PQti341oWPMmF? zbA{f8skz7DB_!<8S?Q_2Zvcx<&!>sOyz;=Ilqdi^o|MZ5;v48Jw9EhZIcZ`)R{U_) zq)48G_dPhI;<4C^s;w!V&X-v@(@d$j5%PM~Z#VK49t0l0e1!I+7zQdLoNV&p8bAsE zwS43@2EOEWQ-QfSCMs4#Jz}51&whEz?_MSB=W^Eg9D(O-*G8L?3;P&&j()S~(-sEm zJhxYx4tivoPV3W``za`A(sI>^HyfGtiHXKN>OxX0!IdIc2atuUmy_q8LFE3#lfvd< zWAd}+*QwiCpeyfq^3$*vtB-%0RI7#aHa2sF#p}!2zd_&j5+16*0QWa) zmMCLJqX1K?E|~J}BOq7TQ5{FqI?N7oh^n_|peuf8$Ii!e?3UfpbN@aAMU+n9f3=X~ z{pRZ`znzNfHf}h6Z;+1mEPAIdz~087+MY8FoFqE~!bQQGJy>tzPSPUeAV;p0I>#zO z-(2d1z9n}(cCWf=5e&NRHQiIj?=8XCzE_pS&J~TGg zj=gn(M`@FnVo(A;^<@3EVj)y~!cH^34E)JfG0(JDy4mOUi-&kR5T@I z^VbD9Ur(Z@zZk*2YM=a`NcCOto;A$!s14}B-J?6g%e|R+f5?}WE5M7e?z-(-lFL9U zJtm7wije;>zH8l8+krRFYgd^2kWi?~`tBd_`B~g%Q}vrdK`jD0TbyM{_!VQ0D!rG5 zDb5bc7rMx(PvWNH?FBmisW}j{?{yDec%NJEkk^QfQ$)u3*LNd^%zqo788DE~k=)mr z6J%`pIQ@aw_9nFUj4@jndWyDno6CB>fxY)eF{A&_iR!P~{{VDBPq& z^`J{$q1nHLex9KwQMu>_IoR*T?G={l$ZhYFD+mEEDQhzaZ`hlCKWnsRBg@|K+jGGoY_`|Tng{)^B6gVmJ z!pxtIHlI|w%>~>9&(i*s?38{aX^x%WlnD3jnSE+EIx+W=L*L(J4WeVG2J9rlJMr{6;*CYEv%Fz^9WnmZdt820Q}qJ^dCGSus6QkvOT_(iY=T?+wC1_NHStlF7hx1 zi)#HaI9g7@_qi7yEyF&=XU3hj^c3<}U$1ThE&+BdeHn8}rUUP=tupk6d$+91TaMXk z0$TpS|L!UoI2&x`Fxm42G&ewskMZlm>ZZ|^ZWman?s z+WllOu<91gs#-@T(iO_|hx z2Ff`nrsF?I$Jr6|Em_azurr!ExLJ&dc5Pb`iw2)S{eJ}$TJyjk={S6mxS52vAMpK_ zpF~Hwm#OnFqS)wf#{3HxDH6V|oAY9KG6&uM7xVfBdIrYyHUuCM-NjVN2SYD zy?pm26&K&pejxM~a^@lZhB;HPFYh1qwcO1@w%yNG=>x|wwo27?GmV8-pb99T0{r`Y zb=3ebI?_L9eMHlnj=2itIXR%W_r+z){2YWFn0EABvmo@-U#{2R*4BY8IN_3Uo>qL# zx63pJ^z7sE$Ndidq2tT?Er--^(b31wr{~)RK$l*y;tBR6E_&^- zUszy$yy;EG;u+2Eq`jT^aEH{sD_i0Id$9h)B}vU|{1?)sa1 zilN7G&7s1oe&9u&NnRBLbH$5e>-lrrJ2C%1{(Twqgd9QeE4e~Jg|pgSz%%tlsAD%7N*#!Ii^Pf7m1vcPoB=bY^ zA|y1w+Dsq}^3bW%R9F7c4)n79wsI{zN4+X70e9Nz$XB)TYb%kCZy!5n)g42^Z{@}A z2C*i1%$g*tD)7O6letWG!feIZsQzY+`vy;C^sAiuFE@bx9WG*;arAcEwb z*AsBRp0(LxbV7)Vn@m))Dj^S=C=v9#uLFFu3D!%EPl0=1cymH?up4t1Bn>jQ0gtr% z_PL+hG&GjZH#ZF2gAYWRllOBzA=4B)iM7tKPs-Q4F$2Ev_RxCnh5UAGb5`@!UC=8R z9_l^%l0ijzt9_ep{x7#Frq%@TEWESA>K93ci8brFt~$W;SmHi?shv}c{!MIGTpQVh z$*a!fue;ZWGRC%xYC-;CtNJE3JC%cYGDK7h=b?wRKKfnF3I|U#t>^LnLqjwETy)#p z4D47al6lVtI0F)K@QfA`=H~T};lfV&doxB%v!@z~j?hir5W%9_hJPIt9x&HDUJ_?mM(_Iv$|=BwaEf2bZi^P`E4?%$2bzratz@tZHTYq(SwSS0vK zH4=`hy(mXCrzXiY)?_5SF*Ev3JVqbBbeu?2fj!Q*s*z{%3|#hCvEXL{`0`IuxA6*5 z(HPe+%gQ+litECUZtm*EG5W=V{HkR*@Z6@FX6s61)*&Rj^F0}#+y3I(Npl+ddebl? z2RLtJN^kC&W5CZm9J={e0SWGTQqDd%$=GCO{h~uA3;jm_u7!c$>W+5Y(A&dxXn4~} zwP)ebM-s%nLk`{(0%I;>^&80OfNfWSqHF^ua5Lhjw!>ci9*oQPePA=&$6N-ncq=S{jm2adg_t&g5R7Xck z7OG3t`83=k^X~ge=U(KfBz9}`CLJl&ef|5N!vNwBSbO%}9x9feJ*03rZ~(uF{%`RL zaMyROF@0cH*pKH5mmT!|2aw^~E$_DtQISu5hiEnUL1ly`$F!S(x5LkSWxL)WrYo%d z`2e_>eABCPx9{ykg*=bmZ^>n$jZS(WW>{?e_r$Bwr6Uvg{C4~B<8?6Ci;+I|-WbGI zR&1eK*q;^U&Ml854dT&&emys_e&A)CIuZh3&u`6W@%;%79=mwA-EZG8(o1UiTqyuK z-v?`NU!Chk?+d=}cC?1x>;I0o)&~sXvDFq43OYk5N{G;6(FCSI-g!x{@IfSbC1d=q z;1DXmC(C7YYZN^?X~iF2O~i&ePsC2e(lOt^liPO+kkJ%p>B)o^=zy^rk!*c3nh-P< z+M5eLhG`ao5=O?yZJOeSj?$2DzW(fb@C&@_W8cVvIhr|QQ9OoEIIq{xhWHUMRljYxwqKcoTvL*9m4j^a3d(u{ThIe;zRBBZowz!*|G%{R z1a$C8nRLek26o%Q~P-3K(BbH z=BeY!#&5hm!udvefvfv1RSfb@5ncc2E)7&fne`J21V4o3{Dvd?g(RGF&hFQ*rU7)Y z>!0US&_T}M+Ags6NjrLI(mPi93G(2t?`((-WZ>MZXEPPxJ<=QfTQ=xh5B}Y&t`q#b zA3gC@tLPgcApxh2p?rf)XmUQPoNCvDG?W?p+Kal8`2BFX7n;CbIb|^85exlg$&-19 zxR_Y-W|lfd4*YUQTRLP85>e&fE2Y1V01rn~Kdc!1bpHDv`Zj?7-^S&(nV2XYRX)C8 z7;%z;t1tbx5XHm6=QdyU*;dOy4U&DHwrUK_SWHrRJ_~)$YBwKg4Z;6U|MK41LdfxX z8a(=Ug@DBPsL%N@^zd#NHD_CNA=}JzyXBd{P25bqx37?eM>`8n@+ShX>h9L`@EqVw z7XBXTKEc9kCN3TMQ`C>n^NS>}fxU{Ff^fb6d3cX%6t-V}MS`5liTI4_My%5@%RBX> z0*M9ws8sTRzWPuFsed0CNT1A|w-~|1PAa^fs`^wU`^G3n{s%8X!w$XTWlPh1F4KM%ej;u{QRcw zE&^sE+Fj*bxj-r^%6op*dV+=&0(d`{-R;DjBbG9OkiTkpbV^&bjfytTOC3?x`ycOP zo?2Z^N3Rzy1}hw*;Dv&rFKaem zCc~*t%n@> zfnAL8Prjg2{M_(oT9$@Ve^^)E;xyycJCv^4$95vSi0zZ++H6!YozlJ+{5Y?~Lx)F& zDCkG5tBIQ>=#nS5kPYJ5_&|8+ruIe_&OhJl8~vAxkCOwlQbnog<9dFVr<2X-n0{A2 z{dgz#P)k=3?(0KVx4F2EUvI+)FIt*kgP+s)6UmxM<19?)z7;rmrVW2`yi^kldoi<# zTAnY!(+S=EtDQXEi7yMOy!5|ZhaGp%f2rxEqOUT{Of$%v>2K6NBq0xb#4R1XO!7Na z{xGO6JsEO|MoGTBme7yT7E3?LCgZPB=d)W)n5g4}sNgXpGIFd9yqd8Obm5KXxievZ zL@iq88nEKv6M4B_>ot2(Q_uKiN#-XMuUybK%T2=HdEK+xazHO~@^}>q{(_3)EgHux zm}qCQ{n3jibbPq1A>#}9vpz_FauqvCMc)-pR0o9j!tO)U-L83W^cDl)d4cL_VMMkUZi2s@w5I@MMV7c7W45q@C`b@gZu1tE3&yJ zc-P=YGw#3a?^XUAczu35c1S&-V+pB0QJ(26l%MtXjRuK~UCLJy|4XLgOVr@g7q*em z#@U5aQj`u{u3GYQ!w4PckR~$@SoPqWRa-?H*Y_fV!>J?F-Xt`gBEE5qPQjrT1DyL# zP3W!iRQlUE626eeG^@7&KV@})sLjULn?!+3eX1w;0%AnqE5|Y)=iCy>(J}K?FZ|cE)Xis~i zvogGQ3_5F94?^D8bNZK#`!6a=O?!b?e5hDoH4QsLPtCTapw-i`_e-KG55I%F|8JwB zHS0u~IJk9dRH*|ETZDOYdGDg5TE688rOm)=eD{kux`%|$eOw%M{oaTA2lAKwWFZe~ zpd4cUgowh%;y4Xi6l9?LIvAcqytUKNwaJr%z3gVjUckO6{_bQRaUTc`fN&*ch{qF6r;)fhfE%DP{YdVq&$q_i>!9pjvSN)8BMZq#huiRIMzmFqEZqSjn0d5}l z`iMhHd`o&OK$pJwOIS3n9oxBzt39*@-jHSKpaO6*wMJE+O(l$BGs_IVHNeels_1at zFx`VW50SdmlO81entf#Ma5`>$B6{kaS_xjAGVJ#5b~y^T?2SX`;e1QX{(Y1W{IXh8 zaz^FDnATtLlsZ?BVm-8bI^GeH?t?qQX-IN=Sxdv0&o7d;TfzNU zV4r_1%Z^&;+D^MtO)WPJbGg2D>S0WAv4eRi<_RxQ18?w&K~ zh}y)f*6u7MaP41T)RrMkywIK72wWiPx+9@)Oos8_|6}b<;Hm7o{&7=CghDbD88Q<} zQf-;aoT&^M4h~1gW6F@CBvXV4B~xS`GZk&~JRP%RE~PY@DoOsEx}UrIz3=z=zt8*r zd_G$`=eqW__u6|6*V=1+*KACx4Z^YN*x=0gfp9|Nu5S=;aZExrced^F2v5iodok55 zeiBlT(PAE+B|=-D^^H&aXQBLZv786v5D0Ou5$i?wpEog$oI`Rp*!oqXOW6?2z{su$ z@DIR=gkD-dPE?Pnt!09OJ8jvrj_hf$8?c}gSwfQlKLv|ka?f0&@`E7byBChEV%2y{TD2bX{Ni=eu} z;s%Or^TQyrVoaFyAi@jHRi7VsKy_&-Ec9ag32;Km_T7uegD~9mqQ|b*VYow#zGYMm z<-4d$(Y!|Ireq%qIX!0wzJvYx zl;02Hr_Z(=3LrvU-s)`5JuVGzBIGRL zW)`CC1&1RNYC9Nr;O-HiHFr_E@5mE) zK>jjaD9tDk)n(frfE@$WB=#n+5q@E}zMw!!=2c8n8&-n_YcxJ;JR>ZJg7^Q7d|DqM)ja_``bbJQkL>x{$ zQhjv*h?1&*(3>7YIDhYr8|nt&t?%yPJxfD?BA1rw)-n;+tc@MeiSC0k55IKFHdMk7 zjL`bI<1nDU+3@C_(;%u#I}vePydQpzXlre6t^^-e?y~O+Lb&d!6yaRHNY2dp)Hv58 zyr)NA5(l{3z$9xyTalJruR_-#M`KD{GdksyXd)>Z)y+*p3#T55We6?*TbjP zcYFXg>G$&Hikjh><7AWa*`pxqTK5LYs{treE0Rjl-4CReyub2KBHTFTWs5v(biVPy z`iUT#zY+t}d~4VwTzgHXOhkSg=cWrbYu>fcjjf2b?kK7ssWrfX4H*E2H}^QN?`?;q zd@@c2{x#t9r@94ee)N84c=6En=N&Na;64LUQzB&ep8p{BR38+P+c8;s3B6x0VZxts zO#lwg6NYD(5DrqMcpJ8P7`W&?8nVzqd}FzvZ67reO7-kFj}b@s*XmRsZr>Y$#~n2y zRr>qERXyK!LFDIpe7mOavDFBec0b1FiTsAw>gvMfQT~Q6K~Xzh65&>hJP}S1?gIz1 z6z8M3>p?>oCWZVY5vF#_xz4>NK&cZ~uIxnbSKQBnwa=Yygb^b#kt912T{`z13-KKU zirlv~d(eB)_9K#{RrI}Jl*|5Aq#?@J;P9-S!}US=ER&;0P@ZpS_Az-r$wBz;VEje~ z^4l%%%^ov0&jtF8%+CwIjN?zp!pEA=wCfbOhNu_&w{%O-UrLXdsi!su2U>1iqR&S4VRi+Q971u+YBEeaJPI1Y+w3&fDpc?A3r7_v zI57fxKRr`%>FtM4E-vdV{OAW?($*tP_YA=@Az^*N7E~v_)F<;W>mV?pZDnxrLh&VB zJNMmJL+`moxiR8N`OwbzAy4j9A5h8v{)T@F)vYttHE~4voZ-aldNZN*U`*}iWR-G1 ztp70ZatxjC?@MWLxpXSrG zJ%Z#JC%Gk+I;sowQTcfsRUVeU<;P)N;F%Ih*&1ZBokza(gmca_i4^43S zz+TV|Hll^3aHmHAHQid-Su!H*dZ}FACEEuypNbgD*$n`J;LA>5Z#)64N}@!YgdTWh zTh9;vL#V#F3TL#r^&l|+3gmOE%ixfDHN(q=ZUB|8-`k7gCf&32GwGd>yyqBdg3s`y5M8y4GjV6hKolHli$sy~G*6{~md z63am6?upt%y(q8z;QGRZKLMrXq;jlgdm+HqY=^M@jPt)RtYA zv)hL7rT8WjURwLq8A#*riTIDb)M#yzes+j$6pvl+{Z*1Wc#5OAiYMp3^L305K_&T^ zo3tdTp0{vk+J#kQ4;ZKnP97pcK!=K#gb?7{x&t4bGrIu4PQG-y#t2Y-@x-G26Y_^Y zS;*uw+>5^GJZ*!Z78k;d^xe}WX@X$lg<8^3!q`>jvSMNIYA)#3cO+vj?cQ$SY~1^8x3Xz?K(%9dM`WU56V5-SAFf z;)Ibnsw*bWQgBG-Ibg_CkLUFrgE0b))yj)KV2X4@J_E%~MpD!>1Cjy2n`N!ra&{2X zzoa)8{KOw~1>t~X<>BTdrr@a#QOlQ2(@;;LJk@dgBv7~UxV0|_ zop%)MC|-O00-lvgjXzbR9mzBi0D#P5d@9o!10BB+^nezt{&l zI%2N*c={owgr|pb81nZ6wuj`QgYa_GmwSpwN8#lq`!oAi1|hG*8Xc5H z^=k%iKdM(61g18H)6+#LUev6O&W8ly%E_6S=veeY&g;o*)@-N_T*BjT^E**KThYyj zRC4It5%((foX;2(5GYi7f#N(m=u-TAm{EKXDeY1B!XeP?`CzbG0pTLk3kqoQS3ufw zfqokCVL&06;yQ(J+iKqz+DAP={>t80`+FOZ9<1J*?}zfmE*@>>tFa;i+PtNmf%p3% zxm91UR{S8?CL2isQQXqq*5#4a@2DO$KO4&%6n9dSmCo2hG6dz~uy%)32SEidX~s+Y zKG?jW<`>I|>ZKmtUR;tn49IXjOog;4PwovlVS0276l^;!l8^8~^bZ<%Ei;cp(&ud#WEfphpBFjo2|4_aPvxE0qvofa)dGDv`IeBLC<+lVAlDzuixN zR?}Y)#oKH@K`({s;Lyt+><%j&fW4=yLd=O%V8=@2i9kIfTwn4Lk4JH()*jE8)M)Er zkIo%~om2=vtTUw&pg5ldwl1kBtGVfp3Z@ zC>H>I=X-O>%R?~LUOgv%WgNILlHO@C8;4b5VZ|- z4csa21L1l}u8~eg z1`mV878ePGQ4K3Z3#B#aN5JXOzH^mg(;#WtoJz!W0)~5~hASc5Hz8x1=5i#bIiIuQ z50`fWJC!H;X1yqm>ZXY5t=kA6T`-PLgK8Spt4PV&&ff!Z_Ros^*@nQ5vn(zoC|;ib zVY693_ZYb0pGWYYCm_7vA9RYyUzgY$<5s6X3JrU?y;ki<;LM4=;>tWDkbW^b$+~PB zc=Jnt_;R2EbV_<>yu8;7%Rc@H?m%|b;yb=ot;6VjlkS+E3FS11_&SO^it7F02H`66 z!~mR)lsF!EV*-Skm(ZIZNA4f=1yzyUOc0fuor=k)ilt2AyUd$~3;oJFs zPucrq04jef`jjQs50u}jbM)`(gUh#HDTeC~Lq4Wz^DEASQ1q?bwLH@i5b*q{;G*9c zva8N!A6G)>Yc#zNe?*Qzj<0(dj9!nzhRRs5S7RFJehPRi()a}23~a3FzgYz%a?LdT zQQVuiPRALE-3TwdC@H_~KB`l%TqI1|g6uj^uPI>~^!~`_&!F)b*#$2ZGL0yS2%q4F zIv2`ssZO`mu^4NC%e-%cR1c4VL^crC?$VXJ8ClXO zAGVFL%JPmc^2=6;tF<32hnbmdN3NLl0xWH(aa%r$V>uEmx4&r=9RG1^&cuEcIu+l- z%?J{Jm!hQ4DkTBD_Za-%W7!XBP1v9jb{Me9XLFwE7(n^arx%}Tc7T-zMx}a`4<+wL z6IN2u4|!Ygi#Ug+fisWB7OJr$tN%&?3wdw zLI)re72a7#`>5K?Rxq`vAGohu6z^pnhvS3xjAzmYfJ*Jh*X279Zr1se(P8crs19&> z+})vepcAB*%Cmy-VGc7X8FL}rzWCN|eshGkAb&S_T?W;8ioNh6yKVrmJmrmyEI|27 zt&cOVi=q6Ida4Z<;s`L$aDl9+QQer+btm!?`k-Wzh%mz%5hnK!pB+GcPr>%4BxYpK z%QEfFNbT(hKH1neey>L$oF5v$X6_G2b+>Jge%}V(h>vR*d!hQJlkM7h1!F+vdigUd zS|ZdA*W<779s_>+%5yeU5RS+8gD&5Y|9-wODB+fKAF6kueb)``rz

qILC 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

~S7}=G36|&x7p5#O+oq~sG_crLHtKWsS17{!Q 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

+f0TG{?d-0_iRS>_ zi$IM_VH6>Z?dL`KaX(&m+PV?99s_@v7K_%SO}Yz30MR~x2ngV4$%5mzi1yZ2fg|2s z2M{p;w3uy81Lw~v_qHn*WoI8~!2Y)488lrW5bcTIpxIkjS!_G?9H2=LxD$mj2z5^W zoN&7h-7?o-U$IEK9PAT*7ci78a1Ua(X0Lhv8^hjelvyVFCV>Y8abS6!IEI>DfnVj? zazR&f7dv3%GuD9ck=zX0NDKn09|Hj+Oz7#9*nel)TU8514)HO-KHwueRmGn9CBDD! ztF1G}fdg}`u-J)Iom|_95Cn1tddZlo_*MQp%igN2KgrT30hK2Oc%M3YC4x@q{t};) zE8mu_&|<)@rc(GHrP~iA*|TNRR{+M%d;x>msk=b@nSm*{IF$m~9%WmTX zKP_1PM~c1mpuc|`GkQ|n|2r~Ads~;y6E=1}3!uMz0yBDMy8JhWz15%}DvjB#q7MF5 zt}WmE5kq&s++wFZ^s`H}Fszjv`G+X?){A~Fgd7HWUh2OiM|;lNJ}hOYR`k7)n9bhD zj6XoPQ|ETPL*HX4h@n%v=;y@$#G38>SXg`%edE_D41DKT{{?@ilI`GyzI_7IVy8-f zg=t&Hu2{Lbt!$^o(5D$OEq1Bu576zc6MbF{^JycgfJ?%HdC-w@NFFQF?md!h@ChX(*Qeh&Lx1&7& zjOXvfKp*;M#lVQ#iGh7UUR#ZTfcwXVNAY<6fsp?3)8F6u>9#%)?*~RsfCO9z#5oYi ZW?}39KwJer!zbAMOd9yN`S)9Y`#*n|2ebeH From 2af65a7dcbc25f9736095bd4ab5ecc02a6fe570e Mon Sep 17 00:00:00 2001 From: Jinzhe Zeng Date: Mon, 26 Feb 2024 01:41:27 -0500 Subject: [PATCH 060/117] update test ret Signed-off-by: Jinzhe Zeng --- source/api_cc/tests/test_deeppot_pt.cc | 87 ++++++++++++++------------ 1 file changed, 46 insertions(+), 41 deletions(-) diff --git a/source/api_cc/tests/test_deeppot_pt.cc b/source/api_cc/tests/test_deeppot_pt.cc index e27401bb3c..5dd8bf206a 100644 --- a/source/api_cc/tests/test_deeppot_pt.cc +++ b/source/api_cc/tests/test_deeppot_pt.cc @@ -21,29 +21,32 @@ class TestInferDeepPotAPt : public ::testing::Test { 3.51, 2.51, 2.60, 4.27, 3.22, 1.56}; std::vector atype = {0, 1, 1, 0, 1, 1}; std::vector box = {13., 0., 0., 0., 13., 0., 0., 0., 13.}; - std::vector expected_e = {-53.7147059, -49.94367351, - -49.9434903, -53.71488615, - -49.9438445, -49.94379288}; + std::vector expected_e = { + + -93.016873944029, -185.923296645958, -185.927096544970, + -93.019371018039, -185.926179995548, -185.924351901852}; std::vector expected_f = { - -0.00120548, 0.00809608, -0.00064437, 0.00641376, -0.00109731, - -0.00529648, -0.00551271, -0.0070066, 0.00597296, 0.00397807, - -0.00078519, 0.00165795, 0.0003451, 0.00228841, -0.0036, - -0.00401874, -0.00149539, 0.00190994}; + + 0.006277522211, -0.001117962774, 0.000618580445, 0.009928999655, + 0.003026035654, -0.006941982227, 0.000667853212, -0.002449963843, + 0.006506463508, -0.007284129115, 0.000530662205, -0.000028806821, + 0.000068097781, 0.006121331983, -0.009019754602, -0.009658343745, + -0.006110103225, 0.008865499697}; std::vector expected_v = { - -3.72974819e-03, -9.98227220e-04, 3.37664388e-03, -1.10154761e-03, - -4.68713907e-03, 1.84604369e-03, 3.41017698e-03, 1.81164563e-03, - -3.22243690e-03, -1.99493894e-03, 5.97534768e-05, 1.80584573e-03, - -2.62579356e-04, -1.12440024e-04, 2.42097709e-04, 1.89528468e-03, - -3.24777812e-05, -1.60401783e-03, -8.97106345e-04, -1.15497829e-03, - 1.17916578e-03, -7.55372233e-04, -8.56277743e-04, 7.92455483e-04, - 1.07793900e-03, 1.10623290e-03, -1.12596261e-03, -2.90655831e-03, - -3.70173918e-04, 2.98300648e-04, -3.95329633e-04, -7.64980354e-04, - 1.16308129e-03, 3.15914358e-04, 1.15922497e-03, -1.79216186e-03, - 3.24153403e-04, -3.17404215e-04, 4.23089883e-04, -1.83222341e-04, - -4.67327552e-04, 7.21883299e-04, 2.39115354e-04, 7.09732333e-04, - -1.09491651e-03, -3.87972886e-04, -3.39632835e-04, 4.29685964e-04, - -4.22611827e-04, -2.23877230e-04, 3.02037131e-04, 5.74301510e-04, - 3.13240553e-04, -4.22617216e-04}; + -0.000155238009, 0.000116605516, -0.007869862476, 0.000465578340, + 0.008182547185, -0.002398713212, -0.008112887338, -0.002423738425, + 0.007210716605, -0.019203504012, 0.001724938709, 0.009909211091, + 0.001153857542, -0.001600015103, -0.000560024090, 0.010727836276, + -0.001034836404, -0.007973454377, -0.021517399106, -0.004064359664, + 0.004866398692, -0.003360038617, -0.007241406162, 0.005920941051, + 0.004899151657, 0.006290788591, -0.006478820311, 0.001921504710, + 0.001313470921, -0.000304091236, 0.001684345981, 0.004124109256, + -0.006396084465, -0.000701095618, -0.006356507032, 0.009818550859, + -0.015230664587, -0.000110244376, 0.000690319396, 0.000045953023, + -0.005726548770, 0.008769818495, -0.000572380210, 0.008860603423, + -0.013819348050, -0.021227082558, -0.004977781343, 0.006646239696, + -0.005987066507, -0.002767831232, 0.003746502525, 0.007697590397, + 0.003746130152, -0.005172634748}; int natoms; double expected_tot_e; std::vector expected_tot_v; @@ -537,28 +540,30 @@ class TestInferDeepPotAPtNoPbc : public ::testing::Test { 3.51, 2.51, 2.60, 4.27, 3.22, 1.56}; std::vector atype = {0, 1, 1, 0, 1, 1}; std::vector box = {}; - std::vector expected_e = {-53.70576165, -49.9427077, -49.68506898, - -53.71490191, -49.94386836, -49.9438074}; + std::vector expected_e = {-93.003304908874, -185.915806542480, + -185.928116717624, -93.017934934346, + -185.924393412278, -185.923906740801}; std::vector expected_f = { - -0.05793241, 0.02426898, 0.04384074, 0.05793241, -0.02426898, - -0.04384074, 0.0061137, -0.00121445, -0.00052675, -0.04546273, - 0.00444365, -0.00071007, 0.01261648, -0.00107514, 0.00036128, - 0.02673255, -0.00215406, 0.00087553}; + 0.000868182637, -0.000363698132, -0.000657003077, -0.000868182637, + 0.000363698132, 0.000657003077, 0.007932614680, -0.001003609844, + 0.000737731722, -0.003883788858, 0.000686896282, -0.000578400682, + 0.004064895086, 0.006115547962, -0.008747097814, -0.008113720908, + -0.005798834400, 0.008587766774}; std::vector expected_v = { - -9.02965689e-03, 3.78269410e-03, 6.83325386e-03, 3.78269410e-03, - -1.58464212e-03, -2.86257932e-03, 6.83325386e-03, -2.86257932e-03, - -5.17111103e-03, -3.38403230e-02, 1.41763515e-02, 2.56088931e-02, - 1.41763515e-02, -5.93874186e-03, -1.07280498e-02, 2.56088931e-02, - -1.07280498e-02, -1.93797029e-02, 2.16816985e-04, -1.26051843e-05, - 4.08880185e-06, -8.85403363e-06, 4.69563180e-08, 4.27221711e-07, - -5.68134313e-06, 1.25803648e-06, -1.28751543e-06, -1.55377477e-01, - 1.53205867e-02, -6.03170230e-03, 1.53638777e-02, -2.28187375e-03, - 1.66104531e-03, -6.12092196e-03, 1.66503657e-03, -1.81384836e-03, - 4.03275109e-02, -1.02905681e-02, 1.17738547e-02, -1.01342635e-02, - 2.05898924e-03, -2.16858200e-03, 1.15576484e-02, -2.17555574e-03, - 2.21173836e-03, 1.22038623e-01, -3.36194524e-03, -3.25713729e-03, - -3.56529198e-03, -1.12860297e-04, 3.54141978e-04, -2.94194119e-03, - 3.56293646e-04, -2.61599053e-04}; + 0.007762485364, -0.003251851977, -0.005874313248, -0.003251851977, + 0.001362262315, 0.002460860955, -0.005874313248, 0.002460860955, + 0.004445426242, -0.007120030212, 0.002982715359, 0.005388130971, + 0.002982715359, -0.001249515894, -0.002257190002, 0.005388130971, + -0.002257190002, -0.004077504519, -0.015805863589, 0.001952684835, + -0.001522876482, 0.001796574704, -0.000358803950, 0.000369710813, + -0.001108943040, 0.000332585300, -0.000395481309, 0.008873525623, + 0.001919112114, -0.001486235522, 0.002002929532, 0.004222469272, + -0.006517211126, -0.001656192522, -0.006501210045, 0.010118622295, + -0.006548889778, -0.000465126991, 0.001002876603, 0.000240398734, + -0.005794489784, 0.008940685179, -0.000121727685, 0.008931999051, + -0.013852797563, -0.017962955675, -0.004645050453, 0.006214692837, + -0.005278283465, -0.002662692758, 0.003618275905, 0.007095320684, + 0.003648086464, -0.005023397513}; int natoms; double expected_tot_e; std::vector expected_tot_v; From e9f582ff8110211b0fc3e4828b3d66d37c37e5f3 Mon Sep 17 00:00:00 2001 From: CaRoLZhangxy Date: Mon, 26 Feb 2024 07:39:00 +0000 Subject: [PATCH 061/117] try to fix float type error --- source/api_cc/src/DeepPotPT.cc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index 89226ff4ee..18ddb89a81 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -87,6 +87,9 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, std::vector coord_wrapped = coord; int natoms = atype.size(); auto options = torch::TensorOptions().dtype(torch::kFloat64); + if(std::is_same_v){ + options = torch::TensorOptions().dtype(torch::kFloat32); + } auto int_options = torch::TensorOptions().dtype(torch::kInt64); auto int32_options = torch::TensorOptions().dtype(torch::kInt32); at::Tensor coord_wrapped_Tensor = @@ -212,6 +215,9 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, std::vector coord_wrapped = coord; int natoms = atype.size(); auto options = torch::TensorOptions().dtype(torch::kFloat64); + if(std::is_same_v){ + options = torch::TensorOptions().dtype(torch::kFloat32); + } auto int_options = torch::TensorOptions().dtype(torch::kInt64); std::vector inputs; at::Tensor coord_wrapped_Tensor = From 90e28a2790cde14820d6f59abce8b4889e6bffa5 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 26 Feb 2024 07:39:46 +0000 Subject: [PATCH 062/117] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- source/api_cc/src/DeepPotPT.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index 18ddb89a81..c1d39ac690 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -87,7 +87,7 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, std::vector coord_wrapped = coord; int natoms = atype.size(); auto options = torch::TensorOptions().dtype(torch::kFloat64); - if(std::is_same_v){ + if (std::is_same_v) { options = torch::TensorOptions().dtype(torch::kFloat32); } auto int_options = torch::TensorOptions().dtype(torch::kInt64); @@ -215,7 +215,7 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, std::vector coord_wrapped = coord; int natoms = atype.size(); auto options = torch::TensorOptions().dtype(torch::kFloat64); - if(std::is_same_v){ + if (std::is_same_v) { options = torch::TensorOptions().dtype(torch::kFloat32); } auto int_options = torch::TensorOptions().dtype(torch::kInt64); From fdeb9141ce99090160007b1818b658617a1d4291 Mon Sep 17 00:00:00 2001 From: CaRoLZhangxy Date: Tue, 27 Feb 2024 04:03:52 +0000 Subject: [PATCH 063/117] fix memory bug --- source/api_cc/include/commonPT.h | 7 ++----- source/api_cc/src/DeepPotPT.cc | 27 ++++++--------------------- source/api_cc/src/commonPT.cc | 11 +++-------- 3 files changed, 11 insertions(+), 34 deletions(-) diff --git a/source/api_cc/include/commonPT.h b/source/api_cc/include/commonPT.h index 58eccb3488..931b122e28 100644 --- a/source/api_cc/include/commonPT.h +++ b/source/api_cc/include/commonPT.h @@ -12,17 +12,14 @@ struct NeighborListDataPT { /// Array stores the core region atom's index std::vector ilist; /// Array stores the core region atom's neighbor index - // std::vector> jlist; - int* jlist; + std::vector jlist; /// Array stores the number of neighbors of core region atoms std::vector numneigh; /// Array stores the the location of the first neighbor of core region atoms std::vector firstneigh; public: - ~NeighborListDataPT(); void copy_from_nlist(const InputNlist& inlist, - int& max_num_neighbors, - int nnei); + int& max_num_neighbors); }; } // namespace deepmd diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index c1d39ac690..5dd451470f 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -99,24 +99,12 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, at::Tensor atype_Tensor = torch::from_blob(atype_64.data(), {1, natoms}, int_options).to(device); if (ago == 0) { - int64_t nnei = module.run_method("get_nnei").toInt(); - nlist_data.copy_from_nlist(lmp_list, max_num_neighbors, nnei); - if (max_num_neighbors > nnei) { - at::Tensor firstneigh = torch::from_blob( - nlist_data.jlist, {1, lmp_list.inum, max_num_neighbors}, - int32_options); - at::Tensor nlist = firstneigh.to(torch::kInt64).to(device); - firstneigh_tensor = module - .run_method("format_nlist", coord_wrapped_Tensor, - atype_Tensor, nlist) - .toTensor(); - } else { - at::Tensor firstneigh = torch::from_blob( - nlist_data.jlist, {1, lmp_list.inum, max_num_neighbors}, - int32_options); - firstneigh_tensor = firstneigh.to(torch::kInt64).to(device); - } + nlist_data.copy_from_nlist(lmp_list, max_num_neighbors); } + at::Tensor firstneigh = torch::from_blob( + nlist_data.jlist.data(), {1, lmp_list.inum, max_num_neighbors}, + int32_options); + firstneigh_tensor = firstneigh.to(torch::kInt64).to(device); bool do_atom_virial_tensor = true; c10::optional optional_tensor; c10::Dict outputs = @@ -240,7 +228,6 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, inputs.push_back(do_atom_virial_tensor); c10::Dict outputs = module.forward(inputs).toGenericDict(); - c10::IValue energy_ = outputs.at("energy"); c10::IValue force_ = outputs.at("force"); c10::IValue virial_ = outputs.at("virial"); @@ -255,23 +242,21 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, atom_energy.assign( cpu_atom_energy_.data_ptr(), cpu_atom_energy_.data_ptr() + cpu_atom_energy_.numel()); - torch::Tensor flat_force_ = force_.toTensor().view({-1}); torch::Tensor cpu_force_ = flat_force_.to(torch::kCPU); force.assign(cpu_force_.data_ptr(), cpu_force_.data_ptr() + cpu_force_.numel()); - torch::Tensor flat_virial_ = virial_.toTensor().view({-1}); torch::Tensor cpu_virial_ = flat_virial_.to(torch::kCPU); virial.assign(cpu_virial_.data_ptr(), cpu_virial_.data_ptr() + cpu_virial_.numel()); - torch::Tensor flat_atom_virial_ = atom_virial_.toTensor().view({-1}); torch::Tensor cpu_atom_virial_ = flat_atom_virial_.to(torch::kCPU); atom_virial.assign( cpu_atom_virial_.data_ptr(), cpu_atom_virial_.data_ptr() + cpu_atom_virial_.numel()); } + // template void DeepPotPT::compute( // ENERGYTYPE& ener, // std::vector& force, diff --git a/source/api_cc/src/commonPT.cc b/source/api_cc/src/commonPT.cc index 6ded23ef96..34905e6f19 100644 --- a/source/api_cc/src/commonPT.cc +++ b/source/api_cc/src/commonPT.cc @@ -2,21 +2,16 @@ #ifdef BUILD_PYTORCH #include "commonPT.h" using namespace deepmd; -NeighborListDataPT::~NeighborListDataPT() { free(jlist); } void NeighborListDataPT::copy_from_nlist(const InputNlist& inlist, - int& max_num_neighbors, - int nnei) { + int& max_num_neighbors) { int inum = inlist.inum; ilist.resize(inum); numneigh.resize(inum); memcpy(&ilist[0], inlist.ilist, inum * sizeof(int)); int* max_element = std::max_element(inlist.numneigh, inlist.numneigh + inum); max_num_neighbors = *max_element; - if (max_num_neighbors < nnei) { - max_num_neighbors = nnei; - } - jlist = (int*)malloc(inum * max_num_neighbors * sizeof(int)); - memset(jlist, -1, inum * max_num_neighbors * sizeof(int)); + jlist.resize(inum * max_num_neighbors); + memset(&jlist[0], -1, inum * max_num_neighbors * sizeof(int)); for (int ii = 0; ii < inum; ++ii) { int jnum = inlist.numneigh[ii]; numneigh[ii] = inlist.numneigh[ii]; From 89e151b52761e0c390a1281a83650cc7bd469118 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 27 Feb 2024 04:04:24 +0000 Subject: [PATCH 064/117] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- source/api_cc/include/commonPT.h | 3 +-- source/api_cc/src/DeepPotPT.cc | 6 +++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/source/api_cc/include/commonPT.h b/source/api_cc/include/commonPT.h index 931b122e28..57ffd5b295 100644 --- a/source/api_cc/include/commonPT.h +++ b/source/api_cc/include/commonPT.h @@ -19,7 +19,6 @@ struct NeighborListDataPT { std::vector firstneigh; public: - void copy_from_nlist(const InputNlist& inlist, - int& max_num_neighbors); + void copy_from_nlist(const InputNlist& inlist, int& max_num_neighbors); }; } // namespace deepmd diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index 5dd451470f..748fc2c12d 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -101,9 +101,9 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, if (ago == 0) { nlist_data.copy_from_nlist(lmp_list, max_num_neighbors); } - at::Tensor firstneigh = torch::from_blob( - nlist_data.jlist.data(), {1, lmp_list.inum, max_num_neighbors}, - int32_options); + at::Tensor firstneigh = + torch::from_blob(nlist_data.jlist.data(), + {1, lmp_list.inum, max_num_neighbors}, int32_options); firstneigh_tensor = firstneigh.to(torch::kInt64).to(device); bool do_atom_virial_tensor = true; c10::optional optional_tensor; From fc18da6a7126df6260b835d81b82e2d7d4fb9dbb Mon Sep 17 00:00:00 2001 From: CaRoLZhangxy Date: Tue, 27 Feb 2024 06:22:16 +0000 Subject: [PATCH 065/117] fix bug: precision diff in model and inference api --- deepmd/pt/model/model/dipole_model.py | 8 ++++++- deepmd/pt/model/model/dp_zbl_model.py | 7 +++++++ deepmd/pt/model/model/ener_model.py | 8 +++++++ deepmd/pt/model/model/polar_model.py | 8 ++++++- source/api_cc/src/DeepPotPT.cc | 30 ++++++++++++++------------- 5 files changed, 45 insertions(+), 16 deletions(-) diff --git a/deepmd/pt/model/model/dipole_model.py b/deepmd/pt/model/model/dipole_model.py index 6629541459..852aa0488e 100644 --- a/deepmd/pt/model/model/dipole_model.py +++ b/deepmd/pt/model/model/dipole_model.py @@ -10,7 +10,9 @@ DPModel, ) - +from deepmd.pt.utils import ( + env, +) class DipoleModel(DPModel): model_type = "dipole" @@ -30,6 +32,9 @@ def forward( aparam: Optional[torch.Tensor] = None, do_atomic_virial: bool = False, ) -> Dict[str, torch.Tensor]: + coord = coord.to(env.GLOBAL_PT_FLOAT_PRECISION) + if(box is not None): + box = box.to(env.GLOBAL_PT_FLOAT_PRECISION) model_ret = self.forward_common( coord, atype, @@ -66,6 +71,7 @@ def forward_lower( aparam: Optional[torch.Tensor] = None, do_atomic_virial: bool = False, ): + extended_coord = extended_coord.to(env.GLOBAL_PT_FLOAT_PRECISION) model_ret = self.forward_common_lower( extended_coord, extended_atype, diff --git a/deepmd/pt/model/model/dp_zbl_model.py b/deepmd/pt/model/model/dp_zbl_model.py index 0fd8008f21..15c4330af9 100644 --- a/deepmd/pt/model/model/dp_zbl_model.py +++ b/deepmd/pt/model/model/dp_zbl_model.py @@ -16,6 +16,9 @@ DPZBLModel_ = make_model(DPZBLLinearAtomicModel) +from deepmd.pt.utils import ( + env, +) class DPZBLModel(DPZBLModel_): model_type = "ener" @@ -36,6 +39,9 @@ def forward( aparam: Optional[torch.Tensor] = None, do_atomic_virial: bool = False, ) -> Dict[str, torch.Tensor]: + coord = coord.to(env.GLOBAL_PT_FLOAT_PRECISION) + if(box is not None): + box = box.to(env.GLOBAL_PT_FLOAT_PRECISION) model_ret = self.forward_common( coord, atype, @@ -69,6 +75,7 @@ def forward_lower( aparam: Optional[torch.Tensor] = None, do_atomic_virial: bool = False, ): + extended_coord = extended_coord.to(env.GLOBAL_PT_FLOAT_PRECISION) model_ret = self.forward_common_lower( extended_coord, extended_atype, diff --git a/deepmd/pt/model/model/ener_model.py b/deepmd/pt/model/model/ener_model.py index 1a5706dbbf..e7fdb8c6e4 100644 --- a/deepmd/pt/model/model/ener_model.py +++ b/deepmd/pt/model/model/ener_model.py @@ -10,6 +10,10 @@ DPModel, ) +from deepmd.pt.utils import ( + env, +) + class EnergyModel(DPModel): model_type = "ener" @@ -30,6 +34,9 @@ def forward( aparam: Optional[torch.Tensor] = None, do_atomic_virial: bool = False, ) -> Dict[str, torch.Tensor]: + coord = coord.to(env.GLOBAL_PT_FLOAT_PRECISION) + if(box is not None): + box = box.to(env.GLOBAL_PT_FLOAT_PRECISION) model_ret = self.forward_common( coord, atype, @@ -68,6 +75,7 @@ def forward_lower( aparam: Optional[torch.Tensor] = None, do_atomic_virial: bool = False, ): + extended_coord = extended_coord.to(env.GLOBAL_PT_FLOAT_PRECISION) model_ret = self.forward_common_lower( extended_coord, extended_atype, diff --git a/deepmd/pt/model/model/polar_model.py b/deepmd/pt/model/model/polar_model.py index d956a0344c..4a802cf0b8 100644 --- a/deepmd/pt/model/model/polar_model.py +++ b/deepmd/pt/model/model/polar_model.py @@ -9,7 +9,9 @@ from .dp_model import ( DPModel, ) - +from deepmd.pt.utils import ( + env, +) class PolarModel(DPModel): model_type = "polar" @@ -30,6 +32,9 @@ def forward( aparam: Optional[torch.Tensor] = None, do_atomic_virial: bool = False, ) -> Dict[str, torch.Tensor]: + coord = coord.to(env.GLOBAL_PT_FLOAT_PRECISION) + if(box is not None): + box = box.to(env.GLOBAL_PT_FLOAT_PRECISION) model_ret = self.forward_common( coord, atype, @@ -58,6 +63,7 @@ def forward_lower( aparam: Optional[torch.Tensor] = None, do_atomic_virial: bool = False, ): + extended_coord = extended_coord.to(env.GLOBAL_PT_FLOAT_PRECISION) model_ret = self.forward_common_lower( extended_coord, extended_atype, diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index 5dd451470f..1c58b35436 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -87,8 +87,10 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, std::vector coord_wrapped = coord; int natoms = atype.size(); auto options = torch::TensorOptions().dtype(torch::kFloat64); + torch::ScalarType floatType = torch::kFloat64; if (std::is_same_v) { options = torch::TensorOptions().dtype(torch::kFloat32); + floatType = torch::kFloat32; } auto int_options = torch::TensorOptions().dtype(torch::kInt64); auto int32_options = torch::TensorOptions().dtype(torch::kInt32); @@ -120,24 +122,22 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, c10::IValue atom_energy_ = outputs.at("atom_energy"); torch::Tensor flat_energy_ = energy_.toTensor().view({-1}); torch::Tensor cpu_energy_ = flat_energy_.to(torch::kCPU); - ener.assign(cpu_energy_.data_ptr(), - cpu_energy_.data_ptr() + cpu_energy_.numel()); - torch::Tensor flat_atom_energy_ = atom_energy_.toTensor().view({-1}); + ener.assign(cpu_energy_.data_ptr(), + cpu_energy_.data_ptr() + cpu_energy_.numel()); + torch::Tensor flat_atom_energy_ = atom_energy_.toTensor().view({-1}).to(floatType); torch::Tensor cpu_atom_energy_ = flat_atom_energy_.to(torch::kCPU); atom_energy.assign( cpu_atom_energy_.data_ptr(), cpu_atom_energy_.data_ptr() + cpu_atom_energy_.numel()); - torch::Tensor flat_force_ = force_.toTensor().view({-1}); + torch::Tensor flat_force_ = force_.toTensor().view({-1}).to(floatType); torch::Tensor cpu_force_ = flat_force_.to(torch::kCPU); force.assign(cpu_force_.data_ptr(), cpu_force_.data_ptr() + cpu_force_.numel()); - - torch::Tensor flat_virial_ = virial_.toTensor().view({-1}); + torch::Tensor flat_virial_ = virial_.toTensor().view({-1}).to(floatType); torch::Tensor cpu_virial_ = flat_virial_.to(torch::kCPU); virial.assign(cpu_virial_.data_ptr(), cpu_virial_.data_ptr() + cpu_virial_.numel()); - - torch::Tensor flat_atom_virial_ = atom_virial_.toTensor().view({-1}); + torch::Tensor flat_atom_virial_ = atom_virial_.toTensor().view({-1}).to(floatType); torch::Tensor cpu_atom_virial_ = flat_atom_virial_.to(torch::kCPU); atom_virial.assign( cpu_atom_virial_.data_ptr(), @@ -203,8 +203,10 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, std::vector coord_wrapped = coord; int natoms = atype.size(); auto options = torch::TensorOptions().dtype(torch::kFloat64); + torch::ScalarType floatType = torch::kFloat64; if (std::is_same_v) { options = torch::TensorOptions().dtype(torch::kFloat32); + floatType = torch::kFloat32; } auto int_options = torch::TensorOptions().dtype(torch::kInt64); std::vector inputs; @@ -235,22 +237,22 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, c10::IValue atom_energy_ = outputs.at("atom_energy"); torch::Tensor flat_energy_ = energy_.toTensor().view({-1}); torch::Tensor cpu_energy_ = flat_energy_.to(torch::kCPU); - ener.assign(cpu_energy_.data_ptr(), - cpu_energy_.data_ptr() + cpu_energy_.numel()); - torch::Tensor flat_atom_energy_ = atom_energy_.toTensor().view({-1}); + ener.assign(cpu_energy_.data_ptr(), + cpu_energy_.data_ptr() + cpu_energy_.numel()); + torch::Tensor flat_atom_energy_ = atom_energy_.toTensor().view({-1}).to(floatType); torch::Tensor cpu_atom_energy_ = flat_atom_energy_.to(torch::kCPU); atom_energy.assign( cpu_atom_energy_.data_ptr(), cpu_atom_energy_.data_ptr() + cpu_atom_energy_.numel()); - torch::Tensor flat_force_ = force_.toTensor().view({-1}); + torch::Tensor flat_force_ = force_.toTensor().view({-1}).to(floatType); torch::Tensor cpu_force_ = flat_force_.to(torch::kCPU); force.assign(cpu_force_.data_ptr(), cpu_force_.data_ptr() + cpu_force_.numel()); - torch::Tensor flat_virial_ = virial_.toTensor().view({-1}); + torch::Tensor flat_virial_ = virial_.toTensor().view({-1}).to(floatType); torch::Tensor cpu_virial_ = flat_virial_.to(torch::kCPU); virial.assign(cpu_virial_.data_ptr(), cpu_virial_.data_ptr() + cpu_virial_.numel()); - torch::Tensor flat_atom_virial_ = atom_virial_.toTensor().view({-1}); + torch::Tensor flat_atom_virial_ = atom_virial_.toTensor().view({-1}).to(floatType); torch::Tensor cpu_atom_virial_ = flat_atom_virial_.to(torch::kCPU); atom_virial.assign( cpu_atom_virial_.data_ptr(), From e6dc86a3d080088b5ac84d18a97d7702db9a9baa Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 27 Feb 2024 06:23:18 +0000 Subject: [PATCH 066/117] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- deepmd/pt/model/model/dipole_model.py | 10 ++++++---- deepmd/pt/model/model/dp_zbl_model.py | 3 ++- deepmd/pt/model/model/ener_model.py | 10 +++++----- deepmd/pt/model/model/polar_model.py | 10 ++++++---- source/api_cc/src/DeepPotPT.cc | 12 ++++++++---- 5 files changed, 27 insertions(+), 18 deletions(-) diff --git a/deepmd/pt/model/model/dipole_model.py b/deepmd/pt/model/model/dipole_model.py index 852aa0488e..6887b0ef57 100644 --- a/deepmd/pt/model/model/dipole_model.py +++ b/deepmd/pt/model/model/dipole_model.py @@ -6,13 +6,15 @@ import torch +from deepmd.pt.utils import ( + env, +) + from .dp_model import ( DPModel, ) -from deepmd.pt.utils import ( - env, -) + class DipoleModel(DPModel): model_type = "dipole" @@ -33,7 +35,7 @@ def forward( do_atomic_virial: bool = False, ) -> Dict[str, torch.Tensor]: coord = coord.to(env.GLOBAL_PT_FLOAT_PRECISION) - if(box is not None): + if box is not None: box = box.to(env.GLOBAL_PT_FLOAT_PRECISION) model_ret = self.forward_common( coord, diff --git a/deepmd/pt/model/model/dp_zbl_model.py b/deepmd/pt/model/model/dp_zbl_model.py index 15c4330af9..b89e1b67fa 100644 --- a/deepmd/pt/model/model/dp_zbl_model.py +++ b/deepmd/pt/model/model/dp_zbl_model.py @@ -20,6 +20,7 @@ env, ) + class DPZBLModel(DPZBLModel_): model_type = "ener" @@ -40,7 +41,7 @@ def forward( do_atomic_virial: bool = False, ) -> Dict[str, torch.Tensor]: coord = coord.to(env.GLOBAL_PT_FLOAT_PRECISION) - if(box is not None): + if box is not None: box = box.to(env.GLOBAL_PT_FLOAT_PRECISION) model_ret = self.forward_common( coord, diff --git a/deepmd/pt/model/model/ener_model.py b/deepmd/pt/model/model/ener_model.py index e7fdb8c6e4..1be3045fa7 100644 --- a/deepmd/pt/model/model/ener_model.py +++ b/deepmd/pt/model/model/ener_model.py @@ -6,14 +6,14 @@ import torch -from .dp_model import ( - DPModel, -) - from deepmd.pt.utils import ( env, ) +from .dp_model import ( + DPModel, +) + class EnergyModel(DPModel): model_type = "ener" @@ -35,7 +35,7 @@ def forward( do_atomic_virial: bool = False, ) -> Dict[str, torch.Tensor]: coord = coord.to(env.GLOBAL_PT_FLOAT_PRECISION) - if(box is not None): + if box is not None: box = box.to(env.GLOBAL_PT_FLOAT_PRECISION) model_ret = self.forward_common( coord, diff --git a/deepmd/pt/model/model/polar_model.py b/deepmd/pt/model/model/polar_model.py index 4a802cf0b8..da27c3d70e 100644 --- a/deepmd/pt/model/model/polar_model.py +++ b/deepmd/pt/model/model/polar_model.py @@ -6,13 +6,15 @@ import torch -from .dp_model import ( - DPModel, -) from deepmd.pt.utils import ( env, ) +from .dp_model import ( + DPModel, +) + + class PolarModel(DPModel): model_type = "polar" @@ -33,7 +35,7 @@ def forward( do_atomic_virial: bool = False, ) -> Dict[str, torch.Tensor]: coord = coord.to(env.GLOBAL_PT_FLOAT_PRECISION) - if(box is not None): + if box is not None: box = box.to(env.GLOBAL_PT_FLOAT_PRECISION) model_ret = self.forward_common( coord, diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index 977658a2f0..8a2208f001 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -124,7 +124,8 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, torch::Tensor cpu_energy_ = flat_energy_.to(torch::kCPU); ener.assign(cpu_energy_.data_ptr(), cpu_energy_.data_ptr() + cpu_energy_.numel()); - torch::Tensor flat_atom_energy_ = atom_energy_.toTensor().view({-1}).to(floatType); + torch::Tensor flat_atom_energy_ = + atom_energy_.toTensor().view({-1}).to(floatType); torch::Tensor cpu_atom_energy_ = flat_atom_energy_.to(torch::kCPU); atom_energy.assign( cpu_atom_energy_.data_ptr(), @@ -137,7 +138,8 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, torch::Tensor cpu_virial_ = flat_virial_.to(torch::kCPU); virial.assign(cpu_virial_.data_ptr(), cpu_virial_.data_ptr() + cpu_virial_.numel()); - torch::Tensor flat_atom_virial_ = atom_virial_.toTensor().view({-1}).to(floatType); + torch::Tensor flat_atom_virial_ = + atom_virial_.toTensor().view({-1}).to(floatType); torch::Tensor cpu_atom_virial_ = flat_atom_virial_.to(torch::kCPU); atom_virial.assign( cpu_atom_virial_.data_ptr(), @@ -239,7 +241,8 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, torch::Tensor cpu_energy_ = flat_energy_.to(torch::kCPU); ener.assign(cpu_energy_.data_ptr(), cpu_energy_.data_ptr() + cpu_energy_.numel()); - torch::Tensor flat_atom_energy_ = atom_energy_.toTensor().view({-1}).to(floatType); + torch::Tensor flat_atom_energy_ = + atom_energy_.toTensor().view({-1}).to(floatType); torch::Tensor cpu_atom_energy_ = flat_atom_energy_.to(torch::kCPU); atom_energy.assign( cpu_atom_energy_.data_ptr(), @@ -252,7 +255,8 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, torch::Tensor cpu_virial_ = flat_virial_.to(torch::kCPU); virial.assign(cpu_virial_.data_ptr(), cpu_virial_.data_ptr() + cpu_virial_.numel()); - torch::Tensor flat_atom_virial_ = atom_virial_.toTensor().view({-1}).to(floatType); + torch::Tensor flat_atom_virial_ = + atom_virial_.toTensor().view({-1}).to(floatType); torch::Tensor cpu_atom_virial_ = flat_atom_virial_.to(torch::kCPU); atom_virial.assign( cpu_atom_virial_.data_ptr(), From f96062695e0e30db310e2ba8c868487199ecc07d Mon Sep 17 00:00:00 2001 From: CaRoLZhangxy Date: Tue, 27 Feb 2024 07:58:04 +0000 Subject: [PATCH 067/117] try to fix overflow --- source/api_cc/include/DeepPotPT.h | 2 +- source/api_cc/include/commonPT.h | 2 +- source/api_cc/src/commonPT.cc | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/source/api_cc/include/DeepPotPT.h b/source/api_cc/include/DeepPotPT.h index 1b757069c3..10446c1194 100644 --- a/source/api_cc/include/DeepPotPT.h +++ b/source/api_cc/include/DeepPotPT.h @@ -323,7 +323,7 @@ class DeepPotPT : public DeepPotBase { torch::jit::script::Module module; double rcut; NeighborListDataPT nlist_data; - int max_num_neighbors; + unsigned long int max_num_neighbors; int gpu_id; bool gpu_enabled; at::Tensor firstneigh_tensor; diff --git a/source/api_cc/include/commonPT.h b/source/api_cc/include/commonPT.h index 57ffd5b295..905fdacd15 100644 --- a/source/api_cc/include/commonPT.h +++ b/source/api_cc/include/commonPT.h @@ -19,6 +19,6 @@ struct NeighborListDataPT { std::vector firstneigh; public: - void copy_from_nlist(const InputNlist& inlist, int& max_num_neighbors); + void copy_from_nlist(const InputNlist& inlist, unsigned long int& max_num_neighbors); }; } // namespace deepmd diff --git a/source/api_cc/src/commonPT.cc b/source/api_cc/src/commonPT.cc index 34905e6f19..86555376f6 100644 --- a/source/api_cc/src/commonPT.cc +++ b/source/api_cc/src/commonPT.cc @@ -3,12 +3,12 @@ #include "commonPT.h" using namespace deepmd; void NeighborListDataPT::copy_from_nlist(const InputNlist& inlist, - int& max_num_neighbors) { + unsigned long int& max_num_neighbors) { int inum = inlist.inum; ilist.resize(inum); numneigh.resize(inum); memcpy(&ilist[0], inlist.ilist, inum * sizeof(int)); - int* max_element = std::max_element(inlist.numneigh, inlist.numneigh + inum); + unsigned long int* max_element = std::max_element(inlist.numneigh, inlist.numneigh + inum); max_num_neighbors = *max_element; jlist.resize(inum * max_num_neighbors); memset(&jlist[0], -1, inum * max_num_neighbors * sizeof(int)); From 6ba4125ed83c11097d4c0d8afe1cdf6c282d950c Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 27 Feb 2024 07:59:38 +0000 Subject: [PATCH 068/117] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- source/api_cc/include/commonPT.h | 3 ++- source/api_cc/src/commonPT.cc | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/source/api_cc/include/commonPT.h b/source/api_cc/include/commonPT.h index 905fdacd15..ce8fcb929b 100644 --- a/source/api_cc/include/commonPT.h +++ b/source/api_cc/include/commonPT.h @@ -19,6 +19,7 @@ struct NeighborListDataPT { std::vector firstneigh; public: - void copy_from_nlist(const InputNlist& inlist, unsigned long int& max_num_neighbors); + void copy_from_nlist(const InputNlist& inlist, + unsigned long int& max_num_neighbors); }; } // namespace deepmd diff --git a/source/api_cc/src/commonPT.cc b/source/api_cc/src/commonPT.cc index 86555376f6..eb068d27e8 100644 --- a/source/api_cc/src/commonPT.cc +++ b/source/api_cc/src/commonPT.cc @@ -8,7 +8,8 @@ void NeighborListDataPT::copy_from_nlist(const InputNlist& inlist, ilist.resize(inum); numneigh.resize(inum); memcpy(&ilist[0], inlist.ilist, inum * sizeof(int)); - unsigned long int* max_element = std::max_element(inlist.numneigh, inlist.numneigh + inum); + unsigned long int* max_element = + std::max_element(inlist.numneigh, inlist.numneigh + inum); max_num_neighbors = *max_element; jlist.resize(inum * max_num_neighbors); memset(&jlist[0], -1, inum * max_num_neighbors * sizeof(int)); From d169d81071f57293077bc856082446e6b1a27893 Mon Sep 17 00:00:00 2001 From: CaRoLZhangxy Date: Tue, 27 Feb 2024 08:23:24 +0000 Subject: [PATCH 069/117] fix compile error --- source/api_cc/include/DeepPotPT.h | 2 +- source/api_cc/include/commonPT.h | 2 +- source/api_cc/src/commonPT.cc | 12 +++++++----- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/source/api_cc/include/DeepPotPT.h b/source/api_cc/include/DeepPotPT.h index 10446c1194..1b757069c3 100644 --- a/source/api_cc/include/DeepPotPT.h +++ b/source/api_cc/include/DeepPotPT.h @@ -323,7 +323,7 @@ class DeepPotPT : public DeepPotBase { torch::jit::script::Module module; double rcut; NeighborListDataPT nlist_data; - unsigned long int max_num_neighbors; + int max_num_neighbors; int gpu_id; bool gpu_enabled; at::Tensor firstneigh_tensor; diff --git a/source/api_cc/include/commonPT.h b/source/api_cc/include/commonPT.h index 905fdacd15..57ffd5b295 100644 --- a/source/api_cc/include/commonPT.h +++ b/source/api_cc/include/commonPT.h @@ -19,6 +19,6 @@ struct NeighborListDataPT { std::vector firstneigh; public: - void copy_from_nlist(const InputNlist& inlist, unsigned long int& max_num_neighbors); + void copy_from_nlist(const InputNlist& inlist, int& max_num_neighbors); }; } // namespace deepmd diff --git a/source/api_cc/src/commonPT.cc b/source/api_cc/src/commonPT.cc index 86555376f6..291d5eeb71 100644 --- a/source/api_cc/src/commonPT.cc +++ b/source/api_cc/src/commonPT.cc @@ -3,19 +3,21 @@ #include "commonPT.h" using namespace deepmd; void NeighborListDataPT::copy_from_nlist(const InputNlist& inlist, - unsigned long int& max_num_neighbors) { + int& max_num_neighbors) { int inum = inlist.inum; ilist.resize(inum); numneigh.resize(inum); memcpy(&ilist[0], inlist.ilist, inum * sizeof(int)); - unsigned long int* max_element = std::max_element(inlist.numneigh, inlist.numneigh + inum); + int* max_element = std::max_element(inlist.numneigh, inlist.numneigh + inum); max_num_neighbors = *max_element; - jlist.resize(inum * max_num_neighbors); - memset(&jlist[0], -1, inum * max_num_neighbors * sizeof(int)); + unsigned long nlist_size = inum * max_num_neighbors; + jlist.resize(nlist_size); + memset(&jlist[0], -1, nlist_size * sizeof(int)); for (int ii = 0; ii < inum; ++ii) { int jnum = inlist.numneigh[ii]; numneigh[ii] = inlist.numneigh[ii]; - memcpy(&jlist[ii * max_num_neighbors], inlist.firstneigh[ii], + unsigned long start_loc = ii * max_num_neighbors; + memcpy(&jlist[start_loc], inlist.firstneigh[ii], jnum * sizeof(int)); } } From e77f5f3e47521f55e8ea4ebe158ab5f756b7cefd Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 27 Feb 2024 08:28:02 +0000 Subject: [PATCH 070/117] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- source/api_cc/src/commonPT.cc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/source/api_cc/src/commonPT.cc b/source/api_cc/src/commonPT.cc index 291d5eeb71..f8b2d21a83 100644 --- a/source/api_cc/src/commonPT.cc +++ b/source/api_cc/src/commonPT.cc @@ -17,8 +17,7 @@ void NeighborListDataPT::copy_from_nlist(const InputNlist& inlist, int jnum = inlist.numneigh[ii]; numneigh[ii] = inlist.numneigh[ii]; unsigned long start_loc = ii * max_num_neighbors; - memcpy(&jlist[start_loc], inlist.firstneigh[ii], - jnum * sizeof(int)); + memcpy(&jlist[start_loc], inlist.firstneigh[ii], jnum * sizeof(int)); } } #endif From 7cb94aefa897643ee5008605bd2c015892bdc9f4 Mon Sep 17 00:00:00 2001 From: CaRoLZhangxy Date: Tue, 27 Feb 2024 08:58:18 +0000 Subject: [PATCH 071/117] try to fix overflow --- source/api_cc/src/commonPT.cc | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/source/api_cc/src/commonPT.cc b/source/api_cc/src/commonPT.cc index f8b2d21a83..db832e0781 100644 --- a/source/api_cc/src/commonPT.cc +++ b/source/api_cc/src/commonPT.cc @@ -10,14 +10,13 @@ void NeighborListDataPT::copy_from_nlist(const InputNlist& inlist, memcpy(&ilist[0], inlist.ilist, inum * sizeof(int)); int* max_element = std::max_element(inlist.numneigh, inlist.numneigh + inum); max_num_neighbors = *max_element; - unsigned long nlist_size = inum * max_num_neighbors; + unsigned long nlist_size = (unsigned long)inum * max_num_neighbors; jlist.resize(nlist_size); memset(&jlist[0], -1, nlist_size * sizeof(int)); for (int ii = 0; ii < inum; ++ii) { int jnum = inlist.numneigh[ii]; numneigh[ii] = inlist.numneigh[ii]; - unsigned long start_loc = ii * max_num_neighbors; - memcpy(&jlist[start_loc], inlist.firstneigh[ii], jnum * sizeof(int)); + memcpy(&jlist[(unsigned long)ii * max_num_neighbors], inlist.firstneigh[ii], jnum * sizeof(int)); } } #endif From ed453fdf283dcba06d31f09bf3e53c11d6e14aa2 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 27 Feb 2024 08:58:55 +0000 Subject: [PATCH 072/117] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- source/api_cc/src/commonPT.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/api_cc/src/commonPT.cc b/source/api_cc/src/commonPT.cc index db832e0781..345220323b 100644 --- a/source/api_cc/src/commonPT.cc +++ b/source/api_cc/src/commonPT.cc @@ -16,7 +16,8 @@ void NeighborListDataPT::copy_from_nlist(const InputNlist& inlist, for (int ii = 0; ii < inum; ++ii) { int jnum = inlist.numneigh[ii]; numneigh[ii] = inlist.numneigh[ii]; - memcpy(&jlist[(unsigned long)ii * max_num_neighbors], inlist.firstneigh[ii], jnum * sizeof(int)); + memcpy(&jlist[(unsigned long)ii * max_num_neighbors], inlist.firstneigh[ii], + jnum * sizeof(int)); } } #endif From 3a06dbf3e0ff0bcc11e9fdb2b126ed6f7b04144b Mon Sep 17 00:00:00 2001 From: Lysithea Date: Tue, 27 Feb 2024 17:16:24 +0800 Subject: [PATCH 073/117] update model --- source/tests/infer/deeppot_sea.pth | Bin 125020 -> 123401 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/source/tests/infer/deeppot_sea.pth b/source/tests/infer/deeppot_sea.pth index 6d4b0e2fac7dc9e0a771a3f52bc7c78ae3b10362..6ac68ed7fa6e6ac815516951cd5fdb22f487abab 100644 GIT binary patch delta 68477 zcmb4r1z40@*ES&_-Cfe%EhR{IcjwT|&;kx2NY~I^0@B?jIe@fuNSAYY8`*~fPVV=G6UTf{Op79x0r%)mXP!h<<@!)XaY;0}a-Q7IRJ!~zxY%D!3xwz$| zG2o2q1e$2c@ZcW(bDu{}S_}??OUDIyK!@4zh_3uMbi9A1gFKRxhKXbTr#L=2Y5H4n z^pIXTH5duSKS}uIq)Bc`NFa~oelm;}jxp%8$;(@8>t zw0`G_;7?Dq9}@k$1rQuXZb+{-FU(P)e-RHul<$vZy4UbXryS)sc8J{B@yO)KzkABd zed}qxsS+Y=|6dU2<+-yn$l`bWyg!k${N4T?lJ!=4o2QzFuMQ748ET*0)OWw-!B+Ff5-m|Mz7!P|Af)|xAK3% z==VGRUobxT-TqG){eJ@^-%l9*c_|3s1pkqZobFD}a?-qa>DVA1FpR`ufC&c&=jrEe zYwqT1YwqD-V+&-90AK(xnN69MIh9RpJ+%xFVI&^5)@pa@JqDop>w zTm7hi(=Td(ajV14+}79H*~`Ph%@rsX;bjFBzw_44!P(OmWbSO~XAANGO2Cv5LTVCm zA=#k>IFc;Efy@SX7TP$t03ShmL&@N!Ae9M%*xYEUZZ=-dwki%Do@hX6$b)CXB#&>& z0q_w31T_O>m`Vp%^IJ9_?gr{k8~#nKbx z;0sg$;4?D=2mpk4p78?}e<7=M>lyqVwumrvBYvT)d}p7PgQW*hkIN-eE;yp?58gPjYz;>>;!130kk6k zIsn~2qXPJ8i8;&?3jpW8S|SXz1Q3Ij6=15Y?o=sbz?5P91#s*CuuTML1G5bS#$bEP za7+GYbnO1Gw%NmM1CYReIKY-846eT<6+i|u6-5P>1<3uyC8B@0fdGpG4>!>1SM;54 zt@>x)xctS9I}RS8>n{$sTaKSK{0GMFfBK>J-+>H-*$?`caNp_T1$w}A-NxJVF5X`M zX$&9G8%A&&aG$#<{0&s!KaKhCZ1IEH^5kCverF3m&>sxbbsO=3J6->Xc;J6pCjfj3 zuEQyDi55e~p3vrN|;-QlkEX`EA+!pQ|AnCL{*7Vqq)pKZ`*b9`N92 zD}gLW5&X6+ZWH}4>HFVhOgv0s!e21BP0;^;+Wi{_i7+Wif5G53k^ax=0f7lghOHFX zN`@*IjOjZaajzrKg*V zxh*i~e;UPI1qcFjVd;zjOXs}XbVh)kU$-a5pB+5k00kxi*2~P@ygY#g%J6py`cs&z zEeKes_A}@2T7b7D=x5U?GC-z*vDv~X?EQen05oNUJ9BU4*w}hlgWNrVFCb$vbnqpR z_c4UvQf0WieOE6RD|1VCOOT}tuuK^aK>wHKb2}S=tleB~fG^by&|q)u?&!=dz3qYJ zY6e(;UU6{sHuvzf0apB^`zh~^uJR|{uPcAhRpF=sSR(`2=N_)7LmlfcTDGC$98ISw8<1gn5 zEIa_AUx^`n2Lg`}u=7`9bloM!-6{OXSl129zaGFJ0~0MPKbqRl1M9Jyv$HL1d~kC` z1NPo2cmyleTk&_J5#V-!l7W8(n}Yap<T(wj_V2Zfd3AM@2+@{0gRU<7C|g3((a(f-zH z#{REo`D+*`;{b|ZQzR#N;?BZ9hn-uMyxhP^m`WR%%Bee*cS_OzGBr&9hmpKIz?ol0 z&i>QLHvp}_xx~v0ocl!$p8qHL!XG|G{B2zN&8)Ntb7%>6g#D`{e8A;jj;#Ef45SvI7wLV_bqXLwMj-AO{dW z_1nSm=adh->jA#|W755wAS3@VLB4~@Ifkth*gA!+_pmncpD9d94S?k^;5Kam|C*$b z(&St1OUZn~|Ml2<1ylA3rtDWJATlYpBD_;L;I$ydDT1OJ|4l$a@UZ(eFDnoN?B&m} zLI_hI!enWr3c_SPPZj$wWnui3g?TIMPhh{_$r4EuqrY?Qf58)yp2kQS4tVvqQvL^? z;Qs|rz-?XsU#k^F`qO^0Tl@b9SHNxc-PY7!3kCdV5Bkkr1&I8oFp67Yf7Z)w0oHtr!1;lS$Dt+z&ecrU>_#z=#Q+wz1#WUuw~7l!Ti5tc>z=N@vmzB=jQMC zH&r0IpC;4an*1l0UtyxY0kj<9ZZH2l{x!h=Rh}~Zl*f3>_&;zuBHg}KalC)~qUDHw z`|?ZbeQ*Fo*42aX1(hCaX($q+@KWcnTKz=Vv7*~x zKB{*s-{Op8gTCtPThWHMwTnQ`?pejI=Qs@=mvwv%mrcdCGyLn%qw2>mYrN!?sdG&g zL$j#G;uB2!k~mygobI2ycFkqRuY38elRFw}>Bu&nyLN&*+Bt!m(+Qny%AmAj?0D2M zXrQTN?~PkWb6G{P$)@zPHCo-I>1=)$HgAqf2cvL>JfCD|2qngi7XJyF9566!8xw;_ z7rlo41c#pM-92-1qwEqtn31>>#EDrC)+~eITg*!lIG|g-nk?u1-^kgdVlw>W>~)(45W84`|L(H}x#L3!&?aspr3+A6;MMv{J8;q{OC*o2=k4`gZ zXLmd#&E=dVA!}$Ekn?OXtYg^1=o%pf)xd)VAR8;yzOHrUqjXMCyRnv`u(vHFXvhJ3 zZ^`o7#`bF;1d6t76uCO<31>a#B|_1ajpiFwK<$;;i+XOCMT?c4vz6G{Ul>bxv*K`x z9K>cT<2oI}lRMj)lk3XUxrQa6-K?YYXT)0@j+XXNdQvXi7(sEE^cY?{iAock zo2y{e_x)Ye#dE6n5H4MxK_8=cE}q@A1Rk(qCn@Da4jD#O4eDPM%FE;Tu4k;%rHH z$joVQW^u^#4YKhjA=~$wwWY4FcQa*YX~>5l za@@YlsgRPbdHTKL^c1!_%kD^{G+c1e-1N(_I@JDy6(ut zHKCv8z{+n3LyJ8vms%Tbpe|7Ab=xqcd8kR?fyYrY(p%x^(r(Ke4}N8^D>jd`(Iulx zhN;|aIr74Z!_c3GiP%+>fwfhC4(wxI-H9msnQk@gxoM5;2b@G=t%C*|$Wv((MYb5t;^Uz8PhS*R?CAAk*?BNcZcauC8u3q{L@|=T> ze(~tzfK;#1AN`|KBvfSN!$L$sdt9VA!!E|yJzZU1MV6A5?8fFiA?j?p1C4=m_J)Kx zKHbkY5?&egryr9|C~PC*O+5e`O;)KLey&)xKS&wjBMEZH$nO--7I$I+r#bmoxz19D z9`~Amd~&{0eXnnUImTiEJzM7H>kROqJNd&4|r!eNlWK5U2|TTK?z54Q zq&1=8F=H{rIcJv9e@Vr>A(MzegE*Lu%!(dye<~8rd?(8T5%9Q)oKoqLo)h`-hlow? z@V=3gT|NgjnTK}$KI2Bz;3>@G3&%3J7j0kQrr}PX^rlL%XCrxX25YqC^9JQ&s%mWz z;LIdV?|s!sJ8GRMDN3;dPajD25YRkzb%o3C{`g$N2lrkXau(_t3f%68GZ$nmy*^0+ zOxw?pg+ifqdiT>+qR>W-@Xa5l(!T6#d`l_9%kqefZ)aE}bQnNGXW&Le$__O=Cl#A) z>knTbUT=6%cy?FM6z&a`abg6u8C!nP*5_WnUlyz{1}gnv6)3$&68U5|@~hraQ z{(Y&ixdSeXY2?*m@f(47G0a>pb(eK35GVeu*$+LQB|0WjkFvP^!i!Etw2NNS@$PSx zme;ii_)X5_QpfG2vQG@>gkhA82!%!Kh?7}J~)i(#$-!3)zA z)#B)BMrk%8zm8IeGWHQ2I2fAHTK4@ix*Ddp|_u*{+T@|d)5{@ z&C_{vdz#-1b29k1yeuy11^tNOnY5cwJsn<^>q9*I1mK&adWS@YE*s=bI$p*;3j#dk z=@uKR?3DyDB5sg7GIg>aP|CTu@VKQ6MKgyftKWF1>A6n=_2Xoof8J6V;G`9lQ!(_Q zz)sHnE-7Z(DRy+|TrDSV+UW^f_tbrC{oCIy__a6gA8w7oUYB0x#?eXa9NI<2ce|Lx zt>HcukQ~;>?xZkOQLiPcPmlHbZdM#@zBVn-U9%9%+IP?&kRLycU&DjDWc4ul*y^eu ztf7o@|3TnXbua95mkTb)^cDrS0vy`EO@g#wW7Gf&-EZ%08XQDFNB|DoRG&C6+ss}o zC>{oOeP5m_v30qgV8Kt;`j$GaMxj|gyN zkapyff4m>>%*gR`OCtF89%bg(r~Cbl9#+r;4qruk7vhPPR6kOAg)2(Y?5F1rJMr! zF+8L#J43qh&2vUH)02mVmQ|ynf_qonz?zw>5 zl5-=op1>p3%Ep~j;;8Q}FM|wM?}s*SO8ZQ-W2fc{J4p_#=}-~kQkTaPy89=-I|e84 zs8}tc8>P9E^aqYnHu`$e235%c%1a5=`W4>tZ^*0^sS~3eI(vvk<8S4CENY6BZn=8X zl=TEn2vP0r%WEC$WN#Do%5YGLzR4u`$j(DwWF_|WMkrad%rWLvRY@J;?2`@(1Qg@; zY+ZBfhCeG(XEo+w5-aeTb>ldKWWN0>m10*`oOb&XsnD3u(1qOd>byev3j1xD_!HgO zV)a&1lR*$-VpXVf2XkWcZEv2(4>Xhq!BM zGTf5`R}$d_#bxfzg1B(BCeDSU?_;_uKpg?rfaW~(+)CAxUAWeI9qTB;mVL_A>0BiO zPdmG*)O<$1)>xg`m&?BD+R5{lcHgRWtuvePLuXr$C=^oO#GcBbu4>V+W zb_cPEm>Qv-a@YfA2L+amry5x77n>yZgE7n7-7F0CUP?6yDgrE67|yMhHO<~VuP~&` z8NIl;n49mV4I>gynwuTxh!x@M+ZoicE}4JZuODk@)HU@~kG;Nn#C2sFJYSZTXaZql zpjNc6lJ8*u=FPKGPEHw#!Adsb(qC9p-3rZg6}(%^%Er zjeeEurfkEjz}84#pM>lYSO>;L$je6t^{A;fZ;kxp({N@bU#jCs}%Yl_PV2f|1>HY3ghbY;4)x<8`7&gAo*kp$cYoDwr4d;Z_DliWQy#;aQ4%^7*3|NG{m5sY`<0QjOO4 z4p-?e6yKip`1UmqxON?&zKRt>=-iO|ROvS};LF$|FEowhS`P+|Z+L_=I(wX1GZ_o7 zr%5jJ6_FVSbaZe`ugCE%`kS@rzI#XS*ed*S`Kv2ozu?mih5AyL?&G4giQod(3gMHXK~K`MylZFsCwy4f zh+4Fb#x4wG!#taVj0HENE2lWCr_t9nXroktv)eRfHWC@4N!|-wytPw(CUxHiB;KY5 zy1cO)DQHUnG<5HyJ2FJi;w&r{L%r;n>*ZDJCs97(m%WBy2efR$HTymPoD@bua(O`( zRdaw==BlE@JnOU0AYlE$Q`t4+M$`J1ZHWc4$29uA8m%O(R{r7+UzAVBG|`nkguGR} z3CcZGRdH4FW-0yrA2{SmZ&|SKvey)nRp~_q7Qf4I#5PbH^WwKMVXitl-SD$CMZZj% zF7Ya=J&xA}7mbe_P-J`_xG0frBcGxW%y-v|7<0S~^@$PfP`QktG!|azrwVi2Y2fMFi z#`CDdXW}CBdc8q)Rb5krb)ol(VxBx19`tOI7V&cl0)we^iZ(o~#9jP+qJZ!ZR}tWh zgFJJ|BZQ;1qLq7(N`$X-mWjYMY(^h;PNBI(l*54KcT-7#g-}(JY8if~9Lv{S=>a#9 zr8RiZ8-`mdg*m*#=IN&2lF+@i+U}B&96@nK)rjRZ@5;oS7Tj%%llGUFS_Bw;9hAx~ z9EV^xgB!+=y}h5s$MrTe&y!^z@rfSyi&}|`7F6rQ4=k|;C}z<#zEep*ra@1Lev=+r zJ|y8%H&sX*Qef(0BU_CrZV>Gv$kW=?5|^^$)!0yr?c+sUv6sDFtGY$dO!~C`8B?9= z%8|?A;cE@qfX?{l+%Y+#!y!hYlWy5LylA;a-(oO3yafTaG4C%snYC_IOL zyLi!9-$irdGW4ZNPoTU6<6?`bIDR zF4=ad{^OHf#zQtOvEy*eW}3*e&k#Zkoo%qyOO@U+iZno7P*bJ7<~_PIBa}}PsrHW@ z%u@pRt__fz=c`#{{4|5Z7R@1F_XgvYUo6MZwluwMJ)ay7NXoF7YgH-7-B8nrt#NAT zNK996@v^D3O7$Y#!*5d%;7qG$@{cYX5-P5*`1poe`e9144#d%f#ykM1sgLZ)^iUXF zzzR_+8e&?SufKXS8csx9uPlJ2_;3m^{SU@fp<_Wo6I%#d;%pn8~{iFAM5M zl()%I+^L874f}2%RXlhP-W5AWrMzwfw_SYHl1&WEX1_)@Kd{WRC=JI^x6jyD-EfPg zJj5Ux^gW>3Z@DLg9OeDthxdlI{7Dx5iW{XIle8cYc|^U|`FL={MtpIixAKO>g-+Aa zjx@R8wc5tcre;M0mycV@JT^za&kM2&F0W=b`Ys*yZl;Wb{7YQVch}z@EwHYOfZq~9 z@!sdSEf9SK{TO_63N0}d!}V#&J;4PM_}nuSM}Ccb4pm z2|weUe*C!h4(E(mJkgn@#CQ$sNFtWvJU_}>N~xu&?Je=ACk@TXxx)!9lvVWxl;B={ zdI%lorx=gaaf_W40`_g?Ez&FlGSBXWT4W(OmX zTwI=+OPxDDeB8QRejZWt!6^rzC-KVK8edf%zNE}zz3VxitBua~u-3XJ7r)mG)775T zj8Zo>X3S9hP87@0D$gb>RVqk!jN@a#bZD0(qv?KY!zI3pi%>52d+MiT9{a^!RJ6?G z@%K=~^mP_z)e!|e>%UnA&<-(zMb#wO-%Os&seJG=;0CeLx3w;aSPJ!k6HfVWzFK1U zB#)9-mwGsAhSd1$Y1f81irLG)eqCI5q{ff?GIp_KMB6eTx99m#tS#+Oy08ORtINB= z@T;1|D}6C%@0CI>!276$hN~X$m70_0Z_zgo$6ex`oJu|oE%3tk)U8(RKI>T6Xc5b2 zRq9n5dLPBn@&5Xg)>u>dIT)qF{gsiCv9a@URZjQ7rASMlL|~LIVu0bh=h$(B6ma@> zk>~PnUvT475}U>O$)Y(MhIOV^VOQ_w75jXtKX=w9ymnYPseIDz5$i~;IQO}sv5IxT z>5Kl0&bg>r-O0x-zp3n_6+kA7fh$Oqd<+=j> zOOeG$v~Q+H&Md|DB~=qbK$IQW+;YTZYccZgnaO)7xOF`EIC=>%jF7H4LeN-Y?4?irmQyt zbb|0H-fnsK^vHOiQ=i)R*RM))*TS-9b6=N3E0wO|5MU2;c{@^q)vp~aO#5eiQ$-EO zQHgRCa*1RO){4@>NP4es`0T1)3M5Y=R6KAkz2dsCC||AP9{)iJpxfcp-IjbMU^Gi< zj%@u}#e+SXNW_sVugOT)dn2wQYbPOfDZr=#O_-YQ90Ge8`)6ZEq$#116!6N&jXL{c2q}A9vDJ zTHxAWmO<;~y6j8%LOX6v`8t%@Y+<$crZaH!77^w%#Sa-B^YxQmKX5u~1eHBheq-?- z?vgULYmBVVDCT^${*#WLTb!WYvNh#VN~V&}6{i=86OUr5&Ujtr^n>$VzB!6v_jB*k7Gk#X^FhpAMCu9OHq(gho{8gZx1PS|e63jc;Hj5oY6HrvHXC&zFtJ^ju;adqmPh^Pfi+s~ zMF?)UqaM#Yq0;(NWkjF%f(-VC_m>D@PA0D9H|VF zWMchZplW+hDDF(3%QwSC&0f|1D!pO@DD-ef*t^5Dk!q~=Aki*@v)KSiCN0|<3&;K? z={HOC?|E;xZNMC|WMpBij5Y!8iDd>T+!ceWLtUzxsqbHi@a;9pdEZ#|bn6q=tw(B) zlMS7j6*owSwAg3{;3Casvy9>oRb)1Vkc`{q@Zpw=7&jUcS$k7XBsfl>K3U}Ls16g) zW?QCmjcFS#7g47-AX+!|pUbAUQD3aUG+d3%MPmc=^np1mGtp&Uh#@`kpz&AO>2vCe z6LD`JxkgiB0_V`wj~&i@EkfiwP0g$t_BA8oDOlN&nRgh@TzXZcEk5`>(mBn;|M-f4 zy*o9MIJ!(^5}iwmfqKrw#4}XfF{}Yp>FXP zb6)Q8&OhlE5=iU5@&WzO6%Eu|FD>@Lz`-g@#mw%D3gPu z`3jGo;Ewl@>mlX5F#G;gTR=bB+T9A+kz)&}d+y8$&RIZwXi8T?yN>UwYL>DuW?bV@ zn?_e<-c{<&0cqF-i!}8W)Z6*y;2R>--&=pIl^yp{N)yrT6@h(6cY&Cps|$@7{j>Ao z5r`}7L2^0PIM>Hh2Lmo-oc&dt9L%GKS(J4aTCWi!A zjC;m^fa8Y*9^IV($TCzivU3;%I{}hjPdO9DW_}=g;pFJv@&@H2p|jD>C#G?iN-xv1 z>a!kWyc2Io{^*LP$}2H=u$*F^&G~z?t&_tY*HyNwF^cpTOOfy${t>4!M`0Yr*oTkD z@y|Oxl7B}rWvIFl(NsW1P1M3;v@Pa3l>dsKLIIXVP6)QaAyo-aD6kN;pKT zlq!DKw@bkSs@{N}qfyAv%WN9Oy zg9_Fr!NvPX$pVbSiUiqt?06$#(P_zTCMEQ|9~R!;#Pe-=meftKz5(T9I5U>{s`>fR zR=_}FnoF@H(u+58>+HckIGQXUxCliYUozXn$xCnrXV56c6>89p7(M_J0e8|9!Z7k{ zL+A);%A{-_gpK3v`zlW8#j&Hl8jrvzbjJhBr-oVJ(}uDfr+yew&Q?>LFpJA33?auM z4Y@Rv!J^?!?vsi$Aqc6!A(h)CioB#$obVC3aOtSoBy6!_=v-m>#YJ_J9L%v1C z6rZ6)UfMelPLO^&jKN+OUVsid;qmXR3j@Y-MOfQIdGo-aMTEWZoYH@V^ zeMG!SE)V60!U_-)UlL#`Wb@IB*r$Bqc(W8}I*G%OV)HOVs$4-JGLeiI@|w2ce4m1s z7(79DdA^Tu1Ew*2Ch0U{1!8|mrwj$!uo#9zLG>Y(^c80l@RmC1Ne%?ACo7IL9(}cFiOfchamN__oHDE|o#TlzB+ED%arQD>9}byDS$3fg zmcE#Yq^;f*A~@mExGxL2Ww%tep&XXJ_Yxf&9VouUjz?-LC{UOtdDP~C!+*@b&9Qty zK7H*BK7gZ`<u?6K2;cb|qgzK=PQ&nSs6oUUKG79sHq!4W-Jq=J5eEKX+$ zieU0M?ltx+kPMNQu;JDKg9vII1+_G>+6XNg2gOTlDLUFF-|zH+upl(hi|o7aEaQlU zK&`Sr(SopPhYNRMzSFdlCq6{;QO@?K7x@I-(d?*UAfQSR#s=>2XL(R8i^Q3bgoH-0 zzc}k2_@YBLxB(x~B@I4fSp7K0{csCfBMo@NVi>pY5F{)qfM?%KZ_g<|l-#G)n9s)i z2-h$Is`NpcBEuwV6P=-gJ1#+(R8h?vMtXubyrYn(We^EABEhCVltw&x^-dgQV zJb7^jPwT`Y_BzomrB5`XvgoXX_Ck#I-SjeWr%uZk3pa$13k;M<*nw5_r{iuxjn6V$ zH_>$0E?64O)Brkj&alT3&c)pJ`A|cC4T{0k;H{(M4d`BNm~)@_WTG^Qnyd|9*d_f0 z5`{xk;x>y3W79)=V0G$_iRhGDK`Qoz!MrKG6q!p_I=#Av2a~m#DpkG>dYEbG4abio zmkip64j>~caLL|Cj9 z5i71j&11qRL|PtcYo};R&6)tJ8OOk$q*a9xZ#4hUKKozRX`Z(2X-q0CE2Qoyi1I`z zUKDS{9FjURE~-$K_F^@DWU^=!c*DgY`kL-VsAplaIGEY8hHg{VQIPk0#g3{Hf6UDD zFDsIwukmF)6Sbi)ca&|YMPiScN+F0l7$8QG=xo&q8WNX8kDPQ176FJ#jgRsap$3Td zD`fL&8~*baUgWmqRh1D%f_d~wuI9YQX$S=J^Fiki<-OUs;cZXz&pM~}bR*AGdk-Z0 z?8IF8yun%|Ly1g;p9!u-NVieq_>+6Fb_Q5fQiNyeMN%k8wGgavmt-xA1|0Sj2tiY7 z4DMdSTG|L+P=^6iO&L47B$*ys;KVMpPB5tt!UCK~`}!4GzB#Q|ZRfz3_eG)^2e3ME zXSFX;kKCcqokXFWU|nJ+qatI(EXD%N1*bj%%Wd759KB1U_@acm`aGLI%tr)N z72BvqBCNH8u?MwfaL1(WU{OgG)|QV79N&XdyU>SvL+Azr*Jy!8FS@Ukvk~bA4ZD1c z!KJ4pySW{g+}`$t*_R_oJJJ`nAlxr#@iSbEX$dt+HJdc;7~|009r7JCelC;|T`@aJ z@H4v$GB(Ga)Bs38w26E*lTZTrNXv-ojvWa73szf7z`_%dxWqNp7l}5^#FY`s9kqAY zRXZpXk=3PkQ4RsE1nZBeXTq->bt=MS`nj>Ie2IK$~-R z2;~df5cKhm<;DFkby+UrqYYL4J3JTolSvx4ZHBmGbZau%5h^q;3g@swS#%V_=U|c`X=@!=O(mMb)DvY5;*A-^m+&Jg60c2B0xog zCNBw`I0@|;0YmqvN($&hs=H!dSv4ZMaO+*j_%sUc&DK)Bdvy$4${R$QeZn*xLi91%oHLV0i2Gj6r(jDu&w^~%A5JK15o z){!1*Q?m`(Jf-(i3rQui`m(?X+Z+?0F_;iY_w%>Y57hjrTUK+MS1fu6`cERQvPkj2 zX*tmk^+i@mkdiYD*~Mufamr1!5zK_>6qPMCOz8(dMf;%tNOyx737MH&BUlOzL(d`t z;V~geiEkW`4Z=s>UJu(` zoHw8mI4aUizVKm8^b-&YL$Z*M(6)p=Q3^wQI`bj8M_Zl4i8lA^BTQrpXla`>DR4!! zMJ_Dvo5}338E9-k@A(%KTT4l8(bInaGQ%*$KtXDR-0!ZFrt!IapiL(M#AiRCRDfl= zq0e$-U_p`U>91mOlgtMmO6wy_J{Q19h=%gZa1K7x+PX1LxX6oWT@GaYLdpPvxjK#7Jf-zYd8K>+Qw4%8z3 zMXxi`9<$zB;Jw$n*;8GynH_$I$te~!MebePAz3AjXfZ3oAmMv8bRcm#a@ie28Q1)? z)(5*Rk>?(YqrE_@`f0xmkaJG8*FaZXyTZwxag*;SUhH!;VX z{dn(t#z$5fPfBg&WU_*2lruwd0?_EG8p~Sp=VP5?8p_HlZG9ogvT@ z1GF7z9)T};qNuwUtIJMc$6O9UxPDZ25u2Z0)!4lE8Q z3NUEIL$P_9Q$L6@-;E)3ACfapt1o$xQrT*ygHza_KA-c&%YlT4%?i#Rndk|B!ySqR z&wkUA;8HRy>NP@|XQ|Dt5_i^sTXg{@WE##N^IRY>_-w{5VDzM)^BGm`PbQdafP}&# z&N{Ot!EsGJDDV9HE??fX(Mb;VNJ6{cMhi6~fP2nv;C_5(J+)Ul?FXbIf@$7sRSNX) zhJ@&&O=3qOU@gH#pIAqT1-XYIq}}G8V~6qJ;e39->^hG z69w(}y~i*S&MFn7$8e05IK_w~Q3fJ@YCWyutaXN`&5J+m!B;o9hP|)Nx6gwgzY$mF zI_@WU9MAK4^S%&#yj2+#*Od`V+kh4r2iak-xN=$_C0$h!3%7&Nt*YGIL-dLRpKX8B zMyv67mK8KyH}nekDMnszt?|}}$ViZqRpHZ6;lA;KN%v36*`z!_NXY2r_~ctreeocD z>1A)1@b*m3OcRo^=wsYecw$VwXy{G^!;#@03FcWX~u-enjio=53_dgbM= zzkr0bm2`R~EA_q}e9~{t2>RMoO`ZRvrexPEg|I~!XJ08bIAf-nXr(53!ec0tH&5uK zv(iKF5xL1WrspI>(b8(`S7S{#>R$6l&?T(B{m$Z#-7h{>B7yCb2s?y&5v)jVE}VKR zh)AbS*X~6iZ}ZyXRjx&|1~JsTOBf0BQ=K>lUw?;}r)^qp23H4*U%fFyF*jgvDi}As z?y|J@&~+E#PBEN)j z{U)%^!a}D=7QyM3vSn&-L2`jh8m~y|)>1p`8^+((EB@yec54)%AlXMVB& z_RZgvKt(f7bi`{J0V)rhmPDU zygT>HRT|j0C~R)bo$oE*7f~&&$+1A5BH+&CwW55`+NP#03X(0(YBsBj_)O`*)eDKy z(T*GF;TbsZ0Y7}4I&HWvN?Ee^dIXso?pi)Hbx0B39vg4OIG6AyW0$W>4bWQA;>&p$ zp?I)RsztKCTt4UJN zca8JHmMi6u_w7$9ACtUQh(PDs|6yaoo4`|YVdH&nro?!58H&@?ip43-w|#icm$HKK zjyesj>SaWfWT^0>+s^Ms&~97ckk)JC7&w1|6a~8zDYB@mb9xCGe6;C9&3c-@yo`{j zpjr<%SIvsNWX<##Au*QJyYRy!f;3;^M>_6&WMfl99@#3sr-}O!y$$*k2Y3ikhVDg- z^6(VY51QIjr65=dV?w5_p8g4{1#8U`uU=n(%Pqf|(~ytyw(ov?H^4})6eoK8^;J;? zGzs1x``RXRwnn`~aCzeZQT?I#!rGNiDUji1uHBQ1zwXQ=Z}@R8jKNYb9M&N+eeke#=29eKToTs#Cop8Z2%|Rj$CJX z4pyq}&|Iq5=D;5HLtK!D5NRol^JtKCoh$ zrY64P*-i_8s9#@RPJ_OL;VOXZOB|=7PX(snedASuetec39@8cu=J`=KHHVlal&Q5Z zXf|liML2iSJzM2imO_L{e+(WE=HTm{gmvlxh(KhkT})(E5EYtChfN zU>8r{Ok~4L$jW@g&3`EOdI9}M2mARG+$V9U>ig&IEcg0+Y&mz)iHU!ZyR$cTb$No% zyL;p{O9xomlhwN4uMq`Ff5(k5 zv4~xbc6F5gid%rW`g90#HaS<^3h{W8<9m@iuz%qHl`&A=%KTzWZKrn6ge_2NYrBXn zFGfJ3`G^8rRzigJ!bW;mG}~sNf6EJ;!ZiE|!_4O-43h6D9g@WIMJYDm%W_M4rq~Pf z=)|Xk;_%8u_M?HkG**#JRwEbLASJOurpFmdL=jydn!B=>uN^-l5d9jU zw_o@HQw3`GJk{cy#s`S9`3LO_L5Z*k`2aK72-rKgT8X82M>Af953xNi*+tK)N2`(SC3C1$ZQCT7ngj?YK@ z?%3DQN_pQ_*z61_iAc%C+aDqMg3TNIJKvq~9ECpL{v>(PhiK7G)eV>QlIao1*_vNA zaRwXf41wTFP4HoR3mu+or#R+1XCp4(`3&;bD9U>Jb7~<>FhHH~VYhNR;JKPwtZi#~ z^H*AocXF+98S=z+{+B_exZ42)mHklhbOTS9`M$y*qr=~SfQZf~ukF>|ACfP8lOJaP z$P-FF+3^GJ_Q}@Z?3Tu-urGiwQrxv}c{t3!KG_Ou-Mo;s2@EjmA75}XGD0LAuY*chT&XBf~lO1NL?7$O>vp8jA>au8Orp{#wzF20lDIZw$eqZ4^N+ z$@`3Pl-8mSYqPl@vKa$gnc`s&w={ZDv_!hZtQ0#OziC>*(ZcW9S_j*Cf9mOA%XgwX zobY-7?R^*c2kgh?`%P3O7b&S%d)2PZ)l97&MWy1cMWr3qE2$Qf?H_ZpVi58|+=DgC zbT+t1C7tj`e5F;5tdn@8UY=9Qy@3}g91J2wW6cL9UJ#-6$yzErSb}drqU*SeuuT zl{}$}g*4t+Rdfq+K3GFbAd5EgTjm^r=9~=sO!}7w7E6J_EnI=+WW%ZvozQ|uRlL`rXBHWA4pqR_MybZWcVken_lN`<9@OxPA!F z(M&=S+$Oa#Ta=kGrd`gDE>@>OTW}a!1=8>96AmxzqV>;PWps;v#~PKw!jMbyHXCFs zv6hW_PU0GI0QcI*d}=R)m1W8qt| z2c$x5-C|$INmAd?*i2QPC5UlXJ{L!7VYY1yQ3zK*>{O~!OVQeY@P#j>H&3MYX^X)N z5EWmU)Jx)WpbEJzoz#AB$;xYKTlMdPMVK~(4Q~#4c5%dOp~PEV&_?%Z%W;an9uzS0 z8~Si%UZTXL*JBAp-cI2$TfWRZL{E43Dug+WVmSp^=L}7?XJ^;%DU8|*sJa1Fd%EYB zl22_ybjOpXD=R66m*F|0c2`Avx?(v3FQkca;+kw4aon^A`45}{YAr_Dc}q(d6nhM# zF5A2)a|Ym@WfxZ#7WmG(u)@tv=4LQ%jJohdg#@b>-J%h)pHJEx&YnO#`{_2X*7*Vh zit1{TaY~idmt=8C|2Kd)iF7$=@goVwHalj4L7(LD*;-~hpBR57;ymovO@&-6GyB&; znLQic9hJ8h5{_aOLXloN^qUdt7P0O{?@FLTDN_#*hXxK!JE2RqYli7gW{P0JLe10o z_$Q94979DTmsr$$|BtS(49cWgy2Rbx-QC^Y9R_D`cLs-t!QCF5K?WV%-QC^Y-Q8j5 zz5DI%z2ELebVUEC?CQwqs*F6DUFUGSP=1>!ML@^&89-cHqst!C9+tDo|MsJ~#nJc^ z!5}Rw$M-_BV0kw;l{xi2{nIDYh5Y1x8GCg-l-TLK$5UPkU-k4@l&Q42X@R-P#cSWF zf+IqzS?M)vc6Z1-vX)2I6mniVFdXvbJ;L-54`A-Dg;@lRpzh0Py?(L+k??~z+!T}S zY%af*rw7W!Mn>8#h>f1uMmHgxFYtNreRkxU#ps86?1(jo)nGZP*-E(#7(7-Fqg>WC zh zpmrLSV@#0HhQT=IwcTuS_{MVCi*cK zDhl}2DPm0lcOhm&8XtaM$`+ep>lyA1h}BdtyElHaM{0IYzPn&s- znVgN$-7`hoj9IzK!5H9d`uqScG9on~M=pg3QIP^vQ*t$Fl>EQDuUNb+|_K}t&{zq4G&L&&iH`Qp8k8&96e4);^B zQqE|^yqm(BTu@s>Wqu4}Gy4bJ7{GOW7O1Ea^}Vde-7h8|Yg+S6M4)AB-;(iH9j=MJ z`zuwE$@Dy#0Fd0Pg%CF8Npc2bL?wA)&uQw33-^vR`6i7zg4K~A+$7rX9VT}UJd!OI zODxV)}D8v`>l%#2xp(SE#=Bt)t{E@d(%FK(p`N=%=(<&nZE za#Ft(j!yEj$1zII3^Am+0s7ntcX`=b;lfyX>XY$Douy=52_6C6U_&p0i&{d$RCkLc zrzpfy6TkAtgoA?qu;3{+QP1^f)l?GY7iJF{n`;Wiq=QBM>@C?$Re)L_!&+E6PsM&a zNP!Y&iiVG&iK^TLQy0AiVmI(&3qprCnP@uNjNMa@;84;sUPJ0x0rVzV71;*EH9gUL zp{?mK?QR-#3xCjF_K3R7P~9>Xxnyg&(kb?1BaAf5r;BgqPVD?iCR7+{=BEaR8~e9* zn)&LSpoQ(*Dy8yfP3BB3`XpWYHnsxHq@X@$ce_6IK%zfM3#lFNJG%52I%qf2a3&3+ zm?3?bwRjGBvrnDL0rRUJuCA_kY$H6st`5P-y_vljC!T@nhR+b~g>|+ct&`i2+1rPc zOz&EzK2Jr6g#3K1jhx@>I+d-*w03aaKKNqe&n!M~n20Z_xhs?ic>?0%=t7>g*@&Df z6aS*Y*e34I`0=fhmoulJ^=3T1h7iBONByT??wz~aO;X530CS&O$PHoDM^baD|A-2T5Dn9|~S_3vE zp2B!}zLiAA^@x}GDC0Bn7vN@g!GYpM?&yV3p@P&l7rNjK^f&zCxhrKaW{ehHArNq|;iQ!LdWe6yPYE;YzKRC^{7VzE zF@de(ir{h?#h$ErYOaOzw(e81^8#V&t)YHmrra<7Y_bO&16-J$@4&M$Ts5Z36Zp@B zP7&8dyrs6P_)~ZLD>fz4v1W&?2eoXC$cc5%5zkdNz~oCV$**i?@Sb3-%{U{Bdt}@9 zBGIPxE4R+mv%3;4ZVZv1_5yqFyZ6HXxo(|!R79ij z=a)s$bd@tfq0AoA7BuSuz|LIWp26bB6PvBy7L z41nMkE)IquledF~&<9iL91sSF)NA0x?TdT)Q``yXGURO==F>x1cW2-jVenYMmfl3g ztZ&Lri^cp{;EcvZFTuCZBIMV2uH>)w{BRwaPU||%Bri(IZ;GgaO`#@w66cu&{5t)e zvCDc~Z&~4-a^V+@7R1RbPCXW7yk5$zJ^)zt3;WCsQrL370W^)SxdZ{N z-bvCI*UXB&{S~xFj>N9&74Jv~222b>I!Y)4teQ6-Eur*@9J{`*Jyr%v|6h5>)&SL8 zWu8X|*tX#EuKJZWvPYo-rqtH3ToQvC!)~Jxu4S$=2J&)E^IajAbAI5;lk>}0wazg4 zmgwy_E`GXNB6{*rVJefMl66_sGdgLzI}9yDo4z(Kd=xJ#IDAbEtUJQJivY&%_F-_H}rv-o^XMcb4ae01EdME{JEt5oiOVd zefU0Jqr| z@X>PR-*frPVO(XIa#|HRa?>s9kRt~K>hdcrCSNg-DRP&2e|lv*l5}J~;{X#-MTsu# zGBc!fZE-+b`4yPNF43iubJ@txLaSZMNKGYlmMxBcLt1lTv2(PP8teXd_eckHN^*j? zAvJf@nk|#5g2X5Fdr+m%`lODSee+B~p%|Pm2+5p+T1%c67g`_aku76B^_8xo<0=Vs zW>vdhH;S%rgPn1Z_kfy5WdOC+jhkp~jERTK?VK7HB&BfeiuzmxtR>AWhruC%WX{gM zG?UkWMU|6_60TnG{#DJ5`a~-2E9!!8NFH$%lCM$?^PkN?xj?0DGXQQB*-OoYnNp|r zU}wla^)d$U%aQpxCWY`oNx7PKQC;FWA9_utoXLed>RBbl<2gzV5ukNb$wski*gL}% zd+b-rGw$UvLXF52$&lY2!f)?Wc9|@Gs?n^xtpxGP1-wTD(7KPx+DaLw*`A!jjUZGJXP@lBGvpk)O_(HBZ#LrB|8>uRPXN zvXP1D5EW^(GE8Z*Hh^^~x|W2zOv}XAW>+d_2W&|X^%X&OSwsN|b7b}VI0^si`d|D*#h+DJoHpv&0$t&pwSLvKH|5S%s7J(>PK{%$&G_D*0TwG4}3?_O*tlr6BY>zpV_UfT6eokLb)Cr&;CPh-^b zg+@xg9c+ocHQvXK%fqoE&WjB*vh#JzEG1+5^!u(hd&X}okvsa{{zeU6c^RU z{qKzz)yE$T;C$L1-XXH&69G(capz7n+SY?lZWozRKFRp&1+vB?d?eOlLK6`72L$8c zKKcQVs;M+%e?=vEtHVU#w|Q8i2aBI!XW_|D7Cq9Z$8O1xIfwUU2j^h3Au?Y<&GY6+ zo0>gJTDj0LDGR`*gh+2VH%RJc+yo?+33KuQz_scTiGF2kNp zac{C&<%n_1V>(O8^A?64N7q-x)a>AU|ZdOkWqM$t|Fr`*U z_u}e1eCAr65Idw;5b|dSVByh(cdeJBc@K8&c=PbdmBzL_Bo|LX*Y-WKfiK%^aviN9 zr{1-#H4?OK5t|p?<}S%{?}=VfZH$b(4D)1fYIyG$PqQiAnRqou&m+T5EQ4JII>BWC^`d$_^F*B?@Z}3LYi8e zl!r`0Eb$30N@`8vmixC$nj;ETl>3HHIN%ONuJ2{n?nvf$z_p`(MM zoz3eymF07Enf2nGmJNUl5xc8mK65=82Zo)5jOX9q_7y^>->+v4yfI)D%YQ=zRAxlrR;q-INU!0!e3UCYNfA+OGMPE$E0~0E89%O+61T@@SdPsD=?eq0^->g zvpTj8BF*F{p5RL@(4@!eR9K%MfUxff;|syr#9GJ66T8Xy+!=c}1PK_> zVhD@DXHi}ck~8baaD}-TD$#x1zX#7px9hBvY9^?%O#l?_??((|<;9DsPijrhSDG>P z8z*#&tn9r>sbpe@GF@cH+?fpeNnOWAGiX^!PXbwEvht4h@y4ko2GPlOC=Rg9)$GCt zy-%tI{xVNnK64&U>ZThmXdC5*N{1(mB`}tq&c~2VGN(RMMRhcFB;MKD`|6s0v#VBM_DdmueMMwaO4kkO>IP7)v^~dI`?L@kVD6*mPLxB{uUYO6 z)?+j6!Q2LGCgT%SKAOkj@}2k*1aNc)M~`sn%^^!#UcfCJ5o|#b+szr42xQpFt}v;u z#E%⩔fmO)`!Cl89JVa59WT1Is@zY%^_Hi%8MQ9`+WeYy+K`YBSP!B)wCvrp692e zH3l%ZyjA7B+IF^Hq;gGG97`Whw#Sl;+9h-C3?D(lYRQi*2p%>N{sqwW zyZD~$Q?IP$>=SNZIkYsmK79G+&1-x1y~FDY4R^XML#IrQ(K3cC6;lU*Vnv?!aoJ+U zG#zF1OgF;Zy{lioBm2eT)DG($)3JD~_6+IZNK?uRbH9#l(3t^mU05fh&fM#?eS5pFbe<&-jeP@`aW&wv5fBwW4=MSQvJ)U$i$pGs;E(` zDY6A&F~DcRpS=^0JIfqK^iR(^_UFC6-cR;vDC2Mu43lfL`aV)mTn=v1M2o^A>k-dy1OS4?98#gcXK1)DL%rWEr#W={RqZrl{=wG1 z4V<|%(_eYxAK|9fq*LZQD$AG|0Tc?o7z%xo%@CqdKWecdIiKNJ1A7sR@#E=2(1XB|Cw&884M(WQxE6=RdU#K%*A!f*lnQS_$NofjN zm}5=7Ar@GjCGlGcj9ta?!byz6D#OU;W0wA%h9UUzftgP54t)gcKiiy;FZ{GVxctJopPu@qhp4c-Epw1FpdV zsL6OUzYS9&18{F(`ysttG)W25-$SMS;YWZnpJ{s@`o3^Cj!EVpT04N^<*)2L1Fr`u>-l)>xgCo}+^s?+IcDvRmis9WFPj}wZ z;1BIp`$=)cM~S%52he*@B*D%NLzHIh8?XMYhij&<%JTa z*6t7n@k`w72#nbU2Hl6wBZ+ zR|}YKH6_Vxp*q2(!&z}>jCbL6>>E7!++HUMDAqO& z-A8X^JY34H3pPt!3>4xVk{Bxy@2u%|5nh4CyJKvt%&=|eN99c2Kr^g`<-otOw;ia_RUa&paUnzxk2bCo!?u~qmR@D zl-bm;m2I@hyO+CzQ3|ftMNS6+@7s6nlA-x(GyXWh*PAc>9#rSZU#_(QegL?#a*A4~ z;IS-DB3q*>rE4h4xg!H{D>G$MOXFuj&Un4W8$zq#v!l!-{W~_EL|Y8)E6eV*zZ-@f zBH1pc2h0g5t4s5PbU127BD!-oG)8d&%tk?jrqa7nZ!lAnOy^#}I(!S%Q6A9dKZ1v& z?nePqk9Y>PXN7qzm!nEeYi(u2^)~n=oK_2HS)ZvdBGU)t)Qd~&yr^#ix(gxMP5 zeq1PPC!fKslg_UKFt|gFk`_Zu@XuSu6VWR?)e?hd<*MxJK}!naX02baxW^v=zct?B z`O+A-zJntOz-agH#HInC6d7zht&`l*`;HV%PIxT?jf$e_7cbML?_^=(Jo7us9>mwA zaSf3gPJgN@y2;mjvXIgvG@wGI`q>do5v8wDVt0)N0;O+Q%lp=x1wxg#odteU-(X}9 zvOiM@g(&ao2!xq>66N&3d!jM}cFd!%b(nPs>X5jH4b#rU_{|_M^*(*8r0Jl%xD|*3 zzjuG682MIF`-6&sT~2-MBC81$C!Fbq>4V%X5g9=!fqhjR|0d0GwS(!0##@PV8!lB~ zd=ZcFg&m~b&J_H_;6ZGsd@+sj1^Wd$N%vY7`4ziACC~{oj`8IuSw-^+c%lGoFEl~D zH|}3?+``<;cVE%JN+$y5hI4X_pgv27y1<3O-y8A(y4$s^c;!&fge|`Hzp7bpa2Wpr9wf#Ybug zk5ZvlAm|g>U+{(b|9Xln)s__$6YwL!AZktoBb0jOQrfbs^s@9BR9tiw> z)FoOD-^qcZ-$Kr$IDOo#w~>3-;49_n6RPT+TuFCD5nX^{+${TPU(oBWuLv1cER`7g zQxe6$6K*r4@4M5(jy;ZkyZ@IISr}e)fh2Ke$a`5@%m~fyIxP-y7fBtE9l&7!T3__1 zbnD6p?gwE>+PB2}r4)TB&Gn+^dj z=0wf918pfBn$#=aTzz{#`_T z|55?^t8fMn6nVn}cl#Cz)OnM~l^##F zfhzR=pEb%3Liiu^{|o9*e8QxfvVjuT1-ui2Aq#?#{l82wz=-~NKM^1qIOVu5fiYxn z*<`)J^*bKQMFc?)mO#`Fi9n_xg(}`iq4?*->~kPjrQjy#4~z2~2E{*-A~NMDVQS8j z1Sr@{1R}fLA@pcyGSlEw~txcM(0?#cigle@Dm2O4$y@eLXtMuE_Q^tq&PEzRc<-J@0nLUHcc@%z13 zYlNe0Ocpci>7&^27Bp+UlC~f4wXUjKl%=&TR zpvQ?BeVHI8&?do>NqJW{r&b$#78Qo{wNBmO?A0PSV<|?VWP1T21)zyOuoGA+MxzvZ zPQT2UbCRR7(Vc`{*-i|iOTZ;JmQ6c;F6A4Diqp~Dm29N)-;}gjxQ>o1;5*b=*%T=* zF(IOa$k-=#2p1FHjcI7t9p78eqj3<`e+MA7D5pfuQ%d0nYuP26Tuf%1G{1?_h7BTD zUt%tXUD9W}2AkmYZr63KHROg9Ua4)9KNt>&C7e%43EKX!so!X9Hzwm*dg4Wk*J~7nb$&#egh5;z z(&*gz%r`oOu--`jR=)20b za`hle*TOx1Bw*x)pg)K6qiEOh)&k;LcmQy=PYlq`3Bw^SJDoEvG@hiXF^;zsSqHfh z>tXM%0O5% zD9s`mXu4a{2n$S!s-mrN8wP0jF5plafqcr}gh91HwL|*06`f6#zPQ!37S~OjA`5Mm zXX6Ym9DcH}3G&we&ywGa!FQwJzk**b!0BB=WNr}b|Jb}eV4zH3=>Ke7^hR*dBv63P z<4Wb{L}n;X0f(~;;wN1>iyJJxo20``C`~xF{OtTtAZ=Dfkr&sNt?d0R^B7;ihuRg- z1nUAk*P2!;Q&0xH;um$Wf+9*Cq!sj`zmG2OVsK6*7um9f`_8Qx`DF^WbZXO3Dx*9#3d(a$SuYrM49b^~%%q+;NSMk0W8iAUqM@qmHoOxb>db{@7X3WH6_K({0+OG-8z zVN{UNLg@?ofG8IOWE9r!7YsYk=JzXTbLsX)Xt(<)&91pjM#d)8WYj&nKy;PA?I8t8 zZVmflzMoqIz{AJxmV|SJYc(=!JBg-OlrDC*k9MK+Pc7aO4ur5yxXzaWJDpvDwHRMf6$#T_|ibT8J^^WAIKg`2VY0xKlF~Q7h;D?c~lu= zvTsvqQE;J;zW;${`F3d0O3;DNoV88p_TiojQCW)9A-92Uj`@NLEvg=#5-r5RG0?9i zKU;ETc2$&i&)Q}5cIO57y7L1$7bnRPS0R|C17l?0dp-50>Us+9&ibA+^0cf-?v*IT z995ztwA{m@V8RH7uszRI)OHR+)M7p?PLoJ{Fr0a#OYW_LBpOotF!fWT=vk=_g0G$T zdn3;HYG-ck$~>{K>k2|-+*8|?ITIuvSg7b3`a3k#x5yf8bkWGmk&fnuZTK< z%)vPeM={968o0$+-}EmXD=c*@C68R4@oJsRY}i33_ux!UpUAcj^HmcfL(c$(pcpH= znm%@C*AwG&^L)pSYrq~`jlOnt>h?+jELD$&Pa|GmF>LB@0MZttzt>L75jwYjZdes? z>$8KL05RwJ7S;%WLsga4rvdwE(0o()QPM+nXR!T#xfxS;$KZo}HtHx$J-7DomkyJn z(^&MTl{6j!!7h5eyZMpEc8a5E4Lc(HYx@E8{ly!>U^`j%-fYV#cTO7N+vc#YVhiT; zZ6V{8&T9Jva;creIk1LZrUn5n2;rz|YG4-Cb`MF4|Lv0vl}b76j>YODENJmAx7w^| z!16`EKv+!)OxcpN1K|l-pZg2+pTyq+cvlyGw;2uvrB)a9+FCaGb5Cu2x__Nnx?9o77hj}}NGZq-3 z9O#2|8P>cMj3g%HJQ-a9Q@ES~q@?}d-AvbjQ6l*VjSj|N@0doP@ zO^?Zzr)-}|k5v6q@-Z758>D+=fK?lGKJ^R%0(EhK@C+i%KM<<4h(=;r$37>zkVB5A|!a ze1639l>!Us@K$WdY+JzY3fYW8FK}2nGo7}m5QbRU@{I?6Nh3KkLHz+X0oY0_i&U~` zr?f5ZIT{ua3Z3zgOWcK0G=AvW6SKPUm-4T;B{k-^dDkYoT6$fQ1un*$Oj39JSui)R zQ(C&Q>rJ0#wDA~lH4UA^Eapg!^_YA=ALTVTvHMljO0Yq6mWOK-;;L=|ZhasY+9yeU zlWW42vO7kE)gEs`SCHj{3n+FUXLC_nJXO6>X22yXz~#67y&E_yQ7!FJV5d`zoAx9?N4$fYqrKX{Rgzgyukn@h0MHCB%&604PS4Pe zXK}GjJ>{oGh3Kr?$E+?-EAC@F)v9x{9Zy}VKBZ>Jp2eCggf0jTXF^~>Her0>d@yV#uCVyy|uJ{hBJ}BrH(qM&i?uUqGQFkD+yfLW(3!ias##7qvS!8;TmMf30(LpdCg%(XPq)6JQ&_>|;x|Tm+Z`IMgo?z(%%l7y^T5>L z^=cej6Y|p*1z)~kf(@ldt=eoEyy4t5hI9t`yyzH)vD=ZXNmrL|#eK)t4Jzmk544AP zwJ|;|x-pd20K4%V+Qm2&SE9Spit?&RFMb`$&{6qyUvG-jx8>gs{UQ~N_#qB!&F+|b zx6r${L93Tt^}rQhx=S$f`2i=4Gl;<*ffh!e6jeXpB#)9bQJ0~Iis*43rcCFV+910W z2Ir*gpQ+yyCNF=hc{`C0sa9d9#OSD*f%9sM)(9xR1G+KPB`ya!29ZuUDdxY574aQl z(zuTQ3UifiBe_y5Tqc5a0XhaiV({I_aEy~_+la*8m`J_WcL`uiW^i4*0=QEohaz0i z4a!aUBE%!4(a$L}hjNopWe~`hZMaXW4lB|?xc6tiJ$5*dwUrK#9eg=Z3${+Q%BnAIs0?X0RLYoG@n? z%pTr1OQ;QFfp3J-*I$LhJ=vUe2yW8aNBxlUGSmA(G~-3oQid0Ioa`x)6C&+xae&$Z z7q>1*A9q}LJ^UyqkT*3-?wug*?HEtwmO%8k`gLEuS2q_lIn$?9tBxegYW^b~vb{a& zqncwwa#3>|Oj($3Z`3k)LxR4{xPy-T*yQ6BjNCKkJMv?^PuWX(FMRTcOS{T#M^iMR z94p)@`+2VXKUZ~?_wUm}u?=Pn0SDW2wU(Sht;NAWVG)PacZimaxpAlx@C`zWjYJ2) zuZweUYYPG2YniX?4e7igsC?+y`@NEfs7UFL_rZR4Gn5z>^*3=eG8#ph|5c6Yj#(%Y_l8kKst&bI9&3abf zlB{@L678Ii2wMvT)ahDmE^HchVGa<`>kc<-E+<^&36DIA|-= zTAgMzy|SfcEHSfAT?xtGN|$|4Ut)m+y(t_(73vL6CDxMeC;#$|l_G`fL&W?f6fMF@ z$hXnmNC7%Ky=U)7Fw7I!lIOSzw&nbSZu(Ef$fgRsr3#uhvJ2;mJ|!*y&l%VnYeib9 z9@f_uqty)KyoAqHEt7XRFUv+2s%w1ZCis};7%p;9 zr1g}xmg5?2oj^gFSM4C6=|0vt@dkCBUz){E+)DVes+-bhO$4snUpXEMqH&EUar_v` zH8Hpap7p91{mKb#lTzr;yF0VlAA40A{n%Gd#-a;W2YKwqZskK+f^`bk!(d>Do&UF9 zs8C{F_RC9TM&UwUT6c41raQR0EW283nh9lODfXy)9{XPSk*NdVt|Le*yQM=rd7q*D zRU%N=Qv;QONwXnbv!+>Lm5z}!TtEd&kl~nKV&|zM@+H?)2qQQnZD_4I3{l!u%8o%Y zIibCWs|+{nV=3IkpNR*fU=n0rM6rjV+2~ohjgNW+%UJ)-b5p5cB zAMtippp*^#s;es?k=@;K;^7=G7ZpPr1pYT{1}O;RG+b0JB37SbHAGixFPnC(&^HXf zP7M~}st&{AkHX5_EU~KJUcZ*~JB}U>;S3#r>g{mdH=}82Lta$lEp}g2V=aoJ@O>Aw z3qWxb!)g6a?$$@u41O6rQ4RUf*vr)n@4fA?9P8at4gTN`=w(_)^!d(gbK%;s`dyeH zAjk>kb(;l*02DD+Oqd|Z=Q~JjAIUmA_4S1;i4_1&NgQJ4?K{k67|m{9ZXZlP2@(bx z3!JQDf9PZJYT!#aSCbNdh`3OU_~#En?)`gT$6?Fw2x{@62xg?vRNCKzz`byu))hd! zUjiH3we)oK00B3F?&d;A`#mos()HA~4M)>H5W-V;+f_KvLAp&ZZz%7AK%$}e2FW?B^VgF6l!B*sDL-zvwop3<8TC{(OJN%I!zj;s^=h-D|QO{^P6qO_Gy^rsL z`%ihkZ^DS9=Pk@=D#d%P86afDamiZ#5ThPvG_ExZP&Owd`oS~0l=fajt)7&VaP27f zc*W*5L2&UGKqj5xw@fnIV)S6fm{_)Y9)Lm#X;pPBXirO_3JmNsFWN4t@J6^asuEZ$ z^(u~RTHHoGtZt!ls|Zc)UoF^niM$|;8rfh-ziPq)#A*S+5#j|~`6KLl)+FIW{;k~b z+`Mo=mQIPMj;?xMyz~t`dyUHUBkRT&SDvD%d<}#K&rk|Pw)w50B)$}H%q=f0Km}F$ zp*k3l?(sw{K!B zkL1JlGzMV7Vblw_UXESR#O1#?P_Z6$GVOe$d@D{PK(fMD%@%pFhV2?OW6aHx@IpJt z;d0J;!3A#<*rSC2Oa@iSZQBYw7wtdBDSXO__<$YM(LiVL9#l-&DS%!GLQJvB*t(CJIdu{Rs}q*Y=5i z$|BJ(?yy^^C_(H5+kwC3V`8qq>x0oEuO_bf{vE1ozr_b-wa9_!Py3Yb{bFo*Cx)%E zMm6nhkc@6wAsc)@!K#7jTq9e&JOeQ5TW%R|U+LBhlY64}glZ+FHrkx&I(vzFDVHs` zbf9ex?PDo-M&D}FAHCCoBRASeqxypMI5tH3KH9?qesX_0B@E>OSs*QU2!4fGH-ljB zpy`J~Z_7DH-7EC?B6xsdJ2i+SD>qUS2X*!M49Aq4q-*qMqgC62JtBhoXmNLEV^?EC zoDXnS4sD_4rg|Q~f!)I)ebHAS{0mfZ zgCP8SvF3j@3}8|Ph(QsdrNm(VIj+~#h6SnygDeWd^#8TRO`XpHWq_{Gf%Vj1_>me$ z3`z-zu{ey$Hsd!8fDpi8F(e7-Vd#N}S}o#A$Zc+yt1BucJi71(o*%@A-s@JouR&%Qcw(_ z?HIy2z_szgQXW(stC(38=z;S%!unzA+kHOD-iBY9Y@M&av>lSi_z*I{Ze&n&Nr-17 zC-wS(^}|Z$LeczKS>VLJ&WLriK{n9X$ul=LDgHF7eiapL-fU!vez3ScBJfW~epWc^ zD#A>sHbn*h;i=!p=OH?q13oG) zwLhOcLV21F@+Lg}G)`LZckDRHh{C+CL^7)SR>ElR{x)pzzFCF)a#15AVfeRRH5S>j zME&p+aPS)$wyCs{RX2bdZBcx#a3rhbtm%!G8EL$T)fq!Ty+ZP@+I_pJzkwd08g0F5 z*QLM&8$Sj*kXFe!4t#)2(R%h*i^hF9%lmtIozc}N_qKXECKM)^#bqd@haifPPR*y~ z4#N3S2<4V#C8ac^E6}NbBh>VhV{c`}84{gxEynv(6Vssr4mO|SCX`;oli5` zri7YDt!4R0smf&DD$_47giwhR-3RWKAjE4%hKw&QfWFieoY%076Two#A9Q@N@e{V_ zdCb-<=uk%WBqmb{-7zN9LZGGZ62WSVXVvu%2(`kpfi)b`ronnzPY-|_QT;`-1g!0p zeBhH6M`s#$QtpqQU+63KrUlLZ9+!;^XNl)0EMZ^qOhg=+cJteqlN*C8mP{<8Z{WvD zrucwBN$RT|?x3O`2pnFNkuT$EhUffw9z4z0;Z>0>D)yG|)oz_jXd5e0aa)Z%Yeqe9 zrwc6>JVm_@AG_B`U_St?1RmQ7n+;w%{&(3u+DQ=u78eW?UFEoJf{A`zdPKJiIIN8e_Bb@;M6fm=7GWQ)RHz6#9j z-4rr+3xTX0qLs<$;>$?iAMPT8KgL2eE#ZAmQ+$@%i(^m6)EfbL#~_Evd1W@{opiKr zWucms1Ltz~3=*=6m(R3=Hdk;SPmQtN*V2eT8V6f_%SnBCWYd}#+tdw!LW{f(3#VD; zZlQ0lcv-mL*ywnt52rQDirQ!-i9O|W?b6npK(fuug|LEVGxL?p@+W9z7i@_UXoB`fG#8Y%+1 z3hj!Snj-5&iUPmO>SIFO_*_S7W%#m|(Ul4x5H7R&pemK3U)X049GC5Hn@be zUfd6vqy5W6mWH#6kZaRB|ET{-DHF@GF$}_t6apx%(oLMya?>0u)I@eJ`Z%Q0XE0?j zS!+C|*7GS}=mtNRa^h?w)B_(GE8wvhw4&{2r*-T7YrL8o3j+%3WF4jpBM5}|srD0c zmNEADPFetqWxUOplWnFU=-UF!hE?{ju7m-cwrl)-7xm5sB6RsLCF_+F4;O^EIMeJF zzsKpNI2`kce&>2eev`vUMq|{X^-hrcjr+%=UrtB&kD9v-`j4L}$7bY@mXm`vqf+Z< zLt+LKHaJSTfxsM^|FfOg~){J)zC7f;n?yC z2YW5@o-ft>(iUx)$^44Se%O#Y)T(KyAfsg{0zA!jHq050>jMi+@!`; z)<3PS-k2rd$V;1k+7xN97x`GLsaKOeNrYCMDB>MRu+Hj&WMK4FL*dMNYEpn3DF_BZ zmqtGU&U~+OOb|SaM{Xn-w(2WO;3Qfg%u;(P#Jz+|=wJPu zG+334wQEaeeXd=58*w#@<63=zHP(!tvWfD;r+6?>!!nS->zO?mdSinw zZ*uEI>W+>YG|4-@PAVn`Y#r%3gqf}GJ9jK9R%Y_4rS2y>`KsR-@xIV2h<3OFCxg@g zS-c@e>nYcV4P||gHUq;pSua)2LN$tkHf-mM?H>L)4C|#W^h6DtFNCug%*Wtv1DjMG zy*N4z51}?JSxV*#{4q^F9`$okgw(F$qe8)RS(2C4R7f_e111GHVIA1)In}K6gIS9@ zO?Vs~$)P#Y?M*2>T4mObavEmAK?dajd1Atv2c1iuimNoO!{J2QNN0UMVYezEWgmCC z)LTVsMxeF@whKguhjo+`%sT<|wOhT5Z1WmNr^=9Ao&_Cx4Ch63rs9s9z-kz-&D(c@ znV_#q(^-7af#%}MHYM&g9a#DiyeD12wXh+6IBFjl!?0L+l0mne%&FL;!(uZa&R~j7 z$Dbws03N(%J>x~xXM(02cVaYcxAMh#k*CMKR$M20AVWh%+trnYO65r6R5MR5q7`$V zTk`Z9sZX(sdqUd~w9cNtRv(t-3#m+MGTf|i3yI}Y@iGoqN{s2=3ItbzVqh|G1%oSD z(R6MFL9552R*oymU|d6Mp!7GODrLgmGvEsLcCLq^3(-eIAIB%)i*1-*Ovj&} zh5Fq$901}A?UZsIspgPk@nXFFjS0ifJ8oDa0QqM#dd^nVzH7e7B;u`Y%^Yg{7BOY~ zLB6>Q+>R!f5L|ozP!oD(!-Npjx+0Io-d;C1iW1a|!**N1)#J_6^P(_-SC{3GlWYq5 z#Y1!x@m8Abg`b$W72(+&9{}p9l|F8yOQqL2Kh%WsnMio;6R?Elzc%;;c0~geTshi9 zeqP+tq{4Xk;4%mMZLwv@>eKGD(;R{O`Go^AHX)xVIjU7B>jvmNJ zj6s?vlB6@fu{1{y4-8^l;`-{6*#4@|93BCTv1%@nQ`Z)z64a&A<-}r*yqSGP!++O@@nyT+80wM>4s~?%XbtO?JBg z0)X!~eQu{ooKgny66&5JV?7e_=MW{KrwSB6+b_s1TXtPVgiVpT-h;@ZIKO02N3UDjP3 zU95Sq1Ajv>wIkoNL$@{kR#T?aR%S<>l(hp4^aZ_j$+j_X&1GUCcMr`np0apJ68{eKyB+tqtW|-^4vXvkQGX_vVA8lmX!1FW^S* zJm?^d$dlbmxyUsM?cmQOYAcQL)X4uS!w z+kmd#r_^hm!@X2=fBNAqXn$N!`kfC@TNiK09O381RIL$TujKK#yBqY>m*`iY0Cp$=1XKVw0-^?MktRlNZ>$3T52U zywt;qL0_gw`p8-`hjT)n!$`hDEcg=IQvt(9Yx}k&SLh??oyo{3{-sF(!bJf3Gkx$> z*fadLQSnKwRHRvfR8c;s3x%nWe{r1hi>J7j@NxdrOUl;%o+IgdIN_TkXiimv>y2E@ z_UpZFTgkbZpMz=l3Nl9(@1P(%|Gy3g|1+gP|BvDyAkOS!s+x>cLiFk=!5P^iu#)ah zlLYtR8rH z)*`jk^JEenbh2paSZeA2H}W`6u^oo@=)7`%aK5tN$s2JD@NaPa&b5hte@T*1DB;I5 z5B@kx*`Fo30rP@&DipGfeia|kgC*q83TC17$9zE2lKzTdrHZ#|etDDU?!}kR{74C| z6nPQuUtWLc`6E9u@)`)X67R<17PHXTBL(M(3-Rr^hJ8cWwGbD|vVM#|0Y5$H_ixwd zX>1{GsXQP6S+C9&{QcX=5Z(X))~_dC^km^)E5~7GB1E*|>J_F(hR+n~nl!V;4{8vS zCD}>%V6>Bm+f6gbEA~>#W%ci28_$1uSd{wpEHDq_YMJu&>rTckr)YGY{&;1;Yg#7p zZhi5)S2E$LrHPkZ$d!%XzuelizmGqS?@BvCtv$&AUEnKLYYMnoBN`y*+oHJi>K)l$ zp*RyaL0^#Q$1ml7| z(tIP#`J_~LVCy&j1vo*6(?iQAU-F3j3hVl0$j3;}S)K4gTmFr*26DyHH7Wz}|EV)z z=_2d@MZ|`IIb}{#hmc{2|NoW_()!pyLTM(PAVgT<|CcDkOcP@VVZiFGq^Yulvf*vk zMTycb*+EoT+A#0_|Hsa3f-uu6ctG#c0ysd)SPC#?|KplBs7*Af;PH(VOAxh(<3Jy} z_d`u&Ahi2uBWOFK;#lHDiM*|smY!5Rkc#qr=TVc~oIsm2xUhh=MZA&*dr8E&V8Gn` zXxy@i3gddWO2;{lfRk$meE!`Xw=X)@5RZF^OnOt{$1xOSVKuykwXk{|K(|=F>BV?+ z#lHXxp|aa5Pze6Je1B#xNlle`v>WmVb}l;z?d!bQd4)8q%II_^-FgV&6VjnB@c3f`}{xiMy zj0HOjZ%my%=)YwgEf}W%egBF{?{ApWV7Wj{a9HPPY3y8}6x0 zX@}^FkDioEduxq6cYb=jW=#Kl;PA4uXMDYK%W;oL2~(pjY-0{y^8W33&!MCT7>?K5Hnz_^=_cYnGuP+Cl6gg7E$HK zs462vk;;aMYLSo^@K@IRvrexuzVzU@KAM*7+fH8EGTqXw*LfYPajY0JUb|i~ow{W6 ztA24j!@a%9Nv8Q~+Ee6^iCca6Ju-4&ttvs1XyiZo^q*pU->{N;zx(x$BwQvXFsbKl z2Rci5{@1rFg6Nm(!2fwC)FBjTmR43SF3#>IU#-mkyGmOgctO&zZ;O!ef4nOHUBHn7 zAndf2PayiVUI7q3K(4o3zxk_ZHaQ?_oLY%4Rzr~#C&smN|6AnW+p3YliE`d;F^RpP zgjNtN&D%`4>?4l{!oAl*QKt+X%ts30qoC}*61ckv85uv@+=lin`)#k>a|;llhURv3 zDLYxZdGT_x9b8y8^YY})SUCxOJ<}uOq#vauD=7qvxnxuU5mC*Jd0zijVVqV?R8Ef% zS-q(+Vw~$&4JG?MQH!<0w9npD80rG691(>FnjjD51-!bw0)6l3nQg{OM!(X6)J=B}}U4p#?M{to^D~+lN+IA|fW21o zYxrWNQty}C{INpPfURZ4N1}E48q2wMrBw^?TgU=c_a3gBgFs%fZk#)6fpJ*-D;l^H=jxzAIDbp4f0^_szsaFitb2a z_S2T{sOcI6$+m_Xut4YyPYGqXXV_!7N&3_`!sB=S{Ydh91v+yE;k>c2cK@r&_&_#N z3WgVn{lAI~^xUDZ-ehd1A@92^IVSZtC_2pC*fyvXUD)ip{p|I}D4fH_fDVceE;i2v z3phP6l$iGh{#Tj|xr?LR)zYj%58B~uAi97a-5VtTV_6M9b!snhDCuBdglZ=?=&D=h zLR#OFa8P^f(*8h^T?N+J{Q++W9~^fO&jsOd(Z3L%Gf{_{q(C!9(gH|_Oz6K!UTvpA zb9J{-!RtS;xFDo|(gH;RwVN5**Q!KOu^w2cM>qiTM}Hue7EORwj#T!F(%(Lp{lOx5 z%@f$bdaQ+grF~S5Cr2WSMBI;+4*uuO^+%NQF~22`E?`DJH!guLuokqP+=)$zvctVI zRpy+og=3=eqo?YR9<8^E{EG_L$_7?p-vFdq^bwAMhw1ghUBuv3wm5}n3^-aMJn;ofb8&mO?q z@I4Hxo2z4Gg}8gbx|9sfU^6gbtEeTtUQ0-?dU<-O`g6N{qhgGin#^*NwLntLNxlHH zUiE5mt^*o@JDGU%n*tOgd9|c4a$7Nm>FW36-r$<3z{BfOr&(vqI}JxoJ$Q1BsYG zY*Im7(cGxP>3ubGUypZGixbl44%LsI!nW zZr>P=4HhHK&G0EvR}+Vgv<0#IwztKv%0j_p{k%^K&Q44A#N57YynDqJnt>m@NonqR zhL7!L^v<+42^3@}X>P7XjFa$*^Rw=_5#=ViybGh%Cc9jPg5PEAnwAp8B7)mwoXf%r zo(TP0=s$DxrO%H*18P<|Cf?D`XWg%goEAr? z_%O`b=D+2~tApmKjhDo1BZ$OpD>!-*5*Aw;RVTBO?=k`pBJ@uJ4)xbEgZKwf%Jn1CnzMN;42WH_7YQ}52Z)aeWMyTA zmT(l1I*EiBrfPVtgQUK5lBq7&MtPO+im4W#4n*GSw2L@oMqao$zSN5(*39&#t1b$L zedJlgFt^-Ma=0t$JN-$ZXgS}9E!1RFWy_a-c0-}i>*9EWXeBEIyVT* z==k_M2SX;(n^D5g`=~Ur6XznwJti_X)bY@NOU4kD zi%MSy)q6Jx;)iMj%rT9|nD7WFTj?jt%u%0>;;o#J>F<93S#Z_2gAk=Xfdo%~&J50< z$}4$AliS&9xc<4++d{+ZM3CVnUi9U8D`iuoIu53IH`mjbin;T-2QMW0oV!yi-A2Nr ztElaUg%$b*r^LZ`P+e&e>7ER9MzCmok0r)k870C&&;0HU_?Lf`wb>QR+V{`_S#bM0 znF+jqJJd3ioQeZ5XU~1c6}ga%r+E?O*~~2aI}l{5Z)#LM=Sh0Y63st!*yVqS{O))Q zP4g8Gf-CJmndOL%`RH-}I{8xW3N2fW?m~CQdTtsth=E_Hvp3(WSTd6-e2x{NZ~Yxj zEoXWZjY|0haF90XpfB|#lU?H1vR}!c{3Z6VF&|7b&O!LisGQ zZq^6#DTTrOZA-su)qhGf<1XzI3$Ms2uSOOdrO-Jf-U?wNzo!(x5cB7it%M4D_DVs@I zlzb$-Ex>JcL2r$CV>|~Ds`gy%c0Q~YIoHibKkT7z@WpJ=TD&$CE7XPFI|W%i#=)J& zon9)zyLgpyX2z^>x0NMc}VWZgRGX-zr}c;o=Wq?{ z-1)O3t3UI6L)m^;TXo~Fux1xkZDNP>xS;ETzFzdaHCra*mdL3BJ{{;3T3 z1iSGNu-j^i2hWzg&i~x+GL+z;-!@2ZcPxPuIYfWJiy1h$-x#m@0 z%HePeC5c_%^wXU~CJaiEGdGU}qC#KUa0-zK-fxANoLc2leIR~1f6sQ!qr|t72|mEx zGQLpO+dKd6fsTtOL>?{@Oh$fOgsnQa*7rgV zMUkAp%q|UkWC+o5^3r>Rz#nD4n|GVYku}!amLw9*+3KH`QsN>qwJ8^-1I+63APx)X zS;8YIuJ@cr@0=G;EfOx^3#_**9AFN7bLtjXzkHdLv-7+qGM`h_$!R{7 zx-Y$f16|9C-KY6SY1m`70lYMELWl6cxs zBAn+HQs}chrnUORcg4v1mO5;8*eml_YNS~=ISb7!%Nlq!)*B;mRclv7Ie?ZYEfY=o zFY;B0C5pJ3)D@ev{WYWx%Xvax^PcioZd;pq-nrZLup%8Mcb_BPN@l?#KiTWrzS?&O zXUTler_jFmZYK7pQM&Zt!e<-e)-4eYFSWa_(0)|%`}ui4%2)hsYmV=FThKT{6Cv~2 zY0aOlHwqBQj^m$JSVp)q7qGKak-@~P)dW9_8T2aET1r>Z+rNtY?bect2R(k~U@|MN zih0!IuQW|jvVdC=?vn}X zS9jnd9vE(Lbr4#Q{yTMN_QaXtF)noZl}?MGlet?uXKQ3Db?4@c5t+unp%YX|)|g-{7p6+Fgj+{Z@M``(29L zWT5@P-y0EM3iAS!M@4SB-Y42$x>5=$j(BU7HG!d64@xr7viQr8W1yc-?13R7@A}GX z7kH$5V3vW_#{;l4uR$}o{hz32a9(%z;i4L$+X1||PjPfmln6TfYnfhYaNCa+FM{1# zaX&Q<6NAh{kzPSRAKj~`glyf(c=&=3A~T~0U!@={8Gcy_v_k=xY)3tKGkV==(d6OB z8V_8!{sMcY(T}X&tidzr{p2C7B_ZTmz>h=!-VuVz+acsUR-Mfy$p_5{zf`adRd-#8 z2|_CgxO%9pHc~I~5nicaqk#HK z+2pdngxUoV3v5-^!-b#1aC0WK8pkA22fM|7C<(ya>px}lGscDuZ^v^#5wP@_Fe*e5f?SOYoBuPUOa$RG!!FL!)HF&#%=V*W2 z#YQG*RW-_3DmHZ54p@4xB1MeR4&*5ElE;=49PX}GKgfx7vnDxXkF{WbCFg~SM}$@z zwvN`?K^|!vLK2EO^^SBGQ=d|X&*Oh>kI2H31z(3Mv`~I8SKX-(*k{ZE#Q$-Vzv6=V zdU?mVdqNL>n~M-fT!9I-F}-Cu00|{cy)CsG$R}(-Yw{Iw#&@8!(D2Rq`JgAt2PbCW z`z&_GuL*4=8Y@oe-`19pL{z%u=uX;Ki-#bXN$baO0*$^}rsN%H%OruefWo^*+Pa2M zA8-a%HHKF?KX0Zr5}eBc%|EKmSsb_x29`MCw#bI!tg9VJ?JY*?CHXUEVutjBR++~%n5Q_akcL+fm(T#-24(QQcXLKguZksIJcBQ1uCP?W+DCdx<4)yP8K82|*Z zmZ8yM|9V8pwIu}hP3fQX9;fL&H7n!3J*{VL=i2<63RV`h4D#O|;`is(aknGv0T3B0WLw(3iFXitQ{c4xVfO4N z9{yVCB}QP-Kurf{Qm%ACsspoRKV@u$cZqRyA0NF%tyT0y$gf3Ty%EYU<@#%>Zkw?Ex#xOPlX;N=u02}+ZbUG1uWlkl7w@Gc z@W&@->I2LSzkq}ps_y<7XPAu`3(Tt&%;93-VW#L1poH>9)LvhofyfabYC~R$=U!R% zvY=4o-f*}jME(br-mmNgABvV*cz5qfiRrQ?wp2$=CJur_ps`9KQt02(KR`1LA3O?9Ff#n2-S^fxA6Y54lg94lb2@P1S;HN$ zA%2EmP+oKFuW@?W;Dy}ScVZ8rT)olkhS)7>U(vwk*?UNeDT`P->$4O|3y77%?2;d` zsD2<#94JZfj2+|;{?r@XdDjL$?W+JPmqv@kEBF;Y8blrlWH?ZJWCm-~dExrQ?RgwR z33?UTz1-FV(m~z1U|y;_U2sJdvq=;RXiqfl+BxtzfIKC3RX+17T}ecIl+FsmFfaLk z&H$ebzrYVSR2<$dh7X_i#%HV`Xc8~-AA4wc{AiO*k_38abHJp#OkpsZ*X37^w1b~P=*JRag zmrUXgQ=POS5j--{Z-CsU{ZWR)IL%X?`u#HX~m_&g|C$qYWy+tR-FQ?45BeUD)idBSmM4|>8;9! zK;f?rQ=rzp_8?sh%}qYP^znEpKQCGUwJtCkVb=yj^J}biKR_;`L`we^Sv2iWOQf)T z|C>o}M;LfH@m~!cG&TaLIw-EI7DCnaS|&S)m$AWpVH&g|au78$+?Q7;*hwTJ$M7aK z1yaV-bju+r+8Q>t+IIVhqX+B~I%5Ye1)el}i$qwkP6Lv5gCllAhz}ox7O1T```KtA z69?m|c#1lszyXm&O^SSQnQ*(p=HR7Nr_p{3Eao0%ATt!V63*Df1kgZ5 zEq4LjsaFYT!*CBQNxwhQ1sDtDG_v2g%V=`8hXwM2F=jUuiFo5hrCJHBED0~!NWY*(qNsXBbBVn#q-W^uuv_sAvv z%n3#DT;Rds)HJGop$B)I{tOB4oZ2lRY*G;7LEhvmqzSMHBI1@D(j`nMnU_=qn`^SP ztE|)m3bpp*Gmhxaj#F867Jx-UtIgw;yq0op=>{tQlCQ){WtT>=b$WaZtFnucIN=Q07bcckrC&tC0s0N3 zUbxyC&>}N>62|@xPAXbLGz#wATGqlrHZa@!5Uhu*e{2(ZGSGwp=U(O<@C@$bF^=fj z@iypU=x=`XHf$%(!lk-`=M`yw58a;VcrzAxHIKufZ6pc5ehNwKgDaAAzgij^x#Fnj zAocho&FEGYYa zN?=hm-4T|+OHF3jcZ=GIjC7ndElDQcKOc?~sO)eV6PemQxl*VvUDhRvwjp%dHH z3_Rd$BN;`;QstIo?7+4KzQ{NF*V2lX+&JXxb$wydT>SuY-9@73s6ntHjx^Q9x1Qx3IV6#9_mv1*ZsIe^yAqP zG=ehke051;SIJN{p}2{bf?BOM&!9Xa?D>-Tv6fKnAHp?VG0OA9U76(k0*G@>DDUk3 zkaw=x=V<&KI@iGPyGaov_AV1ChsXOr!X8{=YZ3fFP6sHjF_wmFFU$t_um5SvRlEL^ zd?bQ_`K|C@#^HbYexP0t;K4ombOW``&(z#W7L zw9PP69#Azn))H3Wd(sB{U z$8SNspxRNeul6Wk>gxXI*R21vW|#N<^>Ry)_c%L4d=1(<`8@OLxBWN`VL6^us1@lf zDmobSxqiGknmuXEvI%|1HIw&!ep2lkxY<9NW>>6mpQSC4B@d1-nPHkR}7f~fbdY+}+o%4en-H*iPHEZfz z1)BGW+zX}TRNO7MA+xF$0Smm>RctEk`g1GWg@PN41kr3x$u|gaf%Spj_NHGbfUU#` zTkCR>=`Uo;A^j&(Hq5x=gFotBWGzh9spfEOQL{f>$PvzND3XVkECyy4Mz5}wWmx@F zkLw;EA3w6>%e7Oc5rjM8p*GDTmHVYXN~A#HRFp>Z<1Z+N_8o6Qpp@Y!-!n}Tf;#pM z9ORM0z#+#-EdjNZtnpKrj7*8kHh>4-p1aZTUQFi`cb8W@VdknV`A%a52hy16tW>NoP@S+@9T@ZzUNz${ZT1j3~H9t z%+=}mBKkdK_IG_Oy__Xy=Bf!f1GrvC(ZF#&!c*3KSDF;@obV?(BUgUU-5r446c9Be zv-U0aL%w(GLYbX&?b2l6w_vK-h1$h$`J6OQic=(({DJiJe~bG5(S%OBOIduTS&ze{ zCK+-}TG@*VH`>+CSft+@(Vk z_^>O9eenY$15?M)sw3sncZVNKbNRl^<4+06IkWzp&VbSXWW&hGVIiOLNpV)Ihuy{Y z=Rkxm1F5d=GLd4(jv=xf_3ak~tpyXsSSII6nlpUmOrJWDx&R?-_hb>E8wO+({h@9J zlWZc^k_v%Z=IlD^L*f{Q%n9Fzh>|o9Lgfsl>RVU`OLLqjv@_*TaQ{MrCJrtP|BZ$u z-TjE2i)WtIcfno{3az^PbepEkE z`~X-$pyEmiCx|KZNj3Yy$YQ~WK-?i%2?-Avi}K)Eq~1^-o6w2dAH+L>!YY2kT2^H+ ze_avNEnqTjnTh4C8;uC*(3GJ_#T?W~otC4@;G#N-vjS;}CthIw&Qebn*Sw9Cz7bej zmhepxg#GLvA~Ko?1FYx79240caec>3Z?~jMtT9NiRc1q>i`6pvRVkcW6HO$eYxAq* zxT%K8$VR#28W7M02^6b3E^{`{xe+r)@1?g?xcuZWU5?lJLKt1j!67SvkY%CNnyTMF zS!lRwtv%}>>X0NNl^W~i<;jA^odlh$fmRhjM*c`zJx;p_0E7lanbN3nO;M&Avw9mr zC;tMY!mOu+YGfO{w?~fUr{^c}s)BydRG0lkoskZ3==-JqC_ErPSmVdo{6>+e{zBa= zRBNPWC3T$s4Hq}Q^jSbRwFHl{UMUo9+N}_i`zg|5+@ZYQTaKS2Ri)72DxGsAHYZVv zim+I$h(wDk321BDcsrBz9iK10Q02@{woNl4hAf0NB5@}%(J?+rVGqq#WCtz{&m*EP z+9_?yzae5+DB>0WT-DU{&F_xo#}><>hhueTFG;tk`IOa+1W>1qH?4I}xl{)tVCxy$Zo^`DvaZ~U`u`QA)I&m80D0ZgNV0|Z`y_6n{~<|sb~ zj&iiQKb_i5Swe!6cM%(62+qzay!83LOm&f->wA!IW}8yJ>xd+zbo^L=i9qKL=U6W# zBn_HkDYdJvjBd`Iu3jK#?7=*S4h4bX+TYH{t z7zKax#jN^T!@aY2kER1s{`O9%gDy<$V$}4M?jHR|a>-pacN1WjvNs(gr68l_me3AIpcX-3RxVb?+VroY3;GAg?Hrq{>L zP-2#|Xj!uGsj3`r5~NQTU+1MJ1s%)-ZfZe%u*``X6822rC%~xb5AWrWzcjTT1m14xU%OHnvz6T5)f<((HbE zW*Z|Lx1jpAF$M$JBstCZtD^Pyie{ti(srAkL*`%bb9cDk8y0k0cL!uY9&Dr|p!ox_ zk?mT}ZZzt0dLo45LlP63n<=#(ROGDHqtZiBjFoJoj*mLag;bGzDmmK1Tjp&Vl1-!t z$Dnd#@;1ceTanaE=M0aphffC;Ty8F{h0+2mYJ=w|;TlK!E$MC}R3^4z9SbOShKjFdn9K6KMl8){MY=#Pnx7=> zv>D|hynS$>-2Bh&1Tps}?m2kdquXz7g*EL~xIvE?7iPn*_Cw5LJsFhJbZuQ9h)yfvMi`l@W#Y1KA2mjcBu3k&dKux>Q1wMGXH#_8>xx+3eHn;j zcWWVY&9->&QHo*L&`Mp8e76Eve>q~&X#HiR(dE^)h=C|A^PWnR{!e7kQkpiTE~vo7 z^mEI}r@LysY~JInNCe;I$=i8XH|E%;;^t-^KK=+3Bo}Z?FV}g%`t8!Q0sRwk{;+z6 zA=KgX=W4_p!^t*D0p&w4>&r&LO^M}59*8wcMNnp2p8&oFHY58u6X^UYiNkI*V(5b;s{fUB7FT*iI#-+pPS!fiw#;IJ7krdA_E8{22MT? zBQr-9ud}0+vz|NXORW8|Oml3u-a30RHT@1p?eNjAXdscNy<_$FS6%Z1TYR9uj_X=v zIcJ9-$3kQFrOHc$IJy27$ZnyMal+QpLWH|<&R5fP+Ul{jzmK}R?jf2nUBfDQ@_O+52H#Kjy`Eu(adXZgtVI{dO~NL z%LJEjFn0aZVY{tG44Uf33N7=kybwFjQzKbA_(sdTWP-d zR&-B9(8F+HsT_Ds`Ydc;r?1?sPdZ#uH?XSZ3C~2iUQ#dHaC9wnva9Re0M&O+1unk$ z=C=4eEFbFmle)~J`DKMWBlf&|@a`8B@?!%F?BMUddDsJJJ7*w~R<$|i)kODN<%3w(16`bxYVWAjV(Xaw7M|FC8E`JK=Rw*SOLPw!K;xBpS& zadS3z1NEwURV3+DoY_dj$vK~=kYM0co$Pn2Ys;zk56D>Lf5#e>Qf0qGehT_IQf-#I zCxKBc3?+dBkcjc_guZ7r-k6b;%FPw8LZhGXXuK2ziAwkJ0VAO^N9L^Mio4efMinyQ z7i@x^tMo<)_|T0GNV!E(@uz?VMP4w#h&xGx!`Bgh%Ol%xZ8!&GR6bEuZ2{oR?@)_3 zL7yOji1-5n`8Jv#ugenK%(*ryfU#?`2DyjX1`5Gh$oKcx952j0?;rH$T8|@0c8-I^ zoM0b=%IqF9z`k??U|&z!4h8!5GacGU|+M zz)=V4EB~&6;-h3Q7VN9!E={vzBec!+9m9wsLeu+S zCGh=&MnjZEFx@)jF4So9aL05f4$1*QndTmszal1{K@y+R4@RT@DQTa zLJu|XH~4ma9GC|uqPsi8mge=y7}}E#-r0iU?Hqp@!4@eZ@uV1q=~404;1|X8rUQqg zzSi^2tKwUT5{%8@kBMTlG95Ptn!vLz1U#i&bM$u5pJI!Q4tE5OFhcp1Q}g6ni#Ocr zg?q#CL@KlC0!?5=w0BkMpnwzq`8XskkWKvoBlElgm_0xT)W}y~NA40IT~Proax>0u z(O%4qPpiy4SyS~2)Wb*m#W*%}^*-m8o>AIFQ?lZ}0=OGBSHGOQmo(->8?)GM>U`-*6P|7Zpw(j(bRO!(UZ9dmPj4$Oe(;d1P!02IN>ZN71C+QY5xi zKi|6yNQPpTq=8AWUa2K+&w5QF`?r~j?!^LcNRi#j!)wDzx+u=1-QFdx3qxrWdf?k4 zz)3tW1Z`Epc_4qd2cgiO05BQxE0K3-f34O{Ew13U+(E5l<2L*w-!AaYo4oU_t5u5} ze*xA?5JK358-xz%XxvwgD0trEB#NmWVvfEus#w%!sX+G3B{wJf-zNFq+HK7=b!Hh z9VomHk4igO0oyb}Q^P$-FB14K&Y@5R99BXKu9^=NN!L;UXH~)ka^A`DW-mFcGp%1w zo+v65=dVJ)@AKP}j}P3|eb|m37bT&%OnKWAETkct{gr=F9z&MCQGoSD6$D&*k?^_) zhV#_v)gG?ktR8p7e1dGSlD&Eh0^edTIn{1z12qsty%R|FsF=smm&V^U^1PcE3V+o5 z`o1I0vE&*+_Uxq)pSlWO^Q>QAiAHw+DM9sSpC3HiN8W2ZD|Wqe)h?v3qMF2NISP&pX;>3g`im9qc&mI0wq&I9-7~cY0>usXYit zcLV-qv-et|*)r+A59Phv>N2#QeFH5puPH&uyRt&iFFUWr-b{=gE@gbzl~Siv(oRhU z_o)4X!hY|;+X1y&50xlA`@4CtucY3@yKKTx!5sibl)>{Z*>Yro>NbX|MRBe}wtn9# z6wubv;Xps&VPZv|s7$v0Q2Q(>pv4vAUa|&34-rD#fA-9G zN8L8-&FIic*h=DU8Y*eTJ*4#TIa;fbjCHBE7j43MnOK7ue=1 zJTQq~z%;ZH^;^>#I^`8S!R7&nJCwahuwIO*bokwhiK@77J=77XS|wwCK;B2&P?u{j+EyicH< zaYaH}{ zg#SR$pXDfo{-8LQUP}N`jRNzU@2>@0xt;WxPgN$|WBX$@;euVF7(#mPz-|sJIK6pz zWT%Hs?zl)7qNuIY(ZDH5-w#9kOs7r(8jPrXYoE=P1^9-Dr6nHMe|E%V*q1i?{Wp_$s!@Qtm=sGdD{MlPy8VG%rIfoih-LD-`dcRQp z*kGe#lb9KA62YV=hrb~3-Op8~Hut-^s< zSR9yqvGcI%9na1DMEc33jh^_P5PX9iZ3I`6&dakeF~>96@@u+b_`}W5(wo!Dppy{B zpSvN3H9@m>Kr`8DM04D4h;5``>a0$)@B~(|G#Pcw&zv&el_zAppE^;$Lx231{_zq` zd!eCzZmmYo>m%$(gX|`_`w>g@EdlC5vfmZU1kq4YQQEsL+yvfGHnK}Y?Wh{x_ck)Q zM#wX(9~0&LD-$G#LBK)N zG_kB2aK)iwE2K;rk1t=6a4ikt3jIAY*62~vpLe)J=$#jK-02E&$f*T0A?NMw%Xjkb ztulJP)Jcdac*n)Y4_?QtwEA@_g^i$DDp1za`K81=_dcn6lf5IpR2zL0d~=8TY0_-# zjCzesG~NdG1AlfdZBNQ|h}mYA;!#c9kX<5yXX1sqUXSpIo*jk*{Qg(4-ou9-i^1Va z0tj9rRE08J83yy|>I`3kJ|z#&l02^(90P9h@5b;JureurenjmF0;@b>p78A;rQEIK zza*mU&HWhtD4K@>@lNQFhOmVC8O%Xz`g`b*OQ+Hrn_jX0(?($WW5ze~9tK8S0w!sG zj~Gkre}*@{nTRprTRC}}IGVZtS4{f=0Mwi@jO65`}^rO;K z3&7SB9;?#fI$-3jhjA>e*2c0@%_-ar&~GTtw4*H3+|}9{@nwEJ~S|X>DhP?=7sCy^T$RE`!XG7TuGhZVUe0k^;f<4_cW7y2AwgvG5PJxOa1-G zQB;n4O-KkTnAol~3KM0Gxz(;7C2foBT$=N|-nC)b#F3Ls!f zR)=9h6WXwCu8UD@?&6=K-S{d6`i>zz-@>`q@FV2L*H@5@6VJcW+(PajPpVs~o==-z z|A)bkc}+8?*%Ts5tJCvj2)sBN*>69D<4vjG~Xkq=DxV;SY?&y40-wOeb=vM1)ro?&9Z_G ztJSO7j=u(NA79bw9$Z=(1Oa}>jH9Zkf&R_w1Z6cOeIm^~MF~ka&!k7=-B?0{*~vG- z4tW#5S`553Dp+mZ*q`Pa7?i7>`DM64Dkj{}(QktQ=yFuv^ z6lq1ekuIsB-_iTK@4X}Uf7Y5|vF7vLPo90^iT(Mz^|bg3iwLz;l8{4vbHMnf6SbJ3JfcpY@K>vf*a^~ z1(n}0_$C>-M_%t;Hu!cVt6f}%YJYrLptDV6_iaP^>Ghk33myBYk0wTPVw7H{l$6B; zJY{J*d(hB?S2BLYwKdJMmL=9TOpt^% z$S}Nnr%pw?I+?>$?nGU!fIOvG2-J5?gKJW(X23Y7XORjt)oqvVxn zZ_~JImL?iNIYFa%q2!=qK=-1C&(;tX1zYKY#qD!?RsT1QshXpT2`7cMbh>!=c_xZ? z`%vLN{JE$a3%xE%5V;V=9;wL924*+QbEyV=aP5R623>|NgeO$vT|u72c6n!5<3~Em zLeb!H_R*JtkzsS6t6cN@uQ0Hj(#ns7>O8d|4A&7%v}~VOB8H*y2)a5bm-M_ z0gErm=ONYGK3o-tuHU=`;Yer9DqU3dcv3%h{=q=6$kDnjTPI%hA)dYbSS9@r{MnQ@ zoEtWqy1ORODCL-%DoLaq+(3|v49;;Es~#4iIi%FX%}o? zMd{WtKElB7E^VTcnFEd(ZSONUrVuxe0l(_&V~hDom>xDh=+E6oSjd%o zh;ZLKC#0Rcuw6>jziGJl3{Ra_oU+Cw;-ZJMH_h&Y8OhEYG07~PQ)!8vz-vbUwscph z5PD3aU*yZE5wRFzenS_*9|WH5Y`lQL=l~i;8I(6>NZ6fbAOwXaQc=XdB_xX_dT?66 z6VgDdndf?QV}(m>2aoPy${3!O`Z4Qdym9EZrR^uau39*LV)g;CvXMD!)7)>oFZdII z9l8sS-&_s^&-YQ*KAK$E#x`(92Jy7U#3 z{~DS$o{7xW@N0;>%mg@i@|M^`SQ;$h?{WXIttqorf~t-x;!=b19$C}}=y-?~uKGEX zNz`TOr>g>TAf(oB{OPR82FX={Pk$==K_l(4_%g*Z0|^-C@Ddk1rhcRPAVv48U^p1& zdtKUbv;0^ru4}@<;n0W6LRVu8IFG@LLf71;AGU?AL5~A7p^wg_=lvKDOu%%l8=sv&x@-rz-E+cc--2n((Um>~;$FTsuF}&ir|HTQ~d+rF^bc%FV%n ziCbm3e(d)5J|UonPEt{H03d+~g4YkEz~KQfz^$r=ZEHaWiAo0IAkh4p)IkI3NCpnz zi2Md3;TzTpJsqLL^;Akll1jhA{SsML%Rys{#kZBB(F>C8GO; z4JVI`bnVub(8<~aHk1PzOh)Yl_hoff$1mygY`)f0Nql)XG)@UkNOp< zX(vM!0wk7Pls&(7h#m!K9$j!9Y1kiBZ(tT(~n>4XBs2fM5w577?zVx#ji^>w2 z$_jZANcu7OG-f&{G7M~SCU2AKMYJlD#!ER&w7fRi6knFaURGbWixOFK`reiMISt1n zY@}IpuUb_##{^~DjDhw;Ei24oN-vMbE?%!ZT;C6Z%8;(fMmx6Zm>eZA^@`ht_?_%u+DzYqto3w0(%Ub5r1P_GiiS^k7Q_+9B|z4vz;ip9G` zf<4QiYM`iGszT3Y#kjXd=+tURuae0nhCF%kUtchg1SYA_H8qS=c~OgT8!h8nmAw1W zw*yWd!suZj&yyEaO1F!#AA2Bz6k}AQa2m=-M=1;5(sZSGB6P8Fi`H%BBAGlc<6llV48;?INLxSO@@s)?cya_yKruz3o@1 zH%NOX5FNJk9}Cb}n+}`>;)nyd{u3gKBT(W1N9tHRQuGqdkD8@cABJ)r@Fe26?Y7o+ z2_|xo8;Y;;W5u(-Ezl|{KipFkIo$hlx>J^?EiDb=eP6XAiJ0DC`L5_BBFSEhv1&b$F-9yY5xCM#5?8zVE*G^?a)F+=#qR@3ZP|U7Y1>nRDAH zFgDg|6c!d$>z1P5i(7v-oKd|r0A((QJ~lY)W0B>QnjBZErhJ>}j2chHm|)F)5SAY_ z&UmmsU7AJALQh~usiZF5&~cs_Vl_f(K{kTUQLp>VOM6<$4XLZ5qT>3S&HHR4=PZ+P zOynw_a-NXyv$5Hm6-GRmZOzu36;D)3!7kWOB+JI$TRe$gy+1d~_Qn<@kT8UqS!%%B_%WlGTZkK1g+!ix3l5 zJ@6s?V4_&JI2x3zTPn}9kdw)3#7u-2bQ3~L9OF4Yr?vU4M)-9Bcv8IFz~<|#0%R~{ z*pY&gcvX-xB)WW5ubr{4Xrn+I$)Ak*!?->!J3}ghe>YCqVVSTct~|VmIC6S*xzI zj_eEcET=*Dtn)LKbI-o`G0%S_c{S}Q+J#-@VpMvV=5WtWwfrH@pdMFb;Wsj{6U|%)FcC0OqFWMqg*$F?e+$*}Ti+)PeVjtaFQ2XeD$$FjefV0Im8NX^ zq@TF+#_Y#GPqoJJ#UrvlI=l>G0iP4*F0&1$h}^R$2l}S4C!7dCE1tPpL9ZJNQJAVf zo{q6g(5Y-rpFe3eT@8wO)7`A`mBsVu zfL{5=lDBzuhREB4ytad1V$yfXo@_oJZwysGKDVSOauJ#01R;3RO02vP^#jlHGcI=* z?=3!5l5}>97Wec{?!sa3E^KlD&8B{iq_4A|<}Tv5r@P{lJeluYd0RWR%Q{E)&YgG# zDPsNSL8{p-=XW;w;{ulZFOLeQ1Sa>PyLM7KfTGCBeBW9#QdlWBBTBxrh0*@d@+S+UeMZ=f4Rb}bHE_MH|Nr3 zL#&pFbs{^*PI7c$Q^TRL=?_($bwqt~uUB+>__k`nTRB1!!$xMe2+=hMEc}8qgV3BMk!CIz^)N5MK}*!G-g~2ZOvqYb1b=Gl;J>9EmP7E7Es)+`Ka@o>=3!U6>PhUuuz~I(H zF)uWUvc>fWrHJ}{J!RVYU>CIZ{KYf>GN5OvVjHPm1s41F;KXfY6)gM3M59OD0#srV z)LM)5RBklu-p__s?EQv>U(ihl3FdNaXb>u(*AdyvD8)-#OQ@i*P>BWTvU#*FXFF{u zWDWdO{t&2KP}-kOW!(Gxg~;@18U6YwP?gAsKuhDTa)kpM)?z9V2%P`65145~z$!A> zKaL@exQY~QCHqrQe!gIF#y<_|r(4XGZBUC0{eFbUO{7_NK{MG+djK`^EWjsm$yq!D z;VLOJpecFN*9Vp7vacl(Xrez z(Vi6NU8wS2re&j!u9VSGWh?+U(2qrJL*6#JhM=k|Km8yh>LI^eL-}loLWV0#2sWZ1 z8K^O2j_;n9{e6_&4nTEN++)PH)>0uOx>MB?$$iXYjGTIk`Wg$R{o@hvCZ@HUQri56 z*4aH|Ha)g?K@Pk{U9-bEb&v@-v_!T7E_{|BbZiW8M-)efG87|nDNO3-QMKGRGYMby z3tSRMrUv??v|4KHIneGj;$IpCU5m#WZW5A@%(K*{--}{)jPiu4zZT*aEm=hGumbFF z5#FC5p*ag(C5jye#%x7xV9TrGgm>!l{fr3MNBB8x$3`PtbDt(%t(vGFZ5u-aa?_)7 z`+L{0`sC~WAXr@Y2>jnOi6#HotOs_(NDNsl1CnD2{eA=ZzkPceFAIU~NU#@xAh;|3 z|EKYP(VP~~VGhp3(bi60n*Zh)BckmzUqD>RDE%AC=oo-`|_EUjL$V5^enh-JYk0D$D2qQF@ws zAoa>wrLjcN{C?ktPGi~b#^bb4;0t-xise3g8=GnS3uK}7;+yDVZ1Of+${!Dl8%p0L zu~6dx`AV{}4d^V@P6pGgnw@%!zcEQgFRPBOBO|OhxqfwY)_GagZ0J<51wmOD$C1r{ zv-~t^t=O7xKZT`RXuKpw#ry}4YloJR^CVTLt`2tXbBvKMT3lq?3~D1a1>mLRB=?kx z;MJFBG=pkHZwAvGqEDJSfX@A-)mgp|ratG}k??h;$Ts+B&{~!1iwM2=5at{9 z=ff@_g7OkmqdYD7W6L<*(cXz_y@+Oi{)f0{*7}(5$RjXI8D3;7xw@dCs7!Sqa7ExZ z6e)Ny58d-sQT*ZYGf49zgya=C2^E>>T2gV6_=~L0m;5Gec@8kzWbK>svL&5+7Sa1= z_jMh>~-N6`?iOK^Nz(Z|m6q z_W8IDqxpveGI=uL`z0X0lUkYO+?v==$^Zr>i2eusd-IFfUTBR|7kjuu-~~;aG6*W0 zpwxaenGZ=%B^pJykk&NYmSg7;%VX7~PpfZoTT$uQhSK^=Hklmg*k6Q4v(@}CVolS?4fNl>8tN)l#~TVG2{y2|*LGV#4Hy~sUZpr%hBYq4o+ysiw=dYtyqHMLy2eq_>ikdUvN8JMriXBd_ zamhSY6EB0vtW+3@tg_oQ#)6(Pn_JbMGM6jwEE5KhlvXwo$LLj>Ja9Ta$Q-LZrdv6P zT4o>9Rn*Ah2fsPuzYZD;TTUzBf=oigm}#0$UnkdM7?xC05KR?6(ck=`}?KlnyuS?or!8UTA*^FCeA9as3pFFVEe6D3-@%@z9 z>YWsiID^mITpaIY4a}}**7PEfJbAjBF3FwIMLy8;#*UxC3~7s(B-?BVjT@S6zOBKj1R4g7=zHqPUbI$pfXgCD zG~Wvz$;a(={Qj)(CBaTZUmKNdcF}9Hm~@^dN2$KbLCXmdX45!A+eQj6Mhep-9A1ef zh*c_?iv2Y5oEVK z-Tpg?liovK))@__XI?Y1{(JR_<^h$e^_s;9!3ruC{!(V8A5p+|BIHW*XhwdLNA$)A zY^Wa!bFz54QMA*XkHhKZo@&NBv#JZYBw}|F*Dd9?ZLl;;f3;rUvi&IW=zL0_j8a(H zLtjlnskBYJ$6gmBZp)daC9ldYY+NV7he^kSc9)Q;!U4yD)QQ=>u;$HrLYVlI2U^96 zf@0w=#af7~+ovJmmX4mLC#I&Jcx3Nu&`6%q+Itbctn=5=`V^kXF&Q^G={YX<1Vr)m z@yJ&f&s}O>iE`5I-4QEYPNst#frHv4gxZ6W{x3DV_68yz2`lJ@AM+}i68ft zN8|~mjmR+Gm{Oa`q>!;$9nwzXi+?ItT|9>I~M_tEFPOHGg&=Cz8xqLa?{7E@_C$o6yFl+R=q zZIn-~jtRxGQM+HO4OX~|%z$Rv(Q!TgoMcdVJ$Z%y_S2n~F=PU2J6&MU4* z9N}z!UZqcDmFxGh2P03mJwWwU%)CZxP}@5XT?H`7kF5yzil>pDI=#A!h14rT z=|QvD5i=BIy0Ojp85??ttt;t9>7`2ZiTx)v2F7iLxwI~}^!HSxb^8pzeRINZc(g!| zt}{JFkqk0=dylJ=Njd&L zLa6kRW1s97!$wILu7JXT|`dz<4X!1%FB^8W9*Vci!K2^ zV{cliWZ{^Q^}guwvv}JhOIHasJCVlOK9kYKY|b#ZPgEs7EiFsZor`5p(u}XW!g8DD zmi5gez+3Sd8mhUd*7<=i(@A3l70TktaFpdwUiD6qzfV3&vQ}Qhe4#Ixk6|5{(OuM@ zqKx;JQD-6?hqPG6k~8w;UXC)((4p*ny}ap0fR!7)GTp1D@WJ$T3cKC8CQh8=>jSzhU)@Z_AAhSv z<5{U(K2A`7k2|yG1?eHKioRJD=e2FLIlQRE=_M0?Vj-E}=d15>lKp(mvo?v?_3?tP z{cF+lIQN+M)aL$k(6ko((gqygOabR(x$qAas7h#E1TjZq{QeyGHT(%;WBe>!Ba76& zf;hmgJuwdmmh9Q~HDoHOtpYlF5WTj}K;FX6l9BNl(UvwkjoI%*XCH4d6+}Gn51L^u zx0rpRi7SJg%G@nVuItlHxteZoH|C;UT9E8j*wzG#mF9l_G9P5A{kU5!G`ia?J7Qkk zX=f}!m=T+|dcm0xL2uX8;w*9-nq9J(+P?$N)`pk_`UH%Zv)Y1ny1K<%bJFnHCJF){ zRC+bBSZrbivKo(>cGshPM~qjA4^(z=8hV^26O-~bl_V9ncL<}JTBSMana&`an$7|^ zHk_QvlpxdMgPGX*Wh_;LQN>fTby;>~)HebYh~GGMbp}IxG9R)p4}Bz83X9`%w_r^M zr_Y3F=r9j~h)E_7ggiIt9ZT?C=<%Kfm70iFYvW%w^zh}g8TL@Mu-g{1vQ$ZPY2@mY zRSY%hPgj19&NuH{Uayy9DxD1SxjfM|{$cd>TeZRNT)nlfkQSvY2Y=EC+Pz(aHhoO( zRE9cEYx5CW{1t5_j&G>=6|44F1}_Sn!1R&v9Fr79Jt7e@ZJB2uW@b=hhAv~Qmz#*axiKTc4(iMeo}8#kk0$ia;X9SM)_jd z$VoxCI?`~2a+F-X>RX_cdqxpA`FhK_i`Af!*Qt9Zg8`}USiJkTOlEI=_SDSWqvOS}0pf1X`)c0#>YO>5^wBq#y)@>yeGQ;)6?=5LaLyoS z>UNKV+ZkEp%xt&PPH@-bnTc^QFhuda1e98)GbKX98Y-FGsB1|`-FcbS#{D^bOhh7a zgW=}w=c^gURWPWDFY!FkuuBl%F}_b2oisx)P$2-*S5CTeS=3-D&1278J8gz=o#*220kb7p4t<2NF~+G@q|BT=SK@Bs$3*wq;TD_kE_^Ga{-};+Z$Wl~q2+nq^2?g;&q^n4vIL+;14HI>J3bBXP8Qw8nqM1* zEMVEuHHX+gOPwNaNU%4bnd*(Grc_1jQ)>t}3Rus#6S~`|a@sitPlocc!>VrY*`7%7ztT-_K&7MZ=~s%A>6!lYV6Sxi zLedAVhs~~-gq}elY@+u-M>Dzv%RyYnCBp~K!&I}SMA;TW z)fOq*c}3_30(kclGkjXJLjmo!u|xg4Mm*rw&0i213OYC%<28xj;8MB*OF|=pr#(A{ z0k;H8)Zyou$TwD@H(-2lcYO5EnS$3I>(aaWxS5Df7Rp+aMY0lt46Hl0nmOUu*h_Y; zr*>i-WktS_Dx*px+GWK#!3lr`H!*rWj}}>yl&-_4#ZLH@#j8d zq!s@l8@|#3M(hzmmuQpqwnmRXj&*z^p&Aqu?>t~$8Spe$;Lj%UcQ?8fjgj&al- z{3e-_c3Pz#ky&;g=}@_APh*$$o*!mYk!-qGs%*Q_a(mzbN6wxnIh3ZWk?R{3@(oJ< z6Q%c+D#yC?H@fKU^ammxw~Ek&{At6E1*Dq<+1vUaiCeA3X_WHj>>}UrA*8PH`*r6X z3n+Uafs$d?&^Ci*6K|V-4@6l}UEJFU@Xu0ysP|ImxRrb;>(VaPv_*W-K0>C7heBWj z^|1u%UNYG?yFl3m=0gYCG>4H2)N8TDZTbrWKAF!xl09el>u`9WA`dvzh$v@y*|sKJ zYo))CDEG_-SqZ+nBI&peS{JY>l$kU^Fp+99UOX!viQVuFU0|4{4O_!0LZg|T1{a+G zZix}um4<)2MARS<=t8)EO(u-`_+sDhdCS83&eqhA1FDQOFPrQN0?fF0L z+_W+oL+3?BK7)yu8t>P4@y26y7zHg@f1U4x?gJfSR*l$4lY1)hZuE0cc{acbp;|fZ z+#;(jQ6Wv9$qghu`E*scam9jMz6xRF_0P(J?gKKqmRy2gceJtr<0X?Ya3nuKdO(&lD<_Jy7=A@M0e zD9G731ms{GuP4EE{~&#-6E!qRr=CRWD*D}x=V^DO=3BVtDg0Q3p|eiaIWkCF=cJ?7c=1BeA1^JM+?I+L|g zvI~d~#E}N@z`X_i8zg~&9KS#gaB%Ek)Ql`)$L`$A=54>7hPjuJ8o6;Ie6?}x8ee6Gpdphn*k_GU*Cos> zxbzq#PBB5_HiCH>knF^TCi`7=(e(Swox=Tw3K7JV{S^U<0>Rhg@ z;6*DZr$Y-?+TxHr+A(z6<*LbdvyT^JJ_--Xg`c&0i{3a3%1!B_#40 zwnt@L$tphQ)(-s|!g*Oy`>}D+B6E8>`D_*dS6ij zS=D1Y6EAEByMnaL*pG!T2sCZ+s9bmLM)20lLwW_6p1R5nnz8Q)Cx9cLa}d_IIkq+t z%di>l?$0qLgggN-tI0GoxXi>cY2YdMl{MLN1JnQb2~KC~T^q-W6kK4z6#8&gRK zPB={M7m9BG^pjyh_Qv?f2! z3vz9`A?gvXN8Zd(bET8tF<{2}Pzs(S0ssRj0N5Z0A`*n8A4p6~1|aB>6KC8|UDUU#|=NGviJw`@-C9) z1#hJahJfKuHB)amgzLA%<`a6X0)$Or0|3y_etiP~w<)i9L#Y6OUmw_g-oK8?|1j|D zs_>TuLYRfWOg!)%spx>s!le1h1ptWu%K!i{l>(QCUwd#d#+l?}K}yDfxGVsT@sJ9b z`!#z30Kk0KzYg5||J0E{ux4O7|Fp(BKU4rh{6P{DDK8Jy-2XwLpiY8 zmx0s79^BDrQ7XeBgeUL_Y;uAKg!4O)kR{LekwiO;{RaDJ!D*hI{)eXUJCKUSy+r(j zClCObhh+!8dWO&7G_ZysfjCS8Ng-5|up*e-&r`mK>6l@+Bk)!9>HI%+;*=n`ETLb) zVGvj`SRp5qKmryBCs4KPf5ni7(>%NW56#mlAPXfQ95;3Y&;5FGi5t8@gA7c;vOa2L zY7zv?_A6Km!}mQIAQ0|G;(t2)zk1TqErhuW830%%0sw^I($hkQ*EvlCMOm_Rl=rZs=%RdwT|7^30u)7l2vP*7C z9yrSp@o?BL$MJiG02X9s1(x-HW_ZJTH=M9K;r|lC77Z{`^25PKN$~LRmmis{Kr)tp zW|sYVsdP>G4-ITKIl*7O^}ac+b~Mb*uEQ>3l5mN|=fDeLMfz)Y8c+!0zXo%O|GdKa zv(mB(|8MER8q71od)<~6c>H&9&SOo=k6#xJVm;UhAh} z`+ClEVE%LCckl1s=icFf5q-$3Q^=5~DilOkE>1p{j>Zm77MAv$7N%~doDXCq&|&I$ zn`nseU>?Ez^L;LexcZ|8G1~Iq2>@;dAYw8Sq$h@zzsQNnwL^pB{1>165F8awh?u+{86FJwzq~JS zo1BIwd3U(qWJmBW_@_#dWcV-?|6+g(nqJb|sK_8Wgwe~kge10qVD@7e5 zWgWy@1vgVSR}lA)7nTmDu67_ENKFC(!INaR~B%*`)_W(emP>2kWx?p_Phqs7y5N=g1 zY#cz36k%_H{eY;0a{JiQ&C|)n&J`pE>5k`vFg(M86^Dq%^B_tqqk$wKj?V~TB_Ziy z_c3*lpwd4Q1d@Wv(qo}LcCv7{w^XumbwdM5LzO5JLny&AcOGwr9ZcO^Y`j3SKf(qQ z+y%)4lKX=s`P(32?`VRD5*7XjQ3`ix&1_6vL5ja<@`9B9(0u$Cy?<&c{}B>~4%D%` ztEI7O8+*bCVp&R~Da4HeNpTYvF zDFfBRff~S{paOqjGlF6>2D1MvHUW?c)Ri36l_`Wef)H%>HzQkl~$l6v{b1e*?i7s%lc4aYkgehJ0tuTa4MEvwGZ7(oBR_?<5R$OY=_mU7oSU;m)o z?eFNgLGDnETh8r0ZdGn;P~?AH z1;GE@51~*DVLvf<+kXFhQ-S}bt8VY&h@UcS2DS2kZiq;zktpbihMt&zYlt615KbE+e4uP->B2!v zHwWSzO{kZvgABC*orT6u?rxwwMcBLIGj(%vFt&8GbOGi6IZ1AZqlc->k9kpWHyUmQ zti3^nceDK#$gLR*OILFjXE#t0WHXwUwKxLE9DWDV(cQt!*vi?|#nb^*q6qWXGt(c> zN+BFEB&N@m@8-u3Ib%}~Yfzc84%TgqcT&bSjvmIYZWf^OA96o*@8l|e$o=u;Pq|8E zAWH-gy1d*5?_dF{f`~sOh4jSSC#}A1sk@nW8`aR#uiSmX2;e zo;N|_V~J>+e~eLc=;XC_a`6VWKr?Z>h`AU8EnQu0OdUb3kdasguC&Ebr|WM9_6-?U&^T zc(?Ch^Zc^Jyn-$<0+`)D`IdxKr{0I;#$yunKuhJeCT=&AyV~gu2j1>Md=QR!EO6gX zI=`7v0-$~<=2K`T4%}iURz!oMM*HbfAB1+x-G&HVmF{X+5HtkUK!a)w-)h{-|1|gaB3b`CZeGyFAJUuul-~OP67c|NkCjxFZa-k4 zfp&l79})rKf>ngPfN-nc4lCt9SJFEUBmTa-{aCdXAyz1bTJ< zy=*Bcpd|~uty18>Rwu+e>DGHi61TvA9+j6+Usq6He-Hs7OujWCm&^{U2JuMd6IS^> zpMRyr1s3{g&E3oe4*KOUQX%`vLQq>YDSS{{x+x<6(H6!JTbQ@D1b}}gb}Hr87J8}( z?SDut#4eQqx^ukxrG@{IP4NGoP2g?!{?e2Gp(R~NexN74MgKop1>SbvZ9o0eCE&m8 z{oE!$rIqZ5G4fkufAz|3JKPree<e|zWr zlmPl4_84vz|0kKYh_^2lZBcH&sM(_5e)-ete=*7kRd6?xc44|z{GV#Iy?6Uk(H8F~ zbN?Z?u^Erhju`7k8!2F58Yv(Nd*t^X!BGD4^ORJsNm!~>rwLd*2=!x1@R6RP(~8W! z&Z{T)gxFz2XcZVtF4sY>#c8fv8{1?7aAw|r% z3jpWhdX=ZK7NX;bT}G3%IQV2|_l)@sv;XsQS+ASX=HUteM@lP>4L?(I30t9i&xHfL z@4Hai*;MwzOfPiwM|Z{1d>GD2#q!9~mi3d$N>+|kvqmM)gH9h0C63(6 zVxkV)>X&0ziQ#g-z1m`qy;qg(2Q2!{p!>NjE{-iw!>8@?wOQlB_gN2(kVv)x3I z3)j7S=mMT&NI`5H$`rsf$|OS&M6V37GIFMuL4l{QF7Ch4pHRPt1-D&anbB%$k*Boz z?PE(3&M}J3IB5pIy`+!`oKsK`6JB*1g7&vPsj8}2^M+h_KNbCPhRH^)&1gG{(j+{^ z_ljgaTA4iuMMIx8MwfD28esOMlA9*o=A>NGFsG#>ZGK3vq^P@J7~-7C*vI(nm8~$A1jRU`OzcYiiubutHmw zMa@^Q)JI1hcl9@y`!Lzj#RjSfTc>*Eg*#iA ztN6CtPvc@&MUR2+>((-$CC%=omwfpkz@yNnJ$><%+a_}7S-yMYJ$j-N;`4R&=TsB- zuyu^xo<-_OqC(D$o5q_RCU)^$C*KkXn4Y`p^ISKZtaEUj&p`@AbUCfH^d+_~7dP$%b?Wf~M)4$*{?NGWBSKL% z>kS;X#|zc(^@7?i=DFbk_+ATcfp$qB?PH|ev&<}aR( zDi$}4o>1XE0Z-cMhw0}y^%(DTSW)KSF|e2eu5~bX#6#hCH;4T*C8v_yKgk+29>VVv zX7sLCK=}OCnnrF8gu|_^aeb&rK9SfnhDB&;9%_&pOm4a*ID7XdyV} zgkWcXBsb3C>Jl;sYxyrFE1#LBh7}f2&-sz1`B4B21F(|B41pv0k?p3{twzg)Ekk(O zS9Z^};F^#o`8p9kOn z5*ju8GHVBU7klY()vh)J>gpAlu}Xj4&ymClqw z50W`-(h)!DYDRpb^g!Y}eXxYkRfoXi%l;I>iQlIW{AKKgDc>Psw6tU+&8LH;NS$WR z7cB2fE^?UA#1CpPVyddQV&@Rjo+5Mk94pB)29&!Z8R2w^!N{4w>>q6&3+nefHMMZJ zG+%H%#~P~V*4b!8MClYa|HOKBpw96@>Wdlp+lzH`yl@AUt=3n#gG{yBXl4=imk|U} z%qrN?z2K>_dzqsL@l)4sXy zslG4QT2AUSU5Dc(o{xPhL7Ue%V`|?5YBnTv#Ab$xf8@rK#q0U}O!VITO6tzl2!Yc6 z1^hrVAzpT(Bu^Y#;%qc-n2wYcMw(v&tf2}A@U<8}ju1GUM|)Xd%r zXavK=u7>4`{)X1G)5>)(Y(5kikKjLQae~R~qW2#&{PeKBTMOP2uS8&mi?|$Jkjx87Y|w~tSd@=@ zg6qrI34J~k1F- z7{K?D+WB5-Mkhd!Q$);O4d|@Un!MdN9DqmUA*zzKCKu>hFcEPZ9WHzZYtx=gmMz%) z`Aes9--vHY_T`&GB2CAsT;4a+H!fKui|5vyZ)_~ybD&Xa@Np^GP?x7dENDbv>mvII z$qTP_xvPceWW=d>(skJ4YFVg|kBhKIlR9`)GJu`BFx2&OO!_Mtr;KRwXYV^4eEX0pi>{=GQwzL zDjBhdMk;+2K-;Ct%UQG7?BI zdUyY-e3AXg` z=wL%}B~Ez7P+rngKTEl%Ab~;`cu($}K@6@)LIRDNuH)otY~pbJcuWB>?D;6({rk5` z?#af|@poeY^RG`~;rZ-0P{9>sxQvdDOG!)fwXPStp z`CWX#Ii!2P;^6^61_5lvZSVNb5=K9U$IZCHc8!!EEmWz2*uO+)Y*!CgFe_e(I%AY5 zd+(JEnS&CfeNSW2CetR%E~`^A%-t>;Z|ixyOQ)M%BFGG-rG-}%F2--< z?Sh46;g?5E=Ms`(jn4Bp<(Tv6LW|>rX$mAqZlPG5;b6lf$-F z4j}yaGWdni>~H~icnsq;?wp0PC_igE?^@cnUF1yrp+RkvzjBjjW^JAGRm7>0hu=o;C@1byOcW*Up_DdpwD+U)Xd3awKGuG21Gg zW5{gO_tCJ*cS*bcOy|&`>b5-p@azlsvVG%l^tL>6+L{$9uR)OjN8;$o`6332JF7f+tn1!-A)ed3k zd<&|E9l7;}ipHNWuVzWDB<%ZdwJ5Qezfl)m`XFGQHRpyL1v6G)L*!;xcHX$~?F4gWf~=Lbs<`OmDzix}_P}!$Y>d0nfVTyPHiI*U&iF*;E;Y4)q(I;JUL1%epMd zO!YdL`M8!esd4E3YsVd8@3@Pttp?En`EP>`M#i}hF&<6pxLQnCF3JL>D)d9Qso<>z ziO=3G$Qv24fc?-oq!3m3V$mCtLxOCGdV4g%0VVn|10y%3oNFqpzLBZ-YoX0zCN!I{ znO)2ZwK^|=lPIHBn zl3vWC=qRh~B>D&hqnf`jZ9=Bm-!h)bM*Z$-MRpl7A?Nxwnht)Ub%VsliW_8sH}j#4 zp=dcXK8ec^ZG(g{%t(Df)ZtJgJJC62f;jS;My9ej9BU<$d9VsKHA+t)!Esw|7Mgj$avGQh8?xIiFd{f$+>#NKE!&!MFcDwu#^#3?>NpbF{A?2Sy>z0f?r= zxNPxk?64K2+lMO?m**ebo9C69WUpE>1Y|O6B<<>FG58HzaqF^N1Go@P&d(UZIUTm- z%G9-$0_+_R4Ag)cy{#W;5+vf?MFVs`J;N_gKcz6&L$ApHckXy9W>4?r9 z^X(jY-HXL~)zUmcdWfAyeu;CxE@urmR|B(cPk=@2TI8`NpDAj=WgkK6skZixD@BpL zM3xJ#BC2}aGjHE^j{$E-rPDnNEK*qkk+yEF@YSi?GcmDkMX)xg@>*E(D?L==f=GPn zM{2ip4R*Y*9*O*1H9t02HB0mj4cRnpPD!{G&FdArg0;1=skYv5>qsl)fn9<3VaZ}S zcF!ayJkqz`WjR)&bB?-u4r-){Htrtf0R8>lUT_EcCK9LdSdKSs%lmyf1|xCYfANTx z2M;7mJm`g9n5p9{Ts@zzU==NDHEs~iRiO*MP}{V|PjPYuSnY^pJ)dO3v$e9cxlnz* zpEOfV%bwoN=8H|%36ZT6f@*Hetp95!eRE*3}@;-kfej_JSXSzQ*y#CgUTf9)z0j14AEd}iuf^v_Y3q2q;bOHEgZarAHXzq@ds~5gg!D1 zU_=^}=%+I4;%(5hySJ&6xaT1C%C;;eI4)GN&iOJ^zZ+3KvOs1eP@a)rYiChS!dg*k zcXtQMBN{;;G`WHaJXZ&XpHfU;w!>plrnBQ`9+8P*QzpBNPl}W$_idVJXrBL z@X2?5$=r6^jgqB+{Rizh^)cyU(ORxu_(JI2a-=pbVaK$_TV-IQsu0r#&M;*PiYA|c zE1$6X03gY+=15*(Qu-5_&t(~_#c6MAFK|4VeLbJsCD%MVLA4xS?71Qx{oIygX6v~J zV9Sy7(vS0%BJcOl=MScC2=rg8G05{mFB^C^1QuJS+FI1Z_GwGU+xSeV6T3kPC_&os z^w=};j1XJFsn7=-qv~LH6n2{_5QVNO07ft9qwndZp~{sU`sKgEv^Q;Y^yiId-LzDE z5?IXDZN~kgi)n36%3oUL>&v#~#>W`a{vl3p`Z@{2`JEBQiw(pvwzkAJzG1h1II^Ew^lX(=>q*yIk}dEyYZjlc_`-ol|B*}&vIxJ!O8Tt64@_W8t8;XD6#34}6~ z+zS-mS-5NO$i2qMl*pW{lpexMS2CECoVV8Hr@ppk&g7701KJgCr^w-VkkHI6R53=g z*F&s|@kIEtfL|gx=@HS_wG!NH3iMT2yk&#u<{sxRMZq#NUf);&c>?HK#JH|VQJ$RX zD^$O2E$%!4o7G;GCXo?2d2~A1zw5^%4Cx&M@UnWe}%K3 z(Z&8;Devjz6>pTVl-IdE@U=EZC?l_eeO=%aF1YD_SA}W{rUzcJt1*Pz%Ab~WT3}pj zP7oBhY+<&Y4q?uYquaVPpFPhu-l^R2#C-c+sBChD4txz5G|eB|Pkw78&>g>ma)Y4q zznkQ3`^+7jBO13g_;eB&5w# zRg?la+}t*m?RbhZ?+aFWu34fV;nzfuAPwk-TAT_SbzjZlwPKF($l+)#u#bUZQ)}?0kaDXhW&jObc_KokMTfTSvhPL>D?9(e zf=YG|qTPYLLt9;!$7k+@N$(@{^k8Mo)BORpPbP?OU|IpJRo_upR{+zf2j7y7nF84> zVi)T^b~k-3J})=qNU*CmedN71QC9qdKl`iPy9F}vNOK0qMpjqZF0ZVc8JYLhg!fuh zufHODsd?oQMTPodm3|jmpW~` z+y44o%L`}M^Wn;fi5jaKToW-O^U{Tnjg+AayyP+azL5Dui|L4M8?|S%qLJ6KKms-a z^N9>0$!n%Yv~Bkhuo|+)PE3f+&7>+>zDJopW!NIn!O2fInyZ2Rj9hP**!ZD!ldab# zIJP2W5W=cO%g1~9z2@|D-P#~wL!H-h)_CDo`N(cY#ggS(mt++p?YXD6RQMLEG^1v8 z-Czzy?lWa8=awi$e0{$_I`WXOCpeTO5*b|fM<#02A4@pw3StCoC)99B_ty|}UF|EgyA}y* zR`x2@#xRN6>tjc)bNFB5QwS^(RQ5Y}ojCP0q|6rQWxw8A+*m;eyal$U1Lr-x)8cE|?V<6K<#qHqb9{}S?2jP(v>qUO_W+27I$05X=?cFn zu5=R79I2g4ZhVQq1YSBD)YRA>ToTKqRT-&%$U%O8$@LO#uLb>bX-aZ>e>ARLG?tf? zp^KuOfed^1FBujo~TSstA=%hCG+7*xAiEI)e?__nj`8t$rOzFnE! z%Vy|8&$Gh6#8@cNyTRiqW_T5RKPf0QfWZ#%XqVGZ0sKY%et!(@H)=E^la)bmeaXe= zF_qI+eM1s*VJ9NHS2K1^j+18WsmSUaE$3m50+R-m6YA(bJ=$NpYB$C;6?k~ixEL%H zyiA`beOZ}5XTV!8p<_J_$`W01it!rjF`lo85IX5PxFjDqHO^_+4(w7=^SMTtuT0pJ z-1t_98gXj}eioyhI+^qI_uSxJt!u${Br1q>>g1^6)(%UlzLF4EeCr`58yx ztnTWait}@xAzE2!s@`KK^A;9nr^$ly;np9^u&|p9Pc1N~3urAEtp~eGAA;Zy(n!~+k!jLCB!jluMe`L3dubO%Ov%|OVKm*CXUa)nFdaUm2 z%Use7d~Ti<%fgZl!GmT^E}vIPt#qMM~a7?TaVeu-Z*{qme~$(GD2oVPOyv$ z2M~`zBb(4I#V9$X>cT@J6AHnxpd*o%fpF~-15%=CcZLxF2}(4OVSGTc60MrLeEEnwk4WyNO%%!TO&e|vz zM6xVQ_VG;tcDJWp-D?m*r4sZ1sV(`h~rNX3~5<9v(m__ zwMuLmlnu4%QDG-{C%GsfX|&2y8M6kLCKPITiB0e0gj}T2?4t(yX(Hj>BMG`Nl8~VR zB=uy%F|&r@gp)r8Z>gZ|Pex{Sp;)N5%`QGb18WFSqU~Za%Q?s{Hq3Zm$b**bo9*Ff9duJRt&K2Hipo5kt}fccP;wog!gx41XvHt+Zws--)ubfaeg&Lh7_Azb z3fk^AS}PhjK>=-&IqQVUB_|GneeMd$ry0Z`m@-DgrT*9oB3KkUmne`P^=Log`jacH zZuldjt?yC8xL>`=brn()gzB>@sXkiJ(+oniEO>Q;yQ=8l5Bbyw+S6sWR;?--6?jyOB23@LB z+0FY>vHeYWL)J9TTr>?#jm%kF!8vos!Wd4#y8((I3mca!8iTFTsF zf0p-sS>dTY?MevpYjI^N;bD#$F^{lMd7?eY*>V^zxS#VN@`XDgB9x6muMey5ha=g1 z5N}`>0SgE$eHRX1As_IzJY_nr7Q~O85u`cv#tbocOXpUm@^mgrkti0M3i5|f5Xiv^ z;nq*kpp8FC>3)Qh9u=UF;9AflC{NY3JtQKc3wLc!l3}LsM&qrfKnhJMRlN9~Gs@&4 z92zoWL29p;6rp-6v?2i^uEjL_wtKF8 z7X@NIUdDrJp8|WX6T}EX6Y3un;B+-&9di>c@sY3+1SP|U3ZLT-dGFQ2cskwx%pB;~ zNnR~I;es|AI&{&Xw^gaJ3vDIr(dp;vt0nPF)F-s+D%7;`xyil0;gv z_E1aisTGBdR6y{CUWEtS_lR=FFXN=efrqTn7MZii5ODW~2+@qS_10>fDO7hwczA&M zq_LN}LmERyE-WpMsOKV0DrRG3!+1&e&@QLDQ@&retjZ=94Le+8G^tpPkqzx6*%vD2Bq_I9K&Co(WNEsh=9(C!$@I~F4_VUSVSr&1m_*>!tVIld^Kdl=I4A~ew<4eW~H z;XKVNFiDT5!pe8?2sl^3!UabuCR3oqNmh18a{DnHDDRw_5? zv^AM83m-{qmv@>Z_L?^>65y%f^~Clfzvq*bnG)$Z$;Mu^D83cSE+Xc`fdJ(q=PWVO z(M|kaV*C`AEX&BOJvb6IB*;BM)I#TwS=xBg-8_Fmk|(lMuA_Mrf-$YE3PWHxDP{4l z0_SRiA+*@Ten^>f^^?!-id4QM54`hsHAT`#5P%W>gFG! zaVFm*OP~ueX3FAETHnwVaANlVrbk7T+-*K&Q=s}Vl$PI>PTKS}ak>U`JnP6NgVYRu z3R70G`EKU|>h9y%G$22s`s+n7GQot6f^jNS*66@cgU@K%rt)~q$BDIN;^2nJKEY>+ zuEXBDelCIG&5u+#=!~g|5~7Cbchy};C`wqTvJ9lF3G1$Sf%es|1t;&P57*=zY4{tuyCVZnKf>+x1uAeZ?96tkK-)GWND*av1ENgoFNEoNPy&@HuhZKENvcQkPnh@ z%5GvWmBjS)!(9WZqA8^0g%=PI>Mifl-5WN0EVlL4-$1pRuRHT2^04GC>uv>*vrC48 z!FUjSv5T{4dtBs^DDR^R4n8TAek(Q#pk_Kqh{!2&+WdUxb)!}n&`clOt$uhA_xf+^L9_;#XT@n9Q)9+8j@WqZi( zw*WKeu@lzlN9eoG2(#1*LR^Cy0^sB#jO;!VeyL4Z3mqMzbbJeY{AgL)Qvrbe*a;mH zPBbI!>0=9gCi`UKybtw;R5dc2hEkD0Yeaw@)f{F~QIv!QK$ZbJh`u$roofe2&gUMv zgvBF0%#hiKf=gH6b7qH`RmW@^8~%R%vhN_k>GCd7t6hNnI+asmi!=M>(#Un9Pz`-$C1+$h}0+$cY!`%Xof08We>?i%VEX50l2fA5CD zNkbaUlR$njl!7nhtB~27)}wWtFGfEA_6|}j6DI&*6$Hi;6QRhI zrJ^I&YX*M|CzoKPkAF$(hhF-X$4v}wxl|n41&a!Z8s&+Rcfe$ys&DyfNr0{DJKK;tOIv-hfrlZ}boa`;`-iSE zQr^&&<+9pbf^n1VRP)6VGVLD71sC!VR|Zyh-@^>Gb#6rJ<=Mb-v~nRdk&$|+xHVID zPHOb9iTzcp#Jg(+>6Qutl0}xR_oXB6FIvSyQ-z22A6VQQN^^NGh3rKblFOQ9jAEfB zXfHmoj6YHWvf!4T5Z{0F_>B}o;x;p1ajlL`lhhU)!4Md-cPd1)Z^k7~rEx7c*=rWm z!>oipu^12nst}XGdZs2&e!;w2;_R4OB*H*^hE|E9;Q|{%sTiHh)c%rzD}aSqgT;h) z$fgm|uwU?jWif`Nm0E{}k;qhtsU+%hf}@tkDJdV*N*M`bUztI+Wr zXJ{a>7Cxb33RiPDOI+)m37Iu(8t#A;WuMB0cOqxTwymeECQ&4?XUTwmrKO?5LfAW7 zEI{zyP3#aa{xK`{3AGFRL~Ox$1KPfz^n@aucMR>~)e8UC49!If3|gKUELvXT;%*@3KrIu@fb9e2;4@M@A+=z6Ql*8ZsS?034`u=B zBMP>!p$DX6Q%h^_>PW|Cyp%AxVxphfVp`cfkPRk{!3fdA+$J5H&w6()msZ+l>Wkc@ zpQTwx?nJ=cmebQagF=x#&A`>kevb{WGinGEOze;ppNi9#&@)NL+@(qE#H{`yo!mQ{ zmfsYOOG6JQM2%M?1z<>}VroiyG(V321`UC;T88#qI$984IdyI}IjAm{2*)Y^lq{ld zS7(Bls5_G@GWkL4?h=*x2%FQ6}fi0j-89 zIOGlCsL%7YcS$9@CJ8eR#4?k%uJI6FIkTb<^dDg1mPcv3SGYWI{T6}^=Jf%J2!MKw0q7_Qd5mTaexekKLogr>x2%JN8NM1;*Hp0a5^Wz=dLmd| zrSysKdxM&8g_wDYCpNWu!Mt9$YmiXsSqwXO4%UqIIFPx!>d4S?PEr$TrTN(-`zez` zq)eWrLx-sM&({VrL=}yScVW@amc_YTty=^qjcFbg?TVwJ7wt#&T|CkG5?0&H2o^PF z$$4@9B;rJ+{=_)nIkc}!$|oTG(+%GQ9KCTrPzR=qno{+gx5FYHzeCn1poVQT0ISyP zVeC*Zu}JDYLI%J4!J;7-(0vO}{w%?juEzrF6$fTJjyD4LGVV<15dSF(OO}QumxF83 z8a3WTJW8-_N63ac0MF}5n-(t~6?m+V&*@Q?%8^HIx);8u)MNb@PQ4F9yW_;3p?Z-^ zN(Z8FpCPQ@uw>!k3%;-o%E)CP?okqnu+pIFQS!rscMlBT`Nob$i7J)$w6wNUZ4?KD z(G_FrSv5wY#X3r&!TO$vAp8NI%Fgii7_}kwz zsW%ee+^2?tA+fsqJ(Gtp?Em;Z69Bx71oNMNc#RHj($RHV<+~R!S#$4eBivj_k*FUG zM||_J287UIJsMG5(LlDgIx(rnc!Pw3hIu%4ww05QcX#z-JYIiJGyE+-1KRp%*YcP7 z(rR*BLgS7o8VR2fn_jw|p!m0db|I#BADu;z=!R|PwT~XV;TU=v#)Pqm$4VMP?DSUG zHH;F$HHMz(U%(&g-|6WYZ;9^`M8l=uTRz)nrGB4S*U7y2(tzJ^*!C0BY&k{qVh~O{ zU&)QSXFvNAI+Bt^8) zSxp7gVD2zlt`>RrvLr5zN0l@bpDZ6mzA}INGF@AEsGQL5Qgu#p7=^;%yFBZSINrnV zE6u$qQ8F`^jk6VZjjQ*QKHuz~EGqRAiZZ+V2gSz`z}**p*1mFdp7&V$2-`y*{b{Wh znDkSJyP}acAz>M;i`d*Zrm&Y!{XS}x$c7t_gl^DYQ!ocFj;q$l<$UsUntNXrHreb9 zOvXsm$DNnTUDh!CSS;F;@%}uW>l7S^Rv$>*#qyx?C4AA4`=l^2(dS^3#>Oo6A(A{I z?fL@uk9{M_3wW7J?ub}a*<7$+e7^RbC4WZ+`c@Z7a(le@4a2^rO_!th5H^fY_< z=!5M<%#E%K9WlfGd}lZkfGyG|L=YRqMw?AY}7iluM19}vZ|m=@?> zQ&e*BN<=dmgca1QB^_4g@u(?ji}~8Wm;b0^#gzBKB=%+fM=`=Hfe&gdY3XAtQ{CJm zhPA8cIp_#jx^*#x-$v5^oV9h$K zlqMSnj|A@dJm8AQCYFA;m(r_HFPV{^V~6}%Uq0sNLhBBaqC^Zi#bgs0J-BVc*LAFL zdMOrrSEQSp90p$&O-&n;E@wj;oq8JKEnoEcG{0)ss%#6E6jJ;cP-mu0#PViLvhTVD zr%wL?z_{no@y$j+1h2lyTG&m3Nba>~=dN+i#J5pyY#fcg;9arFH!r9XCb+-}Di0F! z5y_AvKg>TLG8U6AH%YjzmGd_!+JKXJh$z$Ur>2V}6Z+}_x!1LvH4)KCZIqnu8lu^U z@&2K+w|$nwdWWMIkNKT4kI>aH5eChPy&2DBL@UCo2r-EWSpBYqw%Q=yB8ifn<||t- zvH>*NFYD$w;Uw8h4>0|dB(~1LU(?e%KPa!NP(~iiD02Bva3z}8%wDN`G0}Awf+)R` z29PI9hY6nG;fR*<;aGQW22;1khFsOri)?+Ix6m(U8v3qTQNmDt+Wn5ZaeMVN;qklb z0q0=80Y;o=ZCTzKUfrE1-wCd^oP0As90jbR2T(hAoswu#GK=u9e?wPQ#6U*j!0+_~ zLH{p_1fsi{B?m+D&zY4vF$s$X9b5#rgNqQHtm~hKzn8FKnPBPbY1##I2A_dwNoZyL z2qrLO?~7fTKWr)iX^Q*X?1MEMj}mL2_OLZ+9u~8TG$txfL3(Pg^=sL4k*mqI{{7=~ zuhL1;2rjzmG=q-WT_t4*@!a!a!ve07_2ZoM7Avd3=yvY;u5zD>cU9#r>zBvOBTbfI zOUo6HtGbwPTi-;#3HSJZ`Qqc@fPLk(I`?9p4V?)kHGOXc<7?ts19h@;Nn@iZb-G3p z*|#t?2c6jRX3}Q+d8|0-9|9>xVYj%+TZO3aT%4-7x;9uSYb~J1HQP1Y5Au+Nuz3rl zd!SY;zG-(GU7&SwS@JE{O=!%ihaALPfQ|lhP3*7EQ zlQp)~)~cOAWoGaaMaMBOo-4VoE!s-QXXX^{xxN{~T2(xL+mcqN)X>aad{>EuHtWYA z=2m%gTOrc;u?z$4Q|wf91*@uhF)w0yhS}*_K1a{tR$Ds4ce0Q~o83(DPny0o#mT#w z>7#%fu1`orXLHO)a4Hgyi`~qN6v6A+_0zt*52@<0N7l}(i}LezUaB8NoyGGpq1(vu zGvX1;R0&*>CfoTb58JDgB9@8TlFp7V%%oUM(8$>x)225hhpJO2jtPzs!fxgU7?4qq zzdHOV;4az3l@C(X5>Bs`s3*|S&`Y()7~OG!c^MPOX_qi&H%!`gs_@2OF9keWmCtbW zY^)8P$F)Dv`~EV>lbi0s$I=otCbT53FSNE+KqIi)3((UQFAZ=~eHVG93~pG$+M?(7}Mh}ES)~jk0_u^9rKoYVN91Om@6{j5UteARwD->V#-uVqh-??>3+%; z1fB=2p^@n^Wb-&1XC&K-PlHj)jh-KJ<_l%--jB9+@{@SOL7_FPMQ)Mn8R6a|BZhQ-HFIJ53oFa_$(Ku%W2+8ZCjkER}ZWRn^oL@{jg@TQ&M;HW36f0a_PWj+{ZY9KgF`q7s zDlrl`!x(7fWoxC_-{YF7$#`D&we{7-4Ds+=Z459rww+CMj74+8&8ROHMR_&q*SS74 zslk=xOwOHFAaDCz{ul>XV9AYk|1slmO_1xju>pVev73I1a5F;1YkJqVdLLZ7u#W>sG?nOKVdFg$F4!W5+2(Ts4{t$|K|pxRTSXxi%GYFE2Ed zVq^gz5$*>M{jefNp36mT3j($$^fN{nX`=d4R zLv_!1aV~@+MNBX*dZ&8$j&d~N?*}WUU~aS6$#FU)f796|@L6{E)-ssZ1HdvuXTWd%+YA9Ii$_ZYbHFNbS;GYKA7G<`sbW0(~7(|J8KZ_qD9 zFR4jR$baaZs*{Qeo>zXqlj`2;?<{|SVW^&#>v#0AsA2o5E=y|Ab+1P-AddXK7mAy2 zsqat|@(z1CS%mr%Y!|hDcti2Fs8QPQ48@OmdRzf-n+dae2UQ7caF<|X3QhZZ{Eqw6 zT^d{@#Yc+~Lzz26vS!-E5fZAT!|e!YR$OKq1*$`FGi<5a!G`JjXibMeP2tE-u`@FV za-lV^H7s1PF!fP|L)nB0-Gu4=QRpBNUY_0OY{ z^Y$_g%%-VGuFDT6Nh9_IeBye0Q!}MzNY?9hqMm`Sv*vb$;)71&m{D>{zEoAoVq%}L z7b1ak&HUn7F8BrFOd6(dQa|GM4&Gpowp7zJ4$o)>7JEWH<5anR6kj4(=s}{tg~DX% zCpFOmcXN)AX8X0p25(lEWBT#2INz@N0w8%k=z2!2zaIV5nZ)vnTr&QPrx|pvx%Gul zBlvXRc1PrzEOzzegaK$i?L?$N?dN*I7lm?)F6NSg@`W3!G+ zm?)y3;J`w5)UP(1Hq_w84!O~tJ|EdJ!V>IW4L=#eV%zacSj1mtY&MuVZ<7(Ct7xVf zhUWKD0VdDLCVnT86HYUV0l`(J)KTWg`GG3GsYicU_JK4V+jB=Zd>5f#ZTTi29Lta! zK(C~ej}qKg^bL)?eavA!Qt3XdD7Izk^f=a)qSRowNvv+Z$c}^?fA(iV|ElKX^aA2q z>UQpndgIttM2C=9ApAIiRG~PXu0E;gcsiF)I+{{rqP`^A+APB*6u|%Tn##_UbLwxO zEMch9ELt3|Mo+%b%RfqfD>0o8(xf{3wALE7e?>chE*@T~!Kw0S3d6ONwX(4e{XGWK@`_ogY?EXkYX7M#n}y}D7X z(aMP8wNPCBlYmG;55D&v_n)MnN6dTYAw!Fj`<^BDmd+vmxkdyk2l44KiJ_~3j0s~k zxez2lUyh&SI4jREf-`AkVMOt1)JGOz3aSz+HljUG4|`3oP5>JRthb*(fZ?N;PM&#i zjdg!@jW*FQwblGYyLRX9zsO`7$}StN&d+JcZle_0Tt=e0!?_RSyD$+gf@6R^o{bU|w3tHs^ZKmc=o5R~k_Xt0}K4IUukI{WFdU`e~ zMn#j~5?=fNB`4#T@ zj4=}XO|sIU9~_?IIiK+3M>a1z4Tgq2@R{5EX>8Z1CcM&_TD~AX)=B9KcN+1fBxiV@ z2ZxclNE}c#f!j;6YrzJ3FlIx3xAgz^QQb+&=_bWrXa}_Nmr0B3R|IBZk)DoC?jLN$ zF$6WQ{5Fc)BqN~mtXlWKl$ycz9N+68n7L)(BqY}`|JQXLj= zT*F{0*$Oo0GCYz#ko4(TC|(kfuAh%=>}LukNv?Ap7V#XTtu|Z4J*hQ5ErNavceTPk z9FXTI5Er{XzmOL@WEbnb*X;xNzGF?Deafr_h$UxCQ=zen!N zM-qN|gLXiE9CSV4-SaB!?V4*0a_68XJ%No;yNogPa7c4pc?G}Or4iZb6=0R_Yrue$ z)9aTLIBt;#^D1Dsf;{wsBetDYGuV=ZYXik-jyiv1ZV_L*3_6if%BTr9Q>($OeG{z% z)C|g1g)z&08>Y?&o$&wsAzXK~Kspma^wHI?hI8&EXhwh5XZYJ| zRgHA-4+gbG1m8uB6|hPSA1oM196}_H#)1`u65@*}u8+180|Fiw1BS|4IBkT>WDB4T zxQ1+Dt$_}1%QnM(Ji%8Ui|>Jn?Maol`UwVtS8<$4tDH%d7x|rw+yoha`Tf%{iESuP(^o1D-Rt>PV+L?y6dR4w;6E}12a2A3A5>MYO$>Q!>J1V(gC1;D zuB`}ZKd4qf30KMt3d!7C(kI6iJaYDB#x6fGip z$J*x;gac}^qkit#X!{5JW4HPMXJ?QkY=i7a<>8W6;+dC`SFgb?iF1Y_r3KKI@Co6b zV%WuGD{IBSM>BroRv53t^DyD^KurEf?dAJBycql1(t9umTYmd1bh|c$u9(~&PV@{r z3cu74NsaTW6VXGbk8ex8Ei97szOdJ1f(WH5U2qCAj7`yT0bcM@F=}0*UzYeDgUy*5 z2F;jRqU9|2C=0vqRbd3L=m_AHzE7RqmKX^|tp|qT2#EM~2y8R^!1hbNrn|9Hanz!GE?iqN^tX z9Q1ihu%!wM2&PE7x2D{$6S=uUIV#N!fuz(K zfvFM%zl~EI37HCOBKOvBe;R!sS7fH|5c*z)=RyR-_(WCS=tQ%viCFI-RqmL>IwV!v zMW^-HV%#$}B&dJtkWRN{<)-6=9*m={uYBvP2{shCyH|8n14v86^J0~KW+hH`?d(!1 zafaVBFl!hTEf_+Ul1q5y!j{yI+~pK3I#whoa!he0-8#gk7e(6%?aTk*1XDoSu$>iB zkS(g#txI?xRj;N&EO^QERlJcn=Y%#p$@d|$PUE50tRA}ub8>2q%Mv|l@qiTXX@tFl z>)aAjJv&jq0Pvz8EuqqCA41bMwl|)v9t6Xi+h?CYUVQpN6i72cvAm--G{h8LoFD-` zFEnGI1k}ej1a3aAvY4gR4=nInn}WPL27EtUmVhx5hdFktXTNVx9wX1OAu_4w!(Qn7 z-q98AjXuM8;fvLbeeYY2Gf}dS5VxM;OV=Yx*XiF!qSMKQ4wkxfTH2>w*?9MCl)?@0F|Tt5orOo_3O71Y z_~pj3)0%Cg3A+m4gF|Ffg}1{v{mx1_btCwoqPy~JaV`PVEn1#~jpa$>OLt+coT}=> z(dDLQ=hsUG!9Xj%{eXA)e^T|P{^#r2pR8KPwEw0(xIsAnGwp#g1!=>NZR^dGbM(|vg0zbZx}Rb`~{hS3QQ2A8b5d;m~f*y`kNc<@K0F?Y*d!ib0I zGkStSa$=TWChjRgsaYkdkp6jOWoHHnTKU=}0lzLuo+dkXzTahJuZ4_6&e zrI2k&qa&Lw)S*$clTEmna)38&H8dHkXumc5ThDHj60reaJ&VIFvKu$j)z!6bUsAiB z5^##*K%)h$6>Au$Cq%5cEB+j3IgnXgGH};s^6D+dA)jR|V~xaz`JVTl$4G}<0WJMg z{5YRwDBH1{tkJvzLv=)@hmu^fLSK2z-0*N1V@rvC!2R=0_QrSEO2Q)I zV61-ud2$y&G;z3iWiZiyP7YLT)mkkuiCV0~F$&uAY$Ql&Haa|gMNCasU62lik;H_z zID>B|TGZzwX39c_p`>d17H=rbvLFhz*P@QY(ObpnvM|$EJMagbl}92%JIYd1#kBX^ z&Z~W>P3@A$Dh+4nf*1wM0;zk5UM~fg9r!Q~fOsEL=UWxTFNMP`?vcn`E;#BPCb(iFhC|J2dqfjoEpm}dG#>lEJ&tr5oFn+GiU|mN)WEZ)?4m(Z9-59Y!1~7BtL*Un)byM!)=csoE-C1c;o` zXK-2@Em}G+hk276aME)Rd8MYely}{{^YvGfrr-a#JU`#Fo~8~j^2#8Q+T{hsE|sw_ zm+fQ`W7H|2`F)EaqIsb`4O-;nSw=7C68=f02eEqEO~S4ci$ZT7j(D!@?^Zovb=md6 z`mCgFG=Ryt+)d)59GigLavH3(3aE3c?-QISsjR&lq?cVM8nD;Cbm&g3@Tl7?vCjrPj&b^gV`Z=Gg`%gYT-J<507Uhr2VsswGG+ZHythC1%AQDW89m$1CKpZ6k4!&Vh!{CueOpe^AvueF-eO$@_z@qPg4rpG4-~meN#GiMo-#cw}kl5$%&I@};-!Ki{y!uf3__rSOs^9VK z(5{it-`5L!E=qyIn9loL=qHrI>v`qirjuvA#1=w(TDrYJT0GcRp}d#?Myz0%W{Bi% zSnWWI?=VWX>rRZ3D`zzu^Z5_IK{I;vs_hmt1WJlkQ} ziN3IJW2^;XH-o!u6RZVmQ0eLQXv;2apE^mmlU)OqAM+u);%~jhn_mSz8A>O`PM=Zw ztYV2aC+yftZAhw!I{n^dot=r8=XuY$@S$ac6poer-G%0Sd3*3QQ_^QWpFpnM59*^WkOBE5+E z5q=p?@+7JJ0Y8jLRyDLYZ#HEgw>y!-N6hB=qehCxu zj@)&Wo+Rb#=JybNc~m z$>Oior*3kkJI04Q`~G4|WC`AI6TD;Y(D!vJKk5w+0LnxBgMRoYHaA8UEkx{DStg-% z=`QI{;FkLiV!AW{bk&m;p8kf#E*I??%i%khN3M9UJA?a~ShNj0Cd7r%n*XB*!N&Gx zZ2P-9@n*b4@U;7l!#}>jpbJd$?@!KBa@2o)0WJ{s|MUg67eHws>22M_gqZ)!9YC)W zxUd9676F0(zfF_9ra=)tNhF~EH;II%W?+JpC9Wve;JH&q{wm94W9Tdoh3stk>5{b@ z`VW6J5#L{2p>}kPis-b1S$*kCx|0_v?jEpEMzVOZ#WBsq5KxGC97M=amCymj%?==B zvb=TzLY{S}9IdE1G*vFZ?T7BI*H6M zWg<ag^2qu+em88j5mgBS}*+{*HG5Z9e z1ARG#8fZKeYh2*=<1pTlRv8kRCh40Q)}g{`0ac*N+XCM zqktx?uEnFAbXHJCDo3UahBYgXvp;Db|Ndjy(L3t|ltDeEu##U|+svo?ET z#T;<~=mPU!w|Sfn`WJc=mA|KV8_}b877jX@ltQ;$Oiih?MqskHwBs3PAb&SX616^O z9#7ablL4w|Y)|@tD2bfrdc5?B!=rdgt}hDNK7R;N-Lm-JvSZ)G)XGf?Xd_x{XEP`6 zaZ1x7@5WTj=D{*wlb-~p`cWy_rlc}Sxq#aKn=|}O<&bu?Fe?v!;z`cqaZ0s19NH$} zV?}B5fch%W#a?AVGxFC#7h3zGw$xtRhdK(xSIioL-D$)$tKLQ z#8?&aM0(Ra{qEPWW!Rr%=*%jtRY=q?c-^t|oqN1n!UX25C0i1DT7lyA;Yh7U)T-QU zEQTEhXcinnP_}qTJH$K@at8Ptvb!jrkkLDgJW-TaWLZ6?*PNaNa=X|WU3HIOS-rQe zpa6qmK=P}RQWugki#8ds5$J!8VVsi@HX;(&P9S zhA6u*eQ(3w({=#y8&ke25axbBZrUR31L)X8dVQt`?WB9+j^u&xLVxrU{gAk^!FfV; z1b-|e_(046d)J)qjC~EBO!ftoPhKRa38~-tA6%htihKzr-$xHwx72y?7zmI~{jaM( zs`vC>-;8{U$SDo?AZ;-o)AstYB*71T*mryl3`NO)+|Y?m(saZ9xN+IpKHv)pCPNx+ z>fYOws=+6H5NsofHV{DLnIC`u7bb-AnNb7(jf!3}fSBkx z%SJTnL!HYBqHKpZaPtWS(&MuqCxf-nrj(oatD?yl#(RuN{bJm!=Gx{G(kz&@h^BJ) z^0q6T@j}wqqKAgDBbBc;OSC~8jl;X?wN0t4s6f=QmixjU_&Cxdq7r#cEbBmn;6?lj zvr|SVs$wl-mvK;_d|Muy8DuD6Or>bNVf7o=bS|yz;*V?=u)dv^Xm8yr=zd;|yh+A@ z+ZmkNHI^;^n_@s^Vd1Py-p;0BCrkXwdqY3!0eO?66(KT32PqomGS($*Ss_XO9ZI=Hvbn0}U;09I_k^;;6Rn~^H{xya5?_TwljCVKj@m}weuzfjGdp-Ys z5wn2c{pXi_<_Cz9FXlj@Kl{h}r+@4^fe(BzWIhn$|Jm?syxuD@kQg@^J!gb9xOxE( z_r+N>d7c+bFIc2?+KQL9HsWHW@`6E^dieVf29w5mo1(;v)%$bqTDWdA=?p9+i8dUh zfpAQuG}o)0`2dKoTLRDk$eIL4jIHlsCPt$b2J|@3`Ah2Mt!H+T&87|7DXU~$QdHB} zlk?%;FOLF;+;z=2z_DdEOOK;5MI!A>ZNkt3{HM=Ae;tEa!_4N;kPxuZYL*x3+J~oS zgPJC0`Bi2-@!hO6)R5Dyr5PtuEc}Wfk7|cc&@(2`G8(mc(5@MKioO<~z|;7aD0k>o z!L-_zWIzH(d=4F(N611;!-8w6bT~#7E)y{aH6VupJZeT4z!Q%^#k?L*$(Px4ASjaQ z4Pmd-AYEWx8V6OKF-e83+EmIUhtVb98-Zc2m{kMd+WwoH0Bqr6$Kz2zI{QW#NkJdem=`YP8Xu0pC<2!zfz1*2h5wfI z<1|;s@4DbZQ+P^y$zRO@eWw?5$3BNrqz7WrPzGu1z@00zTPWoV3oYmJdpFD+x7}6- zVyJs5W`H$i4iCIyB?W_po>@RsbwGjl&Bzw9w~H6CJ~oXj^r9{PWmm5&eyRh}0vp*;FVx|8R9pv{`@u1oWghq*LFlA9#M1|2@8TnV*sO_1 zoeejg6SX-o(p{W=(#2K}vApWA{B?hN)_lnwB|!xK@Q?o@^Cef{+1jc;+F2?bx% zZ$Au?L(0(K{%nn6PYSPu8yt>Z*neL5&a=F^Ncb;>T&GXO&)`oRQouP5r$VxkB70Kl$06FrhljlYZGi=Khpy zjNj#5;*xQYa`GkJs!S?ba6GW^168PyB4in?9^9dmw*t?iM@|$M#ge(z*6lZn%V>Ds z=<4ohQkA&M6(jm=*F!xEg0#*?W$d@$*pBw$k%7Q2YP zVy<5{k4yw|KMRq$=)>P0NgfttAA(Ib02|My`oX`JRQD8|>$$&l^LRWdX*Fad#16e1 z=9@t}a$zoRY2!4*`YA2P7+^}d@FDa9P?Do?)gcKTS^v4!uy#X&N^)+dIGD2+D|(5z z0`SF5_2+tdMbY~a-Xu$xRDTWkoUj-oFl^f-`V|t3QV22-Wh>3Ag|*^{5B#FK9RFc? z*VB4RlIGG?Jhk%0kZi%u|E>=V#MGU#PIijz1yf0K3xXW74-4JgvG!sczChY!({>hh zHWU>%lO@g-6CWOt?QZMdf$B@H`43!lD8Rxz0SOy{8k*kSj76wMjmh)IU2w~sPdrSM z%q5}S|0VNoXWjie*8SS+q<>Q7^0;mxJW2jwtAu2+er=zjS{V`kLlPqSnmXrW=t7Dp zpKp|2w+KahhNwpThY`MBPJzQw5#plZ$Jxti_9UT3sf>mm(vfA+z3r95HTZOhK0t(L zkSa?w;Yot0ybhh)KmqH`hRr%I3Mo#Z`lHVq{r(qU0ytOI-)Y|)vRhIi*ZxTNZKI1B zIFY>8#p*C@TU45_=`hCLbKog74$L}H8E<$U=UPJtIs6?d1 z2yxO34a>-n=Ui%Cl%$_iHmlyA+JKKIK9GCjm`UPqi00_NNvU>TPQ3A(9zt8P)suT3 zXN9pml6lGfbF_qK`dAb-7@&~0zc6QYoI#@3nD&U#hNJEG#$78=c)tbb2rWM!3Q#L~ z7HNRtZ{U5`f;X|+lpfFdQYflKKzFe-ZMd?%LokHq5u4-7X#)9)~p8LFHw7eK0}C7xlVf)xY-& zp1R4aGtKVQdD71iQc?OA)urhMy+Bo_e}Mes%+S;w5>$U`q3xmn>k12j5dF`C3&y7x zf%lIWfe#dDSXkoCqc`I3EX6OiMhWZkFxd&!$}XI8#6VF@yzFO4XK1FokXkB6-Oe6QNtFCDoc0~QQuL0`$h9CRG=sos~JH3+iwd>h464< ztnxB*-RUdii2K8s%S6jVhQ|cEi#0uKYykoS!V3@_l&GU{H>dwM$DN0Z$92yKXT9O& ziZ72?1ljsKjwHADuK6932Qbon~OXp9_+6SH@Y z9!Sy9h@UNQpC0`kxX-^^;BH z4$TuMz-qH*vBfEc-Lxi+8yq7R@nWI&NLy${!`Y?{cN^$dzJ$*?sY6IGn0^8q3zJ$J zRphH@DrZam$8O8j73j%Y`*PPRG+2laYnjF)rbWQQ;VmGgO7sumoYfa*u7xz~0IGxe zg&8KTscZA{bXlgwTT<-sPbPQcC@qeu@jVuoI`M_Nqsf!x2bG{TKqO}Sg%8_xcb081h?{fK)ot4Is12>u zCdmx3$S|V;+%B)+*4mfNleITBK*}LGnfkmzk`XPs^+R*A5iRO-jX1%6vH{v*@4igd z%y|O4W2C_H)@WdLo3|rHvAb2?fJ3S@J#LzLM77q70j5SA>L=r0QsN6=?rps?}~gA~fqv4U^+BF;2RSN1qA6`6$gCM>j$mnA)o zC`3lBYllrk75+e4`}Vs(i&5`)i$*C_p%UQMB@DUS=L8u#rMiYv0m&f%4(4|ki7JEN zA2#)t&B)c3Q#wc*>b>|2vVCq4x9sgt2nnbxC9@^+5l)4hchD;ju>HF%hwAF8rep1p z8}fMMp4gvX4?RMhd{*7R;XN0zGKIAu>=HCNP7pL<88al+wx^SAUKQudu^nXpN$ zA6SaPvF{6NgEov+xijEivJYjnoDi|AqAWkDnqWce z&y6pw4%E|cPFy%-q8jAKG(> zr>fuWh{a$O+8+cs;TwDYxzSW3RmXdPKhB~f?vR!cD-YwPp=I<4Q* zeZyhZl?12xi()@{7D#ZT;@;HBa)BDf_eoL326&x)igVp@YVl^}Pe*Gu?Z1v@$+lWC zYc{xa#(qtPm*F@nZJ+p=Ulb+#)({on?qq50+Ky@zTTMPrv7dVz5f4v&)t+o&+CYW6 z=G03|9$18U=;yV670N?zsrBgXjEa7WH2N6LYi#=|FR9iRkLIGqT9Qi5O>pi~PU=k0 z0-S<3zW5m(O$?t$X8R-|Szjanr8O79jAPs`r{E44u4P7+F$q>Zt1s5NSdQZDp5U6< z@GW7tqT9(#GNNu&==}YHYE`#qGL4}{%U>au>Q!k7R9AXs(PEsh`*Yn9Ip}k=k{l2z z0g#1*3Csk!aR%e+3xuncwLIUjztpbO0gigzo&&*ln|QtTkvVVq4}U9`w744iCp^OH ziK@qYBx-k8BS}JSgAFbWD6=-n)_Xk;oH|==g%RtMDW;$5<%c$qy?HJB9aK#D8HYI- zG8_^a7SHlcPFB>@{v13k&Xw~}jr50ex4_97{xTn+4puDZRk-sl)j5*J3l&yVT$KRzynD_{BU=%#CaB_YdC1fzX7HOx(8$z=Pp^o{c>(jqm z1wj^aA`#GGM|Tl!ugB%GBqbak0{JFq8y&+97QU)6`h2uLY-YhA5Wm4OgeYnK(hV5B z8GH+>;l1b?UOZcjJO$nIB%dslBsu+bdmT8do=g@`=~&w~V4J$nkL>y@j;lH|AzAplzo}a)v ze-1Jqp|1nP`(ouZfHf_4G&MUbRT1MJG5izzxb{%0oAr>X0oY88FYO)?5@d?LFT$4; z$8~8?_ov+2as`cPbw5B`vV|ww;pVDsE^kCBa^&{t?VGpmR<|DWRdD3Q)gbaKc)XsK zvUhN2@b#@P(g$Yz$HB;;!iA;aQ@hx{@GE}5T(M~1VnfJ1w`OzqAlBoLc%~_BMOmU^ z<|lEP5gUakvJuSG*Fu_Xp{F<`V9FFo9lm6t3O`Ih^Sk*uu?M6j$SHiVjHso)hSFpU zK4}oX(`CPTNbB;7FGt(M?;ogI-$-eR+Pal-r0VLrrT9j()7Ug6C3v9ljPEh9(x@r8 zLF{XnVVQ3Pjt)b#KG?v}8Pr$vU60Fc=+(U3L$z@ElS(c zfe)JCR(Cej)g9Y@dt+Rj$W=CvtC=qxTT^m^UE>%a{oa+RRIcy!hzi#iTlw7$Xtjs5 z!{1l)e6)aby)hH6X3hx!C*P-axER*?CYSSi$5wODvE5tsc$RHqPnKgTz!`bN%=bzi zpXg%`yAMCYZ?Q{p>i~KGXFvl2==QIA>RNQWqRU?8XM8FH-Iq*o_y)DYxleaaTj+Dc z=jR4M%sVpY^j^fp2D?L|N~8<}-<54e8c2B$*O*@xa4(bewUwj zeN)(2CziF2Mj|w_pGu@u$U54}&@Q-bzx72d16e7wSR+l|KfL#r8J&H;6} z?cEH5)Fs*sfz%^x+tMcL-e|-V#qA6A;|B^a&wQ#o-aF!Da)S9njdZEL9Ndx$=u07| z4=<%Y1N2fj*u5ep`|c&|)F{tia8UQeVDJ7MQ2Ce(jdzT3fyQeQsvF>+2&wo|Ba&-`Y z36eSO!7r=aY+m?QGAodb1!~3gUi`S2_fWchg}5G(4m=BRXcu7#T1E6ucSdY%t`=hv zTlro6%9ZxYwE?AKcE>=5aP+Nr@pUYXsmK-EqeYswZDnEk__ytK^Aq-BwLy8*zdo_?Bc~D8Vy3 zZ+x=x`*)#;k${ataM0X_QQCVS>IT~jdY*PV85X1|vr~S6vfl6cDC7(ZsSaI6zC0N; zk#qcWvWRJuko$fTs&za1tnb5_H63Vw;l=1|w1BzuVIzJ|v&g@uj?huFCnDXpa&1j& za;GqL)sL={JX~>)5EY8Z(J8~eu5+j-5=e1lA{C;_*o=4h!z?2RSppKW3%`P`eyz^< zy54EQQkbj6!7=j2hl+o78<1Woe2M?T7zpvE5J4435Z*)r=j$ENH~}Uxsys|3HE|E` zcMo9prxcFgkM6~RwBX4{9Iy27Xz1yi2VPS4r^I&Br+uzXl|oun<>3z)8aR@Fi$n7@ zmWa@9q$6Q|l~0N9VC$Uc*O$u_#UKAUDLzq3TZrs-)tuaGQHtzR{RIb$MbRh2G+aW_ zpHfhPI~@~(Y{yl6pDazwxwM&Qy_ne+3!tbSsQGHeqsbhW85V2GcrRqk)XnUBszp#& z}W>Ska%%S3yXrDP0sWJYlALpCyL8L@|^MHNE3v`>70353cD~qEL_FO9#zGt93 zefh4n`V5t_!%!8AkVYz6z;4YY)5dC@cHM{A%ADi1Yc@G9hhx<1s6~W%q1azM3slmO ziQD;U%gsDv%%74W$TZXT@}e+*7D1Jr6hOH8@w&Tz%dr0YhTPDwU-zWW7>nHs^qU#2_jNAd-&uC_Qil} z#>D`AzuC;e<4A!zZOoL(@z@?Y9Pkw`pI*C5XNVS0FsO2-EI++geTk^KxS5GkG|a9+ zm43)^H-b;}4vk~`f)}Pax`DM_%IXYa`OuDlYtqYyoEUr=pIbb;~7d%BR ztg&);rOYL18vEkZ!qG%~c#Oh5z{h3DB$Fj(XQwNKc3tcAc0%wElE?J#raY8F;_}KW zq?(l+)+ZyK)z%rWbvI$+F+l7aKc!RF8bt_3e8g=QY|z;?A{g$iyAKa5gM+vPePm~U zp^2QQlHj!&<29R=DyW?Y%XNVD6dT6O@fi6iNs01DmMv33k)1dhs*|wrJ8e^ow$jTA zt5)&y#y4IN%}If<>5Kl^5({>yu$pCedb?j5&CzIi!djOL#)JB$dcY-4V^lDm2=xZt zii*(niq$S^qK)Z$&k?1jYy6t|Gg10QI9K4W7V5c@16K9lN4JOh6*C$19{zr^m}N)l z?WWExxyQN3abm`RWZCUprD#Z%ra$O}0Jr((%pd)3!~P`-gbLA9%ybtEEm#Sz^gT$O zw4rNZYaxQCP#H$+SRl)yJ{ zIdRLVaP6uH;o1i?s~w0HA~IF^icy~!zFt~|&VN#ZE}!0BfCAzbcaQvX6^*K@G-93e zY}!sj&PGSXWim*q^;a4Vwa-`plZzzAeuhNO{-d&Ks2$s6){0 zUadetk~hpp3C_>Yf7V9gD6}IeGnb?>u1m$I1t7FgGFi&l%zUE^i=6?R%Et;~?TQ(| zB{6?AJTd2yF96#04n025NOvik?c`Ga37=eiH2FLQ3t!wLJjiJGl6%v-wKVeZ^(eNjp~u`AzT$)by_t0M z{eG0_lHC+9fg^_5eVdXN>`#))>@J%!TCt)JK>E~3SF6hS*6vUyep-by(ANN9Ek z-Gt&ukO-WNQN8Xo2C!G@;5Vw#h^d~A0g<;QR$rCl4P5ryZ(kg@RmXL%i|-~bQwm)L zC#TRon*PH6G@4()E$vpOPGvi1+1Op5mSu3x7(<|XL6&vFXjx3-C>BKzk2S=5&>iy} z87Rl1EU&X>HFKvy;Foi^p|dMjo!v+%9)gByRR@y!SPf6>*6K7j%`3)Y$(7J{BOJYt zbSb5RY?vbNwVYUCYW~viLAzhhVniZ8a_Vj!o9)NhcA9&3L?w!h8*$-StYEXJ_msHS zBQek2ce?^e@2ydiHe2Ysa8Bz^f0ieHs7o%mc0K!lT(1a3U}5MBVi*>jF{uhECf6a= z4gmgVs!0ja@$j$~h)_SloFwx% zh)NTR-*P%=6gv@@xfAPX)_D2GaP*8=E$xyBeH=APh~92T?VY`XA`N~nbFgK}=%X%^ zsdJ{v7$_~Xuw{P$G_a^Yk8MorQa6NfQUn3&r z6ozSPjf1^j6*iv-`^GoPYWphlW&t8VghP466f7I`U61fXt4D^dBf3YM-ln5i`v5a} z^prhuG&Up&Zh%aHN$cL*);u;ml4_0lv0h-ob;%khdoZ_~u_yO3avXnxlOxJO1Ha4^ z!IHqj=vD*O!US$f$QfO$uhJx3C$K>N5t@4}Dv#&)RYgsW_!5jW-zXu-GvE_5__nBS zP=~!M(B8i>d;=w@^3^@rD`DT1iuP-hQAYKdfxNBXB;>WIX9r2#?`tA%a31&_Vo!=F z%pnJn4wS7+A6KkwHIbVF7@};1t8j@iQX>8=q8M~k!7TV22O`2RZtEhx+E8CLass0j zT0+-4B;PkeOtM%B8q#-nkpX^IN#ty1bL|>J)g(f+{ZTa#>XFxBj`4t^TS%NBtV~JZ0j-^vognb^VwbuWU6_Ex-~C+N)$*_=)aeKFivh>kwy z5?u4X!2DPDt~gIv+c$W@TBQSPlos&5c0)Tke{Pv8uY25jhE zA|7%9lpR3Gs}qa^AJ}TWdXp=mR2h0zAOxbL`7d@SA0J=5UNs0mnxi|ncC$%%sP$W( zRkkkGB(gg7h#zrE>XjO>OHTB))G6bfP-mA^otaOCY8z{;o#DP>h@t+86?x3BBV8p6 zymIm#irnzTGOX+^QcaM!O*h@dNp#2>DIvRvCv^(^43T(W5RX#zRa<(*Wx+4;yOJi< zC>aT_B7fxv1>P+@Kj1u*o*wrDHeqh`z&^;YRC`{)7j&M~9$z<_I_iHMjFuUBXGCYq zlNT6=MOXf%tGd5-fPPpWexiufR&l#JN~!^Rk17kM`g0U&Nf(~d=M08kR(XS^~LQrMox=14F!ztTwO zms7pMT;f;DkWTn_^fY>ld&K*wo-Eo7n((>^0+JH}eHU{QB9n^%Rmu{aaQDfchKImx-Ee zm1U(Bqc53c2q{$u&%8{83%1hlT*rIH=D9k0U-Nbb(wd2H6ug9gCOf7ezNC<3>{9dd z%-T8H!i%OH2&;m>vEqmY9s9yEE6EIQpb2Z5+hrZwYqE`AN7zs<_Gw5 zDCr14JbD%(p7`dvkdCKo5FbU5kr2)H=V+j_5qFkZMn6IkJEK3(JNOILzIfLvOs6Gq zYoj!d^6nhd`Q>$zMd0}{*y}l~B>vnj@@kOno$<;A8tP2{J>cN8XTy7vYnygse?H(o*{w2Z5;UkKnTehauTIW)Ag-mf&we!hcyb zp+0QBy}10j#{G#=_`O{Yp+jLwKQDR@(HXNTv`5R!C|MwFAh}NF1L>bs!xfAz&<^!k zT6XZiO3S1{`2RE4@Chg9fnfc_lgA4x@+UEaB7mi)BqK3{WUz4*sB@7Y_KX9HmO_Qwp+KNgY2Bu$r&ZU zk?{1sR~LKX4+3$scld64hBq!O;35tGR(cj4rMaBa&>GPU$7?bl4z_w(V?h*R0yKG> z2b2ij#NNi;*jmrZ#>m+6|KR?}lkr$Uk(1SVLBAz;v4PToSDpM!zG4GS{PMdMET=nJ znhTT^5%T|W0Fz^uKp{Ty`(U52(f^OHw+@Oc=-Pd83$DQ(f(LhZcXxMp-M9vK50XG| zcMI+sTn8uE00D+T;PSpz-@WIYd+Yu)Ra4V@@2Z~Oy}Elnzh|{BHaZN6p(5-Ft5R~% zN+#2tS=kj2Fp$1?H4II zZkz*1Ft{Hi+?*jld1j`n8vYw=N20#Vzf^rTto~UkAZ;y=^^c8VU*?0-4V$fZRD`K* z;gKYT(Lbj8YdTk#l-2B}GCIz%kM60TxJKXww1GRZT|1TWpN0MJ$dh0K^Q0~wd_M7Xkv8y|DP^G&t~L;#!q`i2J#z4dAwGY zd0Cp3c=f$C8Q?$sOLfGx7+4>NKd_UDIaMC*?e^E%9bAZV+Z%YA6|b~~f{>o*_kTV6 z3aOA!#gGBC{`AL)qQ;@1lKiMp`_P*qrL!s}UwwI7OVF&AEMA_G==1zN>zdtHi&v?* z)={bV?>_NZJJPpJ9_!4yL^(x!+sVY`n;_SVaHY!{d*f-}3FZY>Sut=B@FV3yQp@%y z68zx0;79+f{SSSAFFroi&{v&r-bJXY{%1f1^fTi9FA`3r|5J{=unsNO-Xj1l4)gw2 zGW_oy@}J+bm4u;Dp=tj|Jc^hdDh!Pan4HtK8GaRl5ocsf{=ChFk|jX(@xYJ%p2xA? z)>o-V_~@8ePR=Rg)5z+r;W;rI!JV#Y$17EWJ>22PgmiH~iVoB+Ai>Ak zw*T;B-X!kgstG~1V(m6wChfSCUE{iu^p?+Lrc=?1(I#{R4WTn}x%%-_Y*$qiYZHlw z>NgEu2i&t&-c;?|$_OG>?)jvcI_J_VXEmnkCe8Bd%aSG+4wBm)X8v!CN59;)eFRFa z1hOY*<>1TgMi?~(;mM7kP^4{Yft|gSS7t(_ABGvc1w@DEam>DH_h~otO(zqbe_!Ip zJ1-D0((coX?0mI&#ONdy+br?V(OJs4*W_3BObV-j2>;F5h!qXbE(9IvQ7_dBkk=yex zullaw4M>UTyWX5NsdHFv_D-I0=cxzj@vrSTr`slYH}}}8dsmnn05S_T?o(c!llU#+ zGEewPAiV^ZzZj6yn45Stx0*7RpVT{ph%Em?dOVzRv|xt#blhO*-3dgZx^L`*5URmG z_>X%gTQSc!P-MfB?|XqEYKRcoh@~Hi>fQ%GY*moGPy|*HTH3eI&g{y&ap&#(EWy}U z`m`CY+CS|63cCM;1u(zwu|`T)u!Nuua&28lkFZ7ZRh-U!VhKhVcHIm@{s{d>bLKlV z`xphOD&2*$`5-VZC?RS;{WFu{6BEd^jl8TRgZ0CXY59u|nE^c$+5$%Xjh zZpONSIoe*zr|S=|pDSIlAi_Um;$Nvx6$i)_fxo)pfaafm@zv0N$GhtR z`@L)0e`?@jXj8aX{ip?H^UQgnn_AH!MDR}`m&jSG=##;qLJylcox(p zyU;h-u|O1#)a+vI#eY)|mL^}#u-|Eq?*GyrN>E(?`xNq@)c_*Lf9bN%|1*bR15p}N zE}Ne*d!FBySyEzjP8Ia94D*Vr@|%(_G7Vq9X-ni_Yo|HXgal_}$omjc5abIAaz1N( z`{sFZ16qwBS-?;JPR4aR6we-NVz6E+dk(cGELdlFR@+sh*e1eocKXJDt0K8HT@FP{ zCfGoKQP3C(_v(F7t5x{h1WAyv42Vedm`61jlGi!mwRiO6K2~}v?$!OC{`X_-&tNws zlh#wAhXfNHlYgmXC1pj(ujT?lM1kd6u8kT=N=QCCHjyyP{wP|Pu21;JF|UB51XNGs zGE-twS>f$p;+a3KQ6YlOp zEUO{^LZbTloPiQ)vf(r?c>^R76Ge*O+0VlBI6&}o+k2?tt-Sl!?zYBfFUU~@`klu& zwxpZ9Ka%OLJ_WmSlHMFSjhpuPqYv8>NT$j+tfSA%f&VhrkBR^O^!Ye7Ccp0SI{WmS z{68VeCt!0E;XNu3!TmRTr31zD{~klxhWzg<9@H#oE+8sH`5iaJ9lN~$Zr^S%vUyzg zl*6aooFv+IlrNS7^G!{;Ju#eCri#k(pzzn`e{jQ&`v+Y28?;%i%)Qu8`;sJlZU;rw z1d)-IDPsEr(3I##e*dKnMRZKAUyt8*dU&se15GJ4e`x*QsAcgiGxC29c$%3sJgPnC z-K_*Ncujh51QgHU4sjLJ+27-lQ&)nI@pa$PdeMw(5B|e4_QZl2hZ7zU0<@ zRjWoWPw*-%Y^Kr!sz)V6LBe=x4QgU+t9kvRmQMOOQCX`U=66Y(s&fm@*XsOA&_;{N z;u{balOjZAl)uRv78b+~Xvx+L&~ zEcqY}4J|p~_mm$W!h;rlrFLdLX zyIR_npx&v>8|yaq=ZS=cl*Po6^d`W?qgW)O!?1SGF#Zhq6j9H;p3kb6RJ$}gxc_Ub z^r~n!7HeD5V>1cUm`T3@PBEOi+?*^dTYr6|@*GoSwz+oGFuxud-Z6pTpcFQn17Gqs zzm9Gr&WYZIt4ERdx~^rk5&5{!fqHezMiRkq1EF2JzP-X_>aLjv(1!aLr9hJA@~NLM zsYz8!!Ecj72SMiw7u^E7dO?xZwWhvW&Aup2zGds|LBycx2ruPNe9Nmkd#P9Z|LUF$ zyL_xF8B@)PnD`>Jg+f*L#DlPl2Z?$LM6!#oe41!iYmfA4BR`%&$BS9_Yih4Hn?gp z8TZa|FJS;)o=xF3dT)-(1YsxT#Wej-b=n*E&*ahwAZA)V!S)m zdGEc)z?Tnh=#Y|fQS2AT;p%~6g{NTFGgG-&(+5Ay{gW^ZxHmj^Xb7TxKRNBcxWl*f zJ^BUz_<{ZpMYB0f|g`lo93>1H_eGOf=GeI& ziF`o>n1_8vgP`^atl6X4Q=5(2|M322@`&qi?}qumX~X|-Ldi_we<76GB%r-up*7pR zrJ=Ln;9^&=xwA18-uI*;P-y@AwDVuM>HSh%0QvtR>`gwc7eIhlcMfIPqO^x)}Q+N`ppC^pe2WYOu+H->^)np zF^4ON1h{ND`(Tr+FM@W;yj14Dmuz9*3>_;)&u~S$w1?$PUFcFM_B8p zEHMt3mZy`_aF|P6S#iZxd;r%$I4;^?L`#6C`>NZJexfse-I(}Hj!q&hM8fE?9~=Clc^CnkbBfEfav%7IM@co-|GLU5bgd4?Ci zZ8%pgTXF4tWNZy&)tMGyB^OIo2{NtiAEN)`<{gtOcE98i$_Nwj3^*nf$PC3`6kE3Z zHfz}~&O?PybNF0E|4Rv)bY%bb*J>;FU`6`*{9g_ui_chQnnZZfv9&JkLs< z1I&r6oZVZz*tJ;&BEURHHApKjo@P3uZpcd;7q8kI&z_0#xB1^_`v?+JmayTx7IlaB z@UBskL(k7-aw-5y2wfGwwQ|<$dTeR+S)B>9l1m;ED&9wzZ^HV1rd69ipf!lIY!H7& z-)1{cC4B12F=$R6!lpBo@b%0-Z`B?}2X%GSr>T_bEDZ(oBLJE;gF#$e*vX6OQgDOF zId?3TGZ5*bmFX$d>_ODL*RBJEQho)WLhD(UZAIm+OP96YU>AScXDH`6O$^hL&?PQi zXxR7|yT|A>udTNw&rPI$!ff(A$FhY{oXdu*?nV&jP_awX>ZA0xiOM-2LA$!DNR{A? z44jYfmhuQhgMg1~1NI*=qvRp-GX7tfiS)ndsEb0qP0Cs3eg!u=w7^+hDV3oYiw)`< zXu_N`RnilA^F>h4aJSxM6kRRBn1S?awbWd!jD%N)EcA$Uk}0@U@-yYfPleX=1(be+ z(f@W;j_bpYY|JaMN+2#1BGiOpCnBS5q3ILFj+hxGO#)KPPBg*MmiERlv#5dcnF9eo zR0GQ@>qs8;fAG{<1|D=;oZEeoA%c}J-i%=SmSeqfMxl-$-*#$Uy;{s3Vxez|OJa!s z>t0W>!74G;t1oLL&6;8DI*wy=d`+NvYXi>@<=k1mVa-*_;zzkC)Gm>R4Bx4$Y6m&3 zS+!0FaTCB!l!$1at=*-%nBO+pDPWG2$iUZ{Ke!-qyWdxM3@gVh2Pe;hZG*(k zdsHTc1|4Y}MqRXLGg;*Zd3uMDK_i2qJK55kEHU7tO9MrbpZ#9D9C(!GQ7v^?!4NID zR<)@@uXd37#|EjIS7GNf(^onZqs8H4ea7k&0J1Lj)_*|yCm^+X?~K$M|CSo+XRA&Fo^n2 zEC|3z!G`+`zaZzGMEGJzE|8ci#q{7~1|-=G<+aUcudQ z@Ak$rw`mR!ZxPq3W5jfC1kbyLbth5yw+((jQXiXt}}R9Z2l zjWpSXUEs{q2UEA5MkKa`TO7q<>gEtSoWyoqLW#LaVtLQqnq@R+D0|3%rfHF6#0=@s zUyYRKd|;9N%1R<=G{(2&07Yzwa4LT4mbx-!-@+HlnfgoJtMR#I_+Lei?Uah9bv*-c zjD7ZyG@5ARCYIARxUuhG9EYQmSX+h2nKg;!M8Dj+@lm{$Sj1*NW+SUJAI7#mz3Ipx zs^eE;mKI;=l4HAyL2c}@e5Fs6S5ftBSY1w@m!Ls&v4Tu~-Y-82yYhj;6T9s~1jQO| zv}B#GWTVHGPWtek!yix8G`tm?MdLF-1D_M`s_zw*1d7fD zJQ^5D&KxFC9V@w4$V>b)mwXbtjSIduB1?=ij-V>)dUO1CMd8};&$*wO424aV*^UVi zS50U!lBu+0s@6WIK$NsZsC$S71XQBb(Dui_VyzOpvkl=VbX5P$BGy$$`!18_E|l&y zjaYVNY&oMWiSpnSAkXz%X3h5UuBpXZ;tC4g31P|NinXmfbRk!Rhw|JBx#j(M%;%SZ zNljf?C~m)jxT(6mBSpdD&p#cw-R*>R2)5o?dIl6~tU61(1Mm$vOs9F;z;tA}qp@xm zqmeP5@wtLR*NX4A>cwU4_13zKjE2@)LyXA{)IieAH7bZ^d6KfL#yKQ(s#`l>HC%Rj z;b;D7GR0LCk?^8{fbGxHvn6~8!RlXIHa)oeh7m=ZnVfd7ozkdb{1Kz`QRZ+4a3D#? z6i?+Kx?0!g%Gze}Bb|dcVD+oFF;Pq3(AO4aLR5p|1&WrlH?Gql-mDbV-#IL(+dT7V z#SOeKGMCIZeQ1Qr^8LX?VewsmU>w@gEQ!reFJKpU=<%ebQ(B!o*a#dg#m7$((dyd% zAOm4q7IMYy$l%oAQx_kH_{AR?ZGR-34d@jO?`3>*&k>{yS^7Y6fSJ3doAN})_u)Ly z2q_P4^=xYE2;*<--@_9HCG`m{{BH+;>Z@7Xng#Ltv<_4}SR|?<;IEC8n3yz@Ku#`d`* zWScz8#kl&kt1m1vfPL@i1(f$A6R$C(h`;0>+1=i-NK~~R4TXo*XvP_t^=?#-w$o^z z<3lY>&Z>~%B1ENTc&cnjsyZjT^lJ^8UL{*z^v+ov`D+oDjV`MeX2?sAiK@PjYIxQP zR!UWYVosmpaCYV4i(_{#96vRU`4(2Q+qJx6CTP3%a2|&92^wBB zy{FE=MR$60>o#wsgTJLvQBR)_^~R??$rX(=lNpP%O>k=s%h-}3Iau`}C1XC(Y=|cuj;hI)Dx<{<|4Z$)2+^HC$J`e>+cV zd4aj`VgahY@RUSXF3b=`v4^wfbfD3g{{C!2PT;m-b-H*}FDBld2m>_c?ipO-cRFG8 zn|I&h*Cg!hj$#3p?}+93ZY4`AWX=S4uKjr7VG=@;lVqZ+v$%@zYFBb%zB(4jeVVXm z3WC$NYCv*!)!oJKFMEZEN0>W>ay5OYU>n#SC+V8m%RbA6Nb_$bI<`LM#_Z&2bsRMV zVl6rj+1{r}3(QKjLkp)wr$c(M?$bjWNR2;PvDZ8uf!(h;$#Tvc8v-E;j2Gl1L0U~^ z=OZ?>YL4FAxOU6ShZ~i`3GtnZT^hU{I%bpRn*gOqjhv{~^mdvV-2sP?c*0}H)OX9t zB}(-u%`w&(Qb+Q7Pp!w}(pQV?4I*x} z-D3GDN8{xuZ);p;mwkCb^#zl|+3sUv?X$kG%Yi#@9jYaN?`9d^1$%jg-H$;jk7{FCnWE9ZiX}8o|x?%wk2BVYOpbb zk*CD(y4R)nJC7BAS<7PJx>K=$5m1|cOg}~x$y&Bkopzws|2>wyXl~p{?ZM}F8BPB8 zcW{6Q@|1=C<*{q6D8w>4#f&U##zT*F%F-lj4n>brQ;&D0@ZL=S)30>@jhSQ!CWh$p z(roFalVYXhNMT#NNe%D$(BGzz8c|{>6vQTRr_aQL(M{$TG(H@HQH7IQJ^&H%tV~0y z6E5-0=x1`KaMyR0lFqb(-j8j4!tT=Tmz?ZCzt)PvH)w$%#y{+$OG78HFW7sOq0>VI zP%kKZn;g$7a%sW34S$67!NFmFwZ4nsRF*XjvOz@)2|tMVjk*TH=7I(}sphcWhK9PW z+wb~eOk^(vi^0TL7<0#Xp>GHf8;f0)!QFU22_Dnb&Dmtwoy#*fyxoYyX{Qh#u2=l= zY^hsoDt|qiU0N#@p1rZAr+V?FUFhP&JzMBEST}f3HD-U#3R24HS7@|LH zxqCm&E@XKmpbX+L^f6=tu~FS#M()N#@<{q{!2M9W*(}}nA%oWvL7!s)WJusZJ+(;2 zP%_jj@180aU~%^b9h3ns#(CPM+{qrofSQFN|1+05#`#(H7?GMReTvCkh-?7IBXWWt zXW~a^kVwk97%Mg~F(T!GeD)&?JcWfZeN^V@p0(*e4O&R=48`HU4Ohh$kv?3FA9a%9 z$eFSfJBIE|{CHv!+->_`clPM_B6vB1@Cbkb z%%ELdPRI$6(E3?Z@J|3K*6Mj3j^vq`{KB6}!08zN=UM#0%f46^8{1}DCx&Y4sWp$b zaC`6{lD4$vM(vuS!l{=FAtn^0285OIa3x#in%pQeL_#NS!=XX2y*U=XHM>m{pJD@z zVx!KQrK3Lai^ed_inl2EP^FYP2(Vbo5a$jnQ@-jQ1> zkr))LGe_y6i2Wpxy}R5I}w--EZxDk=Rp3*iue?dW|jlMLXtWPCCC67c*|15(_h7Dq0@I?k~ zA_Ih=cIfc}H z*jK#rUKvPc>`CC0hiiAH#Jdr$E9J}fHoWbQ>i9O*6CdRxb>GAka1Cb^7l?i{!&3+I zBFk|riuFo7+#dKuYBEhm@j&xp8uxk-d;M^09IA>~^QYlP(qx)v4{|~I=*t08y`+4s zz4mwfq_{YDCwDv%tG z>3M-2NQV;rgd!RV9LAWuVx=sLiBP3=$0l}5-?B@*O3*xF-)2)i!LgspTYwEM4kV?P zHmUq`l=i!+o*k>6@9?@;&XVaeukz+FKh$a_Ratg*zm zozNetrxuGOY^{Zl*fSEWtX2IHMiUOwbB1n*PC1A2 zd{3#SB)K~5iGan59Zeq(9MCG2N#@)xToC@K%Irr>Rrnx8(6z(`%U`OJwE7jh5sB)t_6Xj;W1iHQ~ zH2su^?x`d@#N#n2kaV%xpLg}`Vntzx|KMLJQas)nB z_zCXIM+M>UJ%v6}78#FcL)mn2BELmfULaA5N(Wg|_9KE}rmvsJT`pGN0}@3@c}hQ2 z&H-R84w(o()GLbyYd((?TN8mQaQ@LX(yKrW<$!kVSD(dQ(#ZY~H@;Cq1dEeVe%*o( z6#Ynr@{oGW6NZ!!iO7V^(!Nl{PeGVwHPV64lR+V-`h5-cp9vLA{oS^unlLDz{j) zDE%02EcnP$AWJ!s8t_<{QS=C;?^Y{B76QZ%zES19B|^}m0C+$CSxwP=00xXQF!XmK zC@w-2p$58WTa{S~=hlhJC}wRbv3L>91%VmF*MYH@nG+d5*@kt?NEH;Z1{r+?dI%!(WV{I)o0db)RER4Hb4?aTgfj274mm=^RR^|z6#)QzY zWls;P8%_}~tTiGk%?kyUDBKM;o7PYX86xCQn1t;T;-n_OCXH=+(Q)jdQK^r}K8r~R z?H*L~_M^QXHPGqqKRIqG`wBe1ABp)McVdyK2DAy_q2J3q+3C zg8)v5EpB-FEOQpQt9ocE-m^Q^55Eyk%(#I%ht&A80=3WZ<_1<_EyYmMx2sTA5c zNA8dKv>WH=N-2us$GI0n(nAi8%ArBcoL$mI{zrrbNVZ&lkRX$MsZ4A)`^2HdT#1%G zaT6=^W)brryJ?h0T~IHS>6b7%5cSYu*ccMItdLSzyOG=eerB{^)u1j^A1;pnU_Z^r zY%Wn(wtsB@$PQBLK^D%#;(M7mikhgIVKN@KUAf>gzp5>RCc(o&=J~!T8i|kBLSuEQ-|S*Fa;` z`?cs>;H>cD)_*=`8QXb!zJ4`(2#*S~u>{xnCwfLy@Uj;8P8OIQ0Mj_fa~vp>-1G3! zio^-Yu{--1V}b%*77K2lz9HUQGYI1^Q2+GPt!ie{zT(_6;NN(azd9zr4D?>LmcVqQD9n#`6~m=bmjLY>a4)nNU#E+5>}X-J-Y&5Q6s6bOykGG!rj`gF9}A6L3b-dHRAq1Fv5UT8a;x z1{3zSLi2n%Q=HiTxbj5s_ltWx1~@;KSLW}z|mF`HC>R=3fV zXK8p^Te+XV^d%|I;J1(vHMJNhKigABes6P@5-;uEwEeRxgA&v-@=GUkp4u2>XQ$qc z9*AHki==#7Ukk9vv3#{?EaEU73iyowdwyzjgE44StX2i<^la5>y9RaQ@1iX#M}!z| zhR&i{txQSxCbha!nzd{mrR?Y(fytuwFGFP8x|MrR$Rr3$7iaeERHL_cQ6OY&ax7)kvVY4t1YZVAg; z!uStC3kw@SBnezNOU;l4lYh-T&JE3%k7X?5mQubppB2WS0h-nxP1n<_Iu6s&`zyP( zzk@+{gdxrvv-Tc3tifI}*ee-{%Sp2f21uAw;WlFs8jT*)jW} z+m=drK@;Nam_({O7RLr#LKb>EZGQtg91sFSxN|i?$)(OTMQxS%wS;+nSv@*B{dQD> zPY{2yb&|wDa-zIQ?g*WtSUpu#U{Dm7l(VVq0O_(rvdDI0&?886$X02VsFlQWrM#l_ zl4}{-S&Pi{K}q8q52vYBZkRT!EIy@qjSpjJQB^^-zM!`bjW)RjP1IYpTowNxxo~<% z42Cpd5HYS?!2WKEjHid=s2?@#bEk*HtWcgcVS$znktW^R+Om3)FdQG##)4Xc7cYxr zdlM`@zN$5Wp2&gRWsA^5@}2Lf;6I(`X}^C7f7~jWems{k09^LJQO9tQg$o=^uVnFX zuN-813B?JyjPna*>z#w~TCxSHLyu(bBb<%9b~=6yb8dxQeO?+=Nt|pHgF*hms8qlvTm}hOx zl@+d;)Rw@#nWBc*8W}gn*OXZG^&Vv%!8w+h`26>&5t$RslO^d>r~gs%QuO34X^9pU z(8bJ`jZ5N+KT!Uax*wjiwJ$zerr2E~+3K}Vbvmu!oKuA(K|YO(Gn`R~e4-KArED=U zs~1`DcH$JJ@S?~We`xHhiL8piN>166b0*7z)^{4^kqC>pcyRu?6^X+GtZatAhUHBt zhhUyUiQ!GGM^ifQ(2XCJguEPoIRy0>_~kC@mSorXN02^FYs+@J-FAVkfa`+$l(WMl zuSo?K3$=EO%ubu@TbW#K=(&o!kL7tN=GS=g7`Sh=J^f-EdY4tEKGE8D#Z{RoX!bfk z)_gts=J=GWazDYtNlulv;OXRb!*iD22RHD z-=w#AyF#(=)8;a+|19?4bK7iN}w(WiRncg`w!*hXW2zpk}fE%iTLfx~HB zThB;cJf=8T^N`@3$4?wf%a||FsG96)v%5UonnpXW6{Ay@DukILOVj?84>)P|YU}xI z(t29!n6IN&FfaVwgw3XEnc**{@%+-cP1uY>q|Yl&x?xU;wiYgC7GR-Lu0fY5!;tXs z5$xks1zD4Sf*mMkiW7u$gIeH2KuDm@Na*hfQly&w;Oo-2WfYu+ZBn%PwV5Y9tV?F!3v?u#`P<8^Nucwh7(0bx^6lGV*8F0) z$#_y_Cn?S51q<90!UvaJPr=n@JgLSnS+?7ZG%Oa@L>OFs9kN2vrt1#dhZd^G{iWDx&;aALC*UcYGxcbs$qUO2x1-7#W!QEK&h>#W4D zRPTkO%#FPZ*4o_O$&!oS@KHsUpizPJCLU;7)_NZY`euV)mOy~T&20^ud2jmK9oO2P z72QcTrsrZ4k&74l%etYWWod#>mSX{|&xf`eIX8DITz8TW)#*PU?D9=q^uxV@xQwuswWBQbAbhOZ`LdPpg$x%zOCIRX%p?h$E66uEc=<;%IPsr2IDcivYaTHE z#SqzI-uB?uj|Ngr)(Ifda2G=oP0%X{FQ7=3e)6zWCua&o$d~gLY(rydO|-P9`&si* zbjJ~9hCWv}7@jGJ!V__^dzsI7v-TkY0u_%ycJ5y~kYrsOgBcQD`w!nT0xM#*_iC}8i%wH1$7V(TJg!8gYGTjA`Nm3v?i7I4uxeM`uzc(#Zle?NPKPfvJA zXq=){QcjPOXPPxNgc9o>X1-lDBhX>9;QGLu?)h-V*(NtO;m)=4y{f8eAOk9daNy@I z9Orw5!6gH9=h7P2NFrHlj;H3jP6=g!+yc*Tue`~tX#-ndzNorF=fe?fHTd9BojWx- z`F9)IU|^Kz1lQ#X1MT;16LWnO@0C}Zwr969rmdWvPd1NiPZ$y;LZRfFiWkn0_o}nH zd0kP4{oNxoELXgmcAxMrSN!`kZsGNo|F2A_=c#wXGezJP}q5 z5pVyTn3*gO*8F(Fl;MhoC-vb4!;jWA8l z2!UMAJ>xj6A(>1wOIKWP!^?lET)l7D6c&Tf+y>BssuNrh0eEm+q;DrAWUqBVe$W-@ zhExpb!tCz3ToRsZO1&;?_~4DNB4u~^!|$xB+eV&m3&lQG-;f+bALE-O+kTNf9>X>{ zId0z%hAlck>OVRz-VdfOD)wXE&1wkn;S!AIZm?W;zwqNpFC0*@qHok+skG(P-SCS` zcDrG(<4UOTAEw6W+FoK@Bvs&bPyP&ydP_arfHhR}Okq8m<*q0_nqvCZbBuxeVTiCX6dW-OXfBp)O{T#GyC7Kk4`nDt_hE0u@L**()vhexM>YkpS~4 zDTW+8fAQ_<2bF&wmA?Q;)DMCPkOF-yD%?3c3U5$(80Ij6!!8xG-=&<@23b^bfla19&eS;2wg7xWIhqKP1&LC=*B%0pAS!zR!%KUlDH|8Th4BDx7wn*MtsVUyV9U3#+oQ504C}HWtvAE{;t?$ z7KJ-Ru@K6%K8u7J#7@{ln!zwC6SN*2$fu}!dZC)wIk*r^zmmi_07*|5GBP4zTRY;h z9~*y&E!|WI4l{YNM1`2|5hJ^P+J6iO;2^e<2hu_C;IaWzybq4chE(Y>nMlHDYU7L8 z;!PTq)yTTIchUO*7k~=6z+PWgM(NK1Ct18wfe!{wm|mi2Zy8N%!P(ekM$@8jA>lfx zpg7tF*lKu)_aHaz3)~)k*sdl7V>mUW^5b)=Tu6=FYpR<%abQd)}ShEvL@t4L_dTB^c|aXxCmM#4ctj91pUGcCInCbe2}k#nQopaVo>g&>-_}f zvuttC5c!T_(wlp)bx6-3`I4dAC~t6027kFWm3h&k;)u=Y*5og872r&c;f;ULt4Jl5kGKG0H!hMyY+zy6cTp~E+ zATa%)+%3Kme`rKi>~W(j)`#kW1*%}_iIG?torAuHf4>_WRnOeubEq!k3#0U#L*t#Z z)axY2GhT`+=IiW8;K4s_p?(^n#hDXLmw`Jp0A#@Hz;`GsH1ZG5I^yrd;a*4+SgrAf znQG1_U$`IPoiR6(KAdskr0-8UK}mhDUjuBtYnWX{XVT?fi^hXpUJ+tV_kR3lOQF9< z^dA^{LzpmKJf=;1#6G*vLrDE&GU#n0f(X$aaK$b%2l0l9;zhmHq!cp^!ox<6euK3F zJi_FnaXt7!o;^JuAgcp{$h+4^$%m)fu1=pNWewcx*6SpR#`yR1;4{QOr;| zC2J!_hgZM~C=kv)zFu^pa?h6cuvb4qD0QLujq%k5=SO;s9;{wCbc;C>eX~#b82-vn z3+7pY+@ILY6B;$|xYsu)Lc>{|hP!q63ke@A!wH?ngmniW_}5Wyrjpe#GFnd2BTR;vn7UQ#t?W6;&Xf(+wdU07^+S!8!!H&@Y6vScA!3 zkmdp4dk_<2w_oMy(=wHJ996r{LLeS!o3#%S;wiw!^nx(h?|qXT`bGdTA1v;C{}WB2 zL|J?uzF3VlQ{5L(waYGat2Q2JN4<4c)_8p!zi|;kXMZ8Mefb<#qYjMgQ}N4EwquVj zLy=OwDJY6Ly|ARRV~CQ+y(m^`M8lfyfe4@h=^yqT)5(-QqgAPI2tw&#W3uMvdIm8h z(QA-v#G4?PKl0H4@^-2b3C_oVMf^q=W%_;Gl;3De5BHWO^+k)apZ=v2(HGhNRaK#s z`Y=_Qi1H3E^4ag{6Y%BGv?cpX%KKKm0DL|)byhOss1GQ{I0*iGGxrmRZ*yyo&y z&2h zoTp29O&0{!nwG$-pQ?!jfc9zi8iK<_DTRK`RDT9W{)Ij#Bh>kn35*GX2NpO)*G4N~ zG>x~#{PKu>+wDGVDM4@($l*w|Aa}S=(vjqDo{3%u{Keog7fyY2=#V_O!m-1c{WESE z7jnv%uQC1ckLG?lUs4xWyitOOKK|5g|8$te-gMc{^rADEFZ?3XgE4kTJh&;`F`{&b z<+lU0v$s|#g8DzbWLun=Vs-9PVN`6((Ddujyw&}ANoK!gW(9v3ta!F=Qm5(vW0=~7 zryjs<;YHk?zCCg!lNrF)o$M?-yfa58Hhg6!xE=usiWQzF`*~7!!TzgNwV}9)eqGav zATaOUpKe>+{s8aSG65(loP@jW9*6pCl+mK06W9liQG^ets-kOrl1+~FMV zEn4dPYGs!$C~EWNUnL2|7v-%k@yw+e24Xmvzje&UC<_HtfOm0re)F&y(81~^;Rw`| z(x+=8?K**=SWFskh@$?py3-h^JOILWee;j3Y27aUN^Vf2gbZkMC0KDMIPo-y*#gf= zqC{6mo53bgC*e0u?W|gm%t+NcFx*b{%>}L?AVo?3uK9^_1Pjsgu;x;vmmtIBYK@;G z)jxu34;h4#V-tND4mqiw@+A5g(p;Gi1#zrgd#l0kZbFVdtDvVxxOKx_fGOyw)E>+^ z?{|j7jJSO^KNS8%aK8{;5lT?OnqRF%$fq<@ro#sL0ZO)z!f+i%QThpX5mgW&$g$_e ze2?1xQG3I*63m2r-FB7o9aglm1<(VL7t)Zi#5sX){V9@RI(2DwHOAZVX0AWIK#TKP z_vF?6{V#VK3iZr7P4Eu>2uox)QbLoV!~gH}&U?CmDVt&&8s)uW2{csuTMYCB%)70` z|3SF_Pb=K_?8E=UxQit~BLO=XR(Z!OTlrJ&1ygmsJFT8`bUqd*7J`7v{+eO{k!9P# zc5}Dp_3V|AkFzZNpmKFMT(}17ei(rm1=-hfTuLnpvA8{WIL4}B91X@WxE?T+G}29R z?)uI2@Mx8T_5R(A@9TAcf#)k{AAwD`fPg^VPC+U4`W7e7`puS?58$vrs>dqG5%4d5 z1*N(Cc2f*`7{dI3ZIks$5$C%F_adOyE9<`2Uh5QPZPOpYH89#F5{=fP<3$QqL z#qICnTHM`>Ln-cF9E!HMySpwFhvJ2W0;NTYLvf0`ySo(%MT!*HZ`<>~_a5M!FFXqm zPkwJQ$tIc1OeSw*EVY#+`v7&^U=E*BJOg-=nteblfIC5An0o+)Uc;)~GB8brvww(4 zCh`kH1nskUT+{LB>()T{?%F=r+4YXRDJ!!SgQpQ7J=H=TPQ;LG#>niv>4GiHyNXO@ zwKO~QSIp?oSNNLL6;PhjShC}anab>##D6oCU?tcpkJNS7JBD}ai;$Qv#Wo_WUd?J9hID=pnK#C`+&2xUOIri#?*+H5a zX9=Jns^pm4vo$RmgddJ)Zi*(f*BYH&v6Z?^Kjb-_ohpLZ!xV&!(EQZn_m$>P{v(3bR`So^_Gq;rFqr$$4<+9756pSLu=)qQTMB7 zeWrVH$EKo&b+zGF-5D_uE~gltf+)kkGG`VTa*A$?IRCRoooMp%B@5$jz3$ba`W_mn zoW#%jim)dNIe@f!86&TRw3VWo{bOumWqW^8;g!%)@p^w#ph zOy4xylX;>(U6wUPE$Q8cfRwx(!(y8lVICf&Gj{nZhGQ}U&hqM-8>b1qrsxX3jM?Z7eRb~Q z^MeQ%y16JL^cb1BR~m21@PFA#n|OqwyqE*j@5KrZU2!d2E71uGb}$*!sTQ0dRa?4H zl=$kVSg+IsG8FdYnWPbgP!>|NY90-dgzedm>^-x!6u`J}vH}W|dg%1jlW}Q)c5h73 zvG~3(?Q78Ta_6SV$D8bC4#FX=POS0NZzVI#^x!ULdePCnM4cQVO#60=9>zL#X!aI4 z(M?9F7Ih$6#GQ(@cdec7=Pr7h-GyjEg3SRtmihYOPhH3PN%|cfB>qvCq^K{ril^~z zb2lq3sbwZfixv#$t!nf+6Yuq+K=Xpg^_{UjMx;dX_~s{Y(yZnSsTJLI$Gh7oTFa7C zp)uL%uG|$n9R$a5XyG|WV1=<~Hrn;3Xe;ZYyCu~D+3C(T*}P%z5?`h6?FrIaZq9m| zw?S#jnvVC?zwRbUtcXz_@*}IU73dxoO4{-Zqj`fl)Us6D>JU1clE{i&4|?Z0`*t`P zTIQ`swQd)T?Ckq^w^rRib^EtCBy_sLkxWZ=fl(2YeP3K@dKVZ_9fNF-xGH(oz%;fK zIC03qRgx^Ql9xd}rf!wKXopptC0_>pqJC0PI8EZL&dpI8i^fsNnJg%DTMQHzKU>{p zl@36(>HOh=TZ1mVyg=L7AGu-`HoJ5HgPx-3mGpi zkig#wWpiT1=`sgj%tf8sq@}8k07;nlKA#}psnDz8q6CqnV1$XG@O?s_YW0d;L7V|7 zwMoqc*>kt!&LAnZa?L#9H=x^nv-k!6L&%d)U-9a+=csQ~gKnwDGR;AU1Wyvdz75z6 zN@KlG)5EJR;Ciq0j^fDm!^ZI91VT;B@ej{3k88q)seZa0h6%;{|B89L12($J?qGbHpCy_F3SDy`*Yb%mkwgqHo2C zfH7_cx^JK`NYF-qC`amvUYiGOpsSa{5o5k#Zkiaf63mpm|u#so=}mU)PXO< zOW}l1UZO!Q`LTcwmc@=qI;Js%kJL~109Wn-?x8erkL&56G^Sy?j z;Xo_-SqC?|YCxo6o&P!QTHW*vN~{9wSM*;RhP`r&s56b^2f6LX&S7*I%g6_0IOkx) zOWZYWBSRQJ{Ll83AH=RBh9_?TS5_^ToB{eZhtJn)jP|NQt{74V*etE4wNRRdC|!n7 zB|wk4spsh^qnJ|yks+Y)MCNPawKIw*?n%BrmE-kBWq|o$rW^BQx7Bklp)1(i(x{A9 zbLEwxuwVkAZm8=+{~MWr8fgpG=!{M}x`Seb^zK6vAEBoQ=?Kh`&h$@Yb89SE;b&N3 zikhhp8WC>PUQ1M3FqH@DcN`YYY@~lU@ud? zy49nm>08)Pk9513)dDZq67Mpx zOFsG^(U|-Byq6KI1`o=Ye2Da(6P>u*x0&s2Tv(g(P6RQVj<@KLY^|Y4tU9FN&UGuq zdd8E0jG$p7Te|nCG0w3w*yF@uHTB;S2z9}0(MDXHPxg+Ee!378wF=OPqUEBSUtVq= zP5+U;G$m>kHy08(feGJu#n_10qv<@H(M8vgHS?a8VJm>=M84 zytU_0fPB;KBtAcCtq)hlrF^}aGl^riEf=A+8A{-mrDo0g6LL6on) z{Vvwsap1_I2wky1B-muu;Mwa=X)9YB8WttEx}NM$z0v;K^5*Nk6fC;=Z+$P8KOB{i zS1G#Ny-v1+rk5ZaOzcDcH0VW(72VNZ&YaElltH!C!>%^Vtn5$5aAtWAAeS4 zTm1~}s#Hi4sx_J&%2=|{Jh*s7atrJhM^Mi}}`*Bjr5-SV8`CYqY?rwOE}l?^ZPab6awb*ly=h zdpN!MRx;>$xZAXt+X!=1ixY#bzbuM>T~HJ=Kz1B)g8s88i4(waznT4c^}p#o5E0TI zS^v|}Flt(ofx|#_VF1fN(>P#kN+1&`N(16urirt(Q6XVQ4%& zfp(~U^|U&1XGHtelvO$ZsbV>Qg}d9->3hu|fub)eBVJns;NG6VV?&9>ZK09Aq(=yN zje{P16be$t=_q6viKyOON+DV1*OS(Lb>#DFao=b2gY(Zt-@H&e8EVYUeG;l%P`4bK z4lxM(BA2j~~w7V1VR979|ZH+#0ht@Ld6Y1pt~PZSyNN{{2ZA? z8_#C6PM;S|Hx}d*eNe6G3#d0G0)3bru(TnNB%hjbs-s15%2*|I9p_m5+@&F5Uok3e zT$9H?I;q3?c{Ct)ldQYyvuzgb)%MW4r6NL9)r^^pQCq4kG(|BM#vcXB+-6?P(;+Y# zlBJYq+WDkS?_Hy$+Kb-RO{f|dCQ`TMkWqwlx^#+ha#kn(ME!(gt7PZ7kw;HI^X|Nm|Jvd7H`d!~5=ZiBhdyOu?Q6}3@fiD+6tJ_ba zpjG1(opvyA9vR?!FfNY%fKzI`dbgnHF0*<;|6^BGQPhNRn+InYB=Pb5cpYlv(H%YQ}!`)R44kz{B>2EX0|J~+ZvuvyA*Rkf{UlM65cL# zg4jnri;=a~Dj4;qpUQ5xm=?2H3>Dmv^&Jy5ioE*#TM>3UP!WjyBkj?2>DGcr-xBL1 z&Narl39!6n8T4KIoK)#nxMTtD`g%L`LbxtlNRm6>YbMxwFj30WzY<@N^kb6?+|`e5 ztsuuJ5-nwxz4TYv#FJVYpamKo`Z|2PWn0ch#HaJrTh1)c*u(s+Kbx==X2J!1 z<8eAjJzosdD-f7gs0BO?(d9DagWp2*&RS}p#$Y1M_3e(|WKK)DAZxTSw9p3_bDp zdRicr{~G&fgsqhDXc_d3-j3WdMsDbrvm6f|&E}h3A2B!Fqg1}(VVOC@UeA)oAZJl0 z(%5vRz9BI`)y=Qf*@8HhiC4&TnoaNDqjL_x5cR=~iW`?S_8aG_@~Awa)?{MUw9?ur zh8;w`mC(9*XCcAe9oLr}MpjdBWuRBn}Ut0k|btL6z_WjKG|K z?rT!l{Q@G&17mpN3zv3_E+S97Hx&A9m2RXziSYK9NyNS~ev>o?6+0|4I$qrE_u!&g1eZ=S)7$9?RP#El_$TM0_ggsMhM zr4C@8OK87#x(wj4W3abK_=Q1f!z^NO>iSlO39|g0IAET*NlpXmnn}35@ugu?wv$r- z0!KtANYixNx?uO!mYBhN*D^_B_c z8?>_@y^~+cIZunrk4ye(GjQC{aIUAQC%*owgBp!nK3Ja1D0`j`oJn9TD6?G_bMY1J zkIgX_FS&RaJOB^|j?0AD9E(2m$$`v6*%5gD>{bUc%DKt}Hp4*f8FJr0-T#I#enTuK zrbe#j`VQ7MQeqtcnI+(Ws$L_y5O+J$Abx01U7-k@M*r9o48s%_7)t&IlRlnulK3U1 zs1r590?F=>QK-)D?(P5-jO$!{L*0HV-_zN6oAe|a{&-v6q;v^4O5Pg1G(7&^$awHN z?@OEJ1_8R^i%G$H{_*;c7Aaj+Y*#gP1%;4MVC}I8bMw~mTbC_pxk7V(fr!7h!d==% ze}5^xo;BjcZmHZlm4hWSP+*9l6zyBwb5*OUAvDP%o065PysvhyN<$U9MR7moGde3+ z6U$K1by$~|OHcEn@*5UsGHHuHeOPpxf_U5~n?;YfQGJ7&gB_-$ZX8YP73Ov?w8HxA z_}0$#D&*9yGv%W_sCAve?93R|825A{?rXCY4|w(f;HRkTqnBt2*4+`tiW${3`g* zDn5u#eS?A@sARVh_0}&>RG9G`K(NM~J$eydRBX1p`!Pi`js9}XU!H2!Fh51bK|9vU zbddUcI^lcwX6u5*d@-(352?2doRvu+VLzs_F>4}(ysp$*b$O+K3?&-t7hzLNL^Tvm6%B(Zn<2>wT zZ*|c{lm9Y*x?*MN-9gOti+LeX$C}Ohz*bK5c~d}~EMcvQ6SpzyXF-UkY0gVCQtuEI zsiY8wArxPA5g#oL0X@f$JU^bPYF@Xd{t9GSuuW>>ZW#m(za#vyF%%&_lFD_n?{kL} zZR`;uYc5H`P)o`ifyj}v;NWs?SQFsDdx)2j2=HU^qp zCHxc#iuUxTm9g7H_2E(0xDF!dl5~2H&wMr}NVMsK<1L6SKytd!@ANDhOrh(S&hh5v zolw~3B}&uwR3{DTs`wDKekjmRyht>|IA>sWfP_czzw< z#9QD;^PCenJG*ho6f(XV;l{&5XU_^$5mhNxlL0niz7%!bKIx3N0lB8-5)cXNb3;)% zF|^SsR*^9j+Z0IJZh$nYUYB%HX}?%8yo$pq5qUocx}bKO#Rc*d*m0`DP0gWlf3rEP zU1J*Ir%~t$ed$JP95YhTL9f{2S$5es)rN()y(yO_c%6I9bkoCgp2ZV+%o&gUbTFfp zM?pB?OD2!`Rv`^n6D1OYr+3T1YuM>c8(a0XknK?uR)Is2mO-%jr%`haW*c`y3qS~r zI_ga=DEJe?0*_PW#cstXu3M?OEZbulN8BB6D}1hG+k&?dVQDqG5h+>9Ze)bnk%gO-FP7u)N#;Z7Bkl*+H9LvAeQn}VyMIqy_> zlOnK2wY!~MYI1h5d`t_{UtsqLz86P6M%Ly8Ju{e3Q9cOSIf5As^k^-lcF~j+HHJei z;4$C9lZ{wcP#MY>m{4XR31Z%A2|dfqZNSM?cEtFo3akYh}0-qLqslyX-kF>)DdO2TYU#Wc`HPrZ6H8k6_gt(?1=Aprmsh!fztL zkIBD!6^XZM0EVK8@swf#fAaq}Yij=438d>-CnmXouX2E0f~t1a{q04w;Kq@eZC)6M zGT6McD5ub%7Lu>)KK@yu zfRnlnm08JgXp;Md3p6Rql-)Y2&L-t%5=+bNbf$}%_9RQ^k0~OWQ{WdOmG!a8I1mR_ z+z@V61%Y~>=Vi)ROCKz?kwHtBG9TU*?kh6gSqLggLub zFE@P}o4l$^o<7A(lOGXD{5Z&$5JJ~?`m6KwB!7?D3La&2IrFq?jpNq!6Rb+P^+-`f zg`_@vH5B4#DS3iU9=9gzr&7VW$t6(mSH4V=^c}Y0xh=x$W8>>7)!6xH$9b`DvQGSE zSbIC4+$*yRjY)dvN$d19`uk5RHG}l9o!a9^Tt{(Tb>9W;jnv4t#g`M=<(Zb0XSq5c zyNgT=CHzRlW{|WHx42@NO10X`Nz#~KBHi24>L2Vr{-sD+ZLbhH7X`W*WL^dB&&w?{ z4zb+q`UiyxrzA(rz?|k%Z#?%c81^5EU)yEzrY*Ogb1?SF)XJwoXEcer&fD@+p|7Sh zfsd1FNm4MA59i3_0jufu$=u;i+JEM($;&But)!TY-kcbna)&L*k=hkryap!?twjxBmo% z`U}Fc_gz7Y>nt~4CC3gYD8WN;0-5Qi!y=xv3N6O3^Q(LYoqnyYP_ia}ME# zSil>_ca|klxc+fu>*@ByYbNT9x#3=gA8O4Hkv%Vd=J1#$CK!7g0pb0FUwX~YG|6jj zhrMv2BsJ-U{W8}&@&i=#_0aN01hutlfK7WFn?oraL~kFX**v4N8;ntBQcJ~4c3Yl@(5B87+qMt2*AxQzKQ zF|C$i9$dVI6>eU7RUUO9KQ=x)WvRYEwYm{}wX|vuqizprgN=0w1Me3xZngGT^d*Xe zd3)-TJueB%J%nnW{)!OqiO~mbm@WtF?(Ix032L9Yh)>2f1jAty1_!A2qgj92{sJ>a zLxS>JqDTX0QYRhs(ZSSyV_J$M9Gg?8+9076b6@1MAnT@EO%*C-8V+3M)4(}p>A2Ly zjHDf0`I_Pi=bMlxbG7eW-@VSK+HeQ*`sx~WQwV0CW-m9Ie#_s8JrqXQs zHi({bE2+VdF8|D5sEq|5j#WA)$sVk5>%k&mO)7a|iWj>B`a-R9E$4LZ=3ppL6LWOd zY^*`kE!H@$TKb{{MOUhzFs`tGufO%px9y|UXTra9vAilA`hvTvHWHp`#5wA|K)WFJ zrEoc6A;@9GmMjJ)s_vQq41lRYLHS4u49fmINvFxwA;(p zkTvJtg3j1H24!rE_M%mf;j!&UUB-=bsnE=Qu<2qAUg#Tm$BiP1V5?QOjkC776l(BF zyxt+fZ)?31FGlzcedWS(S0?vPV6JJrYQ=YEucKdsr}OoF#g`+NY1FHGjz;@T@T>1TH+3(|6M`r}Ba3v5l-BEA!(hDqQI6&-rd7(H6`vb4l`^8~yHAr3 zT+V(3k2kcbW?cC}w%DE$c zxdUIKiUK4X^RlM1=i}EkftG!_>t-93bgR6@f;*7h#FT=XUW+B^@g3E>W`QiVQ6aVO zdx->{(g#9CtO&o>x?+irDOboGJog1p0J8z@S7Gw;KEDXHtIB zbR;cxh!#Ao0`Vz zJ)}u#qa!vU9m>ce=JO zG}V7v0liB;K5M$`G}T?wQggG59$Ci2F#}Kry`f3zeQ6V$!`{`F+`fyT3}=CG%;aaA z1PyLK8ZaegTuC+LYKtycaeJ$a7+p9sxl8Ed&0HVt8{mtPA@3$=vH&39E@xe>r)&x@ zOJ&;}JZI^$Yt7Z3wOy%CUko^OFR!0j{I~#Z>0ai2_(O;*x_ZlR&z=@1-MmT(Y@r|r zikwq$l{_8(VP3V*I_~$iC~r|mb0R4UzR4lD+Er4e9@fLar>-Gqu3aKcqclB_)vD&r zd2Ng)a2f7;*Q0FnTi?$Eb%8FtSy#zD1*q+mh$g-rvS?4DWCzwn3Kb zAG~bIq?Q8WzR|&ixnhY3D3_iDc+iE7gWh!fkPuKSr4eaB?)WNdB#5CZ7Emv0gMz84 zh+sV}drlm%4{UmosgG+SM2%q_L^o|cP8c!Q*kai>EM9yexhG_hdLVZ)mx>P(K0pmx zMn4Cxq*7lFV%`L2bzMzKl07zc1%6kMfLIJ_)O^enL|Ee@12spt zq5=15uHUzyL6g1Ps_U?a3)aRwoFhMk3-_Q}#rtl3hkE^jWRLlv4VIX!G;6l^4A+7& zfDG18@Adb7%$ps|J8lGfy^p$Z*Z2p+2ufNln;_zIGU`iv>f0PF=)V1Agf&Lw$}>?P zsE*ZeLqjUen{ddVQh5~CQ|Takkak{U^OwAIz^z=HJIh2gv@qf|D^`2tjeGbl8Rp$E zU4*!9H>m+ydFV|0E{0p0U>~V*Oa5QQB(7r*q>-!e@NlY10U(KUI^?PtQ4rzzGHo#4v2*w>C}$r!@=8AuT2wG(wmQsO0G~` zTLqpj!tvF8SyiJyc;TYE)|_^r&uwvsbjgTqADBP_4jXUCQ00xkSdi zlM`M2_KwXl5tF?7MMt`<2dzTp{*!0?5Y9U4YKV+44P)1tOkJKYkj@6GO93r(>t0Cy;?k=C3dko_FwuW!riGm z983@xX3BcFs&YW} z`Ml`3=&w{KZ-QQXld{@6$k9Gu=V<1C0To^gcCaJp-iJEF07%r08jE{ZWy5NxhD*-U-{DD#G?vE7%(c+UYG1vgW2kwNj zJ<=yg_wRiEc`Rzb0z`$Zse}X6@HGO_fau}?wtuGZ63}JXK*90a_6ri&{(IS$SZDE- z3ggNzpGUO89lk3z_nfdb2NL-vznU8uz8m?ea`u#xDj3 zm9NGNn#vTi&T8Ax?YV|%e;$MmOuF_9c9GmyJ4y%bG5VA=b1iTilh#dxmAmmuho1yh zgSM{*9S8X1jyljZac7v!&whO5@w|o2m@b}i*MKf?_3~SJJ;Tw$UsMKtDaW@V_t8JT z?CJ{bP;fsSkjDm<^#!)efYBz77LEt^X`1a>7>{RClLz=OLIUWiJ zmXka&*F;C`tuX~%GV72BJk;EAcOrUBo%1=DroE9pAj)nlKVm|gP?9fLZmrbvt#&ie z-iCyyt@3_sSE7S6q8>2O<_B(O4HV4gBS(0k*DU!fzGs*i|6jy;aw2?2w;l z+}ymJT%6p`xHx!uxH)*(xVhNbczM`)d3kwwc-h(6xOh2!movjK6#!=I08*1;K|I~= zhx?v+9YCrF%m^jm-eH5w{(+Hvz#KkiETkSV?46JDI)2DFLKrYkHxLa?`hmLacZ|kA z#T@>Q0soG9@j%1g1&NvY9V7D~#_@LyK@TKG{y|I`B!(0+#{VrGJY){LAT@iRu~2xB z&a>`E%+^E3`7yJi_#mCi$Be(y1Lov0gZ}aX!`1WXcn%&i?vEJ*)d%U+K4xYfG8d1T z5$y-*@bx}Ao{u^Y81Kgno52I7;W4xFkhyuxd^CKJj!@sD<6$#>z==va? zp2rNE=K}_D@X_(CJY-}aGatPkq!am=G4OuC3=9JC8TRPP`YTBRfZrdSzx8|oVCEr@ zIs_zOFdfpkf%x74U|0bVgV(Q84wfNA4~uMWK8^92pD?I zKLZa918GV5|AqkorOOXM$m~{_q1zo1{0SZapn;rLAg6%8h4Hn=JZr+v1`=3r9Ei?< zV5x@y@l*wD!U6z%f0F?KhuaT?5KlZtFzzT2iveTu6b1UXc@Y8tAaPGLw)amW-%%hv zsoXtK_2>ckU#DE~?I;kN;p|r$xCNq^gnZQRDKmfltI}-@NXn4wm_y+S1OS#G2YA2g z&`%yHAx!`;0qqM*d+Y|X$tF*&c<^uJ1`XR{_NvV|7n^8qJT{&e`hBM48cH!tWBi` z0L1PoTM+(5`Hb{_7KXTwK|HWN0T2hwI|a$&;J+5m53~41`mf3lQ;>f8+rl{)a!~w` zuNN|B_*;PN+;G2Gznvd}oM6&vAQ`E~-#`H1jP0LMm2n^m!~YDB0f750{gVBG>_6>+ z223&yL<0AX1Cbd17$8G(d)(ZOIsR1+aZ`TsS1Tt^q-#gd#}mA^7-o((%)~80sxQ+=ikDq z^S>ymz={iyd_@1o0suO1AJc!mdkSt?fRyKduRlC&(snWbqGTg|b}tM0ln3CSw*UK$ z32?{nv(Nt)v;zPF_mqzB|3yjor^SO&mLLs}^PYq+{ek4q_w#!>JXmiDlG%S((P2KE z8@OitixTUv%;tV)cE9qHb00_`C1VHjfLq5QL;U}4M?I{$k4671`#pw$Tb3c&+&`Ht zw?5$il Date: Tue, 27 Feb 2024 17:33:22 +0800 Subject: [PATCH 074/117] try to fix nopbc --- source/api_cc/src/DeepPotPT.cc | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index 8a2208f001..1b1229ec85 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -220,9 +220,12 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, at::Tensor atype_Tensor = torch::from_blob(atype_64.data(), {1, natoms}, int_options).to(device); inputs.push_back(atype_Tensor); - at::Tensor box_Tensor = - torch::from_blob(const_cast(box.data()), {1, 9}, options) + c10::optional box_Tensor; + if(!box.empty()) + { + box_Tensor = torch::from_blob(const_cast(box.data()), {1, 9}, options) .to(device); + } inputs.push_back(box_Tensor); c10::optional fparam_tensor; inputs.push_back(fparam_tensor); From 0a440c5aedb3612607c2b5994d7ef7c0b7ebfaae Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 27 Feb 2024 09:33:49 +0000 Subject: [PATCH 075/117] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- source/api_cc/src/DeepPotPT.cc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index 1b1229ec85..69d73c18e2 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -221,10 +221,10 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, torch::from_blob(atype_64.data(), {1, natoms}, int_options).to(device); inputs.push_back(atype_Tensor); c10::optional box_Tensor; - if(!box.empty()) - { - box_Tensor = torch::from_blob(const_cast(box.data()), {1, 9}, options) - .to(device); + if (!box.empty()) { + box_Tensor = + torch::from_blob(const_cast(box.data()), {1, 9}, options) + .to(device); } inputs.push_back(box_Tensor); c10::optional fparam_tensor; From bb45b4096c5cdfcbe35bccf2cd1f40a9736f08e8 Mon Sep 17 00:00:00 2001 From: Lysithea Date: Tue, 27 Feb 2024 18:11:33 +0800 Subject: [PATCH 076/117] try to export ut output --- source/api_cc/tests/test_deeppot_pt.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/api_cc/tests/test_deeppot_pt.cc b/source/api_cc/tests/test_deeppot_pt.cc index 5dd8bf206a..254e35499e 100644 --- a/source/api_cc/tests/test_deeppot_pt.cc +++ b/source/api_cc/tests/test_deeppot_pt.cc @@ -279,13 +279,14 @@ TYPED_TEST(TestInferDeepPotAPt, cpu_lmp_nlist_atomic) { std::vector ilist(nloc), numneigh(nloc); std::vector firstneigh(nloc); deepmd::InputNlist inlist(nloc, &ilist[0], &numneigh[0], &firstneigh[0]); + std::cout << nlist_data < force_, atom_ener_, atom_vir_, virial; std::vector force, atom_ener, atom_vir; dp.compute(ener, force_, virial, atom_ener_, atom_vir_, coord_cpy, atype_cpy, box, nall - nloc, inlist, 0); + std::cout << atom_ener_ <(force, force_, mapping, nloc, nall, 3); _fold_back(atom_ener, atom_ener_, mapping, nloc, nall, 1); _fold_back(atom_vir, atom_vir_, mapping, nloc, nall, 9); From 75c8bb96001a8c25272a8a58bd3b3464a5bbb9b2 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 27 Feb 2024 10:12:03 +0000 Subject: [PATCH 077/117] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- source/api_cc/tests/test_deeppot_pt.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/api_cc/tests/test_deeppot_pt.cc b/source/api_cc/tests/test_deeppot_pt.cc index 254e35499e..8b2185080f 100644 --- a/source/api_cc/tests/test_deeppot_pt.cc +++ b/source/api_cc/tests/test_deeppot_pt.cc @@ -279,14 +279,14 @@ TYPED_TEST(TestInferDeepPotAPt, cpu_lmp_nlist_atomic) { std::vector ilist(nloc), numneigh(nloc); std::vector firstneigh(nloc); deepmd::InputNlist inlist(nloc, &ilist[0], &numneigh[0], &firstneigh[0]); - std::cout << nlist_data < force_, atom_ener_, atom_vir_, virial; std::vector force, atom_ener, atom_vir; dp.compute(ener, force_, virial, atom_ener_, atom_vir_, coord_cpy, atype_cpy, box, nall - nloc, inlist, 0); - std::cout << atom_ener_ <(force, force_, mapping, nloc, nall, 3); _fold_back(atom_ener, atom_ener_, mapping, nloc, nall, 1); _fold_back(atom_vir, atom_vir_, mapping, nloc, nall, 9); From 045087365e6017a7a028d6990eeea704a6d3e0e1 Mon Sep 17 00:00:00 2001 From: Lysithea Date: Tue, 27 Feb 2024 18:59:39 +0800 Subject: [PATCH 078/117] try to export ut input --- source/api_cc/src/DeepPotPT.cc | 6 ++++++ source/api_cc/tests/test_deeppot_pt.cc | 2 -- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index 69d73c18e2..4e27d9a1da 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -102,6 +102,11 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, torch::from_blob(atype_64.data(), {1, natoms}, int_options).to(device); if (ago == 0) { nlist_data.copy_from_nlist(lmp_list, max_num_neighbors); + std::cout << "Vector content:" << std::endl; + for (const auto& element : nlist_data.jlist) { + std::cout << element << " "; + } + std::cout << std::endl; } at::Tensor firstneigh = torch::from_blob(nlist_data.jlist.data(), @@ -127,6 +132,7 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, torch::Tensor flat_atom_energy_ = atom_energy_.toTensor().view({-1}).to(floatType); torch::Tensor cpu_atom_energy_ = flat_atom_energy_.to(torch::kCPU); + std::cout << cpu_atom_energy_ << std::endl; atom_energy.assign( cpu_atom_energy_.data_ptr(), cpu_atom_energy_.data_ptr() + cpu_atom_energy_.numel()); diff --git a/source/api_cc/tests/test_deeppot_pt.cc b/source/api_cc/tests/test_deeppot_pt.cc index 8b2185080f..cc30e606c0 100644 --- a/source/api_cc/tests/test_deeppot_pt.cc +++ b/source/api_cc/tests/test_deeppot_pt.cc @@ -279,14 +279,12 @@ TYPED_TEST(TestInferDeepPotAPt, cpu_lmp_nlist_atomic) { std::vector ilist(nloc), numneigh(nloc); std::vector firstneigh(nloc); deepmd::InputNlist inlist(nloc, &ilist[0], &numneigh[0], &firstneigh[0]); - std::cout << nlist_data << std::endl; convert_nlist(inlist, nlist_data); double ener; std::vector force_, atom_ener_, atom_vir_, virial; std::vector force, atom_ener, atom_vir; dp.compute(ener, force_, virial, atom_ener_, atom_vir_, coord_cpy, atype_cpy, box, nall - nloc, inlist, 0); - std::cout << atom_ener_ << std::endl; _fold_back(force, force_, mapping, nloc, nall, 3); _fold_back(atom_ener, atom_ener_, mapping, nloc, nall, 1); _fold_back(atom_vir, atom_vir_, mapping, nloc, nall, 9); From 19e3cd580d4c1362c209fe31993b806227a29525 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 27 Feb 2024 11:00:07 +0000 Subject: [PATCH 079/117] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- source/api_cc/src/DeepPotPT.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index 4e27d9a1da..65c4e78f0b 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -104,7 +104,7 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, nlist_data.copy_from_nlist(lmp_list, max_num_neighbors); std::cout << "Vector content:" << std::endl; for (const auto& element : nlist_data.jlist) { - std::cout << element << " "; + std::cout << element << " "; } std::cout << std::endl; } From 5da17cbc6423d0ad46a2ca06f48607fa1b2fdb72 Mon Sep 17 00:00:00 2001 From: Lysithea Date: Tue, 27 Feb 2024 19:09:11 +0800 Subject: [PATCH 080/117] modify output --- source/api_cc/src/DeepPotPT.cc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index 65c4e78f0b..655db179a1 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -104,9 +104,8 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, nlist_data.copy_from_nlist(lmp_list, max_num_neighbors); std::cout << "Vector content:" << std::endl; for (const auto& element : nlist_data.jlist) { - std::cout << element << " "; + std::cout << element << std::endl; } - std::cout << std::endl; } at::Tensor firstneigh = torch::from_blob(nlist_data.jlist.data(), From e4b3265ad8336d47bd16a2d04de1b8c8a0a84ba2 Mon Sep 17 00:00:00 2001 From: Lysithea Date: Tue, 27 Feb 2024 19:43:47 +0800 Subject: [PATCH 081/117] try --- source/api_cc/src/DeepPotPT.cc | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index 655db179a1..4f336880a0 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -102,15 +102,12 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, torch::from_blob(atype_64.data(), {1, natoms}, int_options).to(device); if (ago == 0) { nlist_data.copy_from_nlist(lmp_list, max_num_neighbors); - std::cout << "Vector content:" << std::endl; - for (const auto& element : nlist_data.jlist) { - std::cout << element << std::endl; - } } at::Tensor firstneigh = torch::from_blob(nlist_data.jlist.data(), {1, lmp_list.inum, max_num_neighbors}, int32_options); firstneigh_tensor = firstneigh.to(torch::kInt64).to(device); + std::cout << firstneigh_tensor < optional_tensor; c10::Dict outputs = @@ -135,6 +132,7 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, atom_energy.assign( cpu_atom_energy_.data_ptr(), cpu_atom_energy_.data_ptr() + cpu_atom_energy_.numel()); + std::cout << atom_energy << std::endl; torch::Tensor flat_force_ = force_.toTensor().view({-1}).to(floatType); torch::Tensor cpu_force_ = flat_force_.to(torch::kCPU); force.assign(cpu_force_.data_ptr(), From 55db21f852139fac27008c8b8b224122a435f5e9 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 27 Feb 2024 11:44:12 +0000 Subject: [PATCH 082/117] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- source/api_cc/src/DeepPotPT.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index 4f336880a0..adf6815fb3 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -107,7 +107,7 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, torch::from_blob(nlist_data.jlist.data(), {1, lmp_list.inum, max_num_neighbors}, int32_options); firstneigh_tensor = firstneigh.to(torch::kInt64).to(device); - std::cout << firstneigh_tensor < optional_tensor; c10::Dict outputs = From 600e5344c1e913efed8ed07b1381ce017319066e Mon Sep 17 00:00:00 2001 From: Lysithea Date: Tue, 27 Feb 2024 19:58:06 +0800 Subject: [PATCH 083/117] try --- source/api_cc/src/DeepPotPT.cc | 2 -- source/api_cc/src/commonPT.cc | 4 ++++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index adf6815fb3..d5c54fe06a 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -107,7 +107,6 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, torch::from_blob(nlist_data.jlist.data(), {1, lmp_list.inum, max_num_neighbors}, int32_options); firstneigh_tensor = firstneigh.to(torch::kInt64).to(device); - std::cout << firstneigh_tensor << std::endl; bool do_atom_virial_tensor = true; c10::optional optional_tensor; c10::Dict outputs = @@ -128,7 +127,6 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, torch::Tensor flat_atom_energy_ = atom_energy_.toTensor().view({-1}).to(floatType); torch::Tensor cpu_atom_energy_ = flat_atom_energy_.to(torch::kCPU); - std::cout << cpu_atom_energy_ << std::endl; atom_energy.assign( cpu_atom_energy_.data_ptr(), cpu_atom_energy_.data_ptr() + cpu_atom_energy_.numel()); diff --git a/source/api_cc/src/commonPT.cc b/source/api_cc/src/commonPT.cc index 345220323b..9c447608e7 100644 --- a/source/api_cc/src/commonPT.cc +++ b/source/api_cc/src/commonPT.cc @@ -16,6 +16,10 @@ void NeighborListDataPT::copy_from_nlist(const InputNlist& inlist, for (int ii = 0; ii < inum; ++ii) { int jnum = inlist.numneigh[ii]; numneigh[ii] = inlist.numneigh[ii]; + for (int j = 0; j < jnum; ++j) { + std::cout << inlist.firstneigh[ii][j] << " "; + } + std::cout << std::endl; memcpy(&jlist[(unsigned long)ii * max_num_neighbors], inlist.firstneigh[ii], jnum * sizeof(int)); } From 7ba3fcfb84f64b03440466865d5aa22723cff853 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 27 Feb 2024 11:58:33 +0000 Subject: [PATCH 084/117] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- source/api_cc/src/commonPT.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/api_cc/src/commonPT.cc b/source/api_cc/src/commonPT.cc index 9c447608e7..8c115f28b3 100644 --- a/source/api_cc/src/commonPT.cc +++ b/source/api_cc/src/commonPT.cc @@ -17,7 +17,7 @@ void NeighborListDataPT::copy_from_nlist(const InputNlist& inlist, int jnum = inlist.numneigh[ii]; numneigh[ii] = inlist.numneigh[ii]; for (int j = 0; j < jnum; ++j) { - std::cout << inlist.firstneigh[ii][j] << " "; + std::cout << inlist.firstneigh[ii][j] << " "; } std::cout << std::endl; memcpy(&jlist[(unsigned long)ii * max_num_neighbors], inlist.firstneigh[ii], From 3be3cbc1c1dcd0cf80fd7f3a7d0f622f5db45623 Mon Sep 17 00:00:00 2001 From: Lysithea Date: Tue, 27 Feb 2024 20:09:41 +0800 Subject: [PATCH 085/117] delete print --- source/api_cc/src/DeepPotPT.cc | 1 - source/api_cc/src/commonPT.cc | 4 ---- 2 files changed, 5 deletions(-) diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index d5c54fe06a..69d73c18e2 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -130,7 +130,6 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, atom_energy.assign( cpu_atom_energy_.data_ptr(), cpu_atom_energy_.data_ptr() + cpu_atom_energy_.numel()); - std::cout << atom_energy << std::endl; torch::Tensor flat_force_ = force_.toTensor().view({-1}).to(floatType); torch::Tensor cpu_force_ = flat_force_.to(torch::kCPU); force.assign(cpu_force_.data_ptr(), diff --git a/source/api_cc/src/commonPT.cc b/source/api_cc/src/commonPT.cc index 8c115f28b3..345220323b 100644 --- a/source/api_cc/src/commonPT.cc +++ b/source/api_cc/src/commonPT.cc @@ -16,10 +16,6 @@ void NeighborListDataPT::copy_from_nlist(const InputNlist& inlist, for (int ii = 0; ii < inum; ++ii) { int jnum = inlist.numneigh[ii]; numneigh[ii] = inlist.numneigh[ii]; - for (int j = 0; j < jnum; ++j) { - std::cout << inlist.firstneigh[ii][j] << " "; - } - std::cout << std::endl; memcpy(&jlist[(unsigned long)ii * max_num_neighbors], inlist.firstneigh[ii], jnum * sizeof(int)); } From 1785cbd8dbe16a905836522916a95c443054cc33 Mon Sep 17 00:00:00 2001 From: Lysithea Date: Tue, 27 Feb 2024 20:30:42 +0800 Subject: [PATCH 086/117] get extended coord and atype --- source/api_cc/src/DeepPotPT.cc | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index 69d73c18e2..7c012683c8 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -80,6 +80,14 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, const std::vector& box, const InputNlist& lmp_list, const int& ago) { + for (auto element : coord) { + std::cout << element << ", "; + } + std::cout << std::endl; + for (auto element : atype) { + std::cout << element << ", "; + } + std::cout << std::endl; torch::Device device(torch::kCUDA, gpu_id); if (!gpu_enabled) { device = torch::Device(torch::kCPU); From 962cf64351728e76d009f1feffc3a02e07531f74 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 27 Feb 2024 12:31:17 +0000 Subject: [PATCH 087/117] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- source/api_cc/src/DeepPotPT.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index 7c012683c8..558f615646 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -80,12 +80,12 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, const std::vector& box, const InputNlist& lmp_list, const int& ago) { - for (auto element : coord) { - std::cout << element << ", "; + for (auto element : coord) { + std::cout << element << ", "; } std::cout << std::endl; for (auto element : atype) { - std::cout << element << ", "; + std::cout << element << ", "; } std::cout << std::endl; torch::Device device(torch::kCUDA, gpu_id); From b0053651352344b5cf03fd346fb21f7160407939 Mon Sep 17 00:00:00 2001 From: Lysithea Date: Tue, 27 Feb 2024 21:19:26 +0800 Subject: [PATCH 088/117] delete output --- source/api_cc/src/DeepPotPT.cc | 8 -------- 1 file changed, 8 deletions(-) diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index 558f615646..69d73c18e2 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -80,14 +80,6 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, const std::vector& box, const InputNlist& lmp_list, const int& ago) { - for (auto element : coord) { - std::cout << element << ", "; - } - std::cout << std::endl; - for (auto element : atype) { - std::cout << element << ", "; - } - std::cout << std::endl; torch::Device device(torch::kCUDA, gpu_id); if (!gpu_enabled) { device = torch::Device(torch::kCPU); From 499ed1743d68b4854f7b63a4b1536b7c4c35b23f Mon Sep 17 00:00:00 2001 From: Lysithea Date: Wed, 28 Feb 2024 10:05:25 +0800 Subject: [PATCH 089/117] remove memset --- source/api_cc/src/commonPT.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/api_cc/src/commonPT.cc b/source/api_cc/src/commonPT.cc index 345220323b..4ed3b21fe8 100644 --- a/source/api_cc/src/commonPT.cc +++ b/source/api_cc/src/commonPT.cc @@ -12,7 +12,7 @@ void NeighborListDataPT::copy_from_nlist(const InputNlist& inlist, max_num_neighbors = *max_element; unsigned long nlist_size = (unsigned long)inum * max_num_neighbors; jlist.resize(nlist_size); - memset(&jlist[0], -1, nlist_size * sizeof(int)); + jlist.assign(nlist_size, -1); for (int ii = 0; ii < inum; ++ii) { int jnum = inlist.numneigh[ii]; numneigh[ii] = inlist.numneigh[ii]; From f872b1f9427074224c977012047616d2a75b8b3d Mon Sep 17 00:00:00 2001 From: Lysithea Date: Wed, 28 Feb 2024 10:49:57 +0800 Subject: [PATCH 090/117] try to resize atom energy --- source/api_cc/src/DeepPotPT.cc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index 69d73c18e2..e353af9051 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -124,8 +124,9 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, torch::Tensor cpu_energy_ = flat_energy_.to(torch::kCPU); ener.assign(cpu_energy_.data_ptr(), cpu_energy_.data_ptr() + cpu_energy_.numel()); + torch::Tensor resize_atom_energy = atom_energy_.toTensor().detach().resize_({1,natoms}); torch::Tensor flat_atom_energy_ = - atom_energy_.toTensor().view({-1}).to(floatType); + resize_atom_energy.view({-1}).to(floatType); torch::Tensor cpu_atom_energy_ = flat_atom_energy_.to(torch::kCPU); atom_energy.assign( cpu_atom_energy_.data_ptr(), From aab67712e9b341499269a41b88a230b43cee552b Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 28 Feb 2024 02:50:23 +0000 Subject: [PATCH 091/117] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- source/api_cc/src/DeepPotPT.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index e353af9051..b2c7948093 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -124,9 +124,9 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, torch::Tensor cpu_energy_ = flat_energy_.to(torch::kCPU); ener.assign(cpu_energy_.data_ptr(), cpu_energy_.data_ptr() + cpu_energy_.numel()); - torch::Tensor resize_atom_energy = atom_energy_.toTensor().detach().resize_({1,natoms}); - torch::Tensor flat_atom_energy_ = - resize_atom_energy.view({-1}).to(floatType); + torch::Tensor resize_atom_energy = + atom_energy_.toTensor().detach().resize_({1, natoms}); + torch::Tensor flat_atom_energy_ = resize_atom_energy.view({-1}).to(floatType); torch::Tensor cpu_atom_energy_ = flat_atom_energy_.to(torch::kCPU); atom_energy.assign( cpu_atom_energy_.data_ptr(), From 414fffe83b1d0714698eb981320ff0b4871b363f Mon Sep 17 00:00:00 2001 From: Lysithea Date: Wed, 28 Feb 2024 11:01:44 +0800 Subject: [PATCH 092/117] fix atom ener size --- source/api_cc/src/DeepPotPT.cc | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index b2c7948093..dfce657f65 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -124,10 +124,9 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, torch::Tensor cpu_energy_ = flat_energy_.to(torch::kCPU); ener.assign(cpu_energy_.data_ptr(), cpu_energy_.data_ptr() + cpu_energy_.numel()); - torch::Tensor resize_atom_energy = - atom_energy_.toTensor().detach().resize_({1, natoms}); - torch::Tensor flat_atom_energy_ = resize_atom_energy.view({-1}).to(floatType); + torch::Tensor flat_atom_energy_ = atom_energy_.toTensor().view({-1}).to(floatType); torch::Tensor cpu_atom_energy_ = flat_atom_energy_.to(torch::kCPU); + atom_energy.resize(natoms,0.0);//resize to nall to be consistenet with TF. atom_energy.assign( cpu_atom_energy_.data_ptr(), cpu_atom_energy_.data_ptr() + cpu_atom_energy_.numel()); From f3f6402e6a9e192be3ece40bf83ff209ddcd30ce Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 28 Feb 2024 03:02:10 +0000 Subject: [PATCH 093/117] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- source/api_cc/src/DeepPotPT.cc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index dfce657f65..690ee91817 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -124,9 +124,10 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, torch::Tensor cpu_energy_ = flat_energy_.to(torch::kCPU); ener.assign(cpu_energy_.data_ptr(), cpu_energy_.data_ptr() + cpu_energy_.numel()); - torch::Tensor flat_atom_energy_ = atom_energy_.toTensor().view({-1}).to(floatType); + torch::Tensor flat_atom_energy_ = + atom_energy_.toTensor().view({-1}).to(floatType); torch::Tensor cpu_atom_energy_ = flat_atom_energy_.to(torch::kCPU); - atom_energy.resize(natoms,0.0);//resize to nall to be consistenet with TF. + atom_energy.resize(natoms, 0.0); // resize to nall to be consistenet with TF. atom_energy.assign( cpu_atom_energy_.data_ptr(), cpu_atom_energy_.data_ptr() + cpu_atom_energy_.numel()); From c074687222e7bbdd37f88691bccfbd3290d8f222 Mon Sep 17 00:00:00 2001 From: Lysithea Date: Wed, 28 Feb 2024 11:41:04 +0800 Subject: [PATCH 094/117] precision transfer in common api and skip type sel tests --- deepmd/pt/model/model/dipole_model.py | 7 ------- deepmd/pt/model/model/dp_zbl_model.py | 7 ------- deepmd/pt/model/model/ener_model.py | 5 ----- deepmd/pt/model/model/make_model.py | 8 +++++++- deepmd/pt/model/model/polar_model.py | 7 ------- source/api_cc/tests/test_deeppot_pt.cc | 2 ++ 6 files changed, 9 insertions(+), 27 deletions(-) diff --git a/deepmd/pt/model/model/dipole_model.py b/deepmd/pt/model/model/dipole_model.py index 6887b0ef57..59976ab968 100644 --- a/deepmd/pt/model/model/dipole_model.py +++ b/deepmd/pt/model/model/dipole_model.py @@ -6,9 +6,6 @@ import torch -from deepmd.pt.utils import ( - env, -) from .dp_model import ( DPModel, @@ -34,9 +31,6 @@ def forward( aparam: Optional[torch.Tensor] = None, do_atomic_virial: bool = False, ) -> Dict[str, torch.Tensor]: - coord = coord.to(env.GLOBAL_PT_FLOAT_PRECISION) - if box is not None: - box = box.to(env.GLOBAL_PT_FLOAT_PRECISION) model_ret = self.forward_common( coord, atype, @@ -73,7 +67,6 @@ def forward_lower( aparam: Optional[torch.Tensor] = None, do_atomic_virial: bool = False, ): - extended_coord = extended_coord.to(env.GLOBAL_PT_FLOAT_PRECISION) model_ret = self.forward_common_lower( extended_coord, extended_atype, diff --git a/deepmd/pt/model/model/dp_zbl_model.py b/deepmd/pt/model/model/dp_zbl_model.py index b89e1b67fa..1729b29cb2 100644 --- a/deepmd/pt/model/model/dp_zbl_model.py +++ b/deepmd/pt/model/model/dp_zbl_model.py @@ -16,9 +16,6 @@ DPZBLModel_ = make_model(DPZBLLinearAtomicModel) -from deepmd.pt.utils import ( - env, -) class DPZBLModel(DPZBLModel_): @@ -40,9 +37,6 @@ def forward( aparam: Optional[torch.Tensor] = None, do_atomic_virial: bool = False, ) -> Dict[str, torch.Tensor]: - coord = coord.to(env.GLOBAL_PT_FLOAT_PRECISION) - if box is not None: - box = box.to(env.GLOBAL_PT_FLOAT_PRECISION) model_ret = self.forward_common( coord, atype, @@ -76,7 +70,6 @@ def forward_lower( aparam: Optional[torch.Tensor] = None, do_atomic_virial: bool = False, ): - extended_coord = extended_coord.to(env.GLOBAL_PT_FLOAT_PRECISION) model_ret = self.forward_common_lower( extended_coord, extended_atype, diff --git a/deepmd/pt/model/model/ener_model.py b/deepmd/pt/model/model/ener_model.py index 1be3045fa7..6f0761c4ff 100644 --- a/deepmd/pt/model/model/ener_model.py +++ b/deepmd/pt/model/model/ener_model.py @@ -6,10 +6,6 @@ import torch -from deepmd.pt.utils import ( - env, -) - from .dp_model import ( DPModel, ) @@ -75,7 +71,6 @@ def forward_lower( aparam: Optional[torch.Tensor] = None, do_atomic_virial: bool = False, ): - extended_coord = extended_coord.to(env.GLOBAL_PT_FLOAT_PRECISION) model_ret = self.forward_common_lower( extended_coord, extended_atype, diff --git a/deepmd/pt/model/model/make_model.py b/deepmd/pt/model/model/make_model.py index 79634186e4..0d492c15db 100644 --- a/deepmd/pt/model/model/make_model.py +++ b/deepmd/pt/model/model/make_model.py @@ -21,7 +21,9 @@ extend_input_and_build_neighbor_list, nlist_distinguish_types, ) - +from deepmd.pt.utils import ( + env, +) def make_model(T_AtomicModel): """Make a model as a derived class of an atomic model. @@ -115,6 +117,9 @@ def forward_common( The keys are defined by the `ModelOutputDef`. """ + coord = coord.to(env.GLOBAL_PT_FLOAT_PRECISION) + if box is not None: + box = box.to(env.GLOBAL_PT_FLOAT_PRECISION) ( extended_coord, extended_atype, @@ -183,6 +188,7 @@ def forward_common_lower( the result dict, defined by the `FittingOutputDef`. """ + extended_coord = extended_coord.to(env.GLOBAL_PT_FLOAT_PRECISION) nframes, nall = extended_atype.shape[:2] extended_coord = extended_coord.view(nframes, -1, 3) nlist = self.format_nlist(extended_coord, extended_atype, nlist) diff --git a/deepmd/pt/model/model/polar_model.py b/deepmd/pt/model/model/polar_model.py index da27c3d70e..a6b0452068 100644 --- a/deepmd/pt/model/model/polar_model.py +++ b/deepmd/pt/model/model/polar_model.py @@ -6,9 +6,6 @@ import torch -from deepmd.pt.utils import ( - env, -) from .dp_model import ( DPModel, @@ -34,9 +31,6 @@ def forward( aparam: Optional[torch.Tensor] = None, do_atomic_virial: bool = False, ) -> Dict[str, torch.Tensor]: - coord = coord.to(env.GLOBAL_PT_FLOAT_PRECISION) - if box is not None: - box = box.to(env.GLOBAL_PT_FLOAT_PRECISION) model_ret = self.forward_common( coord, atype, @@ -65,7 +59,6 @@ def forward_lower( aparam: Optional[torch.Tensor] = None, do_atomic_virial: bool = False, ): - extended_coord = extended_coord.to(env.GLOBAL_PT_FLOAT_PRECISION) model_ret = self.forward_common_lower( extended_coord, extended_atype, diff --git a/source/api_cc/tests/test_deeppot_pt.cc b/source/api_cc/tests/test_deeppot_pt.cc index cc30e606c0..e0e90ac75c 100644 --- a/source/api_cc/tests/test_deeppot_pt.cc +++ b/source/api_cc/tests/test_deeppot_pt.cc @@ -402,6 +402,7 @@ TYPED_TEST(TestInferDeepPotAPt, cpu_lmp_nlist_2rc) { } TYPED_TEST(TestInferDeepPotAPt, cpu_lmp_nlist_type_sel) { + GTEST_SKIP() << "Skipping this test for unsupported"; using VALUETYPE = TypeParam; std::vector& coord = this->coord; std::vector& atype = this->atype; @@ -464,6 +465,7 @@ TYPED_TEST(TestInferDeepPotAPt, cpu_lmp_nlist_type_sel) { } TYPED_TEST(TestInferDeepPotAPt, cpu_lmp_nlist_type_sel_atomic) { + GTEST_SKIP() << "Skipping this test for unsupported"; using VALUETYPE = TypeParam; std::vector& coord = this->coord; std::vector& atype = this->atype; From b1ad4bc8c0ab4082bf1e36951bcc06a6e8670b2e Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 28 Feb 2024 03:59:45 +0000 Subject: [PATCH 095/117] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- deepmd/pt/model/model/dipole_model.py | 1 - deepmd/pt/model/model/make_model.py | 7 ++++--- deepmd/pt/model/model/polar_model.py | 1 - 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/deepmd/pt/model/model/dipole_model.py b/deepmd/pt/model/model/dipole_model.py index 59976ab968..6629541459 100644 --- a/deepmd/pt/model/model/dipole_model.py +++ b/deepmd/pt/model/model/dipole_model.py @@ -6,7 +6,6 @@ import torch - from .dp_model import ( DPModel, ) diff --git a/deepmd/pt/model/model/make_model.py b/deepmd/pt/model/model/make_model.py index 0d492c15db..b6478d297f 100644 --- a/deepmd/pt/model/model/make_model.py +++ b/deepmd/pt/model/model/make_model.py @@ -17,13 +17,14 @@ communicate_extended_output, fit_output_to_model_output, ) +from deepmd.pt.utils import ( + env, +) from deepmd.pt.utils.nlist import ( extend_input_and_build_neighbor_list, nlist_distinguish_types, ) -from deepmd.pt.utils import ( - env, -) + def make_model(T_AtomicModel): """Make a model as a derived class of an atomic model. diff --git a/deepmd/pt/model/model/polar_model.py b/deepmd/pt/model/model/polar_model.py index a6b0452068..d956a0344c 100644 --- a/deepmd/pt/model/model/polar_model.py +++ b/deepmd/pt/model/model/polar_model.py @@ -6,7 +6,6 @@ import torch - from .dp_model import ( DPModel, ) From 1fa1afc5c0577501de7b9a581db4ac287bc28c67 Mon Sep 17 00:00:00 2001 From: Lysithea Date: Wed, 28 Feb 2024 12:01:10 +0800 Subject: [PATCH 096/117] del ener model precison --- deepmd/pt/model/model/ener_model.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/deepmd/pt/model/model/ener_model.py b/deepmd/pt/model/model/ener_model.py index 6f0761c4ff..1a5706dbbf 100644 --- a/deepmd/pt/model/model/ener_model.py +++ b/deepmd/pt/model/model/ener_model.py @@ -30,9 +30,6 @@ def forward( aparam: Optional[torch.Tensor] = None, do_atomic_virial: bool = False, ) -> Dict[str, torch.Tensor]: - coord = coord.to(env.GLOBAL_PT_FLOAT_PRECISION) - if box is not None: - box = box.to(env.GLOBAL_PT_FLOAT_PRECISION) model_ret = self.forward_common( coord, atype, From 44649660419b59f761011323d52a75d32e6d710b Mon Sep 17 00:00:00 2001 From: Lysithea Date: Wed, 28 Feb 2024 13:50:06 +0800 Subject: [PATCH 097/117] updata test model --- source/tests/infer/deeppot_sea.pth | Bin 123401 -> 123025 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/source/tests/infer/deeppot_sea.pth b/source/tests/infer/deeppot_sea.pth index 6ac68ed7fa6e6ac815516951cd5fdb22f487abab..98aaa8a2ad0ccb1f462ff3475f28fea7d28e24fb 100644 GIT binary patch delta 36771 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 z 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 delta 37036 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 Date: Wed, 28 Feb 2024 00:47:28 -0500 Subject: [PATCH 098/117] fix LD_LIBRARY_PATH Signed-off-by: Jinzhe Zeng --- .github/workflows/test_cc.yml | 4 ++-- .github/workflows/test_cuda.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test_cc.yml b/.github/workflows/test_cc.yml index 2082e7e4cc..d98f8ca58d 100644 --- a/.github/workflows/test_cc.yml +++ b/.github/workflows/test_cc.yml @@ -56,7 +56,7 @@ jobs: TF_INTRA_OP_PARALLELISM_THREADS: 1 TF_INTER_OP_PARALLELISM_THREADS: 1 LAMMPS_PLUGIN_PATH: ${{ github.workspace }}/dp_test/lib/deepmd_lmp - LD_LIBRARY_PATH: ${{ github.workspace }}/dp_test/lib + LD_LIBRARY_PATH: ${{ github.workspace }}/dp_test/lib:${{ github.workspace }}/libtorch/lib if: ${{ !matrix.check_memleak }} # test ipi - run: pytest --cov=deepmd source/ipi/tests @@ -65,7 +65,7 @@ jobs: TF_INTRA_OP_PARALLELISM_THREADS: 1 TF_INTER_OP_PARALLELISM_THREADS: 1 PATH: ${{ github.workspace }}/dp_test/bin:$PATH - LD_LIBRARY_PATH: ${{ github.workspace }}/dp_test/lib + LD_LIBRARY_PATH: ${{ github.workspace }}/dp_test/lib:${{ github.workspace }}/libtorch/lib if: ${{ !matrix.check_memleak }} - uses: codecov/codecov-action@v4 env: diff --git a/.github/workflows/test_cuda.yml b/.github/workflows/test_cuda.yml index 9fb11c467b..915d983663 100644 --- a/.github/workflows/test_cuda.yml +++ b/.github/workflows/test_cuda.yml @@ -71,7 +71,7 @@ jobs: DP_VARIANT: cuda DP_USE_MPICH2: 1 - run: | - export LD_LIBRARY_PATH=$GITHUB_WORKSPACE/dp_test/lib:$CUDA_PATH/lib64:$LD_LIBRARY_PATH + export LD_LIBRARY_PATH=$GITHUB_WORKSPACE/dp_test/lib:$GITHUB_WORKSPACE/libtorch/lib:$CUDA_PATH/lib64:$LD_LIBRARY_PATH export PATH=$GITHUB_WORKSPACE/dp_test/bin:$PATH python -m pytest source/lmp/tests python -m pytest source/ipi/tests From 8d6c11cdda3e41ebee62335c2e186c3110cb9667 Mon Sep 17 00:00:00 2001 From: Jinzhe Zeng Date: Wed, 28 Feb 2024 00:47:52 -0500 Subject: [PATCH 099/117] fix codeql warning Signed-off-by: Jinzhe Zeng --- source/api_cc/src/DeepPot.cc | 1 - 1 file changed, 1 deletion(-) diff --git a/source/api_cc/src/DeepPot.cc b/source/api_cc/src/DeepPot.cc index e7e89b5cd5..442e2d90cc 100644 --- a/source/api_cc/src/DeepPot.cc +++ b/source/api_cc/src/DeepPot.cc @@ -52,7 +52,6 @@ void DeepPot::init(const std::string& model, throw deepmd::deepmd_exception("TensorFlow backend is not built"); #endif } else if (deepmd::DPBackend::PyTorch == backend) { - // throw deepmd::deepmd_exception("PyTorch backend is not supported yet"); #ifdef BUILD_PYTORCH dp = std::make_shared(model, gpu_rank, file_content); #else From 99dd474f40c62d9bb51d15fb154a6ebb0f52ccf1 Mon Sep 17 00:00:00 2001 From: Jinzhe Zeng Date: Wed, 28 Feb 2024 00:54:09 -0500 Subject: [PATCH 100/117] add tests for ipi and lammps Signed-off-by: Jinzhe Zeng --- source/ipi/tests/test_driver.py | 105 +++++ source/lmp/tests/test_lammps_pt.py | 695 +++++++++++++++++++++++++++++ 2 files changed, 800 insertions(+) create mode 100644 source/lmp/tests/test_lammps_pt.py diff --git a/source/ipi/tests/test_driver.py b/source/ipi/tests/test_driver.py index 1b2e1dd951..fd84f4d66d 100644 --- a/source/ipi/tests/test_driver.py +++ b/source/ipi/tests/test_driver.py @@ -251,3 +251,108 @@ def test_normalize_coords(self): ) expected_se = np.sum(self.expected_e.reshape([nframes, -1]), axis=1) np.testing.assert_almost_equal(ee.ravel(), expected_se.ravel(), default_places) + + +class TestDPIPIPt(TestDPIPI): + # copy from test_deeppot_a.py + @classmethod + def setUpClass(cls): + cls.model_file = "deeppot_sea.pth" + + def setUp(self): + super().setUp() + + self.expected_e = np.array( + [ + -93.016873944029, + -185.923296645958, + -185.927096544970, + -93.019371018039, + -185.926179995548, + -185.924351901852, + ] + ) + self.expected_f = np.array( + [ + 0.006277522211, + -0.001117962774, + 0.000618580445, + 0.009928999655, + 0.003026035654, + -0.006941982227, + 0.000667853212, + -0.002449963843, + 0.006506463508, + -0.007284129115, + 0.000530662205, + -0.000028806821, + 0.000068097781, + 0.006121331983, + -0.009019754602, + -0.009658343745, + -0.006110103225, + 0.008865499697, + ] + ) + self.expected_v = np.array( + [ + -0.000155238009, + 0.000116605516, + -0.007869862476, + 0.000465578340, + 0.008182547185, + -0.002398713212, + -0.008112887338, + -0.002423738425, + 0.007210716605, + -0.019203504012, + 0.001724938709, + 0.009909211091, + 0.001153857542, + -0.001600015103, + -0.000560024090, + 0.010727836276, + -0.001034836404, + -0.007973454377, + -0.021517399106, + -0.004064359664, + 0.004866398692, + -0.003360038617, + -0.007241406162, + 0.005920941051, + 0.004899151657, + 0.006290788591, + -0.006478820311, + 0.001921504710, + 0.001313470921, + -0.000304091236, + 0.001684345981, + 0.004124109256, + -0.006396084465, + -0.000701095618, + -0.006356507032, + 0.009818550859, + -0.015230664587, + -0.000110244376, + 0.000690319396, + 0.000045953023, + -0.005726548770, + 0.008769818495, + -0.000572380210, + 0.008860603423, + -0.013819348050, + -0.021227082558, + -0.004977781343, + 0.006646239696, + -0.005987066507, + -0.002767831232, + 0.003746502525, + 0.007697590397, + 0.003746130152, + -0.005172634748, + ] + ) + + @classmethod + def tearDownClass(cls): + cls.dp = None diff --git a/source/lmp/tests/test_lammps_pt.py b/source/lmp/tests/test_lammps_pt.py new file mode 100644 index 0000000000..bf1ef97e2b --- /dev/null +++ b/source/lmp/tests/test_lammps_pt.py @@ -0,0 +1,695 @@ +# SPDX-License-Identifier: LGPL-3.0-or-later +import os +import subprocess as sp +import sys +from pathlib import ( + Path, +) + +import constants +import numpy as np +import pytest +from lammps import ( + PyLammps, +) +from write_lmp_data import ( + write_lmp_data, +) + +pbtxt_file2 = ( + Path(__file__).parent.parent.parent / "tests" / "infer" / "deeppot-1.pbtxt" +) +pb_file = Path(__file__).parent.parent.parent / "tests" / "infer" / "deeppot_sea.pth" +pb_file2 = Path(__file__).parent / "graph2.pb" +system_file = Path(__file__).parent.parent.parent / "tests" +data_file = Path(__file__).parent / "data.lmp" +data_file_si = Path(__file__).parent / "data.si" +data_type_map_file = Path(__file__).parent / "data_type_map.lmp" +md_file = Path(__file__).parent / "md.out" + +# this is as the same as python and c++ tests, test_deeppot_a.py +expected_ae = np.array( + [ + -93.016873944029, + -185.923296645958, + -185.927096544970, + -93.019371018039, + -185.926179995548, + -185.924351901852, + ] +) +expected_e = np.sum(expected_ae) +expected_f = np.array( + [ + 0.006277522211, + -0.001117962774, + 0.000618580445, + 0.009928999655, + 0.003026035654, + -0.006941982227, + 0.000667853212, + -0.002449963843, + 0.006506463508, + -0.007284129115, + 0.000530662205, + -0.000028806821, + 0.000068097781, + 0.006121331983, + -0.009019754602, + -0.009658343745, + -0.006110103225, + 0.008865499697, + ] +).reshape(6, 3) + +expected_f2 = np.array( + [ + [-0.6454949, 1.72457783, 0.18897958], + [1.68936514, -0.36995299, -1.36044464], + [-1.09902692, -1.35487928, 1.17416702], + [1.68426111, -0.50835585, 0.98340415], + [0.05771758, 1.12515818, -1.77561531], + [-1.686822, -0.61654789, 0.78950921], + ] +) + +expected_v = -np.array( + [ + -0.000155238009, + 0.000116605516, + -0.007869862476, + 0.000465578340, + 0.008182547185, + -0.002398713212, + -0.008112887338, + -0.002423738425, + 0.007210716605, + -0.019203504012, + 0.001724938709, + 0.009909211091, + 0.001153857542, + -0.001600015103, + -0.000560024090, + 0.010727836276, + -0.001034836404, + -0.007973454377, + -0.021517399106, + -0.004064359664, + 0.004866398692, + -0.003360038617, + -0.007241406162, + 0.005920941051, + 0.004899151657, + 0.006290788591, + -0.006478820311, + 0.001921504710, + 0.001313470921, + -0.000304091236, + 0.001684345981, + 0.004124109256, + -0.006396084465, + -0.000701095618, + -0.006356507032, + 0.009818550859, + -0.015230664587, + -0.000110244376, + 0.000690319396, + 0.000045953023, + -0.005726548770, + 0.008769818495, + -0.000572380210, + 0.008860603423, + -0.013819348050, + -0.021227082558, + -0.004977781343, + 0.006646239696, + -0.005987066507, + -0.002767831232, + 0.003746502525, + 0.007697590397, + 0.003746130152, + -0.005172634748, + ] +).reshape(6, 9) +expected_v2 = -np.array( + [ + [ + -0.70008436, + -0.06399891, + 0.63678391, + -0.07642171, + -0.70580035, + 0.20506145, + 0.64098364, + 0.20305781, + -0.57906794, + ], + [ + -0.6372635, + 0.14315552, + 0.51952246, + 0.04604049, + -0.06003681, + -0.02688702, + 0.54489318, + -0.10951559, + -0.43730539, + ], + [ + -0.25090748, + -0.37466262, + 0.34085833, + -0.26690852, + -0.37676917, + 0.29080825, + 0.31600481, + 0.37558276, + -0.33251064, + ], + [ + -0.80195614, + -0.10273138, + 0.06935364, + -0.10429256, + -0.29693811, + 0.45643496, + 0.07247872, + 0.45604679, + -0.71048816, + ], + [ + -0.03840668, + -0.07680205, + 0.10940472, + -0.02374189, + -0.27610266, + 0.4336071, + 0.02465248, + 0.4290638, + -0.67496763, + ], + [ + -0.61475065, + -0.21163135, + 0.26652929, + -0.26134659, + -0.11560267, + 0.15415902, + 0.34343952, + 0.1589482, + -0.21370642, + ], + ] +).reshape(6, 9) + +box = np.array([0, 13, 0, 13, 0, 13, 0, 0, 0]) +coord = np.array( + [ + [12.83, 2.56, 2.18], + [12.09, 2.87, 2.74], + [0.25, 3.32, 1.68], + [3.36, 3.00, 1.81], + [3.51, 2.51, 2.60], + [4.27, 3.22, 1.56], + ] +) +type_OH = np.array([1, 2, 2, 1, 2, 2]) +type_HO = np.array([2, 1, 1, 2, 1, 1]) + + +sp.check_output( + "{} -m deepmd convert-from pbtxt -i {} -o {}".format( + sys.executable, + pbtxt_file2.resolve(), + pb_file2.resolve(), + ).split() +) + + +def setup_module(): + write_lmp_data(box, coord, type_OH, data_file) + write_lmp_data(box, coord, type_HO, data_type_map_file) + write_lmp_data( + box * constants.dist_metal2si, + coord * constants.dist_metal2si, + type_OH, + data_file_si, + ) + + +def teardown_module(): + os.remove(data_file) + os.remove(data_type_map_file) + + +def _lammps(data_file, units="metal") -> PyLammps: + lammps = PyLammps() + lammps.units(units) + lammps.boundary("p p p") + lammps.atom_style("atomic") + if units == "metal" or units == "real": + lammps.neighbor("2.0 bin") + elif units == "si": + lammps.neighbor("2.0e-10 bin") + else: + raise ValueError("units should be metal, real, or si") + lammps.neigh_modify("every 10 delay 0 check no") + lammps.read_data(data_file.resolve()) + if units == "metal" or units == "real": + lammps.mass("1 16") + lammps.mass("2 2") + elif units == "si": + lammps.mass("1 %.10e" % (16 * constants.mass_metal2si)) + lammps.mass("2 %.10e" % (2 * constants.mass_metal2si)) + else: + raise ValueError("units should be metal, real, or si") + if units == "metal": + lammps.timestep(0.0005) + elif units == "real": + lammps.timestep(0.5) + elif units == "si": + lammps.timestep(5e-16) + else: + raise ValueError("units should be metal, real, or si") + lammps.fix("1 all nve") + return lammps + + +@pytest.fixture +def lammps(): + lmp = _lammps(data_file=data_file) + yield lmp + lmp.close() + + +@pytest.fixture +def lammps_type_map(): + lmp = _lammps(data_file=data_type_map_file) + yield lmp + lmp.close() + + +@pytest.fixture +def lammps_real(): + lmp = _lammps(data_file=data_file, units="real") + yield lmp + lmp.close() + + +@pytest.fixture +def lammps_si(): + lmp = _lammps(data_file=data_file_si, units="si") + yield lmp + lmp.close() + + +def test_pair_deepmd(lammps): + lammps.pair_style(f"deepmd {pb_file.resolve()}") + lammps.pair_coeff("* *") + lammps.run(0) + assert lammps.eval("pe") == pytest.approx(expected_e) + for ii in range(6): + assert lammps.atoms[ii].force == pytest.approx( + expected_f[lammps.atoms[ii].id - 1] + ) + lammps.run(1) + + +def test_pair_deepmd_virial(lammps): + lammps.pair_style(f"deepmd {pb_file.resolve()}") + lammps.pair_coeff("* *") + lammps.compute("virial all centroid/stress/atom NULL pair") + for ii in range(9): + jj = [0, 4, 8, 3, 6, 7, 1, 2, 5][ii] + lammps.variable(f"virial{jj} atom c_virial[{ii+1}]") + lammps.dump( + "1 all custom 1 dump id " + " ".join([f"v_virial{ii}" for ii in range(9)]) + ) + lammps.run(0) + assert lammps.eval("pe") == pytest.approx(expected_e) + for ii in range(6): + assert lammps.atoms[ii].force == pytest.approx( + expected_f[lammps.atoms[ii].id - 1] + ) + idx_map = lammps.lmp.numpy.extract_atom("id") - 1 + for ii in range(9): + assert np.array( + lammps.variables[f"virial{ii}"].value + ) / constants.nktv2p == pytest.approx(expected_v[idx_map, ii]) + + +def test_pair_deepmd_model_devi(lammps): + lammps.pair_style( + "deepmd {} {} out_file {} out_freq 1 atomic".format( + pb_file.resolve(), pb_file2.resolve(), md_file.resolve() + ) + ) + lammps.pair_coeff("* *") + lammps.run(0) + assert lammps.eval("pe") == pytest.approx(expected_e) + for ii in range(6): + assert lammps.atoms[ii].force == pytest.approx( + expected_f[lammps.atoms[ii].id - 1] + ) + # load model devi + md = np.loadtxt(md_file.resolve()) + expected_md_f = np.linalg.norm(np.std([expected_f, expected_f2], axis=0), axis=1) + assert md[7:] == pytest.approx(expected_md_f) + assert md[4] == pytest.approx(np.max(expected_md_f)) + assert md[5] == pytest.approx(np.min(expected_md_f)) + assert md[6] == pytest.approx(np.mean(expected_md_f)) + expected_md_v = ( + np.std([np.sum(expected_v, axis=0), np.sum(expected_v2, axis=0)], axis=0) / 6 + ) + assert md[1] == pytest.approx(np.max(expected_md_v)) + assert md[2] == pytest.approx(np.min(expected_md_v)) + assert md[3] == pytest.approx(np.sqrt(np.mean(np.square(expected_md_v)))) + + +def test_pair_deepmd_model_devi_virial(lammps): + lammps.pair_style( + "deepmd {} {} out_file {} out_freq 1 atomic".format( + pb_file.resolve(), pb_file2.resolve(), md_file.resolve() + ) + ) + lammps.pair_coeff("* *") + lammps.compute("virial all centroid/stress/atom NULL pair") + for ii in range(9): + jj = [0, 4, 8, 3, 6, 7, 1, 2, 5][ii] + lammps.variable(f"virial{jj} atom c_virial[{ii+1}]") + lammps.dump( + "1 all custom 1 dump id " + " ".join([f"v_virial{ii}" for ii in range(9)]) + ) + lammps.run(0) + assert lammps.eval("pe") == pytest.approx(expected_e) + for ii in range(6): + assert lammps.atoms[ii].force == pytest.approx( + expected_f[lammps.atoms[ii].id - 1] + ) + idx_map = lammps.lmp.numpy.extract_atom("id") - 1 + for ii in range(9): + assert np.array( + lammps.variables[f"virial{ii}"].value + ) / constants.nktv2p == pytest.approx(expected_v[idx_map, ii]) + # load model devi + md = np.loadtxt(md_file.resolve()) + expected_md_f = np.linalg.norm(np.std([expected_f, expected_f2], axis=0), axis=1) + assert md[7:] == pytest.approx(expected_md_f) + assert md[4] == pytest.approx(np.max(expected_md_f)) + assert md[5] == pytest.approx(np.min(expected_md_f)) + assert md[6] == pytest.approx(np.mean(expected_md_f)) + expected_md_v = ( + np.std([np.sum(expected_v, axis=0), np.sum(expected_v2, axis=0)], axis=0) / 6 + ) + assert md[1] == pytest.approx(np.max(expected_md_v)) + assert md[2] == pytest.approx(np.min(expected_md_v)) + assert md[3] == pytest.approx(np.sqrt(np.mean(np.square(expected_md_v)))) + + +def test_pair_deepmd_model_devi_atomic_relative(lammps): + relative = 1.0 + lammps.pair_style( + "deepmd {} {} out_file {} out_freq 1 atomic relative {}".format( + pb_file.resolve(), pb_file2.resolve(), md_file.resolve(), relative + ) + ) + lammps.pair_coeff("* *") + lammps.run(0) + assert lammps.eval("pe") == pytest.approx(expected_e) + for ii in range(6): + assert lammps.atoms[ii].force == pytest.approx( + expected_f[lammps.atoms[ii].id - 1] + ) + # load model devi + md = np.loadtxt(md_file.resolve()) + norm = np.linalg.norm(np.mean([expected_f, expected_f2], axis=0), axis=1) + expected_md_f = np.linalg.norm(np.std([expected_f, expected_f2], axis=0), axis=1) + expected_md_f /= norm + relative + assert md[7:] == pytest.approx(expected_md_f) + assert md[4] == pytest.approx(np.max(expected_md_f)) + assert md[5] == pytest.approx(np.min(expected_md_f)) + assert md[6] == pytest.approx(np.mean(expected_md_f)) + expected_md_v = ( + np.std([np.sum(expected_v, axis=0), np.sum(expected_v2, axis=0)], axis=0) / 6 + ) + assert md[1] == pytest.approx(np.max(expected_md_v)) + assert md[2] == pytest.approx(np.min(expected_md_v)) + assert md[3] == pytest.approx(np.sqrt(np.mean(np.square(expected_md_v)))) + + +def test_pair_deepmd_model_devi_atomic_relative_v(lammps): + relative = 1.0 + lammps.pair_style( + "deepmd {} {} out_file {} out_freq 1 atomic relative_v {}".format( + pb_file.resolve(), pb_file2.resolve(), md_file.resolve(), relative + ) + ) + lammps.pair_coeff("* *") + lammps.run(0) + assert lammps.eval("pe") == pytest.approx(expected_e) + for ii in range(6): + assert lammps.atoms[ii].force == pytest.approx( + expected_f[lammps.atoms[ii].id - 1] + ) + md = np.loadtxt(md_file.resolve()) + expected_md_f = np.linalg.norm(np.std([expected_f, expected_f2], axis=0), axis=1) + assert md[7:] == pytest.approx(expected_md_f) + assert md[4] == pytest.approx(np.max(expected_md_f)) + assert md[5] == pytest.approx(np.min(expected_md_f)) + assert md[6] == pytest.approx(np.mean(expected_md_f)) + expected_md_v = ( + np.std([np.sum(expected_v, axis=0), np.sum(expected_v2, axis=0)], axis=0) / 6 + ) + norm = ( + np.abs( + np.mean([np.sum(expected_v, axis=0), np.sum(expected_v2, axis=0)], axis=0) + ) + / 6 + ) + expected_md_v /= norm + relative + assert md[1] == pytest.approx(np.max(expected_md_v)) + assert md[2] == pytest.approx(np.min(expected_md_v)) + assert md[3] == pytest.approx(np.sqrt(np.mean(np.square(expected_md_v)))) + + +def test_pair_deepmd_type_map(lammps_type_map): + lammps_type_map.pair_style(f"deepmd {pb_file.resolve()}") + lammps_type_map.pair_coeff("* * H O") + lammps_type_map.run(0) + assert lammps_type_map.eval("pe") == pytest.approx(expected_e) + for ii in range(6): + assert lammps_type_map.atoms[ii].force == pytest.approx( + expected_f[lammps_type_map.atoms[ii].id - 1] + ) + lammps_type_map.run(1) + + +def test_pair_deepmd_real(lammps_real): + lammps_real.pair_style(f"deepmd {pb_file.resolve()}") + lammps_real.pair_coeff("* *") + lammps_real.run(0) + assert lammps_real.eval("pe") == pytest.approx( + expected_e * constants.ener_metal2real + ) + for ii in range(6): + assert lammps_real.atoms[ii].force == pytest.approx( + expected_f[lammps_real.atoms[ii].id - 1] * constants.force_metal2real + ) + lammps_real.run(1) + + +def test_pair_deepmd_virial_real(lammps_real): + lammps_real.pair_style(f"deepmd {pb_file.resolve()}") + lammps_real.pair_coeff("* *") + lammps_real.compute("virial all centroid/stress/atom NULL pair") + for ii in range(9): + jj = [0, 4, 8, 3, 6, 7, 1, 2, 5][ii] + lammps_real.variable(f"virial{jj} atom c_virial[{ii+1}]") + lammps_real.dump( + "1 all custom 1 dump id " + " ".join([f"v_virial{ii}" for ii in range(9)]) + ) + lammps_real.run(0) + assert lammps_real.eval("pe") == pytest.approx( + expected_e * constants.ener_metal2real + ) + for ii in range(6): + assert lammps_real.atoms[ii].force == pytest.approx( + expected_f[lammps_real.atoms[ii].id - 1] * constants.force_metal2real + ) + idx_map = lammps_real.lmp.numpy.extract_atom("id") - 1 + for ii in range(9): + assert np.array( + lammps_real.variables[f"virial{ii}"].value + ) / constants.nktv2p_real == pytest.approx( + expected_v[idx_map, ii] * constants.ener_metal2real + ) + + +def test_pair_deepmd_model_devi_real(lammps_real): + lammps_real.pair_style( + "deepmd {} {} out_file {} out_freq 1 atomic".format( + pb_file.resolve(), pb_file2.resolve(), md_file.resolve() + ) + ) + lammps_real.pair_coeff("* *") + lammps_real.run(0) + assert lammps_real.eval("pe") == pytest.approx( + expected_e * constants.ener_metal2real + ) + for ii in range(6): + assert lammps_real.atoms[ii].force == pytest.approx( + expected_f[lammps_real.atoms[ii].id - 1] * constants.force_metal2real + ) + # load model devi + md = np.loadtxt(md_file.resolve()) + expected_md_f = np.linalg.norm(np.std([expected_f, expected_f2], axis=0), axis=1) + assert md[7:] == pytest.approx(expected_md_f * constants.force_metal2real) + assert md[4] == pytest.approx(np.max(expected_md_f) * constants.force_metal2real) + assert md[5] == pytest.approx(np.min(expected_md_f) * constants.force_metal2real) + assert md[6] == pytest.approx(np.mean(expected_md_f) * constants.force_metal2real) + expected_md_v = ( + np.std([np.sum(expected_v, axis=0), np.sum(expected_v2, axis=0)], axis=0) / 6 + ) + assert md[1] == pytest.approx(np.max(expected_md_v) * constants.ener_metal2real) + assert md[2] == pytest.approx(np.min(expected_md_v) * constants.ener_metal2real) + assert md[3] == pytest.approx( + np.sqrt(np.mean(np.square(expected_md_v))) * constants.ener_metal2real + ) + + +def test_pair_deepmd_model_devi_virial_real(lammps_real): + lammps_real.pair_style( + "deepmd {} {} out_file {} out_freq 1 atomic".format( + pb_file.resolve(), pb_file2.resolve(), md_file.resolve() + ) + ) + lammps_real.pair_coeff("* *") + lammps_real.compute("virial all centroid/stress/atom NULL pair") + for ii in range(9): + jj = [0, 4, 8, 3, 6, 7, 1, 2, 5][ii] + lammps_real.variable(f"virial{jj} atom c_virial[{ii+1}]") + lammps_real.dump( + "1 all custom 1 dump id " + " ".join([f"v_virial{ii}" for ii in range(9)]) + ) + lammps_real.run(0) + assert lammps_real.eval("pe") == pytest.approx( + expected_e * constants.ener_metal2real + ) + for ii in range(6): + assert lammps_real.atoms[ii].force == pytest.approx( + expected_f[lammps_real.atoms[ii].id - 1] * constants.force_metal2real + ) + idx_map = lammps_real.lmp.numpy.extract_atom("id") - 1 + for ii in range(9): + assert np.array( + lammps_real.variables[f"virial{ii}"].value + ) / constants.nktv2p_real == pytest.approx( + expected_v[idx_map, ii] * constants.ener_metal2real + ) + # load model devi + md = np.loadtxt(md_file.resolve()) + expected_md_f = np.linalg.norm(np.std([expected_f, expected_f2], axis=0), axis=1) + assert md[7:] == pytest.approx(expected_md_f * constants.force_metal2real) + assert md[4] == pytest.approx(np.max(expected_md_f) * constants.force_metal2real) + assert md[5] == pytest.approx(np.min(expected_md_f) * constants.force_metal2real) + assert md[6] == pytest.approx(np.mean(expected_md_f) * constants.force_metal2real) + expected_md_v = ( + np.std([np.sum(expected_v, axis=0), np.sum(expected_v2, axis=0)], axis=0) / 6 + ) + assert md[1] == pytest.approx(np.max(expected_md_v) * constants.ener_metal2real) + assert md[2] == pytest.approx(np.min(expected_md_v) * constants.ener_metal2real) + assert md[3] == pytest.approx( + np.sqrt(np.mean(np.square(expected_md_v))) * constants.ener_metal2real + ) + + +def test_pair_deepmd_model_devi_atomic_relative_real(lammps_real): + relative = 1.0 + lammps_real.pair_style( + "deepmd {} {} out_file {} out_freq 1 atomic relative {}".format( + pb_file.resolve(), + pb_file2.resolve(), + md_file.resolve(), + relative * constants.force_metal2real, + ) + ) + lammps_real.pair_coeff("* *") + lammps_real.run(0) + assert lammps_real.eval("pe") == pytest.approx( + expected_e * constants.ener_metal2real + ) + for ii in range(6): + assert lammps_real.atoms[ii].force == pytest.approx( + expected_f[lammps_real.atoms[ii].id - 1] * constants.force_metal2real + ) + # load model devi + md = np.loadtxt(md_file.resolve()) + norm = np.linalg.norm(np.mean([expected_f, expected_f2], axis=0), axis=1) + expected_md_f = np.linalg.norm(np.std([expected_f, expected_f2], axis=0), axis=1) + expected_md_f /= norm + relative + assert md[7:] == pytest.approx(expected_md_f * constants.force_metal2real) + assert md[4] == pytest.approx(np.max(expected_md_f) * constants.force_metal2real) + assert md[5] == pytest.approx(np.min(expected_md_f) * constants.force_metal2real) + assert md[6] == pytest.approx(np.mean(expected_md_f) * constants.force_metal2real) + expected_md_v = ( + np.std([np.sum(expected_v, axis=0), np.sum(expected_v2, axis=0)], axis=0) / 6 + ) + assert md[1] == pytest.approx(np.max(expected_md_v) * constants.ener_metal2real) + assert md[2] == pytest.approx(np.min(expected_md_v) * constants.ener_metal2real) + assert md[3] == pytest.approx( + np.sqrt(np.mean(np.square(expected_md_v))) * constants.ener_metal2real + ) + + +def test_pair_deepmd_model_devi_atomic_relative_v_real(lammps_real): + relative = 1.0 + lammps_real.pair_style( + "deepmd {} {} out_file {} out_freq 1 atomic relative_v {}".format( + pb_file.resolve(), + pb_file2.resolve(), + md_file.resolve(), + relative * constants.ener_metal2real, + ) + ) + lammps_real.pair_coeff("* *") + lammps_real.run(0) + assert lammps_real.eval("pe") == pytest.approx( + expected_e * constants.ener_metal2real + ) + for ii in range(6): + assert lammps_real.atoms[ii].force == pytest.approx( + expected_f[lammps_real.atoms[ii].id - 1] * constants.force_metal2real + ) + md = np.loadtxt(md_file.resolve()) + expected_md_f = np.linalg.norm(np.std([expected_f, expected_f2], axis=0), axis=1) + assert md[7:] == pytest.approx(expected_md_f * constants.force_metal2real) + assert md[4] == pytest.approx(np.max(expected_md_f) * constants.force_metal2real) + assert md[5] == pytest.approx(np.min(expected_md_f) * constants.force_metal2real) + assert md[6] == pytest.approx(np.mean(expected_md_f) * constants.force_metal2real) + expected_md_v = ( + np.std([np.sum(expected_v, axis=0), np.sum(expected_v2, axis=0)], axis=0) / 6 + ) + norm = ( + np.abs( + np.mean([np.sum(expected_v, axis=0), np.sum(expected_v2, axis=0)], axis=0) + ) + / 6 + ) + expected_md_v /= norm + relative + assert md[1] == pytest.approx(np.max(expected_md_v) * constants.ener_metal2real) + assert md[2] == pytest.approx(np.min(expected_md_v) * constants.ener_metal2real) + assert md[3] == pytest.approx( + np.sqrt(np.mean(np.square(expected_md_v))) * constants.ener_metal2real + ) + + +def test_pair_deepmd_si(lammps_si): + lammps_si.pair_style(f"deepmd {pb_file.resolve()}") + lammps_si.pair_coeff("* *") + lammps_si.run(0) + assert lammps_si.eval("pe") == pytest.approx(expected_e * constants.ener_metal2si) + for ii in range(6): + assert lammps_si.atoms[ii].force == pytest.approx( + expected_f[lammps_si.atoms[ii].id - 1] * constants.force_metal2si + ) + lammps_si.run(1) From f4a3271eb8b0c277e080a3c5879b77cde5ebf8ca Mon Sep 17 00:00:00 2001 From: Jinzhe Zeng Date: Wed, 28 Feb 2024 01:17:00 -0500 Subject: [PATCH 101/117] fix model path Signed-off-by: Jinzhe Zeng --- source/ipi/tests/test_driver.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/source/ipi/tests/test_driver.py b/source/ipi/tests/test_driver.py index fd84f4d66d..20e721f686 100644 --- a/source/ipi/tests/test_driver.py +++ b/source/ipi/tests/test_driver.py @@ -254,10 +254,9 @@ def test_normalize_coords(self): class TestDPIPIPt(TestDPIPI): - # copy from test_deeppot_a.py @classmethod def setUpClass(cls): - cls.model_file = "deeppot_sea.pth" + cls.model_file = str(tests_path / "infer" / "deeppot_sea.pth") def setUp(self): super().setUp() From 1e8bdffc4b773b19b1f3a323915558df35109f60 Mon Sep 17 00:00:00 2001 From: Jinzhe Zeng Date: Wed, 28 Feb 2024 01:31:19 -0500 Subject: [PATCH 102/117] consistent box Signed-off-by: Jinzhe Zeng --- source/ipi/tests/test_driver.py | 1 + 1 file changed, 1 insertion(+) diff --git a/source/ipi/tests/test_driver.py b/source/ipi/tests/test_driver.py index 20e721f686..b0fbf53b01 100644 --- a/source/ipi/tests/test_driver.py +++ b/source/ipi/tests/test_driver.py @@ -261,6 +261,7 @@ def setUpClass(cls): def setUp(self): super().setUp() + self.box = np.array([13.0, 0.0, 0.0, 0.0, 13.0, 0.0, 0.0, 0.0, 13.0]) self.expected_e = np.array( [ -93.016873944029, From da18860b9d48a20dce9c362c6c1ac3a052692f63 Mon Sep 17 00:00:00 2001 From: Jinzhe Zeng Date: Wed, 28 Feb 2024 02:07:37 -0500 Subject: [PATCH 103/117] remove commented codes Co-authored-by: Han Wang <92130845+wanghan-iapcm@users.noreply.github.com> Signed-off-by: Jinzhe Zeng --- source/api_cc/src/DeepPotPT.cc | 40 ---------------------------------- 1 file changed, 40 deletions(-) diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index 690ee91817..f05e27b9b2 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -146,28 +146,6 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, cpu_atom_virial_.data_ptr(), cpu_atom_virial_.data_ptr() + cpu_atom_virial_.numel()); } -// template void DeepPotPT::compute( -// ENERGYTYPE& ener, -// std::vector& force, -// std::vector& virial, -// std::vector& atom_energy, -// std::vector& atom_virial, -// const std::vector& coord, -// const std::vector& atype, -// const std::vector& box, -// const InputNlist& lmp_list, -// const int& ago); -// template void DeepPotPT::compute( -// ENERGYTYPE& ener, -// std::vector& force, -// std::vector& virial, -// std::vector& atom_energy, -// std::vector& atom_virial, -// const std::vector& coord, -// const std::vector& atype, -// const std::vector& box, -// const InputNlist& lmp_list, -// const int& ago); template void DeepPotPT::compute>( std::vector& ener, std::vector& force, @@ -267,24 +245,6 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, cpu_atom_virial_.data_ptr() + cpu_atom_virial_.numel()); } -// template void DeepPotPT::compute( -// ENERGYTYPE& ener, -// std::vector& force, -// std::vector& virial, -// std::vector& atom_energy, -// std::vector& atom_virial, -// const std::vector& coord, -// const std::vector& atype, -// const std::vector& box); -// template void DeepPotPT::compute( -// ENERGYTYPE& ener, -// std::vector& force, -// std::vector& virial, -// std::vector& atom_energy, -// std::vector& atom_virial, -// const std::vector& coord, -// const std::vector& atype, -// const std::vector& box); template void DeepPotPT::compute>( std::vector& ener, std::vector& force, From 6e8b6ff17461f748dce11eb56e4bcfc4e75a943e Mon Sep 17 00:00:00 2001 From: Lysithea Date: Fri, 1 Mar 2024 12:39:41 +0800 Subject: [PATCH 104/117] add type sel --- .../model/atomic_model/base_atomic_model.py | 1 + deepmd/pt/model/model/make_model.py | 1 - source/api_cc/include/DeepPotPT.h | 4 +- source/api_cc/include/common.h | 1 + source/api_cc/src/DeepPotPT.cc | 72 ++++++++++++++----- source/api_cc/src/common.cc | 10 +++ 6 files changed, 70 insertions(+), 19 deletions(-) diff --git a/deepmd/pt/model/atomic_model/base_atomic_model.py b/deepmd/pt/model/atomic_model/base_atomic_model.py index d6de3dfc88..f8b737b58e 100644 --- a/deepmd/pt/model/atomic_model/base_atomic_model.py +++ b/deepmd/pt/model/atomic_model/base_atomic_model.py @@ -54,6 +54,7 @@ def reinit_pair_exclude( # export public methods that are not abstract get_nsel = torch.jit.export(BaseAtomicModel_.get_nsel) get_nnei = torch.jit.export(BaseAtomicModel_.get_nnei) + get_ntypes = torch.jit.export(BaseAtomicModel_.get_ntypes) @torch.jit.export def get_model_def_script(self) -> str: diff --git a/deepmd/pt/model/model/make_model.py b/deepmd/pt/model/model/make_model.py index 1f598ce862..57e65a7591 100644 --- a/deepmd/pt/model/model/make_model.py +++ b/deepmd/pt/model/model/make_model.py @@ -299,7 +299,6 @@ def output_type_cast( ) return model_ret - @torch.jit.export def format_nlist( self, extended_coord: torch.Tensor, diff --git a/source/api_cc/include/DeepPotPT.h b/source/api_cc/include/DeepPotPT.h index d50d338d33..4eba536786 100644 --- a/source/api_cc/include/DeepPotPT.h +++ b/source/api_cc/include/DeepPotPT.h @@ -106,7 +106,7 @@ class DeepPotPT : public DeepPotBase { const std::vector& coord, const std::vector& atype, const std::vector& box, - // const int nghost, + const int nghost, const InputNlist& lmp_list, const int& ago, const std::vector& fparam = std::vector(), @@ -322,7 +322,7 @@ class DeepPotPT : public DeepPotBase { // copy neighbor list info from host torch::jit::script::Module module; double rcut; - NeighborListDataPT nlist_data; + NeighborListData nlist_data; int max_num_neighbors; int gpu_id; bool gpu_enabled; diff --git a/source/api_cc/include/common.h b/source/api_cc/include/common.h index 72382169f8..4743336e0c 100644 --- a/source/api_cc/include/common.h +++ b/source/api_cc/include/common.h @@ -32,6 +32,7 @@ struct NeighborListData { void shuffle(const deepmd::AtomMap& map); void shuffle_exclude_empty(const std::vector& fwd_map); void make_inlist(InputNlist& inlist); + void padding(); }; /** diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index 9514a9769c..57249a9886 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -4,6 +4,17 @@ #include "common.h" using namespace deepmd; +torch::Tensor createNlistTensor(const std::vector>& data) { + std::vector row_tensors; + + for (const auto& row : data) { + torch::Tensor row_tensor = torch::tensor(row, torch::kInt32).unsqueeze(0); + row_tensors.push_back(row_tensor); + } + + torch::Tensor tensor = torch::cat(row_tensors, 0).unsqueeze(0); + return tensor; +} DeepPotPT::DeepPotPT() : inited(false) {} DeepPotPT::DeepPotPT(const std::string& model, const int& gpu_rank, @@ -60,7 +71,7 @@ void DeepPotPT::init(const std::string& model, auto rcut_ = module.run_method("get_rcut").toDouble(); rcut = static_cast(rcut_); - ntypes = 0; + ntypes = module.run_method("get_ntypes").toInt(); ntypes_spin = 0; dfparam = module.run_method("get_dim_fparam").toInt(); daparam = module.run_method("get_dim_aparam").toInt(); @@ -78,6 +89,7 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, const std::vector& coord, const std::vector& atype, const std::vector& box, + const int nghost, const InputNlist& lmp_list, const int& ago, const std::vector& fparam, @@ -86,7 +98,6 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, if (!gpu_enabled) { device = torch::Device(torch::kCPU); } - std::vector coord_wrapped = coord; int natoms = atype.size(); auto options = torch::TensorOptions().dtype(torch::kFloat64); torch::ScalarType floatType = torch::kFloat64; @@ -96,18 +107,32 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, } auto int_options = torch::TensorOptions().dtype(torch::kInt64); auto int32_options = torch::TensorOptions().dtype(torch::kInt32); + + // select real atoms + std::vector dcoord, dforce, aparam_, datom_energy, datom_virial; + std::vector datype, fwd_map, bkw_map; + int nghost_real, nall_real, nloc_real; + int nall = natoms; + select_real_atoms_coord(dcoord, datype, aparam_, nghost_real, fwd_map, bkw_map, + nall_real, nloc_real, coord, atype, aparam, + nghost, ntypes, 1, daparam, nall, aparam_nall); + + std::vector coord_wrapped = dcoord; at::Tensor coord_wrapped_Tensor = torch::from_blob(coord_wrapped.data(), {1, natoms, 3}, options) .to(device); - std::vector atype_64(atype.begin(), atype.end()); + std::vector atype_64(datype.begin(), datype.end()); at::Tensor atype_Tensor = torch::from_blob(atype_64.data(), {1, natoms}, int_options).to(device); if (ago == 0) { - nlist_data.copy_from_nlist(lmp_list, max_num_neighbors); + nlist_data.copy_from_nlist(lmp_list); + nlist_data.shuffle_exclude_empty(fwd_map); + nlist_data.padding(); } - at::Tensor firstneigh = - torch::from_blob(nlist_data.jlist.data(), - {1, lmp_list.inum, max_num_neighbors}, int32_options); + // at::Tensor firstneigh = + // torch::from_blob(nlist_data.jlist.data(), + // {1, lmp_list.inum, max_num_neighbors}, int32_options); + at::Tensor firstneigh = createNlistTensor(nlist_data.jlist); firstneigh_tensor = firstneigh.to(torch::kInt64).to(device); bool do_atom_virial_tensor = true; c10::optional optional_tensor; @@ -119,11 +144,11 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, .to(device); } c10::optional aparam_tensor; - if (!aparam.empty()) { + if (!aparam_.empty()) { aparam_tensor = - torch::from_blob(const_cast(aparam.data()), + torch::from_blob(const_cast(aparam_.data()), {1, lmp_list.inum, - static_cast(aparam.size()) / lmp_list.inum}, + static_cast(aparam_.size()) / lmp_list.inum}, options) .to(device); } @@ -145,13 +170,13 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, torch::Tensor flat_atom_energy_ = atom_energy_.toTensor().view({-1}).to(floatType); torch::Tensor cpu_atom_energy_ = flat_atom_energy_.to(torch::kCPU); - atom_energy.resize(natoms, 0.0); // resize to nall to be consistenet with TF. - atom_energy.assign( + datom_energy.resize(natoms, 0.0); // resize to nall to be consistenet with TF. + datom_energy.assign( cpu_atom_energy_.data_ptr(), cpu_atom_energy_.data_ptr() + cpu_atom_energy_.numel()); torch::Tensor flat_force_ = force_.toTensor().view({-1}).to(floatType); torch::Tensor cpu_force_ = flat_force_.to(torch::kCPU); - force.assign(cpu_force_.data_ptr(), + dforce.assign(cpu_force_.data_ptr(), cpu_force_.data_ptr() + cpu_force_.numel()); torch::Tensor flat_virial_ = virial_.toTensor().view({-1}).to(floatType); torch::Tensor cpu_virial_ = flat_virial_.to(torch::kCPU); @@ -160,9 +185,21 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, torch::Tensor flat_atom_virial_ = atom_virial_.toTensor().view({-1}).to(floatType); torch::Tensor cpu_atom_virial_ = flat_atom_virial_.to(torch::kCPU); - atom_virial.assign( + datom_virial.assign( cpu_atom_virial_.data_ptr(), cpu_atom_virial_.data_ptr() + cpu_atom_virial_.numel()); + + int nframes = 1; + // bkw map + force.resize(static_cast(nframes) * fwd_map.size() * 3); + atom_energy.resize(static_cast(nframes) * fwd_map.size()); + atom_virial.resize(static_cast(nframes) * fwd_map.size() * 9); + select_map(force, dforce, bkw_map, 3, nframes, fwd_map.size(), + nall_real); + select_map(atom_energy, datom_energy, bkw_map, 1, nframes, + fwd_map.size(), nall_real); + select_map(atom_virial, datom_virial, bkw_map, 9, nframes, + fwd_map.size(), nall_real); } template void DeepPotPT::compute>( std::vector& ener, @@ -173,6 +210,7 @@ template void DeepPotPT::compute>( const std::vector& coord, const std::vector& atype, const std::vector& box, + const int nghost, const InputNlist& lmp_list, const int& ago, const std::vector& fparam, @@ -186,6 +224,7 @@ template void DeepPotPT::compute>( const std::vector& coord, const std::vector& atype, const std::vector& box, + const int nghost, const InputNlist& lmp_list, const int& ago, const std::vector& fparam, @@ -312,6 +351,7 @@ void DeepPotPT::get_type_map(std::string& type_map) { } } + // forward to template method void DeepPotPT::computew(std::vector& ener, std::vector& force, @@ -353,7 +393,7 @@ void DeepPotPT::computew(std::vector& ener, const std::vector& fparam, const std::vector& aparam) { compute(ener, force, virial, atom_energy, atom_virial, coord, atype, box, - inlist, ago, fparam, aparam); + nghost,inlist, ago, fparam, aparam); } void DeepPotPT::computew(std::vector& ener, std::vector& force, @@ -369,7 +409,7 @@ void DeepPotPT::computew(std::vector& ener, const std::vector& fparam, const std::vector& aparam) { compute(ener, force, virial, atom_energy, atom_virial, coord, atype, box, - inlist, ago, fparam, aparam); + nghost,inlist, ago, fparam, aparam); } void DeepPotPT::computew_mixed_type(std::vector& ener, std::vector& force, diff --git a/source/api_cc/src/common.cc b/source/api_cc/src/common.cc index d2923c8d9e..a0ae407991 100644 --- a/source/api_cc/src/common.cc +++ b/source/api_cc/src/common.cc @@ -293,6 +293,16 @@ void deepmd::NeighborListData::shuffle_exclude_empty( ilist = new_ilist; jlist = new_jlist; } +void deepmd::NeighborListData::padding(){ + size_t max_length = 0; + for (const auto& row : jlist) { + max_length = std::max(max_length, row.size()); + } + + for (int i = 0; i < jlist.size();i++) { + jlist[i].resize(max_length, -1); + } +} void deepmd::NeighborListData::make_inlist(InputNlist& inlist) { int nloc = ilist.size(); From 504e657238d87f53e8618a96812a04de0b8ec6be Mon Sep 17 00:00:00 2001 From: Lysithea Date: Fri, 1 Mar 2024 12:43:01 +0800 Subject: [PATCH 105/117] fix merge error --- deepmd/pt/model/model/make_model.py | 1 - 1 file changed, 1 deletion(-) diff --git a/deepmd/pt/model/model/make_model.py b/deepmd/pt/model/model/make_model.py index 57e65a7591..4f35acb60e 100644 --- a/deepmd/pt/model/model/make_model.py +++ b/deepmd/pt/model/model/make_model.py @@ -201,7 +201,6 @@ def forward_common_lower( the result dict, defined by the `FittingOutputDef`. """ - extended_coord = extended_coord.to(env.GLOBAL_PT_FLOAT_PRECISION) nframes, nall = extended_atype.shape[:2] extended_coord = extended_coord.view(nframes, -1, 3) nlist = self.format_nlist(extended_coord, extended_atype, nlist) From b64ce348a7ecdd96f506e7b9ef397a6bd448c306 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 1 Mar 2024 04:44:49 +0000 Subject: [PATCH 106/117] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- source/api_cc/src/DeepPotPT.cc | 44 +++++++++++++++++----------------- source/api_cc/src/common.cc | 14 +++++------ 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index 57249a9886..d4b77125db 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -5,15 +5,15 @@ #include "common.h" using namespace deepmd; torch::Tensor createNlistTensor(const std::vector>& data) { - std::vector row_tensors; + std::vector row_tensors; - for (const auto& row : data) { - torch::Tensor row_tensor = torch::tensor(row, torch::kInt32).unsqueeze(0); - row_tensors.push_back(row_tensor); - } + for (const auto& row : data) { + torch::Tensor row_tensor = torch::tensor(row, torch::kInt32).unsqueeze(0); + row_tensors.push_back(row_tensor); + } - torch::Tensor tensor = torch::cat(row_tensors, 0).unsqueeze(0); - return tensor; + torch::Tensor tensor = torch::cat(row_tensors, 0).unsqueeze(0); + return tensor; } DeepPotPT::DeepPotPT() : inited(false) {} DeepPotPT::DeepPotPT(const std::string& model, @@ -108,16 +108,16 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, auto int_options = torch::TensorOptions().dtype(torch::kInt64); auto int32_options = torch::TensorOptions().dtype(torch::kInt32); - // select real atoms + // select real atoms std::vector dcoord, dforce, aparam_, datom_energy, datom_virial; std::vector datype, fwd_map, bkw_map; int nghost_real, nall_real, nloc_real; int nall = natoms; - select_real_atoms_coord(dcoord, datype, aparam_, nghost_real, fwd_map, bkw_map, - nall_real, nloc_real, coord, atype, aparam, + select_real_atoms_coord(dcoord, datype, aparam_, nghost_real, fwd_map, + bkw_map, nall_real, nloc_real, coord, atype, aparam, nghost, ntypes, 1, daparam, nall, aparam_nall); - std::vector coord_wrapped = dcoord; + std::vector coord_wrapped = dcoord; at::Tensor coord_wrapped_Tensor = torch::from_blob(coord_wrapped.data(), {1, natoms, 3}, options) .to(device); @@ -145,12 +145,12 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, } c10::optional aparam_tensor; if (!aparam_.empty()) { - aparam_tensor = - torch::from_blob(const_cast(aparam_.data()), - {1, lmp_list.inum, - static_cast(aparam_.size()) / lmp_list.inum}, - options) - .to(device); + aparam_tensor = torch::from_blob( + const_cast(aparam_.data()), + {1, lmp_list.inum, + static_cast(aparam_.size()) / lmp_list.inum}, + options) + .to(device); } c10::Dict outputs = module @@ -170,14 +170,15 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, torch::Tensor flat_atom_energy_ = atom_energy_.toTensor().view({-1}).to(floatType); torch::Tensor cpu_atom_energy_ = flat_atom_energy_.to(torch::kCPU); - datom_energy.resize(natoms, 0.0); // resize to nall to be consistenet with TF. + datom_energy.resize(natoms, + 0.0); // resize to nall to be consistenet with TF. datom_energy.assign( cpu_atom_energy_.data_ptr(), cpu_atom_energy_.data_ptr() + cpu_atom_energy_.numel()); torch::Tensor flat_force_ = force_.toTensor().view({-1}).to(floatType); torch::Tensor cpu_force_ = flat_force_.to(torch::kCPU); dforce.assign(cpu_force_.data_ptr(), - cpu_force_.data_ptr() + cpu_force_.numel()); + cpu_force_.data_ptr() + cpu_force_.numel()); torch::Tensor flat_virial_ = virial_.toTensor().view({-1}).to(floatType); torch::Tensor cpu_virial_ = flat_virial_.to(torch::kCPU); virial.assign(cpu_virial_.data_ptr(), @@ -351,7 +352,6 @@ void DeepPotPT::get_type_map(std::string& type_map) { } } - // forward to template method void DeepPotPT::computew(std::vector& ener, std::vector& force, @@ -393,7 +393,7 @@ void DeepPotPT::computew(std::vector& ener, const std::vector& fparam, const std::vector& aparam) { compute(ener, force, virial, atom_energy, atom_virial, coord, atype, box, - nghost,inlist, ago, fparam, aparam); + nghost, inlist, ago, fparam, aparam); } void DeepPotPT::computew(std::vector& ener, std::vector& force, @@ -409,7 +409,7 @@ void DeepPotPT::computew(std::vector& ener, const std::vector& fparam, const std::vector& aparam) { compute(ener, force, virial, atom_energy, atom_virial, coord, atype, box, - nghost,inlist, ago, fparam, aparam); + nghost, inlist, ago, fparam, aparam); } void DeepPotPT::computew_mixed_type(std::vector& ener, std::vector& force, diff --git a/source/api_cc/src/common.cc b/source/api_cc/src/common.cc index a0ae407991..f104433468 100644 --- a/source/api_cc/src/common.cc +++ b/source/api_cc/src/common.cc @@ -293,15 +293,15 @@ void deepmd::NeighborListData::shuffle_exclude_empty( ilist = new_ilist; jlist = new_jlist; } -void deepmd::NeighborListData::padding(){ +void deepmd::NeighborListData::padding() { size_t max_length = 0; - for (const auto& row : jlist) { - max_length = std::max(max_length, row.size()); - } + for (const auto& row : jlist) { + max_length = std::max(max_length, row.size()); + } - for (int i = 0; i < jlist.size();i++) { - jlist[i].resize(max_length, -1); - } + for (int i = 0; i < jlist.size(); i++) { + jlist[i].resize(max_length, -1); + } } void deepmd::NeighborListData::make_inlist(InputNlist& inlist) { From c475e4c79f5bd0c810ad27bf775ad357ca91c05c Mon Sep 17 00:00:00 2001 From: Lysithea Date: Fri, 1 Mar 2024 12:46:48 +0800 Subject: [PATCH 107/117] update model file --- source/tests/infer/deeppot_sea.pth | Bin 123025 -> 127249 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/source/tests/infer/deeppot_sea.pth b/source/tests/infer/deeppot_sea.pth index 98aaa8a2ad0ccb1f462ff3475f28fea7d28e24fb..c830f0df9e8ea8f682876e56519ce7e1310056c8 100644 GIT binary patch delta 76243 zcmbSy1z1#D7dG7>-5}lFNJw{sq;w6<3>`Ak-6bg$~^+ z|L^{f&-TnYXRWo@yY{=*UVDJVF66|I$ThxTFe(fTjJdmulc}}0r6UkaO&|Ke)!Ytr z|KNd|J{I%=$lB7*&CbQy)XL7%9f%D;dd8%W40&PW=wj~9Edaz(M*QQRmj{TejP%F7 z03Q%f8Cf3zA`dWkv;pEngpnXOZg$RKTSsdk0Yn&jZ{^})0l6iF$Ra{+?VQ~qmWY($ zf4hU&Ay!7XvukB-WA5ST4kS@V_PFy<2I7~In>&b&3ZiBVBn{KjCxqAlS$kT8+^kLi z0{|HmfHEQg2ds<)z*R;D;3>lch?Efk#DB5|F~mj%F=-4Whgc(lShIC>u`qWub#*tr z!~KU|EVl;6cEL$<>Ku$;DuD0xIUfXG{Rt z2mqX#K0HLq&DtDD{p&3esg$FOrGvJ$BpQ$gDt8x7Cu?(OAZ;?ua~c^sru!9fb9Vum z+gbzZEg>H)0cbLJLDjy0iUwrRhlNET@%Qh9Pyk(k%d{y zT?@#1ze4U-R@RTCNhINkw+*{yG z{`s5=mMfVmkN}oDSs;)amM2+1@F5YeGMql<9XfYYD|1gfwhzAq|;N881t|U+h5=SUeLDp{0)(|u9K;cMz6vzV?M=Mi1Cs#+{qvW4~ z!~l^900sb)$(Tu*L;0z-yVkF;S^`Dy5&ephii@-D?-3Haix3Y`9KfUu4~fcSC`Nd9 zrawWGxSQO~)zQw~)XmxvD47fnBIK7+j?%}0_+Vq_=nh$XM{^$t^-Lii0j1UMDD38L z?(PPZxxcY?GIw(T%0iZxAek#353B*nIax>!dRSSjLf)VO<^Es;01Xl|C|-9TS8LNd zMftw~P;_?x-G7BU|9OFm5dTpj{wqQKNBxWc%K8`(W6myjIqm_?Yappggog!C^=@VU z0syE6agiapHW;5({de9uTiH1QHI!kYj{PDmH2RRW@Nxk;xB)ejyAlMF8A7lywf=;H zF>j9}a?siVrZtm8uK(olZ zpqg8{+j*M1TbnwYJ6QwGAy6SW0Z<}CQ{4_iVGFf8*!P?UT1MOv`ZqP8)i0(XCF6wQ zgRTFFz+FN4B?etd8-M_0C2b)C0AL5)MFa5H5C{P6AV6>-+_1j`qKpJ#2hyKH-~jk5 zazUUYL;(q+-~?4batA}R;kSS}-y;W@MFRc=3t*uJu#5m$0siDF;NCY#MFP44#Q)JZ zAs`Skl>%fc(A`wZ7!cnu{xq8#)Hm>-%8@Y89io8&(eQw3K;{4N&GX;-<^}Q18!~(# z!xs`i?LPty_=B@x<$oY8;0fR_#QYmRILJbCa{>Jz?m`QTKh)j7^Y7W8f`6yM4Gj3D z0fuToOA+`FgwOvi!axYJpnqV--CR7tV8~ohYJ}X)^*3sS-gyVU-wp0mc!6OM6(~8v zp(;=={o!52zx6H>;$74~aN}+&K43ItDhN5iz?i$a{>F~j{|p{KFb<*uWk)Cr zz4+5ALsR-+Cu#=7Namjw1Dbnx83l$@``wrSrz=?yE7_2d0~xvhHKqPlOu*12`Pa;U z32`9rPceaV`Ck(>A7Z2c{HLHmDfh35R0y$B1R2GUQ34sIkWmI1<&g18A01LCZ0y|K z?VN3))B?V?G&Q~J=1fgFtgNkFosv5f(Ua+7$YCpzC1VJ{mA~&(cWEL3tb%YJ4#N3r zDCglI`3NmEf3#*b_dT?olc|e`JFr$6_KwB(#{fv%3anGRPmH@A$kQBjzh~9oZBNj? z*478uaMzPS9ksFpJDJ`!w65;JMrGpPwskaR$UkV$1r>6#^R~7!g|;tlz@|umaKznH zXAdU}QyW)vkhv4ESsCV!XXf|MT9je#nu6bUO6aKoWa;8;1#DHj+xG5tbxa{`B(UxN zsB-_v)Xv${)Xm)r_~u^l-r${F`@P(+C%?&cr~w{D0w9eVG=ff6z_*ZIg*5qnECp%j zT|WVBZ=jKY96a2B@1VyAK*OB~UK}N5*PRITd~>(CzXvqj_j>?yS8HH*vU(gLYfr?T z!ys!b4@*09=rN}^LLVE72Xdscv9ShOJG{p)%P`CreEeIU>MUBxrYTOm; z-#Yd&2>HeV(0)%ac`TlQVB*f!U)nsteP_p!fQ32vrASwFW3FaCd|Y>+gNq|E1V2Ljtz~V21=w z8oYYv?;i~pbUq#~;2LB;E69B7ck}(t!;Sy&kcS)i@t232fA??;VDT3`JUqbdU((>6 zzl-nw1}Ne$4cdR{&h{W+K0)f+KLX(ee*Ohy|DSeN zNq_mf^y&W_2pD>L{?%umL6DpS6#tPlJOaS4zb3l4NAg>d{H?A1_Mbomf!`q-u#iQ( zglgQ$|K0>&{c;Tq?Sk)45Y8^n*1+rEy8Ju#MEJ%s>} zv;jaf1@L>8KzHVUP7@v>5Det(4}k#56c8-rBNWBok_7|@75Zzw@Cbw8?^Piw148(v z`j@N$AwmUUBf!w`|F0(j5E4Ym!vcg1)n)%j#_@82P@r$`vIm3;`FOut|B>P#G^o&@ zP6p7lCEmY!{&yais{10geqJ!u_yr#duFx+1l?=MV{3m^^f zmo4v~^AvJ2{;l!((_Z%viTam3g>F!P*>?ViT?fQ`?;8u$x8IWo41jJW&<)~WRecca zy)ibZu|MbuE#}Y?{XZ1mUv(D@`SJn8es7EeYU~dJKnv<`W%8~<{4cA*d2fpA{=$8K z;ei_d=RygFeAoBy7r_3$=-K}&V*jd!@!tEyckk10`@j8tL9)NEFZTbnUi@PcK|;uX zZ&d(l_4oC#zfXPp`%Jd~r_2Q3eW&!_tP0*+6@ps*ePQhHv&{bgCuxN54L-WRh`_?| zLUTy;{#NY%B7T2)e1DOETsSn8kx|s*=sB6GU|^W3k^?`I!;8bPrUMaS+0wx-ut@0% zqp+Cpa#D=x`LM7Llc{J?!G~l^&L0&nIy&Ef986nAfe*uGW{sT@Qx{p8ay)LQ(gCSR zRuE@3VJh12{d~JSvr@%F4Zo5(doCTpJm0F5b6rj|n%s6FPT26_?TuEI-BI^0b!pe3 z$T+RlOP#?ufreM8UyjYbGo%L-7@0rFpUE9OD zDgf&asg&4O$?2#8m3ADv-G13G`L^RGcJcckry}0Mt#h@j*A4MMo#cBRC|x(EC36G& zgZk41-gg$?kVfr~xv0rtDRtMj(cx=4#_KSyBfby|lkq&Nz*Rekq2`hbvk2_(FU7HW zo@%$PRfb>N3|zRDm0|{VT78G@JkI(#@e-z=!GSaZn;GDStC&0!FTG_mkowUU>sus9 zPGGg9LL*oF;Cu(4=EvY%??X&_blCLWVrzp+mk!Q`vf-!)^i0ba;E89KjsQ$>eVcUR zmv3Yxg^Zk|DUCG?hVviale@Wq7>cT7 zN&N1+&8{J<&$Hn1dcjmP2b{Q_JKm;lk_?`HRsg$TO6uM=o^isBm zYIFEl@h4HeOD|6QNZ`sVo<-I-K&O#sTOP3^&)&5xYI!}f;RfC|uW8${lrlHl(;#pf zbrGRVN>^`a3%br9$7G+w$DBQt{+!cIO&~0jet|7hE+#bi)AliaQ)36Sxh<{K+wU42 z-@{q!J9@UrT6ySEx2GBOPVAXQ>FB`sRUGg>hWtM)A3UGQBX}JV9=g~yF9L90# zID#lKHE=25_ErR}5-TWeIbby`*cWUbo}bsfyK~&P+qYA1^yKLn`}Z=VWP(1M^q4M5 z&5463KRUtZWc;)+@s<4bfv>gkFT58nk(}h(WV4=F>lLkCFWPnAN9Gzn4cz zrmw)@w2hdxYFfu>l|=6&2B%MJ7w>PE1k0+3%3CSs_5{nudI-yh;KjxS&lEYk6&ype%LG$T}@j^35Np>KK?=O z`dk=>JdZz#AKRmDjd^BNwUk%P9a)#2AHOPFBQy37E7HD=}6+pf~7IixBKZ~{KY(F2k)70m}=nsP~_K<4pBVx|c zV$1rhSIVVTBrnn_Xi3sUqRv!B-!%((*^HQCVaI`cT>+yaER=c$&7Amfa+d)V9ahuEkKtEf+Z zY?kSb%MF_>q^1gHIKwA=F0zZ697bUptDKl%IVP^BdX%dlsmrNdc$OB^Qd*LWvU>Fe z>Gtyw(Tt`(am*Dzp(F+(`M8P+_BpvOHrLVQGWg3#W$R{3Woz6v)1bRCnmvJl`5wPA!Jsdy- zu%SkR1>Q$nlahnSBN&ZqGNywkt)vW-4nN{I1acm}q4Tm8bop>PLT1Vn^s+BeprmzJ zU|37@=oxGmRd8xh1}jGw?3_3i?6>Ej&ixb*|D61EM$UCC@2Bt^6x8m-+KXP?&BgRr zBg7x9f7BKCzmdiY*=-@|ih7orpk4kL2nI`gFV!=eg{~7)TZTyXzSHH35VPcukKG&f z_RS+8cVIQM_Nk=%+D9R^=q686Gs<3wK@=x9gPKlGS@Sw#xSYMg`|I0A54`dUd=^l!8ZgTaWg45_~R@@>(+k`(Spchx<{! z5W$<2Htte+shkLu)6C;Kdw+@f$>FRjn4+yd3K@zP*>HAiwirZr4p<`L(y73>Hr#a~ z;gAWdnO1=rl~zBm#@XC0K6jI+$>n2Ujr{8kuV+VmC>j_HcfhT5zxc_#e$&b5uF z(H<^tj8qDuRJihc=<(C!U-zf-mqw*Utz0Tl7}P9OD!bG)7SWb_Y@JDSHJQ18=`%ha z3<+cZlugXIFLOw&^W4pNVACyT-|0nAKsnY7kKT`=Hd;n(K;cUO%!+r#-n_IfcrsJk zL+7ZcvR!ZKp;go;mDktQ$4i}0s)Mm)BQ%~w{vc;?>gss>&h)lNX~fR|$QZBURu=U` zn=?&@Vb$+@zt7Da?=&)T*O)1UFcjrjB#S#9t09-2!4zf39brx>T&r_1FH z67zoIlP#XK0XSzFvHp2k!yNV=DMLC}uRn_(J$^i?WdEbF@QiNGfCQFNn@B?<)ayqMZFtA3ve06Df*=KeSN~!@XAaZH+4P``qj)PUOkK3vikAO2A%gG0enT z8x)92@iU|^dx1cgV(ZRc!#39Q-uT!>vG?FpeUHG+*Uj*sCZ55YQ+St)Wj}ZNS&>ik z@R^K?0}!2F4v)(m9+@Otvir3^UfGbed@4NBxqHE!A**Id&uc8tdz~$N3P$uDPxPK6 zZ0vmX>D4{g_(&GoAvL zaoc@F$^sN(CSc5yep>Xy&puq)qkL#GLCy+4Nw>ZLt=pe%dv&H&wc0dBG>+{DdVWWX zeD~b*XH#g-<+?p=YwpS_^Cj4ga>mH*{7H7y>>N^PUR~gzLAs$bz{;kmVV}Rk*TVg9 zV0pymB&uZQ1$nA#;QsqCin%Z}o3Q><6)#xwheQ{N$yKUs4woE@j9Dv#VuPZOXv2~( zzpMQGP!f0{{c<8;6@vw}-U@B6kbT40TSg$h?TfQ`z_-WHlhRDs(_y4l$S)SeOWYlm z6kyo?UUK7HZU9a^{S0Ys#aV+firKXJA#nJk5cDi zB)_Y}fGxg+Nk|VZ<8oU{iW!@o6A9f8_85_|oV(|9zeAMMX66k8BqGOJz4@>iK}bfx z(IDQ~_^75zEK7l&w$fuUg~SPMwl6s&rIlF&Pd`g(iiWu+!D5@rTm_1E zkKVrB3X|KQlXCCJN^{;^Sxt8gX^ZFGlR8F5ERmb->D)cNUJo1|Z%2wX_=&jfkec*d zlNHis$D3pRL?(g9M|xPD88J${N21zUTb>BZ#y>D&Ts(AsZU!Fbq9c_###?lxStM5b z_?(U>(28Za1U}p;f?MrX+5_V^B=H;inQ#bHwRl57oI3FE|L6f z(;}OlzCNcb7J>aPJSSOvu>UFlO}dbHtPLHZKyXtL&%p-QrbOhiHt#EWzTDD}`pX9x zS;bjW8Se6;Z`moq71@FCV(tAlGGe2|=8gxgB>pCE9OQLkf}6Q%V->~U*GdjuO-&cZ zNc*>3?zlfN+_I0!rL1IXyDkNlL#NuI<$k-vMZ1dj@2b0WBjRBn-b^KDYnr@g zw|1i;i*j*N&(I&YvV8H`?|o%CI}oqb70u0TjLT`XFPZy|G5{3xBi@P3Ulq?%6v_R=nm&~5cCCqAFM<3iR z9~v-ve>*Wq1p>wm_h-IN$4+2ae#))1F2!2=T2X52+g^7=Tj?bxHvDDiH2!rUZ*5?G zY^!*W0t234eL(cgVb1wExuxcKH_^WN?6`*`?URc>Zvim5azkkA8m3mSd7vy!hAd{5 z?MxdB8#}vk{U>?4E+M!m@hnKppAlS#vOW1mk_97>M<%3&>wWIOS6c zOLxhhe7;K0aZ|9Tj5FhRGkv_sfbx30v*$zi(eaEp+X+P~(we3L!0|hC;gp2DPjOenv= zY^jPPqJs|-eI4#(oTK%teCp@o;**IR6b2vd5|&Bkgl=TA-ad?mzi=0~JQSZ^B(#eR z->1!J;d!lm+aIdS9y`oqsg#T4b#iGNYva@>$N8-XOceLjo{YC{>sG8})zq@*11cA+ zKY|_;=1>7eqmxKwTvB($q~=q*7`;MH-FIZGRa)LvRZV@#l7>jzl^6T~8@j|uWC1xt zk&o9|Hc`IG@G<;8Y^HX6Nk#mONtg@LF17}bf#zoEv=w$3`EhW5YAG+|5u_cmv8O44 z#cP}xT95WVHOkd8Rg}(?T)#o6RBrN&B&eZJ zbUIC)!~Ybsv@epWWHT!B4B6w*_e#RDKv`Fymo$WBZ8CG)DMCb5XkcMn)_8?#CzAc0 z71ioo?jagiDOp5AQ=3CS{Z<3oc7@=TPrszP3-}}iYlVc=HUbD|pR@)$Ytq;tt{?k z=#mq@74%d*Cv;Yobqjs)MTW6pQ{{QCKultltvK*wey$E21^kh@HpSvaTt!i23v0io z5P0N84*2UC=;^n~$8Q*3s%qu*lTAF-#HlnOhEs>fE}eF7(d0zyBA=>+rSebEIQ zd~i>hE8C**kM;ZX0e{F@wTDjZP@zw$c3ZWtO)POr0}b#2_plQ9L_bXVHI`%P;gV!A zL%>*CJR)4&najn2#j=P9MN^r zkF-FPo-2;eP+Zbbedx5ie0{UHHD+1FI#ymJ%3Cl@&P|f$(<*0}B%XaePaI;%2EWeA zT{Tzvio<*;BURv3izN0eC3B0QAnw8`=b%=)HGn4(N9m1aVaV5e^ zZz#P=upKswU0LFJ!<2e^2<6ltR*QmWJ|WQan%CvvtMcan*amr#X#^|>IdR%{bfax+ z&AQc2SMs&F*}rfciB4kEC+!LBzX9vd3&0yoFPF2$3p&bCrxh@;kuQ|LIAlT+`1+MV zXrCDFBRG=I{#p9a)T~V?NsTX>od458rQmBB~x?-0wLpKhhO>vR;J$SSSZq@QNie zG^g?xBym0bfD-WPSfQcs{lyO<6?9AaF)e&em5f~RrDokXqr2aaCbOMhMqVG9k(`cw zrGPs&A+X!MF0b zTe_P#ACA+}S0YN$G11RR;wWi1!MK(I4|A%V^1>%G4RRd&vNi|Mk(uc;bN z>Bg~rH3LI=nNBt#y`*n2|2CM@<-xGi1J`FJ`DLl#savJ^MH@1)-iW8g0~Y&rAMixY z9#>sdz!CyxJk6LQNah?wv)Hd_Q#*7~3vOwti%d$hrL~qSN~;AgKpT87TESiVWtnr< z3(Pjr2J-OU7C8B2XMJ-zVk=Y)B{ZT>x8Kx}rIOd%dyaZDh6w`0==bI#eKH;iDC85T zhHhM`MrFL@G7rjqYY_PwXUCaQ$!o&>x|4o(lGJjk#&d*Xy3!C)mDhcWji)Jl7S9Yb zitbI5OxyW6XUvnKA2H6)9*KZiU0G$DHJ5M?yB<|XuIk{tlcxK;q09kIxGF+sS7RS^PO(XK<#u@(lPg+G}<1n_hAy}+#RmGc@q)rD{tT3bWIh^^Eo;e4U^ zmj3xh*Tw>tC%c;$nqQ8e+=vH#W1ehPH+K|0%+GymYVc)2VA{Z$_SHvwX4-xi|wVOXU7M83+$Un9j@Bq79(!33Pm6Qq0zsb!1DSoKRM#@b3fA8t>g zsVh?WmXv#rncvP5+)zrc+ye@zQczU$6?cmH${+@0P39Mo@l5hD1dH9W#skaHCeJ#t zMxLM(Q*0y7YOujX?R_G2{iXr#$`3UIV77v@6T#U$D7=TEz0=+deb!qf-opAjP3oCB;u&nj;SOOoc6Sr{OR#8-s$%=gfi`{PQNgT0TqfHoL z{)CPFU_90NPv%vDLZ5EDC(0LN1W)lNk5djDD|Kenc&6WoX@Wh&zC>9pbQnpA-M*?; z?hf}9oTMIfs+|@;zX>UQW-@FVKk)NrwQTI=1M{|=W*Woz+yLW2wpz{kX&0u;fQyOB zORY@$?y<-pc?Wzst$y05*9ZM1$6ItK&*_HdIQw+@I5}YShHFb6Uo}mLPYrH6ZuyVC zOc4sReIj$ZJ^mJ4{;fjrQY+s|P4}dbMg3@teY?HaEo#eg?eG$#HpS5RD~9_=7r(J3 z9SS$19jrQDoV6qoyH^#j%pRS`)%jWC9elvFd_ioZuc72PK!Ra{YyI~1!J`7rHs(r{ z5U}BoT`^NV4#C3foAK+c%=!!f{kwTT?C{s0&{;12wKzV zN~&_KoYityhd<+|1V8HcDX;N!i>v%D(@L~`h&Xpro`hKVI5+u;UG>k5d~;N>TcW1p zlDA>GPmpK>Kf`<@sd|I(GP*|3yH+8BM^ogj>(JZ~;-x&>b@4#JBkM`UX0K2OyUWf; z+j`sVKT}&IcT>Rf^a6NB-LK1@R~syM7Zl#Gf0ygI6-M@tyDEN4Yovu zGfb*9Z>_mzc()ch=rLrAyR;B_@i<2OyBT!}x~mOgapyNW`jEA8c3rVsb!*zaSzmhi z)9M?<1vEXh8zW6?-RAe#l8VgcH8nwvX{JplEtq1rg}W@^^oS3-f(k^u2U=s>xuX>q zqkKVer6LoYdBLt#J?osWx_)Y=$wzWy-*>`bn$edN=h*@yLeAu zM6Rs}_kor>z_hTAr6`M(o!ay!=MryehLoG^jKBQ3uEyqckySROoy{Sfbroq7-GuaP zy#`Y-nP!Y1ctnatPW*;`a3+mT&C!Tv7%QA-w#`5$@^tiQ_G6eXUH9q3gJlz?i_@B1 z5hh>8N`h%wlKhK? ztvK)Co4SMtfzC(!j5A{K%a-e35aYJFl*YalNai?WeXHk<(jY&>2^b!{)ix;3qGh%N z2^N(X09y#g%=YCpe*`&yuSlI5nd&OTFAOS$*#UqbJ0*bi4eP^LrDGnpWLN^aUge_o zi2xs4rCXWS>@DQV1-AtO1AHBSPNX5<%uJRGP3i_m6=iMS>I%KtpyjhntRyK8I7(P# ziqYcM+cU%ol;scn)FvF5R(7PB?pkWw7c9&ir7OA>?o9;LvL?~ZYVqJnAo?i zuIw}T6)W8AMZ2EM)aam&gu#zj2hrs2qC?&}+JHolw}Tt{{;w^mzQ>If1Ik|cd$Ynl zu|8*@DiIBGH;-P)B{{FhRkMASUF#4tp;~7#^P0sQT|TClUUAM4b%DW?3Y1QE%XexsZ|%5a^K zK>Zt=eSUlyDZ{J2l`a+eXXAB*len}ibuC~u`pwv`E1uQ)Ugz>!8QXEK^aC;f@KG~d$= zDr%9s;H$8pj~x)hk9wEdtR=8{5nXeb7!ry48u0pCF@{^}%X0IrCWVq-ES#LFA3z~+ zX5?(ZQW7exVF@jvo>v_W;p2DXPp=FZ^^)!3p2Qv7?j#LRhd*mn8#@qgtC7oPCCnRO z7Qs7>WdQdYQj9h>NDMGeL%vojb)TT@@CaB!+AQXyt5P7@DB77UN^vT zc}i;BPt>$@C-WmHvWy>D)2@3qnPoQ$T+o`!Gxzf#eeK31g-5W(!K>QLw$0ueoFtM} zcO2AK1)GJe-FB^1zCTypsu{4?cJ4q)BR@PP8E^O9r`x$6wao`$l7FMqFFG<`>ETya znB~!+0bX3*+u6WRcd`EVqHH0>4K=qnFH3%c@ytJMh?4T-o{i8he5l1)QG4qm*rhb> zXKoEiB4XshTZ5M_iymO*g_xm^CYRGp?#swR8sL>xnQi5kTJi`|=kpt|unG^EwQ8~{ z%c&we-(Z&F*J|z*L=E(!$FUNaO7A)Q>5GX}M&2{j(6&FVnLEg9dTk)E(OT#flc3E< z*~=kl;r$`xr*+eUE|+{a!79z`AaKNI5Z(CFfX!>i+KJhkZw0Jy2iBG=j>+}*=kC4F zJ|z3iW9+LBofgII*$l-`0_GOPW=1_1>$v)2NDtbaOKvFzM$7C99;hx#p>3?=Ht5aM03!t~K2{W!t9e z&@`~Gi`|R!H?Y1YXIUh`uS)HUyVKjn5txznK4cMzRrVauJO6BMWTImm}qBn1D8c(ar^~mDB87Yh1e5G6wl{^aW z*xlZKf!Ir$RE`iPVPDKR1Z?pOt?zp6T4{SxhmTpZAph-^SmcnwnVW7UxS?zT#V9~g z%)DSFnof{hcA~ev*F~mWL+P#KCh3#PwNF3e`)1{DNFI-~$z~XQxa}m( zWa8(u9qPv$VHi|Y@d~xi|$=|mZ>RfTj-E4L$nZG=YKDqFa z-A$cN*-v|%+Cwzg`W7f3^%Z^v*>k(ypLzVt7gc%$8?L*2XbB$Lxzv7i5m%%^yiS7r(W??U6cn*!EVw z#KTm>4^e$PHjZ&6FZTJNEm!roH}h1PThEGlU(ACybXK2R)a}H67g6w)bpwNFmUAPT z^2j!i2`viJYzdtUdQ`i-J;grB`Wozve$RRK{%805_cmX$0Y%U8lfX1uDoP42Q{m_I zj~1iPY5kIaSiz7eASHHLp^zwDP+upRTM3a!$|Y%9@sUXPB?0Lq`jWMH0?!M+s?c?_ zpAj(;G1zgb*GJfNg@%siW|}fN+Qb+jVsq9g1R|QETG_!?$QDfmJtP9b;03oRr19!dWx%x{CE}v*uz(0zvu_bVr1HK-5(uCG*r%}y5799~ z-O6Z6)u_A(-@TBEK5xu3q56jZE_q;*eSqn3vC1`0Ym1yV;TYWvfyQs6Wj8@G;=F#{ zJ`f-Oy@bp~)4E!yTRP1yWnc`8mB-iSb@9-%=Mt+sha_fQMsVQE0+_eG0uLJ2r9;n% ziitX+gtbgii0}=p5)eBOaam+i8wbqL!-$4A@ic_+@P(5RENFtVsR`MJsNdj_*mto6 zk{h7dQq{#HhO=g?MrFI!ii+ce;t@n>qNG#RRU?WZPHCVxMPSsMHNO{Dr)nmA&vwx3 zihhJWu!e3?BgCrrC=hU?TSkJxiq7#S0u^vhav)TIUTtYn3qB zJtVR0O2Cct*GDn6%INBCcoJ!sLlfd;WUzo%}!W+en8-v8NCW&0;=U^J1-k_kjb>tn@BcB)(z6s$r zn3)Fpn>-H#zo)ToVIdfkksY%NJm&~GEYs9xFT;;8LFvX}?oWN)U>o}0pmKm3Zc!h_ z2)q0paGaW1hDCE9p{^A>DI$bzA^+FvbC}HYp~qIk zrPTKQ@=C&!;C+lm^hnKmJe+VNHiy)h%G1&z@OS@G*B|)|xt ziHn3WgacWjCx|p|Y%i)@U%4BMsTfnfTtu_2k~m@y0aNo3IaN#KvV`nnXM~>>yJjLz zRiilfHHxkU;UQY!cX>qU7`e(~2}5>P!ezRIL)jYi#89DAv|UNrv2M85#Q7(dU4>}7 zU|`_LPPQzeKU;#eYz=H;FQI?6>yN^7iv^R@gBT(OMQ-V|yfJhudu|=-x|fI!1Y?14 zsIFG!h~dn|p9$1-67klC9rAs@xfu+!T2W?mc5*maBG{0=#aym*v zACS_rO!uGWaVZ>89_%JGhyxbroL+R~fRmyJEb2nim*OjGMwXb5ML~_S7tQOD9Ua?B z*CN|#7OmEvt;K0R$edpJp;CDTVBYHhoYpZKR&FW6wZmQh+YZq9=%BIM1taT#QXSgi ztvv{a+LMBp{Y=fUB+}i$Di!gY5>M{l+DPu2>QViGJ-SI+?qiX6{DuxF35`}1VBrLE znYm=linUbH(cckkFg7K6CkP0g zGdmXV7hH23G&>wm0?eeQu>}2iZs>A!c8}hzDWHgNrnSJg$pm zV)HKVFkY;NJVmN;yA#feU8DM4lQLIqJHuAP4+0TDWov ztPeGY=()H94RB?WV_jvJ!d6H$WRote+06)b3AEvPYq~|ZBZLq=hQec z_z0&q-2O2NVpS@k^(s_9Il@-y2_p?_Bsa*}5}4_^h=jS(anTq%s+;)*(fhv8yP~E= zTIvYL(CS@;h5H#5!HN}1ygkHxcBNm0}GPh>S}^b!5H#Op!$Ey+`C zA7b{;v|E~|#6H=gk^zdj4bPN=KHOfvptR?L^I!|?7@J)g9=uu}HwqVcy%>}%$ER%V z8F$k3(=-SugVX+;cgdowB9YvVGiVswPF9@>ds#atSRo4$8Py6bD4!&xjAmO%(@*@V z@_K>15T1k?or7ZW!0u-b+NQJY=Vm3NANj6tA2NRfoin)@9X;$N8IIaunkn~e2!bQg z$Dp1GYe0OAVuic=g7ARXa0i3zF!ha^IUQZ!Xi#knf^I>T4V$+qRU+;}qyizWe_)Z) zI+M&J*LVTBBacC1aK^M>3|r|jvCB%mTa28Q`^Pv1X18dqX$rJmwZNykaO2c~87R`|j$Oxcf_KtGroy^m|LHhrz!H_*sg(-(zxt3K(3x@AhNvIqVU;#}go zrb%#7%0o#!B!0sJI?@vIVg(&hu*&ia_u1-yOWZr_8?-Li1aD=M5~xiJ86?+jw)5u{ za*d@D?;?{&f5G?3yotIYwd}SXa2croe(ZaiO+oEkH-cPNB*N!SsrL~p`|P>i)CVp3 zsWZSg?|?1DjY<hL;KIILYnP9%+|UPEMBG2L-o`PAM+QE=4$RA2jgoNH?6LVD_1t#`jTx?ds`{Uud};t7{N5qFNz0 zWA^KtF=rbmrMyPioU&-4An7+eiR$@YZzigb@ql(yDCP=G*Y_sq3xHcREM}A4Tiv3) zdge4=!i2T2Cr?&Q!c;7fc9y<|(BoWYnO^Ng$xefKiLS3P=t}_VO+-xc1dZy}fO5x% z_KZBb7a<(U9J17&x|d;1=le*stt;^pE|6zFVkXle2BUEOwb}vUiPvK!-4Y$~y8f(2?%bpq`w)E~C>)TVaXs0KxP$U#ao`2cnEzbpN zY-ddHAw7s6X!TB`Pf#Tljbq&ueM%x3=Qx*#DZFbbikl*A8N8aggWfj+ryo?ij93PX zYuRCTlP8JF!y)qk=e$q*4St_NQp_2C-*!?A*bl$&8C)&jLTq+4S2eZbGujvR{ai-D z!lWa`$YETj!SozrcRHDz zuB8&c=!Kp&@{k1&3Gw75P^YgC5e`g95yxM*Do;kSWRt)dXrUle?ed^w;SAWvJ&n_> z1-}dG-l3@8CFuJGN1_84 zT&t&Nxud^vW0b_>%3>Q5m4~#M;lRd}_1QW_J#|T!np-M}y97nIAjW~a@TGJK6^O!@ zITSCssHb$Oeuaq}7p+j%qCqvaQbNn32%O?sgcww+W*qS}-p8)EUymg_3*porr#*H6 zldzp`_B?SaEuOxQF)C&pA&7Fn^kgMRS^Y8#DLwac2$F$IOE_Jw4SYxAtNZ|=L zo9q??c@{Zi(7-5hEo*l2a7V`@WAlSFV%xOgGw-GzA^AjLu0$Mjm^St$q7A5s2dvH# zQ;K+M!3}}TPUugY@Gv@`Gj68R+s2qWekB4egZBv)x{?_pO|!YKG8L=xx`d3gymFo^ zR&|1(Psn>aTm^a5?2rKpAz!8P6|~(7v_U+km|+&H>kFGuN5)Rv0VDboL7Ah5yqYP= zw-Q?%oqfy41%ACxfG3d&ixVmUqQ&7fJO|!V!97LtileLRl9zDbgd?GB8rOore4a zggqVdd`bPnT3MN3-=Wy4LfZ(3iM+{YlzdYrQprfDn3=}U$YiGXD)|@!i{!2(m4ZDn zrwXRc>@R+tcn|w$Z=0fT1f0WsvmliI+~qW#MGql$*I7qAcI$()GT|++h~@Y>wWQOi z_uo5cwmac`f@vS*eJejzA^{uH^M*Yc)Cxo2LKW4NdwofDG=+HjO^P^ZK>Ed|me8n{ zYAH$|DB$WFms|>Np+Ax>25T5IK#a00XA^_d@7%b`}|T!jvh|Y z72?1fO`&jBP~3}8PObFBUiK&0X_xfALV?S9U28Z#xSO_t?FC(LB1A(k%n9XJr`M|^ zL}TkA2T$*E)BI-|LY6jzpuW+hB|VM=NklIEL{m!!?Tw1e?Za-}P+*XRE};ZF&A6FN zMZ+;ms9Pn??xXUO5wN3eZv5OjF=pKCx)5gE{5rzZ$O|PSyNu4FV$Z4Ru{E<4!6nvW zt2o+i8BDbTM%x0}z>Qff#$@6TdY^2k|CfsYCd1v>&Y06Pyb1U% zOwP19LZ4y6;|GFK@J{?h-{C}X;Z<8+$!%0G|q)PQ3;bs!fNnE~%=O!6Z_RL!C__8kh?b-IlAuYB!!;hE`)vh)p-!Ae^%;^wm zRNfi2Eb4yndi7pdI!SL$T7!e!2|HFxpHb@XZ$S^!RY)g z3c=C*Ei%E%{4FZM!~88$!L0l|NL3c^X3sbI)sn2Rooil}e0{6~Q*C+cVs!Gx-sKjV z4PX<)%$HU(AkyNAIF(L&Z0NcV=aMmxxG7}VEW6r`Ss-yVxo#k{+DuiGKzrA_}43^2Z6(GoIc&hD@m0-3`u#|@P3^&x}Td^p4%H1Hix@DT2@4yHW-BWF(6pBi?*vGJGQ7~?8SLHHd`OP)#@v0(cUnyw4YwQ+d(*t8%5|x zLXSpUqu*9nzhD5Kw|C7!nqPVyUePpSs`*(!r6S1%$oRG;lW-+qN;WC${ZO zY$qMtww+8eu_wvI&O{U2w(-mJR()^P?dpG^Po3(0_StKF)>b$ud~(4I^p~rU=KoxU za6q$;tivu3+V96Y6z2wzSW=k=Q|<&v3lB>LzQ*YF-;hv+Ek_)v0{lfeC9nS+Fp1G< zl@kTlU0_Sdv>E*GU&vmx4n!e7&32aZIzQ|4HG4P*OU<^2kwt`$c^z(}+-fjWppg4^ zMP!5w6{w}=n|bTJ-Z6X;1i9rSliLc)WdZHk>F4WbP6zmx(jR%oZ<~j4+-?SfJK}ou zT1X}`on-?4g|7N6?zK_(?Yf%seKMZVb5FQo|APMd{*-_BStiKuGni5Ogew#PTSJe$}&k7(Fx`Eabw+C-(6k#sIq&lD5krNHu11U zgA;r}bS^1+A2V=qKt+lUfsn{Yg}I0apUb$I$;AZCKxGW!jYaj;2knqucl!@kbWYVj zlx>F>=TcEU*iWT)M(yA0W2{Bi(f~{F{M!^5P(zj(sLnHKYYB!!>MZ2~2Hz5L#;7ju z=rPqF2a^`gX1Us)dwQkfQSPj!Bhww>P6)?0jduMZLfC@&boQ7P@9=H1`v%^YuG0y` zkQjc(KY;`n^@Hc?y6>4V9CNnF%~v$xH*uPac)2k_OEdb-)g`h*hL;Cn+X5MoNJNAp zBe76T)0EJ9RC6a;*9PrjB@;bG%zaqcKmP9LI!e@x4c^Kbce-|A*gUv1FhdseIKAiR zwD!>SIa~>D+^oaFDs^+6-*(VVpKdPP3S~8zp*izQ7yiLYc^hN>ybeK$%a-3!Q#1f9 zuQ|N7HI#DIuaRr#KPK0f7J%n-81+mtmV*dlfDBq)>nF^=Q^rI;vL9C+9VzrOWIpT2 z)}RL=jj4omG~kC=YKx1RtlGAl_{B9ZdK0eUJsrU_5G=ppa5Q>^%Un-gR)w*ZnPnv4 z=$MoUy@qd-0MkJkJ5=kXEbyHVke#;5Y@YwB;w^Uf581OTya1~OK8Ue zQ$xt9RiEX8u^J(_yyWl7r@lWmgHLPl>Rv69CBlU4VkJqbr?)gS>*_05(tKpyP88~r z!84@un;)qgBCF^|>VVwEwZoD-Fm@=u&G#4T6{lznIBY8eE#CJ-Ay z=iw|Q=R{q9A;b%$>24tk8$DvucYubQu<(xzDuWanEG@JKcDv#Pmr+P)NJ zQdiR65d{3y&t%;)`C@rC(0f`W_=m}|H7Um_DTWX@4Nz5yK&GRJgAQM5*heBtYP>x{ z4DSW_op@^{(ZEWO=fS}hzaoaCvF<2w*5$>Z21Vc|HEX&`)@gt z=d(Y}1A;c%-68oC2%-zt@Wuk)^obUe=4=;@2EiCIEC6lpDs;l^&NdR3^w06F%aq=T z4K)KtL7Y#QSY-7DHmN1f=N2?+EWka32ePH6s*gUho``(QPT~>u0@b@e3GHU;2LVJR zwn&mE356gs#m9Z6rC-BVP*s$aMnA9bOtM*&fOJ14#I+r7&8VK9Wwet#ftiXBTPAeo ze7Nm_A<%POGo2QcZ7VgBwQ&^6ecRjVG{3G$0EtLeZ+T`P`7sgo;oj>4Lq>SJM;|&o394X%+>4(d-12ch(CFW}S3r?T(((9A6*Imh#<$!y7!I5#`So?$( z1Yjxh*AM1U2uP7%I&!ed&L+`HlZP23vdYR@XzQF6{^-s#o6WvR|FM#?dVk0%b0wf1 zvv;mXafwatb*k3o0}S5QH~Z+bt|xWg(qEyrte2Q2IZbw@Hc%2xrSX(7c1JdymzUUu zf9XzU{0COhO6-ma>}2c8?0lFLD&t$uf$lsK|C5}T2>i%&UuE^=k5un=iIYP6%J7a@ zr?s6|=aS0a4cW2eD&hYqHD*>faNW7 zm(1`1HG7qd=c$WV-HTXH}(yqzxw2`XWUPA6J5UFAoV=HoxC z?7QLjwLk4&c3hXj)}((*#2?82nT7NQkS4mnrbW1*B;ZmYNdLdX4>|w`qVxYfsoJov z1PiID*bLQ8%q{Mf6kb0@e=hEH+j$vM{O&O~3mk{}Ywwm`(%@5FYpu%`hlpbZ!v{6- zJDU?_Y9c3xly@RT?oUE8g0{s01R9m)2!V4(Z%815S+DTHd)3Lsr+=%hBDL20$?w+> z;PUfxqk2;lnAWhqxw&yiK>9n`|Jx6||NVD&zZiI@$4eNu!*a9!v33Hzw%jU(8u7`eAr@4v#V~1m?xT4T?54rwP_nJE&q@)atkx zrm)FQ^AUv-axvBo1l@07i5+{6D4@{_*T(C59!okj=H8 z9Mdqe0Gp_XubKoJr%+t=%2M_j^SmNYF4~f))96wJUXJn}=s^IZ< zfB(+j0Jy=W+AC0>#Sb=(glH1QWTHp`Rw0_isjqwMej!ByR<3qzW5bL^ z)NGvEI1}#B_Q|AFXJu1m;+ltvAH&sEWAT#=!V;$Lq-Mucqx49V?%>Svp?^)Y#2_Z% z!B&arszyJ_FBoO_J4p72NpVrVvo6p}4eiq|1CSeGWofOl-jsOcga*=eDjK;q2*5nT zxSZ~<2?W^}u%?|wlkYF0=59#QsOs4n1kpq0WfV(r65waZ72my^RnofMlMIS&$Bfm2 zc@;`i)|@G<|9t#I*CDVFb??}-Hnqf|Lt zj*Lm7h!L{iQ%yhGDj`LyO1LcKE;wrXi&g!O|A7WwW=%-pL51GN4!vkcT|J){PB>pX@3PEO zBVQ?!?`AY-UM9Aj-#KBmE6OIDOCGV$FvdwHOi88E>CAsiSP2=gEsA0jWt45b}Ul%Y^W5`=NGCCWVHqz^lwrRV`dbc*X zhb_n1kbXa$dL}$R!%gM04d7c$+6eBFr&P^vF3?`6;%;qd-qRi%PrYZSd!4`1x_UFW zhm--W`SmOoC=N3QGeC`Eu1$`M`o5$P z3WYByjqDW4Kn|PDDzM#rH_KU&0%vPg?~?SEUyq1yS>ln|JcepxWZ}iA6QSV6@NGYX6KGe%toO6r1eh4ey^>)~69ZQhi!TBNQC95)w_9NxJp$d3xMti@I zS&mq^=@3Q1hAiRTAF0$D=KwoclI%tl8_@t;X^&&y+Y{L8510bo)D^u7W2oR06TxluK;c>i&z4;g>P_nMxYmUFC7HAo&(|A8JOLAIrSsL{6CY-aw`}syo z_eW#Kf`>k?8{1X?<=(~f0^W$54D?5Vv9X$ik&tZ{DNKc&@kne(W)WzLRmfiy$6_)) z1p_zLW$otd7x6eGAwZ$~s5J$u#%=8K z<$uw;|HX6!F=*at>m8wk3wQCK5=ab@lg61-581<9M9flFv;ZR3s(i-kMW7m=38*^=p*0MDD>62 zCJNRM7}(Cj=i|ct(6ZgX1)>Zr4aR}+2-NBcHli|O%B>QxAW$1Uu&u@q7b!ms7|hHw zwMgI?k{?x*{g9-%Dsgs9S>-5kCb;0Dx_Jr%d5H=?8k$m>9g*9Dis%xjZY@IdJ zC+67j3N zy{KV@ji0&|vT`{J7h!PA#B9PjMBO3!a&o5I`Mm>n-{ zenBO~Qc~G-xA$8QRO8svLWK;wmuN*)KIwf7hVhLS0vnjWtTc-|6%6XIZwWL!tPQU( zJ%J?u*x48+))?^-jAG{Fe-?HE9IV_#hO>%v!EfVZUY&0>as9bAwf|_v+7GOO(I)$| z?!SK9*sLh;r>WaHe?5LLmr1F#7-MVy)33!i>sl4h%^SyA3QU|_?w$xd$g9e_mlnofLmKlh0K5_)UsXSo_O*od46ZVxpc(~{Fp_y;pOvG+tkPU5^4TOE;IAmB zPQD773xb>?UQw{si}VPsW9@g%nOkVrL17W20Ht^V4Md8<;il_n)|vSXMB>_|!~GjS z3m(n&vta*i{(>`2cvR^jAN@$+LIsS4Kp?m7|0J9TcPq>it1#_O+<8xVm=maX0_J!Q2VFP5th zZl^kq&wfE?O2YpB_)KId2Tu^RX+4C7*LfY8@i1+z*deK3#VdaE-9QBxdjY^d%Qv)> z5l9*`x*KXA8BHalta}&<_%Q+43<^A~BNwCupOkCEqUz zQcI$12wLblb@@7 zl5biGwS}UfykV}aA^7z)AnlzLiF+5fyjDVYxRh*7O=yOj;aV<7BzrQQ;E;GpJ^D#? zoWx5Yk)7_`mF)RFU95n6Qs!hjiIy#wBA@!W&x>F;*~_=0LpA0!;F@6Iq>SR3Od9@% zI-i_70Y7=qHVKQ3G!)~|rDbt>L`?d|Jjq~;{BmM?K$A?MB%PrZAnO7%X-=vks~*K` zSd6U3*3*|-Ocrbiw57-%v1kajrCc3xZvf|TPx5CIW}*r?BTG4>3N}M-4?#%mHp|eH zVIqHx5Pe7aUj%^d_Qh4?= zK!zZ1Xbqmdpj!6lYTqbw!MCP8uMQE;rpmiPrXa7<`JZf{>?g{zLAqdiH?Ow%f|fUL zw#pIIZjNyRZb59BAb2ws6@zn-Z#1YjlNB!^y#z;AA$+AsEzhz<`D1OouD(G{J`m5M3~)ub zt@}YwPDKqrcgRU*86ftHY zM$Ad-T=sZI_DNJhH+6$7{X<5lv1YB5lQaT+Ig<@(N&sk2%8|!($7CNZ5MtDk`0Fvi zXiF;ej)6uKR7)vJAW??ZKw~UXAK|SdAuV7Z6667X4-}MIZi=~Rkc1h+3!s%zN{7FS z5C(|NZ&pK_F!rny>iX|aA)h3^ESl*%Bp4~i`$KFo9xPs_iIo2W_|=AR`9^yC$i9IY zF$Qpd9S$8(uR1+%ZV|c~A|yd-z^|ymp3A{LsFJCptZ??c6E~(;@+k}bp4Lr7l^mM|E>wlpmMN;QE>V))F+A^Hl+a0{aN=R>*RSpg7(G5_9 zKe$A{g3jQ#8)r%|G`>L}yrWE51w=l`xjqv?0J4nFKt2 zjy!=+*j@|7*#}l1)|3(43o=eO5$xToN6P|P2ES3>SaJg8Crzl^PW{Xdm|(oH<(0g0}kS>Wj!roX!J28+c4G;h~rtDS7nhV{e(;&0c&tDG!v^e5i) zKza;f@sl^zcZc=?h_@P+%QU>guOaq^nJ!{aHiV-v3A(|vE26#JM+=n0peDrIEC2IP zyftlKri31pD`p!51&<^%_nEBsSOOXm(GFTZ?{P39Tmn*KOn?71H5 z-phq;9*o7^7z6cqA9O{5L!CMhChQS8Txl7qtN|YUMP_;Br(YMD0}qpE@)KjlbH%#&d-D3Owmy+#=@Q z3hF9IWIy;Z5IdSDNzfzZW9qOX2rf_xUiax)QgZ!?Kl59y1WvU6*wvTs04@-NNCSgwx+M`!)5 z!Ma^SGaf0O^pwf7SYxWOAL<@OaX4cGUHj7L-i`_V7>WhPsc`A3&DYxaDYq=me3u_O zCN`s3uZq#K46{lEK+>857}96=Ngji`3PV*lmV(GTBcWTHwnpst`_36@8u&bI%USk7 zlA&dfAx6eUe#5!M!(R3OX^V$>GR^pC0})ydVm{47yDHE0b))rz+QU54htBqq4FD#6 z9#TPCT6TcSmSz)Qr|PRR`Yrm*HyPS@)De2^H2Zz1&hWrp^E)lvE->&X75d*9KH9yX zQPe&3G@sDO{#z^#&lcFGwGg<{sn^{Tv4?0eBq(4T@3N zwl828ft?t=XDSFWdYMzssAAe*hu|)xz2VHahS)mjX9tKkzAnW&R!4VUMh3-ML6FbP zQOx}&_&vm$e)KC~f3(MBE6jNXc}o)HlO#b1BG+#>y*3*ak5=x%ZWtWi(@l)GHxI{H#6sV{&-xBLhSYT zBr?Kn#ygbXFoKX86oc09nd;0Gh(x8Y?@reoTJ0HZo-tom*4&15$M8tqpNF!?3@&&J z-=-qxT*e5-_3P>hbXUJIi^RX)dVk;iiNa@lrD>(2e0+A+rTcSULr*e<$k^ujMy9{^ zTZsv0+8mTaDJ%eV^gYh>M;((_+pA}cpCAVJ;F-Jx4R1-(=-_7b85WC;6?isKN)lKw zr(spOkx`XO7n?0Cu{cGUA)Z%xUH_ql+LT>w84vDz{A;s1LN=HKMvqc`qG6VTD8ELR zj`%yDNG--Pqf^C$r2)Kfo1`Y#HJ^>a+5AfEZi?%oRhk~C#PWzjV&9O=w`Man*D#Kg zJ%}1iu`5qYI~WCP%#~mhJ}YufXgbeJc~mU(bg@9L$ItVT1H~FPUMZ~9Tt}-GYQ&$w zCLG`-DD>%66f=bhE%W4H_hfOx&kf$B_zUJ!Ko!T8dGle zM|y~UtZ5A;IKL$KM2`V62X#J!+s58;W2;=0b4{W~G_YpH&0~;m_sv?uwqea@n7O@R z(Hk1kU*{pAAPo20HQ1;w(?bM%VVxwu3zU$oqD?SR_%b|cS8myoxowxC7uv_yqL%K- zM8~Tz6^Vd2aj-XsnYBmkdv~GA zRgXiRUzyqKS)FFJ{ikj7(T>w7-h1du!}$Y%jZ>`-=a&t<+Sq?a*`(vY`-3NL%r(1h zNa-pKZT-lEcDnnfWhec0_jrkr5>EC2Z>#zKfqGuoFB6^FHWt{+RgDjIctj$A*W#u@ z*L<(1v1AB$M(y6zBNrcfPM@aR`p+3%bSuiXMYN#d7OwV1-b9tu=E^2JjqjCc#e^3y zzB;|@a-hx5vFE3Z`?>_-U)j7;-0J;p+%q`P5q?ZWVb8^aW_gVTh;4B0nP`lupg^ja z8Hby%-*tvFcLt>AUBp@&b=s_5Bfksp>Pbe#K#;{;GO<-f zo0W{LljIDI{kfofJfc+}JS9cam16?#JQHIfy&-+vJi47e(Qs$08@u$YHE%VvN5*P4 zk(*JM{af`osE+H`%b@)=Dtl2R|p9%$BpNlEPZ#IB9hGqM2 znvJ*P<`xV!OZ%coHocwJLJCvVnS9`=5ghH0fAY1hXknprNZ?o_#J~&!HI~5Zf=D#9kEsl!C`WO6^?>#9YGDk?Z1m6>xCFZ zz|_$i$qU*DMrM7+aZM(sm9+yKDp{NW9;c8vf7DYa7=Xr^PyRdl$p`P#U-pN~g3#iK z;ghm>5KQBf^^ZR)b8pF9kEVgCpYU76@zrWbc34ywf_!qq}F@N;i zpiNn7_fF*}_La~#>`YEDBR^r@>joyMPBx|9yIBVwcMd$eekhP^5X0X>Lrx7(s_#*w zZpMYWI7{tHnMO4_#pVDH*Xbxi!g?yy|2SvWN9$hqxDyACCWztQIFS`eKT=z23~k;V zI9@m5-jvtgaOxwUn7vurO54^#ioYH?erKS)wB>2QBL& zfr4wH8z)RBtm{k8k2<_h(XB_cgV%_Bl8tmFp*4skA?b`B@f&%HPIb0S7+nLkQ4fgc z;gDyr(em%VPj`FB%OZfXYaz{8pga-y9>O=Dzc4CkBW=fDu8TSKW8L=Pu|8Gt>8CFm z5riFq(U`+76{nm7$DvuW5a+IPBcXslsKD z4}|~f`Ef|pcwutQIXNg#y73I?w=ek<$N$Nnuo{Ig{(u3pw)he_!{=@}C953MEnXb) zm9ocK16+`xMH~eraB6e%F{Y7;qAWI-JR4@`>&t|y%;nC)2Lq^)aFO_;j$6Hf;9yQ$ zQNj^Xe9*!>^XSkN1Kb9~8@X3nUfr+RpO0CW_^)xISZI+0w|ta-)p}mf7SDrY_U*1N zuc0ztr^|pYx0Wb53AI+zL@#)s`RunUz74y6cFt5zA#MIIe6|?%e_OQ0y z1-xfAyXQD)C~~vk4ha(N<)$Z`simXd0|LpTXH7J-4w#8{5c6Vo`B@cs1&2`;#~Jfe z)wU@muS9hCT@p7iLc{xjS;CJ%w}Fs1z}%eE52DG+KN87nVCJ+tbnV9cB(BWoYSK~a?tXAwd5SJ*Yh-Ms%uu75vxb(sFB%|h&QSxj5AxH|V``X^qe+2&pj1ONa_5U) z6)VTQN}(|tJx{2VBVPOtD}S7#G3JKCF03z<;tnl;tmPF$UccovuP@Q`E@W3k`W0kX zjOG=cK|hQkLb5r_Ih%YP)qSv;<|YvQD#@`~T^Ux^lRSSJbOpEOAUWvqx^qZ!*8i@p z_GS=~j`1!HSrqUjn@M9GMt#y8{#9f$>hVuwV$TjQ$o_1b_}fec6xzFg?f( zthdA>06`C&N#;d1>9clAQH(3Fat|OmMjZWAx_UMC!+2us+oXFDm^tme1f*ZWg8=nA zAz^I4kA~?UQ0{=9q`NxEPojpe9#L&GKFMG4=Cg9zG~pBF>Gzh9m>`%!>F)LHahqUP z+-p4i2k%-uB0sYyYpEf$J(v)wCu32pg^fnAND_*fq=$D_@TcsNPn|qd^~Pj3H4#1k#a6`$nTLrg0=JR;dEl6 zQ75B)`3Y72zUJTIqG94_RkSMEbSH{y{1cb1K0i36KKR}Zm8inClAERDKfI>A&hp+; z%X$hdCCEu-uy0 zibr)L@PTkMbue=@S*AoPQdSD6WY_{OwBI7iR(h24u`UEsHkWOun4gh8{@|K#s5w}6 zKZ*z`8+H!`yc9Ryel3fI%nX(X0z@H(Ou>)aEI4}pzSvNQ4uV~fdo01IT4(jzBcD;v z88Kv}IYH6a@N9g%{YH&IIj4mByZ@(XRrU8liukBMgTMMZI1$5;d}fZG2`a6|I5i=| zCb0y%nGkes(A7D~Eh)y=8RAl+4scp@qpE^Jk~zj@?GBcWr4R=LPF2i@zNQfWrrJ0) z*WJ?O^aU}gE`l|HwQ3lHpLjXTuwi2E zYcm!5hl#jhL_T&IJHp1A)sRpi%v zkvuro+-UHAR7ys^3M|-Xlov;CJ?Umf@yM|=&Wf709s0Vp5h;oP1&d3IZh!01P(ig; z&bFUHS})OcT|ILbu}U}TkbOK76etMCQ12G_EN>1l1+1PYbe@bZq}-iv8!X)$pbQtc zn;MY-H|r}8@Q+Fn#7FFl|FLk_Ed_ELLEk{ZfNpCr5e&#JJ{$juBqsT+5L)g@u47Rc zoRRo7Td-`%@S<2`ON|9NI*{o zUe~8Diy0l;FC~xqGH`K!kM@^q~cINz( z$2daZSiDM`X+)>0lliM8W6q$2>e+gd{bIul2d0ZAF)7-w!rkK=VxlFQTuUAXqcZVo z4a=&l=Z;+~Cm_cY2vjJjl}F$yLw%A4iX#vc4#$s*sL7|4GT4EgCq0-f${a{KQRk)> z!e$FGZT4Je?b12YCK+09fh3yoB*S^!%y3FohEdomDcgE3;yt%k%D9lB& zZ@xHg5V5yNXO`)&o|Mx1CJiL6vl^s}2Su3*ozvVH$Lkw$SQ(yIQQbvKwsul56cj)y6Tw=@&*53S>}a@rFAYl94vdY z6BVpMit_wqX3XL-ENR=XKT`_OSI(vdj02wgwr*SImh0vf7cf($jbmc407e$Ch%;%D zg7A+9A_luo1+rW{NvAJ_gjtFp#T+=+;+sjhBiy+^+B3F^b>4I_&ykeekTTUIaA$nV z89m0d_=`({IFo<=a7qbQYZxl;598WU=M~3B?4uF-<>2d;KYuW1DpzzqQMt<=dGH#? z5XIau#Bslm`AC*v4mtccZ77kT$RxWfmtUud?_z_~*uJP|7Gj@T*If#~11<1-^XUYu zlQnxcAzq7C-onG4RMoo{PyjnM;I}Gb9=kAt+YJ#6IZO54_?96U-^xrp{coLLQM~Ij zhH7V+lN%sN7(h|-bnhmZEdEQjqQl3VzcScTDeWx1*Fg(F6IUv5b z>@Y`LXa;_2yoD=#Kz!Q$Iw={LWG z`B$1D)U@2IH!s^!3aUn!qI}Xl(_FpwHva7JFHo2EZz5%CI>{v%^oah~g(O!!%AKOc zySGWZ!A8|b4Dwm~lqF)1bAk{*x*k^BdOCQxdY{YGaw_!X-06>}*xVYPc-&Y2{y#mP zPS9Xb$X7(S^H*G@l5DyLB&aQ*?Xb#&;(u93azg=HWyI@*46a?U)S|eGp@rec3Ko<` zlN}*mMUh%8^6`pNAc4w)ql&q}G z8Qiq#tcJnHaTwiL?X3ShgKpUV2IxV-422xftnn2U) zVy^?$=sldg>~GHN4yEc^hwJp43Cu}{wM_0_nC}wzy&=`JJ$snbHBhDt=$GUMX&)l{ z+beAPib+2P26KdgoGTzNU^vo){<;MnLpL<(M8kRJv@e71oj8R$APJO)8ovs4dq!_- zAJUjyIqMnXY{$i-P3*(86S>FulPZ;Br>QAjMYe%J!9qyJraSv)c^jX{^ZC>` zcG!s?*Dh%O`2bO^{)WFW9tuJPIK%Gq<)G9+-U2fS5N0zlV+RFZPG~m67P-iFV!!=! z>cuhOF!l$bCsz4-6iQrMAoE&8w-4wKrAI7#*zgsKEJ=6z+!k*T7jx>l{epGtA0<{K zryhRN2}KcC*#r4F%tv+@IP$$Z{6{P^X5`vp(nB4)-SH+V!^?BCLfHpE3vz%T%tRTA zS$JCm5HN0^q3_D5DWoG~Ox4Ezj{0n8hDCkk#)XxA@BAxjb|e7={AgwQDV4C-^x#V_ zL&?UcLw*@nFFBco7X)XV4M6MR?(#jLjcu=k)_XB)v@U2Ns2Hho)D}ORx^WO&^7w$U zEfbj?bdH!!2Oi9eCJR7kozZYye)0dcts20A+8n~L1B?PMK-ks^CyO0=(idU!7>VN+ zmg@^6X9P*jxVF*Gbg`KxA1%;z0@486QbIaNG`)0L8eXrNn(4iLsbPL*Z7hh;*QktE z6CC;XjORrN!4tXD<;l)z6E$650Ja+1`H9Q_=r`Y=g{ysHLU;M_%UAOw;U4uMe+PTu z$?QYjl=+#?P%y94*dxz#v#;YMFTXtV@CCy#2YoZr%uHX|5ekb-!NEx1C(%{&$4B$D zY2#<#A^6ehPW?VuzFb4;tG_6(9~H|@SQRH_E115%RWx-Nm;7xbSvH)R)n;+&53_qKYmz_mLWqu6G$;uuF&q9}`q_tp(s=kEK zs=ib=0Xi$Rp=>GcI$(0;?05PZKc?69M;{HO6=TrPPZb1pZ!El)>ova+&% z2Z{it9z5=@pN@d7m8aupphCcLT7N`n;sby}=!WV4#`uggZ#S$(&=3&w}uEav-l(qS{+Yu^BON3km zGeQB=ib|U5FNVjS7_OLDwD*R|_#oqf3l^}OZuD2U11H){qj~;r@FyNG{XN=G3bxJG zlcU55$ddHyzZ)CBWt*Era#+n61*#~~I#{Xjv&b!-6}S#V%s4TpOVyg9nJ{PZLlv8>Xh2h#iRQ9EiDgu{FP9*Wq6^6>a+zQ z;7r0vwFoy8b7T9#*WpF6hb75VSZ-?1YL<(dBOHL>^dWFhB9dPymk-U_lxoIkT0mXd&zaaD^GCEhrpAI}9izJA=cv@Yn!>7$HZFXz zmP9RP%Gy5eoK>J#^JEC6WfB__Sw0(Dxma6Jdh&W|P5IFM6VFc(axt5^Uv8^~<|i7X zv`$s!{YO7I|5@9s${t|ueLL6&ba(}82dUo{%5Gtl51r~F#}DW-*|hu1$4dPGH zI4=zTbTwtO;Dg<8CTy4dH9#W(Ue{ZcyG~wuV?;JwQMcz_tSw_Eu&gNp)OX3f4PeNM z=M4RrAZ&PmiqqJzTV^3OS}y1$(bnoCTvUK=HvoBimWYDQns2T&N^vhc@`gC)b{^d2 zI<)#8H<|H@*j35Erx2rkWP)wug+PfaI~(pw7%VD5!Wy$vLCU5ysap@iG+JDD=5tQL ztu`((^SLl8-zm1C#r4Y!2!mB~**!;$%bWELH>S|bB4O@ZC&i^NAg7S(jOJgGPhOMI zfF;r=y6-YJHNCfEGG%>3!*dt#)fqWY5cT?Z>xY<{U!^C23YNJ|36ED?*Mi=kCe( zMY&v+!_6adtKr?$6yoac1fp`N@@#a6}u)?#Mu%wqGJij9! z+!EeUArmjC^Bw3|D?fG#kY&D(Zo^%?Q@ZwW!3G-_g<1H$A4|4Ek8wFNn%m$YrPzgD z#07^deJjj}dz%&yqzJwwYj3h3jfJL%mNrC3cCKqWqmB&+R>tQ$2_m10zn7^D#V)9f zBYkhA%?t;|Dhjd~nKiYb9KL1z3as+w>zt0Y582K!&gPZptAyn1bP5X}b;NYI^fGtY zi@W=%Lek)Oi(;3;!y)6=$kck?2}{H(V_OXIgEi;Z^Zr?l!Vu?!ew@KbDoRCh`yJOO zP0Qo~gH_svr3cO+JAhKST0g3 z!&TA?QMfot@iv6+Y<=3?OL22anU1SFpPhlyCvm}#R(EKU#T)D(rz9$2#sp;zkP3~CO;w3_k;S8&uGaHAjp=nnri!<$z_`Nm|2W|+nn`5M2|t< zS>}!UfiL1Sw;3q=&=Q9caNF`79BkDtW&mf^c!gp@FT(4w!ZSSCHFM;C<&beL0RH@M z($U&>)H1Q?e82ld>iVZRrAt!hDV;xmBY9P6busNEdwx}g_6lPZWK4N`S9XR>*5BDd z0K-mMEtiQea%v!PWN>|(yk8@(LqI!qkKydaOr`NkJ+zTWeSyqiaEGg*Vpbz~YS_Q2I!i!%pfG1TlgGY{H)jz~pdR*+Zt zYv^Z6Vf!vdpiV_FFAMg8h`>ZRlobRlfF+F1AqEd|)rq-cM9L5}s3g|S5NHW^@S2*x zK-*JIPeWYGNP|30n1AhUoOkH<1F~-1h_^;Ko_?E63o^amx(&=s3;g^S)?#1kFCs2s zly64lwm~SaqBtE!?5@QdSZ#2%VKzqedePqh`tB?Kfv+0zi5o#%pSw0^Z9yG{0{Xx3 zA9@Xrg8gQYU$;R(2p}Ml`alT6@UM?a5DMQ})*z%%1mGaz`X(c!wy|&mbxEOyMM9M$ zd{C)VG_Bzea>v%b?c;>`a)+%MPKUe=do!CMCb2;67WBhr1Ynf(1t6I9-K}W_7zh^B zRH)ZhF!r89?%OSn^4;%x(B)UE14I&+#C<((x44d*z7Y9UZsDIaLE#l|{W|;UPp?F8 z_~?$gV?B?1@r7@sbcPk`8-F$*cQ%8;J`#*R_1&+qX`ftk(JGl~h^4O7>4a3v`Qyj( zg`e})K0>Jhw0!{fsR#14wern6x4~6G;rMN0p-sY|7&bo`Rc-ZzjO$UNkZhAH}$eolSp!Zy68;@ zocI_L^lJfu#A;_hyPyHl*V7AOwI-QC^Yi+d>? zp65I7n=dCh$z=8)lT2nOlfBno_kFDuHT+rscvA?|N3%h{@{l{Pm z&@G106g7OF^_-OUwY5gF74Jq`rAxQRH%t3Af2S}I9Uk+0&DZ0}+>Q9#WfjAXiRBG+ zkkQ)2`lsy2n{Oxea!y-=d99(Y2|lL!oo-p;N9O27zHz$c8xo{vy>SiLrAcpp@VY4d zHjc`r^b6Z}gvwh!p3=Zu=->p3XIru%00;6-5(LQh7?s{O@g9mLz<`Wfgh1$Rk?4JpGMal7JG3gqbwKL zUPp?SuDIg{ByeIoQ#z}H;X-cS#1PqxU_pg`Szf5-UTa=8LGm1y45*Ed>7BKrh_IL; zglifv2p-L~I(7PQ<9v2l5miUrwI0ZN!{0=a*IObpZ>W*a%nFzY8&ktxX)!@1`F;sU z2|*LmcfdH?@0?S>E>5nTb|+3Cekt`JbX>yHj!Vs;XvL{cTP6Q|-_NZ#)rn_U*5_f{w?) z`X1l*oLer3rdft7U0xx3)TJ8y+~pU1M6f$cT^cTb>Vayj*IHp&eLWtSVx1)ne;vL2 zxrx`)rMs^Nmqmv8@*)4a%olxcq6@TDh+?%+>lJ1twX$j z&tFv>aGiULX~%E*E6V+?A&JiO080hnQru8?pdopJzUYGEcV?rv9EYARdzLd&Pm|C| zeus32z>RQBE?xY^@w0NrL9mRZZSbcT;G9(q=Hz)H4h$sXJV{&dLe2}uQ6G1961>Bj zV0iZXcexRPVHqu0MVq=TG=a+PrP~)*t%gyJ8EUq1$jBZ-RrpJ#n|IUJl-NFk2|NO=DH=hO z=+ki+VNw%(JtnR6`*CJE>&02XcdQlsAbKM3GHkqu=Y@Gw_euSPfmiHcq~X3Koi2Q4 zP!<2`E9($?1;SL=ksZYzW&pHjlCHYpHx@oK9`GkR$a#yJ*hX^H4z#8dP=93HwiC4`c&7sRz?{NydbHZ7RFy$jok zY}iOD;dqRV;rG$IH}UW4_eV7u*zU=e+&4tFKHc(PN30j$)V^PyDC!&?HZpVtE-dJJ zufq}WTUkI- zEFAIr$RyEb(B^qV#GA(gOvYB!zmG|-#l2=w6qRwiPE1w=f_JM6?Lj}w+If{XK^tfI zVUCU6`{4_;E#I`rTSRq^u^>K4K(oeVBIt1;I_Wf=1R9iYf?WX={5R5kl3crw-9q9I znKy|GdywuPNSpMjnqDouqD$PCGEv@JWXnGrKvT*7>NLJZ+$!e)P^4fIGV~YPASFc< z`^adui85nyQPk>4yCIylSquMWXGT(RT2yvfH+h{#t}ceMPV_N1DI?Cy#z%4sos{!h zHROv`zO+C?bV)+}ztW2q3V}qfbZhMVpU`jT-gED~tNq@*yuyu_6Lpz+uv7Vk2)bfCV5 z0pxlbE|JWdVAQ)HzZ%P%(P^e!V_m zuZ1tV_tQJDi8K*yJ|B_Q4D=aQrfhBbJxd7pgs_lo^*}7a9VBG&NFdc@{MEp!Ankw5 z8%H55vKJZ<_{}*qnL;2gfspWg8Px&Xj)NpVbe=OJfLhK6Z9b<>T$CO<@Pu`Ft*yn? zA4yr+aTBt2JM?7keRm(KMOEqa_)jmt+xGXwbLu!y5RiEWEmX&Ux+axbzfIO&MjG-j zm5EKnOs$Pu37L7BaKI@05O6|iayZe__O^7kg{qx_q+zmfbzfubrM3v{7x0Df2&Pb%ex=;4;H2dJmHfSrXr4@j@7*E z=x6oR(2-vdTJ+8=9!j0c1Z_%pC|_!ELIbXlq&bGfwb18{Dx%Y#(>En5ncQ(ekL`Ao zEt`@QU{{Z10gIA?GA*55^PmpyUaS`A7O^LR5Qcl)7O`d!^F2tLx?o{rk*cFwIYJ9y zB#OZxTHPkd=M;dc=P<);ZhBn`{Ihu7p4*75hl}}+H1XY8={ISoNYlZ!P+p0*cNYa& z-@@hC!4IWfN)A?RWy_;c>igBVD#gbLz7r~)$w{Oky1%lx@xQlIt{1*~?Ql+->Bnh~ zhK}DzR54?k6WY+gLVBuuQw|_DjkAgXl&U}8kaD8r1G(8Q)4%mkAt)dQm068|rw&tc zu+2jPn|p9!w7B}eYT)|9^cCa7%qrX!vD;39&(8QN{*;5mVOlJis_Q&`w@3q z>c8t*Zl)hny&%_Uf!ZRNIrFz!%LLIUh!jbu6_v8XDjO|KZ=F2C{hdf_eIjkzxa(JG zJ&U-`=)?{?&oRM8qQC#uw`%fkvgy++$v_k!n*YQWVxNLD#s4_OpnxhJ1TVrx_od4* zl(^W#X7lm-VcStd`P(rRyV`3Ez52X)pz%qq(en>ysT1!-I2szBrY_||S>D-a-|zB# zFI$hZeWzRd-2=>i8kjXqiu_4bL*%m}BAcm+;Ibub-T@c)L2CD_ z+Dtrd6p4nYliuPk1CkS!SU6o3+^ogPUAwV40^%qO3Rco(1R%^mnoV^bw)fGF-@fTe z9wj59NJnUSD-Ta0t`)AqVG4EuIQ#X{o;QlfgN?}JJSTaj}CzqE~WO*hTcAn2R5qXi)k?a_`|G(k`{`JHh;sa8#iWb zIdO>&u!*Z=T$Ij813S!Z!!V9Z{jA77I!ZmLUG@ieIk9ZVd9Ca*L0?cP`$7xlOle~z zQnExxWkmM2^iGXU-CovuA$y^r@9<4Cc2HNm)x6ca0$21@!Kpa9i{;XAP`mKYU1XY( z6MrfpQ~MF_M2uug-7aNXAwTy_UshvUT`a945NPqIUZfAx(I?Jv=IbZ}1l&B|Ks$PA zrVLTNGBn}#%G$VG2=pqf2Esrgt2&$5TDXhL0nNz6&nhD}Axdl5B4er7A`8w&LQST0 z@E!Qa^VKAorpY^U3){h~fzMW&v9aZ?B^}NOXmf<+mE*aD^tvSt3#Q|^= znTKK)i@faWa$54K^~vj`Ev5DBG!oIy)tU?=_uo<~Q{hFU)cX7JDs@n((4F4-J!iwJ zd)a#JiKkNhXt_}&eK#L>{S=vMrgW2j0j`}345`c3aZXsC>a`r_XC20V0u9w|NF`@> z5p8GO@#Rz49*g!a;~l@^Z^t#7T1_C1N=-x;)4pmXpEt#q%iXSqX+9?Y(AG~tlA6O4 ziZRGmk}S+rU@v$ovfVr)22=8J`|i-l&6RW0wWT*xg1cS?+1TcK7GP}pQ;#U57uezc zku~*Dc7~rnRK)lFi%$sN=*^f_6!^Lg~xZ@_zh6hse}thrd?Vnz4%avzgZW#W~#(>I}(&KB#T=*RhHEC7TCnl39A zFl;y)*y{vnXZPYEAuEaLw%-!$dLOqgjEzPoAuRe+JHL7}D1kc~kl`I03Q1oGKtjIC z!N>V=t!uaZ)Ti65qc@n;zmd_o(Wbij)fi?z@aKIQE83=g{M7B%k>c>y>IN1eF1Ar) zEn@d_>d)WuLXz)YoZ2|{gONb%yW7`JREWWoX69}sW(36qlasY6F~dhh%VeLc3~xaT z@~^kZR=>gye%sDR$Zd<4K$w!)80#}zh9piR4`oaIPNP4t?h_IUD`v4Ds!3xGxwT20 zS(U>RItd_5=J?T;S?oq~SK7E%@mL)MEK;>l;qofAJ$Y8?w`#J57iR&ggKvWeboKzA ztYz|^eRQ?Imug3N+=tE=wz;`s44&iKN(EU8nhUVwqR@grFKYIIe{wcq$TvBin-pkG zOA02e#|2%bUHOD;(_%VIGN_iDoY8GsTuKKL>FVS%*}syhmCXtZI+Rwjq|-?kCmS8f zxD~R!(!>vOM-L5e+-U>6zVOQ}h4PsDWmqWuQ5|6e|0peqq@H6=h+NMDiq$v4sS{@2p^V_sPFao?dCk^vLghqkY>w2~8HRJ75w zqf%~J{_XH;6I6XA^`uyE+CKWnI%b;_lcL5QuHh2D=A7ZVFcxoQAghD`H^<{ODMP7< z)r{7Ml8sX^R5?)`j^hkBAm%R`_|H!UAsIupx|@FOS6#`4eNe_0eGYQe*fJK4Kdn|7 z&)?7mg!F%?oT!Wd|A`g9YsY~6{p>M!)#hvw&9Fh1f1}CcI@i0juF#YNfGuO?=H$WLJfjX1_5`VImU^HjbRQ!G0}(X2OXwB@(HygNRUx^6$;I zyTU7Y4Q?LXLzr7bmPTDg$BoW8%KLDZpR-9u!i!FzMgv@BbTM`P^4-w!iUwoWF|a>= zr_tr*JOSS=WPv`UV8Nw87wgUExY1v2(R}c-ZKANo63e%nfUsbllz0SLd{n#_>&A7sN3C+s` zy%;32L><5oySN}-d)mFB^dQ)py>H;J-aZg_g^7QtSdLHL~2bFY?>v{C` zZy(@&1oFPPN@%Wn-xH1iRD@+m2!R0XTQ~80b7(*JJ6db2X0D%N)kIBI>hM*0su0>Q ztXSC~v!;uLUUNxi;oonWz32Yk`@(-`ya3{m@SpG@0oqy{+46Nn>2;`jQ@Yv=wx$f) z8NVA+?XdJFmug*C*Mj?OXgl(9jGK>Nl=H7&+MfSiAU`_g=7D^26372(<*=^4S?A|k zTHd|oiE^R)M0KVge~39GwYblRetQb)BlqI)CYd&hG&ANOfe76k)}DwUltG(m7kxBU?&hrxAVvnkvK$i@9)$|KZp*(Gr?OSC=0(p08*#aF2fey z(^7;--uu%R{Wp@4+kEn?R$M#EDKku^cj5U{RTZD(PuZ(dp2eiJtkpX&t@8F(Q%mp-6GddR zfBOFVfjA&3!twT+tS`lH>FYLFSFx(@%a@|sr3QpQDi0Lu`~=1ksFl3(`7roqvXHis zCEEC)aaIV>cs(JG|$MS7X;glXuTZLdd&hGwSK4-laS)N02>4rVKita4U@XP_6sv?;lF_z02k zc%kQrDLLOawvn3W%GY=1+#Qo3eX)ZS?ib=09m*^riu5QmoTP6eV}xg9Bjb`T3*tv` zj!icoAixl_Ygv5j7{Ghe=yQCnO#O#Fy)5*`1Dp47#}f!hKLlSplXQn5d)bHu-#!xr zvje{(L{4|F;N`x(G)8nybG(tEe8BFC3h;iq9cgJ{&KL7{Vov41G(lI62B6fNM}4u8 zxJ0^!lzImp7)2lO2py#S=ZnuF-Y7@tTTUgD{1Qftpr3sKQh!oQ9=L;S>cp$HVv+;> zq)NwR=_#7GLz{OdZ4xj;`R6Dw0N;;GW086^#Zu^gT(O?U=KUGavwg#z@P(Xeqr5O7Bck*Uf1vSVfkeV?LVPl}g1Vm-S(vA+p zUgjeP1G@;$l-82Zdoe6;k5FyCEX(!e^YbVmdo$38W+m=|I?a-&=zXit!935n`Lm2T zWUiTKeftW{>L%2AyYat$znDCups3OvYi(>G8|4{rewes(y+&ljpa!x>WI%eXlL8ND;J|5`L75TKsQarexYh2W0g=4bEwJT&aIn&F-`!;7p=jJ;UZb}OWAJqquI*(78a+)s1x0*>NE;bsU2G3=leIQs zcq?;#*d|Vr`bxU=h!dmB%s-n5zkU2iw1^FgdqhoFX8%kneAe!m`Ml*Xfv`UF3LO8F zSHNoG0QErt^0s|n{$t^boXcuo57}$X-;JE=nQB|)m0a(_stZRu!Ou$ zU9PCF#9&?TF@EZEZu;*t#f(G1wtBp9fC%3Ac*N|Jc5Q@)?-Em-5)~W{FK<8UXPQ-u zzgOM-ZAxOHL%C;Fa?EkGZ}2((L=|9DrMH_ja;mDPtt@}Vah&=&ZU)=!=lt;-)3Paz zWkE#+H_D@@2GHGEGV;Hi_y@}FkO}XYCXi_r3U@4~c#EZF~{gPMEzL7zCG;wMgsIsE7MeB-*`Pix^H2~mH4Q`aeqN|K|hsJ_6? z%N8wsl`gJse~dp@Tr!;YQLt0$e1S$s#|a%kLM3(nG4t}4nAINb7t`vWz-laTzP46B6zsE6#Wy3?X zkYK`HReod?$bJ(lb(c>6`3A%sTesqNX6YQh5{;bU6Mf^lRekZkhv-AMG>!9W7-(ny zO)i%v>&KasSL)M)fL(ej`G84;(m;FBtk@f?$&ks+k2(i- zj`tdDgJh)q!rVmV^Ww4f_w=>(w=RDk(!=@8hUo)6hEvwD)tMDk{^LWvj;TPoJYOTT z_#>X*RA{vfX)6}6%AGSkZ<(MD@8J)98_+j}aDPkT`G{cP_DfO?SD=1w^3y1&<6$o3 z4k!0phUWdJNbTud5&=P3$rPFauda#r6S5=yMJM6f`uSTZ{}kLSJ1pL`yW~;09{P26 z{~6w|Cd-)ELG3D&lGmEdA0uw>80;#4{g>Cr)w6Zmmi8%YOZ| zOHPQxH(nextmI<+~u_c z?#ONT7wa9t>*?qKk&`!-Xh)j^>PYB`UF|O&s1P@~QkO$(2gqKAX>WB>T~Oi}UPa?Z zU^oW_lt5|HbWjYthGciu^LEl(>NIxk&u0WlN7{GbZ?eekooUaNyztD3a(;TCi0XX} z)kk$ww`jWJbJsWkmL3GC+(V24uXYe0g$GZ+3Pn`jfb(0@fo-UFty>Y{D^S8<|6j#{ z{#P@>3lXZ9Prwc4Is0H0*Bh+`+)v~7YiuQ$RuIpAki}O?KY6$S`B~SoBX6o_m>VZ& zkvOslmhpt%ou`tO$Ry7%ZlZ4tr0}_RKR^C!&6VIJkU&q*75&^9kp3^u$yg2q`zdL| z{ja30TZK33u+M!jY(#cI35qV5ya6x%f-aM| z_jniPsidDbp|Ex|`lygQPXoyKZ<^n*d#6-a{FIqXtW{{B}>dOcuzfS|4fYx{cleb%_aGZ9zx2DhNs*3GqTNZnYM3e&l#!spPSi%I zXZdZ-HlTI=^WM+mP&DHWiYVy4pC!o`MdOD;eele+fRU^+Ued1ODEbO9p36DYKSCR| z6sR3U(hvfEICIpxQboP=zz?bjLb7;SWD&3m^EcWOx51Z9pwZY8gg3J1!?ab`BoBwS z`@|M_)rAqkxJ%B|t7I*1ASy2@aKglCuVh)SC=DW4f>G7Gy<#fiPxhmMgm4s_<^pV&^VsNFdugb|DK(N)?U98f2AuCrt*?*=5 zJrU|=ira&`0)FYSnoTLyJO{dtad;J9?+k=dj#6&|`4iZ(-1KB&opGL(FQdGJtgZs9 zil==u9H+{@5p>*NbOc~lLpybkgSp@lzi?;UX5D!l!%GKOZ>;|~QH?-mgMDo?i(>3k ztmWEMIc#o3TaL_mD)Cj1BxYR3V~TeEO_X}uo~os}!5UC}z>T%~6A!DEl8J+!6$3%- ztStf@pn?i{E4x&>mO_xjE_8yhPy)UbaFTQjs#5igF>4woJ*Zz_o@>&Je+fQ@y`ew1 zPwLXLFY1y(uDQiYmeC1l&2bHcljyR?W3R1_uADXzU(TGE$Wti|9Vl* zZs%v4r~t|I=PqW|pYkq7>1E4@`)CGx)&|K&v*r%Nqfq=sNScxl zMxL9hB#3d5N;vKKerkG?&TON*x9{J=(3~W6j5s&LCO>jU15Uk10KPpE*hrY?^&}8X z7ZnP$N#n)a?|P_L6>#g!#xKsSRH$Qsn^C?Kt%|XH<84yca<4Q52?*-2#DP9~P!NyW z3+~V8d{=dD=#0ye21L$VxoY8b(LkQGtQ68iEn3f#uE)oNhUPtJYmCdWvfS6oC) z94b(vR#f_a`b++s$B3cU8TdI@noSp{_rH9d?VN_>W}2s{<9A`e_uYPaJGU0topUpf zJ0p=Kq4L+@mbTX!es!X`G4a90$qUL=K&}fn+zPxb<{7P_MvF}&Gt_0A5blX5K*dt* zsNa#uL?QkWnoA)Be?4faV zv2sg=UUxe^30|Ww~rr;LB=I~)7f89>RNi4U=fqm2cymD zFi(Mi*m5pJzR4>8&2FmVAjR(AuCJS$RuK8zUM61}j(w6TQ7ZeY8L`2Dbnd{2Qxn!V zIgM|RNKUM&+oifH6N5r%j2L~Nu?sT3I*iO?KM_aIDZZ@~qkq&xhO-PHU}EDuNDJek zS|zwq^BY8yW^3itam$G~)-JkIwdnaP3)Hj=Cn;V9d2i<}<}BgKKZ3GvR_uiyJr6*c~Bx5ik<#E$&63*n!hs}k4Ru@x~C^Ezk5NENLKUcQHn`` zl^1cFTw|JmRpXo{6R!!#k=L4|JO1uEF27m(q6{w|R+AnZ-FGVdZ;G$#W`DUYoYW~- zf^<1Y9SVXNrY;0C*b2pNVZQRb$MXUzg0|hA$+4dxo=XIRNZDgAiT&O9motF@^CmPT z=_cYH>cK2RnL|bxI9W3xYz_2k+h-X7fs0kS`R@h`u;qo*WvCkf8MJa$H3b_#h4mY@ zUOcrc+Ry!;b0Tu$>s5WHosbHx2ojf1@BRP6YOCrEMap(wEg`hJbl#5(@ZBb><^*4% zdiM)HiZ+U;_VF9Fe07=Z7h|M6*n3ed!b;jX;huBH9xpqara?2uAir zJa(UQew0(eVvZvP^;&oziXMC~41O<&CpZ|#i+n4%`ib7~S6)l=W!taICqs8-<;C&P zhvpZmiMPK-SBt;2YAOsnkAm$?jnkP8N+)v1X*6N5m1=-o>l$K{uF=>D+!~myrNluDYa7Xkkh^*YF<5X=g{6zQ)iHw*XbegBwjNEhSdebd zmv4{EyyfSjDaXRx zbnaaK!crg{aQ&6pck;xD3a_LFRB9G-ers2zE6sch6Nf#!%-#8c&)A>F8d)T`YD0hG z2en!tC8EK-Hn-3rs1kSEFZg1eGe%;6uXUIeJle8|oe>TnP9WU^|AW7I2bTwV4!;86 z@|Do7zw7!(METR&qi!W$Wlm>KVr3myG@w|uc#Ot)GJmru7Myg5#+Y(;2+l*+2ieI7 zoJb56Tc(^%#!x1;t;135OPY5FYzDGlE8F^E1Tqo-q77Fsv8N(+e{V5ybmo*HojY=c ziDFxA{s2KJW$|iJT)%!*=HM7-yI3r+_(!{8xR@t2d|?PLY!l4W2raAc*AJnklN3YJ zpoJqS{7>z7V}Hnt4J zEa!|q=dDCcf^RPLou;_JP)|xqhxl~XEqfy@cPKOi`py0mx<99bvVeLVkIYV&Xy?j4 z8q=1aC+-&hwN&5u`NaHLql2^n%QMspSt0DjpHrDNs~B;0$yN;--JCm9Q6i_4(dJm` zRHgyL^ZDKvxF`4OrhR0w!F7}&?r1-GGW;++rdo3O6VZJ_u!fO5lIuv-o~YWO^y+w8 z%RXc5S`N)!ViIcfLcRZ&Qwt=%LQapY`;~=en5Fx2;*0gj_UpS2EvNz|L<1;n0Tz z{gm-0G@PSz0FJw2v``#aIaH9Y!V1e*KB~fW*oX2e}_d%~-B2Z;Fcptv!bhbC?u)G7uv(nM*|&)aGtLHa>Lu5OLkkfj>M-q0NlNiF_v)h!TwB#Wjkr3-d5)A@6LEbY z4o;RgMYwQ4M(hJeYw-qVyw6;J6-?bqnfV_C+yc)a!gJeXMgKMhW(9oxV@dZOA=QG} zp%h9h#m$dSjY%#eICqhMe4MyyvzWETH5By2;5etWoKv*(%G#qdeFm~hCCg_FP7u446|jKd^W(b{UTFfMT6s(yA)srw(EfG9`>l7GT*`kwRin4wQ>qBWyxS2TG2qaa)hIty>H_d)rIMx`>e4b5IwFNl7x++ zkiZb(k#%V8RMenu6@*bQq3jQV(<4`z&-QB-PI4KzopRIgYNO|0PE~iSI#F20RbI}R za{o=6sk?rQm0vmOvRAf%*1K)uZ)TGe{Raa1O4Ag&Jk3}bc}oHabz)M_oL#Cf=djG< zceXHAayK5ESXIHu;_$pJKD{fQ&Xu&Ay)fVE)Mtl!CxW_kL9B3M-p#>XSenhBExh@# znYjg&kaUx{Y0cH3Lp04eVeMZ@koecfsW3z48o~~vTu*|Pc@f_A_sw29ko1s70~-i} zqJOA^aYa|Ih-x$3LY!8nMDLl5FiqbfHN>#bJQcMJveMVC)`=1^DS!b7a+w8whJw=G&tZF z^(mAzRnggjm^9ls!-}+`3YAIsT>SZWCL2vPE)B8Chpl{cCiia1X?&h;H3uKnhFK%6 zi&)31pKNBo-?8J)H~h3_Vex_&35S6JbS#9AZBk7X`YC-Y!z=S#a$E-f4IIaNW`&jw z`Z|4(vg2(Nhpe3rD>Zy4)>Rp1_!MFQLA^RVlI;~-%7BE`(kqdfloCh#w(C7Uo5`!}j z218!0l=F$Ze}eQr&@fV9hjjsC?t(e0QZ#gf$*y(YBz-;#i$*p)Y@uIbrJLa4z5Zhj ziVascgfs)2h3B1H<%_+fn{X17TZQ^y2e0-cHdd_riAKJ!m-1TnhYt&68JAj0eL4<$ zmW??R-D;rlATeR_F=7;4n$Z$)T2IP+0p~i%?bBZMD5N6}v!U_(QzgJ%>UJu`2L4Ks zQqxF*)>;fpfS%v;)ghjW(fJTHhYyQuGC+oJtQH(%RX0;@senSF;o62MYA{WVWa;aO zDY53)NY`xgAdcp#Cs)qDXeEkzdauomeJ_g_RnbH_Fj*~Mm^dDsY8Mw$#!aReZ61rp zl6>MVp$z#51r8#x$|Hauor-7^X8PeYRyQ6jc5`aEa#8dfE_YViK?&YZGM*{7Ympp! z@i?luejDp?o0TfFuxaV(riM-ZuJpX)!GGpDCq1yCZJmr`s{uGz@~AaS(khi@hQpgt3thW+IizDS*j@=-txRqm-r+4U0YbJZK zqqbbH*)fv&Den#aR)E!GmRzq?j>K?N^Y`YvKJLi?J-$%@%UPvO8ScPsag-p=;)(~` z+-i>Ok|SPyqa-JtknA`|fT+WwyQrg2{@>2SuE8PU5Q*FDRR@!vq43;#lhSemNADHh zVP>$p_bLQ}SRN@g)q~5iKg;pBo6Hx?fc#=x2f5AFcFU)#*uNjB+5fJ@Sq93%C*NtU zfeTB6vz#bE$AoGe{F$5H#70R9nV@F=8Uv`>R+ut3&`$UG`?LoU@RF+Y%}g76+=7oW z{g91h+!CrX(Yli1e5kE~xRU04(5HcXDdNHWpEkf9h-4PBV%#IX@~slVMkxEizFEY4 zy21ZX2XA}M_F08cFwv-+2PVN-cwNz|lLsO}?^`915$84_RafcpmqVB~h9q-wYRd5# z#UhM~3B@vOKFvX`Y#6n3aLeJC0wh%JBw$|0ljM`&IA(KP6zB`H8*#DjVF-Sr*LwH_ z{~)b#IqfnITHRHCsbw^TH=|25t*5$Gr~Fm_3`sg3m`$1T6K#|((i@uxEFGdcoqz{T zQ8g2=qb_DjaW3S}tU^5EFZS2zAlaGa)uZpkIepLp*8+Q&DM2Cqr-Ut%5k}#7EXj9! z;u=VpI!Ob@hW*a`rGqI;1Z6uRtUC*~8*~$7_wM-|K={_l%;1YMYSiGJp6wAJm`E~m zAk9|+A)Gd<9J!`!?qctt9pBpSLgnCCjnM*7Ren$HwV^dWwBrnQh9c-6syAJAzVPw@ z7f6aTO}(Jh2JP!$W%Vdo{H%?-Q0Ip0${C_=ptGaTO4G&DYF>wVK4CP33(o~>^2;R< z?ol4w;{eNpeWn>;jG2ZMM858Z{cs#eeq*Wc>_*@H7%>aTmBT)eHT#xZ(ZsOlgslvK zRYUr5nymNIfP}-Z0|w6PpQU>CK^z0^_0JAH8iAJR0oZ$5_0Q6Q&W~BBK<;2Sm>;_o z&#tM&meiXX_7(iLa&JD>g(2>XjP`AdVsyVwYta1W4ReuvZG%mb!o@J8sDhX~xkb)(+o+I1;kVE@@5 zeKQ%L;(PPbrceXb+?M~VqJHzqJ8Q~<1$dIW6RuH64Rat6nsbyP-olmL&$B`Sl$&?L z0Mu)@9zguf;WK0I1wCXY93Irq(WBcn<~gZ#*iNyP)Bgm@g==9qBAWK<1C+lAlBXvG z-8l99ewjO1AoG@E&I27VlIoee;3erR`S535ACq6^jVFKv355RKo{aJZI*w{VyleJ3 zlHN9t4{gMl(Wdi2M2SB0vRTmV<|T&ZF*|YpW;O)B=JV^hY=-n00)K&JRPh)xGQSk5 zPCm7RzKBJ12?OU&app$w0ESoXkOguk&F{3ivOa~Wu!+E*F)JpT{Zq!jFBGtiEu#!L zN6xf`5ZF?00;%FIDUmVa{YX5 ztd)r+>^h<&YG{t5yX#=n5FI^-B2fBBUUYj9e5k{YB+K_F{SDF5J{Kx@+V)!zMPNuqc?<6#5Csq!Bo8}A#GlPnF&m~vz>(P{ z8E6=acd#XFqwt36eVR=u0;m$MVC+n+JT;0MVy}zPa9*BKNfaQ786yAkwxAW|jIdC? zk@vAs`ytI5#XLKaus{{_3v_Z@Gy;;^-CZ3&&oVZ~*pBNuaMggdHz0xR(`=yIDW1NJo~M&zBjpgBNyhHnL?>;gkIj$c<>%$Y%qR58P{Z1zhu8n54IXVG*c$B*5{R zy)|{^xlF-<=D?J_H6&5M{1(n+CS_pfpUb{yWT~h5tq^0)1)*pE3?s zP3i=Sz%{fdxlD=J}jUL0kbSQMm zSXd<}Tv8?1j2!$L$X|}^H5!ZSCa-?erS2v>Xl8#Qs@u(12vB}~3sUGy079p);GWn0 z3=y8iHdcK2O~3e|X*$9J;CoBp0mM5oY_&dPL5phco8Xz8J{6T9cYa;hlD^4y0*m^lg1gF>Rm|VjU`3Kn z9H}2yLbt!Xw#Qu)$O50+D&9>uyf?ExL(S0q=5Lsn)Dwk15{c}eH(h~RpeZ`=4ds0Z zFe3=w8ks|X$qGNwBzaA z+qR94ZQJVDyxC{pTlf5(RqM~HRdc>;%x8=-YGCZWI$_J`9nuYR)V#8KaS2bA-5udD zu`194$nE~Sjjrf7vJIMj-H4dC6jq*!ZnE*O)`KaIQ`Bx(0&8u-_phO_6+y+V63s9k zWc}c^gpUD1FUZZ*OF?n%VMLHr&BVb)Ko>ZpKFcd5$t&hy=KaewpARuOY;A5(EAX~I zC&?fu*SP&(T;#pD^U`rd(XPM!tq1RL1B45T02XtU#F@iehk!27l@z)4U_MC-Mv_CG z^i7G;f8l`113}>J@C|`|VgUghw_*90im>Qgi-B(%+L^1`#P)E>7Z2`TUZ>u(TAn<@ zy?4~tfbf$y5BlAymyVj=#kIk&b2Wv;v9Y33Y8LL~vh3Iw5<)}h7lyvl&JUPAcToFN zKH;~}|9WT%h>vaDacqi`69YEgsk}&&Cv@bZ;f(fq#xoqJt_Jp4&^CbC^6-3yl zl!^-pg)O$pnTr^9`6=v^P0QI69G^M{FntI5O;Hm+MjLUs6s|aN(g-9NJVv{ZJ}v*x zsA?Nd$z&gO0Kg%X9Ss`%9XJY*eyK$^%$>Og`heQ~3t90m4y)`=5?<{cSLUTK;=^$u zPN<7Fw-?5Pw#Sg@jRM(^Wxw_ARbteGU}zEO_RHss`ep+tSNf$9>6Xm>IMPK!4!ad!85oNI3ft=fe1TqPUdy-+hB(!I>HnUxOa1 zV)+FX1FIoBN78Wz#owEbNr>nKEwyvw-fn~RAj0|K+!Qw)F9qwdYT^Im8Q2l}vlHoI zLEKdsSOj(x#IOzPfoXsOLHmAI8SEDm-b=jk#7^8R+_lu-$&8Log1HzfTXv{52ymJI zvZ(h9SuMTI@xLYiRvF-gSB4}Y?TYaTAFc(8{*F5K8Z5Q+A>PHjAyItcPjr%gzj$i+ zhWrof$6sSr^nn8ev@esCa6|x%@*h-(E*0PajQvCDApCzy=YOiin{}k)4mdD+-Zi0q zCjuqsPr0@GFZ z<{=%@9fes$)t6KyIz-c}PS2FOrsqUhuA$O@$H4Z^Kj*#(%S6tcRC)NO+zlD)G_+AG zY7eYejqiV~z3HU9PB1zdxQuvxjI35!?3&~}I;Y~-b_FaHrv^8Y2soKOmTJvRsoX^7 z%A;dG=2t1)?UGTRIKezMvH^IPsHi-G;HhgHT3GXUd-Ep(_!%M_0@_whPILhuXL%_| zqnAcVSw{)qWmf$XG-o;wksnY|zj}vAXld!Vrf6Ho=FO&IGectU<*oz?Zjtt4#l7FQ zTc`?TBe!m;QiV^N@T2>08$xrj8sj8aoWl*ujM=mBo^3siS40w9&;ep-sdQf%E=Vyr zDW5RNrjRibt5F!LLUXo?3m)o}PHn^OmR38rE!+_3W^ZmA9j5Y(uZ#a=5Y2y+W@}sY zx^%kq96V5nbm?lepPTF#-1ITE11t zOd5{6bn|JhSxFlbXZDqPet=pZ9|@ZEE8Az1^WghRicA$%CjtybckDgLJJaOH^(Wky z<{&-kCn0M27gHBR8SivFUDw82NM|5?WucD6N-XBwuR^ebzR6X;~YPkNm+?sI!7KQ>Lxj08U#Ydk{;0W}p3UM*~ps=%I_)=cfS z5d3rl)ds-=GJufv1&xm$+($E`jD5w-fsZ~V#D)hL)G9BUx4qzYt*l?EQTw6tq9wvR zJQ;MF`Yb{zN|=OGnuaXOz91BE6EkrFtzREYdcZKBUf?w)G)$h7;1s8s$@bzq62gC6 zeO2AELL1;i`*(KoYusB(UIM0{ck`faBx^~i!+=!+umOUDHn9dAlh+&1?R<(^v+4BQ zg#^VGg+1j}HSB~j3|d&ce!Zylp&uqVijWmJ8F!dani;a{uDf;t;ivKJ_*m95B|)UP ztu_7DF^~32pR&trzb1h+D9yBswWxAIsy<5*i7x(mBQwKxJ?Gs~2sjh}cw&h53RF#J zuUv%8%K`KX5?nl|8w4q$TjJrnE}A{=!p;Lr!d%c*L3yIfbp9!WfyqFA{Rmu7Nvm4a z?&xt$9{dhS2aW@Ns%pO$~il^J*@IN!3T56xU=o67ptR5f}u{&6zDd~U0yq9 zv*s-QUsT3GCg%OvC~-KFcQKTb9yrp*{>BZ-10{vXh+)g`@y4}iUMVeJVH+q-qYL8o zb%2q;_=g24Qxj(}iGKfJVAnS5arze|2zPi-7g@X031?*l12d4A?Y$s4(zXF99}nX?L{rS6VTXTCD>`~*-`mkr4Uclx6gRYD-wI{%5k7{C=p z2YBe*yn-NCi7edj!F$+iQhUeLETPtfpT-UR-pyMWWs{B6c6Ex$@HW>0DpK zJ58PS@DH$G)Z&5dhRP&w`i&H=p_PqqDMyQz*b#C~zi+zipJ5NpC2qkLM95zePBF(` zP3Ic#yM~c(-k3;dJav(rOaJgw>6*w6?Y_~IN7l_0k zbAGM*O4=dM=m^; zzZ7@)94qN{Uwqk~f>%~Xn(B8-5*pKWuFxo`fAlG`Pc)LYhN#BV)n+Q+<7p!}T@FQr zcFYq{GRjBb%6=GK2iqPpZvo(F^QtN#U1?!d*tSggrM5lahfG_UBVt-i>|gJ@N61_$ z(wId+oh00Pn#E&^MGqw;5u@K<{Vh6p)@ZU$9YO2$FXkSgv3>P(_d|0cG+{;+qzbWA zx-UQn=)!9XGb5=C&lb0(vNT#g?SA(;2m~Q2?kQAcA|GAkC(ld5e*rk+D7Ofw6#et# z{gA+t=Afn+cun0c`Zj5tA1HW#WnQ(4PDwZ;l1F#kP<2D#74XL4rubH$DY!b!DW4Tu zW>wNoAs~d8C_wlxa>u?j%O#|a`714KDc3J~0jY&~c8UtW(Ie42N_RDmP&S2hx$V`; zbAruiT-aCFcKzXWx&z4ffg3YBKnJduq0IT@LL5IjfURQO{&<`1 z3%vIQT~5d{__?eWp&fZ{qx4@(Kre*QK%dpq>(?Mio7g}ABzyl~0zhB5KQ+O;L%Fd2 z-><+ok3hkiph!MsKo6V>7j>{gt`vbCXoaEF#!5e#ufu7dSU5A>XkY3u)@ql%(9v!ru{1%R6blT@1+ z>E6jSI6J1O49+?F3Q?m`<^N$7nvkDR7U2R30VzJBqW^Q(Tr8A7>sLJc^xnI*zPA0G{UdaPWo3U6XGXz)r`M`jVy z)DkeE>Df0=C6Il5geOC-w_J`+(`_(ku^%Qa53v0f;waMgBMo-r`FbqgH+LYjGuM46 zj?ii$O_Jw4T~p&(#<%B8N>}S>6mA3=mMd>Bqzv@aaaC|wzr>WCVqil+IFEgLrcBHP z=#crscL>NUx}E7hm^#puXeST5wtDiRN0_VnMre_xN>LVc)4vU?RcJaarAm6UQm|=a zLl#(dZ+nPw>*}&qu4|p1S5{WqC`u-!*Qj+U&bVcEn6%`aHze?*@mra5md^9@3@1uu zIPoVhR^c4{(gdfAemb8s)!SLj9yfgiC>haQ{AOVf+J?1*3T3Zcz7f`FWGghE{YgSL zo^&@_k46-GTQG+MWld_oiCnUi#i)&~vWuhBZM5|@eLd%>x>WaUe;8Z@)sGc9ndWFXQdw zD)QjjH|N3Z=V0U;*2@G!;Wn}!_GZvwJF4rfoRG^Lvo+eMl)^QdeZiXydc9}2DX4D{ zgB`(&q(pWia^sw)df@gN`B3mCQPF5J`(&Otnc~%Iq`>}1zSxc`WOJ+l5N9y5M`&*Z zlb6qav+Z7y3;h#&aq;&!#jlNAWX;q>7<%cUws0=VT`loty;aJZfklgtRb7hh-dj_uUZz!PX)y6j*U=2McnJiB?a9)-in zye312TT0b5SC^Pgzc3ywfQSEpRSH3y^W{EiJD)w*_i!BJV zi)>}*xFz=jRH{|F^oR~QqFZ(7EL~wubUbU|a>t~QAwEv%_?t-8D&~32Fp5rLdUX19 ziW|{XhW<9MvEdOuY-G1dtka=DEh~91$~C5?hUi?G8KDaXf97d1pxB;`A~k)YUmONE zYQi(+pBC|2BNVjBZ&BcfNqVcaq=P6vt8D=0Z$cM#vC?78NZ>w z!&P_>gdIZBC3n9H%?#=Ok}a(bFG6!5JoMLzcAcMAhG9;Zh!`}h#97HdG;>%j=ZjlS zJ=U4h=<5BoS~eQ)0I=vQEWE3Jb}aNTF~3Q$V&IRad6867vb0QV(ZGW?bnE^`)2RE^;_XMQ~V z?v1k6?zC`u9mRfGm{=I-985GYR8(s=`-rQ6hKx&kG7=iS}N9Dxgy3A z6=C(8mUku1GEHY-l9X@FO?}og_%dM_OPhmxcBPknUg0i^?={)%2ou-D?6t>|BYPD^ zTN);1^*0CgDXl}l^6*z=sN0kd50!S$wV8M#ExS#-zGq?)zJS`^Qg{)58b`&AW*hcK z(hONky6Lk_C*as1+yoe86?vIP)Lq?;ydmU`Ju@==kxp;ll95ljv6c&(xxC&3K__R_ ze6HF9Mdu&*nifrRtm>f3v`EHKcfmDnEUkX5-*sQ2ywx&}JNoZEp@S>oDQi^(yXiUN z*!+;qfKXIzRCGK368q}Zj_d_7P<%wk0wo>erxj`KRRBN9Xwn`Y(lRb;aA;G7E6WW^ zu(@443>^$;!f6WF(Ub&lvl8n#iF{q{mR9xhytr8p+BwpPY%pUjY8hXNDcvWc%$12O zM!1vIurwL&KW2Pv+lGV4SeT#@rc02&ysVhT2L(n2uebAyGVA+K)4cs@DnCJ~sB;y6 zc~3ClNdQN~*UO1!sHTc+2=t7!#r_(P;6=Pq3Vz}y_*EJQR#QCXMSTY29a7T3`AvUu z+F#A&X(F~foY#ExXfTtsxws@^#NQdz1ZW-DQvN8b)_k+Hb033)JrX|IY))Yt96q4g zq*%cwvSQ+UuvbnjWK5ug*U1~iPpmo3Li>+MEC8NlxB}`npk{~QQ^@zo?Sebe!==#L zX5pL2RmR}Jd213$C8JdHk2lvl>&ry`4HiA% z{M`zW{aQc4cV!_T&UzTWtCz3 zECXm;1$o=d9!>`MYPCS>eI*Xm3`i?lbh}^9!k)xN*Sk5!7qKureUG1N|a*gE1Kf%Hx(4NVXZ5+G6u?qxn4v6n`S!3Xnh~Q@h!=RR!Mtl zBxAqpVnd&iPhu4`Y=mVq@+(U`l?jGS#J1^UQ(k1}5Pe;n*KV$BFv?POLdOjRS_k;( z!}yHC2E~?ZpP-Rjb3$@e5*G(JpqcFtB(CjL*qvaM6Kpzw!`cZqO?kWb4X_jUI3qu= zSLYwv$SrzGRMJL}OgxQA5o4_9oLBp-#`v_ol3=1&R^P|KhtTgFd8*MR56-c(ozl0^ zvaj$e3!P00%%t8t!*TQJCjWxM+fO8U(VOz-@n>oKd#_P#wh zA&1I~`T2#?kDRZ8wnP4)$JxqA9&8T|oXZt)&Y6Vb$<|%hFlnIsO^=#(hXP8;8ulzv za0y4w;(fcUFJ?#}CB1ozL=nX&`~9fQ49=1@wzUp*=T3z<#AE(GK)SrppLJCIWsZIr zcM0Gm+a(}lsjh1gjw_abgN79YxYNq}o9mk`cATH{9uublHh53l?5oqrU!Rw9{$gP7 zQ1#AL*+iRwck(ZHwkK{x*5~~Mk#o8+}d-G1xj|#^;j97oL^@HW|^C)4~8Ab2v zaKw81>S{Ps{^>VzIb3COlY6gJUCT&LS+On0I&y6?^#Thr@2d1czyj((?U_2B?DDfX zMPdqBLSEK3wQC`=MJCsXv#TR{U7prr4Dv4|a6KE@$^tVU`QO8(gv$ntY?kG>p|_?H ztIwaD=^O@ZeRgCk-8$^hHKi=w8tX;6vMpyxW%7#|Tp`PC96KDEe!F)-B38ZA8#~LM zxk1I4qjIb6WR1F+pa57tSJ#??o94zCMr@}#mfn~8{Xj|aDD2G(>+L&M+U;%#hUjLg zzJiUcmjC7O_PZD#cR`$Vj(yr|40CwAMW%-cD=Dw#Eqp8Fmvouz6jU$Ju3taMOsHgf z8LSa`mg14&`+obzcTK!&i^4}Hva8s3dDoV3CbNG+lFK=~T?6F5_j=N{$uj+B4CEac zY~H$mmcOp$dmRkr98%6!ftR>ijxU)U>*NwZ&Z?KGp%wx)HG0NPUDA{?)MEl|vsWKcMgEQev ztO~Ms*$z+Y0WeJ3##`cFt1SrqJ9P5WOQWCWZW;9n^Xq=ZXKRp&@V*fUwn0W?s6rdQ z(hLW8;K@XE?aLMmcUqz@!4?g7YPhc67LV6I#sYO!j3Ywc9I}C0Ze-_wW!Zor)O&Gc zP8q>hC4>Z=GZUgeKCcy@e=@^nb~(q?)7&3>EGp^ za-iJ+z4IK{oKYOScUi>V6A1bU%^{6@>A22RhFd2tf_#?CS9JCPb-2L=cb z$Dc5Q5E43?x24dVR$oH7k?9U%G?HIZwfvzsnOKAQnM>0d9r(va-e1rRbF$M#VassK_1G9FU#iipRrm3=mY!**g+}R*mbEaR?@~+W{=@`5!((NvqCo6{ZiBkgkpfZzbnak!^90-{gYr zEHgX#%4*|LuN?!uk}pFtUko=60fL$@j8K|tYq(GPyOA{M&!_@T^Tz;5?*^IeU0?M( zFGMPz8X2rJd9mrT2HalAJAhNd2W*0!dKYBk_YZKYLsYoLf{i-H8qrl2xdV0gOyuBt z+uR2L>QUSyL<%7!a}E>zLOv8Fd95RPHA(QP(aCu`5x)Z`Sy8`#I_Cor9!ipwFL9X? zjtT~3iF2t;ae@GVe9{Jf-cUz|MSvif!L{+eAP5J#pK8pkwtEa7fD47hGm>OY*29vW z5c0!f*8z1~eQF2n3(Es>4}Zyr@`kbxP>%d$U8g}2whY4`qcjTL9B5i7GEMGd41ZlK zjM+!IIIg;tfAezzi%yb!RwM!8LftD@<1FFS*R?4%U9e*zEBAvZU-ml1ozzGhFTHAz1Nwa?cCu?SBWL zTD^e6l{3*0gB8SoevufdqcB|R3S=|tqfuga#vwlOH$S)rdL816`atRXixE_h-|md~ z-ub7Q^XeA>gga|=!}kN(62_lTge;Eu4wUd4#1zRi@hfIA?XUx6!pM3J%5jKk z*HfT}VEh^M2|mg5n@L-MOYYPsO(d3R^Y~=r-#RN`1~Vc?Rm|W(t3z-UR_u=BXCiGi zd1Z=!4nOP`V}QANB>Jh{h%{YtjHjZIRQZ0v`U}n?eK<%|(cZPS+ez}uk}wh2B3vls zC&z_)c#?l>xeGwqKHg<6@(m{9GY^)F#V3ZH!N6ryAFU?w%oo{~dRZsxCG?=Xu?Y@S zze@)&x!~PUGUPz`0688>rPmTr*ILF5*aQng-Svumd+fd?1Tr^Dj(a=BN^wvn8V$^F zqe?Y@Kn&DEyk7S!f?ZL3#0F6&m{9rjlJt5ObrGe;{c)e1PPj7wh_KnOQJqC2V;>DN zB>k?JugWA}rLHPP0>qB#DmG@W*?9`2YnTB3w6pV95bVQbw=WSz_(++cio(=)MF$FKtMF4G1sZ`}^ z(@n9^O+aYH{-`ml8Z9x|;|eCFjjXHbmvm3;ZXEACykWjU*%NpFkGtv_YXLMy!KltA zx8@klG|t?0A@Cb=mb_#CT+s8(lmhE3jvj22J_zKW2?0{t6v?lyQJ%SxYM*Y~S7liJ z!=iuR!0o0VG6z53-%9_48e33(Ox8E}SXMFd8iiy*PJT^Q0*U%pMhGmA%z)KE3XBc? z!8Qk_gmQoJK)k_Q2Z8C8PXGwYU%uOh@P#o+B7oZiZ3}yZ#a)BhgMC5od1oCWL-;AE zJ$-079Rq%-2P)@U8ZUsfM{3+PL=No7&$cK1!cGXl^dPuN4c>Xao$=4~uN;mzbI7uk zjFDQ3O*#sVOL~mOqugND*&B%*mm?{Ce`Oo=H_z});8Q1NL>`+!1Kf!YYjKJ^gznwn#ek8A>6K0R4zau}g(;8296i2eX^*^t1m1KzeBDD68<`-L zrS(Z+8s8ej8WY*A1pF*?Mmh3~&VbvK%Z|u8J+O!PnRM~Z8q$7j92`yE=!Sgb?+HK> z3TLX|U5r8_czVWP75rk{y9jJc6QT$18Xjr|W`wxPB8uZLxS^!I!-W<^7DE`nCqG<9 z4W3q{ygNbgL>pxlyOR^YqZ7Yh3r@gUkdl`TU?kPk9m5R(qyq1p?=$yJl(VVR0krl2 zMWccu9`@vhAYFkzhHO{tB$&L1GB98yuc0KbB?YhaLw9qiN8kd#3MS)nskVR1J0~s< zU81;AcSe84Wfw45Xx7oLwZ^aZOw~x7w}<*dzFzaV@xL>40$W)^cGky->f9|i+G2WR zzh}sNN(Wv6vXeS;k6?X#*xlymh;q@#Qqk_v6MQs@cQD7|(C$nIQr}+C``}(!L%uVk zYC#R)`F?(p-F-fEesvUX0vaX}DSZm#1fjbiJmB^=@HQnX`L&tM14LS=24IJVbh=0imPv@3ZO6Yq|UM<((xA@Yz!|H?Chp>}_%;N~}sXSWnX*15;| z^KNl!pQMBFj%0`zY-jS;u)T$QpNV?|?_RxoedikD&8MgvVkhR#bN%}o=%w%zl6Tr? z_-7jb00I5W)oNEWWXKuzDju3{soQlv3YszilS*RrKu!d+?!s|SN>|d_vu99W>Qvzg z>0ypU5naMjP?@pbP?#HCndGsH>@l$DTRg&B8qFIKZCrl)urQa-v85W+{_$rDdn{;ey$b4qfiu^T80V` zs}Mb_PWtIt_XBn0^lTZB6yK{w_N+z3#usO8Zzh6MR zgBw`k;u6o)wEc(_nf?jJd2>zYOTPhZ_`QQP=SCvd-*Urv)<_wY$FD>l!ozqTxO%qO zYrN>{%eC(eoSdEA+42|Octh2~-mopDxK^R^ewT`TW!}soOz*1lidt?8h*Df5jY*>4 z;SXR!z97&Tov}#R>T#=5R9e6sa)t0IkzJrUzsY&Fh`=__blUc!Mj4nXS5sQ3~O#Q zQHEy>1cA0?)-8 zo*e@-NWqQEF0VKLjc;LtZv7=Hf&~O*Df&NkBtk$)|3yP~!+=k0X)$&>LJgw{S` zs+VVKzm_RZ{DXf|M&_pSnjllG!cnjPl`xK2s`pg;2Ngv#(HZYV(qLwC`U$S=fs!W1 zt;g@vw|3`ZrB*Xe;%q%7B_&^#^llfRb#+-^zqfh1I$ED3>0%NTrhvz+gMv0iFA>Zz z5(h$?SfNdQm?n@!OY0`WQs7FC1NBu0%dr4k6+fX#V@^zt&D`-5y^&$P#)a}MiS}-s zyeCDQ+?Bwh>WXJs7}W(l!GN|3hcHz*(M8N^*w|Q9rjAy_kz0c??4q&8z#apDJv|Op zrY?(2sXSdDqD!w*W1CkDMVs2cBFFiwJyvB(S5&zDQLWobV8+9Wo{3zkSH4OfxL08= z&d9n&fz?uOKqTI%GE8+7hgwr{;2K5c6+je_&Q-CIme6EMSAeXR620-E1UW?wtItqE z*%eTubk}g`SX|LCFoiH(*@g$GEKUO>(GCX4 zj;T_=%j)>EeWLnmK;#0E#56P-U9f~zjwT(T?WtP5j-I5(ELOryNvg+}SIx|CRPTc_ z^t+@)icwes(Y+y>W#`ADugzj@vW(W~f5%#3T#5eqePF}AwfpW2d*TR~x~f2nQV?IH z%W4QjfGF``XFI?0g7!_t;w!)YzR+%F4 z1ShdlEdMfZQfZo@rD$XcId8JIfQeS02&p-?DY3Q~PX<|FnJO6bI6pfVH-X(ceYC?5 zlBOb)9Zs`XpCmiOA*!%9AzVLyT#*PVd7UgWZF=9VXPWaBzvAei8C|kDIv?7^I&pY@ z{o8oQ+eL77zx4#jz&!@xJ*800<9mleadnb1l4D7fKfdhYbudPd9aiX=GT~Xmq{!{7 zAQ)+qClWl`i~!kDAvE>b(w`1EZ)8I8weFKzK+iFK88xK>vzH>tN*q>~nA8#QXrJ;c zl$PN9XPaY&-96&Ns`fi2*^LE2jNNJ3$+@IWk&!*~5IsIk ziRY%N7$JCYsOaiC{HlEZSbNoAEYFFT5a2gYkL`VmJ+pch!+Du~WaqR-In>(GH5#4^J5@ADrCN_D` z9*Qm3xw%~>Mhkzx@ysliC;l7MuQ3)s+9dtsGJ?t=$(4HLDgGR0$wIf+-4=ptaAgE& zw`K-7mXRMYlm@UfsMea?khvG8(9&Q_emMMrLlkTXJ?+tL%&HzUnZa)DR80$r7;Yg0 zZ!dJcrgxxz4(u?4qt4}%Lyd{mUC645&}R{+usG`;IYp^=S19Np!5;BNE>=p@1sfpY zZ6Ag1D0DiiZ)Z2{U@NOH&W*}?5Km)n9W4jcN%fLCuOp6B$WK>0w`vyTM0Q&7WXi}< zY>i6zbO-XVwr*2xIXC8v-O+r(hRG*P@Mse@#(1O5Cc0Dd<*lFTsZS}|$YoTO>kx-2 zc#I@QvqnUKHA?1z>zog3pMV06ViHhVg}@4sg1DMQaDQ$S>ww6#prUp;wBTfaQPTl} zj_N=(_D5;7;B9{Ns-QB8Dgiv^lD2p~9-GqzmeWU;emL|`LQJBGBp91Eh%AVfz)1WBwtv-jT25)Yg^t+Z&E12O z&>QoT6g~sKib`z5z!02?h&@5@MX;|(?5CII!_8p+AU*fs+INIL=gQ7N@s2&`N`Lt8 z9`Boj*HiwG9a1&`zQWyN} zR%7mhdyWlx|A=c^(hT=jHJs7uLrbkE@WpCy2YGA<5jz(>W~Mn(8{lEU_Q^E(&OEXc zGd?5XX;U^K2)kyu`%+!@F++8Y(Z-C|i=VtB?t^}t3tF=ct^JK+ytDff$KVHXJKrLK ziW_R;hzF$L4@bF&mKEA*1SSze!NHIlJF40yx)R@3Tz$CvjtoF>TK)^~ZJ60+@=1IF z+%!&W?95y1?lbM!1=t=k+>J>&sAl*g5kL&STp;#KKgdbr3%)iSIKde?N?Z8d6FsBI zl@q}&e@^?6*AyY$Nzm{mFzA^( zx5s(=iQDyi3iX^Am*r^+HI)OYfdERH5V2i@%K#@8)x*RWmHrkyc4hGBUwCiGi?h(@ zSo~u-(tBi`(gv5N;`jd)zr24I#zg;6CI}cnK=C-B%s}W#%#Y+LTfp#O5+cYztq#e+ zR=~iOscR{~cz|eB$}izfj(?{Jjdc9Je%IdD-nq3j5BX-=rPp45rG$E}?+$_YezosU zzh|$z_`J#K!!nx4?bbPnLy4yYFcDC-^EcWMMT%dUIpV{Rn{J8Zxdr-5i8W^jt1->Q zamQfn(jiu}y5=l5*|ZZB?UUlGR5l#rH}kR+H^x||g#bp`{>Ug+9HvMn(_q2e3}6c$ zT2S{{FmQOoM6MUGs=NCxKx8(H^zTii1T;%M9~BFHGJ3?D1XPrKErzL?GNj|kVn>wGmby|>O9{N)baX!}>};n! zC*arnIxtQbXHI-?vOzJ(uyVkQh0KTCZ@k;L9c&s|>zkn9kse}wK0{SxhOefJme`Y2 z+V%;j3~qHLIke|Ucy8iz3`eJD^D$nBXTgZ!$^!`Zd*CtUbE}%)_?`rTc1Y40%OCCW zO=Wkz5K0jW@nUV`lK&n0y{s%sqVTBmO0s;Clpa20W$%2BR0YO1Q zrCz52qXI+xugFHnEnw)M?*s&>RUjQ$4CDt4!CS)EzFn723s##aGTTRUOR_Ua3g&VW z*+)CkXCNB!)HBtt9J^ZOW$fhjwiv0$KRe@}gCGWuJpCjr026^l@`BYTiYx=XKtds@ zt0_-+v-0-1cg5DxdG@|eyZ5-vaJ#I0JCMMVB#chGc;751<|<^l-a<#&J%ZyH`g^0S7lq5`yt*W#oB5Ei>+Fwf=5P?nDuiB?OgLrufgQ9O<&{4--wrQU^2`c zLU&M{X+o>NDW(e*@!vdOB04~4n@Rd0XC_qxuqi-K^iO0vLz{r+4B@96(9PpdR{NG> zS3F(0VsP@dhpGbkMDW95J|^S=vYSw`EKbacn8_~_>qSq?VHGRBm}#zl54MI?%m%<@OlF&{9xASS z{`~T;FORU{M-JUd&j$y6+EE%p)ZW^yE)oJz>JAJ`)X9D088rs5vwfh93w+XmJPy{WlP_@`KF_r8K5Ozucxa?)8z_RU#4y7=mVx4)*y#aPz|dx+hB)` zz`aF>40u!D&$jltAmLxzE!OM=3oF1ooS)meLjo3itX<^UV;oBEU|XZ;je1wOC1#>e z-*VB|Q0p;)_x*qb=&Z&-7YWyGG9H&#=xoGTsC9*YPg7Trljz+|3LXcH?Dmh~Y0|<# zH`%=8D@H6sKR{L7Gt(YE)t=dNO!^aDn0-vX)OOOxh^tC_Mf#2*%c8HSd3k)0W|Cck zOzY5_N$5fl3Dy2Q!&lhnwz4UhiV|vMf%#$}MgEv23=aUh{KkqVBUC|RVQ&GB4RuPS zQ8~CcEyy+1euNaJN6G0nTN$%kX*1SA{l>`O9ry!oR~cLo;>OeTIGM`H)W;qW`rr=L1c???W)c`DdmzvYux1OA@eyHaBu_lX#I7ah5 z&9sosT!$CAcB-36#cotyBB|0CATx67#TZ=SY#;CrY`8|I=7vsMt8zn3LjFJ&+_ zT8ZuhACCy)86#zYNm7eBhAWc8$wIg2O8fVj_C>o75m;d0CnsJI?ggBAZG!ktJv3M4 zhSfg~#E*Zl7g^@3B<&JZVmp7AR7e2i@Wk&%)}IjkBMIxny9P zj1w^Scq-Qf{5vnk67^gxb1vm=(Mzubx5cP1iV*Z4_uRgHFtXDvvyf*fgODetAi^n0 zsB6>AkRnir);>crm*zf0lC!~dd;lG$Ahua;Sy`v#{*_r-G!26v&A6NHVXPE4;V(-l z_|BIzDx2<6e6v#&*VUmJAg|1P+PQxWei(pROyzu4L)k@6lE>;l-`)vt!YZFs>7RqM z%nt=oxu9&#*t1R#DN(tQO(oiV9wPfHQ~Ui3D5+K$F6P)?xV|7!uw|0t?UMUXEDy+U zt3!++Z>@vbj7MF0+I+UTgO98a_y$0kZg{&?LA`tBK!(QGj*YWvHfC2|37x_XZPI`u z`xLX*(a=`lL0a@I;13pD_P=&8+fYAh^tBAW2jgH5C&xEH}gG-|eP8mV2JY$nmC zB|=S8s+HfgLlsUSH6aYm2R7cJu9_HW%sRYDcTi(dq>5Au|BaFJk@G*N`CozK%}_`n zplFo;E7-yP40$A}iiN<$AW%T99)-Y);Ar5`H#pmvVv$5#AW}xeAh7#L(*3C$Wx%+A zeBBhfv5vUW7F$iU)Jm1|RdjBPWM}RA?7`Th(L^(9Cp1duDy~R+>go5b#!l95prJ%F zw1BnN+VAU~Z};!7t-rYD7dF<`)^BlemYonLl!yof;rO_CTpk_(TgR0v(f6#3aDWcL)9H5SRtuA;=bS7IdHN4NBxmx+@?Y)En(CQzF(wZcpBucq=oT$KxY?C2)NJhR z@M#A1@h<9&b`{!xX|+%{DV7+@Ow0%ViuV1nE-PG4OIPJ*Jy{Pa+h06y%#(5goIf1( z3|Ok+bHZ@ba;|Swa=AQAd|aPFR-l|wX_~iN&rf1b2JfXyFO8DV-52o~SAetH#O=}2 zhHa~eYnfL_QbJ0j=nb>!p?*#;HT!P|5j3qu7%xwHLU_i};xR7_r-5JiPH8Y0Va}3v zNjDuOAam zu=#AM%Z51}RmMP4^{&jT=9(a9D5}-Q>4?lN%?``T_vz+m5X%rRB1dRZsT5l1meG4} zYX-`q&RWC>p``BFizOglO@~OZbD3Boj6)UQ3S@5&3JppKlNWJGYqF`m zN_fmoBPpu+7y4lOK=Py!CRFvRu@KH4-;2_-Q9+fmj^6T$T2^klL>#hCLbQ8mU{k_IjV&oEdGWM^d$G$;zWXdey|t+`^!UT|FQ-58{QYHmGe-7z(hm16=h=&;tyMaRV?s(a%sT*Axo8&I zex^7h5bl{Yr6i=7wyDm?WN-)iByOv3bt%-%zjWAw8(gFTHXafhU{ZX1uW&MKr*LNh z*FrhfTo;d@&QS5>6FP$iEPr8IJyj~p)UqT#@uYRNQ7?D$2otra4PFDY=_ust)jK6x znuMr>Mh;$kYCN(WveMxu9p$UY)dlIw*(g!Ww^28wsPVP5dtTt#O^CtQ|LDR{R3ow5 zV7^%D>u4eY8c?i;xD~JeU{ZM{#e^VuXYChfgn-myWKwa z>UQGAdo=In%tQZ^i_k^l3;_=Tb(|VXp+t^JH7)V!Z@SDZ2-{&inEW+LZjm9(X2KC- zO|XX#U`mc4ff%}PLksrEvTpIBl#){_TL7%OhbjaHzr zQRR>c@Z&u4wkZB>NxNspZAWhRHtpY}Pc2vRT)Z0}xJ<3!t$vriwwqq1npNh<)b?wz zWHWOVt45dRO)NmkOlRJezM)tJUa5*#5oJ1=;qUmhjwGh0iSjMo; zwm)NVU^){VEkwIFG_cq_VC4(=c_Ey6TftWvaO4;mp6SYR26MFT`=OT95>;rGBlQWB z$2McJ{d@3Nmk6@Do;y{yQJ6yJOVICNaI2E4tf45!aM_5&6F$=18Kr^S%RAE&XMHCx z5%Enp?Hjt-A7l5(!K&Z;_|a5IKFPF@ehzAPN^IZ)JdlNQR*@W!AUJAEUGJX|G>gg_ zfM45MWMeg6rY|Z4x+hxZzqfV&%js-hbz0hacz8u8hWS?6t^jO?VS6+%3_jU|Giv!zV3TjX$D<;!9#QU?i=Ejw#>+KNAlrzbM-w2<-P0T8?*8|~q`rn;`W zGt2b9-lxd~0wH)GN3kE?!R?B`i)~@k0WS4D4IQmHRB5u)MV3V}a}3$iQ>bR&uhwCq zi_;v-#XCD% z3vyu#b#GXspS)*894OcS!8X&L{gWW$Y3;wV)KvUGZCwd8Rp0l2SD6VBnPmu(v4{+j z%9!vq&kcqsQ|94*NkZaL{Tbj45yrz%^&QjffT3(v-5hpz{#z?3w z+5R}oh888W3&kae6{>1lp)@3J4lL{uRT}FiHO?o5O|L6>@(3gmYH;%_M1W``DtGvl#nUEy~tnJg*dzZS`K;jCX)u=9X{Xov@&n z-;paM+cU*29XnK_@0Ws~F{p*zWZP_(XPg9ELKP&x#0Szp+7%%k^pZ0W(|dSB_hGU*P$*C_Gn_^6=9^ zzGT?}dD|r-)?HynvwK_V;mbP%kEUxz`sh*3Q=OFTHW7>BId5%t5Nq7;V>O0B@sqB?+ZBJl+_S?iVG{xoThHwBb5sVq)g{f{eP%}*dt2u-kh8pbXD>F;QyvG| zI3#u=6Bb00oq29!=sG2D=piz+o)}Q{6Gn32j+vp8pwr z&Pi{oCr^Z8kLn{WyqW2GOne1)!yj*jY#6RiI-*3~UOO0|5-Lc>4PtyMu z?pB?2NwFdLxqtk!gb%(VQ+~0=u?pD@hE>ficnYxsi9$@u-SN8|=AofHjHvHAY&Cv? zy6r0yH)4y4zD3+|nW74afjolz^n*_DDVI8LYuIAdS5&|Y`m)wf@b!7wL%9?P9^qj1 zb3)DC2~rw0`pm_pt44mlWp+Fa&yb?1nU0zYdHH11!FnFwsO^SNn?X$s;sOPG1Ned2~(7VJ9S*{?TQ{<^(lIwdP{dME@Av6RWXrTMwOXvLqB%HD z6h^Gi)8pM&BJ^ADE>4TNHM{693g0q+U}of?&P!N^9DlmkY!AxRi=g#K?PNX4El01W^R97?Ph0wfrHB2qk!axV^saY^f8DiIp zpOMzTH?k!C9*uQ(8~nLqT!39-3YneIb)VnuA0&2LEO;$=+oq%E2B6fl|IgrfWz@=m zm6|d~GDWhAZ3nxuz=iDl>k|e$C+0J9D15$P?FV*@7n1~oJr`RQu0K)ITc=w6!hPvj zbJEkxLUbwr(4#gR9E^q3o<*X-fwzlQ_?;JC{nx!az@<}o250McU(Ps+zsxy*JL0Pj{w$)0T zOAjJ$lQNBaFDcizO%v+8k*P|!ef9LQ-dn!<`zY<~)ywvxO>ey0_E8FijR@VBxY6R3 zG+_Y+WvsQoyAh+lSAc|+>Q+?jJWZFtem3YQ+_^^@a_r5txWc@el7|f?$M;_BDeA}J z-&C%-eyL5(kCscjq`k!I530Fj@{{XPOCGPFzDls)S56mRH!+0YM3TgJI6hT9dpQ}i znPkh8fA&o7p3r$wmQK^K0cJgBL6ZdDhrV*^q~YJH+MJuVNsOrT5?mE}Ik(q4?YT#U zr4k2=W$``MZliK?3nj#w)|8{%eimJEMVXGwracBlFYEF~?&Aw=7r<#x_@uF(=90LA zJJgQy4oz>VHSaCVj0R(D%3nOVy->o)XkD;ERGv`w-h=TTyCdbu&7tOMW11S|1LCm| z%<2mFP^Ut@N09=4?Jj&~+eXc^RU6+Ci}I+QlAkMx%WWd}BG_-U@SZ5)SrJHq-UE2~ z7LrjHkD%ncvNcKO^&#NKB>$+`<>uSMJydCQaaL+J#SE<15-*Gyt*ECBTw&fY#(#;Y z&XIF73asjCl)fg_(lUBH@vfoL?0paF8b*voYoV=l5$mR4`@^8f#Mhr0J%noa7;0sj zv-%bu;MN#w*kO(ePvtcc59u*XwhV@_#=_e#{bs{1P4-)jvXrogjLE55)fzWnjyoAFY3aVmY4F%qP4 zZD0BKrH1X}i89@BkaUalN+Ct`jtYlSjy=~t-QBB5N8YXMTYKh6*2i;MqcaN9y(d_` zxJHa(+8Tow3O}WoNM`!e;CQX?WR_bE#$vVW-jeYf-WM4IIY;;$De)2;l}*~JTZY7! zK^<-kMYLi}+iuxR3gckNZgUwhT+f8+mmVbcBv`tIKx#EE^eUvD8@HTi#t;GSKNI zRtm>Ch&Dk47;W$SoF~56wf~kEl`Ue0FPBB`89Im~6-n%ep1jQDC8Sgr6~A3>c>Gg# zCd=o%fnp~3QOV))MwU+jJx*(Sedr14UUAd@m1r>YX8yPdmdiKPKTf`j!#b+Cb>#C3 zIhNNqT>iYlwxp4N57UbW<5{I(;K*LR_`{@Q$q+^IK81uN|3qty8_{!1WSbLh&!B^E zPXaoC2+wW()}n?4j{-pOrq`8ss(2c{-C;6Cqj#V@4dMKBWRAK{`J zNSL&;UDuc+Rj{DMyG;{+JN8_kU;7*>Srf`Y&ch`8N_n{?RT zDL)ZSAf2NQ)-D{-ty|YcG6jF$&Taw~&$cVl{X-~MDKsFOljYNVXxJdXip15XIVZJg zQIAP{V%euebF8w8eJrJdKX&~)606(_sCe)esUK28W8Of?`-Tn<Q8 zuIl%e7o&y4?~Hj&n^>97uA4H5ePLCZDzd2IyvyEJ-8|Fc!1%PW+S}zy4#B&QMEPRN<=v zjdg#oCyGL{%|#9RK6IQXmT509KJl;bs$@Ez?l5(C&Bkysl9jTvVpQhjjv4Bvtc4Xh z`A`9sy8H8}e$Rg8jgsnW9~r0~1+akrv3GYynpTWA8SRnDLvzY^`piCmuCX5~U_!ro zUT?&bnr7&hSP~PWwfb<7Qp$XMOH+~d#}pW(idpg(8HUtZFxs671(+M!0o-pS;&WB* zt3dvqMxROTd_Y!)Ozm*g@y&pY4n0)Yc?Ib zg7$vlQsQNdGdjbCr0gyO;YMa|4d)F%v9&a$=#82WDeEj#4nK3SZfX!HGG;Su6s^3j zA8Uu_8Z7DTTlTHK_O)qe^InBZ|Lp)a6+T^i8x6nZr;FQGU5;&1J$CkZXOZ`8wxx5b zI=XSu_C8WEILFdEAw4VZ`4`@Rb9N%uex-9pI_T4?kqhHtd#n9%#?_Y`)z;&CrFJ|7 zCr8637AnUx{M{bSU$bm-G^|zVj2WxX=^aq(s-b<>wj-VBr?e3xE8y{Jze*_AW^v4v zV_?jG*iCa~X-0ksmrls(X(ACw^3`LtlHG z9FIKx?K3&NV=c&Xx}wSG3XXY3yAnFhPe-^?NfSkXhi<0dc}~rc ziW!S`gt5E!NPNtPq%8^8D%y9dwfQX4NNpaJ;4bxGWhnlntK?@{2_*~BCetTBZniA9 z3AMd`#qpGcbcU8Kghz~85_D#WtapijLN5k!bjf9tTZRnJBp+YnZ81!kr!X<-cQsvI zBS8t4;>yJuJR93Fozo%VZf9FMPvc!K;q+c_-7J@3-KE-k#|(zxDYn*)Yv&AK>__9( zI&5F;i!|*Ee%d$P*ypcGE{?>5X95ge(^$w|$#<1nEV-v_Wm8}FYJ>rU@JIOwaF+T%y2=A^pn5d_Gj;G}A^?C4 zDjI-&n*=on1;c(_;f0~2qtZxs6marz7|TU0nO_hi5N4+k2@4M8-=y3QjQ{9t1+^2w;ZwZ$KXp=5-Y{^92zleTMDSOL#}8RMt>S5czBY-)Pw)(-%uSye! z1V#Y{;zMdwrBQ$p(ELxEsyuK4dN&Gp_7CkD0wH-Mj&z+v09*j4A=)um_s;>2e~<8K zli#}VGT;PU;vgEJVEc3A(BJ78;r=_CUvmO8w0hv-!tXZ$5Qv*cqR|A80(cJHIE@3m zL?`19+u*9_gNDapJOABBRt5za`o3V4HsP}$=`Lm-t!+_2m^auM?>8h;M%c& o1^@`A#bkj*rvb5(0|W4U0bjQ?NZ`UnAl_|2F4F)D$)WuJ0DGAOF8}}l delta 72074 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%0DaCC%Zx%-X&spsP$|uuFrC_$z$fztt$aK&HU4H| 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 Date: Fri, 1 Mar 2024 12:50:14 +0800 Subject: [PATCH 108/117] add type sel ut --- source/api_cc/tests/test_deeppot_pt.cc | 2 -- 1 file changed, 2 deletions(-) diff --git a/source/api_cc/tests/test_deeppot_pt.cc b/source/api_cc/tests/test_deeppot_pt.cc index e0e90ac75c..cc30e606c0 100644 --- a/source/api_cc/tests/test_deeppot_pt.cc +++ b/source/api_cc/tests/test_deeppot_pt.cc @@ -402,7 +402,6 @@ TYPED_TEST(TestInferDeepPotAPt, cpu_lmp_nlist_2rc) { } TYPED_TEST(TestInferDeepPotAPt, cpu_lmp_nlist_type_sel) { - GTEST_SKIP() << "Skipping this test for unsupported"; using VALUETYPE = TypeParam; std::vector& coord = this->coord; std::vector& atype = this->atype; @@ -465,7 +464,6 @@ TYPED_TEST(TestInferDeepPotAPt, cpu_lmp_nlist_type_sel) { } TYPED_TEST(TestInferDeepPotAPt, cpu_lmp_nlist_type_sel_atomic) { - GTEST_SKIP() << "Skipping this test for unsupported"; using VALUETYPE = TypeParam; std::vector& coord = this->coord; std::vector& atype = this->atype; From 11d0e53652983c446e6f7dec349cb78814672f70 Mon Sep 17 00:00:00 2001 From: Lysithea Date: Fri, 1 Mar 2024 13:10:42 +0800 Subject: [PATCH 109/117] update fparam file --- source/tests/infer/fparam_aparam.pth | Bin 108888 -> 109203 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/source/tests/infer/fparam_aparam.pth b/source/tests/infer/fparam_aparam.pth index c433ced49bc9523ce316d9d75245c185a1eafac7..703f7267be4c737e82ac3dff57ea0dcc09fe71bb 100644 GIT binary patch delta 73765 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 L1d{Pb!!ztZNYry6 From f20755bc0e8c03746ca6ea30ee308def5db6801d Mon Sep 17 00:00:00 2001 From: Lysithea Date: Fri, 1 Mar 2024 13:23:47 +0800 Subject: [PATCH 110/117] export ut input --- source/api_cc/src/DeepPotPT.cc | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index d4b77125db..cf756a17f2 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -94,6 +94,14 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, const int& ago, const std::vector& fparam, const std::vector& aparam) { + for (int i = 0; i < coord.size(); ++i) { + std::cout << coord[i] << ", "; + } + std::cout << std::endl; + for (int i = 0; i < atype.size(); ++i) { + std::cout << atype[i] << ", "; + } + std::cout << std::endl; torch::Device device(torch::kCUDA, gpu_id); if (!gpu_enabled) { device = torch::Device(torch::kCPU); @@ -126,6 +134,15 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, torch::from_blob(atype_64.data(), {1, natoms}, int_options).to(device); if (ago == 0) { nlist_data.copy_from_nlist(lmp_list); + std::cout << "nlist content:" << std::endl; + for (size_t i = 0; i < nlist_data.jlist.size(); ++i) { + for (size_t j = 0; j < nlist_data.jlist[i].size(); ++j) { + std::cout << nlist_data.jlist[i][j] << ", "; + } + std::cout << std::endl; + } + + return 0; nlist_data.shuffle_exclude_empty(fwd_map); nlist_data.padding(); } From 0b2d0d2b151e6ed068d3fa35fdfec56177698ffc Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 1 Mar 2024 05:24:12 +0000 Subject: [PATCH 111/117] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- source/api_cc/src/DeepPotPT.cc | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index cf756a17f2..51ac3a588e 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -95,12 +95,12 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, const std::vector& fparam, const std::vector& aparam) { for (int i = 0; i < coord.size(); ++i) { - std::cout << coord[i] << ", "; + std::cout << coord[i] << ", "; } std::cout << std::endl; for (int i = 0; i < atype.size(); ++i) { - std::cout << atype[i] << ", "; - } + std::cout << atype[i] << ", "; + } std::cout << std::endl; torch::Device device(torch::kCUDA, gpu_id); if (!gpu_enabled) { @@ -136,10 +136,10 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, nlist_data.copy_from_nlist(lmp_list); std::cout << "nlist content:" << std::endl; for (size_t i = 0; i < nlist_data.jlist.size(); ++i) { - for (size_t j = 0; j < nlist_data.jlist[i].size(); ++j) { - std::cout << nlist_data.jlist[i][j] << ", "; - } - std::cout << std::endl; + for (size_t j = 0; j < nlist_data.jlist[i].size(); ++j) { + std::cout << nlist_data.jlist[i][j] << ", "; + } + std::cout << std::endl; } return 0; From 92f85241e6831d3cd8a396b479673b66ff4aa8ae Mon Sep 17 00:00:00 2001 From: Lysithea Date: Fri, 1 Mar 2024 13:29:30 +0800 Subject: [PATCH 112/117] fix error --- source/api_cc/src/DeepPotPT.cc | 2 -- 1 file changed, 2 deletions(-) diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index 51ac3a588e..d714e0f387 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -141,8 +141,6 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, } std::cout << std::endl; } - - return 0; nlist_data.shuffle_exclude_empty(fwd_map); nlist_data.padding(); } From 3cbd46d8d1e576aa88a0cd96ea30aee9ef14e403 Mon Sep 17 00:00:00 2001 From: Lysithea Date: Fri, 1 Mar 2024 14:46:13 +0800 Subject: [PATCH 113/117] fix bug: use nall_real instead of nall --- source/api_cc/src/DeepPotPT.cc | 27 ++++----------------------- 1 file changed, 4 insertions(+), 23 deletions(-) diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index d714e0f387..994ca355a9 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -94,14 +94,6 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, const int& ago, const std::vector& fparam, const std::vector& aparam) { - for (int i = 0; i < coord.size(); ++i) { - std::cout << coord[i] << ", "; - } - std::cout << std::endl; - for (int i = 0; i < atype.size(); ++i) { - std::cout << atype[i] << ", "; - } - std::cout << std::endl; torch::Device device(torch::kCUDA, gpu_id); if (!gpu_enabled) { device = torch::Device(torch::kCPU); @@ -124,29 +116,19 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, select_real_atoms_coord(dcoord, datype, aparam_, nghost_real, fwd_map, bkw_map, nall_real, nloc_real, coord, atype, aparam, nghost, ntypes, 1, daparam, nall, aparam_nall); - + std::cout << datype.size()<< std::endl; std::vector coord_wrapped = dcoord; at::Tensor coord_wrapped_Tensor = - torch::from_blob(coord_wrapped.data(), {1, natoms, 3}, options) + torch::from_blob(coord_wrapped.data(), {1, nall_real, 3}, options) .to(device); std::vector atype_64(datype.begin(), datype.end()); at::Tensor atype_Tensor = - torch::from_blob(atype_64.data(), {1, natoms}, int_options).to(device); + torch::from_blob(atype_64.data(), {1, nall_real}, int_options).to(device); if (ago == 0) { nlist_data.copy_from_nlist(lmp_list); - std::cout << "nlist content:" << std::endl; - for (size_t i = 0; i < nlist_data.jlist.size(); ++i) { - for (size_t j = 0; j < nlist_data.jlist[i].size(); ++j) { - std::cout << nlist_data.jlist[i][j] << ", "; - } - std::cout << std::endl; - } nlist_data.shuffle_exclude_empty(fwd_map); nlist_data.padding(); } - // at::Tensor firstneigh = - // torch::from_blob(nlist_data.jlist.data(), - // {1, lmp_list.inum, max_num_neighbors}, int32_options); at::Tensor firstneigh = createNlistTensor(nlist_data.jlist); firstneigh_tensor = firstneigh.to(torch::kInt64).to(device); bool do_atom_virial_tensor = true; @@ -185,7 +167,7 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, torch::Tensor flat_atom_energy_ = atom_energy_.toTensor().view({-1}).to(floatType); torch::Tensor cpu_atom_energy_ = flat_atom_energy_.to(torch::kCPU); - datom_energy.resize(natoms, + datom_energy.resize(nall_real, 0.0); // resize to nall to be consistenet with TF. datom_energy.assign( cpu_atom_energy_.data_ptr(), @@ -204,7 +186,6 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, datom_virial.assign( cpu_atom_virial_.data_ptr(), cpu_atom_virial_.data_ptr() + cpu_atom_virial_.numel()); - int nframes = 1; // bkw map force.resize(static_cast(nframes) * fwd_map.size() * 3); From 7f7e2e553ba6f774536c157e9ef79b4950398845 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 1 Mar 2024 06:46:38 +0000 Subject: [PATCH 114/117] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- source/api_cc/src/DeepPotPT.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/api_cc/src/DeepPotPT.cc b/source/api_cc/src/DeepPotPT.cc index 994ca355a9..919d690bed 100644 --- a/source/api_cc/src/DeepPotPT.cc +++ b/source/api_cc/src/DeepPotPT.cc @@ -116,7 +116,7 @@ void DeepPotPT::compute(ENERGYVTYPE& ener, select_real_atoms_coord(dcoord, datype, aparam_, nghost_real, fwd_map, bkw_map, nall_real, nloc_real, coord, atype, aparam, nghost, ntypes, 1, daparam, nall, aparam_nall); - std::cout << datype.size()<< std::endl; + std::cout << datype.size() << std::endl; std::vector coord_wrapped = dcoord; at::Tensor coord_wrapped_Tensor = torch::from_blob(coord_wrapped.data(), {1, nall_real, 3}, options) From 8a602a0695aff7bfcaed5f53f56dff77855a1b7a Mon Sep 17 00:00:00 2001 From: Lysithea Date: Fri, 1 Mar 2024 15:05:41 +0800 Subject: [PATCH 115/117] remove commonPT file --- source/api_cc/include/DeepPotPT.h | 1 - source/api_cc/include/commonPT.h | 24 ------------------------ source/api_cc/src/commonPT.cc | 23 ----------------------- 3 files changed, 48 deletions(-) delete mode 100644 source/api_cc/include/commonPT.h delete mode 100644 source/api_cc/src/commonPT.cc diff --git a/source/api_cc/include/DeepPotPT.h b/source/api_cc/include/DeepPotPT.h index 4eba536786..326c07e079 100644 --- a/source/api_cc/include/DeepPotPT.h +++ b/source/api_cc/include/DeepPotPT.h @@ -4,7 +4,6 @@ #include #include "DeepPot.h" -#include "commonPT.h" namespace deepmd { /** diff --git a/source/api_cc/include/commonPT.h b/source/api_cc/include/commonPT.h deleted file mode 100644 index 57ffd5b295..0000000000 --- a/source/api_cc/include/commonPT.h +++ /dev/null @@ -1,24 +0,0 @@ -// SPDX-License-Identifier: LGPL-3.0-or-later -#include - -#include -#include -#include -#include - -#include "neighbor_list.h" -namespace deepmd { -struct NeighborListDataPT { - /// Array stores the core region atom's index - std::vector ilist; - /// Array stores the core region atom's neighbor index - std::vector jlist; - /// Array stores the number of neighbors of core region atoms - std::vector numneigh; - /// Array stores the the location of the first neighbor of core region atoms - std::vector firstneigh; - - public: - void copy_from_nlist(const InputNlist& inlist, int& max_num_neighbors); -}; -} // namespace deepmd diff --git a/source/api_cc/src/commonPT.cc b/source/api_cc/src/commonPT.cc deleted file mode 100644 index 4ed3b21fe8..0000000000 --- a/source/api_cc/src/commonPT.cc +++ /dev/null @@ -1,23 +0,0 @@ -// SPDX-License-Identifier: LGPL-3.0-or-later -#ifdef BUILD_PYTORCH -#include "commonPT.h" -using namespace deepmd; -void NeighborListDataPT::copy_from_nlist(const InputNlist& inlist, - int& max_num_neighbors) { - int inum = inlist.inum; - ilist.resize(inum); - numneigh.resize(inum); - memcpy(&ilist[0], inlist.ilist, inum * sizeof(int)); - int* max_element = std::max_element(inlist.numneigh, inlist.numneigh + inum); - max_num_neighbors = *max_element; - unsigned long nlist_size = (unsigned long)inum * max_num_neighbors; - jlist.resize(nlist_size); - jlist.assign(nlist_size, -1); - for (int ii = 0; ii < inum; ++ii) { - int jnum = inlist.numneigh[ii]; - numneigh[ii] = inlist.numneigh[ii]; - memcpy(&jlist[(unsigned long)ii * max_num_neighbors], inlist.firstneigh[ii], - jnum * sizeof(int)); - } -} -#endif From 1f0a5cb1804dc685ee46f4cc34fbb6cbd813f5e8 Mon Sep 17 00:00:00 2001 From: Lysithea Date: Fri, 1 Mar 2024 15:17:49 +0800 Subject: [PATCH 116/117] add missing include --- source/api_cc/include/DeepPotPT.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/source/api_cc/include/DeepPotPT.h b/source/api_cc/include/DeepPotPT.h index 326c07e079..81a50c9d25 100644 --- a/source/api_cc/include/DeepPotPT.h +++ b/source/api_cc/include/DeepPotPT.h @@ -2,9 +2,11 @@ #pragma once #include - +#include #include "DeepPot.h" + + namespace deepmd { /** * @brief PyTorch implementation for Deep Potential. From d2532e8104bc2ba3ba60bb8a3e0bac98a53f5594 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 1 Mar 2024 07:18:18 +0000 Subject: [PATCH 117/117] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- source/api_cc/include/DeepPotPT.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/source/api_cc/include/DeepPotPT.h b/source/api_cc/include/DeepPotPT.h index 81a50c9d25..a7fc910b46 100644 --- a/source/api_cc/include/DeepPotPT.h +++ b/source/api_cc/include/DeepPotPT.h @@ -1,11 +1,10 @@ // SPDX-License-Identifier: LGPL-3.0-or-later #pragma once -#include #include -#include "DeepPot.h" - +#include +#include "DeepPot.h" namespace deepmd { /**