From: Michihiro NAKAJIMA Date: Tue, 13 Dec 2011 05:26:18 +0000 (-0500) Subject: Add BCJ2 support to 7-Zip reader. X-Git-Tag: v3.0.2~62 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=06e7b8231bfe7e13a4f659b6d4e5bc116580712c;p=thirdparty%2Flibarchive.git Add BCJ2 support to 7-Zip reader. SVN-Revision: 3912 --- diff --git a/libarchive/archive_read_support_format_7zip.c b/libarchive/archive_read_support_format_7zip.c index 8812be1c3..c04b57908 100644 --- a/libarchive/archive_read_support_format_7zip.c +++ b/libarchive/archive_read_support_format_7zip.c @@ -235,7 +235,7 @@ struct _7zip { int64_t stream_offset; /* - * Decompressing control. + * Decompressing control data. */ unsigned folder_index; uint64_t folder_outbytes_reamining; @@ -248,19 +248,25 @@ struct _7zip { unsigned long codec; unsigned long codec2; - /* Decompressor control. */ + /* + * Decompressor controllers. + */ + /* Decording LZMA1 and LZMA2 data. */ #ifdef HAVE_LZMA_H lzma_stream lzstream; int lzstream_valid; #endif + /* Decording bzip2 data. */ #if defined(HAVE_BZLIB_H) && defined(BZ_CONFIG_ERROR) bz_stream bzstream; int bzstream_valid; #endif + /* Decording deflate data. */ #ifdef HAVE_ZLIB_H z_stream stream; int stream_valid; #endif + /* Decording PPMd data. */ int ppmd7_stat; CPpmd7 ppmd7_context; CPpmd7z_RangeDec range_dec; @@ -276,12 +282,34 @@ struct _7zip { } ppstream; int ppmd7_valid; - /* Used for decoding BCJ. */ + /* Decoding BCJ and BCJ2 data. */ uint32_t bcj_state; size_t odd_bcj_size; unsigned char odd_bcj[4]; + /* Decoding BCJ2 data. */ + size_t main_stream_bytes_remaining; + unsigned char *sub_stream_buff[3]; + size_t sub_stream_size[3]; + size_t sub_stream_bytes_remaining[3]; + unsigned char *tmp_stream_buff; + size_t tmp_stream_buff_size; + size_t tmp_stream_bytes_avail; + size_t tmp_stream_bytes_remaining; +#ifdef _LZMA_PROB32 +#define CProb uint32_t +#else +#define CProb uint16_t +#endif + CProb bcj2_p[256 + 2]; + uint8_t bcj2_prevByte; + uint32_t bcj2_range; + uint32_t bcj2_code; + uint64_t bcj2_outPos; + + /* Filename character-set convertion data. */ struct archive_string_conv *sconv; + char format_name[64]; }; @@ -312,7 +340,7 @@ static int free_decompression(struct archive_read *, struct _7zip *); static ssize_t get_uncompressed_data(struct archive_read *, const void **, size_t); static int init_decompression(struct archive_read *, struct _7zip *, - struct _7z_coder *, struct _7z_coder *); + const struct _7z_coder *, const struct _7z_coder *); static int parse_7zip_uint64(const unsigned char *, size_t, uint64_t *); static int read_Bools(unsigned char *, size_t, const unsigned char *, size_t); @@ -342,7 +370,8 @@ static int slurp_central_directory(struct archive_read *, struct _7zip *, static int setup_decode_folder(struct archive_read *, struct _7z_folder *, int); #ifdef HAVE_LZMA_H -static size_t x86_Convert(unsigned char *, size_t, uint32_t, uint32_t *); +static size_t x86_Convert(uint8_t *, size_t, uint32_t, uint32_t *); +ssize_t Bcj2_Decode(struct _7zip *, uint8_t *, size_t); #endif @@ -588,6 +617,7 @@ archive_read_format_7zip_read_data(struct archive_read *a, { struct _7zip *zip; ssize_t bytes; + int ret = ARCHIVE_OK; zip = (struct _7zip *)(a->format->data); @@ -633,7 +663,7 @@ archive_read_format_7zip_read_data(struct archive_read *a, (unsigned long)zip->entry_crc32, (unsigned long)zip->si.ss.digests[ zip->entry->ssIndex]); - return (ARCHIVE_WARN); + ret = ARCHIVE_WARN; } } @@ -641,7 +671,7 @@ archive_read_format_7zip_read_data(struct archive_read *a, *offset = zip->entry_offset; zip->entry_offset += bytes; - return (ARCHIVE_OK); + return (ret); } static int @@ -684,6 +714,10 @@ archive_read_format_7zip_cleanup(struct archive_read *a) free(zip->entry_names); free_decompression(a, zip); free(zip->uncompressed_buffer); + free(zip->sub_stream_buff[0]); + free(zip->sub_stream_buff[1]); + free(zip->sub_stream_buff[2]); + free(zip->tmp_stream_buff); free(zip); (a->format->data) = NULL; return (ARCHIVE_OK); @@ -801,7 +835,7 @@ static ISzAlloc g_szalloc = { ppmd_alloc, ppmd_free }; static int init_decompression(struct archive_read *a, struct _7zip *zip, - struct _7z_coder *coder1, struct _7z_coder *coder2) + const struct _7z_coder *coder1, const struct _7z_coder *coder2) { int r; @@ -870,6 +904,10 @@ init_decompression(struct archive_read *a, struct _7zip *zip, /* Use our filter. */ zip->bcj_state = 0; break; + case _7Z_X86_BCJ2: + /* Use our filter. */ + zip->bcj_state = 0; + break; case _7Z_DELTA: filters[fi].id = LZMA_FILTER_DELTA; memset(&delta_opt, 0, sizeof(delta_opt)); @@ -1100,6 +1138,8 @@ decompress(struct archive_read *a, struct _7zip *zip, #ifdef HAVE_LZMA_H case _7Z_LZMA: case _7Z_LZMA2: { + uint8_t *bcj2_out; + size_t bcj2_avail; int i; zip->lzstream.next_in = b; @@ -1117,9 +1157,40 @@ decompress(struct archive_read *a, struct _7zip *zip, if (avail_in == 0 || zip->lzstream.avail_out == 0) { *used = avail_in - zip->lzstream.avail_in; *outbytes = avail_out - zip->lzstream.avail_out; - return (ARCHIVE_OK); + if (avail_in == 0) + ret = ARCHIVE_EOF; + return (ret); } } + if (zip->codec2 == _7Z_X86_BCJ2) { + bcj2_out = zip->lzstream.next_out; + bcj2_avail = zip->lzstream.avail_out; + if (zip->tmp_stream_bytes_remaining > 0) { + ssize_t bytes; + size_t remaining = zip->tmp_stream_bytes_remaining; + bytes = Bcj2_Decode(zip, bcj2_out, bcj2_avail); + if (bytes < 0) { + archive_set_error(&(a->archive), + ARCHIVE_ERRNO_MISC, + "BCJ2 conversion Failed"); + return (ARCHIVE_FAILED); + } + zip->main_stream_bytes_remaining -= + remaining - zip->tmp_stream_bytes_remaining; + bcj2_avail -= bytes; + if (avail_in == 0 || bcj2_avail == 0) { + *used = 0; + *outbytes = avail_out - bcj2_avail; + if (avail_in == 0) + ret = ARCHIVE_EOF; + return (ret); + } + bcj2_out += bytes; + } + zip->lzstream.next_out = zip->tmp_stream_buff; + zip->lzstream.avail_out = zip->tmp_stream_buff_size; + } + r = lzma_code(&(zip->lzstream), LZMA_RUN); switch (r) { case LZMA_STREAM_END: /* Found end of stream. */ @@ -1150,6 +1221,29 @@ decompress(struct archive_read *a, struct _7zip *zip, *outbytes = l; } else zip->odd_bcj_size = 0; + } else if (zip->codec2 == _7Z_X86_BCJ2) { + ssize_t bytes; + + zip->tmp_stream_bytes_avail = + zip->tmp_stream_buff_size - zip->lzstream.avail_out; + if (zip->tmp_stream_bytes_avail > + zip->main_stream_bytes_remaining) + zip->tmp_stream_bytes_avail = + zip->main_stream_bytes_remaining; + zip->tmp_stream_bytes_remaining = + zip->tmp_stream_bytes_avail; + bytes = Bcj2_Decode(zip, bcj2_out, bcj2_avail); + if (bytes < 0) { + archive_set_error(&(a->archive), + ARCHIVE_ERRNO_MISC, + "BCJ2 conversion Failed"); + return (ARCHIVE_FAILED); + } + zip->main_stream_bytes_remaining -= + zip->tmp_stream_bytes_avail + - zip->tmp_stream_bytes_remaining; + bcj2_avail -= bytes; + *outbytes = avail_out - bcj2_avail; } break; } @@ -2723,10 +2817,20 @@ extract_pack_stream(struct archive_read *a) int r; if (zip->codec == _7Z_COPY) { - zip->uncompressed_buffer_bytes_remaining = - zip->pack_stream_inbytes_reamining; - zip->pack_stream_inbytes_reamining = 0; - zip->folder_outbytes_reamining = 0; + if (__archive_read_ahead(a, 1, &bytes_avail) == NULL + || bytes_avail <= 0) { + archive_set_error(&a->archive, + ARCHIVE_ERRNO_FILE_FORMAT, + "Truncated 7-Zip file body"); + return (ARCHIVE_FATAL); + } + if (bytes_avail > zip->pack_stream_inbytes_reamining) + bytes_avail = zip->pack_stream_inbytes_reamining; + zip->pack_stream_inbytes_reamining -= bytes_avail; + if (bytes_avail > zip->folder_outbytes_reamining) + bytes_avail = zip->folder_outbytes_reamining; + zip->folder_outbytes_reamining -= bytes_avail; + zip->uncompressed_buffer_bytes_remaining = bytes_avail; return (ARCHIVE_OK); } @@ -2810,11 +2914,36 @@ extract_pack_stream(struct archive_read *a) return (ARCHIVE_OK); } +static int +seek_pack(struct archive_read *a) +{ + struct _7zip *zip = (struct _7zip *)a->format->data; + uint64_t pack_offset; + + if (zip->pack_stream_remaining <= 0) { + archive_set_error(&(a->archive), + ARCHIVE_ERRNO_MISC, "Damaged 7-Zip archive"); + return (ARCHIVE_FATAL); + } + zip->pack_stream_inbytes_reamining = + zip->si.pi.sizes[zip->pack_stream_index]; + pack_offset = zip->si.pi.positions[zip->pack_stream_index]; + if (zip->stream_offset != pack_offset) { + if (0 > __archive_read_seek(a, pack_offset + zip->seek_base, + SEEK_SET)) + return (ARCHIVE_FATAL); + zip->stream_offset = pack_offset; + } + zip->pack_stream_index++; + zip->pack_stream_remaining--; + return (ARCHIVE_OK); +} + static ssize_t read_stream(struct archive_read *a, const void **buff, size_t size) { struct _7zip *zip = (struct _7zip *)a->format->data; - uint64_t skip_bytes = 0, pack_offset; + uint64_t skip_bytes = 0; int r; if (zip->uncompressed_buffer_bytes_remaining == 0) { @@ -2868,17 +2997,9 @@ read_stream(struct archive_read *a, const void **buff, size_t size) /* * Switch to next pack stream. */ - zip->pack_stream_inbytes_reamining = - zip->si.pi.sizes[zip->pack_stream_index]; - pack_offset = zip->si.pi.positions[zip->pack_stream_index]; - if (zip->stream_offset != pack_offset) { - if (0 > __archive_read_seek(a, pack_offset + zip->seek_base, - SEEK_SET)) - return (ARCHIVE_FATAL); - zip->stream_offset = pack_offset; - } - zip->pack_stream_index++; - zip->pack_stream_remaining--; + r = seek_pack(a); + if (r < 0) + return (r); /* Extract a new pack stream. */ r = extract_pack_stream(a); @@ -2910,15 +3031,27 @@ setup_decode_folder(struct archive_read *a, struct _7z_folder *folder, struct _7z_coder *coder1, *coder2; const char *cname = (header)?"archive header":"file content"; unsigned i; - int r; + int r, found_bcj2 = 0; + /* + * Release the memory which the previous folder used for BCJ2. + */ + for (i = 0; i < 3; i++) { + if (zip->sub_stream_buff[i] != NULL) + free(zip->sub_stream_buff[i]); + zip->sub_stream_buff[i] = NULL; + } + + /* + * Initialize a stream reader. + */ zip->pack_stream_remaining = (unsigned)folder->numPackedStreams; zip->pack_stream_index = (unsigned)folder->packIndex; zip->folder_outbytes_reamining = folder_uncompressed_size(folder); zip->uncompressed_buffer_bytes_remaining = 0; + /* - * We have to initialize the decompressor for - * the new folder's pack streams. + * Check coder types. */ for (i = 0; i < folder->numCoders; i++) { if (folder->coders[i].codec == _7Z_CRYPTO) { @@ -2928,15 +3061,10 @@ setup_decode_folder(struct archive_read *a, struct _7z_folder *folder, "but currently not supported", cname); return (ARCHIVE_FATAL); } - if (folder->coders[i].codec == _7Z_X86_BCJ2) { - archive_set_error(&(a->archive), - ARCHIVE_ERRNO_MISC, - "The %s is encoded with BCJ2, " - "but currently not supported", cname); - return (ARCHIVE_FATAL); - } + if (folder->coders[i].codec == _7Z_X86_BCJ2) + found_bcj2++; } - if (folder->numCoders > 2) { + if (folder->numCoders > 2 && !found_bcj2) { archive_set_error(&(a->archive), ARCHIVE_ERRNO_MISC, "The %s is encoded with many filters, " @@ -2948,6 +3076,150 @@ setup_decode_folder(struct archive_read *a, struct _7z_folder *folder, coder2 = &(folder->coders[1]); else coder2 = NULL; + + if (found_bcj2) { + /* + * Preparation to decode BCJ2. + * Decoding BCJ2 requires four sources. Those are at least, + * as far as I know, two types of the storage form. + */ + const void *buff; + ssize_t bytes; + unsigned char *b[3] = {NULL, NULL, NULL}; + size_t s[3] = {0, 0, 0}; + int idx[3]; + int stream_type = -1; + + if (found_bcj2 && folder->numCoders == 4 && + folder->coders[3].codec == _7Z_X86_BCJ2) { + /* Source type 1 made by 7zr */ + if (zip->pack_stream_remaining == 4 && + folder->numInStreams == 7 && + folder->numOutStreams == 4) { + stream_type = 1; + coder1 = &(folder->coders[2]); + coder2 = &(folder->coders[3]); + zip->main_stream_bytes_remaining = + folder->unPackSize[2]; + idx[0] = 1; idx[1] = 2; idx[2] = 0; + } + } else if (coder2 != NULL && coder2->codec == _7Z_X86_BCJ2) { + /* Source type 0 made by 7z */ + if (zip->pack_stream_remaining == 4 && + folder->numInStreams == 5 && + folder->numOutStreams == 2) { + stream_type = 0; + zip->main_stream_bytes_remaining = + folder->unPackSize[0]; + idx[0] = 0; idx[1] = 1; idx[2] = 2; + } + } + if (stream_type == -1 || found_bcj2 != 1) { + /* We got an unexpected form. */ + archive_set_error(&(a->archive), + ARCHIVE_ERRNO_MISC, + "Unsupported form of BCJ2 streams"); + return (ARCHIVE_FATAL); + } + + /* Skip the main stream at this time. */ + if ((r = seek_pack(a)) < 0) + return (r); + zip->pack_stream_bytes_unconsumed = + zip->pack_stream_inbytes_reamining; + read_consume(a); + + /* Read following three sub streams. */ + for (i = 0; i < 3; i++) { + static const struct _7z_coder coder_copy = + { 0, 0, 0, 0, NULL}; + const struct _7z_coder *coder; + + if ((r = seek_pack(a)) < 0) + return (r); + + if (stream_type == 0) { + coder = &coder_copy; + zip->folder_outbytes_reamining = + zip->pack_stream_inbytes_reamining; + } else { + if (i == 1) { + coder = &(folder->coders[1]); + zip->folder_outbytes_reamining = + folder->unPackSize[1]; + } else if (i == 2) { + coder = &(folder->coders[0]); + zip->folder_outbytes_reamining = + folder->unPackSize[0]; + } else { + coder = &coder_copy; + zip->folder_outbytes_reamining = + zip->pack_stream_inbytes_reamining; + } + } + + r = init_decompression(a, zip, coder, NULL); + if (r != ARCHIVE_OK) + return (ARCHIVE_FATAL); + while (zip->pack_stream_inbytes_reamining > 0) { + /* Extract a new pack stream. */ + r = extract_pack_stream(a); + if (r < 0) + return (r); + bytes = get_uncompressed_data(a, &buff, + zip->uncompressed_buffer_bytes_remaining); + if (bytes < 0) + return ((int)bytes); + b[i] = realloc(b[i], bytes+s[i]); + if (b[i] == NULL) { + archive_set_error(&a->archive, ENOMEM, + "No memory for 7-Zip decompression"); + return (ARCHIVE_FATAL); + } + memcpy(b[i]+s[i], buff, bytes); + s[i] += bytes; + if (zip->pack_stream_bytes_unconsumed) + read_consume(a); + } + } + + /* Set the sub streams to the right place. */ + for (i = 0; i < 3; i++) { + zip->sub_stream_buff[i] = b[idx[i]]; + zip->sub_stream_size[i] = s[idx[i]]; + zip->sub_stream_bytes_remaining[i] = s[idx[i]]; + } + + /* Allocate memory used for decoded main stream bytes. */ + if (zip->tmp_stream_buff == NULL) { + zip->tmp_stream_buff_size = 32 * 1024; + zip->tmp_stream_buff = + malloc(zip->tmp_stream_buff_size); + if (zip->tmp_stream_buff == NULL) { + archive_set_error(&a->archive, ENOMEM, + "No memory for 7-Zip decompression"); + return (ARCHIVE_FATAL); + } + } + zip->tmp_stream_bytes_avail = 0; + zip->tmp_stream_bytes_remaining = 0; + zip->odd_bcj_size = 0; + zip->bcj2_outPos = 0; + + /* + * Reset a stream reader in order to read the main stream + * of BCJ2. + */ + zip->pack_stream_remaining = 1; + zip->pack_stream_index = (unsigned)folder->packIndex; + zip->folder_outbytes_reamining = + folder_uncompressed_size(folder); + zip->uncompressed_buffer_bytes_remaining = 0; + } + + /* + * Initialize the decompressor for the new folder's pack streams. + */ r = init_decompression(a, zip, coder1, coder2); if (r != ARCHIVE_OK) return (ARCHIVE_FATAL); @@ -3004,7 +3276,7 @@ static const unsigned char kMaskToAllowedStatus[8] = {1, 1, 1, 0, 1, 0, 0, 0}; static const unsigned char kMaskToBitNumber[8] = {0, 1, 2, 2, 3, 3, 3, 3}; static size_t -x86_Convert(unsigned char *data, size_t size, uint32_t ip, uint32_t *state) +x86_Convert(uint8_t *data, size_t size, uint32_t ip, uint32_t *state) { size_t bufferPos = 0, prevPosT; uint32_t prevMask = *state & 0x7; @@ -3014,8 +3286,8 @@ x86_Convert(unsigned char *data, size_t size, uint32_t ip, uint32_t *state) prevPosT = (size_t)0 - 1; for (;;) { - unsigned char *p = data + bufferPos; - unsigned char *limit = data + size - 4; + uint8_t *p = data + bufferPos; + uint8_t *limit = data + size - 4; for (; p < limit; p++) if ((*p & 0xFE) == 0xE8) @@ -3043,27 +3315,27 @@ x86_Convert(unsigned char *data, size_t size, uint32_t ip, uint32_t *state) prevPosT = bufferPos; if (Test86MSByte(p[4])) { - uint32_t src = ((UInt32)p[4] << 24) | - ((UInt32)p[3] << 16) | ((UInt32)p[2] << 8) | - ((UInt32)p[1]); + uint32_t src = ((uint32_t)p[4] << 24) | + ((uint32_t)p[3] << 16) | ((uint32_t)p[2] << 8) | + ((uint32_t)p[1]); uint32_t dest; for (;;) { - unsigned char b; + uint8_t b; int index; dest = src - (ip + (uint32_t)bufferPos); if (prevMask == 0) break; index = kMaskToBitNumber[prevMask] * 8; - b = (unsigned char)(dest >> (24 - index)); + b = (uint8_t)(dest >> (24 - index)); if (!Test86MSByte(b)) break; src = dest ^ ((1 << (32 - index)) - 1); } - p[4] = (unsigned char)(~(((dest >> 24) & 1) - 1)); - p[3] = (unsigned char)(dest >> 16); - p[2] = (unsigned char)(dest >> 8); - p[1] = (unsigned char)dest; + p[4] = (uint8_t)(~(((dest >> 24) & 1) - 1)); + p[3] = (uint8_t)(dest >> 16); + p[2] = (uint8_t)(dest >> 8); + p[1] = (uint8_t)dest; bufferPos += 5; } else { prevMask = ((prevMask << 1) & 0x7) | 1; @@ -3075,4 +3347,177 @@ x86_Convert(unsigned char *data, size_t size, uint32_t ip, uint32_t *state) 0 : ((prevMask << ((int)prevPosT - 1)) & 0x7)); return (bufferPos); } + +/* + * Brought from LZMA SDK. + * + * Bcj2.c -- Converter for x86 code (BCJ2) + * 2008-10-04 : Igor Pavlov : Public domain + * + */ + +#define SZ_ERROR_DATA ARCHIVE_FAILED + +#define IsJcc(b0, b1) ((b0) == 0x0F && ((b1) & 0xF0) == 0x80) +#define IsJ(b0, b1) ((b1 & 0xFE) == 0xE8 || IsJcc(b0, b1)) + +#define kNumTopBits 24 +#define kTopValue ((uint32_t)1 << kNumTopBits) + +#define kNumBitModelTotalBits 11 +#define kBitModelTotal (1 << kNumBitModelTotalBits) +#define kNumMoveBits 5 + +#define RC_READ_BYTE (*buffer++) +#define RC_TEST { if (buffer == bufferLim) return SZ_ERROR_DATA; } +#define RC_INIT2 zip->bcj2_code = 0; zip->bcj2_range = 0xFFFFFFFF; \ + { int i; for (i = 0; i < 5; i++) { RC_TEST; zip->bcj2_code = (zip->bcj2_code << 8) | RC_READ_BYTE; }} + +#define NORMALIZE if (zip->bcj2_range < kTopValue) { RC_TEST; zip->bcj2_range <<= 8; zip->bcj2_code = (zip->bcj2_code << 8) | RC_READ_BYTE; } + +#define IF_BIT_0(p) ttt = *(p); bound = (zip->bcj2_range >> kNumBitModelTotalBits) * ttt; if (zip->bcj2_code < bound) +#define UPDATE_0(p) zip->bcj2_range = bound; *(p) = (CProb)(ttt + ((kBitModelTotal - ttt) >> kNumMoveBits)); NORMALIZE; +#define UPDATE_1(p) zip->bcj2_range -= bound; zip->bcj2_code -= bound; *(p) = (CProb)(ttt - (ttt >> kNumMoveBits)); NORMALIZE; + +ssize_t +Bcj2_Decode(struct _7zip *zip, uint8_t *outBuf, size_t outSize) +{ + size_t inPos = 0, outPos = 0; + const uint8_t *buf0, *buf1, *buf2, *buf3; + size_t size0, size1, size2, size3; + const uint8_t *buffer, *bufferLim; + unsigned int i; + + size0 = zip->tmp_stream_bytes_remaining; + buf0 = zip->tmp_stream_buff + zip->tmp_stream_bytes_avail - size0; + size1 = zip->sub_stream_bytes_remaining[0]; + buf1 = zip->sub_stream_buff[0] + zip->sub_stream_size[0] - size1; + size2 = zip->sub_stream_bytes_remaining[1]; + buf2 = zip->sub_stream_buff[1] + zip->sub_stream_size[1] - size2; + size3 = zip->sub_stream_bytes_remaining[2]; + buf3 = zip->sub_stream_buff[2] + zip->sub_stream_size[2] - size3; + + buffer = buf3; + bufferLim = buffer + size3; + + if (zip->bcj_state == 0) { + /* + * Initialize. + */ + zip->bcj2_prevByte = 0; + for (i = 0; + i < sizeof(zip->bcj2_p) / sizeof(zip->bcj2_p[0]); i++) + zip->bcj2_p[i] = kBitModelTotal >> 1; + RC_INIT2; + zip->bcj_state = 1; + } + + /* + * Gather the odd bytes of a previous call. + */ + for (i = 0; zip->odd_bcj_size > 0 && outPos < outSize; i++) { + outBuf[outPos++] = zip->odd_bcj[i]; + zip->odd_bcj_size--; + } + + if (outSize == 0) { + zip->bcj2_outPos += outPos; + return (outPos); + } + + for (;;) { + uint8_t b; + CProb *prob; + uint32_t bound; + uint32_t ttt; + + size_t limit = size0 - inPos; + if (outSize - outPos < limit) + limit = outSize - outPos; + + if (zip->bcj_state == 1) { + while (limit != 0) { + uint8_t b = buf0[inPos]; + outBuf[outPos++] = b; + if (IsJ(zip->bcj2_prevByte, b)) { + zip->bcj_state = 2; + break; + } + inPos++; + zip->bcj2_prevByte = b; + limit--; + } + } + + if (limit == 0 || outPos == outSize) + break; + zip->bcj_state = 1; + + b = buf0[inPos++]; + + if (b == 0xE8) + prob = zip->bcj2_p + zip->bcj2_prevByte; + else if (b == 0xE9) + prob = zip->bcj2_p + 256; + else + prob = zip->bcj2_p + 257; + + IF_BIT_0(prob) { + UPDATE_0(prob) + zip->bcj2_prevByte = b; + } else { + uint32_t dest; + const uint8_t *v; + uint8_t out[4]; + + UPDATE_1(prob) + if (b == 0xE8) { + v = buf1; + if (size1 < 4) + return SZ_ERROR_DATA; + buf1 += 4; + size1 -= 4; + } else { + v = buf2; + if (size2 < 4) + return SZ_ERROR_DATA; + buf2 += 4; + size2 -= 4; + } + dest = (((uint32_t)v[0] << 24) | + ((uint32_t)v[1] << 16) | + ((uint32_t)v[2] << 8) | + ((uint32_t)v[3])) - + ((uint32_t)zip->bcj2_outPos + outPos + 4); + out[0] = (uint8_t)dest; + out[1] = (uint8_t)(dest >> 8); + out[2] = (uint8_t)(dest >> 16); + out[3] = zip->bcj2_prevByte = (uint8_t)(dest >> 24); + + for (i = 0; i < 4 && outPos < outSize; i++) + outBuf[outPos++] = out[i]; + if (i < 4) { + /* + * Save odd bytes, which we cannot add into + * the output buffer we have reached the + * end of the output buffer. + */ + zip->odd_bcj_size = 4 -i; + for (; i < 4; i++) { + zip->odd_bcj[ + i - 4 + zip->odd_bcj_size] = out[i]; + } + break; + } + } + } + zip->tmp_stream_bytes_remaining -= inPos; + zip->sub_stream_bytes_remaining[0] = size1; + zip->sub_stream_bytes_remaining[1] = size2; + zip->sub_stream_bytes_remaining[2] = bufferLim - buffer; + zip->bcj2_outPos += outPos; + + return ((ssize_t)outPos); +} + #endif diff --git a/libarchive/test/test_fuzz.c b/libarchive/test/test_fuzz.c index 1e25cb8fe..78d941d1a 100644 --- a/libarchive/test/test_fuzz.c +++ b/libarchive/test/test_fuzz.c @@ -65,6 +65,10 @@ static struct { {0, "test_read_format_7zip_bzip2.7z"}, {0, "test_read_format_7zip_bcj_lzma1.7z"}, {0, "test_read_format_7zip_bcj_lzma2.7z"}, + {0, "test_read_format_7zip_bcj2_lzma1_1.7z"}, + {0, "test_read_format_7zip_bcj2_lzma1_2.7z"}, + {0, "test_read_format_7zip_bcj2_lzma2_1.7z"}, + {0, "test_read_format_7zip_bcj2_lzma2_2.7z"}, {0, "test_read_format_7zip_copy.7z"}, {0, "test_read_format_7zip_deflate.7z"}, {0, "test_read_format_7zip_lzma1.7z"}, diff --git a/libarchive/test/test_read_format_7zip.c b/libarchive/test/test_read_format_7zip.c index 612170011..a17d2a8ab 100644 --- a/libarchive/test/test_read_format_7zip.c +++ b/libarchive/test/test_read_format_7zip.c @@ -636,6 +636,10 @@ DEFINE_TEST(test_read_format_7zip) test_extract_all_files2("test_read_format_7zip_lzma1_lzma2.7z"); test_bcj_lzma("test_read_format_7zip_bcj_lzma1.7z"); test_bcj_lzma("test_read_format_7zip_bcj_lzma2.7z"); + test_bcj_lzma("test_read_format_7zip_bcj2_lzma1_1.7z"); + test_bcj_lzma("test_read_format_7zip_bcj2_lzma1_2.7z"); + test_bcj_lzma("test_read_format_7zip_bcj2_lzma2_1.7z"); + test_bcj_lzma("test_read_format_7zip_bcj2_lzma2_2.7z"); test_delta_lzma("test_read_format_7zip_delta_lzma1.7z"); test_delta_lzma("test_read_format_7zip_delta_lzma2.7z"); } diff --git a/libarchive/test/test_read_format_7zip_bcj2_lzma1_1.7z.uu b/libarchive/test/test_read_format_7zip_bcj2_lzma1_1.7z.uu new file mode 100644 index 000000000..11c2133f5 --- /dev/null +++ b/libarchive/test/test_read_format_7zip_bcj2_lzma1_1.7z.uu @@ -0,0 +1,287 @@ +begin 644 test_read_format_7zip_bcj2_lzma1_1.7z +M-WJ\KR<<``.395S=/#$```````!D`````````(2-+0,`/Y%%A&@[WP)!,(6+ +M]:YDCG/TF9,6Y4@I6&:W,\L.GXAK)SG^7$ASM;Y]KP;]Q:,S]93R>,&)>5<, +M&FZE"`#6^N9W.O9$'UE^T-50DI_AD]BN$0G/D?)@D^5S4+=>0I338+60+5WO +M?S\=&H#(CWK#P8A*.F39U-N85;*`7:QH4MPY]Z"R4@0-G[PN0P/I&4U*T@DV +M'"`CQ@7=GL@J7_2-A[.]&`<]D>$^(9=0(?Z*\Z.%M#RG1BD;5#6(4_PL?`47 +M!00BJ=5&HZ7@@B$C!NO::D+1C%8P).\)*UDX0P@<+::RMJNW=<@+:$ZER\IE^S3<>=HCZTG +MM[:O[2?'(:Q@840D]\]5Y73NXY[]$A&S9_<=T[^)S9E-I@,/"Z%N3%P8EQ8N +M.<>T1U:G?9*=LX1R,65>5\LCE.PG__FU`+L]UUEKFS13]3C4N`J/2*#MK;D6 +MR_YC0[KZK#6ZDVED3OA(WO_#+'G.!7!DNT&:A<:N8%2S1T,0<.CXWI?5110E +M(]/(V5U26WQEEBY"+^%%%QQ*$$LVGS;&M##OO=PE)#7IOV]4!T0>MCVFR7A^ +M)`*]D,D*8(TTY<\22+QK022#]K1P8Q>ZDOE"5%*XR1S_RD)#8:OFV8PM<:&: +MXO9&=U7J?O95W3V[0_>S$IA67];6D(/WJJ:Q>6%"L4.3$3?0E!!$%?%!2/7& +MXB4BNO1`#[FYN$MKM,TL^'./,4GY)NO_;YJ7P +M.<8Z"R!*LK]S`B1=P4X(^JK3]7X8N(%H?=H&K>KB'G7(0C'R=1Z0Z`IBTR?O +M>DKYV:WR$Q0MRO.CI2E[0;'KUGX`,?^8H_"$EOK=81Z5Z4VZQ'O;;O;-'3N/ +MM(@343API(#U5#X1=PK%4)/F?[I"DE\39HS<'P)7H49\16$$ES92A@%4O+Y4 +MAD=?Q`Q6L[^+YH+AJ-Z!]8./"Y'^Q"*$TJ#,%/ESOJCC)X:D@0R_?J)%YC&F +M):9`]N(:_,O,>0]$-QL,-?ZE@EH7Z=TEA\M7949(]"*65FN\?-CF(U?7P0?R&\DOWV5DVFK[.JXEP>WU1IL?6K&/CWJ(7%PM9 +MZI:B)8)Q$N-53QL+1O[;'7O/7/O^;3JY[WU7(!DWS`YXM'QL?+>("XZ7)FJ3 +M#T4640CH[0Q8U319C-]L^2259=A(C)[[!/*9P+!6MXIH$N)1*Z:&QIZ7]E*8 +M%(B.D'_@P=8!H(?*X?N@HB+MAKFN3F][.%W':*1!5I4=/"TFY>,\=4<$EI/) +M\S[27U*=0/;8!0P4W/=5+RC"*W]L[Z>GIXO;=$L;^CKMC. +MFK$GA0?W<=3^K@8Y^D_FAZ!W7WZ#.6HO6/_:M&X<5E:R +MAU)=J;SF.%&+0R;V*[FQB?;-D6E*-E9A9B[,4F',0KL8S]AZ3/3,AZ!6('R] +M)>:,3R!'4,\HCK1#'3_?PE4$NKGPX,R?.IK6$:/[E%8278\-K\&D4\:14"/( +MJ(V,!$2BJH@D@[TOT`^<-9#'>!Y!%G[3Q4L[4EU[56_:"*>E#X'=E='@D%RN4=E!\F6P+B>NF-E.')J;D/S +M>](@#H.CZB,"S;X1F.)O-8.%W0+\OBW-QVYBLHRW$*]^CP(Y/U\G<3B;CDT0 +M]"EG+*#EDEZI35$5+9S&_^!_A78^X7/<2I.4Y;"H60LCL"Q.5U=,LHK4"6W:HZFZ?(LI+*? +M1?]2$%"5;V^Y]A>V$A;XY*$P"@WF:#I'$>>Z@'G8"9##/BP&7S4PR+!4&:25 +M@0#?WAT5NTR6,RW,0XNFDRGJJ'"[!B#`M[^0! +MB$_UO("?`8';,_EYIF/`YS,HY7,OO1Y`A$BAQXI(K,:Z?[$DK[LF1JP-RIXI +M[\KEKZST5NF-26U91M2>F]R-?H6.97>%;M$0B&E;\FPR!_8150K#<]3V($5- +M6SHJ[/"&TYD;ST3!R#@B92\![8+L/;^9;:^+(C'(Z[&A,_Y7P=$6SKYQ6J=0 +M*0/@I?K_Y@L:A'XR_=%D=4UM5^8.7CZKI3H%Z.&F'T_0IXB6 +M2\2+(R4=NDDVG8N]A(]M&ZH6-!N;N%IEGNP%1\$646$4*?JTOC-1%3H/UB]S +M-NON.J5*JN\71XV9L`?IV0DNQY87`Q/JQERXF.B<<1R$A7$ +M??LEM.:+%*JG+/SM23OHC_X[]'*WW.H;R658END(V=8SJK]K^DVX!XR.GLR_ +MFS_7>CF[]F7&4V3E<#!^5`/B!C955]_-N(F0[!^%U)G(DX,Y-SWE%.TJ1,KN7K_JS^OH?.6U\4@Z>K5-0[1GY` +M57LW:6>GO'!>FU^^MH"`=0.VICBJW_"`.AN^14_AL&:(BY,W +M+\E%!4$G^;3$!WW_)J>_-%0KHJUB`ADT\]#`$ +MW3*]RC&JDCHP0&BAT2\;Q#N>&MUFH8&I[^72X/_V&S]J0[4:!R+L=FR<(I>K +M3G<79].'1C5M'U>E=@A:6<8C&M4)IEIC='07>AK,.RT4,[9^6M!/QSSK`/9& +MI/X#T`#T0[ZY:H-6_F*QC:."_0I<'O:3-EJ910,KJ[^>E@H2O$OKG>0HH/;\ +M>`:*1^*-<'X_;P-,1-C>?E?<23A=YI-VJFS]NL;H`D?>=%N\ZC)L4V5TO-RL +M,S:O8KM?0')<[`-@&.`>$;')_TT/3IZX02G6'789"M6-5^4_;N;L$B053#PY8*6KD%Q\#"G99 +M*RY0Z]!B"5/58PTJAH.UI_> +M?7]0O.%'W&>\4J*)FOS]X!HZC^6GLFA%'@VA%5#''Q\V@K:?WJ>\L3D"9G\% +M![+R^KAFA7Y:!61'?B`@^9'[)U]1R,&85*!E\A5CGU:'E%0\O$LHS2\"B(18 +M$R)+4?8NA^8`SJ]-5YD)A:3U7\GMJ,K(\79#AA8J#X81K0]V6#WSKG7W7G1] +MWTS59JPM\?#9`DSGO[3FCJ1U>0F[XY,5-D!`)ERPIK8YNZ<1#3T^S:+C8/16@5 +M=L/='P>_ER`"1V@R?`1@:Q1[!6=R<"SM.1N==H%HFO'0C;.%HC""AY8(+BC0 +M_^(<;#3G4^ZS(=R32LH'F5REZ:9J?G-L9X46GT)QPNQD%CIER2^OB@<;/$ +M_%R:QR)8XMOG._E1^&KX=&ZLC"B'D1YVJ;&*&^[OM/-`LW*+@$^IEI1*2HUN +MJQ$;!@T3%"-OC(Y!&.N$]^G=1CAVWG>^;4K_CU%0O?[>H$C:%&Z#9RH1=WZI +M-'G2?PM[0DM@VUD@'#-X[!I3X\F&Q$/-C9._6,;]T=KCX)Y#+K,"OJP?9GAK-^S5RJ)0LK;Y3A54> +M@BNYR?&'45;186QEIU)WBT\DW7B?FWL.W>MQ@X.Z>"2*RFEB$JP=]&M4<+V> +M]D82H%QX6X:9COZU1JD]$X=;-3)%D'S;\?5L1[^;7F11T)=3:EQ;3M#([X>4 +M>&:!^+/A#!=)N+/]DT'U'1FKJPXL=@G^!$A6=H049Y(?^4G-.Y.4J(BY#1.4 +M:$>D@T;H$PNN>VP6G9',Q;\'M$']7TDC +M/%-"4)#^/D2F%I!-LN&EJCEVS]-O:`+MVO0,`YI(KBH\>4I`AQT>X'U5 +MT('3V/#GB:4M'08,UE]/U:&?L]AOUO6U$NF:J\#BSS8'[5F"/95"R)[@B@^( +M_]/+<%9),KA*@T80#.%W^/LT\['V\G=-6-_`,Q8=,W"*9.8P@^@YN))H,NOY +M4W@9@ZTU-J@XV.(D=_XT[[">*B,8"9RT/@M,K3(/J\Q8T(/_QSJFC-[EWGPV +MDLJ=P'\G6VL2'<>CKJGX$)05&0H?$N4,=*`+_5?7W7@?[KBY*@$<'%7QWH>& +M1A6<5`$UD3B8;S@,[1!$--9<5)=Y\0MU&;I860&<'[2K:C35?'HKD.YL1#(/ +M_N\WBKS'7LT6Z`7I&6JZ*4`0E,!)N,,`S\L-7)?K&;9;I81V+/*(=<[ZW;%I*D+@@"IEC63J81?NT^^A/!B?OJZ1?6IFN` +ML,JZ`]?W8FW'LNFBO+EJ^%>$*E64)G.V]D?]7FHW3G24:D)`BB6.R)PC>@T/ +MMH1)Y2]ED,YCW&6Y1#H.N`M\NW&B(K4/GEXYR4]/3E5/JM&7(TBV9#Y73UIJ +M"74MB'_A_60"U=9$<:=?E_:EQ#$Q['-B%F4Z'\V\^B?(>UWEK:?:N9:&]7VN +MQT"K/+E7./L_%?*NNYFS?WBHYFQ.MTF7[U%<(M&(>,>E4FK[GJC2,B8B)J[W +M]@R5F;=);`Y+[*PK'#H@PRD3RVKND8UI9/\:#<>R2`H<]#GY@H6D,GKG_+@O +MSOG[5;B=T6?,IKNB/)37_L8`3N" +MCV04E30(C[`_,C1ZM\8:&B^^KOU5L$`AL/B4[FM$"'X(X,3>V,:21%"T%K_= +M",4-.[%]PW[1EW0*.N;E=7M&MR14C4SFP,;2RTAT93N<6`4Y'.]' +M<0Y*G?\Y)K'Y,`E[^!:SZ7;[J%F(,BDT)O\.4%"^OY7BYH=[M`;APMZLWJTV +M#PLN&E9SS*W%+IK"\`](5W89"?A2QZE;+:.;UU0V*!4@-OK9WM:")2G$X-G+ +MYDLV!!0N[S-``]+V<'+4F9,3Z/IJL[?+K6%^$LW7+/+T28:LZHN_^^%)%O;V +M`!$@U\W)O\%V1=N1KA?>#2.+$,J5I\X]`L7D@B_\LHJJS%\C@&6O,)W^$1^X6SH@Q;4\*F6*L<]"^U7,:ECU%;Y;Z^AY9QD+86BL72A*#)L828G*3ZFID +MP:@S,=0>12UD`2LN_77?>SHB3H+5:(J['1-,?=,CL]S+Q5:`=U%\;L;^S03- +M*=G[8HV`*E5O4<@A)[3-2Q(!23U#1&MG_9B/`IT9E&\^J3SLK[ALL*HQ:F5T +MP7H>R>=_SQ.6[2K^^;]C@3A9ZQQ_1''XFFAE@R1]$R:,;WYJ9><8)B@P,H`Y +MP>:6RAX5-?]\Q,TY;A\*B58&9FYM_ +M/5(=II"YZBL!Q07-BQ7''E@?+M9(1A(^7K2(_K_0^1!%-R"BG9%\WX$S&BQI +M447_A:E]3`MY8L3$15/PLL,,V.D"<#!TS&&,2D>/W15B5L`*5Q,VXX3>OU:E +M8M.QP!MX`_DR^G^>>F$ZJ%`#44].FM;>9R>],DI:A+5J4M-\([Y<'B$8HT6O +M,3L7$@>Z6V23)DXL30&7P!MD^*E2C%HN;RG0#P:#?^H$9WSH\QV.A&\N_#PE +ME#(*4>VY3*]&JS-JQA;>ZVX*@>\RR'>XPOO[Q/-B89$#95Q>^-#UX";H%=R0+:J`P\Q,.US(!JB`7Q6EO8AC@:1'HJ!DV +M\R$FV#MK0'W.*XGF@LVCAF0BY*_CQ@8Y\>9KAXX$<*60D=9]I1`^V8!;IZJ1 +M5\1HK%V;2.$5*(11I^PR9$L!=LS0.>V5)8=N$`J3X-?:&W$02^%;ED7R]>'E +M3G:C,5I"=R(S#>;VFF!T:8H>:N\A;$3`DZ\[QS*(TM['0KDC+"PJ]?;?LX)" +M]RT?;(0ICY;HY/XV4C]LL^9+6<:]Z"]2>V*7*82U#8X5`WI%\]/_FJ,J?[^& +MP&,U*C?*1!%W!JGEO"EL]HQ.G#\ +MB1&H%Y:ZLO@L^0TH9"#?80.54)Y:)NR;2G_;/?66G880!=2O?"(Q4&^TZ-&J#+RNDBC<$HYE6M7ZQ_RKG/H;+MJN"J[SNK[H*>V^OFI@^GJPQ-0 +MVZM-/PMMC7(C$7W6IC.D$NV'S'^R`["3]:2:)ZU4E"-\FO-GFK)T=U[O7*>/ +M9&F(F&)=3D`5J'B5WE"G9-D4=I".:5-V_I83LAB7+V]2#']4.#T9J_O9UD?, +M@ONJR/4A`Z1)* +MJT?P_B,SW4S,;XG4><,28D@FJ%N66*K&<1&R%E2*"5&O%[>U20*LM"@$-WS: +M2G[W3L-3;Q\IXG#N&GXAEB$ENVP+`]QWWI;FUFNFZZMC6)[@AGZ44AJ:/[!* +MHCE?QE',)MJ!0O-N+!,F(5=0#\][W5:O6)6"NV+K,DJB-KHRE-1BZW_Q%TW3 +M9.+UJ4-UB-P&!,GZ(V(D1/4E+I%R,=[OZ,5[[W<#:.F;)&.'6P:7R82KS$=Q +MBQCV_D+<&B.1F?NVQFNA5#-UD;VRE3:Q1>20U5U0CSDH\6+IE8D'&T3`X)V@ +M/G-NDUCKD15JBL@DX]8XM(;XEX%\JU/O^977K]H4$CKJ>N^/F2\6:7IE-D5$ +MWV?@R"XQRK#!F8CDKD*84=P7]!/+$U5\!D$&:$8--5F@!+QO\_,N:@8QAP.> +METO'5=*$*7^!B&C,<7].Z7>;D?+A>ZPQA$BF,<9^/\/\"#:/9@867V="7`M' +M6;4Y4..L9^9#-Y:ECQJ:UVJ/TY+=N0`1"$82TGD$2O.%/9:-NX,_KLBYXFR2 +M!AY-\F>4\X-2,6^GP57R?T%!]JEGA@IIM:8G)._0!'Z,Z>(1CO2$#CN-&!D: +MW=^$#VYAHWK`*97^NZ";B18_)$&0$,P54J^T+]Q:1&X7ZOX +M+.6-SGM=)-;O6X(WW`6.EI%")'=N?^/'91?K1`N.!">2.%4RLKR*&UX;S+1" +M\PVI,2L&5X(&ED%7HG&)//_$)+O\_F-OH4'FF:+SUT?L&PK(K;I+IX@W6B1![(%W +M2A>[GK>WE,34L\P7KQ07_QANUF7(ULOVASH42%#LT^!]CHL3D>"Y2"[DF(`S +MT3/='[0!8%[XDG/ZI,T^X0JXA:IRH]*>X= +M]"Z=V.LJ1;]78D8*DD+[!]%)2%CX=G^<@_9MIOC`_8_AA"(TPBH7XN-*:]1V +MF<`QGL87I#TH.+%QJH][(T5NE40+NI"CP%<5NGZ*?;628\O/:4R@[<2)3O+! +ME*I9ERFSXK:\&N3(-+9_O0N69;#7VU7U@Q`-&42_6O5T1J$F<,A?,GW92OO, +MR+V^>0`2"XIT4CEF[<)^AZ#).1%MS4B!:!E">OT'X'.*<&SJ.R6@F$EC%54$ +MF36,5'`;Q([%_M"\#G\WH/$M%L/F%^=YUND)Q:J^IPPSS^3E(&QT*75E^,)M +MW#[_;$`)>3].RC7!."?J^0/2,S8(0"SL\QO:(OR!!1J)MDM9@OPYW\& +M:H*^6B-X6!C,L!Q9/1*]F.8FNJR,&2.]!B/EQYT6*[RF0`_('NY8DC493"!# +M[_8)N+5KG.`')R.``AW^93-2"9?),:`E"?N1N`B0[C21TZC#T5*WJR8AH)]; +MCBEV41)9?5[&7(^LTPRIU^A@,;Y8/-9H9.2.@0+OP`IH+*&A0J*'`U/X%3\7GN+,C);X*IE +M)FD27"H8M*O/VT^J5%(-F/9L;)FJ(1H&U=##?58FI(N4ZC=C:+NQS]1O*D"E +ML:C9%MF>5$M#%YO&2@%&TII1N1M234_2CF`9!;?P>,9WKE^4+%9J=DNM$OTA +M04QHA.U=\2^:]X$!!L^($1>51^JVZE]J'!*H;BZ>.GE&O!4,=T"@!>>/L&\$J@`%=`;*N=ESG(OAG7MIF`(Q2^:_W`JH\IU@DQ^KHZKRM*;HOB5OB0Q\-[\U")X@PWIU!I_C:[4\X.U +M]"!MK&&R.7\,>(*6ZE,\2^TE?2,GJ9WYAJXU6L"5VFX-5R%>L])(PI"$[J1@`2L@#TC@E[0B8H"MQK +MOIUWTIUB'E7.Q$`MKQ&*OT*V$27$CIJK;*CEO?=6PWJBD2\!B5'N72(D?>$I4!I[06.KT!)Y:^8B3E$A\6]GVKQ5H$- +MX\,#5;HA*G]>TQ[58K!(*%N"S0Q<(&=ILTVS_6!K>@77J#T8].5$(8%8V[M^S#"]#LO@=SO4$ +MDMK!M3083U<&)`DI+4^*.W/A(J-!(:R5#N3+"^LUGH!(/T7O3#T?A;=!AR>F +M&AFC3:2S/"'3'!G>V80+^\>:'A<^;H#1)E[^&?=WN*C4>E\8)[61*2L^><<;#R8A]"'5ND6O&_<'@C +MD"CWV]FE_[1);\69),/-(+,LJ.0LU?\H]XL8_:7H($?.0)&_"HQG,3&]EBG5 +MG2W%^1-%OU&WDS@Y6?$`^;B)C`I]!83*J#II"K<]X1'6YT,(JU!HG35]1X*S +M-5,5QA;;UJ!D1=0%3I?PF::/OZ<#L;R=$U\QS1.H.=Y+AEC.K)V!E])AA-S. +MDA!KDN^QV]F62-./+*.UTH:114D"$V$DWD#/0ME2$7S:X(*:2#N,#_QI>28\ +MKDT-3,MQ%:]@6H +M*]GUT45V.6$YM+*Y,`Q=QC(+E`H"&\85Q"3.&FB6$+IQ=$_^HA`N$;=SIDL-@1?3\>O!E;O\[$YU^(*"D@ALTGYRJRF<*+]`@[O!L.,Y9)3XPOHE[D2K5$LD',W4Q>/%F\+/'"2U/W5(E= +M=I9FG8(OQJ,M*1GQ%+%`3@WP-A,.*:T(>!\C6X+H6[?]`JJ2%]6QX&(A=:Q\ +MUJIM+))_2U.!1"!5[<8U5AZH-@VYF$C.Q2VV^AM!11S(=G;M#;*N85A^C%4I*V9?@T_ZA@8&3#]%">19T>(+BE_$:EBI7YB!'N< +M33*E_Y(CHT6.,H8#WG[0W6:79>/K<1M9FB6'B_X9\I";A;Q,[1^.O9_=(<*C +M@3']U97@UWA/Y=W4=$_FR\SB61"7M3!)+>;]&ZW+0#4*85?-$^YUVT?:7N?Q +M0_AF%#BW'`L\FJ:18?4X!NR._`[7GE?61$.FY\..[%QZ2^'F&W]Z(+7X(0;R?[J'5 +MN2]KY%$HDA^S"*VK;TQ,Z$8K3A-:)>@'K`'FO%ZX*KRLKG+P3:,,.V"@QC!S +M^DN*76M228@B^B&U20&!KB-8<&L;ZL]W4H#38W]M7^72 +M.W"!1W,5VV%8LV>:KDE:%9F)*ML^_&]6-_O?)H;R!Z%6NLWK$H/0KXUT!!I( +M.GD=DD,'GWUVF>1DX9:%G"1^#<[VJE5@!B@P"5:X1(?!J2A+`6"B```58``` +M6%```!20```3Z```$^@```_D```HH```$U@``!&(```0B```2?```!*H```2 +MJ```%!@``!08```3:```%"@``!0H```4*```$[@``!%X```2*```$[@``!*8 +M```16```%"@``!.X```0"```$[@``!#8```4&```$1@``!*H```3>```$2@` +M`!'(```4&```$.@``!*X```1R```$-@``!*H```4&```$V@``!)(```3N``` +M$J@``!08```2J```%!@``!*H```4&```$K@``!*H```4&```$X@``!.(```3 +MV```$R@``!)X```98```$N@``#?````0&```$G@``!E@```1V```$N@``!)H +M```1>```$B@``!(H```WP```$!@``!#(```32```$X@``!.(```3J```$Y@` +M`!"(```12```$@@``$FP```0B```$#@``!"(```3F```$(@``!+(```2V``` +M$M@``!"(```RT```)@```"8````36```$S@``!"(```3"```$\@``!18```4 +M6```%%@``!18```46```$#@``!18```2.```$C@``!(X```Q\```$M@``!0( +M```0F```$&@``!08```2*```$B@``!"X```2.```$+@``!(X```2.```-#`` +M`#0P```T,```-#```#0P```T,```-#```#0P```T,```-#```#0P```1N``` +M$6@``!#X```0>```$$@``!+X```3V```$,@``!-(```0R```$T@``!#(```3 +M2```$T@``!-(```32```$,@``!#(```0R```$,@``!-(```U$```-\```#A@ +M```WP```,?```%;````2B```$H@``#N````0R```$T@``#N````0R```$T@` +M`!#(```32```$H@``!&8```2N```$H@``!08```[@```$,@``!#(```32``` +M$T@``!(8```2J```$:@``!0X```1.```$_@``!*(```0J```$H@``#9@```W +MP```,?```!*(```2J```$H@``#9@```U$```$H@``!*(``!6P```$H@``!*( +M```0R```.&```!*H```42```$H@``#?````2J```$H@``#9@```V8```$J@` +M`!*H```2:```$7@``!`H```32```$_@``!*X```2:```$K@``!&H```2:``` +M$K@``!/8```3&```$U@``!)8```06```$0@``!)8```3V```$E@``!!8```0 +MR```$T@``!)8```1"```$,@``!#(```1"```$T@``!-(```0R```$T@``!/8 +M```26```$%@``!#(```32```$0@``!)8```2B```$0@``!#(```32```$]@` +M`!)8```06```$,@``!#(```0R```$,@``!#(```32```$T@``!-(```32``` +M%!@``!-(```1"```$E@``!'H```1"```$,@``!#(```32```$T@``!/8```5 +M,```#_@```_X```/^```#_@```_X```/^```#_@```_X```/^```#_@```_X +M```/^```#_@```_X```/^```#_@```_X```/^```#_@```_X```/^```#_@` +M``_X```/^```#_@```_X```/^```#_@```_X```/^```#_@```_X```/^``` +M#_@```_X```/^```#_@```_X```/^```#_@```_X```/^```#_@```_X```/ +M^```#_@```_X```/^```#_@```_X```/^```#_@```_X```/^```#_@```_X +M```/^```#_@```_X```/^```#_@```_X```/^```#_@```_X```/^```#_@` +M``_X```/^```#_@``!'X```5D```$?@``!9````1^```%M```!'X```78``` +M$?@``!?P```1^```$?@``!B@```A1```(5L``"#]```=7@``'6H``!YQ```> +M4```'5```!U0```>B@``'S$``!^B```EJ0``'LT``![-```?!0``&H$``"$; +M```CMP``)?0``!JD```=5P``&J0``!JD```<````'/$``!S^```<_@``)>`` +M`"7@```<5P``'%<``"2R```@R0``''```!QP```@/P``'^D``!XR```=N0`` +M'C(``!FR```EJ0``)<<``"6]```DU```)1H``!HQ```=ZP``(#4``"2-```C +M00``(Y@``")U```A\@``(:,``"B"```G=P``*`@``"=H```GP```)X```"A& +M```GV```*"P``"A9```F@```)H```":2```H;@``)H```":````F@```)Q`` +M`"<0```F<@``)H```"9R```F^0``)H```":^```F^0``*8L``#$P```OOP`` +M+#H``#"!```K[0``+`<``#`3```P5```,#P``"_H```P8P``*QP``"L2```K +M'```*?\``"HF```I8P``*6,``"EC```I8P``*6,``"EC```I8P``*6,``"EC +M```I8P``*6,``"EC```I8P``*6,``"EC```I8P``*6,``"EC```I8P``*6,` +M`"EC```I8P``*6,``"EC```I8P``*6,``"EC```I8P``*6,``"EC```I8P`` +M*6,``"EC```I8P``*6,``"EC```IVP``*=L``"G;```KHP``,6T``"NM```K +M0@``,4P``"NM```KP```*ZT``"NM```KP```,Z```VF```-I@``#:8```V@0``-I@``#:8```V +MF```-I@``%$0``!+(```3H```#ES```Y)@``.?D``#I*```[4@``.:@``#HJ +M```YQ```.+(``#KB```ZP@``.OX``#IF```[-@``.J(``#L:```Y%0``.9<` +M`#GH```Y8@``.-H``#R(```[LP``.ZH``$`\``!`*@``/^L``#_K```_N@`` +M/X0``#]R```_A```/X0``#YT```^K0``/DT``#XT```^-```/+```#UP``!! +M5```09(``$"@``!!$```11P``$4<``!$]P``1J@``$95``!#5```0U0``$-4 +M``!(>P``1_4``$@U``!)!@``21H``$CC``!(Q0``1C```$8(``!%<```17`` +M`$>P``!%WP``1^4``$?3``!%]```1O```$<```!&T```2,X``$(```!)I0`` +M0?4``$>```!$4P``1((``$2"``!#M```0Z<``$(N``!"(```1/<``$2U``!( +M1P``2(X``$3)``!%N```1$8``$1U``!$=0``0L$``$-4``!#`P``1S```$-4 +M``!"@```1,D``$-,``!$]P``0U0``$-4``!#`P``0P,``$@U``!(-0``0U0` +M`$K]``!-I0``3.0``$UO``!-1```3*,``$R!``!-\0``3=\``$MH``!,`0`` +M3`H``$U5``!-_@``2V@``$W%``!.'```2V@``$O)``!,T@``3CH``$Y4``!. +M<@``31,``$QP``!,70``3,@``$S2``!-"0``31,``$V>``!-E```39X``%"% +M``!0:0``4`(``$_4``!.R```4+,``%"A``!.R```3S<``$]```!0P```4-\` +M`$[(``!/R0``3[8``%!6``!030``4%8``%44``!2L@``56D``%3?``!4WP`` +M5-\``%5&``!60```5B@``%44``!5=@``45@``%4T``!3J```5(```%/A``!4 +M8```5!```%2@``!40```5,```%*'``!2T```4OX``%,V``!3;@``4Y8``%,@ +M``!3*0``4N<``%+Q``!36```4V$``%.-``!3E@``5:```%+$``!2E```5KH` +M`%()``!2$@``4;T``%%8``!4^0``5F0``%9^``!6G```4H<``%*'``!2;@`` +M5>P``%7B``!5[```5A,``%8<``!7H@``5\```%<&``!7!@``5T```%=``'__ +M[(*_<*GBTO8J#[&TS@MGB4R]0=<':N.(W\G9G;.:/7*.,11&`00&``0)I/&$ +M;(>X)P`'"P$``B,#`0$%70```0`4`P,!&P0!`0```@,$#,"<7L#`:@`("@$] +M?9*5```%`1$/`'@`.``V`&4`>`!E````%`H!```M0RMQLYT!%08!`"$````` +!```` +` +end diff --git a/libarchive/test/test_read_format_7zip_bcj2_lzma1_2.7z.uu b/libarchive/test/test_read_format_7zip_bcj2_lzma1_2.7z.uu new file mode 100644 index 000000000..a8316cf59 --- /dev/null +++ b/libarchive/test/test_read_format_7zip_bcj2_lzma1_2.7z.uu @@ -0,0 +1,240 @@ +begin 644 test_read_format_7zip_bcj2_lzma1_2.7z +M-WJ\KR<<``-^VG`E^B@```````"``````````+K(8KX`/Y%%A&@[WP)!,(6+ +M]:YDCG/TF9,6Y4@I6&:W,\L.GXAK)SG^7$ASM;Y]KP;]Q:,S]93R>,&)>5<, +M&FZE"`#6^N9W.O9$'UE^T-50DI_AD]BN$0G/D?)@D^5S4+=>0I338+60+5WO +M?S\=&H#(CWK#P8A*.F39U-N85;*`7:QH4MPY]Z"R4@0-G[PN0P/I&4U*T@DV +M'"`CQ@7=GL@J7_2-A[.]&`<]D>$^(9=0(?Z*\Z.%M#RG1BD;5#6(4_PL?`47 +M!00BJ=5&HZ7@@B$C!NO::D+1C%8P).\)*UDX0P@<+::RMJNW=<@+:$ZER\IE^S3<>=HCZTG +MM[:O[2?'(:Q@840D]\]5Y73NXY[]$A&S9_<=T[^)S9E-I@,/"Z%N3%P8EQ8N +M.<>T1U:G?9*=LX1R,65>5\LCE.PG__FU`+L]UUEKFS13]3C4N`J/2*#MK;D6 +MR_YC0[KZK#6ZDVED3OA(WO_#+'G.!7!DNT&:A<:N8%2S1T,0<.CXWI?5110E +M(]/(V5U26WQEEBY"+^%%%QQ*$$LVGS;&M##OO=PE)#7IOV]4!T0>MCVFR7A^ +M)`*]D,D*8(TTY<\22+QK022#]K1P8Q>ZDOE"5%*XR1S_RD)#8:OFV8PM<:&: +MXO9&=U7J?O95W3V[0_>S$IA67];6D(/WJJ:Q>6%"L4.3$3?0E!!$%?%!2/7& +MXB4BNO1`#[FYN$MKM,TL^'./,4GY)NO_;YJ7P +M.<8Z"R!*LK]S`B1=P4X(^JK3]7X8N(%H?=H&K>KB'G7(0C'R=1Z0Z`IBTR?O +M>DKYV:WR$Q0MRO.CI2E[0;'KUGX`,?^8H_"$EOK=81Z5Z4VZQ'O;;O;-'3N/ +MM(@343API(#U5#X1=PK%4)/F?[I"DE\39HS<'P)7H49\16$$ES92A@%4O+Y4 +MAD=?Q`Q6L[^+YH+AJ-Z!]8./"Y'^Q"*$TJ#,%/ESOJCC)X:D@0R_?J)%YC&F +M):9`]N(:_,O,>0]$-QL,-?ZE@EH7Z=TEA\M7949(]"*65FN\?-CF(U?7P0?R&\DOWV5DVFK[.JXEP>WU1IL?6K&/CWJ(7%PM9 +MZI:B)8)Q$N-53QL+1O[;'7O/7/O^;3JY[WU7(!DWS`YXM'QL?+>("XZ7)FJ3 +M#T4640CH[0Q8U319C-]L^2259=A(C)[[!/*9P+!6MXIH$N)1*Z:&QIZ7]E*8 +M%(B.D'_@P=8!H(?*X?N@HB+MAKFN3F][.%W':*1!5I4=/"TFY>,\=4<$EI/) +M\S[27U*=0/;8!0P4W/=5+RC"*W]L[Z>GIXO;=$L;^CKMC. +MFK$GA0?W<=3^K@8Y^D_FAZ!W7WZ#.6HO6/_:M&X<5E:R +MAU)=J;SF.%&+0R;V*[FQB?;-D6E*-E9A9B[,4F',0KL8S]AZ3/3,AZ!6('R] +M)>:,3R!'4,\HCK1#'3_?PE4$NKGPX,R?.IK6$:/[E%8278\-K\&D4\:14"/( +MJ(V,!$2BJH@D@[TOT`^<-9#'>!Y!%G[3Q4L[4EU[56_:"*>E#X'=E='@D%RN4=E!\F6P+B>NF-E.')J;D/S +M>](@#H.CZB,"S;X1F.)O-8.%W0+\OBW-QVYBLHRW$*]^CP(Y/U\G<3B;CDT0 +M]"EG+*#EDEZI35$5+9S&_^!_A78^X7/<2I.4Y;"H60LCL"Q.5U=,LHK4"6W:HZFZ?(LI+*? +M1?]2$%"5;V^Y]A>V$A;XY*$P"@WF:#I'$>>Z@'G8"9##/BP&7S4PR+!4&:25 +M@0#?WAT5NTR6,RW,0XNFDRGJJ'"[!B#`M[^0! +MB$_UO("?`8';,_EYIF/`YS,HY7,OO1Y`A$BAQXI(K,:Z?[$DK[LF1JP-RIXI +M[\KEKZST5NF-26U91M2>F]R-?H6.97>%;M$0B&E;\FPR!_8150K#<]3V($5- +M6SHJ[/"&TYD;ST3!R#@B92\![8+L/;^9;:^+(C'(Z[&A,_Y7P=$6SKYQ6J=0 +M*0/@I?K_Y@L:A'XR_=%D=4UM5^8.7CZKI3H%Z.&F'T_0IXB6 +M2\2+(R4=NDDVG8N]A(]M&ZH6-!N;N%IEGNP%1\$646$4*?JTOC-1%3H/UB]S +M-NON.J5*JN\71XV9L`?IV0DNQY87`Q/JQERXF.B<<1R$A7$ +M??LEM.:+%*JG+/SM23OHC_X[]'*WW.H;R658END(V=8SJK]K^DVX!XR.GLR_ +MFS_7>CF[]F7&4V3E<#!^5`/B!C955]_-N(F0[!^%U)G(DX,Y-SWE%.TJ1,KN7K_JS^OH?.6U\4@Z>K5-0[1GY` +M57LW:6>GO'!>FU^^MH"`=0.VICBJW_"`.AN^14_AL&:(BY,W +M+\E%!4$G^;3$!WW_)J>_-%0KHJUB`ADT\]#`$ +MW3*]RC&JDCHP0&BAT2\;Q#N>&MUFH8&I[^72X/_V&S]J0[4:!R+L=FR<(I>K +M3G<79].'1C5M'U>E=@A:6<8C&M4)IEIC='07>AK,.RT4,[9^6M!/QSSK`/9& +MI/X#T`#T0[ZY:H-6_F*QC:."_0I<'O:3-EJ910,KJ[^>E@H2O$OKG>0HH/;\ +M>`:*1^*-<'X_;P-,1-C>?E?<23A=YI-VJFS]NL;H`D?>=%N\ZC)L4V5TO-RL +M,S:O8KM?0')<[`-@&.`>$;')_TT/3IZX02G6'789"M6-5^4_;N;L$B053#PY8*6KD%Q\#"G99 +M*RY0Z]!B"5/58PTJAH.UI_> +M?7]0O.%'W&>\4J*)FOS]X!HZC^6GLFA%'@VA%5#''Q\V@K:?WJ>\L3D"9G\% +M![+R^KAFA7Y:!61'?B`@^9'[)U]1R,&85*!E\A5CGU:'E%0\O$LHS2\"B(18 +M$R)+4?8NA^8`SJ]-5YD)A:3U7\GMJ,K(\79#AA8J#X81K0]V6#WSKG7W7G1] +MWTS59JPM\?#9`DSGO[3FCJ1U>0F[XY,5-D!`)ERPIK8YNZ<1#3T^S:+C8/16@5 +M=L/='P>_ER`"1V@R?`1@:Q1[!6=R<"SM.1N==H%HFO'0C;.%HC""AY8(+BC0 +M_^(<;#3G4^ZS(=R32LH'F5REZ:9J?G-L9X46GT)QPNQD%CIER2^OB@<;/$ +M_%R:QR)8XMOG._E1^&KX=&ZLC"B'D1YVJ;&*&^[OM/-`LW*+@$^IEI1*2HUN +MJQ$;!@T3%"-OC(Y!&.N$]^G=1CAVWG>^;4K_CU%0O?[>H$C:%&Z#9RH1=WZI +M-'G2?PM[0DM@VUD@'#-X[!I3X\F&Q$/-C9._6,;]T=KCX)Y#+K,"OJP?9GAK-^S5RJ)0LK;Y3A54> +M@BNYR?&'45;186QEIU)WBT\DW7B?FWL.W>MQ@X.Z>"2*RFEB$JP=]&M4<+V> +M]D82H%QX6X:9COZU1JD]$X=;-3)%D'S;\?5L1[^;7F11T)=3:EQ;3M#([X>4 +M>&:!^+/A#!=)N+/]DT'U'1FKJPXL=@G^!$A6=H049Y(?^4G-.Y.4J(BY#1.4 +M:$>D@T;H$PNN>VP6G9',Q;\'M$']7TDC +M/%-"4)#^/D2F%I!-LN&EJCEVS]-O:`+MVO0,`YI(KBH\>4I`AQT>X'U5 +MT('3V/#GB:4M'08,UE]/U:&?L]AOUO6U$NF:J\#BSS8'[5F"/95"R)[@B@^( +M_]/+<%9),KA*@T80#.%W^/LT\['V\G=-6-_`,Q8=,W"*9.8P@^@YN))H,NOY +M4W@9@ZTU-J@XV.(D=_XT[[">*B,8"9RT/@M,K3(/J\Q8T(/_QSJFC-[EWGPV +MDLJ=P'\G6VL2'<>CKJGX$)05&0H?$N4,=*`+_5?7W7@?[KBY*@$<'%7QWH>& +M1A6<5`$UD3B8;S@,[1!$--9<5)=Y\0MU&;I860&<'[2K:C35?'HKD.YL1#(/ +M_N\WBKS'7LT6Z`7I&6JZ*4`0E,!)N,,`S\L-7)?K&;9;I81V+/*(=<[ZW;%I*D+@@"IEC63J81?NT^^A/!B?OJZ1?6IFN` +ML,JZ`]?W8FW'LNFBO+EJ^%>$*E64)G.V]D?]7FHW3G24:D)`BB6.R)PC>@T/ +MMH1)Y2]ED,YCW&6Y1#H.N`M\NW&B(K4/GEXYR4]/3E5/JM&7(TBV9#Y73UIJ +M"74MB'_A_60"U=9$<:=?E_:EQ#$Q['-B%F4Z'\V\^B?(>UWEK:?:N9:&]7VN +MQT"K/+E7./L_%?*NNYFS?WBHYFQ.MTF7[U%<(M&(>,>E4FK[GJC2,B8B)J[W +M]@R5F;=);`Y+[*PK'#H@PRD3RVKND8UI9/\:#<>R2`H<]#GY@H6D,GKG_+@O +MSOG[5;B=T6?,IKNB/)37_L8`3N" +MCV04E30(C[`_,C1ZM\8:&B^^KOU5L$`AL/B4[FM$"'X(X,3>V,:21%"T%K_= +M",4-.[%]PW[1EW0*.N;E=7M&MR14C4SFP,;2RTAT93N<6`4Y'.]' +M<0Y*G?\Y)K'Y,`E[^!:SZ7;[J%F(,BDT)O\.4%"^OY7BYH=[M`;APMZLWJTV +M#PLN&E9SS*W%+IK"\`](5W89"?A2QZE;+:.;UU0V*!4@-OK9WM:")2G$X-G+ +MYDLV!!0N[S-``]+V<'+4F9,3Z/IJL[?+K6%^$LW7+/+T28:LZHN_^^%)%O;V +M`!$@U\W)O\%V1=N1KA?>#2.+$,J5I\X]`L7D@B_\LHJJS%\C@&6O,)W^$1^X6SH@Q;4\*F6*L<]"^U7,:ECU%;Y;Z^AY9QD+86BL72A*#)L828G*3ZFID +MP:@S,=0>12UD`2LN_77?>SHB3H+5:(J['1-,?=,CL]S+Q5:`=U%\;L;^S03- +M*=G[8HV`*E5O4<@A)[3-2Q(!23U#1&MG_9B/`IT9E&\^J3SLK[ALL*HQ:F5T +MP7H>R>=_SQ.6[2K^^;]C@3A9ZQQ_1''XFFAE@R1]$R:,;WYJ9><8)B@P,H`Y +MP>:6RAX5-?]\Q,TY;A\*B58&9FYM_ +M/5(=II"YZBL!Q07-BQ7''E@?+M9(1A(^7K2(_K_0^1!%-R"BG9%\WX$S&BQI +M447_A:E]3`MY8L3$15/PLL,,V.D"<#!TS&&,2D>/W15B5L`*5Q,VXX3>OU:E +M8M.QP!MX`_DR^G^>>F$ZJ%`#44].FM;>9R>],DI:A+5J4M-\([Y<'B$8HT6O +M,3L7$@>Z6V23)DXL30&7P!MD^*E2C%HN;RG0#P:#?^H$9WSH\QV.A&\N_#PE +ME#(*4>VY3*]&JS-JQA;>ZVX*@>\RR'>XPOO[Q/-B89$#95Q>^-#UX";H%=R0+:J`P\Q,.US(!JB`7Q6EO8AC@:1'HJ!DV +M\R$FV#MK0'W.*XGF@LVCAF0BY*_CQ@8Y\>9KAXX$<*60D=9]I1`^V8!;IZJ1 +M5\1HK%V;2.$5*(11I^PR9$L!=LS0.>V5)8=N$`J3X-?:&W$02^%;ED7R]>'E +M3G:C,5I"=R(S#>;VFF!T:8H>:N\A;$3`DZ\[QS*(TM['0KDC+"PJ]?;?LX)" +M]RT?;(0ICY;HY/XV4C]LL^9+6<:]Z"]2>V*7*82U#8X5`WI%\]/_FJ,J?[^& +MP&,U*C?*1!%W!JGEO"EL]HQ.G#\ +MB1&H%Y:ZLO@L^0TH9"#?80.54)Y:)NR;2G_;/?66G880!=2O?"(Q4&^TZ-&J#+RNDBC<$HYE6M7ZQ_RKG/H;+MJN"J[SNK[H*>V^OFI@^GJPQ-0 +MVZM-/PMMC7(C$7W6IC.D$NV'S'^R`["3]:2:)ZU4E"-\FO-GFK)T=U[O7*>/ +M9&F(F&)=3D`5J'B5WE"G9-D4=I".:5-V_I83LAB7+V]2#']4.#T9J_O9UD?, +M@ONJR/4A`Z1)* +MJT?P_B,SW4S,;XG4><,28D@FJ%N66*K&<1&R%E2*"5&O%[>U20*LM"@$-WS: +M2G[W3L-3;Q\IXG#N&GXAEB$ENVP+`]QWWI;FUFNFZZMC6)[@AGZ44AJ:/[!* +MHCE?QE',)MJ!0O-N+!,F(5=0#\][W5:O6)6"NV+K,DJB-KHRE-1BZW_Q%TW3 +M9.+UJ4-UB-P&!,GZ(V(D1/4E+I%R,=[OZ,5[[W<#:.F;)&.'6P:7R82KS$=Q +MBQCV_D+<&B.1F?NVQFNA5#-UD;VRE3:Q1>20U5U0CSDH\6+IE8D'&T3`X)V@ +M/G-NDUCKD15JBL@DX]8XM(;XEX%\JU/O^977K]H4$CKJ>N^/F2\6:7IE-D5$ +MWV?@R"XQRK#!F8CDKD*84=P7]!/+$U5\!D$&:$8--5F@!+QO\_,N:@8QAP.> +METO'5=*$*7^!B&C,<7].Z7>;D?+A>ZPQA$BF,<9^/\/\"#:/9@867V="7`M' +M6;4Y4..L9^9#-Y:ECQJ:UVJ/TY+=N0`1"$82TGD$2O.%/9:-NX,_KLBYXFR2 +M!AY-\F>4\X-2,6^GP57R?T%!]JEGA@IIM:8G)._0!'Z,Z>(1CO2$#CN-&!D: +MW=^$#VYAHWK`*97^NZ";B18_)$&0$,P54J^T+]Q:1&X7ZOX +M+.6-SGM=)-;O6X(WW`6.EI%")'=N?^/'91?K1`N.!">2.%4RLKR*&UX;S+1" +M\PVI,2L&5X(&ED%7HG&)//_$)+O\_F-OH4'FF:+SUT?L&PK(K;I+IX@W6B1![(%W +M2A>[GK>WE,34L\P7KQ07_QANUF7(ULOVASH42%#LT^!]CHL3D>"Y2"[DF(`S +MT3/='[0!8%[XDG/ZI,T^X0JXA:IRH]*>X= +M]"Z=V.LJ1;]78D8*DD+[!]%)2%CX=G^<@_9MIOC`_8_AA"(TPBH7XN-*:]1V +MF<`QGL87I#TH.+%QJH][(T5NE40+NI"CP%<5NGZ*?;628\O/:4R@[<2)3O+! +ME*I9ERFSXK:\&N3(-+9_O0N69;#7VU7U@Q`-&42_6O5T1J$F<,A?,GW92OO, +MR+V^>0`2"XIT4CEF[<)^AZ#).1%MS4B!:!E">OT'X'.*<&SJ.R6@F$EC%54$ +MF36,5'`;Q([%_M"\#G\WH/$M%L/F%^=YUND)Q:J^IPPSS^3E(&QT*75E^,)M +MW#[_;$`)>3].RC7!."?J^0/2,S8(0"SL\QO:(OR!!1J)MDM9@OPYW\& +M:H*^6B-X6!C,L!Q9/1*]F.8FNJR,&2.]!B/EQYT6*[RF0`_('NY8DC493"!# +M[_8)N+5KG.`')R.``AW^93-2"9?),:`E"?N1N`B0[C21TZC#T5*WJR8AH)]; +MCBEV41)9?5[&7(^LTPRIU^A@,;Y8/-9H9.2.@0+OP`IH+*&A0J*'`U/X%3\7GN+,C);X*IE +M)FD27"H8M*O/VT^J5%(-F/9L;)FJ(1H&U=##?58FI(N4ZC=C:+NQS]1O*D"E +ML:C9%MF>5$M#%YO&2@%&TII1N1M234_2CF`9!;?P>,9WKE^4+%9J=DNM$OTA +M04QHA.U=\2^:]X$!!L^($1>51^JVZE]J'!*H;BZ>.GE&O!4,=T"@!>>/L&\$J@`%=`;*N=ESG(OAG7MIF`(Q2^:_W`JH\IU@DQ^KHZKRM*;HOB5OB0Q\-[\U")X@PWIU!I_C:[4\X.U +M]"!MK&&R.7\,>(*6ZE,\2^TE?2,GJ9WYAJXU6L"5VFX-5R%>L])(PI"$[J1@`2L@#TC@E[0B8H"MQK +MOIUWTIUB'E7.Q$`MKQ&*OT*V$27$CIJK;*CEO?=6PWJBD2\!B5'N72(D?>$I4!I[06.KT!)Y:^8B3E$A\6]GVKQ5H$- +MX\,#5;HA*G]>TQ[58K!(*%N"S0Q<(&=ILTVS_6!K>@77J#T8].5$(8%8V[M^S#"]#LO@=SO4$ +MDMK!M3083U<&)`DI+4^*.W/A(J-!(:R5#N3+"^LUGH!(/T7O3#T?A;=!AR>F +M&AFC3:2S/"'3'!G>V80+^\>:'A<^;H#1)E[^&?=WN*C4>E\8)[61*2L^><<;#R8A]"'5ND6O&_<'@C +MD"CWV]FE_[1);\69),/-(+,LJ.0LU?\H]XL8_:7H($?.0)&_"HQG,3&]EBG5 +MG2W%^1-%OU&WDS@Y6?$`^;B)C`I]!83*J#II"K<]X1'6YT,(JU!HG35]1X*S +M-5,5QA;;UJ!D1=0%3I?PF::/OZ<#L;R=$U\QS1.H.=Y+AEC.K)V!E])AA-S. +MDA!KDN^QV]F62-./+*.UTH:114D"$V$DWD#/0ME2$7S:X(*:2#N,#_QI>28\ +MKDT-3,MQ%:]@6H +M*]GUT45V.6$YM+*Y,`Q=QC(+E`H"&\85Q"3.&FB6$+IQ=$_^HA`N$;=SIDL-@1?3\>O!E;O\[$YU^(*"D@ALTGYRJRF<*+]`@[O!L.,Y9)3XPOHE[D2K5$LD',W4Q>/%F\+/'"2U/W5(E= +M=I9FG8(OQJ,M*1GQ%+%`3@WP-A,.*:T(>!\C6X+H6[?]`JJ2%]6QX&(A=:Q\ +MUJIM+))_2U.!1"!5[<8U5AZH-@VYF$C.Q2VV^AM!11S(=G;M#;*N85A^C%4I*V9?@T_ZA@8&3#]%">19T>(+BE_$:EBI7YB!'N< +M33*E_Y(CHT6.,H8#WG[0W6:79>/K<1M9FB6'B_X9\I";A;Q,[1^.O9_=(<*C +M@3']U97@UWA/Y=W4=$_FR\SB61"7M3!)+>;]&ZW+0#4*85?-$^YUVT?:7N?Q +M0_AF%#BW'`L\FJ:18?4X!NR._`[7GE?61$.FY\..[%QZ2^'F&W]Z(+7X(0;R?[J'5 +MN2]KY%$HDA^S"*VK;TQ,Z$8K3A-:)>@'K`'FO%ZX*KRLKG+P3:,,.V"@QC!S +M^DN*76M228@B^B&U20&!KB-8<&L;ZL]W4H#38W]M7^72 +M.W"!1W,5VV%8LV>:KDE:%9F)*ML^_&]6-_O?)H;R!Z%6NLWK$H/0KXUT!!I( +M.GD=DD,'GWUVF>1DX9:%G"1^#<[VJE5@!B@P"5:X1(?!J2A+`6"B`'__[(*_ +M<*GBTO8J#[&TS@MGB4R]0=<':N.(W\G9G;.:/7*.,11&``!@4S^M8<&.P63` +M)`;+,KS2"?Z;A7RA_=0$&\'"AAXY)C^XW9C3((:>FU,#`MX3R^HAEXQ`W/V/ +M);AC03P4*HO-^D@)`C6HHPG!%`$%U86]?<,`<*I^42Y[@7]MBJ?,QX3M3/:E +MZ9/S)=617P5Y5PZIU*:8JM;V!QV(A,(RF!F:C2+OF&6]C`#8M3!B-GH,)PY1 +M-;%69(1/24\>8N]NI*`*RQTX*!#U)B'XKW5 +M%V6Y*;=1\]!=G:91]&D7!#43@0-P7``RF#3BJBB%M%,.7\)4T&U&X/C8(4LW +M\ASM]>54Z@W1_9`Y0CEW_N9NJZWW4]4HZ+``;=&4+41:XH6=V/B0#[WJ(5^F +M^T'@XPE].>(76"[6@J7/$,#_3Q.^?,D1G90(-7#9N@JW\W:I<_X```!@/'"( +M&^G]6XWUER>23R-9*V(/<4/R5B3&S"7\S +M:FU`^C#>_:,*%#(5*,IB!S*]O_15LX>H!Q!D_\VM,"PZ>:N6=BRN-=V=;8TR +M>_16]XO)!,A.D@6P8A?CZ_F5]Y=LR5(L0_`-GEX7GC8W3"%D_*N+DI*?<<`9 +M203"1\B,5J$NKBQHD#];WLNRL5=_I/F(56'DZS_[30XJJ6`%1N59KHI,34]# +M8GP&HK\5L?&1B\W3[53)J.$==T?J@L".%=K\:(+=23HOAFY\)[RYNK6GM_%6 +M\6J+[6K>Q@(&1V3,R4CM@RS(*,9ND0\DP`%]N-8Z\$_!I=>$FD6-@V +M*1+[X_4)1^T`S7A=L5?A?\;7>+&9J?QRU9T<$I,GGM99UXHTC#[.<1Z: +M'3+=7"C\.5#<_IX&%MCL$FP4:Z>CD,7_>K)W5]^R>!3._10]``$$!@`$":3Q +M)X%N@G0`!PL!``0C`P$!!6P```$`(P,!`05L```!`",#`0$%70```0`4`P,! +M&P0!!0`$`0,"`@8!``R'N(1LP)Q>P,!J``@*`3U]DI4```4!$0\`>``X`#8` +>90!X`&4````4"@$``"U#*W&SG0$5!@$`(0`````` +` +end diff --git a/libarchive/test/test_read_format_7zip_bcj2_lzma2_1.7z.uu b/libarchive/test/test_read_format_7zip_bcj2_lzma2_1.7z.uu new file mode 100644 index 000000000..a9a19b905 --- /dev/null +++ b/libarchive/test/test_read_format_7zip_bcj2_lzma2_1.7z.uu @@ -0,0 +1,287 @@ +begin 644 test_read_format_7zip_bcj2_lzma2_1.7z +M-WJ\KR<<``.73?8V0S$```````!>`````````#]5#Z3@7ILD\%T`/Y%%A&@[ +MWP)!,(6+]:YDCG/TF9,6Y4@I6&:W,\L.GXAK)SG^7$ASM;Y]KP;]Q:,S]93R +M>,&)>5<,&FZE"`#6^N9W.O9$'UE^T-50DI_AD]BN$0G/D?)@D^5S4+=>0I33 +M8+60+5WO?S\=&H#(CWK#P8A*.F39U-N85;*`7:QH4MPY]Z"R4@0-G[PN0P/I +M&4U*T@DV'"`CQ@7=GL@J7_2-A[.]&`<]D>$^(9=0(?Z*\Z.%M#RG1BD;5#6( +M4_PL?`47!00BJ=5&HZ7@@B$C!NO::D+1C%8P).\)*UDX0P@<+::RMJNW=<@+:$ZER\IE^S3 +M<>=HCZTGM[:O[2?'(:Q@840D]\]5Y73NXY[]$A&S9_<=T[^)S9E-I@,/"Z%N +M3%P8EQ8N.<>T1U:G?9*=LX1R,65>5\LCE.PG__FU`+L]UUEKFS13]3C4N`J/ +M2*#MK;D6R_YC0[KZK#6ZDVED3OA(WO_#+'G.!7!DNT&:A<:N8%2S1T,0<.CX +MWI?5110E(]/(V5U26WQEEBY"+^%%%QQ*$$LVGS;&M##OO=PE)#7IOV]4!T0> +MMCVFR7A^)`*]D,D*8(TTY<\22+QK022#]K1P8Q>ZDOE"5%*XR1S_RD)#8:OF +MV8PM<:&:XO9&=U7J?O95W3V[0_>S$IA67];6D(/WJJ:Q>6%"L4.3$3?0E!!$ +M%?%!2/7&XB4BNO1`#[FYN$MKM,TL^'./,4GY) +MNO_;YJ7P.<8Z"R!*LK]S`B1=P4X(^JK3]7X8N(%H?=H&K>KB'G7(0C'R=1Z0 +MZ`IBTR?O>DKYV:WR$Q0MRO.CI2E[0;'KUGX`,?^8H_"$EOK=81Z5Z4VZQ'O; +M;O;-'3N/M(@343API(#U5#X1=PK%4)/F?[I"DE\39HS<'P)7H49\16$$ES92 +MA@%4O+Y4AD=?Q`Q6L[^+YH+AJ-Z!]8./"Y'^Q"*$TJ#,%/ESOJCC)X:D@0R_ +M?J)%YC&F):9`]N(:_,O,>0]$-QL,-?ZE@EH7Z=TEA\M7949(]"*65FN\?-CF(U?7P0?R&\DOWV5DVFK[.JXEP>WU1IL?6K&/C +MWJ(7%PM9ZI:B)8)Q$N-53QL+1O[;'7O/7/O^;3JY[WU7(!DWS`YXM'QL?+>( +M"XZ7)FJ3#T4640CH[0Q8U319C-]L^2259=A(C)[[!/*9P+!6MXIH$N)1*Z:& +MQIZ7]E*8%(B.D'_@P=8!H(?*X?N@HB+MAKFN3F][.%W':*1!5I4=/"TFY>,\ +M=4<$EI/)\S[27U*=0/;8!0P4W/=5+RC"*W]L[Z>GIXO;=$L;^CKMC.FK$GA0?W<=3^K@8Y^D_FAZ!W7WZ#.6HO6/_: +MM&X<5E:RAU)=J;SF.%&+0R;V*[FQB?;-D6E*-E9A9B[,4F',0KL8S]AZ3/3, +MAZ!6('R])>:,3R!'4,\HCK1#'3_?PE4$NKGPX,R?.IK6$:/[E%8278\-K\&D +M4\:14"/(J(V,!$2BJH@D@[TOT`^<-9#'>!Y!%G[3Q4L[4EU[56_:"*>E#X'= +ME='@D%RN4=E!\F6P+B>NF-E +M.')J;D/S>](@#H.CZB,"S;X1F.)O-8.%W0+\OBW-QVYBLHRW$*]^CP(Y/U\G +M<3B;CDT0]"EG+*#EDEZI35$5+9S&_^!_A78^X7/<2I.4Y;"H60LCL"Q.5U=,LHK4"6W:HZF +MZ?(LI+*?1?]2$%"5;V^Y]A>V$A;XY*$P"@WF:#I'$>>Z@'G8"9##/BP&7S4P +MR+!4&:25@0#?WAT5NTR6,RW,0XNFDRGJJ'"[! +MB#`M[^0!B$_UO("?`8';,_EYIF/`YS,HY7,OO1Y`A$BAQXI(K,:Z?[$DK[LF +M1JP-RIXI[\KEKZST5NF-26U91M2>F]R-?H6.97>%;M$0B&E;\FPR!_8150K# +M<]3V($5-6SHJ[/"&TYD;ST3!R#@B92\![8+L/;^9;:^+(C'(Z[&A,_Y7P=$6 +MSKYQ6J=0*0/@I?K_Y@L:A'XR_=%D=4UM5^8.7CZKI3H%Z.&F'T_0IXB62\2+(R4=NDDVG8N]A(]M&ZH6-!N;N%IEGNP%1\$646$4*?JTOC-1 +M%3H/UB]S-NON.J5*JN\71XV9L`?IV0DNQY87`Q/JQERXF.B +M<<1R$A7$??LEM.:+%*JG+/SM23OHC_X[]'*WW.H;R658END(V=8SJK]K^DVX +M!XR.GLR_FS_7>CF[]F7&4V3E<#!^5`/B!C955]_-N(F0[!^%U)G(DX,Y-SWE%.TJ1,KN7K_JS^OH?.6U\4@Z>K +M5-0[1GY`57LW:6>GO'!>FU^^MH"`=0.VICBJW_"`.AN^14_A +ML&:(BY,W+\E%!4$G^;3$!WW_)J>_-%0KHJUB`ADT\]#`$W3*]RC&JDCHP0&BAT2\;Q#N>&MUFH8&I[^72X/_V&S]J0[4:!R+L +M=FR<(I>K3G<79].'1C5M'U>E=@A:6<8C&M4)IEIC='07>AK,.RT4,[9^6M!/ +MQSSK`/9&I/X#T`#T0[ZY:H-6_F*QC:."_0I<'O:3-EJ910,KJ[^>E@H2O$OK +MG>0HH/;\>`:*1^*-<'X_;P-,1-C>?E?<23A=YI-VJFS]NL;H`D?>=%N\ZC)L +M4V5TO-RL,S:O8KM?0')<[`-@&.`>$;')_TT/3IZX02G6'789"M6-5^4_;N;L +M$B053#PY8*6KD +M%Q\#"G99*RY0Z]!B"5/58PT +MJAH.UI_>?7]0O.%'W&>\4J*)FOS]X!HZC^6GLFA%'@VA%5#''Q\V@K:?WJ>\ +ML3D"9G\%![+R^KAFA7Y:!61'?B`@^9'[)U]1R,&85*!E\A5CGU:'E%0\O$LH +MS2\"B(18$R)+4?8NA^8`SJ]-5YD)A:3U7\GMJ,K(\79#AA8J#X81K0]V6#WS +MKG7W7G1]WTS59JPM\?#9`DSGO[3FCJ1U>0F[XY,5-D!`)ERPIK8YNZ<1#3T^S: +M+C8/16@5=L/='P>_ER`"1V@R?`1@:Q1[!6=R<"SM.1N==H%HFO'0C;.%HC"" +MAY8(+BC0_^(<;#3G4^ZS(=R32LH'F5REZ:9J?G-L9X46GT)QPNQD%CIER2 +M^OB@<;/$_%R:QR)8XMOG._E1^&KX=&ZLC"B'D1YVJ;&*&^[OM/-`LW*+@$^I +MEI1*2HUNJQ$;!@T3%"-OC(Y!&.N$]^G=1CAVWG>^;4K_CU%0O?[>H$C:%&Z# +M9RH1=WZI-'G2?PM[0DM@VUD@'#-X[!I3X\F&Q$/-C9._6,;]T=KCX)Y#+K,"OJP?9GAK-^S5RJ)0L +MK;Y3A54>@BNYR?&'45;186QEIU)WBT\DW7B?FWL.W>MQ@X.Z>"2*RFEB$JP= +M]&M4<+V>]D82H%QX6X:9COZU1JD]$X=;-3)%D'S;\?5L1[^;7F11T)=3:EQ; +M3M#([X>4>&:!^+/A#!=)N+/]DT'U'1FKJPXL=@G^!$A6=H049Y(?^4G-.Y.4 +MJ(BY#1.4:$>D@T;H$PNN>VP6G9',Q;\'M$']7TDC/%-"4)#^/D2F%I!-LN&EJCEVS]-O:`+MVO0,`YI(KBH\>4I` +MAQT>X'U5T('3V/#GB:4M'08,UE]/U:&?L]AOUO6U$NF:J\#BSS8'[5F"/95" +MR)[@B@^(_]/+<%9),KA*@T80#.%W^/LT\['V\G=-6-_`,Q8=,W"*9.8P@^@Y +MN))H,NOY4W@9@ZTU-J@XV.(D=_XT[[">*B,8"9RT/@M,K3(/J\Q8T(/_QSJF +MC-[EWGPVDLJ=P'\G6VL2'<>CKJGX$)05&0H?$N4,=*`+_5?7W7@?[KBY*@$< +M'%7QWH>&1A6<5`$UD3B8;S@,[1!$--9<5)=Y\0MU&;I860&<'[2K:C35?'HK +MD.YL1#(/_N\WBKS'7LT6Z`7I&6JZ*4`0E,!)N,,`S\L-7)?K&;9;I81V+/*(=<[ZW;%I*D+@@"IEC63J81?NT^^A/!B?OJ +MZ1?6IFN`L,JZ`]?W8FW'LNFBO+EJ^%>$*E64)G.V]D?]7FHW3G24:D)`BB6. +MR)PC>@T/MH1)Y2]ED,YCW&6Y1#H.N`M\NW&B(K4/GEXYR4]/3E5/JM&7(TBV +M9#Y73UIJ"74MB'_A_60"U=9$<:=?E_:EQ#$Q['-B%F4Z'\V\^B?(>UWEK:?: +MN9:&]7VNQT"K/+E7./L_%?*NNYFS?WBHYFQ.MTF7[U%<(M&(>,>E4FK[GJC2 +M,B8B)J[W]@R5F;=);`Y+[*PK'#H@PRD3RVKND8UI9/\:#<>R2`H<]#GY@H6D +M,GKG_+@OSOG[5;B=T6?,IKNB/)37_L8`3N"CV04E30(C[`_,C1ZM\8:&B^^KOU5L$`AL/B4[FM$"'X(X,3>V,:2 +M1%"T%K_=",4-.[%]PW[1EW0*.N;E=7M&MR14C4SFP,;2RTAT93N< +M6`4Y'.]'<0Y*G?\Y)K'Y,`E[^!:SZ7;[J%F(,BDT)O\.4%"^OY7BYH=[M`;A +MPMZLWJTV#PLN&E9SS*W%+IK"\`](5W89"?A2QZE;+:.;UU0V*!4@-OK9WM:" +M)2G$X-G+YDLV!!0N[S-``]+V<'+4F9,3Z/IJL[?+K6%^$LW7+/+T28:LZHN_ +M^^%)%O;V`!$@U\W)O\%V1=N1KA?>#2.+$,J5I\X]`L7D@B_\LHJJS%\C@&6O,)W^$1^X6SH@Q;4\*F6*L<]"^U7,:ECU%;Y;Z^AY9QD+86BL72A*#)L82 +M8G*3ZFIDP:@S,=0>12UD`2LN_77?>SHB3H+5:(J['1-,?=,CL]S+Q5:`=U%\ +M;L;^S03-*=G[8HV`*E5O4<@A)[3-2Q(!23U#1&MG_9B/`IT9E&\^J3SLK[AL +ML*HQ:F5TP7H>R>=_SQ.6[2K^^;]C@3A9ZQQ_1''XFFAE@R1]$R:,;WYJ9><8 +M)B@P,H`YP>:6RAX5-?]\Q,TY;A\*B +M58&9FYM_/5(=II"YZBL!Q07-BQ7''E@?+M9(1A(^7K2(_K_0^1!%-R"BG9%\ +MWX$S&BQI447_A:E]3`MY8L3$15/PLL,,V.D"<#!TS&&,2D>/W15B5L`*5Q,V +MXX3>OU:E8M.QP!MX`_DR^G^>>F$ZJ%`#44].FM;>9R>],DI:A+5J4M-\([Y< +M'B$8HT6O,3L7$@>Z6V23)DXL30&7P!MD^*E2C%HN;RG0#P:#?^H$9WSH\QV. +MA&\N_#PEE#(*4>VY3*]&JS-JQA;>ZVX*@>\RR'>XPOO[Q/-B89$#95Q>^-#U +MX";H%=R0+:J`P\Q,.US(!JB`7Q6EO8AC@ +M:1'HJ!DV\R$FV#MK0'W.*XGF@LVCAF0BY*_CQ@8Y\>9KAXX$<*60D=9]I1`^ +MV8!;IZJ15\1HK%V;2.$5*(11I^PR9$L!=LS0.>V5)8=N$`J3X-?:&W$02^%; +MED7R]>'E3G:C,5I"=R(S#>;VFF!T:8H>:N\A;$3`DZ\[QS*(TM['0KDC+"PJ +M]?;?LX)"]RT?;(0ICY;HY/XV4C]LL^9+6<:]Z"]2>V*7*82U#8X5`WI%\]/_ +MFJ,J?[^&P&,U*C?*1!%W!JGEO"E +ML]HQ.G#\B1&H%Y:ZLO@L^0TH9"#?80.54)Y:)NR;2G_;/?66G880!=2O?"(Q4&^TZ-&J#+RNDBC<$HYE6M7ZQ_RKG/H;+MJN"J[SNK[H*>V^OFI +M@^GJPQ-0VZM-/PMMC7(C$7W6IC.D$NV'S'^R`["3]:2:)ZU4E"-\FO-GFK)T +M=U[O7*>/9&F(F&)=3D`5J'B5WE"G9-D4=I".:5-V_I83LAB7+V]2#']4.#T9 +MJ_O9UD?,@ONJR/4A`Z1)*JT?P_B,SW4S,;XG4><,28D@FJ%N66*K&<1&R%E2*"5&O%[>U20*L +MM"@$-WS:2G[W3L-3;Q\IXG#N&GXAEB$ENVP+`]QWWI;FUFNFZZMC6)[@AGZ4 +M4AJ:/[!*HCE?QE',)MJ!0O-N+!,F(5=0#\][W5:O6)6"NV+K,DJB-KHRE-1B +MZW_Q%TW39.+UJ4-UB-P&!,GZ(V(D1/4E+I%R,=[OZ,5[[W<#:.F;)&.'6P:7 +MR82KS$=QBQCV_D+<&B.1F?NVQFNA5#-UD;VRE3:Q1>20U5U0CSDH\6+IE8D' +M&T3`X)V@/G-NDUCKD15JBL@DX]8XM(;XEX%\JU/O^977K]H4$CKJ>N^/F2\6 +M:7IE-D5$WV?@R"XQRK#!F8CDKD*84=P7]!/+$U5\!D$&:$8--5F@!+QO\_,N +M:@8QAP.>ETO'5=*$*7^!B&C,<7].Z7>;D?+A>ZPQA$BF,<9^/\/\"#:/9@86 +M7V="7`M'6;4Y4..L9^9#-Y:ECQJ:UVJ/TY+=N0`1"$82TGD$2O.%/9:-NX,_ +MKLBYXFR2!AY-\F>4\X-2,6^GP57R?T%!]JEGA@IIM:8G)._0!'Z,Z>(1CO2$ +M#CN-&!D:W=^$#VYAHWK`*97^NZ";B18_)$&0$,P54J^T+]Q +M:1&X7ZOX+.6-SGM=)-;O6X(WW`6.EI%")'=N?^/'91?K1`N.!">2.%4RLKR* +M&UX;S+1"\PVI,2L&5X(&ED%7HG&)//_$)+O\_F-OH4'FF:+SUT?L&PK(K;I+IX@W +M6B1![(%W2A>[GK>WE,34L\P7KQ07_QANUF7(ULOVASH42%#LT^!]CHL3D>"Y +M2"[DF(`ST3/='[0!8%[XDG/ZI,T^X0JXA: +MIRH]*>X=]"Z=V.LJ1;]78D8*DD+[!]%)2%CX=G^<@_9MIOC`_8_AA"(TPBH7 +MXN-*:]1VF<`QGL87I#TH.+%QJH][(T5NE40+NI"CP%<5NGZ*?;628\O/:4R@ +M[<2)3O+!E*I9ERFSXK:\&N3(-+9_O0N69;#7VU7U@Q`-&42_6O5T1J$F<,A? +M,GW92OO,R+V^>0`2"XIT4CEF[<)^AZ#).1%MS4B!:!E">OT'X'.*<&SJ.R6@ +MF$EC%54$F36,5'`;Q([%_M"\#G\WH/$M%L/F%^=YUND)Q:J^IPPSS^3E(&QT +M*75E^,)MW#[_;$`)>3].RC7!."?J^0/2,S8(0"SL\QO:(OR!!1J)MDM +M9@OPYW\&:H*^6B-X6!C,L!Q9/1*]F.8FNJR,&2.]!B/EQYT6*[RF0`_('NY8 +MDC493"!#[_8)N+5KG.`')R.``AW^93-2"9?),:`E"?N1N`B0[C21TZC#T5*W +MJR8AH)];CBEV41)9?5[&7(^LTPRIU^A@,;Y8/-9H9.2.@0+OP`IH+*&A0J*< +MEN]^="*Y&E05'`U/X%3\7GN+ +M,C);X*IE)FD27"H8M*O/VT^J5%(-F/9L;)FJ(1H&U=##?58FI(N4ZC=C:+NQ +MS]1O*D"EL:C9%MF>5$M#%YO&2@%&TII1N1M234_2CF`9!;?P>,9WKE^4+%9J +M=DNM$OTA04QHA.U=\2^:]X$!!L^($1>51^JVZE]J'!*H;BZ>.GE&O!4,=T"@!>>/L&\$J@`%=`;*N=ESG +M(OAG7MIF`(Q2^:_W`JH\IU@DQ^KHZKRM*;HOB5OB0Q\-[\U")X@PWIU!I_ +MC:[4\X.U]"!MK&&R.7\,>(*6ZE,\2^TE?2,GJ9WYAJXU6L"5VFX-5R%>L])( +MPI"$[J1@`2L@#TC@E[ +M0B8H"MQKOIUWTIUB'E7.Q$`MKQ&*OT*V$27$CIJK;*CEO?=6PWJBD2\!B5'N +M72(D?>$I4!I[06.KT!)Y:^8B3E$A\6] +MGVKQ5H$-X\,#5;HA*G]>TQ[58K!(*%N"S0Q<(&=ILTVS_6!K>@77J#T8].5$ +M(8%8V[M^S#"]# +MLO@=SO4$DMK!M3083U<&)`DI+4^*.W/A(J-!(:R5#N3+"^LUGH!(/T7O3#T? +MA;=!AR>F&AFC3:2S/"'3'!G>V80+^\>:'A<^;H#1)E[^&?=WN*C4>E\8)[61*2L^><<;#R8A]"'5ND +M6O&_<'@CD"CWV]FE_[1);\69),/-(+,LJ.0LU?\H]XL8_:7H($?.0)&_"HQG +M,3&]EBG5G2W%^1-%OU&WDS@Y6?$`^;B)C`I]!83*J#II"K<]X1'6YT,(JU!H +MG35]1X*S-5,5QA;;UJ!D1=0%3I?PF::/OZ<#L;R=$U\QS1.H.=Y+AEC.K)V! +ME])AA-S.DA!KDN^QV]F62-./+*.UTH:114D"$V$DWD#/0ME2$7S:X(*:2#N, +M#_QI>28\KDT-3,MQ%:]@6H*]GUT45V.6$YM+*Y,`Q=QC(+E`H"&\85Q"3.&FB6$+IQ=$_^HA`N +M$;=SIDL-@1?3\>O!E;O\[$YU^(*"D@ALTGYRJRF<*+]`@[O!L.,Y9)3XPOHE[D2K5$LD',W4Q>/%F\+/'" +M2U/W5(E==I9FG8(OQJ,M*1GQ%+%`3@WP-A,.*:T(>!\C6X+H6[?]`JJ2%]6Q +MX&(A=:Q\UJIM+))_2U.!1"!5[<8U5AZH-@VYF$C.Q2VV^AM!11S(=G;M#;*N85A^C%4I*V9?@T_ZA@8&3#]%">19T>(+BE_$:EB +MI7YB!'N<33*E_Y(CHT6.,H8#WG[0W6:79>/K<1M9FB6'B_X9\I";A;Q,[1^. +MO9_=(<*C@3']U97@UWA/Y=W4=$_FR\SB61"7M3!)+>;]&ZW+0#4*85?-$^YU +MVT?:7N?Q0_AF%#BW'`L\FJ:18?4X!NR._`[7GE?61$.FY\..[%QZ2^'F&W]Z +M(+7X( +M0;R?[J'5N2]KY%$HDA^S"*VK;TQ,Z$8K3A-:)>@'K`'FO%ZX*KRLKG+P3:,, +M.V"@QC!S^DN*76M228@B^B&U20&!KB-8<&L;ZL]W4H#3 +M8W]M7^72.W"!1W,5VV%8LV>:KDE:%9F)*ML^_&]6-_O?)H;R!Z%6NLWK$H/0 +MKXUT!!I(.GD=DD,'GWUVF>1DX9:%G"1^#<[VJE5@!B@P"5:X1(?!J2A+`6"B +M````%6```%A0```4D```$^@``!/H```/Y```**```!-8```1B```$(@``$GP +M```2J```$J@``!08```4&```$V@``!0H```4*```%"@``!.X```1>```$B@` +M`!.X```2F```$5@``!0H```3N```$`@``!.X```0V```%!@``!$8```2J``` +M$W@``!$H```1R```%!@``!#H```2N```$<@``!#8```2J```%!@``!-H```2 +M2```$[@``!*H```4&```$J@``!08```2J```%!@``!*X```2J```%!@``!.( +M```3B```$]@``!,H```2>```&6```!+H```WP```$!@``!)X```98```$=@` +M`!+H```2:```$7@``!(H```2*```-\```!`8```0R```$T@``!.(```3B``` +M$Z@``!.8```0B```$4@``!((``!)L```$(@``!`X```0B```$Y@``!"(```2 +MR```$M@``!+8```0B```,M```"8````F````$U@``!,X```0B```$P@``!/( +M```46```%%@``!18```46```%%@``!`X```46```$C@``!(X```2.```,?`` +M`!+8```4"```$)@``!!H```4&```$B@``!(H```0N```$C@``!"X```2.``` +M$C@``#0P```T,```-#```#0P```T,```-#```#0P```T,```-#```#0P```T +M,```$;@``!%H```0^```$'@``!!(```2^```$]@``!#(```32```$,@``!-( +M```0R```$T@``!-(```32```$T@``!#(```0R```$,@``!#(```32```-1`` +M`#?````X8```-\```#'P``!6P```$H@``!*(```[@```$,@``!-(```[@``` +M$,@``!-(```0R```$T@``!*(```1F```$K@``!*(```4&```.X```!#(```0 +MR```$T@``!-(```2&```$J@``!&H```4.```$3@``!/X```2B```$*@``!*( +M```V8```-\```#'P```2B```$J@``!*(```V8```-1```!*(```2B```5L`` +M`!*(```2B```$,@``#A@```2J```%$@``!*(```WP```$J@``!*(```V8``` +M-F```!*H```2J```$F@``!%X```0*```$T@``!/X```2N```$F@``!*X```1 +MJ```$F@``!*X```3V```$Q@``!-8```26```$%@``!$(```26```$]@``!)8 +M```06```$,@``!-(```26```$0@``!#(```0R```$0@``!-(```32```$,@` +M`!-(```3V```$E@``!!8```0R```$T@``!$(```26```$H@``!$(```0R``` +M$T@``!/8```26```$%@``!#(```0R```$,@``!#(```0R```$T@``!-(```3 +M2```$T@``!08```32```$0@``!)8```1Z```$0@``!#(```0R```$T@``!-( +M```3V```%3````_X```/^```#_@```_X```/^```#_@```_X```/^```#_@` +M``_X```/^```#_@```_X```/^```#_@```_X```/^```#_@```_X```/^``` +M#_@```_X```/^```#_@```_X```/^```#_@```_X```/^```#_@```_X```/ +M^```#_@```_X```/^```#_@```_X```/^```#_@```_X```/^```#_@```_X +M```/^```#_@```_X```/^```#_@```_X```/^```#_@```_X```/^```#_@` +M``_X```/^```#_@```_X```/^```#_@```_X```/^```#_@```_X```/^``` +M#_@```_X```/^```#_@```_X```1^```%9```!'X```60```$?@``!;0```1 +M^```%V```!'X```7\```$?@``!'X```8H```(40``"%;```@_0``'5X``!UJ +M```><0``'E```!U0```=4```'HH``!\Q```?H@``):D``![-```>S0``'P4` +M`!J!```A&P``([<``"7T```:I```'5<``!JD```:I```'````!SQ```<_@`` +M'/X``"7@```EX```'%<``!Q7```DL@``(,D``!QP```<<```(#\``!_I```> +M,@``';D``!XR```9L@``):D``"7'```EO0``)-0``"4:```:,0``'>L``"`U +M```DC0``(T$``".8```B=0``(?(``"&C```H@@``)W<``"@(```G:```)\`` +M`">````H1@``)]@``"@L```H60``)H```":````FD@``*&X``":````F@``` +M)H```"<0```G$```)G(``":````F<@``)OD``":````FO@``)OD``"F+```Q +M,```+[\``"PZ```P@0``*^T``"P'```P$P``,%0``#`\```OZ```,&,``"L< +M```K$@``*QP``"G_```J)@``*6,``"EC```I8P``*6,``"EC```I8P``*6,` +M`"EC```I8P``*6,``"EC```I8P``*6,``"EC```I8P``*6,``"EC```I8P`` +M*6,``"EC```I8P``*6,``"EC```I8P``*6,``"EC```I8P``*6,``"EC```I +M8P``*6,``"EC```I8P``*6,``"EC```I8P``*=L``"G;```IVP``*Z,``#%M +M```KK0``*T(``#%,```KK0``*\```"NM```KK0``*\```#'+```J)@``*B8` +M`"HF```J,```*5X``"NM```KK0``*ZT``"NM```KK0``*ZT``##X```T)``` +M,]$``#0<```S*0``,R,``#,I```RY```-.```#1,```U\P``-;@``#7+```V +M0```-AX``#6T```UM```-T4``#<@```WN@``-I@``#:8```VF```-H$``#:8 +M```VF```-I@``#:8``!1$```2R```$Z````Y``!0A0``4&D``%`"``!/U```3L@``%"S``!0H0``3L@``$\W``!/0``` +M4,```%#?``!.R```3\D``$^V``!05@``4$T``%!6``!5%```4K(``%5I``!4 +MWP``5-\``%3?``!51@``5D```%8H``!5%```578``%%8``!5-```4Z@``%2` +M``!3X0``5&```%00``!4H```5$```%3```!2AP``4M```%+^``!3-@``4VX` +M`%.6``!3(```4RD``%+G``!2\0``4U@``%-A``!3C0``4Y8``%6@``!2Q``` +M4I0``%:Z``!2"0``4A(``%&]``!16```5/D``%9D``!6?@``5IP``%*'``!2 +MAP``4FX``%7L``!5X@``5>P``%83``!6'```5Z(``%?```!7!@``5P8``%=` +M``!70`!__^R"OW"IXM+V*@^QM,X+9XE,O4'7!VKCB-_)V9VSFCURCC$41@$$ +M!@`$":3XA&R'N"<`!PL!``(A(0$(%`,#`1L$`0$```(#!`S`G%[`P&H`"`H! +M/7V2E0``!0$1#P!X`#@`-@!E`'@`90```!0*`0``+4,K<;.=`14&`0`A```` +"```` +` +end diff --git a/libarchive/test/test_read_format_7zip_bcj2_lzma2_2.7z.uu b/libarchive/test/test_read_format_7zip_bcj2_lzma2_2.7z.uu new file mode 100644 index 000000000..8a31482b9 --- /dev/null +++ b/libarchive/test/test_read_format_7zip_bcj2_lzma2_2.7z.uu @@ -0,0 +1,240 @@ +begin 644 test_read_format_7zip_bcj2_lzma2_2.7z +M-WJ\KR<<``-OBM(#`2D```````!Z`````````']'IDO@7ILD\%T`/Y%%A&@[ +MWP)!,(6+]:YDCG/TF9,6Y4@I6&:W,\L.GXAK)SG^7$ASM;Y]KP;]Q:,S]93R +M>,&)>5<,&FZE"`#6^N9W.O9$'UE^T-50DI_AD]BN$0G/D?)@D^5S4+=>0I33 +M8+60+5WO?S\=&H#(CWK#P8A*.F39U-N85;*`7:QH4MPY]Z"R4@0-G[PN0P/I +M&4U*T@DV'"`CQ@7=GL@J7_2-A[.]&`<]D>$^(9=0(?Z*\Z.%M#RG1BD;5#6( +M4_PL?`47!00BJ=5&HZ7@@B$C!NO::D+1C%8P).\)*UDX0P@<+::RMJNW=<@+:$ZER\IE^S3 +M<>=HCZTGM[:O[2?'(:Q@840D]\]5Y73NXY[]$A&S9_<=T[^)S9E-I@,/"Z%N +M3%P8EQ8N.<>T1U:G?9*=LX1R,65>5\LCE.PG__FU`+L]UUEKFS13]3C4N`J/ +M2*#MK;D6R_YC0[KZK#6ZDVED3OA(WO_#+'G.!7!DNT&:A<:N8%2S1T,0<.CX +MWI?5110E(]/(V5U26WQEEBY"+^%%%QQ*$$LVGS;&M##OO=PE)#7IOV]4!T0> +MMCVFR7A^)`*]D,D*8(TTY<\22+QK022#]K1P8Q>ZDOE"5%*XR1S_RD)#8:OF +MV8PM<:&:XO9&=U7J?O95W3V[0_>S$IA67];6D(/WJJ:Q>6%"L4.3$3?0E!!$ +M%?%!2/7&XB4BNO1`#[FYN$MKM,TL^'./,4GY) +MNO_;YJ7P.<8Z"R!*LK]S`B1=P4X(^JK3]7X8N(%H?=H&K>KB'G7(0C'R=1Z0 +MZ`IBTR?O>DKYV:WR$Q0MRO.CI2E[0;'KUGX`,?^8H_"$EOK=81Z5Z4VZQ'O; +M;O;-'3N/M(@343API(#U5#X1=PK%4)/F?[I"DE\39HS<'P)7H49\16$$ES92 +MA@%4O+Y4AD=?Q`Q6L[^+YH+AJ-Z!]8./"Y'^Q"*$TJ#,%/ESOJCC)X:D@0R_ +M?J)%YC&F):9`]N(:_,O,>0]$-QL,-?ZE@EH7Z=TEA\M7949(]"*65FN\?-CF(U?7P0?R&\DOWV5DVFK[.JXEP>WU1IL?6K&/C +MWJ(7%PM9ZI:B)8)Q$N-53QL+1O[;'7O/7/O^;3JY[WU7(!DWS`YXM'QL?+>( +M"XZ7)FJ3#T4640CH[0Q8U319C-]L^2259=A(C)[[!/*9P+!6MXIH$N)1*Z:& +MQIZ7]E*8%(B.D'_@P=8!H(?*X?N@HB+MAKFN3F][.%W':*1!5I4=/"TFY>,\ +M=4<$EI/)\S[27U*=0/;8!0P4W/=5+RC"*W]L[Z>GIXO;=$L;^CKMC.FK$GA0?W<=3^K@8Y^D_FAZ!W7WZ#.6HO6/_: +MM&X<5E:RAU)=J;SF.%&+0R;V*[FQB?;-D6E*-E9A9B[,4F',0KL8S]AZ3/3, +MAZ!6('R])>:,3R!'4,\HCK1#'3_?PE4$NKGPX,R?.IK6$:/[E%8278\-K\&D +M4\:14"/(J(V,!$2BJH@D@[TOT`^<-9#'>!Y!%G[3Q4L[4EU[56_:"*>E#X'= +ME='@D%RN4=E!\F6P+B>NF-E +M.')J;D/S>](@#H.CZB,"S;X1F.)O-8.%W0+\OBW-QVYBLHRW$*]^CP(Y/U\G +M<3B;CDT0]"EG+*#EDEZI35$5+9S&_^!_A78^X7/<2I.4Y;"H60LCL"Q.5U=,LHK4"6W:HZF +MZ?(LI+*?1?]2$%"5;V^Y]A>V$A;XY*$P"@WF:#I'$>>Z@'G8"9##/BP&7S4P +MR+!4&:25@0#?WAT5NTR6,RW,0XNFDRGJJ'"[! +MB#`M[^0!B$_UO("?`8';,_EYIF/`YS,HY7,OO1Y`A$BAQXI(K,:Z?[$DK[LF +M1JP-RIXI[\KEKZST5NF-26U91M2>F]R-?H6.97>%;M$0B&E;\FPR!_8150K# +M<]3V($5-6SHJ[/"&TYD;ST3!R#@B92\![8+L/;^9;:^+(C'(Z[&A,_Y7P=$6 +MSKYQ6J=0*0/@I?K_Y@L:A'XR_=%D=4UM5^8.7CZKI3H%Z.&F'T_0IXB62\2+(R4=NDDVG8N]A(]M&ZH6-!N;N%IEGNP%1\$646$4*?JTOC-1 +M%3H/UB]S-NON.J5*JN\71XV9L`?IV0DNQY87`Q/JQERXF.B +M<<1R$A7$??LEM.:+%*JG+/SM23OHC_X[]'*WW.H;R658END(V=8SJK]K^DVX +M!XR.GLR_FS_7>CF[]F7&4V3E<#!^5`/B!C955]_-N(F0[!^%U)G(DX,Y-SWE%.TJ1,KN7K_JS^OH?.6U\4@Z>K +M5-0[1GY`57LW:6>GO'!>FU^^MH"`=0.VICBJW_"`.AN^14_A +ML&:(BY,W+\E%!4$G^;3$!WW_)J>_-%0KHJUB`ADT\]#`$W3*]RC&JDCHP0&BAT2\;Q#N>&MUFH8&I[^72X/_V&S]J0[4:!R+L +M=FR<(I>K3G<79].'1C5M'U>E=@A:6<8C&M4)IEIC='07>AK,.RT4,[9^6M!/ +MQSSK`/9&I/X#T`#T0[ZY:H-6_F*QC:."_0I<'O:3-EJ910,KJ[^>E@H2O$OK +MG>0HH/;\>`:*1^*-<'X_;P-,1-C>?E?<23A=YI-VJFS]NL;H`D?>=%N\ZC)L +M4V5TO-RL,S:O8KM?0')<[`-@&.`>$;')_TT/3IZX02G6'789"M6-5^4_;N;L +M$B053#PY8*6KD +M%Q\#"G99*RY0Z]!B"5/58PT +MJAH.UI_>?7]0O.%'W&>\4J*)FOS]X!HZC^6GLFA%'@VA%5#''Q\V@K:?WJ>\ +ML3D"9G\%![+R^KAFA7Y:!61'?B`@^9'[)U]1R,&85*!E\A5CGU:'E%0\O$LH +MS2\"B(18$R)+4?8NA^8`SJ]-5YD)A:3U7\GMJ,K(\79#AA8J#X81K0]V6#WS +MKG7W7G1]WTS59JPM\?#9`DSGO[3FCJ1U>0F[XY,5-D!`)ERPIK8YNZ<1#3T^S: +M+C8/16@5=L/='P>_ER`"1V@R?`1@:Q1[!6=R<"SM.1N==H%HFO'0C;.%HC"" +MAY8(+BC0_^(<;#3G4^ZS(=R32LH'F5REZ:9J?G-L9X46GT)QPNQD%CIER2 +M^OB@<;/$_%R:QR)8XMOG._E1^&KX=&ZLC"B'D1YVJ;&*&^[OM/-`LW*+@$^I +MEI1*2HUNJQ$;!@T3%"-OC(Y!&.N$]^G=1CAVWG>^;4K_CU%0O?[>H$C:%&Z# +M9RH1=WZI-'G2?PM[0DM@VUD@'#-X[!I3X\F&Q$/-C9._6,;]T=KCX)Y#+K,"OJP?9GAK-^S5RJ)0L +MK;Y3A54>@BNYR?&'45;186QEIU)WBT\DW7B?FWL.W>MQ@X.Z>"2*RFEB$JP= +M]&M4<+V>]D82H%QX6X:9COZU1JD]$X=;-3)%D'S;\?5L1[^;7F11T)=3:EQ; +M3M#([X>4>&:!^+/A#!=)N+/]DT'U'1FKJPXL=@G^!$A6=H049Y(?^4G-.Y.4 +MJ(BY#1.4:$>D@T;H$PNN>VP6G9',Q;\'M$']7TDC/%-"4)#^/D2F%I!-LN&EJCEVS]-O:`+MVO0,`YI(KBH\>4I` +MAQT>X'U5T('3V/#GB:4M'08,UE]/U:&?L]AOUO6U$NF:J\#BSS8'[5F"/95" +MR)[@B@^(_]/+<%9),KA*@T80#.%W^/LT\['V\G=-6-_`,Q8=,W"*9.8P@^@Y +MN))H,NOY4W@9@ZTU-J@XV.(D=_XT[[">*B,8"9RT/@M,K3(/J\Q8T(/_QSJF +MC-[EWGPVDLJ=P'\G6VL2'<>CKJGX$)05&0H?$N4,=*`+_5?7W7@?[KBY*@$< +M'%7QWH>&1A6<5`$UD3B8;S@,[1!$--9<5)=Y\0MU&;I860&<'[2K:C35?'HK +MD.YL1#(/_N\WBKS'7LT6Z`7I&6JZ*4`0E,!)N,,`S\L-7)?K&;9;I81V+/*(=<[ZW;%I*D+@@"IEC63J81?NT^^A/!B?OJ +MZ1?6IFN`L,JZ`]?W8FW'LNFBO+EJ^%>$*E64)G.V]D?]7FHW3G24:D)`BB6. +MR)PC>@T/MH1)Y2]ED,YCW&6Y1#H.N`M\NW&B(K4/GEXYR4]/3E5/JM&7(TBV +M9#Y73UIJ"74MB'_A_60"U=9$<:=?E_:EQ#$Q['-B%F4Z'\V\^B?(>UWEK:?: +MN9:&]7VNQT"K/+E7./L_%?*NNYFS?WBHYFQ.MTF7[U%<(M&(>,>E4FK[GJC2 +M,B8B)J[W]@R5F;=);`Y+[*PK'#H@PRD3RVKND8UI9/\:#<>R2`H<]#GY@H6D +M,GKG_+@OSOG[5;B=T6?,IKNB/)37_L8`3N"CV04E30(C[`_,C1ZM\8:&B^^KOU5L$`AL/B4[FM$"'X(X,3>V,:2 +M1%"T%K_=",4-.[%]PW[1EW0*.N;E=7M&MR14C4SFP,;2RTAT93N< +M6`4Y'.]'<0Y*G?\Y)K'Y,`E[^!:SZ7;[J%F(,BDT)O\.4%"^OY7BYH=[M`;A +MPMZLWJTV#PLN&E9SS*W%+IK"\`](5W89"?A2QZE;+:.;UU0V*!4@-OK9WM:" +M)2G$X-G+YDLV!!0N[S-``]+V<'+4F9,3Z/IJL[?+K6%^$LW7+/+T28:LZHN_ +M^^%)%O;V`!$@U\W)O\%V1=N1KA?>#2.+$,J5I\X]`L7D@B_\LHJJS%\C@&6O,)W^$1^X6SH@Q;4\*F6*L<]"^U7,:ECU%;Y;Z^AY9QD+86BL72A*#)L82 +M8G*3ZFIDP:@S,=0>12UD`2LN_77?>SHB3H+5:(J['1-,?=,CL]S+Q5:`=U%\ +M;L;^S03-*=G[8HV`*E5O4<@A)[3-2Q(!23U#1&MG_9B/`IT9E&\^J3SLK[AL +ML*HQ:F5TP7H>R>=_SQ.6[2K^^;]C@3A9ZQQ_1''XFFAE@R1]$R:,;WYJ9><8 +M)B@P,H`YP>:6RAX5-?]\Q,TY;A\*B +M58&9FYM_/5(=II"YZBL!Q07-BQ7''E@?+M9(1A(^7K2(_K_0^1!%-R"BG9%\ +MWX$S&BQI447_A:E]3`MY8L3$15/PLL,,V.D"<#!TS&&,2D>/W15B5L`*5Q,V +MXX3>OU:E8M.QP!MX`_DR^G^>>F$ZJ%`#44].FM;>9R>],DI:A+5J4M-\([Y< +M'B$8HT6O,3L7$@>Z6V23)DXL30&7P!MD^*E2C%HN;RG0#P:#?^H$9WSH\QV. +MA&\N_#PEE#(*4>VY3*]&JS-JQA;>ZVX*@>\RR'>XPOO[Q/-B89$#95Q>^-#U +MX";H%=R0+:J`P\Q,.US(!JB`7Q6EO8AC@ +M:1'HJ!DV\R$FV#MK0'W.*XGF@LVCAF0BY*_CQ@8Y\>9KAXX$<*60D=9]I1`^ +MV8!;IZJ15\1HK%V;2.$5*(11I^PR9$L!=LS0.>V5)8=N$`J3X-?:&W$02^%; +MED7R]>'E3G:C,5I"=R(S#>;VFF!T:8H>:N\A;$3`DZ\[QS*(TM['0KDC+"PJ +M]?;?LX)"]RT?;(0ICY;HY/XV4C]LL^9+6<:]Z"]2>V*7*82U#8X5`WI%\]/_ +MFJ,J?[^&P&,U*C?*1!%W!JGEO"E +ML]HQ.G#\B1&H%Y:ZLO@L^0TH9"#?80.54)Y:)NR;2G_;/?66G880!=2O?"(Q4&^TZ-&J#+RNDBC<$HYE6M7ZQ_RKG/H;+MJN"J[SNK[H*>V^OFI +M@^GJPQ-0VZM-/PMMC7(C$7W6IC.D$NV'S'^R`["3]:2:)ZU4E"-\FO-GFK)T +M=U[O7*>/9&F(F&)=3D`5J'B5WE"G9-D4=I".:5-V_I83LAB7+V]2#']4.#T9 +MJ_O9UD?,@ONJR/4A`Z1)*JT?P_B,SW4S,;XG4><,28D@FJ%N66*K&<1&R%E2*"5&O%[>U20*L +MM"@$-WS:2G[W3L-3;Q\IXG#N&GXAEB$ENVP+`]QWWI;FUFNFZZMC6)[@AGZ4 +M4AJ:/[!*HCE?QE',)MJ!0O-N+!,F(5=0#\][W5:O6)6"NV+K,DJB-KHRE-1B +MZW_Q%TW39.+UJ4-UB-P&!,GZ(V(D1/4E+I%R,=[OZ,5[[W<#:.F;)&.'6P:7 +MR82KS$=QBQCV_D+<&B.1F?NVQFNA5#-UD;VRE3:Q1>20U5U0CSDH\6+IE8D' +M&T3`X)V@/G-NDUCKD15JBL@DX]8XM(;XEX%\JU/O^977K]H4$CKJ>N^/F2\6 +M:7IE-D5$WV?@R"XQRK#!F8CDKD*84=P7]!/+$U5\!D$&:$8--5F@!+QO\_,N +M:@8QAP.>ETO'5=*$*7^!B&C,<7].Z7>;D?+A>ZPQA$BF,<9^/\/\"#:/9@86 +M7V="7`M'6;4Y4..L9^9#-Y:ECQJ:UVJ/TY+=N0`1"$82TGD$2O.%/9:-NX,_ +MKLBYXFR2!AY-\F>4\X-2,6^GP57R?T%!]JEGA@IIM:8G)._0!'Z,Z>(1CO2$ +M#CN-&!D:W=^$#VYAHWK`*97^NZ";B18_)$&0$,P54J^T+]Q +M:1&X7ZOX+.6-SGM=)-;O6X(WW`6.EI%")'=N?^/'91?K1`N.!">2.%4RLKR* +M&UX;S+1"\PVI,2L&5X(&ED%7HG&)//_$)+O\_F-OH4'FF:+SUT?L&PK(K;I+IX@W +M6B1![(%W2A>[GK>WE,34L\P7KQ07_QANUF7(ULOVASH42%#LT^!]CHL3D>"Y +M2"[DF(`ST3/='[0!8%[XDG/ZI,T^X0JXA: +MIRH]*>X=]"Z=V.LJ1;]78D8*DD+[!]%)2%CX=G^<@_9MIOC`_8_AA"(TPBH7 +MXN-*:]1VF<`QGL87I#TH.+%QJH][(T5NE40+NI"CP%<5NGZ*?;628\O/:4R@ +M[<2)3O+!E*I9ERFSXK:\&N3(-+9_O0N69;#7VU7U@Q`-&42_6O5T1J$F<,A? +M,GW92OO,R+V^>0`2"XIT4CEF[<)^AZ#).1%MS4B!:!E">OT'X'.*<&SJ.R6@ +MF$EC%54$F36,5'`;Q([%_M"\#G\WH/$M%L/F%^=YUND)Q:J^IPPSS^3E(&QT +M*75E^,)MW#[_;$`)>3].RC7!."?J^0/2,S8(0"SL\QO:(OR!!1J)MDM +M9@OPYW\&:H*^6B-X6!C,L!Q9/1*]F.8FNJR,&2.]!B/EQYT6*[RF0`_('NY8 +MDC493"!#[_8)N+5KG.`')R.``AW^93-2"9?),:`E"?N1N`B0[C21TZC#T5*W +MJR8AH)];CBEV41)9?5[&7(^LTPRIU^A@,;Y8/-9H9.2.@0+OP`IH+*&A0J*< +MEN]^="*Y&E05'`U/X%3\7GN+ +M,C);X*IE)FD27"H8M*O/VT^J5%(-F/9L;)FJ(1H&U=##?58FI(N4ZC=C:+NQ +MS]1O*D"EL:C9%MF>5$M#%YO&2@%&TII1N1M234_2CF`9!;?P>,9WKE^4+%9J +M=DNM$OTA04QHA.U=\2^:]X$!!L^($1>51^JVZE]J'!*H;BZ>.GE&O!4,=T"@!>>/L&\$J@`%=`;*N=ESG +M(OAG7MIF`(Q2^:_W`JH\IU@DQ^KHZKRM*;HOB5OB0Q\-[\U")X@PWIU!I_ +MC:[4\X.U]"!MK&&R.7\,>(*6ZE,\2^TE?2,GJ9WYAJXU6L"5VFX-5R%>L])( +MPI"$[J1@`2L@#TC@E[ +M0B8H"MQKOIUWTIUB'E7.Q$`MKQ&*OT*V$27$CIJK;*CEO?=6PWJBD2\!B5'N +M72(D?>$I4!I[06.KT!)Y:^8B3E$A\6] +MGVKQ5H$-X\,#5;HA*G]>TQ[58K!(*%N"S0Q<(&=ILTVS_6!K>@77J#T8].5$ +M(8%8V[M^S#"]# +MLO@=SO4$DMK!M3083U<&)`DI+4^*.W/A(J-!(:R5#N3+"^LUGH!(/T7O3#T? +MA;=!AR>F&AFC3:2S/"'3'!G>V80+^\>:'A<^;H#1)E[^&?=WN*C4>E\8)[61*2L^><<;#R8A]"'5ND +M6O&_<'@CD"CWV]FE_[1);\69),/-(+,LJ.0LU?\H]XL8_:7H($?.0)&_"HQG +M,3&]EBG5G2W%^1-%OU&WDS@Y6?$`^;B)C`I]!83*J#II"K<]X1'6YT,(JU!H +MG35]1X*S-5,5QA;;UJ!D1=0%3I?PF::/OZ<#L;R=$U\QS1.H.=Y+AEC.K)V! +ME])AA-S.DA!KDN^QV]F62-./+*.UTH:114D"$V$DWD#/0ME2$7S:X(*:2#N, +M#_QI>28\KDT-3,MQ%:]@6H*]GUT45V.6$YM+*Y,`Q=QC(+E`H"&\85Q"3.&FB6$+IQ=$_^HA`N +M$;=SIDL-@1?3\>O!E;O\[$YU^(*"D@ALTGYRJRF<*+]`@[O!L.,Y9)3XPOHE[D2K5$LD',W4Q>/%F\+/'" +M2U/W5(E==I9FG8(OQJ,M*1GQ%+%`3@WP-A,.*:T(>!\C6X+H6[?]`JJ2%]6Q +MX&(A=:Q\UJIM+))_2U.!1"!5[<8U5AZH-@VYF$C.Q2VV^AM!11S(=G;M#;*N85A^C%4I*V9?@T_ZA@8&3#]%">19T>(+BE_$:EB +MI7YB!'N<33*E_Y(CHT6.,H8#WG[0W6:79>/K<1M9FB6'B_X9\I";A;Q,[1^. +MO9_=(<*C@3']U97@UWA/Y=W4=$_FR\SB61"7M3!)+>;]&ZW+0#4*85?-$^YU +MVT?:7N?Q0_AF%#BW'`L\FJ:18?4X!NR._`[7GE?61$.FY\..[%QZ2^'F&W]Z +M(+7X( +M0;R?[J'5N2]KY%$HDA^S"*VK;TQ,Z$8K3A-:)>@'K`'FO%ZX*KRLKG+P3:,, +M.V"@QC!S^DN*76M228@B^B&U20&!KB-8<&L;ZL]W4H#3 +M8W]M7^72.W"!1W,5VV%8LV>:KDE:%9F)*ML^_&]6-_O?)H;R!Z%6NLWK$H/0 +MKXUT!!I(.GD=DD,'GWUVF>1DX9:%G"1^#<[VJE5@!B@P"5:X1(?!J2A+`6"B +M``!__^R"OW"IXM+V*@^QM,X+9XE,O4'7!VKCB-_)V9VSFCURCC$41@``8%,_ +MK6'!CL%DP"0&RS*\T@G^FX5\H?W4!!O!PH8>.28_N-V8TR"&GIM3`P+>$\OJ +M(9>,0-S]CR6X8T$\%"J+S?I("0(UJ*,)P10!!=6%O7W#`'"J?E$N>X%_;8JG +MS,>$[4SVI>F3\R75D5\%>5<.J=2FF*K6]@<=B(3",I@9FHTB[YAEO8P`V+4P +M8C9Z#"<.436Q5F2$3TE/'F+O;J7)#ZL;Y@JYC6[]@E%9`SU*4E_91_/UGTP] +M6`Q.3?S`A/:;-2["5G]4PJ-M0.OP,X:S5W+`V(SK[)K`V2XCN('B@"LL=."@ +M0]28A^*]U1=EN2FW4?/079VF4?1I%P0U$X$#<%P`,I@TXJHHA;13#E_"5-!M +M1N#XV"%+-_(<[?7E5.H-T?V0.4(Y=_[F;JNM]U/5*.BP`&W1E"U$6N*%G=CX +MD`^]ZB%?IOM!X.,)?3GB%U@NUH*ESQ#`_T\3OGS)$9V4"#5PV;H*M_-VJ7/^ +M````8#QPB!OI_5N-]9+R[;;6`MP,RS%^5G3#E1 +M#$3`EZ4@PLLD)TUJ]29W2HQ36\-=H27+^)ZQZMGD\C62MB#W%#\E8DQG..#C +M/9M:G'U=IF::L0KY"PNDIM2JTYWYG`?P2=]<56=5Y3W^#(;]L#L&FLK\H>*2 +M^^U'LPE_,VIM0/HPWOVC"A0R%2C*8@+R03(3I(%L&(7X^OYE?>7;,E2+$/P#9Y>%YXV-TPA9/RK +MBY*2GW'`&4D$PD?(C%:A+JXL:)`_6][+LK%7?Z3YB%5AY.L_^TT.*JE@!4;E +M6:Z*3$U/0V)\!J*_%;'QD8O-T^U4R:CA'7='ZH+`CA7:_&B"W4DZ+X9N?">\ +MN;JUI[?Q5O%JG+V<$1J=N3`-1YK/E*FVQ_;`40;LJZ^7S?[/^OQN!VA>-KS= +MJ5#%T:U^#O**)TU\#7Y`\\%GB^UJWL8"!D=DS,E([8,LR"C&;I$/),`!?;C7 +M+MR6QLHPXQCR!P^O81:5^\8(Z6!:R)8)SB/GF.O!/P7)U*,]G44C?,,M0*7J +M77A)I%C8-BD2^^',N$$L'OU"7,W2$S59[!ED>..B2/FI$&+_G(%M6=OH96B= +M*36WZ;/MFF=9_1$5'Q33GD?M`,UX7;%7X7_&UWBQF:G\* +M-(P^SG$>FATRW5PH_#E0W/Z>!A;8[!)L%&NGHY#%_WJR=U??LG@4SOT4/0`! +M!`8`!`FD^">!;H)T``<+`0`$(P,!`05L```!`",#`0$%;````0`A(0$(%`,# +M`1L$`04`!`$#`@(&`0`,A[B$;,"<7L#`:@`("@$]?9*5```%`1$/`'@`.``V +?`&4`>`!E````%`H!```M0RMQLYT!%08!`"$````````` +` +end