From 041e7feeb7f30b178fddd68e1df339f4dece8d96 Mon Sep 17 00:00:00 2001 From: Miko <110693261+mikomikotaishi@users.noreply.github.com> Date: Fri, 19 Sep 2025 13:46:36 -0400 Subject: [PATCH] Add support for modules (#4999) * Add support for modules * Use "" for inclusion * Fix missing includes on Poco.Data module * Add PDF and SevenZip modules, and match modules to build macros * Add CI test * Add missing link libraries in CMake * Add remaining libraries DNSSD, CppParser and CppUnit. Changed some static declarations to inline to export * We also need to forward the ENABLE_NETSSL_* macros * Update CMakeLists files * Add samples as requested, with DateTime and URI test for example * Fix POCO_MODULES_INSTALL macro * chore(CMake): Combine install macro for libraries and C++ modules into one macro. * Apply testsuite changes and address include directories concerns * Restore accidentally deleted build files * Mistakenly added a file generated by CMake, removed. --------- Co-authored-by: Matej Kenda --- .github/workflows/ci.yml | 24 + .gitignore | 1 + CMakeLists.txt | 25 +- Data/include/Poco/Data/AbstractBinder.h | 2 +- Data/include/Poco/Data/Constants.h | 2 +- Net/include/Poco/Net/MultiSocketPoller.h | 2 + Net/include/Poco/Net/SocketAddress.h | 12 - Net/include/Poco/Net/UDPSocketReader.h | 1 + Net/src/SocketAddress.cpp | 14 + README.md | 1 + build/exe/vswhere.exe | Bin 457840 -> 0 bytes cmake/PocoMacros.cmake | 145 ++-- modules/CMakeLists.txt | 273 +++++++ modules/CppUnit.cppm | 41 + modules/Poco.cppm | 67 ++ modules/Poco/ActiveRecord.cppm | 37 + modules/Poco/CppParser.cppm | 65 ++ modules/Poco/Crypto.cppm | 84 ++ modules/Poco/DNSSD.cppm | 53 ++ modules/Poco/DNSSD/Avahi.cppm | 35 + modules/Poco/DNSSD/Bonjour.cppm | 37 + modules/Poco/Data.cppm | 214 +++++ modules/Poco/Data/MySQL.cppm | 46 ++ modules/Poco/Data/ODBC.cppm | 116 +++ modules/Poco/Data/PostgreSQL.cppm | 59 ++ modules/Poco/Data/SQLite.cppm | 65 ++ modules/Poco/Dynamic.cppm | 64 ++ modules/Poco/Foundation.cppm | 872 +++++++++++++++++++++ modules/Poco/JSON.cppm | 48 ++ modules/Poco/JWT.cppm | 37 + modules/Poco/MongoDB.cppm | 82 ++ modules/Poco/Net.cppm | 481 ++++++++++++ modules/Poco/PDF.cppm | 53 ++ modules/Poco/Prometheus.cppm | 68 ++ modules/Poco/Redis.cppm | 50 ++ modules/Poco/SevenZip.cppm | 28 + modules/Poco/Util.cppm | 103 +++ modules/Poco/XML.cppm | 188 +++++ modules/Poco/Zip.cppm | 78 ++ modules/cmake/PocoModulesConfig.cmake | 102 +++ modules/samples/CMakeLists.txt | 3 + modules/samples/src/ModuleTest.cpp | 49 ++ modules/testsuite/CMakeLists.txt | 31 + modules/testsuite/Makefile | 15 + modules/testsuite/src/Driver.cpp | 17 + modules/testsuite/src/ModulesTest.cpp | 61 ++ modules/testsuite/src/ModulesTest.h | 33 + modules/testsuite/src/ModulesTestSuite.cpp | 22 + modules/testsuite/src/ModulesTestSuite.h | 27 + modules/testsuite/src/WinDriver.cpp | 28 + 50 files changed, 3880 insertions(+), 81 deletions(-) delete mode 100644 build/exe/vswhere.exe create mode 100644 modules/CMakeLists.txt create mode 100644 modules/CppUnit.cppm create mode 100644 modules/Poco.cppm create mode 100644 modules/Poco/ActiveRecord.cppm create mode 100644 modules/Poco/CppParser.cppm create mode 100644 modules/Poco/Crypto.cppm create mode 100644 modules/Poco/DNSSD.cppm create mode 100644 modules/Poco/DNSSD/Avahi.cppm create mode 100644 modules/Poco/DNSSD/Bonjour.cppm create mode 100644 modules/Poco/Data.cppm create mode 100644 modules/Poco/Data/MySQL.cppm create mode 100644 modules/Poco/Data/ODBC.cppm create mode 100644 modules/Poco/Data/PostgreSQL.cppm create mode 100644 modules/Poco/Data/SQLite.cppm create mode 100644 modules/Poco/Dynamic.cppm create mode 100644 modules/Poco/Foundation.cppm create mode 100644 modules/Poco/JSON.cppm create mode 100644 modules/Poco/JWT.cppm create mode 100644 modules/Poco/MongoDB.cppm create mode 100644 modules/Poco/Net.cppm create mode 100644 modules/Poco/PDF.cppm create mode 100644 modules/Poco/Prometheus.cppm create mode 100644 modules/Poco/Redis.cppm create mode 100644 modules/Poco/SevenZip.cppm create mode 100644 modules/Poco/Util.cppm create mode 100644 modules/Poco/XML.cppm create mode 100644 modules/Poco/Zip.cppm create mode 100644 modules/cmake/PocoModulesConfig.cmake create mode 100644 modules/samples/CMakeLists.txt create mode 100644 modules/samples/src/ModuleTest.cpp create mode 100644 modules/testsuite/CMakeLists.txt create mode 100644 modules/testsuite/Makefile create mode 100644 modules/testsuite/src/Driver.cpp create mode 100644 modules/testsuite/src/ModulesTest.cpp create mode 100644 modules/testsuite/src/ModulesTest.h create mode 100644 modules/testsuite/src/ModulesTestSuite.cpp create mode 100644 modules/testsuite/src/ModulesTestSuite.h create mode 100644 modules/testsuite/src/WinDriver.cpp diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8f0d21a0b..38ab16afd 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,6 +13,30 @@ concurrency: cancel-in-progress: true jobs: + linux-clang-20-cmake-modules: + runs-on: ubuntu-24.04 + steps: + - uses: actions/checkout@v4 + - name: Install Clang 20 + run: | + sudo apt -y update + sudo apt -y install wget lsb-release software-properties-common gnupg + wget https://apt.llvm.org/llvm.sh + chmod +x llvm.sh + sudo ./llvm.sh 20 + sudo apt -y install clang-20 libc++-20-dev libc++abi-20-dev + sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-20 100 + sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-20 100 + - name: Install dependencies + run: sudo apt -y install cmake ninja-build + - name: Configure with Clang 20 and modules + run: | + export CC=clang-20 + export CXX=clang++-20 + cmake -S . -B build -G Ninja -DPOCO_BUILD_MODULES=ON + - name: Build + run: cmake --build build + android-arm64-v8a-ndk-latest-cmake: runs-on: ubuntu-22.04 steps: diff --git a/.gitignore b/.gitignore index 3a5ed86f8..241afe6d9 100644 --- a/.gitignore +++ b/.gitignore @@ -60,6 +60,7 @@ CPackConfig.cmake CPackSourceConfig.cmake cmake_* cmake-build-* +*Targets_installed.cmake # Packages # ############ diff --git a/CMakeLists.txt b/CMakeLists.txt index d91128ee3..74da1fff5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -202,8 +202,18 @@ option(ENABLE_POCODOC "Enable Poco Documentation Generator" OFF) option(ENABLE_PDF "Enable PDF" OFF) option(ENABLE_TRACE "Enable stack tracing" OFF) -option(ENABLE_CPPUNIT - "Set to OFF|ON (default is OFF) to enable CppUnit library" OFF) + +if(POCO_ENABLE_CPP20) + option(ENABLE_MODULES "Build Poco.* C++ modules" OFF) +endif() + +if(ENABLE_ACTIVERECORD AND NOT ENABLE_DATA) + set(ENABLE_DATA ON CACHE BOOL "Enable Data" FORCE) +endif() + +if(ENABLE_ACTIVERECORD AND NOT ENABLE_XML) + set(ENABLE_XML ON CACHE BOOL "Enable XML" FORCE) +endif() option(ENABLE_CPPUNIT "Set to OFF|ON (default is OFF) to enable CppUnit library" OFF) @@ -577,6 +587,10 @@ if(ENABLE_TRACE) list(APPEND Poco_COMPONENTS "Trace") endif() +if(ENABLE_MODULES AND CMAKE_VERSION VERSION_GREATER_EQUAL 3.28) + add_subdirectory(modules) +endif() + ############################################################# # Uninstall stuff see: http://www.vtk.org/Wiki/CMake_FAQ @@ -645,6 +659,13 @@ message(STATUS "[cmake] Installation target path: ${CMAKE_INSTALL_PREFIX}") if(CMAKE_TOOLCHAIN_FILE) message(STATUS "[cmake] Use toolchain file: ${CMAKE_TOOLCHAIN_FILE}") endif() +if (ENABLE_MODULES) + if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.28) + message(STATUS "Building Poco.* C++ modules") + else() + message(WARNING "Skipping Poco.* C++ modules (requires CMake 3.28+, found ${CMAKE_VERSION})") + endif() +endif() message(STATUS "[cmake] Build for OS type: ${CMAKE_SYSTEM_NAME}") message(STATUS "[cmake] Build for OS version: ${CMAKE_SYSTEM_VERSION}") message(STATUS "[cmake] Build for CPU type: ${CMAKE_SYSTEM_PROCESSOR}") diff --git a/Data/include/Poco/Data/AbstractBinder.h b/Data/include/Poco/Data/AbstractBinder.h index 39f2a62c9..b94a6551c 100644 --- a/Data/include/Poco/Data/AbstractBinder.h +++ b/Data/include/Poco/Data/AbstractBinder.h @@ -45,7 +45,7 @@ class Transcoder; namespace Keywords { -static const NullData null = std::nullopt; +inline const NullData null = std::nullopt; } // namespace Keywords diff --git a/Data/include/Poco/Data/Constants.h b/Data/include/Poco/Data/Constants.h index 574c09bb4..2426e7085 100644 --- a/Data/include/Poco/Data/Constants.h +++ b/Data/include/Poco/Data/Constants.h @@ -27,7 +27,7 @@ namespace Poco { namespace Data { -static const std::size_t POCO_DATA_INVALID_ROW = std::numeric_limits::max(); +inline const std::size_t POCO_DATA_INVALID_ROW = std::numeric_limits::max(); } } // namespace Poco::Data diff --git a/Net/include/Poco/Net/MultiSocketPoller.h b/Net/include/Poco/Net/MultiSocketPoller.h index 807a2e752..7a884cc1a 100644 --- a/Net/include/Poco/Net/MultiSocketPoller.h +++ b/Net/include/Poco/Net/MultiSocketPoller.h @@ -19,8 +19,10 @@ #include "Poco/Net/Net.h" +#include "Poco/Net/PollSet.h" #include "Poco/Net/Socket.h" #include "Poco/Net/UDPHandler.h" +#include "Poco/Net/UDPSocketReader.h" namespace Poco { diff --git a/Net/include/Poco/Net/SocketAddress.h b/Net/include/Poco/Net/SocketAddress.h index 8792f539f..e45306741 100644 --- a/Net/include/Poco/Net/SocketAddress.h +++ b/Net/include/Poco/Net/SocketAddress.h @@ -265,23 +265,11 @@ inline void SocketAddress::newIPv4(const sockaddr_in* sockAddr) } -inline void SocketAddress::newIPv4(const IPAddress& hostAddress, Poco::UInt16 portNumber) -{ - _pImpl = new Poco::Net::Impl::IPv4SocketAddressImpl(hostAddress.addr(), htons(portNumber)); -} - - #if defined(POCO_HAVE_IPv6) inline void SocketAddress::newIPv6(const sockaddr_in6* sockAddr) { _pImpl = new Poco::Net::Impl::IPv6SocketAddressImpl(sockAddr); } - - -inline void SocketAddress::newIPv6(const IPAddress& hostAddress, Poco::UInt16 portNumber) -{ - _pImpl = new Poco::Net::Impl::IPv6SocketAddressImpl(hostAddress.addr(), htons(portNumber), hostAddress.scope()); -} #endif // POCO_HAVE_IPv6 diff --git a/Net/include/Poco/Net/UDPSocketReader.h b/Net/include/Poco/Net/UDPSocketReader.h index b6af9e0bd..95301c75f 100644 --- a/Net/include/Poco/Net/UDPSocketReader.h +++ b/Net/include/Poco/Net/UDPSocketReader.h @@ -20,6 +20,7 @@ #include "Poco/Net/Net.h" #include "Poco/Net/DatagramSocket.h" +#include "Poco/Net/UDPServerParams.h" namespace Poco { diff --git a/Net/src/SocketAddress.cpp b/Net/src/SocketAddress.cpp index 3313e483b..e5e2dd5fb 100644 --- a/Net/src/SocketAddress.cpp +++ b/Net/src/SocketAddress.cpp @@ -433,6 +433,20 @@ Poco::UInt16 SocketAddress::resolveService(const std::string& service) } +void SocketAddress::newIPv4(const IPAddress& hostAddress, Poco::UInt16 portNumber) +{ + _pImpl = new Poco::Net::Impl::IPv4SocketAddressImpl(hostAddress.addr(), htons(portNumber)); +} + + +#if defined(POCO_HAVE_IPv6) +void SocketAddress::newIPv6(const IPAddress& hostAddress, Poco::UInt16 portNumber) +{ + _pImpl = new Poco::Net::Impl::IPv6SocketAddressImpl(hostAddress.addr(), htons(portNumber), hostAddress.scope()); +} +#endif // POCO_HAVE_IPv6 + + Poco::BinaryWriter& operator << (Poco::BinaryWriter& writer, const Poco::Net::SocketAddress& value) { writer << value.host(); diff --git a/README.md b/README.md index 58ea761f8..f4283a837 100644 --- a/README.md +++ b/README.md @@ -28,6 +28,7 @@ and [Getting Started](https://pocoproject.org/docs/00200-GettingStarted.html) do - A C++17 compiler (Visual C++ 2017, GCC 8.0, Clang 5, or newer) - OpenSSL headers and libraries (optional, but recommended) - MySQL, PostgreSQL and ODBC client libraries (optional) +- C++20 and CMake 3.28 or later (for C++ modules) Most Unix/Linux systems already have OpenSSL preinstalled. If your system does not have OpenSSL, please get it from or diff --git a/build/exe/vswhere.exe b/build/exe/vswhere.exe deleted file mode 100644 index cd95aa9580e8ffd94b60622e4ea2e433e27ec624..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 457840 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

*l(~9qj{>0bKGf#Ag4FE`6U#%$nf*`~ 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 z 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
Ul$E_x~Ek<3q;BXier~~htmd~ii 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%0D|h;Dv;tp9@w5zigRvX+bK_5QK) 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

_I&V($a9o$&$`uawY!Cc2(=C+a2WqNk zxcbqJ<)<0NjS=h}c|D}GX@+ajgNP~pwB&nU6PGWwmmu6ia^Pyv+>PKs z&GDse_X#xShtU0e*6Fo678fV+Kiws4iJP0h!IL=hNKy zFTpS6U2+Dv`anMmIs~X)f!dFZp_{LI2^cYo&vkrCIMLyG!yj#Nk|*!=*5E1-Zb1oq zc|FC$v3Q0n{Q+9bimxsGa`o&};wlt=Nm^b&Gu(#y;0ZlB*Je0jK|?S1STw^m70GFv z%i7WtP;|u|;LjQc^VZ(%Q>D&Y{LC2B-0hkv)wt4IH1CUm=0lfDzraoA!N|0J&cQtw zK0^Kg1aV_)CcbCV#TDWf!?lfL4e??`XvSE|wFc_0TGpM9th)r)zQ>Vj!)N#~MkyYr z?26du*hlvv-rYo1;_jxb%Hs4}f-V{sDDF&hl+L~+I{q~tgSq&&S<8Gp+0_k$9cN(q z3{_n8EWfU=pDmf+$@F89gZ@Vg)QIHEUy?E@bn=C-*t-al^XDmX+lO5O`eoQyc| zbMR)|U&D#WG(60_fVVK9e07(S1HBVgPiuDJt5D)#>bUET_xP$O4VSCjl2Mg7lvNzV zN*cXL2h+&h8CIU&2VPIBzIf9Eersb$Ae@ z6g&2wu00u&0JRlZeku)pT(OX7xL&gEm8>6-=g)NTv;vPit#wzX<$4?kc6aU8%EM=Q zXnW@He_SR$D_TLILHX6^UKC)4PmsR}xd2v!nlpUtHN!J}?yb!5No->l5r5WX_R>tA99pno*Dd(<08*~a@Yz+>b`-w>wz%J@VK|0fx{WsY!iKXxNifcx z%;`1>2t;bTZWszjTd>_gHn5;s2-RXib-B%;m1Fn|A5O3L`QUA;>+2D`UW_*HT001K z-0O*P%o|6e9kb0d@w&<*AGW% zzOKW6q2EV*G_x$crzCdAW|!+Cpj*Ub@kHnkL;zNdJq{m?-h;5l&G$LNdU$ zRD@x)zY%?=C$7p*p3HEAx+jL9{rCkp;aA05&1q;~b*VS55|@0`8Vg;0y)GB_)19$m z>hJEF^N4%uufhwZa#?nV_@>%7VqreQ>5C29?JaCii1$t#dd``xu0=;O?hV?qiSF@r zC)Vg&vcwlpMxI8v+#_%UbaoOJPfNUnb}U^wW6_OMDO_Ck#o1g}*TMB}i-sVnhKblL z={MPZCQrp@A>`R4RuQ4Wf8qGFcUkF@6vqU!oeybdr@ zybe%!o$J@1v69%c+ER~}+h?D0@E}GTzXX>B@9g5^4V(kK_bI1OBa4+Njr!7Qb-3|? zFDZaue&Blwe=rBrcp$!ODN|+4W|YIW!j5hUuG2W`#baj##_Ve=%=pL)i}T+RFdWHF7b)Nib6SRB?hU20 z>+!{YM&gqvh)0h;>gtIR1P=#WBND&bd+H)4e!8c+Hq%|Yugp@-g}8Vd?(=Wtp{y8| zFf?MCXXp4FPeG6nHnW$VrmHUFCb(vab3)VAZJ14$159>n{L4hv&6!CU{4V=%$71BU zZJGQr#ZCmilhe_KpP{)d{kTW-2QEie?tVtZHebdmQ1d1HY?oYv%5@NK6uC#N%eRv8 zvcE4Bmp0+#IYh2=N}Ag``?%hLVi&$*c)4Xvx>7(4L@g&&IG@5Sg$HY=dj(?T_Y8Dl ziK6VsFy0k&2R|*qNywGqS(&ortf);UTc%6MdL=4izbIA`9|2 z3-?USS~E{VGbcFz1caRx{-BU;!seO3A^hb^Y5%w2gEdJPAX5!K=#g^CQWs|7px-lm z{Ldr)W3(Z7k!7;@S0W=-ppQWNGJLwBJUI(uMAS+byq%hm%vqmZ)hLC%RW!RWmUqwQ zEc@dU@>*z>^*~O&z-2*;g53ql8cOb>q@&&GHUY3|_j@XereP99{mFdRXAZ3F+Q}Dj z@3D3pP>WqVDKg_#?;S*IQM;qfmsEMki@Gt?XLT=1drvr&#ekO z<0Fl8BtL#nEsa;D+ayegQKq7DYO7Aq3iLut&-TvtYPi$2?F{rz!!uMboGhRI`m4J0 zd!iS0oqqcG)YG-D9zqGeN!4)U`Q0X`N(IOFw+mgzF)>W9(ujgm?^6|2zt$k^%SL;I&f7m)il~e{rd}ecrgD!m`-(r9ErObfX zF-m5_t|%q_8P-e!h6pSk!~?NgVwywu;!8hG>CZ80wZ+93(C~*r&#br>!&S1!6XSCt z>y51Ssww^}#b=yhXJv45yv?;kQT& z4V62PzX`|;usq_uD&p_LI5Wb-*}F7yWb3MBVF@wVi*()55mRZ#h}Zz^&EUev68K)D zyDaILjva?z$4X~VDOx&rA2@LQ1&@QG1HFJvrMrJmM|gGVN5s~L8^*#t3n5%pgXge% z_~hXq4%c?v?>zVWulS&HdY~UT&?|obuJvJC=Lql>df9v;z+2FMVlX1EPYm=6Jqec= zT;9K*_`SB|gi?9{&t#4>ojJRFTWb5@L0K!8@hJ{$@*#~EA$-d~!F4SabRl#v=IsPj z4L+5M-JDj&cy{fswzIoS9Z1=a)pXAiTX3v?+nvm~tDURFqiL)8Q z$yuL4o`L(Z_v2SZ6}-mW=!xBHlD_A4e5Q?X7z2cu3G?mo%HzoHSBnFEze4q~B$x^G zj*(xg_+H+P$9n~qdIv811@&CKtO{*@X-SR3yy6B!!yqkIhS$pQ6IjrZ;dgvw`|?s} z#qn8z0i^xL7LN31Xz!x=+;@?UXo**0q0c+hyzy4<8Ly5QsdG=9^~pb}_*{2#2j*R+ z@25D@`m8SakI*B(`sDd!`22h%!^eTS)$wtL&#?o2tDOPB{e7!_{$162AFlPp)Ib0~ z*40om6%oh#)*k*kv@*D=Z}qsoAK$GrMeo8`#$<7TJ|eX8_kBzXzuWeXPs9PAXsB_R z#>zlv15DZleHlLCX=9trWpN{#e4?tHKSDtTeh%SsUreq)SHd1evlmAcxH5kRi8uHC z)9I(hn(+-J=s3prG8%n$9&5d;;orzS)?fQCpM4E;-|xrqFl$YW_eJ>jd4#od@bm;< z2DyNQuKD^AUkqyOrIqINCByKc|I!-%Qgu)4fZqKgBf{?O@Daa1hf_uo%G{%RSlULrEtHy3mL>>A-@t+c|Ix`-|#?bjB3Jvg}r@zJ&=L@89q)dTby8R03NHt z<|P1cFZm!%zP^m#U8!_*!*-%|b;E}~J1bjPBcTyp8Xgr{sN(q#Umim3V_oP~`ipDr z!oM!>YrFPay#I!s=`K$;Of71Gh$_A!O8aTf{g?6cH2A5L>G&1x($DZ6%X6iF;d}@a z4EIpZM*K1|m;RhIN{4^IuQf#MD(Hh9GET4juqfd@1ALAk<{Zo)gWWq09+zCexWvWn zZLYJ})(eiFe2I#OZaYOtM2w%a9i9yY;@4xxMl5NvM`QiYgDPiZ!-n%?{8~Fh&zt=` zoFRCK$)Ar2ZjM;eT-g8oXg{;F15yeCj|YA!W^@3qtCV_HklBGN-Pj21-wm$T&R@yl z{IPU*Lj%fT@?@UP;o%OmIioZQR~gVu@LUwF(z|qciFw3zj&R&YI)_Ir`yJ!T7I~HW zmEitAEb3aa%WF-~@Ee_X;3GL**WBe1KF7m3tYlX!JY-mY(pevRq+wu0mEE7SvR}#h zC_hhU`w`&|Z!^^Wq*;Vq{4Rc8$Be$w9=~ghxThMqeAo)FgW$2BR;#D5 z@m{^85uYbrHSO~1czo8|XF1=GDINY4-b1L0h-oaqZ`-npZ$YT2Kz~syt?^6&m5f?j zJ)7THm$mGzG5IX#PFt_(BXHvkKE}^y1vidsrs3_5;P|G9_(q?V{6#@*q#bBCs5&#A z`Z%vgwfe3Z;}__09v3^#*Yv4@ZKck0_$o_(K_UcRK)B$pZmNpvOv-wd|mLxub#+f8|O*9 zVS^GqhA!ByRD3o{JODuBVyD7mtI#7Orh6{-!LP-!VR^SI9ply7&!e<$>s>gf0gq^I z-sr}ms88&_r>+UW;;*MuR%wz)_+1{(&irWqE;gbw_*_$)>nlsDJ?=&+w0gs1O_f_q zymv`5zWJAoZ~n!4?o-&m|0yoNHRH1VGKqZ+QY z8q8de{PClcu8Tq@b3L-s;GbEc2e*Rg%$b?K2o`Mnxy~soqh57p+Fv-V+N8eb`0KK| zIg=ij+MG_TSDOUZs4imJ9`cvYqqB+5uS9H}I!6TI5%*>F4JTuT^9AAL3o+`(me6%@ zVs^&UNbk}$c;Vu5XtgWxGZgyxX1K<~RbloWqo`%-MOe_N<{}N9e|!a41_hNuqx{_|CyA83)wxU&g}2a{vJ0#~9EO%KY6+p1_$GC_ zk%bBEBa4+R9fY={>S?>d{)1rI0v1_{Pmp;7nNNRjC=b@tQa6*6Orkt1z*H7ru9iY0 z>!}2oc|(X<$!?t;P!?03;PO7oXI@(S7{3L2Zm0AfCb39JA5`OobiG=;%wX3ZuzI_b zY(*iZ8-!wnkeB)jn9Jg8R9_)np?YbkXxMCHe1+Pip-aO$pxd5RNaV#DJ@Ze(RT0KS z>b^r5e)*!M8XGT_#cx)hgYa$<(Mqr1#*0j44I|h#mTAc>)NldNo!llQ7v@fGFq7NN zgviLeRcBO%t4XdMIW*hb(^93?T3+7t2yGWr@^)aTf7OY=dF9~L*@HCm%k@*bAOufq3K9)18iBbCyRTl59KCwV{g^zMzF&btaQ5T`*lPMDG z50Ujkk-wBQKIinXB3+C?=M{-;%iB2>c5yKoZjjT-RY;s z>CRqir0xtZ450IIjJcnDe%FC- zKlnJBX2TecWm_LIsAQJz2CM8ylPP4T(0T~D^)-R%HbyxZwNU6gs>Y$uW-7~Y`su88 z1tFRy#8)%3w-~zf8a#>P@cP>)dMXWYRcxcG!AvE-qNFN7^`6VRsa4PC5i8Z7fNlfW z;@@`5ze4#&%KwBjV`lBl>lCV2PY7JDz9E!sRbMhF(e21_>q(=YpzhG~g3wc^uAf6a zr_`ka52`0N)8DA(!Jir23nPR_HlD>c;(CQEA>v)>>DEVHL3%E z?o6>Z>kjIL@&#NK6%^_rgc{X9XEX6Sb#yLqt9nY{9<>IKOx#LXG8^4W9-@*)Dmi+F zB~z`o6+-pu(5Ix5$ArID4HG##s!o5pMcEp@#sqy6-1;J^Z)gDYEf@M4)uPv0_{X0D z^Nnt1KQb>S^9+r7f|0ob%)flBXZL%!D$2=xv&P&J*>z`&WwXc4{2rN)lKJA-P@p$+ z_SmNxrSw458AP$JcF!{C;cTX!m*)oKx6t{&3DKhnatAzZg}JWH$4ok$K7F*A{EU$V4L zsU=2cP6*@4QcjjK!BVRxi*zd0{TrG7PIbp_;z4zX@NZGgB7VL4-f4uFC9)Ksd9THU zHN05_#lP&+v-&+;6-SxG%_0deHCI$fomvPLZqvD*+UXX0lR`spfY5KJX?mqPp6Ovd zRhiWyv}UnPY`I%*5#_9u`?rvDsZS+Qu2FqdV6EE9m}n&u9qSezMd8g9E*8R#YKjnY zsn(aMq*mQ~swHu;zVF}`Rw#Um!lO0eKp}ieU1tDO$}3$cQ@`wi-XTEgdLaOW}ASyjgw7$jk-h_j~o+o`$Q!uQ!-Y!aA2> z{p!N{b&L89Hg;IQBEr3Xbz%LwQ$660@WgFXv2k(zrFG)h+;MoLRc>lrKbOU?QXg?g znA}2NX+jI#ab~yBhfFD%5p>LegE&dUu^Qe9)JsDj7+N!DNzB=plPJS7zAm6%Cj_>r zos9wc?|(e37i4Cb0f+!cg6umDVCk?qlyG zla)++!NhT61NG_iXE~VXl4TEBo;B(@il}HtH8EGW>MET@dgXaQ%{U5pY7>NbqRg8DX=16R?$>L(UM zRyfA5C-*igI(8g$@JP4x;V{P!dONb=7BKTG>&qlql-Uv{x-F2MCYTow6bzF9Drs~3$&3|qjm$Ibj6 znKzO7Vl6e-sx@SeIcO-}gV?cGs}%@uDc%jxa<5y9gIcPo}eGvTAoQN{nC^jv1oZN}qDeuP2jeEyu`&#VtZyJ>`$3lV+MH@&VfH=*i)=A(lR28q&0mmtv-&ZZ%i=ev zz9)#M)c1|Tob>ObNIpgOLPTW8OMS%1#mbsRuC3&Hnp{^+540*3BFI6dI#Z-rsZKWP zV8;)jj#}!tTNqcX4mPrIW&PWSdQKYPs_^Rv=D~uwT=fuoH>+cgGbiQhFDb;$>TSY* zO8pvscgb=3D5nZDRWy9goE57d2$8kwJ7ksXxL4fHlB!ORWY>UK=a>2Y! z{l_VtUea*S73^m)EOpLk;<7?+$ls8A>gK211LST8xG7&!}WZB?+r))ZnYFIs3kz z1s7Zu6=V(;*3=rTsf9I1)t_byYwFaZVFqg|V9i#ymS?G@o?5=;nd?;}7suXmYPrJ9 zT*?I844F5sA;ZEfpJ|j4`KL@YWtKn&@1=0j;N=>QU`_{DrOS#)zd{FV;{1Eikxv~X zprfn|Tdd1!dze>N=1u3Y321y}iF6KVaZWRi7hZ^D{-H@WglDO9D|LR$BUimPINGih zOdP?Mkg17Gm1M%o9~tv9tfQ15x>mx<#b5Q}sjwEVB!D6D!qoKzBmyQSU=UX7~*X zS5x>L&fiMQuuj0y!Z;WvoHX|xN^3roT5izAfsEy6b*oFII?oWOd!Fj_%+-NutYBjK zjUtnoOvPa0+J7nyEi2+UA8XVvUI(srdAs$uqUZ*S#!$43vxPbi=9a~;RUC0q0V1$Tl58)ox_?EOaXrP}eTaP9X-60G1(5IKYw*25zC`k=IBq3h zqw6`1?{6Iv6EX6O)9FTaL4hITY+bXd$jUO>3`MM&Y2f9d%hS_{Yt zQI1(rZvA0Y5=15U2qlebuZIl70Xw!oS&D~%B}uSUsLO@kM)j9<238jN4{w8YJ6S`( z%DQv8zDF3_0tW3vcn0jYgCos*m@xNo0ObV@@(Mvp0=$Gl!CSIhhLt^IA0+%v`5Br^=em(a<7rt=iG3Y!#F> zZP(5G4z7w?w%>t5S&cdrLhfuc<=t-P9c13jHgN$*uIzDd6fwnG^{*)gA+A*(a0@M` zkb^?|AjIW|(+*}Xs{+)|An#6$E0O8sP8bgE$3+rNYWRbOY9mW1Sr(I}04&*f8^6gl z6k*0LOumlf>qWkaTEZ8MPy5K?dJ8Oj!odSQw1?Gw5BYZ93ce4>hq?Qpt4QO+>v1iQOKWgMQLC0u zHqQU+p&%U0GRdJ-wP_?&*{KRo- z&lVV}h3)#oH=$?)3#yftV54g%!kEWvDC!~<>6TEzy;Pt?KtUCj9P-J;J(>cYj}}iS zpWkiZdmMaaWjsVxCt$E-`+g(=D1*X8P=$IQg7gNY?*+O-hb$*AYV%~(Oc2^Q%BdHf z)V5q5E3}EAA4Je5b+}Pmf}H90yrFA*53Y(>YP*Q@R4!59gq)tbI1hV_EMBab6M|)x z`t>Af`*EPosvDZ+Ry~(;mCW|Dl#{c1BCV3nal*iIbuK$+%zDvS}_j%@eoM%?5d)*N@&(tKoqQq84(D57`?h?=nciuL=aA(6+Q5%L55QoWno8SNx z#VFG#M6KZ2t}$u=qY~LJvkg&el4RAj7uuVl;_~a@OJ==9U4!py#LA<}W8|AfD|#CE z#8LE4MitSD%RDsJt>B#V45O0Rxa$$c^To$8#4*pWqZ8A=TKFr~&*EFkU_9rx43YE& zxMop_CzE~}O5|)b6JgqHWX2Oyc3_t)x+O5!9XO;V@Hz%!NN~A&YJs|~oWy>64ascg zs2C<}4OBbQ#xg!0SI^ko&SP|#E6H+-EC&Qjxw;fAESExGENNL<<%|2h~dx4TZ+ex7W@5KAFud zv`ak9y=vI!-k}P@E!$j9uq!E3&3<IQXjSizN3t<%4ddEcjBDI$ zsGAXmacvgeQG&fvU5hX_%H_J4dt6&9#x*Ntgg*DUwpNU5Q{55nac!*_*TUTq?s09c z7}sucN4UqewO=u9FGkRDd0b18t>F%hevnTx$LPCFqn*_GxOby%XAbn9N7A zYHUlXh^LW@-OM&JuV<0)FqzCdjm(wIzneLR%#~zbC7A2gQLxZmj%z$z*Pypp0ID>`EgU6%d7}rB_GY#He1Q z5tWXp9VR>uQO#(cJ1R5bx=7a`hP6fxpNWNQUz=$BfAmBQK1t!|tlcUt>BlH#_l{ah z?SquMbPGhA=&hiVWGeCc1g@ZBxc*vt0g2J|vK3)rbXiIe_V4@Pdh#ilvXidK2*WY; z|Nr;@l@bV=*j5Px@$b--w#vGxZI$Jqd*j+FYe8E;J3$9QCqRv$OCZ1awn{ztM*_!# zW`P`_<)9Zp6`%v4I?y@L2jIj9lIs`feQWDxKT|s?7!$9Lfsh~xm z`$3O_%0b&fyFe#E=Rtmx+bThzk)R}y4YUgM6lgoB8gv5m9jF=90rvI;4F^pG%>nTb zw`7ZPzqZ&Pgo`W1xQ$$lm|}bmw3zXokthC*NBJg$hJyH)jqt^wyFlwSp7=+iL|o6c zQOb&LX5~fDMoXQ6P{Ua6X%5dhUQIjbRT9Ni*#2*ff z6zS3wn`NG*Xs*R(%d-WE|L3OVS*~^6cFV~Thm1}{4xu&e# zf)s03x=C_p<<2u%td<;0uEUg@l4BWsExnF~`Tt|BnJKoEG>64zO0%Ze?V8SO+iS6> zrTmW-OJ=v6PH|?6`k%}D7 z|4-U-vg|o2jq$xf zuc{0U$d-~j&w}QJO1Q_^+Nk`R?NbQ+r~Dd}yQ|qGqz0Mn&a_NZirsW~YDmg#rkayy zcbHH`dFiNq`?c!bp6@Ofo5fTJ;jCP{Gb1A_EsM=P$C8t0TWE6Rp)2GTSZofH}-x++5NI5spVM2dQ zv!tU@q%MS7*$dH&oz@haq5Nd&U8}vM<>lmCEk#+5g<2uD1TZa>UW&tE$;o#h3DN#c zDf7_nQA{al&{wB}B-1RyoD^CXVz)RkB zg=!NedkquP@|;%PRu;ZJ-;$Pfdfz;FLY_T4jPhWVZ~wc6+lg#IRSyNJCzf z4EUQbL@VjQfQ!+J1sDWe05k*f9S9{6coWbH>n3(y4I2FwQT1kMB2 z0OtdnfE=?uFGVYSi6H=(0~`e87dzsBv@0Em`BNzZb^)#f@-tqWfc=46fkD7ZU@ov0 zms~GW93?qT~(uR@%Tn)?w@_V91z%{^C z!0y2HzyRQOU~gbG&<3mpE(bOPR{_0nYn-%)@XX%hnG_8~OujXDo05FbK%D5eBpaCjnW{ zQ9$;&XdwICXkY0NJ+UfNYbYz_q}X^mMNG zOc^OTS=NOnPB?aFetw<}(*dI0@t8WDb`*%tPsWr2ETU3Utt_V$tId*agy%UOoPyHxaxmd2V*RS=muuN9tHqR#C7dlQ-;rk% zVL321Wu8SzwdKvXWoakJ(j>GFY`CYcSX#111ZL zT}iX$p>)zM1zBkp6IP6@YnbH7$`uQClU^P+%r{v!S!NnH7Mf6#=d?jG)oEX-q=O+1 z8Ii@zDR-e_DYB$F9V|psMxG7xuSu-Rl?>(`v$ow~mu^vfC{YwPKbxf96 z^*C&KR#RTS#is39u;PKyPOc!pFIOmf-Lnk!FuTRV;!~hSW|D5ZDaGV281x-kzb1Ru zA~q`}*WxJ5v&}~vDP%Wt`}GRaOs*bkv7(R3%`lNwF`t8V`Y|ENom?O#(ec0Gv8E?tWbI!}uR=F(i zs|EyjwPS;cjgFOVrzPx)E@lX)7POa~EUYxsuL^G&Zd&vdiWOceYX&x;>QR^J7+)}k zQj6T5q7`G!hj@2IXsycazsh)yP^cRWbD}iu3+-6(Ka@|h@(C5*`Y+C2j8iOM%#{zzg?Uo{kG)D{(3L{`7 zqZD@eoRnN?t{u$`10G7)ZTB_eTV&X}G0wSp>J^Q>8EqS?zOJLehnR;M$*+q~pAy?q+#*;b(AX{t=@**~hGS_ctqDK|KeUl}~|#fUag4_a5Tc^)oAZ z2-oAbU1&Mu$VjnrT2UM}r|9p^h+C0hRwh3eCFmf|FD49*RH7!Dl>&q>oP%=?&=Ju4 zpwPLI%0SRVNs-D*P@o#41R3~UQzMlZLGMff|Kv!eXj-K5YGS1Fdje!ZO_L&(R-n<- z5qFjB&buR(XYPtr?w=W{te6$4bO&7z_co;SE8GXcztE7DIx$k21Di%8{ztg|V3+BK zEA3hQf?4_QO-V`MBW-`ntk{74ut12zBp;WKwFJ-#w8Wr&V=*@LmSLg8Z@umIun{4_ zF(|1Pe`M6?=$J7nscGq!jF8|YEVTbQE`duB!(X5o9@E^-t)hxx=SQh6$z-8~Mw;VhgWEwYTZ z!IhR`or<{-Q+7;|!njEoOk%`bXrWUXjn3+@#1vqriYdZkQu?P_a#Hd$^K2F_FRu{^&esuH&}hLgyGPDaPf>6$mON zYGEu6psc77Enoi-FJz~Rag+s}fUz#iZi%#$odH;vw$yuGZaQi{FL!zh786{G%t)DU z8U43V>>Ut}hIOqdWvbO;$^To-=&7``C9SDbX2i+4BQi~_%d~))qBN9!R)IxHv@QIn zC}j$!wG_MMZ!*_T8*E5hmc5}(V9_GV&Y6l?@9*JPw+ph5#z_qh_og~*IGaMzqn?n9 z6j?Ly$Bm9p$#=(6JJ$bGow=m+l!f8(dATGy6P*^4o$eWybW*PLC1yIqK{gRJ#+DTh zBG=Ru2gzxJhkD1SIG#G;4`V#Mz8f$PjIYm@)8WAx5IEYbta)5Gs)pGDcJf z!p9??mPvHNXA>5WL8_@j8_|Ze^q6?zVqO@M27AJlNbDAEZp^}nE8}I}Wv<3UhfImc zd^3cc63H8hka=!&B6reu3-mJ&LDWGYfZ$SIsFe@`LCmzHc^iRA+L!;chZEnE_H?dB* zJg!CW`0>z%H9`(>BWORU>jbkh0F)0}0qPrvwF&5BP+&uha`NGp`A(&N$XAVyQZ9ka z(NRKv6_E0CW1^Jlpkkz52wMAdjB@N>E%M(-MJXd2ubk^wbdOS^K~t}bQj+|m6#pJk z%J_gNWxZdNQqwI;DFZ#-HA<;N_`0iPqs>vuz&oRq&UZv9og%>p|8t|FlrYde@YjPs z*pR+Y+bAUhwsP%pzD<-ed>C}L8>775sl~_=IY8p`row)}=N^Mih0q;nYVu%G_-GPVB~GQ(lpN<%qy zgbhE0AU^}56z?HX%Bn$8${FCw-ciaq@EX^SQJtd{50Gys)SY*fa>OS}X$P9z5p~xA zbqSi)K1zAgH%f_Zx>EL$@F-=`h$v-lSd=m+B1&n3|J?0S%4*O-_&0(7;y;wx*QmeV zD5oay>@e_bLwF79nDrO^%a!S|{sOf6+jLc&g1SpWT+>zI;~;Z?Xq3|UYm746kdCqb zbX)4Ks=w&7|9hGG{|gy2Y@2yi{Z*sR2K8;Jzc|$2nd_sJ4d8v-z{@^)lhRL|J##GT zmul*lZt53n3ODtO=YLa8{bn*e$25d7_>WVcI4cZ~j1N!A2~UU*&*v6V={L?Om9J=8 zbQIbIpHL$d3SBL0@erlo;GuCmOEiZ4gZqE6#t$*-`>%3=!9_eiG{{`Ne~^2G7Q3z; zA6yVvL@J=dV2Qzj1x2L5f?$ck@E4c@NfHnXZ*ZUqBBla@z+gD22|)-9E(iucFqoR? zEPz`E3EM+pKWDah{GWoED;%fQbmxncS4Cm`eewHjDN&(gm2-GTkPzjbe?FTZrF?i# zl+wN^N=ZbVvA?qqd0OQdxb>>Ig9r}{5WaVnLJ=T8Q!38Ku~PPvt}@<>39qz}vJ4eW;(<1{m7R z6>ZKCE_b2xGPAPhTXS;r@)y|b4rf7O(Lz4B{F6ratm{QV@{O4Tb_efnmTl zz*t~gU;?lmFbU`dOa`_GW&%3^^MM_KML=(0F|ZSG6|ggK9gxpQHUNErn}K|;Q4Z`1 z+y?9htN{7}D}j9eQ4QoXff^v61=Iq20PBD~fiB?nz$PG{#WVx?97E|VpHF!K`CQ2t zXaWWRZvvWteSks0zQCctKwucKAJ7c!4~zxkv4D~Q90*JT-V96z1_LvJgMj%!_OT-1 z5MVLzHsC7Y?Z9=wFyIE@2;gSm9l&znoxp8CGq3^}39JN;237;3fi=J}z*^u~U>$HA z&;=Y1YywUIHUlRDl|b|(fEN%)C5kU_Ixqmpy_pG!@0=?^Kx|2sp+G*b8(D|vfoK3> z@V5d+16u^a8F0wg+wib_8w#dIPrsI{|kBI|HkMKER_u zUtk@u3$PK`71#{y2K4NQ_5kz+`U86buLA}F1AxPUJ%DClPhcGIdSDW;7cd=o127+W zBXBXWH*giu1Y8fi3Ah>92e=j37gzxd1nvR$1J(fh15W`50A0X=z;nQxfl7b02cS1_ z5HJ830vrk)0vrkCPawqthXWIVw*r%aw*jrd+kr*EFyM0F2;e$kIB*j%0$2{b1GpV{ zC$JJ|1|9@P0&9Vzf%U*>;00g|&}#tN56}-d7H9&F0}cX?2ZjMB0Hc9%zy#n#;4I)I zU?wmD=m1Uu76YdP*8*n%HvsPfmIE!o3gCQTHP8yI1ug^D13fT+Gyy$<7l7@6UO{L# zKtEsypb6*=90c?Qh5`B8Xwg7FU;^+u;4ENIU?%VeU@>qIa4j$bxCM9za2s$ma3^p+ z@F>s&164iH6W9c72fP4m5A+%cJAi&bZ=ea-6F3MM0gMLD2PObLFrXy^J%LtWJ75v8 zJ#aa&18^PC8@LJB6Ic$60B#3*V8Gi0^aR!b+W}7j+XG#|4#0CjZ=iBBp^h<^V z*E1Zrnc>6HFBuN3U^s9O!^2Qs^aD@PKN96dKkyv=W(5@nKhT>P4Lgaku#*@EJBbPC zpFq#W=%2uzz$75YLac7Y7!DJaWQ6g#vI;KFdDcYm;ihjI1Bh5FcY{J=m2g976ZQkt_9WrHvl;|ZUI&T zw*fx`<|DoKz@6|P237-41CIia0qcMVfQ`Vnfz7}wpy!Yn@$QB%a0~psfUg3BfL{TJ z1OEjy1M7fs!1sYkz(c@v;Mc%>;7Qk1t)MH=ZX80|@BKW!X*b2WD zm;`@+U(iX_!>|d8iPFp`U>zJ zU;uC@5%tEkN+A5JfLwcUO*0gJt{GNAuQzZc{9Jo%Mm*O*vG6;9F2rN#Q4-;Q9heN{ z+G8EUI{~fmPXcB_E(llze>Ttre{bM&_)~xzz~33T4t{i5v4->kZi4?2U^#Fy5q!SD z?eI?lu7jQsU?u!E;5PVg0Um_E2*@>4IItG}`xp=TF2H*DrvkZFx)az0|7u_b_=f?N zTkxz4kN|%_pf~*UfU)og0t4XB00sgd02U)W7&sLE9Nt!mazla1@IMK(0tA)KJ{eiXc&j8i~HvpS}Yk|rz?4ba@z;a+M_^$(+;7zKsu0=-z!{A>5j0V04OaK-DX8|_>n;_Q%mGa9|z$PXU{O_W+X-J^<)D zT)z9)3z!Fg5U@2c40r|@3tR_G1U>^y2EGZj0$&Ce0mlHB1M`7Ande`sX!Uq6Nc2(# zWs-^hHX3sTdk@3y0{KjUf9Ya0(|FSf`EHS$9 zoinL-zQ`5c&(QSdYW{r9&r^N=*|cyzZ{T01mX2M_o_yDAfe5#YR*7~eMpvS=htD_o zmnB*w-$9!%{Crx#Kf60$GCixN$Eu~Dq1juY(V0F<;}Kuj#XkQG)hKy$&t?d`-_hEggsE=Q9uf;SC^xIqq_i>E>wR^R)c2 zyqR-5(qoC>O(&64wu=zdeI&xzHbSt98VfhuM+jCJY!$MNB#Lo`?St**E}?@w(PF-4 zJE1!U;cP1*&@x51bK#yQ^sudjpjC3c!S+HodDvz`5XyOw?Ir}RaT?rgI}E1{Y(I1- z!p$}mf>lTY+{{-9ETA5?r4Y<&)RT+c(9OAuZ7KxZ3}?Gy9?8$P6#^G|*uLmyx@=># zfjn$yET0L&y#Ve=p@;2_;mj}FTnH?S6>iEV3R$*2rb}72KiVG+H`^e~M3y=89wo+H zwnge>`B;RVa*f9}8G=+f&a++8&2nJdq)yt&_89_>iEy)x($09e*-q)c3;)N#=g`^( z+pS)|Y`Y=grk#ur0XJ^Th9@(zgC+KE7WWS)B`q?*FZdd1peMPUkRAIkNmwiXKf&E8!vk$en zW!s~j>`Quhj;IUWe%7OO+YPepW3->LX~O2QVh_STrL@BZzvy5c9=ZG?$D9T9o+i_wIrH|pXL-s?C=WIi?Puj%snyGNEmwhivl&S1j zl3(^88J;U-_5Q>1P0;F(Wib`LE8COo53+9?+uUd|-pIK_*1haAvhJfq*%|BA$gh`$ z+*!#vjOEI9A@dw7+N{iTq_9usIa2gvnP)kM$vlr1?bcc+m>0BHUFPH3dfB67 zYti*4in^70W&4$SqeY&Kx~{B)9MQwBv~dzzuHK%B3$+Mi}~J&FSgS)bb+h zBudDWYqXZW?7dgY$X+RJjuQ2tmj%Zk+2_U!dC8NgwK?jI6!jo^;>0+h=bh_usYkYC z$umLBr;;Z@>#x#2&Qp>n(oi4MMB9_$cwXz)nP3Q?tkos;$Pq-QJ5`J>(jBYS3wb7L za}C`I!hU@$i4{4Mb&jN956ApPK;5EP1c7O~otHfM>InsjGlrqFrj ziffb7akSVcwb$Fa~_eSRGMLYk|FYc zE8_LJl552fSVo<4jU-pma<0k3NXc-PVJf6TF#5O1%5@Y=UaqY}FjKI6m~IG4hkFCA zwL|bf*JrY?Q(kxTeHz`(Slw;KY|!H7DpaoNLQp>3p|Q(mv_V5@}0!wx|Q?&Nb-C7q-f9xq_8$zPF?6lx;|cFA{Yx+a+s=JhB|w zKBPMhxoB}4!&~_APPUte@AByUvfQPfd7@0EJ5$t|bmxe31?kQeWh&ir<*mC}?z+1r z-F(p|WVqacNVn4vUZ9m5=TM90=30cD`Wh}v@Z?&PPqFni zuH0$KwY%K?$u)*-$I{LJ^>uu<*q_RERcWrX5CpF1gLGGTorwT!fVE>jg412up&JlGi*S7p$ z-*d>FtXxaUI+JexPae)kIuF~r><@CSD$|nt6}c0Z`xU-#r|(_l&RAccq>7f`vTl^E zzr~*~N>tzL$lbKu>&P9oT+hmM<@!gqKk1fsN;m)Ke86?O+&cPhT^nJYU zmr|6IYY$^Q*FMI0mW)hY^0RbW{M>t`h%%IG2RYUn$8Te}aSWE>cC<5&zTE$^Cgj{k z3mASSKlfXDInb@=oqG|!QBGOvVGL&l?wgoh zSdO{yv$U)@@eRSLE#A_=nRv_l`e7wwlvSW4=+(bPA-+Fhv!&opnxzoeLUQLhI22N0iZz8P>>lE2TBAb zgRCG2s2H>swEY;)UV)oI<)E#gZJ_O-3eZkaC1?+*2DJDDo>2g6K?l3wc@nS=R1b22 z8bM81&|Vk=RP1WkT=K|^#YkdfuJDJAka|Ia8MX%B*+Yk1|@)Ifzm~Hz=HYWAyl*8!X&{>=K*9AdE4~jPo*mqA2c9R4 z#M?v&A2kXHx*Lbp^8OeuisCN>Ji)=h5Fq^hMcB>aSxrBgFzvnA)tPsJ0LU?3i`vn7&HfzT#zAda`OB+xggcxX2A?ll6jjd zFN4uaGVaZ!SjFcda3^aX-mFiT;mmsOJn1fAJt5}^bMoRSLX%~&%i`b%Os72ef+*DOHVW~_&+N~xu!ui(?m`X9NI(--FAnt2*7 zG3uAWY`pbsV&3&Q-1@?|N({|f=KznpVfY4DeI&rweE2UEn#j-p}ZVsN<`l`MY}JvvoD&W*u6)KFCMkT;Bzddpey1cIX^={V~xed zZQj3Gc$GTDi%-4ap7x~FY>dt(-X7BWZ6n70pi!7JK>uwm!Ic|V-nSG7-&gF{rVUb9v0_CVz8g@SP`nDSa|8_tOPEm%2_%w`u!^Y!6|X9W zl!9b3Gc&!s+7%V%7v|?*p+5*KH{RQ^iZ@(fYOd32#azTc=I=TX^GMnt!zB zXBkswiWWXqL!RAH|4b0m=9+?fazG|fKByOnlQwNF2GQ1K8r}zFcnOGlmV+q&5Qs(e zl;(d1NV~Rxn9hqJ^1Tb9U57x7KL%oa01AWUq||pzWH@r37BXkwe3mEv%s>3-7*n%p z(9?n^<+mNLe7I%S?q3F`-5{dV-@Z7!&7LDGGamlKKf)Rn!UBMWr6|i0Si0 z_x=MW@qGbvt4G>Zt)3p(>%~9!&daH`pUQc)!RA4Mszd1mo=rOtu;u4|_Z-JfK8@5~t1d&J<@tzz!#*L-Bb^zplPpMc%I4-PK(8vW+Wi+kSm zfcemxUppS!vwT3uhQ+(r_j`35E6v>V^ohi$4}O?3^VBP^%-ZK2-R8G>*X=w!<@I;} z8d&yV^7@-a8aH{bdB6LX2VS54($izx-uC8%*>!VI6?b^~Qj_`k1LZZvJ?HmL!*~(u?0RVQTEu^y%2mkx#Yp+J8se_cpt#KmC4M<)2@_8SU}&wtG#1_I|d* z%l@dSf31ywJ9BEpqDiy2914v*Gbty>=ccov)4!eGt*YN+#~Ol`H$3`TVZ^u_Ukm9y z))e;YqlXXux#r|2UrxNgGIQE9v$Nh@J+f=yf|w;3ZX$aP7~eg2#%rmKFR$+N^Xb2y zeW(8Cue+c9cSdOOs_nPmF{t9hhrZm}!z=yV(TUlYZ|$5teV*TrljZ{vHy34Y95(;> z-q(NInU#)}x>A2`Zt-8QAD;GOxoP~y<{6K@(&5r;9{0R3XnfWqAKo~y*PeYZANjnt zVBc+ry{Db{*SaV7JyHJggnj`9O`Y1WD*xT#+dKS1m)LJ#eIRY7@An@+=E^$O{|;OI z_WNI6cXyu=p_`oT7EO3a9UD^kNA45fn>${&r}<%T-=?`|yI6Pkiz@wN|C0}Ow7~!kXYx`DCl4?E$Tc(g%cL(yewuW7OdtQnGs^_>*RvHH}(3X{j!+x*|jepTO9Yb*QVz;I+ax;>$_98Vt)9j?=PMo*wO>Mt8QEQ z*DFPS17DwfVZ>t%{rrap$93%7`k9E4mxA8Au&OX=^ivgE>POjkogK4yL#pFJpPPD| zeC?g*2EXZ-@N(HJBYub){^(;bef5>crO$pnQrv3c=G&p&W8;qO!Mim?~bf&m(~4ntDcvBdHasnUfHob?OG`unP)P(j=9%yxH?*o&+yQO&g?g#!4d+!2Q!}tDuPbn3ZRLHSS2cc3# z$*#3kC_*T5?4S^pqzKWD5JCv$m~+l&!q#l(Q%Hpnm1EASq$u6jHEZpk@crJu-~IpJ z&+C4k=l)Kw)q8!`Y1XV+Gka#unrqU$JKH$5QCX`0lK-JsU8~w?=C}zp-S3T`?oo8w zA1`+N4o_&&Kq*^Zq?*-pn(kv_xn=vaO-KEn<&WzqQ!!22a4*bnt;zEXrz0Ecw>58V z=sQU-eOu4$#na||_APjD<4UK3p!&9p(v3gVUp@X^s9Wv|dokT9blk(?nWIj0d-Fpt*l+Nq z7LU)YIk9Qr=dB*EtMaGDj8p5hrSsEG?QngZ&f;@p#lvi8Jh$6^(_zr&>{#>7Uw1@Y zt-84Gb*o8sFMRfITw12~?S1^c{pUwI-p)Lz#vtrLG#l}4O-+VHE8)!sbNbE<%X?HlpD6j^G5)idN6CF4AC4|ZzzAy;jG|7&mB8Wye~LVHQ`p0-+VPNY3gnIuN}B*F!$4!bBEUag zD3{tNum}G%2*c-Yk#MgS3~R=+@p;ehp~7k*^nd4if7TRBZ~HfEb{p6SYRO(+d!8NL7@TYWlIT8CB{V>Hf09&afK{Q#Qpwf z1~a1R-|sPhrCs4(<$v}U2looU|NWXiR_W)T(to(rEn%M0&p&0Q|LjkZzwQ>n-Tr^! zPyH{pUKd`^(ScEa#ai@Xj(pZzKFi~g_O?}`nV#?G4`w_xF- z_{B?>CM;XNB5~!a)k$mCu1ii?zhUF1&0A8pZri?N=dRspd-m?zf8gMu!$*!DJAUHi zsr1ul&dSbZ@bdE)E?&BPZgx)Yz55UH9zJ@U|Kw>wVbQbaFJ8WS zUHsFSXWQKNz-Nq z&0Dl=)w+$LsBJqVV-wT%W*s_qGPkho{PW#x`<`M4M`j|F39&ocYoju9I*) z&`-d*}AICazSzgBv zBQO67PpspIF~xs{ud3r;UB`c1`DdCFb^JI^h=VFvPkctNxV{Xm^90^`N_cO0w!sXy zK|)ymyNBQ3@819D@Z%(2y@h(9JthzE7y83H1>m2^{L3SqxoGCMvUA~*nBPJEfdo{)NoFkVc<2g2Oo z0T4a}=2|+}Dcch?hQl*p;SDmdbu9S778}q9+TC0r2R@Elc8TVdG4grN+;?zjj}cvu z2xo33xTp~>++uLJR6*JUnaoZX`V42bTrz1-MFZ>Z2eH zxL==}{5c;4=S1TD4Bm@`0RLB??55$>$fsiWz zl%lS57S6w~E4`1z`$T+yh}H)4TKxyx`9FK!_V3yV^WyBYP`Go&H&1@H1GezLuQ%O$ zc#o{etElzA&l@GQ8ttQ)8~e!5+<%uJ*QGeK;#|21xO>LAWjN1^)&}pWahBPyt@wB4 zVcv022HN?HfYzY%sBnLv6}#~egLA4Beel;ki+kty=aq{7{AcvplQ7Z4t3*jm=D8$w~JYih4&7P z457wHshP}aU?UT6Dlt!8+q8AU(7bBhH2<rDFUA-}?`DV9&InnIaBO`3B3V9W~4m~vpf6t*oK zIFkcwrQm`&uu;l^aZ(OUl5${*lmiQ-m>w;jVjjWtDV8f(J_QPPPl0Id6vNTjDU#Yc zMO(nk&?$s5GpATCvuX%Ba)Z!_AcOwvvQPgyPc^~22hUxKap~&~sVrgCbsSwS|QCLS+ zlvmecs-oH6@@`ZJ7LM8&jd0Tt^`-&yDd=az7$apS37Q_5h_)P^b6 z9j%o@dkW`d7>9&ypAOmu!p8~u(DJInuBu`^c&5Vj2+hjYiSuN!TwE`mw@=q8>`Gz% z!7M#pH?^AzSy&zD?*pA9qo|Lu< zaB1KUgG&c@30xMqJa8|-6@z;Zt^`~;xJq!<;JC3chZdYVI8AUm;Pk<@0%r!!3LK`l z14_WTg7W}38e9OlFmTb}q~PMfC4$=l4$sB790q?nI61g$;IhEwfhz=846YKKx)03R z1!oRU0?q?m0Jvaq5#XZ1#equzmjrGjxEjWZaZ#0wesW_JatB=KLT+AVesLR}0goh6|JDF&QSo=y8ETc<6KEgQo}+ zddK_u3wcAP1dPY<-~g-v+~5k3=VhE0J|#zO*(A0N)*XIgPSGp)geaz0Q|Jn#5~ z!bcbU#>1>uOo>ZL41DqzmQOKMb5aF$T<9Du&{E-ooJCOBIV(u>H{uke;fm)UC4`38 z#wch#Vae;5JTJnhsytAiyr0Y%cxKAJqw~q~%kyf_@wdsR9^ZaAS-!$&C6$;5DCyhe zD^HJ&5?0TD5#w=@3jeu6rVCj*>_xa#D$-F2>1$aE@YUw;esFrh_^C&cSFAu|UZ~F_iqkH7{ zH2CHrmil`*_APv)i}sa2x1EbP!84v^ZfPR`aS;7Uixc(e77p(S@p$B6i{e-izK5$AHKF_E*Ldu;SW~=CLkkc{Y$^PPTitU0x*or# z`L!Onzv+?v=TVGf2tSWrJcfR50lv2v4jSL+Rvfv1hGAbtJ2SYQ!p|Sn`S*M{?t$-m zVK{w{kREwB7J_f3;)oQEz2Q5L_%1eH-zwIK@7>{>lGtbP?1U|eZI7*l$0p8w_%jXG z3CqBD;{Gb0o;&CqhTqG_(Hb22z&%ZK|5-k!q2n1MsEy)?`7<4k?a+B1iZd{#$9n=g zhXO-!`MnNwj0cYpY_q?L4~F9g`#HYn`uFLub?Jx|-9LZT7WCYTXEtno+IN4i51z@Q z*mh!{{4<`8v*275Tz-$oy+_YYc$Cw39e+P{Z$zlk2R$E>AlgPW#F-bZ@m9m z2W)eU#j}lKui^RT_cE{@Xurg7R{R-{Z+GJ_6~6n3zW}sN@i@U>INC??_Xpqp#eR#w zLUoTT#raHe{!*N;e*L{b`vTar@c5+X0orG2e@BY~*hlc!8f$~U9g20~+y6MO8v$GS zdl|T|an`;ft>SkT-*KhCu=u`mARP7hmNJ&|Gp*wMk9VLVVcm+O59h?=cxK%iV%X32 zwh*=jj~Z+XJi4&gP6mbg?|(n)#$gTVmetLJ=YwB=bAINbTcybJ=WmZGY{##^Jvc&$ zZI1gAbK@3H5RSqSp{~Ei(=!03#-qj>i9?3@k^P%7oSkM%TTek@=6p zJ?LkBMBqmYVYn^{^J5)+nIG#G$NX4+D)`X?8P;FU{FuI&`7yobB$@`(n}Hv<9qaD` zezY!z;lAKUTQ)<$A5q7j%=`l(Tn2u$h=g@320vOE!n~T3sUO45nIG5d%KU@CAI$t% zwy(}gqx1zSjR=Erib)$!xHvq0lW zj!+Nqqg5(gcM15hA7j0%1^-AW8Tvu!&ol;g{5IgnzKiYU0)Dgrh3(=kgpY(6IM>wi zM}c2aenK68D)`aj4YpA__;K6%gZ~=%(OMC1=L_)nXZ@hMPPoC8pW#;EM=LH|}OO@L`Y9FI8+#POMQAdcI}fh~a7fH;nn1;lZkJRrW0 zR0zazp<3B#ABA5Lv0JI17kqy z0F|Hv=mV93B49nBIZy?NV+5)|JJ9ukEY#fN1|eAJ`dK3`G0?;V)5?SZa9wEyo3MEn1~K(zlK43q$)fW3fmKxbeg&;^(V>;seo(f)rX z5bgix0nz^d3t)d>3D6x_4Mh9@>QZX|Umu9}|3yHw|8EXN`~P-8wEyn{90~LU1_A?s zlYtSyU|<|D7MKWBf)mI_Alm=Ou_t(;luHAR_WzFq(f+?2i1z<8foT6f4~X{vUjWhm ze+dxn|5pRi{=a%G>}Q||i1z=@foT8V1&H?lJ%G-@(Ll8S9|2T?6IC1#?f)kN(fFd*9hj|QUs|9BwU|4#y<{r^-T+W+4VMEn1jfN1|e z7l`)%3xR0=|2+`x|5pOh{=dq6NDpiURDu(wIS}pt+X2!3zY7rU|9b$@{{KXvk_h@0 zPy-kTYyeEec;H5iH->s(JTM*OftN5In1%6XP#=s3zQ=fAC5D?rec~V-r~^d%|E+*Z zR&ab`IM4>eff5Y2f#Vayf!-Jn48U+ZXfM>jXw+h8FVw&!)Dn(MMGf4Kbb)#zU7?;x zcc>@Q1CCQ5+W#*GqW%9$Al?n)LM^l57@nV?72~4+x7atvaY$V7z6uwdBZLdJfQ6*` z|L=B;YX6P; zaZF2LF&IaDe)@4-l&1Ors;%MxI3p=+;o?};KlX{~eKb9n{9~UOZ36yk`}ZIF#C3nm za9oBSH~-it#&$v5j=12xFpjz5Jv>~Za-szK{U;8_5O6UEod>i7J_5P`j{rS@sld^| z6~KwWJHQCwJ)jhr4NL&;0VV@a19t!~0S^Q7fifVD0bB!S0&{^pun>3+=nD11F^Tt} zHvmM(j zBLP4;FbtRj^nmqg0HZU>a~I@Hp@wP!1db%mkhU z<^g3u95cePsu!T+fjIVrV_GGkam;8Ul&cA>290A+Q4o(~VCso5FAR7M;^Eel(+7PB zC<5ZxQy7G60nI@V0!kpC8PE>&Bp?Uc5a0sZ4;TgMwSgX>;g(GpLu>>b4SEf5B5*J; z9@6OmBR~(qa45$DC0b5U^3`=z(mO37>HwJ1h@mj7Xyz2hhjX0 zcLB;l&jgx*HUVaWo&XeqHU{Q_9uIs0Tn_Yx@J_%I&>_HT;Cx^)ggXG$SJLl4<$>-A zS|4;APzu@#C<46+XbzkKv;#&0U4UM|WT>|;&;#^Z;Ao&Ha3XLWFcsqUfDxdV0S`mD z-GNfjbAf3PuMbQBJq+VPHvuMt9uC|AOvZ3v0#FXz0?Y!Y0n;IUQ(z%zZ;S`s4EP>2 z{>Bu-`ozFW&Ga2I9T_bKri^7l4<5=YaXZUBGf+3a}9JwFGLerr&=u z0FD8j4E5;>GzL8jh-0V{fEDN^Ksm(Q0VSZNz-yp;0Np{y0*j&CRzPpiV}Sv{P+$p! zw+4oR_5r3rzHY#1(9u8~s}=#{LHh$MA$=QQ5@=swDx|kTg5C^F2hIlCL3n#$7U&>g zK5z=K7+4Qj348`rPlEZTKz-m=pa^&rXb#*9v;+15x&Xs~|Jd*U$9_NlF41epf9&_; zQ+l+mJyU2C^#5bOpMIn2|5^L}Xg!|JU{TCdRoL^#x7Yr$-;eWna8cOz|Hpnmy~o4j z^B?>D3Y+{mw+inP>T0}t|EcjBg+BZEui5X%YglU|d@~L?7+;M8;#+Yv+y%maE_5cm zRQ?Gs!QuHDrPPH|uExSMKML`Zm5jqFxi*yYmmh?9=|M{Q48~rJnv{~f_d+`P4#ugJ zQbNgTQ%at^qxCsJDV@VOkWwOIy7Vnw?`29Zg)xLu-ixs*rS$z9y8a84(iBQ=DhqdI zx-HXH#k3wdl=A&dFQSzCF^XBZ0b}`VA)h3R@c`ozO8ErF-YndhlB>t~OnCo-lb)xP zY-Ku@lJlpOJ27p{;#DanuV2!3xlYOLr<5;eI-FAC#dHtG)+}6!=~pjkd);6>L@8NA z$<1crzD)O}lv*&Y&-nd0ZI5S^((6ngq2yASj%D#dEPM!KPex-#ElO#{Gg@vTC3l1I zI1ArQDUWA*8sk_-H%1#uxgpaHDY>sjLiyZt#ygafvy}4POeeAUSjJGsQ7qn-Qr?Ye zBNpG7v6k5;`#>pqOeww2!qb`F#p2g6#xYJ~^rw^#rsR4tZN=h6EL?~2UpCQxo)P}^ zW&4%aEF@nm9`>o;j9)I8Wo`0mEqSazEI^y|2EA&Xe~Yc;e)rr5qgM?8ZJ4Tbb{7eI z+#_Oa3Z$2g9(Qcuexh;z#<^9o{Xln>E`58LylmMyXe}PmQfW zR}PvOc#<3 zbv4>!3FXVR=RHV}llscX8(((r2D+>Liv07$JtAaZ!U#w&In;hur;FrByTF>Q`_!QP z2=`&rFOjen8;rMHg!=m?2Dr*ElZoAZ=H^~D10D5ghuT$A`KtAZw+jcs`YwJO;eL(G z=yzmr&S+;SfBz(}<=2VM$6kGQOMs8FV zQ68bIUh&z^flEAUa$ENzz7#-;bdRo%l!S~6f z3HI&Gmcahh`LwG2v-_k+;#_UxLDsN+cVqIVJ|K@nbF2?7F>&C+I!s>5<&o(RZzQCv zHih=s>21F}j}%O`9A3Ll1oaKte7EI8GT}RaYKVomLJ$D@TpVi8xO^fo$v*u$|w;zD7Z0Hz?QYJhhDv`x&Jw6z~ z{;kz|_WlXkyX1p;@H0qX((S;zsZUAKn&pKWO_iX1Tyl<8JSE@sn_7%ICV}mX*laVa zfQVK;j13FL{+O^ixTb(?3R-B{d%`y{S2A<%9#Tj?E*`Sv z2#0afBGPMCp;|Mqb`D(f@=zzfhrqb>LEujrmklM5g8`EqLk#{Yyu5ZKC)Y znYFXS$_PzZzjS1((X3}=m;OVS>h*xvGAP+nZX!9yN%p=@ zxp|-O$nCy2vQw{fT-MOyFP``L-QoQbxT~;!NzTgJf_wa$Gl@9^JqeUIqif3Kdwlro zGuHCfJ7){od&DB~nrOHS+L@*P!*&BT+M zK>GSG=5Na3hpC)*ZW;sShn=WwVxGfWuWDWREL7_pSF%#Q)tPL*%PxmtwKcY|eW?dZ z-Lm;XYft>pi0TOW6N4oW@A6&byB#0&f$cjyD5qP{U4BR0GMg)d+rs*Zy~g(}ey6hr zw|{>pDF0D{cS07wwIFJc`Bi7gU!Ksebr#?2rQWshAThMZ)VX_o?(pY_Toz4l;sEXE zpfPvhZC+koTefRTci8@rA0GQ}@fxBPXX65(JgH-Ga!w}S#maofy|1^!)FsrZ@RhL56QqM)ia8&yM^s=mu|i#a|k_4(cm)dDeT*bzb?F*MxDc zp#4)_H4f~##(Rw{4LGyd9qQL^hv?o_-eISDmdhmA9xmqmNtLVo$NR%Vr1r3XBqule zcD=&4IzP9W$>**RKe_h6xXb*-c1dcs>I0yE)Xv+v<`Q4NIZSW$Ip`m$9ZXJMxyX;^ z*Umef?F9A9o)lGefj8>zdLe#r&vWpx8s##J3%tV^j|dTpKd%0H5SNK^NB|q&C@xw+p+{p98{CA$3Zv*R-d|Z{Jp207SxmUf|3$};zet9NJ z#;-fSs9x)C(BC8#-ZK3XlI zzjC6F-CAzq2b3PSIAw_aX_oaIr*-`5!}a=q=K6xx(aIjTk|)mxjXzxs$1_*rZfL%U zpZ2nmw~ZUDkBbVqq%ngxesgQsnQ_>@f3?v21W7HuACUZDtYNHX{Lc7|v5K*h@hf8m z;}^zq#xllI#?Oo;jGq`kGJaru&-jkUL_>8fLv5>KV@hRgI z#(c)djE@)}GUhQpV7$+Gk1>}qhfYC5#-ST#3aqN*FmtImhA|C5&*+p!Y$4b!vboXB|A+ z5-&fi3Js064v?g4V`&n>3%jpCtM-L?#{r7mbFM#W3xS$;3 zGmN~~_g}ZT1g?+3n#UQZ5oAg3w;$!bO+m}GdYFzTG35n|ZVv2$@rAcFd`Q88-u_+2 z^a5S^?p%d0X{CGW-gqN7(1qW&O!Oy%x+FGp_3a8ebi*T+ee^GY40N5XU2JqKDgI{o?O!m^_7C zaMYdp^VPuNUD!e~YzudORbn>zB@ZvoL>myc+EuBs}Ei_8(I|A$D+Tzu| z8Dy%Ovvl!A%pd>5BQT0s={7Wdyb7*QIq&1=+sq`Fl}}u<-ZY?jA+7F zj@9wD!2O>rE}SukShY&r+;#!Bf9k23)^ka8yGw_@561pvtk(S9Tymyt^5XGoSiiVV z89QRg#%5>y=X+uQOI&5sSxP!C>+f?@+!3^R{rw0jxmQ1PSyV&pAKG1x+?A3UBkl|{ z>D38z_3`DFu_Vf{(=^))*uHi~QM~wPt=PlC0{xYmZ&8Yb#rf6NRvt9+< zui5K-N}o?AR}K4A{uS$Uvh;bAIP$HuS>?SE*nXAgABV>g{i*zGoA!ABU^(~xoj9`f zT^onQp>X}r#kbEjUqEcnRHk{S8iBUS$X&dEIN!*h{Qd&Q`#a^mT0kz9?(f|?4BNx$ z_*3VFr2W1wQOzggR}Pi+i&Gbp%=F=28(Luh`Tcq!bLEW#)A|0Vu8d0E3fE8E#=dt3 zPv--Tmj-`piPsy2%d@{k@>w%C=dP%B1)VS25q+f(CKhKa=K-kqTc49 zBbMzL6VAVKUwUzR>>$vx#>qA2bYW0lL_9$~Gq<2!x9_+;<(aeGrt(u> z=RA3>j_GsjP5KbVtE4sho>q!F`sVPJptY_Yly}DK$3i2QZejeO+I@FAcST*&eC*LF zy#72*w~T{rLHlZ1e+%VR^tZVjamMa5|n7l-gqsxmArZo&01 zmwYh!ZZID=@c6sZFudOLF!gO7%&+b(hQ_1gK3Ch#E>a;;7G;q^W@+h+K9{>P@1ZhAF%J!{bH+2%lg z&gnrr&ZPAMZI_eqDu6HZ87)hgHvqK9Asfp8zUjqdX)U_r{*vr_7&(qld8+cY%Ny(u zl~-n;^XH$R@Vqem99&OxzRE3C{rN)6r0}viO+kB)Ipyxh-|9Z#^5$^3U*fVJcqIAq zpKtZNvQr!LhdsZ2%7@=GUHh$AYJu@y6@A9?_sWm2UD^ZJf4IKE{n7lnrK;OAw+Z{_ zOV_|reEgHMyC*xs{Uj$c>Q_F3*EdyH&9}h%c`P3}-3C`Bpau z)ue9gjODeSwAG8>aNI2=xCYBh>=k6?$;S?#+Hh|q)+cqFKR<+j-84F+*dE(cE*Um( zFi)cUUdRZ*{po8Pe`XMGcl@?ZUK#EW>3HuvcYfQfgghr(+`p;Xtt;I4Fq?KJORKQ| z`*yys*O$++|I*;%a4g^V+I(vlzVm5Sy=84NUh>dnP%r-U>0YHh+F`u(V$?%1AKCG3 z_jUnUGSC;6>)Z16qSX7oC=j;i(6T|+{Lzhr%=xeu3SPCwWP@JzUS` zO`7pPIxg)pCZ`$d-xstGgx3f1-jos-O3s;5+KXuk(~gu92TFNQrtO)wqm zVY(~R)|3(}O1UM|7EE`dly;=#IxyXyX;VtMF{Q+a>9$OZm~KNUZB5CwV!8#>%_-&0 zC?!pq)@NFe>Bf{&9ZIed(^^bxQpy`pN;H^OW4b;ir%EZU$Fwrj9MiS>bbr)PN~)Ru z#&i`WS4kpP2r@^m|I~9i{XQ)5T1`qLjR(ls{+s8PkQ7(gI5E zDbx8(KW6$Nr6iA1exK=kOy^Kavnjc|Oy6PpHl;k1QgV~&>r7u``U<7=G9`D3=?hGs zr4TKq0ZQpUruQMX1&Gbs96Peyl`<;9nrG!zsm4&CW ze#t1=LbY@=i{HfJ86_K8_y!ivC|OUnG=;?{vv@|yIu^f{g)>Ulu<#^G`Dzx=C|Skg zSF-p-7SAYM!NQlba7M{8s-+1mekqG*lq_NKi&;3MB%XyYqLeRW@r;rMEIy9K&u8(B z(s?XAmW4A)q*O~|So~ZT&nTJ0!lPL@qhvPK(pfBiCW~j3M6vi8EPgtrgi#vF!Xqd- zM#(g)rQs}oDvM{7gt71`ESymiO0_hE#Rs!^M#*FrKZ%7iN`hGUL`wMt7SAXd&*B4F zd;p7Ql#XNJ{w$nP;zzaAm&Nv-sgGo>4lC zg?q7ZMu{iY(xEJV2#aTw3})dTESym?h-&FT7C(T+GfLc9e18_-k5a-Ybz|YKlpLet z_y70n0)>{tEJ?=^Z#Hlx?eKnwOI6~oIa=nQ3?BXp?~hR5b)58g=^lSIyr04E89Z=I zxjNR(y#?N{aEDd6Cyv{1nFYm};{6Xdv7WTZal)%7TRhqe`NLGW7mkl!b?k8Wy9>tW zsdBF!>(!VZZB>Q$t6Y>C_tw#}=cP>v>+t@MbJgHJI1Zlq=4|9ayx-?a8c07ms%{*& z^>nNS>V*1|&yGXlo^0J=kM}=Zx|+PyQR92V#u>8*pyo6r<&Fz=POiWC9q*So-v;t8 zj{b>X3zAyn{VSK;ko)SmO+6yuO}Y?otR<~<%&jTvaXW7i#%F4C-yEG}qJin_h4=&= z>37EqlQx>puMyU#uPd*1EL4%+vfPgMuW-jK`QfPQ8@xLFxX^y;P35(YZI^#44xWbN z6P&(gDo6HZ+MU1CtUl@=ni3_lL`QVLafq<}rrMk`S(fekOj#(OuCD-(|(r{%N9 z3hPhSk=7%9r$4Z*TH6KVUo@7ekf{fQiz-4op;p!_R3UA5SWdF7>Wn%-KUI}v>$r=~ zEf@0VHu0@b-i1^@d!Qkt_h=?kBi#lW2AHI1VEVNNay9ZiKD?y-`v1*lPT=q@YY-d^7zZN*qnF0Fn>owc>}VlMPJXLLxSEW@@+^K z_uq1FX_~OV!`q28$t#zzqrOx1Ful8Rp(d#=oqN6FfzVzyrm0%wsMgsc)mK9L-1ZV} za_3!cv$#z{|HpQRe8KuX?IdqR#(%N7aAcgYeczi(bjZ}<_3nnw#`|lo zpjo00`82^YIU?`R`6ApRaJReDv<$L+n` ztfvc&e@57sG$(z>+<#WH zSlEB<#U3q4=IoHOk!^+cE^;{Bf=C-oAALtIl(&`Wv?M#<{o2Rku$-#nt(?78_$=dYj*60N|zQ*MZC}~ZsBC^&gK{2cwGG+v!^T8%P&j{0AIce$jt3e{o$*cR-*dfu4M~5IUeWP$!tu9s zxZIHR$@U2CxeWV*^p3fXh`brIwSILDZol-9g`J38zp~tI>uMpMx11;Fr)oMkI3JoQ^8XvHwf;ozsj+hm3IB5#cyqCLQCFXGB`pOR((k zAROP}@FohWe_+#%a4Gf=sl1PsG3n}H{c-+C;ry)Y>T66UMlV&r2gr9KXh~9(dINrp)y?>_(-{o-YsgE{Vqu%^rOA~&oUyG|Adz?`Z z&YRMNKh53#XwtI>YUPKd39tLwXQ|abA%4a~!zR4V1e5NscM9t>ee_A6AFyg;&&lx; zOrP_J*XQl_TG#f9b3z^Sc!fT1eJQf3(@lNU9rAtj`DJGhHXQN2QU>~NerJ8YZ1wW( z=7#ndAN8bGkH2eqZ~oW|7N}c4y`#sM#io8bc@M{%xFt^y>G5iOY3`;xH`EpdF?#%Q zJ^L{ZgK#{CyIn9yk2jj(GwI<9Vf~?nhI;(Y#D!*^dW$e#v*?p9Z}E26+-RTHsMCsg zUH)Bbr#Y8=dZBiHwnCTh-!?xjVT4eh{AWJ8yndr@4?gSm#rTNlopt#l=Wojw84K&n zd)`QwFR3#6SbM+~<3nB)H0IY@yl+q#E407T%R`O%Bg0ZYJqZ=sXZ6dN#{6I}ov{@W z!upI~4Qk9c);m@IVq7V<$I(}Yjrofi9}0pph5VA&pLF>Cd+k0(_w0h@XTIijc*%LQ z8kJr`dk!mJp~J7)b-#OyWOqSKp2tvBdoRn?^c( zy}5m=r`ZeX7v}Pf_#4_9A5?eu!}x@IK8^V0Pu;a{xe4u?c)wPgcQ_}RZ`D-je~Aya zX!E;_7h2Zz{f_lb$RpbPoP}M7+*l!uZ!UaTpvAY1wzSc|Q-$#zA8pa%3s1()nHMj_ zw|Pvo_`dBXg*0%4`3vyCAiqG9U)ZtW{J~X&P*>;2X!2HCqHXqD1YP{ZP?O)X;Xs%E zi-q)APx*%YVBbsGd8$JFj~Dnfmd>ZiTo?UNjEANlG@L8<}zj}b>k^9?({dw~F77bofdCI5eim<y{#auTG&6PuVU2s1y}o}uZt44ujG}XI{zSh|CJWITVeSp zUqf$=Ds0_(qNXisyW$u%-hI>6>0=CfqyAQGsK%!ZOMaqxR>+_JhOf^n9doKLpDxrt z{H;%Y{`I)6UtS#%*4Ob}tt!8^o2k0NdExjge78lFpL$ofs^G4Wf7N@U%GVX6>E5#$VWekX7qLSB)-A17;!WCz@78n@>bt9SixRIP^GrJ3LfHQLWj;!LW8Ev?l=}+%du>@Q z$3Hh}6U1j4Vfmu+Egau-$2`+SXv9`x6$v(kBq@-N7c1?p?;npVrnv;h=;ipeiz!qsm{=Eve~@-F=Z_8+NYTB8R-+(Jhb_5Sh#rH{W78a_htOojF|;@wK^vY?YqCcwj$%I zT13MKp2Gf}_=QwtylLL6&CL!%`xJiRzhumMd3fBNw1HTkq>9?|jM)pT?piFu=PjK0 zD=E+DyU<8V8VmI+{2Ei1v1^XSjE8RoEv@8BGc;!$i90_@*nb99wVyKvzlf?;Ytsz# zr&W>985QT^JL)vR=L4M0x0sTQv=?udYJ4+C9rh*WQ^wr<46hL)p}h<$Vm@Z%Uc7sA z{V8F4biUTU&zQGhLv2{P(7!9c#=Of2d19yY-C8IwtFrb@M*D3`cD)J_>YrK_Q=F0V z>cz&AM?!y?_^tL;M*lY-M_9>)^PA{<%*%|-EmJRLy*0%3U;AGBJmbLhH%{XNh2z1h zy7pOyN%Nzdx?B~u?^<d*j{? z(G9RXX?5+xjK~7L0r65b)RLOo`xz+*d%V~#7y5rmO>Itw((P|&dz|ksr2kQyl`*-Q zxWTI^VSjKxYHwzg&Uc>bIYc-gNq^K{%{W{6Y(Y_g&>o`N+VdH^bo=JXCkWdI_V7<- z_)N^wGEo)kBdx97ouR3{eCW^o27dYdEO#Y~zxEC9v?{ZNOda&B zX?~kT@wU4;UEV)0AwytOl0j-ScZox#WSPYjk7TI@Nv-sv;h-2L-TwJxMZ8 zJbUmQaeDY?61n8T>0XJkvbW0;?5dW0CX*YjyKAJgQWkl0%DYk9Ka&>|-DbOwS}x8V ztrAyw_A^ndu50~haz7Jsz&0*aX|uTX!|HY(A3l?%r)DcB7p#=sPw()HXtaqPG+MFnxCWR4a|uyASuyFQWP1y{`}qxe$r{#sv1>tgDaq~i*t4&4qIg(m$32JMmy-EL_j)(F zF;(2;ly!q2^~=bMdDhvJ$`^{Q^W3Y$+Ln=M6@%rkH!cy^HVrtcE-oWGM|6*C+kUn9 z^OjXUmxq-Rvpxeye;mD3c5{!t?e3{%a6RqBzqMa08=t2daxkHc$W&6q%hqg`eckfX z=JD<_^6ZP>{q8R!WiQk8E?QhHBNsc2v8}A#ENf?@>%Qx089BSTq_M`MCE`}n{VKh` zm65WlVO2(1>tr1*zqW1Aw46k(vT7AnHdeMS&Ew%0>vEDj)93knXWOHuU&zPR=YkeYUm=?}Xw$GxHebko@sZXUv!t>{tH#{eG58Bv|MJ79jT4v2 z9<@Kwz3&u=U)@^C{A`N2=IXj!-DO|M>(=W>6|I>k?%?VAL~S3$_wA$V-es-$RG$$` zOs{_-+ZG1Jw(Kt!yS6>hWXkI=WXvn6Rn@KyVvYRir;Ai8NZ+T!HaI<7EnDDae|WBO z1zCGsGWY!a)iTk=Oq)K=6{O4JO_5^P1er-YuX%R<6{Ksc5sNfVZjepe^A+Ff88d!!Y6bBMII3s!WP^-<)G$(4UO_Y))=n6MaSId7%( z;rv%}Z$Q(#?z&sV{sZrHFMIZt%$?cfjPjT;v2F`T&-N;nq~p2}|Ao=3WO}#VQx=<4 zk_TOyIG86)`gLww!r?lkDZ?TZe6JtH{~8Ct|PqOprAia_y$e$STsKWarxG z{?lb11D|f0H>ZkZEod1%%3zc1jM|N`_U%d6Wf&rMq?ODx$wZ{?*bl2JPKaG&UC zG2C-EA6HyOLfv0Q-7t<42fiFLd%Wg1(&b*OF>WJP%eq?hd%wZz8`;-Af6i#Dwc;@* zjz{ZxeIrG^mOT#byh-ML%t~+b%x~n%xXU-@-rOMOYi4>)-u#VN*L>B!{w+~Ft1O3~ zeDNE}3VwaVX4MMWft-;kTZ+Gt*vv6Dx3;bmk3YGrgPQhtV*Ent{^jWg+4m-c(zkW} zPShU6S&fzY%j`$IToyj!J9!>*=4`>#jk3ODzn4yr`A+Qjd(Iu?9VzQqf2-Buo!^ON z2T$#s>dmt3^ZgUsWPT@cn=NK#Im{Dlw0SVC$1ig z19f7>v$AS^_DQNqgDdk3ZF_GJ_rE*b^7DjhIKEtK2gI)upLktADP%=8aTzUjmF=G@ z4odu#FFI9C9=pA{d$V4o_}j%XUJVPXN%*FDLwn{elSMC9>t~@>LpIKu>1-?8C@Wp8 zrM{?h4VkfE)706nn`Dc2e9t%Vt|9epM?FyfFi)I3|9aEs(i&1+@L}osHY;Tdx;(D; zYEKR6av~&%GukNjJ+4&NHm8PMFer%{{%DohXT$8S>#A$WsQw0nZtYwt>#+5Uejn2x zWUc55{+*4vvkjHlI10Cjy=D-mb6*DvuvpA zBJt;`D>_}ssU@#x2Cj{G=Py=#!|CT01Ns!#10|%Z3XM_l*K{0LtM+?{pr!Z)V6+A9 z1=cx?>m;Gy^7-w1N%F^Zej`vv`0CLLCj}uZT;B*^E250r;-Tk~L%fga8d`tC`E7Ke z<^KGy2&eqHJ->!4l$A5}DOgg=^2I0#o|1pD>h`)T`ir|s9AY~JXslM3d&PB|B)x7T z&+fK1UwKkB`I=%dcgwz}l5R(4Hcs_p^tj>|0{ttTzQLg76f7{8N`_?mYh zm4Gb^jlmsTLj1TZU%zc9*i7#&m zk(1uviasuj#pfGO_d9BxCkIRB-|W4ljRThz(S)R*C%Lt&KR0iv1bUF_kHHs+e1@4s zWB(5^S6JT4>gxs4Yg`Mht6!|(eW;m@!jdkMfbbSG$s6czsmF&#bht!p`pYhB+{X6! z@y+CA`n1p&RLcnOHR2d+dDyZc7uXiJ=J-`|x$DY_=1Q=Askg^(BiG0lqeTnPUlGCk zPs22|Gp~_?)H_>`KZo|pdi|+j#C7truy&TR$QbIA-PiEVbs{n@4c6`o{X5kAF zBxY2n)BE3bh5SP_r38g(s1p;m5*&&!23)!`$lZJMWzKmkQvQ}`uWZs z;?VRqd9m8EG-wlyzoshZo3Fo37JZIQ{PGUs6O*QU8{Q#YVzamJ4ynQV9~(+j?vROV zOTW&U)(*BuqxYx=StQ0}sL`m&(B8%0ZKbYRXj@4*A2`1y@Bmb%f9unHj79%eXh{%2K_ziLPlrFU9$8{J13DC>XR7MeBG?O zBxSTk+nJ@%|GoEH%{pD?aQ?{XTXZJJH040o96 z%xwbYHQwd#pG|a|Yg)EAtn0w#Im@ReXOo$>oA(Fx=mh<@;q>$OvI(!=DC6l{d*}~m zcOTQtAzkuLHcwdv$MavEzv`U-gj2&{c0Ob*DSjlJKNKvKQmvrekZJ`}Gad@*6_k#l zT0xI`R4XXjlP9ECu+WQY1;oWFM*(%xXlng3^okh5QPp&7xYtENiM2 z410f1NUxyIZmJbD3#3{>i4oNbX1&N2@+;`Oi)sZYPNrJHN^`0ejQWxzGm)d9;I5rytz~>=sJ*U1=CwotzatjPwXcO#$Tjb!LYSd zE9f0WwSwt{Y6Vl_eO947M($0PpcTx!K(&H)DO4+{GmUBm!`!G=P;N@Kg2^1!3KkxR z^8qXhN~ch*pr|9&3d&#H7Sb!|yM<~6xsg;WnAnnP1+DJi67nl3Uq`iq9wVq$u&@Qy z3i>|J6!I%rvV&>`!$PQ5kn2pfg3_-yh5QP_D;R=Cnt;{2XM)Lv8He)ruD z^%QrLt?oW%df>Q-DdA#IM^VI-DWc#hpxow=2`{N6JmPZGCjt#9rlV!ppr|1*a z@~G1)KgT|c_c>Qy-t*vOUCJ z1a?YhPKyWxV{wt8lS8M>2o(i}hYR2SoDdiq7#;+crX#|GLMPOz46IXL1$N^)NVxT# zB%GHbU(`7G`f?C_Ng4*>zJr}dO9|J`Lc&>^1PC?*X`7+-Kv)-8BSTxj_|^DOXhr;{ zRk-kNBpASkcoS$R%Rm0(w|em#T$mESkTf1_|5<_^Is9T3evc~{Z0F(k*zg-xQy|7e zNQqws!>`F(g5^p4-Wslpet{Uj*hZKCUb%EVj!{R^nfW^@5sWsrWrG{H`6XJ6v@@ z$+#Z;IutJ0+W6HmT=0u?_~prQLQcAF%pEAi;Mdn^tBx1);5XZ7K3Ye#41^`oZK2;7 z3lPf1-hf}#qF+$NJ`w?Y7_HoK93G$(1&3=v%W&`@3LJic3%@3)*pC<<6gnNh(=KBD zHf+kYAfZ?K`vr)``ArilgEt(QAH#yDjPnZ)6ouj^;V+KUKR!PGgtM$`r~1>smRm|| zz@Fd`3AYj4VQ@hwC0rS}=BFfFcW~put*zs@A7EeAL&9Z(!(}MkgY|)Xu;E~pbO`jn z(SOk+M*nRO9u4`Uz+sA^f;~)YIAd4}mKwpHjc|6c64ql4>Swsszx*M7VV$Q1M*MOz zY4jp*{k9&TC44}GV2>x8->nzxFFvGt*zHua@Mi|w3`V1!EBaM1{O)8R*jc6f=YLT5 zE^t;&@BjFo>6C5~Dn)T*=%UNMoqhH>XP?W|%yco;sOf^3=5nfGZqCfqbde}2LMVkO z2_Ym=QjBz?D1=H8LMkL7eZuek?7i2VefFH0*WXFcm#Ydvf2 zGv`Fh$>-8c4}raF=#5`xW4|^!5ES&Adz9*;$zotj+(eLm@EkfTXUaqfXh0umsjKg=5(oCZj6fe%9Db4L3_@>hwV45qW7tLh$ zj7O}JJiLN_>y4hon5XQTGH;wG`i4}zkOR=~P8h$UN%N1bCv2|L@6a0S$DF_Ly}*k? zI(!Da0q`s!G$+I@MO~+dLOQ$zd@-O3Jg zKzx;NCT)KG@pWnU{+d4a1OD{1wwO%~mWH^p4Iyp@;1NKRr$XFfz$!fFzG}eDPlmXg z@LXWhQ~p*H82xpir*Z}_R$z{UezIA1;C1K&VD$Un2yrFVvGk`c^6yy_;vNTh&~7up zYCJQ2u1B8qNlS{#x9fA^vZ!p*iS#KhEXU7tk8zeoO2k0{y1%W zn;-2OYh_2!1Rx{2HW}+3dAhyKXiLCd8udy;yQ29Vz_V0S-ZQ2Ka~L`^{S7UNmt;`O zOn(hCJX(4ZJl}2#acwq-@ZGH=bxZfaZbeVD50d?R=>K#0?pmU_R^Q7E%4iwMCq7Ck z05h)4D=jUuhL&7zQAs6zS1^rO2}V$VE-D+FYnGK^=cVVoqTG@j2!oD(dy}5?ODZC? zM&%<<<4?~83<}2-lB3cZNWZ>I&v4>0TJ7ogJ?Xcr>A9$My#AB$wD;35kVa5ehLDr! zX!UqzM!eb^HwwOM1B{ZcLPAmIRN|ce9)|? z{4qSAH1p?y$nhn<*BU_WB?H>x*=goKL47wo%VxeM>O*+$Yv!r_Y&?$uP>khk&0Nw_?6qxLE%*5Im8Qc%Z zckYsMU5~Dp2d}wy^2qL!ZtCXsU)=P}#xy@Wx8h90$S zoWZ5FOXcPRCIU79Mxcz^G*%A!-}nwrBOhIv*}6!zjH(-+i@?wJhc%Yx)cpK#dAW03 zVQEn=16P;y%0ASOhCw7n4d#2wO&XSNS{5^`dY%|&%FS0 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%0DS-ep3rlYcP|GTaQ3hKRUUc@QB zdf{+5tz3D=)vcc=-xRE!ms6W-PCfJ~BVgx(-&7l{X5_}!K2x>Q9G@LKZRT{579RC4 zixLuuppEZm6Z=0$+}o4iI%ZEq&uyvq0%v9fPA{08aL}4Eb&B7x@e};A_O#sLi<)}q zQ%vTtDbj+`2V>f2hJEAOr|2lK0dG{bYCrQ>+3I|yhV#LkQDKwlD{E334cG5X^WrX4 z6wT}Xm~x8ihLWxG_fNbP7iq!+?0p>Uo%vVn{fB<|C-#;YBw?^O_?$vSCHD!;s01Qv zYozoa(Qle}y4Sy5UPMc*Iw6}jm3`!d-7?oMeko1g|7TeLpK|cH))IR*SGe<7>OFc{ zaAM`d8>^h`x$-nam&^$ikve|k!kXpq1i zid?bT=fmD@sckdldeeMiyAW^nR_o@@88VNi9Zzg|v31ei$nxh&@A$Mf@VwlirlJ(` z6kaf)$?J#?sK?? z3rUOJejuIPZFJVpHD5#P#itFiHBPfy_lG0}WV7t*KCCJ|CbxS2gpNZg6Bv9eN6f!s zJSuQ>bf@rT_479^@}GTbTU+=vJu6hV$f0V9vgEiG!ba2Mm$+G3NEhel=h`o*K4|_u za@Cl~12TkPtGVR75!DBj#?)H8ocQv5mvxPLUA=as-8eOC6%V&pvpO;!@7;gZAh;xI zd???rH!H@JrbL&IcRroB$aquQ3a^5oG^vczV^caMgTHRp4mkC#(WyFK`HEl3e#MQF zKHSC{IkUGHwTyXIn0wW`Ak3M!Zjz>Bc2e$F5loy!fUG+RzDAVmAU5zeZqIKsyXiU_9N5kKWiN@)to82 z_=?owuk>iusYJA@6_Q{AaQpk>iN0+3*YxB^G|i4WN6NMS2wRYcE;1yTrXv0Q5nKz? z#fYJQDnp9Ffp4VJAqH)-RSVg@eqUc6bP2K>$4qH=80km24S5O?Is!GedZgMv|0(Wi zBO>MgOr#C%tB6{u(fFiCZ?D}|#@P$17S7Kq&uV`0P4Vm8$Q8m1YO4iO4s<`5VriN> zMK7ETDqwx>_?=_>rQMw)XQBNxG=T# zK*VSh&p8X%&pCVM|yhY_0~q@T)J{>*z?nQdw&a+ z(T-NRmj3AVuFIw`Zxm&^=+8@2_?AB6^ZeLQM@^$S%nHG!J(KKpE*`v^!C&iMQn5L& ze)uP&ine!58HL9YYj3yQp1&^hc6osI^};7ke2s~>kDI+5q0%7QzTx`bQg7Goo)*R) zkF`{%zYo~xF-c1FPVak@^N}X8w~7v~ON$^r}*#c;cgn*0v# z)t4!oFPybKIdtcZ^C2o7W#cS=XhJ7wl@C?jT3{$|7NuFmK8uVH9fyqcpKNVuF5o^xU6a^2{X zw?UVqnK!9hx@{LV%+V=T^NX+eBrxpG5qiXoEej(n$L`pv%kSNK?u?W1ZvstAx?ha` z`p{x$hpw~DRc=P^da6ZPFv+{r_6W#-CX&x*Kb5!4Q#!*Y;yasNQK#t?9Lw+ zs&!XhLmg!_+g##GAz)51TUYSDlBUMg*t3fJVV*J%zt8#UMRy^BuOl4hTJ zI^~+sVXG=J z4$28ruF*fTyV;`-XRaIOWu0zO;P(rBX2h7G`t(jm z#|+vSE$fkQHIDOaeDlif;7jY{haHxQc^Dqf{xWyREzx2fdghn#^TQWz7F#`GR=c|7 zi+4}=H(fSft#hfYVtc~8*Izz$t)0WLsaJD;9Uw6wZiCt7#}!Aso_*P#w#r|BmBA;$ zWgSd~X|cmn6yCnkkxBplrubyGZ`l%yk-j!HaN|`q*%NeWk*{tgFkpcm4Sw><{Nu!6C~yvoI7hsu(FS;$O0QJ;;A)5c(Pf zlM|eH4gAgsPG;hBe4Pd!BRHA-XFZvmv~hj_f)dUw>@R*qDD=cYKE;hY%M2M=1I#?p z5YleqktZ}M2Too+8K<5UGoD?3d#=UnuOqf8NxFPlyDjLsJ~8Lfu3=*XCrXYVaqHUq zXu&}A2+6kVg7chGc9(~hmIqbvQSpg;COC!`Dj(UF2 zZNq5Y;Hq)6d^N%aljoMROQ{d`8&3>#TQBnc&~HM8q7fF`*ZV&o?&flA+$rZ%OWL}v zw=6B3eA{KqSJ9cz&W}ke+2$~7(e3QpEAn|X7I)R_Lva$S<5L^qe=> zU*PGSRPn3ynI9?I^tE0Q_7851+kIbc|CBS|M$SALK2?<<_N0IxpfsHqaNumz9d;M+{wJSmoK-P zb(c$;ZhmKz=qjI$5lNmZ0XYY3QeXPdyWN;FmrsEI;o5{#xLB1NSu9E~|4*OrPu^AKkDFwzs&(9kZQ1 zPapG(-gRGf#Ad<^(F<&;l^2qXJH9-f=q54RewON?)k~Ws4bIrit8Z_&*s=cpnp10H zN8UHdi=W%NX6-DX%(2O=sd_iV^Ab-g zC}$q^Yx5et=!vS$evi23v2*W?u{D`qS?FS_!qa(c^&G9c%1=Y)iaS}Y%)ER+{)rWt(ETBFpf}E#(zUS2rzvq0(4twYRF{qJqoA^;_HQZHUa{ z+Zx;E9L(u`lBzIlF_$0@Ct-&|7NOINC@zHJYz zP~EP+-AsR4`I8Nnn<@qEs_KqdXoc?j7}OI+b5)m`>$z*6$uymq2f1;>A0Ke&+MQc$ z#STcm-E=Q5elUb;M>~8;{60tev9|Gt&FC-E|DOV?-_0h5&OeuG7;w`QEY3>vIy`xm zd6|Aoc@qOx65V1n6`hEf#$i4Y8^>*> zc5$=B`Shc_A}Q_upZzs=vDHk~7Q5Pbj}}}QeSU0(qPO0j*v1F%d)~>W?Hm8(`jI`gZ{~VWdOC+cb)yO2O1@is zdCNyjU-0rO>}AqI=GV)^Mzp=s-@8iA_WQkj zW&h>Rb3XTOc`Y3IYN26HFVRl5+t%2)JkWcG@vZ%{9Hx~lnoOJ+G(PcAdRlColsP^9(Zud5E0mjnhbx-xy4l;~>5>-1t<#k;%Uw$pJo6h=UEk`CI(OM? zvCt$X3to%$6Rmi39Bx{JE4^qXI7AfYElP`)Y$l>59}hY;9v;LPk~i?R ztAi&;#u$?4@uf4|Ts*&zF`~Jg_=E=vMgmDjG?y9TAtQ7@CTgeusbgjf@o*8p&oLf; zQ#y23(`kA86OX#RXP>pF7ZPiG3sQ4@lXZ^Or|>`H=5xO`)i^0ZP6}P;M{32?L?GZs zP$Rjyy4X>*=~37JQx{<^p<}TKYh|f1d9wMWe{vC)9WBPf7T;T>H}`*}Hgbrl;;G#15@PF0$ptgVS z0fsIrXC3D$*)V*Wxkiv*cz&t)B>86>)$dGIqN`@-EiHfPwN~!8X&se1!ztRCGNqq0 zrY|$tr>3e0bqN;4~EhsotV>C&3*u42nt?^ry(?1Gc z)Z^x{n9FRF9{$n1;=-;I*Vx?aB;j~dH6J9!rd@`}9?+LHm)tz%a z|8?Px-Cn88uUlO;1|p%6xKhK1Y|Y>kT|e_xe8_w;Q6%w0k8@nsBR;RXYA|8veSIhiLti=l(UC`A36KPF{o6$o}ATr>yoa&FFyE6G-%rB zP4D(B;MSZ!s&Q}O(I&T}ckQN$vtumXBxWXgc}%)b)v#M(P#Wqlv>Q7hOF(?H2l5KR zC^Zh(asSG7|1o(*AMp_gDCpXB9X(xLGOy6>d&nRk{>`-fkC^JHqG<8TVVezTZM{-^ zx<9X5n6x<5S>o;yAxiXyFYV#}w(1^L704lv61H+y?U+6$1AEVkX$-q%;p?hpG}VQ z^X7hCIoi0>WqEeVW^;Qpr(5Ewd?pLlb^Dd^?6!>PsI~nX^labNysUSt)r9Ds4;=V* zoQ@OFZ4Fb%eYy9#(F-lhbD3QYJ|*c~0v zqnqtKM|N+YJ)!vYSL&0HgW6Naf1R15_3iYtZ93=Yd+dAYV)pXwjlF&e@!uECU-zhL zs_>3+&8#;0sY|@~uNf0qk$U)$(dTt*cP~l^%Lu&vB=wVGFS9(UXS-LdH<2S%Kv zny)V^j7(8t(hA2u^J)9oRT|+vd#w0sO_s}wLraeFZ5H1od(JC!*tLE2VpH}-R@Gk5 ztnFC4zVnIU62Zo~p~*@DUJr5|M+KL>eL`t`LFZ53Y4Fi^N?2=8mi6(EkC#SxEe>9J zH0oNWU^eS~+ofyu(FIGdD|Qua;2IVAW#lF`XV$4X52{6H?p?icnW4b*WQ|u_n{+fK zCv=x-IgcOnu{zt~fof6S(TBTFWttzla#MbieN*fwwS9+&`4M-{hicn4davo;yIE`G z|;Ns+mt0K6WX;^_VF8TJzlgi)iWGX)pJWl4oia-*n~G>=0!; z>OSZY9ItRUKSFnuz_|x{5AS$ve;gWTBbgS>eGTa?gJaWs(*F0^i9^alF!B8TZ>Z#v zp)55UJ0{HHK*=Fv-=|(LQkqIrIte8?@j?Hm z!(d{ke((z{qVEg%bPR(ZW)tIhb=*l)sQ(EN%M<+g7dN*6v;TjF<@Nn(S$hcir+P!a zmz$1}_29A&Xw6uZ$=Za+y)g|Qn&!VCznQLPG=l@pDtDM@yck=W^ zW5qW$rp%($rPT-a{I>2PBkO3Z>WY)!)V|%R3mul~-4%fhtsBm)$v^(akd9HmF|h{8Aua>{w<-+P>#%;}GO>(I<8nrkXCVlZyN5|!vrfdcVs zh?LdQvfuU0nzozwUp!MhR~bGk;k5nhO{JGlYZaZ|wd_?H5%qb<6L4$Mqh1kFFNmlX zBC3Q+Yvf8#$}k&qGB7}9@s?Si4r{HBs`2<#v42K*1nq|Q)oa-E{13pvA73~mXrtFK z?}Tjn=0yxUU^>SBX-0?dEgi?MZ?`99jgFqdm(4Y_AmJ*=MV*;DwvC$mer%+Px~JTQ zOOvS6CU|<9X=&o>sSu#uB9J{NR?0f6%(G{#px6|K-pX*jHyt{Av z3Lb+vbKzU9T*rcD?4q5FGX2uJ+hfBugU5xH8H(Wts`nNc6zn;1=7aLi8BO0?=~k7s zZC9=K6+RB*zttM|;rfS=ZC|TGB}Gz?Ueuauc+aQ(e3iwH$A^v;2cQ2uPvI<$uSxsb z!Rk{AMEJ z{o9pqyv@}{3pd-^UYtOEa=Byu>aWu4hLu>vWIoE!d7{PZlg1aTJ3{Md + $ + PRIVATE + $ + $ +) + +target_compile_features(Modules PUBLIC cxx_std_20) + +POCO_INSTALL(Modules) +POCO_GENERATE_PACKAGE(Modules) + +if(ENABLE_TESTS) + add_subdirectory(samples) +endif() diff --git a/modules/CppUnit.cppm b/modules/CppUnit.cppm new file mode 100644 index 000000000..d1bc9a4ba --- /dev/null +++ b/modules/CppUnit.cppm @@ -0,0 +1,41 @@ +module; + +#ifdef ENABLE_CPPUNIT +#include "CppUnit/CppUnit.h" +#include "CppUnit/CppUnitException.h" +#include "CppUnit/Guards.h" +#include "CppUnit/Orthodox.h" +#include "CppUnit/RepeatedTest.h" +#include "CppUnit/Test.h" +#include "CppUnit/TestCaller.h" +#include "CppUnit/TestCase.h" +#include "CppUnit/TestDecorator.h" +#include "CppUnit/TestFailure.h" +#include "CppUnit/TestResult.h" +#include "CppUnit/TestRunner.h" +#include "CppUnit/TestSetup.h" +#include "CppUnit/TestSuite.h" +#include "CppUnit/TextTestResult.h" +#include "CppUnit/estring.h" +#endif + +export module CppUnit; + +export namespace CppUnit { + #ifdef ENABLE_CPPUNIT + using CppUnit::CppUnitException; + using CppUnit::Orthodox; + using CppUnit::RepeatedTest; + using CppUnit::Test; + using CppUnit::TestCaller; + using CppUnit::TestCase; + using CppUnit::TestDecorator; + using CppUnit::TestFailure; + using CppUnit::TestResult; + using CppUnit::TestRunner; + using CppUnit::TestSetup; + using CppUnit::TestSuite; + using CppUnit::TextTestResult; + using CppUnit::estring; + #endif +} diff --git a/modules/Poco.cppm b/modules/Poco.cppm new file mode 100644 index 000000000..dbab82ff5 --- /dev/null +++ b/modules/Poco.cppm @@ -0,0 +1,67 @@ +// +// Poco.cppm +// +// C++ module file, re-exporting all other modules +// +// Copyright (c) 2025, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + +export module Poco; + +#ifdef ENABLE_FOUNDATION +export import Poco.Foundation; +#endif +#ifdef ENABLE_ACTIVERECORD +export import Poco.ActiveRecord; +#endif +#ifdef ENABLE_CPPPARSER +export import Poco.CppParser; +#endif +#ifdef ENABLE_CRYPTO +export import Poco.Crypto; +#endif +#ifdef ENABLE_DNSSD +export import Poco.DNSSD; +#endif +#ifdef ENABLE_DATA +export import Poco.Data; +#endif +#ifdef ENABLE_DYNAMIC +export import Poco.Dynamic; +#endif +#ifdef ENABLE_JSON +export import Poco.JSON; +#endif +#ifdef ENABLE_JWT +export import Poco.JWT; +#endif +#ifdef ENABLE_MONGODB +export import Poco.MongoDB; +#endif +#ifdef ENABLE_NET +export import Poco.Net; +#endif +#ifdef ENABLE_PDF +export import Poco.PDF; +#endif +#ifdef ENABLE_PROMETHEUS +export import Poco.Prometheus; +#endif +#ifdef ENABLE_REDIS +export import Poco.Redis; +#endif +#ifdef ENABLE_SEVENZIP +export import Poco.SevenZip; +#endif +#ifdef ENABLE_UTIL +export import Poco.Util; +#endif +#ifdef ENABLE_XML +export import Poco.XML; +#endif +#ifdef ENABLE_ZIP +export import Poco.Zip; +#endif diff --git a/modules/Poco/ActiveRecord.cppm b/modules/Poco/ActiveRecord.cppm new file mode 100644 index 000000000..0be591294 --- /dev/null +++ b/modules/Poco/ActiveRecord.cppm @@ -0,0 +1,37 @@ +// +// ActiveRecord.cppm +// +// C++ module file +// +// Copyright (c) 2025, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + +module; + +#ifdef ENABLE_ACTIVERECORD +#include "Poco/ActiveRecord/ActiveRecord.h" +#include "Poco/ActiveRecord/ActiveRecordLib.h" +#include "Poco/ActiveRecord/Context.h" +#include "Poco/ActiveRecord/IDTraits.h" +#include "Poco/ActiveRecord/Query.h" +#include "Poco/ActiveRecord/StatementPlaceholderProvider.h" +#endif + +export module Poco.ActiveRecord; + +export namespace Poco::ActiveRecord { + #ifdef ENABLE_ACTIVERECORD + using Poco::ActiveRecord::ActiveRecord; + using Poco::ActiveRecord::ActiveRecordBase; + using Poco::ActiveRecord::Context; + using Poco::ActiveRecord::DefaultStatementPlaceholderProvider; + using Poco::ActiveRecord::IDTraits; + using Poco::ActiveRecord::KeylessActiveRecord; + using Poco::ActiveRecord::PostgresStatementPlaceholderProvider; + using Poco::ActiveRecord::Query; + using Poco::ActiveRecord::StatementPlaceholderProvider; + #endif +} diff --git a/modules/Poco/CppParser.cppm b/modules/Poco/CppParser.cppm new file mode 100644 index 000000000..ee73ebea6 --- /dev/null +++ b/modules/Poco/CppParser.cppm @@ -0,0 +1,65 @@ +// +// CppParser.cppm +// +// C++ module file +// +// Copyright (c) 2025, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + +module; + +#ifdef ENABLE_CPPPARSER +#include "Poco/CppParser/Attributes.h" +#include "Poco/CppParser/BuiltIn.h" +#include "Poco/CppParser/CppParser.h" +#include "Poco/CppParser/CppToken.h" +#include "Poco/CppParser/Decl.h" +#include "Poco/CppParser/Enum.h" +#include "Poco/CppParser/EnumValue.h" +#include "Poco/CppParser/Function.h" +#include "Poco/CppParser/NameSpace.h" +#include "Poco/CppParser/Parameter.h" +#include "Poco/CppParser/Parser.h" +#include "Poco/CppParser/Struct.h" +#include "Poco/CppParser/Symbol.h" +#include "Poco/CppParser/Tokenizer.h" +#include "Poco/CppParser/TypeDef.h" +#include "Poco/CppParser/Utility.h" +#include "Poco/CppParser/Variable.h" +#endif + +export module Poco.CppParser; + +export namespace Poco::CppParser { + #ifdef ENABLE_CPPPARSER + using Poco::CppParser::Attributes; + using Poco::CppParser::AttributesParser; + using Poco::CppParser::BuiltIn; + using Poco::CppParser::CharLiteralToken; + using Poco::CppParser::CommentToken; + using Poco::CppParser::CppToken; + using Poco::CppParser::Decl; + using Poco::CppParser::Enum; + using Poco::CppParser::EnumValue; + using Poco::CppParser::Function; + using Poco::CppParser::IdentifierToken; + using Poco::CppParser::NameSpace; + using Poco::CppParser::NumberLiteralToken; + using Poco::CppParser::OperatorToken; + using Poco::CppParser::Parameter; + using Poco::CppParser::Parser; + using Poco::CppParser::PreprocessorToken; + using Poco::CppParser::StringLiteralToken; + using Poco::CppParser::Struct; + using Poco::CppParser::Symbol; + using Poco::CppParser::Tokenizer; + using Poco::CppParser::TypeDef; + using Poco::CppParser::Utility; + using Poco::CppParser::Variable; + + using Poco::CppParser::replace; + #endif +} diff --git a/modules/Poco/Crypto.cppm b/modules/Poco/Crypto.cppm new file mode 100644 index 000000000..4cd22c9c2 --- /dev/null +++ b/modules/Poco/Crypto.cppm @@ -0,0 +1,84 @@ +// +// Crypto.cppm +// +// C++ module file +// +// Copyright (c) 2025, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + +module; + +#ifdef ENABLE_CRYPTO +#include "Poco/Crypto/CipherFactory.h" +#include "Poco/Crypto/Cipher.h" +#include "Poco/Crypto/CipherImpl.h" +#include "Poco/Crypto/CipherKey.h" +#include "Poco/Crypto/CipherKeyImpl.h" +#include "Poco/Crypto/CryptoException.h" +#include "Poco/Crypto/Crypto.h" +#include "Poco/Crypto/CryptoStream.h" +#include "Poco/Crypto/CryptoTransform.h" +#include "Poco/Crypto/DigestEngine.h" +#include "Poco/Crypto/ECDSADigestEngine.h" +#include "Poco/Crypto/ECKey.h" +#include "Poco/Crypto/ECKeyImpl.h" +#include "Poco/Crypto/Envelope.h" +#include "Poco/Crypto/EVPCipherImpl.h" +#include "Poco/Crypto/EVPPKey.h" +#include "Poco/Crypto/KeyPair.h" +#include "Poco/Crypto/KeyPairImpl.h" +#include "Poco/Crypto/OpenSSLInitializer.h" +#include "Poco/Crypto/PKCS12Container.h" +#include "Poco/Crypto/RSACipherImpl.h" +#include "Poco/Crypto/RSADigestEngine.h" +#include "Poco/Crypto/RSAKey.h" +#include "Poco/Crypto/RSAKeyImpl.h" +#include "Poco/Crypto/X509Certificate.h" +#endif + +export module Poco.Crypto; + +export namespace Poco::Crypto { + #ifdef ENABLE_CRYPTO + using Poco::Crypto::Cipher; + using Poco::Crypto::CipherFactory; + using Poco::Crypto::CipherKey; + using Poco::Crypto::CipherKeyImpl; + using Poco::Crypto::CryptoException; + using Poco::Crypto::CryptoIOS; + using Poco::Crypto::CipherImpl; + using Poco::Crypto::CryptoInputStream; + using Poco::Crypto::CryptoOutputStream; + using Poco::Crypto::CryptoStreamBuf; + using Poco::Crypto::CryptoTransform; + using Poco::Crypto::DecryptingInputStream; + using Poco::Crypto::DecryptingOutputStream; + using Poco::Crypto::DigestEngine; + using Poco::Crypto::ECDSADigestEngine; + using Poco::Crypto::ECDSASignature; + using Poco::Crypto::ECKey; + using Poco::Crypto::ECKeyImpl; + using Poco::Crypto::EVPCipherImpl; + using Poco::Crypto::EVPPKey; + using Poco::Crypto::EncryptingInputStream; + using Poco::Crypto::EncryptingOutputStream; + using Poco::Crypto::Envelope; + using Poco::Crypto::KeyPair; + using Poco::Crypto::KeyPairImpl; + using Poco::Crypto::OpenSSLException; + using Poco::Crypto::OpenSSLInitializer; + using Poco::Crypto::PKCS12Container; + using Poco::Crypto::RSACipherImpl; + using Poco::Crypto::RSADigestEngine; + using Poco::Crypto::RSAKey; + using Poco::Crypto::RSAKeyImpl; + using Poco::Crypto::X509Certificate; + + using Poco::Crypto::getError; + using Poco::Crypto::initializeCrypto; + using Poco::Crypto::uninitializeCrypto; + #endif +} diff --git a/modules/Poco/DNSSD.cppm b/modules/Poco/DNSSD.cppm new file mode 100644 index 000000000..b970beb77 --- /dev/null +++ b/modules/Poco/DNSSD.cppm @@ -0,0 +1,53 @@ +// +// DNSSD.cppm +// +// C++ module file +// +// Copyright (c) 2025, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + +module; + +#ifdef ENABLE_DNSSD +#include "Poco/DNSSD/DNSSD.h" +#include "Poco/DNSSD/DNSSDBrowser.h" +#include "Poco/DNSSD/DNSSDException.h" +#include "Poco/DNSSD/DNSSDResponder.h" +#include "Poco/DNSSD/DNSSDResponderImpl.h" +#include "Poco/DNSSD/Domain.h" +#include "Poco/DNSSD/Error.h" +#include "Poco/DNSSD/Record.h" +#include "Poco/DNSSD/Service.h" +#endif + +export module Poco.DNSSD; + +#ifdef ENABLE_DNSSD_AVAHI +export import :Avahi; +#endif +#ifdef ENABLE_DNSSD_BONJOUR +export import :Bonjour; +#endif + +export namespace Poco::DNSSD { + #ifdef ENABLE_DNSSD + using Poco::DNSSD::DNSSDBrowser; + using Poco::DNSSD::DNSSDException; + using Poco::DNSSD::DNSSDResponder; + using Poco::DNSSD::DNSSDResponderImpl; + using Poco::DNSSD::DNSSDResponderImplFactory; + using Poco::DNSSD::Domain; + using Poco::DNSSD::Error; + using Poco::DNSSD::HandleType; + using Poco::DNSSD::OpaqueHandle; + using Poco::DNSSD::Record; + using Poco::DNSSD::Service; + + using Poco::DNSSD::BrowserHandle; + using Poco::DNSSD::RecordHandle; + using Poco::DNSSD::ServiceHandle; + #endif +} diff --git a/modules/Poco/DNSSD/Avahi.cppm b/modules/Poco/DNSSD/Avahi.cppm new file mode 100644 index 000000000..ea5dbdee0 --- /dev/null +++ b/modules/Poco/DNSSD/Avahi.cppm @@ -0,0 +1,35 @@ +// +// Avahi.cppm +// +// C++ module file +// +// Copyright (c) 2025, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + +module; + +#ifdef ENABLE_DNSSD_AVAHI +#include "Poco/DNSSD/Avahi/Avahi.h" +#include "Poco/DNSSD/Avahi/AvahiBrowserImpl.h" +#include "Poco/DNSSD/Avahi/AvahiResponderImpl.h" +#endif + +export module Poco.DNSSD:Avahi; + +export namespace Poco::DNSSD { + #ifdef ENABLE_DNSSD + using Poco::DNSSD::initializeDNSSD; + using Poco::DNSSD::uninitializeDNSSD; + #endif + + namespace Avahi { + #ifdef ENABLE_DNSSD_AVAHI + using Poco::DNSSD::Avahi::AvahiBrowserImpl; + using Poco::DNSSD::Avahi::AvahiResponderImpl; + using Poco::DNSSD::Avahi::AvahiResponderImplFactory; + #endif + } +} diff --git a/modules/Poco/DNSSD/Bonjour.cppm b/modules/Poco/DNSSD/Bonjour.cppm new file mode 100644 index 000000000..457ad8b18 --- /dev/null +++ b/modules/Poco/DNSSD/Bonjour.cppm @@ -0,0 +1,37 @@ +// +// Bonjour.cppm +// +// C++ module file +// +// Copyright (c) 2025, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + +module; + +#ifdef ENABLE_DNSSD_BONJOUR +#include "Poco/DNSSD/Bonjour/Bonjour.h" +#include "Poco/DNSSD/Bonjour/BonjourBrowserImpl.h" +#include "Poco/DNSSD/Bonjour/BonjourResponderImpl.h" +#include "Poco/DNSSD/Bonjour/EventLoop.h" +#endif + +export module Poco.DNSSD:Bonjour; + +export namespace Poco::DNSSD { + #ifdef ENABLE_DNSSD + using Poco::DNSSD::initializeDNSSD; + using Poco::DNSSD::uninitializeDNSSD; + #endif + + namespace Bonjour { + #ifdef ENABLE_DNSSD_BONJOUR + using Poco::DNSSD::Bonjour::BonjourBrowserImpl; + using Poco::DNSSD::Bonjour::BonjourResponderImpl; + using Poco::DNSSD::Bonjour::BonjourResponderImplFactory; + using Poco::DNSSD::Bonjour::EventLoop; + #endif + } +} diff --git a/modules/Poco/Data.cppm b/modules/Poco/Data.cppm new file mode 100644 index 000000000..e9210e8ef --- /dev/null +++ b/modules/Poco/Data.cppm @@ -0,0 +1,214 @@ +// +// Data.cppm +// +// C++ module file +// +// Copyright (c) 2025, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + +module; + +#ifdef ENABLE_DATA +#include "Poco/Data/AbstractBinder.h" +#include "Poco/Data/AbstractBinding.h" +#include "Poco/Data/AbstractExtraction.h" +#include "Poco/Data/AbstractExtractor.h" +#include "Poco/Data/AbstractPreparation.h" +#include "Poco/Data/AbstractPreparator.h" +#include "Poco/Data/AbstractSessionImpl.h" +#include "Poco/Data/ArchiveStrategy.h" +#include "Poco/Data/AutoTransaction.h" +#include "Poco/Data/Binding.h" +#include "Poco/Data/BulkBinding.h" +#include "Poco/Data/BulkExtraction.h" +#include "Poco/Data/Bulk.h" +#include "Poco/Data/Column.h" +#include "Poco/Data/Connector.h" +#include "Poco/Data/Constants.h" +#include "Poco/Data/DataException.h" +#include "Poco/Data/Data.h" +#include "Poco/Data/Date.h" +#include "Poco/Data/DynamicDateTime.h" +#include "Poco/Data/DynamicLOB.h" +#include "Poco/Data/Extraction.h" +#include "Poco/Data/JSONRowFormatter.h" +#include "Poco/Data/Limit.h" +#include "Poco/Data/LOB.h" +#include "Poco/Data/LOBStream.h" +#include "Poco/Data/MetaColumn.h" +#include "Poco/Data/PooledSessionHolder.h" +#include "Poco/Data/PooledSessionImpl.h" +#include "Poco/Data/Position.h" +#include "Poco/Data/Preparation.h" +#include "Poco/Data/Range.h" +#include "Poco/Data/RecordSet.h" +#include "Poco/Data/RowFilter.h" +#include "Poco/Data/RowFormatter.h" +#include "Poco/Data/Row.h" +#include "Poco/Data/RowIterator.h" +#include "Poco/Data/SessionFactory.h" +#include "Poco/Data/Session.h" +#include "Poco/Data/SessionImpl.h" +#include "Poco/Data/SessionPoolContainer.h" +#include "Poco/Data/SessionPool.h" +#include "Poco/Data/SimpleRowFormatter.h" +#include "Poco/Data/SQLChannel.h" +#include "Poco/Data/StatementCreator.h" +#include "Poco/Data/Statement.h" +#include "Poco/Data/StatementImpl.h" +#include "Poco/Data/Time.h" +#include "Poco/Data/Transaction.h" +#include "Poco/Data/Transcoder.h" +#include "Poco/Data/TypeHandler.h" +#endif + +export module Poco.Data; + +#ifdef ENABLE_DATA_MYSQL +export import :MySQL; +#endif +#ifdef ENABLE_DATA_ODBC +export import :ODBC; +#endif +#ifdef ENABLE_DATA_POSTGRESQL +export import :PostgreSQL; +#endif +#ifdef ENABLE_DATA_SQLITE +export import :SQLite; +#endif + +export namespace Poco::Data { + #ifdef ENABLE_DATA + using Poco::Data::AbstractBinder; + using Poco::Data::AbstractBinding; + using Poco::Data::AbstractExtraction; + using Poco::Data::AbstractExtractor; + using Poco::Data::AbstractPreparation; + using Poco::Data::AbstractPreparator; + using Poco::Data::AbstractTypeHandler; + using Poco::Data::ArchiveByAgeStrategy; + using Poco::Data::ArchiveStrategy; + using Poco::Data::Binding; + using Poco::Data::BindingException; + using Poco::Data::Bulk; + using Poco::Data::BulkBinding; + using Poco::Data::BulkExtraction; + using Poco::Data::Column; + using Poco::Data::ConnectionFailedException; + using Poco::Data::Connector; + using Poco::Data::CopyBinding; + using Poco::Data::DataException; + using Poco::Data::Date; + using Poco::Data::ExecutionException; + using Poco::Data::ExtractException; + using Poco::Data::Extraction; + using Poco::Data::InternalBulkExtraction; + using Poco::Data::InternalExtraction; + using Poco::Data::JSONRowFormatter; + using Poco::Data::LOB; + using Poco::Data::LOBIOS; + using Poco::Data::LOBInputStream; + using Poco::Data::LOBOutputStream; + using Poco::Data::LOBStreamBuf; + using Poco::Data::LengthExceededException; + using Poco::Data::Limit; + using Poco::Data::LimitException; + using Poco::Data::MetaColumn; + using Poco::Data::NoDataException; + using Poco::Data::NotConnectedException; + using Poco::Data::NotSupportedException; + using Poco::Data::PooledSessionHolder; + using Poco::Data::Position; + using Poco::Data::Preparation; + using Poco::Data::Range; + using Poco::Data::RecordSet; + using Poco::Data::Row; + using Poco::Data::RowDataMissingException; + using Poco::Data::RowFilter; + using Poco::Data::RowFormatter; + using Poco::Data::RowIterator; + using Poco::Data::SQLChannel; + using Poco::Data::Session; + using Poco::Data::SessionFactory; + using Poco::Data::SessionPool; + using Poco::Data::SessionPoolContainer; + using Poco::Data::SessionPoolExhaustedException; + using Poco::Data::SessionPoolExistsException; + using Poco::Data::SessionUnavailableException; + using Poco::Data::SimpleRowFormatter; + using Poco::Data::Statement; + using Poco::Data::StatementCreator; + using Poco::Data::Time; + using Poco::Data::Transaction; + using Poco::Data::Transcoder; + using Poco::Data::TypeHandler; + using Poco::Data::UnknownDataBaseException; + using Poco::Data::UnknownTypeException; + + #ifdef POCO_MODULES_EXPORT_IMPL + using Poco::Data::PooledSessionImpl; + using Poco::Data::SessionImpl; + using Poco::Data::StatementImpl; + #endif + + using Poco::Data::BulkFnType; + using Poco::Data::AbstractBindingDeq; + using Poco::Data::AbstractBindingLst; + using Poco::Data::AbstractBindingVec; + using Poco::Data::AbstractExtractionDeq; + using Poco::Data::AbstractExtractionDeqVec; + using Poco::Data::AbstractExtractionLst; + using Poco::Data::AbstractExtractionLst; + using Poco::Data::AbstractExtractionLstVec; + using Poco::Data::AbstractExtractionVec; + using Poco::Data::AbstractExtractionVecVec; + using Poco::Data::AutoTransaction; + using Poco::Data::BLOB; + using Poco::Data::BLOBInputStream; + using Poco::Data::BLOBOutputStream; + using Poco::Data::CLOB; + using Poco::Data::CLOBInputStream; + using Poco::Data::CLOBOutputStream; + using Poco::Data::JSON; + using Poco::Data::NullData; + + using Poco::Data::POCO_DATA_INVALID_ROW; + + using Poco::Data::operator<<; + using Poco::Data::swap; + using Poco::Data::tupleBind; + using Poco::Data::tupleExtract; + using Poco::Data::tuplePrepare; + + namespace Keywords { + using Poco::Data::Keywords::async; + using Poco::Data::Keywords::bind; + using Poco::Data::Keywords::bulk; + using Poco::Data::Keywords::deque; + using Poco::Data::Keywords::format; + using Poco::Data::Keywords::from; + using Poco::Data::Keywords::in; + using Poco::Data::Keywords::into; + using Poco::Data::Keywords::io; + using Poco::Data::Keywords::limit; + using Poco::Data::Keywords::list; + using Poco::Data::Keywords::lowerLimit; + using Poco::Data::Keywords::now; + using Poco::Data::Keywords::out; + using Poco::Data::Keywords::range; + using Poco::Data::Keywords::reset; + using Poco::Data::Keywords::sync; + using Poco::Data::Keywords::upperLimit; + using Poco::Data::Keywords::use; + using Poco::Data::Keywords::useRef; + using Poco::Data::Keywords::vector; + } + + namespace Test { + // using Poco::Data::Test::SQLExecutor; + } + #endif +} diff --git a/modules/Poco/Data/MySQL.cppm b/modules/Poco/Data/MySQL.cppm new file mode 100644 index 000000000..9977c07ce --- /dev/null +++ b/modules/Poco/Data/MySQL.cppm @@ -0,0 +1,46 @@ +// +// MySQL.cppm +// +// C++ module file +// +// Copyright (c) 2025, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + +module; + +#ifdef ENABLE_DATA_MYSQL +#include "Poco/Data/MySQL/Binder.h" +#include "Poco/Data/MySQL/Connector.h" +#include "Poco/Data/MySQL/Extractor.h" +#include "Poco/Data/MySQL/MySQLException.h" +#include "Poco/Data/MySQL/MySQL.h" +#include "Poco/Data/MySQL/MySQLStatementImpl.h" +#include "Poco/Data/MySQL/ResultMetadata.h" +#include "Poco/Data/MySQL/SessionHandle.h" +#include "Poco/Data/MySQL/SessionImpl.h" +#include "Poco/Data/MySQL/StatementExecutor.h" +#include "Poco/Data/MySQL/Utility.h" +#endif + +export module Poco.Data:MySQL; + +export namespace Poco::Data::MySQL { + #ifdef ENABLE_DATA_MYSQL + using Poco::Data::MySQL::Binder; + using Poco::Data::MySQL::ConnectionException; + using Poco::Data::MySQL::Connector; + using Poco::Data::MySQL::Extractor; + using Poco::Data::MySQL::MySQLException; + using Poco::Data::MySQL::MySQLStatementImpl; + using Poco::Data::MySQL::ResultMetadata; + using Poco::Data::MySQL::SessionHandle; + using Poco::Data::MySQL::SessionImpl; + using Poco::Data::MySQL::StatementException; + using Poco::Data::MySQL::StatementExecutor; + using Poco::Data::MySQL::TransactionException; + using Poco::Data::MySQL::Utility; + #endif +} diff --git a/modules/Poco/Data/ODBC.cppm b/modules/Poco/Data/ODBC.cppm new file mode 100644 index 000000000..dea37ff3b --- /dev/null +++ b/modules/Poco/Data/ODBC.cppm @@ -0,0 +1,116 @@ +// +// ODBC.cppm +// +// C++ module file +// +// Copyright (c) 2025, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + +module; + +#ifdef ENABLE_DATA_ODBC +#include "Poco/Data/ODBC/Binder.h" +#include "Poco/Data/ODBC/ConnectionHandle.h" +#include "Poco/Data/ODBC/Connector.h" +#include "Poco/Data/ODBC/Diagnostics.h" +#include "Poco/Data/ODBC/EnvironmentHandle.h" +#include "Poco/Data/ODBC/Error.h" +#include "Poco/Data/ODBC/Extractor.h" +#include "Poco/Data/ODBC/Handle.h" +#include "Poco/Data/ODBC/ODBCException.h" +#include "Poco/Data/ODBC/ODBC.h" +#include "Poco/Data/ODBC/ODBCMetaColumn.h" +#include "Poco/Data/ODBC/ODBCStatementImpl.h" +#include "Poco/Data/ODBC/Parameter.h" +#include "Poco/Data/ODBC/Preparator.h" +#include "Poco/Data/ODBC/SessionImpl.h" +#include "Poco/Data/ODBC/TypeInfo.h" +#include "Poco/Data/ODBC/Unicode.h" +#include "Poco/Data/ODBC/Unicode_UNIXODBC.h" +#include "Poco/Data/ODBC/Unicode_WIN32.h" +#include "Poco/Data/ODBC/Utility.h" +#endif + +export module Poco.Data:ODBC; + +export namespace Poco::Data::ODBC { + #ifdef ENABLE_DATA_ODBC + using Poco::Data::ODBC::Binder; + using Poco::Data::ODBC::ConnectionHandle; + using Poco::Data::ODBC::Connector; + using Poco::Data::ODBC::DataTruncatedException; + using Poco::Data::ODBC::Diagnostics; + using Poco::Data::ODBC::EnvironmentHandle; + using Poco::Data::ODBC::Error; + using Poco::Data::ODBC::Extractor; + using Poco::Data::ODBC::Handle; + using Poco::Data::ODBC::HandleException; + using Poco::Data::ODBC::InsufficientStorageException; + using Poco::Data::ODBC::ODBCException; + using Poco::Data::ODBC::ODBCMetaColumn; + using Poco::Data::ODBC::ODBCStatementImpl; + using Poco::Data::ODBC::Parameter; + using Poco::Data::ODBC::Preparator; + using Poco::Data::ODBC::SessionImpl; + using Poco::Data::ODBC::TypeInfo; + using Poco::Data::ODBC::UnknownDataLengthException; + using Poco::Data::ODBC::Utility; + + using Poco::Data::ODBC::Connection; + using Poco::Data::ODBC::ConnectionDiagnostics; + using Poco::Data::ODBC::ConnectionError; + using Poco::Data::ODBC::ConnectionException; + using Poco::Data::ODBC::DescriptorDiagnostics; + using Poco::Data::ODBC::DescriptorError; + using Poco::Data::ODBC::DescriptorException; + using Poco::Data::ODBC::EnvironmentDiagnostics; + using Poco::Data::ODBC::EnvironmentError; + using Poco::Data::ODBC::EnvironmentException; + using Poco::Data::ODBC::StatementDiagnostics; + using Poco::Data::ODBC::StatementError; + using Poco::Data::ODBC::StatementException; + + using Poco::Data::ODBC::SQLBrowseConnect; + using Poco::Data::ODBC::SQLColAttribute; + using Poco::Data::ODBC::SQLColAttributes; + using Poco::Data::ODBC::SQLColumnPrivileges; + using Poco::Data::ODBC::SQLColumns; + using Poco::Data::ODBC::SQLConnect; + using Poco::Data::ODBC::SQLDataSources; + using Poco::Data::ODBC::SQLDescribeCol; + using Poco::Data::ODBC::SQLDriverConnect; + using Poco::Data::ODBC::SQLDrivers; + using Poco::Data::ODBC::SQLError; + using Poco::Data::ODBC::SQLExecDirect; + using Poco::Data::ODBC::SQLForeignKeys; + using Poco::Data::ODBC::SQLGetConnectAttr; + using Poco::Data::ODBC::SQLGetConnectOption; + using Poco::Data::ODBC::SQLGetCursorName; + using Poco::Data::ODBC::SQLGetDescField; + using Poco::Data::ODBC::SQLGetDescRec; + using Poco::Data::ODBC::SQLGetDiagField; + using Poco::Data::ODBC::SQLGetDiagRec; + using Poco::Data::ODBC::SQLGetInfo; + using Poco::Data::ODBC::SQLGetStmtAttr; + using Poco::Data::ODBC::SQLGetTypeInfo; + using Poco::Data::ODBC::SQLNativeSql; + using Poco::Data::ODBC::SQLPrepare; + using Poco::Data::ODBC::SQLPrimaryKeys; + using Poco::Data::ODBC::SQLProcedureColumns; + using Poco::Data::ODBC::SQLProcedures; + using Poco::Data::ODBC::SQLSetConnectAttr; + using Poco::Data::ODBC::SQLSetConnectOption; + using Poco::Data::ODBC::SQLSetCursorName; + using Poco::Data::ODBC::SQLSetDescField; + using Poco::Data::ODBC::SQLSetStmtAttr; + using Poco::Data::ODBC::SQLSpecialColumns; + using Poco::Data::ODBC::SQLStatistics; + using Poco::Data::ODBC::SQLTablePrivileges; + using Poco::Data::ODBC::SQLTables; + using Poco::Data::ODBC::isString; + using Poco::Data::ODBC::stringLength; + #endif +} diff --git a/modules/Poco/Data/PostgreSQL.cppm b/modules/Poco/Data/PostgreSQL.cppm new file mode 100644 index 000000000..76887da3f --- /dev/null +++ b/modules/Poco/Data/PostgreSQL.cppm @@ -0,0 +1,59 @@ +// +// PostgreSQL.cppm +// +// C++ module file +// +// Copyright (c) 2025, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + +module; + +#ifdef ENABLE_DATA_POSTGRESQL +#include "Poco/Data/PostgreSQL/BinaryExtractor.h" +#include "Poco/Data/PostgreSQL/Binder.h" +#include "Poco/Data/PostgreSQL/Connector.h" +#include "Poco/Data/PostgreSQL/Extractor.h" +#include "Poco/Data/PostgreSQL/PostgreSQL.h" +#include "Poco/Data/PostgreSQL/PostgreSQLException.h" +#include "Poco/Data/PostgreSQL/PostgreSQLStatementImpl.h" +#include "Poco/Data/PostgreSQL/PostgreSQLTypes.h" +#include "Poco/Data/PostgreSQL/SessionHandle.h" +#include "Poco/Data/PostgreSQL/SessionImpl.h" +#include "Poco/Data/PostgreSQL/StatementExecutor.h" +#include "Poco/Data/PostgreSQL/Utility.h" +#endif + +export module Poco.Data:PostgreSQL; + +export namespace Poco::Data::PostgreSQL { + #ifdef ENABLE_DATA_POSTGRESQL + using Poco::Data::PostgreSQL::BinaryExtractor; + using Poco::Data::PostgreSQL::Binder; + using Poco::Data::PostgreSQL::ConnectionException; + using Poco::Data::PostgreSQL::Connector; + using Poco::Data::PostgreSQL::Extractor; + using Poco::Data::PostgreSQL::InputParameter; + using Poco::Data::PostgreSQL::OutputParameter; + using Poco::Data::PostgreSQL::PGCancelFree; + using Poco::Data::PostgreSQL::PQConnectionInfoOptionsFree; + using Poco::Data::PostgreSQL::PQResultClear; + using Poco::Data::PostgreSQL::PostgreSQLException; + using Poco::Data::PostgreSQL::PostgreSQLStatementImpl; + using Poco::Data::PostgreSQL::SessionHandle; + using Poco::Data::PostgreSQL::SessionImpl; + using Poco::Data::PostgreSQL::SessionParameters; + using Poco::Data::PostgreSQL::StatementException; + using Poco::Data::PostgreSQL::StatementExecutor; + using Poco::Data::PostgreSQL::TransactionException; + using Poco::Data::PostgreSQL::Utility; + + using Poco::Data::PostgreSQL::InputParameterVector; + using Poco::Data::PostgreSQL::OutputParameterVector; + using Poco::Data::PostgreSQL::SessionParametersMap; + + using Poco::Data::PostgreSQL::oidToColumnDataType; + #endif +} diff --git a/modules/Poco/Data/SQLite.cppm b/modules/Poco/Data/SQLite.cppm new file mode 100644 index 000000000..4d962b764 --- /dev/null +++ b/modules/Poco/Data/SQLite.cppm @@ -0,0 +1,65 @@ +// +// SQLite.cppm +// +// C++ module file +// +// Copyright (c) 2025, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + +module; + +#ifdef ENABLE_DATA_SQLITE +#include "Poco/Data/SQLite/Binder.h" +#include "Poco/Data/SQLite/Connector.h" +#include "Poco/Data/SQLite/Extractor.h" +#include "Poco/Data/SQLite/Notifier.h" +#include "Poco/Data/SQLite/SessionImpl.h" +#include "Poco/Data/SQLite/SQLiteException.h" +#include "Poco/Data/SQLite/SQLite.h" +#include "Poco/Data/SQLite/SQLiteStatementImpl.h" +#include "Poco/Data/SQLite/Utility.h" +#endif + +export module Poco.Data:SQLite; + +export namespace Poco::Data::SQLite { + #ifdef ENABLE_DATA_SQLITE + using Poco::Data::SQLite::AuthorizationDeniedException; + using Poco::Data::SQLite::Binder; + using Poco::Data::SQLite::CantOpenDBFileException; + using Poco::Data::SQLite::Connector; + using Poco::Data::SQLite::ConstraintViolationException; + using Poco::Data::SQLite::CorruptImageException; + using Poco::Data::SQLite::DBAccessDeniedException; + using Poco::Data::SQLite::DBLockedException; + using Poco::Data::SQLite::DataTypeMismatchException; + using Poco::Data::SQLite::DatabaseFullException; + using Poco::Data::SQLite::ExecutionAbortedException; + using Poco::Data::SQLite::Extractor; + using Poco::Data::SQLite::IOErrorException; + using Poco::Data::SQLite::InternalDBErrorException; + using Poco::Data::SQLite::InterruptException; + using Poco::Data::SQLite::InvalidLibraryUseException; + using Poco::Data::SQLite::InvalidSQLStatementException; + using Poco::Data::SQLite::LockProtocolException; + using Poco::Data::SQLite::NoMemoryException; + using Poco::Data::SQLite::Notifier; + using Poco::Data::SQLite::OSFeaturesMissingException; + using Poco::Data::SQLite::ParameterCountMismatchException; + using Poco::Data::SQLite::ReadOnlyException; + using Poco::Data::SQLite::RowTooBigException; + using Poco::Data::SQLite::SQLiteException; + using Poco::Data::SQLite::SQLiteStatementImpl; + using Poco::Data::SQLite::SchemaDiffersException; + using Poco::Data::SQLite::SessionImpl; + using Poco::Data::SQLite::TableLockedException; + using Poco::Data::SQLite::TableNotFoundException; + using Poco::Data::SQLite::TransactionException; + using Poco::Data::SQLite::Utility; + + using Poco::Data::SQLite::TransactionType; + #endif +} \ No newline at end of file diff --git a/modules/Poco/Dynamic.cppm b/modules/Poco/Dynamic.cppm new file mode 100644 index 000000000..922c72d4a --- /dev/null +++ b/modules/Poco/Dynamic.cppm @@ -0,0 +1,64 @@ +// +// Dynamic.cppm +// +// C++ module file +// +// Copyright (c) 2025, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + +module; + +#ifdef ENABLE_FOUNDATION +#include "Poco/Dynamic/Pair.h" +#include "Poco/Dynamic/Struct.h" +#include "Poco/Dynamic/Var.h" +#include "Poco/Dynamic/VarHolder.h" +#include "Poco/Dynamic/VarIterator.h" +#include "Poco/Dynamic/VarVisitor.h" +#endif + +export module Poco.Dynamic; + +export namespace Poco::Dynamic { + #ifdef ENABLE_FOUNDATION + using Poco::Dynamic::Pair; + using Poco::Dynamic::Struct; + using Poco::Dynamic::Var; + using Poco::Dynamic::VarHolder; + using Poco::Dynamic::VarHolderImpl; + using Poco::Dynamic::VarIterator; + using Poco::Dynamic::Visitor; + + using Poco::Dynamic::Array; + using Poco::Dynamic::Deque; + using Poco::Dynamic::List; + using Poco::Dynamic::Vector; + + using Poco::Dynamic::operator!=; + using Poco::Dynamic::operator*; + using Poco::Dynamic::operator*=; + using Poco::Dynamic::operator+; + using Poco::Dynamic::operator+=; + using Poco::Dynamic::operator-; + using Poco::Dynamic::operator-=; + using Poco::Dynamic::operator/; + using Poco::Dynamic::operator/=; + using Poco::Dynamic::operator<; + using Poco::Dynamic::operator<=; + using Poco::Dynamic::operator==; + using Poco::Dynamic::operator>; + using Poco::Dynamic::operator>=; + using Poco::Dynamic::structToString; + + namespace Impl { + using Poco::Dynamic::Impl::appendJSONKey; + using Poco::Dynamic::Impl::appendJSONString; + using Poco::Dynamic::Impl::appendJSONValue; + using Poco::Dynamic::Impl::containerToJSON; + using Poco::Dynamic::Impl::isJSONString; + } + #endif +} diff --git a/modules/Poco/Foundation.cppm b/modules/Poco/Foundation.cppm new file mode 100644 index 000000000..e58e1f4a3 --- /dev/null +++ b/modules/Poco/Foundation.cppm @@ -0,0 +1,872 @@ +// +// Foundation.cppm +// +// C++ module file +// +// Copyright (c) 2025, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + +module; + +#ifdef ENABLE_FOUNDATION +#include "Poco/AbstractCache.h" +#include "Poco/AbstractDelegate.h" +#include "Poco/AbstractEvent.h" +#include "Poco/AbstractObserver.h" +#include "Poco/AbstractPriorityDelegate.h" +#include "Poco/AbstractStrategy.h" +#include "Poco/AccessExpirationDecorator.h" +#include "Poco/AccessExpireCache.h" +#include "Poco/AccessExpireLRUCache.h" +#include "Poco/AccessExpireStrategy.h" +#include "Poco/ActiveDispatcher.h" +#include "Poco/ActiveMethod.h" +#include "Poco/ActiveResult.h" +#include "Poco/ActiveRunnable.h" +#include "Poco/ActiveStarter.h" +#include "Poco/ActiveThreadPool.h" +#include "Poco/Activity.h" +#include "Poco/Any.h" +#include "Poco/ArchiveStrategy.h" +#include "Poco/Array.h" +#include "Poco/ASCIIEncoding.h" +#include "Poco/Ascii.h" +#include "Poco/AsyncChannel.h" +#include "Poco/AsyncNotificationCenter.h" +#include "Poco/AsyncObserver.h" +#include "Poco/AtomicCounter.h" +#include "Poco/AtomicFlag.h" +#include "Poco/AutoPtr.h" +#include "Poco/AutoReleasePool.h" +#include "Poco/Base32Decoder.h" +#include "Poco/Base32Encoder.h" +#include "Poco/Base64Decoder.h" +#include "Poco/Base64Encoder.h" +#include "Poco/BasicEvent.h" +#include "Poco/BinaryReader.h" +#include "Poco/BinaryWriter.h" +#include "Poco/BufferAllocator.h" +#include "Poco/BufferedBidirectionalStreamBuf.h" +#include "Poco/BufferedStreamBuf.h" +#include "Poco/Buffer.h" +#include "Poco/Bugcheck.h" +#include "Poco/ByteOrder.h" +#include "Poco/Channel.h" +#include "Poco/Checksum.h" +#include "Poco/ClassLoader.h" +#include "Poco/Clock.h" +#include "Poco/Condition.h" +#include "Poco/Configurable.h" +#include "Poco/ConsoleChannel.h" +#include "Poco/CountingStream.h" +#include "Poco/DataURIStreamFactory.h" +#include "Poco/DataURIStream.h" +#include "Poco/DateTimeFormat.h" +#include "Poco/DateTimeFormatter.h" +#include "Poco/DateTime.h" +#include "Poco/DateTimeParser.h" +#include "Poco/Debugger.h" +#include "Poco/DefaultStrategy.h" +#include "Poco/DeflatingStream.h" +#include "Poco/Delegate.h" +#include "Poco/DigestEngine.h" +#include "Poco/DigestStream.h" +#include "Poco/DirectoryIterator.h" +#include "Poco/DirectoryIteratorStrategy.h" +#include "Poco/DirectoryWatcher.h" +#ifdef ENABLE_ENCODINGS +#include "Poco/DoubleByteEncoding.h" +#endif +#include "Poco/DynamicFactory.h" +#ifdef ENABLE_ENCODINGS +#include "Poco/Encodings.h" +#endif +#include "Poco/Environment.h" +#include "Poco/Error.h" +#include "Poco/ErrorHandler.h" +#include "Poco/EventArgs.h" +#include "Poco/EventChannel.h" +#include "Poco/Event.h" +#ifdef _WIN32 +#include "Poco/EventLogChannel.h" +#endif +#include "Poco/Exception.h" +#include "Poco/ExpirationDecorator.h" +#include "Poco/ExpireCache.h" +#include "Poco/Expire.h" +#include "Poco/ExpireLRUCache.h" +#include "Poco/ExpireStrategy.h" +#include "Poco/FIFOBuffer.h" +#include "Poco/FIFOBufferStream.h" +#include "Poco/FIFOEvent.h" +#include "Poco/FIFOStrategy.h" +#include "Poco/FileChannel.h" +#include "Poco/File.h" +#include "Poco/FileStreamFactory.h" +#include "Poco/FileStream.h" +#include "Poco/FileStreamRWLock.h" +#include "Poco/Format.h" +#include "Poco/Formatter.h" +#include "Poco/FormattingChannel.h" +#include "Poco/Foundation.h" +#include "Poco/FPEnvironment.h" +#include "Poco/FunctionDelegate.h" +#include "Poco/FunctionPriorityDelegate.h" +#include "Poco/Glob.h" +#include "Poco/HashFunction.h" +#include "Poco/Hash.h" +#include "Poco/HashMap.h" +#include "Poco/HashSet.h" +#include "Poco/HashStatistic.h" +#include "Poco/HashTable.h" +#include "Poco/HexBinaryDecoder.h" +#include "Poco/HexBinaryEncoder.h" +#include "Poco/HMACEngine.h" +#include "Poco/InflatingStream.h" +#include "Poco/Instantiator.h" +#ifdef ENABLE_ENCODINGS +#include "Poco/ISO8859_10Encoding.h" +#include "Poco/ISO8859_11Encoding.h" +#include "Poco/ISO8859_13Encoding.h" +#include "Poco/ISO8859_14Encoding.h" +#include "Poco/ISO8859_16Encoding.h" +#include "Poco/ISO8859_3Encoding.h" +#include "Poco/ISO8859_4Encoding.h" +#include "Poco/ISO8859_5Encoding.h" +#include "Poco/ISO8859_6Encoding.h" +#include "Poco/ISO8859_7Encoding.h" +#include "Poco/ISO8859_8Encoding.h" +#include "Poco/ISO8859_9Encoding.h" +#endif +#include "Poco/JSONFormatter.h" +#include "Poco/JSONString.h" +#include "Poco/KeyValueArgs.h" +#include "Poco/Latin1Encoding.h" +#include "Poco/Latin2Encoding.h" +#include "Poco/Latin9Encoding.h" +#include "Poco/LinearHashTable.h" +#include "Poco/LineEndingConverter.h" +#include "Poco/ListMap.h" +#include "Poco/LocalDateTime.h" +#include "Poco/LogFile.h" +#include "Poco/Logger.h" +#include "Poco/LoggingFactory.h" +#include "Poco/LoggingRegistry.h" +#include "Poco/LogStream.h" +#include "Poco/LRUCache.h" +#include "Poco/LRUStrategy.h" +#include "Poco/MacCentralEurRomanEncoding.h" +#include "Poco/MacChineseSimpEncoding.h" +#include "Poco/MacChineseTradEncoding.h" +#include "Poco/MacCyrillicEncoding.h" +#include "Poco/MacJapaneseEncoding.h" +#include "Poco/MacKoreanEncoding.h" +#include "Poco/MacRomanEncoding.h" +#include "Poco/Manifest.h" +#include "Poco/MD4Engine.h" +#include "Poco/MD5Engine.h" +#include "Poco/MemoryPool.h" +#include "Poco/MemoryStream.h" +#include "Poco/Message.h" +#include "Poco/MetaObject.h" +#include "Poco/MetaProgramming.h" +#include "Poco/Mutex.h" +#include "Poco/NamedEvent.h" +#include "Poco/NamedMutex.h" +#include "Poco/NamedTuple.h" +#include "Poco/NestedDiagnosticContext.h" +#include "Poco/NObserver.h" +#include "Poco/NotificationCenter.h" +#include "Poco/Notification.h" +#include "Poco/NotificationQueue.h" +#include "Poco/NotificationStrategy.h" +#include "Poco/Nullable.h" +#include "Poco/NullChannel.h" +#include "Poco/NullStream.h" +#include "Poco/NumberFormatter.h" +#include "Poco/NumberParser.h" +#include "Poco/NumericString.h" +#include "Poco/ObjectPool.h" +#include "Poco/Observer.h" +#include "Poco/Optional.h" +#include "Poco/Path.h" +#include "Poco/PatternFormatter.h" +#include "Poco/PBKDF2Engine.h" +#include "Poco/PIDFile.h" +#include "Poco/Pipe.h" +#include "Poco/PipeStream.h" +#include "Poco/PriorityDelegate.h" +#include "Poco/PriorityEvent.h" +#include "Poco/PriorityExpire.h" +#include "Poco/PriorityNotificationQueue.h" +#include "Poco/PriorityStrategy.h" +#include "Poco/Process.h" +#include "Poco/ProcessOptions.h" +#include "Poco/ProcessRunner.h" +#include "Poco/PurgeStrategy.h" +#include "Poco/Random.h" +#include "Poco/RandomStream.h" +#include "Poco/RecursiveDirectoryIterator.h" +#include "Poco/RecursiveDirectoryIteratorImpl.h" +#include "Poco/RefCountedObject.h" +#include "Poco/RegularExpression.h" +#include "Poco/RotateStrategy.h" +#include "Poco/RunnableAdapter.h" +#include "Poco/Runnable.h" +#include "Poco/RWLock.h" +#include "Poco/ScopedLock.h" +#include "Poco/ScopedUnlock.h" +#include "Poco/Semaphore.h" +#include "Poco/SHA1Engine.h" +#include "Poco/SHA2Engine.h" +#include "Poco/SharedLibrary.h" +#include "Poco/SharedMemory.h" +#include "Poco/SharedPtr.h" +#include "Poco/SignalHandler.h" +#include "Poco/SimpleFileChannel.h" +#include "Poco/SimpleHashTable.h" +#include "Poco/SingletonHolder.h" +#include "Poco/SortedDirectoryIterator.h" +#include "Poco/SplitterChannel.h" +#include "Poco/Stopwatch.h" +#include "Poco/StrategyCollection.h" +#include "Poco/StreamChannel.h" +#include "Poco/StreamConverter.h" +#include "Poco/StreamCopier.h" +#include "Poco/StreamTokenizer.h" +#include "Poco/StreamUtil.h" +#include "Poco/String.h" +#include "Poco/StringTokenizer.h" +#include "Poco/SynchronizedObject.h" +#include "Poco/SyslogChannel.h" +#include "Poco/Task.h" +#include "Poco/TaskManager.h" +#include "Poco/TaskNotification.h" +#include "Poco/TeeStream.h" +#include "Poco/TemporaryFile.h" +#include "Poco/TextBufferIterator.h" +#include "Poco/TextConverter.h" +#include "Poco/TextEncoding.h" +#include "Poco/TextIterator.h" +#include "Poco/Thread.h" +#include "Poco/ThreadLocal.h" +#include "Poco/ThreadPool.h" +#include "Poco/ThreadTarget.h" +#include "Poco/TimedNotificationQueue.h" +#include "Poco/Timer.h" +#include "Poco/Timespan.h" +#include "Poco/Timestamp.h" +#include "Poco/Timezone.h" +#include "Poco/Token.h" +#include "Poco/Tuple.h" +#include "Poco/TypeList.h" +#include "Poco/Types.h" +#include "Poco/UnbufferedStreamBuf.h" +#include "Poco/UnicodeConverter.h" +#include "Poco/Unicode.h" +#include "Poco/UniqueAccessExpireCache.h" +#include "Poco/UniqueAccessExpireLRUCache.h" +#include "Poco/UniqueAccessExpireStrategy.h" +#include "Poco/UniqueExpireCache.h" +#include "Poco/UniqueExpireLRUCache.h" +#include "Poco/UniqueExpireStrategy.h" +#include "Poco/URI.h" +#include "Poco/URIStreamFactory.h" +#include "Poco/URIStreamOpener.h" +#include "Poco/UTF16Encoding.h" +#include "Poco/UTF32Encoding.h" +#include "Poco/UTF8Encoding.h" +#include "Poco/UTF8String.h" +#include "Poco/UTFString.h" +#include "Poco/UUIDGenerator.h" +#include "Poco/UUID.h" +#include "Poco/ValidArgs.h" +#include "Poco/Void.h" +#include "Poco/Windows874Encoding.h" +#include "Poco/Windows932Encoding.h" +#include "Poco/Windows936Encoding.h" +#include "Poco/Windows949Encoding.h" +#include "Poco/Windows950Encoding.h" +#include "Poco/Windows1250Encoding.h" +#include "Poco/Windows1251Encoding.h" +#include "Poco/Windows1252Encoding.h" +#include "Poco/Windows1253Encoding.h" +#include "Poco/Windows1254Encoding.h" +#include "Poco/Windows1255Encoding.h" +#include "Poco/Windows1256Encoding.h" +#include "Poco/Windows1257Encoding.h" +#include "Poco/Windows1258Encoding.h" +#ifdef _WIN32 +#include "Poco/WindowsConsoleChannel.h" +#endif +#endif + +export module Poco.Foundation; + +export namespace Poco { + #ifdef ENABLE_FOUNDATION + using Poco::ASCIIEncoding; + using Poco::AbstractCache; + using Poco::AbstractDelegate; + using Poco::AbstractEvent; + using Poco::AbstractInstantiator; + using Poco::AbstractMetaObject; + using Poco::AbstractObserver; + using Poco::AbstractPriorityDelegate; + using Poco::AbstractStrategy; + using Poco::AbstractTimerCallback; + using Poco::AccessExpirationDecorator; + using Poco::AccessExpireCache; + using Poco::AccessExpireLRUCache; + using Poco::AccessExpireStrategy; + using Poco::ActiveDispatcher; + using Poco::ActiveMethod; + using Poco::ActiveResult; + using Poco::ActiveResultHolder; + using Poco::ActiveRunnable; + using Poco::ActiveRunnableBase; + using Poco::ActiveStarter; + using Poco::ActiveThreadPool; + using Poco::Activity; + using Poco::Any; + using Poco::ApplicationException; + using Poco::ArchiveByNumberStrategy; + using Poco::ArchiveByTimestampStrategy; + using Poco::ArchiveStrategy; + using Poco::Array; + using Poco::Ascii; + using Poco::AssertionViolationException; + using Poco::AsyncChannel; + using Poco::AsyncNotificationCenter; + using Poco::AsyncObserver; + using Poco::AtomicCounter; + using Poco::AtomicFlag; + using Poco::AutoPtr; + using Poco::AutoReleasePool; + using Poco::BadCastException; + using Poco::Base32Decoder; + using Poco::Base32DecoderBuf; + using Poco::Base32DecoderIOS; + using Poco::Base32Encoder; + using Poco::Base32EncoderBuf; + using Poco::Base32EncoderIOS; + using Poco::Base64Decoder; + using Poco::Base64DecoderBuf; + using Poco::Base64DecoderIOS; + using Poco::Base64Encoder; + using Poco::Base64EncoderBuf; + using Poco::Base64EncoderIOS; + using Poco::BasicBufferedBidirectionalStreamBuf; + using Poco::BasicBufferedStreamBuf; + using Poco::BasicEvent; + using Poco::BasicFIFOBuffer; + using Poco::BasicMemoryBinaryReader; + using Poco::BasicMemoryBinaryWriter; + using Poco::BasicMemoryStreamBuf; + using Poco::BasicUnbufferedStreamBuf; + using Poco::BinaryReader; + using Poco::BinaryWriter; + using Poco::Buffer; + using Poco::BufferAllocator; + using Poco::Bugcheck; + using Poco::BugcheckException; + using Poco::ByteOrder; + using Poco::CILess; + using Poco::Channel; + using Poco::Checksum; + using Poco::ChildrenFirstTraverse; + using Poco::CircularReferenceException; + using Poco::ClassLoader; + using Poco::Clock; + using Poco::ColorConsoleChannel; + using Poco::Condition; + using Poco::Configurable; + using Poco::ConsoleChannel; + using Poco::CountingIOS; + using Poco::CountingInputStream; + using Poco::CountingOutputStream; + using Poco::CountingStreamBuf; + using Poco::CreateFileException; + using Poco::DataException; + using Poco::DataFormatException; + using Poco::DataURIStream; + using Poco::DataURIStreamFactory; + using Poco::DataURIStreamIOS; + using Poco::DateTime; + using Poco::DateTimeFormat; + using Poco::DateTimeFormatter; + using Poco::DateTimeParser; + using Poco::Debugger; + using Poco::DefaultStrategy; + using Poco::DeflatingIOS; + using Poco::DeflatingInputStream; + using Poco::DeflatingOutputStream; + using Poco::DeflatingStreamBuf; + using Poco::Delegate; + using Poco::DigestBuf; + using Poco::DigestEngine; + using Poco::DigestIOS; + using Poco::DigestInputStream; + using Poco::DigestOutputStream; + using Poco::DirectoryIterator; + using Poco::DirectoryIteratorImpl; + using Poco::DirectoryNotEmptyException; + using Poco::DirectoryWatcher; + using Poco::DoubleByteEncoding; + using Poco::DynamicFactory; + using Poco::EOFToken; + using Poco::Environment; + // using Poco::EnvironmentImpl; + using Poco::Error; + using Poco::ErrorHandler; + using Poco::Event; + using Poco::EventArgs; + using Poco::EventChannel; + #ifdef _WIN32 + using Poco::EventLogChannel; + #endif + using Poco::Exception; + using Poco::ExecuteFileException; + using Poco::ExistsException; + using Poco::ExpirationDecorator; + using Poco::Expire; + using Poco::ExpireCache; + using Poco::ExpireLRUCache; + using Poco::ExpireStrategy; + using Poco::FIFOBufferStream; + using Poco::FIFOBufferStreamBuf; + using Poco::FIFOEvent; + using Poco::FIFOIOS; + using Poco::FIFOStrategy; + using Poco::FPEnvironment; + using Poco::FastMemoryPool; + using Poco::FastMutex; + using Poco::File; + using Poco::FileAccessDeniedException; + using Poco::FileChannel; + using Poco::FileException; + using Poco::FileExistsException; + using Poco::FileIOS; + using Poco::FileImpl; + using Poco::FileInputStream; + using Poco::FileReadOnlyException; + using Poco::FileStream; + using Poco::FileStreamFactory; + using Poco::FileStreamRWLock; + using Poco::Formatter; + using Poco::FormattingChannel; + using Poco::FunctionDelegate; + using Poco::FunctionPriorityDelegate; + using Poco::Getter; + using Poco::Glob; + using Poco::HMACEngine; + using Poco::Hash; + using Poco::HashFunction; + using Poco::HashMap; + using Poco::HashMapEntry; + using Poco::HashMapEntryHash; + using Poco::HashSet; + using Poco::HashStatistic; + using Poco::HashTable; + using Poco::HexBinaryDecoder; + using Poco::HexBinaryDecoderBuf; + using Poco::HexBinaryDecoderIOS; + using Poco::HexBinaryEncoder; + using Poco::HexBinaryEncoderBuf; + using Poco::HexBinaryEncoderIOS; + using Poco::IOException; + using Poco::ISO8859_3Encoding; + using Poco::ISO8859_4Encoding; + using Poco::ISO8859_5Encoding; + using Poco::ISO8859_6Encoding; + using Poco::ISO8859_7Encoding; + using Poco::ISO8859_8Encoding; + using Poco::ISO8859_9Encoding; + using Poco::ISO8859_10Encoding; + using Poco::ISO8859_11Encoding; + using Poco::ISO8859_13Encoding; + using Poco::ISO8859_14Encoding; + using Poco::ISO8859_16Encoding; + using Poco::IllegalStateException; + using Poco::InflatingIOS; + using Poco::InflatingInputStream; + using Poco::InflatingOutputStream; + using Poco::InflatingStreamBuf; + using Poco::InputLineEndingConverter; + using Poco::InputStreamConverter; + using Poco::Instantiator; + using Poco::InvalidAccessException; + using Poco::InvalidArgumentException; + using Poco::InvalidToken; + using Poco::IsConst; + using Poco::IsReference; + using Poco::JSONFormatter; + using Poco::KeyValueArgs; + using Poco::LRUCache; + using Poco::LRUStrategy; + using Poco::Latin1Encoding; + using Poco::Latin2Encoding; + using Poco::Latin9Encoding; + using Poco::LibraryAlreadyLoadedException; + using Poco::LibraryLoadException; + using Poco::LineEnding; + using Poco::LineEndingConverterIOS; + using Poco::LineEndingConverterStreamBuf; + using Poco::LinearHashTable; + using Poco::ListMap; + using Poco::LocalDateTime; + using Poco::LogFile; + using Poco::LogIOS; + using Poco::LogStream; + using Poco::LogStreamBuf; + using Poco::Logger; + using Poco::LoggingFactory; + using Poco::LoggingRegistry; + using Poco::LogicException; + using Poco::MD4Engine; + using Poco::MD5Engine; + using Poco::MacCentralEurRomanEncoding; + using Poco::MacChineseSimpEncoding; + using Poco::MacChineseTradEncoding; + using Poco::MacCyrillicEncoding; + using Poco::MacJapaneseEncoding; + using Poco::MacKoreanEncoding; + using Poco::MacRomanEncoding; + using Poco::Manifest; + using Poco::ManifestBase; + using Poco::MemoryIOS; + using Poco::MemoryInputStream; + using Poco::MemoryOutputStream; + using Poco::MemoryPool; + using Poco::Message; + using Poco::MetaObject; + using Poco::MetaSingleton; + using Poco::Mutex; + using Poco::NDCScope; + using Poco::NObserver; + using Poco::NamedEvent; + using Poco::NamedEventImpl; + using Poco::NamedMutex; + using Poco::NamedMutexImpl; + using Poco::NamedTuple; + using Poco::NestedDiagnosticContext; + using Poco::NoPermissionException; + using Poco::NoThreadAvailableException; + using Poco::NotFoundException; + using Poco::NotImplementedException; + using Poco::Notification; + using Poco::NotificationCenter; + using Poco::NotificationQueue; + using Poco::NotificationStrategy; + using Poco::NullChannel; + using Poco::NullIOS; + using Poco::NullInputStream; + using Poco::NullMutex; + using Poco::NullOutputStream; + using Poco::NullPointerException; + using Poco::NullPurgeStrategy; + using Poco::NullRotateStrategy; + using Poco::NullStreamBuf; + using Poco::NullTypeList; + using Poco::NullValueException; + using Poco::Nullable; + using Poco::NumberFormatter; + using Poco::NumberParser; + using Poco::ObjectPool; + using Poco::Observer; + using Poco::OpenFileException; + using Poco::Optional; + using Poco::OutOfMemoryException; + using Poco::OutputLineEndingConverter; + using Poco::OutputStreamConverter; + using Poco::PBKDF2Engine; + using Poco::PIDFile; + using Poco::Path; + // using Poco::PathImpl; + using Poco::PathNotFoundException; + using Poco::PathSyntaxException; + using Poco::PatternFormatter; + using Poco::Pipe; + using Poco::PipeIOS; + using Poco::PipeInputStream; + using Poco::PipeOutputStream; + using Poco::PipeStreamBuf; + using Poco::Placeholder; + using Poco::PoolOverflowException; + using Poco::PoolableObjectFactory; + using Poco::PriorityDelegate; + using Poco::PriorityEvent; + using Poco::PriorityExpire; + using Poco::PriorityNotificationQueue; + using Poco::PriorityStrategy; + using Poco::Process; + using Poco::ProcessHandle; + using Poco::ProcessHandleImpl; + using Poco::ProcessImpl; + using Poco::ProcessRunner; + using Poco::PropertyNotSupportedException; + using Poco::ProtocolException; + using Poco::PurgeByAgeStrategy; + using Poco::PurgeByCountStrategy; + using Poco::PurgeStrategy; + using Poco::RWLock; + using Poco::Random; + using Poco::RandomBuf; + using Poco::RandomIOS; + using Poco::RandomInputStream; + using Poco::RangeException; + using Poco::ReadFileException; + using Poco::RecursiveDirectoryIterator; + using Poco::RecursiveDirectoryIteratorImpl; + using Poco::RefCountedObject; + using Poco::ReferenceCounter; + using Poco::RegularExpression; + using Poco::RegularExpressionException; + using Poco::ReleaseArrayPolicy; + using Poco::ReleasePolicy; + using Poco::ResourceLimitException; + using Poco::RotateAtTimeStrategy; + using Poco::RotateByIntervalStrategy;; + using Poco::RotateBySizeStrategy; + using Poco::RotateStrategy; + using Poco::Runnable; + using Poco::RunnableAdapter; + using Poco::RuntimeException; + using Poco::SHA1Engine; + using Poco::SHA2Engine; + using Poco::SHA2Engine224; + using Poco::SHA2Engine256; + using Poco::SHA2Engine384; + using Poco::SHA2Engine512; + using Poco::ScopedFStreamRWLock; + using Poco::ScopedFStreamReadRWLock; + using Poco::ScopedFStreamWriteRWLock; + using Poco::ScopedLock; + using Poco::ScopedLockWithUnlock; + using Poco::ScopedRWLock; + using Poco::ScopedReadRWLock; + using Poco::ScopedUnlock; + using Poco::ScopedWriteRWLock; + using Poco::Semaphore; + using Poco::SharedLibrary; + using Poco::SharedLibraryImpl; + using Poco::SharedMemory; + using Poco::SharedPtr; + using Poco::SiblingsFirstTraverse; + using Poco::SignalException; + using Poco::SignalHandler; + using Poco::SimpleFileChannel; + using Poco::SimpleHashTable; + using Poco::SingletonHolder; + using Poco::SortedDirectoryIterator; + using Poco::SpinlockMutex; + using Poco::SplitterChannel; + using Poco::Stopwatch; + using Poco::StrategyCollection; + using Poco::StreamChannel; + using Poco::StreamConverterBuf; + using Poco::StreamConverterIOS; + using Poco::StreamCopier; + using Poco::StreamTokenizer; + using Poco::StringTokenizer; + using Poco::SynchronizedObject; + using Poco::SyntaxException; + using Poco::SyslogChannel; + using Poco::SystemException; + using Poco::TLSAbstractSlot; + using Poco::TLSSlot; + using Poco::Task; + using Poco::TaskCancelledNotification; + using Poco::TaskCustomNotification; + using Poco::TaskFailedNotification; + using Poco::TaskFinishedNotification; + using Poco::TaskManager; + using Poco::TaskNotification; + using Poco::TaskProgressNotification; + using Poco::TaskStartedNotification; + using Poco::TeeIOS; + using Poco::TeeInputStream; + using Poco::TeeOutputStream; + using Poco::TeeStreamBuf; + using Poco::TemporaryFile; + using Poco::TextBufferIterator; + using Poco::TextConverter; + using Poco::TextEncoding; + using Poco::TextIterator; + using Poco::Thread; + using Poco::ThreadLocal; + using Poco::ThreadLocalStorage; + using Poco::ThreadPool; + using Poco::ThreadTarget; + using Poco::TimedNotificationQueue; + using Poco::TimeoutException; + using Poco::Timer; + using Poco::TimerCallback; + using Poco::Timespan; + using Poco::Timestamp; + using Poco::Timezone; + using Poco::Token; + using Poco::TooManyURIRedirectsException; + using Poco::TraverseBase; + using Poco::Tuple; + using Poco::TypeList; + using Poco::TypeListType; + using Poco::TypeWrapper; + using Poco::URI; + using Poco::URIRedirection; + using Poco::URIStreamFactory; + using Poco::URIStreamOpener; + using Poco::URISyntaxException; + using Poco::UTF8; + using Poco::UTF8Encoding; + using Poco::UTF16CharTraits; + using Poco::UTF16Encoding; + using Poco::UTF32CharTraits; + using Poco::UTF32Encoding; + using Poco::UUID; + using Poco::UUIDGenerator; + using Poco::UnhandledException; + using Poco::Unicode; + using Poco::UnicodeConverter; + using Poco::UniqueAccessExpireCache; + using Poco::UniqueAccessExpireLRUCache; + using Poco::UniqueAccessExpireStrategy; + using Poco::UniqueExpireCache; + using Poco::UniqueExpireLRUCache; + using Poco::UniqueExpireStrategy; + using Poco::UnknownURISchemeException; + using Poco::ValidArgs; + using Poco::Void; + using Poco::WhitespaceToken; + using Poco::Windows874Encoding; + using Poco::Windows932Encoding; + using Poco::Windows936Encoding; + using Poco::Windows949Encoding; + using Poco::Windows950Encoding; + using Poco::Windows1250Encoding; + using Poco::Windows1251Encoding; + using Poco::Windows1252Encoding; + using Poco::Windows1253Encoding; + using Poco::Windows1254Encoding; + using Poco::Windows1256Encoding; + #ifdef _WIN32 + using Poco::WindowsColorConsoleChannel; + using Poco::WindowsConsoleChannel; + #endif + using Poco::WriteFileException; + using Poco::i_char_traits; + + using Poco::FIFOBuffer; + using Poco::FPE; + using Poco::MemoryBinaryReader; + using Poco::MemoryBinaryWriter; + using Poco::MemoryStreamBuf; + using Poco::NDC; + using Poco::SiblingsFirstRecursiveDirectoryIterator; + using Poco::SimpleRecursiveDirectoryIterator; + using Poco::UTF16Char; + using Poco::UTF16String; + using Poco::UTF32Char; + using Poco::UTF32String; + using Poco::istring; + + using Poco::BasicBufferedBidirectionalStreamBuf; + using Poco::BufferedStreamBuf; + using Poco::DynamicAny; + // using Poco::DynamicStruct; + using Poco::Int8; + using Poco::Int16; + using Poco::Int32; + using Poco::Int64; + using Poco::IntPtr; + using Poco::LineNumber; + using Poco::NullType; + // using Poco::OrderedDynamicStruct; + using Poco::UInt8; + using Poco::UInt16; + using Poco::UInt32; + using Poco::UInt64; + using Poco::UIntPtr; + using Poco::UnbufferedStreamBuf; + + using Poco::AnyCast; + using Poco::AnyHoldsNullPtr; + using Poco::RefAnyCast; + using Poco::UnsafeAnyCast; + using Poco::cat; + using Poco::cstrlen; + using Poco::decimalSeparator; + using Poco::delegate; + using Poco::demangle; + using Poco::doubleToFixedStr; + using Poco::doubleToStr; + using Poco::endsWith; + using Poco::floatToFixedStr; + using Poco::floatToStr; + using Poco::format; + using Poco::formatAny; + using Poco::hash; + using Poco::hashCombine; + using Poco::hashRange; + using Poco::icompare; + using Poco::intToStr; + using Poco::isIntOverflow; + using Poco::isNegative; + using Poco::isSafeIntCast; + using Poco::isubstr; + using Poco::makeAuto; + using Poco::makeShared; + using Poco::makeSharedArray; + using Poco::operator!=; + using Poco::operator&; + using Poco::operator&=; + using Poco::operator<; + using Poco::operator<<; + using Poco::operator<=; + using Poco::operator==; + using Poco::operator>; + using Poco::operator>=; + using Poco::operator|; + using Poco::operator|=; + // using Poco::priorityDelegate; + using Poco::registerExtraEncodings; + using Poco::remove; + using Poco::removeInPlace; + using Poco::replace; + using Poco::replaceInPlace; + using Poco::safeIntCast; + using Poco::safeMultiply; + using Poco::secureClear; + using Poco::startsWith; + using Poco::strToDouble; + using Poco::strToFloat; + using Poco::strToInt; + using Poco::swap; + using Poco::thousandSeparator; + using Poco::toJSON; + using Poco::toLower; + using Poco::toLowerInPlace; + using Poco::toUpper; + using Poco::toUpperInPlace; + using Poco::translate; + using Poco::translateInPlace; + using Poco::trim; + using Poco::trimInPlace; + using Poco::trimLeft; + using Poco::trimLeftInPlace; + using Poco::trimRight; + using Poco::trimRightInPlace; + using Poco::uIntToStr; + + namespace Impl { + using Poco::Impl::EnableSigned; + using Poco::Impl::EnableUnsigned; + using Poco::Impl::IsNegativeImpl; + using Poco::Impl::Ptr; + using Poco::Impl::hashCombine; + } + #endif +} diff --git a/modules/Poco/JSON.cppm b/modules/Poco/JSON.cppm new file mode 100644 index 000000000..6cbc241cc --- /dev/null +++ b/modules/Poco/JSON.cppm @@ -0,0 +1,48 @@ +// +// JSON.cppm +// +// C++ module file +// +// Copyright (c) 2025, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + +module; + +#ifdef ENABLE_JSON +#include "Poco/JSON/Array.h" +#include "Poco/JSON/Handler.h" +#include "Poco/JSON/JSONException.h" +#include "Poco/JSON/JSON.h" +#include "Poco/JSON/Object.h" +#include "Poco/JSON/ParseHandler.h" +#include "Poco/JSON/Parser.h" +#include "Poco/JSON/ParserImpl.h" +#include "Poco/JSON/PrintHandler.h" +#include "Poco/JSON/Query.h" +#include "Poco/JSON/Stringifier.h" +#include "Poco/JSON/TemplateCache.h" +#include "Poco/JSON/Template.h" +#endif + +export module Poco.JSON; + +export namespace Poco::JSON { + #ifdef ENABLE_JSON + using Poco::JSON::Array; + using Poco::JSON::Handler; + using Poco::JSON::JSONException; + using Poco::JSON::JSONTemplateException; + using Poco::JSON::Object; + using Poco::JSON::ParseHandler; + using Poco::JSON::Parser; + using Poco::JSON::ParserImpl; + using Poco::JSON::PrintHandler; + using Poco::JSON::Query; + using Poco::JSON::Stringifier; + using Poco::JSON::Template; + using Poco::JSON::TemplateCache; + #endif +} diff --git a/modules/Poco/JWT.cppm b/modules/Poco/JWT.cppm new file mode 100644 index 000000000..55cffafe4 --- /dev/null +++ b/modules/Poco/JWT.cppm @@ -0,0 +1,37 @@ +// +// JWT.cppm +// +// C++ module file +// +// Copyright (c) 2025, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + +module; + +#ifdef ENABLE_JWT +#include "Poco/JWT/JWTException.h" +#include "Poco/JWT/JWT.h" +#include "Poco/JWT/Serializer.h" +#include "Poco/JWT/Signer.h" +#include "Poco/JWT/Token.h" +#endif + +export module Poco.JWT; + +export namespace Poco::JWT { + #ifdef ENABLE_JWT + using Poco::JWT::JWTException; + using Poco::JWT::ParseException; + using Poco::JWT::Serializer; + using Poco::JWT::SignatureException; + using Poco::JWT::SignatureGenerationException; + using Poco::JWT::SignatureVerificationException; + using Poco::JWT::Signer; + using Poco::JWT::Token; + using Poco::JWT::UnallowedAlgorithmException; + using Poco::JWT::UnsupportedAlgorithmException; + #endif +} diff --git a/modules/Poco/MongoDB.cppm b/modules/Poco/MongoDB.cppm new file mode 100644 index 000000000..0cc7c4f8e --- /dev/null +++ b/modules/Poco/MongoDB.cppm @@ -0,0 +1,82 @@ +// +// MongoDB.cppm +// +// C++ module file +// +// Copyright (c) 2025, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + +module; + +#ifdef ENABLE_MONGODB +#include "Poco/MongoDB/Array.h" +#include "Poco/MongoDB/Binary.h" +#include "Poco/MongoDB/BSONReader.h" +#include "Poco/MongoDB/BSONWriter.h" +#include "Poco/MongoDB/Connection.h" +#include "Poco/MongoDB/Cursor.h" +#include "Poco/MongoDB/Database.h" +#include "Poco/MongoDB/DeleteRequest.h" +#include "Poco/MongoDB/Document.h" +#include "Poco/MongoDB/Element.h" +#include "Poco/MongoDB/GetMoreRequest.h" +#include "Poco/MongoDB/InsertRequest.h" +#include "Poco/MongoDB/JavaScriptCode.h" +#include "Poco/MongoDB/KillCursorsRequest.h" +#include "Poco/MongoDB/Message.h" +#include "Poco/MongoDB/MessageHeader.h" +#include "Poco/MongoDB/MongoDB.h" +#include "Poco/MongoDB/ObjectId.h" +#include "Poco/MongoDB/OpMsgCursor.h" +#include "Poco/MongoDB/OpMsgMessage.h" +#include "Poco/MongoDB/PoolableConnectionFactory.h" +#include "Poco/MongoDB/QueryRequest.h" +#include "Poco/MongoDB/RegularExpression.h" +#include "Poco/MongoDB/ReplicaSet.h" +#include "Poco/MongoDB/RequestMessage.h" +#include "Poco/MongoDB/ResponseMessage.h" +#include "Poco/MongoDB/UpdateRequest.h" +#endif + +export module Poco.MongoDB; + +export namespace Poco::MongoDB { + #ifdef ENABLE_MONGODB + using Poco::MongoDB::Array; + using Poco::MongoDB::BSONReader; + using Poco::MongoDB::BSONTimestamp; + using Poco::MongoDB::BSONWriter; + using Poco::MongoDB::Binary; + using Poco::MongoDB::ConcreteElement; + using Poco::MongoDB::Connection; + using Poco::MongoDB::Cursor; + using Poco::MongoDB::Database; + using Poco::MongoDB::DeleteRequest; + using Poco::MongoDB::Document; + using Poco::MongoDB::Element; + using Poco::MongoDB::ElementFindByName; + using Poco::MongoDB::ElementTraits; + using Poco::MongoDB::GetMoreRequest; + using Poco::MongoDB::InsertRequest; + using Poco::MongoDB::JavaScriptCode; + using Poco::MongoDB::KillCursorsRequest; + using Poco::MongoDB::Message; + using Poco::MongoDB::MessageHeader; + using Poco::MongoDB::ObjectId; + using Poco::MongoDB::OpMsgCursor; + using Poco::MongoDB::OpMsgMessage; + using Poco::MongoDB::PooledConnection; + using Poco::MongoDB::QueryRequest; + using Poco::MongoDB::RegularExpression; + using Poco::MongoDB::ReplicaSet; + using Poco::MongoDB::RequestMessage; + using Poco::MongoDB::ResponseMessage; + using Poco::MongoDB::UpdateRequest; + + using Poco::MongoDB::ElementSet; + using Poco::MongoDB::NullValue; + #endif +} diff --git a/modules/Poco/Net.cppm b/modules/Poco/Net.cppm new file mode 100644 index 000000000..470f89b4f --- /dev/null +++ b/modules/Poco/Net.cppm @@ -0,0 +1,481 @@ +// +// Net.cppm +// +// C++ module file +// +// Copyright (c) 2025, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + +module; + +#ifdef ENABLE_NET +#include "Poco/Net/AbstractHTTPRequestHandler.h" +#if defined(ENABLE_NETSSL_OPENSSL) || defined(ENABLE_NETSSL_WIN) +#include "Poco/Net/AcceptCertificateHandler.h" +#ifdef ENABLE_NETSSL_WIN +#include "Poco/Net/AutoSecBufferDesc.h" +#endif +#include "Poco/Net/CertificateHandlerFactory.h" +#include "Poco/Net/CertificateHandlerFactoryMgr.h" +#include "Poco/Net/ConsoleCertificateHandler.h" +#include "Poco/Net/Context.h" +#endif +#include "Poco/Net/DatagramSocket.h" +#include "Poco/Net/DatagramSocketImpl.h" +#include "Poco/Net/DialogSocket.h" +#include "Poco/Net/DNS.h" +#include "Poco/Net/EscapeHTMLStream.h" +#include "Poco/Net/FilePartSource.h" +#include "Poco/Net/FTPClientSession.h" +#ifdef ENABLE_SSL_OPENSSL +#include "Poco/Net/FTPSClientSession.h" +#include "Poco/Net/FTPSStreamFactory.h" +#endif +#include "Poco/Net/FTPStreamFactory.h" +#include "Poco/Net/HostEntry.h" +#include "Poco/Net/HTMLForm.h" +#include "Poco/Net/HTTPAuthenticationParams.h" +#include "Poco/Net/HTTPBasicCredentials.h" +#include "Poco/Net/HTTPBasicStreamBuf.h" +#include "Poco/Net/HTTPBufferAllocator.h" +#include "Poco/Net/HTTPChunkedStream.h" +#include "Poco/Net/HTTPClientSession.h" +#include "Poco/Net/HTTPCookie.h" +#include "Poco/Net/HTTPCredentials.h" +#include "Poco/Net/HTTPDigestCredentials.h" +#include "Poco/Net/HTTPFixedLengthStream.h" +#include "Poco/Net/HTTPHeaderStream.h" +#include "Poco/Net/HTTPIOStream.h" +#include "Poco/Net/HTTPMessage.h" +#include "Poco/Net/HTTPNTLMCredentials.h" +#include "Poco/Net/HTTPRequest.h" +#include "Poco/Net/HTTPRequestHandlerFactory.h" +#include "Poco/Net/HTTPRequestHandler.h" +#include "Poco/Net/HTTPResponse.h" +#if defined(ENABLE_NETSSL_OPENSSL) || defined(ENABLE_NETSSL_WIN) +#include "Poco/Net/HTTPSClientSession.h" +#endif +#include "Poco/Net/HTTPServerConnectionFactory.h" +#include "Poco/Net/HTTPServerConnection.h" +#include "Poco/Net/HTTPServer.h" +#include "Poco/Net/HTTPServerParams.h" +#include "Poco/Net/HTTPServerRequest.h" +#include "Poco/Net/HTTPServerRequestImpl.h" +#include "Poco/Net/HTTPServerResponse.h" +#include "Poco/Net/HTTPServerResponseImpl.h" +#include "Poco/Net/HTTPServerSession.h" +#include "Poco/Net/HTTPSessionFactory.h" +#include "Poco/Net/HTTPSession.h" +#include "Poco/Net/HTTPSessionInstantiator.h" +#if defined(ENABLE_NETSSL_OPENSSL) || defined(ENABLE_NETSSL_WIN) +#include "Poco/Net/HTTPSSessionInstantiator.h" +#include "Poco/Net/HTTPSStreamFactory.h" +#endif +#include "Poco/Net/HTTPStreamFactory.h" +#include "Poco/Net/HTTPStream.h" +#include "Poco/Net/ICMPClient.h" +#include "Poco/Net/ICMPEventArgs.h" +#include "Poco/Net/ICMPPacket.h" +#include "Poco/Net/ICMPPacketImpl.h" +#include "Poco/Net/ICMPSocket.h" +#include "Poco/Net/ICMPSocketImpl.h" +#include "Poco/Net/ICMPv4PacketImpl.h" +#if defined(ENABLE_NETSSL_OPENSSL) || defined(ENABLE_NETSSL_WIN) +#include "Poco/Net/InvalidCertificateHandler.h" +#endif +#include "Poco/Net/IPAddress.h" +#include "Poco/Net/IPAddressImpl.h" +#if defined(ENABLE_NETSSL_OPENSSL) || defined(ENABLE_NETSSL_WIN) +#include "Poco/Net/KeyConsoleHandler.h" +#include "Poco/Net/KeyFileHandler.h" +#endif +#include "Poco/Net/MailMessage.h" +#include "Poco/Net/MailRecipient.h" +#include "Poco/Net/MailStream.h" +#include "Poco/Net/MediaType.h" +#include "Poco/Net/MessageHeader.h" +#include "Poco/Net/MulticastSocket.h" +#include "Poco/Net/MultipartReader.h" +#include "Poco/Net/MultipartWriter.h" +#include "Poco/Net/MultiSocketPoller.h" +#include "Poco/Net/NameValueCollection.h" +#include "Poco/Net/NetException.h" +#include "Poco/Net/Net.h" +#if defined(ENABLE_NETSSL_OPENSSL) || defined(ENABLE_NETSSL_WIN) +#include "Poco/Net/NetSSL.h" +#endif +#include "Poco/Net/NetworkInterface.h" +#include "Poco/Net/NTLMCredentials.h" +#include "Poco/Net/NTPClient.h" +#include "Poco/Net/NTPEventArgs.h" +#include "Poco/Net/NTPPacket.h" +#include "Poco/Net/NullPartHandler.h" +#include "Poco/Net/OAuth10Credentials.h" +#include "Poco/Net/OAuth20Credentials.h" +#include "Poco/Net/ParallelSocketAcceptor.h" +#include "Poco/Net/ParallelSocketReactor.h" +#include "Poco/Net/PartHandler.h" +#include "Poco/Net/PartSource.h" +#include "Poco/Net/PartStore.h" +#include "Poco/Net/PollSet.h" +#include "Poco/Net/POP3ClientSession.h" +#if defined(ENABLE_NETSSL_OPENSSL) || defined(ENABLE_NETSSL_WIN) +#include "Poco/Net/PrivateKeyFactory.h" +#include "Poco/Net/PrivateKeyFactoryMgr.h" +#include "Poco/Net/PrivateKeyPassphraseHandler.h" +#endif +#include "Poco/Net/QuotedPrintableDecoder.h" +#include "Poco/Net/QuotedPrintableEncoder.h" +#include "Poco/Net/RawSocket.h" +#include "Poco/Net/RawSocketImpl.h" +#if defined(ENABLE_NETSSL_OPENSSL) || defined(ENABLE_NETSSL_WIN) +#include "Poco/Net/RejectCertificateHandler.h" +#endif +#include "Poco/Net/RemoteSyslogChannel.h" +#include "Poco/Net/RemoteSyslogListener.h" +#if defined(ENABLE_NETSSL_OPENSSL) || defined(ENABLE_NETSSL_WIN) +#include "Poco/Net/SecureServerSocket.h" +#include "Poco/Net/SecureServerSocketImpl.h" +#include "Poco/Net/SecureSMTPClientSession.h" +#include "Poco/Net/SecureSocketImpl.h" +#include "Poco/Net/SecureStreamSocket.h" +#include "Poco/Net/SecureStreamSocketImpl.h" +#endif +#include "Poco/Net/ServerSocket.h" +#include "Poco/Net/ServerSocketImpl.h" +#if defined(ENABLE_NETSSL_OPENSSL) || defined(ENABLE_NETSSL_WIN) +#include "Poco/Net/Session.h" +#endif +#include "Poco/Net/SingleSocketPoller.h" +#include "Poco/Net/SMTPChannel.h" +#include "Poco/Net/SMTPClientSession.h" +#include "Poco/Net/SocketAcceptor.h" +#include "Poco/Net/SocketAddress.h" +#include "Poco/Net/SocketAddressImpl.h" +#include "Poco/Net/SocketConnector.h" +#include "Poco/Net/SocketDefs.h" +#include "Poco/Net/Socket.h" +#include "Poco/Net/SocketImpl.h" +#include "Poco/Net/SocketNotification.h" +#include "Poco/Net/SocketNotifier.h" +#include "Poco/Net/SocketProactor.h" +#include "Poco/Net/SocketReactor.h" +#include "Poco/Net/SocketStream.h" +#if defined(ENABLE_NETSSL_OPENSSL) || defined(ENABLE_NETSSL_WIN) +#include "Poco/Net/SSLException.h" +#include "Poco/Net/SSLManager.h" +#endif +#include "Poco/Net/SSPINTLMCredentials.h" +#include "Poco/Net/StreamSocket.h" +#include "Poco/Net/StreamSocketImpl.h" +#include "Poco/Net/StringPartSource.h" +#include "Poco/Net/TCPServerConnectionFactory.h" +#include "Poco/Net/TCPServerConnection.h" +#include "Poco/Net/TCPServerDispatcher.h" +#include "Poco/Net/TCPServer.h" +#include "Poco/Net/TCPServerParams.h" +#include "Poco/Net/UDPClient.h" +#include "Poco/Net/UDPHandler.h" +#include "Poco/Net/UDPServer.h" +#include "Poco/Net/UDPServerParams.h" +#include "Poco/Net/UDPSocketReader.h" +#if defined(ENABLE_NETSSL_OPENSSL) || defined(ENABLE_NETSSL_WIN) +#include "Poco/Net/Utility.h" +#include "Poco/Net/VerificationErrorArgs.h" +#endif +#include "Poco/Net/WebSocket.h" +#include "Poco/Net/WebSocketImpl.h" +#if defined(ENABLE_NETSSL_OPENSSL) || defined(ENABLE_NETSSL_WIN) +#include "Poco/Net/X509Certificate.h" +#endif +#endif + +export module Poco.Net; + +export namespace Poco::Net { + #ifdef ENABLE_NET + using Poco::Net::AbstractHTTPRequestHandler; + #if defined(ENABLE_NETSSL_OPENSSL) || defined(ENABLE_NETSSL_WIN) + using Poco::Net::AcceptCertificateHandler; + #endif + using Poco::Net::AddressFamily; + using Poco::Net::AddressFamilyMismatchException; + #if defined(ENABLE_NETSSL_OPENSSL) || defined(ENABLE_NETSSL_WIN) + #ifdef ENABLE_NETSSL_WIN + using Poco::Net::AutoSecBufferDesc; + #endif + using Poco::Net::CertificateHandlerFactory; + using Poco::Net::CertificateHandlerFactoryImpl; + using Poco::Net::CertificateHandlerFactoryMgr; + using Poco::Net::CertificateHandlerFactoryRegistrar; + using Poco::Net::CertificateValidationException; + #endif + using Poco::Net::ConnectionAbortedException; + using Poco::Net::ConnectionRefusedException; + using Poco::Net::ConnectionResetException; + #if defined(ENABLE_NETSSL_OPENSSL) || defined(ENABLE_NETSSL_WIN) + using Poco::Net::ConsoleCertificateHandler; + using Poco::Net::Context; + #endif + using Poco::Net::DNS; + using Poco::Net::DNSException; + using Poco::Net::DatagramSocket; + using Poco::Net::DatagramSocketImpl; + using Poco::Net::DialogSocket; + using Poco::Net::ErrorNotification; + using Poco::Net::EscapeHTMLIOS; + using Poco::Net::EscapeHTMLOutputStream; + using Poco::Net::EscapeHTMLStreamBuf; + using Poco::Net::FTPClientSession; + using Poco::Net::FTPException; + using Poco::Net::FTPPasswordProvider; + #ifdef ENABLE_NETSSL_OPENSSL + using Poco::Net::FTPSClientSession; + using Poco::Net::FTPSStreamFactory; + #endif + using Poco::Net::FTPStreamFactory; + using Poco::Net::FilePartSource; + using Poco::Net::FilePartStore; + using Poco::Net::FilePartStoreFactory; + using Poco::Net::HTMLForm; + using Poco::Net::HTMLFormException; + using Poco::Net::HTTPAuthenticationParams; + using Poco::Net::HTTPBasicCredentials; + using Poco::Net::HTTPBufferAllocator; + using Poco::Net::HTTPChunkedIOS; + using Poco::Net::HTTPChunkedInputStream; + using Poco::Net::HTTPChunkedOutputStream; + using Poco::Net::HTTPChunkedStreamBuf; + using Poco::Net::HTTPClientSession; + using Poco::Net::HTTPCookie; + using Poco::Net::HTTPCredentials; + using Poco::Net::HTTPDigestCredentials; + using Poco::Net::HTTPException; + using Poco::Net::HTTPFixedLengthIOS; + using Poco::Net::HTTPFixedLengthInputStream; + using Poco::Net::HTTPFixedLengthOutputStream; + using Poco::Net::HTTPFixedLengthStreamBuf; + using Poco::Net::HTTPHeaderIOS; + using Poco::Net::HTTPHeaderInputStream; + using Poco::Net::HTTPHeaderOutputStream; + using Poco::Net::HTTPHeaderStreamBuf; + using Poco::Net::HTTPIOS; + using Poco::Net::HTTPInputStream; + using Poco::Net::HTTPMessage; + using Poco::Net::HTTPNTLMCredentials; + using Poco::Net::HTTPOutputStream; + using Poco::Net::HTTPRequest; + using Poco::Net::HTTPRequestHandler; + using Poco::Net::HTTPRequestHandlerFactory; + using Poco::Net::HTTPResponse; + using Poco::Net::HTTPResponseIOS; + using Poco::Net::HTTPResponseStream; + using Poco::Net::HTTPResponseStreamBuf; + #if defined(ENABLE_NETSSL_OPENSSL) || defined(ENABLE_NETSSL_WIN) + using Poco::Net::HTTPSClientSession; + using Poco::Net::HTTPSSessionInstantiator; + using Poco::Net::HTTPSStreamFactory; + #endif + using Poco::Net::HTTPServer; + using Poco::Net::HTTPServerConnection; + using Poco::Net::HTTPServerConnectionFactory; + using Poco::Net::HTTPServerParams; + using Poco::Net::HTTPServerRequest; + using Poco::Net::HTTPServerRequestImpl; + using Poco::Net::HTTPServerResponse; + using Poco::Net::HTTPServerResponseImpl; + using Poco::Net::HTTPServerSession; + using Poco::Net::HTTPSession; + using Poco::Net::HTTPSessionFactory; + #if defined(ENABLE_NETSSL_OPENSSL) || defined(ENABLE_NETSSL_WIN) + using Poco::Net::HTTPSSessionInstantiator; + #endif + using Poco::Net::HTTPStreamBuf; + using Poco::Net::HTTPStreamFactory; + using Poco::Net::HostEntry; + using Poco::Net::HostNotFoundException; + using Poco::Net::ICMPClient; + using Poco::Net::ICMPEventArgs; + using Poco::Net::ICMPException; + using Poco::Net::ICMPFragmentationException; + using Poco::Net::ICMPPacket; + using Poco::Net::ICMPPacketImpl; + using Poco::Net::ICMPSocket; + using Poco::Net::ICMPSocketImpl; + using Poco::Net::ICMPv4PacketImpl; + using Poco::Net::IPAddress; + using Poco::Net::IdleNotification; + using Poco::Net::InterfaceNotFoundException; + using Poco::Net::InvalidAddressException; + #if defined(ENABLE_NETSSL_OPENSSL) || defined(ENABLE_NETSSL_WIN) + using Poco::Net::InvalidCertificateException; + using Poco::Net::InvalidCertificateHandler; + #endif + using Poco::Net::InvalidSocketException; + #if defined(ENABLE_NETSSL_OPENSSL) || defined(ENABLE_NETSSL_WIN) + using Poco::Net::KeyConsoleHandler; + using Poco::Net::KeyFileHandler; + #endif + using Poco::Net::MailIOS; + using Poco::Net::MailInputStream; + using Poco::Net::MailMessage; + using Poco::Net::MailOutputStream; + using Poco::Net::MailRecipient; + using Poco::Net::MailStreamBuf; + using Poco::Net::MediaType; + using Poco::Net::MessageException; + using Poco::Net::MessageHeader; + using Poco::Net::MulticastSocket; + using Poco::Net::MultipartException; + using Poco::Net::MultipartIOS; + using Poco::Net::MultipartInputStream; + using Poco::Net::MultipartReader; + using Poco::Net::MultipartSource; + using Poco::Net::MultipartStreamBuf; + using Poco::Net::MultipartWriter; + using Poco::Net::NTLMContext; + using Poco::Net::NTLMCredentials; + using Poco::Net::NTPClient; + using Poco::Net::NTPEventArgs; + using Poco::Net::NTPException; + using Poco::Net::NTPPacket; + using Poco::Net::NameValueCollection; + using Poco::Net::NetException; + using Poco::Net::NetworkInterface; + using Poco::Net::NoAddressFoundException; + using Poco::Net::NoMessageException; + using Poco::Net::NotAuthenticatedException; + using Poco::Net::NullPartHandler; + using Poco::Net::OAuth10Credentials; + using Poco::Net::OAuth20Credentials; + using Poco::Net::POP3ClientSession; + using Poco::Net::POP3Exception; + using Poco::Net::ParallelSocketAcceptor; + using Poco::Net::ParallelSocketReactor; + using Poco::Net::PartHandler; + using Poco::Net::PartSource; + using Poco::Net::PartStore; + using Poco::Net::PartStoreFactory; + using Poco::Net::PollSet; + #if defined(ENABLE_NETSSL_OPENSSL) || defined(ENABLE_NETSSL_WIN) + using Poco::Net::PrivateKeyFactory; + using Poco::Net::PrivateKeyFactoryImpl; + using Poco::Net::PrivateKeyFactoryMgr; + using Poco::Net::PrivateKeyFactoryRegistrar; + using Poco::Net::PrivateKeyPassphraseHandler; + #endif + using Poco::Net::QuotedPrintableDecoder; + using Poco::Net::QuotedPrintableDecoderBuf; + using Poco::Net::QuotedPrintableEncoderIOS; + using Poco::Net::QuotedPrintableEncoder; + using Poco::Net::QuotedPrintableEncoderBuf; + using Poco::Net::QuotedPrintableEncoderIOS; + using Poco::Net::RawSocket; + using Poco::Net::RawSocketImpl; + using Poco::Net::ReadableNotification; + #if defined(ENABLE_NETSSL_OPENSSL) || defined(ENABLE_NETSSL_WIN) + using Poco::Net::RejectCertificateHandler; + #endif + using Poco::Net::RemoteSyslogChannel; + using Poco::Net::RemoteSyslogListener; + using Poco::Net::SMTPChannel; + using Poco::Net::SMTPClientSession; + using Poco::Net::SMTPException; + #if defined(ENABLE_NETSSL_OPENSSL) || defined(ENABLE_NETSSL_WIN) + using Poco::Net::SSLConnectionUnexpectedlyClosedException; + using Poco::Net::SSLContextException; + using Poco::Net::SSLException; + using Poco::Net::SSLManager; + #endif + using Poco::Net::SSPINTLMCredentials; + #if defined(ENABLE_NETSSL_OPENSSL) || defined(ENABLE_NETSSL_WIN) + using Poco::Net::SecureSMTPClientSession; + using Poco::Net::SecureServerSocket; + using Poco::Net::SecureServerSocketImpl; + using Poco::Net::SecureStreamSocket; + using Poco::Net::SecureSocketImpl; + #endif + using Poco::Net::ServerSocket; + using Poco::Net::ServerSocketImpl; + using Poco::Net::ServiceNotFoundException; + #if defined(ENABLE_NETSSL_OPENSSL) || defined(ENABLE_NETSSL_WIN) + using Poco::Net::Session; + #endif + using Poco::Net::ShutdownNotification; + using Poco::Net::Socket; + using Poco::Net::SocketAcceptor; + using Poco::Net::SocketAddress; + using Poco::Net::SocketConnector; + using Poco::Net::SocketIOS; + using Poco::Net::SocketImpl; + using Poco::Net::SocketInputStream; + using Poco::Net::SocketNotification; + using Poco::Net::SocketNotifier; + using Poco::Net::SocketOutputStream; + using Poco::Net::SocketProactor; + using Poco::Net::SocketReactor; + using Poco::Net::SocketStream; + using Poco::Net::SocketStreamBuf; + using Poco::Net::StreamSocket; + using Poco::Net::StreamSocketImpl; + using Poco::Net::StringPartSource; + using Poco::Net::TCPServer; + using Poco::Net::TCPServerConnection; + using Poco::Net::TCPServerConnectionFactory; + using Poco::Net::TCPServerConnectionFactoryImpl; + using Poco::Net::TCPServerConnectionFilter; + using Poco::Net::TCPServerDispatcher; + using Poco::Net::TCPServerParams; + using Poco::Net::TimeoutNotification; + using Poco::Net::UDPClient; + using Poco::Net::UDPServerParams; + using Poco::Net::UDPSocketReader; + using Poco::Net::UnsupportedFamilyException; + using Poco::Net::UnsupportedRedirectException; + #if defined(ENABLE_NETSSL_OPENSSL) || defined(ENABLE_NETSSL_WIN) + using Poco::Net::Utility; + using Poco::Net::VerificationErrorArgs; + #endif + using Poco::Net::WebSocket; + using Poco::Net::WebSocketException; + using Poco::Net::WebSocketImpl; + using Poco::Net::WritableNotification; + #if defined(ENABLE_NETSSL_OPENSSL) || defined(ENABLE_NETSSL_WIN) + using Poco::Net::X509Certificate; + #endif + + using Poco::Net::SocketBufVec; + using Poco::Net::UDPMsgSizeT; + + using Poco::Net::HTTPBasicStreamBuf; + using Poco::Net::UDPMultiServer; + using Poco::Net::UDPServer; + + using Poco::Net::SocketBufVecSize; + using Poco::Net::htmlize; + using Poco::Net::initializeNetwork; + #if defined(ENABLE_NETSSL_OPENSSL) || defined(ENABLE_NETSSL_WIN) + using Poco::Net::initializeSSL; + #endif + using Poco::Net::operator<<; + using Poco::Net::operator>>; + using Poco::Net::swap; + using Poco::Net::uninitializeNetwork; + #if defined(ENABLE_NETSSL_OPENSSL) || defined(ENABLE_NETSSL_WIN) + using Poco::Net::uninitializeSSL; + #endif + + namespace Impl { + using Poco::Net::Impl::IPAddressImpl; + using Poco::Net::Impl::IPv4AddressImpl; + using Poco::Net::Impl::IPv4SocketAddressImpl; + using Poco::Net::Impl::IPv6AddressImpl; + using Poco::Net::Impl::IPv6SocketAddressImpl; + using Poco::Net::Impl::LocalSocketAddressImpl; + using Poco::Net::Impl::SocketAddressImpl; + } + #endif +} diff --git a/modules/Poco/PDF.cppm b/modules/Poco/PDF.cppm new file mode 100644 index 000000000..b47b88275 --- /dev/null +++ b/modules/Poco/PDF.cppm @@ -0,0 +1,53 @@ +// +// PDF.cppm +// +// C++ module file +// +// Copyright (c) 2025, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + +module; + +#ifdef ENABLE_PDF +#include "Poco/PDF/AttributedString.h" +#include "Poco/PDF/Cell.h" +#include "Poco/PDF/Destination.h" +#include "Poco/PDF/Encoder.h" +#include "Poco/PDF/Font.h" +#include "Poco/PDF/Image.h" +#include "Poco/PDF/LinkAnnotation.h" +#include "Poco/PDF/Outline.h" +#include "Poco/PDF/Page.h" +#include "Poco/PDF/PDF.h" +#include "Poco/PDF/PDFException.h" +#include "Poco/PDF/Resource.h" +#include "Poco/PDF/Table.h" +#include "Poco/PDF/TextAnnotation.h" +#include "Poco/PDF/XMLTemplate.h" +#endif + +export module Poco.PDF; + +export namespace Poco::PDF { + #ifdef ENABLE_PDF + using Poco::PDF::AttributedString; + using Poco::PDF::Cell; + using Poco::PDF::Destination; + using Poco::PDF::Document; + using Poco::PDF::Encoder; + using Poco::PDF::Font; + using Poco::PDF::Image; + using Poco::PDF::LinkAnnotation; + using Poco::PDF::Outline; + using Poco::PDF::Page; + using Poco::PDF::PDFCreateException; + using Poco::PDF::PDFException; + using Poco::PDF::Resource; + using Poco::PDF::Table; + using Poco::PDF::TextAnnotation; + using Poco::PDF::XMLTemplate; + #endif +} diff --git a/modules/Poco/Prometheus.cppm b/modules/Poco/Prometheus.cppm new file mode 100644 index 000000000..3b0352a53 --- /dev/null +++ b/modules/Poco/Prometheus.cppm @@ -0,0 +1,68 @@ +// +// Prometheus.cppm +// +// C++ module file +// +// Copyright (c) 2025, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + +module; + +#ifdef ENABLE_PROMETHEUS +#include "Poco/Prometheus/AtomicFloat.h" +#include "Poco/Prometheus/CallbackMetric.h" +#include "Poco/Prometheus/Collector.h" +#include "Poco/Prometheus/Counter.h" +#include "Poco/Prometheus/Exporter.h" +#include "Poco/Prometheus/Gauge.h" +#include "Poco/Prometheus/Histogram.h" +#include "Poco/Prometheus/IntCounter.h" +#include "Poco/Prometheus/IntGauge.h" +#include "Poco/Prometheus/LabeledMetric.h" +#include "Poco/Prometheus/LabeledMetricImpl.h" +#include "Poco/Prometheus/Metric.h" +#include "Poco/Prometheus/MetricsRequestHandler.h" +#include "Poco/Prometheus/MetricsServer.h" +#include "Poco/Prometheus/ProcessCollector.h" +#include "Poco/Prometheus/Prometheus.h" +#include "Poco/Prometheus/Registry.h" +#include "Poco/Prometheus/TextExporter.h" +#include "Poco/Prometheus/ThreadPoolCollector.h" +#endif + +export module Poco.Prometheus; + +export namespace Poco::Prometheus { + #ifdef ENABLE_PROMETHEUS + using Poco::Prometheus::AtomicFloat; + using Poco::Prometheus::CallbackMetric; + using Poco::Prometheus::Collector; + using Poco::Prometheus::Counter; + using Poco::Prometheus::CounterSample; + using Poco::Prometheus::Exporter; + using Poco::Prometheus::Gauge; + using Poco::Prometheus::GaugeSample; + using Poco::Prometheus::Histogram; + using Poco::Prometheus::HistogramData; + using Poco::Prometheus::HistogramSample; + using Poco::Prometheus::IntCounter; + using Poco::Prometheus::IntGauge; + using Poco::Prometheus::LabeledMetric; + using Poco::Prometheus::LabeledMetricImpl; + using Poco::Prometheus::Metric; + using Poco::Prometheus::MetricsRequestHandler; + using Poco::Prometheus::MetricsServer; + using Poco::Prometheus::ProcessCollector; + using Poco::Prometheus::Registry; + using Poco::Prometheus::TextExporter; + using Poco::Prometheus::ThreadPoolCollector; + + using Poco::Prometheus::CallbackCounter; + using Poco::Prometheus::CallbackGauge; + using Poco::Prometheus::CallbackIntCounter; + using Poco::Prometheus::CallbackIntGauge; + #endif +} diff --git a/modules/Poco/Redis.cppm b/modules/Poco/Redis.cppm new file mode 100644 index 000000000..5d174770c --- /dev/null +++ b/modules/Poco/Redis.cppm @@ -0,0 +1,50 @@ +// +// Redis.cppm +// +// C++ module file +// +// Copyright (c) 2025, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + +module; + +#ifdef ENABLE_REDIS +#include "Poco/Redis/Array.h" +#include "Poco/Redis/AsyncReader.h" +#include "Poco/Redis/Client.h" +#include "Poco/Redis/Command.h" +#include "Poco/Redis/Error.h" +#include "Poco/Redis/Exception.h" +#include "Poco/Redis/PoolableConnectionFactory.h" +#include "Poco/Redis/RedisEventArgs.h" +#include "Poco/Redis/Redis.h" +#include "Poco/Redis/RedisStream.h" +#include "Poco/Redis/Type.h" +#endif + +export module Poco.Redis; + +export namespace Poco::Redis { + #ifdef ENABLE_REDIS + using Poco::Redis::Array; + using Poco::Redis::AsyncReader; + using Poco::Redis::Client; + using Poco::Redis::Command; + using Poco::Redis::Error; + using Poco::Redis::PooledConnection; + using Poco::Redis::RedisEventArgs; + using Poco::Redis::RedisException; + using Poco::Redis::RedisIOS; + using Poco::Redis::RedisInputStream; + using Poco::Redis::RedisOutputStream; + using Poco::Redis::RedisStreamBuf; + using Poco::Redis::RedisType; + using Poco::Redis::RedisTypeTraits; + using Poco::Redis::Type; + + using Poco::Redis::BulkString; + #endif +} diff --git a/modules/Poco/SevenZip.cppm b/modules/Poco/SevenZip.cppm new file mode 100644 index 000000000..c8e3813cc --- /dev/null +++ b/modules/Poco/SevenZip.cppm @@ -0,0 +1,28 @@ +// +// SevenZip.cppm +// +// C++ module file +// +// Copyright (c) 2025, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + +module; + +#ifdef ENABLE_SEVENZIP +#include "Poco/SevenZip/Archive.h" +#include "Poco/SevenZip/ArchiveEntry.h" +#include "Poco/SevenZip/SevenZip.h" +#endif + +export module Poco.SevenZip; + +export namespace Poco::SevenZip { + #ifdef ENABLE_SEVENZIP + using Poco::SevenZip::Archive; + using Poco::SevenZip::ArchiveEntry; + using Poco::SevenZip::ArchiveImpl; + #endif +} diff --git a/modules/Poco/Util.cppm b/modules/Poco/Util.cppm new file mode 100644 index 000000000..db4cb544e --- /dev/null +++ b/modules/Poco/Util.cppm @@ -0,0 +1,103 @@ +// +// Util.cppm +// +// C++ module file +// +// Copyright (c) 2025, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + +module; + +#ifdef ENABLE_UTIL +#include "Poco/Util/AbstractConfiguration.h" +#include "Poco/Util/Application.h" +#include "Poco/Util/ConfigurationMapper.h" +#include "Poco/Util/ConfigurationView.h" +#include "Poco/Util/FilesystemConfiguration.h" +#include "Poco/Util/HelpFormatter.h" +#include "Poco/Util/IniFileConfiguration.h" +#include "Poco/Util/IntValidator.h" +#include "Poco/Util/JSONConfiguration.h" +#include "Poco/Util/LayeredConfiguration.h" +#include "Poco/Util/LocalConfigurationView.h" +#include "Poco/Util/LoggingConfigurator.h" +#include "Poco/Util/LoggingSubsystem.h" +#include "Poco/Util/MapConfiguration.h" +#include "Poco/Util/OptionCallback.h" +#include "Poco/Util/OptionException.h" +#include "Poco/Util/Option.h" +#include "Poco/Util/OptionProcessor.h" +#include "Poco/Util/OptionSet.h" +#include "Poco/Util/PropertyFileConfiguration.h" +#include "Poco/Util/RegExpValidator.h" +#include "Poco/Util/ServerApplication.h" +#include "Poco/Util/Subsystem.h" +#include "Poco/Util/SystemConfiguration.h" +#include "Poco/Util/Timer.h" +#include "Poco/Util/TimerTaskAdapter.h" +#include "Poco/Util/TimerTask.h" +#include "Poco/Util/Units.h" +#include "Poco/Util/Util.h" +#include "Poco/Util/Validator.h" +#ifdef _WIN32 +#include "Poco/Util/WinRegistryConfiguration.h" +#include "Poco/Util/WinRegistryKey.h" +#include "Poco/Util/WinService.h" +#endif +#include "Poco/Util/XMLConfiguration.h" +#endif + +export module Poco.Util; + +export namespace Poco::Util { + #ifdef ENABLE_UTIL + using Poco::Util::AbstractConfiguration; + using Poco::Util::AbstractOptionCallback; + using Poco::Util::AmbiguousOptionException; + using Poco::Util::Application; + using Poco::Util::ConfigurationMapper; + using Poco::Util::ConfigurationView; + using Poco::Util::DuplicateOptionException; + using Poco::Util::EmptyOptionException; + using Poco::Util::FilesystemConfiguration; + using Poco::Util::HelpFormatter; + using Poco::Util::IncompatibleOptionsException; + using Poco::Util::IniFileConfiguration; + using Poco::Util::IntValidator; + using Poco::Util::InvalidArgumentException; + using Poco::Util::JSONConfiguration; + using Poco::Util::LayeredConfiguration; + using Poco::Util::LocalConfigurationView; + using Poco::Util::LoggingConfigurator; + using Poco::Util::LoggingSubsystem; + using Poco::Util::MapConfiguration; + using Poco::Util::MissingArgumentException; + using Poco::Util::MissingOptionException; + using Poco::Util::Option; + using Poco::Util::OptionCallback; + using Poco::Util::OptionException; + using Poco::Util::OptionProcessor; + using Poco::Util::OptionSet; + using Poco::Util::PropertyFileConfiguration; + using Poco::Util::RegExpValidator; + using Poco::Util::ServerApplication; + using Poco::Util::Subsystem; + using Poco::Util::SystemConfiguration; + using Poco::Util::Timer; + using Poco::Util::TimerFunc; + using Poco::Util::TimerTask; + using Poco::Util::TimerTaskAdapter; + using Poco::Util::UnexpectedArgumentException; + using Poco::Util::UnknownOptionException; + using Poco::Util::Validator; + #ifdef _WIN32 + using Poco::Util::WinRegistryConfiguration; + using Poco::Util::WinRegistryKey; + using Poco::Util::WinService; + #endif + using Poco::Util::XMLConfiguration; + #endif +} diff --git a/modules/Poco/XML.cppm b/modules/Poco/XML.cppm new file mode 100644 index 000000000..1c7cf0990 --- /dev/null +++ b/modules/Poco/XML.cppm @@ -0,0 +1,188 @@ +// +// XML.cppm +// +// C++ module file +// +// Copyright (c) 2025, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + +module; + +#ifdef ENABLE_XML +#include "Poco/DOM/AbstractContainerNode.h" +#include "Poco/DOM/AbstractNode.h" +#include "Poco/DOM/Attr.h" +#include "Poco/DOM/AttrMap.h" +#include "Poco/DOM/AutoPtr.h" +#include "Poco/DOM/CDATASection.h" +#include "Poco/DOM/CharacterData.h" +#include "Poco/DOM/ChildNodesList.h" +#include "Poco/DOM/Comment.h" +#include "Poco/DOM/DocumentEvent.h" +#include "Poco/DOM/DocumentFragment.h" +#include "Poco/DOM/Document.h" +#include "Poco/DOM/DocumentType.h" +#include "Poco/DOM/DOMBuilder.h" +#include "Poco/DOM/DOMException.h" +#include "Poco/DOM/DOMImplementation.h" +#include "Poco/DOM/DOMObject.h" +#include "Poco/DOM/DOMParser.h" +#include "Poco/DOM/DOMSerializer.h" +#include "Poco/DOM/DOMWriter.h" +#include "Poco/DOM/DTDMap.h" +#include "Poco/DOM/Element.h" +#include "Poco/DOM/ElementsByTagNameList.h" +#include "Poco/DOM/Entity.h" +#include "Poco/DOM/EntityReference.h" +#include "Poco/DOM/EventDispatcher.h" +#include "Poco/DOM/EventException.h" +#include "Poco/DOM/Event.h" +#include "Poco/DOM/EventListener.h" +#include "Poco/DOM/EventTarget.h" +#include "Poco/DOM/MutationEvent.h" +#include "Poco/DOM/NamedNodeMap.h" +#include "Poco/DOM/NodeAppender.h" +#include "Poco/DOM/NodeFilter.h" +#include "Poco/DOM/Node.h" +#include "Poco/DOM/NodeIterator.h" +#include "Poco/DOM/NodeList.h" +#include "Poco/DOM/Notation.h" +#include "Poco/DOM/ProcessingInstruction.h" +#include "Poco/DOM/Text.h" +#include "Poco/DOM/TreeWalker.h" +#include "Poco/SAX/Attributes.h" +#include "Poco/SAX/AttributesImpl.h" +#include "Poco/SAX/ContentHandler.h" +#include "Poco/SAX/DeclHandler.h" +#include "Poco/SAX/DefaultHandler.h" +#include "Poco/SAX/DTDHandler.h" +#include "Poco/SAX/EntityResolver.h" +#include "Poco/SAX/EntityResolverImpl.h" +#include "Poco/SAX/ErrorHandler.h" +#include "Poco/SAX/InputSource.h" +#include "Poco/SAX/LexicalHandler.h" +#include "Poco/SAX/Locator.h" +#include "Poco/SAX/LocatorImpl.h" +#include "Poco/SAX/NamespaceSupport.h" +#include "Poco/SAX/SAXException.h" +#include "Poco/SAX/SAXParser.h" +#include "Poco/SAX/WhitespaceFilter.h" +#include "Poco/SAX/XMLFilter.h" +#include "Poco/SAX/XMLFilterImpl.h" +#include "Poco/SAX/XMLReader.h" +#include "Poco/XML/Content.h" +#include "Poco/XML/Name.h" +#include "Poco/XML/NamePool.h" +#include "Poco/XML/NamespaceStrategy.h" +#include "Poco/XML/QName.h" +#include "Poco/XML/ValueTraits.h" +#include "Poco/XML/XMLException.h" +#include "Poco/XML/XML.h" +#include "Poco/XML/XMLStream.h" +#include "Poco/XML/XMLStreamParserException.h" +#include "Poco/XML/XMLStreamParser.h" +#include "Poco/XML/XMLString.h" +#include "Poco/XML/XMLWriter.h" +#endif + +export module Poco.XML; + +export namespace Poco::XML { + #ifdef ENABLE_XML + // DOM + using Poco::XML::AbstractContainerNode; + using Poco::XML::AbstractNode; + using Poco::XML::Attr; + using Poco::XML::AttrMap; + using Poco::XML::CDATASection; + using Poco::XML::CharacterData; + using Poco::XML::ChildNodesList; + using Poco::XML::Comment; + using Poco::XML::DOMBuilder; + using Poco::XML::DOMException; + using Poco::XML::DOMImplementation; + using Poco::XML::DOMObject; + using Poco::XML::DOMParser; + using Poco::XML::DOMSerializer; + using Poco::XML::DOMWriter; + using Poco::XML::DTDMap; + using Poco::XML::Document; + using Poco::XML::DocumentEvent; + using Poco::XML::DocumentFragment; + using Poco::XML::DocumentType; + using Poco::XML::Element; + using Poco::XML::ElementsByTagNameList; + using Poco::XML::ElementsByTagNameListNS; + using Poco::XML::Entity; + using Poco::XML::EntityReference; + using Poco::XML::Event; + using Poco::XML::EventDispatcher; + using Poco::XML::EventException; + using Poco::XML::EventListener; + using Poco::XML::EventTarget; + using Poco::XML::MutationEvent; + using Poco::XML::NamedNodeMap; + using Poco::XML::Node; + using Poco::XML::NodeAppender; + using Poco::XML::NodeFilter; + using Poco::XML::NodeIterator; + using Poco::XML::NodeList; + using Poco::XML::Notation; + using Poco::XML::ProcessingInstruction; + using Poco::XML::Text; + using Poco::XML::TreeWalker; + + // SAX + using Poco::XML::Attributes; + using Poco::XML::ContentHandler; + using Poco::XML::DTDHandler; + using Poco::XML::DeclHandler; + using Poco::XML::DefaultHandler; + using Poco::XML::EntityResolver; + using Poco::XML::ErrorHandler; + using Poco::XML::InputSource; + using Poco::XML::LexicalHandler; + using Poco::XML::Locator; + using Poco::XML::NamespaceSupport; + using Poco::XML::SAXException; + using Poco::XML::SAXNotRecognizedException; + using Poco::XML::SAXNotSupportedException; + using Poco::XML::SAXParseException; + using Poco::XML::SAXParser; + using Poco::XML::WhitespaceFilter; + using Poco::XML::XMLFilter; + using Poco::XML::XMLReader; + + using Poco::XML::AttributesImpl; + using Poco::XML::EntityResolverImpl; + using Poco::XML::LocatorImpl; + using Poco::XML::XMLFilterImpl; + + // XML + using Poco::XML::Content; + using Poco::XML::DefaultValueTraits; + using Poco::XML::Name; + using Poco::XML::NamePool; + using Poco::XML::NamespacePrefixesStrategy; + using Poco::XML::NamespaceStrategy; + using Poco::XML::NoNamespacePrefixesStrategy; + using Poco::XML::NoNamespacesStrategy; + using Poco::XML::QName; + using Poco::XML::ValueTraits; + using Poco::XML::XMLException; + using Poco::XML::XMLStreamParser; + using Poco::XML::XMLStreamParserException; + using Poco::XML::XMLWriter; + + using Poco::XML::fromXMLString; + using Poco::XML::operator!=; + using Poco::XML::operator<; + using Poco::XML::operator<<; + using Poco::XML::operator==; + using Poco::XML::swap; + using Poco::XML::toXMLString; + #endif +} diff --git a/modules/Poco/Zip.cppm b/modules/Poco/Zip.cppm new file mode 100644 index 000000000..efbf57461 --- /dev/null +++ b/modules/Poco/Zip.cppm @@ -0,0 +1,78 @@ +// +// Zip.cppm +// +// C++ module file +// +// Copyright (c) 2025, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + +module; + +#ifdef ENABLE_ZIP +#include "Poco/Zip/Add.h" +#include "Poco/Zip/AutoDetectStream.h" +#include "Poco/Zip/Compress.h" +#include "Poco/Zip/Decompress.h" +#include "Poco/Zip/Delete.h" +#include "Poco/Zip/Keep.h" +#include "Poco/Zip/ParseCallback.h" +#include "Poco/Zip/PartialStream.h" +#include "Poco/Zip/Rename.h" +#include "Poco/Zip/Replace.h" +#include "Poco/Zip/SkipCallback.h" +#include "Poco/Zip/ZipArchive.h" +#include "Poco/Zip/ZipArchiveInfo.h" +#include "Poco/Zip/ZipCommon.h" +#include "Poco/Zip/ZipDataInfo.h" +#include "Poco/Zip/ZipException.h" +#include "Poco/Zip/ZipFileInfo.h" +#include "Poco/Zip/Zip.h" +#include "Poco/Zip/ZipLocalFileHeader.h" +#include "Poco/Zip/ZipManipulator.h" +#include "Poco/Zip/ZipOperation.h" +#include "Poco/Zip/ZipStream.h" +#include "Poco/Zip/ZipUtil.h" +#endif + +export module Poco.Zip; + +export namespace Poco::Zip { + #ifdef ENABLE_ZIP + using Poco::Zip::Add; + using Poco::Zip::AutoDetectIOS; + using Poco::Zip::AutoDetectInputStream; + using Poco::Zip::AutoDetectStreamBuf; + using Poco::Zip::Compress; + using Poco::Zip::Decompress; + using Poco::Zip::Delete; + using Poco::Zip::Keep; + using Poco::Zip::ParseCallback; + using Poco::Zip::PartialIOS; + using Poco::Zip::PartialInputStream; + using Poco::Zip::PartialOutputStream; + using Poco::Zip::PartialStreamBuf; + using Poco::Zip::Rename; + using Poco::Zip::Replace; + using Poco::Zip::SkipCallback; + using Poco::Zip::ZipArchive; + using Poco::Zip::ZipArchiveInfo; + using Poco::Zip::ZipArchiveInfo64; + using Poco::Zip::ZipCommon; + using Poco::Zip::ZipDataInfo; + using Poco::Zip::ZipDataInfo64; + using Poco::Zip::ZipException; + using Poco::Zip::ZipFileInfo; + using Poco::Zip::ZipIOS; + using Poco::Zip::ZipInputStream; + using Poco::Zip::ZipLocalFileHeader; + using Poco::Zip::ZipManipulationException; + using Poco::Zip::ZipManipulator; + using Poco::Zip::ZipOperation; + using Poco::Zip::ZipOutputStream; + using Poco::Zip::ZipStreamBuf; + using Poco::Zip::ZipUtil; + #endif +} diff --git a/modules/cmake/PocoModulesConfig.cmake b/modules/cmake/PocoModulesConfig.cmake new file mode 100644 index 000000000..096ac7078 --- /dev/null +++ b/modules/cmake/PocoModulesConfig.cmake @@ -0,0 +1,102 @@ +include(CMakeFindDependencyMacro) + +if(ENABLE_FOUNDATION) + find_dependency(PocoFoundation) + if(ENABLE_ENCODINGS) + find_dependency(PocoEncodings) + endif() +endif() + +if(ENABLE_ACTIVERECORD) + find_dependency(PocoActiveRecord) +endif() + +if(ENABLE_CRYPTO) + find_dependency(PocoCrypto) +endif() + +if(ENABLE_CPPPARSER) + find_dependency(PocoCppParser) +endif() + +if(ENABLE_CPPUNIT) + find_dependency(PocoCppUnit) +endif() + +if(ENABLE_DATA) + find_dependency(PocoData) + + if(ENABLE_DATA_MYSQL) + find_dependency(PocoDataMySQL) + endif() + + if(ENABLE_DATA_ODBC) + find_dependency(PocoDataODBC) + endif() + + if(ENABLE_DATA_POSTGRESQL) + find_dependency(PocoDataPostgreSQL) + endif() + + if(ENABLE_DATA_SQLITE) + find_dependency(PocoDataSQLite) + endif() +endif() + +if(ENABLE_DNSSD) + find_dependency(PocoDNSSD) + + if(ENABLE_DNSSD_AVAHI) + find_dependency(PocoDNSSDAvahi) + endif() + + if(ENABLE_DNSSD_BONJOUR) + find_dependency(PocoDNSSDBonjour) + endif() +endif() + +if(ENABLE_JSON) + find_dependency(PocoJSON) +endif() + +if(ENABLE_JWT) + find_dependency(PocoJWT) +endif() + +if(ENABLE_MONGODB) + find_dependency(PocoMongoDB) +endif() + +if(ENABLE_NET) + find_dependency(PocoNet) +endif() + +if(ENABLE_PDF) + find_dependency(PocoPDF) +endif() + +if(ENABLE_PROMETHEUS) + find_dependency(PocoPrometheus) +endif() + +if(ENABLE_REDIS) + find_dependency(PocoRedis) +endif() + +if(ENABLE_SEVENZIP) + find_dependency(PocoSevenZip) +endif() + +if(ENABLE_UTIL) + find_dependency(PocoUtil) +endif() + +if(ENABLE_XML) + find_dependency(PocoXML) +endif() + +if(ENABLE_ZIP) + find_dependency(PocoZip) +endif() + +include("${CMAKE_CURRENT_LIST_DIR}/PocoModulesTargets.cmake") diff --git a/modules/samples/CMakeLists.txt b/modules/samples/CMakeLists.txt new file mode 100644 index 000000000..c4483b679 --- /dev/null +++ b/modules/samples/CMakeLists.txt @@ -0,0 +1,3 @@ +add_executable(moduletest src/ModuleTest.cpp) +target_compile_definitions(moduletest PUBLIC ENABLE_MODULES) +target_link_libraries(moduletest PUBLIC Poco::Modules Poco::Foundation) diff --git a/modules/samples/src/ModuleTest.cpp b/modules/samples/src/ModuleTest.cpp new file mode 100644 index 000000000..7ab02dd60 --- /dev/null +++ b/modules/samples/src/ModuleTest.cpp @@ -0,0 +1,49 @@ +// ModuleTest.cpp +// +// This sample importing POCO as a C++ module. +// +// Copyright (c) 2025, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + +#include +#include + +import Poco; + +using Poco::LocalDateTime; +using Poco::DateTime; +using Poco::DateTimeFormat; +using Poco::DateTimeFormatter; +using Poco::DateTimeParser; +using Poco::URI; + +int main(int argc, char** argv) +{ + LocalDateTime now; + + std::string str = DateTimeFormatter::format(now, DateTimeFormat::ISO8601_FORMAT); + DateTime dt; + int tzd; + DateTimeParser::parse(DateTimeFormat::ISO8601_FORMAT, str, dt, tzd); + dt.makeUTC(tzd); + LocalDateTime ldt(tzd, dt); + URI uri1("http://www.appinf.com:81/sample?example-query#somewhere"); + + std::println("Scheme: {}", uri1.getScheme()); + std::println("Authority: {}". uri1.getAuthority()); + std::println("Path: {}", uri1.getPath()); + std::println("Query: {}", uri1.getQuery()); + std::println("Fragment: {}", uri1.getFragment()); + + URI uri2; + uri2.setScheme("https"); + uri2.setAuthority("www.appinf.com"); + uri2.setPath("/another sample"); + + std::println("{}", uri1.toString()); + + return 0; +} diff --git a/modules/testsuite/CMakeLists.txt b/modules/testsuite/CMakeLists.txt new file mode 100644 index 000000000..08f4f7a34 --- /dev/null +++ b/modules/testsuite/CMakeLists.txt @@ -0,0 +1,31 @@ +# Sources +file(GLOB SRCS_G "src/*.cpp") +POCO_SOURCES_AUTO(TEST_SRCS ${SRCS_G}) + +# Headers +file(GLOB_RECURSE HDRS_G "src/*.h") +POCO_HEADERS_AUTO(TEST_SRCS ${HDRS_G}) + +POCO_SOURCES_AUTO_PLAT(TEST_SRCS OFF + src/WinDriver.cpp +) + +add_executable(Modules-testrunner ${TEST_SRCS}) +target_compile_definitions(Modules-testrunner PUBLIC ENABLE_MODULES) +target_link_libraries(Modules-testrunner PUBLIC Poco::Modules Poco::Foundation) + +if(ANDROID) + add_test( + NAME Modules + WORKING_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} + COMMAND ${CMAKE_COMMAND} -DANDROID_NDK=${ANDROID_NDK} -DLIBRARY_DIR=${CMAKE_BINARY_DIR}/lib -DUNITTEST=${CMAKE_BINARY_DIR}/bin/Modules-testrunner -DTEST_PARAMETER=-all -P ${PROJECT_SOURCE_DIR}/cmake/ExecuteOnAndroid.cmake + ) +else() + add_test( + NAME Modules + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMAND Modules-testrunner -ignore ${PROJECT_SOURCE_DIR}/cppignore.lnx -all + ) + set_tests_properties(Modules PROPERTIES ENVIRONMENT POCO_BASE=${PROJECT_SOURCE_DIR}) +endif() +target_link_libraries(Modules-testrunner PUBLIC Poco::Modules CppUnit) diff --git a/modules/testsuite/Makefile b/modules/testsuite/Makefile new file mode 100644 index 000000000..9b4edccb5 --- /dev/null +++ b/modules/testsuite/Makefile @@ -0,0 +1,15 @@ +# +# Makefile +# +# Makefile for Poco Modules testsuite +# + +include $(POCO_BASE)/build/rules/global + +objects = ModulesTestSuite Driver ModulesTest + +target = testrunner +target_version = 1 +target_libs = PocoModules PocoFoundation CppUnit + +include $(POCO_BASE)/build/rules/exec diff --git a/modules/testsuite/src/Driver.cpp b/modules/testsuite/src/Driver.cpp new file mode 100644 index 000000000..6d951871e --- /dev/null +++ b/modules/testsuite/src/Driver.cpp @@ -0,0 +1,17 @@ +// +// Driver.cpp +// +// Console-based test driver for Poco Modules. +// +// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#include "CppUnit/TestRunner.h" +#include "ModulesTestSuite.h" + + +CppUnitMain(ModulesTestSuite) diff --git a/modules/testsuite/src/ModulesTest.cpp b/modules/testsuite/src/ModulesTest.cpp new file mode 100644 index 000000000..afaac7b02 --- /dev/null +++ b/modules/testsuite/src/ModulesTest.cpp @@ -0,0 +1,61 @@ +// +// ModulesTest.cpp +// +// Copyright (c) 2025, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#include "ModulesTest.h" +#include "CppUnit/TestCaller.h" +#include "CppUnit/TestSuite.h" + +import Poco; + +ModulesTest::ModulesTest(const std::string& name): CppUnit::TestCase(name) +{ +} + + +ModulesTest::~ModulesTest() +{ +} + + +void ModulesTest::testModule() +{ + Poco::LocalDateTime now; + + std::string str = Poco::DateTimeFormatter::format(now, Poco::DateTimeFormat::ISO8601_FORMAT); + Poco::DateTime dt; + int tzd; + Poco::DateTimeParser::parse(Poco::DateTimeFormat::ISO8601_FORMAT, str, dt, tzd); + dt.makeUTC(tzd); + Poco::LocalDateTime ldt(tzd, dt); + Poco::URI uri1("http://www.appinf.com:81/sample?example-query#somewhere"); + + std::println("Scheme: {}", uri1.getScheme()); + std::println("Authority: {}". uri1.getAuthority()); + std::println("Path: {}", uri1.getPath()); + std::println("Query: {}", uri1.getQuery()); + std::println("Fragment: {}", uri1.getFragment()); + + Poco::URI uri2; + uri2.setScheme("https"); + uri2.setAuthority("www.appinf.com"); + uri2.setPath("/another sample"); + + std::println("{}", uri1.toString()); +} + + +CppUnit::Test* ModulesTest::suite() +{ + CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("ModulesTest"); + + CppUnit_addTest(pSuite, ModulesTest, testModule); + + return pSuite; +} diff --git a/modules/testsuite/src/ModulesTest.h b/modules/testsuite/src/ModulesTest.h new file mode 100644 index 000000000..2dfbb5e1d --- /dev/null +++ b/modules/testsuite/src/ModulesTest.h @@ -0,0 +1,33 @@ +// +// ModulesTest.h +// +// Definition of the ModulesTest class. +// +// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef ModulesTest_INCLUDED +#define ModulesTest_INCLUDED + +#include +#include + +#include "CppUnit/TestCase.h" + +class ModulesTest: public CppUnit::TestCase +{ +public: + ModulesTest(const std::string& name); + ~ModulesTest(); + + void testModule(); + + static CppUnit::Test* suite(); +}; + + +#endif // ModulesTest_INCLUDED diff --git a/modules/testsuite/src/ModulesTestSuite.cpp b/modules/testsuite/src/ModulesTestSuite.cpp new file mode 100644 index 000000000..0b6f234d2 --- /dev/null +++ b/modules/testsuite/src/ModulesTestSuite.cpp @@ -0,0 +1,22 @@ +// +// ModulesTestSuite.cpp +// +// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#include "ModulesTestSuite.h" +#include "ModulesTest.h" + + +CppUnit::Test* ModulesTestSuite::suite() +{ + CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("ModulesTestSuite"); + + pSuite->addTest(ModulesTest::suite()); + + return pSuite; +} diff --git a/modules/testsuite/src/ModulesTestSuite.h b/modules/testsuite/src/ModulesTestSuite.h new file mode 100644 index 000000000..15a0d4534 --- /dev/null +++ b/modules/testsuite/src/ModulesTestSuite.h @@ -0,0 +1,27 @@ +// +// ModulesTestSuite.h +// +// Definition of the ModulesTestSuite class. +// +// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#ifndef ModulesTestSuite_INCLUDED +#define ModulesTestSuite_INCLUDED + + +#include "CppUnit/TestSuite.h" + + +class ModulesTestSuite +{ +public: + static CppUnit::Test* suite(); +}; + + +#endif // ModulesTestSuite_INCLUDED diff --git a/modules/testsuite/src/WinDriver.cpp b/modules/testsuite/src/WinDriver.cpp new file mode 100644 index 000000000..ce7270ac3 --- /dev/null +++ b/modules/testsuite/src/WinDriver.cpp @@ -0,0 +1,28 @@ +// +// WinDriver.cpp +// +// Windows test driver for Poco Modules. +// +// Copyright (c) 2006, Applied Informatics Software Engineering GmbH. +// and Contributors. +// +// SPDX-License-Identifier: BSL-1.0 +// + + +#include "WinTestRunner/WinTestRunner.h" +#include "ModulesTestSuite.h" + + +class TestDriver: public CppUnit::WinTestRunnerApp +{ + void TestMain() + { + CppUnit::WinTestRunner runner; + runner.addTest(ModulesTestSuite::suite()); + runner.run(); + } +}; + + +TestDriver theDriver;