From ff6eb9293739279c81f1e8e73c058ff6bcd4ed0e Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Sat, 2 Apr 2022 03:40:07 +0000 Subject: [PATCH 01/70] libbsd: 0.11.5 -> 0.11.6 --- pkgs/development/libraries/libbsd/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/libraries/libbsd/default.nix b/pkgs/development/libraries/libbsd/default.nix index 8c8e47b98a4..b8f6aac0b38 100644 --- a/pkgs/development/libraries/libbsd/default.nix +++ b/pkgs/development/libraries/libbsd/default.nix @@ -2,11 +2,11 @@ stdenv.mkDerivation rec { pname = "libbsd"; - version = "0.11.5"; + version = "0.11.6"; src = fetchurl { url = "https://libbsd.freedesktop.org/releases/${pname}-${version}.tar.xz"; - sha256 = "sha256-GpyVJSVjXBu2dwyyLpabk42Oap15EjYrmO6DcFmbDv0="; + sha256 = "sha256-GbOPMXLq9pPm4caHFGNhkMfkiFHkUiTXILO1vASZtd8="; }; outputs = [ "out" "dev" "man" ]; From 266b01d1d421844a42571dc9b09ca27c28c211d9 Mon Sep 17 00:00:00 2001 From: Jordan Justen Date: Thu, 3 Mar 2022 00:57:05 -0800 Subject: [PATCH 02/70] SPIRV-LLVM-Translator: Build and install llvm-spirv tool This will make ${self.spirv-llvm-translator}/bin/llvm-spirv available. As of llvmorg-12.0.0, libclc can now build SPIR-V based libraries, but requires the llvm-spirv build tool for this. Ref: https://github.com/llvm/llvm-project/blob/llvmorg-12.0.0/libclc/CMakeLists.txt#L98 Signed-off-by: Jordan Justen --- .../development/compilers/spirv-llvm-translator/default.nix | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pkgs/development/compilers/spirv-llvm-translator/default.nix b/pkgs/development/compilers/spirv-llvm-translator/default.nix index 0dff7f0e1b0..7c37c4789f4 100644 --- a/pkgs/development/compilers/spirv-llvm-translator/default.nix +++ b/pkgs/development/compilers/spirv-llvm-translator/default.nix @@ -30,6 +30,12 @@ stdenv.mkDerivation rec { # FIXME: CMake tries to run "/llvm-lit" which of course doesn't exist doCheck = false; + makeFlags = [ "all" "llvm-spirv" ]; + + postInstall = '' + install -D tools/llvm-spirv/llvm-spirv $out/bin/llvm-spirv + ''; + meta = with lib; { homepage = "https://github.com/KhronosGroup/SPIRV-LLVM-Translator"; description = "A tool and a library for bi-directional translation between SPIR-V and LLVM IR"; From 155dbcfc81ab2cd7242e143958ea890f5e262ed3 Mon Sep 17 00:00:00 2001 From: Jordan Justen Date: Thu, 3 Mar 2022 01:18:17 -0800 Subject: [PATCH 03/70] libclc: 11.0.1 -> 12.0.1 As part of the upgrade to 12.0.1, now 2 SPIR-V libraries will now be made available: * spirv64-mesa3d-.spv * spirv-mesa3d-.spv Signed-off-by: Jordan Justen --- pkgs/development/libraries/libclc/default.nix | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/pkgs/development/libraries/libclc/default.nix b/pkgs/development/libraries/libclc/default.nix index c634892944c..3f6e12291a3 100644 --- a/pkgs/development/libraries/libclc/default.nix +++ b/pkgs/development/libraries/libclc/default.nix @@ -1,4 +1,4 @@ -{ lib, stdenv, fetchFromGitHub, ninja, cmake, python3, llvmPackages }: +{ lib, stdenv, fetchFromGitHub, ninja, cmake, python3, llvmPackages, spirv-llvm-translator }: let llvm = llvmPackages.llvm; @@ -7,13 +7,13 @@ in stdenv.mkDerivation rec { pname = "libclc"; - version = "11.0.1"; + version = "12.0.1"; src = fetchFromGitHub { owner = "llvm"; repo = "llvm-project"; rev = "llvmorg-${version}"; - sha256 = "0bxh43hp1vl4axl3s9n2nb2ii8x1cbq98xz9c996f8rl5jy84ags"; + sha256 = "08s5w2db9imb2yaqsvxs6pg21csi1cf6wa35rf8x6q07mam7j8qv"; }; sourceRoot = "source/libclc"; @@ -21,10 +21,12 @@ stdenv.mkDerivation rec { postPatch = '' substituteInPlace CMakeLists.txt \ --replace 'find_program( LLVM_CLANG clang PATHS ''${LLVM_BINDIR} NO_DEFAULT_PATH )' \ - 'find_program( LLVM_CLANG clang PATHS "${clang-unwrapped}/bin" NO_DEFAULT_PATH )' + 'find_program( LLVM_CLANG clang PATHS "${clang-unwrapped}/bin" NO_DEFAULT_PATH )' \ + --replace 'find_program( LLVM_SPIRV llvm-spirv PATHS ''${LLVM_BINDIR} NO_DEFAULT_PATH )' \ + 'find_program( LLVM_SPIRV llvm-spirv PATHS "${spirv-llvm-translator}/bin" NO_DEFAULT_PATH )' ''; - nativeBuildInputs = [ cmake ninja python3 ]; + nativeBuildInputs = [ cmake ninja python3 spirv-llvm-translator ]; buildInputs = [ llvm clang-unwrapped ]; strictDeps = true; cmakeFlags = [ From a7f9bb67da1f4090a50ba0445fdb05f43e233bc7 Mon Sep 17 00:00:00 2001 From: Artturin Date: Wed, 27 Apr 2022 16:21:09 +0300 Subject: [PATCH 04/70] audit: enable strictDeps checked with diffoscope --- pkgs/os-specific/linux/audit/default.nix | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/pkgs/os-specific/linux/audit/default.nix b/pkgs/os-specific/linux/audit/default.nix index 6d14a3293fc..bda8d8ab30c 100644 --- a/pkgs/os-specific/linux/audit/default.nix +++ b/pkgs/os-specific/linux/audit/default.nix @@ -2,7 +2,7 @@ lib, stdenv, buildPackages, fetchurl, fetchpatch, runCommand, autoreconfHook, - autoconf, automake, libtool, + autoconf, automake, libtool, bash, # Enabling python support while cross compiling would be possible, but # the configure script tries executing python to gather info instead of # relying on python3-config exclusively @@ -21,9 +21,11 @@ stdenv.mkDerivation rec { outputs = [ "bin" "dev" "out" "man" ]; + strictDeps = true; depsBuildBuild = [ buildPackages.stdenv.cc ]; - nativeBuildInputs = [ autoreconfHook ]; - buildInputs = lib.optionals enablePython [ python3 swig ]; + nativeBuildInputs = [ autoreconfHook ] + ++ lib.optionals enablePython [ python3 swig ]; + buildInputs = [ bash ]; configureFlags = [ # z/OS plugin is not useful on Linux, From 44370b355e5ea046bf3727b9e90db6428e10ea2a Mon Sep 17 00:00:00 2001 From: Francesco Gazzetta Date: Sat, 23 Apr 2022 12:44:50 +0200 Subject: [PATCH 05/70] bluez: install gatttool too --- pkgs/os-specific/linux/bluez/default.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/pkgs/os-specific/linux/bluez/default.nix b/pkgs/os-specific/linux/bluez/default.nix index 1f6fb31d93d..d4d23220d29 100644 --- a/pkgs/os-specific/linux/bluez/default.nix +++ b/pkgs/os-specific/linux/bluez/default.nix @@ -126,6 +126,7 @@ in stdenv.mkDerivation rec { filename=$(basename $files) install -Dm755 tools/$filename $out/bin/$filename done + install -Dm755 attrib/gatttool $out/bin/gatttool ''; enableParallelBuilding = true; From c96b21c78be0c5f954ac7fc218c5fadb683656dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sandro=20J=C3=A4ckel?= Date: Tue, 26 Apr 2022 14:48:52 +0200 Subject: [PATCH 06/70] libpcap: move dev things to extra output --- pkgs/development/libraries/libpcap/default.nix | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pkgs/development/libraries/libpcap/default.nix b/pkgs/development/libraries/libpcap/default.nix index f3d3587c14f..dbf494374cb 100644 --- a/pkgs/development/libraries/libpcap/default.nix +++ b/pkgs/development/libraries/libpcap/default.nix @@ -6,6 +6,8 @@ stdenv.mkDerivation rec { pname = "libpcap"; version = "1.10.1"; + outputs = [ "out" "dev" ]; + src = fetchurl { url = "https://www.tcpdump.org/release/${pname}-${version}.tar.gz"; sha256 = "sha256-7ShfSsyvBTRPkJdXV7Pb/ncrpB0cQBwmSLf6RbcRvdQ="; @@ -27,6 +29,8 @@ stdenv.mkDerivation rec { if [ "$dontDisableStatic" -ne "1" ]; then rm -f $out/lib/libpcap.a fi + + moveToOutput "bin/pcap-config" "$dev" ''; meta = { From 99dd6e952f99e91e9b8526855ebaf790fdbde37c Mon Sep 17 00:00:00 2001 From: Martin Weinelt Date: Wed, 27 Apr 2022 18:35:48 +0200 Subject: [PATCH 07/70] python3Packages.sqlalchemy: 1.4.35 -> 1.4.36 https://github.com/sqlalchemy/sqlalchemy/releases/tag/rel_1_4_36 --- pkgs/development/python-modules/sqlalchemy/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/sqlalchemy/default.nix b/pkgs/development/python-modules/sqlalchemy/default.nix index b6e800a7ed3..0bed203007c 100644 --- a/pkgs/development/python-modules/sqlalchemy/default.nix +++ b/pkgs/development/python-modules/sqlalchemy/default.nix @@ -13,11 +13,11 @@ buildPythonPackage rec { pname = "SQLAlchemy"; - version = "1.4.35"; + version = "1.4.36"; src = fetchPypi { inherit pname version; - hash = "sha256-L/yBOwHcZHOZD15XXyEMpawvVGWs45CLeP/W0gBYqrU="; + hash = "sha256-ZGeKwyHWSkWQHvLiRyXsXng/H0pYgwXhlkMUR+es4kM="; }; propagatedBuildInputs = [ From 784ea32182571783f40163739edd00db8ec401ea Mon Sep 17 00:00:00 2001 From: Artturin Date: Wed, 27 Apr 2022 21:40:05 +0300 Subject: [PATCH 08/70] gst_all_1.gstreamer: enable strictDeps and fix cross checked with diffoscope --- .../libraries/gstreamer/core/default.nix | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/pkgs/development/libraries/gstreamer/core/default.nix b/pkgs/development/libraries/gstreamer/core/default.nix index dcb4fcaef93..c5f836f26a4 100644 --- a/pkgs/development/libraries/gstreamer/core/default.nix +++ b/pkgs/development/libraries/gstreamer/core/default.nix @@ -4,7 +4,6 @@ , ninja , pkg-config , gettext -, gobject-introspection , bison , flex , python3 @@ -17,6 +16,8 @@ , bash-completion , lib , CoreServices +, withIntrospection ? stdenv.buildPlatform == stdenv.hostPlatform +, gobject-introspection }: stdenv.mkDerivation rec { @@ -37,6 +38,7 @@ stdenv.mkDerivation rec { sha256 = "0cghi6n4nhdbajz3wqcgbh5xm94myvnqgsi9g2bz9n1s9904l2fy"; }; + strictDeps = true; nativeBuildInputs = [ meson ninja @@ -47,11 +49,14 @@ stdenv.mkDerivation rec { python3 makeWrapper glib - gobject-introspection bash-completion # documentation # TODO add hotdoc here + ] ++ lib.optionals stdenv.isLinux [ + libcap # for setcap binary + ] ++ lib.optionals withIntrospection [ + gobject-introspection ]; buildInputs = [ @@ -60,6 +65,8 @@ stdenv.mkDerivation rec { libcap libunwind elfutils + ] ++ lib.optionals withIntrospection [ + gobject-introspection ] ++ lib.optionals stdenv.isDarwin [ CoreServices ]; @@ -72,8 +79,7 @@ stdenv.mkDerivation rec { "-Ddbghelp=disabled" # not needed as we already provide libunwind and libdw, and dbghelp is a fallback to those "-Dexamples=disabled" # requires many dependencies and probably not useful for our users "-Ddoc=disabled" # `hotdoc` not packaged in nixpkgs as of writing - ] ++ lib.optionals (stdenv.buildPlatform != stdenv.hostPlatform) [ - "-Dintrospection=disabled" + "-Dintrospection=${if withIntrospection then "enabled" else "disabled"}" ] ++ lib.optionals stdenv.isDarwin [ # darwin.libunwind doesn't have pkg-config definitions so meson doesn't detect it. "-Dlibunwind=disabled" From faef08342601b39b87fc2aa6d90557fba6249a25 Mon Sep 17 00:00:00 2001 From: Artturin Date: Wed, 27 Apr 2022 22:08:21 +0300 Subject: [PATCH 09/70] libical: enable strictDeps and fix cross checked with diffoscope --- pkgs/development/libraries/libical/default.nix | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/pkgs/development/libraries/libical/default.nix b/pkgs/development/libraries/libical/default.nix index 77c595c9184..02c02b607e5 100644 --- a/pkgs/development/libraries/libical/default.nix +++ b/pkgs/development/libraries/libical/default.nix @@ -13,7 +13,7 @@ , python3 , tzdata , fixDarwinDylibNames -, introspectionSupport ? stdenv.buildPlatform == stdenv.hostPlatform +, withIntrospection ? stdenv.buildPlatform == stdenv.hostPlatform , gobject-introspection , vala }: @@ -31,6 +31,7 @@ stdenv.mkDerivation rec { sha256 = "sha256-gZ6IBjG5pNKJ+hWcTzXMP7yxL4he4LTklZGoC9vXra8="; }; + strictDeps = true; nativeBuildInputs = [ cmake ninja @@ -43,7 +44,7 @@ stdenv.mkDerivation rec { ] ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [ # provides ical-glib-src-generator that runs during build libical - ] ++ lib.optionals introspectionSupport [ + ] ++ lib.optionals withIntrospection [ gobject-introspection vala ] ++ lib.optionals stdenv.isDarwin [ @@ -60,13 +61,14 @@ stdenv.mkDerivation rec { glib libxml2 icu + ] ++ lib.optionals withIntrospection [ + gobject-introspection ]; cmakeFlags = [ "-DENABLE_GTK_DOC=False" - ] ++ lib.optionals introspectionSupport [ - "-DGOBJECT_INTROSPECTION=True" - "-DICAL_GLIB_VAPI=True" + "-DGOBJECT_INTROSPECTION=${if withIntrospection then "True" else "False"}" + "-DICAL_GLIB_VAPI=${if withIntrospection then "True" else "False"}" ] ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform) [ "-DIMPORT_ICAL_GLIB_SRC_GENERATOR=${lib.getDev buildPackages.libical}/lib/cmake/LibIcal/IcalGlibSrcGenerator.cmake" ]; From 8473cb3a2a108c3c089845e8164266943363fc51 Mon Sep 17 00:00:00 2001 From: Artturin Date: Wed, 27 Apr 2022 22:53:15 +0300 Subject: [PATCH 10/70] gst_all_1.base: fix strictDeps --- .../libraries/gstreamer/base/default.nix | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/pkgs/development/libraries/gstreamer/base/default.nix b/pkgs/development/libraries/gstreamer/base/default.nix index a6942445fc5..599e6586ea0 100644 --- a/pkgs/development/libraries/gstreamer/base/default.nix +++ b/pkgs/development/libraries/gstreamer/base/default.nix @@ -5,7 +5,6 @@ , meson , ninja , gettext -, gobject-introspection , python3 , gstreamer , orc @@ -37,6 +36,8 @@ , enableCdparanoia ? (!stdenv.isDarwin) , cdparanoia , glib +, withIntrospection ? stdenv.buildPlatform == stdenv.hostPlatform +, gobject-introspection }: stdenv.mkDerivation rec { @@ -50,6 +51,7 @@ stdenv.mkDerivation rec { sha256 = "0162ly7pscymq6bsf1d5fva2k9s16zvfwyi1q6z4yfd97d0sdn4n"; }; + strictDeps = true; nativeBuildInputs = [ meson ninja @@ -58,10 +60,11 @@ stdenv.mkDerivation rec { gettext orc glib - gobject-introspection - + gstreamer # docs # TODO add hotdoc here + ] ++ lib.optionals withIntrospection [ + gobject-introspection ] ++ lib.optional enableWayland wayland; buildInputs = [ @@ -88,6 +91,8 @@ stdenv.mkDerivation rec { ] ++ lib.optionals enableWayland [ wayland wayland-protocols + ] ++ lib.optionals withIntrospection [ + gobject-introspection ] ++ lib.optional enableCocoa Cocoa ++ lib.optional enableCdparanoia cdparanoia; @@ -101,8 +106,8 @@ stdenv.mkDerivation rec { "-Dgl-graphene=disabled" # not packaged in nixpkgs as of writing # See https://github.com/GStreamer/gst-plugins-base/blob/d64a4b7a69c3462851ff4dcfa97cc6f94cd64aef/meson_options.txt#L15 for a list of choices "-Dgl_winsys=${lib.concatStringsSep "," (lib.optional enableX11 "x11" ++ lib.optional enableWayland "wayland" ++ lib.optional enableCocoa "cocoa")}" + "-Dintrospection=${if withIntrospection then "enabled" else "disabled"}" ] ++ lib.optionals (stdenv.buildPlatform != stdenv.hostPlatform) [ - "-Dintrospection=disabled" "-Dtests=disabled" ] ++ lib.optional (!enableX11) "-Dx11=disabled" From 5e2a1ebdc4e000bc6e1316ab81c38a87a8ed417a Mon Sep 17 00:00:00 2001 From: Sergei Trofimovich Date: Thu, 28 Apr 2022 20:37:15 +0100 Subject: [PATCH 11/70] elfutils: 0.186 -> 0.187 Added trivial updater. Dropped unneeded -Werror workaround (`pkgsMusl.elfutils` builds successfully now). changelog: https://sourceware.org/git/?p=elfutils.git;a=blob_plain;f=NEWS;hb=HEAD --- pkgs/development/tools/misc/elfutils/default.nix | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/pkgs/development/tools/misc/elfutils/default.nix b/pkgs/development/tools/misc/elfutils/default.nix index adee94dafa9..cd673ec06b4 100644 --- a/pkgs/development/tools/misc/elfutils/default.nix +++ b/pkgs/development/tools/misc/elfutils/default.nix @@ -2,16 +2,17 @@ , musl-obstack, m4, zlib, zstd, bzip2, bison, flex, gettext, xz, setupDebugInfoDirs , argp-standalone , enableDebuginfod ? false, sqlite, curl, libmicrohttpd_0_9_70, libarchive +, gitUpdater }: # TODO: Look at the hardcoded paths to kernel, modules etc. stdenv.mkDerivation rec { pname = "elfutils"; - version = "0.186"; + version = "0.187"; src = fetchurl { url = "https://sourceware.org/elfutils/ftp/${version}/${pname}-${version}.tar.bz2"; - sha256 = "sha256-f2+5FJsWc9ONkXig0+D7ih7E9TqfTC/4lGlgmHlkEXc="; + sha256 = "sha256-5wsN++YQ+QxNH+DXGvFCpOJcPE7566uNLXK2UVnUVMg="; }; patches = [ @@ -62,10 +63,6 @@ stdenv.mkDerivation rec { propagatedNativeBuildInputs = [ setupDebugInfoDirs ]; - NIX_CFLAGS_COMPILE = lib.optionals stdenv.hostPlatform.isMusl [ - "-Wno-null-dereference" - ]; - configureFlags = [ "--program-prefix=eu-" # prevent collisions with binutils "--enable-deterministic-archives" @@ -81,6 +78,12 @@ stdenv.mkDerivation rec { doCheck = !stdenv.hostPlatform.isMusl; doInstallCheck = !stdenv.hostPlatform.isMusl; + passthru.updateScript = gitUpdater { + inherit pname version; + url = "https://sourceware.org/git/elfutils.git"; + rev-prefix = "elfutils-"; + }; + meta = with lib; { homepage = "https://sourceware.org/elfutils/"; description = "A set of utilities to handle ELF objects"; From 99786f9a57a2a9a0ac680550af645dfcdbc7da29 Mon Sep 17 00:00:00 2001 From: "Berk D. Demir" Date: Sun, 1 May 2022 23:15:08 +0000 Subject: [PATCH 12/70] go-modules/packages: Improve `checkFlags` handling - Fix handling of `checkFlags` derivation attribute when it's a list of two or more elements. - Improve the readability go `buildGoDir` function with flag array building and "test" command conditional. - Bash style: Single line local assignment of positional parameters. --- .../go-modules/generic/default.nix | 20 ++++++++++++++----- .../go-packages/generic/default.nix | 20 ++++++++++++++----- 2 files changed, 30 insertions(+), 10 deletions(-) diff --git a/pkgs/development/go-modules/generic/default.nix b/pkgs/development/go-modules/generic/default.nix index 502a981596e..7493eac59dc 100644 --- a/pkgs/development/go-modules/generic/default.nix +++ b/pkgs/development/go-modules/generic/default.nix @@ -181,12 +181,22 @@ let exclude+='\)' buildGoDir() { - local d; local cmd; - cmd="$1" - d="$2" + local cmd="$1" dir="$2" + . $TMPDIR/buildFlagsArray + + declare -a flags + flags+=($buildFlags "''${buildFlagsArray[@]}") + flags+=(''${tags:+-tags=${lib.concatStringsSep "," tags}}) + flags+=(''${ldflags:+-ldflags="$ldflags"}) + flags+=("-v" "-p" "$NIX_BUILD_CORES") + + if [ "$cmd" = "test" ]; then + flags+=($checkFlags) + fi + local OUT - if ! OUT="$(go $cmd $buildFlags "''${buildFlagsArray[@]}" ''${tags:+-tags=${lib.concatStringsSep "," tags}} ''${ldflags:+-ldflags="$ldflags"} -v -p $NIX_BUILD_CORES $d 2>&1)"; then + if ! OUT="$(go $cmd "''${flags[@]}" $dir 2>&1)"; then if ! echo "$OUT" | grep -qE '(no( buildable| non-test)?|build constraints exclude all) Go (source )?files'; then echo "$OUT" >&2 return 1 @@ -244,7 +254,7 @@ let runHook preCheck for pkg in $(getGoDirs test); do - buildGoDir test $checkFlags "$pkg" + buildGoDir test "$pkg" done runHook postCheck diff --git a/pkgs/development/go-packages/generic/default.nix b/pkgs/development/go-packages/generic/default.nix index 0559f7f07a7..643c1955d2b 100644 --- a/pkgs/development/go-packages/generic/default.nix +++ b/pkgs/development/go-packages/generic/default.nix @@ -160,12 +160,22 @@ let exclude+='\)' buildGoDir() { - local d; local cmd; - cmd="$1" - d="$2" + local cmd="$1" dir="$2" + . $TMPDIR/buildFlagsArray + + declare -a flags + flags+=($buildFlags "''${buildFlagsArray[@]}") + flags+=(''${tags:+-tags=${lib.concatStringsSep "," tags}}) + flags+=(''${ldflags:+-ldflags="$ldflags"}) + flags+=("-v" "-p" "$NIX_BUILD_CORES") + + if [ "$cmd" = "test" ]; then + flags+=($checkFlags) + fi + local OUT - if ! OUT="$(go $cmd $buildFlags "''${buildFlagsArray[@]}" ''${tags:+-tags=${lib.concatStringsSep "," tags}} ''${ldflags:+-ldflags="$ldflags"} -v -p $NIX_BUILD_CORES $d 2>&1)"; then + if ! OUT="$(go $cmd "''${flags[@]}" $dir 2>&1)"; then if ! echo "$OUT" | grep -qE '(no( buildable| non-test)?|build constraints exclude all) Go (source )?files'; then echo "$OUT" >&2 return 1 @@ -225,7 +235,7 @@ let runHook preCheck for pkg in $(getGoDirs test); do - buildGoDir test $checkFlags "$pkg" + buildGoDir test "$pkg" done runHook postCheck From 3c7466715aa2ed6be4cc17519ab065bb659f28b5 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 10 Mar 2022 12:46:22 +0100 Subject: [PATCH 13/70] python3Packages.cachecontrol: enable filecache --- pkgs/development/python-modules/cachecontrol/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/cachecontrol/default.nix b/pkgs/development/python-modules/cachecontrol/default.nix index d074183e79d..bee126fbf16 100644 --- a/pkgs/development/python-modules/cachecontrol/default.nix +++ b/pkgs/development/python-modules/cachecontrol/default.nix @@ -21,10 +21,11 @@ buildPythonPackage rec { owner = "ionrock"; repo = pname; rev = "v${version}"; - sha256 = "sha256-mgvL0q10UbPHY1H3tJprke5p8qNl3HNYoeLAERZTcTs="; + hash = "sha256-mgvL0q10UbPHY1H3tJprke5p8qNl3HNYoeLAERZTcTs="; }; propagatedBuildInputs = [ + lockfile msgpack requests ]; @@ -32,7 +33,6 @@ buildPythonPackage rec { checkInputs = [ cherrypy mock - lockfile pytestCheckHook ]; From de6f14d3d855d331c8516d12b7288aa0ddcb27f3 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Thu, 10 Mar 2022 12:51:30 +0100 Subject: [PATCH 14/70] python3Packages.pretend: enable tests --- .../python-modules/pretend/default.nix | 29 +++++++++++++++---- 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/pkgs/development/python-modules/pretend/default.nix b/pkgs/development/python-modules/pretend/default.nix index 87e0e6613b1..0134b0dc36a 100644 --- a/pkgs/development/python-modules/pretend/default.nix +++ b/pkgs/development/python-modules/pretend/default.nix @@ -1,19 +1,36 @@ -{ lib, buildPythonPackage, fetchPypi }: +{ lib +, buildPythonPackage +, fetchFromGitHub +, pytestCheckHook +, pythonOlder +}: buildPythonPackage rec { pname = "pretend"; version = "1.0.9"; + format = "setuptools"; - src = fetchPypi { - inherit pname version; - sha256 = "c90eb810cde8ebb06dafcb8796f9a95228ce796531bc806e794c2f4649aa1b10"; + disabled = pythonOlder "3.7"; + + src = fetchFromGitHub { + owner = "alex"; + repo = pname; + rev = "v${version}"; + hash = "sha256-OqMfeIMFNBBLq6ejR3uOCIHZ9aA4zew7iefVlAsy1JQ="; }; - # No tests in archive - doCheck = false; + checkInputs = [ + pytestCheckHook + ]; + + pythonImportsCheck = [ + "pretend" + ]; meta = with lib; { + description = "Module for stubbing"; homepage = "https://github.com/alex/pretend"; license = licenses.bsd3; + maintainers = with maintainers; [ ]; }; } From b897629a2c60dd602eaff6b02640d6aeec52e8e4 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 28 Mar 2022 13:31:50 +0200 Subject: [PATCH 15/70] python3Packages.pip-api: init at 0.0.28 --- .../python-modules/pip-api/default.nix | 52 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 + 2 files changed, 54 insertions(+) create mode 100644 pkgs/development/python-modules/pip-api/default.nix diff --git a/pkgs/development/python-modules/pip-api/default.nix b/pkgs/development/python-modules/pip-api/default.nix new file mode 100644 index 00000000000..daf808e4498 --- /dev/null +++ b/pkgs/development/python-modules/pip-api/default.nix @@ -0,0 +1,52 @@ +{ lib +, buildPythonPackage +, fetchPypi +, pip +, pretend +, pytestCheckHook +, pythonOlder +, virtualenv +}: + +buildPythonPackage rec { + pname = "pip-api"; + version = "0.0.28"; + format = "setuptools"; + + disabled = pythonOlder "3.7"; + + src = fetchPypi { + inherit pname version; + hash = "sha256-yqu2l/QKLPpnJkBae5DI/ReU7DnqOD+lMTs/8O6I8AE="; + }; + + propagatedBuildInputs = [ + pip + ]; + + checkInputs = [ + pretend + pytestCheckHook + virtualenv + ]; + + pythonImportsCheck = [ + "pip_api" + ]; + + disabledTests = [ + "test_hash" + "test_hash_default_algorithm_is_256" + "test_installed_distributions" + "test_invoke_install" + "test_invoke_uninstall" + "test_isolation" + ]; + + meta = with lib; { + description = "Importable pip API"; + homepage = "https://github.com/di/pip-api"; + license = with licenses; [ mit ]; + maintainers = with maintainers; [ fab ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 3a9f5f4faa1..ab79d7f4b71 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -6313,6 +6313,8 @@ in { pipenv-poetry-migrate = callPackage ../development/python-modules/pipenv-poetry-migrate { }; + pip-api = callPackage ../development/python-modules/pip-api { }; + pip-tools = callPackage ../development/python-modules/pip-tools { }; pipx = callPackage ../development/python-modules/pipx { }; From 86e49c7114f4832cc74c59d61eedfa7a9c008a5f Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 28 Mar 2022 13:32:04 +0200 Subject: [PATCH 16/70] pip-audit: init at 2.0.0 --- pkgs/development/tools/pip-audit/default.nix | 75 ++++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 + 2 files changed, 77 insertions(+) create mode 100644 pkgs/development/tools/pip-audit/default.nix diff --git a/pkgs/development/tools/pip-audit/default.nix b/pkgs/development/tools/pip-audit/default.nix new file mode 100644 index 00000000000..f8dd0d94806 --- /dev/null +++ b/pkgs/development/tools/pip-audit/default.nix @@ -0,0 +1,75 @@ +{ lib +, fetchFromGitHub +, fetchpatch +, python3 +}: + +let + py = python3.override { + packageOverrides = self: super: { + + # ansible doesn't support resolvelib > 0.6.0 and can't have an override + resolvelib = super.resolvelib.overridePythonAttrs (oldAttrs: rec { + version = "0.8.1"; + src = fetchFromGitHub { + owner = "sarugaku"; + repo = "resolvelib"; + rev = version; + sha256 = "1qpd0gg9yl0kbamlgjs9pkxd39kx511kbc92civ77v0ka5sw8ca0"; + }; + }); + }; + }; +in +with py.pkgs; + +buildPythonApplication rec { + pname = "pip-audit"; + version = "2.0.0"; + format = "setuptools"; + + src = fetchFromGitHub { + owner = "trailofbits"; + repo = pname; + rev = "v${version}"; + hash = "sha256-JHRUYugptbsbqyXy5IxBVQq1NNbTR1xdt791ZQ2jP7s="; + }; + + propagatedBuildInputs = [ + cachecontrol + cyclonedx-python-lib + html5lib + packaging + pip-api + progress + resolvelib + ]; + + checkInputs = [ + pretend + pytestCheckHook + ]; + + pythonImportsCheck = [ + "pip_audit" + ]; + + disabledTestPaths = [ + "test/dependency_source/test_requirement.py" + "test/dependency_source/test_resolvelib.py" + "test/service/test_pypi.py" + "test/service/test_osv.py" + ]; + + disabledTests = [ + "test_get_pip_cache" + "test_virtual_env" + ]; + + meta = with lib; { + description = "Tool for scanning Python environments for known vulnerabilities"; + homepage = "https://github.com/trailofbits/pip-audit"; + license = with licenses; [ asl20 ]; + maintainers = with maintainers; [ fab ]; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 1b754a6a590..f3976591ef6 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -14433,6 +14433,8 @@ with pkgs; poetry2conda = python3Packages.callPackage ../development/python-modules/poetry2conda { }; + pip-audit = callPackage ../development/tools/pip-audit {}; + pipenv = callPackage ../development/tools/pipenv {}; pipewire = callPackage ../development/libraries/pipewire { From d759e894b2949ca7b8cdf0bb666e6f36d95a4f8f Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Mon, 2 May 2022 09:22:50 +0200 Subject: [PATCH 17/70] python310Packages.pip-api: 0.0.28 -> 0.0.29 --- pkgs/development/python-modules/pip-api/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/pip-api/default.nix b/pkgs/development/python-modules/pip-api/default.nix index daf808e4498..5e4412dcf85 100644 --- a/pkgs/development/python-modules/pip-api/default.nix +++ b/pkgs/development/python-modules/pip-api/default.nix @@ -10,14 +10,14 @@ buildPythonPackage rec { pname = "pip-api"; - version = "0.0.28"; + version = "0.0.29"; format = "setuptools"; disabled = pythonOlder "3.7"; src = fetchPypi { inherit pname version; - hash = "sha256-yqu2l/QKLPpnJkBae5DI/ReU7DnqOD+lMTs/8O6I8AE="; + hash = "sha256-9wFYTrHD4BAhyEb4nWKauTc7ZiTwYmdXd0rVT8TClXE="; }; propagatedBuildInputs = [ From 1d17d14cb72c8a3d122827c53f6d30bd9e490314 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Tue, 3 May 2022 08:04:50 +0200 Subject: [PATCH 18/70] pip-audit: 2.0.0 -> 2.2.1 --- pkgs/development/tools/pip-audit/default.nix | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/pkgs/development/tools/pip-audit/default.nix b/pkgs/development/tools/pip-audit/default.nix index f8dd0d94806..8f700761d16 100644 --- a/pkgs/development/tools/pip-audit/default.nix +++ b/pkgs/development/tools/pip-audit/default.nix @@ -25,14 +25,14 @@ with py.pkgs; buildPythonApplication rec { pname = "pip-audit"; - version = "2.0.0"; + version = "2.2.1"; format = "setuptools"; src = fetchFromGitHub { owner = "trailofbits"; repo = pname; rev = "v${version}"; - hash = "sha256-JHRUYugptbsbqyXy5IxBVQq1NNbTR1xdt791ZQ2jP7s="; + hash = "sha256-ji61783imVlvoBaDMTxQwbf1L1G4lJbOFZ1FjcNOT/8="; }; propagatedBuildInputs = [ @@ -54,7 +54,12 @@ buildPythonApplication rec { "pip_audit" ]; + preCheck = '' + export HOME=$(mktemp -d); + ''; + disabledTestPaths = [ + # Tests require network access "test/dependency_source/test_requirement.py" "test/dependency_source/test_resolvelib.py" "test/service/test_pypi.py" @@ -62,8 +67,11 @@ buildPythonApplication rec { ]; disabledTests = [ + # Tests requrire network access "test_get_pip_cache" "test_virtual_env" + "test_pyproject_source" + "test_pyproject_source_duplicate_deps" ]; meta = with lib; { From 96ed54cfce2bedfb4551ea4d33cc2ce507998c9f Mon Sep 17 00:00:00 2001 From: Emery Hemingway Date: Sat, 5 Feb 2022 01:11:15 +0100 Subject: [PATCH 19/70] lzip: 1.22 -> 1.23, split output --- pkgs/tools/compression/lzip/default.nix | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pkgs/tools/compression/lzip/default.nix b/pkgs/tools/compression/lzip/default.nix index 17abb6503c9..7fa7b4e35c8 100644 --- a/pkgs/tools/compression/lzip/default.nix +++ b/pkgs/tools/compression/lzip/default.nix @@ -7,13 +7,14 @@ stdenv.mkDerivation rec { pname = "lzip"; - version = "1.22"; + version = "1.23"; + outputs = [ "out" "man" "info" ]; nativeBuildInputs = [ texinfo ]; src = fetchurl { url = "mirror://savannah/lzip/${pname}-${version}.tar.gz"; - sha256 = "sha256-wzQtQuZxOcFluLEo0DO1yWiToTrF8lkzGQMVIU6HqUg="; + sha256 = "sha256-R5LAR93xXvKdVbqOaKGiHgy3aS2H7N9yBEGYZFgvKA0="; }; configureFlags = [ From 77c177ebe197a9de3d2a397997d70fa13d12aab4 Mon Sep 17 00:00:00 2001 From: "R. Ryantm" Date: Fri, 22 Apr 2022 16:25:25 +0000 Subject: [PATCH 20/70] fribidi: 1.0.11 -> 1.0.12 --- pkgs/development/libraries/fribidi/default.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/libraries/fribidi/default.nix b/pkgs/development/libraries/fribidi/default.nix index 3549368fecb..3dae39b3c38 100644 --- a/pkgs/development/libraries/fribidi/default.nix +++ b/pkgs/development/libraries/fribidi/default.nix @@ -10,14 +10,14 @@ stdenv.mkDerivation rec { pname = "fribidi"; - version = "1.0.11"; + version = "1.0.12"; outputs = [ "out" "devdoc" ]; # NOTE: Only URL tarball has "Have pre-generated man pages: true", which works-around upstream usage of some rare ancient `c2man` fossil application. src = fetchurl { url = "https://github.com/fribidi/fribidi/releases/download/v${version}/${pname}-${version}.tar.xz"; - sha256 = "sha256-MPk+nGPuYn0aLO3PWaw01FvzAkCYL5nkTG4BVGa05z0="; + sha256 = "sha256-DNIz+X/IxnuzrCfOhEDe9dP/rPUWdluRwsxlRJgpNJU="; }; postPatch = '' From 90157969cf10699f9a65077fb709b8935b2612f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sandro=20J=C3=A4ckel?= Date: Wed, 4 May 2022 19:06:43 +0200 Subject: [PATCH 21/70] python310Packages.pygments: adopt, enable tests --- .../python-modules/Pygments/default.nix | 28 ----------- .../python-modules/pygments/default.nix | 46 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 +- 3 files changed, 47 insertions(+), 29 deletions(-) delete mode 100644 pkgs/development/python-modules/Pygments/default.nix create mode 100644 pkgs/development/python-modules/pygments/default.nix diff --git a/pkgs/development/python-modules/Pygments/default.nix b/pkgs/development/python-modules/Pygments/default.nix deleted file mode 100644 index af125e1f40e..00000000000 --- a/pkgs/development/python-modules/Pygments/default.nix +++ /dev/null @@ -1,28 +0,0 @@ -{ lib -, buildPythonPackage -, fetchPypi -, docutils -}: - -buildPythonPackage rec { - pname = "Pygments"; - version = "2.11.2"; - - src = fetchPypi { - inherit pname version; - sha256 = "4e426f72023d88d03b2fa258de560726ce890ff3b630f88c21cbb8b2503b8c6a"; - }; - - propagatedBuildInputs = [ docutils ]; - - # Circular dependency with sphinx - doCheck = false; - pythonImportsCheck = [ "pygments" ]; - - meta = { - homepage = "https://pygments.org/"; - description = "A generic syntax highlighter"; - license = lib.licenses.bsd2; - maintainers = with lib.maintainers; [ ]; - }; -} diff --git a/pkgs/development/python-modules/pygments/default.nix b/pkgs/development/python-modules/pygments/default.nix new file mode 100644 index 00000000000..6ab6cec4295 --- /dev/null +++ b/pkgs/development/python-modules/pygments/default.nix @@ -0,0 +1,46 @@ +{ lib +, buildPythonPackage +, fetchPypi +, docutils +, lxml +, pytestCheckHook +, wcag-contrast-ratio +}: + +let pygments = buildPythonPackage + rec { + pname = "pygments"; + version = "2.11.2"; + + src = fetchPypi { + pname = "Pygments"; + inherit version; + sha256 = "4e426f72023d88d03b2fa258de560726ce890ff3b630f88c21cbb8b2503b8c6a"; + }; + + propagatedBuildInputs = [ + docutils + ]; + + # circular dependencies if enabled by default + doCheck = false; + checkInputs = [ + lxml + pytestCheckHook + wcag-contrast-ratio + ]; + + pythonImportsCheck = [ "pygments" ]; + + passthru.tests = { + check = pygments.overridePythonAttrs (_: { doCheck = true; }); + }; + + meta = with lib; { + homepage = "https://pygments.org/"; + description = "A generic syntax highlighter"; + license = licenses.bsd2; + maintainers = with maintainers; [ SuperSandro2000 ]; + }; + }; +in pygments diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index dbdaba232b4..7326e68e62d 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -7192,7 +7192,7 @@ in { pygments-better-html = callPackage ../development/python-modules/pygments-better-html { }; - pygments = callPackage ../development/python-modules/Pygments { }; + pygments = callPackage ../development/python-modules/pygments { }; pygments-markdown-lexer = callPackage ../development/python-modules/pygments-markdown-lexer { }; From bad010fae807f2dbf104c1cdd1c98c1d0e6b7a2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sandro=20J=C3=A4ckel?= Date: Wed, 4 May 2022 19:13:24 +0200 Subject: [PATCH 22/70] python310Packages.wcag-contrast-ratio: init at 0.9 --- .../wcag-contrast-ratio/default.nix | 34 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 ++ 2 files changed, 36 insertions(+) create mode 100644 pkgs/development/python-modules/wcag-contrast-ratio/default.nix diff --git a/pkgs/development/python-modules/wcag-contrast-ratio/default.nix b/pkgs/development/python-modules/wcag-contrast-ratio/default.nix new file mode 100644 index 00000000000..c7b7e9bc9e8 --- /dev/null +++ b/pkgs/development/python-modules/wcag-contrast-ratio/default.nix @@ -0,0 +1,34 @@ +{ lib +, buildPythonPackage +, fetchPypi +, hypothesis +, pytestCheckHook +}: + +buildPythonPackage rec { + pname = "wcag-contrast-ratio"; + version = "0.9"; + + src = fetchPypi { + inherit pname version; + sha256 = "sha256-aRkrjlwKfQ3F/xGH7rPjmBQWM6S95RxpyH9Y/oftNhw="; + }; + + checkInputs = [ + hypothesis + pytestCheckHook + ]; + + pytestFlagsArray = [ + "test.py" + ]; + + pythonImportsCheck = [ "wcag_contrast_ratio" ]; + + meta = with lib; { + description = "Library for computing contrast ratios, as required by WCAG 2.0"; + homepage = "https://github.com/gsnedders/wcag-contrast-ratio"; + license = licenses.mit; + maintainers = with maintainers; [ SuperSandro2000 ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 7326e68e62d..23dfa239aa0 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -10838,6 +10838,8 @@ in { wazeroutecalculator = callPackage ../development/python-modules/wazeroutecalculator { }; + wcag-contrast-ratio = callPackage ../development/python-modules/wcag-contrast-ratio { }; + wcmatch = callPackage ../development/python-modules/wcmatch { }; wcwidth = callPackage ../development/python-modules/wcwidth { }; From bd9f3ec6644117d80fefe2790bb12ee757ca54c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sandro=20J=C3=A4ckel?= Date: Wed, 4 May 2022 22:02:18 +0200 Subject: [PATCH 23/70] python310Packages.pygments: 2.11.2 -> 2.12.0 --- pkgs/development/python-modules/pygments/default.nix | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/pygments/default.nix b/pkgs/development/python-modules/pygments/default.nix index 6ab6cec4295..c8759a2fe05 100644 --- a/pkgs/development/python-modules/pygments/default.nix +++ b/pkgs/development/python-modules/pygments/default.nix @@ -10,12 +10,12 @@ let pygments = buildPythonPackage rec { pname = "pygments"; - version = "2.11.2"; + version = "2.12.0"; src = fetchPypi { pname = "Pygments"; inherit version; - sha256 = "4e426f72023d88d03b2fa258de560726ce890ff3b630f88c21cbb8b2503b8c6a"; + sha256 = "sha256-XrEWEY+WEv8e6JrJZDe7a0no8E2KE7UUuib2ICCOJus="; }; propagatedBuildInputs = [ @@ -30,6 +30,11 @@ let pygments = buildPythonPackage wcag-contrast-ratio ]; + disabledTestPaths = [ + # 5 lines diff, including one nix store path in 20000+ lines + "tests/examplefiles/bash/ltmain.sh" + ]; + pythonImportsCheck = [ "pygments" ]; passthru.tests = { From e4b942eccfec761f901a3c7932495cae03ab0809 Mon Sep 17 00:00:00 2001 From: LuoChen Date: Thu, 5 May 2022 16:02:15 +0800 Subject: [PATCH 24/70] wg-quick: fix postUp always generated issue --- nixos/modules/services/networking/wg-quick.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/modules/services/networking/wg-quick.nix b/nixos/modules/services/networking/wg-quick.nix index 61e9fe5096b..0b3815d0cc6 100644 --- a/nixos/modules/services/networking/wg-quick.nix +++ b/nixos/modules/services/networking/wg-quick.nix @@ -211,7 +211,7 @@ let postUp = optional (values.privateKeyFile != null) "wg set ${name} private-key <(cat ${values.privateKeyFile})" ++ (concatMap (peer: optional (peer.presharedKeyFile != null) "wg set ${name} peer ${peer.publicKey} preshared-key <(cat ${peer.presharedKeyFile})") values.peers) ++ - optional (values.postUp != null) values.postUp; + optional (values.postUp != "") values.postUp; postUpFile = if postUp != [] then writeScriptFile "postUp.sh" (concatMapStringsSep "\n" (line: line) postUp) else null; preDownFile = if values.preDown != "" then writeScriptFile "preDown.sh" values.preDown else null; postDownFile = if values.postDown != "" then writeScriptFile "postDown.sh" values.postDown else null; From 972c7e99ff692a465509604027d65c28adde3aca Mon Sep 17 00:00:00 2001 From: toonn Date: Tue, 15 Feb 2022 19:23:03 +0100 Subject: [PATCH 25/70] Libsystem: Replace cpio with copyHierarchy I noticed every time building Libsystem that there was a very slow phase where the output consisted of many lines like `42 blocks`. This is output from cpio and in brief testing it takes at least twice as long to go through cpio for the simple copies we want to make. The interface is very convenient but the performance penalty is very painful so I decided to implement a function that emulates cpio's interface. On my machine with a 7200 RPM HDD this speeds up the build from about 250 minutes to about 75 seconds, a factor of 200! I'm not certain the results on modern hardware would be similarly positive so this could use further testing. --- .../Libsystem/default.nix | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/pkgs/os-specific/darwin/apple-source-releases/Libsystem/default.nix b/pkgs/os-specific/darwin/apple-source-releases/Libsystem/default.nix index 86c91e9b55c..6f8124dbac4 100644 --- a/pkgs/os-specific/darwin/apple-source-releases/Libsystem/default.nix +++ b/pkgs/os-specific/darwin/apple-source-releases/Libsystem/default.nix @@ -1,5 +1,5 @@ { lib, stdenv, buildPackages -, appleDerivation', cpio, xnu, Libc, Libm, libdispatch, Libinfo +, appleDerivation', xnu, Libc, Libm, libdispatch, Libinfo , dyld, Csu, architecture, libclosure, CarbonHeaders, ncurses, CommonCrypto , copyfile, removefile, libresolvHeaders, libresolv, Libnotify, libplatform, libpthread , mDNSResponder, launchd, libutilHeaders, hfsHeaders, darling, darwin-stubs @@ -11,15 +11,21 @@ appleDerivation' stdenv { dontBuild = true; dontFixup = true; - nativeBuildInputs = [ cpio ]; - installPhase = '' export NIX_ENFORCE_PURITY= mkdir -p $out/lib $out/include + function copyHierarchy () { + mkdir -p $1 + while read f; do + mkdir -p $1/$(dirname $f) + cp --parents -pn $f $1 + done + } + # Set up our include directories - (cd ${xnu}/include && find . -name '*.h' -or -name '*.defs' | cpio -pdm $out/include) + (cd ${xnu}/include && find . -name '*.h' -or -name '*.defs' | copyHierarchy $out/include) cp ${xnu}/Library/Frameworks/Kernel.framework/Versions/A/Headers/Availability*.h $out/include cp ${xnu}/Library/Frameworks/Kernel.framework/Versions/A/Headers/stdarg.h $out/include @@ -28,10 +34,10 @@ appleDerivation' stdenv { ${CommonCrypto} ${copyfile} ${removefile} ${libresolvHeaders} \ ${Libnotify} ${libplatform} ${mDNSResponder} ${launchd} \ ${libutilHeaders} ${libpthread} ${hfsHeaders}; do - (cd $dep/include && find . -name '*.h' | cpio -pdm $out/include) + (cd $dep/include && find . -name '*.h' | copyHierarchy $out/include) done - (cd ${buildPackages.darwin.cctools.dev}/include/mach-o && find . -name '*.h' | cpio -pdm $out/include/mach-o) + (cd ${buildPackages.darwin.cctools.dev}/include/mach-o && find . -name '*.h' | copyHierarchy $out/include/mach-o) mkdir -p $out/include/os From 7fb011df898c703c9435d28633c32b150a6680cd Mon Sep 17 00:00:00 2001 From: toonn Date: Tue, 1 Mar 2022 00:39:29 +0100 Subject: [PATCH 26/70] Libsystem: Update headers.txt Replacing `cpio -pdm` with `copyHierarchy` makes us end up with two extra headers. I'm not sure why this happens, there's no reason why `cpio` should miss those headers. --- .../darwin/apple-source-releases/Libsystem/headers.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pkgs/os-specific/darwin/apple-source-releases/Libsystem/headers.txt b/pkgs/os-specific/darwin/apple-source-releases/Libsystem/headers.txt index 09b0ab41045..cdca44c7292 100644 --- a/pkgs/os-specific/darwin/apple-source-releases/Libsystem/headers.txt +++ b/pkgs/os-specific/darwin/apple-source-releases/Libsystem/headers.txt @@ -71,6 +71,7 @@ architecture/i386/table.h architecture/i386/tss.h arpa/ftp.h arpa/inet.h +arpa/nameser.h arpa/nameser_compat.h arpa/telnet.h arpa/tftp.h @@ -956,6 +957,7 @@ mpool.h msgcat.h nameser.h nc_tparm.h +ncurses.h ncurses_dll.h ndbm.h net/bpf.h From 09159b20889a21dcf5d0c39ffb8328da25ec6552 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=BCtz?= Date: Thu, 5 May 2022 21:14:25 +0000 Subject: [PATCH 27/70] python3Packages.markdown: 3.3.6 -> 3.3.7 https://github.com/Python-Markdown/markdown/blob/3.3.7/docs/change_log/index.md --- pkgs/development/python-modules/markdown/default.nix | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/markdown/default.nix b/pkgs/development/python-modules/markdown/default.nix index 2c91e46d13d..7207edb5815 100644 --- a/pkgs/development/python-modules/markdown/default.nix +++ b/pkgs/development/python-modules/markdown/default.nix @@ -9,14 +9,16 @@ buildPythonPackage rec { pname = "markdown"; - version = "3.3.6"; + version = "3.3.7"; disabled = pythonOlder "3.6"; + format = "setuptools"; + src = fetchPypi { pname = "Markdown"; inherit version; - sha256 = "sha256-dt+K4yKU7Dnc+JNAOCiC36Epdfh/RcPtHs2x6M78cAY="; + sha256 = "cbb516f16218e643d8e0a95b309f77eb118cb138d39a4f27851e6a63581db874"; }; propagatedBuildInputs = lib.optionals (pythonOlder "3.10") [ @@ -29,6 +31,8 @@ buildPythonPackage rec { ${python.interpreter} -m unittest discover ''; + pythonImportsCheck = [ "markdown" ]; + meta = with lib; { description = "A Python implementation of John Gruber's Markdown with Extension support"; homepage = "https://github.com/Python-Markdown/markdown"; From 509e2b499edb97f3dd0ecf1f4b69735dff0b4395 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Janne=20He=C3=9F?= Date: Mon, 2 May 2022 13:30:16 +0200 Subject: [PATCH 28/70] systemd: Remove accidential sysinit re-add 0423158e106ec4a838f0d8f956faecfacf4396f3 re-introduced a previously removed mv call. --- pkgs/os-specific/linux/systemd/default.nix | 6 ------ 1 file changed, 6 deletions(-) diff --git a/pkgs/os-specific/linux/systemd/default.nix b/pkgs/os-specific/linux/systemd/default.nix index 9e914132ef2..5d7ffe2d919 100644 --- a/pkgs/os-specific/linux/systemd/default.nix +++ b/pkgs/os-specific/linux/systemd/default.nix @@ -641,12 +641,6 @@ stdenv.mkDerivation { ''; postInstall = '' - # sysinit.target: Don't depend on - # systemd-tmpfiles-setup.service. This interferes with NixOps's - # send-keys feature (since sshd.service depends indirectly on - # sysinit.target). - mv $out/lib/systemd/system/sysinit.target.wants/systemd-tmpfiles-setup-dev.service $out/lib/systemd/system/multi-user.target.wants/ - mkdir -p $out/example/systemd mv $out/lib/{modules-load.d,binfmt.d,sysctl.d,tmpfiles.d} $out/example mv $out/lib/systemd/{system,user} $out/example/systemd From d5beaa1a93ea679bc855ac89197d8cbacb60438d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sandro=20J=C3=A4ckel?= Date: Fri, 6 May 2022 01:41:57 +0200 Subject: [PATCH 29/70] python310Packages.pkgconfig: fix pkg-config not always being in PATH --- .../python-modules/pkgconfig/default.nix | 7 +--- .../python-modules/pkgconfig/executable.patch | 38 ------------------- 2 files changed, 1 insertion(+), 44 deletions(-) delete mode 100644 pkgs/development/python-modules/pkgconfig/executable.patch diff --git a/pkgs/development/python-modules/pkgconfig/default.nix b/pkgs/development/python-modules/pkgconfig/default.nix index 105beaccb9b..6721390d7ab 100644 --- a/pkgs/development/python-modules/pkgconfig/default.nix +++ b/pkgs/development/python-modules/pkgconfig/default.nix @@ -26,12 +26,9 @@ buildPythonPackage rec { sha256 = "sha256-uuLUGRNLCR3NS9g6OPCI+qG7tPWsLhI3OE5WmSI3vm8="; }; - patches = [ ./executable.patch ]; - postPatch = '' - rm pkgconfig/pkgconfig.py.orig substituteInPlace pkgconfig/pkgconfig.py \ - --replace 'PKG_CONFIG_EXE = "pkg-config"' 'PKG_CONFIG_EXE = "${pkg-config}/bin/${pkg-config.targetPrefix}pkg-config"' + --replace "pkg_config_exe = os.environ.get('PKG_CONFIG', None) or 'pkg-config'" "pkg_config_exe = '${pkg-config}/bin/${pkg-config.targetPrefix}pkg-config'" # those pc files are missing and pkg-config validates that they exist substituteInPlace data/fake-openssl.pc \ @@ -40,8 +37,6 @@ buildPythonPackage rec { nativeBuildInputs = [ poetry-core ]; - propagatedNativeBuildInputs = [ pkg-config ]; - checkInputs = [ pytestCheckHook ]; pythonImportsCheck = [ "pkgconfig" ]; diff --git a/pkgs/development/python-modules/pkgconfig/executable.patch b/pkgs/development/python-modules/pkgconfig/executable.patch deleted file mode 100644 index 79fca7a44f1..00000000000 --- a/pkgs/development/python-modules/pkgconfig/executable.patch +++ /dev/null @@ -1,38 +0,0 @@ -commit d8e0bac0c0d831510683939ec7a7b5bd72192423 -Author: Frederik Rietdijk -Date: Sat Jan 5 11:38:28 2019 +0100 - - Have a top-level attribute for the executable - -diff --git a/pkgconfig/pkgconfig.py b/pkgconfig/pkgconfig.py -index 3deb97f..e7c5561 100644 ---- a/pkgconfig/pkgconfig.py -+++ b/pkgconfig/pkgconfig.py -@@ -30,6 +30,9 @@ from functools import wraps - from subprocess import call, PIPE, Popen - - -+PKG_CONFIG_EXE = "pkg-config" -+ -+ - def _compare_versions(v1, v2): - """ - Compare two version strings and return -1, 0 or 1 depending on the equality -@@ -65,7 +68,7 @@ def _convert_error(func): - - @_convert_error - def _query(package, *options): -- pkg_config_exe = os.environ.get('PKG_CONFIG', None) or 'pkg-config' -+ pkg_config_exe = os.environ.get('PKG_CONFIG', None) or PKG_CONFIG_EXE - cmd = '{0} {1} {2}'.format(pkg_config_exe, ' '.join(options), package) - proc = Popen(shlex.split(cmd), stdout=PIPE, stderr=PIPE) - out, err = proc.communicate() -@@ -84,7 +87,7 @@ def exists(package): - - If ``pkg-config`` not on path, raises ``EnvironmentError``. - """ -- pkg_config_exe = os.environ.get('PKG_CONFIG', None) or 'pkg-config' -+ pkg_config_exe = os.environ.get('PKG_CONFIG', None) or PKG_CONFIG_EXE - cmd = '{0} --exists {1}'.format(pkg_config_exe, package).split() - return call(cmd) == 0 - From 5a3e803bf3de0e2132e450db86c3197ccc0f02ad Mon Sep 17 00:00:00 2001 From: Maximilian Bosch Date: Sat, 30 Apr 2022 13:19:01 +0200 Subject: [PATCH 30/70] glibc: 2.34-115 -> 2.34-210 --- .../libraries/glibc/2.34-master.patch.gz | Bin 122816 -> 331458 bytes pkgs/development/libraries/glibc/common.nix | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pkgs/development/libraries/glibc/2.34-master.patch.gz b/pkgs/development/libraries/glibc/2.34-master.patch.gz index 8fb02ca6d72171a183725a558e128ca878c8b203..b7aa7518c372e982b730ba37ca0436970dac50df 100644 GIT binary patch delta 210448 zcmV)QK(xQWzX!sd6o9k=D&K#sUF&b#wif@K{1t-Np!TBp>ix*wiWN<9*DXtnG#CBQ z7KS8Ji5tZhBs_FwY!(1HK{#vxS<8rDZt^Xqd07hv4k?lfVNMvulSck#*7Y2tsDp^$~}@+ZV9 z(*d+7{C{GVAA+y=XQP6x2cm*i0CF0Ae&SMa7tfDiAq%|%XA#Z>s9gmuLiv?&IJ8WA z2$LfTJwI~uF!Q|Yufbj z0m@RE9EigFFK5AA}-xQW<4=5{o2sizHcBQrvB1`|~EdYU#Hc0@P6t z-PWjlej*b;EJ6>L%2O{+@<^_2AwSp*i;)M5&?2Rux^(!B|H7qAh#6OFXRGB*6=(eZ z*~(ggt-sQt)cAk><7eB-LBfK>sjIAzDrOS{(bN|W><>N~Azc#QWhF5P)3biGcxl=i zi-Q+}z&0mvBc|201Kj|Hx+#?CpRJ>_*?&)dKY9D%1Oq%DDS{x`gX_m9zY~o+L|_l5 zyj|6UznWm1a}rDtx_va!S$nOH-VQ>~&t;tEV1tHXB>jJ^@M9+qGZE!!D)Ufgg_}q> zaJrqm-nOXK3+v_Lyh7VlWc1~i^P0=}Rq+8E2nL$u!hN;07UT!Rk6U zh&r@?hmn6>2&zvn6@Ax2V2L`z;8^VHSTLf>gnPYv^Gdnfgr|){hg%`20*o3Ho!Ajy zVK(N420yw4agobXCm|L!x$5nTGZyzzIS@cpR2X;%3K9`>ro)j!oj)fyBb^F%*qUxC zQ^`RU`X7w#Ol{}Qn(GB2_JJ(DuF>aHi1E^3PJ(}geRf_g^Q?M?zWZ|o$J*7<@jxU- zY!;M$_f{If_*E6HSt4AcY`y@3YOK_CAG%`bsb;3kI;y_HII?a~ zowD=?aXQC<$y64ilfX?oGKyEpC` z2=jj+DTU|6AUwUGbjkn(^>_9eH`^H6_M7*~u8+|w^I~bD+&)U>s7OMmA0o3=9oryeIKc!7C853%4cC6+r#rfgE^_I)r>i1tb&4( zPMZ85ajI0v#_Ou|z1gX(GQ^UASI_P(1nPg9rI2kgvF@4mrt=y^I2As4(abW8Tobms zcU}`XKtF1P7pbicDt7m`@zC(R>K4+um`=c_{0?Eg2iNBH5k}&_c|Ut|VvUeuXfzh-g7=JM)(uMpR1kY=QAwHO3^y7#?L@1&FTXB_spRk4pYND+^K)W z?at{VHNwewZ?Eab^0l= z%!RyCz-#c30#|S0r3SuLQg2%5!_t4mlyN{znSxUst~2F8PHth$%2sKo{`|_{z_dY& zRIQyevx2t|aw)RE$Q6}Q|q+M^zxMO-=BYrJ@*gO`8spTNmK zn!P(ag{OcqKSTV1k4E@^=GA`AK6GW>EGu}$FsOetQY-~rChCbUMjXODEm4vSN^U|c zh#AhkLV@7}w(aG-R)8h*b~>GEbYzN2MRY1qN;Afl1mX@}bj1Dk$Gg+l$DeUjka2Bi zGTiOJ3FVC*-;Zn;_`{EoP5ysT_CVGiK?r zp#6!Jv45P|y3&1SBb~5?-MZ3`FkGJqC8&SufA@&{)~B@h zor&vT80}0~@@@sfb8rpKr^;eG&fNQC0{Jk5W)OkYammlwY_wh7?!XWPHWVN4we>_d z@`-JJQ*wH|0Jge2>z4ZV_<@rZaUO?7;6-_yIEDP5J+j^+qURj?iP?WC=(%KQMDkWadz;m0 zyaV^H#V0fDr&$zXbPYuPMo7n%0BOQ&%yOmbdnSB)>+M*(aVpXs_pD^+$6>2$v_My1 zp-9Y|<)uWh(^pmtdVr}>udLdF0OP4W!%!$o|0$##gHUxmkqNYWFwqBmN#<#78 zeTXKUAeq`rAvk|Tc<`^wTU_0;86CuQiCs#J`R*tOit2XQ03$A#^qDGYrlO0R%x?Ph zO?g4hI7+%{c+&E^s5$3TyTUaon=xJaj3N2LJzw!x*$`@4BX65IE}ZqqM0Aw4l~;N7 zl`SNb8UEUUHyT7p(j`VxD}X>!ABbu~(IzTUXjVdrU4?&e1r+viYR|iYqY>$THcQ;U zmK_Q%ZbB)yy(QI;bHiQk=l~XQiLwRa9aV}YR6dLklD8SjBE&({oWj_;?$kisR+LeQ zGrcKKnJQJn3_SIU<_#A?zuS+eWfMZQa3>Klf*9mpUiva}MJQ8Gcv%paaZtErEYj$y zX!hh0b~Jwtj>SJ(R!4{gPM8N?;-=GSk>pY8WZCx)#y{TX!-$oe<$2*RAuAmIBqkJ# zkwa8LTqI+S=%zNNEFzT%7pFxzpDoK0*M;$x@0oPu`>F;^I8=!ouChO<;z5;wu-Ar; z$qKBmdP$yO_hxcDSK~P#GCY(Upam?{2k;Rwn|gn=31P&JiUH-`#ZE8KY`u5tY$e!g z@Dx;yx{s(i-L%&!x~Y1DH=%n_CBK25k~*Dm16NQeFomFxuTPHF9{O|+YySp^{RIF3 z|Np#QQE#I#41V5zMbxM5)>aS-YkRtrcF#NM)ct^p0=cW!l?q06{r6`(F(g3Sv4?v> z)0%%c#`)~nPH@UD!saRoRhWfQGM#3AoCR^Fl6U~Z%7F+g+XxFN%!8+cukt_R3#}QL zBmO9l{S*2WFfd6H+G6v$#zQZs{a7gi?*dr(*UM<(R>7@!zB`mzmF84TaybMm%|dgr zaBjCTXUrDyTzZe;ESOHiNGi`$$_s~}#UX$C5x6)VbYVrBhI#Yd_6NVfwsKz;lXQ=g z@W0pF>7NnyfWNbXQnkX?PjOebd>3B;HhAjIX=^Q_=32IH4@wY*`VORM98t6}mG%(nOOUrcnQ7HB)mikfj*@?Y z1%^g-W`c(*bR3*!n+iXv>7{=dPvkZ7KwUc2@n{`V*Y1P|4yc^px5$$Ng7i`6+}?ce ztAa%)YjxYDxnR2uk1kW7`Rhc*%p9n#rY)NHez!`!nq)=o&0u}J+62)xpf=)iJ>T_+ z7{OW%;9U+KIgo=zlCWJf5Xk~X;?RHB9=zqxVO2JhA;N-{t}|EPgUbG{_N4NaTwrUE zB7SehPG*nn0q|t-Y?goJhqH2@3=zCDrOyzJwxbeecHS8YaOYvt6jPO=SpdRScdpIV$qKR4#&0c{3lJ+nJxH$z~BP z(oY3U+RpWMgr%Bz& z=$=nSv(h+=#v0f&=f^dG;{EB?-l^cpHfzM@WC!JLp#Kj50RR8IUCD0SFc3YvU!g;b zCWtMFq}Boj>Htj$J4o~Q<;-xnNY2)SFA4G@ZbNcNz8P}7Mw`Qa zk6=Krqt$-ya}Ac=(I0{AjAPV3;H!|ThcjP{`~w@pZ&yf-tS5=h2KG7>%F0q%&Sk0F z^w{^anlIYm30gM88`p6p&4%Fb3-Y?w4f(rStmou+PWOm?)(3xM9I*_8Q>{76X7qL~ z+*`H>TEopz2raxbOz)%IJS6j)Uet|t6h(SIMRoPc#4-1G-a+g^j6P(tFk{Gd6OX8T z1QEWp()RryEdTcT>YV+LL9qw&@3T^;#tf^I* z7NSj(Mu;j&i>iOEE726!NvRLTtxD2k@;;91iQ^PP*=1$Xc;1nM)g0K?umr-%8m&R2lKg4+`tSyjUWaJCyBwi zYta2>7=7Sk;Tw8CxA)bn-t2z|UsD*HK};2#t)q*{_{)FC_sQ_85k;dl=}1pt z9OhsQ*3;x>z5-#CCz0>PC+GEYpV~N-1?m#F+k>1rC!qIlm=fE(zTNKH#f*m{@GbkK;QD!Be#N8SY%(6}LPckVfL~8B z%f(PPL=;pr2bTz!UARKHGB6HBW3x@*Khm@?8j*1X7ksOQSQv*=*dnArSae~Dusl$* z!vCnJOZF3`m?(W&q6`ydFH4kTqWlGd2^!?!pvn#oD&^pySSLp8ZrSZ_iQO%`-7T@Z zC3k-}zVw0DohuV(_tBvR{d+mS`qAx5!oU4U9>9g|V~6XFhY_F_EZN<5w0jASkte72 zuA3#F{jCy9dO6cu$iW-EpGWrCicNIOg5A$E%8M-BjT`EjR!MMuV1#M_N;j|QQ&=I1 z^HXrdvcp3Be~ZoN#TFY(p|vHSEL}}7+~|M(U9As?lh*9-mpsVLC<*2 zhC`Uqa0KJp^9yd*bx##+GW8vcIx`A#vcoN~B(Uqpo4$4>s{*KQX zO3suN$GOPCj9DhrW15u;c-Zx<$R9D*nDq|V4@D9x9a=fGvM3H9LS>@IfVWPo-ZFpf zqeLRzU$^1HZioz(-W}<(F`tXo6lx^W| zK)+piCX*b>0`{^Hd%%j(CeO~F1YQs!Phbgy_S?;y28_*wAIOoyVRhG&y@>ma| z^~Lwe$4^&YRdq(uV76$Qot~IDwJe}p`w75R5-RvI#00960 z#9d2o+%^!t=T|6~bk(d}Jyz1nZVztk;^_r6e>wcwv)|Dkaw{t5cIc~Gec6( zmDfgro(wM^B8QI|&dfLCBR51-)Bj^>at^mNIg^$q=Lt)b)3&&bTAHjWOOt;!ZD~T; zm4e1ZI-JT2X)>Ytv?h!J&U1|cO?`eyef{-k8xO2W;{g(G32v1Th=#l?UrahR#BpJlEXN)aQrP*W)_aJYhXyo^U436H{iPsH^Y~?f$+Rdjnd}GazW4`@$_m#NtJs z2U!-mu2?Rz!1J=i6P$ZdBCmfx&ttLoVx9Y^a!oq-B>>tM@o}&m=-k)UW<}nUVwJP? zwxUcfbjjS+psthxsmlDaOp;bGN^sSF_c8r&eR+G6o&g#V0w*Xy2xLqr#d70#r@JF% zrOJy#c!uqICog@;Cr}{&OUZGAFZ@8Zk(Jo=yb`JFtlX_N6dq=Qilu+_;{5$@@{^~a zyQNenbJKb_2i1Is*+Zpp43>aZE zS!9JDC$8_ZDDqu5iRA7OUhak>36dx(65iLY!eahpNXfhZYj2d$O_I2XebAD+i-Pe* zl(}85+HFUSv-_LEX~ln|IIS<=D!wfoRk;hGdc0pfa0kpVjAHb?a`r7YA&iDUH$f7b z^_`&&d`|g~=N8Mp*c5tlHrvXRT5aldW0Rp=iea)CQkb@jC~-0t*%-y4|LM;r$Ce;<|iZ}*NI7@C07NXICNfcE)CM_-Z-UGw@^Ijt%nY~e+v7F@JBHM%A^7vUDnT~_{}4q zA03HoQN*!ub1{wjR2_^%K2@QTu_F|*`}fEm%qGC96&!!r89{%xAf0bJzZ#PCt8dre zSmh`rcK>U%)drwbE*vETIC3F2_Zk%%gc$tnZ4ml%AK#6`6Q!RE=%N0j`cbESK3^5L zGe8d6h+ekjHP!rNYee&jsd_6+;=4kMfLLlsTEbsn&C#i)}(XjSh zm-eLF)3blGYY=e}^O!ThM#z?E4V6vdR^fmLD+{V=%&v0U@B&?LRPs3l!DAJkQ#>Yx zE!SeiFgz1w79_tag~cvw)g2>wLX#O_0cfPz)J&ikK+th3k-VWbV@2;bR)EQPeG_uA z!$SIX+BiEXYe=PokW{&NU@MjN9j!<>VVn?NI2C`B_p#d@*~q|tmI5O<((6(62c^sR zkLaCTs(Na@=pIMZYPA8xo#Fs`Xn17;-|TD@+uB3Oe*%)WCz=fii)|F_@%0|QV9gK_ zJw8=Dgrvs`v?A;9BS?8p?-ei6%nlfs+{=b8CMEJNc=q9l$=UQPZ}`(oM|(V7r<(*S6hC zG2e;+(7yT2f`jK60u?)HYX@|;r};ir7RB9Y)Q487j%4!k ztzpBa5QyG_>>j#jPrB>S8exAWtj-uOE-ycRzA|HE$n3{H+W9JNCwpK1I89L#7GQ+h zrc4_g;)3&d;l|GPsC$1>vt>R^7sO<5251Q+M2yS_|NHeQKZ>HV?9CEH z@UF-8((mWgK#>q?5(~%}74*hvPokQlc`FJSgCIdu5i(g7Lc==*CO>)%L^<2R32=igU1n9q+25663ZI zj0To79LkVH8Jz?y>gU1n0}qZ%qJ|Q?6>RLn`)&e4ioV$y{P6uU&FgxV_+5QZvq1i-T*i0?n=`TFh|%P-aHu^^@#1KWE72nn6Ps~i`@>-%h!sZIzU&bD z3jhHB|3cLV$zG^p;Q4Km&?WKUjo|U1BS_+*#{p}Amhb8)!0x_=t%U~#rl86B~X?EC{%%6yu4(@ zejG^30{Q^9tqFXfALM53JkXi(FzK=Y-5Ge6|xNmgJ4^Bk}Zu(Y%lA--}#PY z*GZbS1p1W7wq$?lSkk$F>b3>-+q@`KKUZ%$eu%_#bCC{ln3#wXG4gy72f_=)FbLH! zj+Ahf7y9C;H3$R;m@-Kl5aC$5W6$4PgR8O}TOSJUBNQZTIyaMvhO4_PRK3htnSVE1 z)o)=w1~8zu({xO753QLYPOF-iAP~G7ESPU5fSq2(Q>K4xQPS}g={ij)I6cswfOLT{ z@5M6aO#6AUA+C@5Y{Z^&UOzVgx5pZI;E!?d*H`ap2qXtwf1FGwU!2#&(L}&V5XFfX zD;!CgXIU)6zz=AJW@#W)8V9KgGqvX|=!_Hg{Z7%W_#{p9D3_t|9Ve60l_OV0J2;tJ z)r_a0dr5z@&><&m@-IsvCuc?S>puTGz~=--@u`PSNt+v!X=;RDM&StwCm^Ced zC)O-(K|WgP1)A7tlR2V)v@*1o3w9hhs93UZ8M+x_QBDi2T#@+j1Q9p@Xq^_ zx2$s@Cz`Yi#7;5hSP7H$hGvq}KYzX(+|*0E0b+jvf1PcvBund*?0s6u=V>8#X(3Zq*&VfL(>=)g=V=tqW$8Qn~L7H}j*2#F8+eeNd#{?wMoT6^+=xeUZ&q z0S8))0v+vRsIXM={iW;O*iW z0`Dt}fjo_j%o0HB4$zho>kO#zGK@U8bB=;qk~FOV|Nno=$tlJ(2Q(nA13APJWDK|hO3qBpE5UlO5!h{z zxmw8OpwJ_#Ks6K1nnIRIDQT8Qz}8TTnQ@YdQJST(p`n3cQj%FpnuWQck!7-pfkl!* zGRCen%o_y|w+QIzB_^7f7$usfnh(40_rLxi<>nIOHDy00960yj_1ybDJ;_ zJ(FLdLk~_tv=EBzgKs_dluIt{F#eDeW<2(cVLHj7|GnCM60&4UV(P>PW3PnJ2e5CY z)mw25l7I0Ql7EB~(2v!xaSvu+lz*AM2QM5p` z*u82uEBxHlx@L{s9B5IFlA3=8I*aabJ#^Xh>vS%D8d`IkgWt=&(!5t%2(b0}QrZf2 zCSx5PN-OhRJ-deJx=D4Uk)U1=Ac>$zt)QgJK}COuThr(fIO529|5UH)RvvVDpC-ER zXkDA`Kn;F@fAr`}U{2MLiU$g?@ENm0RLk4sg?7@JdO#jU@uF)5L^gjssZ`JHamh`S z`YH`)^^pH54!?;n${xJxsQ|(+W)VM4zuc2$X_<4&GRfw|=R8gF(yl&8wByHj4!z2O zRv&hWl+OR4X&3e~>2F&0WBq#A%C1^^47l3Hk`2@IFg^Cujh+e%xrPZfVE$awsOksp zW>9*I?gp%<{CJ$vCdPkRQR02ADDl4b%qu-VbPbNZJbXG2h2NO}Fq_0kLq?7=WJZ}k z|2CW6(4`-0JCPc6*bUC0fyhqsyz6$F*YZ z1db^gS_+nKe2NY)BjD*Z|V@TE^S|TVOIO4fQo7+|(uNNX$AKrmvq4^~wA+fIiV0<_7+t$3xhO^L<93AORTr3Vl^7+@>Ej`*yX99 z-XJLAfbj)7L%l3B1w1ugg4XvNy&x3;00960>|I%J+eUv7e)q2+)Q3v7Y)hmrCrHrR zR#F3r9au7gwhsiwLnf>XqFhD&^_^=EQj{e(KpqMQMiTQ_?#}McH@iDC-z!1tD?#c$ zg4AdEVPHNMu5jXSx=3^Jk|H*zX@;tVgF(!u8h_-c#WEOA1Lx!AB@BXKJey~DST3w@ zCtu;^jKY60@l+l?G_uOkF>VH4^)I1U`u^wJtNTxV|HJ(ac~=aas?ia6WUokF2q24u zn0wApRm$1^Kq003lmsvjX#5`FzN7k5tOR~h66n6>%`=72aE`GZb z29#rpjH2B*Ee;wci*+QMA3X4*xs}C?W)u?Z>F$5omaqnU@|;R-LBm3D_B18HV7lz1 zV?VD^5tVrDUKLXD4Whkfwux8q>~E)9+4Wkb?o_}|gMXR~f(ig}>vs6t@P43}#g!cP z)=2Fp_)BfRAT{h74Id6mQea#Dhb@}X6P_^F9ifcFf0&Kq7y8O#ZwpN|4rt@e?eN3x z{mp;X!HtAvy@)+WB($qC>hTwfdkes~_eeB|m)$xP$Rjswxl!bGyq!Q^TD%439nFNU zcaxNHN1JbAh3dR>Vo8~e?N@Mr1@~8QKN#FgfSlc4&d7acH^@J4AHaj?w^O(Z7`OGD z;;1{eDA-m<#|1AZ){DG$1mI56F=zx|9czD87#L71@E;?_lg5$%1$YMo?;V~LWHG(CrmT!rz^Ay#rIr682jAvkEQXuo zLPeAleyr%JY6j&-%Q$$+bsIqf;I4H8W}geA}PcUxzR5xSkYcOH1%&bdBK9;8w95N8k0m-z-X zJF!7$a_!d)lyw-R#@|jUdkdql>B4`{8~6N8lNiRE&T*sd$+7YkF|Gy3FwQZcXfHVr zD)cJBt(PPv{!?weT6sHjd0bJ?1!Y#LQ0bVGQHe`Pj}BAEyI8*3P5EIUzw`hz2 z4Fg^{RD&6ZBX&8OD#CsNLR0X7fj-=(anA`#>@1obF~ zkT`58h!!)t%Pu_X70J(~;{cU76g5u%`*JRmtH)X$(^sLO=>}80h7ahaj4~UC;a^Qo zY7k6tLv=&at?7ifGH#5sKh%FO!U{~$0h*4`xj*S!sUbQV3kFi)A6fv=LRi~O;2T+? zt8C{CCFzSG6Gviv7FLWfMyHC{myc}=HRHo&mDE>q(k|oi(}W13)!K}PCE>U@ahrNr z3oT9+##H0%3lKg$>T~0_EE@A=P%cm$j91Fe%hp;J+XdEz#fo!IN_&4)OJ>1j^N-3! z384M~dM5rBkS9Hjumvn6t4WmAof-bkLQbbK*iJRRMx&Bvlum0YOJrY3Dw8l%JzXUv z8(z00e=}d#OX{V?wXFcq5X1n=Gpwe2`e5=);Q4Bb@hku{ie*YFYgGa(z&_!`0;+k3 z1H~PdV7#mPl0BIL$s>PE?hTsC2Rm?x9@B%{`@75jJC8-cAEhE`5w%~7gaG8&8v1C9))as4w7Ph8jL`}&<`e0+%hq#aq5T@y5u8YrIUOoBODl?=1D3+p3Em3 zL3PtvP}Cn+X-2SCs>86|+v=w{!dap;6X?K|BD7Z}0}aDi5sFBZ=(vO#8FaKZE7vV$ zwTy}5RRLE{zi5AWiZ?1K7Pq1}iee*!PG;7MQ&^acD-uDLGJasC(-}dTPMT%Q3ADeX z78zDDjd z%Vv*zQ+)3A!iL*z^;!)#Y&VilV-z&v(Rt5vyI$NKwcUSnuNyT>qC0Hu#4#E66&2#y zalK9#K7p>3akmvU+(zPVMR?@i)G;2pt9%ehG1%g7lFOWS*T1^H>t7C$*%n{HzW1>c z>t<&RE+??0@O`cIeSB5aKl;VU$(1UAJOF(v21gk#qUMu{BC;nGLA}KLXXtz zgjANWFbjW$1$>!i$i|#H=Ha9YwdW8NbfWY9y3?#XZmq`az0%k9oXZzfS`MdyY%siKDm6}Y<=+qb zK5l=>QC7JWfD`MgGTKwK*Fm~cb|*V}ASRB{!FU>EkIW*qz!=l$`T6=C`ok{e@M3s& zA25{7W835S$8?8d_s8)1bKk$X9u7J!yru6cb;tQ}X@qy(XVv0@d-FhP?fG-KPI$hA zEgA2AQIvA0^+WmrM2-9k^dCu)z@tr9gP(sPchQ`3158tPN4AR6Ih!^mS4Giblw&Xg zi>-zHAdO}xXm`8+)!sfT^Duv^-McUOz4K$VU(6 zkZ+V?9#&q%z#41jh?7gj0@DgCZmh+CAmwvt$R9ok6S+M*V3Est5jaYD4mY)`#D#z1 z1Isl07XSeN|KwduZ`wc*zV}zGdMTC+ih&Slsz^;RQKYD8o3uStl|_tQAqAU)5#--@ z=bK%7{fNP-8dd7a!pp8bGdqu+m$6^9M3Qy|l~ERl6DbuJd(0eVb!ypg%g9O(pY(VW%^d+7{-|ag`L% z^GyEN_h9Y}p>+9D(7Kys%ZUdPZyCG_$kV5+p=B)3t8{2T#4N%hhG|r77BMCMn9JI^ z-QGYSJZoQRYe`PKyuLcWAO$U2WA~%v%J+Bf*t>M^ZY`Kkmq9}At6)o>i#C6|WvREa zP#pnqekQ6#)aqvur(bVVQ#z_hWXM$_RYE+EyS0@=1E=52$kXK0b3N}=dw{Dg*u7*r zn2l6<2^H8qNjQGj7t!OYbhg-^Xfa>=I4Jns%2BdX@s>V_^hZab?@R;qm>l*bKRVMw zC1+_WGiT{G6SZeMU7~7_KFfbaN0M6vWIYNitP;^Wvc>Bw*L8){9k$T{55ehKydfrB z1-~})6+Bh^VLCKJiP*~}ZSN#ZBRg$|Kz+teWopje>b8Umb$q3=g}@f?O<4--H7G(C)z{um{ zg(v0VXZMq6ISvJ)F<5`SWxObkf|f*m6xV~`;h)6U{AbI`Tj=|jH>`DPqpYxSAP(yG z{F7sar&pX5q+Xrx=#vjp5kLavZ=?-wx_$pRy!S_)&dGG(gyC^8EL1`iCbIM?+=PWW z7{S8CB~vKK+w>pebpRew7Q#ck4bf2yisAI{`%2a-d64`H`XztDnXT$BNHBzHf}z|I z_m4@iZlp@Ow&*oiC71=>FU8k48WJA_9!_za^Dh&UHj^>F^QoH11-fvaR!V{h8D4Ft zqZ@$^q1XA6kwL?c$D0T+i&08w&=}Z@)@2jC8tzb!+Gk;i+i3keC>NZ`Ab!p%PmT6F zHsQ@=a_ipdB({H7DoK^=PY}Q&*KF3gcR$s*hbYWyzLaUUY(_M@M4gA{B@Q z3Jv-utx|IgYYzG^NW3}#F~hD$R|-}M;Ceu@b_OYk*L6TVT*}0I#;Z}xdL@pa-rbu? z4aW`o%?Mcm+iw5>0RR8gUF&b#MiT#={1yBb%aIgPlqi3y^#u(QW5uP%NasN)^h6TnR093enQyB%8^d?2(oaotJTZ@L3=3La8@DXmgAIkC$p_57;%@tQ= zDI>^~Cxle!koV`8_-d43&0H25$R&vF@ZanzS%SJ*@X`YifntnAGg^bV@Q{JCT>~K$ ztr&koL=3P^0Ur7^x0Fe(#EHK^=#-;LGJ;qI09=Tb2mj@M4k$|&+uKsVImTXM@_29} zLn;a*odQkF9Qs9(B@1v3Jy-eQBSrnL!#oDYyRIV|`k25z^v4!MkRrVSw7rBsOI4VlyEv`ifZ59d3!C zkkyjV+@Icj{s-wI(Y&yON(_ACFXefuWgVk(d#7(-Q|G~}N(;5;s`_1LxI>za<_>>d zRczhbfl;t;GLHE}l53NK>Vo0{B@D;)&f;YzEHd7lpVHOOTP=1EDp#%&89Lfv1C7iE zjv*PH&eM8{t*!UN#noG`L5+%UQn7qcXcT2_Cbdk->YRR51)C^t6eMff82V%oJER>8C|zwJU0-7!V~%gG?z zR#r3{us4-8Kb;yj3<(}l`Yqjd{sB1;m!P(OH;C~9srP$fJn5_TxxBb?W*LTrBH_ex zY>JHvfKPAM<(<6L!B9`aC&QoO)!Id%=5{Va+xD}!ma1NQwX}7pijqrauZe#(xh;XH zPSH7PidX`sI>T!H2}IDnl0Z5qu0D~l+F|G=-oPJ?`u*`Raosdc$JJUBl{Yz2XXPpK z>ky+$;lt!tp7c#zl-X?}CUFZyp_mu7S;1~5zU)@dhvHe8iB}u$-Ei|GO4qf@jhg;K zo9e)3dvFo$WUVV98SM}b@;iU@#_oozfoiCmVOM;oP%lFM5SyeA|rzwEaNVA{yNhMDyP#+VQim>BRv+mkPa~j z*O69x@};7B@!m=SCyl-evok1!Dzkc|e^K$sX$)sW#6?uPGCMH-f-fbjHLLo)_p#qgXY`T2a00{AOnp)44{WT7Q+!yYu%KA9{i&i<F>h5gTSi(`hgtcJs*u56}pLl~vCZX(Z8l>^u z4bq{XhU3X>lFp++ z@>BuK>mYnk?FDa(q9x&hC92axwQoWA3<$dcR)iGlacX~oL%WPBhQl;L>zp``R%q$* zeL@vQ$Vfl>br~h4Dq}3sz>y=`y2JF-U#Rxw+hqjhe6Z3I1Oy3Q5NDd}BDhTDe&1CBP8H2#1QtBnd9{iwt z>N)2NeFi}2yEw3~{#<3ZE9a!=b-Cm zcVe|5bLkRpDB;Dnm#C%}rc0UwXdZ9BWU7lAXtRYXC$znxJ+LeXjXqt0a$&GOmPdfx z9LQ|A+u(TEH^|u)tW6n+hO-uS{o}!ctx|spZ^Z9zAfM~f`7MHC36bNRMe1Syo*w=r z^l+4Cdtr;CVCc^SHyQciIEYhsHX6sncTC z(b3rApzA@M*Z`|CJ~p`cdw}ltj)Ly?C|^_0sC{h2`AXF?U1OjpG(-iE(bCe?;$DBc zYIquL<}?hb^P}t(q_=hGuTaAXNj*8`CuiJI?O<@}T1JHB6rSxE)_CU#iTg%at1%My0=Q?3oHdlM5om;%R|Ly#D`+Oa3Mdy&p#xMVE_m zI8Vsm`!cvOz-P{(e7+B(Qx7}X{eOSS?`isJ_na|UHwO~zMr!Cq>26u~kycmp!mGy7G; zf*xMiH&NfIlC}eSX2~+7gPK!vRcycXQu(%ud*^TUUE!}x^23RBn&neIM}dF86N#w> z4i+0cW%n{2;$cHFJKLwZt$oqZh#(Jqn7!DL=9d8UUxv^S_D%5 zgkN#KlArIj=vm8?IJcjjIVXRibE?=ue)S4mdbUvM^gs1i5 zty--gjN;8hNAzr$&|?ou!nk?e$o}H5Msa`!P`paWStjbXo!E34yrE7p45b)7~e)L4Y-R<98f#IfAur0ssI2|No?2OKZYF z5I*m}$VpsMZLAFlwmp9oQm}|Z?V+6KGWOKvTmJWZlwGg)Mo)1Ob4Po>-ME3uW-v2g-r-kv2<~~Rw@Nn;Vh?oi%rrW(9 zT&3%E(ocKmL&Wsb1p9U4N7~0eJ)m|2G2yre;E|v+mRnMmg)|Xy? z*305^R|rJ0L!b% zu#I;+1B*4#e4}!xykpT9-Y^Oep~;$+68sK{X+@a)h_F zfW?o=kj{UQ+4+2W|2TW4>5cG9ENV>Ov(Oi=*na^40RR8&UBPbKFbqBCFFf>;poRgb zUgGSqp_dK2?66_O4g-p~NrnPx8!Wl(?`M*dEJ~CuHO+!yy%a$jk&O9b$<)*1-9~AM zLst^T0s&$QYL(yZ(b})|3fdMyS8*k6ZW<*}^B;e;^(^McvW?O=}8fwquD6v$wAOaI3c_v+}(y;qx0=6Mi!RqX_%siyGK+&<|wO=Q*@@m(sgW2Y-3{Ewr$&X z-q^NnClebJ+qP}%n{&>8@n7^>{j9$2esjS_cd&iV9ocScls9F7l5r7A87hl+3-{N;_#clxHH*E6Wh4E?K z7CjrDw>F4%KK(*=c>)9j6^P1nH6y6MFJRXAOjSh#5-p`e1Tv_+(5gIL>B8v{Kc8{L zq)83(0@Y#m|EXO5J(sSWDTF`fvb#_6!syZ9} z^nl}KHF+mdJNCp6=R*MWwOU}_O%5FFHE3cd`k#@F0(UngrIe=&&GRxF48fE9U&kEt zrTOjo1CDR~#fgYw5jpT{C*~m`G6PFYzq_;4517H?qOnfX$ugL6S2@Ncp5oiDCzpY) z3c5A&a-WJPzaAYsXJAcAX%=|q_|=|XGu6kp#_rt_S;7}N*o6Uw6wN7HZa+2IHgfg# zA-8PZ8_ILBrQI5fRsBr+T+R3?luN_#r3I!LYE1RY$VGaZyxQ)H8X^mNA?LE>fvemc z!UU+zns3zS?AeBPU(0^K{`zRwb9!O5PH#T?hwew+LlTiC9Xvi1M&#}*MX)70uHw$_ z8x#ggqT9kyGp7O2WN~rNOLH@TNLE`{cw3_fzj^uw8ZT6V!%9;e!NZ=e;tmVu0g&p?wCb#zsZ5D6{OoVzBh~ zuYkRvA*hNnYPZ7+j zF3>-=T6e4#Nka3+5nBY*37~5$q@cw zY^!?nlBYTnT35=s;WBdg8WA7gMcxQH_hrG#|9-BpYHGPtORcats<{i|bwXHWp_j{LtwkafuEO<^r z0W2*wtTZ6kk3+fDyHM5e6MmZEOxArujtuYI3JlakKmQ9vle*mY{{&>Y56m6hp}*IZ zqTR-pfuz@HJ5Gt&`sw z`TklY6OwZVyR~2XdFN5NRDZfvx_kkMZZWvwhF(XzN%#*6W`Vs*=%!M5%{f8RXS=;K zXX|?kQB&L%4|^qkGyF2(P5<@*d~rV#MQQhnSCrjW`0|EuT>PfIb5ASlG<;UPo*?c) zC=JTMn(O}FSa?{7ySZ9P&5Kfq^VlhUe!DX#OfgXV5JhzSQ>UPVY5uJR{O19%EuRbk zoyMr-BxawOK>HbxrO)&}$uH)G7ek7?x$=07 zg2T~ZV7TUZWFzm^UbhlUg#+`ZXv#YR2&ekfh$I>lonk^1lQj7BGH1Er=Q-5tTQ}^p z0Z=Mz)z5I&-c_g(?5|H-qnQIV_K&yB7qIpxv@betMFW9!fAb&z8l;j6MD_;ZxxB*}t z)Wg#l)?+>X)l&_thCp9d84AJ6rGx!=N`gh22JscKcz`_w@nb)jbs8-Ulnu`3|F25! zHgyMqM0c5a7nI?v`@7#QkWzrv0zTW(tB9&*G%sJeLiJ4Ma!*Bt* z;>@$@-pbguX@B0Yzr-4V(-%|ElKt2mLbC#MY;%`d1x$h&)_l5Tb$|`dZ0@4`TKVL8 z*Gc9d0K@}D&Q3G(I2-(MHyH+C$k*&Y49FKQ9LHO^*tAvT9=6z`Rpb^s->NEd(N3crlNcqGhKS`4mtLc*Q4)Ah-=4q|7hV~XIJt8A)<$7K2J&e#e z{Zn4QJ^R-X`8(L&ft$#jPUU@+G~6oU&5lD2$GIq6X{I9Y4CB3X%@YkOlyxM>h|vZp zXdTe&F#ON$fD%ZUps{4((;q+ErTOK~jIr)@Z(0a^+OEDbIlX)8Yt!Z+!ruN6KlzxF zis4N_u$q0@iO}a@;l(AgV5|wxkrkn9+s2I$HaJ%pb(hSJg-6NLoL7;gDSQoEA3(-B za%MPSULpF*Ar^PH5%g^`M`Kvghf@rR!bK24$PqLWu1*wT3xbL5@9&u^Q3|X6h{G5P zhmPY*l94M02V0tc)t-P_I}b%;^OfK$e??A!<_#Vks$B`ReUASh@y!LRNJ3V1_&;*l zcUg`(Q@hAQFPUS)9%DWYq+E)?W32d#y4v8U~SjaU>Nwm>t{IK#>{(E$}N{<=oQoJJZfOXCmvG) zcJ}(k`}37*Fbz}%{$HlZ7pY4jj(ZXdqE6g>_5#YbLra2x(bxkN3R9cT#S9uGxwWli z$bhwJXPd@h>Dd|;3%blKh8s#rRg5V1c35K0)XuH7`)Nlbx{iPEsEt>ysq5fL%wT{(1`j^{?m{N~n`%d~Ip=mUNfOuU5+rj* zB@@8H%-Z$xlHBi>(3bQg>)a5~s=tOkCN`P4z&KMD>y@$UoeCfSG$>1=cvV87vzS!0 z6jmg1p%B{lO5cpyUpL?&`_xtl~0mvM|2-*!(R%g~i`!e(8H? z&GC!)^B?HxJbj$6;GjHt!a#BcZi?R%^tn^!z@&S_PO|mS_=iS`0q`=xRL5?z&5=tUI176ZQ^N>guX! zF}|A1vK#KW;><8vS}FVlQy%(C7{(Q#bSR^+6SW`|(sjXXByEqmMIx;j&7* zu(4L!@UsKmbvxaIj_wf-QtRanbKCCz!cc1*&JFnDBu^yo;tj^cWF(U`&Be(?cB2<= zx1z3%8pa8>oT=LyM%i0h*~1r_s5IphN**27Y)%uYVYDJHGW7Jx*g&NDqcTHj31a{h z1uL*MBOG}zhI9)cT!TL=6W`)20Kx9`T*5(`&?Cj6`cEin2c1-f+{HsQwx@8}myJdv z<0zNTrC>wn-yTU>s8P<)%RQJfukXcC8k4liPdxOTd20c3PEeB`1&9wb+utGE$ZlG? z{(A6Pv5%7@fWEnnBFg{$x~ZhW$>3#kq;7rP<57WR03^4hgW$c5kd>0+qJx|uE~p`N z8Vz=qdXAQY!1Wnm)daR^w_s4SIi%{&MX$9;*?UVbLd8!`MSSjknpVGP9s^>2XmfChFc( zNPS^>S%%$UJTeRshXLXVnYia1y1K_0QV>l(+2yN`{N&Y2?F_?nt(91He&0IZzXb%jy zoHd)Qk1_#Enjp<@CB-|cAI7MH6>JP`I_bz(7$)!m!a_U={DdVK(Vs0*G5_uYvRfdu zAD~y;xWJ7{+-k{xl=Cs8uhXISL}2WK`2tI@LP~9Kz}bFs8^$D1<61@dn?a#5O?YwvcyA<^=40`l}ebr&UoJS2W!Ba9g zWrHdPHq+EREF6=4K5i#hlVTz&d^CA(iGE%C zRynSWJ3$#Vp*m>W=2q4jBr|01TWlVGbX3MGrZl9;xqh4;h)ol9zp+e%K~-Ipj+mU+y}&MpAD8G zNw)ll!X0bhb(`^Q!?gw#u1ZyGq$ubKX$3xeRPg-VfYBe6k3 zQwF>LWqE{_3nw}e80A0`V*nl6TOnqtn5vwenF-%S$xOjYPmrqbf(n3hK?R!3Za@eo zgbURVS@Iyqm*WFUD!Ojvdj2Y7{?%@j(6o}tAtf_7v*U+OHccdx$4S%X}qRmg5TQd{epox6>^m24>;2RCiw zj}acTNQ)&{JZ-X$Xdyr%n;WV!D*E-9BTIQq*kD=L?dYK0V?=K9>J4Y2VHi1Mv!~(L zvNp-D;$p&ch#J>mqKs3)%biTPCU97&(R(NS?)SJKeEK@%S`7mxbHqG8>0~ttNaFa! zQ;7cmb;~d6TH9~1p?-CJ!Vqsn(z@F4ktU4u*~-E;{hkE^z%x{D87QElSv!*sHl4rk zyy!_)Vo$gwtzNefN&pFUE&66l2l0uoJ4`ww)v>eH{^szzSnn9_UFgE!z2{wD;mzTe z1KsF&Ezn-Q4*8~+z4Xi2L0QtL54T?)#aF-|ae5z}n#_x3z(TwoQN}W1H8? zjQVCJ4b%QAE89;jwroaa<_Yruz=i2dh&U8rzWjx&e=t;0SvVu-3$=O0bnzdN1ND&; z6!+600VYY={pey?fKlVWg2F4~=DBkjFXnfH)9=~>eC1eHY&A4;p(o-L&4-gmThj)Y zsF+z|n;E9g`d|Du`B3bvqd;qK3at-U@a*4*MSm>c@-4Xp_e=mh`j|&W$ERj|b&{2D zlSM`7^$|$#&Swn;AI4@cCCwm=9&C&Dx9FH?tup-Kk#I$a%t**+B#Ki>{B3MoX-as+ z1^&SXa5pkEzaliY? zw;OfO;o5+Ol|m(I4GiP=1 z7?8IpV!p4Y;ahG0v#{h(ll3TgPZ-NAGD0j42=(L7X~Tau#pLyT_h5EaYzjTs@`jJW zu_FliJh;o+(d+gNThC&78Ne%oP0SZD$P^mKAe$>j>p+6f4I+~;x$dfwkg7)7GOB#rCjMn|f$;0&8X}&(SzWnt2x0#2cvXG%$7;KeV?-_ZuYg@>3@A=nu`& z-cR*n3kpB?)a+0B-ET3q6#nIUPPj^`Be-e%CQrLT$Z-6pG74?JBogPsAS{4!l(wzn zF6AZu&$$_hB&C&jr6@S?tD93S?-DK#KvIb+#)K%XK$aM#;kO#qaRI8-LcC(;?l`qfFQPA#rAVi!=KQPT+3FfNfSME1=SPP0R5Y6 zdKac<|6+4>b#7YS+9=o6vDD_F{$=!y6+bU?IqjjgZo90(FUW6tH~I@3VGl8E087S{ zbX%6T`e5}hlzfl6zE;I|qp%$^AmAyQUpjfFva^14&SBe&5|&8ZkGnc=)T}~P?Og>I zVSe;bMO+C#M9;jOs0}%n;x_yM%!V&Ro>%$goGq&$0i+OpQ#x&^)NcXUc9?)-@CGu* zV4X^=v4Q0jRc)V-T&x&qq4h^8fJ4q&j_ZpLMZ73BeKz2m@jDO?k9O$MXrcL-#dD0g zZQI#b81M?gE6#CG(6p-00XOqcib$HTl3;7i0T(b_B_K(RecLyfKu z99r2*w+NyCVSDsjCM$CY5y;QoX%WVfp-2hSF3|b1xi^!S?M3s1NF8lGRi_?Ok}q>H zQ)W;&$uVFZC0gTJ4RV**meq+UNb@DAAjDr~23FGi5}ZtSUtQc4Sl^aB`sX+;hON(4W%%n15_s~qR6K!LRxv-Vn6)<#)^x&w*TM& z>3j1VhIj%9VBMl3ooY&{8)&P^_cB zTfE4A)vMFXrttmi6*0I3aQsj8o02}d&vI;4>_8Wg1+wocxuW5Doz%u^G5=*eig3Fm zfo`NK#?HC#o5#68uZY^=OxjcGmrnkEMI9PnV{Et=AU^r;(okpB1wS2~VA{TyM!?6H zs)4Ie0Uu`!B;ohkS4^?RKJGhhYvCVZdZ$`?`<6b^6Gco4=DM(`Y+cADrZ4hVkZ!&9 z&)3e_wWMngr3xN-fubs+nyo(ym!OP4gXz=*d$Wr`ZeSg1fw12 zVUWoefad9)Bx2bC0HVg2+oGp^JK~_|?U-e%H406zug3U_blI*D3Z*Dwc<@qfu_XaU zP=zbZF~1a+Oz2I;+dKRwpHj(*4v0LLltVSWamT19b@?Sx+;do>61Dt%$X6AVcBy6! z!v$vNWxymm+<}Ii_uICz0u=i{G@)U)uIy(izzlbM}83 zoO9-(O4Dvt)`csbQ}8S>opJ#3>OcC3!d5mA-rAh~@T=j;aMmXpfoyK%ipEMv@Wqcq zL_i^g?+HnPRtad7g?98%TNo#wR>D(4@kxZP;TVzD+DblY_Q95q&tEz@66WXC2}t!& zJss_!zhg2c^wMG+4zB1sKoUW$|7Pd}5Dd3FZaa48h!7dD10o|lN9-8ieiOZWB0gb` z%#om+I1^Gziif_`L32k!0bG-^8h~=^aV)-< z&V4#~Yelxzr;sn8&c z6(w(30S%R-JT?JTaR-=Hl}b0Kke*Fea9hUAecJcV6_XtI^yfM6k|@wUMf&l4 z^?hYzP4WPGc=wJFb+&&%#Ts*1+RcYY0rAxdI>$m3!V?V%Nco7AElM^KP@E@XNGGDy zn4~-!PLFOzftqMZ0wu+|fIQ-yTGWC~wWiq1dO$;qGxE_&^|8Ay*tPB5VKC&)+MNwJ24n$L)Xw+J1v(W=}tsu{X$B$T$&ne*{vrrD~R0%~j$T?_D za5t;z+=(EL*{DuEA!O7P;4XEdNcj?PJe!JmG@Kso!@x@J&Jit+0_o1NN@DNx12X^^ z*#AS(@H#ud&HAgEmx|_35trL5c9DBCQ@oLHF{GoOL6V`HKjX3|dPJfB>kJsqkun*c>3;Xa(+Q0QV%E06pUfJ-RU58i@B5mxos zKq$$kyt`tTM~wTeNfQMRb1eV7!OM=bxKj0Axm(+i6;NPbY7d4coTs*g#g}1^Zn`8} z39SNJJ}YJ6Iwlx;5T=EDx9DVWkl%fKIEr;keyDXWmMNXAs*v;vG zV97K_AY_TZM+~8(F>9p^d){T2jzt(_wk2eH&k?|wn{0U6wDIQP?xWD8peSq2ChtCS z39sV*!>{gc2B^KB+}7F3_-gN9{%~Nc+AOHW$ z@89?TTUycuC)7|R01K^!L@Oa(ZksdHH~b~E&jI+U7t3ZUDe0Q#0wjo5FF{3unbq&_ zQxRpVPY=Rb7BB{o@WN2?SjGYD=z4~t3tt=g6#4bO@TIn|HU9{U+=e0yz)sUDxT)58 z_+JXV?&5W(l)?v%8isCuE41hD({QXyIGduIYNz&4)Cuh`e*lgE=m)(0iYD43OBs!k zBB_3wyR{bj!fJ>D6of=|_;gQt5Drg+;w;s{TsE{txm)fq)WxI*UYUwxIS}4vbiKka z6G2zF=!MJT-(v_uxSt!6>D%?!9QJtpgf)i%c0{jGjK7|8EeGNovUwn)*___j_?U`8RjQ(<5VVt5OP&tjT{)GeIz0Sr9LG4x!`!A%T~SI~GxC+$l*=c7qWzG)?8&12P-&7A zVL8T!Ki0wFl>uOdCpP|`$_;-KHKesNRvxgzNa=KYvp2o8Ioff#da%d-A-7}yph73#U=PP#CE$wze^5Ves39kH*XEqktV>dTeEdF`HE~ge zQ}6D0cd|i!la{yB?r5C!(6v%iowCi#(6?#lCF?vtsRv-SQIAuJ%cN(;EiCW+=^U{r%RA<% zVP6u=UFD%~DtU2$^@D#JCH+a*kV>VQ!vKS*eh4A~zleHDi?2k2qBkvsR98mtH17E5&<6ghj?t`LGZ!FGeQ z(fLK*Ek-%8k;@wLvyy|2Ek@5QZe3Uwk>J4_8F@6LMbk+&c_PJ|&43mInH?u58O+QW z&AelbK#jk{RH#^hU}%BXs8wG<1Sl+)1e$iCvH|3cc5reo@AyOub8upC)1ef8{rA~G zTepr0mhcE3uZ!-knLfAoIk5ifjzE9^VooU>iG%O!iVGwher%FjKHfHQ1!P#Qj z5$5JCmNQ;<+|xj)^AQUh8nDVqE^up+j^oOsHg*AUGqG@S#3W)S=oEwxNrb@sBHV1PYH7Cm&}x;%t3!R*(fUhDaAM2pIsp{b0f7g)3mr`4kk`4LF+re#hG?~n>EN?mqAVQY$u3$Kio9MBdt6LVs5 z6MF$aI9?$K;h})0a>-l8y3_?F4{b!tAV6f$I12&-GGa!nNGo*O#G~Y&CcjUIhrv42 z)kv!|e2rhN_aH~E{1)QJZiofNYdx=RD=m9IFZJrRCgC8*PHnL;mI;Yn77I;%j?i>2 z;hwZ$O|)cOQ03p_9bvO2mr|(&_&4~tR}gfAYSaQeCsa@{LfToSXh**?%jM2zA^`u| z)Hq+a@6u*iuB!d>H}>7f zu6OV}j95hp$8P#&p&xt|k9(2iwWOt`+6qOQw5-L7(n_DBgby%0pnr{dMM~w&fjx*h ztMu|-RbaG45``}D(m&c%9R)+ecLUBXdQn`JZEHA;HYkTDld3hWj{xBetz&F!Qg*K# z24}-39FfSL!=%*uP>p-gQxeH0noj%T2iV8SC!)Zm4Y!=86piIj%X!-aWD&LUV*>Og zCMww-bUVhaJGSm|gVT(<+ZX%q_hm2Yv+@$!jswkACknqej6GT35o+`+XaS4c5I@3R z;iZwx6og3DxP3Q_C)NnPB#jUFg&5w5b0#+h+=sk6Ix5(}zVxb;nU~rkx;sWSi=&s? zpE&;^1uu0koHy8ze{6oxaCh38trYh@_DXY#Bi1`kIIy_8o7@RFeEeIiH234xO!UkC zNs8#8dL$*?5;L+o&8#H<0<0S}XwY}}Tkm%}hho7f^AMCqI>jyZ*I%z2Mkc8;Ho9$5 z9e<0WmX7^}mQkOBlSTX>W=bi^a!;B_PK_epi&WvIWff&?d6>JT?O2m^-k_eGM^H~E zt8`J^oPx*i``xJtK2Hy~4CO|``vVH-kcrhmSOf+`B0I;3wZ1qDuyA&05 z3BAShP9XKC+Xb*8|MN1Jc%fLwu4ya1HG4nas&el|kM2S_(T7wxBa82+r_@>1JVUmmSD;1enE^ilv3)aVg-Y?GK*`K@Zo6FWUU%?@*M9n zXn#V75__YXd(3^?p`YP>Vo_=L&r$!m>Z|rjW4o7Thnf>>1uXJ0!koqe_)2lnkb5jR z`|T()3)-OcmqKiVg*_4%3zwEkrYon)-IzssES>JzK_ITT&G-nfLgT7lAFkdD#^Km% zJ!7sl-rwWu3@fniR^38HQE_4$1NKUQVx%Qst8M7D);E~vVY+; z2b^J!;z}!qHJzLo$%%Sjj~29Cev<*$?3w7F{>oArA+6yf! z{@N@r8dI(4mG-(cJm#!Z=Gv&UTW%?|tGc?5%S$Dv&J5ihAU6H(8~a}l_%kop=y}uc z=Z(rIJyo;c^GlFdPZ~f-BhZ>!*ea$54%x{wj-9+oUTxE9Ya5XC?a~D|C%w5jzF8yt zXwR|3fUuWc2gh_gIs}hiL+zivOf>QFBO;uf+7jmbtCFBIB)5%v-I?OSp>%h}vH-`L ze!57!+|x7lTcC(hC#Le&*^@eSsv8d9qlAEH1P)6@f-AI#_4?K&h9Pio> zxSzNQMD6k(2tT%z10zkef}G30@CSS+06!^psZrdNV)iR08B^E1xW`~HJx_FcfVN!? zEuM*1T!JcAhIqsBu2Vp;Zt{{4k5i^aN5hbltLqoN0jC(|iSNF3wv{DLTb??zz8Rc0 z01K_V3cq+#%7*dGTe85jN9QktbTP@z5}9ilL*@5BpA8;gZv?6-`8o}FFkK!jXy67_ zFh))_TVV>8Y=l~hi8tJeaVI=U1N<+8YhI^3l}g1oQrgl=9!&V%SNnOpeh};$%b4Yk zRJ5gK6>O@FMfcTtmwK~$N|B?z1I;{l09Y?L0sO2-q8LJQi`Jw;;;(Vp5oJfS%XLLe zum(ICax2u0NjNO)d@|RRWAkBM%BD4CC_2iO3mx!XoBJ*fZ0S+_U|s6JlOz%?yL+)b z{bwyGGZ`n8$N{`8z9C(+KtEo7?^zcP0+}G5HHm>RCEuT|tv977>pOT(7Uq2;fa?6f z?NDc$KUYxrCtxIF6C9-%jonf$5{{4eDdUxpT;=4HGggSIKx=S{LjM-x%%6OP(v+!CPK0#>EDn0!&Cf*65 zEnC=pc?^_XyD!9Dcw|ol&!(260E`+CKRH}>Z@r`W(S-7Fspzb9eq!H6T6r)(O>d>~ zsI-^cerml;XQr2lX)^f>9Xr9kM6-Nb7PTp^3-q|U+==ttCN$wx98N72_Pq?L8ziRju)igep`vt_d^;Jiy>05`%e74{)! z8t_oc9v{!2hoKEboiS8q$Dl$*$+<%dlFfURI;h;y9qh?N@=_bdkq=+LcnTY1uS!}OHRW|jQnv=)IfZjmI zwzWe~ei;B4?~9(ievYmafB+|Tdm0@q#7Pzbj>U}d&gF_7F{^$it>|Mhui#94&e%-d z#M@m%G2R6}tBzCJ(7?$mQs}_T>AS{i_@R_AZKh05GZB&BA`NYb9to>Qv!2xl4;Hlf zUZ4BM3BO-`{e4l)63?tva2O+%RVrN!bm>W>%}YD7vSC$J-e&|Fu*4BLC{Y)uYVOFV zlOt&|n*Qh&4oFr8xi52<{ykq4K5-_P0&LxTHa`SN@Oh@=^Y$H%OgEkV1{no1dTpY@ zwpJWeRdXF~Ijfl5)^1QjjT7jNF45lP+-XpQg~k*d2$^3tTu=9^4xTjWz-bG((r&RG zF)OAny&4I)34=%nSPz8UryV^Bd0hd(IKA8d&2@^;73cHybVLgU8Ei+!Gao8up9R%G zXZ;dcl5^4akS{#=J+|eV_)0N*`4t3Yi$N0CulTy zNx)8M-eXP#bY^jAcV>MOK>Yx)pa3_$@K6LYK?@Wldk>x(Va@y+N6h0{vbBf|Kign{ zYXbS19sN&)R1MQWWWpi6>l3mP7Rvr$<>De0XEDzx@5P5f7AyiIEyZ9Y-vCC(^BtxH zcYIp12@bBm)Q`82+Tvu;QAHTTemyg(CL(YLOFG1WtOVZtAn^NBR?n*Ab7Tpv+5r(3 zq{+Exb9Yas+2lp808dZ$S^*!dP=gNT27bEdGA)(y{4?ALyEvPbOS=fWEy8t%G9S#G zM|82&jV2BQOjK!;30~qfjLeBBdPU{@oX3P?%OKB8(M@IWnw!*ru7>w!(`c9c+V2Sr ztx046OwUa2H zm(T#Nqr=#I*XT!++5aJij-wMP#5&hr#eP z<@!ERDic|%_xIgS;t{@BL2sk1%^G#s7$glp_GJ!X0^A zQsR(nTbXcV3gk`k1h<5{JPD}}K3IU2;nN-OzOkZpNSgY>&<-Ls>Mg@)v>|LZ&8+ek zSG5{%cG#No_CW>frx(UyttGjMAiW!t8dn@ES$tUU8Y!niv#LAw?U4TFf{lUrswS{| z@Io>g@WTohkRJpy$oXIBn5tISEO(I|>#2G%*O^~)g{`LMsuFP6q=DJ$7GQwRs;psJ z+5x)vX1viGHk2r*^9U8}=w|FOmqS~$Eu7QUxl}=L9hRk+)2c%9^Ufle5$x& zd0skNSvV+$uI&ySys#n~Et7`Dh#zjdAW}O5tS<&1+Uw)q-YF~|^>IDqP{p1JGGsw% zMl4!I%nJR6`g{2wu_&M0Q~J+Kp8I$%cO50;5wfcZQ104Ta|Vk}mU=q)fU~eb*3!S8p|WTgBglQB_CxR@0{g+C;hb z1}U8;5yfkL03H{1G<*bYH5;PbF{i0{Ql5T1Xq#1oxOxLP;XwHrzsKz^pQnejx5W=b z7_qCxP7lEIdS`lWw=X~yUP8Hj+INp)g)d9mz8DagKSNM_a@Kn`0gGKXM$>kLY6rtP z%(BqrYY>8Ef$2%ZgtnuqGQqyj(X`tD%VVULXK|8)oY(P8lR44;eMFDgI{sUrQ=|C9 z%^>621i8%%6DJl;V~e=EV4#D;esuEdUFUwC_=eA;@3VLP4GY$Q`)#3N~gjzCbALm9)hz$e|M$?w00n*?}aq^bGFJNqE%!%+FRTkOX@ z`}sUDNipxCCp*H#J)~Rk^dYlL*iNlZ%jB!WZ~G1dH(%?#sGa$m*D-nC`#m_5R^X*l z;n&F*0QfiV$0-Ni)@q1j*1Mg3ah#Z)4Ts>(<)F?%f&#)`3~}}j^s9Q0BRW~Lbd?id z(KjaVUVjJ*>1v2#V43HoA*UkE(E~Bq9A7d*38TVIP0u^7( zD4J1Ab567`gxC=Cr}IQ8fKkHd&QiBiZ#g$tJL?9Ds>kQF<%SC*d+A#L-_R~U75M?= zc{Aop)7X$evknF0<_N){ZxHF->fXRspp1-?g(Z-lV>uqsj)BjTu1FzcjE zWq^yubizUlA;1GvWv7%`H-~+57Pg4W27!f!k{EhnoJ04N7iC;IY*Ey9&7X64gUi16 zn>ZR<7@rBJGiGLn`jid3EQ9m&PoFaGBTv7B!Vbg5QQO(mK^V99uOkOv7cX*UhT#M{ zeG5;0w%%Ra;kn)z`nvt790YYoRfB=&TEJrNwe4D-mzj~7koX9gQ4xuTvX-^f-t9iL zIW3Bq*M(_LbqEgvXpAx+*)greqSkjHK_DEQh2|bced|uxEoK1z@L}i#;RR3SvestQ=CBkRu^xr<8Ll6z@!p8Cv^rXjyV1Bv^XF5SM15!bkQ9!X7 zL)w#U1b4`a3mgR0?I4^C$c_K}D1&b~S;EwSI4y+Tn4@oo-Q}egH5~yaH z-pKK9!VJP}^3AsA<@MFuavZ7JufnIT>rK8BcIHmzAWeNivftTFGu+?+3;YauGLRMu z{3tVRHtnYuib-w8L@wQFwxcG3IeLOR7m`O+Zh^40{np@3<4g>^$RIGE4l)==4^(9< zYvaK-(+H+qq?W=nnFY>N>e4!$;;ZAaE5k)71Pi`G<4=)uw%HB z*#asq&BE1YtB`U1ysWDuG(q_{Ic~fH2}yNX40VqsNvSyJqJP2#hy8eyq+ohsQOtdK zoM@sKPsshg_IzY6W)^6h6cYdkdPa@A1JO(pynkXv{) z2a>ijvUGBbr7)wuEE|`({d!ppK26sjv-RwZ#z!yAM=10$mCfrjey%t=PvbO)-j5|I zh0-=f#O)3doDKhW5glc{i6-E!I0bSb$6A56$gic(p`DkA-d9As;@*tj*VaqC{bTxX z(6^{w>u;g7FuM%EwcTq}-U+=KyIV#SVNic@=qR^{Q7k<0w5F*tFfQjZK?|x$c))s? z2#h^JphIm(V!pn~hrH){^3y>Sx_0gm0%pWgUMgT%VwPMx(Bv^syl?Q0k6Idfu_Z0vDqEO zC|m*q_7C+Z(>qlJ0U)v?A=Ma2LSW#3K@hU_oka5C0_$>)ywESw@Cw4sNQ5 z0oB^J9WV|FLtB_19=@fSc;KL30xzR_qA8Qyelmyk7G#t3{>-B8ZkclA1oc?OVG5wk zzBuk<=>8T^A6=19RCdHC5m)r>T&8l8pOA2kd&4;dgXOK4UxWnfX$*W>ylr=8y2NXH zRaT}#Ww>x;!hxF*TGodrHAfRyh$RJitC%(9@8G|d^SH07Nj}Erz${5F_0X$Fng(8a zx#kX&K}i!LxKJCI5q8G_tV58bli8kXq22zPA~XePN^0B&Hm!5_+uVXXXMppxAXf$C zFieI;vHT|CwX0YivO-`97LNddM+;Jd28C}Ri*03ENz>6EkioXzyy}VKB(77%g@*RQ zpSt5eu890JEUe;$B=xn;-AgB|X2zPKGD6IB&Szq&-ydg$Rdw)ZPjA5^l$w0W5G45(bsJXJu@zst5W4+~ z!c`=Y#`SFy;`f13UO01~3sO6r^PA!M^jravXKGbZpX^r`9RpH4Y^tf~fw|)aPG{;l zeBGIo6pGP)9!|rFnC$js!ZVJJgB{`}QjeGQZ~_1ag$gyqu%bc7qcf}JtHYH{Nq%Z- zfS=4^O)5!d|JaNNNX@df6MkoX4x0sx;_8xkck4;bK`BqWg-Zvmrx&?*3|D99TPI+# zHoKZduK;g~R11wq8i#O|4t19VfJVm zcym@OL>!X`!b_I-8e&K#;a&1%^hZGYytND8yVn)^q<;>0i|`71^dY8wf|Rf2<5*0r)xjxFxiz?Iyc%ihUaGeoeChi%6%6sXIAbwS){v9jZvNrY}_ z2Mf?DvRBB*6}Pg7YhQJI_N@GIH*NE&WzB<|5~H8UCPJV@SEc>{Dz<5KaovBiRq9j< z1mtSLyM>2mr_bGz@a|}r(|Q1P{LHx@`g2O)rAm$y1$R;1KJ?d5nEWAxWh#F{k_R|% z{tkz2{_7Me1s_j&Zy9UTq*&?e9_jUUmR+NT+D=tPm-l zx549AX6i762n>_V?@g@VA?~0hx3T%CcJNYrVhS(>KvH|Y0+e0Mze8TYOKuJS9f1Dl zKuLQufSq!hfy@bYhB)@CpoW2>3*|W2eK`A;FCC>c{m*h@`D>z$8cidPIO~0>&N{oROau<;NIk*qG+e&?f=Z<|LW@h8##dlSmq1K z6_Ra?|6Q_n`plqV=!+TM3@3%vZ-<8|owa9HWTx*|)|q5u*|91I;mx#~n904Bmv>!T zc8bS#>V7q$9ov!MUZDtr**gMKL@A?l60g&Z3r(Iud1=b`>0U2zYy&Jt$K6;Afl#nuTtM! zT_5HeC!8;;@XyvBoVxY$ywfmCkkWr={}MdSOSi>K9A75)a=5DeD<&XHDI>zh*@rS&R*d(>Rh&sd=b;IjKeCM8jlC9wmIR%<|JRvIq&zUyJ}bMs=cfGNB6zfeXX1IeKMQ2@tSg2 zc;!^;qU!{#`R;no0b(f_2f{@g60SSCrJh@@i9TxDi5ZxAAOPAYEiF$IZ+*u zY1%9itRprYw_lPsFOsst`-%y6I5z42$rr)VgF&+VxR0I8vrMNfu`m`;%htf(t-j)4 zPAEmdgfkRpXLV7NmVWZ;2X+^QEjTHvbxepXd~*Riy)L){j@vcLw_2A5NU9G#{~)Z4 zmDWjKNR?DU5B)I*5#|#HRyRckf9hyeFt9A)Ma40YpC+-o`Wt&K$; zW&rb6Pm6V6ZjO5p18z#H92pTTR!q#7Nu~y4D1eMq(EoJey7fa7VH`Pt?IJ;{c|$b` zV?5#Zq@{k<$FVAn_eXkO%lnHN`B|DaQrePl4JiRvP!rvweLH04T3N|i%CJl_44vdr zf?|V(YvQ(4t5`}vEAeJkJLjF|1Ep|!jkj++(+|6N^$T=i2Kd6id5GU|yJpUK>X6Q+ z6QJKQ6DXw}-0 zz&&C+p!Vy))5M&~1;l82d=CI4u(_@3h@o1ppfkV(`EEI*{ig`5HXfP?81D@^RbvQzO_V zkmx!gRXX{{(Qg^dn%BLRbQzt)l->7 zz5a(eGM4CMF^MGOZ#T10<=4~4%Ny>N0z;%+hMtp(b01xhp%W27$>9%*GPMt9ti8`3)ePQ1ZR{CGP(e_x#2NUq43S1;-_FDn16-pb8G!Dns@MKkb<#Y=5~jEo)d`_Z?30`Siy$o^SrPL1;ORi`LcokN*J{}8dU?9tl=yk->QpC zjNi#;gon6xitV03gks*D4_a1i;=dTU#qgVP*_!hI(PCaeNtcfAdBZ>_Y-A(aq+L@t zt9usGM2};X;2eH%##R7nia!7n+W;VlK!$++W5}fO%(b)Sq<{$qM=oV@%L;dXYE}irBt$E-e_o5#vG^FOKcD=Hb8j&P2*wXDOMaB@6XdEJJ^oE16#0jOD zpy3k@Lf3Cfshms%21JrBO6PVxhJ@$vp2J^5R0@XdO(kuK%FIMJa)YFmX0-&C>B)RW zw2KL`X=VhoD_Yl~$JFutYLm_VfSsJFap=gDh%EqINwxp_dQaS9MH$SxSDn6=t! zPqGq{7P*K&&WcC`QVQSa1*i@_js;J!-0yaWmd&$h{&^M57f-N zk*d2KV?3)I(~>raAnqTMSvT}|h-`WvN&SA(RD+2Sn+6MZJ?pav*)w$x7bWGgsTUxi zY19tSp!qg`wJCt-E_H;+$W#a(zQg9>1Jv-&fF8b66XRP&&A=l+f!6eYR-M^ftPR1` zo9u6Gkqmv9kX=xu*eR_QTa7BBhO(O#VGkVJ$}(~S#=7{5%OHO};k^nyH!I(fZ%E6e z?=lliT+$2ojz6;Vh_Ou2W;2@1NnT&hD-m(7K!m6qBoBcz1r2T?`DkAE17c3b)B?V^wj1=+Q^8=_XqRrr{yc)czVC!+kk?kpz0fo}%w`(W zW;#*oEwQBGO5E=FT^tus@ewByPtJS1mm;8w%Y5TS>i^)iiF=|U7jl>qRJcNmx%W3g zN|uGEb-97GTC1EW18<9`pRHCFvZ1ON1Zf;cUexw6zVl5gOuh+qSgQjY^2kx8tCfVp z1&gE9I1OTyZMUTlSHt{p4Ru_l_hn?9@;sZBwE+{O@FP~?$0PTo;8lBP89d{9uEJ$r z`&}dVqUR3#Msfpv8|}xxSjR?1>RUizC>`umI6Z-!Ar+zwrEijuWxo)u8%ZGI!2JZG zedmYC+m-r+|D2?_UT*Ma>u?1c2ZO#*sgby;jE=HWlv-7nFtLYOI9>O*Lw&|TubQGE z-f81=Z%Ty%)(=2ER=3KHApN!ax*!i@oRK;?yka&}1dSIp+di7xhtMzJnZjndvMAZ; znZ$v3GTKobt{LJZG)!^4CCAo>9JrUktAz2zb1v{nlD)C`Gh;@QQfZ-)&@UCZGt8i2 zh+gkn=2HhKLH^OazI!F4PmH6txx!bkfcv5rjGV| z%A393*^a+rHs)e=Cc?U&esWAg4@MT?Dws&?#~q->&THs)Miv>G2e*&4%*HE_bLk;Q z&LlQS9`(~rQhdkA5+wtfUiDlDF3B0+iS0B;Lut>zY&6#W+#c-=uvn9{F&PkYeb!dX zb^JlS6Y%B;DaEV^vIv592&T_6aMQ{ z|2Y6v@Fn)?lQ@K>Kk(gd4}L*r);4wiA#wh%OeJE}<6pD$XXv@r*%kFIP+^994RxmU zL^^{Nk1tOtBy|nkbGsu7zB9bMpq)9QRm-f>&v`BsBhXh>tY*S(CaH_6Sb6s51BZ@& zNtAj5?IWEkJ4=Q;9*4RTVg$RyYCFG6`y_m?;d15wzZBYFHh_7|53`e3`G7z5D~QM8yu~d1SSt8W!9dvUp8+p8Bi6~ zL}OHO7S0)zKlaUDua78;i3eH!6i|gVp8#0(?&>P#+xhffo zImLRAxvW*rXmMi@rfZGX2;Oo;tg}EtE)^JT!DTSahb?T^^5?VoqBeDc(>9jUz()L# zmOff9^a;cepegdq{k6cmL)NA7h&n-JxETfFo69>tH6_CFxFHl@jwquTn;2%R{7WyF zv*XDtH;H$Bpzf-+4-3CwAs&?e(dJD)nWtZO>~c2eAAx6lkM5I% z^WM#>MO!c_8a~d+2y~Dybc@)<<0+_P_ceIr3Zs}0;MvdJ8(15Uzu{R13JSJJX0C=7 ziGEEu)>IzteYk4N@7(V;JgpT>6=A!!s}KU^NEza8;_V`=;1>}@gb7-PaWN9nrPpGf zFHPXTh=TdmYh6L+V1Cec0A!IB98jY{Yzi=xR+JY{s=}kW#9_{(cp5m*V27OOxaQhF z)nLo8fQO%`{Kr_zLDEyZlmmQ}FvtiU>EIojY79r_V;1dD%<<^OcRf=B!8W}#A9G^a zQA}YsV~;IUSS<^yyKkVNWlLmST)(Yu%&RUW63PPgHW#~-yyaw?$)@yEY@qpQl-9ya=! zjO$dnb7??fuywi8z6REYHcWd$j4YH{#r30LwPpt4 zd@h_YN@w^JPq05#`LeurkS&hE!9qXzrcEL>l8iMCCf?MJM3iD4SOV7YWj^0C ztsJ#PwUSR!)su~W%YeH?rYG`9d`!|@2LlZyANOf;?J z%~q((`$U10ZF953*Pi_4Uh3>-n%`RlIQ2KdtQHS_no{zCowxJzzqm0{c4m%{5n7iE zEVf37>+gZRcyRBikg$uKn@u9LOpd*M8*I`ZAW>3kUc(qdufPeN$nyQ-w;P$Yv2;O~ z1mEq~kZCQ*zYOFoZBfs#ASDHGCL%D4#>3*J-)J{7z(S9a{wd|$bl59yAe9v+MMg+A zTYn=Vc37p)c$zPZk8DYGgydCFAI;$osG1nOE#gZk5>@%#LgD-ek{*@0DH4xP4AglT zcW_z|gpRgPv~R(=}yR{ee-_46CwQ8zWnu=yS>Sy#80y#~BZK zJjalYi=fY%$ur|>E6hEtf{gdh@@n{W7E_%fEJZ#locA`%0cf5U6GwB>+)P#+cD)_B zCJxgV$$daALITBIZQ+mG4H!^PEAk!`OXC2WJ6~P-ZHeNOy$cu3o4-KnBr%|PUsPHj zDi3W2r8j%%&k|&do{PUnKW56*YpNQMEvQ?7b(`%UMD-x;O z_R~s8rNy+H6Ifz^)P7(@UkS(ftx0teCPW5Q1&*GmyY99Z``>b?_O`}QS#)pCW&YX? z@n>m#?BBu{z`%yO$JoKOahuWm_}8O~pSKjW0GPCIQr-!xDHOqtPRNm_Kyj~vrXS~{ zLWijxNSM6)@8-BL*mV33xCwYND(qGV{0(tfIWGnV3YTfdY^VoVlO4XO>UcOq`a~;# z^>ne(UkvAD$`MCn!g_1(uJG*$YL{Pb+E}zwNx%luk z)6ZcLacC|18~<;yyt}!=61x5fQGW7dUB(}=TWV}V^YOLOyqqjuq(Grli38Zf%hISP z`n3iutetO-XiY6;Cv!n%w&tT5q&8DhP;VB~yT_(&=GaVb4XWXTUDI?e4GmaQfEv!k|A!fmLox&EN@i6LywUR;ub zW_0}b^AKwynk>92$?94{sR{q2X3&H1DKLv1=`3&dvaGO^afS&UD#0`;n9Nrn8^%OA z#bTTTYk>XjU%@`d7;ibporo-9pMACT`-}R$s!Q&WQ{n;FUIe7b;mxMaE#4K!i#6jH zGb78P3}oT_-Jx{d_OqMoA%^lyh*@6wsH9=W?yvqKX;Pg=p!Kk^=lrMGz_J{K0`OuK zE~A-KrGj-_nlR#(`u-nx*#I}4_nz1OPGE)I~Q+AZwJzskWbOifo*gly8kjepoKHyCMyT4Cg20|Z9;jX zA=eZxLbAIIS%BJzPJptphk3fzNq>8q?wf#)EadqXh;F7fcM{(^%mGI};L+phXz{3R zec9^i2*Y-0FEpJWnndT?xc`^{vD(MAbY;=NoS(E)bz!cg6vOb+bBKS*{m-Agl_t{$ zYs`ybTWZzFwQhatvzQAvP~dUouhYrSjub0GZN=k@cmh|4xh2LzsSC|(f2*(mVqY%) zFIxJlj~M|0zEQ4}-m^SoOnrab9-5edr;IF^0hRbtBa;W&15jT%Rg z<1Ko=W!@t8z?>XqMak067>CFqNl2$Oz=WasEH3}0fHrs zD~$`{d{xykVXGP7F!k%m`fQfgzXRiP`8udwP|s*LeG#UTg*Ful!D5tmB~5sTIOv-0 z;inAGtdov?s@i#9TcJ!rA_g`!H3 zBIE2(V1X_+NxyO&%8S!TZeZfDHlwSF!6*sF~e`?DRDm@N~AaRtG zq4~{g`dng4Vhcwu{Y28X3`)OvsY60Ppr6bTwLJ2%y7!=HovL*cZRX_Aj93jBXvU>R<5sHot!FxOOB8ba>Do7)) z+2gb+;fIPU;r?d8@?n#u>+ihajAo{#Eg--j5BOesR3Mqbc-aBxh zT)JU+&1#(WFKs>Sj--ygi;K|$oERYmFkgWzS^?dnA=2W8{s<`CC4G?InWgFDqmRY0pLkjv1~V zgLfZgI-uO--oDMpz252C5*&0&vdZuiI|)Q;I(Zvl7tqpfF_ znl8e$)XKf(7^#7AN?`Kt#rkDD;IEiE?ZI0Dj6yipD(Mq&J<50mZ!0LJWmCmAOP(bN>Z6iUl&2^e(2WitXiBp}vb>ji~ zYS_&{^G8%;lwvr5EpoyDl7J3D=iGc( z+IQnRpJ7xx1x?m=Xru?cNsB4M{4PNiIqLCF6yoBi5mFf9MC6zm6jTxDQ|MC|U|QyG zesTBLBDwD49QHQNW8(hrES#tJpDc=S;8)C^8mdJT7gr*r91Q?Id_iiR9EwP;jQC-8 zb!tTJkE7|2N3=Yw0A~bB+Sg3BlPL=rg}dyqRzL6uw$gPqh3_`qIi$`rFL~=>I~I31 zFD#1Y!BKbV*b@@=6F^Mt9Lz4nAQxG4=&qfd=%#*?9%(a_sue~Ni-o0pXhfJL@ZZLa zto4o-os0FQi^xZvW~Y%TU*18NK6i(`Nl8P{LKL(aL7WsBnp$>g^Z_HTUMlNau^h`A zSDVDb;sH78ag9VhUPMoQ9k=aX`ZP78XjPY7Q?EkBLW!6{WUOhV-KbLe(6E44`pjwm_X{+lobqNtU%5RvuFRkwEyDNWs$d)zl*d#HWdvURYLjB2byz_Te65T8}cP)r;c>X`r|6Aa>a`@`#6E zzXZeN>!ye)L zH648!^~dh?g#cHhGK_?9I?J;)jy*yK}w(Snf#8jfJR~M z$^T+KPah}(H$KG8+}8(#1E?WK> zQ>z1K8QWdL5^F4}WW8PvL~{@dO|r>8mFeUc;0C`^LfH!M4;+>1Dy$_=0033{cP2Jpigd#`yhQL@=~y)l>4jqmItLGzg5%t;5JXeJ zp?*2qFNK(s!%gKH6c9e4cHCC*^TW`=yF$HeRpflfPE}-LFiPT6Yibm%m{A>yrB(2I zsNBc?0Y4cy%<0Jin42GBb98_AWf8}m(Sb1$sAJStULJ@M`&sw4hUlhFRx<**4=$vb zGKil`<-C!30jU%dHE-?sI#bD#=`|v|O>t#DP^Msi=a97I65C~dgxVG2HMpaRzJ?$+ z)d*+p$-mNzc-u5OTD!!D(7^G)2m93Xw;zMt`#fDkOP6ENR z$`5REQf=yu9*vt4bu|z1P!yzcP^X2?e_;GH6O(YcXL7}736Y2nsASR^4(Pb?v_>%j z$I1drVPL}_5acd9)Tu18^QBvbLeMSv#Lv$1B1_MKu`Qec5Vct7_qX12lVnqp7sG!2 zbP!#^=%;KR(e&_0Ozkk%!>y)_Zv!F>qokJaRQZ4_tUd}It*iWj$yu>` zA~DxHw!30zhs^ZS4Xbw+aVe;=@l09REXa^)jLSrd_>;Q304iB}#;_iiOQ0XKP=#P) zyl$3)D8P3Uu|f^Ah0crHN%fR8C}hUW9w|9TQ^UqVIx6sPu5e#Wm z{Mi3Soh1lr!V9Qp;Z(r16Xa_U<|wa~0vd-68?L6bS@Q@A3PX!K;B zc9LW7>fgQX=#h&1^7coXp907ys38(l5;^fx098`hD9^MNZW*RACMAzkm>q<@ByWZO zxd{bIQ%UFcB&;_(D$uzPX?8IEg46lTW} zW`98+QLJwEkHewzTfrKZKhC>vL@QKs+scz?u8EL6>C-cZTS$J7hm_{IN`s&^2&K|}T@_(_>2 zd49op%oEAmVxZa9{a5;$h`rEpS}|i znlT`Dqlt6d!8xhH9KG;BZ52ZM6uP&IEtcHjqoeBe5C~L*;_5S0XU)_gU@BK@sd%z3 z=^$mAORe3Xz=9adM0u=wTDQ?oLWHSczK4IkyH!~XX6(()Wk!daqVZ`yks>zao_1~@ z8cx%bTu*e<@o=m(=OJnv{;>;Ou~QS%c<*D~AzBK6R=87j%y1^4m{=Gu?W3m7ZvvJe za0Kd-d*rRu`5e}_yJrL3wsMoH`}Lh7@9&_*PZM_dP@Se&H{;DFtb0gjPtU+t-(zR) zVekR|K(AHE$AM+1zx71PG!OAM-pEuF^ikTqZStS=(e-{Hm0ImTW)LbWUv@<;*?mY|XkzjKS4?CR? z+b_rqVe)FzbI?7Ce?ODB)sCa=%KQU%AuCV;+o%flMDWR)a(v$ zAeiywOay=h7+F4m#mwo_d*6)sc(U|#4))LVi}Qt;5IQYz z=vTb}agc#ML}#QqtVZsoC5D_}WE^_>eXEKA6;U2U$g@es^dG;CN4HfPh8)}U0xIh1> zZBqMFP*UG#=lj73dm#CjG{lXamijMWdK>-|KrK8_STc&L|HnQQURwjmM^kB@;A8Hr zvbty6+>LuLx80AT-WSO{Ws~^4eu%glU)=yd_yFTdBZXf^sel;RYl9ZQ>15$xRgFY( z;oG0D1MdOkv`(+Im4xHM4_tDs#m|Nd4kaE&gMLc^X{m{TFzd8kE9#g3rmZ&{Y&&gy zyJx?&8U@uaS0usDny@Uc<9lK5VMtC+) zcK=;*6J-tcrW^8I^7&Z|W6~sDcNgbDKV<+Bs2LqB{O7R*zw4PgRuW);1r-lO;5MS9 zdONj{J!lOvr28|H_Aw|34#|4iBPozcHGt7<<91c4S=*wtof%;z02FbhcawLANiV0= zmJ$(n!5~2boN%dz)d-?_!Gk8*JDXnV(JBoh`I66A=7wT)>_6PX)7k9dDQDKQsdEETlv~@ z-=~#1NaGq&tm6LGOY@}Q$5qT%0(8#;`vrv3CmufY8Bko8s@UY=^qr$5Pt!v*#D2!J zm-uZ}|Hm<8)HXhXIFI;rMhvdFu3eZ2`RxTsLI>a6c^MODK4y&OAHN61{p^oW36=po zLyh6yr)A9f@n6Y`jxNp+6cSuC#tLdF?lWrnU5YG}m6)PCbal%BJE*qYI91=bZR zmS2jo^ym_tgi#_m5fntorkKN5JEzw}=~+f!k)lIL`D85#GLI6kN<-RRbIZ&S`(>5X z@K^u=p*W5N8P{8!A1MYOOzZ!k{!0tW`)>kyztAWUGBog~fejF6+*e!HIdZYX(?S0) zcB?B7I3z+0axAq3oWJxO#_KL0Ti2w4YO$QXIt_0kRJkV@3)OgW8!5?fIq*u8e?)RLD3cXrs*pjRCSi;os z)-X6~Ow#xt-HoO~6KEKDgHgE!A;q(%r2W*6)1i@Db7>?pjYz-GBdFCdN`h;B`j?h+ zd>t1G)%Vayb!C>sAwnWablF=rv2_hh(he34BBDNNW6XeBVfd5dph4@B$(U7faEAxb zsM}vf{Pk>DWZ;8doEkiBl?~3d%=<-PjtV?=5S+A~aEXFv!hGat*#4d1Zur^PbL@ePbqsDN& zaw?4x@VJgytpao88R?aVC<6Vn1uut;0*T*Oq`GO5LY^k@4Wi<+?U7_7c`LC86YQkW z4$AbAHEPZC^BYhnHdkodN%sgVjK^qO_Fxu(kwzf++g@R8@0Ob{qK1ksxiJYkloiT( zef76&_c|F)dJCGp3#J~7rzoP~FWO*p{jwc4_!=&>1uVT6oq_HTnlzzBM2(^(z|kqX z9FoUN>D#6JaC3%O7#dNEqc>8iFxF^6T)OM-4eyhm*?3Wb-C`8wihvz-kQ|i4UukS4 z<^aa}wfEzQKMinP*b9Z2q+T~-ID}{W%iyldjCh6N`wm#O1Y_2J@lN#XV> zwN-0&2PR;Z^_e$L3+oFR2M~>CR`CQ&W~VH&o~+S_=hKOy_OaZQ%y>3pRM5tt5R5)o z`)i9C3BMesi$PYN@*W#ODVPG;#a?cmlz}n~cY`>*CAal#jTgz6d7>^~|g1D-L`Us8V-IF6v(LN`vcUcLWMo=fWUH} z`SZBh_x$a%1@a!Zt>rG1r_qB{fb7WlX)|9v<0kmj8?ViNC3@l`4HWh?h7Wl}44Q~D zZ)JO2I-YjY{StQ%KU?RY+o0qVXM(P}TWp^*+@pWEi@syLwqom?z%;O(C7Q;)_M)b6 z-GQcqvjrk*E(ALnaR#C|g;W&?0-$6s=~UfE z#-4>efb7NU_IT%3dE4`F{vO{Gr?*zPfPxPemuSf{2QH){o~dmyN2#D<1bBEg{=(|x zow=n@ASgYN0W?pK>mFw9x9{N~w1_-|n%AR0IH``D#Pfzm_>tJQNOdvxc=>>|=w|GJ zjs7R_j=87jZruyHR$n-b4pJOolgcXaRqjxwPe8Ds}BkL>?D#S60uH^C4fcr0Cb!bwT>w?ylN7r z8y|5idVGN6MBH+QSAx!kDWVKCuf5~1Onu~+^&XKs=q+3%(`TNIKZ745)nOmVo(LS zgs^LvEn!ZJRL>trO3^ZQw&zIIlkN2+?dhO$Dw_;LTE@HYX7Ob4#LB!;ZO(AZ12R-b zPzw4Ft>t|ypt*?E91XD3tonG2cS|k^7v3-E;`3;BNNXYha zC^~L;Ckog%7U}_qm=-Zeo$f+u=pE`AovUn{U`ps{5OU4QHZpfn;14XtW z?{|XP%+Q0BFwhQ89ei^2YV%2A)TQ=MVarwhHl8uWz4Dm87Pq89IC!}WdQ~V#DX;c_ zrea=gw(qHgR~x)4l;9Wdn&9#Pk_tf$=<mXA#AeM_4x}H|t7d!^PNHSk@fqNqUm+Ik81;Ebi zZ3CTzZ4T83^FeqL{ix4&PQAkEo47wM5S)VK+E916T333qsGVcgAA z>q_XsN)((AYkrWeI-6^@Z(Ixae;DIuafFjK4Shd=m$H=FAG2pln6mvdRzsOE1*i4u zFL6rXa=7C4UUcd!?2d@7TQjHo(4>;h2mn&X9N~?yw+@mMhp23QVa_d+!Lwhf9BZZ% zC6O?7Q*VTHf-Ce8_JJH>12(4zCUqbjv%Et>f{;JH3LTg}ClFt2;X!q8SmxoFOaPM- zq>jNfNTka}jR5K-6Lp^2<=l4DA%!Nh$IJZ1XZ;gq#cr>eK1Q+7%4#mBECDh^JfM`t zFqcu|lF{D$7gBf>A<8MA5XoJ&duwr$)WbMeVZVS zS9oHRDFgnBwS9t3GU`O4FHRJrA{dZwA z7w%084DFyT1_D)Cv{B}USOVf+<-vtcwEj@ukiYTxr7w?UkhrcQs&Lc|m_5!c1W{zJ zLNbqac?F`z1?3;f$LjHi&*xnpw4*{`9Kl^I_Nj{uBICT)OgtmQIqarU>!`9G?$+WL z=B|)5#=W3~^ih78R?Ad9Sl4dS83DA2Or+J~lg1BXe$s$M?|A$^}KYe1El#+IVn ze-ekD)^3vq(Mqiw#FEXZ@&h z2h^+tipy-M(1}q%r%n~4NCF&{XkyXUamOV{ivf*KE3Mvw8nD|&0kG2Xp@~hjnGE=b zJ`DOT5b#*o4HD-uF;kcB;g_!*6Kl%wR`f9z<{$isd!Ads20y%zU!{rQV_ttAN)6cU zS$;H&t8n|WV7;&7Hsa@}DSF(zrOUIM7sWn#;j3TLw~=>?qunFM0!f{8M{Kf54W+X# zFoerp^dIaQ1+JU^P0W|dZ@gjgr%#)HtD3;@-;z)_k+W;o`g8 zcapw7UR>e`dp0^rkG)@D;3Ue|(aq@D27cF{=j(r9$JSMOMw4U= z1udCvwc$yS{8lf32H_Q@t+(W$H~C? zFX(oTiPMNx-Ud&3Jf&ym6uZC9(i>M{6?|D;MssFPDi?-3RB=bANBgZ1AI)R-n*t(+ zCq^@XMd zdaDx-oF?hd=3BoZf`0XRvefXVdow^qTpyECra6xr2NCcSc6cTu@c~#=iicL#^Eh#G z3ts#Eji6OdNAH8C9Hf0LQgLYme$oV$cPmq_I1}s`iB&e9Vnfw6MmFQ*_CN#U_NbLO z67D$pI{MZXueh!c6-y=@MP)mS&9GqH1*|S=T(LLXg6OEk{~AfeKmAwb1$)&-<$nZa zVFKR}!8T78FT7Y9*7FoSSVm@#2d$n;!n5eSxn20Z05En3KWF+K;$I3QmB2qYXW5-d zMt$4<7TyjO{8T*(PRFe54+Ob~It75+%aR4n$JI2FHbMARX6fe|L|3oWy=fX)}I#b$HQ8vq(+1c5Y*yUy9hIY$-+aRj8 zEsW*fIa2(eq^zLyojVgT`x#4U*Ie4~8C-HpwtonUjvjA=c`At&3bx!fF2gWm-f(W_DcC)`1o9-27Jzy{IJP~ zzohKq&tcLNI5=~~3W@$PPCL+x)v~uG(|d&UqOQdii`|bdt#T;(k{Lp z2j*`MMaM~owS+~_<41NdZ|UeYljgDG9>8>YuRw+qET@gWeQDh291%RX&_@&&&cX zE$?;vi>WGzR0dOEKjMw@Th#WDysF&uc@VtImL@Wx&Gcr>mZphS_+c<=&Tpyl9PeZIiWRjmnSs4 z)J*4`P#j-~AvRcm3aUblb+OD^C?LYBe$cQg2NmrL zWd}d|?`b83LXSAu>JYt}zk#fvl4c~`G6EBdGQwL*uwgTppU#1k_YU^|?9Y1tfqi|_ zeQUhb^?2Zf9>}uAz#7oF{b+Zrw6IB1@p&VsSsQrp&UkT9g}vY;1KHLqy*{`1ne}h& z(EpQc)+)Gyad-Nq#QSz-ll$bEQxIqVsY8|S{kc%G0XlAwy z3-3n>YnAZ#l}tfrRXAji7Li7D;se~tE>&`o;lRIT@N)YzNR~j<+gTVF@VF}N3!;5v z<8=D!UdV^sW|rj@49>6%-jqo4dY&KD(pQ^^rDJGVh(u`UT-i*HvF3KYSa+Q)_pKT%-uc933MY{7zxoECWcGPV44M zVkc>_(M*pcAW>;uarsQoAaHdfLwfmiyTFC4E>tDmiiyyuq~)+YNC%Jo3N4!yhRP;S z2RB`)>mV6n*Yek&WInXixL=_kfKOjVhr;h+z$#w{oRQLPxF$1?UZ{PK-BDgdjb&=B1$i7#hD*e!FC^o6E9gd&WQ}A)&$rs)3syUww;b`+eyc^opf@?wr$(C?T+n^ZTxw@_dnYlV;`(lt5)rr*Q^)G zT}Mysq`b~pzS#gF6>a*Hk3?mIgUHKqyKZ5^7c z7|J`woR(?umLXfe+%Qq4;k#|pT>8lZ$#Mw#c2i|qi}(AB6prPn>vy| zUy+oO9)X353cX7;>t*Mx`6xLe&l~{#Hx02GaMqx7+4Udy_V>>$AKA`W%V*|lsuI3T zJr{4ER&4}}`-4N=gcUw~I3QAdgD;nL;7PQlU!D``!4fc17xD1S0RxtGreE$}&#u+nuf~tEzY-Gmhn^yuceas)%bI{-@4A$Ozh7 zHrATQufL$nQB^IS=timLdCUD!jgw<19A%RB>A{M{9u83GMdtf|U%}anu9}_H4Rf#} zZ{k09~= z>8|@sZQ7nK$O6iQSnMEO%FdA^Y*5eTiqb3WhVWI2I2wQ3rrTCBX$+aa*mMN1W23ol zczEcC18PT5oHS~+*E{Cq2Xf0!`CI7&=H629VqA z64hU@_NneU49B5RT0Ql0Y{f9+ns<|`xlC`wo8^Wa+jD4sxEGXxoVJejL9HEDf=uT; zBX+haXNeRt?t`q%ng{0^#GHlXoLk$vGMt9p*WBJYyyv==iO1?Ev;IITufrMx@5qbX%BbGn znhJWCoQbIn3|SrsIzDGwat;)%FBAfh4Q`)mvKy)}x|UdV9B4JJeXAb!xi`mo&;AwW zM_>Hc)NlxFy;fXG2T{x9Q66U70w(Speg-n8W$u3bm+=CPXsYzV(Mmi*7?3sSJ_xr- z;pzK!J#7h?1eps!>#%M22j;*5%*9LQ~rZ~yFWsms+J{@?q7*Fn?e4OJFDc3a<&tI zba-3P$M`c;*#j;14TN_Ll#xbg39lK`ohpB{BWu$*mALWDmFghk?YU)!O5u}Z_sc2G z-vnmtJw`yS=0RN-3Boh-d7u-uTBtlAUo^S|a05s>9$!LUWOc86R1WA>*p@8`f!_W8I=rSpG5Jwqdyez5FkdEJ> zEN793iSyQ<^P94Sbo7_zI2l}85pNlCTOd%i2W>NM25~VBGo&==O?4J*>NEL+x2`~_ zJ1i!q62`5Cv}#rX#i3Lu5g!~5BC$V*tN#}F0zzd~ARCL|1R#K{B4S}1pm`L0I&7DF zbvlWs=7Ka|Ec!8PDBA=(ZTwF(ou#Y)f87!x3h||O*kH)N44`Zg(cKUwBBLG6d0%{8SB9yLJ^Y?G9O#35-p z#e5aM0UEIw^aW`vT%(Yj9+m34L2TO<>n}xbJn-@ri(`?%fqs6L!}jG(NNTF9J8)|Q z37XlT^tpn^+r;9PcZQ-9du>{gs;Y@nS^FzAABv(g$*0W_$5i;_Zr>N5+Wr#V=V85_ zydL_&QWg19e9->9``VjuoCzGUjzw)*L!E=yfWKex{->A8w8G9`QfW?3Hl02g0VA2b z4mEsnXhToU!c2fE~I8o5q!~64?``rmQ1c*K7Y)!S;=fKj6|GZ z)6~j(9b)D%#5Ph`Gv$=QF5sw*iS^ZS>*j)`iW681)S9swaqH=g5kP+T;iWqzmi^l% z6CP#VzG-ecv=^7A_fAbS_V+fq&{gi$1avf8V9V8Iw+v1UCv=o4V9R&M}$YBvr&*XM2!cXY=%`c>RPKHLhOJ8mfr6J=)& z*(CQXrzs|F$Ip|KZ1X6JH$pIt+oO+(E@^*+r9#Uqs_XE%(tG