Hello community,

here is the log from the commit of package babeltrace for openSUSE:Factory 
checked in at 2018-07-04 23:48:10
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/babeltrace (Old)
 and      /work/SRC/openSUSE:Factory/.babeltrace.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "babeltrace"

Wed Jul  4 23:48:10 2018 rev:4 rq:617763 version:1.5.5

Changes:
--------
--- /work/SRC/openSUSE:Factory/babeltrace/babeltrace.changes    2018-04-06 
17:45:41.983830358 +0200
+++ /work/SRC/openSUSE:Factory/.babeltrace.new/babeltrace.changes       
2018-07-04 23:48:15.304348008 +0200
@@ -1,0 +2,8 @@
+Sun Jun 17 18:47:02 UTC 2018 - [email protected]
+
+- Update to version 1.5.5:
+  * Propagate error from packet_seek in case of truncated packet.
+  * Fix: report truncated files while reading.
+- Use tarball signing.
+
+-------------------------------------------------------------------

Old:
----
  babeltrace-1.5.4.tar.bz2

New:
----
  babeltrace-1.5.5.tar.bz2
  babeltrace-1.5.5.tar.bz2.asc
  babeltrace.keyring

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ babeltrace.spec ++++++
--- /var/tmp/diff_new_pack.Mjo88J/_old  2018-07-04 23:48:15.956347286 +0200
+++ /var/tmp/diff_new_pack.Mjo88J/_new  2018-07-04 23:48:15.956347286 +0200
@@ -19,13 +19,15 @@
 %define soname  libbabeltrace
 %define sover   1
 Name:           babeltrace
-Version:        1.5.4
+Version:        1.5.5
 Release:        0
 Summary:        Common Trace Format Babel Tower
 License:        MIT AND GPL-2.0-only
 Group:          Development/Languages/C and C++
 Url:            https://diamon.org/babeltrace
 Source:         
https://efficios.com/files/babeltrace/%{name}-%{version}.tar.bz2
+Source1:        
https://efficios.com/files/babeltrace/%{name}-%{version}.tar.bz2.asc
+Source2:        %{name}.keyring
 BuildRequires:  bison
 BuildRequires:  flex
 BuildRequires:  pkgconfig

++++++ babeltrace-1.5.4.tar.bz2 -> babeltrace-1.5.5.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/babeltrace-1.5.4/ChangeLog 
new/babeltrace-1.5.5/ChangeLog
--- old/babeltrace-1.5.4/ChangeLog      2018-02-01 04:05:00.000000000 +0100
+++ new/babeltrace-1.5.5/ChangeLog      2018-03-26 21:34:10.000000000 +0200
@@ -1,3 +1,7 @@
+2018-03-26 babeltrace 1.5.5 (Purple Day)
+       * Propagate error from packet_seek in case of truncated packet
+       * Fix: report truncated files while reading
+
 2018-01-31 babeltrace 1.5.4 (Gorilla Suit Day)
        * Fix: use signed accessors for clock offsets
        * Fix: signedness error in python complements
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/babeltrace-1.5.4/bindings/python/Makefile.in 
new/babeltrace-1.5.5/bindings/python/Makefile.in
--- old/babeltrace-1.5.4/bindings/python/Makefile.in    2018-02-01 
04:05:09.000000000 +0100
+++ new/babeltrace-1.5.5/bindings/python/Makefile.in    2018-03-26 
21:34:20.000000000 +0200
@@ -620,9 +620,9 @@
 maintainer-clean-generic:
        @echo "This command is intended for maintainers to use"
        @echo "it deletes files that may require special tools to rebuild."
-@USE_PYTHON_FALSE@uninstall-local:
-@USE_PYTHON_FALSE@install-exec-local:
 @USE_PYTHON_FALSE@clean-local:
+@USE_PYTHON_FALSE@install-exec-local:
+@USE_PYTHON_FALSE@uninstall-local:
 clean: clean-recursive
 
 clean-am: clean-generic clean-libtool clean-local mostlyclean-am
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/babeltrace-1.5.4/configure 
new/babeltrace-1.5.5/configure
--- old/babeltrace-1.5.4/configure      2018-02-01 04:05:07.000000000 +0100
+++ new/babeltrace-1.5.5/configure      2018-03-26 21:34:18.000000000 +0200
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for babeltrace 1.5.4.
+# Generated by GNU Autoconf 2.69 for babeltrace 1.5.5.
 #
 # Report bugs to <[email protected]>.
 #
@@ -590,8 +590,8 @@
 # Identity of this package.
 PACKAGE_NAME='babeltrace'
 PACKAGE_TARNAME='babeltrace'
-PACKAGE_VERSION='1.5.4'
-PACKAGE_STRING='babeltrace 1.5.4'
+PACKAGE_VERSION='1.5.5'
+PACKAGE_STRING='babeltrace 1.5.5'
 PACKAGE_BUGREPORT='[email protected]'
 PACKAGE_URL='https://diamon.org/babeltrace'
 
@@ -1410,7 +1410,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures babeltrace 1.5.4 to adapt to many kinds of systems.
+\`configure' configures babeltrace 1.5.5 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1482,7 +1482,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of babeltrace 1.5.4:";;
+     short | recursive ) echo "Configuration of babeltrace 1.5.5:";;
    esac
   cat <<\_ACEOF
 
@@ -1625,7 +1625,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-babeltrace configure 1.5.4
+babeltrace configure 1.5.5
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2048,7 +2048,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by babeltrace $as_me 1.5.4, which was
+It was created by babeltrace $as_me 1.5.5, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -3035,7 +3035,7 @@
 
 # Define the identity of the package.
  PACKAGE='babeltrace'
- VERSION='1.5.4'
+ VERSION='1.5.5'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -18592,7 +18592,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by babeltrace $as_me 1.5.4, which was
+This file was extended by babeltrace $as_me 1.5.5, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -18663,7 +18663,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; 
s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-babeltrace config.status 1.5.4
+babeltrace config.status 1.5.5
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/babeltrace-1.5.4/configure.ac 
new/babeltrace-1.5.5/configure.ac
--- old/babeltrace-1.5.4/configure.ac   2018-02-01 04:05:00.000000000 +0100
+++ new/babeltrace-1.5.5/configure.ac   2018-03-26 21:34:10.000000000 +0200
@@ -1,5 +1,5 @@
 AC_PREREQ([2.50])
-AC_INIT([babeltrace],[1.5.4],[[email protected]],[],[https://diamon.org/babeltrace])
+AC_INIT([babeltrace],[1.5.5],[[email protected]],[],[https://diamon.org/babeltrace])
 AC_SUBST([BABELTRACE_LIBRARY_VERSION], [1:0:0])
 
 AC_CONFIG_HEADERS([config.h])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/babeltrace-1.5.4/converter/babeltrace.c 
new/babeltrace-1.5.5/converter/babeltrace.c
--- old/babeltrace-1.5.4/converter/babeltrace.c 2018-02-01 04:05:00.000000000 
+0100
+++ new/babeltrace-1.5.5/converter/babeltrace.c 2018-03-26 21:34:10.000000000 
+0200
@@ -669,6 +669,7 @@
        struct bt_iter_pos *begin_pos = NULL, *end_pos = NULL;
        struct bt_ctf_event *ctf_event;
        int ret;
+       int error_holder = 0;
 
        sout = container_of(td_write, struct ctf_text_stream_pos,
                        trace_descriptor);
@@ -695,11 +696,18 @@
                        goto end;
                }
                ret = bt_iter_next(bt_ctf_get_iter(iter));
-               if (ret < 0) {
+               if (ret == -ERANGE) {
+                       /*
+                        * Remember that a range (truncated packet)
+                        * error occurred and continue.
+                        */
+                       error_holder = 1;
+                       continue;
+               } else if (ret < 0) {
                        goto end;
                }
        }
-       ret = 0;
+       ret = error_holder;
 
 end:
        bt_ctf_iter_destroy(iter);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/babeltrace-1.5.4/formats/ctf/ctf.c 
new/babeltrace-1.5.5/formats/ctf/ctf.c
--- old/babeltrace-1.5.4/formats/ctf/ctf.c      2018-02-01 04:05:00.000000000 
+0100
+++ new/babeltrace-1.5.5/formats/ctf/ctf.c      2018-03-26 21:34:10.000000000 
+0200
@@ -478,6 +478,29 @@
 }
 
 static
+void ctf_print_truncated_packet(FILE *fp, struct ctf_stream_definition *stream,
+               uint64_t packet_size, uint64_t remaining_file_size)
+{
+       fprintf(fp, "[error] Packet size (%" PRIu64 " bits) is larger than 
remaining file size (%" PRIu64 " bits) in trace with UUID \"",
+                       packet_size, remaining_file_size);
+       print_uuid(fp, stream->stream_class->trace->uuid);
+       fprintf(fp, "\"");
+
+       if (stream->stream_class->trace->parent.path[0] != '\0') {
+               fprintf(fp, ", at path: \"%s\"",
+                               stream->stream_class->trace->parent.path);
+       }
+
+       fprintf(fp, ", within stream id %" PRIu64, stream->stream_id);
+       if (stream->path[0] != '\0') {
+               fprintf(fp, ", at relative path: \"%s\"", stream->path);
+       }
+
+       fprintf(fp, ".\n");
+       fflush(fp);
+}
+
+static
 int ctf_read_event(struct bt_stream_pos *ppos, struct ctf_stream_definition 
*stream)
 {
        struct ctf_stream_pos *pos =
@@ -491,8 +514,12 @@
        if (unlikely(pos->offset == EOF))
                return EOF;
 
-       if (ctf_pos_get_event(pos))
+       ret = ctf_pos_get_event(pos);
+       if (ret == -BT_PACKET_SEEK_ERROR_TRUNCATED_PACKET) {
+               return -ERANGE;
+       } else if (ret) {
                return EOF;
+       }
 
        /* save the current position as a restore point */
        pos->last_offset = pos->offset;
@@ -1059,7 +1086,7 @@
        case SEEK_SET:  /* Fall-through */
                break;  /* OK */
        default:
-               ret = -1;
+               ret = -BT_PACKET_SEEK_ERROR;
                goto end;
        }
 
@@ -1072,7 +1099,7 @@
                if (ret) {
                        fprintf(stderr, "[error] Unable to unmap old base: 
%s.\n",
                                strerror(errno));
-                       ret = -1;
+                       ret = -BT_PACKET_SEEK_ERROR;
                        goto end;
                }
                pos->base_mma = NULL;
@@ -1093,7 +1120,7 @@
                        pos->cur_index = 0;
                        break;
                default:
-                       ret = -1;
+                       ret = -BT_PACKET_SEEK_ERROR;
                        goto end;
                }
                pos->content_size = -1U;        /* Unknown at this point */
@@ -1105,6 +1132,7 @@
                assert(ret == 0);
                pos->offset = 0;
        } else {
+               uint64_t remaining_file_size;
        read_next_packet:
                switch (whence) {
                case SEEK_CUR:
@@ -1127,7 +1155,7 @@
                        pos->cur_index = index;
                        break;
                default:
-                       ret = -1;
+                       ret = -BT_PACKET_SEEK_ERROR;
                        goto end;
                }
 
@@ -1176,10 +1204,22 @@
                if (packet_index->data_offset == -1) {
                        ret = find_data_offset(pos, file_stream, packet_index);
                        if (ret < 0) {
-                               ret = -1;
+                               ret = -BT_PACKET_SEEK_ERROR;
                                goto end;
                        }
                }
+
+               remaining_file_size = (pos->file_length - ((uint64_t) 
packet_index->offset)) * CHAR_BIT;
+               if (packet_index->packet_size > remaining_file_size) {
+                       fflush(stdout);
+                       ctf_print_truncated_packet(stderr, &file_stream->parent,
+                                       packet_index->packet_size,
+                                       remaining_file_size);
+                       pos->offset = EOF;
+                       ret = -BT_PACKET_SEEK_ERROR_TRUNCATED_PACKET;
+                       goto end;
+               }
+
                pos->content_size = packet_index->content_size;
                pos->packet_size = packet_index->packet_size;
                pos->mmap_offset = packet_index->offset;
@@ -1708,8 +1748,7 @@
 static
 int create_stream_one_packet_index(struct ctf_stream_pos *pos,
                        struct ctf_trace *td,
-                       struct ctf_file_stream *file_stream,
-                       size_t filesize)
+                       struct ctf_file_stream *file_stream)
 {
        struct packet_index packet_index;
        uint64_t stream_id = 0;
@@ -1724,8 +1763,8 @@
                first_packet = 1;
        }
 
-       if (filesize - pos->mmap_offset < (packet_map_len >> LOG2_CHAR_BIT)) {
-               packet_map_len = (filesize - pos->mmap_offset) << LOG2_CHAR_BIT;
+       if (pos->file_length - pos->mmap_offset < (packet_map_len >> 
LOG2_CHAR_BIT)) {
+               packet_map_len = (pos->file_length - pos->mmap_offset) << 
LOG2_CHAR_BIT;
        }
 
        if (pos->base_mma) {
@@ -1843,7 +1882,7 @@
                        packet_index.packet_size = bt_get_unsigned_int(field);
                } else {
                        /* Use file size for packet size */
-                       packet_index.packet_size = filesize * CHAR_BIT;
+                       packet_index.packet_size = pos->file_length * CHAR_BIT;
                }
 
                /* read content size from header */
@@ -1855,7 +1894,7 @@
                        packet_index.content_size = bt_get_unsigned_int(field);
                } else {
                        /* Use packet size if non-zero, else file size */
-                       packet_index.content_size = packet_index.packet_size ? 
: filesize * CHAR_BIT;
+                       packet_index.content_size = packet_index.packet_size ? 
: pos->file_length * CHAR_BIT;
                }
 
                /* read timestamp begin from header */
@@ -1912,9 +1951,9 @@
                }
        } else {
                /* Use file size for packet size */
-               packet_index.packet_size = filesize * CHAR_BIT;
+               packet_index.packet_size = pos->file_length * CHAR_BIT;
                /* Use packet size if non-zero, else file size */
-               packet_index.content_size = packet_index.packet_size ? : 
filesize * CHAR_BIT;
+               packet_index.content_size = packet_index.packet_size ? : 
pos->file_length * CHAR_BIT;
        }
 
        /* Validate content size and packet size values */
@@ -1924,12 +1963,6 @@
                return -EINVAL;
        }
 
-       if (packet_index.packet_size > ((uint64_t) filesize - 
packet_index.offset) * CHAR_BIT) {
-               fprintf(stderr, "[error] Packet size (%" PRIu64 " bits) is 
larger than remaining file size (%" PRIu64 " bits).\n",
-                       packet_index.packet_size, ((uint64_t) filesize - 
packet_index.offset) * CHAR_BIT);
-               return -EINVAL;
-       }
-
        if (packet_index.content_size < pos->offset) {
                fprintf(stderr, "[error] Invalid CTF stream: content size is 
smaller than packet headers.\n");
                return -EINVAL;
@@ -1952,7 +1985,7 @@
 
        /* Retry with larger mapping */
 retry:
-       if (packet_map_len == ((filesize - pos->mmap_offset) << LOG2_CHAR_BIT)) 
{
+       if (packet_map_len == ((pos->file_length - pos->mmap_offset) << 
LOG2_CHAR_BIT)) {
                /*
                 * Reached EOF, but still expecting header/context data.
                 */
@@ -1975,17 +2008,12 @@
                        struct ctf_file_stream *file_stream)
 {
        struct ctf_stream_pos *pos;
-       struct stat filestats;
        int ret;
 
        pos = &file_stream->pos;
 
-       ret = fstat(pos->fd, &filestats);
-       if (ret < 0)
-               return ret;
-
        /* Deal with empty files */
-       if (!filestats.st_size) {
+       if (!pos->file_length) {
                if (file_stream->parent.trace_packet_header
                                || file_stream->parent.stream_packet_context) {
                        /*
@@ -2008,9 +2036,8 @@
                }
        }
 
-       for (pos->mmap_offset = 0; pos->mmap_offset < filestats.st_size; ) {
-               ret = create_stream_one_packet_index(pos, td, file_stream,
-                       filestats.st_size);
+       for (pos->mmap_offset = 0; pos->mmap_offset < pos->file_length; ) {
+               ret = create_stream_one_packet_index(pos, td, file_stream);
                if (ret)
                        return ret;
        }
@@ -2195,6 +2222,7 @@
        file_stream->pos.last_offset = LAST_OFFSET_POISON;
        file_stream->pos.fd = -1;
        file_stream->pos.index_fp = NULL;
+       file_stream->pos.file_length = statbuf.st_size;
 
        strncpy(file_stream->parent.path, path, PATH_MAX);
        file_stream->parent.path[PATH_MAX - 1] = '\0';
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/babeltrace-1.5.4/formats/lttng-live/lttng-live-comm.c 
new/babeltrace-1.5.5/formats/lttng-live/lttng-live-comm.c
--- old/babeltrace-1.5.4/formats/lttng-live/lttng-live-comm.c   2018-02-01 
04:05:00.000000000 +0100
+++ new/babeltrace-1.5.5/formats/lttng-live/lttng-live-comm.c   2018-03-26 
21:34:10.000000000 +0200
@@ -1223,7 +1223,7 @@
        ret = handle_seek_position(index, whence, viewer_stream, pos,
                        file_stream);
        if (ret != 0) {
-               ret = -1;
+               ret = -BT_PACKET_SEEK_ERROR;
                goto end;
        }
 
@@ -1266,7 +1266,7 @@
                        if (!lttng_live_should_quit()) {
                                fprintf(stderr, "[error] get_next_index 
failed\n");
                        }
-                       ret = -1;
+                       ret = -BT_PACKET_SEEK_ERROR;
                        goto end;
                }
                printf_verbose("Index received : packet_size : %" PRIu64
@@ -1389,7 +1389,7 @@
                pos->offset = EOF;
                if (!lttng_live_should_quit()) {
                        fprintf(stderr, "[error] get_data_packet failed\n");
-                       ret = -1;
+                       ret = -BT_PACKET_SEEK_ERROR;
                } else {
                        ret = 0;
                }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/babeltrace-1.5.4/include/babeltrace/ctf/types.h 
new/babeltrace-1.5.5/include/babeltrace/ctf/types.h
--- old/babeltrace-1.5.4/include/babeltrace/ctf/types.h 2018-02-01 
04:05:00.000000000 +0100
+++ new/babeltrace-1.5.5/include/babeltrace/ctf/types.h 2018-03-26 
21:34:10.000000000 +0200
@@ -92,6 +92,7 @@
 
        int dummy;              /* dummy position, for length calculation */
        struct bt_stream_callbacks *cb; /* Callbacks registered for iterator. */
+       size_t file_length;     /* length of backing file, in bytes. */
        void *priv;
 };
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/babeltrace-1.5.4/include/babeltrace/error.h 
new/babeltrace-1.5.5/include/babeltrace/error.h
--- old/babeltrace-1.5.4/include/babeltrace/error.h     2018-02-01 
04:05:00.000000000 +0100
+++ new/babeltrace-1.5.5/include/babeltrace/error.h     2018-03-26 
21:34:10.000000000 +0200
@@ -30,6 +30,11 @@
  * SOFTWARE.
  */
 
+enum bt_packet_seek_error {
+       BT_PACKET_SEEK_ERROR = 1,
+       BT_PACKET_SEEK_ERROR_TRUNCATED_PACKET = 2,
+};
+
 /*
  * bt_packet_seek_get_error: get the return code of the last packet_seek use.
  *
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/babeltrace-1.5.4/lib/iterator.c 
new/babeltrace-1.5.5/lib/iterator.c
--- old/babeltrace-1.5.4/lib/iterator.c 2018-02-01 04:05:00.000000000 +0100
+++ new/babeltrace-1.5.5/lib/iterator.c 2018-03-26 21:34:10.000000000 +0200
@@ -864,6 +864,10 @@
                 */
                ret = 0;
                goto reinsert;
+       } else if (ret == -ERANGE) {
+               removed = bt_heap_remove(iter->stream_heap);
+               assert(removed == file_stream);
+               goto end;
        } else if (ret) {
                goto end;
        }

++++++ babeltrace.keyring ++++++
pub   rsa4096 2013-01-08 [SC] [expires: 2018-11-29]
      7F49 314A 26E0 DE78 4276  80E0 5F1B 2A07 89F1 2B11
uid                 [ unknown] J�r�mie Galarneau 
<[email protected]>
uid                 [ unknown] J�r�mie Galarneau <[email protected]>
sub   rsa4096 2013-01-08 [E]

-----BEGIN PGP PUBLIC KEY BLOCK-----

mQINBFDsPtgBEACp9imzutRAOB0S/t74tEUq7AKZULpoXwRUZDjGdaa1kpA9SE6j
ybUWrMv1MYfpC7dTlI7vesnRmaZMYYzxkQ61hA2wcEahvXeX180YXTss+Y26C8hh
pE2mds/5Thsqqj0iL1pQPLdeoj7eCeXfl6nJ1TtA4C5dio/Lt/WTwOjmuXs7LKV3
8NdcH76gJSttwHwddnHEAuQQKJ/eN46tYUlQVN4ffMdUze+Kj8OA8OB9JQHg3t+l
G+O9VB1AvocnU9LOMTLOCsfasMc8ZDMAc6K5ErfLGS+sOrXOz9xnyfoR5ZDZPuY4
h7UJbdAeIf6INrXZIsJCtLJ/Zs8CrnVgFpARwmvECFhmBh2ZjiFy1ucd56if27h0
93PWGHwS1u0jpinrLFssbCuI1nJrosAKn009KE64XkeJ8ft83OAsIQHxWqjR6tgd
zZhNshduWTdV5WvD/VSF2cs/YzD9FNjCc5Os0/Y/0PzDLOhQSMUlh0EDJiA+HYuL
uBbSSfX53OsC8JEsKKTaZ2DdTRAWbs3K3Cybq1kxunCGXrD+SixjluawQiu4wLz+
XocYzv1eTXmX0JUW2gG1OSPEFMxWA1QHpeIEUO1SE0xllhZ5xiNkHsy5rESZdAPf
arr/Mb1oINFpIsg9beJJUZodTkC8WXqHrC4GP3/ptf2xh6FXRGIskb9pNQARAQAB
tDFKw6lyw6ltaWUgR2FsYXJuZWF1IDxqZXJlbWllLmdhbGFybmVhdUBnbWFpbC5j
b20+iQIcBBMBCgAGBQJW1MSkAAoJEIZWH0UhgPz+MLkQAIdRn1LFJvSccDb7eBaw
orc76tR730s7ZPIpxkaDBKPq0M79JbO/rOEGGYBEMBU69i4+bYNWJn7josHygaC4
Pe5VN/XGYg4TDJgCkdDl+AV6KmGYw6Vw6EfSlnUfFvnd8pOEjCeNeRrsGUJLQph/
+Lc49t/Qk8JB7ydmrYplPrwe3T+FIZQ7cJ/wEVMUesxHFykd9cIlZCn1FRvDt+EF
WwzReT74Vvtgoy9Z+S8UrPrdXslfxEVtSzxltVP9O1SKWZZH5jfh9XfgbEOGdaJ5
riTXwMNu3RHYYHHhEQQHJf5ViT+PrsEfK6w0zdVBUkpZcLRIZfHyD/u8vNM6/Y+s
nf/KW9Y2PZybBzIq5q47d80d89CO9c2py9qHAq/etFzfu6SrT4PmGjqEj8huFdFW
SKlCozOJL8hS04pmf+1muucFsniIdL9QMYwLGUVAi3n/aSPaK1h7gM8c/Qaojg3E
Hb/F5jp2GFSI/Cg23iuyMcz4iM5g0rTZpl8Vuu86WHgdpzj4Y5Tgye+g85Jfw7Y0
r1M0Lno8NWLRsIO+HXeTSQEowcqcRS0XsY4G4vnvu2YayAbMc7NpGfD5miuwGrwY
/1xU7km4DZAxhGNHZEiTZ3YoOrFpwUCikrZNQfKtKKH8NKr1VX6tbtwd9Ra6504K
5YjThqRxh1dm2X8+fRjIP1F2iQIcBBMBCgAGBQJW1MS0AAoJEEv5xo03KD8GOj4P
/iaiVp0UH1lf2LoZB9R7C+fTLWDCcdo9X9qHbIYZoQDpY+g/LXOB29J/MdWwU7LF
xwqWgxVCEGUSW18sNNQpLFDHodIGWY1WVeuKSdR6hq7izXFzPGYv4gD7f6tlZnJA
DxiNQ3H3RZCEgGYDOoyRXtrDLlijNkkIpn6OKTHN56CiCqHdAFD6aRDiW/afMjmx
Jiq5Xz+RoNcenA9f1axZRVK4naNG4eQyZnlE12wpvtyD6QXQhEBBB5T/Of8VSysC
XnJxpkokzGV7c6PpzOe9ZitjiN2Gvna+IwzJAxoewcxXYkMRG/hy8PNz+DRtP0qx
bjCZTqxFUrwdjpaCFL9FNfNFyRb69FwoDS+j4tngkFs1utXPUJSfCW0ipzgxLO7E
u4sX4Mzuy92qKAZFXtt4ikFkxp847wIb22GCmgxYqwbYfS+nhkpopVJDCOm77e24
2OeB6kwspkcfVoSZlBvN2ppM3sSFQUqkZI067a9W8tMJket029NQZS4nTm3uuTnL
8e4toOqr/bYpM9SlIcESLcHjJ5fxsSnRxthJ3xKzKrBK1r65yOa4zH4XZ3fj5CTc
VZWW2cU8hxJqLGuobrKWPtQv8ya7afLn+mnOoQ78U2nFRCkuPsEySftTVlceVuUY
6nlDPNIilSUvjbILtw/X6qPd3QX29yeQSoaJoWO34R2tiQIiBBIBCgAMBQJVAl9h
BYMHhh+AAAoJEL8bh8hKUk7NFnAP/iZBWMAE70VQdRmV0umDAQDvkZaSSamFyL1T
7c2GqFgB7Y0W7A3vgPjQF2BdyaoF4U1k4iPiLTLIoJDVMpxyuwLy+VlT17iVU3nC
i3N2JYlAIUvH0HNkLS5cDYTXx553TVBQeVczgqa2n0u7naoHnIESBqhyCJLnASGk
gMCQ801AAkBm3XolENIgPJcKWSsQFAjvJ/wzrTpAZGtMgajrMpVZPwyoZl9MHSZ+
kB99JYLbCHnezXYa/bRtVK6SrOhB+E/tZEdsnW+FChDcrKPYuGhcgkUDsVLS0sHk
Ija9amPIxata9yswGM8YRjD3v7uunasW+3HMplV5er8Bc8PqKoX6A6DUuR+KO58w
xiOHwWD9FrmC6ytjQO3JFAjJHiFBvZxGhkaxa3oMHlGlq5+rybBsNfnP+1ZzzU5A
AlSIAaGPa9tCD/U9kfkrAxVO2Qv8WKrJz8xYrm3yO2eYAGueXeeZKyYQrNXWcrCi
1aQo1QxLECaT/gBdfOlc7ZbwZ2iHCo2kPcA635b9j+TR/YI5ntB+x1DWetwyQZV1
3G/CX+SJlkwbKdXLOJTTfReURFLBw0Qazg9/lCtiyRnuRoTykusHyvBJYale7xwJ
PLHOgTRhvaEbuIkV1Yh4WfxuW/iatoXjlzFfbUy7cTVPTe0mAinHPR/dfmsxqVvH
Bcwz/Jr4iQI5BBMBAgAjBQJSSyX6AhsDBwsJCAcDAgEGFQgCCQoLBBYCAwECHgEC
F4AACgkQXxsqB4nxKxFu6A/+JR48YhK0HxWtofuRl2h5myo01+/SHdLkAq+x2C/N
05dc1O3lfhtAaM5aslGkX3WDATxTL6ZYAL1v36nZThnFDVnAjyM5+cPN7uFmNiCy
dnN6KOKEe09nB6pBtl1BL3lWLzG/VZNYCyY1rvQ2KAuyxxiluhZcm6sswuFTTkT5
PwACf0GNScdRiAxPc/dQN//+sYbq68S3PIR1GzutmLL5KaVxduo7B2470qwocMzx
w3eAb7kvYzoGS85/t4301U0s7J8bsLRdkgHqwAkF1v3sH27ECFj+czihoUUXCzfk
o7GcasZXUvqKr2XJvaZ+QpVejv4HQMfanSbSIapynx0YVjL0uHkZz7g35XLkyo6r
ZTlqFOxYvj6lc+Yklucjaav5zir4TGuqg57VXcYLLPcWBXD9X0aZpF4kZjzcgGtT
K7LzWeje2chXZLiYwr84h+EyF09tgAgu2qcsGByb23zh4gDRaQpYmLcYIrATphkP
d/kAuiClDng+ovBIUbZNRlFCtvtjP6m6srVAxTxRqtBMun5wXcq8rNrGuNAcm2W/
yTvt7YI0wOQdmgly9/FMzJJ+7u9ovb2GwTTNE2d9dmhH1fJnTa9RKviZIm3ijY4/
j522ldsNuiIrGebWLLb4DuHxivCqv0wvteCI3S93EMWLHIH2+kosSV4YFkFdl9tv
PECJAj8EEwECACkCGwMHCwkIBwMCAQYVCAIJCgsEFgIDAQIeAQIXgAUCWD4AFgUJ
CxQoPgAKCRBfGyoHifErEfULEACYccuLaBqJVWbCreH+hJBGyYOP+IcvJGWPaCHm
mc+LAREnfGm9r9+7HlFYNDT58A0AF8t3xCKZy+lsGRAK6mhAw1Nh8Dco0ViOfY7+
+3pBMG9F65BdPO7MhIwEUvvz3LePyyfUYevN+gSY/8vPk2TpfPXWRlLN9R/I7DaB
B+7CDqgI4Iv6JzTpIENv4SC6+L62hBXfAO1JCCdxqDR1TANbnNh+TaMa0R8dEpBW
sm0+qAIPSHNOtPtY/4p71QfAyKcsv09mS37E5iOFuhP/WRu8yI3BTCJWkl975CfF
MaIjYIQSrgbz7/HyhZ6DfodPHp/+hAV51E9ZvxxNQlV4mBUF3cuKcCqCrqH19LH6
RcpKSH9wE240DGQnyt7t36Hrq9rStw3PDCrOHMVNUylcrYb7iDk78K7vrlqqxL3+
V7Nlkmu7617lTn0tSlMS70TflN5a3WE1LteIFAyQcqAc/1tL4qIbudxdo3Y7MmAm
gpVBFP5tU6qt2GJh3LE7zfJo2iQ9DoLdfDXERgIGTihSGzW2elMIPrHGkyCKe34f
tZzDUX4PItPXbVFN1QGcMCbIxH8496b1Nr8aycvhfAmt6zHGLAZ2gCCg8q1QyI0P
ffeF3MJfIuipP/iSl/DHFTxBh8/itKyrZ9CJQiGvarWY1mTfqM8lvNMHdvAR/ifb
EKWAgbQ0SsOpcsOpbWllIEdhbGFybmVhdSA8amVyZW1pZS5nYWxhcm5lYXVAZWZm
aWNpb3MuY29tPokCHAQQAQIABgUCWBz+rAAKCRAWeStOolNA+A03D/0YWCCYlOU/
z81+wDlfaTYGheqAceo7ljEMbBcdbNt16pXuiNRI5E/yeY0R5AZMsqZSXKcZA2/k
TlWrD/LRw4OX2iQugMCUsdBSXKUtZT7oYbS+VfCdIrxpOueUqMS45kzsu6K6N4Jp
bRdgLyhwNRRNwMOGvOHwXe1YNrUCeLc6CuPDbMRnsG1WxzUdffCqAJ81mf+4NKGT
JG6eqVB/LZoJPeEbue/g7tUvWDxDvSFzCsSfM/1hTDd9FYBFYFN7+gZ2+KOdJbzr
KD8Vd3LoBsi4OVmwXzTCl6evBl3sncnuBOPeqz/sXuGH9Vvh6zU/wjGYhT1eQzrS
tYFzaf0DPI0su6YpSBBqg9FR3bI4NbWTRTqrLPmsJwe8WAE9sGKctiKbQD52NyUC
7FZut1P8UALEpv/eykb+hWst9tpFR9RzNTRpgF31IwoCG56SVvPakzF+PP6jAhjQ
6OJ9Jg1YFaDipbgTkZ9Q6Y53PMnzvILxvLjBIcDlOnsTLTQul27jThUkHxdbTcSD
aR9858GtcVQvEd66L5sE/pl7zVeOBPEK4FIPr66TvpCkmREFwRKpjOQpyCW6rkr8
6oNSFTyDHK6xodro6bJ5/76K4tK1OlblfnOd7EAMpzB0UcCQOhk/AMxVeqrYANgW
pMCJMlZXSmOeTFhQZxaUgtLKTozby72mqokCHAQTAQoABgUCVtTErAAKCRCGVh9F
IYD8/v++D/wNZ4/vOh5yh7HIwaE456t3hwYdGh8yzaHkJXgci+r+yPygBNq68eBm
YYCZIgIlHLMe0ko5lL24iAql1BXXfzVp9TCVEqSs4UTDo8CWTtAWyjISxYnQQf5A
BDuLd38MXnecMrVI/m08xfvyeUDK/NDyTSF5vcUflJUO8lNKb/Z0p/YqgM0GW0Wa
YAx3aRYO0Bw+4kXioJlHqEZ3BtkSIOQBEc0qhtsEscg+si1eL0jaUBfB7Azwsd9S
2+8TpkxqEtlPFymEetzwBii0ekn+jII/DpjYiwzUhwVaTZf8wVS1iSvjqWGsyn6K
/jJBK4qzVHnFW1/9C16BhqU1cHjwJ0+KMiD4bJ9zYML9yptzPuc3YSke3uBTk0ru
i4ruDu+Gcd4Pm76MOoxi76tG6yC0wvxxKeBmMQxg/Usd7gt9OE9zB2xLE24DhsGi
XvV3GQHHzMuLJvzQl/9dOe4Uuc59sY4HQ0a1moLhAEfIN+aIw8zAAZdfE6OfDz61
XUlQot9FaZBLOiTkPa6nDU0/40sdMsY7/467qVxLzPCUGyboyIDITvTkj06zMInh
1YsDyEwMl6K8d8I6J+WbLRBkMMMTVoPtUGJkFv1FSMwkev4F85cQp6YnfRrw90jF
rdAZyuOZNlAXFF4oI6ZkuuHUW/z/VH4fuPjJrIU7/Q916sRUWogXxIkCHAQTAQoA
BgUCVtTEvQAKCRBL+caNNyg/BkwGD/4xha4gcZ7fnGp4rlccFD2kTCQJ8tMnFAtu
YATAPhYgiZw/jiNFtG8p6VqE1dODcyFk+KGqeqZCYmBE0aaX9pDX46Cl1nLtyRtl
hzDijz43yochPDjTpbjaoE/CrE6Ii7oSdaSMhPyO/iEvCzd5WI8IkUXuYPOOhndc
h6+LyGQ300cfvK4piv0/G9lbx9TyBnR+xvlXS5MQ26Sjh15rNpCapYIexD64YBO8
ksA6ApDpg1FZoNTneK2uA9lppcxruEVv2f0FCT+UYGCFA5+KYj1n2Hda9eflzjeC
JLIjTF4JdpeMG8oGCs/as+3utAX430aUDlkNrNalGfYaXuGcSA6KTRhU2MUkYloY
pY3J95sgnVkK5D8LKsVzZ2QE72HkCyFDReTO5XKnX7wX4toVAeBQSSIlIwAFX1yn
Fmw/PcJ3zcS7aDIlG98nW60X22eUX+IthSw44paOBxZmkN/8XPLVco80cTcuTyxR
kH31xQZs+u/BEXeS0scqKh9AYHozweaaXQeOn0qOmMtqX7Nx2RMgWfGPIypLWk9g
TVkurTnkPXC93yOzt8o3cpYueBKLQR88h7PuJgiIc35S9U7F8/rmsbwjixmudz1N
wOnHdOUTJ+NLccGqkRMbTA1dQLxQkxMXzOmUPPQy6D6hBaS7eCEn/gsnLy8J8YR1
lfj+dSGVtYkCIgQSAQoADAUCVQJfYgWDB4YfgAAKCRC/G4fISlJOzW1XEACqeDDA
11CCXzpQ6hUYZQlzIDB0GCP8om3JhJrTNxMxVrMmIAdWvnQDU+6Q8s1HDE4VP7qN
nwh7wY/7kyxI2za37ChR4XD0M+208YWt3JXXmynNE1DhvYOc5P0s7fCfEHarmLb8
eQ4me/o7zv055Sz2wkbNFzRnrO7jmoW6LRl7AVA3hTBbmRBDyO43KSaMENAFRxYk
aKIHodzkDm2X79u1eF5kmE3rqI5fmKRgQGnvYBQuc7CSMFzIB/NdwrRqfhQNCpVC
JalkmspVwnerxTglcIkoWPF2q6AGcNAfxUtUbkWV9yUxUGxizuyXgk1P74iMW/wQ
Op5Nk9oDf7LaAn6z5T3v0SVBgzRUx0ssbWhOMjO/47mGAkapfMNAxq6LYZ1d72SN
yfgkiQMHT8xe0yAqyar6s7hoiHUIeI9EVBEi4NaVQsToIq1vUZHXxuOTPiJvbEnt
ITb6ZoxuZsMsq6Zz+sWEnegY0vU8lc6O82a4LUsDLH0wYKrAujCXpQbTQIpadOte
xS/MuAUxKBhmwhhFwYza3HCXIWcPa4pWCcEUTDNsK47G0M/8CUAa+gbe0zGjcPxF
YNm6+sWdIFnGAZ1+sZlAHkEGJhEWDrWuTCbOCMZXvn5AIgPcmYnUEZf1h98CDAmA
AlZnKLWWkaUhDxgZUabg81Pa8DB9/CPJLXcp24kCOAQTAQIAIgUCUOw+2AIbAwYL
CQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQXxsqB4nxKxF+iQ//VAPdT9oAWU9J
Z8qkX2fupa4j2k0HxpZE7xVs4zOlAINENF+88eo2ZpD8e16BSWsZnCjpnCFeEDVu
eGgfCR4xJ2yPupX96jXzW2KUsf+IuUQP8u7bwcYEgXwuzK/f/1uKxVxFzZdey3MZ
EKD0q+yH08wifOb3OeORdfM4JX4GRBBo+FnNXdaZE2iqUQuZz1WWNdxOrmGvD0Nw
RDnNUiSBH+Egx5lQzLPr1tf1OxRLYQe0759pDc4A9n3WJtnTyYOYUHw4h2np12Yi
9XPKJEvgfZNMlavfz1h/EwHOq2qXdPndn2fb20RFrUGbFPbIeIZvGG9pTKamJ4cU
J2/2Xs+hiJJLhRtD6bXEo5CKZvVX7iniwniFTVshq5I/puvofdnm481+fApIa5vV
0SqDvxmbqprfaIeUapyzuTRAQZDEJVy8kAhL7lXamdBP8QopBKhgGAHYzfk1wdul
PLYPdrcR9x9J4EisxS7VeJZw+MU6JlWX5MXhOnqf6/eF0Xw+OpYEe8Pdc/vAz/m9
PmdNopxkyFXbZXK0Ccyr5xQ9Jc7j8Q9TF8cR814QZ89PhrBhyHuBNLmCmAe8mM3z
zk2v6XSLwBnGZF8HQdK5xckl1zsEa+8KB2FcIrZ64xUMyzEzvxfJINOLY5/h96E5
7CuSD9ol8NxY+7jxtuMvCsGPluRWc/+JAj4EEwECACgCGwMGCwkIBwMCBhUIAgkK
CwQWAgMBAh4BAheABQJYPgAXBQkLFCg+AAoJEF8bKgeJ8SsRrj8P/322xTKdMSU6
BVX6iB6Uy25lrDg/QnOIoOcFmdzmCNgCmUpCTrwtTgTIYJqHHBfyDfhAuRJEQ54Q
NYHN8nb28mNP5/6rEwzfw7GvTUNM4LTybf3Uh90CXeFRZvSwpJWKI5Pb7xkvUxAQ
JnvMUJnY/QxNtzZh+yVPfNjEP/lx8j4dLpjfhA3N8iNXV4d991/KRj/6eFeXvrFv
7H09WTWNThiN0sHMnogiWlwZt2d3JcD9lMo+w/GA7P0sPrtOaWNiV5SNaRfkEjo5
DMaSa7ZeMlXkiXht58hQczOiuErhOYrsyXJBYh08Fc5rEcH1fTZd2gwmcIKG1vJ7
z7FfDwsJGe1w4wgJovisndjIaq9lqCiike/1sHEmsIVshAwvUCH4x4PoAA/A0dnq
9Lk2hYsL5gt3oJUr34+PafmFESSayaQGmNMB8FccgEG2D4VeiDJeHuPfS6+rsxjl
e62EsKswDgMrFlvfjFkvgjLXQrTSTCOF7c3qA/3dWx36P0r25zhBG7TF9dNHpucs
ZRO9m1V0csOea6sbKzZQpktMChzEd5TL/ugjo2yhdTXOxaAuMc2ZwHeB09lDjY6S
hA9pPsxN9vZVoMtkO9NlYguVWUsHKkIfugJTGz1SXub8+cBF4YlX35PvVkooR0fx
Dg/fmhf4XQ7PitFuGRaKv2wn4AQUGoMNuQINBFDsPtgBEAC4FsezxXjdEdhHNrL5
4UZyDxoNX1KoCoAvk4Lz0+eCgj6+hql8K73QDm5cZSBDPurOazlgqXe3LlOOueK7
hxGSmTS5euYreuuBWOGKEK4AwE3XDjcpA2StQABbPbc6SiwA/ID4DhXKKdEcIfF6
oENM3JGvaB4cybnlVR5LyDXIYu51/1s6qqRw2RcqH6WsbPKDabyJhFc5DIl+Vler
nCzfCi7t0elQy0UgUqWjVu7732X2YK2hJ0eDOrOdtla1ioh8YFiS/m6TjsomLbfF
1H7qvQq/xlGPAPV2OvDOaGxTenk3cExUJoWeZi3sFd+XYTvF4pnJmlMy9Tk/uEcq
Yccxbo4j0ivkL+WAPDr8IBSCMPiKF1V3qnRfDshlRlKtmiQ4O2qxP2ijooK/lyaT
w1WHY/V5VuAnf4F2mzng+LIrto257914XByUf84hBzWb8oD+0wYayJlfoxUSsyLv
uTJ+CiAJ26L/3dflmV1KdDxskHIoqhBfjgED5ZZkN+z3heEAoloMed2QKEnKDcsp
CsCZMwl2ThpksB69TV2E8zn1ecLq8haOp4BKbZ0OgYS5+Jbd/EwZ/eng0/LX6G4k
nfh6o7kRO5KhhWKdHyKfNjHOm7KlZWJGMgH+jtjQrAtjkiO+6eMTezic/2qqD7YH
vCUcIqfy2jB+6ENYReFGWLyO7QARAQABiQIfBBgBAgAJBQJQ7D7YAhsMAAoJEF8b
KgeJ8SsRE58P/2YsYyXkie63yNDt8Qof/z17x9WmqkBpq3CYIc+VpwyOidn7wvNQ
1gKaflbK0eVs+8xmx0Jl4wOSDmmG5iyzVtjQouyKRs0IeQGcV5vEt+AsJa9Syr1L
7TZpddYJZweyoB60bhw+9XAdBFo8+ihlLU1vKsC84VLUE2wIcobr3K5a1ZIa9kJW
Q5I80YUe3lp0bkJxNqgla22AtTVBb56ToyKeJfC25VTXu8IdTYWZupgWZX1KwYF5
Qvx8wA4cS6VDb+5Og6PBxutZR6fnmlc3hM5a8a6SNZzWRNby/zSfTACGDp7z63IJ
nCFUDo39TXFNi8LK8d3+z/x/yQ4XCxC8wJ5YSZrvWnFTpaRJZIvEt+UaDsQzT94T
8xYT+EB6wcMvKhoKOcbg6p5N2EjIFEd+20HNLKT03vumUz4/9drCZF7XKJ/1j4xa
4WimGJ9hlg8ynb7X3RIUr8qdowgsPVmFd8en0RAGQm4jzTTYBC4DS8aaKohCW9nk
IcVeHw3lpzmQWOHXGy/GoVKkcOH+LXy5PPZNVtEVrbMZxVZfOooww6dqUCgpnW0k
STLv9mTRvzGfOCQbyhgudTcygng57c+OqCja42fp0pW/v8oriTypNzSSrip4HAOC
lQj1cLG1UQMqOIonPBhmSHxaj/WWbasLBp/uQUkIWegIY9lsz1QaZs2P
=oPHw
-----END PGP PUBLIC KEY BLOCK-----

Reply via email to