aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Matuska <mm@FreeBSD.org>2019-06-28 22:36:27 +0000
committerMartin Matuska <mm@FreeBSD.org>2019-06-28 22:36:27 +0000
commitdcb89611eb6f6b4084a59c345e95af378d29acb9 (patch)
treed4df181d738bc2510618a326b521dac31ff80031
parenta8a6dc7af6cc285fc53ecb05418487c8018dbca5 (diff)
downloadsrc-dcb89611eb6f6b4084a59c345e95af378d29acb9.tar.gz
src-dcb89611eb6f6b4084a59c345e95af378d29acb9.zip
MFC r348993,349135:
Sync libarchive with vendor including security fixes r348993: - version bumped to 3.4.0 - check_symlinks_fsobj() without chdir() and fchdir() - bsdtar.1 manpage fixes - patches from OpenBSD to libarchive_fe/passphrase.c r349135: PR #1212: RAR5 reader - window_mask was not updated correctly (OSS-Fuzz 15278) OSS-Fuzz 15120: RAR reader - extend use after free bugfix
Notes
Notes: svn path=/stable/10/; revision=349525
-rw-r--r--contrib/libarchive/NEWS6
-rw-r--r--contrib/libarchive/README.md1
-rw-r--r--contrib/libarchive/libarchive/archive.h4
-rw-r--r--contrib/libarchive/libarchive/archive_entry.h2
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_format_rar.c1
-rw-r--r--contrib/libarchive/libarchive/archive_read_support_format_rar5.c17
-rw-r--r--contrib/libarchive/libarchive/archive_write_add_filter_b64encode.c10
-rw-r--r--contrib/libarchive/libarchive/archive_write_disk_posix.c173
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar.c29
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar5.c21
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar5_different_window_size.rar.uu675
-rw-r--r--contrib/libarchive/libarchive/test/test_read_format_rar_ppmd_use_after_free2.rar.uu10
-rw-r--r--contrib/libarchive/libarchive_fe/line_reader.c3
-rw-r--r--contrib/libarchive/libarchive_fe/passphrase.c95
-rw-r--r--contrib/libarchive/tar/bsdtar.133
-rw-r--r--lib/libarchive/config_freebsd.h1
-rw-r--r--lib/libarchive/tests/Makefile2
-rw-r--r--usr.bin/bsdcat/Makefile2
-rw-r--r--usr.bin/cpio/Makefile2
-rw-r--r--usr.bin/tar/Makefile2
20 files changed, 972 insertions, 117 deletions
diff --git a/contrib/libarchive/NEWS b/contrib/libarchive/NEWS
index e2d96aebd714..222532d1e978 100644
--- a/contrib/libarchive/NEWS
+++ b/contrib/libarchive/NEWS
@@ -1,3 +1,7 @@
+Jun 11, 2019: libarchive 3.4.0 released
+
+May 18, 2019: Fixes for reading Android APK and JAR archives
+
Apr 16, 2019: Support for non-recursive list and extract
Apr 14, 2019: New tar option: --exclude-vcs
@@ -6,7 +10,7 @@ Mar 27, 2019: Support for file and directory symlinks on Windows
Mar 12, 2019: Important fixes for storing file attributes and flags
-Jan 20, 2019: Support for xz, lzma, ppmd8 and bzip2 compression in zip archives
+Jan 20, 2019: Support for xz, lzma, ppmd8 and bzip2 decompression in ZIP files
Oct 06, 2018: RAR 5.0 reader
diff --git a/contrib/libarchive/README.md b/contrib/libarchive/README.md
index df19125f9030..2912b3d0a61e 100644
--- a/contrib/libarchive/README.md
+++ b/contrib/libarchive/README.md
@@ -81,6 +81,7 @@ Currently, the library automatically detects and reads the following fomats:
* Binary cpio (big-endian or little-endian)
* ISO9660 CD-ROM images (with optional Rockridge or Joliet extensions)
* ZIP archives (with uncompressed or "deflate" compressed entries, including support for encrypted Zip archives)
+ * ZIPX archives (with support for bzip2, ppmd8, lzma and xz compressed entries)
* GNU and BSD 'ar' archives
* 'mtree' format
* 7-Zip archives
diff --git a/contrib/libarchive/libarchive/archive.h b/contrib/libarchive/libarchive/archive.h
index 55c9ce38d296..d83f2b32fd26 100644
--- a/contrib/libarchive/libarchive/archive.h
+++ b/contrib/libarchive/libarchive/archive.h
@@ -36,7 +36,7 @@
* assert that ARCHIVE_VERSION_NUMBER >= 2012108.
*/
/* Note: Compiler will complain if this does not match archive_entry.h! */
-#define ARCHIVE_VERSION_NUMBER 3003003
+#define ARCHIVE_VERSION_NUMBER 3004000
#include <sys/stat.h>
#include <stddef.h> /* for wchar_t */
@@ -155,7 +155,7 @@ __LA_DECL int archive_version_number(void);
/*
* Textual name/version of the library, useful for version displays.
*/
-#define ARCHIVE_VERSION_ONLY_STRING "3.3.3"
+#define ARCHIVE_VERSION_ONLY_STRING "3.4.0"
#define ARCHIVE_VERSION_STRING "libarchive " ARCHIVE_VERSION_ONLY_STRING
__LA_DECL const char * archive_version_string(void);
diff --git a/contrib/libarchive/libarchive/archive_entry.h b/contrib/libarchive/libarchive/archive_entry.h
index 25300e927b98..5a6df1ad6a16 100644
--- a/contrib/libarchive/libarchive/archive_entry.h
+++ b/contrib/libarchive/libarchive/archive_entry.h
@@ -30,7 +30,7 @@
#define ARCHIVE_ENTRY_H_INCLUDED
/* Note: Compiler will complain if this does not match archive.h! */
-#define ARCHIVE_VERSION_NUMBER 3003003
+#define ARCHIVE_VERSION_NUMBER 3004000
/*
* Note: archive_entry.h is for use outside of libarchive; the
diff --git a/contrib/libarchive/libarchive/archive_read_support_format_rar.c b/contrib/libarchive/libarchive/archive_read_support_format_rar.c
index a32720e0c535..3a87a7042b33 100644
--- a/contrib/libarchive/libarchive/archive_read_support_format_rar.c
+++ b/contrib/libarchive/libarchive/archive_read_support_format_rar.c
@@ -1026,6 +1026,7 @@ archive_read_format_rar_read_data(struct archive_read *a, const void **buff,
if (ret != ARCHIVE_OK && ret != ARCHIVE_WARN) {
__archive_ppmd7_functions.Ppmd7_Free(&rar->ppmd7_context);
rar->start_new_table = 1;
+ rar->ppmd_valid = 0;
}
break;
diff --git a/contrib/libarchive/libarchive/archive_read_support_format_rar5.c b/contrib/libarchive/libarchive/archive_read_support_format_rar5.c
index 7c24627b186c..95579e15cf05 100644
--- a/contrib/libarchive/libarchive/archive_read_support_format_rar5.c
+++ b/contrib/libarchive/libarchive/archive_read_support_format_rar5.c
@@ -1125,6 +1125,13 @@ static void init_header(struct archive_read* a) {
a->archive.archive_format_name = "RAR5";
}
+static void init_window_mask(struct rar5* rar) {
+ if (rar->cstate.window_size)
+ rar->cstate.window_mask = rar->cstate.window_size - 1;
+ else
+ rar->cstate.window_mask = 0;
+}
+
enum HEADER_FLAGS {
HFL_EXTRA_DATA = 0x0001,
HFL_DATA = 0x0002,
@@ -1672,6 +1679,7 @@ static int process_head_file(struct archive_read* a, struct rar5* rar,
/* Values up to 64M should fit into ssize_t on every
* architecture. */
rar->cstate.window_size = (ssize_t) window_size;
+ init_window_mask(rar);
rar->file.solid = (compression_info & SOLID) > 0;
rar->file.service = 0;
@@ -2235,10 +2243,7 @@ static int rar5_read_header(struct archive_read *a,
static void init_unpack(struct rar5* rar) {
rar->file.calculated_crc32 = 0;
- if (rar->cstate.window_size)
- rar->cstate.window_mask = rar->cstate.window_size - 1;
- else
- rar->cstate.window_mask = 0;
+ init_window_mask(rar);
free(rar->cstate.window_buf);
free(rar->cstate.filtered_buf);
@@ -2851,7 +2856,7 @@ static int do_uncompress_block(struct archive_read* a, const uint8_t* p) {
* - Values lower than 256 are just bytes. Those codes
* can be stored in the output buffer directly.
*
- * - Code 256 defines a new filter, which is later used to
+ * - Code 256 defines a new filter, which is later used to
* ransform the data block accordingly to the filter type.
* The data block needs to be fully uncompressed first.
*
@@ -3906,7 +3911,7 @@ static int rar5_read_data_skip(struct archive_read *a) {
/* Turn off "skip mode". */
rar->skip_mode--;
- if(ret < 0) {
+ if(ret < 0 || ret == ARCHIVE_EOF) {
/* Propagate any potential error conditions
* to the caller. */
return ret;
diff --git a/contrib/libarchive/libarchive/archive_write_add_filter_b64encode.c b/contrib/libarchive/libarchive/archive_write_add_filter_b64encode.c
index 85eb087b0522..b46b19a0c74d 100644
--- a/contrib/libarchive/libarchive/archive_write_add_filter_b64encode.c
+++ b/contrib/libarchive/libarchive/archive_write_add_filter_b64encode.c
@@ -60,7 +60,7 @@ static int archive_filter_b64encode_write(struct archive_write_filter *,
const void *, size_t);
static int archive_filter_b64encode_close(struct archive_write_filter *);
static int archive_filter_b64encode_free(struct archive_write_filter *);
-static void b64_encode(struct archive_string *, const unsigned char *, size_t);
+static void la_b64_encode(struct archive_string *, const unsigned char *, size_t);
static int64_t atol8(const char *, size_t);
static const char base64[] = {
@@ -180,7 +180,7 @@ archive_filter_b64encode_open(struct archive_write_filter *f)
}
static void
-b64_encode(struct archive_string *as, const unsigned char *p, size_t len)
+la_b64_encode(struct archive_string *as, const unsigned char *p, size_t len)
{
int c;
@@ -234,12 +234,12 @@ archive_filter_b64encode_write(struct archive_write_filter *f, const void *buff,
}
if (state->hold_len < LBYTES)
return (ret);
- b64_encode(&state->encoded_buff, state->hold, LBYTES);
+ la_b64_encode(&state->encoded_buff, state->hold, LBYTES);
state->hold_len = 0;
}
for (; length >= LBYTES; length -= LBYTES, p += LBYTES)
- b64_encode(&state->encoded_buff, p, LBYTES);
+ la_b64_encode(&state->encoded_buff, p, LBYTES);
/* Save remaining bytes. */
if (length > 0) {
@@ -270,7 +270,7 @@ archive_filter_b64encode_close(struct archive_write_filter *f)
/* Flush remaining bytes. */
if (state->hold_len != 0)
- b64_encode(&state->encoded_buff, state->hold, state->hold_len);
+ la_b64_encode(&state->encoded_buff, state->hold, state->hold_len);
archive_string_sprintf(&state->encoded_buff, "====\n");
/* Write the last block */
archive_write_set_bytes_in_last_block(f->archive, 1);
diff --git a/contrib/libarchive/libarchive/archive_write_disk_posix.c b/contrib/libarchive/libarchive/archive_write_disk_posix.c
index dbc6d35348f8..3b3146e98f55 100644
--- a/contrib/libarchive/libarchive/archive_write_disk_posix.c
+++ b/contrib/libarchive/libarchive/archive_write_disk_posix.c
@@ -165,6 +165,10 @@ __FBSDID("$FreeBSD$");
#define O_NOFOLLOW 0
#endif
+#ifndef AT_FDCWD
+#define AT_FDCWD -100
+#endif
+
struct fixup_entry {
struct fixup_entry *next;
struct archive_acl acl;
@@ -348,6 +352,8 @@ struct archive_write_disk {
#define HFS_BLOCKS(s) ((s) >> 12)
+
+static int la_opendirat(int, const char *);
static void fsobj_error(int *, struct archive_string *, int, const char *,
const char *);
static int check_symlinks_fsobj(char *, int *, struct archive_string *,
@@ -401,6 +407,37 @@ static ssize_t _archive_write_disk_data_block(struct archive *, const void *,
size_t, int64_t);
static int
+la_opendirat(int fd, const char *path) {
+ const int flags = O_CLOEXEC
+#if defined(O_BINARY)
+ | O_BINARY
+#endif
+#if defined(O_DIRECTORY)
+ | O_DIRECTORY
+#endif
+#if defined(O_PATH)
+ | O_PATH
+#elif defined(O_SEARCH)
+ | O_SEARCH
+#elif defined(O_EXEC)
+ | O_EXEC
+#else
+ | O_RDONLY
+#endif
+ ;
+
+#if !defined(HAVE_OPENAT)
+ if (fd != AT_FDCWD) {
+ errno = ENOTSUP;
+ return (-1);
+ } else
+ return (open(fd, path, flags));
+#else
+ return (openat(fd, path, flags));
+#endif
+}
+
+static int
lazy_stat(struct archive_write_disk *a)
{
if (a->pst != NULL) {
@@ -1893,7 +1930,7 @@ edit_deep_directories(struct archive_write_disk *a)
return;
/* Try to record our starting dir. */
- a->restore_pwd = open(".", O_RDONLY | O_BINARY | O_CLOEXEC);
+ a->restore_pwd = la_opendirat(AT_FDCWD, ".");
__archive_ensure_cloexec_flag(a->restore_pwd);
if (a->restore_pwd < 0)
return;
@@ -2317,7 +2354,7 @@ _archive_write_disk_close(struct archive *_a)
{
struct archive_write_disk *a = (struct archive_write_disk *)_a;
struct fixup_entry *next, *p;
- int ret;
+ int fd, ret;
archive_check_magic(&a->archive, ARCHIVE_WRITE_DISK_MAGIC,
ARCHIVE_STATE_HEADER | ARCHIVE_STATE_DATA,
@@ -2328,21 +2365,33 @@ _archive_write_disk_close(struct archive *_a)
p = sort_dir_list(a->fixup_list);
while (p != NULL) {
+ fd = -1;
a->pst = NULL; /* Mark stat cache as out-of-date. */
+ if (p->fixup &
+ (TODO_TIMES | TODO_MODE_BASE | TODO_ACLS | TODO_FFLAGS)) {
+ fd = open(p->name,
+ O_WRONLY | O_BINARY | O_NOFOLLOW | O_CLOEXEC);
+ }
if (p->fixup & TODO_TIMES) {
- set_times(a, -1, p->mode, p->name,
+ set_times(a, fd, p->mode, p->name,
p->atime, p->atime_nanos,
p->birthtime, p->birthtime_nanos,
p->mtime, p->mtime_nanos,
p->ctime, p->ctime_nanos);
}
- if (p->fixup & TODO_MODE_BASE)
+ if (p->fixup & TODO_MODE_BASE) {
+#ifdef HAVE_FCHMOD
+ if (fd >= 0)
+ fchmod(fd, p->mode);
+ else
+#endif
chmod(p->name, p->mode);
+ }
if (p->fixup & TODO_ACLS)
- archive_write_disk_set_acls(&a->archive, -1, p->name,
- &p->acl, p->mode);
+ archive_write_disk_set_acls(&a->archive, fd,
+ p->name, &p->acl, p->mode);
if (p->fixup & TODO_FFLAGS)
- set_fflags_platform(a, -1, p->name,
+ set_fflags_platform(a, fd, p->name,
p->mode, p->fflags_set, 0);
if (p->fixup & TODO_MAC_METADATA)
set_mac_metadata(a, p->name, p->mac_metadata,
@@ -2351,6 +2400,8 @@ _archive_write_disk_close(struct archive *_a)
archive_acl_clear(&p->acl);
free(p->mac_metadata);
free(p->name);
+ if (fd >= 0)
+ close(fd);
free(p);
p = next;
}
@@ -2515,8 +2566,6 @@ fsobj_error(int *a_eno, struct archive_string *a_estr,
* scan the path and both can be optimized by comparing against other
* recent paths.
*/
-/* TODO: Extend this to support symlinks on Windows Vista and later. */
-
/*
* Checks the given path to see if any elements along it are symlinks. Returns
* ARCHIVE_OK if there are none, otherwise puts an error in errmsg.
@@ -2525,7 +2574,8 @@ static int
check_symlinks_fsobj(char *path, int *a_eno, struct archive_string *a_estr,
int flags)
{
-#if !defined(HAVE_LSTAT)
+#if !defined(HAVE_LSTAT) && \
+ !(defined(HAVE_OPENAT) && defined(HAVE_FSTATAT) && defined(HAVE_UNLINKAT))
/* Platform doesn't have lstat, so we can't look for symlinks. */
(void)path; /* UNUSED */
(void)error_number; /* UNUSED */
@@ -2540,7 +2590,10 @@ check_symlinks_fsobj(char *path, int *a_eno, struct archive_string *a_estr,
char c;
int r;
struct stat st;
- int restore_pwd;
+ int chdir_fd;
+#if defined(HAVE_OPENAT) && defined(HAVE_FSTATAT) && defined(HAVE_UNLINKAT)
+ int fd;
+#endif
/* Nothing to do here if name is empty */
if(path[0] == '\0')
@@ -2561,9 +2614,9 @@ check_symlinks_fsobj(char *path, int *a_eno, struct archive_string *a_estr,
* c holds what used to be in *tail
* last is 1 if this is the last tail
*/
- restore_pwd = open(".", O_RDONLY | O_BINARY | O_CLOEXEC);
- __archive_ensure_cloexec_flag(restore_pwd);
- if (restore_pwd < 0) {
+ chdir_fd = la_opendirat(AT_FDCWD, ".");
+ __archive_ensure_cloexec_flag(chdir_fd);
+ if (chdir_fd < 0) {
fsobj_error(a_eno, a_estr, errno,
"Could not open ", path);
return (ARCHIVE_FATAL);
@@ -2596,7 +2649,11 @@ check_symlinks_fsobj(char *path, int *a_eno, struct archive_string *a_estr,
c = tail[0];
tail[0] = '\0';
/* Check that we haven't hit a symlink. */
+#if defined(HAVE_OPENAT) && defined(HAVE_FSTATAT) && defined(HAVE_UNLINKAT)
+ r = fstatat(chdir_fd, head, &st, AT_SYMLINK_NOFOLLOW);
+#else
r = lstat(head, &st);
+#endif
if (r != 0) {
tail[0] = c;
/* We've hit a dir that doesn't exist; stop now. */
@@ -2622,7 +2679,19 @@ check_symlinks_fsobj(char *path, int *a_eno, struct archive_string *a_estr,
}
} else if (S_ISDIR(st.st_mode)) {
if (!last) {
- if (chdir(head) != 0) {
+#if defined(HAVE_OPENAT) && defined(HAVE_FSTATAT) && defined(HAVE_UNLINKAT)
+ fd = la_opendirat(chdir_fd, head);
+ if (fd < 0)
+ r = -1;
+ else {
+ r = 0;
+ close(chdir_fd);
+ chdir_fd = fd;
+ }
+#else
+ r = chdir(head);
+#endif
+ if (r != 0) {
tail[0] = c;
fsobj_error(a_eno, a_estr, errno,
"Could not chdir ", path);
@@ -2639,7 +2708,12 @@ check_symlinks_fsobj(char *path, int *a_eno, struct archive_string *a_estr,
* so we can overwrite it with the
* item being extracted.
*/
- if (unlink(head)) {
+#if defined(HAVE_OPENAT) && defined(HAVE_FSTATAT) && defined(HAVE_UNLINKAT)
+ r = unlinkat(chdir_fd, head, 0);
+#else
+ r = unlink(head);
+#endif
+ if (r != 0) {
tail[0] = c;
fsobj_error(a_eno, a_estr, errno,
"Could not remove symlink ",
@@ -2669,7 +2743,12 @@ check_symlinks_fsobj(char *path, int *a_eno, struct archive_string *a_estr,
break;
} else if (flags & ARCHIVE_EXTRACT_UNLINK) {
/* User asked us to remove problems. */
- if (unlink(head) != 0) {
+#if defined(HAVE_OPENAT) && defined(HAVE_FSTATAT) && defined(HAVE_UNLINKAT)
+ r = unlinkat(chdir_fd, head, 0);
+#else
+ r = unlink(head);
+#endif
+ if (r != 0) {
tail[0] = c;
fsobj_error(a_eno, a_estr, 0,
"Cannot remove intervening "
@@ -2687,7 +2766,11 @@ check_symlinks_fsobj(char *path, int *a_eno, struct archive_string *a_estr,
* This is needed to extract hardlinks over
* symlinks.
*/
+#if defined(HAVE_OPENAT) && defined(HAVE_FSTATAT) && defined(HAVE_UNLINKAT)
+ r = fstatat(chdir_fd, head, &st, 0);
+#else
r = la_stat(head, &st);
+#endif
if (r != 0) {
tail[0] = c;
if (errno == ENOENT) {
@@ -2700,7 +2783,19 @@ check_symlinks_fsobj(char *path, int *a_eno, struct archive_string *a_estr,
break;
}
} else if (S_ISDIR(st.st_mode)) {
- if (chdir(head) != 0) {
+#if defined(HAVE_OPENAT) && defined(HAVE_FSTATAT) && defined(HAVE_UNLINKAT)
+ fd = la_opendirat(chdir_fd, head);
+ if (fd < 0)
+ r = -1;
+ else {
+ r = 0;
+ close(chdir_fd);
+ chdir_fd = fd;
+ }
+#else
+ r = chdir(head);
+#endif
+ if (r != 0) {
tail[0] = c;
fsobj_error(a_eno, a_estr,
errno,
@@ -2736,16 +2831,21 @@ check_symlinks_fsobj(char *path, int *a_eno, struct archive_string *a_estr,
}
/* Catches loop exits via break */
tail[0] = c;
-#ifdef HAVE_FCHDIR
+#if defined(HAVE_OPENAT) && defined(HAVE_FSTATAT) && defined(HAVE_UNLINKAT)
+ /* If we operate with openat(), fstatat() and unlinkat() there was
+ * no chdir(), so just close the fd */
+ if (chdir_fd >= 0)
+ close(chdir_fd);
+#elif HAVE_FCHDIR
/* If we changed directory above, restore it here. */
- if (restore_pwd >= 0) {
- r = fchdir(restore_pwd);
+ if (chdir_fd >= 0) {
+ r = fchdir(chdir_fd);
if (r != 0) {
fsobj_error(a_eno, a_estr, errno,
"chdir() failure", "");
}
- close(restore_pwd);
- restore_pwd = -1;
+ close(chdir_fd);
+ chdir_fd = -1;
if (r != 0) {
res = (ARCHIVE_FATAL);
}
@@ -3362,6 +3462,7 @@ static int
set_mode(struct archive_write_disk *a, int mode)
{
int r = ARCHIVE_OK;
+ int r2;
mode &= 07777; /* Strip off file type bits. */
if (a->todo & TODO_SGID_CHECK) {
@@ -3455,21 +3556,19 @@ set_mode(struct archive_write_disk *a, int mode)
* post-extract fixup, which is handled elsewhere.
*/
#ifdef HAVE_FCHMOD
- if (a->fd >= 0) {
- if (fchmod(a->fd, mode) != 0) {
- archive_set_error(&a->archive, errno,
- "Can't set permissions to 0%o", (int)mode);
- r = ARCHIVE_WARN;
- }
- } else
+ if (a->fd >= 0)
+ r2 = fchmod(a->fd, mode);
+ else
#endif
- /* If this platform lacks fchmod(), then
- * we'll just use chmod(). */
- if (chmod(a->name, mode) != 0) {
- archive_set_error(&a->archive, errno,
- "Can't set permissions to 0%o", (int)mode);
- r = ARCHIVE_WARN;
- }
+ /* If this platform lacks fchmod(), then
+ * we'll just use chmod(). */
+ r2 = chmod(a->name, mode);
+
+ if (r2 != 0) {
+ archive_set_error(&a->archive, errno,
+ "Can't set permissions to 0%o", (int)mode);
+ r = ARCHIVE_WARN;
+ }
}
return (r);
}
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar.c b/contrib/libarchive/libarchive/test/test_read_format_rar.c
index f08b06bc69a3..1425eb9a4570 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_rar.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar.c
@@ -3776,6 +3776,35 @@ DEFINE_TEST(test_read_format_rar_ppmd_use_after_free)
assertA(ARCHIVE_OK == archive_read_next_header(a, &ae));
assertA(archive_read_data(a, buf, sizeof(buf)) <= 0);
+ /* Test EOF */
+ assertA(1 == archive_read_next_header(a, &ae));
+
+ assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
+ assertEqualInt(ARCHIVE_OK, archive_read_free(a));
+}
+
+DEFINE_TEST(test_read_format_rar_ppmd_use_after_free2)
+{
+ uint8_t buf[16];
+ const char* reffile = "test_read_format_rar_ppmd_use_after_free2.rar";
+
+ struct archive_entry *ae;
+ struct archive *a;
+
+ extract_reference_file(reffile);
+ assert((a = archive_read_new()) != NULL);
+ assertA(0 == archive_read_support_filter_all(a));
+ assertA(0 == archive_read_support_format_all(a));
+ assertA(0 == archive_read_open_filename(a, reffile, 10240));
+
+ assertA(ARCHIVE_OK == archive_read_next_header(a, &ae));
+ assertA(archive_read_data(a, buf, sizeof(buf)) <= 0);
+ assertA(ARCHIVE_OK == archive_read_next_header(a, &ae));
+ assertA(archive_read_data(a, buf, sizeof(buf)) <= 0);
+
+ /* Test EOF */
+ assertA(1 == archive_read_next_header(a, &ae));
+
assertEqualIntA(a, ARCHIVE_OK, archive_read_close(a));
assertEqualInt(ARCHIVE_OK, archive_read_free(a));
}
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar5.c b/contrib/libarchive/libarchive/test/test_read_format_rar5.c
index 1408f37c49dc..2a55e2015510 100644
--- a/contrib/libarchive/libarchive/test/test_read_format_rar5.c
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar5.c
@@ -1194,3 +1194,24 @@ DEFINE_TEST(test_read_format_rar5_fileattr)
EPILOGUE();
}
+
+DEFINE_TEST(test_read_format_rar5_different_window_size)
+{
+ char buf[4096];
+ PROLOGUE("test_read_format_rar5_different_window_size.rar");
+
+ /* Return codes of those calls are ignored, because this sample file
+ * is invalid. However, the unpacker shouldn't produce any SIGSEGV
+ * errors during processing. */
+
+ (void) archive_read_next_header(a, &ae);
+ while(0 != archive_read_data(a, buf, sizeof(buf))) {}
+
+ (void) archive_read_next_header(a, &ae);
+ while(0 != archive_read_data(a, buf, sizeof(buf))) {}
+
+ (void) archive_read_next_header(a, &ae);
+ while(0 != archive_read_data(a, buf, sizeof(buf))) {}
+
+ EPILOGUE();
+}
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar5_different_window_size.rar.uu b/contrib/libarchive/libarchive/test/test_read_format_rar5_different_window_size.rar.uu
new file mode 100644
index 000000000000..bb4c4a60415e
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar5_different_window_size.rar.uu
@@ -0,0 +1,675 @@
+begin 600 test_read_format_rar5_different_window_size.rar
+M4F%R(1H'`0"-[P+2``'#M#P\7P$'`0"-[P+2``7#`/KZ^OKZA5N8F)B8F)@`
+MF`*8T@7"F!=A_________P$$_____________________R%285(A&@?_____
+M_________________V@`[E##M#P\7P$'`0"-[P+2``7"87)26`!W=%)A<B$:
+M!P$`C>\"T@`"QP\)`'(A&@<!&B/2+0`"**%285(A&@=A<B$:!P$`C>\"T@`"
+MQP\`"7(AFC`!&B/2+0`"*"%285(A&@<8`0"-[P+2``7#10!A4B$:!Q@!`#)S
+M-/_______U)A<B$:!P$`C>\"T@`"!QS1T='1T='1T='6T='1T='1T='1T='1
+MT='1T='1T='1T='1T=&UQX`.`"'X"/\E``*H'#`"`/+__TO__O_G*_____\`
+M`"\O``#_02+M____`-X`_["&AFVQJ@,#45TW,?;V]@$``/____\3]O;V]O;_
+M_S\``/]!(.VG+R\``/]!(.T)__^PWOS_```O+S$``/8@[;L`````````````
+M-3XR9%Q<7%Q<7%Q<7%Q<7%QZ7%PJ7%Q<7"]<7%Q<7%Q<7%Q<7%Q<7%Q<7%Q<
+M7#)<7#9<,F1I9V5R=#4V,61I870]+@HN"G0@9&5V270@9&1I9V5S7%Q<7'=E
+M9"XR9&EG97)T-38R9&EA=#TN"BX*="!D979)="!D9&EG97-T/2X*+@HN"@HF
+M+BX**%)A<B$:!P$`C>\"T@`"!QS1T='1T='1T='6T='1T='1T='1T='1T='1
+MT='1T='1T='1T=&UQX`.`"'X"/\E``*H'#`"`/+__TO__O_G*_____\``"\O
+M``#_02+M____`-X`_["&AFVQJ@,#45TW,?;V]@$````````3]O;V]O;__S\`
+M`/]!(.VG+R\``/]!(.T)__^PWOS_```O+P```/8@[;L`````````````-38R
+M9%Q<7%Q<7%Q<7%Q<7%QZ7%PJ7%Q<7"]<7%Q<7%Q<7%Q<7%Q<7%Q<7%Q<7#)<
+M7#9<,F1I9V5R=#4V,61I870]+@HN"G0@9&5V270@9&1I9V5S7%Q<7'=E9"XR
+M9&EG97)T-38R9&EA=#TN"BX*="!D979)="!D9&EG97-T/2X*+@HN"@HF+E)A
+M<B$:!P$`C>\"T@`"PP<<K/UN``#___\+`0`"(<O_`0(`+W-E="!T:6UE`/[_
+M_^P`````````````````````````````````````````````````````````
+M````````````````````````````````````````!0``````````````````
+M````````````````````````````````````````````````````````````
+M`````#\56BUL:#4M#0````%L<0!SI/\````!]9^?G_*?`9_?GY_U0.`56BUL
+M:```````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````&UM)C$@4@H#`\[_CQ5:+6QH-BTZ,PD@.W-L<0'(_P(````!
+M#B<G````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````]_\`````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````````````````````````````````P,#`P,#`P,#`P,#`P,#
+M`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M```````````````````X-S(M,#$E,U0S.GH``O__/\/#P\/#P\/#P\/#(@##
+MP\/#PP'#P\/#P\/#P___________________________________________
+M____________________________]/_______\/#P\/#P\/#P\/#P\/#+</#
+MP\/#P^KJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJ
+MZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZF1I9V5S=#TN"BX*+@H*)BXN
+M"B@*+BX**`HN"BX*+C`**`H*+@HN+E!<-3,R4>KJZNKJZNKJZNKJZNKJZNKJ
+MZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNK#P\/#P\/#P\/#R\-MP\/#
+MP\/#P\/#P\/#P\/#P\/#`</#P\/#P\/#____________________________
+M_________________________________________S8R9&EG97)T6STN"BX*
+M+@H*)F5V:6,V_________\/#P\/#P\/#P\/#P\/#+</#P\/#P\/#P\/#PS8N
+M"@HN"@HN+PHR,#<P-S`O<TYT("!@<W0]P\/#P\/#P\/#PP`0:#HR,PT*;%=O
+M861?;"X*+@IG89P`,#`P,#`P,#`P,#`P,#`P,#`!`#`W,#<P,C`P,#`P,#`P
+M,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,$,P,#`P,#`P,#`P,#`P
+M,#`P,#`P-3`P,#`X,#`P,#`P,#`P13`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P
+M,#`P,#`P`0`"*"%285(A&@<8`0"-[P+2``7#`!H'``1G``````````#O`M(`
+M`L</``D`+@DR'`#]`0`7__\)`"X),AP`_0$`%___$5)A<B'_$5)A<B$:AP$`
+MC>\"T@`#QP\`"2$:TB,M``(H(5)A4B$:!Q@!`(WO`M(`!0``````````````
+M`````````0``````_____P#_965E965E965E965E965E965E8'-T/2X*+@HN
+M"C(P-S`W,&EA='EA<B$*+@H*)BXF+@HH"BX*+@HN4%XO83(U:39D9V5S=#TN
+M"BX*+@H*)BXN"@H*)BXN"B@*+@HN"BY07#4S,C8R9"]S3G0@(%MS=#T]+@HN
+M"BX*"B8N+@HH"BX*+@HN4%PU,S(V(2$A(2$A(2$A(2$A(2$A(2$A(2$A(2$A
+M(2$A(2$A(2$A(2$A(2$A(2$A(2$A(2$A(2$A(2$A(2$A(2$A(2$A(2$A(2$A
+M(2$A(2X*"B8N+BY<-EPR9&EG97)T-38R9&EA=#TN"BX*="XN+@HH"BX*+@HN
+M4%QH83(U-F0N+PHR,"4P-S`O<TYT("!D<W0]+@HN"BX*"B9T/2X*+@HN"@H*
+M)BX*+BXH+PHN"BY07&AA,C4V9&EG97-T/2X*+@HN"@HF+BX**`H_+@HN"BY0
+M7%Q<7%Q<7%Q<7%Q<,C8R9&EG97)T-38R9%Q<7%Q<7%Q<7%Q<7%QZ7%PJ7%Q<
+M7%Q<7%Q<7%Q<7%Q<7%Q<7%Q<7%Q<7#)<7#9<,F1I9V5R=#4V,F1I870]+@HN
+M"G0@9&5V270@9&1I9V5S=#TN"BX*+@H*)BXN"B@*+BX**`HN"BX]+@HN"BX*
+M"B8N+@HH"BX*+@HN4%Q<7%Q<7%Q<7%Q<7#(V,F1I9V5R=#4V,F1<7%Q<7%Q<
+M7%Q<7%Q<>EQ<*EQ<7%PO7%Q<7%Q<7%Q<7%Q<7%Q<7%Q<7%PR7%PV7#!D:6=E
+M<G0U-C%D:6%T/2X*+@IT(&1E=DET(&0Z[NXZ,````"L-"E=!4D,M1&%T93H)
+M,3@W,BTP-RTS5#,Z-SHU6@T*#0I#BVYT^)=7=#%Z5T%20R\Q+C`-"D-O;G1E
+M;G0M3&5N9W1H.C`V#0I7*5=!4B\O.ZRL-&X*05)#+ZRL@9$-"DQA<W0M36]D
+M:69I960Z"3$X-S(M,#$E,U0S.GH``O__/\/#P\/#P\/#P\/#(@##P\/#PP'#
+MP\/#P\/#P______________________________________#P\/#P\/#P\,`
+M$&@Z,C,-"FQ7;V%D7VPN"BX*9V&<`#`P,#`P,#`P,#`P,#`P,#`P`0`P-S`W
+M,#(P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#!#,#`P
+M,#`P,#`P,#`P,#`P,#`P,#4P,#`P.#`P,#`P,#`P,$4P,#`P,#`P,#`P,#`P
+M,#`P,#`P,#`P,#`P,#`P,`$``B@A4F%2(1H'&`$`C>\"T@`%PP`:!P`$9P``
+M````````[P+2``+'#P`)`"X),AP`_0$`%___"0`N"3(<`/T!`!?__Q%287(A
+M_Q%287(A&H<!`(WO`M(``\</``DA&M(C+0`"*"%285(A&@<8`0"-[P+2``4`
+M``````````````````````$``````/____\``"\O``#_02#M____L-X`_P"&
+MAK%M]O;V`ZK^]O_/_P#$OM\1]O__L`#M4?\O45%/>\Q`"@HW,@```/V-[P+2
+M``+'`"X),1P`_0$`%___$5)A<@$`C>\"T@`%PP`:!P`$9P``````````[P+2
+M``+'#P`)`"X),AP`_0$`%___$5)A<B$:!P$`C>\"T@`#QP\`"2$:TB,M``DA
+M&M(C+0`"*"%285(A&@<8`0"-[P+2``7#`!H'`/R8__]E965E965E965E965E
+M965E965@<W0]+@HN"BX*,C`W,#<P:6%T>6%R(0HN"@HF+B8N"B@*+@HN"BY0
+M7B]A,C5I-F1G97-T/2X*+@HN"@HF+BX*"@HF+BX**`HN"BX*+E!<-3,R-C)D
+M+W-.="`@6W-T/3TN"BX*+@H*)BXN"B@*+@HN"BY07#4S,C8A(2$A(2$A(2$A
+M(2$A(2$A(2$A(2$A(2$A(2$A(2$A(2$A(2$A(2$A(2$A(2$A(2$A(2$A(2$A
+M(2$A(2$A(2$A(2$A(2$A(2$A+@H*)BXN+EPV7#)D:6=E<G0U-C)D:6%T/2X*
+M+@IT+BXN"B@*+@HN"BY07&AA,C4V9"XO"C(P)3`W,"]S3G0@(&1S=#TN"BX*
+M+@H*)G0]+@HN"BX*"@HF+@HN+B@O"BX*+E!<:&$R-39D:6=E<W0]+@HN"BX*
+M"B8N+@HH"C\N"BX*+E!<7%Q<7%Q<7%Q<7%PR-C)D:6=E<G0U-C)D7%Q<7%Q<
+M7%Q<7%Q<7'I<7"I<7%Q<7%Q<7%Q<7%Q<7%Q<7%Q<7%Q<7%Q<,EQ<-EPR9&EG
+M97)T-38R9&EA=#TN"BX*="!D979)="!D9&EG97-T/2X*+@HN"@HF+BX**`HN
+M+@HH"BX*+CTN"BX*+@H*)BXN"B@*+@HN"BY07%Q<7%Q<7%Q<7%Q<,C8R9&EG
+M97)T-38R9%Q<7%Q<7%Q<7%Q<7%QZ7%PJ7%Q<7"]<7%Q<7%Q<7%Q<7%Q<7%Q<
+M7%Q<7#)<7#9<,&1I9V5R=#4V,61I870]+@HN"G0@9&5V270@9#KN[CHP````
+M*PT*5T%20RU$871E.@DQ.#<R+3`W+3-4,SHW.C5:#0H-"D.+;G3XEU=T,7I7
+M05)#+S$N,`T*0V]N=&5N="U,96YG=&@Z,#8-"E<I5T%2+R\[K*PT;@I!4D,O
+MK*R!D0T*3&%S="U-;V1I9FEE9#H),3@W,BTP,24S5#,Z>@`"__\_P\/#P\/#
+MP\/#P\,B`,/#P\/#`</#P\/#P\/#________________________________
+M_______________________________________T________P\/#P\/#P\/#
+MP\/#P\,MP\/#P\/#ZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJ
+MZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJ9&EG97-T/2X*
+M+@HN"@HF+BX**`HN+@HH"BX*+@HN,`HH"@HN"BXN4%PU,S)1ZNKJZNKJZNKJ
+MZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZNKJZL/#P\/#P\/#
+MP\/+PVW#P\/#P\/#P\/#P\/#P\/#P\,!P\/#P\/#P\/_________________
+M____________________________________________________-C)D:6=E
+M<G1;/2X*+@HN"@HF979I8S;_________P\/#P\/#P\/#P\/#P\,MP\/#P\/#
+MP\/#P\/#-BX*"BX*"BXO"C(P-S`W,"]S3G0@(&!S=#W#P\/#P\/#P\/#`!!H
+M.C(S#0IL5V]A9%]L+@HN"F=AG``P,#`P,#`P,#`P,#`P,#`P,`$`,#<P-S`R
+M,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P,#`P0S`P,#`P
+M,#`P,#`P,#`P,#`P,#`U,#`P,#@P,#`P,#`P,#!%,#`P,#`P,#`P,#`P,#`P
+M,#`P,#`P,#`P,#`P,#`!``(H(5)A4B$:!Q@!`(WO`M(`!<,`&@<`!&<`````
+M`````.\"T@`"QP\`"0`N"3(<`/T!`!?__PD`+@DR'`#]`0`7__\14F%R(?\1
+M4F%R(1J'`0"-[P+2``/'#P`)(1K2(RT``B@A4F%2(1H'&`$`C>\"T@`%````
+M```````````````````!``````#_____```O+P``_T$@[?___[#>`/\`AH:Q
+M;?;V]@.J_O;_S_\`Q+[?$?;?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?___?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W_^[XP##
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M``````````````````````````````````````````````````#_________
+M__________________________________________\`````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````````````````"``````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````````````````````````````````````````+8`````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M``````````````````````````````````````````````````!287(A&@<!
+M`(WO`M(``L,''(`'`0#__PL!``(ARP$"`````/\`_P$`<<?_____________
+M______________________\!`````````/________\!````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````````````````````````0``````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````_/\`````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````-_?W]_?W]_?W]_?W]_?W]_?#]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]\A("`@("`@(-_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]]V````W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?WT%.4TE?6-_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]O?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]]?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?WP``````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````````````````````````````````/__________________
+M____________________________________________________````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M``0`````````````````````````````````````````````````````````
+M`````````````````````````````````````````````P``````````````
+M``````````!A86$`````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````,#`S,#@Q-@`P,S<T-3,T`#`P,3$V,3``,#`P
+M,#`P,#`P,#<`,3(U,S$Q-#4S-S$`(#$R,#<Q`"`Q````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````````````````````````````````````````````'5S=&!R
+M`#`Q9'9Y=6MO=@````````````````````````````````!E;F<`````````
+M``````````#_`0```````````````#`P,``P,#`P,#`P,#`P,```````````
+M````````````````````````````````````````````````````````````
+M````````````````]P``````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````````````````````````#,*`````````````0```````!``
+M```````````````````$T031T4T```"`__\U*Q8T`````````-_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?W]_?
+MW]_?W]_?W]_?W]_?W]_?````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````F-(%PIAT;W!D:7+___\!!/__________
+M__________\A4F%2(1H'__________________\A4F%2(1H'____________
+M__________]H`.Y0P[0\/%\!!P$`C>\"T@`%PF%R4E@`=W1287(A&@<!`(WO
+M`M(``L</"0!R(1H'`1HCTCH``BBA75U=75U=75U=75U=75U=75U=75U=75T`
+M````````````````````````````````````````````````````````````
+M````````````````!````````````@``````````````````````````````
+M````````````````*```````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````````'X````````````````````````````````````````$
+M(DT81'`=#P(`@'''`.[_________________________________________
+M_________________WP$________________________________________
+M_____________________________________________________[T``+JK
+MVP&ZNKJZ_____________S#_________________________````%@``````
+M``!^?GY^?GY^?GY^?GY^?GY^?GY^?GY^_________PI^?GY^?GY^?GY^?@`!
+M+?____8M+2TM"@H*"C(*"@H*"@H*"CT*"@H*"@H*"@H*"@H*"@!7(B___PS#
+M/0`P`&$!`&%A86">EFZ>45J>E"(8*1QP&#AP1O__`````!X`````````````
+MNKJZNKJZN@'U``"R____`````!X```"`````````````````````````````
+M`"Q!`````````"T`%0``:#H`6@$M<VPW-@#($0````````#BH0!C:3``,@!E
+M,0``________________````````````"@H*"@```%U=75U=75U=75U=75U=
+M70```````````````````````````````````%)A<B$:!P$`C>\"T@`"PP<<
+MP@2```#_;24``F<<`0(`#@```0!02P@#`"8F)@!`___/0T+_____\?__K2-T
+M='3_______[______R9"____,3,U__\3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3
+M$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$R8J8BQB`/______0D)"0D)"0D)"0D)"0D)"
+M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D+;V]O;V]O;V]O;V]O;-C8V
+M-C8V&4PA`C8V-C8V-C8V-C8V-C8V&4PA`C8V-C8V-C8V-C8V-C8H*"@H*"@H
+M*"@H*"@H(1H'`0"-[P(H*"@H*"@V-C8V-C8V-C8V-I8V-C8V-C8V-MO;VP``
+M````````````````````````````V]O;V]L`VP````#;V]L`VR@H*"@H*#8V
+M-C8V-C8V-C8VEC8V-C8V-C8VV]O;``````````````````````````````#;
+MV]O;VP#;`````-O;VP#;``````````````````````!"0D)"0D)"0D)S0D)"
+M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0EU=75)A4B$:!V%R0D)"0D)"0D)"
+M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0MO;V]O;V]O;
+MV]O;V]LV-C8V-C893"$"-C8V-C8V-C8V-C8V-C893"$"-C8V-C8V-C8V-C8V
+M-B@H*"@H*"@H*"@H*"@A&@<!`(WO`B@H*"@H*#8V-C8V-C8V-C8VEC8V-C8V
+M-C8VV]O;``````````````````````````````#;V]O;VP#;`````-O;VP#;
+MV]O;V]O;V]O;V]O;V]O;V]O;V]LV-C8V-C8V&4PA`C8V-C8V-C8V-C8V-C8V
+M&4PA`C8V-C8V-C8V-C8V-C8V-C8V-C8V-C8V-I8V-C8V-C8V-MO;V]O;V]O;
+MV]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;VT)"0D(`
+M````````````````````````````````````````````````````````````
+M`````````````$)"0D)"0D)"0G-"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"
+M0D)"75U=4F%2(1H'87)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"
+M0D)"0D)"0D)"0D)"0D)"V]O;V]O;V]O;V]O;VS8V-C8V-AE,(0(V-C8V-C8V
+M-C8V-C8V-AE,(0(V-C8V-C8V-C8V-C8V*"@H*"@H*"@H*"@H*"$:!P$`C>\"
+M*"@H*"@H-C8V-C8V-C8V-C:6-C8V-C8V-C;;V]L`````````````````````
+M`````````-O;V]O;`-L`````V]O;`-L``````````````````````$)"0D)"
+M0D)"0G-"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"75U=4F%2(1H'87)"
+M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"
+MV]O;V]O;V]O;V]O;VS8V-C8V-AE,(0(V-C8V-C8V-C8V-C8V-AE,(0(V-C8V
+M-C8V-C8V-C8V*"@H*"@H*"@H*"@H*"$:!P$`C>\"*"@H*"@H-C8V-C8V-C8V
+M-C:6-C8V-C8V-C;;V]L``````````````````````````````-O;V]O;`-L`
+M````V]O;`-LH*"@H*"@V-C8V-C8V-C8V-I8V-C8V-C8V-MO;VP``````````
+M````````````````````V]O;V]L`VP````#;V]L`VP``````````````````
+M````0D)"0D)"0D)"<T)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)=75U2
+M85(A&@=A<D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"
+M0D)"0D)"0D+;V]O;V]O;V]O;V]O;-C8V-C8V&4PA`C8V-C8V-C8V-C8V-C8V
+M&4PA`C8V-C8V-C8V-C8V-C8H*"@H*"@H*"@H*"@H(1H'`0"-[P(H*"@H*"@V
+M-C8V-C8V-C8V-I8V-C8V-C8V-MO;VP``````````````````````````````
+MV]O;V]L`VP````#;V]L`VP!W=%)A<B$:!P$`````````````````````````
+M`````(WO`M(``L</"0!R(1H'`1HCTBT``BBA4F%2(1H'87(A&@<!`(WO`M(`
+M`L</``ER(9HP`1HCTBT``B@A4F%2(1H'&`$`C>\"T@`%PT4```!&%<</``ER
+M(1H'`1HCTBT:!P$:#2$[````````=EL````````````0^OKZ^OJ%F)B8F)B8
+M`)@"F-(%PI@78?________\!!/____________________\A4F%2(1H'____
+M______________\A4F%2(1H'______________________]H`.Y0P[0\/%\!
+M!P$`C>\"T@`%PF%R4E@`=W1287(A&@<!`(WO`M(``L</"0!R(1H'`1HCTCH`
+M`BBA75U=75U=75U=75U=75U=75U=75U=75T`````````````````````````
+M````````````````````````````````````````````````````!```````
+M`````````````````````````````"@`````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M``````````````````````````````!^````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M``````````````````````````0B31A$<!T/`@"`<<<`[O______________
+M____________________________________________?`3_____________
+M____________________________________________________________
+M____________________O0``NJO;`;JZNKK_____________,/__________
+M______________\````6`````````'Y^?GY^?GY^?GY^?GY^?GY^?GY^?G[_
+M________"GY^?GY^?GY^?GY^``$M____]BTM+2T*"@H*,@H*"@H*"@H*/0H*
+M"@H*"@H*"@H*"@H*`%<B+___#,,]`#``80$`86%A8)Z6;IY16IZ4(A@I''`8
+M.'!&__\`````'@````````````"ZNKJZNKJZ`?4``++___\`````'@```(``
+M````````````````````````````+$$`````````+0`5``!H.@!:`2US;#<V
+M`,@1`````````.*A`&-I,``R`&4Q``#_______________\````````````*
+M"@H*````75U=75U=75U=75U=75U=````````````````````````````````
+M````4F%R(1H'`0"-[P+2``+#!QS"!(```/]M)0`"9QP!`@`.```!`%!+"`,`
+M)B8F`$#__\]#0O_____Q__^M(W1T=/_______O______)D+___\Q,S7__Q,3
+M$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3)BIB+&(`
+M_________\[.SL[.SL[.SL[.SL[.SJTC='1T_________S0S-C`Y.#(P-#/(
+MX%)#+40Z8`HR'YT/.6C@4D,M1#I@"C(?G0\Y:+1@@S4X`(``4F$N,R\**G-`
+M``````<``"\F*G,``L,''(`$@```_VTE^0)G'`$"``X```$`4$L(`P`F*F(L
+M8@#_W0`A``!/`/T`,3(P-#$R.#$P.3'(X%)#+40Z8`HR'YT/.&BT8(,U.```
+M`%)A+B\*,RIS`````````!D_)B]S+PHJ<R\*("8F)@!GP(XJ`````*^M(P\!
+M'R8F)B8G)B8F)B8F)B8F)B8F`$#__\]#0O\````````O)B9S+PHJ<R\*("8F
+M)A\F)B8F)B8F)B8F)B8F)"8F)@!`___/0T+_______^M(W1T=/__________
+M____________________________________________________________
+M____________________________________________________)B`F)A\F
+M)B8F)B8F)B8F)B8G)B8`````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````]@``E#@X.#A=.#@XY>7EY0H```#EY>7EY>7EY>7EY>7EY>7EY>7EY>7E
+MY>7EY>7EY>5W=V%R(2\O+R`N"@H*75U=75U9R,C(R,C(R,C(R,C(R"<.`'\`
+M``I=70!=!UU=7=D`Y>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7E
+MY>7EY>7EY>7EY>7EY>7EY>7EY4$X.#@X]C@X+3@X.#@X.#@X.#@X.#@X.#@X
+M.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#AR.#@X.#@X.#@X.#@X.#@X.#@X
+M.#@X./DX.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X<C@X.'?^_________QE,
+M(0(V-C8V-C8V-C8V-C8V,AE,(0(V-C8V-C8V-C8V-C8V-C8V-C8V-@@V-C8V
+MEC8V-C8V-C8VV]O;V]O;V]O_V]O;V]O;V]O;V]O;V]O;V]LV-C8V-C8V-C8V
+M-C8V-C8(-C8V-I8V-C8V-C8V-MO;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;
+M-C8V-C8VV]O;V]O;V]O;V]M=75U=75U=75U=75U=75U=75U=7=O;V]O;V]O;
+M-C8V-C8V-AE,(0(V-C8V-C8V-C;;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;
+MVS8V-C8V-C893"$"-C8V-C8V-C8V-C8V-C893"$"-C8V-C8V-C8V-C8V-C8V
+M-C8V-C8V-C8VEC8V-C8V-C8VV]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;
+MV]O;V]O;V]O;V]O;V]O;V]O;V]O;0D)"0@``````````````````````````
+M````````````````````````````````````````````````0D)"0D)"0D)"
+M<T)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)=75U285(A&@=A<D)"0D)"
+M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D+;V]O;
+MV]O;V]O;V]O;-C8V-C8V&4PA`C8V-C8V-C8V-C8V-C8V&4PA`C8V-C8V-C8V
+M-C8V-C8H*"@H*"@H*"@H*"@H(1H'`0"-[P(H*"@H*"@V-C8V-C8V-C8V-I8V
+M-C8V-C8V-MO;VP``````````````````````````````V]O;V]L`VP````#;
+MV]L`VP``````````````````````0D)"0D)"0D)"<T)"0D)"0D)"0D)"0D)"
+M0D)"0D)"0D)"0D)"0D)=75U285(A&@=A<D)"0D)"0D)"0D)"0D)"0D)"0D)"
+M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D+;V]O;V]O;V]O;V]O;-C8V-C8V
+M&4PA`C8V-C8V-C8V-C8V-C8V&4PA`C8V-C8V-C8V-C8V-C8H*"@H*"@H*"@H
+M*"@H(1H'`0"-[P(H*"@H*"@V-C8V-C8V-C8V-I8V-C8V-C8V-MO;VP``````
+M````````````````````````V]O;V]L`VP````#;V]L`VR@H*"@H*#8V-C8V
+M-C8V-C8VEC8V-C8V-C8VV]O;``````````````````````````````#;V]O;
+MVP#;`````-O;VP#;``````````````````````!"0D)"0D)"0D)S0D)"0D)"
+M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0EU=75)A4B$:!V%R0D)"0D)"0D)"0D)"
+M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0MO;V]O;V]O;V]O;
+MV]LV-C8V-C893"$"-C8V-C8V-C8V-C8V-C893"$"-C8V-C8V-C8V-C8V-B@H
+M*"@H*"@H*"@H*"@A&@<!`(WO`B@H*"@H*#8V-C8V-C8V-C8VEC8V-C8V-C8V
+MV]O;``````````````````````````````#;V]O;VP#;`````-O;VP#;`M(`
+M`L</"0!R(1H'`1HCTBT``BBA4F%2(1H'87(A&@<!`(WO`M(``L</``ER(9HP
+M`1HCTBT``B@A4F%2(1H'&`$`C>\"T@`%P_J%6YB8F)B8F`"8`IC2!<*8%V'_
+M________`03_____________________(5)A4B$:!___________________
+M____:`#N4,.T/#Q?`0<!`(WO`M(`!<)A<E)8`'=T4F%R(1H'`0"-[P+2``+'
+M#PD`<B$:!P$:(](M``(HH5)A4B$:!V%R(1H'`0"-[P+2``+'#P`)<B&:,`$:
+M(](M`!(H(5)A4B$:!Q@!`(WO`M(`!<-%7P$'`0"-[P+2``72``+'#P`)<B&:
+M,`$:(](M``(H(5)A4B$:!Q@!`(WO`M(`!</ZA5N8F)B8F)@`F`*8T@7"F!=A
+M_________P$$_____________________R%285(A&@?_________________
+M_____V@`[E##M#P\7P$'`0"-[P+2``7"87)26`!W=%)A<B$:!P$`C>\"T@`"
+MQP\)`'(A&@<!&B/2+0`"**%285(A&@=A<B$:!P$`C>\"T@`"QP\`"7(AFC`!
+M&B/2+0`"*"%285(A&@<8`0"-[P+2``7#15\!!P$`C>\"T@`%PF%R4E@`=W12
+M87(A&@<!`(WO`M(``L</"0!R(1H'`1HCTCH``BBA4F%2(1H'87(A&@<!`(WO
+M`M(``L</``ER(9HP`1HCTBT``B@A4F%2(1H'&`$`C>\"T@`%PP```$85!<)A
+M<E)8`'=T4F%R(1H'`0"-[P+2``+'#PD`<B$:!P$:(](M``(HH5)A4B$:!V%R
+M(1H'`0"-[P+2``+'#P`)<B&:,`$:(](M``(H(5)A4B$:!Q@!`(WO`M(`!</Z
+MA5N8F)B8F)@`F`*8T@7"F!=A_______?_P$$_____________________R%2
+M85(A&@?______________________V@`[E##M#P\7P$'`0"-[P+2``7"87)2
+M6`!W=%)A<B$:!P$``````````````````````````````(WO`M(``L</"0!R
+M(1H'`1HCTBT``BBA4F%2(1H'87(A&@<!`(WO`M(``L</``ER(9HP`1HCTBT`
+M`B@A4F%2(1H'&`$`C>\"T@`%PT4```!&%<</``ER(1H'`1HCTBT:!P$:#2$[
+M````````=EL````````````0^OKZ^OJ%F)B8F)B8`)@"F-(%PI@78?______
+M__\!!/____________________\A4F%2(1H'__________________\A4F%2
+M(1H'______________________]H`.Y0P[0\/%\!!P$`C>\"T@`%PF%R4E@`
+M=W1287(A&@<!`(WO`M(``L</"0!R(1H'`1HCTCH``BBA75U=75U=75U=75U=
+M75U=75U=75U=75T`````````````````````````````````````````````
+M````````````````````````````````!````````````@``````````````
+M````````````````````````````````*```````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````````````````````````'X`````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````!")-&$1P'0\"`(!QQP#N____________
+M______________________________________________]\!/__________
+M____________________________________________________________
+M______________________^]``"ZJ]L!NKJZNO____________\P________
+M_________________P```!8`````````?GY^?GY^?GY^?GY^?GY^?GY^?GY^
+M?O________\*?GY^?GY^?GY^?GX``2W____V+2TM+0H*"@HR"@H*"@H*"@H]
+M"@H*"@H*"@H*"@H*"@H`5R(O__\,PST`,`!A`0!A86%@GI9NGE%:GI0B&"D<
+M<!@X<$;__P`````>`````````````+JZNKJZNKH!]0``LO___P`````>````
+M@``````````````````````````````L00`````````M`!4``&@Z`%H!+7-L
+M-S8`R!$`````````XJ$`8VDP`#(`93$``/_______________P``````````
+M``H*"@H```!=75U=75U=75U=75U=75T`````````````````````````````
+M``````!287(A&@<!`(WO`M(``L,'',($@```_VTE``)G'`$"``X```$`4$L(
+M`P`F)B8`0/__ST-"______'__ZTC='1T_______^______\F0O___S$S-?__
+M$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,3$Q,F*F(L
+M8@#_________SL[.SL[.SL[.SL[.SL[.K2-T='3_________-#,V,#DX,C`T
+M,\C@4D,M1#I@"C(?G0\Y:.!20RU$.F`*,A^=#SEHM&"#-3@`@`!282XS+PHJ
+M<T``````!P``+R8J<P`"PP<<@`2```#_;27Y`F<<`0(`#@```0!02P@#`"8J
+M8BQB`/_=`"$``$\`_0`Q,C`T,3(X,3`Y,<C@4D,M1#I@"C(?G0\X:+1@@S4X
+M````4F$N+PHS*G,`````````&3\F+W,O"BIS+PH@)B8F`&?`CBH`````KZTC
+M#P$?)B8F)B<F)B8F)B8F)B8F)B8`0/__ST-"_P```````"\F)G,O"BIS+PH@
+M)B8F'R8F)B8F)B8F)B8F)B8D)B8F`$#__\]#0O_______ZTC='1T________
+M____________________________________________________________
+M______________________________________________________\F("8F
+M'R8F)B8F)B8F)B8F)B<F)@``````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M``````#V``"4.#@X.%TX.#CEY>7E"@```.7EY>7EY>7EY>7EY>7EY>7EY>7E
+MY>7EY>7EY>7EY7=W87(A+R\O("X*"@I=75U=75G(R,C(R,C(R,C(R,C()PX`
+M?P``"EU=`%T'75U=V0#EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7E
+MY>7EY>7EY>7EY>7EY>7EY>7EY>7E03@X.#CV.#@M.#@X.#@X.#@X.#@X.#@X
+M.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X.'(X.#@X.#@X.#@X.#@X.#@X
+M.#@X.#@X^3@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#AR.#@X=_[_________
+M&4PA`C8V-C8V-C8V-C8V-C8R&4PA`C8V-C8V-C8V-C8V-C8V-C8V-C8V"#8V
+M-C:6-C8V-C8V-C;;V]O;V]O;V__;V]O;V]O;V]O;V]O;V]O;VS8V-C8V-C8V
+M-C8V-C8V-@@V-C8VEC8V-C8V-C8VV]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;
+MV]LV-C8V-C;;V]O;V]O;V]O;VUU=75U=75U=75U=75U=75U=75U=V]O;V]O;
+MV]LV-C8V-C8V&4PA`C8V-C8V-C8V-MO;V]O;V]O;V]O;V]O;V]O;V]O;V]O;
+MV]O;-C8V-C8V-AE,(0(V-C8V-C8V-C8V-C8V-AE,(0(V-C8V-C8V-C8V-C8V
+M-C8V-C8V-C8V-C:6-C8V-C8V-C;;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;
+MV]O;V]O;V]O;V]O;V]O;V]O;V]O;V]M"0D)"````````````````````````
+M``````````````````````````````````````````````````!"0D)"0D)"
+M0D)S0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0EU=75)A4B$:!V%R0D)"
+M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0MO;
+MV]O;V]O;V]O;V]LV-C8V-C893"$"-C8V-C8V-C8V-C8V-C893"$"-C8V-C8V
+M-C8V-C8V-B@H*"@H*"@H*"@H*"@A&@<!`(WO`B@H*"@H*#8V-C8V-C8V-C8V
+MEC8V-C8V-C8VV]O;``````````````````````````````#;V]O;VP#;````
+M`-O;VP#;``````````````````````!"0D)"0D)"0D)S0D)"0D)"0D)"0D)"
+M0D)"0D)"0D)"0D)"0D)"0EU=75)A4B$:!V%R0D)"0D)"0D)"0D)"0D)"0D)"
+M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0MO;V]O;V]O;V]O;V]LV-C8V
+M-C893"$"-C8V-C8V-C8V-C8V-C893"$"-C8V-C8V-C8V-C8V-B@H*"@H*"@H
+M*"@H*"@A&@<!`(WO`B@H*"@H*#8V-C8V-C8V-C8VEC8V-C8V-C8VV]O;````
+M``````````````````````````#;V]O;VP#;`````-O;VP#;*"@H*"@H-C8V
+M-C8V-C8V-C:6-C8V-C8V-C;;V]L``````````````````````````````-O;
+MV]O;`-L`````V]O;`-L``````````````````````$)"0D)"0D)"0G-"0D)"
+M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"75U=4F%2(1H'87)"0D)"0D)"0D)"
+M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"V]O;V]O;V]O;
+MV]O;VS8V-C8V-AE,(0(V-C8V-C8V-C8V-C8V-AE,(0(V-C8V-C8V-C8V-C8V
+M*"@H*"@H*"@H*"@H*"$:!P$`C>\"*"@H*"@H-C8V-C8V-C8V-C:6-C8V-C8V
+M-C;;V]L``````````````````````````````-O;V]O;`-L`````V]O;`-O_
+M____________________________________________________________
+M_____________________R8@)B8?)B8F)B8F)B8F)B8F)R8F````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````````````````````````/8``)0X.#@X73@X..7EY>4*````
+MY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7E=W=A<B$O+R\@+@H*"EU=
+M75U=6<C(R,C(R,C(R,C(R,@G#@!_```*75T`70==75W9`.7EY>7EY>7EY>7E
+MY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>5!.#@X
+M./8X."TX.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X
+M.#@X<C@X.#@X.#@X.#@X.#@X.#@X.#@X.#CY.#@X.#@X.#@X.#@X.#@X.#@X
+M.#@X.#@X.'(X.#AW_O________\93"$"-C8V-C8V-C8V-C8V-C(93"$"-C8V
+M-C8V-C8V-C8V-C8V-C8V-C8(-C8V-I8V-C8V-C8V-MO;V]O;V]O;_]O;V]O;
+MV]O;V]O;V]O;V]O;-C8V-C8V-C8V-C8V-C8V"#8V-C:6-C8V-C8V-C;;V]O;
+MV]O;V]O;V]O;V]O;V]O;V]O;V]O;VS8V-C8V-MO;V]O;V]O;V]O;75U=75U=
+M75U=75U=75U=75U=75W;V]O;V]O;VS8V-C8V-C893"$"-C8V-C8V-C8VV]O;
+MV]O;V]O;V]O;V]O;V]O;V]O;V]O;V]LV-C8V-C8V&4PA`C8V-C8V-C8V-C8V
+M-C8V&4PA`C8V-C8V-C8V-C8V-C8V-C8V-C8V-C8V-I8V-C8V-C8V-MO;V]O;
+MV]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;VT)"
+M0D(`````````````````````````````````````````````````````````
+M`````````````````$)"0D)"0D)"0G-"0D)"0D)"0D)"0D)"0D)"0D)"0D)"
+M0D)"0D)"75U=4F%2(1H'87)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"
+M0D)"0D)"0D)"0D)"0D)"0D)"V]O;V]O;V]O;V]O;VS8V-C8V-AE,(0(V-C8V
+M-C8V-C8V-C8V-AE,(0(V-C8V-C8V-C8V-C8V*"@H*"@H*"@H*"@H*"$:!P$`
+MC>\"*"@H*"@H-C8V-C8V-C8V-C:6-C8V-C8V-C;;V]L`````````````````
+M`````````````-O;V]O;`-L`````V]O;`-L``````````````````````$)"
+M0D)"0D)"0G-"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"75U=4F%2(1H'
+M87)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"
+M0D)"V]O;V]O;V]O;V]O;VS8V-C8V-AE,(0(V-C8V-C8V-C8V-C8V-AE,(0(V
+M-C8V-C8V-C8V-C8V*"@H*"@H*"@H*"@H*"$:!P$`C>\"*"@H*"@H-C8V-C8V
+M-C8V-C:6-C8V-C8V-C;;V]L``````````````````````````````-O;V]O;
+M`-L`````V]O;`-LH*"@H*"@V-C8V-C8V-C8V-I8V-C8V-C8V-MO;VP``````
+M````````````````````````V]O;V]L`VP````#;V]L`VP``````````````
+M````````0D)"0D)"0D)"<T)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)=
+M75U285(A&@=A<D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"
+M0D)"0D)"0D)"0D+;V]O;V]O;V]O;V]O;-C8V-C8V&4PA`C8V-C8V-C8V-C8V
+M-C8V&4PA`C8V-C8V-C8V-C8V-C8H*"@H*"@H*"@H*"@H(1H'`0"-[P(H*"@H
+M*"@V-C8V-C8V-C8V-I8V-C8V-C8V-MO;VP``````````````````````````
+M````V]O;V]L`VP````#;V]L`V]O;V]O;V]O;V]O;V]O;V]O;V]O;-C8V-C8V
+M-AE,(0(V-C8V-C8V-C8V-C8V-AE,(0(V-C8V-C8V-C8V-C8V-C8V-C8V-C8V
+M-C:6-C8V-C8V-C;;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;
+MV]O;V]O;V]O;V]O;V]M"0D)"````````````````````````````````````
+M``````````````````````````````````````!"0D)"0D)"0D)S0D)"0D)"
+M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0EU=75)A4B$:!V%R0D)"0D)"0D)"0D)"
+M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0MO;V]O;V]O;V]O;
+MV]LV-C8V-C893"$"-C8V-C8V-C8V-C8V-C893"$"-C8V-C8V-C8V-C8V-B@H
+M*"@H*"@H*"@H*"@A&@<!`(WO`B@H*"@H*#8V-C8V-C8V-C8VEC8V-C8V-C8V
+MV]O;``````````````````````````````#;V]O;VP#;`````-O;VP#;````
+M``````````````````!"0D)"0D)"0D)S0D)"0D)"0D)"0D)"0D)"0D)"0D)"
+M0D)"0D)"0EU=75)A4B$:!V%R0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"
+M0D)"0D)"0D)"0D)"0D)"0D)"0MO;V]O;V]O;V]O;V]LV-C8V-C893"$"-C8V
+M-C8V-C8V-C8V-C893"$"-C8V-C8V-C8V-C8V-B@H*"@H*"@H*"@H*"@A&@<!
+M`(WO`B@H*"@H*#8V-C8V-C8V-C8VEC8V-C8V-C8VV]O;````````````````
+M``````````````#;V]O;VP#;`````-O;VP#;*"@H*"@H-C8V-C8V-C8V-C:6
+M-C8V-C8V-C;;V]L``````````````````````````````-O;V]O;`-L`````
+MV]O;`-L``````````````````````$)"0D)"0D)"0G-"0D)"0D)"0D)"0D)"
+M0D)"0D)"0D)"0D)"0D)"75U=4F%2(1H'87)"0D)"0D)"0D)"0D)"0D)"0D)"
+M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"V]O;V]O;V]O;V]O;VS8V-C8V
+M-AE,(0(V-C8V-C8V-C8V-C8V-AE,(0(V-C8V-C8V-C8V-C8V*"@H*"@H*"@H
+M*"@H*"$:!P$`C>\"*"@H*"@H-C8V-C8V-C8V-C:6-C8V-C8V-C;;V]L`````
+M`````````````````````````-O;V]O;`-L`````V]O;`-L"-C8V-C8V-C8V
+M-C8V-B@H*"@H*"@H*"@H*"@A&@<!`(WO`B@H*"@H*#8V-C8V-C8V-C8VEC8V
+M-C8V-C8VV]O;``````````````````````````````#;V]O;VP#;`````-O;
+MVP#;``````````````````````!"0D)"0D)"0D)S0D)"0D)"0D)"0D)"0D)"
+M0D)"0D)"0D)"0D)"0EU=75)A4B$:!V%R0D)"0D)"0D)"0D)"0D)"0D)"0D)"
+M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0MO;V]O;V]O;V]O;V]LV-C8V-C89
+M3"$"-C8V-C8V-C8V-C8V-C893"$"-C8V-C8V-C8V-C8V-B@H*"@H*"@H*"@H
+M*"@A&@<!`(WO`B@H*"@H*#8V-C8V-C8V-C8VEC8V-C8V-C8VV]O;````````
+M``````````````````````#;V]O;VP#;`````-O;VP#;*"@H*"@H-C8V-C8V
+M-C8V-C:6-C8V-C8V-C;;V]L``````````````````````````````-O;V]O;
+M`-L`````V]O;`-L``````````````````````$)"0D)"0D)"0G-"0D)"0D)"
+M0D)"0D)"0D)"0D)"0D)"0D)"0D)"75U=4F%2(1H'87)"0D)"0D)"0D)"0D)"
+M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"V]O;V]O;V]O;V]O;
+MVS8V-C8V-AE,(0(V-C8V-C8V-C8V-C8V-AE,(0(V-C8V-C8V-C8V-C8V*"@H
+M*"@H*"@H*"@H*"$:!P$`C>\"*"@H*"@H-C8V-C8V-C8V-C:6-C8V-C8V-C;;
+MV]L``````````````````````````````-O;V]O;`-L`````V]O;`-O_____
+M____________________________________________________________
+M_________________R8@)B8?)B8F)B8F)B8F)B8F)R8F````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M````````````````````````````````````````````````````````````
+M`````````````````````````````/8``)0X.#@X73@X..7EY>4*````Y>7E
+MY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7E=W=A<B$O+R\@+@H*"EU=75U=
+M6<C(R,C(R,C(R,C(R,@G#@!_```*75T`70==75W9`.7EY>7EY>7EY>7EY>7E
+MY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>7EY>5!.#@X./8X
+M."TX.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X.#@X
+M<C@X.#@X.#@X.#@X.#@X.#@X.#@X.#CY.#@X.#@X.#@X.#@X.#@X.#@X.#@X
+M.#@X.'(X.#AW_O________\93"$"-C8V-C8V-C8V-C8V-C(93"$"-C8V-C8V
+M-C8V-C8V-C8V-C8V-C8(-C8V-I8V-C8V-C8V-MO;V]O;V]O;_]O;V]O;V]O;
+MV]O;V]O;V]O;-C8V-C8V-C8V-C8V-C8V"#8V-C:6-C8V-C8V-C;;V]O;V]O;
+MV]O;V]O;V]O;V]O;V]O;V]O;VS8V-C8V-MO;V]O;V]O;V]O;75U=75U=75U=
+M75U=75U=75U=75W;V]O;V]O;VS8V-C8V-C893"$"-C8V-C8V-C8VV]O;V]O;
+MV]O;V]O;V]O;V]O;V]O;V]O;V]LV-C8V-C8V&4PA`C8V-C8V-C8V-C8V-C8V
+M&4PA`C8V-C8V-C8V-C8V-C8V-C8V-C8V-C8V-I8V-C8V-C8V-MO;V]O;V]O;
+MV]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;VT)"0D(`
+M````````````````````````````````````````````````````````````
+M`````````````$)"0D)"0D)"0G-"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"
+M0D)"75U=4F%2(1H'87)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"
+M0D)"0D)"0D)"0D)"0D)"V]O;V]O;V]O;V]O;VS8V-C8V-AE,(0(V-C8V-C8V
+M-C8V-C8V-AE,(0(V-C8V-C8V-C8V-C8V*"@H*"@H*"@H*"@H*"$:!P$`C>\"
+M*"@H*"@H-C8V-C8V-C8V-C:6-C8V-C8V-C;;V]L`````````````````````
+M`````````-O;V]O;`-L`````V]O;`-L``````````````````````$)"0D)"
+M0D)"0G-"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"75U=4F%2(1H'87)"
+M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"
+MV]O;V]O;V]O;V]O;VS8V-C8V-AE,(0(V-C8V-C8V-C8V-C8V-AE,(0(V-C8V
+M-C8V-C8V-C8V*"@H*"@H*"@H*"@H*"$:!P$`C>\"*"@H*"@H-C8V-C8V-C8V
+M-C:6-C8V-C8V-C;;V]L``````````````````````````````-O;V]O;`-L`
+M````V]O;`-LH*"@H*"@V-C8V-C8V-C8V-I8V-C8V-C8V-MO;VP``````````
+M````````````````````V]O;V]L`VP````#;V]L`VP``````````````````
+M````0D)"0D)"0D)"<T)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)=75U2
+M85(A&@=A<D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"
+M0D)"0D)"0D+;V]O;V]O;V]O;V]O;-C8V-C8V&4PA`C8V-C8V-C8V-C8V-C8V
+M&4PA`C8V-C8V-C8V-C8V-C8H*"@H*"@H*"@H*"@H(1H'`0"-[P(H*"@H*"@V
+M-C8V-C8V-C8V-I8V-C8V-C8V-MO;VP``````````````````````````````
+MV]O;V]L`VP````#;V]L`V]O;V]O;V]O;V]O;V]O;V]O;V]O;-C8V-C8V-AE,
+M(0(V-C8V-C8V-C8V-C8V-AE,(0(V-C8V-C8V-C8V-C8V-C8V-C8V-C8V-C:6
+M-C8V-C8V-C;;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;V]O;
+MV]O;V]O;V]O;V]M"0D)"````````````````````````````````````````
+M``````````````````````````````````!"0D)"0D)"0D)S0D)"0D)"0D)"
+M0D)"0D)"0D)"0D)"0D)"0D)"0EU=75)A4B$:!V%R0D)"0D)"0D)"0D)"0D)"
+M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0MO;V]O;V]O;V]O;V]LV
+M-C8V-C893"$"-C8V-C8V-C8V-C8V-C893"$"-C8V-C8V-C8V-C8V-B@H*"@H
+M*"@H*"@H*"@A&@<!`(WO`B@H*"@H*#8V-C8V-C8V-C8VEC8V-C8V-C8VV]O;
+M``````````````````````````````#;V]O;VP#;`````-O;VP#;````````
+M``````````````!"0D)"0D)"0D)S0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"
+M0D)"0EU=75)A4B$:!V%R0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"
+M0D)"0D)"0D)"0D)"0D)"0MO;V]O;V]O;V]O;V]LV-C8V-C893"$"-C8V-C8V
+M-C8V-C8V-C893"$"-C8V-C8V-C8V-C8V-B@H*"@H*"@H*"@H*"@A&@<!`(WO
+M`B@H*"@H*#8V-C8V-C8V-C8VEC8V-C8V-C8VV]O;````````````````````
+M``````````#;V]O;VP#;`````-O;VP#;*"@H*"@H-C8V-C8V-C8V-C:6-C8V
+M-C8V-C;;V]L``````````````````````````````-O;V]O;`-L`````V]O;
+M`-L``````````````````````$)"0D)"0D)"0G-"0D)"0D)"0D)"0D)"0D)"
+M0D)"0D)"0D)"0D)"75U=4F%2(1H'87)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"
+M0D)"0D)"0D)"0D)"0D)"0D)"0D)"0D)"V]O;V]O;V]O;V]O;VS8V-C8V-AE,
+M(0(V-C8V-C8V-C8V-C8V-AE,(0(V-C8V-C8V-C8V-C8V*"@H*"@H*"@H*"@H
+M*"$:!P$`C>\"*"@H*"@H-C8V-C8V-C8V-C:6-C8V-C8V-C;;V]L`````````
+@`````````````````````-O;V]O;`-L`````V]O;`-L`
+`
+end
diff --git a/contrib/libarchive/libarchive/test/test_read_format_rar_ppmd_use_after_free2.rar.uu b/contrib/libarchive/libarchive/test/test_read_format_rar_ppmd_use_after_free2.rar.uu
new file mode 100644
index 000000000000..03c2eadfa4f3
--- /dev/null
+++ b/contrib/libarchive/libarchive/test/test_read_format_rar_ppmd_use_after_free2.rar.uu
@@ -0,0 +1,10 @@
+begin 664 test_read_format_rar_ppmd_use_after_free2.rar
+M4F%R(1H'``1G=$Q24`!W````>U!+`P0Q`'#_J7\`+@TU'`#]`0`7__]"0D)"
+M+W5N)B8F)F=I9`UD#1T+``!"`````````&%R(1H'``3_________`F@`H2``
+M``"`P\/#2\/#P\/#P\/#P\-3PP"`P\/#PYZ>AYZ>GI[#4\,`@,/#`L,@(""=
+M("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@(/______
+M__\@("`@("`@("`@("`@("`@("`@("`@("`$9W1,4E``=P```'M02P,$,0!P
+M_ZE_`"X--1P`_0$`%___0D)"0B]U;B8F)B9G:60-9`T="P``0@````````!A
+0<B$:!P`$_________P)H````
+`
+end
diff --git a/contrib/libarchive/libarchive_fe/line_reader.c b/contrib/libarchive/libarchive_fe/line_reader.c
index 2d197d3dfb03..c7c4694eeb82 100644
--- a/contrib/libarchive/libarchive_fe/line_reader.c
+++ b/contrib/libarchive/libarchive_fe/line_reader.c
@@ -49,11 +49,10 @@ __FBSDID("$FreeBSD$");
*/
struct lafe_line_reader {
FILE *f;
- char *buff, *buff_end, *line_start, *line_end, *p;
+ char *buff, *buff_end, *line_start, *line_end;
char *pathname;
size_t buff_length;
int nullSeparator; /* Lines separated by null, not CR/CRLF/etc. */
- int ret;
};
struct lafe_line_reader *
diff --git a/contrib/libarchive/libarchive_fe/passphrase.c b/contrib/libarchive/libarchive_fe/passphrase.c
index 8c38ad777828..edf72d147182 100644
--- a/contrib/libarchive/libarchive_fe/passphrase.c
+++ b/contrib/libarchive/libarchive_fe/passphrase.c
@@ -23,9 +23,11 @@
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-/* $OpenBSD: readpassphrase.c,v 1.22 2010/01/13 10:20:54 dtucker Exp $ */
+/* $OpenBSD: readpassphrase.c,v 1.27 2019/01/25 00:19:25 millert Exp $ */
+
/*
- * Copyright (c) 2000-2002, 2007 Todd C. Miller <Todd.Miller@courtesan.com>
+ * Copyright (c) 2000-2002, 2007, 2010
+ * Todd C. Miller <millert@openbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -199,6 +201,27 @@ restart:
}
/*
+ * Turn off echo if possible.
+ * If we are using a tty but are not the foreground pgrp this will
+ * generate SIGTTOU, so do it *before* installing the signal handlers.
+ */
+ if (input != STDIN_FILENO && tcgetattr(input, &oterm) == 0) {
+ memcpy(&term, &oterm, sizeof(term));
+ if (!(flags & RPP_ECHO_ON))
+ term.c_lflag &= ~(ECHO | ECHONL);
+#ifdef VSTATUS
+ if (term.c_cc[VSTATUS] != _POSIX_VDISABLE)
+ term.c_cc[VSTATUS] = _POSIX_VDISABLE;
+#endif
+ (void)tcsetattr(input, _T_FLUSH, &term);
+ } else {
+ memset(&term, 0, sizeof(term));
+ term.c_lflag |= ECHO;
+ memset(&oterm, 0, sizeof(oterm));
+ oterm.c_lflag |= ECHO;
+ }
+
+ /*
* Catch signals that would otherwise cause the user to end
* up with echo turned off in the shell. Don't worry about
* things like SIGXCPU and SIGVTALRM for now.
@@ -217,57 +240,41 @@ restart:
(void)sigaction(SIGTTIN, &sa, &savettin);
(void)sigaction(SIGTTOU, &sa, &savettou);
- /* Turn off echo if possible. */
- if (input != STDIN_FILENO && tcgetattr(input, &oterm) == 0) {
- memcpy(&term, &oterm, sizeof(term));
- if (!(flags & RPP_ECHO_ON))
- term.c_lflag &= ~(ECHO | ECHONL);
-#ifdef VSTATUS
- if (term.c_cc[VSTATUS] != _POSIX_VDISABLE)
- term.c_cc[VSTATUS] = _POSIX_VDISABLE;
-#endif
- (void)tcsetattr(input, _T_FLUSH, &term);
- } else {
- memset(&term, 0, sizeof(term));
- term.c_lflag |= ECHO;
- memset(&oterm, 0, sizeof(oterm));
- oterm.c_lflag |= ECHO;
+ if (!(flags & RPP_STDIN)) {
+ int r = write(output, prompt, strlen(prompt));
+ (void)r;
}
-
- /* No I/O if we are already backgrounded. */
- if (signo[SIGTTOU] != 1 && signo[SIGTTIN] != 1) {
- if (!(flags & RPP_STDIN)) {
- int r = write(output, prompt, strlen(prompt));
- (void)r;
- }
- end = buf + bufsiz - 1;
- p = buf;
- while ((nr = read(input, &ch, 1)) == 1 && ch != '\n' && ch != '\r') {
- if (p < end) {
- if ((flags & RPP_SEVENBIT))
- ch &= 0x7f;
- if (isalpha((unsigned char)ch)) {
- if ((flags & RPP_FORCELOWER))
- ch = (char)tolower((unsigned char)ch);
- if ((flags & RPP_FORCEUPPER))
- ch = (char)toupper((unsigned char)ch);
- }
- *p++ = ch;
+ end = buf + bufsiz - 1;
+ p = buf;
+ while ((nr = read(input, &ch, 1)) == 1 && ch != '\n' && ch != '\r') {
+ if (p < end) {
+ if ((flags & RPP_SEVENBIT))
+ ch &= 0x7f;
+ if (isalpha((unsigned char)ch)) {
+ if ((flags & RPP_FORCELOWER))
+ ch = (char)tolower((unsigned char)ch);
+ if ((flags & RPP_FORCEUPPER))
+ ch = (char)toupper((unsigned char)ch);
}
- }
- *p = '\0';
- save_errno = errno;
- if (!(term.c_lflag & ECHO)) {
- int r = write(output, "\n", 1);
- (void)r;
+ *p++ = ch;
}
}
+ *p = '\0';
+ save_errno = errno;
+ if (!(term.c_lflag & ECHO)) {
+ int r = write(output, "\n", 1);
+ (void)r;
+ }
/* Restore old terminal settings and signals. */
if (memcmp(&term, &oterm, sizeof(term)) != 0) {
+ const int sigttou = signo[SIGTTOU];
+
+ /* Ignore SIGTTOU generated when we are not the fg pgrp. */
while (tcsetattr(input, _T_FLUSH, &oterm) == -1 &&
- errno == EINTR)
+ errno == EINTR && !signo[SIGTTOU])
continue;
+ signo[SIGTTOU] = sigttou;
}
(void)sigaction(SIGALRM, &savealrm, NULL);
(void)sigaction(SIGHUP, &savehup, NULL);
diff --git a/contrib/libarchive/tar/bsdtar.1 b/contrib/libarchive/tar/bsdtar.1
index 82840547007a..6d8d6d3d617a 100644
--- a/contrib/libarchive/tar/bsdtar.1
+++ b/contrib/libarchive/tar/bsdtar.1
@@ -25,7 +25,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd October 1, 2017
+.Dd June 3, 2019
.Dt TAR 1
.Os
.Sh NAME
@@ -198,7 +198,7 @@ options and before extracting any files.
.It Fl Fl clear-nochange-fflags
(x mode only)
Before removing file system objects to replace them, clear platform-specific
-file flags that might prevent removal.
+file attributes or file flags that might prevent removal.
.It Fl Fl exclude Ar pattern
Do not process files or directories that match the
specified pattern.
@@ -218,7 +218,8 @@ and
.Sq Darcs .
.It Fl Fl fflags
(c, r, u, x modes only)
-Archive or extract file flags. This is the reverse of
+Archive or extract platform-specific file attributes or file flags.
+This is the reverse of
.Fl Fl no-fflags
and the default behavior in c, r, and u modes or if
.Nm
@@ -389,8 +390,8 @@ Do not extract modification time.
By default, the modification time is set to the time stored in the archive.
.It Fl Fl mac-metadata
(c, r, u and x mode only)
-Mac OS X specific. Archive or extract extended ACLs and extended attributes
-using
+Mac OS X specific. Archive or extract extended ACLs and extended file
+attributes using
.Xr copyfile 3
in AppleDouble format. This is the reverse of
.Fl Fl no-mac-metadata .
@@ -445,21 +446,21 @@ and the default behavior if
is run as non-root in x mode (on Mac OS X as any user in c, r, u and x modes).
.It Fl Fl no-fflags
(c, r, u, x modes only)
-Do not archive or extract file flags. This is the reverse of
+Do not archive or extract file attributes or file flags. This is the reverse of
.Fl Fl fflags
and the default behavior if
.Nm
is run as non-root in x mode.
.It Fl Fl no-mac-metadata
(x mode only)
-Mac OS X specific. Do not archive or extract ACLs and extended attributes using
+Mac OS X specific. Do not archive or extract ACLs and extended file attributes
+using
.Xr copyfile 3
in AppleDouble format. This is the reverse of
.Fl Fl mac-metadata .
and the default behavior if
.Nm
is run as non-root in x mode.
-.It Fl n , Fl Fl norecurse , Fl Fl no-recursion
.It Fl Fl no-same-owner
(x mode only)
Do not extract owner and group IDs.
@@ -470,8 +471,8 @@ and the default behavior if
is run as non-root.
.It Fl Fl no-same-permissions
(x mode only)
-Do not extract full permissions (SGID, SUID, sticky bit, ACLs,
-extended attributes or extended file flags).
+Do not extract full permissions (SGID, SUID, sticky bit,
+file attributes or file flags, extended file attributes and ACLs).
This is the reverse of
.Fl p
and the default behavior if
@@ -479,7 +480,7 @@ and the default behavior if
is run as non-root.
.It Fl Fl no-xattrs
(c, r, u, x modes only)
-Do not archive or extract extended attributes. This is the reverse of
+Do not archive or extract extended file attributes. This is the reverse of
.Fl Fl xattrs
and the default behavior if
.Nm
@@ -667,13 +668,13 @@ This option suppresses these behaviors.
.It Fl p , Fl Fl insecure , Fl Fl preserve-permissions
(x mode only)
Preserve file permissions.
-Attempt to restore the full permissions, including owner, file modes, ACLs,
-extended attributes and extended file flags, if available, for each item
-extracted from the archive. This is te reverse of
+Attempt to restore the full permissions, including file modes, file attributes
+or file flags, extended file attributes and ACLs, if available, for each item
+extracted from the archive. This is the reverse of
.Fl Fl no-same-permissions
and the default if
.Nm
-is being run by root and can be partially overridden by also specifying
+is being run as root. It can be partially overridden by also specifying
.Fl Fl no-acls ,
.Fl Fl no-fflags ,
.Fl Fl no-mac-metadata
@@ -844,7 +845,7 @@ See
for more information about the handling of exclusions.
.It Fl Fl xattrs
(c, r, u, x modes only)
-Archive or extract extended attributes. This is the reverse of
+Archive or extract extended file attributes. This is the reverse of
.Fl Fl no-xattrs
and the default behavior in c, r, and u modes or if
.Nm
diff --git a/lib/libarchive/config_freebsd.h b/lib/libarchive/config_freebsd.h
index f9a3ef2ea3db..dcbfb98df1e3 100644
--- a/lib/libarchive/config_freebsd.h
+++ b/lib/libarchive/config_freebsd.h
@@ -205,6 +205,7 @@
#define HAVE_TZSET 1
#define HAVE_UINTMAX_T 1
#define HAVE_UNISTD_H 1
+#define HAVE_UNLINKAT 1
#define HAVE_UNSETENV 1
#define HAVE_UNSIGNED_LONG_LONG 1
#define HAVE_UNSIGNED_LONG_LONG_INT 1
diff --git a/lib/libarchive/tests/Makefile b/lib/libarchive/tests/Makefile
index 39675976f19e..521b397b6b96 100644
--- a/lib/libarchive/tests/Makefile
+++ b/lib/libarchive/tests/Makefile
@@ -509,6 +509,7 @@ FILES+= test_read_format_rar_multivolume.part0004.rar.uu
FILES+= test_read_format_rar_noeof.rar.uu
FILES+= test_read_format_rar_ppmd_lzss_conversion.rar.uu
FILES+= test_read_format_rar_ppmd_use_after_free.rar.uu
+FILES+= test_read_format_rar_ppmd_use_after_free2.rar.uu
FILES+= test_read_format_rar_sfx.exe.uu
FILES+= test_read_format_rar_subblock.rar.uu
FILES+= test_read_format_rar_unicode.rar.uu
@@ -516,6 +517,7 @@ FILES+= test_read_format_rar_windows.rar.uu
FILES+= test_read_format_rar5_arm.rar.uu
FILES+= test_read_format_rar5_blake2.rar.uu
FILES+= test_read_format_rar5_compressed.rar.uu
+FILES+= test_read_format_rar5_different_window_size.rar.uu
FILES+= test_read_format_rar5_distance_overflow.rar.uu
FILES+= test_read_format_rar5_extra_field_version.rar.uu
FILES+= test_read_format_rar5_fileattr.rar.uu
diff --git a/usr.bin/bsdcat/Makefile b/usr.bin/bsdcat/Makefile
index 987b51b3b232..f088c1a2cbb8 100644
--- a/usr.bin/bsdcat/Makefile
+++ b/usr.bin/bsdcat/Makefile
@@ -6,7 +6,7 @@ _LIBARCHIVEDIR= ${SRCTOP}/contrib/libarchive
_LIBARCHIVECONFDIR= ${SRCTOP}/lib/libarchive
PROG= bsdcat
-BSDCAT_VERSION_STRING= 3.3.3
+BSDCAT_VERSION_STRING= 3.4.0
.PATH: ${_LIBARCHIVEDIR}/cat
SRCS= bsdcat.c cmdline.c
diff --git a/usr.bin/cpio/Makefile b/usr.bin/cpio/Makefile
index 391c07a59356..cf3970e7b08f 100644
--- a/usr.bin/cpio/Makefile
+++ b/usr.bin/cpio/Makefile
@@ -6,7 +6,7 @@ LIBARCHIVEDIR= ${.CURDIR}/../../contrib/libarchive
LIBARCHIVECONFDIR= ${.CURDIR}/../../lib/libarchive
PROG= bsdcpio
-BSDCPIO_VERSION_STRING= 3.3.3
+BSDCPIO_VERSION_STRING= 3.4.0
.PATH: ${LIBARCHIVEDIR}/cpio
SRCS= cpio.c cmdline.c
diff --git a/usr.bin/tar/Makefile b/usr.bin/tar/Makefile
index ab78b72c7760..844c5ee1a889 100644
--- a/usr.bin/tar/Makefile
+++ b/usr.bin/tar/Makefile
@@ -4,7 +4,7 @@
LIBARCHIVEDIR= ${.CURDIR}/../../contrib/libarchive
PROG= bsdtar
-BSDTAR_VERSION_STRING= 3.3.3
+BSDTAR_VERSION_STRING= 3.4.0
.PATH: ${LIBARCHIVEDIR}/tar
SRCS= bsdtar.c \