From 0a3ffc1dc206ca3d33b0994f71efd3ff1edf8e2f Mon Sep 17 00:00:00 2001 From: gitlost Date: Mon, 27 Apr 2026 01:02:25 +0100 Subject: [PATCH] AZTEC: add manual FNC1 support: improve P/S vs P/L choice when have ECI; add ZINT_DEBUG_TEST dump AUSPOST: allow variable length data input DATAMATRIX: do `EXTRA_ESCAPE_MODE` processing up front & check have non-zero length afterwards; disallow `READER_INIT` and `EXTRA_ESCAPE_MODE`; general: add new `z_zero_fill()` func & use; add new `z_extra_escape_position_fnc1()` helper; in `z_ct_set_seg_extra_escapes_eci` check position FNC1 whether or not have ECI library: escape_char_process: note escaped backslash followed by caret by passes `EXTRA_ESCAPE_MODE` check test suite: BWIPP: update to latest; support AUSPOST variants; process `EXTRA_ESCAPE_MODE` escaping up front --- ChangeLog | 7 +- backend/2of5inter_based.c | 21 +- backend/auspost.c | 217 ++-- backend/aztec.c | 217 ++-- backend/code128_based.c | 6 +- backend/common.c | 60 +- backend/common.h | 17 +- backend/dmatrix.c | 153 +-- backend/library.c | 8 +- backend/medical.c | 13 +- backend/postal.c | 6 +- backend/rss.c | 5 +- backend/tests/test_auspost.c | 210 ++-- backend/tests/test_aztec.c | 1311 +++++++++++++++++---- backend/tests/test_common.c | 91 +- backend/tests/test_dmatrix.c | 133 ++- backend/tests/test_library.c | 48 +- backend/tests/test_pdf417.c | 2 +- backend/tests/testcommon.c | 85 +- backend/tests/testcommon.h | 2 +- backend/tests/tools/bwipp_dump.ps.tar.xz | Bin 165660 -> 166352 bytes backend/tests/tools/run_zxingcpp_tests.sh | 1 + backend/zint.h | 2 +- backend_tcl/zint.c | 2 +- docs/manual.html | 97 +- docs/manual.pmd | 54 +- docs/manual.txt | 68 +- docs/zint.1 | 2 +- docs/zint.1.pmd | 6 +- frontend_qt/grpAztec.ui | 12 + frontend_qt/mainwindow.cpp | 17 +- 31 files changed, 1968 insertions(+), 905 deletions(-) diff --git a/ChangeLog b/ChangeLog index 75fae057..bc9339f5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,4 @@ -Version 2.16.0.9 (dev) not released yet (2026-04-22) +Version 2.16.0.9 (dev) not released yet (2026-04-27) ==================================================== **Incompatible changes** @@ -34,8 +34,9 @@ Changes - DATAMATRIX: new options "--dmb256=" (`option_3 = DM_B256_START`) & "--dmc40=" (`option_3 = DM_C40_START`) to allow forcing of initial encodation for given no. (`option_1`) of initial characters, with 0 meaning all -- DATAMATRIX: add manual FNC1 support -- AUSPOST: support Null FCC (DPID all zeroes) +- AZTEC/DATAMATRIX: add manual FNC1 support +- AUSPOST: support FCC 00 Null (DPID all zeroes) and allow variable length data + input Bugs ---- diff --git a/backend/2of5inter_based.c b/backend/2of5inter_based.c index 1cc3683a..59d6c737 100644 --- a/backend/2of5inter_based.c +++ b/backend/2of5inter_based.c @@ -41,7 +41,7 @@ INTERNAL int zint_c25_inter_common(struct zint_symbol *symbol, unsigned char sou /* Interleaved 2-of-5 (ITF-14) */ INTERNAL int zint_itf14(struct zint_symbol *symbol, unsigned char source[], int length) { - int i, error_number, zeroes; + int i, error_number; unsigned char local_source[14]; unsigned char have_check_digit = '\0'; unsigned char check_digit; @@ -70,11 +70,7 @@ INTERNAL int zint_itf14(struct zint_symbol *symbol, unsigned char source[], int } /* Add leading zeros as required */ - zeroes = 13 - length; - for (i = 0; i < zeroes; i++) { - local_source[i] = '0'; - } - memcpy(local_source + zeroes, source, length); + z_zero_fill(source, length, local_source, 13); /* Calculate the check digit - the same method used for EAN-13 */ check_digit = (unsigned char) zint_gs1_check_digit(local_source, 13); @@ -128,7 +124,6 @@ INTERNAL int zint_dpleit(struct zint_symbol *symbol, unsigned char source[], int unsigned int count; int factor; unsigned char local_source[14]; - int zeroes; count = 0; if (length > 13) { @@ -139,10 +134,7 @@ INTERNAL int zint_dpleit(struct zint_symbol *symbol, unsigned char source[], int "Invalid character at position %d in input (digits only)", i); } - zeroes = 13 - length; - for (i = 0; i < zeroes; i++) - local_source[i] = '0'; - memcpy(local_source + zeroes, source, length); + z_zero_fill(source, length, local_source, 13); factor = 4; for (i = 12; i >= 0; i--) { @@ -169,7 +161,7 @@ INTERNAL int zint_dpleit(struct zint_symbol *symbol, unsigned char source[], int /* Deutsche Post Identcode */ /* See dpleit() for (sort of) documentation reference */ INTERNAL int zint_dpident(struct zint_symbol *symbol, unsigned char source[], int length) { - int i, error_number, zeroes; + int i, error_number; unsigned int count; int factor; unsigned char local_source[12]; @@ -183,10 +175,7 @@ INTERNAL int zint_dpident(struct zint_symbol *symbol, unsigned char source[], in "Invalid character at position %d in input (digits only)", i); } - zeroes = 11 - length; - for (i = 0; i < zeroes; i++) - local_source[i] = '0'; - memcpy(local_source + zeroes, source, length); + z_zero_fill(source, length, local_source, 11); factor = 4; for (i = 10; i >= 0; i--) { diff --git a/backend/auspost.c b/backend/auspost.c index fb679ddb..d78f96e1 100644 --- a/backend/auspost.c +++ b/backend/auspost.c @@ -30,10 +30,15 @@ */ /* SPDX-License-Identifier: BSD-3-Clause */ +#include +#include +#include "common.h" +#include "reedsol.h" + static const char AusGDSET[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz #"; #define AUS_GDSET_F (IS_NUM_F | IS_UPR_F | IS_LWR_F | IS_SPC_F | IS_HSH_F) -/* The contents of data_pattern conform to the following standard: +/* The contents of encoding tables and data pattern `dest[]` conform to the following standard: 0 = Tracker, Ascender and Descender 1 = Tracker and Ascender 2 = Tracker and Descender @@ -46,55 +51,38 @@ static const char AusNTable[10][2] = { /* C Encoding Table (GDSET) */ static const char AusCTable[64][3] = { - { 2,2,2 }, { 3,0,0 }, { 3,0,1 }, { 3,0,2 }, { 3,1,0 }, {3,1,1 }, - { 3,1,2 }, { 3,2,0 }, { 3,2,1 }, { 3,2,2 }, { 0,0,0 }, {0,0,1 }, - { 0,0,2 }, { 0,1,0 }, { 0,1,1 }, { 0,1,2 }, { 0,2,0 }, {0,2,1 }, - { 0,2,2 }, { 1,0,0 }, { 1,0,1 }, { 1,0,2 }, { 1,1,0 }, {1,1,1 }, - { 1,1,2 }, { 1,2,0 }, { 1,2,1 }, { 1,2,2 }, { 2,0,0 }, {2,0,1 }, - { 2,0,2 }, { 2,1,0 }, { 2,1,1 }, { 2,1,2 }, { 2,2,0 }, {2,2,1 }, - { 0,2,3 }, { 0,3,0 }, { 0,3,1 }, { 0,3,2 }, { 0,3,3 }, {1,0,3 }, - { 1,1,3 }, { 1,2,3 }, { 1,3,0 }, { 1,3,1 }, { 1,3,2 }, {1,3,3 }, - { 2,0,3 }, { 2,1,3 }, { 2,2,3 }, { 2,3,0 }, { 2,3,1 }, {2,3,2 }, - { 2,3,3 }, { 3,0,3 }, { 3,1,3 }, { 3,2,3 }, { 3,3,0 }, {3,3,1 }, - { 3,3,2 }, { 3,3,3 }, { 0,0,3 }, { 0,1,3 } + { 2,2,2 }, { 3,0,0 }, { 3,0,1 }, { 3,0,2 }, { 3,1,0 }, { 3,1,1 }, { 3,1,2 }, { 3,2,0 }, + { 3,2,1 }, { 3,2,2 }, { 0,0,0 }, { 0,0,1 }, { 0,0,2 }, { 0,1,0 }, { 0,1,1 }, { 0,1,2 }, + { 0,2,0 }, { 0,2,1 }, { 0,2,2 }, { 1,0,0 }, { 1,0,1 }, { 1,0,2 }, { 1,1,0 }, { 1,1,1 }, + { 1,1,2 }, { 1,2,0 }, { 1,2,1 }, { 1,2,2 }, { 2,0,0 }, { 2,0,1 }, { 2,0,2 }, { 2,1,0 }, + { 2,1,1 }, { 2,1,2 }, { 2,2,0 }, { 2,2,1 }, { 0,2,3 }, { 0,3,0 }, { 0,3,1 }, { 0,3,2 }, + { 0,3,3 }, { 1,0,3 }, { 1,1,3 }, { 1,2,3 }, { 1,3,0 }, { 1,3,1 }, { 1,3,2 }, { 1,3,3 }, + { 2,0,3 }, { 2,1,3 }, { 2,2,3 }, { 2,3,0 }, { 2,3,1 }, { 2,3,2 }, { 2,3,3 }, { 3,0,3 }, + { 3,1,3 }, { 3,2,3 }, { 3,3,0 }, { 3,3,1 }, { 3,3,2 }, { 3,3,3 }, { 0,0,3 }, { 0,1,3 } }; /* Bar to Decimal Conversion Table (Reed-Solomon) */ static const char AusBarTable[64][3] = { - { 0,0,0 }, { 0,0,1 }, { 0,0,2 }, { 0,0,3 }, { 0,1,0 }, { 0,1,1 }, - { 0,1,2 }, { 0,1,3 }, { 0,2,0 }, { 0,2,1 }, { 0,2,2 }, { 0,2,3 }, - { 0,3,0 }, { 0,3,1 }, { 0,3,2 }, { 0,3,3 }, { 1,0,0 }, { 1,0,1 }, - { 1,0,2 }, { 1,0,3 }, { 1,1,0 }, { 1,1,1 }, { 1,1,2 }, { 1,1,3 }, - { 1,2,0 }, { 1,2,1 }, { 1,2,2 }, { 1,2,3 }, { 1,3,0 }, { 1,3,1 }, - { 1,3,2 }, { 1,3,3 }, { 2,0,0 }, { 2,0,1 }, { 2,0,2 }, { 2,0,3 }, - { 2,1,0 }, { 2,1,1 }, { 2,1,2 }, { 2,1,3 }, { 2,2,0 }, { 2,2,1 }, - { 2,2,2 }, { 2,2,3 }, { 2,3,0 }, { 2,3,1 }, { 2,3,2 }, { 2,3,3 }, - { 3,0,0 }, { 3,0,1 }, { 3,0,2 }, { 3,0,3 }, { 3,1,0 }, { 3,1,1 }, - { 3,1,2 }, { 3,1,3 }, { 3,2,0 }, { 3,2,1 }, { 3,2,2 }, { 3,2,3 }, - { 3,3,0 }, { 3,3,1 }, { 3,3,2 }, { 3,3,3 } + { 0,0,0 }, { 0,0,1 }, { 0,0,2 }, { 0,0,3 }, { 0,1,0 }, { 0,1,1 }, { 0,1,2 }, { 0,1,3 }, + { 0,2,0 }, { 0,2,1 }, { 0,2,2 }, { 0,2,3 }, { 0,3,0 }, { 0,3,1 }, { 0,3,2 }, { 0,3,3 }, + { 1,0,0 }, { 1,0,1 }, { 1,0,2 }, { 1,0,3 }, { 1,1,0 }, { 1,1,1 }, { 1,1,2 }, { 1,1,3 }, + { 1,2,0 }, { 1,2,1 }, { 1,2,2 }, { 1,2,3 }, { 1,3,0 }, { 1,3,1 }, { 1,3,2 }, { 1,3,3 }, + { 2,0,0 }, { 2,0,1 }, { 2,0,2 }, { 2,0,3 }, { 2,1,0 }, { 2,1,1 }, { 2,1,2 }, { 2,1,3 }, + { 2,2,0 }, { 2,2,1 }, { 2,2,2 }, { 2,2,3 }, { 2,3,0 }, { 2,3,1 }, { 2,3,2 }, { 2,3,3 }, + { 3,0,0 }, { 3,0,1 }, { 3,0,2 }, { 3,0,3 }, { 3,1,0 }, { 3,1,1 }, { 3,1,2 }, { 3,1,3 }, + { 3,2,0 }, { 3,2,1 }, { 3,2,2 }, { 3,2,3 }, { 3,3,0 }, { 3,3,1 }, { 3,3,2 }, { 3,3,3 } }; -#include -#include -#include "common.h" -#include "reedsol.h" - -static unsigned char aus_convert_pattern(const char data, const int shift) { - return data << shift; -} - /* Adds Reed-Solomon error correction to auspost */ -static char *aus_rs_error(const char data_pattern[], char *d) { - const int length = (int) (d - data_pattern); +static char *aus_rs_error(const char dest[], char *d) { + const int length = (int) (d - dest); int reader, triple_writer; - unsigned char triple[31]; + unsigned char triple[17]; /* Max bars 67 - 12 (ECC) - 4 (start/stop) = 51 / 3 */ unsigned char result[5]; rs_t rs; for (reader = 2, triple_writer = 0; reader < length; reader += 3, triple_writer++) { - triple[triple_writer] = aus_convert_pattern(data_pattern[reader], 4) - | aus_convert_pattern(data_pattern[reader + 1], 2) - | aus_convert_pattern(data_pattern[reader + 2], 0); + triple[triple_writer] = (dest[reader] << 4) | (dest[reader + 1] << 2) | dest[reader + 2]; } zint_rs_init_gf(&rs, 0x43); @@ -120,7 +108,7 @@ INTERNAL int zint_auspost(struct zint_symbol *symbol, unsigned char source[], in /* Null Standard Barcode 2 Barcode 3 Reply Route Redirect */ { '0','0' }, { '1','1' }, { '5','9' }, { '6','2' }, { '4','5' }, { '8','7' }, { '9','2' } }; - static const char start_stop[2] = { 1,3 }; + static const char start_stop[2] = { 1,3 }; /* Full,tracker */ int i; int error_number; @@ -128,88 +116,87 @@ INTERNAL int zint_auspost(struct zint_symbol *symbol, unsigned char source[], in int loopey, reader; int h; - char data_pattern[200]; - char *d = data_pattern; + char dest[67]; /* Max bars (Customer Barcode 3) */ + char *d = dest; int fcc_idx; /* Index into `fccs[]` */ - unsigned char local_source[30]; - int zeroes = 0; + unsigned char src_buf[8]; /* For zero-padded DPID */ + int not_all_digits = 0; const int content_segs = symbol->output_options & BARCODE_CONTENT_SEGS; /* Suppress clang-tidy-21 clang-analyzer-security.ArrayBound */ assert(symbol->symbology == BARCODE_AUSPOST || symbol->symbology == BARCODE_AUSREPLY || symbol->symbology == BARCODE_AUSROUTE || symbol->symbology == BARCODE_AUSREDIRECT); - /* Do all of the length checking first to avoid stack smashing */ if (symbol->symbology == BARCODE_AUSPOST) { - if (length != 8 && length != 13 && length != 16 && length != 18 && length != 23) { + if (length > 23) { return z_errtxtf(ZINT_ERROR_TOO_LONG, symbol, 401, - "Input length %d wrong (8, 13, 16, 18 or 23 characters required)", length); + "Input length %d too long (maximum 23)", length); } - } else if (length > 8) { - return z_errtxtf(ZINT_ERROR_TOO_LONG, symbol, 403, "Input length %d too long (maximum 8)", length); - } - - /* Check input immediately to catch invalid chars */ - if ((i = z_not_sane(AUS_GDSET_F, source, length))) { - return z_errtxtf(ZINT_ERROR_INVALID_DATA, symbol, 404, - "Invalid character at position %d in input (alphanumerics, space and \"#\" only)", i); - } - - if (symbol->symbology == BARCODE_AUSPOST) { - /* Format control code (FCC) */ - switch (length) { - case 8: - fcc_idx = 1; /* FCC 11 Standard Customer */ - break; - case 13: - fcc_idx = 2; /* FCC 59 Customer 2 */ - break; - case 16: - fcc_idx = 2; /* FCC 59 Customer 2 */ - if ((i = z_not_sane(NEON_F, source, length))) { + not_all_digits = z_not_sane(NEON_F, source, length); + if (length <= 8) { + if (not_all_digits) { + return z_errtxtf(ZINT_ERROR_INVALID_DATA, symbol, 405, + "Invalid character at position %d in DPID (digits only for Standard Customer Barcode)", + not_all_digits); + } + if (z_zero_fill(source, length, src_buf, 8)) { + source = src_buf; + length = 8; + } + fcc_idx = 1; /* FCC 11 Standard Customer */ + } else { + if (not_all_digits) { + if ((i = z_not_sane(NEON_F, source, 8))) { return z_errtxtf(ZINT_ERROR_INVALID_DATA, symbol, 402, - "Invalid character at position %d in input (digits only for FCC 59 length 16)", - i); + "Invalid character at position %d in DPID (digits only)", i); } - break; - case 18: - fcc_idx = 3; /* FCC 62 Customer 3 */ - break; - case 23: - fcc_idx = 3; /* FCC 62 Customer 3 */ - if ((i = z_not_sane(NEON_F, source, length))) { - return z_errtxtf(ZINT_ERROR_INVALID_DATA, symbol, 406, - "Invalid character at position %d in input (digits only for FCC 62 length 23)", - i); + if ((i = z_not_sane(AUS_GDSET_F, source + 8, length - 8))) { + return z_errtxtf(ZINT_ERROR_INVALID_DATA, symbol, 404, + "Invalid character at position %d in input (alphanumerics, space and \"#\" only)", + i + 8); } - break; + } + if (length > 18) { + if (not_all_digits) { + return ZEXT z_errtxtf(ZINT_ERROR_INVALID_DATA, symbol, 407, + "Invalid character at position %1$d in input (digits only for Customer Barcode 3" + " length %2$d)", not_all_digits, length); + } + fcc_idx = 3; /* FCC 62 Customer Barcode 3 all-digits */ + } else if (length > 16 || (length > 13 && not_all_digits)) { + fcc_idx = 3; /* FCC 62 Customer Barcode 3 */ + } else { + fcc_idx = 2; /* FCC 59 Customer Barcode 2 */ + } } + /* Check if DPID all zeros (Null) */ - for (i = 0; i < 8 && source[i] == '0'; i++); - if (i == 8) { - fcc_idx = 0; /* Null */ + if (z_chr_cnt(source, 8, '0') == 8) { + fcc_idx = 0; /* FCC 00 Null */ } } else { - fcc_idx = symbol->symbology - BARCODE_AUSREPLY + 4; /* 4 (FCC 45), 5 (FCC 87) or 6 (FCC 92) */ + if (length > 8) { + return z_errtxtf(ZINT_ERROR_TOO_LONG, symbol, 403, "Input length %d too long (maximum 8)", length); + } + if ((i = z_not_sane(NEON_F, source, length))) { + return z_errtxtf(ZINT_ERROR_INVALID_DATA, symbol, 406, + "Invalid character at position %d in DPID (digits only)", i); + } /* Add leading zeros as required */ - zeroes = 8 - length; - memset(local_source, '0', zeroes); + if (z_zero_fill(source, length, src_buf, 8)) { + source = src_buf; + length = 8; + } + + /* Format control code (FCC) */ + fcc_idx = symbol->symbology - BARCODE_AUSREPLY + 4; /* 4 (FCC 45), 5 (FCC 87) or 6 (FCC 92) */ } if (symbol->debug & ZINT_DEBUG_PRINT) { printf("AUSPOST FCC: %.2s\n", fccs[fcc_idx]); } - memcpy(local_source + zeroes, source, length); - length += zeroes; - - /* Verify that the first 8 characters are numbers */ - if ((i = z_not_sane(NEON_F, local_source, 8))) { - return z_errtxtf(ZINT_ERROR_INVALID_DATA, symbol, 405, - "Invalid character at position %d in DPID (first 8 characters) (digits only)", i); - } - /* Start character */ memcpy(d, start_stop, 2); d += 2; @@ -221,49 +208,47 @@ INTERNAL int zint_auspost(struct zint_symbol *symbol, unsigned char source[], in /* Delivery Point Identifier (DPID) */ for (reader = 0; reader < 8; reader++, d += 2) { - memcpy(d, AusNTable[local_source[reader] - '0'], 2); + memcpy(d, AusNTable[source[reader] - '0'], 2); } /* Customer Information */ if (length > 8) { - if (length == 13 || length == 18) { + if (not_all_digits) { for (reader = 8; reader < length; reader++, d += 3) { - memcpy(d, AusCTable[z_posn(AusGDSET, local_source[reader])], 3); + memcpy(d, AusCTable[z_posn(AusGDSET, source[reader])], 3); } - } else if (length == 16 || length == 23) { + } else { for (reader = 8; reader < length; reader++, d += 2) { - memcpy(d, AusNTable[local_source[reader] - '0'], 2); + memcpy(d, AusNTable[source[reader] - '0'], 2); } } } - /* Filler bar */ - h = (int) (d - data_pattern); - switch (h) { - case 22: - case 37: - case 52: - *d++ = 3; - break; - default: - break; + /* Filler bar(s) */ + h = (int) (d - dest); + assert(h < 53); + for (i = h; i != 23 && i != 38 && i != 53; i++) { + *d++ = 3; /* Tracker */ + } + if (symbol->debug & ZINT_DEBUG_PRINT) { + printf("Filler: %d\n", i - h); } /* Reed Solomon error correction */ - d = aus_rs_error(data_pattern, d); + d = aus_rs_error(dest, d); /* Stop character */ memcpy(d, start_stop, 2); d += 2; /* Turn the symbol into a bar pattern ready for plotting */ - h = (int) (d - data_pattern); + h = (int) (d - dest); for (loopey = 0, writer = 0; loopey < h; loopey++, writer += 2) { - if (data_pattern[loopey] == 1 || data_pattern[loopey] == 0) { + if (dest[loopey] == 1 || dest[loopey] == 0) { z_set_module(symbol, 0, writer); } z_set_module(symbol, 1, writer); - if (data_pattern[loopey] == 2 || data_pattern[loopey] == 0) { + if (dest[loopey] == 2 || dest[loopey] == 0) { z_set_module(symbol, 2, writer); } } @@ -289,7 +274,7 @@ INTERNAL int zint_auspost(struct zint_symbol *symbol, unsigned char source[], in error_number = zint_daft_set_height(symbol, 0.0f, 0.0f); } - if (content_segs && z_ct_cpy_cat(symbol, fccs[fcc_idx], 2, '\xFF' /*separator (none)*/, local_source, length)) { + if (content_segs && z_ct_cpy_cat(symbol, fccs[fcc_idx], 2, '\xFF' /*separator (none)*/, source, length)) { return ZINT_ERROR_MEMORY; /* `z_ct_cpy_cat()` only fails with OOM */ } diff --git a/backend/aztec.c b/backend/aztec.c index 0cfc7472..278fb025 100644 --- a/backend/aztec.c +++ b/backend/aztec.c @@ -146,8 +146,8 @@ static void az_print_modes(const char *modes, const int length) { } /* Determine encoding modes using modified Annex H algorithm (`FAST_MODE`) */ -static int az_text_modes(char modes[], unsigned char source[], int length, const int gs1, const char initial_mode, - const int debug_print) { +static int az_text_modes(char modes[], unsigned char source[], const int length, const char *fncs, + const char initial_mode, const int debug_print) { int i; char current_mode; int count; @@ -157,7 +157,7 @@ static int az_text_modes(char modes[], unsigned char source[], int length, const for (i = 0; i < length; i++) { if (!z_isascii(source[i]) || !AztecFlags[source[i]]) { modes[i] = AZ_B; - } else if (gs1 && source[i] == '\x1D') { + } else if (fncs[i] && source[i] == '\x1D') { modes[i] = AZ_P; /* For FLG(0) = FNC1 */ } else { modes[i] = AztecModes[source[i]]; @@ -774,8 +774,8 @@ static void az_dump_list(const struct az_state_list *list, const char *prefix) { fprintf(stderr, "%sSize %d\n", prefix, (int) list->used); for (i = 0; i < list->used; i++) { const struct az_state *state = list->states + i; - fprintf(stderr, "%.*s %d: mode %d, Size(tokens) %d\n", pl, spaces, (int) i, state->mode, - (int) state->tokens.used); + fprintf(stderr, "%.*s %d: mode %d, Size(tokens) %d, bitCount %d, byteCount %d\n", + pl, spaces, i, state->mode, state->tokens.used, state->bitCount, state->byteCount); } } #endif @@ -859,15 +859,14 @@ static int az_UpdateStateForPair(const struct az_state *state, const int from, c /* Return a set of states that represent the possible ways of updating this state for the next character. The resulting set of states are added to `ret_list` */ static int az_UpdateStateForChar(const struct az_state *state, const unsigned char *source, const int from, - const int gs1, struct az_state_list *ret_list) { + const int fnc1_if_gs, struct az_state_list *ret_list) { unsigned char ch = source[from]; - const int fnc1 = gs1 && ch == '\x1D'; - const int charInCurrentTable = (fnc1 && state->mode == AZ_P) - || (z_isascii(ch) && (AztecFlags[ch] & (1 << state->mode))); + const int fnc1 = fnc1_if_gs && ch == '\x1D'; if (z_isascii(ch)) { + const int charInCurrentTable = fnc1 ? state->mode == AZ_P : AztecFlags[ch] & (1 << state->mode); int mode; for (mode = 0; mode < AZ_NUM_MODES; mode++) { - const int charInModeTable = (fnc1 && mode == AZ_P) || (AztecFlags[ch] & (1 << mode)); + const int charInModeTable = fnc1 ? mode == AZ_P : AztecFlags[ch] & (1 << mode); if (charInModeTable) { /* Try generating the char by latching to its mode */ if (!charInCurrentTable || mode == state->mode || (mode == AZ_D && !fnc1)) { @@ -900,7 +899,7 @@ static int az_UpdateStateForChar(const struct az_state *state, const unsigned ch } } } - if (!fnc1 && (state->byteCount > 0 || !charInCurrentTable)) { + if (!fnc1 && (state->byteCount > 0 || !z_isascii(ch) || !(AztecFlags[ch] & (1 << state->mode)))) { /* It's never worthwhile to go into B/S mode if not already in B/S mode, and the char exists in current mode. That can never save bits over just outputting the char in the current mode */ if (!az_AddByteShiftChar(state, from, -1 /*from2*/, ret_list)) { @@ -937,7 +936,7 @@ static int az_UpdateStateListForPair(struct az_state_list *list, const int from, /* Update a set of states for a new character by updating each state for the new character, merging the results, and then removing the non-optimal states */ static int az_UpdateStateListForChar(struct az_state_list *list, const unsigned char *source, const int from, - const int gs1) { + const int fnc1_if_gs) { int i; struct az_state_list s_ret_list; struct az_state_list *ret_list = &s_ret_list; @@ -945,7 +944,7 @@ static int az_UpdateStateListForChar(struct az_state_list *list, const unsigned return 0; } for (i = 0; i < list->used; i++) { - if (!az_UpdateStateForChar(list->states + i, source, from, gs1, ret_list)) { + if (!az_UpdateStateForChar(list->states + i, source, from, fnc1_if_gs, ret_list)) { az_state_list_free(ret_list); return 0; } @@ -968,8 +967,8 @@ static int az_UpdateStateListForChar(struct az_state_list *list, const unsigned /* Copyright 2016 Huy Cuong Nguyen */ /* zxing-cpp */ /* SPDX-License-Identifier: Apache-2.0 */ /* Note that a bitstream that is encoded to be shortest based on mode choices may not be so after bit-stuffing */ -static int az_binary_string(unsigned char source[], const int length, int bp, - char binary_string[AZTEC_MAP_POSN_MAX + 1], const int gs1, const char initial_mode, +static int az_binary_string(const unsigned char source[], const int length, int bp, + char binary_string[AZTEC_MAP_POSN_MAX + 1], const char *fncs, const char initial_mode, char *p_current_mode) { struct az_state_list s_state_list; struct az_state_list *list = &s_state_list; @@ -1000,7 +999,7 @@ static int az_binary_string(unsigned char source[], const int length, int bp, } i++; } else { - if (!az_UpdateStateListForChar(list, source, i, gs1)) { + if (!az_UpdateStateListForChar(list, source, i, fncs[i])) { az_state_list_free(list); return 0; } @@ -1061,37 +1060,23 @@ static int az_binary_string(unsigned char source[], const int length, int bp, } /* Calculate the binary size */ -static int az_text_size(const char *modes, const unsigned char *source, int length, const int gs1, const int set_gs1, +static int az_text_size(const char *modes, const unsigned char *source, const int length, const char* fncs, const int eci, const char initial_mode, const int eci_latch, int *byte_counts) { int i; int byte_i = 0; char current_mode = initial_mode; int size = 0; - if (set_gs1 && gs1) { - if (eci == 0) { - current_mode = AZ_D; - size += 5 + 4 + 5 + 3; - } else { - size += 5 + 5 + 3; - } - } - if (eci != 0) { + if (eci) { if (initial_mode != AZ_P) { if (eci_latch) { - if (initial_mode != AZ_M) { - if (initial_mode == AZ_D) { - size += 4; - } - size += 5; - } - size += 5; + size += AztecLatchNum[(int) initial_mode][AZ_P]; current_mode = AZ_P; } else { size += initial_mode == AZ_D ? 4 : 5; } } - size += 5 + 3 + 4 + 4 * ((eci > 9) + (eci > 99) + (eci > 999) + (eci > 9999) + (eci > 99999)); + size += 5 + 3 + 4 + 4 * ((eci >= 10) + (eci >= 100) + (eci >= 1000) + (eci >= 10000) + (eci >= 100000)); } for (i = 0; i < length; i++) { if (modes[i] != current_mode) { @@ -1154,7 +1139,7 @@ static int az_text_size(const char *modes, const unsigned char *source, int leng if (modes[i] == AZ_P || (modes[i] & AZ_PS)) { size += 5; - if (gs1 && source[i] == '\x1D') { + if (fncs[i] && source[i] == '\x1D') { size += 3; } } else if (modes[i] == AZ_D && !(modes[i] & AZ_US)) { @@ -1168,9 +1153,8 @@ static int az_text_size(const char *modes, const unsigned char *source, int leng } /* Determine encoding modes and encode */ -static int az_text_process(unsigned char *source, int length, int bp, char *binary_string, const int gs1, - const int gs1_bp, const int eci, const int fast_encode, char *p_current_mode, int *data_length, - const int debug) { +static int az_text_process(unsigned char *source, const int length, int bp, char *binary_string, const char *fncs, + const int eci, const int fast_encode, char *p_current_mode, int *data_length, const int debug) { int i, j; int reduced_length = 0; /* Suppress gcc-14 warning -Wmaybe-uninitialized */ char *modes = (char *) z_alloca(length + 1); @@ -1180,7 +1164,6 @@ static int az_text_process(unsigned char *source, int length, int bp, char *bina int eci_latch = 0; char current_mode = p_current_mode ? *p_current_mode : AZ_U; const char initial_mode = current_mode; - const int set_gs1 = bp == gs1_bp; const int initial_bp = bp; const int all_byte_only_or_uld = az_all_byte_only_or_uld(source, length); /* -1 if not */ const int debug_print = debug & ZINT_DEBUG_PRINT; @@ -1190,35 +1173,14 @@ static int az_text_process(unsigned char *source, int length, int bp, char *bina const int debug_skip_all = 0; #endif - if (set_gs1 && gs1) { - assert(initial_mode == AZ_U); - if (eci == 0) { - /* Latch to D/L to save a bit */ - current_mode = AZ_D; - bp = z_bin_append_posn(30, 5, binary_string, bp); /* D/L */ - bp = z_bin_append_posn(0, 4 + 5 + 3, binary_string, bp); /* P/S FLG(0) = FNC1 */ - } else { - bp = z_bin_append_posn(0, 5 + 5 + 3, binary_string, bp); /* P/S FLG(0) = FNC1 */ - } - /* See if it's worthwhile latching to AZ_P when have ECI */ - } else if ((debug_skip_all || all_byte_only_or_uld == -1) && eci && initial_mode != AZ_P - && az_count_initial_puncts(source, length) > 2 + (initial_mode == AZ_D)) { - assert(!gs1); - eci_latch = 1; - current_mode = AZ_P; - } - - if (eci != 0) { - const int flg = 1 + (eci > 9) + (eci > 99) + (eci > 999) + (eci > 9999) + (eci > 99999); + if (eci) { + const int flg = 1 + (eci >= 10) + (eci >= 100) + (eci >= 1000) + (eci >= 10000) + (eci >= 100000); if (initial_mode != AZ_P) { - if (eci_latch) { - if (initial_mode != AZ_M) { - if (initial_mode == AZ_D) { - bp = z_bin_append_posn(14, 4, binary_string, bp); /* U/L */ - } - bp = z_bin_append_posn(29, 5, binary_string, bp); /* M/L */ - } - bp = z_bin_append_posn(30, 5, binary_string, bp); /* P/L */ + /* See if it's worthwhile latching to AZ_P */ + if ((eci_latch = az_count_initial_puncts(source, length) >= flg + (initial_mode == AZ_D))) { + bp = z_bin_append_posn(AztecLatch[(int) initial_mode][AZ_P], AztecLatchNum[(int) initial_mode][AZ_P], + binary_string, bp); + current_mode = AZ_P; } else { bp = z_bin_append_posn(0, initial_mode == AZ_D ? 4 : 5, binary_string, bp); /* P/S */ } @@ -1249,9 +1211,9 @@ static int az_text_process(unsigned char *source, int length, int bp, char *bina memset(modes, all_byte_only_or_uld, length); reduced_length = length; } else if (fast_encode) { - reduced_length = az_text_modes(modes, source, length, gs1, current_mode, debug_print); + reduced_length = az_text_modes(modes, source, length, fncs, current_mode, debug_print); } else { - bp = az_binary_string(source, length, bp, binary_string, gs1, current_mode, ¤t_mode); + bp = az_binary_string(source, length, bp, binary_string, fncs, current_mode, ¤t_mode); if (bp == 0 || bp > AZTEC_BIN_CAPACITY) { return bp == 0 ? ZINT_ERROR_MEMORY : ZINT_ERROR_TOO_LONG; } @@ -1260,7 +1222,7 @@ static int az_text_process(unsigned char *source, int length, int bp, char *bina } if (!size) { - size = az_text_size(modes, source, reduced_length, gs1, set_gs1, eci, initial_mode, eci_latch, byte_counts); + size = az_text_size(modes, source, reduced_length, fncs, eci, initial_mode, eci_latch, byte_counts); if (size == 0 || bp + size > AZTEC_BIN_CAPACITY) { return ZINT_ERROR_TOO_LONG; } @@ -1342,7 +1304,7 @@ static int az_text_process(unsigned char *source, int length, int bp, char *bina } if (modes[i] == AZ_P || (modes[i] & AZ_PS)) { - if (gs1 && source[i] == '\x1D') { + if (fncs[i] && source[i] == '\x1D') { bp = z_bin_append_posn(0, 5 + 3, binary_string, bp); /* FLG(0) = FNC1 */ } else { bp = z_bin_append_posn(AztecChar[AZ_P][source[i]], 5, binary_string, bp); @@ -1371,23 +1333,85 @@ static int az_text_process(unsigned char *source, int length, int bp, char *bina /* Call `az_text_process()` for each segment */ static int az_text_process_segs(struct zint_symbol *symbol, struct zint_seg segs[], const int seg_count, int bp, - char binary_string[], const int gs1, const int gs1_bp, int *data_length) { + char binary_string[], const int gs1, int *data_length) { int i; char current_mode = AZ_U; + int have_extra_escapes = 0; + int position_fnc1 = 0; const int fast_encode = symbol->input_mode & FAST_MODE; + const int extra_escape_mode = symbol->input_mode & EXTRA_ESCAPE_MODE; /* Raw text dealt with by `ZBarcode_Encode_Segs()`, except for `eci` feedback. Note not updating `eci` for GS1 mode as not converted */ const int content_segs = !gs1 && (symbol->output_options & BARCODE_CONTENT_SEGS); + if (gs1 || (extra_escape_mode + && (position_fnc1 = z_extra_escape_position_fnc1(segs[0].source, segs[0].length)))) { + unsigned char *source = segs[0].source; + const int length = segs[0].length; + if (position_fnc1) { + if (position_fnc1 == 4) { + bp = z_bin_append_posn(AztecChar[AZ_U][source[0]], 5, binary_string, bp); + } else if (position_fnc1 == 5) { + current_mode = AZ_D; + bp = z_bin_append_posn(30, 5, binary_string, bp); /* D/L */ + bp = z_bin_append_posn(AztecChar[AZ_D][source[0]], 4, binary_string, bp); + bp = z_bin_append_posn(AztecChar[AZ_D][source[1]], 4, binary_string, bp); + } + have_extra_escapes = 1; + } + if (gs1 || (position_fnc1 <= 4 && length > position_fnc1 && z_isdigit(source[position_fnc1]))) { + assert(current_mode == AZ_U); + /* Latch to D/L to save a bit */ + current_mode = AZ_D; + bp = z_bin_append_posn(30, 5, binary_string, bp); /* D/L */ + } + /* See if it's worthwhile latching to AZ_P */ + if (az_count_initial_puncts(source + position_fnc1, length - position_fnc1) >= 1 + !segs[0].eci) { + bp = z_bin_append_posn(AztecLatch[(int) current_mode][AZ_P], AztecLatchNum[(int) current_mode][AZ_P], + binary_string, bp); + bp = z_bin_append_posn(0, 5 + 3, binary_string, bp); /* FLG(0) = FNC1 */ + current_mode = AZ_P; + } else { + bp = z_bin_append_posn(0, 4 + (current_mode != AZ_D) + 5 + 3, binary_string, bp); /* P/S FLG(0) = FNC1 */ + } + } + for (i = 0; i < seg_count; i++) { int error_number; - if ((error_number = az_text_process(segs[i].source, segs[i].length, bp, binary_string, gs1, gs1_bp, - segs[i].eci, fast_encode, ¤t_mode, &bp, symbol->debug))) { - return error_number; + unsigned char *source = segs[i].source + position_fnc1; + int length = segs[i].length - position_fnc1; + if (length) { + unsigned char *src_buf = (unsigned char *) z_alloca(length + 1); + char *fncs = (char *) z_alloca(length); + + if (gs1) { + memset(fncs, 1, length); + } else { + memset(fncs, 0, length); + if (extra_escape_mode) { + if ((error_number = z_extra_escapes(symbol, source, &length, segs[i].eci, src_buf, fncs, + &have_extra_escapes))) { + return error_number; + } + if (have_extra_escapes) { + source = src_buf; + } + } + } + + if ((error_number = az_text_process(source, length, bp, binary_string, fncs, segs[i].eci, fast_encode, + ¤t_mode, &bp, symbol->debug))) { + return error_number; + } } - if (content_segs && segs[i].eci) { - z_ct_set_seg_eci(symbol, i, segs[i].eci); + if (content_segs) { + if (have_extra_escapes) { + z_ct_set_seg_extra_escapes_eci(symbol, i, segs[i].eci); + } else if (segs[i].eci) { + z_ct_set_seg_eci(symbol, i, segs[i].eci); + } } + position_fnc1 = 0; } *data_length = bp; @@ -1568,8 +1592,8 @@ INTERNAL int zint_aztec(struct zint_symbol *symbol, struct zint_seg segs[], cons int error_number; int compact, data_length, data_maxsize, codeword_size, adjusted_length; int bp = 0; - int gs1_bp = 0; const int gs1 = (symbol->input_mode & 0x07) == GS1_MODE; + const int extra_escape_mode = symbol->input_mode & EXTRA_ESCAPE_MODE; const int reader_init = symbol->output_options & READER_INIT; const int compact_loop_start = reader_init ? 1 : 4; /* Compact 2-4 excluded from Reader Initialisation */ const int debug_print = symbol->debug & ZINT_DEBUG_PRINT; @@ -1587,10 +1611,23 @@ INTERNAL int zint_aztec(struct zint_symbol *symbol, struct zint_seg segs[], cons if (gs1 && reader_init) { return z_errtxt(ZINT_ERROR_INVALID_OPTION, symbol, 501, "Cannot use Reader Initialisation in GS1 mode"); } + if (extra_escape_mode) { + if (symbol->symbology != BARCODE_AZTEC) { + return z_errtxt(ZINT_ERROR_INVALID_OPTION, symbol, 805, + "Can only use Extra Escape mode with non-variant Aztec Code"); + } + if (gs1) { + return z_errtxt(ZINT_ERROR_INVALID_OPTION, symbol, 806, "Cannot use Extra Escape mode in GS1 mode"); + } + if (reader_init) { + return z_errtxt(ZINT_ERROR_INVALID_OPTION, symbol, 807, "Cannot use Reader Initialisation in Extra Escape mode"); + } + } if (symbol->structapp.count) { /* Structured Append info as string + ID + + index + count + NUL */ unsigned char sa_src[1 + sizeof(symbol->structapp.id) + 1 + 1 + 1 + 1] = {0}; + char fncs[36] = {0}; /* ' ' + ID (32) + ' ' + 1 + 1 = 36 */ int sa_len; int id_len; @@ -1611,6 +1648,7 @@ INTERNAL int zint_aztec(struct zint_symbol *symbol, struct zint_seg segs[], cons return z_errtxt(ZINT_ERROR_INVALID_OPTION, symbol, 703, "Structured Append ID cannot contain spaces"); } + /* Starting with M/L U/L signals Structured Append */ bp = z_bin_append_posn(29, 5, binary_string, bp); /* M/L */ bp = z_bin_append_posn(29, 5, binary_string, bp); /* U/L */ @@ -1628,20 +1666,22 @@ INTERNAL int zint_aztec(struct zint_symbol *symbol, struct zint_seg segs[], cons symbol->structapp.count, symbol->structapp.index, symbol->structapp.id, sa_src); } - (void) az_text_process(sa_src, sa_len, bp, binary_string, 0 /*gs1*/, 0 /*gs1_bp*/, 0 /*eci*/, - 0 /*fast_encode*/, NULL /*p_current_mode*/, &bp, symbol->debug); + (void) az_text_process(sa_src, sa_len, bp, binary_string, fncs, 0 /*eci*/, 0 /*fast_encode*/, + NULL /*p_current_mode*/, &bp, symbol->debug); /* Will be in U/L due to uppercase A-Z index/count indicators at end */ - gs1_bp = bp; /* Initial FNC1 (FLG0) position */ } - if ((error_number = az_text_process_segs(symbol, segs, seg_count, bp, binary_string, gs1, gs1_bp, - &data_length))) { - assert(error_number == ZINT_ERROR_TOO_LONG || error_number == ZINT_ERROR_MEMORY); + if ((error_number = az_text_process_segs(symbol, segs, seg_count, bp, binary_string, gs1, &data_length))) { + assert(error_number == ZINT_ERROR_TOO_LONG || error_number == ZINT_ERROR_MEMORY + || error_number == ZINT_ERROR_INVALID_DATA || error_number == ZINT_ERROR_INVALID_OPTION); if (error_number == ZINT_ERROR_TOO_LONG) { return z_errtxt(error_number, symbol, 502, "Input too long, requires too many codewords (maximum " AZ_BIN_CAP_CWDS_S ")"); } - return z_errtxt(error_number, symbol, 804, "Insufficient memory for optimized encodation"); + if (error_number == ZINT_ERROR_MEMORY) { + return z_errtxt(error_number, symbol, 804, "Insufficient memory for optimized encodation"); + } + return error_number; /* EXTRA_ESCAPE_MODE errors, `errtxt` set */ } assert(data_length > 0); /* Suppress clang-tidy warning: clang-analyzer-core.UndefinedBinaryOperatorResult */ @@ -1859,7 +1899,6 @@ INTERNAL int zint_aztec(struct zint_symbol *symbol, struct zint_seg segs[], cons break; case 12: if (!zint_rs_uint_init_gf(&rs_uint, 0x1069, 4095)) { /* Can fail on malloc() */ - /* Note using AUSPOST error nos range as out of 50x ones & 51x taken by CODEONE */ return z_errtxt(ZINT_ERROR_MEMORY, symbol, 700, "Insufficient memory for Reed-Solomon log tables"); } zint_rs_uint_init_code(&rs_uint, ecc_blocks, 1); @@ -1880,6 +1919,12 @@ INTERNAL int zint_aztec(struct zint_symbol *symbol, struct zint_seg segs[], cons bit_pattern[i] = adjusted_string[total_bits - i - 1]; } +#ifdef ZINT_TEST + if (symbol->debug & ZINT_DEBUG_TEST) { + z_debug_test_codeword_dump(symbol, ZCUCP(bit_pattern), total_bits); + } +#endif + /* Now add the symbol descriptor */ memset(desc_data, 0, 4); memset(desc_ecc, 0, 6); diff --git a/backend/code128_based.c b/backend/code128_based.c index 88532deb..44719002 100644 --- a/backend/code128_based.c +++ b/backend/code128_based.c @@ -49,7 +49,7 @@ static int nve18_or_ean14(struct zint_symbol *symbol, const unsigned char source }; const int idx = data_len == 17; unsigned char ean128_equiv[23]; - int i, zeroes; + int i; unsigned char have_check_digit = '\0'; unsigned char check_digit; int error_number; @@ -79,10 +79,8 @@ static int nve18_or_ean14(struct zint_symbol *symbol, const unsigned char source length--; } - zeroes = data_len - length; memcpy(ean128_equiv, prefix[idx][!(symbol->input_mode & GS1PARENS_MODE)], 4); - memset(ean128_equiv + 4, '0', zeroes); - memcpy(ean128_equiv + 4 + zeroes, source, length); + z_zero_fill(source, length, ean128_equiv + 4, data_len); check_digit = (unsigned char) zint_gs1_check_digit(ean128_equiv + 4, data_len); if (have_check_digit && have_check_digit != check_digit) { diff --git a/backend/common.c b/backend/common.c index 8b626baf..a4db539d 100644 --- a/backend/common.c +++ b/backend/common.c @@ -81,6 +81,20 @@ INTERNAL int z_chr_cnt(const unsigned char source[], const int length, const uns return count; } +/* Zero-fill `dest` buffer, appending `source'. Returns no. of zeroes added */ +INTERNAL int z_zero_fill(const unsigned char source[], const int length, unsigned char *dest, const int dest_length) { + const int zeroes = dest_length - length; + if (zeroes >= 0) { + if (zeroes > 0) { + memset(dest, '0', zeroes); + } + memcpy(dest + zeroes, source, length); + } else { + memcpy(dest, source, length); + } + return zeroes; +} + /* Flag table for `is_chr()` and `z_not_sane()` */ #define IS_CLS_F (IS_CLI_F | IS_SIL_F) static const unsigned short flags[256] = { @@ -776,14 +790,38 @@ INTERNAL int z_utf8_to_unicode(struct zint_symbol *symbol, const unsigned char s return 0; } -/* Process `source` for manual FNC1 extra escape sequences, placing result in `dest` with result length in `p_len`, - and setting `fncs` with found FNC1s. `dest` & `fncs` must be at least `length` in size. `eci` is checked to be - ASCII-compatible (UTF-8 & single-byte ECIs, excl. Binary 899). On error sets `errtxt` & returns error no. */ -INTERNAL int z_extra_escapes(struct zint_symbol *symbol, const unsigned char source[], const int length, - const int eci, unsigned char dest[], char *fncs, int *p_len) { +/* Check if `source` starts with manual FNC1 in 1st or 2nd position, returning length of extra escape sequence if so, + else 0 */ +INTERNAL int z_extra_escape_position_fnc1(const unsigned char source[], const int length) { + if (length >= 3) { + if (source[0] == '\\' && source[1] == '^' && source[2] == '1') { + return 3; + } + if (length >= 4) { + if (z_isalpha(source[0]) && source[1] == '\\' && source[2] == '^' && source[3] == '1') { + return 4; + } + if (length >= 5) { + if (z_isdigit(source[0]) && z_isdigit(source[1]) && source[2] == '\\' && source[3] == '^' + && source[4] == '1') { + return 5; + } + } + } + } + return 0; +} + +/* Process `source` for extra escape sequences, placing result in `dest`, updating `p_length`, and setting `fncs` with + any found FNC1s. Sets `p_have_extra_escapes` if any sequences found. `eci` is checked to be ASCII-compatible (UTF-8 + & single-byte ECIs, excl. Binary 899). On error sets `errtxt` & returns error no. */ +INTERNAL int z_extra_escapes(struct zint_symbol *symbol, const unsigned char source[], int *p_length, const int eci, + unsigned char *dest, char *fncs, int *p_have_extra_escapes) { + const int length = *p_length; int i, j = 0; + if (eci == 20 || eci == 25 || eci >= 28) { - return z_errtxt(ZINT_ERROR_INVALID_OPTION, symbol, 716, "Extra escape mode requires ASCII-compatible ECI"); + return z_errtxt(ZINT_ERROR_INVALID_OPTION, symbol, 716, "Extra Escape mode requires ASCII-compatible ECI"); } for (i = 0; i < length; i++) { if (source[i] == '\\' && i + 2 < length && source[i + 1] == '^') { @@ -806,7 +844,12 @@ INTERNAL int z_extra_escapes(struct zint_symbol *symbol, const unsigned char sou dest[j++] = source[i]; } } - *p_len = j; + if (j != length) { + assert(j > 0 && j < length); + dest[j] = '\0'; + *p_length = j; + *p_have_extra_escapes = 1; + } return 0; } @@ -1029,7 +1072,6 @@ INTERNAL void z_ct_set_seg_extra_escapes_eci(struct zint_symbol *symbol, const i int i, j = 0; unsigned char *source; int length; - const int no_fnc1_position_check = seg_idx != 0 || eci != 0; assert(symbol->content_segs); assert(seg_idx >= 0 && seg_idx < symbol->content_seg_count); @@ -1047,7 +1089,7 @@ INTERNAL void z_ct_set_seg_extra_escapes_eci(struct zint_symbol *symbol, const i /* Drop second '^' */ } else { /* source[i + 2] == '1' FNC1 */ /* Do not emit if FNC1 in 1st/2nd position */ - if (no_fnc1_position_check || j > 2 || (j == 1 && !z_isalpha(source[0])) + if (seg_idx != 0 || j > 2 || (j == 1 && !z_isalpha(source[0])) || (j == 2 && (!z_isdigit(source[0]) || !z_isdigit(source[1]))) ) { source[j++] = '\x1D'; /* GS */ } diff --git a/backend/common.h b/backend/common.h index 91286870..2573a5e6 100644 --- a/backend/common.h +++ b/backend/common.h @@ -167,6 +167,9 @@ INTERNAL void z_to_upper(unsigned char source[], const int length); /* Returns the number of times a character `ch` occurs in `source` */ INTERNAL int z_chr_cnt(const unsigned char source[], const int length, const unsigned char ch); +/* Zero-fill `dest` buffer, appending `source'. Returns no. of zeroes added */ +INTERNAL int z_zero_fill(const unsigned char source[], const int length, unsigned char *dest, const int dest_length); + /* `z_is_chr()` & `z_not_sane()` flags */ #define IS_SPC_F 0x0001 /* Space */ #define IS_HSH_F 0x0002 /* Hash sign # */ @@ -308,11 +311,15 @@ INTERNAL int z_utf8_to_unicode(struct zint_symbol *symbol, const unsigned char s int *length, const int disallow_4byte); -/* Process `source` for manual FNC1 extra escape sequences, placing result in `dest` with result length in `p_len`, - and setting `fncs` with found FNC1s. `dest` & `fncs` must be at least `length` in size. `eci` is checked to be - ASCII-compatible (UTF-8 & single-byte ECIs, excl. Binary 899). On error sets `errtxt` & returns error no. */ -INTERNAL int z_extra_escapes(struct zint_symbol *symbol, const unsigned char source[], const int length, - const int eci, unsigned char dest[], char *fncs, int *p_len); +/* Check if `source` starts with manual FNC1 in 1st or 2nd position, returning length of extra escape sequence if so, + else 0 */ +INTERNAL int z_extra_escape_position_fnc1(const unsigned char source[], const int length); + +/* Process `source` for extra escape sequences, placing result in `dest`, updating `p_length`, and setting `fncs` with + any found FNC1s. Sets `p_have_extra_escapes` if any sequences found. `eci` is checked to be ASCII-compatible (UTF-8 + & single-byte ECIs, excl. Binary 899). On error sets `errtxt` & returns error no. */ +INTERNAL int z_extra_escapes(struct zint_symbol *symbol, const unsigned char source[], int *p_length, const int eci, + unsigned char *dest, char *fncs, int *p_have_extra_escapes); /* Treats source as ISO/IEC 8859-1 and copies into `symbol->text`, converting to UTF-8. Control chars (incl. DEL) and diff --git a/backend/dmatrix.c b/backend/dmatrix.c index bc8c81da..6297ca15 100644 --- a/backend/dmatrix.c +++ b/backend/dmatrix.c @@ -1662,6 +1662,7 @@ static int dm_encode_segs(struct zint_symbol *symbol, struct zint_seg segs[], co int tp = 0; int in_macro = 0; int have_extra_escapes = 0; + int position_fnc1 = 0; int tot_length = 0, b256_have_fnc1 = 0; const struct zint_seg *last_seg = &segs[seg_count - 1]; /* gs1 flag values: 0: no GS1, 1: GS1 with FNC1 serparator, 2: GS separator */ @@ -1737,16 +1738,29 @@ static int dm_encode_segs(struct zint_symbol *symbol, struct zint_seg segs[], co if (extra_escape_mode && (symbol->symbology != BARCODE_DATAMATRIX || gs1)) { if (symbol->symbology != BARCODE_DATAMATRIX) { - return z_errtxt(ZINT_ERROR_INVALID_OPTION, symbol, 843, - "Can only use extra escape mode with non-variant Data Matrix"); + return z_errtxt(ZINT_ERROR_INVALID_OPTION, symbol, 846, + "Can only use Extra Escape mode with non-variant Data Matrix"); } - return z_errtxt(ZINT_ERROR_INVALID_OPTION, symbol, 844, "Cannot use extra escape mode in GS1 mode"); + return z_errtxt(ZINT_ERROR_INVALID_OPTION, symbol, 844, "Cannot use Extra Escape mode in GS1 mode"); } if (gs1) { - target[tp++] = 232; + target[tp++] = 232; /* FNC1 */ if (debug_print) fputs("FN1 ", stdout); - } /* FNC1 */ + } else if (extra_escape_mode) { + if ((position_fnc1 = z_extra_escape_position_fnc1(segs[0].source, segs[0].length))) { + if (position_fnc1 == 4) { + target[tp++] = segs[0].source[0] + 1; + if (debug_print) fputs("EEA ", stdout); + } else if (position_fnc1 == 5) { + target[tp++] = z_to_int(segs[0].source, 2) + 130; + if (debug_print) fputs("EED ", stdout); + } + target[tp++] = 232; /* FNC1 */ + if (debug_print) fputs("FN1 ", stdout); + have_extra_escapes = 1; + } + } if (symbol->output_options & READER_INIT) { if (gs1) { @@ -1756,6 +1770,9 @@ static int dm_encode_segs(struct zint_symbol *symbol, struct zint_seg segs[], co return z_errtxt(ZINT_ERROR_INVALID_OPTION, symbol, 727, "Cannot have Structured Append and Reader Initialisation at the same time"); } + if (extra_escape_mode) { + return z_errtxt(ZINT_ERROR_INVALID_OPTION, symbol, 847, "Cannot use Reader Initialisation in Extra Escape mode"); + } target[tp++] = 234; /* Reader Programming */ if (debug_print) fputs("RP ", stdout); } @@ -1785,8 +1802,6 @@ static int dm_encode_segs(struct zint_symbol *symbol, struct zint_seg segs[], co for (i = 0; i < seg_count; i++) { const unsigned char *source; - unsigned char *src_buf; - char *fncs; int length; int src_inc = 0, len_dec = 0; int b256_end = 0, c40_end = 0; @@ -1798,75 +1813,72 @@ static int dm_encode_segs(struct zint_symbol *symbol, struct zint_seg segs[], co len_dec += 2; /* Remove RS + EOT from end */ } } - source = segs[i].source + src_inc; - length = segs[i].length - len_dec; + source = segs[i].source + src_inc + position_fnc1; + length = segs[i].length - len_dec - position_fnc1; - src_buf = (unsigned char *) z_alloca(length + 1); - fncs = (char *) z_alloca(length); + if (length) { + unsigned char *src_buf = (unsigned char *) z_alloca(length + 1); + char *fncs = (char *) z_alloca(length); - if (gs1) { - memset(fncs, gs1 == 1, length); - } else { - memset(fncs, 0, length); - if (extra_escape_mode) { - int len; - if ((error_number = z_extra_escapes(symbol, source, length, segs[i].eci, src_buf, fncs, &len))) { - return error_number; - } - if (len != length) { - assert(len < length); - length = len; - assert(length > 0); - src_buf[length] = '\0'; - source = src_buf; - have_extra_escapes = 1; - } - } - } - - if (mailmark) { - assert(seg_count == 1); - assert(length >= 45); - c40_end = 45; /* Min */ - /* Allow specifying greater than 45 */ - if (have_c40 && (symbol->option_1 == 0 || symbol->option_1 > 45)) { - c40_end = symbol->option_1 > 0 && symbol->option_1 < length ? symbol->option_1 : length; - } - /* `DM_C40_START` trumps `DM_B256_START` */ - } else if (have_c40) { - if (symbol->option_1 == 0) { - c40_end = length; - } else if (symbol->option_1 < tot_length) { - c40_end = 0; + if (gs1) { + memset(fncs, gs1 == 1, length); } else { - c40_end = symbol->option_1 - tot_length < length ? symbol->option_1 - tot_length : length; - } - } else if (have_b256) { - if (b256_have_fnc1) { - b256_end = 0; - } else { - int b256_len; - if (symbol->option_1 == 0) { - b256_end = length; - } else if (symbol->option_1 < tot_length) { - b256_end = 0; - } else { - b256_end = symbol->option_1 - tot_length < length ? symbol->option_1 - tot_length : length; - } - /* Stop at first FNC1 */ - b256_len = b256_end; - for (b256_end = 0; b256_end < b256_len; b256_end++) { - if (fncs[b256_end] && source[b256_end] == '\x1D') { - break; + memset(fncs, 0, length); + if (extra_escape_mode) { + if ((error_number = z_extra_escapes(symbol, source, &length, segs[i].eci, src_buf, fncs, + &have_extra_escapes))) { + return error_number; + } + if (have_extra_escapes) { + source = src_buf; } } - b256_have_fnc1 = b256_end != b256_len; } - } - if ((error_number = dm_encode(symbol, source, length, segs[i].eci, i + 1 == seg_count, fncs, b256_end, - c40_end, target, &tp))) { - assert(error_number >= ZINT_ERROR); - return error_number; + + if (mailmark) { + assert(seg_count == 1); + assert(length >= 45); + c40_end = 45; /* Min */ + /* Allow specifying greater than 45 */ + if (have_c40 && (symbol->option_1 == 0 || symbol->option_1 > 45)) { + c40_end = symbol->option_1 > 0 && symbol->option_1 < length ? symbol->option_1 : length; + } + /* `DM_C40_START` trumps `DM_B256_START` */ + } else if (have_c40) { + if (symbol->option_1 == 0) { + c40_end = length; + } else if (symbol->option_1 < tot_length) { + c40_end = 0; + } else { + c40_end = symbol->option_1 - tot_length < length ? symbol->option_1 - tot_length : length; + } + } else if (have_b256) { + if (b256_have_fnc1) { + b256_end = 0; + } else { + int b256_len; + if (symbol->option_1 == 0) { + b256_end = length; + } else if (symbol->option_1 < tot_length) { + b256_end = 0; + } else { + b256_end = symbol->option_1 - tot_length < length ? symbol->option_1 - tot_length : length; + } + /* Stop at first FNC1 */ + b256_len = b256_end; + for (b256_end = 0; b256_end < b256_len; b256_end++) { + if (fncs[b256_end] && source[b256_end] == '\x1D') { + break; + } + } + b256_have_fnc1 = b256_end != b256_len; + } + } + if ((error_number = dm_encode(symbol, source, length, segs[i].eci, i + 1 == seg_count, fncs, b256_end, + c40_end, target, &tp))) { + assert(error_number >= ZINT_ERROR); + return error_number; + } } if (content_segs) { if (have_extra_escapes) { @@ -1876,6 +1888,7 @@ static int dm_encode_segs(struct zint_symbol *symbol, struct zint_seg segs[], co } } tot_length += length; + position_fnc1 = 0; } *p_binlen = tp; diff --git a/backend/library.c b/backend/library.c index 48feefb1..d71f1d96 100644 --- a/backend/library.c +++ b/backend/library.c @@ -367,7 +367,8 @@ static int supports_non_iso8859_1(const int symbology) { /* Returns 1 if `symbol` can process EXTRA_ESCAPE_MODE */ static int supports_extra_escape_mode(const struct zint_symbol *const symbol) { return symbol->symbology == BARCODE_CODE128 - || (symbol->symbology == BARCODE_DATAMATRIX && (symbol->input_mode & 0x07) != GS1_MODE); + || ((symbol->symbology == BARCODE_AZTEC || symbol->symbology == BARCODE_DATAMATRIX) + && (symbol->input_mode & 0x07) != GS1_MODE); } /* Returns 1 if symbology supports HRT */ @@ -752,12 +753,15 @@ static int escape_char_process(struct zint_symbol *symbol, const unsigned char * case '\\': if (escaped_string) escaped_string[out_posn] = vals[z_posn(escs, ch)]; in_posn += 2; + /* Note: if given double backslash following by caret "\\^" then will be passed through as "\^", + i.e. the start of an extra escape sequence, avoiding the check below, so each symbology needs + to also check themselves */ break; case '^': /* Symbology specific */ if (!extra_escape_mode || !can_extra_escape) { if (!extra_escape_mode) { return z_errtxt(ZINT_ERROR_INVALID_DATA, symbol, 798, - "Escape '\\^' only valid in extra escape mode"); + "Escape '\\^' only valid in Extra Escape mode"); } return z_errtxt(ZINT_ERROR_INVALID_DATA, symbol, 213, "Extra escape '\\^' not valid for this symbology and/or input mode"); diff --git a/backend/medical.c b/backend/medical.c index b1fc9979..9a8764d7 100644 --- a/backend/medical.c +++ b/backend/medical.c @@ -200,7 +200,7 @@ INTERNAL int zint_pharma_two(struct zint_symbol *symbol, unsigned char source[], /* Italian Pharmacode */ INTERNAL int zint_code32(struct zint_symbol *symbol, unsigned char source[], int length) { static const unsigned char TABELLA[] = "0123456789BCDFGHJKLMNPQRSTUVWXYZ"; - int i, zeroes, checksum, checkpart, checkdigit; + int i, checksum, checkpart, checkdigit; unsigned char local_source[10], risultante[7]; unsigned int pharmacode, devisor; int codeword[6]; @@ -217,9 +217,7 @@ INTERNAL int zint_code32(struct zint_symbol *symbol, unsigned char source[], int } /* Add leading zeros as required */ - zeroes = 8 - length; - memset(local_source, '0', zeroes); - memcpy(local_source + zeroes, source, length); + z_zero_fill(source, length, local_source, 8); /* Calculate the check digit */ checksum = 0; @@ -297,7 +295,7 @@ INTERNAL int zint_code32(struct zint_symbol *symbol, unsigned char source[], int IFA-Info_Check_Digit_Calculations_PZN_PPN_UDI_EN.pdf */ INTERNAL int zint_pzn(struct zint_symbol *symbol, unsigned char source[], int length) { - int i, error_number, zeroes; + int i, error_number; int count, check_digit; unsigned char have_check_digit = '\0'; unsigned char local_source[1 + 8]; /* '-' prefix + 8 digits */ @@ -318,10 +316,7 @@ INTERNAL int zint_pzn(struct zint_symbol *symbol, unsigned char source[], int le } local_source[0] = '-'; - zeroes = 7 - pzn7 - length + 1; - for (i = 1; i < zeroes; i++) - local_source[i] = '0'; - memcpy(local_source + zeroes, source, length); + z_zero_fill(source, length, local_source + 1, 7 - pzn7); count = 0; for (i = 1; i < 8 - pzn7; i++) { diff --git a/backend/postal.c b/backend/postal.c index 5962428b..b8e6a938 100644 --- a/backend/postal.c +++ b/backend/postal.c @@ -181,7 +181,7 @@ INTERNAL int zint_koreapost(struct zint_symbol *symbol, unsigned char source[], {'1','3','1','5','0','6','1','3','1','3'}, {'0','4','1','3','1','3','1','7','1','3'}, { "17131713" }, { "13171713" } }; - int total, i, check, zeroes, error_number = 0; + int total, i, check, error_number = 0; unsigned char local_source[8]; char dest[80]; char *d = dest; @@ -195,9 +195,7 @@ INTERNAL int zint_koreapost(struct zint_symbol *symbol, unsigned char source[], return z_errtxtf(ZINT_ERROR_INVALID_DATA, symbol, 485, "Invalid character at position %d in input (digits only)", i); } - zeroes = 6 - length; - memset(local_source, '0', zeroes); - memcpy(local_source + zeroes, source, length); + z_zero_fill(source, length, local_source, 6); total = 0; for (i = 0; i < 6; i++) { diff --git a/backend/rss.c b/backend/rss.c index 0d5e60c6..42b399ba 100644 --- a/backend/rss.c +++ b/backend/rss.c @@ -181,11 +181,8 @@ static uint64_t dbar_to_uint64(const unsigned char source[], const int length) { /* Helper to construct zero-padded GTIN14 with check digit, returning `buf` for convenience */ static unsigned char *dbar_gtin14(const unsigned char *source, const int length, unsigned char buf[14]) { - const int zeroes = 13 - length; + const int zeroes = z_zero_fill(source, length, buf, 13); - assert(zeroes >= 0); - memset(buf, '0', zeroes); - memcpy(buf + zeroes, source, length); buf[zeroes + length] = zint_gs1_check_digit(buf, 13); return buf; diff --git a/backend/tests/test_auspost.c b/backend/tests/test_auspost.c index 957a3e79..27090f8c 100644 --- a/backend/tests/test_auspost.c +++ b/backend/tests/test_auspost.c @@ -41,25 +41,25 @@ static void test_large(const testCtx *const p_ctx) { int ret; int expected_rows; int expected_width; + const char *expected_errtxt; }; /* s/\/\*[ 0-9]*\*\//\=printf("\/\*%3d*\/", line(".") - line("'<")): */ static const struct item data[] = { - /* 0*/ { BARCODE_AUSPOST, "1", 23, 0, 3, 133 }, - /* 1*/ { BARCODE_AUSPOST, "1", 24, ZINT_ERROR_TOO_LONG, -1, -1 }, - /* 2*/ { BARCODE_AUSPOST, "1", 18, 0, 3, 133 }, - /* 3*/ { BARCODE_AUSPOST, "1", 19, ZINT_ERROR_TOO_LONG, -1, -1 }, - /* 4*/ { BARCODE_AUSPOST, "1", 16, 0, 3, 103 }, - /* 5*/ { BARCODE_AUSPOST, "1", 17, ZINT_ERROR_TOO_LONG, -1, -1 }, - /* 6*/ { BARCODE_AUSPOST, "1", 13, 0, 3, 103 }, - /* 7*/ { BARCODE_AUSPOST, "1", 14, ZINT_ERROR_TOO_LONG, -1, -1 }, - /* 8*/ { BARCODE_AUSPOST, "1", 8, 0, 3, 73 }, - /* 9*/ { BARCODE_AUSPOST, "1", 9, ZINT_ERROR_TOO_LONG, -1, -1 }, - /* 10*/ { BARCODE_AUSREPLY, "1", 8, 0, 3, 73 }, - /* 11*/ { BARCODE_AUSREPLY, "1", 9, ZINT_ERROR_TOO_LONG, -1, -1 }, - /* 12*/ { BARCODE_AUSROUTE, "1", 8, 0, 3, 73 }, - /* 13*/ { BARCODE_AUSROUTE, "1", 9, ZINT_ERROR_TOO_LONG, -1, -1 }, - /* 14*/ { BARCODE_AUSREDIRECT, "1", 8, 0, 3, 73 }, - /* 15*/ { BARCODE_AUSREDIRECT, "1", 9, ZINT_ERROR_TOO_LONG, -1, -1 }, + /* 0*/ { BARCODE_AUSPOST, "1", 23, 0, 3, 133, "" }, + /* 1*/ { BARCODE_AUSPOST, "1", 24, ZINT_ERROR_TOO_LONG, -1, -1, "Error 401: Input length 24 too long (maximum 23)" }, + /* 2*/ { BARCODE_AUSPOST, "1", 8, 0, 3, 73, "" }, + /* 3*/ { BARCODE_AUSPOST, "1", 9, 0, 3, 103, "" }, + /* 4*/ { BARCODE_AUSPOST, "1", 13, 0, 3, 103, "" }, + /* 5*/ { BARCODE_AUSPOST, "1", 16, 0, 3, 103, "" }, + /* 6*/ { BARCODE_AUSPOST, "1", 17, 0, 3, 133, "" }, + /* 7*/ { BARCODE_AUSPOST, "1", 18, 0, 3, 133, "" }, + /* 8*/ { BARCODE_AUSPOST, "1", 22, 0, 3, 133, "" }, + /* 9*/ { BARCODE_AUSREPLY, "1", 8, 0, 3, 73, "" }, + /* 10*/ { BARCODE_AUSREPLY, "1", 9, ZINT_ERROR_TOO_LONG, -1, -1, "Error 403: Input length 9 too long (maximum 8)" }, + /* 11*/ { BARCODE_AUSROUTE, "1", 8, 0, 3, 73, "" }, + /* 12*/ { BARCODE_AUSROUTE, "1", 9, ZINT_ERROR_TOO_LONG, -1, -1, "Error 403: Input length 9 too long (maximum 8)" }, + /* 13*/ { BARCODE_AUSREDIRECT, "1", 8, 0, 3, 73, "" }, + /* 14*/ { BARCODE_AUSREDIRECT, "1", 9, ZINT_ERROR_TOO_LONG, -1, -1, "Error 403: Input length 9 too long (maximum 8)" }, }; const int data_size = ARRAY_SIZE(data); int i, length, ret; @@ -77,17 +77,25 @@ static void test_large(const testCtx *const p_ctx) { assert_nonnull(symbol, "Symbol not created\n"); testUtilStrCpyRepeat(data_buf, data[i].pattern, data[i].length); - assert_equal(data[i].length, (int) strlen(data_buf), "i:%d length %d != strlen(data_buf) %d\n", i, data[i].length, (int) strlen(data_buf)); + assert_equal(data[i].length, (int) strlen(data_buf), "i:%d length %d != strlen(data_buf) %d\n", + i, data[i].length, (int) strlen(data_buf)); - length = testUtilSetSymbol(symbol, data[i].symbology, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, -1, -1, -1 /*output_options*/, data_buf, data[i].length, debug); + length = testUtilSetSymbol(symbol, data[i].symbology, -1 /*input_mode*/, -1 /*eci*/, + -1 /*option_1*/, -1, -1, -1 /*output_options*/, + data_buf, data[i].length, debug); ret = ZBarcode_Encode(symbol, TCU(data_buf), length); - assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); + assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", + i, ret, data[i].ret, symbol->errtxt); if (ret < ZINT_ERROR) { - assert_equal(symbol->rows, data[i].expected_rows, "i:%d symbol->rows %d != %d\n", i, symbol->rows, data[i].expected_rows); - assert_equal(symbol->width, data[i].expected_width, "i:%d symbol->width %d != %d\n", i, symbol->width, data[i].expected_width); + assert_equal(symbol->rows, data[i].expected_rows, "i:%d symbol->rows %d != %d\n", + i, symbol->rows, data[i].expected_rows); + assert_equal(symbol->width, data[i].expected_width, "i:%d symbol->width %d != %d\n", + i, symbol->width, data[i].expected_width); } + assert_zero(strcmp(symbol->errtxt, data[i].expected_errtxt), "i:%d strcmp(%s, %s) != 0\n", + i, symbol->errtxt, data[i].expected_errtxt); ZBarcode_Delete(symbol); } @@ -108,30 +116,54 @@ static void test_hrt(const testCtx *const p_ctx) { }; /* s/\/\*[ 0-9]*\*\//\=printf("\/\*%3d*\/", line(".") - line("'<")): */ static const struct item data[] = { - /* 0*/ { BARCODE_AUSPOST, -1, "12345678", "", "" }, /* None */ + /* 0*/ { BARCODE_AUSPOST, -1, "12345678", "", "" }, /* 1*/ { BARCODE_AUSPOST, BARCODE_CONTENT_SEGS, "12345678", "", "1112345678" }, - /* 2*/ { BARCODE_AUSPOST, -1, "1234567890123", "", "" }, /* None */ - /* 3*/ { BARCODE_AUSPOST, BARCODE_CONTENT_SEGS, "1234567890123", "", "591234567890123" }, - /* 4*/ { BARCODE_AUSPOST, -1, "1234567890123456", "", "" }, /* None */ - /* 5*/ { BARCODE_AUSPOST, BARCODE_CONTENT_SEGS, "1234567890123456", "", "591234567890123456" }, - /* 6*/ { BARCODE_AUSPOST, -1, "123456789012345678", "", "" }, /* None */ - /* 7*/ { BARCODE_AUSPOST, BARCODE_CONTENT_SEGS, "123456789012345678", "", "62123456789012345678" }, - /* 8*/ { BARCODE_AUSPOST, -1, "12345678901234567890123", "", "" }, /* None */ - /* 9*/ { BARCODE_AUSPOST, BARCODE_CONTENT_SEGS, "12345678901234567890123", "", "6212345678901234567890123" }, - /* 10*/ { BARCODE_AUSREPLY, -1, "1234567", "", "" }, /* None */ - /* 11*/ { BARCODE_AUSREPLY, BARCODE_CONTENT_SEGS, "1234567", "", "4501234567" }, - /* 12*/ { BARCODE_AUSREPLY, -1, "12345678", "", "" }, /* None */ - /* 13*/ { BARCODE_AUSREPLY, BARCODE_CONTENT_SEGS, "12345678", "", "4512345678" }, - /* 14*/ { BARCODE_AUSROUTE, -1, "123456", "", "" }, /* None */ - /* 15*/ { BARCODE_AUSROUTE, BARCODE_CONTENT_SEGS, "123456", "", "8700123456" }, - /* 16*/ { BARCODE_AUSROUTE, -1, "12345678", "", "" }, /* None */ - /* 17*/ { BARCODE_AUSROUTE, BARCODE_CONTENT_SEGS, "12345678", "", "8712345678" }, - /* 18*/ { BARCODE_AUSROUTE, -1, "12345", "", "" }, /* None */ - /* 19*/ { BARCODE_AUSROUTE, BARCODE_CONTENT_SEGS, "12345", "", "8700012345" }, - /* 20*/ { BARCODE_AUSREDIRECT, -1, "12345678", "", "" }, /* None */ - /* 21*/ { BARCODE_AUSREDIRECT, BARCODE_CONTENT_SEGS, "12345678", "", "9212345678" }, - /* 22*/ { BARCODE_AUSREDIRECT, -1, "1234", "", "" }, /* None */ - /* 23*/ { BARCODE_AUSREDIRECT, BARCODE_CONTENT_SEGS, "1234", "", "9200001234" }, + /* 2*/ { BARCODE_AUSPOST, -1, "1", "", "" }, + /* 3*/ { BARCODE_AUSPOST, BARCODE_CONTENT_SEGS, "1", "", "1100000001" }, + /* 4*/ { BARCODE_AUSPOST, -1, "12", "", "" }, + /* 5*/ { BARCODE_AUSPOST, BARCODE_CONTENT_SEGS, "12", "", "1100000012" }, + /* 6*/ { BARCODE_AUSPOST, -1, "1234567", "", "" }, + /* 7*/ { BARCODE_AUSPOST, BARCODE_CONTENT_SEGS, "1234567", "", "1101234567" }, + /* 8*/ { BARCODE_AUSPOST, -1, "0", "", "" }, + /* 9*/ { BARCODE_AUSPOST, BARCODE_CONTENT_SEGS, "0", "", "0000000000" }, + /* 10*/ { BARCODE_AUSPOST, -1, "123456789", "", "" }, + /* 11*/ { BARCODE_AUSPOST, BARCODE_CONTENT_SEGS, "123456789", "", "59123456789" }, + /* 12*/ { BARCODE_AUSPOST, -1, "1234567890123", "", "" }, + /* 13*/ { BARCODE_AUSPOST, BARCODE_CONTENT_SEGS, "1234567890123", "", "591234567890123" }, + /* 14*/ { BARCODE_AUSPOST, -1, "12345678D0123", "", "" }, + /* 15*/ { BARCODE_AUSPOST, BARCODE_CONTENT_SEGS, "12345678D0123", "", "5912345678D0123" }, + /* 16*/ { BARCODE_AUSPOST, -1, "00000000D0123", "", "" }, + /* 17*/ { BARCODE_AUSPOST, BARCODE_CONTENT_SEGS, "00000000D0123", "", "0000000000D0123" }, + /* 18*/ { BARCODE_AUSPOST, -1, "1234567890123456", "", "" }, + /* 19*/ { BARCODE_AUSPOST, BARCODE_CONTENT_SEGS, "1234567890123456", "", "591234567890123456" }, + /* 20*/ { BARCODE_AUSPOST, -1, "0000000090123456", "", "" }, + /* 21*/ { BARCODE_AUSPOST, BARCODE_CONTENT_SEGS, "0000000090123456", "", "000000000090123456" }, + /* 22*/ { BARCODE_AUSPOST, -1, "123456789012345678", "", "" }, + /* 23*/ { BARCODE_AUSPOST, BARCODE_CONTENT_SEGS, "123456789012345678", "", "62123456789012345678" }, + /* 24*/ { BARCODE_AUSPOST, -1, "12345678901234567D", "", "" }, + /* 25*/ { BARCODE_AUSPOST, BARCODE_CONTENT_SEGS, "12345678901234567D", "", "6212345678901234567D" }, + /* 26*/ { BARCODE_AUSPOST, -1, "12345678901234567890123", "", "" }, + /* 27*/ { BARCODE_AUSPOST, BARCODE_CONTENT_SEGS, "12345678901234567890123", "", "6212345678901234567890123" }, + /* 28*/ { BARCODE_AUSPOST, -1, "00000000901234567890123", "", "" }, + /* 29*/ { BARCODE_AUSPOST, BARCODE_CONTENT_SEGS, "00000000901234567890123", "", "0000000000901234567890123" }, + /* 30*/ { BARCODE_AUSREPLY, -1, "1234567", "", "" }, + /* 31*/ { BARCODE_AUSREPLY, BARCODE_CONTENT_SEGS, "1234567", "", "4501234567" }, + /* 32*/ { BARCODE_AUSREPLY, -1, "12345678", "", "" }, + /* 33*/ { BARCODE_AUSREPLY, BARCODE_CONTENT_SEGS, "12345678", "", "4512345678" }, + /* 34*/ { BARCODE_AUSREPLY, -1, "00000", "", "" }, + /* 35*/ { BARCODE_AUSREPLY, BARCODE_CONTENT_SEGS, "00000", "", "4500000000" }, + /* 36*/ { BARCODE_AUSROUTE, -1, "123456", "", "" }, + /* 37*/ { BARCODE_AUSROUTE, BARCODE_CONTENT_SEGS, "123456", "", "8700123456" }, + /* 38*/ { BARCODE_AUSROUTE, -1, "12345678", "", "" }, + /* 39*/ { BARCODE_AUSROUTE, BARCODE_CONTENT_SEGS, "12345678", "", "8712345678" }, + /* 40*/ { BARCODE_AUSROUTE, -1, "12345", "", "" }, + /* 41*/ { BARCODE_AUSROUTE, BARCODE_CONTENT_SEGS, "12345", "", "8700012345" }, + /* 42*/ { BARCODE_AUSREDIRECT, -1, "12345678", "", "" }, + /* 43*/ { BARCODE_AUSREDIRECT, BARCODE_CONTENT_SEGS, "12345678", "", "9212345678" }, + /* 44*/ { BARCODE_AUSREDIRECT, -1, "1234", "", "" }, + /* 45*/ { BARCODE_AUSREDIRECT, BARCODE_CONTENT_SEGS, "1234", "", "9200001234" }, + /* 46*/ { BARCODE_AUSREDIRECT, -1, "0", "", "" }, + /* 47*/ { BARCODE_AUSREDIRECT, BARCODE_CONTENT_SEGS, "0", "", "9200000000" }, }; const int data_size = ARRAY_SIZE(data); int i, length, ret; @@ -193,31 +225,39 @@ static void test_input(const testCtx *const p_ctx) { }; /* s/\/\*[ 0-9]*\*\//\=printf("\/\*%3d*\/", line(".") - line("'<")): */ static const struct item data[] = { - /* 0*/ { BARCODE_AUSPOST, "12345678", 0, 3, 73, "" }, - /* 1*/ { BARCODE_AUSPOST, "1234567A", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 405: Invalid character at position 8 in DPID (first 8 characters) (digits only)" }, - /* 2*/ { BARCODE_AUSPOST, "0000000A", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 405: Invalid character at position 8 in DPID (first 8 characters) (digits only)" }, - /* 3*/ { BARCODE_AUSPOST, "12345678ABcd#", 0, 3, 103, "" }, - /* 4*/ { BARCODE_AUSPOST, "12345678ABcd!", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 404: Invalid character at position 13 in input (alphanumerics, space and \"#\" only)" }, - /* 5*/ { BARCODE_AUSPOST, "00000000ABcd!", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 404: Invalid character at position 13 in input (alphanumerics, space and \"#\" only)" }, - /* 6*/ { BARCODE_AUSPOST, "12345678ABcd#", 0, 3, 103, "" }, - /* 7*/ { BARCODE_AUSPOST, "1234567890123456", 0, 3, 103, "" }, - /* 8*/ { BARCODE_AUSPOST, "123456789012345A", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 402: Invalid character at position 16 in input (digits only for FCC 59 length 16)" }, - /* 9*/ { BARCODE_AUSPOST, "000000009012345A", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 402: Invalid character at position 16 in input (digits only for FCC 59 length 16)" }, - /* 10*/ { BARCODE_AUSPOST, "12345678ABCDefgh #", 0, 3, 133, "" }, /* Length 18 */ - /* 11*/ { BARCODE_AUSPOST, "12345678901234567890123", 0, 3, 133, "" }, - /* 12*/ { BARCODE_AUSPOST, "1234567890123456789012A", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 406: Invalid character at position 23 in input (digits only for FCC 62 length 23)" }, - /* 13*/ { BARCODE_AUSPOST, "0000000090123456789012A", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 406: Invalid character at position 23 in input (digits only for FCC 62 length 23)" }, - /* 14*/ { BARCODE_AUSPOST, "1234567", ZINT_ERROR_TOO_LONG, -1, -1, "Error 401: Input length 7 wrong (8, 13, 16, 18 or 23 characters required)" }, /* No leading zeroes added */ - /* 15*/ { BARCODE_AUSREPLY, "12345678", 0, 3, 73, "" }, - /* 16*/ { BARCODE_AUSREPLY, "1234567", 0, 3, 73, "" }, /* Leading zeroes added */ - /* 17*/ { BARCODE_AUSREPLY, "123456789", ZINT_ERROR_TOO_LONG, -1, -1, "Error 403: Input length 9 too long (maximum 8)" }, - /* 18*/ { BARCODE_AUSROUTE, "123456", 0, 3, 73, "" }, - /* 19*/ { BARCODE_AUSROUTE, "12345", 0, 3, 73, "" }, - /* 20*/ { BARCODE_AUSROUTE, "123456789", ZINT_ERROR_TOO_LONG, -1, -1, "Error 403: Input length 9 too long (maximum 8)" }, - /* 21*/ { BARCODE_AUSREDIRECT, "1234", 0, 3, 73, "" }, - /* 22*/ { BARCODE_AUSREDIRECT, "123", 0, 3, 73, "" }, - /* 23*/ { BARCODE_AUSREDIRECT, "0", 0, 3, 73, "" }, - /* 24*/ { BARCODE_AUSREDIRECT, "123456789", ZINT_ERROR_TOO_LONG, -1, -1, "Error 403: Input length 9 too long (maximum 8)" }, + /* 0*/ { BARCODE_AUSPOST, "1", 0, 3, 73, "" }, /* Leading zeroes added */ + /* 1*/ { BARCODE_AUSPOST, "1234567", 0, 3, 73, "" }, + /* 2*/ { BARCODE_AUSPOST, "12345678", 0, 3, 73, "" }, + /* 3*/ { BARCODE_AUSPOST, "1234567A", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 405: Invalid character at position 8 in DPID (digits only for Standard Customer Barcode)" }, + /* 4*/ { BARCODE_AUSPOST, "123456789", 0, 3, 103, "" }, + /* 5*/ { BARCODE_AUSPOST, "1234567A9", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 402: Invalid character at position 8 in DPID (digits only)" }, + /* 6*/ { BARCODE_AUSPOST, "12345678A", 0, 3, 103, "" }, + /* 7*/ { BARCODE_AUSPOST, "12345678AB", 0, 3, 103, "" }, + /* 8*/ { BARCODE_AUSPOST, "12345678ABc", 0, 3, 103, "" }, + /* 9*/ { BARCODE_AUSPOST, "12345678ABcd", 0, 3, 103, "" }, + /* 10*/ { BARCODE_AUSPOST, "12345678ABcd#", 0, 3, 103, "" }, + /* 11*/ { BARCODE_AUSPOST, "12345678ABcd!", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 404: Invalid character at position 13 in input (alphanumerics, space and \"#\" only)" }, + /* 12*/ { BARCODE_AUSPOST, "1234567890123456", 0, 3, 103, "" }, /* Barcode 2 all-digits */ + /* 13*/ { BARCODE_AUSPOST, "12345678ABcd #", 0, 3, 133, "" }, /* Barcode 3 */ + /* 14*/ { BARCODE_AUSPOST, "123456789012345A", 0, 3, 133, "" }, /* Barcode 3 */ + /* 15*/ { BARCODE_AUSPOST, "12345678901234567", 0, 3, 133, "" }, + /* 16*/ { BARCODE_AUSPOST, "12345678901234567890123", 0, 3, 133, "" }, + /* 17*/ { BARCODE_AUSPOST, "1234567890123456789012A", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 407: Invalid character at position 23 in input (digits only for Customer Barcode 3 length 23)" }, + /* 18*/ { BARCODE_AUSPOST, "123456789012345678A", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 407: Invalid character at position 19 in input (digits only for Customer Barcode 3 length 19)" }, + /* 19*/ { BARCODE_AUSPOST, "12345678A0123456789012", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 407: Invalid character at position 9 in input (digits only for Customer Barcode 3 length 22)" }, + /* 20*/ { BARCODE_AUSREPLY, "12345678", 0, 3, 73, "" }, + /* 21*/ { BARCODE_AUSREPLY, "1234567", 0, 3, 73, "" }, /* Leading zeroes added */ + /* 22*/ { BARCODE_AUSREPLY, "123456789", ZINT_ERROR_TOO_LONG, -1, -1, "Error 403: Input length 9 too long (maximum 8)" }, + /* 23*/ { BARCODE_AUSREPLY, "12345A", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 406: Invalid character at position 6 in DPID (digits only)" }, + /* 24*/ { BARCODE_AUSROUTE, "123456", 0, 3, 73, "" }, + /* 25*/ { BARCODE_AUSROUTE, "12345", 0, 3, 73, "" }, + /* 26*/ { BARCODE_AUSROUTE, "123456789", ZINT_ERROR_TOO_LONG, -1, -1, "Error 403: Input length 9 too long (maximum 8)" }, + /* 27*/ { BARCODE_AUSROUTE, "1234567A", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 406: Invalid character at position 8 in DPID (digits only)" }, + /* 28*/ { BARCODE_AUSREDIRECT, "1234", 0, 3, 73, "" }, + /* 29*/ { BARCODE_AUSREDIRECT, "123", 0, 3, 73, "" }, + /* 30*/ { BARCODE_AUSREDIRECT, "0", 0, 3, 73, "" }, + /* 31*/ { BARCODE_AUSREDIRECT, "123456789", ZINT_ERROR_TOO_LONG, -1, -1, "Error 403: Input length 9 too long (maximum 8)" }, + /* 32*/ { BARCODE_AUSREDIRECT, "A", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 406: Invalid character at position 1 in DPID (digits only)" }, }; const int data_size = ARRAY_SIZE(data); int i, length, ret; @@ -237,22 +277,32 @@ static void test_input(const testCtx *const p_ctx) { symbol = ZBarcode_Create(); assert_nonnull(symbol, "Symbol not created\n"); - length = testUtilSetSymbol(symbol, data[i].symbology, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, -1, -1, -1 /*output_options*/, data[i].data, -1, debug); + length = testUtilSetSymbol(symbol, data[i].symbology, -1 /*input_mode*/, -1 /*eci*/, + -1 /*option_1*/, -1, -1, -1 /*output_options*/, + data[i].data, -1, debug); ret = ZBarcode_Encode(symbol, TCU(data[i].data), length); - assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); - assert_equal(symbol->errtxt[0] == '\0', ret == 0, "i:%d symbol->errtxt not %s (%s)\n", i, ret ? "set" : "empty", symbol->errtxt); - assert_zero(strcmp(symbol->errtxt, data[i].expected_errtxt), "i:%d strcmp(%s, %s) != 0\n", i, symbol->errtxt, data[i].expected_errtxt); + assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", + i, ret, data[i].ret, symbol->errtxt); + assert_equal(symbol->errtxt[0] == '\0', ret == 0, "i:%d symbol->errtxt not %s (%s)\n", + i, ret ? "set" : "empty", symbol->errtxt); + assert_zero(strcmp(symbol->errtxt, data[i].expected_errtxt), "i:%d strcmp(%s, %s) != 0\n", + i, symbol->errtxt, data[i].expected_errtxt); if (ret < ZINT_ERROR) { - assert_equal(symbol->rows, data[i].expected_rows, "i:%d symbol->rows %d != %d\n", i, symbol->rows, data[i].expected_rows); - assert_equal(symbol->width, data[i].expected_width, "i:%d symbol->width %d != %d\n", i, symbol->width, data[i].expected_width); + assert_equal(symbol->rows, data[i].expected_rows, "i:%d symbol->rows %d != %d\n", + i, symbol->rows, data[i].expected_rows); + assert_equal(symbol->width, data[i].expected_width, "i:%d symbol->width %d != %d\n", + i, symbol->width, data[i].expected_width); if (do_bwipp && testUtilCanBwipp(i, symbol, -1, -1, -1, debug)) { char modules_dump[4096]; - assert_notequal(testUtilModulesDump(symbol, modules_dump, sizeof(modules_dump)), -1, "i:%d testUtilModulesDump == -1\n", i); - ret = testUtilBwipp(i, symbol, -1, -1, -1, data[i].data, length, NULL, cmp_buf, sizeof(cmp_buf), NULL); - assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret); + assert_notequal(testUtilModulesDump(symbol, modules_dump, sizeof(modules_dump)), -1, + "i:%d testUtilModulesDump == -1\n", i); + ret = testUtilBwipp(i, symbol, -1, -1, -1, data[i].data, length, NULL, cmp_buf, sizeof(cmp_buf), + NULL); + assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), + ret); ret = testUtilBwippCmp(symbol, cmp_msg, cmp_buf, modules_dump); assert_zero(ret, "i:%d %s testUtilBwippCmp %d != 0 %s\n actual: %s\nexpected: %s\n", @@ -494,7 +544,9 @@ static void test_fuzz(const testCtx *const p_ctx) { symbol = ZBarcode_Create(); assert_nonnull(symbol, "Symbol not created\n"); - length = testUtilSetSymbol(symbol, data[i].symbology, -1 /*input_mode*/, -1 /*eci*/, -1 /*option_1*/, -1, -1, -1 /*output_options*/, data[i].data, data[i].length, debug); + length = testUtilSetSymbol(symbol, data[i].symbology, -1 /*input_mode*/, -1 /*eci*/, + -1 /*option_1*/, -1, -1, -1 /*output_options*/, + data[i].data, data[i].length, debug); ret = ZBarcode_Encode(symbol, TCU(data[i].data), length); assert_equal(ret, data[i].ret, "i:%d ZBarcode_Encode ret %d != %d (%s)\n", i, ret, data[i].ret, symbol->errtxt); diff --git a/backend/tests/test_aztec.c b/backend/tests/test_aztec.c index 831d77bf..f36aea58 100644 --- a/backend/tests/test_aztec.c +++ b/backend/tests/test_aztec.c @@ -193,7 +193,7 @@ static void test_large(const testCtx *const p_ctx) { char data_buf[ZINT_MAX_DATA_LEN]; - /* Only do ZXing-C++ test if asked, too slow otherwise */ + /* Only do zxing-cpp test if asked, too slow otherwise */ int do_zxingcpp = (debug & ZINT_DEBUG_TEST_ZXINGCPP) && testUtilHaveZXingCPPDecoder(); testStartSymbol(p_ctx->func_name, &symbol); @@ -420,6 +420,7 @@ static void test_options(const testCtx *const p_ctx) { struct item { int symbology; int input_mode; + int eci; int output_options; int option_1; int option_2; @@ -437,62 +438,75 @@ static void test_options(const testCtx *const p_ctx) { }; /* s/\/\*[ 0-9]*\*\//\=printf("\/\*%3d*\/", line(".") - line("'<")): */ static const struct item data[] = { - /* 0*/ { BARCODE_AZTEC, -1, -1, -1, -1, -1, { 0, 0, "" }, "1234567", 0, 15, 15, "", (47 << 8) | 4, 1, 0 }, - /* 1*/ { BARCODE_AZTEC, -1, -1, -1, -1, ZINT_AZTEC_FULL, { 0, 0, "" }, "1234567", 0, 19, 19, "", (57 << 8) | 4, 5, ZINT_AZTEC_FULL }, - /* 2*/ { BARCODE_AZTEC, -1, -1, -1, -1, -1, { 0, 0, "" }, "1234567890", 0, 15, 15, "", (35 << 8) | 3, 1, 0 }, - /* 3*/ { BARCODE_AZTEC, -1, -1, 1, -1, -1, { 0, 0, "" }, "1234567", 0, 15, 15, "", (47 << 8) | 4, 1, 0 }, - /* 4*/ { BARCODE_AZTEC, -1, -1, 1, -1, -1, { 0, 0, "" }, "1234567890", 0, 15, 15, "", (35 << 8) | 3, 1, 0 }, - /* 5*/ { BARCODE_AZTEC, -1, -1, 1, -1, -1, { 0, 0, "" }, "12345678901", 0, 15, 15, "", (29 << 8) | 2, 1, 0 }, - /* 6*/ { BARCODE_AZTEC, -1, -1, 1, -1, -1, { 0, 0, "" }, "123456789012", 0, 15, 15, "", (29 << 8) | 2, 1, 0 }, - /* 7*/ { BARCODE_AZTEC, -1, -1, 1, -1, -1, { 0, 0, "" }, "1234567890123456", 0, 15, 15, "", (11 << 8) | 1, 1, 0 }, - /* 8*/ { BARCODE_AZTEC, -1, -1, 1, -1, -1, { 0, 0, "" }, "123456789012345678", 0, 19, 19, "", (60 << 8) | 4, 2, 0 }, - /* 9*/ { BARCODE_AZTEC, -1, -1, 1, -1, ZINT_AZTEC_FULL, { 0, 0, "" }, "123456789012345678", 0, 19, 19, "", (23 << 8) | 2, 5, ZINT_AZTEC_FULL }, - /* 10*/ { BARCODE_AZTEC, -1, -1, 1, -1, -1, { 0, 0, "" }, "1234567890123456789", 0, 19, 19, "", (57 << 8) | 4, 2, 0 }, - /* 11*/ { BARCODE_AZTEC, -1, -1, 2, -1, -1, { 0, 0, "" }, "1234567890", 0, 15, 15, "", (35 << 8) | 3, 1, 0 }, - /* 12*/ { BARCODE_AZTEC, -1, -1, 3, -1, -1, { 0, 0, "" }, "1234567890", 0, 19, 19, "", (72 << 8) | 4, 2, 0 }, - /* 13*/ { BARCODE_AZTEC, -1, -1, 3, -1, -1, { 0, 0, "" }, "12345678901", 0, 19, 19, "", (70 << 8) | 4, 2, 0 }, - /* 14*/ { BARCODE_AZTEC, -1, -1, 4, -1, -1, { 0, 0, "" }, "1234567890", 0, 19, 19, "", (72 << 8) | 4, 2, 0 }, - /* 15*/ { BARCODE_AZTEC, -1, -1, 5, -1, -1, { 0, 0, "" }, "1234567890", ZINT_WARN_INVALID_OPTION, 15, 15, "Warning 503: Error correction level '5' out of range (1 to 4), ignoring", (35 << 8) | 3, 1, 0 }, - /* 16*/ { BARCODE_AZTEC, -1, -1, -1, 1, -1, { 0, 0, "" }, "12345678901234567890", ZINT_ERROR_TOO_LONG, -1, -1, "Error 505: Input too long for Version 1, requires 15 codewords (maximum 14)", -1, 1, 0 }, - /* 17*/ { BARCODE_AZTEC, -1, -1, -1, 5, -1, { 0, 0, "" }, "1234567890", 0, 19, 19, "", (47 << 8) | 4, 5, 0 }, - /* 18*/ { BARCODE_AZTEC, -1, -1, -1, 5, -1, { 0, 0, "" }, "12345678901", 0, 19, 19, "", (42 << 8) | 3, 5, 0 }, - /* 19*/ { BARCODE_AZTEC, -1, -1, -1, 5, -1, { 0, 0, "" }, "1234567890123456", 0, 19, 19, "", (28 << 8) | 2, 5, 0 }, - /* 20*/ { BARCODE_AZTEC, -1, -1, -1, 5, -1, { 0, 0, "" }, "123456789012345678901", 0, 19, 19, "", (14 << 8) | 1, 5, 0 }, - /* 21*/ { BARCODE_AZTEC, -1, -1, -1, 5, -1, { 0, 0, "" }, "123456789012345678901234", ZINT_WARN_NONCOMPLIANT, 19, 19, "Warning 708: Number of ECC codewords 4 less than 5% + 3 of data codewords 17", (4 << 8) | 0, 5, 0 }, - /* 22*/ { BARCODE_AZTEC, -1, -1, -1, 5, -1, { 0, 0, "" }, "1234567890123456780123456", ZINT_WARN_NONCOMPLIANT, 19, 19, "Warning 706: Number of ECC codewords 3 at minimum", -1, 5, 0 }, - /* 23*/ { BARCODE_AZTEC, -1, -1, -1, 36, -1, { 0, 0, "" }, "1234567890", 0, 151, 151, "", (99 << 8) | 4, 36, 0 }, - /* 24*/ { BARCODE_AZTEC, -1, -1, -1, 37, -1, { 0, 0, "" }, "1234567890", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 510: Version '37' out of range (1 to 36)", -1, 37, 0 }, - /* 25*/ { BARCODE_AZTEC, -1, -1, -1, -2, -1, { 0, 0, "" }, "1234567890", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 510: Version '-2' out of range (1 to 36)", -1, -2, 0 }, - /* 26*/ { BARCODE_AZTEC, GS1_MODE, READER_INIT, -1, -1, -1, { 0, 0, "" }, "[91]A", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 501: Cannot use Reader Initialisation in GS1 mode", -1, 0, 0 }, - /* 27*/ { BARCODE_AZTEC, GS1_MODE, -1, -1, -1, -1, { 0, 0, "" }, "[91]A", 0, 15, 15, "", (47 << 8) | 4, 1, 0 }, - /* 28*/ { BARCODE_AZTEC, GS1_MODE | GS1PARENS_MODE, -1, -1, -1, -1, { 0, 0, "" }, "(91)A", 0, 15, 15, "", (47 << 8) | 4, 1, 0 }, - /* 29*/ { BARCODE_AZTEC, GS1_MODE | GS1PARENS_MODE, -1, -1, -1, -1, { 0, 0, "" }, "(91)(", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 253: Malformed AI in input (brackets don't match)", -1, 0, 0 }, - /* 30*/ { BARCODE_AZTEC, GS1_MODE | GS1PARENS_MODE, -1, -1, -1, -1, { 0, 0, "" }, "(91)\\(", 0, 15, 15, "", (47 << 8) | 4, 1, 0 }, /* Escaped parens now work without ESCAPE_MODE */ - /* 31*/ { BARCODE_AZTEC, GS1_MODE | ESCAPE_MODE | GS1PARENS_MODE, -1, -1, -1, -1, { 0, 0, "" }, "(91)\\(", 0, 15, 15, "", (47 << 8) | 4, 1, 0 }, - /* 32*/ { BARCODE_AZTEC, -1, READER_INIT, -1, 26, -1, { 0, 0, "" }, "A", 0, 109, 109, "", (99 << 8) | 4, 26, 0 }, /* 22 layers */ - /* 33*/ { BARCODE_AZTEC, -1, READER_INIT, -1, 27, -1, { 0, 0, "" }, "A", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 709: Version '27' out of range for Reader Initialisation symbols (maximum 26)", -1, 27, 0 }, /* 23 layers */ - /* 34*/ { BARCODE_AZTEC, -1, READER_INIT, 4, -1, -1, { 0, 0, "" }, "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377", ZINT_ERROR_TOO_LONG, -1, -1, "Error 506: Input too long for Reader Initialisation, requires 23 layers (maximum 22)", 4, 27, 0 }, /* 23 layers */ - /* 35*/ { BARCODE_AZTEC, -1, READER_INIT, -1, 1, -1, { 0, 0, "" }, "A", 0, 15, 15, "", (76 << 8) | 4, 1, 0 }, /* Compact 1 layer */ - /* 36*/ { BARCODE_AZTEC, -1, READER_INIT, -1, 3, -1, { 0, 0, "" }, "A", 0, 19, 19, "", (80 << 8) | 4, 5, 0 }, /* Compact 3 layers gets set to full 1 layer if READER_INIT set */ - /* 37*/ { BARCODE_AZTEC, -1, -1, 1, -1, -1, { 0, 0, "" }, "A", 0, 15, 15, "", (76 << 8) | 4, 1, 0 }, /* Compact 1 layer */ - /* 38*/ { BARCODE_AZTEC, -1, READER_INIT, 1, -1, -1, { 0, 0, "" }, "A", 0, 15, 15, "", (76 << 8) | 4, 1, 0 }, /* Still compact 1 layer if READER_INIT set */ - /* 39*/ { BARCODE_AZTEC, -1, READER_INIT, -1, -1, -1, { 0, 0, "" }, "A", 0, 15, 15, "", (76 << 8) | 4, 1, 0 }, /* Compact 1 layer */ - /* 40*/ { BARCODE_AZTEC, -1, READER_INIT, -1, -1, ZINT_AZTEC_FULL, { 0, 0, "" }, "A", 0, 19, 19, "", (80 << 8) | 4, 5, ZINT_AZTEC_FULL }, /* Full 1 layer */ - /* 41*/ { BARCODE_AZRUNE, -1, -1, -1, -1, -1, { 0, 0, "" }, "0001", ZINT_ERROR_TOO_LONG, -1, -1, "Error 507: Input length 4 too long (maximum 3)", -1, 0, 0 }, - /* 42*/ { BARCODE_AZRUNE, -1, -1, -1, -1, -1, { 0, 0, "" }, "A", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 508: Invalid character at position 1 in input (digits only)", -1, 0, 0 }, - /* 43*/ { BARCODE_AZRUNE, -1, -1, -1, -1, -1, { 0, 0, "" }, "256", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 509: Input value out of range (0 to 255)", -1, 0, 0 }, - /* 44*/ { BARCODE_AZTEC, -1, -1, -1, -1, -1, { 1, 2, "" }, "1234567890", 0, 19, 19, "", (65 << 8) | 4, 2, 0 }, - /* 45*/ { BARCODE_AZTEC, -1, -1, -1, -1, -1, { 1, 2, {'1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2'} }, "1234567890", 0, 23, 23, "", (41 << 8) | 3, 3, 0 }, - /* 46*/ { BARCODE_AZTEC, -1, -1, -1, -1, -1, { 1, 1, "" }, "1234567890", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 701: Structured Append count '1' out of range (2 to 26)", -1, 0, 0 }, - /* 47*/ { BARCODE_AZTEC, -1, -1, -1, -1, -1, { 0, 2, "" }, "1234567890", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 702: Structured Append index '0' out of range (1 to count 2)", -1, 0, 0 }, - /* 48*/ { BARCODE_AZTEC, -1, -1, -1, -1, -1, { 3, 2, "" }, "1234567890", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 702: Structured Append index '3' out of range (1 to count 2)", -1, 0, 0 }, - /* 49*/ { BARCODE_AZTEC, -1, -1, -1, -1, -1, { 1, 2, "A B" }, "1234567890", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 703: Structured Append ID cannot contain spaces", -1, 0, 0 }, - /* 50*/ { BARCODE_HIBC_AZTEC, -1, -1, -1, -1, -1, { 0, 0, "" }, "1234567890;", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 203: Invalid character at position 11 in input (alphanumerics, space and \"-.$/+%\" only)", -1, 0, 0 }, + /* 0*/ { BARCODE_AZTEC, -1, -1, -1, -1, -1, -1, { 0, 0, "" }, "1234567", 0, 15, 15, "", (47 << 8) | 4, 1, 0 }, + /* 1*/ { BARCODE_AZTEC, -1, -1, -1, -1, -1, ZINT_AZTEC_FULL, { 0, 0, "" }, "1234567", 0, 19, 19, "", (57 << 8) | 4, 5, ZINT_AZTEC_FULL }, + /* 2*/ { BARCODE_AZTEC, -1, -1, -1, -1, -1, -1, { 0, 0, "" }, "1234567890", 0, 15, 15, "", (35 << 8) | 3, 1, 0 }, + /* 3*/ { BARCODE_AZTEC, -1, -1, -1, 1, -1, -1, { 0, 0, "" }, "1234567", 0, 15, 15, "", (47 << 8) | 4, 1, 0 }, + /* 4*/ { BARCODE_AZTEC, -1, -1, -1, 1, -1, -1, { 0, 0, "" }, "1234567890", 0, 15, 15, "", (35 << 8) | 3, 1, 0 }, + /* 5*/ { BARCODE_AZTEC, -1, -1, -1, 1, -1, -1, { 0, 0, "" }, "12345678901", 0, 15, 15, "", (29 << 8) | 2, 1, 0 }, + /* 6*/ { BARCODE_AZTEC, -1, -1, -1, 1, -1, -1, { 0, 0, "" }, "123456789012", 0, 15, 15, "", (29 << 8) | 2, 1, 0 }, + /* 7*/ { BARCODE_AZTEC, -1, -1, -1, 1, -1, -1, { 0, 0, "" }, "1234567890123456", 0, 15, 15, "", (11 << 8) | 1, 1, 0 }, + /* 8*/ { BARCODE_AZTEC, -1, -1, -1, 1, -1, -1, { 0, 0, "" }, "123456789012345678", 0, 19, 19, "", (60 << 8) | 4, 2, 0 }, + /* 9*/ { BARCODE_AZTEC, -1, -1, -1, 1, -1, ZINT_AZTEC_FULL, { 0, 0, "" }, "123456789012345678", 0, 19, 19, "", (23 << 8) | 2, 5, ZINT_AZTEC_FULL }, + /* 10*/ { BARCODE_AZTEC, -1, -1, -1, 1, -1, -1, { 0, 0, "" }, "1234567890123456789", 0, 19, 19, "", (57 << 8) | 4, 2, 0 }, + /* 11*/ { BARCODE_AZTEC, -1, -1, -1, 2, -1, -1, { 0, 0, "" }, "1234567890", 0, 15, 15, "", (35 << 8) | 3, 1, 0 }, + /* 12*/ { BARCODE_AZTEC, -1, -1, -1, 3, -1, -1, { 0, 0, "" }, "1234567890", 0, 19, 19, "", (72 << 8) | 4, 2, 0 }, + /* 13*/ { BARCODE_AZTEC, -1, -1, -1, 3, -1, -1, { 0, 0, "" }, "12345678901", 0, 19, 19, "", (70 << 8) | 4, 2, 0 }, + /* 14*/ { BARCODE_AZTEC, -1, -1, -1, 4, -1, -1, { 0, 0, "" }, "1234567890", 0, 19, 19, "", (72 << 8) | 4, 2, 0 }, + /* 15*/ { BARCODE_AZTEC, -1, -1, -1, 5, -1, -1, { 0, 0, "" }, "1234567890", ZINT_WARN_INVALID_OPTION, 15, 15, "Warning 503: Error correction level '5' out of range (1 to 4), ignoring", (35 << 8) | 3, 1, 0 }, + /* 16*/ { BARCODE_AZTEC, -1, -1, -1, -1, 1, -1, { 0, 0, "" }, "12345678901234567890", ZINT_ERROR_TOO_LONG, -1, -1, "Error 505: Input too long for Version 1, requires 15 codewords (maximum 14)", -1, 1, 0 }, + /* 17*/ { BARCODE_AZTEC, -1, -1, -1, -1, 5, -1, { 0, 0, "" }, "1234567890", 0, 19, 19, "", (47 << 8) | 4, 5, 0 }, + /* 18*/ { BARCODE_AZTEC, -1, -1, -1, -1, 5, -1, { 0, 0, "" }, "12345678901", 0, 19, 19, "", (42 << 8) | 3, 5, 0 }, + /* 19*/ { BARCODE_AZTEC, -1, -1, -1, -1, 5, -1, { 0, 0, "" }, "1234567890123456", 0, 19, 19, "", (28 << 8) | 2, 5, 0 }, + /* 20*/ { BARCODE_AZTEC, -1, -1, -1, -1, 5, -1, { 0, 0, "" }, "123456789012345678901", 0, 19, 19, "", (14 << 8) | 1, 5, 0 }, + /* 21*/ { BARCODE_AZTEC, -1, -1, -1, -1, 5, -1, { 0, 0, "" }, "123456789012345678901234", ZINT_WARN_NONCOMPLIANT, 19, 19, "Warning 708: Number of ECC codewords 4 less than 5% + 3 of data codewords 17", (4 << 8) | 0, 5, 0 }, + /* 22*/ { BARCODE_AZTEC, -1, -1, -1, -1, 5, -1, { 0, 0, "" }, "1234567890123456780123456", ZINT_WARN_NONCOMPLIANT, 19, 19, "Warning 706: Number of ECC codewords 3 at minimum", -1, 5, 0 }, + /* 23*/ { BARCODE_AZTEC, -1, -1, -1, -1, 36, -1, { 0, 0, "" }, "1234567890", 0, 151, 151, "", (99 << 8) | 4, 36, 0 }, + /* 24*/ { BARCODE_AZTEC, -1, -1, -1, -1, 37, -1, { 0, 0, "" }, "1234567890", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 510: Version '37' out of range (1 to 36)", -1, 37, 0 }, + /* 25*/ { BARCODE_AZTEC, -1, -1, -1, -1, -2, -1, { 0, 0, "" }, "1234567890", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 510: Version '-2' out of range (1 to 36)", -1, -2, 0 }, + /* 26*/ { BARCODE_AZTEC, GS1_MODE, -1, READER_INIT, -1, -1, -1, { 0, 0, "" }, "[91]A", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 501: Cannot use Reader Initialisation in GS1 mode", -1, 0, 0 }, + /* 27*/ { BARCODE_AZTEC, GS1_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "[91]A", 0, 15, 15, "", (47 << 8) | 4, 1, 0 }, + /* 28*/ { BARCODE_AZTEC, GS1_MODE | GS1PARENS_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "(91)A", 0, 15, 15, "", (47 << 8) | 4, 1, 0 }, + /* 29*/ { BARCODE_AZTEC, GS1_MODE | GS1PARENS_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "(91)(", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 253: Malformed AI in input (brackets don't match)", -1, 0, 0 }, + /* 30*/ { BARCODE_AZTEC, GS1_MODE | GS1PARENS_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "(91)\\(", 0, 15, 15, "", (47 << 8) | 4, 1, 0 }, /* Escaped parens now work without ESCAPE_MODE */ + /* 31*/ { BARCODE_AZTEC, GS1_MODE | ESCAPE_MODE | GS1PARENS_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "(91)\\(", 0, 15, 15, "", (47 << 8) | 4, 1, 0 }, + /* 32*/ { BARCODE_AZTEC, -1, -1, READER_INIT, -1, 26, -1, { 0, 0, "" }, "A", 0, 109, 109, "", (99 << 8) | 4, 26, 0 }, /* 22 layers */ + /* 33*/ { BARCODE_AZTEC, -1, -1, READER_INIT, -1, 27, -1, { 0, 0, "" }, "A", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 709: Version '27' out of range for Reader Initialisation symbols (maximum 26)", -1, 27, 0 }, /* 23 layers */ + /* 34*/ { BARCODE_AZTEC, -1, -1, READER_INIT, 4, -1, -1, { 0, 0, "" }, "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377", ZINT_ERROR_TOO_LONG, -1, -1, "Error 506: Input too long for Reader Initialisation, requires 23 layers (maximum 22)", 4, 27, 0 }, /* 23 layers */ + /* 35*/ { BARCODE_AZTEC, -1, -1, READER_INIT, -1, 1, -1, { 0, 0, "" }, "A", 0, 15, 15, "", (76 << 8) | 4, 1, 0 }, /* Compact 1 layer */ + /* 36*/ { BARCODE_AZTEC, -1, -1, READER_INIT, -1, 3, -1, { 0, 0, "" }, "A", 0, 19, 19, "", (80 << 8) | 4, 5, 0 }, /* Compact 3 layers gets set to full 1 layer if READER_INIT set */ + /* 37*/ { BARCODE_AZTEC, -1, -1, -1, 1, -1, -1, { 0, 0, "" }, "A", 0, 15, 15, "", (76 << 8) | 4, 1, 0 }, /* Compact 1 layer */ + /* 38*/ { BARCODE_AZTEC, -1, -1, READER_INIT, 1, -1, -1, { 0, 0, "" }, "A", 0, 15, 15, "", (76 << 8) | 4, 1, 0 }, /* Still compact 1 layer if READER_INIT set */ + /* 39*/ { BARCODE_AZTEC, -1, -1, READER_INIT, -1, -1, -1, { 0, 0, "" }, "A", 0, 15, 15, "", (76 << 8) | 4, 1, 0 }, /* Compact 1 layer */ + /* 40*/ { BARCODE_AZTEC, -1, -1, READER_INIT, -1, -1, ZINT_AZTEC_FULL, { 0, 0, "" }, "A", 0, 19, 19, "", (80 << 8) | 4, 5, ZINT_AZTEC_FULL }, /* Full 1 layer */ + /* 41*/ { BARCODE_AZRUNE, -1, -1, -1, -1, -1, -1, { 0, 0, "" }, "0001", ZINT_ERROR_TOO_LONG, -1, -1, "Error 507: Input length 4 too long (maximum 3)", -1, 0, 0 }, + /* 42*/ { BARCODE_AZRUNE, -1, -1, -1, -1, -1, -1, { 0, 0, "" }, "A", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 508: Invalid character at position 1 in input (digits only)", -1, 0, 0 }, + /* 43*/ { BARCODE_AZRUNE, -1, -1, -1, -1, -1, -1, { 0, 0, "" }, "256", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 509: Input value out of range (0 to 255)", -1, 0, 0 }, + /* 44*/ { BARCODE_AZTEC, -1, -1, -1, -1, -1, -1, { 1, 2, "" }, "1234567890", 0, 19, 19, "", (65 << 8) | 4, 2, 0 }, + /* 45*/ { BARCODE_AZTEC, -1, -1, -1, -1, -1, -1, { 1, 2, {'1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9','0','1','2'} }, "1234567890", 0, 23, 23, "", (41 << 8) | 3, 3, 0 }, + /* 46*/ { BARCODE_AZTEC, -1, -1, -1, -1, -1, -1, { 1, 1, "" }, "1234567890", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 701: Structured Append count '1' out of range (2 to 26)", -1, 0, 0 }, + /* 47*/ { BARCODE_AZTEC, -1, -1, -1, -1, -1, -1, { 0, 2, "" }, "1234567890", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 702: Structured Append index '0' out of range (1 to count 2)", -1, 0, 0 }, + /* 48*/ { BARCODE_AZTEC, -1, -1, -1, -1, -1, -1, { 3, 2, "" }, "1234567890", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 702: Structured Append index '3' out of range (1 to count 2)", -1, 0, 0 }, + /* 49*/ { BARCODE_AZTEC, -1, -1, -1, -1, -1, -1, { 1, 2, "A B" }, "1234567890", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 703: Structured Append ID cannot contain spaces", -1, 0, 0 }, + /* 50*/ { BARCODE_AZTEC, EXTRA_ESCAPE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "12\\^112", 0, 15, 15, "", (47 << 8) | 4, 1, 0 }, + /* 51*/ { BARCODE_AZTEC, EXTRA_ESCAPE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "12\\^A12", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 717: Unrecognized extra escape \"\\^A\"", -1, 0, 0 }, + /* 52*/ { BARCODE_AZTEC, GS1_MODE | EXTRA_ESCAPE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "[91]A", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 806: Cannot use Extra Escape mode in GS1 mode", -1, 0, 0 }, + /* 53*/ { BARCODE_AZTEC, EXTRA_ESCAPE_MODE, -1, READER_INIT, -1, -1, -1, { 0, 0, "" }, "[91]A", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 807: Cannot use Reader Initialisation in Extra Escape mode", -1, 0, 0 }, + /* 54*/ { BARCODE_AZTEC, EXTRA_ESCAPE_MODE, 20, -1, -1, -1, -1, { 0, 0, "" }, "DE\\^1\\^^XY", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 716: Extra Escape mode requires ASCII-compatible ECI", -1, 0, 0 }, + /* 55*/ { BARCODE_HIBC_AZTEC, -1, -1, -1, -1, -1, -1, { 0, 0, "" }, "1234567890;", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 203: Invalid character at position 11 in input (alphanumerics, space and \"-.$/+%\" only)", -1, 0, 0 }, + /* 56*/ { BARCODE_HIBC_AZTEC, EXTRA_ESCAPE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "1234567890", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 805: Can only use Extra Escape mode with non-variant Aztec Code", -1, 0, 0 }, }; const int data_size = ARRAY_SIZE(data); int i, length, ret; struct zint_symbol *symbol = NULL; + char escaped[8192]; + char cmp_buf[32768]; + char cmp_msg[8192]; + + /* Only do zxing-cpp test if asked, too slow otherwise */ + int do_zxingcpp = (debug & ZINT_DEBUG_TEST_ZXINGCPP) && testUtilHaveZXingCPPDecoder(); + testStartSymbol(p_ctx->func_name, &symbol); for (i = 0; i < data_size; i++) { @@ -502,7 +516,7 @@ static void test_options(const testCtx *const p_ctx) { symbol = ZBarcode_Create(); assert_nonnull(symbol, "Symbol not created\n"); - length = testUtilSetSymbol(symbol, data[i].symbology, data[i].input_mode, -1 /*eci*/, + length = testUtilSetSymbol(symbol, data[i].symbology, data[i].input_mode, data[i].eci, data[i].option_1, data[i].option_2, data[i].option_3, data[i].output_options, data[i].data, -1, debug); if (data[i].structapp.count) { @@ -530,6 +544,25 @@ static void test_options(const testCtx *const p_ctx) { assert_equal(symbol->option_3, data[i].expected_option_3, "i:%d symbol->option_3 %d != %d\n", i, symbol->option_3, data[i].expected_option_3); + if (ret < ZINT_ERROR) { + if (do_zxingcpp && testUtilCanZXingCPP(i, symbol, data[i].data, length, debug)) { + int cmp_len, ret_len; + char modules_dump[22801 + 1]; + assert_notequal(testUtilModulesDump(symbol, modules_dump, sizeof(modules_dump)), -1, + "i:%d testUtilModulesDump == -1\n", i); + ret = testUtilZXingCPP(i, symbol, data[i].data, length, modules_dump, 1 /*zxingcpp_cmp*/, + cmp_buf, sizeof(cmp_buf), &cmp_len); + assert_zero(ret, "i:%d %s testUtilZXingCPP ret %d != 0\n", + i, testUtilBarcodeName(symbol->symbology), ret); + + ret = testUtilZXingCPPCmp(symbol, cmp_msg, cmp_buf, cmp_len, data[i].data, length, NULL /*primary*/, + escaped, &ret_len); + assert_zero(ret, "i:%d %s testUtilZXingCPPCmp %d != 0 %s\n actual: %.*s\nexpected: %.*s\n", + i, testUtilBarcodeName(symbol->symbology), ret, cmp_msg, cmp_len, cmp_buf, ret_len, + escaped); + } + } + ZBarcode_Delete(symbol); } @@ -1135,98 +1168,98 @@ static void test_encode(const testCtx *const p_ctx) { "000011110110101110000111110100000111001011000" }, /* 17*/ { BARCODE_AZTEC, GS1_MODE, 3, -1, -1, -1, -1, { 0, 0, "" }, "[01]04610044273252[21]LRFX)k\350\255\362\357\027\231: S\224\237\303\035\207", -1, 0, 19, 19, 1, 899, "BWIP-JS #354 1st example", + /*190*/ { BARCODE_AZTEC, DATA_MODE, -1, -1, -1, 2, -1, { 0, 0, "" }, "j>\350\255\362\357\027\231: S\224\237\303\035\207", -1, 0, 19, 19, 1, 899, "BWIP-JS #354 1st example", "1101010010011101000" "1100111010011110011" "1001101000000110101" @@ -6552,7 +6653,7 @@ static void test_encode(const testCtx *const p_ctx) { "1110110001011011110" "0001111011111000101" }, - /*187*/ { BARCODE_AZTEC, FAST_MODE, -1, -1, -1, 2, -1, { 0, 0, "" }, "j>\350\255\362\357\027\231: S\224\237\303\035\207", -1, 0, 19, 19, 0, 899, "BWIP-JS #354 1st example; BWIPP different encodation, 3 codewords shorter (see above)", + /*191*/ { BARCODE_AZTEC, FAST_MODE, -1, -1, -1, 2, -1, { 0, 0, "" }, "j>\350\255\362\357\027\231: S\224\237\303\035\207", -1, 0, 19, 19, 0, 899, "BWIP-JS #354 1st example; BWIPP different encodation, 3 codewords shorter (see above)", "1111001111001101001" "1011001011010001101" "0010010101011000011" @@ -6573,7 +6674,7 @@ static void test_encode(const testCtx *const p_ctx) { "0000111100101101101" "1011101101111100011" }, - /*188*/ { BARCODE_AZTEC, DATA_MODE, -1, -1, -1, 2, -1, { 0, 0, "" }, "\035\316\244. D\004\275\031}\244\311\030\035>t", -1, 0, 19, 19, 1, 899, "BWIP-JS #354 2nd example", + /*192*/ { BARCODE_AZTEC, DATA_MODE, -1, -1, -1, 2, -1, { 0, 0, "" }, "\035\316\244. D\004\275\031}\244\311\030\035>t", -1, 0, 19, 19, 1, 899, "BWIP-JS #354 2nd example", "1110110111000100010" "1110111001100010100" "1010011100101001011" @@ -6594,7 +6695,7 @@ static void test_encode(const testCtx *const p_ctx) { "0111010000000000111" "0001000001010001010" }, - /*189*/ { BARCODE_AZTEC, FAST_MODE, -1, -1, -1, 2, -1, { 0, 0, "" }, "\035\316\244. D\004\275\031}\244\311\030\035>t", -1, 0, 19, 19, 0, 899, "BWIP-JS #354 2nd example; BWIPP same as above", + /*193*/ { BARCODE_AZTEC, FAST_MODE, -1, -1, -1, 2, -1, { 0, 0, "" }, "\035\316\244. D\004\275\031}\244\311\030\035>t", -1, 0, 19, 19, 0, 899, "BWIP-JS #354 2nd example; BWIPP same as above", "1110001010011101111" "1001010010100100110" "1100010011111011111" @@ -6615,7 +6716,647 @@ static void test_encode(const testCtx *const p_ctx) { "0001011110011100101" "0000001100111001111" }, - /*190*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "0", -1, 0, 11, 11, 1, 1, "ISO/IEC 24778:2008 Figure A.1 (1st)", + /*194*/ { BARCODE_AZTEC, EXTRA_ESCAPE_MODE, 0, -1, -1, 2, -1, { 0, 0, "" }, "DE\\^1\\^1XY", -1, 0, 19, 19, 1, 3, "", + "0011011011000000101" + "1001000001100111010" + "1000110010011111110" + "0110100010110110100" + "1011110100100010001" + "0010111111111110111" + "0001010000000101100" + "0011110111110101110" + "0111010100010111011" + "0001010101010111001" + "0001010100010101110" + "0100010111110101001" + "0001010000000101100" + "0011011111111111000" + "0111000001011000111" + "0001110110100100111" + "0001000101001100100" + "1001010011101100011" + "0001011111101011110" + }, + /*195*/ { BARCODE_AZTEC, FAST_MODE | EXTRA_ESCAPE_MODE, 0, -1, -1, 2, -1, { 0, 0, "" }, "DE\\^1\\^1XY", -1, 0, 19, 19, 1, 3, "", + "0011011011000000101" + "1001000001100111010" + "1000110010011111110" + "0110100010110110100" + "1011110100100010001" + "0010111111111110111" + "0001010000000101100" + "0011110111110101110" + "0111010100010111011" + "0001010101010111001" + "0001010100010101110" + "0100010111110101001" + "0001010000000101100" + "0011011111111111000" + "0111000001011000111" + "0001110110100100111" + "0001000101001100100" + "1001010011101100011" + "0001011111101011110" + }, + /*196*/ { BARCODE_AZTEC, EXTRA_ESCAPE_MODE, 0, -1, -1, 1, -1, { 0, 0, "" }, "\\^1\\^^\\^1", -1, 0, 15, 15, 0, 3, "BWIPP: different encodation, same no. of codewords (does ML after FNC1 in 1st position)", + "000001101000001" + "001101110001001" + "001100000110101" + "011111111111101" + "001100000001100" + "001101111101010" + "011101000101111" + "000101010101010" + "010101000101001" + "111101111101110" + "011100000001111" + "100111111111110" + "100011000110010" + "110110001011011" + "101110000011010" + }, + /*197*/ { BARCODE_AZTEC, FAST_MODE | EXTRA_ESCAPE_MODE, 0, -1, -1, 1, -1, { 0, 0, "" }, "\\^1\\^^\\^1", -1, 0, 15, 15, 0, 3, "BWIPP: see above", + "000111010010000" + "000001010100001" + "001100000110110" + "011111111111100" + "001100000001111" + "001101111101010" + "011101000101110" + "000101010101000" + "010101000101011" + "111101111101111" + "011100000001111" + "100111111111101" + "100011000110010" + "110001001011101" + "101000000001010" + }, + /*198*/ { BARCODE_AZTEC, EXTRA_ESCAPE_MODE, 0, -1, -1, 1, -1, { 0, 0, "" }, "\\^11234\\^1", -1, 0, 15, 15, 1, 3, "", + "001000011111101" + "111011011010111" + "111100001000111" + "001111111111110" + "000100000001001" + "000101111101010" + "010101000101111" + "001101010101101" + "001101000101101" + "011101111101011" + "000100000001101" + "010111111111100" + "100001010010011" + "000010001001111" + "101110000000011" + }, + /*199*/ { BARCODE_AZTEC, FAST_MODE | EXTRA_ESCAPE_MODE, 0, -1, -1, 1, -1, { 0, 0, "" }, "\\^11234\\^1", -1, 0, 15, 15, 1, 3, "", + "001000011111101" + "111011011010111" + "111100001000111" + "001111111111110" + "000100000001001" + "000101111101010" + "010101000101111" + "001101010101101" + "001101000101101" + "011101111101011" + "000100000001101" + "010111111111100" + "100001010010011" + "000010001001111" + "101110000000011" + }, + /*200*/ { BARCODE_AZTEC, EXTRA_ESCAPE_MODE, 0, -1, -1, 1, -1, { 0, 0, "" }, "A\\^1\\^^\\^1", -1, 0, 15, 15, 0, 3, "BWIPP: different encodation, same no. of codewords (does ML before FNC1 in 2nd position)", + "001110100001001" + "001000110000000" + "011100001000100" + "001111111111100" + "000100000001001" + "000101111101011" + "010101000101100" + "001101010101111" + "001101000101101" + "011101111101010" + "000100000001110" + "110111111111110" + "100001010010010" + "111011100001111" + "100110110000011" + }, + /*201*/ { BARCODE_AZTEC, FAST_MODE | EXTRA_ESCAPE_MODE, 0, -1, -1, 1, -1, { 0, 0, "" }, "A\\^1\\^^\\^1", -1, 0, 15, 15, 0, 3, "BWIPP: see above", + "000000011101000" + "001101101100100" + "011100001000100" + "001111111111110" + "000100000001011" + "000101111101001" + "010101000101110" + "001101010101110" + "001101000101110" + "011101111101001" + "000100000001110" + "110111111111111" + "100001010010010" + "111010001001011" + "100110000000011" + }, + /*202*/ { BARCODE_AZTEC, EXTRA_ESCAPE_MODE, 0, -1, -1, 1, -1, { 0, 0, "" }, "A\\^112\\^134", -1, 0, 15, 15, 1, 3, "", + "001011000011101" + "000001000001011" + "011100001000111" + "011111111111111" + "111100000001101" + "100101111101110" + "000101000101101" + "001101010101001" + "001101000101010" + "010101111101000" + "000100000001011" + "000111111111111" + "010001100010010" + "011001001001011" + "010000000000101" + }, + /*203*/ { BARCODE_AZTEC, FAST_MODE | EXTRA_ESCAPE_MODE, 0, -1, -1, 1, -1, { 0, 0, "" }, "A\\^112\\^134", -1, 0, 15, 15, 1, 3, "", + "001011000011101" + "000001000001011" + "011100001000111" + "011111111111111" + "111100000001101" + "100101111101110" + "000101000101101" + "001101010101001" + "001101000101010" + "010101111101000" + "000100000001011" + "000111111111111" + "010001100010010" + "011001001001011" + "010000000000101" + }, + /*204*/ { BARCODE_AZTEC, EXTRA_ESCAPE_MODE, 0, -1, -1, 1, -1, { 0, 0, "" }, "12\\^112", -1, 0, 15, 15, 1, 3, "", + "001011011111110" + "110010001011001" + "111100000100101" + "001111111111111" + "011100000001101" + "100101111101010" + "101101000101000" + "000101010101000" + "000101000101110" + "011101111101011" + "000100000001100" + "000111111111110" + "010011011110001" + "001110101010101" + "000100101111000" + }, + /*205*/ { BARCODE_AZTEC, FAST_MODE | EXTRA_ESCAPE_MODE, 0, -1, -1, 1, -1, { 0, 0, "" }, "12\\^112", -1, 0, 15, 15, 1, 3, "", + "001011011111110" + "110010001011001" + "111100000100101" + "001111111111111" + "011100000001101" + "100101111101010" + "101101000101000" + "000101010101000" + "000101000101110" + "011101111101011" + "000100000001100" + "000111111111110" + "010011011110001" + "001110101010101" + "000100101111000" + }, + /*206*/ { BARCODE_AZTEC, EXTRA_ESCAPE_MODE, 0, -1, -1, 1, -1, { 0, 0, "" }, "1\\^112", -1, 0, 15, 15, 1, 3, "", + "000100100101100" + "111010110101101" + "111100000100100" + "001111111111110" + "011100000001101" + "100101111101000" + "001101000101011" + "000101010101000" + "000101000101110" + "011101111101011" + "000100000001110" + "000111111111111" + "010011011110010" + "100111001101111" + "011011101011110" + }, + /*207*/ { BARCODE_AZTEC, FAST_MODE | EXTRA_ESCAPE_MODE, 0, -1, -1, 1, -1, { 0, 0, "" }, "1\\^112", -1, 0, 15, 15, 1, 3, "", + "000100100101100" + "111010110101101" + "111100000100100" + "001111111111110" + "011100000001101" + "100101111101000" + "001101000101011" + "000101010101000" + "000101000101110" + "011101111101011" + "000100000001110" + "000111111111111" + "010011011110010" + "100111001101111" + "011011101011110" + }, + /*208*/ { BARCODE_AZTEC, EXTRA_ESCAPE_MODE, 0, -1, -1, 6, -1, { 0, 0, "" }, "?\\^1123456ABC\\^1\\^^DEXY\\^11234\\^^\\^1", -1, 0, 23, 23, 0, 3, "BWIPP: different encodation, same no. of codewords", + "11111011000000000011111" + "11100000101100100011001" + "00010100111001011100000" + "00110011111110011101011" + "01011100001000000010001" + "10111111111111111111110" + "10010100000000000111101" + "00100101111111110101001" + "00100101000000010100100" + "00111101011111010101010" + "00010101010001010101111" + "01010101010101010101010" + "01100101010001010101110" + "00111101011111010111011" + "00110101000000010111001" + "01000101111111110111110" + "11001100000000000101110" + "01000111111111111111111" + "00010011101000110001001" + "01011111010101110011011" + "01011101001000111001000" + "10110010010101000001010" + "01011011000001010000000" + }, + /*209*/ { BARCODE_AZTEC, FAST_MODE | EXTRA_ESCAPE_MODE, 0, -1, -1, 6, -1, { 0, 0, "" }, "?\\^1123456ABC\\^1\\^^DEXY\\^11234\\^^\\^1", -1, 0, 23, 23, 0, 3, "BWIPP: different encodation, 1 less codeword", + "00000101100000000011101" + "00101100111100100000101" + "01011010100011111010001" + "11010100011110110001010" + "01101100001000000010001" + "00111111111111111110001" + "00100100000000000110100" + "00110101111111110100110" + "01101101000000010101111" + "00110101011111010100010" + "00010101010001010100011" + "01010101010101010101010" + "01011101010001010111001" + "00101101011111010110010" + "11111101000000010100110" + "11000101111111110101111" + "00001100000000000110001" + "01000111111111111110111" + "10010000011001111001010" + "10001011000111110101000" + "00000011010011110110000" + "00101101100100101001010" + "11101100100010010000000" + }, + /*210*/ { BARCODE_AZTEC, EXTRA_ESCAPE_MODE, 3, -1, -1, 6, -1, { 0, 0, "" }, "\\^1\241\\^1\\^1\241\241\\^1\241\\^1", -1, 0, 23, 23, 1, 3, "", + "00000000010000100111000" + "00101000000101100011100" + "01110111101010010110110" + "00011111100101110000000" + "00111100001000000010000" + "01111111111111111110100" + "00111100000000000101101" + "00001101111111110110000" + "01011101000000010110100" + "00011101011111010100110" + "00000101010001010110111" + "01010101010101010101010" + "01001101010001010100000" + "00101101011111010111000" + "00011101000000010111010" + "01100101111111110110010" + "10010100000000000111110" + "10100111111111111110100" + "11000010111001101001101" + "11101001011101001010111" + "11100011111010000000011" + "00110000010101001001010" + "00100010000000000000000" + }, + /*211*/ { BARCODE_AZTEC, FAST_MODE | EXTRA_ESCAPE_MODE, 3, -1, -1, 6, -1, { 0, 0, "" }, "\\^1\241\\^1\\^1\241\241\\^1\241\\^1", -1, 0, 23, 23, 1, 3, "", + "00000000010000100111000" + "00101000000101100011100" + "01110111101010010110110" + "00011111100101110000000" + "00111100001000000010000" + "01111111111111111110100" + "00111100000000000101101" + "00001101111111110110000" + "01011101000000010110100" + "00011101011111010100110" + "00000101010001010110111" + "01010101010101010101010" + "01001101010001010100000" + "00101101011111010111000" + "00011101000000010111010" + "01100101111111110110010" + "10010100000000000111110" + "10100111111111111110100" + "11000010111001101001101" + "11101001011101001010111" + "11100011111010000000011" + "00110000010101001001010" + "00100010000000000000000" + }, + /*212*/ { BARCODE_AZTEC, EXTRA_ESCAPE_MODE, 4, -1, -1, 6, -1, { 0, 0, "" }, "A\\^1123456\\^1\\^^\241\\^1", -1, 0, 23, 23, 0, 4, "BWIPP: different encodation (final PS instead of PL) - see below", + "00100010011010011100001" + "01000010101111101100000" + "01111010101010000110011" + "11000011110100100011111" + "10001100001000000010000" + "00011111111111111110000" + "00011100000000000101010" + "00111101111111110110011" + "01101101000000010101100" + "00110101011111010110000" + "00000101010001010101111" + "01010101010101010101010" + "01101101010001010111111" + "00010101011111010100110" + "00010101000000010110111" + "01110101111111110101101" + "00000100000000000101010" + "00100111111111111110110" + "01010011101001010000111" + "01010001111100110111001" + "01111101000011111000111" + "00110111011100001001001" + "10100000101010000000011" + }, + /*213*/ { BARCODE_AZTEC, FAST_MODE | EXTRA_ESCAPE_MODE, 4, -1, -1, 6, -1, { 0, 0, "" }, "A\\^1123456\\^1\\^^\241\\^1", -1, 0, 23, 23, 1, 4, "", + "00000110100010001000000" + "01000001001100010100100" + "01101111010000001101000" + "11010110101101110001101" + "10111100001000000010000" + "00111111111111111110000" + "00011100000000000101110" + "00001101111111110110011" + "01011101000000010100000" + "00100101011111010111100" + "00110101010001010100111" + "01010101010101010101010" + "01101101010001010110011" + "00010101011111010101010" + "00000101000000010111111" + "01000101111111110100001" + "00010100000000000101110" + "00010111111111111110110" + "01010011101001010000011" + "01011000000100101001001" + "01011001111001100011111" + "00110111011100001001001" + "10100000101010000000011" + }, + /*214*/ { BARCODE_AZTEC, EXTRA_ESCAPE_MODE, 5, -1, -1, 2, -1, { 0, 0, "" }, "12\\^1ABCD\\^1\\^^\\^1\241\\^1", -1, 0, 19, 19, 0, 5, "BWIPP: different encodation", + "1111000100110000000" + "1111001100111100100" + "0010101111110110000" + "0100010011001111001" + "1000110101100011010" + "1001111111111110111" + "0000110000000101101" + "0000010111110110101" + "0111010100010100110" + "0000110101010110111" + "0010010100010110010" + "0101010111110111010" + "0001110000000111000" + "0011011111111110000" + "0111000100111001010" + "0000100111100000100" + "0010110111010101100" + "1000110001001000100" + "0001111100001010010" + }, + /*215*/ { BARCODE_AZTEC, FAST_MODE | EXTRA_ESCAPE_MODE, 5, -1, -1, 2, -1, { 0, 0, "" }, "12\\^1ABCD\\^1\\^^\\^1\241\\^1", -1, 0, 19, 19, 0, 5, "BWIPP: different encodation", + "1101000100110000000" + "1100001100111100100" + "0000001000010100000" + "0100101010011001001" + "1000110101100010110" + "1001111111111111111" + "0000110000000100001" + "0001010111110111101" + "0111010100010100010" + "0011110101010111111" + "0000010100010111010" + "0100010111110111110" + "0001110000000110100" + "0011011111111111000" + "0110000100111000010" + "0011000100011111100" + "0001001111110100100" + "1000110001001000100" + "0001111100001010010" + }, + /*216*/ { BARCODE_AZTEC, EXTRA_ESCAPE_MODE, 3, -1, -1, -1, -1, { 1, 2, "" }, "\\^112\\^134", -1, 0, 19, 19, 1, 3, "", + "1101101101001111011" + "1001010000110010001" + "1110001110010110101" + "1111111000110111011" + "0100110100111011110" + "0000111111111110000" + "0101010000000100000" + "0011010111110111000" + "0011110100010100111" + "1100010101010100110" + "1100010100010110011" + "1010010111110111101" + "1011110000000101001" + "0010011111111111100" + "0000001110000000110" + "0010001101110100000" + "0010011011000110000" + "1001001000001000010" + "0000000001110110000" + }, + /*217*/ { BARCODE_AZTEC, FAST_MODE | EXTRA_ESCAPE_MODE, 3, -1, -1, -1, -1, { 1, 2, "" }, "\\^112\\^134", -1, 0, 19, 19, 1, 3, "", + "1101101101001111011" + "1001010000110010001" + "1110001110010110101" + "1111111000110111011" + "0100110100111011110" + "0000111111111110000" + "0101010000000100000" + "0011010111110111000" + "0011110100010100111" + "1100010101010100110" + "1100010100010110011" + "1010010111110111101" + "1011110000000101001" + "0010011111111111100" + "0000001110000000110" + "0010001101110100000" + "0010011011000110000" + "1001001000001000010" + "0000000001110110000" + }, + /*218*/ { BARCODE_AZTEC, EXTRA_ESCAPE_MODE, 3, -1, -1, -1, -1, { 1, 2, "" }, "A\\^112\\^134", -1, 0, 19, 19, 1, 3, "", + "1100111111000011101" + "1010110010100001110" + "1101110111111000111" + "1101111000110100000" + "0100110100111010000" + "0011111111111111111" + "0110110000000111011" + "0000010111110101001" + "0010110100010100110" + "1100010101010110110" + "0010010100010101010" + "0100110111110110110" + "0110110000000110100" + "1110011111111110000" + "1011001101000001110" + "0001110010010100000" + "0011010111111101100" + "1001001001011101100" + "0000000000000001000" + }, + /*219*/ { BARCODE_AZTEC, FAST_MODE | EXTRA_ESCAPE_MODE, 3, -1, -1, -1, -1, { 1, 2, "" }, "A\\^112\\^134", -1, 0, 19, 19, 1, 3, "", + "1100111111000011101" + "1010110010100001110" + "1101110111111000111" + "1101111000110100000" + "0100110100111010000" + "0011111111111111111" + "0110110000000111011" + "0000010111110101001" + "0010110100010100110" + "1100010101010110110" + "0010010100010101010" + "0100110111110110110" + "0110110000000110100" + "1110011111111110000" + "1011001101000001110" + "0001110010010100000" + "0011010111111101100" + "1001001001011101100" + "0000000000000001000" + }, + /*220*/ { BARCODE_AZTEC, EXTRA_ESCAPE_MODE, 0, -1, -1, 1, -1, { 0, 0, "" }, "\\^1", -1, 0, 15, 15, 1, 3, "", + "000110111000001" + "000110001100100" + "001100000010110" + "011111111111111" + "000100000001010" + "001101111101000" + "010101000101100" + "000101010101001" + "010101000101110" + "110101111101111" + "111100000001001" + "110111111111110" + "000000011000000" + "001010011100100" + "100111010100000" + }, + /*221*/ { BARCODE_AZTEC, FAST_MODE | EXTRA_ESCAPE_MODE, 0, -1, -1, 1, -1, { 0, 0, "" }, "\\^1", -1, 0, 15, 15, 1, 3, "", + "000110111000001" + "000110001100100" + "001100000010110" + "011111111111111" + "000100000001010" + "001101111101000" + "010101000101100" + "000101010101001" + "010101000101110" + "110101111101111" + "111100000001001" + "110111111111110" + "000000011000000" + "001010011100100" + "100111010100000" + }, + /*222*/ { BARCODE_AZTEC, EXTRA_ESCAPE_MODE, 0, -1, -1, 2, -1, { 0, 0, "" }, "A\\^1[", -1, 0, 19, 19, 1, 3, "", + "0010011011101010000" + "0100000111101011001" + "0001011011100010010" + "0001110010100001001" + "0001110100010010100" + "0110111111111110011" + "0000110000000111000" + "0011110111110100010" + "0110110100010101101" + "0001110101010101001" + "0000110100010101001" + "0111010111110100011" + "0001010000000101010" + "1100011111111111000" + "0100001001101000001" + "1100001101011100001" + "1111001101101000101" + "0010011010011101111" + "1001101101110011101" + }, + /*223*/ { BARCODE_AZTEC, EXTRA_ESCAPE_MODE, 0, -1, -1, 2, -1, { 0, 0, "" }, "A\\^1[!", -1, 0, 19, 19, 1, 3, "", + "0001010011111110000" + "0100000111110011001" + "0101011011110001101" + "1101100011001010110" + "0101110100010011001" + "1101111111111111011" + "1100110000000111100" + "0001110111110100100" + "0010110100010100101" + "0010110101010100110" + "0000110100010100110" + "0100010111110101111" + "1110010000000100000" + "0111011111111110011" + "1000001001101001001" + "0111101000001010101" + "1001011010110010010" + "1111000000010101001" + "1010111101111100001" + }, + /*224*/ { BARCODE_AZTEC, EXTRA_ESCAPE_MODE, 3, -1, -1, 2, -1, { 0, 0, "" }, "A\\^1[", -1, 0, 19, 19, 1, 3, "", + "0000101101110101100" + "0101011010010110111" + "0111100110100101101" + "1110001110111010100" + "0111110100011011000" + "1101111111111111001" + "1101010000000100111" + "0010010111110110001" + "0011110100010110000" + "0010110101010110100" + "0001110100010100111" + "0111110111110110101" + "0011110000000111001" + "0000011111111111100" + "0111001011001001001" + "0000111011100101001" + "1010100100010111001" + "0101011110011001111" + "1111001110010011000" + }, + /*225*/ { BARCODE_AZTEC, EXTRA_ESCAPE_MODE, 3, -1, -1, 2, -1, { 0, 0, "" }, "12\\^1[", -1, 0, 19, 19, 0, 3, "BWIPP: different encodation, same no. of codewords (uses PS instead of PL)", + "1100100011110010111" + "1111001011101100001" + "0000101010011001010" + "0100000100000001010" + "1010110100100010010" + "1000111111111111111" + "0100010000000101101" + "1100110111110100100" + "0100010100010110000" + "1100010101010110000" + "0101010100010101011" + "1101010111110101110" + "1100010000000100011" + "0010011111111111111" + "0010000001011001010" + "0001010000010000111" + "0011001111101001010" + "1001000101001010011" + "0000011111100011011" + }, + /*226*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "0", -1, 0, 11, 11, 1, 1, "ISO/IEC 24778:2008 Figure A.1 (1st)", "11101010101" "11111111111" "01000000010" @@ -6628,7 +7369,7 @@ static void test_encode(const testCtx *const p_ctx) { "01111111111" "00101010100" }, - /*191*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "25", -1, 0, 11, 11, 1, 1, "ISO/IEC 24778:2008 Figure A.1 (2nd)", + /*227*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "25", -1, 0, 11, 11, 1, 1, "ISO/IEC 24778:2008 Figure A.1 (2nd)", "11101100101" "11111111111" "01000000011" @@ -6641,7 +7382,7 @@ static void test_encode(const testCtx *const p_ctx) { "01111111111" "00100100000" }, - /*192*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "125", -1, 0, 11, 11, 1, 1, "ISO/IEC 24778:2008 Figure A.1 (3rd)", + /*228*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "125", -1, 0, 11, 11, 1, 1, "ISO/IEC 24778:2008 Figure A.1 (3rd)", "11110101101" "11111111111" "11000000011" @@ -6654,7 +7395,7 @@ static void test_encode(const testCtx *const p_ctx) { "01111111111" "00111101000" }, - /*193*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "255", -1, 0, 11, 11, 1, 1, "ISO/IEC 24778:2008 Figure A.1 (4th)", + /*229*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "255", -1, 0, 11, 11, 1, 1, "ISO/IEC 24778:2008 Figure A.1 (4th)", "11010101001" "11111111111" "01000000011" @@ -6667,7 +7408,7 @@ static void test_encode(const testCtx *const p_ctx) { "01111111111" "00110011100" }, - /*194*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "1", -1, 0, 11, 11, 1, 1, "", + /*230*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "1", -1, 0, 11, 11, 1, 1, "", "11101010101" "11111111111" "11000000011" @@ -6680,7 +7421,7 @@ static void test_encode(const testCtx *const p_ctx) { "01111111111" "00100110100" }, - /*195*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "15", -1, 0, 11, 11, 1, 1, "", + /*231*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "15", -1, 0, 11, 11, 1, 1, "", "11101001001" "11111111111" "11000000011" @@ -6693,7 +7434,7 @@ static void test_encode(const testCtx *const p_ctx) { "01111111111" "00001111100" }, - /*196*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "16", -1, 0, 11, 11, 1, 1, "", + /*232*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "16", -1, 0, 11, 11, 1, 1, "", "11101110101" "11111111111" "11000000010" @@ -6706,7 +7447,7 @@ static void test_encode(const testCtx *const p_ctx) { "01111111111" "00111100100" }, - /*197*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "63", -1, 0, 11, 11, 1, 1, "", + /*233*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "63", -1, 0, 11, 11, 1, 1, "", "11100101001" "11111111111" "11000000011" @@ -6719,7 +7460,7 @@ static void test_encode(const testCtx *const p_ctx) { "01111111111" "00101010000" }, - /*198*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "64", -1, 0, 11, 11, 1, 1, "", + /*234*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "64", -1, 0, 11, 11, 1, 1, "", "11111010101" "11111111111" "01000000010" @@ -6732,7 +7473,7 @@ static void test_encode(const testCtx *const p_ctx) { "01111111111" "00111011100" }, - /*199*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "65", -1, 0, 11, 11, 1, 1, "", + /*235*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "65", -1, 0, 11, 11, 1, 1, "", "11111010101" "11111111111" "11000000011" @@ -6745,7 +7486,7 @@ static void test_encode(const testCtx *const p_ctx) { "01111111111" "00110111100" }, - /*200*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "126", -1, 0, 11, 11, 1, 1, "", + /*236*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "126", -1, 0, 11, 11, 1, 1, "", "11110101001" "11111111111" "01000000010" @@ -6758,7 +7499,7 @@ static void test_encode(const testCtx *const p_ctx) { "01111111111" "00110111000" }, - /*201*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "127", -1, 0, 11, 11, 1, 1, "", + /*237*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "127", -1, 0, 11, 11, 1, 1, "", "11110101001" "11111111111" "11000000011" @@ -6771,7 +7512,7 @@ static void test_encode(const testCtx *const p_ctx) { "01111111111" "00111011000" }, - /*202*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "128", -1, 0, 11, 11, 1, 1, "", + /*238*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "128", -1, 0, 11, 11, 1, 1, "", "11001010101" "11111111111" "11000000010" @@ -6784,7 +7525,7 @@ static void test_encode(const testCtx *const p_ctx) { "01111111111" "00100010000" }, - /*203*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "191", -1, 0, 11, 11, 1, 1, "", + /*239*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "191", -1, 0, 11, 11, 1, 1, "", "11000101001" "11111111111" "01000000011" @@ -6797,7 +7538,7 @@ static void test_encode(const testCtx *const p_ctx) { "01111111111" "00100010100" }, - /*204*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "192", -1, 0, 11, 11, 1, 1, "", + /*240*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "192", -1, 0, 11, 11, 1, 1, "", "11011010101" "11111111111" "11000000010" @@ -6810,7 +7551,7 @@ static void test_encode(const testCtx *const p_ctx) { "01111111111" "00110011000" }, - /*205*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "225", -1, 0, 11, 11, 1, 1, "", + /*241*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "225", -1, 0, 11, 11, 1, 1, "", "11010010101" "11111111111" "11000000011" @@ -6823,7 +7564,7 @@ static void test_encode(const testCtx *const p_ctx) { "01111111111" "00001100100" }, - /*206*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "254", -1, 0, 11, 11, 1, 1, "", + /*242*/ { BARCODE_AZRUNE, UNICODE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "254", -1, 0, 11, 11, 1, 1, "", "11010101001" "11111111111" "11000000010" @@ -6845,7 +7586,7 @@ static void test_encode(const testCtx *const p_ctx) { char cmp_buf[32768] ZINT_TESTUTIL_SANITIZEM_INIT; char cmp_msg[1024]; - /* Only do BWIPP/ZXing-C++ tests if asked, too slow otherwise */ + /* Only do BWIPP/zxing-cpp tests if asked, too slow otherwise */ int do_bwipp = (debug & ZINT_DEBUG_TEST_BWIPP) && testUtilHaveGhostscript(); int do_zxingcpp = (debug & ZINT_DEBUG_TEST_ZXINGCPP) && testUtilHaveZXingCPPDecoder(); @@ -6902,7 +7643,7 @@ static void test_encode(const testCtx *const p_ctx) { } } else { ret = testUtilBwipp(i, symbol, data[i].option_1, data[i].option_2, -1, data[i].data, length, - NULL, cmp_buf, sizeof(cmp_buf), NULL); + NULL /*primary*/, cmp_buf, sizeof(cmp_buf), NULL /*p_parsefnc*/); assert_zero(ret, "i:%d %s testUtilBwipp ret %d != 0\n", i, testUtilBarcodeName(symbol->symbology), ret); @@ -7454,7 +8195,65 @@ static void test_encode_segs(const testCtx *const p_ctx) { "11000010101111001011001" "00000000010011100110111" }, - /* 20*/ { GS1_MODE, -1, -1, -1, -1, { { TU("[20]01"), -1, 0 }, { TU(""), 0, 0 }, { TU(""), 0, 0 } }, 0, 15, 15, 1, "GS1 with single seg ok", + /* 20*/ { UNICODE_MODE | EXTRA_ESCAPE_MODE, -1, -1, -1, ZINT_AZTEC_FULL, { { TU("12\\^1Жф"), -1, 7 }, { TU("\\^1ÓṠé"), -1, 16 }, { TU("12\\^1大ÓфṠéЖ"), -1, 26 } }, 0, 27, 27, 0, "BWIPP: different encodation, same no. of codewords", + "110000000001001100010000000" + "111000100011010110100101000" + "001101111111000000010110001" + "011011010100110000000101100" + "101111010000100110010000110" + "101100010010010110011000011" + "001011110001000000001010011" + "001100111111111111111101010" + "001010110000000000011011111" + "001111010111111111010001010" + "001001110100000001010000111" + "010101110101111101011010110" + "000111110101000101011110101" + "010101010101010101010101010" + "001001010101000101011101101" + "001011010101111101011010011" + "010110010100000001011010010" + "000000010111111111011001100" + "001011010000000000010110011" + "001010011111111111111110011" + "110100001001000000000110110" + "001100111110010110111010100" + "111101001100101001000101000" + "110010101110110010100100110" + "010011001100001000110011100" + "110111011100010010010110000" + "110000110101000000000010000" + }, + /* 21*/ { UNICODE_MODE | FAST_MODE | EXTRA_ESCAPE_MODE, -1, -1, -1, ZINT_AZTEC_FULL, { { TU("12\\^1Жф"), -1, 7 }, { TU("\\^1ÓṠé"), -1, 16 }, { TU("12\\^1大ÓфṠéЖ"), -1, 26 } }, 0, 27, 27, 0, "Same as above; BWIPP: as above", + "110000000001001100010000000" + "111000100011010110100101000" + "001101111111000000010110001" + "011011010100110000000101100" + "101111010000100110010000110" + "101100010010010110011000011" + "001011110001000000001010011" + "001100111111111111111101010" + "001010110000000000011011111" + "001111010111111111010001010" + "001001110100000001010000111" + "010101110101111101011010110" + "000111110101000101011110101" + "010101010101010101010101010" + "001001010101000101011101101" + "001011010101111101011010011" + "010110010100000001011010010" + "000000010111111111011001100" + "001011010000000000010110011" + "001010011111111111111110011" + "110100001001000000000110110" + "001100111110010110111010100" + "111101001100101001000101000" + "110010101110110010100100110" + "010011001100001000110011100" + "110111011100010010010110000" + "110000110101000000000010000" + }, + /* 22*/ { GS1_MODE, -1, -1, -1, -1, { { TU("[20]01"), -1, 0 }, { TU(""), 0, 0 }, { TU(""), 0, 0 } }, 0, 15, 15, 1, "GS1 with single seg ok", "000111011110100" "111001101011110" "111100000100100" @@ -7471,7 +8270,7 @@ static void test_encode_segs(const testCtx *const p_ctx) { "101011011010111" "000001100110010" }, - /* 21*/ { GS1_MODE | FAST_MODE, -1, -1, -1, -1, { { TU("[20]01"), -1, 0 }, { TU(""), 0, 0 }, { TU(""), 0, 0 } }, 0, 15, 15, 1, "Same as above", + /* 23*/ { GS1_MODE | FAST_MODE, -1, -1, -1, -1, { { TU("[20]01"), -1, 0 }, { TU(""), 0, 0 }, { TU(""), 0, 0 } }, 0, 15, 15, 1, "Same as above", "000111011110100" "111001101011110" "111100000100100" @@ -7497,7 +8296,7 @@ static void test_encode_segs(const testCtx *const p_ctx) { char cmp_buf[32768]; char cmp_msg[1024]; - /* Only do BWIPP/ZXing-C++ tests if asked, too slow otherwise */ + /* Only do BWIPP/zxing-cpp tests if asked, too slow otherwise */ int do_bwipp = (debug & ZINT_DEBUG_TEST_BWIPP) && testUtilHaveGhostscript(); int do_zxingcpp = (debug & ZINT_DEBUG_TEST_ZXINGCPP) && testUtilHaveZXingCPPDecoder(); @@ -7576,7 +8375,7 @@ static void test_encode_segs(const testCtx *const p_ctx) { if ((data[i].input_mode & 0x7) == DATA_MODE) { if (debug & ZINT_DEBUG_TEST_PRINT) { printf("i:%d %s multiple segments in DATA_MODE not currently supported for" - " ZXing-C++ testing\n", + " zxing-cpp testing\n", i, testUtilBarcodeName(symbol->symbology)); } } else { @@ -7607,7 +8406,7 @@ static void test_encode_segs(const testCtx *const p_ctx) { testFinish(); } -static void test_rt(const testCtx *const p_ctx) { +static void test_ct(const testCtx *const p_ctx) { int debug = p_ctx->debug; struct item { @@ -7635,13 +8434,19 @@ static void test_rt(const testCtx *const p_ctx) { /* 7*/ { BARCODE_AZTEC, UNICODE_MODE, 26, BARCODE_CONTENT_SEGS, "é", -1, 0, 26, "é", -1, 26 }, /* 8*/ { BARCODE_AZTEC, UNICODE_MODE, 899, -1, "é", -1, 0, 899, "", -1, 0 }, /* 9*/ { BARCODE_AZTEC, UNICODE_MODE, 899, BARCODE_CONTENT_SEGS, "é", -1, 0, 899, "é", -1, 899 }, - /* 10*/ { BARCODE_AZTEC, GS1_MODE, -1, -1, "[01]04912345123459[15]970331[30]128[10](BC123", -1, 0, 0, "", -1, 0 }, - /* 11*/ { BARCODE_AZTEC, GS1_MODE, -1, BARCODE_CONTENT_SEGS, "[01]04912345123459[15]970331[30]128[10](BC123", -1, 0, 0, "01049123451234591597033130128\03510(BC123", -1, 3 }, - /* 12*/ { BARCODE_AZTEC, GS1_MODE | ESCAPE_MODE | GS1PARENS_MODE, -1, BARCODE_CONTENT_SEGS, "(01)04912345123459(15)970331(30)128(10)\\(BC123", -1, 0, 0, "01049123451234591597033130128\03510(BC123", -1, 3 }, - /* 13*/ { BARCODE_AZTEC, GS1_MODE, 26, BARCODE_CONTENT_SEGS, "[01]04912345123459[15]970331[30]128[10](BC123", -1, 0, 26, "01049123451234591597033130128\03510(BC123", -1, 3 }, /* Note: content seg ECI remains at default 3 */ - /* 14*/ { BARCODE_AZTEC, GS1_MODE, 24, BARCODE_CONTENT_SEGS, "[01]04912345123459[15]970331[30]128[10](BC123", -1, 0, 24, "01049123451234591597033130128\03510(BC123", -1, 3 }, - /* 15*/ { BARCODE_HIBC_AZTEC, UNICODE_MODE, -1, -1, "H123ABC01234567890", -1, 0, 0, "", -1, 0 }, - /* 16*/ { BARCODE_HIBC_AZTEC, UNICODE_MODE, -1, BARCODE_CONTENT_SEGS, "H123ABC01234567890", -1, 0, 0, "+H123ABC01234567890D", -1, 3 }, + /* 10*/ { BARCODE_AZTEC, UNICODE_MODE | EXTRA_ESCAPE_MODE, -1, -1, "\\^1é", -1, 0, 0, "", -1, 3 }, + /* 11*/ { BARCODE_AZTEC, UNICODE_MODE | EXTRA_ESCAPE_MODE, -1, BARCODE_CONTENT_SEGS, "\\^1é", -1, 0, 0, "é", -1, 3 }, + /* 12*/ { BARCODE_AZTEC, UNICODE_MODE | EXTRA_ESCAPE_MODE, -1, -1, "12\\^1ABC", -1, 0, 0, "", -1, 3 }, + /* 13*/ { BARCODE_AZTEC, UNICODE_MODE | EXTRA_ESCAPE_MODE, -1, BARCODE_CONTENT_SEGS, "12\\^1ABC", -1, 0, 0, "12ABC", -1, 3 }, + /* 14*/ { BARCODE_AZTEC, UNICODE_MODE | EXTRA_ESCAPE_MODE, 26, -1, "\\^1é", -1, 0, 26, "", -1, 26 }, + /* 15*/ { BARCODE_AZTEC, UNICODE_MODE | EXTRA_ESCAPE_MODE, 26, BARCODE_CONTENT_SEGS, "\\^1é", -1, 0, 26, "é", -1, 26 }, + /* 16*/ { BARCODE_AZTEC, GS1_MODE, -1, -1, "[01]04912345123459[15]970331[30]128[10](BC123", -1, 0, 0, "", -1, 0 }, + /* 17*/ { BARCODE_AZTEC, GS1_MODE, -1, BARCODE_CONTENT_SEGS, "[01]04912345123459[15]970331[30]128[10](BC123", -1, 0, 0, "01049123451234591597033130128\03510(BC123", -1, 3 }, + /* 18*/ { BARCODE_AZTEC, GS1_MODE | ESCAPE_MODE | GS1PARENS_MODE, -1, BARCODE_CONTENT_SEGS, "(01)04912345123459(15)970331(30)128(10)\\(BC123", -1, 0, 0, "01049123451234591597033130128\03510(BC123", -1, 3 }, + /* 19*/ { BARCODE_AZTEC, GS1_MODE, 26, BARCODE_CONTENT_SEGS, "[01]04912345123459[15]970331[30]128[10](BC123", -1, 0, 26, "01049123451234591597033130128\03510(BC123", -1, 3 }, /* Note: content seg ECI remains at default 3 */ + /* 20*/ { BARCODE_AZTEC, GS1_MODE, 24, BARCODE_CONTENT_SEGS, "[01]04912345123459[15]970331[30]128[10](BC123", -1, 0, 24, "01049123451234591597033130128\03510(BC123", -1, 3 }, + /* 21*/ { BARCODE_HIBC_AZTEC, UNICODE_MODE, -1, -1, "H123ABC01234567890", -1, 0, 0, "", -1, 0 }, + /* 22*/ { BARCODE_HIBC_AZTEC, UNICODE_MODE, -1, BARCODE_CONTENT_SEGS, "H123ABC01234567890", -1, 0, 0, "+H123ABC01234567890D", -1, 3 }, }; const int data_size = ARRAY_SIZE(data); int i, length, ret; @@ -7699,7 +8504,7 @@ static void test_rt(const testCtx *const p_ctx) { testFinish(); } -static void test_rt_segs(const testCtx *const p_ctx) { +static void test_ct_segs(const testCtx *const p_ctx) { int debug = p_ctx->debug; struct item { @@ -8421,7 +9226,7 @@ static void test_fuzz(const testCtx *const p_ctx) { "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000" "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000", 996, 0, "", 1 - }, /* Padding 11 example causing issue with ZXing-C++ */ + }, /* Padding 11 example causing issue with zxing-cpp */ /* 12*/ { BARCODE_AZTEC, DATA_MODE, -1, -1, "\133\060\060\060\135\060\125\125\125\125\140\060\125\125\125\125\060\060\060\271\060\060\125\103\164\125\125\125\377\377\125\125\125\125\125\125\125\133\060\076" "\060\135\261\177\261\261\261\236\261\261\261\040\261\261\261\261\261\261\261\020\261\261\261\261\261\261\265\261\261\261\261\261\261\261\261\261\261\261\261\040" @@ -8582,7 +9387,7 @@ static void test_fuzz(const testCtx *const p_ctx) { char cmp_buf[32768]; char cmp_msg[8192]; - /* Only do ZXing-C++ test if asked, too slow otherwise */ + /* Only do zxing-cpp test if asked, too slow otherwise */ int do_zxingcpp = (debug & ZINT_DEBUG_TEST_ZXINGCPP) && testUtilHaveZXingCPPDecoder(); testStartSymbol(p_ctx->func_name, &symbol); @@ -8642,8 +9447,8 @@ int main(int argc, char *argv[]) { { "test_options", test_options }, { "test_encode", test_encode }, { "test_encode_segs", test_encode_segs }, - { "test_rt", test_rt }, - { "test_rt_segs", test_rt_segs }, + { "test_ct", test_ct }, + { "test_ct_segs", test_ct_segs }, { "test_fuzz", test_fuzz }, }; diff --git a/backend/tests/test_common.c b/backend/tests/test_common.c index ad6e5786..e5d5d049 100644 --- a/backend/tests/test_common.c +++ b/backend/tests/test_common.c @@ -173,7 +173,7 @@ static void test_chr_cnt(const testCtx *const p_ctx) { static const struct item data[] = { /* 0*/ { "", -1, 'a', 0 }, /* 1*/ { "BDAaED", -1, 'a', 1 }, - /* 1*/ { "aBDAaaaEaDa", -1, 'a', 6 }, + /* 2*/ { "aBDAaaaEaDa", -1, 'a', 6 }, }; const int data_size = ARRAY_SIZE(data); int i, length, ret; @@ -193,6 +193,44 @@ static void test_chr_cnt(const testCtx *const p_ctx) { testFinish(); } +static void test_zero_fill(const testCtx *const p_ctx) { + + struct item { + const char *data; + int length; + int dest_length; + int ret; + const char *expected; + }; + /* s/\/\*[ 0-9]*\*\//\=printf("\/\*%3d*\/", line(".") - line("'<")): */ + static const struct item data[] = { + /* 0*/ { "", -1, 0, 0, "" }, + /* 1*/ { "1", -1, 10, 9, "0000000001" }, + /* 2*/ { "123456789", -1, 10, 1, "0123456789" }, + /* 3*/ { "1234567890", -1, 10, 0, "1234567890" }, + /* 4*/ { "12345678901", -1, 10, -1, "12345678901" }, + }; + const int data_size = ARRAY_SIZE(data); + int i, length, ret; + + testStart(p_ctx->func_name); + + for (i = 0; i < data_size; i++) { + unsigned char dest[200]; + + if (testContinue(p_ctx, i)) continue; + + length = data[i].length == -1 ? (int) strlen(data[i].data) : data[i].length; + + ret = z_zero_fill(ZCUCP(data[i].data), length, dest, data[i].dest_length); + assert_equal(ret, data[i].ret, "i:%d ret %d != %d\n", i, ret, data[i].ret); + assert_zero(strcmp(ZCCP(dest), data[i].expected), "i:%d dest (%s) != expected (%s)\n", + i, dest, data[i].expected); + } + + testFinish(); +} + static void test_is_chr(const testCtx *const p_ctx) { struct item { @@ -773,20 +811,21 @@ static void test_extra_escapes(const testCtx *const p_ctx) { int ret; const char *expected; const char expected_fncs[32]; + int expected_extra_escapes; const char *comment; }; /* s/\/\*[ 0-9]*\*\//\=printf("\/\*%3d*\/", line(".") - line("'<")): */ static const struct item data[] = { - /* 0*/ { 0, "", -1, 0, "", {0}, "" }, - /* 1*/ { 3, "ABC", -1, 0, "ABC", {0}, "" }, - /* 2*/ { 4, "\\^1ABC", -1, 0, "\035ABC", {1}, "" }, - /* 3*/ { 26, "\\^1\\^1A\\^1BC\\^1", -1, 0, "\035\035A\035BC\035", {1,1,0,1,0,0,1}, "" }, - /* 4*/ { 27, "\\^^\\^1A\\^1BC\\^^1", -1, 0, "\\^\035A\035BC\\^1", {0,0,1,0,1}, "" }, - /* 5*/ { 20, "ABC", -1, ZINT_ERROR_INVALID_OPTION, "", {0}, "" }, - /* 6*/ { 25, "ABC", -1, ZINT_ERROR_INVALID_OPTION, "", {0}, "" }, - /* 7*/ { 28, "ABC", -1, ZINT_ERROR_INVALID_OPTION, "", {0}, "" }, - /* 8*/ { 29, "ABC", -1, ZINT_ERROR_INVALID_OPTION, "", {0}, "" }, - /* 9*/ { 899, "ABC", -1, ZINT_ERROR_INVALID_OPTION, "", {0}, "" }, + /* 0*/ { 0, "", -1, 0, "", {0}, 0, "" }, + /* 1*/ { 3, "ABC", -1, 0, "ABC", {0}, 0, "" }, + /* 2*/ { 4, "\\^1ABC", -1, 0, "\035ABC", {1}, 1, "" }, + /* 3*/ { 26, "\\^1\\^1A\\^1BC\\^1", -1, 0, "\035\035A\035BC\035", {1,1,0,1,0,0,1}, 1, "" }, + /* 4*/ { 27, "\\^^\\^1A\\^1BC\\^^1", -1, 0, "\\^\035A\035BC\\^1", {0,0,1,0,1}, 1, "" }, + /* 5*/ { 20, "ABC", -1, ZINT_ERROR_INVALID_OPTION, "", {0}, 0, "" }, + /* 6*/ { 25, "ABC", -1, ZINT_ERROR_INVALID_OPTION, "", {0}, 0, "" }, + /* 7*/ { 28, "ABC", -1, ZINT_ERROR_INVALID_OPTION, "", {0}, 0, "" }, + /* 8*/ { 29, "ABC", -1, ZINT_ERROR_INVALID_OPTION, "", {0}, 0, "" }, + /* 9*/ { 899, "ABC", -1, ZINT_ERROR_INVALID_OPTION, "", {0}, 0, "" }, }; const int data_size = ARRAY_SIZE(data); int i, length, ret; @@ -800,9 +839,9 @@ static void test_extra_escapes(const testCtx *const p_ctx) { symbol->debug = debug; for (i = 0; i < data_size; i++) { - int len = 0; unsigned char dest[32] = {0}; char fncs[32] = {0}; + int have_extra_escapes = 0; if (testContinue(p_ctx, i)) continue; @@ -813,14 +852,17 @@ static void test_extra_escapes(const testCtx *const p_ctx) { assert_nonzero(expected_length < (int) sizeof(dest), "i:%d expected_length %d >= sizeof(dest) %d\n", i, expected_length, (int) sizeof(dest)); - ret = z_extra_escapes(symbol, ZCUCP(data[i].data), length, data[i].eci, dest, fncs, &len); + ret = z_extra_escapes(symbol, ZCUCP(data[i].data), &length, data[i].eci, dest, fncs, &have_extra_escapes); assert_equal(ret, data[i].ret, "i:%d ret %d != %d\n", i, ret, data[i].ret); if (ret < ZINT_ERROR) { - assert_equal(len, expected_length, "i:%d len %d != expected_length %d (%s)\n", - i, len, expected_length, dest); + assert_equal(length, expected_length, "i:%d length %d != expected_length %d (%s)\n", + i, length, expected_length, dest); assert_zero(strcmp(ZCCP(dest), data[i].expected), "i:%d dest (%s) != expected (%s)\n", i, dest, data[i].expected); assert_zero(memcmp(fncs, data[i].expected_fncs, expected_length), "i:%d fncs != expected_fncs\n", i); + assert_equal(have_extra_escapes, data[i].expected_extra_escapes, + "i:%d have_extra_escapes %d != expected %d\n", + i, have_extra_escapes, data[i].expected_extra_escapes); } } @@ -1313,18 +1355,20 @@ static void test_ct_set_seg_extra_escapes_eci(const testCtx *const p_ctx) { }; /* s/\/\*[ 0-9]*\*\//\=printf("\/\*%3d*\/", line(".") - line("'<")): */ static const struct item data[] = { - /* 0*/ { 0, 1, 3, { { TU("\\^1A"), 0, 0 } }, { { TU("\035A"), 2, 3 } } }, + /* 0*/ { 0, 1, 3, { { TU("\\^1A"), 0, 0 } }, { { TU("A"), 1, 3 } } }, /* 1*/ { 0, 1, 0, { { TU("\\^1A"), 0, 0 } }, { { TU("A"), 1, 3 } } }, - /* 2*/ { 0, 1, 4, { { TU("A\\^1"), 0, 0 } }, { { TU("A\035"), 2, 4 } } }, + /* 2*/ { 0, 1, 4, { { TU("A\\^1"), 0, 0 } }, { { TU("A"), 1, 4 } } }, /* 3*/ { 0, 1, 0, { { TU("A\\^1"), 0, 0 } }, { { TU("A"), 1, 3 } } }, /* 4*/ { 0, 1, 0, { { TU("a\\^1"), 0, 0 } }, { { TU("a"), 1, 3 } } }, /* 5*/ { 0, 1, 0, { { TU("12\\^1"), 0, 0 } }, { { TU("12"), 2, 3 } } }, - /* 6*/ { 0, 1, 0, { { TU("?\\^1"), 0, 0 } }, { { TU("?\035"), 2, 3 } } }, - /* 7*/ { 0, 1, 0, { { TU("1A\\^1"), 0, 0 } }, { { TU("1A\035"), 3, 3 } } }, - /* 8*/ { 0, 1, 0, { { TU("\\^1\\^^1A\\^1"), 0, 0 } }, { { TU("\\^1A\035"), 5, 3 } } }, - /* 9*/ { 0, 1, 5, { { TU("\\^1\\^^1A\\^1"), 0, 0 } }, { { TU("\035\\^1A\035"), 6, 5 } } }, - /* 10*/ { 1, 2, 27, { { TU("\\^^A"), 0, 0 }, { TU("\\^1A\\^^1\\^1B\\^"), 0, 0 } }, { { TU("\\^^A"), 0, 0 }, { TU("\035A\\^1\035B\\^"), 9, 27 } } }, - /* 11*/ { 1, 2, 0, { { TU("\\^^A"), 0, 0 }, { TU("\\^1A\\^^1\\^1B\\^"), 0, 0 } }, { { TU("\\^^A"), 0, 0 }, { TU("\035A\\^1\035B\\^"), 9, 3 } } }, + /* 6*/ { 0, 1, 5, { { TU("12\\^1"), 0, 0 } }, { { TU("12"), 2, 5 } } }, + /* 7*/ { 0, 1, 0, { { TU("?\\^1"), 0, 0 } }, { { TU("?\035"), 2, 3 } } }, + /* 8*/ { 0, 1, 0, { { TU("1A\\^1"), 0, 0 } }, { { TU("1A\035"), 3, 3 } } }, + /* 9*/ { 0, 1, 0, { { TU("\\^1\\^^1A\\^1"), 0, 0 } }, { { TU("\\^1A\035"), 5, 3 } } }, + /* 10*/ { 0, 1, 5, { { TU("\\^1\\^^1A\\^1"), 0, 0 } }, { { TU("\\^1A\035"), 5, 5 } } }, + /* 11*/ { 1, 2, 27, { { TU("\\^^A"), 0, 0 }, { TU("\\^1A\\^^1\\^1B\\^"), 0, 0 } }, { { TU("\\^^A"), 0, 0 }, { TU("\035A\\^1\035B\\^"), 9, 27 } } }, + /* 12*/ { 1, 2, 0, { { TU("\\^^A"), 0, 0 }, { TU("\\^1A\\^^1\\^1B\\^"), 0, 0 } }, { { TU("\\^^A"), 0, 0 }, { TU("\035A\\^1\035B\\^"), 9, 3 } } }, + /* 13*/ { 1, 2, 6, { { TU("\\^^A"), 0, 0 }, { TU("\\^1A\\^^1\\^1B\\^"), 0, 0 } }, { { TU("\\^^A"), 0, 0 }, { TU("\035A\\^1\035B\\^"), 9, 6 } } }, }; const int data_size = ARRAY_SIZE(data); int i, ret; @@ -1619,6 +1663,7 @@ int main(int argc, char *argv[]) { { "test_to_int", test_to_int }, { "test_to_upper", test_to_upper }, { "test_chr_cnt", test_chr_cnt }, + { "test_zero_fill", test_zero_fill }, { "test_is_chr", test_is_chr }, { "test_not_sane", test_not_sane }, { "test_not_sane_lookup", test_not_sane_lookup }, diff --git a/backend/tests/test_dmatrix.c b/backend/tests/test_dmatrix.c index 5abe4ae4..d1ab65b8 100644 --- a/backend/tests/test_dmatrix.c +++ b/backend/tests/test_dmatrix.c @@ -654,9 +654,9 @@ static void test_options(const testCtx *const p_ctx) { /* 46*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 0, 0, "" }, "__________________________________________________", 0, 32, 32, "", 10, 1, "50 data" }, /* 47*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "__________________________________________________", 0, 20, 44, "", 41, 1, "" }, /* 48*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "__________________________________________________", 0, 32, 32, "", 10, 1, "" }, - /* 49*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 0, 0, "" }, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTU", 0, 32, 32, "", 10, 0, "51 data; BWIPP different encodation" }, + /* 49*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 0, 0, "" }, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTU", 0, 32, 32, "", 10, 0, "51 data; BWIPP different encodation, same no. of codewords (begins in C40, ends single ASCII, zint vice versa)" }, /* 50*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTU", 0, 20, 44, "", 41, 0, "BWIPP DMRE requires dimensions" }, - /* 51*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, 9999, -1, { 0, 0, "" }, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTU", 0, 32, 32, "", 10, 0, "Ignored; BWIPP different encodation" }, + /* 51*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, 9999, -1, { 0, 0, "" }, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTU", 0, 32, 32, "", 10, 0, "Ignored; BWIPP different encodation, see 2 above" }, /* 52*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 0, 0, "" }, "_____________________________________________________________", 0, 32, 32, "", 10, 1, "61 data" }, /* 53*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 0, 0, "" }, "______________________________________________________________", 0, 32, 32, "", 10, 1, "62 data" }, /* 54*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 0, 0, "" }, "_______________________________________________________________", 0, 36, 36, "", 11, 1, "63 data" }, @@ -699,34 +699,35 @@ static void test_options(const testCtx *const p_ctx) { /* 91*/ { BARCODE_DATAMATRIX, EXTRA_ESCAPE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "\\^1\\^^1\\^1", 0, 12, 12, "", 2, 1, "" }, /* 92*/ { BARCODE_DATAMATRIX, EXTRA_ESCAPE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "\\^1\\^^\\^", 0, 12, 12, "", 2, 1, "" }, /* 93*/ { BARCODE_DATAMATRIX, EXTRA_ESCAPE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "\\^1\\^^\\^2", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 717: Unrecognized extra escape \"\\^2\"", 0, 1, "" }, - /* 94*/ { BARCODE_DATAMATRIX, GS1_MODE | EXTRA_ESCAPE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "[90]12", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 844: Cannot use extra escape mode in GS1 mode", 0, 1, "" }, + /* 94*/ { BARCODE_DATAMATRIX, GS1_MODE | EXTRA_ESCAPE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "[90]12", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 844: Cannot use Extra Escape mode in GS1 mode", 0, 1, "" }, /* 95*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, 9, -1, -1, -1, -1, { 0, 0, "" }, "α\\^1β", 0, 14, 14, "", 3, 1, "ECI ISO/IEC 8859-7 Greek" }, - /* 96*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, 20, -1, -1, -1, -1, { 0, 0, "" }, "あ\\^1ば", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 716: Extra escape mode requires ASCII-compatible ECI", 0, 1, "ECI Shift JIS" }, - /* 97*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, 899, -1, -1, -1, -1, { 0, 0, "" }, "A\\^1B", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 716: Extra escape mode requires ASCII-compatible ECI", 0, 1, "ECI 8-bit binary" }, - /* 98*/ { BARCODE_HIBC_DM, EXTRA_ESCAPE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "A", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 843: Can only use extra escape mode with non-variant Data Matrix", 0, 1, "" }, - /* 99*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 1, 2, "" }, "1", 0, 12, 12, "", 2, 1, "" }, - /*100*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 16, 16, "" }, "1", 0, 12, 12, "", 2, 1, "" }, - /*101*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 1, 1, "" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 720: Structured Append count '1' out of range (2 to 16)", 0, 1, "" }, - /*102*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 1, 17, "" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 720: Structured Append count '17' out of range (2 to 16)", 0, 1, "" }, - /*103*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 0, 16, "" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 721: Structured Append index '0' out of range (1 to count 16)", 0, 1, "" }, - /*104*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 17, 16, "" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 721: Structured Append index '17' out of range (1 to count 16)", 0, 1, "" }, - /*105*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 2, 3, "1001" }, "1", 0, 12, 12, "", 2, 1, "" }, - /*106*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 2, 3, "A" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 723: Invalid Structured Append ID (digits only)", 0, 1, "" }, - /*107*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 2, 3, "0" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 724: Structured Append ID1 '000' and ID2 '000' out of range (001 to 254) (ID \"000000\")", 0, 1, "" }, - /*108*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 2, 3, "1" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 725: Structured Append ID1 '000' out of range (001 to 254) (ID \"000001\")", 0, 1, "" }, - /*109*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 2, 3, "1000" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 726: Structured Append ID2 '000' out of range (001 to 254) (ID \"001000\")", 0, 1, "" }, - /*110*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 2, 3, "001255" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 726: Structured Append ID2 '255' out of range (001 to 254) (ID \"001255\")", 0, 1, "" }, - /*111*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 2, 3, "255001" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 725: Structured Append ID1 '255' out of range (001 to 254) (ID \"255001\")", 0, 1, "" }, - /*112*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 2, 3, "255255" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 724: Structured Append ID1 '255' and ID2 '255' out of range (001 to 254) (ID \"255255\")", 0, 1, "" }, - /*113*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 2, 3, "1234567" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 722: Structured Append ID length 7 too long (6 digit maximum)", 0, 1, "" }, - /*114*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, READER_INIT, { 2, 3, "1001" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 727: Cannot have Structured Append and Reader Initialisation at the same time", 0, 1, "" }, - /*115*/ { BARCODE_DATAMATRIX, ESCAPE_MODE, -1, -1, -1, -1, -1, { 2, 3, "1001" }, "[)>\\R05\\GA\\R\\E", 0, 12, 26, "", 27, 1, "Macro05/06 ignored if have Structured Append TODO: error/warning " }, - /*116*/ { BARCODE_HIBC_DM, -1, -1, -1, -1, -1, -1, { 0, 0, "" }, "1234,67", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 203: Invalid character at position 5 in input (alphanumerics, space and \"-.$/+%\" only)", 0, 1, "" }, - /*117*/ { BARCODE_HIBC_DM, -1, -1, -1, -1, -1, -1, { 0, 0, "" }, "H123ABC01234567890", 0, 12, 26, "", 27, 1, "" }, - /*118*/ { BARCODE_HIBC_DM, -1, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "H123ABC01234567890", 0, 12, 26, "", 27, 1, "" }, - /*119*/ { BARCODE_HIBC_DM, -1, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "H123ABC01234567890", 0, 18, 18, "", 5, 1, "" }, - /*120*/ { BARCODE_HIBC_DM, -1, -1, 0, -1, DM_B256_START, -1, { 0, 0, "" }, "H123ABC01234567890", 0, 20, 20, "", 6, 0, "BWIPP: same as above" }, - /*121*/ { BARCODE_HIBC_DM, -1, -1, 0, -1, DM_C40_START, -1, { 0, 0, "" }, "H123ABC01234567890", 0, 12, 26, "", 27, 1, "" }, + /* 96*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, 20, -1, -1, -1, -1, { 0, 0, "" }, "あ\\^1ば", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 716: Extra Escape mode requires ASCII-compatible ECI", 0, 1, "ECI Shift JIS" }, + /* 97*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, 899, -1, -1, -1, -1, { 0, 0, "" }, "A\\^1B", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 716: Extra Escape mode requires ASCII-compatible ECI", 0, 1, "ECI 8-bit binary" }, + /* 98*/ { BARCODE_DATAMATRIX, EXTRA_ESCAPE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "\\^1", 0, 10, 10, "", 1, 1, "" }, + /* 99*/ { BARCODE_HIBC_DM, EXTRA_ESCAPE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "A", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 846: Can only use Extra Escape mode with non-variant Data Matrix", 0, 1, "" }, + /*100*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 1, 2, "" }, "1", 0, 12, 12, "", 2, 1, "" }, + /*101*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 16, 16, "" }, "1", 0, 12, 12, "", 2, 1, "" }, + /*102*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 1, 1, "" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 720: Structured Append count '1' out of range (2 to 16)", 0, 1, "" }, + /*103*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 1, 17, "" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 720: Structured Append count '17' out of range (2 to 16)", 0, 1, "" }, + /*104*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 0, 16, "" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 721: Structured Append index '0' out of range (1 to count 16)", 0, 1, "" }, + /*105*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 17, 16, "" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 721: Structured Append index '17' out of range (1 to count 16)", 0, 1, "" }, + /*106*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 2, 3, "1001" }, "1", 0, 12, 12, "", 2, 1, "" }, + /*107*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 2, 3, "A" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 723: Invalid Structured Append ID (digits only)", 0, 1, "" }, + /*108*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 2, 3, "0" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 724: Structured Append ID1 '000' and ID2 '000' out of range (001 to 254) (ID \"000000\")", 0, 1, "" }, + /*109*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 2, 3, "1" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 725: Structured Append ID1 '000' out of range (001 to 254) (ID \"000001\")", 0, 1, "" }, + /*110*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 2, 3, "1000" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 726: Structured Append ID2 '000' out of range (001 to 254) (ID \"001000\")", 0, 1, "" }, + /*111*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 2, 3, "001255" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 726: Structured Append ID2 '255' out of range (001 to 254) (ID \"001255\")", 0, 1, "" }, + /*112*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 2, 3, "255001" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 725: Structured Append ID1 '255' out of range (001 to 254) (ID \"255001\")", 0, 1, "" }, + /*113*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 2, 3, "255255" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 724: Structured Append ID1 '255' and ID2 '255' out of range (001 to 254) (ID \"255255\")", 0, 1, "" }, + /*114*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, -1, { 2, 3, "1234567" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 722: Structured Append ID length 7 too long (6 digit maximum)", 0, 1, "" }, + /*115*/ { BARCODE_DATAMATRIX, -1, -1, -1, -1, -1, READER_INIT, { 2, 3, "1001" }, "1", ZINT_ERROR_INVALID_OPTION, -1, -1, "Error 727: Cannot have Structured Append and Reader Initialisation at the same time", 0, 1, "" }, + /*116*/ { BARCODE_DATAMATRIX, ESCAPE_MODE, -1, -1, -1, -1, -1, { 2, 3, "1001" }, "[)>\\R05\\GA\\R\\E", 0, 12, 26, "", 27, 1, "Macro05/06 ignored if have Structured Append TODO: error/warning " }, + /*117*/ { BARCODE_HIBC_DM, -1, -1, -1, -1, -1, -1, { 0, 0, "" }, "1234,67", ZINT_ERROR_INVALID_DATA, -1, -1, "Error 203: Invalid character at position 5 in input (alphanumerics, space and \"-.$/+%\" only)", 0, 1, "" }, + /*118*/ { BARCODE_HIBC_DM, -1, -1, -1, -1, -1, -1, { 0, 0, "" }, "H123ABC01234567890", 0, 12, 26, "", 27, 1, "" }, + /*119*/ { BARCODE_HIBC_DM, -1, -1, -1, -1, DM_DMRE, -1, { 0, 0, "" }, "H123ABC01234567890", 0, 12, 26, "", 27, 1, "" }, + /*120*/ { BARCODE_HIBC_DM, -1, -1, -1, -1, DM_SQUARE, -1, { 0, 0, "" }, "H123ABC01234567890", 0, 18, 18, "", 5, 1, "" }, + /*121*/ { BARCODE_HIBC_DM, -1, -1, 0, -1, DM_B256_START, -1, { 0, 0, "" }, "H123ABC01234567890", 0, 20, 20, "", 6, 0, "BWIPP: same as above" }, + /*122*/ { BARCODE_HIBC_DM, -1, -1, 0, -1, DM_C40_START, -1, { 0, 0, "" }, "H123ABC01234567890", 0, 12, 26, "", 27, 1, "" }, }; const int data_size = ARRAY_SIZE(data); int i, length, ret; @@ -861,6 +862,7 @@ static void test_reader_init(const testCtx *const p_ctx) { static const struct item data[] = { /* 0*/ { BARCODE_DATAMATRIX, UNICODE_MODE, READER_INIT, "A", 0, 10, 10, "EA 42 81 19 A4 53 21 DF", "" }, /* 1*/ { BARCODE_DATAMATRIX, GS1_MODE, READER_INIT, "[91]A", ZINT_ERROR_INVALID_OPTION, 0, 0, "Error 521: Cannot use Reader Initialisation in GS1 mode", "" }, + /* 2*/ { BARCODE_DATAMATRIX, EXTRA_ESCAPE_MODE, READER_INIT, "\\^112", ZINT_ERROR_INVALID_OPTION, 0, 0, "Error 847: Cannot use Reader Initialisation in Extra Escape mode", "" }, }; const int data_size = ARRAY_SIZE(data); int i, length, ret; @@ -1215,7 +1217,7 @@ static void test_input(const testCtx *const p_ctx) { /*232*/ { UNICODE_MODE, 16382, -1, -1, -1, -1, { 0, 0, "" }, "A", 0, 16382, 12, 12, 1, 1, "F1 BF FE 42 81 29 57 AA A0 92 B2 45", "ECI 16383 A41", 0 }, /*233*/ { UNICODE_MODE | FAST_MODE, 810899, -1, -1, -1, -1, { 0, 0, "" }, "A", 0, 810899, 12, 12, 1, 1, "F1 CC 51 05 42 BB A5 A7 8A C6 6E 0F", "ECI 810900 A41", 0 }, /*234*/ { UNICODE_MODE, 810899, -1, -1, -1, -1, { 0, 0, "" }, "A", 0, 810899, 12, 12, 1, 1, "F1 CC 51 05 42 BB A5 A7 8A C6 6E 0F", "ECI 810900 A41", 0 }, - /*235*/ { UNICODE_MODE | ESCAPE_MODE | FAST_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "[)>\\R05\\GA\\R\\E", 0, 0, 10, 10, 1, 1, "EC 42 81 5D 17 49 F6 B6", "Macro05 A41", 0 }, + /*235*/ { UNICODE_MODE | FAST_MODE | ESCAPE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "[)>\\R05\\GA\\R\\E", 0, 0, 10, 10, 1, 1, "EC 42 81 5D 17 49 F6 B6", "Macro05 A41", 0 }, /*236*/ { UNICODE_MODE | ESCAPE_MODE, -1, -1, -1, -1, -1, { 0, 0, "" }, "[)>\\R05\\GA\\R\\E", 0, 0, 10, 10, 1, 1, "EC 42 81 5D 17 49 F6 B6", "Macro05 A41", 0 }, /*237*/ { UNICODE_MODE | FAST_MODE, 0, -1, -1, -1, -1, { 0, 0, "" }, "ABCDEFGHIJKLM*", 0, 0, 16, 16, 1, 1, "EE 59 E9 6D 24 80 5F 93 9A FE 4E 2B 09 FF 50 A2 83 BE 32 E1 2F 17 1E F3", "C40 == X12, p_r_6_2_1 true", 0 }, /*238*/ { UNICODE_MODE, 0, -1, -1, -1, -1, { 0, 0, "" }, "ABCDEFGHIJKLM*", 0, 0, 16, 16, 0, 1, "42 F0 08 31 05 18 72 09 28 B3 0D 2B 63 64 96 E4 6C CE D3 47 9A 5F E8 70", "AEEEEEEEEEEEEA; BWIPP same as FAST_MODE", 0 }, @@ -1264,15 +1266,32 @@ static void test_input(const testCtx *const p_ctx) { /*281*/ { UNICODE_MODE | FAST_MODE, 0, -1, -1, -1, -1, { 0, 0, "" }, "A*B>C 1A*B>C 1*\013B>C 1A*B>C 1A*", 0, 0, 22, 22, 1, 1, "(50) EE 57 B8 0F 04 21 72 5E 21 13 8A FE 0C EE 5E 21 13 97 08 9B 64 7E FE 42 2B 81 68 FE", "process_p 0", 1 }, /*282*/ { GS1_MODE, 0, -1, -1, -1, -1, { 1, 2, "" }, "[20]01", 0, 0, 14, 14, 1, 1, "E9 0F 01 01 E8 96 83 81 DE 06 E8 61 E2 B5 19 CE A3 F8", "", 0 }, /*283*/ { GS1_MODE, 3, -1, -1, -1, -1, { 1, 2, "123234" }, "[20]01", 0, 3, 8, 32, 1, 1, "E9 0F 7B EA E8 F1 04 96 83 81 47 4D F5 6F E8 62 DA 1C 06 7F 03", "", 0 }, - /*284*/ { UNICODE_MODE | EXTRA_ESCAPE_MODE, 0, -1, -1, -1, -1, { 0, 0, "" }, "A\\^1B", 0, 0, 10, 10, 1, 1, "42 E8 43 E5 E2 F8 F5 E5", "", 1 }, - /*285*/ { UNICODE_MODE | EXTRA_ESCAPE_MODE, 0, -1, -1, -1, -1, { 0, 0, "" }, "a\\^1B", 0, 0, 10, 10, 1, 1, "62 E8 43 52 07 83 91 CF", "", 1 }, - /*286*/ { UNICODE_MODE | EXTRA_ESCAPE_MODE, 0, -1, -1, -1, -1, { 0, 0, "" }, "9\\^1A", 0, 0, 10, 10, 1, 1, "3A E8 42 12 19 12 42 F6", "", 1 }, - /*287*/ { UNICODE_MODE | EXTRA_ESCAPE_MODE, 0, -1, -1, -1, -1, { 0, 0, "" }, "99\\^1A", 0, 0, 10, 10, 1, 1, "E5 E8 42 B0 7D B7 7B 6F", "", 1 }, - /*288*/ { UNICODE_MODE | EXTRA_ESCAPE_MODE, 0, -1, -1, -1, -1, { 0, 0, "" }, "?\\^1A", 0, 0, 10, 10, 1, 1, "40 E8 42 E7 07 1A 88 26", "", 1 }, - /*289*/ { UNICODE_MODE | EXTRA_ESCAPE_MODE, 0, -1, -1, -1, -1, { 1, 2, "" }, "A\\^1B", 0, 0, 14, 14, 1, 1, "E9 0F 01 01 42 E8 43 81 F4 7B DC 13 EA 49 14 75 EA 25", "", 1 }, - /*290*/ { UNICODE_MODE | EXTRA_ESCAPE_MODE, 0, -1, -1, -1, -1, { 0, 0, "" }, "\\^1\\^1\\^1", 0, 0, 10, 10, 1, 1, "E8 E8 E8 88 6E 8B A4 5E", "", 1 }, - /*291*/ { UNICODE_MODE | FAST_MODE | EXTRA_ESCAPE_MODE, 0, -1, -1, -1, -1, { 0, 0, "" }, "ABCDEF\\^1GHIJK\\^1LM\\^1", 0, 0, 12, 26, 1, 1, "E6 59 E9 6D 24 0A 8D 86 C8 96 44 FE 4D 4E E8 81 33 8F 19 0F D7 59 96 B4 D8 43 49 D7 F3 B6", "BWIPP: different encodation", 0 }, - /*292*/ { UNICODE_MODE | EXTRA_ESCAPE_MODE, 0, -1, -1, -1, -1, { 0, 0, "" }, "ABCDEF\\^1GHIJK\\^1LM\\^1", 0, 0, 12, 26, 0, 1, "E6 59 E9 6D 24 0A 8D 86 C8 FE 4C E8 4D 4E E8 81 49 98 C6 DD DA A6 89 B1 83 08 56 71 C1 51", "BWIPP: same as FAST_MODE", 0 }, + /*284*/ { UNICODE_MODE | FAST_MODE | EXTRA_ESCAPE_MODE, 0, -1, -1, -1, -1, { 0, 0, "" }, "\\^1", 0, 0, 10, 10, 1, 1, "E8 81 46 77 14 C6 DF 66", "", 0 }, + /*285*/ { UNICODE_MODE | EXTRA_ESCAPE_MODE, 0, -1, -1, -1, -1, { 0, 0, "" }, "\\^1", 0, 0, 10, 10, 1, 1, "E8 81 46 77 14 C6 DF 66", "", 0 }, + /*286*/ { UNICODE_MODE | EXTRA_ESCAPE_MODE, 0, -1, -1, -1, -1, { 0, 0, "" }, "\\^112", 0, 0, 10, 10, 1, 1, "E8 8E 81 57 8D 75 FB 06", "", 0 }, + /*287*/ { UNICODE_MODE | FAST_MODE | EXTRA_ESCAPE_MODE, 0, -1, -1, -1, -1, { 0, 0, "" }, "A\\^1", 0, 0, 10, 10, 1, 1, "42 E8 81 93 B4 12 AB 40", "", 0 }, + /*288*/ { UNICODE_MODE | EXTRA_ESCAPE_MODE, 0, -1, -1, -1, -1, { 0, 0, "" }, "A\\^1", 0, 0, 10, 10, 1, 1, "42 E8 81 93 B4 12 AB 40", "", 0 }, + /*289*/ { UNICODE_MODE | EXTRA_ESCAPE_MODE, 0, -1, -1, -1, -1, { 0, 0, "" }, "12\\^1", 0, 0, 10, 10, 1, 1, "8E E8 81 DE FB 11 5D 6E", "", 0 }, + /*290*/ { UNICODE_MODE | EXTRA_ESCAPE_MODE, 0, -1, -1, -1, -1, { 0, 0, "" }, "A\\^1B", 0, 0, 10, 10, 1, 1, "42 E8 43 E5 E2 F8 F5 E5", "", 0 }, + /*291*/ { UNICODE_MODE | EXTRA_ESCAPE_MODE, 0, -1, -1, -1, -1, { 0, 0, "" }, "A\\^11234", 0, 0, 12, 12, 1, 1, "42 E8 8E A4 81 89 64 EB FC D4 55 50", "", 0 }, + /*292*/ { UNICODE_MODE | EXTRA_ESCAPE_MODE, 0, -1, -1, -1, -1, { 0, 0, "" }, "a\\^1B", 0, 0, 10, 10, 1, 1, "62 E8 43 52 07 83 91 CF", "", 0 }, + /*293*/ { UNICODE_MODE | EXTRA_ESCAPE_MODE, 0, -1, -1, -1, -1, { 0, 0, "" }, "9\\^1A", 0, 0, 10, 10, 1, 1, "3A E8 42 12 19 12 42 F6", "", 0 }, + /*294*/ { UNICODE_MODE | EXTRA_ESCAPE_MODE, 0, -1, -1, -1, -1, { 0, 0, "" }, "99\\^1A", 0, 0, 10, 10, 1, 1, "E5 E8 42 B0 7D B7 7B 6F", "", 0 }, + /*295*/ { UNICODE_MODE | EXTRA_ESCAPE_MODE, 0, -1, -1, -1, -1, { 0, 0, "" }, "?\\^1A", 0, 0, 10, 10, 1, 1, "40 E8 42 E7 07 1A 88 26", "", 0 }, + /*296*/ { UNICODE_MODE | EXTRA_ESCAPE_MODE, 0, -1, -1, -1, -1, { 1, 2, "" }, "A\\^1B", 0, 0, 14, 14, 1, 1, "E9 0F 01 01 42 E8 43 81 F4 7B DC 13 EA 49 14 75 EA 25", "", 0 }, + /*297*/ { UNICODE_MODE | EXTRA_ESCAPE_MODE, 0, -1, -1, -1, -1, { 0, 0, "" }, "\\^1\\^1\\^1", 0, 0, 10, 10, 1, 1, "E8 E8 E8 88 6E 8B A4 5E", "", 0 }, + /*298*/ { UNICODE_MODE | FAST_MODE | EXTRA_ESCAPE_MODE, 0, -1, -1, -1, -1, { 0, 0, "" }, "ABCDEF\\^1GHIJK\\^1LM\\^1", 0, 0, 12, 26, 1, 1, "E6 59 E9 6D 24 0A 8D 86 C8 96 44 FE 4D 4E E8 81 33 8F 19 0F D7 59 96 B4 D8 43 49 D7 F3 B6", "", 0 }, + /*299*/ { UNICODE_MODE | EXTRA_ESCAPE_MODE, 0, -1, -1, -1, -1, { 0, 0, "" }, "ABCDEF\\^1GHIJK\\^1LM\\^1", 0, 0, 12, 26, 0, 1, "E6 59 E9 6D 24 0A 8D 86 C8 FE 4C E8 4D 4E E8 81 49 98 C6 DD DA A6 89 B1 83 08 56 71 C1 51", "BWIPP: same as FAST_MODE", 0 }, + /*300*/ { UNICODE_MODE | FAST_MODE | EXTRA_ESCAPE_MODE, 0, -1, -1, -1, -1, { 0, 0, "" }, "?\\^1123456ABC\\^1\\^^DEXY\\^11234\\^^\\^1", 0, 0, 20, 20, 1, 1, "(40) 40 E8 8E A4 BA 42 43 44 E8 5D 5F 45 46 59 5A E8 8E A4 5D 5F E8 81 F9 B4 2C 94 C0 29", "", 0 }, + /*301*/ { UNICODE_MODE | EXTRA_ESCAPE_MODE, 0, -1, -1, -1, -1, { 0, 0, "" }, "?\\^1123456ABC\\^1\\^^DEXY\\^11234\\^^\\^1", 0, 0, 20, 20, 1, 1, "(40) 40 E8 8E A4 BA 42 43 44 E8 5D 5F 45 46 59 5A E8 8E A4 5D 5F E8 81 F9 B4 2C 94 C0 29", "", 0 }, + /*302*/ { UNICODE_MODE | FAST_MODE | EXTRA_ESCAPE_MODE, 4, -1, -1, -1, -1, { 0, 0, "" }, "\\^1ABCD\\^1", 0, 4, 14, 14, 1, 1, "E8 F1 05 42 43 44 45 E8 B0 05 33 74 B3 6E 79 FB 4F D2", "", 0 }, + /*303*/ { UNICODE_MODE | EXTRA_ESCAPE_MODE, 4, -1, -1, -1, -1, { 0, 0, "" }, "\\^1ABCD\\^1", 0, 4, 14, 14, 0, 1, "E8 F1 05 F0 04 20 C4 E8 C8 58 2A 5C 98 0A 7B C6 2B 65", "BWIPP: same as FAST_MODE", 1 }, + /*304*/ { UNICODE_MODE | FAST_MODE | EXTRA_ESCAPE_MODE, 5, -1, -1, -1, -1, { 0, 0, "" }, "A\\^112\\^1Ħ", 0, 5, 14, 14, 1, 1, "42 E8 F1 06 8E E8 EB 22 94 9C C7 17 9E 51 80 CB 86 1A", "", 0 }, + /*305*/ { UNICODE_MODE | EXTRA_ESCAPE_MODE, 5, -1, -1, -1, -1, { 0, 0, "" }, "A\\^112\\^1Ħ", 0, 5, 14, 14, 1, 1, "42 E8 F1 06 8E E8 EB 22 94 9C C7 17 9E 51 80 CB 86 1A", "", 0 }, + /*306*/ { UNICODE_MODE | FAST_MODE | EXTRA_ESCAPE_MODE, 3, -1, -1, -1, -1, { 1, 2, "001001" }, "\\^11234\\^1", 0, 3, 8, 32, 1, 1, "E9 0F 01 01 E8 F1 04 8E A4 E8 C1 D2 2C 58 06 98 9E 54 39 C0 48", "", 0 }, + /*307*/ { UNICODE_MODE | EXTRA_ESCAPE_MODE, 3, -1, -1, -1, -1, { 1, 2, "001001" }, "\\^11234\\^1", 0, 3, 8, 32, 1, 1, "E9 0F 01 01 E8 F1 04 8E A4 E8 C1 D2 2C 58 06 98 9E 54 39 C0 48", "", 0 }, + /*308*/ { UNICODE_MODE | FAST_MODE | EXTRA_ESCAPE_MODE, 4, -1, -1, -1, -1, { 1, 2, "001001" }, "12\\^11234\\^1", 0, 4, 16, 16, 1, 1, "E9 0F 01 01 8E E8 F1 05 8E A4 E8 81 5B 4D 22 4E 82 0A 9C B4 32 CF 84 EB", "", 0 }, + /*309*/ { UNICODE_MODE | EXTRA_ESCAPE_MODE, 4, -1, -1, -1, -1, { 1, 2, "001001" }, "12\\^11234\\^1", 0, 4, 16, 16, 1, 1, "E9 0F 01 01 8E E8 F1 05 8E A4 E8 81 5B 4D 22 4E 82 0A 9C B4 32 CF 84 EB", "", 0 }, }; const int data_size = ARRAY_SIZE(data); int i, length, ret; @@ -6781,20 +6800,28 @@ static void test_ct(const testCtx *const p_ctx) { /* 8*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 26, -1, "é", -1, 0, 26, "", -1, 0 }, /* 9*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 26, BARCODE_CONTENT_SEGS, "é", -1, 0, 26, "é", -1, 26 }, /* 10*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 899, -1, "é", -1, 0, 899, "", -1, 0 }, - /* 11*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, -1, -1, "\\^1é", -1, 0, 0, "", -1, 0 }, - /* 12*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, -1, BARCODE_CONTENT_SEGS, "\\^1é", -1, 0, 0, "é", -1, 3 }, - /* 13*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 899, BARCODE_CONTENT_SEGS, "é", -1, 0, 899, "é", -1, 899 }, - /* 14*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, 26, -1, "é\\^1", -1, 0, 26, "", -1, 0 }, - /* 15*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, 26, BARCODE_CONTENT_SEGS, "é\\^1", -1, 0, 26, "é\035", -1, 26 }, - /* 16*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, 26, -1, "\\^^é\\^1\\^1\\^", -1, 0, 26, "", -1, 0 }, - /* 17*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, 26, BARCODE_CONTENT_SEGS, "\\^^é\\^1\\^1\\^", -1, 0, 26, "\\^é\035\035\\^", -1, 26 }, - /* 18*/ { BARCODE_DATAMATRIX, GS1_MODE, -1, -1, "[01]04912345123459[15]970331[30]128[10]ABC123", -1, 0, 0, "", -1, 0 }, - /* 19*/ { BARCODE_DATAMATRIX, GS1_MODE, -1, BARCODE_CONTENT_SEGS, "[01]04912345123459[15]970331[30]128[10]ABC123", -1, 0, 0, "01049123451234591597033130128\03510ABC123", -1, 3 }, - /* 20*/ { BARCODE_DATAMATRIX, GS1_MODE, 28, BARCODE_CONTENT_SEGS, "[01]04912345123459[15]970331[30]128[10]ABC123", -1, 0, 28, "01049123451234591597033130128\03510ABC123", -1, 3 }, /* Note: content seg ECI remains at default 3 */ - /* 21*/ { BARCODE_DATAMATRIX, GS1_MODE, -1, -1, "https://example.com/01/09506000134369", -1, 0, 0, "", -1, 0 }, - /* 22*/ { BARCODE_DATAMATRIX, GS1_MODE, -1, BARCODE_CONTENT_SEGS, "https://example.com/01/09506000134369", -1, 0, 0, "https://example.com/01/09506000134369", -1, 3 }, - /* 23*/ { BARCODE_HIBC_DM, UNICODE_MODE, -1, -1, "H123ABC01234567890", -1, 0, 0, "", -1, 0 }, - /* 24*/ { BARCODE_HIBC_DM, UNICODE_MODE, -1, BARCODE_CONTENT_SEGS, "H123ABC01234567890", -1, 0, 0, "+H123ABC01234567890D", -1, 3 }, + /* 11*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 899, BARCODE_CONTENT_SEGS, "é", -1, 0, 899, "é", -1, 899 }, + /* 12*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, -1, -1, "\\^1é", -1, 0, 0, "", -1, 0 }, + /* 13*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, -1, BARCODE_CONTENT_SEGS, "\\^1é", -1, 0, 0, "é", -1, 3 }, + /* 14*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, 3, -1, "\\^1é", -1, 0, 3, "", -1, 3 }, + /* 15*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, 3, BARCODE_CONTENT_SEGS, "\\^1é", -1, 0, 3, "é", -1, 3 }, + /* 16*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, 3, -1, "A\\^1é", -1, 0, 3, "", -1, 3 }, + /* 17*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, 3, BARCODE_CONTENT_SEGS, "A\\^1é", -1, 0, 3, "Aé", -1, 3 }, + /* 18*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, 9, -1, "12\\^1α", -1, 0, 9, "", -1, 9 }, + /* 19*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, 9, BARCODE_CONTENT_SEGS, "12\\^1α", -1, 0, 9, "12α", -1, 9 }, + /* 20*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, 3, -1, "1\\^1é", -1, 0, 3, "", -1, 3 }, + /* 21*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, 3, BARCODE_CONTENT_SEGS, "1\\^1é", -1, 0, 3, "1\035é", -1, 3 }, + /* 22*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, 26, -1, "é\\^1", -1, 0, 26, "", -1, 0 }, + /* 23*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, 26, BARCODE_CONTENT_SEGS, "é\\^1", -1, 0, 26, "é\035", -1, 26 }, + /* 24*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, 26, -1, "\\^^é\\^1\\^1\\^", -1, 0, 26, "", -1, 0 }, + /* 25*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, 26, BARCODE_CONTENT_SEGS, "\\^^é\\^1\\^1\\^", -1, 0, 26, "\\^é\035\035\\^", -1, 26 }, + /* 26*/ { BARCODE_DATAMATRIX, GS1_MODE, -1, -1, "[01]04912345123459[15]970331[30]128[10]ABC123", -1, 0, 0, "", -1, 0 }, + /* 27*/ { BARCODE_DATAMATRIX, GS1_MODE, -1, BARCODE_CONTENT_SEGS, "[01]04912345123459[15]970331[30]128[10]ABC123", -1, 0, 0, "01049123451234591597033130128\03510ABC123", -1, 3 }, + /* 28*/ { BARCODE_DATAMATRIX, GS1_MODE, 28, BARCODE_CONTENT_SEGS, "[01]04912345123459[15]970331[30]128[10]ABC123", -1, 0, 28, "01049123451234591597033130128\03510ABC123", -1, 3 }, /* Note: content seg ECI remains at default 3 */ + /* 29*/ { BARCODE_DATAMATRIX, GS1_MODE, -1, -1, "https://example.com/01/09506000134369", -1, 0, 0, "", -1, 0 }, + /* 30*/ { BARCODE_DATAMATRIX, GS1_MODE, -1, BARCODE_CONTENT_SEGS, "https://example.com/01/09506000134369", -1, 0, 0, "https://example.com/01/09506000134369", -1, 3 }, + /* 31*/ { BARCODE_HIBC_DM, UNICODE_MODE, -1, -1, "H123ABC01234567890", -1, 0, 0, "", -1, 0 }, + /* 32*/ { BARCODE_HIBC_DM, UNICODE_MODE, -1, BARCODE_CONTENT_SEGS, "H123ABC01234567890", -1, 0, 0, "+H123ABC01234567890D", -1, 3 }, }; const int data_size = ARRAY_SIZE(data); int i, length, ret; diff --git a/backend/tests/test_library.c b/backend/tests/test_library.c index 689607db..8af660f5 100644 --- a/backend/tests/test_library.c +++ b/backend/tests/test_library.c @@ -764,25 +764,35 @@ static void test_escape_char_process(const testCtx *const p_ctx) { /* 77*/ { BARCODE_DATAMATRIX, UNICODE_MODE, 35, "\\U10FFFF", "", 0, 14, "F1 24 EB 80 EB 80 11 01 17 BA C6 05 9F 4C EA E5 18 31", 0, "" }, /* 78*/ { BARCODE_GS1_128_CC, GS1_MODE, -1, "[20]10", "[10]A", 0, 99, "(7) 105 102 20 10 100 59 106", 0, "" }, /* 79*/ { BARCODE_GS1_128_CC, GS1_MODE, -1, "[2\\x30]1\\d048", "[\\x310]\\x41", 0, 99, "(7) 105 102 20 10 100 59 106", 1, "" }, - /* 80*/ { BARCODE_AZTEC, DATA_MODE, -1, "\\^11", "", ZINT_ERROR_INVALID_DATA, 0, "Error 798: Escape '\\^' only valid in extra escape mode", 0, "" }, - /* 81*/ { BARCODE_AZTEC, DATA_MODE | EXTRA_ESCAPE_MODE, -1, "\\^11", "", ZINT_ERROR_INVALID_DATA, 0, "Error 213: Extra escape '\\^' not valid for this symbology and/or input mode", 0, "" }, - /* 82*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, "\\^11", "", ZINT_ERROR_INVALID_DATA, 0, "Error 798: Escape '\\^' only valid in extra escape mode", 0, "" }, - /* 83*/ { BARCODE_DATAMATRIX, GS1_MODE, -1, "\\^11", "", ZINT_ERROR_INVALID_DATA, 0, "Error 798: Escape '\\^' only valid in extra escape mode", 0, "" }, - /* 84*/ { BARCODE_DATAMATRIX, DATA_MODE | EXTRA_ESCAPE_MODE, -1, "\\^11", "", 0, 10, "E8 32 81 98 94 7B 7F 6D", 0, "" }, - /* 85*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, -1, "\\^A1", "", ZINT_ERROR_INVALID_DATA, 0, "Error 717: Unrecognized extra escape \"\\^A\"", 0, "" }, - /* 86*/ { BARCODE_DATAMATRIX, GS1_MODE | EXTRA_ESCAPE_MODE, -1, "\\^11", "", ZINT_ERROR_INVALID_DATA, 0, "Error 213: Extra escape '\\^' not valid for this symbology and/or input mode", 0, "Not allowed of DATAMATRIX in GS1_MODE" }, - /* 87*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, 18, "A\\^1B", "", 0, 12, "F1 13 42 E8 43 C3 1B 02 5A 6B 37 CC", 0, "" }, - /* 88*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, 20, "A\\^1B", "", ZINT_ERROR_INVALID_OPTION, 0, "Error 716: Extra escape mode requires ASCII-compatible ECI", 0, "" }, - /* 89*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, 20, "バ\\^1ーコ\\^1ード\\^1東京\\^1都", "", ZINT_ERROR_INVALID_OPTION, 0, "Error 716: Extra escape mode requires ASCII-compatible ECI", 0, "" }, - /* 90*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, 25, "A\\^1B", "", ZINT_ERROR_INVALID_OPTION, 0, "Error 716: Extra escape mode requires ASCII-compatible ECI", 0, "" }, - /* 91*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, 33, "A\\^1B", "", ZINT_ERROR_INVALID_OPTION, 0, "Error 716: Extra escape mode requires ASCII-compatible ECI", 0, "" }, - /* 92*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, 170, "A\\^1B", "", ZINT_ERROR_INVALID_DATA, 0, "Error 244: Invalid character in input for ECI '170'", 0, "" }, - /* 93*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, 899, "A\\^1B", "", ZINT_ERROR_INVALID_OPTION, 0, "Error 716: Extra escape mode requires ASCII-compatible ECI", 0, "" }, - /* 94*/ { BARCODE_CODE128, DATA_MODE, -1, "\\^A1", "", ZINT_ERROR_INVALID_DATA, 0, "Error 798: Escape '\\^' only valid in extra escape mode", 0, "" }, - /* 95*/ { BARCODE_CODE128, DATA_MODE | EXTRA_ESCAPE_MODE, -1, "\\^A1", "", 0, 46, "(4) 103 17 17 106", 0, "" }, - /* 96*/ { BARCODE_CODE128, EXTRA_ESCAPE_MODE, -1, "\\^", "", 0, 57, "(5) 104 60 62 82 106", 0, "Partial special escape '\\^' at end allowed" }, - /* 97*/ { BARCODE_CODE128, EXTRA_ESCAPE_MODE, -1, "\\^D1", "", ZINT_ERROR_INVALID_DATA, 0, "Error 348: Unrecognized extra escape \"\\^D\"", 0, "" }, - /* 98*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, "\\w", "", ZINT_ERROR_INVALID_DATA, 0, "Error 234: Unrecognised escape character '\\w' in input", 0, "" }, + /* 80*/ { BARCODE_AZTEC, DATA_MODE, -1, "\\^11", "", ZINT_ERROR_INVALID_DATA, 0, "Error 798: Escape '\\^' only valid in Extra Escape mode", 0, "" }, + /* 81*/ { BARCODE_AZTEC, GS1_MODE, -1, "\\^11", "", ZINT_ERROR_INVALID_DATA, 0, "Error 798: Escape '\\^' only valid in Extra Escape mode", 0, "" }, + /* 82*/ { BARCODE_AZTEC, DATA_MODE | EXTRA_ESCAPE_MODE, -1, "\\^11", "", 0, 15, "(102) 31 31 30 30 31 31 30 31 31 31 30 30 31 31 30 30 31 31 30 31 30 30 31 30 30 30 30 30", 0, "" }, + /* 83*/ { BARCODE_AZTEC, DATA_MODE, -1, "\\\\^11", "", 0, 15, "(102) 30 31 31 30 31 31 31 30 31 31 30 30 31 31 31 31 30 31 31 30 31 31 30 30 31 31 31 31", 0, "Note double-backslash caret passed thru as backslash caret but does not error in non-EXTRA_ESCAPE_MODE, treated literally" }, + /* 84*/ { BARCODE_AZTEC, DATA_MODE | EXTRA_ESCAPE_MODE, -1, "\\\\^11", "", 0, 15, "(102) 31 31 30 30 31 31 30 31 31 31 30 30 31 31 30 30 31 31 30 31 30 30 31 30 30 30 30 30", 0, "Treated as backslash caret 1 (FNC1)" }, + /* 85*/ { BARCODE_AZTEC, DATA_MODE | EXTRA_ESCAPE_MODE, -1, "\\\\^A1", "", ZINT_ERROR_INVALID_DATA, 0, "Error 717: Unrecognized extra escape \"\\^A\"", 0, "" }, + /* 86*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, "\\^11", "", ZINT_ERROR_INVALID_DATA, 0, "Error 798: Escape '\\^' only valid in Extra Escape mode", 0, "" }, + /* 87*/ { BARCODE_DATAMATRIX, GS1_MODE, -1, "\\^11", "", ZINT_ERROR_INVALID_DATA, 0, "Error 798: Escape '\\^' only valid in Extra Escape mode", 0, "" }, + /* 88*/ { BARCODE_DATAMATRIX, DATA_MODE | EXTRA_ESCAPE_MODE, -1, "\\^11", "", 0, 10, "E8 32 81 98 94 7B 7F 6D", 0, "" }, + /* 89*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, -1, "\\^A1", "", ZINT_ERROR_INVALID_DATA, 0, "Error 717: Unrecognized extra escape \"\\^A\"", 0, "" }, + /* 90*/ { BARCODE_DATAMATRIX, GS1_MODE | EXTRA_ESCAPE_MODE, -1, "\\^11", "", ZINT_ERROR_INVALID_DATA, 0, "Error 213: Extra escape '\\^' not valid for this symbology and/or input mode", 0, "Not allowed of DATAMATRIX in GS1_MODE" }, + /* 91*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, "\\\\^11", "", 0, 10, "5D 5F 8D 5C FB D1 69 3F", 0, "Note double-backslash caret passed thru as backslash caret but does not error in non-EXTRA_ESCAPE_MODE, treated literally" }, + /* 92*/ { BARCODE_DATAMATRIX, DATA_MODE | EXTRA_ESCAPE_MODE, -1, "\\\\^11", "", 0, 10, "E8 32 81 98 94 7B 7F 6D", 0, "Treated as backslash caret 1 (FNC1)" }, + /* 93*/ { BARCODE_DATAMATRIX, DATA_MODE | EXTRA_ESCAPE_MODE, -1, "\\\\^B2", "", ZINT_ERROR_INVALID_DATA, 0, "Error 717: Unrecognized extra escape \"\\^B\"", 0, "Passed thru as backslash caret B" }, + /* 94*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, 18, "A\\^1B", "", 0, 12, "42 E8 F1 13 43 F5 A4 26 80 68 7A AD", 0, "" }, + /* 95*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, 20, "A\\^1B", "", ZINT_ERROR_INVALID_OPTION, 0, "Error 716: Extra Escape mode requires ASCII-compatible ECI", 0, "" }, + /* 96*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, 20, "バ\\^1ーコ\\^1ード\\^1東京\\^1都", "", ZINT_ERROR_INVALID_OPTION, 0, "Error 716: Extra Escape mode requires ASCII-compatible ECI", 0, "" }, + /* 97*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, 25, "A\\^1B", "", ZINT_ERROR_INVALID_OPTION, 0, "Error 716: Extra Escape mode requires ASCII-compatible ECI", 0, "" }, + /* 98*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, 33, "A\\^1B", "", ZINT_ERROR_INVALID_OPTION, 0, "Error 716: Extra Escape mode requires ASCII-compatible ECI", 0, "" }, + /* 99*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, 170, "A\\^1B", "", ZINT_ERROR_INVALID_DATA, 0, "Error 244: Invalid character in input for ECI '170'", 0, "" }, + /*100*/ { BARCODE_DATAMATRIX, UNICODE_MODE | EXTRA_ESCAPE_MODE, 899, "A\\^1B", "", ZINT_ERROR_INVALID_OPTION, 0, "Error 716: Extra Escape mode requires ASCII-compatible ECI", 0, "" }, + /*101*/ { BARCODE_DATAMATRIX, DATA_MODE, -1, "\\w", "", ZINT_ERROR_INVALID_DATA, 0, "Error 234: Unrecognised escape character '\\w' in input", 0, "" }, + /*102*/ { BARCODE_CODE128, DATA_MODE, -1, "\\^A1", "", ZINT_ERROR_INVALID_DATA, 0, "Error 798: Escape '\\^' only valid in Extra Escape mode", 0, "" }, + /*103*/ { BARCODE_CODE128, DATA_MODE | EXTRA_ESCAPE_MODE, -1, "\\^A1", "", 0, 46, "(4) 103 17 17 106", 0, "" }, + /*104*/ { BARCODE_CODE128, EXTRA_ESCAPE_MODE, -1, "\\^", "", 0, 57, "(5) 104 60 62 82 106", 0, "Partial special escape '\\^' at end allowed" }, + /*105*/ { BARCODE_CODE128, EXTRA_ESCAPE_MODE, -1, "\\^D1", "", ZINT_ERROR_INVALID_DATA, 0, "Error 348: Unrecognized extra escape \"\\^D\"", 0, "" }, + /*106*/ { BARCODE_CODE128, DATA_MODE, -1, "\\\\^A1", "", 0, 79, "(7) 104 60 62 33 17 43 106", 0, "Treated as literal backslash caret A" }, + /*107*/ { BARCODE_CODE128, DATA_MODE | EXTRA_ESCAPE_MODE, -1, "\\\\^A1", "", 0, 46, "(4) 103 17 17 106", 0, "Treated as backslash caret A (manual Code Set A)" }, + /*108*/ { BARCODE_CODE128, DATA_MODE, -1, "\\c", "", ZINT_ERROR_INVALID_DATA, 0, "Error 234: Unrecognised escape character '\\c' in input", 0, "" }, }; const int data_size = ARRAY_SIZE(data); int i, length, ret; diff --git a/backend/tests/test_pdf417.c b/backend/tests/test_pdf417.c index 2721cde1..5c073b70 100644 --- a/backend/tests/test_pdf417.c +++ b/backend/tests/test_pdf417.c @@ -1,6 +1,6 @@ /* libzint - the open source barcode library - Copyright (C) 2019-2025 Robin Stuart + Copyright (C) 2019-2026 Robin Stuart Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions diff --git a/backend/tests/testcommon.c b/backend/tests/testcommon.c index aec5ffc3..8cfeb102 100644 --- a/backend/tests/testcommon.c +++ b/backend/tests/testcommon.c @@ -2385,9 +2385,9 @@ static const char *testUtilBwippName(int index, const struct zint_symbol *symbol { "auspost", BARCODE_AUSPOST, 63, 0, 0, 0, 0, 0, }, { "", -1, 64, 0, 0, 0, 0, 0, }, { "", -1, 65, 0, 0, 0, 0, 0, }, - { "", BARCODE_AUSREPLY, 66, 0, 0, 0, 0, 0, }, - { "", BARCODE_AUSROUTE, 67, 0, 0, 0, 0, 0, }, - { "", BARCODE_AUSREDIRECT, 68, 0, 0, 0, 0, 0, }, + { "auspost", BARCODE_AUSREPLY, 66, 0, 0, 0, 0, 0, }, + { "auspost", BARCODE_AUSROUTE, 67, 0, 0, 0, 0, 0, }, + { "auspost", BARCODE_AUSREDIRECT, 68, 0, 0, 0, 0, 0, }, { "isbn", BARCODE_ISBNX, 69, 0, 1, 0, 0, 1 /*gs1_cvt*/, }, { "royalmail", BARCODE_RM4SCC, 70, 0, 0, 0, 0, 0, }, { "datamatrix", BARCODE_DATAMATRIX, 71, 1, 1, 1, 1, 0, }, @@ -2672,7 +2672,8 @@ static char *testUtilBwippCvtGS1Data(char *bwipp_data, const int bwipp_data_size /* Returns 1 if `symbol` can process EXTRA_ESCAPE_MODE */ static int supports_extra_escape_mode(const struct zint_symbol *const symbol) { return symbol->symbology == BARCODE_CODE128 - || (symbol->symbology == BARCODE_DATAMATRIX && (symbol->input_mode & 0x07) != GS1_MODE); + || ((symbol->symbology == BARCODE_AZTEC || symbol->symbology == BARCODE_DATAMATRIX) + && (symbol->input_mode & 0x07) != GS1_MODE); } #define z_isxdigit(c) (z_isdigit(c) || ((c) >= 'A' && (c) <= 'F') || ((c) >= 'a' && (c) <= 'f')) @@ -2691,9 +2692,24 @@ static char *testUtilBwippEscape(const struct zint_symbol *const symbol, char *b int have_done_single_caret = 0; /* Flag to help debug escaping of carets */ if (eci) { - sprintf(bwipp_data, "^ECI%06d", eci); + int position_fnc1; + /* Check if have extra escape position FNC1s first, and put before ECI if so */ + if (is_extra_escaped && (position_fnc1 = z_extra_escape_position_fnc1(d, length))) { + assert(b + 7 < be); + if (position_fnc1 == 4) { + *b++ = d[0]; + } else if (position_fnc1 == 5) { + *b++ = d[0]; + *b++ = d[1]; + } + strcpy(b, "^FNC1"); + b += 5; + d += position_fnc1; + } + assert(b + 10 < be); + sprintf(b, "^ECI%06d", eci); *parsefnc = 1; - b = bwipp_data + 10; + b += 10; } while (b < be && d < de) { @@ -2933,7 +2949,7 @@ static char *testUtilBwippUtf8Convert(const int index, const int symbology, cons /* Create bwipp_dump.ps command and run */ int testUtilBwipp(int index, const struct zint_symbol *symbol, int option_1, int option_2, int option_3, - const char *data, int length, const char *primary, char *buffer, int buffer_size, int *p_parsefnc) { + const char *data, int length, const char *primary, char *buffer, int buffer_size, const int *p_parsefnc) { static const char fn[] = "testUtilBwipp"; static const char cmd_fmt[] = "gs -dNOPAUSE -dBATCH -dNODISPLAY -q -sb=%s -sd='%s'" " backend/tests/tools/bwipp_dump.ps"; @@ -3232,7 +3248,8 @@ int testUtilBwipp(int index, const struct zint_symbol *symbol, int option_1, int } } else if (symbology == BARCODE_POSTNET || symbology == BARCODE_PLANET || symbology == BARCODE_RM4SCC || symbology == BARCODE_JAPANPOST || symbology == BARCODE_KIX || symbology == BARCODE_DAFT - || symbology == BARCODE_USPS_IMAIL || symbology == BARCODE_AUSPOST + || symbology == BARCODE_USPS_IMAIL + || (symbology >= BARCODE_AUSPOST && symbology <= BARCODE_AUSREDIRECT) || symbology == BARCODE_PHARMA_TWO) { for (r = 0; r < symbol->rows; r++) bwipp_row_height[r] = 1; /* Zap */ if (symbology == BARCODE_RM4SCC || symbology == BARCODE_KIX || symbology == BARCODE_JAPANPOST @@ -3243,32 +3260,26 @@ int testUtilBwipp(int index, const struct zint_symbol *symbol, int option_1, int if (dash) { memmove(dash, dash + 1, strlen(dash)); } - } else if (symbology == BARCODE_AUSPOST) { + } else if (symbology >= BARCODE_AUSPOST && symbology <= BARCODE_AUSREDIRECT) { const char *prefix; - if (data_len == 8) { - prefix = "11"; - } else if (data_len == 13 || data_len == 16) { - prefix = "59"; - if (data_len == 16) { - sprintf(bwipp_opts_buf + strlen(bwipp_opts_buf), "%scustinfoenc=numeric", - strlen(bwipp_opts_buf) ? " " : ""); - bwipp_opts = bwipp_opts_buf; - } + if (symbology != BARCODE_AUSPOST || data_len <= 8) { + static const char zeroes[] = "0000000"; + char buf[10 + 1]; + prefix = symbology == BARCODE_AUSREPLY ? "45" : symbology == BARCODE_AUSROUTE ? "87" + : symbology == BARCODE_AUSREDIRECT ? "92" : "11"; + sprintf(buf, "%s%.*s%s", prefix, 8 - data_len, zeroes, bwipp_data); + memcpy(bwipp_data, buf, 10 + 1); } else { - prefix = "62"; - if (data_len == 23) { + int not_all_digits = z_not_sane(NEON_F, ZCUCP(bwipp_data), data_len); + prefix = data_len > 16 || (data_len > 13 && not_all_digits) ? "62" : "59"; + if (!not_all_digits) { sprintf(bwipp_opts_buf + strlen(bwipp_opts_buf), "%scustinfoenc=numeric", strlen(bwipp_opts_buf) ? " " : ""); bwipp_opts = bwipp_opts_buf; } + memmove(bwipp_data + 2, bwipp_data, data_len + 1); + memmove(bwipp_data, prefix, 2); } - /* Check for Null - for when supported by BWIPP */ - for (i = 0; i < 8 && data[i] == '0'; i++); - if (i == 8) { - prefix = "00"; - } - memmove(bwipp_data + 2, bwipp_data, data_len + 1); - memmove(bwipp_data, prefix, 2); } } else if (symbology == BARCODE_CODE128AB) { sprintf(bwipp_opts_buf + strlen(bwipp_opts_buf), "%ssuppressc", strlen(bwipp_opts_buf) ? " " : ""); @@ -4424,7 +4435,7 @@ int testUtilZXingCPPCmp(struct zint_symbol *symbol, char *msg, char *cmp_buf, in /* FNC1 in 1st position treated as GS1 and in 2nd position AIM, neither transmitted - need to skip AIM (single alphabetic or Code Set C double digit) TODO: guessing about whether in Code Set C for double digit */ - if (symbol->eci || have_position_fnc1 || j > 2 || (j == 1 && !z_isalpha(escaped[0])) + if (have_position_fnc1 || j > 2 || (j == 1 && !z_isalpha(escaped[0])) || (j == 2 && !(z_isdigit(escaped[0]) && z_isdigit(escaped[1]) && !have_manual_ab))) { /* Probably not AIM */ @@ -4553,14 +4564,9 @@ int testUtilZXingCPPCmp(struct zint_symbol *symbol, char *msg, char *cmp_buf, in } } else if (symbology == BARCODE_DPLEIT || symbology == BARCODE_DPIDENT) { const int len = symbology == BARCODE_DPLEIT ? 13 : 11; - int zeroes = len - expected_len; unsigned int count = 0; int factor = 4; - for (i = 0; i < zeroes; i++) { - c25inter[i] = '0'; - } - memcpy(c25inter + zeroes, expected, expected_len); - expected_len += zeroes; + expected_len += z_zero_fill(ZCUCP(expected), expected_len, ZUCP(c25inter), len); for (i = len - 1; i >= 0; i--) { count += factor * z_ctoi(c25inter[i]); factor ^= 0x0D; /* Toggles 4 and 9 */ @@ -4569,12 +4575,7 @@ int testUtilZXingCPPCmp(struct zint_symbol *symbol, char *msg, char *cmp_buf, in c25inter[++expected_len] = '\0'; expected = c25inter; } else if (symbology == BARCODE_ITF14) { - int zeroes = 13 - expected_len; - for (i = 0; i < zeroes; i++) { - c25inter[i] = '0'; - } - memcpy(c25inter + zeroes, expected, expected_len); - expected_len += zeroes; + expected_len += z_zero_fill(ZCUCP(expected), expected_len, ZUCP(c25inter), 13); c25inter[expected_len] = zint_gs1_check_digit((const unsigned char *) c25inter, 13); c25inter[++expected_len] = '\0'; expected = c25inter; @@ -4664,11 +4665,9 @@ int testUtilZXingCPPCmp(struct zint_symbol *symbol, char *msg, char *cmp_buf, in } else if (symbology == BARCODE_EAN14 || symbology == BARCODE_NVE18) { int len = symbology == BARCODE_NVE18 ? 17 : 13; - int zeroes = expected_len < len ? len - expected_len: 0; ean14_nve18[0] = '0'; ean14_nve18[1] = symbology == BARCODE_NVE18 ? '0' : '1'; - memset(ean14_nve18 + 2, '0', zeroes); - memcpy(ean14_nve18 + 2 + zeroes, expected, expected_len); + z_zero_fill(ZCUCP(expected), expected_len, ZUCP(ean14_nve18 + 2), len); ean14_nve18[len + 2] = zint_gs1_check_digit((unsigned char *) (ean14_nve18 + 2), len); expected = ean14_nve18; expected_len = len + 3; diff --git a/backend/tests/testcommon.h b/backend/tests/testcommon.h index 8ec16eb2..ca49ad0d 100644 --- a/backend/tests/testcommon.h +++ b/backend/tests/testcommon.h @@ -215,7 +215,7 @@ int testUtilVerifyTiffInfo(const char *filename, int debug); int testUtilCanBwipp(int index, const struct zint_symbol *symbol, int option_1, int option_2, int option_3, int debug); int testUtilBwipp(int index, const struct zint_symbol *symbol, int option_1, int option_2, int option_3, - const char *data, int length, const char *primary, char *buffer, int buffer_size, int *p_parsefnc); + const char *data, int length, const char *primary, char *buffer, int buffer_size, const int *p_parsefnc); int testUtilBwippSegs(int index, struct zint_symbol *symbol, int option_1, int option_2, int option_3, const struct zint_seg segs[], const int seg_count, const char *primary, char *buffer, int buffer_size); int testUtilBwippCmp(const struct zint_symbol *symbol, char *msg, char *cmp_buf, const char *expected); diff --git a/backend/tests/tools/bwipp_dump.ps.tar.xz b/backend/tests/tools/bwipp_dump.ps.tar.xz index 25640ba26ac91208b3324420585c4a307db14fdf..d8202c3a2aebd86a3a71f12629f4e013ef6ecb66 100644 GIT binary patch literal 166352 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

+Cgn`7Rt`;lvV?0D!9suvTal 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

mi1XB!vsZqKYRByVWUhh>d>6&qpk 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�VUE;VtdV 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%0DqSG)=I9-w&KiQOkYMat@C z%^5a2J1YsH>CULiilsHb12_# zxG~HZJ=#$PZ46PHb`}#BOKzkhgdipgJ^t0gPR1q6dWv=0=<~iC6JX~^JH|=P1Xul@ zrwSpqIixd*Y^(53ZyOS4Qb@vThfs$&YIfFqgh`gH$S+?|)*XihzPG>(+C|1BHzb<5 z?!v%RG)bH8uz!qSyoGY3#v4&v5?2Ckd{I3SzU3;9`HqW^;8-fHt1AihF+%EIwibOQ zQ}Aq4ED>usTEF+#myD5oO9+ipb{nua=yK5~bE8=ho)Oxst0?^FELVC`cSasfK1zm< zAWRBFadKOc%SaPXai#S;j=mpgI;-PX}=u3bbdBr!c^o$jk?Yq$LR2H_7^( zITMV_DH(`riaTXst)GqXB(?R9L=>uggSvj=PX(fO zap5I~xGVM(YNXT88yV8(a^OAz-+KTOcBmo8*GQkn@0fuQ^BjI-)#$s(9XUbnIyOQ& zYcBt!+eHx$GLw-K>Rod%gIMh|X4q_tT{`G-_Jelw0%uYRWFgw(uJ)i?^6zLKQfB2d z@`Srnn~k)Y8-%S>a>rv5ac0%M7nK%s(5(TyK9S4&oeV7lpa(hNoS$Jv&+l9Q;u0e8 zV^e5y4+n~!Gmb*c>u2^%zD~ZrGdsbv)*tH8OG;C$E?$DZ#-{-DX&F7WxC$=&NcS&4 zm9YE8&fRq`nP;3t^Obo*UHu85Wej-n)fe~>bG7V+Y|?g3h0VlAg6ESlgW7ln7OEt@ zHs5XKg_QkH!!nXYa>eB>tglRiOb;RDSOiE z%ULMsDrRy6@}HdLu6k{LH&;{mzDlLeQqFTjoiRDQbogemf_JnxnwN79mKV3<30$=) z+F*>f?_7J@e5hBKTk&Z;(8}E%f_UzdTi5s@fH*3{FF`g6!-{auClw%j-1aemq>yUY zUps$X6`n!U{REqN?RVf!uNye)aVw~sHW1+>jZxw(1xKV&@iK~WC&FYWzMEGC$^iFI zueEtjpA-TVlpGq}w7Xm!M#=k4?1AU0Ly2QmlC{o}_mCVDhC!96PKanN<_RVGe^hKq zW>0Uh(UYLSbB&zG0v7KmJ)&!hS<|&hn&7USB(`lFS#OFN2e<58p`HgbdK=)9ybU`_ zwGeL9-Xq?tm7_ABT*UQ?WUdHG>j=Lu-h9vPRD?NCoxVb3rMh84T7G&cq*X2$a^H^( zr>M)fz{~F-6=T)7;UMQTIaxCD+NXJJj(FGUcCRbJ=Z-k@)G79eGT^1AXR4GU2k<&Hui*SWc3NS z;6H96_?S8_`VL7P$~tQg6tGEScfYa+IV}h*PlL3#r@S`jlfEsd<2`T{3yNU7=?QX` zv;O=iC;dy4d9zI;TrVww06}~KUb*f0q-w}+O`vqO<7wAP$*wRVsJ`FzrZ?Zy z&8hG$)=cH8DEi-twRq@D8Xr#^Z>{92nn){Ipk(elorJQ@h4~0YwxG>j>d-;8I0SBfdqggR$zG0+bcft1Xyv)FzrGa zCXL74)CW(gZ^XydB$ zkFUp8iFik`1M;gAm8=Qz4V}n{4IzMg)r4F%2m7jFmdud;Y+(?3G9$=~K6cYoUTwku zUaTZF_=23W%IP`8DKNe-C=@dyk_A_7-H zgO0oJTx49m9KOUfW<{%;W$QY-TFVJIV(SN^>u^8&M^B|v=hy6~h*eYoOAd5ch~Cz? zdBNyQ<>i^o9k<^ePQ-LE4j&hdh@bz;8qWQ3ibG!}9tYpbc`Tnjyz&h*SkH%Rjw~XV zlPqMIWqUCu5V23AG|umbGOSCv=h~bhl_u85D4qBW&m@IKj1bVb%t7|5Wb{&so@fK2 z-BG%S3&OZXSedANNJ`*uo*3UCrw&3;0sCKMo32aJbjT{EJp2AU#rD8TH zGDBT0m9RnM4PpT(31dj}=LeIRZ_lx4Kqt%Pf{&noj|AUf{6hR54hh^Dp+ntjU}vNj zAV!xj{n-PVwT@rtyi($NKDuaibOu_$KZ7eL!pQ%_NSf^X+JxmRD7dybgWOE9t0v|u z1oaEp1TEFld{?z&J3ypxMTRzI!H zCc4%$h3Bfl z{jgwS>t{?YQ=0_?$|1~kQYQb)YshL$#omz$yBUB_>zcJ zesc=J9AP}qg4k8wM~L2UQFI&n7Cv|wpLR@;@&+koQlt#q;D%$sn8Y{FFo058?WLv6 z<&a!+(WT$n&JR!Cc085&jsS5qi4(pI!9HGPzH*?T$^1E@6V+Z#XA9nabHBSe5*4} zg4CZh9V3vFe!N(1-gp83_uLWqyUWz`%9;5_jFNp)awk4~(=tR7n19fAcqj&?fnD4_ zQ1a+}yg?`zq9o+JcbTx@A>b~@MPacPpuMLSNCHTH;Y1|PYJ1zD7|*-HM}8c`drKtn zCVAwKAj>Uzz8Fto8^ZRc(6|gozGQw|doEy1X2fclRNjKg9){E`M`2PDP0-4G#qOe5 zsSavBBS+~}3T8$Rcv-<$6OzYuEgru?9;vX}c$Z>sxdl~(k)$37-(3}D@|k%kLi1QP z?-w#{0r1;E8KwI|&>~a&^rQn@6T~+LAGG$j7zhMkOK@3JHkVClmhWb%-=TGo%cIcg zfSXuk6*?c>)J$lTl>*i%V*Y3dk&0d0PHp;x$M`y0nC<^j>vlT&V?S@id$C}BB>t9V znNWnRKV^A%F!!_Yk72jTX}_2mbY@Fb`qxS_2KBMjVz{g>3!ugED=($BSHBGcHhRrT zda}GO501LVowrbv5PCG1{zfC%oUqoO7p!&l+B=PPqlUiy(ev6;Lz`;t$#xoqS zB`b0ciV@(lBbZ0xKY^8&amv=)g{d-h+V=iPKg#jjE95e6+j`zq+vm&J78Z`uX%sG1 zjwmv>g@G3-g=V~ZJadvAQQjN-4RvL*L<3jMeM!MP-It4R!_)9l7?-@u7C?U{cCtvJ zPS{Sjz|kWXteB~ZNQv~%ZvJOKnbzR0Ydn&`3Lpk(a=t%6g;x!VRa)Bvw?ki}SYeQ?YhX3A`x!ceh-+UT-O!ukO6M0=&C!{gDxdf0`6nAo zp?Rzts&VMd;oO!tF7muMWTzltiw^=d0#OSH)574<6)su|y$7;|yuXf6T87{BBYoXt z38XBDWs}PXn=uR}D>{aCQDON5qn+j8EDqC8Zg6WKi^2Mvft*z`1AVY9h;(+4mKA;Z zPmKFFsYW;7^S% zBL5@Kz6H~kTVQ=TLbw|1>K8bT&Xr7KZ7M=RuX%HeE(5J&8olcVYnDtYT=3BTf6HfF z_NNlQXIqW}AL@^t7h9wC$JI?>HKi~lZ$j(lF;A6$JH`cyev~!3NVx)4$DSv8_D z%L{DIay<~A`Hzm>h)_B!;i3zif`!>t)xa?`wW-&ywjvy&6~Z}f)n7lw+M3P^la=ZG zgsMTB|ASfE+H3lY+Pgs}+*c85uY*SK^zIJbkBh;_+sRV2&Q#*o7SvwUi0J2+>!t=3 zwOFs!mXyg7c1vbZit?ck8Yf5p*m2h449W$k+J@(dS#eAc;hs&E<;)tq#JV10h(yCK6%uM;D?I?#8YG)oM3b z%g9MVY6pgS2Ey*RI+XiZRN}l(oAArPj`7T+JP!~2W+JHrqLOck<f<>U zOW*{3;i7X-H9y!e#=PMB;_0o3j*qH$-X~hK^t?Gwqkc#MieEMyeXw}cHDB0nH78*n^FRU~}B?T*bjwtddT<(BGFtS1;(#*8|gR;(=;7&!BXP4)qVd6O^c{Vxg2vL{qrvARW0)PORLvfd0ZK&5VSJ~cKLJQuqllq3G^3N<+D@EY z=e$v&!ie() zxe8e{tR#*QVVDrYAUHKgnze!}+12H-Oa6>|nyMwrPSa$T^dA=U=+{v$zj0lM(U+w$ z?vRWfaXh$WA!o3pVCx1KU2jBkD1;XUGno{g5MSM&ExFIs7yKhmARa|_LMVV~veP%aLfXRIX!62;6#VKUMt{?DP<=sr`3GcZBtsZNaf?Fq?yhm8=Kfdfth0Z%GSZyEwHOc!>`c-@!5?Z`$1DxV1dWF# z?qSSfW&=u5t@fdQLsK>oDUQOYdwef){SzMgI|}}(3uub%=-CP}7DKCPT?3(lRiAD7 z5oaPuh)w1AJkbELt}y0qsyGUnZhCy5E*)H?DnzAl22;n|PLD6Z;Ez!P@cgWY90NrI zXZ@QxQO&5lMi&2g1rs0mgt#Mxv)_9CqbfV^39xwn(l@TB?o-#v`+>Yz9L?H01Jq8n zc}0<-CGAa;lr}eiYsPmrTrBTxU>7{?j{V#66JBtSd1jCO(Pn(S3h@^TE`4HmI~%C2 zat(gW3Pakf0+r0?H~Q{NX2QfyJte5_K+jGk6wfv z{Z6gE^yFZjq!7jg->||ymas#P%|_KcymltA%0ugn43zRSa~d4`qgO}m>yYIpNBo1L z{@P({@`GsM5eTJWJ)!4&7QDNy4EQ)(u*W5db@W5&A>Rud9DvZAUx_x8LK~AY@N!VA zwjm~djfA36om>^;Zo0i|#p z_lKzzuE_=?2^4efKDNmj`k(2uJ)5AwO7@md;2ETTea1#^z(*54s@Ioh>P39Pj@q|I zO)RQ^<=~dDB`##2fN0-fcg#oxduV=&TzpIq_OmARlT`Zpkj7V-9$X7gv0K7P)hb&o zKC1m#H|m1(5wqo=$;-n~rrO>|D5K2BL=CH90rO+f=OyEuo@5^qCy)j}#>~21BfC<)9LVUutZUd-0rpo$Rz)P)eR%V97x^_re8JvBWb#yN=s%9t;`~6EqjSR z%#R}hjCN?~rGNs_7qkP&&_RL0H~(80@12*kz*=dTdaBFzFbGMkO^IG!3|%&^;S*WX zG=pWz#h0WwiJX|#+*daOF|g;a(}jzrGZ=Vvw>K|i=L+*YE4hj7{c>>8Mk>}mNB`wr zQXXR}W0ijr%eiVmMadAz^V0zffbaCQbcQn~SY7Tl?<~pbWE(|$CJ1;6^A40Jvw7UC zW~s-&jTxqoIr=P|2w~%Kh*^7NlPPL%|M9UHiC5yvK+xG5JYRx`aDyCngXEq+THdDP zqsSkz?z{C8*Y9Y-alHD!|KD^-V0Y+cz#RHkUJrRx=c#Q8w{7py zmSz$tL!anUlphV^XtV8l`kX)gj}^9px6z@eH@T4bOo&e-7N8-}7T`$say%JwG&xh5 zv*x*OuS|C)YG*xQ#puzww+MjaY=r?d)a#y-Vr7~bqC)BYpfe_(y+8Xj!DaJ9+ST=_ zf({m!Q4m0IOO$8>)gLm6n7fY|dw z5jdNHc?abLx@+<3Ym>5hE`-mtej@Q4d)iDjV8Nk!$WWyX*(%&hdpva8E~q!DgJLl5y!Rg+5gr_Em5=| z?HhS$het-4R)LOV&yG2uTMb%|BPi;XAgu|v3I|nf5 zEioCXIyluw@9~jj4sQpk5l&|ypzMs zA4YPxwjERj3uWZwPg&?71g|%fq?PQ{b;876US%G)gxhUyyE;1iez-E28Lz@r>5NgAcy`hUe%?nv$EkT5PZSIvMmo z@OCO9SuPMr_G5K(cOhlH=oW=g>wtKkRq>+EP^AhBv9v>fltW&qp)Y;2X%n4%6fd$% z$MXVNBl*E6A3}J3ef3FJ6XAW{Lu`WTwn&e#_t9c~*@Wy4K+J5&(*9-Epd!K;h1kZ7 z7m^HuC4eY2m{cyx>G=c6oYMM%H0KcUkYrt``W@hORw<{wSienUoPgE-e1gAN^>%S9 zIN0>kqDTP9s_2QC-W7-};A7PcpnQ_?3tgw|IJ1J8!7GSLR2@rFY(1vp3*}c(eb_!D z^M)qol&b2m5^&1EY>rNM0T^rO#^K)G+rFIAz6y9T%$53X}E~EO=rkp z^LS|~$$eyq5g0+;-IEn#FR)4YJ!p=ecxo61gp_y=E{qYd&) zM(=_Q|4&JkjLu5a)Y()nl3fCv(uH+`#G1olzB~XYWmW70AE#nuc~tCz%fu$9Z`PK(V~t-I zeeHkkEaqj2+HyqZTvy0-6uCS$M zCPqmmS158rUuS#<rJ6~pX%IrEwd*_;G^$Rn$vfca_)n4kx> z#LP)^?`GFG5=7@<1LKOaRP+-6jS46jy^%g!{3No~AJ1J93*(()@|d-`-EhAPZ=DeQZID zd<#Kpb4&w=L$bu?xQ`acGd2WlVMqf`U0LH9u_@jt(+3&Ku=ETg;FX`&Gmdg$fm$TY z^jTigkVPk_a5?<0XtcA;UfQu;z4SW>Eu=IQRy807e{~rlz(%inVWWtgHU+Wz&=m}7E|I?ENo%$=nq+J71P#?j`Q+^Zu5)|*wcQQ!*XML)cVD?As@#9{>4w7l2a#$&VK9exKf!GWZE^}0GAJN zUIkUr*O+OLE_DF{0n+_Du7t+i1Whj=cQcbCLi%EG&sl%Un{G&hcatZ!!N);-3wd9b z*PQRz)eRO~0os48`ODsIqV1E-LbT#;K!2Vb8f#)bhkBl?l^v^qY)gLm6Y|2JWm{_S z7*#*v<>xwplzghSvL%iarfguN2$`*y2P9yg`gc#FN8VvQY3flwYqd@msy4!8`_#gj zthcZ>HQO^3y~wnA(tPJlEGl$oZYk!*)}6-J(FZHAoPaT{3&ut!Kh+l11YF-!Gb~Ec z2jg#rg3)G+g{*<S*;;%NW+xBW!=3%m{C(-}hEU z7N;w#e8+#MZUdWe^xW3;DG9oCjT(0L&$Zgg^p{IZk%M^>DU8hM23K@RHezEIhU7nq z)swpwG?YI0?dYLaajNa5TMQ8~f6#b) zgzH>|So7yJIx9d`YNcbfc&m;}eN*9480l~@{T^HV^j#wbg4uZ!h$K|kG;o@V^MYC| z7L#iRJM>8Yhxl%Ww`9&TE}D9OwI83^j6FOUAo9s^U3Ivlc6LNp$r=bt!Dr{iBkFP6 z0_LmcUxLc!Cjx*viQM89{kSaie$xMqlC8Im442PX+FVPN8#RFIhURI>ZrLj=T@uW3|lmrEnHPA}LA6OnA!X>qP)E z-j_s_m=3IUo{H=q+-t470hdkw+FK{KO=3omc11C9`&*tK9_kLVU>n5g}@<$LKR ze}wE1sZB8cUwvBEgqUacNJ8y<+`F{MH91aofkE2_@aBV?Iv&4*o!r>v|2% z;4U$!T@>k)9s5$o`*B}|+{b2Y9?rnGuego2?J>skc2?fcU-&pt8eOEbXX5TA>cob} z*a@^|vZu?FT`bQDd`C4xR~MFGrVI#BYSI(6?fb2Z&GtkDjCnlFl8$EG3@j@5 zG3#3LCGLv2Gw1>`-<`A5FFnzD_#1ZLg3Sy7(LSLbXamhCVFDSpqu( zgPN;n&)BvNAv(GxH6+(7_!Wfw&5uYcxDUG?rR82xakUQUyY2-8Ym42#Not-sJ3ZIz z`{-c4v%G4Pg>Y}@JQ={aAjHWX7+1U@rVWz3k?)27wave|B`xi}x zr)Vze2^`A=9WNmSCi4)M@EzTz4Dd>v`mFVZs+`dFh@~}w=)kbvaglJB$yV>~uUIxz zb4n7Jy|zYIKSR?;ULt3q%g1q`Ba3QR8!f5)btdd!EFn`MKo|&bOd(+~kr41TohvS; z_N9gGNV2P3rO&8s>^V7Ma+5PRnQ2)FH?rf{2o;^UI`Yae z`&PD?UO9a?+n#7QR{5reD?;ArF9M-*Z#wsT9BEm}?5-%v!dO%FR_hzf#>yy4t*gTD zk^&4dDfncO;I|D*rJi4y=dS*p-JxVJ+e8QQ7vt9t&a*vAQK4NGIpz=oPt$J&tl zY1rws)jB?(y=CkkY~MnFmx1*U+qCi4k8Lx;`?`G2n+&#hd^{%LU9X!PAz|1I<8cN5 zCo*4*3Ff&qz7q32ACd#|P-NPZ1t#Wpg2=zX##bFDVZaGvP;nN?xTTx$(1xSt>8L$v zh~V&zzP);91y|_oDeY=Pt(^Nupddd;AjnIsI>**M?}5uhq8T*SY@>_zLR1^L71oz| zLip{;-wdEMdL0~7W-HzrD6NO+gIDP8E!T|XiapPcQ|rOcqpTHfrdoGf#z>ybz#bk~ z#)1=sBW1E*V}8KsII$G4G*&iQj|e2Z?I$HQFhGJtGbe&T#CTuWH~Ci%c4 ztdBJKc&AQ@7{y_344QKxwkP+m@!4ZP@z*U}mmcBvh+Qi_x8l>vJ|g+ix1L@&n&t?9 zz6ohhM<~4N8QMo@@7+vi0_8GvHuJqbS&a7B_H+GI^!(>a%1XxT0-_HgW@>}l)Mvns z!1@^(mK4;vuUQDe{bKM(VH}US^0`v$^Et4+E`ciLW~98lO}{m=K&rZW!4>9oSWu6g zjE=m+ki+wBE``NH02fT%4C||5Fa9$7&E!jMG|b`KFjD=)_s}%NNb*9Wcb^fI$V(4f z&U}*__qa1XDvPOA#nH*f<6Zkh<9QTBpEhAqI_8eQB}@OMISoG6j2upDt@5^(AL=cp z1wJzDDL8$Yo%@z}J^)})-owPj9;f=PrlQYdwW$l0<&LRbuAMF#_@PKhmat9nmm!dl zb>)n0IdzUV*K-L`{n{x}3gHCw<^leQ^4u{%O9v?A1*ByQows1g4x?QnaGe@GP#DZA zdv-836x)@O_HC8bQ-=AAEF6d(ll6)u5pW#ARXOl7=1!!rtDJo_^J&|g~1 zENR9zx~pioTi<&4q5Y7MMZZceJ-3>?bBHjRynI==RwCc*K%B6I22diI1y?(&N$h0T zt8!{yZN!!p3o4MGN!>p`0sp_e`!MR;KmOEeJ&%w{%+p+win**k(J~w_vsBl_VcY!F z>hpXgL6SJPF6283=jphSREJ9t%D=VQ4T@HDn?Ha4rG4}lGH^SRgws)ApHMXHP7Y1R zIJWbU$Nn`mrUZTWfs{9Iu@>v=ZpPc53jy_Jti0wE@{7Y0g68iEh&`2Q3jhwa{=0qn zL+Sq!(%`z*c*v!|qch%Aep~kfpki`M(JLyi)u$iGVJ{y*Gj$V+s|TjtcoaipTreoZ zZF;jpQE&P~yiQlxB&FAwT|nb$^O+Qqc!L|9dp zgt~%Fg(1oCCJ$lkYzSI_GK)$0>wWy<_N?l&+|8cLOc_DOjHDE*F|uTY*jE8XU`l80 za&<>*N}lAF$v074ubH%DVUZ#{y*fUACV8Vdk6iyqU*tjWH2`)1FX#!Nt?=C{!{#fl zn{FXJvq@ntBwAYf^_KHo?h?S{T0!_MEa$3QO*4BVK<5X=Q$M!%E2V5jA62`zNdC#y zEvnGH840ONt;eN5)4VfX&im7FT~n&(CbC!C()H>0Uyr35fuyK#PBu{~VfRdxOaT;BJjU^2R!6L_)4qJYesCx@HJa#oK5l$3o$PEE{JuRFnooO}14}^O6W~7J;hmQ@z zf%wkAAp4*bmB|^}S}B8m2JDaHJD{hR=W)>>W}5NBiiS7)GkDEvWO}em&3%|)Y)?)TIp8e$EiWq%W6zSk0jhz zTBIUFzw~X7VZ()i!&hnIA2@k8_yk)oF(S*s2D>ah@ombOjskch3aq{b+DSGEHM39C zUY~HrsioL$yO3va>8d-IU?mZ(hQi@6GORo%qqGMqqP`xiSs%(4Fgwpc^oPG2aDhC~$?=e1j41SSt_1;Qn7|7)b0Hi$%d{(vK%F&9ie z&q%IfLPME`t%I@{I`UvyXbhIiA>MWqhZ0wwXSYsEqx4ov6i;9b@w332GzFY>MnGr=ga<#py?_fMT4qeQ4^ zYCp%>t@?$f{*Nn%Z;l{r|61Q^@cbCW4hJJU%8hRxGN8S0Uy1;l++0l@qmAae@Q@$Z zmqzDhADW1A3Uu?nk^hr|jWo#yruSCkUEJG9E$wniuQlr*rMxdW z&jajit_NBjIedU4*{3%zKWgQ+2UaEbCt7z2PUiIiWXi*X!!nToZcCzS!LVphM9}~=@(R#9eodGl z?=!A->CwHH^Dp9Axm<=nH=&RfE1Pf7SYX65MLmEPy)*7|K@k5CDoEe$xcc*?ha2SJ zx6K-tyzgc@#{L75g==u?4ku1aVZdM0l&wf?&Q2SjPc*mYay^i1It73+GS#iGD>suW616PyY&Gb}-ev zij#h>F!9N%Ytbj!;0}72gT1cxqS5$9AxY4j$)&kein+}2u=37$j} zJm8xwxPRrsg zUo>Ce^olYyYr`kseak~bQ$463+06C4+y+V?Z#?Xtdk3rSwVaT}Hr>$^Rl2Q4q2K}H zdUB&p0Dkn!@3>of-_mT5qj+u0gVtr}_)%WhAt;~J#d;B2W1~DR4V(VS2N1l{POT$T zle!DonPi`uI;i2=@dpa@6&oBge|aV#^u*L{zt>fDuS>D-B<07|3gtldFtQj%q4w_#ny$;te>i}cNFC8KcimE$K zK~A<=f7p1SDh<#c+3{wOg-pf!ZCyWMF0pF--kJe0JQ~}h#osKr9Ej#lLhJQIX}zRs zT#w-?AQU%MQxsN&D03%hQnK=PJD4=YhK;1NEVxbE+u(?cyyrQ4?46+c`d@y*Rw@Y8 z2!ebwRl5w^)`K{!cjR@ia`jgN65{Dsd@x1GNZP82r}=s2B7$%?>%)U;<0JywzNy(T z=@l=bI;7M-@sjS99wmX~xVJU@(1)eqskAi*@GVhpkL+a%N-b2TsJURFn#qh1E(#+L zLY#r&Ymb*-3YhYRV`YJ6sxws4NlZJj7laZqcT^*4qPo%3+pJMBX#3{Qs}@|T^25J< zcPA>e$QS!jyK;=n-^-HPRvcWo4iC{dCQ9Ae8>(5b%=O){dg=Cj?bx+1eD)z~1#uOA zeJ0RMY|_U_rEZ;_gE!c5B{eqtR>q@ z`SW#Dnf9^6>IwH*O--u&(nP?B8*P_vdb=}gIerO3ZQ>JrSeh`5Pnc6V9-A!Hdr@Oh zQ_JUbWP+nW5xQjM7+^>%2Jy{Wu!yq@st}=UnB$!G`C7aQ$`YyWMU=7jK^gOa4Dzqsw8o&wF8E+{t=vXw?M27%Pq;%i*;psBv;GtE@h?|culkfick9{vW zBYZlsy6jl9EPrlE@aNjkD+#n{x^f+o?jaJEL5r|wuEJvK`5|Jo>8k!@_q&I6Co=|Y zDD7r8%iJXxBY^=^Rz4_$;N0z+P4kU7kg-up+BGt=bP-oI_QhyOx5O26hrGvO>&v0_$*b-bk z`no=~+wEf*^V|pJDMmEB9&SB~DcLb{1z9%4Q5Cj@@pne57s}W>3wdC@DN4a7lDSVV z8aE|3Q;$j&wBgDYTxQgWN6r&yUb*E{#(hybwse3QB)X^d6tx=A9z>`-|I;}x^ zz}a~mZQ~$?S;p1L#kl8K!8L_n0Iz&V``MzHXxezTtao}@ooROD(C<1|o<)$mNm7#~ z4LG0+CGoBx+LYYpL90#kp$4C2u4o~3yByf!#lmZ%$dQd(;8C3%+E1+V7m~*&`4a<3 z^JV~Q4U2{UR{;fzk_5J&@9PFeU*dj3ej)21|W!0z+EjC*U%^LIBQpVdl z4Qq$M7QFjkOhiWrUQQ7A>Zrf2;3DL$0IR#08&4$d&7$x3N@U90)j;v$#V^wqvs4+L ztDQKgYuQL*9s4)%YN1OQ^j2j0Uzb5;ScvhGE?5Hbk=*&`D%&_6mj>)`Eye%lA&jrO8Y*;g2A+=W6 zb(XK^uk6NO80j_@9fQolmC5JQ_$Teprd=x0xwl zdx#nj8?q#^#gqMzE06_hbh}(Qt>GxQZ+jA(_W$)L+K3|t!C>zpSpCrqif0?OVI}RK z2|Xe7`ncD{a3O&BYiH@Jip@9*x%;G@(fqIa%4!3q+U81jK&}-&GlHah*E)2M&85VZ z@fOH_eOP|?V$cj;l3N9rLp)gT<)E3ro$D&JU8-`-aaDRVTpzBGwKZRW9c#_Rj&UUQ zgIHIBa|HkmC1$JpMdR3|R&3Lx6<--glVSO>%m9Z{;ISzh^-L)Ll?%4c_ZfBdHFYZz zawKhlR`hkD?p~r0&og7jr6>qIxg_opmzfwMB&M*<*kg@E8A_e zjw*XkP(lwmB0eZRBpV{bPzn&SV)YXbh934Wn5!xEC>zqe8FM z>D&p7uv-D;N-w(Ie^(|hBk&{en{?-HAo^zqDcuQv^@~*_?IXvAv+( zx!$@CL|(%+o?&kXJ+_`p4rvO@rdGr`xY%0-B$ z@mX>Q`U)j~KEG4C%5Mow!jigf^yoYWa>nTA#0!k)=z~VrAyo9?#}o2SV+xC~{5TWK zg{_YL7YtKg&kOHVNo0QG_9wI^$RY$K#UmqJ-zll&YK`S_t#<-;Ys@U&+pEQV5iZeF z36SZibJS^B`T(yfEebNDj+9N1&++I^vn4zY7+47>Ky@OZ*v*`^G@t;U0Ca~^2ijEm z7vHp4l;vGn7|!t{3xIH&*p3oG5y5`MbxLgk9zc}wy2&X`X{HJ^_e zJiDrEiUk^^uD(levK_L{essQfhi7@IV_85-yy9qNJDN$K%YJZRs&$BO`kx{t%KD`r z!pw~B!LmYm&W9wiRz`NI6R^!IcJN10u%`f#<}nM|n3i%PJ;89Ro=rx#+qrJl28^R{ z8+B@ zyWhV-hj4#Z7ibLVO;Ic}XQo&^FpWLgB?-7{FiH~21LbwCA96AHR-kqHmv-#Py&|Ap zQ!}Id^z#Ne<|-htV8m5TMbGgkIH+VW8^?lx9wF=MNEvz|q7`o35OAW#R-xZS!n<5C za_)Qj=6HY+SAlRT4q7>M6gMQU`~fW>H^pZMPslrt5XiYUzDKvNJjYP`!Ob9IHKjTb zQbLdxS0Z{6S0%MBz!k)YEi3Px6>tjA)(GVbdmLGC+sNFp#?v%_`B&5Q-W#gl!CNs; zXP^!_stpW5wS+| z;;oiue~(iAs4#-iSw;(fQTrh?HI);0KxG7)E!mK)DZuY+g(2EO#bdxw&E2IVbx%>| zHJk&%r3eHleiru)Uk+Q4g_O#!YjIE;|2LoPFz4G03wy^<9?o?AW$VMIj>Sv z3ISzplADDOJWEH=HjGBlpBR}Ver#y>h@iIgz` zlS1O9Gw36EtewH0h&|nF_@Zk66SPD*G)fF9{|5)CSUxqRpL8=%bp-kyCnf-v31S%p z%lj3*RU#mH{?L14tfN@`z$auKj~Ao5kgqIJq=|j2t0j-HN7~0L{P|;$pR^(;=qOomSPu9IB>y(-n?dH2gL?wTn1%l-r0bVv_&N3u z3JG4YL2HndN^1MZ7t*`9P!bilP?vWpGORTeJv1Lvskdzi*g2(bc`3F*Te5dWPy@iIR!r~0-3x09;Tv9;C0b!H#>VjvU^7yJBJyvXaF-!&PT zy0rhh!oAu0;b(NIv_mT;qA6Z8e8(`sS;M0mj_s3&~bGl^wF=bMdlojdnj7AsE&X?{4(vynoq^pf6 znOeu~SRGdXaR9Q3UWHIH#`v3sjvgS%c=LDoE>jTiGhm~qTU(+h z){4V0PtZ}MtBk1*Z9X!sg>0iFxorUOEL&F$mVVW}8qZeIZ7N(1n*qI{hM_f>gqOg_ zr=RQZux=%22?4-oWdvgIVgdJoLSfGVS#0oJ6=SqYunfh0{4>T^c1bTOMR$+a|rKOkel&ov=dq;WvEae(iDyYtHjr`mu*R67kj z5HGM=YFz2`4&2LXT`MJ>O!o3QuTNKkb1Tnp<3=UxM>ChSwbI@pp+6$=4z@FdKb}eZ zLj^XiCrPPEh8w_0q`W>}b$9RQQ?SOafBR|$eTT+<UzI@LKx_^;bCc zA3GksBtG}di{vtv4<{KG z%_2El$}e>joGdI)|9#|q;_x|t!}xd=~mRn4)}ay59MGbAUw6dWnS1H=qFR@Y1b3%QowF_kO`Cv z_AroNkv4Ek6xk~QVGhRT&M5*wtg*#Yo{ov`x7k*JYIGDpF2jlin(9^Ed=qG|`AMZ6h{Wkjsvoubeoota+tG?SZ2L=M7kzdW@j=!^- zt6j>t@CQrf4}0^q^tJ^a2V|;P$fe}MR?_MWp>$px3_k)ktWd4V%ew%U%si9k2#y;E zwOz8QWRa@(J{?VVg}=cGj84w=Wlqy3{^x9_4acoiX|H7@%&tYW@g}3^G6ox?h$4*u zYK|}L52Gb_HV6tNaK&|^HvyrKLfrNOC2>`~Fg)5@Fc9`M6tBw$x_L`2J;qc*nxyE` z+;jzi?Wxm)+Cx(v+)9s+8vvb87e;!l;v#ZhFT83`xvG*!hJ^-M^&a17ukAKaD}djc zSXKl@EM5VunhJ=Dk+vm1Vi4^B7f!Q>mrv za~98rG=9V0V0Ly~G^JuNi~8mzAGXi_sr_;J*roHDW_|p!Mvx+#g)lscA=<3{3<+2#bOwvV=d=Wi);($59tlmJE}%x7VVZ{n(SjzM12iD zB8}uUsB*@f%SG;UEwO(Y>Ia(X^`s*@pv_gDvA%fxs7g%n%O>kQ`drp|io!!>1k{n* zUa^bt*WKERjas8(UCy#z;kNNC(8*UYngB` ztpj_$rny^g&m-Our$KhpA~bq=9B0DAoy3lFd87o?6bsXS&p8c(-4WQdGZq{l9^wR5 zs-?+fXn@~YtSD)<;x!ZmL0Zdn*FqG#UlEvCll96nBwNxeBZBZN9Fd?^C>iqd-!81bgMd-y5nB|T975R9o{ zmZh;n_7GTp9^pWR*pi+y$W!25*2VqkaUT6+6ySque*MW zSoJL&Ls_~L=uo5lSetXJ+3WI#^5uQKG&qn^PV{yHWdS0?j~4{_!Ch>nt{h*kSCmxi z^04Lciapnk$Se0&hpo?eTvy`!)2aZ9dtP%3s`2a@#`f6z_>mF;RS&JD=MuTJPy=Z4 zH=$(F7ArtG98Mto(wmy%U%`)ZT@LOhw$NQiB5SS?x7`>$u;xHw1@UIJTC;SoGgEQ6 za8OV;&TfYg0=Jzs)dvW(qtbAM44?Fdbnd92=n>Xg-}sSL3~QYghij~BK}RJ75+tt7 z4^lmaRh#rlSntC?%g_K`jY-v}sKg8k4&sU@!mPDQS0*|7a{m4};(-_H5*AKto}tPu zi52HKz!0|UpqM?DiAgLlF7`Rz7%buQO)#x~LhW>XN9Zo=QcEwfeYI85RW+VtFn__A z(6XU`gk2$fU^za^7NrW(2=8<)%IDkyi&O&n558h(-O|nugkLUlR$&(?D*HWSk#-SMOZay7JN1x?c z&&46&d)ieHQpOKbLi6theOKARc`&SP8V`%+OY{wNjUZyH$vc^3Z8dZcH*E0M(%d+A zOAns1(~c*ot+ew3YW%8Kbgzl|21EF#Eo%s1FRxAC{bHy7n$dkoi1Nx(OtUywahSxx z7p3Y?b1TXwK88!k|VXedxsWsZyCK^9Qdb%J!(J~ z&{Ni{>R7WbEvw;_X~S&6-1N#+ohMYm1a_4?^;c0(?=HHTDDAtr*x2~W0_FBe)?op6 zKC%imV9%DA;xl77e-=RGyc?UPYQiYnsYCa(6$EZs=O|jizyP5dxZsBb&xDf9$|}0K zZw}fBjD2~K*IO?YrhlW(aFL5sr{)u#wEL9Z1YnkI#3>v7iNqed3iDI)12PIa28SI&3B7j;z8@=p^uG;AJRzPXE|sc)10{pInU5TcSI^R7@C`f0jW@|Q>Z-@S%j@je|V zmey0#`&g|@gcuzw9PvlMuVgW%~6=4!_j}ZW3-S6Mt8pxR&??!qj0xxN1|^ zeZw+Iv_WZ>R%{$6M*WtIfL&~X;X~P*&QNIvJyMrDX#E?+`0Ms2YZ#k*3 zd#YFa@iqG4yO0Cpx(r`7Rz~snwG5S|sCy(D)pe=xF1r*z%YkSZVEY}Me(Y`VXz@AT z>Bccu4Z@pTyG-^&D0`7^wyj>w_`t@(1~<8*8YnUD?^iJ780PWi>*}sXgceDa?6JL$ieZ6F1GzUX@DpIwwHT}dF>RTNLbWWEcMPQ z^m$)~wJU$Ypm#N{T^*hxMM7t9alGJ;py55`)d!F~e-UOe3We$tIGt4Xkn@9FH@Fj% zHtMS(-QK9+4&|>_Dl{{z&ObQh|1EwY*nq>HK7FA$AR8gKEBE96{cZ>|djeRBhc$is z5%<^Mr1&RG(ro3Aon8s=-@xl1A#EJq*W~_DYK?V-~l`nEN}w? z6}g&0Vil*Cc-eNxpPhq(?*crW)H4w6=l$}H-AV)x74GN(;8eU?O%Z^BCE6r-?z?<; zE4vuUv@OcBd7+kpSIxJwb~qYG?ji*K+#Hjor)z!P07Z?= z-o6&I;~$0{=q3jF4Zfu1x}TsZkFcnE%<(oJwB70T);b2Nta{S1vXvW)m>wjG_?MrQ z0)PV)HL>4fP|roN=NY`T=6tD^dmtRmd2;CbKKX@|0|LO}HKSq~tSFP;p;`*tcE5y2 z4T(A&!@p9S+oHEo$R;n|5#3}8`8csh>>!}Hz+-o(@x2duoV=(}1=f*?jAI)Uxlf`8 zf;s+EDqU~}xHd}FS5WbH^o3uBBfw;e5pOR}D;%57tLWt_#+V0~FEfk^!*HH8{)qE{ znNsDcK`0*Z$m|2S%x6_kocK_7nR@BxKfyvtKV0tK0OMYW$M+BvJ{3>&_nrX|Bzza6 zy@KS@Zq>`@jhgDXpcluTlVp9CUEvu9{4mYD>h?^{$>YQ8kf{$T3K4qcnTClfCLI}j zGvH@Yk>hC;l-U^tblkW)Tk06p)f@**-ZwV}crpif!(_4w#WeH;3$IxjH*{KR%nKqJ zjCZdoevo4cl+Rk8B|fPPM1#R$cXX|`vPu{Fj5d_i*7}w5L{seeR%!VUnF!}!M&HV> zK(b&p;wenD{*LUJ`xxGkH$XqqZAK5PLIEbBCq9QMQk~GX_53QJf!ktA=ZtWcKDD$^ z23*vkntZ{`;>iwmW)@xDY8VSy-EN|888$IJ+No@+0y=e?Gto5e;mN<6gi=mXu5 zsdhy05>iaUcyrN(>c!Rv2ad;-aK!aFxIlXKciFvaT~t6=VvhLc!Cs71rzecM9lY=V z=#(HB8ROp_Y58H5&){*e;QiB@J%v@nJXIZ$4)wQ9@h9$qY$P4g=< zlWA|=sPX!%ha_4D3au3&?x)xXYbYW;=a1bEHLA@9pbWs=Z&zWQoS(aMVr~LbwC8Z{}9|72_(Y`navy*BifF> zFMi9=%UP`^dX7W^t2ND7#oP`EHYR7Mnrg&_)#IRHvO6_Wo#ppB8gk<1bbgY4=1IKx zr+*o$pTpIP>lGKbfuW@z=7}#%gl5bzT~jT+Eo;SwTBoIKKRN^r8j@oKVha~JLM_dH z9yoS9<+%|Id_{df4qVNJ{a0K2{XgfkZo2=i#);S)aRh_?@BNwuqy!2Sqje@SQBNab zE414GiFgTjfIY4uAa)a8hp_NmzW-@THkGG#-lWd1#@`q`tw83GAn5hFphsrDYEUErJN zW*G5`k?^(K+S$=692}NO_KCd5{(_^0+XC8?x=G~QZ^tBUF}U3)6#JP#3XJ;yavcs} zXk^#geI(g0g5-P)e$4p|ZDR9`TcNcgFnk!$?Fi;fwY&!1qC0YC*OA zf_j6MlXgUEXM|bZ7jxNjD!TV1+>9G~S4}N=n&uy{P!F|NZZ2`LWkbX)%A@$%ZL30H zh_maMu$^jZ>NpL?UH8X(-adjmoki(UX&^u!C(^Jc^`q<6^}(TH?mFhMmxTbDbk0N1 zYw1`)b%)9}xd*`)ON7`#J(-)PHIu{NXH)KX`_1%44Dl`W7UX z+g!c-uSngQ%zKmG9ad2a0jEJ(FUlzBV-budu(Vrak~iwULH_TU<_oXvaaZoy8oNn+ zb0VeAwMb&smf|tG5C2lbbnC5UM|gFRY;o zdZ>0{*y@hzZ3aZd{#1h2LcDr-cjZ>yW`%!faP!57OK1dljGl^q9Ld0YSsN2u9o^KD26Vn9+q;%$? zL?pFFW5uxEC;WZz(PFm?qKF319&+ShBhs`MJS${3YA3xe+zyxsMjKJ?3Ai~8sD_SL z@sPF!@3A{lYsJie#Mr~QB3fe&?{b~oKRoXxyZ2WG+*{lK0a+Kn*oIF?;HsV;=xI2K zR}GZwOrjHiGHt7`g)O0xu9sI|HQg?R;pdL zX)rAi`Gu#{?6qIp#kA>1S~t9WO9}a3r}2GACoBpxyNIV-V`;UdKc16SQ<;ea?}$2~ zXG&6*URysrZ=LU8?;b$)uU5ZCnj%jNwErqL`bgdABS_JTtpHeK34p*}QK~tafdpr* z!7{2iPJvv({T01U#z8Kh2b`QCb;O@0s@swXqK(TWiq(_2@dgjq|HbA#-S$xq2b!a8 z!s8%fn7pY8zz3fCZa!f#Ja1^$V#f6u8J&c5kf>;J=XAc-$~kd7z^T8?232%+Qb@w< zkx)^}llX-+6K*e|&D2>gxRhy-C&;A8g8=nM2)zWv0b~_3Rdyth^px7CSWWP*9qh06 zK2=Jj6DG61I0~>zMsen{Vh_!;-8QoSpAhvInY+|*5ZmS`U9}TmIAg3a=%kSF`agp1 z<_`sU$)R;EnE`;MIIx@=pvB`*yO$@xVJ$O+;3UAh$I_YtWmTUBd9oVPk{O1R{FxbHCW)TUs>%*#c#w za3y5(4D>Z}qJmQ9^9aEr_gbx%R2&FJuy#LIB|J4)!ROlL@@Jh8#VBT7@)g4$u0eJ4 z`Rkn%{lCtJHL02#{eK`Nt`-TO;QH*Jv1KQFx|DH(%DnTmv$=3NU+QON5$%`+r%_Bt zsMei1XW%XO%8I2_QPKD-N9V@myV~(EZ-%`%SY|nSEwH7`*L~5MJ)3xep>r`BchkLh z^xC<0k{G^JZq687RjutugBBq%HF9TY37#j^#^8qG^6~p#GO7klG01>9X{&6`>moTE zm&j5NF%XcWo*kaME4SY^_ozFrC`yf$hUigoZNn5grW{?KOt9GqOXrNo*5Sj$KV>8> z&sJo)InBrQtx;L)zC*5l2M*9yhkm7ez4F2&hS||Vhqv;XRYyT2x${EE5Q=}wskOmU zS()UZzW5@O&RdaC+JMItJd}W|IOaAI(l%VhsPwV+1`$Iqf2|kwpi)8NykJqP)Rb%& zri?na5P!_rIeHyfS|{?y5htLfI$Vr5L>C5`sd=c_nJ3icbqcAdof7~khRJOcL4pH} z&Et(+F%jQ_HQ(M+^aKR)C?YcaOAF~3@BsX;y^N|uIhP{3eU7Pnu<9zgee$uaY`@l9 ziX-G9GxNNTkHn3(#`56mRO9v_mRfH@Cxgv9s09mi4DHUCOv6S$T;L@vn#{wj(q6M5 z@if0MY@<0SNA}&~krnF|HfC#xpwnD-t&*9a4Z)>?q@&dTHZ#N=+zs!U*S5HUD+(!|`$or5PwB!9$fF4KKG`#0(#gn+-Nzf>NQSZDq` z(?$#)FOh}Culn%LY8ZQ!x>KdPl$oUEUzkM)I$VTb$PzFKp?oEL*CV;c4{69q!GEc# z`+Ho4Ltjp-$I=t)DgpUjZco7TZ@-y+BM?@gNHJK|;%;~$>R2?8vnih27#O-WwTQ*m zZPf9uy4P*vTeBRk=xC!PjP=L%J?V*vVjhZ7IEZbelNyJS@r4)F17;UL#LUhl9UV^| zFHy?_WD z`Di{3427g=D{CRv>rqam*l6gT&#c?G_2GLxBeOMiO1nn}SErryO7RM{#_-j+MZAmK zLf1Z@o-~XT=5YD{MiKRQ%@hRntB!}|@;f1w}jzd`d(7(eN!`%4tFAxx7 zKuG48Pl>>FybEvc>thR@+3MJ1Re>0bI=9^dXZN+UEGM8%i>uwnxou7ETa%0rx4xV( z3ja)Yw3SUFn@#wnpi3}QR>HH&pkl^mi^j{TK{uF}<$sNuq%jpxe6MwJUQma#s35-U z!e1a3hA^zgl&)b3mF!4Js+rA7hgtkcXzEdY;j`b*+mI}8;9Mp(-sS-0hxrtIbH-DN zim`tU(?8S%?&1xK#Fk33RP$xZfgwU_2W!?V@APO7HX+?x)o!n11Vtsu8Yqn?X^5xt zOqC_HK<3$bd)=>9TuIhq<%lHk%?1V05yH@5YEiOprfE&cXXavI&fN^*gSqm0DRzVa z7{cp^LLH6*$Dc~(@I-c}IW{3BpQ|I|sT8D1DF-#U6pMoVdk0j1>Ct!jlF=>-1 zy~USUfyNAX@aZ*Rli)4iVA`7u?xuDrW!l3IVUXpy!4%(CPfDy>N;9eY;(zx9&}j9N z&A`l|c!BzVbz_!kNH*kc_d@g@SxwjVusBXt;vU@4oBl;herPpeBQda5Qx#jjl+z;N z7FXjWPhtm6UIp)pA>+@^14J-t?*+s83|p8UBNO(Pu-X3O&~fX|uTk>@TvlRXD&dlI zG7`qIpho+4z!P~{&LzF!Rz0<$>o%4MEM?^#UG$dD;+g<#8P!?D%hZBqM=99mf*`9{ zbqMLR{IdnpvGpd$nvnHk>b?KgioxBgZxgEBC%IoN)CwwTWy%Hy>>ju#@Lf3W2a&R!nuf$sy3`LFBaZcQr{5 z0HXYQztQ`Wf=UC$C)yI+!1>{JDu=L<9QIBuT2d01NQ$!G+jY@Aqv0V1?Xr#i6%E^5 z1kUBEP1dcWNd@^T#~2{3S8t)>OSwAM{v!$qh&AqrYWA_9AWX{Vp@-=43x{nB6mTM9|CCgzp?O{5H{ z>%NV9{up_%JIY2YP!z}TESr`&WZ$Lw5w_sQfjf`jVXDMGCKaD#>387D!pq*-lLN|I z{Nu#2thbYKM>wQ#D3Gm$vBV7Ea=$}9eD0kOadLU1yrL^oK_CYg(*l$HXT?Yg2oi>? zk>b4Vn;}b1IC$D&fzvNsCll_iK6kJqFp;YE^6qApcNE0=IWFYRwwmup5LwL)puvoj zpT^0cMrq4`+L*xVE@va_$4xW)=dm}-;~(WlO&X}Z>IP!Nyq52X-m_@7hkp>~zKFZ* z86GUpVqYj{>(?%Bs+u2XkT+n{$&m(3Y=f{1U#Rvy9)m#C*&p@o89M&8D?hlrXk>^q>X)pXF+BiRe)!5Li5yH z>7yx>VG@6akL{GbPZ8P_>ij3QB(lJ?hR$tXVDBXRx5kU}(yp7J{E{UO6iy&j+W^>8 zYC9B0ZXjPwHQ}<(fZ{-W^eRbhZ4PIEfuHhNd$9rcia2n^ie5CXx%|P|DGopbYVmxi zRX-AFC8%T?k;Rp=hFVb)3V#nvQx;tppko^x1T}3-k80&;`s|#;aV#LV@A!$j_%HsK z#pQPbWVr8Mq553HEG6Sj+@(lrrHf0n;ILEXZ{aT73%~*avo- zk(1r@>s&~S)W$y6excs~gi_)X?dY}|M40PQ%|+{_Hk|nGNJyp+Z1sqT&G40AEKg7R zkzL2#5~wt)v`3HlNsqO@IRp=XG38qeQK=TeS33gJ)O8dW>SnO*a1htOk4EQGU*vVj zgTXYiOz5j*@!^D_55q6+8(AjV!V?NJCor;nIi9czBnD2LMr_|H#PStIBd`-_F#QVX ze5ydE(0K%vfi;>fyLj#TnH4bK9T)e9O|hbl3Iqp@@!T}CMYIU~HZwCv(r3>tZ) zU(WD>l~D*sigZ~@p&}HA91+5VE1rr1iW3*lnZp=fOpze7lFOW=>nEu{JodK65lU>( zP4!!NJ#`Ah%KW%5p`_M8q^@keiM@#anLJ=Gu*y=i@EM*G2ao`w8zEsM7w*yZ+?~mj z6Ic7lm|;_1#Db8|6;OIyS#ImL7o{3;=z(A2y@$mS927(FcH+81ox*6Cc*<$M98Jhm7?opewUb&_|xw2Agx# z@tZ}NcM0}8xW?T617gDy1vMSx6b<4(NV&^j*Z`D>0wkm3dKWYv(Wu3Py)g4m;Q_Tj z+aL1h%77;y@6{IVDIY@p$;wi9wbVLOn<0%#RhLA8gp@W%k&)g{#ujPL#UFKh1W!Ud z=iCOIU9T)Z&2#6+(Z}Yk(72(`@t}q%%F|RIv&e>&)=^utx>c1f!7j1?Q-baa#26dd zBc}0yqHK2Qw#R?)@;=56f{3sTl1YazOl$Cp(qc~ro}N2Zy)XXgXffRB*@+@X!uyad zau!2E73LO3=2L>&z%-!lAm@erw1afd8C(vggft`$xo^_g#WZ8FVmS+~9j0XCl!%;F z#DPYYV(wBCmn&o++!U^3-!cG^@$z~Wmq#?$`f!_XMpT6NZLaO9%9A|7pl49NTz^s; z;cfg@m_7J0;85O@Jj_sY)w6-?Zk#B`(h#lurKqdZ3AcN%3-6Ump!8?+Hun1EB6dkHQy%NR+H5 zG@w{uZ+r$LPN``3NESpqU(C6>OcXNAIm^e!Lpf%^73Zb)L?LP@sbdOEXySMo{6xvL z{%ARe6_wF+zXjzQT)x=WmzqhA4=v6Yv6wUz8Mt0m1{K(MYTYK%ZX`pH_D1U8(hr)3 zGz6Ec;8X?B9^L~NALn(xw9dm3esrR6v=)Qb@VU|U5vxm2>@oyyom8<(#Uwf-2Y}ts zQ56a!+gi7T-iPzHAY-vEjmh!%o)rOcrrH_pKu6^@iZ1?Im^os;QIwtx6&ZowB3Noj zwBC^nMA_{jX7N)AG(@7-nU>d+NyW~8k2dt^x{A*BDcFM{olQWPzg_oDmyJ~-+4H&d zDm$leFde7Z0OUzv(<7hNy3Hod|AMEEpXjM*zXa&%b=gW6N$0R7a*rjG{I*_7cAFp> z0_2g>90qGo+)5yKy)JEvffgNx>(PuGHZebn5q6ox0*F-~$<|&dAtk?s)2}Ngh5uFJ zBN_xYb{0V5Bqh6pFPdJU21wa;c{~N*Pz0&9>`>f$nM<2zmGGOim06)>`a-x#Yd@q; z-@o5K>E=;il8u0S{iU>gYPc%WlyWQVdB^QP2(yF6ToV1F`~)4{o^+u7y{tq_GZDDF z4CTgRZb6GZq480SwXxBLG{6b+21o8}!y%sf202dMnz0}tEA`2;9O z*50zguU}^dI_3T3o}V6IP$jPZuv?}wy=0(a@0n_~9rq55G(kjBICUQzEzcLqPp`g0AjEuVBzlY75zP+> zJ@CQOEN@R$J%R4O>$-1vo9>&wX`o@Ac~eC zFTQ7Gz?JmjblqXPcubl2=OR|2<@j~$gM_v!QS_1M1_pTgANcc_+?YqB9_pmEtj`bl z=qfM)uzd8kv61uugm6S_IB)*%-tz)6K<+)=2$ zM+;NU<5*Q>nPFt+L3m=@V1V5-NytzI8~}I|EZ)c0l*AD^6Ig50eCwdl0K^v}*OZ}m zKN#LockVmQI0?;U-cn*mJ&b}jOFXWr&aGtR4zB|O!mL;qqjmzfxRG!Vw`}@=Ye#Z1 zW%OaJL4P-``r9^xvSN%ADX&aBJnwUos7~#JiWRVxO&04$um8{v&bN{Q6hcA0)yMV> z+$;;B>O}@e%pgS&vG5!x?6VQGt9N|Zq-w*eXq3_S6MK%XWO2^sXE3U7r4=Gh4N6m zU5PO7@ebH(T2@MU62)ell9mf6LOA#!DW>8uQCP0XDlMlIos@t?t8b&S@K;cN7zqn5 z#oS?RS*1Gb8c1KSxgy(d*egnIGkQPMNyt(;g`qxv!D!fG?kV9x$8*!>v1Q~R7oEXLfztQ@(P2G@h2Fg!>)56bk4PANF>$RO$eR!j z(g*Rl&BBX{aJ@Fwp0xySRMiRLz@n%s4|A7F{P$mWSwqS$KU?=}#=o$fn{00R=lgV~ zN^o&?zX%}Xd!kPRU$P9z4I~PU?pZ9ZE)Iyv{|1|>OmG)^sv7ekg~j$jRU^Y-xAuGJ zJ@>Xv{Jb41+jhJw9PAa7LW{7YvE;B%bPk>fIsC=7!npY5}eD|4D^8J zFDe~SdDVuw4^2q!Typj6zZN6ne&j+2Q#lHSP_uH7jm%A$JMkECLFmeu%8h#u1Yv!n zPVhak1-HPIrCc_+EB}QYwY z2+)8MBsK=0zfmlMm|Kfp=9%QgYDKTji_D%}gqms#UjB_Oy(g!_p5KI`RIbHQjW32P zCL{f{%Y!FDe{}qV`(|Nqe^)h5fAOM|cSg<-9Vq`|^Ph|Much!KAuo`(8HuWM;!Y&A zobrB9-Ae4?6Fr4^LIWd__uDqcz61y8SIK!t!&FAKy z4{c8u>dU)35&xAR3-mx3E`&o0(#c|9?=@EM+kC{!&oc~*JN2>XRiF>KJyvgXQXg_j zJ3Wk8+&!wqMi=;?O^Ap?w{HcWt!YXS&LuPysniUMDO1PyJ9^QPd#2O%N-jm-JB2-N zXul-c5}ot88_F}f5)+u02Xxq@dwFcfe-Z_!@fDj$hce3XW6YkQI(61npM~Y{{T2wj z&mg>VWMT$&E0|9#kDqsN;H+=5pia3`VRn>l=#c2MNx>S<5XnkSmL>GDZ#~IHdO;V7 zx%qUsKf}7kXSiTfHL8g8H zBZ*F_^SH_=AU8dVlCpxZRL@_e{|~v*p1$F$z*n9jT=21(kkD& zPI^JPs?NW+wjuS%>0rS(qqat9`PlR=I z+rJ^*a9#np$sFZaCCE_4-LhBY7>uteh6qA)Z6>f{V<2L7OW1wpFF`Cmfrd|kwg{}~OLmtXCgkWC3F)eOknq*?l_3oJDj z`wmZ*w;WUN&{8)lp7sG4qzYY7+zA#&dgm08MVYAbx3#$7cxtI6F zI-<8jHO164-`^Yf-dq;d0Tgg_g>7T9O6-q4H%PPdZ8>{51vnXO)AVV7RHjE+`M}*S zI#Q}`y*6Mk3UNj@)bZ|GHwFZ^m^{qYGhk6JY1*LoJq}qf6Zb!eTjAFVKubo(UNe(y-e_6m=D3nbr)MZ6?+)fe#Te4>&S9!l z+tMW|QG4-AW$C!C7g;Ie?DdK6h_#Q9rd|76K@T7o3(w?faya8p58?)eGmK8m?Dp{mTqW%UWfVcituWEDt z$1wCry)4ytX6#xBcf;kv&9LSZ507D4{>y?pr4*gx6)5sGWl>Y%%A%=@%BsFS8#PW?S{zNHBA1C}(yS3h!f5NqA_GZE5E9pfzACQ@I2!2| za*RiMkI+IPesL8@h&h%dekU`Ou(mgce+EI@gLTRPQ9;CNg9M9+7@u+nG zmu)RqjwjFHJI5$f`W>QOS%2h4Ex~i2Nvv#HdggF~!xX#m;mpet{yE);N0I8X-H&(o znRk?n@O_8&0>T$)RUb$PSV-$-NQW%Qg6l#7S%X>d?|Z!=huk&O;o7SV_{TJ|q@d%P zE3RA6aRcbr>v?d+QXyTZo3tLrsWeSa$Rw!yy+jlecsS{D$-Qs-i}@9gS@p%ZYwBnT zeu%q+nfq4>mfgx*@gwp}S}i;lfjXcJ*Y9pOib_y{c&rlO6WTa-60B1AwktIqi>WmC ze}u;RW%>N`zdo&qr5+;XLv4KD6a_a038Wd0EYA`dW*8^8W7cUl9W0)um6=Fj^H-qh z{j<%&(1SeVVh&`rJxuG0J-yA%8x=yF@t{L*Fy+!XeXy)=Ltv$Q(+n@pcPwjv9@V@a zc%H__Z95)CT=c`L{rX4$R^qfC+SKGKY>)T(?53`{b)#O(Og(SNK=VM*YLvlm_LdV!%j|1zNZsy+MR6Eo zn~uULux$}toFX$?{D&l9lTe_kD-TkLhnVbov%VOcso8~HH&j?CUbHJao_)i7zThWP zpcdeW*@e`{F)Szrxjj;HShWSWre4I|L~F7cF^N0LAHPYC_q22m2D_Nq-U;tGwWCF1-ky9Vl&AH=DkQ8lGk4?&0oZ3x26-L# zJuNvZ;5-c53AU0XXx8Y2C1z+UjF`msuvF2*yvADeDwt!@#k{4HH=-{}$lLplub5BL zc?OVf{h~B1j4>HD4xzn$KNf@9y9@wA9|ugLHZ#uHNT2;1T!XGfU?flD;JP=J^X<%W z-SHd|%rjn@xQ0Z2RxJg0Rga^4%cd!9oZFEh5-fiq{xqzG)OI~m1@IG65t?8J>{?Dm zuwOBV&RQoS>rb?H(K`Qz)HbdCvI~rZrf=&-o#sn!8?6t|_+!m0QPhA;XMxffCW8_M zWDSS9xrI3aKmbl;17W#;DG`gKHu|l?r6cwk;X%^qp6u@X&ABnpCz?_n0DE&OoUdv@vst8bxEW& z>qIA=gt6w1NWTVdG5|*VjFIQJ#;h=h`aZfXH`m5uZD?{Aw@XbggaPsaq%CZJ%Nm=X zCDTQ&7Wo(#xBD7-%k)V9b_lx;u8RqmV#b2?J8`;t$z@)YxM`J01@Uq?E!K+sXW(M1 z5r@{M75b;XEut%JSJL0lTbmWF!yBJnMiD{KHy(M(akr+`cd6Djwl!sHVA{t7ZN z6;{x;+7ftn#9+QQ0m`JjQ2*dEVCl?cVCe+#n*5eQh(R@b>&Uo@1eQqi>LJGZW0g)$ zuPR;=+0f(EmFyQ4nNj4US*bmog{kZ`xtJ-wzHY>C`Q4-w+iPPaT5%O;)z(nSk|>z4 zeiE1UvIHM@8s6V+j5}LOiyCU|^ywMgKZ1&2FSN;6Vjig^3$cdx{P&b4z6=zwEjl!y z*$HI#Hz{+l5b87++2#3RutH9zb0KaN1O2)(D14iOGD-BtoFL~m;ca{dVZW!#Gc3|TLDlL%lOLmkfFMx@$)LI%I=m7sH{WOE&%C=dj4x$9utcYBJ zU=pTH9=cb_C=W0bMOGC_b=+mwaugPJY>lbB$CVe?gun0?Iip@J@q%RiuJ|iHW08RZ zjudy){?&hJGgZ*uNyP32CiTmy15#|Rr9Ph}rAV|2%WUXQsPIt`*A<28_+7iRN3pt# z>*~*!8bhXcG;d9Q3g%PytUJJ&#zvZi6VfwKa9`snlMSVS8Yw6Lf2>t2dU4Vh;TzHL zsSgp_IteUF@|*I^n_w%FkPR|9y#`m7HlLQ20d*v3Coow+(_3f=go8CLp?3VL2#1~y zNJhcHP%=&frrLlZBsgLW5$$x!z!(85F3RENb4>O}UJ@+tK-ao%Yo3Y!;UfO@(v-`u z2G@swTj_zT;+hs*k@hg3TG#p&yUeb5M}UblZWj5N-?KlW=|`o3MjJUInJvb?KRkvt z57wVBD#bV7P-cCnX{_F}Hn&EJ0#NA^+7a^36mZ$~41Fd=eQ&Xmz^g6Qer)~LqB5

{=R7CoFOk(hTAN><%PU|im-^W;!tBR(^KAe!Fw&)06| zpe#G1SIWTFj+vywAzKq31Fd9OEd*|%QDYrZj?A#p-ig#4+|Zl8_c`*0BiQ0l6PjLZCU zYm47uU;47;-6#O8#kAHUxWI_V<`GlJ)zf-(Ac4A

{VAyuH5=E@60T`mMQulwuc_ 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�(U)5)zZo4kL<(lv@N2$RaaA3tuyI`^rlJ!g(f2}fu4c%Bs0<5o?Ih#f@sbX zrL*yehe>>=^6X7X(OxkbN)25 zWkEC5&zETNIt3re3gEBm=9^-ancknk-Ew9fg3nZ7MMD+L{%NSwgpsQw1Z4~%m$Awa zXm*jK#?@BfDH9uvU{}u4$;55Qh`VdUEGd@r>G=*4>F_aJAd2{Mx&Lz&le|!K(w(FA zvwnyp2rI8=<8EiiX#-%i71gqc(lw>p<1$B_Qn@wsizB5SZOLv&o=@w11hBlr-5n*@ z>kjF^xSst@4tuTLB_hb-hgv%$%ddVY7hWlYT6d7zF91A2o{f0M{;l!6=hR+wKQ|!y zu|lW#E}zqeB@x%<#*iHDmfT9WMxFxuISuK2zphL@RyzU!vpeQ24{0b+% z9s5XBN~S5*D_V?=^h6XZF~Yo&INSTd%j#FJ-@l@P#l5Y<#^mus{_I#td~0UCxL?`~ zB3#WKf6gC+!)}$bB|bk~DM$#ZUXD2jq}{st>ytYMxjfvEDfElo3;vHHs@vuH58jtz z61@+p$9Q)6Hj@UoijLvH1)VK~`8|HV7n~#(^e6tOYm7i+!L=Xvs`qy}uID;x7yJo_DKuie% z8ye2zrHQH^-L~^Y8k!|M1Qk~C#%00w46&TQjg{NxZP{fPm1ZQWyExQv^`%ASIU@&PpS4)SXc+P!SAWf({ zNM0`wIQW*{`<%WW&ThIGKUZ!m`|mZ`OQj9DJcO5&;A;#*8aYjmM&i(KMAw+xNflW! zf(&Ay&t-1=VRAQqbVI+%EhQA0!gPi-2B^7=`c%_3%h1_l54S0#(d7-I> z*1_+=_)tlH0k~)ten5zYiKnbCVzew?>(z*s9au}yC-&YK(lHNci%#vC`gXwo7$PA~ zFB(Tzq92cwovobq`bt=AAUbEgh$vxPS?J(~zrRADK*2jq$Z^Dp5BGFn^SSV#NVM!w zg~#p!MBNz42K-z3JzZG0LrsU^-;aq-2iE|#YTqo9LU)) zpCx|(dq}6tE6qnjc?h*Z)(@~wFYK@86()=Qk0^!MnwR>X_O8U6P?C#N<#x@fzHc$2lW+=}%Vli-{XP*;{i zXhu2c6B}Z7;lELD;HQYN@z>{&WbZ~`_9-1D^gR47!Q;$4p8Be!aJs^SMCDMBt$;hE z3URC>y0Si6_tSeBrJd*j)8F>hDpF4WJx8`NTz{w5Ct|Q-^sR7PoMH89-CEZ}mtrlG zVffw`YO@aoiU%BRR#o}XWgCekn5hew-$&PUD2pEJ+^BYKY{m+hDs{>!s&g0P{>ml^ zVTN~VBMG5vkG!!C(-sNOp49#8TF4Wo{~1nVe}<bj5Zo>!t#r?{`)1_dWFAO)0- z8>fA!^S#m^)jLj+nP8onZprvG1hO7a#j0Bf-7Yqky3L?FgSBbddY8JZUgQ z=ptztr$aYpb`6y2o}}3Y_6f)Ts+KZr3f z%99ET62H&*@8(#5Dar)$%q407Sc}3qmX_!yOwWOGb#V?&ow0=yqX*XP9`Sj8$s~Z_ z71g=O(krg5y@F-Kw0KRB84#W4UYD7`UP@c+U%L*Uc+;h%fmFJ7!GFl74nX+9yLe(O>r@*j?;8O6xyru?82scV@!=;=G>8y z->kKfa}FOF9cyeLd$j5tyjO+|5K`GF5WuxUL`77<@L9SmIHoo}UjN6BFDn}%YL`8cm!QruOr#R6 zlem=Lk}MH-hQ7Gu$}QT`7{4~(J>+w>^u2`sacarU_lPT4c%j2+Bw4C=JF!OZH0}}` z`>BdptQuadR0?E4BAo^xBZ#u%9J#Qqqi@lGDe@>W@F&dPoLNrtH9kd{>va=a`6qC1 z&Or4k)RZ`U##bRhHz}0~#d>MwQ42VNA|%R>;gV{pw%}FmfkStcc~&X8cK?!970z1@ z>Q_IsME`mN4Pc~DAKvqCQrI7*bTj|erA7v!eIT9`KsnR%QwOO}I@hN`38U^Hi)6p5 zGaJ@iaAo5t>4h5ycpJQ0MG5g zJI;0@*-3Jiaal1gp~s{(u>j*H^;|BL*rm+DBHK}0VNY4DuPWxE2g-+qD-^a;e>1*gKbsgqh@K)BCn9Bk*l#J@d_7$OEU?W;~ zR^t%%E!Kq{U)s+-OW*fu5jhoW_U~{lLHa$k!r(MfJTwG6>dO2#th^%Npphp-i$_StH{l-Z)Rly?d4`pddEl=?-Bc`L|11bj zzOgYDE$s|AQ4R?3NEtGf^0$URtQsNk1yFJFd-_01l1C+tOfPST6~S=WnieBnXs2mD z?D)j66gH_)e$D5y{<4IO$GGNqF=MY2~Ukgbv`-MMbzu66`W zQVQPcPQm5=gYmC^7gZ&MXy)KbFQ`LUK%<{tp_ zu~D;A#kt(u-9)%SMRF$O7a68D7v8I`)gIP zTL@>6ll=w~uKQWW8a2uy$@vh8Qd|z?$=owZ{e8Ul=26!hQOwbW_Q}z%$1-U(a%_MI z05CufI20?yoLkpTdx*P94DUTDne_ias;>C=*zyF+WcAYa#kHO~^{?g!J{C_&6uVYa zd7X+4SK6a_*#0`a(%~LUARsnNSP=t!nlfRymzM4kV|5xC;EV1$D`N;=wfelm*b0MV z33NL$@($=GD5uxXGjiL$Tx%OlSveF2iC}e+EF~Hoo@LSBFIcIiXFu{YksNvE zEs-n)KZpYR#2ZX>SJKMIE^&iwc@dX+kwMpics2(gbt0h|x@KA_f)aGh_m9fa8DB-G zY#nRkFUhSrd9t9Z&(ZA7AnMPlBLCksq+|M>L$g<&Hd*Y{+>i4<6Daz9V5f52Idg^qVsnxklln4BOgmgmIJ;$Yp^NxDqDu5x< zXtDivcL{RAC7a0|@+~$_=a>7&5lpEiqX@_CTRGtKGLdwbE6_fNh0T9|Gr8 zLtlR-@8^+C?wVW~)vaF|a*&c~!ds;`SqM93j7Xs)96H5mP#3bbB)GK;_)! zJz5@dppm3OAfZR=+2n!elv*XxkEj9SAc2S(ZDh{y2pJqIjD0T=Dz4iQqK-I{qmHpYpB9tG6|q6*vRwl)Z>y_^qWI*aT5>sLCDCJPj+9e@>0JqRty)d zu1^W7%0QzvCIc>Tp$9%t_5Cz2ef~ueU|>6uKC;noR|~~x3a$y!i6jp~#B$VZ+v&Ig z!kVwL9U?~nV8F8t;gWUq+?)~Tc?i+`Yh34#*H=B=rCnYyUUW6BOT9C70XX!xt4m*` zC-g?S4ldR3%MXuYWk3oAbN;Oq?}sIq^ahKh^=+n7xD1P}Sruqg2A=^erqG2C6ni^= zK%chBc;QPJiSEA77az4?70{C`kUzJ2nQy;`|2D{1dbERXU_oQRwVngB)7+POjQQJV z(wnxA-IizhSGV^>OH9k;oKif{k;Jm!_I@r2H(1M@xayjo?Ef!s875>|8Re%H5-#5K z-4n`%V7la=*Xn`_S*VgYWo-O6(-q0Xf^T0I9zIG&cujj09$h1nk%e(iHuCVBif>aD zF;O}uJ5hKaz!OHE7@~&xN2$(N&9$)KFgx*!6gBVzwLq7o(cj0V-Vhz)E>AtYv6*T& z6XAj>KLJ#eFR)kjJRB=k6e(5Gh>i2urq-!IYZZR)KpXO`yHKie*OoBr@Zcqw*OH;< zH<9=$Hz&}0-x`f6mDZV3+L_#RoOcc1+%=QNZ}A^mja#!av`89$3v-%7yGXm_N5oV@ zK8n@8N)P;awrv7%=y)7Ge1%}3UE;}OrNtao=qI!qJzAOV@J=W%&;|7f@_0U*0h@Ei zX4`jsKmu@w5MUkfXE%{hQa4aTWS24G`do0T{VHvV4rgP1yK#HV6A9N%Rr3?pF|9aH zi62c|;%F|v6%vm!F7_}_Mp;7EB;N8BnJhk}r)NKu7ooLC1h-rwIY4U&;8z7rN=d{G z6;RGO+jBn8RuQw5R3x)|a1$Mug1E+>J?k_axHAg!3QK3DCjb_9{IA$)u?lXrn-)ER zYsHF_1rMTi9)c#0bihI#sT8rZfdPHm&=L|h^4cYi8ZygH!&=>X$L>ILMZYu_#|;>f z@V2@UCV@jw4va31v84I8Erk0cXN;YF86xfG@N!Cu0fpujglv@4XQXl~bSw!f#4!{q zakYt2>8P`N;&21rQ|VSufD6`KQ&R}yg($l(_|rb2sjK6}=H0zr6<7?-hQ(E}MbvLa zRc%cn9YR{5wAZ)>J4PM;ow?n?={rorR`nhvu*Yhyz$6MJ1eZpQ+9Y(FwZ&`4GNji~ zQzMt*5&9SJ6p)^aW4T{KkkveVEftaZphVp8+8Vo5;BY~b!gcxFys)#tZY!iR`~#)t zt`D#+7TFCDF(0oy0v%23w1OF4VMZ9I%jG_^QhSCqELHi@(}XB z_-Hf=f;1netrZIU(+H!8f+BaabLnq_ZYa#UU>z%cVp-7_MoEZ-;f|tPI&`F7VZ;$R zL55}hp2+$w=4h%z&1-mL8+iYe$(N+27jY;`?9L(!-Zkbp&)9t-BpxJAdIdEGQ`c9k zBEUv^ek^zsh>CI{q%AfS;g7=J?^I&{qiJt85trP&$&yvh$nem(tjdm(a|pSrF%&fn za*?1o;rpc!d}nBmp<;O%@!tn3c`F;$M-BsOqtI9>d)H&FXLe(9e5J-TYDDA0w4_(h z;jsHabk&G{Pmf(K+j$%i02zRg5}n@6`X$}B%>)4JQx{zGom(&r_)CLWFV949^KS}% z`T{{!{DbPauTafNosb+>Y@}NAPbKDaK)jsCqbd=UT$6P_)Pwx#uuUmOY~bmraz|uyFDoyJzTGQYX$r z=%3*Rm*Q9^wT=eY!~*rXb)u_eiVr^LdQ)!fy`{a_Wf@PUo&i4kvNIEkvwuAhGFl3W zhKNqdPzNFO*~WJT|2<}XuwX^8(u@0~jp^IZJDf{d#SbRrZ;8WlPl#kTbz{5I0U?G; zQQ{xA3D1g80DV~zto_8U>~G1CI$#lDT_)Z6f=K0=0>#E+W5!5mA3Efr5NeNeTue=9 z*l91KcHzzXg2cF~HAeVhsY#vnWRsgpkfC?Mg`7xmsMLSEJJ-H^ZoZlMORG3zW3Zl6 zBoo9|2d}YB;;jTNG#3l0fziL})@Wb$x-S~8Iu0C0TTmKxBfo6@pR6`{_X2wwM_fwZ zW<*i}qyn=4=a4o=hDTM}4m7id5fc4Kv{MaKd)5$POn@H4pcW((EhZQ==OZj+G`@Bl z=l$w)YrEqAzGgAya!t37Y}lK-kl0|-8qe4yymgsM-FZkxMJhs-FNW_*tmxVW=mPdx zMVxyi9S9SFO|FhQL}r>_tHIwm_jN)wNb~pzqarQF&$k9u9X0j~xuttInIwV5r)tp( z^pl7qLjv}0Ykprpx1ov=;Zjf-*)6A2Suu}i5w6^xh7;%pN1k)Y@I_3I+rTkHH-hej>v4UKi2pGbSZfxbfL! zt*#qhM6*)72OS65QE=77W{=Pu36cFT+DQ{2eA7Cu+DxdgrigW)VJxBdbS7=hIXehn zL?t;Re`Slw4UGeYMM)8M9~JEy4`BVdv-};g6OQ;ST65l8A6#F(+p8`zbIO~ok{UYv zp&*rCK9CQ{^C7UU*BYecCZHj_2|j!|I8PrrI8DyPk-eLmvt8RoVhA|?R)Zp!BCcwX z9Nj7SIT*z=Zk?dJ1HkXXoaWuCAL(!kAN{o-6Or8a16~^(zK{VYcr9Fcte2CI9*LSu1ypxxAO{xdf>M<-Hx_tm#6qm29d>qw&v7kp%xlwi-SQk7w zufI?E3R4S|@HTi?bU~?kzv0(&daBB;EDvI-?ON#4e6#W{aSWH(h6xG2hezL`Hb#N3 z*TE*Kd<*2C{6Oqpqz!yyp=Sxsh#YTWGZu%JWz`tr=2;# zp0ym-+|I+Ozs;k&4;CrZcfkypLf!)@mXcJ*09XeRUJ7#PN`knW!%6$GOjGus41Uea zu3DK3i55cqL3uNL-E|J76PI*(3uc-RJa|m=Rdk%PP~t|wfC#|iJIp)rePi40vitzM zamqf|cHNFC-R{jH)UGBeC)J$ny@Y0FiI6-c+I6rzVKR$1JTcvs3jq&sMa~|lb@?4R zz8*kOi4L(KFP4DH4X`^-Kkhpl7m$?XF^AulGW2D4Rg5|bDkQc>@YD0txMT=w|7UOD zO(u)`XrKn1o}f%FI3D#yEKm_gz&kU2gTmegn6?9fK*QG38bMqURDA%oIxGUTvL5uz zCF60QT%NI-%dYRWcaw@tJbg;WaO^dyMiyPphd%-R3XLrDLncr`qT=cMQ#$18nDW`% zhmokN1!HEb#%Xs4*%lkJIlCCp*s+995zo-<;)Y$d8a{D$&e9RM&zuJb-v4%DarNK#EY-~1FCw^HApatsLkR-@htjr=@RnK9IjTfKAV64v$ z?N#La{PS2d=@FoY8TU5xMA1L&Q4d7j!8g$6#Io%fL=OuSzlN662XR$+t@w8E9gG_k)w1VqTRYJ`E`esc;p68A8NCOLJY{L>$t70|(9+2?Yb%ZZqf7 zHeiD2D35wWEOGMCS$JI31KZG5PpS<`K`7E~$fE^(M1~-P7`X<|9v zsIM54h$1N~sWRk0i+?K#8ck3a1paDoniPQwS$4r=zKd9g_1cWypB-{_e1-QLoFbZn z1<;^I(s?%^BcDoTOI=i!$JdL3D5re5)vtjr9T@+6LZLc9K002Q#m8qwOh35#08RjK zczMhEgME70M`!RMzG#|axWjcL#7mvy!UQGrXEV-(eZHPi+~VH=Q=mbVjpKsR;f_V1UmXr zI26{Eb2l;;SaETfG&eF3`IMRv-)va z!TtMM+vrsT4XEM}3iJHPE`cS-788nmF>jx(=hcXwRyF9+SGa*I2q1!5B`;u|@8~g@ z9;z>>(BN(G#B Gq!<1lOI14Y=F&`Ji4V>rz$bXd~Z}@+GdpKE=WyJT-2LpQ#H%y zujiD~ql!}8#yynY#)*WaXj0;IE3|JW%PYAN27S{fqkp--ECoONMvxb%UO2#UYl3!C zVDe9+7z0j^gWT{3bZ195+OQrfN@zOo|4+)5N}ZY6h8LgzKE1v`X`9@aKG6L{=PNz! z0Hi$W3g5!HjtA;=hyJjXCf!`XANQFq>GR-)A;*B$-_S(9-_fd6!_eHQ!{#*e!X6qc zrjo#eHBH;=(q_&!!<|0_8t&Ul`9#lToR#57Zpz7$+%$=jq^!mj6-Ffurx@6@dc1BJ zHCkJ8q-OK&7+IC|F7$_>_7Y>aA4LFvU+&M%^0cx{T%Q|=Y|*t4qok?7kjuPj$1HgkcM zi0;rh#$Sl*O?>=6Zm`3Y3KaXIU(VboFsU}9(Shaad!;+Jha7Bbz~*a~K3VX^scKx> zU{Uzaf{fq=_dW}21lPFafKJ4J{&bN|d^S2PB4qE^ylwJs+Q);xx?!sj5=VAhFR2rk z0KHD>ZQ!mOi)eK9p0umrDD+ha^W@9z*!r;>(cg znBgUz$KbYVl_Tc~J0LR5Vn_uI=YW1|pg9r^bb{3Wej7)T&7Wk#l-fD8)J#NDSHet0 z3p6MU8F7q50PH_w?S0R70cR8B>u)Epn4RCN9qb%DEdKD2AvaFd=#<$RAUUK9(WvWR zu;Su_P+7c$lwDcIU{C(MizV6h`YQj1%ungK_TxBN!V>0@bNMf7;@iWZDNOc!$hx5s zvVr?+^*o|@fpXV*-;*O}%cTc_+I+|>h-$4s7QV$=^)Aatl}3v&m3}m!`D(yWzF(OL6(7zi|Dd z9E^m$q}{Fx_Lv6s0ZY35bvC>y@CxKG)~i{{-a3rAoRH^#m#JLe@Vdh6Z(&qa$K?AD zc$r4QDpw@X`wr#nCRB{Ow@l8hN__SuC)_DZiEN;C0P8@in@iM`^Oe28N*>W`FEDK^ zg#F(G_S?5k&kkk|rG6I$b0oe(GVQbunM>wg$54hz_CVhmNF^i$Cu&{Gyc!?qb9rOZ z&dn@LHz->t|L7$SmJ+vpp}L73B-Gljl8k7F5NA%5P+};0vs2%`59A1aCWVm<7+Rl+ z_%*c77(%BsZf&v{6)~<3VWnVM5&SfA-!QqW;kFaF_~C})xybOtK&0JO*AQO}Z9wQ~ zJ<}s6wswinZnoR})F&6qMlT&FAX@Hn`)yC+@jo+@^7e-c27%yBn`lHqwFJS5lA{C% zs*@yrFLQDcTeU=Xz8kYYi5fSzUHoz`ch5IIC!5?GiAnctqx_He?WwxpfX|mz`|T^R zzy73gw_73anszKni6W%IsJn1EE3bBro4G)9t9RQzr?J*~6b2R3rcf`(#JE~DA;VO7 zBttBu2aC+X7234*!cOK4E=b-8CnGRrODM%pCd?T#i|b;u7kC}O{rao?Zbz9C8pn1% zXn-#An}iMqJh_S^zvuJrr~){9dG{6ux>6w_o`97=`mV3lpYu`KSGUlEeL^}Q9N_<2 z_I~@gc!CTs>49fmSVxCd*oH_r`ZWW7?!%Wh)&a^FmM_bHT(+wb{iwnqHR)6c$r>*( zD|z2!2*Hf?9QimXXST&FQ1$QtZu#N&2%Mt$1~3?V3%?8si+6-9xr&B%w{iE@q;UEe zAd^m%4|mL2qB)p8MRFhtrC||&G#xTHfdGCx=!L9~@ab>4l6WCh$;0Uv*zG}@$W$(7 zqGXtiu?x4U8!|D`P8*+8Ph;w=sx+?}&p4uOffaw#)7O`nBo6E>eq3z_(B*kS>XCqC zAwqbc{FfwrnVzGB$=doCZmf3x=7l=ycitOh|A`iGHl4qIUP{+%ugXLcZZ|cDDd;eB zAZ-!Qg&M**r!T_MVX~_WSU8spMrC^o`E8%R+bMEm+~ZM%+?}?C{Ry*+xRT3fa~0aM z$%OgH$SHZCo}Gjhh;!A^5pi9=6ch`@eVVtc4jr(AZ5hvrs>3dSQWw9*+5mUJ??Kjb zeZr)}(rH4e^~WZpdU#;JdLP|OHPyV9b;$DBu7%*TNgusQU-NIt*naRFpD8{Vp!l$B zA_X@wa956NCsfu`c5{TKDG$kpVTr~j7rPG&u%0$t7LI*_N6fDp5eHG0nqUpjj0o-* zh;f26rDUHV_!U&WLqaix2}?tVLi*0&M)+shv|7CY6K@GV7a?Y=3zl7yp4CKSlu)4;wduZC{3?~;jHau z3Z`i@-OSz@1{zeb=rY(!wnepQAKVw8nI3y*QF&&Q`W^-F;5O0YLq}3Ogp3~mxh+d% zh`Lk_l|;7+E4j7nVTCpvuLPd?x6tBRtMz;2#IN)G&zuj?|8834=#DBs3b}q=%uM)*{jZ@&K<1fZ1CT zUcx6N6Qd8F1dr-AXJf4Xv#4V!{dGq#>=k?kw|net#svVj+sFn0h-<61B&+OFRD8dr z(NZL{(hIu3ehKsvA=T#TUMT99c4*%zb~7VA%w=zp@D5YCf!#DBknNq46p~H|Qwv)A z@(uRRPCxzdCsFCmlSZs<*&F52rVW??;fM>AAJD?ZLYtjfz<;XD?&}+?>;uPmlZa(g z!VmLh&h#83w@!i6=%@|?w3y+v9+)&+b8ny(MIRZO1o+*mJ0|FoItFcjm}bEBFz}+` zv=ghbWmp}h!3$n4aq#FQ)Vj8dD)@gk6tP^ULk40@tnJ|o5@u_5fI&Lw(5 zL{(W-^_O*z;APrz@b+eS_e8)~)it+cc?rtgPAsR9+iB4{3f9$f47|8_2SD&MK^T7u z{!lDe-B|vsKk!4r))L7&=(n@{GsoIcwg#CLgWY5{^eU@KL%Z1=#@LV7B~L6QdGpu_3+wNpNb{cc*RKR{?2wB&#}t~OXtz)YwyK^&+}6&L z5`K4x_YvAwkoSyVOs)Ezg5c>R@{-(qo9b+J1{BA)WKrT*&qGx1B$l{oT>9(}_fJn} zhWVj{=15HAfOyJkU5+$BrhDgFwrD8M)LE?v9UH&}1(*bFhPqGtF zF0Um?D~qon`$7BP2burY8j{S;iD@l2M2ZK;r-hUl)KSYWO(pulctjee4%9f{_U39( zyUW9HSn~1lPi)q9RmuS^YO*9{v7K;9j)en{9`tXNsCz|o^7V>Sn=j{XubrP2PTi~f zn+e(}+?L7g!0f-8%Re9PGfhe0EuIFCi>UhT&h|&fG;wN<7)v~@I5o|N*}k8)A!3Ah zJ+4<78=h_^$QPz8FKG^q2>ez|z!%#?k{^!MKrNXBdJ;Xd#{5ro5Q}&`dtgt^TJ+k< zEVP_dsAP=44v1WXIh}pvkNGhg(C(N5K`6jo6Lksns2~!Fnfz(wr2Xx= zCt9*1$v9*t2;neOMy?G?P#NE%;0N*(stv7E+)Zkiz5E60eaj1&O%mwaEAlF^3zX~} z*MT4q^L@V{@mPlV>YirC9%hB7&P;YG*^xX#h2dB_`<+=5PNzwK<8IPyPVrk!n>quew{nTtFYR5|O;#0&>STtalSTG#}aOQWwP6^$^|mRMO2ns0g%X`JB%aHrVTHFCLUZNurTlzhvpWVH(Y|JvL6So}3|3FW?7(8vP zRWfT_LLCYZfMwXy5Hwp)QAUAy69hf5W{^;I1U7Tia;bD0*SyZ|i8FF2rf{Zj)lj&p zdGW8ZTc8GTLmSw`Fvx1WZXDgC95VrM{68o3FZa0>*q>9)T-LpCASCsNfCv}kC#r6z zYi;y@62gognvOD7O8`w1uBHS*7*kHW$7IbDP$XWN4QRGt6_rE;$#OncLzVl0%02Zm zp=@y9p2UO#Z3aL zamA<=XLNE-U0WcQ_K1_!|2*|U)4$U+0v#lZ0`V6*b1Z=ud|Z@owv)K^7n=C;gDAWD z2>M0Vs(l+`ggUrl8z>s%jkVmXhppTAs=i`JDvGRbF3@ZQ*!C18^y*iW$zv{u^_n&8 z&W@a947Z0Ze_uTo8LWgjfeRZo7<3#=RLYHIPf&?dC^kV-(`G;1|BSz62Zokko+f#= zKEgceeNy@#711oEkN5+D1nACgbglDch}Rj*^CuygIfZTVMK@yFHOg<4Pe!n5TxQoboWShP7LET#Q45y6; z8m@?a%@R;jIIs#k6ek9Ws}*P==_Y^cpqS*NOYysfXie4h5{^&AK79BRqyYYKF028P z>O(b@>9&Dz7voN5vyjR)1T+KS1SzE&KZHCkKxsMrQVf1x7cA!Hlx(Ss?K(~`(S7lY2)kgq2-n zJ!fK5K-a5!CIyZ;bV>+5TnM*qmsF!vW*v65v$e*vJb8H61nR|JpZism1^hqfkVa&s zOekIW2m~#`(j>}u%{l>2OL@7-b8KMSv*2Zkb;mo%>24TL>tK1b?xjKn>0Xw%6f}hC zibM!)6b9|_&W$TKK3*Lqe~LRiNZ%_)8YjCQzE4*$uvlN-Rm0> z&i0&IRw&0vu$hG2yH!DVRQoHIbxr{-ck0?8Xug$|Tl~UbJ8mRgKSP|>935T-Yyqtr zk(~;5rY+SRM)$VuXM6@KQG|8{S6WIh#lkh$L3NZg=Fy?(4re**oxnZ$mKhkjiCMnj zRloMpxaw5IU3%AX%zK;gf;k&EY2%_?J^hI{kiO?w2^W1ukAG6j%wqbtNYO1*N{Ir% z3>TDMn%Xej63@H{R97!vnHpj=;$*kKqNO>KjiTf14xjMC>2Ref_hq*ZG{F!HDpUkC*a3^D=7r{ax!5$@p2eKSzd6S|aJ zwUb35R1-c96%yrh@_F_)kuc$i;jy?lgJD#?&e{yQU(tr_)bSD*XRT*4oMk%^jKuc< zNUyN!C(AH>Tr48u-#ZN;?-bXETaPTtLaKC^KiQ<8408v)v1G&kA$E0H17yP8XfN}! z_czNoPEmdTX@3_!Jy`vQ7dAoC$FEl#|x~DgH2!O0%=`SFtOXx zz3SRve3c*b$HrjbX`|RN)7iAh#32x)js%8eUuKCF6i-<6Hm=A%-S5DR$?-mD&9epZ z?Yqa&>g4Vc(q$K@H~{x<#xeHWi9W_WqrA_j$UOuHDZip4SU%V90s?V3TpYxca`GiL zxiu9NsG)X$pUWGby2=~bw)oER>*70F@%L}^z(&a|c(4;*GPQ0`ed}?MuxFjpzu}c~ z$A?#MiMa45;p_JPtl>{+b!nBmQyo~)r${Mp7cLPLKqe~5$ zhbnBB?#8#O1h`DaiXg2~e2UAiL-BZ7!!1mjZ8q2~N#&t6t?g6mhHa^v$6KtNrW5D; zz6E;z`Q!phO6*VE5;&3MFj_)1$kHUJf-wfVo(W1NO(8XB$C8Rg&1^r>gpDkknS9UN z9ySoI!mV&uPr0eek?Sl`7;{bruV6k#d4(IzAqz|Oy~Y;PL#8|jDg5@j3G5nk>F&t)W3`AcTZzCdoXw;uAho}wFepwZb}iza zseIE_UIUBB2#$}yl7?1yDhU!IreM1O%1dY82ngBSy1UW2M@~rA$YQ3evBd-hV-#8b z`Y-E}D1hE;I@l@5*WeaWgoA8`_)p6uz!8#<1GOS2M8rUy-{;cC$*$^hnw#%_H_D{} zTFX``2LQ<^N#rcXh6ClzD{6mfc*#Ify#by1ivO&I(}VS-_}6Meg+6342lEZ+Fh00s z#vO$9Pf=t}YW9H*6i2*%CrJ`Hf5G)EqVn`m-&~L!Hw(+dDS@JCzKoYN$ z^}YrL4Q9VSCKdARb>pLnw{^2;m9p3TrNkB{7P77^SgtLms|I)DsapY(dU&diSq9wi zfa(w}1=MTnM^Z%ovbSedtHeDSqIVEt+q#aGazQ2u$A~vZW~bMJ?3I;~$6ysy@eFQ? z>F4w4Us}4{vs5D`BoMy;?00Dotz_Yv=cUavsN!bJ7+h z!_Om|6$7wz?E}4$H4BSb9}}f0V`N@~E~T#?JO6^bYtA>T5*oLn(lZBfPzED0 zHS6o!(Ud94*tV%pLus=nz)P8xnbPYn9VxFM;XV?K$S-JD(^{*)`u%2}py-E_6;jmk zFZyyP!oglC3hdipGDfxqyk71M=x2Bf{ZWOB;n~Q?zraZ5==Fl@pR}^*A^&NjlZkGb zxWH0Ri2+l^0@;Xi<}ALiF;yiLulSfZm?z0mxaT1DA4;;i}-9P)ZskmfQW z&x_=X#aqr-kw|BHZh%au9o|&uM`$LZ*nw1G`lSTohDdtDB!rqtSq3Gp0!$WxmkTBT zf)o_F$N0xXGcfOltsJLk)X-~0h-C1oeHEoSE(F`c6@wB7ZNG_bvb*@mk{b5RU#x=i zF(D_pi^LG)p8b#MlhTx?s2;jQHGHe<>*Gi@2_h%5?Kbcg&9v~ zX^?A50q~cFCJy9j{FB{4jPIQJlYYcZiM-y+8 zI0}ogQ1IxnW%hzX;qNT`q4TpJs zDKeNm5l~A2j_sd?=-B?iCq_TPq^!5DK{G{$G(YA$Vcun=9Ojg&o=*%xPXw}D7-ULZ zzI!KLpJ;d8vJMGUNDZ8Mb^#d^z`1-ffw~{^1{SF89^$c8)n(?FrKXmJL6Brgxk6lz zhl2_T^7*8(DB6a>CAPohR>IRcfZ1cQWwGcQ! z=$r3Byy`@Ms~Ayn+%c>THge6*aILkVnlj8NTJ*c_sm>D)<45AX+pI>ZqsSYi#v|MPpYhwrer3s&=4m|>*ovz}a@`r}2-R}z9Hj!B!~N&RfR|K9Bf zMc}L%xf{StMMIwIUnBUdQY5%1=rE4&Fa|2{E<@s0`fm z%ftoFU1q2VgJba?t~u&2u-tRys~(y#|}Jw=n)1U{Sc8eKT8jMJ?k1{!zuL;y^t_{>SV^$6@qAny_IaeV#mRP=?W1)E$13P>MT=J)8UkUpIm~G1sOn(m&GWHm@gtQAVmDEjDuoKX^cdTDo}iP(`(lS2 za+}rzp6fT3yV57yHE8YfUd~DzvscMlx7;GzKL!EXm<+HpR8yw5I;xdzDP(mWbnXpqlvI7yndVIZQf2Do)H)C07 zR0Kb>4rm`(9Bj&>HY?yfIWO3M#(6xBi1|G_1Smq}t&;!P`k;InyBDa$yFUl|Kzl0t z9&JklB?a$#z23EA$`+B#x0n0*@*blGq~PO$q>my5JAX0(>LR$wNimwy=*M5_P*R=% z1%qXuV0eqk<=X+=$c)=HAX(vAKBx4rrN^m}-8)aZr+UN7(#=9!{}4^-xD>(Dnq>47 zx<&4oOZyum%RVsPHHr?v^9*)P(c2>F zS!b~1MTQ~6;+oaVR9iErb+*ho_<6H0+<43WT;5=i5&{@*-ISl^+oS0T(rFY>PyHgV z%^U@%9CSJUufH$P`o*@yqE-Xr3_`MpUVL&earJMw!nV@M<=wZ(9?ol6YcqYu`CqhX z#B#W+%y|N?ytePnAhmueaUe4Cp!2H^u6r%qTitDn3722Q0j$v4W-+Q_Tatvwx% z4|;D~9Aw({X^1}g|KLibRJljg6buvvT<{D>TmGtPhW+!h{G3u4%Ov)sAF>1wA7d?O zCv*F2RVFaW_J1O37UA@!IvDs7nS2_7*J#e&CMr7RZwNdeYWZY*>iG6YY1q4K-$-|y znaz>jYY--z^aJem4ObU;*0k|sqtQ>*!v9(ud+vQ>ljBc9BB^11)?r=2qGMTL_o}=iO%H%&&2R~2O zIbJfi+8LyM0DBO;6kZ6FsK|NID00$T5Bg88F5_y=@Xceac!XBb<)c|K3a(Tr)0E)` zJ%vrQHLjkg$8GI0+Y~aFmF?0!)uR3JxzG?|4V@sanZ1xQyD{?RvM!!St_roNFV_`R z#8(?sKbOU1GM;lA3hTGYccnAg503R2ja99RqMJ3=9ESuKXs6gfQs@uWH~ zTkWp?%Y@smY8;NX(N=8ndpL#eR*2yeLdp@I8eRRhuK8@1=@35JVQj{JBKjgzAh3`% zwKlAbaopliw;)@sHiRF3Fyf(@WO^*Pnu!s?DS*p$x?$l{D-IpaD1FH+2&$0rkNx@< zl8LAQP)4|DAaY#cyZ_nd_=Ti``}y?jrYE^viK-7oL7T1*8gVe7Ra|xOna%!M$c|0n>IqS3Pb=1YpviU1j z{hneXC@Je|$MX2=`;aKcYT)YZ6fSnDTZYHAIJydC%5jGi|6zoW0ICy()C@6RH0x{i zUY6W_)n$Xkmnq4<5e}M|fQ{@dvOeYbr3w01a%`i*y-zi`fz}E=mtPOBD|8vpe-eB>#xBdzTb0XN~SR5NRS}U z5|1h&rtq&f;az6veII2~N$V<{MRIup(*&DfYCwYSMu>`EUI!0#DudrJ9vl#2ko%}J zi2v8p$^^_7CG!bsP107mk8>fS`1+!1oeHoT(|fuha|0X!iUd$ z@9dErwwnx99J9ox!Bb)vQX?tlU!n#50UpWdXBPZ3i1WUXrx8%f(N)2z=lGn$!$aM_ z@emT5VG~AK*PqQtfAP~A#g9ESA~b|X-u?XfZz?iui6wqB(HdsX3PTR5A<<^N>`+~i zdk=3N^QrVmz2Vi~btk=HQGQ+ug{sTRwzLy^lzj-22@G?5C_G~1uz}d}zR0-T#i5Uc zVP{$(;szg`EqyNp1^_6Ur65Hhcw+C1{MQ5*p=8@(;PZnTQ1H4S-vc2(_i00QY!EQd zLeK)BX}6hbX70#8DT8~)h)Y|O8PT5a-q{yaoW1T>QO;8uo`xX@T+`C8Wg3iBScwdP zL4w7)T=DDm$JGHnLn%ZK%be6N43Oq0-dDeLCp2x%evw1(_UY(#;3k@YW|qT(W&tV* z#K)XSO^3*dCUIfj6x)_LzB^LAG4qKmmrDop7uqZGH|KjZGtNnCnjMh?I@Mz<0nlbuq*vNO9(7x@ zJMdTLj1I#8ksHTl<&*xmXG=DR<*D=2tJ)^GYjV}>H>KKu$kim8J&0R?iz?0bV5`A? zkp{SwEkyWits=a=fO`=aSJuJj40)`Lo`W&^LYxo~8bN{`Y~KZ3u!04r z5yieK+lx*x4p(_zbe>!*U+s$ua#Q!HmQg!ZN$}s?f=qawd&6A{4-X(%q9vwSf)yPp zB9l7UUe$y|n~?OZe9Tf}t@q zBI!@a1hpnqx=`;S8qvro4M*XG3SPiW5iKZPyx$l<&33L3J?r*;QGtR3mQCuU%cUff zk}nlRH7iP;%6DtbgNr!3M*taK?@7?-lqv{nK;5+Wli+z$YFm@d%5$>Dj0Zz$!*(HqL z`=|POYH`pJ%|WLib8S=48I7F?@>gEkQ;pYdtjnh(NjgHI4iT!3x3d$<) zDw}gmM4J&H)Hido*5?usQtvbUmu;)YBu!-}xgOPh;5HEm6{%?$o)>6`Z|QD6rW7Ed z>}l`!eq`hZ{Ck&DR-Q}_Y)+MqOdB@NyCo_p(vRWsPe3>a$ zh*^oA{!zF&UIkn_Vc7mn(sBgEfA4>txn5Hs9DCrt3*XiYjzpJ^{Mw$u-$dNcx?@`W zj$0hhQzF{IDj&mkg^#rSyq)8*CCD*G<@()(7t%xADqn)7VO>JWczABfh*R=<{(*@Y%RoflVIRiPWEBAEU+ zrAlObN0$;4Vi_4nitO+A0!FN>j9R6GMTua*HcpdNUoVk^ z8`F0rai>`}PY~%qLVX5ju*+5)Sx+9_XfsU<%pgE>pFT2sL9;6j{-!~CW};yeF_2^_ zhmQ-i$_?Hn!OK^oR@mpSent1`_1rgwrHhay=9#WgBQ2YAIE_z`;r!+eK}!B(`*)Im zmtZa!T{Ik#P$ivsQQW>Kf)hzS8-?>g$3?>!gsnVdzR-Ths%Tn)%kYmiVrT4H@j|MV z;ZJH0)IL7xdV5xp3G1pbb~SI}@Zt=O+ENn-|8G%o#p_e0TQv-AfA*J;#xLNvP>rq; zS72?LtMAc#x&-;0NU-aBV54K(M};Pk7U$QBmf^wCgx=r=-%ym%$B(sWH%GR+fF_lR zpK^?2Yh}yb{}zu>1Lx6&&oFS7CBmXoI$0d{`blVwoH9*4vz^7)qn=9lv@z8S?HWiD-b zs60&$T?GPD-{l$<9peCj9U+l2o1r~e=gCUpT$)#T8hb7KwC zz7(#jTnil^cIegmP(3-}TcaT!8k^hOSd_qNJmGfMRqI>YO?-65K~<#Xcd^*4 zo9XIY+w^9qTwP6Z-U5Q${=!ql3d~E5&E^P9wpPl#0EkM`JZ*PG<1_%W{A)9%5g7wy zXf-D{W6e*^35XU`^QR3a_}%sf-xvC zQe*D9(!5IN)iyoc1*rdtc1c6HzJW ztlNkJcZr8P!gF24KZtCWXCd%p{v(~a6XMYU@Te=W{vck4?tsbm*w?s+lb~J-NEQFL ztcEB6J1F@DW<`{>!%##A+2t@NW1uP?#+TeD(bq%3A3c2%1l|6n9;- z!f()kt#vyP{OMUQ?tpE-Rn*FYPIk4u_TofrU?FWyM*b?*gK8SE}csLjI6HH;59QiFwz%;i%eVKtDBhUHXT68Q=ZsGqBmi1 z;i_O%k1#h6OY|*otL;N`6j9P@Gl919uAsLPA`OHtO5~(yhexUVxM@z)ruC2IP-n|z zSpnEv^Lc|ZEcYnn?Uyzmy}BIgz!{sO3Xw<-L+JGjkHG?C{$T}-{($hs+g4!EJl^_M zMzkCxv7fj$0^ObgwFUOy%o`iPhdDb$R(ry0m%ykuI_s$GS3~82VsiBXIeBCc+lF6%nFpcWvo&a-hQ%}g982C`G5i4 zJBdF3D8VgtmWJJgn`_|_ZYCz)(Zy0AFx(;I(bypsE#|%XWkOC;VZGtt6@Kl;Np0e4 z?xT0OOts=QfFD|Q@fI9Y+$z3#Yb9v>6g(R3p}^z8EZ9pzc!qII9)fSjbs96_p-7ku z!zWTS(OpZ$kO%1GK;L$U4EoB+8E$5tZ&a2FsVnDE^V~<(5!l@9Ct&tE13*qnZpQ7` zUOag7^)$_valojG*1U7Mqe>NSABLrN4=cl**_CZk!94_Ke;}JN)123L_ZvH8Lb&6i1imC2!a%xv6oC zO1=HDw#P|T?f*M*ct)|`xXsq>ZwLdDcz{ke0Hm<%NE!3kw|Ll_=uepNF8~04Ek^f} z45pAYN(Mkyo&jdM(e8jInUXOQ0*%6Kv1;hMAMg%lmTAUB%5fXp_<6avQW6gOG%8!N znK@s01MZod1Pl0(hmj3~Yq&(c8J>WS!36?MHwMG-em{ZkXg@w*@C?QbGyny37_)w1 zTR1OCcJ10)ewh-F2BWX4tGP&^b9*J0o#uN4*`nP{Nt-O0fRq-DluxZkA|6C@BEyzP z2%~st@A3)pGCBxFzkAB!c`{;oy{sG3kbZjflB0^Y-^#pQ~5pvlPWXPh8dz$TN_3AQ$SDI{<-$- zkO?QHQU(Tq7+h^uV~$oS8{w=G#jt-bvKIl|;v40v+^A8#nm$FEiTkO`4G42Sv&?;) zMmU2^*c^VnMWjZv6n}aYaChJeElaE{^f^Z}SyHf(51uZow z!QSv5j<~t1!}){ySrX}KuHA(Ki)tL{*P^~kS!8bkU}{?A%A&`Pr-sJp-nsW4G%sl# z(G;Z1Dz^lO97RA6+NKrpRFHt!H2%h_qt@~4tOS#|a9W%QmxB<~z>H6i(^~DFEUJHQR?Kg5(F=63W+>Ad z+<_wyuzQCa&v)fp-{n@tUrDPrNj|rwrBfAdS~|pTKGvazPt!i7W5BB3_h63*M|CB$ z?ST}^0WR)Vcc3~aI;$m!$?@MO;#6B*2NOx7~HJTmt&gvb= z)GgNItWKBySeB8@B2O(V@!K@)@`^x#ERU7k*>f~K^ zQ}g_m8--FlZmom>JQ~0#x=Qmkh5gsmLH=)(dsDX&Z)3cp@jq5}PSZapEfFb>o> ztu=DAB%3U~rAq*_?K*DD@Tlnzqgq8P-ga%@lItdcl zKEggLov&}%sMhFg_$X$rOF}4B{;C26He-;y*IQh3!wVsP3^s21jP6H=wdjd01 zBOr{Nyo$FMWDdw+WTE7B=b>inBo{gP1GF9$3TGLjQ-tHn$*`ZA*14h9hHJG~9vs`UC}~UPE_R zxI%hy-g93;GIMT|lex?KMb`6BX?Q&!5GaaE%^2H=?V85G*#LR?d{GKwmo$M8mID4r zV=EYb;p*gKo+CB65OamNx~ZpQE4~hi*Xj1ifIuv}83sy79|Nz}KDrE>fQz>4_%NEN zqv!8}VOtC;JQCg$6xhsSyte8uX=;pR(hkkd%RDV8XxB40_Q#b%n`-}hef85KeLo)I z5)f;Jg!sS8;Z{veUXQaziPH909o<;Fx>`B3ukvfJQd!$Xbdt0!e6d`L*)f(oK6ZO;_sZpSv@N5J zeDUp8b$(naG5$jrwaYMZ0lXE^4#`SzWo4T}c+Cz^OiO=Y{jdAlXM3TN)NPC??4aOH z$Q9vi^NPzM)c_@Mw;H~iyEhk!U=lk?{WB5l%(*44fu<=aGk}UCyYN5hpeE5pp_8vISvQF_kCngT56lilUAB0of1pV3r(poB347lecNP1pMGU| zMlH6zlHTJU598&t$h=E)?2aNzr@~_{-DTSDRON1=ztX;fRG$Q!^bUUFVA(U+c79f^ zMpwrBmouqqkqaat3NVAWMkC9}?+QD_=FaZE7u*&Gkz6mZR&Z>V;B?PF~N5r!%O=k3z_ zt+7al>u$!FHU&VI2kVgLHM%3E{R;p`@u?I8!3;!~a@jv|NJPh>JqsGPP3b)R1X6`K z4xCOBMF>P0I$(kCc!DA@nmCyM7Qu7s=)K;3G#>wRqLVu;h+%W#XWRTbT>5L}-g_V` zY|P6Dxd6?8p>%U^6A5@b|KRd6zCPtXIi#_WGocC`J5Z>wO{m*@AW&N<(fLpEWUCY2 z77{bHiDo|uM3?{);KqFTleb?2YDUM_kxW3h@cr-sQipKSYA`jUCA9-7Elq(Lj*Gg3 zOYPas&P@l@rMdEE+S&HZGF+poVM#A91*BNj@uv&CT6x)KtaCl{BH=T#ygU6b*Gw{? zOu=}a^u^oeOS;A-thizS-|qaP;;YkFxnEA56sO7@ZAGj%kZwbxTCyvIIEp*r>K_X} zWK`}1$rvfsqRz{zmsOK-P%z)*cR}Ig9IOnGdoUTwjw85-U>B^ov-W^)S+ePeZzIGA zthVqSW)aTITjTPb(dx-t8G0A+6^UTv95`aR&5-#ul$1bJtOs_FidhE^I!ESIc2POM zU+6v2v;-sqi}O2o7VcRTML`ecx;>o10P6Cby%|54RC@HTd2~T%Uq?Oz!;k9txtm z``#p?_ikPR6Wy))NY^hDqRax^G}?>5o$TAG~b!z6HEQJD`Kz6PWBK@<;sx=fNj zGhr2(u+Uv&Gy5O~(?FM#Wuu1_F=1qA1-$%t(=dK;{xRK9q!vD^f4!=E)ri!IXg0w7 z{6DToGyfhdbt`ds{Wd^spW*6=-xP6~RB{C*?4aVLP>ElO@i+inoW`10aqA|ZHT~0s zVHwCq+mbK&S!ag78{jRVQZP;hMYHHytk3`l`%$@JL91=^;h;br$n7b!cGdXh$C|j* zuS8izIF-VG%XM+hHYMF@%m*~7fl)l6>!`%yR4{ilP$<;3Ohejj9_~b{KV0=y56qj>xM?X8t&zh@t5tGtCJ^)4E1sIgU*DdK5D^Di~2Bk z;&lHOv3JDa6x8LrTgaTw#E7%F)y6E~f#jNO{=Z2{V@4f~dlsh#s}R(Yms4BRgA4<$ zBMj4D7Bz$u?N?1*1gwk#<0TBkg)_yO+5#uuTUz`(CzGfTEEc>`p7wZp3ZQOGARvJ3 zER~Zy4h$Fx17SqswHLsxhl{oX#$r6YSk*aPH8G8r-sXVnl+}4l@ORA7#nQ|U-vSi7 zdq#LwVOE%*+`_5dPzZ!COvTp@dpyq9oat@m26s9Vqdy9b(O8R3c#Z5-)&C^{GXyZ? z!2Br~ph{L%R#QFO5Z|D4Jd52jinj+QpH}%|Tg9exaZ0Mm0C~)w??Oip^UZ`+6GXza zgSR?*DK+g~)hQFg@@%*uu7rF|c-LgX_Jr`t!Y0>?y}I3^snNr(&>=9tupgLaccJRY z;{)R0;?=x*>8?Y@_&VbSB}l`CFK=WelUx3vbt1wNcrbr_uK6FM(YdD2e}G3mP`mBjEfr zL9xdslN-Rso$2E8v_~)70g&}s2(9s8S?U?E!_+M9bt3zGHI=AoP?tbLXmuZ%H8_z< zq{4@3QG%Tjezg_l8hV-%5!>^3KEZbbu1McwDI14x3M6Q8dk~Z&eGE8f-NfaFeeVvu zLRVP_tjBu8+7XO{fL3z5sFT>-P&9PnJyJc+zu+5e89x>hWSet(f7u4 z(L>;yKH)$dt(enpuiVl)&O6V7SO6u&XOy^yB2`|Q&RRj);G#3*aKn=6i2?)9VqrDcaw9ZNz|70_1=xOLiEU#&TDLbv5XN*598?R5qL0 zikzJ^UlRf0?d6pA>TpB2#q5z2ebG_iu_F$g{B>Vm)Kb37<`ug>$fcR;VFne|AHJ9% zCL2yM_;>G*Lk-)uuL1YwQhuo12}L7usNW)#8#Hlc3X7fO-D=_gruedSrTE=8i0c6y zSwc)?I8K9iKA=j`&V*z{BXYEAwSCB3UPOw1;hE$_OZ@lGf&WneYxZ-ae_HAt)r=%t zcL-7RcEk^DonkmVNr8IjL(;gYCXqs^#Vwj<1ch)2Sx9tzeBIlT#;sIBfPT7fr)b;~l1EX(i0R?Mgb6#j2X#g%jo1j1C9+gsC@JX?c?;5q8sbN;|keo2;~GN z@H%HoDJ}9DFnC(09G8^ZF2j!9`tr$W+$Fjbc}k&RZtmC14X%4ai`ioofptiPni`ly z)%3F>2JO$+T5^GMT=l=J@G#5x|) zZD@|U<$CXstcb5%!sRj8P!f&boOE>;aLMqq(y@=W6A8{_m{1~!3X5m9$a+cH{9(no z=8>8E7v$9+*RBybtgJ)VQo>oRIF?{W?wC3fRnIa2j?WKL%SZKJF>nVKDdrT2btU@dm!4^8LO7+$lTb>yt%iov*W_M?yP3btAKQq} z-ESCrj8l^4-LfYbhS4=?u0tSh)tCsxBQ(zx{4fcz2AvW5!svC6iC5zXqj$$Db>?t zZkRzJ)Q?1bOoI!<#=r>cHSC6@xveEb>Zq+4|$H z;W3G>r<~rZ#Vffl`FK0@wsKGEEg_x5yZ{uO8tOmx(xPoz=W|pZkB|z34zcr~AtQ|r zdFW%28M*YTnGC)Tnnq@xMtF7&nz2dpyxF*?LlirMGr8Qzu(gJQr$B5&_uAM|hyJ=CGLr;b{d+GK%0PQ<>?X7)U(rU z3^LBi|21?j=9|~dv@QNs>_ZZ7_42v#l1G<#wvNy;aD6kI{OFNs=#B^hTb^&dAqrnX z2k%jQQUU|iX(;+4P(=&?gE^%=&CDs>Vb!nutp3G7WS`MFvkjS8L%!mIr7SuQFX3Vd zui9mBp+`tMUW!0T8;ehHN)5cF+SFa5M&dC7ICPP|&wug*9XCE`*)db6EDb~z1-s8K z61-()Ui;BCoTkjf zR-h{dfV$=6>&QNMw}b>Hq5uqs=t|HpNUm%0vsrIDHo0Gg+$BHttt6HL`Y1_TpxVAo z74%vUqwucPAbqzQQ=7X+hMDq=%w>n%RmIHNKBMeMe)MBb+Uhf>#~x=WJ73^VHtu@Q z46?t!2TTWe2~ad^V#`PJMqsNNQOK6GljyD7+?MIAc6QE#iXDcWbfmO69>uqbI(kQM z!FSbY`!ON;8&Rqd{|&fnd(0Zv46awNes=Gm@&%QnzvplTZfzzN3?f&n&^|a#-833- z+(4s-GncBY@R(tT;Vdqz9@_&Wpez8OKIbFUV z?TXw`g%9l=%$#fQ?LmU6UxdC|z$N2CuLA}LB<)GI)jlv?*(A#*<7He~nxU?_VP=A~ zh1NP1;vUE`_h*qcZQl|Po5yogH$8fz8*7t?L+t4{U3_sE7QuQ!E9bZ%K_RGn@Z}%( zHb}eJ$}W$%7cVt29Vg{2w>hN#=^h~%hj<5Sz(&tR-*Mo9ose~s{ODa^3#pxq9mG!k zUh%>&{NTP*!PprcTssNE-?}PvA-0B9eiAXs_z3sF9EfoNMDY5oJ+6sdn^3J?d<*l{am8zmSmIjyHS}~wJ+w? z6Jd-1Y47gP!2dhpD|P+K z&n^Ta80Db+2_|)%H0g}~i1c8cqOlpQ<=WRhwgnXP)Co`S#|UXCCOJ~> zfVjD{Izo}=&*!S)?4xcRJ8VbW54Xg*tmWm+Z9I%>2jKGye}fK zCYWW8EhO1^N+F%|{IWFW^Jq@oeyB#%C_4xsndvxSrz-afoe`i#Q^dd@xSO&g3HgiL zAM~pKSwBt+z4>VueK;I>yP2|Cr$9B%BMtNl)V9NahF(*1sFs5&JKI>O-DbM!tnQ{$ z6x{}D{7n#-Y?nZPjc4K*2DH23Jo)w%aAuLAhrmL(c8BQz5>r&&wUD*|&{ru7;Lwdr z3Z3clDQ7KQ3|kIF0{`O1=3E9zAyuVP*Zzlp8kK2^Y7!x@WbDr*9Oz{?iz@ca`Mlf# zQ+>Z{iYD)r?~cauX78?lqERE;6VN~*Mn__wE|WEGfQjc{;P#9oOtog)3zXtOL#+>} z38~r!2>?Ut3Zi5=cRSgH&Ft8cG^miYVo}wfTQLY9YCFN?{bO^NU-&t`w`XiYKj}H>-Hz9{t8!g#W4(c=|_EGnpSdi6Y_hSz5HKp%9 zyh@-0_Rn>R`i}fgxSg*0a>I_kxsV8JHDPh@R_)|#Jv!Phtil~Pb_pYvql{&g-& z5rzQ$`=+62;r3N7JXPcsWu+g#2$39Wk4e8W6Rs)-F|G2B-y@tz%VbL+!W~l)z|zn3 zBjS+}M!tGy`C%b)o05^j7|woVUk^GMd98ZiwS5%j)ZOQ4E8GdQGP z^9_#Krtcj=YYpClmtAn4Q)-lnIGN(&Xy)(^6o#sC_-uX{=;GK++on986;>MtaXv#4 z2aO`@K@-9ZC;tZu(T`Cbv&_F>eRF1oD{wZr-=IOxm{p=*F%f;W)S)YH$_Gn2h_fJj ziRO-cV<-`#cR_C=&6TeU=YB(=F(uZ+8Kg(jMS<=ni$rH;;2mu1#U>E7N)yvlP~O_# z@mS}3cL4sz37llYQ# zOTa2;SH5rKsJ80)zp?CsBCx9$x%i#vmIn3A-S5KQHp|A-k8M7@*p}hNFI0e1x}fU6 zU5f?0yNC1Z$`4rm*;>x~Z}$Vx-<1Fx8800(&OoHAtwuIfbxj6)w)!%CpaE$2WbApG z7Nt5@pAGFHX>Grmi|2As1(0vXwu-)oMnv$BhHCSLPK$lz?H#pnWAqS(Ut??b@MvUw z&9Gy;J~5x*6N0%GMJ0neQB#-LzF?S&+#(Id;VZX)O{3D$>VfHS$W$h#yy{T#h=0Zg z7(a|di&F3Tm{I$7-aStbc(}7hw@CHz2-5G%nL8?pV>`Cpo+iC=Q4IqMSG70rex;l) zTs@j*A&LrHE$7^OuE#35NRAkw&>Ldjed*xQn(4Yo1dfs{xaMGEChlIvj`5lvOEst* zrj|=WfT97{756K_$d%^hqpD7{YS$`UapA;~{@*gIMxhdh0)RW_AiZ_rH@OZhtm^e_ zgELSX(SCl~K4PbttZqkcb>qQ-Q=@1U>TDe2{oK0J7x(Uvrg37oA(y_oTkIN5Nje>T z9Zow&Ja#sLpduiXJgJBUBqc|R6~`fK)DMhQH_lHoZ??$EG86oxEBQ$|djw1u2H5F7 zS?v8~7wWx#E96UPXQI3&Y?RAONTG@+YZ8m8R!Mt)%i@pgtlAtP@EJ9YeXpN9nhC0T zS4+2V-iw5)m^`RtquyftbrtVnWrb|3U&tQ5uTLjc3xTL@C#U(ZPxx|{HOV8LnW7do z_ddUXy2ku&b_Lfc3%j{*+)SY`+9Um?;`e^}ht8KVfhHN%PjB-%ZudUBX}){XeCFY3 zjC&yLPQruS)BD5BKL)1Re<*x7rPc9yd*|zMmG~0?AFMr{e{EU_!N!MOFZcJVB#vyb z$>*r}0TY-(CA{$iz{Rsd8I#Dc@g)MpeOur|?gv6=NLsf;bOSqpx#H5bJP-cj&8 z8AG91iFw!wope06b)DasTy~cWDif4a#bl0XQuvCm9c-@~9;58^nI^?YMxCQgzxP!q zvNMya--!t|et{G+bUQR9XTB^h#Bv*8K~MR7%5);JT1-JmoOo_MxM_aKZS0>af8fLD25X|;{Z)e)|N3v;5L%$__D2;y*eZ{pTh}c&?1$#F$$+S(6dqd zxSFF257k?_gM(uxB=Y?(axU_L1;i%fss;W)M%rHkjK2>IPZd?B+_zThJhhG9NC5$3uPXain0A;Cf=jF_Y?b$is=v7NC^uaD z=_b0HY($N~6LINp=u{eJa=r|q^N?VY$Q<;UT8B-*zbS3WHfkRjbP8i5A9Tirhdr_? zw83e6*)jvg8|V_%78&o?-FFNzdR#rnxBk*l!S)3%v1L-!O*Ty@ORl;8v{LL^C0|jE zPK5T-;gd<()W5oOtRCt5*MQ`qUrj)Z&{jClqy~D7P-@r=^_Cn_ikfZ_qk-t`IUs{u z?G>^jWpF$N*M-RIt8U}pF~Ll9fPOSGD;%YI>WWJJYc~Yz->Ste89k0v>YP-XOp2w@S)OO8<#Tcr}VSRdY0zeRzj`M+Nrv(1sV zjQkTbmti+titA0>X#2du4F0)XKNyq4vC~3loJ4a6gB}m02q+(Rlx=sH;k0}dUtY5{ zymP~;dGiA5%a&$PU_CTE9SZ<^&c~d5n94@Zd7a#pCJU!Wb{7f0zT=%~jivS@b8I&r zhSCgt*vw;Dz3~!s@+YN?!R*ox;Z>X|Ek@E0K;oM zwcLq_Bvh7CEE^Pds#kC3X93(aF84^i0OlmFZxtP7nEFHnFMtR#jC+-k0MWn%nN571 zs7ZOOlVNwd|5#9X(33n3ACijE3vQx&R?ik%rBax6Q(hfiKfnj~y^y#ge$D74c+D8K zsA^lZOq@+HRHsg-Wtp&YlS?`nDv3P4_v+f)%p|li2+N-Qx>FY@;>8n+U;feVOs|69 z26!8Xaes>>vmpnfOTGdMnhvg7^r9zh1Dd0#2=X)Lq^5LV_rsU>?eKgyDNNsw@dAQN zDsFo;9tGLpA*)k-rXiY?B8LH@k5cID1sQcX3{l0cb${8D$-gbS?24*@ad3k(av(2x#Fq=P>$-j7mlw@A)| zJ8+(v-up-i47yZZh2^K5ifJ+w9(&jmINbYd`IBHrt%Kxm=$D5~UwDiOg3lH+)#o`C zl~doEyVZWdzH96@2UvC43G}CvTsr59sCz~;wFBK;aqD$0>^?Iwls>>FGxy4L8vbbQ znDvENR!XS&+mby;nEFCV_ROS;ka0hnhoK0EQiO@H@a+Ln)LECirWbEi1_^khD00LP z_^k;o54`_yvc`Q4H?EBUBrX}g8_XflBCj9%)8EwXeoJ#P5hh6Pr(ws^c zSfxXef}?#QqGoWkF=STq%RInrgax=m5N$G4SrE^(Xl1U14o9SfL8k&PSm3&M6E#1q z?zK8<+?F-B|@O!xLL%DGFN6GM?GCm_{Kf}U|_;pG>%U^Yjq575}vU+ z2(~#mx=yDzwUUzEBFVC#E*O$YzL*_Z$$_k(3TAWap}_rufd0nIHlRlVgZm4krR+f2 zky-rB)5dfHE43i_D80C?pm4tt2vZlRxC7`J*#NW z%ue|9Id7O$Lj*`AZ37RT>JXxNN8jjr7QLEwW*Zez?~&u5fZnIA;P!}6!OhMU)HQK6 zO=N)J$^0iU5_qnm*a!k3IWBd`bM+i-IPL^n8^ozt&4YY|o`SpGHWK#;6_AzZSa$}w zc|pQ1S29QArufQ*s(63%=@y0>T5LQ)^UUGfk}`IVPk!9OHY2(l^!SKDX+9&jqFPEM z!`-2snC$TO8Wm2@nQ15+Y{n;gnmouuye3i3%es^39nHk^4hLt`ENjn59tdhUjdi)$ zQ)OvQRUoZk);bP^fZXPnSR8>}p=s)b3-Hbzks6L4fxQmh;+Tm}TFeZ_?oI!+o7!RB z@t6l2hSl-Q?x(2bvNeNr?ZZ|)`DR}ChQ%q-mYvn;rFp!5;}&(eFjs5?2`fPuJO?^j zBnmv~7ozN9K~+lv2}RqXmt;(`rg7)nx&ckdi9)`4a6FViC3k_c)eGM$*AP>*F#HT0 z*jDh{^D-?elPa*tl2Lnr3ZiUBp;ZrK^XB> z3v&^FRE(97Kj{E-kwxMI>uORGhKB-#p0k?o3yed5;+pVu@lN(90E@0Ks|ux_Qw3}= z&a%S(*?GPprxcSASp6xTBkVWQX;J@$hh7V+Ov255Csl~xo3nH&rsmJ^NOo1P*C^1zAYfUSS?2B6im9H^vO z(Td4{QCjbs33*^>aVT82$^#2yQH}bnV&Jz5h&RgpAW2?I={qyj+NHNc9W|@~B@VoU z{~Hi>>aGvd+D{pnwe$__mO%4uq>B%~-uZx{k9p`kCMy)o(i_-IhB)SdHU@LMj;7nS zG(y8h+Tw^dv!y;@X7U`_D^UON(g(|;OvT1&Wj7wS1oU#l0>(|G;%{EK=oJMD`6jx* zafe*4i@87sE$IV#sr$fVGwB$(AKJLELOO!me(-Sc0wt29g{kxhjsl4Jg$`QFHtg%S z9tWT%%d&h$DqS58bpK7PEBhYC#4$6{=zVbd+hEQTnL z+r*xfkk4wFmp(EY{f#{oJ<*HU7FkT#Z*yO7t!^6}!u$G9&Hv&I$o`=a0ZX6KpCE{? z$ks2HVXi235+}U7s#u{Yp{>kfaNx~NX3Uohx55WHVb+)@&~SftcY!s*wy`G+16%5Vk!nuW;!s-|0V!$yj>jP5?k-1oFBH9MTeDx<6<>bBi)3(_1`nmkF|SR2iPOHV22vZKcpvT19u#aDMzm{bpY_aQGdj{YfW{E za}5xQRF~>*TqC2ERw5gqR9F33HeqWN7rv4~0pi0dWPxzKG`s}o84FGzL#kDM^L%FO zkJWKcA#j#F`Kz?58Ro$wC+m9EM}$0;Ym7Pc2gpGDT&*tn)!(0;B}K9Fk;q_Ry?^Xz zE)^}moT+DC+jnhAbRE+bRkrLqtg_?-BcoSBqwIDWLA^2i;9d{%Sg0rF$D!^FK# z?2~G_CvJL5#P@`ESZ8@uu#m3Bf&X!6MF41Dh6Y%spQGeNrh*aX z9616^2Gk4sD^=lpvzcUPEHZS@E|Zvy`CoNEWVs4UHAHH51bJY6N-X!gzl^wb5+zc_ z(j-+Mh=pueLzq13@jOH?F84?6)39L%X>(E`L&KNzn?ZUErp36g&XTW0pR6+HcAj$g z1BO9KzfWJVo$V)xsWyHh^w6;M=TMBEuJT?^GA0QsvnkG~a_k$&S6Ix9>Vm$ixeRAt zg41A5vkIGRF@nB}s?heyzfyIgJi1kTE-Ex)ek&(Y(i9U9d)a8+ODVyIfc#H=Pj94E z1FzIsk(_Ckjt?(Y#xpvev!bkQyj=WLcR#C#6nGOTP^g#Y1`CYN0~;k=3f0hoTkY}B zz`!4nk&V~Qa!B}RK(i=+oNTA_UT2!nIHqJR)Vy}(*bIgN>>pt0-?lP=7|S4Vw8yqgy>_P!RU29;C<(DBM(AW0nNbUYzDrw)#~^K$}if7 z<*((l{mp@So6ku84%wBIiKPhf{Z94KoPw9=Spwk^`B-$(b4W1^#gby{6(mS)E1S5b@3hw(-ruxE_Z~5UJmw4}Vm#pa9 zL;%)f*2feZC%53W)OT}tvx$?_1IH`&@1QN*r;j(#b|KSf(Q2?9uSgzx2W=$#f-Bq^ z@F7Q6nSWxYK=%Vl5tsLM{Df&JIV?D09J)q&ptFouKhtY9e=Ou2c0Yi@3){qWS#xd) z)Y+j-d|pJtY`*6QE-Xp4vzMSP>+B3a5Erm+gZQqbrSM2qQRp7v<8UanZ+>%SG06CJ zH6B@Comtu61(Wzk+WFew-ewM_P0_-ChCM~G`Asj*M@tU865N*Y>h;qo)IU@yECqd< zH<$r;?YS44XaAqz@b$@#E?WP882Z>&!RU98cJCQQg2;8bL^LBA0dh{`4C=g5WosS} za==Dbb>+10gP2!u&e}Rz$jjPOFJ zWaGJHdGh)3=&=DknSqVQNO-oaJdgBdJg`)~bP9!dI3SF3(cM& zlxbHH%&*0#Cej8zz{eVN_9@eN?*M^jBwpZ;Wd$lY2$`{HDnfNM*F^2Nj*<=@FSVAS zkqRR&gK`+XIq$DW*D_;XAh-JEt;>m5C|)RjhpMm9i6Dm~*RmP-l@N18@^%Z>bpyVs z#iQdSR>Vf^pcyQbrDa!-(-^)|Mvy5P*@sq(iWaZzV$&o`VMyMNUL*hfrAV-pCOH%` z?s@kehdv5*)s1|_S5U9Bgz0C1{^|@XRaP*UtyX3anQN_!8R0`1<{b;7nNyVvN+V}U zD6hc!KocB!^V<9pIef9-M$NMZ)-phU1bVO9l`DBFqi+h z+R*3^g+U2+@VGQ#`km=z)@J zjmM?T7U4Yh7ksUBDwVz%-x&mMt*p5lAhAgC=Ui>^43yZnv&)HVrnC9+3?9olH11jQsEI`3oY(G}QVb@=l(7v!sMm~ebJ*#3DBq6Ec=KaxVGBhj#piSZZXVHcmBVLB{_#%=i&$TK+^x6+dg39QUJ>EGze= zo80bT?W~^QN@d8E;=iJKefUF~#%yb|Hem|}h(>2CXzE@s7xHNlwTKB{5~~5j!p6DF zmQ#4(JBmc2-zN`lKyo@siHH~quc7m9QSP97lp8N>;$Y#S6Ztf!0?_#0&=1~V7Vs*6 zf;7|1xE9}Mo}^j}dGuTEJD;7A;JRfa7OxPIpf8kI z*e>RHniM-Xdv}C@qN`Gw%(tiX9CgdvuVOs>k!Ky-?5*=$t*VZHDtdM$#MUpcouBtzP64y>Eiuk=RNxswf6|EHfP zm18N3lSk4j5uz>3uXbJ88i*dZ<%LEg$?VIXzbD)#)rdU-OBU`kZznO!;-9hqu+a%g zDjBw%vd)$v@54hmKGv7}-&ZEAD*|MgF%5E5^3&F<{M|}5!I7HuVWcVn|GfZ90jGUX zt;^LJE1o)MVD;7F#UWCFHWA2Uoq2Rd@k~;ahF)4gFN8xo#zm-%wAVCg0~a2mgO2qB zjW2YWw9l5GFlo-o{D`ei^6(j(la7bX{p>Gf<&LglxlU`%l8~AyuuM-sz1V#8Zb_-xdD&sza z%k)Ks5B2atdYdqcF`}iwV#i!kzF68QR7RG5@^~UT?E= zptDSF5wDa(dUqWbL({~)9lv!!N}-!u|3Osr8A|MS%!Ja4mj;UAE9Mre^#9^2#3OSW zpa$_3O*aE~k_DJLygGvbp6B>`Rq20J|6-|Uw(y;X5=hw1=^a`sh}w*m0-`>w4{~tI z6%5ePzYIkQIvC+216u*>PAK5R^l+^2U><2;HmT}Gy_3|MWVM;kL7>-u3eXZGw=Z(X zbnbLsC;lQ(rg%E@k}1hb?m60|UIA}w7L(K4K4NIb=p2DZ(Ga4_0dV3HaFJ3#q+O*z z11=)TbV0&L1<()wi4?E^g($7ETCk~P6DXXKQz!2dm&26K{+!t2mizK6*ime0Qig2d zvwj&$4{T}mHIEEFFY7tZx=%3+4G^X!X-ba4e zRB}wDIcQ;TRzU**d7CHCH>N7x+{|}0+9N-}1sh>SV+%aKr_7Xn(@54pRp?u7h1e_P ziz(^t8lZgR@a3cb>CZwjN>KE2U-mCQLSmWMD<+DSaZPnH)D9d4;Qa4+iN3D49DNyV zPAd&S&jIkb?3*0j5}#c{1~I`{*1I2#Q+p(+uiUTRFFq=V~g@Qyxe=&Iuuv>L{R+(XqRY1PEj7uOUJm1Jp+qa*NM(h;PO3{&l z@WUdF-zV^!D|gwfP6E;#I8_K@nwnHp$z_()z+^z~(fgXaK*ZE$_#C1Tl&fd??EJjks+q#-PJxG@&_qizDfOWQVvB$<%%DHZG z*wJJVXEHN`^KpRuLMO|uF(eDI`M8a7xy|r9c(F}duIYP5tnQpNL-Ktc{UcSvvJI>t z;ldmzMuI?@hTPHgtpFAp;P$cn&!P|#Kl4;Nr*{66T^OGXXRqpf2E1$lZxmT+ zY2CkOsV~OvwlLoNjo^U3pJ5>Ko?2eNdoDc(xvMX5+mrCd^cEd~WqBJ#QCQeCbI@0=%uEQ0rJT;jp z4fGNXQ2?t`%(A!3bkm|YK&#*4QvLWF6m-eS~vVto0 zM5@L}V#oW}M#^u<8{(yV1Xh|+J)Rc3YoA^e@DOIuD_~*~I1bwunmr(KtN^5)jYAXf zB(rlv2(y{qjB&M%XTbkst`hI&*wcxN2@<=fQt)V27Lp6xC$$ulMy|g0l zF82L{)voB7?QK^^f)_cEdXWA-NSQ?KV7Y52$(Vn&^6X*=Wt;mc%m6*-L{7lz)2<<| z$xR@n#@WrS*Q9=Fr%o&Fec}n(TP&v&IG0CDBHNoH`f16-#^p&J*8g!e7XvrsNb_}o zEqql;>{oMyy}&SdPZM*W++GrWlOst<$5d#ch%P$Hwc&EmePmp*U#c%_E@WjAocM3M zSTY|dr2a`&4yQ;14}O&6;qS!mLNjLgBH`XT{o7YrW5&JZm_&b1q%o+>gu18+ zlE{;erXxo$I%(gk&+1kc0zR6~>eB?lba_NC`7fC_S%0X1E1uSuAGcVzb4e6Ui> z8o%oBQ&+;&D+*svx)flPma*>vsd8Xw70GFXCGZ#2~sJtO+w&k^_^`3$5EU?)P=9=Z{?|Y+{Nlh7oKRtCWd=UAy=ioOL)p zS?2>O?{VFBZb~kj%#H3`IntBu-2&R#x{fn+j#^fDD+~g7_meVwB=&NI2b=;f%(JUz z!c4c?CyQ~&RG~>!EPJHHBIBk|_Q>yP#8T8i`aH8n*>&6d@sbZ~zG*f+ZNE$sGV2S!TJ@XrH`HDuIZ;d`%*_)I*5|cl}g&;U4Zq9#ZXr(kWA4e8b zSz&1iPHH_#BF&nyFi+H|$gqPqKA0*bx97bgg^FWM*^K4+R34cvov|8iQK_a{|BdO{ zg2wu&ovfyQ!56nmslA}sTwOPy8E8a>daVG5_k?&XxhV(;2} z16!cf#GyqFZ+YvfYlZIQASLDaomE2At73T^lFMnENSMw1^VfYZIY%XpYza%v0DtAKN9v1__S7dA{V+I zq-t`-agub0z@M672-rxL9@YO=IwE~R6i1SYs z<4=#j57lSd=+wN8U>8yN$FwtOXhTh11{=BaNx+ldse5!JK=^iMMs;540(jW#T3(Jp z{{W>s=0bVE)g_cp3S7$FM86(IL9~dN;e~5?B)(3ZwO0djpOtk~|m`PSdVUr1S#!1dT6HF_?gQdzA(X zSFEs;gH$l6eFwe;v$b-&wHr{wBTeU9VV_Uu3IDck0G+7B;;ofV+oy$<*7n7vBp9eE^vfD^k=!b z;a=yxYD^Q3FI4K*<8&eo>o3ITC%ZtkqX{#|hdUUYW606Ipl8ws?>`dlMr3ThOw(() z|0Sv=pooD5DQ61HNzwkiF-$N~kpUgw^|N`lXHZt00*p(}V6D446jpMDT8Yk8tYLNU zD{kkb{_00+w5PE`Vst_~3!QkD%dcPZ`NO8ed;W?AEOFD^o?CyF?@yeGi`EZ^V)ClQzw%hy$`imDSjL173bi~YXZ?q8^IsL>Y&J`$E zzQ*Zef0;Y^C&@iPA~Gh%g6D9Nw^u5Y;=>(t5E|ltvakRrjBLGV4(>TqLY3E`m00AP=g&inU!(O ziZ#8wMWJIiK9(Ov--+v(tp%5Bl5(;}`Sif(xwaHStZmQ(``(|Bq*#{k=9+rby*P8 z1W%75CwbK#d8{P~hs(b3BipveR#uD4wxbIr;CSt1z8z#6Y>&hZN_!Ieus0#Q|V z^g~o@HGc^^=3!j%Vo7_3AIgoc+WEJ%V@O>R!&UYVrd}=EAtY`}8d(7}YWA5}_^DA0 zsdw`0Uecu=*Zd|ZZ>BmQ6_rhn-bSa&WZm42(WwAkOCF*GVAF3t_ry+P3^IL|H)4@tiGx_gWs2U5$kQ~;?lM=&l7VL#! zK40np5sXkihmXrVBa#0+YMwL?u-cZwj=>J=M3m-)~L_E z^uJP)UVw?;-;Az6#joI`t!(5d1Fi^I`|{6|G&gVQ@7?K1cqKblG*7lRL;T8dM3IelmR`mwC;jXh8jv%|v91@|O0xL7!DD^J}M%yBOtmF%Us>RhtrHTU;|fE{8*)ne$WSn^BQ@`8 zg{$K9#^gQO-j+xc77k?u*)_@y;r^T9q`0c06L0vX5AMCEmMrJp2YJnkX$e5P7-T@1 zrN11Nn5Z>2buTSFQ}x)VCS&2{ba9X{o_va;d8y>@=kLVJ4d};wG{%{ zL?!peO9(PUu$roQ+_FafSPlB0jL=>(*Rsrx7rN5l!%g&Y;@&u<5~3Cz%nNwaL|l z)>dZ=$QWD!eR(_6KX?cC-_z}Kq^G40R)IfyjN>`lS+4kN%Ksk0n#;*G=cm(sJDiiIbo&rGJhc#5|3@Z>Id~El7(aS_i4N7%s zN5l5>zG9yCCVI-Bp>Ic;2>;17N2Q2a)L;Pay*h3t=+=G`a28aQy{yqojtP;QuLq*I z+&*hF&NVA|nD_f;qBkRY?pF8sl9x7G=)m1IV^;7aQBwS=H}DQGfbLjF3rYmb4iCa5 zPE1&vU8Hm1M zY^<;Ux_hc7z$>gZ%5ZwEjQ1_KGY4>VI|IBM^?-%vq_<0B8|JpaDej6uz5E0+xoVtK z2hgn8&IM(wj_HrXfe#wnNop{2)&Jyx_wDcJr`Lv~lVj`K z7~DUm{1x=?^TF>rU#1Ie;g%cp(YYtP+)FtMt}jRx)gv-3$tAXeOrV1+{xWGEomE?U zHVpPOf$*(ivcb3Js{ zRn>KnL1K7$0+Dp$qy5EHRN%%?I#|!cJ>@+B_4&QZH%^GQnSRSRh|&hPa<(*Vy31Q& zTIS;tc0CQ^0A`z?l|TyhS?pjA zkrjjc3IJqrNU}Ifi6_4RiQ$mdPko`DNjCE10g2gTllu)}gP)9C-gAL)(2aVqCUZT$ zdE(1Q??(uN2;W(T=8mm`+@Q8E#x*a|)jy!Mnbso|HK~EcB`Z-1#??j{0N}0n(>zvc zbQ*dtGyfF53Tntk{=Xu$$#S!TZ`83h35A7fjLOm_K8Nr}5Xum-o9&_gqDrY05+fcQ zSO?HuF3*=Y7`nZ+L?*E99C4^_C`9rGrwTo!YZ(z=IN1Q<1u4dTD9gmI=S598`|)8h zS+qRs1^0r`ZrVMC=dBfZ6*<;1EiqM1=(Ab_ZGYHL>~{|zirhu-$gc8?27jza2Qi=+ z@dFS#nKfAG;-VboR2#IEuZ<#GQiOUDGz1VWasz}*lkyB_*TJrzB<{)CuJS~RXAs>r z<6&#th_p}5QU7k^1C*3j8*%@%@_3-|azO^|8Pf&G5qJt`S1{A`anfuC>F;PKYy5-M z7VX3Pp&EFGIHl*VSrh8<%;%d=$>cWSF38GU%~@@wO3{M;7+=D!z6uDL2E}QfOG>-3!*HK18VN1jk`<5g&( zN~%i}76D2!j^42NvuK&UXPvNFCdSFs8Vjv7PYtf@KE8a3KA05*g!FDE}-v?EiA9?2%ZI}c|( zKB1f{xDg_D!z;2FviZlV$_Egv+^AoMwPODNKT5AMK*}x7hZ63YMwFAXgu^+c{2FTU zE~HqOFYt4o>EO z&MvhU|Btp+_4u-W=NRCov)VuZ;n8@iCjYiG1Kj+yHVcy}&jr&bYfI_3NGXo#|AZ@G zgO*h#`gU(DUd27ke<2kjuSgE5vnZ0f=3IqU#L~vzZ}CPbHyl|W8@w{*!5#~qAS(BP z7JlrwI^)EtQ#Ps}`7e^axd23cvb%MPXR)Jw(*vTQoxVO6(&orZt0d82+u|2N2lpsj zz$oqIWOVEV21&YhB&77qe!nL^jmsZM`HxWjWM=mNH2Osh9D>Vfx27(; zoJhF58L_OT>+F4=kXIQPZW5YsI04buc4MPFP7LEqy2K=M7j~neGkN0wp#(j~6KQ&3 z9^k>aLkkQ#aA%^;IZXMIY!95yERiIy$sU+P=}v@}28Oc0 z*JmOa0Qz0@={7qs0bmJz1D8D z9Zh|zh98frn(*7ni|tjXU)=rox%|URwDzM1#8#rsm*-)ow#1hz*wO8QCGk(D>$w)a zOq=l&Vfh3~qH&!j!!$$GJFQ{P5~$D?dl|xGA|R)6v@uzG6mZkLCVic4T8wHlE??_v z7`I+a+gVv6!Tj?Kp38K}dCtGLMuIPpxmdy71U`&B!I;R;sqfv}6!a`@*;7zoTBL;4Zrm zkBkoa@9u%u{&O~yiUbp!@>SB_5mFZSfb{HvewuY?H$L}x8Jv={f&74fZ$KyC8m5*} zWOWUwc3x3PV_=mhG6AU9F?jD78VNVBHr)Q1c|ES!$`zf}D>0s7TX^LbEFk#xz?TgQ z)m=ZzZxfE7y)(iLYNz&!8^9$0U7;?SuU{5*e~$nsf7)=NYx=5K>r6nC+q2PS5<@KA zD1#G({_;(mW`dRV;Lu zT%1imx@ray5dZfxrAVCdusjKl!XJ~wPiE#+PA{`fUmlH z1geYGJuFcD{3&Sfo*T?+8kFP5`Vb@wW@gM@Eac91BVH!@QfOPcSh8UJeoxXyM8Ef| z#QB#4uD+_`q@9Yx+OAo@7x+nyTi&#*Ar;eDQ7GTbG1+3)SU7iwxC~&j>kexO`B%{j zf`kRs$H1SrnygI+i<5r2y^Sa})!EM;qae+|i$oUnVbZ&c-Cqd7ijzlY*0TdJYXCny zpzxV+ag2cGia-=--ZBCsBoAW#6=X-XZ{Ln@>5{FWwf4;V&0Zy5ly`=1sBQI-AL)z% zq#U7tqj4R-Y7cZ)N~2d|nsvo)M6Dhehon73lGSO>l42mp(& zy)N71J?5%`t%GL$-@^f&8d;aacYvk7auxt*=18yBYY7fbEcKfGi0W!I0@NT}2^7rB zuNItbm#+s{*b-Cpm+4F$BfVZ0EXWRu%Mhwich-5j&$?HGnWb@<$lmr zZO((<);0;3$X@*39wGEqAi=sG(_1+)IMOtxYF?h!yEf<+QOLLOppAelpBm?u4>qdl zK|xD-3gmpvZ;ciMn*C9SjkP^ig7rSFW9n63f;Sb6csNo%ybiA`R$*!-mXZI z3PZDLqRz7Hk8$wxvkSul=LFTAui9GwYUJb2v_vysr6xIp<7tj-w?joBl+vhTgpHT1 z`?c%@#%wasg%n6u332zfZwa6=y<$7`<@+CcVGWonyAPH)2d&XA=>Jw)+{MO#Un_b) zU6u`dcXU%XPx;N3|Y2yw-_ZVh`N7G z;3-dLg9J!t_nm8Y24mpTl#fo2UQtBKL+!*e92yjSek}h|7NXG-<5cyuAbmA#;NMzT z1WSz!9?^d6m=seaYRw0{ABiAzqdoOkAxnyhSw@nN;b0*S(PT)pQ6l{2hrGw$`im}W z=8WFA#``mp(^3bSvUh!#-=sFu;}n*#0vi~ztEPUN8aOSm%tdW&*c2`;UF(oLG=gIv)1=jSRQnbS?#?562e#{xyWk_u`8TP z_a{;gzdwv^0}UjY$3|p&0Mti`ch2YXsQBqt=liVkf04+_>;Vc^(^kxj&`J+D%aW08 zymuqXRFSB_{Se65Q_h^`*G%m|`OCk7pt=zyQzb7)01^CO zy6+f_XSQ@EGOmgQhsLM+o>qTV|4r?DVRfpw4Gs_h8&&$z4)onwhM7~MFMUF^ zz1>i;ezWa+<}X)fb2vh8{)IJ~#t+y(m)Jd6bP?P6LiBrznbyK4-R=@e8>hL6dX#c?#WG7%X?)ltR;V-ISDZgO~!`W*&Ng3{`H zCC+Rbo?@2~(B$6MIu*WgXg`(Pt;V7ujMCEifamu#-=d$?D%x3*rcZCz{ccYb84Di_ z0JBqjN@RS1)oQ|da0l!yW~x|I3Y@p$Io`BvJ?wihd3ri6rVR2PKhUt3x$XwD9JGq0 zoZ{BIgzJ6HeYOuJNl?y}@m)!0QO7%huzvXAwa%2C0~CcN8Ykg42DnT-Knw+R%SfE{ z-tpCx4(V;#8r>EQ0h-Cs)g}#z_2EHXN0X1orbp|g-p(!&138N;ilckZnf1-buCva|6$Zx0$o-@<;Oh=1F}vH5x>hfKM5rF)52Q&F9};d3(oDb@OYC{~*j&X2g& zN<{V`#j2|uU#b!?+-gPZqdrGc`V!4x-ba+PnF>5lVaGDS06AkV&5OpMy)1+b8UBBn ziHE5PW1pHn;1XD|-Uc0k%C$jOv-XzoqWC$`k{0G(W?`D^;!6j06Rd$zs3<%imzyUmS&{`d<90!GqoOdb6{lWTK^0b-Eab&-4mEUtP@)-{1Fs?52XQT`WEIZ$l zaHHkTvjmq6#7_E0W7UAI7o%BjP5vQ2M98|>N(TS;W18rzkH|yKMT(UlExpi-$Tyae zSC}(Y)sYreh~;?6bK?g3$rtl(1fJ{H!dZzL!t#t@d38(Pxw#9`HbR00!BlKftx=MU z7rQtV7d$hS4!|y`ne2OY4mFU*QvxCs1cZ9GGv$&D#TZ|alZc=fdlHq~P_}ROGVJh@ z0O4}oZQjo4bLBA1mV=*82YC9V%bw&3=6=_VZb4`Ejheu*;TX1xI^LSdUl-y{1`?ep zQW4dhX^EI`L!lFP2%3Zxnuu+~B_rA+Y0y=b-*T&21&eg@cA8G3d9;q;_&)DFPax@* zt^r{S>`}~05C!Oh`r51u8xj}snU(CnaY`sB+DK^CY5Wlafp*kutapr>9Lw^TvUR2&CB_}fN@Tm0K_o8!e`e8tyYvb`Za!L zyimP5f%h59*Li#jbikSbBTHNKQ6-;9dWedkBiGBjT89tZzOG#A#Q}SStOMIFWu?Ty^g=lJY?VL^ zOhAD%+nAF_I)o~NHka4~?BI-JdzUE(xN--4uL!-r{!7U;+~AhJBcm#2HQO(jc^oQc zpwSgN#;M(M;bJPRS`XPyn2^Hpd_yx0!i=EA`~3gP-ibAjW7ma%ZjpqZD?CN*+PeeP zq7n+NWexn=cfRsVaQuhbwfV2EX;`T0* zKH8YbC(99~(O7%g`FhYk#NV3y^Xm36>;Lq6ckgcM*x!1%P~4m@NC=dJ!9`xGw4 z6Fh`6@c}JQko1l}YLK829?!DJ9pE}YSlR*WP>w-y^4a|RcThFAGW%9Mx{UtAs|%t1 zRUM==KM089$MdvexQZp#`oNKiCAg!A*w55+1*uCxVLZa6;3@QQYi9d2jhg8(V~w(| zkmO=l6@nU!|K8L6I|ab7Mbr+(8l{i5Qr;U7`yGqKakXW5z*9!hg&o@?&+pIHb!gwpGB;(=)hP=ggQTy_{3ip_P6B(N%HiU8 zDh2p%7}^&*PxPWsa03+%(+PrfEzR1nX*FKZ!jAbzwQgV(cC=@GFTOK=i$kJH`Up25 z{{cZFGfiasIWW+CV~F-FI9aJ;+nWS)h|_|b?|Qz$yITs1(tRh73UKudRbAm6RpSQn zA(kAuB2@{@)SKDd1VSG3m7a8HP&h$qv=2AAA&OahU4D-5H*-GE1+y{D;HyRZBo3_R zcRz&Hn)nbxfB;^C0iBi#S5(ia z&M$JnJH4nb{1LqO)kG5BR32xUUmaHI7)uC5EnTIVh(o9R-4Dbz!(A&EUsyj+G(Y^0 zF_Dus2UbaZbGwhFcoC+ilL|I|tDCR&C;`h0yGadn)K6#mj*?@ZPu|vNZU)4>ogq0 zrcV}BiG-MDl)!b>!fTP(Fyl<5u0^tYeZKQ`cMR=guhjaeljW?Sgrj3CT>iq@`GS0w z?m+6t%BRL@J6#t+Yw4)b)Ar9P;R_Xx@*9a>mx1v@cexGY1omF`5`A6)&NgcoVcSiT zJaUaeTiq#lol;5(Jwj@gw;Ne2xCdLfw{-Frw$Q*dn1N7Syn)QWV^1;zIn08kte6ZB zb}^C%Fx~hyFbb%n9L|mkw(BA!v44qnPJ9^Esd>8;!|Wj1^5JW4-j%ykImi9LrR`Zi zr#{(%GJK$#Rb^Fq7sF;O!cP8MuqWNj+gS90t6YU%rng+Nw5WC?4L8^BPnW2o9ZhJR zI?GQ}wJB`C%oft$CF)wwQDNIL`?a1o3_98!oyzJI&kpO>i%zEA;Lv5PVLT3V;v%!N zLrGeDa4cq&bb39ju4A0t{Dzsd>%rborijLf=mt%Ive8|cpO2IiUi3L8P7%3+2mid+ zBX(P`bwULB8BOM~{$XgpDn*y+R^e02hoBNirddOQlB^*5RPozUe&l}Zj@}6$xixnX z%ko-&_+hs|QD8fous(}g&+O2GIyQ4F!P*XNDV+et2n`Jv(V9oXcl>-#CgR|gU%O$g zHRT^}ywI{({r;!%+7}57^6Af5o}Fov{$r83;aMOLj}~;MncqcN)W>$n?k@*w@a(!i zoOM3g5L-WM|0Pq&%i?b8k>q%>N|*tR&Q8S0@g^SzWlEjHsDn`wwf&d?7?dNXkXn%k zKy$m=tM_?teLPVRPo~-tc{~&&r<+puDbM-}8}rd?uUm>>KaqLrG*1)xM@X06!wc-# z{7JMMYr%WVMhP=R2Okup!3keyzF-SA`O*`Zz#ji{{3oritQmW)o%vikwUG$H=VGsX z*{16RX}ENBGg?d(Oo8frJrq&>3PXUvUvI1RWeN$fEG{lW%75Ew9RZmIS}*WmyR6d> z$yMDrNb`+^tvG^Gy~5T90F{n(6;5HIV@59NIF?Vx(;Y^Iq^8QbWxKOZN%29C-)$&& z`wnlH^Mf8%z%E(+gk7^D)#3 zf3YXo;PRy=lqA$zc4kw7Wgbb6qea0!h?H4yo;>B_#NkvYHGq4- zgg*itXw92pUy_lWc#5RlYHkecJ*N|@L*V|F{f#p=LKHl+R8W|z&KTrJd^I)9Eg!{; z+Eg@UUisEa|AY0{b>eF^xyr#XIq@VWF3akNvimG5TPt$&N~tvzw`kvJ$`gw+VH@}} zT;Xkdohd{$nyZT3iY(1RN@YfWBt_CMf^&RuZ@u zInAZKwCmfj7#OgFMn4qAL;2j>C~<5!Kf`@*hEDwT`9JTk!#&YAbN5O z>LNiWOj?agx5TA`ZkV-KJ|@p@i(1>4`Evq^5d@--^idJICN=ZWID{r7CU1Y$+ ziF#^ZJkIuK1a3$%$&qVDxj&rSVkf&<_BLA9mfzBDcD`nRN^}XWKq3q6nLRQf$Y-*& z7Ii`R`npykgi@REuX!Yk3oz3~@vKer=%^Nq@a$eZ(p`iL7* zaD6Ldp6$65oC1tom<*<^_7cr0cf%t)gMAF%YUs!oZI?WmGqXe&5llEL%ofgMls#Ns zQCllPR9EVnv)UxUnSuW!+Q9;hd#;^_R~7ctdU_;ceLhknb-e(nj%v zYaJJY;vY0EtiyS%>@C%2oV$i_XOtHsqLY-^XBdtlq18k$_^ZztLUcu3@0_Z^pb4o2AKZE&F1PLPO(AsOSB#a#1yf;~D> z#iowISNbJWrL9vy)GszV2o&k+l{hQAYk8s}x^pm9l}JOWvUZ+-ku6vrz^4QHNlDyH ziugo(=I{M*d4t1KgqLCq@mm{CXUiY6o*RHyuk9iF))Qf6kHg?g(TpX_CFJ-{9oM2R z9LJ^4x}D8aifJ5pj~3}JAKu9-1n9*dhBW@sdNcs<%%>&^RB-s3Zw|67Z1uNF6w1HI zgt4kMYKWKK$s$_F4*IxXYPn>eF?y%9=l*_?D0D zzecHIk^TPoYOfJ#N-bOK*Ws38j$Hr=K~U%#-4f~JaDeAK%i~tAQb;{^taJ{!QbXG( zF=|`V-Xev5j~l!X6XU$~XR2a>a%NipJtmUp7yG(Tafv;AO5EMx@zKM(tNPzML~P9$ z9>)CCal8WPdi5*%HZPriVO&Lhvr3PyI?ms+=p%WVt}kanNM1dyq55r<5cN4| zLrgqRgJIqh;tX;ufgD$L#Ckdtj3X&a!nUDV;{1TZn@U4+ZLGx&u(}z!CfIgQP|ryS zQTkv@*iq}?Ldq*a%)~a3qoOf@Nlx^xJ(_JD(m~9JSsjas^X$Q`g05k~6uoAV+$>=a zS6mrNMQ(x=G1+=7jXMOS{(igx+-+r1{-_IQlTS6q7VLP|JlMDY0uX&3rhxmrNoI$(>}4=%Ic*K;g5#ABv{lU4N0dj1|ASZxNcGTzyr&q~Dv- z{cZRV_#(%etkQ*wWDxa$^za#;B*N3a85aOA*d^0dtZh()ANLM*>u7#SrI1sLZ;D{h zF0We}x2|FYtntzD^IAL*|I1f4B*ZwL)w}cY^)$0O* z=45$mTkZB>LK=dnbdHwrZB%iMUO-Cx)Uk4ogx_$`to-NyrSW!MsUn$R@Xvk%Cjjkt zW0{VE1JF0$pBW3O1>Tkc7@E_ty`xU$=N&m}8;?jF))@pglt>DvN^8fjAKo0UG?mQ1 zS$QLZH^j}(chiMmc=-Ow&TUw?T)({ zZxrJU3mg8T#idlQo$H=U)MoKj*rM8v(Thc70t#eclqbD1^F+*fz2tr(fxpt8+7eUd z1&YwA#J&}9G+!|+yd=vJHO}>`KSWE%yA$NTrxZ#NIIwS!RlPMrnx;Gvg@k`c*)og+ zPS&ITTe=~fZC*Okvd+=^zdw>Xs8Dh_Y+;PZA#4f2iUO&}{r`3{Zjj?Zkr(&&sI{>{ z6|mWRz;<^V{x=}e(8?;=psYRIVvNPdCOQ{#>otVdLRDqVc%k{zqok_1Ao!Hadn}j0 zqEI^bM<%;?Nf)>1qP$7W(B#_O*pzilIQ^a~I7l$H+TMK8r2&jB-Kv*?=Y&Iev=PZm zGc3{ouij@6iKJRrh7{=Ck~7G3jEb!PXXAU=GQY(ccYDjIQMztsSNhzOFXNoN+a~Vk zbm7JiFt&&l8_Z6}Ho;k+Nhd823`IB)K8ULq<;o!wFT>TRocYHpN;PR=k!kJqj0o%4 z7|Y0+5~=A)P+tcE$7IosAO0rGKz8isB1h!mBF9oyH#o{*ol_%YVZ~#fVI(e7)qH|L z-Oa>Vf93Zczj<31!gq$!M4%V*6!I{3+>Sp30Iezs=)k9OI+%_l_Q$q1ofE2BSA ziBZv4D;_(0(h})Tja!fnlMyDzEpjf`{o*z@=kEa_8cKaJGc<~ECsxhNEf@AuDqNBk zN^uWn1)ZLZ=4%m!R=GE9OtoT4?8f~SY!&i&fF4dhh@lQ%X->U1Hqm@kNKnioPe6xk zzkM5Wj|c%%umyGAz<#KP?4`%wo0bV-Fizv|g@*zK#vdZ~vQ}0#Q(%$oN2yDJa zG#F~=l)h3RIJ(GKgF7Gd-8v9y1apA#Kdr;Yg(PW&UXkki?N$CKBTb&R(|h`Ru)Zf=eg$jTNw?Wl<~Qe8(Xq($furB2xrTP zk4u|ipdA>VGTx}LeA?cT5R=F19+4T}B(nTAs;l_44!q)27Pab{NI%z9@!=60Qq$Fu z)yIb2Dnz~)KYT+G5L@jejOMC;O78%#G9x8t%#)t}@}W578|s>%oeALSR;!2IxXd=8 zVoepY-v{14bdQndwfTZZtD;64{CrRal7r_GR7LkUH9v8?hWWVF+Bt5YQzS#L>!XT7 zlj_EFMCF809AJ8+EwwPxL&iF6Rv40C&N?%8sQKN$L{TO`p5}b;0dnR;;9M0(ZVIEE z!S>uV9>Ri=J|&n1$V^nVvBzk2!*iF7HGnMpY{Obl`r$Jys)JB+;QtFA7eXgSMRqcF zpgBjr?KR{$Xlcf;Mr{WDAoX=EX!doCfHAK;jp29F+k&zqD{pVgDFPVSg3DHiOOJo- z?8bOq$qMBfv5P}IPQ|(e>_^M5!qenr$Y)t59geP&2n+eVjfG#2sP$!k^sKDzv~OE^ zM<92Z~ulnMN6QnCvRax!mJB~0t-LFumo@QI=+{558VFF z%)+)C5=(}&O9ZiQTKh_q#$XIR$o=dI;l&o}=X>`y&p`pK_1OEP&0C7d1=KeUub9Hk zF4I|}ebNw>cH=i!bwNBEkHM2I<>w_$#5e%ODG~?_e*rDorsc6hK?a@Gz>0;d5rm~h zW)tZiO(+8ic%f|Rc)5+Hta4uv<+*yrZbOk>tc)Fg9RqW z{i`8HbP@qtZ^^2FNgBc(qo~2Uf4Cwod7=CsRyAF+xKTd2*#+yG&?xFjIR+ps!_fwl z9$Q~qAL%KW`xPznbn?2J#iprjb4h)Nr;qyV3G5EkzA^t>*ywhyLYiq#>~Kxc4Y__% zYKxJ2Rhx9`DMk27)p&%MGR$%~pLsbQS!y&EMdyM)uBzpZksu5G8DLv{Ho&sdrN|uy z(!bj_kkFcHhhB9TDlzYzx-~J?6s&qj z_^MB17hMYg7ZVtEfEAUL_X@AFI0yDzxE2vH8#L56`>6!9;leE=CvOhzj_0hZ?);1> zA&d)#@wt3FI&Hspc{T{fkEH}beMuqKjSR1!DAd6KeR;^p>=gc;PhDp@&jhlOr@D|T zwEnrNSn`dovL?F4;97>JM@z6Uh8tBv2^Csijzof%vF>F)YS>es0L?rsZ+p%uT&cIC z?Xa-+{}XZJZ_pq!j>IIt#{27gWNb>@1u>mXOq)ODZ#;j<)$;xI(jx7Q^%_WsbjYpp z;(`3?HCPvz4C??|`^3XnUqlQ*kp&^vJ*{tM%Cd}?+dxOR0UK1kq9l(A z2CE8|h~VH+UhkaZw;Jzuq$lk%3EEbqk=dFIrsyNVD*K??1#8b(uh`G3zuy1N+YAY* z+vrtJruhS}GsHFMEh3vCnA-1BjQ*1xho9ZUg`PqQH9XP zSgw=jlYb&s^TFQeYS0iCj_LBpO0OMUDuYDg17tRRUEWLfB)}#JWt5mdf)2=!HXm@_J#5oeoc1ePE5w>ikzLcV zzXeYvQc`814Sl%&jpc}<0?|#1Kw|-?FGjLk~0uChPn0)t-PB{)FVx*PUA1bzk&rq@HG#FSOE54QjZw(NXkJeBD4zxvXu6h#dJN`xLAnKcts%*0J+4faXM?GmS{YUIP zvdl18$tUm;!a91QR(G}xe5Tz|Jbn81&7+&iObCNo(!M&1oui~2)j+2Toimct`s7Aw zMx6FI!S+}OpcSfeX5$O|0Ea;M9?OXx&ttwYUp0S`nf_tcZNBx1nD_)6x@hen6SSvM zYc;=De_~9$vmcgb&dpybB;+QVy64oJqwd62BkmXoGsX}`Ne5T< z!_rWDafl_9CXffJWfX=y*c|Lj3T=<<@Dt6a;7=NS#ff;J{UOW)Br5W4=UWS78H7FZ zNPA3Ig=KopSj>)d_#7v*FBZDCKKh6FDVwJtP`F1ydi?O#&k5~mD8K>^9&MOuHHE0X zukPqr0MWzY;2|k!B)T9XgK1R{XDe&VGM5&3w1U15yy265j97KTffw)6B{d+JDX2jB zK6^mAM#AAMYp-bEbJk87D{)9U&Pd}E;(GQbLEyVA?EjU^ACaZkbAamAKtF1_K@fC~ z0)Bu6In z*3J32O`$7pq^kN8tA-5!Z{2j%lG)GddC}?wY2@}#2!tr~ZQBPQ8>KR2Jghuf=WZW8 z!$+ZWOssQNlqOkDvDVg`MkbF;0!B?$q(UME_oF}LaW2QM-~pT4I%$r!$||?H)3#5A z$d`xw+AKnC$P5Zk!U+=K@tK4+0jwwiN*_p`Xlg>2;gcC7j;F}N)vXU94srx?whIYu z#-k%>{~u>4x;ATwppY>X8rV58b|HWym^bx-vTjFw33JHCrQy3oFY!3?+?>&uE<>fN zWEP%U0!rarUWV-JZAqmEA(~23V0z5v&S-K>J=FxT5hv*mS2=+%*9ab(imD`~V0=^G zC*qv|cTsfF8>c69uUoqeG2(V@*ra4R`d;)G1;E8vT^0?9p0dtACit3Y-7s=#(W9%n zVngoD>c%I5CtcsA+U)&fn>pmYj6f=TxF)JJvuHwX;FjvjQR|+1!NrLTGlI^sShURT z@Wb9RJ5y3@z^2IuuxqSYjVqH~g^kT_!fO{ypbv3rZ0+#TYFR73RW>iVO7I$d?Hr2W zRy9siql8=wA!MOWW-B-;G^i46Il58Pa;DJ-eLzwBhPAwxDA#d_HgaJ=wt z+svqli8Xt_{!T{sxllWoO>NT7tGB7PzlLymxvf(GcY3G_P%$iLWtKdw!|7Y5bYne# z-NwFocE-Xr91tqKlZdtb7xzT9Zx!LKPg)jE49aj^`Jpn^ zRg@1IPYX4VqKnaj&%pSQKGvLQm1r<;=u`X9!5-Z}ihRhRh8wKikkft{EuV7ay%u_J zmG;v?Qg?th#78*{@fYLsdl4&rp0V$rq8=|PM=bpiVs%r#8%2+j9^i2Pa-PuZX7>l5 zgS|;us}2bO2C0r)O@r9-Rf8zL2U@F0`pDufh)`S2xz_IbU{>_I(<6$&SqFYD#KXwd zEY(#a59zYaF1yXx_tW0(aGOCDrzZ?W+|pKkjehg%D`V9<#;OgW-6Xj$7e5aWQD z)WI1(370fAa2#w4{(*_Q-8;iHW|>&Kit*ml7$CRXte?YY5TcYOm%P}?4*JC5Px!tX zgg^`b*rV!N5n6b(R$F3*OP%F46idOt+vvZ7_n-0Qpr+`RkBqUEhBX95WT%VV@sst( zk)|jgW4G37BU7p*ZA;)IlzY7A3vgKar&PM30g=bC@Gq?zkoxGPaX}tERDjY1SmmE) z6uZu}pYKk$wfMr$J05y3tf?r4rDDM2ke9n5V3+1#$iFt=FRcbnCml19jDjIBvbd?Y zoF|plVWXNR(mbx{3H#CdO)LFB1+XvH7Eo)AUoE6;dtEzbCTki%vQWCRr>udI>r2C; z%2{-KBeK3<)MS?20VwH}i)9l~lUeaF?lA2dK+=Og!a|qKlTX7k1Wx}m2^wC3K7y5_AVQ{qigSph!QN@H zQpWciF~$N{hIC=HM5nv-+?ro=7MQt4n?XK0=c}m%CNIsYlo_H#fNt3TA@7Ikimi~- zfDCji`duEj>rgGI*#C)|LP>GwIX?rF9f6sG1XR+wIgq#o1OVi4p1+cJo}A1T)a#T( z@S9hBg#JN56RX@F< z@GF&EX+hKCWe(|b^=CrJ$R36hJE-P&9uMF|aaxOrefCUr2#9L97e}{v&jmB1uPhig z4$#6-)#S!-$O=`3g-XkIcK9pG&A96i*0Tbb!(umMT{Uhj@<|^CTeGphPjC?{Jz5Z? zfC^6{e_2(WLK@?!L2?`}#80afohH2h#1L)wt2>3F>o}qgz>*A!x82L+DDy0aZn3F2 z#9ZTTI8~=i`B+ScDfso+Y1p!MWo}Ku59kVq?b{Ll*HfPIFhYh<2?Bt?j@uP#_0B<9 z_zH8p71VjmHlI~Eo0)}&@t1jWg0skUYwX|`>ON->5G|*)`z=uD9hAi3&lkmof?dUZ z^BZ@0e>t(4*9OvtJq-%5PBf;joFJb7h5UXWeFIvNY~!MOG&K%MKL z_I8E_V-vod`%R7>S<&i#nlySOZ;|l2$yW6jzMp@XLb1m9(e4UkaS(crle~1Ky?jc4> z+$Im=*BgBxHI>iMYt;d8HA%7zzdi{P4u{b+g!w99wB<@apVShi$wwK=F16RV^64>x zIex7~`-L+-NogAgC|ZxsJb?fR|G7Y$Pg46TNW~Cgy--d{Z>0URD+zKs)QQgt^Wht* z6XQy6)3CYJkbRz70)B(>I1Z7f*ND#IMx?=HoH_*f+3u=pXuFhEm-gJyBQx$Hr1rN) z;TBS=L=RXm6v4{jhUuF#Xejj~+Du?QITBO9!tkAeaM}Sd+EK*tdU`-n%n`&XF0p`n zb40@$Wa`uFiwEb^6{Qy!rFBdDKM8^mIIAx~OOfA#3b@n?87hvgO)S#^KFD=`mS-jb z5YdPUcA&eXWWZKtuHQraVKKuiZdJKU75Iv6MAF|b5X+~OM%!W}I<+RnmP-`u82Z=p z5{6K;VI5w#o-Y}5*wjtqs@F>P6c7de2|+p0SgCBVxH)7-!}ThljyUUQqhZj3Y({e> zwpCoz*Vb0^1;rfB7G<~5M@7X^^xfqin@zXmO^~Pr3vyTFo|p)?EzuTAZUa-NDDbQv ze;xS#asJ%v*pnoed?ZSeX3IdL95@kKd`q-ii(b`9e2u0U*)6F2Un^E)kuo+0FA|F- z3)7rdJ%ES|yX$)oDT2I<^iP^ujMerl{txcEivxZWnANLNQAy_Imo-!nuHb5U^6mlv zuB<9{g(w+}+$>Qj;XTxK@uU!>0_?F|4v!?nQW{MS%e{y&0hG>UGeLiN_$@@CQ;uol z2I8yx^;;M6|KjZ5ukN$%C!Ol+6NGyI$A??xT8-VMcpDE1iLWqe52!j;6d&j3woa!@ zgaT4OYQRA+>=%hm%oP7?0psfQ?wHk=17LIqHh%~i5XEAtJAdFZu@--!3z&MUor!uH z;{fOI6jCi5x($LHNc1NoevQd8FO1oa3@hg6vd_2nZg!Wq{0~CX??DGA0jB;IMPpRFPZH?3FA={xUXVA&x?U)wKOP|x&cEELf9Hi%O-0&7x zr1sy#L;ZClJB62_8WtMXYv9k}JMXD6$AlottsLxh4#D$--yxnl`=@T)dq`}&lqC7lL!BWSYMGmAr<_HQdhlA?oFfVnbC-igO zM<9(jX<&p~<>*oMPO4ckT<;i>=v8I=WAC)AtakTv}o`oA~(%aH50_(xAh9s$p1M;~2fNu=i_$*gP zDJo7)*DDs^Z%=9+$Sv#q9}xTE{-dL&hE&1o9fj#{C)VEx?(A?k#Wz{r!( zf`_3ieyOlMRDVi@aiq7NmhPT_jafR!EfqY&XZzfEeG1=c=P4p^}yHM3bG&uhR7 zq&(XK+PIbs>)+Z)E00i&2aHwdigu=T1v~AL(vMWwA{m%f3i1dw?C&o0do$Frm*GK& z2=V;q)kd{w7E|OZ!&nNyd8H~R9HK_l7TKkJI9Qq*8-2}&uk;hXHfZ=drQWZ=lrt_L z6*IvYE@CZJD^}el|kTZ2DJ$IIMHQxCQ0PrZ88zt^BM70VgQY7^wA4PzkD(`UB zYrL5Ho{~Y4yCihn2Xzao);_}3g^3eFdOy{fgYNfWZi%!~2KwpTR`FGL)f|%5))%fJ zF_IQ~WtyTpOfeh>BYd$-d!ZTw*;~UNs`Q`Z#V$IZ$D?u%zA_f;>WMIzJ0GM*UVKG{ zE}NYL3r%830`@+-e3f+U6;A{Sf1AY$smgJlUZ7jdFR17BKGdO9x1hvbVuHH02;oi| zo9l7RL$s3U%wgI?*m}&cvM~nAty3&mK52zMS2p$sjn(P3|IIH-j*{k$7M1)>3jk!z zdJmM2g0O=61hh*~7D_<=C$~DwvwM0gv1CO9^=J?GmnMe-2T8%+2%HwJ&cpH0;Hu_t4FKd&%-k`6#~V6 z4e-)L)DyBs)sB?#^R4Uh0wmw%h)nomv0eJR8c*zs%-kdjXv>A~m z8z2MoNkD;!2c)S>gP!qz+Zn}CQA!0=mDZKa8pvYg=c-iAhHrS>cpeQ1M_gr;@V?v{ z4##3%9+*wh>mL3cEI>lItu=JN*tv%+$UmS3HtrK89WY1R)cPcQ3j!o8lm7Z1DuF=3 zF54$KidrRi8~z?D&Hb2{U9v?vci_z%N@rsXjw};X8fdkz4QSne3jYrNDy1jzFmIfA zaR;ZOf7Np^ObuqF?{PCg5kWJhb%20`JxL2ZxD^gZ9 ze1WA2Qk2m{cj`B2F(mnZop+*QKZd&e2zyYp2QoVC{FYFvxHF+QZX%t#d?QoZ(|o-~ zQpNSl^A>p%{efgmN>K$^MbrAV#*T={QEx%S%LRh>`V|4&wRaIqRATCX?Y$OpHVF1| zP;K`6kD>rtWvffDjnoYl_2?MyEvdTl%%cKU24@|O9f@hw=NU3~Zd#2D`wiu$eG(~2 z079O{u*nS+6Bh8-^2Q~5CPd_gkbdbRLz4?aXp-s#%)y-{FA=*qnj81Px$#G(7P9FM z;NuIAV*KQTeKv*robL}<5bkZSQixVi>p;`;_c5+nx=w#;%j5F{#{YZ=%5SeYQY|)A zd_QI~A$P`4k#nMyB&iH6V2I7a(V!vQj|Qt98PaSkL$!tJazjtspxYV8J2SXsc{w3X z{MZ014EUUiYB$19Ib=I551WPJ?TB!Y+qrRcsta}WP9(n2toeu^;H6P>{#azZj+x;Y z^lc$-;7V*;_Be%dEe!YZ2nyCENE;KFL1-Z{r{nq70w#|9*73QTom)2@92$V*|93Mc z5Fvu#-AL5lmE7Mg&MW?IzxoDNTD67$M(<;1V2LRU0&4O-+pAFg=RB_g?+3kse^!=< zF5i}^l{7Tf$STI?nc%5$H3==8AY9TJXr$}FTq;-TTO$-lLM29#z5mCu1OE{@34NeJ zt_vhgfh1lU>jb!Moeuq-p!Emu>{bN!_3Fu<1#U_UI3x2q@6*rwP?}QAybI=vyz^!L zN`gx^re83VVn+s`5rm$m`dBgUO24|MzUnj>uFQg)Lj`P9sw99dhM|*1el*RgTrLmy zoB7jrwz5^wz@Jq3x2hQIQJ7%mE9V>$M7p06z@C7xpx~ZxVUh}xdwb88wdvD?mw>4O zLdC=shEN`?;H6e6Px-WDm8^8|G@;ihjOh!lQ`{O>O+Fz;Fi7L}-Krb`$gKcA z5WDb={M2fiTUQX^eLK?6kQhc(7q9T$=LT3XAEGBL^*o{~`&;%fyM#ugT= z)`R%>D*-6_doF}ttH-~}Tqs~d9W$p+1y5;lNMW|Jg5uqXKK{wU2ULQnGU|^z(D7gF zJx?_*(=p&Y<0Po2y|3Ye;xB15B{p%s%`Y-@lr~A0vl+^DP3%!oAsaoiI_WcV(^M>< z$_h#(G4LqMro+u&w+hdm8^MU@#Sp4$SUMChzj{>lG5_JpdabunWrNzBgVBfy@{4EX zi@0yEdc9+L#7iW&X77oo=W~0B6E4SAIh50RW`yWFXjJJu2v}GE^OdB+9|9Tv#SWC4 zUUbyxmE#b5_~ttleH6;ZLr&lW5dvNqo{W%sO{ub(znrOu8|I{7I9daFt(b&bfB~9@ zKzv9KybD2X7GI1Dx4BKc6EL@5Q`;!sW?rdID2I`6A;VNR6TL&M8zZiQ3*jnZLnvc= zCiHt=5#dIpnx%ob^aO&xE^nQo;mC#*`B@0P`OLFojgX{{)Na)d@;Rns|1pLLIyWYM7U(}c3E-V}*!`G+ z^BL)hi#bTtOuTNt1)aaTQ&%-+8C5npyWDJi*^B}6$Som8a6d=6M<`=o^cQD&AQfJ!4E`G5U(q0?V z{-M>^HKHCnT!!_V^ivxhuJ*I}NY2BMp;bXR%*h$rnxUO( z2sp8fLeGj=QW2FSCWHt6uz^FC!JJhKb=2k|GzuH<+8&G>EBf7v6o?MdND=-;jjRLP z6JOZ-5XDpHsCGrGzT6XJY8fFnQcp?ayKA_veQ>aR58p`KW+14>q;QW-b zc?zzKf_d5PN5ALo4HzEwP=uqXo^obYy%OXT?%J581!itTPY+4kyTb1A7=CD z#CY*qwd!F~R#h<%3%eiPa*sTW_x(60&%M%>#ZRop{ z40z7KPcIjy;+PxK#v^#$82FAI5Ty@DFeZ0yU1p*v`AqnOpd1@wzP`i?Xcaw>fP?v? z-ZgbyR+9~x80NsF+YQ`1D22!J8ldbhy+Dy~#u0~S9}~LS5lNIXX#P$$Veon}SI^i$eE6`NFQHANYvJtl;f}1A>2G=@v>ryv~$I zmZ|f+u-MofU-iN_W;$qFcO$I0*>loY4by4&!BPtu z=I_%+LgrG`kIJ$e-jiKSBl2R}u&?EM6mxzV&gHrv?fB!N2Zc$rhruhR2FHTSNRN#I z(wv(-`(O?$2+w;rD?fNz&GD`F7}sjC9)ahQzn1M+OCE9l2II3(VwatTlBwUI(1$VS zETl~~eOhbGk?3h^KYI*8DyfW)S$Ds98aF;iR*0j)-iPH-r`mf6z$sw_xg)AUL}9hq zAV;^y#F8sn9IR!02VsrCvqX3O;@qAkXVwa0fksh#OLAY0}d>fDaD@!-x?U>DN3 z&aplIATpnYn@r*WU414%p&dokx)aFffUd+8| z-b0<(M!*At*h`5~vFm*oo?k>kb>e1rQ2t15czFrH68(8k`h@J5MGRow40=ZK=j8Eai+D2P3W{{y$=zkmZ46s~EJc{(wR`h12i-O`1lv2azfHm`dZ z0Xzl6`oAM}8(80VOhxRCTwaF{)NXv^65^MDiz5IAAOZJCRQ0Jnf#j%|t)MeC{w;KOgk<65$If0NjP;9@PluK%P?WiVLj_5Ig)-^)v# z$8V47&PZ;Iu^}g6iE>3?rhmbTHu0aK>@h?#*Sk_*28!d`B(hr}a(};WvU@TAXYx~K z?1T8&Ok8QgMc5h+Z=q3}1uBFL<$EL4U`k`b#^&Lob`Pz&5jM=KzS_`cau<><7Yy_T zrZ`!CUbp^-_0j=yZ>{xl;b;iRUw}NSH%Z!fZ%e}H3Qv%zTP^D`91>Vx-f z)iSeoz10<>!YrYnD^JjJO&(&pF4O zP)k>qE>UVLPyC{+1mr*p{f!fe;g(c@G=PJE0xu+6p12+PoL`9`^0ElzEP-(67$h6) zx$Hpfk49tpVZWWtt(gKQoY9T&n;@qZBx_#1QeaV=Z|%L8K|7nY)~c%IjjiSRD*)NT zN~V^%okyFn6_&DpH|a4?e!-gqk)B>LblBr_&s4r0db2?^o4CtHzKVyAP4e`Ds7eyzAG`A=!xES{(9sEG+sga(YFHr{HWEDzQhi}oOOFz%u2_)fF|P{%@c``_sdRZQRO)bnn!^q{M$$+=^} zvT%<{)-Sk`Dg$ZqQ{#2I_M_MeI@eSGo-=(bpZ+C}EfUE#%uM#;yfDl#5wp(dSO)ZD zLRJ*(HfZ!Ef6;Zl+Oh!6gbH_>3VXnv3u8S+Js*Z=&v6fj2CXZAKB{Q*=)YxH+3Zk^qIBUC9q-QUtu_oV)91R7-j(y>2J<{9 diff --git a/backend/tests/tools/run_zxingcpp_tests.sh b/backend/tests/tools/run_zxingcpp_tests.sh index cb955972..8b27660d 100755 --- a/backend/tests/tools/run_zxingcpp_tests.sh +++ b/backend/tests/tools/run_zxingcpp_tests.sh @@ -18,6 +18,7 @@ run_zxingcpp_test "test_2of5" "encode" run_zxingcpp_test "test_aztec" "large" run_zxingcpp_test "test_aztec" "bs" run_zxingcpp_test "test_aztec" "many_states" +run_zxingcpp_test "test_aztec" "options" run_zxingcpp_test "test_aztec" "encode" run_zxingcpp_test "test_aztec" "encode_segs" run_zxingcpp_test "test_aztec" "fuzz" diff --git a/backend/zint.h b/backend/zint.h index 1173e7eb..a369acd8 100644 --- a/backend/zint.h +++ b/backend/zint.h @@ -324,7 +324,7 @@ extern "C" { #define FAST_MODE 0x0080 /* Use faster if less optimal encodation or other shortcuts if available */ /* (affects AZTEC, DATAMATRIX, MICROPDF417, PDF417, QRCODE & UPNQR only) */ #define EXTRA_ESCAPE_MODE 0x0100 /* Process special symbology-specific escape sequences as well as others */ - /* Note: currently Code 128 and Data Matrix only */ + /* Note: currently Aztec Code, Code 128 and Data Matrix only */ #define GS1SYNTAXENGINE_MODE 0x0200 /* Use the GS1 Syntax Engine (if available) to strictly validate GS1 input */ #define GS1RAW_MODE 0x0400 /* Process GS1 data literally (no AI delimiters), parsing GSs as FNC1s */ diff --git a/backend_tcl/zint.c b/backend_tcl/zint.c index f0380ef4..1d9a3311 100644 --- a/backend_tcl/zint.c +++ b/backend_tcl/zint.c @@ -577,7 +577,7 @@ static const char help_message[] = "zint tcl(stub,obj) dll\n" " -eci choice: ECI to use\n" /* cli option --embedfont not supported (vector output only) */ " -esc bool: process escape sequences in input data\n" - " -extraesc bool: process symbology-specific escape sequences (Code 128 and Data Matrix only)\n" + " -extraesc bool: process symbology-specific escape sequences (Aztec Code, Code 128, Data Matrix)\n" " -fast bool: use fast encodation (Aztec, Data Matrix, MicroPDF417, PDF417, QR, UPNQR)\n" " -fg color: set foreground color as 6 or 8 hex rrggbbaa\n" /* replaces cli options --binary and --gs1 */ diff --git a/docs/manual.html b/docs/manual.html index 9996b2de..5f7447d3 100644 --- a/docs/manual.html +++ b/docs/manual.html @@ -1515,25 +1515,25 @@ Sequences \^1 Insert FNC1 character -Code128, Data Matrix +Aztec Code, Code 128, Data Matrix \^^ Literal \^ -Code128, Data Matrix +Aztec Code, Code 128, Data Matrix \^A, \^B, \^C Select Code Set A, B or C respectively -Code128 only +Code 128 only \^@ Exit manual Code Set selection and resume automatic Code Set selection -Code128 only +Code 128 only @@ -4297,7 +4297,8 @@ other shortcuts if available (affects AZTEC, EXTRA_ESCAPE_MODE Process special symbology-specific escape -sequences (CODE128 and DATAMATRIX only). +sequences (AZTEC, CODE128 and +DATAMATRIX only). GS1SYNTAXENGINE_MODE @@ -4740,8 +4741,8 @@ alt="zint -b C25INTER --compliantheight -d "9212320967"" />

No check digit is added by default, but can be set the same as for 6.1.2.1 Standard Code 2 of 5.

6.1.2.5 Code 2 of 5 Data Logic

-

Data Logic can encode numeric input (digits 0-9) up to a maximum of -113 digits.

+

Data Logic, also known as China Post or Hong Kong 2 of 5, can encode +numeric input (digits 0-9) up to a maximum of 113 digits.

zint -b C25LOGIC -d "9212320967" @@ -5998,7 +5999,7 @@ alt="zint -b PHARMA_TWO --compliantheight -d "29876543"" />

6.4.2 POSTNET

Used by the United States Postal Service until 2009, the POSTNET -barcode was used for encoding zip-codes on mail items. POSTNET uses +barcode was used for encoding ZIP codes on mail items. POSTNET uses numerical input data and includes a modulo-10 check digit. While Zint will encode POSTNET symbols of up to 38 digits in length, standard lengths as used by USPS were PostNet6 (5-digit ZIP input), @@ -6085,69 +6086,75 @@ alt="zint -b AUSPOST --compliantheight -d "96184209"" />

Valid data characters are 0-9, A-Z, a-z, space and hash (#). A Format Control Code (FCC) is added by Zint and should not be included in the input data. Reed-Solomon error correction data is generated by Zint. -Encoding behaviour is determined by the length of the input data -according to the formula shown in the following table. The first 8 -digits is the DPID.

+Encoding behaviour is determined by the length and type of the input +data as shown in the following table, where C means any +valid character.

--+++-+ - - + + + - - - + + + + - - - + + + + - - - + + + + - - - + + + + - - - + + + +
Table 23: Australia Post Input Formats
Input LengthRequired Input FormatSymbol LengthDPID (required)Customer Data (optional)Symbol Length FCC Encoding Table(s)
89999999937-bar1-81 to 8 digitsNone37 bars 11 N
1399999999AAAAA52-bar9-138 digits1 to 5 C52 bars 59 N and C
16999999999999999952-bar9-168 digits1 to 8 digits52 bars 59 N
1899999999AAAAAAAAAA67-bar9-188 digits1 to 10 C67 bars 62 N and C
239999999999999999999999967-bar9-238 digits1 to 15 digits67 bars 62 N
-

The special Null FCC 00, non-machine readable and intended for -customer use only, is used (all input lengths) if the DPID is all -zeroes.

+

The special Null FCC 00, intended for customer use only, is used (all +input lengths) if the DPID is all zeroes.

6.5.1.2 Reply Paid Barcode

A Reply Paid version of the Australia Post 4-State Barcode (FCC 45) which requires an 8-digit DPID input.

@@ -6282,10 +6289,10 @@ alt="zint -b USPS_IMAIL --compliantheight -d "01234567094987654321-01234&qu
Figure 108: zint -b USPS_IMAIL --compliantheight -d "01234567094987654321-01234"
-

Intelligent Mail is a fixed length (65-bar) symbol which combines +

Intelligent Mail is a fixed length 65-bar symbol which combines routing and customer information in a single symbol. Input data consists of a 20-digit tracking code, followed by a dash (-), -followed by a delivery point zip-code which can be 0, 5, 9 or 11 digits +followed by a delivery point ZIP code which can be 0, 5, 9 or 11 digits in length. For example all of the following inputs are valid data entries:

    @@ -7764,6 +7771,14 @@ length of approximately 3823 numeric or 3067 alphabetic characters or 1914 bytes of data. A separate symbology ID (BARCODE_HIBC_AZTEC) can be used to encode Health Industry Barcode (HIBC) data.

    +

    Manual insertion of FNC1 is possible using the +--extraesc option (API +input_mode |= EXTRA_ESCAPE_MODE), which apart from +processing normal escape sequences also processes the extra escape +sequences given in Table 3: Extra Escape +Sequences - see 6.6.1 Data +Matrix (ISO 16022) for details.

    For a faster but less optimal encodation, the --fast option (API input_mode |= FAST_MODE) may be used.

    Aztec Code supports Structured Append of up to 26 symbols and an @@ -8520,12 +8535,12 @@ reply mail with a B Used for business reply mail without a -pre-printed zip code. +pre-printed ZIP code. C Used for business reply mail with a -pre-printed zip code. +pre-printed ZIP code. D @@ -9421,9 +9436,9 @@ are:

    --extraesc

    As well as processing the normal escape sequences above, process the -special escape sequences beginning with \^. For Code 128 -and Data Matrix, process the escape sequence \^1 that -inserts an FNC1 character, and the escaping sequence +special escape sequences beginning with \^. For Aztec Code, +Code 128 and Data Matrix, process the escape sequence \^1 +that inserts an FNC1 character, and the escaping sequence \^^ that encodes a literal \^. For Code 128 only, process the escape sequences \^A, \^B, \^C and \^@ that allow manual switching of diff --git a/docs/manual.pmd b/docs/manual.pmd index c209524c..bda1c160 100644 --- a/docs/manual.pmd +++ b/docs/manual.pmd @@ -603,14 +603,16 @@ the sequence backslash caret ("`\^`"): Extra Escape Interpretation Available for Symbology Sequence ----------------- ------------------------------ ----------------------- -`\^1` Insert `FNC1` character Code128, Data Matrix +`\^1` Insert `FNC1` character Aztec Code, Code 128, + Data Matrix -`\^^` Literal `\^` Code128, Data Matrix +`\^^` Literal `\^` Aztec Code, Code 128, + Data Matrix -`\^A`, `\^B`, `\^C` Select Code Set A, B or C Code128 only +`\^A`, `\^B`, `\^C` Select Code Set A, B or C Code 128 only respectively -`\^@` Exit manual Code Set selection Code128 only +`\^@` Exit manual Code Set selection Code 128 only and resume automatic Code Set selection --------------------------------------------------------------------------- @@ -2552,7 +2554,7 @@ Value Effect `MICROPDF417`, `PDF417`, `QRCODE` and `UPNQR` only). `EXTRA_ESCAPE_MODE` Process special symbology-specific escape sequences - (`CODE128` and `DATAMATRIX` only). + (`AZTEC`, `CODE128` and `DATAMATRIX` only). `GS1SYNTAXENGINE_MODE` Use the GS1 Syntax Engine (if available) to strictly validate GS1 input. @@ -3007,7 +3009,8 @@ Standard Code 2 of 5]. #### 6.1.2.5 Code 2 of 5 Data Logic -Data Logic can encode numeric input (digits 0-9) up to a maximum of 113 digits. +Data Logic, also known as China Post or Hong Kong 2 of 5, can encode numeric +input (digits 0-9) up to a maximum of 113 digits. ![`zint -b C25LOGIC -d "9212320967"`](images/c25logic.svg){.lin} @@ -4056,7 +4059,7 @@ pharmaceuticals. The symbology is able to encode whole numbers between 4 and ### 6.4.2 POSTNET Used by the United States Postal Service until 2009, the POSTNET barcode was -used for encoding zip-codes on mail items. POSTNET uses numerical input data and +used for encoding ZIP codes on mail items. POSTNET uses numerical input data and includes a modulo-10 check digit. While Zint will encode POSTNET symbols of up to 38 digits in length, standard lengths as used by USPS were `PostNet6` (5-digit ZIP input), `PostNet10` (5-digit ZIP + 4-digit user data) and @@ -4141,28 +4144,28 @@ on mail items. Valid data characters are 0-9, A-Z, a-z, space and hash (#). A Format Control Code (FCC) is added by Zint and should not be included in the input data. Reed-Solomon error correction data is generated by Zint. Encoding behaviour is -determined by the length of the input data according to the formula shown in the -following table. The first 8 digits is the DPID. +determined by the length and type of the input data as shown in the following +table, where `C` means any valid character. ------------------------------------------------------------- -Input Required Input Format Symbol FCC Encoding -Length Length Table(s) ------- ------------------------- ------ --- -------- -8 `99999999` 37-bar 11 N +Input DPID Customer Data Symbol FCC Encoding +Length (required) (optional) Length Table(s) +------ ------------- -------------- ------- --- -------- +1-8 1 to 8 digits None 37 bars 11 N -13 `99999999AAAAA` 52-bar 59 N and C +9-13 8 digits 1 to 5 `C` 52 bars 59 N and C -16 `9999999999999999` 52-bar 59 N +9-16 8 digits 1 to 8 digits 52 bars 59 N -18 `99999999AAAAAAAAAA` 67-bar 62 N and C +9-18 8 digits 1 to 10 `C` 67 bars 62 N and C -23 `99999999999999999999999` 67-bar 62 N +9-23 8 digits 1 to 15 digits 67 bars 62 N ------------------------------------------------------------- Table: Australia Post Input Formats {#tbl:auspost_input_formats} -The special Null FCC 00, non-machine readable and intended for customer use -only, is used (all input lengths) if the DPID is all zeroes. +The special Null FCC 00, intended for customer use only, is used (all input +lengths) if the DPID is all zeroes. #### 6.5.1.2 Reply Paid Barcode @@ -4256,9 +4259,9 @@ PLANET symbologies in 2009. ![`zint -b USPS_IMAIL --compliantheight -d "01234567094987654321-01234"`](images/usps_imail.svg){.trk} -Intelligent Mail is a fixed length (65-bar) symbol which combines routing and +Intelligent Mail is a fixed length 65-bar symbol which combines routing and customer information in a single symbol. Input data consists of a 20-digit -tracking code, followed by a dash (`-`), followed by a delivery point zip-code +tracking code, followed by a dash (`-`), followed by a delivery point ZIP code which can be 0, 5, 9 or 11 digits in length. For example all of the following inputs are valid data entries: @@ -4887,6 +4890,11 @@ approximately 3823 numeric or 3067 alphabetic characters or 1914 bytes of data. A separate symbology ID (`BARCODE_HIBC_AZTEC`) can be used to encode Health Industry Barcode (HIBC) data. +Manual insertion of `FNC1` is possible using the `--extraesc` option (API +`input_mode |= EXTRA_ESCAPE_MODE`), which apart from processing normal escape +sequences also processes the extra escape sequences given in +[#tbl:extra_escapes] - see [6.6.1 Data Matrix (ISO 16022)] for details. + For a faster but less optimal encodation, the `--fast` option (API `input_mode |= FAST_MODE`) may be used. @@ -5164,8 +5172,8 @@ Code Letter Usage ----------- -------------------------------------------------------------- A Used for courtesy reply mail and metered reply mail with a pre-printed POSTNET symbol. -B Used for business reply mail without a pre-printed zip code. -C Used for business reply mail with a pre-printed zip code. +B Used for business reply mail without a pre-printed ZIP code. +C Used for business reply mail with a pre-printed ZIP code. D Used for Information Based Indicia (IBI) postage. E Used for customized mail with a USPS Intelligent Mail barcode. diff --git a/docs/manual.txt b/docs/manual.txt index c12cc136..48f41f83 100644 --- a/docs/manual.txt +++ b/docs/manual.txt @@ -755,14 +755,16 @@ the sequence backslash caret (“\^”): Extra Escape Interpretation Available for Symbology Sequence -------------------- ------------------------------- ----------------------- - \^1 Insert FNC1 character Code128, Data Matrix + \^1 Insert FNC1 character Aztec Code, Code 128, + Data Matrix - \^^ Literal \^ Code128, Data Matrix + \^^ Literal \^ Aztec Code, Code 128, + Data Matrix - \^A, \^B, \^C Select Code Set A, B or C Code128 only + \^A, \^B, \^C Select Code Set A, B or C Code 128 only respectively - \^@ Exit manual Code Set selection Code128 only + \^@ Exit manual Code Set selection Code 128 only and resume automatic Code Set selection ---------------------------------------------------------------------------- @@ -2509,7 +2511,7 @@ member: MICROPDF417, PDF417, QRCODE and UPNQR only). EXTRA_ESCAPE_MODE Process special symbology-specific escape sequences - (CODE128 and DATAMATRIX only). + (AZTEC, CODE128 and DATAMATRIX only). GS1SYNTAXENGINE_MODE Use the GS1 Syntax Engine (if available) to strictly validate GS1 input. @@ -2909,7 +2911,8 @@ Standard Code 2 of 5. 6.1.2.5 Code 2 of 5 Data Logic -Data Logic can encode numeric input (digits 0-9) up to a maximum of 113 digits. +Data Logic, also known as China Post or Hong Kong 2 of 5, can encode numeric +input (digits 0-9) up to a maximum of 113 digits. [zint -b C25LOGIC -d "9212320967"] @@ -3874,7 +3877,7 @@ pharmaceuticals. The symbology is able to encode whole numbers between 4 and 6.4.2 POSTNET Used by the United States Postal Service until 2009, the POSTNET barcode was -used for encoding zip-codes on mail items. POSTNET uses numerical input data and +used for encoding ZIP codes on mail items. POSTNET uses numerical input data and includes a modulo-10 check digit. While Zint will encode POSTNET symbols of up to 38 digits in length, standard lengths as used by USPS were PostNet6 (5-digit ZIP input), PostNet10 (5-digit ZIP + 4-digit user data) and PostNet12 (5-digit @@ -3948,28 +3951,28 @@ on mail items. Valid data characters are 0-9, A-Z, a-z, space and hash (#). A Format Control Code (FCC) is added by Zint and should not be included in the input data. Reed-Solomon error correction data is generated by Zint. Encoding behaviour is -determined by the length of the input data according to the formula shown in the -following table. The first 8 digits is the DPID. +determined by the length and type of the input data as shown in the following +table, where C means any valid character. - --------------------------------------------------------------- - Input Required Input Format Symbol FCC Encoding - Length Length Table(s) - --------- --------------------------- -------- ----- ---------- - 8 99999999 37-bar 11 N + ----------------------------------------------------------------- + Input DPID Customer Data Symbol FCC Encoding + Length (required) (optional) Length Table(s) + -------- -------------- --------------- -------- ----- ---------- + 1-8 1 to 8 digits None 37 bars 11 N - 13 99999999AAAAA 52-bar 59 N and C + 9-13 8 digits 1 to 5 C 52 bars 59 N and C - 16 9999999999999999 52-bar 59 N + 9-16 8 digits 1 to 8 digits 52 bars 59 N - 18 99999999AAAAAAAAAA 67-bar 62 N and C + 9-18 8 digits 1 to 10 C 67 bars 62 N and C - 23 99999999999999999999999 67-bar 62 N - --------------------------------------------------------------- + 9-23 8 digits 1 to 15 digits 67 bars 62 N + ----------------------------------------------------------------- Table 23: Australia Post Input Formats -The special Null FCC 00, non-machine readable and intended for customer use -only, is used (all input lengths) if the DPID is all zeroes. +The special Null FCC 00, intended for customer use only, is used (all input +lengths) if the DPID is all zeroes. 6.5.1.2 Reply Paid Barcode @@ -4062,9 +4065,9 @@ PLANET symbologies in 2009. [zint -b USPS_IMAIL --compliantheight -d "01234567094987654321-01234"] -Intelligent Mail is a fixed length (65-bar) symbol which combines routing and +Intelligent Mail is a fixed length 65-bar symbol which combines routing and customer information in a single symbol. Input data consists of a 20-digit -tracking code, followed by a dash (-), followed by a delivery point zip-code +tracking code, followed by a dash (-), followed by a delivery point ZIP code which can be 0, 5, 9 or 11 digits in length. For example all of the following inputs are valid data entries: @@ -4663,6 +4666,11 @@ approximately 3823 numeric or 3067 alphabetic characters or 1914 bytes of data. A separate symbology ID (BARCODE_HIBC_AZTEC) can be used to encode Health Industry Barcode (HIBC) data. +Manual insertion of FNC1 is possible using the --extraesc option (API +input_mode |= EXTRA_ESCAPE_MODE), which apart from processing normal escape +sequences also processes the extra escape sequences given in Table 3: Extra +Escape Sequences - see 6.6.1 Data Matrix (ISO 16022) for details. + For a faster but less optimal encodation, the --fast option (API input_mode |= FAST_MODE) may be used. @@ -4933,8 +4941,8 @@ as shown in the table below. ------------- ---------------------------------------------------------------- A Used for courtesy reply mail and metered reply mail with a pre-printed POSTNET symbol. - B Used for business reply mail without a pre-printed zip code. - C Used for business reply mail with a pre-printed zip code. + B Used for business reply mail without a pre-printed ZIP code. + C Used for business reply mail with a pre-printed ZIP code. D Used for Information Based Indicia (IBI) postage. E Used for customized mail with a USPS Intelligent Mail barcode. @@ -5459,11 +5467,11 @@ OPTIONS --extraesc As well as processing the normal escape sequences above, process the special - escape sequences beginning with \^. For Code 128 and Data Matrix, process - the escape sequence \^1 that inserts an FNC1 character, and the escaping - sequence \^^ that encodes a literal \^. For Code 128 only, process the - escape sequences \^A, \^B, \^C and \^@ that allow manual switching of Code - Sets. The sequence \^@ turns off manual switching. + escape sequences beginning with \^. For Aztec Code, Code 128 and Data + Matrix, process the escape sequence \^1 that inserts an FNC1 character, and + the escaping sequence \^^ that encodes a literal \^. For Code 128 only, + process the escape sequences \^A, \^B, \^C and \^@ that allow manual + switching of Code Sets. The sequence \^@ turns off manual switching. --fast diff --git a/docs/zint.1 b/docs/zint.1 index a031b0d9..0ad2ba31 100644 --- a/docs/zint.1 +++ b/docs/zint.1 @@ -215,7 +215,7 @@ The escape sequences are: \f[CR]\-\-extraesc\f[R] As well as processing the normal escape sequences above, process the special escape sequences beginning with \f[CR]\(rs\(ha\f[R]. -For Code 128 and Data Matrix, process the escape sequence +For Aztec Code, Code 128 and Data Matrix, process the escape sequence \f[CR]\(rs\(ha1\f[R] that inserts an \f[CR]FNC1\f[R] character, and the escaping sequence \f[CR]\(rs\(ha\(ha\f[R] that encodes a literal \f[CR]\(rs\(ha\f[R]. diff --git a/docs/zint.1.pmd b/docs/zint.1.pmd index 555543fc..be987f09 100644 --- a/docs/zint.1.pmd +++ b/docs/zint.1.pmd @@ -194,9 +194,9 @@ Paintbrush (`PCX`), Portable Network Format (`PNG`), Scalable Vector Graphic (`S `--extraesc` : As well as processing the normal escape sequences above, process the special escape sequences beginning with `\^`. - For Code 128 and Data Matrix, process the escape sequence `\^1` that inserts an `FNC1` character, and the escaping - sequence `\^^` that encodes a literal `\^`. For Code 128 only, process the escape sequences `\^A`, `\^B`, `\^C` - and `\^@` that allow manual switching of Code Sets. The sequence `\^@` turns off manual switching. + For Aztec Code, Code 128 and Data Matrix, process the escape sequence `\^1` that inserts an `FNC1` character, and + the escaping sequence `\^^` that encodes a literal `\^`. For Code 128 only, process the escape sequences `\^A`, + `\^B`, `\^C` and `\^@` that allow manual switching of Code Sets. The sequence `\^@` turns off manual switching. `--fast` diff --git a/frontend_qt/grpAztec.ui b/frontend_qt/grpAztec.ui index f47c915d..81db24aa 100644 --- a/frontend_qt/grpAztec.ui +++ b/frontend_qt/grpAztec.ui @@ -369,6 +369,18 @@ the data with a slash "/" + + + + Manual FN&C1s (Extra Escape) + + + Process special escape sequence "\^1" +allowing manual FNC1s +(literal "\^" may be escaped with "\^^") + + + diff --git a/frontend_qt/mainwindow.cpp b/frontend_qt/mainwindow.cpp index 00343e4f..a0e217ae 100644 --- a/frontend_qt/mainwindow.cpp +++ b/frontend_qt/mainwindow.cpp @@ -1856,6 +1856,7 @@ void MainWindow::change_options() connect(get_widget(QSL("radAztecStand")), SIGNAL(toggled(bool)), SLOT(update_preview())); connect(get_widget(QSL("radAztecGS1")), SIGNAL(toggled(bool)), SLOT(update_preview())); connect(get_widget(QSL("radAztecHIBC")), SIGNAL(toggled(bool)), SLOT(update_preview())); + connect(get_widget(QSL("radAztecExtraEsc")), SIGNAL(toggled(bool)), SLOT(update_preview())); connect(get_widget(QSL("chkAztecFull")), SIGNAL(toggled(bool)), SLOT(update_preview())); connect(get_widget(QSL("chkAztecFast")), SIGNAL(toggled(bool)), SLOT(update_preview())); connect(get_widget(QSL("cmbAztecStructAppCount")), SIGNAL(currentIndexChanged(int)), SLOT(update_preview())); @@ -2026,9 +2027,9 @@ void MainWindow::change_options() dm_startmode_ui_set(); tabMain->insertTab(1, m_optionWidget, tr("D&ata Matrix")); connect(get_widget(QSL("radDMStand")), SIGNAL(toggled(bool)), SLOT(update_preview())); - connect(get_widget(QSL("radDMExtraEsc")), SIGNAL(toggled(bool)), SLOT(update_preview())); connect(get_widget(QSL("radDMGS1")), SIGNAL(toggled(bool)), SLOT(update_preview())); connect(get_widget(QSL("radDMHIBC")), SIGNAL(toggled(bool)), SLOT(update_preview())); + connect(get_widget(QSL("radDMExtraEsc")), SIGNAL(toggled(bool)), SLOT(update_preview())); connect(get_widget(QSL("cmbDMSize")), SIGNAL(currentIndexChanged(int)), SLOT(update_preview())); connect(get_widget(QSL("chkDMRectangle")), SIGNAL(toggled(bool)), SLOT(update_preview())); connect(get_widget(QSL("chkDMRE")), SIGNAL(toggled(bool)), SLOT(update_preview())); @@ -2952,10 +2953,14 @@ void MainWindow::update_preview() break; case BARCODE_AZTEC: - if (get_rad_val(QSL("radAztecHIBC"))) + if (get_rad_val(QSL("radAztecHIBC"))) { m_bc.bc.setSymbol(BARCODE_HIBC_AZTEC); - else + } else { m_bc.bc.setSymbol(BARCODE_AZTEC); + if (get_rad_val(QSL("radAztecExtraEsc"))) { + m_bc.bc.setInputMode(m_bc.bc.inputMode() | EXTRA_ESCAPE_MODE); + } + } if (get_rad_val(QSL("radAztecSize"))) { m_bc.bc.setOption2(get_cmb_index(QSL("cmbAztecSize")) + 1); @@ -4458,7 +4463,8 @@ void MainWindow::save_sub_settings(QSettings &settings, int symbology) settings.setValue(QSL("studio/bc/aztec/size"), m_aztecSizeIndex); settings.setValue(QSL("studio/bc/aztec/ecc"), m_aztecECCIndex); settings.setValue(QSL("studio/bc/aztec/encoding_mode"), get_rad_grp_index( - QStringList() << QSL("radAztecStand") << QSL("radAztecGS1") << QSL("radAztecHIBC"))); + QStringList() << QSL("radAztecStand") << QSL("radAztecGS1") << QSL("radAztecHIBC") + << QSL("radAztecExtraEsc"))); settings.setValue(QSL("studio/bc/aztec/structapp_count"), get_cmb_index(QSL("cmbAztecStructAppCount"))); settings.setValue(QSL("studio/bc/aztec/chk_full"), get_chk_val(QSL("chkAztecFull"))); settings.setValue(QSL("studio/bc/aztec/chk_fast"), get_chk_val(QSL("chkAztecFast"))); @@ -4933,7 +4939,8 @@ void MainWindow::load_sub_settings(QSettings &settings, int symbology) } set_cmb_from_setting(settings, QSL("studio/bc/aztec/ecc"), QSL("cmbAztecECC")); set_rad_from_setting(settings, QSL("studio/bc/aztec/encoding_mode"), - QStringList() << QSL("radAztecStand") << QSL("radAztecGS1") << QSL("radAztecHIBC")); + QStringList() << QSL("radAztecStand") << QSL("radAztecGS1") << QSL("radAztecHIBC") + << QSL("radAztecExtraEsc")); set_chk_from_setting(settings, QSL("studio/bc/aztec/chk_full"), QSL("chkAztecFull")); set_chk_from_setting(settings, QSL("studio/bc/aztec/chk_fast"), QSL("chkAztecFast")); set_cmb_from_setting(settings, QSL("studio/bc/aztec/structapp_count"), QSL("cmbAztecStructAppCount"));