From a127f8c97a1fe86c218ad829f72d5d085e3542d1 Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Wed, 14 Jul 2021 16:03:13 +0200 Subject: [PATCH 1/8] g2: badchanels moved to a new register base --- RELEASE.txt | 7 ++++--- .../gotthard2DetectorServer/RegisterDefs.h | 15 ++++++++++----- .../slsDetectorServer_defs.h | 2 +- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/RELEASE.txt b/RELEASE.txt index 0af457ab5..6123205c5 100755 --- a/RELEASE.txt +++ b/RELEASE.txt @@ -28,10 +28,11 @@ This document describes the differences between 5.1.0 and 5.0.1 releases. 4. Mythen3, API function to set pattern from memory - Mythen3 server - ----------------- + Gotthard2 server + ---------------- - 1. Setting timing to auto, sets timing to trigger for slaves + 1. Bad Channels moved to a new register + 2. Resolved Issues diff --git a/slsDetectorServers/gotthard2DetectorServer/RegisterDefs.h b/slsDetectorServers/gotthard2DetectorServer/RegisterDefs.h index 378aed102..9167f84c9 100644 --- a/slsDetectorServers/gotthard2DetectorServer/RegisterDefs.h +++ b/slsDetectorServers/gotthard2DetectorServer/RegisterDefs.h @@ -34,6 +34,9 @@ #define BASE_FLOW_CONTROL (0x00200) // 0x1806_0200 - 0x1806_02FF // https://git.psi.ch/sls_detectors_firmware/vhdl_library/blob/f37608230b4721661f29aacc20124555705ee705/flow/flow_ctrl.vhd +/** Veto processing core */ +#define BASE_VETO_PRCSSNG (0x0300) // 0x1806_0300 - 0x1806_03FF? + /* UDP datagram generator */ #define BASE_UDP_RAM (0x01000) // 0x1806_1000 - 0x1806_1FFF @@ -110,10 +113,6 @@ /** DTA Offset Register */ #define DTA_OFFSET_REG (0x0A * REG_OFFSET + BASE_CONTROL) -/** Mask Strip Registers (40) */ -#define MASK_STRIP_START_REG (0x18 * REG_OFFSET + BASE_CONTROL) -#define MASK_STRIP_NUM_REGS (40) - /* ASIC registers --------------------------------------------------*/ /* ASIC Config register */ @@ -258,4 +257,10 @@ #define RXR_ENDPOINTS_MAX (32) #define RXR_ENDPOINT_OFST (16 * REG_OFFSET) -// clang-format on \ No newline at end of file + +/** Veto processing core --------------------------------------------------*/ +/** Mask Strip Registers (40) */ +#define MASK_STRIP_START_REG (0x00 * REG_OFFSET + BASE_VETO_PRCSSNG) +#define MASK_STRIP_NUM_REGS (40) + +// clang-format on diff --git a/slsDetectorServers/gotthard2DetectorServer/slsDetectorServer_defs.h b/slsDetectorServers/gotthard2DetectorServer/slsDetectorServer_defs.h index 43a427489..0fd98ef94 100644 --- a/slsDetectorServers/gotthard2DetectorServer/slsDetectorServer_defs.h +++ b/slsDetectorServers/gotthard2DetectorServer/slsDetectorServer_defs.h @@ -1,7 +1,7 @@ #pragma once #include "sls/sls_detector_defs.h" -#define REQRD_FRMWRE_VRSN (0x200925) +#define REQRD_FRMWRE_VRSN (0x210714) #define KERNEL_DATE_VRSN "Wed May 20 13:58:38 CEST 2020" #define CTRL_SRVR_INIT_TIME_US (300 * 1000) From 8354395f64b52872076afe00494745ab7fd473f4 Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Thu, 15 Jul 2021 13:44:42 +0200 Subject: [PATCH 2/8] wip --- python/slsdet/detector.py | 2 +- .../gotthard2DetectorServer/RegisterDefs.h | 1 + .../slsDetectorServer_defs.h | 2 +- .../src/slsDetectorServer_funcs.c | 25 ++++++++++- slsDetectorSoftware/include/sls/Detector.h | 15 ++++++- slsDetectorSoftware/src/CmdProxy.cpp | 43 +++++++++++++++++++ slsDetectorSoftware/src/CmdProxy.h | 10 ++--- slsDetectorSoftware/src/Detector.cpp | 10 +++++ .../tests/test-CmdProxy-gotthard2.cpp | 30 +++++++++++++ .../tests/test-CmdProxy-jungfrau.cpp | 33 ++++++++++++++ slsDetectorSoftware/tests/test-CmdProxy.cpp | 33 -------------- slsSupportLib/include/sls/ToString.h | 2 + slsSupportLib/include/sls/sls_detector_defs.h | 23 ++++++++++ slsSupportLib/src/ToString.cpp | 29 +++++++++++++ 14 files changed, 216 insertions(+), 42 deletions(-) diff --git a/python/slsdet/detector.py b/python/slsdet/detector.py index f03551ce3..3ce05c94c 100755 --- a/python/slsdet/detector.py +++ b/python/slsdet/detector.py @@ -2212,7 +2212,7 @@ class Detector(CppDetectorApi): @element def veto(self): """ - [Gotthard2] Enable or disable veto data streaming from detector. + [Gotthard2] Enable or disable veto data from chip. Note ---- Default is 0. diff --git a/slsDetectorServers/gotthard2DetectorServer/RegisterDefs.h b/slsDetectorServers/gotthard2DetectorServer/RegisterDefs.h index 9167f84c9..d9d7c7315 100644 --- a/slsDetectorServers/gotthard2DetectorServer/RegisterDefs.h +++ b/slsDetectorServers/gotthard2DetectorServer/RegisterDefs.h @@ -36,6 +36,7 @@ /** Veto processing core */ #define BASE_VETO_PRCSSNG (0x0300) // 0x1806_0300 - 0x1806_03FF? +// https://git.psi.ch/sls_detectors_firmware/gotthard_II_mcb/blob/master/code/hdl/veto/veto_ctrl.vhd /* UDP datagram generator */ #define BASE_UDP_RAM (0x01000) // 0x1806_1000 - 0x1806_1FFF diff --git a/slsDetectorServers/gotthard2DetectorServer/slsDetectorServer_defs.h b/slsDetectorServers/gotthard2DetectorServer/slsDetectorServer_defs.h index 0fd98ef94..46db18153 100644 --- a/slsDetectorServers/gotthard2DetectorServer/slsDetectorServer_defs.h +++ b/slsDetectorServers/gotthard2DetectorServer/slsDetectorServer_defs.h @@ -1,7 +1,7 @@ #pragma once #include "sls/sls_detector_defs.h" -#define REQRD_FRMWRE_VRSN (0x210714) +#define REQRD_FRMWRE_VRSN (0x210527) #define KERNEL_DATE_VRSN "Wed May 20 13:58:38 CEST 2020" #define CTRL_SRVR_INIT_TIME_US (300 * 1000) diff --git a/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c b/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c index 09da78b48..e3f8d4126 100644 --- a/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c +++ b/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c @@ -7525,7 +7525,7 @@ int get_veto(int file_des) { #endif return Server_SendResult(file_des, INT32, &retval, sizeof(retval)); } - +/* int set_veto(int file_des) { ret = OK; memset(mess, 0, sizeof(mess)); @@ -7567,6 +7567,29 @@ int set_veto(int file_des) { #endif return Server_SendResult(file_des, INT32, NULL, 0); } +*/ +int set_veto(int file_des) { + ret = OK; + memset(mess, 0, sizeof(mess)); + int arg = 0; + + if (receiveData(file_des, &arg, sizeof(arg), INT32) < 0) + return printSocketReadError(); + LOG(logINFO, ("Setting veto mode: %u\n", arg)); + +#ifndef GOTTHARD2D + functionNotImplemented(); +#else + // only set + if (Server_VerifyLock() == OK) { + setVeto(arg); + int retval = getVeto(); + LOG(logDEBUG1, ("veto mode retval: %u\n", retval)); + validate(arg, retval, "set veto mode", DEC); + } +#endif + return Server_SendResult(file_des, INT32, NULL, 0); +} int set_pattern(int file_des) { ret = OK; diff --git a/slsDetectorSoftware/include/sls/Detector.h b/slsDetectorSoftware/include/sls/Detector.h index 105d95dee..530ed5266 100644 --- a/slsDetectorSoftware/include/sls/Detector.h +++ b/slsDetectorSoftware/include/sls/Detector.h @@ -1244,9 +1244,21 @@ class Detector { /** [Gotthard2] */ Result getVeto(Positions pos = {}) const; - /** [Gotthard2] Default disabled */ + /** [Gotthard2] Veto data in chip, Default disabled */ void setVeto(const bool enable, Positions pos = {}); + /** [Gotthard2] */ + Result getVetoStream(Positions pos = {}) const; + + /** [Gotthard2] Options: NONE (Default), I3GBE, I10GBE (debugging), ALL + * Enable or disable the 2 veto streaming interfaces available. Can + * concatenate more than one interface. \n3GbE (2.5GbE) is the default + * interface to work with. \n10GbE is for debugging and also enables second + * interface in receiver for listening to veto packets (writes a separate + * file if writing enabled). Also restarts client and receiver zmq sockets + * if zmq streaming enabled.*/ + void setVetoStream(const defs::EthernetInterface value, Positions pos = {}); + /** [Gotthard2] */ Result getADCConfiguration(const int chipIndex, const int adcIndex, Positions pos = {}) const; @@ -1727,6 +1739,7 @@ class Detector { private: std::vector getPortNumbers(int start_port); void updateRxRateCorrections(); + defs::EthernetInterface in_{defs::NONE}; }; } // namespace sls \ No newline at end of file diff --git a/slsDetectorSoftware/src/CmdProxy.cpp b/slsDetectorSoftware/src/CmdProxy.cpp index 9a47d90f9..2b0cae65c 100644 --- a/slsDetectorSoftware/src/CmdProxy.cpp +++ b/slsDetectorSoftware/src/CmdProxy.cpp @@ -1802,6 +1802,49 @@ std::string CmdProxy::BurstMode(int action) { return os.str(); } +std::string CmdProxy::VetoStreaming(int action) { + std::ostringstream os; + os << cmd << ' '; + if (action == defs::HELP_ACTION) { + os << "[none|3gbe|10gbe|...]\n\t[Gotthard2] Enable or disable the 2 " + "veto streaming interfaces available. Can include more than one " + "interface. \n\tDefault: none. 3GbE (2.5GbE) is the default " + "interface to work with. \n\t10GbE is for debugging and also " + "enables second interface in receiver for listening to veto " + "packets (writes a separate file if writing enabled). Also " + "restarts client and receiver zmq sockets if zmq streaming " + "enabled." + << '\n'; + } else if (action == defs::GET_ACTION) { + if (!args.empty()) { + WrongNumberOfParameters(0); + } + auto t = det->getVetoStream(std::vector{det_id}); + os << OutString(t) << '\n'; + } else if (action == defs::PUT_ACTION) { + if (args.empty()) { + WrongNumberOfParameters(1); + } + defs::EthernetInterface interface = defs::EthernetInterface::none; + for (const auto &arg : args) { + if (arg == "none") { + if (args.size() > 1) { + throw sls::RuntimeError( + "cannot have other arguments with 'none'. args: " + + arg); + } + break; + } + interface = interface | (StringTo(arg)); + } + det->setVetoStream(interface, std::vector{det_id}); + os << ToString(args) << '\n'; + } else { + throw sls::RuntimeError("Unknown action"); + } + return os.str(); +} + std::string CmdProxy::ConfigureADC(int action) { std::ostringstream os; os << cmd << ' '; diff --git a/slsDetectorSoftware/src/CmdProxy.h b/slsDetectorSoftware/src/CmdProxy.h index 90bf8dd15..6af69775d 100644 --- a/slsDetectorSoftware/src/CmdProxy.h +++ b/slsDetectorSoftware/src/CmdProxy.h @@ -957,6 +957,7 @@ class CmdProxy { {"currentsource", &CmdProxy::currentsource}, {"timingsource", &CmdProxy::timingsource}, {"veto", &CmdProxy::veto}, + {"vetostream", &CmdProxy::VetoStreaming}, {"confadc", &CmdProxy::ConfigureADC}, {"badchannels", &CmdProxy::BadChannels}, @@ -1132,6 +1133,7 @@ class CmdProxy { std::string VetoReference(int action); std::string VetoFile(int action); std::string BurstMode(int action); + std::string VetoStreaming(int action); std::string ConfigureADC(int action); std::string BadChannels(int action); /* Mythen3 Specific */ @@ -1484,13 +1486,11 @@ class CmdProxy { INTEGER_COMMAND_VEC_ID( numinterfaces, getNumberofUDPInterfaces, setNumberofUDPInterfaces, StringTo, - "[1, 2]\n\t[Jungfrau][Gotthard2] Number of udp interfaces to stream " + "[1, 2]\n\t[Jungfrau] Number of udp interfaces to stream " "data from detector. Default: 1.\n\tAlso enables second interface in " "receiver for listening (Writes a file per interface if writing " "enabled).\n\tAlso restarts client and receiver zmq sockets if zmq " - "streaming enabled.\n\t[Gotthard2] second interface enabled to send " - "veto information via 10Gbps for debugging. By default, if veto " - "enabled, it is sent via 2.5 gbps interface."); + "streaming enabled."); INTEGER_COMMAND_VEC_ID( selinterface, getSelectedUDPInterface, selectUDPInterface, @@ -1913,7 +1913,7 @@ class CmdProxy { INTEGER_COMMAND_VEC_ID(veto, getVeto, setVeto, StringTo, "[0, 1]\n\t[Gotthard2] Enable or disable veto data " - "streaming from detector. Default is 0."); + "data from chip. Default is 0."); /* Mythen3 Specific */ diff --git a/slsDetectorSoftware/src/Detector.cpp b/slsDetectorSoftware/src/Detector.cpp index b0892c2a2..84b3e8590 100644 --- a/slsDetectorSoftware/src/Detector.cpp +++ b/slsDetectorSoftware/src/Detector.cpp @@ -1547,6 +1547,16 @@ void Detector::setVeto(bool enable, Positions pos) { pimpl->Parallel(&Module::setVeto, pos, enable); } +Result Detector::getVetoStream(Positions pos) const { + // return pimpl->Parallel(&Module::getVetoStream, pos); + return Result res{in_}; +} + +void Detector::setVetoStream(defs::EthernetInterface interface, Positions pos) { + // pimpl->Parallel(&Module::setVetoStream, pos, enable); + in_ = interface; +} + Result Detector::getADCConfiguration(const int chipIndex, const int adcIndex, Positions pos) const { diff --git a/slsDetectorSoftware/tests/test-CmdProxy-gotthard2.cpp b/slsDetectorSoftware/tests/test-CmdProxy-gotthard2.cpp index 53cc11120..f4f64c1b9 100644 --- a/slsDetectorSoftware/tests/test-CmdProxy-gotthard2.cpp +++ b/slsDetectorSoftware/tests/test-CmdProxy-gotthard2.cpp @@ -552,6 +552,36 @@ TEST_CASE("veto", "[.cmd]") { } } +TEST_CASE("vetostream", "[.cmd]") { + Detector det; + CmdProxy proxy(&det); + auto det_type = det.getDetectorType().squash(); + if (det_type == defs::GOTTHARD2) { + // auto prev_val = det.getNumberofUDPInterfaces().tsquash( + // "inconsistent numinterfaces to test"); + /* { + std::ostringstream oss; + proxy.Call("vetostream", {"sdf"}, -1, PUT, oss); + REQUIRE(oss.str() == "vetostream 2\n"); + } + { + std::ostringstream oss; + proxy.Call("vetostream", {"1"}, -1, PUT, oss); + REQUIRE(oss.str() == "vetostream 1\n"); + } + { + std::ostringstream oss; + proxy.Call("vetostream", {}, -1, GET, oss); + REQUIRE(oss.str() == "vetostream 1\n"); + }*/ + // det.setNumberofUDPInterfaces(prev_val); + } else { + REQUIRE_THROWS(proxy.Call("vetostream", {}, -1, GET)); + REQUIRE_THROWS(proxy.Call("vetostream", {"1"}, -1, PUT)); + } + REQUIRE_THROWS(proxy.Call("vetostream", {"dfgd"}, -1, GET)); +} + TEST_CASE("confadc", "[.cmd]") { Detector det; CmdProxy proxy(&det); diff --git a/slsDetectorSoftware/tests/test-CmdProxy-jungfrau.cpp b/slsDetectorSoftware/tests/test-CmdProxy-jungfrau.cpp index aef1f8ee6..9508daeee 100644 --- a/slsDetectorSoftware/tests/test-CmdProxy-jungfrau.cpp +++ b/slsDetectorSoftware/tests/test-CmdProxy-jungfrau.cpp @@ -96,6 +96,39 @@ TEST_CASE("Setting and reading back Jungfrau dacs", "[.cmd][.dacs]") { /* Network Configuration (Detector<->Receiver) */ +TEST_CASE("numinterfaces", "[.cmd]") { + Detector det; + CmdProxy proxy(&det); + auto det_type = det.getDetectorType().squash(); + if (det_type == defs::JUNGFRAU) { + auto prev_val = det.getNumberofUDPInterfaces().tsquash( + "inconsistent numinterfaces to test"); + { + std::ostringstream oss; + proxy.Call("numinterfaces", {"2"}, -1, PUT, oss); + REQUIRE(oss.str() == "numinterfaces 2\n"); + } + { + std::ostringstream oss; + proxy.Call("numinterfaces", {"1"}, -1, PUT, oss); + REQUIRE(oss.str() == "numinterfaces 1\n"); + } + { + std::ostringstream oss; + proxy.Call("numinterfaces", {}, -1, GET, oss); + REQUIRE(oss.str() == "numinterfaces 1\n"); + } + det.setNumberofUDPInterfaces(prev_val); + } else { + std::ostringstream oss; + proxy.Call("numinterfaces", {}, -1, GET, oss); + REQUIRE(oss.str() == "numinterfaces 1\n"); + REQUIRE_THROWS(proxy.Call("numinterfaces", {"1"}, -1, PUT)); + } + REQUIRE_THROWS(proxy.Call("numinterfaces", {"3"}, -1, PUT)); + REQUIRE_THROWS(proxy.Call("numinterfaces", {"0"}, -1, PUT)); +} + TEST_CASE("selinterface", "[.cmd]") { Detector det; CmdProxy proxy(&det); diff --git a/slsDetectorSoftware/tests/test-CmdProxy.cpp b/slsDetectorSoftware/tests/test-CmdProxy.cpp index a28fedde2..fe16e345c 100644 --- a/slsDetectorSoftware/tests/test-CmdProxy.cpp +++ b/slsDetectorSoftware/tests/test-CmdProxy.cpp @@ -1751,39 +1751,6 @@ TEST_CASE("scanerrmsg", "[.cmd]") { /* Network Configuration (Detector<->Receiver) */ -TEST_CASE("numinterfaces", "[.cmd]") { - Detector det; - CmdProxy proxy(&det); - auto det_type = det.getDetectorType().squash(); - if (det_type == defs::JUNGFRAU || det_type == defs::GOTTHARD2) { - auto prev_val = det.getNumberofUDPInterfaces().tsquash( - "inconsistent numinterfaces to test"); - { - std::ostringstream oss; - proxy.Call("numinterfaces", {"2"}, -1, PUT, oss); - REQUIRE(oss.str() == "numinterfaces 2\n"); - } - { - std::ostringstream oss; - proxy.Call("numinterfaces", {"1"}, -1, PUT, oss); - REQUIRE(oss.str() == "numinterfaces 1\n"); - } - { - std::ostringstream oss; - proxy.Call("numinterfaces", {}, -1, GET, oss); - REQUIRE(oss.str() == "numinterfaces 1\n"); - } - det.setNumberofUDPInterfaces(prev_val); - } else { - std::ostringstream oss; - proxy.Call("numinterfaces", {}, -1, GET, oss); - REQUIRE(oss.str() == "numinterfaces 1\n"); - REQUIRE_THROWS(proxy.Call("numinterfaces", {"1"}, -1, PUT)); - } - REQUIRE_THROWS(proxy.Call("numinterfaces", {"3"}, -1, PUT)); - REQUIRE_THROWS(proxy.Call("numinterfaces", {"0"}, -1, PUT)); -} - TEST_CASE("udp_srcip", "[.cmd]") { Detector det; CmdProxy proxy(&det); diff --git a/slsSupportLib/include/sls/ToString.h b/slsSupportLib/include/sls/ToString.h index 1d13d849a..65ace1e8c 100644 --- a/slsSupportLib/include/sls/ToString.h +++ b/slsSupportLib/include/sls/ToString.h @@ -36,6 +36,7 @@ std::string ToString(const defs::dacIndex s); std::string ToString(const std::vector &vec); std::string ToString(const defs::burstMode s); std::string ToString(const defs::timingSourceType s); +std::string ToString(const defs::EthernetInterface s); std::string ToString(const slsDetectorDefs::xy &coord); std::ostream &operator<<(std::ostream &os, const slsDetectorDefs::xy &coord); @@ -297,6 +298,7 @@ template <> defs::readoutMode StringTo(const std::string &s); template <> defs::dacIndex StringTo(const std::string &s); template <> defs::burstMode StringTo(const std::string &s); template <> defs::timingSourceType StringTo(const std::string &s); +template <> defs::EthernetInterface StringTo(const std::string &s); template <> uint32_t StringTo(const std::string &s); template <> uint64_t StringTo(const std::string &s); diff --git a/slsSupportLib/include/sls/sls_detector_defs.h b/slsSupportLib/include/sls/sls_detector_defs.h index 3e2c4bbee..33eb3dc2e 100644 --- a/slsSupportLib/include/sls/sls_detector_defs.h +++ b/slsSupportLib/include/sls/sls_detector_defs.h @@ -394,6 +394,29 @@ typedef struct { */ enum timingSourceType { TIMING_INTERNAL, TIMING_EXTERNAL }; +#ifdef __cplusplus + enum class EthernetInterface : int32_t { +#else + enum EthernetInterface { +#endif + NONE = 0, + I3GBE = 1 << 1, + I10GBE = 1 << 2, + ALL = I3GBE | I10GBE + }; + +#ifdef __cplusplus + inline EthernetInterface operator|(EthernetInterface a, + EthernetInterface b) { + return EthernetInterface(static_cast(a) | + static_cast(b)); + } + + inline bool operator&(EthernetInterface a, EthernetInterface b) { + return (static_cast(a) & static_cast(b)); + } +#endif + #ifdef __cplusplus /** scan structure */ diff --git a/slsSupportLib/src/ToString.cpp b/slsSupportLib/src/ToString.cpp index 97b9025fd..a8fc869f3 100644 --- a/slsSupportLib/src/ToString.cpp +++ b/slsSupportLib/src/ToString.cpp @@ -519,6 +519,23 @@ std::string ToString(const defs::timingSourceType s) { } } +std::string ToString(const defs::EthernetInterface s) { + std::ostringstream os; + std::string rs; + switch (s) { + case defs::NONE: + return std::string("none"); + default: + if (s & defs::I3GBE) + os << "3gbe, "; + if (s & defs::I10GBE) + os << "10gbe, "; + auto rs = os.str(); + rs.erase(rs.end() - 2); + return rs; + } +} + const std::string &ToString(const std::string &s) { return s; } template <> defs::detectorType StringTo(const std::string &s) { @@ -859,6 +876,18 @@ template <> defs::timingSourceType StringTo(const std::string &s) { throw sls::RuntimeError("Unknown timing source type " + s); } +template <> defs::EthernetInterface StringTo(const std::string &s) { + std::string rs = s; + rs.erase(rs.find(',')); + if (rs == "none") + return defs::NONE; + if (rs == "3gbe") + return defs::I3GBE; + if (rs == "10gbe") + return defs::I10GBE; + throw sls::RuntimeError("Unknown EthernetInterface type " + s); +} + template <> uint32_t StringTo(const std::string &s) { int base = s.find("0x") != std::string::npos ? 16 : 10; return std::stoul(s, nullptr, base); From 4d7fb4e4e00f117539b15ce19d0edd4675302d1f Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Thu, 15 Jul 2021 14:48:41 +0200 Subject: [PATCH 3/8] wip --- slsDetectorSoftware/include/sls/Detector.h | 2 +- slsDetectorSoftware/src/CmdProxy.cpp | 7 ++- slsDetectorSoftware/src/Detector.cpp | 4 +- .../tests/test-CmdProxy-gotthard2.cpp | 55 ++++++++++++------- slsSupportLib/include/sls/sls_detector_defs.h | 24 ++++---- slsSupportLib/src/ToString.cpp | 17 +++--- 6 files changed, 64 insertions(+), 45 deletions(-) diff --git a/slsDetectorSoftware/include/sls/Detector.h b/slsDetectorSoftware/include/sls/Detector.h index 530ed5266..0e6fe9aee 100644 --- a/slsDetectorSoftware/include/sls/Detector.h +++ b/slsDetectorSoftware/include/sls/Detector.h @@ -1739,7 +1739,7 @@ class Detector { private: std::vector getPortNumbers(int start_port); void updateRxRateCorrections(); - defs::EthernetInterface in_{defs::NONE}; + defs::EthernetInterface in_{defs::EthernetInterface::NONE}; }; } // namespace sls \ No newline at end of file diff --git a/slsDetectorSoftware/src/CmdProxy.cpp b/slsDetectorSoftware/src/CmdProxy.cpp index 2b0cae65c..34dcc73db 100644 --- a/slsDetectorSoftware/src/CmdProxy.cpp +++ b/slsDetectorSoftware/src/CmdProxy.cpp @@ -1825,20 +1825,21 @@ std::string CmdProxy::VetoStreaming(int action) { if (args.empty()) { WrongNumberOfParameters(1); } - defs::EthernetInterface interface = defs::EthernetInterface::none; + defs::EthernetInterface interface = defs::EthernetInterface::NONE; for (const auto &arg : args) { if (arg == "none") { if (args.size() > 1) { throw sls::RuntimeError( "cannot have other arguments with 'none'. args: " + - arg); + ToString(args)); } break; } + StringTo(arg); interface = interface | (StringTo(arg)); } det->setVetoStream(interface, std::vector{det_id}); - os << ToString(args) << '\n'; + os << ToString(interface) << '\n'; } else { throw sls::RuntimeError("Unknown action"); } diff --git a/slsDetectorSoftware/src/Detector.cpp b/slsDetectorSoftware/src/Detector.cpp index 84b3e8590..8acddfe15 100644 --- a/slsDetectorSoftware/src/Detector.cpp +++ b/slsDetectorSoftware/src/Detector.cpp @@ -1549,7 +1549,9 @@ void Detector::setVeto(bool enable, Positions pos) { Result Detector::getVetoStream(Positions pos) const { // return pimpl->Parallel(&Module::getVetoStream, pos); - return Result res{in_}; + Result res(1); + res[0] = in_; + return res; } void Detector::setVetoStream(defs::EthernetInterface interface, Positions pos) { diff --git a/slsDetectorSoftware/tests/test-CmdProxy-gotthard2.cpp b/slsDetectorSoftware/tests/test-CmdProxy-gotthard2.cpp index f4f64c1b9..d9db4a2c7 100644 --- a/slsDetectorSoftware/tests/test-CmdProxy-gotthard2.cpp +++ b/slsDetectorSoftware/tests/test-CmdProxy-gotthard2.cpp @@ -557,27 +557,44 @@ TEST_CASE("vetostream", "[.cmd]") { CmdProxy proxy(&det); auto det_type = det.getDetectorType().squash(); if (det_type == defs::GOTTHARD2) { - // auto prev_val = det.getNumberofUDPInterfaces().tsquash( - // "inconsistent numinterfaces to test"); - /* { - std::ostringstream oss; - proxy.Call("vetostream", {"sdf"}, -1, PUT, oss); - REQUIRE(oss.str() == "vetostream 2\n"); - } - { - std::ostringstream oss; - proxy.Call("vetostream", {"1"}, -1, PUT, oss); - REQUIRE(oss.str() == "vetostream 1\n"); - } - { - std::ostringstream oss; - proxy.Call("vetostream", {}, -1, GET, oss); - REQUIRE(oss.str() == "vetostream 1\n"); - }*/ - // det.setNumberofUDPInterfaces(prev_val); + auto prev_val = det.getVetoStream(); + { + std::ostringstream oss; + proxy.Call("vetostream", {"none"}, -1, PUT, oss); + REQUIRE(oss.str() == "vetostream none\n"); + } + { + std::ostringstream oss; + proxy.Call("vetostream", {}, -1, GET, oss); + REQUIRE(oss.str() == "vetostream none\n"); + } + { + std::ostringstream oss; + proxy.Call("vetostream", {"3gbe"}, -1, PUT, oss); + REQUIRE(oss.str() == "vetostream 3gbe\n"); + } + { + std::ostringstream oss; + proxy.Call("vetostream", {}, -1, GET, oss); + REQUIRE(oss.str() == "vetostream 3gbe\n"); + } + { + std::ostringstream oss; + proxy.Call("vetostream", {"3gbe", "10gbe"}, -1, PUT, oss); + REQUIRE(oss.str() == "vetostream 3gbe, 10gbe\n"); + } + { + std::ostringstream oss; + proxy.Call("vetostream", {}, -1, GET, oss); + REQUIRE(oss.str() == "vetostream 3gbe, 10gbe\n"); + } + REQUIRE_THROWS(proxy.Call("vetostream", {"3gbe", "none"}, -1, PUT)); + for (int i = 0; i != det.size(); ++i) { + det.setVetoStream(prev_val[i], {i}); + } } else { REQUIRE_THROWS(proxy.Call("vetostream", {}, -1, GET)); - REQUIRE_THROWS(proxy.Call("vetostream", {"1"}, -1, PUT)); + REQUIRE_THROWS(proxy.Call("vetostream", {"none"}, -1, PUT)); } REQUIRE_THROWS(proxy.Call("vetostream", {"dfgd"}, -1, GET)); } diff --git a/slsSupportLib/include/sls/sls_detector_defs.h b/slsSupportLib/include/sls/sls_detector_defs.h index 33eb3dc2e..c6a48a34b 100644 --- a/slsSupportLib/include/sls/sls_detector_defs.h +++ b/slsSupportLib/include/sls/sls_detector_defs.h @@ -405,18 +405,6 @@ typedef struct { ALL = I3GBE | I10GBE }; -#ifdef __cplusplus - inline EthernetInterface operator|(EthernetInterface a, - EthernetInterface b) { - return EthernetInterface(static_cast(a) | - static_cast(b)); - } - - inline bool operator&(EthernetInterface a, EthernetInterface b) { - return (static_cast(a) & static_cast(b)); - } -#endif - #ifdef __cplusplus /** scan structure */ @@ -508,8 +496,18 @@ typedef struct { #ifdef __cplusplus }; +inline slsDetectorDefs::EthernetInterface +operator|(const slsDetectorDefs::EthernetInterface &a, + const slsDetectorDefs::EthernetInterface &b) { + return slsDetectorDefs::EthernetInterface(static_cast(a) | + static_cast(b)); +}; + +inline bool operator&(const slsDetectorDefs::EthernetInterface &a, + const slsDetectorDefs::EthernetInterface &b) { + return (static_cast(a) & static_cast(b)); +}; #endif -; #ifdef __cplusplus struct detParameters { diff --git a/slsSupportLib/src/ToString.cpp b/slsSupportLib/src/ToString.cpp index a8fc869f3..ac046d8f1 100644 --- a/slsSupportLib/src/ToString.cpp +++ b/slsSupportLib/src/ToString.cpp @@ -523,15 +523,15 @@ std::string ToString(const defs::EthernetInterface s) { std::ostringstream os; std::string rs; switch (s) { - case defs::NONE: + case defs::EthernetInterface::NONE: return std::string("none"); default: - if (s & defs::I3GBE) + if (s & defs::EthernetInterface::I3GBE) os << "3gbe, "; - if (s & defs::I10GBE) + if (s & defs::EthernetInterface::I10GBE) os << "10gbe, "; auto rs = os.str(); - rs.erase(rs.end() - 2); + rs.erase(rs.end() - 2, rs.end()); return rs; } } @@ -878,13 +878,14 @@ template <> defs::timingSourceType StringTo(const std::string &s) { template <> defs::EthernetInterface StringTo(const std::string &s) { std::string rs = s; - rs.erase(rs.find(',')); + if (s.find(',') != std::string::npos) + rs.erase(rs.find(',')); if (rs == "none") - return defs::NONE; + return defs::EthernetInterface::NONE; if (rs == "3gbe") - return defs::I3GBE; + return defs::EthernetInterface::I3GBE; if (rs == "10gbe") - return defs::I10GBE; + return defs::EthernetInterface::I10GBE; throw sls::RuntimeError("Unknown EthernetInterface type " + s); } From 780d4bfe0ade9ada1772c785d504d6874bf64b40 Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Thu, 15 Jul 2021 16:21:17 +0200 Subject: [PATCH 4/8] gotthard2: vetostream (detector: only 3gbe, 10gbe via numudpinterfaces) --- .../gotthard2DetectorServer/RegisterDefs.h | 4 +- .../slsDetectorFunctionList.c | 25 +++++++-- .../include/slsDetectorFunctionList.h | 2 + .../include/slsDetectorServer_funcs.h | 4 +- .../src/slsDetectorServer_funcs.c | 51 +++++++++++++++++++ slsDetectorSoftware/include/sls/Detector.h | 1 - slsDetectorSoftware/src/Detector.cpp | 31 ++++++++--- slsDetectorSoftware/src/Module.cpp | 8 +++ slsDetectorSoftware/src/Module.h | 2 + .../include/sls/sls_detector_funcs.h | 5 ++ 10 files changed, 120 insertions(+), 13 deletions(-) diff --git a/slsDetectorServers/gotthard2DetectorServer/RegisterDefs.h b/slsDetectorServers/gotthard2DetectorServer/RegisterDefs.h index d9d7c7315..8f9204c3b 100644 --- a/slsDetectorServers/gotthard2DetectorServer/RegisterDefs.h +++ b/slsDetectorServers/gotthard2DetectorServer/RegisterDefs.h @@ -90,7 +90,9 @@ #define CONFIG_VETO_ENBL_OFST (0) #define CONFIG_VETO_ENBL_MSK (0x00000001 << CONFIG_VETO_ENBL_OFST) -#define CONFIG_VETO_CH_10GB_ENBL_OFST (1) +#define CONFIG_VETO_CH_3GB_ENBL_OFST (11) +#define CONFIG_VETO_CH_3GB_ENBL_MSK (0x00000001 << CONFIG_VETO_CH_3GB_ENBL_OFST) +#define CONFIG_VETO_CH_10GB_ENBL_OFST (15) #define CONFIG_VETO_CH_10GB_ENBL_MSK (0x00000001 << CONFIG_VETO_CH_10GB_ENBL_OFST) /* Control RW register */ diff --git a/slsDetectorServers/gotthard2DetectorServer/slsDetectorFunctionList.c b/slsDetectorServers/gotthard2DetectorServer/slsDetectorFunctionList.c index 21f7baca1..975049e11 100644 --- a/slsDetectorServers/gotthard2DetectorServer/slsDetectorFunctionList.c +++ b/slsDetectorServers/gotthard2DetectorServer/slsDetectorFunctionList.c @@ -1581,14 +1581,14 @@ enum timingMode getTiming() { void setNumberofUDPInterfaces(int val) { uint32_t addr = CONFIG_REG; - // 2 interfaces (enable veto) + // 2 rxr interfaces (enable debugging interface) if (val > 1) { - LOG(logINFOBLUE, ("Setting #Interfaces: 2 (10gbps veto streaming)\n")); + LOG(logINFOBLUE, ("Enabling 10GbE (debugging) veto streaming\n")); bus_w(addr, bus_r(addr) | CONFIG_VETO_CH_10GB_ENBL_MSK); } - // 1 interface (disable veto) + // 1 rxr interface (disable debugging interface) else { - LOG(logINFOBLUE, ("Setting #Interfaces: 1 (2.5gbps veto streaming)\n")); + LOG(logINFOBLUE, ("Disabling 10GbE (debugging) veto streaming\n")); bus_w(addr, bus_r(addr) & ~CONFIG_VETO_CH_10GB_ENBL_MSK); } LOG(logDEBUG, ("config reg:0x%x\n", bus_r(addr))); @@ -2578,6 +2578,23 @@ int getVeto() { CONFIG_VETO_ENBL_OFST); } +void setVetoStream(int value) { + uint32_t addr = CONFIG_REG; + + if (value) { + LOG(logINFOBLUE, ("Enabling 3GbE veto streaming\n")); + bus_w(addr, bus_r(addr) | CONFIG_VETO_CH_3GB_ENBL_MSK); + } else { + LOG(logINFOBLUE, ("Disabling 3GbE veto streaming\n")); + bus_w(addr, bus_r(addr) & ~CONFIG_VETO_CH_3GB_ENBL_MSK); + } + LOG(logDEBUG, ("config reg:0x%x\n", bus_r(addr))); +} + +int getVetoStream() { + return ((bus_r(CONFIG_REG) & CONFIG_VETO_CH_3GB_ENBL_MSK) ? 1 : 0); +} + void setBadChannels(int nch, int *channels) { LOG(logINFO, ("Setting %d bad channels\n", nch)); diff --git a/slsDetectorServers/slsDetectorServer/include/slsDetectorFunctionList.h b/slsDetectorServers/slsDetectorServer/include/slsDetectorFunctionList.h index 84103f61f..72401feed 100644 --- a/slsDetectorServers/slsDetectorServer/include/slsDetectorFunctionList.h +++ b/slsDetectorServers/slsDetectorServer/include/slsDetectorFunctionList.h @@ -540,6 +540,8 @@ void setTimingSource(enum timingSourceType value); enum timingSourceType getTimingSource(); void setVeto(int enable); int getVeto(); +void setVetoStream(int value); +int getVetoStream(); void setBadChannels(int nch, int *channels); int *getBadChannels(int *nch); #endif diff --git a/slsDetectorServers/slsDetectorServer/include/slsDetectorServer_funcs.h b/slsDetectorServers/slsDetectorServer/include/slsDetectorServer_funcs.h index 62a947254..36a8c96b7 100644 --- a/slsDetectorServers/slsDetectorServer/include/slsDetectorServer_funcs.h +++ b/slsDetectorServers/slsDetectorServer/include/slsDetectorServer_funcs.h @@ -246,4 +246,6 @@ int is_virtual(int); int get_pattern(int); int load_default_pattern(int); int get_all_threshold_energy(int); -int get_master(int); \ No newline at end of file +int get_master(int); +int get_veto_stream(int); +int set_veto_stream(int); \ No newline at end of file diff --git a/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c b/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c index e3f8d4126..07abf900b 100644 --- a/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c +++ b/slsDetectorServers/slsDetectorServer/src/slsDetectorServer_funcs.c @@ -369,6 +369,8 @@ void function_table() { flist[F_LOAD_DEFAULT_PATTERN] = &load_default_pattern; flist[F_GET_ALL_THRESHOLD_ENERGY] = &get_all_threshold_energy; flist[F_GET_MASTER] = &get_master; + flist[F_GET_VETO_STREAM] = &get_veto_stream; + flist[F_SET_VETO_STREAM] = &set_veto_stream; // check if (NUM_DET_FUNCTIONS >= RECEIVER_ENUM_START) { @@ -8406,3 +8408,52 @@ int get_master(int file_des){ #endif return Server_SendResult(file_des, INT32, &retval, sizeof(retval)); } + +int get_veto_stream(int file_des) { + ret = OK; + memset(mess, 0, sizeof(mess)); + enum EthernetInterface retval = NONE; + + LOG(logDEBUG1, ("Getting veto stream\n")); + +#ifndef GOTTHARD2D + functionNotImplemented(); +#else + // get only + retval = getVetoStream(); + LOG(logDEBUG1, ("vetostream retval: %u\n", retval)); +#endif + return Server_SendResult(file_des, INT32, &retval, sizeof(retval)); +} + +int set_veto_stream(int file_des) { + ret = OK; + memset(mess, 0, sizeof(mess)); + enum EthernetInterface arg = 0; + + if (receiveData(file_des, &arg, sizeof(arg), INT32) < 0) + return printSocketReadError(); + LOG(logINFO, ("Setting vetostream: %u\n", (int)arg)); + +#ifndef GOTTHARD2D + functionNotImplemented(); +#else + // only set + if (Server_VerifyLock() == OK) { + + if (arg != 0 && arg != 1) { + ret = FAIL; + sprintf(mess, + "Could not set vetostream 3GbE. Invalid argument %d.\n", + arg); + LOG(logERROR, (mess)); + } else { + setVetoStream(arg); + int retval = getVetoStream(); + LOG(logDEBUG1, ("vetostream retval: %u\n", retval)); + validate(arg, retval, "set veto stream", DEC); + } + } +#endif + return Server_SendResult(file_des, INT32, NULL, 0); +} \ No newline at end of file diff --git a/slsDetectorSoftware/include/sls/Detector.h b/slsDetectorSoftware/include/sls/Detector.h index 0e6fe9aee..06993bc85 100644 --- a/slsDetectorSoftware/include/sls/Detector.h +++ b/slsDetectorSoftware/include/sls/Detector.h @@ -1739,7 +1739,6 @@ class Detector { private: std::vector getPortNumbers(int start_port); void updateRxRateCorrections(); - defs::EthernetInterface in_{defs::EthernetInterface::NONE}; }; } // namespace sls \ No newline at end of file diff --git a/slsDetectorSoftware/src/Detector.cpp b/slsDetectorSoftware/src/Detector.cpp index 8acddfe15..3d6c2f410 100644 --- a/slsDetectorSoftware/src/Detector.cpp +++ b/slsDetectorSoftware/src/Detector.cpp @@ -1548,16 +1548,35 @@ void Detector::setVeto(bool enable, Positions pos) { } Result Detector::getVetoStream(Positions pos) const { - // return pimpl->Parallel(&Module::getVetoStream, pos); - Result res(1); - res[0] = in_; + // 3gbe + auto r3 = pimpl->Parallel(&Module::getVetoStream, pos); + // 10gbe (debugging interface) opens 2nd udp interface in receiver + auto r10 = getNumberofUDPInterfaces(); + + Result res(r3.size()); + for (unsigned int i = 0; i < res.size(); ++i) { + res[i] = (r3[i] ? defs::EthernetInterface::I3GBE + : defs::EthernetInterface::NONE); + if (r10[i] == 2) { + res[i] = res[i] | defs::EthernetInterface::I10GBE; + } + } return res; } void Detector::setVetoStream(defs::EthernetInterface interface, Positions pos) { - // pimpl->Parallel(&Module::setVetoStream, pos, enable); - in_ = interface; -} + // 3gbe + bool i3gbe = (interface & defs::EthernetInterface::I3GBE); + pimpl->Parallel(&Module::setVetoStream, pos, i3gbe); + + // 10gbe (debugging interface) opens 2nd udp interface in receiver + int old_numinterfaces = getNumberofUDPInterfaces(pos).tsquash( + "retrieved inconsistent number of udp interfaces"); + int numinterfaces = (interface & defs::EthernetInterface::I10GBE) ? 2 : 1; + if (numinterfaces != old_numinterfaces) { + setNumberofUDPInterfaces(numinterfaces, pos); + } + } Result Detector::getADCConfiguration(const int chipIndex, const int adcIndex, diff --git a/slsDetectorSoftware/src/Module.cpp b/slsDetectorSoftware/src/Module.cpp index c5a570ea7..c93fca57b 100644 --- a/slsDetectorSoftware/src/Module.cpp +++ b/slsDetectorSoftware/src/Module.cpp @@ -1870,6 +1870,14 @@ void Module::setVeto(bool enable) { sendToDetector(F_SET_VETO, static_cast(enable), nullptr); } +bool Module::getVetoStream() const { + return (sendToDetector(F_GET_VETO_STREAM)); +} + +void Module::setVetoStream(const bool value) { + sendToDetector(F_SET_VETO_STREAM, static_cast(value), nullptr); +} + int Module::getADCConfiguration(const int chipIndex, const int adcIndex) const { int args[]{chipIndex, adcIndex}; return sendToDetector(F_GET_ADC_CONFIGURATION, args); diff --git a/slsDetectorSoftware/src/Module.h b/slsDetectorSoftware/src/Module.h index a1c52d0f7..81f6bfee1 100644 --- a/slsDetectorSoftware/src/Module.h +++ b/slsDetectorSoftware/src/Module.h @@ -406,6 +406,8 @@ class Module : public virtual slsDetectorDefs { void setTimingSource(slsDetectorDefs::timingSourceType value); bool getVeto() const; void setVeto(bool enable); + bool getVetoStream() const; + void setVetoStream(const bool value); int getADCConfiguration(const int chipIndex, const int adcIndex) const; void setADCConfiguration(const int chipIndex, const int adcIndex, int value); diff --git a/slsSupportLib/include/sls/sls_detector_funcs.h b/slsSupportLib/include/sls/sls_detector_funcs.h index 9abb18d7f..34a772671 100755 --- a/slsSupportLib/include/sls/sls_detector_funcs.h +++ b/slsSupportLib/include/sls/sls_detector_funcs.h @@ -221,6 +221,8 @@ enum detFuncs { F_LOAD_DEFAULT_PATTERN, F_GET_ALL_THRESHOLD_ENERGY, F_GET_MASTER, + F_GET_VETO_STREAM, + F_SET_VETO_STREAM, NUM_DET_FUNCTIONS, RECEIVER_ENUM_START = 256, /**< detector function should not exceed this @@ -548,6 +550,9 @@ const char* getFunctionNameFromEnum(enum detFuncs func) { case F_LOAD_DEFAULT_PATTERN: return "F_LOAD_DEFAULT_PATTERN"; case F_GET_ALL_THRESHOLD_ENERGY: return "F_GET_ALL_THRESHOLD_ENERGY"; case F_GET_MASTER: return "F_GET_MASTER"; + case F_GET_VETO_STREAM: return "F_GET_VETO_STREAM"; + case F_SET_VETO_STREAM: return "F_SET_VETO_STREAM"; + case NUM_DET_FUNCTIONS: return "NUM_DET_FUNCTIONS"; case RECEIVER_ENUM_START: return "RECEIVER_ENUM_START"; From c3ad736d3c3bb653e7c1d6dcf94d80b75b72ed06 Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Thu, 15 Jul 2021 16:28:40 +0200 Subject: [PATCH 5/8] binaries in --- .../bin/gotthard2DetectorServer_developer | Bin 0 -> 224960 bytes slsSupportLib/include/sls/versionAPI.h | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100755 slsDetectorServers/gotthard2DetectorServer/bin/gotthard2DetectorServer_developer diff --git a/slsDetectorServers/gotthard2DetectorServer/bin/gotthard2DetectorServer_developer b/slsDetectorServers/gotthard2DetectorServer/bin/gotthard2DetectorServer_developer new file mode 100755 index 0000000000000000000000000000000000000000..e30851e029870211ba218b0d457417549359a08c GIT binary patch literal 224960 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⪻6u{ zajGxr*um{t@TcdRNB?@R@f)qwJ-l}C9G;Bv3W_5tn4}sR+mqXk&W74RPb3Z7)6Yt@4@}|u3B%Gh1XOHd}9}As~=Mc(X0k%y#$Gqjd zhwhXYI`bO~Bpw`b{NsubnxNg!{k5D2fH9o>VTv!xoQsa$Z;__6mwiL&?9<1HJe;i)KBad0``RE)-8r$ld6y%tu*4UQXYZ0WovCWriyLJtdnj%rX};%|-Z&3A5N0xDzMQ!z06| z{$#h>-=O0SORF&d_zrj=t}4Gq-N#3}orRshiyc-SAp5_ZA^T%s0Mx?#{bt zA33SLofzjR)*p~R?fWpt6CcukYj!;RSM9rBS50m_ia6)v?OUCIO(nE`8e*4z8gj&! zF_!G>(6l?2zv^h|bOL=5zKH$lkeg$lv3ICD` zm;K}RI(*+F&>1mb%Mq_xS`U2#&)!)*w|@t^Zt9GWEq};!ZpF0&*S)y*;M$MtSzMu~ z^PCb~7vQSIwF*}hb&LGiHn*&D6KsHYLVqx6AJb`wkN46(snh0KX`j()Ja^KR{k%>) z+e*7zr*X~BI^j*lWBS?<@17(Crh;p+Ad$qHRb#hmT+^L)2lQPyA>T&sud7J4(fmk_JnGhQ)WL z0=|*wP9G8d)QNmx$6nzP*uNh+QZYPrWMnwniwQI6mc}@oAy-*oZ44WxYGgd)Ee6$^dN_}0^qfqXD zmG+Izx=o)o1$`9X>ScVHqt9q58HC*`Yk%1Lo`jx;-_CUK55e`7fD_|36*wdvIPah2 zd=&4*#~#vaVklR+d6F~ke!Q5aAGD*Ct)RwR>&t~#@H{Ng3))Pqo8*+nfV$p^uNTp7J@sU=hGi{s6x&dWp&a}DVKN;t& z_j99Od`p>Uew2Zx@Pz@K7mPKyMa~X~d1F0;<;9>=&{sHg_@=zruJ{br&ovU5 z=Yz@~6g(EmUUR?A&_6rjgm!!>907dX(;fv5U_XaL{H@Ltk~t*2U}v42yPSA0=o9A| z@=WU4KgtX9UX1;?&I+uZ0sk)j(rNR{359+&cd!s4j6hHoX_GrYZ+>dd%4fSIT!2b)o zl&`LMo*IjTXa{HD37?`&(C2BIx$Im{ zfPV0zdUtI=KD*p5ymydy-x&GqGH>+r9^IEr?LIrk`%LBR^ztlqG-P?lIu>i(Z9zVn zbEoNXwqgck&Y75jA^k1ccj$b2{n?`jz5ZPI9i6XC=lc!l<~J7I;4C}w>+aI|X6bx7 zCcvvt#{?99S?4=f=i?c&&sgU*}t>^Wki_D9&*6^6|_x z`n%t!^Ifd-;oL=@59sAHXUJcx^DWl-blirQPseRghD$$UIv?UU7?0uQW6TEIt<(7~ z)Aw~RCKWpS=T+sjcZ2ovooq_T|^a$LQ{7ir^!ykL~{UyvBdJQqlA?WXu5VM@0*dH}<%SL|=@Fze=SLeym zAKwGHir;~9EvUb+EykrI*)m7!OUX&foQyVz-yQ_4qu};r5%dh7j_<{?EYURdI`9Yo zB;yu@)?il9(OYI zIKBgKiy+1dXTctfg6~P(8t>#Wyn}Z|eh0ng8R(&Z8eyzPN$ELGc;2KWG+;cpIN`$I z;2q|&TED=VW#D7fZ>K^JdyxA9ZV!P@p(kX?bB41c9Ksd*d4YU$gmY|k{vU;*6U~{9 zcB9}igTx8$g%8;6>vPipzga&~?Vk|tPwsX?Nx;*ytt3@^|3wD}NmWcS(5qxvmvpuf~_q~BO?CQL_gE-_>EV5iV-cVVZy zv0qLG-lvpAAfH4=?OI+IfqaVHJ{f2IVvhWIL}Id1I2kPAS-;kASH8KBss2w*E{XlT z9OF?wEB5pA!6#4H0r+Y?5EVh-?a2cBWOiamoh@90Y-zPfm( zAMC%pO7OM<7ci8^_PK!PY$vvB%AyEu`CakL#INAT5pDgKEf`1>uWOoseG~a(1!w_w z2+D~}z@78u)Dw3*Oot!f$!H?X9qtHd~WCu z?)2f&hf_JsefR-BB7fXjmO2vouACDS6(2-ET`z#2O-nu=nF=2iF09?kSvV2+lE|M+ zVS56XPT}>y!HX4QOBVKGj*N_8%s_L9%M?2mwrWG&=fcb%s{5R>UGZM6`@u$ledF0S zXd}@H+eZ8=kbjIP$VHwk)A9s1u~~-{d4m3nJVASf^?(iamd?vwCu1f&In}J|g+C{% zV{xS3Bf4JrKxE8uXWWCtm*fibI$byLA4TjQ=Cks_ykfz87X3+1US%!xG!U@RH}odN z^9;{EIlDg%>%*7_R$uybd)jx#dZjPgcgA@}{D|*{x4?ps`{eH0gvHb4u`P`DK4UdS0#^heyjP8t9$ypm1}m4B!FV)S*;Kgo68 z(&@TB`f5mPcqg=mx}!(*Z~C8DFX8_+{3H52F_uUCwG+J){+>@kkNYHaJKSeaN|az6 zoyezm>}B4_r`^5G8`$SRqR%Iz&nKbJxUfzkKJlSElo#7*_wY{oLvVhm=-*p4-nIP_ zg**_vYx{-qy7CPk!p}1h$dmERm}D-}*mlc*HLXeq!K(ug~aSXcs<^9NM3mL;I*Jt^H5x_QfY? zwGTPqwU4tea%%r&(7;&zM_p;{e_ppQG;XzT{Byt=zGaYG`w!>PKI%$q|Es!v;Tcx@ z`b<)eStyia``^x?ebklK{L;I*Jt^M!n_Jzk=?Q0*p zv|pHG``72tKI%$q|A)GL%?G{y8$L+ue_1n;Aw$; z*r)3V|Hj%AWAz}1u>OT>q+&RF=kQ*}470D)`4gXU9rats8@;Igos6G>Pg-EYv-qKP zpFCNq`;^f>ejTy_>vpiAACGOjbYB$mME088fjfK`mG5(%C}0fik6)JhbvO16@Ni8i zjW;5n#P8v~#ALifuhIO|En!3)iG6p53m?ny?(pmrAUDX@ai)>@djIL&b3~s+oFKoc zkdv^|dW)go*G8xxLSF@KTd)Q8*^;G^8L*qfu$xbW-CPX2c{=RoX|S6qW1okN z#X1nyk#Ob=>X$VXpI=tVpVK z*vipEBg3&@mczCwk4WBMo`-o+u!G;?qz)9jqp&1O8|9&M+}N(W&yci-X43|{4fQ}b z!n;pRcB6-&!~NVXkL_~Lk+h$mR1zI(8ua!zDY<-?JD=V9*i;aZD~L2>sS z>4U6?XnO%VRaTo}at510>mraJ)EgYmZNUwA2yImIk{E1Xz%oOgfiLMN^eFblz=idI z)OTS{1$?YW!xuP?{=Ll_4&(nbb20>;XJF%8^!D@2RBa>%pznb%7luKL;K#{+@-jV7 zPfNkUdPrYVhs3;L-2!z8E$TX=sHgPL6*vzKc|nhY>oX)zIJu1VW>{zU`?z#pxRxFm z^YF6|k*Ai3o`vrdbxzH961eWbwG-EUxc1_D0@q<&)28J+F0MtmmgDl`0?xc}bj-uq zI?axGI8Ue9F%K8&v~u7LzCht&i*%YD^Khw7vtu4E*J(4Yvei266f14HPP1bkR_HW4 z=Alui6}HO65W0ZQ51+2l`Jm&;?#bZYCxCYsf_G0r{~#A4uy3Q7hn%m;$6VO4=ojRe_gi#P@Mnuh$F`pZ z+?B~*huF4Rcs>`tn!!Qlfj{e3@(J?t=*uHgkCN}ow-b65J{QEwz~2HNywBfKsK>y+ zw;Zx6&EEo@L1LsQLD#{U@_9D)%+lT@4CDto1|;k}0=hw-*uDb!el?$Yew)~!fRl2Y z{5A?a2+v}E%u~`%^4G2d*wH_(@4_#&t!O^v51-vYUTeV(+Z%WWz6*fw5b!^^V2V|KZN_edH*1EzKD0wcjzwY zZy1Nr=Wqv2kPpT`_0Nz`ihe`b53Y4`7c?O8-S8m~7k(am6utxM?Yu(IFh9PhT?G9E zyn$EgR`}LX5A)qE_U=~DkKSk4d0|;%59SL4SH7Edp}&s@S-rs{lmfaX#B9>IyMgcVX7{|(HMdm#64QSODVB3;8KTQbR!@xl2Q(zm-beD4K(?-ib@XzIO+W@RikqJJnq zG#|FjWTAzy(*#;rg)+EGOt*qQ5pWY^OQ@Ugn5R249>`SN*$3!?YSOt+rrVZNY?nN?2!L z{m|QyZt9xm;J4QC{#Dm=CF;4-s^?0p9_o64i}I?tIH6&NKhV_ieO<>DsN)K&jw`G> za7Gj1rylL`mH(s5H6y)QpGQFbsacgHt&EG;0=_`~`YXcsJpKAXd~}Tq<%e)h#-U(m z;F^ysj%zipPFx9Gci`HI%j@T3S}%Pk@L~G?gif>d>!)>^tzSQ@(`^0vMV)5r*GF`k ztzVDmG+Vz8%~!gro_3ILq_LkMJ&+HM~EZGiy4)Q*YE=){> zwcZq&0)3_kyoKvdetiLY3u70lKZ+j7=f8{$7l+_0V;X-m4|UA^B-Syo1_1v)*4$LS z8GKG2gnvNxwhF(QJHIS(V_8~UvA_x&RD9Bt64-w}0y&d}?+o$`=KxCG)S}T3L^{oZScvsoiMG4HMZ4P2xSYGjwGQ2yxJo?Ir^dXn>iQa(n&}AKg z$JCqNX3}~m>!ydHi^Bg)eKv`h&QyQW%X@jQu-jBR_o5$tColfv+ZNpW!=L31{@YJ3 zHGN84gP7$a(QTYXhkusm)iEXv&){QtT|X>8a$9Km zkdtt~vzM_0N*9am`B&6iz)So~VvoEgJW}D1eyPJ4OV|TguR%HGa}}Dq6g0O|`8%S} z2aCzq;nR?Jf2-*c^h}!}&X_39omVWLd@^W|b)zixL9l}`+b7;DuSdP0O|;AYV$Pu) zVR;?;_7Uw1S>7YQKjqgEUY*D&+x`3cp$kXALqjjo$k1FjgD;GYl0!NTzr!Q{Y4(~1F!wB>pqw{4?9izpy#~! zFL(7Q8x62l)?toA#!#MeOGz?O9x8es$#@~@&i0}0n z>2M|6(&p-IZoYFju7AVzAg*Cthj2|UgFc6AKCU>f)wnuwc{oaH8n<=0AL=xFuKq-) z*>m;hI?bM|ztU;;T-~qJ?74bSr`dD$Nu6fT)u(luJy)OAY4%)wQK#8+^@vJ)%g)si zHCLVdvoh;&{un0AzX)WS#0yUEC@z3rfxG*=-4eqk@2eH|*Dbx9$XHN56 zbn=whEQ7s?QS#plF~;~FMC*9H9A&mwecaP>~z z2EO|deMy~BEx39~wGqM@^uj-Xy@EDQSos0)Jpi2HN!^QSlrtfoyA7YG0dJdpoz%zy{V z9f9LLAD9z8eEC7)`M4ibp8v^@r1AVg9LTX9*FCtBxE{jw6s}ish0o1*&cU@9R~@cv zad|wyalvT)Y_(3ad47vdvw41-PP2J_hfcG3ewR+Od48Wxvw8j&oo4g=|3|0UJpV&F z&F1+Z)@e4+zg4BZWqJN5g#Mh$)+{_<^fTy0SZfL5N0Bdp7m+{wFWkvPzlb||>fN~K z!M^(v?x4%amvN`P_Z8ejxbL+1x$Q@^d3l0%rEhIaVlV&?{F6pUQ})`2!y(k|*$n=2 zcD;xZ996I1K7mipqtP!cD06NAA4C5r-{REWh%?9$(Ld2&4+h}Dz`*^$B3j5 z;yg3TFuy!u`@o^-fOh@Br>S4`VWZ!EWegZ0OPpW2=r?RNj2G70N`yxvJtz3AbwFA7 z^UEfVIryvCpx|B9(}j24qv4V@Knr*9M+ol3UqpKw<7eTHvL{sO%#40vcyDa+k6hW~ z3;TB{4{?~ViRE0{mq$b%73U?;mjV?N3cL8hJn(zKL)H_*SQkosD0JOjL-@`D#t=4l z^swqTb>YfSa4b<5%F-vJ#u>8gcPhp^P*(f#Ve3L@`^c{f(Wk8?H|*7GhJcytMBF<3(v=fZx#H6K?T*J@myxDvSTz_kXP*Q;dj@puFut{TBEGfAXV7&7dLj7gL4NzhujA4GjP=Pd z-$BPx-*r7r`WY5o5BiztUHez2bj3sJ`zyBo7kTD#^{x45_+1vR!$Gfm=5^|P!>1nE zUBd6R3~JdSYqihfJuX>8qkc#|@D)oxJYC}o-yMp+p!GxI{RK-uoI`&d*1#sG>#ZUS zlwTWXY2fVVLpMD^ILL<{c)0@KIV3Nc9$qxLAup7C@0{qf&?nczH(|aFiM3qM_P57%}3VjG@FmSU#Ho8q(`N_W%gT&Dg|5^cgpOso5U^v;oV+K7Cgt=@k{y~|PWGSrKUdT$8* zGW8o9RABy8uksOodSRJ^b)3kz(SKZ}+_yBMzhC{uZ(&{(g$Jj}x(%LFXAVYDx8Uu5 zl)L{X*r3?AMBLx6@FsJ1HFyc}`fZ%cUZHf{L=Dyk>^64g(8l*r$M>u@zGt;j0lx5U z#I9H1ES-EcPBN~yR0yvZ-@z@r!$VV(P62uH%%oGp^*h|R;y!q0(s=-Pc@KTC2JzX1 zS#b0{HLenm`W?W4D-HJh73}fCEcm$(9^y=4`hMh=f&*!$=Jv7%HPtDrODr&i=m(6+KcN6T!(Q@yAfoo3755}jtt-!pZZEq~9_ zX{T5=#ko4omcJM1G+X{I&}p{(y+ozGW##YR^obsy_BtB zmz1Bk?q4W#l-{@k{l5$I8agNazQTi~Ej6!msVn-`;k{9ZFzuGjJf32vZ^j;r3uzIw0L^zhIq+z6HWYP;r0g5fW7(QM zmcpa0u@qifg>NICd=BO|+rqwm-6r`WZ6q1HZe5S&^^A`Y9BW>0%4F?dHaP!2eGEM~ z^%x4AQO<9L506#{b-4^Q<-G2bd4-U95Bt)LFN*%jJj7Yj_i17zd}B$vUNjl!X5v}=+x+r&S9EQh|#hrWig#vhsJw#x5F?~{iMJx>G|E^zTxtkvZu!iXUO z3@Vnpvf8TW|JU{CdF<6gUBJj^#H_L&tg(mXK3Ut2KhkB*cvBA{-RSYoD35%6Cyn+u zO^}9vngc$ucXHHNpQ-u=J_K7?joEC(W3r$0V<9aM^5Jp7_xdq{&yUa5IlviOq~u&Kc$}j1W{@!%@#x>53OsVo5|>HvjEpiQ zOS!~*vXl!r=PGd~cspqed;aG*Ujy8J<}Jlmgq z6z$_I)3MsWVQi35=WXMb$?0;eCV{Gr$dOCrZli`$*@*q%%CV#yHJJX-S@{~Fu#g#_07_Z6SuECwIj z7u)kuzMmhP|3kd{SsvfT_I!MCY}<_ah-1b5T#U=fiPA{k;zdqn!6L`Ol?XjFGLjc+ zuKY&mD(6d~HHkastx4Q`$-5Jm!e8OcTbY=_HJRA9uYV)9Z`*vdvlHteGbf4u_Tduv zC(+geVa6E5w(m&9_Wf`;w*9vGvF%^Rn$<~X#2#8)37_7VWNlzu(eg;hc?5iI7<+FY zd2r;Wn%Gm9gWk&!TUv?qt)Ddcm`C2-;U;1a6>i73{&q%LcGnLR^X57;0mEsC8$IQc zNzQ5W@|~H3cxGB`+gI7vj@X{EnWim_XF|2}rBBAT&A~p9#BEZ)Nx!3fM{M!ecj64B zyJEYZyqoRJJGJt2v2DML1JB`0@}1Aj%d7m{Af97)OxuRBB|e?P7Q~o2&c4FWS2&9* zAwv*TIxhr#!4FaRFBQNU&g1!Jg%b+l_doOZ+2O)p@qR+M@J|&^>0}4>s6I#XlMj>M zQ+Fb)QTaV1e93AjCgYIjoD|Bh3~?L)|IXOH<#E#IB&RYWW3cW0_r&(pL`s`54tvTz z1l=Lz!+pZwBZYVBa30PRk^BT<5WGkE{Lp0J{R=zM=lR4*Y}e!k^FHL91ALwZyvzXZ z&jRkx0bX#9Q_)!#?$2R=Onc+TKg!A&beJ*NJtH*+yJy7i2rb6?7SAIFyeDj%9dcZ( z13IxJ&c)iZEEL;w!ptbe&26N&%`ap0r)GLZ~7_t+jZVO4~|sC6}_F!_!hwE z;TYp>=(=zl@Vhg%_~QwU+nMvuO_nL#3S9%Y$udRP#I2q~dw#||i&JeTA69K4c2Q`? zYiseS@m&0o1Yo--HJaW?`qM z-vhi)4Hq8f{lswLhj^bJF8oY|bII1^%@1Mk?IkmkGlXVONrHDI9qdpf>2S_qyq&_QIX?LPd;A7Z zifvzcS!~~J;5~!jJ=YF`x8-9VmxZpXd{=CH-6EU;a7yf<^6hAUg&wm?@*ntTNbfs{ zOY%eFF|?-g8|;sa$+oSWYk;w+QsZ)mnwyD-vF3Ug#xFr!#uk6#HsN2KAC(Tq>Oal_ zFF5IvNy&47&$9;c%rvk4Ju{F;>Lf3e_N89VG4k1MCzD6*B#eB|yz-vE7k}wCjNxGH zj+2&ywlF8%x_Pq_gRyM~2hk?RFgZ9cKQV|lF@^_`FVq0L1#;jEgPb#%`!iw>O~W~G zld*0*GBdXLKj*|2gQgbWg8N6x@UAkp?Z@yTtXKg0ThI^RS8Q7?(x=P^9CI!ybZ#z9 zUVgLmd;8KS0Lv2KYvH`_-aixVhYP=bImRdwE*#Qy@i^~i;{q={xkCBpX5bFFfwej3 zk^%>96*xGbsbqE@`C)-edC9tF<6M(d4_9E1-Mf+JMoDhD) z-YMmU&$12F{|xAYI!0dNz#;AdH!`;Myd@Frkpr*RGL?IIPb?2@{bacKbn=c9@`|TB z<#Cu@qId84G5TCoBJ>KH!1-7S@|URWvjab|_Ss2(D{tY8(r>`CH8Ltc*2asaKV?qg zZ&R=mHV@WI0IPIYzU5(i{oJYWqhQ=BSeU`Q*&ea3}}1Dx|-pYn8>YZMPa{xJ3+AHcjj z5W#+M%&qobg%5w%w58rf06m>@dS2WYPfBFm$(bY&pfCn~Ri12WH zLf`)z%&(h5Y^SuK@|3910_2EI3v3T_v+yql-}D!ttT|_ZdOPsz;pMw?mS8U}&Ze3B zE$1I6Im*8P{A>Th=~rE}VAJVWE!b4k*jV2fb7%FPe%1Ul>&#+9`zm!;mw zyG5I7S1zr$5|MvlK-z-QY4iO_Z0q7p@tP&gRx7Er1zszuw1oj_7X_p(3P`)yORMf4 z=xlSly8GRp-j1$*w|`^1yRLgvPiK37yW8H|+uiGKYVYf7-O%oKbjjPU_ANT|JlMDA zS%2=b?*9Ibt-Wmv-KO^5&F#Ie^)mH{QjU{qcT;PR+uw~=Hg)%2KhKS~c5P_y?H=f3 z;=1mx{*JDJcDCd=v-+m^%J#JO^|@#Rc&p(u~9EpR8`w=0K=3i9&qW^@m*8*`u>2H_-g5e*UfFZ@H)4uq1GK;u(ACE z10B8XZSLsG6{yvn9qnEHbG-)As$mwkkp&4^U&*+w!Vqwv+;TJ2$l1|ln(l0Ouj}aFC?sy+I=9c=)X~+kX|$S24O$Qjp{Mm>R6DK@Y=65RfaQRFo*uY4*&6SY$*Sg9wLKE_ANb_ z7pQMm+njXT!0aUfEbZ8Ww;+oC_TH|T0b~6@r@N`Of89oQYyRRbQ_}OfZQbpvdC64f zHj;o;R;x`@*3jdUfj*(R6&-!L+?BoEpey9ta)Ba3J_?*o3LgNZ^LpVqfD()b{c!s` zz$uxj7gxu6@UHb88{GE(jq}|Px*K}id)(z$wt@%X*SdjzcW#?|7XHm$?=D#2I5Cvr z48tu|)|5N9qpKY#CI2{AS2cIDd+vgT@0>Ru{}!C!v9VE z-94Hs$1sRJ?$Xwd&W!AFS$B8a+UwiPrl>L1+?;d@R<^(z+D+YU10dun&V}v$>n?0- z-`v^J_5QvKH*RigUFS<B`DStUUR(W z(Er*lcV+inoe!nkV{Yw+u5QT64K{@H+-fDNkS;(rwf75%@%Htt1D*X4YwO(2t(^m; z5c3W_C*7>aNVH>4Tqi`w*`cQiY02a@_0)IGCDH=x>(=jdz2zOu8N&?A-h|hNqS%36 zaHnoyj>u&<*LL(zan!q(4MxJx>)!&mnmumaJ?&jCKv>%iVd$o~pV9>MY*>%3x>wEW zyM{>O>|_J>JIHuvb2}tv`+CTGqGwiHdOLmVTD!m$B@0!RO_23kIC!n=QMW3d=hk5o z#Z1!{z4d|KSRJswzP-1-YaIj%B~8}KYP&F)9c}K0R%k^XU2W}Kd<~@N`Kam_l5xv7 zwQdn^G{@J9jsFR?lZF(ctF>*Nhj(c*ZHxu?I@__py&9kas9|V#9B7v*5QKJXTqjyL zAqlMd7}TA8I8!t;Uf9!y(b-J&z-OxF4@FlRopAoxtYX4*NVP)+s%3pU=tTYQ?rCjV z&`0Kw`n_J}u$7-=rr%@QwfO5;*T*^E-1Yvh?&|`9r7@Cqf>tZW;7xe&(X>u0rkexF z`6?2e0=Cpx$($g|MJFc4i#8Jl8(S1k)~1lLSwHi|X4KxYu1)YF`Fs1w0UhM=5H9J+ zr-wt8L1CyDj=byXZC|%hKX>Z(1pT^Rw8sW?oib?BF6y9CVa7vubV6ewvI*>3WL^&F z=eSWMLh#_OX;t9D^$bhh)o zmh}c2B|qD`yV{lPtcJBB3PaU87!iFPB3_qvtnY@bYitMK7BO3m;k17@wD)%OY;5ms z?X>lPu7OQ!VOYb?UEkXZeba@~*ydhUt+WrC%~VpZVG*Z@sq@@by&W51Qp*dsoXYui zy?_CNSA^b%jy~wv)WS_aMz?_$mJER6Qk9R++pn5Y5UKX72G9cG$=Yl{yKC8)S5pzy zvvLIh4STQJIWe&{0=gsZ8zBv2gSt6<9>i6b=;#K1{my;`olgn(9*jVDTUs#>R`t#l z3myQ|hCih z?dzfJL9>Rn(octgr;W~POVN3s=-Dy18S0zlpJxL~J}7c@plhJ7UF4Uc3-U105Wta$ zaFd?WO4JLJj_yl>!8?>|$%=Zef`U8Og+6TXgR~aYV(NLJv*l{Uey+uZ`)#=H!nG6E zy||LN_Tt))>nU7^a5>jtUl^|2Q05feP20;mHf(e^cX#%~qX*(@bFY}<6gAV2LWa=W zuDF3r5vNE^`U_GMPV*JRQIK5`DC&p{@p>toWkpNLqFAY0F0_V_Nue_!t*AjJm-SK; zs?H+iYstQ>N)*du4#9hoytgY-v~E?A>Vttn*E4O)#H|@x&|KQ$Is|)IjZj-ZVXCvdI~2tFhw<6`g>c05vp3nxTL{r zkYvdef7OI_RJ}p?q&N&9G?WKzx~n?itpYWXw<9SnO+&$CPX_@*C&7wvAvM%=wXTKl zVS~G1{<5_-9J93p8#W+ejxz50`XRVk1hvFF`f|=(1jj8r59{9F2PYsn3AAarL8<@I zyE7nS9WGpft?2A4Xh&LqYFLWSCQvS@wY_(JE8JEQ$ve(7LJCED->;03~VT4N*UOgr1~f+giY0~U`y$FVDN5l_jU7Jl1iF~ zBt6f%?#_WtaC(l)hWXj86))C>Q3B_^09BErRdakvJK}4CY6Yr-S4+k;-LJ(Aw(c)J z5AkWhE(@{5=H z7;g7Ke_sc5(oV1tD4FH+A%QQt_|ot1ss@#3$%A@SoqZcS*7vI^;ZRrFD74cJ?=wvz z)kqWb09T&PGzu@I6{!!o#>z+kPcC^yZ{?DR0u<0_9Ocl)dMUvq z$6pOgTgPVLy;tfl3LZ3_MHz-bxC|c)6r~TY$;Zl5d0;}p!p%qv;?^^jTA0Z`Mx$ZJ z+7zv*j;{BiF-#2nY=1oaaOOug-!Xl@!^k%iQRl5&0SRjL3SwHKta z$KvboD8f8%N3Mn*YI-N1pC?_?tjabh5muw zE|TBe1p>Pndu0oH>Xd_KK&1n8D0EP7>1yq?(+~ro(o{L`rz5{xydoYgTJ>|jDt_G5 z-X#kF%R0N)!bYm*!Um=er$-+bqRx_a<06*yA7#>`8thxRG04P7%`N6i`Yv~LmQ zv2oLn^mAD5`$yv&}og$D;a-7e5tx) z?v+)wt8|i=rcAcA?ciMP#_MI5QSX(1#kMI-omMkmolUFi8yafjtj0^D-r_>#U0%Dg z#$D3fv<7cY9kubg8oNz1zI_TO8WWCVy8`tZyINC*C!(VdOP#0$u|99dB~36cshJ^5 zv@P7LT6;GPPy+W|GX+LKpG01GX>Mz8du&S4+|3ubbLZ+FXnmyG5Res_b_u0 zt*^`Y|K+L7tEyoxVjWk;_+ST|Nedi08~sUO3}fCrTdoupeF#c<@gtq^F?-C!y} zVlV<_?e&zY{k`3tI=jm#vyGd3V(ViY+6J&7a`C(c^BCXKRM+IjO;k^lTGuv#R-`lr z7HxrS;)=D_5rw4*2^fl-GE3HQR6S^(FEu|^mV+87lU?BMU_2g482Lx}G^aRTT^lr= zh(Ls=UmLPC-n~3BnBKUNRi)nPL1J;f@X8Ru8aYg757-UpJ%Tok3hEzHU&_YCK)KNL z+B!id>j%1^_)>2K88_7~t6jMYb;x(&ks#n!F zwyavyP@~goR-tt@K(nxw3i1lA1={rdP)*gv#kOC=D(0Q~$1AQMIf_QqtQG zN@qXfRn;DhFbd@P%EsDNH7$)b%WC0CX+#q0rlyigQaC^do9oy`-8Sl@Ce>v6uxfc@ zP1ExFx_C>?%9_SyYb4*Qs>W3Fv%tJt_#P~n~M2EAjsn$-;;KSg(nPE)`6zM-bE zwjNY(`fmT``*=-V)tZ*7r5JdF6EAP3cP!V`yku0{{xp*>j?q&&B|5!g~C~U&C043wbd<+RV$Z~UvaD( z>ubF}o9DXv>UZNMnT+?YuBr)c)4E#LS=*4pYePLiL0vT~tCrM}iL7i{R=bSHNvQfU z;YbrJmej8D=0HQ$Dl*BI+In!*m8%--^_(O;=G~R`jlyT`w7PoE`FI>0qRE~Uri{F= zUQ?|mjB4M!qs1m=HC$=wg1z+oE2^5_ZD_&dHEA|X=vRwLC+m-F|g_ z^GePa#eSDY=ks2F#FR8 zvl$!+rTQy9)GIp5^iIlwV47CcHcDo&Uj`Q6!hIQp7qkORs9%E5`YSOCDSTo+)m{O7@?A<6VR1m?n@=9uE4ZV zbE2ww6{#AD@!BR%3FJxRJ!hW&O8DTF> ztFCWYgI{2zskz!%v!uQrGgZy2I!_NE_31gP$Q9*N>5?kLFvr@p5`h~-!jikhyD&=`t5lxN63G2%A zj^#uPSlI$-$w5?pe;V^O)N55k!>xMO(j0HVbf?Or%Lb*he0n<9k5pSh>Aw7!+N1JH z+NgZ2HYl%7XZ|?Uz7*7|UVoZD-$GrdosVg0`Gf)a>eFeye1K+DK1oZe_#+vsu*Q~6DTC8CVN>Al)SYFkn^g7N9l{Y>{2Qq0^z*wgFL_CWwuTk82Nvbz97t()-G!Xo|Wy( za+%VXz{s`7h_L$8FfO{r8j1!PlPjv~YGpJj;nZtMXIqLkQ#OtoKh34|_{D3MRyEg& zZ$N0HwyEWc+D6(YDO}k2tg8p0rjYkS@jtN{0{j4k1#`*67k|rqZ(0RlRtUW8Z+aRj ziAvJa=9SRx>Q|BmJ<6=%TVqd&kH>puoITLNXb+imO*3K-nY1*+NX;Mbl_l4_G^6sN zE-#IMivi|KBY?{I^ZMtN;X7lf>TyVW=P?x@Oe_aGDorsZTKsirCSYWffN18lVmz98 z2EaVZNfD4|ltaRo$8${h(hUpr<1fv5;472nF!13c-7p@F2Ss1xk(K~9vRd=F-12D0 zl;MG9v^4JN)AEvhFoH3_KCD``T;(P0o2+Ca_Pexkl6SECEuNHKF7wEmxMIldY=q2q_TfOY0j~RC%_xSFemm>RlSHQf&(NGvn-)4S1iSd{ZOL zP-71Tl=t4Jm&bg7{$u!7+E_QGzk@$Oga>(H1Ex3JYo-~G1}%T>yPBZ5E{D!;WH#&0 z_TE$`Hdqq{$&zM_K<#_=eDvN!g4G3P^3i~vLtueI)1z=3@ZM`9-QnQ%&wCG-MRipp z{F3!`wU&*M?R^^F8;FUOvfhz~b1OY9KODH)-GVkVl+BRGgGp6r8Bx|e;yWrzqJaDG z7^jD>4yzRbbIJEE9cGrRU%C{Dqi`?fQt#5riSxn-168ONN-$N%1gNt}7muvOoiEnzvDmf1ID0E~W@G6v*b8m-dlhf%4GD}1EAOYtqG0xv}) z{&C19k8LrHDo-QBhilIf89=M4_Lg5s6?jyA!rrL6c<()Y%HYsJZCMD?w%Uv9bYLx?ZOhR>xL?;QTL~S+;kB61CBDZ-lde9*S93|7 zzww@7hq4~tgKY+;AF{cC;TRH8n?25fAr_46&MmhcYd;Go0U^Fc;wUe`c^&#_8OCb> zC#iS^laDc~UM>m78=VJ*abAa&PbCD`hwU|1PVPfQzM3uVI0%Ger+3uGrto|MyisR} zFbo3wLvegW>P2%GBAmN7bamW-SP&11dJw&XaS(}4eD?HquWMJQW~lu&5-RC1D#O}8 zB-FB^X`f`Tm#LCiZbBjZ?cXJ|V?#V#+|<|-60&rO~0k}9f*fiWSe+$y5S?9DSV zJwO5wK~VbK%^j^SCowKrMZdshkP%a$`(T}&gQ?-}Ge{;DO$Eg767CHk8CXGqEZ5w% zHt>ywPex$6t=6{Uwe9O#2?6WPC10zGy2O-f?Ib6;-qkY|aWL7+_itowWWwLd?%quZ z&$6IbJ4G4%#Mq-I+;MDA*FY-|&0$0gH~@+w26Gb*7wJ=LcpL}V1A+^eF|1cbrRTt&ZF(79R}+%-{%do<4e*2A*fO8DX%9#8W5}BGK8r`nCMF^L4hbH<5}dI0Ev4wl;bh8+yAp zU>C4#*5sNm0}ikm%1Xx$;qG1@ z4^fSiFM4rS8G2SBZRobuiGWmWz;pcYQ1r@Shi%pwW1VUbR0_r(?t(*{tn7m0Sx@HB z#MA~r3=pX(eG8#?l9Y5hRm@l4N)xH+hF$VnLTAJ~-& zhMea%;~YtK2Asl;1V`h*y*4kv_DVU)PzPSdykq+i&8xE@cazHGMd6yW{m6GYvIMph zd{;-dst{}<*VMrp0!pjH5Cgyo$Q#&_*9~*}9~!Oh?zx^~UZH>y!=kfq>;^}tuBQ>X zuDhoLx|F>uU<&v*4hraS&z;rQcCIU%QW+K9-?|p#gnbRb2*PK9Z|s3?M{F}9b6b%C zjhT+>$}s|VX`z|3+{-UdOGTY_CTfix>j@Kxd}Hh8c7fJ$>cPL&Xq>b+11*|qvSl^A}5Fn*D<1s+^w^7z{>N1fmWWp!6dJoY^~`X=z;b$u-0%b zKK;tHf*w@aO33N1Xa63cuSDp>MtvF+u9miyEe9N zU97Dw#`E^%Kfv7FhKOmkDQFYa6`tJ()?|Xt0UgGB*2ayoCiNH25AzW3u&Aq;z`)AGA4y5qOeaPB! z%kUl>&rJrqe4Cssfh8dqsY&I1U3ugWun{oaNHL*P}CB~Pj%YrKgQ zyDq(zAZ^YB^nQLy@dL)53X*o6;WjZ-f^yDBez}5vG< zzq+wmtn%5)%?jGXo*H8tj8S@;G@(^$9`GnYnqvmcZ_*58jDG7l|F^w&fwSr=@Ba6> zFwDS&OacLt&}1NxOd<>eA%r9(4$N?wFu;Tv2r=kkm^s6Ynagp`87>hO4OY~&B?c|8 zqF_afmMX0@rHYzXT2qZSDk`-^d24FXCN^qR^hNXk{?=vheGZeTssFxxKOYXP+3UB~ zv+mD&*0a{$``JsJZaPe77<(6-b(yHV-v8*}4;c*8$7T$R!oyeM?f4eO#oi9rSQPh> zp>+B-qflGDMz1MX=erH3v$LZ5W)Dz(@9Y`om6qbMbeWUyuw|N>27%KR&1s3*K|vq0 zfA?Rom*=em`TSnkex5V(H$(eiYZ`N zUOAV+gyG-yu`Ddv8@PKm+{ZoOBjMKRpFLb3GlK~z6FmFW@X`Ri-e>iDksC4FW>>D%VQPgJ|(_!;bCETvQRK~wxn&_=}$}BMrP_nmq!8{f;u8zIVUXsallrMX* zF>AK0<|)%?{7dq5X-k?BqZhvvwLQv;)nWSapZb|2H{h@?~`lVOj($9!~eOW|N%0qB4h# zr`)3V`p>IJQS5L{rLD$v2s`Wv=}L@&K9sM<8Uuu5L0E|JVAS14H$ly7^3=4BBDno6Lo8PFd zUT#+`R*jAUyNfk3sLcLcNTX{(BzRzF1zZq#Fo7n|>9PXwvTY00$_@ndRh*2KHdFQkc}f42YuAt;nmn z-nIztF-C9fa~3PiofXJt2Q<7Mvc zR%hF#fAKs8lM^#~fu;>68L={uHRmsu!AAvII$f62xFSHneXJ^+#$}mg_Bv2d7pl$K zl`Sh)wzaNqVbU#Hv69E#S`{q+@-F&NdS ztyPbiNY@Z!>1DdDevn4txqoyAAo5XHB$@wz-gkK}*m%-ifS2~|IX+`#%!#?3yxm~H95XS( zGLt~MUhB+t(!de_KG^J{!~`}@-=Bk6U!RjPDDIw{jSBfN>O}IaiZe%PzEd|XH@&8z zwZ$rM<_I%zdKu*Y85)<&u2(2|`CJ`espG*pe6y@ibqi&xbiMnq3CB6OyOky$kKz$z zEPtgGrSTZ|8|=X>Q>UlY*U>ob(jrz$>uXr4!prXZL!h|+SDJqnL@Hr=tOJY}nHaI= zwuaerXV;l8FERo(s60|=IPss(Lln_y@{lZp*N9rjB4zBqx``~E#?NDO4&jD5=v#xG zG3d>sv5dLj_bLy~N-W$NNf2ca-G8QT)zfD4J(p=SX3fsOQs&pWmq$X03R@L;;kV@_ zWndN53w-47m%lWfreamm!AVPVv+daEJ3(O(&syk#*}L7ew&8K}HsLF=HPx)csye zPP;WV@r#{FeNNMw>!#cltDBp-fync(oV@Wk7GteF1GLqhVlHzg){d7@MdnMb|&hEFeV4%tG`BG4+OwvP(B6rADfWb8{=aO$e-c=pTE znn1}A=_9Mn_eE4+(;%%){qDR)cc~0NyL3`Ot-9$n6-7pMvxhY1>)w&IZBvcv8g2b= z)f0r*>+nYJe7MI6`JRJ)u-F9a0cmPt5|R0ZdGXTc1)pyW%wB+JaM5O9H@geghm;v) zw~O_6Wlfm53#f+(`P{Nu)Sz==1K|M|XIO?&vRimxN7`!M=FSdX8+5jxJX@s4UHwOG zEjw~f*T>^xd~$(jQj3$A6J?%e(On#K8_V!q1Kb9i6qDMo61p7GtBQ*D_JU1*_hq++ zj~E7v?Z*tMnzK}_ht~Us3Mg|toITjXEfRabUuRIQ))2T9@}k12Rg{nP^C&4|fm_uD zzBkRWwO;As@X4iBHoqpU64|do1a|!zdr(N%g(~CW_Dwca^Ue~hE!25wKruWas>t36u=Sf+N)elc^<5WUK z&nG z9dAemRU`4F)BG7TFI~xHZ}MHKT@~pXy!#UGOz$4?aM?RXK2)BbpW?$j-!_z|%-^q@ zzh5(dPnf@7HGjWi{(jl~eZu@5V+$BfmcjG<;#ckGypyd``R{eti2zk;D)z80;`-R~ zWT2YnCI`U?uKRh>sEq5g*HAUC_fbU^qBdWK(~qFw(dUu@Uo8(F2aMyYCQrbvt+oC% z*K#nXh=K~7%7i|5xR45d_5AY#$7h&&4=9gk!Ij{b@*B5BIoMw}mq{_a2|N|7_Uo6! zO^@L&@Vpqk3?DVdu+DXxV|WPM7Q^PjdBWnqcfURe-h;dAvpkE2`)z-E|1)~5-`wEj zrb6r;+ut_B3-lLy;6e}lkL-bo{~5`y?a1RDxShBMal3H4aeHukar;y+@m=CUj9Tf$jzbbn=Ec@wtc+CU8mC4 zgjuzTsjw7%*W$I4YG)WK}xzq^5o6@O{Ygrf+$@+;!EU6LbTr?~XU3A!Z8_L#sCcPU-@$V&-K{W<>Bf;;s09ViZ|cRgq_9WjC2 zQm;|SA8XMbkuFPrNHK}BePl9H{_-AtyVJ9-B%g|{io9_ee}jr&kt{uTzd|a^-<$Qf zyyDXepC^B1#VS?h7Wu0x?&ELzR{6(Obcp6Q`6pIv=Wlwx{F9`x1nJx5udeu>XzJyk zTJdiA7sy{z(a7KQLiwjx{IUFvv#DBL#agv~@jU*{sd%mEm#UugDh|uvB>()1D@1?i z8~IybFaAkCvb4r^%xKChdz%8r{9O6I-FTa*(8w!P)5`5c{T=S&VB}wm>KWyA zr9#Fm71dRu8uPS5uQs8tC$xOVeud7ZwDMYc%hGB5Rid4U=aTRbF;@|A>DWIYs^aS8 z%K&9*B^moi3Yly|#*D>3YN~?ARLVQsl)8ypjJnx)e@41dx5-;6s;xlNRf%BC2Jq;8 zJ%o(8lDduFZxW1>_x%qNH>OhrA2I~Lr_hfYf=YQmCW5io$~!Tk;8ZpFRNkObNJ&&x z&U})9vh;WOTlG2q{0L{77o^%1KlfMas#*N0{Nz`N8-u6}DnBiRNM2Z>EHFRjLh&$~n;HaHiSM2P4>Ut~NhakV*G(CTJ5y?rmp_TUmu*qlEyUZO6EA}n z5;tgB|4pl1h6@X91s=RNW zMuMc3X-TVwAtt1TC9N7Z?p~&R`Iu)CALe=)R%X$djm!$hS1AJv(!qrCG0!C)gJxnr z81vJ_8|CZm4aWQ|u@Y}^c@uxfoHerWOL;vkKRuUCUpdfFQ+A6zb7;V=~vP!`;`d1Nt>Yks)6qm z+#DoMnEXEl`aNY`--wT2;>q+?Gr(U1UVROot1stIwW21^!#BA>e^&5k%02u^uvARx z#B*Gp0X*N3=YBkS%AWFOJYSV(7oL%H;gt8_sgvhJc(U>w#`6H4$)Ch?%|Gy`hSIJn zBkBu)FN)?Hc&;NPxaKK*^>}iM{~q90d47Uttvm_#qI=}I2+!m4T#n}_@=U|Cj&q7B zv+(TFfyFiT9NFvZLo*e;0B~HMW<0MZ!)xxwqeJjhO1=*80a8xs#`B0gvfubqdA8%Z z0XOAA{^(uwDSP;HKpy@10WO&O7yLblXUZcAXQi9+cX&3+^Cdhrm3Y31=Qer1i)V#A zKf?2XJio&8H}Z@k#rN@0zdI=W2|O!R>juE2i}0+(vl>rujcR!Y&tAoU5|CH?=kPov z&sXt$S)Om>88HUWf8eQ==Vy5K%afwm6L^Aa))A!H{5@sX4k*7EPamFZ<=Kj-OP)95 zdAB?d;rXmQ@5OTiH$Jz`%5{EI zuJfC6o!^ve{kB}|4{9`+Hs{V*&dzUgc7Bty^P8NV-{frlHfQS(YV_E@ZP8m|EwcWg zMza@s_Py^kvB3@3^)X5xw4{BEo%Pme>e&h&j#be4O$D9bRM7cN1)bki(E4o!tv{%l z0QX)0eGTAW*qr|}=6^2c|9Q;6Cg%TD%zszR|8J2$sJUJ|ZW{WCZ>T|^wn(aurb^I- z&`t-Zk-%=tKM1SnNXQ>^o`y5M^6M32qXRqrI3?9TIi;Dr((W)*%W3kOR}td$>(pE_ zO->cfh>TeAH4E_SyjW)=iM@Zz-!k~!1V6)!E@QqJFy<20fI|?DqDtk7w$zUkZRLs8 zTvnGS)+A<;;hoCx)yhx@(Kf?NkrT?$1kWT7WoST)GE~XKXIMvu?^TAYl;O!`Nlxoj z!@SGT1i!{*Xu!Jx75&+bL82`S>DL6YYaAq2D~E}fa!OSl7H4bRqXKSL^mGb1WC~Dq zRAUqTGE%9=2D}Ae3%ErEd{NL8aI12t=Adl!cCt|h-=>!IPMY4iTHR9@j6UR|eqo~8 zh-!0DBOiBBmNKYpQ?({ZLDJZ3jZ5q;;}uO8cn2kwb!HKphGre`qI#1=)k>_Xz(iq? zxJv2oC(hRKYQY1*Ab2zEmJU9mzs2X_A4JN;50w%pXF~qFI0sKIm`hIP96b519VXN0 z96b5Q{e&%sj*<+tbHsm2?q znmq?kEw00F&%skmRZqJ^OEt-FcW9|Qx8k?w;Hl-y@Y@|)YQ;VH?G7!qaxVGUbMVw% zi}BlY@YFqThsK_Rr|!LraC;7(TDK0rJqJ&{QgyKB;Hg)=3wnDFp2|$cZ+B>^^{S8E zp`|u#fZm;hr$>H-2y+ge^5@{wh%QSjyixn`w z50YY}Ld-e%h_~*tGG?xN>S5@Decfk&;6;oO6TCCKlyp$%sKezPm9c)gICTpy{2>U$|iZuIrv4dZKQ;e zlhcv_FLIJJ9fDWlOk3F7IMAKN&UNo5;WUY#e6gg4vewY@BLn4*4R~v)f3i^z6W*Ssu2MTC+x; zbW!Xzqe-=Tg0i1#z3ky?nM>kV@iFO$yEZBseKsnXRdIAe1lLE?fgR&$1ka1Hxkfua z#D0D=??;3kFuG_OsgN>P3nsqmKJu+^N+3kux$tr|u>5Ur;%SG84=tR?^mjFMgrh8> zs78CQ@~dU(bgZ3WGgh3Nm5;)0Tq(y;k%bx|`lfPo#z*|nTDa-3A?#6oFpH^U#8s^Uc> zz?|q%N5OnNm;jb*eX!N~NYOKZ7uiDZ@_zkbFYiIyWPpAbhvgS2EgkRd59A7&4jDc) z*_&^-nJoBxL^q!ZBA5d@%!v2T;Mq^!!0s>P3FDl~*S1@=MJyzByFB&zvc!ZRzj4`* z%WqFrd?Hy6!+!b#3;(*A_!8&J1r~YpkS$$6LVZ2lW~c-gWyE^Atr`rzyDT()dkYTBLU-(8Wc8`tv2 z=B5>?=XsPekw{H^Q|igrzbRFjoSH~g{AgMEcOghs+_@}u>7A)x1j*Boy!y`6_&b;V zB=ywmlhYHaapi}WH8;Jv{KLzWXA%=qRX<9Ny)!v~Y--eSg$g7d7adUPe@;m$CSrr*t?!94@|^c>iEgX?%gWdYr$Ro~DZb9j}^|)eA@zA;>!A%{&p81W7=sKl5gw(&CFW%ABs^yyCJ$rt#t+`CcL&)YtE2Jc|X z=$l6w<{s9b$SXFzn2?=JF54E(8P$^yQ{O+(Pfca^h=9)at-bo-u;!cW9c#}NWcVBp zJEGp9KB}4N=)FIqFQuBi`%OH(VVh~%dCuL?B3qp!w$0Fb<(D=mrVW4pRg7h&DD1`Nt{I; zRy6!}xab9qz6K>j&H45~#(q(5Ha&&aIgB2$J?xn+7E@PQUMVW(cfTOM@EL>cuV8hn zZCS`v+7_$A?VUFnaf-z{@f_pYfmykZO@-mc&9udio}Vplkd@FfgeF-=b87A!!^C`D zp?@IOHI|b^;L6*;AP(j1Q@0 zNew9j!2c+{W+Vl0@?-hajK79mnP@hsLYWQu&FwjjA5)`eQ)kbO^3>_itf2937AVc! z%#h~NP%j~N(fgh9uRhdmKL~30oKpurSu>+3^n4c2WHzZzTU6C8v-C$z;B_t{digVC z6~)e;Ie{z}6T-tM{4u11!RkiGAeli056%iU4-6uPG#wa*&765;HL%JiPp7!-@?=LK z6bdw5CQpgRP^7ocge7BYD^Hl%#0YcqdR8K6(_2(iad>r^j;ji|8O{G$(<)cD3RX<<~o5WxdM)&R`oa|MXbA{7JB#&oS7hmw#<6UjB0^Nxppf%h8j3dinLrypNB!quaD&&BN)tA5P03wxi6p znhj^b)J)TBfGN{|9>pEO2sCa&#JX=h}+s$hG-ZM0P6 zMVXzrvS8K2>Gp>i5&MhkZtE*L)jg_XUDz+%N%9mf5vT=MuqT@7| zN>kqsRlUa4uS0#M$3MwbmlMX@`!ttRrm7vPs!E1H7gd+ibg^vyVDLuzFsg0`C7Pd# zw%vNqREoaY)Z(5TMISS@Sg%4JHHBn#Ic~h`b+NsaRUs|(Ln2telgo3~>#`3XCAsb7 zHRteNY?8;iv+W4UzhJ5>hBQA7sJJWu`9L`O_xzRi04QEZ~yCtbMv#%J!(9 z?W&{tCK0szL}CNI)R+jeYbm$elpSVyT4c6ty#l6ODO+itu+`90&T~wfb|qJrlDQWc zv2qTR(NiX~-xV*bYWh8jJB6cS{58LG{I&C-H)8%?7ik^?)ho3$*-w~}h?h~%KYztO zkz0n#>LR8K<9zygq+M$}MHgF8dz5mOPZ?|eUI>rbG`iR{tr1~Z^=e{kETJy*jdy)B zmp0>V)kVdY2M+}G)3yhb_X!nnNJd?3-s_|K#EMz(+wdTSyG)u@y6iXJ&O=;|8gEBb zwGN-Ak(li!woTn<%gILNv_)yMKFwn=#2LdBZMukK--;=g!GwDIq2@AOuF{_{q<-2} zq2I*TPn)uthmfJEpE{*}+0-e;(Z5Av%A2GNW|TjF#iR#NGWp|TG2g)y8+Rw23V@le_p${1XK2jUVV6L zl*Z7R4)~37nX=E1!5uGs1k{OP$9a*O2s-_UpFj*WQ_V!MK^KkqNLW?1+$Ufq;s#wL zEyB2X`sc`l>8y*M%1;EZh*GZdDGBvy8X@X7gsXJfWxQ)5!fO$(P`vMXnY`}i1 zW&8DR-!TUXdJKmO?t>l#s%bP!7xmRhSDmm>0!*P{)_So+*(ZX#bx{Y5#7eheW&ssj zj^<!PAYP*nZ2upnRp=L+3QxfXaOoFK15U$e2R&Gs17*6dyjLQ?o z+op?ZVAoL1eW7PjnhRb!#JP5ioiNU zvq~4M+_pz4SNW7NZDu=!2W%Q$M9j2`2*W`Udj*zIm#N0vuFG`eZPP`?mIrT!-Sdou zP_vEH#qLAy?#BBD6MDBwd)#=#x!nouH9@O%v4m@O;N4|H*X-f4-+0&SasW4q5;c!C z`ohO;v~spRyx#ZFB!Zev?A<%LSi&}4L=3M+X~G(vA!a=io!Cej4w?EKvDGHF)fXa- z>Kj(M(&Z$s_|PCCSRE%=9SV^gNj_k6&_(pcIYb1j;{;I-X_8F0Iq0&?db_zOX-t-i zu+9Xn)@2?p&FXRaKKZ1ej^Mmw_2v7bq^o^9eHq&Gst~2uhDFyF9E+na%0$6F2a)?M znu$|*OySpN$?hrJbonzJ+VEpszG1z(Xp^9dwOzeW-k;eRU9|19ePw(m?{H+4_Z~yL zT9^GeHTLR#^4XGB>!KZwY4_FpqFlmuD;HHw4bfFuse!uMl-q+@*X@({h>KG7RZ)@Y zs;-Oo!y&>%LqDA4B9d5_fQ)e=hOHW}%8!j8$i=R%#%p84$||-Tr;>FYhoe8Mxme1u za|l6ew)N80Qm(4TJI@8{+Jd8Qx+sHqE4G2f?Wb`Phih@#x$ed3Fv0&0<2fw{o%S65 zcNWhRE^J&ZTw%)BZ%aLWFY_*kE8w=^w&Ql=q{?n%;oXkgiPO@44(EUIxW@>80_T;Y z(=obv)Iob?)n6;D{}l*R`y^bR!ug*z-)C@=@{036Nf5ugRvTXIH)pbqHILTgZ3(gM z5ZR8@FU3FoWIIy76r8M|Y)a~vf`Rq(wjNV~ZJ2C9>X%~q(9b+sZ?L$7KCU$v;&~Z| zpKN&PmqNG8QkHk0Iv99>4l8`*_~&fG-tXU4pAi@Z{hp@Vx(} zgC823XmM_fNp-5LX3%1xQ?5$v~!Xr!iQ}iugEv7$pBBIyvVHy>07jy~uYsN6?Pd!YS+EUUiTu>cL+ye;0C$%sgL>L=DfRgPxR?2=c;SzO zw;y7?b@({=2x<@iP5k5FgCAt=cK8(d^o;<6gWwtP(=nW&Do5XqOmgL22A()GVQ%WE zJni46*I=X4q^}GXgXi6r2(g}f&Ha0VLq1!64&2QvYr7p*Q%{ab1ScJS9eD2pi9m8q z`TrsK!1f5gAH4q4jHRp35%8f$X!8h5{}{OC&*^iQ{_EhgvG&ON;p4}xa;f~E1DgkH z3_Wj!(2@0XlfgKb{}k|~qlsX<%kM^T%OBberP413AAd*GA9sV#at!VJLvO>ie8sAF zqTdAG^@WIj2YAk3MOe4K>Ug>FtSj$>;Af{;Bb!Qp44mWrLEm4W2cLd<(#UPae+#^G zkp6J>e+FDNhs;cV{Gp%5VWLsT>Y~@pPTnyxKdt^Ui;$!7lE;eITlU@eMdP&sydE=x z(mOA~LUP5nRQ3(&_TM0bKacMDR3Mm3N!szpB2r zcp3O<^a*L6k{_=GZ+SKGuDp%l>ZjT2FrG?32!4+F?9-X ze-Cbs_1{U+*QSh)F8+8D{Mf>X{-@ye7ezQh#n#m)f&(tU3UFgs-|@kC@T8dhn*^?J zNQClhCV1}$NbLG&F?emPK5N0J$d74Y+TQ`LyPp1Zc z30l6H2+p|nOaXVs+H*U27mGS9Y0}G>%)DD7c_Y)hhr<4w5aht;KF)k`^lt!reX}YU zAN)S}Y1-%I={vz^me5${mHI;#b#}+{`#4zki1m}a_%e9s&Cz&&A6&(F&ol9rL7FX% z^ncs`6N3rh)0aiHmK*sMyDDozXiN4R$ec7QX(1bboIL*yp;0l zU3u>WcYh6;;P89E_2KxB4-SHN#^^r_F2v$Lr}$WTPl6|g^`8)Y2YmX=^nuI&8Sw5H zy|!%oV|XmsKi7I`vND(i-c_Fr_Pg|T;Ogy+iNh}!ev~rYe7qMtA9-}d#SejxUKjE2 zTflQ-^?SeQsa&(;ufyQZ&mf~*`cHwMm=ewJKZnlmCofH26nvfdlixxfyZ--o@S#|H zeg&>s0FBFUWF_*XE5et8cZK~qA*cqQDn#+OfDa%K{rYw%_!#oW^GgqS-9OPEuKt_A zyI9YUAs59D4}niGKXnFh3G2z9fakEDtatU138v{7g=JXG`t*0;9k?v zBdoD5z1p$om65)1A9(t!5`pwgwQnoFMSx9;OH?i5FGtPq;Fgf&ecWo zX%=`rhAQ?t`X=zB{}9QSSAb8&`X>i&`(jl7?}N|8;@<;aFN-;@K7R&&E*Ae8@X>1Y zW!GPy16Nl>_4yX~Ofxdj$%kja1vdHXTz;CedG=f4O1 zT#P>tg4g|h6#sE><7Ucq_4!-yqg9-MI{YQ@u|GjRIxLf9m9h59pwSWXXIVAt{ZGLY zWAPI>^4eLO4EH0o;8PdFpDw@Kz*A%ND@4!ysdxQxH@GUskL$qW+y5Vxd^7%wuL@%{B=2a`j})WZ>E8pkHDiY{zmZpSp64+ zTONt(e>Zr`MAi#O-vd57+>AWgI z(l>&uW8=LX+#Abp1K96xs#uQ(z|9|GOx*ar0X*qT_6CO9`w%!iH`3=n4Bq`nJ*sS1g>ApcsPEp2m9X?JS)M+cP6m>W%F+b&x1d_yx9hB{6$pX zw}bc3P6gXZtNqZ!;GOfM_3lr>xv>Ao2Y(HIkn_Qv(5t^b4{i?S+4$g}!Dqja2-|Z8 zeER*I2RME^3qF9pGsmSb<4FDhhg`cI#tum^pZxT@Bso5~7JM*vUh|!6(HCR&nM-^Q zeLd&WH-KB-#{R_N)r$Y4h#xkBpNg%2+rejcC(K=IwPzQ&5qZANrGGE@x#!?PhyM(G zlKLNT}2HZV9D(|b{Q}2%W?-}s=pGEr9FTn+b-F!EmmvKu%_bbSr@faUW z1#f$G#E&P?3qHksIO6L60QjlDNQCnBU827v5uVR{ z41Dk=hz&g-e*kyK>hpQ%d21_32l7&Ubx#-vWLddFjW054ipi&ZR#DZhI|#==%3>z>miA z`yzN^jNiWx-d13YT>4*vYtF*ctkdF;%F8LA@kK>7cp~`VLs5Ni08h=pqb~ie;6vbT zj(!RF@mTrmz$r(6d{Y`=?01xEs9o>(O~oKlrIwdtVFQbpz|IAg=*Y~*o=w^NQ_k%TGRucdCTciGO2OqsDn!ml^wT#DFmwpF$ zf2@Dr1D+Ra??=IVh7zHEeH?u7^^tu30(kvi=8)ruC&5R4KPvx+;Bm3`JrC}Nzqh;c z$8pQ{xqpDCT>7ctbzyzR2QvP6_Fof0m5Xlx*NkGmy7bN9lYbP==U0h7Og|yG58N1Q z&zr#0k0DRp_`eIhhyAUWSBJpQvL4mD{67IMFGTvz7r-sC{JsM|carl`SHB;CAB>fM z7JQhSRO?-S7y%2`#nPv^MZJywLF}3NHAXm0KR%cY?vByV0Y~R`6M}m1nUH=$a3{F# z64oMu*C-QWvqkk{>*w>gd5qG8OqOD;6kjwmVmd%@IByQVYHsMgXjHqv|q}B)4xgtQyqW24!kAS ze>=bjuZq^Ahrm@Ii}o+?2N!5hudDAzzz@dC|2y!W82&2wOziylJK(9GjQZ;*!XHu_ zZGV?n!*AR#+wbt@-~+Mzri0sVPKNux+Z7+ye?o9KxaC&(-SzLQ!AD*Z$=A)`M`Qi_ zM({k=GtVFI0N1}GTJQG?$N1&1z~e?o`pZd2% z@VKLY9=r{CT<7q}$>;;GBM*nifse(~Uk@&SDiNG>@r}Z<`rQRSh&-c;IUZyen@=x&!Y7yF@^CZGo71gzK;dZX<*D;{!_t+ z7BIdE8?Q%yPQ>!7BYqdc>xiRY4qk^m@aumD{B-R8Ocwk&?P2;OuOcod6$Uz1!*P^KJ0-pWE{d=^sA@SMP}Wr{Wsu z*-syI^jCoAa6hHm;ac$au>U!a1)oA6^8DNcp7)k0zgK{d#`No6@Ei>OR=N7U6+E#K zo^ko_1K012*1N;trLq0%XTVR#`sZ8Vbs;}a41Nec8;gJSH000CWNz}uG$ewz`o?I# zI0al4i@z0oko!HJpYH5%%YV;49!X^L4w+|6jq?@OQPtPlKCjujiLE?c2qA>E+|a;0GJ&V@F>DUW$BO z@320CI44%0#o(!&Pp@_HYr#*Swd=L`qX%3cqu&NTLHQFIKgB-?KK5La)ZpZ}U=O%c z@xuIl8vfc1u6OwT#P6Z9^GKrk^@#B8oIg5#_!77rdAuHa#eW;z94r4>a9syH@8W+6 z_I6PuKSp0mg!@%PDa_3l3ym~HiueEk&hYh(3)0(_RnvV@!RPJ!z-C(OG)D*p%Iama^e zSN_kzow4+zu7ekDNSX6em47ApU`50)wct}fg$G>vTfmRsmJHYenDUl`Yu*^$A9^Kt zf2_O?@FDgazWtlP>lwc^`Ki3Og3JFPp<6B{zrEnSvHRJd1|Q)3`Y{*(Mexpt;VFmz z8GK>`bJo@G40t#9SN1!sg}Da#>F3iVunt!lGE?65;Hj_UyvyZxGq{fD%Y6I_a4yzg z?ck%2ME#Qk@9K@tcYYr{=jWV1(?IqAAAz^U((ebK+XRof@;?sV&U*cr!;gda{#7LJ z`^p(F&QrIz_$P_4`uB*Re*`|keyZ2SKMy{@^A<-PuDTu%>&qdBCxTlx(kJkn>Nf>^ z=S-v=)IlJh)=H-UG@@_QS2I_HmG z9=;E}KNkNN;NY@I{(ly{Hzv>i34FB5zL2N-|8H>1nP_}}2tHU5?WeGSfen_98G~6Y zUSKt>W3Z4f40Uzk&14$dR<6o4H?_89GN8s7!j4RKBPK(#gPB4f24S!ulXn(#unSQ; zx9+AnK_@m?GCiGJgysev*sRE45Mm&+v3Fnt)?qL37)pRSPmL&CQvHdm5Tou2?jy4!Q-cO$`x| zGo7&hWK*dHiV%9mbyQ zw>qms-mpi^n#aamX5#=hQ5x@Av0!;q1LQR%jD4V_KpReotQbw_w=_K8%E?w zV>&V&`JoKGw#yh#%820$-87|JR;98SO4_(J=*4Qv@=X7LSi~gj%;pPNQORX`a=Cs9LV z>k=6#%Bfb^lzKI`tcv;~JJ_DjF6i&Pd$6aFZ5vqJD;rU2+XmGjlgkeF40M_R^$uN` z9qelFaP3!?*wV2^dX%Uy+nyhSJ2UyA4KC^6Q2)ZA{MImwjTo4+y=P0n^otqJOi?F9 zvn8`;ptsPzk-9aucLb&pUJhYcDVhqI_5!w`Ox;cAwb+_t3#*XrD{3;`;zus%G8T)9 zqScN(iIG<{c|#V9K_&q$hc_%|V1~-oH|Vlvl$zR>XCevNw!A^|u}yZ0ifcK@yxo*F zy)l^W$VwDofk}dp{PVQWgf+^Pkt#y(VX>;cFqFrD6+}ff#b8s9>~%4Gt?);0Z`)u` zpRpe8hr4g6klkXYY*9kx95P`JQ&y&l!>~VucA{DdxuB(K4YkyK$zv=jTR1P*LbgA% zv1emD_L~MaV@ImLFgVZ~jy;om<3=@86)?qhcADv@enqG=%$bgCZ*ShzCuBB;qt}GA zcOnza956YAP3Xx5*)7=)8ry(SZtw35Emw6RH%-#QV0(YQuLl`}@v+WqFGA1ET8*va z)Fs(M8?$-w;6R@fL+u?MSYcw;^w7h*w3+C9et=&Cch1NngmmlatkeOyt!H({p9QLd_ig|}#YgK{RvjoFRJ*nH4MZSqCs59P#+ND$UmtqjQ0&WxF`)YS!vm$O*Cqk$NpLk1#< z+j|&ra`Q6T_OR&+qaoz6ST@k7Y2X;u;pFh@xpNlw6x0ZE@uR8Ll77r~+_#L0 zo9*?CE0V6B!M@FijtsNUaI*qq%;l#~2PGAX=bR{!v{(wm3Kmw!22Gi9=C#}vSf)~? z#9}d7m&qDKWn|#4D;w&;Y$4c`?;mDuS5@va z%Y>`|%qPD~+wo#So z!{J4s9lG|8*9>8q(8!V!)dEiO7VRjoXbFp{1F>~+iIE~q79&0k8*X5Q#~>l%%8F3+ z1tVS5R1L1QNhMgcB`3Ls{nVa9gQiNO%t9K@L_jX+Vo732k;rbAhC{ugWkb44NfW41 zkupX`tA-F)X2^=Vtyq~0qn0DVV8Fmik_>td>%qVvOk{ejuh5Aw8lt}WrlK0>hI;ea zOs;2()`{*u$}MU#c)^BzOMAhLCChC=YdQA*26D`Lqj^f84dk-L^NR5|)3M3OMJtw8 zb~PZI?E>X9l9{|>&WX)52`g3*^fpb)z(^!|(dNuviLhw?E^Qy|WNGlMMu!`zTiVg9 zvSF8*ad#Cl1Ju+1YAWs7zznSx47-5Gib9)e8}J2TkyKwskO@SiTNZVnhF!uj+i%P+ z_O<8l%gm}X!WJzDrg4I>NC+B!cdd;{Svt|McHS@)0~3yhvNa8m?Nh&P%9M175|lKM zAeLg&4OG%xt$faDeHFF?H_)}Zv8Ab4f5pV9_99-DQ$zdFayxrA_7uFT2WKeUkF{Z% zj;$Tq9FTW|&7svO@N8SUdbV_S<$H?yPnGsN1#J+l1}wf{1-q|^R3)*aka}tL;=*8m zsjM$WeDFX$)?wf7ovrLIF7~)#2#GOIhR56=;_+p ztaV8h>>fNXy&9B>DKvJ{iy6*SHQEN?Ov}*{MPAm&H$swQhG&fesZ3;#mVE|WgTPH< zzetIWL9`1lO^It#8cMghq~6$YJ+IzAV>5TXo@jR?FdwV1nqXA$zHDFV$SAIK!7}P% zxT9>}z}DovLN!CJUTD~rvT0k;K2#XcFrha0 zVYejhT5>aPn`D|7?s2qDn~hoGf&Sj2vW#Y_lLAxu5;?7~_>c};Om<5TJfIUWQ=)dG zy}en!prlOE^2`AO%W6lVxMbL6u~VdB@lcO8@>{dQ@-8Pb?rf%Hf}u#|wni&qKB__N zB!HblVB`}Ep4m#OuW~)PtdxJVxGj?6=oJTwMHs+)RwttD_Vbn8P4IOlXHQK?(CXQr ztXZPPOxBFC`f|{VncTo;Mn?NGhJ0fmdo-)jWlXn+qeOkrQ;QbrgvF{EX2VF0eSOt5 zinWaF&raNSv?q_+pf>>$C7KyG%gi`a()s%oHkDiA*_c}@kw9Xwtby})UbKZ#t`-jB*D z1JK6wbY>`TS5c$$V6hzPz)Ui`m}xCh3nYg8O1^$NiI(6+4`$JkKr(_2Z7&L4(VVBLTTvl3Mt&7-YB3|`Hq7Q|Lmf5Dv4^dJ zi7Y*-G$T{26NyeuE!Bw>ZpOQ$VcmTtTPxHPRzJ&aNIgW~5T`1fR49ic;Y&c1QC_p1 z(ZZH3tn8P@EgdgE%zjU~3?n>x zxo*x$%^4K=EjDK+TFX(I2Z~p7^`KvLHn+pdXmeIFhsSI_x<~7k6>3P7LTA_PqA^xZ zMz5fS6l%3*!#HpeO>XZrSrZ#SCUB;?NsOkXwM*G_Zsq8(2VrJ8Jvv+0WYaj1Kj)m0 zK0%Y!=O(eQu4#>SOGTlm6ihrccduR*dSoKJZ>YC)P1HaQ!;Ne&`S5_|f|eNuqDP0z z)H>RmlCYm0Oi}MBx7ad4T{)HSw5Qi-x%z&C?Cp0JpGGKEKaY{&TxQheXiIJKGpE+k zMzz)KGW-D??C9=jnDx)xQ?O$(n3ZfiUoP5BTr|;Fc6Cu>Zf2p(73-O5NVr|j`4$l> ziC}iqUIezuP<;twnEIGIjP@MciAi^#LR+SAhS~|^c5;1Ni*n@z!k_x+E=_nQ>gGaR zVG;|lDBE**2DpROzjTbL^iK&P1CDpd6bN0Cux)~Bay6T7HVZ`=P*LWE^&%f zE&(62K$SH&Zp}H8Sw`&9{3_(A?HzXX?fr{;x(14F!mRA?-KrgMyV+_N&;9Pc&f;ZR ziVF9-O!d`bqcsTjcWUQg^6J|fE(Fvs+;^FZ#*|W9ar%+tJ5FW#Hx?BwjlC#9Tu&7l z+K`?7If9jv8U-}tqK$}O(piYi3L4nk9Yq&pqPU_RTX)}Ldtc0JLZQxMSu0xk3}d^^d){iGCH&m#4s^|JKau+lbnMQm`Xj!c za#I97)I3n2?P774nvd2LbteLY&sr4)dEG1;1ZtkMw>pXlwOu9(t~46ddHRzYTy)B7 zgF8Q!YEbot99m{o@ z&1X@n0kfHjxH6OBQ33y)Q}2D@!QU{lAb!NB!g)Y}FOP8}zN=vFW%^U2_QF8%`7WbI zi>zwL(8fPdmC<7hel;z6XrZLzS`n5*d@Z|Z0iov>a&yBULTY@%qZwPMKb;7dM8|rOaC^C>iLm&r62Ttff3`=A_i{k3-N}!zd_ooc)D5FUyFMHRaqnR_qxGPIjq7 zQM;ftgJ!3s9sBckUHZnBw4#8M_2L~6$*qcOOL2Go?W8Qdi=!?qI)!HE*BP$&@vT{S zyIM(f8wQrLO1i46$03NYM?A%YY7bt~0TI51t)*>MZpDWN_FPb+RG%61${$a@ai~1Z z_7NGuQX8F;YRho`mN0r`!JNP8^IerqA&w_Z z+ePSnIgTA`CAxxI9!uh{dA6^1a6qT!L2b6%?aRA4WC&4EYaaKcKt1(o%GF^89+OB< zC)VbzKhGW|s5O6d!$wMJtx*km%27ujN-a$hRikUb``b5c7|d?+$Q&y>D!YqtfUXH? z22{Gq$Ysm(xxe9$S1SV^s}6WHKbSKa2jF$t@TWNauECAOiLM2@79y(g`=6c_*KZbX z1Wt50=yK3)2l#kh<@7i)W{(V=Yyr!L{9zI*ElCUwuj2$S#}Q@dWFvTg1+T^^!2Lw4 z-x3_3PaROXvK?H>GtrOW_vI>Ft_}AqM<<)Y$Dyky%-7k|cMvAO(#Y0udW=o$<8`gX z^(h{=5GNbNvehGd$_l&8#ffe+PIWEA$u{NGOYQUUK=bqY4uU+LY!+{aZn`Sxe(Dqb zczr9R)4QvOCh!i*c-7Yae0~oAeSWe@_1Fw+_obBXt&UDP$oBDB=$0t4`}zEM&D!KA zI@#c?|BIwv^9p~SZXY2km##3jlDB-?+N1S^p6(o4`T27H0p#gqWAxGE*tt=F`)NEx z`vsh%tCB5*dH-PF=Wt|UJHA4I%BOx+dIxm}bSFF!S6}YQh|bu06P!O?oUC&4PW z&V`GP*B!&3;^e;Tu0G-e(CzUc7RPI&hTccr_PJ#6za%8wPkHH=z~lYGC;l}VJm5Q7 z@e1U3aS7esXOh7RO$hh%bXS(p9i*?H^^wr}_SQH$-`+j+;fG4fRk9mP^1I_)GWag< zdHbKw`i>I1sZ}ZSUQ#KY=%d+%EVv{Uv`n{hv6nd2PrQJ5GQ7vd{0`iX1@jv`iu#3D S8jI*YvN2`s!+A Date: Thu, 15 Jul 2021 17:03:29 +0200 Subject: [PATCH 6/8] fix to ensure numinterfaces is not called for g2 --- slsDetectorSoftware/include/sls/Detector.h | 3 ++- slsDetectorSoftware/src/Detector.cpp | 26 ++++++++++++++++++---- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/slsDetectorSoftware/include/sls/Detector.h b/slsDetectorSoftware/include/sls/Detector.h index 06993bc85..1c582085e 100644 --- a/slsDetectorSoftware/include/sls/Detector.h +++ b/slsDetectorSoftware/include/sls/Detector.h @@ -1739,6 +1739,7 @@ class Detector { private: std::vector getPortNumbers(int start_port); void updateRxRateCorrections(); + void setNumberofUDPInterfaces_(int n, Positions pos); + Result getNumberofUDPInterfaces_(Positions pos) const; }; - } // namespace sls \ No newline at end of file diff --git a/slsDetectorSoftware/src/Detector.cpp b/slsDetectorSoftware/src/Detector.cpp index 3d6c2f410..114ac15e3 100644 --- a/slsDetectorSoftware/src/Detector.cpp +++ b/slsDetectorSoftware/src/Detector.cpp @@ -746,10 +746,28 @@ Result Detector::getScanErrorMessage(Positions pos) const { // Network Configuration (Detector<->Receiver) Result Detector::getNumberofUDPInterfaces(Positions pos) const { - return pimpl->Parallel(&Module::getNumberofUDPInterfaces, pos); + if (getDetectorType().squash() != defs::JUNGFRAU) { + throw sls::RuntimeError( + "Cannot set number of udp interfaces for this detector."); + } + // also called by vetostream (for gotthard2) + return getNumberofUDPInterfaces_(pos); } void Detector::setNumberofUDPInterfaces(int n, Positions pos) { + if (getDetectorType().squash() != defs::JUNGFRAU) { + throw sls::RuntimeError( + "Cannot set number of udp interfaces for this detector."); + } + // also called by vetostream (for gotthard2) + setNumberofUDPInterfaces_(n, pos); +} + +Result Detector::getNumberofUDPInterfaces_(Positions pos) const { + return pimpl->Parallel(&Module::getNumberofUDPInterfaces, pos); +} + +void Detector::setNumberofUDPInterfaces_(int n, Positions pos) { bool previouslyClientStreaming = pimpl->getDataStreamingToClient(); bool useReceiver = getUseReceiverFlag().squash(false); bool previouslyReceiverStreaming = false; @@ -1551,7 +1569,7 @@ Result Detector::getVetoStream(Positions pos) const { // 3gbe auto r3 = pimpl->Parallel(&Module::getVetoStream, pos); // 10gbe (debugging interface) opens 2nd udp interface in receiver - auto r10 = getNumberofUDPInterfaces(); + auto r10 = getNumberofUDPInterfaces_(pos); Result res(r3.size()); for (unsigned int i = 0; i < res.size(); ++i) { @@ -1570,11 +1588,11 @@ void Detector::setVetoStream(defs::EthernetInterface interface, Positions pos) { pimpl->Parallel(&Module::setVetoStream, pos, i3gbe); // 10gbe (debugging interface) opens 2nd udp interface in receiver - int old_numinterfaces = getNumberofUDPInterfaces(pos).tsquash( + int old_numinterfaces = getNumberofUDPInterfaces_(pos).tsquash( "retrieved inconsistent number of udp interfaces"); int numinterfaces = (interface & defs::EthernetInterface::I10GBE) ? 2 : 1; if (numinterfaces != old_numinterfaces) { - setNumberofUDPInterfaces(numinterfaces, pos); + setNumberofUDPInterfaces_(numinterfaces, pos); } } From 1b348f9b3ada8d605c3ddf4e2d3c1bd5bad08bed Mon Sep 17 00:00:00 2001 From: Dhanya Thattil Date: Thu, 15 Jul 2021 21:17:29 +0200 Subject: [PATCH 7/8] binaries in --- .../bin/gotthard2DetectorServer_developer | Bin 0 -> 224960 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100755 slsDetectorServers/gotthard2DetectorServer/bin/gotthard2DetectorServer_developer diff --git a/slsDetectorServers/gotthard2DetectorServer/bin/gotthard2DetectorServer_developer b/slsDetectorServers/gotthard2DetectorServer/bin/gotthard2DetectorServer_developer new file mode 100755 index 0000000000000000000000000000000000000000..4816705658b699a57f8a1e5fa119dbda37f6a0c5 GIT binary patch literal 224960 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 literal 0 HcmV?d00001 From 09391b767a1f0cea56f63ebc95919b2f0a34ea02 Mon Sep 17 00:00:00 2001 From: Erik Frojdh Date: Fri, 16 Jul 2021 14:48:22 +0200 Subject: [PATCH 8/8] support for scoped enums and operators in Python --- python/scripts/generate_enums.py | 76 ++++++++++++++++++- python/slsdet/detector.py | 12 +++ python/src/detector.cpp | 10 +++ python/src/enums.cpp | 16 ++++ slsDetectorSoftware/src/Detector.cpp | 4 +- slsSupportLib/include/sls/sls_detector_defs.h | 13 ++-- slsSupportLib/src/ToString.cpp | 4 +- slsSupportLib/tests/test-Sockets.cpp | 1 + slsSupportLib/tests/test-ToString.cpp | 23 ++++-- 9 files changed, 138 insertions(+), 21 deletions(-) diff --git a/python/scripts/generate_enums.py b/python/scripts/generate_enums.py index e43f45adf..7abb7cfc1 100644 --- a/python/scripts/generate_enums.py +++ b/python/scripts/generate_enums.py @@ -11,14 +11,29 @@ import subprocess from parse import remove_comments +allow_bitwise_op = ["EthernetInterface"] + +op_key = {"operator|": "__or__", + "operator&" : "__and__"} + def single_line_enum(line): sub = line[line.find('{')+1:line.find('}')] return sub.strip().split(',') def extract_enums(lines): + + # deal with enum class EthernetInterface : int32_t + # and normal enum burstMode { + line_iter = iter(lines) enums = {} for line in line_iter: + #Hack away class enum defs + if "class" in line: + line = line.replace("class", "") + line = line.replace(line[line.find(':'):line.find('{')], "") + line = line.replace(" ", " ") + m = re.search("(?<=enum )\w+(?= {)", line) if m: enum_name = m.group() @@ -44,25 +59,80 @@ def extract_enums(lines): pass fields = [f.strip() for f in fields] enums[enum_name] = fields + + + #Loop again to find operators + for key in enums: + for line in lines: + if key in line and "operator" in line: + pos = line.find("operator") + op_type = line[pos:pos+9] + enums[key].append(op_type) return enums + def generate_enum_string(enums): data = [] for key, value in enums.items(): - data.append(f'py::enum_(Defs, "{key}")\n') + if key in allow_bitwise_op: + tag=", py::arithmetic()" + else: + tag="" + data.append(f'py::enum_(Defs, "{key}"{tag})\n') + operators = [] for v in value: - data.append(f'\t.value("{v}", slsDetectorDefs::{key}::{v})\n') - data.append('.export_values();\n\n') + if "operator" not in v: + data.append(f'\t.value("{v}", slsDetectorDefs::{key}::{v})\n') + else: + operators.append(v) + data.append('\t.export_values()') + + #Here add the operators + for op in operators: + data.append(f"\n\t.def(\"{op_key[op]}\", py::overload_cast< const slsDetectorDefs::EthernetInterface&, const slsDetectorDefs::EthernetInterface&>(&{op}))") + + + data.append(';\n\n') return ''.join(data) + +def remove_ifdefs(lines): + """Keeps C++ version of the code""" + out = [] + it = iter(lines) + skip = False + for line in it: + + if "#ifdef __cplusplus" in line: + line = next(it) + + if "#else" in line: + skip = True + + if "#endif" in line: + skip = False + + if not skip and "#endif" not in line: + out.append(line) + return out + + with open('../../slsSupportLib/include/sls/sls_detector_defs.h') as f: data = f.read() data = remove_comments(data) data = data.splitlines() +data = remove_ifdefs(data) enums = extract_enums(data) + + s = generate_enum_string(enums) +# print(s) +# for i, line in enumerate(data): +# print(i, line) + + with open('../src/enums_in.cpp') as f: data = f.read() diff --git a/python/slsdet/detector.py b/python/slsdet/detector.py index 3ce05c94c..689c49911 100755 --- a/python/slsdet/detector.py +++ b/python/slsdet/detector.py @@ -2332,6 +2332,18 @@ class Detector(CppDetectorApi): ut.set_using_dict(self.setVetoReference, *args) + @property + @element + def vetostream(self): + return self.getVetoStream() + + @vetostream.setter + def vetostream(self, args): + if not isinstance(args, tuple): + args = (args,) + ut.set_using_dict(self.setVetoStream, *args) + + """ Mythen3 specific """ diff --git a/python/src/detector.cpp b/python/src/detector.cpp index 444248d8b..6ebae6255 100644 --- a/python/src/detector.cpp +++ b/python/src/detector.cpp @@ -1074,6 +1074,16 @@ void init_det(py::module &m) { (void (Detector::*)(const bool, sls::Positions)) & Detector::setVeto, py::arg(), py::arg() = Positions{}) + .def("getVetoStream", + (Result(Detector::*)(sls::Positions) + const) & + Detector::getVetoStream, + py::arg() = Positions{}) + .def("setVetoStream", + (void (Detector::*)(const defs::EthernetInterface, + sls::Positions)) & + Detector::setVetoStream, + py::arg(), py::arg() = Positions{}) .def("getADCConfiguration", (Result(Detector::*)(const int, const int, sls::Positions) const) & diff --git a/python/src/enums.cpp b/python/src/enums.cpp index 92391065d..7e2093224 100644 --- a/python/src/enums.cpp +++ b/python/src/enums.cpp @@ -277,4 +277,20 @@ void init_enums(py::module &m) { .value("TIMING_EXTERNAL", slsDetectorDefs::timingSourceType::TIMING_EXTERNAL) .export_values(); + + py::enum_(Defs, "EthernetInterface", + py::arithmetic()) + .value("NONE", slsDetectorDefs::EthernetInterface::NONE) + .value("I3GBE", slsDetectorDefs::EthernetInterface::I3GBE) + .value("I10GBE", slsDetectorDefs::EthernetInterface::I10GBE) + .value("ALL", slsDetectorDefs::EthernetInterface::ALL) + .export_values() + .def("__or__", + py::overload_cast( + &operator|)) + .def("__and__", + py::overload_cast( + &operator&)); } diff --git a/slsDetectorSoftware/src/Detector.cpp b/slsDetectorSoftware/src/Detector.cpp index 114ac15e3..0106f2f1c 100644 --- a/slsDetectorSoftware/src/Detector.cpp +++ b/slsDetectorSoftware/src/Detector.cpp @@ -1584,13 +1584,13 @@ Result Detector::getVetoStream(Positions pos) const { void Detector::setVetoStream(defs::EthernetInterface interface, Positions pos) { // 3gbe - bool i3gbe = (interface & defs::EthernetInterface::I3GBE); + bool i3gbe = (interface & defs::EthernetInterface::I3GBE) == defs::EthernetInterface::I3GBE; pimpl->Parallel(&Module::setVetoStream, pos, i3gbe); // 10gbe (debugging interface) opens 2nd udp interface in receiver int old_numinterfaces = getNumberofUDPInterfaces_(pos).tsquash( "retrieved inconsistent number of udp interfaces"); - int numinterfaces = (interface & defs::EthernetInterface::I10GBE) ? 2 : 1; + int numinterfaces = ((interface & defs::EthernetInterface::I10GBE) == defs::EthernetInterface::I3GBE) ? 2 : 1; if (numinterfaces != old_numinterfaces) { setNumberofUDPInterfaces_(numinterfaces, pos); } diff --git a/slsSupportLib/include/sls/sls_detector_defs.h b/slsSupportLib/include/sls/sls_detector_defs.h index c6a48a34b..13d7f89e2 100644 --- a/slsSupportLib/include/sls/sls_detector_defs.h +++ b/slsSupportLib/include/sls/sls_detector_defs.h @@ -395,7 +395,7 @@ typedef struct { enum timingSourceType { TIMING_INTERNAL, TIMING_EXTERNAL }; #ifdef __cplusplus - enum class EthernetInterface : int32_t { + enum class EthernetInterface { #else enum EthernetInterface { #endif @@ -497,15 +497,15 @@ typedef struct { #ifdef __cplusplus }; inline slsDetectorDefs::EthernetInterface -operator|(const slsDetectorDefs::EthernetInterface &a, - const slsDetectorDefs::EthernetInterface &b) { +operator|( const slsDetectorDefs::EthernetInterface &a, + const slsDetectorDefs::EthernetInterface &b) { return slsDetectorDefs::EthernetInterface(static_cast(a) | static_cast(b)); }; -inline bool operator&(const slsDetectorDefs::EthernetInterface &a, - const slsDetectorDefs::EthernetInterface &b) { - return (static_cast(a) & static_cast(b)); +inline slsDetectorDefs::EthernetInterface operator&( const slsDetectorDefs::EthernetInterface &a, + const slsDetectorDefs::EthernetInterface &b) { + return slsDetectorDefs::EthernetInterface(static_cast(a) & static_cast(b)); }; #endif @@ -653,3 +653,4 @@ using Positions = const std::vector &; using defs = slsDetectorDefs; } // namespace sls #endif + diff --git a/slsSupportLib/src/ToString.cpp b/slsSupportLib/src/ToString.cpp index ac046d8f1..4db40a60b 100644 --- a/slsSupportLib/src/ToString.cpp +++ b/slsSupportLib/src/ToString.cpp @@ -526,9 +526,9 @@ std::string ToString(const defs::EthernetInterface s) { case defs::EthernetInterface::NONE: return std::string("none"); default: - if (s & defs::EthernetInterface::I3GBE) + if ((s & defs::EthernetInterface::I3GBE)!=defs::EthernetInterface::NONE) os << "3gbe, "; - if (s & defs::EthernetInterface::I10GBE) + if ((s & defs::EthernetInterface::I10GBE)!=defs::EthernetInterface::NONE) os << "10gbe, "; auto rs = os.str(); rs.erase(rs.end() - 2, rs.end()); diff --git a/slsSupportLib/tests/test-Sockets.cpp b/slsSupportLib/tests/test-Sockets.cpp index ef1dc6696..7a114b056 100644 --- a/slsSupportLib/tests/test-Sockets.cpp +++ b/slsSupportLib/tests/test-Sockets.cpp @@ -4,6 +4,7 @@ #include #include #include +#include std::vector server() { std::cout << "starting server\n"; diff --git a/slsSupportLib/tests/test-ToString.cpp b/slsSupportLib/tests/test-ToString.cpp index 46a95f33a..e372f9336 100644 --- a/slsSupportLib/tests/test-ToString.cpp +++ b/slsSupportLib/tests/test-ToString.cpp @@ -1,10 +1,10 @@ #include "catch.hpp" +#include "sls/Pattern.h" #include "sls/TimeHelper.h" #include "sls/ToString.h" -#include "sls/network_utils.h" -#include "sls/Pattern.h" -#include "sls/sls_detector_defs.h" #include "sls/container_utils.h" +#include "sls/network_utils.h" +#include "sls/sls_detector_defs.h" #include #include #include @@ -302,25 +302,32 @@ TEST_CASE("Streaming of slsDetectorDefs::scanParameters") { } } -TEST_CASE("Printing c style arrays of int"){ +TEST_CASE("Printing c style arrays of int") { int arr[]{3, 5}; REQUIRE(ToString(arr) == "[3, 5]"); } -TEST_CASE("Printing c style arrays of uint8"){ - uint8_t arr[]{1,2,3,4,5}; +TEST_CASE("Printing c style arrays of uint8") { + uint8_t arr[]{1, 2, 3, 4, 5}; REQUIRE(ToString(arr) == "[1, 2, 3, 4, 5]"); } -TEST_CASE("Printing c style arrays of double"){ +TEST_CASE("Printing c style arrays of double") { double arr[]{3.4, 5.3, 6.2}; REQUIRE(ToString(arr) == "[3.4, 5.3, 6.2]"); } -TEST_CASE("Print a member of patternParameters"){ +TEST_CASE("Print a member of patternParameters") { auto pat = sls::make_unique(); pat->limits[0] = 4; pat->limits[1] = 100; REQUIRE(ToString(pat->limits) == "[4, 100]"); +} +TEST_CASE("EthernetInterface") { + REQUIRE(ToString(sls::defs::EthernetInterface::NONE) == "none"); + REQUIRE(ToString(sls::defs::EthernetInterface::I10GBE) == "10gbe"); + REQUIRE(ToString(sls::defs::EthernetInterface::I3GBE) == "3gbe"); + REQUIRE(ToString(sls::defs::EthernetInterface::I3GBE | + sls::defs::EthernetInterface::I10GBE) == "3gbe, 10gbe"); } \ No newline at end of file