Your message dated Sat, 29 Aug 2015 15:47:06 +0000 with message-id <E1ZViLS-0007ti-Ky@franck.debian.org> and subject line Bug#788999: fixed in glibc 2.19-18+deb8u1 has caused the Debian Bug report #788999, regarding libzmq3 and libc6's 2.19-9 libpthread problems with destroying mutexes to be marked as done. This means that you claim that the problem has been dealt with. If this is not the case it is now your responsibility to reopen the Bug report if necessary, and/or fix the problem forthwith. (NB: If you are a system administrator and have no idea what this message is talking about, this may indicate a serious mail system misconfiguration somewhere. Please contact owner@bugs.debian.org immediately.) -- 788999: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=788999 Debian Bug Tracking System Contact owner@bugs.debian.org with problems
--- Begin Message ---
- To: submit@bugs.debian.org
- Subject: libzmq3 and libc6's 2.19-9 libpthread problems with destroying mutexes
- From: Ildar Kindibulatov <ildar.kindibulatov@gmail.com>
- Date: Mon, 25 Aug 2014 13:39:17 +0600
- Message-id: <CAO9WKEZ+w_hqHGk_XyCRefSV29jHjbX_HjNYrBc7L13kFQLZag@mail.gmail.com>
OAO NPP "Polygon" http://www.plgn.ru
Package: libc6
Version: 2.19-9
Severity: important
Tags: jessie
Source: glibc
After manual rebuilding libmzq3 package tests/test_conflate doesnt pass with error "Device or resource busy (mutex.hpp:94)" on jessie amd64 installation. Manual building from sources from http://zeromq.org/ gave the same result.
Succesfull test running has been achieved only through using libpthread-2.19.so manually built http://ftp.gnu.org/gnu/glibc/glibc-2.19.tar.xz going with LD_LIBRARY_PATH setting to temporary path. Same positive result was achieved with libpthread-2.13.so from ftp://ftp.ru.debian.org/debian/pool/main/e/eglibc/libc6_2.13-38+deb7u2_amd64.deb. At the same time test_conflate failed with libpthread-2.19.so built by dpkg-buildpackage retrieved by "apt-get source" from debian.org repository.
Here's example where i've used for better visual custom test_conflate.cpp and mutex.hpp:
kif@nto-202:~/wrk/zmq/root/lib/x86_64-linux-gnu$ ln -s libpthread-2.19.so libpthread.so.0kif@nto-202:~/wrk/zmq/root/lib/x86_64-linux-gnu$ ls -l
total 4492
-rwxr-xr-x 1 kif kif 131107 May 27 01:24 libpthread-2.13.so ---- from libc6_2.13-38+deb7u2_amd64.deb
-rwxr-xr-x 1 kif kif 137439 Aug 25 11:43 libpthread-2.19p.so ---- from package built by dpkg-buildpackage from repository sources
-rwxr-xr-x 1 kif kif 137439 Aug 22 17:41 libpthread-2.19.so ---- from /lib/x86_64-linux-gnu from libc6
-rwxr-xr-x 1 kif kif 792677 Aug 25 09:07 libpthread-2.19s.so ---- manually built from sources from gnu.org
lrwxrwxrwx 1 kif kif 18 Aug 25 13:06 libpthread.so.0 -> libpthread-2.19.so
lrwxrwxrwx 1 kif kif 15 Aug 25 11:56 libzmq.so -> libzmq.so.3.1.0
lrwxrwxrwx 1 kif kif 15 Aug 25 11:56 libzmq.so.3 -> libzmq.so.3.1.0
-rwxr-xr-x 1 kif kif 3390068 Aug 25 11:56 libzmq.so.3.1.0 ---- built with custom mutex.hpp for better visual
kif@nto-202:~/wrk/zmq/zeromq-4.0.4/tests/.libs$ export LD_LIBRARY_PATH=/home/kif/wrk/zmq/root/lib/x86_64-linux-gnu/ ; ldd test_conflate ; unset LD_LIBRARY_PATH
linux-vdso.so.1 (0x00007fff09dfe000)
libzmq.so.3 => /home/kif/wrk/zmq/root/lib/x86_64-linux-gnu/libzmq.so.3 (0x00007f96be047000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f96bde2b000)
libpthread.so.0 => /home/kif/wrk/zmq/root/lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f96bdc0d000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f96bd902000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f96bd601000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f96bd3ea000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f96bd041000)
/lib64/ld-linux-x86-64.so.2 (0x00007f96be29a000)
kif@nto-202:~/wrk/zmq/zeromq-4.0.4/tests/.libs$ export LD_LIBRARY_PATH=/home/kif/wrk/zmq/root/lib/x86_64-linux-gnu/ ; ./test_conflate ; unset LD_LIBRARY_PATH
sent
sent
sent
sent
sent
sent
sent
sent
sent
sent
sent
sent
sent
sent
sent
sent
sent
sent
sent
sent
recieved
closed inbound
closed outbound
-------
pthread_mutex_destroy (&mutex) returned 16, errno: 156384765
Device or resource busy (mutex.hpp:94)
-------Aborted
kif@nto-202:~/wrk/zmq/zeromq-4.0.4/tests/.libs$
Changing sy
kif@nto-202:~/wrk/zmq/root/lib/x86_64-linux-gnu$ ls -l
total 4492
-rwxr-xr-x 1 kif kif 131107 May 27 01:24 libpthread-2.13.so
-rwxr-xr-x 1 kif kif 137439 Aug 25 11:43 libpthread-2.19p.so
-rwxr-xr-x 1 kif kif 137439 Aug 22 17:41 libpthread-2.19.so
-rwxr-xr-x 1 kif kif 792677 Aug 25 09:07 libpthread-2.19s.so
lrwxrwxrwx 1 kif kif 18 Aug 25 13:06 libpthread.so.0 -> libpthread-2.19.so
lrwxrwxrwx 1 kif kif 15 Aug 25 11:56 libzmq.so -> libzmq.so.3.1.0
lrwxrwxrwx 1 kif kif 15 Aug 25 11:56 libzmq.so.3 -> libzmq.so.3.1.0
-rwxr-xr-x 1 kif kif 3390068 Aug 25 11:56 libzmq.so.3.1.0
kif@nto-202:~/wrk/zmq/root/lib/x86_64-linux-gnu$ rm libpthread.so.0
kif@nto-202:~/wrk/zmq/root/lib/x86_64-linux-gnu$ ln -s libpthread-2.19s.so libpthread.so.0
kif@nto-202:~/wrk/zmq/zeromq-4.0.4/tests/.libs$ export LD_LIBRARY_PATH=/home/kif/wrk/zmq/root/lib/x86_64-linux-gnu/ ; ldd test_conflate ; unset LD_LIBRARY_PATH
linux-vdso.so.1 (0x00007fff409fe000)
libzmq.so.3 => /home/kif/wrk/zmq/root/lib/x86_64-linux-gnu/libzmq.so.3 (0x00007f1acc521000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f1acc305000)
libpthread.so.0 => /home/kif/wrk/zmq/root/lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f1acc0e6000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f1acbddb000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f1acbada000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f1acb8c3000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f1acb51a000)
/lib64/ld-linux-x86-64.so.2 (0x00007f1acc774000)
kif@nto-202:~/wrk/zmq/zeromq-4.0.4/tests/.libs$
kif@nto-202:~/wrk/zmq/zeromq-4.0.4/tests/.libs$ export LD_LIBRARY_PATH=/home/kif/wrk/zmq/root/lib/x86_64-linux-gnu/ ; ./test_conflate ; unset LD_LIBRARY_PATH
sent
sent
sent
sent
sent
sent
sent
sent
sent
sent
sent
sent
sent
sent
sent
sent
sent
sent
sent
sent
recieved
closed inbound
closed outbound
class destroyed
kif@nto-202:~/wrk/zmq/zeromq-4.0.4/tests/.libs$
And so on: with symlink set on libpthread-2.13.so it works too, but with libpthread-2.19p.so package built from debian repository doesn't.
mutex.hpp and test_comflate applied.
--
ildar./* Copyright (c) 2007-2013 Contributors as noted in the AUTHORS file This file is part of 0MQ. 0MQ is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. 0MQ is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #ifndef __ZMQ_MUTEX_HPP_INCLUDED__ #define __ZMQ_MUTEX_HPP_INCLUDED__ #include "platform.hpp" #include "err.hpp" // Mutex class encapsulates OS mutex in a platform-independent way. #ifdef ZMQ_HAVE_WINDOWS #include "windows.hpp" namespace zmq { class mutex_t { public: inline mutex_t () { InitializeCriticalSection (&cs); } inline ~mutex_t () { DeleteCriticalSection (&cs); } inline void lock () { EnterCriticalSection (&cs); } inline bool try_lock () { return (TryEnterCriticalSection (&cs)) ? true : false; } inline void unlock () { LeaveCriticalSection (&cs); } private: CRITICAL_SECTION cs; // Disable copy construction and assignment. mutex_t (const mutex_t&); void operator = (const mutex_t&); }; } #else #include <pthread.h> namespace zmq { class mutex_t { public: inline mutex_t () { int rc = pthread_mutex_init (&mutex, NULL); posix_assert (rc); } inline ~mutex_t () { int rc = pthread_mutex_destroy (&mutex); if (rc) printf("-------\npthread_mutex_destroy (&mutex) returned %d, errno: %d\n-------", rc, errno); posix_assert (rc); } inline void lock () { int rc = pthread_mutex_lock (&mutex); posix_assert (rc); } inline bool try_lock () { int rc = pthread_mutex_trylock (&mutex); if (rc == EBUSY) return false; posix_assert (rc); return true; } inline void unlock () { int rc = pthread_mutex_unlock (&mutex); posix_assert (rc); } private: pthread_mutex_t mutex; // Disable copy construction and assignment. mutex_t (const mutex_t&); const mutex_t &operator = (const mutex_t&); }; } #endif namespace zmq { struct scoped_lock_t { scoped_lock_t (mutex_t& mutex_) : mutex (mutex_) { mutex.lock (); } ~scoped_lock_t () { mutex.unlock (); } private: mutex_t& mutex; // Disable copy construction and assignment. scoped_lock_t (const scoped_lock_t&); const scoped_lock_t &operator = (const scoped_lock_t&); }; } #endif/* Copyright (c) 2007-2013 Contributors as noted in the AUTHORS file This file is part of 0MQ. 0MQ is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. 0MQ is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include "testutil.hpp" int main (int argc, char *argv []) { const char *bind_to = "tcp://127.0.0.1:5555"; int rc; void* ctx = zmq_init (1); assert (ctx); void* s_in = zmq_socket (ctx, ZMQ_PULL); assert (s_in); int conflate = 1; rc = zmq_setsockopt (s_in, ZMQ_CONFLATE, &conflate, sizeof(conflate)); assert (rc == 0); rc = zmq_bind (s_in, bind_to); assert (rc == 0); void* s_out = zmq_socket (ctx, ZMQ_PUSH); assert (s_out); rc = zmq_connect (s_out, bind_to); assert (rc == 0); int message_count = 20; for (int j = 0; j < message_count; ++j) { rc = zmq_send(s_out, (void*)&j, sizeof(int), 0); if (rc < 0) { printf ("error in zmq_sendmsg: %s\n", zmq_strerror (errno)); return -1; } puts("sent"); } msleep (SETTLE_TIME); int payload_recved = 0; rc = zmq_recv (s_in, (void*)&payload_recved, sizeof(int), 0); puts("recieved"); assert (rc > 0); assert (payload_recved == message_count - 1); rc = zmq_close (s_in); assert (rc == 0); puts("closed inbound"); rc = zmq_close (s_out); assert (rc == 0); puts("closed outbound"); rc = zmq_term (ctx); assert (rc == 0); puts("class destroyed"); return 0; }
--- End Message ---
--- Begin Message ---
- To: 788999-close@bugs.debian.org
- Subject: Bug#788999: fixed in glibc 2.19-18+deb8u1
- From: Aurelien Jarno <aurel32@debian.org>
- Date: Sat, 29 Aug 2015 15:47:06 +0000
- Message-id: <E1ZViLS-0007ti-Ky@franck.debian.org>
Source: glibc Source-Version: 2.19-18+deb8u1 We believe that the bug you reported is fixed in the latest version of glibc, which is due to be installed in the Debian FTP archive. A summary of the changes between this version and the previous one is attached. Thank you for reporting the bug, which will now be closed. If you have further comments please address them to 788999@bugs.debian.org, and the maintainer will reopen the bug report if appropriate. Debian distribution maintenance software pp. Aurelien Jarno <aurel32@debian.org> (supplier of updated glibc package) (This message was generated automatically at their request; if you believe that there is a problem with it please contact the archive administrators by mailing ftpmaster@ftp-master.debian.org) -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Format: 1.8 Date: Sat, 29 Aug 2015 10:56:31 +0200 Source: glibc Binary: libc-bin libc-dev-bin glibc-doc glibc-source locales locales-all nscd multiarch-support libc6 libc6-dev libc6-dbg libc6-pic libc6-udeb libc6.1 libc6.1-dev libc6.1-dbg libc6.1-pic libc6.1-udeb libc0.3 libc0.3-dev libc0.3-dbg libc0.3-pic libc0.3-udeb libc0.1 libc0.1-dev libc0.1-dbg libc0.1-pic libc0.1-udeb libc6-i386 libc6-dev-i386 libc6-sparc libc6-dev-sparc libc6-sparc64 libc6-dev-sparc64 libc6-s390 libc6-dev-s390 libc6-amd64 libc6-dev-amd64 libc6-powerpc libc6-dev-powerpc libc6-ppc64 libc6-dev-ppc64 libc6-mips32 libc6-dev-mips32 libc6-mipsn32 libc6-dev-mipsn32 libc6-mips64 libc6-dev-mips64 libc0.1-i386 libc0.1-dev-i386 libc6-x32 libc6-dev-x32 libc6-i686 libc6-xen libc0.1-i686 libc0.3-i686 libc0.3-xen libc6.1-alphaev67 libc6-loongson2f libnss-dns-udeb libnss-files-udeb Architecture: source all amd64 Version: 2.19-18+deb8u1 Distribution: stable Urgency: medium Maintainer: Aurelien Jarno <aurel32@debian.org> Changed-By: Aurelien Jarno <aurel32@debian.org> Description: glibc-doc - GNU C Library: Documentation glibc-source - GNU C Library: sources libc-bin - GNU C Library: Binaries libc-dev-bin - GNU C Library: Development binaries libc0.1 - GNU C Library: Shared libraries libc0.1-dbg - GNU C Library: detached debugging symbols libc0.1-dev - GNU C Library: Development Libraries and Header Files libc0.1-dev-i386 - GNU C Library: 32bit development libraries for AMD64 libc0.1-i386 - GNU C Library: 32bit shared libraries for AMD64 libc0.1-i686 - GNU C Library: Shared libraries [i686 optimized] libc0.1-pic - GNU C Library: PIC archive library libc0.1-udeb - GNU C Library: Shared libraries - udeb (udeb) libc0.3 - GNU C Library: Shared libraries libc0.3-dbg - GNU C Library: detached debugging symbols libc0.3-dev - GNU C Library: Development Libraries and Header Files libc0.3-i686 - GNU C Library: Shared libraries [i686 optimized] libc0.3-pic - GNU C Library: PIC archive library libc0.3-udeb - GNU C Library: Shared libraries - udeb (udeb) libc0.3-xen - GNU C Library: Shared libraries [Xen version] libc6 - GNU C Library: Shared libraries libc6-amd64 - GNU C Library: 64bit Shared libraries for AMD64 libc6-dbg - GNU C Library: detached debugging symbols libc6-dev - GNU C Library: Development Libraries and Header Files libc6-dev-amd64 - GNU C Library: 64bit Development Libraries for AMD64 libc6-dev-i386 - GNU C Library: 32-bit development libraries for AMD64 libc6-dev-mips32 - GNU C Library: o32 Development Libraries for MIPS libc6-dev-mips64 - GNU C Library: 64bit Development Libraries for MIPS64 libc6-dev-mipsn32 - GNU C Library: n32 Development Libraries for MIPS64 libc6-dev-powerpc - GNU C Library: 32bit powerpc development libraries for ppc64 libc6-dev-ppc64 - GNU C Library: 64bit Development Libraries for PowerPC64 libc6-dev-s390 - GNU C Library: 32bit Development Libraries for IBM zSeries libc6-dev-sparc - GNU C Library: 32bit Development Libraries for SPARC libc6-dev-sparc64 - GNU C Library: 64bit Development Libraries for UltraSPARC libc6-dev-x32 - GNU C Library: X32 ABI Development Libraries for AMD64 libc6-i386 - GNU C Library: 32-bit shared libraries for AMD64 libc6-i686 - GNU C Library: Shared libraries [i686 optimized] libc6-loongson2f - GNU C Library: Shared libraries (Loongson 2F optimized) libc6-mips32 - GNU C Library: o32 Shared libraries for MIPS libc6-mips64 - GNU C Library: 64bit Shared libraries for MIPS64 libc6-mipsn32 - GNU C Library: n32 Shared libraries for MIPS64 libc6-pic - GNU C Library: PIC archive library libc6-powerpc - GNU C Library: 32bit powerpc shared libraries for ppc64 libc6-ppc64 - GNU C Library: 64bit Shared libraries for PowerPC64 libc6-s390 - GNU C Library: 32bit Shared libraries for IBM zSeries libc6-sparc - GNU C Library: 32bit Shared libraries for SPARC libc6-sparc64 - GNU C Library: 64bit Shared libraries for UltraSPARC libc6-udeb - GNU C Library: Shared libraries - udeb (udeb) libc6-x32 - GNU C Library: X32 ABI Shared libraries for AMD64 libc6-xen - GNU C Library: Shared libraries [Xen version] libc6.1 - GNU C Library: Shared libraries libc6.1-alphaev67 - GNU C Library: Shared libraries (EV67 optimized) libc6.1-dbg - GNU C Library: detached debugging symbols libc6.1-dev - GNU C Library: Development Libraries and Header Files libc6.1-pic - GNU C Library: PIC archive library libc6.1-udeb - GNU C Library: Shared libraries - udeb (udeb) libnss-dns-udeb - GNU C Library: NSS helper for DNS - udeb (udeb) libnss-files-udeb - GNU C Library: NSS helper for files - udeb (udeb) locales - GNU C Library: National Language (locale) data [support] locales-all - GNU C Library: Precompiled locale data multiarch-support - Transitional package to ensure multiarch compatibility nscd - GNU C Library: Name Service Cache Daemon Closes: 759197 788999 794222 796105 Changes: glibc (2.19-18+deb8u1) stable; urgency=medium . [ Aurelien Jarno ] * Update from upstream stable branch: - Fix pthread_mutex_trylock with lock elision. Closes: #759197, #788999. - Fix gprof entry point on ppc64el. Closes: #794222. - Fix a buffer overflow in getanswer_r (CVE-2015-1781). Closes: #796105. Checksums-Sha1: b7188cdfc5bf35953b054469d0441e7c51c71619 8236 glibc_2.19-18+deb8u1.dsc 5e6a409379644778ad1bd14f276663213a4352ca 1044476 glibc_2.19-18+deb8u1.debian.tar.xz 886bca58a16c74214b6df212e886375a4d7039e8 2266080 glibc-doc_2.19-18+deb8u1_all.deb 70a00739f3aa9d810926c99bb33540f4a5843d95 13998064 glibc-source_2.19-18+deb8u1_all.deb f5a4e24bee1bbd2a3b9288f8025c48f01e986cac 3908102 locales_2.19-18+deb8u1_all.deb Checksums-Sha256: 3d966ff27fb6aa1392d956f133ef21622da1e950e3f0a7e04bcad1037bd80705 8236 glibc_2.19-18+deb8u1.dsc fb3b2d338bdd663fee605485fe18f7a7d0c4923d68d889d4e161e5e469034479 1044476 glibc_2.19-18+deb8u1.debian.tar.xz e930776ad1036c8dae0bda0cb9c16cf0cb54eb3d49b4525de09cf317f0a374dc 2266080 glibc-doc_2.19-18+deb8u1_all.deb 41c65a0c83451d239e58063c5c47685ea55715f52827bee12991220359b749ae 13998064 glibc-source_2.19-18+deb8u1_all.deb 9bca0d296807d0422a0049b6991f43d0ec656c9a736026a32f841d1232019a12 3908102 locales_2.19-18+deb8u1_all.deb Files: 4f2cab598aef2a15959a9e974d104a96 8236 libs required glibc_2.19-18+deb8u1.dsc 5eb44a1092df15bad4db43deebf46d44 1044476 libs required glibc_2.19-18+deb8u1.debian.tar.xz cc0819f61aa35a14698b6fadf82a1862 2266080 doc optional glibc-doc_2.19-18+deb8u1_all.deb a7ab5e3c5d69450b304da0ee2a47043a 13998064 devel optional glibc-source_2.19-18+deb8u1_all.deb 9c0d8e2a20cdf48e06be9e14909d4472 3908102 localization standard locales_2.19-18+deb8u1_all.deb Package-Type: udeb -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQIcBAEBAgAGBQJV4Z9XAAoJELqceAYd3YybV+kP/3FYkQwGj2bAQf8mAWNeKm/0 LTDQf/ofmqq/ZwusZAX/+49OmkB9AYZeYu2rJiUXBBR423MtTXQ2SZWxOOifHXsc z50K8HGAHklzE4qnPkHTS+ZUyvpdvB/Z4XaqurzLnruN+5CUC5dCYN6jEblmRLSu 4+vTTgTOaB1wHptVV+vEJsD2gLFroMaN+cczLVA8OymjFL/MAnnl73DoxpFEHs4Z wdQSLjeYSRrqFo+ugHqUMbTienFLd7AO35b5QMsXikkg38U2s+BQgzT8wsWwrZmf sgAAVdJzRnSzSyYU982Oq5EPTD2Qkn0WVX2HI3otH8A9ShwNX1CTzDUnujeUT+m5 y3HfqMGsz3N77Cgsp6XjVN6tQCgg0q9BIk/3DKP0Ajnc3Mnwyp70pJdvFakJj1Ey wGA3JRhqEJzxsmPY9C40CKtPvdwSHZ45PY1lH6ixHdquHkXWUztTmOCkKP7JRdJ5 W/laEip9Nm6CpK6G3xLAp2HnyINpjuUjI4n00ujgsT1LnImdgiNMsM/iq4pLyu+i HXMUbQBW1DTcZgGCPDS5laRvdPylpWKdej7wBiRBy1YDFaHEFDw6FxsaBG/2TmUW nQo/1eTFUS/wTE43E10SE1acVIXOVaUX9YnX3tAuebqoJwpNoaufbSuY5ubdKwvM XMBv26ld7wHz9qXqSbub =PlXa -----END PGP SIGNATURE-----
--- End Message ---