[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#759197: marked as done (libzmq3 and libc6's 2.19-9 libpthread problems with destroying mutexes)



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 ---

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.
OAO NPP "Polygon"   http://www.plgn.ru
/*
    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 ---
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 ---

Reply to: