web/lib/Zend/Barcode/Object/Code128.php
author Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
Thu, 21 Mar 2013 19:50:53 +0100
changeset 807 877f952ae2bd
parent 207 621fa6caec0c
child 1230 68c69c656a2c
permissions -rw-r--r--
update Zend and twitter oauth end point
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
     1
<?php
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
     2
/**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
     3
 * Zend Framework
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
     4
 *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
     5
 * LICENSE
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
     6
 *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
     7
 * This source file is subject to the new BSD license that is bundled
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
     8
 * with this package in the file LICENSE.txt.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
     9
 * It is also available through the world-wide-web at this URL:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    10
 * http://framework.zend.com/license/new-bsd
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    11
 * If you did not receive a copy of the license and are unable to
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    12
 * obtain it through the world-wide-web, please send an email
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    13
 * to license@zend.com so we can send you a copy immediately.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    14
 *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    15
 * @category   Zend
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    16
 * @package    Zend_Barcode
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    17
 * @subpackage Object
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
    18
 * @copyright  Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    19
 * @license    http://framework.zend.com/license/new-bsd     New BSD License
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    20
 * @version    $Id: Code25.php 20096 2010-01-06 02:05:09Z bkarwin $
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    21
 */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    22
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    23
/**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    24
 * @see Zend_Barcode_Object_ObjectAbstract
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    25
 */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    26
require_once 'Zend/Barcode/Object/ObjectAbstract.php';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    27
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    28
/**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    29
 * @see Zend_Validate_Barcode
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    30
 */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    31
require_once 'Zend/Validate/Barcode.php';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    32
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    33
/**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    34
 * Class for generate Code128 barcode
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    35
 *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    36
 * @category   Zend
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    37
 * @package    Zend_Barcode
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
    38
 * @copyright  Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    39
 * @license    http://framework.zend.com/license/new-bsd     New BSD License
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    40
 */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    41
class Zend_Barcode_Object_Code128 extends Zend_Barcode_Object_ObjectAbstract
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    42
{
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    43
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    44
     * Drawing of checksum
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    45
     * (even if it's sometime optional, most of time it's required)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    46
     * @var boolean
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    47
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    48
    protected $_withChecksum = true;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    49
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    50
    /**
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
    51
     * @var array
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
    52
     */
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
    53
    protected $_convertedText = array();
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    54
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    55
    protected $_codingMap = array(
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    56
                 0 => "11011001100",   1 => "11001101100",   2 => "11001100110",
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    57
                 3 => "10010011000",   4 => "10010001100",   5 => "10001001100",
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    58
                 6 => "10011001000",   7 => "10011000100",   8 => "10001100100",
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    59
                 9 => "11001001000",  10 => "11001000100",  11 => "11000100100",
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    60
                12 => "10110011100",  13 => "10011011100",  14 => "10011001110",
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    61
                15 => "10111001100",  16 => "10011101100",  17 => "10011100110",
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    62
                18 => "11001110010",  19 => "11001011100",  20 => "11001001110",
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    63
                21 => "11011100100",  22 => "11001110100",  23 => "11101101110",
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    64
                24 => "11101001100",  25 => "11100101100",  26 => "11100100110",
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    65
                27 => "11101100100",  28 => "11100110100",  29 => "11100110010",
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    66
                30 => "11011011000",  31 => "11011000110",  32 => "11000110110",
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    67
                33 => "10100011000",  34 => "10001011000",  35 => "10001000110",
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    68
                36 => "10110001000",  37 => "10001101000",  38 => "10001100010",
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    69
                39 => "11010001000",  40 => "11000101000",  41 => "11000100010",
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    70
                42 => "10110111000",  43 => "10110001110",  44 => "10001101110",
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    71
                45 => "10111011000",  46 => "10111000110",  47 => "10001110110",
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    72
                48 => "11101110110",  49 => "11010001110",  50 => "11000101110",
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    73
                51 => "11011101000",  52 => "11011100010",  53 => "11011101110",
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    74
                54 => "11101011000",  55 => "11101000110",  56 => "11100010110",
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    75
                57 => "11101101000",  58 => "11101100010",  59 => "11100011010",
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    76
                60 => "11101111010",  61 => "11001000010",  62 => "11110001010",
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    77
                63 => "10100110000",  64 => "10100001100",  65 => "10010110000",
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    78
                66 => "10010000110",  67 => "10000101100",  68 => "10000100110",
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    79
                69 => "10110010000",  70 => "10110000100",  71 => "10011010000",
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    80
                72 => "10011000010",  73 => "10000110100",  74 => "10000110010",
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    81
                75 => "11000010010",  76 => "11001010000",  77 => "11110111010",
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    82
                78 => "11000010100",  79 => "10001111010",  80 => "10100111100",
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    83
                81 => "10010111100",  82 => "10010011110",  83 => "10111100100",
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    84
                84 => "10011110100",  85 => "10011110010",  86 => "11110100100",
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    85
                87 => "11110010100",  88 => "11110010010",  89 => "11011011110",
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    86
                90 => "11011110110",  91 => "11110110110",  92 => "10101111000",
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    87
                93 => "10100011110",  94 => "10001011110",  95 => "10111101000",
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    88
                96 => "10111100010",  97 => "11110101000",  98 => "11110100010",
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    89
                99 => "10111011110", 100 => "10111101110", 101 => "11101011110",
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    90
               102 => "11110101110",
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    91
               103 => "11010000100", 104 => "11010010000", 105 => "11010011100",
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    92
               106 => "1100011101011");
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    93
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    94
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    95
    * Character sets ABC
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    96
    * @var array
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    97
    */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    98
    protected $_charSets = array(
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    99
        'A' => array(
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   100
            ' ', '!', '"', '#', '$', '%', '&', "'",
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   101
            '(', ')', '*', '+', ',', '-', '.', '/',
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   102
            '0', '1', '2', '3', '4', '5', '6', '7',
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   103
            '8', '9', ':', ';', '<', '=', '>', '?',
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   104
            '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G',
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   105
            'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   106
            'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   107
            'X', 'Y', 'Z', '[', '\\', ']', '^', '_',
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   108
            0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   109
            0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   110
            0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   111
            0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   112
            'FNC3', 'FNC2', 'SHIFT', 'Code C', 'Code B', 'FNC4', 'FNC1',
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   113
            'START A', 'START B', 'START C', 'STOP'),
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   114
        'B' => array(
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   115
            ' ', '!', '"', '#', '$', '%', '&', "'",
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   116
            '(', ')', '*', '+', ',', '-', '.', '/',
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   117
            '0', '1', '2', '3', '4', '5', '6', '7',
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   118
            '8', '9', ':', ';', '<', '=', '>', '?',
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   119
            '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G',
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   120
            'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   121
            'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   122
            'X', 'Y', 'Z', '[', '\\', ']', '^', '_',
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   123
            '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g',
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   124
            'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   125
            'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   126
            'x', 'y', 'z', '{', '|', '}', '~', 0x7F,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   127
            'FNC3', 'FNC2', 'SHIFT', 'Code C', 'FNC4', 'Code A', 'FNC1',
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   128
            'START A', 'START B', 'START C', 'STOP',),
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   129
        'C' => array(
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   130
            '00', '01', '02', '03', '04', '05', '06', '07', '08', '09',
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   131
            '10', '11', '12', '13', '14', '15', '16', '17', '18', '19',
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   132
            '20', '21', '22', '23', '24', '25', '26', '27', '28', '29',
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   133
            '30', '31', '32', '33', '34', '35', '36', '37', '38', '39',
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   134
            '40', '41', '42', '43', '44', '45', '46', '47', '48', '49',
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   135
            '50', '51', '52', '53', '54', '55', '56', '57', '58', '59',
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   136
            '60', '61', '62', '63', '64', '65', '66', '67', '68', '69',
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   137
            '70', '71', '72', '73', '74', '75', '76', '77', '78', '79',
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   138
            '80', '81', '82', '83', '84', '85', '86', '87', '88', '89',
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   139
            '90', '91', '92', '93', '94', '95', '96', '97', '98', '99',
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   140
            'Code B', 'Code A', 'FNC1', 'START A', 'START B', 'START C', 'STOP'));
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   141
    /*'A' => array(
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   142
      ' '=>0, '!'=>1, '"'=>2, '#'=>3, '$'=>4, '%'=>5, '&'=>6, "'"=>7,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   143
      '('=>8, ')'=>9, '*'=>10, '+'=>11, ','=>12, '-'=>13, '.'=>14, '/'=>15,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   144
      '0'=>16, '1'=>17, '2'=>18, '3'=>19, '4'=>20, '5'=>21, '6'=>22, '7'=>23,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   145
      '8'=>24, '9'=>25, ':'=>26, ';'=>27, '<'=>28, '='=>29, '>'=>30, '?'=>31,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   146
      '@'=>32, 'A'=>33, 'B'=>34, 'C'=>35, 'D'=>36, 'E'=>37, 'F'=>38, 'G'=>39,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   147
      'H'=>40, 'I'=>41, 'J'=>42, 'K'=>43, 'L'=>44, 'M'=>45, 'N'=>46, 'O'=>47,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   148
      'P'=>48, 'Q'=>49, 'R'=>50, 'S'=>51, 'T'=>52, 'U'=>53, 'V'=>54, 'W'=>55,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   149
      'X'=>56, 'Y'=>57, 'Z'=>58, '['=>59, '\\'=>60, ']'=>61, '^'=>62, '_'=>63,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   150
      0x00=>64, 0x01=>65, 0x02=>66, 0x03=>67, 0x04=>68, 0x05=>69, 0x06=>70, 0x07=>71,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   151
      0x08=>72, 0x09=>73, 0x0A=>74, 0x0B=>75, 0x0C=>76, 0x0D=>77, 0x0E=>78, 0x0F=>79,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   152
      0x10=>80, 0x11=>81, 0x12=>82, 0x13=>83, 0x14=>84, 0x15=>85, 0x16=>86, 0x17=>87,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   153
      0x18=>88, 0x19=>89, 0x1A=>90, 0x1B=>91, 0x1C=>92, 0x1D=>93, 0x1E=>94, 0x1F=>95,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   154
      'FNC3'=>96, 'FNC2'=>97, 'SHIFT'=>98, 'Code C'=>99, 'Code B'=>100, 'FNC4'=>101, 'FNC1'=>102, 'START A'=>103,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   155
      'START B'=>104, 'START C'=>105, 'STOP'=>106),
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   156
    'B' => array(
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   157
      ' '=>0, '!'=>1, '"'=>2, '#'=>3, '$'=>4, '%'=>5, '&'=>6, "'"=>7,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   158
      '('=>8, ')'=>9, '*'=>10, '+'=>11, ','=>12, '-'=>13, '.'=>14, '/'=>15,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   159
      '0'=>16, '1'=>17, '2'=>18, '3'=>19, '4'=>20, '5'=>21, '6'=>22, '7'=>23,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   160
      '8'=>24, '9'=>25, ':'=>26, ';'=>27, '<'=>28, '='=>29, '>'=>30, '?'=>31,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   161
      '@'=>32, 'A'=>33, 'B'=>34, 'C'=>35, 'D'=>36, 'E'=>37, 'F'=>38, 'G'=>39,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   162
      'H'=>40, 'I'=>41, 'J'=>42, 'K'=>43, 'L'=>44, 'M'=>45, 'N'=>46, 'O'=>47,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   163
      'P'=>48, 'Q'=>49, 'R'=>50, 'S'=>51, 'T'=>52, 'U'=>53, 'V'=>54, 'W'=>55,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   164
      'X'=>56, 'Y'=>57, 'Z'=>58, '['=>59, '\\'=>60, ']'=>61, '^'=>62, '_'=>63,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   165
      '`' =>64, 'a'=>65, 'b'=>66, 'c'=>67, 'd'=>68, 'e'=>69, 'f'=>70, 'g'=>71,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   166
      'h'=>72, 'i'=>73, 'j'=>74, 'k'=>75, 'l'=>76, 'm'=>77, 'n'=>78, 'o'=>79,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   167
      'p'=>80, 'q'=>81, 'r'=>82, 's'=>83, 't'=>84, 'u'=>85, 'v'=>86, 'w'=>87,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   168
      'x'=>88, 'y'=>89, 'z'=>90, '{'=>91, '|'=>92, '}'=>93, '~'=>94, 0x7F=>95,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   169
      'FNC3'=>96, 'FNC2'=>97, 'SHIFT'=>98, 'Code C'=>99, 'FNC4'=>100, 'Code A'=>101, 'FNC1'=>102, 'START A'=>103,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   170
      'START B'=>104, 'START C'=>105, 'STOP'=>106,),
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   171
    'C' => array(
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   172
      '00'=>0, '01'=>1, '02'=>2, '03'=>3, '04'=>4, '05'=>5, '06'=>6, '07'=>7, '08'=>8, '09'=>9,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   173
      '10'=>10, '11'=>11, '12'=>12, '13'=>13, '14'=>14, '15'=>15, '16'=>16, '17'=>17, '18'=>18, '19'=>19,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   174
      '20'=>20, '21'=>21, '22'=>22, '23'=>23, '24'=>24, '25'=>25, '26'=>26, '27'=>27, '28'=>28, '29'=>29,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   175
      '30'=>30, '31'=>31, '32'=>32, '33'=>33, '34'=>34, '35'=>35, '36'=>36, '37'=>37, '38'=>38, '39'=>39,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   176
      '40'=>40, '41'=>41, '42'=>42, '43'=>43, '44'=>44, '45'=>45, '46'=>46, '47'=>47, '48'=>48, '49'=>49,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   177
      '50'=>50, '51'=>51, '52'=>52, '53'=>53, '54'=>54, '55'=>55, '56'=>56, '57'=>57, '58'=>58, '59'=>59,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   178
      '60'=>60, '61'=>61, '62'=>62, '63'=>63, '64'=>64, '65'=>65, '66'=>66, '67'=>67, '68'=>68, '69'=>69,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   179
      '70'=>70, '71'=>71, '72'=>72, '73'=>73, '74'=>74, '75'=>75, '76'=>76, '77'=>77, '78'=>78, '79'=>79,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   180
      '80'=>80, '81'=>81, '82'=>82, '83'=>83, '84'=>84, '85'=>85, '86'=>86, '87'=>87, '88'=>88, '89'=>89,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   181
      '90'=>90, '91'=>91, '92'=>92, '93'=>93, '94'=>94, '95'=>95, '96'=>96, '97'=>97, '98'=>98, '99'=>99,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   182
      'Code B'=>100, 'Code A'=>101, 'FNC1'=>102, 'START A'=>103, 'START B'=>104, 'START C'=>105, 'STOP'=>106));*/
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   183
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   184
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   185
     * Width of the barcode (in pixels)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   186
     * @return integer
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   187
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   188
    protected function _calculateBarcodeWidth()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   189
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   190
        $quietZone = $this->getQuietZone();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   191
        // Each characters contain 11 bars...
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   192
        $characterLength = 11 * $this->_barThinWidth * $this->_factor;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   193
        $convertedChars = count($this->_convertToBarcodeChars($this->getText()));
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   194
        if ($this->_withChecksum) {
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   195
            $convertedChars++;
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   196
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   197
        $encodedData = $convertedChars * $characterLength;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   198
        // ...except the STOP character (13)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   199
        $encodedData += $characterLength + 2 * $this->_barThinWidth * $this->_factor;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   200
        $width = $quietZone + $encodedData + $quietZone;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   201
        return $width;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   202
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   203
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   204
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   205
     * Partial check of code128 barcode
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   206
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   207
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   208
    protected function _checkParams()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   209
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   210
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   211
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   212
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   213
     * Prepare array to draw barcode
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   214
     * @return array
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   215
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   216
    protected function _prepareBarcode()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   217
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   218
        $barcodeTable = array();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   219
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   220
        $convertedChars = $this->_convertToBarcodeChars($this->getText());
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   221
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   222
        if ($this->_withChecksum) {
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   223
            $convertedChars[] = $this->getChecksum($this->getText());
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   224
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   225
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   226
        // STOP CHARACTER
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   227
        $convertedChars[] = 106;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   228
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   229
        foreach ($convertedChars as $barcodeChar) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   230
            $barcodePattern = $this->_codingMap[$barcodeChar];
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   231
            foreach (str_split($barcodePattern) as $c) {
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   232
                $barcodeTable[] = array($c, $this->_barThinWidth, 0, 1);
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   233
            }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   234
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   235
        return $barcodeTable;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   236
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   237
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   238
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   239
     * Checks if the next $length chars of $string starting at $pos are numeric.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   240
     * Returns false if the end of the string is reached.
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   241
     * @param string $string String to search
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   242
     * @param int    $pos Starting position
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   243
     * @param int    $length Length to search
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   244
     * @return bool
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   245
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   246
    protected static function _isDigit($string, $pos, $length = 2)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   247
    {
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   248
        if ($pos + $length > strlen($string)) {
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   249
           return false;
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   250
        }
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   251
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   252
        for ($i = $pos; $i < $pos + $length; $i++) {
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   253
              if (!is_numeric($string[$i])) {
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   254
                  return false;
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   255
              }
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   256
        }
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   257
        return true;
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   258
    }
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   259
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   260
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   261
     * Convert string to barcode string
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   262
     * @return array
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   263
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   264
    protected function _convertToBarcodeChars($string)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   265
    {
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   266
        $string = (string) $string;
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   267
        if (!strlen($string)) {
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   268
            return array();
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   269
        }
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   270
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   271
        if (isset($this->_convertedText[md5($string)])) {
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   272
            return $this->_convertedText[md5($string)];
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   273
        }
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   274
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   275
        $currentCharset = null;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   276
        $sum = 0;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   277
        $fak = 0;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   278
        $result = array();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   279
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   280
        for ($pos = 0; $pos < strlen($string); $pos++) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   281
            $char = $string[$pos];
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   282
            $code = null;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   283
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   284
            if (self::_isDigit($string, $pos, 4) && $currentCharset != 'C'
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   285
             || self::_isDigit($string, $pos, 2) && $currentCharset == 'C') {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   286
                /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   287
                 * Switch to C if the next 4 chars are numeric or stay C if the next 2
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   288
                 * chars are numeric
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   289
                 */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   290
                if ($currentCharset != 'C') {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   291
                    if ($pos == 0) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   292
                        $code = array_search("START C", $this->_charSets['C']);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   293
                    } else {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   294
                        $code = array_search("Code C", $this->_charSets[$currentCharset]);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   295
                    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   296
                    $result[] = $code;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   297
                    $currentCharset = 'C';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   298
                }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   299
            } else if (in_array($char, $this->_charSets['B']) && $currentCharset != 'B'
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   300
                  && !(in_array($char, $this->_charSets['A']) && $currentCharset == 'A')) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   301
                /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   302
                 * Switch to B as B contains the char and B is not the current charset.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   303
                 */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   304
                if ($pos == 0) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   305
                    $code = array_search("START B", $this->_charSets['B']);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   306
                } else {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   307
                    $code = array_search("Code B", $this->_charSets[$currentCharset]);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   308
                }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   309
                $result[] = $code;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   310
                $currentCharset = 'B';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   311
            } else if (array_key_exists($char, $this->_charSets['A']) && $currentCharset != 'A'
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   312
                  && !(array_key_exists($char, $this->_charSets['B']) && $currentCharset == 'B')) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   313
                /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   314
                 * Switch to C as C contains the char and C is not the current charset.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   315
                 */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   316
                if ($pos == 0) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   317
                    $code = array_search("START A", $this->_charSets['A']);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   318
                } else {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   319
                    $code =array_search("Code A", $this->_charSets[$currentCharset]);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   320
                }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   321
                $result[] = $code;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   322
                $currentCharset = 'A';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   323
            }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   324
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   325
            if ($currentCharset == 'C') {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   326
                $code = array_search(substr($string, $pos, 2), $this->_charSets['C']);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   327
                $pos++; //Two chars from input
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   328
            } else {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   329
                $code = array_search($string[$pos], $this->_charSets[$currentCharset]);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   330
            }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   331
            $result[] = $code;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   332
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   333
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   334
        $this->_convertedText[md5($string)] = $result;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   335
        return $result;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   336
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   337
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   338
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   339
     * Set text to encode
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   340
     * @param string $value
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   341
     * @return Zend_Barcode_Object
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   342
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   343
    public function setText($value)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   344
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   345
        $this->_text = $value;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   346
        return $this;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   347
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   348
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   349
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   350
     * Retrieve text to encode
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   351
     * @return string
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   352
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   353
    public function getText()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   354
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   355
        return $this->_text;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   356
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   357
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   358
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   359
     * Get barcode checksum
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   360
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   361
     * @param  string $text
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   362
     * @return int
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   363
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   364
    public function getChecksum($text)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   365
    {
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   366
        $tableOfChars = $this->_convertToBarcodeChars($text);
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   367
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   368
        $sum = $tableOfChars[0];
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   369
        unset($tableOfChars[0]);
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   370
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   371
        $k = 1;
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   372
        foreach ($tableOfChars as $char) {
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   373
            $sum += ($k++) * $char;
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   374
        }
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   375
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   376
        $checksum = $sum % 103;
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   377
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   378
        return $checksum;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   379
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   380
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   381
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   382
     * Standard validation for most of barcode objects
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   383
     * @param string $value
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   384
     * @param array  $options
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   385
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   386
    protected function _validateText($value, $options = array())
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   387
    {
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   388
        // @TODO: add code128 validator
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   389
        return true;
0
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   390
    }
807
877f952ae2bd update Zend and twitter oauth end point
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents: 207
diff changeset
   391
}
y*,I d$uB61 :,O4$^OC;A C7p& 7LE}'qބh>!"qf2ƺSǭ.gM4J"bF mD'0a>NS "3R I)٫tDBL^|1WBۀ_x-H z dg 3yY!':7!oWYo'Ȍ8P3sMq2DΧ M^FM -mZ945ce)dT9gF^4PӍ] |Eb%fؘ}H4-"/XN9$GZ aT;J`9:@\Hc4,R2n-3k^: C#䐠Y^Hi=&sMϛR S9Z_CzG鴬D'[!I;*Hc ,9&iϱBcc@z:ym9aL";:)w<Lo<|PQX/CpN@t#yHX8[N6ʚ3HJ575D76R*?v;jɘua-Pe|5/e.&frރ8=: n2SLdaRq7 g̨ e"mɛ$TU[i4{Ix5M/4m`3\yfkd lj|`qo?$$&Vǔ|P 1FC5#C+x ΂Ƒ"gB_ GRe@!LTCj.>&F'=˛ [_}nCP;mSzeɛy5uuMi<.|3v&8Z#W3"Is~6xk{mx% |WQdz]ءZ?u0AՖ{j*2[ i|߻]e3vQVӽxo%~YqxehT*{L[HDPZ?ZP-${m~CdǢ7X/4 vT>1U'X7 r)^ez y[bH HGLrg@f.특Yv<Ur=5SU ~ޕ'BBc%2'\D~}Wfzdp|_۟w(jI@~Oy -a_ԷTܹfK %b<ۂ; mCZ N+~F7ֿ $|F ֺjQfњuP~f,R??:K1Iη1]E nЁgD~3+A %B>r߈3AHiyѐZXkIojõİ [@r&~'=Rɉ' qԘ>4.5M&k+K8hy_lR ͯܲtDV VD/'7v=Mmy,468U0F=$oOg‡hWd 0T`ꊡVHTrPÑu}e%ۢһ#}4WYOxӶH->8ˊsΊ"jW:"(i/֨]$NUs.>xpUE'PftA\H/T#S%\ \NdfB$u*Ik|<~OVPI`I 돝c7LE%IaIxPp 1/H@Ʈ&Ns)2w ^,kNG 2zhYG j0΅żF,B/2-DxpMAfXUV=dJlz7x9i# Q/ t`"͂N6ū_˪;(8t|g?OS9w(x OۃKkM]eLBg4y>={pwOSNC ;.76{fyfT3c P]?^Yn:zzSoɭ(5~T'V* Y#:^`%\+ ?ת+:*p.h8 $0St>ѻ.Bu:{%wpT2nLADz݈xyIUX9 ]t^F4ˇ3l2 Z~nҐ \ŘT0.sYFJ@<Ӟ=TGwXό sQN/T.G:>*J_-W=w}=w_V 6n$>tt N_Y.,96Z.w#eĈ\:e .[ǚ{ǰxkdd)?ڿ2R<;_^վ<&]gD"oTF Թb6xi ]P#9Vqz*OX0ae(-O[7O*+?zX~OW-+YX$b`m pg77XHc{i9~_,J>dI<Ɗᐫħ=iÿ0+{+HHhO!Dyqe5ZɜA= tp9sRw>1L _q8_YY0ņy밯U O^Z֡=`>>b* ̍N*;1ԁY/ e%})+W{c!fƛB]auQ0&A!Y*lͣ(@@ MkVod=$H/HLWqV9WNsV)R;Foq}DvrTNZ _lBrV'53  nڛ]`M7/Ѥ0{؊k*#_\]Ԅ?$w@P:jbWXYNNPoOWE̠J*rPzvn,j~9!][NLQW쉣.QOG({ 弐') ւwVX'k&v %}5SD "T-FprNaKITfat$l #@O}`s6k;zmjfe¹=`WkǪ;dl%D C$5xt;DWOB b5|DؤPYyha 啌WTӠUm`=>y{?#nEtB  Zr~=oINZy:- \BuиJIgsvqp)a(y9ğEs_].ΏBX|bo%G /'w4!s\Ho9 a|Q:Cǟ41s/ C)lezB=ix,c&U-CH@Sn'왡fђ" EZ.Re/eVNͤ ^C׹'Ťv=0ힾXadAyJhwQ8F|^dóf2oԺ; 6h)~_-̉OxGwM(ȥVEYu.]/;ParW W &{RԀGyx)_iqشi0*`Z56a#c۟F.uNhf{Du['hXZ dMrjL38f;%H pʅr|Rf,*^a>֔85nH%Tb8"|*NjK}) "nX ,k $s6- T:sġ:]&ΦZDk#ENC5M ZK32t |edX@(ŝ&`,`K^0xζEհzBrzkkQ.3_ayGF*@qk {o!O<nd X'<x}HDY('H*`qf{(s;RX__wr"F:W);(ҩ %QjfNyכg=3'JEא9nYFнQ2A(+gq2]rdzI3EyЄ"E޶{ӗz1: ?T,ze ` P􍯑yYKgCzGAKj )lKU}Ÿ >jm Ѭ$IڳVGz pÁ(Ϲa @y#o+z ECKʗI0tKW}q'+<7ƉՁa›8{H=>6} D?S _ -+Ӊ/DX9PsVp-@t.Ú>TeQr@ -yGiKJ*_dK" ʕBx_Rn^՜oh8V. XF= ]Y˽䖿C \?NܷD!*t3nw" 5&688y iG}|!?Ľ;@e/ڼA d7@]ݳ xu( tH[d.+PRrF|t'&AеTPPo A3-)or86;Z4?ݺLoI{{8 z^P @ūЌbvZN6ފHa ^Fs\]ZGF v[=Ձn" t<*Q)+Z'{5՟jR&Y[)_,<CF"ImubyTF 9Kn>9M@E0~Vk!CÁ4"H`g_Mzνy+2h ҽj o-;nM.T5 P<~ mkIrMۏO)*c/F޶z!')t v ]|XTV4;z Ơ j%sIq떊\$-*r%)67ϋF3(Ԝ_CHiPÍwR*;cdmsRezK8a[,8dZ u˺;<9Nfe:\XzؽxG0kR}Qy#&-ԂfE-TkkNzsZ4uS& W3&gDZ@Hӹ\$ԫj8nlQ# ňK[R6SDަ - P+qne_5^vf)|§w O.. /)O$; ~^WD5D3v fTI:ҰI}})`&LU|J nh/ީI^t=q сr`l mQ쁴dX-RawKfL#S0bMrrMpp>ޭ2NrP܂2\ss{$J6 (V84oBZ<;jؘ3iPm4t삱SeMH[4Q -RlpC~Y!rL dd{װȮ4~By! ?``| CR"TxRNo7$V~f7}Q͟$:,PSklBj_WutW ʭ?,.73(\@m-;I8'f + RJn]9+o7kLBMO)Vom|C0ـTJiś+jUL%tMowueتL. _9zsv^Vz]k6jFń7Ce$2-ՓъH{5VL?m7*qSMʝGZAόN͹Oȧ&YV.r /L]˴3:p3T5ָ-Bcdն1WQ:0 ދQa@aS[.( bPٞ]I[Mrń=ߝiϥ&:/G2=-X#8_pUZ'cxªŘ`cyv-ԜMmqIN3ޏPfINb@_T"ˮ4B\&,K_财xo $36XdL;C@'Qc-idR_[! qXF Z=zO:4v'UG#,>E qɭC_=AH4/μ/ʄI9Eζ~1pKebp}i|X79dNm^Ê޽aߦ3U0*:gOhS<֜?05#s8| %Ag;p#Dݛ+pUZ|[qeDeWеN5b3N H8+Aeט$ }z|XX7(k':΀JcE刬A la@~-sc(D5}hmI 1LGw黫ӆ_#t!n'݁ݱVߠXF=T?,G@68a=L[M2L<&1Zŵsz~G J*,c{tƲxرnv :Uİ=ϷpEwoJFp b2"2ƶ%[+aP{ ;cTm7UQY\t<ANlQ#0PxWZ{cWYKub7ފE }Fs{eQ:>~ `kV1"rҫD`l_%sqDᆳKC+l-A^ԈՃt&nr$&RZX@R_ 0W$x4[s3/!yv1 2jU}Ed;1:5x9'MI$"_R9NDy2u=oeW+HUc>qqrnrhS N &={{ lvmL[)')P:83r~rXƮ:\8Րgh`i \gHMK/1f#KB}PⓁZBJ[5oO LFjTKE,%7"YWf9L?Fw= eTk2p\sU wv0n8\/aGde(oU>$'ao)K5>cy}n5흛-e/[^vzm[y}mooaA=oo.ǽZ]S;e{ u{_9׮}wI{x{5__{:nk뾬+[o{naOvw5۶tޛ7oG{m[ݽ_w.F;;ۭz}fB7}Ww/k}gVzO]ђp3rvڡսvWsPճۻ3*.g=Ed۽pbrq^]{o4ִIi;^zJwak{֨^n-Λ糡vWPh}Zǣϳ}5Ɨ2zmWζko6g}ocmiz=::X.Ywuul飦}9}y=[wq==>rzmz4v{{egͮKB׺LjzXiznn& Iཁvgގe=٭mVv5N^޲n^x^s3]usJ֍Zgwe{ܢ{]צ;WО/nݷú9ŭ}Quݛ^;ݝ]=N=owT+{7{o^aNmt{y/^{esu]ozZڛm+s==vowy}ǭwy=zX޺s^[6_{뻵{z{)w{ny^/x-}7Ro5#{V}fWctfNw7T}t9f4g﷓jOko}Rw}=o^7a_^}6}lڝNogyoovC׭tx֯{[ݓv'r{}w}ն{Pk^_mץ /ݹ {c}w{Mw];g_O=]ֵyQ{rjm־>{;{ݾ;OwwC}{}nnoof7ۯw5f0:x=[:}=;Wm׭}gכote {_Us=}{w}{{AnGc{.{Wa}4:w}ܯ}\:+z>ǡr^`wvmy{j={c{=wvoJ'{]]=yz{˦cTkڟ}vϧg_s{m[m=W'ٻ{{{aצUay{oïmͫm[Uy:{it5wz׽U[Aqϛ]׽j\4<{ltVO^ӷ۾SqtK{z|5﷛_j}`V׺z{{)UWg:Klv5qs]*sy}s{huUniղkUkGqދTݎs>wC_wqݺ{g۹Ov{iס/OOTzw׍t{uO2yZ#z>ww݀˵{ :/y^{ ;e%>}7}U{sz|^Uge-3Ns5vw__Zc](<Ʒnk}u]}^}\^}aWk}J޷[m}Dܯ[og wmϭ}v޻S3ﰯ1/fvoѮ׺:zeݻ>7f{j֙[oxkm[NѻS[s7O{ݚ{g}q[ {]ן[w٪nk{g7vՖwvM=t5[۽slekț|MJwsޮ'v4Q}}o3{=:۾ꚽL}*lRVסUz]}z;d6tz޷V{nfnkmޝ{{Tm}s^R ;{z]WlMNw/]@*Qϱlv=;_oYo\}}w.]Sپ}}]ݽ}mUNQd֊=tt}޺m[K{{kcwo[O^K׽׽Mc[:w7:ѯGzm=||vxXOg޷xw}mO]yvu;P{޺۸wol}w]Mtz'm 7{#^\|N:.Nz.vuUWEPxng{6^6{^nw}ܶsttwrt=6ܞrZszsdҲ9noOzOJi{zkvzӶö.{;i[w6v{}yݏzd4w6mW8{:ww/Zonu^^Ƿ;nڜo}ݧzvo3kz}{+v:}7ۻ[lo{{ݺskK.ˮs{9=}+>=3{}nym:z.vo^Zg{ǯl=tנ:ownwZޟ{{y.g^{}z|Wz_wG};]ǣ}r{2y◖}y:oovݽw]VW6nѠ[@}[N{ﵱݏO'Mz:ut8]}ۻ4lw۷n[w};ޯ}䃮}}7}w^ꞷwo%buoXUjڵs: }Wvom]{v_OݼM6eΟ_mݛ٥vwO{ͫity[mٮlq^Ƕ<=i>o_}}w]dl=Iu"}}mM}wtuU{z׶/tW:wQsWbݗY{ݺf]ڜۼzmn{yϽ{׽}]o'7tFkz{:{|[q{mh[}^[ս޽w׻os\owz沾og_{նj;o]q{q{[i^c}_{\y%l4z7=k_vt>}v;N{T{ow+w^gN{w]{w_{vͫz]nz6nwoCvvT}>ݰ:nټg}tܽ=9 {ۯʶam`iy#{@{B7Wvfn{=n뽺7wk>͛ovk|kz}OB]^snC{RYվFݤ}O}ٯ5y{޵ׯso^Ծj퇯#j}s/wW}=;e74-ݦiz}{{遻Sݻj׽]딡i]^obow}}ɼr7www=.ץyz=^{ntuz뜫Om>}ë}l=^>:=^ͷ}gzr/o>>\!-^ϽnoZ=m׻^zwou.Ϟݟ^4vvzCwݏ}6n˴>uھ;>{}tnsgMi޻}cۻ׾Sfwu=;wۯuwruv֞{sWo[o{=ۯ^z&ݽwton.oyG}zdo}gfgnso_;^{vۯ7nus;0קo{ofo;׻]ܽNݚ̧׷q.-Ӿ};k}k{QVwZ:Kٷb.uν{oK{;wV ŵ<٧{};Ѯ;ﯼպo:ww믧Ҷ}>ͽ Wsy{y>w۶ ˷v=w;i+wgw6kknٻ{wg_[w4_G@]=}eWܻzým:Yrnz=SwO"syg/e=^y:j;MyI}w>wצ{{}t}ؽj\[}\5on'vzz{kև^jh ms}=۪vzݻh{}}_^/%쫵>kc ovf^ݞ}}o{^-kۛ{twZ;>ø^i\l͵ꓷNw m.@k'ﺻyV˛Z{ӹZ޳Zyf677g][>﷮U}7־cNkn3muʊs=tto^stWþZt{ﶟ6޽q:WMvu{joooG;6{ٻ禫Y=}z:m{/n{54k۷{{Y׽.̽kۻ#ݵo^{}{ޝv}{kݙӽn{ޝP{v}t>vqϷm}s-(iLן[mU}}7YECN}GzTۺϛ{Wkv5oݟ}kv۴somzvw{bO}fu4gB{]fnU϶Qwu{zY཭v)]]{U_XZo^v=}=Tncm=w{4 ٭n rwwkz:][ﺾ[>Ͻ*λS]v2wwȵݍ<۾w}ӯ= =シ{]o c[>_c{U;^{ݷ{å=w{n^{;>wZ݇ݻo6vZ^2^6׼k.)==;[}9iRJ^}{ϯTն{]vm[֛t-z7gnT}www.SקoM{}>z=|}v{o[gV}m[wg}^mpn]=϶|uww;Zw{JG^tڽ췻v*׽c{]ynڪk[a(zn4u O3_}{]G{w{Ǎ^\=}two_w6۹ݝPiz}[sZ4w9oGa٢^q=LSn3`{>\۳[}M;\nvs|4=:^mjgW/yoֶWv4ڔuׯo|z=zwZý;>_^e'Ͼwb_no;^{n޵ޚݲv{ʾAݟY^םB~ @UO2%Ox*PS &hO*U?LA@LL D4OB3F44H3S02a4  LFSLh13EQ 4S?0O eLSSU;7'E?@`WoO88l:g9^Φhx:cv#BsJ#-ӅGl;szї%-f;GpKOS֤>}{[2evkn =UE$#Hbc,/n=fϳ ),gQ-jOd'lDp,Z}895D a0eZ]"އlȠ-?2'oC;o5:#?i jb"Khv*j"B/J=,}_cYHB(b.I6 ^ȁj" A )Ni%%&dG Y S!r.6@%(W N| ONe'VQ54Ӎ(*@oAOWup+8C|?w o;*&ۈCTC_+&&}S5 Sy6awON,c7u:jAg.Mv2(Uf_1+koh.e;y=cƉEG*/??p?` ~ALN4 %;r:b,X]i,9w&*n/w ^(~첡RhJvW4,Zpf[AA7JV#yf AdF'n$/ר_Szrв &j?vQ>޻f(yUu2nQR~QfRj{M X> *GŎ#gJܢ.@y :SJ/@T,^KyP'[H-%JV5i9BVpi Iy:T.sP23 R,*Nш<x#AȾ×ᬲ9XO'0E+c;#`6A6z+ Օx2y56iY %|% º`4YӅi#E+!rPv7dsWQ={ڔV9 zat`mۡFB;_$J8EfR74HH5}t={޶ch_%0*9n;]^[3L qCDot {k,mCwweEK$&ٌ܊KPǾHH¾Y-j&FGJHM῭ u}-O2FDQwձdfqYѬ ]L1_ͼFyXoR7VncWn5kQ˺WO% 9CY=`Bb5_VI12}.0KՏ@(`*Mm΢n|֕Zf\E 89;|!axeMd5GIО의v`#" ^:["22ϟ#p@J\g6x*7>r_fz/w"̤-܅~3.@bJNw.q*TV6詋ς0>m.~ Ư~p0l ?@X[HuT{K  ɐ@&A){;?‰"Ax俥cUa0&<̠T`׿)& |$jRc>#i|n"`.17jghO!SkYB5-XNleqmƀݑ`4fp2U0J;,>~:@)+dᵪ8w.95c`G3z}@[9yy:% B"H.pf"tۣY` gYh9G ֙]bZ\9X4BY!8Nk 1/kְks[9ta*2P^EL YBzanO83b*JMdZM/i$Ko+㢹Ӣ5:k է:}%6>rBNr-HtGtm=.Eξ,cځchgy0;ԔHt Xd).Vd7"kmf^''̈́8ujc+ +^Jemک&3CD987dB̿,Ft7$FjwCo{HYȓ B5uU& rRjVFQag%nN/N"&M`Oಛ҃8"UY."\ġe**h\Nv]q,Qyǯ5 d Os=xRbuK[*z4!#?oY0%lU~hMGwPlJyЅy\l%JL&X7l t!Mf).0n3"pܰ0ۯyR=rf 'B,O4x)-e'dE*E+־_=2|! >l WDzMT.`Z,EF,gG}:7B:o~;ADl6o12n/bdu? Gav9@'ayϓ,jMU A٨Jz ^X8'BA4LiPP^;9@;[Ÿf,:̘CPŮaaXk*c{0:'A&^D_|Jb)GQ<xQ&Cn<=wHX?~PbS-*p}\3lfJZjq5W `T?i_k>N\T9__^YK LrV:V|L^tԁAz.$^VDXOo?A8e*%{UgZ 5{^;v\v2z%M'0"&VLjjZ\gW;^Ɛ];/0>0ZYma(\vM4BĜ/u =8YcKAzXu,D5I)UCHyl8-m>]ۭSdenݼ;@*5IJ#aJ΄Cc;M%QpgfRCLL$.k|ʅTѷ'GσuQ`M,ahI6븚V0< Wk?zثM^an,.&­O$D|i*mqPUy>3v~OLd=| X Ow !fǔK`p-pa Ǿ O)yGۓټPk=;Gƺޥ!1~hNiceVV$hȽθF:.&ӼGy|$$Y7^?EIH ^EqJ- 씟LwsW>4;|j)px;◱EUp%ݩo u{ \q\;('f~ylڕIb5meԻMU>M@rDu%M2v u},@[1+VgD  e%\w7G1Cu&.Q`:p3ky.XEݠ$hݛZd0(Hpͳ7ębJ2.M7^Q_օġid{vr`CYw q:X7&+~`@qu^9"&}.q}71%w^nWHHF:r\څ4:dj7IGHlT(I"BF-wCύʯOHtu)lf_еI%C~v x~8!% `<9:ZNUBn8xv]2{\ >lKؙ5uBob .;FlX 0D3`>[gԟkq*Mh9vZV7dǔHO*K CٍѼ/<>w7.H*Q}R$:.vNz#/ZB75 /?D)?C~\z-I"i8N& F8wFॺXwo;l+|h[2Df6ڮ_TmɓA4L83Ց]z.tvXR^@E-X /y8lp;x @c˦? \֌/v;8R9 apwB/[IE Xr&xb{"#:KuB+2Fe$xN'䎍lOei A'([:OsP5Ln*,zk$34gd(V?м?"*10m-{l_ı>bW\0]7>bGA$WDN[jՅpw+_{ywqdBJKGP6m9Ō<.)Q]Wer c d'T=tst?l2 KƯIpFF'K2ύSv4+@cEdt&\6~w"XN_"][@_gJX|j򱝽^k>UEi%,&0ykUSW4iu?ؽ%pR 7V׽}GIha,)ȶ==9Vev)&os1:ڶLᗬt\f7 W&$77Ü$^N$9o51ͬŷ밧 p߭b)ڝ믔–fWLś-QX(u?aw3zeItg?*|!c(-M]\B]:)ȺaPg^i۫LTZ1nXt(P)r6L{Jny!4̼'񄔭)BzVAK&K?DW .2rk&\pOM;;o|VSCCOwW]"E-W(7 , PL=w=D@;=k$YGAUq$%CO쇪fzFdܟD:!5 wz `@L4σw+7 j[M0`ֶO3w0O>|A]Ebԗr$+*Km;vEpSBnM:a<7l[fInTM̡o9‚cqn|J: J\D720iטe1,Xnd]qg2h<92+7fL FY;S0{$` C-(_TaYOP 9_@R)fJI$'#җU*҆Cc }Z&*cnz$k9_;[e. UGl3/aDmWdPr-eژK)(<5n5\imdE2|VƼ!Nyk$J5I/WUR[55'Hݨ `!K }\G$;?#)I/?&X˃K}4% :^J"$4Is6u4J,-4eN)(T!}ԍ?쐜+U[jW0؈ hŝp"e88W\B!-Jerh$UgLjȓgLZpeDr)aӵŔZu=^ yVUϕ9[S=7rJ:'o ŘwK9-[=.c7ft!fx.Hzflpdϑz:ps4H$+)b~@\"S 6z$ . Z?2 fT{=Mz 4M츍+]L6HU#"_^a8sr0~qb1om? `^/oV8Hiyl@?Yskᵡ_1Vk)].{w uoR(UZQo&9OٿwmCSr5nҒL0|fz)OP.6Dp`Zhgpȑpldp;7 Xl"7B$q˞2b^@u{!*g=y.֟1ld[4t((Dcn~e)I W/X =BR6'<.75PvҀըVa*-n@J(]7$گZҭ q!+8%󙰬|$o2vk cU*EA-")#['k%d2V1ViT$D~fxD㦴 +Ĩ}o*Z_2F3sY7,jUp<;]N3r ÍgHh%AջzHM>YY^)%$S#u+h6T)GF iւy8XRAt] eiyk ?"*K_HTtWcD`yJµWk4d_蒛oHgl&DqlŰFS2Civ̀!SGC,R1<_~.f)++a?=̾<Pddj8PfHHZy5t]Q DN#.&S-24^tRe6#h7pjOS#& rv - x-Vq (hQ+>h>&K#㘷G7ؤ?H?K|+yp+-d 6ehM(R$}|rhz;AY+ֿq#BjFAZQhxr%>^>ߐBՅvzPED8 ^GcAwTA p{LHAP1I$/_*34QK `'y9~gc̉ zHp߃:YRl8Oȳ1Iwp5I>MyV,F:*i?0{/$qn ~Nu`rE?`tytXOf{-@@90ADtK:<]IKqѴXk$uk9 سCC\-Ps9eVƖ> 8uh?- yW:IcUM?MSp-3c`)Zy]r%q/DH9GONsmmjƞJo76|Ts>5;l K%AmBsS,&7ȵ97*Fa`lN}NM-KI 0-+_jWQ叐*/pc/?ڣ|t 3J|G P.dg1E9F͛wj8赲^Ya;G P*, eiHJZ ,aq!Jձ\K S#mX| /_z u[wdXR5lLP?H*ҩ5YroX&3.cu,<&|!5& =s$*Aw1խtܾg؀\}2*՛n"Wy'z;dйqz;޲5؊#4xb6 xcy<̻(>zkn;jzxFቻR0ZT9^+)|\\,{ +p̟sP_"f"Jw˗D2Z%2;_]Ϲ$v-g{ wF?-~̇ ņ93 *UK[m.ݎ! G>fJI;@U9qEL"I~^Z7 g|ծD88/qʗJgNJpjG2a!X*/>a[ٷPuFx,:bH m)jV]ހ`k 7B`ҧ'y&V%us:mxtk.!mr7"yUDN>1+[ª4KB-3T#OuV;FnU# LQ]3c$d-jE}.@g. 2؋E8(:nJG}mA8gBz{1pbɶV0hDsaMmoAT(oJҺS{}~ /Y`r3O$|C흺Y\$zƼLJ:GNl$ t;N^JܖwI _ HY\KBGA>P*m̘ <49 @VG7NS?*/>Ͷ?( 2`y*8&?N<*\ÎsZXG?i5zV hMH:nXD~a"l`p!3SC= \kp$D w3O.X ЁҏM=DV<-ALG+Flzo/~~)`= 9ے^rE#!DK]doY)d {-½~KMxP{X!MgHCNutr{]-K$tfYf4FF< 6 b 퍳i'׉ LEUlX:ZFi68m>zʜH?qiE5ĜwѼ%_lV-ֱ-Q]j]1- +UV̠} H/{ǨDpvHrJۯ.7&ZT7ĖJxį[ufh+,S%;0Sb KQ7&ҙTsp*U1V;O9 >F-:vӒqpOD[;zWVvVQݰ廲 i~[jԞGz @lFK?wp'c Rg .xPLWˆ ;$|ru;8Ӡ9(nwn:H?Vd:xW6f X! 넳fVa"ҌsgM5lćӼiڢ@+8윮b_)l)I;Z(Aj;+@\Xp f)0t(ZG>E8sᐧےtf1}k^)`%4z>G,R'I.^/c*=Kiȇ0/~@j>h0TxqEV?Np>3Rd%]M';wR:7FG v+*{ό37n:*QOwsL"Gv2wϑ<2XC\Otr8*-#uB3aox@V$pr}D"U5oQ|b=%+7~Y~AYet%"-v[6'ă]xGcЎr=9]S6,r7ӲՏEE5x?s`a列@!VH;Nx&EA2v>% *?t2Ȣٌ5aГuewe=<>R'l\x G9*x@]F`@U.4er٤B~WܶA] +<,Ķ ~nBRCm]KA)Hnso#㭰]*H"i^i9s(:zl;_ij3'JE3,EMlq@ 7!y #r[ !|S_0XXܻ]1)9:Î!,?cD7oZB͉"Jt,}}HwENp;<)`ktյzNvͬ}Mґ-t Ņ𰴐3k;/\۶W枻6gR?s(\[x\7fTE ,L|&L פnʹ>َb:3`bHTBŻPt/e;t`!mZ}F!?,w6; _csD k`*wn?z]Ӝc&{N81^'zNli:VSuj*KlNJ8;r(W7J=c4{$1O& v5iB֠ h_daIa#p^%e:K· }Y6+X&^~(Pe~"][nrZ&#'AR*6MSwdHn%\bEKo5s! WC$bRXglAؑw4vAPPd}u hC?` xYr1-ݽֽ\MTرmN\f#k}yzjؐnE'>JRTajy>bpsz-dKx ꞝ%i1Ay qM8(T\S]+烹ϷHWv2eנE( h˴[Nq`C`7l s4J|FɎx2dMOo#vg]E\UUXG [pV N[ [Qe C}^cj\! ׎;#Ivo yi~@_ejKn<_d**.7DL%JSHԩ am)IMkS~6!Zk1UXϧפż ƚ\t`ﬠ gr*ձFv5 &^̽Ja.( ]D$i,( .>Т]9"JU<^.o6@|d${jvܾ8eү:p'\_*0Sݷf)5 h6x;*Pl\e5BUa,:|$9L+H2zC<2P ]#䰦?>_ӡgylA]5J8lz]չ SSdNqo|>ו} r̹{0n{1.mJFdU#; IDTQ]}fI6 t@ P^Nu6z*e;W %$k0IK/52@w/7u}TrݴJwc lđaJ md-B!k8MT5vDf>g}Ti ߐEm] ֐qXa{ѹ!+ GzŽN锈 -՛JU{ZP<-ViZ1YZAf W|W(㉖i Pw =Q(b38ũf'bPWziӪ!Ùr ~(]$@8_[XA(#e>zy&~?ѡa 5h )Wt8Sn|1rLkԭFLRG]jyIe4'֗#7?+3ՐHmm(gT׽ bVoMW#`0^zL(?ɂZ.J-ZDyf|7k!5qCOxb$hլm4irk@Uiޔ z^vp`)6Fmd%N;1}RZډy|OD4fn[ [j`e?EYW0ʮ_7\B|ťE/Zkc6C{\:Lt=tJ_kվVj ߌG)y8]μn4p'>C$t#]E () LuM:J?/2G1~OLɌhUUya++ԫf[^^*vTzhz$ 6T --Wݘ|Z\Ȁa9j#]hF"ؖ*>:][lW@4$iCPUp5)KĮehǔֺ~(};=Dr5,Ĉ ^!?xtCjFAS;FZN@OQD-B\R ъ)uYi6xc<, :!Ճ&wͻTug AK8|"4G}F,å1[jY|'fm!I>Eu0Oƕ=m{~D!d >߬mHZrT1Хf 8ln$I7E7Z &$dcG#qyXMM\o`OzAr݈Fg8zVȋZVtk> SCѽ!c昽PcA `x+1z,v6ku6ڃ*ZJE!mCØZی#윹:t.:Ia6Z(h |:eTO\vMŭD,%O?v~W`Ϩ^T/vŷf>u)%ng@M 61+Zl/;;WMj@WհJ̱!hɣ~ce! FMQo `!#wnJNI߽|2%p"e:(-coD}c}a֯j= N3ו4ڥ[ jVbč`wLWmO]}R&8FI%5PLpw0ksΦw>vJ煞*2tݩ(gcaŝM٢pM%[#}hr6m DOɊeUzxHLMAjOBn [Gpށ?kaɀ@ḏs_X )ÿ[^VQ|&QڽSv9"(2u+s ?%8ѝ._A` n wNpoe?<*R@@WiyeB/AL+&p۫mn(˕ {NJ̍KIt]a&DK gQ`:xHƆ;#4[mz# 5_-wbu]j$q)3^=۷9_76I! MNv؁EqH!t 1 R 4DP/'@( cLfg=_߀2Lif,0@c(h>Xg*4+C*3R; 8(p@}pڨ:!mD In0x0,[;mLf2y wx5nxsL mKso7Y#_uҕζc=YG"fVȦ#ζ 5艧?R _8-w-i` :+BzUH"ŀxkɋ)ֽĝ$ {7ۋK fkCKo_V/A2*SUDb-" @`؂ 6QPFfVrWPqZ0ᡤ)v< {<%Bˊޢ簗Rڅ]$ԓ/[J)Cʹʏu$|ѻ=Ff׽i)V  L E$zZQƾ98Xh^$-e!I? 6VY{oPYn3.'+unP*'+P?'`j?.IݳBPt"ÂrV>ۖJla(zaJ-b4wnO D q3ᠯHAV{$}8or (a)t TW=T{:X#=&!!(nWmNgo}xUv[@_!bx'bWCH~ lHy?֦_ylJ$@9^N{a r(+#I:[bdR5):xQ|#l7 Շ)M'<'Cu83d)d](A|I{ܱT/EaT/cKOb#蚦]句^Є頫eu2ζٶ;UUskzei(E?XW^'VAedݼۤ(6Q%_򆟓HPԵ-̍ s)Y^٪`W=.QQ; ̧6u(O$ QnءM0&=pIQ1s",f{<3`8~ Y,tOSəQ/ӢbSx4C*`| sNr]R326p;rj"*kFCr84 Ypb[fwqY: }3cɲ \.>sF?$V,cp9 c? f_(v#Co'xa DSMkQʄ rc{]K68n/ Uɕb-D:V*{ž8q8Rlխ}쁵E_G zP :R_j]m|$VQ2JeN~ z 0 SjBACmWצ:KJ / @k#L|XP Sgu'WTἘ4s82 p^^\GS %mqT\?]]%XУ5/x:aeMA*2ct'R^^_Y9GK 4my8jl2ڮ\#G_a.]mglVc(=xqK@²Rf"VGr(~g^L5Pe\xzV;3 2?Fdf,4EXF/TG3\4. od-9X|EЈU,