web/lib/Zend/Serializer/Adapter/PythonPickle.php
author Raphael Velt <raph.velt@gmail.com>
Thu, 12 Apr 2012 15:51:57 +0200
changeset 579 4ac547e35fd2
parent 207 621fa6caec0c
child 807 877f952ae2bd
permissions -rw-r--r--
edito-reseaux-sociaux
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_Serializer
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    17
 * @subpackage Adapter
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    18
 * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
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: PythonPickle.php 21187 2010-02-24 01:22:01Z stas $
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
/** @see Zend_Serializer_Adapter_AdapterAbstract */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    24
require_once 'Zend/Serializer/Adapter/AdapterAbstract.php';
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
/**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    27
 * @link       http://www.python.org
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    28
 * @see        Phython3.1/Lib/pickle.py
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    29
 * @see        Phython3.1/Modules/_pickle.c
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    30
 * @link       http://pickle-js.googlecode.com
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    31
 * @category   Zend
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    32
 * @package    Zend_Serializer
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    33
 * @subpackage Adapter
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    34
 * @copyright  Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    35
 * @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
    36
 */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    37
class Zend_Serializer_Adapter_PythonPickle extends Zend_Serializer_Adapter_AdapterAbstract
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    38
{
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    39
    /* Pickle opcodes. See pickletools.py for extensive docs.  The listing
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    40
       here is in kind-of alphabetical order of 1-character pickle code.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    41
       pickletools groups them by purpose. */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    42
    const OP_MARK            = '(';     // push special markobject on stack
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    43
    const OP_STOP            = '.';     // every pickle ends with STOP
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    44
    const OP_POP             = '0';     // discard topmost stack item
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    45
    const OP_POP_MARK        = '1';     // discard stack top through topmost markobject
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    46
    const OP_DUP             = '2';     // duplicate top stack item
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    47
    const OP_FLOAT           = 'F';     // push float object; decimal string argument
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    48
    const OP_INT             = 'I';     // push integer or bool; decimal string argument
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    49
    const OP_BININT          = 'J';     // push four-byte signed int
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    50
    const OP_BININT1         = 'K';     // push 1-byte unsigned int
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    51
    const OP_LONG            = 'L';     // push long; decimal string argument
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    52
    const OP_BININT2         = 'M';     // push 2-byte unsigned int
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    53
    const OP_NONE            = 'N';     // push None
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    54
    const OP_PERSID          = 'P';     // push persistent object; id is taken from string arg
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    55
    const OP_BINPERSID       = 'Q';     //  "       "         "  ;  "  "   "     "  stack
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    56
    const OP_REDUCE          = 'R';     // apply callable to argtuple, both on stack
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    57
    const OP_STRING          = 'S';     // push string; NL-terminated string argument
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    58
    const OP_BINSTRING       = 'T';     // push string; counted binary string argument
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    59
    const OP_SHORT_BINSTRING = 'U';     //  "     "   ;    "      "       "      " < 256 bytes
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    60
    const OP_UNICODE         = 'V';     // push Unicode string; raw-unicode-escaped'd argument
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    61
    const OP_BINUNICODE      = 'X';     //   "     "       "  ; counted UTF-8 string argument
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    62
    const OP_APPEND          = 'a';     // append stack top to list below it
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    63
    const OP_BUILD           = 'b';     // call __setstate__ or __dict__.update()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    64
    const OP_GLOBAL          = 'c';     // push self.find_class(modname, name); 2 string args
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    65
    const OP_DICT            = 'd';     // build a dict from stack items
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    66
    const OP_EMPTY_DICT      = '}';     // push empty dict
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    67
    const OP_APPENDS         = 'e';     // extend list on stack by topmost stack slice
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    68
    const OP_GET             = 'g';     // push item from memo on stack; index is string arg
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    69
    const OP_BINGET          = 'h';     //   "    "    "    "   "   "  ;   "    " 1-byte arg
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    70
    const OP_INST            = 'i';     // build & push class instance
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    71
    const OP_LONG_BINGET     = 'j';     // push item from memo on stack; index is 4-byte arg
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    72
    const OP_LIST            = 'l';     // build list from topmost stack items
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    73
    const OP_EMPTY_LIST      = ']';     // push empty list
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    74
    const OP_OBJ             = 'o';     // build & push class instance
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    75
    const OP_PUT             = 'p';     // store stack top in memo; index is string arg
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    76
    const OP_BINPUT          = 'q';     //   "     "    "   "   " ;   "    " 1-byte arg
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    77
    const OP_LONG_BINPUT     = 'r';     //   "     "    "   "   " ;   "    " 4-byte arg
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    78
    const OP_SETITEM         = 's';     // add key+value pair to dict
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    79
    const OP_TUPLE           = 't';     // build tuple from topmost stack items
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    80
    const OP_EMPTY_TUPLE     = ')';     // push empty tuple
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    81
    const OP_SETITEMS        = 'u';     // modify dict by adding topmost key+value pairs
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    82
    const OP_BINFLOAT        = 'G';     // push float; arg is 8-byte float encoding
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    83
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    84
    /* Protocol 2 */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    85
    const OP_PROTO           = "\x80";  // identify pickle protocol
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    86
    const OP_NEWOBJ          = "\x81";  // build object by applying cls.__new__ to argtuple
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    87
    const OP_EXT1            = "\x82";  // push object from extension registry; 1-byte index
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    88
    const OP_EXT2            = "\x83";  // ditto, but 2-byte index
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    89
    const OP_EXT4            = "\x84";  // ditto, but 4-byte index
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    90
    const OP_TUPLE1          = "\x85";  // build 1-tuple from stack top
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    91
    const OP_TUPLE2          = "\x86";  // build 2-tuple from two topmost stack items
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    92
    const OP_TUPLE3          = "\x87";  // build 3-tuple from three topmost stack items
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    93
    const OP_NEWTRUE         = "\x88";  // push True
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    94
    const OP_NEWFALSE        = "\x89";  // push False
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    95
    const OP_LONG1           = "\x8a";  // push long from < 256 bytes
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    96
    const OP_LONG4           = "\x8b";  // push really big long
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
    /* Protocol 3 (Python 3.x) */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
    99
    const OP_BINBYTES        = 'B';     // push bytes; counted binary string argument
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   100
    const OP_SHORT_BINBYTES  = 'C';     //  "     "   ;    "      "       "      " < 256 bytes
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
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   103
     * @var bool Whether or not this is a PHP 6 binary
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   104
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   105
    protected static $_isPhp6 = null;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   106
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   107
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   108
     * @var bool Whether or not the system is little-endian
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   109
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   110
    protected static $_isLittleEndian = null;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   111
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   112
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   113
     * @var array Strings representing quotes
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   114
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   115
    protected static $_quoteString = array(
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
        "\x00" => '\\x00', "\x01" => '\\x01', "\x02" => '\\x02', "\x03" => '\\x03',
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   118
        "\x04" => '\\x04', "\x05" => '\\x05', "\x06" => '\\x06', "\x07" => '\\x07',
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   119
        "\x08" => '\\x08', "\x09" => '\\t',   "\x0a" => '\\n',   "\x0b" => '\\x0b',
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   120
        "\x0c" => '\\x0c', "\x0d" => '\\r',   "\x0e" => '\\x0e', "\x0f" => '\\x0f',
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   121
        "\x10" => '\\x10', "\x11" => '\\x11', "\x12" => '\\x12', "\x13" => '\\x13',
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   122
        "\x14" => '\\x14', "\x15" => '\\x15', "\x16" => '\\x16', "\x17" => '\\x17',
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   123
        "\x18" => '\\x18', "\x19" => '\\x19', "\x1a" => '\\x1a', "\x1b" => '\\x1b',
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   124
        "\x1c" => '\\x1c', "\x1d" => '\\x1d', "\x1e" => '\\x1e', "\x1f" => '\\x1f',
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   125
        "\xff" => '\\xff'
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   126
    );
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   127
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   128
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   129
     * @var array Default options
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   130
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   131
    protected $_options = array(
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   132
        'protocol'           => 0,
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   133
    );
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   134
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   135
    // process vars
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   136
    protected $_protocol           = 0;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   137
    protected $_binary             = false;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   138
    protected $_memo               = array();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   139
    protected $_pickle             = '';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   140
    protected $_pickleLen          = 0;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   141
    protected $_pos                = 0;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   142
    protected $_stack              = array();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   143
    protected $_marker             = null;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   144
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   145
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   146
     * Constructor
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   147
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   148
     * @link Zend_Serializer_Adapter_AdapterAbstract::__construct()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   149
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   150
    public function __construct($opts=array())
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   151
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   152
        parent::__construct($opts);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   153
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   154
        // init
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   155
        if (self::$_isLittleEndian === null) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   156
            self::$_isLittleEndian = (pack('l', 1) === "\x01\x00\x00\x00");
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   157
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   158
        if (self::$_isPhp6 === null) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   159
            self::$_isPhp6 = !version_compare(PHP_VERSION, '6.0.0', '<');
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   160
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   161
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   162
        $this->_marker = new stdClass();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   163
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   164
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   165
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   166
     * Set an option
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   167
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   168
     * @link   Zend_Serializer_Adapter_AdapterAbstract::setOption()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   169
     * @param  string $name
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   170
     * @param  mixed $value
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   171
     * @return Zend_Serializer_Adapter_PythonPickle
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   172
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   173
    public function setOption($name, $value)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   174
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   175
        switch ($name) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   176
            case 'protocol':
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   177
                $value = $this->_checkProtocolNumber($value);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   178
                break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   179
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   180
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   181
        return parent::setOption($name, $value);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   182
    }
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
     * Check and normalize pickle protocol number
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   186
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   187
     * @param  int $number
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   188
     * @return int
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   189
     * @throws Zend_Serializer_Exception
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   190
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   191
    protected function _checkProtocolNumber($number)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   192
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   193
        $int = (int) $number;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   194
        if ($int < 0 || $int > 3) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   195
            require_once 'Zend/Serializer/Exception.php';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   196
            throw new Zend_Serializer_Exception('Invalid or unknown protocol version "'.$number.'"');
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   197
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   198
        return $int;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   199
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   200
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   201
    /* serialize */
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
     * Serialize PHP to PythonPickle format
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   205
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   206
     * @param  mixed $value
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   207
     * @param  array $opts
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   208
     * @return string
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
    public function serialize($value, array $opts = array())
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
        $opts = $opts + $this->_options;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   213
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   214
        $this->_protocol = $this->_checkProtocolNumber($opts['protocol']);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   215
        $this->_binary   = $this->_protocol != 0;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   216
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   217
        // clear process vars before serializing
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   218
        $this->_memo   = array();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   219
        $this->_pickle = '';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   220
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   221
        // write
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   222
        if ($this->_protocol >= 2) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   223
            $this->_writeProto($this->_protocol);
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
        $this->_write($value);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   226
        $this->_writeStop();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   227
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   228
        // clear process vars after serializing
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   229
        $this->_memo = array();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   230
        $pickle = $this->_pickle;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   231
        $this->_pickle = '';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   232
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   233
        return $pickle;
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
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
     * Write a value
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
     * @param  mixed $value
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   240
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   241
     * @throws Zend_Serializer_Exception on invalid or unrecognized value type
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   242
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   243
    protected function _write($value)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   244
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   245
        if ($value === null) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   246
            $this->_writeNull();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   247
        } elseif ($value === true) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   248
            $this->_writeTrue();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   249
        } elseif ($value === false) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   250
            $this->_writeFalse();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   251
        } elseif (is_int($value)) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   252
            $this->_writeInt($value);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   253
        } elseif (is_float($value)) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   254
            $this->_writeFloat($value);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   255
        } elseif (is_string($value)) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   256
            // TODO: write unicode / binary
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   257
            $this->_writeString($value);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   258
        } elseif (is_array($value)) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   259
            if ($this->_isArrayAssoc($value)) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   260
                $this->_writeArrayDict($value);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   261
            } else {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   262
                $this->_writeArrayList($value);
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
        } elseif (is_object($value)) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   265
            $this->_writeObject($value);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   266
        } else {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   267
            require_once 'Zend/Serializer/Exception.php';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   268
            throw new Zend_Serializer_Exception(
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   269
                'PHP-Type "'.gettype($value).'" isn\'t serializable with '.get_class($this)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   270
            );
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   271
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   272
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   273
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
     * Write pickle protocol
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   276
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   277
     * @param  int $protocol
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   278
     * @return void
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
    protected function _writeProto($protocol)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   281
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   282
        $this->_pickle .= self::OP_PROTO . $protocol;
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
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   285
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   286
     * Write a get
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   287
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   288
     * @param  int $id Id of memo
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   289
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   290
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   291
    protected function _writeGet($id)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   292
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   293
        if ($this->_binary) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   294
            if ($id <= 0xff) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   295
                // BINGET + chr(i)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   296
                $this->_pickle .= self::OP_BINGET . chr($id);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   297
            } else {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   298
                // LONG_BINGET + pack("<i", i)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   299
                $idBin = pack('l', $id);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   300
                if (self::$_isLittleEndian === false) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   301
                    $idBin = strrev($bin);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   302
                }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   303
                $this->_pickle .= self::OP_LONG_BINGET . $idBin;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   304
            }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   305
        } else {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   306
            $this->_pickle .= self::OP_GET . $id . "\r\n";
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   307
        }
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
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   310
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   311
     * Write a put
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   312
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   313
     * @param  int $id Id of memo
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   314
     * @return void
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
    protected function _writePut($id)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   317
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   318
        if ($this->_binary) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   319
            if ($id <= 0xff) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   320
                // BINPUT + chr(i)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   321
                $this->_pickle .= self::OP_BINPUT . chr($id);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   322
            } else {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   323
                // LONG_BINPUT + pack("<i", i)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   324
                $idBin = pack('l', $id);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   325
                if (self::$_isLittleEndian === false) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   326
                    $idBin = strrev($bin);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   327
                }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   328
                $this->_pickle .= self::OP_LONG_BINPUT . $idBin;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   329
            }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   330
        } else {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   331
            $this->_pickle .= self::OP_PUT . $id . "\r\n";
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
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   335
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   336
     * Write a null as None
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
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   339
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   340
    protected function _writeNull()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   341
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   342
        $this->_pickle .= self::OP_NONE;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   343
    }
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
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   346
     * Write a boolean true
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
     * @return void
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
    protected function _writeTrue()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   351
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   352
        if ($this->_protocol >= 2) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   353
            $this->_pickle .= self::OP_NEWTRUE;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   354
        } else {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   355
            $this->_pickle .= self::OP_INT . "01\r\n";
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
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   360
     * Write a boolean false
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   361
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   362
     * @return void
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
    protected function _writeFalse()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   365
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   366
        if ($this->_protocol >= 2) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   367
            $this->_pickle .= self::OP_NEWFALSE;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   368
        } else {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   369
            $this->_pickle .= self::OP_INT . "00\r\n";
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   370
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   371
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   372
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   373
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   374
     * Write an integer value
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   375
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   376
     * @param  int $value
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   377
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   378
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   379
    protected function _writeInt($value)
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
        if ($this->_binary) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   382
            if ($value >= 0) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   383
                if ($value <= 0xff) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   384
                    // self.write(BININT1 + chr(obj))
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   385
                    $this->_pickle .= self::OP_BININT1 . chr($value);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   386
                } elseif ($value <= 0xffff) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   387
                    // self.write("%c%c%c" % (BININT2, obj&0xff, obj>>8))
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   388
                    $this->_pickle .= self::OP_BININT2 . pack('v', $value);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   389
                }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   390
                return;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   391
            }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   392
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   393
            // Next check for 4-byte signed ints:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   394
            $highBits = $value >> 31;  // note that Python shift sign-extends
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   395
            if ($highBits == 0 || $highBits == -1) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   396
                // All high bits are copies of bit 2**31, so the value
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   397
                // fits in a 4-byte signed int.
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   398
                // self.write(BININT + pack("<i", obj))
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   399
                $bin = pack('l', $value);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   400
                if (self::$_isLittleEndian === false) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   401
                    $bin = strrev($bin);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   402
                }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   403
                $this->_pickle .= self::OP_BININT . $bin;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   404
                return;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   405
            }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   406
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   407
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   408
        $this->_pickle .= self::OP_INT . $value . "\r\n";
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   409
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   410
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   411
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   412
     * Write a float value
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   413
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   414
     * @param  float $value
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   415
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   416
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   417
    protected function _writeFloat($value)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   418
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   419
        if ($this->_binary) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   420
            // self.write(BINFLOAT + pack('>d', obj))
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   421
            $bin = pack('d', $value);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   422
            if (self::$_isLittleEndian === true) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   423
                $bin = strrev($bin);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   424
            }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   425
            $this->_pickle .= self::OP_BINFLOAT . $bin;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   426
        } else {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   427
            $this->_pickle .= self::OP_FLOAT . $value . "\r\n";
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   428
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   429
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   430
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   431
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   432
     * Write a string value
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   433
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   434
     * @param  string $value
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   435
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   436
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   437
    protected function _writeString($value)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   438
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   439
        if ( ($id=$this->_searchMomo($value)) !== false ) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   440
            $this->_writeGet($id);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   441
            return;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   442
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   443
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   444
        if ($this->_binary) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   445
            $n = strlen($value);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   446
            if ($n <= 0xff) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   447
                // self.write(SHORT_BINSTRING + chr(n) + obj)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   448
                $this->_pickle .= self::OP_SHORT_BINSTRING . chr($n) . $value;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   449
            } else {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   450
                // self.write(BINSTRING + pack("<i", n) + obj)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   451
                $binLen = pack('l', $n);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   452
                if (self::$_isLittleEndian === false) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   453
                    $binLen = strrev($binLen);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   454
                }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   455
                $this->_pickle .= self::OP_BINSTRING . $binLen . $value;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   456
            }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   457
        } else {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   458
            $this->_pickle .= self::OP_STRING . $this->_quoteString($value) . "\r\n";
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   459
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   460
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   461
        $this->_momorize($value);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   462
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   463
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   464
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   465
     * Write an associative array value as dictionary
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   466
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   467
     * @param  array $value
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   468
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   469
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   470
    protected function _writeArrayDict(array $value)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   471
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   472
        if (($id=$this->_searchMomo($value)) !== false) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   473
            $this->_writeGet($id);;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   474
            return;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   475
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   476
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   477
        $this->_pickle .= self::OP_MARK . self::OP_DICT;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   478
        $this->_momorize($value);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   479
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   480
        foreach ($value as $k => $v) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   481
            $this->_pickle .= $this->_write($k)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   482
                            . $this->_write($v)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   483
                            . self::OP_SETITEM;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   484
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   485
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   486
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   487
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   488
     * Write a simple array value as list
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   489
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   490
     * @param  array $value
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   491
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   492
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   493
    protected function _writeArrayList(array $value)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   494
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   495
        if (($id = $this->_searchMomo($value)) !== false) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   496
            $this->_writeGet($id);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   497
            return;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   498
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   499
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   500
        $this->_pickle .= self::OP_MARK . self::OP_LIST;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   501
        $this->_momorize($value);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   502
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   503
        foreach ($value as $k => $v) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   504
            $this->_pickle .= $this->_write($v) . self::OP_APPEND;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   505
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   506
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   507
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   508
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   509
     * Write an object as an dictionary
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   510
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   511
     * @param  object $value
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   512
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   513
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   514
    protected function _writeObject($value)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   515
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   516
        // can't serialize php objects to python objects yet
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   517
        $this->_writeArrayDict(get_object_vars($value));
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   518
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   519
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   520
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   521
     * Write stop
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   522
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   523
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   524
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   525
    protected function _writeStop()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   526
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   527
        $this->_pickle .= self::OP_STOP;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   528
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   529
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   530
    /* serialize helper */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   531
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   532
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   533
     * Add a value to the memo and write the id
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   534
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   535
     * @param mixed $value
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   536
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   537
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   538
    protected function _momorize($value)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   539
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   540
        $id = count($this->_memo);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   541
        $this->_memo[$id] = $value;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   542
        $this->_writePut($id);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   543
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   544
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   545
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   546
     * Search a value in the meno and return  the id
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   547
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   548
     * @param  mixed $value
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   549
     * @return int|false The id or false
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   550
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   551
    protected function _searchMomo($value)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   552
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   553
        return array_search($value, $this->_memo, true);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   554
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   555
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   556
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   557
     * Is an array associative?
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   558
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   559
     * @param  array $value
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   560
     * @return boolean
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   561
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   562
    protected function _isArrayAssoc(array $value)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   563
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   564
        return array_diff_key($value, array_keys(array_keys($value)));
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   565
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   566
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   567
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   568
     * Quote/Escape a string
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   569
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   570
     * @param  string $str
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   571
     * @return string quoted string
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   572
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   573
    protected function _quoteString($str)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   574
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   575
        $quoteArr = self::$_quoteString;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   576
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   577
        if (($cntSingleQuote = substr_count($str, "'"))
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   578
            && ($cntDoubleQuote = substr_count($str, '"'))
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   579
            && ($cntSingleQuote < $cntDoubleQuote)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   580
        ) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   581
            $quoteArr['"'] = '\\"';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   582
            $enclosure     = '"';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   583
        } else {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   584
            $quoteArr["'"] = "\\'";
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   585
            $enclosure     = "'";
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   586
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   587
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   588
        return $enclosure . strtr($str, $quoteArr) . $enclosure;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   589
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   590
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   591
    /* unserialize */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   592
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   593
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   594
     * Unserialize from Python Pickle format to PHP
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   595
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   596
     * @param  string $pickle
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   597
     * @param  array $opts
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   598
     * @return mixed
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   599
     * @throws Zend_Serializer_Exception on invalid Pickle string
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   600
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   601
    public function unserialize($pickle, array $opts = array())
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   602
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   603
        // init process vars
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   604
        $this->_pos       = 0;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   605
        $this->_pickle    = $pickle;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   606
        $this->_pickleLen = strlen($this->_pickle);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   607
        $this->_memo      = array();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   608
        $this->_stack     = array();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   609
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   610
        // read pickle string
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   611
        while (($op=$this->_read(1)) !== self::OP_STOP) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   612
            $this->_load($op);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   613
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   614
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   615
        if (!count($this->_stack)) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   616
            require_once 'Zend/Serializer/Exception.php';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   617
            throw new Zend_Serializer_Exception('No data found');
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   618
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   619
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   620
        $ret = array_pop($this->_stack);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   621
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   622
        // clear process vars
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   623
        $this->_pos       = 0;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   624
        $this->_pickle    = '';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   625
        $this->_pickleLen = 0;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   626
        $this->_memo      = array();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   627
        $this->_stack     = array();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   628
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   629
        return $ret;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   630
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   631
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   632
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   633
     * Load a pickle opcode
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   634
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   635
     * @param  string $op
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   636
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   637
     * @throws Zend_Serializer_Exception on invalid opcode
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   638
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   639
    protected function _load($op)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   640
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   641
        switch ($op) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   642
            case self::OP_PUT:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   643
                $this->_loadPut();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   644
                break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   645
            case self::OP_BINPUT:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   646
                $this->_loadBinPut();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   647
                break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   648
            case self::OP_LONG_BINPUT:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   649
                $this->_loadLongBinPut();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   650
                break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   651
            case self::OP_GET:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   652
                $this->_loadGet();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   653
                break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   654
            case self::OP_BINGET:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   655
                $this->_loadBinGet();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   656
                break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   657
            case self::OP_LONG_BINGET:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   658
                $this->_loadLongBinGet();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   659
                break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   660
            case self::OP_NONE:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   661
                $this->_loadNone();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   662
                break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   663
            case self::OP_NEWTRUE:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   664
                $this->_loadNewTrue();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   665
                break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   666
            case self::OP_NEWFALSE:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   667
                $this->_loadNewFalse();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   668
                break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   669
            case self::OP_INT:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   670
                $this->_loadInt();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   671
                break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   672
            case self::OP_BININT:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   673
                $this->_loadBinInt();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   674
                break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   675
            case self::OP_BININT1:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   676
                $this->_loadBinInt1();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   677
                break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   678
            case self::OP_BININT2:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   679
                $this->_loadBinInt2();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   680
                break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   681
            case self::OP_LONG:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   682
                $this->_loadLong();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   683
                break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   684
            case self::OP_LONG1:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   685
                $this->_loadLong1();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   686
                break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   687
            case self::OP_LONG4:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   688
                $this->_loadLong4();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   689
                break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   690
            case self::OP_FLOAT:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   691
                $this->_loadFloat();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   692
                break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   693
            case self::OP_BINFLOAT:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   694
                $this->_loadBinFloat();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   695
                break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   696
            case self::OP_STRING:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   697
                $this->_loadString();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   698
                break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   699
            case self::OP_BINSTRING:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   700
                $this->_loadBinString();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   701
                break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   702
            case self::OP_SHORT_BINSTRING:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   703
                $this->_loadShortBinString();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   704
                break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   705
            case self::OP_BINBYTES:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   706
                $this->_loadBinBytes();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   707
                break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   708
            case self::OP_SHORT_BINBYTES:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   709
                $this->_loadShortBinBytes();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   710
                break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   711
            case self::OP_UNICODE:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   712
                $this->_loadUnicode();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   713
                break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   714
            case self::OP_BINUNICODE:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   715
                $this->_loadBinUnicode();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   716
                break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   717
            case self::OP_MARK:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   718
                $this->_loadMark();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   719
                break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   720
            case self::OP_LIST:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   721
                $this->_loadList();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   722
                break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   723
            case self::OP_EMPTY_LIST:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   724
                $this->_loadEmptyList();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   725
                break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   726
            case self::OP_APPEND:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   727
                $this->_loadAppend();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   728
                break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   729
            case self::OP_APPENDS:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   730
                $this->_loadAppends();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   731
                break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   732
            case self::OP_DICT:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   733
                $this->_loadDict();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   734
                break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   735
            case self::OP_EMPTY_DICT:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   736
                $this->_loadEmptyDict();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   737
                break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   738
            case self::OP_SETITEM:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   739
                $this->_loadSetItem();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   740
                break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   741
            case self::OP_SETITEMS:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   742
                $this->_loadSetItems();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   743
                break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   744
            case self::OP_TUPLE:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   745
                $this->_loadTuple();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   746
                break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   747
            case self::OP_TUPLE1:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   748
                $this->_loadTuple1();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   749
                break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   750
            case self::OP_TUPLE2:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   751
                $this->_loadTuple2();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   752
                break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   753
            case self::OP_TUPLE3:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   754
                $this->_loadTuple3();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   755
                break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   756
            case self::OP_PROTO:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   757
                $this->_loadProto();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   758
                break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   759
            default:
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   760
                require_once 'Zend/Serializer/Exception.php';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   761
                throw new Zend_Serializer_Exception('Invalid or unknown opcode "'.$op.'"');
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   762
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   763
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   764
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   765
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   766
     * Load a PUT opcode
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   767
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   768
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   769
     * @throws Zend_Serializer_Exception on missing stack
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   770
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   771
    protected function _loadPut()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   772
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   773
        $id = (int)$this->_readline();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   774
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   775
        $lastStack = count($this->_stack)-1;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   776
        if (!isset($this->_stack[$lastStack])) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   777
            require_once 'Zend/Serializer/Exception.php';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   778
            throw new Zend_Serializer_Exception('No stack exist');
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   779
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   780
        $this->_memo[$id] = & $this->_stack[$lastStack];
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   781
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   782
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   783
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   784
     * Load a binary PUT
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   785
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   786
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   787
     * @throws Zend_Serializer_Exception on missing stack
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   788
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   789
    protected function _loadBinPut()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   790
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   791
        $id = ord($this->_read(1));
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   792
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   793
        $lastStack = count($this->_stack)-1;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   794
        if (!isset($this->_stack[$lastStack])) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   795
            require_once 'Zend/Serializer/Exception.php';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   796
            throw new Zend_Serializer_Exception('No stack exist');
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   797
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   798
        $this->_memo[$id] = & $this->_stack[$lastStack];
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   799
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   800
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   801
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   802
     * Load a long binary PUT
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   803
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   804
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   805
     * @throws Zend_Serializer_Exception on missing stack
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   806
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   807
    protected function _loadLongBinPut()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   808
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   809
        $bin = $this->_read(4);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   810
        if (self::$_isLittleEndian === false) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   811
            $bin = strrev($bin);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   812
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   813
        list(, $id) = unpack('l', $bin);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   814
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   815
        $lastStack = count($this->_stack)-1;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   816
        if (!isset($this->_stack[$lastStack])) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   817
            require_once 'Zend/Serializer/Exception.php';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   818
            throw new Zend_Serializer_Exception('No stack exist');
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   819
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   820
        $this->_memo[$id] = & $this->_stack[$lastStack];
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   821
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   822
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   823
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   824
     * Load a GET operation
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   825
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   826
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   827
     * @throws Zend_Serializer_Exception on missing GET identifier
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   828
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   829
    protected function _loadGet()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   830
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   831
        $id = (int)$this->_readline();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   832
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   833
        if (!array_key_exists($id, $this->_memo)) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   834
            require_once 'Zend/Serializer/Exception.php';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   835
            throw new Zend_Serializer_Exception('Get id "' . $id . '" not found in momo');
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   836
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   837
        $this->_stack[] = & $this->_memo[$id];
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   838
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   839
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   840
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   841
     * Load a binary GET operation
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   842
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   843
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   844
     * @throws Zend_Serializer_Exception on missing GET identifier
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   845
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   846
    protected function _loadBinGet()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   847
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   848
        $id = ord($this->_read(1));
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   849
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   850
        if (!array_key_exists($id, $this->_memo)) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   851
            require_once 'Zend/Serializer/Exception.php';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   852
            throw new Zend_Serializer_Exception('Get id "' . $id . '" not found in momo');
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   853
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   854
        $this->_stack[] = & $this->_memo[$id];
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   855
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   856
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   857
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   858
     * Load a long binary GET operation
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   859
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   860
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   861
     * @throws Zend_Serializer_Exception on missing GET identifier
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   862
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   863
    protected function _loadLongBinGet()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   864
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   865
        $bin = $this->_read(4);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   866
        if (self::$_isLittleEndian === false) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   867
            $bin = strrev($bin);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   868
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   869
        list(, $id) = unpack('l', $bin);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   870
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   871
        if (!array_key_exists($id, $this->_memo)) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   872
            require_once 'Zend/Serializer/Exception.php';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   873
            throw new Zend_Serializer_Exception('Get id "' . $id . '" not found in momo');
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   874
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   875
        $this->_stack[] = & $this->_memo[$id];
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   876
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   877
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   878
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   879
     * Load a NONE operator
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   880
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   881
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   882
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   883
    protected function _loadNone()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   884
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   885
        $this->_stack[] = null;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   886
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   887
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   888
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   889
     * Load a boolean TRUE operator
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   890
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   891
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   892
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   893
    protected function _loadNewTrue()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   894
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   895
        $this->_stack[] = true;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   896
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   897
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   898
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   899
     * Load a boolean FALSE operator
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   900
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   901
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   902
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   903
    protected function _loadNewFalse()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   904
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   905
        $this->_stack[] = false;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   906
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   907
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   908
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   909
     * Load an integer operator
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   910
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   911
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   912
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   913
    protected function _loadInt()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   914
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   915
        $line = $this->_readline();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   916
        if ($line === '01') {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   917
            $this->_stack[] = true;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   918
        } elseif ($line === '00') {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   919
            $this->_stack[] = false;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   920
        } else {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   921
            $this->_stack[] = (int)$line;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   922
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   923
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   924
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   925
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   926
     * Load a binary integer operator
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   927
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   928
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   929
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   930
    protected function _loadBinInt()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   931
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   932
        $bin = $this->_read(4);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   933
        if (self::$_isLittleEndian === false) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   934
            $bin = strrev($bin);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   935
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   936
        list(, $int)    = unpack('l', $bin);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   937
        $this->_stack[] = $int;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   938
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   939
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   940
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   941
     * Load the first byte of a binary integer
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   942
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   943
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   944
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   945
    protected function _loadBinInt1()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   946
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   947
        $this->_stack[] = ord($this->_read(1));
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   948
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   949
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   950
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   951
     * Load the second byte of a binary integer
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   952
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   953
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   954
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   955
    protected function _loadBinInt2()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   956
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   957
        $bin = $this->_read(2);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   958
        list(, $int)    = unpack('v', $bin);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   959
        $this->_stack[] = $int;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   960
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   961
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   962
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   963
     * Load a long (float) operator
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   964
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   965
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   966
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   967
    protected function _loadLong()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   968
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   969
        $data = rtrim($this->_readline(), 'L');
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   970
        if ($data === '') {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   971
            $this->_stack[] = 0;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   972
        } else {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   973
            $this->_stack[] = $data;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   974
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   975
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   976
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   977
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   978
     * Load a one byte long integer
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   979
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   980
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   981
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   982
    protected function _loadLong1()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   983
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   984
        $n    = ord($this->_read(1));
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   985
        $data = $this->_read($n);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   986
        $this->_stack[] = $this->_decodeBinLong($data);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   987
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   988
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   989
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   990
     * Load a 4 byte long integer
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   991
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   992
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   993
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   994
    protected function _loadLong4()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   995
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   996
        $nBin = $this->_read(4);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   997
        if (self::$_isLittleEndian === false) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   998
            $nBin = strrev($$nBin);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
   999
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1000
        list(, $n) = unpack('l', $nBin);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1001
        $data = $this->_read($n);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1002
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1003
        $this->_stack[] = $this->_decodeBinLong($data);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1004
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1005
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1006
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1007
     * Load a float value
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1008
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1009
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1010
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1011
    protected function _loadFloat()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1012
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1013
        $float = (float)$this->_readline();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1014
        $this->_stack[] = $float;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1015
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1016
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1017
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1018
     * Load a binary float value
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1019
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1020
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1021
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1022
    protected function _loadBinFloat()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1023
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1024
        $bin = $this->_read(8);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1025
        if (self::$_isLittleEndian === true) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1026
            $bin = strrev($bin);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1027
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1028
        list(, $float)  = unpack('d', $bin);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1029
        $this->_stack[] = $float;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1030
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1031
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1032
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1033
     * Load a string
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1034
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1035
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1036
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1037
    protected function _loadString()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1038
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1039
        $this->_stack[] = $this->_unquoteString((string)$this->_readline());
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1040
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1041
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1042
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1043
     * Load a binary string
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1044
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1045
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1046
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1047
    protected function _loadBinString()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1048
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1049
        $bin = $this->_read(4);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1050
        if (!self::$_isLittleEndian) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1051
            $bin = strrev($bin);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1052
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1053
        list(, $len)    = unpack('l', $bin);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1054
        $this->_stack[] = (string)$this->_read($len);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1055
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1056
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1057
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1058
     * Load a short binary string
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1059
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1060
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1061
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1062
    protected function _loadShortBinString()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1063
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1064
        $len            = ord($this->_read(1));
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1065
        $this->_stack[] = (string)$this->_read($len);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1066
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1067
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1068
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1069
     * Load arbitrary binary bytes
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1070
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1071
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1072
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1073
    protected function _loadBinBytes()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1074
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1075
        // read byte length
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1076
        $nBin = $this->_read(4);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1077
        if (self::$_isLittleEndian === false) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1078
            $nBin = strrev($$nBin);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1079
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1080
        list(, $n)      = unpack('l', $nBin);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1081
        $this->_stack[] = $this->_read($n);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1082
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1083
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1084
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1085
     * Load a single binary byte
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1086
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1087
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1088
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1089
    protected function _loadShortBinBytes()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1090
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1091
        $n              = ord($this->_read(1));
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1092
        $this->_stack[] = $this->_read($n);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1093
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1094
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1095
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1096
     * Load a unicode string
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1097
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1098
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1099
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1100
    protected function _loadUnicode()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1101
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1102
        $data    = $this->_readline();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1103
        $pattern = '/\\\\u([a-fA-F0-9]{4})/u'; // \uXXXX
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1104
        $data    = preg_replace_callback($pattern, array($this, '_convertMatchingUnicodeSequence2Utf8'), $data);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1105
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1106
        if (self::$_isPhp6) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1107
            $data = unicode_decode($data, 'UTF-8');
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1108
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1109
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1110
        $this->_stack[] = $data;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1111
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1112
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1113
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1114
     * Convert a unicode sequence to UTF-8
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1115
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1116
     * @param  array $match
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1117
     * @return string
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1118
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1119
    protected function _convertMatchingUnicodeSequence2Utf8(array $match)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1120
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1121
        return $this->_hex2Utf8($match[1]);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1122
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1123
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1124
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1125
     * Convert a hex string to a UTF-8 string
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1126
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1127
     * @param  string $sequence
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1128
     * @return string
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1129
     * @throws Zend_Serializer_Exception on unmatched unicode sequence
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1130
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1131
    protected function _hex2Utf8($hex)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1132
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1133
        $uniCode = hexdec($hex);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1134
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1135
        if ($uniCode < 0x80) { // 1Byte
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1136
            $utf8Char = chr($uniCode);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1137
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1138
        } elseif ($uniCode < 0x800) { // 2Byte
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1139
            $utf8Char = chr(0xC0 | $uniCode >> 6)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1140
                      . chr(0x80 | $uniCode & 0x3F);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1141
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1142
        } elseif ($uniCode < 0x10000) { // 3Byte
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1143
            $utf8Char = chr(0xE0 | $uniCode >> 12)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1144
                      . chr(0x80 | $uniCode >> 6 & 0x3F)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1145
                      . chr(0x80 | $uniCode & 0x3F);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1146
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1147
        } elseif ($uniCode < 0x110000) { // 4Byte
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1148
            $utf8Char  = chr(0xF0 | $uniCode >> 18)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1149
                       . chr(0x80 | $uniCode >> 12 & 0x3F)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1150
                       . chr(0x80 | $uniCode >> 6 & 0x3F)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1151
                       . chr(0x80 | $uniCode & 0x3F);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1152
        } else {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1153
            require_once 'Zend/Serializer/Exception.php';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1154
            throw new Zend_Serializer_Exception('Unsupported unicode character found "' . dechex($uniCode) . '"');
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1155
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1156
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1157
        return $utf8Char;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1158
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1159
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1160
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1161
     * Load binary unicode sequence
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1162
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1163
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1164
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1165
    protected function _loadBinUnicode()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1166
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1167
        // read byte length
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1168
        $n = $this->_read(4);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1169
        if (self::$_isLittleEndian === false) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1170
            $n = strrev($n);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1171
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1172
        list(, $n) = unpack('l', $n);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1173
        $data      = $this->_read($n);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1174
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1175
        if (self::$_isPhp6) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1176
            $data = unicode_decode($data, 'UTF-8');
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1177
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1178
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1179
        $this->_stack[] = $data;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1180
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1181
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1182
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1183
     * Load a marker sequence
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1184
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1185
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1186
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1187
    protected function _loadMark()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1188
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1189
        $this->_stack[] = $this->_marker;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1190
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1191
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1192
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1193
     * Load an array (list)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1194
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1195
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1196
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1197
    protected function _loadList()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1198
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1199
        $k = $this->_lastMarker();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1200
        $this->_stack[$k] = array();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1201
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1202
        // remove all elements after marker
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1203
        $max = count($this->_stack);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1204
        for ($i = $k+1, $max; $i < $max; $i++) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1205
            unset($this->_stack[$i]);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1206
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1207
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1208
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1209
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1210
     * Load an append (to list) sequence
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1211
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1212
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1213
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1214
    protected function _loadAppend()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1215
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1216
        $value  =  array_pop($this->_stack);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1217
        $list   =& $this->_stack[count($this->_stack)-1];
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1218
        $list[] =  $value;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1219
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1220
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1221
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1222
     * Load an empty list sequence
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1223
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1224
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1225
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1226
    protected function _loadEmptyList()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1227
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1228
        $this->_stack[] = array();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1229
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1230
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1231
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1232
     * Load multiple append (to list) sequences at once
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1233
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1234
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1235
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1236
    protected function _loadAppends()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1237
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1238
        $k    =  $this->_lastMarker();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1239
        $list =& $this->_stack[$k - 1];
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1240
        $max  =  count($this->_stack);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1241
        for ($i = $k + 1; $i < $max; $i++) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1242
            $list[] = $this->_stack[$i];
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1243
            unset($this->_stack[$i]);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1244
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1245
        unset($this->_stack[$k]);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1246
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1247
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1248
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1249
     * Load an associative array (Python dictionary)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1250
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1251
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1252
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1253
    protected function _loadDict()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1254
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1255
        $k = $this->_lastMarker();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1256
        $this->_stack[$k] = array();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1257
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1258
        // remove all elements after marker
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1259
        $max = count($this->_stack);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1260
        for($i = $k + 1; $i < $max; $i++) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1261
            unset($this->_stack[$i]);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1262
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1263
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1264
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1265
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1266
     * Load an item from a set
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1267
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1268
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1269
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1270
    protected function _loadSetItem()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1271
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1272
        $value =  array_pop($this->_stack);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1273
        $key   =  array_pop($this->_stack);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1274
        $dict  =& $this->_stack[count($this->_stack) - 1];
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1275
        $dict[$key] = $value;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1276
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1277
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1278
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1279
     * Load an empty dictionary
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1280
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1281
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1282
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1283
    protected function _loadEmptyDict()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1284
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1285
        $this->_stack[] = array();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1286
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1287
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1288
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1289
     * Load set items
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1290
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1291
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1292
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1293
    protected function _loadSetItems()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1294
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1295
        $k    =  $this->_lastMarker();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1296
        $dict =& $this->_stack[$k - 1];
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1297
        $max  =  count($this->_stack);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1298
        for ($i = $k + 1; $i < $max; $i += 2) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1299
            $key        = $this->_stack[$i];
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1300
            $value      = $this->_stack[$i + 1];
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1301
            $dict[$key] = $value;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1302
            unset($this->_stack[$i], $this->_stack[$i+1]);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1303
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1304
        unset($this->_stack[$k]);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1305
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1306
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1307
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1308
     * Load a tuple
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1309
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1310
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1311
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1312
    protected function _loadTuple()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1313
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1314
        $k                =  $this->_lastMarker();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1315
        $this->_stack[$k] =  array();
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1316
        $tuple            =& $this->_stack[$k];
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1317
        $max              =  count($this->_stack);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1318
        for($i = $k + 1; $i < $max; $i++) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1319
            $tuple[] = $this->_stack[$i];
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1320
            unset($this->_stack[$i]);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1321
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1322
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1323
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1324
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1325
     * Load single item tuple
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1326
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1327
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1328
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1329
    protected function _loadTuple1()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1330
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1331
        $value1 = array_pop($this->_stack);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1332
        $this->_stack[] = array($value1);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1333
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1334
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1335
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1336
     * Load two item tuple
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1337
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1338
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1339
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1340
    protected function _loadTuple2()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1341
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1342
        $value2 = array_pop($this->_stack);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1343
        $value1 = array_pop($this->_stack);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1344
        $this->_stack[] = array($value1, $value2);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1345
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1346
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1347
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1348
     * Load three item tuple
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1349
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1350
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1351
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1352
    protected function _loadTuple3() {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1353
        $value3 = array_pop($this->_stack);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1354
        $value2 = array_pop($this->_stack);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1355
        $value1 = array_pop($this->_stack);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1356
        $this->_stack[] = array($value1, $value2, $value3);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1357
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1358
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1359
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1360
     * Load a proto value
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1361
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1362
     * @return void
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1363
     * @throws Zend_Serializer_Exception if Pickle version does not support this feature
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1364
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1365
    protected function _loadProto()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1366
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1367
        $proto = ord($this->_read(1));
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1368
        if ($proto < 2 || $proto > 3) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1369
            require_once 'Zend/Serializer/Exception.php';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1370
            throw new Zend_Serializer_Exception('Invalid protocol version detected');
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1371
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1372
        $this->_protocol = $proto;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1373
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1374
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1375
    /* unserialize helper */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1376
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1377
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1378
     * Read a segment of the pickle
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1379
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1380
     * @param  mixed $len
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1381
     * @return string
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1382
     * @throws Zend_Serializer_Exception if position matches end of data
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1383
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1384
    protected function _read($len)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1385
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1386
        if (($this->_pos + $len) > $this->_pickleLen) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1387
            require_once 'Zend/Serializer/Exception.php';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1388
            throw new Zend_Serializer_Exception('End of data');
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1389
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1390
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1391
        $this->_pos+= $len;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1392
        return substr($this->_pickle, ($this->_pos - $len), $len);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1393
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1394
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1395
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1396
     * Read a line of the pickle at once
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1397
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1398
     * @return string
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1399
     * @throws Zend_Serializer_Exception if no EOL character found
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1400
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1401
    protected function _readline()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1402
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1403
        $eolLen = 2;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1404
        $eolPos = strpos($this->_pickle, "\r\n", $this->_pos);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1405
        if ($eolPos === false) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1406
            $eolPos = strpos($this->_pickle, "\n", $this->_pos);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1407
            $eolLen = 1;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1408
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1409
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1410
        if ($eolPos === false) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1411
            require_once 'Zend/Serializer/Exception.php';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1412
            throw new Zend_Serializer_Exception('No new line found');
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1413
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1414
        $ret        = substr($this->_pickle, $this->_pos, $eolPos-$this->_pos);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1415
        $this->_pos = $eolPos + $eolLen;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1416
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1417
        return $ret;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1418
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1419
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1420
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1421
     * Unquote/Unescape a quoted string
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1422
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1423
     * @param  string $str quoted string
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1424
     * @return string unquoted string
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1425
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1426
    protected function _unquoteString($str)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1427
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1428
        $quoteArr = array_flip(self::$_quoteString);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1429
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1430
        if ($str[0] == '"') {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1431
            $quoteArr['\\"'] = '"';
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1432
        } else {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1433
            $quoteArr["\\'"] = "'";
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1434
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1435
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1436
        return strtr(substr(trim($str), 1, -1), $quoteArr);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1437
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1438
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1439
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1440
     * Return last marker position in stack
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1441
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1442
     * @return int
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1443
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1444
    protected function _lastMarker()
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1445
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1446
        for ($k = count($this->_stack)-1; $k >= 0; $k -= 1) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1447
            if ($this->_stack[$k] === $this->_marker) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1448
                break;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1449
            }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1450
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1451
        return $k;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1452
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1453
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1454
    /**
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1455
     * Decode a binary long sequence
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1456
     *
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1457
     * @param  string $data
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1458
     * @return int|float|string
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1459
     */
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1460
    protected function _decodeBinLong($data)
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1461
    {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1462
        $nbytes = strlen($data);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1463
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1464
        if ($nbytes == 0) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1465
            return 0;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1466
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1467
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1468
        $long = 0;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1469
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1470
        if ($nbytes > 7) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1471
            if (!extension_loaded('bcmath')) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1472
                return INF;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1473
            }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1474
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1475
            for ($i=0; $i<$nbytes; $i++) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1476
                $long = bcadd($long, bcmul(ord($data[$i]), bcpow(256, $i, 0)));
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1477
            }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1478
            if (0x80 <= ord($data[$nbytes-1])) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1479
                $long = bcsub($long, bcpow(2, $nbytes * 8));
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1480
            }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1481
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1482
        } else {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1483
            for ($i=0; $i<$nbytes; $i++) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1484
                $long+= ord($data[$i]) * pow(256, $i);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1485
            }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1486
            if (0x80 <= ord($data[$nbytes-1])) {
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1487
                $long-= pow(2, $nbytes * 8);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1488
                // $long-= 1 << ($nbytes * 8);
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1489
            }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1490
        }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1491
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1492
        return $long;
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1493
    }
4eba9c11703f first import
Yves-Marie Haussonne <1218002+ymph@users.noreply.github.com>
parents:
diff changeset
  1494
}
fJ)=]u%9Og'޻NGJK:n](°&B}8*1)nftxzpxc0Us[oz{of[<:kF3lCTXC$?,hdVHi-.$͔D#rw77UoRNv#&fc)JhBK.JNwϟ:9sc)ʦ=dsM1Ւe,# m rzѡ$| Il[V[}_I4Y׹R=Ӌ/![˫lo12[ &'0S]=;͘?H3bLZN"P H$0Ի/}έR`@30m@H ` h: @lvԴn](m;7%˚iE]}\dw{Ox|}JC< JtMϋ;@/#QYogǴyI(fTѱ$ evl7Tl*l7L5Q0igP Skn4o|-ZP{COi_wtfB^y(J@ݸlj33B˳ww[آ@LbnlG}VBv9״U, *ִӯ4h/, [4\ ֪դ҅{[DR2"Q1(47s))JD.$.t]|E$|^ްU)oO]m5}+ftk)P!U,AMYLm([k@hz>}ԽYo{: m>F~ t.Ѭ*dV̊.<ӪC̺ remSEWEE*Xbۢn[G9FUpzȦ**=OJJUDmL)Xbb]6c vcNU '+{^U6\= 9BJ9P CyM gG.g/zSGGW&]Hʥ`Ħ*c UEbhE"QRN3ORju`9=͸6ycGХR}=*lR{=-tiE*B+rrh\;*f+JҒ;1\8dp9*JU:4rwuhꜪ6pڦ+ey·F:'{-a«La4TЯV*wO4]m]wg{:'0V6`iZW+&SJJrڱ<6p*VخTbJtlƔI4n4T)UIUgM¢+PN1U1IXMژ*6+IR"ܨӹN[M4JSJQa+L:6mUpvV$ڪтSJtJ,UaEcM iRѣN 1HQU%*\WG(JJK*WIRRyYbYl F!ㅂqXp.fTܸaTcs@s$AJ=,1J1z(4MԭWq# i)Ji_10TmhfbJۄZ6vc¼];**qqmM1Qf{TMЮ1i׭2K$IhRU#Lz_Uyws9wWFR+֨z#E]:;f4Vp0N *EaJJE)ޒ{]G [FTS:JUa'i!Ќ#64J6y$Ӄb0p[mGUN]cƘ[ i"ʵm>ʽAجJ+UW r6?BV\< >z>gNp>Fح}bM]ܦ< cnِG.G=&f-jJ>=.mRJ|b8S*SyɠJ(aAHȆZ9G2XCQdPR!&V+Lb=M1|$֭3*e*kdQPdAaPN""uIQPZj؈H%$REe$DDDE"Ȣ,Zd[b""""""""&[-{=vII͑HDDM)""DDDRIdDDDDE$DDDkb̴RmDDDDQDDDDDRE\'nWeȤ;uȤ""vkJ*ڶHHDDDDDDRDZELH,RRE$Ȉ2""""""JHH""""))"*R""""""H2")"+)i%$DDEJDDDDDDDRDE$DE$DDDDRRDRDDQUȋJDYITE֛ZZdDE%JDDDDDDEU+e$DER-JjjU*QjR""2""""""""""""""̈("",DDDYQ""(DDEIfEE$EDEDT)DQDDYE$EDQZZmmKZ:?t}}0]ut~W յimlIE$IfDE$DDDDE[6ZdRREDDDDDDDDDDE$ͬuȈTOV>&,DQElHDDDDDDDDDDDDDDDDDDE.tRE$DRDm4JHHHHS"""""""")""""$HHḦ)""""""v)fRE%$EeJDRZ&WJJH2̈HH2""")"""̈#Z[nDDEnUTjVEkDDDE$E$E$DDDDDDDTEJTDDDDDDDRDDRRDDDE$DDVe)IYeJDDDDRDDDE$RE$DDDDDE$DDDDDDDRDE$DDDDDDDDRRRRDDRDE!!!!H ~'+WGا| ""%,fȈ2"""'MoͿF^DDDEb""""""""""""""""""""",ȤHHHHHHJHHT"")""""")""""""")"""""""-4HHl""*""R̤""""""""""""""(-DDE*ԈTDDDDDDDRDDDDDL_{^""|}ߛvf7"""""""'w؈l""""""""")""""))"")"""""""""""""""""")""""""̈""""""",ȈHHHH2""""""""""""""""")"""")"""""ֱH""""""#IIIIjDMYdJJH-4JHHٶYDY)iDDDDDDE$E%%fDRYTRIYdEJDDDDDDRDE/uȈDDNͧ/Gt<]:F ( OSɶ6lA7i!7jxh}0S0$dBD~OX{_#l>^Ks'C&lIZt4MR$±¶ڿ9X)I+1E+o3ųgUʜH@,+z%%QeTI֯ZWWlD$? S<;&.UwpӗgA9`܍<4lWupi6y C^,thbvxjQ:*)J 9<f>YdE%$DEIRfDEiDDTDDDDDDDDDDDDDDDKWm UJOIM`%!gW'O昃DM"  8].ېWc1V";T~o} PÔq:8X(OIﻮ#Bywu]wur2egJ~x"fOҪsJ if&ظAk)-CeU/ҟT)lj@I%2#)[⺖ ݞTN`y\HAFMك 6dB4 ܜci?Ad$=M`?(nQ 0`Q^Mg8ؼ\-m>T*►9MNnm1++!T9c;2<^.ó=nCiH/GwWQC ւcc&s{@D5TB =>"c~|xnu?[/jݴ> }.>G@1a!0Sتb6@f9lEOa:Ѣ1!Hu=Ca;9v!0Ai0?H[`?z< 2rJ;ޔzzzzmׅ d?޶($fH!DΎ|>WG1g! imٷgPh}M1wvi z'N*ӖGx?Hi0i?u1FV 15~Lcy1(xP0h@`Gp`pS:4263 H۰h04*M:!iÀrl9</sv_MC.GaN]J/{,fYe7fگ+/^Gh`&~ǩѢppF>d0vVe{\;=+Dp1 ǃ!C| i{K#&bty<ǭ=ocpC->g`x1A֛:h|8;w NwBap6)?xX0r4D/{i0# 44i1h-BP:H<gNxB*IɳN|!"ҝw?z4lzXy[M-3Gzyl1`=vvto ͍6D[C]Pr0u`8c1X-4<@-ACc4ccNDՊL{? uT"jhG#jubhB`rF0~ @!"x1 LSwB=C/ѣWG/3cBpz)#`MᲙ!`PceXGth`l!JCW6z(Hvt`r!˥$-A8,Rʬr_ ~1qJd! uWJ\؁2OZN(RkW[־3[fuW[^H fVf;6fyCuSacOHۨ=>Wg0; w4coz;:9xlAQ"wkNڼWhJ<tm LB1ӆrӫЦ:!#ݡe1 1cclmc@IΊ[$6r)naPbhr8B x;?!/Sux> 4|M!]jujm/Pfw{͈D06Ӗ8lhl>'/y zlxާoZN"[ilwvJZsNvCc 2r>я 1I[6[u] GvPiviãRFЧ#=,r9Jx:v(nO :͘Ea̖6r {[M95rLuGWd;Ft=<1p(-x%m.ai8ަ s,v2Iwy9z1){:8yeHAx=G;rrpID;v]<xv=`O{ ;NaCVyPp1a0466BE8488cu{!x]~W#wuh;h0b=цSr0S1򽭇۝|rMa,R֞R0[!{Ct c9=P,cM!= 4[⯵1x4ӣnCcC#q8ui<:c; cSR ǩ::14pe?#sY5K ~ѫ.GAø˘jY t<+i5nO DfyAh4^s[3<>66]| w{Njon!5G|ήx80P|cˁ ww|nc44{{^L'L=ϐ$G8rBzohƂ /_;M{[ZzG=v|Ó&Zi6p-qc4a½ :O'| W|4q;oyaʹBBk:tOYm5q2r${ (# v`1' S242 zla;K=GV>sF6=v{_Hy:0|fM:UqZ{I<\>aB9{:8hy9:8 ǭ8MMrc=$v֞\<N[2ե/7uCp7uta؅Y>f{ZpF>d<ڤ`{w CgPy!Gfwo9!>DM ( <@j 0sh5e}99l6ywۀu0Ѱ=N rw} !'#:שƚzȔTNLWvu:9i8Jty:<_רB<27P5Ay LotCkSLbvhxp>V-6I9;ъ#HAӁcNϤ@Lhba}N]Vq|c[y[p-=ocN,rQ>TwQ1:&'&yJUUYfuc0/* |[,tz#z0pže0hpšM+C#=t#Oݰ2<ݍ8kay C ѠSE`p0r=Wgb^pCJӀiSd: Nʹ cgraА,5rc 0h0r0xvlm1C WTm :c447p4p$r=84ZmYt;ՖMc108==J?;Ԕ8mC(F`O$#Cg:4#$d8uM<o[kjRvK+52s9LV g4u"!!!SjDI@umc˸D%S{W1o 3w8x7uXz=Xm~(ٳ e\gc|hquvraáя#g&x6+p`y$<];^Fj僔L8ADbpb`^p8j6!! 8݇WCOlh YviP Z;CTm>#vw{ !Ё0:_dtz:V<߉41PkqCQُ;#|C{f<&!p{ܘbyra8 "MHdf]\'[@ x;+SǼu;Pԝa@|P'evu2C(z); =CvM ǁ 8¾GG^O{L{RUX&9[:LNfNC<)b9B;1hr7Oyw.3a;n8< 8qtx4RaշtU NXbLrٻmZa][hm_Ku02;:>@ػ.0B;FiGqg.O'd7Ww)F unwiѦ1bWjhӇ:`< ;+Ah4ƚ`8F6Dp1hqvm ^V=##OFrƊBYD1=T(\PAE`@N<ËzKcc׃HX:=N1ut H{r{UzCû - c㓉$dqԷ&'S! = 3CԜM9 H&߭G&ATWX4'j 8z|nSr4G8MZM'[;nëۀwx3 ! ӆ#co9iurc Cci:w"pwuOCne3Wp+O7Ob.M]NG3V+w:'c)m K8y!2PaѦOv```G/a)ѥ`Ɲc5Hƈ[tpTB$|w#(`mqs20@@w ";b-IAW:&XmNSaS aD)"I*F1dEQ*TҢUiR1UB+IhiQ1HSo;SJ* RNbTTPUTQҴJWi*DMwKs·sЗ0` mM;V)-TRGmV;V7hغjS,;VG6ikW«=٦ޕrVf/\/lӍk#&-CBxmD"%EJL{TbjHpDI&jĭs4:ڐł'vv8s93Qbed{JF,Te9+``y9ˣ?u}1#,cF}*C%4QRUS- owT@hBsRq9+j=v.̲C5`Q5TYTT-Z\gP}$ k$ .jV)"""""y[^,H?N\EZdQO2 jXK'y+ලHx!^=Fm0,R-HRQ#-|Mc\Y 4J}gu8p1>%UWԾƸc\oͭu㖧L8VU1XzRեU$7t};)%ܹ1WÎ#w5wEh9-+4SVNAhIcG0u^ɖ 5]k0UY:<^c^eUܿ±<pmFW,pT7V;D{@5OxҥD<ܥx=rQN<Á&T p0f"vWԭ/I˙li+rv6lW̽f{O|O7"O>T@ 0d_e G>{5#&(tV&5XKMj%>M?|KjY^1Jڱ']RQnIQ ~Ym߲kJIpr8e&$ؔfK U,dSM-ˢDZ-AvoA$ ~6Xbpl_owKz1F$/Q%H󺚍BUHp+B~צuK*{gm+H(Slu䌲vg)iiHA hx9&l(ӧ߶I>zܙWH6O 9b`r:-lhQګx(qvvT4bD {6D#Yc'@ =!∽%A U)!#{<2gRgțI\WCvEwyJ91ڟ>:_zV/ _YE\&{9?ן䁉]$æm>J,f ' i v]7v9.9d;o4&[KNO74$7cω#vYm~r &e<󄅜 'PNL@}Z'j˱q^__~Px 6APYU >Eiʕos_}JѾ cT؂TQR?\2iLg$ga3\;C QIlTi*Vl4pԡqLa$G1fވ}򓃡ƅ ZQIh2IM~X1)+ "a. r/$ qIGˀT G1S0d.d*=pAzwΚ!l/_2aϜ8$*!3f+!=NPRljʰ9 ^&UE?tKBOثO\ZV.!3 :`{fjf=>QB>ŷD7 ̄ɍDײ2pzI&zӿckv{UavNpqUNB[U@re20D`]GeQrdj\s`)1DRHhNrՐDGJ0GW'w,w^B1.[J { 0d$.93[\8ĔLˊɉ&,\"|wy>Ow`08÷"2(P `晎x{ Jɭ|xHH4ϫo}|W_oY\.4Y ժD:Pf=鶢P@̺U2c 1ldFg ;xr2Œ\w 2XCڍsO#5F]ANɫC7iIR_`(z[Q\9(1S1LeH8www`ܻ} wwOwwHD p w]urnnn#v;Cرcv;Nv;c8s~@ݻKk27߫>Wg ;vn"RboϫyL3DD릑&#f>""} e344_ &YR}m-T$Biz/5S ۨR}}uy32}k}/&C yzvd_]||y^Rl2쾜)F_o;nn"&GF^?}w2$/<3_^^˾J_]щv_=rd%/3缔޻}wL2~:왚2 yGמ2AnQ̾:J^y1f_Wӑ&LBai2빤<̙$#|  "eyv//! |y&Az&}w0]]}wyfGWo;!/Pȿ &JWۮ $"IK /&_] }}wA&$2블ovend<_2/<̂׮2ۯ޺d^x$&2R ^tR>2۳/ AriH箐̞ܘ̾"DI/]}8J_]q/u4Ϯ$C/22Ӏ;̌,o~ q?$ ; 3fk q aX`|cu@ݻ:l@` @^@G637K=!xw=zbֽR>s$Qwj{{{W鰽x#YsyW]vx;&{o=9 w/fThhⒼ|ꇷƽW]]7eHu=VҜPfR^5u}{>{7Ci{3;MSL{E(bޛO{s۟o?B;^^Q|>{0NL_RN N߽Izpս^^07R>3UZbsx>yw~LrW8g5֛Dx{Y2Q^>s>f9g}>u~K3&c|<:}{SLf}OJ\d׽Ns+=^o7υxJ^V}wݜFl|i^z׶{h{Csn}){x;}ʫ!Zr?)GA=k?_΀lyϐ6mU!@$jO?uI>|A]YXZȶm/쾡KKYbJPu FJhү9Bʤ)V2p9J\C f)j23/%gAW&!`el.ȍpl FD\h`R$dE\dC1(rөU۫ Y m8NqLcY1Kdc] 4ܕ!$.JȘȘ3fXqaZFhpcr%2DMDiL0+,?A/T"1EIS[IVZJ5EE+lZ-cEFZlX؍QS5Ek-hFmb+[FVVmkj+hMմEXI65XhhTUmEIlkƍY+,mEVjTU2-h%Ebڍ(5mXhlZF*Uk[j6Q*6Ech[XMThڣQRCmTt7*UJF5e1t6.4SVg:ew*.bq7MLqg1׎1&iы[j4ʕY[0]7˸CtPUI{ B7`ќPL4L6igvmq182)hU%N c͚U)OwAҊ.*@$ ?KG瀙/q_7I'#*643VZ@[Ƶ{xbUC> 9/L!ɎsDFuP<9q}9Iy ?aM]=G>ʓO}}9D5xg|s˟!4g ïƻka&}!oY;5(>sH+Q7QcRt5;)IJs?%ؘT YkWZy),}FNp̄/UђB,-97u)]N|U=6Y]56V=̵\ %Oif)тIrUSwWVMs k xtvb bu MȞ=v gmMrS0S2[ܳ;YGL$du6MMdoy<˺}wٙvڪ˪n)2'kwww̞ros:w;:7s3e=գwwrw2fsww.{;{e5/rպ$krV+z'Jk-c{8Hԭ+w}=49I5zxq=7}}]='kww2Ԯm8[MLLwwfvnꗵyjd T,Zji˪|Atr{*d:veKX6EoR 0JmC1=!0dfsVSZՒHĐ.aKBd0g dE&,A0k44Mn)D$"cDdV3th#쵁aMde$"Bpݶph@Dـ0-,l)PD1O Py΃i>rLli1sJxp2f%n%||4, Fpՙe'/6EBFL !*cXm˅8apU|-0ՅLV+j8QFژ4d!?a#xFPYI<"Oj# "q|Ύ1ࣼᷝ:>NRWWDꯉ.xp*X̯(Cb q  k9ASsb+S#nm~x|O[M+=cr~Wd" 4y  i\w8?kpd0t;fnYD7#F42gРd.EHY/(rȔaëAg=!&IY趦^jgL%N Ⱦ_/z;2=QlC3iInBm^[8V `6K5Ȋd-TųN.@sRO_߭=ӳF;e_ƧvsNF{Nǟ)VK*~Bb!8bSmt@Goϧ͍+ɿ.]pC>1G0~-NT}I։+e6s f#%첲nnK(voe\c}=+cvO#RkCoyö Y~ \aк{yˇ/M=hFt9䕼4+ҟ[mn\ʑ}nT=7[rZ$+0w3vhAy)a;ut<'τlu$ AAr\Ee8xזEM9vY^>8͸O=8Ft|ϒAzMM7˦L 33^p$$S8vlgɍrA^ڞ^w9uǴ{]ݝ C;wtoÏi& .$qc9\Ȩ!nU 4}4ҭa_[3.âԭG^9'RjV_qx|:zվZwo!;xfz,{&vġmI% _rȞIϭw~>_ Xg%5W{a3AԠ fa88H0dCJҦ+ }iU£1WȯնcS{Z| {NwG٧FC׿~z},BΜ~ Q0~޴0w@5  I;iM-9ɘ7w̵;Xv|ֲ>u2t2&牏(5 {|#`pjsI~|H#_qekl 9^z=A*r6w|Ud0[=e6ӅkBwMe){ @8˖1RVj}vglWM?vWjTp rHg.QDjKsDМWbЩʹRJ'C%ݜ4.pښ\shN`V%ơ52r Վn9fg[@;۵{e;sd")½|yo~ ؖljGү6M:= mb.\  9C#z@p.qBtlʖ0s.wJ% 62=?GÁbLqxfDl` 8a*" C$p1TJI^ iJhIBCcI(B30#̓332 Dzj\ʚa!,8MPF`B5Ȑ|MMʕ0!Oas 7 FFf \=\ԂaBTs4nq +MP.t(`/kx::ww]\#;F1ʨp>s`?ǗB88 r{k_m%i^sdzHM.q;_eLU\hM0hbE4ϿeKi]91O~RR)BY2Mtza֖x3o/gY{߈vN>,wMsCuw4Nnp3jizvqw4 ,8^V MQ Oƒ"ݱ2kH&I=Nq/+ު:¸.rrWsWvdv>SێƂafN.IoBJ-vDŽ(70 /GЛZ,jw2sHLU kzIw^5O1ލ͌˧->De]uV`AE潵&0tn er+FG4Bソ;e[W]ƛ^RTCW)%/ '_ 8?R̈:2N3B4E>KA]IH.l]1'J32%}=x#o T%f{4eBS\TQɌM5TU64ڟ^9 W[ky3dv`Lm=ƧoſNrGQe}J oݝW'g}N͞˼q$=ss}زՏ~=BI ~Qݎ#XgdRMzjmGm6Ϧ\ZޓIJRPr=74՗}-h#NrQ˫oJEKY-,YJYJVT)BTP*RR$%R[%[)"U~%RT'EP JG+I"Y1]XnݼI0ț4ᩦъo&lcd2Ie*KfVfH[uK)|+|ҥ6a6ZMs 24ՃAˆm]1@# :a@Q&Ó4: Q4iFjeV[fK$eD9sMbcl#%H8&3+h64L$0V&-FU/H]m,`tmp!` ]BбFEG 4ѭbd%V-)YeݖIlbT %L0a&,Bkck`R!VC&Ѩ&j2E%U0PPE8!b6&Jr iipP֌$hkcf]c0m*l[ɐ)H6 `1ZppCWdDpcƤ[lrbF4$* hpT2e5 8aDm tcM[F8r4 B0c F BclL4bG-!LS1 &40bV1p;[lc0 I00t jfffid[nei~2fPf̓$fRjT[! bcm$[f[Z-EвIjt:+dBU;P!HP+ TiUX1(aI %UTFIjJ WDਥ*UNWTUITTq:.*\`omSe! H!9d5ɍ Cz&_ y(>atk|ރڗÌI$|p8{A8]h#>*@t:F0SMbq\OE\_r BgFfjWz!Y! &'=hdO{iS+Ӟ>N C8ԝuU_)bIPthDgτ PI{4~U mTiPi6Lb*1SI(FGg.ҾKóPcÃp҆<7r[Ŏ_jǠJc=ѵ>IީV1S?[0O<^wq^FF+ЪrJVZ6>򪽏6ɏhI$ 6*4I.hP^ƜڻSO:V^@sR."G>҄ w:1˫mm{X,wy2(H"X|w8`sE"T,`EBEG;$*`ܩ$2iÄ:+||vW2:N{dڪ-lyTc#Šv-$mG`"8!ƻ?_VvI&Vp .drΡJ:̭&V"[O뾧vEM5[wsU#<nfVc61oTTȺhԇ8tcYZмMbvkb0d9V3 K,*n-9<֎a.plW h{3{`OV401*!2=|W opv38& z7j슞ƒnmH YkƜ{|Ne aa9YXfn* szLZ빐@yc !fM&X[*>u&Ș}<ڹyc "0& =cHPЎ{ 4r2\\šP=Ӽwc3%m$ ă,31l>arlVh!Yk%k7ϗKg:,)̴7lOU. ]v6NKξwF]`gVM7/7CٵZff]m]ڹI``L-7h\S }6hJc4Ô2{BY܌n[[.^n]AP/}ԛsG%[7o/Zx48L̇-LwzS8պ9-4Zun"rВ$% pѥSȨ94ںrY,u$aIP)W.c8RJNUںݬ21h9mbDтvo;nSfH9׎8)ɜuk9՗]u[lPSڭou܄fOf_eUgZ`{).]h^fJ4-$Irtuؙ.Ub|fslmeN_ Tœvk\U36ޫ{:̇n9nk5rUGVQjm-(rXTa}B-AsTG;&vm\쳹-'&͝B$}$沄u]E\uuRji]%Nr09jJn;jř{[Vw`ޞ j\5ٱi(ٝںz,PV C, Ax (s!6-+9"F1_6(9Chj᧲ד'EèH# _ApZJ3`%f2Raw)ӧw*u.{"MUm:[6M[wfQP9 ]{s8UЗT.Kdͷ!܌dȹRm/ 15" <8.aRН]NSjCs4r;c3O=}4 96)Lpluvwf蚬9z zӦfgWgn;**|?TO{>}tӞ7ze % U:qz֖4 ^mdpYx7ztu+ti9c9Gf8Kv7fp=7Ω/r_vZkViebRy;k]⫂Hx7H|}̺}ڴK0{]e٥SX֯:Rd#Mp;@TrG/wd usyr!C뒑GhHBKU'\'$ݯP 3JffGk6h8Bׯ]rDn`5t:U2 <9O8%6_<{^>ʼn̨WU k'/<.ۏ"L NpV )lG|]Wb٫Pm~d>&6O;9M-kY>'N^zܽmB O0PAJ‘WZoLM@o=9pr=6ʥXIA/wyo.jhʳj +VTd (22ZwDO?#76UN}~Jա.tfgeqGh\5{国V !.~S .}+j|bs@Eu4Su\|q;>wyeO?^^ވ/m(\"`˦T{ZU>^SjүYS(4B3p\]ȕeˤ#-kX :;F}BgU1b GAi-ȡhT[wC\V8gsd]BXɼz}og hU)$L. "pywP\%5 c!h䥇ޔo1ʯrvin[y{ny)֞1Rgøԟk_xHi?Liw +-/KFe[΅;):>u}9@[J,x)!2(7cӛ: *ue2~1s~ÞЍfHj.EfH++@a¨r(~j )Msś%^;*>#w{54&wÍ"\CMv;]c=~>9'-w3`ZIK$~SYB|٦;()n~9emˆ̛M:^fH-bMPL^Ggc4ex*. lxn>C}*Bg7Kbv]`-2C M˚/ѻ^wTXw<=TPݟ;{C>W)q셿Zd8箛;}BHzBrF Rn?=Q@Ϸ#rJclː5_x+ +  )O6Z27Q5=!Xz6yK-QmFDdI!H>Lst>,V MJ_׿8:M#ʢYRՑ(cC7[|f@612oMh"5]wꕅ)OT2E:At ,Y:ʻs4b߁>#dqd3 f7m7^̈ 4؆$ysS51*( Eu퉯vW"\s )4QZU!v?>p =Ly/$KL л3dUe1'\4Uz.kt%v{hp2 (;Ԕ{1U$B tFץt4t;Vh*Ҏ9Y]GQ~,r=h{Րq2%W|_aw?g~o~'}>~[7>7/(|ɏp_?k?_˷?7?O*P *oQQ8BUZ,E?\4I `KIHhV28a"DbUMYW)`FM%&?kPE;]dTآQ(PfU&~wȌh٘+2jPKATKn)y0شHZpUrH3EhBeQT_éJd ߍ W(+C8 8)Kq Iu#@)o \Ma.ڊ۰fڍLВT1v"EtEk{ ?%"E3P9*KRjnRCy֙Lɢ8E'%d5KNkFd0ҧؕ909(0q8xS}%eq:~-utE_Pt~ =w4`,6W,fki96r' k&ߣf&נ{ %$el8laXi`4 l6m4ae7SlPm2$6M" IlT0MH@6ImlmmMie&)SLSplimImIII-I%&J amiۀ{={YcbN{z`0@Є!^^s v\czzz׷YeUwwwh⮰;*aC.w>Zsm[ %3}!$ڍbUi"dcVuld z{'$Oy2G^CB᧔ya蘸ŶTbuc-d_ 8>)#|hn5$BDN]cNrR#lEӡާ4m I-S5J*tNP_ɩirZʃLLd-KmQEVg{mn/6/6/6/7闛˺E׀mA%ҩ*JO{8ë'<$ҍE˻.sKÿj2;]QCHLfB!S9(%Ts ̰ Cཀྵ79%GSvw2UaT(8;$K&cGXIWI{ף>8LR2Œ$ZEvSv2U|xUImq0>67+1^a\ni-kJ-]O>Tv;%S::Y "V[^GfX@T]YqPb^NcwwyD8)w KITI3{;kE{ R]Ja2-mmIiM)MmIm@ !iMMH$ͷcfY3{ 1{e`03ZgZmy<$Oּ;]{mͧ%!lim-SA2 =o-l^{7\Mz׋]{F{w^{ռx]eOd׽{{[05<ޞKom2NDmI-i 2 Xl6mmM`(-mi$dX-2I[m6 0%d"IKdaZillZ%4hiZhdamS$a&im6ma X0  \.np(1b9|khdҕHą~jj\[mݸzR@yH2b͸h4zR[U:qNy<"bKM鬧@`u9+ Rp]g HxftgB'H[TSUţ++e2]Mʺms w瘼r$C0. WJ(zHED)bBHW&3r@JR? * QE@T4#8I#MS9VrѦ cCLr0:P!;B!؇V:j p.[w ;bwtB؆14b`,1MbW$?iT?}柿ڧx{APw2?:UTEXXxBȉ`Qb;(B_ws7w 烝$rQh}#08iT ~D # rQPA?@mձWv}J#>G*çJ*ThI4UE>G ݹ71L9rE11;`G;q GpP47IC ,ChQURk,ec%qƝ}=;ˍՕӕݧ*ӦƸC"A @>cd;~qr g3/3&VRй4)92gi:zJ[)^dDe1S9O+%)3<>T S3NVLiD)60ebY$u8pAMKRlO&sEn&D~Ϝ;+-nbLTZ[u&fPܿSruqM6;UmF!2Rpc2bbX@Ƈ[YJO&ź2l<x)Yͷ7N*cHYFjA˞xzA!RPSw2b΂0%aY65ΥJ爝0Th5QAV mFcZߗ%2(uL(_6UU:tAQIMeΙ4BTjL(@ߓt?G8woN 4RwnJG=g~DGZ3!H( Q=__o܉Ԡ%BcˡͥAvbbU5 Hg4VjPT*/]335,rE"D `\(T`c &` @,)l$I)2?xDb1QH 5)ĀH &Si@J t\AQԡT IBv[^.eHYs. $,Ha@@TK(INU%@JlHX($=FCp'P@DG+_#!ۇyyꂫz*$3o^u۶d#JFYLH * D};Q k-2?q9wܦ,0QWtbN>vT^L"2U,"M߰2WʝU嘨W&2V24rnqxp{ q08bT LtpްI!6DIkB".Aէy,ywwcu}U:rru,\|;1b"$`H$sO{VTo,ϟ 5e)sUuV[I<4FZ\ܲ,)[3y׹Dl(:znFbY utLHtڜq?s @UGfmDCKm=xB~we2d^ˊ`NP@ o$VDJ9mۺ{LPQ9J]Ȧ{0-NӻUp qPZ5ޱ72BL{t#%uVy339`hbʙחO+㉕AZޘfr# ХtQX=҆''/65THћs(4\Tt`eJj*+0sIe-J^سht0C1 .PW+HH5tTD🧨9''+Wեv&[(h[7wno5QGWzJO7#foCFܒF ߧ<644cThh0a=݆}C7 /#d[K 2]v!1Ž}_f5(Un ]n5$4d鳷 9locf&6orM C|p2WX`XS ; {׃BF78)xI0Y͛)n7Ǖ҉NZTx30#Aqm \rp ƆK6MѶ{tpAN*%r@(F"\421mhsx4VYd:c"BoׁÀs$|08m(icm6< ,m(ix Ev3rD @xBXֳ:;BXGufHgdOpVSaCMdSā'^;<n&鲸(H6LA:(mFSh*Ʊ*nu,k7"DQɈɄɆ&L12dL1 OMBxeoH#1BA Vj4Q$!ɟB2fچ4 dՓٶۇVͷѦ'77bڭjjR tEu@%Ɣ@F|,ՇTA0[63&ڹs19WR¥L1tiXѦjѦi4ikqYqh !eՐB,jIv ]ٔbx^">R 6e: 0c.!eIJe@˦YtBFU,[.,nHZP,%HbV%(q Կfbۺg#, ep t@%cq$%IEP\dl QCYKLf)/0'g/!CC@>!x !I$?۩``dDvE@YdV 1f@Mȹ369ձX HL`Q߯5" z/v!2;"Un^U.2jBGS&!2}G}1h Yde3dAR]HƉ#&e8,n Qy;ؑ*|Z"؝zwǽCWv;u]ç*JOq1ex-G=BLB&Le}eOcmQ5L\w_HYwv嗀%TM$Qb̸IKu3uUU2++qYZUNJZ_%f@J52vN\@%C]qO 3D 2>f⺮d%fu7ZQ&,dI:Egv۝{;CQ]U6j*)D2`:Ӕmڷ]ƮMgHkRF 4nP U T22 U'N4jvƛލQcJNho1wHH|7[6!sZ(4IZ"-&I4]gR5dI_ýa7V2L@;rݸ'393D>=2g`M2gd0b2 &r"-wmzF3&MapȓǞ(2=Q\1NC7Ȑ˫-*E-W{ZԋIg-CJ DsbPR}T֠eBQ3ZI5$`.#>nY =q \%Jd1F.k^dr[.a)neb^p@PY_E{j̉t{H.Գ81(q8d0@()JI{5S]JiRH?:w/35B"zD B ST2P"fYvT׎h"C RrQpr(l•T*" )tQfuZmfoRÎ!Zz0&, `K, *^!2 *!A. * a}\DO* LR1 jYv6x1L0bŠ˼cU(U";FEjL eb& Zbtn1֮ĩHD$ W)GZPy]]n aK.lmBiEV!,AN!".5Eb#\evs3(32HFA(A(HYו"]z򽷯{jq&I^ SYD!mO~cD ^*E%'\(V.evHa].SbʳR ƁNCIUw~uYP>`_gD^ 6o-kWj߳vx6U{W666MzF({lES&bH063jQFN<ۣRI E3&F%E  =_gzooO5]Hv,("`@ A d:\D(Tѡ"L(dlh@#ox2N;uvcP8Ҝ# IPf\E8k3wƟ+?w}Wޜޕ<9^^f+>1YI!&I'\ܢyLq)x "Ti G3 cMco k,=Ѯ{=k!䨭ة[J(_'\uT8h"H:n2UɐsH,wu3"'UP1me{ 5dg_Xj{;Z ^^u`6osq^!lH ux2lO61buGh޸z%uS[H2$nfnknӘkUͱFy1 =`v#`rPda#ahm֎yr/a;mP +ABk.$ɜpH]]K.*S2`@寇N(Mbm3DΆ`MqE.#@L衦2&I3r y6{~/G\r+pr*:@ ! pIt;*P>ڇ P3rj3ǒTU4U=]0cEPeXc0dT ۤMu0d!vU"Ew@+Bfݐm֣2A!g$Z55ްɔY1K7MB͑c퉝q$e+c3'sMjpZ3 v˱ mnHQ1t !MӄܲHnLȕ$;"d B e؜ӖmTqT>9$Qp/dѢF*L\X 1"1wbpdэ3qh1rE30P 3C{dHHt@-P$]ӣ9tڍ URZeRfƤkn8~#J oQP}nSjU"k;YhozޕUrƦER*Lovs{B".`£#'|Ē8tƚPnwtAATu(%3"-,[zh`ʒ Z(HI0$&EVIe nZi,ⶰf% E˯Tl*DD@.e>~e罽ܮXٗ:gڸ"12j$@$WVW՝u' t~67]?2s$ ax$NVjq R*}PNbʜ]pc$ɋVKY%΍cvD*CA;tq(1P͝TdaEbUUe[ OP[dVud(P@ə ^T"f\7D3nU%} #[νgt̳KFܐg4Y{x vnkݖqMnTѐiZ^̥2rEHk0Pw5ֻ\u#S˥V;hVn-$!3y6VHUۛ4ľ!]JR5CUv+PB2@pE(PwtPm$GZclbiZ>ȯXCXMKR@)@Ƙ% &)p /jf(IaXզ d nJ:! }MbmڑΩ\+Tg=;n@:ZD`ƢjH6B`Âb@R`X aC XSQ…K(CJp85]@ 3oSlalwx4ءB緫ӹ5^0{L8`j AXꛯ|:+GOYDޗAfӥnY2- gfJւmS}kFM*,$W"հKm,3>A"(ğlA/}6 }WpY)ǝ0{26 %Cіjc0ԎƆbzh؅xāyCL깚B6m]Y=scFb;w<3y;t^؝(.䬊3}U4e{U *ănp_e\QТd`El{w-Y(5ݘ"O 5W&| Ν1 ȔRr+/m+ͨQIDR>:qb<8Zr\8"oZ.L@Ȣ^CpCh@L~k=R(p7|tD/qkR_Mff4oaוmHu7-JoBKJҚ8Đ43Q$e]Dx`Bizb$$:ܓQRHqyk:t6dЉA谘;%C^IS18kT$N`Ԩq*b9#/ٳs̩)dW]'9w㫎 ޒ$(yAіqETUd*h5YQ8ge2e7n<.y{c iI{BewU:ځZВBn"Jʡ!dOA*!/;J4CH>PP^i0CHZ!3E[8Mg@smFJ#Sڹq X2 E((51dxXNVjEPB(l $&&gLt0@LJ4'BWgGgs,G|==1D@-ȀcbH8FZd!T e>?F'ę9}e{C}zy=Vu5>y{wGJ`sꫵӡ{"S7Ĭ8e#]of܇(,9DOnT&֩HpգA!G.{¬ll:<# *(lOӖ&"]\6S|6mvl5j`$`EIW䭕:q񪞹w - irf1epʭΆ"eTX$f9JV:C.\u[$h)ִz&@P۠ꪅM)C'SB(WU:W92qqڸU|b_oݦkEsn 0F! x5k(T:©Yٵ;%hT!BwTa+ifS>: 54V!5mBePbJHWJ3 jgiƯ4ɅS/[1 B1COf Krso;7KLݽM4N^O<~Lg{XP>N^ӒItsmVJ73:|6d3ZOYLDS-Q?#۳Sq^b*7;vrmاR:* aryt-BnTf JDjY驌x{PUͣ{mJwku\b'Vj0qYh֫r!(l*IؠZeD evuvk'74>lM wroy|BJ-iЏv˘coќ rRb\ V?BUk["@NsN# SJyS21$/f=#Zo+F@5oːBf8PE4yH0K0B!LQ E8sN# S\BiWR79%;iwi(lL;2`U4~ӑA($rN&]" wֱFqd&@@y -[ D}@hX@tϓ*V6)G6TL (eYdJ=W%(7SB@$Y> Z }F | [q8껽d1_P'BRCS#0;8Lթ)b( R9. ]7p<%.|ڲtI `Rp ٧(U'" Z@;WWYq2٣@s}=ͫúwH]7n 'og h6d[l 4f |}m.}HǙsònl*;-ȩZZ2@n,V<"K0BL4@9E٢n3EdZaW""`4hOf+gIhO- rϥ{GO |ZI_PIĐ)J7xq-B$ 7 8C៩e-D!uw~c?zDzO55b,^<+ss.S"U-^5tQF+eEzRLdL0<ֵ,Id5Q =?c4:YB-^^į(I q%jQZ^5, ;F6%IE7^5Jd^e>NA˳s9t]|c1`LcR2F"pd4C8L35#/}>>}e/~99tZ޽9[ N%Cf$H ,%D@b-.ޯɻBaT^H YDT w&նPj |hw zU\kueƂ1E`s5@ /2HHd5e  J"B+f0DJ s0BLnd$O׾W A $~ mEȘ>AYQ< .d"pAq| @#itrT p!AB03;֕U řɆV<( Aw}~oԢ¢_{E>o'_H"bwB$a$!H$ZԖB Dd #p:cHK@($Фh0hIb49!HonpclKtyK??Gu8NC3M 6`TjP"22Stl \91pfe P=r?͍1t7hL~A=cÀyƌv|oXqݜ8 "(կVK9ZdY8L$tVPA`]0Ə/P $b㻞`aM`xa1'|pə8Fc a򻅐͛M Sd-VTs; v`[>ڦWvBv")9}_%oˇoAٙ{vtע$D褵T܆,xLJj:;j8<r{ڂH%!>eVj$ J$DU:)Hia -fiyqvVP@> PMhCl=ޟI|G4ҽ4>9h#_F͔|?lsSԸjmP}3f}`!Zb>\jWmS#Qg陹,ݩ|Kg+A!D0MpL(qi %/#V-*5ȳ`L˔>zj'}3}1NP?LV 93L%jp>WFv-w[3.s{kb m-=}~)W} ҂NeR ;l~m<*ĮσXo^!0C2<gWH COqN̐CLe"DWG9˃mJr==fcM4SWlګt6{9Wy\ù]XJO{Gr)SL`m۹OxurbbW#ƝN74ӣsNJ9T6'Z0w fIÃ"! p$# ̂D ]|Xe Ώ.ico3Dv&E1a:+ρgVJ9cݜ+taXQSM6TWWv*;ޖetWE#̦;;1vb' ~&)UsI*xe!V;9RU;%UvcтG,l|;h]lN ]**b= | ӣF,W_hcva dLB.P8y#{}ˢy0vvvrS^/8kIT> p);ҍ* DA=Naͷ^u`>_Qߌˎ5^ҙeJlTB:A<;,N>z XƏII!HX&ɔ:'DHF=-<#+az^^G(11qz$=_,9T2C`SG˛e=뙽#G$XI\iUOX/hC$8/g abITPJYĬ}DaL|:w  @ InXI>V1oJByB7/,{cwp]SuA)$?2qi85Ikm7wZ^KDTުBU>;V&prFTר鯫g<^~*ivpQs9x9q"-B%%ޯ'u8ewbEoZZ{'SzU}+2@Dv%E.W6lǷ .{qOo4o^*y9GWb5fM[Q Rh[Ma=vGJW+wIjY> @ɏ2IzZ瑑vaG8wz1&8'PP`/T 9Sf=8yd#?TiΤ<{%)d0h] v_m 3J<ZJpq[)87t8S dc9#Ô $97ElPA#~g^7Ldj\#fH|觅نn~qvRp:v0ҙ4 $ǥ0@=o_qP֮0:d C7V>nLFɄݮg"{"ZR3N(wڑU⵰2VYOT4O5q Ԩ@ު @8"o%UGh=vRv+64:CkTln!5ܽ>.ʽa(O!!frO22JTN?g~Ŗc\Ỻ"zyG3hQ(؊5[)X"|dcֆݞZUc K-]W_Q|jq[}w͘cp LjſTWuū[IR:OOOcg6sa'>w{燢F>wJR&o#yffU*| еPWԀp(h`W4`e1كEџ;v{5|fm}1YmU5`j@^0B 4+x?22vsc4$ɂK,wwux!ݔbѥW`b5T[&̫32 ગ#c7ٿ@>~CG >}. & ?[u k)H=&!<n`G=Li% 2v{t廻''~ӭiU!9I6n,nۇH"xE h*5ʬ/iowj?=j_/>4I\33֍SScmVP =t/!G(x<L0VfL2Q%~& ]m^{7(q#DߣrDA8F}p3q80S3!1_/h/pP:gks^wgsۏaӁn2A@%ᎇʭOilٜ)00ma*ݻk27V׉﬘с'Qofle)-Xl59U_;z5ZpS;:\.Lϧkcz)5 0Ք$+eQ"˵1\vG % 鍱ؗN'OG7rs!Cx}>IAN[O)?ngUT _υtw,pN[p-8aweOMum^֫:Ç]^*9ѝ5)ߑCDjꚁujpq~yo~;>2Ћo.KNJ՘U 8ӋPw@KWm(wfRaƄ C&ʜiX 2Nfr!\ISz+AGuG;]\^"ZrW|2{_tn^|A=dcN.;7&d i iQReG+@腇BK8ӎ5Uqrmvjij?QT8TҌj0jS,5%j˶c{9!PH$awIhٰjWlW>=ymc@ /ERϘl?0Z~G7r>bm6N%C!UmcG&敯v/vڵN_wwH5#ov}0Q6xw4K96Ë ʋj88ݶ]7&nVab2Jܯx eP91qiM5-5$8`@ SьdS,֝'L9sbn}Ҋ(V5jw !Zu m4ptp{m oտe@ꤍd^L҃KWOy1҄#HQejs/ݺ̌c$0ز̇|ՌLigwffeveWW3ηm]Ԭ,O'tӣ8cG p-֚ܪT(5X.? ‹Nay㙼TT[Ue-s[aVw7& #3.˼f34l`K* DmSi.&TJY]UҶZ )ĉV SSO-%̫u9J@-1@WLXrx"jȫğ\$Ϊ1H YEF}Bߔ,VYj2jVKT6H2#R&FBDwF!PTz8*H 'r!;[t??kCLW  aZhD ˕So?N]+3HC1ZKA5*_L3%+jFF-ʯ ?ze 'IG90Lv$z_R}.Ț[4Ob@<(W~۫vcz&UyBj6]rhjDDD6  ﶚ206TʶiQvH֔;-sSܱFn[0a 4c/^w8prBaəU\A J%杴M69iةTq$M JP8@wH81nc䄘(NjN:r2h 6etráᏒ,uvЦH" w2q,KWUX2t(\ЩB2 DTJ!"-L94û&C}vI _03sHdLHtFAdT`G5 IޘR)1Cd}@HOOb!1CuZ$ `hXb0vȠ :mhV+FѴmFѴ)"%8A(;ƍٺŦjv^uR_ZY"ԴڏIBPW! >L>-h` Fc`#1/sQWy߳˒\iΨ??"d?Ox!%:KrL"s=E9|ԡ)0hhMí$bFt+[*ݹ)[[i.1J8 ~G3>v-*DY*P$<} }OCdiw> dhOwD }>ۃ_=sg|0~Ҟo+?xOHB|WR9[4ܻ]l޶ոDUԛ?D C=ZLR%~[HC M$"'yCG``HEZ>?dz@<|'£ ? $~&^?~vhsӰ}D)7}gh~~;o!$~),P`ʼn!V0g_>$DI#Gsğ2 hH`!9aAr}|_ůO!1`Dt8.>_*!/ }'s@춂] _/[<o,~+Jk_~|2<"aG?| @ߋTƁ_ɂmxL{!^j{ }$U H65j@K+tPC`{_-~Т 0a "H10PKw{k'z?R|>(4L|aCd3RU9;h@ CヌJnGmԱ)`16Q!#!Ww$-`-o<dQtbDD$242H4Ф}V}HS@c"Qُ;^>~j>ctMXծl>0DIO;HC  _ ~Su^Z94 OORH(K$#DR*8'No7kS5ۮ%fI3|y(O?|Q" } ~:!?P{;`{ `?'9 tM4>b)?*AG_ |iGgc6TL6$RC ufM $LOO挘ӏhlBR'$B$R?6O1E(% G;$L$ տ+?~[!B5A[ @NbѴV-B !'ww$BB*) )+(.+?Jo8(Bg> ~XVwLX•SS&54[jIuf6)7GYRv1aBcz}p4 euL t2 HI$`MbqP -5;ܰ#$Bhd0?$~TO)O?"*UKfM&$ c#!pA zW֡mQl5c0) /t~4iLJ©SsSp¶]c> K.;ZJdC֔D#APC~/* 7YN-54”I|V9[c*{OPKȤqbT?j}\P;GT!$rx I=#BtBHB"b#P5X2Gf(`BI "_mX? YRROJob5uzP֢PCwpRE{ B!1A1>K2_'QmV+}(lB~_¢_A\G;"yC!Y'|P1a%Tmm_a,YP/>Wyݾ19m0F^81򞼎,uGёvhTdJA/QRp0ZĘ)n+8l B####"8頪nmD2p22HKM˼$qyi$ i D4=#fEUTUQU0͆[c6 <)?_ߣS蠇 ;uB!31f''_^nŸ Ձ@kW^$dDf2K3jN2FD` "2K EbQ K&"ģA$Xb,Y" #$Ta*KfJEdeF"ʌEFY,Q !Q B)Q R#Qh-)K`2d3!& Q,2(fTL"$VT\dvnGr5ʳ\.]ˋjֹ]..\\w[Nk41ȥ)JRTIIII]֥%%%4VRVB(㤟"Ƥ0TT4>F/}{,*#FN$9Y}~}Pu FA^1G ]:T,q)6e$)ZФ J:|B4Bf1CN׮SC?p?CJGr$"N7>k'*j@; zq?<  ٴH,$NJTs^DT#'5Kг<⬬+B^4eq5̽͞*kKz4Zg7UY#SS > B$dH~"#B=D_HB/ʟ.kA=DfdU(rdmk|۹^ū*KVqzڑ6"q;SHCwr['[&9(`GkXVMENW\nJZoZ_Zt3 M*/-JđJhvEql. ӱ_Rl GAh`Q.]c5sj)E9YєJnxHI9=]27|{Uם$5™Y۾DzGB6yР;a}>گ<{ ̞6հm'C" MTIT-ZLWAS<+mk~oΐTMpO>WYFQ?QbOngcy>"Q(L[2jIH&E;wRs **B*dSBM2JU_ܑ#H:K%ZwD2FxR`wI'Ql=i2GHUerC> O10I(ȃ؅U;{NMNhޚcL= $BBR hdttr:M4drd2:i>o<%iuiVRI,V嚊1cEJ2382Pӎ"n'VFX[Ѯ&UJJYQUV 2Ze$pm/pU&ߪǵk\wT]M蛭UUUIŤtRVZMV1Er"ӛ1nnߗlI,ʒTRY*Sm{%4 97.QQ\­խ43SsP-M-񲫥$URJUYL$ZVh\c1hcSNݧuwtہͮTllY5k(bS)&{[FDDDDDyR+=zJ-EfEi-e%[e[in m-eeV=ZYE3)'b}ȚhKlba,(ZYsᄫ$पr$i:2K7i(? OFߵhm BC4j&źhlAP !a)]HJLꛜ,eE0K8'Z9L&1cvd&wPtrƕ]%˦2MS#JymNgqŶIBtPٖ[-,["P,ieK5L3)$-jh#L28`L2S,K(ZYEx6kij(ZT:Z3Uu m~e5}Ujfg̗m%lSPC Ǧ$Äݲ̳ %Yl-bYCIm[eMeN'F9j\^HBZ 5Wb`I$ݚTcRIm8e' L[MlR(t@H<Mga, N2a|F] -BieVi-ee4IMS-,bYJ '1Aki45u@B (x3B૸;5RBV@ʸF-U݆S0Qle[-, oa4t(r!p&mS-[(-g'/!(H%(<^?ۢ(!QIj/Q懼p}m~kǴuW~wUtpF *g_44 :]cT@dQ AdxmB,h` D"TCb`cBW??@d{N'r?ISѣcpy 4}޺hl6>D}Cx}pԣhƄg5>P)2ZfjD,Q`xOq$b}aQq"DteA(SG#@d,klc#RdU[RԲ-)ee# 5#2$ &65zEg14 IPΣ Ii~5묙ffYfMڦ$4I4ʊmVKMh)&VffeŀW 841DW2z?ɰ3¨Zj OJS2F6^GFI;7=dP{O$1=@Y#4{Mz퀉&0! M"` ,[zOC.?r?!k4}p2Y'ӽd>0hʑ#X>gr H dH~2s~QTC?8'WǨ_[hV$W+A~#l-GB$fK ġeTW2Us "F1X&cQm4mJ[f(``5dl>)0}48Wjx9C1e/aH"I*ekLDƋ*Ub mRmd`ɥYбd#ǂcZeuK-e@5dY*חֺڼ`@G/MRXc9[>@*Fk~_ǶoœhԳFԕX(zS8<~d択 zC$)(,eʅH*"T%mliCjߧvM?.AN(b"JF%*0cxDSW:*Sڨ@wlcR"S Tc"0b^J4R441@F,IK2,J5)0H@0d)R* JX,H1H D$Q_DER  ؀)p)ab1 ,"ҚmWmm>d%!>?ʸZ@~4;0G,XG64{U7(0,E Č&$%QTQUVz",ɒC1#ؔYR#IT443.Jݺ*KQƤmvѷK-eKmґ,H!J$HKabQ"fLipnIhvB B1D*sE(X :b byM%Uo³-36̶deGFUd"i<]Վ6妎80%PX9b4E9i[nZ`Am bo# h1Wq٤#V"`p ١݈9t`6)MN&Ya2d2(j)FDT("iW;U0d{dּmެͣy`܅URIEm]St$ nmٵC]ЃLhhb$`!-9-zcnnԕٚ+LjUulUZ\rLVeɦ&Tޘ4Q4D&H`#S%$ D08mp8 44‡di z8(fjPhBM4!2"5:04i,2IQInݩ˷nK[Ѻ/6זe(i[Z +JU`#XZ=̶I3 N;hYd)?3`Q0S&IНv&M\4> ǥ/P>PCA>O**YVhR~-WW#40c1JVLrڶ A)`\)$TS"b$*ؑQn * ?ډCC`PH z+ayQ"xtlA?4D~?ȒGCB~|HC{Q߮}G_!O=&E,Eh=R*">E㒅֓Ԧ~%ѠikQnHh0 `C(LPhO6M /!H =>&$H%%@@+-!PW  JC U0ۊp$[6Em5Ia%D'|)AP1FEiA"u(OuNORh>aWQ(0NP<lLOd.$EI*$H hx~_$V'=|l,E,%T 1?H)##;LTxU-9pD(aɗ쏲5-]J9ΎQ9G(r9;쯚j֨F ?ca0v`Ѽgmۼd -N90=ݶ[x k2a9 Th" 25$*lMmI Bڰ d, 1<2!OXn$ubs:?M@8K1l*!A}d#uCxqnduvdA)|7[7@>&m w|eHrwj1_?3jE^o=GUfJpK$h~^|?@v1PR0K-  i.h4'7RDcC$l}1[ E'Y~{,lԱR""SrCܞ\NJ>w$Mȓ\08%RlJmubN Jq;''m#F#qbLpXIe[MIgA HV tXUFԉ## o ###:FT&Q'?;Yc %+|phz}Gp,B1Ĉ^bP{@/k6PD⟙)=&['LF~UCz 10 `u=hZc>R B$iNՉvtw;Zv71nj5hPeݷs0jۥNM6[BX{ƘcKQd( "ʄ=, !QKImJXԩY=1?q]DRȊ-/Ɓ7O[" `-F=1rp{26S%BʲDz6M,% c% 8?|0>QB0@;"[F t hTRēGH B4Yy9alh[%O80)BuBi p|OKBR<9@-^P@躍Ej Gx|>2_}nK }d0=B`1 /E4)v yqTGהzC.ا} $FUDS`*N1AVxԡ(# pS`u;Q"I9ap}-wHyx4Xѥdp,sdHdCLtc>ո EWu``1B+}GWQ[>`H}K$2ŝw{%KwBB[*D) ɥDC"*$-vevlLݲ %dȰb T J,IK$%CU5mS66nMeK-k+3ie,_i!LQp**ZD;AbH!}aA7t L"L$$-b~gzc)X Q~}o H$HHNѷ^C  Ki 5t tM>GҪrlhhLi,٩i_Mar= |m"r0xS&hY~[g&<1J{>yǻgS)U?AġG1'" $Q4aS %|rK(rT1[muo608lcܢ[(L4`F˜mcaL1L0$lil#~Lm %$#m41 B1L ƌ4Q`A  .R:48tBrT6lƛ0W,p16aL"0rp"R1)p $"cR4N54KRΓ i%2IJP\!&I`7.3tLПĆ4&g,iJT%щmyM؄/pJJVEGo8*j괥zf/)Ҝ.k2m-XY!`2nh֦hJ~ P2riوJ;)0Ң%nd,F3UtO'TXJ,D`p#E? <Gvɲi,(B&R3LykIm4(2iO9y eb%]\,0jnzJE\ "̬-_zWSI"TU^Q6R+SRm*hFIĤğ!:0 DH+P*#Ci:& :[,M§J9(HF͈*(TZ̞?3mUU]ԐA=q|q$d0tl?XT<:;9DepY,*f>LpZ~lLpwg N~Rr|? ]u8mO9׈GdE"Yf1?[SDl-܍]y&WHcyXBHCڔ O"|IeJ,l$&EdHnD2(0(`$cYKĨz=J!"+ !+"/3cJiXӁ u^4N@ X "@"X!3p'>'[(PD >݌S9>vYܩ vU=D;#RVF V5!I%!BY!xY&Y&%b*Ql'`q"'!2'3dxU^y5=R*zy7CSVWṑ6uua,C0ww5#pv$|lm,  |•A mkEl|BIsH)'gb4 M62*v!;aSj'!Ō{@SX;-$H~W{UR>V>SGZi' aa[RИ+cn\+hiÇ ttp6 ЪLrx>sՎNjӗ{Rm&6a;xw×SNfQf& n4(v70uB!cceF nNEՆQ 1# $N.l(َC)fN,uwcMix9vm44pNF.ZtccŎn`$p! X)FppN1,8JӫSɴ8:'GU91c2ǃhؙ8i1ZU:H#Am:å9;cp8viݡ 6b7qlMfJcy4<-i) ]Zpѡլ MD Fc2;8t-dB!eՎF+@X$E)BYninfԩfe,(7M&R!"-9m2TɸjiT-Ղ!DL:+ňtx64p9:<1ɱ٫"hGc lKX y9B:<ۀpۣJ!LaM qaɋն1Bn^C`CD8G6d&f*-bns=d܎czv]"aj4cm 64ǘ4&S- nH[lB 41 @ٴ7d6z!Ө^4y -B2tfy:0x:!w= cpaXuS#sp7p;ĹPdSP6i ivhh4c9ic9<0X,# Z#Nm;À2 z+aJiˡLD<!p4!Wٱюa8'wQrh:=Mд4@QX;ix0 !Cw#b%]])\<H֍fDMH+&Ad7, hll@r #Ct@3vrP셐5&a J2P*s$* qKLqFrf\[geʴPgBjQ4>fErt鴱.ƌɧW%qκkYc(8O-D0QHp#A-j@R%]J(ՎL߮j脫I]@M~XW:VCQh!ƤKt6Ŋ٤譸0UU)EU)cַ{[ytD&'Ϸ}$H;,.Ft X.܆![r>>v* UBpGW5dg4N6djcy1N;/+\OC'4[pAB@-ںvbn9uN:m9Ch M5p!$gT-) LcҏWWBL Xbv>BfiI,t+rtU=/r 40EXELab폙C"8 ; FD!3'~BeiY%yuӝ/.oOUu|ZRA/Ǟ>k[ݞyt9-曫mP%GYKPy޳nr}n<w:W*ª8Vs.N擪{$z& ";:@%T$'Rk3msk;`YaZvW\n0QuqI#.+2Q@I8d8FM+p ~nFD{OGe4+mZ2hIVLd18`yAC%k q8 R2vELFUvsڦ[ 5$i XE?zI*ϩu;Hu"-\\S#Rq W3E!(b%>H\1ayxw=1//VX68a`c|Al|ҵ1.d޼I/pý6Ǟm"]jHlv469x8SFu& SyÖ0t*ji7,2]1T22ň0D p#1oȢ6`UX,FeUXtлM6[y+Xu$Ԓ[}^!f.뻮Y~2S"4DHDnRMuJގfeZQ-{nls@cǛ6>6)LGTT,$ <~ٶٚeL"`I`#r!tz, A(z>"q3-=CH2O (>b<\-JAH|4zYeJA@RmkelK!*iYPm)bmZTAE RHZY+MjmJfif>B:'ȞwK K6YeoשZV֙3ZUlR4Y+kҲ1ZZ*R~0!#C|1Pbdf UUTOҩ6h\s3j(I +2w<ԁш=~qJr ZyOA;;H0؅ 12!b2T,bX|p @di.^^J3sFWH!F1(*m'攭KMZK?o 9pzwƄ_@ b*DR1@wS=1?AGZdXVOPJz"X`8ԩ !FK(q52TѣRjj$SRQax11UP-8hdG* - I!uc@쑉CT0:%+n|Q ix>/|L8!f4ptRCv~ɩV ٩˗CCk!! ~`5$ w=aE%X|2"ȥad,{ς>Oclb-1BSVy>NU46_YpCutr8m+ 0 ty4Ot;  0cJ'7ó݇f:ͧg.NΌCSWc#6 gBX)M4RlXS0C 36KH9pS sbjf"EU;DjCP)2\xQBІ',u@Q#P4!HBܴN*^7lS5wqoRW&2@06ݖKU.pZK0H$ B!DSbesZUGC !h`Q CE (/!H8];wM<c}_1!c1˗Ǽ`v) UR!A|N(+GY pvzρLVq0[Lcc]8h:0`r"[n]8pS !UXjdww`ӑ 8Wdv2I ˚O<-¡RF X8L 1ƇXiǒ6 8f ԙ;Ԁ$q OFjxf'pّ1nc#*iýMr4㌌ T6̊kZd31Ly8hCmƘ僒 0z!BNMW 3ٍy+JM,x'm9tV.s7U`yFΓ jj)h0b!ZMKDb!BA$Q5.$Ù!Nsm sFs *…(B6HS5QeljlwddAp#nD$闔&OY<BQ&KY C* Hw&sg`ɩMU:W.ۂ!>Z60hҔc pxd F1X$x876Y(!gۘ&K%%,KR,9$YgzRrH= pLLiAJ _ 2|Pz p&7 utg;p 9|E=j @bCPGK/O js?~wMzt-s*F=JDu0`~G^\P}hI &b,F*Tj` i)1lBZ" c@JLK0m2D,PBүD}8D8p J[)d1FD "&(6^^*sgWo?I@ /(Wwݏ(9A|AgȨ`@!SZ`Z=-KrD3$||$}PcXB :1=XX[^2JPTZ''Тʖ"JfbYiKFd&ddK)iS)ZkRJHe*ьTIbH&MԊ|{Q`U~1#؀wl`?DpBDiSW\{QR>?)a)Žter0:aNQ!NG ##? $9m  #!aA 1V0QM>(b*ܴZsM˖.CP`? &(~DRUYɓ%4CE ꣣lh# $ A5`F0(!cTFO`\kBxC(dKS84dTNUKUajԖ (Ӻ陯ntWJVk%T/?VHD)HFB8Ʋ[5M0ҡ錕,| wr쫪@WwWhWyWy{n]xuUà5wujW|$I$I$m69PNG]U%\Uڒ]Зwj]ݩuWE 6@)2 s*[ DۈuqK.ԻRIUpIupe̙n 6SbIЀhVxǾ6@`|b$H@RK؜pth!s8Rb,Ԫ`L|\]2c!o9 Id~U dA|r!@W`s y!O;>6M%fI@!L`-HPҴ5UukvԴYY6KYMMj--]MFey5щdal7MkUЊ( "0FD#R1~ 8W|Š'D#kDZH!H#b1"): HɅ[u4FGTLG?n<_O^TnHF"H)*Q2#8GIb$PX*yTt#DHdeRҬHT,:٤5@NE ɡb})#_H-M>6޿Ut0DgdFxFFeCCcHAcjnI[V]K]QH je򠯔 h UUzU1URL!@4X#Cfvo3WTͩ3Rm0H B40bB4 14m H-*SLdP]e滫˭Om]Z,ʚIQFe+ZkZtIVjU%usnLZͼ; ;^zݛd"ͮs{owb'傡9W&+ dYX=gZ %- D UUB@KR<ߙޗ=lp ᠯQTʖ5L35YYenf+knlԫSleU[[2֙Z[]je,mfj+\֕eYniL"`2 *@ Xhhhb]6UIEfYʻfK6̵2YVMḼ5h(0F+Bn68}p!O|4v4S;В ” (U[8vHvM!!UpAQDMU*6' p8+PvRed E My͙e6ٙkL2QHV( }Bow4e=񜟾*GqsF1cLʾe- 8,HT*{"1)- DH1" M ؠB_*Q>H;=P 4>Ɵ}Ɯ>? 4]W*^2|plY,2=L>(Y6ygqAM:cERjJ  U7kbMZkT #Lcpx|. >wg."#lhX1[%Hf0%@wC |ЀtyDu;NЄVa;bUeI,ݙ3U]LK%IRViRmd[l1b G#@{M9imԆP 4ãCncdBBFt2282I#9!4 `*Mc024mMCfI>.]][hhԒi#Lin}C$iâpQ {QX0 [`itbHIlCFhfTd\尶&3 ]^)AR#%%\T)VLQ @H@ 2U=B+}I J PG?_.<>֐P FS!+ & z)>ǃECe6*MK Jra1OƏOcM4 $j@c R1i41 {DQi!jeJumL?"X?m5,ǩ1EلnsJ-%[jҩJ'u3k2h}O $X bEy0y~H|iCzIQ= bH{4mWG#pă m4 M\zLL0i[cG#i% my91[O;9Ǡrm!M^ӣc^qj +ˢȌ:8cj]v1%m NF=.a>>jHꄷFT*DG,,"e㣁5[!c|e9{F$tFOb"  ԊzAabH"eI!llͦjieYRDZ6lvp*_j1:y6%'(D 66jP, PB /x'ayXDKXdjm,-*jY AD=(6؞?).t}huL$霎xIWk_-b*QSY $F1 E"dDM!SFL!Y-XرCN$N܏Wi,ä1= cg iՙ:*$v,W#u8x#JD0 &_4:1vFAQ:X !޾G%+z0}<$c~@.Wް,$?XUt[,&4ԭiiJZmɓ6cjH!bP5 >p!(qތtL:&cFت܌ t)d[.T'$na Y$5,hb 4#S%"&Ux(ҶECHJIҴhφ6TXK@q!3ekmY $^󪔫vLu?lC(}?pA:"~c=@=B).3M;^.YI'jGL12T!FD4ƚ|/̕<LTԩ>`?*z}<>pGA'?|QG 蝢=C%4? 0D122T[ɖ]LUV\e%bq> !hr"4i@*i$Pi$lMH%c6pH"6(H--O*JQ DcX-IMId*5$$2T*1ZhB wc`Xi,Dc&%.*%DđR&J[i QFRR$.]V+ike`$DR2TMG-O=cw X#7lX;BHV2bbYr}ݖ.CJ%5 ʹd 2~r2M$>i~Oc%mK-%jZY$%,~`S  R(1Sҩ0G`>jJcCK-\fմ !W~e{;XČ`aQ0Xrb|m>e0#*'' =OG@j82n<@~Btm_K,{ӁQG5oW/9C>$E(|(DG0S 1̂}oPC%1i!BMF1XlxP*X&i,*M66Z0Ye F BƁ !>l Di;,4T0J@r!!0D ,-AAlhT\ pIJhmd0" tB(d`UM%UKHEUYV"*T52$SԂ|$c)ToěkY_z5WS,V8eQ7 u)!"5jC  weO硣Go􏈁@LD <^ m41v ؑ!OC8Oӣx~U2pLIE0O8fj͡BrnO5;KF?| 0D*j^@h@ h?q_> "?_P?) [1imͻֳ׫]20lV\ijkZe֑SI P(5*JUJ=RyJBaSi,ֿ!"'Q̑waP*KKd$E,a l[ f#bbJJR2a=*JE0K,H,UU&T]K"!Q,'jItyzQ#C1[b7Ԁ`9T7$#p&ʾ(U,JXqt{>l{M[t")(^R0*"1>)RK$,Y+RIFjcM2&5RZTHsDz@`(zd `u/EaQjY22$,#Ŋ=J{0"; A J` HjTH*Y#ku5ʳJʦ-CcB~FRi(i+9ipńPBAN*1=4"\Ժc.[͵Jc%hysxq5~j0"Ȇ=tstbݏGUy r, =0rgC? @O*0"~P, b$~wYxq$&N"ʡF+b1 )I:rK,Kq_a]0۰Q F0nT -}Azjܜ$A=B=mzp7ux<>"|F"PS)Xxy߅44f@;+'&96G"B x4$|<mtAR1`c arpbIEZLB,){z3Ɓ=p( `d`B/!N#Xv"xbvQ=?N_4&5-?7d?'G$$Ȑ(VJxA I#)bV*Lc%(bY#LY$c[`4"P1#e,pۖ`8mJC2ŕ7]eL̅If(dFhPuS,(SJ k`וVYY! 0TT0)evu>>apjbYSkY,2ڙK0ȈK jT1IDUiB`D)153T5i35[Z`A6Am1Z"$bcҴw*vjgj8;d;,XmIr8Vm@dII^H"DvtOaLM$R-PDc:钕Ab%L@iOM& # ? Bo}պAtG4paqpBL Xi(%Qa.21wUo0aqHbc'$?}?PF(@ l4TO[; !AZGqT Ybh$  j:"EL#?aaK`p1!!c2@ƥ*,e7#' 0V+T '֍e@H_BPP>d#:FF()=ERum$S?r|r;'db]Jw EPT Dp> %<+ *YID{s*'X! DՁ2aZJBYf&љy&X$B:1wQh[^֍ADgXkøfNj 7)?o h]kzE՟Zp0,-fYe23 A,,uT0cbJXbd\8W IBNN'f\MA 82IexZghWA|f=#,@F!A$WSV ? "}ȩdR*RR*K,UbR#aCb2Y_ONOIԜ_"rm m")m4+ Sf8EWT}w!9OnT{"'7O 'a>3  @j*z_p<_q  EPRejȭiSSD`ԋTlb"9{U_Y,JS-RɍU,V w!Q$'{LC}I$pF#H*BOzdU,Hե60SbOBb,t nRm-JJ BC RH` j٪-S7U٪eeQl ,pۈpUHŐlq8b7)2"S@DUD $a,PURY^؇qE~6 Wdz4$B1F @#ŌQeK:0CRԒbCh(SۆoPuDOL ?,E-%OUJ<|6V+0Qty6Ɲ \*:`JS֮vSN+hjIqʖ6f!{85Nӫ49,BL \UT̲MF, Nnӳ"H` `i0pۄ0m:tx:1.SJ +IgcV[oftvxtiΣ)- !FFID(dBN`v<68z4n:+1 .8p69xlpcc.G h3DtutlF&Ӗ, C0i=5~64t"Ap"qy$`Ewt#N[\ C9tBAܧGWa0`d#gAl  c= )vr4ӳn.5sp ;!ڭuz`p6XûB6D`D84;cJ[UۻnۗGNI۹cp`j6 l00p;pƚ j9C "H|N#l"'F8F1 ؜XǛͷB;Cm6[LN9\l Gqp^M6H+ɧG9L$-p '[iChz6x6LcCaëNGO7,!gT!1 pD:V-N&Y; 훥blspOd%lvڴ]x@J!F/p #zѣyCyvÉe u ;*Hs)ˆAD0ۄ1Msyx96\*lb1ܭ#f[F+oOI HzCCbduzgSǐ͌PSU Ic c|"tr  (ãU16!j7*{ * bK4RT &L~D) }}-@Պpշxӝme;NXݕʴ让oCeRbivw4Tcl:8Tqy֖ k8xn.ESj.?3щI_H3CDel;``b(楻,C-׽-QI'RyomGA-z({de6PCfOS I~aP]d荏yawp? nYIN_ YQEXW)a H(,TVkK$#nQSDTd!igkJ[-Zé0M)nZlhIĝ`wÃB͖X*uq`2 pl*(Ի,Bz ``TgDf"?޽myϙ0}D)ǿI!bI=)XXkO1Ed*z̚Yld"$2`ܽ%.ձ!4 4--|ho$K]z[BeZYݺFQdi$b*j$i$`c$S0(h+F`ǀĦ)b[HX+`61Q8 8a`0N2HvۇC,۶ee&+޲էcAC<26&5 k->btNmuKi9 Q/斉;;ee>әHZ1P!(S+|&S"~=2F`'nx*{jNbl$)_qQHt8xdV,qC5^V+BeV==pte|˷߯o%&K&K;/pͷqsmwasCcre |Q02jFi&y,aV_"lUNoX wCw0wP#ARyY0x'0Ө{#Su GQ^*)O5>px BCGHM4RV@[*m+M0Vi,h#Py(c`ZiFSm64 "DL 8iA!pN8Ya.9ѪȤrܘ.[$l<=:%eeƗiD! =-IcXtro)l1K]m;ќܹ2{ɱў~EyiCQ8\G*ŶC3|!Q灓DxKJs:Ӣ> 8m< EK X)-[2֕-M,l)5&,S*DG=Wc?xu;0&ZCXaᣦ\e&i% 5Ŕ0=S(k@^g*7ߍcR.l-=\<.* xѲm[F18}WU:%T Gէ-;4ӹùJ~9Y'r6#R9u`< BGAmF6\hsKK1PHuV0x+',r1Cl<s a/ Ed<aզ"Gfѳp`e9ÒۄcSWZC,][CflǕ "­3ǧP圝];+΍0``4,-,lbމFeJW2H`B<^ `؁BuUa@u)ĘґZ1{1l|-i@ÄȀl9f~G 3;eƌGj͋F"xytѳ|’'|]u 0T10gKCK܃ hU486҄8N# ֖Y$! n4}g]V-rUUM+*|B 4;\*=K$?c޷)5}~z3y҈<$ O$%K,eK-VHl2H"ʮVnmQR+l),"M,6XUJVb $r KF$P"(hY $K*U;1dKQ Pr$Y!KE$ԂF$"A@x͐Wԃˆ`t89i_)d{eJUUUp aF1lh}ѥ V|>'">tvyątwF>wE%5J}Sd# km-Z4YeQm,2Զ4ͱѴ4c[vMMoށx$mK¡bՅT>tlOR)QU R%DEJHX,1@"*+V;2y+WiffԘYd,PfI(deVmnVѭcRlEYDQd%*Bmje2Vک*ԲԒm"؉$*ClM8$&Ȩ0$|eCe%L0pƚ`ĀSV݄d@*lHMc#bQH Ia!cŁAG`Уyl!t^/{4F ^-cG[M p+c!EiVڡ[HUD̉1"X"rIB Tb)Lhc_kդ$j4֥fmf٣J 4vi*k*Ii61 HP>Rǿ >$ SԦY&&冥K(B0V6P1(ZbcA0Lb-^Mļ^U5FY0z)t[]j)͸u[^MBIJ %SV3$}J5Ę`Y7O8ܳCD*wJJ)U^g왴)lES%=`ʙ88%N`*LD,1 $,+Rv]37Lݻ2V۪Zݫ+[$VŵֱYM4\vcbʌjwBilkUzfZQ`L*`"B@x":n]XoСCSÀJ$PJ(j0 `+ۥ%6ɶefT,drF%XM'Iٱ5AIW_Jؔcrӗ!&h{[hlS#.`8um 1.X#Jʶ$LJE,V%ȍI 2KKlsXMBMTP( ; `1&R2ĔE*RMj-KcR+)6*eVYYbB)"ĪRIfLZjeffIe I fi5& )dRƦke5)Ka\:R(+DOp ADFӡ)+-՛f۳SU2UJTEa*1j☙Q%z!WSTli–RYd_b>ccC"29@6 񈭱pDq+i#@ ;'f&ubqʞ#DG:h^87 O¼=/'>ؕ3<"~b_@")0b,쇧#aQeȲǁi$$udli"3R)+3&$Rض%-d@3E+ounSvmC!fex$'DJU|!GO?DD (Ff(mki[muD#DBBFGc*/c(; B'ȥ1D)v[ڦ*%jIeP5M63+LD6[_ֿQ#!>Yb K8MI) *_"Fj% ȋ($ P}*{CtkjeR͵LZKjje-b la_~/T>ꥣXiG aPEi B ұ`E1@<)#CiSbO45XZQ]Sn6O @6ECP&E D*6H>ȑ_ea@ϴ)ʣD b_}  JR+X$Db=F?H8b4DDV\1TEbEAb n]dA IΊ*JKRŚfjPRM[K--,Y45E"*K%"%$" NbYzmdY@^WWA AW_"S,zeU(=ߵ :M?$16qF)ةTi!0WB@QCYE!U}+J-ԣ9 S h7yOp*][7f#2-cWm;=c;;;l+/1Z1jYd}uwc=ge[Y3X? K ׌l٨H͗]zW)z1$ fF[ A>u4ӆ!K S 45J(_ȍ`)eԛl)efm+vjUdi` 2!. D2'GFf+CL ٨r,i6Oq>cP£QVFS1M' g`Njq ZHF,Ń-QQP{Q:d:5%ITmւb bV5ţR5chk_֥&'gI_TO?<gfjdAD+b?_M@}A{*"Sg%־w)%R$JTJ>C4NaC U{XoǤ@Ѕ1S[<@O P*v{~#d>^П"); j n27aCDSQa?@X6`9cI,. ofN0N >O蠉@BŐEE" c#%h=|@yG" @H4 0*'yB @4Ƚj@y?ÏQ*!>/7XVCHCߢci]iH"N$I$?`O*$UB* Bt aZ i"Owu[rcBuC`cl:CaݰC-PLP *!tÅ] .dgt.pÚU 6ٚN۠&2 ldP B 6r6CáÇ!B9T֒;YeÒPGlP3:6mpPѭ*Qlݻf.!.&pwuèP%(]d 5€FÃ5WB:Kt+!PuՙpB:\(T+w:4ZP|6\BLT&&kk˯~p?Eh65 ofjrGMk4ejNϧxji|};О`p^O"]P-S{j. ##R.KgqK;q{ivqfZςeb_VdqdQܵyPa~ϯ¿>!B"UHI=CKCx(=zpN4%XFAlT "+fm4imSJVVj*6KiE*E*E,E,E,E,$Rvw~G^ZRM $E)RJTRE( 3fl͖fl͙6Md4M56i)((jm((jkE) I>8<,?ٯoϭ/?ʿp$H6 Tef#*Li )):osfƬэmv՛-.S dJEc5d"D ٖ51aLPi*1TؘAeP` yH͚-cCĚn1DzEi.&ԙ)x6L+hõNҩa+"!*rհ԰̋&JDm" 3" 5 $d<b"M٨S'K!^EE @Ӊb\)m1aԲHkZx&Y2HH"L54A) "Dɇ2ZRMGBL:txFȗ3@ @,qMK $ CfZD JrX)ijjZڪԧ$Kqcĉ mY#zPZA!:6Q,M0("ɂ "8.<Ńk&'CO0<yFF((@aYR$"/X1D1ܛ BX&vŃMAD e 9jEA`BA2, .A *X(Ĵ%,MVEJ'EQ+#:h ae Si L$u., ʢؔL$q0$wj&To&r^QIO_g{zr CI멳feL*[wrIȴ$t YDtbKJ.Z1$$'jh2%Ɇ&]SL;ɍhQd,hM<$Brde-Hn;uحu.A&@:y(RNh.cJrrIRUU$*uw;e'N߇R+ hRIN 4B2 %YTFˤ]3 qR)"NQ -u4­$V6\^M5zŒ1vj$~H5ȉ& w;5(k I1F.DebC3#rG7?bXTx"}-Y#}gC8G8FQ>dIqcd٦M-)Dƾh!XvNz8DןmH>>͸c*2?IX6EhI)5>?-$ذI& eFƤ@dTm:^kK`J %4~tgO?m)6wyi6j9p.OgHFqAdM3TyIn_zz=y BMztgdyeX^LjNUߧ*NCԥ44`{q&[^T]4ӂTԍly{kv!ƤDcU9QZ@SC{5kVKWMtrIfwg$#:sݶQU\o G V ~jf~,@~<ᆅNZXѓfeekS(*yfLge7vgܚį2eefp$Y>33]v؜u{0۵Svgz4{}Ev.۟:5*ᘀ\,VѳZ4Hyde}2$)gm.%f]_Rܪ@7L^ؗ<,0f}" NmY)ifʛu0t!nV*cpd$׷LmKڲd=5RmMBAXt<Z.|h'2jnd#:"n{'kl/]d+ l.;X eb0K v{^UӮPmd(guIv u39,)!3UjMo-軪8ai9R$rDB \Wxͯ6\5vG?D5?h)\?Xj?+$%2yХ6iPҌ3m_&z3.ium%2ĪM`E6krk$1$lFJԶi KiUXCŦȻyLSWtyməɁAefü>xO޻nd0$WvSMp╤o-Jm6W-:(Ue`pmmp:j-du\ iK҃uk#-QWKToV꧶̼T'T5$*)P 0$?(?'L;x:=@4M4bi4ѣ O@ڟ~==G~h#Sz&х?TBO y4=4O"m(Sy4bj2BL! Sښdy&2Q HѠ2O#Se2z4*{SM$O#)SL&&QT6_rxV)}^vƮ,b.1!gnD0bgi_ט::; o8SF2P SbD0Udݶ}& D> K,/[DYPuh;ΜK3e2iՖ*%;{dʅ6,0EN0ET H'o8L1 XgX[`f%$OCq:[~X8F58{,4C1ٸ3SR(}#>7;OrC5Oe嗀-5MP`LQ|_#+]Z EHٯ>Q6dhZ SS2Dhۺ uJ!(u.s΢ |<L2xͪY,53<&t(G3; E3~ QK[j3(=Mq] hy8цw'czuܡ9 k(u.OZpPR:t.%3adA&yl DžQ\ d/k/Bm)H'dEѾ8Ug,nX6 X)ͦ fhpS/. 6F9z9)Wl釿:⭤DO-Ӡft (ڵʑ2r<&ܾv T`{[;-DmQٲϋΫ&&uz8r,49x)r`bF`Ɔ mOn= 9u1(ɭ_(> vʑnRE\)seC ߚdž\꓾Oܿ *]H @$1& [hev.51p E֩,V kAv6BAk%ϯTQ8F4KuЬJIHWWHP,m|-ѷ۰3N|iNdpG`4WP)_lzBy!|57f3$AgV÷%\G~N"eq4:"2(FlG>U]mZm`rd¿@+~!~inSsD]ܥ^5j1koKس)R}>˹ǧmv:GFp&w$S S